예제 #1
0
        public static void Handle_ItemOnOff(ClientConnection Client, PacketReader reader, byte last)
        {
            Account User    = Client.CurrentAccount;
            int     itemnum = reader.ReadLEInt32();
            bool    On      = reader.ReadBoolean();

            //Console.WriteLine("ITEM: {0},{1}", itemnum, On);
            if (On)
            {
                if (ItemOn(User, itemnum, out int OnOffType, out int Position))
                {
                    Client.SendAsync(new Myroom_ItemOn(User, itemnum, OnOffType, Position, last));
                    AvatarItemInfo offitem = null, onitem = null;
                    if (OnOffType == 2)
                    {
                        offitem = User.AvatarItems.Find(f => f.position == Position && f.use == true);
                    }
                    onitem = User.AvatarItems.Find(f => f.itemdescnum == itemnum);
                    if (User.InGame && User.CurrentRoomId != 0)
                    {
                        NormalRoom room = Rooms.NormalRoomList.Find(rm => rm.ID == User.CurrentRoomId);
                        foreach (var player in room.Players)
                        {
                            player.Connection.SendAsync(new Myroom_ItemOn_GameRoom(player, User.RoomPos, itemnum, OnOffType, Position, offitem, onitem, last));
                        }
                    }
                    if (offitem != null)
                    {
                        offitem.use = false;
                    }
                    onitem.use = true;
                }
            }
            else
            {
                if (ItemOff(User, itemnum, out int OnOffType, out int Position))
                {
                    Client.SendAsync(new Myroom_ItemOff(User, itemnum, OnOffType, Position, last));
                    AvatarItemInfo offitem = null;
                    offitem = User.AvatarItems.Find(f => f.itemdescnum == itemnum);
                    if (User.InGame && User.CurrentRoomId != 0)
                    {
                        NormalRoom room = Rooms.NormalRoomList.Find(rm => rm.ID == User.CurrentRoomId);
                        foreach (var player in room.Players)
                        {
                            player.Connection.SendAsync(new Myroom_ItemOff_GameRoom(player, User.RoomPos, itemnum, OnOffType, Position, offitem, last));
                        }
                    }
                    offitem.use = false;
                }
            }
            //User.AvatarItems.FirstOrDefault(f => f.itemdescnum == itemnum).use = On;
        }
예제 #2
0
 public ExpiredItemInfo(AvatarItemInfo item, byte last)
 {
     ns.Write((byte)0x6B);
     ns.Write(0x9CC1D0); //D0 C1 9C 00
     ns.Write(item.character);
     ns.Write(item.position);
     ns.Write(item.kind);
     ns.Write(item.itemdescnum);
     ns.Write(item.expireTime);
     ns.Write(item.gotDateTime);
     ns.Write(item.count);
     ns.Write(item.exp);
     ns.Write((byte)0);
     ns.Write(item.use);
     ns.Write((byte)0); //unk
     ns.Write(last);
 }
예제 #3
0
        private static void getActiveFuncItem(Account User)
        {
            //HashSet<AvatarItemInfo> AvatarItem = new HashSet<AvatarItemInfo>();
            List <AvatarItemInfo> AvatarItem2 = new List <AvatarItemInfo>();

            using (var con = new MySqlConnection(Conf.Connstr))
            {
                con.Open();
                using (var cmd = new MySqlCommand(string.Empty, con))
                {
                    cmd.Parameters.Clear();
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "usp_getActiveFuncItem";
                    cmd.Parameters.Add("usernum", MySqlDbType.Int32).Value      = User.UserNum;
                    cmd.Parameters.Add("position", MySqlDbType.Int32).Value     = -1;
                    cmd.Parameters.Add("expiredcheck", MySqlDbType.Int32).Value = 0;
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.HasRows)
                        {
                            while (reader.Read())
                            {
                                AvatarItemInfo item = new AvatarItemInfo
                                {
                                    character   = Convert.ToInt16(reader["character"]),
                                    position    = Convert.ToUInt16(reader["position"]),
                                    kind        = Convert.ToInt16(reader["kind"]),
                                    itemdescnum = Convert.ToInt32(reader["itemdescnum"]),
                                    expireTime  = Convert.IsDBNull(reader["expireTime"]) ? 0L : Utility.ConvertToTimestamp(Convert.ToDateTime(reader["expireTime"])),
                                    gotDateTime = Utility.ConvertToTimestamp(Convert.ToDateTime(reader["gotDateTime"])),
                                    count       = Convert.ToInt32(reader["count"]),
                                    exp         = Convert.ToInt32(reader["exp"]),
                                    use         = Convert.ToBoolean(reader["using"])
                                };
                                AvatarItem2.Add(item);
                                //User.AvatarItems.Add(item);
                            }
                        }
                    }
                }
            }
            User.AvatarItems.Clear();
            User.AvatarItems.AddRange(AvatarItem2);
            AvatarItem2.Clear();
        }
예제 #4
0
 private static bool GetAvatarItemInfo(int Usernum, string itemnums, out List <AvatarItemInfo> iteminfo)
 {
     iteminfo = new List <AvatarItemInfo>();
     using (var con = new MySqlConnection(Conf.Connstr))
     {
         con.Open();
         using (var cmd = new MySqlCommand(string.Empty, con))
         {
             cmd.Parameters.Clear();
             cmd.CommandType = CommandType.StoredProcedure;
             cmd.CommandText = "usp_getAvatarItem";
             cmd.Parameters.Add("usernum", MySqlDbType.Int32).Value    = Usernum;
             cmd.Parameters.Add("itemnums", MySqlDbType.VarChar).Value = itemnums;
             using (MySqlDataReader reader = cmd.ExecuteReader())
             {
                 while (reader.Read())
                 {
                     AvatarItemInfo item = new AvatarItemInfo
                     {
                         character   = Convert.ToInt16(reader["character"]),
                         position    = Convert.ToUInt16(reader["position"]),
                         kind        = Convert.ToInt16(reader["kind"]),
                         itemdescnum = Convert.ToInt32(reader["itemdescnum"]),
                         expireTime  = Convert.IsDBNull(reader["expireTime"]) ? 0L : Utility.ConvertToTimestamp(Convert.ToDateTime(reader["expireTime"])),
                         gotDateTime = Utility.ConvertToTimestamp(Convert.ToDateTime(reader["gotDateTime"])),
                         count       = Convert.ToInt32(reader["count"]),
                         exp         = Convert.ToInt32(reader["exp"]),
                         use         = Convert.ToBoolean(reader["using"])
                     };
                     iteminfo.Add(item);
                 }
                 return(true);
             }
         }
     }
 }
예제 #5
0
        public Myroom_ItemOff_GameRoom(Account User, byte pos, int itemnum, int OnOffType, int Position, AvatarItemInfo offitem, byte last) : base(1, User.EncryptKey)
        {
            /*FF 8F 03 00 FA 2D 01 00 02 00 00 00 66 00 00
             * 00 00 F0 11 9E 00 00 00 66 00 C0 00 FA 2D 01
             * 00 20 F0 9D 59 6A 01 00 00 20 00 A2 56 68 01
             * 00 00 01 00 00 00 00 00 00 00 01 01 F0 11 9E
             * 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
             * 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
             * 00 00 00 00 00 00 00 10*/
            ns.Write((byte)0xFF);
            ns.Write((short)0x38F);
            ns.Write(pos); //pos?
            ns.Write(itemnum);
            ns.Write(OnOffType);
            ns.Write(Position);
            ns.Write(false);

            ns.Write(0x9CC1D0); //D0 C1 9C 00
            ns.Write(offitem.character);
            ns.Write(offitem.position);
            ns.Write(offitem.kind);
            ns.Write(offitem.itemdescnum);
            ns.Write(offitem.expireTime);
            ns.Write(offitem.gotDateTime);
            ns.Write(offitem.count);
            ns.Write(offitem.exp);
            ns.Write((byte)0);
            ns.Write(offitem.use);

            ns.Write(0x9CC1D0); //D0 C1 9C 00
            ns.Fill(0x24);

            ns.Write(last);  //end
        }
예제 #6
0
        public Myroom_ItemOn_GameRoom(byte pos, int itemnum, int OnOffType, int Position, AvatarItemInfo offitem, AvatarItemInfo onitem, byte last)
        {
            /*FF 8F 03 00 0C 8F 00 00 02 00 00 00 66 00 00 00
             * 01 F0 11 9E 00 00 00 66 00 C0 00 FA 2D 01 00 20 F0
             * 9D 59 6A 01 00 00 20 00 A2 56 68 01 00 00 01 00
             * 00 00 00 00 00 00 01 01 F0 11 9E 00 00 00 66 00
             * 99 00 0C 8F 00 00 C8 84 B6 6A 68 01 00 00 D0 33
             * BC 00 66 01 00 00 01 00 00 00 00 00 00 00 01 00 80*/
            ns.Write((byte)0xFF);
            ns.Write((short)0x38F);
            ns.Write(pos); //pos?
            ns.Write(itemnum);
            ns.Write(OnOffType);
            ns.Write(Position);
            ns.Write(true);
            if (offitem == null)
            {
                ns.Write(0x9CC1D0); //D0 C1 9C 00
                ns.Fill(0x24);
            }
            else
            {
                ns.Write(0x9CC1D0); //D0 C1 9C 00
                ns.Write(offitem.character);
                ns.Write(offitem.position);
                ns.Write(offitem.kind);
                ns.Write(offitem.itemdescnum);
                ns.Write(offitem.expireTime);
                ns.Write(offitem.gotDateTime);
                ns.Write(offitem.count);
                ns.Write(offitem.exp);
                ns.Write((byte)0);
                ns.Write(offitem.use);
            }
            ns.Write(0x9CC1D0); //D0 C1 9C 00
            ns.Write(onitem.character);
            ns.Write(onitem.position);
            ns.Write(onitem.kind);
            ns.Write(onitem.itemdescnum);
            ns.Write(onitem.expireTime);
            ns.Write(onitem.gotDateTime);
            ns.Write(onitem.count);
            ns.Write(onitem.exp);
            ns.Write((byte)0);
            ns.Write(onitem.use);

            ns.Write(last);  //end
        }