Spawn Conditions Proposal
OK, so in my downtime recently, I have been dreaming up a spawn condition system which can be used to make eqemu's spawn system more dynamic. Here is the proposal, let me know what you guys think:
This system should facilitate several things which I have heard requests for in eqemu:
1. time of day spawns - the ability to change what spawns in a zone based on what the EQ time is.
2. LDoN spawns - change the spawn in a zone based on the ldon difficulty easily.
3. mutliple spawn tables - The ability to switch an entire zone's spawn tables easily.
4. quests - quests will be able to make permanent changes to spawn patterns even across zones.
5. timed spawns - cause a mob to only spawn for an hour, then depop.
New table to hold spawn conditions:
zone - the zone this spawn condition applies to
id - a numeric id of this spawn condition in this zone
value - the current value of this spawn condition
onchange - an action which says what to do for a spawn point which uses this spawn condition when that spawn point changes state between on and off. values: nothing, depop, repop, signal
New table to handle time-driven events:
zone, condition id - what condition does this apply to
enabled - is this event enabled?
time_base, period - values to specify when the event happens. It occurrs every period time units from time_base based on the EQ clock, assuming if we start before time_base, that we start our time base on the previous day and skip any events from that time base to now.
action - what to do when this event is triggered. values: set, add, subtract, multiply, divide
value - the number used by action
the spawn2 table gets two new fields:
1. a spawn condition ID - this associates this specific spawn point with a spawn condition. value 0 is a default 'always enabled' condition number.
2. a spawn condition value - This is a threshold value for the spawn condition. If the condition is below this, the spawn is disabled, above: enabled.
this new functionality will be complimented by some quest functions:
quest::spawn_condition(zone_short, condition_id, new_value) - set a spawn condition's value.
quest::get_spawn_condition(zone_short, condition_id) - returns the value of the spawn condition.
quest::toggle_spawn_event(event_id, bool enable, bool reset_base);
These quest events would be capible of affecting other currently active zones, to cause for example a mob to spawn in another zone, or entire spawn patterns to be altered from a different zone.
|