138 lines
4.3 KiB
Lua
138 lines
4.3 KiB
Lua
PluginManager = {};
|
|
|
|
local Dir = "Script.Global.Plugin.";
|
|
|
|
------------------------------------------- 初始化 -------------------------------------------
|
|
|
|
PluginManager.Config = {};
|
|
PluginManager.Owner = nil;
|
|
PluginManager.Plugins = {};
|
|
|
|
function PluginManager:Init(InOwner)
|
|
UGCLogSystem.Log("[PluginManager:Init] 执行")
|
|
self.Config = require(Dir .. "PluginConfig")
|
|
self.Owner = InOwner;
|
|
for i, v in pairs(self.Config) do
|
|
UGCLogSystem.Log("[PluginManager:Init] Script = %s", v.Script);
|
|
local PluginItem = require(v.Script);
|
|
--local Item = setmetatable({}, { __index = PluginItem, __metatable = PluginItem, });
|
|
local Item = PluginItem;
|
|
if _G[v.Name] then
|
|
UGCLogSystem.Log("[PluginManager:Init] 存在 %s 的模块,请改名", v.Name);
|
|
assert(false);
|
|
else
|
|
_G[v.Name] = Item;
|
|
end
|
|
self.Plugins[v.Name] = Item;
|
|
self.Owner[v.Name] = Item;
|
|
Item.PluginName = v.Name;
|
|
|
|
table.func(Item, "Init", InOwner);
|
|
-- 注册 RPC
|
|
--if not table.hasFunc("SendRPC") then
|
|
-- Item["SendRPC"] = function(Self, InFuncName, ...)
|
|
--
|
|
-- end
|
|
--end
|
|
end
|
|
|
|
-- 输出 _G
|
|
--UGCLogSystem.LogTree(string.format("[PluginManager:Init] _G ="), _G);
|
|
|
|
--for i, v in pairs(self.Plugins) do
|
|
-- UGCLogSystem.Log("[PluginManager:Init] PluginName = %s", v.PluginName);
|
|
--end
|
|
|
|
UGCLogSystem.Log("[PluginManager:Init] 执行成功")
|
|
end
|
|
|
|
------------------------------------------- 注册函数 -------------------------------------------
|
|
|
|
function PluginManager:OnClientAlready()
|
|
self:PluginManagerFunc_Internal("OnClientAlready");
|
|
end
|
|
|
|
function PluginManager:OnMapLoadComplete()
|
|
self:PluginManagerFunc_Internal("OnMapLoadComplete");
|
|
end
|
|
|
|
---@param InCenterIndex int32
|
|
---@param InCenter BP_ActorStart_C
|
|
function PluginManager:OnSelectMapCenter(InCenterIndex, InCenter)
|
|
self:PluginManagerFunc_Internal("OnSelectMapCenter", InCenterIndex, InCenter);
|
|
end
|
|
|
|
function PluginManager:OnPlayerLogin(InPlayerKey)
|
|
self:PluginManagerFunc_Internal("OnPlayerLogin", InPlayerKey);
|
|
end
|
|
|
|
function PluginManager:OnPlayerLeave(InPlayerKey)
|
|
self:PluginManagerFunc_Internal("OnPlayerLeave", InPlayerKey);
|
|
end
|
|
|
|
function PluginManager:OnPawnInit(Pawn)
|
|
self:PluginManagerFunc_Internal("OnPawnInit", Pawn);
|
|
end
|
|
|
|
function PluginManager:OnPlayerTakeDamage(DamagedActor, Damage, DamageType, EventInstigator)
|
|
self:PluginManagerFunc_Internal("OnPlayerTakeDamage", DamagedActor, Damage, DamageType, EventInstigator);
|
|
end
|
|
|
|
function PluginManager:OnPlayerDead(DeadPlayerKey, KillerPlayerKey)
|
|
self:PluginManagerFunc_Internal("OnPlayerDead", DeadPlayerKey, KillerPlayerKey);
|
|
end
|
|
|
|
function PluginManager:BPReceiveDamage(DamagedActor, Damage, DamageType, InstigatedBy, DamageCauser)
|
|
self:PluginManagerFunc_Internal("BPReceiveDamage", DamagedActor, Damage, DamageType, InstigatedBy, DamageCauser);
|
|
end
|
|
|
|
function PluginManager:OnPlayerRespawn(InPlayerKey)
|
|
self:PluginManagerFunc_Internal("OnPlayerRespawn", InPlayerKey);
|
|
end
|
|
|
|
function PluginManager:OnPlayerPossessed(Pawn, NewController)
|
|
self:PluginManagerFunc_Internal("OnPlayerPossessed", Pawn, NewController);
|
|
end
|
|
|
|
function PluginManager:OnPlayerPickup(PlayerController, Target, ItemID, Count)
|
|
self:PluginManagerFunc_Internal("OnPlayerPickup", PlayerController, Target, ItemID, Count);
|
|
end
|
|
|
|
function PluginManager:OnPlayerGetWeapon(InPawn, Weapon)
|
|
self:PluginManagerFunc_Internal("OnPlayerGetWeapon", InPawn, Weapon);
|
|
end
|
|
|
|
function PluginManager:OnWeaponBulletHit(InPawn, ShootWeapon, Bullet, HitInfo)
|
|
self:PluginManagerFunc_Internal("OnWeaponBulletHit", InPawn, ShootWeapon, Bullet, HitInfo);
|
|
end
|
|
|
|
function PluginManager:OnPlayerShoot(InPawn, ShootWeapon, BulletID)
|
|
self:PluginManagerFunc_Internal("OnPlayerShoot", InPawn, ShootWeapon, BulletID);
|
|
end
|
|
|
|
function PluginManager:PluginManagerFunc_Internal(InFunc, ...)
|
|
local RetVal = 0;
|
|
for i, v in pairs(self.Plugins) do
|
|
local Val = table.func(v, InFunc, ...);
|
|
if Val ~= nil then RetVal = RetVal + Val; end
|
|
end
|
|
return RetVal;
|
|
end
|
|
|
|
function PluginManager:SendPluginRPC(InPluginName, InFuncName, ...)
|
|
if IsServer then
|
|
if self.Plugins[InPluginName] == nil then
|
|
UGCLogSystem.Log("[PluginManager:SendPluginRPC] 无法查找到 %s 的插件,请检查", InPluginName);
|
|
return ;
|
|
end
|
|
UnrealNetwork.CallUnrealRPC_Multicast(self.Owner, "ReceivePluginRPC", InPluginName, InFuncName, ...);
|
|
else
|
|
|
|
end
|
|
end
|
|
|
|
function PluginManager:Get(InPluginName)
|
|
return self.Plugins[InPluginName];
|
|
end
|
|
|
|
return PluginManager; |