public void UnloadPlugin(string name) { Logger.LogDebug("[JSPluginLoader] Unloading " + name + " plugin."); if (PluginLoader.GetInstance().Plugins.ContainsKey(name)) { BasePlugin plugin = PluginLoader.GetInstance().Plugins[name]; if (plugin.DontReload) { return; } if (plugin.Globals.Contains("On_PluginDeinit")) { plugin.Invoke("On_PluginDeinit"); } plugin.KillTimers(); PluginLoader.GetInstance().RemoveHooks(plugin); PluginLoader.GetInstance().Plugins.TryRemove(name, out plugin); Logger.LogDebug("[JSPluginLoader] " + name + " plugin was unloaded successfuly."); } else { Logger.LogError("[JSPluginLoader] Can't unload " + name + ". Plugin is not loaded."); throw new InvalidOperationException("[JSPluginLoader] Can't unload " + name + ". Plugin is not loaded."); } }
public ChatCommand setCallback(string function) { callback = new CallbackDelegate((cmd, player) => { plugin.Invoke(function, new[] { (object)cmd, player }); }); return(this); }
public ConsoleCommand setCallback(string function) { callback = new CallbackDelegate(cmd => { try { plugin.Invoke(function, (object)cmd); } catch (Exception ex) { Logger.Log("there"); Logger.Log(ex.ToString()); } }); return(this); }
public void RemoveHooks(BasePlugin plugin) { if (plugin.State != PluginState.Loaded) { return; } foreach (Hook hook in plugin.Hooks) { Logger.LogDebug($"[{plugin.Type}] Removing hook: {plugin.Name}.{hook.Name}"); hook.hook.Dispose(); } plugin.Hooks.Clear(); if (plugin.Globals.Contains("On_PluginDeinit")) { plugin.Invoke("On_PluginDeinit"); } }
public void InstallHooks(BasePlugin plugin) { if (plugin.State != PluginState.Loaded) { return; } foreach (string method in plugin.Globals) { if (Hooks.HookNames.Contains(method)) { plugin.Hooks.Add( Hooks.Subscribe(method, plugin) ); Logger.LogDebug($"[{plugin.Type}] Adding hook: {plugin.Name}.{method}"); } } if (plugin.Globals.Contains("On_PluginInit")) { plugin.Invoke("On_PluginInit"); } }
public void InstallHooks(BasePlugin plugin) { if (plugin.State != PluginState.Loaded) { return; } foreach (string method in plugin.Globals) { if (!method.StartsWith("On_") && !method.EndsWith("Callback")) { continue; } bool foundHook = true; switch (method) { case "On_AllPluginsLoaded": plugin.OnAllPluginsLoadedHook = OnAllLoaded.Subscribe(s => plugin.OnAllPluginsLoaded("")); break; case "On_Chat": plugin.OnChatHook = Hooks.OnChat.Subscribe(c => plugin.OnChat(c)); break; case "On_ClientAuth": plugin.OnClientAuthHook = Hooks.OnClientAuth.Subscribe(a => plugin.OnClientAuth(a)); break; case "On_ClientConsole": plugin.OnClientConsoleHook = Hooks.OnClientConsole.Subscribe(c => plugin.OnClientConsole(c)); break; case "On_Command": plugin.OnCommandHook = Hooks.OnCommand.Subscribe(c => plugin.OnCommand(c)); break; case "On_CommandPermission": plugin.OnCommandPermissionHook = Hooks.OnCommandPermission.Subscribe(c => plugin.OnCommandPermission(c)); break; case "On_CorpseHurt": plugin.OnCorpseHurtHook = Hooks.OnCorpseHurt.Subscribe(c => plugin.OnCorpseHurt(c)); break; case "On_BuildingComplete": plugin.OnBuildingCompleteHook = Hooks.OnBuildingComplete.Subscribe(b => plugin.OnBuildingComplete(b)); break; case "On_Placement": plugin.OnPlacementHook = Hooks.OnPlacement.Subscribe(b => plugin.OnPlacement(b)); break; case "On_DoorCode": plugin.OnDoorCodeHook = Hooks.OnDoorCode.Subscribe(b => plugin.OnDoorCode(b)); break; case "On_DoorUse": plugin.OnDoorUseHook = Hooks.OnDoorUse.Subscribe(d => plugin.OnDoorUse(d)); break; case "On_NPCHurt": plugin.OnNPCHurtHook = Hooks.OnNPCHurt.Subscribe(n => plugin.OnNPCHurt(n)); break; case "On_NPCKilled": plugin.OnNPCKilledHook = Hooks.OnNPCDied.Subscribe(n => plugin.OnNPCKilled(n)); break; case "On_LootingEntity": plugin.OnLootingEntityHook = Hooks.OnLootingEntity.Subscribe(l => plugin.OnLootingEntity(l)); break; case "On_LootingPlayer": plugin.OnLootingPlayerHook = Hooks.OnLootingPlayer.Subscribe(l => plugin.OnLootingPlayer(l)); break; case "On_LootingItem": plugin.OnLootingItemHook = Hooks.OnLootingItem.Subscribe(l => plugin.OnLootingItem(l)); break; case "On_PlayerConnected": plugin.OnPlayerConnectedHook = Hooks.OnPlayerConnected.Subscribe(p => plugin.OnPlayerConnected(p)); break; case "On_PlayerDisconnected": plugin.OnPlayerDisconnectedHook = Hooks.OnPlayerDisconnected.Subscribe(p => plugin.OnPlayerDisconnected(p)); break; case "On_PlayerGathering": plugin.OnPlayerGatheringHook = Hooks.OnGathering.Subscribe(g => plugin.OnPlayerGathering(g)); break; case "On_PlayerHurt": plugin.OnPlayerHurtHook = Hooks.OnPlayerHurt.Subscribe(p => plugin.OnPlayerHurt(p)); break; case "On_CombatEntityHurt": plugin.OnCombatEntityHurtHook = Hooks.OnCombatEntityHurt.Subscribe(c => plugin.OnCombatEntityHurt(c)); break; case "On_PlayerDied": plugin.OnPlayerDiedHook = Hooks.OnPlayerDied.Subscribe(p => plugin.OnPlayerDied(p)); break; case "On_PlayerStartCrafting": plugin.OnPlayerStartCraftingHook = Hooks.OnPlayerStartCrafting.Subscribe(p => plugin.OnPlayerStartCrafting(p)); break; case "On_PlayerTakeRadiation": plugin.OnPlayerTakeRadiationHook = Hooks.OnPlayerTakeRads.Subscribe(p => plugin.OnPlayerTakeRadiation(p)); break; case "On_ServerConsole": plugin.OnServerConsoleHook = Hooks.OnServerConsole.Subscribe(c => plugin.OnServerConsole(c)); break; case "On_ServerInit": plugin.OnServerInitHook = Hooks.OnServerInit.Subscribe(s => plugin.OnServerInit(s)); break; case "On_ServerShutdown": plugin.OnServerShutdownHook = Hooks.OnServerShutdown.Subscribe(s => plugin.OnServerShutdown(s)); break; case "On_Respawn": plugin.OnRespawnHook = Hooks.OnRespawn.Subscribe(r => plugin.OnRespawn(r)); break; case "On_PluginInit": plugin.Invoke("On_PluginInit"); break; case "On_PluginDeinit": break; default: foundHook = false; break; } if (foundHook) { Logger.LogDebug("Found hook: " + method); } } }
public static Hook Subscribe(string hookname, BasePlugin plugin) { return(new Hook(hookname, args => plugin.Invoke(hookname, args))); }