private static void UnEquipItem(Player player, ref MsgItem packet) { if (player.Equipment.Unequip((MsgItemPosition)packet.Param)) { player.Send(packet); } }
private static void BuyItem(Player player, ref MsgItem packet) { if (Collections.Items.TryGetValue(packet.Param, out var item)) { if (GameWorld.Find(packet.UnqiueId, out Npc shop)) { if (shop.Inventory == null) { Output.WriteLine($"Shop {shop.UniqueId} null."); return; } if (!shop.Inventory.HasItem(item.ItemId)) { Output.WriteLine($"Item {item.ItemId} not found in Shop {shop.UniqueId}"); return; } if (player.Money >= item.PriceBaseline) { if (player.Inventory.Count < 40) { var cloned = CloneChamber.Clone(item); cloned.UniqueId = YiCore.Random.Next(1000, 100000); player.Inventory.Items.AddOrUpdate(cloned.UniqueId, cloned); player.Money -= cloned.PriceBaseline; player.Send(new MsgItemInformation(cloned, MsgItemPosition.Inventory)); } } } } }
private static void BuyBoothItem(Player player, ref MsgItem packet) { if (BoothSystem.Buy(player, packet.Param, packet.UnqiueId)) { player.Send(packet); } }
private static void DropItem(Player player, ref MsgItem packet) { if (player.Inventory.Items.TryRemove(packet.UnqiueId, out var found)) { FloorItemSystem.Drop(null, player, found); player.Send(packet); } }
private static void DropGold(Player player, ref MsgItem packet) { if (player.Money >= packet.UnqiueId) { FloorItemSystem.DropMoney(null, player, packet.UnqiueId); } player.Send(packet); }
private static void SellItem(Player player, ref MsgItem packet) { var found = player.Inventory.FindByUID(packet.Param); if (found != null) { if (player.Inventory.Items.TryRemove(found.UniqueId, out found)) { player.Money += found.PriceBaseline; } } packet.UnqiueId = packet.Param; packet.Param = 0; packet.Type = MsgItemType.RemoveInventory; player.Send(packet); }
private static void EquipItem(Player player, ref MsgItem packet) { var found = player.Inventory.FindByUID(packet.UnqiueId); if (found != null) { if (ScriptEngine.Scripts.TryGetValue(ScriptType.ItemUsage, out var sc) && sc.Execute(player, found)) { return; } Message.SendTo(player, $"Item {found.ItemId} has no script - Equipping it instead at {(MsgItemPosition)packet.Param}", MsgTextType.Action); if (player.Equipment.Equip(found, (MsgItemPosition)packet.Param)) { packet.Type = MsgItemType.SetEquipPosition; player.Send(packet); } } }
private static void UpgradeItemEnchant(Player player, ref MsgItem packet) { var mainItem = player.Inventory.FindByUID(packet.UnqiueId); var subItem = player.Inventory.FindByUID(packet.Param); if (mainItem != null && subItem != null) { if (subItem.ItemId / 1000 == 700)//gem id const { var num = GetGemBlessWorth(subItem.ItemId); if (num > mainItem.Enchant) { mainItem.Enchant = (byte)num; } player.Inventory.RemoveItem(mainItem); //remove the item to update player.Inventory.RemoveItem(subItem); //remove the db before attempting player.Inventory.AddOrUpdate(mainItem.UniqueId, mainItem); //RETURN THE ITEM TO THE PLAYER REGARDLESS OF UPGRADE player.Send(new MsgItemInformation(mainItem, MsgItemPosition.Inventory)); } } }
private static void UpgradeDragonball(Player player, ref MsgItem packet) { var mainItem = player.Inventory.FindByUID(packet.UnqiueId); //item to upgrade var subItem = player.Inventory.FindByUID(packet.Param); //db if (mainItem != null && subItem != null) { if (subItem.ItemId == 1088000) { var itemQuality = (byte)(mainItem.ItemId % 10); if (itemQuality >= 3 && itemQuality < 9) { player.Inventory.RemoveItem(mainItem); //remove the item to update player.Inventory.RemoveItem(subItem); //remove the db before attempting var lucky = true; var num = YiCore.Random.Next(5); if (itemQuality < 6) { lucky = num <= 90; } else if (itemQuality == 6) { lucky = num <= 75; } else if (itemQuality == 7) { lucky = num <= 50; } else if (itemQuality == 8) { lucky = num <= 35; } if (num == 1 && mainItem.Gem1 == 0) { mainItem.Gem1 = 255; } else if (num == 1 && YiCore.Random.Next(3) == 3) { mainItem.Gem2 = 255; } if (lucky) { Message.SendTo(player, "You have successfully upgraded your item\'s quality!", MsgTextType.Action); if (itemQuality < 3) { mainItem.ItemId += 2; //so it goes straight to refined } mainItem.ItemId++; } else { Message.SendTo(player, "You have failed to upgrade your item\'s quality.", MsgTextType.Action); } player.Inventory.AddOrUpdate(mainItem.UniqueId, mainItem);//RETURN THE ITEM TO THE PLAYER REGARDLESS OF UPGRADE player.Send(new MsgItemInformation(mainItem, MsgItemPosition.Inventory)); } else { Message.SendTo(player, "Invalid items were attempted.", MsgTextType.Action); } } } }
private static void UpgradeMeteor(Player player, ref MsgItem packet) { var mainItem = player.Inventory.FindByUID(packet.UnqiueId); //item to upgrade var subItem = player.Inventory.FindByUID(packet.Param); //met if (mainItem != null && subItem != null) { var jmp = 0; var itemId = mainItem.ItemId; var itemType = itemId / 10000; CheckValidID: switch (itemType) { case 11: // head case 12: // neck case 15: // ring case 13: // armor case 16: // boots itemId += 10; break; default: if (itemType >= 40 && itemType <= 61) // weapons { itemId += 10; } break; } if (itemId != mainItem.ItemId) { if (Collections.Items.ContainsKey(itemId)) { var itemQuality = (byte)(mainItem.ItemId % 10); if (itemQuality >= 3 && itemQuality <= 9) { var lucky = false; var num = YiCore.Random.Next(1, 1000); if (itemQuality < 6) { lucky = num <= 950; } else if (itemQuality == 6) { lucky = num <= 880; } else if (itemQuality == 7) { lucky = num <= 750; } else if (itemQuality >= 8) { lucky = num <= 670; } if (lucky) { Message.SendTo(player, "You have successfully upgraded your item\'s level!", MsgTextType.Action); if (num < 10 && mainItem.Gem1 == 0) { mainItem.Gem1 = 255; } else if (num == 1 && mainItem.Gem2 == 0) { mainItem.Gem2 = 255; } mainItem.ItemId = itemId; player.Inventory.RemoveItem(mainItem); //remove the main item player.Inventory.RemoveItem(subItem); //remove the met player.Inventory.AddOrUpdate(mainItem.UniqueId, mainItem); //update the new item player.Send(new MsgItemInformation(mainItem, MsgItemPosition.Inventory)); } else { Message.SendTo(player, "Your item failed to upgrade.", MsgTextType.Action); } } else { Output.WriteLine("The item quality has recieved an else in MsgItem.cs with a value of " + itemQuality); } } else if (jmp < 3) { jmp++; goto CheckValidID; } } else { Message.SendTo(player, "You can\'t upgrade the level of this item.", MsgTextType.Action); } } else { Message.SendTo(player, "Invalid items were attempted.", MsgTextType.Action); } }
private static void Ping(Player player, ref MsgItem packet) { player.ForceSend(packet, packet.Size); player.ForceSend(MsgTick.Create(player), (ushort)sizeof(MsgTick)); }
private static void AddItemToShop(Player player, ref MsgItem packet) { BoothSystem.Add(player, packet.UnqiueId, packet.Param); ScreenSystem.Send(player, packet, true); }
private static void RemoveItemFromShop(Player player, ref MsgItem packet) { BoothSystem.Remove(player, packet.UnqiueId); ScreenSystem.Send(player, packet, true); }
private static void RepairItem(Player player, ref MsgItem packet) { var found = player.Inventory.FindByUID(packet.UnqiueId); if (found == null) { return; } if (found.CurrentDurability >= found.MaximumDurability) { return; } if (Collections.Items.TryGetValue(found.ItemId, out var original)) { var delta = Math.Max(0, found.MaximumDurability - found.CurrentDurability); var cost = (double)original.PriceBaseline * delta / found.MaximumDurability; switch (found.ItemId % 10) { case 9: cost *= 1.125; break; case 8: cost *= 0.975; break; case 7: cost *= 0.9; break; case 6: cost *= 0.825; break; default: cost *= 0.75; break; } cost = Math.Max(0, Math.Round(cost, 0)); if (player.Money >= cost) { player.Money -= (int)cost; Message.SendTo(player, $"You paid: {cost}.", MsgTextType.Action); } else { Message.SendTo(player, $"You don't have enough money (Cost: {cost}).", MsgTextType.Action); return; } } found.CurrentDurability = found.MaximumDurability; var pack = new MsgItemInformation(found, MsgItemInfoAction.Update); player.ForceSend(pack, pack.Size); }