mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 10:37:03 +00:00
[8018] Implement EVENT_T_BUFFED and EVENT_T_TARGET_BUFFED for creature EventAI.
Its can be used for check specific spell auras stack size for event triggering.
This commit is contained in:
parent
3c9f9e3fa3
commit
5350dbafd9
5 changed files with 73 additions and 2 deletions
|
|
@ -80,6 +80,8 @@ Some events such as EVENT_T_AGGRO, EVENT_T_DEATH, EVENT_T_SPAWNED, and EVENT_T_E
|
|||
18 EVENT_T_TARGET_MANA ManaMax%, ManaMin%, RepeatMin, RepeatMax
|
||||
21 EVENT_T_REACHED_HOME NONE Expires when creature reach it's home(spawn) location after Evade.
|
||||
22 EVENT_T_RECEIVE_EMOTE EmoteId, Condition, CondValue1, CondValue2 Expires when creature receive emote with text emote id(enum TextEmotes). Condition can be defined. If set, then most conditions has additional value (see enum ConditionType)
|
||||
23 EVENT_T_BUFFED SpellID, AmmountInStack, RepeatMin, RepeatMax Expires when creature have spell (Param1) auras applied stack greater or equal provided in Param2 amount. Will repeat every (Param3) and (Param4).
|
||||
24 EVENT_T_TARGET_BUFFED SpellID, AmmountInStack, RepeatMin, RepeatMax Expires when target unit have spell (Param1) auras applied stack greater or equal provided in Param2 amount. Will repeat every (Param3) and (Param4).
|
||||
|
||||
=========================================
|
||||
Action Types
|
||||
|
|
@ -339,6 +341,22 @@ Most commonly used to cast spells that can not be casted in EVENT_T_EVADE and ot
|
|||
Expires only when creature receive emote from player. Valid text emote id's are in Mangos source (enum TextEmotes)
|
||||
Event does not require any conditions to process, however many are ecpected to have condition.
|
||||
|
||||
---------------------------
|
||||
23 = EVENT_T_BUFFED :
|
||||
---------------------------
|
||||
Parameter 1: SpellId - This is the SpellID That the Aura Check will look for
|
||||
Parameter 2: Amount - This is the amount of SpellID's auras at creature required for event expire.
|
||||
Parameter 3: RepeatMin - Minimum Time used to calculate Random Repeat Expire
|
||||
Parameter 4: RepeatMax - Maximum Time used to calculate Random Repeat Expire
|
||||
|
||||
---------------------------
|
||||
24 = EVENT_T_TARGET_BUFFED:
|
||||
---------------------------
|
||||
Parameter 1: SpellId - This is the SpellID That the Aura Check will look for
|
||||
Parameter 2: Amount - This is the amount of SpellID's auras at target unit required for event expire.
|
||||
Parameter 3: RepeatMin - Minimum Time used to calculate Random Repeat Expire
|
||||
Parameter 4: RepeatMax - Maximum Time used to calculate Random Repeat Expire
|
||||
|
||||
EventAI use conditions from available in Mangos (enum ConditionType)
|
||||
Current implemented conditions:
|
||||
CONDITION_NONE (0) 0 0
|
||||
|
|
|
|||
|
|
@ -274,8 +274,8 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
|
||||
//Repeat Timers
|
||||
pHolder.UpdateRepeatTimer(m_creature,event.summon_unit.repeatMin,event.summon_unit.repeatMax);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EVENT_T_TARGET_MANA:
|
||||
{
|
||||
if (!m_creature->isInCombat() || !m_creature->getVictim() || !m_creature->getVictim()->GetMaxPower(POWER_MANA))
|
||||
|
|
@ -293,6 +293,34 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
|||
case EVENT_T_REACHED_HOME:
|
||||
case EVENT_T_RECEIVE_EMOTE:
|
||||
break;
|
||||
case EVENT_T_BUFFED:
|
||||
{
|
||||
//Note: checked only aura for effect 0, if need check aura for effect 1/2 then
|
||||
// possible way: pack in event.buffed.amount 2 uint16 (ammount+effectIdx)
|
||||
Aura* aura = m_creature->GetAura(event.buffed.spellId,0);
|
||||
if(!aura || aura->GetStackAmount() < event.buffed.amount)
|
||||
return false;
|
||||
|
||||
//Repeat Timers
|
||||
pHolder.UpdateRepeatTimer(m_creature,event.buffed.repeatMin,event.buffed.repeatMax);
|
||||
break;
|
||||
}
|
||||
case EVENT_T_TARGET_BUFFED:
|
||||
{
|
||||
//Prevent event from occuring on no unit
|
||||
if (!pActionInvoker)
|
||||
return false;
|
||||
|
||||
//Note: checked only aura for effect 0, if need check aura for effect 1/2 then
|
||||
// possible way: pack in event.buffed.amount 2 uint16 (ammount+effectIdx)
|
||||
Aura* aura = pActionInvoker->GetAura(event.buffed.spellId,0);
|
||||
if(!aura || aura->GetStackAmount() < event.buffed.amount)
|
||||
return false;
|
||||
|
||||
//Repeat Timers
|
||||
pHolder.UpdateRepeatTimer(m_creature,event.buffed.repeatMin,event.buffed.repeatMax);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
sLog.outErrorDb("CreatureEventAI: Creature %u using Event %u has invalid Event Type(%u), missing from ProcessEvent() Switch.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@ enum EventAI_Type
|
|||
EVENT_T_QUEST_COMPLETE = 20, //
|
||||
EVENT_T_REACHED_HOME = 21, // NONE
|
||||
EVENT_T_RECEIVE_EMOTE = 22, // EmoteId, Condition, CondValue1, CondValue2
|
||||
EVENT_T_BUFFED = 23, // Param1 = SpellID, Param2 = Number of Time STacked, Param3/4 Repeat Min/Max
|
||||
EVENT_T_TARGET_BUFFED = 24, // Param1 = SpellID, Param2 = Number of Time STacked, Param3/4 Repeat Min/Max
|
||||
|
||||
EVENT_T_END,
|
||||
};
|
||||
|
|
@ -501,6 +503,15 @@ struct CreatureEventAI_Event
|
|||
uint32 conditionValue1;
|
||||
uint32 conditionValue2;
|
||||
} receive_emote;
|
||||
// EVENT_T_BUFFED = 23
|
||||
// EVENT_T_TARGET_BUFFED = 24
|
||||
struct
|
||||
{
|
||||
uint32 spellId;
|
||||
uint32 amount;
|
||||
uint32 repeatMin;
|
||||
uint32 repeatMax;
|
||||
} buffed;
|
||||
|
||||
// RAW
|
||||
struct
|
||||
|
|
|
|||
|
|
@ -378,6 +378,20 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
|||
break;
|
||||
}
|
||||
|
||||
case EVENT_T_BUFFED:
|
||||
case EVENT_T_TARGET_BUFFED:
|
||||
{
|
||||
SpellEntry const* pSpell = sSpellStore.LookupEntry(temp.buffed.spellId);
|
||||
if (!pSpell)
|
||||
{
|
||||
sLog.outErrorDb("CreatureEventAI: Creature %u has non-existant SpellID(%u) defined in event %u.", temp.creature_id, temp.spell_hit.spellId, i);
|
||||
continue;
|
||||
}
|
||||
if (temp.buffed.repeatMax < temp.buffed.repeatMin)
|
||||
sLog.outErrorDb("CreatureEventAI: Creature %u are using repeatable event(%u) with param4 < param3 (RepeatMax < RepeatMin). Event will never repeat.", temp.creature_id, i);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
sLog.outErrorDb("CreatureEventAI: Creature %u using not checked at load event (%u) in event %u. Need check code update?", temp.creature_id, temp.event_id, i);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "8017"
|
||||
#define REVISION_NR "8018"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue