aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dep/g3dlite/source/Log.cpp14
-rw-r--r--sql/updates/world/2011_12_13_00_world_misc.sql2
-rw-r--r--sql/updates/world/2011_12_13_01_world_achievement_criteria_data.sql2
-rw-r--r--sql/updates/world/2011_12_13_02_creature_template_addon.sql2
-rw-r--r--sql/updates/world/2011_12_14_01_world_gameobject_template.sql2
-rw-r--r--sql/updates/world/2011_12_16_00_world_creature_template.sql2
-rw-r--r--sql/updates/world/2011_12_16_00_world_spell_bonus_data.sql2
-rw-r--r--sql/updates/world/2011_12_19_02_world_achievement_criteria_data.sql2
-rw-r--r--sql/updates/world/2011_12_24_00_world_misc.sql2
-rw-r--r--sql/updates/world/2011_12_25_00_world_areatrigger_scriptnames.sql2
-rw-r--r--sql/updates/world/2011_12_25_00_world_spell_script_names.sql2
-rw-r--r--sql/updates/world/2011_12_25_02_world_areatrigger_scriptnames.sql2
-rw-r--r--sql/updates/world/2011_12_25_03_world_misc.sql3
-rw-r--r--sql/updates/world/2011_12_25_03_world_sai.sql2
-rw-r--r--sql/updates/world/2011_12_26_00_world_sai.sql44
-rw-r--r--sql/updates/world/2011_12_26_01_world_sai.sql39
-rw-r--r--sql/updates/world/2011_12_26_02_world_sai.sql58
-rw-r--r--sql/updates/world/2011_12_26_03_world_sai.sql25
-rw-r--r--sql/updates/world/2011_12_26_04_world_sai.sql28
-rw-r--r--sql/updates/world/2011_12_26_05_world_sai.sql25
-rw-r--r--sql/updates/world/2011_12_26_06_world_sai.sql27
-rw-r--r--sql/updates/world/2011_12_26_07_world_sai.sql18
-rw-r--r--sql/updates/world/2011_12_26_08_world_sai.sql19
-rw-r--r--src/server/authserver/Authentication/AuthCodes.cpp17
-rwxr-xr-xsrc/server/game/Accounts/AccountMgr.cpp19
-rwxr-xr-xsrc/server/game/Achievements/AchievementMgr.cpp26
-rwxr-xr-xsrc/server/game/Addons/AddonMgr.cpp9
-rwxr-xr-xsrc/server/game/Chat/Chat.h12
-rwxr-xr-xsrc/server/game/Chat/Commands/Level2.cpp126
-rwxr-xr-xsrc/server/game/Chat/Commands/Level3.cpp66
-rwxr-xr-xsrc/server/game/Entities/Creature/CreatureGroups.cpp23
-rwxr-xr-xsrc/server/game/Entities/GameObject/GameObject.cpp14
-rwxr-xr-xsrc/server/game/Entities/Object/Object.cpp2
-rwxr-xr-xsrc/server/game/Entities/Pet/Pet.cpp27
-rwxr-xr-xsrc/server/game/Entities/Pet/Pet.h2
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp163
-rwxr-xr-xsrc/server/game/Entities/Player/Player.h4
-rwxr-xr-xsrc/server/game/Groups/Group.cpp180
-rwxr-xr-xsrc/server/game/Instances/InstanceSaveMgr.cpp21
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/MiscHandler.cpp9
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/NPCHandler.cpp18
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/PetitionsHandler.cpp85
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/SpellHandler.cpp47
-rwxr-xr-xsrc/server/game/Server/WorldSession.cpp8
-rwxr-xr-xsrc/server/game/Server/WorldSession.h2
-rwxr-xr-xsrc/server/game/Server/WorldSocket.cpp21
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp2
-rwxr-xr-xsrc/server/game/Tickets/TicketMgr.cpp5
-rwxr-xr-xsrc/server/game/World/World.cpp9
-rw-r--r--src/server/scripts/Commands/cs_account.cpp35
-rw-r--r--src/server/scripts/EasternKingdoms/BlackwingLair/boss_flamegor.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp32
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/eversong_woods.cpp6
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp10
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp8
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp6
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp2
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp20
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp12
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp14
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp22
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp26
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp8
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp14
-rw-r--r--src/server/scripts/Kalimdor/azuremyst_isle.cpp4
-rw-r--r--src/server/scripts/Kalimdor/boss_azuregos.cpp16
-rw-r--r--src/server/scripts/Kalimdor/desolace.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_noth.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp30
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp16
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp12
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp14
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp10
-rw-r--r--src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp8
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp8
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp4
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp4
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp6
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_illidan.cpp24
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp6
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp4
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp8
-rw-r--r--src/server/scripts/Outland/BlackTemple/illidari_council.cpp14
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp8
-rw-r--r--src/server/scripts/Outland/GruulsLair/boss_gruul.cpp2
-rw-r--r--src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp10
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp14
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp4
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp14
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp22
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp8
-rw-r--r--src/server/scripts/Outland/blades_edge_mountains.cpp25
-rw-r--r--src/server/scripts/World/areatrigger_scripts.cpp6
-rw-r--r--src/server/scripts/World/npcs_special.cpp10
-rwxr-xr-xsrc/server/shared/Database/Implementation/CharacterDatabase.cpp34
-rwxr-xr-xsrc/server/shared/Database/Implementation/CharacterDatabase.h34
-rwxr-xr-xsrc/server/shared/Database/Implementation/LoginDatabase.cpp7
-rwxr-xr-xsrc/server/shared/Database/Implementation/LoginDatabase.h7
-rwxr-xr-xsrc/server/shared/Database/Implementation/WorldDatabase.cpp6
-rwxr-xr-xsrc/server/shared/Database/Implementation/WorldDatabase.h2
-rwxr-xr-xsrc/server/shared/Logging/Log.cpp14
132 files changed, 1402 insertions, 665 deletions
diff --git a/dep/g3dlite/source/Log.cpp b/dep/g3dlite/source/Log.cpp
index f437351cfbd..d44d88d0242 100644
--- a/dep/g3dlite/source/Log.cpp
+++ b/dep/g3dlite/source/Log.cpp
@@ -23,23 +23,23 @@
namespace G3D {
void logPrintf(const char* fmt, ...) {
- va_list arg_list;
- va_start(arg_list, fmt);
+ va_list arg_list;
+ va_start(arg_list, fmt);
Log::common()->vprintf(fmt, arg_list);
va_end(arg_list);
}
void logLazyPrintf(const char* fmt, ...) {
- va_list arg_list;
- va_start(arg_list, fmt);
+ va_list arg_list;
+ va_start(arg_list, fmt);
Log::common()->lazyvprintf(fmt, arg_list);
va_end(arg_list);
}
Log* Log::commonLog = NULL;
-Log::Log(const std::string& filename, int stripFromStackBottom) :
+Log::Log(const std::string& filename, int stripFromStackBottom) :
stripFromStackBottom(stripFromStackBottom) {
this->filename = filename;
@@ -50,7 +50,7 @@ Log::Log(const std::string& filename, int stripFromStackBottom) :
std::string drive, base, ext;
Array<std::string> path;
parseFilename(filename, drive, path, base, ext);
- std::string logName = base + ((ext != "") ? ("." + ext) : "");
+ std::string logName = base + ((ext != "") ? ("." + ext) : "");
// Write time is greater than 1ms. This may be a network drive.... try another file.
#ifdef G3D_WIN32
@@ -80,7 +80,7 @@ Log::Log(const std::string& filename, int stripFromStackBottom) :
Log::~Log() {
section("Shutdown");
println("Closing log file");
-
+
// Make sure we don't leave a dangling pointer
if (Log::commonLog == this) {
Log::commonLog = NULL;
diff --git a/sql/updates/world/2011_12_13_00_world_misc.sql b/sql/updates/world/2011_12_13_00_world_misc.sql
index 48848c368f1..13958e75761 100644
--- a/sql/updates/world/2011_12_13_00_world_misc.sql
+++ b/sql/updates/world/2011_12_13_00_world_misc.sql
@@ -3,4 +3,4 @@ INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`pr
(28012,0,0,'The trickster Mage-Lord Urom protects the third ring. He will appear alone and defenseless, but do not be fooled by appearences! Urom is a powerful conjurer who commands a menagerie of Phantasmal creatures. Seek him out above.',12,0,0,0,0,0,''),
(28012,1,1,'Your greatest challenge lies ahead. Ley-Guardian Eregos is a Blue dragon of immense power. You will find him flying above the uppermost ring.',12,0,0,0,0,0,'');
-UPDATE `creature_template` SET `ScriptName`='npc_image_belgaristrasz' WHERE `entry`=28012; \ No newline at end of file
+UPDATE `creature_template` SET `ScriptName`='npc_image_belgaristrasz' WHERE `entry`=28012;
diff --git a/sql/updates/world/2011_12_13_01_world_achievement_criteria_data.sql b/sql/updates/world/2011_12_13_01_world_achievement_criteria_data.sql
index 9f3f22d7792..89bbfc7126d 100644
--- a/sql/updates/world/2011_12_13_01_world_achievement_criteria_data.sql
+++ b/sql/updates/world/2011_12_13_01_world_achievement_criteria_data.sql
@@ -9,4 +9,4 @@ INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,
(7178,5,49346,1,''), -- Emerald Drake
(7178,12,1,0, ''), -- hc mode only
(7179,5,49464,1,''), -- Ruby Drake
-(7179,12,1,0, ''); -- hc mode only \ No newline at end of file
+(7179,12,1,0, ''); -- hc mode only
diff --git a/sql/updates/world/2011_12_13_02_creature_template_addon.sql b/sql/updates/world/2011_12_13_02_creature_template_addon.sql
index 2e7280927bf..f1dc473bdd7 100644
--- a/sql/updates/world/2011_12_13_02_creature_template_addon.sql
+++ b/sql/updates/world/2011_12_13_02_creature_template_addon.sql
@@ -1,2 +1,2 @@
-- Fix speed of oculus drakes
-UPDATE `creature_template_addon` SET `auras`='50325' WHERE `entry` IN (27755,27692,27756); \ No newline at end of file
+UPDATE `creature_template_addon` SET `auras`='50325' WHERE `entry` IN (27755,27692,27756);
diff --git a/sql/updates/world/2011_12_14_01_world_gameobject_template.sql b/sql/updates/world/2011_12_14_01_world_gameobject_template.sql
index 12729afd6b8..52c04703acc 100644
--- a/sql/updates/world/2011_12_14_01_world_gameobject_template.sql
+++ b/sql/updates/world/2011_12_14_01_world_gameobject_template.sql
@@ -1 +1 @@
-UPDATE `gameobject_template` SET `scriptName` = 'go_ethereal_teleport_pad' WHERE `entry` = 184073; -- Update Ethereal Teleport Pad scriptname \ No newline at end of file
+UPDATE `gameobject_template` SET `scriptName` = 'go_ethereal_teleport_pad' WHERE `entry` = 184073; -- Update Ethereal Teleport Pad scriptname
diff --git a/sql/updates/world/2011_12_16_00_world_creature_template.sql b/sql/updates/world/2011_12_16_00_world_creature_template.sql
index 156fd431359..3ff9d630c54 100644
--- a/sql/updates/world/2011_12_16_00_world_creature_template.sql
+++ b/sql/updates/world/2011_12_16_00_world_creature_template.sql
@@ -1,4 +1,4 @@
-- Greater Fire Elemental script
UPDATE `creature_template` SET `ScriptName`='npc_fire_elemental' WHERE `entry`=15438;
-- Greater Earth Elemental script
-UPDATE `creature_template` SET `ScriptName`='npc_earth_elemental' WHERE `entry`=15352; \ No newline at end of file
+UPDATE `creature_template` SET `ScriptName`='npc_earth_elemental' WHERE `entry`=15352;
diff --git a/sql/updates/world/2011_12_16_00_world_spell_bonus_data.sql b/sql/updates/world/2011_12_16_00_world_spell_bonus_data.sql
index 3250bda4fdb..5864b9ac042 100644
--- a/sql/updates/world/2011_12_16_00_world_spell_bonus_data.sql
+++ b/sql/updates/world/2011_12_16_00_world_spell_bonus_data.sql
@@ -2,4 +2,4 @@
DELETE FROM `spell_bonus_data` WHERE `entry` IN (13376,57984);
INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`,`ap_bonus`, `ap_dot_bonus`, `comments`) VALUES
(13376,0.032,-1,-1,-1,'Greater Fire Elemental - Fire Shield'),
-(57984,0.4289,-1,-1,-1,'Greater Fire Elemental - Fire Blast'); \ No newline at end of file
+(57984,0.4289,-1,-1,-1,'Greater Fire Elemental - Fire Blast');
diff --git a/sql/updates/world/2011_12_19_02_world_achievement_criteria_data.sql b/sql/updates/world/2011_12_19_02_world_achievement_criteria_data.sql
index f5df93c3bd1..af7b0a9361b 100644
--- a/sql/updates/world/2011_12_19_02_world_achievement_criteria_data.sql
+++ b/sql/updates/world/2011_12_19_02_world_achievement_criteria_data.sql
@@ -8,4 +8,4 @@ INSERT INTO `achievement_criteria_data` (`criteria_id`, `type`, `value1`, `value
-- requires Holiday Winter Veil
(3936, 16, 141, 0, ''),
(3937, 16, 141, 0, ''),
-(3938, 16, 141, 0, ''); \ No newline at end of file
+(3938, 16, 141, 0, '');
diff --git a/sql/updates/world/2011_12_24_00_world_misc.sql b/sql/updates/world/2011_12_24_00_world_misc.sql
index fb5816bb737..5e070d0771e 100644
--- a/sql/updates/world/2011_12_24_00_world_misc.sql
+++ b/sql/updates/world/2011_12_24_00_world_misc.sql
@@ -7,4 +7,4 @@ INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`pr
(22314,0,0,"Woot!",12,0,100,0,0,0,"Captive Child"),
(22314,0,1,"I think those weird bird guys were going to eat us. Gross!",12,0,100,0,0,0,"Captive Child"),
(22314,0,2,"Yay! We're free!",12,0,100,0,0,0,"Captive Child"),
-(22314,0,3,"Gross!",12,0,100,0,0,0,"Captive Child"); \ No newline at end of file
+(22314,0,3,"Gross!",12,0,100,0,0,0,"Captive Child");
diff --git a/sql/updates/world/2011_12_25_00_world_areatrigger_scriptnames.sql b/sql/updates/world/2011_12_25_00_world_areatrigger_scriptnames.sql
index 4a66326ead5..2a16394c7fe 100644
--- a/sql/updates/world/2011_12_25_00_world_areatrigger_scriptnames.sql
+++ b/sql/updates/world/2011_12_25_00_world_areatrigger_scriptnames.sql
@@ -1,3 +1,3 @@
DELETE FROM `areatrigger_scripts` WHERE `entry`=4752;
INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES
-(4752,'at_nats_landing'); \ No newline at end of file
+(4752,'at_nats_landing');
diff --git a/sql/updates/world/2011_12_25_00_world_spell_script_names.sql b/sql/updates/world/2011_12_25_00_world_spell_script_names.sql
index a4bf9aef5dc..dc42056f84c 100644
--- a/sql/updates/world/2011_12_25_00_world_spell_script_names.sql
+++ b/sql/updates/world/2011_12_25_00_world_spell_script_names.sql
@@ -1,4 +1,4 @@
UPDATE `item_template` SET `ScriptName`='' WHERE `entry`=23654;
DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_q9452_cast_net';
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
-(29866,'spell_q9452_cast_net'); \ No newline at end of file
+(29866,'spell_q9452_cast_net');
diff --git a/sql/updates/world/2011_12_25_02_world_areatrigger_scriptnames.sql b/sql/updates/world/2011_12_25_02_world_areatrigger_scriptnames.sql
index 19c304dcfe9..78a1fbc98c9 100644
--- a/sql/updates/world/2011_12_25_02_world_areatrigger_scriptnames.sql
+++ b/sql/updates/world/2011_12_25_02_world_areatrigger_scriptnames.sql
@@ -2,4 +2,4 @@
DELETE FROM `areatrigger_scripts` WHERE `entry` IN (4829,4820);
INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES
(4829,'at_brewfest'), -- Durotar
-(4820,'at_brewfest'); -- Dun Morogh \ No newline at end of file
+(4820,'at_brewfest'); -- Dun Morogh
diff --git a/sql/updates/world/2011_12_25_03_world_misc.sql b/sql/updates/world/2011_12_25_03_world_misc.sql
new file mode 100644
index 00000000000..a8967354a3d
--- /dev/null
+++ b/sql/updates/world/2011_12_25_03_world_misc.sql
@@ -0,0 +1,3 @@
+-- The Thunderspike
+UPDATE `gameobject_template` SET `AIName`='',`ScriptName`='go_thunderspike' WHERE `entry`=184729;
+DELETE FROM `event_scripts` WHERE `id`=13685;
diff --git a/sql/updates/world/2011_12_25_03_world_sai.sql b/sql/updates/world/2011_12_25_03_world_sai.sql
index cd45a3fad81..e53c9f72e38 100644
--- a/sql/updates/world/2011_12_25_03_world_sai.sql
+++ b/sql/updates/world/2011_12_25_03_world_sai.sql
@@ -49,4 +49,4 @@ INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z
(@ENTRY,12,4716.9,169.528,53.5005,"Volcor"),
(@ENTRY,13,4725.44,180.07,54.7346,"Volcor"),
(@ENTRY,14,4734.01,194.431,55.3888,"Volcor"),
-(@ENTRY,15,4747.92,209.436,53.1076,"Volcor"); \ No newline at end of file
+(@ENTRY,15,4747.92,209.436,53.1076,"Volcor");
diff --git a/sql/updates/world/2011_12_26_00_world_sai.sql b/sql/updates/world/2011_12_26_00_world_sai.sql
new file mode 100644
index 00000000000..616ced60147
--- /dev/null
+++ b/sql/updates/world/2011_12_26_00_world_sai.sql
@@ -0,0 +1,44 @@
+-- [Q] [A/H] Therylune's Escape
+-- Therylune SAI
+SET @ENTRY := 3584;
+SET @QUEST := 945;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,19,0,100,0,@QUEST,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Therylune - On Quest Accept - Say Line 0"),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,53,0,@ENTRY,0,0,0,2,1,0,0,0,0,0,0,0,"Therylune - On Quest Accept - Start WP"),
+(@ENTRY,0,2,3,40,0,100,0,20,@ENTRY,0,0,1,1,0,0,0,0,0,7,0,0,0,0,0,0,0,"Therylune - On WP 20 - Say Line 1"),
+(@ENTRY,0,3,0,61,0,100,0,0,0,0,0,15,@QUEST,0,0,0,0,7,0,0,0,0,0,0,0,0,"Therylune - On WP 20 - Quest Credit"),
+(@ENTRY,0,4,0,40,0,100,0,21,@ENTRY,0,0,41,5000,0,0,0,0,1,0,0,0,0,0,0,0,0,"Therylune - On WP 21 - Forced Despawn");
+-- Texts
+DELETE FROM `db_script_string` WHERE `entry` IN (2000000017,2000000018);
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Ok, let's go!",12,0,100,0,0,0,"Therylune"),
+(@ENTRY,1,0,"I can make it the rest of the way, $N. Thanks!",12,0,100,0,0,0,"Therylune");
+-- Waypoints
+DELETE FROM `waypoints` WHERE `entry`=@ENTRY;
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@ENTRY,1,4520.4,420.235,33.5284,"Therylune"),
+(@ENTRY,2,4512.26,408.881,32.9308,"Therylune"),
+(@ENTRY,3,4507.94,396.47,32.9476,"Therylune"),
+(@ENTRY,4,4507.53,383.781,32.995,"Therylune"),
+(@ENTRY,5,4512.1,374.02,33.166,"Therylune"),
+(@ENTRY,6,4519.75,373.241,33.1574,"Therylune"),
+(@ENTRY,7,4592.41,369.127,31.4893,"Therylune"),
+(@ENTRY,8,4598.55,364.801,31.4947,"Therylune"),
+(@ENTRY,9,4602.76,357.649,32.9265,"Therylune"),
+(@ENTRY,10,4597.88,352.629,34.0317,"Therylune"),
+(@ENTRY,11,4590.23,350.9,36.2977,"Therylune"),
+(@ENTRY,12,4581.5,348.254,38.3878,"Therylune"),
+(@ENTRY,13,4572.05,348.059,42.3539,"Therylune"),
+(@ENTRY,14,4564.75,344.041,44.2463,"Therylune"),
+(@ENTRY,15,4556.63,341.003,47.6755,"Therylune"),
+(@ENTRY,16,4554.38,334.968,48.8003,"Therylune"),
+(@ENTRY,17,4557.63,329.783,49.9532,"Therylune"),
+(@ENTRY,18,4563.32,316.829,53.2409,"Therylune"),
+(@ENTRY,19,4566.09,303.127,55.0396,"Therylune"),
+(@ENTRY,20,4561.65,295.456,57.0984,"Therylune"),
+(@ENTRY,21,4551.03,293.333,57.1534,"Therylune");
diff --git a/sql/updates/world/2011_12_26_01_world_sai.sql b/sql/updates/world/2011_12_26_01_world_sai.sql
new file mode 100644
index 00000000000..50283820dc8
--- /dev/null
+++ b/sql/updates/world/2011_12_26_01_world_sai.sql
@@ -0,0 +1,39 @@
+-- [Q] [A/H] Enchanted Azsharite Fel Weaponry
+-- [Q] [A/H] Expert Blacksmith!
+-- Galvan the Ancient SAI
+SET @ENTRY := 7802;
+SET @QUEST_ENCHANTED := 3625;
+SET @QUEST_EXPERT_BS := 2765;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id` IN (@QUEST_ENCHANTED,@QUEST_EXPERT_BS);
+UPDATE `creature` SET `position_x`=-12033.400391,`position_y`=-1003.859985,`position_z`=49.779499,`orientation`=3.910880 WHERE `guid`=384 AND `id`=@ENTRY; -- Galvan the Ancient should be at a different position..
+DELETE FROM `creature` WHERE `guid`=1864 AND `id`=684; -- Flying panther in the middle of our event spot..
+DELETE FROM `creature_addon` WHERE `guid`=1864;
+DELETE FROM `quest_start_scripts` WHERE `id` IN (@QUEST_ENCHANTED,@QUEST_EXPERT_BS);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100,@ENTRY*100+1);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST_ENCHANTED,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-12040.5,-1008.7,49.4,3.66,"Galvan the Ancient - On Script - Move To Anvil"),
+(@ENTRY*100,9,1,0,0,0,100,0,4000,4000,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,2,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,3,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,4,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,5,0,0,0,100,0,2000,2000,0,0,69,0,0,0,0,0,0,8,0,0,0,-12040.988281,-1007.649170,49.481323,2.364430,"Galvan the Ancient - On Script - Move To Forge"),
+(@ENTRY*100,9,6,0,0,0,100,0,1000,1000,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,7,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,8,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,9,0,0,0,100,0,2000,2000,0,0,15,@QUEST_ENCHANTED,0,0,0,0,0,7,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Quest Credit"),
+(@ENTRY*100,9,10,0,0,0,100,0,5000,5000,0,0,69,0,0,0,0,0,0,8,0,0,0,-12033.400391,-1003.859985,49.779499,3.910880,"Galvan the Ancient - On Script - Move To Homeposition"),
+
+(@ENTRY,0,1,0,19,0,100,0,@QUEST_EXPERT_BS,0,0,0,80,@ENTRY*100+1,0,2,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Quest Accept - Run Script"),
+(@ENTRY*100+1,9,0,0,0,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-12040.5,-1008.7,49.4,3.66,"Galvan the Ancient - On Script - Move To Anvil"),
+(@ENTRY*100+1,9,1,0,0,0,100,0,4000,4000,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100+1,9,2,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100+1,9,3,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100+1,9,4,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100+1,9,5,0,0,0,100,0,2000,2000,0,0,69,0,0,0,0,0,0,8,0,0,0,-12040.988281,-1007.649170,49.481323,2.364430,"Galvan the Ancient - On Script - Move To Forge"),
+(@ENTRY*100+1,9,6,0,0,0,100,0,1000,1000,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100+1,9,7,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100+1,9,8,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100+1,9,9,0,0,0,100,0,2000,2000,0,0,15,@QUEST_EXPERT_BS,0,0,0,0,0,7,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Quest Credit"),
+(@ENTRY*100+1,9,10,0,0,0,100,0,5000,5000,0,0,69,0,0,0,0,0,0,8,0,0,0,-12033.400391,-1003.859985,49.779499,3.910880,"Galvan the Ancient - On Script - Move To Homeposition");
diff --git a/sql/updates/world/2011_12_26_02_world_sai.sql b/sql/updates/world/2011_12_26_02_world_sai.sql
new file mode 100644
index 00000000000..6da23e21875
--- /dev/null
+++ b/sql/updates/world/2011_12_26_02_world_sai.sql
@@ -0,0 +1,58 @@
+-- [Q] [A/H] The Summoning
+-- Bath'rah the Windwatcher SAI
+SET @ENTRY := 6176;
+SET @QUEST := 1713;
+SET @SPELL_SUMMON := 8606;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100,@ENTRY*100+1);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Bath'rah the Windwatcher - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,1000,1000,0,0,53,0,@ENTRY,0,0,0,2,1,0,0,0,0,0,0,0,"Bath'rah the Windwatcher - On Script - Start WP"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Bath'rah the Windwatcher - On Script - Say Line 0"),
+(@ENTRY,0,1,0,0,0,100,0,7,@ENTRY,0,0,80,@ENTRY*100+1,0,2,0,0,0,1,0,0,0,0,0,0,0,"Bath'rah the Windwatcher - On WP 7 - Run Script"),
+(@ENTRY*100+1,9,0,0,0,0,100,0,0,0,0,0,11,@SPELL_SUMMON,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bath'rah the Windwatcher - On Script - Cast Summon Cyclonian"),
+(@ENTRY*100+1,9,1,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bath'rah the Windwatcher - On Script - Say Line 1"),
+(@ENTRY*100+1,9,2,0,0,0,100,0,15000,15000,0,0,53,0,@ENTRY*10,0,0,0,2,1,0,0,0,0,0,0,0,"Bath'rah the Windwatcher - On Script - Start WP");
+-- Waypoints
+DELETE FROM `waypoints` WHERE `entry` IN (@ENTRY,@ENTRY*10);
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@ENTRY,1,253.05,-1459.09,52.09,"Bath'rah the Windwatcher"),
+(@ENTRY,2,256.87,-1440.35,50.09,"Bath'rah the Windwatcher"),
+(@ENTRY,3,273.74,-1433.18,50.29,"Bath'rah the Windwatcher"),
+(@ENTRY,4,297.77,-1436.7,46.96,"Bath'rah the Windwatcher"),
+(@ENTRY,5,329.59,-1442.08,40.31,"Bath'rah the Windwatcher"),
+(@ENTRY,6,332.73,-1455.6,42.24,"Bath'rah the Windwatcher"),
+(@ENTRY,7,323.83,-1468.92,42.24,"Bath'rah the Windwatcher"),
+
+(@ENTRY*10,1,332.73,-1455.6,42.24,"Bath'rah the Windwatcher"),
+(@ENTRY*10,2,329.59,-1442.08,40.31,"Bath'rah the Windwatcher"),
+(@ENTRY*10,3,297.77,-1436.7,46.96,"Bath'rah the Windwatcher"),
+(@ENTRY*10,4,273.74,-1433.18,50.29,"Bath'rah the Windwatcher"),
+(@ENTRY*10,5,256.87,-1440.35,50.09,"Bath'rah the Windwatcher"),
+(@ENTRY*10,6,253.05,-1459.09,52.09,"Bath'rah the Windwatcher"),
+(@ENTRY*10,7,250.84,-1470.58,55.4491,"Bath'rah the Windwatcher");
+-- Texts
+DELETE FROM `db_script_string` WHERE `entry` IN (2000000029,2000000043);
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Follow me, $N. I will soon begin the summoning.",12,0,100,0,0,0,"Bath'rah the Windwatcher"),
+(@ENTRY,1,0,"%s begins a spell of summoning...",41,0,100,0,0,0,"Bath'rah the Windwatcher");
+-- Waypoints
+DELETE FROM `waypoints` WHERE `entry`=@ENTRY;
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@ENTRY,1,253.05,-1459.09,52.09,"Bath'rah the Windwatcher"),
+(@ENTRY,2,256.87,-1440.35,50.09,"Bath'rah the Windwatcher"),
+(@ENTRY,3,273.74,-1433.18,50.29,"Bath'rah the Windwatcher"),
+(@ENTRY,4,297.77,-1436.7,46.96,"Bath'rah the Windwatcher"),
+(@ENTRY,5,329.59,-1442.08,40.31,"Bath'rah the Windwatcher"),
+(@ENTRY,6,332.73,-1455.6,42.24,"Bath'rah the Windwatcher"),
+(@ENTRY,7,323.83,-1468.92,42.24,"Bath'rah the Windwatcher"),
+(@ENTRY,8,332.73,-1455.6,42.24,"Bath'rah the Windwatcher"),
+(@ENTRY,9,329.59,-1442.08,40.31,"Bath'rah the Windwatcher"),
+(@ENTRY,10,297.77,-1436.7,46.96,"Bath'rah the Windwatcher"),
+(@ENTRY,11,273.74,-1433.18,50.29,"Bath'rah the Windwatcher"),
+(@ENTRY,12,256.87,-1440.35,50.09,"Bath'rah the Windwatcher"),
+(@ENTRY,13,253.05,-1459.09,52.09,"Bath'rah the Windwatcher"),
+(@ENTRY,14,250.84,-1470.58,55.4491,"Bath'rah the Windwatcher");
diff --git a/sql/updates/world/2011_12_26_03_world_sai.sql b/sql/updates/world/2011_12_26_03_world_sai.sql
new file mode 100644
index 00000000000..07333e50a91
--- /dev/null
+++ b/sql/updates/world/2011_12_26_03_world_sai.sql
@@ -0,0 +1,25 @@
+-- [Q] [A/H] Freed from the Hive
+-- Zukk'ash Pod SAI
+SET @ENTRY := 164954;
+SET @QUEST := 4265;
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=1;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,1,0,0,19,0,100,0,@QUEST,0,0,0,12,9546,1,25000,0,0,0,8,0,0,0,-5314.81,430.89,11.79,3.46,"Zukk'ash Pod - On Quest Accept - Summon Raschal the Courier");
+-- Raschal the Courier SAI
+SET @ENTRY := 9546;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,54,0,100,0,0,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Raschal the Courier - Just Summoned - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,2000,2000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Raschal the Courier - On Script - Say Line 0"),
+(@ENTRY*100,9,1,0,0,0,100,0,6000,6000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Raschal the Courier - On Script - Say Line 1"),
+(@ENTRY*100,9,2,0,0,0,100,0,8000,8000,0,0,15,@QUEST,0,0,0,0,7,0,0,0,0,0,0,0,0,"Raschal the Courier - On Script - Quest Credit"),
+(@ENTRY*100,9,3,0,0,0,100,0,2000,2000,0,0,41,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Raschal the Courier - On Script - Forced Despawn");
+-- Text
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Oh man, I thought I was dead for sure. Ugh... still dizzy...",12,0,100,0,0,0,"Raschal the Courier"),
+(@ENTRY,1,0,"I can get back to the Stronghold on my own, I think. Now that you bought me some time, I should be able to stealth out of here. Who ever you are... thank you. May Elune bless you always!",12,0,100,0,0,0,"Raschal the Courier");
diff --git a/sql/updates/world/2011_12_26_04_world_sai.sql b/sql/updates/world/2011_12_26_04_world_sai.sql
new file mode 100644
index 00000000000..c508773c51a
--- /dev/null
+++ b/sql/updates/world/2011_12_26_04_world_sai.sql
@@ -0,0 +1,28 @@
+-- [Q] [A] The Touch of Zanzil
+-- Doc Mixilpixil SAI
+SET @ENTRY := 7207;
+SET @QUEST := 2608;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Doc Mixilpixil - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,1000,1000,0,0,5,353,0,0,0,0,0,1,0,0,0,0,0,0,0,"Doc Mixilpixil - On Script - Emote STATE_SPELLKNEELSTART"),
+(@ENTRY*100,9,1,0,0,0,100,0,2000,2000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Doc Mixilpixil - On Script - Say Line 0"),
+(@ENTRY*100,9,2,0,0,0,100,0,3000,3000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Doc Mixilpixil - On Script - Say Line 1"),
+(@ENTRY*100,9,3,0,0,0,100,0,3000,3000,0,0,53,0,@ENTRY,0,0,0,2,1,0,0,0,0,0,0,0,"Doc Mixilpixil - On Script - Start WP"),
+(@ENTRY,0,1,2,40,0,100,0,3,@ENTRY,0,0,41,5000,0,0,0,0,1,0,0,0,0,0,0,0,0,"Doc Mixilpixil - On WP 3 - Make Ready To Despawn"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,15,@QUEST,0,0,0,0,7,0,0,0,0,0,0,0,0,"Doc Mixilpixil - On WP 3 - Quest Credit");
+-- Text
+DELETE FROM `db_script_string` WHERE `entry` IN (2000000020,2000000021);
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"That's interesting...",12,0,100,0,0,0,"Doc Mixilpixil"),
+(@ENTRY,1,0,"I need to consult Noram and Horatio.",12,0,100,0,0,0,"Doc Mixilpixil");
+-- Waypoints
+DELETE FROM `waypoints` WHERE `entry`=@ENTRY;
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@ENTRY,1,-8805.29,338.5,95.09,"Doc Mixilpixil"),
+(@ENTRY,2,-8804.15,325.58,95.09,"Doc Mixilpixil"),
+(@ENTRY,3,-8805.56,331.96,95.09,"Doc Mixilpixil");
diff --git a/sql/updates/world/2011_12_26_05_world_sai.sql b/sql/updates/world/2011_12_26_05_world_sai.sql
new file mode 100644
index 00000000000..0155c3ad39b
--- /dev/null
+++ b/sql/updates/world/2011_12_26_05_world_sai.sql
@@ -0,0 +1,25 @@
+-- [Q] [A/H] The Torch of Retribution
+-- Kalaran Windblade SAI
+SET @ENTRY := 8479;
+SET @QUEST := 3453;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Kalaran Windblade - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,10000,10000,0,0,11,12511,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kalaran Windblade - On Script - Cast Torch Combine"),
+(@ENTRY*100,9,1,0,0,0,100,0,8000,8000,0,0,11,12511,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kalaran Windblade - On Script - Cast Torch Combine"),
+(@ENTRY*100,9,2,0,0,0,100,0,7000,7000,0,0,11,12511,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kalaran Windblade - On Script - Cast Torch Combine"),
+(@ENTRY*100,9,3,0,0,0,100,0,10000,10000,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Kalaran Windblade - On Script - Say Line 0"),
+(@ENTRY*100,9,4,0,0,0,100,0,5000,5000,0,0,11,12511,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kalaran Windblade - On Script - Cast Torch Combine"),
+(@ENTRY*100,9,5,0,0,0,100,0,1000,1000,0,0,70,0,0,0,0,0,0,14,24166,149410,0,0,0,0,0,"Kalaran Windblade - On Script - Respawn Light of Retribution (GO)"),
+(@ENTRY*100,9,6,0,0,0,100,0,2000,2000,0,0,70,0,0,0,0,0,0,14,16762,149047,0,0,0,0,0,"Kalaran Windblade - On Script - Respawn Torch of Retribution (GO)"),
+(@ENTRY*100,9,7,0,0,0,100,0,7000,7000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kalaran Windblade - On Script - Say Line 1"),
+(@ENTRY*100,9,8,0,0,0,100,0,1000,1000,0,0,15,@QUEST,0,0,0,0,0,7,0,0,0,0,0,0,0,"Kalaran Windblade - On Script - Quest Credit");
+-- Text
+DELETE FROM `db_script_string` WHERE `entry` IN (2000000019,2000000044);
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Be patient, $N. The torch is almost done.",12,0,100,0,0,0,"Kalaran Windblade"),
+(@ENTRY,1,0,"It is done...",12,0,100,0,0,0,"Kalaran Windblade");
diff --git a/sql/updates/world/2011_12_26_06_world_sai.sql b/sql/updates/world/2011_12_26_06_world_sai.sql
new file mode 100644
index 00000000000..6335bd9f475
--- /dev/null
+++ b/sql/updates/world/2011_12_26_06_world_sai.sql
@@ -0,0 +1,27 @@
+-- [Q] [A/H] Did You Lose This?
+-- Trenton Lighthammer SAI
+SET @ENTRY := 7804;
+SET @QUEST := 3321;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `quest_end_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,20,0,100,0,@QUEST,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Trenton Lighthammer - On Quest Complete - Say Line 0"),
+(@ENTRY,0,1,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,1000,1000,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,1,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,2,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,3,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,4,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,5,0,0,0,100,0,2000,2000,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,2.842743,"Trenton Lighthammer - On Script - Face Forge"),
+(@ENTRY*100,9,6,0,0,0,100,0,1000,1000,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,7,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,8,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,9,0,0,0,100,0,2000,2000,0,0,15,@QUEST,0,0,0,0,0,7,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Quest Credit");
+-- Texts
+DELETE FROM `db_script_string` WHERE `entry`=2000000076;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Hear ye, denizens of Tanaris! Let it be known $N is an exalted member of the Mithril Order. A blacksmith of honor, dedication, and infinite patience. Three cheers for $N!",14,0,100,0,0,0,"Trenton Lighthammer");
diff --git a/sql/updates/world/2011_12_26_07_world_sai.sql b/sql/updates/world/2011_12_26_07_world_sai.sql
new file mode 100644
index 00000000000..ffe55b0e5f9
--- /dev/null
+++ b/sql/updates/world/2011_12_26_07_world_sai.sql
@@ -0,0 +1,18 @@
+-- [Q] [A/H] Scarlet Armies Approach...
+-- Orbaz Bloodbane SAI
+SET @ENTRY := 28914;
+SET @QUEST := 12757;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Orbaz Bloodbane - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Orbaz Bloodbane - On Script - Say Line 0"),
+(@ENTRY*100,9,1,0,0,0,100,0,3000,3000,0,0,11,53097,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orbaz Bloodbane - On Script - Cast Portal: Acherus");
+-- Text
+DELETE FROM `waypoint_scripts` WHERE `id`=491;
+DELETE FROM `db_script_string` WHERE `entry`=2000000008;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Make haste, $N. Use the portal!",12,0,100,25,0,0,"Orbaz Bloodlane");
diff --git a/sql/updates/world/2011_12_26_08_world_sai.sql b/sql/updates/world/2011_12_26_08_world_sai.sql
new file mode 100644
index 00000000000..6633e97f2b4
--- /dev/null
+++ b/sql/updates/world/2011_12_26_08_world_sai.sql
@@ -0,0 +1,19 @@
+-- [Q] [H] Hinott's Assistance
+-- Serge Hinott SAI
+SET @ENTRY := 2391;
+SET @QUEST := 2480;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Serge Hinott - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,2000,2000,0,0,69,0,0,0,0,0,0,8,0,0,0,-4.33,-900.68,57.54,1.54,"Serge Hinott - On Script - Move To Pos"),
+(@ENTRY*100,9,1,0,0,0,100,0,18000,18000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Serge Hinott - On Script - Say Line 0"),
+(@ENTRY*100,9,2,0,0,0,100,0,10000,10000,0,0,15,@QUEST,0,0,0,0,0,7,0,0,0,0,0,0,0,"Serge Hinott - On Script - Quest Credit"),
+(@ENTRY*100,9,3,0,0,0,100,0,1000,1000,0,0,69,0,0,0,0,0,0,8,0,0,0,-4.66,-903.92,57.54,3.48,"Serge Hinott - On Script - Move To Pos");
+-- Text
+DELETE FROM `db_script_string` WHERE `entry`=2000000026;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Whoops!",12,0,100,113,0,0,"Serge Hinott");
diff --git a/src/server/authserver/Authentication/AuthCodes.cpp b/src/server/authserver/Authentication/AuthCodes.cpp
index 59969670921..cd8401565ba 100644
--- a/src/server/authserver/Authentication/AuthCodes.cpp
+++ b/src/server/authserver/Authentication/AuthCodes.cpp
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
#include "AuthCodes.h"
namespace AuthHelper
diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp
index 9ae80ca2919..6c3dd69c0da 100755
--- a/src/server/game/Accounts/AccountMgr.cpp
+++ b/src/server/game/Accounts/AccountMgr.cpp
@@ -112,11 +112,13 @@ AccountOpResult ChangeUsername(uint32 accountId, std::string newUsername, std::s
normalizeString(newUsername);
normalizeString(newPassword);
- std::string safeNewUsername = newUsername;
- LoginDatabase.EscapeString(safeNewUsername);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPDATE_USERNAME);
- LoginDatabase.PExecute("UPDATE account SET v='0', s='0', username='%s', sha_pass_hash='%s' WHERE id='%d'", safeNewUsername.c_str(),
- CalculateShaPassHash(newUsername, newPassword).c_str(), accountId);
+ stmt->setString(0, newUsername);
+ stmt->setString(1, CalculateShaPassHash(newUsername, newPassword));
+ stmt->setUInt32(2, accountId);
+
+ LoginDatabase.Execute(stmt);
return AOR_OK;
}
@@ -134,9 +136,12 @@ AccountOpResult ChangePassword(uint32 accountId, std::string newPassword)
normalizeString(username);
normalizeString(newPassword);
- // also reset s and v to force update at next realmd login
- LoginDatabase.PExecute("UPDATE account SET v='0', s='0', sha_pass_hash='%s' WHERE id='%d'",
- CalculateShaPassHash(username, newPassword).c_str(), accountId);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPDATE_PASSWORD);
+
+ stmt->setString(0, CalculateShaPassHash(username, newPassword));
+ stmt->setUInt32(1, accountId);
+
+ LoginDatabase.Execute(stmt);
return AOR_OK;
}
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index d22f4b94caa..030837b2649 100755
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -619,7 +619,13 @@ void AchievementMgr::LoadFromDB(PreparedQueryResult achievementResult, PreparedQ
{
// we will remove not existed criteria for all characters
sLog->outError("Non-existing achievement criteria %u data removed from table `character_achievement_progress`.", id);
- CharacterDatabase.PExecute("DELETE FROM character_achievement_progress WHERE criteria = %u", id);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_ACHIEV_PROGRESS_CRITERIA);
+
+ stmt->setUInt16(0, uint16(id));
+
+ CharacterDatabase.Execute(stmt);
+
continue;
}
@@ -2375,17 +2381,23 @@ void AchievementGlobalMgr::LoadCompletedAchievements()
{
Field* fields = result->Fetch();
- uint32 achievement_id = fields[0].GetUInt32();
- const AchievementEntry* achievement = sAchievementStore.LookupEntry(achievement_id);
+ uint32 achievementId = fields[0].GetUInt32();
+ const AchievementEntry* achievement = sAchievementStore.LookupEntry(achievementId);
if (!achievement)
{
- // we will remove not existed achievement for all characters
- sLog->outError("Non-existing achievement %u data removed from table `character_achievement`.", achievement_id);
- CharacterDatabase.PExecute("DELETE FROM character_achievement WHERE achievement = %u", achievement_id);
+ // Remove non existent achievements from all characters
+ sLog->outError("Non-existing achievement %u data removed from table `character_achievement`.", achievementId);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_ACHIEVMENT);
+
+ stmt->setUInt16(0, uint16(achievementId));
+
+ CharacterDatabase.Execute(stmt);
+
continue;
}
else if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL))
- m_allCompletedAchievements.insert(achievement_id);
+ m_allCompletedAchievements.insert(achievementId);
} while (result->NextRow());
sLog->outString(">> Loaded %lu completed achievements in %u ms", (unsigned long)m_allCompletedAchievements.size(), GetMSTimeDiffToNow(oldMSTime));
diff --git a/src/server/game/Addons/AddonMgr.cpp b/src/server/game/Addons/AddonMgr.cpp
index 9d5bdd159f7..ff6d16bef4d 100755
--- a/src/server/game/Addons/AddonMgr.cpp
+++ b/src/server/game/Addons/AddonMgr.cpp
@@ -70,8 +70,13 @@ void LoadFromDB()
void SaveAddon(AddonInfo const& addon)
{
std::string name = addon.Name;
- CharacterDatabase.EscapeString(name);
- CharacterDatabase.PExecute("INSERT INTO addons (name, crc) VALUES ('%s', %u)", name.c_str(), addon.CRC);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_ADDON);
+
+ stmt->setString(0, name);
+ stmt->setUInt32(1, addon.CRC);
+
+ CharacterDatabase.Execute(stmt);
m_knownAddons.push_back(SavedAddon(addon.Name, addon.CRC));
}
diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h
index 24652fcc6d5..d9190265bbb 100755
--- a/src/server/game/Chat/Chat.h
+++ b/src/server/game/Chat/Chat.h
@@ -154,8 +154,8 @@ class ChatHandler
bool HandleCastTargetCommand(const char *args);
bool HandleCastDestCommand(const char *args);
- bool HandleCharacterCustomizeCommand(const char * args);
- bool HandleCharacterChangeFactionCommand(const char * args);
+ bool HandleCharacterCustomizeCommand(const char* args);
+ bool HandleCharacterChangeFactionCommand(const char* args);
bool HandleCharacterChangeRaceCommand(const char * args);
bool HandleCharacterDeletedDeleteCommand(const char* args);
bool HandleCharacterDeletedListCommand(const char* args);
@@ -163,7 +163,7 @@ class ChatHandler
bool HandleCharacterDeletedOldCommand(const char* args);
bool HandleCharacterEraseCommand(const char* args);
bool HandleCharacterLevelCommand(const char* args);
- bool HandleCharacterRenameCommand(const char * args);
+ bool HandleCharacterRenameCommand(const char* args);
bool HandleCharacterReputationCommand(const char* args);
bool HandleCharacterTitlesCommand(const char* args);
@@ -215,9 +215,9 @@ class ChatHandler
bool HandleResetAllCommand(const char * args);
bool HandleResetHonorCommand(const char * args);
bool HandleResetLevelCommand(const char * args);
- bool HandleResetSpellsCommand(const char * args);
+ bool HandleResetSpellsCommand(const char* args);
bool HandleResetStatsCommand(const char * args);
- bool HandleResetTalentsCommand(const char * args);
+ bool HandleResetTalentsCommand(const char* args);
bool HandleSendItemsCommand(const char* args);
bool HandleSendMailCommand(const char* args);
@@ -355,7 +355,7 @@ class ChatHandler
bool HandleBanHelper(BanMode mode, char const* args);
bool HandleBanInfoHelper(uint32 accountid, char const* accountname);
bool HandleUnBanHelper(BanMode mode, char const* args);
- void HandleCharacterLevel(Player* player, uint64 player_guid, uint32 oldlevel, uint32 newlevel);
+ void HandleCharacterLevel(Player* player, uint64 playerGuid, uint32 oldLevel, uint32 newLevel);
void HandleLearnSkillRecipesHelper(Player* player, uint32 skill_id);
// Stores informations about a deleted character
diff --git a/src/server/game/Chat/Commands/Level2.cpp b/src/server/game/Chat/Commands/Level2.cpp
index 41bc564759c..5411b1364c0 100755
--- a/src/server/game/Chat/Commands/Level2.cpp
+++ b/src/server/game/Chat/Commands/Level2.cpp
@@ -63,11 +63,11 @@ bool ChatHandler::HandleMuteCommand(const char* args)
if (!extractPlayerTarget(nameStr, &target, &target_guid, &target_name))
return false;
- uint32 account_id = target ? target->GetSession()->GetAccountId() : sObjectMgr->GetPlayerAccountIdByGUID(target_guid);
+ uint32 accountId = target ? target->GetSession()->GetAccountId() : sObjectMgr->GetPlayerAccountIdByGUID(target_guid);
// find only player from same account if any
if (!target)
- if (WorldSession* session = sWorld->FindSession(account_id))
+ if (WorldSession* session = sWorld->FindSession(accountId))
target = session->GetPlayer();
uint32 notspeaktime = (uint32) atoi(delayStr);
@@ -76,21 +76,30 @@ bool ChatHandler::HandleMuteCommand(const char* args)
if (HasLowerSecurity (target, target_guid, true))
return false;
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPDATE_MUTE_TIME);
+
if (target)
{
- //! Target is online, mute will be in effect right away.
- int64 mutetime = time(NULL) + notspeaktime * MINUTE;
- target->GetSession()->m_muteTime = mutetime;
- LoginDatabase.PExecute("UPDATE account SET mutetime = " SI64FMTD " WHERE id = '%u'", mutetime, account_id);
+ // Target is online, mute will be in effect right away.
+ int64 muteTime = time(NULL) + notspeaktime * MINUTE;
+ target->GetSession()->m_muteTime = muteTime;
+
+ stmt->setInt64(0, muteTime);
+
ChatHandler(target).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, notspeaktime, mutereasonstr.c_str());
}
else
{
- //! Target is offline, mute will be in effect starting from the next login.
+ // Target is offline, mute will be in effect starting from the next login.
int32 muteTime = -int32(notspeaktime * MINUTE);
- LoginDatabase.PExecute("UPDATE account SET mutetime = %d WHERE id = %u", muteTime, account_id);
+
+ stmt->setInt64(0, muteTime);
}
+ stmt->setUInt32(1, accountId);
+
+ LoginDatabase.Execute(stmt);
+
std::string nameLink = playerLink(target_name);
PSendSysMessage(target ? LANG_YOU_DISABLE_CHAT : LANG_COMMAND_DISABLE_CHAT_DELAYED, nameLink.c_str(), notspeaktime, mutereasonstr.c_str());
@@ -107,11 +116,11 @@ bool ChatHandler::HandleUnmuteCommand(const char* args)
if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
return false;
- uint32 account_id = target ? target->GetSession()->GetAccountId() : sObjectMgr->GetPlayerAccountIdByGUID(target_guid);
+ uint32 accountId = target ? target->GetSession()->GetAccountId() : sObjectMgr->GetPlayerAccountIdByGUID(target_guid);
// find only player from same account if any
if (!target)
- if (WorldSession* session = sWorld->FindSession(account_id))
+ if (WorldSession* session = sWorld->FindSession(accountId))
target = session->GetPlayer();
// must have strong lesser security level
@@ -130,7 +139,12 @@ bool ChatHandler::HandleUnmuteCommand(const char* args)
target->GetSession()->m_muteTime = 0;
}
- LoginDatabase.PExecute("UPDATE account SET mutetime = '0' WHERE id = '%u'", account_id);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPDATE_MUTE_TIME);
+
+ stmt->setInt64(0, 0);
+ stmt->setUInt32(1, accountId);
+
+ LoginDatabase.Execute(stmt);
if (target)
ChatHandler(target).PSendSysMessage(LANG_YOUR_CHAT_ENABLED);
@@ -441,9 +455,9 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
bool ChatHandler::HandleCharacterRenameCommand(const char* args)
{
Player* target;
- uint64 target_guid;
- std::string target_name;
- if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
+ uint64 targetGuid;
+ std::string targetName;
+ if (!extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
return false;
if (target)
@@ -458,13 +472,19 @@ bool ChatHandler::HandleCharacterRenameCommand(const char* args)
else
{
// check offline security
- if (HasLowerSecurity(NULL, target_guid))
+ if (HasLowerSecurity(NULL, targetGuid))
return false;
- std::string oldNameLink = playerLink(target_name);
+ std::string oldNameLink = playerLink(targetName);
+
+ PSendSysMessage(LANG_RENAME_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(targetGuid));
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_AT_LOGIN_FLAG);
- PSendSysMessage(LANG_RENAME_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(target_guid));
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '1' WHERE guid = '%u'", GUID_LOPART(target_guid));
+ stmt->setUInt16(0, uint16(AT_LOGIN_RENAME));
+ stmt->setUInt32(1, GUID_LOPART(targetGuid));
+
+ CharacterDatabase.Execute(stmt);
}
return true;
@@ -474,80 +494,102 @@ bool ChatHandler::HandleCharacterRenameCommand(const char* args)
bool ChatHandler::HandleCharacterCustomizeCommand(const char* args)
{
Player* target;
- uint64 target_guid;
- std::string target_name;
- if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
+ uint64 targetGuid;
+ std::string targetName;
+ if (!extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
return false;
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_AT_LOGIN_FLAG);
+
+ stmt->setUInt16(0, uint16(AT_LOGIN_CUSTOMIZE));
+
if (target)
{
PSendSysMessage(LANG_CUSTOMIZE_PLAYER, GetNameLink(target).c_str());
target->SetAtLoginFlag(AT_LOGIN_CUSTOMIZE);
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '8' WHERE guid = '%u'", target->GetGUIDLow());
+
+ stmt->setUInt32(1, target->GetGUIDLow());
}
else
{
- std::string oldNameLink = playerLink(target_name);
+ std::string oldNameLink = playerLink(targetName);
- PSendSysMessage(LANG_CUSTOMIZE_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(target_guid));
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '8' WHERE guid = '%u'", GUID_LOPART(target_guid));
+ stmt->setUInt32(1, GUID_LOPART(targetGuid));
+
+ PSendSysMessage(LANG_CUSTOMIZE_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(targetGuid));
}
+ CharacterDatabase.Execute(stmt);
+
return true;
}
-bool ChatHandler::HandleCharacterChangeFactionCommand(const char * args)
+bool ChatHandler::HandleCharacterChangeFactionCommand(const char* args)
{
Player* target;
- uint64 target_guid;
- std::string target_name;
+ uint64 targetGuid;
+ std::string targetName;
- if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
+ if (!extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
return false;
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_AT_LOGIN_FLAG);
+
+ stmt->setUInt16(0, uint16(AT_LOGIN_CHANGE_FACTION));
+
if (target)
{
- // TODO : add text into database
PSendSysMessage(LANG_CUSTOMIZE_PLAYER, GetNameLink(target).c_str());
target->SetAtLoginFlag(AT_LOGIN_CHANGE_FACTION);
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '64' WHERE guid = %u", target->GetGUIDLow());
+
+ stmt->setUInt32(1, target->GetGUIDLow());
}
else
{
- std::string oldNameLink = playerLink(target_name);
+ std::string oldNameLink = playerLink(targetName);
- // TODO : add text into database
- PSendSysMessage(LANG_CUSTOMIZE_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(target_guid));
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '64' WHERE guid = %u", GUID_LOPART(target_guid));
+ PSendSysMessage(LANG_CUSTOMIZE_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(targetGuid));
+
+ stmt->setUInt32(1, GUID_LOPART(targetGuid));
}
+ CharacterDatabase.Execute(stmt);
+
return true;
}
bool ChatHandler::HandleCharacterChangeRaceCommand(const char * args)
{
Player* target;
- uint64 target_guid;
- std::string target_name;
- if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
+ uint64 targetGuid;
+ std::string targetName;
+ if (!extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
return false;
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_AT_LOGIN_FLAG);
+
+ stmt->setUInt16(0, uint16(AT_LOGIN_CHANGE_FACTION));
+
if (target)
{
// TODO : add text into database
PSendSysMessage(LANG_CUSTOMIZE_PLAYER, GetNameLink(target).c_str());
target->SetAtLoginFlag(AT_LOGIN_CHANGE_RACE);
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '128' WHERE guid = %u", target->GetGUIDLow());
+
+ stmt->setUInt32(1, target->GetGUIDLow());
}
else
{
- std::string oldNameLink = playerLink(target_name);
+ std::string oldNameLink = playerLink(targetName);
// TODO : add text into database
- PSendSysMessage(LANG_CUSTOMIZE_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(target_guid));
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '128' WHERE guid = %u", GUID_LOPART(target_guid));
+ PSendSysMessage(LANG_CUSTOMIZE_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(targetGuid));
+
+ stmt->setUInt32(1, GUID_LOPART(targetGuid));
}
+ CharacterDatabase.Execute(stmt);
+
return true;
}
diff --git a/src/server/game/Chat/Commands/Level3.cpp b/src/server/game/Chat/Commands/Level3.cpp
index 43aa100e4b3..9b29483bcb4 100755
--- a/src/server/game/Chat/Commands/Level3.cpp
+++ b/src/server/game/Chat/Commands/Level3.cpp
@@ -2177,28 +2177,33 @@ bool ChatHandler::HandleHoverCommand(const char *args)
return true;
}
-void ChatHandler::HandleCharacterLevel(Player* player, uint64 player_guid, uint32 oldlevel, uint32 newlevel)
+void ChatHandler::HandleCharacterLevel(Player* player, uint64 playerGuid, uint32 oldLevel, uint32 newLevel)
{
if (player)
{
- player->GiveLevel(newlevel);
+ player->GiveLevel(newLevel);
player->InitTalentForLevel();
player->SetUInt32Value(PLAYER_XP, 0);
if (needReportToTarget(player))
{
- if (oldlevel == newlevel)
+ if (oldLevel == newLevel)
ChatHandler(player).PSendSysMessage(LANG_YOURS_LEVEL_PROGRESS_RESET, GetNameLink().c_str());
- else if (oldlevel < newlevel)
- ChatHandler(player).PSendSysMessage(LANG_YOURS_LEVEL_UP, GetNameLink().c_str(), newlevel);
+ else if (oldLevel < newLevel)
+ ChatHandler(player).PSendSysMessage(LANG_YOURS_LEVEL_UP, GetNameLink().c_str(), newLevel);
else // if (oldlevel > newlevel)
- ChatHandler(player).PSendSysMessage(LANG_YOURS_LEVEL_DOWN, GetNameLink().c_str(), newlevel);
+ ChatHandler(player).PSendSysMessage(LANG_YOURS_LEVEL_DOWN, GetNameLink().c_str(), newLevel);
}
}
else
{
- // update level and XP at level, all other will be updated at loading
- CharacterDatabase.PExecute("UPDATE characters SET level = '%u', xp = 0 WHERE guid = '%u'", newlevel, GUID_LOPART(player_guid));
+ // Update level and reset XP, everything else will be updated at login
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_LEVEL);
+
+ stmt->setUInt8(0, uint8(newLevel));
+ stmt->setUInt32(1, GUID_LOPART(playerGuid));
+
+ CharacterDatabase.Execute(stmt);
}
}
@@ -2562,12 +2567,12 @@ bool ChatHandler::HandleResetStatsCommand(const char * args)
return true;
}
-bool ChatHandler::HandleResetSpellsCommand(const char * args)
+bool ChatHandler::HandleResetSpellsCommand(const char* args)
{
Player* target;
- uint64 target_guid;
- std::string target_name;
- if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
+ uint64 targetGuid;
+ std::string targetName;
+ if (!extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
return false;
if (target)
@@ -2580,19 +2585,25 @@ bool ChatHandler::HandleResetSpellsCommand(const char * args)
}
else
{
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '%u' WHERE guid = '%u'", uint32(AT_LOGIN_RESET_SPELLS), GUID_LOPART(target_guid));
- PSendSysMessage(LANG_RESET_SPELLS_OFFLINE, target_name.c_str());
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_AT_LOGIN_FLAG);
+
+ stmt->setUInt16(0, uint16(AT_LOGIN_RESET_SPELLS));
+ stmt->setUInt32(1, GUID_LOPART(targetGuid));
+
+ CharacterDatabase.Execute(stmt);
+
+ PSendSysMessage(LANG_RESET_SPELLS_OFFLINE, targetName.c_str());
}
return true;
}
-bool ChatHandler::HandleResetTalentsCommand(const char * args)
+bool ChatHandler::HandleResetTalentsCommand(const char* args)
{
Player* target;
- uint64 target_guid;
- std::string target_name;
- if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
+ uint64 targetGuid;
+ std::string targetName;
+ if (!extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
{
// Try reset talents as Hunter Pet
Creature* creature = getSelectedCreature();
@@ -2630,11 +2641,16 @@ bool ChatHandler::HandleResetTalentsCommand(const char * args)
target->SendTalentsInfoData(true);
return true;
}
- else if (target_guid)
+ else if (targetGuid)
{
- uint32 at_flags = AT_LOGIN_NONE | AT_LOGIN_RESET_PET_TALENTS;
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '%u' WHERE guid = '%u'", at_flags, GUID_LOPART(target_guid));
- std::string nameLink = playerLink(target_name);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_AT_LOGIN_FLAG);
+
+ stmt->setUInt16(0, uint16(AT_LOGIN_NONE | AT_LOGIN_RESET_PET_TALENTS));
+ stmt->setUInt32(1, GUID_LOPART(targetGuid));
+
+ CharacterDatabase.Execute(stmt);
+
+ std::string nameLink = playerLink(targetName);
PSendSysMessage(LANG_RESET_TALENTS_OFFLINE, nameLink.c_str());
return true;
}
@@ -2675,7 +2691,11 @@ bool ChatHandler::HandleResetAllCommand(const char * args)
return false;
}
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '%u' WHERE (at_login & '%u') = '0'", atLogin, atLogin);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_ALL_AT_LOGIN_FLAGS);
+
+ stmt->setUInt16(0, uint16(atLogin));
+
+ CharacterDatabase.Execute(stmt);
TRINITY_READ_GUARD(HashMapHolder<Player>::LockType, *HashMapHolder<Player>::GetLock());
HashMapHolder<Player>::MapType const& plist = sObjectAccessor->GetPlayers();
diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp
index 0167aa08d30..d32eff862bb 100755
--- a/src/server/game/Entities/Creature/CreatureGroups.cpp
+++ b/src/server/game/Entities/Creature/CreatureGroups.cpp
@@ -88,21 +88,6 @@ void LoadCreatureFormations()
return;
}
- std::set<uint32> guidSet;
-
- QueryResult guidResult = WorldDatabase.PQuery("SELECT guid FROM creature");
- if (guidResult)
- {
- do
- {
- Field* fields = guidResult->Fetch();
- uint32 guid = fields[0].GetUInt32();
-
- guidSet.insert(guid);
-
- } while (guidResult->NextRow());
- }
-
uint32 count = 0;
Field* fields;
FormationInfo* group_member;
@@ -114,8 +99,8 @@ void LoadCreatureFormations()
//Load group member data
group_member = new FormationInfo;
group_member->leaderGUID = fields[0].GetUInt32();
- uint32 memberGUID = fields[1].GetUInt32();
- group_member->groupAI = fields[4].GetUInt8();
+ uint32 memberGUID = fields[1].GetUInt32();
+ group_member->groupAI = fields[4].GetUInt8();
//If creature is group leader we may skip loading of dist/angle
if (group_member->leaderGUID != memberGUID)
{
@@ -130,14 +115,14 @@ void LoadCreatureFormations()
// check data correctness
{
- if (guidSet.find(group_member->leaderGUID) == guidSet.end())
+ if (!sObjectMgr->GetCreatureData(group_member->leaderGUID))
{
sLog->outErrorDb("creature_formations table leader guid %u incorrect (not exist)", group_member->leaderGUID);
delete group_member;
continue;
}
- if (guidSet.find(memberGUID) == guidSet.end())
+ if (!sObjectMgr->GetCreatureData(memberGUID))
{
sLog->outErrorDb("creature_formations table member guid %u incorrect (not exist)", memberGUID);
delete group_member;
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 036664a2760..df7aa90982e 100755
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -770,8 +770,18 @@ void GameObject::DeleteFromDB()
{
sObjectMgr->RemoveGORespawnTime(m_DBTableGuid, GetInstanceId());
sObjectMgr->DeleteGOData(m_DBTableGuid);
- WorldDatabase.PExecute("DELETE FROM gameobject WHERE guid = '%u'", m_DBTableGuid);
- WorldDatabase.PExecute("DELETE FROM game_event_gameobject WHERE guid = '%u'", m_DBTableGuid);
+
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAMEOBJECT);
+
+ stmt->setUInt32(0, m_DBTableGuid);
+
+ WorldDatabase.Execute(stmt);
+
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_EVENT_GAMEOBJECT);
+
+ stmt->setUInt32(0, m_DBTableGuid);
+
+ WorldDatabase.Execute(stmt);
}
GameObject* GameObject::GetGameObject(WorldObject& object, uint64 guid)
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index d4679928d82..2fc4d8493f4 100755
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1222,7 +1222,7 @@ void MovementInfo::OutDebug()
}
WorldObject::WorldObject(bool isWorldObject): WorldLocation(),
-m_isWorldObject(isWorldObject), m_name(""), m_isActive(false), m_zoneScript(NULL),
+m_name(""), m_isActive(false), m_isWorldObject(isWorldObject), m_zoneScript(NULL),
m_transport(NULL), m_currMap(NULL), m_InstanceId(0),
m_phaseMask(PHASEMASK_NORMAL), m_notifyflags(0), m_executed_notifies(0)
{
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index 4e33142f5ce..eb590e7b82f 100755
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -1247,24 +1247,29 @@ void Pet::_SaveAuras(SQLTransaction& trans)
}
}
-bool Pet::addSpell(uint32 spell_id, ActiveStates active /*= ACT_DECIDE*/, PetSpellState state /*= PETSPELL_NEW*/, PetSpellType type /*= PETSPELL_NORMAL*/)
+bool Pet::addSpell(uint32 spellId, ActiveStates active /*= ACT_DECIDE*/, PetSpellState state /*= PETSPELL_NEW*/, PetSpellType type /*= PETSPELL_NORMAL*/)
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id);
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo)
{
// do pet spell book cleanup
if (state == PETSPELL_UNCHANGED) // spell load case
{
- sLog->outError("Pet::addSpell: Non-existed in SpellStore spell #%u request, deleting for all pets in `pet_spell`.", spell_id);
- CharacterDatabase.PExecute("DELETE FROM pet_spell WHERE spell = '%u'", spell_id);
+ sLog->outError("Pet::addSpell: Non-existed in SpellStore spell #%u request, deleting for all pets in `pet_spell`.", spellId);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_PET_SPELL);
+
+ stmt->setUInt32(0, spellId);
+
+ CharacterDatabase.Execute(stmt);
}
else
- sLog->outError("Pet::addSpell: Non-existed in SpellStore spell #%u request.", spell_id);
+ sLog->outError("Pet::addSpell: Non-existed in SpellStore spell #%u request.", spellId);
return false;
}
- PetSpellMap::iterator itr = m_spells.find(spell_id);
+ PetSpellMap::iterator itr = m_spells.find(spellId);
if (itr != m_spells.end())
{
if (itr->second.state == PETSPELL_REMOVED)
@@ -1303,7 +1308,7 @@ bool Pet::addSpell(uint32 spell_id, ActiveStates active /*= ACT_DECIDE*/, PetSpe
newspell.active = active;
// talent: unlearn all other talent ranks (high and low)
- if (TalentSpellPos const* talentPos = GetTalentSpellPos(spell_id))
+ if (TalentSpellPos const* talentPos = GetTalentSpellPos(spellId))
{
if (TalentEntry const* talentInfo = sTalentStore.LookupEntry(talentPos->talent_id))
{
@@ -1311,7 +1316,7 @@ bool Pet::addSpell(uint32 spell_id, ActiveStates active /*= ACT_DECIDE*/, PetSpe
{
// skip learning spell and no rank spell case
uint32 rankSpellId = talentInfo->RankID[i];
- if (!rankSpellId || rankSpellId == spell_id)
+ if (!rankSpellId || rankSpellId == spellId)
continue;
// skip unknown ranks
@@ -1352,17 +1357,17 @@ bool Pet::addSpell(uint32 spell_id, ActiveStates active /*= ACT_DECIDE*/, PetSpe
}
}
- m_spells[spell_id] = newspell;
+ m_spells[spellId] = newspell;
if (spellInfo->IsPassive() && (!spellInfo->CasterAuraState || HasAuraState(AuraStateType(spellInfo->CasterAuraState))))
- CastSpell(this, spell_id, true);
+ CastSpell(this, spellId, true);
else
m_charmInfo->AddSpellToActionBar(spellInfo);
if (newspell.active == ACT_ENABLED)
ToggleAutocast(spellInfo, true);
- uint32 talentCost = GetTalentSpellCost(spell_id);
+ uint32 talentCost = GetTalentSpellCost(spellId);
if (talentCost)
{
int32 free_points = GetMaxTalentPointsForLevel(getLevel());
diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h
index 973e5e99bee..ac86c061b31 100755
--- a/src/server/game/Entities/Pet/Pet.h
+++ b/src/server/game/Entities/Pet/Pet.h
@@ -192,7 +192,7 @@ class Pet : public Guardian
void _LoadSpells();
void _SaveSpells(SQLTransaction& trans);
- bool addSpell(uint32 spell_id, ActiveStates active = ACT_DECIDE, PetSpellState state = PETSPELL_NEW, PetSpellType type = PETSPELL_NORMAL);
+ bool addSpell(uint32 spellId, ActiveStates active = ACT_DECIDE, PetSpellState state = PETSPELL_NEW, PetSpellType type = PETSPELL_NORMAL);
bool learnSpell(uint32 spell_id);
void learnSpellHighRank(uint32 spellid);
void InitLevelupSpellsForLevel();
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 510813a4e56..53257622e68 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -3416,19 +3416,24 @@ void Player::AddNewMailDeliverTime(time_t deliver_time)
}
}
-bool Player::AddTalent(uint32 spell_id, uint8 spec, bool learning)
+bool Player::AddTalent(uint32 spellId, uint8 spec, bool learning)
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id);
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo)
{
// do character spell book cleanup (all characters)
if (!IsInWorld() && !learning) // spell load case
{
- sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request, deleting for all characters in `character_spell`.", spell_id);
- CharacterDatabase.PExecute("DELETE FROM character_talent WHERE spell = '%u'", spell_id);
+ sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request, deleting for all characters in `character_spell`.", spellId);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_SPELL);
+
+ stmt->setUInt32(0, spellId);
+
+ CharacterDatabase.Execute(stmt);
}
else
- sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request.", spell_id);
+ sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request.", spellId);
return false;
}
@@ -3438,19 +3443,24 @@ bool Player::AddTalent(uint32 spell_id, uint8 spec, bool learning)
// do character spell book cleanup (all characters)
if (!IsInWorld() && !learning) // spell load case
{
- sLog->outError("Player::addTalent: Broken spell #%u learning not allowed, deleting for all characters in `character_talent`.", spell_id);
- CharacterDatabase.PExecute("DELETE FROM character_talent WHERE spell = '%u'", spell_id);
+ sLog->outError("Player::addTalent: Broken spell #%u learning not allowed, deleting for all characters in `character_talent`.", spellId);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_SPELL);
+
+ stmt->setUInt32(0, spellId);
+
+ CharacterDatabase.Execute(stmt);
}
else
- sLog->outError("Player::addTalent: Broken spell #%u learning not allowed.", spell_id);
+ sLog->outError("Player::addTalent: Broken spell #%u learning not allowed.", spellId);
return false;
}
- PlayerTalentMap::iterator itr = m_talents[spec]->find(spell_id);
+ PlayerTalentMap::iterator itr = m_talents[spec]->find(spellId);
if (itr != m_talents[spec]->end())
itr->second->state = PLAYERSPELL_UNCHANGED;
- else if (TalentSpellPos const* talentPos = GetTalentSpellPos(spell_id))
+ else if (TalentSpellPos const* talentPos = GetTalentSpellPos(spellId))
{
if (TalentEntry const* talentInfo = sTalentStore.LookupEntry(talentPos->talent_id))
{
@@ -3458,7 +3468,7 @@ bool Player::AddTalent(uint32 spell_id, uint8 spec, bool learning)
{
// skip learning spell and no rank spell case
uint32 rankSpellId = talentInfo->RankID[rank];
- if (!rankSpellId || rankSpellId == spell_id)
+ if (!rankSpellId || rankSpellId == spellId)
continue;
itr = m_talents[spec]->find(rankSpellId);
@@ -3473,25 +3483,30 @@ bool Player::AddTalent(uint32 spell_id, uint8 spec, bool learning)
newtalent->state = state;
newtalent->spec = spec;
- (*m_talents[spec])[spell_id] = newtalent;
+ (*m_talents[spec])[spellId] = newtalent;
return true;
}
return false;
}
-bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependent, bool disabled, bool loading /*=false*/)
+bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading /*= false*/)
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id);
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo)
{
// do character spell book cleanup (all characters)
if (!IsInWorld() && !learning) // spell load case
{
- sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request, deleting for all characters in `character_spell`.", spell_id);
- CharacterDatabase.PExecute("DELETE FROM character_spell WHERE spell = '%u'", spell_id);
+ sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request, deleting for all characters in `character_spell`.", spellId);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_SPELL);
+
+ stmt->setUInt32(0, spellId);
+
+ CharacterDatabase.Execute(stmt);
}
else
- sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request.", spell_id);
+ sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request.", spellId);
return false;
}
@@ -3501,11 +3516,16 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
// do character spell book cleanup (all characters)
if (!IsInWorld() && !learning) // spell load case
{
- sLog->outError("Player::addSpell: Broken spell #%u learning not allowed, deleting for all characters in `character_spell`.", spell_id);
- CharacterDatabase.PExecute("DELETE FROM character_spell WHERE spell = '%u'", spell_id);
+ sLog->outError("Player::addSpell: Broken spell #%u learning not allowed, deleting for all characters in `character_spell`.", spellId);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_SPELL);
+
+ stmt->setUInt32(0, spellId);
+
+ CharacterDatabase.Execute(stmt);
}
else
- sLog->outError("Player::addSpell: Broken spell #%u learning not allowed.", spell_id);
+ sLog->outError("Player::addSpell: Broken spell #%u learning not allowed.", spellId);
return false;
}
@@ -3516,18 +3536,18 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
bool disabled_case = false;
bool superceded_old = false;
- PlayerSpellMap::iterator itr = m_spells.find(spell_id);
+ PlayerSpellMap::iterator itr = m_spells.find(spellId);
// Remove temporary spell if found to prevent conflicts
if (itr != m_spells.end() && itr->second->state == PLAYERSPELL_TEMPORARY)
- RemoveTemporarySpell(spell_id);
+ RemoveTemporarySpell(spellId);
else if (itr != m_spells.end())
{
uint32 next_active_spell_id = 0;
// fix activate state for non-stackable low rank (and find next spell for !active case)
if (!spellInfo->IsStackableWithRanks() && spellInfo->IsRanked())
{
- if (uint32 next = sSpellMgr->GetNextSpellInChain(spell_id))
+ if (uint32 next = sSpellMgr->GetNextSpellInChain(spellId))
{
if (HasSpell(next))
{
@@ -3570,7 +3590,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
if (active)
{
if (spellInfo->IsPassive() && IsNeedCastPassiveSpellAtLearn(spellInfo))
- CastSpell (this, spell_id, true);
+ CastSpell (this, spellId, true);
}
else if (IsInWorld())
{
@@ -3578,14 +3598,14 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
{
// update spell ranks in spellbook and action bar
WorldPacket data(SMSG_SUPERCEDED_SPELL, 4 + 4);
- data << uint32(spell_id);
+ data << uint32(spellId);
data << uint32(next_active_spell_id);
GetSession()->SendPacket(&data);
}
else
{
WorldPacket data(SMSG_REMOVED_SPELL, 4);
- data << uint32(spell_id);
+ data << uint32(spellId);
GetSession()->SendPacket(&data);
}
}
@@ -3629,7 +3649,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
if (!disabled_case) // skip new spell adding if spell already known (disabled spells case)
{
// talent: unlearn all other talent ranks (high and low)
- if (TalentSpellPos const* talentPos = GetTalentSpellPos(spell_id))
+ if (TalentSpellPos const* talentPos = GetTalentSpellPos(spellId))
{
if (TalentEntry const* talentInfo = sTalentStore.LookupEntry(talentPos->talent_id))
{
@@ -3637,7 +3657,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
{
// skip learning spell and no rank spell case
uint32 rankSpellId = talentInfo->RankID[rank];
- if (!rankSpellId || rankSpellId == spell_id)
+ if (!rankSpellId || rankSpellId == spellId)
continue;
removeSpell(rankSpellId, false, false);
@@ -3645,7 +3665,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
}
}
// non talent spell: learn low ranks (recursive call)
- else if (uint32 prev_spell = sSpellMgr->GetPrevSpellInChain(spell_id))
+ else if (uint32 prev_spell = sSpellMgr->GetPrevSpellInChain(spellId))
{
if (!IsInWorld() || disabled) // at spells loading, no output, but allow save
addSpell(prev_spell, active, true, true, disabled);
@@ -3678,7 +3698,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
{
WorldPacket data(SMSG_SUPERCEDED_SPELL, 4 + 4);
data << uint32(itr2->first);
- data << uint32(spell_id);
+ data << uint32(spellId);
GetSession()->SendPacket(&data);
}
@@ -3693,7 +3713,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
if (IsInWorld()) // not send spell (re-/over-)learn packets at loading
{
WorldPacket data(SMSG_SUPERCEDED_SPELL, 4 + 4);
- data << uint32(spell_id);
+ data << uint32(spellId);
data << uint32(itr2->first);
GetSession()->SendPacket(&data);
}
@@ -3708,31 +3728,31 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
}
}
- m_spells[spell_id] = newspell;
+ m_spells[spellId] = newspell;
// return false if spell disabled
if (newspell->disabled)
return false;
}
- uint32 talentCost = GetTalentSpellCost(spell_id);
+ uint32 talentCost = GetTalentSpellCost(spellId);
// cast talents with SPELL_EFFECT_LEARN_SPELL (other dependent spells will learned later as not auto-learned)
// note: all spells with SPELL_EFFECT_LEARN_SPELL isn't passive
if (!loading && talentCost > 0 && spellInfo->HasEffect(SPELL_EFFECT_LEARN_SPELL))
{
// ignore stance requirement for talent learn spell (stance set for spell only for client spell description show)
- CastSpell(this, spell_id, true);
+ CastSpell(this, spellId, true);
}
// also cast passive spells (including all talents without SPELL_EFFECT_LEARN_SPELL) with additional checks
else if (spellInfo->IsPassive())
{
if (IsNeedCastPassiveSpellAtLearn(spellInfo))
- CastSpell(this, spell_id, true);
+ CastSpell(this, spellId, true);
}
else if (spellInfo->HasEffect(SPELL_EFFECT_SKILL_STEP))
{
- CastSpell(this, spell_id, true);
+ CastSpell(this, spellId, true);
return false;
}
@@ -3749,9 +3769,9 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
// add dependent skills
uint16 maxskill = GetMaxSkillValueForLevel();
- SpellLearnSkillNode const* spellLearnSkill = sSpellMgr->GetSpellLearnSkill(spell_id);
+ SpellLearnSkillNode const* spellLearnSkill = sSpellMgr->GetSpellLearnSkill(spellId);
- SkillLineAbilityMapBounds skill_bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spell_id);
+ SkillLineAbilityMapBounds skill_bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spellId);
if (spellLearnSkill)
{
@@ -3809,7 +3829,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
}
// learn dependent spells
- SpellLearnSpellMapBounds spell_bounds = sSpellMgr->GetSpellLearnSpellMapBounds(spell_id);
+ SpellLearnSpellMapBounds spell_bounds = sSpellMgr->GetSpellLearnSpellMapBounds(spellId);
for (SpellLearnSpellMap::const_iterator itr2 = spell_bounds.first; itr2 != spell_bounds.second; ++itr2)
{
@@ -3831,7 +3851,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS, _spell_idx->second->skillId);
}
- GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL, spell_id);
+ GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL, spellId);
}
// return true (for send learn packet) only if spell active (in case ranked spells) and not replace old spell
@@ -4921,8 +4941,14 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC
}
// The character gets unlinked from the account, the name gets freed up and appears as deleted ingame
case CHAR_DELETE_UNLINK:
- CharacterDatabase.PExecute("UPDATE characters SET deleteInfos_Name=name, deleteInfos_Account=account, deleteDate='" UI64FMTD "', name='', account=0 WHERE guid=%u", uint64(time(NULL)), guid);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_DELETE_INFO);
+
+ stmt->setUInt32(0, guid);
+
+ CharacterDatabase.Execute(stmt);
break;
+ }
default:
sLog->outError("Player::DeleteFromDB: Unsupported delete method: %u.", charDelete_method);
}
@@ -6148,6 +6174,7 @@ bool Player::UpdateFishingSkill()
// bonus abilities in sSkillLineAbilityStore
// Used only to avoid scan DBC at each skill grow
static uint32 bonusSkillLevels[] = {75, 150, 225, 300, 375, 450};
+static const size_t bonusSkillLevelsSize = sizeof(bonusSkillLevels) / sizeof(uint32);
bool Player::UpdateSkillPro(uint16 SkillId, int32 Chance, uint32 step)
{
@@ -6185,9 +6212,10 @@ bool Player::UpdateSkillPro(uint16 SkillId, int32 Chance, uint32 step)
SetUInt32Value(valueIndex, MAKE_SKILL_VALUE(new_value, MaxValue));
if (itr->second.uState != SKILL_NEW)
itr->second.uState = SKILL_CHANGED;
- for (uint32* bsl = &bonusSkillLevels[0]; *bsl; ++bsl)
+ for (size_t i = 0; i < bonusSkillLevelsSize; ++i)
{
- if ((SkillValue < *bsl && new_value >= *bsl))
+ uint32 bsl = bonusSkillLevels[i];
+ if (SkillValue < bsl && new_value >= bsl)
{
learnSkillRewardedSpells(SkillId, new_value);
break;
@@ -7317,7 +7345,14 @@ uint32 Player::GetZoneIdFromDB(uint64 guid)
zone = sMapMgr->GetZoneId(map, posx, posy, posz);
if (zone > 0)
- CharacterDatabase.PExecute("UPDATE characters SET zone='%u' WHERE guid='%u'", zone, guidLow);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_ZONE);
+
+ stmt->setUInt16(0, uint16(zone));
+ stmt->setUInt32(1, guidLow);
+
+ CharacterDatabase.Execute(stmt);
+ }
}
return zone;
@@ -12348,7 +12383,13 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update)
DestroyItem(slot, i, update);
if (pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))
- CharacterDatabase.PExecute("DELETE FROM character_gifts WHERE item_guid = '%u'", pItem->GetGUIDLow());
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT);
+
+ stmt->setUInt32(0, pItem->GetGUIDLow());
+
+ CharacterDatabase.Execute(stmt);
+ }
RemoveEnchantmentDurations(pItem);
RemoveItemDurations(pItem);
@@ -16466,7 +16507,13 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
if (ObjectMgr::CheckPlayerName(m_name) != CHAR_NAME_SUCCESS ||
(AccountMgr::IsPlayerAccount(GetSession()->GetSecurity()) && sObjectMgr->IsReservedName(m_name)))
{
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '%u' WHERE guid ='%u'", uint32(AT_LOGIN_RENAME), guid);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_AT_LOGIN_FLAG);
+
+ stmt->setUInt16(0, uint16(AT_LOGIN_RENAME));
+ stmt->setUInt32(1, guid);
+
+ CharacterDatabase.Execute(stmt);
+
return false;
}
@@ -17487,29 +17534,33 @@ void Player::_LoadMailedItems(Mail* mail)
{
Field* fields = result->Fetch();
- uint32 item_guid_low = fields[11].GetUInt32();
- uint32 item_template = fields[12].GetUInt32();
+ uint32 itemGuid = fields[11].GetUInt32();
+ uint32 itemTemplate = fields[12].GetUInt32();
- mail->AddItem(item_guid_low, item_template);
+ mail->AddItem(itemGuid, itemTemplate);
- ItemTemplate const* proto = sObjectMgr->GetItemTemplate(item_template);
+ ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemTemplate);
if (!proto)
{
- sLog->outError("Player %u has unknown item_template (ProtoType) in mailed items(GUID: %u template: %u) in mail (%u), deleted.", GetGUIDLow(), item_guid_low, item_template, mail->messageID);
- CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid = '%u'", item_guid_low);
+ sLog->outError("Player %u has unknown item_template (ProtoType) in mailed items(GUID: %u template: %u) in mail (%u), deleted.", GetGUIDLow(), itemGuid, itemTemplate, mail->messageID);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_MAIL_ITEM);
+ stmt->setUInt32(0, itemGuid);
+ CharacterDatabase.Execute(stmt);
+
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE);
- stmt->setUInt32(0, item_guid_low);
+ stmt->setUInt32(0, itemGuid);
CharacterDatabase.Execute(stmt);
continue;
}
Item* item = NewItemOrBag(proto);
- if (!item->LoadFromDB(item_guid_low, MAKE_NEW_GUID(fields[13].GetUInt32(), 0, HIGHGUID_PLAYER), fields, item_template))
+ if (!item->LoadFromDB(itemGuid, MAKE_NEW_GUID(fields[13].GetUInt32(), 0, HIGHGUID_PLAYER), fields, itemTemplate))
{
- sLog->outError("Player::_LoadMailedItems - Item in mail (%u) doesn't exist !!!! - item guid: %u, deleted from mail", mail->messageID, item_guid_low);
- CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid = '%u'", item_guid_low);
+ sLog->outError("Player::_LoadMailedItems - Item in mail (%u) doesn't exist !!!! - item guid: %u, deleted from mail", mail->messageID, itemGuid);
+ CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid = '%u'", itemGuid);
item->FSetState(ITEM_REMOVED);
SQLTransaction temp = SQLTransaction(NULL);
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 8ee7d1a417f..a9bba9cbdc4 100755
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1650,7 +1650,7 @@ class Player : public Unit, public GridObject<Player>
void SendProficiency(ItemClass itemClass, uint32 itemSubclassMask);
void SendInitialSpells();
- bool addSpell(uint32 spell_id, bool active, bool learning, bool dependent, bool disabled, bool loading = false);
+ bool addSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading = false);
void learnSpell(uint32 spell_id, bool dependent);
void removeSpell(uint32 spell_id, bool disabled = false, bool learn_low_rank = true);
void resetSpells(bool myClassOnly = false);
@@ -1674,7 +1674,7 @@ class Player : public Unit, public GridObject<Player>
void LearnTalent(uint32 talentId, uint32 talentRank);
void LearnPetTalent(uint64 petGuid, uint32 talentId, uint32 talentRank);
- bool AddTalent(uint32 spell, uint8 spec, bool learning);
+ bool AddTalent(uint32 spellId, uint8 spec, bool learning);
bool HasTalent(uint32 spell_id, uint8 spec) const;
uint32 CalculateTalentsPoints() const;
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index 11175b13114..ffb5e0ca1aa 100755
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -123,12 +123,30 @@ bool Group::Create(Player* leader)
sGroupMgr->RegisterGroupDbStoreId(m_dbStoreId, this);
- // store group in database
- CharacterDatabase.PExecute("INSERT INTO groups (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raiddifficulty) "
- "VALUES ('%u', '%u', '%u', '%u', '%u', '" UI64FMTD "', '" UI64FMTD "', '" UI64FMTD "', '" UI64FMTD "', '" UI64FMTD "', '" UI64FMTD "', '" UI64FMTD "', '" UI64FMTD "', '%u', '%u', '%u')",
- m_dbStoreId, GUID_LOPART(m_leaderGuid), uint32(m_lootMethod),
- GUID_LOPART(m_looterGuid), uint32(m_lootThreshold), m_targetIcons[0], m_targetIcons[1], m_targetIcons[2], m_targetIcons[3], m_targetIcons[4], m_targetIcons[5], m_targetIcons[6],
- m_targetIcons[7], uint8(m_groupType), uint32(m_dungeonDifficulty), m_raidDifficulty);
+ // Store group in database
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GROUP);
+
+ uint8 index = 0;
+
+ stmt->setUInt32(index++, m_dbStoreId);
+ stmt->setUInt32(index++, GUID_LOPART(m_leaderGuid));
+ stmt->setUInt8(index++, uint8(m_lootMethod));
+ stmt->setUInt32(index++, GUID_LOPART(m_looterGuid));
+ stmt->setUInt8(index++, uint8(m_lootThreshold));
+ stmt->setUInt32(index++, uint32(m_targetIcons[0]));
+ stmt->setUInt32(index++, uint32(m_targetIcons[1]));
+ stmt->setUInt32(index++, uint32(m_targetIcons[2]));
+ stmt->setUInt32(index++, uint32(m_targetIcons[3]));
+ stmt->setUInt32(index++, uint32(m_targetIcons[4]));
+ stmt->setUInt32(index++, uint32(m_targetIcons[5]));
+ stmt->setUInt32(index++, uint32(m_targetIcons[6]));
+ stmt->setUInt32(index++, uint32(m_targetIcons[7]));
+ stmt->setUInt8(index++, uint8(m_groupType));
+ stmt->setUInt32(index++, uint8(m_dungeonDifficulty));
+ stmt->setUInt32(index++, uint8(m_raidDifficulty));
+
+ CharacterDatabase.Execute(stmt);
+
ASSERT(AddMember(leader)); // If the leader can't be added to a new group because it appears full, something is clearly wrong.
@@ -200,7 +218,15 @@ void Group::ConvertToLFG()
m_groupType = GroupType(m_groupType | GROUPTYPE_LFG | GROUPTYPE_UNK1);
m_lootMethod = NEED_BEFORE_GREED;
if (!isBGGroup())
- CharacterDatabase.PExecute("UPDATE groups SET groupType='%u' WHERE guid='%u'", uint8(m_groupType), m_dbStoreId);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_GROUP_TYPE);
+
+ stmt->setUInt8(0, uint8(m_groupType));
+ stmt->setUInt32(1, m_dbStoreId);
+
+ CharacterDatabase.Execute(stmt);
+ }
+
SendUpdate();
}
@@ -211,7 +237,15 @@ void Group::ConvertToRaid()
_initRaidSubGroupsCounter();
if (!isBGGroup())
- CharacterDatabase.PExecute("UPDATE groups SET groupType='%u' WHERE guid='%u'", uint8(m_groupType), m_dbStoreId);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_GROUP_TYPE);
+
+ stmt->setUInt8(0, uint8(m_groupType));
+ stmt->setUInt32(1, m_dbStoreId);
+
+ CharacterDatabase.Execute(stmt);
+ }
+
SendUpdate();
// update quest related GO states (quest activity dependent from raid membership)
@@ -343,8 +377,18 @@ bool Group::AddMember(Player* player)
// insert into the table if we're not a battleground group
if (!isBGGroup())
- CharacterDatabase.PExecute("INSERT INTO group_member (guid, memberGuid, memberFlags, subgroup, roles) VALUES(%u, %u, %u, %u, %u)",
- m_dbStoreId, GUID_LOPART(member.guid), member.flags, member.group, member.roles);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GROUP_MEMBER);
+
+ stmt->setUInt32(0, m_dbStoreId);
+ stmt->setUInt32(1, GUID_LOPART(member.guid));
+ stmt->setUInt8(2, member.flags);
+ stmt->setUInt8(3, member.group);
+ stmt->setUInt8(4, member.roles);
+
+ CharacterDatabase.Execute(stmt);
+
+ }
SendUpdate();
sScriptMgr->OnGroupAddMember(this, player->GetGUID());
@@ -435,7 +479,11 @@ bool Group::RemoveMember(uint64 guid, const RemoveMethod &method /*= GROUP_REMOV
}
// Remove player from group in DB
- CharacterDatabase.PExecute("DELETE FROM group_member WHERE memberGuid=%u", GUID_LOPART(guid));
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GROUP_MEMBER);
+
+ stmt->setUInt32(0, GUID_LOPART(guid));
+
+ CharacterDatabase.Execute(stmt);
// Reevaluate group enchanter if the leaving player had enchanting skill or the player is offline
if ((player && player->GetSkillValue(SKILL_ENCHANTING)) || !player)
@@ -530,14 +578,24 @@ void Group::ChangeLeader(uint64 guid)
}
// Same in the database
- CharacterDatabase.PExecute("DELETE FROM group_instance WHERE guid=%u AND (permanent = 1 OR instance IN (SELECT instance FROM character_instance WHERE guid = '%u'))",
- m_dbStoreId, player->GetGUIDLow());
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GROUP_INSTANCE_PERM_BINDING);
+
+ stmt->setUInt32(0, m_dbStoreId);
+ stmt->setUInt32(1, player->GetGUIDLow());
+
+ CharacterDatabase.Execute(stmt);
// Copy the permanent binds from the new leader to the group
Player::ConvertInstancesToGroup(player, this, true);
- // update the group leader
- CharacterDatabase.PExecute("UPDATE groups SET leaderGuid='%u' WHERE guid='%u'", player->GetGUIDLow(), m_dbStoreId);
+ // Update the group leader
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_GROUP_LEADER);
+
+ stmt->setUInt32(0, player->GetGUIDLow());
+ stmt->setUInt32(1, m_dbStoreId);
+
+ CharacterDatabase.Execute(stmt);
}
m_leaderGuid = player->GetGUID();
@@ -1321,7 +1379,14 @@ bool Group::_setMembersGroup(uint64 guid, uint8 group)
SubGroupCounterIncrease(group);
if (!isBGGroup())
- CharacterDatabase.PExecute("UPDATE group_member SET subgroup='%u' WHERE memberGuid='%u'", group, GUID_LOPART(guid));
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_GROUP_MEMBER_SUBGROUP);
+
+ stmt->setUInt8(0, group);
+ stmt->setUInt32(1, GUID_LOPART(guid));
+
+ CharacterDatabase.Execute(stmt);
+ }
return true;
}
@@ -1365,7 +1430,14 @@ void Group::ChangeMembersGroup(uint64 guid, uint8 group)
// Preserve new sub group in database for non-raid groups
if (!isBGGroup())
- CharacterDatabase.PExecute("UPDATE group_member SET subgroup='%u' WHERE memberGuid='%u'", group, GUID_LOPART(guid));
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_GROUP_MEMBER_SUBGROUP);
+
+ stmt->setUInt8(0, group);
+ stmt->setUInt32(1, GUID_LOPART(guid));
+
+ CharacterDatabase.Execute(stmt);
+ }
// In case the moved player is online, update the player object with the new sub group references
if (Player* player = ObjectAccessor::FindPlayer(guid))
@@ -1553,7 +1625,14 @@ void Group::SetDungeonDifficulty(Difficulty difficulty)
{
m_dungeonDifficulty = difficulty;
if (!isBGGroup())
- CharacterDatabase.PExecute("UPDATE groups SET difficulty = %u WHERE guid ='%u'", m_dungeonDifficulty, m_dbStoreId);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_GROUP_DIFFICULTY);
+
+ stmt->setUInt8(0, uint8(m_dungeonDifficulty));
+ stmt->setUInt32(1, m_dbStoreId);
+
+ CharacterDatabase.Execute(stmt);
+ }
for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next())
{
@@ -1570,7 +1649,14 @@ void Group::SetRaidDifficulty(Difficulty difficulty)
{
m_raidDifficulty = difficulty;
if (!isBGGroup())
- CharacterDatabase.PExecute("UPDATE groups SET raiddifficulty = %u WHERE guid ='%u'", m_raidDifficulty, m_dbStoreId);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_GROUP_RAID_DIFFICULTY);
+
+ stmt->setUInt8(0, uint8(m_raidDifficulty));
+ stmt->setUInt32(1, m_dbStoreId);
+
+ CharacterDatabase.Execute(stmt);
+ }
for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next())
{
@@ -1608,9 +1694,9 @@ void Group::ResetInstances(uint8 method, bool isRaid, Player* SendMsgTo)
for (BoundInstancesMap::iterator itr = m_boundInstances[diff].begin(); itr != m_boundInstances[diff].end();)
{
- InstanceSave* p = itr->second.save;
+ InstanceSave* instanceSave = itr->second.save;
const MapEntry* entry = sMapStore.LookupEntry(itr->first);
- if (!entry || entry->IsRaid() != isRaid || (!p->CanReset() && method != INSTANCE_RESET_GROUP_DISBAND))
+ if (!entry || entry->IsRaid() != isRaid || (!instanceSave->CanReset() && method != INSTANCE_RESET_GROUP_DISBAND))
{
++itr;
continue;
@@ -1628,10 +1714,10 @@ void Group::ResetInstances(uint8 method, bool isRaid, Player* SendMsgTo)
bool isEmpty = true;
// if the map is loaded, reset it
- Map* map = sMapMgr->FindMap(p->GetMapId(), p->GetInstanceId());
- if (map && map->IsDungeon() && !(method == INSTANCE_RESET_GROUP_DISBAND && !p->CanReset()))
+ Map* map = sMapMgr->FindMap(instanceSave->GetMapId(), instanceSave->GetInstanceId());
+ if (map && map->IsDungeon() && !(method == INSTANCE_RESET_GROUP_DISBAND && !instanceSave->CanReset()))
{
- if (p->CanReset())
+ if (instanceSave->CanReset())
isEmpty = ((InstanceMap*)map)->Reset(method);
else
isEmpty = !map->HavePlayers();
@@ -1640,25 +1726,32 @@ void Group::ResetInstances(uint8 method, bool isRaid, Player* SendMsgTo)
if (SendMsgTo)
{
if (isEmpty)
- SendMsgTo->SendResetInstanceSuccess(p->GetMapId());
+ SendMsgTo->SendResetInstanceSuccess(instanceSave->GetMapId());
else
- SendMsgTo->SendResetInstanceFailed(0, p->GetMapId());
+ SendMsgTo->SendResetInstanceFailed(0, instanceSave->GetMapId());
}
if (isEmpty || method == INSTANCE_RESET_GROUP_DISBAND || method == INSTANCE_RESET_CHANGE_DIFFICULTY)
{
// do not reset the instance, just unbind if others are permanently bound to it
- if (p->CanReset())
- p->DeleteFromDB();
+ if (instanceSave->CanReset())
+ instanceSave->DeleteFromDB();
else
- CharacterDatabase.PExecute("DELETE FROM group_instance WHERE instance = '%u'", p->GetInstanceId());
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GROUP_INSTANCE_BY_INSTANCE);
+
+ stmt->setUInt32(0, instanceSave->GetInstanceId());
+
+ CharacterDatabase.Execute(stmt);
+ }
+
// i don't know for sure if hash_map iterators
m_boundInstances[diff].erase(itr);
itr = m_boundInstances[diff].begin();
// this unloads the instance save unless online players are bound to it
// (eg. permanent binds or GM solo binds)
- p->RemoveGroup(this);
+ instanceSave->RemoveGroup(this);
}
else
++itr;
@@ -1711,7 +1804,15 @@ InstanceGroupBind* Group::BindToInstance(InstanceSave* save, bool permanent, boo
InstanceGroupBind& bind = m_boundInstances[save->GetDifficulty()][save->GetMapId()];
if (!load && (!bind.save || permanent != bind.perm || save != bind.save))
- CharacterDatabase.PExecute("REPLACE INTO group_instance (guid, instance, permanent) VALUES (%u, %u, %u)", m_dbStoreId, save->GetInstanceId(), permanent);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GROUP_INSTANCE);
+
+ stmt->setUInt32(0, m_dbStoreId);
+ stmt->setUInt32(1, save->GetInstanceId());
+ stmt->setBool(2, permanent);
+
+ CharacterDatabase.Execute(stmt);
+ }
if (bind.save != save)
{
@@ -1735,7 +1836,15 @@ void Group::UnbindInstance(uint32 mapid, uint8 difficulty, bool unload)
if (itr != m_boundInstances[difficulty].end())
{
if (!unload)
- CharacterDatabase.PExecute("DELETE FROM group_instance WHERE guid=%u AND instance=%u", m_dbStoreId, itr->second.save->GetInstanceId());
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GROUP_INSTANCE_BY_GUID);
+
+ stmt->setUInt32(0, m_dbStoreId);
+ stmt->setUInt32(1, itr->second.save->GetInstanceId());
+
+ CharacterDatabase.Execute(stmt);
+ }
+
itr->second.save->RemoveGroup(this); // save can become invalid
m_boundInstances[difficulty].erase(itr);
}
@@ -1964,7 +2073,12 @@ void Group::SetGroupMemberFlag(uint64 guid, bool apply, GroupMemberFlags flag)
ToggleGroupMemberFlag(slot, flag, apply);
// Preserve the new setting in the db
- CharacterDatabase.PExecute("UPDATE group_member SET memberFlags='%u' WHERE memberGuid='%u'", slot->flags, GUID_LOPART(guid));
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_GROUP_MEMBER_FLAG);
+
+ stmt->setUInt8(0, slot->flags);
+ stmt->setUInt32(0, GUID_LOPART(guid));
+
+ CharacterDatabase.Execute(stmt);
// Broadcast the changes to the group
SendUpdate();
diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp
index 7a2368161d8..9d5ffb6542a 100755
--- a/src/server/game/Instances/InstanceSaveMgr.cpp
+++ b/src/server/game/Instances/InstanceSaveMgr.cpp
@@ -138,7 +138,14 @@ void InstanceSaveManager::RemoveInstanceSave(uint32 InstanceId)
{
// save the resettime for normal instances only when they get unloaded
if (time_t resettime = itr->second->GetResetTimeForDB())
- CharacterDatabase.PExecute("UPDATE instance SET resettime = '"UI64FMTD"' WHERE id = '%u'", (uint64)resettime, InstanceId);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_INSTANCE_RESETTIME);
+
+ stmt->setUInt32(0, uint32(resettime));
+ stmt->setUInt32(1, InstanceId);
+
+ CharacterDatabase.Execute(stmt);
+ }
delete itr->second;
m_instanceSaveById.erase(itr);
@@ -573,13 +580,19 @@ void InstanceSaveManager::_ResetOrWarnAll(uint32 mapid, Difficulty difficulty, b
if (period < DAY)
period = DAY;
- uint64 next_reset = ((resetTime + MINUTE) / DAY * DAY) + period + diff;
+ uint32 next_reset = ((resetTime + MINUTE) / DAY * DAY) + period + diff;
SetResetTimeFor(mapid, difficulty, next_reset);
ScheduleReset(true, time_t(next_reset-3600), InstResetEvent(1, mapid, difficulty, 0));
- // update it in the DB
- CharacterDatabase.PExecute("UPDATE instance_reset SET resettime = '%u' WHERE mapid = '%d' AND difficulty = '%d'", uint32(next_reset), mapid, difficulty);
+ // Update it in the DB
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_GLOBAL_INSTANCE_RESETTIME);
+
+ stmt->setUInt32(0, next_reset);
+ stmt->setUInt16(1, uint16(mapid));
+ stmt->setUInt8(2, uint8(difficulty));
+
+ CharacterDatabase.Execute(stmt);
}
// note: this isn't fast but it's meant to be executed very rarely
diff --git a/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp b/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp
index aef3bf03bd9..6b972f94dd5 100755
--- a/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp
@@ -709,9 +709,12 @@ void WorldSession::HandleBugOpcode(WorldPacket & recv_data)
sLog->outDebug(LOG_FILTER_NETWORKIO, "%s", type.c_str());
sLog->outDebug(LOG_FILTER_NETWORKIO, "%s", content.c_str());
- CharacterDatabase.EscapeString(type);
- CharacterDatabase.EscapeString(content);
- CharacterDatabase.PExecute ("INSERT INTO bugreport (type, content) VALUES('%s', '%s')", type.c_str(), content.c_str());
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_BUG_REPORT);
+
+ stmt->setString(0, type);
+ stmt->setString(1, content);
+
+ CharacterDatabase.Execute(stmt);
}
void WorldSession::HandleReclaimCorpseOpcode(WorldPacket &recv_data)
diff --git a/src/server/game/Server/Protocol/Handlers/NPCHandler.cpp b/src/server/game/Server/Protocol/Handlers/NPCHandler.cpp
index 28724d630bd..4162289f0ce 100755
--- a/src/server/game/Server/Protocol/Handlers/NPCHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/NPCHandler.cpp
@@ -693,25 +693,25 @@ void WorldSession::HandleUnstablePet(WorldPacket & recv_data)
_unstablePetCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt));
}
-void WorldSession::HandleUnstablePetCallback(PreparedQueryResult result, uint32 petnumber)
+void WorldSession::HandleUnstablePetCallback(PreparedQueryResult result, uint32 petId)
{
if (!GetPlayer())
return;
- uint32 creature_id = 0;
+ uint32 petEntry = 0;
if (result)
{
Field* fields = result->Fetch();
- creature_id = fields[0].GetUInt32();
+ petEntry = fields[0].GetUInt32();
}
- if (!creature_id)
+ if (!petEntry)
{
SendStableResult(STABLE_ERR_STABLE);
return;
}
- CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(creature_id);
+ CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(petEntry);
if (!creatureInfo || !creatureInfo->isTameable(_player->CanTameExoticPets()))
{
// if problem in exotic pet
@@ -733,11 +733,11 @@ void WorldSession::HandleUnstablePetCallback(PreparedQueryResult result, uint32
if (pet)
_player->RemovePet(pet, PET_SAVE_AS_DELETED);
- Pet* newpet = new Pet(_player, HUNTER_PET);
- if (!newpet->LoadPetFromDB(_player, creature_id, petnumber))
+ Pet* newPet = new Pet(_player, HUNTER_PET);
+ if (!newPet->LoadPetFromDB(_player, petEntry, petId))
{
- delete newpet;
- newpet = NULL;
+ delete newPet;
+ newPet = NULL;
SendStableResult(STABLE_ERR_STABLE);
return;
}
diff --git a/src/server/game/Server/Protocol/Handlers/PetitionsHandler.cpp b/src/server/game/Server/Protocol/Handlers/PetitionsHandler.cpp
index 2e9b88bd3f0..fed84728efd 100755
--- a/src/server/game/Server/Protocol/Handlers/PetitionsHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/PetitionsHandler.cpp
@@ -372,18 +372,18 @@ void WorldSession::HandlePetitionRenameOpcode(WorldPacket & recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "Received opcode MSG_PETITION_RENAME"); // ok
- uint64 petitionguid;
+ uint64 petitionGuid;
uint32 type;
- std::string newname;
+ std::string newName;
- recv_data >> petitionguid; // guid
- recv_data >> newname; // new name
+ recv_data >> petitionGuid; // guid
+ recv_data >> newName; // new name
- Item* item = _player->GetItemByGuid(petitionguid);
+ Item* item = _player->GetItemByGuid(petitionGuid);
if (!item)
return;
- QueryResult result = CharacterDatabase.PQuery("SELECT type FROM petition WHERE petitionguid = '%u'", GUID_LOPART(petitionguid));
+ QueryResult result = CharacterDatabase.PQuery("SELECT type FROM petition WHERE petitionguid = '%u'", GUID_LOPART(petitionGuid));
if (result)
{
@@ -392,46 +392,48 @@ void WorldSession::HandlePetitionRenameOpcode(WorldPacket & recv_data)
}
else
{
- sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_PETITION_QUERY failed for petition (GUID: %u)", GUID_LOPART(petitionguid));
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_PETITION_QUERY failed for petition (GUID: %u)", GUID_LOPART(petitionGuid));
return;
}
if (type == GUILD_CHARTER_TYPE)
{
- if (sGuildMgr->GetGuildByName(newname))
+ if (sGuildMgr->GetGuildByName(newName))
{
- Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NAME_EXISTS_S, newname);
+ Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NAME_EXISTS_S, newName);
return;
}
- if (sObjectMgr->IsReservedName(newname) || !ObjectMgr::IsValidCharterName(newname))
+ if (sObjectMgr->IsReservedName(newName) || !ObjectMgr::IsValidCharterName(newName))
{
- Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NAME_INVALID, newname);
+ Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NAME_INVALID, newName);
return;
}
}
else
{
- if (sArenaTeamMgr->GetArenaTeamByName(newname))
+ if (sArenaTeamMgr->GetArenaTeamByName(newName))
{
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newname, "", ERR_ARENA_TEAM_NAME_EXISTS_S);
+ SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newName, "", ERR_ARENA_TEAM_NAME_EXISTS_S);
return;
}
- if (sObjectMgr->IsReservedName(newname) || !ObjectMgr::IsValidCharterName(newname))
+ if (sObjectMgr->IsReservedName(newName) || !ObjectMgr::IsValidCharterName(newName))
{
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newname, "", ERR_ARENA_TEAM_NAME_INVALID);
+ SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newName, "", ERR_ARENA_TEAM_NAME_INVALID);
return;
}
}
- std::string db_newname = newname;
- CharacterDatabase.EscapeString(db_newname);
- CharacterDatabase.PExecute("UPDATE petition SET name = '%s' WHERE petitionguid = '%u'",
- db_newname.c_str(), GUID_LOPART(petitionguid));
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_PETITION_NAME);
+
+ stmt->setString(0, newName);
+ stmt->setUInt32(1, GUID_LOPART(petitionGuid));
+
+ CharacterDatabase.Execute(stmt);
- sLog->outDebug(LOG_FILTER_NETWORKIO, "Petition (GUID: %u) renamed to '%s'", GUID_LOPART(petitionguid), newname.c_str());
- WorldPacket data(MSG_PETITION_RENAME, (8+newname.size()+1));
- data << uint64(petitionguid);
- data << newname;
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "Petition (GUID: %u) renamed to '%s'", GUID_LOPART(petitionGuid), newName.c_str());
+ WorldPacket data(MSG_PETITION_RENAME, (8+newName.size()+1));
+ data << uint64(petitionGuid);
+ data << newName;
SendPacket(&data);
}
@@ -440,34 +442,34 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket & recv_data)
sLog->outDebug(LOG_FILTER_NETWORKIO, "Received opcode CMSG_PETITION_SIGN"); // ok
Field* fields;
- uint64 petitionguid;
+ uint64 petitionGuid;
uint8 unk;
- recv_data >> petitionguid; // petition guid
+ recv_data >> petitionGuid; // petition guid
recv_data >> unk;
QueryResult result = CharacterDatabase.PQuery(
"SELECT ownerguid, "
" (SELECT COUNT(playerguid) FROM petition_sign WHERE petition_sign.petitionguid = '%u') AS signs, "
" type "
- "FROM petition WHERE petitionguid = '%u'", GUID_LOPART(petitionguid), GUID_LOPART(petitionguid));
+ "FROM petition WHERE petitionguid = '%u'", GUID_LOPART(petitionGuid), GUID_LOPART(petitionGuid));
if (!result)
{
- sLog->outError("Petition %u is not found for player %u %s", GUID_LOPART(petitionguid), GetPlayer()->GetGUIDLow(), GetPlayer()->GetName());
+ sLog->outError("Petition %u is not found for player %u %s", GUID_LOPART(petitionGuid), GetPlayer()->GetGUIDLow(), GetPlayer()->GetName());
return;
}
fields = result->Fetch();
- uint64 ownerguid = MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER);
+ uint64 ownerGuid = MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER);
uint8 signs = fields[1].GetUInt8();
uint32 type = fields[2].GetUInt32();
- uint32 plguidlo = _player->GetGUIDLow();
- if (GUID_LOPART(ownerguid) == plguidlo)
+ uint32 playerGuid = _player->GetGUIDLow();
+ if (GUID_LOPART(ownerGuid) == playerGuid)
return;
// not let enemies sign guild charter
- if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && GetPlayer()->GetTeam() != sObjectMgr->GetPlayerTeamByGUID(ownerguid))
+ if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && GetPlayer()->GetTeam() != sObjectMgr->GetPlayerTeamByGUID(ownerGuid))
{
if (type != GUILD_CHARTER_TYPE)
SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", "", ERR_ARENA_TEAM_NOT_ALLIED);
@@ -519,12 +521,12 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket & recv_data)
//client doesn't allow to sign petition two times by one character, but not check sign by another character from same account
//not allow sign another player from already sign player account
- result = CharacterDatabase.PQuery("SELECT playerguid FROM petition_sign WHERE player_account = '%u' AND petitionguid = '%u'", GetAccountId(), GUID_LOPART(petitionguid));
+ result = CharacterDatabase.PQuery("SELECT playerguid FROM petition_sign WHERE player_account = '%u' AND petitionguid = '%u'", GetAccountId(), GUID_LOPART(petitionGuid));
if (result)
{
WorldPacket data(SMSG_PETITION_SIGN_RESULTS, (8+8+4));
- data << uint64(petitionguid);
+ data << uint64(petitionGuid);
data << uint64(_player->GetGUID());
data << (uint32)PETITION_SIGN_ALREADY_SIGNED;
@@ -532,17 +534,24 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket & recv_data)
SendPacket(&data);
// update for owner if online
- if (Player* owner = ObjectAccessor::FindPlayer(ownerguid))
+ if (Player* owner = ObjectAccessor::FindPlayer(ownerGuid))
owner->GetSession()->SendPacket(&data);
return;
}
- CharacterDatabase.PExecute("INSERT INTO petition_sign (ownerguid, petitionguid, playerguid, player_account) VALUES ('%u', '%u', '%u', '%u')", GUID_LOPART(ownerguid), GUID_LOPART(petitionguid), plguidlo, GetAccountId());
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_PETITION_SIGNATURE);
+
+ stmt->setUInt32(0, GUID_LOPART(ownerGuid));
+ stmt->setUInt32(1, GUID_LOPART(petitionGuid));
+ stmt->setUInt32(2, playerGuid);
+ stmt->setUInt32(3, GetAccountId());
+
+ CharacterDatabase.Execute(stmt);
- sLog->outDebug(LOG_FILTER_NETWORKIO, "PETITION SIGN: GUID %u by player: %s (GUID: %u Account: %u)", GUID_LOPART(petitionguid), _player->GetName(), plguidlo, GetAccountId());
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "PETITION SIGN: GUID %u by player: %s (GUID: %u Account: %u)", GUID_LOPART(petitionGuid), _player->GetName(), playerGuid, GetAccountId());
WorldPacket data(SMSG_PETITION_SIGN_RESULTS, (8+8+4));
- data << uint64(petitionguid);
+ data << uint64(petitionGuid);
data << uint64(_player->GetGUID());
data << uint32(PETITION_SIGN_OK);
@@ -555,7 +564,7 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket & recv_data)
// item->SetUInt32Value(ITEM_FIELD_ENCHANTMENT_1_1+1, signs);
// update for owner if online
- if (Player* owner = ObjectAccessor::FindPlayer(ownerguid))
+ if (Player* owner = ObjectAccessor::FindPlayer(ownerGuid))
owner->GetSession()->SendPacket(&data);
}
diff --git a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp
index 269576a5696..ffe205304e3 100755
--- a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp
@@ -213,26 +213,26 @@ void WorldSession::HandleOpenItemOpcode(WorldPacket& recvPacket)
sLog->outDetail("bagIndex: %u, slot: %u", bagIndex, slot);
- Item* pItem = pUser->GetItemByPos(bagIndex, slot);
- if (!pItem)
+ Item* item = pUser->GetItemByPos(bagIndex, slot);
+ if (!item)
{
pUser->SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, NULL, NULL);
return;
}
- ItemTemplate const* proto = pItem->GetTemplate();
+ ItemTemplate const* proto = item->GetTemplate();
if (!proto)
{
- pUser->SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, pItem, NULL);
+ pUser->SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, item, NULL);
return;
}
// Verify that the bag is an actual bag or wrapped item that can be used "normally"
- if (!(proto->Flags & ITEM_PROTO_FLAG_OPENABLE) && !pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))
+ if (!(proto->Flags & ITEM_PROTO_FLAG_OPENABLE) && !item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))
{
- pUser->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW, pItem, NULL);
+ pUser->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW, item, NULL);
sLog->outError("Possible hacking attempt: Player %s [guid: %u] tried to open item [guid: %u, entry: %u] which is not openable!",
- pUser->GetName(), pUser->GetGUIDLow(), pItem->GetGUIDLow(), proto->ItemId);
+ pUser->GetName(), pUser->GetGUIDLow(), item->GetGUIDLow(), proto->ItemId);
return;
}
@@ -244,43 +244,48 @@ void WorldSession::HandleOpenItemOpcode(WorldPacket& recvPacket)
if (!lockInfo)
{
- pUser->SendEquipError(EQUIP_ERR_ITEM_LOCKED, pItem, NULL);
- sLog->outError("WORLD::OpenItem: item [guid = %u] has an unknown lockId: %u!", pItem->GetGUIDLow(), lockId);
+ pUser->SendEquipError(EQUIP_ERR_ITEM_LOCKED, item, NULL);
+ sLog->outError("WORLD::OpenItem: item [guid = %u] has an unknown lockId: %u!", item->GetGUIDLow(), lockId);
return;
}
// was not unlocked yet
- if (pItem->IsLocked())
+ if (item->IsLocked())
{
- pUser->SendEquipError(EQUIP_ERR_ITEM_LOCKED, pItem, NULL);
+ pUser->SendEquipError(EQUIP_ERR_ITEM_LOCKED, item, NULL);
return;
}
}
- if (pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))// wrapped?
+ if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))// wrapped?
{
- QueryResult result = CharacterDatabase.PQuery("SELECT entry, flags FROM character_gifts WHERE item_guid = '%u'", pItem->GetGUIDLow());
+ QueryResult result = CharacterDatabase.PQuery("SELECT entry, flags FROM character_gifts WHERE item_guid = '%u'", item->GetGUIDLow());
if (result)
{
Field* fields = result->Fetch();
uint32 entry = fields[0].GetUInt32();
uint32 flags = fields[1].GetUInt32();
- pItem->SetUInt64Value(ITEM_FIELD_GIFTCREATOR, 0);
- pItem->SetEntry(entry);
- pItem->SetUInt32Value(ITEM_FIELD_FLAGS, flags);
- pItem->SetState(ITEM_CHANGED, pUser);
+ item->SetUInt64Value(ITEM_FIELD_GIFTCREATOR, 0);
+ item->SetEntry(entry);
+ item->SetUInt32Value(ITEM_FIELD_FLAGS, flags);
+ item->SetState(ITEM_CHANGED, pUser);
}
else
{
- sLog->outError("Wrapped item %u don't have record in character_gifts table and will deleted", pItem->GetGUIDLow());
- pUser->DestroyItem(pItem->GetBagSlot(), pItem->GetSlot(), true);
+ sLog->outError("Wrapped item %u don't have record in character_gifts table and will deleted", item->GetGUIDLow());
+ pUser->DestroyItem(item->GetBagSlot(), item->GetSlot(), true);
return;
}
- CharacterDatabase.PExecute("DELETE FROM character_gifts WHERE item_guid = '%u'", pItem->GetGUIDLow());
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT);
+
+ stmt->setUInt32(0, item->GetGUIDLow());
+
+ CharacterDatabase.Execute(stmt);
}
else
- pUser->SendLoot(pItem->GetGUID(), LOOT_CORPSE);
+ pUser->SendLoot(item->GetGUID(), LOOT_CORPSE);
}
void WorldSession::HandleGameObjectUseOpcode(WorldPacket & recv_data)
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 35173387839..3288224e1f2 100755
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -529,7 +529,13 @@ void WorldSession::LogoutPlayer(bool Save)
///- Since each account can only have one online character at any given time, ensure all characters for active account are marked as offline
//No SQL injection as AccountId is uint32
- CharacterDatabase.PExecute("UPDATE characters SET online = 0 WHERE account = '%u'", GetAccountId());
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ACCOUNT_ONLINE);
+
+ stmt->setUInt32(0, GetAccountId());
+
+ CharacterDatabase.Execute(stmt);
+
sLog->outDebug(LOG_FILTER_NETWORKIO, "SESSION: Sent SMSG_LOGOUT_COMPLETE Message");
}
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 45cb5b64e43..ebed71c7da3 100755
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -587,7 +587,7 @@ class WorldSession
void HandleStablePet(WorldPacket& recvPacket);
void HandleStablePetCallback(PreparedQueryResult result);
void HandleUnstablePet(WorldPacket& recvPacket);
- void HandleUnstablePetCallback(PreparedQueryResult result, uint32 petnumber);
+ void HandleUnstablePetCallback(PreparedQueryResult result, uint32 petId);
void HandleBuyStableSlot(WorldPacket& recvPacket);
void HandleStableRevivePet(WorldPacket& recvPacket);
void HandleStableSwapPet(WorldPacket& recvPacket);
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 0ddc03e3d5c..58f62396ac9 100755
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -889,7 +889,13 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
if (mutetime < 0)
{
mutetime = time(NULL) + llabs(mutetime);
- LoginDatabase.PExecute("UPDATE account SET mutetime = " SI64FMTD " WHERE id = '%u'", mutetime, id);
+
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPDATE_MUTE_TIME);
+
+ stmt->setInt64(0, mutetime);
+ stmt->setUInt32(1, id);
+
+ LoginDatabase.Execute(stmt);
}
locale = LocaleConstant (fields[8].GetUInt8());
@@ -985,14 +991,13 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
isRecruiter = true;
// Update the last_ip in the database
- // No SQL injection, username escaped.
- LoginDatabase.EscapeString (address);
- LoginDatabase.PExecute ("UPDATE account "
- "SET last_ip = '%s' "
- "WHERE username = '%s'",
- address.c_str(),
- safe_account.c_str());
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPDATE_LAST_IP);
+
+ stmt->setString(0, address);
+ stmt->setString(1, account);
+
+ LoginDatabase.Execute(stmt);
// NOTE ATM the socket is single-threaded, have this in mind ...
ACE_NEW_RETURN (m_Session, WorldSession (id, this, AccountTypes(security), expansion, mutetime, locale, recruiter, isRecruiter), -1);
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index fbb1a1965d8..de49b2cf579 100755
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -2033,7 +2033,7 @@ uint32 Spell::SelectEffectTargets(uint32 i, SpellImplicitTargetInfo const& cur)
float max_dis = m_spellInfo->GetMaxRange(true);
float dis = (float)rand_norm() * (max_dis - min_dis) + min_dis;
float x, y, z, angle;
- angle = (float)rand_norm() * static_cast<float>(M_PI * 70.0f / 180.0f) - static_cast<float>(M_PI * 35.0f / 180.0f);
+ angle = (float)rand_norm() * static_cast<float>(M_PI * 35.0f / 180.0f) - static_cast<float>(M_PI * 17.5f / 180.0f);
m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE, dis, angle);
m_targets.SetDst(x, y, z, m_caster->GetOrientation());
break;
diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp
index 10c1f4a1dfd..c657248c595 100755
--- a/src/server/game/Tickets/TicketMgr.cpp
+++ b/src/server/game/Tickets/TicketMgr.cpp
@@ -207,7 +207,10 @@ void TicketMgr::ResetTickets()
sTicketMgr->RemoveTicket(itr->second->GetId());
_lastTicketId = 0;
- CharacterDatabase.PExecute("TRUNCATE TABLE gm_tickets");
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ALL_GM_TICKETS);
+
+ CharacterDatabase.Execute(stmt);
}
void TicketMgr::LoadTickets()
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 9ad847615d1..ea3f86c81b3 100755
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -2717,7 +2717,9 @@ void World::SetPlayerSecurityLimit(AccountTypes _sec)
void World::ResetWeeklyQuests()
{
- CharacterDatabase.Execute("DELETE FROM character_queststatus_weekly");
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_WEEKLY);
+ CharacterDatabase.Execute(stmt);
+
for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr)
if (itr->second->GetPlayer())
itr->second->GetPlayer()->ResetWeeklyQuestStatus();
@@ -2732,7 +2734,10 @@ void World::ResetWeeklyQuests()
void World::ResetRandomBG()
{
sLog->outDetail("Random BG status reset for all characters.");
- CharacterDatabase.Execute("DELETE FROM character_battleground_random");
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_BATTLEGROUND_RANDOM);
+ CharacterDatabase.Execute(stmt);
+
for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr)
if (itr->second->GetPlayer())
itr->second->GetPlayer()->SetRandomWinner(false);
diff --git a/src/server/scripts/Commands/cs_account.cpp b/src/server/scripts/Commands/cs_account.cpp
index ae3250ad7b7..bcef7ac9ba9 100644
--- a/src/server/scripts/Commands/cs_account.cpp
+++ b/src/server/scripts/Commands/cs_account.cpp
@@ -81,8 +81,13 @@ public:
return false;
}
- // No SQL injection
- LoginDatabase.PExecute("UPDATE account SET expansion = '%d' WHERE id = '%u'", expansion, accountId);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPDATE_EXPANSION);
+
+ stmt->setUInt8(0, uint8(expansion));
+ stmt->setUInt32(1, accountId);
+
+ LoginDatabase.Execute(stmt);
+
handler->PSendSysMessage(LANG_ACCOUNT_ADDON, expansion);
return true;
}
@@ -242,17 +247,25 @@ public:
}
std::string param = (char*)args;
- if (param == "on")
- {
- LoginDatabase.PExecute("UPDATE account SET locked = '1' WHERE id = '%d'", handler->GetSession()->GetAccountId());
- handler->PSendSysMessage(LANG_COMMAND_ACCLOCKLOCKED);
- return true;
- }
- if (param == "off")
+ if (!param.empty())
{
- LoginDatabase.PExecute("UPDATE account SET locked = '0' WHERE id = '%d'", handler->GetSession()->GetAccountId());
- handler->PSendSysMessage(LANG_COMMAND_ACCLOCKUNLOCKED);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPDATE_ACCOUNT_LOCK);
+
+ if (param == "on")
+ {
+ stmt->setBool(0, true); // locked
+ handler->PSendSysMessage(LANG_COMMAND_ACCLOCKLOCKED);
+ }
+ else if (param == "off")
+ {
+ stmt->setBool(0, false); // unlocked
+ handler->PSendSysMessage(LANG_COMMAND_ACCLOCKUNLOCKED);
+ }
+
+ stmt->setUInt32(1, handler->GetSession()->GetAccountId());
+
+ LoginDatabase.Execute(stmt);
return true;
}
diff --git a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_flamegor.cpp b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_flamegor.cpp
index 4e44a70475f..a7c984fa536 100644
--- a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_flamegor.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_flamegor.cpp
@@ -70,7 +70,7 @@ public:
if (ShadowFlame_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SHADOWFLAME);
- ShadowFlame_Timer = 15000 + rand()%7000;
+ ShadowFlame_Timer = urand(15000, 22000);
} else ShadowFlame_Timer -= diff;
//WingBuffet_Timer
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
index 8454150d830..389f0d0a959 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
@@ -824,7 +824,7 @@ public:
void Reset()
{
ChaseTimer = 30000;
- FearTimer = 25000 + rand()%10000;
+ FearTimer = urand(25000, 35000);
SwipeTimer = 5000;
HoodGUID = 0;
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
index 55254a3b8ee..bf58d6f2853 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
@@ -467,7 +467,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
if (ResetThreatTimer <= diff)
{
DoResetThreat();
- ResetThreatTimer = 5000 + rand()%15000;
+ ResetThreatTimer = urand(5000, 20000);
} else ResetThreatTimer -= diff;
}
};
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
index 305ce97687a..93b0b45a3e3 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
@@ -122,13 +122,13 @@ public:
instance->SetData(DATA_SELIN_EVENT, NOT_STARTED);
} else sLog->outError(ERROR_INST_DATA);
- DrainLifeTimer = 3000 + rand()%4000;
+ DrainLifeTimer = urand(3000, 7000);
DrainManaTimer = DrainLifeTimer + 5000;
FelExplosionTimer = 2100;
if (IsHeroic())
- DrainCrystalTimer = 10000 + rand()%5000;
+ DrainCrystalTimer = urand(10000, 15000);
else
- DrainCrystalTimer = 20000 + rand()%5000;
+ DrainCrystalTimer = urand(20000, 25000);
EmpowerTimer = 10000;
IsDraining = false;
@@ -285,9 +285,9 @@ public:
{
SelectNearestCrystal();
if (IsHeroic())
- DrainCrystalTimer = 10000 + rand()%5000;
+ DrainCrystalTimer = urand(10000, 15000);
else
- DrainCrystalTimer = 20000 + rand()%5000;
+ DrainCrystalTimer = urand(20000, 25000);
} else DrainCrystalTimer -= diff;
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
index 8179c9fccaa..6d316eff94f 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
@@ -482,21 +482,21 @@ public:
{
Shout();
DoCast(me, SPELL_RENEW);
- uiRenew_timer = 1000 + rand()%5000;
+ uiRenew_timer = urand(1000, 6000);
} else uiRenew_timer -= diff;
if (uiInquisitor_Penance_timer <= diff)
{
Shout();
DoCast(me->getVictim(), SPELL_INQUISITOR_PENANCE);
- uiInquisitor_Penance_timer = 2000 + rand()%5000;
+ uiInquisitor_Penance_timer = urand(2000, 7000);
} else uiInquisitor_Penance_timer -= diff;
if (uiValroth_Smite_timer <= diff)
{
Shout();
DoCast(me->getVictim(), SPELL_VALROTH_SMITE);
- uiValroth_Smite_timer = 1000 + rand()%5000;
+ uiValroth_Smite_timer = urand(1000, 6000);
} else uiValroth_Smite_timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
index 3ee71ce3609..5b89651f2b0 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
@@ -1352,31 +1352,31 @@ public:
if (uiAnti_magic_zone <= diff)
{
DoCast(me, SPELL_ANTI_MAGIC_ZONE1);
- uiAnti_magic_zone = 25000 + rand()%5000;
+ uiAnti_magic_zone = urand(25000, 30000);
} else uiAnti_magic_zone -= diff;
if (uiDeath_strike <= diff)
{
DoCast(me->getVictim(), SPELL_DEATH_STRIKE);
- uiDeath_strike = 5000 + rand()%5000;
+ uiDeath_strike = urand(5000, 10000);
} else uiDeath_strike -= diff;
if (uiDeath_embrace <= diff)
{
DoCast(me->getVictim(), SPELL_DEATH_EMBRACE);
- uiDeath_embrace = 5000 + rand()%5000;
+ uiDeath_embrace = urand(5000, 10000);
} else uiDeath_embrace -= diff;
if (uiIcy_touch <= diff)
{
DoCast(me->getVictim(), SPELL_ICY_TOUCH1);
- uiIcy_touch = 5000 + rand()%5000;
+ uiIcy_touch = urand(5000, 10000);
} else uiIcy_touch -= diff;
if (uiUnholy_blight <= diff)
{
DoCast(me->getVictim(), SPELL_UNHOLY_BLIGHT);
- uiUnholy_blight = 5000 + rand()%5000;
+ uiUnholy_blight = urand(5000, 10000);
} else uiUnholy_blight -= diff;
if (uiFight_speech <= diff)
@@ -1387,7 +1387,7 @@ public:
SAY_LIGHT_OF_DAWN18, SAY_LIGHT_OF_DAWN19, SAY_LIGHT_OF_DAWN20,
SAY_LIGHT_OF_DAWN21, SAY_LIGHT_OF_DAWN22, SAY_LIGHT_OF_DAWN23,
SAY_LIGHT_OF_DAWN24), me);
- uiFight_speech = 15000 + rand()%5000;
+ uiFight_speech = urand(15000, 20000);
} else uiFight_speech -= diff;
// Check spawns
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp
index a5fe8a5c6db..25295e62ff3 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp
@@ -111,7 +111,7 @@ public:
if (AoESilence_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_AOESILENCE);
- AoESilence_Timer = 15000 + rand()%5000;
+ AoESilence_Timer = urand(15000, 20000);
} else AoESilence_Timer -= diff;
//ArcaneExplosion_Timer
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp
index 16875dce85f..733b3a91f93 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp
@@ -92,7 +92,7 @@ public:
if (FlameShock_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_FLAMESHOCK);
- FlameShock_Timer = 10000 + rand()%5000;
+ FlameShock_Timer = urand(10000, 15000);
} else FlameShock_Timer -= diff;
//FlameSpike_Timer
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
index 2277d867455..e66c639896e 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
@@ -107,7 +107,7 @@ public:
if (ShadowWordPain_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SHADOWWORDPAIN);
- ShadowWordPain_Timer = 5000 + rand()%10000;
+ ShadowWordPain_Timer = urand(5000, 15000);
} else ShadowWordPain_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
index 12dd67e009d..d930dd4a14c 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
@@ -108,14 +108,14 @@ public:
if (ShadowShield_Timer <= diff)
{
DoCast(me, SPELL_SHADOWSHIELD);
- ShadowShield_Timer = 14000 + rand()%14000;
+ ShadowShield_Timer = urand(14000, 28000);
} else ShadowShield_Timer -= diff;
//Curse_Timer
if (Curse_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_CURSE);
- Curse_Timer = 15000 + rand()%12000;
+ Curse_Timer = urand(15000, 27000);
} else Curse_Timer -= diff;
//Teleporting Random Target to one of the six pre boss rooms and spawn 3-4 skeletons near the gamer.
@@ -214,7 +214,7 @@ public:
break;
}
}
- Teleport_Timer = 20000 + rand()%15000;
+ Teleport_Timer = urand(20000, 35000);
} else Teleport_Timer -= diff;
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
index 9dd9f1fedb5..2d1d78193ed 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
@@ -171,7 +171,7 @@ public:
void Reset()
{
- Cleave_Timer = 2000 + rand()%6000;
+ Cleave_Timer = urand(2000, 8000);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
}
@@ -192,7 +192,7 @@ public:
DoCast(me->getVictim(), SPELL_CLEAVE);
//5-8 seconds
- Cleave_Timer = 5000 + rand()%3000;
+ Cleave_Timer = urand(5000, 8000);
} else Cleave_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
index 17ea8a04293..3cbf00f291d 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
@@ -131,7 +131,7 @@ public:
if (m_uiMindBlast_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_MINDBLAST);
- m_uiMindBlast_Timer = 15000 + rand()%5000;
+ m_uiMindBlast_Timer = urand(15000, 20000);
} else m_uiMindBlast_Timer -= uiDiff;
//CrusadersHammer
@@ -173,7 +173,7 @@ public:
if (m_uiMindBlast_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_MINDBLAST);
- m_uiMindBlast_Timer = 15000 + rand()%5000;
+ m_uiMindBlast_Timer = urand(15000, 20000);
} else m_uiMindBlast_Timer -= uiDiff;
//ShadowShock
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
index df3bb5d4525..747d9e29ec1 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
@@ -612,7 +612,7 @@ public:
KalecGUID = 0;
}
- ShadowBoltTimer = 7000 + rand()%3 * 1000;
+ ShadowBoltTimer = urand(7, 10) * 1000;
AgonyCurseTimer = 20000;
CorruptionStrikeTimer = 13000;
CheckTimer = 1000;
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
index 413897c94e8..ffccfbce2b6 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
@@ -296,13 +296,13 @@ class boss_akilzon : public CreatureScript
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1);
if (!target) target = me->getVictim();
DoCast(target, SPELL_GUST_OF_WIND);
- GustOfWind_Timer = (20+rand()%10)*1000; //20 to 30 seconds(bosskillers)
+ GustOfWind_Timer = urand(20, 30) * 1000; //20 to 30 seconds(bosskillers)
} else GustOfWind_Timer -= diff;
if (CallLighting_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_CALL_LIGHTNING);
- CallLighting_Timer = (12 + rand()%5)*1000; //totaly random timer. can't find any info on this
+ CallLighting_Timer = urand(12, 17) * 1000; //totaly random timer. can't find any info on this
} else CallLighting_Timer -= diff;
if (!isRaining && ElectricalStorm_Timer < uint32(8000 + rand() % 5000))
@@ -406,7 +406,7 @@ class mob_akilzon_eagle : public CreatureScript
void Reset()
{
- EagleSwoop_Timer = 5000 + rand()%5000;
+ EagleSwoop_Timer = urand(5000, 10000);
arrived = true;
TargetGUID = 0;
me->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING);
@@ -425,7 +425,7 @@ class mob_akilzon_eagle : public CreatureScript
DoCast(target, SPELL_EAGLE_SWOOP, true);
TargetGUID = 0;
me->SetSpeed(MOVE_RUN, 1.2f);
- EagleSwoop_Timer = 5000 + rand()%5000;
+ EagleSwoop_Timer = urand(5000, 10000);
}
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
index a3c7aae4132..80c31d42a46 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
@@ -263,7 +263,7 @@ class boss_halazzi : public CreatureScript
DoCast(target, SPELL_EARTHSHOCK);
else
DoCast(target, SPELL_FLAMESHOCK);
- ShockTimer = 10000 + rand()%5000;
+ ShockTimer = urand(10000, 15000);
}
} else ShockTimer -= diff;
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp
index 3ff465a3c1d..0ae8a9bc5c4 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp
@@ -145,10 +145,10 @@ class boss_nalorakk : public CreatureScript
if (instance)
instance->SetData(DATA_NALORAKKEVENT, NOT_STARTED);
- Surge_Timer = 15000 + rand()%5000;
- BrutalSwipe_Timer = 7000 + rand()%5000;
- Mangle_Timer = 10000 + rand()%5000;
- ShapeShift_Timer = 45000 + rand()%5000;
+ Surge_Timer = urand(15000, 20000);
+ BrutalSwipe_Timer = urand(7000, 12000);
+ Mangle_Timer = urand(10000, 15000);
+ ShapeShift_Timer = urand(45000, 50000);
Berserk_Timer = 600000;
inBearForm = false;
@@ -371,10 +371,10 @@ class boss_nalorakk : public CreatureScript
me->MonsterYell(YELL_SHIFTEDTOTROLL, LANG_UNIVERSAL, 0);
DoPlaySoundToSet(me, SOUND_YELL_TOTROLL);
me->RemoveAurasDueToSpell(SPELL_BEARFORM);
- Surge_Timer = 15000 + rand()%5000;
- BrutalSwipe_Timer = 7000 + rand()%5000;
- Mangle_Timer = 10000 + rand()%5000;
- ShapeShift_Timer = 45000 + rand()%5000;
+ Surge_Timer = urand(15000, 20000);
+ BrutalSwipe_Timer = urand(7000, 12000);
+ Mangle_Timer = urand(10000, 15000);
+ ShapeShift_Timer = urand(45000, 50000);
inBearForm = false;
}
else
@@ -385,8 +385,8 @@ class boss_nalorakk : public CreatureScript
DoCast(me, SPELL_BEARFORM, true);
LaceratingSlash_Timer = 2000; // dur 18s
RendFlesh_Timer = 3000; // dur 5s
- DeafeningRoar_Timer = 5000 + rand()%5000; // dur 2s
- ShapeShift_Timer = 20000 + rand()%5000; // dur 30s
+ DeafeningRoar_Timer = urand(5000, 10000); // dur 2s
+ ShapeShift_Timer = urand(20000, 25000); // dur 30s
inBearForm = true;
}
} else ShapeShift_Timer -= diff;
@@ -396,7 +396,7 @@ class boss_nalorakk : public CreatureScript
if (BrutalSwipe_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_BRUTALSWIPE);
- BrutalSwipe_Timer = 7000 + rand()%5000;
+ BrutalSwipe_Timer = urand(7000, 12000);
} else BrutalSwipe_Timer -= diff;
if (Mangle_Timer <= diff)
@@ -406,7 +406,7 @@ class boss_nalorakk : public CreatureScript
DoCast(me->getVictim(), SPELL_MANGLE);
Mangle_Timer = 1000;
}
- else Mangle_Timer = 10000 + rand()%5000;
+ else Mangle_Timer = urand(10000, 15000);
} else Mangle_Timer -= diff;
if (Surge_Timer <= diff)
@@ -416,7 +416,7 @@ class boss_nalorakk : public CreatureScript
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 45, true);
if (target)
DoCast(target, SPELL_SURGE);
- Surge_Timer = 15000 + rand()%5000;
+ Surge_Timer = urand(15000, 20000);
} else Surge_Timer -= diff;
}
else
@@ -424,19 +424,19 @@ class boss_nalorakk : public CreatureScript
if (LaceratingSlash_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_LACERATINGSLASH);
- LaceratingSlash_Timer = 18000 + rand()%5000;
+ LaceratingSlash_Timer = urand(18000, 23000);
} else LaceratingSlash_Timer -= diff;
if (RendFlesh_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_RENDFLESH);
- RendFlesh_Timer = 5000 + rand()%5000;
+ RendFlesh_Timer = urand(5000, 10000);
} else RendFlesh_Timer -= diff;
if (DeafeningRoar_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_DEAFENINGROAR);
- DeafeningRoar_Timer = 15000 + rand()%5000;
+ DeafeningRoar_Timer = urand(15000, 20000);
} else DeafeningRoar_Timer -= diff;
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
index ae6a25d2c17..5dbe3fc9409 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
@@ -430,7 +430,7 @@ class boss_zuljin : public CreatureScript
if (Whirlwind_Timer <= diff)
{
DoCast(me, SPELL_WHIRLWIND);
- Whirlwind_Timer = 15000 + rand()%5000;
+ Whirlwind_Timer = urand(15000, 20000);
} else Whirlwind_Timer -= diff;
if (Grievous_Throw_Timer <= diff)
@@ -489,7 +489,7 @@ class boss_zuljin : public CreatureScript
++Claw_Counter;
if (Claw_Counter == 12)
{
- Claw_Rage_Timer = 15000 + rand()%5000;
+ Claw_Rage_Timer = urand(15000, 20000);
me->SetSpeed(MOVE_RUN, 1.2f);
AttackStart(Unit::GetUnit(*me, TankGUID));
TankGUID = 0;
@@ -537,7 +537,7 @@ class boss_zuljin : public CreatureScript
++Claw_Counter;
if (Claw_Counter == 9)
{
- Lynx_Rush_Timer = 15000 + rand()%5000;
+ Lynx_Rush_Timer = urand(15000, 20000);
me->SetSpeed(MOVE_RUN, 1.2f);
AttackStart(Unit::GetUnit(*me, TankGUID));
TankGUID = 0;
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
index c515b625e6f..5ca43e9268e 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
@@ -66,7 +66,7 @@ class boss_gahzranka : public CreatureScript
if (Frostbreath_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_FROSTBREATH);
- Frostbreath_Timer = 7000 + rand()%4000;
+ Frostbreath_Timer = urand(7000, 11000);
} else Frostbreath_Timer -= diff;
//MassiveGeyser_Timer
@@ -75,14 +75,14 @@ class boss_gahzranka : public CreatureScript
DoCast(me->getVictim(), SPELL_MASSIVEGEYSER);
DoResetThreat();
- MassiveGeyser_Timer = 22000 + rand()%10000;
+ MassiveGeyser_Timer = urand(22000, 32000);
} else MassiveGeyser_Timer -= diff;
//Slam_Timer
if (Slam_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SLAM);
- Slam_Timer = 12000 + rand()%8000;
+ Slam_Timer = urand(12000, 20000);
} else Slam_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp
index e01dafd4777..d3922602a17 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp
@@ -47,8 +47,8 @@ class boss_grilek : public CreatureScript
void Reset()
{
- Avartar_Timer = 15000 + rand()%10000;
- GroundTremor_Timer = 8000 + rand()%8000;
+ Avartar_Timer = urand(15000, 25000);
+ GroundTremor_Timer = urand(8000, 16000);
}
void EnterCombat(Unit* /*who*/)
@@ -75,14 +75,14 @@ class boss_grilek : public CreatureScript
if (target)
AttackStart(target);
- Avartar_Timer = 25000 + rand()%10000;
+ Avartar_Timer = urand(25000, 35000);
} else Avartar_Timer -= diff;
//GroundTremor_Timer
if (GroundTremor_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_GROUNDTREMOR);
- GroundTremor_Timer = 12000 + rand()%4000;
+ GroundTremor_Timer = urand(12000, 16000);
} else GroundTremor_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
index 77b8955158a..484499b1567 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
@@ -126,7 +126,7 @@ class boss_hakkar : public CreatureScript
if (CorruptedBlood_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_CORRUPTEDBLOOD);
- CorruptedBlood_Timer = 30000 + rand()%15000;
+ CorruptedBlood_Timer = urand(30000, 45000);
} else CorruptedBlood_Timer -= diff;
//CauseInsanity_Timer
@@ -135,7 +135,7 @@ class boss_hakkar : public CreatureScript
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_CAUSEINSANITY);
- CauseInsanity_Timer = 35000 + rand()%8000;
+ CauseInsanity_Timer = urand(35000, 43000);
} else CauseInsanity_Timer -= diff;*/
//WillOfHakkar_Timer
@@ -144,7 +144,7 @@ class boss_hakkar : public CreatureScript
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_WILLOFHAKKAR);
- WillOfHakkar_Timer = 25000 + rand()%10000;
+ WillOfHakkar_Timer = urand(25000, 35000);
} else WillOfHakkar_Timer -= diff;
if (!Enraged && Enrage_Timer <= diff)
@@ -163,7 +163,7 @@ class boss_hakkar : public CreatureScript
if (AspectOfJeklik_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_ASPECT_OF_JEKLIK);
- AspectOfJeklik_Timer = 10000 + rand()%4000;
+ AspectOfJeklik_Timer = urand(10000, 14000);
} else AspectOfJeklik_Timer -= diff;
}
}
@@ -234,7 +234,7 @@ class boss_hakkar : public CreatureScript
DoCast(me, SPELL_ASPECT_OF_ARLOKK);
DoResetThreat();
- AspectOfArlokk_Timer = 10000 + rand()%5000;
+ AspectOfArlokk_Timer = urand(10000, 15000);
} else AspectOfArlokk_Timer -= diff;
}
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
index b8f4b0a50a1..73fa91dbdd8 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
@@ -48,9 +48,9 @@ class boss_hazzarah : public CreatureScript
void Reset()
{
- ManaBurn_Timer = 4000 + rand()%6000;
- Sleep_Timer = 10000 + rand()%8000;
- Illusions_Timer = 10000 + rand()%8000;
+ ManaBurn_Timer = urand(4000, 10000);
+ Sleep_Timer = urand(10000, 18000);
+ Illusions_Timer = urand(10000, 18000);
}
void EnterCombat(Unit* /*who*/)
@@ -66,14 +66,14 @@ class boss_hazzarah : public CreatureScript
if (ManaBurn_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_MANABURN);
- ManaBurn_Timer = 8000 + rand()%8000;
+ ManaBurn_Timer = urand(8000, 16000);
} else ManaBurn_Timer -= diff;
//Sleep_Timer
if (Sleep_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SLEEP);
- Sleep_Timer = 12000 + rand()%8000;
+ Sleep_Timer = urand(12000, 20000);
} else Sleep_Timer -= diff;
//Illusions_Timer
@@ -93,7 +93,7 @@ class boss_hazzarah : public CreatureScript
Illusion->AI()->AttackStart(target);
}
- Illusions_Timer = 15000 + rand()%10000;
+ Illusions_Timer = urand(15000, 25000);
} else Illusions_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
index fcb492d47f7..87dc0e372f6 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
@@ -119,19 +119,19 @@ class boss_jeklik : public CreatureScript
AttackStart(target);
}
- Charge_Timer = 15000 + rand()%15000;
+ Charge_Timer = urand(15000, 30000);
} else Charge_Timer -= diff;
if (SonicBurst_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SONICBURST);
- SonicBurst_Timer = 8000 + rand()%5000;
+ SonicBurst_Timer = urand(8000, 13000);
} else SonicBurst_Timer -= diff;
if (Screech_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SCREECH);
- Screech_Timer = 18000 + rand()%8000;
+ Screech_Timer = urand(18000, 26000);
} else Screech_Timer -= diff;
if (SpawnBats_Timer <= diff)
@@ -168,7 +168,7 @@ class boss_jeklik : public CreatureScript
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
DoCast(target, SPELL_SHADOW_WORD_PAIN);
- ShadowWordPain_Timer = 12000 + rand()%6000;
+ ShadowWordPain_Timer = urand(12000, 18000);
}
}ShadowWordPain_Timer -=diff;
@@ -182,14 +182,14 @@ class boss_jeklik : public CreatureScript
{
me->InterruptNonMeleeSpells(false);
DoCast(me->getVictim(), SPELL_CHAIN_MIND_FLAY);
- ChainMindFlay_Timer = 15000 + rand()%15000;
+ ChainMindFlay_Timer = urand(15000, 30000);
}ChainMindFlay_Timer -=diff;
if (GreaterHeal_Timer <= diff)
{
me->InterruptNonMeleeSpells(false);
DoCast(me, SPELL_GREATERHEAL);
- GreaterHeal_Timer = 25000 + rand()%10000;
+ GreaterHeal_Timer = urand(25000, 35000);
}GreaterHeal_Timer -=diff;
if (SpawnFlyingBats_Timer <= diff)
@@ -202,7 +202,7 @@ class boss_jeklik : public CreatureScript
if (FlyingBat)
FlyingBat->AI()->AttackStart(target);
- SpawnFlyingBats_Timer = 10000 + rand()%5000;
+ SpawnFlyingBats_Timer = urand(10000, 15000);
} else SpawnFlyingBats_Timer -=diff;
}
else
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
index 7c8e53038ab..9c82c3eddfb 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
@@ -83,7 +83,7 @@ class boss_jindo : public CreatureScript
if (BrainWashTotem_Timer <= diff)
{
DoCast(me, SPELL_BRAINWASHTOTEM);
- BrainWashTotem_Timer = 18000 + rand()%8000;
+ BrainWashTotem_Timer = urand(18000, 26000);
} else BrainWashTotem_Timer -= diff;
//HealingWard_Timer
@@ -91,7 +91,7 @@ class boss_jindo : public CreatureScript
{
//DoCast(me, SPELL_POWERFULLHEALINGWARD);
me->SummonCreature(14987, me->GetPositionX()+3, me->GetPositionY()-2, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30000);
- HealingWard_Timer = 14000 + rand()%6000;
+ HealingWard_Timer = urand(14000, 20000);
} else HealingWard_Timer -= diff;
//Hex_Timer
@@ -102,7 +102,7 @@ class boss_jindo : public CreatureScript
if (DoGetThreat(me->getVictim()))
DoModifyThreatPercent(me->getVictim(), -80);
- Hex_Timer = 12000 + rand()%8000;
+ Hex_Timer = urand(12000, 20000);
} else Hex_Timer -= diff;
//Casting the delusion curse with a shade. So shade will attack the same target with the curse.
@@ -117,7 +117,7 @@ class boss_jindo : public CreatureScript
Shade->AI()->AttackStart(target);
}
- Delusions_Timer = 4000 + rand()%8000;
+ Delusions_Timer = urand(4000, 12000);
} else Delusions_Timer -= diff;
//Teleporting a random gamer and spawning 9 skeletons that will attack this gamer
@@ -162,7 +162,7 @@ class boss_jindo : public CreatureScript
Skeletons->AI()->AttackStart(target);
}
- Teleport_Timer = 15000 + rand()%8000;
+ Teleport_Timer = urand(15000, 23000);
} else Teleport_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
index 7dc357f692a..06ae34b79b2 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
@@ -325,7 +325,7 @@ class mob_ohgan : public CreatureScript
if (SunderArmor_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SUNDERARMOR);
- SunderArmor_Timer = 10000 + rand()%5000;
+ SunderArmor_Timer = urand(10000, 15000);
} else SunderArmor_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp
index f6704a50e6f..5dafa54a2ba 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp
@@ -105,13 +105,13 @@ class boss_marli : public CreatureScript
if (PoisonVolley_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_POISONVOLLEY);
- PoisonVolley_Timer = 10000 + rand()%10000;
+ PoisonVolley_Timer = urand(10000, 20000);
} else PoisonVolley_Timer -= diff;
if (!PhaseTwo && Aspect_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_ASPECT_OF_MARLI);
- Aspect_Timer = 13000 + rand()%5000;
+ Aspect_Timer = urand(13000, 18000);
} else Aspect_Timer -= diff;
if (!Spawned && SpawnStartSpiders_Timer <= diff)
@@ -149,7 +149,7 @@ class boss_marli : public CreatureScript
Creature* Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if (Spider)
Spider->AI()->AttackStart(target);
- SpawnSpider_Timer = 12000 + rand()%5000;
+ SpawnSpider_Timer = urand(12000, 17000);
} else SpawnSpider_Timer -= diff;
if (!PhaseTwo && Transform_Timer <= diff)
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp
index bbff6a55ffb..c3bf09ee28d 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp
@@ -55,11 +55,11 @@ class boss_renataki : public CreatureScript
void Reset()
{
- Invisible_Timer = 8000 + rand()%10000;
+ Invisible_Timer = urand(8000, 18000);
Ambush_Timer = 3000;
Visible_Timer = 4000;
- Aggro_Timer = 15000 + rand()%10000;
- ThousandBlades_Timer = 4000 + rand()%4000;
+ Aggro_Timer = urand(15000, 25000);
+ ThousandBlades_Timer = urand(4000, 8000);
Invisible = false;
Ambushed = false;
@@ -85,7 +85,7 @@ class boss_renataki : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
Invisible = true;
- Invisible_Timer = 15000 + rand()%15000;
+ Invisible_Timer = urand(15000, 30000);
} else Invisible_Timer -= diff;
if (Invisible)
@@ -135,13 +135,13 @@ class boss_renataki : public CreatureScript
if (target)
AttackStart(target);
- Aggro_Timer = 7000 + rand()%13000;
+ Aggro_Timer = urand(7000, 20000);
} else Aggro_Timer -= diff;
if (ThousandBlades_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_THOUSANDBLADES);
- ThousandBlades_Timer = 7000 + rand()%5000;
+ ThousandBlades_Timer = urand(7000, 12000);
} else ThousandBlades_Timer -= diff;
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp
index 4fbb5cd1109..743ec211529 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp
@@ -167,13 +167,13 @@ class boss_thekal : public CreatureScript
if (!PhaseTwo && MortalCleave_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_MORTALCLEAVE);
- MortalCleave_Timer = 15000 + rand()%5000;
+ MortalCleave_Timer = urand(15000, 20000);
} else MortalCleave_Timer -= diff;
if (!PhaseTwo && Silence_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SILENCE);
- Silence_Timer = 20000 + rand()%5000;
+ Silence_Timer = urand(20000, 25000);
} else Silence_Timer -= diff;
if (!PhaseTwo && !WasDead && !HealthAbovePct(5))
@@ -226,7 +226,7 @@ class boss_thekal : public CreatureScript
AttackStart(target);
}
- Charge_Timer = 15000 + rand()%7000;
+ Charge_Timer = urand(15000, 22000);
} else Charge_Timer -= diff;
if (Frenzy_Timer <= diff)
@@ -238,13 +238,13 @@ class boss_thekal : public CreatureScript
if (ForcePunch_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SILENCE);
- ForcePunch_Timer = 16000 + rand()%5000;
+ ForcePunch_Timer = urand(16000, 21000);
} else ForcePunch_Timer -= diff;
if (SummonTigers_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SUMMONTIGERS);
- SummonTigers_Timer = 10000 + rand()%4000;
+ SummonTigers_Timer = urand(10000, 14000);
} else SummonTigers_Timer -= diff;
if (HealthBelowPct(11) && !Enraged)
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp
index 7288d063c21..179935524a8 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp
@@ -47,8 +47,8 @@ class boss_wushoolay : public CreatureScript
void Reset()
{
- LightningCloud_Timer = 5000 + rand()%5000;
- LightningWave_Timer = 8000 + rand()%8000;
+ LightningCloud_Timer = urand(5000, 10000);
+ LightningWave_Timer = urand(8000, 16000);
}
void EnterCombat(Unit* /*who*/)
@@ -64,7 +64,7 @@ class boss_wushoolay : public CreatureScript
if (LightningCloud_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_LIGHTNINGCLOUD);
- LightningCloud_Timer = 15000 + rand()%5000;
+ LightningCloud_Timer = urand(15000, 20000);
} else LightningCloud_Timer -= diff;
//LightningWave_Timer
@@ -74,7 +74,7 @@ class boss_wushoolay : public CreatureScript
target = SelectTarget(SELECT_TARGET_RANDOM, 0);
if (target) DoCast(target, SPELL_LIGHTNINGWAVE);
- LightningWave_Timer = 12000 + rand()%4000;
+ LightningWave_Timer = urand(12000, 16000);
} else LightningWave_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/eversong_woods.cpp b/src/server/scripts/EasternKingdoms/eversong_woods.cpp
index d02cce3f17c..d9171308ba6 100644
--- a/src/server/scripts/EasternKingdoms/eversong_woods.cpp
+++ b/src/server/scripts/EasternKingdoms/eversong_woods.cpp
@@ -204,7 +204,7 @@ public:
if (timerJustice <= diff)
{
DoCast(me, SPELL_SEAL_OF_JUSTICE);
- timerJustice = 10000 + rand()%10000;
+ timerJustice = urand(10000, 20000);
}
else
timerJustice -= diff;
@@ -215,7 +215,7 @@ public:
if (timerJudLight <= diff)
{
DoCast(me, SPELL_JUDGEMENT_OF_LIGHT);
- timerJudLight = 10000 + rand()%10000;
+ timerJudLight = urand(10000, 20000);
}
else
timerJudLight -= diff;
@@ -226,7 +226,7 @@ public:
if (timerCommand <= diff)
{
DoCast(me, SPELL_SEAL_OF_COMMAND);
- timerCommand = 20000 + rand()%20000;
+ timerCommand = urand(20000, 40000);
}
else
timerCommand -= diff;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp
index f681b245a42..35de4c70214 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp
@@ -105,15 +105,15 @@ public:
ai->EnterEvadeMode();
ai->Spells[0].SpellId = SPELL_BLIZZARD;
- ai->Spells[0].Cooldown = 15000 + rand()%20000;
+ ai->Spells[0].Cooldown = urand(15000, 35000);
ai->Spells[0].TargetType = TARGETTYPE_RANDOM;
ai->Spells[1].SpellId = SPELL_PYROBLAST;
- ai->Spells[1].Cooldown = 5500 + rand()%4000;
+ ai->Spells[1].Cooldown = urand(5500, 9500);
ai->Spells[1].TargetType = TARGETTYPE_RANDOM;
ai->Spells[2].SpellId = SPELL_SUMMON_ELEMENTALS;
- ai->Spells[2].Cooldown = 15000 + rand()%30000;
+ ai->Spells[2].Cooldown = urand(15000, 45000);
ai->Spells[2].TargetType = TARGETTYPE_SELF;
return ai;
@@ -187,11 +187,11 @@ public:
ai->EnterEvadeMode();
ai->Spells[0].SpellId = SPELL_CHAIN_LIGHTNING;
- ai->Spells[0].Cooldown = 3000 + rand()%5000;
+ ai->Spells[0].Cooldown = urand(3000, 8000);
ai->Spells[0].TargetType = TARGETTYPE_VICTIM;
ai->Spells[1].SpellId = SPELL_SUMMON_DIRE_WOLF;
- ai->Spells[1].Cooldown = 6000 + rand()%35000;
+ ai->Spells[1].Cooldown = urand(6000, 41000);
ai->Spells[1].TargetType = TARGETTYPE_RANDOM;
return ai;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp
index f09308a6724..488c7195534 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp
@@ -68,9 +68,9 @@ public:
void Reset()
{
- Holy_Light_Timer = 20000 + rand()%10000;
+ Holy_Light_Timer = urand(20000, 30000);
Cleanse_Timer = 10000;
- HammerOfJustice_Timer = 20000 + rand()%15000;
+ HammerOfJustice_Timer = urand(20000, 35000);
HolyShield_Timer = 240000;
DevotionAura_Timer = 3000;
Consecration_Timer = 8000;
@@ -134,14 +134,14 @@ public:
if (DevotionAura_Timer <= diff)
{
DoCast(me, SPELL_DEVOTION_AURA);
- DevotionAura_Timer = 45000 + rand()%10000;
+ DevotionAura_Timer = urand(45000, 55000);
} else DevotionAura_Timer -= diff;
//Consecration
if (Consecration_Timer <= diff)
{
//DoCast(me->getVictim(), SPELL_CONSECRATION);
- Consecration_Timer = 5000 + rand()%5000;
+ Consecration_Timer = urand(5000, 10000);
} else Consecration_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp
index 5b201e50bcb..9e6957a5e0c 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp
@@ -68,8 +68,8 @@ public:
void Reset()
{
- SandBreath_Timer = 8000 + rand()%8000;
- ImpendingDeath_Timer = 25000 + rand()%5000;
+ SandBreath_Timer = urand(8000, 16000);
+ ImpendingDeath_Timer = urand(25000, 30000);
WingBuffet_Timer = 35000;
Mda_Timer = 40000;
}
@@ -108,7 +108,7 @@ public:
DoScriptText(RAND(SAY_BREATH1, SAY_BREATH2), me);
- SandBreath_Timer = 10000 + rand()%10000;
+ SandBreath_Timer = urand(10000, 20000);
} else SandBreath_Timer -= diff;
if (ImpendingDeath_Timer <= diff)
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp
index 7ade38dba8e..fd1966d106c 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp
@@ -61,7 +61,7 @@ public:
{
AmnenarsWrath_Timer = 8000;
FrostBolt_Timer = 1000;
- FrostNova_Timer = 10000 + rand()%5000;
+ FrostNova_Timer = urand(10000, 15000);
Spectrals30 = false;
Spectrals60 = false;
Hp = false;
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
index 1a9d3f7a557..34b481c97f4 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
@@ -65,8 +65,8 @@ public:
void Reset()
{
- Cleave_Timer = 4000 + rand()%4000;
- ToxicVolley_Timer = 6000 + rand()%6000;
+ Cleave_Timer = urand(4000, 8000);
+ ToxicVolley_Timer = urand(6000, 12000);
Check_Timer = 2000;
VemDead = false;
@@ -98,14 +98,14 @@ public:
if (Cleave_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_CLEAVE);
- Cleave_Timer = 5000 + rand()%7000;
+ Cleave_Timer = urand(5000, 12000);
} else Cleave_Timer -= diff;
//ToxicVolley_Timer
if (ToxicVolley_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_TOXIC_VOLLEY);
- ToxicVolley_Timer = 10000 + rand()%5000;
+ ToxicVolley_Timer = urand(10000, 15000);
} else ToxicVolley_Timer -= diff;
if (!HealthAbovePct(5) && !Death)
@@ -161,8 +161,8 @@ public:
void Reset()
{
- Charge_Timer = 15000 + rand()%12000;
- KnockBack_Timer = 8000 + rand()%12000;
+ Charge_Timer = urand(15000, 27000);
+ KnockBack_Timer = urand(8000, 20000);
Enrage_Timer = 120000;
Enraged = false;
@@ -202,7 +202,7 @@ public:
AttackStart(target);
}
- Charge_Timer = 8000 + rand()%8000;
+ Charge_Timer = urand(8000, 16000);
} else Charge_Timer -= diff;
//KnockBack_Timer
@@ -211,7 +211,7 @@ public:
DoCast(me->getVictim(), SPELL_KNOCKBACK);
if (DoGetThreat(me->getVictim()))
DoModifyThreatPercent(me->getVictim(), -80);
- KnockBack_Timer = 15000 + rand()%10000;
+ KnockBack_Timer = urand(15000, 25000);
} else KnockBack_Timer -= diff;
//Enrage_Timer
@@ -254,8 +254,8 @@ public:
void Reset()
{
- Heal_Timer = 25000 + rand()%15000;
- Fear_Timer = 12000 + rand()%12000;
+ Heal_Timer = urand(25000, 40000);
+ Fear_Timer = urand(12000, 24000);
Check_Timer = 2000;
VemDead = false;
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp
index 9d83bfea866..505907cd0f5 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp
@@ -63,9 +63,9 @@ public:
void Reset()
{
- MortalWound_Timer = 10000 + rand()%5000;
- SpawnHatchlings_Timer = 6000 + rand()%6000;
- SpawnSpawns_Timer = 15000 + rand()%30000;
+ MortalWound_Timer = urand(10000, 15000);
+ SpawnHatchlings_Timer = urand(6000, 12000);
+ SpawnSpawns_Timer = urand(15000, 45000);
}
void SummonSpawn(Unit* victim)
@@ -106,7 +106,7 @@ public:
if (MortalWound_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_MORTAL_WOUND);
- MortalWound_Timer = 10000 + rand()%10000;
+ MortalWound_Timer = urand(10000, 20000);
} else MortalWound_Timer -= diff;
//Summon 1-3 Spawns of Fankriss at random time.
@@ -127,7 +127,7 @@ public:
SummonSpawn(SelectTarget(SELECT_TARGET_RANDOM, 0));
break;
}
- SpawnSpawns_Timer = 30000 + rand()%30000;
+ SpawnSpawns_Timer = urand(30000, 60000);
} else SpawnSpawns_Timer -= diff;
// Teleporting Random Target to one of the three tunnels and spawn 4 hatchlings near the gamer.
@@ -194,7 +194,7 @@ public:
break;
}
}
- SpawnHatchlings_Timer = 45000 + rand()%15000;
+ SpawnHatchlings_Timer = urand(45000, 60000);
} else SpawnHatchlings_Timer -= diff;
}
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp
index f8cafea0ef2..d6d23cf7426 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp
@@ -61,11 +61,11 @@ public:
void Reset()
{
- Frenzy_Timer = 25000 + rand()%10000;
- Wyvern_Timer = 18000 + rand()%10000;
+ Frenzy_Timer = urand(25000, 35000);
+ Wyvern_Timer = urand(18000, 28000);
Spit_Timer = 8000;
PoisonBolt_Timer = 4000;
- NoxiousPoison_Timer = 10000 + rand()%10000;
+ NoxiousPoison_Timer = urand(10000, 20000);
FrenzyBack_Timer = 15000;
Frenzy = false;
@@ -89,7 +89,7 @@ public:
DoScriptText(EMOTE_GENERIC_FRENZY_KILL, me);
Frenzy = true;
PoisonBolt_Timer = 3000;
- Frenzy_Timer = 25000 + rand()%10000;
+ Frenzy_Timer = urand(25000, 35000);
} else Frenzy_Timer -= diff;
// Wyvern Timer
@@ -97,21 +97,21 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_WYVERNSTING);
- Wyvern_Timer = 15000 + rand()%17000;
+ Wyvern_Timer = urand(15000, 32000);
} else Wyvern_Timer -= diff;
//Spit Timer
if (Spit_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_ACIDSPIT);
- Spit_Timer = 5000 + rand()%5000;
+ Spit_Timer = urand(5000, 10000);
} else Spit_Timer -= diff;
//NoxiousPoison_Timer
if (NoxiousPoison_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_NOXIOUSPOISON);
- NoxiousPoison_Timer = 12000 + rand()%12000;
+ NoxiousPoison_Timer = urand(12000, 24000);
} else NoxiousPoison_Timer -= diff;
//PoisonBolt only if frenzy or berserk
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
index 01d26ed7726..4595e4e5095 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
@@ -59,12 +59,12 @@ public:
void Reset()
{
- Sweep_Timer = 5000 + rand()%5000;
- SandBlast_Timer = 20000 + rand()%15000;
- Submerge_Timer = 90000 + rand()%60000;
- Back_Timer = 30000 + rand()%15000;
- ChangeTarget_Timer = 5000 + rand()%3000;
- Spawn_Timer = 10000 + rand()%10000;
+ Sweep_Timer = urand(5000, 10000);
+ SandBlast_Timer = urand(20000, 35000);
+ Submerge_Timer = urand(90000, 150000);
+ Back_Timer = urand(30000, 45000);
+ ChangeTarget_Timer = urand(5000, 8000);
+ Spawn_Timer = urand(10000, 20000);
Enrage = false;
Submerged = false;
@@ -85,14 +85,14 @@ public:
if (!Submerged && Sweep_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SWEEP);
- Sweep_Timer = 15000 + rand()%15000;
+ Sweep_Timer = urand(15000, 30000);
} else Sweep_Timer -= diff;
//SandBlast_Timer
if (!Submerged && SandBlast_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SANDBLAST);
- SandBlast_Timer = 20000 + rand()%15000;
+ SandBlast_Timer = urand(20000, 35000);
} else SandBlast_Timer -= diff;
//Submerge_Timer
@@ -105,7 +105,7 @@ public:
DoCast(me, SPELL_DIRTMOUND_PASSIVE);
Submerged = true;
- Back_Timer = 30000 + rand()%15000;
+ Back_Timer = urand(30000, 45000);
} else Submerge_Timer -= diff;
//ChangeTarget_Timer
@@ -117,7 +117,7 @@ public:
if (target)
DoTeleportTo(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
- ChangeTarget_Timer = 10000 + rand()%10000;
+ ChangeTarget_Timer = urand(10000, 20000);
} else ChangeTarget_Timer -= diff;
//Back_Timer
@@ -129,7 +129,7 @@ public:
DoCast(me->getVictim(), SPELL_GROUND_RUPTURE);
Submerged = false;
- Submerge_Timer = 60000 + rand()%60000;
+ Submerge_Timer = urand(60000, 120000);
} else Back_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp
index fb16d2b7319..27aa72d3e55 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp
@@ -66,9 +66,9 @@ public:
void Reset()
{
WhirlWind_Timer = 30000;
- WhirlWindRandom_Timer = 3000 + rand()%4000;
+ WhirlWindRandom_Timer = urand(3000, 7000);
WhirlWindEnd_Timer = 15000;
- AggroReset_Timer = 45000 + rand()%10000;
+ AggroReset_Timer = urand(45000, 55000);
AggroResetEnd_Timer = 5000;
EnrageHard_Timer = 10*60000;
@@ -111,13 +111,13 @@ public:
me->TauntApply(target);
AttackStart(target);
}
- WhirlWindRandom_Timer = 3000 + rand()%4000;
+ WhirlWindRandom_Timer = urand(3000, 7000);
} else WhirlWindRandom_Timer -= diff;
if (WhirlWindEnd_Timer <= diff)
{
WhirlWind = false;
- WhirlWind_Timer = 25000 + rand()%15000;
+ WhirlWind_Timer = urand(25000, 40000);
} else WhirlWindEnd_Timer -= diff;
}
@@ -140,7 +140,7 @@ public:
AttackStart(target);
}
AggroReset = true;
- AggroReset_Timer = 2000 + rand()%3000;
+ AggroReset_Timer = urand(2000, 5000);
} else AggroReset_Timer -= diff;
if (AggroReset)
@@ -149,7 +149,7 @@ public:
{
AggroReset = false;
AggroResetEnd_Timer = 5000;
- AggroReset_Timer = 35000 + rand()%10000;
+ AggroReset_Timer = urand(35000, 45000);
} else AggroResetEnd_Timer -= diff;
}
@@ -207,9 +207,9 @@ public:
void Reset()
{
WhirlWind_Timer = 30000;
- WhirlWindRandom_Timer = 3000 + rand()%4000;
+ WhirlWindRandom_Timer = urand(3000, 7000);
WhirlWindEnd_Timer = 15000;
- AggroReset_Timer = 45000 + rand()%10000;
+ AggroReset_Timer = urand(45000, 55000);
AggroResetEnd_Timer = 5000;
KnockBack_Timer = 10000;
@@ -231,7 +231,7 @@ public:
{
DoCast(me, SPELL_WHIRLWINDADD);
WhirlWind = true;
- WhirlWind_Timer = 25000 + rand()%15000;
+ WhirlWind_Timer = urand(25000, 40000);
WhirlWindEnd_Timer = 15000;
} else WhirlWind_Timer -= diff;
@@ -247,7 +247,7 @@ public:
AttackStart(target);
}
- WhirlWindRandom_Timer = 3000 + rand()%4000;
+ WhirlWindRandom_Timer = urand(3000, 7000);
} else WhirlWindRandom_Timer -= diff;
if (WhirlWindEnd_Timer <= diff)
@@ -269,13 +269,13 @@ public:
}
AggroReset = true;
- AggroReset_Timer = 2000 + rand()%3000;
+ AggroReset_Timer = urand(2000, 5000);
} else AggroReset_Timer -= diff;
if (KnockBack_Timer <= diff)
{
DoCast(me, SPELL_WHIRLWINDADD);
- KnockBack_Timer = 10000 + rand()%10000;
+ KnockBack_Timer = urand(10000, 20000);
} else KnockBack_Timer -= diff;
}
@@ -285,7 +285,7 @@ public:
{
AggroReset = false;
AggroResetEnd_Timer = 5000;
- AggroReset_Timer = 30000 + rand()%10000;
+ AggroReset_Timer = urand(30000, 40000);
} else AggroResetEnd_Timer -= diff;
}
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
index 0ba6bdb1154..c9a9865e36e 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
@@ -82,10 +82,10 @@ public:
void Reset()
{
- ArcaneExplosion_Timer = 6000 + rand()%6000;
+ ArcaneExplosion_Timer = urand(6000, 12000);
EarthShock_Timer = 2000;
FullFillment_Timer = 15000;
- Blink_Timer = 8000 + rand()%12000;
+ Blink_Timer = urand(8000, 20000);
Invisible_Timer = 500;
Images75 = false;
@@ -128,7 +128,7 @@ public:
if (ArcaneExplosion_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_ARCANE_EXPLOSION);
- ArcaneExplosion_Timer = 8000 + rand()%10000;
+ ArcaneExplosion_Timer = urand(8000, 18000);
} else ArcaneExplosion_Timer -= diff;
//If we are within range melee the target
@@ -171,7 +171,7 @@ public:
}
DoStopAttack();
- Blink_Timer= 20000 + rand()%20000;
+ Blink_Timer= urand(20000, 40000);
} else Blink_Timer -= diff;
int procent = (int) (me->GetHealthPct() + 0.5f);
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
index 29b92957ace..b005f9d0953 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
@@ -88,7 +88,7 @@ struct boss_twinemperorsAI : public ScriptedAI
AfterTeleport = false;
tspellcasted = false;
AfterTeleportTimer = 0;
- Abuse_Bug_Timer = 10000 + rand()%7000;
+ Abuse_Bug_Timer = urand(10000, 17000);
BugsTimer = 2000;
me->ClearUnitState(UNIT_STAT_STUNNED);
DontYellWhenDead = false;
@@ -347,7 +347,7 @@ struct boss_twinemperorsAI : public ScriptedAI
if (c)
{
CastSpellOnBug(c);
- Abuse_Bug_Timer = 10000 + rand()%7000;
+ Abuse_Bug_Timer = urand(10000, 17000);
}
else
{
@@ -407,9 +407,9 @@ public:
void Reset()
{
TwinReset();
- UpperCut_Timer = 14000 + rand()%15000;
- UnbalancingStrike_Timer = 8000 + rand()%10000;
- Scarabs_Timer = 7000 + rand()%7000;
+ UpperCut_Timer = urand(14000, 29000);
+ UnbalancingStrike_Timer = urand(8000, 18000);
+ Scarabs_Timer = urand(7000, 14000);
//Added. Can be removed if its included in DB.
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
@@ -495,9 +495,9 @@ public:
{
TwinReset();
ShadowBolt_Timer = 0;
- Blizzard_Timer = 15000 + rand()%5000;
+ Blizzard_Timer = urand(15000, 20000);
ArcaneBurst_Timer = 1000;
- Scorpions_Timer = 7000 + rand()%7000;
+ Scorpions_Timer = urand(7000, 14000);
//Added. Can be removed if its included in DB.
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true);
diff --git a/src/server/scripts/Kalimdor/azuremyst_isle.cpp b/src/server/scripts/Kalimdor/azuremyst_isle.cpp
index 57ff1448a7e..1898186f615 100644
--- a/src/server/scripts/Kalimdor/azuremyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/azuremyst_isle.cpp
@@ -243,7 +243,7 @@ public:
void Reset()
{
Dynamite_Timer = 8000;
- Emote_Timer = 120000 + rand()%30000;
+ Emote_Timer = urand(120000, 150000);
me->setFaction(NormFaction);
me->SetUInt32Value(UNIT_NPC_FLAGS, NpcFlags);
@@ -264,7 +264,7 @@ public:
{
DoScriptText(SAY_TEXT, me);
DoScriptText(SAY_EMOTE, me);
- Emote_Timer = 120000 + rand()%30000;
+ Emote_Timer = urand(120000, 150000);
} else Emote_Timer -= diff;
}
else if (IsTreeEvent)
diff --git a/src/server/scripts/Kalimdor/boss_azuregos.cpp b/src/server/scripts/Kalimdor/boss_azuregos.cpp
index 6bbc29dcc56..19b5e36e113 100644
--- a/src/server/scripts/Kalimdor/boss_azuregos.cpp
+++ b/src/server/scripts/Kalimdor/boss_azuregos.cpp
@@ -62,11 +62,11 @@ public:
void Reset()
{
MarkOfFrost_Timer = 35000;
- ManaStorm_Timer = 5000 + rand()%12000;
- Chill_Timer = 10000 + rand()%20000;
- Breath_Timer = 2000 + rand()%6000;
+ ManaStorm_Timer = urand(5000, 17000);
+ Chill_Timer = urand(10000, 30000);
+ Breath_Timer = urand(2000, 8000);
Teleport_Timer = 30000;
- Reflect_Timer = 15000 + rand()%15000;
+ Reflect_Timer = urand(15000, 30000);
Cleave_Timer = 7000;
Enrage_Timer = 0;
Enraged = false;
@@ -109,14 +109,14 @@ public:
if (Chill_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_CHILL);
- Chill_Timer = 13000 + rand()%12000;
+ Chill_Timer = urand(13000, 25000);
} else Chill_Timer -= diff;
//Breath_Timer
if (Breath_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_FROSTBREATH);
- Breath_Timer = 10000 + rand()%5000;
+ Breath_Timer = urand(10000, 15000);
} else Breath_Timer -= diff;
//ManaStorm_Timer
@@ -124,14 +124,14 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_MANASTORM);
- ManaStorm_Timer = 7500 + rand()%5000;
+ ManaStorm_Timer = urand(7500, 12500);
} else ManaStorm_Timer -= diff;
//Reflect_Timer
if (Reflect_Timer <= diff)
{
DoCast(me, SPELL_REFLECT);
- Reflect_Timer = 20000 + rand()%15000;
+ Reflect_Timer = urand(20000, 35000);
} else Reflect_Timer -= diff;
//Cleave_Timer
diff --git a/src/server/scripts/Kalimdor/desolace.cpp b/src/server/scripts/Kalimdor/desolace.cpp
index 3d023b93dc2..5badc7fe725 100644
--- a/src/server/scripts/Kalimdor/desolace.cpp
+++ b/src/server/scripts/Kalimdor/desolace.cpp
@@ -188,7 +188,7 @@ class go_iruxos : public GameObjectScript
bool OnGossipHello(Player* player, GameObject* go)
{
- if (player->GetQuestStatus(QUEST_HAND_IRUXOS) == QUEST_STATUS_INCOMPLETE)
+ if (player->GetQuestStatus(QUEST_HAND_IRUXOS) == QUEST_STATUS_INCOMPLETE && !go->FindNearestCreature(NPC_DEMON_SPIRIT, 25.0f, true))
player->SummonCreature(NPC_DEMON_SPIRIT, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);
return true;
@@ -283,7 +283,7 @@ class go_demon_portal : public GameObjectScript
bool OnGossipHello(Player* player, GameObject* go)
{
- if (player->GetQuestStatus(QUEST_PORTAL_OF_THE_LEGION) == QUEST_STATUS_INCOMPLETE)
+ if (player->GetQuestStatus(QUEST_PORTAL_OF_THE_LEGION) == QUEST_STATUS_INCOMPLETE && !go->FindNearestCreature(NPC_DEMON_GUARDIAN, 5.0f, true))
{
if (Creature* guardian = player->SummonCreature(NPC_DEMON_GUARDIAN, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), 0.0f, TEMPSUMMON_DEAD_DESPAWN, 0))
guardian->AI()->AttackStart(player);
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
index c2107e88b2e..9096282c3f6 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
@@ -111,7 +111,7 @@ public:
{
_EnterCombat();
DoScriptText(SAY_AGGRO, me);
- events.ScheduleEvent(EVENT_IMPALE, 10000 + rand()%10000);
+ events.ScheduleEvent(EVENT_IMPALE, urand(10000, 20000));
events.ScheduleEvent(EVENT_LOCUST, 90000);
events.ScheduleEvent(EVENT_BERSERK, 600000);
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
index 04627981ef3..b7d74c02dd8 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
@@ -107,7 +107,7 @@ public:
events.ScheduleEvent(EVENT_CURSE, 10000+rand()%15000);
events.ScheduleEvent(EVENT_WARRIOR, 30000);
if (GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL)
- events.ScheduleEvent(EVENT_BLINK, 20000 + rand()%20000);
+ events.ScheduleEvent(EVENT_BLINK, urand(20000, 40000));
}
}
@@ -153,7 +153,7 @@ public:
{
case EVENT_CURSE:
DoCastAOE(SPELL_CURSE_PLAGUEBRINGER);
- events.ScheduleEvent(EVENT_CURSE, 50000 + rand()%10000);
+ events.ScheduleEvent(EVENT_CURSE, urand(50000, 60000));
return;
case EVENT_WARRIOR:
DoScriptText(SAY_SUMMON, me);
@@ -173,7 +173,7 @@ public:
me->RemoveAllAuras();
me->NearTeleportTo(TELE_X, TELE_Y, TELE_Z, TELE_O);
events.Reset();
- events.ScheduleEvent(EVENT_WAVE, 2000 + rand()%3000);
+ events.ScheduleEvent(EVENT_WAVE, urand(2000, 5000));
waveCount = 0;
return;
case EVENT_WAVE:
@@ -188,7 +188,7 @@ public:
SummonUndead(MOB_GUARDIAN, RAID_MODE(5, 10));break;
}
++waveCount;
- events.ScheduleEvent(waveCount < 2 ? EVENT_WAVE : EVENT_GROUND, 30000 + rand()%15000);
+ events.ScheduleEvent(waveCount < 2 ? EVENT_WAVE : EVENT_GROUND, urand(30000, 45000));
return;
case EVENT_GROUND:
{
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
index 8c97766f787..5e2b6551f84 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
@@ -131,7 +131,7 @@ public:
m_uiChargingStatus = 0;
m_uiCharge_Timer = 1000;
- m_uiChangeStance_Timer = 20000 + rand()%5000;
+ m_uiChangeStance_Timer = urand(20000, 25000);
m_uiReflection_Timer = 8000;
m_uiKnockAway_Timer = 20000;
@@ -252,7 +252,7 @@ public:
break;
}
- m_uiChangeStance_Timer = 20000 + rand()%5000;
+ m_uiChangeStance_Timer = urand(20000, 25000);
return;
}
else
@@ -265,7 +265,7 @@ public:
if (m_uiReflection_Timer <= uiDiff)
{
DoCast(me, SPELL_SPELL_REFLECTION);
- m_uiReflection_Timer = 8000 + rand()%1000;
+ m_uiReflection_Timer = urand(8000, 9000);
}
else
m_uiReflection_Timer -= uiDiff;
@@ -273,7 +273,7 @@ public:
if (m_uiKnockAway_Timer <= uiDiff)
{
DoCast(me, SPELL_KNOCK_AWAY);
- m_uiKnockAway_Timer = 20000 + rand()%1000;
+ m_uiKnockAway_Timer = urand(20000, 21000);
}
else
m_uiKnockAway_Timer -= uiDiff;
@@ -281,7 +281,7 @@ public:
if (m_uiPummel_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_PUMMEL);
- m_uiPummel_Timer = 10000 + rand()%1000;
+ m_uiPummel_Timer = urand(10000, 11000);
}
else
m_uiPummel_Timer -= uiDiff;
@@ -289,7 +289,7 @@ public:
if (m_uiIronform_Timer <= uiDiff)
{
DoCast(me, SPELL_IRONFORM);
- m_uiIronform_Timer = 25000 + rand()%1000;
+ m_uiIronform_Timer = urand(25000, 26000);
}
else
m_uiIronform_Timer -= uiDiff;
@@ -302,7 +302,7 @@ public:
{
//not much point is this, better random target and more often?
DoCast(me->getVictim(), SPELL_INTERCEPT);
- m_uiIntercept_Timer = 45000 + rand()%1000;
+ m_uiIntercept_Timer = urand(45000, 46000);
}
else
m_uiIntercept_Timer -= uiDiff;
@@ -310,7 +310,7 @@ public:
if (m_uiWhirlwind_Timer <= uiDiff)
{
DoCast(me, SPELL_WHIRLWIND);
- m_uiWhirlwind_Timer = 10000 + rand()%1000;
+ m_uiWhirlwind_Timer = urand(10000, 11000);
}
else
m_uiWhirlwind_Timer -= uiDiff;
@@ -318,7 +318,7 @@ public:
if (m_uiCleave_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_CLEAVE);
- m_uiCleave_Timer = 8000 + rand()%1000;
+ m_uiCleave_Timer = urand(8000, 9000);
}
else
m_uiCleave_Timer -= uiDiff;
@@ -330,7 +330,7 @@ public:
if (m_uiMortalStrike_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_MORTAL_STRIKE);
- m_uiMortalStrike_Timer = 20000 + rand()%1000;
+ m_uiMortalStrike_Timer = urand(20000, 21000);
}
else
m_uiMortalStrike_Timer -= uiDiff;
@@ -338,7 +338,7 @@ public:
if (m_uiSlam_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_SLAM);
- m_uiSlam_Timer = 15000 + rand()%1000;
+ m_uiSlam_Timer = urand(15000, 16000);
}
else
m_uiSlam_Timer -= uiDiff;
@@ -381,8 +381,8 @@ public:
void Reset()
{
- m_uiArcWeld_Timer = 20000 + rand()%1000;
- m_uiRenewSteel_Timer = 10000 + rand()%1000;
+ m_uiArcWeld_Timer = urand(20000, 21000);
+ m_uiRenewSteel_Timer = urand(10000, 11000);
}
void EnterCombat(Unit* who)
@@ -406,7 +406,7 @@ public:
if (m_uiArcWeld_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_ARC_WELD);
- m_uiArcWeld_Timer = 20000 + rand()%1000;
+ m_uiArcWeld_Timer = urand(20000, 21000);
}
else
m_uiArcWeld_Timer -= uiDiff;
@@ -421,7 +421,7 @@ public:
DoCast(pBjarngrim, SPELL_RENEW_STEEL_N);
}
}
- m_uiRenewSteel_Timer = 10000 + rand()%4000;
+ m_uiRenewSteel_Timer = urand(10000, 14000);
}
else
m_uiRenewSteel_Timer -= uiDiff;
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
index a5ea1868686..d90704dd352 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
@@ -183,7 +183,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_ARC_LIGHTNING);
- m_uiArcLightning_Timer = 15000 + rand()%1000;
+ m_uiArcLightning_Timer = urand(15000, 16000);
}
else
m_uiArcLightning_Timer -= uiDiff;
@@ -196,7 +196,7 @@ public:
m_bIsAura = false;
m_uiResumePulsingShockwave_Timer = DUNGEON_MODE(5000, 4000); // Pause Pulsing Shockwave aura
- m_uiLightningNova_Timer = 20000 + rand()%1000;
+ m_uiLightningNova_Timer = urand(20000, 21000);
}
else
m_uiLightningNova_Timer -= uiDiff;
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
index 375862c141c..65b5d3eaad1 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
@@ -80,10 +80,10 @@ public:
{
bIsSlam = false;
- uiBoulderTossTimer = 3000 + rand()%6000;
- uiGroundSpikeTimer = 9000 + rand()%5000;
- uiGroundSlamTimer = 15000 + rand()%3000;
- uiStompTimer = 20000 + rand()%9000;
+ uiBoulderTossTimer = urand(3000, 9000);
+ uiGroundSpikeTimer = urand(9000, 14000);
+ uiGroundSlamTimer = urand(15000, 18000);
+ uiStompTimer = urand(20000, 29000);
uiShatterTimer = 0;
if (instance)
@@ -107,20 +107,20 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_BOULDER_TOSS);
- uiBoulderTossTimer = 9000 + rand()%6000;
+ uiBoulderTossTimer = urand(9000, 15000);
} else uiBoulderTossTimer -= diff;
if (uiGroundSpikeTimer <= diff)
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_GROUND_SPIKE);
- uiGroundSpikeTimer = 12000 + rand()%5000;
+ uiGroundSpikeTimer = urand(12000, 17000);
} else uiGroundSpikeTimer -= diff;
if (uiStompTimer <= diff)
{
DoCast(me, SPELL_STOMP);
- uiStompTimer = 20000 + rand()%9000;
+ uiStompTimer = urand(20000, 29000);
} else uiStompTimer -= diff;
if (uiGroundSlamTimer <= diff)
@@ -128,7 +128,7 @@ public:
DoCast(me, SPELL_GROUND_SLAM);
bIsSlam = true;
uiShatterTimer = 10000;
- uiGroundSlamTimer = 15000 + rand()%3000;
+ uiGroundSlamTimer = urand(15000, 18000);
} else uiGroundSlamTimer -= diff;
if (bIsSlam)
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
index 4ab09dbf67a..4f512089119 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
@@ -79,10 +79,10 @@ public:
void Reset()
{
- PartingSorrowTimer = 25000 + rand()%5000;
+ PartingSorrowTimer = urand(25000, 30000);
StormOfGriefTimer = 10000;
ShockOfSorrowTimer = 20000+rand()%5000;
- PillarOfWoeTimer = 5000 + rand()%10000;
+ PillarOfWoeTimer = urand(5000, 15000);
if (instance)
{
@@ -124,14 +124,14 @@ public:
if (target)
DoCast(target, SPELL_PARTING_SORROW);
- PartingSorrowTimer = 30000 + rand()%10000;
+ PartingSorrowTimer = urand(30000, 40000);
} else PartingSorrowTimer -= diff;
}
if (StormOfGriefTimer <= diff)
{
DoCast(me->getVictim(), SPELL_STORM_OF_GRIEF_N, true);
- StormOfGriefTimer = 15000 + rand()%5000;
+ StormOfGriefTimer = urand(15000, 20000);
} else StormOfGriefTimer -= diff;
if (ShockOfSorrowTimer <= diff)
@@ -139,7 +139,7 @@ public:
DoResetThreat();
DoScriptText(SAY_STUN, me);
DoCast(me, SPELL_SHOCK_OF_SORROW_N);
- ShockOfSorrowTimer = 20000 + rand()%10000;
+ ShockOfSorrowTimer = urand(20000, 30000);
} else ShockOfSorrowTimer -= diff;
if (PillarOfWoeTimer <= diff)
@@ -151,7 +151,7 @@ public:
else
DoCast(me->getVictim(), SPELL_PILLAR_OF_WOE_N);
- PillarOfWoeTimer = 5000 + rand()%20000;
+ PillarOfWoeTimer = urand(5000, 25000);
} else PillarOfWoeTimer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
index 41dcd77d4bc..dd61fe549c3 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
@@ -115,10 +115,10 @@ public:
bIsFrenzy = false;
uiEncounterTimer = 0;
- uiChainLightningTimer = 3000 + rand()%5000;
- uiLightningShieldTimer = 20000 + rand()%5000;
- uiStaticChargeTimer = 20000 + rand()%5000;
- uiLightningRingTimer = 30000 + rand()%5000;
+ uiChainLightningTimer = urand(3000, 8000);
+ uiLightningShieldTimer = urand(20000, 25000);
+ uiStaticChargeTimer = urand(20000, 25000);
+ uiLightningRingTimer = urand(30000, 35000);
uiSummonTimer = 5000;
uiFrenzyTimer = 300000; //5 minutes
abuseTheOoze = 0;
@@ -158,7 +158,7 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_CHAIN_LIGHTING);
- uiChainLightningTimer = 10000 + rand()%5000;
+ uiChainLightningTimer = urand(10000, 15000);
} else uiChainLightningTimer -= diff;
if (uiLightningShieldTimer <= diff)
@@ -170,7 +170,7 @@ public:
if (uiStaticChargeTimer <= diff)
{
DoCast(me->getVictim(), SPELL_STATIC_CHARGE);
- uiStaticChargeTimer = 20000 + rand()%5000;
+ uiStaticChargeTimer = urand(20000, 25000);
} uiStaticChargeTimer -= diff;
if (uiLightningRingTimer <= diff)
@@ -178,7 +178,7 @@ public:
if (me->IsNonMeleeSpellCasted(false))
me->InterruptNonMeleeSpells(false);
DoCast(me, SPELL_LIGHTING_RING);
- uiLightningRingTimer = 30000 + rand()%5000;
+ uiLightningRingTimer = urand(30000, 35000);
} else uiLightningRingTimer -= diff;
if (uiSummonTimer <= diff)
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
index ec1464a5d6f..273a0bf6f8e 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
@@ -239,7 +239,7 @@ public:
summon->CastSpell(target, DUNGEON_MODE(SPELL_DARK_MATTER, H_SPELL_DARK_MATTER), true);
}
}
- uiMarnakEncounterTimer = 30000 + rand()%1000;
+ uiMarnakEncounterTimer = urand(30000, 31000);
} else uiMarnakEncounterTimer -= diff;
}
if (bAbedneumActivated)
@@ -255,7 +255,7 @@ public:
summon->CastSpell(target, DUNGEON_MODE(SPELL_SEARING_GAZE, H_SPELL_SEARING_GAZE), true);
}
}
- uiAbedneumEncounterTimer = 30000 + rand()%1000;
+ uiAbedneumEncounterTimer = urand(30000, 31000);
} else uiAbedneumEncounterTimer -= diff;
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon.cpp
index 3888cc43bc9..1892702d336 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon.cpp
@@ -143,7 +143,7 @@ public:
uiPhase_timer = 0;
Ascend_Timer = 480000; //8 minutes
- QuantumStrike_Timer = 4000 + rand()%10000;
+ QuantumStrike_Timer = urand(4000, 14000);
Berserk_Timer = 360000; //6 minutes
CollapsingStar_Timer = urand(15000, 20000); //Spawns between 15 to 20 seconds
BigBang_Timer = 90000;
diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
index a9f84016a04..71de7177e2b 100644
--- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
+++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
@@ -340,7 +340,7 @@ public:
if (Mortal_Strike_timer <= diff)
{
DoCast(me->getVictim(), SPELL_AV_MORTAL_STRIKE);
- Mortal_Strike_timer = 10000 + rand()%20 * 1000;
+ Mortal_Strike_timer = urand(10, 30) * 1000;
} else Mortal_Strike_timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp
index 829f681982f..8a7eefbf633 100644
--- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp
@@ -162,20 +162,20 @@ public:
me->InterruptNonMeleeSpells(true);
DoCast(me, SPELL_FROSTNOVA);
- FrostNova_Timer = 17500 + rand()%7500;
+ FrostNova_Timer = urand(17500, 25000);
CanBlink = true;
} else FrostNova_Timer -= diff;
if (Frostbolt_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_FROSTBOLT);
- Frostbolt_Timer = 4500 + rand()%1500;
+ Frostbolt_Timer = urand(4500, 6000);
} else Frostbolt_Timer -= diff;
if (FireBall_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_FIREBALL);
- FireBall_Timer = 4500 + rand()%1500;
+ FireBall_Timer = urand(4500, 6000);
} else FireBall_Timer -= diff;
if (CanBlink)
@@ -191,7 +191,7 @@ public:
me->GetMotionMaster()->MovementExpired();
DoCast(me, SPELL_BLINK);
- Blink_Timer = 1000 + rand()%1500;
+ Blink_Timer = urand(1000, 2500);
CanBlink = false;
} else Blink_Timer -= diff;
}
@@ -290,7 +290,7 @@ public:
if (ArcaneBolt_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_ARCANE_BOLT);
- ArcaneBolt_Timer = 2000 + rand()%2500;
+ ArcaneBolt_Timer = urand(2000, 4500);
} else ArcaneBolt_Timer -= diff;
if (Apprentice_Timer <= diff)
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp
index 43171eda1af..e744cd0f8fb 100644
--- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp
+++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp
@@ -157,7 +157,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_FLAME_SHOCK);
- flameshock_timer = 10000 + rand()%5000;
+ flameshock_timer = urand(10000, 15000);
} else flameshock_timer -= diff;
if (arcaneshock_timer <= diff)
@@ -165,7 +165,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_ARCANE_SHOCK);
- arcaneshock_timer = 10000 + rand()%5000;
+ arcaneshock_timer = urand(10000, 15000);
} else arcaneshock_timer -= diff;
if (frostshock_timer <= diff)
@@ -173,7 +173,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_FROST_SHOCK);
- frostshock_timer = 10000 + rand()%5000;
+ frostshock_timer = urand(10000, 15000);
} else frostshock_timer -= diff;
if (shadowshock_timer <= diff)
@@ -181,7 +181,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_SHADOW_SHOCK);
- shadowshock_timer = 10000 + rand()%5000;
+ shadowshock_timer = urand(10000, 15000);
} else shadowshock_timer -= diff;
if (chainlightning_timer <= diff)
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp
index 8f1453e51ee..7ffc203f694 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp
@@ -74,8 +74,8 @@ public:
void Reset()
{
EventCheck_Timer = 5000;
- CorrosiveAcid_Timer = 5000 + rand()%5000;
- Fear_Timer = 25000 + rand()%5000;
+ CorrosiveAcid_Timer = urand(5000, 10000);
+ Fear_Timer = urand(25000, 30000);
Enrage_Timer = 180000;
Intro = false;
IsBanished = true;
@@ -182,13 +182,13 @@ public:
if (CorrosiveAcid_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_CORROSIVE_ACID);
- CorrosiveAcid_Timer = 15000 + rand()%10000;
+ CorrosiveAcid_Timer = urand(15000, 25000);
} else CorrosiveAcid_Timer -= diff;
if (Fear_Timer <= diff)
{
DoCast(me, SPELL_FEAR);
- Fear_Timer = 20000 + rand()%15000;
+ Fear_Timer = urand(20000, 35000);
} else Fear_Timer -= diff;
if (IsHeroic())
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
index 1987c1bb01a..dd5df358d53 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
@@ -152,14 +152,14 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_CHARGE);
- Charge_Timer = 15000 + rand()%10000;
+ Charge_Timer = urand(15000, 25000);
} else Charge_Timer -= diff;
//Knockback_Timer
if (Knockback_Timer <= diff)
{
DoCast(me, SPELL_WAR_STOMP);
- Knockback_Timer = 18000 + rand()%6000;
+ Knockback_Timer = urand(18000, 24000);
} else Knockback_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
index 6d3a5f181d4..8cf8d61b845 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
@@ -165,7 +165,7 @@ public:
void Reset()
{
- ShadowBoltVolley_Timer = 7000 + rand()%7000;
+ ShadowBoltVolley_Timer = urand(7000, 14000);
DrawShadows_Timer = 45000;
summonTraveler_Timer = 90000;
banish_Timer = 17000;
@@ -269,7 +269,7 @@ public:
if (ShadowBoltVolley_Timer <= diff)
{
DoCast(me, SPELL_SHADOWBOLT_VOLLEY);
- ShadowBoltVolley_Timer = 15000 + rand()%15000;
+ ShadowBoltVolley_Timer = urand(15000, 30000);
} else ShadowBoltVolley_Timer -= diff;
if (IsHeroic() && banish_Timer <= diff)
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
index bd6539335c8..ebb279f74ac 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
@@ -64,9 +64,9 @@ public:
void Reset()
{
SonicBoom_Timer = 30000;
- MurmursTouch_Timer = 8000 + rand()%12000;
+ MurmursTouch_Timer = urand(8000, 20000);
Resonance_Timer = 5000;
- MagneticPull_Timer = 15000 + rand()%15000;
+ MagneticPull_Timer = urand(15000, 30000);
ThunderingStorm_Timer = 15000;
SonicShock_Timer = 10000;
SonicBoom = false;
@@ -133,7 +133,7 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 80, true))
DoCast(target, SPELL_MURMURS_TOUCH);
- MurmursTouch_Timer = 25000 + rand()%10000;
+ MurmursTouch_Timer = urand(25000, 35000);
} else MurmursTouch_Timer -= diff;
// Resonance
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
index ec7f9a8e070..c28fe68d9e0 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
@@ -646,7 +646,7 @@ public:
case PHASE_NORMAL_MAIEV:
AttackStart(me->getVictim());
Timer[EVENT_TAUNT] = 32000;
- Timer[EVENT_SHEAR] = 10000 + rand()%15 * 1000;
+ Timer[EVENT_SHEAR] = urand(10, 25) * 1000;
Timer[EVENT_FLAME_CRASH] = 20000;
Timer[EVENT_PARASITIC_SHADOWFIEND] = 25000;
Timer[EVENT_PARASITE_CHECK] = 0;
@@ -657,14 +657,14 @@ public:
Timer[EVENT_TRANSFORM_NORMAL] = 60000;
if (NextPhase == PHASE_NORMAL_2)
break;
- Timer[EVENT_ENRAGE] = 30000 + rand()%10 * 1000;
+ Timer[EVENT_ENRAGE] = urand(30, 40) * 1000;
break;
case PHASE_FLIGHT:
Timer[EVENT_FIREBALL] = 1000;
if (!(rand()%4))
Timer[EVENT_DARK_BARRAGE] = 10000;
- Timer[EVENT_EYE_BLAST] = 10000 + rand()%15 * 1000;
- Timer[EVENT_MOVE_POINT] = 20000 + rand()%20 * 1000;
+ Timer[EVENT_EYE_BLAST] = urand(10, 25) * 1000;
+ Timer[EVENT_MOVE_POINT] = urand(20, 40) * 1000;
break;
case PHASE_DEMON:
Timer[EVENT_SHADOW_BLAST] = 1000;
@@ -1022,7 +1022,7 @@ public:
if (soundid)
DoPlaySoundToSet(me, soundid);
}
- Timer[EVENT_TAUNT] = 25000 + rand()%10000;
+ Timer[EVENT_TAUNT] = urand(25000, 35000);
break;
case EVENT_SHEAR:
@@ -1033,14 +1033,14 @@ public:
case EVENT_FLAME_CRASH:
DoCast(me->getVictim(), SPELL_FLAME_CRASH);
- Timer[EVENT_FLAME_CRASH] = 30000 + rand()%10000;
+ Timer[EVENT_FLAME_CRASH] = urand(30000, 40000);
break;
case EVENT_PARASITIC_SHADOWFIEND:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 200, true))
DoCast(target, SPELL_PARASITIC_SHADOWFIEND, true);
- Timer[EVENT_PARASITIC_SHADOWFIEND] = 35000 + rand()%10000;
+ Timer[EVENT_PARASITIC_SHADOWFIEND] = urand(35000, 45000);
}
break;
@@ -1050,7 +1050,7 @@ public:
case EVENT_DRAW_SOUL:
DoCast(me->getVictim(), SPELL_DRAW_SOUL);
- Timer[EVENT_DRAW_SOUL] = 50000 + rand()%10000;
+ Timer[EVENT_DRAW_SOUL] = urand(50000, 60000);
break;
// PHASE_NORMAL_2
@@ -1172,7 +1172,7 @@ public:
Phase = PHASE_NORMAL_MAIEV;
IllidanGUID = 0;
Timer[EVENT_MAIEV_STEALTH] = 0;
- Timer[EVENT_MAIEV_TAUNT] = 22000 + rand()%21 * 1000;
+ Timer[EVENT_MAIEV_TAUNT] = urand(22, 43) * 1000;
Timer[EVENT_MAIEV_SHADOW_STRIKE] = 30000;
SetEquipmentSlots(false, 44850, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, 45738);
@@ -1321,7 +1321,7 @@ public:
if (MaievTaunts[random].text.size())
me->MonsterYell(MaievTaunts[random].text.c_str(), LANG_UNIVERSAL, 0);
DoPlaySoundToSet(me, sound);
- Timer[EVENT_MAIEV_TAUNT] = 22000 + rand()%21 * 1000;
+ Timer[EVENT_MAIEV_TAUNT] = urand(22, 43) * 1000;
}
break;
case EVENT_MAIEV_SHADOW_STRIKE:
@@ -1590,7 +1590,7 @@ public:
break;
case PHASE_FIGHT_MINIONS:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- Timer = 10000 + rand()%6000; // summon minion
+ Timer = urand(10000, 16000); // summon minion
break;
case PHASE_RETURN:
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -1780,7 +1780,7 @@ public:
AttackStart(Elite);
me->AddThreat(Elite, 1000000.0f);
}
- Timer = 10000 + rand()%6000;
+ Timer = urand(10000, 16000);
GETUNIT(Illidan, IllidanGUID);
if (Illidan && Illidan->HealthBelowPct(10))
EnterPhase(PHASE_RETURN);
diff --git a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
index a69ed1f7e7d..645a9fe7978 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
@@ -128,7 +128,7 @@ public:
FatalAttractionExplodeTimer = 70000;
ShriekTimer = 30000;
SaberTimer = 35000;
- RandomYellTimer = 70000 + rand()%41 * 1000;
+ RandomYellTimer = urand(70, 111) * 1000;
EnrageTimer = 600000;
ExplosionCount = 0;
@@ -237,7 +237,7 @@ public:
DoScriptText(RAND(SAY_SPELL2, SAY_SPELL3), me);
FatalAttractionExplodeTimer = 2000;
- FatalAttractionTimer = 40000 + rand()%31 * 1000;
+ FatalAttractionTimer = urand(40, 71) * 1000;
} else FatalAttractionTimer -= diff;
if (FatalAttractionExplodeTimer <= diff)
@@ -293,7 +293,7 @@ public:
if (RandomYellTimer <= diff)
{
DoScriptText(RAND(SAY_TAUNT1, SAY_TAUNT2, SAY_TAUNT3), me);
- RandomYellTimer = 60000 + rand()%91 * 1000;
+ RandomYellTimer = urand(60, 151) * 1000;
} else RandomYellTimer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
index 1519713183d..8b39fe8a8f7 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
@@ -582,7 +582,7 @@ public:
{
me->InterruptNonMeleeSpells(false);
DoCast(me->getVictim(), SPELL_DEADEN);
- DeadenTimer = 25000 + rand()%10000;
+ DeadenTimer = urand(25000, 35000);
if (!(rand()%2))
{
DoScriptText(DESI_SAY_SPEC, me);
@@ -676,7 +676,7 @@ public:
if (SoulScreamTimer <= diff)
{
DoCast(me->getVictim(), SPELL_SOUL_SCREAM);
- SoulScreamTimer = 9000 + rand()%2000;
+ SoulScreamTimer = urand(9000, 11000);
if (!(rand()%3))
{
DoScriptText(ANGER_SAY_SPEC, me);
diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
index 074bb16e7a0..d6510db0cbb 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
@@ -246,7 +246,7 @@ public:
if (instance)
instance->SetData(DATA_TERONGOREFIENDEVENT, NOT_STARTED);
- IncinerateTimer = 20000 + rand()%11000;
+ IncinerateTimer = urand(20000, 31000);
SummonDoomBlossomTimer = 12000;
EnrageTimer = 600000;
CrushingShadowsTimer = 22000;
@@ -460,7 +460,7 @@ public:
{
DoScriptText(RAND(SAY_SPECIAL1, SAY_SPECIAL2), me);
DoCast(target, SPELL_INCINERATE);
- IncinerateTimer = 20000 + rand()%31 * 1000;
+ IncinerateTimer = urand(20, 51) * 1000;
}
} else IncinerateTimer -= diff;
@@ -469,7 +469,7 @@ public:
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);
if (target && target->isAlive())
DoCast(target, SPELL_CRUSHING_SHADOWS);
- CrushingShadowsTimer = 10000 + rand()%16 * 1000;
+ CrushingShadowsTimer = urand(10, 26) * 1000;
} else CrushingShadowsTimer -= diff;
/*** NOTE FOR FUTURE DEV: UNCOMMENT BELOW ONLY IF MIND CONTROL IS FULLY IMPLEMENTED **/
@@ -492,7 +492,7 @@ public:
if (RandomYellTimer <= diff)
{
DoScriptText(RAND(SAY_SPELL1, SAY_SPELL2), me);
- RandomYellTimer = 50000 + rand()%51 * 1000;
+ RandomYellTimer = urand(50, 101) * 1000;
} else RandomYellTimer -= diff;
if (!me->HasAura(SPELL_BERSERK))
diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
index f7e98444be8..6fe24378f79 100644
--- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
+++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
@@ -613,8 +613,8 @@ public:
void Reset()
{
- BlizzardTimer = 30000 + rand()%61 * 1000;
- FlamestrikeTimer = 30000 + rand()%61 * 1000;
+ BlizzardTimer = urand(30, 91) * 1000;
+ FlamestrikeTimer = urand(30, 91) * 1000;
ArcaneBoltTimer = 10000;
DampenMagicTimer = 2000;
ArcaneExplosionTimer = 14000;
@@ -673,7 +673,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
DoCast(target, SPELL_BLIZZARD);
- BlizzardTimer = 45000 + rand()%46 * 1000;
+ BlizzardTimer = urand(45, 91) * 1000;
FlamestrikeTimer += 10000;
Cooldown = 1000;
}
@@ -684,7 +684,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
DoCast(target, SPELL_FLAMESTRIKE);
- FlamestrikeTimer = 55000 + rand()%46 * 1000;
+ FlamestrikeTimer = urand(55, 101) * 1000;
BlizzardTimer += 10000;
Cooldown = 2000;
}
@@ -756,7 +756,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
DoCast(target, SPELL_DIVINE_WRATH);
- DivineWrathTimer = 40000 + rand()%41 * 1000;
+ DivineWrathTimer = urand(40, 81) * 1000;
}
} else DivineWrathTimer -= diff;
@@ -799,7 +799,7 @@ public:
EnvenomTargetGUID = 0;
DeadlyPoisonTimer = 20000;
- VanishTimer = 60000 + rand()%61 * 1000;
+ VanishTimer = urand(60, 121) * 1000;
AppearEnvenomTimer = 150000;
HasVanished = false;
@@ -827,7 +827,7 @@ public:
if (DeadlyPoisonTimer <= diff)
{
DoCast(me->getVictim(), SPELL_DEADLY_POISON);
- DeadlyPoisonTimer = 15000 + rand()%31 * 1000;
+ DeadlyPoisonTimer = urand(15, 46) * 1000;
} else DeadlyPoisonTimer -= diff;
if (AppearEnvenomTimer <= diff) // Cast Envenom. This is cast 4 seconds after Vanish is over
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
index 65cb0173cd7..a29fafe4edb 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
@@ -691,8 +691,8 @@ public:
void Reset()
{
- Mindblast_Timer = 3000 + rand()%5000;
- Earthshock_Timer = 5000 + rand()%5000;
+ Mindblast_Timer = urand(3000, 8000);
+ Earthshock_Timer = urand(5000, 10000);
if (instance)
{
@@ -764,7 +764,7 @@ public:
if (target)DoCast(target, SPELL_MINDBLAST);
- Mindblast_Timer = 10000 + rand()%5000;
+ Mindblast_Timer = urand(10000, 15000);
} else Mindblast_Timer -= diff;
if (Earthshock_Timer <= diff)
@@ -787,7 +787,7 @@ public:
}
}
}
- Earthshock_Timer = 8000 + rand()%7000;
+ Earthshock_Timer = urand(8000, 15000);
} else Earthshock_Timer -= diff;
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
index 7cdfdc383bd..5265dff16e2 100644
--- a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
+++ b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
@@ -213,7 +213,7 @@ public:
if (m_uiReverberation_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_REVERBERATION, true);
- m_uiReverberation_Timer = 15000 + rand()%10000;
+ m_uiReverberation_Timer = urand(15000, 25000);
}
else
m_uiReverberation_Timer -= uiDiff;
diff --git a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
index de3b93d029d..b941e3bc581 100644
--- a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
+++ b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
@@ -524,7 +524,7 @@ public:
if (target)
DoCast(target, SPELL_GREATER_POLYMORPH);
- GreaterPolymorph_Timer = 15000 + rand()%5000;
+ GreaterPolymorph_Timer = urand(15000, 20000);
} else GreaterPolymorph_Timer -= diff;
//LightningBolt_Timer
@@ -581,8 +581,8 @@ public:
void Reset()
{
GreaterPowerWordShield_Timer = 5000;
- Heal_Timer = 25000 + rand()%15000;
- PrayerofHealing_Timer = 45000 + rand()%10000;
+ Heal_Timer = urand(25000, 40000);
+ PrayerofHealing_Timer = urand(45000, 55000);
//reset encounter
if (instance)
@@ -648,14 +648,14 @@ public:
if (Heal_Timer <= diff)
{
DoCast(me, SPELL_HEAL);
- Heal_Timer = 15000 + rand()%25000;
+ Heal_Timer = urand(15000, 40000);
} else Heal_Timer -= diff;
//PrayerofHealing_Timer
if (PrayerofHealing_Timer <= diff)
{
DoCast(me, SPELL_PRAYER_OH);
- PrayerofHealing_Timer = 35000 + rand()%15000;
+ PrayerofHealing_Timer = urand(35000, 50000);
} else PrayerofHealing_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
index 6918a076f6e..755106f7092 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
@@ -424,7 +424,7 @@ class boss_magtheridon : public CreatureScript
summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
}
- Blaze_Timer = 20000 + rand()%20000;
+ Blaze_Timer = urand(20000, 40000);
}
else
Blaze_Timer -= diff;
@@ -497,10 +497,10 @@ class mob_hellfire_channeler : public CreatureScript
void Reset()
{
- ShadowBoltVolley_Timer = 8000 + rand()%2000;
+ ShadowBoltVolley_Timer = urand(8000, 10000);
DarkMending_Timer = 10000;
- Fear_Timer = 15000 + rand()%5000;
- Infernal_Timer = 10000 + rand()%40000;
+ Fear_Timer = urand(15000, 20000);
+ Infernal_Timer = urand(10000, 50000);
Check_Timer = 5000;
}
@@ -547,7 +547,7 @@ class mob_hellfire_channeler : public CreatureScript
if (ShadowBoltVolley_Timer <= diff)
{
DoCast(me, SPELL_SHADOW_BOLT_VOLLEY);
- ShadowBoltVolley_Timer = 10000 + rand()%10000;
+ ShadowBoltVolley_Timer = urand(10000, 20000);
}
else
ShadowBoltVolley_Timer -= diff;
@@ -565,7 +565,7 @@ class mob_hellfire_channeler : public CreatureScript
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))
DoCast(target, SPELL_FEAR);
- Fear_Timer = 25000 + rand()%15000;
+ Fear_Timer = urand(25000, 40000);
}
else
Fear_Timer -= diff;
@@ -574,7 +574,7 @@ class mob_hellfire_channeler : public CreatureScript
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_BURNING_ABYSSAL, true);
- Infernal_Timer = 30000 + rand()%10000;
+ Infernal_Timer = urand(30000, 40000);
}
else
Infernal_Timer -= diff;
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp
index df7f95abe2a..cae13adfef7 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp
@@ -102,7 +102,7 @@ class boss_gatewatcher_iron_hand : public CreatureScript
if (Shadow_Power_Timer <= diff)
{
DoCast(me, SPELL_SHADOW_POWER);
- Shadow_Power_Timer = 20000 + rand()%8000;
+ Shadow_Power_Timer = urand(20000, 28000);
}
else
Shadow_Power_Timer -= diff;
@@ -128,7 +128,7 @@ class boss_gatewatcher_iron_hand : public CreatureScript
if (Stream_of_Machine_Fluid_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_STREAM_OF_MACHINE_FLUID);
- Stream_of_Machine_Fluid_Timer = 35000 + rand()%15000;
+ Stream_of_Machine_Fluid_Timer = urand(35000, 50000);
}
else
Stream_of_Machine_Fluid_Timer -= diff;
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
index 05bf711432d..c5408b4bbf5 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
@@ -76,10 +76,10 @@ class boss_nethermancer_sepethrea : public CreatureScript
void Reset()
{
- frost_attack_Timer = 7000 + rand()%3000;
- arcane_blast_Timer = 12000 + rand()%6000;
- dragons_breath_Timer = 18000 + rand()%4000;
- knockback_Timer = 22000 + rand()%6000;
+ frost_attack_Timer = urand(7000, 10000);
+ arcane_blast_Timer = urand(12000, 18000);
+ dragons_breath_Timer = urand(18000, 22000);
+ knockback_Timer = urand(22000, 28000);
solarburn_Timer = 30000;
if (instance)
@@ -119,7 +119,7 @@ class boss_nethermancer_sepethrea : public CreatureScript
{
DoCast(me->getVictim(), SPELL_FROST_ATTACK);
- frost_attack_Timer = 7000 + rand()%3000;
+ frost_attack_Timer = urand(7000, 10000);
}
else
frost_attack_Timer -= diff;
@@ -141,7 +141,7 @@ class boss_nethermancer_sepethrea : public CreatureScript
return;
DoScriptText(RAND(SAY_DRAGONS_BREATH_1, SAY_DRAGONS_BREATH_2), me);
}
- dragons_breath_Timer = 12000 + rand()%10000;
+ dragons_breath_Timer = urand(12000, 22000);
}
else
dragons_breath_Timer -= diff;
@@ -150,7 +150,7 @@ class boss_nethermancer_sepethrea : public CreatureScript
if (knockback_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_KNOCKBACK);
- knockback_Timer = 15000 + rand()%10000;
+ knockback_Timer = urand(15000, 25000);
}
else
knockback_Timer -= diff;
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
index 54ecbdd621a..30a6bdbc0dd 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
@@ -83,10 +83,10 @@ class boss_pathaleon_the_calculator : public CreatureScript
void Reset()
{
Summon_Timer = 30000;
- ManaTap_Timer = 12000 + rand()%8000;
- ArcaneTorrent_Timer = 16000 + rand()%9000;
- Domination_Timer = 25000 + rand()%15000;
- ArcaneExplosion_Timer = 8000 + rand()%5000;
+ ManaTap_Timer = urand(12000, 20000);
+ ArcaneTorrent_Timer = urand(16000, 25000);
+ Domination_Timer = urand(25000, 40000);
+ ArcaneExplosion_Timer = urand(8000, 13000);
Enraged = false;
@@ -135,7 +135,7 @@ class boss_pathaleon_the_calculator : public CreatureScript
Wraith->AI()->AttackStart(target);
}
DoScriptText(SAY_SUMMON, me);
- Summon_Timer = 30000 + rand()%15000;
+ Summon_Timer = urand(30000, 45000);
}
else
Summon_Timer -= diff;
@@ -143,7 +143,7 @@ class boss_pathaleon_the_calculator : public CreatureScript
if (ManaTap_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_MANA_TAP);
- ManaTap_Timer = 14000 + rand()%8000;
+ ManaTap_Timer = urand(14000, 22000);
}
else
ManaTap_Timer -= diff;
@@ -151,7 +151,7 @@ class boss_pathaleon_the_calculator : public CreatureScript
if (ArcaneTorrent_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_ARCANE_TORRENT);
- ArcaneTorrent_Timer = 12000 + rand()%6000;
+ ArcaneTorrent_Timer = urand(12000, 18000);
}
else
ArcaneTorrent_Timer -= diff;
@@ -163,7 +163,7 @@ class boss_pathaleon_the_calculator : public CreatureScript
DoScriptText(RAND(SAY_DOMINATION_1, SAY_DOMINATION_2), me);
DoCast(target, SPELL_DOMINATION);
}
- Domination_Timer = 25000 + rand()%5000;
+ Domination_Timer = urand(25000, 30000);
}
else
Domination_Timer -= diff;
@@ -174,7 +174,7 @@ class boss_pathaleon_the_calculator : public CreatureScript
if (ArcaneExplosion_Timer <= diff)
{
DoCast(me->getVictim(), H_SPELL_ARCANE_EXPLOSION);
- ArcaneExplosion_Timer = 10000 + rand()%4000;
+ ArcaneExplosion_Timer = urand(10000, 14000);
}
else
ArcaneExplosion_Timer -= diff;
@@ -218,7 +218,7 @@ class mob_nether_wraith : public CreatureScript
void Reset()
{
- ArcaneMissiles_Timer = 1000 + rand()%3000;
+ ArcaneMissiles_Timer = urand(1000, 4000);
Detonation_Timer = 20000;
Die_Timer = 2200;
Detonation = false;
@@ -237,7 +237,7 @@ class mob_nether_wraith : public CreatureScript
DoCast(target, SPELL_ARCANE_MISSILES);
else
DoCast(me->getVictim(), SPELL_ARCANE_MISSILES);
- ArcaneMissiles_Timer = 5000 + rand()%5000;
+ ArcaneMissiles_Timer = urand(5000, 10000);
}
else
ArcaneMissiles_Timer -=diff;
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
index 2bf4abbcb96..75c80b06816 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
@@ -152,9 +152,9 @@ class boss_warp_splinter : public CreatureScript
void Reset()
{
- War_Stomp_Timer = 25000 + rand()%15000;
+ War_Stomp_Timer = urand(25000, 40000);
Summon_Treants_Timer = 45000;
- Arcane_Volley_Timer = 8000 + rand()%12000;
+ Arcane_Volley_Timer = urand(8000, 20000);
me->SetSpeed(MOVE_RUN, 0.7f, true);
}
@@ -199,7 +199,7 @@ class boss_warp_splinter : public CreatureScript
if (War_Stomp_Timer <= diff)
{
DoCast(me->getVictim(), WAR_STOMP);
- War_Stomp_Timer = 25000 + rand()%15000;
+ War_Stomp_Timer = urand(25000, 40000);
}
else
War_Stomp_Timer -= diff;
@@ -208,7 +208,7 @@ class boss_warp_splinter : public CreatureScript
if (Arcane_Volley_Timer <= diff)
{
DoCast(me->getVictim(), DUNGEON_MODE(ARCANE_VOLLEY, ARCANE_VOLLEY_H));
- Arcane_Volley_Timer = 20000 + rand()%15000;
+ Arcane_Volley_Timer = urand(20000, 35000);
}
else
Arcane_Volley_Timer -= diff;
diff --git a/src/server/scripts/Outland/blades_edge_mountains.cpp b/src/server/scripts/Outland/blades_edge_mountains.cpp
index f94a7d2725c..87304a3f721 100644
--- a/src/server/scripts/Outland/blades_edge_mountains.cpp
+++ b/src/server/scripts/Outland/blades_edge_mountains.cpp
@@ -30,6 +30,7 @@ npc_daranelle
npc_overseer_nuaar
npc_saikkal_the_elder
go_legion_obelisk
+go_thunderspike
EndContentData */
#include "ScriptPCH.h"
@@ -537,9 +538,30 @@ public:
};
/*######
-## AddSC
+## go_thunderspike
######*/
+enum TheThunderspike
+{
+ NPC_GOR_GRIMGUT = 21319,
+ QUEST_THUNDERSPIKE = 10526,
+};
+
+class go_thunderspike : public GameObjectScript
+{
+ public:
+ go_thunderspike() : GameObjectScript("go_thunderspike") { }
+
+ bool OnGossipHello(Player* player, GameObject* go)
+ {
+ if (player->GetQuestStatus(QUEST_THUNDERSPIKE) == QUEST_STATUS_INCOMPLETE && !go->FindNearestCreature(NPC_GOR_GRIMGUT, 25.0f, true))
+ if (Creature* gorGrimgut = go->SummonCreature(NPC_GOR_GRIMGUT, -2413.4f, 6914.48f, 25.01f, 3.67f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000))
+ gorGrimgut->AI()->AttackStart(player);
+
+ return true;
+ }
+};
+
void AddSC_blades_edge_mountains()
{
new mobs_bladespire_ogre();
@@ -550,4 +572,5 @@ void AddSC_blades_edge_mountains()
new go_legion_obelisk();
new npc_bloodmaul_brutebane();
new npc_ogre_brute();
+ new go_thunderspike();
}
diff --git a/src/server/scripts/World/areatrigger_scripts.cpp b/src/server/scripts/World/areatrigger_scripts.cpp
index e9ddfa43d6d..7d1ed17ed29 100644
--- a/src/server/scripts/World/areatrigger_scripts.cpp
+++ b/src/server/scripts/World/areatrigger_scripts.cpp
@@ -276,7 +276,7 @@ class AreaTrigger_at_nats_landing : public AreaTriggerScript
public:
AreaTrigger_at_nats_landing() : AreaTriggerScript("at_nats_landing") { }
- bool OnTrigger(Player* player, AreaTriggerEntry const* trigger)
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/)
{
if (!player->isAlive() || !player->HasAura(SPELL_FISH_PASTE))
return false;
@@ -402,11 +402,11 @@ class AreaTrigger_at_brewfest : public AreaTriggerScript
{
case AT_BREWFEST_DUROTAR:
if (Creature* tapper = player->FindNearestCreature(NPC_TAPPER_SWINDLEKEG, 20.0f))
- tapper->AI()->Talk(SAY_WELCOME, player->GetGUID());
+ tapper->AI()->Talk(SAY_WELCOME, player->GetGUID());
break;
case AT_BREWFEST_DUN_MOROGH:
if (Creature* ipfelkofer = player->FindNearestCreature(NPC_IPFELKOFER_IRONKEG, 20.0f))
- ipfelkofer->AI()->Talk(SAY_WELCOME, player->GetGUID());
+ ipfelkofer->AI()->Talk(SAY_WELCOME, player->GetGUID());
break;
default:
break;
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index 38a56f7b64a..03fc07c9582 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -2026,6 +2026,16 @@ public:
{
DoCast(me, 59907, false); // Spell for Lightwell Charges
}
+
+ void EnterEvadeMode()
+ {
+ if (!me->isAlive())
+ return;
+
+ me->DeleteThreatList();
+ me->CombatStop(true);
+ me->ResetPlayerDamageReq();
+ }
};
CreatureAI* GetAI(Creature* creature) const
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
index 768ebd8a97a..28f7f95b319 100755
--- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
@@ -45,6 +45,8 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PREPARE_STATEMENT(CHAR_GET_FREE_NAME, "SELECT guid, name FROM characters WHERE guid = ? AND account = ? AND (at_login & ?) = ? AND NOT EXISTS (SELECT NULL FROM characters WHERE name = ?)", CONNECTION_ASYNC);
PREPARE_STATEMENT(CHAR_GET_GUID_RACE_ACC_BY_NAME, "SELECT guid, race, account FROM characters WHERE name = ?", CONNECTION_ASYNC);
PREPARE_STATEMENT(CHAR_DEL_QUEST_STATUS_DAILY, "DELETE FROM character_queststatus_daily", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_QUEST_STATUS_WEEKLY, "DELETE FROM character_queststatus_weekly", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_BATTLEGROUND_RANDOM, "DELETE FROM character_battleground_random", CONNECTION_ASYNC);
// Start LoginQueryHolder content
PREPARE_STATEMENT(CHAR_LOAD_PLAYER, "SELECT guid, account, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags, "
@@ -95,6 +97,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PREPARE_STATEMENT(CHAR_ADD_MAIL, "INSERT INTO mail(id, messageType, stationery, mailTemplateId, sender, receiver, subject, body, has_items, expire_time, deliver_time, money, cod, checked) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_MAIL, "DELETE FROM mail WHERE id = ?", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_ADD_MAIL_ITEM, "INSERT INTO mail_items(mail_id, item_guid, receiver) VALUES (?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_DEL_INVALID_MAIL_ITEM, "DELETE FROM mail_items WHERE item_guid = ?", CONNECTION_ASYNC);
PREPARE_STATEMENT(CHAR_DEL_EMPTY_EXPIRED_MAIL, "DELETE FROM mail WHERE expire_time < ? AND has_items = 0 AND body = ''", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_GET_EXPIRED_MAIL, "SELECT id, messageType, sender, receiver, has_items, expire_time, cod, checked, mailTemplateId FROM mail WHERE expire_time < ?", CONNECTION_SYNCH)
PREPARE_STATEMENT(CHAR_GET_EXPIRED_MAIL_ITEMS, "SELECT item_guid, itemEntry, mail_id FROM mail_items mi INNER JOIN item_instance ii ON ii.guid = mi.item_guid LEFT JOIN mail mm ON mi.mail_id = mm.id WHERE mm.id IS NOT NULL AND mm.expire_time < ?", CONNECTION_SYNCH)
@@ -327,4 +330,35 @@ void CharacterDatabaseConnection::DoPrepareStatements()
"arenaPoints=?,totalHonorPoints=?,todayHonorPoints=?,yesterdayHonorPoints=?,totalKills=?,todayKills=?,yesterdayKills=?,chosenTitle=?,knownCurrencies=?,"
"watchedFaction=?,drunk=?,health=?,power1=?,power2=?,power3=?,power4=?,power5=?,power6=?,power7=?,latency=?,speccount=?,activespec=?,exploredZones=?,"
"equipmentCache=?,ammoId=?,knownTitles=?,actionBars=?,grantableLevels=?,online=? WHERE guid=?", CONNECTION_ASYNC);
+
+ PREPARE_STATEMENT(CHAR_UPDATE_AT_LOGIN_FLAG, "UPDATE characters SET at_login = at_login | ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPDATE_ALL_AT_LOGIN_FLAGS, "UPDATE characters SET at_login = at_login | ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_ADD_BUG_REPORT, "INSERT INTO bugreport (type, content) VALUES(?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_PETITION_NAME, "UPDATE petition SET name = ? WHERE petitionguid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_ADD_PETITION_SIGNATURE, "INSERT INTO petition_sign (ownerguid, petitionguid, playerguid, player_account) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_ACCOUNT_ONLINE, "UPDATE characters SET online = 0 WHERE account = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_ADD_GROUP, "INSERT INTO groups (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raiddifficulty) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_ADD_GROUP_MEMBER, "INSERT INTO group_member (guid, memberGuid, memberFlags, subgroup, roles) VALUES(?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_GROUP_MEMBER, "DELETE FROM group_member WHERE memberGuid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_GROUP_INSTANCE_PERM_BINDING, "DELETE FROM group_instance WHERE guid = ? AND (permanent = 1 OR instance IN (SELECT instance FROM character_instance WHERE guid = ?))", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPDATE_GROUP_LEADER, "UPDATE groups SET leaderGuid = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPDATE_GROUP_TYPE, "UPDATE groups SET groupType = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPDATE_GROUP_MEMBER_SUBGROUP, "UPDATE group_member SET subgroup = ? WHERE memberGuid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPDATE_GROUP_MEMBER_FLAG, "UPDATE group_member SET memberFlags = ? WHERE memberGuid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPDATE_GROUP_DIFFICULTY, "UPDATE groups SET difficulty = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPDATE_GROUP_RAID_DIFFICULTY, "UPDATE groups SET raiddifficulty = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_ALL_GM_TICKETS, "TRUNCATE TABLE gm_tickets", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_INVALID_SPELL, "DELETE FROM character_talent WHERE spell = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPDATE_DELETE_INFO, "UPDATE characters SET deleteInfos_Name = name, deleteInfos_Account = account, deleteDate = UNIX_TIMESTAMP(), name = '', account = 0 WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPDATE_ZONE, "UPDATE characters SET zone = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPDATE_LEVEL, "UPDATE characters SET level = ?, xp = 0 WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_INVALID_ACHIEV_PROGRESS_CRITERIA, "DELETE FROM character_achievement_progress WHERE criteria = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_INVALID_ACHIEVMENT, "DELETE FROM character_achievement WHERE achievement = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_ADD_ADDON, "INSERT INTO addons (name, crc) VALUES (?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_INVALID_PET_SPELL, "DELETE FROM pet_spell WHERE spell = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_GROUP_INSTANCE_BY_INSTANCE, "DELETE FROM group_instance WHERE instance = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_GROUP_INSTANCE_BY_GUID, "DELETE FROM group_instance WHERE guid = ? AND instance = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_ADD_GROUP_INSTANCE, "REPLACE INTO group_instance (guid, instance, permanent) VALUES (?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPDATE_INSTANCE_RESETTIME, "UPDATE instance SET resettime = ? WHERE id = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPDATE_GLOBAL_INSTANCE_RESETTIME, "UPDATE instance_reset SET resettime = ? WHERE mapid = ? AND difficulty = ?", CONNECTION_ASYNC);
}
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h
index 219ee525ae1..eea02ee60b9 100755
--- a/src/server/shared/Database/Implementation/CharacterDatabase.h
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.h
@@ -65,6 +65,8 @@ enum CharacterDatabaseStatements
CHAR_GET_FREE_NAME,
CHAR_GET_GUID_RACE_ACC_BY_NAME,
CHAR_DEL_QUEST_STATUS_DAILY,
+ CHAR_DEL_QUEST_STATUS_WEEKLY,
+ CHAR_DEL_BATTLEGROUND_RANDOM,
CHAR_LOAD_PLAYER,
CHAR_LOAD_PLAYER_GROUP,
CHAR_LOAD_PLAYER_BOUNDINSTANCES,
@@ -104,6 +106,7 @@ enum CharacterDatabaseStatements
CHAR_ADD_MAIL,
CHAR_DEL_MAIL,
CHAR_ADD_MAIL_ITEM,
+ CHAR_DEL_INVALID_MAIL_ITEM,
CHAR_DEL_EMPTY_EXPIRED_MAIL,
CHAR_GET_EXPIRED_MAIL,
CHAR_GET_EXPIRED_MAIL_ITEMS,
@@ -278,6 +281,7 @@ enum CharacterDatabaseStatements
CHAR_LOAD_GM_TICKETS,
CHAR_ADD_GM_TICKET,
CHAR_DEL_GM_TICKET,
+ CHAR_DEL_ALL_GM_TICKETS,
CHAR_DEL_PLAYER_GM_TICKETS,
CHAR_ADD_GM_SURVEY,
@@ -289,6 +293,36 @@ enum CharacterDatabaseStatements
CHAR_ADD_CHARACTER,
CHAR_UPD_CHARACTER,
+ CHAR_UPDATE_AT_LOGIN_FLAG,
+ CHAR_UPDATE_ALL_AT_LOGIN_FLAGS,
+ CHAR_ADD_BUG_REPORT,
+ CHAR_UPD_PETITION_NAME,
+ CHAR_ADD_PETITION_SIGNATURE,
+ CHAR_UPD_ACCOUNT_ONLINE,
+ CHAR_ADD_GROUP,
+ CHAR_ADD_GROUP_MEMBER,
+ CHAR_DEL_GROUP_MEMBER,
+ CHAR_DEL_GROUP_INSTANCE_PERM_BINDING,
+ CHAR_UPDATE_GROUP_LEADER,
+ CHAR_UPDATE_GROUP_TYPE,
+ CHAR_UPDATE_GROUP_MEMBER_SUBGROUP,
+ CHAR_UPDATE_GROUP_MEMBER_FLAG,
+ CHAR_UPDATE_GROUP_DIFFICULTY,
+ CHAR_UPDATE_GROUP_RAID_DIFFICULTY,
+ CHAR_DEL_INVALID_SPELL,
+ CHAR_UPDATE_DELETE_INFO,
+ CHAR_UPDATE_ZONE,
+ CHAR_UPDATE_LEVEL,
+ CHAR_DEL_INVALID_ACHIEV_PROGRESS_CRITERIA,
+ CHAR_DEL_INVALID_ACHIEVMENT,
+ CHAR_ADD_ADDON,
+ CHAR_DEL_INVALID_PET_SPELL,
+ CHAR_DEL_GROUP_INSTANCE_BY_INSTANCE,
+ CHAR_DEL_GROUP_INSTANCE_BY_GUID,
+ CHAR_ADD_GROUP_INSTANCE,
+ CHAR_UPDATE_INSTANCE_RESETTIME,
+ CHAR_UPDATE_GLOBAL_INSTANCE_RESETTIME,
+
MAX_CHARACTERDATABASE_STATEMENTS,
};
diff --git a/src/server/shared/Database/Implementation/LoginDatabase.cpp b/src/server/shared/Database/Implementation/LoginDatabase.cpp
index 5e47d5c8495..713d4a31e6d 100755
--- a/src/server/shared/Database/Implementation/LoginDatabase.cpp
+++ b/src/server/shared/Database/Implementation/LoginDatabase.cpp
@@ -49,4 +49,11 @@ void LoginDatabaseConnection::DoPrepareStatements()
PREPARE_STATEMENT(LOGIN_ADD_REALM_CHARS, "INSERT INTO realmcharacters (realmid, acctid, numchars) SELECT realmlist.id, account.id, 0 FROM realmlist, account LEFT JOIN realmcharacters ON acctid=account.id WHERE acctid IS NULL", CONNECTION_ASYNC);
PREPARE_STATEMENT(LOGIN_DEL_OLD_BANS, "DELETE FROM ip_banned WHERE unbandate <= UNIX_TIMESTAMP() AND unbandate<>bandate", CONNECTION_ASYNC);
PREPARE_STATEMENT(LOGIN_DEL_OLD_IP_BANS, "DELETE FROM ip_banned WHERE unbandate <= UNIX_TIMESTAMP() AND unbandate<>bandate", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_UPDATE_EXPANSION, "UPDATE account SET expansion = ? WHERE id = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_UPDATE_ACCOUNT_LOCK, "UPDATE account SET locked = ? WHERE id = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_ADD_LOG, "INSERT INTO logs (time, realm, type, string) VALUES (UNIX_TIMESTAMP(), ? , ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_UPDATE_USERNAME, "UPDATE account SET v = 0, s = 0, username = ?, sha_pass_hash = ? WHERE id = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_UPDATE_PASSWORD, "UPDATE account SET v = 0, s = 0, sha_pass_hash = ? WHERE id = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_UPDATE_MUTE_TIME, "UPDATE account SET mutetime = ? WHERE id = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_UPDATE_LAST_IP, "UPDATE account SET last_ip = ? WHERE username = ?", CONNECTION_ASYNC);
}
diff --git a/src/server/shared/Database/Implementation/LoginDatabase.h b/src/server/shared/Database/Implementation/LoginDatabase.h
index b8adfcabbee..98d9c505fa0 100755
--- a/src/server/shared/Database/Implementation/LoginDatabase.h
+++ b/src/server/shared/Database/Implementation/LoginDatabase.h
@@ -69,6 +69,13 @@ enum LoginDatabaseStatements
LOGIN_ADD_REALM_CHARS,
LOGIN_DEL_OLD_BANS,
LOGIN_DEL_OLD_IP_BANS,
+ LOGIN_UPDATE_EXPANSION,
+ LOGIN_UPDATE_ACCOUNT_LOCK,
+ LOGIN_ADD_LOG,
+ LOGIN_UPDATE_USERNAME,
+ LOGIN_UPDATE_PASSWORD,
+ LOGIN_UPDATE_MUTE_TIME,
+ LOGIN_UPDATE_LAST_IP,
MAX_LOGINDATABASE_STATEMENTS,
};
diff --git a/src/server/shared/Database/Implementation/WorldDatabase.cpp b/src/server/shared/Database/Implementation/WorldDatabase.cpp
index ebf60e3d20e..5df8299310f 100755
--- a/src/server/shared/Database/Implementation/WorldDatabase.cpp
+++ b/src/server/shared/Database/Implementation/WorldDatabase.cpp
@@ -26,6 +26,8 @@ void WorldDatabaseConnection::DoPrepareStatements()
PREPARE_STATEMENT(WORLD_DEL_CRELINKED_RESPAWN, "DELETE FROM linked_respawn WHERE guid = ?", CONNECTION_ASYNC)
PREPARE_STATEMENT(WORLD_REP_CRELINKED_RESPAWN, "REPLACE INTO linked_respawn (guid, linkedGuid) VALUES (?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(WORLD_LOAD_CRETEXT, "SELECT entry, groupid, id, text, type, language, probability, emote, duration, sound FROM creature_text", CONNECTION_SYNCH)
- PREPARE_STATEMENT(WORLD_LOAD_SMART_SCRIPTS, "SELECT entryorguid, source_type, id, link, event_type, event_phase_mask, event_chance, event_flags, event_param1, event_param2, event_param3, event_param4, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, target_type, target_param1, target_param2, target_param3, target_x, target_y, target_z, target_o FROM smart_scripts ORDER BY entryorguid, source_type, id, link", CONNECTION_SYNCH)
- PREPARE_STATEMENT(WORLD_LOAD_SMARTAI_WP, "SELECT entry, pointid, position_x, position_y, position_z FROM waypoints ORDER BY entry, pointid", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(WORLD_LOAD_SMART_SCRIPTS, "SELECT entryorguid, source_type, id, link, event_type, event_phase_mask, event_chance, event_flags, event_param1, event_param2, event_param3, event_param4, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, target_type, target_param1, target_param2, target_param3, target_x, target_y, target_z, target_o FROM smart_scripts ORDER BY entryorguid, source_type, id, link", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(WORLD_LOAD_SMARTAI_WP, "SELECT entry, pointid, position_x, position_y, position_z FROM waypoints ORDER BY entry, pointid", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(WORLD_DEL_GAMEOBJECT, "DELETE FROM gameobject WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_DEL_EVENT_GAMEOBJECT, "DELETE FROM game_event_gameobject WHERE guid = ?", CONNECTION_ASYNC);
}
diff --git a/src/server/shared/Database/Implementation/WorldDatabase.h b/src/server/shared/Database/Implementation/WorldDatabase.h
index 274ea4350c9..94d6365c081 100755
--- a/src/server/shared/Database/Implementation/WorldDatabase.h
+++ b/src/server/shared/Database/Implementation/WorldDatabase.h
@@ -48,6 +48,8 @@ enum WorldDatabaseStatements
WORLD_LOAD_CRETEXT,
WORLD_LOAD_SMART_SCRIPTS,
WORLD_LOAD_SMARTAI_WP,
+ WORLD_DEL_GAMEOBJECT,
+ WORLD_DEL_EVENT_GAMEOBJECT,
MAX_WORLDDATABASE_STATEMENTS,
};
diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp
index 697e7616c40..11f2fc090b1 100755
--- a/src/server/shared/Logging/Log.cpp
+++ b/src/server/shared/Logging/Log.cpp
@@ -370,13 +370,17 @@ void Log::outDB(LogTypes type, const char * str)
if (!str || type >= MAX_LOG_TYPES)
return;
- std::string new_str(str);
- if (new_str.empty())
+ std::string logStr(str);
+ if (logStr.empty())
return;
- LoginDatabase.EscapeString(new_str);
- LoginDatabase.PExecute("INSERT INTO logs (time, realm, type, string) "
- "VALUES (" UI64FMTD ", %u, %u, '%s');", uint64(time(0)), realm, type, new_str.c_str());
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_ADD_LOG);
+
+ stmt->setInt32(0, realm);
+ stmt->setInt32(1, type);
+ stmt->setString(2, logStr);
+
+ LoginDatabase.Execute(stmt);
}
void Log::outString(const char * str, ...)