コード例 #1
0
ファイル: ItemManager.cs プロジェクト: wyuurla/006772
    // ================================================================ //
    // 통신에 관련 함수.


    // 아이템 상태 변경 통지 함수.
    private void SendItemStateChanged(string item_id, ItemController.State state, string owner_id)
    {
        if (m_network == null)
        {
            return;
        }

        Debug.Log("SendItemStateChanged.");

        // 아이템 획득 문의.
        ItemData data = new ItemData();

        data.itemId  = item_id;
        data.ownerId = owner_id;
        data.state   = (int)state;

        ItemPacket packet = new ItemPacket(data);

        int serverNode = m_network.GetServerNode();

        Debug.Log("ServerNode:" + serverNode);
        m_network.SendReliable <ItemData>(serverNode, packet);

        string log = "[CLIENT] SendItemStateChanged " +
                     "itemId:" + item_id +
                     " state:" + state.ToString() +
                     " ownerId:" + owner_id;

        Debug.Log(log);
        dbwin.console().print(log);
    }
コード例 #2
0
ファイル: Use.cs プロジェクト: kenlacoste843/ProjectXV3
        /// <summary>
        /// Handling the Use action from the ItemPacket.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <param name="item">The item packet.</param>
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            uint uid = packet.UID;

            if (client.Inventory.ContainsByUID(uid))
            {
                Data.ItemInfo useitem = client.Inventory[uid];
                if (useitem.IsMisc())
                {
                    if (!Core.Kernel.ItemScriptEngine.Invoke(useitem.ItemID, new object[] { client, useitem }))
                    {
                        using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, string.Format(Core.MessageConst.INVALD_ITEM_USE, useitem.Name, useitem.ItemID)))
                            client.Send(fmsg);
                    }
                }
                else
                {
                    if (!client.Alive)
                    {
                        return;
                    }

                    Enums.ItemLocation loc = (Enums.ItemLocation)packet.Data1;
                    client.Equipments.Equip(useitem, loc, true);
                }
            }
            //	else (Reason this is commented out is because it disconnected the client if switching equips too fast lmao.
            //		client.NetworkClient.Disconnect("Using invalid item.");
        }
コード例 #3
0
ファイル: Sell.cs プロジェクト: kenlacoste843/ProjectXV3
        /// <summary>
        /// Handling the Sell action from the ItemPacket.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <param name="item">The item packet.</param>
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth != null)
                return;
            if (!client.Alive)
                return;

            Data.Shop shop;
            if (Core.Kernel.Shops.TryGetValue(packet.UID, out shop))
            {
                if (Core.Screen.GetDistance(shop.AssociatedNPC.X, shop.AssociatedNPC.Y, client.X, client.Y) >= Core.NumericConst.MaxNPCDistance)
                {
                    using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.TOO_FAR_NPC))
                        client.Send(fmsg);
                    return;
                }
                Data.ItemInfo sellitem = client.Inventory.GetItemByUID(packet.Data1);
                if (!sellitem.IsValidOffItem())
                {
                    using (var fmsg = Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.NO_PERMISSION_ITEM))
                    {
                        client.Send(fmsg);
                    }
                    return;
                }

                uint giveback = (uint)(sellitem.Price / 3);
                if (client.Inventory.RemoveItemByUID(packet.Data1) != null)
                {
                    client.Money += giveback;
                }
            }
        }
コード例 #4
0
 public static void Handle(Entities.GameClient client, ItemPacket packet)
 {
     if (client.Booth != null)
         return;
     packet.Data1 = client.WarehouseMoney;
     client.Send(packet);
 }
コード例 #5
0
 public static void WriteItemPacket(this PacketWriter writer, ItemPacket item)
 {
     writer.WriteItemID(item.ItemID);
     writer.WriteByte(item.Slot);
     writer.WriteByte(item.ItemsInSlot);
     writer.WriteByte(item.SpellCharges);
 }
コード例 #6
0
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            uint uid = packet.UID;

            Data.Booth Booth = Data.Booth.FindBoothFromNPC(uid);
            if (Booth != null)
            {
                if (!Booth.ShopOwner.IsInMap(client))
                {
                    return;
                }

                if (!Core.Screen.ValidDistance(client.X, client.Y, Booth.ShopOwner.X, Booth.ShopOwner.Y))
                {
                    return;
                }

                foreach (Data.BoothItem boothItem in Booth.BoothItems.Values)
                {
                    Data.ItemInfo item       = boothItem.GetInfo(Booth.ShopOwner);
                    var           viewpacket = item.CreateViewPacket(uid, 1);
                    if (boothItem.IsCP)
                    {
                        viewpacket.ViewType = 3;
                    }
                    viewpacket.Price = boothItem.Price;
                    client.Send(viewpacket);
                }
            }
        }
コード例 #7
0
ファイル: GameServer.cs プロジェクト: wyuurla/006772
    public void OnReceiveItemPacket(int node, PacketId id, byte[] data)
    {
        ItemPacket packet = new ItemPacket(data);
        ItemData   item   = packet.GetPacket();

        string log = "[SERVER] ReceiveItemData " +
                     "itemId:" + item.itemId +
                     " state:" + item.state.ToString() +
                     " ownerId:" + item.ownerId;

        Debug.Log(log);
        dbwin.console().print(log);

        PickupState state = (PickupState)item.state;

        switch (state)
        {
        case PickupState.PickingUp:
            MediatePickupItem(item.itemId, item.ownerId);
            break;

        case PickupState.Dropping:
            MediateDropItem(item.itemId, item.ownerId);
            break;

        default:
            break;
        }
    }
コード例 #8
0
ファイル: Use.cs プロジェクト: kenlacoste843/ProjectXV3
        /// <summary>
        /// Handling the Use action from the ItemPacket.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <param name="item">The item packet.</param>
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            uint uid = packet.UID;
            if (client.Inventory.ContainsByUID(uid))
            {
                Data.ItemInfo useitem = client.Inventory[uid];
                if (useitem.IsMisc())
                {
                    if (!Core.Kernel.ItemScriptEngine.Invoke(useitem.ItemID, new object[] { client, useitem }))
                    {
                        using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, string.Format(Core.MessageConst.INVALD_ITEM_USE, useitem.Name, useitem.ItemID)))
                            client.Send(fmsg);
                    }
                }
                else
                {
                    if (!client.Alive)
                        return;

                    Enums.ItemLocation loc = (Enums.ItemLocation)packet.Data1;
                    client.Equipments.Equip(useitem, loc, true);
                }
            }
            //	else (Reason this is commented out is because it disconnected the client if switching equips too fast lmao.
            //		client.NetworkClient.Disconnect("Using invalid item.");
        }
コード例 #9
0
        private static void HandleCollect(GameSession session, PacketReader packet)
        {
            int id = packet.ReadInt();

            packet.ReadInt();

            // Get items and add to inventory
            List <Item> items = session.Player.Mailbox.Collect(id);

            if (items == null)
            {
                return;
            }

            foreach (Item item in items)
            {
                session.Player.Inventory.Remove(item.Uid, out Item removed);
                InventoryController.Add(session, item, true);

                // Item packet, not sure if this is only used for mail, it also doesn't seem to do anything
                session.Send(ItemPacket.ItemData(item));
            }

            session.Send(MailPacket.CollectedAmount(id, DateTimeOffset.UtcNow.ToUnixTimeSeconds()));
            session.Send(MailPacket.CollectResponse(id, DateTimeOffset.UtcNow.ToUnixTimeSeconds()));
        }
コード例 #10
0
    void GetItem(string b)
    {
        ItemPacket itemPacket = JsonUtility.FromJson <ItemPacket>(b);
        int        target     = items.FindIndex((i) => i.item_name == itemPacket.item_name);

        //target.count++;
        GameObject.Find("Inventory").GetComponent <Inventory>().UpdatePlusInventory(target);
    }
コード例 #11
0
ファイル: BoothBuy.cs プロジェクト: kenlacoste843/ProjectXV3
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            uint uid = packet.UID;
            Data.Booth Booth = Data.Booth.FindBooth(uid);
            if (Booth != null)
            {
                if (!Booth.ShopOwner.IsInMap(client))
                    return;

                if (!Core.Screen.ValidDistance(client.X, client.Y, Booth.ShopOwner.X, Booth.ShopOwner.Y))
                    return;
                Data.BoothItem boothItem;
                if (Booth.BoothItems.TryGetValue(uid, out boothItem))
                {
                    if (boothItem.IsCP && client.CPs < boothItem.Price)
                    {
                        using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.LOW_CPS))
                            client.Send(msg);
                        return;
                    }
                    else if (client.Money < boothItem.Price)
                    {
                        using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.LOW_MONEY2))
                            client.Send(msg);
                        return;
                    }
                    if (Booth.BoothItems.TryRemove(uid, out boothItem))
                    {
                        if (boothItem.IsCP)
                        {
                            client.CPs -= boothItem.Price;
                            Booth.ShopOwner.CPs += boothItem.Price;
                        }
                        else
                        {
                            client.Money -= boothItem.Price;
                            Booth.ShopOwner.Money += boothItem.Price;
                        }

                        client.Send(packet);

                        packet.Action = Enums.ItemAction.BoothDelete;
                        Booth.ShopOwner.Send(packet);

                        Data.ItemInfo item = Booth.ShopOwner.Inventory.RemoveItemByUID(uid);
                        client.Inventory.AddItem(item);

                        using (var msg = Packets.Message.MessageCore.CreateSystem(
                            Booth.ShopOwner.Name,
                            string.Format(Core.MessageConst.BOOTH_BUY, client.Name, item.Name)))
                            Booth.ShopOwner.Send(msg);

                        Database.CharacterDatabase.SaveInventory(client, item, client.Inventory.GetPositionFromItemUID(uid));
                    }
                }
            }
        }
