number6
09-22-2006, 05:25 AM
Hi all,
I've been running a little server at home for just over a week now for a few friends from the old EQ days so we can revisit some old haunts...
We noticed an issue with both Paladin "Lay On Hands" and SK "Harm Touch". Both these abilities have very long reuse timers, but when you zone, the ability button pops back up. If you then hit it, the client becomes locked, presumably because it is waiting for an event from the server. But the server simply sends an "Ability recovery time not yet met" message. From that point you can't issue commands, look at inventory, and so on. Zoning will fix it. This is all with the Titanium client.
This is probably a terrible hack but in client_packet.cpp I added a "InterruptSpell(castspell->spell_id);" after both the message outputs and it has at least meant I can carry on doing stuff now after hitting the button. Clearly the client needs a better way to keep in touch with the state of the ability after zoning though. Anyway I hope this might be of some little help.
--- client_packet.cpp 2006-09-22 15:51:57.000000000 +0100
***************
*** 2921,2926 ****
--- 2921,2928 ----
castspell->spell_id == SPELL_LAY_ON_HANDS && GetClass() == PALADIN) {
if(!p_timers.Expired(&database, pTimerLayHands)) {
Message(13,"Ability recovery time not yet met.");
+ InterruptSpell(castspell->spell_id);
+ // above number6 hack
return;
}
spell_to_cast = SPELL_LAY_ON_HANDS;
***************
*** 2935,2940 ****
--- 2937,2944 ----
if(!p_timers.Expired(&database, pTimerHarmTouch)) {
Message(13,"Ability recovery time not yet met.");
+ InterruptSpell(castspell->spell_id);
+ // above number6 hack
return;
}
***************
Be seeing you.
I've been running a little server at home for just over a week now for a few friends from the old EQ days so we can revisit some old haunts...
We noticed an issue with both Paladin "Lay On Hands" and SK "Harm Touch". Both these abilities have very long reuse timers, but when you zone, the ability button pops back up. If you then hit it, the client becomes locked, presumably because it is waiting for an event from the server. But the server simply sends an "Ability recovery time not yet met" message. From that point you can't issue commands, look at inventory, and so on. Zoning will fix it. This is all with the Titanium client.
This is probably a terrible hack but in client_packet.cpp I added a "InterruptSpell(castspell->spell_id);" after both the message outputs and it has at least meant I can carry on doing stuff now after hitting the button. Clearly the client needs a better way to keep in touch with the state of the ability after zoning though. Anyway I hope this might be of some little help.
--- client_packet.cpp 2006-09-22 15:51:57.000000000 +0100
***************
*** 2921,2926 ****
--- 2921,2928 ----
castspell->spell_id == SPELL_LAY_ON_HANDS && GetClass() == PALADIN) {
if(!p_timers.Expired(&database, pTimerLayHands)) {
Message(13,"Ability recovery time not yet met.");
+ InterruptSpell(castspell->spell_id);
+ // above number6 hack
return;
}
spell_to_cast = SPELL_LAY_ON_HANDS;
***************
*** 2935,2940 ****
--- 2937,2944 ----
if(!p_timers.Expired(&database, pTimerHarmTouch)) {
Message(13,"Ability recovery time not yet met.");
+ InterruptSpell(castspell->spell_id);
+ // above number6 hack
return;
}
***************
Be seeing you.