public static void Use_Coupon_Req(InPacket lea, Client gc) { var chr = gc.Character; string Code = lea.ReadString(20); foreach (dynamic datum in new Datums("Coupon").Populate()) { if (Code.Equals(datum.code) && datum.valid == 1) { byte Type = InventoryType.getItemType(datum.itemID); chr.Items.Add(new Item(datum.itemID, InventoryType.getItemType(datum.itemID), chr.Items.GetNextFreeSlot((InventoryType.ItemType)Type), (short)datum.quantity)); InventoryHandler.UpdateInventory(gc, Type); InventoryPacket.ClearDropItem(gc, chr.CharacterID, -1, datum.itemID); datum.valid = 0; datum.Update("code = '{0}'", Code); break; } } }
public static void PickupItem(InPacket lea, Client gc) { int OriginalID = lea.ReadInt(); int ItemID = lea.ReadInt(); lea.ReadInt(); var chr = gc.Character; Map Map = MapFactory.GetMap(chr.MapX, chr.MapY); // 撿取靈魂 if (ItemID >= 9900001 && ItemID <= 9900004) { if (Map.getDropByOriginalID(OriginalID) == null) { return; } switch (ItemID) { case 9900001: // Blue chr.Mp += (short)(chr.MaxMp * 0.2); if (chr.Mp > chr.MaxMp) { chr.Mp = chr.MaxMp; } break; case 9900002: // Green chr.Mp += (short)(chr.MaxMp * 0.4); if (chr.Mp > chr.MaxMp) { chr.Mp = chr.MaxMp; } break; case 9900003: // Red int rnd = Randomizer.Next(3, 7); chr.Fury += (short)(chr.MaxFury / 100 * rnd); if (chr.Fury > chr.MaxFury) { chr.Fury = chr.MaxFury; } break; case 9900004: // Purple if (chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Seal] != null) { chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Seal].Spirit++; InventoryPacket.getInvenEquip(gc); } break; } StatusPacket.UpdateHpMp(gc, chr.Hp, chr.Mp, chr.Fury, chr.MaxFury); foreach (Character All in Map.Characters) { InventoryPacket.ClearDropItem(All.Client, chr.CharacterID, OriginalID, ItemID); } return; } // 撿取錢 if (ItemID >= 9800001 && ItemID <= 9800005) { if (Map.getDropByOriginalID(OriginalID) == null) { return; } chr.Money += Map.getDropByOriginalID(OriginalID).Quantity; InventoryPacket.getInvenMoney(gc, chr.Money, Map.getDropByOriginalID(OriginalID).Quantity); foreach (Character All in Map.Characters) { InventoryPacket.ClearDropItem(All.Client, chr.CharacterID, OriginalID, ItemID); } return; } if (!Map.Item.ContainsKey(OriginalID)) { return; } byte Type = InventoryType.getItemType(ItemID); Item finditem = null; foreach (Item it in gc.Character.Items) { if (it.ItemID == ItemID) { finditem = it; } } if (((Type == (byte)InventoryType.ItemType.Spend3) || (Type == (byte)InventoryType.ItemType.Other4)) && (finditem != null) && (finditem.Quantity + Map.getDropByOriginalID(OriginalID).Quantity) <= 100) { // 合併消費物品跟其他物品 chr.Items[(InventoryType.ItemType)finditem.Type, finditem.Slot].Quantity += Map.getDropByOriginalID(OriginalID).Quantity; } else { byte Slot = gc.Character.Items.GetNextFreeSlot((InventoryType.ItemType)Type); Item oItem = new Item(ItemID, Type, Slot, Map.getDropByOriginalID(OriginalID).Quantity); chr.Items.Add(oItem); } foreach (Character All in Map.Characters) { InventoryPacket.ClearDropItem(All.Client, chr.CharacterID, OriginalID, ItemID); } Map.Item.Remove(OriginalID); UpdateInventory(gc, Type); }
public static void TradeEventItem(InPacket lea, Client c) { lea.ReadShort(); // 活動ID ? byte Type = lea.ReadByte(); byte Slot = lea.ReadByte(); int Quantity = lea.ReadInt(); var chr = c.Character; Item Item = null; foreach (Item im in chr.Items.getItems()) { if (im.Type == 4 && im.ItemID == 8990049 && im.Quantity >= Quantity) { Item = im; break; } } if (Item == null && Quantity <= 100) { return; } switch (Quantity) { case 5: chr.Rank += 1; StatusPacket.UpdateFame(c, 1); break; case 8: chr.Rank += 2; StatusPacket.UpdateFame(c, 2); break; case 12: chr.Rank += 3; StatusPacket.UpdateFame(c, 3); break; case 20: chr.Items.Add(new Item(8510071, (byte)InventoryType.ItemType.Equip2, chr.Items.GetNextFreeSlot(InventoryType.ItemType.Equip2))); InventoryHandler.UpdateInventory(c, 2); InventoryPacket.ClearDropItem(c, chr.CharacterID, -1, 8510071); break; case 30: chr.Items.Add(new Item(8510081, (byte)InventoryType.ItemType.Equip2, chr.Items.GetNextFreeSlot(InventoryType.ItemType.Equip2))); InventoryHandler.UpdateInventory(c, 2); InventoryPacket.ClearDropItem(c, chr.CharacterID, -1, 8510081); break; case 40: chr.Items.Add(new Item(8510091, (byte)InventoryType.ItemType.Equip2, chr.Items.GetNextFreeSlot(InventoryType.ItemType.Equip2))); InventoryHandler.UpdateInventory(c, 2); InventoryPacket.ClearDropItem(c, chr.CharacterID, -1, 8510091); break; case 50: chr.Items.Add(new Item(8510101, (byte)InventoryType.ItemType.Equip2, chr.Items.GetNextFreeSlot(InventoryType.ItemType.Equip2))); InventoryHandler.UpdateInventory(c, 2); InventoryPacket.ClearDropItem(c, chr.CharacterID, -1, 8510101); break; case 60: chr.Money += 2000000; InventoryPacket.getInvenMoney(c, chr.Money, 2000000); break; case 100: chr.Money += 4000000; InventoryPacket.getInvenMoney(c, chr.Money, 4000000); break; case 200: chr.Money += 8200000; InventoryPacket.getInvenMoney(c, chr.Money, 8200000); break; case 300: chr.Money += 13000000; InventoryPacket.getInvenMoney(c, chr.Money, 13000000); break; case 500: chr.Money += 24000000; InventoryPacket.getInvenMoney(c, chr.Money, 24000000); break; } if (Quantity > 100) { Item Target1 = null; Item Target2 = null; Item Target3 = null; Item Target4 = null; Item Target5 = null; int i = 0; foreach (Item Target in chr.Items.getItems()) { if (i == 0 && Target.ItemID == 8990049 && Target.Quantity == 100) { Target1 = Target; i++; } else if (i == 1 && Target.ItemID == 8990049 && Target.Quantity == 100) { Target2 = Target; i++; } else if (i == 2 && (Quantity == 300 || Quantity == 500) && Target.ItemID == 8990049 && Target.Quantity == 100) { Target3 = Target; i++; } else if (i == 3 && Quantity == 500 && Target.ItemID == 8990049 && Target.Quantity == 100) { Target4 = Target; i++; } else if (i == 4 && Quantity == 500 && Target.ItemID == 8990049 && Target.Quantity == 100) { Target5 = Target; i++; } else if (i == 5) { break; } } if (Target1 != null) { chr.Items.Remove(Target1.Type, Target1.Slot, 100); } if (Target2 != null) { chr.Items.Remove(Target2.Type, Target2.Slot, 100); } if (Target3 != null) { chr.Items.Remove(Target3.Type, Target3.Slot, 100); } if (Target4 != null) { chr.Items.Remove(Target4.Type, Target4.Slot, 100); } if (Target5 != null) { chr.Items.Remove(Target5.Type, Target5.Slot, 100); } } else { chr.Items.Remove(Type, Slot, Quantity); } InventoryHandler.UpdateInventory(c, Type); }