예제 #1
0
        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.");
            }
        }
예제 #2
0
 public ChatCommand setCallback(string function)
 {
     callback = new CallbackDelegate((cmd, player) => {
         plugin.Invoke(function, new[] { (object)cmd, player });
     });
     return(this);
 }
예제 #3
0
 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);
 }
예제 #4
0
        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");
            }
        }
예제 #5
0
        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");
            }
        }
예제 #6
0
        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);
                }
            }
        }
예제 #7
0
 public static Hook Subscribe(string hookname, BasePlugin plugin)
 {
     return(new Hook(hookname, args => plugin.Invoke(hookname, args)));
 }