public void OnReceiveUseItemPacket(int node, PacketId id, byte[] data) { ItemUsePacket packet = new ItemUsePacket(data); ItemUseData useData = packet.GetPacket(); Debug.Log("Receive UseItemPacket:" + useData.userId + " -> " + useData.targetId + " (" + useData.itemCategory + ")"); chrController user = CharacterRoot.getInstance().findPlayer(useData.userId); AccountData account_data = AccountManager.get().getAccountData(GlobalParam.getInstance().global_account_id); if (user != null && account_data.avator_id != useData.userId) { Debug.Log("use item. favor:" + useData.itemFavor); Item.Favor favor = new Item.Favor(); favor.category = (Item.CATEGORY)useData.itemCategory; this.useItem(-1, favor, useData.userId, useData.targetId, false); } else { Debug.Log("Receive packet is already done."); } }
private static void HandleOpenBox(GameSession session, IReadOnlyCollection <Item> items, int amount) { int opened = 0; OpenBoxResult result = OpenBoxResult.Success; foreach (Item item in items) { for (int i = opened; i < amount; i++) { if (item.Amount <= 0) { break; } if (!ItemBoxHelper.GiveItemFromOpenBox(session, item, out result)) { break; } opened++; } } session.Send(ItemUsePacket.Use(items.First().Id, opened, result)); }
public override void HandleMessageContents(NetworkMessage message, Connection connection) { var itemUsePacket = new ItemUsePacket(message); var player = Game.Instance.GetCreatureWithId(connection.PlayerId) as Player; if (player == null) { return; } player.ClearPendingActions(); // Before actually using the item, check if we're close enough to use it. if (itemUsePacket.FromLocation.Type == LocationType.Ground) { var locationDiff = itemUsePacket.FromLocation - player.Location; if (locationDiff.Z != 0) { // it's on a different floor... ResponsePackets.Add(new TextMessagePacket { Type = MessageType.StatusSmall, Message = "There is no way." }); return; } if (locationDiff.MaxValueIn2D > 1) { // Too far away to use it. Location retryLoc; var directions = Game.Instance.Pathfind(player.Location, itemUsePacket.FromLocation, out retryLoc).ToArray(); player.SetPendingAction(new UseItemPlayerAction(player, itemUsePacket, retryLoc)); if (directions.Any()) { player.AutoWalk(directions); } else { // we found no way... ResponsePackets.Add(new TextMessagePacket { Type = MessageType.StatusSmall, Message = "There is no way." }); } return; } } new UseItemPlayerAction(player, itemUsePacket, itemUsePacket.FromLocation).Perform(); }
public static ItemUsePacket Parse(NetworkMessage message) { ItemUsePacket packet = new ItemUsePacket(); packet.FromLocation = message.GetLocation(); packet.SpriteId = message.GetUInt16(); packet.FromStackPosition = message.GetByte(); packet.Index = message.GetByte(); return(packet); }
public override void Handle(GameSession session, PacketReader packet) { int boxId = packet.ReadInt(); packet.ReadShort(); // Unknown int amount = packet.ReadInt(); short opened = 0; // Amount of opened boxes List <Item> items = new List <Item> (session.Player.Inventory.Items.Values); // Make copy of items in-case new item is added foreach (Item item in items) { // Continue over non-matching item ids if (item.Id != boxId) { continue; } for (int i = opened; i < amount; i++) { // Create new item from opening box Item newItem = new Item(30001001); // Remove box if there is only 1 left if (item.Amount <= 1) { session.Player.Inventory.Remove(item.Uid, out Item removed); session.Send(ItemInventoryPacket.Remove(item.Uid)); InventoryController.Add(session, newItem); opened++; break; // Break out of the amount loop because this stack of boxes is empty, look for next stack } // Update box amount if there is more than 1 item.Amount -= 1; session.Send(ItemInventoryPacket.Update(item.Uid, item.Amount)); InventoryController.Add(session, newItem); opened++; } } session.Send(ItemUsePacket.Use(boxId, amount)); // Need to handle opening boxes, probably serialize the item xml }
public void SendItemUseData(Item.Favor item_favor, string user_name, string target_name) { ItemUseData data = new ItemUseData(); Debug.Log("[CLIENT] SendItemUseData: user:"******" target:" + target_name); dbwin.console().print("[CLIENT] SendItemUseData: user:"******" target:" + target_name); data.userId = user_name; data.targetId = target_name; data.itemCategory = (int)item_favor.category; ItemUsePacket packet = new ItemUsePacket(data); if (m_network != null) { int serverNode = m_network.GetServerNode(); m_network.SendReliable <ItemUseData>(serverNode, packet); } }
void HookProxy_OutgoingPacket(byte[] data) { NetworkMessage msg = new NetworkMessage(client, data); if (OutgoingPacket != null) { OutgoingPacket.Invoke(data); } byte Type = msg.GetByte(); switch (Type) { case 0x82: Location loc = msg.GetLocation(); uint itemId = msg.GetUInt16(); byte stackPos = msg.GetByte(); byte Index = msg.GetByte(); if (ItemUsePacket != null) { ItemUsePacket.Invoke(loc, stackPos, (int)itemId, Index); } break; case 0x96: byte type = msg.GetByte(); string message = msg.PeekString(); msg.AddString(message); break; case 101: case 102: case 103: case 104: case 106: case 107: case 108: case 109: client.Map.PlayerHavedMoved = true; // client.StatusBar = "moved " + Type.ToString("X"); break; } }
private static void HandleOpenBox(GameSession session, Dictionary <long, Item> items, /*OpenItemBox box,*/ int amount) { int opened = 0; foreach (KeyValuePair <long, Item> kvp in items) { Item item = kvp.Value; for (int i = opened; i < amount; i++) { if (item.Amount <= 0) { break; } opened++; ItemBoxHelper.GiveItemFromOpenBox(session, item); } } session.Send(ItemUsePacket.Use(items.FirstOrDefault().Value.Id, amount)); }
private static void HandleSelectBox(GameSession session, Dictionary <long, Item> items, SelectItemBox box, int index, int amount) { ItemDropMetadata metadata = ItemDropMetadataStorage.GetItemDropMetadata(box.BoxId); int opened = 0; foreach (KeyValuePair <long, Item> kvp in items) { Item item = kvp.Value; for (int i = opened; i < amount; i++) { if (item.Amount <= 0) { break; } opened++; ItemBoxHelper.GiveItemFromSelectBox(session, item, index); } } session.Send(ItemUsePacket.Use(items.FirstOrDefault().Value.Id, amount)); }
public override void Handle(GameSession session, PacketReader packet) { int boxId = packet.ReadInt(); packet.ReadShort(); // Unknown int amount = packet.ReadInt(); BoxType boxType = (BoxType)packet.ReadShort(); int index = 0; if (boxType == BoxType.SELECT) { index = packet.ReadShort() - 0x30; // Starts at 0x30 for some reason if (index < 0) { return; } } short opened = 0; // Amount of opened boxes List <Item> items = new List <Item>(session.Player.Inventory.Items.Values); // Make copy of items in-case new item is added foreach (Item item in items) { // Continue over non-matching item ids if (item.Id != boxId) { continue; } // Do nothing if box has no data stored if (item.Content.Count <= 0) { break; } for (int i = opened; i < amount; i++) { bool breakOut = false; // Needed to remove box before adding item to prevent item duping // Remove box if there is only 1 left if (item.Amount <= 1) { InventoryController.Remove(session, item.Uid, out Item removed); opened++; breakOut = true; // Break out of the amount loop because this stack of boxes is empty, look for next stack } else { // Update box amount if there is more than 1 item.Amount -= 1; InventoryController.Update(session, item.Uid, item.Amount); opened++; } // Handle selection box if (boxType == BoxType.SELECT) { if (index < item.Content.Count) { ItemUseHelper.GiveItem(session, item.Content[index]); } } // Handle open box else if (boxType == BoxType.OPEN) { ItemUseHelper.OpenBox(session, item.Content); } if (breakOut) { break; } } } session.Send(ItemUsePacket.Use(boxId, amount)); }
public void OnReceiveUseItemPacket(int node, PacketId id, byte[] data) { ItemUsePacket packet = new ItemUsePacket(data); ItemUseData useData = packet.GetPacket(); Debug.Log ("Receive UseItemPacket:" + useData.userId + " -> " + useData.targetId + " (" + useData.itemCategory + ")"); chrController user = CharacterRoot.getInstance().findPlayer(useData.userId); AccountData account_data = AccountManager.get().getAccountData(GlobalParam.getInstance().global_account_id); if (user != null && account_data.avator_id != useData.userId) { Debug.Log("use item. favor:" + useData.itemFavor); Item.Favor favor = new Item.Favor(); favor.category = (Item.CATEGORY) useData.itemCategory; this.useItem(-1, favor, useData.userId, useData.targetId, false); } else { Debug.Log("Receive packet is already done."); } }
public void SendItemUseData(Item.Favor item_favor, string user_name, string target_name) { ItemUseData data = new ItemUseData(); Debug.Log("[CLIENT] SendItemUseData: user:"******" target:" + target_name); dbwin.console().print("[CLIENT] SendItemUseData: user:"******" target:" + target_name); data.userId = user_name; data.targetId = target_name; data.itemCategory = (int)item_favor.category; ItemUsePacket packet = new ItemUsePacket(data); if (m_network != null) { int serverNode = m_network.GetServerNode(); m_network.SendReliable<ItemUseData>(serverNode, packet); } }
public UseItemPlayerAction(IPlayer player, ItemUsePacket itemUsePacket, Location retryLocation) : base(player, itemUsePacket, retryLocation) { }
public void ParseItemUse(NetworkMessage message) { ItemUsePacket packet = ItemUsePacket.Parse(message); Game.ItemUse(Player, packet.SpriteId, packet.FromLocation, packet.FromStackPosition, packet.Index); }
public override void Handle(GameSession session, PacketReader packet) { int boxId = packet.ReadInt(); packet.ReadShort(); // Unknown int amount = packet.ReadInt(); BoxType boxType = (BoxType)packet.ReadShort(); int index = 0; if (boxType == BoxType.SELECT) { index = packet.ReadShort() - 0x30; // Starts at 0x30 for some reason if (index < 0) { return; } } int opened = 0; Dictionary <long, Item> items = new Dictionary <long, Item>(session.Player.Inventory.Items.Where(x => x.Value.Id == boxId)); // Make copy of items in-case new item is added foreach (KeyValuePair <long, Item> kvp in items) { Item item = kvp.Value; // Do nothing if box has no data stored if (item.Content.Count <= 0) { break; } for (int i = opened; i < amount; i++) { bool breakOut = false; // Needed to remove box before adding item to prevent item duping if (item.Amount <= 1) { breakOut = true; // Break out of the amount loop because this stack of boxes is empty, look for next stack } opened++; InventoryController.Consume(session, item.Uid, 1); // Handle selection box if (boxType == BoxType.SELECT) { if (index < item.Content.Count) { ItemUseHelper.GiveItem(session, item.Content[index]); } } // Handle open box else if (boxType == BoxType.OPEN) { ItemUseHelper.OpenBox(session, item.Content); } if (breakOut) { break; } } } session.Send(ItemUsePacket.Use(boxId, amount)); }