Beispiel #1
0
        static bool TradeGold(LoginClient client, CMSG msgID, BinReader data)
        {
            uint gold        = data.ReadUInt32();
            uint inviteeGUID = client.Character.LastTradeID;

            BinWriter pkg = LoginClient.NewPacket(SMSG.TRADE_STATUS_EXTENDED);

            pkg.Write((byte)0);                                 // 0 for giving, 1 for recieving
            pkg.Write((int)1);                                  // Message Count
            pkg.Write(gold);                                    // Money Amount
            pkg.Write((int)0);                                  // ?
            pkg.Write((int)0);                                  // ?

            client.Send(pkg);

            client.Character.TradeMoney = gold;

            LoginClient invitee = LoginServer.GetLoginClientByCharacterID((uint)inviteeGUID);

            BinWriter pkg2 = LoginClient.NewPacket(SMSG.TRADE_STATUS_EXTENDED);

            pkg2.Write((byte)1);                        // 0 for giving, 1 for recieving
            pkg2.Write((int)1);                         // Message Count
            pkg2.Write(gold);                           // Money Amount
            pkg2.Write((int)0);                         // ?
            pkg2.Write((int)0);                         // ?

            invitee.Send(pkg2);

            invitee.Character.TradeCompleted = false;

            return(true);
        }
Beispiel #2
0
        static bool TradeInvite(LoginClient client, CMSG msgID, BinReader data)
        {
            ulong inviteeGUID = data.ReadUInt64();

            uint        inviterGUID = client.Character.ObjectId;
            string      inviterNAME = client.Character.Name;
            LoginClient invitee     = LoginServer.GetLoginClientByCharacterID((uint)inviteeGUID);

            BinWriter pkga1 = LoginClient.NewPacket(SMSG.TRADE_STATUS);

            pkga1.Write((int)1);
            pkga1.Write((ulong)inviteeGUID);

            client.Send(pkga1);

            BinWriter pkgb1 = LoginClient.NewPacket(SMSG.TRADE_STATUS);

            pkgb1.Write((int)1);
            pkgb1.Write((ulong)inviterGUID);

            invitee.Send(pkgb1);

            BinWriter pkga2 = LoginClient.NewPacket(SMSG.TRADE_STATUS);

            pkga2.Write((int)2);

            client.Send(pkga2);
            invitee.Send(pkga2);

            client.Character.LastTradeID  = invitee.Character.ObjectId;
            invitee.Character.LastTradeID = client.Character.ObjectId;

            return(true);
        }
        static bool Zoneupdate(LoginClient client, CMSG msgID, BinReader data)
        {
            uint newZone = (uint)data.ReadUInt32();

            client.Character.Zone  = newZone;
            client.Character.Dirty = true;
            DataServer.Database.SaveObject(client.Character);
            ScriptPacket WorldZoneUpdate = new ScriptPacket(SCRMSG.ZONEUPDATE);

            WorldZoneUpdate.Write(client.Character.ObjectId);
            WorldZoneUpdate.Write(newZone);
            client.WorldConnection.Send(WorldZoneUpdate);
            if (client.Character.OnFriends != null)
            {
                foreach (DBFriendList Friend in client.Character.OnFriends)
                {
                    LoginClient FriendOnline = LoginServer.GetLoginClientByCharacterID(Friend.Owner_ID);
                    if (FriendOnline != null)
                    {
                        BinWriter flist = LoginClient.NewPacket(SMSG.FRIEND_STATUS);
                        Chat.System(FriendOnline, client.Character.Name + "'s zone updated");
                        flist.Write((char)0x02);
                        flist.Write((ulong)client.Character.ObjectId);
                        flist.Write((int)newZone);
                        flist.Write((int)client.Character.Level);
                        flist.Write((int)client.Character.Class);
                        client.Send(flist);
                    }
                }
            }
            return(true);
        }
