PDA

View Full Version : Mmmmm simulated patch day


Tecmos Deception
12-22-2013, 10:30 PM
:D

Frieza_Prexus
12-22-2013, 10:35 PM
http://stream1.gifsoup.com/view1/1845113/that-was-easy-o.gif

Elements
12-22-2013, 10:35 PM
the earth quake was epic

Daldaen
12-22-2013, 10:36 PM
Its a good thing... but I can't imagine this doesn't feel like salt in the wounds of the TMO raid-banned-and-didn't-exploit folk.

Nune
12-22-2013, 10:39 PM
Its a good thing... but I can't imagine this doesn't feel like salt in the wounds of the TMO raid-banned-and-didn't-exploit folk.

Yeah, I mean 1 reset day vs. uncontested raiding for 2 years.


Must hurt bad.


:confused:

Messianic
12-22-2013, 10:41 PM
Its a good thing... but I can't imagine this doesn't feel like salt in the wounds of the TMO raid-banned-and-didn't-exploit folk.

I think that's half the pleasure of most of those benefiting from this...

lazcar
12-22-2013, 10:53 PM
Today's raid targets were evenly distributed among guilds! What a great cycle in recent p99 history!

Sev- Divinity
Talendor - Divinity
VS- IB/FE
Trak- IB/FE
Gore- IB/FE
CT- BDA
OoA - Taken
Inny- Taken
draco- bda
fay- Taken
Noble - A-Team
vox - BDA/ni
naggy - IB/FE
dojo - A-Team
hand - A-Team/Taken

gummab
12-22-2013, 10:56 PM
3AM simulated patch we euros love you!

Fianna
12-22-2013, 11:04 PM
We need more classic simulated patch days, they always came in Euro primetime because thats when the least amount of players were online :P

No but seriously, this is cool but we Europeans hope there will be some variation.

Tasslehofp99
12-22-2013, 11:14 PM
Sev- Divinity
Vs- IB/fe
Trak- IB/fe
Gore- IB/fe


We left Talendor alone, BDA looks to have gone to Fear for CT.

FE/IB also took CT/Draco/Fay this morning, so we'll be sitting those out as well.

Lets get a full repop recap so guilds know who has killed what and what will be more/less contested on the next spawn.

heazels
12-22-2013, 11:19 PM
CT - BDA

Tasslehofp99
12-22-2013, 11:23 PM
Talendor still up roaming skyfire.

Vallanor
12-22-2013, 11:32 PM
Talendor - Divinity

Azure Guard was ready to go for round two though! Next time!

Splorf22
12-22-2013, 11:35 PM
Noble Dojorn down to The A-Team. Taken graciously gave us a shot at OOA and we wiped like men. Need to work on those CH chains!

Tasslehofp99
12-22-2013, 11:39 PM
Looks like Knights who Say Ni are attempting vox, glad to see that.

Joyelle
12-22-2013, 11:40 PM
Fay, Inny and Maestro down to Taken

Vallanor
12-22-2013, 11:43 PM
Noble Dojorn down to The A-Team. Taken graciously gave us a shot at OOA and we wiped like men. Need to work on those CH chains!

I really love how this all ended up. People were super respectful all around by the sound of things!

MaximiusM
12-22-2013, 11:46 PM
Fay, Inny and Maestro down to Taken

/clap

Barkingturtle
12-22-2013, 11:46 PM
http://cdn.uproxx.com/wp-content/uploads/2012/12/god-bless.gif

MaximiusM
12-22-2013, 11:47 PM
http://cdn.uproxx.com/wp-content/uploads/2012/12/god-bless.gif

</thread>

Seltius
12-22-2013, 11:50 PM
That simulated patch effect was pretty epic. Thought something was wrong with my computer for a second there.

radditsu
12-22-2013, 11:52 PM
If this is what you want guys keep the dream alive and keep it up! I love it.

Thulack
12-22-2013, 11:53 PM
http://cdn.uproxx.com/wp-content/uploads/2012/12/god-bless.gif

heazels
12-22-2013, 11:58 PM
i think the knights killed naggie not vox

khanable
12-23-2013, 12:08 AM
motherfuckers made me think I was having a stroke with that rumble rumble shit

god damn

grats to all, a lot of good will put forth between guilds tonight.

LETS KEEP IT UP.

Thulack
12-23-2013, 12:08 AM
Grats Taken/A-Team on OoA :)

Hitpoint
12-23-2013, 12:08 AM
We left Talendor alone, BDA looks to have gone to Fear for CT.

FE/IB also took CT/Draco/Fay this morning, so we'll be sitting those out as well.

Lets get a full repop recap so guilds know who has killed what and what will be more/less contested on the next spawn.

FE/IB - VS, Trak, Gore, Naggy

Sleep time.

Splorf22
12-23-2013, 12:10 AM
Fucking noble dropped Ranger, Shadowknight, and Paladin gear. I THREW UP IN MY MOUTH A LITTLE. Then I petitioned to just delete all rangers, paladins, and shadowknights.

Ravager
12-23-2013, 12:12 AM
No tracking over Christmas even.

arsenalpow
12-23-2013, 12:12 AM
BDA had a tough wipe at Trak, then got it together for CT/draco, then Vox (and we let some Ni's tag along)

it was a good time

Ciroco
12-23-2013, 12:12 AM
This was awesome. 10/10 would run around various zones chaotically again.

Relbaic
12-23-2013, 12:13 AM
http://i.imgur.com/KgkKJO9.png

Grats Legatus of Knights Who Say Ni on Frost Covered Book!

khanable
12-23-2013, 12:17 AM
^ what a zerg omg

Tasslehofp99
12-23-2013, 12:19 AM
wow great day for p99 ;)