コード例 #12
0
ファイル: Unequip.cs プロジェクト: kenlacoste843/ProjectXV3
        /// <summary>
        /// Handling the Unequip action from the ItemPacket.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <param name="item">The item packet.</param>
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth != null)
                return;
            if (!client.Alive)
                return;

            client.Equipments.Unequip((Enums.ItemLocation)packet.Data1);
        }
コード例 #13
0
ファイル: SaveMoney.cs プロジェクト: kenlacoste843/ProjectXV3
 public static void Handle(Entities.GameClient client, ItemPacket packet)
 {
     if (client.Booth != null)
         return;
     if (client.Money < packet.Data1)
         return;
     client.Money -= packet.Data1;
     client.WarehouseMoney += packet.Data1;
 }
コード例 #14
0
ファイル: BoothBuy.cs プロジェクト: kenlacoste843/ProjectXV3
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            uint uid = packet.UID;
            Data.Booth Booth = Data.Booth.FindBooth(uid);
            if (Booth != null)
            {
                if (!Booth.ShopOwner.IsInMap(client))
                    return;

                if (!Core.Screen.ValidDistance(client.X, client.Y, Booth.ShopOwner.X, Booth.ShopOwner.Y))
                    return;
                Data.BoothItem boothItem;
                if (Booth.BoothItems.TryGetValue(uid, out boothItem))
                {
                    if (boothItem.IsCP && client.CPs < boothItem.Price)
                    {
                        using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.LOW_CPS))
                            client.Send(msg);
                        return;
                    }
                    else if (client.Money < boothItem.Price)
                    {
                        using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.LOW_MONEY2))
                            client.Send(msg);
                        return;
                    }
                    if (Booth.BoothItems.TryRemove(uid, out boothItem))
                    {
                        if (boothItem.IsCP)
                        {
                            client.CPs -= boothItem.Price;
                            Booth.ShopOwner.CPs += boothItem.Price;
                        }
                        else
                        {
                            client.Money -= boothItem.Price;
                            Booth.ShopOwner.Money += boothItem.Price;
                        }

                        client.Send(packet);

                        packet.Action = Enums.ItemAction.BoothDelete;
                        Booth.ShopOwner.Send(packet);

                        Data.ItemInfo item = Booth.ShopOwner.Inventory.RemoveItemByUID(uid);
                        client.Inventory.AddItem(item);

                        using (var msg = Packets.Message.MessageCore.CreateSystem(
                            Booth.ShopOwner.Name,
                            string.Format(Core.MessageConst.BOOTH_BUY, client.Name, item.Name)))
                            Booth.ShopOwner.Send(msg);

                        Database.CharacterDatabase.SaveInventory(client, item, client.Inventory.GetPositionFromItemUID(uid));
                    }
                }
            }
        }
コード例 #15
0
 public static void Handle(Entities.GameClient client, ItemPacket packet)
 {
     if (client.Booth != null)
     {
         return;
     }
     packet.Data1 = client.WarehouseMoney;
     client.Send(packet);
 }
コード例 #16
0
        public static ItemPacket ReadItemPacket(this PacketReader reader)
        {
            var item = new ItemPacket();

            item.ItemID       = reader.ReadItemID();
            item.Slot         = reader.ReadByte();
            item.ItemsInSlot  = reader.ReadByte();
            item.SpellCharges = reader.ReadByte();
            return(item);
        }
コード例 #17
0
    void UseItem(string b)
    {
        ItemPacket itemPacket = JsonUtility.FromJson <ItemPacket>(b);
        int        target     = items.FindIndex((i) => i.item_name == itemPacket.item_name);

        GameObject.Find("Inventory").GetComponent <Inventory>().UpdateMinusInventory(target);
        Slider slider = GameObject.Find("HPBar").GetComponent <Slider>();

        slider.value = itemPacket.hp / 100;
    }
コード例 #18
0
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            uint uid = packet.UID;
            if (client.Inventory.ContainsByUID(uid))
            {
                Data.ItemInfo useitem = client.Inventory[uid];
                if (!useitem.IsMountArmor())
                    return;

                client.Equipments.Equip(useitem, Enums.ItemLocation.SteedArmor, true);
            }
        }
コード例 #19
0
    //서버에서 받았을 시
    public void OnReceiveDestroyItem(int node, byte[] data)
    {
        ItemPacket packet = new ItemPacket(data);
        ItemData   item   = packet.GetPacket();

        string name = item.itemId;

        if (items.ContainsKey(name))
        {
            DestroyItem(name);
        }
    }
コード例 #20
0
ファイル: Drop.cs プロジェクト: arcadeindy/ProjectXV3
        /// <summary>
        /// Handling the Drop action from the ItemPacket.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <param name="item">The item packet.</param>
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth != null)
            {
                return;
            }
            if (!client.Alive)
            {
                return;
            }
            if (client.Map.MapType == Enums.MapType.Shared)
            {
                return;
            }

            if (client.Inventory.ContainsByUID(packet.UID))
            {
                Maps.MapPoint Location = client.Map.CreateAvailableLocation <Data.GroundItem>(client.X, client.Y, 3);

                if (Location != null)
                {
                    Data.ItemInfo dropitem = client.Inventory.GetItemByUID(packet.UID);

                    if (dropitem != null)
                    {
                        if (!dropitem.IsValidOffItem())
                        {
                            using (var fmsg = Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.NO_PERMISSION_ITEM))
                            {
                                client.Send(fmsg);
                            }
                            return;
                        }
                        client.Inventory.RemoveItemByUID(packet.UID);

                        Data.GroundItem ground = new Data.GroundItem(dropitem);
                        ground.PlayerDrop = true;
                        ground.DropType   = Enums.DropItemType.Item;
                        ground.X          = Location.X;
                        ground.Y          = Location.Y;
                        Location.Map.EnterMap(ground);
                        ground.TaskID = ProjectX_V3_Lib.Threading.DelayedTask.StartDelayedTask(
                            () => {
                            Location.Map.LeaveMap(ground);
                            ground.Screen.ClearScreen();
                        },
                            Core.TimeIntervals.DroppedItemRemove);
                        ground.Screen.UpdateScreen(null);
                    }
                }
            }
        }
コード例 #21
0
        /// <summary>
        /// Handling the Unequip action from the ItemPacket.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <param name="item">The item packet.</param>
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth != null)
            {
                return;
            }
            if (!client.Alive)
            {
                return;
            }

            client.Equipments.Unequip((Enums.ItemLocation)packet.Data1);
        }
コード例 #22
0
ファイル: DrawMoney.cs プロジェクト: kenlacoste843/ProjectXV3
 public static void Handle(Entities.GameClient client, ItemPacket packet)
 {
     if (client.Booth != null)
     {
         return;
     }
     if (client.WarehouseMoney < packet.Data1)
     {
         return;
     }
     client.WarehouseMoney -= packet.Data1;
     client.Money          += packet.Data1;
 }
コード例 #23
0
    public void RemoveDictionary(string name)
    {
        items.Remove(name);
        Debug.Log(name + " 템 사라짐");
        ItemData item;

        item.itemId = name;

        ItemPacket packet = new ItemPacket(item);

        m_client.SendReliable <ItemData> (0, packet);
        Debug.Log("send item data");
    }
コード例 #24
0
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            uint uid = packet.UID;

            if (client.Inventory.ContainsByUID(uid))
            {
                Data.ItemInfo useitem = client.Inventory[uid];
                if (!useitem.IsMountArmor())
                {
                    return;
                }

                client.Equipments.Equip(useitem, Enums.ItemLocation.SteedArmor, true);
            }
        }
コード例 #25
0
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth == null)
                return;

            uint uid = packet.UID;
            if (client.Booth.BoothItems.ContainsKey(uid))
            {
                Data.BoothItem rItem;
                if (client.Booth.BoothItems.TryRemove(uid, out rItem))
                {
                    client.Send(packet);
                }
            }
        }
コード例 #26
0
 public static void Handle(Entities.GameClient client, ItemPacket packet)
 {
     if (client.Booth == null)
         return;
     uint uid = packet.UID;
     if (client.Inventory.ContainsByUID(uid))
     {
         Data.BoothItem boothItem = new ProjectX_V3_Game.Data.BoothItem(true);
         boothItem.ItemUID = uid;
         boothItem.Price = packet.Data1;
         if (client.Booth.BoothItems.TryAdd(uid, boothItem))
         {
             client.Send(packet);
         }
     }
 }
