@@ -19,7 +19,7 @@ ElunaProcInfo::ElunaProcInfo(Unit* actor, Unit* actionTarget, uint32 typeMask,
1919#endif
2020{
2121}
22-
22+ # if defined ELUNA_TRINITY
2323ElunaProcInfo::ElunaProcInfo (ProcEventInfo& procInfo, Map* map)
2424 : _actor(procInfo.GetActor()), _actionTarget(procInfo.GetActionTarget()), _typeMask(procInfo.GetTypeMask()), _spellTypeMask(procInfo.GetSpellTypeMask()), _spellPhaseMask(procInfo.GetSpellPhaseMask())
2525 , _hitMask(procInfo.GetHitMask()), _spell(const_cast <Spell*>(procInfo.GetProcSpell())), _spellInfo(procInfo.GetSpellInfo()), _schoolMask(procInfo.GetSchoolMask()), _damage(0 )
@@ -58,13 +58,29 @@ ElunaProcInfo::ElunaProcInfo(ProcEventInfo& procInfo, Map* map)
5858 }
5959 }
6060}
61+ #elif defined ELUNA_CMANGOS
62+ ElunaProcInfo::ElunaProcInfo (ProcExecutionData& procInfo, Map* map)
63+ : _actor(procInfo.attacker), _actionTarget(procInfo.victim), _spell(const_cast <Spell*>(procInfo.spell))
64+ , _spellInfo(procInfo.spellInfo), _damage(0 )
65+ , _attackType(BASE_ATTACK ), _damageAbsorb(0 ), _resist(0 ), _block(0 )
66+ , _heal(0 ), _effectiveHeal(0 ), _healAbsorb(0 ), _map(map)
67+ #ifdef TRACKABLE_PTR_NAMESPACE
68+ ,m_scriptRef(this , NoopAuraDeleter())
69+ #endif
70+ {
71+ }
72+ #endif
6173
6274SpellInfo const * ElunaProcInfo::GetSpellInfo () const
6375{
6476 if (_spellInfo)
6577 return _spellInfo;
6678 if (_spell)
79+ #if defined ELUNA_TRINITY
6780 return _spell->GetSpellInfo ();
81+ #elif defined ELUNA_CMANGOS
82+ return _spell->GetSpellProto ();
83+ #endif
6884 return nullptr ;
6985}
7086
@@ -80,7 +96,7 @@ void ElunaProcInfo::SetHeal(uint32 heal)
8096 _heal = heal;
8197 _effectiveHeal = heal;
8298}
83-
99+ # if defined ELUNA_TRINITY
84100void ElunaProcInfo::ApplyToProcEventInfo (ProcEventInfo& procInfo) const
85101{
86102 if (DamageInfo* damageInfo = procInfo.GetDamageInfo ())
@@ -122,11 +138,45 @@ void ElunaProcInfo::ApplyToProcEventInfo(ProcEventInfo& procInfo) const
122138 }
123139 }
124140}
141+ #elif defined ELUNA_CMANGOS
142+ void ElunaProcInfo::ApplyToProcEventInfo (ProcExecutionData& procInfo) const
143+ {
144+ if (HasDamage ())
145+ {
146+ int32 damageDiff = static_cast <int32>(_damage) - static_cast <int32>(procInfo.damage );
147+ if (damageDiff != 0 )
148+ procInfo.damage = damageDiff;
149+
150+ uint32 currentAbsorb = procInfo.absorb ;
151+
152+ uint32 absorbToAdd = (_damageAbsorb > currentAbsorb) ? (_damageAbsorb - currentAbsorb) : 0 ;
153+
154+ if (absorbToAdd > 0 )
155+ procInfo.absorb = absorbToAdd;
156+ }
157+
158+ if (HasHeal ())
159+ {
160+ uint32 currentAbsorb = procInfo.absorb ;
161+ uint32 absorbToAdd = (_healAbsorb > currentAbsorb) ? (_healAbsorb - currentAbsorb) : 0 ;
162+
163+ if (absorbToAdd > 0 )
164+ procInfo.absorb = absorbToAdd;
165+
166+ procInfo.healthGain = _effectiveHeal;
167+ }
168+ }
169+ #endif
125170
171+ #ifdef ELUNA_TRINITY
126172ElunaSpellInfo::ElunaSpellInfo (uint32 spellId) : _spellInfo(sSpellMgr ->GetSpellInfo (spellId))
127173{
128- #ifdef ELUNA_TRINITY
129174 if (_spellInfo)
130175 m_scriptRef = Trinity::unique_trackable_ptr<ElunaSpellInfo>(this , NoopAuraDeleter ());
176+ #elif defined ELUNA_CMANGOS
177+ ElunaSpellInfo::ElunaSpellInfo (uint32 spellId) : _spellInfo (sSpellMgr .GetSpellEntry (spellId))
178+ {
179+ if (_spellInfo)
180+ m_scriptRef = MaNGOS::unique_trackable_ptr<ElunaSpellInfo>(this , NoopAuraDeleter ());
131181#endif
132182}
0 commit comments