void OnChat(ServerChatEventArgs args) { TSPlayer ts = TShock.Players[args.Who]; if (ts.mute || !ts.IsLoggedIn) { return; } Clan Myclan = ClanManager.FindClanByPlayer(ts); if (Myclan == null) { return; } if (args.Text.StartsWith(TShock.Config.CommandSpecifier)) { return; } if (!ts.Group.HasPermission(Permission.Chat) || !ts.Group.HasPermission(Permission.Use)) { Myclan.OnlineClanMembers[ts.Index].DefaultToClanChat = false; return; } if (Myclan.OnlineClanMembers[ts.Index].DefaultToClanChat) { args.Handled = true; Myclan.Broadcast(string.Format("[Clanchat] {0} - {1}: {2}", Myclan.Name, ts.Name, string.Join(" ", args.Text))); } }
void PlayerHooks_PlayerPostLogin(PlayerPostLoginEventArgs e) { if (ClanManager.ClanMembers.ContainsKey(e.Player.Index)) { ClanManager.UnLoadMember(e.Player); } ClanManager.LoadMember(e.Player); }
void Chat(CommandArgs args) { Clan Myclan = ClanManager.FindClanByPlayer(args.Player); if (Myclan == null) { args.Player.SendErrorMessage("You are not in a clan!"); return; } if (args.Player.mute) { args.Player.SendErrorMessage("You are muted!"); return; } Myclan.Broadcast(string.Format("[Clanchat] {0} - {1}: {2}", Myclan.Name, args.Player.Name, string.Join(" ", args.Parameters))); }
/// <inheritdoc /> public override void Initialize() { Directory.CreateDirectory("clans"); if (File.Exists(ConfigPath)) { _configuration = JsonConvert.DeserializeObject <ClansConfig>(File.ReadAllText(ConfigPath)); } var databaseConnection = new SqliteConnection($"uri=file://{Path.Combine("clans", "database.sqlite")},Version=3"); (_clanManager = new ClanManager(databaseConnection)).Load(); (_memberManager = new MemberManager(databaseConnection, _clanManager)).Load(); _commandRegistry.RegisterCommands(); GeneralHooks.ReloadEvent += OnReload; PlayerHooks.PlayerPermission += OnPlayerPermission; PlayerHooks.PlayerPostLogin += OnPlayerPostLogin; ServerApi.Hooks.NetSendBytes.Register(this, OnNetSendBytes); ServerApi.Hooks.ServerChat.Register(this, OnServerChat); }
public override void Initialize() { updateChecker = new UpdateChecker(); ClanHooks.ClanCreated += new ClanHooks.ClanCreatedD(ClanHooks_ClanCreated); ClanHooks.ClanLogin += new ClanHooks.ClanLoginD(ClanHooks_ClanLogin); ClanHooks.ClanJoin += new ClanHooks.ClanJoinD(ClanHooks_ClanJoin); ClanHooks.ClanLeave += new ClanHooks.ClanLeaveD(ClanHooks_ClanLeave); ClanHooks.ClanRemoved += new ClanHooks.ClanRemovedD(ClanHooks_ClanRemoved); ServerApi.Hooks.ServerChat.Register(this, OnChat); ServerApi.Hooks.ServerLeave.Register(this, OnLeave); TShockAPI.Hooks.PlayerHooks.PlayerPostLogin += new TShockAPI.Hooks.PlayerHooks.PlayerPostLoginD(PlayerHooks_PlayerPostLogin); ServerApi.Hooks.GameInitialize.Register(this, OnInitialize); Commands.ChatCommands.Add(new Command(Permission.Use, ClanCmd, "clan")); Commands.ChatCommands.Add(new Command(Permission.Chat, Chat, "c") { AllowServer = false }); ClanManager.Initialize(); }
void OnLeave(LeaveEventArgs e) { ClanManager.UnLoadMember(TShock.Players[e.Who]); }
void ClanCmd(CommandArgs args) { string cmd = args.Parameters.Count > 0 ? args.Parameters[0].ToLower() : "help"; Clan MyClan = null; if (args.Player != TSPlayer.Server) { MyClan = ClanManager.FindClanByPlayer(args.Player); } switch (cmd) { #region checkupdate case "checkupdate": { if (!args.Player.Group.HasPermission(Permission.Create)) { args.Player.SendErrorMessage("You do not have permission to check for updates!"); return; } if (!updateChecker.UpdateAvailable) { updateChecker.CheckForUpdate(); } if (updateChecker.UpdateAvailable) { args.Player.SendInfoMessage("There is an update available for the Clans plugin!"); args.Player.SendInfoMessage("Type /clan changelog to see the changelog!"); } args.Player.SendErrorMessage("No update available!"); } break; #endregion checkupdate #region changelog case "changelog": { if (!updateChecker.UpdateAvailable) { args.Player.SendErrorMessage("There is no update available! Type \"/clan checkupdate\" to check for updates!"); return; } args.Player.SendSuccessMessage("Changelog for the latest version (" + updateChecker.NewVersion + "):"); for (int i = 0; i < updateChecker.ChangeLog.Length; i++) { args.Player.SendInfoMessage(updateChecker.ChangeLog[i]); } } break; #endregion changelog #region create case "create": { if (!args.Player.Group.HasPermission(Permission.Create)) { args.Player.SendErrorMessage("You do not have permission to create a clan!"); return; } if (args.Parameters.Count < 2) { args.Player.SendErrorMessage("Invalid syntax! proper syntax: /clan create <name>"); return; } if (ClanManager.Config.MaxNumberOfClans > 0 && ClanManager.Clans.Keys.Count >= ClanManager.Config.MaxNumberOfClans) { args.Player.SendErrorMessage("The maximum amount of clans has been reached, sorry mate."); return; } string name = String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1)); if (MyClan != null) { args.Player.SendErrorMessage("You are already in a clan!"); return; } if (ClanManager.FindClanByName(name) != null) { args.Player.SendErrorMessage("This clan already exists!"); return; } if (!ClanManager.CreateClan(args.Player, new Clan() { Name = name, Owner = args.Player.UserAccountName })) { args.Player.SendErrorMessage("Something went wrong! Please contact an administrator."); } } break; #endregion create #region join case "join": { if (args.Parameters.Count < 2) { args.Player.SendErrorMessage("Invalid syntax! proper syntax: /clan join <clan name>"); return; } string name = String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1)); if (MyClan != null) { args.Player.SendErrorMessage("You are already in a clan!"); return; } Clan c = ClanManager.FindClanByName(name); if (c == null) { args.Player.SendErrorMessage("This clan does not exists!"); return; } if (c.IsBanned(args.Player.UserAccountName)) { args.Player.SendErrorMessage("You have been banned from this clan!"); return; } if (c.InviteMode == InviteMode.True) { args.Player.SendErrorMessage("This clan is in invite-only mode, please ask for an invitation."); return; } ClanManager.JoinClan(args.Player, c); } break; #endregion join #region leave case "leave": { if (MyClan == null) { args.Player.SendErrorMessage("You are not in a clan!"); return; } if (args.Parameters.Count == 2) { if (args.Parameters[1].ToLower() == "confirm") { ClanManager.LeaveClan(args.Player, MyClan); } else { args.Player.SendErrorMessage("Invalid syntax! proper syntax: /clan leave confirm"); } } else { if (args.Player.UserAccountName == MyClan.Owner) { args.Player.SendErrorMessage("You are the owner of this clan, this means that if you leave, the clan will disband!"); } args.Player.SendInfoMessage("Are you sure you want to leave this clan? type \"/clan leave confirm\""); } } break; #endregion leave #region inviteMode case "invitemode": { if (MyClan == null) { args.Player.SendErrorMessage("You are not in a clan!"); return; } if (MyClan.Owner != args.Player.UserAccountName) { args.Player.SendErrorMessage("You are not allowed to alter the clan's invitemode settings!"); return; } string subcmd = args.Parameters.Count == 2 ? args.Parameters[1].ToLower() : string.Empty; switch (subcmd) { case "true": ClanManager.SetInviteMode(MyClan, InviteMode.True); break; case "false": ClanManager.SetInviteMode(MyClan, InviteMode.False); break; default: args.Player.SendErrorMessage("Invalid syntax! proper syntax: /clan invitemode <true/false>"); return; } args.Player.SendInfoMessage("Clan invite mode has been set to " + (MyClan.InviteMode == InviteMode.True ? "true" : "false")); } break; #endregion inviteMode #region reloadclans case "reloadclans": { if (!args.Player.Group.HasPermission(Permission.Reload)) { args.Player.SendErrorMessage("You do not have permission to create a clan!"); return; } ClanManager.ReloadAll(); args.Player.SendInfoMessage("All clans and their members have been reloaded!"); break; } #endregion reloadclans #region reloadconfig case "reloadconfig": { if (!args.Player.Group.HasPermission(Permission.Reload)) { args.Player.SendErrorMessage("You do not have permission to create a clan!"); return; } ClanManager.ReloadConfig(args.Player); } break; #endregion reloadconfig #region list case "list": { int pageNumber; if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber)) { return; } IEnumerable <string> clanNames = ClanManager.Clans.Keys; PaginationTools.SendPage(args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(clanNames), new PaginationTools.Settings { HeaderFormat = "Clans ({0}/{1}):", FooterFormat = "Type /clan list {0} for more.", NothingToDisplayString = "There aren't any clans!", }); } break; #endregion list #region tp case "tp": { if (MyClan == null) { args.Player.SendErrorMessage("You are not in a clan!"); return; } if (MyClan.TileX == 0 || MyClan.TileY == 0) { args.Player.SendErrorMessage("Your clan has no spawn point defined!"); return; } args.Player.Teleport(MyClan.TileX * 16, MyClan.TileY * 16); } break; #endregion tp #region setspawn case "setspawn": { if (MyClan == null) { args.Player.SendErrorMessage("You are not in a clan!"); return; } if (MyClan.Owner != args.Player.UserAccountName) { args.Player.SendErrorMessage("You are not allowed to alter the clan's spawnpoint!"); return; } ClanManager.SetSpawn(MyClan, args.Player); args.Player.SendInfoMessage(string.Format("Your clan's spawnpoint has been changed to X:{0}, Y:{1}", MyClan.TileX, MyClan.TileY)); } break; #endregion setspawn #region setcolor case "setcolor": { if (MyClan == null) { args.Player.SendErrorMessage("You are not in a clan!"); return; } if (MyClan.Owner != args.Player.UserAccountName) { args.Player.SendErrorMessage("You are not allowed to alter the clan's chatcolor!"); return; } if (args.Parameters.Count < 2) { args.Player.SendErrorMessage("Invalid syntax! proper syntax: /clan setcolor <0-255,0-255,0-255>"); return; } if (!ClanManager.SetColor(MyClan, args.Parameters[1])) { args.Player.SendErrorMessage("Invalid color format! proper example: /clan setcolor 125,255,137"); } } break; #endregion setcolor #region who case "who": { int pageNumber; if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber)) { return; } IEnumerable <string> clanMembers = MyClan.OnlineClanMembers.Values.Select(m => m.TSPlayer.Name); PaginationTools.SendPage(args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(clanMembers), new PaginationTools.Settings { HeaderFormat = "Online Clanmembers ({0}/{1}):", FooterFormat = "Type /clan who {0} for more.", }); } break; #endregion who #region find case "find": { if (args.Parameters.Count < 2) { args.Player.SendErrorMessage("Invalid syntax! proper syntax: /clan find <player>"); return; } var foundplr = TShock.Utils.FindPlayer(args.Parameters[1]); if (foundplr.Count == 0) { args.Player.SendMessage("Invalid player!", Color.Red); return; } else if (foundplr.Count > 1) { args.Player.SendMessage(string.Format("More than one ({0}) player matched!", foundplr.Count), Color.Red); return; } TSPlayer plr = foundplr[0]; Clan c = ClanManager.FindClanByPlayer(plr); if (c == null) { args.Player.SendErrorMessage(string.Format("{0} is not in a clan!", plr.Name)); return; } args.Player.SendInfoMessage(string.Format("{0} is in clan: {1}", plr.Name, c.Name)); } break; #endregion find #region togglechat case "togglechat": { MyClan.OnlineClanMembers[args.Player.Index].DefaultToClanChat = !MyClan.OnlineClanMembers[args.Player.Index].DefaultToClanChat; args.Player.SendInfoMessage(MyClan.OnlineClanMembers[args.Player.Index].DefaultToClanChat ? "You will now automaticly talk in the clanchat!" : "You are now using global chat, use /c to talk in clanchat"); } break; #endregion togglechat #region rename case "rename": { if (MyClan == null) { args.Player.SendErrorMessage("You are not in a clan!"); return; } if (MyClan.Owner != args.Player.UserAccountName) { args.Player.SendErrorMessage("You are not allowed to alter the clan's name!"); return; } string name = String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1)); if (ClanManager.FindClanByName(name) != null) { args.Player.SendErrorMessage("A clan with this name already exists!"); return; } ClanManager.Rename(MyClan, args.Player, name); MyClan.Broadcast("Your clan has been renamed to " + MyClan.Name); } break; #endregion rename #region help default: case "help": { int pageNumber; if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber)) { return; } PaginationTools.SendPage(args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(HelpMsg), new PaginationTools.Settings { HeaderFormat = "Clans help page ({0}/{1})", FooterFormat = "Type /clan help {0} for more.", }); } break; #endregion help } }