Beispiel #4
0
            static bool OnGuildInvite(LoginClient client, CMSG msgID, BinReader data)
            {
                DBGuild guild = client.Character.Guild;

                if (guild == null || client.Character.GuildID == 0)
                {
                    SendResult(client, 2, " ", (int)GUILDRESULT.NOT_IN_GUILD);
                    return(true);
                }

                if ((guild.getRankFlags(client.Character.GuildRank) & (uint)GUILDFLAGS.INVITE) != (uint)GUILDFLAGS.INVITE)
                {
                    SendResult(client, 1, " ", (int)GUILDRESULT.PERMISSIONS);
                    ; return(true);
                }

                string name = data.ReadString();

                DBCharacter character = (DBCharacter)DataServer.Database.FindObjectByKey(typeof(DBCharacter), name.ToLower());

                if (character == null)
                {
                    SendResult(client, 1, name, (int)GUILDRESULT.NOT_FOUND);
                }

                else
                {
                    LoginClient targetClient = LoginServer.GetLoginClientByCharacterID(character.ObjectId);
                    if (targetClient != null)
                    {
//						targetClient.Character.LastGuildID=client.Character.GuildID;
                        if (targetClient.Character.LastGuildInviterID != 0)
                        {
                            SendResult(client, 1, name, (int)GUILDRESULT.ALREADY_INVITED_TO_GUILD_S);
                            return(true);
                        }

                        if (targetClient.Character.GuildID != 0)
                        {
                            SendResult(client, 1, targetClient.Character.Name, (int)GUILDRESULT.ALREADY_IN_GUILD_S);
                            return(true);
                        }

                        targetClient.Character.LastGuildInviterID = client.Character.ObjectId;

                        BinWriter gpkg = LoginClient.NewPacket(SMSG.GUILD_INVITE);
                        gpkg.Write(client.Character.Name);
                        gpkg.Write(guild.Name);
                        targetClient.Send(gpkg);
                        SendResult(client, 1, name, (int)GUILDRESULT.SUCCESS);
                    }
                    else
                    {
                        Chat.System(client, name + " is not currently online");
                    }
                }

                return(true);
            }            //OnGuildInvite
Beispiel #5
0
        static bool OnKick(LoginClient client, string input)
        {
            if (client.Account.AccessLvl < ACCESSLEVEL.GM)
            {
                Chat.System(client, "You do not have access to this command");
                return(true);
            }

            string[] split = input.Split(' ');
//			if(split.Length == 3)
//			{
//				split[2] = split[2].TrimStart(' ');
//			}
            if (split.Length == 1)
            {
                return(false);
            }
//			{
//				split = input.Split(' ');
//			}
            string target = split[1];

            DataObject[] objs = DataServer.Database.SelectObjects(typeof(DBCharacter), "Name = '" + target + "'");
            if (objs.Length == 0)
            {
                Chat.System(client, "No such player.");
                return(true);
            }

            LoginClient targetClient = LoginServer.GetLoginClientByCharacterID(objs[0].ObjectId);

            if (targetClient == null || targetClient.Character == null)
            {
                Chat.System(client, "That player is not online.");
                return(true);
            }
            string tgtCharacter = targetClient.Character.Name;

            targetClient.Close("");

            Chat.System(client, "Kick of " + tgtCharacter + " Successful!");
            Console.WriteLine(tgtCharacter + " was kicked by " + client.Character.Name);         //+"("+split[2]);

//			ScriptPacket pkg = new ScriptPacket(0x01);
//			pkg.Write(client.Character.ObjectId);
//			pkg.Write(creature.ObjectId);
//			pkg.Write(displayID);
//			pkg.Write(faction);
//			pkg.Write(script);
//			pkg.Write(level);
//			pkg.Write(health);
//			pkg.Write(mana);
//			client.WorldConnection.Send(pkg);
            return(true);
        }
Beispiel #6
0
            static bool OnGuildDecline(LoginClient client, CMSG msgID, BinReader data)
            {
                LoginClient inviter = LoginServer.GetLoginClientByCharacterID(client.Character.LastGuildInviterID);

                client.Character.LastGuildInviterID = 0;

                BinWriter pkg = LoginClient.NewPacket(SMSG.GUILD_DECLINE);

                pkg.Write(client.Character.Name);
                inviter.Send(pkg);

//				Chat.GuildSay(0, inviter, client.Character.Name+" has declined your offer to join "+client.Character.GuildName, CHATMESSAGETYPE.GUILD);
                return(true);
            }            //OnGuildDecline
Beispiel #7
0
 public static void GuildMessage(DBGuild guild, string msg)
 {
     foreach (DBGuildMembers member in guild.Members)
     {
         LoginClient targetClient = LoginServer.GetLoginClientByCharacterID(member.MemberID);
         if (targetClient == null || targetClient.Character == null)
         {
             continue;
         }
         else
         {
             Chat.GuildSay(0, targetClient, msg, CHATMESSAGETYPE.GUILD);
         }
     }
 }
Beispiel #8
0
        static bool GroupDecline(LoginClient client, CMSG msgID, BinReader data)
        {
            LoginClient inviter = LoginServer.GetLoginClientByCharacterID(client.Character.LastGroupInviterID);

            client.Character.LastGroupInviterID = 0;
            if (inviter == null)
            {
                return(true);
            }

            BinWriter pkg = LoginClient.NewPacket(SMSG.GROUP_DECLINE);

            pkg.Write(client.Character.Name);
            inviter.Send(pkg);
            return(true);
        }
Beispiel #9
0
        static bool ClearTradeItem(LoginClient client, CMSG msgID, BinReader data)
        {
            uint inviteeGUID = client.Character.LastTradeID;

            uint count = client.Character.TradeItemCount--;

            LoginClient invitee = LoginServer.GetLoginClientByCharacterID((uint)inviteeGUID);

            byte slot = data.ReadByte();

            Chat.System(client, "Clear Trade Item from slot " + slot + " Working");

            invitee.Character.TradeCompleted = false;

            return(true);
        }
Beispiel #10
0
            static bool OnGuildAccept(LoginClient client, CMSG msgID, BinReader data)
            {
                LoginClient inviter = LoginServer.GetLoginClientByCharacterID(client.Character.LastGuildInviterID);

                client.Character.LastGuildInviterID = 0;
                if (inviter == null)
                {
                    return(true);
                }
                DBGuild guild = (DBGuild)DataServer.Database.FindObjectByKey(typeof(DBGuild), inviter.Character.GuildID);

                AddMember(client, guild, guild.MaxRank);
                Chat.GuildSay(0, client, "You have joined " + guild.Name, CHATMESSAGETYPE.GUILD);
                //Chat.System(inviter, client.Character.Name+" joins "+guild.Name);
                GuildMessage(guild, client.Character.Name + " has been accepted to the guild by" + inviter.Character.Name);

                return(true);
            }            //OnGuildAccept
Beispiel #11
0
        static bool AcceptTrade(LoginClient client, CMSG msgID, BinReader data)
        {
            uint flag        = data.ReadUInt32();
            uint inviteeGUID = client.Character.LastTradeID;

            LoginClient invitee = LoginServer.GetLoginClientByCharacterID((uint)inviteeGUID);

            BinWriter pkg = LoginClient.NewPacket(SMSG.TRADE_STATUS);

            if (invitee.Character.TradeCompleted == true)
            {
                ScriptPacket Money = new ScriptPacket(SCRMSG.TRADEMONEY);

                Money.Write(client.Character.ObjectId);
                Money.Write(invitee.Character.ObjectId);
                Money.Write(client.Character.TradeMoney);
                Money.Write(invitee.Character.TradeMoney);

                client.WorldConnection.Send(Money);

                pkg.Write((int)8);

                invitee.Send(pkg);
                client.Send(pkg);

                client.Character.LastTradeID    = 0;
                client.Character.TradeMoney     = 0;
                client.Character.TradeCompleted = false;

                invitee.Character.LastTradeID    = 0;
                invitee.Character.TradeMoney     = 0;
                invitee.Character.TradeCompleted = false;
            }
            else
            {
                pkg.Write((int)4);
                client.Character.TradeCompleted = true;

                invitee.Send(pkg);
            }

            return(true);
        }
