EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Development::Development (https://www.eqemulator.org/forums/forumdisplay.php?f=590)
-   -   Solution for $wp bug (https://www.eqemulator.org/forums/showthread.php?t=19020)

mystic414 07-22-2005 07:09 AM

Solution for $wp bug
 
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, 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
Code:

                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
Code:

                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:
Code:

        int                max_wp;
        int                cur_wp;
// used by quest wandering commands

with
Code:

        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

Quote:

Originally Posted by mystic414
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.

Code:

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: {



All times are GMT -4. The time now is 09:33 PM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.