Cosmic
New member
- Joined
- Jun 21, 2005
- RedCents
- 30¢
Since turning yourself into a corpse doesn't make you zone anymore, I started looking at how zoning works.
Most zone-changing events are started from the server side (gate,translocate,portal, clicking a door, etc) but when you walk across a zoneline, the entire process is started from the client.
The procedure in question is at 0x004ab5a1 and has 8 parameters.
Param1: int
Param2: String
Param3: int
Param4: int
Param5: float?
Param6: float?
Param7: float?
Param8: int?
Parameter 1: ZoneId
Parameter 2: string that doesn't seem to matter. probably logged somewhere for debugging. example:"old teleport: zone#4, 00004Teleport found! Zone nbr = 4 XYZ = -350.0, 999999.0, 999999.0 HD = 999"
Parameter 3 affects where you pop into the zone. set it to 0 and you go to 0,0,0. Set it to 1 and you go to the succor point. Probably far more complicated than that.
Parameter 4: cause of zone request (2=vehicle xfer, 3=summon, 5=goto player, 7=portal spell, 8=/zone, 9=resurrect, 10=death)
Parameter 5-7:the Y,X,and Z floats.
Parameter 8: the heading converted to an int
Anywho, if you are crazy ballsy and want to use this, here are the code snippets and where to put em:
in EQClasses.cpp add:
in EQClasses.h add:
in eqgame.h add:
in your favorite /zone plugin:
This assumes that you have set a variable "ZoneToGoTo" properly in your plugin. For some reason, when this call fires off, it causes the last command entered to be executed again, so the static is just there to cause it to ignore the double call.
If you try to zone to a non-adjacent zone, it will fail with often bizarre results.
Caveat Emptor. Because of the number of unknown parameters, this is probably fairly obvious on the server side. If you get banned, don't blame me.
If I didn't suck at assembly, I'd try to find a safer way to call it.
--piggy
Most zone-changing events are started from the server side (gate,translocate,portal, clicking a door, etc) but when you walk across a zoneline, the entire process is started from the client.
The procedure in question is at 0x004ab5a1 and has 8 parameters.
Param1: int
Param2: String
Param3: int
Param4: int
Param5: float?
Param6: float?
Param7: float?
Param8: int?
Parameter 1: ZoneId
Parameter 2: string that doesn't seem to matter. probably logged somewhere for debugging. example:"old teleport: zone#4, 00004Teleport found! Zone nbr = 4 XYZ = -350.0, 999999.0, 999999.0 HD = 999"
Parameter 3 affects where you pop into the zone. set it to 0 and you go to 0,0,0. Set it to 1 and you go to the succor point. Probably far more complicated than that.
Parameter 4: cause of zone request (2=vehicle xfer, 3=summon, 5=goto player, 7=portal spell, 8=/zone, 9=resurrect, 10=death)
Parameter 5-7:the Y,X,and Z floats.
Parameter 8: the heading converted to an int
Anywho, if you are crazy ballsy and want to use this, here are the code snippets and where to put em:
in EQClasses.cpp add:
Rich (BB code):
#ifdef CDisplay__DoTheZone
FUNCTION_AT_ADDRESS(char * CDisplay::DoTheZone(int, char *, int,int,int,int,int,int),CDisplay__DoTheZone);
#endif
in EQClasses.h add:
Rich (BB code):
EQLIB_OBJECT char * CDisplay::DoTheZone(int,char*,int,int,int,int,int,int);
in eqgame.h add:
Rich (BB code):
#define CDisplay__DoTheZone 0x4AB5A1
in your favorite /zone plugin:
Rich (BB code):
static int once=0;
if (once==0)
{
once=1;
char aa[100]="test";
pDisplay->DoTheZone(ZoneToGoTo,aa,1,0,0,0,0,0);
}
else
{
once=0;
}
This assumes that you have set a variable "ZoneToGoTo" properly in your plugin. For some reason, when this call fires off, it causes the last command entered to be executed again, so the static is just there to cause it to ignore the double call.
If you try to zone to a non-adjacent zone, it will fail with often bizarre results.
Caveat Emptor. Because of the number of unknown parameters, this is probably fairly obvious on the server side. If you get banned, don't blame me.
If I didn't suck at assembly, I'd try to find a safer way to call it.
--piggy
Last edited:



