public void OnCommand(GameClient client, string[] args) { if (args.Length < 2) { DisplaySyntax(client); return; } switch (args[1].ToLower()) { case "create": { if (args.Length < 4) { DisplaySyntax(client); return; } string AccountName = args[2].ToLower(); string Password = args[3]; foreach (char c in AccountName.ToCharArray()) { if ((c < '0' || c > '9') && (c < 'a' || c > 'z')) { DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.InvalidAccountName")); return; } } if (AccountName.Length < 4 || Password.Length < 4) { DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.InvalidAccountNameOrPassword")); return; } Account account = GetAccount(AccountName); if (account != null) { DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.AccountNameAlreadyRegistered")); return; } account = new Account(); account.Name = AccountName; account.Password = PacketHandler.Client.v168.LoginRequestHandler.CryptPassword(Password); account.PrivLevel = (uint)ePrivLevel.Player; account.Realm = (int)eRealm.None; account.CreationDate = DateTime.Now; account.Language = ServerProperties.Properties.SERV_LANGUAGE; GameServer.Database.AddObject(account); DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.AccountCreated")); } break; case "changepassword": { if (args.Length < 4) { DisplaySyntax(client); return; } string accountname = args[2]; string newpass = args[3]; Account acc = GetAccount(accountname); if (acc == null) { DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.AccountNotFound", accountname)); return; } acc.Password = LoginRequestHandler.CryptPassword(newpass); GameServer.Database.SaveObject(acc); // Log change AuditMgr.AddAuditEntry(client, AuditType.Account, AuditSubtype.AccountPasswordChange, string.Empty, client.Player != null ? client.Player.Name : string.Empty); } break; case "delete": { if (args.Length < 3) { DisplaySyntax(client); return; } string AccountName = args[2]; Account acc = GetAccount(AccountName); if (acc == null) { DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.AccountNotFound", AccountName)); return; } KickAccount(acc); GameServer.Database.DeleteObject(acc); // Log change AuditMgr.AddAuditEntry(client, AuditType.Account, AuditSubtype.AccountDelete, "acct=" + AccountName, client.Player != null ? client.Player.Name : string.Empty); DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.AccountDeleted", acc.Name)); return; } case "deletecharacter": { if (args.Length < 3) { DisplaySyntax(client); return; } string charname = args[2]; DOLCharacters cha = GetCharacter(charname); if (cha == null) { DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.CharacterNotFound", charname)); return; } KickCharacter(cha); GameServer.Database.DeleteObject(cha); // Log change AuditMgr.AddAuditEntry(client, AuditType.Character, AuditSubtype.CharacterDelete, "char=" + charname, client.Player != null ? client.Player.Name : string.Empty); DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.CharacterDeleted", cha.Name)); return; } case "movecharacter": { if (args.Length < 4) { DisplaySyntax(client); return; } string charname = args[2]; string accountname = args[3]; DOLCharacters cha = GetCharacter(charname); if (cha == null) { DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.CharacterNotFound", charname)); return; } Account acc = GetAccount(accountname); if (acc == null) { DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.AccountNotFound", accountname)); return; } int firstAccountSlot = 0; switch ((eRealm)cha.Realm) { case eRealm.Albion: firstAccountSlot = 1 * 8; break; case eRealm.Midgard: firstAccountSlot = 2 * 8; break; case eRealm.Hibernia: firstAccountSlot = 3 * 8; break; default: DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.CharNotFromValidRealm")); return; } int freeslot = 0; for (freeslot = firstAccountSlot; freeslot < firstAccountSlot + 8; freeslot++) { bool found = false; foreach (DOLCharacters ch in acc.Characters) { if (ch.Realm == cha.Realm && ch.AccountSlot == freeslot) { found = true; break; } } if (!found) { break; } } if (freeslot == 0) { DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.AccountHasNoFreeSlots", accountname)); return; } GameClient playingclient = WorldMgr.GetClientByPlayerName(cha.Name, true, false); if (playingclient != null) { playingclient.Out.SendPlayerQuit(true); playingclient.Disconnect(); } cha.AccountName = acc.Name; cha.AccountSlot = freeslot; GameServer.Database.SaveObject(cha); DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.CharacterMovedToAccount", cha.Name, acc.Name)); return; } case "status": { if (args.Length < 4) { DisplaySyntax(client); return; } string accountname = args[2]; Account acc = GetAccount(accountname); if (acc == null) { DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.AccountNotFound", accountname)); return; } int status = -1; try { status = Convert.ToInt32(args[3]); } catch (Exception) { DisplaySyntax(client); return; } if (status >= 0 && status < 256) { acc.Status = status; GameServer.Database.SaveObject(acc); DisplayMessage(client, "Account " + acc.Name + " Status is now set to : " + acc.Status); } else { DisplaySyntax(client); } return; } case "unban": { if (args.Length < 3) { DisplaySyntax(client); return; } string accountname = args[2]; Account acc = GetAccount(accountname); if (acc == null) { DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.AccountNotFound", accountname)); return; } var banacc = GameServer.Database.SelectObjects <DBBannedAccount>("(`Type` = @TypeA OR `Type` = @TypeB) AND `Account` = @Account", new[] { new QueryParameter("@TypeA", "A"), new QueryParameter("@TypeB", "B"), new QueryParameter("@Account", accountname) }); if (banacc.Count == 0) { DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.AccountNotFound", accountname)); return; } try { GameServer.Database.DeleteObject(banacc); } catch (Exception) { DisplaySyntax(client); return; } DisplayMessage(client, "Account " + accountname + " unbanned!"); return; } case "accountname": { if (args.Length < 3) { DisplaySyntax(client); return; } string CharName = args[2]; DOLCharacters Char = GetCharacter(CharName); if (Char == null) { DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.CharacterNotFound", CharName)); return; } string AccName = GetAccountName(Char.Name); DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "AdminCommands.Account.AccNameForChar", Char.Name, AccName)); return; } } }
/// <summary> /// Returns TRUE if the character with the given name is logged in /// </summary> /// <param name="charname">the charactername</param> /// <returns>true if the char is logged in</returns> private bool CharacterIsOnline(string charname) { return(WorldMgr.GetClientByPlayerName(charname, true, false) != null); }
public void OnCommand(GameClient client, string[] args) { if (args.Length < 2) { DisplaySyntax(client); return; } GameClient playerClient = null; if (args[1].StartsWith("#")) { try { int sessionID = Convert.ToInt32(args[1].Substring(1)); playerClient = WorldMgr.GetClientFromID(sessionID); } catch { DisplayMessage(client, "Invalid client ID"); } } else { playerClient = WorldMgr.GetClientByPlayerName(args[1], true, false); } if (playerClient == null) { DisplayMessage(client, "No player found for '" + args[1] + "'"); return; } if (client.Account.PrivLevel < playerClient.Account.PrivLevel) { DisplayMessage(client, "Your privlevel is not high enough to mute this player."); return; } bool mutedAccount = false; if (args.Length > 2 && (args[2].ToLower() == "account" || args[2].ToLower() == "allchars")) { if (playerClient != null) { playerClient.Account.IsMuted = true; playerClient.Player.IsMuted = true; GameServer.Database.SaveObject(playerClient.Account); mutedAccount = true; } } else if (args.Length > 2 && args[2].ToLower() == "remove") { if (playerClient != null) { playerClient.Account.IsMuted = false; playerClient.Player.IsMuted = false; GameServer.Database.SaveObject(playerClient.Account); mutedAccount = true; } } else { if (playerClient != null) { if (playerClient.Account.IsMuted) { DisplayMessage(client, "This player has an allchars mute which must be removed first."); return; } playerClient.Player.IsMuted = !playerClient.Player.IsMuted; } } if (playerClient.Player.IsMuted) { playerClient.Player.Out.SendMessage("You have been muted from public channels by staff member " + client.Player.Name + "!", eChatType.CT_Staff, eChatLoc.CL_SystemWindow); client.Player.Out.SendMessage("You have muted player " + playerClient.Player.Name + " from public channels!", eChatType.CT_Staff, eChatLoc.CL_SystemWindow); if (mutedAccount) { playerClient.Player.Out.SendMessage("This mute has been placed on all characters for this account.", eChatType.CT_Staff, eChatLoc.CL_SystemWindow); client.Player.Out.SendMessage("This action was done to the players account.", eChatType.CT_Staff, eChatLoc.CL_SystemWindow); } log.Warn(client.Player.Name + " muted " + playerClient.Player.Name); } else { playerClient.Player.Out.SendMessage("You have been unmuted from public channels by staff member " + client.Player.Name + "!", eChatType.CT_Staff, eChatLoc.CL_SystemWindow); client.Player.Out.SendMessage("You have unmuted player " + playerClient.Player.Name + " from public channels!", eChatType.CT_Staff, eChatLoc.CL_SystemWindow); if (mutedAccount) { client.Player.Out.SendMessage("This action was done to the players account.", eChatType.CT_Staff, eChatLoc.CL_SystemWindow); } log.Warn(client.Player.Name + " un-muted " + playerClient.Player.Name); } return; }
public void OnCommand(GameClient client, string[] args) { if (IsSpammingCommand(client.Player, "battlegroup")) { return; } if (args.Length < 2) { PrintHelp(client); return; } switch (args[1].ToLower()) { case "help": { PrintHelp(client); } break; case "invite": { if (args.Length < 3) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.UsageInvite"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } GameClient inviteeclient = WorldMgr.GetClientByPlayerName(args[2], false, true); if (inviteeclient == null || !GameServer.ServerRules.IsSameRealm(inviteeclient.Player, client.Player, true)) // allow priv level>1 to invite anyone { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.NoPlayer"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if (client == inviteeclient) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.InviteYourself"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } BattleGroup oldbattlegroup = inviteeclient.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (oldbattlegroup != null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.PlayerInBattlegroup", inviteeclient.Player.Name), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } BattleGroup mybattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup == null) { mybattlegroup = new BattleGroup(); mybattlegroup.AddBattlePlayer(client.Player, true); } else if (((bool)mybattlegroup.Members[client.Player]) == false) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.LeaderInvite"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } inviteeclient.Player.TempProperties.setProperty(JOIN_BATTLEGROUP_PROPERTY, mybattlegroup); inviteeclient.Player.Out.SendCustomDialog(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.JoinBattleGroup", client.Player.Name), new CustomDialogResponse(JoinBattleGroup)); } break; case "groups": { BattleGroup mybattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.InBattleGroup"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } StringBuilder text = new StringBuilder(ServerProperties.Properties.BATTLEGROUP_MAX_MEMBER); //create the string builder ArrayList curBattleGroupGrouped = new ArrayList(); //create the arraylist ArrayList curBattleGroupNotGrouped = new ArrayList(); int i = 1; //This will list each group in the battle group. text.Length = 0; text.Append("The group structure of your Battle Group:"); client.Out.SendMessage(text.ToString(), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); text.Length = 0; foreach (GamePlayer player in mybattlegroup.Members.Keys) { if (player.Group != null && player.Group.MemberCount > 1) { curBattleGroupGrouped.Add(player); } else { curBattleGroupNotGrouped.Add(player); } } ArrayList ListedPeople = new ArrayList(); int firstrun = 0; foreach (GamePlayer grouped in curBattleGroupGrouped) { if (firstrun == 0) { text.Length = 0; text.Append(i); text.Append(") "); i++; //Eg. 1)Batlas Ichijin etc. text.Append(grouped.Group.GroupMemberString(grouped)); client.Out.SendMessage(text.ToString(), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); firstrun = 1; } else if (!ListedPeople.Contains(grouped)) { text.Length = 0; text.Append(i); text.Append(") "); i++; //Eg. 1)Batlas Ichijin etc. text.Append(grouped.Group.GroupMemberString(grouped)); client.Out.SendMessage(text.ToString(), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); } foreach (GamePlayer gpl in grouped.Group.GetPlayersInTheGroup()) { if (mybattlegroup.IsInTheBattleGroup(gpl)) { ListedPeople.Add(gpl); } } } foreach (GamePlayer nongrouped in curBattleGroupNotGrouped) { text.Length = 0; text.Append(i); text.Append(") "); i++; if ((bool)mybattlegroup.Members[nongrouped] == true) { text.Append(" <Leader>"); } text.Append(nongrouped.Name + '\n'); client.Out.SendMessage(text.ToString(), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); } } break; case "groupclass": { BattleGroup mybattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.InBattleGroup"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } StringBuilder text = new StringBuilder(ServerProperties.Properties.BATTLEGROUP_MAX_MEMBER); //create the string builder ArrayList curBattleGroupGrouped = new ArrayList(); //create the arraylist ArrayList curBattleGroupNotGrouped = new ArrayList(); int i = 1; //This will list each group in the battle group. text.Length = 0; text.Append("Players crrently in Battle Group:"); client.Out.SendMessage(text.ToString(), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); text.Length = 0; foreach (GamePlayer player in mybattlegroup.Members.Keys) { if (player.Group != null && player.Group.MemberCount > 1) { curBattleGroupGrouped.Add(player); } else { curBattleGroupNotGrouped.Add(player); } } ArrayList ListedPeople = new ArrayList(); int firstrun = 0; foreach (GamePlayer grouped in curBattleGroupGrouped) { if (firstrun == 0) { text.Length = 0; text.Append(i); text.Append(") "); i++; //Eg. 1)Batlas Ichijin etc. text.Append(grouped.Group.GroupMemberClassString(grouped)); client.Out.SendMessage(text.ToString(), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); firstrun = 1; } else if (!ListedPeople.Contains(grouped)) { text.Length = 0; text.Append(i); text.Append(") "); i++; //Eg. 1)Batlas Ichijin etc. text.Append(grouped.Group.GroupMemberClassString(grouped)); client.Out.SendMessage(text.ToString(), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); } foreach (GamePlayer gpl in grouped.Group.GetPlayersInTheGroup()) { if (mybattlegroup.IsInTheBattleGroup(gpl)) { ListedPeople.Add(gpl); } } } foreach (GamePlayer nongrouped in curBattleGroupNotGrouped) { text.Length = 0; text.Append(i); text.Append(") "); i++; if ((bool)mybattlegroup.Members[nongrouped] == true) { text.Append(" <Leader>"); } text.Append("(" + nongrouped.CharacterClass.Name + ")"); text.Append(nongrouped.Name + '\n'); client.Out.SendMessage(text.ToString(), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); } } break; case "who": { BattleGroup mybattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.InBattleGroup"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } int i = 0; StringBuilder text = new StringBuilder(ServerProperties.Properties.BATTLEGROUP_MAX_MEMBER); text.Length = 0; text.Append("Players currently in BattleGroup:"); client.Out.SendMessage(text.ToString(), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); foreach (GamePlayer player in mybattlegroup.Members.Keys) { i++; text.Length = 0; text.Append(i); text.Append(") "); if ((bool)mybattlegroup.Members[player] == true) { text.Append(" <Leader> "); } text.Append(player.Name); client.Out.SendMessage(text.ToString(), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); //TODO: make function formatstring } } break; case "remove": { BattleGroup mybattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.InBattleGroup"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if (args.Length < 3) { PrintHelp(client); } GameClient inviteeclient = WorldMgr.GetClientByPlayerName(args[2], false, false); if (inviteeclient == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.NoPlayer"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } mybattlegroup.RemoveBattlePlayer(inviteeclient.Player); } break; case "leave": { BattleGroup mybattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.InBattleGroup"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } mybattlegroup.RemoveBattlePlayer(client.Player); } break; case "listen": { BattleGroup mybattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.InBattleGroup"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if ((bool)mybattlegroup.Members[client.Player] == false) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.LeaderCommand"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } mybattlegroup.Listen = !mybattlegroup.Listen; string message = LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.ListenMode") + (mybattlegroup.Listen ? "on." : "off."); foreach (GamePlayer ply in mybattlegroup.Members.Keys) { ply.Out.SendMessage(message, eChatType.CT_Chat, eChatLoc.CL_ChatWindow); } } break; case "promote": { BattleGroup mybattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.InBattleGroup"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if ((bool)mybattlegroup.Members[client.Player] == false) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.LeaderCommand"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if (args.Length < 3) { PrintHelp(client); } string invitename = String.Join(" ", args, 2, args.Length - 2); GameClient inviteeclient = WorldMgr.GetClientByPlayerName(invitename, false, false); if (inviteeclient == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.NoPlayer"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } mybattlegroup.Members[inviteeclient.Player] = true; string message = LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.Moderator", inviteeclient.Player.Name); foreach (GamePlayer ply in mybattlegroup.Members.Keys) { ply.Out.SendMessage(message, eChatType.CT_Chat, eChatLoc.CL_ChatWindow); } } break; case "public": { BattleGroup mybattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.InBattleGroup"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if ((bool)mybattlegroup.Members[client.Player] == false) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.LeaderCommand"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } mybattlegroup.IsPublic = true; string message = LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.Public"); foreach (GamePlayer ply in mybattlegroup.Members.Keys) { ply.Out.SendMessage(message, eChatType.CT_Chat, eChatLoc.CL_ChatWindow); } } break; case "credit": { client.Out.SendMessage("Command is not yet implimented.", eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); } break; case "grantcredit": { client.Out.SendMessage("Command is not yet implimented.", eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); } break; case "private": { BattleGroup mybattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.InBattleGroup"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if ((bool)mybattlegroup.Members[client.Player] == false) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.LeaderCommand"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } mybattlegroup.IsPublic = false; string message = LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.Private"); foreach (GamePlayer ply in mybattlegroup.Members.Keys) { ply.Out.SendMessage(message, eChatType.CT_Chat, eChatLoc.CL_ChatWindow); } } break; case "join": { if (args.Length < 3) { PrintHelp(client); return; } BattleGroup oldbattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (oldbattlegroup != null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.AlreadyInBattlegroup"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } GameClient inviteeclient = WorldMgr.GetClientByPlayerName(args[2], false, false); if (inviteeclient == null || !GameServer.ServerRules.IsSameRealm(client.Player, inviteeclient.Player, true)) // allow priv level>1 to join anywhere { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.NoPlayer"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if (client == inviteeclient) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.OwnBattleGroup"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } BattleGroup mybattlegroup = inviteeclient.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.NotBattleGroupMember"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if ((bool)mybattlegroup.Members[inviteeclient.Player] == false) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.NotBattleGroupLeader"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if (!mybattlegroup.IsPublic) { if (args.Length == 4 && args[3] == mybattlegroup.Password) { mybattlegroup.AddBattlePlayer(client.Player, false); } else { client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.NotPublic"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); } } else { mybattlegroup.AddBattlePlayer(client.Player, false); } } break; case "password": { BattleGroup mybattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.InBattleGroup"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if ((bool)mybattlegroup.Members[client.Player] == false) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.LeaderCommand"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if (args.Length < 3) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.Password", mybattlegroup.Password) + mybattlegroup.Password, eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if (args[2] == "clear") { mybattlegroup.Password = ""; return; } mybattlegroup.Password = args[2]; client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.PasswordChanged", mybattlegroup.Password) + mybattlegroup.Password, eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); } break; case "count": { BattleGroup curbattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.BattlegroupCount", curbattlegroup.Members.Count), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); } break; case "status": { BattleGroup curbattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.BattlegroupStatus", curbattlegroup.Members.Count), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); } break; case "loot": { BattleGroup mybattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.InBattleGroup"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if (mybattlegroup.Listen == true && (((bool)mybattlegroup.Members[client.Player]) == false)) { client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.LeaderCommand"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if (args[2] == "normal" || args[2] == "norm" || args[2] == "n" || args[2] == "N" || args[2] == "Norm" || args[2] == "Normal") { mybattlegroup.SetBGLootType(false); client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.BattleGroupLootNormal"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); } else if (args[2] == "treasurer" || args[2] == "treasure" || args[2] == "t" || args[2] == "T" || args[2] == "Treasurer" || args[2] == "Treasure") { mybattlegroup.SetBGLootType(true); client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.BattleGroupLootTreasurer"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); } } break; case "lootlevel": { BattleGroup mybattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.InBattleGroup"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if (mybattlegroup.Listen == true && (((bool)mybattlegroup.Members[client.Player]) == false)) { client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.LeaderCommand"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if (Convert.ToInt32(args[2]) == 0) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.BattlegroupLootThresholdOff"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); } else { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.BattlegroupLootThresholdOn", mybattlegroup.GetBGLootTypeThreshold()), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); } } break; case "treasurer": { BattleGroup mybattlegroup = client.Player.TempProperties.getProperty <BattleGroup>(BattleGroup.BATTLEGROUP_PROPERTY, null); if (mybattlegroup == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.InBattleGroup"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if ((bool)mybattlegroup.Members[client.Player] == false) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.LeaderCommand"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } if (args.Length < 3) { PrintHelp(client); } string treasname = String.Join(" ", args, 2, args.Length - 2); GameClient treasclient = WorldMgr.GetClientByPlayerName(treasname, false, false); if (treasclient == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.NoPlayer", treasclient.Player.Name), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); return; } mybattlegroup.SetBGTreasurer(treasclient.Player); client.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.BattlegroupTreasurerOn", treasclient.Player.Name), eChatType.CT_BattleGroupLeader, eChatLoc.CL_SystemWindow); treasclient.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.BattlegroupTreasurerIsYou"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); foreach (GamePlayer ply in mybattlegroup.Members.Keys) { ply.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.BattlegroupTreasurerIs", treasclient.Player.Name), eChatType.CT_Chat, eChatLoc.CL_SystemWindow); } if (mybattlegroup.GetBGTreasurer() == null) { foreach (GamePlayer ply in mybattlegroup.Members.Keys) { ply.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Battlegroup.BattlegroupTreasurerOff"), eChatType.CT_BattleGroup, eChatLoc.CL_SystemWindow); } } } break; default: { PrintHelp(client); } break; } }
public void OnCommand(GameClient client, string[] args) { if (client.Player.Group == null || client.Player.Group.MemberCount < 2) { client.Out.SendMessage("You are not part of a group.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (client.Player.Group.Leader != client.Player) { client.Out.SendMessage("You are not the leader of your group.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } GamePlayer target; if (args.Length < 2) // Setting by target { if (client.Player.TargetObject == null || client.Player.TargetObject == client.Player) { client.Out.SendMessage("You have not selected a valid player as your target.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (!(client.Player.TargetObject is GamePlayer)) { client.Out.SendMessage("You have not selected a valid player as your target.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } target = (GamePlayer)client.Player.TargetObject; if (client.Player.Group != target.Group) { client.Out.SendMessage("You have not selected a valid player as your target.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } } else // Setting by name { string targetName = args[1]; GameClient targetClient = WorldMgr.GetClientByPlayerName(targetName, false, true); if (targetClient == null) { target = null; } else { target = targetClient.Player; } if (target == null || client.Player.Group != target.Group) { // Invalid target client.Out.SendMessage("No players in group with that name.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (target == client.Player) { client.Out.SendMessage("You are the group leader already.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } } client.Player.Group.MakeLeader(target); }