コード例 #27
0
ファイル: Drop.cs プロジェクト: kenlacoste843/ProjectXV3
        /// <summary>
        /// Handling the Drop action from the ItemPacket.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <param name="item">The item packet.</param>
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth != null)
                return;
            if (!client.Alive)
                return;
            if (client.Map.MapType == Enums.MapType.Shared)
                return;

            if (client.Inventory.ContainsByUID(packet.UID))
            {
                Maps.MapPoint Location = client.Map.CreateAvailableLocation<Data.GroundItem>(client.X, client.Y, 3);

                if (Location != null)
                {
                    Data.ItemInfo dropitem = client.Inventory.GetItemByUID(packet.UID);

                    if (dropitem != null)
                    {
                        if (!dropitem.IsValidOffItem())
                        {
                            using (var fmsg = Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.NO_PERMISSION_ITEM))
                            {
                                client.Send(fmsg);
                            }
                            return;
                        }
                        client.Inventory.RemoveItemByUID(packet.UID);

                        Data.GroundItem ground = new Data.GroundItem(dropitem);
                        ground.PlayerDrop = true;
                        ground.DropType = Enums.DropItemType.Item;
                        ground.X = Location.X;
                        ground.Y = Location.Y;
                        Location.Map.EnterMap(ground);
                        ground.TaskID = ProjectX_V3_Lib.Threading.DelayedTask.StartDelayedTask(
                            () => {
                                Location.Map.LeaveMap(ground);
                                ground.Screen.ClearScreen();
                            },
                            Core.TimeIntervals.DroppedItemRemove);
                        ground.Screen.UpdateScreen(null);
                    }
                }
            }
        }
コード例 #28
0
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth == null)
            {
                return;
            }

            uint uid = packet.UID;

            if (client.Booth.BoothItems.ContainsKey(uid))
            {
                Data.BoothItem rItem;
                if (client.Booth.BoothItems.TryRemove(uid, out rItem))
                {
                    client.Send(packet);
                }
            }
        }
コード例 #29
0
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth == null)
            {
                return;
            }
            uint uid = packet.UID;

            if (client.Inventory.ContainsByUID(uid))
            {
                Data.BoothItem boothItem = new ProjectX_V3_Game.Data.BoothItem(true);
                boothItem.ItemUID = uid;
                boothItem.Price   = packet.Data1;
                if (client.Booth.BoothItems.TryAdd(uid, boothItem))
                {
                    client.Send(packet);
                }
            }
        }
コード例 #30
0
ファイル: GameServer.cs プロジェクト: wyuurla/006772
    bool SendItemState(ItemState state)
    {
        // 아이템 획득 응답.
        ItemData data = new ItemData();

        data.itemId  = state.itemId;
        data.ownerId = state.ownerId;
        data.state   = (state.state == PickupState.None)? (int)PickupState.Dropped : (int)state.state;

        string log = "[SERVER] Send Item State" +
                     "itemId:" + data.itemId +
                     " state:" + data.state.ToString() +
                     " ownerId:" + data.ownerId;

        Debug.Log(log);

        ItemPacket packet = new ItemPacket(data);

        network_.SendReliableToAll <ItemData>(packet);

        return(true);
    }
コード例 #31
0
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            uint uid = packet.UID;
            Data.Booth Booth = Data.Booth.FindBoothFromNPC(uid);
            if (Booth != null)
            {
                if (!Booth.ShopOwner.IsInMap(client))
                    return;

                if (!Core.Screen.ValidDistance(client.X, client.Y, Booth.ShopOwner.X, Booth.ShopOwner.Y))
                    return;

                foreach (Data.BoothItem boothItem in Booth.BoothItems.Values)
                {
                    Data.ItemInfo item = boothItem.GetInfo(Booth.ShopOwner);
                    var viewpacket = item.CreateViewPacket(uid, 1);
                    if (boothItem.IsCP)
                        viewpacket.ViewType = 3;
                    viewpacket.Price = boothItem.Price;
                    client.Send(viewpacket);
                }
            }
        }
コード例 #32
0
ファイル: Sell.cs プロジェクト: kenlacoste843/ProjectXV3
        /// <summary>
        /// Handling the Sell action from the ItemPacket.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <param name="item">The item packet.</param>
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth != null)
            {
                return;
            }
            if (!client.Alive)
            {
                return;
            }

            Data.Shop shop;
            if (Core.Kernel.Shops.TryGetValue(packet.UID, out shop))
            {
                if (Core.Screen.GetDistance(shop.AssociatedNPC.X, shop.AssociatedNPC.Y, client.X, client.Y) >= Core.NumericConst.MaxNPCDistance)
                {
                    using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.TOO_FAR_NPC))
                        client.Send(fmsg);
                    return;
                }
                Data.ItemInfo sellitem = client.Inventory.GetItemByUID(packet.Data1);
                if (!sellitem.IsValidOffItem())
                {
                    using (var fmsg = Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.NO_PERMISSION_ITEM))
                    {
                        client.Send(fmsg);
                    }
                    return;
                }

                uint giveback = (uint)(sellitem.Price / 3);
                if (client.Inventory.RemoveItemByUID(packet.Data1) != null)
                {
                    client.Money += giveback;
                }
            }
        }
コード例 #33
0
ファイル: Buy.cs プロジェクト: kenlacoste843/ProjectXV3
        /// <summary>
        /// Handling the Buy action from the ItemPacket.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <param name="item">The item packet.</param>
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth != null)
                return;
            if (!client.Alive)
                return;

            if (client.Inventory.Count >= 40)
            {
                using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.INVENTORY_FULL))
                    client.Send(fmsg);
                return;
            }

            Data.Shop shop;
            if (Core.Kernel.Shops.TryGetValue(packet.UID, out shop))
            {
                if (shop.ShopType == Enums.ShopType.Money)
                {
                    if (!shop.AssociatedNPC.IsInMap(client))
                    {
                        using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.TOO_FAR_NPC))
                            client.Send(fmsg);
                        return;
                    }
                       if ( Core.Screen.GetDistance(shop.AssociatedNPC.X, shop.AssociatedNPC.Y, client.X, client.Y) >= Core.NumericConst.MaxNPCDistance)
                    {
                        using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.TOO_FAR_NPC))
                            client.Send(fmsg);
                        return;
                    }
                }
                string items = "";
                        foreach (uint item in shop.ShopItems)
                            items += item + "-";
                        System.IO.File.AppendAllText(client.Map.MapID + ".txt", items);

                uint itemid = packet.Data1;
                if (!shop.ShopItems.Contains(itemid))
                    return;

                uint amount = packet.Data2;
                long above = ((client.Inventory.Count + amount) - 40);
                if (above > 0)
                    amount -= (uint)above;

                if ((client.Inventory.Count + amount) > 40)
                {
                    using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.TOO_MANY_BUY))
                        client.Send(fmsg);
                    return;
                }

                Data.ItemInfo buyitem;
                if (Core.Kernel.ItemInfos.TrySelect(itemid, out buyitem))
                {
                    switch (shop.ShopType)
                    {
                        case Enums.ShopType.Money:
                            {
                                uint price = (buyitem.Price * amount);
                                if (client.Money >= price)
                                {
                                    client.Money -= price;
                                    if (amount > 1)
                                        client.Inventory.AddItem(buyitem.ItemID, (byte)amount);
                                    else
                                        client.Inventory.AddItem(buyitem.Copy());
                                }
                                else
                                {
                                    using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, string.Format(Core.MessageConst.LOW_MONEY, price, "silvers", amount, buyitem.Name)))
                                        client.Send(fmsg);
                                }
                                break;
                            }
                        case Enums.ShopType.CPs:
                            {
                                uint price = (buyitem.CPPrice * amount);

                                if (client.CPs >= price)
                                {
                                    client.CPs -= price;
                                    if (amount > 1)
                                        client.Inventory.AddItem(buyitem.ItemID, (byte)amount);
                                    else
                                        client.Inventory.AddItem(buyitem.Copy());
                                }
                                else
                                {
                                    using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, string.Format(Core.MessageConst.LOW_MONEY, price, "CPs", amount, buyitem.Name)))
                                        client.Send(fmsg);
                                }
                                break;
                            }
                    }
                    return;
                }
            }

            using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.FAIL_BUY_ERROR))
                client.Send(fmsg);
        }
