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
|
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.
|
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)
|
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
|
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)
|
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.
|
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)
|
EventAI use conditions from available in Mangos (enum ConditionType)
|
||||||
Current implemented conditions:
|
Current implemented conditions:
|
||||||
CONDITION_NONE (0) 0 0
|
CONDITION_NONE (0) 0 0
|
||||||
|
|
|
||||||
|
|
@ -274,8 +274,8 @@ bool CreatureEventAI::ProcessEvent(CreatureEventAIHolder& pHolder, Unit* pAction
|
||||||
|
|
||||||
//Repeat Timers
|
//Repeat Timers
|
||||||
pHolder.UpdateRepeatTimer(m_creature,event.summon_unit.repeatMin,event.summon_unit.repeatMax);
|
pHolder.UpdateRepeatTimer(m_creature,event.summon_unit.repeatMin,event.summon_unit.repeatMax);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case EVENT_T_TARGET_MANA:
|
case EVENT_T_TARGET_MANA:
|
||||||
{
|
{
|
||||||
if (!m_creature->isInCombat() || !m_creature->getVictim() || !m_creature->getVictim()->GetMaxPower(POWER_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_REACHED_HOME:
|
||||||
case EVENT_T_RECEIVE_EMOTE:
|
case EVENT_T_RECEIVE_EMOTE:
|
||||||
break;
|
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:
|
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);
|
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;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,8 @@ enum EventAI_Type
|
||||||
EVENT_T_QUEST_COMPLETE = 20, //
|
EVENT_T_QUEST_COMPLETE = 20, //
|
||||||
EVENT_T_REACHED_HOME = 21, // NONE
|
EVENT_T_REACHED_HOME = 21, // NONE
|
||||||
EVENT_T_RECEIVE_EMOTE = 22, // EmoteId, Condition, CondValue1, CondValue2
|
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,
|
EVENT_T_END,
|
||||||
};
|
};
|
||||||
|
|
@ -501,6 +503,15 @@ struct CreatureEventAI_Event
|
||||||
uint32 conditionValue1;
|
uint32 conditionValue1;
|
||||||
uint32 conditionValue2;
|
uint32 conditionValue2;
|
||||||
} receive_emote;
|
} receive_emote;
|
||||||
|
// EVENT_T_BUFFED = 23
|
||||||
|
// EVENT_T_TARGET_BUFFED = 24
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 spellId;
|
||||||
|
uint32 amount;
|
||||||
|
uint32 repeatMin;
|
||||||
|
uint32 repeatMax;
|
||||||
|
} buffed;
|
||||||
|
|
||||||
// RAW
|
// RAW
|
||||||
struct
|
struct
|
||||||
|
|
|
||||||
|
|
@ -378,6 +378,20 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
|
||||||
break;
|
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:
|
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);
|
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;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "8017"
|
#define REVISION_NR "8018"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue