[CF-Devel] Client/server protocol enhancements.
David Hurst
dnh at hawthorn.csse.monash.edu.au
Mon Dec 24 02:23:23 CST 2001
>
Sending this to the list to see if anyone has anything in addition to what I
>
describe below aded - its easier to extend some of this all in one swoop so that
>
different revisions of the same function are not needed, even if for the current
>
time, the value may just be zero. For this reason, some of these va
>
>
===
>
Item communication enhancements:
>
In addition to what gets sent now, send the following pieces of information:
>
>
client_type (16 bits): this is used for the client for sorting items. This is
>
informative only - a map maker that wants to disguise an item as something else
>
could change the client_type. Likewise, things like poisoned booze would have
>
the same client_type as normal booze. Also, the client_type would not have a
>
1:1 mapping to real type, for example, right now the container type covers bags,
>
quivers, sacks, luggages, etc. My personal thought would be that items of a
>
similar type would be in groups of 100 (eg, all container items might be in
>
100->199, weapons in 200->299, etc), this gives plenty of space for subtyping
This sounds good, I am not sure about how many weapon types we have particularly if we include bows and start moving alot of artifacts to .arc files.
>
client_tag (32 bit): This information can be used for whatever the client wants
>
to use it for - it bsically provides a persistent place for the client to note
>
things about items. The server would not
>
use this for anything, but if the object is dropped on a non per player unique
>
map, this information would get confused (as otherwise the next person that
>
picks it up would have a potential bogus client_type). Things client_tag could
>
get used for - changing the name of an item (client would have an interface to
>
let the user change the item name, record the new name as well as the
>
client_tag). It could also get used for favorite lists (think of the different
>
tabs in the gtk client, and add another one or two which have the items you may
>
frequently switch between). Its really up to the client want to do with this.
>
Note that client_type information is probably pretty client specific - at least
>
to the same level as the keybindings are.
Don't know much about this so I wont comment.
>
body_location (32 bit): This is not currently implemented, but has been
>
discussed - rather than the hardcoded information currently the server that
>
armor goes on the body, helms on the head, and limits so set up, this would
>
change it so that a bit in this field would determine where it gets put on (bit
>
1 might be body, bit 2 left hand/arm (shield), bit 3 right hand/arm (weapon),
>
etc. For the different body types in crossfire, the number of different pieces
>
would be determined (thus, an ettin would have 2 heads, and could then wear 2
>
helmets). If multiple bits are set, that means all those body parts are needed
>
(thus, given my example above, if bit 2 and 3 are both set, it would mean its a
>
2 handed weapon). This information is useful for the client because it can know
>
what items may need to get unequipped before something gets equipped, and also
>
allows more useful information for the doll figure.
Of course everyone knows my view here, I am in total agreement with this plan. In terms of bits, it seems that this may not be entirely perfect. For example, if you wanted a second head you have to designate another bit to it. Surely an int variable for something like that would be more useful ie int head = 1; head = 5 (hydra)? I am not very good with c so if this is the only option so be it, it would be good to have this instead of the current system.
>
===
>
Look item improvement:
>
Currently, whenever you drop something, or anything appears on the space you are
>
standing on (thrown, spell, whatever), the entire stack of items you are
>
standing on is re-sent. This is because the order is needed for apply below to
>
work as the player might envision it should. The simple solution is to remove
>
the apply below functionality, and extend the client so that if just an 'apply'
>
is issued, it looks at what it has in the look window and send the apply with
>
that specific object. This saves bandwidth, and removes one of the last places
>
where ordering is relevant.
This sounds good
>
===
>
Add a general purpose way for the client to request information:
>
C->S: requestinfo <type> <parameters>
>
S->C: replyinfo <type> <paramters> <data>
>
>
If the client requests information that is not valid, then data would be
>
something like 'invalid'.
>
Type would just be text. Data would be specific to the type of request - the
>
client should know based on the type of request how to parse the data.
>
>
Things I current envision this being used for:
>
>
image_info: With the merge of the alternate set into the main, and potential for
>
any number of sets, this would request the server to tell it about this
>
information (what sets are available, their size, fallback, etc).
This is a good idea, I like that idea of being able to request information in this form, I am not sure how the back end of the server works? how flexible is it? Can you for example, request map size?
>
numfaces
>
faces <start num> <end num>: Request the number of faces, and then request
>
specific face information in some range. The returned information would be the
>
number, the name of that face, the checksum, and what set that image is from.
>
In this way, the client can easily find out how its cached faces match up, and
>
update any faces it may be missing before play even starts.
Anything in this direction I guess is good.
>
Note that requestinfo is not specific to image information - it could also be
>
motd, who command, etc. There may not be a reason for most of those unless the
>
client desires a method to be more surefire of getting the information instead
>
of trying to get it out of drawinfo commands.
Don't really follow this
Some important and useful features here, thumbs up
dnh
More information about the crossfire
mailing list