Lazie
12-23-2013, 12:21 AM
Great numbers turned out today for all guilds. I know FE/IB had over 80. BDA got close to that. How many people in the other guilds got to have some fun today ?

heazels
12-23-2013, 12:25 AM
I think this was rogean's Christmas present for the server.

Sadad
12-23-2013, 12:36 AM
A big thank you goes out to Rogean and the rest of p99 staff for making this happen. It was by far the cleanest, nicest server repop I have ever had the pleasure of attending. Maybe it's something we could have a little more often?

Pullyn
12-23-2013, 12:37 AM
A big thank you goes out to Rogean and the rest of p99 staff for making this happen. It was by far the cleanest, nicest server repop I have ever had the pleasure of attending. Maybe it's something we could have a little more often?

+1

Handull
12-23-2013, 12:48 AM
Today's raid targets were evenly distributed among guilds! What a great cycle in recent p99 history!

Sev- Divinity
Talendor - Divinity
VS- IB/FE
Trak- IB/FE
Gore- IB/FE
CT- BDA
OoA - Taken/ A-team
Inny- Taken
draco- Taken
fay- Taken
Noble - A Team
vox - BDA
naggy - IB/FE

vox was bda with some Knights who say Ni, dojo was a team, ooa was taken, hand was taken and a team teaming up.

grats everyone!

Splorf22
12-23-2013, 12:51 AM
Well Taken did about 95% of the work :D

Unfortunately I was talking with Ambrotos and this was not a script, but rather Rogean just spawned everything manually. I don't understand why, but apparently repops are actually hard to code (this doesn't make a lot of sense to me; maybe Nilbog can explain. But there must be some slick hack to make it work easily).

Joyelle
12-23-2013, 12:53 AM
draco was not killed by Taken, think it was BDA

Moodie
12-23-2013, 01:23 AM
Pretty awesome GMs. Was a very cool surprise

Pan
12-23-2013, 01:31 AM
Very nice and very nicely done, all. I really had a lot of fun on the repop.

Troubled
12-23-2013, 01:36 AM
Thanks GMs for providing what we've been asking for for a loooong time. I hope this simulated repop reflected the change the p99 guilds are trying to make to the raid scene, and you saw a lowered amount of animosity and petitions. It looks like everyone played pretty damn fairly from my pov.

Thulack
12-23-2013, 01:36 AM
Hey GM's. How many petitions did you guys have today after the repops if you dont mind me asking?

Clark
12-23-2013, 01:44 AM
the earth quake was epic

Funkutron5000
12-23-2013, 02:03 AM
Look at all these clowns, sharing mobs and good times like a bunch of carebears.

Good job ya'll, and it was awesome seeing everyone behave in a civil manner. We have some hope yet!

SyanideGas
12-23-2013, 02:30 AM
My guild trolled me and got me thinking Rogean was looking for me for crashing VP or some shit. I was legit concerned man.

khanable
12-23-2013, 02:31 AM
My guild trolled me and got me thinking Rogean was looking for me for crashing VP or some shit. I was legit concerned man.

He actually was looking for you because you actually did crash VP

don't you read my texts? LOL

SyanideGas
12-23-2013, 02:34 AM
Fuck you Cucumbers! I woke up and was like ....what...

SyanideGas
12-23-2013, 02:39 AM
:)

hatelore
12-23-2013, 02:45 AM
So nice to see how things are going, this is how p99 should have been from the get go. Willing to bet that a good portion of old timers will be returning soon! Good times~

heazels
12-23-2013, 02:47 AM
TMO is DDosing the server now, mad they could not participate.

Velerin
12-23-2013, 02:49 AM
Almost sounds like this is how the server should always be. A bunch of people reliving old times and enjoying classic eq.

Lostprophets
12-23-2013, 02:59 AM
Today's raid targets were evenly distributed among guilds! What a great cycle in recent p99 history!

Sev - Divinity
Talendor - Divinity
VS- IB/FE
Trak- IB/FE
Gore- IB/FE
Naggy - IB / FE
CT- BDA
Draco - BDA
Vox - BDA / NWSNi
Noble - A-Team
OoA - Taken / A-Team
HoV - Taken / A-Team
Inny- Taken
Maestro - Taken
Fay - Taken

Ftfy (Forgot to add Maestro!)

Tierael
12-23-2013, 03:27 AM
Today's raid targets were evenly distributed among guilds! What a great cycle in recent p99 history!

Sev - Divinity
Talendor - Divinity
VS- IB/FE
Trak- IB/FE
Gore- IB/FE
Naggy - IB / FE
CT- BDA
Draco - BDA
Vox - BDA / KWSNi
Noble - A-Team
OoA - Taken / A-Team
HoV - Taken / A-Team
Inny- Taken
Maestro - Taken
Fay - Taken
Ftfy (Forgot to add Maestro!)

FTFY (you went through so much OCD trouble to miss one thing ;P) I see all the little changes you made! Thank you for the OCD list, it was bugging me!

Berell
12-23-2013, 03:35 AM
Originally Posted by lazcar
Today's raid targets were evenly distributed among guilds! What a great cycle in recent p99 history!

