From f0f97ab851e6f5212f26f7d54f2adf74b35cdf87 Mon Sep 17 00:00:00 2001 From: Spp Date: Wed, 26 Sep 2012 13:42:53 +0200 Subject: Core/Logging: Fix crash when trying to log a message while config is being reloaded Closes #7878 --- src/server/shared/Logging/Log.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp index ed65104d6ac..9f3c8f77739 100755 --- a/src/server/shared/Logging/Log.cpp +++ b/src/server/shared/Logging/Log.cpp @@ -281,9 +281,12 @@ void Log::vlog(LogFilterType filter, LogLevel level, char const* str, va_list ar void Log::write(LogMessage* msg) { - msg->text.append("\n"); - Logger* logger = GetLoggerByType(msg->type); - worker->enqueue(new LogOperation(logger, msg)); + if (worker) + { + msg->text.append("\n"); + Logger* logger = GetLoggerByType(msg->type); + worker->enqueue(new LogOperation(logger, msg)); + } } std::string Log::GetTimestampStr() @@ -481,6 +484,7 @@ void Log::Close() void Log::LoadFromConfig() { Close(); + worker = new LogWorker(); AppenderId = 0; m_logsDir = ConfigMgr::GetStringDefault("LogsDir", ""); if (!m_logsDir.empty()) @@ -488,5 +492,4 @@ void Log::LoadFromConfig() m_logsDir.push_back('/'); ReadAppendersFromConfig(); ReadLoggersFromConfig(); - worker = new LogWorker(); } -- cgit v1.2.3 From c5ada4b487a9a207ae28c55c281125bd600214a6 Mon Sep 17 00:00:00 2001 From: Kandera Date: Wed, 26 Sep 2012 09:11:30 -0400 Subject: Core/Spells: fix typo from previous commit that caused a crash. --- src/server/game/Entities/Unit/Unit.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 555ecef35c3..fb6f2678e58 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -6643,7 +6643,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere if (beaconTarget == this || !(beaconTarget->GetAura(53563, victim->GetGUID()))) return false; basepoints0 = int32(damage); - triggered_spell_id = procSpell->IsRankOf(sSpellMgr->GetSpellInfo(365)) ? 53652 : 53654; + triggered_spell_id = procSpell->IsRankOf(sSpellMgr->GetSpellInfo(635)) ? 53652 : 53654; } else { // Check Party/Raid Group @@ -6662,7 +6662,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere beaconTarget = Member; basepoints0 = int32(damage); - triggered_spell_id = procSpell->IsRankOf(sSpellMgr->GetSpellInfo(365)) ? 53652 : 53654; + triggered_spell_id = procSpell->IsRankOf(sSpellMgr->GetSpellInfo(635)) ? 53652 : 53654; break; } } -- cgit v1.2.3 From a3b32cf2c562dd9a8e1f0348d4387117ae3ff83d Mon Sep 17 00:00:00 2001 From: Kandera Date: Wed, 26 Sep 2012 09:14:08 -0400 Subject: Core/Battlefield: remove duplicate if. probably due to bad merge --- src/server/game/Entities/Player/Player.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 68be167f919..1457206f574 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -5505,12 +5505,7 @@ void Player::RepopAtGraveyard() if (sBattlefieldMgr->GetBattlefieldToZoneId(GetZoneId())) ClosestGrave = sBattlefieldMgr->GetBattlefieldToZoneId(GetZoneId())->GetClosestGraveYard(this); else - { - if (sBattlefieldMgr->GetBattlefieldToZoneId(GetZoneId())) - ClosestGrave = sBattlefieldMgr->GetBattlefieldToZoneId(GetZoneId())->GetClosestGraveYard(this); - else - ClosestGrave = sObjectMgr->GetClosestGraveYard(GetPositionX(), GetPositionY(), GetPositionZ(), GetMapId(), GetTeam()); - } + ClosestGrave = sObjectMgr->GetClosestGraveYard(GetPositionX(), GetPositionY(), GetPositionZ(), GetMapId(), GetTeam()); } // stop countdown until repop -- cgit v1.2.3 From 15663749a68f8821de0b79dda245b10bc1fbe426 Mon Sep 17 00:00:00 2001 From: Kandera Date: Wed, 26 Sep 2012 10:32:39 -0400 Subject: Core/Spells: fix gnomeregan pride. Closes #5721 thx gecko32 --- src/server/game/Spells/Auras/SpellAuraEffects.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 29dcde9d616..f28a02a52fc 100755 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -2280,6 +2280,10 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode, case 75532: target->SetDisplayId(target->getGender() == GENDER_MALE ? 31737 : 31738); break; + // Gnomeregan Pride + case 75531: + target->SetDisplayId(target->getGender() == GENDER_MALE ? 31654 : 31655); + break; default: break; } -- cgit v1.2.3 From 3fae05f6f36bdfd9ebc840eec3a1b07114c30c86 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 27 Sep 2012 00:31:00 +0100 Subject: correct hit result if the spell has SPELL_ATTR3_IGNORE_HIT_RESULT --- src/server/game/Entities/Unit/Unit.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index fb6f2678e58..3e9ab113918 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -11579,7 +11579,9 @@ bool Unit::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) cons SpellImmuneList const& list = m_spellImmune[IMMUNITY_STATE]; for (SpellImmuneList::const_iterator itr = list.begin(); itr != list.end(); ++itr) if (itr->type == aura) - return true; + if (!(spellInfo->AttributesEx3 & SPELL_ATTR3_IGNORE_HIT_RESULT)) + return true; + // Check for immune to application of harmful magical effects AuraEffectList const& immuneAuraApply = GetAuraEffectsByType(SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL); for (AuraEffectList::const_iterator iter = immuneAuraApply.begin(); iter != immuneAuraApply.end(); ++iter) -- cgit v1.2.3 From 5c4832c33e01503e4e6b1a0f7afe8794251b9e3f Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 27 Sep 2012 11:13:36 +0100 Subject: Correctly update visibility for transports, author GriffonHeart --- src/server/game/Entities/Player/Player.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 1457206f574..ee5f33fc59c 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -21754,6 +21754,14 @@ inline void UpdateVisibilityOf_helper(std::set& s64, T* target, std::set s64.insert(target->GetGUID()); } +template<> +inline void UpdateVisibilityOf_helper(std::set& s64, GameObject* target, std::set& /*v*/) +{ + // Don't update only GAMEOBJECT_TYPE_TRANSPORT (or all transports and destructible buildings?) + if ((target->GetGOInfo()->type != GAMEOBJECT_TYPE_TRANSPORT)) + s64.insert(target->GetGUID()); +} + template<> inline void UpdateVisibilityOf_helper(std::set& s64, Creature* target, std::set& v) { -- cgit v1.2.3 From 7e1ee7afb191209d8dddd47016aeacf0bc222c1a Mon Sep 17 00:00:00 2001 From: durotar Date: Thu, 27 Sep 2012 12:45:39 -0500 Subject: Core/Script: update creature_text for Custodian of Time (quest 10277) --- .../2012_09_27_01_world_custodian_of_time.sql | 18 ++++++ src/server/scripts/Kalimdor/tanaris.cpp | 64 +++++++++++----------- 2 files changed, 50 insertions(+), 32 deletions(-) create mode 100644 sql/updates/world/2012_09_27_01_world_custodian_of_time.sql (limited to 'src') diff --git a/sql/updates/world/2012_09_27_01_world_custodian_of_time.sql b/sql/updates/world/2012_09_27_01_world_custodian_of_time.sql new file mode 100644 index 00000000000..5396bd3e7f0 --- /dev/null +++ b/sql/updates/world/2012_09_27_01_world_custodian_of_time.sql @@ -0,0 +1,18 @@ +-- Custodian of Time's Whispers for quest 10277 +DELETE FROM `script_texts` WHERE `entry` IN (-1000217,-1000218,-1000219,-1000220,-1000221,-1000222,-1000223,-1000224,-1000225,-1000226,-1000227,-1000228,-1000229,-1000230); +DELETE FROM `creature_text` WHERE `entry`=20129; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`) VALUES +(20129,0,0, 'Greetings, $N. I will guide you through the cavern. Please try and keep up.',15,0,100,0,0,0, 'WHISPER_CUSTODIAN_1'), +(20129,1,0, 'We do not know if the Caverns of Time have always been accessible to mortals. Truly, it is impossible to tell as the Timeless One is in perpetual motion, changing our timeways as he sees fit. What you see now may very well not exist tomorrow. You may wake up and have no memory of this place.',15,0,100,0,0,0, 'WHISPER_CUSTODIAN_2'), +(20129,2,0, 'It is strange, I know... Most mortals cannot actually comprehend what they see here, as often, what they see is not anchored within their own perception of reality.',15,0,100,0,0,0, 'WHISPER_CUSTODIAN_3'), +(20129,3,0, 'Follow me, please.',15,0,100,0,0,0, 'WHISPER_CUSTODIAN_4'), +(20129,4,0, 'There are only two truths to be found here: First, that time is chaotic, always in flux, and completely malleable and second, perception does not dictate reality.',15,0,100,0,0,0, 'WHISPER_CUSTODIAN_5'), +(20129,5,0, 'As custodians of time, we watch over and care for Nozdormu''s realm. The master is away at the moment, which means that attempts are being made to dramatically alter time. The master never meddles in the affairs of mortals but instead corrects the alterations made to time by others. He is reactionary in this regard.',15,0,100,0,0,0, 'WHISPER_CUSTODIAN_6'), +(20129,6,0, 'For normal maintenance of time, the Keepers of Time are sufficient caretakers. We are able to deal with most ordinary disturbances. I speak of little things, such as rogue mages changing something in the past to elevate their status or wealth in the present.',15,0,100,0,0,0, 'WHISPER_CUSTODIAN_7'), +(20129,7,0, 'These tunnels that you see are called timeways. They are infinite in number. The ones that currently exist in your reality are what the master has deemed as ''trouble spots.'' These trouble spots may differ completely in theme but they always share a cause. That is, their existence is a result of the same temporal disturbance. Remember that should you venture inside one...',15,0,100,0,0,0, 'WHISPER_CUSTODIAN_8'), +(20129,8,0, 'This timeway is in great disarray! We have agents inside right now attempting to restore order. What information I have indicates that Thrall''s freedom is in jeopardy. A malevolent organization known as the Infinite Dragonflight is trying to prevent his escape. I fear without outside assistance, all will be lost.',15,0,100,0,0,0, 'WHISPER_CUSTODIAN_9'), +(20129,9,0, 'We have very little information on this timeway. Sa''at has been dispatched and is currently inside. The data we have gathered from his correspondence is that the Infinite Dragonflight are once again attempting to alter time. Could it be that the opening of the Dark Portal is being targeted for sabotage? Let us hope not...',15,0,100,0,0,0, 'WHISPER_CUSTODIAN_10'), +(20129,10,0, 'This timeway collapsed and reformed. The result was Stratholme of yore. What could possibly be happening inside?',15,0,100,0,0,0, 'WHISPER_CUSTODIAN_11'), +(20129,11,0, 'The timeways are currently ranked in order from least catastrophic to most catastrophic. Note that they are all classified as catastrophic, meaning that any single one of these timeways collapsing would mean that your world would end. We only classify them in such a way so that the heroes and adventurers that are sent here know which timeway best suits their abilities.',15,0,100,0,0,0, 'WHISPER_CUSTODIAN_12'), +(20129,12,0, 'All we know of this timeway is that it leads to Mount Hyjal. The Infinite Dragonflight have gone to great lengths to prevent our involvement. We know next to nothing, mortal. Soridormi is currently attempting to break through the timeway''s defenses but has thus far been unsuccessful. You might be our only hope of breaking through and resolving the conflict.',15,0,100,0,0,0, 'WHISPER_CUSTODIAN_13'), +(20129,13,0, 'Our time is at an end $N. I would wish you luck, if such a thing existed.',15,0,100,0,0,0, 'WHISPER_CUSTODIAN_14'); diff --git a/src/server/scripts/Kalimdor/tanaris.cpp b/src/server/scripts/Kalimdor/tanaris.cpp index 9b742b495bb..417c8b338c7 100644 --- a/src/server/scripts/Kalimdor/tanaris.cpp +++ b/src/server/scripts/Kalimdor/tanaris.cpp @@ -150,20 +150,20 @@ public: enum CustodianOfTime { - WHISPER_CUSTODIAN_1 = -1000217, - WHISPER_CUSTODIAN_2 = -1000218, - WHISPER_CUSTODIAN_3 = -1000219, - WHISPER_CUSTODIAN_4 = -1000220, - WHISPER_CUSTODIAN_5 = -1000221, - WHISPER_CUSTODIAN_6 = -1000222, - WHISPER_CUSTODIAN_7 = -1000223, - WHISPER_CUSTODIAN_8 = -1000224, - WHISPER_CUSTODIAN_9 = -1000225, - WHISPER_CUSTODIAN_10 = -1000226, - WHISPER_CUSTODIAN_11 = -1000227, - WHISPER_CUSTODIAN_12 = -1000228, - WHISPER_CUSTODIAN_13 = -1000229, - WHISPER_CUSTODIAN_14 = -1000230 + WHISPER_CUSTODIAN_1 = 0, + WHISPER_CUSTODIAN_2 = 1, + WHISPER_CUSTODIAN_3 = 2, + WHISPER_CUSTODIAN_4 = 3, + WHISPER_CUSTODIAN_5 = 4, + WHISPER_CUSTODIAN_6 = 5, + WHISPER_CUSTODIAN_7 = 6, + WHISPER_CUSTODIAN_8 = 7, + WHISPER_CUSTODIAN_9 = 8, + WHISPER_CUSTODIAN_10 = 9, + WHISPER_CUSTODIAN_11 = 10, + WHISPER_CUSTODIAN_12 = 11, + WHISPER_CUSTODIAN_13 = 12, + WHISPER_CUSTODIAN_14 = 13 }; class npc_custodian_of_time : public CreatureScript @@ -187,58 +187,58 @@ public: switch (waypointId) { case 0: - DoScriptText(WHISPER_CUSTODIAN_1, me, player); + Talk(WHISPER_CUSTODIAN_1, player->GetGUID()); break; case 1: - DoScriptText(WHISPER_CUSTODIAN_2, me, player); + Talk(WHISPER_CUSTODIAN_2, player->GetGUID()); break; case 2: - DoScriptText(WHISPER_CUSTODIAN_3, me, player); + Talk(WHISPER_CUSTODIAN_3, player->GetGUID()); break; case 3: - DoScriptText(WHISPER_CUSTODIAN_4, me, player); + Talk(WHISPER_CUSTODIAN_4, player->GetGUID()); break; case 5: - DoScriptText(WHISPER_CUSTODIAN_5, me, player); + Talk(WHISPER_CUSTODIAN_5, player->GetGUID()); break; case 6: - DoScriptText(WHISPER_CUSTODIAN_6, me, player); + Talk(WHISPER_CUSTODIAN_6, player->GetGUID()); break; case 7: - DoScriptText(WHISPER_CUSTODIAN_7, me, player); + Talk(WHISPER_CUSTODIAN_7, player->GetGUID()); break; case 8: - DoScriptText(WHISPER_CUSTODIAN_8, me, player); + Talk(WHISPER_CUSTODIAN_8, player->GetGUID()); break; case 9: - DoScriptText(WHISPER_CUSTODIAN_9, me, player); + Talk(WHISPER_CUSTODIAN_9, player->GetGUID()); break; case 10: - DoScriptText(WHISPER_CUSTODIAN_4, me, player); + Talk(WHISPER_CUSTODIAN_4, player->GetGUID()); break; case 13: - DoScriptText(WHISPER_CUSTODIAN_10, me, player); + Talk(WHISPER_CUSTODIAN_10, player->GetGUID()); break; case 14: - DoScriptText(WHISPER_CUSTODIAN_4, me, player); + Talk(WHISPER_CUSTODIAN_4, player->GetGUID()); break; case 16: - DoScriptText(WHISPER_CUSTODIAN_11, me, player); + Talk(WHISPER_CUSTODIAN_11, player->GetGUID()); break; case 17: - DoScriptText(WHISPER_CUSTODIAN_12, me, player); + Talk(WHISPER_CUSTODIAN_12, player->GetGUID()); break; case 18: - DoScriptText(WHISPER_CUSTODIAN_4, me, player); + Talk(WHISPER_CUSTODIAN_4, player->GetGUID()); break; case 22: - DoScriptText(WHISPER_CUSTODIAN_13, me, player); + Talk(WHISPER_CUSTODIAN_13, player->GetGUID()); break; case 23: - DoScriptText(WHISPER_CUSTODIAN_4, me, player); + Talk(WHISPER_CUSTODIAN_4, player->GetGUID()); break; case 24: - DoScriptText(WHISPER_CUSTODIAN_14, me, player); + Talk(WHISPER_CUSTODIAN_14, player->GetGUID()); DoCast(player, 34883); // below here is temporary workaround, to be removed when spell works properly player->AreaExploredOrEventHappens(10277); -- cgit v1.2.3 From 138c52c967197cc55163e1d61acb25978ff9dcf3 Mon Sep 17 00:00:00 2001 From: kaelima Date: Thu, 27 Sep 2012 22:14:48 +0200 Subject: Core/Battleground: Change notice about unhandled areatriggers to debug info and removed the GM notice. Added comment for a field in HandleBattlefieldListOpcode. And removed useless bool in BattlefieldWG::OnGameObjectCreate. --- src/server/game/Battlefield/Zones/BattlefieldWG.cpp | 11 ++--------- src/server/game/Battlegrounds/Battleground.cpp | 4 +--- src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp | 1 + src/server/game/Battlegrounds/Zones/BattlegroundEY.h | 4 ++-- src/server/game/Handlers/BattleGroundHandler.cpp | 4 ++-- 5 files changed, 8 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index 2270bcf7927..350926388ba 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -612,33 +612,26 @@ void BattlefieldWG::OnCreatureRemove(Creature* /*creature*/) void BattlefieldWG::OnGameObjectCreate(GameObject* go) { - bool isWorkshop = false; uint8 workshopId = 0; switch (go->GetEntry()) { case GO_WINTERGRASP_FACTORY_BANNER_NE: - isWorkshop = true; workshopId = BATTLEFIELD_WG_WORKSHOP_NE; break; case GO_WINTERGRASP_FACTORY_BANNER_NW: - isWorkshop = true; workshopId = BATTLEFIELD_WG_WORKSHOP_NW; break; case GO_WINTERGRASP_FACTORY_BANNER_SE: - isWorkshop = true; workshopId = BATTLEFIELD_WG_WORKSHOP_SE; break; case GO_WINTERGRASP_FACTORY_BANNER_SW: - isWorkshop = true; workshopId = BATTLEFIELD_WG_WORKSHOP_SW; break; - + default: + return; } - if (!isWorkshop) - return; - for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) { if (WGWorkshop* workshop = (*itr)) diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 647f55c4ffa..05fc4e68e8c 100755 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -1940,8 +1940,6 @@ void Battleground::RewardXPAtKill(Player* killer, Player* victim) void Battleground::HandleAreaTrigger(Player* player, uint32 trigger) { - sLog->outError(LOG_FILTER_BATTLEGROUND, "WARNING: Unhandled AreaTrigger %u in Battleground %u. Player coords (x: %f, y: %f, z: %f)", + sLog->outDebug(LOG_FILTER_BATTLEGROUND, "Unhandled AreaTrigger %u in Battleground %u. Player coords (x: %f, y: %f, z: %f)", trigger, player->GetMapId(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()); - if (player->isGameMaster()) - player->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", trigger); } diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp index dfd7af583a5..e91c5122604 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp @@ -236,6 +236,7 @@ void BattlegroundAB::HandleAreaTrigger(Player* player, uint32 trigger) case 3870: // Black Smith case 4020: // Unk1 case 4021: // Unk2 + case 4674: // Unk3 //break; default: Battleground::HandleAreaTrigger(player, trigger); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h index c7ee4c62504..f7487a46653 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h @@ -105,11 +105,11 @@ enum EYBattlegroundObjectEntry enum EYBattlegroundPointsTrigger { TR_BLOOD_ELF_POINT = 4476, - TR_FEL_REAVER_POINT = 4514, + TR_FEL_REAVER_POINT = 4514, TR_MAGE_TOWER_POINT = 4516, TR_DRAENEI_RUINS_POINT = 4518, TR_BLOOD_ELF_BUFF = 4568, - TR_FEL_REAVER_BUFF = 4569, + TR_FEL_REAVER_BUFF = 4569, TR_MAGE_TOWER_BUFF = 4570, TR_DRAENEI_RUINS_BUFF = 4571 }; diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index 3bae430ad2c..5c8860cc900 100755 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -324,8 +324,8 @@ void WorldSession::HandleBattlefieldListOpcode(WorldPacket &recv_data) uint8 fromWhere; recv_data >> fromWhere; // 0 - battlemaster (lua: ShowBattlefieldList), 1 - UI (lua: RequestBattlegroundInstanceInfo) - uint8 unk1; - recv_data >> unk1; // Unknown 3.2.2 + uint8 canGainXP; + recv_data >> canGainXP; // players with locked xp have their own bg queue on retail BattlemasterListEntry const* bl = sBattlemasterListStore.LookupEntry(bgTypeId); if (!bl) -- cgit v1.2.3 From f2e92b81a30da8150d99644c4f112bd712dbf28e Mon Sep 17 00:00:00 2001 From: w1sht0l1v3 Date: Fri, 28 Sep 2012 01:37:34 +0300 Subject: Core/Scripts: Some fixes for Razorscale. --- sql/updates/world/2012_09_28_00_world_creature_model_info.sql | 1 + src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 sql/updates/world/2012_09_28_00_world_creature_model_info.sql (limited to 'src') diff --git a/sql/updates/world/2012_09_28_00_world_creature_model_info.sql b/sql/updates/world/2012_09_28_00_world_creature_model_info.sql new file mode 100644 index 00000000000..48134d7bbed --- /dev/null +++ b/sql/updates/world/2012_09_28_00_world_creature_model_info.sql @@ -0,0 +1 @@ +UPDATE `creature_model_info` SET `combat_reach`=10 WHERE `modelid`=28787; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index e8e938dc06b..6038b7ed9d6 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -369,7 +369,7 @@ class boss_razorscale : public CreatureScript void MovementInform(uint32 type, uint32 id) { - if (type == POINT_MOTION_TYPE && id == 1) + if (type == EFFECT_MOTION_TYPE && id == 1) { phase = PHASE_GROUND; events.SetPhase(PHASE_GROUND); @@ -407,7 +407,7 @@ class boss_razorscale : public CreatureScript if (HarpoonCounter == RAID_MODE(2, 4)) { HarpoonCounter = 0; - me->GetMotionMaster()->MovePoint(1, RazorGround); + me->GetMotionMaster()->MoveLand(1, RazorGround); } if (phase == PHASE_GROUND) @@ -423,7 +423,7 @@ class boss_razorscale : public CreatureScript me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetReactState(REACT_PASSIVE); me->AttackStop(); - me->GetMotionMaster()->MovePoint(0, RazorFlight); + me->GetMotionMaster()->MoveTakeoff(0, RazorFlight); events.ScheduleEvent(EVENT_FIREBALL, 7000, 0, PHASE_FLIGHT); events.ScheduleEvent(EVENT_DEVOURING, 10000, 0, PHASE_FLIGHT); events.ScheduleEvent(EVENT_SUMMON, 5000, 0, PHASE_FLIGHT); @@ -525,7 +525,7 @@ class boss_razorscale : public CreatureScript phase = PHASE_PERMAGROUND; events.SetPhase(PHASE_PERMAGROUND); me->SetCanFly(false); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED); me->SetReactState(REACT_AGGRESSIVE); me->RemoveAurasDueToSpell(SPELL_HARPOON_TRIGGER); me->SetSpeed(MOVE_FLIGHT, 1.0f, true); -- cgit v1.2.3 From 431db10e1af05d1a6883370ef92e6cbd13c44636 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 28 Sep 2012 09:44:34 -0400 Subject: Core/Battlefield: fix world states on player login for wintergrasp --- src/server/game/Battlefield/Battlefield.h | 6 +- src/server/game/Battlefield/BattlefieldMgr.h | 6 +- .../game/Battlefield/Zones/BattlefieldWG.cpp | 28 ++++---- src/server/game/Battlefield/Zones/BattlefieldWG.h | 81 +++++++++++++--------- src/server/game/Entities/Player/Player.cpp | 36 ++++++++++ src/server/game/Entities/Player/Player.h | 1 + src/server/scripts/Northrend/wintergrasp.cpp | 2 +- 7 files changed, 105 insertions(+), 55 deletions(-) (limited to 'src') diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index 480aafbeb42..2ca6a2e3f96 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -211,9 +211,6 @@ class Battlefield : public ZoneScript /// Call this to init the Battlefield virtual bool SetupBattlefield() { return true; } - /// Generate packet which contain all worldstatedata of area - virtual void FillInitialWorldStates(WorldPacket& /*data*/) {} - /// Update data of a worldstate to all players present in zone void SendUpdateWorldState(uint32 field, uint32 value); @@ -330,7 +327,8 @@ class Battlefield : public ZoneScript virtual void DoCompleteOrIncrementAchievement(uint32 /*achievement*/, Player* /*player*/, uint8 /*incrementNumber = 1*/) {}; /// Send all worldstate data to all player in zone. - virtual void SendInitWorldStatesToAll() {}; + virtual void SendInitWorldStatesToAll() = 0; + virtual void FillInitialWorldStates(WorldPacket& /*data*/) = 0; /// Return if we can use mount in battlefield bool CanFlyIn() { return !m_isActive; } diff --git a/src/server/game/Battlefield/BattlefieldMgr.h b/src/server/game/Battlefield/BattlefieldMgr.h index 4ee37e424fd..1ec1f3b1151 100644 --- a/src/server/game/Battlefield/BattlefieldMgr.h +++ b/src/server/game/Battlefield/BattlefieldMgr.h @@ -46,10 +46,10 @@ class BattlefieldMgr // called when player resurrects void HandlePlayerResurrects(Player * player, uint32 areaflag); // return assigned battlefield - Battlefield *GetBattlefieldToZoneId(uint32 zoneid); - Battlefield *GetBattlefieldByBattleId(uint32 battleid); + Battlefield* GetBattlefieldToZoneId(uint32 zoneid); + Battlefield* GetBattlefieldByBattleId(uint32 battleid); - ZoneScript *GetZoneScript(uint32 zoneId); + ZoneScript* GetZoneScript(uint32 zoneId); void AddZone(uint32 zoneid, Battlefield * handle); diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index 350926388ba..f2c44a0a0da 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -844,20 +844,13 @@ uint32 BattlefieldWG::GetData(uint32 data) return Battlefield::GetData(data); } -// Method sending worldsate to player -WorldPacket BattlefieldWG::BuildInitWorldStates() -{ - WorldPacket data(SMSG_INIT_WORLD_STATES, (4 + 4 + 4 + 2 + (BuildingsInZone.size() * 8) + (WorkshopsList.size() * 8))); - - data << uint32(m_MapId); - data << uint32(m_ZoneId); - data << uint32(0); - data << uint16(4 + 2 + 4 + BuildingsInZone.size() + WorkshopsList.size()); +void BattlefieldWG::FillInitialWorldStates(WorldPacket& data) +{ data << uint32(BATTLEFIELD_WG_WORLD_STATE_ATTACKER) << uint32(GetAttackerTeam()); data << uint32(BATTLEFIELD_WG_WORLD_STATE_DEFENDER) << uint32(GetDefenderTeam()); - data << uint32(BATTLEFIELD_WG_WORLD_STATE_ACTIVE) << uint32(IsWarTime()? 0 : 1); // Note: cleanup these two, their names look awkward - data << uint32(BATTLEFIELD_WG_WORLD_STATE_SHOW_WORLDSTATE) << uint32(IsWarTime()? 1 : 0); + data << uint32(BATTLEFIELD_WG_WORLD_STATE_ACTIVE) << uint32(IsWarTime() ? 0 : 1); // Note: cleanup these two, their names look awkward + data << uint32(BATTLEFIELD_WG_WORLD_STATE_SHOW_WORLDSTATE) << uint32(IsWarTime() ? 1 : 0); for (uint32 i = 0; i < 2; ++i) data << ClockWorldState[i] << uint32(time(NULL) + (m_Timer / 1000)); @@ -879,17 +872,24 @@ WorldPacket BattlefieldWG::BuildInitWorldStates() void BattlefieldWG::SendInitWorldStatesTo(Player* player) { - WorldPacket data = BuildInitWorldStates(); + WorldPacket data(SMSG_INIT_WORLD_STATES, (4 + 4 + 4 + 2 + (BuildingsInZone.size() * 8) + (WorkshopsList.size() * 8))); + + data << uint32(m_MapId); + data << uint32(m_ZoneId); + data << uint32(0); + data << uint16(10 + BuildingsInZone.size() + WorkshopsList.size()); // Number of fields + + FillInitialWorldStates(data); + player->GetSession()->SendPacket(&data); } void BattlefieldWG::SendInitWorldStatesToAll() { - WorldPacket data = BuildInitWorldStates(); for (uint8 team = 0; team < 2; team++) for (GuidSet::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) if (Player* player = sObjectAccessor->FindPlayer(*itr)) - player->GetSession()->SendPacket(&data); + SendInitWorldStatesTo(player); } void BattlefieldWG::BrokenWallOrTower(TeamId /*team*/) diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.h b/src/server/game/Battlefield/Zones/BattlefieldWG.h index 11510e1ea98..4d7db760605 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.h +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.h @@ -26,12 +26,6 @@ #include "GroupMgr.h" #include "Battlefield.h" -uint32 const VehNumWorldState[2] = { 3680, 3490 }; -uint32 const MaxVehNumWorldState[2] = { 3681, 3491 }; -uint32 const ClockWorldState[2] = { 3781, 4354 }; -uint32 const WintergraspFaction[3] = { 1732, 1735, 35 }; -float const WintergraspStalkerPos[4] = { 0, 0, 0, 0 }; - class BattlefieldWG; class WintergraspCapturePoint; @@ -404,9 +398,9 @@ class BattlefieldWG : public Battlefield void UpdateVehicleCountWG(); void UpdateCounterVehicle(bool init); - WorldPacket BuildInitWorldStates(); void SendInitWorldStatesTo(Player* player); void SendInitWorldStatesToAll(); + void FillInitialWorldStates(WorldPacket& data); void HandleKill(Player* killer, Unit* victim); void OnUnitDeath(Unit* unit); @@ -421,6 +415,22 @@ class BattlefieldWG : public Battlefield uint8 GetSpiritGraveyardId(uint32 areaId); uint32 GetData(uint32 data); + + static uint32 const VehNumWorldState[]; + static uint32 const MaxVehNumWorldState[]; + static uint32 const ClockWorldState[]; + static uint32 const WintergraspFaction[]; + static float const WintergraspStalkerPos[]; + + static uint8 const WG_MAX_OBJ; + static uint8 const WG_KEEPGAMEOBJECT_MAX; + static uint8 const WG_MAX_TURRET; + static uint8 const WG_MAX_KEEP_NPC; + static uint8 const WG_MAX_OUTSIDE_NPC; + static uint8 const WG_OUTSIDE_ALLIANCE_NPC; + static uint8 const WG_MAX_TELEPORTER; + static uint8 const WG_MAX_WORKSHOP; + protected: bool m_isRelicInteractible; @@ -441,13 +451,20 @@ class BattlefieldWG : public Battlefield GameObject* m_titansRelic; }; -uint8 const WG_MAX_OBJ = 32; -uint8 const WG_KEEPGAMEOBJECT_MAX = 44; -uint8 const WG_MAX_TURRET = 15; -uint8 const WG_MAX_KEEP_NPC = 39; -uint8 const WG_MAX_OUTSIDE_NPC = 14; -uint8 const WG_OUTSIDE_ALLIANCE_NPC = 7; -uint8 const WG_MAX_TELEPORTER = 12; +uint32 const BattlefieldWG::VehNumWorldState[] = { 3680, 3490 }; +uint32 const BattlefieldWG::MaxVehNumWorldState[] = { 3681, 3491 }; +uint32 const BattlefieldWG::ClockWorldState[] = { 3781, 4354 }; +uint32 const BattlefieldWG::WintergraspFaction[] = { 1732, 1735, 35 }; +float const BattlefieldWG::WintergraspStalkerPos[] = { 0, 0, 0, 0 }; + +uint8 const BattlefieldWG::WG_MAX_OBJ = 32; +uint8 const BattlefieldWG::WG_KEEPGAMEOBJECT_MAX = 44; +uint8 const BattlefieldWG::WG_MAX_TURRET = 15; +uint8 const BattlefieldWG::WG_MAX_KEEP_NPC = 39; +uint8 const BattlefieldWG::WG_MAX_OUTSIDE_NPC = 14; +uint8 const BattlefieldWG::WG_OUTSIDE_ALLIANCE_NPC = 7; +uint8 const BattlefieldWG::WG_MAX_TELEPORTER = 12; +uint8 const BattlefieldWG::WG_MAX_WORKSHOP = 6; enum WintergraspGameObjectBuildingType { @@ -578,7 +595,7 @@ struct WintergraspBuildingSpawnData uint32 nameId; }; -const WintergraspBuildingSpawnData WGGameObjectBuilding[WG_MAX_OBJ] = +const WintergraspBuildingSpawnData WGGameObjectBuilding[BattlefieldWG::WG_MAX_OBJ] = { // Wall (Not spawned in db) // Entry WS X Y Z O type NameID @@ -671,7 +688,7 @@ const WintergraspBuildingSpawnData WGGameObjectBuilding[WG_MAX_OBJ] = // 192357 : 1 in sql, 1 in header // 192350 : 1 in sql, 1 in header // 192351 : 1 in sql, 1 in header -const WintergraspObjectPositionData WGKeepGameObject[WG_KEEPGAMEOBJECT_MAX] = +const WintergraspObjectPositionData WGKeepGameObject[BattlefieldWG::WG_KEEPGAMEOBJECT_MAX] = { { 5262.540039f, 3047.949951f, 432.054993f, 3.106650f, 192488, 192501 }, // Flag on tower { 5272.939941f, 2976.550049f, 444.492004f, 3.124120f, 192374, 192416 }, // Flag on Wall Intersect @@ -719,7 +736,7 @@ const WintergraspObjectPositionData WGKeepGameObject[WG_KEEPGAMEOBJECT_MAX] = { 5271.279785f, 2820.159912f, 445.200989f, -3.13286f, 192351, 192416 } // Flag on wall intersect }; -const Position WGTurret[WG_MAX_TURRET] = +const Position WGTurret[BattlefieldWG::WG_MAX_TURRET] = { { 5391.19f, 3060.8f, 419.616f, 1.69557f }, { 5266.75f, 2976.5f, 421.067f, 3.20354f }, @@ -739,7 +756,7 @@ const Position WGTurret[WG_MAX_TURRET] = }; // Here there is all npc keeper spawn point -const WintergraspObjectPositionData WGKeepNPC[WG_MAX_KEEP_NPC] = +const WintergraspObjectPositionData WGKeepNPC[BattlefieldWG::WG_MAX_KEEP_NPC] = { // X Y Z O horde alliance // North East @@ -790,7 +807,7 @@ const WintergraspObjectPositionData WGKeepNPC[WG_MAX_KEEP_NPC] = { 5316.770996f, 2619.430176f, 409.027740f, 5.363431f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A } // Standing Guard }; -const WintergraspObjectPositionData WGOutsideNPC[WG_MAX_OUTSIDE_NPC] = +const WintergraspObjectPositionData WGOutsideNPC[BattlefieldWG::WG_MAX_OUTSIDE_NPC] = { { 5032.04f, 3681.79f, 362.980f, 4.210f, BATTLEFIELD_WG_NPC_VIERON_BLAZEFEATHER, 0 }, { 5020.71f, 3626.19f, 360.150f, 4.640f, BATTLEFIELD_WG_NPC_HOODOO_MASTER_FU_JIN, 0 }, @@ -817,7 +834,7 @@ struct WintergraspTeleporterData float o; }; -const WintergraspTeleporterData WGPortalDefenderData[WG_MAX_TELEPORTER] = +const WintergraspTeleporterData WGPortalDefenderData[BattlefieldWG::WG_MAX_TELEPORTER] = { // Player teleporter { 190763, 5153.41f, 2901.35f, 409.191f, -0.069f }, @@ -1112,8 +1129,6 @@ const WintergraspTowerCannonData TowerCannon[WG_MAX_TOWER_CANNON] = // *****************WorkShop Data & Element***************** // ********************************************************* -uint8 const WG_MAX_WORKSHOP = 6; - struct WGWorkshopData { uint8 id; @@ -1121,7 +1136,7 @@ struct WGWorkshopData uint32 text; }; -const WGWorkshopData WorkshopsData[WG_MAX_WORKSHOP] = +const WGWorkshopData WorkshopsData[BattlefieldWG::WG_MAX_WORKSHOP] = { // NE {BATTLEFIELD_WG_WORKSHOP_NE, WORLDSTATE_WORKSHOP_NE, BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NE}, @@ -1215,7 +1230,7 @@ struct BfWGGameObjectBuilding m_WG->SendUpdateWorldState(m_WorldState, m_State); } UpdateCreatureAndGo(); - m_Build->SetUInt32Value(GAMEOBJECT_FACTION, WintergraspFaction[m_Team]); + m_Build->SetUInt32Value(GAMEOBJECT_FACTION, BattlefieldWG::WintergraspFaction[m_Team]); } // Called when associated gameobject is damaged @@ -1402,12 +1417,12 @@ struct BfWGGameObjectBuilding case GO_WINTERGRASP_FORTRESS_TOWER_2: case GO_WINTERGRASP_FORTRESS_TOWER_3: case GO_WINTERGRASP_FORTRESS_TOWER_4: - turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); + turret->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetDefenderTeam()]); break; case GO_WINTERGRASP_SHADOWSIGHT_TOWER: case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: case GO_WINTERGRASP_FLAMEWATCH_TOWER: - turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); + turret->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetAttackerTeam()]); break; } m_WG->HideNpc(turret); @@ -1428,12 +1443,12 @@ struct BfWGGameObjectBuilding case GO_WINTERGRASP_FORTRESS_TOWER_2: case GO_WINTERGRASP_FORTRESS_TOWER_3: case GO_WINTERGRASP_FORTRESS_TOWER_4: - turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); + turret->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetDefenderTeam()]); break; case GO_WINTERGRASP_SHADOWSIGHT_TOWER: case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: case GO_WINTERGRASP_FLAMEWATCH_TOWER: - turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); + turret->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetAttackerTeam()]); break; } m_WG->HideNpc(turret); @@ -1494,14 +1509,14 @@ struct BfWGGameObjectBuilding case GO_WINTERGRASP_FORTRESS_TOWER_3: case GO_WINTERGRASP_FORTRESS_TOWER_4: { - creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); + creature->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetDefenderTeam()]); break; } case GO_WINTERGRASP_SHADOWSIGHT_TOWER: case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: case GO_WINTERGRASP_FLAMEWATCH_TOWER: { - creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); + creature->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetAttackerTeam()]); break; } } @@ -1530,14 +1545,14 @@ struct BfWGGameObjectBuilding case GO_WINTERGRASP_FORTRESS_TOWER_3: case GO_WINTERGRASP_FORTRESS_TOWER_4: { - creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); + creature->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetDefenderTeam()]); break; } case GO_WINTERGRASP_SHADOWSIGHT_TOWER: case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: case GO_WINTERGRASP_FLAMEWATCH_TOWER: { - creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); + creature->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetAttackerTeam()]); break; } } @@ -1566,7 +1581,7 @@ struct WGWorkshop WGWorkshop(BattlefieldWG* _bf, uint8 _workshopId) { - ASSERT(_bf || _workshopId < WG_MAX_WORKSHOP); + ASSERT(_bf || _workshopId < BattlefieldWG::WG_MAX_WORKSHOP); bf = _bf; workshopId = _workshopId; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index ee5f33fc59c..c0e3e3afc03 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -76,6 +76,7 @@ #include "AccountMgr.h" #include "Battlefield.h" #include "BattlefieldMgr.h" +#include "BattlefieldWG.h" #define ZONE_UPDATE_INTERVAL (1*IN_MILLISECONDS) @@ -9041,6 +9042,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) uint32 mapid = GetMapId(); OutdoorPvP* pvp = sOutdoorPvPMgr->GetOutdoorPvPToZoneId(zoneid); InstanceScript* instance = GetInstanceScript(); + Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(zoneid); sLog->outDebug(LOG_FILTER_NETWORKIO, "Sending SMSG_INIT_WORLD_STATES to Map: %u, Zone: %u", mapid, zoneid); @@ -9114,6 +9116,10 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) case 4273: // Ulduar NumberOfFields = 10; break; + case 4197: // Wintergrasp + /// Use the max here, and fill with zeros if missing. + NumberOfFields = 10 + BattlefieldWG::WG_MAX_OBJ + BattlefieldWG::WG_MAX_WORKSHOP; + break; default: NumberOfFields = 12; break; @@ -9123,6 +9129,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) 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 << uint32(0x8d8) << uint32(0x0); // 1 data << uint32(0x8d7) << uint32(0x0); // 2 @@ -9668,6 +9675,16 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) data << uint32(4131) << uint32(0); // 10 WORLDSTATE_CRATES_REVEALED } break; + // Wintergrasp + case 4197: + if (bf && bf->GetTypeId() == BATTLEFIELD_WG) + { + bf->FillInitialWorldStates(data); + break; + } + else + data.put(countPos, 12); + // No break here, intended. default: data << uint32(0x914) << uint32(0x0); // 7 data << uint32(0x913) << uint32(0x0); // 8 @@ -9677,6 +9694,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) } GetSession()->SendPacket(&data); SendBGWeekendWorldStates(); + SendBattlefieldWorldStates(); } void Player::SendBGWeekendWorldStates() @@ -9694,6 +9712,24 @@ void Player::SendBGWeekendWorldStates() } } +void Player::SendBattlefieldWorldStates() +{ + /// Send misc stuff that needs to be sent on every login, like the battle timers. + if (sWorld->getBoolConfig(CONFIG_WINTERGRASP_ENABLE)) + { + if (BattlefieldWG* wg = (BattlefieldWG*)sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG)) + { + if (wg->IsWarTime()) + SendUpdateWorldState(BattlefieldWG::ClockWorldState[1], uint32(time(NULL))); + else // Time to next battle + { + uint32 timer = wg->GetTimer() / 1000; + SendUpdateWorldState(BattlefieldWG::ClockWorldState[1], time(NULL) + timer); + } + } + } +} + uint32 Player::GetXPRestBonus(uint32 xp) { uint32 rested_bonus = (uint32)GetRestBonus(); // xp for each rested bonus diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 0decacd6258..82e91985b04 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2125,6 +2125,7 @@ class Player : public Unit, public GridObject void SendUpdateWorldState(uint32 Field, uint32 Value); void SendDirectMessage(WorldPacket* data); void SendBGWeekendWorldStates(); + void SendBattlefieldWorldStates(); void SendAurasForTarget(Unit* target); diff --git a/src/server/scripts/Northrend/wintergrasp.cpp b/src/server/scripts/Northrend/wintergrasp.cpp index 59e9a31c4cf..c58f6fc2dff 100644 --- a/src/server/scripts/Northrend/wintergrasp.cpp +++ b/src/server/scripts/Northrend/wintergrasp.cpp @@ -307,7 +307,7 @@ class go_wg_vehicle_teleporter : public GameObjectScript // Tabulation madness in the hole! for (uint8 i = 0; i < MAX_WINTERGRASP_VEHICLES; i++) if (Creature* vehicleCreature = go->FindNearestCreature(vehiclesList[i], 3.0f, true)) - if (!vehicleCreature->HasAura(SPELL_VEHICLE_TELEPORT) && vehicleCreature->getFaction() == WintergraspFaction[wg->GetDefenderTeam()]) + if (!vehicleCreature->HasAura(SPELL_VEHICLE_TELEPORT) && vehicleCreature->getFaction() == BattlefieldWG::WintergraspFaction[wg->GetDefenderTeam()]) if (Creature* teleportTrigger = vehicleCreature->FindNearestCreature(NPC_WORLD_TRIGGER_LARGE_AOI_NOT_IMMUNE_PC_NPC, 100.0f, true)) teleportTrigger->CastSpell(vehicleCreature, SPELL_VEHICLE_TELEPORT, true); -- cgit v1.2.3 From db455e317e4ec3feb0dfbc1c92d660c47a43df97 Mon Sep 17 00:00:00 2001 From: Kandera Date: Fri, 28 Sep 2012 09:45:50 -0400 Subject: Core/Battlefield: fix build from previous commit --- src/server/game/Battlefield/Zones/BattlefieldWG.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'src') diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index f2c44a0a0da..0da2a9ca06c 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -866,8 +866,6 @@ void BattlefieldWG::FillInitialWorldStates(WorldPacket& data) for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) if (*itr) data << WorkshopsData[(*itr)->workshopId].worldstate << (*itr)->state; - - return data; } void BattlefieldWG::SendInitWorldStatesTo(Player* player) -- cgit v1.2.3 From cb8fc503ddb1fc87abdd1c88146646c68aea46b9 Mon Sep 17 00:00:00 2001 From: Kandera Date: Fri, 28 Sep 2012 10:41:44 -0400 Subject: Core/Battlefield: revert part of previous commit to fix build. --- src/server/game/Battlefield/Zones/BattlefieldWG.h | 77 +++++++++-------------- src/server/game/Entities/Player/Player.cpp | 6 +- src/server/scripts/Northrend/wintergrasp.cpp | 2 +- 3 files changed, 35 insertions(+), 50 deletions(-) (limited to 'src') diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.h b/src/server/game/Battlefield/Zones/BattlefieldWG.h index 4d7db760605..323f7f2b13d 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.h +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.h @@ -416,21 +416,6 @@ class BattlefieldWG : public Battlefield uint32 GetData(uint32 data); - static uint32 const VehNumWorldState[]; - static uint32 const MaxVehNumWorldState[]; - static uint32 const ClockWorldState[]; - static uint32 const WintergraspFaction[]; - static float const WintergraspStalkerPos[]; - - static uint8 const WG_MAX_OBJ; - static uint8 const WG_KEEPGAMEOBJECT_MAX; - static uint8 const WG_MAX_TURRET; - static uint8 const WG_MAX_KEEP_NPC; - static uint8 const WG_MAX_OUTSIDE_NPC; - static uint8 const WG_OUTSIDE_ALLIANCE_NPC; - static uint8 const WG_MAX_TELEPORTER; - static uint8 const WG_MAX_WORKSHOP; - protected: bool m_isRelicInteractible; @@ -451,20 +436,20 @@ class BattlefieldWG : public Battlefield GameObject* m_titansRelic; }; -uint32 const BattlefieldWG::VehNumWorldState[] = { 3680, 3490 }; -uint32 const BattlefieldWG::MaxVehNumWorldState[] = { 3681, 3491 }; -uint32 const BattlefieldWG::ClockWorldState[] = { 3781, 4354 }; -uint32 const BattlefieldWG::WintergraspFaction[] = { 1732, 1735, 35 }; -float const BattlefieldWG::WintergraspStalkerPos[] = { 0, 0, 0, 0 }; - -uint8 const BattlefieldWG::WG_MAX_OBJ = 32; -uint8 const BattlefieldWG::WG_KEEPGAMEOBJECT_MAX = 44; -uint8 const BattlefieldWG::WG_MAX_TURRET = 15; -uint8 const BattlefieldWG::WG_MAX_KEEP_NPC = 39; -uint8 const BattlefieldWG::WG_MAX_OUTSIDE_NPC = 14; -uint8 const BattlefieldWG::WG_OUTSIDE_ALLIANCE_NPC = 7; -uint8 const BattlefieldWG::WG_MAX_TELEPORTER = 12; -uint8 const BattlefieldWG::WG_MAX_WORKSHOP = 6; +uint32 const VehNumWorldState[] = { 3680, 3490 }; +uint32 const MaxVehNumWorldState[] = { 3681, 3491 }; +uint32 const ClockWorldState[] = { 3781, 4354 }; +uint32 const WintergraspFaction[] = { 1732, 1735, 35 }; +float const WintergraspStalkerPos[] = { 0, 0, 0, 0 }; + +uint8 const WG_MAX_OBJ = 32; +uint8 const WG_KEEPGAMEOBJECT_MAX = 44; +uint8 const WG_MAX_TURRET = 15; +uint8 const WG_MAX_KEEP_NPC = 39; +uint8 const WG_MAX_OUTSIDE_NPC = 14; +uint8 const WG_OUTSIDE_ALLIANCE_NPC = 7; +uint8 const WG_MAX_TELEPORTER = 12; +uint8 const WG_MAX_WORKSHOP = 6; enum WintergraspGameObjectBuildingType { @@ -595,7 +580,7 @@ struct WintergraspBuildingSpawnData uint32 nameId; }; -const WintergraspBuildingSpawnData WGGameObjectBuilding[BattlefieldWG::WG_MAX_OBJ] = +const WintergraspBuildingSpawnData WGGameObjectBuilding[WG_MAX_OBJ] = { // Wall (Not spawned in db) // Entry WS X Y Z O type NameID @@ -688,7 +673,7 @@ const WintergraspBuildingSpawnData WGGameObjectBuilding[BattlefieldWG::WG_MAX_OB // 192357 : 1 in sql, 1 in header // 192350 : 1 in sql, 1 in header // 192351 : 1 in sql, 1 in header -const WintergraspObjectPositionData WGKeepGameObject[BattlefieldWG::WG_KEEPGAMEOBJECT_MAX] = +const WintergraspObjectPositionData WGKeepGameObject[WG_KEEPGAMEOBJECT_MAX] = { { 5262.540039f, 3047.949951f, 432.054993f, 3.106650f, 192488, 192501 }, // Flag on tower { 5272.939941f, 2976.550049f, 444.492004f, 3.124120f, 192374, 192416 }, // Flag on Wall Intersect @@ -736,7 +721,7 @@ const WintergraspObjectPositionData WGKeepGameObject[BattlefieldWG::WG_KEEPGAMEO { 5271.279785f, 2820.159912f, 445.200989f, -3.13286f, 192351, 192416 } // Flag on wall intersect }; -const Position WGTurret[BattlefieldWG::WG_MAX_TURRET] = +const Position WGTurret[WG_MAX_TURRET] = { { 5391.19f, 3060.8f, 419.616f, 1.69557f }, { 5266.75f, 2976.5f, 421.067f, 3.20354f }, @@ -756,7 +741,7 @@ const Position WGTurret[BattlefieldWG::WG_MAX_TURRET] = }; // Here there is all npc keeper spawn point -const WintergraspObjectPositionData WGKeepNPC[BattlefieldWG::WG_MAX_KEEP_NPC] = +const WintergraspObjectPositionData WGKeepNPC[WG_MAX_KEEP_NPC] = { // X Y Z O horde alliance // North East @@ -807,7 +792,7 @@ const WintergraspObjectPositionData WGKeepNPC[BattlefieldWG::WG_MAX_KEEP_NPC] = { 5316.770996f, 2619.430176f, 409.027740f, 5.363431f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A } // Standing Guard }; -const WintergraspObjectPositionData WGOutsideNPC[BattlefieldWG::WG_MAX_OUTSIDE_NPC] = +const WintergraspObjectPositionData WGOutsideNPC[WG_MAX_OUTSIDE_NPC] = { { 5032.04f, 3681.79f, 362.980f, 4.210f, BATTLEFIELD_WG_NPC_VIERON_BLAZEFEATHER, 0 }, { 5020.71f, 3626.19f, 360.150f, 4.640f, BATTLEFIELD_WG_NPC_HOODOO_MASTER_FU_JIN, 0 }, @@ -834,7 +819,7 @@ struct WintergraspTeleporterData float o; }; -const WintergraspTeleporterData WGPortalDefenderData[BattlefieldWG::WG_MAX_TELEPORTER] = +const WintergraspTeleporterData WGPortalDefenderData[WG_MAX_TELEPORTER] = { // Player teleporter { 190763, 5153.41f, 2901.35f, 409.191f, -0.069f }, @@ -1136,7 +1121,7 @@ struct WGWorkshopData uint32 text; }; -const WGWorkshopData WorkshopsData[BattlefieldWG::WG_MAX_WORKSHOP] = +const WGWorkshopData WorkshopsData[WG_MAX_WORKSHOP] = { // NE {BATTLEFIELD_WG_WORKSHOP_NE, WORLDSTATE_WORKSHOP_NE, BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NE}, @@ -1230,7 +1215,7 @@ struct BfWGGameObjectBuilding m_WG->SendUpdateWorldState(m_WorldState, m_State); } UpdateCreatureAndGo(); - m_Build->SetUInt32Value(GAMEOBJECT_FACTION, BattlefieldWG::WintergraspFaction[m_Team]); + m_Build->SetUInt32Value(GAMEOBJECT_FACTION, WintergraspFaction[m_Team]); } // Called when associated gameobject is damaged @@ -1417,12 +1402,12 @@ struct BfWGGameObjectBuilding case GO_WINTERGRASP_FORTRESS_TOWER_2: case GO_WINTERGRASP_FORTRESS_TOWER_3: case GO_WINTERGRASP_FORTRESS_TOWER_4: - turret->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetDefenderTeam()]); + turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); break; case GO_WINTERGRASP_SHADOWSIGHT_TOWER: case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: case GO_WINTERGRASP_FLAMEWATCH_TOWER: - turret->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetAttackerTeam()]); + turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); break; } m_WG->HideNpc(turret); @@ -1443,12 +1428,12 @@ struct BfWGGameObjectBuilding case GO_WINTERGRASP_FORTRESS_TOWER_2: case GO_WINTERGRASP_FORTRESS_TOWER_3: case GO_WINTERGRASP_FORTRESS_TOWER_4: - turret->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetDefenderTeam()]); + turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); break; case GO_WINTERGRASP_SHADOWSIGHT_TOWER: case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: case GO_WINTERGRASP_FLAMEWATCH_TOWER: - turret->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetAttackerTeam()]); + turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); break; } m_WG->HideNpc(turret); @@ -1509,14 +1494,14 @@ struct BfWGGameObjectBuilding case GO_WINTERGRASP_FORTRESS_TOWER_3: case GO_WINTERGRASP_FORTRESS_TOWER_4: { - creature->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetDefenderTeam()]); + creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); break; } case GO_WINTERGRASP_SHADOWSIGHT_TOWER: case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: case GO_WINTERGRASP_FLAMEWATCH_TOWER: { - creature->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetAttackerTeam()]); + creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); break; } } @@ -1545,14 +1530,14 @@ struct BfWGGameObjectBuilding case GO_WINTERGRASP_FORTRESS_TOWER_3: case GO_WINTERGRASP_FORTRESS_TOWER_4: { - creature->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetDefenderTeam()]); + creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); break; } case GO_WINTERGRASP_SHADOWSIGHT_TOWER: case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: case GO_WINTERGRASP_FLAMEWATCH_TOWER: { - creature->setFaction(BattlefieldWG::WintergraspFaction[m_WG->GetAttackerTeam()]); + creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); break; } } @@ -1581,7 +1566,7 @@ struct WGWorkshop WGWorkshop(BattlefieldWG* _bf, uint8 _workshopId) { - ASSERT(_bf || _workshopId < BattlefieldWG::WG_MAX_WORKSHOP); + ASSERT(_bf || _workshopId < WG_MAX_WORKSHOP); bf = _bf; workshopId = _workshopId; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index c0e3e3afc03..fcc3c8a1e93 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -9118,7 +9118,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) break; case 4197: // Wintergrasp /// Use the max here, and fill with zeros if missing. - NumberOfFields = 10 + BattlefieldWG::WG_MAX_OBJ + BattlefieldWG::WG_MAX_WORKSHOP; + NumberOfFields = 10 + WG_MAX_OBJ + WG_MAX_WORKSHOP; break; default: NumberOfFields = 12; @@ -9720,11 +9720,11 @@ void Player::SendBattlefieldWorldStates() if (BattlefieldWG* wg = (BattlefieldWG*)sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG)) { if (wg->IsWarTime()) - SendUpdateWorldState(BattlefieldWG::ClockWorldState[1], uint32(time(NULL))); + SendUpdateWorldState(ClockWorldState[1], uint32(time(NULL))); else // Time to next battle { uint32 timer = wg->GetTimer() / 1000; - SendUpdateWorldState(BattlefieldWG::ClockWorldState[1], time(NULL) + timer); + SendUpdateWorldState(ClockWorldState[1], time(NULL) + timer); } } } diff --git a/src/server/scripts/Northrend/wintergrasp.cpp b/src/server/scripts/Northrend/wintergrasp.cpp index c58f6fc2dff..59e9a31c4cf 100644 --- a/src/server/scripts/Northrend/wintergrasp.cpp +++ b/src/server/scripts/Northrend/wintergrasp.cpp @@ -307,7 +307,7 @@ class go_wg_vehicle_teleporter : public GameObjectScript // Tabulation madness in the hole! for (uint8 i = 0; i < MAX_WINTERGRASP_VEHICLES; i++) if (Creature* vehicleCreature = go->FindNearestCreature(vehiclesList[i], 3.0f, true)) - if (!vehicleCreature->HasAura(SPELL_VEHICLE_TELEPORT) && vehicleCreature->getFaction() == BattlefieldWG::WintergraspFaction[wg->GetDefenderTeam()]) + if (!vehicleCreature->HasAura(SPELL_VEHICLE_TELEPORT) && vehicleCreature->getFaction() == WintergraspFaction[wg->GetDefenderTeam()]) if (Creature* teleportTrigger = vehicleCreature->FindNearestCreature(NPC_WORLD_TRIGGER_LARGE_AOI_NOT_IMMUNE_PC_NPC, 100.0f, true)) teleportTrigger->CastSpell(vehicleCreature, SPELL_VEHICLE_TELEPORT, true); -- cgit v1.2.3