aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorSubv <s.v.h21@hotmail.com>2012-10-16 21:55:01 -0500
committerSubv <s.v.h21@hotmail.com>2012-10-16 21:55:01 -0500
commit705873091b470a5d0cd361bd7f295ec724141df2 (patch)
tree2b557293395baaf88d66a1fbac55b3919569c0fc /src/server/game/Entities
parentb49891e348c01ae7f240ef07c05e09bc361f4c58 (diff)
parent27f091806a6f52f406837d188dd4171019bfa59b (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.cpp180
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp2
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;