Sev - Divinity
Talendor - Divinity
VS- IB/FE
Trak- IB/FE
Gore- IB/FE
Naggy - IB / FE
CT- BDA
Draco - BDA
Vox - BDA / KWSNi
Noble - A-Team
OoA - Taken / A-Team
HoV - Taken / A-Team
Inny- Taken
Maestro - Taken
Fay - Taken

Thanks again BDA for letting us be a part of the great fun this evening! Awesome fun tonight and great hopes for the future! ... Ni!
B

quido
12-23-2013, 04:44 AM
I don't understand why, but apparently repops are actually hard to code (this doesn't make a lot of sense to me; maybe Nilbog can explain. But there must be some slick hack to make it work easily).

There's any number of ways you could get this to work (you're a computer science guy - go check out the code yourself and see) and none of them would be especially difficult. It could be implemented through the quest manager, straight up in C++ with timers, or even as a custom sort of spawn within a single zone that branches out to the rest.

With the exception of a few quite difficult features like the pathing system, LoS checks (the system used was coded by a guy who didn't even understand it and pulled it off the internet and stuck it in, though it's actually quite a decent implementation), and op codes and packet structures for interacting with the client, most of what's going on on an eqemu box is more tedious than difficult. Most every part of it is completely obvious and you just have to know your way around.

Asap
12-23-2013, 05:45 AM
Is this real life? Never thought I would see the day

Tecmos Deception
12-23-2013, 08:22 AM
Hats off to the staff. Some people have been clamoring for repops for a long time now, and I think this one was as much fun as they hoped it would be. Looking forward to more of of the same in the future!

Splorf22
12-23-2013, 08:41 AM
There's any number of ways you could get this to work

This was my thought as well. Maybe we can get Nilbog to chime in on why this would be hard.

quido
12-23-2013, 08:43 AM
As with so much here, I'd bet that deciding the details is more difficult than implementing them.

drktmplr12
12-23-2013, 09:14 AM
No tracking over Christmas even.

Methinks this was the primary reasoning for simulated patch day. Good showing everyone :)

Aeolwind
12-23-2013, 09:54 AM
As with so much here, I'd bet that deciding the details is more difficult than implementing them.

It might be easy. If you consider scripting the Sleeper event easy. Same thing, so this will probably happen sooner than later. It was a little difficult to get mobs to talk across zone lines. If there is some procedure for that now, then this might be "easy".

Barkingturtle
12-23-2013, 09:55 AM
I've played here since this server opened four years ago, and I have never until last night even considered the possibility of raiding. Today, I'm going to start leveling a rogue. Thanks devs.

Tecmos Deception
12-23-2013, 10:07 AM
Hey Sadre. You should look forward to raiding.

;)

Tasslehofp99
12-23-2013, 10:07 AM
Hey Sadre. You should look forward to raiding.

;)

haha

quido
12-23-2013, 10:08 AM
It might be easy. If you consider scripting the Sleeper event easy. Same thing, so this will probably happen sooner than later. It was a little difficult to get mobs to talk across zone lines. If there is some procedure for that now, then this might be "easy".

I would do the actual popping of a simulated repop through manual database manipulation. It's a bit of a hack in that there exists a more elegant solution (though this probably involves considerably more overhead), but why not just have a timer that invokes a C++ function that iterates through the list of applicable mobs and sets their respawn times to 6 seconds in the future or whatever. As far as sending messages and earthquakes or whatever I don't know and would have to do more research, but the popping of the actual spawns is rather trivial.

Aeolwind
12-23-2013, 10:10 AM
It might be easy. If you consider scripting the Sleeper event easy. Same thing, so this will probably happen sooner than later. It was a little difficult to get mobs to talk across zone lines. If there is some procedure for that now, then this might be "easy".

Disclaimer: This is not an indication of any sort of schedule respawns/patch day simulation. I'm commenting only on the possibility of the creation of such a mechanism in the event it might be needed.

Aeolwind
12-23-2013, 10:36 AM
I would do the actual popping of a simulated repop through manual database manipulation. It's a bit of a hack in that there exists a more elegant solution (though this probably involves considerably more overhead), but why not just have a timer that invokes a C++ function that iterates through the list of applicable mobs and sets their respawn times to 6 seconds in the future or whatever. As far as sending messages and earthquakes or whatever I don't know and would have to do more research, but the popping of the actual spawns is rather trivial.

I don't screw around in the source code. I'd rather the game remain playable. I tinker strictly on the scripting side, which is dangerous enough. Making a worldwide emote via scripts is WAY easier than making a mob repop locally because there is built in function for that (quest::we(int type, const char *str) ). There is a quest::repopzone() function, but the issue becomes triggering it remotely. Otherwise, it is just easier to jump from zone to zone repopping them with GM commands. Nil has some nifty new stuff that I've not fully read through yet and this may already have a precedent that can be copy/paste/win.

quido
12-23-2013, 10:51 AM
Yeah limited to quest scripting the problem is a bit more substantial. Or course a signal/handler interface built into the quest system to communicate between zones would be cool, but I'm sad that you guys don't just go straight to the source for a somewhat unique problem such as this. You could implement a #fullrepop command that does exactly what I suggested (manually updates all applicable spawn times) in a matter of minutes.

Vandy
12-23-2013, 10:51 AM
It might be easy. If you consider scripting the Sleeper event easy. Same thing, so this will probably happen sooner than later. It was a little difficult to get mobs to talk across zone lines. If there is some procedure for that now, then this might be "easy".

