[CF-Devel] New Crossfire commands patch.
crossfire-devel at archives.real-time.com
crossfire-devel at archives.real-time.com
Fri Nov 28 20:29:15 CST 2003
Adam Ashenfelter wrote:
>
On Fri November 28 2003 3:02 am, Mark Wedel wrote:
>
One of the main disadvantages I see with putting these commands in the client
>
is that there will be a lot more chances to break compatibility with the
>
client.
>
>
Lets say for instance we implement the new commands in the client. Then later
>
on we create a new type of wearable item. Say a mask or whatever. Then
>
"wear" and "unwear" would be broken in the clients for masks. Or a new flag
>
"not owner" or something like that. Now "eat food" would not know to avoid
>
food items my player doesn't own (a client side "apply" would also be broken
>
in this case"). I can think of a lot more examples.
That is sort of a straw case argument. If you add a new type, the server code
would similarly need to be updated.
In fact, given that the client uses the client_type field, it will actually
work better.
Look at the doc/Developers/objects, then specifically the client_type
information. Client_types are put into broad numbers.
Excerpt from that file:
270-279 Headwear (34)
270 artifact helmets (34)
271 Helmets (34)
272 turbans (34)
273 wigs (34)
275 eyeglasses (34)
So suppose you add a new object - mask. you give it client type 276, and it
works fine, because the client would know that objects in the 270-279 range are
headware type items.
>
>
Note: If the new commands should be in the client, then eventualy "get",
>
"drop", and "apply" should be in the client as well, and would result in
>
similar problems.
Yep - those should be all client side also.
Note that right now, if you apply an object in your inventory by clicking on
it, the client sends the 'apply' protocol command, which is different than if
you type apply. With that protocol command, it only sends the object id. The
server then finds that object and makes sure it is something the client can
apply (eg, in the players inventory, or on the same space). That sanity
checking code is already in place (otherwise, a hacked client could try to apply
items of tags that don't belong to it).
Note also that if you click something to drop, a protocol command (moveitem I
believe) is used to drop the objbect. It doesn't call the same drop that a
player might type in. And same thing - the server does sanity checking to make
sure it is something that can be dropped (not equipped, not locked, in the
players inventory, etc).
And all this code works just fine obviously. So if you did the client side
apply, like I suggest, the server already has the code to do the sanity checking.
>
>
What we would really be moving to the client would be a string match, and a
>
type check for each candidate item. The server still needs to verify that
>
we can (apply, drop, get) the item or we open up a lot of cheats.
And as said, the server already has code in to make sure the object is
something the player can deal with.
>
>
If what you really want to do, is offload this matching work to the client,
>
then this is what I think should be done.
>
>
1. Client preparses command, and decides which item should be the target of
>
the command.
>
2. The client sends the full command to the server and the item tag of the
>
item that should be the target of the item.
>
3. The server receives the command and checks the client version.
>
4. If the client is new enough to handle this command, call the command with
>
the item tag, if not reparse the string to make the correct decision. (The
>
logic stays, but it is run less often)
Don't need to do any of that - built in apply command that only takes an item
tag is already in the protocol, and already extensively used. So all you need
to do is #1 - steps 2->4 are already done or not needed.
_______________________________________________
crossfire-devel mailing list
crossfire-devel at lists.real-time.com
https://mailman.real-time.com/mailman/listinfo/crossfire-devel
More information about the crossfire
mailing list