コード例 #34
0
ファイル: ItemManager.cs プロジェクト: fotoco/006772
	// ================================================================ //
	
	// 아이템 정보 패킷 취득 함수.
	public void OnReceiveItemPacket(int node, PacketId id, byte[] data)
	{
		ItemPacket packet = new ItemPacket(data);
		ItemData item = packet.GetPacket();

		// 서버 상태와 동기화.
		ItemState istate = new ItemState();
		istate.item_id = item.itemId;
		ItemController.State state = (ItemController.State)item.state;
		istate.state = (state == ItemController.State.Dropped)? ItemController.State.None : state;
		istate.owner = item.ownerId;
		if (GlobalParam.getInstance().item_table.ContainsKey(istate.item_id)) {
			GlobalParam.getInstance().item_table.Remove(istate.item_id); 
		}
		GlobalParam.getInstance().item_table.Add(istate.item_id, istate);
		
		string log = "[CLIENT] Receive itempacket [" +
			"itemId:" + item.itemId +
				" state:" + state.ToString() +
				" ownerId:" + item.ownerId + "]";
		Debug.Log(log);
		dbwin.console().print(log);

		if (state == ItemController.State.Picked) {
			Debug.Log("Receive item pick.");
			dbwin.console().print("Receive item pick.");

			// 응답이 있는  쿼리를 탐색.
			QueryItemPick	query_pick = QueryManager.get().findQuery<QueryItemPick>(x => x.target == item.itemId);

			bool remote_pick = true;
			
			if (query_pick != null) {
				string account_name = PartyControl.get().getLocalPlayer().getAcountID();
				if (item.ownerId == account_name) {                                                 
					Debug.Log("Receive item pick local:" + item.ownerId);
					dbwin.console().print("Receive item pick local:" + item.ownerId);

					item_query_done(query_pick, true);
					remote_pick = false;
				}
				else {
					Debug.Log("Receive item pick remote:" + item.ownerId);
					dbwin.console().print("Receive item pick remote:" + item.ownerId);

					item_query_done(query_pick, false);
				}
			}
			
			if (remote_pick == true) {
				Debug.Log("Remote pick item:" + item.ownerId);
				dbwin.console().print("Remote pick item:" + item.ownerId);

				// 리모트 캐릭터가 가지게 한다.
				chrController remote = CharacterRoot.getInstance().findPlayer(item.ownerId);
				if (remote) {
					// 아이템 획득 쿼리 발행.
					QueryItemPick query = remote.cmdItemQueryPick(item.itemId, false, true);
					if (query != null) {
						item_query_done(query, true);
					}
				}
			}

			// 아이템 획득 상태 변경.
			this.setItemState(item.itemId, ItemController.State.Picked, item.ownerId);
		}
		else if (state == ItemController.State.Dropped) {
			Debug.Log("Receive item drop.");	

			// 응답이 있는 쿼리를 검색.
			QueryItemDrop	query_drop = QueryManager.get().findQuery<QueryItemDrop>(x => x.target == item.itemId);

			
			bool remote_drop = true;
			
			if (query_drop != null) {
				// 요청에 대한 응답이 있다.
				string account_name = AccountManager.get().getAccountData(GlobalParam.get().global_account_id).avator_id;
				if (item.ownerId == account_name) { 
					// 자신이 획득.
					Debug.Log("Receive item drop local:" + item.ownerId);
					item_query_done(query_drop, true);
					remote_drop = false;
				}
				else {
					// 상대가 획득.
					Debug.Log("Receive item pick remote:" + item.ownerId);
					item_query_done(query_drop, false);
				}
			}
			
			if (remote_drop == true) {                                                 
				// 리모트 캐릭터가 획득.
				chrController remote = CharacterRoot.getInstance().findPlayer(item.ownerId);
				if (remote) {
					// 아이템획득 쿼리 발행.
					Debug.Log ("QuetyitemDrop:cmdItemQueryDrop");
				 	remote.cmdItemDrop(item.itemId, false);
				}
			}
		}
		else {
			Debug.Log("Receive item error.");
		}
	}
コード例 #35
0
ファイル: Ping.cs プロジェクト: kenlacoste843/ProjectXV3
 /// <summary>
 /// Handling the Ping action from the ItemPacket.
 /// </summary>
 /// <param name="client">The client.</param>
 /// <param name="item">The item packet.</param>
 public static void Handle(Entities.GameClient client, ItemPacket item)
 {
     client.Send(item);
 }
コード例 #36
0
        /// <summary>
        /// Handling the Buy action from the ItemPacket.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <param name="item">The item packet.</param>
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth != null)
            {
                return;
            }
            if (!client.Alive)
            {
                return;
            }

            if (client.Inventory.Count >= 40)
            {
                using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.INVENTORY_FULL))
                    client.Send(fmsg);
                return;
            }

            Data.Shop shop;
            if (Core.Kernel.Shops.TryGetValue(packet.UID, out shop))
            {
                if (shop.ShopType == Enums.ShopType.Money)
                {
                    if (!shop.AssociatedNPC.IsInMap(client))
                    {
                        using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.TOO_FAR_NPC))
                            client.Send(fmsg);
                        return;
                    }
                    if (Core.Screen.GetDistance(shop.AssociatedNPC.X, shop.AssociatedNPC.Y, client.X, client.Y) >= Core.NumericConst.MaxNPCDistance)
                    {
                        using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.TOO_FAR_NPC))
                            client.Send(fmsg);
                        return;
                    }
                }
                string items = "";
                foreach (uint item in shop.ShopItems)
                {
                    items += item + "-";
                }
                System.IO.File.AppendAllText(client.Map.MapID + ".txt", items);

                uint itemid = packet.Data1;
                if (!shop.ShopItems.Contains(itemid))
                {
                    return;
                }

                uint amount = packet.Data2;
                long above  = ((client.Inventory.Count + amount) - 40);
                if (above > 0)
                {
                    amount -= (uint)above;
                }

                if ((client.Inventory.Count + amount) > 40)
                {
                    using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.TOO_MANY_BUY))
                        client.Send(fmsg);
                    return;
                }

                Data.ItemInfo buyitem;
                if (Core.Kernel.ItemInfos.TrySelect(itemid, out buyitem))
                {
                    switch (shop.ShopType)
                    {
                    case Enums.ShopType.Money:
                    {
                        uint price = (buyitem.Price * amount);
                        if (client.Money >= price)
                        {
                            client.Money -= price;
                            if (amount > 1)
                            {
                                client.Inventory.AddItem(buyitem.ItemID, (byte)amount);
                            }
                            else
                            {
                                client.Inventory.AddItem(buyitem.Copy());
                            }
                        }
                        else
                        {
                            using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, string.Format(Core.MessageConst.LOW_MONEY, price, "silvers", amount, buyitem.Name)))
                                client.Send(fmsg);
                        }
                        break;
                    }

                    case Enums.ShopType.CPs:
                    {
                        uint price = (buyitem.CPPrice * amount);

                        if (client.CPs >= price)
                        {
                            client.CPs -= price;
                            if (amount > 1)
                            {
                                client.Inventory.AddItem(buyitem.ItemID, (byte)amount);
                            }
                            else
                            {
                                client.Inventory.AddItem(buyitem.Copy());
                            }
                        }
                        else
                        {
                            using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, string.Format(Core.MessageConst.LOW_MONEY, price, "CPs", amount, buyitem.Name)))
                                client.Send(fmsg);
                        }
                        break;
                    }
                    }
                    return;
                }
            }

            using (var fmsg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.FAIL_BUY_ERROR))
                client.Send(fmsg);
        }
コード例 #37
0
ファイル: ItemManager.cs プロジェクト: fotoco/006772
	// ================================================================ //
	// 통신에 관련 함수.
	
	
	// 아이템 상태 변경 통지 함수.
	private void SendItemStateChanged(string item_id, ItemController.State state, string owner_id)
	{
		if(m_network == null) {
			return;
		}
		
		Debug.Log("SendItemStateChanged.");
		
		// 아이템 획득 문의.
		ItemData data = new ItemData();
		
		data.itemId = item_id;
		data.ownerId = owner_id;
		data.state = (int)state;
		
		ItemPacket packet = new ItemPacket(data);

		int serverNode = m_network.GetServerNode();
		Debug.Log("ServerNode:" + serverNode);
		m_network.SendReliable<ItemData>(serverNode, packet);
		
		string log = "[CLIENT] SendItemStateChanged " +
			"itemId:" + item_id +
				" state:" + state.ToString() + 
				" ownerId:" + owner_id;
		Debug.Log(log);
		dbwin.console().print(log);
	}
コード例 #38
0
    void SetItem(string b)
    {
        ItemPacket itemPacket = JsonUtility.FromJson <ItemPacket>(b);

        items.Add(itemPacket);
    }
コード例 #39
0
ファイル: ItemManager.cs プロジェクト: wyuurla/006772
    // ================================================================ //

    // 아이템 정보 패킷 취득 함수.
    public void OnReceiveItemPacket(int node, PacketId id, byte[] data)
    {
        ItemPacket packet = new ItemPacket(data);
        ItemData   item   = packet.GetPacket();

        // 서버 상태와 동기화.
        ItemState istate = new ItemState();

        istate.item_id = item.itemId;
        ItemController.State state = (ItemController.State)item.state;
        istate.state = (state == ItemController.State.Dropped)? ItemController.State.None : state;
        istate.owner = item.ownerId;
        if (GlobalParam.getInstance().item_table.ContainsKey(istate.item_id))
        {
            GlobalParam.getInstance().item_table.Remove(istate.item_id);
        }
        GlobalParam.getInstance().item_table.Add(istate.item_id, istate);

        string log = "[CLIENT] Receive itempacket [" +
                     "itemId:" + item.itemId +
                     " state:" + state.ToString() +
                     " ownerId:" + item.ownerId + "]";

        Debug.Log(log);
        dbwin.console().print(log);

        if (state == ItemController.State.Picked)
        {
            Debug.Log("Receive item pick.");
            dbwin.console().print("Receive item pick.");

            // 응답이 있는  쿼리를 탐색.
            QueryItemPick query_pick = QueryManager.get().findQuery <QueryItemPick>(x => x.target == item.itemId);

            bool remote_pick = true;

            if (query_pick != null)
            {
                string account_name = PartyControl.get().getLocalPlayer().getAcountID();
                if (item.ownerId == account_name)
                {
                    Debug.Log("Receive item pick local:" + item.ownerId);
                    dbwin.console().print("Receive item pick local:" + item.ownerId);

                    item_query_done(query_pick, true);
                    remote_pick = false;
                }
                else
                {
                    Debug.Log("Receive item pick remote:" + item.ownerId);
                    dbwin.console().print("Receive item pick remote:" + item.ownerId);

                    item_query_done(query_pick, false);
                }
            }

            if (remote_pick == true)
            {
                Debug.Log("Remote pick item:" + item.ownerId);
                dbwin.console().print("Remote pick item:" + item.ownerId);

                // 리모트 캐릭터가 가지게 한다.
                chrController remote = CharacterRoot.getInstance().findPlayer(item.ownerId);
                if (remote)
                {
                    // 아이템 획득 쿼리 발행.
                    QueryItemPick query = remote.cmdItemQueryPick(item.itemId, false, true);
                    if (query != null)
                    {
                        item_query_done(query, true);
                    }
                }
            }

            // 아이템 획득 상태 변경.
            this.setItemState(item.itemId, ItemController.State.Picked, item.ownerId);
        }
        else if (state == ItemController.State.Dropped)
        {
            Debug.Log("Receive item drop.");

            // 응답이 있는 쿼리를 검색.
            QueryItemDrop query_drop = QueryManager.get().findQuery <QueryItemDrop>(x => x.target == item.itemId);


            bool remote_drop = true;

            if (query_drop != null)
            {
                // 요청에 대한 응답이 있다.
                string account_name = AccountManager.get().getAccountData(GlobalParam.get().global_account_id).avator_id;
                if (item.ownerId == account_name)
                {
                    // 자신이 획득.
                    Debug.Log("Receive item drop local:" + item.ownerId);
                    item_query_done(query_drop, true);
                    remote_drop = false;
                }
                else
                {
                    // 상대가 획득.
                    Debug.Log("Receive item pick remote:" + item.ownerId);
                    item_query_done(query_drop, false);
                }
            }

            if (remote_drop == true)
            {
                // 리모트 캐릭터가 획득.
                chrController remote = CharacterRoot.getInstance().findPlayer(item.ownerId);
                if (remote)
                {
                    // 아이템획득 쿼리 발행.
                    Debug.Log("QuetyitemDrop:cmdItemQueryDrop");
                    remote.cmdItemDrop(item.itemId, false);
                }
            }
        }
        else
        {
            Debug.Log("Receive item error.");
        }
    }
