Exemplo n.º 1
0
        public static void OnSellItem(WorldClient client, INetPacketStream packet)
        {
            var sellItemPacket = new SellItemPacket(packet);
            var npcShopEvent   = new NpcShopSellEventArgs(sellItemPacket.ItemUniqueId, sellItemPacket.Quantity);

            client.Player.NotifySystem <NpcShopSystem>(npcShopEvent);
        }
Exemplo n.º 2
0
        public static void Handle(Packet packet)
        {
            var sellItemPacket = new SellItemPacket(packet);

            // Check if the item really exists
            if (ServerMain.Items.Count < sellItemPacket.TableIndex)
            {
                packet.Sender.SendDebugError("Item out of range!");
#if !DEBUG
                packet.Sender.KillConnection("Invalid shop item");
#endif
                return;
            }

            // Get price for single item
            var  itemData = ServerMain.Items[(int)sellItemPacket.TableIndex];
            uint price;
            if (!uint.TryParse(itemData.SellValue, out price) || itemData.BuyValue == "n/a")
            {
                packet.Sender.SendDebugError($"No sell price ({itemData.BuyValue}) for item {sellItemPacket.TableIndex}");
#if !DEBUG
                packet.Sender.KillConnection("Price missing!");
#endif
                return;
            }

            price = price * sellItemPacket.Quantity;

            var character = packet.Sender.User.ActiveCharacter;

            // Give the item to user
            if (!character.RemoveItem(GameServer.Instance.Database.Connection,
                                      (int)sellItemPacket.Slot, sellItemPacket.Quantity))
            {
                packet.Sender.SendDebugError("Removing item failure");
                return;
            }

            // Finally update money
            character.MitoMoney += price;
            CharacterModel.Update(GameServer.Instance.Database.Connection, character);

            packet.Sender.Send(new SellItemAnswer()
            {
                TableIndex = sellItemPacket.TableIndex,
                Quantity   = sellItemPacket.Quantity,
                Money      = price,
                Slot       = sellItemPacket.Slot
            }.CreatePacket());

            character.FlushItemModBuffer(packet.Sender);
        }
Exemplo n.º 3
0
 public void OnSellItem(IWorldClient client, SellItemPacket packet)
 {
     _npcShopSystem.SellItem(client.Player, packet.ItemUniqueId, packet.Quantity);
 }
