From e072ba4f562ddad56782faeb4a20cec769a418e5 Mon Sep 17 00:00:00 2001 From: Phantons Date: Thu, 7 Feb 2013 15:31:01 +0100 Subject: [PATCH 1/6] Core/Spells: Allow script only one effect with OnObjectTargetSelect or ObjectAreaTargetSelectHandler hooks when target, radius and conditions are the same. --- src/server/game/Spells/Spell.cpp | 26 +++++++++++++++++++++++++- src/server/game/Spells/Spell.h | 1 + 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 18dc6f104a4..320398de3f3 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -823,7 +823,8 @@ void Spell::SelectEffectImplicitTargets(SpellEffIndex effIndex, SpellImplicitTar if (effects[effIndex].TargetA.GetTarget() == effects[j].TargetA.GetTarget() && effects[effIndex].TargetB.GetTarget() == effects[j].TargetB.GetTarget() && effects[effIndex].ImplicitTargetConditions == effects[j].ImplicitTargetConditions && - effects[effIndex].CalcRadius(m_caster) == effects[j].CalcRadius(m_caster)) + effects[effIndex].CalcRadius(m_caster) == effects[j].CalcRadius(m_caster) && + CheckScriptEffectImplicitTargets(effIndex, j)) { effectMask |= 1 << j; } @@ -7155,6 +7156,29 @@ void Spell::CallScriptObjectTargetSelectHandlers(WorldObject*& target, SpellEffI } } +bool Spell::CheckScriptEffectImplicitTargets(uint32 effIndex, uint32 effIndexToCheck) +{ + // Skip if there are not any script + if (!m_loadedScripts.size()) + return true; + + for (std::list::iterator itr = m_loadedScripts.begin(); itr != m_loadedScripts.end(); ++itr) + { + std::list::iterator targetSelectHookEnd = (*itr)->OnObjectTargetSelect.end(), targetSelectHookItr = (*itr)->OnObjectTargetSelect.begin(); + for (; targetSelectHookItr != targetSelectHookEnd; ++targetSelectHookItr) + if (((*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && !(*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck)) || + (!(*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && (*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck))) + return false; + + std::list::iterator areaTargetSelectHookEnd = (*itr)->OnObjectAreaTargetSelect.end(), areaTargetSelectHookItr = (*itr)->OnObjectAreaTargetSelect.begin(); + for (; areaTargetSelectHookItr != areaTargetSelectHookEnd; ++areaTargetSelectHookItr) + if (((*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && !(*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck)) || + (!(*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && (*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck))) + return false; + } + return true; +} + bool Spell::CanExecuteTriggersOnHit(uint8 effMask, SpellInfo const* triggeredByAura) const { bool only_on_caster = (triggeredByAura && (triggeredByAura->AttributesEx4 & SPELL_ATTR4_PROC_ONLY_ON_CASTER)); diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 903d4487c31..47ce299c05d 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -632,6 +632,7 @@ class Spell void CallScriptAfterHitHandlers(); void CallScriptObjectAreaTargetSelectHandlers(std::list& targets, SpellEffIndex effIndex); void CallScriptObjectTargetSelectHandlers(WorldObject*& target, SpellEffIndex effIndex); + bool CheckScriptEffectImplicitTargets(uint32 effIndex, uint32 effIndexToCheck); std::list m_loadedScripts; struct HitTriggerSpell From c34f1aebe67b48ee2b8618636fc7eef7ea8fbd9f Mon Sep 17 00:00:00 2001 From: horn Date: Sun, 24 Feb 2013 23:25:17 +0100 Subject: [PATCH 2/6] Script/Commands: Make creature_summon_groups table reloadable. --- sql/updates/world/2013_02_24_05_world_command.sql | 4 ++++ src/server/game/Globals/ObjectMgr.cpp | 2 ++ src/server/scripts/Commands/cs_reload.cpp | 11 +++++++++++ 3 files changed, 17 insertions(+) create mode 100644 sql/updates/world/2013_02_24_05_world_command.sql diff --git a/sql/updates/world/2013_02_24_05_world_command.sql b/sql/updates/world/2013_02_24_05_world_command.sql new file mode 100644 index 00000000000..0b153be15bc --- /dev/null +++ b/sql/updates/world/2013_02_24_05_world_command.sql @@ -0,0 +1,4 @@ +DELETE FROM `command` WHERE `name` = 'reload creature_summon_groups'; +INSERT INTO `command` (`name`,`security`,`help`) VALUES +('reload creature_summon_groups',3,'Syntax: .reload creature_summon_groups +Reload creature_summon_groups table.'); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 222331c48f8..3b71d11757c 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -1425,6 +1425,8 @@ void ObjectMgr::LoadTempSummons() { uint32 oldMSTime = getMSTime(); + _tempSummonDataStore.clear(); // needed for reload case + // 0 1 2 3 4 5 6 7 8 9 QueryResult result = WorldDatabase.Query("SELECT summonerId, summonerType, groupId, entry, position_x, position_y, position_z, orientation, summonType, summonTime FROM creature_summon_groups"); diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index b2542d6a668..3f15c3fe6b7 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -86,6 +86,7 @@ public: { "creature_loot_template", SEC_ADMINISTRATOR, true, &HandleReloadLootTemplatesCreatureCommand, "", NULL }, { "creature_onkill_reputation", SEC_ADMINISTRATOR, true, &HandleReloadOnKillReputationCommand, "", NULL }, { "creature_questrelation", SEC_ADMINISTRATOR, true, &HandleReloadCreatureQuestRelationsCommand, "", NULL }, + { "creature_summon_groups", SEC_ADMINISTRATOR, true, &HandleReloadCreatureSummonGroupsCommand, "", NULL }, { "creature_template", SEC_ADMINISTRATOR, true, &HandleReloadCreatureTemplateCommand, "", NULL }, //{ "db_script_string", SEC_ADMINISTRATOR, true, &HandleReloadDbScriptStringCommand, "", NULL }, { "disables", SEC_ADMINISTRATOR, true, &HandleReloadDisablesCommand, "", NULL }, @@ -195,6 +196,8 @@ public: HandleReloadTrinityStringCommand(handler, ""); HandleReloadGameTeleCommand(handler, ""); + HandleReloadCreatureSummonGroupsCommand(handler, ""); + HandleReloadVehicleAccessoryCommand(handler, ""); HandleReloadVehicleTemplateAccessoryCommand(handler, ""); @@ -397,6 +400,14 @@ public: return true; } + static bool HandleReloadCreatureSummonGroupsCommand(ChatHandler* handler, const char* /*args*/) + { + sLog->outInfo(LOG_FILTER_GENERAL, "Reloading creature summon groups..."); + sObjectMgr->LoadTempSummons(); + handler->SendGlobalGMSysMessage("DB table `creature_summon_groups` reloaded."); + return true; + } + static bool HandleReloadCreatureTemplateCommand(ChatHandler* handler, const char* args) { if (!*args) From badcce45d83a73ed4edf49a661736c25b80a8bd0 Mon Sep 17 00:00:00 2001 From: horn Date: Tue, 26 Feb 2013 02:33:08 +0100 Subject: [PATCH 3/6] Core/Summons: Pack the TempSummonGroupKey structure so it is being compared correctly and make the second parameter of SummonCreatureGroup() optional --- src/server/game/Entities/Object/Object.cpp | 10 +++--- src/server/game/Entities/Object/Object.h | 2 +- src/server/game/Globals/ObjectMgr.h | 39 +++++++++++----------- src/server/game/Maps/Map.h | 2 +- 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 79bf656c318..cd8ae5056ba 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2322,7 +2322,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert * @param list List to store pointers to summoned creatures. */ -void Map::SummonCreatureGroup(uint8 group, std::list& list) +void Map::SummonCreatureGroup(uint8 group, std::list* list /*= NULL*/) { std::vector const* data = sObjectMgr->GetSummonGroup(GetId(), SUMMONER_TYPE_MAP, group); if (!data) @@ -2330,7 +2330,8 @@ void Map::SummonCreatureGroup(uint8 group, std::list& list) for (std::vector::const_iterator itr = data->begin(); itr != data->end(); ++itr) if (TempSummon* summon = SummonCreature(itr->entry, itr->pos, NULL, itr->time)) - list.push_back(summon); + if (list) + list->push_back(summon); } void WorldObject::SetZoneScript() @@ -2418,7 +2419,7 @@ Creature* WorldObject::SummonTrigger(float x, float y, float z, float ang, uint3 * @param group Id of group to summon. * @param list List to store pointers to summoned creatures. */ -void WorldObject::SummonCreatureGroup(uint8 group, std::list& list) +void WorldObject::SummonCreatureGroup(uint8 group, std::list* list /*= NULL*/) { ASSERT((GetTypeId() == TYPEID_GAMEOBJECT || GetTypeId() == TYPEID_UNIT) && "Only GOs and creatures can summon npc groups!"); @@ -2428,7 +2429,8 @@ void WorldObject::SummonCreatureGroup(uint8 group, std::list& list) for (std::vector::const_iterator itr = data->begin(); itr != data->end(); ++itr) if (TempSummon* summon = SummonCreature(itr->entry, itr->pos, itr->type, itr->time)) - list.push_back(summon); + if (list) + list->push_back(summon); } Creature* WorldObject::FindNearestCreature(uint32 entry, float range, bool alive) const diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index ae788621368..dfd2ff73ae9 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -793,7 +793,7 @@ class WorldObject : public Object, public WorldLocation } GameObject* SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime); Creature* SummonTrigger(float x, float y, float z, float ang, uint32 dur, CreatureAI* (*GetAI)(Creature*) = NULL); - void SummonCreatureGroup(uint8 group, std::list& list); + void SummonCreatureGroup(uint8 group, std::list* list = NULL); Creature* FindNearestCreature(uint32 entry, float range, bool alive = true) const; GameObject* FindNearestGameObject(uint32 entry, float range) const; diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 5b13a4daf0d..0a5b878e8fa 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -63,6 +63,26 @@ struct PageText uint16 NextPage; }; +/// Key for storing temp summon data in TempSummonDataContainer +struct TempSummonGroupKey +{ + TempSummonGroupKey(uint32 summonerEntry, SummonerType summonerType, uint8 group) + : _summonerEntry(summonerEntry), _summonerType(summonerType), _summonGroup(group) + { + } + + bool operator<(TempSummonGroupKey const& rhs) const + { + // memcmp is only reliable if struct doesn't have any padding (packed) + return memcmp(this, &rhs, sizeof(TempSummonGroupKey)) < 0; + } + +private: + uint32 _summonerEntry; ///< Summoner's entry + SummonerType _summonerType; ///< Summoner's type, see SummonerType for available types + uint8 _summonGroup; ///< Summon's group id +}; + // GCC have alternative #pragma pack() syntax and old gcc version not support pack(pop), also any gcc version not support it at some platform #if defined(__GNUC__) #pragma pack() @@ -417,25 +437,6 @@ struct TrinityStringLocale StringVector Content; }; -/// Key for storing temp summon data in TempSummonDataContainer -struct TempSummonGroupKey -{ - TempSummonGroupKey(uint32 summonerEntry, SummonerType summonerType, uint8 group) - : _summonerEntry(summonerEntry), _summonerType(summonerType), _summonGroup(group) - { - } - - bool operator<(TempSummonGroupKey const& rhs) const - { - return memcmp(this, &rhs, sizeof(TempSummonGroupKey)) < 0; - } - -private: - uint32 _summonerEntry; ///< Summoner's entry - SummonerType _summonerType; ///< Summoner's type, see SummonerType for available types - uint8 _summonGroup; ///< Summon's group id -}; - typedef std::map LinkedRespawnContainer; typedef UNORDERED_MAP CreatureDataContainer; typedef UNORDERED_MAP GameObjectDataContainer; diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index cc47f053827..3deeb4e04b1 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -435,7 +435,7 @@ class Map : public GridRefManager void UpdateIteratorBack(Player* player); TempSummon* SummonCreature(uint32 entry, Position const& pos, SummonPropertiesEntry const* properties = NULL, uint32 duration = 0, Unit* summoner = NULL, uint32 spellId = 0, uint32 vehId = 0); - void SummonCreatureGroup(uint8 group, std::list& list); + void SummonCreatureGroup(uint8 group, std::list* list = NULL); Creature* GetCreature(uint64 guid); GameObject* GetGameObject(uint64 guid); DynamicObject* GetDynamicObject(uint64 guid); From b10aa126c78522c2913d4853186eda8169b8868e Mon Sep 17 00:00:00 2001 From: Nay Date: Tue, 26 Feb 2013 02:34:45 +0000 Subject: [PATCH 4/6] Core/BossAI: Fix a typo in CheckBoundary Method was using "me" (the boss) instead of the function's argument Props to @Horn for finding the 4 year's old error Ref #7194 --- .../game/AI/ScriptedAI/ScriptedCreature.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 5ef9ee09f1d..e36916decae 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -515,35 +515,35 @@ bool BossAI::CheckBoundary(Unit* who) switch (itr->first) { case BOUNDARY_N: - if (me->GetPositionX() > itr->second) + if (who->GetPositionX() > itr->second) return false; break; case BOUNDARY_S: - if (me->GetPositionX() < itr->second) + if (who->GetPositionX() < itr->second) return false; break; case BOUNDARY_E: - if (me->GetPositionY() < itr->second) + if (who->GetPositionY() < itr->second) return false; break; case BOUNDARY_W: - if (me->GetPositionY() > itr->second) + if (who->GetPositionY() > itr->second) return false; break; case BOUNDARY_NW: - if (me->GetPositionX() + me->GetPositionY() > itr->second) + if (who->GetPositionX() + who->GetPositionY() > itr->second) return false; break; case BOUNDARY_SE: - if (me->GetPositionX() + me->GetPositionY() < itr->second) + if (who->GetPositionX() + who->GetPositionY() < itr->second) return false; break; case BOUNDARY_NE: - if (me->GetPositionX() - me->GetPositionY() > itr->second) + if (who->GetPositionX() - who->GetPositionY() > itr->second) return false; break; case BOUNDARY_SW: - if (me->GetPositionX() - me->GetPositionY() < itr->second) + if (who->GetPositionX() - who->GetPositionY() < itr->second) return false; break; default: From 6403e3fbfeacc305268f596a9ba9fb6b8c8dbdf7 Mon Sep 17 00:00:00 2001 From: QAston Date: Tue, 26 Feb 2013 11:05:10 +0100 Subject: [PATCH 5/6] Core/SpellsMgr: remove unneeded functions from spellmgr, add some const modifiers for methods --- src/server/game/Spells/SpellMgr.cpp | 21 +++------------------ src/server/game/Spells/SpellMgr.h | 8 +++----- 2 files changed, 6 insertions(+), 23 deletions(-) diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 312189ffad8..1795c46b342 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -592,21 +592,6 @@ bool SpellMgr::IsSpellRequiringSpell(uint32 spellid, uint32 req_spellid) const return false; } -const SpellsRequiringSpellMap SpellMgr::GetSpellsRequiringSpell() -{ - return this->mSpellsReqSpell; -} - -uint32 SpellMgr::GetSpellRequired(uint32 spell_id) const -{ - SpellRequiredMap::const_iterator itr = mSpellReq.find(spell_id); - - if (itr == mSpellReq.end()) - return 0; - - return itr->second; -} - SpellLearnSkillNode const* SpellMgr::GetSpellLearnSkill(uint32 spell_id) const { SpellLearnSkillMap::const_iterator itr = mSpellLearnSkills.find(spell_id); @@ -777,7 +762,7 @@ SpellProcEventEntry const* SpellMgr::GetSpellProcEvent(uint32 spellId) const return NULL; } -bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) +bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const { // No extra req need uint32 procEvent_procEx = PROC_EX_NONE; @@ -914,7 +899,7 @@ SpellProcEntry const* SpellMgr::GetSpellProcEntry(uint32 spellId) const return NULL; } -bool SpellMgr::CanSpellTriggerProcOnEvent(SpellProcEntry const& procEntry, ProcEventInfo& eventInfo) +bool SpellMgr::CanSpellTriggerProcOnEvent(SpellProcEntry const& procEntry, ProcEventInfo& eventInfo) const { // proc type doesn't match if (!(eventInfo.GetTypeMask() & procEntry.typeMask)) @@ -1015,7 +1000,7 @@ SkillLineAbilityMapBounds SpellMgr::GetSkillLineAbilityMapBounds(uint32 spell_id return mSkillLineAbilityMap.equal_range(spell_id); } -PetAura const* SpellMgr::GetPetAura(uint32 spell_id, uint8 eff) +PetAura const* SpellMgr::GetPetAura(uint32 spell_id, uint8 eff) const { SpellPetAuraMap::const_iterator itr = mSpellPetAuraMap.find((spell_id<<8) + eff); if (itr != mSpellPetAuraMap.end()) diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index 0cdb9601370..dcec7e84132 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -630,8 +630,6 @@ class SpellMgr SpellRequiredMapBounds GetSpellsRequiredForSpellBounds(uint32 spell_id) const; SpellsRequiringSpellMapBounds GetSpellsRequiringSpellBounds(uint32 spell_id) const; bool IsSpellRequiringSpell(uint32 spellid, uint32 req_spellid) const; - const SpellsRequiringSpellMap GetSpellsRequiringSpell(); - uint32 GetSpellRequired(uint32 spell_id) const; // Spell learning SpellLearnSkillNode const* GetSpellLearnSkill(uint32 spell_id) const; @@ -656,11 +654,11 @@ class SpellMgr // Spell proc event table SpellProcEventEntry const* GetSpellProcEvent(uint32 spellId) const; - bool IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active); + bool IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const; // Spell proc table SpellProcEntry const* GetSpellProcEntry(uint32 spellId) const; - bool CanSpellTriggerProcOnEvent(SpellProcEntry const& procEntry, ProcEventInfo& eventInfo); + bool CanSpellTriggerProcOnEvent(SpellProcEntry const& procEntry, ProcEventInfo& eventInfo) const; // Spell bonus data table SpellBonusEntry const* GetSpellBonusData(uint32 spellId) const; @@ -670,7 +668,7 @@ class SpellMgr SkillLineAbilityMapBounds GetSkillLineAbilityMapBounds(uint32 spell_id) const; - PetAura const* GetPetAura(uint32 spell_id, uint8 eff); + PetAura const* GetPetAura(uint32 spell_id, uint8 eff) const; SpellEnchantProcEntry const* GetSpellEnchantProcEvent(uint32 enchId) const; bool IsArenaAllowedEnchancment(uint32 ench_id) const; From 2286de02f8a2470134035294352afea22730f1f0 Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 26 Feb 2013 15:25:46 +0100 Subject: [PATCH 6/6] Core/RBAC: Correction to last sqls and update base/auth_database.sql --- sql/base/auth_database.sql | 247 ++++++++++++++++++- sql/updates/auth/2013_02_25_00_auth_misc.sql | 3 + sql/updates/auth/2013_02_25_03_auth_misc.sql | 2 +- sql/updates/auth/2013_02_25_04_auth_misc.sql | 2 +- sql/updates/auth/2013_02_25_07_auth_misc.sql | 4 +- sql/updates/auth/2013_02_25_09_auth_misc.sql | 2 +- sql/updates/auth/2013_02_25_10_auth_misc.sql | 2 +- sql/updates/auth/2013_02_25_11_auth_misc.sql | 2 +- sql/updates/auth/2013_02_25_12_auth_misc.sql | 2 +- sql/updates/auth/2013_02_25_13_auth_misc.sql | 18 +- sql/updates/auth/2013_02_25_14_auth_misc.sql | 2 +- 11 files changed, 261 insertions(+), 25 deletions(-) diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql index 9aaadcb55d5..2bc5bca0264 100644 --- a/sql/base/auth_database.sql +++ b/sql/base/auth_database.sql @@ -265,7 +265,106 @@ CREATE TABLE `rbac_group_roles` ( LOCK TABLES `rbac_group_roles` WRITE; /*!40000 ALTER TABLE `rbac_group_roles` DISABLE KEYS */; -INSERT INTO `rbac_group_roles` VALUES (1,1),(2,2),(3,3),(4,4),(2,5),(1,6),(1,7); +INSERT INTO `rbac_group_roles` VALUES +(1, 1), +(2, 2), +(3, 3), +(4, 4), +(2, 5), +(1, 6), +(1, 7), +(2, 8), +(3, 8), +(4, 8), +(2, 9), +(3, 9), +(4, 9), +(2, 10), +(3, 10), +(4, 10), +(2, 11), +(3, 11), +(4, 11), +(2, 12), +(3, 12), +(4, 12), +(2, 13), +(3, 13), +(4, 13), +(2, 14), +(3, 14), +(4, 14), +(2, 15), +(3, 15), +(4, 15), +(2, 16), +(3, 16), +(4, 16), +(2, 17), +(3, 17), +(4, 17), +(4, 18), +(1, 19), +(2, 19), +(3, 19), +(4, 19), +(2, 20), +(3, 20), +(4, 20), +(2, 21), +(3, 21), +(4, 21), +(2, 22), +(3, 22), +(4, 22), +(4, 23), +(2, 24), +(3, 24), +(4, 24), +(2, 25), +(3, 25), +(4, 25), +(2, 26), +(3, 26), +(4, 26), +(2, 27), +(3, 27), +(4, 27), +(1, 28), +(2, 28), +(3, 28), +(4, 28), +(2, 29), +(3, 29), +(4, 29), +(1, 30), +(2, 30), +(3, 30), +(4, 30), +(2, 31), +(3, 31), +(4, 31), +(2, 32), +(3, 32), +(4, 32), +(2, 33), +(3, 33), +(4, 33), +(2, 34), +(3, 34), +(4, 34), +(2, 35), +(3, 35), +(4, 35), +(2, 36), +(3, 36), +(4, 36), +(2, 37), +(3, 37), +(4, 37), +(2, 38), +(3, 38), +(4, 38); /*!40000 ALTER TABLE `rbac_group_roles` ENABLE KEYS */; UNLOCK TABLES; @@ -278,7 +377,7 @@ DROP TABLE IF EXISTS `rbac_groups`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `rbac_groups` ( `id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Group id', - `name` varchar(50) NOT NULL COMMENT 'Group name', + `name` varchar(100) NOT NULL COMMENT 'Group name', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Group List'; /*!40101 SET character_set_client = @saved_cs_client */; @@ -289,7 +388,11 @@ CREATE TABLE `rbac_groups` ( LOCK TABLES `rbac_groups` WRITE; /*!40000 ALTER TABLE `rbac_groups` DISABLE KEYS */; -INSERT INTO `rbac_groups` VALUES (1,'Player'),(2,'Moderator'),(3,'GameMaster'),(4,'Administrator'); +INSERT INTO `rbac_groups` VALUES +(1,'Player'), +(2,'Moderator'), +(3,'GameMaster'), +(4,'Administrator'); /*!40000 ALTER TABLE `rbac_groups` ENABLE KEYS */; UNLOCK TABLES; @@ -313,7 +416,53 @@ CREATE TABLE `rbac_permissions` ( LOCK TABLES `rbac_permissions` WRITE; /*!40000 ALTER TABLE `rbac_permissions` DISABLE KEYS */; -INSERT INTO `rbac_permissions` VALUES (1,'Instant logout'),(2,'Skip Queue'),(3,'Join Normal Battleground'),(4,'Join Random Battleground'),(5,'Join Arenas'),(6,'Join Dungeon Finder'),(7,'Player Commands (Temporal till commands moved to rbac)'),(8,'Moderator Commands (Temporal till commands moved to rbac)'),(9,'GameMaster Commands (Temporal till commands moved to rbac)'),(10,'Administrator Commands (Temporal till commands moved to rbac)'); +INSERT INTO `rbac_permissions` VALUES +(1, 'Instant logout'), +(2, 'Skip Queue'), +(3, 'Join Normal Battleground'), +(4, 'Join Random Battleground'), +(5, 'Join Arenas'), +(6, 'Join Dungeon Finder'), +(7, 'Player Commands (Temporal till commands moved to rbac)'), +(8, 'Moderator Commands (Temporal till commands moved to rbac)'), +(9, 'GameMaster Commands (Temporal till commands moved to rbac)'), +(10, 'Administrator Commands (Temporal till commands moved to rbac)'), +(11, 'Log GM trades'), +(13, 'Skip Instance required bosses check'), +(14, 'Skip character creation team mask check'), +(15, 'Skip character creation class mask check'), +(16, 'Skip character creation race mask check'), +(17, 'Skip character creation reserved name check'), +(18, 'Skip character creation heroic min level check'), +(19, 'Skip needed requirements to use channel check'), +(20, 'Skip disable map check'), +(21, 'Skip reset talents when used more than allowed check'), +(22, 'Skip spam chat check'), +(23, 'Skip over-speed ping check'), +(24, 'Two side faction characters on the same account'), +(25, 'Allow say chat between factions'), +(26, 'Allow channel chat between factions'), +(27, 'Two side mail interaction'), +(28, 'See two side who list'), +(29, 'Add friends of other faction'), +(30, 'Save character without delay with .save command'), +(31, 'Use params with .unstuck command'), +(32, 'Can be assigned tickets with .assign ticket command'), +(33, 'Notify if a command was not found'), +(34, 'Check if should appear in list using .gm ingame command'), +(35, 'See all security levels with who command'), +(36, 'Filter whispers'), +(37, 'Use staff badge in chat'), +(38, 'Resurrect with full Health Points'), +(39, 'Restore saved gm setting states'), +(40, 'Allows to add a gm to friend list'), +(41, 'Use Config option START_GM_LEVEL to assign new character level'), +(42, 'Allows to use CMSG_WORLD_TELEPORT opcode'), +(43, 'Allows to use CMSG_WHOIS opcode'), +(44, 'Receive global GM messages/texts'), +(45, 'Join channels without announce'), +(46, 'Change channel settings without being channel moderator'), +(47, 'Enables lower security than target check'); /*!40000 ALTER TABLE `rbac_permissions` ENABLE KEYS */; UNLOCK TABLES; @@ -340,7 +489,53 @@ CREATE TABLE `rbac_role_permissions` ( LOCK TABLES `rbac_role_permissions` WRITE; /*!40000 ALTER TABLE `rbac_role_permissions` DISABLE KEYS */; -INSERT INTO `rbac_role_permissions` VALUES (5,1),(5,2),(6,3),(6,4),(6,5),(7,6),(1,7),(2,8),(3,9),(4,10); +INSERT INTO `rbac_role_permissions` VALUES +(5, 1), +(5, 2), +(6, 3), +(6, 4), +(6, 5), +(7, 6), +(1, 7), +(2, 8), +(3, 9), +(4, 10), +(8, 11), +(9, 13), +(33, 14), +(33, 15), +(33, 16), +(33, 17), +(33, 18), +(27, 19), +(22, 20), +(23, 21), +(24, 22), +(17, 23), +(34, 24); +(28, 25), +(30, 26), +(19, 27), +(35, 28), +(36, 29), +(11, 30), +(12, 31), +(10, 32), +(20, 33), +(14, 34), +(37, 35), +(29, 36), +(15, 37), +(13, 38), +(25, 39), +(38, 40), +(26, 41), +(18, 42), +(18, 43), +(16, 44), +(31, 45), +(32, 46), +(21, 47); /*!40000 ALTER TABLE `rbac_role_permissions` ENABLE KEYS */; UNLOCK TABLES; @@ -353,7 +548,7 @@ DROP TABLE IF EXISTS `rbac_roles`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `rbac_roles` ( `id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Role id', - `name` varchar(50) NOT NULL COMMENT 'Role name', + `name` varchar(100) NOT NULL COMMENT 'Role name', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Roles List'; /*!40101 SET character_set_client = @saved_cs_client */; @@ -364,7 +559,45 @@ CREATE TABLE `rbac_roles` ( LOCK TABLES `rbac_roles` WRITE; /*!40000 ALTER TABLE `rbac_roles` DISABLE KEYS */; -INSERT INTO `rbac_roles` VALUES (1,'Player Commands'),(2,'Moderator Commands'),(3,'GameMaster Commands'),(4,'Administrator Commands'),(5,'Quick Login/Logout'),(6,'Use Battleground/Arenas'),(7,'Use Dungeon Finder'); +INSERT INTO `rbac_roles` VALUES +(1, 'Player Commands'), +(2, 'Moderator Commands'), +(3, 'GameMaster Commands'), +(4, 'Administrator Commands'), +(5, 'Quick Login/Logout'), +(6, 'Use Battleground/Arenas'), +(7, 'Use Dungeon Finder'), +(8, 'Log GM trades'), +(9, 'Skip Instance required bosses check'), +(10, 'Ticket management'), +(11, 'Instant .save'), +(12, 'Allow params with .unstuck'), +(13, 'Full HP after resurrect'), +(14, 'Appear in GM ingame list'), +(15, 'Use staff badge in chat'), +(16, 'Receive global GM messages/texts'), +(17, 'Skip over-speed ping check'), +(18, 'Allows Admin Opcodes'), +(19, 'Two side mail interaction'), +(20, 'Notify if a command was not found'), +(21, 'Enables lower security than target check'), +(22, 'Skip disable map check'), +(23, 'Skip reset talents when used more than allowed check'), +(24, 'Skip spam chat check'), +(25, 'Restore saved gm setting states'), +(26, 'Use Config option START_GM_LEVEL to assign new character level'), +(27, 'Skips needed requirements to use channel check'), +(28, 'Allow say chat between factions'), +(29, 'Filter whispers'), +(30, 'Allow channel chat between factions'), +(31, 'Join channels without announce'), +(32, 'Change channel settings without being channel moderator'), +(33, 'Skip character creation checks'), +(34, 'Two side faction characters on the same account') +(35, 'See two side who list'), +(36, 'Add friends of other faction'), +(37, 'See all security levels with who command'), +(38, 'Allows to add a gm to friend list'); /*!40000 ALTER TABLE `rbac_roles` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/auth/2013_02_25_00_auth_misc.sql b/sql/updates/auth/2013_02_25_00_auth_misc.sql index 5531252037a..3cce3c0d5ce 100644 --- a/sql/updates/auth/2013_02_25_00_auth_misc.sql +++ b/sql/updates/auth/2013_02_25_00_auth_misc.sql @@ -1,3 +1,6 @@ +ALTER TABLE `rbac_roles` MODIFY COLUMN `name` varchar(100) NOT NULL COMMENT 'Role name'; +ALTER TABLE `rbac_roles` MODIFY COLUMN `name` varchar(100) NOT NULL COMMENT 'Group name'; + -- Add new permission DELETE FROM `rbac_permissions` WHERE `id` = 11; INSERT INTO `rbac_permissions` (`id`, `name`) VALUES (11, 'Log GM trades'); diff --git a/sql/updates/auth/2013_02_25_03_auth_misc.sql b/sql/updates/auth/2013_02_25_03_auth_misc.sql index ab2c6e0692c..5f290ebf0cd 100644 --- a/sql/updates/auth/2013_02_25_03_auth_misc.sql +++ b/sql/updates/auth/2013_02_25_03_auth_misc.sql @@ -20,7 +20,7 @@ INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES (13, 38); -- Add it to all GM+ groups -DELETE FROM `rbac_role_permissions` WHERE `roleId` IN (11, 12, 13); +DELETE FROM `rbac_group_roles` WHERE `roleId` IN (11, 12, 13); INSERT INTO `rbac_group_roles` (`groupId`, `roleId`) VALUES (2, 11), (3, 11), diff --git a/sql/updates/auth/2013_02_25_04_auth_misc.sql b/sql/updates/auth/2013_02_25_04_auth_misc.sql index faaee3582ea..bf42990a1bd 100644 --- a/sql/updates/auth/2013_02_25_04_auth_misc.sql +++ b/sql/updates/auth/2013_02_25_04_auth_misc.sql @@ -17,7 +17,7 @@ INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES (15, 37); -- Add it to all GM+ groups -DELETE FROM `rbac_role_permissions` WHERE `roleId` IN (14, 15); +DELETE FROM `rbac_group_roles` WHERE `roleId` IN (14, 15); INSERT INTO `rbac_group_roles` (`groupId`, `roleId`) VALUES (2, 14), (3, 14), diff --git a/sql/updates/auth/2013_02_25_07_auth_misc.sql b/sql/updates/auth/2013_02_25_07_auth_misc.sql index 2416f08280c..4c6dadf4eaa 100644 --- a/sql/updates/auth/2013_02_25_07_auth_misc.sql +++ b/sql/updates/auth/2013_02_25_07_auth_misc.sql @@ -15,7 +15,7 @@ INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES (18, 42), (18, 43); --- Add it to all GM+ groups -DELETE FROM `rbac_role_permissions` WHERE `roleId` = 18; +-- Add it to admins groups +DELETE FROM `rbac_group_roles` WHERE `roleId` = 18; INSERT INTO `rbac_group_roles` (`groupId`, `roleId`) VALUES (4, 18); diff --git a/sql/updates/auth/2013_02_25_09_auth_misc.sql b/sql/updates/auth/2013_02_25_09_auth_misc.sql index f2affe05b70..6297bf7427a 100644 --- a/sql/updates/auth/2013_02_25_09_auth_misc.sql +++ b/sql/updates/auth/2013_02_25_09_auth_misc.sql @@ -17,7 +17,7 @@ INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES (21, 47); -- Add it to all GM+ groups -DELETE FROM `rbac_role_permissions` WHERE `roleId` IN (20, 21); +DELETE FROM `rbac_group_roles` WHERE `roleId` IN (20, 21); INSERT INTO `rbac_group_roles` (`groupId`, `roleId`) VALUES (2, 20), (3, 20), diff --git a/sql/updates/auth/2013_02_25_10_auth_misc.sql b/sql/updates/auth/2013_02_25_10_auth_misc.sql index 4255bdac8ba..ccca7c74f06 100644 --- a/sql/updates/auth/2013_02_25_10_auth_misc.sql +++ b/sql/updates/auth/2013_02_25_10_auth_misc.sql @@ -26,7 +26,7 @@ INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES (26, 41); -- Add it to all GM+ groups -DELETE FROM `rbac_role_permissions` WHERE `roleId` IN (22, 23, 24, 25, 26); +DELETE FROM `rbac_group_roles` WHERE `roleId` IN (22, 23, 24, 25, 26); INSERT INTO `rbac_group_roles` (`groupId`, `roleId`) VALUES (2, 22), (3, 22), diff --git a/sql/updates/auth/2013_02_25_11_auth_misc.sql b/sql/updates/auth/2013_02_25_11_auth_misc.sql index 9c2897394e5..90c19526b06 100644 --- a/sql/updates/auth/2013_02_25_11_auth_misc.sql +++ b/sql/updates/auth/2013_02_25_11_auth_misc.sql @@ -20,7 +20,7 @@ INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES (29, 36); -- Add it to all GM+ groups -DELETE FROM `rbac_role_permissions` WHERE `roleId` IN (27, 28, 29); +DELETE FROM `rbac_group_roles` WHERE `roleId` IN (27, 28, 29); INSERT INTO `rbac_group_roles` (`groupId`, `roleId`) VALUES (2, 27), (3, 27), diff --git a/sql/updates/auth/2013_02_25_12_auth_misc.sql b/sql/updates/auth/2013_02_25_12_auth_misc.sql index 2b394dc9bcb..30e203ea4b3 100644 --- a/sql/updates/auth/2013_02_25_12_auth_misc.sql +++ b/sql/updates/auth/2013_02_25_12_auth_misc.sql @@ -20,7 +20,7 @@ INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES (32, 46); -- Add it to all GM+ groups -DELETE FROM `rbac_role_permissions` WHERE `roleId` IN (30, 31, 32); +DELETE FROM `rbac_group_roles` WHERE `roleId` IN (30, 31, 32); INSERT INTO `rbac_group_roles` (`groupId`, `roleId`) VALUES (1, 30), (2, 30), diff --git a/sql/updates/auth/2013_02_25_13_auth_misc.sql b/sql/updates/auth/2013_02_25_13_auth_misc.sql index 82247ecd07d..9a7806ede68 100644 --- a/sql/updates/auth/2013_02_25_13_auth_misc.sql +++ b/sql/updates/auth/2013_02_25_13_auth_misc.sql @@ -1,18 +1,18 @@ -- Add new permissions DELETE FROM `rbac_permissions` WHERE `id` IN (14, 15, 16, 17, 18, 24); INSERT INTO `rbac_permissions` (`id`, `name`) VALUES -(14, 'Skips character creation team mask check'), -(15, 'Skips character creation class mask check'), -(16, 'Skips character creation race mask check'), -(17, 'Skips character creation reserved name check'), -(18, 'Skips character creation heroic min level check'), -(24, 'Creation of two side faction characters in same account'); +(14, 'Skip character creation team mask check'), +(15, 'Skip character creation class mask check'), +(16, 'Skip character creation race mask check'), +(17, 'Skip character creation reserved name check'), +(18, 'Skip character creation heroic min level check'), +(24, 'Two side faction characters on the same account'); -- Add new role DELETE FROM `rbac_roles` WHERE `id` IN (33, 34); INSERT INTO `rbac_roles` (`id`, `name`) VALUES -(33, 'Skips character creation checks'), -(34, 'Creation of two side faction characters in same account'); +(33, 'Skip character creation checks'), +(34, 'Two side faction characters on the same account'); -- Add the permission to the role DELETE FROM `rbac_role_permissions` WHERE `roleId` IN (33, 34); @@ -25,7 +25,7 @@ INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES (34, 24); -- Add it to all groups -DELETE FROM `rbac_role_permissions` WHERE `roleId` IN (33, 34); +DELETE FROM `rbac_group_roles` WHERE `roleId` IN (33, 34); INSERT INTO `rbac_group_roles` (`groupId`, `roleId`) VALUES (2, 33), (3, 33), diff --git a/sql/updates/auth/2013_02_25_14_auth_misc.sql b/sql/updates/auth/2013_02_25_14_auth_misc.sql index c02b600b12f..f88280feae7 100644 --- a/sql/updates/auth/2013_02_25_14_auth_misc.sql +++ b/sql/updates/auth/2013_02_25_14_auth_misc.sql @@ -23,7 +23,7 @@ INSERT INTO `rbac_role_permissions` (`roleId`, `permissionId`) VALUES (38, 40); -- Add it to all groups -DELETE FROM `rbac_role_permissions` WHERE `roleId` IN (35, 36, 37, 38); +DELETE FROM `rbac_group_roles` WHERE `roleId` IN (35, 36, 37, 38); INSERT INTO `rbac_group_roles` (`groupId`, `roleId`) VALUES (2, 35), (3, 35),