aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorQAston <none@none>2009-04-13 21:59:44 +0200
committerQAston <none@none>2009-04-13 21:59:44 +0200
commit0583b4bd047dba91d8fcdd221a1411658d733d3e (patch)
treefcb075d6762f118fd50f337e97ae80c28c09a6d4 /src
parentae7bfa3ae2eb8db4d1543f984af44fc4d4cd6239 (diff)
*Prevent item trade exploit - by Iskander.
*Do not set cooldown for triggered spells. *Do not allow to kill unit twice. --HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/game/Player.cpp3
-rw-r--r--src/game/Spell.cpp4
-rw-r--r--src/game/Unit.cpp11
3 files changed, 11 insertions, 7 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 2d7d98579a8..b9f8edf2b66 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -9547,7 +9547,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const
for(int t = INVENTORY_SLOT_BAG_START; !b_found && t < INVENTORY_SLOT_BAG_END; t++)
{
pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, t );
- if( pBag )
+ if( pBag && ItemCanGoIntoBag(pItem->GetProto(), pBag->GetProto()))
{
for(uint32 j = 0; j < pBag->GetBagSize(); j++)
{
@@ -14418,7 +14418,6 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder )
_LoadAuras(holder->GetResult(PLAYER_LOGIN_QUERY_LOADAURAS), time_diff);
_LoadGlyphAuras();
-
// add ghost flag (must be after aura load: PLAYER_FLAGS_GHOST set in aura)
if( HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST) )
m_deathState = DEAD;
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 4655d91b148..0e6e9c580bd 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -2583,8 +2583,8 @@ void Spell::SendSpellCooldown()
return;
}
- // have infinity cooldown but set at aura apply
- if(m_spellInfo->Attributes & SPELL_ATTR_DISABLED_WHILE_ACTIVE)
+ // have infinity cooldown but set at aura apply // do not set cooldown for triggered spells (needed by reincarnation)
+ if(m_spellInfo->Attributes & SPELL_ATTR_DISABLED_WHILE_ACTIVE || m_IsTriggeredSpell)
return;
_player->AddSpellAndCategoryCooldowns(m_spellInfo,m_CastItem ? m_CastItem->GetEntry() : 0, this);
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 6f57b27d567..fa9f1840a6c 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -5206,7 +5206,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
if (dummySpell->SpellIconID == 2999)
{
if (effIndex!=0)
- return true;
+ return false;
AuraEffect *counter = GetAuraEffect(triggeredByAura->GetId(), 1);
if (!counter)
return true;
@@ -5708,7 +5708,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
return false;
// Only 0 aura can proc
if (effIndex!=0)
- return true;
+ return false;
// Wrath crit
if (procSpell->SpellFamilyFlags[0] & 0x1)
{
@@ -5836,8 +5836,10 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
case SPELLFAMILY_PALADIN:
{
// Seal of Righteousness - melee proc dummy (addition ${$MWS*(0.022*$AP+0.044*$SPH)} damage)
- if (dummySpell->SpellFamilyFlags[0]&0x8000000 && effIndex==0)
+ if (dummySpell->SpellFamilyFlags[0]&0x8000000)
{
+ if (effIndex!=0)
+ return false;
triggered_spell_id = 25742;
float ap = GetTotalAttackPowerValue(BASE_ATTACK);
int32 holy = SpellBaseDamageBonus(SPELL_SCHOOL_MASK_HOLY) +
@@ -12523,6 +12525,9 @@ void Unit::SetToNotify()
void Unit::Kill(Unit *pVictim, bool durabilityLoss)
{
+ // Prevent killing unit twice (and giving reward from kill twice)
+ if (!pVictim->isAlive())
+ return;
pVictim->SetHealth(0);
// find player: owner of controlled `this` or `this` itself maybe