4.8 KiB
4.8 KiB
File: SpellProcess.h
Classes
InterruptStruct
CastTimer
CastSpell
RecastTimer
SpellProcess
Functions
void RemoveCaster(Spawn* caster, bool lock_spell_process = true);
void RemoveAllSpells(bool reload_spells = false);
void Process();
void Interrupted(Entity* caster, Spawn* interruptor, int16 error_code, bool cancel = false, bool from_movement = false);
void ProcessSpell(ZoneServer* zone, Spell* spell, Entity* caster, Spawn* target = 0, bool lock = true, bool harvest_spell = false, LuaSpell* customSpell = 0, int16 custom_cast_time = 0, bool in_heroic_opp = false);
void ProcessEntityCommand(ZoneServer* zone, EntityCommand* entity_command, Entity* caster, Spawn* target, bool lock = true, bool in_heroic_opp = false);
bool TakePower(LuaSpell* spell, int32 custom_power_req = 0);
bool CheckPower(LuaSpell* spell);
bool TakeHP(LuaSpell* spell, int32 custom_hp_req = 0);
bool CheckHP(LuaSpell* spell);
bool CheckConcentration(LuaSpell* spell);
bool CheckSavagery(LuaSpell* spell);
bool TakeSavagery(LuaSpell* spell);
bool CheckDissonance(LuaSpell* spell);
bool AddDissonance(LuaSpell* spell);
bool AddConcentration(LuaSpell* spell);
bool CastProcessedSpell(LuaSpell* spell, bool passive = false, bool in_heroic_opp = false);
bool CastProcessedEntityCommand(EntityCommand* entity_command, Client* client, Spawn* target, bool in_heroic_opp = false);
void SendStartCast(LuaSpell* spell, Client* client);
void SendFinishedCast(LuaSpell* spell, Client* client);
void LockAllSpells(Client* client);
void UnlockAllSpells(Client* client, Spell* exception = 0);
void UnlockSpell(Client* client, Spell* spell);
bool DeleteCasterSpell(Spawn* caster, Spell* spell, string reason = "");
bool DeleteCasterSpell(LuaSpell* spell, string reason="", bool removing_all_spells = false, Spawn* remove_target = nullptr, bool zone_shutting_down = false, bool shared_lock_spell = true);
void CheckInterrupt(InterruptStruct* interrupt);
void RemoveSpellTimersFromSpawn(Spawn* spawn, bool remove_all = false, bool delete_recast = false, bool call_expire_function = true, bool lock_spell_process = false);
void CheckRecast(Spell* spell, Entity* caster, float timer_override = 0, bool check_linked_timers = true);
void AddSpellToQueue(Spell* spell, Entity* caster);
void RemoveSpellFromQueue(Spell* spell, Entity* caster, bool send_update = true);
void RemoveSpellFromQueue(Entity* caster, bool hostile_only = false);
bool CheckSpellQueue(Spell* spell, Entity* caster);
bool IsReady(Spell* spell, Entity* caster);
void SendSpellBookUpdate(Client* client);
bool CastPassives(Spell* spell, Entity* caster, bool remove = false);
bool CastInstant(Spell* spell, Entity* caster, Entity* target, bool remove = false, bool passive=false);
void AddSpellScriptTimer(SpellScriptTimer* timer);
void RemoveSpellScriptTimer(SpellScriptTimer* timer, bool locked=false);
void RemoveSpellScriptTimerBySpell(LuaSpell* spell, bool clearPendingDeletes=true);
void CheckSpellScriptTimers();
bool SpellScriptTimersHasSpell(LuaSpell* spell);
std::string SpellScriptTimerCustomFunction(LuaSpell* spell);
void ClearSpellScriptTimerList();
void RemoveTargetFromSpell(LuaSpell* spell, Spawn* target, bool remove_caster = false);
void CheckRemoveTargetFromSpell(LuaSpell* spell, bool allow_delete = true, bool removing_all_spells = false);
void RemoveTargetList(LuaSpell* spell);
bool AddHO(Client* client, HeroicOP* ho);
bool AddHO(int32 group_id, HeroicOP* ho);
void KillHOBySpawnID(int32 spawn_id);
void AddSpellCancel(LuaSpell* spell);
void DeleteSpell(LuaSpell* spell);
void SpellCannotStack(ZoneServer* zone, Client* client, Entity* caster, LuaSpell* lua_spell, LuaSpell* conflictSpell);
bool ProcessSpell(LuaSpell* spell, bool first_cast = true, const char* function = 0, SpellScriptTimer* timer = 0, bool all_targets = false);
std::string ApplyLuaFunction(LuaSpell* spell, bool first_cast, const char* function, SpellScriptTimer* timer, Spawn* altTarget = 0);
void AddActiveSpell(LuaSpell* spell);
void DeleteActiveSpell(LuaSpell* spell, bool skipRemoveCurrent = false);
Notable Comments
- /*
- */
- ///
Handles all spell casts for a zone, only 1 SpellProcess per zone - /// Remove dead pointers for casters when the Spawn is deconstructed
- ///
Remove all spells from the SpellProcess - ///
Main loop, handles everything (interupts, cast time, recast, ...) - ///
Interrupts the caster (creates the InterruptStruct and adds it to a list) - /// Entity being interrupted
- /// Spawn that interrupted the caster
- /// The error code