It's the details I'm pretty sure, what if a NPC is up, does the repop cancel all existing timers, if not what happens if one of the timers reaches zero, etc, etc

As for talking across zones the only method I know of is using global variables and have a Repop watcher(invis npc) in each zone that would have Boss Repop that checks the global repop value every so often. When value = 1, if NPC# is not up, then dbspawn NPC# at x,y,z

Aeolwind
12-23-2013, 11:19 AM
but I'm sad that you guys don't just go straight to the source for a somewhat unique problem such as this.
May happen, but with an all volunteer force we reserve the "Need this really bad" flag for important stuff; and there are several things that would rate FAR more important than this QOL issue.

Aeolwind
12-23-2013, 11:32 AM
It's the details I'm pretty sure, what if a NPC is up, does the repop cancel all existing timers, if not what happens if one of the timers reaches zero, etc, etc

As for talking across zones the only method I know of is using global variables and have a Repop watcher(invis npc) in each zone that would have Boss Repop that checks the global repop value every so often. When value = 1, if NPC# is not up, then dbspawn NPC# at x,y,z

It would reset all timers in theory. I'm honestly not even sure the repopzone function forces timer completion.

Using qglobals is the way that I did it in the past, and that is one giant fat resource hog of a beast apparently. Most of them have been deprecated and replaced with 'niftier' things.

Alarti0001
12-23-2013, 11:39 AM
May happen, but with an all volunteer force we reserve the "Need this really bad" flag for important stuff; and there are several things that would rate FAR more important than this QOL issue.

Allow more volunteers.

Raavak
12-23-2013, 11:43 AM
Fucking noble dropped Ranger, Shadowknight, and Paladin gear. I THREW UP IN MY MOUTH A LITTLE. Then I petitioned to just delete all rangers, paladins, and shadowknights.I support this move.

Rellapse36
12-23-2013, 11:44 AM
Allow more volunteers.

volunteers with clean whistles plz not ones associated with dupers/rmt'rs/cheaters

Thanks

Elmarnieh
12-23-2013, 11:46 AM
This should be a semi-regular thing to simulate how unstable and patched the live servers were. More server reset simulations!

Very very fun - made my night.

Raavak
12-23-2013, 11:47 AM
How about just reboot the server manually every 7 days +/- 24 hours? Try to spread it out to give Euros and West Coasters somewhat even chances.

falkun
12-23-2013, 11:49 AM
How about just reboot the server manually every 7 days +/- 24 hours. Try to spread it out to give Euros and West Coasters somewhat even chances.

West Coast was 3-4pm on a Sunday. Not watching week 17 at home? I do feel bad for the Euros though, ?3am? sucks.

Raavak
12-23-2013, 11:51 AM
volunteers with clean whistles plz not ones associated with dupers/rmt'rs/cheatersSounds about as easy as finding a female virgin (of legal age).

Aeolwind
12-23-2013, 11:58 AM
Allow more volunteers.

Find a problem you want to fix, download source, review, write a fix, PM to a blue or red name.

sedrie.bellamie
12-23-2013, 12:05 PM
can you set up a script that reads people's guild tags. When over 25 of one guild is in the zone, then the other guilds are kicked out like banish from naggy/vox lair?

quido
12-23-2013, 12:06 PM
The problems that need fixing the most are unique to p99 and thus cannot be fixed by a third party =P Send me the p99 source that makes mobs and players ghost/teleport and I'll fix it.

Kevynne
12-23-2013, 12:19 PM
This was awesome. 10/10 would run around various zones chaotically again.

skipdog
12-23-2013, 12:51 PM
Yay for simulated patch days!

Splorf22
12-23-2013, 12:56 PM
Find a problem you want to fix, download source, review, write a fix, PM to a blue or red name.

In questmgr.cpp there exists:
void QuestManager::UpdateSpawnTimer(uint32 id, uint32 newTime)
{
bool found = false;

database.UpdateSpawn2Timeleft(id, 0, (newTime/1000));
LinkedListIterator<Spawn2*> iterator(zone->spawn2_list);
iterator.Reset();
while (iterator.MoreElements())
{
if(iterator.GetData()->GetID() == id)
{
if(!iterator.GetData()->NPCPointerValid())
{
iterator.GetData()->SetTimer(newTime);
}
found = true;
break;
}
iterator.Advance();
}

if(!found)
{
//Spawn wasn't in this zone...
//Tell the other zones to update their spawn time for this spawn point
ServerPacket *pack = new ServerPacket(ServerOP_UpdateSpawn, sizeof(UpdateSpawnTimer_Struct));
UpdateSpawnTimer_Struct *ust = (UpdateSpawnTimer_Struct*)pack->pBuffer;
ust->id = id;
ust->duration = newTime;
worldserver.SendPacket(pack);
safe_delete(pack);
}
}


This appears to do exactly what you want: it updates the database and communicates with the other zone servers if necessary. Is the QuestManager stuff not available from your perl scripts? Or is it difficult to get the NPC id? I poked around in the source a bit more and it *looks* like a static global id per mob, but maybe not.

Anyway, basically I agree with Jeremy: it simply cannot be that hard to implement this, and it would be huge for the community.

August
12-23-2013, 02:11 PM
Find a problem you want to fix, download source, review, write a fix, PM to a blue or red name.

Link to do this? Like, a list of problems, where the source is, etc?

I'm not particularly upset about any one fix so if I could just pick one off the top that'd be ideal.

I have maybe 4-5 hours a week to contribute check-ins.

baalzy
12-23-2013, 02:16 PM
In questmgr.cpp there exists:
SNIP


This appears to do exactly what you want: it updates the database and communicates with the other zone servers if necessary. Is the QuestManager stuff not available from your perl scripts? Or is it difficult to get the NPC id? I poked around in the source a bit more and it *looks* like a static global id per mob, but maybe not.

Anyway, basically I agree with Jeremy: it simply cannot be that hard to implement this, and it would be huge for the community.

I recall it being said that the way variance was implemented it's not possible to actually see when the mobs are going to repop. It could be the interaction with the variance system and the repop timer in the database where manually setting the repop time just causes the variance code to re-trigger and open the mob up to a new window.

I could be mistaken as the thread where I got this information from would be over 2 years old.

Splorf22
12-23-2013, 02:39 PM
I am pretty sure when fay troll went out one of the guides told me that they knew when the mob would spawn.

The logical place to apply variance would be when the respawn is calculated (you can even apply extended variance then).

Raavak
12-23-2013, 02:58 PM
There are plenty of people reading this that know how it works, but I don't. I think the spawn is determined from the moment the mob dies with a /random generated number, and is therefore set. This number or time is then accessible by a GM with a command, like /spawntimer #. I'm also sure extended windows screws some of this up and it is re-randomed at the end of the window. But, like I said, I don't know... these are guesses. Jeremy, Loly, etc would know (or a P99 coder if they can share).

Splorf22
12-23-2013, 03:02 PM
There are plenty of people reading this that know how it works, but I don't. I think the spawn is determined from the moment the mob dies with a /random generated number, and is therefore set. This number or time is then accessible by a GM with a command, like /spawntimer #. I'm also sure extended windows screws some of this up and it is re-randomed at the end of the window. But, like I said, I don't know... these are guesses.

It would be natural but silly to implement extended windows this way; after all you know whether the timer will fall in the last 25% of the window when you make the initial dice roll. So something like this would work:


int respawn_ticks(base, variance)
{
int window = random(0, variance);

if(variance-window < ONE_DAY && random(0, 100) > 75)
return respawn_ticks(base+window, ONE_DAY);
else
return base+window;
}

Aeolwind
12-23-2013, 03:03 PM
In questmgr.cpp there exists:

This appears to do exactly what you want: it updates the database and communicates with the other zone servers if necessary. Is the QuestManager stuff not available from your perl scripts? Or is it difficult to get the NPC id? I poked around in the source a bit more and it *looks* like a static global id per mob, but maybe not.

Anyway, basically I agree with Jeremy: it simply cannot be that hard to implement this, and it would be huge for the community.

QuestManager is the deprecated naming for quest::UpdateSpawnTimer(int32 id, int32 newTime)

Historically the NPC ID has been a problem across zones for the functions I've tried to use. The Spawn2 info is what it is looking for, but then it fans out?

Bear in mind, this could totally be an EBKAC error as well. Logically trying to derive Perl functions with no experience with the language was fun. Let me tinker and see if I can blow up the test server again get this working over Christmas.

But this also wouldn't work for the Sleeper scripting, so I may not put a ton of effort in. As there is no indication that weekly repops are even being considered.

Splorf22
12-23-2013, 03:16 PM
If you want I can get in IIRC and maybe help somewhat . . somehow

also:

As there is no indication that weekly repops are even being considered

Well there is this: http://www.project1999.com/forums/showthread.php?p=745008#post745008

heazels
12-23-2013, 03:26 PM
the database will have the time the mob is supposed to spawn stored...the server doesnt perform checks every tick to see if spawns. Therefor all you need to do is create a command to update the database time of spawn. Which in this case appears to be easily done by calling SetTimer(newTime);

doraf
12-23-2013, 03:41 PM
the database will have the time the mob is supposed to spawn stored...the server doesnt perform checks every tick to see if spawns. Therefor all you need to do is create a command to update the database time of spawn. Which in this case appears to be easily done by calling SetTimer(newTime);

^

Aeolwind
12-23-2013, 03:47 PM
If you want I can get in IIRC and maybe help somewhat . . somehow

also:



Well there is this: http://www.project1999.com/forums/showthread.php?p=745008#post745008

Fairly old post. Would be nice for you guys though.

And SetTime sets the server time iirc which has no effect on spawntimes. Like, none of the times in game, server or spawn times are interconnected in the least.

Oh and to answer an earlier question, spawn time info is not really viewable. And there isn't a GM command to see spawn times.

Splorf22
12-23-2013, 03:47 PM
The way I read that function is that it is not so simple:

Each zone will have a timer for each mob (presumably a 4 byte integer that is checked every tick). Updating those timers is complicated by the fact that they may be in different processes running on different computers. Also, mobs that matter will be in the database so that their repop timers will persist through reboots and zone crashes and such.

Fortunately, that code appears to do exactly what is necessary: first it updates the SQL database, then it modifies any local zone timers, and then it sends update messages over the network to tell the other zone servers to update the spawn timers if necessary. Granted, I could be wrong about all this - it's never easy to jump into a decently sized piece of code and figure out what's going on.

Juevento
12-23-2013, 08:50 PM
Well thanks for ruining this self congratulatory post with your brogramming chatter.

Anyways thanks to the server staff for the unexpected bit of fun yesterday. It was great to see all the different guilds knocking down targets.

kotton05
12-23-2013, 10:22 PM
Thanks for repop and the brogramming talk look like Chinese to me

Messianic
12-23-2013, 10:28 PM
Have you tried turning it off and on again?

heazels
12-23-2013, 11:19 PM
So I was thinking about, you could potentially code in scheduled patch dates or have a macro that triggered it when you logged in game(ie have a command /Schedulerepop for January 15, 2014 and update that date to DB). However you have to set the date out after the next mob repop. I have never looked at the code for this game but here is a rough idea.

TimeOfSpawn = Random(7days whatever)
ForcedDayReset = CheckDBforRepopDate(whereveritsstored)

if(TimeOfSpawn > ForcedDayReset) Then
SetSpawnTime(ForcedDayReset)
Else
SetSpawnTime(TimeOfSpawn)
EndIf

And Do this whenever the intial /random is called when the mob dies. so make the /scheduledrepop command in game have a requirement of being 1-2 weeks out.

Splorf22
12-23-2013, 11:25 PM
This is actually a very clever idea. There is no reason the server cannot compute the next 5000 simulated patch days or whatever and stick them table somewhere. It's not quite as nice as the GMs having the ability to trigger things, but it should be pretty straightforward to implement - probably only one or two places to change.

Vandy
12-24-2013, 01:10 AM
From my understanding they want it coded in for Random weekly repops. Where they can implement it and let it run with no need for staff to do anything.

Estu
12-24-2013, 10:31 AM
there is no indication that weekly repops are even being considered.

http://www.project1999.com/forums/showpost.php?p=1223599&postcount=9

Also, just send a PM to Nilbog. I've seen him post many times about simulated patch day repops and have talked to him in IRC about it and he has always said that he wants it to happen. I can't overstate how good these would be for the server and the community, or how much the players would appreciate it. The recent raid scene agreements and the new VP policy have been amazing but it would be equally amazing to have the greater amount of boss monster pops and consistency that would be offered by simulated patch days.