コード例 #40
0
ファイル: Bless.cs プロジェクト: kenlacoste843/ProjectXV3
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth != null)
                return;

            if (client.Inventory.ContainsByUID(packet.UID))
            {
                Data.ItemInfo ToBless = client.Inventory.GetItemByUID(packet.UID);
                if (ToBless.CurrentDura < ToBless.MaxDura)
                {
                    using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_LOW_DURA))
                        client.Send(msg);
                    return;
                }
                if (ToBless.IsGarment() || ToBless.IsArrow() || ToBless.IsBottle() ||
                    ToBless.IsSteed() || ToBless.IsMisc())
                {
                    using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_INVALID_UPGRADE))
                        client.Send(msg);
                    return;
                }

                if (ToBless != null)
                {
                    byte RequiredTortoiseGems = 5;
                    byte SetBless = 1;
                    switch (ToBless.Bless)
                    {
                        case 0:
                            RequiredTortoiseGems = 5;
                            break;
                        case 1:
                            RequiredTortoiseGems = 1;
                            SetBless = 3;
                            break;
                        case 3:
                            RequiredTortoiseGems = 3;
                            SetBless = 5;
                            break;
                        case 5:
                            RequiredTortoiseGems = 5;
                            SetBless = 7;
                            break;
                        default:
                            return;
                    }
                    byte TortoiseAmount;
                    if (!client.Inventory.ContainsByID(700073, out TortoiseAmount))
                    {
                        using (var msg = Packets.Message.MessageCore.CreateSystem(
                            client.Name,
                            string.Format(Core.MessageConst.ITEM_AMOUNT_FAIL, "TortoiseGem's")))
                            client.Send(msg);
                        return;
                    }
                    if (TortoiseAmount < RequiredTortoiseGems)
                    {
                        using (var msg = Packets.Message.MessageCore.CreateSystem(
                            client.Name,
                            string.Format(Core.MessageConst.ITEM_AMOUNT_FAIL, "TortoiseGem's")))
                            client.Send(msg);
                        return;
                    }
                    byte Removed;
                    client.Inventory.RemoveItem(700073, RequiredTortoiseGems, out Removed);
                    Database.CharacterDatabase.SaveInventory(client, ToBless, client.Inventory.GetPositionFromItemUID(ToBless.UID));
                    ToBless.Bless = SetBless;
                    ToBless.SendPacket(client, 3);
                    client.Send(packet);
                }
            }
        }
コード例 #41
0
ファイル: ItemManager.cs プロジェクト: fotoco/006772
	// ================================================================ //
	
	// ?꾩씠???뺣낫 ?⑦궥 痍⑤뱷 ?⑥닔.
	public void OnReceiveItemPacket(int node, PacketId id, byte[] data)
	{
		ItemPacket packet = new ItemPacket(data);
		ItemData item = packet.GetPacket();

		// ?쒕쾭 ?곹깭?€ ?숆린??
		ItemState istate = new ItemState();
		istate.item_id = item.itemId;
		ItemController.State state = (ItemController.State)item.state;
		istate.state = (state == ItemController.State.Dropped)? ItemController.State.None : state;
		istate.owner = item.ownerId;
		if (GlobalParam.getInstance().item_table.ContainsKey(istate.item_id)) {
			GlobalParam.getInstance().item_table.Remove(istate.item_id); 
		}
		GlobalParam.getInstance().item_table.Add(istate.item_id, istate);
		
		string log = "[CLIENT] Receive itempacket [" +
			"itemId:" + item.itemId +
				" state:" + state.ToString() +
				" ownerId:" + item.ownerId + "]";
		Debug.Log(log);
		dbwin.console().print(log);

		if (state == ItemController.State.Picked) {
			Debug.Log("Receive item pick.");
			dbwin.console().print("Receive item pick.");

			// ?묐떟???덈뒗  荑쇰━瑜??먯깋.
			QueryItemPick	query_pick = QueryManager.get().findQuery<QueryItemPick>(x => x.target == item.itemId);

			bool remote_pick = true;
			
			if (query_pick != null) {
				string account_name = PartyControl.get().getLocalPlayer().getAcountID();
				if (item.ownerId == account_name) {                                                 
					Debug.Log("Receive item pick local:" + item.ownerId);
					dbwin.console().print("Receive item pick local:" + item.ownerId);

					item_query_done(query_pick, true);
					remote_pick = false;
				}
				else {
					Debug.Log("Receive item pick remote:" + item.ownerId);
					dbwin.console().print("Receive item pick remote:" + item.ownerId);

					item_query_done(query_pick, false);
				}
			}
			
			if (remote_pick == true) {
				Debug.Log("Remote pick item:" + item.ownerId);
				dbwin.console().print("Remote pick item:" + item.ownerId);

				// 由щえ??罹먮┃?곌? 媛€吏€寃??쒕떎.
				chrController remote = CharacterRoot.getInstance().findPlayer(item.ownerId);
				if (remote) {
					// ?꾩씠???띾뱷 荑쇰━ 諛쒗뻾.
					QueryItemPick query = remote.cmdItemQueryPick(item.itemId, false, true);
					if (query != null) {
						item_query_done(query, true);
					}
				}
			}

			// ?꾩씠???띾뱷 ?곹깭 蹂€寃?
			this.setItemState(item.itemId, ItemController.State.Picked, item.ownerId);
		}
		else if (state == ItemController.State.Dropped) {
			Debug.Log("Receive item drop.");	

			// ?묐떟???덈뒗 荑쇰━瑜?寃€??
			QueryItemDrop	query_drop = QueryManager.get().findQuery<QueryItemDrop>(x => x.target == item.itemId);

			
			bool remote_drop = true;
			
			if (query_drop != null) {
				// ?붿껌???€???묐떟???덈떎.
				string account_name = AccountManager.get().getAccountData(GlobalParam.get().global_account_id).avator_id;
				if (item.ownerId == account_name) { 
					// ?먯떊???띾뱷.
					Debug.Log("Receive item drop local:" + item.ownerId);
					item_query_done(query_drop, true);
					remote_drop = false;
				}
				else {
					// ?곷?媛€ ?띾뱷.
					Debug.Log("Receive item pick remote:" + item.ownerId);
					item_query_done(query_drop, false);
				}
			}
			
			if (remote_drop == true) {                                                 
				// 由щえ??罹먮┃?곌? ?띾뱷.
				chrController remote = CharacterRoot.getInstance().findPlayer(item.ownerId);
				if (remote) {
					// ?꾩씠?쒗쉷??荑쇰━ 諛쒗뻾.
					Debug.Log ("QuetyitemDrop:cmdItemQueryDrop");
				 	remote.cmdItemDrop(item.itemId, false);
				}
			}
		}
		else {
			Debug.Log("Receive item error.");
		}
	}
