I have a question - What does the other party see when they start to bind you after you have started binding yourself, causing your bind to fail?
Do they finish normally or do they get a message saying that you moved as well? Do they lose their bandage?
EDIT:
Was it classic to lose a bandage when you or your target moved during a bind wound? If not, one part of this issue could be solved by moving
zone/client.cpp in current HEAD line 2482:
Quote:
|
DeleteItemInInventory(bslot, 1, true);
|
to some location in the code block of the IF condition on line 2531, which checks to see if the bind completed without interruption:
Quote:
|
if (!GetFeigned() && (bindmob->DistNoRoot(*this) <= 400))
|
It appears the command to consume a bandage was once there but was moved to the start. I don't really see why, though i guess it could maybe cause an issue if someone quickly destroyed their bandages between starting the bind and the bind completing? Even then you could just re-check for bandages and move to the failure block if they weren't present.
Obviously the larger issue is why the client thinks it moved when someone else starts to bind. Looking at the code, the only thing I can see that would trigger such an event would be a stand or a sit, which, if the person was already binding themselves, would cause the following code to execute:
Quote:
else if (bindwound_timer.Enabled()) {
// You moved
outapp = new EQApplicationPacket(OP_Bind_Wound, sizeof(BindWound_Struct));
BindWound_Struct* bind_out = (BindWound_Struct*) outapp->pBuffer;
bindwound_timer.Disable();
bindwound_target = 0;
bind_out->type = 7;
QueuePacket(outapp);
bind_out->type = 3;
QueuePacket(outapp);
}
|
I'm new at this, but what the OP is describing seems to be exactly what would happen if this code executed while someone was self-binding. Hope this helps...