Waiting on other people? Why would you have to wait for anything besides the mob to spawn? Is this server one of those things where you have to apply in a discord channel to see if you're allowed to kill a mob or not? Because normally you don't have to wait for anyone. The first group to mobilize and kill the group/raid target gets the loot
Here's the technical layout for our new automated raid system, which will also contain a form of 'competition' with scheduled windows where you can compete for extra loot before the NPCs return to window.
Raids require 12 players in the same guild, 18 total to register and participate in the raid rotation. Must be equal to or above level 30. Must have an officer from the guild in the raid.
* Add a system that counts the number of players in the same guild.
* Save the guild ID on the member list in the raid.
* Check if the player is an officer in their guild and store in the member list in the raid.
Each mob that is tagged this way, the spawn2 timer is ignored completely and never naturally ticks.
* Create a mechanism for tagging NPCs by rotation ID
** Rotation ID will tag all mobs together that should exist as part of a single rotation.
** Rotation ID will be applied to the spawn2 table and thus individual entries, not npc_types themselves.
spawn2 field: rotation ID
** Make a table of representation of spawn2 and rotation IDs
** raid_rotation - similar to spawn2
id || name (user friendly name) || time_per_rotation || time_per_tryout
** raid_rotation_entries - similar to spawnentry
rotation_id || guild_id || position || 0 - successful, - 1 pending, - 2 failed, - 3 tryout successful || last_tryout_date
** raid_rotation_respawns table - applies to current spawn for rotation_id
spawn2_id || rotation_id || killed
* NPC::NPC
on initial aggro AND GM-Enforced rotations in effect: checks raid for raid conditional
If failing raid conditional, mob forcibly evacs player.
Replace the mechanism that drives spawn2 with a custom timer dependent on the state of:
Quakes
Natural rotation
* Spawn2::resetTimer() should have a function that overrides the functionality entirely IF the mob's spawn2 has a rotation_id
Take number of guilds in rotation, divide the spawn2 natural timer by the number of guilds in rotations. If that ends up as less than 24 hours, set to 24 hours between spawns.
* this will be the contents of the resetTimer override
* A custom process function will drive when this timer is called (and thus resetTimer / depop routine)
* A mechanism to set the ongoing spawn timer for the spawn2
* A max for the timer to be 24, spawntimer
* If it's 24, timer fires at servertime + 0
When a guild rotation has started, spawn the mob(s).
* Create repop routine that ONLY respawns mobs that are in the rotation_id
At the end of the rotation, if the mob is still up, depop the mob(s).
* This will update raid_rotation_entries with the status of success or failed if the guild is pending
When the new rotation starts (timer), spawn the mob(s).
* Use repop routine from previous status
#rotation command
* New command. Will be used by a guild officer or leader to see their current position in the upcoming or current rotation(s).
Addendum to the rotations command: #rotation swap <guild id>
* Need to add a field to the rotations table that is swapid, default null
* If both guilds issue a swap on eachother, they swap position id and both values are returned to null
* Can only swap if in the 'pending' state
Quakes override the rotation with their own for two hours.
* We need to save the state of the currently spawned NPCs in raid_rotation_respawns
Rules 9 and 10 do not apply during quakes.
* This is out of scope for development
Quakes should only allow mobs that were still alive for that rotation to respawn.
* Check the current state for killed NPCs, respawn them if they're killed.
Quakes last for 2 hours
* Start/end time from World applies local quake rules, when GM-Enforced rotations returns as the ruleset, we restore the previous state. (Depop or Re-Alive mobs as needed)
Flagging system:
Mobs won't naturally respawn. Instead, an NPC will be at the entrance of the tryout zone.
* Create routine to respawn all trial flagged NPCs
* Repop the entire zone. Despawn the entire zone 2 hours after the last repop via quest script, excluding the main NPC.
* Quest script to track dead NPCs.
* Use raid rotation player count requirement from normal raiding routine.
* Create quest functions to:
* Store rotation guild_id for majority
* Check if guild is on any state but failed, or missing from table
* Flag guild as tryout started.
* Track NPCs that are still alive from the rotation.
* Check if trial is in progress
* Assign tryout zone to raid_id for duration
Hand them <x> platinum, and the zone will entirely repop. Everyone will be moved to the zonein.
* Create quest script on turnin that calls function to repop (excluding quest giver)
* Quest script should evac all members
Raid engagement rules apply to the raid mob in the zone. After two hours in the tryout zone, every single NPC despawns in the tryout zone.
* Adjustable 2 hour timer (raid_rotations table)
* Call function to despawn zone (excluding quest giver)
I don't think 'waiting for a goblin to spawn so you can left click it and hit give item' is exciting or emergent gameplay. It wasn't then, it isn't now. It's just another step of many that you have to do to complete a quest.
In your own example, you don't normally have to wait for anyone. However, this is at odds with reality of how the game works in theory, versus how the game works in practice.
On Project 1999, you need to /random against other people to do those aforementioned quest turn-ins, or in the case of Verina Tomb, camp a single NPC spawn point for hours with no challenge whatsoever other than knowing when she /might/ spawn, and waiting for her.
On TLP, the person who turns in the mob gets the quest item. But for mobs like Verina Tomb, they are just DPS races.
In both of these cases, you are able to kill the NPC. However, other players may be there, which means you have to wait for 'someone' to do their business until the next spawn, or you have to DPS race a creature against a competing force. Even in Oakwynd, the FTE server, you can still 'steal' FTE credit from another player and 'take' a mob with a large enough force, which defeats the purpose of an FTE system.
On Quarm, we saw two ways in which this could work: Automated raid rotations for those who don't mind waiting a bit to guarantee a specific time in which they can log on, kill the creature, and log off - but they still don't get the choice in the day they do this. And the second option, which suspends the rules on ninja looting, kill stealing and training, and turns raids ultra-competitive for a 2 hour window.
But, for those that differ in opinion, there are other places to play the game where your /random roll is the determining factor of who turns the quest in, and others where the speed of your turn-in determines which loot you get, in which you're also competing with third-party program users for the turn-in.
My opinion, and thus the servers' philosophy is that loot denial in those situations are only favored and encouraged by sociopaths who enjoy watching others suffer. I do not wish to be an enabler for that type of behavior, and I think games should be fun for everyone, not just the person running MacroQuest Next to turn it in with millisecond precision, or the person with great luck through RNG. Neither one of those are indicative of your 'ability' to do the encounter, which is the important distinction.