bool LoadScriptingModule(char const* libName) { ScriptsSet testScript=new _ScriptSet; std::string name = strlen(libName) ? libName : MANGOS_SCRIPT_NAME; name += MANGOS_SCRIPT_EXT; testScript->hScriptsLib=MANGOS_LOAD_LIBRARY(name.c_str()); if(!testScript->hScriptsLib ) { printf("Error loading Scripts Library %s !\n",name.c_str()); delete testScript; return false; } else printf("Scripts Library %s was successfully loaded.\n",name.c_str()); if( !(testScript->ScriptsInit =(scriptCallScriptsInit )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"ScriptsInit" )) ||!(testScript->ScriptsFree =(scriptCallScriptsFree )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"ScriptsFree" )) ||!(testScript->GossipHello =(scriptCallGossipHello )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GossipHello" )) ||!(testScript->GOChooseReward =(scriptCallGOChooseReward )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GOChooseReward" )) ||!(testScript->QuestAccept =(scriptCallQuestAccept )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"QuestAccept" )) ||!(testScript->GossipSelect =(scriptCallGossipSelect )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GossipSelect" )) ||!(testScript->GossipSelectWithCode=(scriptCallGossipSelectWithCode)MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GossipSelectWithCode")) ||!(testScript->QuestSelect =(scriptCallQuestSelect )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"QuestSelect" )) ||!(testScript->QuestComplete =(scriptCallQuestComplete )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"QuestComplete" )) ||!(testScript->NPCDialogStatus =(scriptCallNPCDialogStatus )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"NPCDialogStatus" )) ||!(testScript->ChooseReward =(scriptCallChooseReward )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"ChooseReward" )) ||!(testScript->ItemHello =(scriptCallItemHello )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"ItemHello" )) ||!(testScript->GOHello =(scriptCallGOHello )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GOHello" )) ||!(testScript->scriptAreaTrigger =(scriptCallAreaTrigger )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"AreaTrigger" )) ||!(testScript->ItemQuestAccept =(scriptCallItemQuestAccept )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"ItemQuestAccept" )) ||!(testScript->GOQuestAccept =(scriptCallGOQuestAccept )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GOQuestAccept" )) ||!(testScript->ReceiveEmote =(scriptCallReceiveEmote )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"ReceiveEmote" )) ||!(testScript->GetAI =(scriptCallGetAI )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GetAI" )) ) { MANGOS_CLOSE_LIBRARY(testScript->hScriptsLib); delete testScript; return false; } //heh we are still there :P we have a valid library //we reload script if(Script) { ScriptsSet current =Script; //todo: some check if some func from script library is called right now Script=testScript; current->ScriptsFree(); MANGOS_CLOSE_LIBRARY(current->hScriptsLib); delete current; }else Script=testScript; Script->ScriptsInit(); return true; }
bool LoadScriptingModule(char const* libName) { ScriptsSet testScript=new _ScriptSet; std::string name = strlen(libName) ? libName : MANGOS_SCRIPT_NAME; name += MANGOS_SCRIPT_EXT; testScript->hScriptsLib=MANGOS_LOAD_LIBRARY(name.c_str()); if(!testScript->hScriptsLib ) { printf("Error loading Scripts Library %s !\n",name.c_str()); delete testScript; return false; } if( !(testScript->ScriptsInit =(scriptCallScriptsInit )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"ScriptsInit" )) ||!(testScript->ScriptsFree =(scriptCallScriptsFree )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"ScriptsFree" )) ||!(testScript->ScriptsVersion =(scriptCallScriptsVersion )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"ScriptsVersion" )) ||!(testScript->GossipHello =(scriptCallGossipHello )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GossipHello" )) ||!(testScript->GOChooseReward =(scriptCallGOChooseReward )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GOChooseReward" )) ||!(testScript->QuestAccept =(scriptCallQuestAccept )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"QuestAccept" )) ||!(testScript->GossipSelect =(scriptCallGossipSelect )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GossipSelect" )) ||!(testScript->GossipSelectWithCode=(scriptCallGossipSelectWithCode)MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GossipSelectWithCode")) ||!(testScript->QuestSelect =(scriptCallQuestSelect )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"QuestSelect" )) ||!(testScript->QuestComplete =(scriptCallQuestComplete )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"QuestComplete" )) ||!(testScript->NPCDialogStatus =(scriptCallNPCDialogStatus )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"NPCDialogStatus" )) ||!(testScript->GODialogStatus =(scriptCallGODialogStatus )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GODialogStatus" )) ||!(testScript->ChooseReward =(scriptCallChooseReward )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"ChooseReward" )) ||!(testScript->ItemHello =(scriptCallItemHello )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"ItemHello" )) ||!(testScript->GOHello =(scriptCallGOHello )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GOHello" )) ||!(testScript->scriptAreaTrigger =(scriptCallAreaTrigger )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"AreaTrigger" )) ||!(testScript->ItemQuestAccept =(scriptCallItemQuestAccept )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"ItemQuestAccept" )) ||!(testScript->GOQuestAccept =(scriptCallGOQuestAccept )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GOQuestAccept" )) ||!(testScript->ItemUse =(scriptCallItemUse )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"ItemUse" )) ||!(testScript->GetAI =(scriptCallGetAI )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GetAI" )) ||!(testScript->CreateInstanceData =(scriptCallCreateInstanceData )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"CreateInstanceData" )) ) { printf("Error loading Scripts Library %s !\n Library missing required functions.",name.c_str()); MANGOS_CLOSE_LIBRARY(testScript->hScriptsLib); delete testScript; return false; } sLog.outString(); sLog.outString( ">>> Scripts Library %s was successfully loaded.\n", name.c_str() ); //heh we are still there :P we have a valid library //we reload script UnloadScriptingModule(); Script=testScript; Script->ScriptsInit(objmgr.GetScriptNames()); sWorld.SetScriptsVersion(Script->ScriptsVersion()); return true; }
ScriptLoadResult ScriptMgr::LoadScriptLibrary(const char* libName) { UnloadScriptLibrary(); std::string name = libName; name = MANGOS_SCRIPT_PREFIX + name + MANGOS_SCRIPT_SUFFIX; m_hScriptLib = MANGOS_LOAD_LIBRARY(name.c_str()); sLog.outString( ">> Loading %s Script library", name.c_str()); if (!m_hScriptLib) return SCRIPT_LOAD_ERR_NOT_FOUND; # define GET_SCRIPT_HOOK_PTR(P,N) \ GetScriptHookPtr((P), (N)); \ if (!(P)) \ { \ sLog.outError("ScriptMgr::LoadScriptLibrary(): function %s not found!", N); \ MANGOS_CLOSE_LIBRARY(m_hScriptLib); \ m_hScriptLib = NULL; \ return SCRIPT_LOAD_ERR_WRONG_API; \ } // let check used mangosd revision for build library (unsafe use with different revision because changes in inline functions, define and etc) char const* (MANGOS_IMPORT* pGetMangosRevStr) (); GET_SCRIPT_HOOK_PTR(pGetMangosRevStr, "GetMangosRevStr"); GET_SCRIPT_HOOK_PTR(m_pOnInitScriptLibrary, "InitScriptLibrary"); GET_SCRIPT_HOOK_PTR(m_pOnFreeScriptLibrary, "FreeScriptLibrary"); GET_SCRIPT_HOOK_PTR(m_pGetScriptLibraryVersion, "GetScriptLibraryVersion"); GET_SCRIPT_HOOK_PTR(m_pGetCreatureAI, "GetCreatureAI"); GET_SCRIPT_HOOK_PTR(m_pCreateInstanceData, "CreateInstanceData"); GET_SCRIPT_HOOK_PTR(m_pOnGossipHello, "GossipHello"); GET_SCRIPT_HOOK_PTR(m_pOnGOGossipHello, "GOGossipHello"); GET_SCRIPT_HOOK_PTR(m_pOnGossipSelect, "GossipSelect"); GET_SCRIPT_HOOK_PTR(m_pOnGOGossipSelect, "GOGossipSelect"); GET_SCRIPT_HOOK_PTR(m_pOnGossipSelectWithCode, "GossipSelectWithCode"); GET_SCRIPT_HOOK_PTR(m_pOnGOGossipSelectWithCode, "GOGossipSelectWithCode"); GET_SCRIPT_HOOK_PTR(m_pOnQuestAccept, "QuestAccept"); GET_SCRIPT_HOOK_PTR(m_pOnGOQuestAccept, "GOQuestAccept"); GET_SCRIPT_HOOK_PTR(m_pOnItemQuestAccept, "ItemQuestAccept"); GET_SCRIPT_HOOK_PTR(m_pOnQuestRewarded, "QuestRewarded"); GET_SCRIPT_HOOK_PTR(m_pOnGOQuestRewarded, "GOQuestRewarded"); GET_SCRIPT_HOOK_PTR(m_pGetNPCDialogStatus, "GetNPCDialogStatus"); GET_SCRIPT_HOOK_PTR(m_pGetGODialogStatus, "GetGODialogStatus"); GET_SCRIPT_HOOK_PTR(m_pOnGOUse, "GOUse"); GET_SCRIPT_HOOK_PTR(m_pOnItemUse, "ItemUse"); GET_SCRIPT_HOOK_PTR(m_pOnAreaTrigger, "AreaTrigger"); GET_SCRIPT_HOOK_PTR(m_pOnProcessEvent, "ProcessEvent"); GET_SCRIPT_HOOK_PTR(m_pOnEffectDummyCreature, "EffectDummyCreature"); GET_SCRIPT_HOOK_PTR(m_pOnEffectDummyGO, "EffectDummyGameObject"); GET_SCRIPT_HOOK_PTR(m_pOnEffectDummyItem, "EffectDummyItem"); GET_SCRIPT_HOOK_PTR(m_pOnAuraDummy, "AuraDummy"); # undef GET_SCRIPT_HOOK_PTR if (strcmp(pGetMangosRevStr(), REVISION_NR) != 0) return SCRIPT_LOAD_ERR_OUTDATED; m_pOnInitScriptLibrary(); return SCRIPT_LOAD_OK; }