Added scriptability for the SoF+ respawn window by way of an EVENT_RESPAWN_WINDOW. This allows respawn options to be customized: options can be added or removed based on the Client's level, the current zone, qglobals; options to respawn in guild hall, server hub zone, options to return to a questgiver if you were in the middle of a quest event, etc.
Full description and some example usage can be found at
https://github.com/Zaela/LuaEQEmu/wi...respawn_window
Someone may want to make a Perl version of this if nothing else. I think it's a pretty neat thing.
Also, there is a bug with the respawn window and aggro; when the Client is hovering for respawn, they will continually aggro whatever killed them (aggro, lose aggro because the client is not a valid attack target, then aggro again, rinse and repeat) and mess up the Client's x-targets. This can spam trigger EVENT_AGGRO and possibly EVENT_COMBAT. To fix, replace this in aggro.cpp:
Code:
bool Mob::CheckWillAggro(Mob *mob) {
if(!mob)
return false;
_ZP(Mob_CheckWillAggro);
//sometimes if a client has some lag while zoning into a dangerous place while either invis or a GM
//they will aggro mobs even though it's supposed to be impossible, to lets make sure we've finished connecting
if(mob->IsClient() && !mob->CastToClient()->ClientFinishedLoading())
return false;
with this:
Code:
bool Mob::CheckWillAggro(Mob *mob) {
if(!mob)
return false;
_ZP(Mob_CheckWillAggro);
//sometimes if a client has some lag while zoning into a dangerous place while either invis or a GM
//they will aggro mobs even though it's supposed to be impossible, to lets make sure we've finished connecting
if (mob->IsClient()) {
if (!mob->CastToClient()->ClientFinishedLoading())
return false;
//clients will continually re-aggro whatever killed them if respawn hover is enabled,
//repeatedly triggering EVENT_COMBAT/AGGRO and messing up x-targets; this fixes that
if (mob->CastToClient()->IsHoveringForRespawn())
return false;
}