From 59e4f6eb0553d7821a20b1bcc9a8b33a9f904c71 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 3 Jan 2013 19:22:12 +0100 Subject: Core/SmartScripts: Fixed SAI targets 10 & 14 (SMART_TARGET_CREATURE_GUID, SMART_TARGET_GAMEOBJECT_GUID) Note: If you used these targets to perform actions across maps, it will not work anymore, this functionality is deprecated as it was not safe. --- src/server/game/AI/SmartScripts/SmartScript.cpp | 36 +++++++----------------- src/server/game/AI/SmartScripts/SmartScriptMgr.h | 4 +-- 2 files changed, 12 insertions(+), 28 deletions(-) (limited to 'src/server') diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 4b147e080e2..e68c8c27194 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2260,46 +2260,30 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /* case SMART_TARGET_CREATURE_GUID: { Creature* target = NULL; - if (e.target.unitGUID.entry) + if (!trigger && !GetBaseObject()) { - uint64 guid = MAKE_NEW_GUID(e.target.unitGUID.guid, e.target.unitGUID.entry, HIGHGUID_UNIT); - target = HashMapHolder::Find(guid); + sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_CREATURE_GUID can not be used without invoker"); + break; } - else - { - if (!trigger && !GetBaseObject()) - { - sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_CREATURE_GUID can not be used without invoker and without entry"); - break; - } - target = FindCreatureNear(trigger ? trigger : GetBaseObject(), e.target.unitGUID.guid); - } + target = FindCreatureNear(trigger ? trigger : GetBaseObject(), e.target.unitGUID.dbGuid); - if (target) + if (target && (!e.target.unitGUID.entry || target->GetEntry() == e.target.unitGUID.entry)) l->push_back(target); break; } case SMART_TARGET_GAMEOBJECT_GUID: { GameObject* target = NULL; - if (e.target.unitGUID.entry) + if (!trigger && !GetBaseObject()) { - uint64 guid = MAKE_NEW_GUID(e.target.goGUID.guid, e.target.goGUID.entry, HIGHGUID_GAMEOBJECT); - target = HashMapHolder::Find(guid); + sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_GAMEOBJECT_GUID can not be used without invoker"); + break; } - else - { - if (!trigger && !GetBaseObject()) - { - sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_GAMEOBJECT_GUID can not be used without invoker and without entry"); - break; - } - target = FindGameObjectNear(trigger ? trigger : GetBaseObject(), e.target.goGUID.guid); - } + target = FindGameObjectNear(trigger ? trigger : GetBaseObject(), e.target.goGUID.dbGuid); - if (target) + if (target && (!e.target.goGUID.entry || target->GetEntry() == e.target.goGUID.entry)) l->push_back(target); break; } diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index b6690e35944..c70e78d5395 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -996,7 +996,7 @@ struct SmartTarget struct { - uint32 guid; + uint32 dbGuid; uint32 entry; } unitGUID; @@ -1031,7 +1031,7 @@ struct SmartTarget struct { - uint32 guid; + uint32 dbGuid; uint32 entry; } goGUID; -- cgit v1.2.3 From 9394dc10b41cd42e3e2e05a1af38e62856cd5bc5 Mon Sep 17 00:00:00 2001 From: Nay Date: Thu, 3 Jan 2013 19:18:26 +0000 Subject: Core/Scripts: Drop `gameobject_scripts` table - empty, deprecated and no longer needed --- .../2013_01_03_12_world_gameobject_scripts.sql | 2 ++ src/server/game/Entities/GameObject/GameObject.cpp | 4 ---- src/server/game/Globals/ObjectMgr.cpp | 15 --------------- src/server/game/Globals/ObjectMgr.h | 3 --- src/server/game/Spells/SpellEffects.cpp | 1 - src/server/game/World/World.cpp | 1 - src/server/scripts/Commands/cs_reload.cpp | 22 ---------------------- 7 files changed, 2 insertions(+), 46 deletions(-) create mode 100644 sql/updates/world/2013_01_03_12_world_gameobject_scripts.sql (limited to 'src/server') diff --git a/sql/updates/world/2013_01_03_12_world_gameobject_scripts.sql b/sql/updates/world/2013_01_03_12_world_gameobject_scripts.sql new file mode 100644 index 00000000000..aede83aa0c8 --- /dev/null +++ b/sql/updates/world/2013_01_03_12_world_gameobject_scripts.sql @@ -0,0 +1,2 @@ +DROP TABLE `gameobject_scripts`; +DELETE FROM `command` WHERE `name`='reload gameobject_scripts'; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 508147cec9f..bf0fbb4199d 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1098,11 +1098,7 @@ void GameObject::Use(Unit* user) case GAMEOBJECT_TYPE_BUTTON: //1 //doors/buttons never really despawn, only reset to default state/flags UseDoorOrButton(0, false, user); - - // activate script - GetMap()->ScriptsStart(sGameObjectScripts, GetDBTableGUIDLow(), spellCaster, this); return; - case GAMEOBJECT_TYPE_QUESTGIVER: //2 { if (user->GetTypeId() != TYPEID_PLAYER) diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 32c6ffeb153..be44b800fc8 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -50,7 +50,6 @@ #include "World.h" ScriptMapMap sSpellScripts; -ScriptMapMap sGameObjectScripts; ScriptMapMap sEventScripts; ScriptMapMap sWaypointScripts; @@ -60,7 +59,6 @@ std::string GetScriptsTableNameByType(ScriptsType type) switch (type) { case SCRIPTS_SPELL: res = "spell_scripts"; break; - case SCRIPTS_GAMEOBJECT: res = "gameobject_scripts"; break; case SCRIPTS_EVENT: res = "event_scripts"; break; case SCRIPTS_WAYPOINT: res = "waypoint_scripts"; break; default: break; @@ -74,7 +72,6 @@ ScriptMapMap* GetScriptsMapByType(ScriptsType type) switch (type) { case SCRIPTS_SPELL: res = &sSpellScripts; break; - case SCRIPTS_GAMEOBJECT: res = &sGameObjectScripts; break; case SCRIPTS_EVENT: res = &sEventScripts; break; case SCRIPTS_WAYPOINT: res = &sWaypointScripts; break; default: break; @@ -4667,18 +4664,6 @@ void ObjectMgr::LoadScripts(ScriptsType type) sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u script definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } -void ObjectMgr::LoadGameObjectScripts() -{ - LoadScripts(SCRIPTS_GAMEOBJECT); - - // check ids - for (ScriptMapMap::const_iterator itr = sGameObjectScripts.begin(); itr != sGameObjectScripts.end(); ++itr) - { - if (!GetGOData(itr->first)) - sLog->outError(LOG_FILTER_SQL, "Table `gameobject_scripts` has not existing gameobject (GUID: %u) as script id", itr->first); - } -} - void ObjectMgr::LoadSpellScripts() { LoadScripts(SCRIPTS_SPELL); diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 620a265ca1e..9339684964c 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -128,7 +128,6 @@ enum ScriptsType SCRIPTS_FIRST = 1, SCRIPTS_SPELL = SCRIPTS_FIRST, - SCRIPTS_GAMEOBJECT, SCRIPTS_EVENT, SCRIPTS_WAYPOINT, @@ -361,7 +360,6 @@ typedef std::map ScriptMapMap; typedef std::multimap SpellScriptsContainer; typedef std::pair SpellScriptsBounds; extern ScriptMapMap sSpellScripts; -extern ScriptMapMap sGameObjectScripts; extern ScriptMapMap sEventScripts; extern ScriptMapMap sWaypointScripts; @@ -863,7 +861,6 @@ class ObjectMgr return _creatureQuestInvolvedRelations.equal_range(creature_entry); } - void LoadGameObjectScripts(); void LoadEventScripts(); void LoadSpellScripts(); void LoadWaypointScripts(); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index d597c40c863..8913cf2ac20 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -2010,7 +2010,6 @@ void Spell::SendLoot(uint64 guid, LootType loottype) case GAMEOBJECT_TYPE_DOOR: case GAMEOBJECT_TYPE_BUTTON: gameObjTarget->UseDoorOrButton(0, false, player); - player->GetMap()->ScriptsStart(sGameObjectScripts, gameObjTarget->GetDBTableGUIDLow(), player, gameObjTarget); return; case GAMEOBJECT_TYPE_QUESTGIVER: diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 855d576a2dd..38faf4de22f 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1648,7 +1648,6 @@ void World::SetInitialWorldSettings() ///- Load and initialize scripts sObjectMgr->LoadSpellScripts(); // must be after load Creature/Gameobject(Template/Data) - sObjectMgr->LoadGameObjectScripts(); // must be after load Creature/Gameobject(Template/Data) sObjectMgr->LoadEventScripts(); // must be after load Creature/Gameobject(Template/Data) sObjectMgr->LoadWaypointScripts(); diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index ef1fc681a31..43c2001fbf7 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -97,7 +97,6 @@ public: { "gameobject_involvedrelation", SEC_ADMINISTRATOR, true, &HandleReloadGOQuestInvRelationsCommand, "", NULL }, { "gameobject_loot_template", SEC_ADMINISTRATOR, true, &HandleReloadLootTemplatesGameobjectCommand, "", NULL }, { "gameobject_questrelation", SEC_ADMINISTRATOR, true, &HandleReloadGOQuestRelationsCommand, "", NULL }, - { "gameobject_scripts", SEC_ADMINISTRATOR, true, &HandleReloadGameObjectScriptsCommand, "", NULL }, { "gm_tickets", SEC_ADMINISTRATOR, true, &HandleReloadGMTicketsCommand, "", NULL }, { "gossip_menu", SEC_ADMINISTRATOR, true, &HandleReloadGossipMenuCommand, "", NULL }, { "gossip_menu_option", SEC_ADMINISTRATOR, true, &HandleReloadGossipMenuOptionCommand, "", NULL }, @@ -260,7 +259,6 @@ public: } sLog->outInfo(LOG_FILTER_GENERAL, "Re-Loading Scripts..."); - HandleReloadGameObjectScriptsCommand(handler, "a"); HandleReloadEventScriptsCommand(handler, "a"); HandleReloadSpellScriptsCommand(handler, "a"); handler->SendGlobalGMSysMessage("DB tables `*_scripts` reloaded."); @@ -951,26 +949,6 @@ public: return true; } - static bool HandleReloadGameObjectScriptsCommand(ChatHandler* handler, const char* args) - { - if (sScriptMgr->IsScriptScheduled()) - { - handler->SendSysMessage("DB scripts used currently, please attempt reload later."); - handler->SetSentErrorMessage(true); - return false; - } - - if (*args != 'a') - sLog->outInfo(LOG_FILTER_GENERAL, "Re-Loading Scripts from `gameobject_scripts`..."); - - sObjectMgr->LoadGameObjectScripts(); - - if (*args != 'a') - handler->SendGlobalGMSysMessage("DB table `gameobject_scripts` reloaded."); - - return true; - } - static bool HandleReloadEventScriptsCommand(ChatHandler* handler, const char* args) { if (sScriptMgr->IsScriptScheduled()) -- cgit v1.2.3