From e587d8c1afdf28e62bb51accdc57d3f1c405fa4a Mon Sep 17 00:00:00 2001 From: click Date: Sat, 3 Nov 2012 15:04:30 +0100 Subject: [PATCH 1/9] Core. Fix non-PCH building (again)... --- src/server/game/Movement/Spline/MoveSpline.cpp | 2 +- src/server/scripts/Events/childrens_week.cpp | 1 + src/server/scripts/Northrend/sholazar_basin.cpp | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp index 65de999c5a7..7160f64c0fb 100644 --- a/src/server/game/Movement/Spline/MoveSpline.cpp +++ b/src/server/game/Movement/Spline/MoveSpline.cpp @@ -19,7 +19,7 @@ #include "MoveSpline.h" #include #include "Log.h" -#include "Unit.h" +#include "Creature.h" namespace Movement{ diff --git a/src/server/scripts/Events/childrens_week.cpp b/src/server/scripts/Events/childrens_week.cpp index c4d3650868d..763961271d8 100644 --- a/src/server/scripts/Events/childrens_week.cpp +++ b/src/server/scripts/Events/childrens_week.cpp @@ -17,6 +17,7 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellAuras.h" enum Orphans { diff --git a/src/server/scripts/Northrend/sholazar_basin.cpp b/src/server/scripts/Northrend/sholazar_basin.cpp index 14319d26cf5..63960f13bb7 100644 --- a/src/server/scripts/Northrend/sholazar_basin.cpp +++ b/src/server/scripts/Northrend/sholazar_basin.cpp @@ -33,6 +33,7 @@ EndContentData */ #include "ScriptedGossip.h" #include "ScriptedEscortAI.h" #include "SpellScript.h" +#include "SpellAuras.h" /*###### ## npc_injured_rainspeaker_oracle From 2450f4ea561904c7fec776569124007d415e1b31 Mon Sep 17 00:00:00 2001 From: ille Date: Sat, 3 Nov 2012 15:31:14 +0100 Subject: [PATCH 2/9] fishing: set respawntime to now when cant loot, for correct despawn of bobber removegameobject from player instead cancel spell, for correct remove of fishing aura --- src/server/game/Entities/GameObject/GameObject.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 3b3120d1cf9..214df2672cb 100755 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -359,7 +359,7 @@ void GameObject::Update(uint32 diff) Unit* caster = GetOwner(); if (caster && caster->GetTypeId() == TYPEID_PLAYER) { - caster->FinishSpell(CURRENT_CHANNELED_SPELL); + caster->ToPlayer()->RemoveGameObject(this, false); WorldPacket data(SMSG_FISH_ESCAPED, 0); caster->ToPlayer()->GetSession()->SendPacket(&data); @@ -1360,6 +1360,8 @@ void GameObject::Use(Unit* user) player->SendLoot(GetGUID(), LOOT_FISHING); } // TODO: else: junk + else + m_respawnTime = time(NULL); break; } From 573cd7dde248e721a6b58b5338e61010add09924 Mon Sep 17 00:00:00 2001 From: ille Date: Sat, 3 Nov 2012 16:01:46 +0100 Subject: [PATCH 3/9] fix random typos (f.i. blocked activation autocast petspells from spellbook) --- src/server/game/Handlers/PetHandler.cpp | 2 +- src/server/game/Spells/SpellEffects.cpp | 2 +- src/server/game/Spells/SpellInfo.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index 6f8f23dc8da..cb6e5265c76 100755 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -723,7 +723,7 @@ void WorldSession::HandlePetSpellAutocastOpcode(WorldPacket& recvPacket) SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellid); // do not add not learned spells/ passive spells - if (!pet->HasSpell(spellid) || spellInfo->IsAutocastable()) + if (!pet->HasSpell(spellid) || !spellInfo->IsAutocastable()) return; CharmInfo* charmInfo = pet->GetCharmInfo(); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 6709bde541b..1f0532d9b1e 100755 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -2399,7 +2399,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) // randomize position for multiple summons m_caster->GetRandomPoint(*destTarget, radius, pos); - summon = m_originalCaster->SummonCreature(entry, *destTarget, summonType, duration); + summon = m_originalCaster->SummonCreature(entry, pos, summonType, duration); if (!summon) continue; diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 37f6a4b8640..27b4f22bbcf 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -2338,7 +2338,7 @@ bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const continue; // if non-positive trigger cast targeted to positive target this main cast is non-positive // this will place this spell auras as debuffs - if (_IsPositiveTarget(spellTriggeredProto->Effects[i].TargetA.GetTarget(), spellTriggeredProto->Effects[effIndex].TargetB.GetTarget()) && !spellTriggeredProto->_IsPositiveEffect(i, true)) + if (_IsPositiveTarget(spellTriggeredProto->Effects[i].TargetA.GetTarget(), spellTriggeredProto->Effects[i].TargetB.GetTarget()) && !spellTriggeredProto->_IsPositiveEffect(i, true)) return false; } } From 69377bc1d23a221cd173615e08309f4cc5941931 Mon Sep 17 00:00:00 2001 From: MrSmite Date: Sun, 4 Nov 2012 04:32:25 -0500 Subject: [PATCH 4/9] Pets should face same direction as owner after follow. Fixes #8248 --- .../Movement/MovementGenerators/TargetedMovementGenerator.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 2cd3d745750..fdff5a92564 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -89,7 +89,6 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T &owner) Movement::MoveSplineInit init(owner); init.MoveTo(x,y,z); - init.SetFacing(i_target.getTarget()); init.SetWalk(((D*)this)->EnableWalking()); init.Launch(); } From dd2e02f157cec687eb634b37267aa54eaa16baf6 Mon Sep 17 00:00:00 2001 From: ille Date: Mon, 5 Nov 2012 12:44:45 +0100 Subject: [PATCH 5/9] Core/Scripts: tweak code in pyrewood_ambushAI::SummonCreatureWithRandomTarget() --- .../EasternKingdoms/silverpine_forest.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/silverpine_forest.cpp b/src/server/scripts/EasternKingdoms/silverpine_forest.cpp index c52e69787d4..b2cd3b16e7b 100644 --- a/src/server/scripts/EasternKingdoms/silverpine_forest.cpp +++ b/src/server/scripts/EasternKingdoms/silverpine_forest.cpp @@ -232,18 +232,16 @@ public: { Unit* target = NULL; if (PlayerGUID) - { - if (Unit* player = Unit::GetPlayer(*me, PlayerGUID)->ToUnit()) - target = RAND((Unit*)me, player); - } else + if (Player* player = Unit::GetPlayer(*me, PlayerGUID)) + if (player->isAlive() && RAND(0, 1)) + target = player; + + if (!target) target = me; - if (target) - { - summoned->setFaction(168); - summoned->AddThreat(target, 32.0f); - summoned->AI()->AttackStart(target); - } + summoned->setFaction(168); + summoned->AddThreat(target, 32.0f); + summoned->AI()->AttackStart(target); } } From 7bd86b6b839abb2f9d2451c052fd977d387760b3 Mon Sep 17 00:00:00 2001 From: Spp Date: Wed, 7 Nov 2012 09:18:42 +0100 Subject: [PATCH 6/9] Update characters_database.sql (Missing changes from 58ec4e5319) --- sql/base/characters_database.sql | 43 +++++++++++++------ .../2012_11_02_00_character_misc.sql | 1 - 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 4a2d2951da3..5548630d2d6 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -1727,20 +1727,6 @@ CREATE TABLE `guild_member` ( `rank` tinyint(3) unsigned NOT NULL, `pnote` varchar(31) NOT NULL DEFAULT '', `offnote` varchar(31) NOT NULL DEFAULT '', - `BankResetTimeMoney` int(10) unsigned NOT NULL DEFAULT '0', - `BankRemMoney` int(10) unsigned NOT NULL DEFAULT '0', - `BankResetTimeTab0` int(10) unsigned NOT NULL DEFAULT '0', - `BankRemSlotsTab0` int(10) unsigned NOT NULL DEFAULT '0', - `BankResetTimeTab1` int(10) unsigned NOT NULL DEFAULT '0', - `BankRemSlotsTab1` int(10) unsigned NOT NULL DEFAULT '0', - `BankResetTimeTab2` int(10) unsigned NOT NULL DEFAULT '0', - `BankRemSlotsTab2` int(10) unsigned NOT NULL DEFAULT '0', - `BankResetTimeTab3` int(10) unsigned NOT NULL DEFAULT '0', - `BankRemSlotsTab3` int(10) unsigned NOT NULL DEFAULT '0', - `BankResetTimeTab4` int(10) unsigned NOT NULL DEFAULT '0', - `BankRemSlotsTab4` int(10) unsigned NOT NULL DEFAULT '0', - `BankResetTimeTab5` int(10) unsigned NOT NULL DEFAULT '0', - `BankRemSlotsTab5` int(10) unsigned NOT NULL DEFAULT '0', UNIQUE KEY `guid_key` (`guid`), KEY `guildid_key` (`guildid`), KEY `guildid_rank_key` (`guildid`,`rank`) @@ -1756,6 +1742,35 @@ LOCK TABLES `guild_member` WRITE; /*!40000 ALTER TABLE `guild_member` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `guild_member_withdraw` +-- + +DROP TABLE IF EXISTS `guild_member_withdraw`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE IF NOT EXISTS `guild_member_withdraw` ( + `guid` int(10) unsigned NOT NULL, + `tab0` int(10) unsigned NOT NULL DEFAULT '0', + `tab1` int(10) unsigned NOT NULL DEFAULT '0', + `tab2` int(10) unsigned NOT NULL DEFAULT '0', + `tab3` int(10) unsigned NOT NULL DEFAULT '0', + `tab4` int(10) unsigned NOT NULL DEFAULT '0', + `tab5` int(10) unsigned NOT NULL DEFAULT '0', + `money` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`guid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Guild Member Daily Withdraws'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `guild_member_withdraw` +-- + +LOCK TABLES `guild_member_withdraw` WRITE; +/*!40000 ALTER TABLE `guild_member_withdraw` DISABLE KEYS */; +/*!40000 ALTER TABLE `guild_member_withdraw` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `guild_rank` -- diff --git a/sql/updates/characters/2012_11_02_00_character_misc.sql b/sql/updates/characters/2012_11_02_00_character_misc.sql index a7613944dc4..9cbbd423bb8 100644 --- a/sql/updates/characters/2012_11_02_00_character_misc.sql +++ b/sql/updates/characters/2012_11_02_00_character_misc.sql @@ -27,4 +27,3 @@ ALTER TABLE `guild_member` DROP COLUMN `BankResetTimeTab5`; DELETE FROM `worldstates` WHERE `entry`=20006; INSERT INTO `worldstates` (`entry`,`value`,`comment`) VALUES (20006,0, 'Guild daily reset'); - From bde6b76b2d3279ad50ef132ec0ea4e8629ab19b7 Mon Sep 17 00:00:00 2001 From: Spp Date: Wed, 7 Nov 2012 09:46:42 +0100 Subject: [PATCH 7/9] Core/Guild: Fix transaction not being properly closed and improve error message when fixing missing bank tabs --- src/server/game/Guilds/Guild.cpp | 18 +++++++----------- src/server/game/Guilds/Guild.h | 2 +- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index e41b8ff4ac8..8f7359d9d44 100755 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -223,10 +223,9 @@ void Guild::RankInfo::SaveToDB(SQLTransaction& trans) const CharacterDatabase.ExecuteOrAppend(trans, stmt); } -bool Guild::RankInfo::CreateMissingTabsIfNeeded(uint8 ranks, SQLTransaction& trans) +void Guild::RankInfo::CreateMissingTabsIfNeeded(uint8 tabs, SQLTransaction& trans, bool logOnCreate /* = false */) { - bool ret = false; - for (uint8 i = 0; i < ranks; ++i) + for (uint8 i = 0; i < tabs; ++i) { GuildBankRightsAndSlots& rightsAndSlots = m_bankTabRightsAndSlots[i]; if (rightsAndSlots.GetTabId() == i) @@ -236,7 +235,9 @@ bool Guild::RankInfo::CreateMissingTabsIfNeeded(uint8 ranks, SQLTransaction& tra if (m_rankId == GR_GUILDMASTER) rightsAndSlots.SetGuildMasterValues(); - ret = true; + if (logOnCreate) + sLog->outError(LOG_FILTER_GUILD, "Guild %u has broken Tab %u for rank %u. Created default tab.", m_guildId, i, m_rankId); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GUILD_BANK_RIGHT); stmt->setUInt32(0, m_guildId); stmt->setUInt8 (1, i); @@ -245,8 +246,6 @@ bool Guild::RankInfo::CreateMissingTabsIfNeeded(uint8 ranks, SQLTransaction& tra stmt->setUInt32(4, rightsAndSlots.GetSlots()); trans->Append(stmt); } - - return ret; } void Guild::RankInfo::WritePacket(WorldPacket& data) const @@ -2018,11 +2017,8 @@ bool Guild::Validate() else { SQLTransaction trans = CharacterDatabase.BeginTransaction(); - if (rankInfo->CreateMissingTabsIfNeeded(_GetPurchasedTabsSize(), trans)) - { - sLog->outError(LOG_FILTER_GUILD, "Guild %u has broken Tabs for rank id %u, creating default tab...", m_id, rankId); - CharacterDatabase.CommitTransaction(trans); - } + rankInfo->CreateMissingTabsIfNeeded(_GetPurchasedTabsSize(), trans, true); + CharacterDatabase.CommitTransaction(trans); } } } diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index deb89c169b6..a8bf5dcdb62 100755 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -500,7 +500,7 @@ private: } void SetBankTabSlotsAndRights(GuildBankRightsAndSlots rightsAndSlots, bool saveToDB); - bool CreateMissingTabsIfNeeded(uint8 ranks, SQLTransaction& trans); + void CreateMissingTabsIfNeeded(uint8 ranks, SQLTransaction& trans, bool logOnCreate = false); private: uint32 m_guildId; From 704a563fcde577efd01363b1286b2502b31d3706 Mon Sep 17 00:00:00 2001 From: w1sht0l1v3 Date: Wed, 7 Nov 2012 21:55:28 +0200 Subject: [PATCH 8/9] DB: Quest The Last Line Of Defense: Add missing spawns for Argent Cannons,their supports and template updates. Notes: both cannon spells need targeting scripting.This is needed before adding the rest of the missing spawns. --- .../world/2012_11_07_00_world_misc.sql | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 sql/updates/world/2012_11_07_00_world_misc.sql diff --git a/sql/updates/world/2012_11_07_00_world_misc.sql b/sql/updates/world/2012_11_07_00_world_misc.sql new file mode 100644 index 00000000000..db7c8f66fb1 --- /dev/null +++ b/sql/updates/world/2012_11_07_00_world_misc.sql @@ -0,0 +1,36 @@ +SET @GUID := 43456; + +DELETE FROM `creature` WHERE `guid` BETWEEN @GUID+0 AND @GUID+3; +INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`,`npcflag`,`unit_flags`,`dynamicflags`) VALUES +(@GUID+0,30236,571,1,64,0,0,6219.17,59.9983,400.375,1.6057,120,0,0,1,0,0,0,0,0), +(@GUID+1,30236,571,1,64,0,0,6256.11,93.2413,410.92,0.767945,120,0,0,1,0,0,0,0,0), +(@GUID+2,30236,571,1,64,0,0,6297.37,53.5677,410.957,0.802851,120,0,0,1,0,0,0,0,0), +(@GUID+3,30236,571,1,64,0,0,6162.81,60.9792,400.371,1.55334,120,0,0,1,0,0,0,0,0); + +DELETE FROM `creature_template_addon` WHERE `entry`=30236; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`mount`,`bytes1`,`bytes2`,`auras`) VALUES +(30236,0,0,0x0,0x1,''); + +DELETE FROM `creature_model_info` WHERE `modelid`=27101; +INSERT INTO `creature_model_info` (`modelid`,`bounding_radius`,`combat_reach`,`gender`) VALUES +(27101,0.3055,1,2); + +UPDATE `creature_template` SET `VehicleId`=246,`npcflag`=0x1000000,`resistance2`=4394,`resistance4`=1 WHERE `entry`=30236; + +DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`=30236; +INSERT INTO `npc_spellclick_spells` (`npc_entry`,`spell_id`,`cast_flags`,`user_type`) VALUES +(30236,57573,1,0); + +SET @OGUID := 7278; +DELETE FROM `gameobject` WHERE `id` IN (192657,192658,192769,192770,192767,192768,192771,192772); +INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES +(@OGUID+0, 192657, 571, 1, 64, 6255.958, 93.05556, 403.0368, 5.454153, 0, 0, 0, 1, 120, 255, 1), +(@OGUID+1, 192658, 571, 1, 64, 6255.961, 93.06424, 408.4696, 5.44543, 0, 0, 0, 1, 120, 255, 1), +(@OGUID+2, 192769, 571, 1, 64, 6219.205, 59.86806, 392.5132, 6.283184, 0, 0, 0, 1, 120, 255, 1), +(@OGUID+3, 192770, 571, 1, 64, 6219.202, 59.875, 397.924, 6.274461, 0, 0, 0, 1, 120, 255, 1), +(@OGUID+4, 192767, 571, 1, 64, 6297.223, 53.39583, 402.9972, 5.532692, 0, 0, 0, 1, 120, 255, 1), +(@OGUID+5, 192768, 571, 1, 64, 6297.226, 53.40451, 408.4129, 5.523969, 0, 0, 0, 1, 120, 255, 1), +(@OGUID+6, 192771, 571, 1, 64, 6162.772, 60.73438, 392.4362, 6.265733, 0, 0, 0, 1, 120, 255, 1), +(@OGUID+7, 192772, 571, 1, 64, 6162.768, 60.74306, 397.8138, 6.257008, 0, 0, 0, 1, 120, 255, 1); + +UPDATE `gameobject_template` SET `flags`=32,`faction`=114 WHERE `entry` IN (192657,192658,192769,192770,192767,192768,192771,192772); From fcc524d5985b9a7f5b30dd600aa99a184654a0bb Mon Sep 17 00:00:00 2001 From: Spp Date: Thu, 8 Nov 2012 11:13:46 +0100 Subject: [PATCH 9/9] Core/Guilds: Send correct opcode when purchasing a new tab and fix data not being saved in db after purchasing the new tab --- src/server/game/DungeonFinding/LFGQueue.cpp | 4 +- src/server/game/DungeonFinding/LFGQueue.h | 2 +- src/server/game/Guilds/Guild.cpp | 81 +++++++++++++++++---- src/server/game/Handlers/ChatHandler.cpp | 2 +- 4 files changed, 71 insertions(+), 18 deletions(-) diff --git a/src/server/game/DungeonFinding/LFGQueue.cpp b/src/server/game/DungeonFinding/LFGQueue.cpp index cf600b0645f..3bcd1ee5643 100644 --- a/src/server/game/DungeonFinding/LFGQueue.cpp +++ b/src/server/game/DungeonFinding/LFGQueue.cpp @@ -639,7 +639,7 @@ void LFGQueue::FindBestCompatibleInQueue(LfgQueueDataContainer::iterator itrQueu std::string sguid = o.str(); for (LfgCompatibleContainer::const_iterator itr = CompatibleMapStore.begin(); itr != CompatibleMapStore.end(); ++itr) - if (itr->second.compatibility == LFG_COMPATIBLES_WITH_LESS_PLAYERS && + if (itr->second.compatibility == LFG_COMPATIBLES_WITH_LESS_PLAYERS && std::string::npos != itr->first.find(sguid)) { UpdateBestCompatibleInQueue(itrQueue, itr->first, itr->second.roles); @@ -650,7 +650,7 @@ void LFGQueue::UpdateBestCompatibleInQueue(LfgQueueDataContainer::iterator itrQu { LfgQueueData& queueData = itrQueue->second; - uint8 storedSize = queueData.bestCompatible.empty() ? 0 : + uint8 storedSize = queueData.bestCompatible.empty() ? 0 : std::count(queueData.bestCompatible.begin(), queueData.bestCompatible.end(), '|') + 1; uint8 size = std::count(key.begin(), key.end(), '|') + 1; diff --git a/src/server/game/DungeonFinding/LFGQueue.h b/src/server/game/DungeonFinding/LFGQueue.h index f937ac0d21a..e6ba038a9e6 100644 --- a/src/server/game/DungeonFinding/LFGQueue.h +++ b/src/server/game/DungeonFinding/LFGQueue.h @@ -42,7 +42,7 @@ struct LfgCompatibilityData compatibility(_compatibility), roles(_roles) { } LfgCompatibility compatibility; - LfgRolesMap roles; + LfgRolesMap roles; }; /// Stores player or group queue info diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 8f7359d9d44..aef38d17ec4 100755 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -29,6 +29,56 @@ #define MAX_GUILD_BANK_TAB_TEXT_LEN 500 #define EMBLEM_PRICE 10 * GOLD +std::string _GetGuildEventString(GuildEvents event) +{ + switch (event) + { + case GE_PROMOTION: + return "Member promotion"; + case GE_DEMOTION: + return "Member demotion"; + case GE_MOTD: + return "Guild MOTD"; + case GE_JOINED: + return "Member joined"; + case GE_LEFT: + return "Member left"; + case GE_REMOVED: + return "Member removed"; + case GE_LEADER_IS: + return "Leader is"; + case GE_LEADER_CHANGED: + return "Leader changed"; + case GE_DISBANDED: + return "Guild disbanded"; + case GE_TABARDCHANGE: + return "Tabard change"; + case GE_RANK_UPDATED: + return "Rank updated"; + case GE_RANK_DELETED: + return "Rank deleted"; + case GE_SIGNED_ON: + return "Member signed on"; + case GE_SIGNED_OFF: + return "Member signed off"; + case GE_GUILDBANKBAGSLOTS_CHANGED: + return "Bank bag slots changed"; + case GE_BANK_TAB_PURCHASED: + return "Bank tab purchased"; + case GE_BANK_TAB_UPDATED: + return "Bank tab updated"; + case GE_BANK_MONEY_SET: + return "Bank money set"; + case GE_BANK_MONEY_CHANGED: + return "Bank money changed"; + case GE_BANK_TEXT_CHANGED: + return "Bank tab text changed"; + default: + break; + } + return ""; +} + inline uint32 _GetGuildBankTabPrice(uint8 tabId) { switch (tabId) @@ -1428,24 +1478,21 @@ void Guild::HandleBuyBankTab(WorldSession* session, uint8 tabId) if (_GetPurchasedTabsSize() >= GUILD_BANK_MAX_TABS) return; - if (tabId != _GetPurchasedTabsSize()) - return; + if (tabId != _GetPurchasedTabsSize()) + return; - uint32 tabCost = _GetGuildBankTabPrice(tabId) * GOLD; - if (!tabCost) - return; + uint32 tabCost = _GetGuildBankTabPrice(tabId) * GOLD; + if (!tabCost) + return; - if (!player->HasEnoughMoney(tabCost)) // Should not happen, this is checked by client - return; + if (!player->HasEnoughMoney(tabCost)) // Should not happen, this is checked by client + return; - player->ModifyMoney(-int32(tabCost)); + player->ModifyMoney(-int32(tabCost)); - uint8 rankId = member->GetRankId(); _CreateNewBankTab(); - _SetRankBankMoneyPerDay(rankId, uint32(GUILD_WITHDRAW_MONEY_UNLIMITED)); - GuildBankRightsAndSlots rightsAndSlots(tabId); - _SetRankBankTabRightsAndSlots(rankId, rightsAndSlots); - SendBankTabsInfo(session); + _BroadcastEvent(GE_BANK_TAB_PURCHASED, 0); + SendPermissions(session); /// Hack to force client to update permissions } void Guild::HandleInviteMember(WorldSession* session, std::string const& name) @@ -2299,6 +2346,10 @@ void Guild::_CreateNewBankTab() stmt->setUInt8 (1, tabId); trans->Append(stmt); + ++tabId; + for (Ranks::iterator itr = m_ranks.begin(); itr != m_ranks.end(); ++itr) + (*itr).CreateMissingTabsIfNeeded(tabId, trans, false); + CharacterDatabase.CommitTransaction(trans); } @@ -2734,7 +2785,9 @@ void Guild::_BroadcastEvent(GuildEvents guildEvent, uint64 guid, const char* par data << uint64(guid); BroadcastPacket(&data); - sLog->outDebug(LOG_FILTER_GUILD, "SMSG_GUILD_EVENT [Broadcast] Event: %u", guildEvent); + + if (sLog->ShouldLog(LOG_FILTER_GUILD, LOG_LEVEL_DEBUG)) + sLog->outDebug(LOG_FILTER_GUILD, "SMSG_GUILD_EVENT [Broadcast] Event: %s (%u)", _GetGuildEventString(guildEvent).c_str(), guildEvent); } void Guild::_SendBankList(WorldSession* session /* = NULL*/, uint8 tabId /*= 0*/, bool sendAllSlots /*= false*/, SlotIds *slots /*= NULL*/) const diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index 8b7fc5542ab..535fda34c49 100755 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -114,7 +114,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) return; break; default: - sLog->outError(LOG_FILTER_NETWORKIO, "Player %s (GUID: %u) sent a chatmessage with an invalid language/message type combination", + sLog->outError(LOG_FILTER_NETWORKIO, "Player %s (GUID: %u) sent a chatmessage with an invalid language/message type combination", GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow()); recvData.rfinish();