From 9578b5f87a4aa96e120b78f410ea90e141903dd7 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sat, 7 Sep 2013 14:37:54 +0200 Subject: Core/Thread: Fix race condition converting time values to local time Replace thread-unsafe localtime() http://www.cplusplus.com/reference/ctime/localtime/ with thread-safe portable ACE_OS::localtime_r() . Helgrind log: Possible data race during read of size 4 at 0x6F183C0 by thread #1 Locks held: none at 0x14E72E3: World::InitDailyQuestResetTime() (World.cpp:2772) by 0x14E3A01: World::SetInitialWorldSettings() (World.cpp:1790) by 0x101122A: Master::Run() (Master.cpp:164) by 0x101740C: main (Main.cpp:142) This conflicts with a previous write of size 4 by thread #2 Locks held: none at 0x6C2D3BA: __tzfile_compute (tzfile.c:797) by 0x6C2D036: __tz_convert (tzset.c:627) by 0x164146C: LogMessage::getTimeStr(long) (Appender.cpp:23) by 0x1641550: LogMessage::getTimeStr() (Appender.cpp:31) by 0x1641722: Appender::write(LogMessage&) (Appender.cpp:80) by 0x1633FCE: Logger::write(LogMessage&) (Logger.cpp:83) by 0x16433D8: LogOperation::call() (LogOperation.cpp:29) by 0x16428A4: LogWorker::svc() (LogWorker.cpp:45) --- src/server/scripts/Commands/cs_ban.cpp | 36 ++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 15 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Commands/cs_ban.cpp b/src/server/scripts/Commands/cs_ban.cpp index b12e058a78f..dd6e104f135 100644 --- a/src/server/scripts/Commands/cs_ban.cpp +++ b/src/server/scripts/Commands/cs_ban.cpp @@ -436,21 +436,23 @@ public: do { time_t timeBan = time_t(fields2[0].GetUInt32()); - tm* tmBan = localtime(&timeBan); + tm tmBan; + ACE_OS::localtime_r(&timeBan, &tmBan); if (fields2[0].GetUInt32() == fields2[1].GetUInt32()) { handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d| permanent |%-15.15s|%-15.15s|", - accountName.c_str(), tmBan->tm_year%100, tmBan->tm_mon+1, tmBan->tm_mday, tmBan->tm_hour, tmBan->tm_min, + accountName.c_str(), tmBan.tm_year%100, tmBan.tm_mon+1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min, fields2[2].GetCString(), fields2[3].GetCString()); } else { time_t timeUnban = time_t(fields2[1].GetUInt32()); - tm* tmUnban = localtime(&timeUnban); + tm tmUnban; + ACE_OS::localtime_r(&timeUnban, &tmUnban); handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|", - accountName.c_str(), tmBan->tm_year%100, tmBan->tm_mon+1, tmBan->tm_mday, tmBan->tm_hour, tmBan->tm_min, - tmUnban->tm_year%100, tmUnban->tm_mon+1, tmUnban->tm_mday, tmUnban->tm_hour, tmUnban->tm_min, + accountName.c_str(), tmBan.tm_year%100, tmBan.tm_mon+1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min, + tmUnban.tm_year%100, tmUnban.tm_mon+1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min, fields2[2].GetCString(), fields2[3].GetCString()); } } @@ -523,21 +525,23 @@ public: do { time_t timeBan = time_t(banFields[0].GetUInt32()); - tm* tmBan = localtime(&timeBan); + tm tmBan; + ACE_OS::localtime_r(&timeBan, &tmBan); if (banFields[0].GetUInt32() == banFields[1].GetUInt32()) { handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d| permanent |%-15.15s|%-15.15s|", - char_name.c_str(), tmBan->tm_year%100, tmBan->tm_mon+1, tmBan->tm_mday, tmBan->tm_hour, tmBan->tm_min, + char_name.c_str(), tmBan.tm_year%100, tmBan.tm_mon+1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min, banFields[2].GetCString(), banFields[3].GetCString()); } else { time_t timeUnban = time_t(banFields[1].GetUInt32()); - tm* tmUnban = localtime(&timeUnban); + tm tmUnban; + ACE_OS::localtime_r(&timeUnban, &tmUnban); handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|", - char_name.c_str(), tmBan->tm_year%100, tmBan->tm_mon+1, tmBan->tm_mday, tmBan->tm_hour, tmBan->tm_min, - tmUnban->tm_year%100, tmUnban->tm_mon+1, tmUnban->tm_mday, tmUnban->tm_hour, tmUnban->tm_min, + char_name.c_str(), tmBan.tm_year%100, tmBan.tm_mon+1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min, + tmUnban.tm_year%100, tmUnban.tm_mon+1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min, banFields[2].GetCString(), banFields[3].GetCString()); } } @@ -602,20 +606,22 @@ public: handler->SendSysMessage("-------------------------------------------------------------------------------"); Field* fields = result->Fetch(); time_t timeBan = time_t(fields[1].GetUInt32()); - tm* tmBan = localtime(&timeBan); + tm tmBan; + ACE_OS::localtime_r(&timeBan, &tmBan); if (fields[1].GetUInt32() == fields[2].GetUInt32()) { handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d| permanent |%-15.15s|%-15.15s|", - fields[0].GetCString(), tmBan->tm_year%100, tmBan->tm_mon+1, tmBan->tm_mday, tmBan->tm_hour, tmBan->tm_min, + fields[0].GetCString(), tmBan.tm_year%100, tmBan.tm_mon+1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min, fields[3].GetCString(), fields[4].GetCString()); } else { time_t timeUnban = time_t(fields[2].GetUInt32()); - tm* tmUnban = localtime(&timeUnban); + tm tmUnban; + ACE_OS::localtime_r(&timeUnban, &tmUnban); handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|", - fields[0].GetCString(), tmBan->tm_year%100, tmBan->tm_mon+1, tmBan->tm_mday, tmBan->tm_hour, tmBan->tm_min, - tmUnban->tm_year%100, tmUnban->tm_mon+1, tmUnban->tm_mday, tmUnban->tm_hour, tmUnban->tm_min, + fields[0].GetCString(), tmBan.tm_year%100, tmBan.tm_mon+1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min, + tmUnban.tm_year%100, tmUnban.tm_mon+1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min, fields[3].GetCString(), fields[4].GetCString()); } } -- cgit v1.2.3 From 3420c70a470d1dc5193e3a755098aaff121c7fab Mon Sep 17 00:00:00 2001 From: MitchesD Date: Wed, 11 Sep 2013 15:52:59 +0200 Subject: Scripts/PitOfSaron: some changes Closes #10740 --- .../PitOfSaron/boss_forgemaster_garfrost.cpp | 99 ++++++++++------------ .../FrozenHalls/PitOfSaron/boss_krickandick.cpp | 38 +++------ .../PitOfSaron/instance_pit_of_saron.cpp | 4 +- .../FrozenHalls/PitOfSaron/pit_of_saron.h | 13 ++- 4 files changed, 61 insertions(+), 93 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp index 4bb989bf2e4..364b777c435 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp @@ -23,26 +23,26 @@ enum Yells { - SAY_AGGRO = 0, - SAY_PHASE2 = 1, - SAY_PHASE3 = 2, - SAY_DEATH = 3, - SAY_SLAY = 4, - SAY_THROW_SARONITE = 5, - SAY_CAST_DEEP_FREEZE = 6, - - SAY_TYRANNUS_DEATH = 0 + SAY_AGGRO = 0, + SAY_PHASE2 = 1, + SAY_PHASE3 = 2, + SAY_DEATH = 3, + SAY_SLAY = 4, + SAY_THROW_SARONITE = 5, + SAY_CAST_DEEP_FREEZE = 6, + + SAY_TYRANNUS_DEATH = 0 }; enum Spells { - SPELL_PERMAFROST = 70326, - SPELL_THROW_SARONITE = 68788, - SPELL_THUNDERING_STOMP = 68771, - SPELL_CHILLING_WAVE = 68778, - SPELL_DEEP_FREEZE = 70381, - SPELL_FORGE_MACE = 68785, - SPELL_FORGE_BLADE = 68774, + SPELL_PERMAFROST = 70326, + SPELL_THROW_SARONITE = 68788, + SPELL_THUNDERING_STOMP = 68771, + SPELL_CHILLING_WAVE = 68778, + SPELL_DEEP_FREEZE = 70381, + SPELL_FORGE_MACE = 68785, + SPELL_FORGE_BLADE = 68774 }; #define SPELL_PERMAFROST_HELPER RAID_MODE(68786, 70336) @@ -50,9 +50,9 @@ enum Spells enum Phases { - PHASE_ONE = 1, - PHASE_TWO = 2, - PHASE_THREE = 3 + PHASE_ONE = 1, + PHASE_TWO = 2, + PHASE_THREE = 3 }; enum MiscData @@ -60,58 +60,46 @@ enum MiscData EQUIP_ID_SWORD = 49345, EQUIP_ID_MACE = 49344, ACHIEV_DOESNT_GO_TO_ELEVEN = 0, - POINT_FORGE = 0, + POINT_FORGE = 0 }; -Position const northForgePos = {722.5643f, -234.1615f, 527.182f, 2.16421f}; -Position const southForgePos = {639.257f, -210.1198f, 529.015f, 0.523599f}; - -class boss_garfrost : public CreatureScript -{ enum Events { - EVENT_THROW_SARONITE = 1, - EVENT_CHILLING_WAVE = 2, - EVENT_DEEP_FREEZE = 3, - EVENT_JUMP = 4, - EVENT_FORGING = 5, - EVENT_RESUME_ATTACK = 6, + EVENT_THROW_SARONITE = 1, + EVENT_CHILLING_WAVE = 2, + EVENT_DEEP_FREEZE = 3, + EVENT_FORGE_JUMP = 4, + EVENT_FORGING = 5, + EVENT_RESUME_ATTACK = 6 }; + +Position const northForgePos = { 722.5643f, -234.1615f, 527.182f, 2.16421f }; +Position const southForgePos = { 639.257f, -210.1198f, 529.015f, 0.523599f }; + +class boss_garfrost : public CreatureScript +{ public: boss_garfrost() : CreatureScript("boss_garfrost") { } struct boss_garfrostAI : public BossAI { - boss_garfrostAI(Creature* creature) : BossAI(creature, DATA_GARFROST) - { - } - - void InitializeAI() OVERRIDE - { - if (!instance || static_cast(me->GetMap())->GetScriptId() != sObjectMgr->GetScriptId(PoSScriptName)) - me->IsAIEnabled = false; - else if (!me->isDead()) - Reset(); - } + boss_garfrostAI(Creature* creature) : BossAI(creature, DATA_GARFROST) { } void Reset() OVERRIDE { - events.Reset(); + _Reset(); events.SetPhase(PHASE_ONE); SetEquipmentSlots(true); _permafrostStack = 0; - - instance->SetBossState(DATA_GARFROST, NOT_STARTED); } void EnterCombat(Unit* /*who*/) OVERRIDE { + _EnterCombat(); Talk(SAY_AGGRO); DoCast(me, SPELL_PERMAFROST); me->CallForHelp(70.0f); events.ScheduleEvent(EVENT_THROW_SARONITE, 7000); - - instance->SetBossState(DATA_GARFROST, IN_PROGRESS); } void KilledUnit(Unit* victim) OVERRIDE @@ -122,12 +110,11 @@ enum Events void JustDied(Unit* /*killer*/) OVERRIDE { + _JustDied(); Talk(SAY_DEATH); if (Creature* tyrannus = me->GetCreature(*me, instance->GetData64(DATA_TYRANNUS))) tyrannus->AI()->Talk(SAY_TYRANNUS_DEATH); - - instance->SetBossState(DATA_GARFROST, DONE); } void DamageTaken(Unit* /*attacker*/, uint32& /*uiDamage*/) OVERRIDE @@ -138,7 +125,7 @@ enum Events Talk(SAY_PHASE2); events.DelayEvents(8000); DoCast(me, SPELL_THUNDERING_STOMP); - events.ScheduleEvent(EVENT_JUMP, 1500); + events.ScheduleEvent(EVENT_FORGE_JUMP, 1500); return; } @@ -148,7 +135,7 @@ enum Events Talk(SAY_PHASE3); events.DelayEvents(8000); DoCast(me, SPELL_THUNDERING_STOMP); - events.ScheduleEvent(EVENT_JUMP, 1500); + events.ScheduleEvent(EVENT_FORGE_JUMP, 1500); return; } } @@ -220,15 +207,15 @@ enum Events } events.ScheduleEvent(EVENT_DEEP_FREEZE, 35000, 0, PHASE_THREE); break; - case EVENT_JUMP: + case EVENT_FORGE_JUMP: me->AttackStop(); if (events.IsInPhase(PHASE_TWO)) - me->GetMotionMaster()->MoveJump(northForgePos.GetPositionX(), northForgePos.GetPositionY(), northForgePos.GetPositionZ(), 25.0f, 15.0f); + me->GetMotionMaster()->MoveJump(northForgePos, 25.0f, 15.0f); else if (events.IsInPhase(PHASE_THREE)) - me->GetMotionMaster()->MoveJump(southForgePos.GetPositionX(), southForgePos.GetPositionY(), southForgePos.GetPositionZ(), 25.0f, 15.0f); + me->GetMotionMaster()->MoveJump(southForgePos, 25.0f, 15.0f); break; case EVENT_RESUME_ATTACK: - if (events.IsInPhase(PHASE_THREE)) + if (events.IsInPhase(PHASE_TWO)) events.ScheduleEvent(EVENT_CHILLING_WAVE, 5000, 0, PHASE_TWO); else if (events.IsInPhase(PHASE_THREE)) events.ScheduleEvent(EVENT_DEEP_FREEZE, 10000, 0, PHASE_THREE); @@ -248,7 +235,7 @@ enum Events CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_garfrostAI(creature); + return GetPitOfSaronAI(creature); } }; diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp index b738f0c9358..3b3f65c7704 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp @@ -42,7 +42,7 @@ enum Spells SPELL_STRANGULATING = 69413, //krick's selfcast in intro SPELL_SUICIDE = 7, SPELL_KRICK_KILL_CREDIT = 71308, - SPELL_NECROMANTIC_POWER = 69753, + SPELL_NECROMANTIC_POWER = 69753 }; enum Yells @@ -71,7 +71,7 @@ enum Yells SAY_SYLVANAS_OUTRO_4 = 1, SAY_SYLVANAS_OUTRO_10 = 2, SAY_TYRANNUS_OUTRO_7 = 1, - SAY_TYRANNUS_OUTRO_9 = 2, + SAY_TYRANNUS_OUTRO_9 = 2 }; enum Events @@ -98,24 +98,24 @@ enum Events EVENT_OUTRO_11 = 18, EVENT_OUTRO_12 = 19, EVENT_OUTRO_13 = 20, - EVENT_OUTRO_END = 21, + EVENT_OUTRO_END = 21 }; enum KrickPhase { PHASE_COMBAT = 1, - PHASE_OUTRO = 2, + PHASE_OUTRO = 2 }; enum Actions { - ACTION_OUTRO = 1, + ACTION_OUTRO = 1 }; enum Points { POINT_KRICK_INTRO = 364770, - POINT_KRICK_DEATH = 364771, + POINT_KRICK_DEATH = 364771 }; static const Position outroPos[8] = @@ -127,7 +127,7 @@ static const Position outroPos[8] = {835.5887f, 139.4345f, 530.9526f, 0.0000000f}, // Tyrannus fly down Position (not sniffed) {828.9342f, 118.6247f, 514.5190f, 0.0000000f}, // Krick's Choke Position {828.9342f, 118.6247f, 509.4958f, 0.0000000f}, // Kirck's Death Position - {914.4820f, 143.1602f, 633.3624f, 0.0000000f}, // Tyrannus fly up (not sniffed) + {914.4820f, 143.1602f, 633.3624f, 0.0000000f} // Tyrannus fly up (not sniffed) }; class boss_ick : public CreatureScript @@ -142,14 +142,6 @@ class boss_ick : public CreatureScript ASSERT(_vehicle); } - void InitializeAI() OVERRIDE - { - if (!instance || static_cast(me->GetMap())->GetScriptId() != sObjectMgr->GetScriptId(PoSScriptName)) - me->IsAIEnabled = false; - else if (!me->isDead()) - Reset(); - } - void Reset() OVERRIDE { events.Reset(); @@ -163,6 +155,8 @@ class boss_ick : public CreatureScript void EnterCombat(Unit* /*who*/) OVERRIDE { + _EnterCombat(); + if (Creature* krick = GetKrick()) krick->AI()->Talk(SAY_KRICK_AGGRO); @@ -170,8 +164,6 @@ class boss_ick : public CreatureScript events.ScheduleEvent(EVENT_TOXIC_WASTE, 5000); events.ScheduleEvent(EVENT_SHADOW_BOLT, 10000); events.ScheduleEvent(EVENT_SPECIAL, urand(30000, 35000)); - - instance->SetBossState(DATA_ICK, IN_PROGRESS); } void EnterEvadeMode() OVERRIDE @@ -281,7 +273,7 @@ class boss_ick : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_ickAI(creature); + return GetPitOfSaronAI(creature); } }; @@ -296,14 +288,6 @@ class boss_krick : public CreatureScript { } - void InitializeAI() OVERRIDE - { - if (!_instanceScript || static_cast(me->GetMap())->GetScriptId() != sObjectMgr->GetScriptId(PoSScriptName)) - me->IsAIEnabled = false; - else if (!me->isDead()) - Reset(); - } - void Reset() OVERRIDE { _events.Reset(); @@ -509,7 +493,7 @@ class boss_krick : public CreatureScript CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_krickAI(creature); + return GetPitOfSaronAI(creature); } }; diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp index a789d0c6a70..7aa8b123f98 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp @@ -41,7 +41,7 @@ class instance_pit_of_saron : public InstanceMapScript { instance_pit_of_saron_InstanceScript(Map* map) : InstanceScript(map) { - SetBossNumber(MAX_ENCOUNTER); + SetBossNumber(EncounterCount); LoadDoorData(Doors); _garfrostGUID = 0; _krickGUID = 0; @@ -292,7 +292,7 @@ class instance_pit_of_saron : public InstanceMapScript if (dataHead1 == 'P' && dataHead2 == 'S') { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) + for (uint8 i = 0; i < EncounterCount; ++i) { uint32 tmpState; loadStream >> tmpState; diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h index a9b88ca3066..b393f783970 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h @@ -22,7 +22,8 @@ #include "Creature.h" #define PoSScriptName "instance_pit_of_saron" -#define MAX_ENCOUNTER 3 + +uint32 const EncounterCount = 3; enum DataTypes { @@ -37,7 +38,7 @@ enum DataTypes DATA_JAINA_SYLVANAS_1 = 5, // GUID of either Jaina or Sylvanas part 1, depending on team, as it's the same spawn. DATA_JAINA_SYLVANAS_2 = 6, // GUID of either Jaina or Sylvanas part 2, depending on team, as it's the same spawn. DATA_TYRANNUS_EVENT = 7, - DATA_TEAM_IN_INSTANCE = 8, + DATA_TEAM_IN_INSTANCE = 8 }; enum CreatureIds @@ -94,17 +95,13 @@ enum GameObjectIds { GO_SARONITE_ROCK = 196485, GO_ICE_WALL = 201885, - GO_HALLS_OF_REFLECTION_PORTCULLIS = 201848, + GO_HALLS_OF_REFLECTION_PORTCULLIS = 201848 }; template AI* GetPitOfSaronAI(Creature* creature) { - if (InstanceMap* instance = creature->GetMap()->ToInstanceMap()) - if (instance->GetInstanceScript()) - if (instance->GetScriptId() == sObjectMgr->GetScriptId(PoSScriptName)) - return new AI(creature); - return NULL; + return GetInstanceAI(creature, PoSScriptName); } #endif -- cgit v1.2.3 From 77f90c1c67864305d532233266a4951f48f61683 Mon Sep 17 00:00:00 2001 From: joschiwald Date: Wed, 11 Sep 2013 17:07:29 +0200 Subject: Scripts/Halion: refixed Twilight Cutter Scripts/Garfrost: fixed forge jump --- src/server/game/Spells/SpellInfo.cpp | 5 ++++- .../ChamberOfAspects/RubySanctum/boss_halion.cpp | 15 ++++++--------- .../FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp | 7 +++---- .../Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h | 9 +++------ .../HallsOfLightning/instance_halls_of_lightning.cpp | 8 ++++---- .../Ulduar/HallsOfStone/instance_halls_of_stone.cpp | 4 ++-- 6 files changed, 22 insertions(+), 26 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 99242d622df..a0e1ec065cc 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1026,8 +1026,11 @@ bool SpellInfo::NeedsToBeTriggeredByCaster(SpellInfo const* triggeringSpell) con uint32 mask = 0; for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) { - if (Effects[i].TargetA.GetTarget() != TARGET_UNIT_CASTER && Effects[i].TargetA.GetTarget() != TARGET_DEST_CASTER) + if (Effects[i].TargetA.GetTarget() != TARGET_UNIT_CASTER && Effects[i].TargetA.GetTarget() != TARGET_DEST_CASTER + && Effects[i].TargetB.GetTarget() != TARGET_UNIT_CASTER && Effects[i].TargetB.GetTarget() != TARGET_DEST_CASTER) + { mask |= Effects[i].GetProvidedTargetMask(); + } } if (mask & TARGET_FLAG_UNIT_MASK) diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 11ee7b0e409..7561d1c4991 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -1620,16 +1620,16 @@ class spell_halion_clear_debuffs : public SpellScriptLoader class TwilightCutterSelector { public: - TwilightCutterSelector(Unit* caster, Unit* cutterCaster) : _caster(caster), _cutterCaster(cutterCaster) {} + TwilightCutterSelector(Unit* caster, Unit* target) : _caster(caster), _channelTarget(target) {} bool operator()(WorldObject* unit) { - return !unit->IsInBetween(_caster, _cutterCaster, 4.0f); + return !unit->IsInBetween(_caster, _channelTarget, 4.0f); } private: Unit* _caster; - Unit* _cutterCaster; + Unit* _channelTarget; }; class spell_halion_twilight_cutter : public SpellScriptLoader @@ -1647,13 +1647,10 @@ class spell_halion_twilight_cutter : public SpellScriptLoader return; Unit* caster = GetCaster(); - if (Aura* cutter = caster->GetAura(SPELL_TWILIGHT_CUTTER)) + if (Unit* channelTarget = ObjectAccessor::GetUnit(*caster, caster->GetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT))) { - if (Unit* cutterCaster = cutter->GetCaster()) - { - unitList.remove_if(TwilightCutterSelector(caster, cutterCaster)); - return; - } + unitList.remove_if(TwilightCutterSelector(caster, channelTarget)); + return; } // In case cutter caster werent found for some reason diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp index 364b777c435..20b7d39815f 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp @@ -69,8 +69,7 @@ enum Events EVENT_CHILLING_WAVE = 2, EVENT_DEEP_FREEZE = 3, EVENT_FORGE_JUMP = 4, - EVENT_FORGING = 5, - EVENT_RESUME_ATTACK = 6 + EVENT_RESUME_ATTACK = 5 }; Position const northForgePos = { 722.5643f, -234.1615f, 527.182f, 2.16421f }; @@ -210,9 +209,9 @@ class boss_garfrost : public CreatureScript case EVENT_FORGE_JUMP: me->AttackStop(); if (events.IsInPhase(PHASE_TWO)) - me->GetMotionMaster()->MoveJump(northForgePos, 25.0f, 15.0f); + me->GetMotionMaster()->MoveJump(northForgePos, 25.0f, 15.0f, POINT_FORGE); else if (events.IsInPhase(PHASE_THREE)) - me->GetMotionMaster()->MoveJump(southForgePos, 25.0f, 15.0f); + me->GetMotionMaster()->MoveJump(southForgePos, 25.0f, 15.0f, POINT_FORGE); break; case EVENT_RESUME_ATTACK: if (events.IsInPhase(PHASE_TWO)) diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h index b393f783970..e7a3b069ce3 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h @@ -15,11 +15,8 @@ * with this program. If not, see . */ -#ifndef DEF_PIT_OF_SARON_H -#define DEF_PIT_OF_SARON_H - -#include "Map.h" -#include "Creature.h" +#ifndef PIT_OF_SARON_H_ +#define PIT_OF_SARON_H_ #define PoSScriptName "instance_pit_of_saron" @@ -104,4 +101,4 @@ AI* GetPitOfSaronAI(Creature* creature) return GetInstanceAI(creature, PoSScriptName); } -#endif +#endif // PIT_OF_SARON_H_ diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp index c45d3704d5d..394fbc84253 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp @@ -21,10 +21,10 @@ DoorData const doorData[] = { - { GO_VOLKHAN_DOOR, DATA_VOLKHAN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_IONAR_DOOR, DATA_IONAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_LOKEN_DOOR, DATA_LOKEN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_VOLKHAN_DOOR, DATA_VOLKHAN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, + { GO_IONAR_DOOR, DATA_IONAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, + { GO_LOKEN_DOOR, DATA_LOKEN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, + { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END }; class instance_halls_of_lightning : public InstanceMapScript diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp index 2a899d26d5a..1268207388c 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp @@ -23,8 +23,8 @@ DoorData const doorData[] = { - { GO_SJONNIR_DOOR, DATA_BRANN_EVENT, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_SJONNIR_DOOR, DATA_BRANN_EVENT, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, + { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END }; class instance_halls_of_stone : public InstanceMapScript -- cgit v1.2.3 From 625e47e9d32131ceab2982b7eafbeb6726b5c413 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Wed, 11 Sep 2013 20:00:29 +0200 Subject: Scripts/Murmur: Remove unused field Remove unused class field. --- src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp index 5e2e26b578a..38c14292289 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp @@ -248,7 +248,6 @@ class ThunderingStormCheck private: WorldObject const* _source; - float _dist; }; // 39365 - Thundering Storm -- cgit v1.2.3 From dfc8a092a6a81b9b11158e0efb349f5b79de092d Mon Sep 17 00:00:00 2001 From: jackpoz Date: Wed, 11 Sep 2013 20:31:50 +0200 Subject: Scripts/Commands: Retrieve Creature template in HandlePetCreateCommand from Creature itself CreatureTemplate can be retrieved directly from the Creature itself instead of using ObjectMgr::GetCreatureTemplate(id) . --- src/server/scripts/Commands/cs_pet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Commands/cs_pet.cpp b/src/server/scripts/Commands/cs_pet.cpp index 237b25634c1..315cf06e995 100644 --- a/src/server/scripts/Commands/cs_pet.cpp +++ b/src/server/scripts/Commands/cs_pet.cpp @@ -56,7 +56,7 @@ public: return false; } - CreatureTemplate const* creatrueTemplate = sObjectMgr->GetCreatureTemplate(creatureTarget->GetEntry()); + CreatureTemplate const* creatrueTemplate = creatureTarget->GetCreatureTemplate(); // Creatures with family 0 crashes the server if (!creatrueTemplate->family) { -- cgit v1.2.3 From 3861ba5a2515f0263b927e590cd6ae3b55dbd734 Mon Sep 17 00:00:00 2001 From: Ascathor Date: Wed, 11 Sep 2013 20:54:04 +0200 Subject: Core/Commands: Fixing some problems with .account email --- src/server/scripts/Commands/cs_account.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Commands/cs_account.cpp b/src/server/scripts/Commands/cs_account.cpp index ada26e69c14..c48eba50f72 100644 --- a/src/server/scripts/Commands/cs_account.cpp +++ b/src/server/scripts/Commands/cs_account.cpp @@ -362,9 +362,9 @@ public: return false; } - char* oldEmail = strtok(NULL, " "); + char* oldEmail = strtok((char*)args, " "); char* password = strtok(NULL, " "); - char* email = strtok((char*)args, " "); + char* email = strtok(NULL, " "); char* emailConfirmation = strtok(NULL, " "); if (!oldEmail || !password || !email || !emailConfirmation) @@ -467,6 +467,7 @@ public: handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), handler->HasPermission(RBAC_PERM_EMAIL_CONFIRM_FOR_PASS_CHANGE) ? "Yes" : "No"); + return false; } if (!AccountMgr::CheckPassword(handler->GetSession()->GetAccountId(), std::string(oldPassword))) @@ -488,6 +489,7 @@ public: handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), emailConfirmation); + return false; } if (strcmp(newPassword, passwordConfirmation) != 0) -- cgit v1.2.3