Beispiel #12
0
        static bool CancelTrade(LoginClient client, CMSG msgID, BinReader data)
        {
            uint inviteeGUID = client.Character.LastTradeID;

            LoginClient invitee = LoginServer.GetLoginClientByCharacterID((uint)inviteeGUID);

            client.Character.LastTradeID  = 0;
            invitee.Character.LastTradeID = 0;

            BinWriter pkg = LoginClient.NewPacket(SMSG.TRADE_STATUS);

            pkg.Write((int)3);

            invitee.Send(pkg);

            invitee.Character.TradeCompleted = false;

            return(true);
        }
Beispiel #13
0
        public static void SendRoster(LoginClient client, DBGuild tGuild)
        {
            BinWriter pkg = LoginClient.NewPacket(SMSG.GUILD_ROSTER);

            pkg.Write((int)tGuild.Members.Length);
            pkg.Write((string)tGuild.MOTD);                                     //Guild.MOTD);
            pkg.Write((uint)tGuild.MaxRank + 1);                                //# of ranks
            for (uint i = 0; i < tGuild.MaxRank + 1; i++)
            {
                pkg.Write((uint)tGuild.getRankFlags(i));                        //Rank Flags for each rank
            }
            foreach (DBGuildMembers member in tGuild.Members)
            {
                DataServer.Database.FillObjectRelations(member);
                pkg.Write((ulong)member.MemberID);                //((LoginClient)e.Current).Character.Race);
                bool online = false;
                if (LoginServer.GetLoginClientByCharacterID(member.MemberID) != null)
                {
                    online = true;
                }
                pkg.Write((bool)online);                    //Online? 0-no/1-yes
                pkg.Write((string)member.Character.Name);   //Name
                pkg.Write((int)member.Character.GuildRank); //Rank
                pkg.Write((byte)member.Character.Level);    //Level
                pkg.Write((byte)member.Character.Class);    //Class((LoginClient)e.Current).Character.Level);
                pkg.Write((uint)member.Character.Zone);     //Zone
                if (online)
                {
                    pkg.Write((byte)member.Character.GroupLook);                        // Group (0-No/1-Yes) Only if online
                }
                else
                {
                    pkg.Write((uint)member.Character.GuildTimeStamp);                           // GuildTimeStamp
                }
                pkg.Write((string)(member.Note == null?" ":member.Note));                       //Player Note
                pkg.Write((string)(member.Note == null?" ":member.OfficerNote));                //Officer's Note
            }
            client.Send(pkg);
            return;
        } //SendRoster
Beispiel #14
0
        static bool GroupInvite(LoginClient client, CMSG msgID, BinReader data)
        {
            string inviteeName = data.ReadString();
            string inviter     = client.Character.Name;

            if (client.Character.Name == inviteeName)
            {
                Chat.System(client, "You cannot invite yourself to a group");
                return(true);
            }

            DBCharacter invitee = null;

            invitee = (DBCharacter)DataServer.Database.FindObjectByKey(typeof(DBCharacter), inviteeName);
            if (invitee == null)
            {
                Chat.System(client, "Player not found");
                return(true);
            }
            LoginClient invited = LoginServer.GetLoginClientByCharacterID(invitee.ObjectId);

            if (invited == null)
            {
                Chat.System(client, "Player is not online");
                return(true);
            }
            if (invited.Character.LastGroupInviterID != 0)
            {
                Chat.System("That player has already been invited to a group");
                return(true);
            }
            invited.Character.LastGroupInviterID = client.Character.ObjectId;
            BinWriter pkg = LoginClient.NewPacket(SMSG.GROUP_INVITE);

            pkg.Write(inviter);

            invited.Send(pkg);
            return(true);
        }