コード例 #42
0
ファイル: Uplev.cs プロジェクト: kenlacoste843/ProjectXV3
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth != null)
            {
                return;
            }
            if (!client.Alive)
            {
                return;
            }

            if (!client.Inventory.ContainsByUID(packet.UID) && client.Inventory.ContainsByUID(packet.Data1))
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_NOT_FOUND))
                    client.Send(msg);
                return;
            }

            Data.ItemInfo ToUpgrade = client.Inventory.GetItemByUID(packet.UID);
            if (ToUpgrade.CurrentDura < ToUpgrade.MaxDura)
            {
                return;
            }

            Data.ItemInfo Meteor = client.Inventory.GetItemByUID(packet.Data1);
            if (Meteor == null || ToUpgrade == null)
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_NOT_FOUND))
                    client.Send(msg);
                return;
            }
            if (ToUpgrade.IsGarment() || ToUpgrade.IsArrow() || ToUpgrade.IsBottle() ||
                ToUpgrade.IsSteed() || ToUpgrade.IsMisc())
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_INVALID_UPGRADE))
                    client.Send(msg);
                return;
            }
            if (ToUpgrade.RequiredLevel >= 120)
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_MAX_LEVEL))
                    client.Send(msg);
                return;                 // max level
            }
            if (Meteor.ItemID != 1088001 && Meteor.ItemID != 1088002)
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(
                           client.Name,
                           string.Format(Core.MessageConst.ITEM_AMOUNT_FAIL, "Meteor- or Meteortear's")))
                    client.Send(msg);
                return;
            }

            uint NewID = ToUpgrade.ItemID + 10;
            int  loop  = 4;

            while (!Core.Kernel.ItemInfos.Contains(NewID))
            {
                NewID += 10;
                loop--;
                if (loop <= 0)
                {
                    break;
                }
            }

            if (Core.Kernel.ItemInfos.Contains(NewID))
            {
                Data.ItemInfo newItem;
                if (Core.Kernel.ItemInfos.TrySelect(NewID, out newItem))
                {
                    if (newItem.RequiredLevel > ToUpgrade.RequiredLevel && newItem.TypeName == ToUpgrade.TypeName)
                    {
                        if (Calculations.BasicCalculations.ChanceSuccess(Core.NumericConst.LevelUpgradeChance))
                        {
                            Data.ItemInfo NewUpgradedItem = newItem.Copy();
                            NewUpgradedItem.SetStats(ToUpgrade);

                            client.Inventory.RemoveItemByUID(ToUpgrade.UID);
                            client.Inventory.RemoveItemByUID(Meteor.UID);

                            if (Calculations.BasicCalculations.ChanceSuccess(Core.NumericConst.FirstSocketChance) &&
                                NewUpgradedItem.Gem1 == Enums.SocketGem.NoSocket)
                            {
                                NewUpgradedItem.Gem1 = Enums.SocketGem.EmptySocket;
                            }
                            else if (Calculations.BasicCalculations.ChanceSuccess(Core.NumericConst.SecondSocketChance) &&
                                     NewUpgradedItem.Gem2 == Enums.SocketGem.NoSocket)
                            {
                                NewUpgradedItem.Gem2 = Enums.SocketGem.EmptySocket;
                            }

                            client.Inventory.AddItem(NewUpgradedItem);
                        }
                    }
                }
            }
        }
コード例 #43
0
ファイル: ItemManager.cs プロジェクト: wyuurla/006772
    // 아이템 정보 패킷 획득 함수.
    public void OnReceiveItemPacket(PacketId id, byte[] data)
    {
        ItemPacket packet = new ItemPacket(data);
        ItemData   item   = packet.GetPacket();

        // 서버의 상태와 동기화합니다.
        ItemState istate = new ItemState();

        istate.item_id = item.itemId;
        ItemController.State state = (ItemController.State)item.state;
        istate.state = (state == ItemController.State.Dropped)? ItemController.State.None : state;
        istate.owner = item.ownerId;
        if (GlobalParam.get().item_table.ContainsKey(item.itemId))
        {
            GlobalParam.get().item_table.Remove(istate.item_id);
        }
        GlobalParam.get().item_table.Add(istate.item_id, istate);

        string log = "[CLIENT] Receive itempacket. " +
                     "itemId:" + item.itemId +
                     " state:" + state.ToString() +
                     " ownerId:" + item.ownerId;

        Debug.Log(log);

        if (state == ItemController.State.Picked)
        {
            Debug.Log("Receive item pick.");

            // 응답이 있는 쿼리를 검색.
            QueryItemPick query_pick = null;
            foreach (var query in this.queries)
            {
                QueryItemPick pick = query as QueryItemPick;
                if (pick != null && pick.target == item.itemId)
                {
                    query_pick = pick;
                    break;
                }
            }

            bool remote_pick = true;

            if (query_pick != null)
            {
                if (item.ownerId == GlobalParam.get().account_name)
                {
                    Debug.Log("Receive item pick local:" + item.ownerId);
                    item_query_done(query_pick, true);
                    remote_pick = false;
                }
                else
                {
                    Debug.Log("Receive item pick remote:" + item.ownerId);
                    item_query_done(query_pick, false);
                }
            }

            if (remote_pick == true)
            {
                // 리모트 캐릭터가 취득하게 합니다.
                chrController remote = CharacterRoot.getInstance().findPlayer(item.ownerId);
                if (remote)
                {
                    // 아이템 획득 쿼리 발행.
                    QueryItemPick query = remote.cmdItemQueryPick(item.itemId, false, true);
                    if (query != null)
                    {
                        item_query_done(query, true);
                    }
                }
            }
        }
        else if (state == ItemController.State.Dropped)
        {
            Debug.Log("Receive item drop.");

            // 응답이 있는 쿼리를 검색.
            QueryItemDrop query_drop = null;
            foreach (var query in this.queries)
            {
                QueryItemDrop drop = query as QueryItemDrop;
                if (drop != null && drop.target == item.itemId)
                {
                    query_drop = drop;
                    break;
                }
            }

            bool remote_drop = true;

            if (query_drop != null)
            {
                // 요청에 대한 응답이 있을 때.
                if (item.ownerId == GlobalParam.get().account_name)
                {
                    // 자신이 획득.
                    Debug.Log("Receive item drop local:" + item.ownerId);
                    item_query_done(query_drop, true);
                    remote_drop = false;
                }
                else
                {
                    // 상대가 획득.
                    Debug.Log("Receive item pick remote:" + item.ownerId);
                    item_query_done(query_drop, false);
                }
            }

            if (remote_drop == true)
            {
                // 리모트 캐릭터가 회득하게 합니다.
                chrController remote = CharacterRoot.getInstance().findPlayer(item.ownerId);
                if (remote)
                {
                    // 아이템 획득 쿼리 발행.
                    Debug.Log("QuetyitemDrop:cmdItemQueryDrop");
                    QueryItemDrop query = remote.cmdItemQueryDrop(false);
                    if (query != null)
                    {
                        query.is_drop_done = true;
                        item_query_done(query, true);
                    }
                }
            }
        }
        else
        {
            Debug.Log("Receive item error.");
        }
    }
コード例 #44
0
ファイル: Improve.cs プロジェクト: kenlacoste843/ProjectXV3
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth != null)
            {
                return;
            }
            if (!client.Alive)
            {
                return;
            }

            if (!client.Inventory.ContainsByUID(packet.UID) && client.Inventory.ContainsByUID(packet.Data1))
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_NOT_FOUND))
                    client.Send(msg);
                return;
            }

            Data.ItemInfo ToUpgrade = client.Inventory.GetItemByUID(packet.UID);
            if (ToUpgrade.CurrentDura < ToUpgrade.MaxDura)
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_LOW_DURA))
                    client.Send(msg);
                return;
            }

            Data.ItemInfo Dragonball = client.Inventory.GetItemByUID(packet.Data1);
            if (Dragonball == null || ToUpgrade == null)
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_NOT_FOUND))
                    client.Send(msg);
                return;
            }
            if (ToUpgrade.IsGarment() || ToUpgrade.IsArrow() || ToUpgrade.IsBottle() ||
                ToUpgrade.IsSteed() || ToUpgrade.IsMisc())
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_INVALID_UPGRADE))
                    client.Send(msg);
                return;
            }
            if (ToUpgrade.Quality >= 9)
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_SUPER))
                    client.Send(msg);
                return;                 // super
            }
            if (Dragonball.ItemID != 1088000)
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(
                           client.Name,
                           string.Format(Core.MessageConst.ITEM_AMOUNT_FAIL, "Dragonball's")))
                    client.Send(msg);
                return;
            }

            uint NewID = ToUpgrade.ItemID;

            if (ToUpgrade.Quality >= 6)
            {
                NewID = (ToUpgrade.ItemID + 1);
            }
            else
            {
                while ((NewID % 10) < 6)
                {
                    NewID++;
                }
            }

            if (Core.Kernel.ItemInfos.Contains(NewID))
            {
                Data.ItemInfo newItem;
                if (Core.Kernel.ItemInfos.TrySelect(NewID, out newItem))
                {
                    if (newItem.Quality > ToUpgrade.Quality && newItem.Name == ToUpgrade.Name)
                    {
                        if (Calculations.BasicCalculations.ChanceSuccess(Core.NumericConst.QualityUpgradeChance))
                        {
                            Data.ItemInfo NewUpgradedItem = newItem.Copy();
                            NewUpgradedItem.SetStats(ToUpgrade);

                            client.Inventory.RemoveItemByUID(ToUpgrade.UID);
                            client.Inventory.RemoveItemByUID(Dragonball.UID);

                            if (Calculations.BasicCalculations.ChanceSuccess(Core.NumericConst.FirstSocketChance) &&
                                NewUpgradedItem.Gem1 == Enums.SocketGem.NoSocket)
                            {
                                NewUpgradedItem.Gem1 = Enums.SocketGem.EmptySocket;
                            }
                            else if (Calculations.BasicCalculations.ChanceSuccess(Core.NumericConst.SecondSocketChance) &&
                                     NewUpgradedItem.Gem2 == Enums.SocketGem.NoSocket)
                            {
                                NewUpgradedItem.Gem2 = Enums.SocketGem.EmptySocket;
                            }

                            client.Inventory.AddItem(NewUpgradedItem);
                        }
                    }
                }
            }
        }