Exemplo n.º 4
0
        public static void HandleOutgoingPacket(byte[] bytes)
        {
            if (!Enum.IsDefined(typeof(OutGoingPacket), bytes[0]))
            {
                Log.Information($"Send unknown D2GS packet of type: 0x{(byte)bytes[0],2:X2} with data {bytes.ToPrintString()}");
                return;
            }

            var packetType = (OutGoingPacket)bytes[0];

            switch (packetType)
            {
            case OutGoingPacket.Run:
                var runToLocationPacket = new RunToLocationPacket(bytes);
                Log.Information($"RunToLocationPacket -> {runToLocationPacket.GetLocation()}");
                break;

            case OutGoingPacket.BuyItem:
                var buyItemPacket = new BuyItemPacket(bytes);
                Log.Information($"BuyItem -> {buyItemPacket.GetItemId()} with data {bytes.ToPrintString()}");
                break;

            case OutGoingPacket.SellItem:
                var sellItemPacket = new SellItemPacket(bytes);
                Log.Information($"SellItem -> {sellItemPacket.GetItemId()}");
                break;

            case OutGoingPacket.EntityInteract:
                var interactWithEntityPacket = new InteractWithEntityPacket(bytes);
                Log.Information($"EntityInteract -> ID: {interactWithEntityPacket.GetEntityId()} Type: {interactWithEntityPacket.GetEntityType()}");
                Log.Debug($"{bytes.ToPrintString()}");
                break;

            case OutGoingPacket.Walk:
            case OutGoingPacket.WalkToUnit:
            case OutGoingPacket.RunToUnit:
            case OutGoingPacket.ShiftLeftClick:
            case OutGoingPacket.LeftClickUnit:
            case OutGoingPacket.ShiftLeftClickUnit:
            case OutGoingPacket.ShiftLeftClickHold:
            case OutGoingPacket.LeftClickHoldUnit:
            case OutGoingPacket.ShiftLeftClickHoldUnit:
            case OutGoingPacket.RightSkillOnLocation:
            case OutGoingPacket.RightSkillOnUnit:
            case OutGoingPacket.ShiftRightClickUnit:
            case OutGoingPacket.RightSkillRepeatOnLocation:
            case OutGoingPacket.RightClickHoldUnit:
            case OutGoingPacket.ShiftRightClickHoldUnit:
            case OutGoingPacket.OverheadChat:
            case OutGoingPacket.Chat:
            case OutGoingPacket.PickItem:
            case OutGoingPacket.DropItem:
            case OutGoingPacket.InsertItemToBuffer:
            case OutGoingPacket.RemoveItemFromBuffer:
            case OutGoingPacket.EquipItem:
            case OutGoingPacket.Swap2HItem:
            case OutGoingPacket.RemoveBodyItem:
            case OutGoingPacket.SwapCursorWithBody:
            case OutGoingPacket.Swap1HItemWith2HItem:
            case OutGoingPacket.SwapCursorAndBufferItem:
            case OutGoingPacket.ActivateBufferItem:
            case OutGoingPacket.StackItems:
            case OutGoingPacket.UnstackItems:
            case OutGoingPacket.ItemToBelt:
            case OutGoingPacket.ItemFromBelt:
            case OutGoingPacket.SwapBeltItem:
            case OutGoingPacket.UseBeltItem:
            case OutGoingPacket.IdentifyItem:
            case OutGoingPacket.SocketItem:
            case OutGoingPacket.ScrollToBook:
            case OutGoingPacket.ItemToCube:
            case OutGoingPacket.InitiateEntityChat:
            case OutGoingPacket.TerminateEntityChat:
            case OutGoingPacket.QuestMessage:
            case OutGoingPacket.IdentifyItems:
            case OutGoingPacket.Repair:
            case OutGoingPacket.HireMerc:
            case OutGoingPacket.IdentifyFromGamble:
            case OutGoingPacket.EntityAction:
            case OutGoingPacket.PurchaseLife:
            case OutGoingPacket.AddStatPoint:
            case OutGoingPacket.AddSkillPoint:
            case OutGoingPacket.SelectSkill:
            case OutGoingPacket.HighlightDoor:
            case OutGoingPacket.ActivateInifussScroll:
            case OutGoingPacket.PlayAudio:
            case OutGoingPacket.RequestQuestData:
            case OutGoingPacket.Resurrect:
            case OutGoingPacket.InsertHoradricStaff:
            case OutGoingPacket.HaveMercInteract:
            case OutGoingPacket.MoveMerc:
            case OutGoingPacket.TurnOffBusy:
            case OutGoingPacket.TakeWaypoint:
            case OutGoingPacket.RequestEntityUpdate:
            case OutGoingPacket.Transmute:
            case OutGoingPacket.PlayNPCMessage:
            case OutGoingPacket.ClickButton:
            case OutGoingPacket.DropGold:
            case OutGoingPacket.BindHotkey:
            case OutGoingPacket.QuestComplete:
            case OutGoingPacket.MakeEntityMove:
            case OutGoingPacket.SetPlayerRelation:
            case OutGoingPacket.InvitePlayer:
            case OutGoingPacket.UpdatePlayerLocation:
            case OutGoingPacket.SwapWeapons:
            case OutGoingPacket.DropOrEquipMercItem:
            case OutGoingPacket.ResurrectMerc:
            case OutGoingPacket.SendItemToBelt:
            case OutGoingPacket.GameLogon:
            case OutGoingPacket.LeaveGame:
            case OutGoingPacket.Startup:
            case OutGoingPacket.JoinGame:
            case OutGoingPacket.Ping:
                if (Log.IsEnabled(Serilog.Events.LogEventLevel.Debug))
                {
                    Log.Debug($"Outgoing packet {packetType} with data: {bytes.ToPrintString()}");
                }
                else
                {
                    Log.Information($"Outgoing packet {packetType}");
                }

                break;
            }
        }