Beispiel #15
0
        static bool TradeItem(LoginClient client, CMSG msgID, BinReader data)
        {
            byte tradeslot  = data.ReadByte();
            byte sourcebag  = data.ReadByte();
            byte sourceslot = data.ReadByte();

            client.Character.TradeItemCount++;
            uint itemcount = client.Character.TradeItemCount;

            uint inviteeGUID = client.Character.LastTradeID;

            LoginClient invitee = LoginServer.GetLoginClientByCharacterID((uint)inviteeGUID);

            BinWriter pkg = LoginClient.NewPacket(SMSG.TRADE_STATUS_EXTENDED);

            pkg.Write((byte)1);                                         // 0 for giving, 1 for recieving
            pkg.Write((int)1);                                          // Message Count
            pkg.Write(client.Character.TradeMoney);                     // Money Amount
            pkg.Write((int)0);                                          // ?
            pkg.Write((int)0);                                          // ?

            pkg.Write(tradeslot);                                       // Trade Slot
            pkg.Write((int)1);                                          // Item Template ID
            pkg.Write((int)1542);                                       // Item Display ID
            pkg.Write((int)0);                                          // Item Count
            pkg.Write((int)0);                                          // ?
            pkg.Write((int)0);                                          // ?
            pkg.Write((int)0);                                          // ?
            pkg.Write((int)0);                                          // ?
            pkg.Write((int)0);                                          // ?
            pkg.Write((int)0);                                          // ?
            pkg.Write((int)0);                                          // ?
            pkg.Write((int)0);                                          // ?
            pkg.Write((int)0);                                          // ?

            invitee.Send(pkg);

            return(true);
        }
        static bool ListFriend(LoginClient client, CMSG msgID, BinReader data)
        {
            BinWriter flist = LoginClient.NewPacket(SMSG.FRIEND_LIST);

            if (client.Character.Friends == null)
            {
                flist.Write((byte)0);
                client.Send(flist);
            }
            else
            {
                byte tmpByte = (byte)client.Character.Friends.Length;
                flist.Write((char)tmpByte);
                LoginClient FriendOnline = null;
                foreach (DBFriendList Friend in client.Character.Friends)
                {
                    FriendOnline = LoginServer.GetLoginClientByCharacterID(Friend.Friend_ID);
                    if (FriendOnline == null)
                    {
                        flist.Write((ulong)Friend.Friend_ID);
                        flist.Write((char)0x00);
                    }
                    else
                    {
                        flist.Write((ulong)Friend.Friend_ID);
                        flist.Write((char)0x02);
                        flist.Write((int)FriendOnline.Character.Zone);
                        flist.Write((int)FriendOnline.Character.Level);
                        flist.Write((int)FriendOnline.Character.Class);
                    }
                    FriendOnline = null;
                }
                client.Send(flist);
            }
            return(true);
        }
Beispiel #17
0
        static bool OnOp(LoginClient client, string input)
        {
            if (client.Account.AccessLvl < ACCESSLEVEL.ADMIN)
            {
                Chat.System(client, "You do not have access to this command");
                return(true);
            }
//			return true; //temp til command works

            string[] split = input.Split(' ');
            if (split.Length < 2)
            {
                return(false);
            }
            string target = split[1];

            DataObject[] objs = DataServer.Database.SelectObjects(typeof(DBCharacter), "Name = '" + target + "'");
            if (objs.Length == 0)
            {
                Chat.System(client, "No such player.");
                return(true);
            }

            LoginClient targetClient = LoginServer.GetLoginClientByCharacterID(objs[0].ObjectId);

            if (targetClient == null || targetClient.Character == null)
            {
                Chat.System(client, "That player is not online.");
                return(true);
            }

            ACCESSLEVEL NewAccessLevel;

            try
            {
                NewAccessLevel = (ACCESSLEVEL)Enum.Parse(typeof(ACCESSLEVEL), split[2].ToUpper());
            }
            catch (System.ArgumentException)
            {
                Chat.System(client, "Invalid Access Level");
                Chat.System(client, "Current Access Levels are: ");
                string Levels = "";
                foreach (string level in Enum.GetNames(typeof(ACCESSLEVEL)))
                {
                    Levels += level + " ";
                }
                Chat.System(client, Levels);
                return(true);
            }

            targetClient.Account.AccessLvl = NewAccessLevel;

            if (NewAccessLevel != ACCESSLEVEL.TEMPGM)
            {
                targetClient.Account.Dirty = true;
                DataServer.Database.SaveObject(targetClient.Account);
            }

            ScriptPacket UpdatePlayer = new ScriptPacket(SCRMSG.ACCESSUPDATE);

            UpdatePlayer.Write(targetClient.Character.ObjectId);
            UpdatePlayer.Write((byte)NewAccessLevel);
            client.WorldConnection.Send(UpdatePlayer);

            Chat.System(client, "Update of " + targetClient.Character.Name + " to " + NewAccessLevel.ToString() + " Successful!");
            Console.WriteLine(targetClient.Character.Name + " was upgraded to " + NewAccessLevel.ToString() + " by " + client.Character.Name);
            return(true);
        }
Beispiel #18
0
        }         //GuildPackets

        public static bool RemoveMember(DBGuildMembers tMember, LoginClient client)
        {
            DBCharacter tChar;
            LoginClient tClient  = null;
            DBGuild     oldGuild = client.Character.Guild;

            if (tMember == null)
            {
                Chat.System(client, "tMember was null"); return(false);
            }
            if (tMember.MemberID != client.Character.ObjectId)
            {
                tClient = LoginServer.GetLoginClientByCharacterID(tMember.MemberID);
            }
            else
            {
                tClient = client;
            }

            if (tClient != null)
            {
                tChar = tClient.Character;
                if (client.Character.ObjectId == tMember.MemberID)
                {
                    Chat.System(tClient, "You have left " + oldGuild.Name);
                    GuildMessage(oldGuild, client.Character.Name + " has left the guild");
                }
                else
                {
                    Chat.System(tClient, "You have been removed from " + oldGuild.Name + " by " + client.Character.Name);
                    GuildMessage(oldGuild, tClient.Character.Name + " has removed from the guild by " + client.Character.Name);
                }
                //SendToWorld(client, tChar);
                ScriptPacket scrpkg = new ScriptPacket(SCRMSG.GUILDUPDATE);
                scrpkg.Write(tClient.Character.ObjectId);
                scrpkg.Write(0);
                scrpkg.Write(0);
                client.WorldConnection.Send(scrpkg);
            }
            else
            {
                tChar = (DBCharacter)DataServer.Database.FindObjectByKey(typeof(DBCharacter), tMember.MemberID);
                if (tChar == null)
                {
                    Console.WriteLine("Character not found when removing member from guild");
                    return(false);
                }
            }

            tChar.GuildID   = 0;
            tChar.GuildRank = 0;
            tChar.GuildName = " ";
            tChar.Guild     = null;
            DataServer.Database.SaveObject(tChar);

            if (tMember == null)
            {
                return(false);
            }

            DataServer.Database.DeleteObject(tMember);
            DataServer.Database.FillObjectRelations(oldGuild);

            return(true);
        }         //RemoveMember
        static bool AddFriend(LoginClient client, CMSG msgID, BinReader data)
        {
            BinWriter   FriendStatus = LoginClient.NewPacket(SMSG.FRIEND_STATUS);
            string      newfriend    = data.ReadString();
            string      name         = newfriend.ToLower();
            DBCharacter character    = null;

            try
            {
                character = (DBCharacter)DataServer.Database.FindObjectByKey(typeof(DBCharacter), name);
            }
            catch (WoWDaemon.Database.DatabaseException)
            {
                FriendStatus.Write((char)FRIEND.DB_ERROR);
                client.Send(FriendStatus);
                return(true);
            }
            if (character == null)
            {
                FriendStatus.Write((char)FRIEND.NOT_FOUND);
                client.Send(FriendStatus);
                return(true);
            }
            else
            {
                if (client.Character.Friends != null)
                {
                    foreach (DBFriendList Friend in client.Character.Friends)
                    {
                        if (Friend.Friend_ID == character.ObjectId)
                        {
                            FriendStatus.Write((char)0x08);
                            client.Send(FriendStatus);
                            return(true);
                        }
                    }
                }
                DBFriendList newentry = new DBFriendList();
                newentry.Owner_ID  = client.Character.ObjectId;
                newentry.Friend_ID = character.ObjectId;
                DataServer.Database.AddNewObject(newentry);
                DataServer.Database.FillObjectRelations(client.Character);
                DataServer.Database.FillObjectRelations(character);

                LoginClient FriendOnline = LoginServer.GetLoginClientByCharacterID(character.ObjectId);
                if (FriendOnline == null)
                {
                    FriendStatus.Write((char)FRIEND.ADDED_OFFLINE);
                    FriendStatus.Write((ulong)character.ObjectId);
                    FriendStatus.Write((int)character.Zone);
                    FriendStatus.Write((int)character.Level);
                    FriendStatus.Write((int)character.Class);
                }
                else
                {
                    DataServer.Database.FillObjectRelations(FriendOnline.Character);
                    FriendStatus.Write((char)FRIEND.ADDED_ONLINE);
                    FriendStatus.Write((ulong)FriendOnline.Character.ObjectId);
                    FriendStatus.Write((int)FriendOnline.Character.Zone);
                    FriendStatus.Write((int)FriendOnline.Character.Level);
                    FriendStatus.Write((int)FriendOnline.Character.Class);
                }
                client.Send(FriendStatus);
                return(true);
            }
        }
