aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2012_01_02_00_world_sai.sql41
-rw-r--r--sql/updates/world/2012_01_02_01_world_game_event.sql4
-rw-r--r--sql/updates/world/2012_01_02_02_world_creature_template.sql21
-rw-r--r--sql/updates/world/2012_01_02_03_world_creature_onkill_reputation.sql57
-rwxr-xr-xsrc/server/game/Chat/Commands/Level2.cpp6
-rwxr-xr-xsrc/server/game/Spells/SpellEffects.cpp3
-rwxr-xr-xsrc/server/game/World/World.cpp4
-rw-r--r--src/server/scripts/Commands/cs_wp.cpp2
-rwxr-xr-xsrc/server/shared/Database/Implementation/WorldDatabase.cpp2
-rwxr-xr-xsrc/server/shared/Database/Implementation/WorldDatabase.h2
-rwxr-xr-xsrc/server/shared/Utilities/Util.cpp25
-rwxr-xr-xsrc/server/shared/Utilities/Util.h3
12 files changed, 156 insertions, 14 deletions
diff --git a/sql/updates/world/2012_01_02_00_world_sai.sql b/sql/updates/world/2012_01_02_00_world_sai.sql
new file mode 100644
index 00000000000..3b9abd4c746
--- /dev/null
+++ b/sql/updates/world/2012_01_02_00_world_sai.sql
@@ -0,0 +1,41 @@
+-- [Q] Plan B (11658)
+SET @ENTRY_GUARD := 25342; -- Dead Caravan Guard
+SET @ENTRY_WORKER := 25343; -- Dead Caravan Worker
+SET @ITEM := 34842; -- Warsong Outfit
+SET @GOSSIP_1 := 9155;
+SET @GOSSIP_2 := 9156;
+SET @QUEST := 11658; -- Plan B
+
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP_1;
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP_2;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(@GOSSIP_1, 12388),
+(@GOSSIP_2, 12389);
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=@GOSSIP_1;
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=@GOSSIP_2;
+INSERT INTO `gossip_menu_option` VALUES
+(@GOSSIP_1, 0, 0, 'Retrieve Warsong Outfit.', 1, 1, 0, 0, 0, 0, ''),
+(@GOSSIP_2, 0, 0, 'Retrieve Warsong Outfit.', 1, 1, 0, 0, 0, 0, '');
+
+UPDATE `creature_template` SET `npcflag`=`npcflag`|1 WHERE `entry` IN (@ENTRY_GUARD, @ENTRY_WORKER);
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=25342 AND `id`=2534201;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=25343 AND `id`=2534301;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@ENTRY_GUARD, @ENTRY_WORKER);
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY_GUARD AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY_WORKER AND `source_type`=0;
+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_GUARD, 0, 0, 1, 62, 0, 100, 0, @GOSSIP_1, 0, 0, 0, 56, @ITEM, 1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Dead Caravan Guard - On Gossip Select - Add Item Warsong Outfit'),
+(@ENTRY_GUARD, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dead Caravan Guard - On Gossip Select - Forced Despawn'),
+(@ENTRY_WORKER, 0, 0, 1, 62, 0, 100, 0, @GOSSIP_2, 0, 0, 0, 56, @ITEM, 1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Dead Caravan Worker - On Gossip Select - Add Item Warsong Outfit'),
+(@ENTRY_WORKER, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dead Caravan Worker - On Gossip Select - Forced Despawn');
+
+-- Conditions
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=@GOSSIP_1;
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=@GOSSIP_2;
+INSERT INTO `conditions` VALUES
+(15, @GOSSIP_1, 0, 0, 9, @QUEST, 0, 0, 0, '', 'Only show gossip if player has quest Plan B'),
+(15, @GOSSIP_2, 0, 0, 9, @QUEST, 0, 0, 0, '', 'Only show gossip if player has quest Plan B'),
+(15, @GOSSIP_1, 0, 0, 2, @ITEM, 10, 0, 0, '', 'Only show gossip if player has less then 10 outfits'),
+(15, @GOSSIP_2, 0, 0, 2, @ITEM, 10, 0, 0, '', 'Only show gossip if player has less then 10 outfits');
diff --git a/sql/updates/world/2012_01_02_01_world_game_event.sql b/sql/updates/world/2012_01_02_01_world_game_event.sql
new file mode 100644
index 00000000000..11267a6b296
--- /dev/null
+++ b/sql/updates/world/2012_01_02_01_world_game_event.sql
@@ -0,0 +1,4 @@
+-- More Darkmoon Faerie synchronization
+UPDATE `game_event` SET `start_time`='2012-02-05 00:01:00' WHERE `eventEntry`=3;
+UPDATE `game_event` SET `start_time`='2012-03-04 00:01:00' WHERE `eventEntry`=4;
+UPDATE `game_event` SET `start_time`='2012-01-01 00:01:00' WHERE `eventEntry`=5;
diff --git a/sql/updates/world/2012_01_02_02_world_creature_template.sql b/sql/updates/world/2012_01_02_02_world_creature_template.sql
new file mode 100644
index 00000000000..1f87f418dec
--- /dev/null
+++ b/sql/updates/world/2012_01_02_02_world_creature_template.sql
@@ -0,0 +1,21 @@
+-- Kill xp exploit, mobs spawned by portal keepers don't gives xp on retail. (ie mobs 30662, 30664)
+UPDATE `creature_template` SET `flags_extra`= `flags_extra`|64 WHERE `entry` IN (
+-- NORMAL
+30661, -- CREATURE_AZURE_INVADER_1
+30961, -- CREATURE_AZURE_INVADER_2
+30662, -- CREATURE_AZURE_SPELLBREAKER_1
+30962, -- CREATURE_AZURE_SPELLBREAKER_2
+30663, -- CREATURE_AZURE_BINDER_1
+30918, -- CREATURE_AZURE_BINDER_2
+30664, -- CREATURE_AZURE_MAGE_SLAYER_1
+30963, -- CREATURE_AZURE_MAGE_SLAYER_2
+-- HEROIC:
+31487, -- Azure Invader
+31494, -- Azure Spellbreaker
+31483, -- Azure Binder
+31497, -- Azure Mage Slayer
+31484, -- Azure Binder
+31488, -- Azure Invader
+31495, -- Azure Spellbreaker
+31498, -- Azure Mage Slayer
+);
diff --git a/sql/updates/world/2012_01_02_03_world_creature_onkill_reputation.sql b/sql/updates/world/2012_01_02_03_world_creature_onkill_reputation.sql
new file mode 100644
index 00000000000..282fc58dd3b
--- /dev/null
+++ b/sql/updates/world/2012_01_02_03_world_creature_onkill_reputation.sql
@@ -0,0 +1,57 @@
+-- The Oculus hero
+DELETE FROM `creature_onkill_reputation` WHERE `creature_id` IN (31558, 31561, 31560, 31559, 30901, 30902, 30903, 30904, 30905, 30906, 30907, 30908, 30909, 30910, 30911, 30912, 30913, 30914, 30991, 30915, 30916, 30879);
+INSERT INTO `creature_onkill_reputation` VALUES
+(31558, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(31561, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(31560, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(31559, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(30901, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30902, 1037, 1052, 7, 0, 2, 7, 0, 2, 1),
+(30903, 1037, 1052, 7, 0, 30, 7, 0, 30, 1),
+(30904, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30905, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30991, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30906, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30907, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30908, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30909, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30910, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30911, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30912, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30913, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30914, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30879, 1037, 1052, 7, 0, 0, 7, 0, 0, 1),
+(30915, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30916, 1037, 1052, 7, 0, 15, 7, 0, 15, 1);
+
+-- Utgarde Pinnacle hero
+DELETE FROM `creature_onkill_reputation` WHERE `creature_id` IN (30774, 30788, 30807, 30810, 30756, 30762, 30764, 30765, 30766, 30767, 30770, 30772, 30779, 30790, 30803, 30775, 30791, 30804, 30806, 30809, 30816, 30817, 30818, 30819, 30820, 30821, 30822, 30823);
+INSERT INTO `creature_onkill_reputation` VALUES
+(30774, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(30788, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(30807, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(30810, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(30756, 1037, 1052, 7, 0, 0, 7, 0, 0, 1),
+(30762, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30764, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30765, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30766, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30767, 1037, 1052, 7, 0, 2, 7, 0, 2, 1),
+(30770, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30772, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30779, 1037, 1052, 7, 0, 0, 7, 0, 0, 1),
+(30790, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30803, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30775, 1037, 1052, 7, 0, 0, 7, 0, 0, 1),
+(30791, 1037, 1052, 7, 0, 2, 7, 0, 2, 1),
+(30804, 1037, 1052, 7, 0, 2, 7, 0, 2, 1),
+(30806, 1037, 1052, 7, 0, 30, 7, 0, 30, 1),
+(30809, 1037, 1052, 7, 0, 0, 7, 0, 0, 1),
+(30816, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30817, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30818, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30819, 1037, 1052, 7, 0, 2, 7, 0, 2, 1),
+(30820, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30821, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30822, 1037, 1052, 7, 0, 2, 7, 0, 2, 1),
+(30823, 1037, 1052, 7, 0, 2, 7, 0, 2, 1);
diff --git a/src/server/game/Chat/Commands/Level2.cpp b/src/server/game/Chat/Commands/Level2.cpp
index 144a1f83eff..2f04ebcf6bc 100755
--- a/src/server/game/Chat/Commands/Level2.cpp
+++ b/src/server/game/Chat/Commands/Level2.cpp
@@ -568,7 +568,7 @@ bool ChatHandler::HandleCharacterChangeRaceCommand(const char * args)
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
- stmt->setUInt16(0, uint16(AT_LOGIN_CHANGE_FACTION));
+ stmt->setUInt16(0, uint16(AT_LOGIN_CHANGE_RACE));
if (target)
{
@@ -710,13 +710,13 @@ bool ChatHandler::HandleLookupPlayerIpCommand(const char* args)
std::string ip;
int32 limit;
char* limit_str;
-
+
Player *chr = getSelectedPlayer();
if (chr == NULL)
{
if (!*args)
return false;
-
+
ip = strtok ((char*)args, " ");
limit_str = strtok (NULL, " ");
limit = limit_str ? atoi (limit_str) : -1;
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index bb898acd3a7..c3c73598af7 100755
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -5878,7 +5878,10 @@ void Spell::EffectInebriate(SpellEffIndex /*effIndex*/)
uint16 currentDrunk = player->GetDrunkValue();
uint16 drunkMod = damage * 256;
if (currentDrunk + drunkMod > 0xFFFF)
+ {
currentDrunk = 0xFFFF;
+ player->CastSpell(player, 67468, false);
+ }
else
currentDrunk += drunkMod;
player->SetDrunkValue(currentDrunk, m_CastItem ? m_CastItem->GetEntry() : 0);
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index d2a4323bb30..388bafc503d 100755
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1936,7 +1936,7 @@ void World::Update(uint32 diff)
stmt->setUInt64(0, uint64(tmpDiff));
stmt->setUInt16(1, uint16(maxOnlinePlayers));
stmt->setUInt32(2, realmID);
- stmt->setUInt16(3, uint64(m_startTime));
+ stmt->setUInt64(3, uint64(m_startTime));
LoginDatabase.Execute(stmt);
}
@@ -1959,7 +1959,9 @@ void World::Update(uint32 diff)
/// <li> Handle all other objects
///- Update objects when the timer has passed (maps, transport, creatures, ...)
+ RecordTimeDiff(NULL);
sMapMgr->Update(diff);
+ RecordTimeDiff("UpdateMapMgr");
if (sWorld->getBoolConfig(CONFIG_AUTOBROADCAST))
{
diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp
index 6482589f149..8f5e862555c 100644
--- a/src/server/scripts/Commands/cs_wp.cpp
+++ b/src/server/scripts/Commands/cs_wp.cpp
@@ -1041,7 +1041,7 @@ public:
}
while (result->NextRow());
// set "wpguid" column to "empty" - no visual waypoint spawned
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WOLRD_UPD_ALL_WAYPOINT_DATA_WPGUID);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_ALL_WAYPOINT_DATA_WPGUID);
WorldDatabase.Execute(stmt);
//WorldDatabase.PExecute("UPDATE creature_movement SET wpguid = '0' WHERE wpguid <> '0'");
diff --git a/src/server/shared/Database/Implementation/WorldDatabase.cpp b/src/server/shared/Database/Implementation/WorldDatabase.cpp
index 7fd438daf48..d7d8491008b 100755
--- a/src/server/shared/Database/Implementation/WorldDatabase.cpp
+++ b/src/server/shared/Database/Implementation/WorldDatabase.cpp
@@ -48,7 +48,7 @@ void WorldDatabaseConnection::DoPrepareStatements()
PREPARE_STATEMENT(WORLD_UPD_WAYPOINT_DATA_POINT, "UPDATE waypoint_data SET point = point - 1 WHERE id = ? AND point > ?", CONNECTION_ASYNC);
PREPARE_STATEMENT(WORLD_UPD_WAYPOINT_DATA_POSITION, "UPDATE waypoint_data SET position_x = ?, position_y = ?, position_z = ? where id = ? AND point = ?", CONNECTION_ASYNC);
PREPARE_STATEMENT(WORLD_UPD_WAYPOINT_DATA_WPGUID, "UPDATE waypoint_data SET wpguid = ? WHERE id = ? and point = ?", CONNECTION_ASYNC);
- PREPARE_STATEMENT(WOLRD_UPD_ALL_WAYPOINT_DATA_WPGUID, "UPDATE waypoint_data SET wpguid = 0", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_ALL_WAYPOINT_DATA_WPGUID, "UPDATE waypoint_data SET wpguid = 0", CONNECTION_ASYNC);
PREPARE_STATEMENT(WORLD_INS_CREATURE_ADDON, "INSERT INTO creature_addon(guid, path_id) VALUES (?, ?)", CONNECTION_ASYNC);
PREPARE_STATEMENT(WORLD_UPD_CREATURE_ADDON_PATH, "UPDATE creature_addon SET path_id = ? WHERE guid = ?", CONNECTION_ASYNC);
PREPARE_STATEMENT(WORLD_DEL_CREATURE_ADDON, "DELETE FROM creature_addon WHERE guid = ?", CONNECTION_ASYNC);
diff --git a/src/server/shared/Database/Implementation/WorldDatabase.h b/src/server/shared/Database/Implementation/WorldDatabase.h
index 92aa75fae61..e708177503f 100755
--- a/src/server/shared/Database/Implementation/WorldDatabase.h
+++ b/src/server/shared/Database/Implementation/WorldDatabase.h
@@ -68,7 +68,7 @@ enum WorldDatabaseStatements
WORLD_UPD_WAYPOINT_DATA_POINT,
WORLD_UPD_WAYPOINT_DATA_POSITION,
WORLD_UPD_WAYPOINT_DATA_WPGUID,
- WOLRD_UPD_ALL_WAYPOINT_DATA_WPGUID,
+ WORLD_UPD_ALL_WAYPOINT_DATA_WPGUID,
WORLD_UPD_CREATURE_ADDON_PATH,
WORLD_INS_CREATURE_ADDON,
WORLD_DEL_CREATURE_ADDON,
diff --git a/src/server/shared/Utilities/Util.cpp b/src/server/shared/Utilities/Util.cpp
index ba385230822..6ae43bc6840 100755
--- a/src/server/shared/Utilities/Util.cpp
+++ b/src/server/shared/Utilities/Util.cpp
@@ -30,17 +30,22 @@
typedef ACE_TSS<SFMTRand> SFMTRandTSS;
static SFMTRandTSS sfmtRand;
-int32 irand (int32 min, int32 max)
+int32 irand(int32 min, int32 max)
{
return int32(sfmtRand->IRandom(min, max));
}
-uint32 urand (uint32 min, uint32 max)
+uint32 urand(uint32 min, uint32 max)
{
return sfmtRand->URandom(min, max);
}
-int32 rand32 ()
+float frand(float min, float max)
+{
+ return float(sfmtRand->Random() * (max - min) + min);
+}
+
+int32 rand32()
{
return int32(sfmtRand->BRandom());
}
@@ -50,27 +55,33 @@ double rand_norm(void)
return sfmtRand->Random();
}
-double rand_chance (void)
+double rand_chance(void)
{
return sfmtRand->Random() * 100.0;
}
+
#else
typedef ACE_TSS<MTRand> MTRandTSS;
static MTRandTSS mtRand;
int32 irand(int32 min, int32 max)
{
- return int32(mtRand->randInt (max - min)) + min;
+ return int32(mtRand->randInt(max - min)) + min;
}
uint32 urand(uint32 min, uint32 max)
{
- return mtRand->randInt (max - min) + min;
+ return mtRand->randInt(max - min) + min;
+}
+
+float frand(float min, float max)
+{
+ return float(mtRand->randExc(max - min) + min);
}
int32 rand32()
{
- return mtRand->randInt ();
+ return mtRand->randInt();
}
double rand_norm(void)
diff --git a/src/server/shared/Utilities/Util.h b/src/server/shared/Utilities/Util.h
index b67761c4977..684b26eea63 100755
--- a/src/server/shared/Utilities/Util.h
+++ b/src/server/shared/Utilities/Util.h
@@ -64,6 +64,9 @@ inline uint32 secsToTimeBitFields(time_t secs)
/* Return a random number in the range 0 .. RAND32_MAX. */
int32 rand32();
+ /* Return a random number in the range min..max */
+ float frand(float min, float max);
+
/* Return a random double from 0.0 to 1.0 (exclusive). Floats support only 7 valid decimal digits.
* A double supports up to 15 valid decimal digits and is used internally (RAND32_MAX has 10 digits).
* With an FPU, there is usually no difference in performance between float and double. */