• You've discovered RedGuides 📕 an EverQuest multi-boxing community 🛡️🧙🗡️. We want you to play several EQ characters at once, come join us and say hello! 👋
  • IS THIS SITE UGLY? Change the look. To dismiss this notice, click the X --->

curious question about a way around /warp (1 Viewer)

shadowman33

Member
Joined
Jan 26, 2005
RedCents
70¢
Ok, I don't even know if this is possible, but was just an idea. Is there a way to create a plugin that will allow you to bind yourself to mulitple locations? That way, the plugin could be set up to acutally cast the gate spell, but relocate you to whichever bind point you designate in mq2 via command.../cast gate bind 1
for example.
Just curious to see if something like that could be done. At least then in front of people you do not just vanish into thin air. It would at least look as if you cast the gate spell. I do believe some time ago, there was a version of warp made that gave that effect, but do not recall when or where i saw it.
 
I had thought about that possibly as well. While I used to love warp, haven't felt like using it the last few months. Seeing this made me think about how to implement this to work.

Put this code together but haven't yet been able to get it to work properly. Perhaps a better coder can help me fix it.

Rich (BB code):
// MQ2Gatewarp.cpp : Defines the entry point for the DLL application.
//

// PLUGIN_API is only to be used for callbacks.  All existing callbacks at this time
// are shown below. Remove the ones your plugin does not use.  Always use Initialize
// and Shutdown for setup and cleanup, do NOT do it in DllMain.



#include "../MQ2Plugin.h"


PreSetup("MQ2Gatewarp");


VOID SetMove(PSPAWNINFO pChar,PCHAR szLine)
{

   CHAR szBuffer[MAX_STRING] = {0};
   PZONEINFO TZone = (PZONEINFO) pZoneInfo;

   CHAR Arg1[MAX_STRING] = {0};
	 CHAR Arg2[MAX_STRING] = {0};
	 CHAR Arg3[MAX_STRING] = {0};

   DWORD Dzone;

   if (szLine[0] == 0)
   {
      WriteChatColor("Useage: /mgate mode   mode = target, y x z or safe", CONCOLOR_LIGHTBLUE);
      WriteChatColor("        Then use Gate to Move", CONCOLOR_LIGHTBLUE);
      return;
   }

   if (!strcmpi(Arg1, "s") || !strcmpi(Arg1, "safe") || !strcmpi(Arg1, "succor"))
   {
	 		GetCharInfo()->ZoneBoundId = GetZoneID(TZone->ShortName);
	 		GetCharInfo()->ZoneBoundY  = TZone->SafeY;
	 		GetCharInfo()->ZoneBoundX  = TZone->SafeX;
	 		GetCharInfo()->ZoneBoundZ  = TZone->SafeZ;
   		sprintf(szBuffer, "Gate set for Succor Point (%.0f, %.0f, %.0f).", GetCharInfo()->ZoneBoundY, GetCharInfo()->ZoneBoundX, GetCharInfo()->ZoneBoundZ);
   }

	 else if ((!strcmpi(Arg1, "t") || !strcmpi(Arg1, "target")) && pTarget)
	 {

	    GetCharInfo()->ZoneBoundY = ((PSPAWNINFO)pTarget)->Y+1;
	    GetCharInfo()->ZoneBoundX = ((PSPAWNINFO)pTarget)->X+1;
	    GetCharInfo()->ZoneBoundZ = ((PSPAWNINFO)pTarget)->Z+1;
	    GetCharInfo()->ZoneBoundId = GetZoneID(TZone->ShortName);
	    sprintf(szBuffer, "Gate set to %s (%.0f, %.0f, %.0f - Zone %.0f).", ((PSPAWNINFO)pTarget)->Name, GetCharInfo()->ZoneBoundY, GetCharInfo()->ZoneBoundX, GetCharInfo()->ZoneBoundZ);
	 }


	 else if (*Arg1 && *Arg2 && *Arg3)
	 {
      GetCharInfo()->ZoneBoundY = (float)atof(Arg1);
      GetCharInfo()->ZoneBoundX = (float)atof(Arg2);
      GetCharInfo()->ZoneBoundZ = (float)atof(Arg3);
      GetCharInfo()->ZoneBoundId = GetZoneID(TZone->ShortName);
      sprintf(szBuffer, "Gate set to the location you specified (%.0f, %.0f, %.0f - Zone %.0f).", GetCharInfo()->ZoneBoundY, GetCharInfo()->ZoneBoundX, GetCharInfo()->ZoneBoundZ);
	 }

	 WriteChatColor(szBuffer, CONCOLOR_YELLOW);

	 Dzone = GetCharInfo()->ZoneBoundId;

   sprintf(szBuffer, "Gate set to zone (should be local zone) %s (%s).", GetFullZone(Dzone), GetShortZone(Dzone));
   WriteChatColor(szBuffer, CONCOLOR_YELLOW);

}




//VOID ClearMove(PSPAWNINFO pChar,PCHAR szLine)
//{
//
//}




// Called once, when the plugin is to initialize
PLUGIN_API VOID InitializePlugin(VOID)
{
	DebugSpewAlways("Initializing MQ2Gatewarp");
	DebugSpewAlways("		Use /mgate to set target");
	//DebugSpewAlways("   Use /cgate to clear move");
	AddCommand("/mgate", SetMove);
	//AddCommand("/cgate", ClearMove);
}


// Called once, when the plugin is to shutdown
PLUGIN_API VOID ShutdownPlugin(VOID)
{
	DebugSpewAlways("Shutting down MQ2Gatewarp");
	RemoveCommand("/mgate");
	//RemoveCommand("/cgate");
}
 
I believe that your bind point in server side. Thus when Gate is cast it tells the server, "return to bind point". /zone does a similiar action, which is why when you do /zone it says "returning to home point".

I generally use the move.inc or MQ2MoveUtils as a /warp substitute. It looks more natural. In case of an emergency though I have a hotkey that starts casting gate and the do a /gate that way if there is ever a need to dig into my zoning activities it would 'hopefully' appear to be a flook.
 
Well I figured bind was server side, but wondered if you could give the appearance of gating but not actually being bound anywhere else. My reference to mulitple bindings was off really. I meant only being bound in multiple places as far at mq2 was concerned. That way maybe you could have a list built into mq2 of your so called "bind" spots and appear to gate to them to anyone looking. My main concern really is for these people who refuse to stop warping blatently in front of everyone to see. Dispite me sending them private messages on here asking them to stop trying to get it nerfed. This then hopefully would take suspicion away to the average onlooker.
 
Well you would think bind point was server side, but from looking at the code to the various /zone plugins, it appears you can fool it nontheless.

MQ2Zone basically takes your character data ZoneBoundID, changes that value to the zone you want to wind up in. Then spawns a corpse, making your client zone you to your bind point. But since you have changed your ZoneBoundID in memory, you zone into the adjacent zone instead. (Correct me if I'm wrong :) )

When you cast a gate spell, you zone back to your bind point, do the normal loading thing etc. But if you are in the same zone as your bind point, you esentially warp over to your bind point instead (if you are close enough to your bind you can infact even see the "vapor trail" of your gate still fading).

So what I was thinking would be if you can write into memory, that your bind spot is in the current zone at location x y z (via target, safe loc, or coord just like with /warp), when you gate you would get the instant teleport to that location. You've cast a spell, and the only thing left to wonder was how the heck did you bind here? The second part of the plugin would need to reset your bind point to what it should be (in memory still only) so if you needed to gate you would properly.
 
curious question about a way around /warp

Users who are viewing this thread

Back
Top