After reading the thread posted
here, it gave me an idea for a quest NPC that can possibly help with the issue of player ghosting.
The idea is to have an NPC that uses the EVENT_TIMER section in quests to check for the time of day, and then reset the zone multiple times per day or whatever amounts of time the admin defines in the quest.
Is there a current command or plans to implement one to allow the $zonetime identifier to work? Even better would be one that uses real time, so it goes off of a system clock, since game days are only a little over an hour or so. The max time in between possibly intervals in $zonetime would only be the amount of time in 1 game day. If you could use real time, then you could have the intervals be every 4 hours or even up to 24 hours.
Once that command is working, you can set the NPC to shout warnings well ahead of time to tell the players when the zone reset will happen. So, the code would look something like the following, assuming 100 = 01:00AM, and 2300 = 11:00PM:
Code:
#initialize the zone reset warning every 8 hours
EVENT_TIMER {
if ($realtime == 100 || $realtime == 900 || $realtime == 1700 ) {
quest::shout("Nexus will be restarting in 30 minutes. Please zone out before that time.");
}
#continue countdown to zone reset
if ($realtime == 110 || $realtime == 910 || $realtime == 1710 ) {
quest::shout("Nexus will be restarting in 20 minutes. Please zone out before that time.");
}
if ($realtime == 120 || $realtime == 920 || $realtime == 1720 ) {
quest::shout("Nexus will be restarting in 10 minutes. Please zone out before that time.");
}
if ($realtime == 125 || $realtime == 925 || $realtime == 1725 ) {
quest::shout("Nexus will be restarting in 5 minutes. Please zone out before that time.");
}
if ($realtime == 126 || $realtime == 926 || $realtime == 1726 ) {
quest::shout("Nexus will be restarting in 4 minutes. Please zone out before that time.");
}
if ($realtime == 127 || $realtime == 927 || $realtime == 1727 ) {
quest::shout("Nexus will be restarting in 3 minutes. Please zone out before that time.");
}
if ($realtime == 128 || $realtime == 928 || $realtime == 1728 ) {
quest::shout("Nexus will be restarting in 2 minutes. Please zone out before that time.");
}
if ($realtime == 129 || $realtime == 929 || $realtime == 1729 ) {
quest::shout("Nexus will be restarting in 1 minutes. Please zone out NOW!");
}
#reset the zone
if ($realtime == 130 || $realtime == 930 || $realtime == 1730 ) {
quest::shout("Nexus is being restarted right now! It will be back immediately, so you can log back in right away.");
quest::($commandtoresetthezone);
}
I am pretty sure there isn't a command that NPCs can issue to directly reset a zone, but my guess is that there are some out there that will cause the zone to crash, which is effectively about the same thing. Maybe setting them to cast a spell ID that doesn't exist or something to that effect.
Also, I think it would be nice if the $realtime identifier could go all of the way down to seconds where $realtime == 123456 would be 12:34:56PM.
I think this would best be used in base areas for servers like Nexus or PoK. I find that probably 50% of all ghosts on my server are in Nexus where my base is. Using a script like this to reset the zone 3 times a day would have low impact on the players, but still increase performance. It could also be used for any other zones that get high traffic. I would suggest setting high traffic zones to be reset 1 time per day during the off-peak hours, and maybe give at least 1 hour of warning beforehand for raid zones.
Using a script like this properly could potentially rid 90% or even 100% of all ghosting on any server. That would mean lower maintenance from admins, and higher performance for players with minimal impact.
I realize that since these commands or any similar ones aren't exactly built into the Emu yet (as far as I know), that this may have been better posted to one of the Development Sections. I wanted to post it here incase anyone can think of a way to do something similar with current commands.
Of course, if a Dev would like to run with the idea, it would be awesome to see something to allow this be implemented. It would be cool to see an identifier that let NPCs run a command similar to #worldshutdown. So, you could set something like ($zonereset == 10, 5) and that would start making announcements every 2 minutes for 10 minutes and then reset the zone similar to the #worldshutdown announcements settings. I think it would be awesome if there was a way for npcs to use any GM command, but I should save that idea for another post, lol. If they could, maybe the #zoneshutdown command would do the trick.
If someone knows of a way to get rid of ghosts without having to bother with this quest idea at all, please let me know! I have done some searching and haven't found anything yet. Oh, and if crashing or resetting the zone just isn't an option, how about the NPC casts a zone-wide spell to evac everyone to another zone?