quido
12-24-2013, 10:42 AM
I finally got power back at 1am today, so after a little research, I see now why this is a somewhat difficult process. I figured out how to see if a particular mob is up just by looking at the database, and I learned how to adjust the respawn timer so that the mob will be set to repop whenever, but apparently getting the actual mob to pop requires the invocation of some function within the zone (you can use the #repop GM command while in the zone, or you can use a parallel quest function that is attached to the zone), and as zones are within their own processes, there is no easy way (that I can see) to do this for all the raid zones.

It seems to me that the solution, like Aeolwind said, is to use a hidden spawn and check $qglobals for a repop condition within the quest manager. Questglobals are inefficient as Aeolwind said due to being routed through database queries, but if you had a mob that popped every minute or two or three, checked for the condition, repopped the raid mob if the condition is met, reset the condition (also if condition has been met and the mob repopped), and then despawned the mob, the overhead would be minimal.

I will try to figure out how to setup such a spawn here soon.

Estu
12-24-2013, 11:31 AM
I finally got power back at 1am today, so after a little research, I see now why this is a somewhat difficult process. I figured out how to see if a particular mob is up just by looking at the database, and I learned how to adjust the respawn timer so that the mob will be set to repop whenever, but apparently getting the actual mob to pop requires the invocation of some function within the zone (you can use the #repop GM command while in the zone, or you can use a parallel quest function that is attached to the zone), and as zones are within their own processes, there is no easy way (that I can see) to do this for all the raid zones.

It seems to me that the solution, like Aeolwind said, is to use a hidden spawn and check $qglobals for a repop condition within the quest manager. Questglobals are inefficient as Aeolwind said due to being routed through database queries, but if you had a mob that popped every minute or two or three, checked for the condition, repopped the raid mob if the condition is met, reset the condition (also if condition has been met and the mob repopped), and then despawned the mob, the overhead would be minimal.

I will try to figure out how to setup such a spawn here soon.

Good stuff, Jeremy!

Rogean
12-24-2013, 01:26 PM
Lol it's funny watching you guys try to learn the mysterious workings of the server :).

Anyways, one of you mentioned QuestManager::UpdateSpawnTimer, and you would be correct:

[Sun Dec 22 21:23:47 2013] You say, '#screenshake global 5000 6'
[Sun Dec 22 21:23:48 2013] You say, '#emote world 15 A mysterious tremor has awakened some powerful creatures! (Simulated Patch Respawn)'
[Sun Dec 22 21:23:48 2013] A mysterious tremor has awakened some powerful creatures! (Simulated Patch Respawn)
[Sun Dec 22 21:23:49 2013] You say, '#peval quest::updatespawntimer(250195, 1);'
[Sun Dec 22 21:23:49 2013] You say, '#peval quest::updatespawntimer(250194, 1);'
[Sun Dec 22 21:23:49 2013] You say, '#peval quest::updatespawntimer(227817, 1);'
[Sun Dec 22 21:23:49 2013] You say, '#peval quest::updatespawntimer(227818, 1);'
[Sun Dec 22 21:23:50 2013] You say, '#peval quest::updatespawntimer(250443, 1);'
[Sun Dec 22 21:23:51 2013] You say, '#peval quest::updatespawntimer(246905, 1);'
[Sun Dec 22 21:23:51 2013] You say, '#peval quest::updatespawntimer(250442, 1);'
[Sun Dec 22 21:23:51 2013] You say, '#peval quest::updatespawntimer(250440, 1);'
[Sun Dec 22 21:23:52 2013] You say, '#peval quest::updatespawntimer(221906, 1);'
[Sun Dec 22 21:23:52 2013] You say, '#peval quest::updatespawntimer(223959, 1);'
[Sun Dec 22 21:23:53 2013] You say, '#peval quest::updatespawntimer(228429, 1);'
[Sun Dec 22 21:23:53 2013] You say, '#peval quest::updatespawntimer(227815, 1);'
[Sun Dec 22 21:23:53 2013] You say, '#peval quest::updatespawntimer(227816, 1);'

#peval is a command that lets me run perl straight on the zone at runtime. It can also run the embedded classes from perspective of my PC and any NPC I have targetted.

As far as mob spawns go, the spawn time is stored in memory of each zone. The only time the database is touched is when the zone is booted up to load it, and when a mob dies to set it.

Coding a respawn system is not difficult, the problem is coming to an agreement with how we want it to be handled. We want to respawn every mob, not just raid mobs, but we want a way to do that without being intrusive to people who are already sitting in a split camp room. Don't want to respawn 5 mobs on top of them for surprise buttsecks.

So someone suggested "Just give a warning then".. but then if we have a warning, we have 100+ raid players poopsocked on the raid mobs before they even spawn. We have camps being stolen when people leave to get to safety, etc.

There's a lot more to consider than how the actual mechanics work.

Concering QuestGlobals, we don't use them. They were an inefficient system that we phased out, like mostly anything else that required consistent database checks. There are many systems we've changed/overhauled/removed from the base EQEmu code, and many custom implementations. We prefer as much caching as possible, offloading as much as possible (All logging goes through packets to a backend service instead of being inserted directly). Our Entity ID tracking system was recoded by Haynar to use an array of pointers instead of a linked list iterator.

A linked list iterator is fine if the base code used it correctly, but there are so many examples of horrible redundant loops occuring the base code that it's extremely inefficient.

For example, any type of EntityList->GetMob. Let's use a derivitive of that, which is something like GetOwner(), which is how a pet references it's master. It would store it by EntityID instead of Pointer, and every time it needed to access it, it would iterate every mob in the zone until it finds it.

And THEN you'd have situations like:

if (GetOwner()) { // Yep I have an owner
GetOwner()->DoStuff();
GetOwner()->DoMoreStuff();
}

You just iterated through the entity list three times for the same pointer. /facepalm.

So.. Haynar and I worked over several years to do many changes...

First, storing pointers so that something like GetOwner() is a direct inline return, instead of a function call to an iterator.
Second, we recoded our entity storage to use an array of pointers instead of a linked list.

This means more memory usage overall, but we have lots of memory, and not as much CPU. So storing an array of 3k 32 bit pointers is a better trade off for the saved CPU of iterating the entire entity list thousands of times a second.

So, I got a bit off topic.. but I'll let you guys jog your memory with that info for a while :)

(I also worked to get rid of as many sql queries during runtime as possible.. as stopping the zone to wait for a query response is a huge performance hit.. but I've already rambled on too much).

Elmarnieh
12-24-2013, 01:33 PM
If you don't want it to be intrusive to existing camps for xp groups and stuff for named (so that casuals can enjoy it to which I totally get) you could change it from an instant spawn to something else like "You hear something powerful in the distance approaching" to give like a 1-2 minute of warning to regular camps.

August
12-24-2013, 01:50 PM
Coding a respawn system is not difficult, the problem is coming to an agreement with how we want it to be handled. We want to respawn every mob, not just raid mobs, but we want a way to do that without being intrusive to people who are already sitting in a split camp room. Don't want to respawn 5 mobs on top of them for surprise buttsecks.

So someone suggested "Just give a warning then".. but then if we have a warning, we have 100+ raid players poopsocked on the raid mobs before they even spawn. We have camps being stolen when people leave to get to safety, etc.


You could do batch spawns, with a warning trigger on the first one and a slightly smaller batch.

"All of Norrath shakes as an earthquake rocks the earth"

Then split mobs up into a batches - static or run-time chosen (for instance, no need to spawn mobs that already are up). Space the waves about 2 minutes apart. Gives people time to get to a safe zone, let's everyone know that it's happening, and people will have to choose targets quickly.

Just my 2c.

-august

baalzy
12-24-2013, 01:58 PM
SNIP

Just to offer my suggestion on a possible solution. When repop occurs grant everyone a temporary immunity shield (say 10 seconds total immunity and then up to 10 minutes immunity if they don't move, incase they were afk) and spawn an instant-click, 1 use, lore, no rent/expires in 10 minutes item on their cursor that succors them. Could code this only for zones where it might be dramatic to have everything repop on them instantly. This would give people the option to either:

1) Attempt to reclear their camp and if they get overwhelmed they have a temporary safety net.
2) Clear out immediately
3) Wait a couple minutes for some backup

Not the most elegant, but if you truly want to respawn every mob in the game I don't know how you could do this in a way that guarantees someone won't have a pile of mobs dropped on their heads unexpectedly. At least you're giving them a safety net if they can't handle the sudden repop and a huge leg-up if they just happen to be in the right place at the right time and are capable. The other solution would be to have some kind of proximity check on all of those high-value targets and delay their repops and give warning. That sounds expensive on CPU usage.

Could maybe couple it with a game-wide full heal/mana refresh.

Gaffin 3.0
12-24-2013, 02:13 PM
wow this is awesome almost makes me want 2 play blue, grats to all guilds

Splorf22
12-24-2013, 02:18 PM
Lol it's funny watching you guys try to learn the mysterious workings of the server :) Anyways, one of you mentioned QuestManager::UpdateSpawnTimer, and you would be correct:

PhD CS (systems/AI emphasis), so this is kind of my thing :)