Beispiel #20
0
        static bool HandleCharDelete(LoginClient client, CMSG msgID, BinReader data)
        {
            uint id = data.ReadUInt32();

            if (client.Account.Characters == null)
            {
                client.Close(client.Account.Name + " tried to delete a character when there was none on the account.");
                return(true);
            }
            foreach (DBCharacter c in client.Account.Characters)
            {
                if (id == c.ObjectId)
                {
                    if (c.OnFriends != null)
                    {
                        foreach (DBFriendList Friend in c.OnFriends)
                        {
                            LoginClient FriendOnline = LoginServer.GetLoginClientByCharacterID(Friend.Owner_ID);
                            if (FriendOnline != null)
                            {
                                BinWriter flist = LoginClient.NewPacket(SMSG.FRIEND_STATUS);
                                Chat.System(FriendOnline, client.Character.Name + " is Online");
                                flist.Write((char)0x05);
                                flist.Write((ulong)c.ObjectId);
                                FriendOnline.Send(flist);
                                try
                                {
                                    DataServer.Database.DeleteObject(Friend);
                                }
                                catch (Exception e)
                                {
                                    Console.WriteLine("Deleting Friend failed! " + e.Message);
                                }
                                FriendOnline.Character.Friends = null;
                                DataServer.Database.FillObjectRelations(FriendOnline.Character);
                            }
                            else
                            {
                                try
                                {
                                    DataServer.Database.DeleteObject(Friend);
                                }
                                catch (Exception)
                                {
                                    Console.WriteLine("Deleting Friend failed!");
                                }
                            }

                            FriendOnline = null;
                        }
                    }
                    try
                    {
                        DataServer.Database.DeleteObject(c);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Deleting character " + c.ObjectId + " failed! " + e.Message);
                    }
                    DBGuildMembers cMember = (DBGuildMembers)DataServer.Database.FindObjectByKey(typeof(DBGuild), c.ObjectId);
                    if (cMember != null)
                    {
                        DBGuild guild = (DBGuild)DataServer.Database.FindObjectByKey(typeof(DBGuild), c.GuildID);
                        DataServer.Database.DeleteObject(cMember);
                        if (guild != null)
                        {
                            DataServer.Database.FillObjectRelations(guild);
                        }
                    }
                    client.Account.Characters = null;
                    DataServer.Database.FillObjectRelations(client.Account);
                    BinWriter w = LoginClient.NewPacket(SMSG.CHAR_DELETE);
                    w.Write((byte)0x36);
                    client.Send(w);
                    return(true);
                }
            }
            client.Close(client.Account.Name + " tried to delete a character that didn't belong to him.");
            return(true);
        }
