Beispiel #1
0
        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);
 }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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;
            }
        }
Beispiel #5
0
        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);
        }