107 lines
3.5 KiB
Lua
Raw Normal View History

2025-01-04 23:00:19 +08:00
local Dir = "Script.Global.Plugin.";
local PluginManager = {};
------------------------------------------- 初始化 -------------------------------------------
PluginManager.Config = {};
PluginManager.Owner = nil;
PluginManager.Plugins = {};
function PluginManager:Init(InOwner)
self.Config = require(Dir .. "PluginConfig")
self.Owner = InOwner;
for i, v in pairs(self.Config) do
local PluginItem = require(v.Script);
local Item = setmetatable({}, { __index = PluginItem, __metatable = PluginItem, });
self.Plugins[v.Name] = Item;
self.Owner[v.Name] = Item;
_G[v.Name] = _G[v.Name] or Item;
table.func(self.Owner[v.Name], "Init", InOwner);
-- 注册 RPC
Item["SendRPC"] = function(Self, InFuncName, ...)
end
end
-- 输出试一下
end
------------------------------------------- 注册函数 -------------------------------------------
function PluginManager:OnClientAlready()
self:PluginManagerFunc_Internal("OnClientAlready");
end
function PluginManager:OnMapLoaded()
self:PluginManagerFunc_Internal("OnMapLoaded");
end
function PluginManager:OnPlayerLogin(InPlayerKey)
self:PluginManagerFunc_Internal("OnPlayerLogin", InPlayerKey);
end
function PluginManager:OnPlayerLevel(InPlayerKey)
self:PluginManagerFunc_Internal("OnPlayerLevel", 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:OnPlayerReceiveDamage(DamagedActor, Damage, DamageType, InstigatedBy, DamageCauser)
self:PluginManagerFunc_Internal("OnPlayerReceiveDamage", 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
return PluginManager;