Coding a respawn system is not difficult, the problem is coming to an agreement with how we want it to be handled. We want to respawn every mob, not just raid mobs, but we want a way to do that without being intrusive to people who are already sitting in a split camp room. Don't want to respawn 5 mobs on top of them for surprise buttsecks.

I would like to restate Estuk: it is impossible to overemphasize how much simultaneous repops would help the server raid scene.
They naturally spread out players, reducing training and other douchebaggery
They make it much, much harder for one guild to 'run the table'. This will be doubly true when the more casual guilds get better at them, and triply true when Velious comes out and increases the number and difficulty of the mobs
They make it possible (with the announcement) to get mobs WITHOUT TRACKING

So while I can see your point about a really elegant full world solution, asking Sirken to run those commands once a week in the mean time would be hugely beneficial to the server.

For example, any type of EntityList->GetMob. Let's use a derivitive of that, which is something like GetOwner(), which is how a pet references it's master. It would store it by EntityID instead of Pointer, and every time it needed to access it, it would iterate every mob in the zone until it finds it.

And THEN you'd have situations like:

if (GetOwner()) { // Yep I have an owner
GetOwner()->DoStuff();
GetOwner()->DoMoreStuff();
}



Kinda surprised you didn't just change it to a hashtable, although of course pointers are the fastest.

Splorf22
12-24-2013, 02:24 PM
Oh, and my thought for repopping the entire world: break it into two operations:

1. World shakes, system message, all mobs despawn, all players are stripped of rez effects and reset to full HP/Mana.

2. After a 30s delay, all mobs repop. Any player that has been idle during those 30 seconds is automatically ejected.

Basically you give people 10-15s to run to a better spot. 95% of the time they can move outside a room or something to a place that will only pop 1-2 on them, possibly invis up, etc. It won't really affect mobilization so much either.

Elmarnieh
12-24-2013, 02:29 PM
Hey on live if afk people were in a bad spot for a server downtime for a patch they were in a bad spot when they came back.

Don't have to make it perfectly save and a small 1-2 min warning is enough to evac or run out of most places without giving guilds too much extra notice.

heazels
12-24-2013, 03:47 PM
would have to do it off hours sometimes for euros/asians too

quido
12-24-2013, 04:14 PM
I think a short warning like 30-60 seconds would give groups enough time to get somewhere safe in most cases while at the same time not allowing people to initiate heavy poopsocks.

Korpskugga
12-24-2013, 04:54 PM
would have to do it off hours sometimes for euros/asians too

/aye ;)

karanastorm
12-25-2013, 12:37 AM
Coding a respawn system is not difficult, the problem is coming to an agreement with how we want it to be handled. We want to respawn every mob, not just raid mobs, but we want a way to do that without being intrusive to people who are already sitting in a split camp room. Don't want to respawn 5 mobs on top of them for surprise buttsecks.

So someone suggested "Just give a warning then".. but then if we have a warning, we have 100+ raid players poopsocked on the raid mobs before they even spawn. We have camps being stolen when people leave to get to safety, etc.

So what if folks die who are at these areas when the server respawns them? It doesn't mean anything because people will show up and those folks will get resed etc. Also I thought this was EQ, people take risks when they camp areas. If they know that a raid target can pop anytime in a week they camp that area at their own risk. Reses are easy to get, people need to understand this is EQ not carebear land when it comes to how they interact with the game world.

baalzy
12-25-2013, 05:47 PM
So what if folks die who are at these areas when the server respawns them? It doesn't mean anything because people will show up and those folks will get resed etc. Also I thought this was EQ, people take risks when they camp areas. If they know that a raid target can pop anytime in a week they camp that area at their own risk. Reses are easy to get, people need to understand this is EQ not carebear land when it comes to how they interact with the game world.

lil bit different. Rog is talking about repopping ALL mobs in game. So you just FD broke a camp and things are on a staggered repop. You just killed the last mob in the rotation and are recovering when suddenly the whole room repops on your head.

Versus
12-25-2013, 08:51 PM
Why are we talking about repopping every mob in the game? Seems like it would create more problems than it's worth. (Unless it is easier to do this rather than JUST repopping boss mobs). It would unnecessarily disrupt EXP groups and camps, where as just respawning bosses which are typically "out of the way" wouldn't disrupt the "regularly scheduled programming."

kotton05
12-25-2013, 08:55 PM
correct me if im wrong, but I think they're trying to automate it to the point where it emotes "you feel the ground shaking" or something like that so folks xp'ing know to play it safe cause its about to all repop?

Versus
12-25-2013, 09:04 PM
I see. I just can't think of many instances where people would be EXP'ing where raid mobs spawn. And if they were doing so for some reason (read: Juggs in Trak lair), there are other, safer options.

I was seeing people being concerned for a monk splitting a bunch of mobs or a group exping in a room and the room respawning completely on them. Outside of Fear or something, I just don't see it. Also, if I was exping and killing a named or something, and he despawned on me mid fight only for fresh mobs to spawn in 30s, i'd be a hot mofo.