diff options
| author | Subv <s.v.h21@hotmail.com> | 2012-10-16 21:55:01 -0500 |
|---|---|---|
| committer | Subv <s.v.h21@hotmail.com> | 2012-10-16 21:55:01 -0500 |
| commit | 705873091b470a5d0cd361bd7f295ec724141df2 (patch) | |
| tree | 2b557293395baaf88d66a1fbac55b3919569c0fc /src/server/game/Entities | |
| parent | b49891e348c01ae7f240ef07c05e09bc361f4c58 (diff) | |
| parent | 27f091806a6f52f406837d188dd4171019bfa59b (diff) | |
Merge branch 'master' of https://github.com/TrinityCore/TrinityCore into 4.3.4
Conflicts:
src/server/game/Entities/Player/Player.cpp
src/server/game/Handlers/TicketHandler.cpp
src/server/game/Tickets/TicketMgr.cpp
src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
Diffstat (limited to 'src/server/game/Entities')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 180 | ||||
| -rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 2 |
2 files changed, 36 insertions, 146 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 0582a879d5f..036062393fb 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -9170,7 +9170,6 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) { // data depends on zoneid/mapid... Battleground* bg = GetBattleground(); - uint16 NumberOfFields = 0; uint32 mapid = GetMapId(); OutdoorPvP* pvp = sOutdoorPvPMgr->GetOutdoorPvPToZoneId(zoneid); InstanceScript* instance = GetInstanceScript(); @@ -9178,91 +9177,12 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) sLog->outDebug(LOG_FILTER_NETWORKIO, "Sending SMSG_INIT_WORLD_STATES to Map: %u, Zone: %u", mapid, zoneid); - // may be exist better way to do this... - switch (zoneid) - { - case 0: - case 1: - case 4: - case 8: - case 10: - case 11: - case 12: - case 36: - case 38: - case 40: - case 41: - case 51: - case 267: - case 1519: - case 1537: - case 2257: - case 2918: - NumberOfFields = 8; - break; - case 1377: - NumberOfFields = 15; - break; - case 2597: - NumberOfFields = 83; - break; - case 3277: - NumberOfFields = 18; - break; - case 3358: - case 3820: - NumberOfFields = 40; - break; - case 3483: - NumberOfFields = 27; - break; - case 3518: - NumberOfFields = 39; - break; - case 3519: - NumberOfFields = 38; - break; - case 3521: - NumberOfFields = 37; - break; - case 3698: - case 3702: - case 3968: - case 4378: - case 3703: - NumberOfFields = 11; - break; - case 4384: - NumberOfFields = 30; - break; - case 4710: - NumberOfFields = 28; - break; - case 4812: // Icecrown Citadel - case 4100: // The Culling of Stratholme - NumberOfFields = 13; - break; - case 4987: // The Ruby Sanctum - NumberOfFields = 3; - break; - case 4273: // Ulduar - NumberOfFields = 10; - break; - case 4197: // Wintergrasp - /// Use the max here, and fill with zeros if missing. - NumberOfFields = 10 + WG_MAX_OBJ + WG_MAX_WORKSHOP; - break; - default: - NumberOfFields = 12; - break; - } - - WorldPacket data(SMSG_INIT_WORLD_STATES, (4+4+4+2+(NumberOfFields*8))); + WorldPacket data(SMSG_INIT_WORLD_STATES, (4+4+4+2+(12*8))); data << uint32(mapid); // mapid data << uint32(zoneid); // zone id data << uint32(areaid); // area id, new 2.1.0 size_t countPos = data.wpos(); - data << uint16(NumberOfFields); // count of uint64 blocks + data << uint16(0); // count of uint64 blocks data << uint32(0x8d8) << uint32(0x0); // 1 data << uint32(0x8d7) << uint32(0x0); // 2 data << uint32(0x8d6) << uint32(0x0); // 3 @@ -9806,8 +9726,6 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) bf->FillInitialWorldStates(data); break; } - else - data.put<uint16>(countPos, 12); // No break here, intended. default: data << uint32(0x914) << uint32(0x0); // 7 @@ -9816,6 +9734,10 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) data << uint32(0x915) << uint32(0x0); // 10 break; } + + uint16 length = (data.wpos() - countPos) / 8; + data.put<uint16>(countPos, length); + GetSession()->SendPacket(&data); SendBGWeekendWorldStates(); SendBattlefieldWorldStates(); @@ -15001,24 +14923,6 @@ void Player::AddQuest(Quest const* quest, Object* questGiver) if (questGiver && quest->GetQuestStartScript() != 0) GetMap()->ScriptsStart(sQuestStartScripts, quest->GetQuestStartScript(), questGiver, this); - // Some spells applied at quest activation - SpellAreaForQuestMapBounds saBounds = sSpellMgr->GetSpellAreaForQuestMapBounds(quest_id, true); - if (saBounds.first != saBounds.second) - { - uint32 zone, area; - GetZoneAndAreaId(zone, area); - - for (SpellAreaForAreaMap::const_iterator itr = saBounds.first; itr != saBounds.second; ++itr) - if (itr->second->autocast && itr->second->IsFitToRequirements(this, zone, area)) - if (!HasAura(itr->second->spellId)) - CastSpell(this, itr->second->spellId, true); - } - - PhaseUpdateData phaseUdateData; - phaseUdateData.AddQuestUpdate(quest_id); - - phaseMgr.NotifyConditionChanged(phaseUdateData); - UpdateForQuestWorldObjects(); } @@ -15187,11 +15091,6 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, m_RewardedQuests.insert(quest_id); m_RewardedQuestsSave[quest_id] = true; - PhaseUpdateData phaseUdateData; - phaseUdateData.AddQuestUpdate(quest_id); - - phaseMgr.NotifyConditionChanged(phaseUdateData); - // StoreNewItem, mail reward, etc. save data directly to the database // to prevent exploitable data desynchronisation we save the quest status to the database too // (to prevent rewarding this quest another time while rewards were already given out) @@ -15212,33 +15111,6 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT); UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, quest->GetQuestId()); - uint32 zone = 0; - uint32 area = 0; - - // remove auras from spells with quest reward state limitations - SpellAreaForQuestMapBounds saEndBounds = sSpellMgr->GetSpellAreaForQuestEndMapBounds(quest_id); - if (saEndBounds.first != saEndBounds.second) - { - GetZoneAndAreaId(zone, area); - - for (SpellAreaForAreaMap::const_iterator itr = saEndBounds.first; itr != saEndBounds.second; ++itr) - if (!itr->second->IsFitToRequirements(this, zone, area)) - RemoveAurasDueToSpell(itr->second->spellId); - } - - // Some spells applied at quest reward - SpellAreaForQuestMapBounds saBounds = sSpellMgr->GetSpellAreaForQuestMapBounds(quest_id, false); - if (saBounds.first != saBounds.second) - { - if (!zone || !area) - GetZoneAndAreaId(zone, area); - - for (SpellAreaForAreaMap::const_iterator itr = saBounds.first; itr != saBounds.second; ++itr) - if (itr->second->autocast && itr->second->IsFitToRequirements(this, zone, area)) - if (!HasAura(itr->second->spellId)) - CastSpell(this, itr->second->spellId, true); - } - //lets remove flag for delayed teleports SetCanDelayTeleport(false); } @@ -15786,6 +15658,30 @@ void Player::SetQuestStatus(uint32 quest_id, QuestStatus status) phaseMgr.NotifyConditionChanged(phaseUdateData); + uint32 zone = 0, area = 0; + + SpellAreaForQuestMapBounds saBounds = sSpellMgr->GetSpellAreaForQuestMapBounds(quest_id); + if (saBounds.first != saBounds.second) + { + GetZoneAndAreaId(zone, area); + + for (SpellAreaForAreaMap::const_iterator itr = saBounds.first; itr != saBounds.second; ++itr) + if (itr->second->autocast && itr->second->IsFitToRequirements(this, zone, area)) + if (!HasAura(itr->second->spellId)) + CastSpell(this, itr->second->spellId, true); + } + + saBounds = sSpellMgr->GetSpellAreaForQuestEndMapBounds(quest_id); + if (saBounds.first != saBounds.second) + { + if (!zone || !area) + GetZoneAndAreaId(zone, area); + + for (SpellAreaForAreaMap::const_iterator itr = saBounds.first; itr != saBounds.second; ++itr) + if (!itr->second->IsFitToRequirements(this, zone, area)) + RemoveAurasDueToSpell(itr->second->spellId); + } + UpdateForQuestWorldObjects(); } @@ -23866,21 +23762,15 @@ bool Player::CanUseBattlegroundObject() // TODO : some spells gives player ForceReaction to one faction (ReputationMgr::ApplyForceReaction) // maybe gameobject code should handle that ForceReaction usage // BUG: sometimes when player clicks on flag in AB - client won't send gameobject_use, only gameobject_report_use packet - return (//InBattleground() && // in battleground - not need, check in other cases - //!IsMounted() && - not correct, player is dismounted when he clicks on flag - //player cannot use object when he is invulnerable (immune) - !isTotalImmune() && // not totally immune - //i'm not sure if these two are correct, because invisible players should get visible when they click on flag - !HasStealthAura() && // not stealthed - !HasInvisibilityAura() && // not invisible - !HasAura(SPELL_RECENTLY_DROPPED_FLAG) && // can't pickup - isAlive() // live player -); + // Note: Mount, stealth and invisibility will be removed when used + return (!isTotalImmune() && // Damage immune + !HasAura(SPELL_RECENTLY_DROPPED_FLAG) && // Still has recently held flag debuff + isAlive()); // Alive } bool Player::CanCaptureTowerPoint() { - return (!HasStealthAura() && // not stealthed + return (!HasStealthAura() && // not stealthed !HasInvisibilityAura() && // not invisible isAlive() // live player ); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 651dad2aeea..01207b6bf2f 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -6345,7 +6345,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere if (GetTypeId() != TYPEID_PLAYER) { beaconTarget = triggeredByAura->GetBase()->GetCaster(); - if (beaconTarget == this || !(beaconTarget->GetAura(53563, victim->GetGUID()))) + if (!beaconTarget || beaconTarget == this || !(beaconTarget->GetAura(53563, victim->GetGUID()))) return false; basepoints0 = int32(damage); triggered_spell_id = procSpell->IsRankOf(sSpellMgr->GetSpellInfo(635)) ? 53652 : 53654; |