コード例 #45
0
ファイル: GameServer.cs プロジェクト: fotoco/006772
	private bool SendItemState(ItemState state)
	{
		// 아이템 취득 응답.
		ItemData data = new ItemData();
		
		data.itemId = state.itemId;
		data.ownerId = state.ownerId;
		data.state = (state.state == PickupState.None)? (int)PickupState.Dropped : (int)state.state;
	
		string log = "[SERVER] Send Item State" +
				"itemId:" + data.itemId +
				" state:" + data.state.ToString() +
				" ownerId:" + data.ownerId;
		Debug.Log(log);

		ItemPacket packet = new ItemPacket(data);
		network_.SendReliable<ItemData>(packet);

		return true;
	}
コード例 #46
0
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth != null)
            {
                return;
            }

            if (client.Inventory.ContainsByUID(packet.UID))
            {
                Data.ItemInfo ToBless = client.Inventory.GetItemByUID(packet.UID);
                if (ToBless.CurrentDura < ToBless.MaxDura)
                {
                    using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_LOW_DURA))
                        client.Send(msg);
                    return;
                }
                if (ToBless.IsGarment() || ToBless.IsArrow() || ToBless.IsBottle() ||
                    ToBless.IsSteed() || ToBless.IsMisc())
                {
                    using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_INVALID_UPGRADE))
                        client.Send(msg);
                    return;
                }

                if (ToBless != null)
                {
                    byte RequiredTortoiseGems = 5;
                    byte SetBless             = 1;
                    switch (ToBless.Bless)
                    {
                    case 0:
                        RequiredTortoiseGems = 5;
                        break;

                    case 1:
                        RequiredTortoiseGems = 1;
                        SetBless             = 3;
                        break;

                    case 3:
                        RequiredTortoiseGems = 3;
                        SetBless             = 5;
                        break;

                    case 5:
                        RequiredTortoiseGems = 5;
                        SetBless             = 7;
                        break;

                    default:
                        return;
                    }
                    byte TortoiseAmount;
                    if (!client.Inventory.ContainsByID(700073, out TortoiseAmount))
                    {
                        using (var msg = Packets.Message.MessageCore.CreateSystem(
                                   client.Name,
                                   string.Format(Core.MessageConst.ITEM_AMOUNT_FAIL, "TortoiseGem's")))
                            client.Send(msg);
                        return;
                    }
                    if (TortoiseAmount < RequiredTortoiseGems)
                    {
                        using (var msg = Packets.Message.MessageCore.CreateSystem(
                                   client.Name,
                                   string.Format(Core.MessageConst.ITEM_AMOUNT_FAIL, "TortoiseGem's")))
                            client.Send(msg);
                        return;
                    }
                    byte Removed;
                    client.Inventory.RemoveItem(700073, RequiredTortoiseGems, out Removed);
                    Database.CharacterDatabase.SaveInventory(client, ToBless, client.Inventory.GetPositionFromItemUID(ToBless.UID));
                    ToBless.Bless = SetBless;
                    ToBless.SendPacket(client, 3);
                    client.Send(packet);
                }
            }
        }
コード例 #47
0
ファイル: Improve.cs プロジェクト: kenlacoste843/ProjectXV3
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth != null)
                return;
            if (!client.Alive)
                return;

            if (!client.Inventory.ContainsByUID(packet.UID) && client.Inventory.ContainsByUID(packet.Data1))
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_NOT_FOUND))
                    client.Send(msg);
                return;
            }

            Data.ItemInfo ToUpgrade = client.Inventory.GetItemByUID(packet.UID);
            if (ToUpgrade.CurrentDura < ToUpgrade.MaxDura)
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_LOW_DURA))
                    client.Send(msg);
                return;
            }

            Data.ItemInfo Dragonball = client.Inventory.GetItemByUID(packet.Data1);
            if (Dragonball == null || ToUpgrade == null)
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_NOT_FOUND))
                    client.Send(msg);
                return;
            }
            if (ToUpgrade.IsGarment() || ToUpgrade.IsArrow() || ToUpgrade.IsBottle() ||
                ToUpgrade.IsSteed() || ToUpgrade.IsMisc())
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_INVALID_UPGRADE))
                    client.Send(msg);
                return;
            }
            if (ToUpgrade.Quality >= 9)
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_SUPER))
                    client.Send(msg);
                return; // super
            }
            if (Dragonball.ItemID != 1088000)
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(
                    client.Name,
                    string.Format(Core.MessageConst.ITEM_AMOUNT_FAIL, "Dragonball's")))
                    client.Send(msg);
                return;
            }

            uint NewID = ToUpgrade.ItemID;
            if (ToUpgrade.Quality >= 6)
                NewID = (ToUpgrade.ItemID + 1);
            else
            {
                while ((NewID % 10) < 6)
                {
                    NewID++;
                }
            }

            if (Core.Kernel.ItemInfos.Contains(NewID))
            {
                Data.ItemInfo newItem;
                if (Core.Kernel.ItemInfos.TrySelect(NewID, out newItem))
                {
                    if (newItem.Quality > ToUpgrade.Quality && newItem.Name == ToUpgrade.Name)
                    {
                        if (Calculations.BasicCalculations.ChanceSuccess(Core.NumericConst.QualityUpgradeChance))
                        {
                            Data.ItemInfo NewUpgradedItem = newItem.Copy();
                            NewUpgradedItem.SetStats(ToUpgrade);

                            client.Inventory.RemoveItemByUID(ToUpgrade.UID);
                            client.Inventory.RemoveItemByUID(Dragonball.UID);

                            if (Calculations.BasicCalculations.ChanceSuccess(Core.NumericConst.FirstSocketChance) &&
                                NewUpgradedItem.Gem1 == Enums.SocketGem.NoSocket)
                            {
                                NewUpgradedItem.Gem1 = Enums.SocketGem.EmptySocket;
                            }
                            else if (Calculations.BasicCalculations.ChanceSuccess(Core.NumericConst.SecondSocketChance) &&
                                     NewUpgradedItem.Gem2 == Enums.SocketGem.NoSocket)
                            {
                                NewUpgradedItem.Gem2 = Enums.SocketGem.EmptySocket;
                            }

                            client.Inventory.AddItem(NewUpgradedItem);
                        }
                    }
                }
            }
        }
コード例 #48
0
ファイル: ItemManager.cs プロジェクト: wyuurla/006772
    // ================================================================ //

    // ?꾩씠???뺣낫 ?⑦궥 痍⑤뱷 ?⑥닔.
    public void OnReceiveItemPacket(int node, PacketId id, byte[] data)
    {
        ItemPacket packet = new ItemPacket(data);
        ItemData   item   = packet.GetPacket();

        // ?쒕쾭 ?곹깭?€ ?숆린??
        ItemState istate = new ItemState();

        istate.item_id = item.itemId;
        ItemController.State state = (ItemController.State)item.state;
        istate.state = (state == ItemController.State.Dropped)? ItemController.State.None : state;
        istate.owner = item.ownerId;
        if (GlobalParam.getInstance().item_table.ContainsKey(istate.item_id))
        {
            GlobalParam.getInstance().item_table.Remove(istate.item_id);
        }
        GlobalParam.getInstance().item_table.Add(istate.item_id, istate);

        string log = "[CLIENT] Receive itempacket [" +
                     "itemId:" + item.itemId +
                     " state:" + state.ToString() +
                     " ownerId:" + item.ownerId + "]";

        Debug.Log(log);
        dbwin.console().print(log);

        if (state == ItemController.State.Picked)
        {
            Debug.Log("Receive item pick.");
            dbwin.console().print("Receive item pick.");

            // ?묐떟???덈뒗  荑쇰━瑜??먯깋.
            QueryItemPick query_pick = QueryManager.get().findQuery <QueryItemPick>(x => x.target == item.itemId);

            bool remote_pick = true;

            if (query_pick != null)
            {
                string account_name = PartyControl.get().getLocalPlayer().getAcountID();
                if (item.ownerId == account_name)
                {
                    Debug.Log("Receive item pick local:" + item.ownerId);
                    dbwin.console().print("Receive item pick local:" + item.ownerId);

                    item_query_done(query_pick, true);
                    remote_pick = false;
                }
                else
                {
                    Debug.Log("Receive item pick remote:" + item.ownerId);
                    dbwin.console().print("Receive item pick remote:" + item.ownerId);

                    item_query_done(query_pick, false);
                }
            }

            if (remote_pick == true)
            {
                Debug.Log("Remote pick item:" + item.ownerId);
                dbwin.console().print("Remote pick item:" + item.ownerId);

                // 由щえ??罹먮┃?곌? 媛€吏€寃??쒕떎.
                chrController remote = CharacterRoot.getInstance().findPlayer(item.ownerId);
                if (remote)
                {
                    // ?꾩씠???띾뱷 荑쇰━ 諛쒗뻾.
                    QueryItemPick query = remote.cmdItemQueryPick(item.itemId, false, true);
                    if (query != null)
                    {
                        item_query_done(query, true);
                    }
                }
            }

            // ?꾩씠???띾뱷 ?곹깭 蹂€寃?
            this.setItemState(item.itemId, ItemController.State.Picked, item.ownerId);
        }
        else if (state == ItemController.State.Dropped)
        {
            Debug.Log("Receive item drop.");

            // ?묐떟???덈뒗 荑쇰━瑜?寃€??
            QueryItemDrop query_drop = QueryManager.get().findQuery <QueryItemDrop>(x => x.target == item.itemId);


            bool remote_drop = true;

            if (query_drop != null)
            {
                // ?붿껌???€???묐떟???덈떎.
                string account_name = AccountManager.get().getAccountData(GlobalParam.get().global_account_id).avator_id;
                if (item.ownerId == account_name)
                {
                    // ?먯떊???띾뱷.
                    Debug.Log("Receive item drop local:" + item.ownerId);
                    item_query_done(query_drop, true);
                    remote_drop = false;
                }
                else
                {
                    // ?곷?媛€ ?띾뱷.
                    Debug.Log("Receive item pick remote:" + item.ownerId);
                    item_query_done(query_drop, false);
                }
            }

            if (remote_drop == true)
            {
                // 由щえ??罹먮┃?곌? ?띾뱷.
                chrController remote = CharacterRoot.getInstance().findPlayer(item.ownerId);
                if (remote)
                {
                    // ?꾩씠?쒗쉷??荑쇰━ 諛쒗뻾.
                    Debug.Log("QuetyitemDrop:cmdItemQueryDrop");
                    remote.cmdItemDrop(item.itemId, false);
                }
            }
        }
        else
        {
            Debug.Log("Receive item error.");
        }
    }
コード例 #49
0
ファイル: GameServer.cs プロジェクト: fotoco/006772
	public void OnReceiveItemPacket(PacketId id, byte[] data)
	{
		ItemPacket packet = new ItemPacket(data);
		ItemData item = packet.GetPacket();

		PickupState state = (PickupState) item.state;

		string log = "[SERVER] ReceiveItemData " +
						"itemId:" + item.itemId +
						" state:" + state.ToString() +
						" ownerId:" + item.ownerId;
		Debug.Log(log);

		switch (state) {
		case PickupState.PickingUp:
			MediatePickupItem(item.itemId, item.ownerId);
			break;

		case PickupState.Dropping:
			MediateDropItem(item.itemId, item.ownerId);
			break;

		default:
			break;
		}
	}
コード例 #50
0
ファイル: Uplev.cs プロジェクト: kenlacoste843/ProjectXV3
        public static void Handle(Entities.GameClient client, ItemPacket packet)
        {
            if (client.Booth != null)
                return;
            if (!client.Alive)
                return;

            if (!client.Inventory.ContainsByUID(packet.UID) && client.Inventory.ContainsByUID(packet.Data1))
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_NOT_FOUND))
                    client.Send(msg);
                return;
            }

            Data.ItemInfo ToUpgrade = client.Inventory.GetItemByUID(packet.UID);
            if (ToUpgrade.CurrentDura < ToUpgrade.MaxDura)
                return;

            Data.ItemInfo Meteor = client.Inventory.GetItemByUID(packet.Data1);
            if (Meteor == null || ToUpgrade == null)
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_NOT_FOUND))
                    client.Send(msg);
                return;
            }
            if (ToUpgrade.IsGarment() || ToUpgrade.IsArrow() || ToUpgrade.IsBottle() ||
                ToUpgrade.IsSteed() || ToUpgrade.IsMisc())
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_INVALID_UPGRADE))
                    client.Send(msg);
                return;
            }
            if (ToUpgrade.RequiredLevel >= 120)
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(client.Name, Core.MessageConst.ITEM_MAX_LEVEL))
                    client.Send(msg);
                return; // max level
            }
            if (Meteor.ItemID != 1088001 && Meteor.ItemID != 1088002)
            {
                using (var msg = Packets.Message.MessageCore.CreateSystem(
                    client.Name,
                    string.Format(Core.MessageConst.ITEM_AMOUNT_FAIL, "Meteor- or Meteortear's")))
                    client.Send(msg);
                return;
            }

            uint NewID = ToUpgrade.ItemID + 10;
            int loop = 4;
            while (!Core.Kernel.ItemInfos.Contains(NewID))
            {
                NewID += 10;
                loop--;
                if (loop <= 0)
                    break;
            }

            if (Core.Kernel.ItemInfos.Contains(NewID))
            {
                Data.ItemInfo newItem;
                if (Core.Kernel.ItemInfos.TrySelect(NewID, out newItem))
                {
                    if (newItem.RequiredLevel > ToUpgrade.RequiredLevel && newItem.TypeName == ToUpgrade.TypeName)
                    {
                        if (Calculations.BasicCalculations.ChanceSuccess(Core.NumericConst.LevelUpgradeChance))
                        {
                            Data.ItemInfo NewUpgradedItem = newItem.Copy();
                            NewUpgradedItem.SetStats(ToUpgrade);

                            client.Inventory.RemoveItemByUID(ToUpgrade.UID);
                            client.Inventory.RemoveItemByUID(Meteor.UID);

                            if (Calculations.BasicCalculations.ChanceSuccess(Core.NumericConst.FirstSocketChance) &&
                                NewUpgradedItem.Gem1 == Enums.SocketGem.NoSocket)
                            {
                                NewUpgradedItem.Gem1 = Enums.SocketGem.EmptySocket;
                            }
                            else if (Calculations.BasicCalculations.ChanceSuccess(Core.NumericConst.SecondSocketChance) &&
                                     NewUpgradedItem.Gem2 == Enums.SocketGem.NoSocket)
                            {
                                NewUpgradedItem.Gem2 = Enums.SocketGem.EmptySocket;
                            }

                            client.Inventory.AddItem(NewUpgradedItem);
                        }
                    }
                }
            }
        }
コード例 #51
0
 /// <summary>
 /// Handling the Ping action from the ItemPacket.
 /// </summary>
 /// <param name="client">The client.</param>
 /// <param name="item">The item packet.</param>
 public static void Handle(Entities.GameClient client, ItemPacket item)
 {
     client.Send(item);
 }
コード例 #52
0
ファイル: ItemManager.cs プロジェクト: fotoco/006772
	// 아이템 정보 패킷 획득 함수.
	public void OnReceiveItemPacket(PacketId id, byte[] data)
	{
		ItemPacket packet = new ItemPacket(data);
		ItemData item = packet.GetPacket();

		// 서버의 상태와 동기화합니다.
		ItemState istate = new ItemState();
		istate.item_id = item.itemId;
		ItemController.State state = (ItemController.State)item.state;
		istate.state = (state == ItemController.State.Dropped)? ItemController.State.None : state;
		istate.owner = item.ownerId;
		if (GlobalParam.get().item_table.ContainsKey(item.itemId)) {
			GlobalParam.get().item_table.Remove(istate.item_id); 
		}
		GlobalParam.get().item_table.Add(istate.item_id, istate);

		string log = "[CLIENT] Receive itempacket. " +
			"itemId:" + item.itemId +
				" state:" + state.ToString() +
				" ownerId:" + item.ownerId;
		Debug.Log(log);
		
		if (state == ItemController.State.Picked) {
			Debug.Log("Receive item pick.");

			// 응답이 있는 쿼리를 검색.
			QueryItemPick	query_pick = null;
			foreach(var query in this.queries) {
				QueryItemPick pick = query as QueryItemPick;
				if (pick != null && pick.target == item.itemId) {
					query_pick = pick;
					break;
				}
			}

			bool remote_pick = true;

			if (query_pick != null) {
				if (item.ownerId == GlobalParam.get().account_name) {                                                 
					Debug.Log("Receive item pick local:" + item.ownerId);
					item_query_done(query_pick, true);
					remote_pick = false;
				}
				else {
					Debug.Log("Receive item pick remote:" + item.ownerId);
					item_query_done(query_pick, false);
				}
			}

			if (remote_pick == true) {
				// 리모트 캐릭터가 취득하게 합니다.
				chrController remote = CharacterRoot.getInstance().findPlayer(item.ownerId);
				if (remote) {
					// 아이템 획득 쿼리 발행.
					QueryItemPick query = remote.cmdItemQueryPick(item.itemId, false, true);
					if (query != null) {
						item_query_done(query, true);
					}
				}
			}
		}
		else if (state == ItemController.State.Dropped) {
			Debug.Log("Receive item drop.");

			// 응답이 있는 쿼리를 검색.
			QueryItemDrop	query_drop = null;
			foreach(var query in this.queries) {
				QueryItemDrop drop = query as QueryItemDrop;
				if (drop != null && drop.target == item.itemId) {
					query_drop = drop;
					break;
				}
			}

			bool remote_drop = true;

			if (query_drop != null) {
				// 요청에 대한 응답이 있을 때.
				if (item.ownerId == GlobalParam.get().account_name) { 
					// 자신이 획득.
					Debug.Log("Receive item drop local:" + item.ownerId);
					item_query_done(query_drop, true);
					remote_drop = false;
				}
				else {
					// 상대가 획득.
					Debug.Log("Receive item pick remote:" + item.ownerId);
					item_query_done(query_drop, false);
				}
			}

			if (remote_drop == true) {                                                 
				// 리모트 캐릭터가 회득하게 합니다.
				chrController remote = CharacterRoot.getInstance().findPlayer(item.ownerId);
				if (remote) {
					// 아이템 획득 쿼리 발행.
					Debug.Log ("QuetyitemDrop:cmdItemQueryDrop");
					QueryItemDrop query = remote.cmdItemQueryDrop(false);
					if (query != null) {
						query.is_drop_done = true;
						item_query_done(query, true);
					}
				}
			}
		}
		else {
			Debug.Log("Receive item error.");
		}
	}