Beispiel #21
0
        static bool OnBan(LoginClient client, string input)
        {
            if (client.Account.AccessLvl < ACCESSLEVEL.ADMIN)
            {
                Chat.System(client, "You do not have access to this command");
                return(true);
            }


            string[] split     = input.Split(' ');
            bool     byAccount = false;

            switch (split.Length)
            {
            case 1:
                return(false);

            case 3:
                if (split[2].ToLower() == "account")
                {
                    byAccount = true;
                }
                break;
            }
            string      target        = split[1];
            string      tgtIP         = split[1];
            LoginClient targetClient  = null;
            DBAccount   targetAccount = null;
            DBBanned    targetIP;
            bool        foundSomething = false;

            DBCharacter targetChar = (DBCharacter)DataServer.Database.FindObjectByKey(typeof(DBCharacter), target);

            if ((!byAccount) && (targetChar != null))
            {              //Found a character
                targetClient = LoginServer.GetLoginClientByCharacterID(targetChar.ObjectId);
                if (targetClient != null)
                {
                    targetAccount = targetClient.Account;
                    tgtIP         = targetClient.RemoteEndPoint.ToString().Split(':')[0];
                }
                else
                {
                    DataObject[] objt = DataServer.Database.SelectObjects(typeof(DBAccount), "Account_ID = '" + targetChar.AccountID + "'");
                    if (objt.Length != 0)
                    {
                        targetAccount = (DBAccount)objt[0];
                    }
                    foundSomething = true;
                }
            }
            else
            {
                targetAccount = (DBAccount)DataServer.Database.FindObjectByKey(typeof(DBAccount), target);
            }

            if (targetAccount != null)
            {
                if (targetAccount.AccessLvl == ACCESSLEVEL.BANNED)
                {
                    Chat.System(client, " Account:" + targetAccount.Name + " is already banned");
                }
                else if (client.Account.AccessLvl < targetAccount.AccessLvl)
                {
                    Chat.System(client, "You cant ban someone with higher access than you fool!");
                    if (targetClient != null)
                    {
                        Chat.System(targetClient, client.Character.Name + " just tried to ban you!");
                    }
                    Console.WriteLine(client.Character.Name + " attempted to Ban " + targetClient.Character.Name);
                    return(true);
                }
                else
                {
                    targetAccount.AccessLvl = ACCESSLEVEL.BANNED;
                    targetAccount.Dirty     = true;
                    DataServer.Database.SaveObject(targetAccount);
                    Chat.System(client, "Banning Account:" + targetAccount.Name);
                    foundSomething = true;
                }
                if (targetClient == null)
                {
                    tgtIP = targetAccount.LastIP;
                }
                else
                {
                    targetClient.Close("");
                }
            }

//			Chat.System(client,"TgtIP: >"+tgtIP+"<");
            targetIP = (DBBanned)DataServer.Database.FindObjectByKey(typeof(DBBanned), tgtIP);
            if (targetIP != null)
            {
                Chat.System(client, "IP:" + tgtIP + " is already banned");
            }
            else
            {
                targetIP = new DBBanned();
                try
                {
                    IPAddress tempIP = IPAddress.Parse(tgtIP);
                }
                catch (Exception)
                {
                }
                finally
                {
                    targetIP.BanAddress = tgtIP;
                    DateTime tmpDate = DateTime.Now;
                    targetIP.BannedDate = tmpDate;
                    targetIP.BannedBy   = client.Account.Name;
                    DataServer.Database.AddNewObject(targetIP);
                    Chat.System(client, "Banning IP:" + tgtIP);
                    Console.WriteLine("IP:" + tgtIP + " was banned by " + client.Account.Name);
                    foundSomething = true;
                }
            }
            if (!foundSomething)
            {
                Chat.System(client, "Could not find anything to ban");
                return(false);
            }
            Chat.System(client, "Done");

            return(true);
        }