public static void CommodityToInventory_Req(InPacket lea, Client c) { var chr = c.Character; int Slot = lea.ReadInt(); Item Source = chr.Items.getItem((byte)InventoryType.ItemType.Cash, (byte)Slot); if (Source.ItemID / 100000 == 90) { // 頭髮 chr.Hair = Source.ItemID; chr.Items.Remove(Source.Type, Source.Slot); chr.Items.Save(); CashShopPacket.CommodityToInventory(c); InventoryPacket.getInvenCash(c); InventoryHandler.UpdateInventory(c, (byte)InventoryType.ItemType.Equip); return; } else if (Source.ItemID / 100000 == 91) { // 眼睛 chr.Eyes = Source.ItemID; chr.Items.Remove(Source.Type, Source.Slot); chr.Items.Save(); CashShopPacket.CommodityToInventory(c); InventoryPacket.getInvenCash(c); InventoryHandler.UpdateInventory(c, (byte)InventoryType.ItemType.Equip); return; } else if (Source.ItemID / 100000 == 92 || Source.ItemID == 7820501) { // 寵物 chr.Pets.Add(new Pet(Source.ItemID, 0, "", 1, 100, 100, 0, (byte)InventoryType.ItemType.Pet5, chr.Pets.GetNextFreeSlot(InventoryType.ItemType.Pet5))); chr.Items.Remove(Source.Type, Source.Slot); chr.Pets.Save(); chr.Items.Save(); CashShopPacket.CommodityToInventory(c); InventoryPacket.getInvenCash(c); InventoryHandler.UpdateInventory(c, (byte)InventoryType.ItemType.Pet5); return; } byte TargetType = InventoryType.getItemType(Source.ItemID); byte TargetSlot = chr.Items.GetNextFreeSlot((InventoryType.ItemType)InventoryType.getItemType(Source.ItemID)); Source.Type = TargetType; Source.Slot = TargetSlot; chr.Items.Save(); CashShopPacket.CommodityToInventory(c); InventoryPacket.getInvenCash(c); InventoryHandler.UpdateInventory(c, TargetType); }
public static void Buy_Req(InPacket lea, Client c) { int CharacterID = lea.ReadInt(); int ItemID = lea.ReadInt(); int Slot = lea.ReadShort(); int Quantity = lea.ReadShort(); var chr = c.Character; try { Map map = MapFactory.GetMap(chr.MapX, chr.MapY); Character Seller = null; foreach (Character find in map.Characters) { if (find.CharacterID == CharacterID) { Seller = find; } } ShopData Item = Seller.Shop.Find(i => ItemID == i.ItemID && Slot == i.TargetSlot); byte Type = InventoryType.getItemType(ItemID); byte FreeSlot = chr.Items.GetNextFreeSlot((InventoryType.ItemType)Type); if (Item.Quantity < Quantity || Item == null) { PlayerShopPacket.Buy(c, 0); return; } chr.Money -= (Item.Price * Quantity); InventoryPacket.getInvenMoney(c, chr.Money, -(Item.Price * Quantity)); chr.Items.Add(new Item(Item.ItemID, (short)Quantity, Item.Spirit, Item.Level1, Item.Level2, Item.Level3, Item.Level4, Item.Level5, Item.Level6, Item.Level7, Item.Level8, Item.Level9, Item.Level10, Item.Fusion, Item.IsLocked, Item.Icon, Item.Term, Type, FreeSlot)); InventoryHandler.UpdateInventory(c, Type); //Seller.Shop.Remove(Item); Seller.Items.Remove((byte)Item.SourceType, (byte)Item.SourceSlot); Seller.Items.Add(new Item(Item.ItemID, (short)(Item.Quantity - Quantity), Item.Spirit, Item.Level1, Item.Level2, Item.Level3, Item.Level4, Item.Level5, Item.Level6, Item.Level7, Item.Level8, Item.Level9, Item.Level10, Item.Fusion, Item.IsLocked, Item.Icon, Item.Term, (byte)Item.SourceType, (byte)Item.SourceSlot)); Item.Quantity = Item.Quantity - Quantity; Seller.Shop.Money += (Item.Price * Quantity); Seller.Money += (Item.Price * Quantity); PlayerShopPacket.ShopInfo(c, Seller, CharacterID); InventoryHandler.UpdateInventory(Seller.Client, (byte)Item.SourceType); PlayerShopPacket.SellInfo(Seller.Client); InventoryPacket.getInvenMoney(Seller.Client, Seller.Money, Item.Price * Quantity); PlayerShopPacket.Buy(c, 1); } catch { PlayerShopPacket.Buy(c, 0); return; } }
public static void AbilityRecover_Req(InPacket lea, Client c) { short Slot = lea.ReadShort(); short Type = lea.ReadShort(); var chr = c.Character; switch (Type) { case 0: // 力量還原本 if (chr.Str < 4) { return; } chr.Str--; chr.AbilityBonus++; chr.Items.Remove(3, (byte)Slot, 1); break; case 1: // 精力還原本 if (chr.Dex < 4) { return; } chr.Dex--; chr.AbilityBonus++; chr.Items.Remove(3, (byte)Slot, 1); break; case 2: // 氣力還原本 if (chr.Vit < 4) { return; } chr.Vit--; chr.AbilityBonus++; chr.Items.Remove(3, (byte)Slot, 1); break; case 3: // 智力還原本 if (chr.Int < 4) { return; } chr.Int--; chr.AbilityBonus++; chr.Items.Remove(3, (byte)Slot, 1); break; } InventoryHandler.UpdateInventory(c, 3); StatusPacket.getStatusInfo(c); }
public static void Pet_Name_Req(InPacket lea, Client c) { string Name = lea.ReadString(20); int Slot = lea.ReadInt(); var chr = c.Character; Pet Pet = chr.Pets.Pet((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet); Pet Item = chr.Pets.Pet((byte)InventoryType.ItemType.Pet5, (byte)Slot); Pet.Name = Name; Pet.Save(); chr.Pets.Remove((byte)InventoryType.ItemType.Pet5, (byte)Slot); //PetPacket.PetName(c, Name); MapPacket.warpToMap(c, chr, chr.CharacterID, chr.MapX, chr.MapY, chr.PlayerX, chr.PlayerY); // 先以此代替 InventoryHandler.UpdateInventory(c, (byte)InventoryType.ItemType.Pet5); }
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 MoveItemToBag(InPacket lea, Client gc) { int SourceType = lea.ReadShort(); int SourceSlot = lea.ReadShort(); int TargetSlot = lea.ReadShort(); lea.ReadShort(); int Quantity = lea.ReadInt(); var chr = gc.Character; Storage Source = chr.Storages.GetItem((byte)SourceType, (byte)SourceSlot); int TargetType = InventoryType.getItemType(Source.ItemID); Item Item = chr.Items.getItem((byte)TargetType, (byte)TargetSlot); if (Item == null) { chr.Items.Add(new Item(Source.ItemID, (short)Quantity, Source.Spirit, Source.Level1, Source.Level2, Source.Level3, Source.Level4, Source.Level5, Source.Level6, Source.Level7, Source.Level8, Source.Level9, Source.Level10, Source.Fusion, Source.IsLocked, Source.Icon, Source.Term, (byte)TargetType, (byte)TargetSlot)); } else { if (Source.ItemID != Item.ItemID) { return; } int QuantityTemp = Item.Quantity; chr.Items.Remove((byte)TargetType, (byte)TargetSlot); chr.Items.Add(new Item(Item.ItemID, (short)(QuantityTemp + Quantity), Item.Spirit, Item.Level1, Item.Level2, Item.Level3, Item.Level4, Item.Level5, Item.Level6, Item.Level7, Item.Level8, Item.Level9, Item.Level10, Item.Fusion, Item.IsLocked, Item.Icon, Item.Term, (byte)TargetType, (byte)TargetSlot)); } chr.Storages.Remove((byte)Source.Type, (byte)Source.Slot, Quantity); chr.Save(); StoragePacket.getStoreInfo(gc); InventoryHandler.UpdateInventory(gc, (byte)TargetType); }
public static void MoveItemToStorage(InPacket lea, Client gc) { int SourceType = lea.ReadShort(); int SourceSlot = lea.ReadShort(); int TargetType = lea.ReadShort(); int TargetSlot = lea.ReadShort(); int Quantity = lea.ReadInt(); var chr = gc.Character; Storage Target = chr.Storages.GetItem((byte)TargetType, (byte)TargetSlot); Item Source = chr.Items.getItem((byte)SourceType, (byte)SourceSlot); if (Target != null || Source.ItemID / 100000 == 86 || Source.ItemID / 100000 == 87 || Source.ItemID / 100000 == 92 || Source.ItemID / 100000 == 94 || Source.ItemID / 100000 == 95) { return; } chr.Storages.Add(new Storage(Source.ItemID, Quantity, Source.Spirit, Source.Level1, Source.Level2, Source.Level3, Source.Level4, Source.Level5, Source.Level6, Source.Level7, Source.Level8, Source.Level9, Source.Level10, Source.Fusion, Source.IsLocked, Source.Icon, Source.Term, TargetType, TargetSlot, 0)); chr.Items.Remove((byte)SourceType, (byte)SourceSlot, Quantity); chr.Save(); StoragePacket.getStoreInfo(gc); InventoryHandler.UpdateInventory(gc, (byte)SourceType); }
public static void Fish_Req(InPacket lea, Client c) { var chr = c.Character; int CharacterID = chr.CharacterID; Map map = MapFactory.GetMap(chr.MapX, chr.MapY); int State = 0; if (!chr.IsFishing) { chr.IsFishing = true; } else { chr.IsFishing = false; } State = CheckBait(c); foreach (Character All in map.Characters) { FishPacket.Fish(All.Client, CharacterID, State, chr.IsFishing); } int[] reward = { 8810012, 8820012, 8820022, 8810022, 8820032, 8810032, 8820042, 8810042, 8820052, 8810052, 8820062, 8810062, 8970001, 8970002, 8970003, 8970004, 8970005, 8970006, 8970007, 8970008, 8970009, 8970010, 8970011, 8970012 }; System.Timers.Timer FishTimer = new System.Timers.Timer(50000); FishTimer.Elapsed += delegate { if (!chr.IsFishing) { FishTimer.Stop(); return; } Random rnd = new Random(); int r = rnd.Next(24); try { byte Type = r < 12 ? (byte)InventoryType.ItemType.Spend3 : (byte)InventoryType.ItemType.Other4; byte Slot = chr.Items.GetNextFreeSlot((InventoryType.ItemType)Type); chr.Items.Add(new Item(reward[r], Type, Slot)); chr.Items.Remove((byte)InventoryType.ItemType.Spend3, (byte)chr.UseSlot.Slot(InventoryType.ItemType.Spend3), 1); chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Fusion++; InventoryHandler.UpdateInventory(c, Type); InventoryHandler.UpdateInventory(c, (byte)InventoryType.ItemType.Equip); if (Type != 3) { InventoryHandler.UpdateInventory(c, (byte)InventoryType.ItemType.Spend3); } State = CheckBait(c); if (chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Fusion == 30) { chr.IsFishing = false; State = -1; } if (State != 0) { foreach (Character All in map.Characters) { FishPacket.Fish(All.Client, CharacterID, State, chr.IsFishing); } FishTimer.Stop(); } } catch { State = -3; chr.IsFishing = false; foreach (Character All in map.Characters) { FishPacket.Fish(All.Client, CharacterID, State, chr.IsFishing); } FishTimer.Stop(); } }; FishTimer.Start(); }
public static void Sell_Req(InPacket lea, Client gc) { int ItemID = lea.ReadInt(); byte Type = lea.ReadByte(); byte Slot = lea.ReadByte(); short Quantity = lea.ReadShort(); if (Quantity > 100) { return; } int Money = 0; switch (ItemID / 100000) { case 75: // 耳環 Money = ItemFactory.earringData[ItemID].Price; Money /= 5; break; case 79: // 武器 case 80: // 武器 Money = ItemFactory.weaponData[ItemID].Price; Money /= 5; break; case 81: // 衣服 Money = ItemFactory.topData[ItemID].Price; Money /= 5; break; case 84: // 披風 Money = ItemFactory.capeData[ItemID].Price; Money /= 5; break; case 86: // 帽子 Money = ItemFactory.hatData[ItemID].Price; Money /= 5; break; case 87: // 面具 Money = ItemFactory.maskData[ItemID].Price; Money /= 5; break; case 93: // 武器 Money = ItemFactory.weaponData[ItemID].Price; Money /= 5; break; case 94: // 鬍子 Money = ItemFactory.beardData[ItemID].Price; Money /= 5; break; case 95: // 服裝 Money = ItemFactory.clothingData[ItemID].Price; Money /= 5; break; case 82: // 戒指 Money = ItemFactory.ringData[ItemID].Price; Money /= 5; break; case 83: // 項鍊 Money = ItemFactory.necklaceData[ItemID].Price; Money /= 5; break; case 85: // 封印箱 Money = ItemFactory.soulData[ItemID].Price; Money /= 5; break; case 11: // 拼圖 Money = ItemFactory.jigsawData[ItemID].Price; break; case 88: // 消耗 Money = ItemFactory.useData[ItemID].Price; Money /= 5; break; case 89: // 其他 Money = ItemFactory.etcData[ItemID].Price; break; default: Log.Error("未知的物品型態:" + ItemID / 100000); break; } if (ItemID == 8880011 || ItemID == 8880021 || ItemID == 8880031 || ItemID == 8880041 || ItemID == 8880051 || ItemID == 8880061 || ItemID == 8880071 || ItemID == 8880081 || ItemID == 8880091 || ItemID == 8880101) { Money = 0; } Item Source = gc.Character.Items.getItem(Type, Slot); if (Source != null) { if (Source.Quantity > Quantity) { if (Quantity <= 0) { return; } gc.Character.Items[(InventoryType.ItemType)Source.Type, Source.Slot].Quantity -= Quantity; } else { if (Quantity > Source.Quantity) { return; } gc.Character.Items.Remove(Type, Slot); } gc.Character.Money += (Money * Quantity); InventoryPacket.getInvenMoney(gc, gc.Character.Money, Money); InventoryHandler.UpdateInventory(gc, Type); } }
public static void Buy_Req(InPacket lea, Client gc) { lea.ReadInt(); int ItemID = lea.ReadInt(); int Quantity = lea.ReadInt(); int money = 0; switch (ItemID / 100000) { case 75: // 耳環 money = ItemFactory.earringData[ItemID].Price; break; case 79: // 武器 case 80: // 武器 money = ItemFactory.weaponData[ItemID].Price; break; case 81: // 衣服 money = ItemFactory.topData[ItemID].Price; break; case 84: // 披風 money = ItemFactory.capeData[ItemID].Price; break; case 86: // 帽子 money = ItemFactory.hatData[ItemID].Price; break; case 87: // 面具 money = ItemFactory.maskData[ItemID].Price; break; case 93: // 武器 money = ItemFactory.weaponData[ItemID].Price; break; case 94: // 鬍子 money = ItemFactory.beardData[ItemID].Price; break; case 95: // 服裝 money = ItemFactory.clothingData[ItemID].Price; break; case 82: // 戒指 money = ItemFactory.ringData[ItemID].Price; break; case 83: // 項鍊 money = ItemFactory.necklaceData[ItemID].Price; break; case 85: // 封印箱 money = ItemFactory.soulData[ItemID].Price; break; case 11: // 拼圖 money = ItemFactory.jigsawData[ItemID].Price; break; case 88: // 消耗 money = ItemFactory.useData[ItemID].Price; break; case 89: // 其他 money = ItemFactory.etcData[ItemID].Price; break; default: Log.Error("未知的物品型態:" + ItemID / 100000); break; } if (gc.Character.Money >= (money * Quantity)) { byte Type = (byte)InventoryType.getItemType(ItemID); if (ItemID >= 8880011 && ItemID <= 8880101) // 飛鏢 { Quantity *= 100; } 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)) { // 合併消費物品跟其他物品 if ((finditem.Quantity + Quantity) > 100) { int newqu = Quantity - (100 - finditem.Quantity); gc.Character.Items[(InventoryType.ItemType)finditem.Type, finditem.Slot].Quantity = (short)100; byte Slot = gc.Character.Items.GetNextFreeSlot((InventoryType.ItemType)Type); Item oItem = new Item(ItemID, Type, Slot, (short)newqu); gc.Character.Items.Add(oItem); } else { gc.Character.Items[(InventoryType.ItemType)finditem.Type, finditem.Slot].Quantity += (short)Quantity; } } else { byte Slot = gc.Character.Items.GetNextFreeSlot((InventoryType.ItemType)Type); Item oItem = new Item(ItemID, Type, Slot, (short)Quantity); gc.Character.Items.Add(oItem); } gc.Character.Money -= (money * Quantity); InventoryPacket.getInvenMoney(gc, gc.Character.Money, -(money * Quantity)); InventoryHandler.UpdateInventory(gc, Type); } }
public static void EquipmentCompound(InPacket lea, Client c) { byte SourceType = lea.ReadByte(); byte SourceSlot = lea.ReadByte(); byte UseType = lea.ReadByte(); byte UseSlot = lea.ReadByte(); byte TargetType = lea.ReadByte(); byte TargetSlot = lea.ReadByte(); var chr = c.Character; Item Source = chr.Items.getItem(SourceType, SourceSlot); Item Use = chr.Items.getItem(UseType, UseSlot); Item Target = chr.Items.getItem(TargetType, TargetSlot); ItemData Data = ItemFactory.GetItemData(Source.ItemID); if (Source == null || Use == null || Target == null || Data == null) { return; } int rnd = Randomizer.Next(1, Data.Spirit); if (rnd < Source.Spirit || (Use.ItemID == 8844011 && (rnd < Source.Spirit * 2)) || (Use.ItemID == 8844012 && (rnd < Source.Spirit * 2))) { switch (Source.ItemID) { case 8510011: Target.Level10++; break; case 8510021: Target.Level9++; break; case 8510031: Target.Level8++; break; case 8510041: Target.Level7++; break; case 8510051: Target.Level6++; break; case 8510061: Target.Level5++; break; case 8510071: Target.Level4++; break; case 8510081: Target.Level3++; break; case 8510091: Target.Level2++; break; case 8510101: Target.Level1++; break;; } } Target.Fusion++; chr.Items.Remove(SourceType, SourceSlot); chr.Items.Remove(UseType, UseSlot, 1); InventoryHandler.UpdateInventory(c, SourceType); InventoryHandler.UpdateInventory(c, TargetType); InventoryHandler.UpdateInventory(c, UseType); }
public static void Command_Req(InPacket lea, Client gc) { string[] cmd = lea.ReadString(60).Split(new[] { (char)0x20 }, StringSplitOptions.None); if (gc.Account.Master == 0 || cmd.Length < 1) { return; } var chr = gc.Character; Character victim = null; switch (cmd[0]) { case "//notice": if (cmd.Length != 2) { break; } foreach (Character all in MapFactory.AllCharacters) { GamePacket.getNotice(all.Client, 3, cmd[1]); } break; case "//item": if (cmd.Length != 2 && cmd.Length != 3) { break; } short Quantity = 1; if (cmd.Length == 3) { if (int.Parse(cmd[2]) > 100) { Quantity = 100; } else { Quantity = short.Parse(cmd[2]); } } if (InventoryType.getItemType(int.Parse(cmd[1])) == 1 || InventoryType.getItemType(int.Parse(cmd[1])) == 2) { Quantity = 1; } if (InventoryType.getItemType(int.Parse(cmd[1])) == 5) { return; } chr.Items.Add(new Item(int.Parse(cmd[1]), InventoryType.getItemType(int.Parse(cmd[1])), chr.Items.GetNextFreeSlot((InventoryType.ItemType)InventoryType.getItemType(int.Parse(cmd[1]))), Quantity)); InventoryHandler.UpdateInventory(gc, InventoryType.getItemType(int.Parse(cmd[1]))); break; case "//money": if (cmd.Length != 2) { break; } chr.Money = int.Parse(cmd[1]); InventoryPacket.getInvenMoney(gc, chr.Money, int.Parse(cmd[1])); break; case "//levelup": chr.LevelUp(); break; case "//gogo": if (cmd.Length != 3) { break; } MapPacket.warpToMapAuth(gc, true, short.Parse(cmd[1]), short.Parse(cmd[2]), short.Parse(cmd[3]), short.Parse(cmd[4])); break; case "//hp": if (cmd.Length != 2) { break; } short Hp = short.Parse(cmd[1]); if (Hp > short.MaxValue) { Hp = short.MaxValue; } chr.MaxHp = Hp; chr.Hp = Hp; StatusPacket.getStatusInfo(gc); break; case "//mp": short Mp = short.Parse(cmd[1]); if (Mp > short.MaxValue) { Mp = short.MaxValue; } chr.MaxMp = Mp; chr.Mp = Mp; StatusPacket.getStatusInfo(gc); break; case "//heal": chr.Hp = chr.MaxHp; chr.Mp = chr.MaxMp; chr.Fury = chr.MaxFury; StatusPacket.UpdateHpMp(gc, chr.Hp, chr.Mp, chr.Fury, chr.MaxFury); break; case "//warp": if (cmd.Length != 2) { break; } foreach (Character find in MapFactory.AllCharacters) { if (find.Name.Equals(cmd[1])) { victim = find; } } if (victim != null) { chr.MapX = victim.MapX; chr.MapY = victim.MapY; chr.PlayerX = victim.PlayerX; chr.PlayerY = victim.PlayerY; MapPacket.warpToMapAuth(gc, true, chr.MapX, chr.MapY, chr.PlayerX, chr.PlayerY); } break; case "//ban": if (cmd.Length != 2) { break; } foreach (Character find in MapFactory.AllCharacters) { if (find.Name.Equals(cmd[1])) { victim = find; } } if (victim != null) { dynamic datum = new Datum("accounts"); victim.Client.Account.Banned = 7; victim.Client.Dispose(); } break; case "//save": for (int i = 0; i < MapFactory.AllCharacters.Count; i++) { if (chr.CharacterID == MapFactory.AllCharacters[i].CharacterID) { continue; } MapFactory.AllCharacters[i].Client.Dispose(); } //GameServer.IsAlive = false; break; case "//skillhack": break; case "//serverinfo": GamePacket.NormalNotice(gc, 1, "I: P:15101 U:1 E:1.00 D:1.00 M:1.00 G:1.00"); break; case "//come": case "//oxstate": break; case "//now": DateTime now = DateTime.Now; string nowtime = string.Format("Server Time Now : [{0}-{1}-{2} {3}:{4}:{5}]", now.Year, now.Month, now.Day.ToString("00.##"), now.Hour.ToString("00.##"), now.Minute.ToString("00.##"), now.Second.ToString("00.##")); GamePacket.NormalNotice(gc, 4, nowtime); break; case "//user": break; case "//serverdown": break; case "//test": GamePacket.getNotice(gc, 4, "Tes000t"); break; case "//expbuff": GamePacket.getNotice(gc, 1, "!@ExpEvent2@!"); break; case "//processlist": GamePacket.GmProcessList(gc); GamePacket.NormalNotice(gc, 4, "[GM] Process File has saved in game folder."); break; case "//gameinfo": GamePacket.GmGameInfo(gc); GamePacket.NormalNotice(gc, 4, "[GM] GAME_INFO has copied to your clipboard."); //[GM] Game Log has copied to your clipboard. break; default: break; } }
public static void TradeConfirm(InPacket lea, Client c) { var chr = c.Character; int j = 0; int k = 0; int m = 0; int l = 0; try { // 交易成功 // Item // 個人接收 foreach (Item Item in chr.Trader.Trade.Item) { byte Type = Item.Type; byte Slot = chr.Items.GetNextFreeSlot((InventoryType.ItemType)Type); chr.Items.Add(new Item(Item.ItemID, chr.Trader.Trade.TargetQuantity[m], Item.Spirit, Item.Level1, Item.Level2, Item.Level3, Item.Level4, Item.Level5, Item.Level6, Item.Level7, Item.Level8, Item.Level9, Item.Level10, Item.Fusion, Item.IsLocked, Item.Icon, Item.Term, Type, Slot)); InventoryHandler.UpdateInventory(c, Item.Type); m++; } // 對方接收 foreach (Item Item in chr.Trade.Item) { byte Type = Item.Type; byte Slot = chr.Trader.Items.GetNextFreeSlot((InventoryType.ItemType)Type); chr.Trader.Items.Add(new Item(Item.ItemID, chr.Trade.TargetQuantity[l], Item.Spirit, Item.Level1, Item.Level2, Item.Level3, Item.Level4, Item.Level5, Item.Level6, Item.Level7, Item.Level8, Item.Level9, Item.Level10, Item.Fusion, Item.IsLocked, Item.Icon, Item.Term, Type, Slot)); InventoryHandler.UpdateInventory(chr.Trader.Client, Item.Type); l++; } // Money // 個人 chr.Money += chr.Trader.Trade.Money; // 對方 chr.Trader.Money += chr.Trade.Money; // 個人 if (chr.Trader.Trade.Money > 0) { InventoryPacket.getInvenMoney(c, chr.Money, chr.Trader.Trade.Money); } // 對方 if (chr.Trade.Money > 0) { InventoryPacket.getInvenMoney(chr.Trader.Client, chr.Trader.Money, chr.Trade.Money); } } catch { // 交易失敗 // Item // 個人 foreach (Item Item in chr.Trade.Item) { Item i = chr.Items.getItem(Item.Type, Item.Slot); if (i != null) { // 合併消費物品、其他物品 if (chr.Trade.SourceQuantity[j] + chr.Trade.TargetQuantity[j] <= 100) { chr.Items.Remove(Item.Type, Item.Slot); chr.Items.Add(new Item(Item.ItemID, chr.Trade.SourceQuantity[j], Item.Spirit, Item.Level1, Item.Level2, Item.Level3, Item.Level4, Item.Level5, Item.Level6, Item.Level7, Item.Level8, Item.Level9, Item.Level10, Item.Fusion, Item.IsLocked, Item.Icon, Item.Term, Item.Type, Item.Slot)); } else { chr.Items.Add(Item); } } else { chr.Items.Add(Item); } InventoryHandler.UpdateInventory(c, Item.Type); j++; } // 對方 foreach (Item Item in chr.Trader.Trade.Item) { Item i = chr.Trader.Items.getItem(Item.Type, Item.Slot); if (i != null) { // 合併消費物品、其他物品 if (chr.Trader.Trade.SourceQuantity[k] + chr.Trader.Trade.TargetQuantity[k] <= 100) { chr.Trader.Items.Remove(Item.Type, Item.Slot); chr.Trader.Items.Add(new Item(Item.ItemID, chr.Trader.Trade.SourceQuantity[k], Item.Spirit, Item.Level1, Item.Level2, Item.Level3, Item.Level4, Item.Level5, Item.Level6, Item.Level7, Item.Level8, Item.Level9, Item.Level10, Item.Fusion, Item.IsLocked, Item.Icon, Item.Term, Item.Type, Item.Slot)); } else { chr.Trader.Items.Add(Item); } } else { chr.Trader.Items.Add(Item); } InventoryHandler.UpdateInventory(chr.Trader.Client, Item.Type); k++; } // Money // 個人 chr.Money += chr.Trade.Money; // 對方 chr.Trader.Money += chr.Trader.Trade.Money; // 個人 if (chr.Trade.Money > 0) { InventoryPacket.getInvenMoney(c, chr.Money, chr.Trade.Money); } // 對方 if (chr.Trader.Trade.Money > 0) { InventoryPacket.getInvenMoney(chr.Trader.Client, chr.Trader.Money, chr.Trader.Trade.Money); } TradePacket.TradeFail(c); TradePacket.TradeFail(chr.Trader.Client); return; } TradePacket.TradeSuccessful(c); TradePacket.TradeSuccessful(chr.Trader.Client); }
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); }
public static void TradeCancel(InPacket lea, Client c) { var chr = c.Character; int j = 0; // 個人 chr.Money += chr.Trade.Money; // 對方 chr.Trader.Money += chr.Trader.Trade.Money; // 個人 if (chr.Trade.Money > 0) { InventoryPacket.getInvenMoney(c, chr.Money, chr.Trade.Money); } // 對方 if (chr.Trader.Trade.Money > 0) { InventoryPacket.getInvenMoney(chr.Trader.Client, chr.Trader.Money, chr.Trader.Trade.Money); } // 個人 foreach (Item Item in chr.Trade.Item) { Item i = chr.Items.getItem(Item.Type, Item.Slot); if (i != null) { // 合併消費物品、其他物品 if (chr.Trade.SourceQuantity[j] + chr.Trade.TargetQuantity[j] <= 100) { chr.Items.Remove(Item.Type, Item.Slot); chr.Items.Add(new Item(Item.ItemID, chr.Trade.SourceQuantity[j], Item.Spirit, Item.Level1, Item.Level2, Item.Level3, Item.Level4, Item.Level5, Item.Level6, Item.Level7, Item.Level8, Item.Level9, Item.Level10, Item.Fusion, Item.IsLocked, Item.Icon, Item.Term, Item.Type, Item.Slot)); } else { chr.Items.Add(Item); } } else { chr.Items.Add(Item); } InventoryHandler.UpdateInventory(c, Item.Type); j++; } int k = 0; // 對方 foreach (Item Item in chr.Trader.Trade.Item) { Item i = chr.Trader.Items.getItem(Item.Type, Item.Slot); if (i != null) { // 合併消費物品、其他物品 if (chr.Trader.Trade.SourceQuantity[k] + chr.Trader.Trade.TargetQuantity[k] <= 100) { chr.Trader.Items.Remove(Item.Type, Item.Slot); chr.Trader.Items.Add(new Item(Item.ItemID, chr.Trader.Trade.SourceQuantity[k], Item.Spirit, Item.Level1, Item.Level2, Item.Level3, Item.Level4, Item.Level5, Item.Level6, Item.Level7, Item.Level8, Item.Level9, Item.Level10, Item.Fusion, Item.IsLocked, Item.Icon, Item.Term, Item.Type, Item.Slot)); } else { chr.Trader.Items.Add(Item); } } else { chr.Trader.Items.Add(Item); } InventoryHandler.UpdateInventory(chr.Trader.Client, Item.Type); k++; } TradePacket.TradeCancel(chr.Trader.Client); chr.Trade = null; chr.Trader = null; }
public static void Command_Req(InPacket lea, Client gc) { string[] cmd = lea.ReadString(60).Split(new[] { (char)0x20 }, StringSplitOptions.None); if (gc.Account.Master == 0 || cmd.Length < 1) { return; } var chr = gc.Character; Character victim = null; switch (cmd[0]) { case "//1": case "//公告": case "//notice": if (cmd.Length != 2) { break; } foreach (Character all in MapFactory.AllCharacters) { GamePacket.getNotice(all.Client, 3, cmd[1]); } break; case "//item": if (cmd.Length != 2 && cmd.Length != 3) { break; } short Quantity = 1; if (cmd.Length == 3) { if (int.Parse(cmd[2]) > 100) { Quantity = 100; } else { Quantity = short.Parse(cmd[2]); } } if (InventoryType.getItemType(int.Parse(cmd[1])) == 1 || InventoryType.getItemType(int.Parse(cmd[1])) == 2) { Quantity = 1; } if (InventoryType.getItemType(int.Parse(cmd[1])) == 5) { return; } chr.Items.Add(new Item(int.Parse(cmd[1]), InventoryType.getItemType(int.Parse(cmd[1])), chr.Items.GetNextFreeSlot((InventoryType.ItemType)InventoryType.getItemType(int.Parse(cmd[1]))), Quantity)); InventoryHandler.UpdateInventory(gc, InventoryType.getItemType(int.Parse(cmd[1]))); break; case "//money": if (cmd.Length != 2) { break; } chr.Money = int.Parse(cmd[1]); InventoryPacket.getInvenMoney(gc, chr.Money, int.Parse(cmd[1])); break; case "//levelup": chr.LevelUp(); break; case "//gogo": if (cmd.Length != 3) { break; } MapPacket.warpToMapAuth(gc, true, short.Parse(cmd[1]), short.Parse(cmd[2]), -1, -1); break; case "//hp": if (cmd.Length != 2) { break; } short Hp = short.Parse(cmd[1]); if (Hp > short.MaxValue) { Hp = short.MaxValue; } chr.MaxHp = Hp; chr.Hp = Hp; StatusPacket.getStatusInfo(gc); break; case "//mp": short Mp = short.Parse(cmd[1]); if (Mp > short.MaxValue) { Mp = short.MaxValue; } chr.MaxMp = Mp; chr.Mp = Mp; StatusPacket.getStatusInfo(gc); break; case "//heal": chr.Hp = chr.MaxHp; chr.Mp = chr.MaxMp; chr.Fury = chr.MaxFury; StatusPacket.UpdateHpMp(gc, chr.Hp, chr.Mp, chr.Fury, chr.MaxFury); break; case "//warp": if (cmd.Length != 2) { break; } foreach (Character find in MapFactory.AllCharacters) { if (find.Name.Equals(cmd[1])) { victim = find; } } if (victim != null) { chr.MapX = victim.MapX; chr.MapY = victim.MapY; chr.PlayerX = victim.PlayerX; chr.PlayerY = victim.PlayerY; MapPacket.warpToMapAuth(gc, true, chr.MapX, chr.MapY, chr.PlayerX, chr.PlayerY); } break; case "//ban": if (cmd.Length != 2) { break; } foreach (Character find in MapFactory.AllCharacters) { if (find.Name.Equals(cmd[1])) { victim = find; } } if (victim != null) { dynamic datum = new Datum("accounts"); victim.Client.Account.Banned = 1; victim.Client.Dispose(); } break; case "//save": for (int i = 0; i < MapFactory.AllCharacters.Count; i++) { if (chr.CharacterID == MapFactory.AllCharacters[i].CharacterID) { continue; } MapFactory.AllCharacters[i].Client.Dispose(); } //GameServer.IsAlive = false; break; case "//選擇正派": Quest Quest = new Quest(60); Quest.QuestState = 0x31; chr.Quests.Add(Quest); QuestPacket.getQuestInfo(gc, chr.Quests.getQuests()); chr.Items.Add(new Item(8990019, 4, chr.Items.GetNextFreeSlot(InventoryType.ItemType.Other4))); break; case "//選擇邪派": Quest = new Quest(64); Quest.QuestState = 0x31; chr.Quests.Add(Quest); QuestPacket.getQuestInfo(gc, chr.Quests.getQuests()); chr.Items.Add(new Item(8990020, 4, chr.Items.GetNextFreeSlot(InventoryType.ItemType.Other4))); break; //case "//test": // PartyPacket.PartyInvite(gc); // break; //case "//test2": // PartyPacket.PartyInvite(gc, 1, 1); // break; //case "//test3": // PartyPacket.PartyInvite(gc, 1 , 0); // break; default: break; } }