[crossfire] requestable spell lists.
Brendan Lally
brenlally at gmail.com
Thu Jan 5 22:01:58 CST 2006
It took a little while, but I've now gone and implemented most of the
suggestions from earlier in this thread. The server now sends the data
in binary form, as well as a couple of other changes. The tracker item
mentioned previously has had the associated patch uploaded.
what follows is culled directly from my proposed change to
doc/Developers/protocol.
I propose:
That there be a new setup option:
+ spellmon (0/1)
+ If set to 1 the client has indicated that it wishes to be
+ sent the spell list and updated when it changes.
That the stats command additionally has:
+ -spell paths: if spellmon is set in setup, the bitmask of attuned,
+ repelled and denied paths is sent. These are all 32bits
That the request_info command may additionally cope with:
+ spell_paths (no parameters)
+ This returns a list of all spell paths in the game, along with the
+ number associated with them. This should be used to parse spell_path
+ data in the stats command. The number is a bitmask but is sent as a
+ decimal value.
+
+ All data is sent in text format. Format is:
+ number:name
! eg
+ 16:missiles
That there be new commands as follows:
S->C addspell <tag1> <level1> <casting time1> <mana1> <grace1> <damage1> <skill>
+ <path1> <name1> <display name1> <message1> <spell2 ....>
+ Tells the client to add the spell(s) listed to the list of spells
+ the client knows about. This will be sent at login, and again whenever
+ new spells are sent.
+
+ The fields are;
+ <tag> - (4 bytes - int) The ID number for the spell item. This is
+ going to be unique, for each spell and will be used to refer
+ to it henceforth.
+
+ <level> (2 bytes, signed int)
+ The level of the spell.
+
+ <casting time> (2 bytes, signed int)
+ The time it will take to cast the spell, in server ticks.
+
+ <mana> (2 bytes, signed int)
+ The mana cost to cast the spell (may be zero)
+
+ <grace> (2 bytes, signed int)
+ The grace cost to cast the spell (may be zero)
+
+ <damage> (2 bytes, signed int)
+ The current damage done by the spell. Note that the meaning of
+ this number is to a large part spell dependent, what damage it
+ actually does will depend on how the spell works.
+
+ <skill> (1 byte, unsigned int)
+ The skill that the spell uses to be cast, if zero, no skill is
+ used in the casting of this spell.
+ The numbers are the same as for request_info skill_info
+
+ <path> (4 bytes, unsigned integer)
+ The path that the spell belongs to.
+ The client should determine the effect of this by comparing
+ these values to both the spell_paths request_info data and the
+ stats info concerning attunement/repulsion, etc.
+
+ <name> (1 (non-zero) length byte, followed by that many bytes
of ascii text)
+ This is the name of the spell, and should be sent to the server
+ in order to cast/invoke it.
+
+ <display name> (1 length byte (which may be zero) followed by that
+ many bytes of ascii text)
+ This is the name to display to the player regarding the spell.
+ If length is zero, then the <name> should be used instead.
+
+ <message> (2 length bytes (which may be zero) followed by that many
+ bytes of ascii text)
+ The description of the spell. Note that this has an extra length
+ byte because the messages may well be longer than 256 bytes in
+ length.
+
+ S->C updspell <flags><tag><vals>+
+
+ This updates some spell (of tag) with new values. The flags are 1 byte
+ and determine which values have been updated, and should be re-read.
+ Not all fields may be updated by this command, only those that can be
+ changed.
+
+ If new fields are added in future, they will extend the flags bitmask
+ and the order will remain the LSB order of the flags - that is, the
+ value associated with bit 1 set is sent first, then bit 2, etc.
+
+ The format of the values is same as the addspell command above.
+
+ Only one spell can be updated with the updspell command. A spell
+ command should have been sent by the server before an updspell
+ command is set.
+
+ S->C delspell <tag>
+ Tells the client to remove its information about the spell Tag is a 4
+ byte value, the same as the one sent when the spell was added.
Currently the checks for spell updates are in level_adjust and in
fix_player, I think that covers any way for spells or damage to
change, if I am missing any, please let me know.
Other than that, please reply with comments/criticisms/suggestions/flames etc
More information about the crossfire
mailing list