PDA

View Full Version : Solution for $wp bug


mystic414
07-22-2005, 07:09 AM
sub EVENT_WAYPOINT is supposed to assign the number of a wandering mob's current waypoint to $wp, but this has been broken for some time.

Cripp posted a fix here (http://www.eqemulator.net/forums/showthread.php?t=15340), which fixed the $wp problem for me in 6.0 DR3, but caused a new problem: sub EVENT_WAYPOINT was triggered twice each time a waypoint was hit. For instance, I wrote a quest that had the mob say "I'm at waypoint $wp", and each time he reached a waypoint he said that twice.

Well I don't know any C++, but I played with Cripp's fix and got it to work, at least as far as I can tell. So here's what I came up with:

In embparser.cpp replace case EVENT_WAYPOINT: {
std::string temp = "wp";
temp += itoa(npcid);
ExportVar(packagename.c_str(), temp.c_str(), data);
SendCommands(packagename.c_str(), "EVENT_WAYPOINT", npcid, npcmob, mob);
break;
}
with case EVENT_WAYPOINT: {
//std::string temp = "wp";
// temp += itoa(npcid);
//ExportVar(packagename.c_str(), temp.c_str(), data);
ExportVar(packagename.c_str(), "wp", itoa( (int)npcmob->cur_wp ));
// SendCommands(packagename.c_str(), "EVENT_WAYPOINT", npcid, npcmob, mob);
break;
}

and in mob.h replace: int max_wp;
int cur_wp;
// used by quest wandering commands
with int max_wp;
public:
int cur_wp;
protected:
// used by quest wandering commands
Once again, I don't code C++, I only played with Cripp's fix. It fixed $wp for me, and the mob only said his line once per waypoint. Hope this helps.

mystic414
07-22-2005, 03:12 PM
Well in hindsight there seems to be a minor bug: the first waypoint gets assigned to $wp as 0 instead of 1, and waypoint 2 is assigned "1", and so on. Someone less likely to break the code than I am may want to fix that :P

Richardo
07-26-2005, 01:18 AM
Well in hindsight there seems to be a minor bug: the first waypoint gets assigned to $wp as 0 instead of 1, and waypoint 2 is assigned "1", and so on. Someone less likely to break the code than I am may want to fix that :P


I think when using this its used like this..

($wpGridID whatever WpID)

for example,

if($wp10 == 1)
{
quest::depop();

I dont know, you could try it with the sub EVENT_WP or Waypoint, whichever it is.. It works for me, but I think ruben fixed it for our serv. lol

fathernitwit
07-26-2005, 02:00 PM
ok
the more accurate fix to this is below.
This is a result of whoever wrote embparser not understanding the old .qst parser well enough as they wrote the perl stuff.


Index: embparser.cpp
================================================== =================
--- embparser.cpp (revision 404)
+++ embparser.cpp (working copy)
@@ -364,9 +364,7 @@
break;
}
case EVENT_WAYPOINT: {
- std::string temp = "wp";
- temp += itoa(npcid);
- ExportVar(packagename.c_str(), temp.c_str(), data);
+ ExportVar(packagename.c_str(), "wp", data);
break;
}
case EVENT_HP: {