mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
[10950] Check for scripting lib that it build with exactly same mangos rev.
This prevent use outdated script DLL with hidden possible incompatibilities in used from core inline functions or defines.
This commit is contained in:
parent
0da3463758
commit
9ae7104251
10 changed files with 79 additions and 52 deletions
|
|
@ -24,6 +24,8 @@
|
|||
#include "WaypointManager.h"
|
||||
#include "World.h"
|
||||
|
||||
#include "revision_nr.h"
|
||||
|
||||
ScriptMapMap sQuestEndScripts;
|
||||
ScriptMapMap sQuestStartScripts;
|
||||
ScriptMapMap sSpellScripts;
|
||||
|
|
@ -1044,45 +1046,53 @@ ScriptLoadResult ScriptMgr::LoadScriptLibrary(const char* libName)
|
|||
if (!m_hScriptLib)
|
||||
return SCRIPT_LOAD_ERR_NOT_FOUND;
|
||||
|
||||
GetScriptHookPtr(m_pOnInitScriptLibrary, "InitScriptLibrary");
|
||||
GetScriptHookPtr(m_pOnFreeScriptLibrary, "FreeScriptLibrary");
|
||||
GetScriptHookPtr(m_pGetScriptLibraryVersion, "GetScriptLibraryVersion");
|
||||
# define GET_SCRIPT_HOOK_PTR(P,N) \
|
||||
GetScriptHookPtr((P), (N)); \
|
||||
if (!(P)) \
|
||||
{ \
|
||||
MANGOS_CLOSE_LIBRARY(m_hScriptLib); \
|
||||
m_hScriptLib = NULL; \
|
||||
return SCRIPT_LOAD_ERR_WRONG_API; \
|
||||
}
|
||||
|
||||
GetScriptHookPtr(m_pGetCreatureAI, "GetCreatureAI");
|
||||
GetScriptHookPtr(m_pCreateInstanceData, "CreateInstanceData");
|
||||
// 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) ();
|
||||
|
||||
GetScriptHookPtr(m_pOnGossipHello, "GossipHello");
|
||||
GetScriptHookPtr(m_pOnGOGossipHello, "GOGossipHello");
|
||||
GetScriptHookPtr(m_pOnGossipSelect, "GossipSelect");
|
||||
GetScriptHookPtr(m_pOnGOGossipSelect, "GOGossipSelect");
|
||||
GetScriptHookPtr(m_pOnGossipSelectWithCode, "GossipSelectWithCode");
|
||||
GetScriptHookPtr(m_pOnGOGossipSelectWithCode, "GOGossipSelectWithCode");
|
||||
GetScriptHookPtr(m_pOnQuestAccept, "QuestAccept");
|
||||
GetScriptHookPtr(m_pOnGOQuestAccept, "GOQuestAccept");
|
||||
GetScriptHookPtr(m_pOnItemQuestAccept, "ItemQuestAccept");
|
||||
GetScriptHookPtr(m_pOnQuestRewarded, "QuestRewarded");
|
||||
GetScriptHookPtr(m_pOnGOQuestRewarded, "GOQuestRewarded");
|
||||
GetScriptHookPtr(m_pGetNPCDialogStatus, "GetNPCDialogStatus");
|
||||
GetScriptHookPtr(m_pGetGODialogStatus, "GetGODialogStatus");
|
||||
GetScriptHookPtr(m_pOnGOUse, "GOUse");
|
||||
GetScriptHookPtr(m_pOnItemUse, "ItemUse");
|
||||
GetScriptHookPtr(m_pOnAreaTrigger, "AreaTrigger");
|
||||
GetScriptHookPtr(m_pOnProcessEvent, "ProcessEvent");
|
||||
GetScriptHookPtr(m_pOnEffectDummyCreature, "EffectDummyCreature");
|
||||
GetScriptHookPtr(m_pOnEffectDummyGO, "EffectDummyGameObject");
|
||||
GetScriptHookPtr(m_pOnEffectDummyItem, "EffectDummyItem");
|
||||
GetScriptHookPtr(m_pOnAuraDummy, "AuraDummy");
|
||||
GET_SCRIPT_HOOK_PTR(pGetMangosRevStr, "GetMangosRevStr");
|
||||
|
||||
if (!m_pOnInitScriptLibrary || !m_pOnFreeScriptLibrary || !m_pGetScriptLibraryVersion ||
|
||||
!m_pGetCreatureAI || !m_pCreateInstanceData ||
|
||||
!m_pOnGossipHello || !m_pOnGOGossipHello || !m_pOnGossipSelect ||
|
||||
!m_pOnGOGossipSelect || !m_pOnGossipSelectWithCode || !m_pOnGOGossipSelectWithCode ||
|
||||
!m_pOnQuestAccept || !m_pOnGOQuestAccept || !m_pOnItemQuestAccept ||
|
||||
!m_pOnQuestRewarded || !m_pOnGOQuestRewarded || !m_pGetNPCDialogStatus ||
|
||||
!m_pGetGODialogStatus || !m_pOnGOUse || !m_pOnItemUse ||
|
||||
!m_pOnAreaTrigger || !m_pOnProcessEvent || !m_pOnEffectDummyCreature ||
|
||||
!m_pOnEffectDummyGO || !m_pOnEffectDummyItem || !m_pOnAuraDummy)
|
||||
return SCRIPT_LOAD_ERR_WRONG_API;
|
||||
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;
|
||||
|
||||
if (m_pOnInitScriptLibrary)
|
||||
m_pOnInitScriptLibrary();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue