diff options
16 files changed, 242 insertions, 161 deletions
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/sql/updates/world/2012_09_29_00_world_creature_model_info.sql b/sql/updates/world/2012_09_29_00_world_creature_model_info.sql new file mode 100644 index 00000000000..0c63a0b2f73 --- /dev/null +++ b/sql/updates/world/2012_09_29_00_world_creature_model_info.sql @@ -0,0 +1,21 @@ +-- VoA +UPDATE `creature_model_info` SET `bounding_radius`=0.3875,`combat_reach`=7.5 WHERE `modelid`=29524; -- Koralon +UPDATE `creature_model_info` SET `bounding_radius`=0.465,`combat_reach`=7.5 WHERE `modelid`=27108; -- Emalon +UPDATE `creature_model_info` SET `bounding_radius`=0.465,`combat_reach`=9 WHERE `modelid`=31089; -- Toravon +UPDATE `creature_model_info` SET `bounding_radius`=0.465,`combat_reach`=7.5 WHERE `modelid`=26967; -- Archavon + +-- ToCr +UPDATE `creature_model_info` SET `bounding_radius`=1.085,`combat_reach`=10.5 WHERE `modelid`=29614; -- Gormok +UPDATE `creature_model_info` SET `bounding_radius`=1.55,`combat_reach`=5 WHERE `modelid`=29815; -- Acidmaw +UPDATE `creature_model_info` SET `bounding_radius`=1.24,`combat_reach`=12 WHERE `modelid`=24564; -- Dreadscale +UPDATE `creature_model_info` SET `bounding_radius`=4,`combat_reach`=14 WHERE `modelid`=21601; -- Icehowl +UPDATE `creature_model_info` SET `bounding_radius`=1.52778,`combat_reach`=5 WHERE `modelid`=29615; -- Jaraxxus +UPDATE `creature_model_info` SET `bounding_radius`=1.5,`combat_reach`=9 WHERE `modelid`=29267; -- Eydis Darkbane +UPDATE `creature_model_info` SET `bounding_radius`=1.5,`combat_reach`=9 WHERE `modelid`=29240; -- Fjola Lightbane +UPDATE `creature_model_info` SET `bounding_radius`=1.5,`combat_reach`=2.25 WHERE `modelid`=29773; -- Saamul +UPDATE `creature_model_info` SET `bounding_radius`=0.459,`combat_reach`=2.25 WHERE `modelid`=29774; -- Baelnor Lightbearer +UPDATE `creature_model_info` SET `bounding_radius`=0.312,`combat_reach`=2.25 WHERE `modelid`=29776; -- Irieth Shadowstep +UPDATE `creature_model_info` SET `bounding_radius`=0.52785,`combat_reach`=2.5875 WHERE `modelid`=29777; -- Serissa Grimdabbler +UPDATE `creature_model_info` SET `bounding_radius`=0.312,`combat_reach`=2.25 WHERE `modelid`=29778; -- Brienna Nightfell +UPDATE `creature_model_info` SET `bounding_radius`=1.5,`combat_reach`=2.25 WHERE `modelid`=29779; -- Shocuul +UPDATE `creature_model_info` SET `bounding_radius`=0.4511,`combat_reach`=2.6 WHERE `modelid`=29780; -- Melador Valestrider / Erin Misthoof diff --git a/sql/updates/world/2012_09_29_01_world_creature_text.sql b/sql/updates/world/2012_09_29_01_world_creature_text.sql new file mode 100644 index 00000000000..8fde66d2e6e --- /dev/null +++ b/sql/updates/world/2012_09_29_01_world_creature_text.sql @@ -0,0 +1,24 @@ +-- Mimiron +DELETE FROM `script_texts` WHERE `entry` BETWEEN -1603259 AND -1603240; +DELETE FROM `creature_text` WHERE `entry`=33350; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(33350,0,0, 'Oh, my! I wasn''t expecting company! The workshop is such a mess! How embarrassing!',14,0,100,0,0,15611, 'Mimiron SAY_AGGRO'), +(33350,1,0, 'Now why would you go and do something like that? Didn''t you see the sign that said ''DO NOT PUSH THIS BUTTON!''? How will we finish testing with the self-destruct mechanism active?',14,0,100,0,0,15629, 'Mimiron SAY_HARDMODE_ON'), +(33350,2,0, 'We haven''t much time, friends! You''re going to help me test out my latest and greatest creation. Now, before you change your minds, remember, that you kind of owe it to me after the mess you made with the XT-002.',14,0,100,0,0,15612, 'Mimiron SAY_MKII_ACTIVATE'), +(33350,3,0, 'MEDIC!',14,0,100,0,0,15613, 'Mimiron SAY_MKII_SLAY_1'), +(33350,3,1, 'I can fix that... or, maybe not! Sheesh, what a mess...',14,0,100,0,0,15614, 'Mimiron SAY_MKII_SLAY_2'), +(33350,4,0, 'WONDERFUL! Positively marvelous results! Hull integrity at 98.9 percent! Barely a dent! Moving right along.',14,0,100,0,0,15615, 'Mimiron SAY_MKII_DEATH'), +(33350,5,0, 'Behold the VX-001 Anti-personnel Assault Cannon! You might want to take cover.',14,0,100,0,0,15616, 'Mimiron SAY_VX001_ACTIVATE'), +(33350,6,0, 'Fascinating. I think they call that a "clean kill".',14,0,100,0,0,15617, 'Mimiron SAY_VX001_SLAY_1'), +(33350,6,1, 'Note to self: Cannon highly effective against flesh.',14,0,100,0,0,15618, 'Mimiron SAY_VX001_SLAY_2'), +(33350,7,0, 'Thank you, friends! Your efforts have yielded some fantastic data! Now, where did I put- oh, there it is!',14,0,100,0,0,15619, 'Mimiron SAY_VX001_DEATH'), +(33350,8,0, 'Isn''t it beautiful? I call it the magnificent aerial command unit!',14,0,100,0,0,15620, 'Mimiron SAY_AERIAL_ACTIVATE'), +(33350,9,0, 'Outplayed!',14,0,100,0,0,15621, 'Mimiron SAY_AERIAL_SLAY_1'), +(33350,9,1, 'You can do better than that!',14,0,100,0,0,15622, 'Mimiron SAY_AERIAL_SLAY_2'), +(33350,10,0, 'Preliminary testing phase complete. Now comes the true test!!',14,0,100,0,0,15623, 'Mimiron SAY_AERIAL_DEATH'), +(33350,11,0, 'Gaze upon its magnificence! Bask in its glorious, um, glory! I present you... V-07-TR-0N!',14,0,100,0,0,15624, 'Mimiron SAY_V07TRON_ACTIVATE'), +(33350,12,0, 'Prognosis: Negative!',14,0,100,0,0,15625, 'Mimiron SAY_V07TRON_SLAY_1'), +(33350,12,1, 'You''re not going to get up from that one, friend.',14,0,100,0,0,15626, 'Mimiron SAY_V07TRON_SLAY_2'), +(33350,13,0, 'It would appear that I''ve made a slight miscalculation. I allowed my mind to be corrupted by the fiend in the prison, overriding my primary directive. All systems seem to be functional now. Clear.',14,0,100,0,0,15627, 'Mimiron SAY_V07TRON_DEATH'), +(33350,14,0, 'Oh, my! It would seem that we are out of time, my friends!',14,0,100,0,0,15628, 'Mimiron SAY_BERSERK'), +(33350,15,0, 'Combat matrix enhanced. Behold wonderous rapidity!',14,0,100,0,0,15630, 'Mimiron SAY_YS_HELP'); diff --git a/sql/updates/world/2012_09_30_00_world_creature_text.sql b/sql/updates/world/2012_09_30_00_world_creature_text.sql new file mode 100644 index 00000000000..e0f9f210d7b --- /dev/null +++ b/sql/updates/world/2012_09_30_00_world_creature_text.sql @@ -0,0 +1,12 @@ +-- AzjolNerub/Ahnkahet/Elder Nadox +DELETE FROM `script_texts` WHERE `entry` BETWEEN -1619020 AND -1619014; +DELETE FROM `creature_text` WHERE `entry`=29309; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(29309,0,0, 'The secrets of the deep shall remain hidden.',14,0,100,0,0,14033, 'SAY_AGGRO'), +(29309,1,0, 'Sleep now, in the cold dark.',14,0,100,0,0,14036, 'SAY_SLAY_1'), +(29309,1,1, 'For the Lich King!',14,0,100,0,0,14037, 'SAY_SLAY_2'), +(29309,1,2, 'Perhaps we will be allies soon.',14,0,100,0,0,14038, 'SAY_SLAY_3'), +(29309,2,0, 'Master, is my service complete?',14,0,100,0,0,14039, 'SAY_DEATH'), +(29309,3,0, 'The young must not grow hungry...',14,0,100,0,0,14034, 'SAY_EGG_SAC_1'), +(29309,3,1, 'Shhhad ak kereeesshh chak-k-k!',14,0,100,0,0,14035, 'SAY_EGG_SAC_2'), +(29309,4,0, 'An Ahn''kahar Guardian hatches!',16,0,100,0,0,14035, 'EMOTE_HATCHES'); 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..de1ee1785d8 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)); @@ -873,23 +866,28 @@ WorldPacket BattlefieldWG::BuildInitWorldStates() 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) { - 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..323f7f2b13d 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,7 @@ class BattlefieldWG : public Battlefield uint8 GetSpiritGraveyardId(uint32 areaId); uint32 GetData(uint32 data); + protected: bool m_isRelicInteractible; @@ -441,6 +436,12 @@ class BattlefieldWG : public Battlefield GameObject* m_titansRelic; }; +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; @@ -448,6 +449,7 @@ 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 { @@ -1112,8 +1114,6 @@ const WintergraspTowerCannonData TowerCannon[WG_MAX_TOWER_CANNON] = // *****************WorkShop Data & Element***************** // ********************************************************* -uint8 const WG_MAX_WORKSHOP = 6; - struct WGWorkshopData { uint8 id; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp index a50553d2fa3..024c570d174 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp @@ -65,7 +65,7 @@ void BattlegroundWS::PostUpdateImpl(uint32 diff) { if (GetStatus() == STATUS_IN_PROGRESS) { - if (GetStartTime() >= 25*MINUTE*IN_MILLISECONDS) + if (GetStartTime() >= 27*MINUTE*IN_MILLISECONDS) { if (GetTeamScore(ALLIANCE) == 0) { @@ -83,7 +83,8 @@ void BattlegroundWS::PostUpdateImpl(uint32 diff) else EndBattleground(ALLIANCE); } - else if (GetStartTime() > uint32(_minutesElapsed * MINUTE * IN_MILLISECONDS)) + // first update needed after 1 minute of game already in progress + else if (GetStartTime() > uint32(_minutesElapsed * MINUTE * IN_MILLISECONDS) + 3 * MINUTE * IN_MILLISECONDS) { ++_minutesElapsed; UpdateWorldState(BG_WS_STATE_TIMER, 25 - _minutesElapsed); @@ -159,6 +160,17 @@ void BattlegroundWS::PostUpdateImpl(uint32 diff) } else { + if (Player* player = ObjectAccessor::FindPlayer(m_FlagKeepers[0])) + { + player->RemoveAurasDueToSpell(WS_SPELL_FOCUSED_ASSAULT); + player->RemoveAurasDueToSpell(WS_SPELL_BRUTAL_ASSAULT); + } + if (Player* player = ObjectAccessor::FindPlayer(m_FlagKeepers[1])) + { + player->RemoveAurasDueToSpell(WS_SPELL_FOCUSED_ASSAULT); + player->RemoveAurasDueToSpell(WS_SPELL_BRUTAL_ASSAULT); + } + _flagSpellForceTimer = 0; //reset timer. _flagDebuffState = 0; } @@ -826,23 +838,17 @@ void BattlegroundWS::FillInitialWorldStates(WorldPacket& data) data << uint32(BG_WS_FLAG_CAPTURES_MAX) << uint32(BG_WS_MAX_TEAM_SCORE); - if (GetStatus() == STATUS_IN_PROGRESS) - { - data << uint32(BG_WS_STATE_TIMER_ACTIVE) << uint32(1); - data << uint32(BG_WS_STATE_TIMER) << uint32(25-_minutesElapsed); - } - else - data << uint32(BG_WS_STATE_TIMER_ACTIVE) << uint32(0); - if (_flagState[BG_TEAM_HORDE] == BG_WS_FLAG_STATE_ON_PLAYER) - data << uint32(BG_WS_FLAG_STATE_ALLIANCE) << uint32(2); + data << uint32(BG_WS_FLAG_STATE_HORDE) << uint32(2); else - data << uint32(BG_WS_FLAG_STATE_ALLIANCE) << uint32(1); + data << uint32(BG_WS_FLAG_STATE_HORDE) << uint32(1); if (_flagState[BG_TEAM_ALLIANCE] == BG_WS_FLAG_STATE_ON_PLAYER) - data << uint32(BG_WS_FLAG_STATE_HORDE) << uint32(2); + data << uint32(BG_WS_FLAG_STATE_ALLIANCE) << uint32(2); else - data << uint32(BG_WS_FLAG_STATE_HORDE) << uint32(1); + data << uint32(BG_WS_FLAG_STATE_ALLIANCE) << uint32(1); + data << uint32(BG_WS_STATE_TIMER_ACTIVE) << uint32(1); + data << uint32(BG_WS_STATE_TIMER) << uint32(25 - _minutesElapsed); } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index ee5f33fc59c..836ea09f727 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); @@ -9076,7 +9078,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) NumberOfFields = 83; break; case 3277: - NumberOfFields = 16; + NumberOfFields = 18; break; case 3358: case 3820: @@ -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 + WG_MAX_OBJ + 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<uint16>(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(ClockWorldState[1], uint32(time(NULL))); + else // Time to next battle + { + uint32 timer = wg->GetTimer() / 1000; + SendUpdateWorldState(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<Player> void SendUpdateWorldState(uint32 Field, uint32 Value); void SendDirectMessage(WorldPacket* data); void SendBGWeekendWorldStates(); + void SendBattlefieldWorldStates(); void SendAurasForTarget(Unit* target); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 3e9ab113918..0a3876c6946 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -6673,7 +6673,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere { victim->CastCustomSpell(beaconTarget, triggered_spell_id, &basepoints0, NULL, NULL, true, 0, triggeredByAura); return true; - } + } else return false; } diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp index 7f4da5666ff..9274a016e2f 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp @@ -19,16 +19,13 @@ #include "ScriptedCreature.h" #include "ahnkahet.h" -//not in db enum Yells { - SAY_AGGRO = -1619014, - SAY_SLAY_1 = -1619015, - SAY_SLAY_2 = -1619016, - SAY_SLAY_3 = -1619017, - SAY_DEATH = -1619018, - SAY_EGG_SAC_1 = -1619019, - SAY_EGG_SAC_2 = -1619020 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_EGG_SAC = 3, + EMOTE_HATCHES = 4 }; enum Spells @@ -50,8 +47,6 @@ enum Creatures #define ACTION_AHNKAHAR_GUARDIAN_DEAD 1 #define DATA_RESPECT_YOUR_ELDERS 2 -#define EMOTE_HATCHES "An Ahn'kahar Guardian hatches!" - class boss_elder_nadox : public CreatureScript { public: @@ -61,7 +56,7 @@ class boss_elder_nadox : public CreatureScript { boss_elder_nadoxAI(Creature* creature) : ScriptedAI(creature) { - instance = me->GetInstanceScript(); + instance = creature->GetInstanceScript(); } uint32 uiPlagueTimer; @@ -78,16 +73,13 @@ class boss_elder_nadox : public CreatureScript void Reset() { - uiPlagueTimer = 13000; - uiRagueTimer = 20000; - + uiPlagueTimer = 13000; + uiRagueTimer = 20000; uiSwarmerSpawnTimer = 10000; - uiGuardSpawnTimer = 25000; - - uiEnrageTimer = 5000; - - bGuardSpawned = false; - respectYourElders = true; + uiGuardSpawnTimer = 25000; + uiEnrageTimer = 5000; + bGuardSpawned = false; + respectYourElders = true; if (instance) instance->SetData(DATA_ELDER_NADOX_EVENT, NOT_STARTED); @@ -95,7 +87,7 @@ class boss_elder_nadox : public CreatureScript void EnterCombat(Unit* /*who*/) { - DoScriptText(SAY_DEATH, me); + Talk(SAY_AGGRO); if (instance) instance->SetData(DATA_ELDER_NADOX_EVENT, IN_PROGRESS); @@ -103,12 +95,12 @@ class boss_elder_nadox : public CreatureScript void KilledUnit(Unit* /*who*/) { - DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me); + Talk(SAY_SLAY); } void JustDied(Unit* /*killer*/) { - DoScriptText(SAY_SLAY_3, me); //SAY_SLAY_3 on death? + Talk(SAY_DEATH); if (instance) instance->SetData(DATA_ELDER_NADOX_EVENT, DONE); @@ -135,7 +127,7 @@ class boss_elder_nadox : public CreatureScript if (uiPlagueTimer <= diff) { - DoCast(me->getVictim(), SPELL_BROOD_PLAGUE); + DoCastVictim(SPELL_BROOD_PLAGUE); uiPlagueTimer = 15000; } else @@ -160,7 +152,7 @@ class boss_elder_nadox : public CreatureScript DoCast(me, SPELL_SUMMON_SWARMERS, true); DoCast(me, SPELL_SUMMON_SWARMERS); if (urand(1, 3) == 3) // 33% chance of dialog - DoScriptText(RAND(SAY_EGG_SAC_1, SAY_EGG_SAC_2), me); + Talk(SAY_EGG_SAC); uiSwarmerSpawnTimer = 10000; } @@ -169,7 +161,7 @@ class boss_elder_nadox : public CreatureScript if (!bGuardSpawned && uiGuardSpawnTimer <= diff) { - me->MonsterTextEmote(EMOTE_HATCHES, me->GetGUID(), true); + Talk(EMOTE_HATCHES, me->GetGUID()); DoCast(me, SPELL_SUMMON_SWARM_GUARD); bGuardSpawned = true; } @@ -217,7 +209,7 @@ class mob_ahnkahar_nerubian : public CreatureScript { mob_ahnkahar_nerubianAI(Creature* creature) : ScriptedAI(creature) { - instance = me->GetInstanceScript(); + instance = creature->GetInstanceScript(); } InstanceScript* instance; @@ -237,9 +229,7 @@ class mob_ahnkahar_nerubian : public CreatureScript Nadox->AI()->DoAction(ACTION_AHNKAHAR_GUARDIAN_DEAD); } - void EnterCombat(Unit* /*who*/) - { - } + void EnterCombat(Unit* /*who*/) {} void UpdateAI(uint32 const diff) { @@ -300,9 +290,7 @@ public: class achievement_respect_your_elders : public AchievementCriteriaScript { public: - achievement_respect_your_elders() : AchievementCriteriaScript("achievement_respect_your_elders") - { - } + achievement_respect_your_elders() : AchievementCriteriaScript("achievement_respect_your_elders") {} bool OnCheck(Player* /*player*/, Unit* target) { diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index 98b3a6b658b..6a4a5255293 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -21,97 +21,93 @@ enum Yells { - SAY_AGGRO = -1603240, - SAY_HARDMODE_ON = -1603241, - SAY_MKII_ACTIVATE = -1603242, - SAY_MKII_SLAY_1 = -1603243, - SAY_MKII_SLAY_2 = -1603244, - SAY_MKII_DEATH = -1603245, - SAY_VX001_ACTIVATE = -1603246, - SAY_VX001_SLAY_1 = -1603247, - SAY_VX001_SLAY_2 = -1603248, - SAY_VX001_DEATH = -1603249, - SAY_AERIAL_ACTIVATE = -1603250, - SAY_AERIAL_SLAY_1 = -1603251, - SAY_AERIAL_SLAY_2 = -1603252, - SAY_AERIAL_DEATH = -1603253, - SAY_V07TRON_ACTIVATE = -1603254, - SAY_V07TRON_SLAY_1 = -1603255, - SAY_V07TRON_SLAY_2 = -1603256, - SAY_V07TRON_DEATH = -1603257, - SAY_BERSERK = -1603258, - SAY_YS_HELP = -1603259, + SAY_AGGRO = 0, + SAY_HARDMODE_ON = 1, + SAY_MKII_ACTIVATE = 2, + SAY_MKII_SLAY = 3, + SAY_MKII_DEATH = 4, + SAY_VX001_ACTIVATE = 5, + SAY_VX001_SLAY = 6, + SAY_VX001_DEATH = 7, + SAY_AERIAL_ACTIVATE = 8, + SAY_AERIAL_SLAY = 9, + SAY_AERIAL_DEATH = 10, + SAY_V07TRON_ACTIVATE = 11, + SAY_V07TRON_SLAY = 12, + SAY_V07TRON_DEATH = 13, + SAY_BERSERK = 14, + SAY_YS_HELP = 15 }; enum Spells { - SPELL_JETPACK = 63341, - SPELL_EMERGENCY_MODE = 64582, - SPELL_SELF_REPAIR = 64383, - SPELL_MAGNETIC_CORE = 64444, - // Leviathan MK II - SPELL_FLAME_SUPPRESSANT_MK = 64570, - SPELL_NAPALM_SHELL = 63666, - SPELL_PLASMA_BLAST = 62977, - SPELL_PROXIMITY_MINES = 63027, - SPELL_SHOCK_BLAST = 63631, - // VX 001 - SPELL_FLAME_SUPPRESSANT_VX = 65192, - SPELL_FROSTBOMB = 64623, - SPELL_HAND_PULSE = 64348, - SPELL_SPINNING_UP = 63414, - SPELL_RAPID_BURST = 63387, - SPELL_P3WX2_LASER_BARRAGE = 63293, - SPELL_ROCKET_STRIKE = 63041, - SPELL_HEAT_WAVE = 63677, - // Aerial Command Unit - SPELL_PLASMA_BALL = 63689, - // Additonal spells - SPELL_MAGNETIC_FIELD = 64668, - SPELL_DEAFENING_SIREN = 64616, - SPELL_WATER_SPRAY = 64619, - SPELL_FROST_BOMB_HARD_MODE = 64627, - SPELL_EXPLOSION = 66351, - SPELL_DISARM = 1842, - SPELL_RIDE_VEHICLE = 46598, - SPELL_TRIGGER_MISSILE = 65347, + SPELL_JETPACK = 63341, + SPELL_EMERGENCY_MODE = 64582, + SPELL_SELF_REPAIR = 64383, + SPELL_MAGNETIC_CORE = 64444, + // Leviathan MK II + SPELL_FLAME_SUPPRESSANT_MK = 64570, + SPELL_NAPALM_SHELL = 63666, + SPELL_PLASMA_BLAST = 62977, + SPELL_PROXIMITY_MINES = 63027, + SPELL_SHOCK_BLAST = 63631, + // VX 001 + SPELL_FLAME_SUPPRESSANT_VX = 65192, + SPELL_FROSTBOMB = 64623, + SPELL_HAND_PULSE = 64348, + SPELL_SPINNING_UP = 63414, + SPELL_RAPID_BURST = 63387, + SPELL_P3WX2_LASER_BARRAGE = 63293, + SPELL_ROCKET_STRIKE = 63041, + SPELL_HEAT_WAVE = 63677, + // Aerial Command Unit + SPELL_PLASMA_BALL = 63689, + // Additonal spells + SPELL_MAGNETIC_FIELD = 64668, + SPELL_DEAFENING_SIREN = 64616, + SPELL_WATER_SPRAY = 64619, + SPELL_FROST_BOMB_HARD_MODE = 64627, + SPELL_EXPLOSION = 66351, + SPELL_DISARM = 1842, + SPELL_RIDE_VEHICLE = 46598, + SPELL_TRIGGER_MISSILE = 65347, }; enum Npc { - NPC_ASSAULT_BOT = 34057, - NPC_BOMB_BOT = 33836, - NPC_JUNK_BOT = 33855, - NPC_EMERGENCE_FIRE_BOT = 34147, - NPC_FROST_BOMB = 34149, + NPC_ASSAULT_BOT = 34057, + NPC_BOMB_BOT = 33836, + NPC_JUNK_BOT = 33855, + NPC_EMERGENCE_FIRE_BOT = 34147, + NPC_FROST_BOMB = 34149, }; class spell_ulduar_proximity_mines : public SpellScriptLoader { - public: - spell_ulduar_proximity_mines() : SpellScriptLoader("spell_ulduar_proximity_mines") { } + public: + spell_ulduar_proximity_mines() : SpellScriptLoader("spell_ulduar_proximity_mines") { } - class spell_ulduar_proximity_minesSpellScript : public SpellScript - { - PrepareSpellScript(spell_ulduar_proximity_minesSpellScript) + class spell_ulduar_proximity_minesSpellScript : public SpellScript + { + PrepareSpellScript(spell_ulduar_proximity_minesSpellScript) - void HandleScript(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - for (uint8 i = 0; i < 10; ++i) - GetCaster()->CastSpell(GetCaster(), SPELL_TRIGGER_MISSILE, true); - } + void HandleScript(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + for (uint8 i = 0; i < 10; ++i) + GetCaster()->CastSpell(GetCaster(), SPELL_TRIGGER_MISSILE, true); + } - void Register() - { - OnEffectHitTarget += SpellEffectFn(spell_ulduar_proximity_minesSpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_ulduar_proximity_minesSpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; - SpellScript* GetSpellScript() const - { - return new spell_ulduar_proximity_minesSpellScript(); - } + SpellScript* GetSpellScript() const + { + return new spell_ulduar_proximity_minesSpellScript(); + } }; void AddSC_boss_mimiron() 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); diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index 0102c3cb1ae..7be80088101 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -627,7 +627,7 @@ class spell_pal_divine_sacrifice : public SpellScriptLoader bool Load() { - + if (Unit* caster = GetCaster()) { if (caster->GetTypeId() == TYPEID_PLAYER) |