PDA

View Full Version : Zone idling


songie
11-03-2010, 10:49 AM
How do you go about altering this piece of code so that i can let most zones idle and others i (input) choose not ? c++ not my thing :p


void EntityList::MobProcess() {
#ifdef IDLE_WHEN_EMPTY
if(numclients < 1)
return;
#endif
_ZP(EntityList_MobProcess);
LinkedListIterator<Mob*> iterator(mob_list);
iterator.Reset();
while(iterator.MoreElements())
{
if(!iterator.GetData())
{
iterator.Advance();
continue;
}
if(!iterator.GetData()->Process()){
Mob* mob=iterator.GetData();
if(mob->IsNPC())
entity_list.RemoveNPC(mob->CastToNPC()->GetID());
#ifdef BOTS
else if(mob->IsBot()) {
entity_list.RemoveBot(mob->CastToBot()->GetID());
}
#endif
else{
#ifdef WIN32
struct in_addr in;
in.s_addr = mob->CastToClient()->GetIP();
cout << "Dropping client: Process=false, ip=" << inet_ntoa(in) << ", port=" << mob->CastToClient()->GetPort() << endl;
#endif
zone->StartShutdownTimer();
Group *g = GetGroupByMob(mob);
if(g) {
LogFile->write(EQEMuLog::Error, "About to delete a client still in a group.");
g->DelMember(mob);
}
Raid *r = entity_list.GetRaidByClient(mob->CastToClient());
if(r) {
LogFile->write(EQEMuLog::Error, "About to delete a client still in a raid.");
r->MemberZoned(mob->CastToClient());
}
entity_list.RemoveClient(mob->GetID());
}
iterator.RemoveCurrent();
}
else
iterator.Advance();
}
}

Akkadius
11-03-2010, 11:06 AM
How do you go about altering this piece of code so that i can let most zones idle and others i (input) choose not ? c++ not my thing :p


void EntityList::MobProcess() {
#ifdef IDLE_WHEN_EMPTY
if(numclients < 1)
return;
#endif
_ZP(EntityList_MobProcess);
LinkedListIterator<Mob*> iterator(mob_list);
iterator.Reset();
while(iterator.MoreElements())
{
if(!iterator.GetData())
{
iterator.Advance();
continue;
}
if(!iterator.GetData()->Process()){
Mob* mob=iterator.GetData();
if(mob->IsNPC())
entity_list.RemoveNPC(mob->CastToNPC()->GetID());
#ifdef BOTS
else if(mob->IsBot()) {
entity_list.RemoveBot(mob->CastToBot()->GetID());
}
#endif
else{
#ifdef WIN32
struct in_addr in;
in.s_addr = mob->CastToClient()->GetIP();
cout << "Dropping client: Process=false, ip=" << inet_ntoa(in) << ", port=" << mob->CastToClient()->GetPort() << endl;
#endif
zone->StartShutdownTimer();
Group *g = GetGroupByMob(mob);
if(g) {
LogFile->write(EQEMuLog::Error, "About to delete a client still in a group.");
g->DelMember(mob);
}
Raid *r = entity_list.GetRaidByClient(mob->CastToClient());
if(r) {
LogFile->write(EQEMuLog::Error, "About to delete a client still in a raid.");
r->MemberZoned(mob->CastToClient());
}
entity_list.RemoveClient(mob->GetID());
}
iterator.RemoveCurrent();
}
else
iterator.Advance();
}
}

Table: 'zone'

Field: 'shutdowndelay' will determine how long that dynamic zone stays up before it is shut down, it goes by milliseconds and defaults to '5000' milliseconds which is 5 seconds.

songie
11-03-2010, 11:37 AM
I need some Static zones to stay up forever having to input 86400000 milliseconds to keep it up for 24 hours is more like a workaround, its mostly for opendoor zones and when i disable idling of zones after about a 500 zones running at the sametime it maxes out the cpu. I could input about a 7 days worth of milliseconds i guess but idd prefer a sourcecode change to excempt certain zones from being able to idle at all.

Akkadius
11-03-2010, 12:41 PM
I need some Static zones to stay up forever having to input 86400000 milliseconds to keep it up for 24 hours is more like a workaround, its mostly for opendoor zones and when i disable idling of zones after about a 500 zones running at the sametime it maxes out the cpu. I could input about a 7 days worth of milliseconds i guess but idd prefer a sourcecode change to excempt certain zones from being able to idle at all.

That field is on a per zone basis. And is far more CPU efficient to call that out then to have statics running all the time. But that is your call, I don't see a whole lot of use in something like that. Otherwise I'm sure that it could be added. But you can pretty much serve the same purpose with shutdown delay.

songie
11-03-2010, 01:47 PM
Aaaah you mean instead of running all the zones as statics you run them as dynamics with a couple of hours worth of uptime. Havent looked at it like that. Ill play with the settings a bit see if i can get what i need. You run most zones as dynamics ? I have a couple of things in place tough that dont cope well with a zone going to sleep. Ill check it out. Thanks

Akkadius
11-03-2010, 02:23 PM
Aaaah you mean instead of running all the zones as statics you run them as dynamics with a couple of hours worth of uptime. Havent looked at it like that. Ill play with the settings a bit see if i can get what i need. You run most zones as dynamics ? I have a couple of things in place tough that dont cope well with a zone going to sleep. Ill check it out. Thanks

Yes, I have some zones that players farm that are dynamic and they like to think they can zone in and out and force the zone to repop with a chance of a named being up. Those specific zones have a zoneshutdowndelay of about 15 minutes.