mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 01:37:00 +00:00
[8040] Implement Creature::ForcedDespawn and ACTION_T_FORCE_DESPAWN for EventAI.
Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
23c96493b1
commit
68848314e2
9 changed files with 33 additions and 23 deletions
|
|
@ -132,6 +132,7 @@ Params are always read from Param1, then Param2, then Param3.
|
|||
38 ACTION_T_ZONE_COMBAT_PULSE No Params Places all players within the instance into combat with the creature. Only works in combat and only works inside of instances.
|
||||
39 ACTION_T_CALL_FOR_HELP Radius Call any friendly creatures (if its not in combat/etc) in radius attack creature target.
|
||||
40 ACTION_T_SET_SHEATH Sheath Let set sheath state for creature (0-no weapon show (not used mostly by creatures), 1-melee weapon show, 2-ranged weapon show)
|
||||
41 ACTION_T_FORCE_DESPAWN No Params Despawns the creature
|
||||
|
||||
* = Use -1 to specify that if this param is picked to do nothing. Random is constant between actions within an event. So if you have a random Yell and a random Sound they will match up (ex: param2 with param2)
|
||||
|
||||
|
|
@ -725,6 +726,12 @@ Let set sheath state for creature.
|
|||
Note: SHEATH_STATE_RANGED case work in combat state only if combat not start as melee commands.
|
||||
This possible setup by set ar event AI start (single used EVENT_T_TIMER_OOC set ACTION_T_COMBAT_MOVEMENT 0 for creature that prefered ranged attack)
|
||||
|
||||
-------------------------
|
||||
41 ACTION_T_FORCE_DESPAWN
|
||||
-------------------------
|
||||
Despawns the creature (in or out of combat)
|
||||
No parameters
|
||||
|
||||
=========================================
|
||||
Target Types
|
||||
=========================================
|
||||
|
|
|
|||
|
|
@ -1580,6 +1580,13 @@ void Creature::Respawn()
|
|||
}
|
||||
}
|
||||
|
||||
void Creature::ForcedDespawn()
|
||||
{
|
||||
setDeathState(JUST_DIED);
|
||||
RemoveCorpse();
|
||||
SetHealth(0); // just for nice GM-mode view
|
||||
}
|
||||
|
||||
bool Creature::IsImmunedToSpell(SpellEntry const* spellInfo)
|
||||
{
|
||||
if (!spellInfo)
|
||||
|
|
|
|||
|
|
@ -629,6 +629,8 @@ class MANGOS_DLL_SPEC Creature : public Unit
|
|||
void RemoveCorpse();
|
||||
bool isDeadByDefault() const { return m_isDeadByDefault; };
|
||||
|
||||
void ForcedDespawn();
|
||||
|
||||
time_t const& GetRespawnTime() const { return m_respawnTime; }
|
||||
time_t GetRespawnTimeEx() const;
|
||||
void SetRespawnTime(uint32 respawn) { m_respawnTime = respawn ? time(NULL) + respawn : 0; }
|
||||
|
|
|
|||
|
|
@ -780,6 +780,11 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
|
|||
m_creature->SetSheath(SheathState(action.set_sheath.sheath));
|
||||
break;
|
||||
}
|
||||
case ACTION_T_FORCE_DESPAWN:
|
||||
{
|
||||
m_creature->ForcedDespawn();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -105,6 +105,7 @@ enum EventAI_ActionType
|
|||
ACTION_T_ZONE_COMBAT_PULSE = 38, // No Params
|
||||
ACTION_T_CALL_FOR_HELP = 39, // Radius
|
||||
ACTION_T_SET_SHEATH = 40, // Sheath (0-passive,1-melee,2-ranged)
|
||||
ACTION_T_FORCE_DESPAWN = 41, // No Params
|
||||
ACTION_T_END,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -666,6 +666,7 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
case ACTION_T_FLEE_FOR_ASSIST: //No Params
|
||||
case ACTION_T_DIE: //No Params
|
||||
case ACTION_T_ZONE_COMBAT_PULSE: //No Params
|
||||
case ACTION_T_FORCE_DESPAWN: //No Params
|
||||
case ACTION_T_AUTO_ATTACK: //AllowAttackState (0 = stop attack, anything else means continue attacking)
|
||||
case ACTION_T_COMBAT_MOVEMENT: //AllowCombatMovement (0 = stop combat based movement, anything else continue attacking)
|
||||
case ACTION_T_RANGED_MOVEMENT: //Distance, Angle
|
||||
|
|
|
|||
|
|
@ -1563,9 +1563,7 @@ void Aura::TriggerSpell()
|
|||
|
||||
player->AutoStoreLoot(creature->GetCreatureInfo()->SkinLootId,LootTemplates_Skinning,true);
|
||||
|
||||
creature->setDeathState(JUST_DIED);
|
||||
creature->RemoveCorpse();
|
||||
creature->SetHealth(0); // just for nice GM-mode view
|
||||
creature->ForcedDespawn();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -1714,9 +1712,7 @@ void Aura::TriggerSpell()
|
|||
|
||||
Creature* creatureTarget = (Creature*)m_target;
|
||||
|
||||
creatureTarget->setDeathState(JUST_DIED);
|
||||
creatureTarget->RemoveCorpse();
|
||||
creatureTarget->SetHealth(0); // just for nice GM-mode view
|
||||
creatureTarget->ForcedDespawn();
|
||||
return;
|
||||
}
|
||||
// // Magic Sucker Device timer
|
||||
|
|
|
|||
|
|
@ -735,9 +735,8 @@ void Spell::EffectDummy(uint32 i)
|
|||
return;
|
||||
|
||||
Creature* creatureTarget = (Creature*)unitTarget;
|
||||
creatureTarget->setDeathState(JUST_DIED);
|
||||
creatureTarget->RemoveCorpse();
|
||||
creatureTarget->SetHealth(0); // just for nice GM-mode view
|
||||
|
||||
creatureTarget->ForcedDespawn();
|
||||
return;
|
||||
}
|
||||
case 16589: // Noggenfogger Elixir
|
||||
|
|
@ -810,9 +809,7 @@ void Spell::EffectDummy(uint32 i)
|
|||
pGameObj->SetUInt32Value(GAMEOBJECT_LEVEL, m_caster->getLevel() );
|
||||
pGameObj->SetSpellId(m_spellInfo->Id);
|
||||
|
||||
creatureTarget->setDeathState(JUST_DIED);
|
||||
creatureTarget->RemoveCorpse();
|
||||
creatureTarget->SetHealth(0); // just for nice GM-mode view
|
||||
creatureTarget->ForcedDespawn();
|
||||
|
||||
DEBUG_LOG("AddObject at SpellEfects.cpp EffectDummy");
|
||||
map->Add(pGameObj);
|
||||
|
|
@ -1026,9 +1023,7 @@ void Spell::EffectDummy(uint32 i)
|
|||
|
||||
Creature* creatureTarget = (Creature*)unitTarget;
|
||||
|
||||
creatureTarget->setDeathState(JUST_DIED);
|
||||
creatureTarget->RemoveCorpse();
|
||||
creatureTarget->SetHealth(0); // just for nice GM-mode view
|
||||
creatureTarget->ForcedDespawn();
|
||||
|
||||
//cast spell Raptor Capture Credit
|
||||
m_caster->CastSpell(m_caster, 42337, true, NULL);
|
||||
|
|
@ -1117,9 +1112,7 @@ void Spell::EffectDummy(uint32 i)
|
|||
|
||||
Creature* creatureTarget = (Creature*)unitTarget;
|
||||
|
||||
creatureTarget->setDeathState(JUST_DIED);
|
||||
creatureTarget->RemoveCorpse();
|
||||
creatureTarget->SetHealth(0); // just for nice GM-mode view
|
||||
creatureTarget->ForcedDespawn();
|
||||
return;
|
||||
|
||||
}
|
||||
|
|
@ -4040,10 +4033,8 @@ void Spell::EffectTameCreature(uint32 /*i*/)
|
|||
if(!pet) // in versy specific state like near world end/etc.
|
||||
return;
|
||||
|
||||
// kill original creature
|
||||
creatureTarget->setDeathState(JUST_DIED);
|
||||
creatureTarget->RemoveCorpse();
|
||||
creatureTarget->SetHealth(0); // just for nice GM-mode view
|
||||
// "kill" original creature
|
||||
creatureTarget->ForcedDespawn();
|
||||
|
||||
uint32 level = (creatureTarget->getLevel() < (m_caster->getLevel() - 5)) ? (m_caster->getLevel() - 5) : creatureTarget->getLevel();
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "8039"
|
||||
#define REVISION_NR "8040"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue