public static void Init() { if (!Directory.Exists(Util.GetPublicFolder())) { Directory.CreateDirectory(Util.GetPublicFolder()); } Logger.Init(); CryptoExtensions.Init(); DataStore.GetInstance().Load(); Server.GetInstance(); CSharpPluginLoader.GetInstance(); CSScriptPluginLoader.GetInstance(); JSPluginLoader.GetInstance(); PYPluginLoader.GetInstance(); InstallThreadedOutput(); ReloadTimers(); server.official = false; }
public static void PlayerConnected(Network.Connection connection) { var player = connection.player as BasePlayer; var p = new Player(player); if (Server.GetInstance().OfflinePlayers.ContainsKey(player.userID)) { Server.GetInstance().OfflinePlayers.Remove(player.userID); } if (!Server.GetInstance().Players.ContainsKey(player.userID)) { Server.GetInstance().Players.Add(player.userID, p); } OnPlayerConnected.OnNext(p); if (Config.GetInstance().GetBoolValue("Config", "welcomeMessage", true)) { p.Message("Welcome " + p.Name + "!"); p.Message(String.Format("This server is powered by Pluton[v{0}]!", Bootstrap.Version)); p.Message("Visit pluton-team.org for more information or to report bugs!"); } }
public static void reload(ConsoleSystem.Arg arg) { if (PluginLoader.GetInstance().Plugins.ContainsKey(arg.ArgsStr)) { PluginLoader.GetInstance().ReloadPlugin(arg.ArgsStr); arg.ReplyWith(String.Format("{0} plugin reloaded!", arg.ArgsStr)); } else if (arg.ArgsStr == "") { DirectoryConfig.GetInstance().Reload(); CoreConfig.GetInstance().Reload(); Config.GetInstance().Reload(); Server.GetInstance().LoadLoadouts(); if (Server.GetInstance().Loaded) { Hooks.On_ServerInit(); } PluginLoader.GetInstance().ReloadPlugins(); arg.ReplyWith("Pluton reloaded!"); var planes = (from plane in UnityEngine.Object.FindObjectsOfType <CargoPlane>() where plane.transform.position.x == 0f && plane.transform.position.z == 0f select plane).ToList(); planes.ForEach(p => p.SendMessage("KillMessage", UnityEngine.SendMessageOptions.DontRequireReceiver)); if (planes.Count != 0) { Pluton.Logger.LogWarning(String.Format("Destroyed {0} plane at Vector3.zero", planes.Count)); } } else { arg.ReplyWith(String.Format("Couldn't find plugin: {0}!", arg.ArgsStr)); } }
public void LoadPlugin(string name) { Logger.LogDebug("[PHPPluginLoader] Loading plugin " + name + "."); if (PluginLoader.GetInstance().Plugins.ContainsKey(name)) { Logger.LogError("[PHPPluginLoader] " + name + " plugin is already loaded."); throw new InvalidOperationException("[PHPPluginLoader] " + name + " plugin is already loaded."); } try { string code = GetSource(name); DirectoryInfo path = new DirectoryInfo(Path.Combine(PluginLoader.GetInstance().pluginDirectory.FullName, name)); new PHPPlugin(name, code, path); } catch (Exception ex) { Server.GetInstance().Broadcast(name + " plugin could not be loaded."); Logger.Log("[PHPPluginLoader] " + name + " plugin could not be loaded."); Logger.LogException(ex); } }
// BasePlayer.OnDisconnected() public static void On_PlayerDisconnected(BasePlayer player) { var p = Server.GetPlayer(player); if (Server.GetInstance().serverData.ContainsKey("OfflinePlayers", p.SteamID)) { OfflinePlayer op = (Server.GetInstance().serverData.Get("OfflinePlayers", p.SteamID) as OfflinePlayer); op.Update(p); Server.GetInstance().OfflinePlayers[player.userID] = op; } else { OfflinePlayer op = new OfflinePlayer(p); Server.GetInstance().OfflinePlayers.Add(player.userID, op); } if (Server.GetInstance().Players.ContainsKey(player.userID)) { Server.GetInstance().Players.Remove(player.userID); } OnNext("On_PlayerDisconnected", p); }
public override void Load(string code = "") { try { UserData.RegistrationPolicy = InteropRegistrationPolicy.Automatic; script = new Script(); script.Globals["Plugin"] = this; script.Globals["Util"] = Util.GetInstance(); script.Globals["Server"] = Server.GetInstance(); script.Globals["DataStore"] = DataStore.GetInstance(); script.Globals["Commands"] = chatCommands; script.Globals["GlobalData"] = GlobalData; script.Globals["ServerConsoleCommands"] = consoleCommands; script.Globals["Web"] = Web.GetInstance(); script.Globals["World"] = World.GetInstance(); script.DoString(code); Author = script.Globals.Get("Author").String; About = script.Globals.Get("About").String; Version = script.Globals.Get("Version").String; State = PluginState.Loaded; foreach (DynValue v in script.Globals.Keys) { Globals.Add(v.ToString().Replace("\"", "")); } Tables = script.Globals; } catch (Exception ex) { Logger.LogException(ex); State = PluginState.FailedToLoad; } PluginLoader.GetInstance().OnPluginLoaded(this); }
// chat.say().Hooks.Chat() public static void Command(ConsoleSystem.Arg arg) { Player player = Server.GetPlayer(arg.Player()); string[] args = arg.ArgsStr.Substring(2, arg.ArgsStr.Length - 3).Replace("\\", "").Split(new string[] { " " }, StringSplitOptions.None); CommandEvent cmd = new CommandEvent(player, args); if (cmd.cmd == "") { return; } foreach (KeyValuePair <string, BasePlugin> pl in PluginLoader.GetInstance().Plugins) { ChatCommand[] commands = pl.Value.chatCommands.getChatCommands(cmd.cmd); foreach (ChatCommand chatCmd in commands) { if (chatCmd.callback == null) { continue; } CommandPermissionEvent permission = new CommandPermissionEvent(player, args, chatCmd); OnCommandPermission.OnNext(permission); if (permission.blocked) { player.Message(permission.Reply); continue; } try { chatCmd.callback(cmd.args, player); } catch (Exception ex) { Logger.LogError(chatCmd.plugin.FormatException(ex)); } } } if (Config.GetInstance().GetBoolValue("Commands", "enabled", true)) { // TODO: make a plugin from these, no need to be in the core if (cmd.cmd == Config.GetInstance().GetValue("Commands", "ShowMyStats", "mystats")) { PlayerStats stats = player.Stats; player.Message(String.Format("You have {0} kills and {1} deaths!", stats.Kills, stats.Deaths)); player.Message(String.Format("You have taken {0} dmg, and caused {1} in total!", stats.TotalDamageTaken, stats.TotalDamageDone)); return; } if (cmd.cmd == Config.GetInstance().GetValue("Commands", "ShowStatsOther", "statsof")) { Player pOther = Player.Find(String.Join(" ", cmd.args)); if (pOther != null) { PlayerStats stats2 = pOther.Stats; player.Message(String.Format(pOther.Name + " has {0} kills and {1} deaths!", stats2.Kills, stats2.Deaths)); player.Message(String.Format(pOther.Name + " has taken {0} dmg, and caused {1} in total!", stats2.TotalDamageTaken, stats2.TotalDamageDone)); return; } player.Message("Can't find player: " + String.Join(" ", cmd.args)); return; } if (cmd.cmd == Config.GetInstance().GetValue("Commands", "ShowLocation", "whereami")) { player.Message(player.Location.ToString()); return; } if (cmd.cmd == Config.GetInstance().GetValue("Commands", "ShowOnlinePlayers", "players")) { string msg = Server.GetInstance().Players.Count == 1 ? "You are alone!" : String.Format("There are: {0} players online!", Server.GetInstance().Players.Count); player.Message(msg); return; } if (cmd.cmd == Config.GetInstance().GetValue("Commands", "Help", "help")) { foreach (string key in Config.GetInstance().PlutonConfig.EnumSection("HelpMessage")) { player.Message(Config.GetInstance().GetValue("HelpMessage", key)); } } List <ChatCommands> cc = new List <ChatCommands>(); foreach (KeyValuePair <string, BasePlugin> pl in PluginLoader.GetInstance().Plugins) { cc.Add(pl.Value.chatCommands); } if (cmd.cmd == Config.GetInstance().GetValue("Commands", "Commands", "commands")) { List <string> list = new List <string>(); foreach (ChatCommands cm in cc) { list.AddRange(cm.getCommands()); } player.Message(String.Join(", ", list.ToArray())); } if (cmd.cmd == Config.GetInstance().GetValue("Commands", "Description", "whatis")) { if (cmd.args.Length < 1) { player.Message("You must provide a command name"); } else { List <string> list = new List <string>(); foreach (ChatCommands cm in cc) { list.AddRange(cm.getDescriptions(cmd.args[0])); } if (list.Count > 0) { player.Message(String.Join("\r\n", list.ToArray())); } } } if (cmd.cmd == Config.GetInstance().GetValue("Commands", "Usage", "howto")) { if (cmd.args.Length < 1) { player.Message("You must provide a command name"); } else { List <string> list = new List <string>(); foreach (ChatCommands cm in cc) { list.AddRange(cm.getUsages(cmd.args[0])); } foreach (var item in list) { player.Message(String.Format("/{0} {1}", cmd.args[0], item)); } } } } OnCommand.OnNext(cmd); if (cmd.Reply != "") { arg.ReplyWith(cmd.Reply); } }