diff options
author | QAston <none@none> | 2009-04-13 21:59:44 +0200 |
---|---|---|
committer | QAston <none@none> | 2009-04-13 21:59:44 +0200 |
commit | 0583b4bd047dba91d8fcdd221a1411658d733d3e (patch) | |
tree | fcb075d6762f118fd50f337e97ae80c28c09a6d4 /src | |
parent | ae7bfa3ae2eb8db4d1543f984af44fc4d4cd6239 (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.cpp | 3 | ||||
-rw-r--r-- | src/game/Spell.cpp | 4 | ||||
-rw-r--r-- | src/game/Unit.cpp | 11 |
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 |