static void HandlePacket(byte[] packet, Client.GameState client) { if (packet == null) return; if (client == null) return; ushort Length = BitConverter.ToUInt16(packet, 0); ushort ID = BitConverter.ToUInt16(packet, 2); ushort ID2 = BitConverter.ToUInt16(packet, 4); switch (ID) { #region market quest case 2400: { if (client.Entity.QQ1 == 0) { client.Entity.Teleport(1068, 053, 055); } else { client.Send(new Message("you can only make quest once in day", Color.AntiqueWhite, 2005)); } break; } #endregion #region ElitePk Tournament 2223 | 2219 case 2223: { if (client.Entity.MapID == 6002) break; if (ServerBase.Kernel.Elite_PK_Tournament.Start) break; GamePackets.Elite_Pk pk = new Elite_Pk(client.Entity.UID); pk.Send(client); break; } case 2219: { if (client.Entity.MapID == 6002) break; byte[] sed = new byte[36] { 0x1C ,0x00 ,0xAB ,0x08 ,0x04 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0x00 // ; « ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x54 ,0x51 ,0x53 ,0x65 // ; TQSe ,0x72 ,0x76 ,0x65 ,0x72 // ;rver }; client.Send(sed); break; } case 1063: { GamePackets.Guild_Pk pk = new Guild_Pk(client.Entity.UID); pk.Send(client); //byte[] sed = new byte[346]; ////{0x5a ,0x01 ,0x27 ,0x04 ,0x09 ,0x00 ,0x01 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x08 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x21 ,0x42 ,0x72 ,0x61 ,0x73 ,0x69 ,0x6c ,0x54 ,0x6f ,0x50 ,0x54 ,0x65 ,0x61 ,0x6d ,0x21 ,0x00 ,0x45 ,0x2a ,0x00 ,0x00 ,0x0e ,0x00 ,0x00 ,0x00 ,0x40 ,0xd2 ,0xdf ,0x03 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7e ,0x5e ,0x21 ,0x54 ,0x68 ,0x65 ,0x5f ,0x42 ,0x65 ,0x73 ,0x74 ,0x21 ,0x5e ,0x7e ,0x00 ,0x00 ,0x2f ,0x20 ,0x00 ,0x00 ,0x09 ,0x00 ,0x00 ,0x00 ,0x00 ,0x0e ,0x27 ,0x07 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x46 ,0x69 ,0x72 ,0x65 ,0x45 ,0x6d ,0x62 ,0x6c ,0x65 ,0x6d ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x20 ,0x1c ,0x00 ,0x00 ,0x17 ,0x00 ,0x00 ,0x00 ,0x00 ,0xe1 ,0xf5 ,0x05 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7e ,0x44 ,0x2e ,0x30 ,0x2e ,0x4a ,0x2e ,0x7e ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x3f ,0x0c ,0x00 ,0x00 ,0x0d ,0x00 ,0x00 ,0x00 ,0x40 ,0xf6 ,0xd3 ,0x04 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x2d ,0x4e ,0x7e ,0x4f ,0x7e ,0x59 ,0x7e ,0x50 ,0x7e ,0x49 ,0x2d ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x9e ,0x06 ,0x00 ,0x00 ,0x05 ,0x00 ,0x00 ,0x00 ,0x00 ,0x5a ,0x62 ,0x02 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x53 ,0x75 ,0x70 ,0x72 ,0x65 ,0x6d ,0x65 ,0x7e ,0x46 ,0x6f ,0x72 ,0x63 ,0x65 ,0x00 ,0x00 ,0x00 ,0x2f ,0x06 ,0x00 ,0x00 ,0x03 ,0x00 ,0x00 ,0x00 ,0x00 ,0x2d ,0x31 ,0x01 ,0x00 ,0x00 ,0x00 ,0x00 ,0xc8 ,0x00 ,0x00 ,0x00 ,0x53 ,0x69 ,0x6c ,0x65 ,0x6e ,0x54 ,0x5f ,0x48 ,0x65 ,0x41 ,0x6c ,0x4c ,0x23 ,0x30 ,0x31 ,0x00 ,0x40 ,0x03 ,0x00 ,0x00 ,0x04 ,0x00 ,0x00 ,0x00 ,0x80 ,0xf0 ,0xfa ,0x02 ,0x00 ,0x00 ,0x00 ,0x00 ,0xf4 ,0x01 ,0x00 ,0x00 ,0x21 ,0x4e ,0x6f ,0x86 ,0x4d ,0x65 ,0x72 ,0x63 ,0x59 ,0x21 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xe8 ,0x01 ,0x00 ,0x00 ,0x04 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ////}; //client.Send(sed); break; } case 2224: { client.Send(packet); break; } case 2232: { // byte[] sed = new byte[36] // { // 0x1C ,0x00 ,0xAB ,0x08 ,0x04 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x03 ,0x00 // ; « //,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x54 ,0x51 ,0x53 ,0x65 // ; TQSe //,0x72 ,0x76 ,0x65 ,0x72 // ;rver // }; client.Send(packet); break; } case 2233: { GamePackets.Team_Pk pk = new Team_Pk(client.Entity.UID); pk.Send(client); break; } case 2252: { // byte[] sed = new byte[60]; // ;rver }; client.Send(packet); break; } case 1130: { if (client.Entity.TitlePacket != null) { if (packet[9] == 4) { if (client.Entity.TitlePacket.dwParam2 != 0) client.Entity.TitlePacket.Send(client); } if (packet[9] == 3) { client.Entity.TitleActivated = packet[8]; client.Send(packet); client.SendScreen(client.Entity.SpawnPacket, false); } } break; } #endregion #region TopGuilds case 1058: { if (client.Guild != null && client.AsMember != null) { if (client.AsMember != null) { Writer.WriteUInt32((uint)client.AsMember.SilverDonation, 8, packet); if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader) if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) if (client.AsMember.SilverDonation > client.Guild.money_donation) { client.Guild.money_donation = (uint)client.AsMember.SilverDonation; client.Entity.GuildRank = (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.OSupervisor; client.AsMember.Rank = (Conquer_Online_Server.Game.Enums.GuildMemberRank)client.Entity.GuildRank; } Writer.WriteUInt32((uint)client.AsMember.ConquerPointDonation, 20, packet); if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader) if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) if (client.AsMember.ConquerPointDonation > client.Guild.cp_donaion) { client.Guild.cp_donaion = (uint)client.AsMember.ConquerPointDonation; client.Entity.GuildRank = (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.CPSupervisor; client.AsMember.Rank = (Conquer_Online_Server.Game.Enums.GuildMemberRank)client.Entity.GuildRank; } } Writer.WriteUInt32(client.Entity.PKPoints, 12, packet); if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader) if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) if (client.Entity.PKPoints > client.Guild.pkp_donation) { client.Guild.pkp_donation = (uint)client.Entity.PKPoints; client.Entity.GuildRank = (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.PKSupervisor; client.AsMember.Rank = (Conquer_Online_Server.Game.Enums.GuildMemberRank)client.Entity.GuildRank; } if (client.ArenaStatistic != null) { Writer.WriteUInt32(client.ArenaStatistic.CurrentHonor, 24, packet); if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader) if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) if (client.ArenaStatistic.CurrentHonor > client.Guild.honor_donation) { client.Guild.honor_donation = (uint)client.ArenaStatistic.CurrentHonor; client.Entity.GuildRank = (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.HonoraryManager; client.AsMember.Rank = (Conquer_Online_Server.Game.Enums.GuildMemberRank)client.Entity.GuildRank; } } Writer.WriteUInt32(0, 16, packet); if (client.Entity != null) if (client.Entity.MyFlowers != null) { Writer.WriteUInt32((uint)client.Entity.MyFlowers.RedRoses, 28, packet); if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader) if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) if (client.Entity.MyFlowers.RedRoses > client.Guild.rose_donation) { client.Guild.rose_donation = (uint)client.Entity.MyFlowers.RedRoses; client.Entity.GuildRank = (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.RoseSupervisor; client.AsMember.Rank = (Conquer_Online_Server.Game.Enums.GuildMemberRank)client.Entity.GuildRank; } Writer.WriteUInt32((uint)client.Entity.MyFlowers.Tulips, 32, packet); if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader) if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) if (client.Entity.MyFlowers.Tulips > client.Guild.tuil_donation) { client.Guild.tuil_donation = (uint)client.Entity.MyFlowers.Tulips; client.Entity.GuildRank = (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.TulipFollower; client.AsMember.Rank = (Conquer_Online_Server.Game.Enums.GuildMemberRank)client.Entity.GuildRank; } Writer.WriteUInt32((uint)client.Entity.MyFlowers.Lilies, 36, packet); if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader) if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) if (client.Entity.MyFlowers.Lilies > client.Guild.lilies_donation) { client.Guild.lilies_donation = (uint)client.Entity.MyFlowers.Lilies; client.Entity.GuildRank = (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.LilySupervisor; client.AsMember.Rank = (Conquer_Online_Server.Game.Enums.GuildMemberRank)client.Entity.GuildRank; } Writer.WriteUInt32((uint)client.Entity.MyFlowers.Orchads, 40, packet); if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader) if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) if (client.Entity.MyFlowers.Orchads > client.Guild.orchid_donation) { client.Guild.orchid_donation = (uint)client.Entity.MyFlowers.Orchads; client.Entity.GuildRank = (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.OrchidFollower; client.AsMember.Rank = (Conquer_Online_Server.Game.Enums.GuildMemberRank)client.Entity.GuildRank; } Writer.WriteUInt32((uint)(client.Entity.MyFlowers.Orchads + (uint)client.Entity.MyFlowers.RedRoses + (uint)client.Entity.MyFlowers.Tulips + (uint)client.Entity.MyFlowers.Lilies), 44, packet); } if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader) if (client.Entity.GuildRank != (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { if (client.Entity.Name == client.Guild.LeaderName) { client.Entity.GuildRank = (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.LeaderSpouse; client.AsMember.Rank = (Conquer_Online_Server.Game.Enums.GuildMemberRank)client.Entity.GuildRank; } } if (client.Guild != null) client.Guild.SendGuild(client); client.Send(packet); } break; } #endregion #region Guild members (2102) case 2102: { ushort Page = BitConverter.ToUInt16(packet, 8); if (client.Guild != null) { client.Guild.SendMembers(client, Page); } break; } #endregion #region EnitityCreate (1001) case 1001: { if (client.Action == 1) { EnitityCreate EC = new EnitityCreate(); EC.Deserialize(packet); string Message = ""; Boolean Created = Database.EntityTable.CreateEntity(EC, client, ref Message); client.Send(new Message(Message, "ALLUSERS", System.Drawing.Color.Orange, GamePackets.Message.PopUP)); if (Created) Console.WriteLine(client.Account.Username + " Sucesfully Created a new Character " + EC.Name); client.JustCreated = true; } break; } #endregion #region Chat/Message (1004) case 1004: { if (client.Action != 2) return; Message message = new Message(); message.Deserialize(packet); if (message.__Message.Split(new string[] { "\\n" }, StringSplitOptions.RemoveEmptyEntries).Length > 0) message.__Message = message.__Message.Split(new string[] { "\\n" }, StringSplitOptions.RemoveEmptyEntries)[0]; Chat(message, client); break; } #endregion #region Item/Ping (1009) case 1009: { if (client.Action != 2) return; ItemUsage usage = new ItemUsage(false); usage.Deserialize(packet); if (!client.Entity.Dead || usage.ID == ItemUsage.Ping) { switch (usage.ID) { case 52: { var item = Database.ConquerItemTable.LoadItem(usage.UID); item.Mode = Conquer_Online_Server.Game.Enums.ItemMode.ChatItem; item.Send(client); break; } case 41: { var item = Database.ConquerItemTable.LoadItem(usage.UID); usage.dwParam = 5; client.Send(usage); break; } case ItemUsage.ArrowReload: { ReloadArrows(client.Equipment.TryGetItem(ConquerItem.LeftWeapon), client); break; } case ItemUsage.ShowBoothItems: { ShowBoothItems(usage, client); break; } case ItemUsage.AddItemOnBoothForSilvers: case ItemUsage.AddItemOnBoothForConquerPoints: { AddItemOnBooth(usage, client); break; } case ItemUsage.BuyFromBooth: { BuyFromBooth(usage, client); break; } case ItemUsage.RemoveItemFromBooth: { RemoveItemFromBooth(usage, client); break; } case ItemUsage.EquipItem: { EquipItem(usage, client); break; } case ItemUsage.UnequipItem: { UnequipItem(usage, client); break; } case ItemUsage.BuyFromNPC: { HandleBuyFromNPC(usage, client); break; } case ItemUsage.SellToNPC: { HandleSellToNPC(usage, client); break; } case ItemUsage.Repair: { HandleRepair(usage, client); break; } case ItemUsage.MeteorUpgrade: case ItemUsage.DragonBallUpgrade: { UpgradeItem(usage, client); break; } case ItemUsage.Ping: { if (Time32.Now < client.LastPing.AddSeconds(2)) { client.PingCount++; if (client.PingCount == 40) { client.Send(new Message("Speed hack detected!", System.Drawing.Color.BlanchedAlmond, Message.TopLeft)); client.Disconnect(); return; } } if (client.Entity != null) { if (client.Entity.UID != 0) { if (!ServerBase.Kernel.GamePool.ContainsKey(client.Entity.UID)) { ServerBase.Kernel.GamePool.Add(client.Entity.UID, client); } } } client.LastPingT = client.LastPing; client.LastPing = Time32.Now; if (client.LastPing > client.LastPingT.AddSeconds(2)) client.PingCount = 0; usage.TimeStamp += 120; // client.Send(ReturnFinal(packet)); //Network.PacketHandler.HandleBuffer(packet, client); client.Send(usage); if (!ServerBase.Kernel.GamePool.ContainsKey(client.Entity.UID)) if (client.Socket.Connected) { ServerBase.Kernel.GamePool.Add(client.Entity.UID, client); client.Screen.FullWipe(); client.Screen.Reload(null); } break; } case ItemUsage.ViewWarehouse: { usage.dwParam = client.MoneySave; client.Send(usage); break; } case ItemUsage.WarehouseDeposit: { if (client.Entity.Money >= usage.dwParam) { client.Entity.Money -= usage.dwParam; client.MoneySave += usage.dwParam; } break; } case ItemUsage.WarehouseWithdraw: { if (client.MoneySave >= usage.dwParam) { client.Entity.Money += usage.dwParam; client.MoneySave -= usage.dwParam; } break; } case ItemUsage.DropItem: { DropItem(usage, client); break; } case ItemUsage.DropMoney: { DropMoney(usage, client); break; } case ItemUsage.Enchant: { EnchantItem(usage, client); break; } case ItemUsage.SocketTalismanWithItem: { SocketTalismanWithItem(usage, client); break; } case ItemUsage.SocketTalismanWithCPs: { SocketTalismanWithCPs(usage, client); break; } case 40: { uint ItemAdd = (uint)((packet[4] & 0xFF) | ((packet[5] & 0xFF) << 8) | ((packet[6] & 0xFF) << 16) | ((packet[7] & 0xFF) << 24)); //PrintPacket(packet); Interfaces.IConquerItem item_new = null; if (client.Inventory.TryGetItem(ItemAdd, out item_new)) { if (item_new.Bless == 7) return; Queue<uint> amount = new Queue<uint>(packet[20]); for (ushort i = 84; i < 84 + 4 * packet[20]; i += 4) { if (client.Inventory.ContainsUID((uint)((packet[i] & 0xFF) | ((packet[(byte)(i + 1)] & 0xFF) << 8) | ((packet[(byte)(i + 2)] & 0xFF) << 16) | ((packet[(byte)(i + 3)] & 0xFF) << 24)))) amount.Enqueue((uint)((packet[i] & 0xFF) | ((packet[(byte)(i + 1)] & 0xFF) << 8) | ((packet[(byte)(i + 2)] & 0xFF) << 16) | ((packet[(byte)(i + 3)] & 0xFF) << 24))); else return; } byte oldbless = item_new.Bless; if (item_new.Bless == 0 && amount.Count == 5) item_new.Bless = 1; else if (item_new.Bless == 1 && amount.Count == 1) item_new.Bless = 3; else if (item_new.Bless == 3 && amount.Count == 3) item_new.Bless = 5; else if (item_new.Bless == 5 && amount.Count == 5) item_new.Bless = 7; if (oldbless == item_new.Bless) return; while (amount.Count != 0) client.Inventory.Remove(amount.Dequeue(), Conquer_Online_Server.Game.Enums.ItemUse.Remove, true); item_new.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; item_new.Send(client); Database.ConquerItemTable.UpdateItem(item_new, client); } //client.Send(packet); break; } case 53: { uint ItemAdd = BitConverter.ToUInt32(packet, 8); //Interfaces.IConquerItem item_new = null; //if (client.Inventory.TryGetItem(ItemAdd, out item_new)) { uint obtined_points = 0; Database.ConquerItemInformation iteminfo = new Conquer_Online_Server.Database.ConquerItemInformation(ItemAdd, 0); Dictionary<uint, uint> amount = new Dictionary<uint, uint>();//packet[20]); for (ushort i = 80; i < 84 + 4 * packet[20]; i += 4) { uint item_swap = BitConverter.ToUInt32(packet, i); if (client.Inventory.ContainsUID(item_swap)) { Interfaces.IConquerItem item = null; if (client.Inventory.TryGetItem(item_swap, out item)) { amount.Add(item_swap, i); } switch (item.ID) { case 191505: case 191605: case 191705: case 191805: case 191905: case 191405: case 183325: case 183315: case 183375: case 183305: { obtined_points += 300; break; } default: obtined_points += 50; break; } } } if (iteminfo.BaseInformation.ConquerPointsWorth > obtined_points) { uint add_cps = 0; add_cps = (uint)(iteminfo.BaseInformation.ConquerPointsWorth - obtined_points); if (add_cps < client.Entity.ConquerPoints) { client.Entity.ConquerPoints -= add_cps; foreach (uint key in amount.Keys) { if (client.Inventory.ContainsUID(key)) client.Inventory.Remove(key, Conquer_Online_Server.Game.Enums.ItemUse.Remove, true); } client.Inventory.Add(ItemAdd, 0, 1); } } else { foreach (uint key in amount.Keys) { if (client.Inventory.ContainsUID(key)) client.Inventory.Remove(key, Conquer_Online_Server.Game.Enums.ItemUse.Remove, true); } client.Inventory.Add(ItemAdd, 0, 1); } } break; } case ItemUsage.SocketerMan: { #region Socketing UInt32 Count = usage.dwExtraInfo, ItemUID = usage.UID; Byte Type = 0; Interfaces.IConquerItem Item = null; if (client.Inventory.TryGetItem(ItemUID, out Item)) { #region Removing Used Items for (int i = 1; i <= Count; i++) { uint It = BitConverter.ToUInt32(packet, (int)(80 + (4 * i))); Interfaces.IConquerItem Rem = null; if (client.Inventory.TryGetItem(It, out Rem)) { if (Rem.ID == 1088000 && Count == 12) Type = 1; if (Rem.ID == 1088000 && Count == 1) Type = 2; if (Rem.ID == 1088000 && Count == 5) Type = 3; if (Rem.ID == 1200005 && Count == 1) Type = 4; if (Rem.ID == 1200006 && Count == 7) Type = 5; client.Inventory.Remove(Rem, Game.Enums.ItemUse.Remove); } } #endregion #region Type Switch switch (Type) { #region Open First Socket case 1: case 2: { usage.dwParam = 1; Item.Mode = Game.Enums.ItemMode.Update; Item.SocketOne = (Game.Enums.Gem)255; Item.Send(client); Item.Mode = Game.Enums.ItemMode.Default; Conquer_Online_Server.Database.ConquerItemTable.UpdateSockets(Item, client); break; } #endregion #region Open Second Socket case 3: case 5: { usage.dwParam = 1; Item.Mode = Game.Enums.ItemMode.Update; Kernel.SendWorldMessage(new Message("Congratulations! " + client.Entity.Name + " has oppened the second socket into his/her item!", System.Drawing.Color.Yellow, 2011), Kernel.GamePool.Values, client.Entity.UID); Item.SocketTwo = (Game.Enums.Gem)255; Item.Send(client); Item.Mode = Game.Enums.ItemMode.Default; Conquer_Online_Server.Database.ConquerItemTable.UpdateSockets(Item, client); break; } #endregion #region Using Tough Drill case 4: { if (ServerBase.Kernel.Rate(10)) { usage.dwParam = 1; Item.Mode = Game.Enums.ItemMode.Update; Kernel.SendWorldMessage(new Message("Congratulations! " + client.Entity.Name + " has oppened the second socket into his/her item!", System.Drawing.Color.Yellow, 2011), Kernel.GamePool.Values, client.Entity.UID); Item.SocketTwo = (Game.Enums.Gem)255; Item.Send(client); Item.Mode = Game.Enums.ItemMode.Default; Conquer_Online_Server.Database.ConquerItemTable.UpdateSockets(Item, client); } else { usage.dwParam = 0; client.Send(new Message("The ToughDrill has failed. Try your lucky next time!", System.Drawing.Color.Red, Message.TopLeft)); client.Inventory.Add(1200006, 0, 1); } break; } #endregion } #endregion } //dWParam Values, = 0 = Failed, 1 = Suceed, 2 = Nothing client.Send(usage); #endregion break; } case ItemUsage.RedeemGear: { var item = client.DeatinedItem[usage.UID]; if (item != null) { if (DateTime.Now > item.Date.AddDays(7)) { client.Send(new Message("This item is expired!", System.Drawing.Color.Red, Message.TopLeft)); return; } if (client.Entity.ConquerPoints >= item.ConquerPointsCost) { client.Entity.ConquerPoints -= item.ConquerPointsCost; usage.dwParam = client.Entity.UID; usage.dwExtraInfo3 = item.ConquerPointsCost; client.Send(usage); client.Inventory.Add(item.Item, Conquer_Online_Server.Game.Enums.ItemUse.Add); Database.DetainedItemTable.Redeem(item, client); client.DeatinedItem.Remove(item.UID); if (ServerBase.Kernel.GamePool.ContainsKey(item.GainerUID)) { var pClient = ServerBase.Kernel.GamePool[item.GainerUID]; pClient.ClaimableItem[item.UID].OwnerUID = 500; pClient.ClaimableItem[item.UID].MakeItReadyToClaim(); usage.dwParam = pClient.Entity.UID; usage.ID = ItemUsage.ClaimGear; pClient.Send(usage); pClient.ClaimableItem[item.UID].Send(pClient); } Message message = new Message("Thank you for arresting " + item.OwnerName + ", " + item.GainerName + ". The arrested one has redeemed his items and you have received a great deal of ConquerPoints as reward. Congratulations!", System.Drawing.Color.Wheat, Message.Talk); ServerBase.Kernel.SendWorldMessage(message, ServerBase.Kernel.GamePool.Values); } } else { client.Send(new Message("The item you want to redeem has already been redeemed.", System.Drawing.Color.Red, Message.TopLeft)); } break; } case ItemUsage.ClaimGear: { var item = client.ClaimableItem[usage.UID]; if (item != null) { if (item.Bound) { client.Send(new Message("Unnclaimable item!", System.Drawing.Color.Red, Message.TopLeft)); return; } if (DateTime.Now < item.Date.AddDays(7) && item.OwnerUID != 500) { client.Send(new Message("This item is not expired. You cannot claim it yet!", System.Drawing.Color.Red, Message.TopLeft)); return; } if (item.OwnerUID == 500) client.Entity.ConquerPoints += item.ConquerPointsCost; else { client.Inventory.Add(item.Item, Conquer_Online_Server.Game.Enums.ItemUse.Move); Message message = new Message("Thank you for arresting " + item.OwnerName + ", " + item.GainerName + ". The arrested one has redeemed his items and you have received a great deal of ConquerPoints as reward. Congratulations!", System.Drawing.Color.Wheat, Message.Talk); ServerBase.Kernel.SendWorldMessage(message, ServerBase.Kernel.GamePool.Values); } Database.DetainedItemTable.Claim(item, client); client.ClaimableItem.Remove(item.UID); usage.dwParam = client.Entity.UID; usage.dwExtraInfo3 = item.ConquerPointsCost; client.Send(usage); } else { client.Send(new Message("The item you want to claim has already been claimed.", System.Drawing.Color.Red, Message.TopLeft)); } break; } case 34: { break; } case 45: { client.Entity.Teleport(1002, 429, 378); break; } default: { Console.WriteLine("Unhandled item usage type : " + usage.ID); break; } } } break; } #endregion #region String (1015) case 1015: { if (client.Action != 2) return; _String stringpacket = new _String(false); stringpacket.Deserialize(packet); switch (stringpacket.Type) { case _String.WhisperDetails: { if (stringpacket.Texts.Count > 0) { var varr = ServerBase.Kernel.GamePool.Values.GetEnumerator(); varr.MoveNext(); int COunt = ServerBase.Kernel.GamePool.Count; for (uint x = 0; x < COunt; x++) { if (x >= COunt) break; Client.GameState pClient = (varr.Current as Client.GameState); if (pClient.Entity.Name == stringpacket.Texts[0]) { string otherstring = ""; otherstring += pClient.Entity.UID + " "; otherstring += pClient.Entity.Level + " "; otherstring += pClient.Entity.BattlePower + " #"; if (pClient.Entity.GuildID != 0) otherstring += pClient.Guild.Name + " fNone# "; else otherstring += "None fNone# "; otherstring += pClient.Entity.Spouse + " "; otherstring += (byte)(pClient.Entity.NobilityRank) + " "; if (pClient.Entity.Body % 10 < 3) otherstring += "1"; else otherstring += "0"; stringpacket.Texts.Add(otherstring); client.Send(stringpacket); } varr.MoveNext(); } } break; } } break; } #endregion #region KnownPersons (1019) case 1019: { KnownPersons knownP = new KnownPersons(false); knownP.Deserialize(packet); switch (knownP.Type) { case KnownPersons.RequestFriendship: { AddFriend(knownP, client); break; } case KnownPersons.RemovePerson: { RemoveFriend(knownP, client); break; } case KnownPersons.RemoveEnemy: { RemoveEnemy(knownP, client); break; } } break; } #endregion #region Attack (1022) case 1022: { if (client.Action != 2) return; uint dmg = BitConverter.ToUInt32(packet, 24); uint AttackType = BitConverter.ToUInt32(packet, 20); switch (AttackType) { case 39: { if (!Kernel.VotePool.ContainsKey(client.Account.IP)) { if (!Kernel.VotePoolUid.ContainsKey(client.Entity.UID)) { client.Entity.ConquerPoints += 1000; Conquer_Online_Server.Game.ConquerStructures.PlayersVot Vot = new Conquer_Online_Server.Game.ConquerStructures.PlayersVot(); Vot.AdressIp = client.Account.IP; Vot.Uid = client.Entity.UID; Kernel.VotePool.Add(Vot.AdressIp, Vot); Kernel.VotePoolUid.Add(Vot.Uid, Vot); Database.EntityTable.SavePlayersVot(Vot); client.Send(new Conquer_Online_Server.Network.GamePackets.Message("http://5.41.141.216/index.php", 2105)); client.Send(new Message("You Have clamied your Prize 1k Cps Server ", Color.Brown, 1000000)); } else { client.Send(new Conquer_Online_Server.Network.GamePackets.Message("http://5.41.141.216/index.php", 2105)); client.Send(new Message("you can only take prize once in day", Color.Brown, 10000000)); } } else { client.Send(new Conquer_Online_Server.Network.GamePackets.Message("http://5.41.141.216/index.php", 2105)); client.Send(new Message("you can only take prize once in day", Color.Brown, 10000000)); } break; } default: { GamePackets.Attack attack = new Attack(false); attack.Deserialize(packet); if (client.Entity.ContainsFlag(Update.Flags.Ride) && !client.Entity.Owner.Equipment.Free(18)) { Attack(attack, client); return; } else { client.Entity.RemoveFlag(Update.Flags.Ride); } Attack(attack, client); break; } } break; } #endregion #region Teams (1023) case 1023: { if (client.Action != 2) return; Team teamPacket = new Team(); teamPacket.Deserialize(packet); switch (teamPacket.Type) { case Team.Create: CreateTeam(teamPacket, client); break; case Team.AcceptJoinRequest: AcceptRequestToJoinTeam(teamPacket, client); break; case Team.AcceptInvitation: AcceptInviteToJoinTeam(teamPacket, client); break; case Team.InviteRequest: SendInviteToJoinTeam(teamPacket, client); break; case Team.JoinRequest: SendRequestJoinToTeam(teamPacket, client); break; case Team.ExitTeam: LeaveTeam(teamPacket, client); break; case Team.Dismiss: DismissTeam(teamPacket, client); break; case Team.Kick: KickFromTeam(teamPacket, client); break; case Team.ForbidJoining: { if (client.Team != null && client.Team.Teammates != null) foreach (Client.GameState Teammate in client.Team.Teammates) if (Teammate != null) { Teammate.Team.ForbidJoin = true; Teammate.Send(teamPacket); } break; } case Team.UnforbidJoining: { if (client.Team != null && client.Team.Teammates != null) foreach (Client.GameState Teammate in client.Team.Teammates) if (Teammate != null) { Teammate.Team.ForbidJoin = false; Teammate.Send(teamPacket); } break; } case Team.LootMoneyOff: { if (client.Team != null && client.Team.Teammates != null) foreach (Client.GameState Teammate in client.Team.Teammates) if (Teammate != null) { Teammate.Team.PickupMoney = true; Teammate.Send(teamPacket); } break; } case Team.LootMoneyOn: { if (client.Team != null && client.Team.Teammates != null) foreach (Client.GameState Teammate in client.Team.Teammates) if (Teammate != null) { Teammate.Team.PickupMoney = false; Teammate.Send(teamPacket); } break; } case Team.LootItemsOn: { if (client.Team != null && client.Team.Teammates != null) foreach (Client.GameState Teammate in client.Team.Teammates) if (Teammate != null) { Teammate.Team.PickupItems = true; Teammate.Send(teamPacket); } break; } case Team.LootItemsOff: { if (client.Team != null && client.Team.Teammates != null) foreach (Client.GameState Teammate in client.Team.Teammates) if (Teammate != null) { Teammate.Team.PickupItems = false; Teammate.Send(teamPacket); } break; } } break; } #endregion #region Atributes Set (1024) case 1024: { if (client.Action != 2) return; ushort AddStr = BitConverter.ToUInt16(packet, 8); ushort AddAgi = BitConverter.ToUInt16(packet, 12); ushort AddVit = BitConverter.ToUInt16(packet, 16); ushort AddSpi = BitConverter.ToUInt16(packet, 20); if (AddStr > 0) { if (client.Entity.Atributes >= AddStr) { client.Entity.Atributes -= AddStr; client.Entity.Strength += AddStr; } } if (AddAgi > 0) { if (client.Entity.Atributes >= AddAgi) { client.Entity.Atributes -= AddAgi; client.Entity.Agility += AddAgi; } } if (AddVit > 0) { if (client.Entity.Atributes >= AddVit) { client.Entity.Atributes -= AddVit; client.Entity.Vitality += AddVit; } } if (AddSpi > 0) { if (client.Entity.Atributes >= AddSpi) { client.Entity.Atributes -= AddSpi; client.Entity.Spirit += AddSpi; } } //Conquer_Online_Server.Game.Attacking.Calculate.Vitals(client.Entity, true); client.CalculateStatBonus(); client.CalculateHPBonus(); client.GemAlgorithm(); client.SendStatMessage(); break; } #endregion #region Socketing (1027) case 1027: { EmbedSocket socket = new EmbedSocket(false); socket.Deserialize(packet); SocketItem(socket, client); break; } #endregion #region ItemAdding Stabilization case 1038: { ItemAddingStabilization stabilization = new ItemAddingStabilization(false); stabilization.Deserialize(packet); StabilazeArtifact(stabilization, client); break; } #endregion #region LoginPacket (1052) case 1052: { if (client.Action == 1) { Connect connect = new Connect(); connect.Deserialize(packet); AppendConnect(connect, client); } else client.Disconnect(); break; } #endregion #region Trade (1056) case 1056: { if (client.Action != 2) return; Trade trade = new Trade(false); trade.Deserialize(packet); switch (trade.Type) { case Trade.Request: RequestTrade(trade, client); break; case Trade.Close: CloseTrade(trade, client); break; case Trade.AddItem: AddTradeItem(trade, client); break; case Trade.SetMoney: SetTradeMoney(trade, client); break; case Trade.SetConquerPoints: SetTradeConquerPoints(trade, client); break; case Trade.Accept: AcceptTrade(trade, client); break; } break; } #endregion #region Floor items (1101) case 1101: { if (client.Action != 2) return; FloorItem floorItem = new FloorItem(false); floorItem.Deserialize(packet); PickupItem(floorItem, client); break; } #endregion #region Warehouses (1102) case 1102: { if (client.Action != 2) return; Warehouse warehousepacket = new Warehouse(false); warehousepacket.Deserialize(packet); switch (warehousepacket.Type) { case Warehouse.Entire: { Game.ConquerStructures.Warehouse wh = client.Warehouses[(Conquer_Online_Server.Game.ConquerStructures.Warehouse.WarehouseID)warehousepacket.NpcID]; if (wh == null) return; byte count = 0; warehousepacket.Count = 1; warehousepacket.Type = Warehouse.AddItem; for (; count < wh.Count; count++) { warehousepacket.Append(wh.Objects[count]); client.Send(warehousepacket); } break; } case Warehouse.AddItem: { Game.ConquerStructures.Warehouse wh = client.Warehouses[(Conquer_Online_Server.Game.ConquerStructures.Warehouse.WarehouseID)warehousepacket.NpcID]; if (wh == null) return; Interfaces.IConquerItem item = null; if (client.Inventory.TryGetItem(warehousepacket.UID, out item)) { if (wh.Add(item)) { warehousepacket.UID = 0; warehousepacket.Count = 1; warehousepacket.Append(item); client.Send(warehousepacket); return; } } break; } case Warehouse.RemoveItem: { Game.ConquerStructures.Warehouse wh = client.Warehouses[(Conquer_Online_Server.Game.ConquerStructures.Warehouse.WarehouseID)warehousepacket.NpcID]; if (wh == null) return; if (wh.ContainsUID(warehousepacket.UID)) { if (wh.Remove(warehousepacket.UID)) { client.Send(warehousepacket); return; } } break; } default: { Console.WriteLine("Unknown type: " + warehousepacket.Type); break; } } break; } #endregion #region Guild command (1107) case 1107: { GuildCommand command = new GuildCommand(false); command.Deserialize(packet); switch (command.Type) { case GuildCommand.Neutral1: case GuildCommand.Neutral2: { string name = System.Text.ASCIIEncoding.ASCII.GetString(packet, 26, packet[25]); if (client.Guild != null) { if (client.AsMember.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { client.Guild.RemoveAlly(name); foreach (var guild in ServerBase.Kernel.Guilds.Values) { if (guild.Name == name && client.Guild.Name != name) { guild.RemoveAlly(client.Guild.Name); } } client.Guild.RemoveEnemy(name); } } break; } case GuildCommand.Allied: { string name = System.Text.ASCIIEncoding.ASCII.GetString(packet, 26, packet[25]); if (client.Guild != null) { if (client.AsMember.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { AllyGuilds(name, client); } } break; } case GuildCommand.Enemied: { string name = System.Text.ASCIIEncoding.ASCII.GetString(packet, 26, packet[25]); if (client.Guild != null) { if (client.AsMember.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { client.Guild.AddEnemy(name); } } break; } default: { client.Send(packet); break; } case GuildCommand.Bulletin: { string message = System.Text.ASCIIEncoding.ASCII.GetString(packet, 26, packet[25]); if (client.Guild != null) { if (client.AsMember.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { client.Guild.Bulletin = message; client.Guild.SendGuild(client); Database.GuildTable.UpdateBulletin(client.Guild, client.Guild.Bulletin); } } break; } case GuildCommand.DonateSilvers: { if (client.Guild != null) { if (client.Entity.Money >= command.dwParam) { client.Guild.SilverFund += command.dwParam; Database.GuildTable.SaveFunds(client.Guild); client.AsMember.SilverDonation += command.dwParam; client.Entity.Money -= command.dwParam; client.Guild.SendGuild(client); } } break; } case GuildCommand.DonateConquerPoints: { if (client.Guild != null) { if (client.Entity.ConquerPoints >= command.dwParam) { client.Guild.ConquerPointFund += command.dwParam; Database.GuildTable.SaveFunds(client.Guild); client.AsMember.ConquerPointDonation += command.dwParam; client.Entity.ConquerPoints -= command.dwParam; client.Guild.SendGuild(client); } } break; } case GuildCommand.Refresh: { if (client.AsMember != null) { if (client.Guild != null) client.Guild.SendGuild(client); } break; } case GuildCommand.Discharge: { string name = System.Text.ASCIIEncoding.ASCII.GetString(packet, 26, packet[25]); if (client.Guild != null) { if (client.AsMember.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { var member = client.Guild.GetMemberByName(name); if (member.ID != client.Entity.UID) { if (member.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader) { client.Guild.DeputyLeaderCount--; member.Rank = Conquer_Online_Server.Game.Enums.GuildMemberRank.Member; if (member.IsOnline) { client.Guild.SendGuild(member.Client); member.Client.Entity.GuildRank = (ushort)member.Rank; member.Client.Screen.FullWipe(); member.Client.Screen.Reload(null); } } } } } break; } case GuildCommand.Promote: { if (client.Guild != null) { if (client.AsMember.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { if (client.Guild.Members.ContainsKey(command.dwParam)) { var member = client.Guild.Members[command.dwParam]; if (member.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.Member) { member.Rank = Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader; if (member.IsOnline) { client.Guild.SendGuild(member.Client); member.Client.Entity.GuildRank = (ushort)member.Rank; member.Client.Screen.FullWipe(); member.Client.Screen.Reload(null); } } else if (member.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader) { member.Rank = Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader; if (member.IsOnline) { client.Guild.SendGuild(member.Client); member.Client.Entity.GuildRank = (ushort)member.Rank; member.Client.Screen.FullWipe(); member.Client.Screen.Reload(null); } client.AsMember.Rank = Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader; client.Guild.SendGuild(client); client.Entity.GuildRank = (ushort)client.AsMember.Rank; client.Screen.FullWipe(); client.Screen.Reload(null); } } } } break; } case GuildCommand.JoinRequest: { if (ServerBase.Kernel.GamePool.ContainsKey(command.dwParam)) { var Client = ServerBase.Kernel.GamePool[command.dwParam]; if (Client.OnHoldGuildJoin == client.OnHoldGuildJoin && Client.OnHoldGuildJoin != 0) { if (Client.Guild != null) { if (Client.AsMember.Rank != Conquer_Online_Server.Game.Enums.GuildMemberRank.Member) { Client.Guild.AddMember(client); Client.OnHoldGuildJoin = 0; client.OnHoldGuildJoin = 0; } } else { if (client.AsMember.Rank != Conquer_Online_Server.Game.Enums.GuildMemberRank.Member) { client.Guild.AddMember(Client); Client.OnHoldGuildJoin = 0; client.OnHoldGuildJoin = 0; } } return; } if (client.Guild == null) { command.dwParam = client.Entity.UID; Client.Send(command); Client.OnHoldGuildJoin = (uint)new Random().Next(); client.OnHoldGuildJoin = Client.OnHoldGuildJoin; } } break; } case GuildCommand.InviteRequest: { if (ServerBase.Kernel.GamePool.ContainsKey(command.dwParam)) { var Client = ServerBase.Kernel.GamePool[command.dwParam]; if (Client.OnHoldGuildJoin == client.OnHoldGuildJoin && Client.OnHoldGuildJoin != 0) { if (Client.Guild != null) { if (Client.AsMember.Rank != Conquer_Online_Server.Game.Enums.GuildMemberRank.Member) { Client.Guild.AddMember(client); Client.OnHoldGuildJoin = 0; client.OnHoldGuildJoin = 0; } } else { if (client.AsMember.Rank != Conquer_Online_Server.Game.Enums.GuildMemberRank.Member) { client.Guild.AddMember(Client); Client.OnHoldGuildJoin = 0; client.OnHoldGuildJoin = 0; } } return; } if (client.Guild != null) { command.dwParam = client.Entity.UID; Client.Send(command); Client.OnHoldGuildJoin = (uint)new Random().Next(); client.OnHoldGuildJoin = Client.OnHoldGuildJoin; } } break; } case GuildCommand.Quit: { if (client.Guild != null) { if (client.AsMember.Rank != Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { client.Guild.ExpelMember(client.Entity.Name, true); } } break; } } break; } #endregion #region Enlight (1127) case 1127: { Enlight enlight = new Enlight(false); enlight.Deserialize(packet); if (ServerBase.Kernel.GamePool.ContainsKey(enlight.Enlighted)) { var Client = ServerBase.Kernel.GamePool[enlight.Enlighted]; if (enlight.Enlighter == client.Entity.UID && enlight.Enlighted != enlight.Enlighter) { if (Client.Entity.ReceivedEnlightenPoints < 5) { if (client.Entity.EnlightenPoints >= 100) { if (Client.Entity.EnlightmentTime <= 80) { client.Entity.EnlightenPoints -= 100; Client.Entity.EnlightmentStamp = Time32.Now; Client.IncreaseExperience(Game.Attacking.Calculate.Percent((int)Client.ExpBall, .10F), false); Client.SendScreen(packet, true); Client.Entity.ReceivedEnlightenPoints++; Client.Entity.EnlightmentTime += 20; if (client.Entity.EnlightmentTime > 80) client.Entity.EnlightmentTime = 100; else if (client.Entity.EnlightmentTime > 60) client.Entity.EnlightmentTime = 80; else if (client.Entity.EnlightmentTime > 40) client.Entity.EnlightmentTime = 60; else if (client.Entity.EnlightmentTime > 20) client.Entity.EnlightmentTime = 40; else if (client.Entity.EnlightmentTime > 0) client.Entity.EnlightmentTime = 20; } else client.Send(new Message("You can't enlighten " + Client.Entity.Name + " yet because he has to wait a few minutes until he can be enlightened again.", System.Drawing.Color.Blue, Message.TopLeft)); } else client.Send(new Message("You can't enlighten " + Client.Entity.Name + " because you don't have enough enlighten points!", System.Drawing.Color.Blue, Message.TopLeft)); } else client.Send(new Message("You can't enlighten " + Client.Entity.Name + " because he/she was enlightened today five times already!", System.Drawing.Color.Blue, Message.TopLeft)); } } break; } #endregion #region NPC Dialog (2031 + 2032) case 2031: case 2032: { if (client.Action != 2) return; NpcRequest req = new NpcRequest(); req.Deserialize(packet); if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 202)//HoursPK War { if (client.Entity.Owner.Equipment.TryGetItem((byte)12).Plus > 7) { client.Entity.AddFlag(Update.Flags.Ride); Random R = new Random(); int Nr = R.Next(1, 10); if (Nr == 1) client.Entity.Teleport(2525, 114, 078); if (Nr == 2) client.Entity.Teleport(2525, 96, 87); if (Nr == 3) client.Entity.Teleport(2525, 142, 88); if (Nr == 4) client.Entity.Teleport(2525, 115, 115); if (Nr == 5) client.Entity.Teleport(2525, 98, 130); if (Nr == 6) client.Entity.Teleport(2525, 96, 153); if (Nr == 7) client.Entity.Teleport(2525, 112, 162); if (Nr == 8) client.Entity.Teleport(2525, 130, 166); if (Nr == 9) client.Entity.Teleport(2525, 139, 114); if (Nr == 10) client.Entity.Teleport(2525, 156, 119); } } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 167)//Donation War { if (client.Entity.NobilityRank == Game.ConquerStructures.NobilityRank.King) { client.Entity.Teleport(1166, 50, 50);//Kings Map } if (client.Entity.NobilityRank == Game.ConquerStructures.NobilityRank.Prince) { client.Entity.Teleport(1167, 50, 50);//Princes Map } if (client.Entity.NobilityRank == Game.ConquerStructures.NobilityRank.Duke) { client.Entity.Teleport(1168, 50, 50);//Duke Map } } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 133)//5th Elements { client.Entity.Teleport(1233, 36, 34); } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 159)//DeathTeam { client.Entity.Teleport(1595, 125, 130); } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 115)//GuildWar { Random R = new Random(); int Nr = R.Next(1, 10); if (Nr == 1) { client.Entity.Teleport(1038, 351, 341); } if (Nr == 2) { client.Entity.Teleport(1038, 335, 345); } if (Nr == 3) { client.Entity.Teleport(1038, 309, 369); } if (Nr == 4) { client.Entity.Teleport(1038, 283, 340); } if (Nr == 5) { client.Entity.Teleport(1038, 310, 327); } if (Nr == 6) { client.Entity.Teleport(1038, 318, 297); } if (Nr == 7) { client.Entity.Teleport(1038, 347, 309); } if (Nr == 8) { client.Entity.Teleport(1038, 337, 320); } if (Nr == 9) { client.Entity.Teleport(1038, 309, 293); } if (Nr == 10) { client.Entity.Teleport(1038, 371, 300); } } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 202)//HoursPK War { if (client.Entity.Owner.Equipment.TryGetItem((byte)12).Plus > 7) { client.Entity.AddFlag(Update.Flags.Ride); Random R = new Random(); int Nr = R.Next(1, 10); if (Nr == 1) client.Entity.Teleport(2525, 114, 078); if (Nr == 2) client.Entity.Teleport(2525, 96, 87); if (Nr == 3) client.Entity.Teleport(2525, 142, 88); if (Nr == 4) client.Entity.Teleport(2525, 115, 115); if (Nr == 5) client.Entity.Teleport(2525, 98, 130); if (Nr == 6) client.Entity.Teleport(2525, 96, 153); if (Nr == 7) client.Entity.Teleport(2525, 112, 162); if (Nr == 8) client.Entity.Teleport(2525, 130, 166); if (Nr == 9) client.Entity.Teleport(2525, 139, 114); if (Nr == 10) client.Entity.Teleport(2525, 156, 119); } } if (req.InteractType == NpcReply.MessageBox) { if (req.OptionID == 255) { if (client.OnMessageBoxOK != null) { client.OnMessageBoxOK.Invoke(); client.OnMessageBoxOK = null; } } else { if (client.OnMessageBoxCANCEL != null) { client.OnMessageBoxCANCEL.Invoke(); client.OnMessageBoxCANCEL = null; } } } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 249) { Conquer_Online_Server.ServerBase.Kernel.Elite_PK_Tournament.AddMap(client); } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 248) { if (ServerBase.Kernel.PK == false) { client.Send(new Network.GamePackets.NpcReply(6, "The Tournoment has finished time of join.")); } else { client.InPKT = true; PKTournament.PKTHash.Add(client.Entity.UID, client); //Conquer_Online_Server.ServerBase.Kernel.Elite_PK_Tournament.AddMap(client); client.Entity.Teleport(1507, 100, 100); } } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 247) { client.Entity.Teleport(1858, 70, 70); } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 246) { if (ServerBase.Kernel.PK == false) { client.Send(new Network.GamePackets.NpcReply(6, "The Tournoment has finished time of join.")); } else { client.InPKT = true; PKTournament.PKTHash.Add(client.Entity.UID, client); //Conquer_Online_Server.ServerBase.Kernel.Elite_PK_Tournament.AddMap(client); client.Entity.Teleport(1787, 50, 50); } } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 245) { if (ServerBase.Kernel.PK == false) { client.Send(new Network.GamePackets.NpcReply(6, "The Tournoment has finished time of join.")); } else { client.InPKT = true; PKTournament.PKTHash.Add(client.Entity.UID, client); //Conquer_Online_Server.ServerBase.Kernel.Elite_PK_Tournament.AddMap(client); client.Entity.Teleport(1787, 50, 50); } } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 244) { if (ServerBase.Kernel.PK == false) { client.Send(new Network.GamePackets.NpcReply(6, "The Tournoment has finished time of join.")); } else { client.InPKT = true; PKTournament.PKTHash.Add(client.Entity.UID, client); //Conquer_Online_Server.ServerBase.Kernel.Elite_PK_Tournament.AddMap(client); client.Entity.Teleport(1787, 50, 50); } } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 243) { if (ServerBase.Kernel.PK == false) { client.Send(new Network.GamePackets.NpcReply(6, "The Tournoment has finished time of join.")); } else { client.InPKT = true; PKTournament.PKTHash.Add(client.Entity.UID, client); //Conquer_Online_Server.ServerBase.Kernel.Elite_PK_Tournament.AddMap(client); client.Entity.Teleport(1787, 50, 50); } } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 242) { if (ServerBase.Kernel.PK == false) { client.Send(new Network.GamePackets.NpcReply(6, "The Tournoment has finished time of join.")); } else { client.InPKT = true; PKTournament.PKTHash.Add(client.Entity.UID, client); //Conquer_Online_Server.ServerBase.Kernel.Elite_PK_Tournament.AddMap(client); client.Entity.Teleport(1787, 50, 50); } } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 241) { if (ServerBase.Kernel.PK == false) { client.Send(new Network.GamePackets.NpcReply(6, "The Tournoment has finished time of join.")); } else { client.InPKT = true; PKTournament.PKTHash.Add(client.Entity.UID, client); //Conquer_Online_Server.ServerBase.Kernel.Elite_PK_Tournament.AddMap(client); client.Entity.Teleport(1787, 50, 50); } } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 240) { if (ServerBase.Kernel.PK == false) { client.Send(new Network.GamePackets.NpcReply(6, "The Tournoment has finished time of join.")); } else { client.InPKT = true; PKTournament.PKTHash.Add(client.Entity.UID, client); //Conquer_Online_Server.ServerBase.Kernel.Elite_PK_Tournament.AddMap(client); client.Entity.Teleport(1787, 50, 50); } } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 238) { client.Entity.Teleport(2555, 50, 50); } if (client.Map.BaseID != 6001 && !client.Entity.Dead && req.OptionID == 239) { if (Program.Steed == false) { client.Send(new Network.GamePackets.NpcReply(6, "The SteedRace has finished time of join.")); } else { Conquer_Online_Server.Interfaces.IConquerItem I = client.Equipment.TryGetItem(12); if (I != null && I.ID != 0) { client.Entity.srjoin = 1; client.Entity.Teleport(1950, 077, 157); client.Entity.AddFlag(Update.Flags.Ride); } else { client.Send(new Network.GamePackets.NpcReply(6, "You Dont have a Steed .")); } } } else { if (ID == 2031) client.ActiveNpc = req.NpcID; if (req.NpcID == 12) { if (client.Entity.VIPLevel > 0) { Data data = new Data(true); data.ID = Data.OpenWindow; data.UID = client.Entity.UID; data.TimeStamp = Time32.Now; data.dwParam = Data.WindowCommands.VIPWarehouse; data.wParam1 = client.Entity.X; data.wParam2 = client.Entity.Y; client.WarehouseOpen = true; client.Send(data); break; } } Interfaces.INpc npc = null; if (req.InteractType == 102) { if (client.Guild != null) { if (client.AsMember.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { client.Guild.ExpelMember(req.Input, false); } } return; } if (client.Map.Npcs.TryGetValue(client.ActiveNpc, out npc)) { if (ServerBase.Kernel.GetDistance(client.Entity.X, client.Entity.Y, npc.X, npc.Y) > 17) return; if (req.OptionID == 255 || (req.OptionID == 0 && ID == 2032)) return; req.NpcID = client.ActiveNpc; //NpcDialogs.Dialogs.GetDialog(req, client); Dialogs.GetDialog(req, client); } } break; } #endregion #region Compose (2036) case 2036: { Compose compose = new Compose(false); compose.Deserialize(packet); ComposePlus(compose, client); break; } #endregion #region Offline TG (2044) case 2044: { OfflineTGRequest otgr = new OfflineTGRequest(false); otgr.Deserialize(packet); switch (otgr.ID) { case OfflineTGRequest.OnTrainingTimeRequested: { otgr.Minutes = 900; client.Send(otgr); break; } case OfflineTGRequest.OnConfirmation: { client.Entity.PreviousMapID = client.Entity.MapID; client.Entity.PrevX = client.Entity.X; client.Entity.PrevY = client.Entity.Y; client.Entity.MapID = 601; client.Entity.X = 64; client.Entity.Y = 56; client.OfflineTGEnterTime = DateTime.Now; client.Disconnect(); break; } case OfflineTGRequest.ClaimExperience: { var T1 = new TimeSpan(DateTime.Now.Ticks); var T2 = new TimeSpan(client.OfflineTGEnterTime.Ticks); ushort minutes = (ushort)(T1.TotalMinutes - T2.TotalMinutes); minutes = (ushort)Math.Min((ushort)900, minutes); double expballGain = (double)300 * (double)minutes / (double)900; while (expballGain >= 100) { expballGain -= 100; client.IncreaseExperience(client.ExpBall, false); } if (expballGain != 0) client.IncreaseExperience((uint)(client.ExpBall * (expballGain / 100)), false); client.Entity.SetLocation(client.Entity.PreviousMapID, client.Entity.PrevX, client.Entity.PrevY); if (client.Map.ID == 1036 || client.Map.ID == 1039) client.Entity.Teleport(1002, 430, 378); else { switch (client.Map.ID) { default: { client.Entity.Teleport(1002, 429, 378); break; } case 1000: { client.Entity.Teleport(1000, 500, 650); break; } case 1020: { client.Entity.Teleport(1020, 565, 562); break; } case 1011: { client.Entity.Teleport(1011, 188, 264); break; } case 6001: { client.Entity.Teleport(6001, 030, 075); break; } case 1015: { client.Entity.Teleport(1015, 717, 571); break; } } } client.OfflineTGEnterTime = DateTime.Now; break; } default: client.Send(otgr); break; } break; } #endregion #region Trade partner (2046) case 2046: { TradePartner partner = new TradePartner(false); partner.Deserialize(packet); switch (partner.Type) { case TradePartner.RequestPartnership: RequestTradePartnership(partner, client); break; case TradePartner.RejectRequest: RejectPartnership(partner, client); break; case TradePartner.BreakPartnership: BreakPartnership(partner, client); break; } break; } #endregion #region ItemLock (2048) case 2048: { if (client.Action != 2) return; ItemLock itemlock = new ItemLock(false); itemlock.Deserialize(packet); switch (itemlock.ID) { case ItemLock.RequestLock: LockItem(itemlock, client); break; case ItemLock.RequestUnlock: UnlockItem(itemlock, client); break; } break; } #endregion #region Broadcast (2050) case 2050: { Broadcast cast = new Broadcast(false); cast.Deserialize(packet); switch (cast.Type) { case Broadcast.ReleaseSoonMessages: { BroadcastInfoAwaiting(cast, client); break; } case Broadcast.MyMessages: { BroadcastClientMessages(cast, client); break; } case Broadcast.BroadcastMessage: { if (Game.ConquerStructures.Broadcast.Broadcasts.Count == ServerBase.Constants.MaxBroadcasts) { client.Send(new Message("You cannot send any broadcasts for now. The limit has been reached. Wait until a broadcast is chopped down.", System.Drawing.Color.Red, Message.TopLeft)); break; } if (client.Entity.ConquerPoints >= 5) { client.Entity.ConquerPoints = (uint)Math.Max(0, (int)((int)client.Entity.ConquerPoints - (int)5)); Game.ConquerStructures.Broadcast.BroadcastStr broadcast = new Conquer_Online_Server.Game.ConquerStructures.Broadcast.BroadcastStr(); broadcast.EntityID = client.Entity.UID; broadcast.EntityName = client.Entity.Name; broadcast.ID = Game.ConquerStructures.Broadcast.BroadcastCounter.Next; if (cast.List[0].Length > 80) cast.List[0] = cast.List[0].Remove(80); broadcast.Message = cast.List[0]; if (Game.ConquerStructures.Broadcast.Broadcasts.Count == 0) { if (Game.ConquerStructures.Broadcast.CurrentBroadcast.EntityID == 1) { Game.ConquerStructures.Broadcast.CurrentBroadcast = broadcast; Game.ConquerStructures.Broadcast.LastBroadcast = DateTime.Now; ServerBase.Kernel.SendWorldMessage(new Message(cast.List[0], "ALLUSERS", client.Entity.Name, System.Drawing.Color.Red, Message.BroadcastMessage), ServerBase.Kernel.GamePool.Values); client.Send(cast); break; } } Game.ConquerStructures.Broadcast.Broadcasts.Add(broadcast); cast.dwParam = (uint)Game.ConquerStructures.Broadcast.Broadcasts.Count; client.Send(cast); break; } break; } case Broadcast.Urgen5CPs: { for (int c = 0; c < Game.ConquerStructures.Broadcast.Broadcasts.Count; c++) { var broadcast = Game.ConquerStructures.Broadcast.Broadcasts[c]; if (broadcast.ID == cast.dwParam) { if (c != 0) { if (client.Entity.ConquerPoints >= 5) { broadcast.SpentCPs += 5; client.Entity.ConquerPoints = (uint)Math.Max(0, (int)((int)client.Entity.ConquerPoints - (int)5)); if (Game.ConquerStructures.Broadcast.Broadcasts[c - 1].SpentCPs <= broadcast.SpentCPs) { Game.ConquerStructures.Broadcast.Broadcasts[c] = Game.ConquerStructures.Broadcast.Broadcasts[c - 1]; Game.ConquerStructures.Broadcast.Broadcasts[c - 1] = broadcast; } else { Game.ConquerStructures.Broadcast.Broadcasts[c] = broadcast; } } } } } break; } case Broadcast.Urgen15CPs: { for (int c = 0; c < Game.ConquerStructures.Broadcast.Broadcasts.Count; c++) { var broadcast = Game.ConquerStructures.Broadcast.Broadcasts[c]; if (broadcast.ID == cast.dwParam) { if (c != 0) { if (client.Entity.ConquerPoints >= 15) { broadcast.SpentCPs += 15; client.Entity.ConquerPoints = (uint)Math.Max(0, (int)((int)client.Entity.ConquerPoints - (int)15)); for (int b = c - 1; b > 0; b--) Game.ConquerStructures.Broadcast.Broadcasts[b] = Game.ConquerStructures.Broadcast.Broadcasts[b - 1]; Game.ConquerStructures.Broadcast.Broadcasts[0] = broadcast; } } } } break; } } break; } #endregion #region Nobility (2064) case 2064: { NobilityInfo nobility = new NobilityInfo(false); nobility.Deserialize(packet); Game.ConquerStructures.Nobility.Handle(nobility, client); break; } #endregion #region Mentor prize (2067) #region MentorPremio case 1036: { switch (packet[4]) { #region Send case 0: // Writer.WriteUInt32(client.Entity.Contribution_Experience.Training_Exp, 8, packet); //Writer.WriteUInt32(client.Entity.Contribution_Experience.Blessing_Exp, 12, packet); client.Send(packet); break; #endregion #region Claim Training Exp case 1: { if (client.Entity.Contribution_Experience.Blessing_Exp > 0) { ulong Increase = (ulong)(client.ExpBall * (client.Entity.Contribution_Experience.Training_Exp / 6000000)); client.Entity.Contribution_Experience.Training_Exp = 0; client.IncreaseExperience(Increase, true); client.Send(packet); } break; } #endregion #region Claim Blessing Exp case 2: { if (client.Entity.Contribution_Experience.Blessing_Exp > 0) { ulong Increase = (ulong)(client.ExpBall * (client.Entity.Contribution_Experience.Blessing_Exp / 6000000)); client.Entity.Contribution_Experience.Blessing_Exp = 0; client.IncreaseExperience(Increase, true); client.Send(packet); } break; } #endregion default: Console.WriteLine("Unknown 1036 claim type " + packet[4]); break; } break; } #endregion case 2067: { MentorPrize prize = new MentorPrize(false); prize.Deserialize(packet); switch (prize.Prize_Type) { case MentorPrize.ClaimExperience: { // client.IncreaseExperience((ulong)(((double)client.PrizeExperience / 606) * client.ExpBall), false); client.PrizeExperience = 0; foreach (var appr in client.Apprentices.Values) { appr.Actual_Experience = 0; Database.KnownPersons.SaveApprenticeInfo(appr); } prize.Mentor_ID = client.Entity.UID; prize.Prize_Type = MentorPrize.Show; prize.Prize_Experience = client.PrizeExperience; prize.Prize_HeavensBlessing = client.PrizeHeavenBlessing; prize.Prize_PlusStone = client.PrizePlusStone; client.Send(prize); break; } case MentorPrize.ClaimHeavenBlessing: { client.AddBless(client.PrizeHeavenBlessing); client.PrizeHeavenBlessing = 0; foreach (var appr in client.Apprentices.Values) { appr.Actual_HeavenBlessing = 0; Database.KnownPersons.SaveApprenticeInfo(appr); } prize.Mentor_ID = client.Entity.UID; prize.Prize_Type = MentorPrize.Show; prize.Prize_Experience = client.PrizeExperience; prize.Prize_HeavensBlessing = client.PrizeHeavenBlessing; prize.Prize_PlusStone = client.PrizePlusStone; client.Send(prize); break; } case MentorPrize.ClaimPlus: { int stones = client.PrizePlusStone / 100; int totake = stones; if (stones > 0) { for (; stones > 0; stones--) { client.PrizePlusStone -= 100; if (!client.Inventory.Add(730001, 1, 1)) break; } } foreach (var appr in client.Apprentices.Values) { if (appr.Actual_Plus >= totake) { appr.Actual_Plus -= (ushort)totake; totake = 0; } else { totake -= appr.Actual_Plus; appr.Actual_Plus = 0; } Database.KnownPersons.SaveApprenticeInfo(appr); } prize.Mentor_ID = client.Entity.UID; prize.Prize_Type = MentorPrize.Show; prize.Prize_Experience = client.PrizeExperience; prize.Prize_HeavensBlessing = client.PrizeHeavenBlessing; prize.Prize_PlusStone = client.PrizePlusStone; client.Send(prize); break; } case MentorPrize.Show: { prize.Mentor_ID = client.Entity.UID; prize.Prize_Type = MentorPrize.Show; prize.Prize_Experience = client.PrizeExperience; prize.Prize_HeavensBlessing = client.PrizeHeavenBlessing; prize.Prize_PlusStone = client.PrizePlusStone; client.Send(prize); break; } } break; } #endregion #region MentorApprentice (2065) case 2065: { MentorApprentice ma = new MentorApprentice(false); ma.Deserialize(packet); switch (ma.Type) { case MentorApprentice.LeaveMentor: { LeaveMentor(ma, client); break; } case MentorApprentice.ExpellApprentice: { ExpelApprentice(ma, client); break; } case MentorApprentice.RequestApprentice: { AddApprentice(ma, client); break; } case MentorApprentice.RequestMentor: { AddMentor(ma, client); break; } case MentorApprentice.AcceptRequestApprentice: { AcceptRequestApprentice(ma, client); break; } case MentorApprentice.AcceptRequestMentor: { AcceptRequestMentor(ma, client); break; } } break; } case 2066: { MentorInformation info = new MentorInformation(false); info.Deserialize(packet); if (info.Mentor_Type == 1) { client.ReviewMentor(); } break; } #endregion #region PurifyItem (2076) case 2076: { Purification ps = new Purification(false); ps.Deserialize(packet); switch (ps.Mode) { case Purification.Purify: PurifyItem(ps, client); break; case Purification.Purify1: new Game.Features.Refinery.Handle(packet, client); break; } break; } #endregion #region Arsenal Guild case 2202: { ArsenalInscribitionList list = new ArsenalInscribitionList(); client.Send(list.Build(packet, client.Guild)); break; } case 2203: { client.Guild.Arsenal.Update(client.Guild); client.Send(client.Guild.A_Packet); Database.ArsenalsTable.Load(client.Guild); #region Handle byte pType = packet[4]; byte i_type = packet[8]; uint i_Uid = BitConverter.ToUInt32(packet, 12); switch (pType) { case 0://Unlock { uint value = 5000000; if (client.Guild.SilverFund >= value) { if (i_type == 2 || i_type == 3) { value = 10000000; } if (i_type >= 3 && i_type <= 5) { value = 15000000; } if (i_type == 6 || i_type == 7) { value = 20000000; } if (client.Guild.SilverFund >= value) { client.Guild.SilverFund -= value; Database.ArsenalsTable.CreateArsenal((ushort)client.Guild.ID, (Game.ConquerStructures.Society.ArsenalType)i_type); } else client.Send(new Network.GamePackets.Message("sorry, you need " + value + " guild Found", System.Drawing.Color.Red, Message.TopLeft).ToArray()); } else client.Send(new Network.GamePackets.Message("sorry, you need " + value + " guild Found", System.Drawing.Color.Red, Message.TopLeft).ToArray()); break; } case 1://Inscribe { Interfaces.IConquerItem Item = null; if (client.Inventory.TryGetItem(i_Uid, out Item)) { client.Guild.Arsenal.Inscribe((Game.ConquerStructures.Society.ArsenalType)i_type, Item, client); client.Guild.Arsenal.Update((Game.ConquerStructures.Society.ArsenalType)i_type, client.Guild); } break; } case 2://Uninscribe { Game.ConquerStructures.Society.ArsenalSingle AS = null; if (client.Guild.Arsenal.Inscribed[(Game.ConquerStructures.Society.ArsenalType)i_type].TryGetValue(i_Uid, out AS)) { client.Guild.Arsenal.Uninscribe((Game.ConquerStructures.Society.ArsenalType)i_type, AS, client); client.Guild.Arsenal.Update((Game.ConquerStructures.Society.ArsenalType)i_type, client.Guild); } break; } case 3://Enhance { //client.Entity.Mentors.Share(); client.Guild.A_Packet.SetTotals2(); client.Send(client.Guild.A_Packet); break; } case 4://Show Main Info { client.Guild.A_Packet.SetTotals(); client.Send(client.Guild.A_Packet); break; } } client.Send(packet); #endregion break; } #endregion #region Arena (2207<->2211) case 2207://Request Arena ranking List { //Code snippet that belongs to Ultimation ushort PageIndex = BitConverter.ToUInt16(packet, 6); Game.ConquerStructures.Arena.Statistics.ShowRankingPage(packet[4], PageIndex, client); break; } case 2206: { //Code snippet that belongs to Ultimation ushort PageIndex = BitConverter.ToUInt16(packet, 4); Game.ConquerStructures.Arena.QualifyEngine.RequestGroupList(client, PageIndex); break; } case 2205://Arena Signup! { //Code snippet that belongs to Ultimation uint DialogID = BitConverter.ToUInt32(packet, 4); uint ButtonID = BitConverter.ToUInt32(packet, 8); switch (DialogID) { case 4: { switch (ButtonID) { case 0: { Game.ConquerStructures.Arena.QualifyEngine.DoQuit(client); break; } } break; } case 0: Game.ConquerStructures.Arena.QualifyEngine.DoSignup(client); client.Send(packet); break; case 1: Game.ConquerStructures.Arena.QualifyEngine.DoQuit(client); client.Send(packet); break; case 3: { switch (ButtonID) { case 2: Game.ConquerStructures.Arena.QualifyEngine.DoGiveUp(client); break; case 1: Game.ConquerStructures.Arena.QualifyEngine.DoAccept(client); break; } break; } case 5: { if (client.ArenaStatistic.ArenaPoints <= 1500) if (client.Entity.Money >= 9000000) { client.Entity.Money -= 9000000; client.ArenaStatistic.ArenaPoints += 1500; client.Send(client.ArenaStatistic); } break; } case 11://Win/Lose Dialog { switch (ButtonID) { case 0: Game.ConquerStructures.Arena.QualifyEngine.DoSignup(client); break; } break; } } break; } case 2208://Request Arena Winner List { //Code snippet that belongs to Ultimation Game.ConquerStructures.Arena.Statistics.ShowWiners(client); break; } case 2209: { client.ArenaStatistic.Send(client); break; } case 2211: { ushort Type = BitConverter.ToUInt16(packet, 4); uint Fighter = BitConverter.ToUInt32(packet, 10); if (Type == 0) { if (ServerBase.Kernel.GamePool.ContainsKey(Fighter)) { Client.GameState Client = ServerBase.Kernel.GamePool[Fighter]; if (Client.QualifierGroup != null) { if (Client.QualifierGroup.Inside) { if (!Client.QualifierGroup.Done) { Client.QualifierGroup.BeginWatching(client); } } } } } else if (Type == 1) { Game.ConquerStructures.Arena.QualifyEngine.DoLeave(client); } else if (Type == 4) { string name = ""; for (int c = 22; c < packet.Length; c++) { if (packet[c] != 0) name += (char)packet[c]; else break; } Game.ConquerStructures.Arena.QualifyEngine.DoCheer(client, name); } break; } #endregion #region Movement/Walk (10005) case 10005: { if (client.Action != 2) return; GroundMovement groundMovement = new GroundMovement(false); groundMovement.Deserialize(packet); PlayerGroundMovment(groundMovement, client); break; } #endregion #region Data (10010) case 10010: { if (client.Action != 2) return; Data gData = new Data(false); gData.Deserialize(packet); switch (gData.ID) { case Data.SwingPickaxe: client.Mining = true; break; case Data.Revive: Revive(gData, client); // Revive(gData, client); break; case Data.UsePortal: if (client.Entity.MapID == 601) { client.Entity.Teleport(601, 063, 055); } else UsePortal(gData, client); break; case Data.ChangePKMode: ChangePKMode(gData, client); break; case Data.ChangeAction: ChangeAction(gData, client); break; case Data.ChangeDirection: ChangeDirection(gData, client); break; case Data.Hotkeys: client.Send(packet); break; case 408://steed soul remoeve { break; } case Data.ConfirmSpells: if (client.Spells != null) foreach (Interfaces.ISkill spell in client.Spells.Values) if (spell.ID != 3060) spell.Send(client); client.Send(packet); break; case Data.ConfirmProficiencies: if (client.Proficiencies != null) foreach (Interfaces.ISkill proficiency in client.Proficiencies.Values) proficiency.Send(client); client.Send(packet); break; case Data.ConfirmGuild: client.Send(packet); break; case Data.ConfirmFriends: #region Friends/Enemy/TradePartners/Apprentices Message msg2 = new Message("Your friend, " + client.Entity.Name + ", has logged on.", System.Drawing.Color.Red, Message.TopLeft); foreach (Game.ConquerStructures.Society.Friend friend in client.Friends.Values) { if (friend.IsOnline) { var pckt = new KnownPersons(true) { UID = client.Entity.UID, Type = KnownPersons.RemovePerson, Name = client.Entity.Name, Online = true }; friend.Client.Send(pckt); pckt.Type = KnownPersons.AddFriend; friend.Client.Send(pckt); friend.Client.Send(msg2); } client.Send(new KnownPersons(true) { UID = friend.ID, Type = KnownPersons.AddFriend, Name = friend.Name, Online = friend.IsOnline }); if (friend.Message != "") { client.Send(new Message(friend.Message, client.Entity.Name, friend.Name, System.Drawing.Color.Red, Message.Whisper)); Database.KnownPersons.UpdateMessageOnFriend(friend.ID, client.Entity.UID, ""); } } foreach (Game.ConquerStructures.Society.Enemy enemy in client.Enemy.Values) { client.Send(new KnownPersons(true) { UID = enemy.ID, Type = KnownPersons.AddEnemy, Name = enemy.Name, Online = enemy.IsOnline }); } Message msg3 = new Message("Your partner, " + client.Entity.Name + ", has logged in.", System.Drawing.Color.Red, Message.TopLeft); foreach (Game.ConquerStructures.Society.TradePartner partner in client.Partners.Values) { if (partner.IsOnline) { var packet3 = new TradePartner(true) { UID = client.Entity.UID, Type = TradePartner.BreakPartnership, Name = client.Entity.Name, HoursLeft = (int)(new TimeSpan(partner.ProbationStartedOn.AddDays(3).Ticks).TotalHours - new TimeSpan(DateTime.Now.Ticks).TotalHours), Online = true }; partner.Client.Send(packet3); packet3.Type = TradePartner.AddPartner; partner.Client.Send(packet3); partner.Client.Send(msg3); } var packet4 = new TradePartner(true) { UID = partner.ID, Type = TradePartner.AddPartner, Name = partner.Name, HoursLeft = (int)(new TimeSpan(partner.ProbationStartedOn.AddDays(3).Ticks).TotalHours - new TimeSpan(DateTime.Now.Ticks).TotalHours), Online = partner.IsOnline }; client.Send(packet4); } foreach (Game.ConquerStructures.Society.Apprentice appr in client.Apprentices.Values) { if (appr.IsOnline) { ApprenticeInformation AppInfo = new ApprenticeInformation(); AppInfo.Apprentice_ID = appr.ID; AppInfo.Apprentice_Level = appr.Client.Entity.Level; AppInfo.Apprentice_Class = appr.Client.Entity.Class; AppInfo.Apprentice_PkPoints = appr.Client.Entity.PKPoints; AppInfo.Apprentice_Experience = appr.Actual_Experience; AppInfo.Apprentice_Composing = appr.Actual_Plus; AppInfo.Apprentice_Blessing = appr.Actual_HeavenBlessing; AppInfo.Apprentice_Name = appr.Name; AppInfo.Apprentice_Online = true; AppInfo.Apprentice_Spouse_Name = appr.Client.Entity.Spouse; AppInfo.Enrole_date = appr.EnroleDate; AppInfo.Mentor_ID = client.Entity.UID; AppInfo.Mentor_Mesh = client.Entity.Mesh; AppInfo.Mentor_Name = client.Entity.Name; AppInfo.Type = 2; client.Send(AppInfo); MentorInformation Information = new MentorInformation(true); Information.Mentor_Type = 1; Information.Mentor_ID = client.Entity.UID; Information.Apprentice_ID = appr.ID; Information.Enrole_Date = appr.EnroleDate; Information.Mentor_Level = client.Entity.Level; Information.Mentor_Class = client.Entity.Class; Information.Mentor_PkPoints = client.Entity.PKPoints; Information.Mentor_Mesh = client.Entity.Mesh; Information.Mentor_Online = true; Information.Shared_Battle_Power = (uint)(((client.Entity.BattlePower - client.Entity.ExtraBattlePower) - (appr.Client.Entity.BattlePower - appr.Client.Entity.ExtraBattlePower)) / 3.3F); Information.String_Count = 3; Information.Mentor_Name = client.Entity.Name; Information.Apprentice_Name = appr.Name; Information.Mentor_Spouse_Name = client.Entity.Spouse; appr.Client.ReviewMentor(); appr.Client.Send(Information); } else { ApprenticeInformation AppInfo = new ApprenticeInformation(); AppInfo.Apprentice_ID = appr.ID; AppInfo.Apprentice_Name = appr.Name; AppInfo.Apprentice_Online = false; AppInfo.Enrole_date = appr.EnroleDate; AppInfo.Mentor_ID = client.Entity.UID; AppInfo.Mentor_Mesh = client.Entity.Mesh; AppInfo.Mentor_Name = client.Entity.Name; AppInfo.Type = 2; client.Send(AppInfo); } } #endregion client.Send(packet); break; case Data.EndTeleport: break; case Data.GetSurroundings: if (client.Booth != null) { client.Entity.TransformationID = 0; client.Booth.Remove(); client.Booth = null; } GetSurroundings(client); client.Send(new MapStatus() { BaseID = client.Map.BaseID, ID = client.Map.ID, Status = Database.MapsTable.MapInformations[client.Map.ID].Status }); Game.Weather.CurrentWeatherBase.Send(client); client.Send(gData); break; case Data.SetLocation: SetLocation(gData, client); break; case Data.Jump: PlayerJump(gData, client); break; case Data.UnknownEntity: { #region UnknownEntity Client.GameState pClient = null; if (ServerBase.Kernel.GamePool.TryGetValue(gData.dwParam, out pClient)) { if (ServerBase.Kernel.GetDistance(pClient.Entity.X, pClient.Entity.Y, client.Entity.X, client.Entity.Y) <= ServerBase.Constants.pScreenDistance && client.Map.ID == pClient.Map.ID) { if (pClient.Guild != null) pClient.Guild.SendName(client); if (client.Guild != null) client.Guild.SendName(pClient); if (pClient.Entity.UID != client.Entity.UID) { if (pClient.Map.ID == client.Map.ID) { if (pClient.Map.BaseID == 700) { if (client.QualifierGroup != null) { if (pClient.QualifierGroup != null) { client.Entity.SendSpawn(pClient, false); pClient.Entity.SendSpawn(client, false); } else { client.Entity.SendSpawn(pClient, false); client.Screen.Add(pClient.Entity); } } else { if (pClient.QualifierGroup != null) { pClient.Entity.SendSpawn(client, false); pClient.Screen.Add(client.Entity); } else { client.Entity.SendSpawn(pClient, false); pClient.Entity.SendSpawn(client, false); } } } else { client.Entity.SendSpawn(pClient, false); pClient.Entity.SendSpawn(client, false); } } } } } else { Game.Entity monster = null; if (client.Map.Entities.TryGetValue(gData.dwParam, out monster)) { if (ServerBase.Kernel.GetDistance(monster.X, monster.Y, client.Entity.X, client.Entity.Y) <= ServerBase.Constants.pScreenDistance) { monster.SendSpawn(client, false); } } if (client.Map.Companions.TryGetValue(gData.dwParam, out monster)) { if (ServerBase.Kernel.GetDistance(monster.X, monster.Y, client.Entity.X, client.Entity.Y) <= ServerBase.Constants.pScreenDistance) { monster.SendSpawn(client, false); } } } #endregion break; } case Data.CompleteLogin: LoginMessages(client); EntityEquipment equips = new EntityEquipment(true); equips.ParseHero(client); client.Send(equips); break; case Data.ChangeFace: ChangeFace(gData, client); break; case Data.ObserveEquipment: case Data.ObserveEquipment2: case Data.ObserveKnownPerson: ObserveEquipment(gData, client); break; case Data.ViewEnemyInfo: { if (client.Enemy.ContainsKey(gData.dwParam)) { if (client.Enemy[gData.dwParam].IsOnline) { KnownPersonInfo info = new KnownPersonInfo(true); info.Fill(client.Enemy[gData.dwParam], true, false); if (client.Enemy[gData.dwParam].Client.Guild != null) client.Enemy[gData.dwParam].Client.Guild.SendName(client); client.Send(info); } } break; } case Data.ViewFriendInfo: { if (client.Friends.ContainsKey(gData.dwParam)) { if (client.Friends[gData.dwParam].IsOnline) { KnownPersonInfo info = new KnownPersonInfo(true); info.Fill(client.Friends[gData.dwParam], false, false); if (client.Friends[gData.dwParam].Client.Guild != null) client.Friends[gData.dwParam].Client.Guild.SendName(client); client.Send(info); } } break; } case Data.ViewPartnerInfo: { if (client.Partners.ContainsKey(gData.dwParam)) { if (client.Partners[gData.dwParam].IsOnline) { TradePartnerInfo info = new TradePartnerInfo(true); info.Fill(client.Partners[gData.dwParam]); if (client.Partners[gData.dwParam].Client.Guild != null) client.Partners[gData.dwParam].Client.Guild.SendName(client); client.Send(info); } } break; } case Data.EndFly: client.Entity.RemoveFlag(Update.Flags.Fly); break; case Data.EndTransformation: client.Entity.Untransform(); break; case Data.XPListEnd: case Data.Die: break; case Data.OwnBooth: { //client.Entity.TransformationTime = 3600; if (client.WarehouseOpen == true) { client.Send(new Message("you cant booth when you open warehose", Color.AntiqueWhite, 2005)); return; } else { client.Booth = new Conquer_Online_Server.Game.ConquerStructures.Booth(client, gData); client.Send(new Data(true) { ID = Data.ChangeAction, UID = client.Entity.UID, dwParam = 0 }); } break; } case Data.Away: { if (client.Entity.Away == 0) client.Entity.Away = 1; else client.Entity.Away = 0; client.SendScreenSpawn(client.Entity, false); break; } case Data.DeleteCharacter: { if ((client.WarehousePW == null || client.WarehousePW == "" || client.WarehousePW == "0" && gData.dwParam == 0) || (client.WarehousePW == gData.dwParam.ToString())) { client.Account.EntityID = 0; client.Account.Save(); client.Disconnect(); } break; } case Data.TeamSearchForMember: { if (client.Team != null) { Client.GameState Client = null; if (!client.Team.IsTeammate(gData.UID)) return; if (Kernel.GamePool.TryGetValue(gData.UID, out Client)) { gData.wParam1 = Client.Entity.X; gData.wParam2 = Client.Entity.Y; gData.Send(client); } } break; } default: if (client.Account.State == Conquer_Online_Server.Database.AccountTable.AccountState.ProjectManager) client.Send(new Message("Unknown generaldata id: " + gData.ID, System.Drawing.Color.CadetBlue, Message.Talk)); break; } break; } #endregion #region Status 1040 case 1040: { Status ShowStatistics2 = new Status(client); ShowStatistics2.Deserialize(packet); ShowStatistics2.Send(client); //uint UID = BitConverter.ToUInt32(packet, 4); //Client.GameState Client; //if (ServerBase.Kernel.GamePool.TryGetValue(UID, out Client)) //{ // client.Send(WindowStats(Client)); //} break; } #endregion #region Flowers case 1150: { SendFlowers(client, packet); break; } case 1151: { AddFlowers(client, packet); break; } #endregion #region Clans case 1312: { switch (packet[4]) { case 21://transfer { if (client.Entity.Myclan != null) { PrintPacket(packet); uint lider = 0; string name_receive = System.Text.Encoding.ASCII.GetString(packet, 18, packet[17]); var varr = ServerBase.Kernel.GamePool.Values.GetEnumerator(); varr.MoveNext(); int COunt = ServerBase.Kernel.GamePool.Count; for (uint x = 0; x < COunt; x++) { if (x >= COunt) break; Client.GameState clien = (varr.Current as Client.GameState); if (clien.Entity.Name == name_receive) lider = clien.Entity.UID; varr.MoveNext(); } if (lider == client.Entity.UID) return; Client.GameState aClient = null; if (Conquer_Online_Server.ServerBase.Kernel.GamePool.TryGetValue(lider, out aClient)) { if (Conquer_Online_Server.ServerBase.Kernel.ServerClans.ContainsKey(client.Entity.Myclan.ClanId)) { if (Conquer_Online_Server.ServerBase.Kernel.ServerClans[client.Entity.Myclan.ClanId].Members.ContainsKey(aClient.Entity.UID)) { Conquer_Online_Server.ServerBase.Kernel.ServerClans[client.Entity.Myclan.ClanId].ClanLider = aClient.Entity.Name; aClient.Entity.ClanRank = 100; aClient.Entity.Myclan.Members[aClient.Entity.UID].Rank = 100; if (aClient.Entity.Myclan.Members.ContainsKey(client.Entity.UID)) aClient.Entity.Myclan.Members[client.Entity.UID].Rank = 0; client.Entity.ClanRank = 0; Database.Clans.SaveClan(aClient.Entity.Myclan); Database.Clans.JoinClan(client); } } } else { Conquer_Online_Server.ServerBase.Kernel.ServerClans[client.Entity.Myclan.ClanId].ClanLider = name_receive; client.Entity.ClanRank = 0; Database.Clans.JoinClan(client); Database.Clans.SaveClan(client.Entity.Myclan); Database.Clans.TransferClan(name_receive); } } break; } /* case 14://add enemy { break; }*/ case 9://recruit member { break; } case 23://client exit { if (client.Entity.Myclan != null) { if (Conquer_Online_Server.ServerBase.Kernel.ServerClans.ContainsKey(client.Entity.Myclan.ClanId)) { if (Conquer_Online_Server.ServerBase.Kernel.ServerClans[client.Entity.Myclan.ClanId].Members.ContainsKey(client.Entity.UID)) { Conquer_Online_Server.ServerBase.Kernel.ServerClans[client.Entity.Myclan.ClanId].Members.Remove(client.Entity.UID); } } client.Entity.ClanId = 0; client.Entity.ClanName = ""; client.Entity.Myclan = null; Database.Clans.KickClan(client.Entity.Name); client.Send(packet); } break; } case 25://buleitn { if (client.Entity.Myclan == null) return; string buletin = System.Text.Encoding.ASCII.GetString(packet, 18, packet[17]); if (Conquer_Online_Server.ServerBase.Kernel.ServerClans.ContainsKey(client.Entity.Myclan.ClanId)) Conquer_Online_Server.ServerBase.Kernel.ServerClans[client.Entity.Myclan.ClanId].ClanBuletion = buletin; Database.Clans.SaveClan(Conquer_Online_Server.ServerBase.Kernel.ServerClans[client.Entity.Myclan.ClanId]); client.Send(packet); break; } case 22://give kick { if (client.Entity.Myclan != null) { if (client.Entity.ClanRank == 100) { string name = System.Text.Encoding.ASCII.GetString(packet, 18, packet[17]); uint Key = 0; foreach (Game.ClanMembers mem in client.Entity.Myclan.Members.Values) { if (mem.Name == name) Key = mem.UID; } if (Key != 0) { if (Conquer_Online_Server.ServerBase.Kernel.GamePool.ContainsKey(Key)) { if (Conquer_Online_Server.ServerBase.Kernel.ServerClans.ContainsKey(client.Entity.Myclan.ClanId)) { if (Conquer_Online_Server.ServerBase.Kernel.ServerClans[client.Entity.Myclan.ClanId].Members.ContainsKey(Key)) { Conquer_Online_Server.ServerBase.Kernel.ServerClans[client.Entity.Myclan.ClanId].Members.Remove(Key); Network.GamePackets.ClanMembers clan = new Network.GamePackets.ClanMembers(client); client.Send(clan.ToArray()); Network.GamePackets.Clan cl = new Conquer_Online_Server.Network.GamePackets.Clan(client, 22); ServerBase.Kernel.GamePool[Key].Send(cl.ToArray()); ServerBase.Kernel.GamePool[Key].Entity.ClanName = ""; ServerBase.Kernel.GamePool[Key].Entity.ClanId = 0; ServerBase.Kernel.GamePool[Key].Entity.Myclan = null; ServerBase.Kernel.GamePool[Key].Screen.FullWipe(); ServerBase.Kernel.GamePool[Key].Screen.Reload(null); } } } } Database.Clans.KickClan(name); } } break; } case 26://donation { uint money = BitConverter.ToUInt32(packet, 8); if (client.Entity.Money >= money && client.Entity.Myclan != null) { client.Entity.Myclan.Members[client.Entity.UID].Donation += money; client.Entity.Money -= money; if (Conquer_Online_Server.ServerBase.Kernel.ServerClans.ContainsKey(client.Entity.Myclan.ClanId)) Conquer_Online_Server.ServerBase.Kernel.ServerClans[client.Entity.Myclan.ClanId].ClanDonation += money; Network.GamePackets.Clan cl = new Conquer_Online_Server.Network.GamePackets.Clan(client, 1); client.Send(cl.ToArray()); Database.Clans.SaveClientDonation(client); Database.Clans.SaveClan(Conquer_Online_Server.ServerBase.Kernel.ServerClans[client.Entity.Myclan.ClanId]); } break; } case 11://add player { uint lider = BitConverter.ToUInt32(packet, 8); if (Conquer_Online_Server.ServerBase.Kernel.GamePool.ContainsKey(lider)) { packet[4] = 11; Network.Writer.WriteUInt32(client.Entity.UID, 8, packet); packet[16] = 1; packet[17] = (byte)client.Entity.Name.Length; for (int i = 0; i < client.Entity.Name.Length; i++) { try { packet[18 + i] = Convert.ToByte(client.Entity.Name[i]); } catch { } } if (Conquer_Online_Server.ServerBase.Kernel.GamePool[lider].Entity.Myclan != null) Conquer_Online_Server.ServerBase.Kernel.GamePool[lider].Send(packet); } break; } case 12: { if (packet[16] == 1) { if (client.Entity.Myclan != null) if (client.Entity.Myclan.Members[client.Entity.UID].Rank == 100) { //if (client.Entity.Myclan != null) { if (client.Entity.Myclan.Members.Count < 7) { uint memeber = BitConverter.ToUInt32(packet, 8); if (ServerBase.Kernel.GamePool.ContainsKey(memeber)) { Game.ClanMembers member = new Conquer_Online_Server.Game.ClanMembers(); member.UID = ServerBase.Kernel.GamePool[memeber].Entity.UID; member.Donation = 0; member.Rank = 10; member.Class = ServerBase.Kernel.GamePool[memeber].Entity.Class; member.Level = ServerBase.Kernel.GamePool[memeber].Entity.Level; member.Name = ServerBase.Kernel.GamePool[memeber].Entity.Name; if (!client.Entity.Myclan.Members.ContainsKey(memeber)) client.Entity.Myclan.Members.Add(member.UID, member); ServerBase.Kernel.GamePool[memeber].Entity.ClanRank = 0; ServerBase.Kernel.GamePool[memeber].Entity.ClanId = client.Entity.ClanId; ServerBase.Kernel.GamePool[memeber].Entity.Myclan = client.Entity.Myclan; ServerBase.Kernel.GamePool[memeber].Entity.ClanName = client.Entity.ClanName; Database.Clans.JoinClan(ServerBase.Kernel.GamePool[memeber]); ServerBase.Kernel.GamePool[memeber].Screen.FullWipe(); ServerBase.Kernel.GamePool[memeber].Screen.Reload(null); } } } } } break; } case 4://memebers { ClanMembers clan = new ClanMembers(client); client.Send(clan.ToArray()); break; } case 0x1d: { if (client.Entity.Myclan != null) { Network.Writer.WriteUInt32(client.Entity.Myclan.ClanId, 8, packet); Network.Writer.WriteByte(1, 16, packet); Network.Writer.WriteByte(0x0d, 17, packet); Network.Writer.WriteString("0 0 0 0 0 0 0", 18, packet); client.Send(packet); Network.GamePackets.Clan cl = new Conquer_Online_Server.Network.GamePackets.Clan(client, 1); client.Send(cl.ToArray()); client.Send(packet); if (client.Entity.Myclan.ClanBuletion != "") client.Send(cl.UpgradeBuletin(client.Entity.Myclan.ClanBuletion)); } else { client.Send(packet); packet[4] = 23; } break; } case 0x18: { client.Send(packet); break; } case (byte)Game.Clan_Typ.AddAlly: { Game.Clans clan = client.Entity.Myclan; if (clan != null) { Client.GameState target; UInt32 Identifier = BitConverter.ToUInt32(packet, 8); if (client.Entity.ClanRank == 100) { if (clan.Allies.Count >= 5) { client.Send(new Message("The Ammount of Allies You can Have has exceeded", System.Drawing.Color.Red, Message.TopLeft)); break; } if (ServerBase.Kernel.GamePool.TryGetValue(Identifier, out target)) { Game.Clans tclan = target.Entity.Myclan; if (tclan != null) { if (target.Entity.ClanRank == 100) { if (tclan.Allies.Count >= 5) { client.Send(new Message("The Ammount of Allies the Target Clan can Have has exceeded", System.Drawing.Color.Red, Message.TopLeft)); break; } if (!clan.Allies.ContainsKey(tclan.ClanId)) { if (!clan.Enemies.ContainsKey(tclan.ClanId)) { String clanName = client.Entity.ClanName; Clan2 clanp = new Clan2(); clanp.Deserialize(packet); clanp.Offset16 = 2; clanp.Identifier = client.Entity.UID; Writer.WriteByte((Byte)clanName.Length, 17, clanp.ToArray()); Writer.WriteString(clanName, 18, clanp.ToArray()); tclan.AllyRequest = clan.ClanId; target.Send(clanp); } else client.Send(new Message("That clan is Your Enemy.", System.Drawing.Color.Red, Message.TopLeft)); } } else client.Send(new Message("This target is not the clan leader.", System.Drawing.Color.Red, Message.TopLeft)); } } else client.Send(new Message("Can not find target.", System.Drawing.Color.Red, Message.TopLeft)); } else client.Send(new Message("You are not the clan leader.", System.Drawing.Color.Red, Message.TopLeft)); } break; } case (byte)Game.Clan_Typ.AcceptAlliance: { Game.Clans clan = client.Entity.Myclan; if (clan != null) { if (client.Entity.ClanRank == 100) { Game.Clans tclan; if (ServerBase.Kernel.ServerClans.TryGetValue(clan.AllyRequest, out tclan)) { if (tclan != null) { if (!tclan.Enemies.ContainsKey(clan.ClanId)) { if (!clan.Enemies.ContainsKey(tclan.ClanId)) { if (!clan.Allies.ContainsKey(tclan.ClanId)) clan.Allies.Add(tclan.ClanId, tclan); tclan.Allies.Add(clan.ClanId, clan); clan.SendMessage(new ClanRelations(clan, ClanRelations.RelationTypes.Allies)); tclan.SendMessage(new ClanRelations(tclan, ClanRelations.RelationTypes.Allies)); clan.SendMessage(new Message(String.Format("Our Clan has Allianced with {0}", tclan.ClanName), System.Drawing.Color.Red, Message.Clan)); tclan.SendMessage(new Message(String.Format("Our Clan has Allianced with {0}", clan.ClanName), System.Drawing.Color.Red, Message.Clan)); clan.AddRelation(tclan.ClanId, ClanRelations.RelationTypes.Allies); tclan.AddRelation(clan.ClanId, ClanRelations.RelationTypes.Allies); clan.AllyRequest = tclan.AllyRequest = 0; } else client.Send(new Message("This Clan is Your Enemy.", System.Drawing.Color.Red, Message.TopLeft)); } client.Send(new Message("This Clan Has Enemied You!.", System.Drawing.Color.Red, Message.TopLeft)); } } else client.Send(new Message("Can not find target", System.Drawing.Color.Red, Message.TopLeft)); } else client.Send(new Message("You are not the clan leader.", System.Drawing.Color.Red, Message.TopLeft)); } break; } case (byte)Game.Clan_Typ.DeleteEnemy: { Game.Clans clan = client.Entity.Myclan; if (clan != null) { if (client.Entity.ClanRank == 100) { Clan2 clanp = new Clan2(); clanp.Deserialize(packet); String EnemyTarget = clanp.Offset18String; UInt32 ClanId = clanp.GetClanId(EnemyTarget); Game.Clans tclan; if (ServerBase.Kernel.ServerClans.TryGetValue(ClanId, out tclan)) { clan.Enemies.Remove(ClanId); clan.DeleteRelation(ClanId, ClanRelations.RelationTypes.Enemies); clan.SendMessage(new ClanRelations(clan, ClanRelations.RelationTypes.Enemies)); clan.SendMessage(new Message(String.Format("We are no longer Enemies With {0}", clan.ClanId), System.Drawing.Color.Red, Message.Clan)); client.Send(clanp); } } else client.Send(new Message("You are not authorized to continue with this action", System.Drawing.Color.Red, Message.TopLeft)); } break; } case (byte)Game.Clan_Typ.DeleteAlly: { Game.Clans clan = client.Entity.Myclan; if (clan != null) { if (client.Entity.ClanRank == 100) { Clan2 clanp = new Clan2(); clanp.Deserialize(packet); String AlliedTarget = clanp.Offset18String; UInt32 ClanId = clanp.GetClanId(AlliedTarget); Game.Clans tclan; if (clan.Allies.TryGetValue(ClanId, out tclan)) { clan.Allies.Remove(ClanId); tclan.Allies.Remove(clan.ClanId); clan.DeleteRelation(ClanId, ClanRelations.RelationTypes.Allies); tclan.DeleteRelation(clan.ClanId, ClanRelations.RelationTypes.Allies); clan.SendMessage(new ClanRelations(clan, ClanRelations.RelationTypes.Allies)); tclan.SendMessage(new ClanRelations(tclan, ClanRelations.RelationTypes.Allies)); clan.SendMessage(new Message(String.Format("We are no longer allied with {0}", tclan.ClanName), System.Drawing.Color.Red, Message.Clan)); tclan.SendMessage(new Message(String.Format("We are no longer allied with {0}", clan.ClanName), System.Drawing.Color.Red, Message.Clan)); client.Send(clanp); } } else client.Send(new Message("You are not authorized to continue with this action", System.Drawing.Color.Red, Message.TopLeft)); } break; } case (byte)Game.Clan_Typ.AddEnemy: { Game.Clans clan = client.Entity.Myclan; if (clan != null) { if (client.Entity.ClanRank == 100) { String Enemy = System.Text.Encoding.ASCII.GetString(packet, 18, packet[17]).Trim(new Char[] { '\0' }); UInt32 ClanId = 0; var AllCland = ServerBase.Kernel.ServerClans.Values.ToArray(); foreach (Game.Clans c_clan in AllCland) { if (Enemy == c_clan.ClanName) { ClanId = c_clan.ClanId; break; } } if (ClanId == 0) break; if (!clan.Enemies.ContainsKey(ClanId)) { if (!clan.Allies.ContainsKey(ClanId)) { if (clan.Enemies.Count >= 5) { client.Send(new Message("The Ammount of Enemies You can Have has exceeded", System.Drawing.Color.Red, Message.TopLeft)); break; } Game.Clans tclan; if (ServerBase.Kernel.ServerClans.TryGetValue(ClanId, out tclan)) { if (!clan.Enemies.ContainsKey(tclan.ClanId)) clan.Enemies.Add(tclan.ClanId, tclan); clan.AddRelation(ClanId, ClanRelations.RelationTypes.Enemies); clan.SendMessage(new ClanRelations(clan, ClanRelations.RelationTypes.Enemies)); clan.SendMessage(new Message(String.Format("We Have Enemied the clan {0}", tclan.ClanName), System.Drawing.Color.Red, Message.Clan)); tclan.SendMessage(new Message(String.Format("The Clan {0} Has Made us their Enemy!", clan.ClanName), System.Drawing.Color.Red, Message.Clan)); } } else client.Send(new Message("This clan is one of your alliance, What has gone wrong?", System.Drawing.Color.Red, Message.TopLeft)); } else client.Send(new Message("This clan is Already One of Your Enemies", System.Drawing.Color.Red, Message.TopLeft)); } } break; } default: Console.WriteLine("Clan Type " + packet[4]); break; } break; /* switch (packet[4]) { case 23://client exit { if (client.Entity.Myclan != null) { foreach (var clien in Conquer_Online_Server.ServerBase.Kernel.GamePool.Values) { if (clien.Entity.Myclan != null) { if (clien.Entity.Myclan.ClanId == client.Entity.Myclan.ClanId) { if (clien.Entity.Myclan.Members.ContainsKey(client.Entity.UID)) clien.Entity.Myclan.Members.Remove(client.Entity.UID); } } } client.Entity.ClanName = ""; client.Entity.Myclan = null; Database.Clans.KickClan(client.Entity.Name); client.Send(packet); } break; } case 14://enemy { string Enemy = System.Text.Encoding.ASCII.GetString(packet, 18, packet[17]); client.Send(packet); Network.GamePackets.Clan cl = new Conquer_Online_Server.Network.GamePackets.Clan(client, 14); client.Send(cl.SendAlies(Enemy, "Lider")); break; } case 25://buleitn { if (client.Entity.Myclan == null) return; string buletin = System.Text.Encoding.ASCII.GetString(packet, 18, packet[17]); foreach (var clan in Conquer_Online_Server.ServerBase.Kernel.ServerClans.Values) { if (clan.ClanId == client.Entity.Myclan.ClanId) clan.ClanBuletion = buletin; } foreach (var member in Conquer_Online_Server.ServerBase.Kernel.GamePool.Values) { if (member.Entity.Myclan != null) { if (member.Entity.UID != client.Entity.UID) if (member.Entity.Myclan.ClanId == client.Entity.Myclan.ClanId) { member.Entity.Myclan.ClanBuletion = buletin; } } } Database.Clans.SaveClan(Conquer_Online_Server.ServerBase.Kernel.ServerClans[client.Entity.Myclan.ClanId]); client.Send(packet); client.Entity.Myclan.ClanBuletion = buletin; break; } case 22://give kick { if (client.Entity.Myclan != null) { if (client.Entity.ClanRank == 100) { string name = System.Text.Encoding.ASCII.GetString(packet, 18, packet[17]); uint Key = 0; foreach (Game.ClanMembers mem in client.Entity.Myclan.Members.Values) { if (mem.Name == name) Key = mem.UID; } if (Key != 0) { if (Conquer_Online_Server.ServerBase.Kernel.GamePool.ContainsKey(Key)) { foreach (var clien in Conquer_Online_Server.ServerBase.Kernel.GamePool.Values) { if (clien.Entity.UID == client.Entity.UID) continue; if (clien.Entity.Myclan != null) { if (clien.Entity.Myclan.ClanId == client.Entity.Myclan.ClanId) { if (clien.Entity.Myclan.Members.ContainsKey(Key)) { clien.Entity.Myclan.Members.Remove(Key); Network.GamePackets.ClanMembers clan = new Network.GamePackets.ClanMembers(client); client.Send(clan.ToArray()); clien.Entity.ClanName = ""; clien.Entity.Myclan = null; } } } } } } Database.Clans.KickClan(name); } } break; } case 26: { uint money = BitConverter.ToUInt32(packet, 8); if (client.Entity.Money >= money && client.Entity.Myclan != null) { client.Entity.Myclan.Members[client.Entity.UID].Donation += money; client.Entity.Money -= money; Conquer_Online_Server.ServerBase.Kernel.ServerClans[client.Entity.Myclan.ClanId].ClanDonation += money; foreach (var clien in Conquer_Online_Server.ServerBase.Kernel.GamePool.Values) { if (clien.Entity.Myclan != null) { if (clien.Entity.UID != client.Entity.UID) { if (clien.Entity.Myclan.ClanId == client.Entity.Myclan.ClanId) { clien.Entity.Myclan.ClanDonation = Conquer_Online_Server.ServerBase.Kernel.ServerClans[clien.Entity.Myclan.ClanId].ClanDonation; } } } } client.Entity.Myclan.ClanDonation = Conquer_Online_Server.ServerBase.Kernel.ServerClans[client.Entity.Myclan.ClanId].ClanDonation; Network.GamePackets.Clan cl = new Conquer_Online_Server.Network.GamePackets.Clan(client, 1); client.Send(cl.ToArray()); Database.Clans.SaveClientDonation(client); Database.Clans.SaveClan(Conquer_Online_Server.ServerBase.Kernel.ServerClans[client.Entity.Myclan.ClanId]); } break; } case 11://add player { uint lider = BitConverter.ToUInt32(packet, 8); if (Conquer_Online_Server.ServerBase.Kernel.GamePool.ContainsKey(lider)) { packet[4] = 11; Network.Writer.WriteUInt32(client.Entity.UID, 8, packet); packet[16] = 1; packet[17] = (byte)client.Entity.Name.Length; for (int i = 0; i < client.Entity.Name.Length; i++) { try { packet[18 + i] = Convert.ToByte(client.Entity.Name[i]); } catch { } } Conquer_Online_Server.ServerBase.Kernel.GamePool[lider].Send(packet); } break; } case 12: { if (packet[16] == 1) { if (client.Entity.Myclan.Members[client.Entity.UID].Rank == 100) { if (client.Entity.Myclan != null) { if (client.Entity.Myclan.Members.Count < 7) { uint memeber = BitConverter.ToUInt32(packet, 8); if (ServerBase.Kernel.GamePool.ContainsKey(memeber)) { Game.ClanMembers member = new Conquer_Online_Server.Game.ClanMembers(); member.UID = ServerBase.Kernel.GamePool[memeber].Entity.UID; member.Donation = 0; member.Rank = 10; member.Class = ServerBase.Kernel.GamePool[memeber].Entity.Class; member.Level = ServerBase.Kernel.GamePool[memeber].Entity.Level; member.Name = ServerBase.Kernel.GamePool[memeber].Entity.Name; if (!client.Entity.Myclan.Members.ContainsKey(memeber)) client.Entity.Myclan.Members.Add(member.UID, member); foreach (var clien in Conquer_Online_Server.ServerBase.Kernel.GamePool.Values) { if (clien.Entity.Myclan != null) { if (clien.Entity.Myclan.ClanId == client.Entity.Myclan.ClanId) { if (!clien.Entity.Myclan.Members.ContainsKey(memeber)) clien.Entity.Myclan.Members.Add(member.UID, member); } } } ServerBase.Kernel.GamePool[memeber].Entity.ClanRank = 0; ServerBase.Kernel.GamePool[memeber].Entity.Myclan = client.Entity.Myclan; ServerBase.Kernel.GamePool[memeber].Entity.ClanName = client.Entity.ClanName; Database.Clans.JoinClan(ServerBase.Kernel.GamePool[memeber]); ServerBase.Kernel.GamePool[memeber].Entity.Teleport(ServerBase.Kernel.GamePool[memeber].Entity.MapID , ServerBase.Kernel.GamePool[memeber].Entity.X , ServerBase.Kernel.GamePool[memeber].Entity.Y); } } } } } break; } case 4://memebers { ClanMembers clan = new ClanMembers(client); client.Send(clan.ToArray()); break; } case 0x1d: { if (client.Entity.Myclan != null) { Network.Writer.WriteUInt32(client.Entity.Myclan.ClanId, 8, packet); Network.Writer.WriteByte(1, 16, packet); Network.Writer.WriteByte(0x0d, 17, packet); Network.Writer.WriteString("0 0 0 0 0 0 0", 18, packet); client.Send(packet); Network.GamePackets.Clan cl = new Conquer_Online_Server.Network.GamePackets.Clan(client, 1); client.Send(cl.ToArray()); client.Send(packet); if (client.Entity.Myclan.ClanBuletion != "") client.Send(cl.UpgradeBuletin(client.Entity.Myclan.ClanBuletion)); } else { client.Send(packet); packet[4] = 23; } break; } case 0x18: { client.Send(packet); break; } default: Console.WriteLine("Clan Type " + packet[4]); break; } break;*/ } #endregion #region Reincarnation (1066) case 1066: { if (client.Entity.Reborn != 2) return; byte NewClass = packet[4]; ushort NewBody = packet[8]; if (client.Entity.Body.ToString().EndsWith("1") || client.Entity.Body.ToString().EndsWith("2")) NewBody += 2000; else NewBody += 1000; if (client.Inventory.Contains(711083, 1)) { client.Entity.Body = NewBody; new PacketHandler.Reincarnation(client, NewClass); //new Game.Features.Reincarnation.Reincarnate(client.Entity, NewClass); client.Inventory.Remove(711083, 1); } break; } #endregion #region SubClass (2320) case 2320: { byte[] Packet = null; switch (packet[4]) { #region [Restore/Switch] case 0: byte To = packet[6]; Packet = new byte[0]; client.Send(packet); if (To > 0)//Switch { #region [Effects-Addition] switch ((Conquer_Online_Server.Game.ClassID)To) { case Conquer_Online_Server.Game.ClassID.Apothecary: { // client.Entity.Statistics.Detoxication = (ushort)(client.Entity.SubClasses.Classes[(byte)Conquer_Online_Server.Game.ClassID.Apothecary].Phase * 8); //client.Entity.Statistics.Detoxication += (client.Entity.SubClasses.Classes[To].Level); break; } } #endregion /*switch ((Game.ClassID)To) { case Game.ClassID.Wrangler: { switch (client.Entity.SubClasses.Classes[To].Level) { case 9: { //client.Entity.Hitpoints += 1200; //client.Entity.MaxHitpoints += 1200; break; } } break; } }*/ Packet = new byte[0]; Packet = new SubClassShowFull(true) { ID = 1, Class = To, Level = client.Entity.SubClasses.Classes[To].Phase }.ToArray();//client.Entity.SubClasses.Classes[To].Phase client.Send(Packet); //Packet = new SubClass(client.Entity).ToArray(); //client.Send(Packet); client.Entity.SubClass = To; client.Entity.SubClassLevel = client.Entity.SubClasses.Classes[To].Level; client.Entity.SubClasses.Active = To; } else//Restore { client.Entity.SubClass = 0; client.Entity.SubClassLevel = 0; client.Entity.SubClasses.Active = 0; Packet = new SubClassShowFull(true) { ID = 1 }.ToArray(); client.Send(Packet); } client.SendScreen(client.Entity.SpawnPacket, false); break; #endregion #region [Upgrade] case 2: { byte Class = packet[6]; ushort Required = 0; Game.SubClass Sc = client.Entity.SubClasses.Classes[Class]; #region [Set Required] switch ((Game.ClassID)Sc.ID) { case Game.ClassID.MartialArtist: switch (Sc.Level) { case 1: Required = 300; break; case 2: Required = 900; break; case 3: Required = 1800; break; case 4: Required = 2700; break; case 5: Required = 3600; break; case 6: Required = 5100; break; case 7: Required = 6900; break; case 8: Required = 8700; break; case 9: Required = ushort.MaxValue; break; } break; case Game.ClassID.Warlock: switch (Sc.Level) { case 1: Required = 300; break; case 2: Required = 900; break; case 3: Required = 1800; break; case 4: Required = 2700; break; case 5: Required = 3600; break; case 6: Required = 5100; break; case 7: Required = 6900; break; case 8: Required = 8700; break; case 9: Required = ushort.MaxValue; break; } break; case Game.ClassID.ChiMaster: switch (Sc.Level) { case 1: Required = 600; break; case 2: Required = 1800; break; case 3: Required = 3600; break; case 4: Required = 5400; break; case 5: Required = 7200; break; case 6: Required = 10200; break; case 7: Required = 13800; break; case 8: Required = 17400; break; case 9: Required = ushort.MaxValue; break; } break; case Game.ClassID.Sage: switch (Sc.Level) { case 1: Required = 400; break; case 2: Required = 1200; break; case 3: Required = 2400; break; case 4: Required = 3600; break; case 5: Required = 4800; break; case 6: Required = 6800; break; case 7: Required = 9200; break; case 8: Required = 11600; break; case 9: Required = ushort.MaxValue; break; } break; case Game.ClassID.Apothecary: switch (Sc.Level) { case 1: Required = 100; break; case 2: Required = 200; break; case 3: Required = 300; break; case 4: Required = 400; break; case 5: Required = 500; break; case 6: Required = 1000; break; case 7: Required = 4000; break; case 8: Required = 9000; break; case 9: Required = ushort.MaxValue; break; } break; case Game.ClassID.Wrangler: case Game.ClassID.Performer: switch (Sc.Level) { case 1: Required = 400; break; case 2: Required = 1200; break; case 3: Required = 2400; break; case 4: Required = 3600; break; case 5: Required = 4800; break; case 6: Required = 6800; break; case 7: Required = 9200; break; case 8: Required = 11600; break; case 9: Required = ushort.MaxValue; break; } break; } #endregion if (client.Entity.SubClasses.StudyPoints >= Required) { client.Entity.SubClasses.StudyPoints -= Required; client.Entity.SubClasses.Classes[Class].Level++; Packet = new byte[0]; Packet = new SubClassShowFull(true) { ID = 1, Class = Class, Level = client.Entity.SubClasses.Classes[Class].Level }.ToArray(); client.Send(Packet); Packet = new SubClass(client.Entity).ToArray(); client.Send(Packet); Database.SubClassTable.Update(client.Entity, client.Entity.SubClasses.Classes[Class]); Database.SubClassTable.Update(client.Entity); } break; } #endregion #region [Info] case 6: Game.Entity Owner = client.Entity; if (Owner.SubClasses.Classes.Count > 0) { Game.SubClass[] Classes = new Game.SubClass[Owner.SubClasses.Classes.Count]; Owner.SubClasses.Classes.Values.CopyTo(Classes, 0); foreach (Game.SubClass Class in Classes) { if (Class.ID == 9) { for (byte i = 0; i < Class.Phase; i++) { Packet = new byte[0]; Packet = new SubClassShowFull(true) { ID = 4, Class = Class.ID, Level = Class.Level }.ToArray(); client.Send(Packet); } continue; } Packet = new byte[0]; Packet = new SubClassShowFull(true) { ID = 4, Class = Class.ID, Level = Class.Level }.ToArray(); client.Send(Packet); } } Packet = new SubClass(client.Entity).ToArray(); client.Send(Packet); break; #endregion default: Console.WriteLine("Unknown 2320 packet type " + packet[4]); break; } break; } #endregion #region MemoryAgate case 2110: { uint ItemUID = BitConverter.ToUInt32(packet, 8); switch (packet[4]) { case 1://record { if (client.Map.IsDynamic()) return; Interfaces.IConquerItem Item = null; if (client.Inventory.TryGetItem(ItemUID, out Item)) { if (Item.Agate_map.ContainsKey(packet[12])) { Item.Agate_map[(uint)packet[12]] = client.Entity.MapID + "~" + client.Entity.X + "~" + client.Entity.Y; Database.ConquerItemTable.UpdateItem(Item, client); Item.SendAgate(client); break; } if (packet[12] > Item.Agate_map.Count) { Item.Agate_map.Add((byte)(Item.Agate_map.Count), client.Entity.MapID + "~" + client.Entity.X + "~" + client.Entity.Y); Database.ConquerItemTable.UpdateItem(Item, client); Item.SendAgate(client); break; } else { if (!Item.Agate_map.ContainsKey(packet[12])) { Item.Agate_map.Add(packet[12], client.Entity.MapID + "~" + client.Entity.X + "~" + client.Entity.Y); Database.ConquerItemTable.UpdateItem(Item, client); Item.SendAgate(client); } break; } } break; } case 3://recal { if (client.Map.IsDynamic()) return; Interfaces.IConquerItem Item = null; if (client.Inventory.TryGetItem(ItemUID, out Item)) { if (Item.Agate_map.ContainsKey(packet[12])) { if (ushort.Parse(Item.Agate_map[packet[12]].Split('~')[0].ToString()) == 1038) return; if (ushort.Parse(Item.Agate_map[packet[12]].Split('~')[0].ToString()) == 6001) return; client.Entity.Teleport(ushort.Parse(Item.Agate_map[packet[12]].Split('~')[0].ToString()) , ushort.Parse(Item.Agate_map[packet[12]].Split('~')[1].ToString()) , ushort.Parse(Item.Agate_map[packet[12]].Split('~')[2].ToString())); Item.Durability--; Item.SendAgate(client); Database.ConquerItemTable.UpdateItem(Item, client); } } break; } case 4://repair { Interfaces.IConquerItem Item = null; if (client.Inventory.TryGetItem(ItemUID, out Item)) { uint cost = (uint)(Item.MaximDurability - Item.Durability) / 2; if (cost == 0) cost = 1; if (client.Entity.ConquerPoints > cost) { client.Entity.ConquerPoints -= cost; Item.Durability = Item.MaximDurability; Item.SendAgate(client); Database.ConquerItemTable.UpdateItem(Item, client); } } break; } } break; } #endregion case 1128: { p1128 vp = new p1128(false); vp.Deserialize(packet); switch (vp.UID) { case 0://player city teleport { switch (vp.UID2) { //////////////////////////////////////////////////////////////////////////////////////////////////// case 1://tc client.Entity.Teleport(1002, 429, 378); break; case 2://pc client.Entity.Teleport(1011, 188, 264); break; case 3://ac client.Entity.Teleport(1020, 565, 562); break; case 4://dc client.Entity.Teleport(1000, 500, 650); break; case 5://bc client.Entity.Teleport(1015, 717, 571); break; //////////////////////////////////////////////////////////////////////////////////////// { } default: Console.WriteLine("Unknown 1128 portal subtype 1 : " + vp.UID2); break; } break; } case 1://Team city teleport { switch (vp.UID2) { //////////////////////////////////////////////////////////////////////////////////////////////////// case 1://tc foreach (Client.GameState teammate in client.Entity.Owner.Team.Teammates) { if (ServerBase.Kernel.GetDistance(client.Entity.X, client.Entity.Y, teammate.Entity.X, teammate.Entity.Y) <= 18) { teammate.Entity.Teleport(1002, 429, 378); } } client.Entity.Teleport(1002, 429, 378); break; case 2://pc foreach (Client.GameState teammate in client.Entity.Owner.Team.Teammates) { if (ServerBase.Kernel.GetDistance(client.Entity.X, client.Entity.Y, teammate.Entity.X, teammate.Entity.Y) <= 18) { teammate.Entity.Teleport(1011, 188, 264); } } client.Entity.Teleport(1011, 188, 264); break; case 3://ac foreach (Client.GameState teammate in client.Entity.Owner.Team.Teammates) { if (ServerBase.Kernel.GetDistance(client.Entity.X, client.Entity.Y, teammate.Entity.X, teammate.Entity.Y) <= 18) { teammate.Entity.Teleport(1020, 565, 562); } } client.Entity.Teleport(1020, 565, 562); break; case 4://dc foreach (Client.GameState teammate in client.Entity.Owner.Team.Teammates) { if (ServerBase.Kernel.GetDistance(client.Entity.X, client.Entity.Y, teammate.Entity.X, teammate.Entity.Y) <= 18) { teammate.Entity.Teleport(1000, 500, 650); } } client.Entity.Teleport(1000, 500, 650); break; case 5://bc foreach (Client.GameState teammate in client.Entity.Owner.Team.Teammates) { if (ServerBase.Kernel.GetDistance(client.Entity.X, client.Entity.Y, teammate.Entity.X, teammate.Entity.Y) <= 18) { teammate.Entity.Teleport(1015, 717, 571); } } client.Entity.Teleport(1015, 717, 571); break; //////////////////////////////////////////////////////////////////////////////////////// { } default: Console.WriteLine("Unknown 1128 portal subtype 2 : " + vp.UID2); break; } break; } default: Console.WriteLine("Unknown 1128 subtype: " + vp.UID); break; } break; } default: { if (client.Account.State == Conquer_Online_Server.Database.AccountTable.AccountState.ProjectManager) client.Send(new Message("Unknown type: " + ID + " with length " + packet.Length + "Unknown type: " + ID2, System.Drawing.Color.CadetBlue, Message.Talk)); if (ID == 1040) client.Send(packet); break; } } }
public static void GetDialog(NpcRequest npcRequest, GameState client) { if (AvatarLinker == null) AvatarLinker = new IniFile("\\database\\npc.ini"); //Console.WriteLine("[" + client.Entity.Name + "][NPC] " + npcRequest.NpcID + " : " + npcRequest.OptionID); if (!client.Map.Npcs.ContainsKey(client.ActiveNpc) || npcRequest == null || client == null || client.Entity == null || (npcRequest.NpcID == 0 && npcRequest.OptionID == 255)) return; if (client.Trade != null) if (client.Trade.InTrade) return; Dialogs dialog = new Dialogs(); dialog.Client = client; dialog.Replies = new List<NpcReply>(); INpc npcs = null; if (client.Map.Npcs.TryGetValue(client.ActiveNpc, out npcs)) { ushort avatar = (ushort)AvatarLinker.ReadInt16("NpcType" + (npcs.Mesh / 10), "SimpleObjID", 1); dialog.Avatar(avatar); } switch (client.Entity.MapID) { #region Twin City case 1002: { switch (client.ActiveNpc) { #region Enter Guild Arena case 380: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Would you like to enter the guild war arena?"); dialog.Option("Yes.", 1); dialog.Option("No.", 255); dialog.Send(); break; } case 1: { client.Entity.Teleport(1038, 348, 339); break; } } break; } #endregion #region Twin City case 10080: { switch (npcRequest.OptionID) { case 0: { if (client.Entity.PKPoints < 29) { dialog.Text("Hey there " + client.Entity.Name + "! I'm the craziest conductress!\nI also know how to send you to all the main cities.\nAnyways... Where are you headed? I may be able to teleport you there for 5,000 gold."); dialog.Option("Phoenix Castle.", 1); dialog.Option("Ape City.", 2); dialog.Option("Desert City.", 3); dialog.Option("Bird Island.", 4); dialog.Option("Mine Cave.", 5); dialog.Option("Market.", 6); dialog.Option("I don't care.", 255); dialog.Send(); break; } else { dialog.Text("I will not help MURDERS!"); dialog.Option("Ouch..", 255); dialog.Option("Then you are of no use to me!\nI'll kill you too!", 100); dialog.Send(); break; } } case 1: case 2: case 3: case 4: case 5: case 6: { ushort Map = 1002, X, Y; if (npcRequest.OptionID == 1) { X = 958; Y = 555; } else if (npcRequest.OptionID == 2) { X = 555; Y = 957; } else if (npcRequest.OptionID == 3) { X = 69; Y = 473; } else if (npcRequest.OptionID == 4) { X = 232; Y = 190; } else if (npcRequest.OptionID == 5) { X = 53; Y = 399; } else { X = 211; Y = 196; Map = 1036; } if (client.Entity.Money >= 5000) { client.Entity.Money -= 5000; client.Entity.Teleport(Map, X, Y); } else { dialog.Text("Hey! You don't have 5,000 gold do you?\nDon't you dare try to cheat me or I'll call the guards!"); dialog.Option("Crazy!", 255); dialog.Send(); } break; } case 100: { client.Entity.AddFlag(Update.Flags.FlashingName); client.Entity.FlashingNameStamp = Time32.Now; client.Entity.FlashingNameTime = 30; client.Send(Conquer_Online_Server.ServerBase.Constants.Warrent); dialog.Text("Guards! HELP! " + client.Entity.Name + " is trying to kill me!!"); dialog.Option("I'll get you!", 255); dialog.Send(); break; } } break; } #endregion #region Celestine case 20005: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Did you see those plants while comming over here? Do you see that pond right over there? You see I need clean water badly. If the clean water is united with 7 of 9 unique gems(except tortoise, thunder, glory) it can heal plants and clean ponds. In exchange of those 8 items, I will give you back a celestial stone, which is needed for first reborn."); dialog.Option("How do I get gems?", 1); dialog.Option("How do I get clean water?", 2); dialog.Option("I got the items.", 3); dialog.Option("Boring...", 255); dialog.Send(); break; } case 1: { dialog.Text("You can get gems simply by minning or killing monsters, as they drop gems sometime."); dialog.Option("How do I get clean water?", 2); dialog.Option("I got the items.", 3); dialog.Option("Boring...", 255); dialog.Send(); break; } case 2: { dialog.Text("In the first Island Map in Adventure Zone(GC1), you might find the WaterLord(517,732). You may kill it and it may give a CleanWater, with a 50% percent of success. Once killed you may wait 15 minutes, before it will respawn again."); dialog.Option("How do I get gems?", 1); dialog.Option("I got the items.", 3); dialog.Option("Boring...", 255); dialog.Send(); break; } case 3: { bool hasfornow = true; uint baseid = 700001; for (int c = 0; c < 70; c += 10) if (!client.Inventory.Contains((uint)(baseid + c), 1)) { hasfornow = false; break; } if (!hasfornow) { dialog.Text("You don't meet the requierments!"); dialog.Send(); break; } if (client.Inventory.Contains(721258, 1)) { for (int c = 0; c < 70; c += 10) client.Inventory.Remove((uint)(baseid + c), 1); client.Inventory.Remove(721258, 1); client.Inventory.Add(721259, 0, 1); } else { dialog.Text("You don't meet the requierments!"); dialog.Send(); break; } break; } } break; } #endregion #region GuildDirector case 10003: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello there. Do you want to create a new guild? You need level 90 and 500000 silver and you have to not belong to any guild. If you are a guild leader, then you can name 5 deputy leaders."); dialog.Option("Create guild.", 1); dialog.Option("Name deputy leader.", 3); dialog.Option("Move leadership.", 6); dialog.Option("Disband guild.", 9); dialog.Option("I don't have that.", 255); dialog.Send(); break; } case 9: { if (client.Guild != null && client.AsMember.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { dialog.Text("Are you sure you want to disband your guild?"); dialog.Option("Yes.", 10); dialog.Option("Ah, nevermind.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } break; } case 10: { if (client.Guild != null && client.AsMember.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { client.Guild.Disband(); } break; } case 6: { if (client.Guild != null && client.AsMember.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { dialog.Text("Input here the member name you want to promote as guild leader."); dialog.Input("Here:", 7, 16); dialog.Option("Ah, nevermind.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } break; } case 7: { if (client.Guild != null && client.AsMember.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { if (npcRequest.Input != "") { var member = client.Guild.GetMemberByName(npcRequest.Input); if (member == null) { dialog.Text("There is no such member in your guild."); dialog.Option("Ah, nevermind.", 255); dialog.Send(); return; } else { if (member.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { dialog.Text("You cannot promote this member anymore."); dialog.Option("Ah, nevermind.", 255); dialog.Send(); return; } else { if (member.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader) client.Guild.DeputyLeaderCount--; member.Rank = Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader; if (member.IsOnline) { client.Guild.SendGuild(member.Client); member.Client.Entity.GuildRank = (ushort)member.Rank; member.Client.Screen.FullWipe(); member.Client.Screen.Reload(null); } client.AsMember.Rank = Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader; if (client.AsMember.IsOnline) { client.Guild.SendGuild(client); client.Entity.GuildRank = (ushort)member.Rank; client.Screen.FullWipe(); client.Screen.Reload(null); } client.Guild.DeputyLeaderCount++; } } } } break; } case 3: { if (client.Guild != null && client.AsMember.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { dialog.Text("You have now " + client.Guild.DeputyLeaderCount + " named deupty leaders."); if (client.Guild.DeputyLeaderCount == 5) { dialog.Text("You cannot name any other deupty leader."); dialog.Option("Ah, nevermind.", 255); dialog.Send(); } else { dialog.Text("Input here the member name you want to promote as deputy leader."); dialog.Input("Here:", 4, 16); dialog.Option("Ah, nevermind.", 255); dialog.Send(); } } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } break; } case 4: { if (client.Guild != null && client.AsMember.Rank == Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader) { if (npcRequest.Input != "") { var member = client.Guild.GetMemberByName(npcRequest.Input); if (member == null) { dialog.Text("There is no such member in your guild."); dialog.Option("Ah, nevermind.", 255); dialog.Send(); return; } else { if (member.Rank != Conquer_Online_Server.Game.Enums.GuildMemberRank.Member) { dialog.Text("You cannot promote this member anymore."); dialog.Option("Ah, nevermind.", 255); dialog.Send(); return; } else { member.Rank = Conquer_Online_Server.Game.Enums.GuildMemberRank.DeputyLeader; if (member.IsOnline) { client.Guild.SendGuild(member.Client); member.Client.Entity.GuildRank = (ushort)member.Rank; member.Client.Screen.FullWipe(); member.Client.Screen.Reload(null); } client.Guild.DeputyLeaderCount++; } } } } break; } case 1: { if (client.Guild == null && client.Entity.Level >= 90 && client.Entity.Money >= 500000) { dialog.Text("Name your guild. The name must have less than 16 characters of any type."); dialog.Input("Here:", 2, 16); dialog.Option("Ah, nevermind.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } break; } case 2: { if (client.Guild == null && client.Entity.Level >= 90 && client.Entity.Money >= 500000) { if (npcRequest.Input != "") { client.Entity.Money -= 500000; Guild guild = new Guild(client.Entity.Name); guild.ID = Guild.GuildCounter.Next; guild.SilverFund = 500000; client.AsMember = new Conquer_Online_Server.Game.ConquerStructures.Society.Guild.Member(guild.ID) { SilverDonation = 500000, ID = client.Entity.UID, Level = client.Entity.Level, Name = client.Entity.Name, Rank = Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader, }; if (client.NobilityInformation != null) { client.AsMember.Gender = client.NobilityInformation.Gender; client.AsMember.NobilityRank = client.NobilityInformation.Rank; } client.Entity.GuildID = (ushort)guild.ID; client.Entity.GuildRank = (ushort)Conquer_Online_Server.Game.Enums.GuildMemberRank.GuildLeader; guild.Leader = client.AsMember; client.Guild = guild; guild.Create(npcRequest.Input); guild.MemberCount++; guild.SendGuild(client); guild.SendName(client); client.Screen.FullWipe(); client.Screen.Reload(null); } } break; } } break; } #endregion #region Barber case 10002: { dialog.Avatar(241); switch (npcRequest.OptionID) { case 0: { dialog.Text("What kind of hair style would you like?"); dialog.Option("New Styles", 1); dialog.Option("Nostalgic Styles", 2); dialog.Option("Special Styles", 3); dialog.Option("Nevermind", 255); dialog.Send(); break; } #region New Hair Styles #region Options case 1: { dialog.Text("Which new style do you want?"); dialog.Option("New Hairstyle 1", 10); dialog.Option("New Hairstyle 2", 11); dialog.Option("New Hairstyle 3", 12); dialog.Option("New Hairstyle 4", 13); dialog.Option("New Hairstyle 5", 14); dialog.Option("New Hairstyle 6", 15); dialog.Option("New Hairstyle 7", 16); dialog.Option("More styles.", 102); dialog.Send(); break; } case 102: { dialog.Text("Which new style do you want?"); dialog.Option("New Hairstyle 8", 17); dialog.Option("New Hairstyle 9", 18); dialog.Option("New Hairstyle 10", 19); dialog.Option("New Hairstyle 11", 20); dialog.Option("New Hairstyle 12", 21); dialog.Option("Back.", 1); dialog.Option("Nevermind", 255); dialog.Send(); break; } #endregion #region ... case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: { client.Entity.HairStyle = ushort.Parse(Convert.ToString(client.Entity.HairStyle)[0] + (20 + npcRequest.OptionID).ToString()); dialog.Text("Done!"); dialog.Option("Thanks.", 255); dialog.Send(); break; } #endregion #endregion #region Nostalgic Hair Styles #region Options case 2: { dialog.Text("Which new style do you want?"); dialog.Option("Nostalgic Hairstyle 1", 30); dialog.Option("Nostalgic Hairstyle 2", 31); dialog.Option("Nostalgic Hairstyle 3", 32); dialog.Option("Nostalgic Hairstyle 4", 33); dialog.Option("Nostalgic Hairstyle 5", 34); dialog.Option("Nostalgic Hairstyle 6", 35); dialog.Option("Nostalgic Hairstyle 7", 36); dialog.Option("Nevermind.", 255); dialog.Send(); break; } #endregion #region ... case 30: case 31: case 32: case 33: case 34: case 35: case 36: { client.Entity.HairStyle = ushort.Parse(Convert.ToString(client.Entity.HairStyle)[0] + (npcRequest.OptionID - 20).ToString()); dialog.Text("Done!"); dialog.Option("Thanks.", 255); dialog.Send(); break; } #endregion #endregion #region Special Hair Styles #region Options case 3: { dialog.Text("Which new style do you want?"); dialog.Option("New Hairstyle 1", 40); dialog.Option("New Hairstyle 2", 41); dialog.Option("New Hairstyle 3", 42); dialog.Option("New Hairstyle 4", 43); dialog.Option("New Hairstyle 5", 44); dialog.Option("Nevermind.", 255); dialog.Send(); break; } #endregion #region ... case 40: case 41: case 42: case 43: case 44: { client.Entity.HairStyle = ushort.Parse(Convert.ToString(client.Entity.HairStyle)[0] + (npcRequest.OptionID - 19).ToString()); dialog.Text("Done!"); dialog.Option("Thanks.", 255); dialog.Send(); break; } #endregion #endregion } break; } #endregion #region Assistant case 4293: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Do you want to visit the mine?"); dialog.Option("Yes.", 1); dialog.Option("No.", 255); dialog.Send(); break; } case 1: { client.Entity.Teleport(1028, 155, 95); break; } } break; } #endregion #region General Peace case 10054: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Stop!\nThe path ahead of you is dangerous.\nI don't recommend you continue on this path.\n"); if (client.Entity.Level <= 70) { dialog.Text("If you are looking from stronger monsters you should look in the Canyon first.\n"); dialog.Text("You can find your way there in the south-west part of the wind plain.\n"); } dialog.Option("Leave me alone General.", 1); dialog.Option("Okay, thanks for the warning.", 255); dialog.Send(); break; } case 1: { client.Entity.Teleport(1000, 973, 668); break; } } break; } #endregion #region WarehouseGuardian case 1061: //WarehouseGuardian { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello. I'm the one that was choosen to set/change/remove the password of the warehouse. I must say without a password you could lose a lot yet, which you probably already knew. My advice for you is that you should have a password, because it could save you of many problems. If you have a password yet, you can remove or change it."); if (client.WarehousePW == "") { dialog.Option("Okay, let me set the password.", 1); } else { dialog.Option("I want to change the password.", 2); dialog.Option("I want to remove the password.", 3); } dialog.Option("Forget it.", 255); dialog.Send(); break; } #region Set password case 1: { if (client.WarehousePW == "") { dialog.Text("Please insert a password that's built only with numbers and whose length is less or equal to 8. An example can be 74352."); dialog.Input("Here:", 4, 8); dialog.Option("Forget it.", 255); } else { dialog.Text("You have a password already set."); dialog.Option("Alright.", 255); } dialog.Send(); break; } case 4: { if (client.WarehousePW == "") { if (CheckNumberPassword(npcRequest.Input) && npcRequest.Input.Length <= 8) { client.TempPassword = npcRequest.Input; dialog.Text("Please insert the password again."); dialog.Input("Here:", 5, 8); dialog.Option("Forget it.", 255); } else { dialog.Text("Invalid password, please try again."); dialog.Input("Here:", 4, 8); dialog.Option("Alright.", 255); } } else { dialog.Text("You have a password already set."); dialog.Option("Alright.", 255); } dialog.Send(); break; } case 5: { if (client.WarehousePW == "") { if (CheckNumberPassword(npcRequest.Input) && npcRequest.Input.Length <= 8) { if (client.TempPassword == npcRequest.Input) { client.TempPassword = ""; client.WarehousePW = npcRequest.Input; dialog.Text("Password set!"); dialog.Option("Thank you.", 255); } else { dialog.Text("The password doesn't match. Insert again?"); dialog.Input("Here:", 5, 8); dialog.Option("Forget it.", 255); } } else { dialog.Text("Invalid password, please try again."); dialog.Input("Here:", 5, 8); dialog.Option("Alright.", 255); } } else { dialog.Text("You have a password already set."); dialog.Option("Alright.", 255); } dialog.Send(); break; } #endregion #region Change password case 2: { if (client.WarehousePW != "") { dialog.Text("Please insert the password you have now."); dialog.Input("Here:", 6, 8); dialog.Option("Forget it.", 255); } else { dialog.Text("You don't have a password set."); dialog.Option("Alright.", 255); } dialog.Send(); break; } case 6: { if (client.WarehousePW != "") { if (CheckNumberPassword(npcRequest.Input) && npcRequest.Input.Length <= 8) { if (client.WarehousePW == npcRequest.Input) { dialog.Text("Please insert the password again."); dialog.Input("Here:", 7, 8); dialog.Option("Forget it.", 255); } else { dialog.Text("Wrong password. Try again?"); dialog.Input("Here:", 6, 8); dialog.Option("Alright.", 255); } } else { dialog.Text("Invalid password, please try again."); dialog.Input("Here:", 6, 8); dialog.Option("Alright.", 255); } } else { dialog.Text("You don't have a password set."); dialog.Option("Alright.", 255); } dialog.Send(); break; } case 7: { if (client.WarehousePW != "") { if (CheckNumberPassword(npcRequest.Input) && npcRequest.Input.Length <= 8) { client.TempPassword = npcRequest.Input; dialog.Text("Please insert the password again."); dialog.Input("Here:", 8, 8); dialog.Option("Forget it.", 255); } else { dialog.Text("Invalid password, please try again."); dialog.Input("Here:", 7, 8); dialog.Option("Alright.", 255); } } else { dialog.Text("You don't have a password set."); dialog.Option("Alright.", 255); } dialog.Send(); break; } case 8: { if (client.WarehousePW != "") { if (CheckNumberPassword(npcRequest.Input) && npcRequest.Input.Length <= 8) { if (client.TempPassword == npcRequest.Input) { client.TempPassword = ""; client.WarehousePW = npcRequest.Input; dialog.Text("Password changed!"); dialog.Option("Thank you.", 255); } else { dialog.Text("Wrong password."); dialog.Input("Here:", 8, 8); dialog.Option("Alright.", 255); } } else { dialog.Text("Invalid password, please try again."); dialog.Input("Here:", 8, 8); dialog.Option("Alright.", 255); } } else { dialog.Text("You don't have a password set."); dialog.Option("Alright.", 255); } dialog.Send(); break; } #endregion #region Remove password case 3: { if (client.WarehousePW != "") { dialog.Text("Please insert the password you have now."); dialog.Input("Here:", 9, 8); dialog.Option("Forget it.", 255); } else { dialog.Text("You don't have a password set."); dialog.Option("Alright.", 255); } dialog.Send(); break; } case 9: { if (client.WarehousePW != "") { if (CheckNumberPassword(npcRequest.Input) && npcRequest.Input.Length <= 8) { if (client.WarehousePW == npcRequest.Input) { dialog.Text("Please insert the password again."); dialog.Input("Here:", 10, 8); dialog.Option("Forget it.", 255); } else { dialog.Text("Wrong password. Try again?"); dialog.Input("Here:", 9, 8); dialog.Option("Alright.", 255); } } else { dialog.Text("Invalid password, please try again."); dialog.Input("Here:", 9, 8); dialog.Option("Alright.", 255); } } else { dialog.Text("You don't have a password set."); dialog.Option("Alright.", 255); } dialog.Send(); break; } case 10: { if (client.WarehousePW != "") { if (CheckNumberPassword(npcRequest.Input) && npcRequest.Input.Length <= 8) { if (client.WarehousePW == npcRequest.Input) { client.WarehousePW = ""; client.WarehouseOpen = true; dialog.Text("Password removed."); dialog.Option("Thank you.", 255); } } else { dialog.Text("Invalid password, please try again."); dialog.Input("Here:", 10, 8); dialog.Option("Alright.", 255); } } else { dialog.Text("You don't have a password set."); dialog.Option("Alright.", 255); } dialog.Send(); break; } #endregion } break; } #endregion #region Jail npc case 10081: //Jail npc { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello there. I can teleport you in jail for the amount of 1000 silvers. Do you want to proceed?"); dialog.Option("Sure.", 1); dialog.Option("I'm standing by.", 255); dialog.Send(); break; } case 1: { if (client.Entity.Money >= 1000) { client.Entity.Money -= 1000; client.Entity.Teleport(6000, 32, 72); } else { dialog.Text("You need 1000 silvers to be able to enter the jail."); dialog.Option("Alright.", 255); } break; } } break; } #endregion #region Arena npc case 10021: //Arena npc { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello there. I can teleport you in jail for the amount of 50 silvers. Do you want to proceed?"); dialog.Option("Sure.", 1); dialog.Option("I'm standing by.", 255); dialog.Send(); break; } case 1: { if (client.Entity.Money >= 50) { client.Entity.Money -= 50; client.Entity.Teleport(1005, 51, 71); } else { dialog.Text("You need 50 silvers to be able to enter the jail."); dialog.Option("Alright.", 255); } break; } } break; } #endregion #region ShopBoy case 10063: //ShopBoy { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello there. I can teleport you in our shop, but I can also dye your armor black for the price of one DragonBall. What do you say?"); dialog.Option("Teleport me in the shop.", 1); dialog.Option("Dye my armor black.", 2); dialog.Option("I'm standing by.", 255); dialog.Send(); break; } case 1: { client.Entity.Teleport(1008, 22, 26); break; } case 2: { if (client.Inventory.Contains(1088000, 1)) { IConquerItem armor = client.Equipment.TryGetItem(3); if (armor != null && armor.ID != 0) { client.Inventory.Remove(1088000, 1); armor.Color = Conquer_Online_Server.Game.Enums.Color.Black; Conquer_Online_Server.Database.ConquerItemTable.UpdateColor(armor, client); armor.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; armor.Send(client); client.Equipment.UpdateEntityPacket(); } else { dialog.Text("You don't wear an armor right now so I can't do anything."); dialog.Option("Ah alright.", 255); dialog.Send(); } } else { dialog.Text("Hmm...You don't have one DragonBall so I can't dye your armor."); dialog.Option("Ah alright.", 255); dialog.Send(); } break; } } break; } #endregion #region Kungfu Boy case 100229: { // If inv contains jade glyph // npcRequest.OptionID = 5 switch (npcRequest.OptionID) { case 0: { //#warning (Kungfu Boy) Check for begenniers quest, check for the note. Echo this text. dialog.Text("I started learning Kungfu when I was very young.\nNow I have learn to master my Chi very well! Wanna have a try?"); dialog.Option("Yeah!", 1); dialog.Option("I don't care...", 255); dialog.Send(); break; } case 1: { dialog.Text("Oh, a message from the Village Gateman? I see.\nHe wants me to teach you how to master your Chi."); dialog.Option("I'm listening.", 2); dialog.Send(); break; } case 2: { dialog.Text("Press the Ctrl button, move the mouse arrow to the place you want to jump to and left click."); dialog.Text("You should know, you can't jump to a place you can't just normally walk to sometimes."); dialog.Option("Gotcha.", 3); dialog.Send(); break; } case 3: { dialog.Text("Good! It seems that you have mastered this skill. One more thing!\n"); dialog.Text("My sister, Kungfu Girl, has stolen my Jade Glyph and taken it up onto the roof behind me. Can you go get it for me?"); dialog.Option("No problem.", 4); dialog.Send(); break; } case 4: { //#warning (Kungfu boy) Add quest progress client.Send(new Message("Jump to the roof behind Kungfu Boy and catch his mischievous sister!", System.Drawing.Color.Green, Message.PopUP)); break; } case 5: { dialog.Text("Hey you got it! Thank you. I see you've mastered your Chi."); dialog.Option("I have.", 6); dialog.Send(); break; } case 6: { dialog.Text("Well, thats good. I storngly recommend you go visit the Armorer in Twin City."); dialog.Text(" You need to pick out some armor. It will save your life!"); dialog.Option("I'll think about it.", 255); dialog.Send(); break; } } break; } #endregion #region Kungfu Girl case 127271: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Haha! I wanted to play a trick on my brother! Don't tell him."); dialog.Option("He knows already.", 2); dialog.Option("You are very naughty.", 1); dialog.Send(); break; } case 1: { dialog.Text("Teehee!"); dialog.Option("He knows about this, you know.", 2); dialog.Send(); break; } case 2: { dialog.Text("Oh, well you got me.... Alright. Here's his Jade Glyph. Take it."); dialog.Option("Good!", 3); dialog.Send(); break; } case 3: { //#warning (Kungfu boy) Add quest progress client.Send(new Message("You got Kungfu Boy's Jade Glyph back from Kungfu Girl! Take it back to Kungfu Boy.", System.Drawing.Color.Green, Message.PopUP)); break; } } break; } #endregion #region Simon case 1152: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hmm, a few years ago, me and some friends of mine, started exploring the mountains. It was an usual day, cloudy with a very happy sun. We all went on the mountain to explore and level up a bit. Somehow we was all tricked into seeing a fantasy land and we went that way. We found a big rock that looked like a door, we broke it and went in. Since then, my friends are in the place we found and which we called the labirinth as it was full of powerful creatures that were leading each of the four levels of the labirith. Each friend of mine chose a floor and they await great conquerors at the end of each floor. "); dialog.Option("Tell me more about it.", 1); dialog.Option("Blah, boring.", 255); dialog.Send(); break; } case 1: { dialog.Text("In each floor there are three kinds of monsters, floor one has Slingers, GoldGhosts and the powerful Gibbon. The second floor has the AgileRats, Bladelings and the snake Naga. The third floor has BlueBirds, FiendBats and the mighty Talon. The last floor, the fourth, has MinotaurL120 and the Syren. Each of them drops some items, and you'll need some to get to the next floor, or some others to claim a reward from me."); dialog.Option("What rewards?", 2); dialog.Option("Blah, boring.", 255); dialog.Send(); break; } case 2: { dialog.Text("In exchange of 17 SunDiamonds(dropped by Slingers) I will give you two meteors, for 17 MoonDiamonds(dropped by Bladelings), I will give you 4 meteors, for 17 StarDiamonds(dropped by BlueBirds), I will give you 4 meteor tears, and lastly for 17 CloudDiamonds, I will give you one DragonBall. More over, to get to the second floor from first one you need a SkyToken(dropped by GoldGhost), from second to third a EarthToken(dropped by AgileRat) and from third to fourth a SoulToken(dropped by FiendBat)."); dialog.Option("Enough talking.", 3); dialog.Option("Claim my reward.", 4); dialog.Option("Blah, boring.", 255); dialog.Send(); break; } case 3: { dialog.Text("Right. In exchange of 2000 VirtuePoints, I will be more than glad to teleport you in the first floor of the Labirith."); dialog.Option("Here, take them.", 5); dialog.Option("Blah, boring.", 255); dialog.Send(); break; } case 4: { dialog.Text("What do you want to claim?"); dialog.Option("Two Meteors.", 6); dialog.Option("Four Meteors.", 7); dialog.Option("Four Meteor tears.", 8); dialog.Option("One DragonBall.", 9); dialog.Option("Blah, boring.", 255); dialog.Send(); break; } case 5: { if (client.VirtuePoints >= 2000) { client.VirtuePoints -= 2000; client.Entity.Teleport(1351, 018, 127); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh, sorry.", 255); dialog.Send(); } break; } case 6: { if (client.Inventory.Contains(721533, 17)) { client.Inventory.Remove(721533, 17); client.Inventory.Add(1088001, 0, 2); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh, sorry.", 255); dialog.Send(); } break; } case 7: { if (client.Inventory.Contains(721534, 17)) { client.Inventory.Remove(721534, 17); client.Inventory.Add(1088001, 0, 4); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh, sorry.", 255); dialog.Send(); } break; } case 8: { if (client.Inventory.Contains(721535, 17)) { client.Inventory.Remove(721535, 17); client.Inventory.Add(1088002, 0, 4); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh, sorry.", 255); dialog.Send(); } break; } case 9: { if (client.Inventory.Contains(721536, 17)) { client.Inventory.Remove(721536, 17); client.Inventory.Add(1088000, 0, 1); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh, sorry.", 255); dialog.Send(); } break; } } break; } #endregion #region MoonBoxQuest #region FortuneTeller case 600050: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello " + client.Entity.Name + ", Have you heard of the palace method?"); dialog.Option("Palace method?..", 1); dialog.Option("Don't care!", 255); dialog.Send(); break; } case 1: { dialog.Text("I discovered a mystical tactic, but I was not able to solve it.\nI almost died! It's very dangerous."); dialog.Option("Sounds like my kind of fun.", 2); dialog.Option("Too dangerous", 255); dialog.Send(); break; } case 2: { dialog.Text("I'm serious! You don't understand it's very dangerous..."); dialog.Option("Yea yea. Just take my there.", 3); dialog.Option("Nevermind... o.o", 255); dialog.Send(); break; } case 3: { client.Entity.Teleport(1042, 028, 033); dialog.Text("I warned you...."); dialog.Option("I think you're full of it.\nThere's nothing here.", 255); dialog.Send(); break; } } break; } #endregion #endregion #region FrozenGrottoGeneral case 27837: { switch (npcRequest.OptionID) { case 0: { dialog.Text("There is a dangeous frozen cavern south of nowhere! It's too dangerous for you to enter! Even Leroy Jenkins died there!"); dialog.Option("I want to enter the grotto.", 3); dialog.Option("Blah, boring.", 255); dialog.Send(); break; } case 3: { dialog.Text("Well, ok. But I'll only let you go in there if you've voted for the establishment!\nOtherwise you will need a substantial bribe...!"); dialog.Option("Let me in!", 4); if (client.Entity.ConquerPoints >= 1200) dialog.Option("Here's 1,200 CPs.", 5); else dialog.Option("I'm too poor.", 255); dialog.Send(); break; } case 5: case 4: { if (npcRequest.OptionID == 5) { client.Entity.ConquerPoints -= 1200; dialog.Text("A fine bribe! Although, you really should consider supporting the establishment!\n"); } dialog.Text("Ok, well.. Which floor of the Grotto do you want to enter?\n"); dialog.Option("Floor 1 [Lv127]", 1); dialog.Option("Floor 2 [Lv132]", 2); dialog.Send(); break; } case 1: { client.Entity.Teleport(1762, 61, 257); break; } case 2: { client.Entity.Teleport(7007, 61, 257); break; } } break; } #endregion } break; } #endregion #region MoonboxQuest case 1040: case 1041: case 1042: case 1043: case 1044: case 1045: case 1046: case 1047: case 1048: case 1049: case 1050: case 1051: { switch (client.ActiveNpc) { #region MoonBoxQuest #region Maggie case 600003: { switch (npcRequest.OptionID) { case 0: { dialog.Text("What are you here for!?\nPlease do not go ahead, or you will enter the very dangerous tactics."); dialog.Option("....You too?", 1); dialog.Option("Send me to the tatics.", 4); dialog.Option("I had better leave here!", 255); dialog.Send(); break; } case 1: { dialog.Text("The tactic is so changeful, I once thought highly of my self\nand died from the damned tactics."); dialog.Option("How can I solve the tatics?", 2); dialog.Option("I do not believe in this!", 255); dialog.Send(); break; } case 2: { dialog.Text("I have studied it for so may years, but fail to work it out.\nPerhaps you can... Would you like to give it a try?"); dialog.Option("Yes. I like a good challenge.", 3); dialog.Option("I changed my mind..", 255); dialog.Send(); break; } case 3: { dialog.Text("You will be entrapped in the tatic if you enter.\nYou won't be able to leave until you've found a special token."); dialog.Option("I'm ready to do this.", 5); dialog.Option("No. This is too risky.", 255); dialog.Send(); break; } case 4: { dialog.Text("Alright, I'll take you there.\nYou must be sure to pick up the token!"); dialog.Option("Okay.", 5); dialog.Send(); break; } case 5: { ushort map = 1042; map += (ushort)Conquer_Online_Server.ServerBase.Kernel.Random.Next(1, 8); client.Entity.Teleport(map, 210, 164); break; } } break; } #endregion #region GuardianGod case 600004: case 600006: case 600008: case 600010: case 600012: case 600014: { switch (npcRequest.OptionID) { case 0: { string[] Tactics = { "Peace", "Chaos", "Deserted", "Disturbed", "Prosperous", "Calmed" }; uint almostid = client.ActiveNpc / 2; uint baseId = 721010; uint tactic = almostid - 300002; baseId += tactic; if (client.Inventory.Contains(baseId, 1)) { dialog.Text("Congratulations, you have a token for this tactic. This tactic is " + Tactics[tactic] + "."); dialog.Option("Ok, thanks!", 255); dialog.Send(); break; } else { dialog.Text("You don't have a token for this tactic, I'm afraid I cannot tell you which tactic is it."); dialog.Option("Ahh, thanks anyway!", 255); dialog.Send(); break; } } } break; } case 600016: { switch (npcRequest.OptionID) { case 0: { dialog.Text("You are in DeathTactic, you either die or proceed if you have 6 tokens that are not the same."); dialog.Option("Ok, thanks!", 255); dialog.Send(); break; } } break; } #endregion #region Ghost case 600005: case 600007: case 600009: case 600011: case 600013: case 600015: { uint almostId = (client.ActiveNpc - 1) / 2; uint baseId = 721010; uint tactic = almostId - 300002; baseId += tactic; switch (npcRequest.OptionID) { case 0: { if (client.Inventory.Contains(baseId, 1)) { dialog.Text("Nice you have the token!\nAre you ready to leave?"); dialog.Option("Yes.", 1); dialog.Option("No.", 255); dialog.Send(); } else { dialog.Text("How dare you bother me without the token!\nYou will not leave this place until the token has been found!"); dialog.Option("Sorry I'll go find it!", 255); dialog.Send(); } break; } case 1: { if (client.Inventory.Contains(baseId, 1)) { client.Entity.Teleport(1042, 028, 033); } break; } } break; } case 600017: { switch (npcRequest.OptionID) { case 0: { dialog.Text("I've been trapped here forever.\nI didn't have all the token before coming here."); dialog.Option("What about me?", 1); dialog.Send(); break; } case 1: { dialog.Text("If you have all the tokens you may leave this place with a moonbox.\nIf you don't.... You must die."); dialog.Option("I have them! Please don't kill me!", 2); dialog.Option("Oh no...", 255); dialog.Send(); break; } case 2: { if (client.Inventory.Contains(721010, 1) && client.Inventory.Contains(721011, 1) && client.Inventory.Contains(721012, 1) && client.Inventory.Contains(721013, 1) && client.Inventory.Contains(721014, 1) && client.Inventory.Contains(721015, 1)) { client.Inventory.Remove(721010, 1); client.Inventory.Remove(721011, 1); client.Inventory.Remove(721012, 1); client.Inventory.Remove(721013, 1); client.Inventory.Remove(721014, 1); client.Inventory.Remove(721015, 1); client.Inventory.Add(721072, 0, 1); client.Entity.Teleport(1050, 210, 164); } else { dialog.Text("You're wrong. Enjoy your death."); dialog.Option("No!", 255); dialog.Send(); } break; } } break; } #endregion #region VagrantGhost case 600018: case 600019: case 600020: case 600021: case 600022: case 600023: case 600024: case 600025: case 600026: case 600027: case 600028: case 600029: case 600030: case 600031: case 600032: case 600033: case 600034: case 600035: case 600036: case 600037: case 600038: case 600039: case 600040: case 600041: case 600042: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Help me... Please"); dialog.Option("Who are you?", 1); dialog.Send(); break; } case 1: { dialog.Text("I am a warrior trapped in these tactics please help me to revive!"); dialog.Option("I have the SoulJade.", 2); dialog.Option("No.", 3); dialog.Send(); break; } case 2: { if (client.Inventory.Contains(721072, 1)) { dialog.Text("Thank you! Will you recive my gift of a Moonbox?"); dialog.Option("Yes.", 3); dialog.Option("Not needed.", 4); dialog.Send(); } else { dialog.Text("You do not...even so, I shall help you leave this cursed map."); dialog.Option("Please get me out of here.", 5); dialog.Send(); } break; } case 3: { if (client.Inventory.Contains(721072, 1)) { client.Inventory.Remove(721072, 1); client.Inventory.Add(721080, 0, 1); client.Entity.Teleport(1042, 028, 033); } break; } case 4: { client.Inventory.Remove(721072, 1); client.Entity.Teleport(1042, 028, 033); break; } case 5: { client.Entity.Teleport(1042, 028, 033); break; } } break; } #endregion #endregion } break; } #endregion #region Ape Canyon case 1020: { switch (client.ActiveNpc) { #region Ape City case 10053: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello " + client.Entity.Name + ", I can send you on your way for just 100 silvers."); dialog.Text("\nWhere would you like to go?"); dialog.Option("Twin City", 1); dialog.Option("Market", 2); dialog.Option("Nevermind", 255); dialog.Send(); break; } case 1: { if (client.Entity.Money >= 100) { client.Entity.Money -= 100; client.Entity.Teleport(1020, 378, 13); } else { dialog.Text("You do not have 100 silvers."); dialog.Option("Aww!", 255); dialog.Send(); } break; } case 2: { if (client.Entity.Money >= 100) { client.Entity.Money -= 100; client.Entity.Teleport(1036, 211, 196); } else { dialog.Text("You do not have 100 silvers."); dialog.Option("Aww!", 255); dialog.Send(); } break; } } break; } #endregion #region Ape Canyon #region Alex case 3600: { switch (npcRequest.OptionID) { case 0: { dialog.Text("You don't worry, it's not gonna hurt you a bit when getting the third life. You just need an exemption token and it's all going to be fine."); dialog.Option("Here is the ExemptionToken.", 1); dialog.Option("I'll just leave", 255); dialog.Send(); break; } case 1: { if (client.Entity.Reborn == 1) { if (client.Entity.Class % 10 == 5 && client.Entity.Level >= (client.Entity.Class == 135 ? 110 : 120)) { dialog.Text("Select the class you want to reborn in."); dialog.Option("Trojan.", 11); dialog.Option("Warrior.", 21); dialog.Option("Archer.", 41); dialog.Option("WaterTaoist.", 132); dialog.Option("FireTaoist.", 142); dialog.Option("Ninja.", 51); dialog.Option("Monk.", 61); dialog.Option("Nothing thank you.", 255); dialog.Send(); } else { dialog.Text("If you are a water saint you need level 110+, else you need 120+."); dialog.Option("I'll just leave", 255); dialog.Send(); break; } } else { dialog.Text("You need to be in the second life to be able to get the third life."); dialog.Option("I'll just leave", 255); dialog.Send(); break; } break; } default: { if (npcRequest.OptionID == 255) return; if (client.Entity.Reborn == 1) { if (client.Entity.Class % 10 == 5 && client.Entity.Level >= (client.Entity.Class == 135 ? 110 : 120)) { if (client.Inventory.Contains(723701, 1)) { if (client.Reborn(npcRequest.OptionID)) { client.Inventory.Remove(723701, 1); } else { dialog.Text("You need two free slots in your inventory."); dialog.Option("I'll just leave", 255); dialog.Send(); break; } } } else { dialog.Text("If you are a water saint you need level 110+, else you need 120+."); dialog.Option("I'll just leave", 255); dialog.Send(); break; } } else { dialog.Text("You need to be in the second life to be able to get the third life."); dialog.Option("I'll just leave", 255); dialog.Send(); break; } break; } } break; } #endregion #region Assistant case 126: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Do you want to visit the mine?"); dialog.Option("Yes.", 1); dialog.Option("No.", 255); dialog.Send(); break; } case 1: { client.Entity.Teleport(1026, 142, 105); break; } } break; } #endregion #endregion } break; } #endregion #region PhoenixCastle case 1011: { switch (client.ActiveNpc) { #region Phoenix Castle case 10052: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello " + client.Entity.Name + ", I can send you on your way for just 100 silvers."); dialog.Text("\nWhere would you like to go?"); dialog.Option("Market", 1); dialog.Option("Twin City", 2); dialog.Option("Nevermind", 255); dialog.Send(); break; } case 1: { if (client.Entity.Money >= 100) { client.Entity.Money -= 100; client.Entity.Teleport(1036, 211, 196); } else { dialog.Text("You do not have 100 silvers."); dialog.Option("Aww!", 255); dialog.Send(); } break; } case 2: { if (client.Entity.Money >= 100) { client.Entity.Money -= 100; client.Entity.Teleport(10, 377); } else { dialog.Text("You do not have 100 silvers."); dialog.Option("Aww!", 255); dialog.Send(); } break; } } break; } #endregion #region PhoenixCity #region Assistant case 125: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Do you want to visit the mine?"); dialog.Option("Yes.", 1); dialog.Option("No.", 255); dialog.Send(); break; } case 1: { client.Entity.Teleport(1025, 30, 71); break; } } break; } #endregion #endregion } break; } #endregion #region DesertCity case 1000: { switch (client.ActiveNpc) { #region Desert city case 10051: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello " + client.Entity.Name + ", I can set you on your way for just 100 silver.\n"); dialog.Text("Where would you like to go?"); dialog.Option("Twin City", 1); dialog.Option("Market", 3); dialog.Option("Mystic Castle", 2); dialog.Option("Nevermind.", 255); dialog.Send(); break; } case 1: { if (client.Entity.Money >= 100) { client.Entity.Teleport(1000, 973, 668); client.Entity.Money -= 100; } else { dialog.Text("You do not have 100 silvers."); dialog.Option("Aww!", 255); dialog.Send(); } break; } case 2: { if (client.Entity.Money >= 100) { client.Entity.Teleport(1000, 80, 320); client.Entity.Money -= 100; } else { dialog.Text("You do not have 100 silvers."); dialog.Option("Aww!", 255); dialog.Send(); } break; } case 3: { if (client.Entity.Money >= 100) { client.Entity.Teleport(1036, 211, 196); client.Entity.Money -= 100; } else { dialog.Text("You do not have 100 silvers."); dialog.Option("Aww!", 255); dialog.Send(); } break; } } break; } #endregion #region DesertCity #region Assistant case 127: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Do you want to visit the mine?"); dialog.Option("Yes.", 1); dialog.Option("No.", 255); dialog.Send(); break; } case 1: { client.Entity.Teleport(1027, 142, 105); break; } } break; } #endregion #endregion } break; } #endregion #region Bird Village case 1015: { switch (client.ActiveNpc) { #region Bird Island case 10056: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello " + client.Entity.Name + ", I can send you on your way for just 100 silvers."); dialog.Text("\nWhere would you like to go?"); dialog.Option("Twin City", 1); dialog.Option("Market", 2); dialog.Option("Nevermind", 255); dialog.Send(); break; } case 1: { if (client.Entity.Money >= 100) { client.Entity.Money -= 100; client.Entity.Teleport(1015, 1015, 710); } else { dialog.Text("You do not have 100 silvers."); dialog.Option("Aww!", 255); dialog.Send(); } break; } case 2: { if (client.Entity.Money >= 100) { client.Entity.Money -= 100; client.Entity.Teleport(1036, 211, 196); } else { dialog.Text("You do not have 100 silvers."); dialog.Option("Aww!", 255); dialog.Send(); } break; } } break; } #endregion #region Bird Village #region ArtisanOu case 41: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello there my friend. I am here to make your socket your weapon. With a socketed weapon you can add gems inside of the sockets and the gems will give you some extra stats. For the first socket I demand 1 DragonBall and for the second one I demand 5 dragonballs."); dialog.Option("Alright let's go on.", 1); dialog.Send(); break; } case 1: { if (!client.Equipment.Free(4)) { Conquer_Online_Server.Interfaces.IConquerItem Item = null; Item = client.Equipment.TryGetItem(4); if (Item.SocketOne == Conquer_Online_Server.Game.Enums.Gem.NoSocket) { dialog.Text("My friend I need one DragonBall to socket your weapon. Are you sure you want to do this?"); dialog.Option("Yea sure.", 2); dialog.Send(); } else if (Item.SocketTwo == Conquer_Online_Server.Game.Enums.Gem.NoSocket) { dialog.Text("My friend I need five dragonballs to socket your weapon. Are you sure you want to do this?"); dialog.Option("Yea sure.", 2); dialog.Send(); } else { dialog.Text("I can't socket this weapon once more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You need to wear the weapon first."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 2: { if (!client.Equipment.Free(4)) { Conquer_Online_Server.Interfaces.IConquerItem Item = null; Item = client.Equipment.TryGetItem(4); if (Item.SocketOne == Conquer_Online_Server.Game.Enums.Gem.NoSocket) { if (client.Inventory.Contains(1088000, 1)) { client.Inventory.Remove(1088000, 1); Item.SocketOne = Conquer_Online_Server.Game.Enums.Gem.EmptySocket; Item.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; Item.Send(client); Conquer_Online_Server.Database.ConquerItemTable.UpdateSockets(Item, client); dialog.Text("Done!"); dialog.Option("Thank you.", 255); dialog.Send(); } else { dialog.Text("You don't have one DragonBall!"); dialog.Option("Ah...", 255); dialog.Send(); } } else if (Item.SocketTwo == Conquer_Online_Server.Game.Enums.Gem.NoSocket) { if (client.Inventory.Contains(1088000, 5)) { client.Inventory.Remove(1088000, 5); Item.SocketTwo = Conquer_Online_Server.Game.Enums.Gem.EmptySocket; Item.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; Item.Send(client); Conquer_Online_Server.Database.ConquerItemTable.UpdateSockets(Item, client); dialog.Text("Done!"); dialog.Option("Thank you.", 255); dialog.Send(); } else { dialog.Text("You don't have one DragonBall!"); dialog.Option("Ah...", 255); dialog.Send(); } } } else { dialog.Text("You need to wear the weapon first."); dialog.Option("Alright.", 255); dialog.Send(); } break; } } break; } #endregion #endregion } break; } #endregion #region Market case 1036: { switch (client.ActiveNpc) { #region Market #region Shelby case 300000: { switch (npcRequest.OptionID) { case 0: { dialog.Text("I have here the list with the virtue of all the people in this world. You have so far " + client.VirtuePoints + " virtue points."); dialog.Option("Thank you.", 255); dialog.Send(); break; } } break; } #endregion #region LadyLuck case 923: { switch (npcRequest.OptionID) { case 0: { if (client.InLottery) { dialog.Text("My friend, did something happen to you?\nYou may still want to try your luck since you already paid me the fee."); dialog.Option("Alright, take me in.", 2); dialog.Option("Later...", 255); dialog.Send(); } else { dialog.Text("Hello my friend. Have you ever heard of the lottery?\nWell, my friend, to join the lottery you need 27 ConquerPoints. By entering the lottery you'll gain a big chance to win wonderful items, wonderful and very expensive.\n\nWhat do you say, would you like to join?\n"); dialog.Option("Alright, take me in.", 1); dialog.Option("Later...", 255); dialog.Send(); } break; } case 1: { if (client.Entity.Level >= 70) { if (client.LotteryEntries < 10) { if (client.Entity.ConquerPoints >= 27) { client.Entity.ConquerPoints -= 27; client.InLottery = true; client.LotteryEntries++; client.Entity.Teleport(700, 42, 50); } } else { dialog.Text("You may not join the lottery today. You have already tried it 10 times today."); dialog.Option("Ahh sorry.", 255); dialog.Send(); } } else { dialog.Text("You may not join the lottery , you need level 70 first."); dialog.Option("Ahh sorry.", 255); dialog.Send(); } break; } case 2: { if (client.InLottery) { client.Entity.Teleport(700, 42, 50); } break; } } break; } #endregion #region Realloter case 350050: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello there brave conqueror, if you have reborn, and you misplaced your atribute points or you want to set them another way, I'll reset your atribute points for one DragonBall. Do you accept?"); dialog.Option("Here is the DragonBall.", 1); dialog.Option("I'll just leave", 255); dialog.Send(); break; } case 1: { if (client.Entity.Reborn > 0) { if (client.Inventory.Contains(1088000, 1)) { client.Inventory.Remove(1088000, 1); if (client.Entity.Reborn != 0) { client.Entity.Agility = 0; client.Entity.Strength = 0; client.Entity.Vitality = 1; client.Entity.Spirit = 0; if (client.Entity.Reborn == 1) { client.Entity.Atributes = (ushort)(client.ExtraAtributePoints(client.Entity.FirstRebornLevel, client.Entity.FirstRebornLevel) + 52 + 3 * (client.Entity.Level - 15)); } else { client.Entity.Atributes = (ushort)(client.ExtraAtributePoints(client.Entity.FirstRebornLevel, client.Entity.FirstRebornClass) + client.ExtraAtributePoints(client.Entity.SecondRebornLevel, client.Entity.SecondRebornClass) + 52 + 3 * (client.Entity.Level - 15)); } } } else { dialog.Text("You need a DragonBall."); dialog.Option("I'll just leave", 255); dialog.Send(); } } else { dialog.Text("You have to have atleast one rebirth atleast."); dialog.Option("I'll just leave", 255); dialog.Send(); } break; } } break; } #endregion #region Magic Artisan case 10062: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Have you ever seen my brother Artisan Wind? If so, you might know that he upgrades and downgrades the item level and item quality."); dialog.Text("Well, he doesn't always succeed, but that's why I am here. I can upgrade/downgrade being sucessfully with a fixed amount of meteors (tears)/dragonballs. "); dialog.Text("What would you like me to do?"); dialog.Option("Upgrade level.", 1); dialog.Option("Downgrade level.", 2); dialog.Option("Upgrade quality.", 3); dialog.Option("I'll just leave", 255); dialog.Send(); break; } case 1: case 2: case 3: { int aut = npcRequest.OptionID * 10; dialog.Text("Select which item's details you want to change?"); dialog.Option("Headgear.", (byte)(aut + 1)); dialog.Option("Necklace.", (byte)(aut + 2)); dialog.Option("Armor.", (byte)(aut + 3)); dialog.Option("Main Weapon.", (byte)(aut + 4)); dialog.Option("Left Weapon/Shield.", (byte)(aut + 5)); dialog.Option("Ring.", (byte)(aut + 6)); dialog.Option("Boots.", (byte)(aut + 8)); dialog.Option("I'll just leave", 255); dialog.Send(); break; } case 100: { if (client.SelectedItem == 0) return; var item = client.Equipment.TryGetItem(client.SelectedItem); var itemdetail = Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations[item.ID]; Conquer_Online_Server.Database.ConquerItemInformation infos = new Conquer_Online_Server.Database.ConquerItemInformation(item.ID, item.Plus); switch (client.UpdateType) { case 1: case 2: { //Cost: 36 //Metscrolls: 4 byte cost = (byte)(itemdetail.Level / 5); byte scrolls = 0; bool useScrolls = false; byte extraScroll = 0; int addMets = 0; cost += (byte)((item.ID % 10) / 3); cost += (byte)(itemdetail.Level / 10); uint id = 1088001; if (client.UpdateType == 2) id++; foreach (IConquerItem scroll in client.Inventory.Objects) if (scroll.ID == 720027) scrolls++; if (cost % 10 != 0) { addMets = 10 - (cost % 10); extraScroll = 1; } if (scrolls >= (cost / 10) + extraScroll) useScrolls = true; if (client.Inventory.Contains(id, cost) || useScrolls) { if (useScrolls) { client.Inventory.Remove(720027, Convert.ToByte((cost / 10) + extraScroll)); client.Inventory.Add(1088001,0,(byte)addMets); } else client.Inventory.Remove(id, cost); client.UnloadItemStats(item, false); if (client.UpdateType == 1) { Conquer_Online_Server.Database.ConquerItemInformation infos2 = new Conquer_Online_Server.Database.ConquerItemInformation(infos.CalculateUplevel(), item.Plus); if (infos2.BaseInformation.ID == infos.BaseInformation.ID) return; if (client.Entity.Level < infos2.BaseInformation.Level) { dialog.Text("You need level " + infos2.BaseInformation.Level + " first."); dialog.Option("Ahh sorry.", 255); dialog.Send(); client.SelectedItem = 0; client.UpdateType = 0; return; } item.ID = infos.CalculateUplevel(); } else item.ID = infos.CalculateDownlevel(); Conquer_Online_Server.Database.ConquerItemTable.UpdateItemID(item, client); item.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; item.Send(client); client.LoadItemStats(item); client.Equipment.UpdateEntityPacket(); } break; } case 3: { byte cost = (byte)(itemdetail.Level / 30); cost += (byte)((item.ID % 10) / 2); uint id = 1088000; if (client.Inventory.Contains(id, cost)) { client.Inventory.Remove(id, cost); client.UnloadItemStats(item, false); if (item.ID % 10 < 5) item.ID += 5 - item.ID % 10; item.ID++; Conquer_Online_Server.Database.ConquerItemTable.UpdateItemID(item, client); item.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; item.Send(client); client.LoadItemStats(item); client.Equipment.UpdateEntityPacket(); } break; } } break; } default: { if (npcRequest.OptionID == 255) break; client.SelectedItem = (byte)(npcRequest.OptionID % 10); client.UpdateType = (byte)(npcRequest.OptionID / 10); if (client.Equipment.Free(client.SelectedItem)) { dialog.Text("You have to be wearing the selected item."); dialog.Option("I'll just leave", 255); dialog.Send(); return; } var item = client.Equipment.TryGetItem(client.SelectedItem); var itemdetail = Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations[item.ID]; if (itemdetail == null) { dialog.Text("An error occured. Please relogin and try again."); dialog.Option("Ok.", 255); dialog.Send(); return; } switch (client.UpdateType) { case 1: case 2: { if (itemdetail.Level == Conquer_Online_Server.Network.PacketHandler.ItemMaxLevel(client.SelectedItem) && client.UpdateType == 1) { dialog.Text("This item's level cannot be upgraded anymore."); dialog.Option("Ahh sorry.", 255); dialog.Send(); client.SelectedItem = 0; client.UpdateType = 0; return; } if (itemdetail.Level == Conquer_Online_Server.Network.PacketHandler.ItemMinLevel(client.SelectedItem) && client.UpdateType == 2) { dialog.Text("This item's level cannot be downgraded anymore."); dialog.Option("Ahh sorry.", 255); dialog.Send(); client.SelectedItem = 0; client.UpdateType = 0; return; } byte cost = (byte)(itemdetail.Level / 5); cost += (byte)((item.ID % 10) / 3); cost += (byte)(itemdetail.Level / 10); dialog.Text("It will cost you " + cost + " meteor" + (client.UpdateType == 2 ? " tears" : "s") + ". Do you accept?"); dialog.Option("Yes.", 100); dialog.Option("No thank you.", 255); dialog.Send(); break; } case 3: { if (item.ID % 10 == 9) { dialog.Text("This item's quality cannot be upgraded anymore."); dialog.Option("Ahh sorry.", 255); dialog.Send(); client.SelectedItem = 0; client.UpdateType = 0; return; } byte cost = (byte)(itemdetail.Level / 30); cost += (byte)((item.ID % 10) / 2); dialog.Text("It will cost you " + cost + " dragonballs. Do you accept?"); dialog.Option("Yes.", 100); dialog.Option("No thank you.", 255); dialog.Send(); break; } } break; } } break; } #endregion #region Weapon Master case 7050: { switch (npcRequest.OptionID) { case 0: { dialog.Text("My brothers, Magic Artisan and Artisan Wind, both need meteors to upgrade, but I need only dragonballs."); dialog.Text("I upgrade item's level only and I want only one dragonball for my service."); dialog.Option("Upgrade level.", 1); dialog.Option("I'll just leave", 255); dialog.Send(); break; } case 1: { int aut = npcRequest.OptionID * 10; dialog.Text("Select which item's details you want to change?"); dialog.Option("Headgear.", (byte)(aut + 1)); dialog.Option("Necklace.", (byte)(aut + 2)); dialog.Option("Armor.", (byte)(aut + 3)); dialog.Option("Main Weapon.", (byte)(aut + 4)); dialog.Option("Left Weapon/Shield.", (byte)(aut + 5)); dialog.Option("Ring.", (byte)(aut + 6)); dialog.Option("Boots.", (byte)(aut + 8)); dialog.Option("I'll just leave", 255); dialog.Send(); break; } case 100: { if (client.SelectedItem == 0) return; var item = client.Equipment.TryGetItem(client.SelectedItem); var itemdetail = Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations[item.ID]; Conquer_Online_Server.Database.ConquerItemInformation infos = new Conquer_Online_Server.Database.ConquerItemInformation(item.ID, item.Plus); switch (client.UpdateType) { case 1: case 2: { byte cost = (byte)(itemdetail.Level / 6); cost += (byte)((item.ID % 10) / 3); uint id = 1088001; if (client.UpdateType == 2) id++; if (client.Inventory.Contains(id, cost)) { client.Inventory.Remove(id, cost); client.UnloadItemStats(item, false); if (client.UpdateType == 1) item.ID = infos.CalculateUplevel(); else item.ID = infos.CalculateDownlevel(); if (infos.BaseInformation.ID == item.ID) return; Conquer_Online_Server.Database.ConquerItemTable.UpdateItemID(item, client); item.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; item.Send(client); client.LoadItemStats(item); client.Equipment.UpdateEntityPacket(); } break; } case 3: { byte cost = (byte)(itemdetail.Level / 30); cost += (byte)((item.ID % 10) / 2); uint id = 1088000; if (client.Inventory.Contains(id, cost)) { client.Inventory.Remove(id, cost); client.UnloadItemStats(item, false); item.ID++; Conquer_Online_Server.Database.ConquerItemTable.UpdateItemID(item, client); item.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; item.Send(client); client.LoadItemStats(item); client.Equipment.UpdateEntityPacket(); } break; } } break; } default: { if (npcRequest.OptionID == 255) break; byte SelectedItem = (byte)(npcRequest.OptionID % 10); byte NowType = (byte)(npcRequest.OptionID / 10); if (client.Equipment.Free(SelectedItem)) { dialog.Text("You have to be wearing the selected item."); dialog.Option("I'll just leave", 255); dialog.Send(); return; } var item = client.Equipment.TryGetItem(SelectedItem); var itemdetail = Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations[item.ID]; if (itemdetail.Level == Conquer_Online_Server.Network.PacketHandler.ItemMaxLevel(client.SelectedItem) && client.UpdateType == 1) { dialog.Text("This item's level cannot be upgraded anymore."); dialog.Option("Ahh sorry.", 255); dialog.Send(); client.SelectedItem = 0; client.UpdateType = 0; return; } if (NowType == 1) { dialog.Text("It will cost you one dragonball. Do you accept?"); dialog.Option("Yes.", (byte)(20 + SelectedItem)); dialog.Option("No thank you.", 255); dialog.Send(); } else { Conquer_Online_Server.Database.ConquerItemInformation infos = new Conquer_Online_Server.Database.ConquerItemInformation(item.ID, item.Plus); Conquer_Online_Server.Database.ConquerItemInformation infos2 = new Conquer_Online_Server.Database.ConquerItemInformation(infos.CalculateUplevel(), item.Plus); if (client.Entity.Level < infos2.BaseInformation.Level) { dialog.Text("You need level " + infos2.BaseInformation.Level + " first."); dialog.Option("Ahh sorry.", 255); dialog.Send(); client.SelectedItem = 0; client.UpdateType = 0; return; } if (client.Inventory.Contains(1088000, 1)) { client.Inventory.Remove(1088000, 1); client.UnloadItemStats(item, false); item.ID = infos.CalculateUplevel(); Conquer_Online_Server.Database.ConquerItemTable.UpdateItemID(item, client); item.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; item.Send(client); client.LoadItemStats(item); client.Equipment.UpdateEntityPacket(); } } } break; } break; } #endregion #region Proficiency God case 941: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello my friend. If you believe that, leveling your proficiency is too hard and takes too much time, I can help you. In exchange of a fixed amount of exp balls, I will agree to level up your proficiency."); dialog.Text("Now, tell me what proficiency you want to level up."); dialog.Option("One handed.", 1); dialog.Option("Two handed.", 3); dialog.Option("Other.", 5); dialog.Option("I'll just leave", 255); dialog.Send(); break; } case 1: { dialog.Text("Which one handed proficiency?"); dialog.Option("Blade.", 41); dialog.Option("Sword.", 42); dialog.Option("Hook.", 43); dialog.Option("Whip.", 44); dialog.Option("Axe.", 45); dialog.Option("Next page.", 2); dialog.Option("Nothing, sorry.", 255); dialog.Send(); break; } case 2: { dialog.Text("Which one handed proficiency?"); dialog.Option("PrayerBead.", 61); dialog.Option("Hammer.", 46); dialog.Option("Club.", 48); dialog.Option("Scepter.", 184); dialog.Option("Katana.", 60); dialog.Option("Axe.", 45); dialog.Option("Back.", 1); dialog.Option("Nothing, sorry.", 255); dialog.Send(); break; } case 3: { dialog.Text("Which two handed proficiency?"); dialog.Option("Backsword.", 124); dialog.Option("Glaive.", 51); dialog.Option("Poleaxe.", 53); dialog.Option("LongHammer.", 54); dialog.Option("Spear.", 56); dialog.Option("Next page.", 4); dialog.Option("Nothing, sorry.", 255); dialog.Send(); break; } case 4: { dialog.Text("Which one handed proficiency?"); dialog.Option("Pickaxe.", 142); dialog.Option("Halberd.", 58); dialog.Option("Wand.", 165); dialog.Option("Bow.", 50); dialog.Option("Back.", 3); dialog.Option("Nothing, sorry.", 255); dialog.Send(); break; } case 5: { dialog.Text("Which one handed proficiency?"); dialog.Option("Boxing.", 254); dialog.Option("Shield.", 90); dialog.Option("Nothing, sorry.", 255); dialog.Send(); break; } case 100: { if (client.Proficiencies.ContainsKey(client.UplevelProficiency)) { var prof = client.Proficiencies[client.UplevelProficiency]; if (prof.Level >= 12) { dialog.Text("This proficiency cannot be leveled up anymore."); dialog.Option("Oh.", 255); dialog.Send(); break; } client.UplevelProficiency = 0; if (client.Inventory.Contains(723700, prof.Level)) { client.Inventory.Remove(723700, prof.Level); prof.Level++; prof.Experience = 0; prof.Send(client); break; } dialog.Text("You don't have the requiered exp balls, I'm sorry I cannot help you."); dialog.Option("It's alright.", 255); dialog.Send(); break; } else { dialog.Text("You don't know this proficiency."); dialog.Option("Ahh, sorry.", 255); dialog.Send(); break; } } default: { if (npcRequest.OptionID == 255) return; ushort proficiency = 0; if (npcRequest.OptionID < 100) proficiency = (ushort)(npcRequest.OptionID * 10); else { if (npcRequest.OptionID != 254) { string off = npcRequest.OptionID.ToString(); string reverse = off[2].ToString() + off[1].ToString() + off[0].ToString(); proficiency = ushort.Parse(reverse); } } if (proficiency == 600) proficiency++; if (client.Proficiencies.ContainsKey(proficiency)) { var prof = client.Proficiencies[proficiency]; if (prof.Level >= 12) { dialog.Text("This proficiency cannot be leveled up anymore."); dialog.Option("Oh.", 255); dialog.Send(); break; } client.UplevelProficiency = proficiency; dialog.Text("I need " + prof.Level + " exp balls to be able to level up this proficiency."); dialog.Option("Let's do it then.", 100); dialog.Option("No, sorry.", 255); dialog.Send(); break; } else { dialog.Text("You don't know this proficiency."); dialog.Option("Ahh, sorry.", 255); dialog.Send(); break; } } } break; } #endregion #region CPAdmin case 111816: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Greetings, here you can exchange either a Dragonball or a DragonScroll for cps. "); dialog.Text("One Dragonball will get you 215 cps and a DragonScroll will get you 2150. "); dialog.Text("What would you like to trade? Or would you rather not?"); dialog.Option("Dragonball", 1); dialog.Option("DragonballScroll", 2); dialog.Option("I'll just leave", 255); dialog.Send(); break; } case 1: { if (client.Inventory.Contains(1088000, 1)) { client.Inventory.Remove(1088000, 1); client.Entity.ConquerPoints += 215; } else { dialog.Text("You do not have a Dragonball"); dialog.Send(); } break; } case 2: { if (client.Inventory.Contains(721511, 1)) { client.Inventory.Remove(721511, 1); client.Entity.ConquerPoints += 2150; } else { dialog.Text("You do not have a DragonballScroll"); dialog.Send(); } break; } } break; } #endregion #region SurgeonMiracle case 3381: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Do you want to have your size changed so that you can become much more"); dialog.Text(" adorable? Now here is a precious chance for you."); dialog.Option("I want to change my size.", 1); //dialog.Option("I want to change my gender.", 2); dialog.Option("I don't want to change.", 255); dialog.Send(); break; } case 1: { dialog.Text("If you pay me one DragonBall, I can have your size changed. You will become"); dialog.Text("more attractive and start a fresh life. By the way, to avoid some unexpected"); dialog.Text("things, make sure you are not in any disguise form."); dialog.Option("Here is a DragonBall.", 3); dialog.Option("I have no DragonBall.", 255); dialog.Send(); break; } case 2: { dialog.Text("If you pay me one DragonBall, I can have your gender changed. You will become"); dialog.Text("more attractive and start a fresh life. By the way, to avoid some unexpected"); dialog.Text("things, make sure you are not in any disguise form."); dialog.Option("Here is a DragonBall.", 4); dialog.Option("I have no DragonBall.", 255); dialog.Send(); break; } case 3: { if (client.Inventory.Contains(1088000, 1)) { int Model = (int)client.Entity.Body % 10; switch (Model) { case 2: case 4: client.Entity.Body--; break; case 1: case 3: client.Entity.Body++; break; } client.Inventory.Remove(1088000, 1); break; } else { dialog.Text("Sorry, there is no DragonBall in your inventory. I can't have your size changed."); dialog.Option("Ok, Sorry.", 255); dialog.Send(); } break; } case 4: { if (client.Inventory.Contains(1088000, 1)) { int Model = (int)client.Entity.Body % 10; switch (Model) { case 3: case 4: client.Entity.Body -= 2; break; case 1: case 2: client.Entity.Body += 2; break; } client.Send(new Message("Your gender has been changed.", System.Drawing.Color.BurlyWood, Message.TopLeft)); client.Inventory.Remove(1088000, 1); break; } else { dialog.Text("Sorry, there is no DragonBall in your inventory. I can't have your size changed."); dialog.Option("Ok, Sorry.", 255); dialog.Send(); } } break; } break; } #endregion #region Mark. Controler case 45: //Mark. Controler { switch (npcRequest.OptionID) { case 0: { dialog.Text("If you want to leave just tell me when you are ready. It's free.\nYou will be teleported to the city you were in before coming here."); dialog.Option("I'm ready.", 1); dialog.Option("Wait a minute.", 255); dialog.Send(); break; } case 1: { int PrevMap = client.Entity.PreviousMapID; switch (PrevMap) { default: { client.Entity.Teleport(1002, 429, 378); break; } case 1000: { client.Entity.Teleport(1000, 500, 650); break; } case 1020: { client.Entity.Teleport(1020, 565, 562); break; } case 1011: { client.Entity.Teleport(1011, 188, 264); break; } case 1015: { client.Entity.Teleport(1015, 717, 571); break; } } break; } } break; } #endregion #region Enchanter and composer case 35016: { switch (npcRequest.OptionID) { case 0: { dialog.Text("I can improve the enchant of an item and I can also improve the plus of an item. Please let me know how can I help you."); dialog.Option("Compose.", 1); dialog.Option("Enchant.", 2); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 1: { Data data = new Data(true); data.ID = Data.OpenWindow; data.UID = client.Entity.UID; data.TimeStamp = Time32.Now; data.dwParam = Data.WindowCommands.Compose; data.wParam1 = client.Entity.X; data.wParam2 = client.Entity.Y; client.Send(data); break; } case 2: { Data data = new Data(true); data.ID = Data.OpenCustom; data.UID = client.Entity.UID; data.TimeStamp = Time32.Now; data.dwParam = Data.CustomCommands.Enchant; data.wParam1 = client.Entity.X; data.wParam2 = client.Entity.Y; client.Send(data); break; } } break; } #endregion #region Bless case 35015: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello there mate. I am here to add to your item a very precious element that will make your item more powerful and also more expensive. Each bless point ( - ) gives you 1% less damage. For -1 you need five Super tortoise gems(STG) or you can gain in through first reborn. For -3 you need one STGs, for -5 you need three STGs and for -7 you five STGs. Do you want to go on?"); dialog.Option("Okay let's roll.", 100); dialog.Option("It's too expensive.", 255); dialog.Send(); break; } case 100: { dialog.Text("Select the item. You must wear it."); dialog.Option("Headgear.", 1); dialog.Option("Necklace.", 2); dialog.Option("Armor.", 3); dialog.Option("Weapon", 4); dialog.Option("Shield", 5); dialog.Option("Ring", 6); dialog.Option("Boots.", 8); dialog.Option("Nevermind.", 255); dialog.Send(); break; } case 1: case 2: case 3: case 4: case 5: case 6: case 8: { byte stgs = 5; Conquer_Online_Server.Interfaces.IConquerItem Item = null; Item = client.Equipment.TryGetItem((byte)npcRequest.OptionID); if (Item != null) { if (Item.Bless == 1) stgs = 1; else if (Item.Bless == 3) stgs = 3; else if (Item.Bless == 5) stgs = 5; if (Item.Bless == 7) { dialog.Text("An item can't have more than -7 bless points."); dialog.Option("Alright.", 255); dialog.Send(); break; } if (client.Inventory.Contains(700073, stgs)) { client.Inventory.Remove(700073, stgs); if (Item.Bless == 0) Item.Bless = 1; else Item.Bless += 2; Item.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; Item.Send(client); Conquer_Online_Server.Database.ConquerItemTable.UpdateBless(Item, client); } else { dialog.Text("You don't have " + stgs + " STGs."); dialog.Option("Alright.", 255); dialog.Send(); break; } } break; } } break; } #endregion #region BlacksmithLee case 1550: { switch (npcRequest.OptionID) { case 0: client.Send(new Data(true) { UID = client.Entity.UID, ID = Data.OpenWindow, dwParam = Data.WindowCommands.OpenSockets, wParam1 = client.Entity.X, wParam2 = client.Entity.Y }); break; } break; } #endregion #region UnknownMan case 3825: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello stranger. My mother tough me not to talk with strangers but I feel like I can talk with you. There is something special to you. Since I feel like I can trust you I can make you a service. If your level is below 110, I will give you a lot of exp in exchange of one DragonBall, but if your level is above or equal to 110 I will demand two DragonBalls. If your level is higher than 135, well then, I can't help you. If you are interested in my proposition and if you have DragonBalls, please let me know."); dialog.Option("Yes I do.", 1); dialog.Option("No, not really.", 255); dialog.Send(); break; } case 1: { if (client.Entity.Level >= 135) { dialog.Text("I am sorry, your level is too high. I simply can't help you."); dialog.Option("Sorry.", 255); dialog.Send(); break; } if (DateTime.Now.DayOfYear != client.LastDragonBallUse.DayOfYear) { byte needTimes = 1; ulong exp_reward = 13901336;//default for level 50 or lower #region exp reward switch byte level = client.Entity.Level; if (level > 50 && level < 63) exp_reward = 27152909; if (level >= 63 && level < 69) exp_reward = 28860143; if (level >= 69 && level < 74) exp_reward = 36822370; if (level >= 74 && level < 79) exp_reward = 57533091; if (level >= 79 && level < 87) exp_reward = 70404048; if (level >= 87 && level < 90) exp_reward = 84097242; if (level >= 90 && level < 93) exp_reward = 102959118; if (level >= 93 && level < 96) exp_reward = 134266326; if (level >= 96 && level < 98) exp_reward = 100801220; if (level >= 98 && level <= 100) exp_reward = 214351925; if (level > 100) { switch (level) { case 101: exp_reward = 242910783; break; case 102: exp_reward = 286050512; break; case 103: exp_reward = 259627544; break; case 104: exp_reward = 232767237; break; case 105: exp_reward = 241888762; break; case 106: exp_reward = 249478280; break; case 107: exp_reward = 265126887; break; case 108: exp_reward = 187446887; break; case 109: exp_reward = 193715970; break; case 110: exp_reward = 204416075; break; case 111: exp_reward = 227337342; break; case 112: exp_reward = 230562942; break; case 113: exp_reward = 234594942; break; case 114: exp_reward = 238626942; break; case 115: exp_reward = 240239742; break; case 116: exp_reward = 242658942; break; case 117: exp_reward = 246690942; break; case 118: exp_reward = 290290023; break; case 119: exp_reward = 358712493; break; case 120: exp_reward = 282274058; break; case 121: exp_reward = 338728870; break; case 122: exp_reward = 243884786; break; case 123: exp_reward = 292661743; break; case 124: exp_reward = 322122547; break; case 125: exp_reward = 292661744; break; case 126: exp_reward = 351194092; break; case 127: exp_reward = 337146328; break; case 128: exp_reward = 303431696; break; case 129: exp_reward = 322122547; break; } } #endregion if (client.Entity.Level >= 110) { needTimes = 2; } if (client.Entity.Level >= 130) { needTimes += 8; } if (client.Entity.Level >= 135) { dialog.Text("I can't help you anymore, you're too high leveled!"); dialog.Option("I see, Thanks!", 255); break; } if (client.Inventory.Contains(1088000, needTimes)) { client.Inventory.Remove(1088000, needTimes); client.IncreaseExperience(exp_reward, false); client.LastDragonBallUse = DateTime.Now; dialog.Text("Congratulations! You've received a lot of experience from me today, enjoy!"); dialog.Text("I'll see you only tomorrow now."); dialog.Option("I see, Thanks!", 255); break; } else { dialog.Text("I am sorry, but obviously you want to scam me out because you don't have the amount of required DragonBalls."); dialog.Option("Sorry.", 255); dialog.Send(); break; } } else { dialog.Text("I am sorry, but I remeber that I gave you this opportunity already today. I can't do it more than once per day so I'm afraid I have to tell you good bye until tomorrow."); dialog.Option("Alright.", 255); dialog.Send(); break; } } } break; } #endregion #region LoveStone case 390: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello mate, how do you do? Listen, There are not many people that can make a marriage last, but I can sense that you are one of them, if you want to marry someone just let me know. Also, if you are heavenly blessed I can give you one hour of double exp each day."); dialog.Option("Yes, I want to marry someone.", 1); dialog.Option("I need double exp.", 2); dialog.Option("Nothing thank you.", 255); dialog.Send(); break; } case 1: { if (client.Entity.Spouse == "None") { dialog.Text("Here, click on the player you want to be your spouse."); dialog.Option("Thank you.", 255); dialog.Send(); Data data = new Data(true); data.UID = client.Entity.UID; data.ID = Data.OpenCustom; data.dwParam = Data.CustomCommands.FlowerPointer; client.Send(data); } else { dialog.Text("You are already married. If you want to broke the marriage, you have to go to StarLit. He'll handle your request."); dialog.Option("Alright that's what I'll do.", 255); dialog.Send(); } break; } case 2: { if (client.Entity.HeavenBlessing > 0) { if (!client.DoubleExpToday) { dialog.Text("Here. Come back tomorrow for more."); dialog.Option("Alright that's what I'll do.", 255); dialog.Send(); client.Entity.DoubleExperienceTime = 3600; client.DoubleExpToday = true; } else { dialog.Text("You already took your double exp today. Come back tomorrow."); dialog.Option("Alright that's what I'll do.", 255); dialog.Send(); } } else { dialog.Text("You cannot take double exp because you are not heavenly blessed."); dialog.Option("Alright.", 255); dialog.Send(); } break; } } break; } #endregion #region Eternity case 300500: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello conqueror. You know, there are ancient stories about a second life and many people chose not to believe it. Even so, there are some people that believe in it, and that inspired me to learn about it. In my study, I found out how to reborn someone. But, in this quest, a CelestialStone may be needed. To get one, talk with Celestine(TwinCity 365, 92)."); dialog.Option("Tell me more about it.", 1); dialog.Option("Reborm me.", 2); dialog.Option("Nothing thank you.", 255); dialog.Send(); break; } case 1: { dialog.Text("So you want to know more? When you reborn, you can chose what class you want to be the second life. Once you reborn you will start again the journey to conquer this world from level 15. Beware that you may gain some special skills depending on the class you chose to reborn, and you'll be able to get an own pet, that will follow and help you level or fight. The cost is a CelestialStone."); dialog.Option("Reborm me.", 2); dialog.Option("Nothing thank you.", 255); dialog.Send(); break; } case 2: { if (client.Entity.Reborn == 0) { if (client.Entity.Class % 10 == 5 && client.Entity.Level >= (client.Entity.Class == 135 ? 110 : 120)) { dialog.Text("There are two kinds of reborns. One is the normal one and the second one is blessed. The normal reborn will give you the chance to get a Super Gem and the blessed reborn will set a -1 into one of your equipment that you wear during the reborn. What do you chose?"); dialog.Option("Normal reborn.", 5); dialog.Option("Blessed reborn.", 3); dialog.Option("Nothing thank you.", 255); dialog.Send(); } else { dialog.Text("You cannot reborn if your level is not 110+ for water saints and 120+ for other masters."); dialog.Option("Ahh.", 255); dialog.Send(); } } else { dialog.Text("You cannot reborn again here. Alex, an elder who lives in Ape Canyon, will tell you about the third life."); dialog.Option("Thank you.", 255); dialog.Send(); } break; } case 5: { if (client.Entity.Reborn == 0) { if (client.Entity.Class % 10 == 5 && client.Entity.Level >= (client.Entity.Class == 135 ? 110 : 120)) { dialog.Text("Select the super gem you desire."); dialog.Option("SuperPhoenixGem.", 203); dialog.Option("SuperDragonGem.", 213); dialog.Option("SuperFuryGem.", 223); dialog.Option("SuperRainbowGem.", 233); dialog.Option("SuperVioletGem.", 253); dialog.Option("SuperMoonGem.", 254); dialog.Option("SuperKylinGem.", 243); dialog.Option("Nothing thank you.", 255); dialog.Send(); } else { dialog.Text("You cannot reborn if your level is not 110+ for water saints and 120+ for other masters."); dialog.Option("Ahh.", 255); dialog.Send(); } break; } else { dialog.Text("You cannot reborn again here. Alex, an elder who lives in Ape Canyon, will tell you about the third life."); dialog.Option("Thank you.", 255); dialog.Send(); } break; } case 3: { if (client.Entity.Reborn == 0) { if (client.Entity.Class % 10 == 5 && client.Entity.Level >= (client.Entity.Class == 135 ? 110 : 120)) { dialog.Text("Select the class you want to reborn in."); dialog.Option("Trojan.", (byte)(10 + npcRequest.OptionID)); dialog.Option("Warrior.", (byte)(20 + npcRequest.OptionID)); dialog.Option("Archer.", (byte)(40 + npcRequest.OptionID)); dialog.Option("WaterTaoist.", (byte)(132 + npcRequest.OptionID)); dialog.Option("FireTaoist.", (byte)(142 + npcRequest.OptionID)); dialog.Option("Ninja.", (byte)(50 + npcRequest.OptionID)); dialog.Option("Monk.", (byte)(60 + npcRequest.OptionID)); dialog.Option("Nothing thank you.", 255); dialog.Send(); } else { dialog.Text("You cannot reborn if your level is not 110+ for water saints and 120+ for other masters."); dialog.Option("Ahh.", 255); dialog.Send(); } break; } else { dialog.Text("You cannot reborn again here. Alex, an elder who lives in Ape Canyon, will tell you about the third life."); dialog.Option("Thank you.", 255); dialog.Send(); } break; } default: { if (client.Entity.Reborn == 0) { if (client.Entity.Class % 10 == 5 && client.Entity.Level >= (client.Entity.Class == 135 ? 110 : 120)) { if (npcRequest.OptionID == 255) return; if (npcRequest.OptionID >= 200 && npcRequest.OptionID <= 254) { client.SelectedGem = (byte)(npcRequest.OptionID % 100); if (client.SelectedGem == 54) client.SelectedGem = 63; if (client.Entity.Reborn == 0) { byte id = 4; dialog.Text("Select the class you want to reborn in."); dialog.Option("Trojan.", (byte)(10 + id)); dialog.Option("Warrior.", (byte)(20 + id)); dialog.Option("Archer.", (byte)(40 + id)); dialog.Option("WaterTaoist.", (byte)(132 + id)); dialog.Option("FireTaoist.", (byte)(142 + id)); dialog.Option("Ninja.", (byte)(50 + id)); dialog.Option("Monk.", (byte)(60 + id)); dialog.Option("Nothing thank you.", 255); dialog.Send(); break; } else { dialog.Text("You cannot reborn again here. Alex, an elder who lives in Ape Canyon, will tell you about the third life."); dialog.Option("Thank you.", 255); dialog.Send(); } } else { if (client.Inventory.Contains(721259, 1)) { byte _class = (byte)(npcRequest.OptionID - npcRequest.OptionID % 10); if (_class > 100) _class += 2; byte type = (byte)(npcRequest.OptionID - _class); if (_class < 100) _class++; if (client.Reborn(_class)) { client.Inventory.Remove(721259, 1); if (type == 4) { if (client.SelectedGem != 0) { uint gemid = (uint)(client.SelectedGem + 700000); client.Inventory.Add(gemid, 0, 1); } } else { int availableshots = 0; for (byte count = 0; count < 12; count++) if (!client.Equipment.Free(count)) if (client.Equipment.TryGetItem(count).Bless == 0) availableshots++; if (availableshots != 0) { byte ex = (byte)Conquer_Online_Server.ServerBase.Kernel.Random.Next(12); if (!client.Equipment.Free(ex)) if (client.Equipment.TryGetItem(ex).Bless == 0) { var item = client.Equipment.TryGetItem(ex); item.Bless = 1; item.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; item.Send(client); Conquer_Online_Server.Database.ConquerItemTable.UpdateBless(item, client); } } } } else { dialog.Text("Sorry, but you need atleast 2 free spaces in your inventory."); dialog.Option("Ohh.", 255); dialog.Send(); } } } } else { dialog.Text("You cannot reborn if your level is not 110+ for water saints and 120+ for other masters."); dialog.Option("Ahh.", 255); dialog.Send(); } } else { dialog.Text("You cannot reborn again here. Alex, an elder who lives in Ape Canyon, will tell you about the third life."); dialog.Option("Thank you.", 255); dialog.Send(); } break; } } break; } #endregion #region MillionaireLee case 5004: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hey you! Yeah, it's you I am talking about. I've got a great deal that you cannot leave without taking it. I will give you one meteorscroll for ten meteors and one dragonballscroll for ten dragonballs. With those scrolls you can have more than fourty meteors or dragonballs in your inventory at once!"); dialog.Option("Take my meteors.", 1); dialog.Option("Take my dragonballs.", 2); dialog.Option("I'm too poor.", 255); dialog.Send(); break; } case 1: { if (client.Inventory.Contains(1088001, 10)) { client.Inventory.Remove(1088001, 10); client.Inventory.Add(720027, 0, 1); } else { dialog.Text("You poor man! I can't help you."); dialog.Option("Why!?", 255); dialog.Send(); } break; } case 2: { if (client.Inventory.Contains(1088000, 10)) { client.Inventory.Remove(1088000, 10); client.Inventory.Add(720028, 0, 1); } else { dialog.Text("You poor man! I can't help you."); dialog.Option("Why!?", 255); dialog.Send(); } break; } } break; } #endregion #region Granny case 699: { switch (npcRequest.OptionID) { case 0: { dialog.Text("These youngsters forget to increase the durabuility when they upgrade your items. "); dialog.Text("I can take your SuperKylinGems and try to increase your item's max durabuility. "); dialog.Text("It's possible that the item could be completely repaired too. How many will you try with?"); dialog.Input("Enter:", 1, 2); dialog.Option("Not now.", 255); dialog.Send(); break; } case 1: { byte Kylins = 0; if (!Byte.TryParse(npcRequest.Input, out Kylins)) {// Input doesn't contain numbers only. dialog.Text("Tell me, how am I supposed to get your durability higher if you can't give me a number 1 through 40?"); dialog.Option("Oops!", 0); dialog.Send(); break; } if (Kylins != 0 && Kylins <= 40) { if (client.Inventory.Contains(700043, Kylins)) { client.KylinUpgradeCount = Kylins; dialog.Text("Which item do you want to upgrade?"); dialog.Option("Headgear.", 101); dialog.Option("Necklace.", 102); dialog.Option("Armor.", 103); dialog.Option("Main Weapon.", 104); dialog.Option("Left Weapon.", 105); dialog.Option("Ring.", 106); dialog.Option("Next Page.", 2); dialog.Option("I'll just leave", 255); dialog.Send(); } else { dialog.Text("You don't have that many SuperKylinGems..."); dialog.Option("Oops...", 255); dialog.Send(); break; } } break; } case 2: { if (client.Inventory.Contains(700043, client.KylinUpgradeCount)) { dialog.Text("Which item do you want to upgrade?"); dialog.Option("Boots.", 108); dialog.Option("Fan.", 110); dialog.Option("Tower.", 111); dialog.Option("I'll just leave", 255); dialog.Send(); } break; } case 101: case 102: case 103: case 104: case 105: case 106: case 108: case 110: case 111: { if (client.KylinUpgradeCount != 0 && client.KylinUpgradeCount <= 40) { if (client.Inventory.Contains(700043, client.KylinUpgradeCount)) { var item = client.Equipment.TryGetItem((byte)(npcRequest.OptionID - 100)); if (item != null) { #region old /*if (item.Durability == item.MaximDurability) { var itemdetail = Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations[item.ID]; if (itemdetail.Durability != item.MaximDurability) { int diff = itemdetail.Durability - item.MaximDurability; int need = Math.Max((diff / 100) / 6, 1); need = Math.Min(need, client.KylinUpgradeCount); for (int counter = 0; counter < need; counter++) { item.MaximDurability += 100; client.Inventory.Remove(700043, 1); } if (item.MaximDurability > itemdetail.Durability) item.MaximDurability = itemdetail.Durability; item.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; item.Send(client); } } else { dialog.Text("Your item must be repaired first."); dialog.Option("Oh, sorry.", 255); dialog.Send(); break; }*/ #endregion #region test var itemdetail = Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations[item.ID]; if (itemdetail.Durability != item.MaximDurability) { ushort oldDurability = item.MaximDurability; bool Upgraded = false; while (client.KylinUpgradeCount != 0) { client.Inventory.Remove(700043, 1); client.KylinUpgradeCount -= 1; int rndDurability = (Conquer_Online_Server.ServerBase.Kernel.Random.Next(itemdetail.Durability)); if (rndDurability >= item.MaximDurability) { //This looks ugly to me, not sure how else to do it. item.MaximDurability = ushort.Parse(rndDurability.ToString()); rndDurability = 0; if (!Upgraded) Upgraded = true; } } if (Upgraded) dialog.Text("Your item's durabuility was increased from " + oldDurability + " to " + item.MaximDurability + ".\n"); else dialog.Text("I wasen't able to increase your item's durability..\n"); int Repair = (Conquer_Online_Server.ServerBase.Kernel.Random.Next(3)); if (Repair == 1) { if (Upgraded) dialog.Text("I was also able to repair the item."); else { dialog.Text("But I was able to repair the item."); Upgraded = true; } item.Durability = item.MaximDurability; } item.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; item.Send(client); if (Upgraded) dialog.Option("Thanks.", 255); else dialog.Option("Darn..", 255); dialog.Send(); break; } else { dialog.Text("This item is already at it's max durabuility!"); dialog.Option("Oh.", 255); dialog.Send(); break; } #endregion } } else { dialog.Text("Wahh, What is this? I may be forgetful but I'm sure you told me you would give me " + client.KylinUpgradeCount.ToString() + " SuperKylinGems!\n\n I don't see that you have this many.."); dialog.Option("Lets try again.", 0); dialog.Option("Nevermind.", 255); dialog.Send(); break; } } break; } } break; } #endregion #region Confiscator case 4450: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Have you ever arrested anyone? Or ... don't tell me, you have been arrested by anyone? If so, there is a chance that some gear was detained."); dialog.Option("I want to check my detained gear.", 1); dialog.Option("I want to check my claimable gear.", 2); dialog.Option("Thank you.", 255); dialog.Send(); break; } case 1: { client.Send(new Data(true) { ID = Data.OpenWindow, dwParam = Data.WindowCommands.DetainRedeem, UID = client.Entity.UID }); break; } case 2: { client.Send(new Data(true) { ID = Data.OpenWindow, dwParam = Data.WindowCommands.DetainClaim, UID = client.Entity.UID }); break; } } break; } #endregion #region PurificationStabilizer case 27279: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Have you ever heard of the ruthless Terato Dragon? It cuts open every single conqueror that wants to take his prize. His prize are items that purify your items. His affiliates, sub-kings of monsters, also drop items like that. If you have such an item, I can purify your gear with it."); dialog.Text("Once purified, the item must be stabilized, otherwise the purity will dissapear after several days. If you want to stabilize your items, come to me I'll see what I can do."); dialog.Option("Purify my item.", 1); dialog.Option("Stabilize my item.", 2); dialog.Option("Nevermind.", 255); dialog.Send(); break; } case 1: { INpc npc = null; if (client.Map.Npcs.TryGetValue(client.ActiveNpc, out npc)) { Data data = new Data(true); data.ID = Data.OpenWindow; data.UID = client.Entity.UID; data.TimeStamp = Time32.Now; data.dwParam = 455; data.wParam1 = npc.X; data.wParam2 = npc.Y; client.Send(data); } break; } case 2: { INpc npc = null; if (client.Map.Npcs.TryGetValue(client.ActiveNpc, out npc)) { Data data = new Data(true); data.ID = Data.OpenWindow; data.UID = client.Entity.UID; data.TimeStamp = Time32.Now;//done data.dwParam = 459; data.wParam1 = npc.X; data.wParam2 = npc.Y; client.Send(data); } break; } } break; } #endregion #endregion } break; } #endregion #region Guild war case 1038: { switch (client.ActiveNpc) { #region Pole case 810: { dialog.Text("Please, don't hurt me!."); dialog.Option("Sorry.", 255); dialog.Send(); break; } #endregion #region Gates case 516074: { if (client.Guild != null) { if (client.Guild.PoleKeeper) { switch (npcRequest.OptionID) { case 0: dialog.Text("Select the option you want to pursue."); if (client.AsMember.Rank != Conquer_Online_Server.Game.Enums.GuildMemberRank.Member) { dialog.Option("Open gate.", 1); dialog.Option("Close gate.", 2); } dialog.Option("Get inside.", 3); dialog.Option("Nothing.", 255); dialog.Send(); break; case 1: { Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.LeftGate.Mesh = (ushort)(250 + Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.LeftGate.Mesh % 10); Update upd = new Update(true); upd.UID = Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.LeftGate.UID; upd.Append(Update.Mesh, Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.LeftGate.Mesh); client.SendScreen(upd, true); break; } case 2: { Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.LeftGate.Mesh = (ushort)(240 + Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.LeftGate.Mesh % 10); Update upd = new Update(true); upd.UID = Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.LeftGate.UID; upd.Append(Update.Mesh, Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.LeftGate.Mesh); client.SendScreen(upd, true); break; } case 3: { client.Entity.Teleport(1038, 162, 198); break; } } } } break; } case 516075: { if (client.Guild != null) { if (client.Guild.PoleKeeper) { switch (npcRequest.OptionID) { case 0: dialog.Text("Select the option you want to pursue."); if (client.AsMember.Rank != Conquer_Online_Server.Game.Enums.GuildMemberRank.Member) { dialog.Option("Open gate.", 1); dialog.Option("Close gate.", 2); } dialog.Option("Get inside.", 3); dialog.Option("Nothing.", 255); dialog.Send(); break; case 1: { Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.RightGate.Mesh = (ushort)(280 + Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.RightGate.Mesh % 10); Update upd = new Update(true); upd.UID = Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.RightGate.UID; upd.Append(Update.Mesh, Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.RightGate.Mesh); client.SendScreen(upd, true); break; } case 2: { Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.RightGate.Mesh = (ushort)(270 + Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.RightGate.Mesh % 10); Update upd = new Update(true); upd.UID = Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.RightGate.UID; upd.Append(Update.Mesh, Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.RightGate.Mesh); client.SendScreen(upd, true); break; } case 3: { client.Entity.Teleport(1038, 210, 177); break; } } } } break; } #endregion #region Guild Conductresses #region Exit Guild Arena case 7000: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Do you want to leave the guild arena?"); dialog.Option("Yes.", 1); dialog.Option("No.", 255); dialog.Send(); break; } case 1: { client.Entity.Teleport(1002, 429, 378); break; } } break; } #endregion #endregion #region Guild Conductors #region IN case 9884: case 9885: case 9986: case 9987: { switch (npcRequest.OptionID) { case 0: { dialog.Text("In exchange of a fee of 1000gold, I will teleport you to a special place. If you don't have money, don't bother me."); dialog.Option("Teleport me.", 1); dialog.Option("I'm too poor.", 255); dialog.Send(); break; } case 1: { if (client.Entity.Money >= 1000) { client.Entity.Money -= 1000; switch (client.ActiveNpc) { case 9884: client.Entity.Teleport(1216, 12, 481); break; case 9885: client.Entity.Teleport(1213, 439, 261); break; case 9986: client.Entity.Teleport(1217, 536, 558); break; case 9987: client.Entity.Teleport(1001, 337, 325); break; } } break; } } break; } #endregion #endregion } break; } #endregion #region Promotion Center case 1004: { switch (client.ActiveNpc) { #region Promotion Center #region HeadAbbot case 4271: { switch (npcRequest.OptionID) { case 0: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { dialog.Text("I am the monk trainer, master of balence in destruction and harmony.\nWhat do you seek, young monk?"); dialog.Option("Promote me.", 1); dialog.Option("Learn skills.", 2); dialog.Option("Claim bound items.", 49); dialog.Option("Wait a minute.", 255); dialog.Send(); } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } #region BoundItems case 49: { dialog.Text("We just found some equipment, and I thought that we should give them to our pupils so they can be less defeatable."); if (!client.HeadgearClaim) dialog.Option("Headgear (Lvl 15).", 50); if (!client.RingClaim) dialog.Option("Ring (Lvl 40).", 51); if (!client.NecklaceClaim) dialog.Option("Necklace (Lvl 50).", 52); if (!client.ArmorClaim) dialog.Option("Armor (Lvl 70).", 53); dialog.Option("Next.", 48); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 48: { dialog.Text("We just found some equipment, and I thought that we should give them to our pupils so they can be less defeatable."); if (!client.BootsClaim) dialog.Option("Boots (Lvl 80).", 54); if (!client.TowerClaim) dialog.Option("Tower (Lvl 100).", 55); if (!client.FanClaim) dialog.Option("Fan (Lvl 100).", 56); if (!client.WeaponClaim) dialog.Option("Weapon (Lvl 110).", 57); dialog.Option("Back.", 49); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 50: { uint itemid = 143009; byte level = 15; if (!client.HeadgearClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Bound = true; item.Plus = 1; item.Durability = item.MaximDurability = Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations[itemid].Durability; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.HeadgearClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 51: { uint itemid = 150079; byte level = 40; if (!client.RingClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Bound = true; item.Plus = 1; item.Durability = item.MaximDurability = Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations[itemid].Durability; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.RingClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 52: { uint itemid = 120099; byte level = 50; if (!client.NecklaceClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Bound = true; item.Plus = 1; item.Durability = item.MaximDurability = Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations[itemid].Durability; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.NecklaceClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 53: { uint itemid = 136069; byte level = 70; if (!client.ArmorClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Bound = true; item.Plus = 1; item.Durability = item.MaximDurability = Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations[itemid].Durability; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.ArmorClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 54: { uint itemid = 160159; byte level = 80; if (!client.BootsClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Bound = true; item.Plus = 1; item.Durability = item.MaximDurability = Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations[itemid].Durability; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.BootsClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 55: { uint itemid = 202009; byte level = 100; if (!client.TowerClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Bound = true; item.Plus = 1; item.Durability = item.MaximDurability = Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations[itemid].Durability; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.TowerClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 56: { uint itemid = 201009; byte level = 100; if (!client.FanClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Bound = true; item.Plus = 1; item.Durability = item.MaximDurability = Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations[itemid].Durability; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.FanClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 57: { byte level = 100; if (!client.WeaponClaim) { ISkill proff = null; ushort maxlevel = 0; foreach (var prof in client.Proficiencies.Values) { if (maxlevel < prof.Level && prof.ID != 0) { maxlevel = prof.Level; proff = prof; } } if (proff == null) return; uint itemid = 610199; if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; item.SocketOne = Conquer_Online_Server.Game.Enums.Gem.EmptySocket; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.WeaponClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } #endregion #region Promote case 1: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Class == 65) { dialog.Text("You cannot be promoted anymore. You have mastered your class."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("To promote now you need" + client.PromoteItemNameNeed + " level " + client.PromoteLevelNeed + "."); dialog.Option("Promote me sir.", 3); dialog.Send(); } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 3: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Class == 65) { dialog.Text("You cannot be promoted anymore. You have mastered your class."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { if (client.PromoteItemNeed == 721020) { if (client.Inventory.Remove("moonbox")) { client.Inventory.Add(client.PromoteItemGain, 0, 1); client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } return; } if (client.Inventory.Contains(client.PromoteItemNeed, client.PromoteItemCountNeed) && client.Entity.Level >= client.PromoteLevelNeed) { client.Inventory.Remove(client.PromoteItemNeed, client.PromoteItemCountNeed); client.Inventory.Add(client.PromoteItemGain, 0, 1); client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } #endregion #region Skills case 2: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { dialog.Text("Let me know what you want to learn."); dialog.Option("Triple Attack (Lvl 5).", 6); dialog.Option("Oblivion (XP) (Lvl 15)", 7); dialog.Option("Whirlwind Kick (Lvl 15)", 8); dialog.Option("Radiant Palm (Lvl 40)", 9); dialog.Option("Serenity (Lvl 40)", 10); dialog.Option("Tranquility (Lvl 70)", 11); dialog.Option("Compassion (Lvl 100)", 12); dialog.Option("Auras (Lvl 20->100)", 5); dialog.Send(); } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 5: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { dialog.Text("Which aura do you want to learn?"); dialog.Option("Tyrant (Lvl 20).", 13); dialog.Option("Fend (Lvl 20)", 14); //dialog.Option("Metal (Lvl 100)", 15); //dialog.Option("Wood (Lvl 100)", 16); //dialog.Option("Water (Lvl 100)", 17); //dialog.Option("Fire (Lvl 100)", 18); //dialog.Option("Earth (Lvl 100)", 19); dialog.Option("Back to skills.", 2); dialog.Send(); } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 6: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Level >= 5) { dialog.Text("You have learned Triple Attack."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(10490))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 5 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 7: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Level >= 15) { dialog.Text("You have learned the Oblivion XP skill."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(10390))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 15 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 8: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Level >= 15) { dialog.Text("You have learned Whirlwind Kick."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(10415))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 15 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 9: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Level >= 40) { dialog.Text("You have learned Radiant Palm."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(10381))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 40 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 10: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Level >= 40) { dialog.Text("You have learned Serenity."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(10400))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 40 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 11: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Level >= 70) { dialog.Text("You have learned Tranquility."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(10425))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 70 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 12: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Level >= 100) { dialog.Text("You have learned Compassion."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(10430))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 100 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 13: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Level >= 20) { dialog.Text("You have learned Tyrent Aura."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(10395))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 20 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 14: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Level >= 20) { dialog.Text("You have learned Fend Aura."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(10410))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 20 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 15: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Level >= 100) { dialog.Text("You have learned Metal Elemental Aura."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(10420))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 100 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 16: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Level >= 100) { dialog.Text("You have learned Wood Elemental Aura."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(10421))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 100 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 17: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Level >= 100) { dialog.Text("You have learned Water Elemental Aura."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(10422))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 100 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 18: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Level >= 100) { dialog.Text("You have learned Fire Elemental Aura."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(10423))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 100 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 19: { if (client.Entity.Class >= 60 && client.Entity.Class <= 65) { if (client.Entity.Level >= 100) { dialog.Text("You have learned Earth Elemental Aura."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(10424))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 100 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("The ancient secrets of the monk is not for trade.\nIf you wish to learn the secrets of the monk come back in another life. Good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } #endregion } break; } #endregion #region WarriorGod case 10001: { switch (npcRequest.OptionID) { case 0: { if (client.Entity.Class >= 20 && client.Entity.Class <= 25) { dialog.Text("I am the shield and two hand weapons master. As I see, you started your way on conquering this world. I will try to help you teaching you warrir skills and promoting you."); dialog.Option("Promote me.", 1); dialog.Option("Learn skills.", 2); dialog.Option("Claim bound items.", 49); dialog.Option("Wait a minute.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the warrior secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } #region BoundItems case 49: { dialog.Text("We just found some equipment, and I thought that we should give them to our pupils so they can be less defeatable."); if (!client.HeadgearClaim) dialog.Option("Headgear (Lvl 15).", 50); if (!client.RingClaim) dialog.Option("Ring (Lvl 40).", 51); if (!client.NecklaceClaim) dialog.Option("Necklace (Lvl 50).", 52); if (!client.ArmorClaim) dialog.Option("Armor (Lvl 70).", 53); dialog.Option("Next.", 48); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 48: { dialog.Text("We just found some equipment, and I thought that we should give them to our pupils so they can be less defeatable."); if (!client.BootsClaim) dialog.Option("Boots (Lvl 80).", 54); if (!client.TowerClaim) dialog.Option("Tower (Lvl 100).", 55); if (!client.FanClaim) dialog.Option("Fan (Lvl 100).", 56); if (!client.WeaponClaim) dialog.Option("Weapon (Lvl 110).", 57); dialog.Option("Back.", 49); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 50: { uint itemid = 111009; byte level = 15; if (!client.HeadgearClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Bound = true; item.Plus = 3; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.HeadgearClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 51: { uint itemid = 150079; byte level = 40; if (!client.RingClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Bound = true; item.Plus = 3; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.RingClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 52: { uint itemid = 120099; byte level = 50; if (!client.NecklaceClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.NecklaceClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 53: { uint itemid = 131069; byte level = 70; if (!client.ArmorClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.ArmorClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 54: { uint itemid = 160159; byte level = 80; if (!client.BootsClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.BootsClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 55: { uint itemid = 202009; byte level = 100; if (!client.TowerClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.TowerClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 56: { uint itemid = 201009; byte level = 100; if (!client.FanClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.FanClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 57: { byte level = 100; if (!client.WeaponClaim) { ISkill proff = null; ushort maxlevel = 0; foreach (var prof in client.Proficiencies.Values) { if (maxlevel < prof.Level && prof.ID != 0) { maxlevel = prof.Level; proff = prof; } } if (proff == null) return; uint itemid = (uint)(proff.ID * 1000 + 219); if (!Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations.ContainsKey(itemid)) { dialog.Text("You need more proficiency belonging to a weapon, and not a shield or your punch."); dialog.Option("Alright.", 255); dialog.Send(); return; } if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; item.SocketOne = Conquer_Online_Server.Game.Enums.Gem.EmptySocket; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.WeaponClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } #endregion case 1: { if (client.Entity.Class >= 20 && client.Entity.Class <= 25) { if (client.Entity.Class == 25) { dialog.Text("You cannot be promoted anymore. You have mastered your class."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("To promote now you need" + client.PromoteItemNameNeed + " level " + client.PromoteLevelNeed + "."); dialog.Option("Promote me sir.", 3); dialog.Send(); } } else { dialog.Text("I will not tell any of the warrior secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 3: { if (client.Entity.Class >= 20 && client.Entity.Class <= 25) { if (client.Entity.Class == 25) { dialog.Text("You cannot be promoted anymore. You have mastered your class."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { if (client.PromoteItemNeed == 721020) { if (client.Inventory.Remove("moonbox")) { client.Inventory.Add(client.PromoteItemGain, 0, 1); client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } return; } if (client.Inventory.Contains(client.PromoteItemNeed, client.PromoteItemCountNeed) && client.Entity.Level >= client.PromoteLevelNeed) { client.Inventory.Remove(client.PromoteItemNeed, client.PromoteItemCountNeed); client.Inventory.Add(client.PromoteItemGain, 0, 1); client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } } } else { dialog.Text("I will not tell any of the warrior secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 2: { if (client.Entity.Class >= 20 && client.Entity.Class <= 25) { dialog.Text("Let me know what you want to learn."); dialog.Option("XP Skills (Lvl 40).", 5); dialog.Option("Dash (Lvl 61).", 6); dialog.Send(); } else { dialog.Text("I will not tell any of the warrior secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 5: { if (client.Entity.Class >= 20 && client.Entity.Class <= 25) { if (client.Entity.Level >= 40) { dialog.Text("You have learned the XP Skills of this class."); dialog.Option("Thank you master.", 255); dialog.Send(); client.AddSpell(LearnableSpell(1025)); client.AddSpell(LearnableSpell(1020)); client.AddSpell(LearnableSpell(1015)); } else { dialog.Text("You need to be level 40 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the warrior secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 6: { if (client.Entity.Class >= 20 && client.Entity.Class <= 25) { if (client.Entity.Level >= 61) { dialog.Text("You have learned the Dash Skill of this class."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(1051))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 61 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the warrior secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } } break; } #endregion #region Archer Master case 400: { byte mClass = 40; byte MClass = 45; string Class = "archer"; switch (npcRequest.OptionID) { case 0: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { dialog.Text("I am the bow master. As I see, you started your way on conquering this world. I will try to help you teaching you warrir skills and promoting you."); dialog.Option("Promote me.", 1); dialog.Option("Learn skills.", 2); dialog.Option("Claim bound items.", 49); dialog.Option("Wait a minute.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } #region BoundItems case 49: { dialog.Text("We just found some equipment, and I thought that we should give them to our pupils so they can be less defeatable."); if (!client.HeadgearClaim) dialog.Option("Headgear (Lvl 15).", 50); if (!client.RingClaim) dialog.Option("Ring (Lvl 40).", 51); if (!client.NecklaceClaim) dialog.Option("Necklace (Lvl 50).", 52); if (!client.ArmorClaim) dialog.Option("Armor (Lvl 70).", 53); dialog.Option("Next.", 48); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 48: { dialog.Text("We just found some equipment, and I thought that we should give them to our pupils so they can be less defeatable."); if (!client.BootsClaim) dialog.Option("Boots (Lvl 80).", 54); if (!client.TowerClaim) dialog.Option("Tower (Lvl 100).", 55); if (!client.FanClaim) dialog.Option("Fan (Lvl 100).", 56); if (!client.WeaponClaim) dialog.Option("Weapon (Lvl 110).", 57); dialog.Option("Back.", 49); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 50: { uint itemid = 113009; byte level = 15; if (!client.HeadgearClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.HeadgearClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 51: { uint itemid = 150079; byte level = 40; if (!client.RingClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.RingClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 52: { uint itemid = 120099; byte level = 50; if (!client.NecklaceClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.NecklaceClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 53: { uint itemid = 133049; byte level = 70; if (!client.ArmorClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.ArmorClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 54: { uint itemid = 160159; byte level = 80; if (!client.BootsClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.BootsClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 55: { uint itemid = 202009; byte level = 100; if (!client.TowerClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.TowerClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 56: { uint itemid = 201009; byte level = 100; if (!client.FanClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.FanClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 57: { byte level = 100; if (!client.WeaponClaim) { ISkill proff = null; ushort maxlevel = 0; foreach (var prof in client.Proficiencies.Values) { if (maxlevel < prof.Level && prof.ID != 0) { maxlevel = prof.Level; proff = prof; } } if (proff == null) return; uint itemid = (uint)(proff.ID * 1000 + 219); if (!Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations.ContainsKey(itemid)) { Console.WriteLine("invalid claim weapon " + itemid); return; } if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; item.SocketOne = Conquer_Online_Server.Game.Enums.Gem.EmptySocket; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.WeaponClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } #endregion case 1: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Class == MClass) { dialog.Text("You cannot be promoted anymore. You have mastered your class."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("To promote now you need" + client.PromoteItemNameNeed + " level " + client.PromoteLevelNeed + "."); dialog.Option("Promote me sir.", 3); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 3: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Class == MClass) { dialog.Text("You cannot be promoted anymore. You have mastered your class."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { if (client.PromoteItemNeed == 721020) { if (client.Inventory.Remove("moonbox")) { client.Inventory.Add(client.PromoteItemGain, 0, 1); client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } return; } if (client.Inventory.Contains(client.PromoteItemNeed, client.PromoteItemCountNeed) && client.Entity.Level >= client.PromoteLevelNeed) { client.Inventory.Remove(client.PromoteItemNeed, client.PromoteItemCountNeed); client.Inventory.Add(client.PromoteItemGain, 0, 1); client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 2: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { dialog.Text("Let me know what you want to learn."); dialog.Option("XPFly (Lvl 1).", 5); dialog.Option("Scatter (Lvl 23).", 6); dialog.Option("RapidFire (Lvl 40).", 7); dialog.Option("Fly (Lvl 70).", 8); dialog.Option("Intensify (Lvl 70).", 9); dialog.Option("Arrow rain (Lvl 70).", 10); dialog.Option("Advanced Fly (Lvl 100).", 11); dialog.Option("Nothing.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 5: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { dialog.Text("You have learned the XP Skill of this class."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(8002))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 6: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 23) { dialog.Text("You have learned the scatter."); dialog.Option("Thank you master.", 255); dialog.Send(); if (!client.AddSpell(LearnableSpell(8001))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 23 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 7: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 40) { if (!client.AddSpell(LearnableSpell(8000))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the rapid fire."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 40 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 8: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 70) { if (!client.AddSpell(LearnableSpell(8003))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the fly."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 70 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 9: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 70) { if (!client.AddSpell(LearnableSpell(9000))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the intensify."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 70 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 10: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 70) { if (!client.AddSpell(LearnableSpell(8030))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the arrow rain."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 70 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 11: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 100) { if (!client.AddSpell(LearnableSpell(8003, 1))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the advanced fly."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 100 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } } break; } #endregion #region WindSage case 4720: { byte mClass = 50; byte MClass = 55; string Class = "ninja"; switch (npcRequest.OptionID) { case 0: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { dialog.Text("I am the master of the no sound attack and the master of the katanas. As I see, you started your way on conquering this world. I will try to help you teaching you warrir skills and promoting you."); dialog.Option("Promote me.", 1); dialog.Option("Learn skills.", 2); dialog.Option("Claim bound items.", 49); dialog.Option("Wait a minute.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } #region BoundItems case 49: { dialog.Text("We just found some equipment, and I thought that we should give them to our pupils so they can be less defeatable."); if (!client.HeadgearClaim) dialog.Option("Headgear (Lvl 15).", 50); if (!client.RingClaim) dialog.Option("Ring (Lvl 40).", 51); if (!client.NecklaceClaim) dialog.Option("Necklace (Lvl 50).", 52); if (!client.ArmorClaim) dialog.Option("Armor (Lvl 70).", 53); dialog.Option("Next.", 48); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 48: { dialog.Text("We just found some equipment, and I thought that we should give them to our pupils so they can be less defeatable."); if (!client.BootsClaim) dialog.Option("Boots (Lvl 80).", 54); if (!client.TowerClaim) dialog.Option("Tower (Lvl 100).", 55); if (!client.FanClaim) dialog.Option("Fan (Lvl 100).", 56); if (!client.WeaponClaim) dialog.Option("Weapon (Lvl 110).", 57); dialog.Option("Back.", 49); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 50: { uint itemid = 123009; byte level = 15; if (!client.HeadgearClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.HeadgearClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 51: { uint itemid = 150079; byte level = 40; if (!client.RingClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.RingClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 52: { uint itemid = 120099; byte level = 50; if (!client.NecklaceClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.NecklaceClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 53: { uint itemid = 135069; byte level = 70; if (!client.ArmorClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.ArmorClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 54: { uint itemid = 160159; byte level = 80; if (!client.BootsClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.BootsClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 55: { uint itemid = 202009; byte level = 100; if (!client.TowerClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.TowerClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 56: { uint itemid = 201009; byte level = 100; if (!client.FanClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.FanClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 57: { byte level = 100; if (!client.WeaponClaim) { ISkill proff = null; ushort maxlevel = 0; foreach (var prof in client.Proficiencies.Values) { if (maxlevel < prof.Level && prof.ID != 0) { maxlevel = prof.Level; proff = prof; } } if (proff == null) return; uint itemid = (uint)(proff.ID * 1000 + 219); if (!Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations.ContainsKey(itemid)) { Console.WriteLine("invalid claim weapon " + itemid); return; } if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; item.SocketOne = Conquer_Online_Server.Game.Enums.Gem.EmptySocket; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.WeaponClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } #endregion case 1: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Class == MClass) { dialog.Text("You cannot be promoted anymore. You have mastered your class."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("To promote now you need" + client.PromoteItemNameNeed + " level " + client.PromoteLevelNeed + "."); dialog.Option("Promote me sir.", 3); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 3: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Class == MClass) { dialog.Text("You cannot be promoted anymore. You have mastered your class."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { if (client.PromoteItemNeed == 721020) { if (client.Inventory.Remove("moonbox")) { client.Inventory.Add(client.PromoteItemGain, 0, 1); client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } return; } if (client.Inventory.Contains(client.PromoteItemNeed, client.PromoteItemCountNeed) && client.Entity.Level >= client.PromoteLevelNeed) { client.Inventory.Remove(client.PromoteItemNeed, client.PromoteItemCountNeed); client.Inventory.Add(client.PromoteItemGain, 0, 1); client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 2: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { dialog.Text("Let me know what you want to learn. '[...]' and '{...}' means ninja as second life and ninja as third life."); dialog.Option("TwofoldBlades (Lvl 40).", 5); dialog.Option("ToxicFog (Lvl 70).", 6); dialog.Option("PoisonStar [Lvl 70].", 7); //dialog.Option("CounterKill {Lvl 70}).", 8); dialog.Option("ArcherBane (Lvl 110).", 9); dialog.Option("ShurikenVortex (Lvl 70).", 10); dialog.Option("Nothing.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 5: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 40) { if (!client.AddSpell(LearnableSpell(6000))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the TwofoldBlades."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 23 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 6: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 70) { if (!client.AddSpell(LearnableSpell(6001))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the ToxicFog."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 70 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 7: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 70) { if ((client.Entity.Reborn == 1 && client.Entity.Class == 55) || (client.Entity.Reborn == 2 && client.Entity.SecondRebornClass == 55)) { if (!client.AddSpell(LearnableSpell(6002))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the PoisonStar."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be ninja in the second life."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 70 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 8: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 70) { if (client.Entity.Reborn == 2 && client.Entity.Class == 55) { if (!client.AddSpell(LearnableSpell(6003))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the CounterKill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be ninja in the third life."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 70 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 9: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 110) { if (!client.AddSpell(LearnableSpell(6004))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the ArcherBane."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 70 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 10: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 70) { if (!client.AddSpell(LearnableSpell(6010))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the ShurikenVortex."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 70 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } } break; } #endregion #region TrojanMaster case 10022: { byte mClass = 10; byte MClass = 15; string Class = "trojan"; switch (npcRequest.OptionID) { case 0: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { dialog.Text("I am the master of the one hand weapons. As I see, you started your way on conquering this world. I will try to help you teaching you warrir skills and promoting you."); dialog.Option("Promote me.", 1); dialog.Option("Learn skills.", 2); dialog.Option("Claim bound items.", 49); dialog.Option("Wait a minute.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } #region BoundItems case 49: { dialog.Text("We just found some equipment, and I thought that we should give them to our pupils so they can be less defeatable."); if (!client.HeadgearClaim) dialog.Option("Headgear (Lvl 15).", 50); if (!client.RingClaim) dialog.Option("Ring (Lvl 40).", 51); if (!client.NecklaceClaim) dialog.Option("Necklace (Lvl 50).", 52); if (!client.ArmorClaim) dialog.Option("Armor (Lvl 70).", 53); dialog.Option("Next.", 48); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 48: { dialog.Text("We just found some equipment, and I thought that we should give them to our pupils so they can be less defeatable."); if (!client.BootsClaim) dialog.Option("Boots (Lvl 80).", 54); if (!client.TowerClaim) dialog.Option("Tower (Lvl 100).", 55); if (!client.FanClaim) dialog.Option("Fan (Lvl 100).", 56); if (!client.WeaponClaim) dialog.Option("Weapon (Lvl 110).", 57); dialog.Option("Back.", 49); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 50: { uint itemid = 118009; byte level = 15; if (!client.HeadgearClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.HeadgearClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 51: { uint itemid = 150079; byte level = 40; if (!client.RingClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.RingClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 52: { uint itemid = 120099; byte level = 50; if (!client.NecklaceClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.NecklaceClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 53: { uint itemid = 130069; byte level = 70; if (!client.ArmorClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.ArmorClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 54: { uint itemid = 160159; byte level = 80; if (!client.BootsClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.BootsClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 55: { uint itemid = 202009; byte level = 100; if (!client.TowerClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.TowerClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 56: { uint itemid = 201009; byte level = 100; if (!client.FanClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.FanClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 57: { byte level = 100; if (!client.WeaponClaim) { ISkill proff = null; ushort maxlevel = 0; foreach (var prof in client.Proficiencies.Values) { if (maxlevel < prof.Level && prof.ID != 0) { maxlevel = prof.Level; proff = prof; } } if (proff == null) return; uint itemid = (uint)(proff.ID * 1000 + 219); if (!Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations.ContainsKey(itemid)) { Console.WriteLine("invalid claim weapon " + itemid); return; } if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; item.SocketOne = Conquer_Online_Server.Game.Enums.Gem.EmptySocket; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.WeaponClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } #endregion case 1: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Class == MClass) { dialog.Text("You cannot be promoted anymore. You have mastered your class."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("To promote now you need" + client.PromoteItemNameNeed + " level " + client.PromoteLevelNeed + "."); dialog.Option("Promote me sir.", 3); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 3: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Class == MClass) { dialog.Text("You cannot be promoted anymore. You have mastered your class."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { if (client.PromoteItemNeed == 721020) { if (client.Inventory.Remove("moonbox")) { client.Inventory.Add(client.PromoteItemGain, 0, 1); client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } return; } if (client.Inventory.Contains(client.PromoteItemNeed, client.PromoteItemCountNeed) && client.Entity.Level >= client.PromoteLevelNeed) { client.Inventory.Remove(client.PromoteItemNeed, client.PromoteItemCountNeed); client.Inventory.Add(client.PromoteItemGain, 0, 1); client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 2: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { dialog.Text("Let me know what you want to learn."); dialog.Option("XPSkills (Lvl 40).", 5); dialog.Option("Hercules (Lvl 40).", 6); dialog.Option("Golem. (Lvl 40).", 7); dialog.Option("Spritual Healing. (Lvl 40).", 8); dialog.Option("Nothing.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 5: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 40) { dialog.Text("You have learned the XP Skills."); dialog.Option("Thank you master.", 255); dialog.Send(); client.AddSpell(LearnableSpell(1110)); client.AddSpell(LearnableSpell(1015)); } else { dialog.Text("You need to be level 40 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 6: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 40) { if (!client.AddSpell(LearnableSpell(1115))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the Hercules."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 40 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 7: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 40) { if (!client.AddSpell(LearnableSpell(1270))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the Golem."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 40 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 8: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 40) { if (!client.AddSpell(LearnableSpell(1190))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the Spritual Healing."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 40 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } } break; } #endregion #region Taoist Moon case 10000: { byte mClass = 142; byte MClass = 145; string Class = "fire taoist"; switch (npcRequest.OptionID) { case 0: { if (client.Entity.Class >= 100 && client.Entity.Class <= 101) { dialog.Text("I am the master of the fire skills. As I see, you started your way on conquering this world. I will try to help you teaching you warrir skills and promoting you."); dialog.Option("Promote me.", 100); dialog.Option("Learn basic skills.", 200); dialog.Option("Claim bound items.", 49); dialog.Option("Wait a minute.", 255); dialog.Send(); } else { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { dialog.Text("I am the master of the fire skills. As I see, you started your way on conquering this world. I will try to help you teaching you warrir skills and promoting you."); dialog.Option("Promote me.", 1); dialog.Option("Learn skills.", 2); dialog.Option("Learn basic skills.", 200); dialog.Option("Claim bound items.", 49); dialog.Option("Wait a minute.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } } break; } #region BoundItems case 49: { dialog.Text("We just found some equipment, and I thought that we should give them to our pupils so they can be less defeatable."); if (!client.HeadgearClaim) dialog.Option("Headgear (Lvl 15).", 50); if (!client.RingClaim) dialog.Option("Ring (Lvl 40).", 51); if (!client.NecklaceClaim) dialog.Option("Necklace (Lvl 50).", 52); if (!client.ArmorClaim) dialog.Option("Armor (Lvl 70).", 53); dialog.Option("Next.", 48); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 48: { dialog.Text("We just found some equipment, and I thought that we should give them to our pupils so they can be less defeatable."); if (!client.BootsClaim) dialog.Option("Boots (Lvl 80).", 54); if (!client.TowerClaim) dialog.Option("Tower (Lvl 100).", 55); if (!client.FanClaim) dialog.Option("Fan (Lvl 100).", 56); if (!client.WeaponClaim) dialog.Option("Weapon (Lvl 110).", 57); dialog.Option("Back.", 49); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 50: { uint itemid = 117009; byte level = 15; if (!client.HeadgearClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.HeadgearClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 51: { uint itemid = 152089; byte level = 40; if (!client.RingClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.RingClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 52: { uint itemid = 121099; byte level = 50; if (!client.NecklaceClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.NecklaceClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 53: { uint itemid = 134069; byte level = 70; if (!client.ArmorClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.ArmorClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 54: { uint itemid = 160159; byte level = 80; if (!client.BootsClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.BootsClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 55: { uint itemid = 202009; byte level = 100; if (!client.TowerClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.TowerClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 56: { uint itemid = 201009; byte level = 100; if (!client.FanClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.FanClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 57: { byte level = 100; if (!client.WeaponClaim) { ISkill proff = null; ushort maxlevel = 0; foreach (var prof in client.Proficiencies.Values) { if (maxlevel < prof.Level && prof.ID != 0) { maxlevel = prof.Level; proff = prof; } } if (proff == null) return; uint itemid = (uint)(proff.ID * 1000 + 219); if (!Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations.ContainsKey(itemid)) { Console.WriteLine("invalid claim weapon " + itemid); return; } if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; item.SocketOne = Conquer_Online_Server.Game.Enums.Gem.EmptySocket; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.WeaponClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } #endregion case 100: { if (client.Entity.Class >= 100 && client.Entity.Class <= 101) { if (client.Entity.Class == 101) { dialog.Text("Do you want to become a fire taoist?"); dialog.Option("Yes sir.", 254); dialog.Option("No thank you master.", 255); dialog.Send(); } else { dialog.Text("To promote now you need" + client.PromoteItemNameNeed + " level " + client.PromoteLevelNeed + "."); dialog.Option("Promote me sir.", 254); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 254: { if (client.Entity.Class == 100) { client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else if (client.Entity.Class == 101) { client.Entity.Class = 142; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 200: { if (client.Entity.Class >= 100) { dialog.Text("Let me know what you want to learn."); dialog.Option("Thunder (Lvl 1).", 205); dialog.Option("Cure (Lvl 1).", 206); dialog.Option("Meditation. (Lvl 40).", 207); dialog.Option("Nothing.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 205: { if (client.Entity.Class >= 100) { if (!client.AddSpell(LearnableSpell(1000))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned thunder."); dialog.Option("Thank you.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 206: { if (client.Entity.Class >= 100) { if (!client.AddSpell(LearnableSpell(1005))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned cure."); dialog.Option("Thank you.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 207: { if (client.Entity.Class >= 100) { if (client.Entity.Level >= 40) { if (!client.AddSpell(LearnableSpell(1195))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned meditation."); dialog.Option("Thank you.", 255); dialog.Send(); } else { dialog.Text("You need to be level 40 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 1: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Class == MClass) { dialog.Text("You cannot be promoted anymore. You have mastered your class."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("To promote now you need" + client.PromoteItemNameNeed + " level " + client.PromoteLevelNeed + "."); dialog.Option("Promote me sir.", 3); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 3: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Class == MClass) { dialog.Text("You cannot be promoted anymore. You have mastered your class."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { if (client.PromoteItemNeed == 721020) { if (client.Inventory.Remove("moonbox")) { client.Inventory.Add(client.PromoteItemGain, 0, 1); client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } return; } if (client.Inventory.Contains(client.PromoteItemNeed, client.PromoteItemCountNeed) && client.Entity.Level >= client.PromoteLevelNeed) { client.Inventory.Remove(client.PromoteItemNeed, client.PromoteItemCountNeed); client.Inventory.Add(client.PromoteItemGain, 0, 1); client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 2: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { dialog.Text("Let me know what you want to learn."); dialog.Option("Fire (Lvl 42 + Thunder lvl 4).", 5); dialog.Option("Bomb. (Lvl 43).", 6); dialog.Option("FireCircle. (Lvl 48).", 7); dialog.Option("FireRing. (Lvl 52).", 8); dialog.Option("FireMeteor. (Lvl 55).", 9); dialog.Option("Tornado (Lvl 81 + Fire lvl 3).", 10); dialog.Option("Nothing.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 5: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 42) { if (client.Spells.ContainsKey(1000) && client.Spells[1000] != null && client.Spells[1000].Level == 4) { if (!client.AddSpell(LearnableSpell(1001))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the fire."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to know thunder very well to be able to learn the fire skill."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 42 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 10: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 81) { if (client.Spells.ContainsKey(1001) && client.Spells[1001] != null && client.Spells[1001].Level == 3) { if (!client.AddSpell(LearnableSpell(1002))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the tornado."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to know thunder very well to be able to learn the fire skill."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 81 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 6: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 43) { if (!client.AddSpell(LearnableSpell(1160))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the bomb skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 43 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 7: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 48) { if (!client.AddSpell(LearnableSpell(1120))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the fire circle skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 48 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 8: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 52) { if (!client.AddSpell(LearnableSpell(1150))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the fire ring skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 52 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 9: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 55) { if (!client.AddSpell(LearnableSpell(1180))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the fire meteor skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 55 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } } break; } #endregion #region Taoist Star case 30: { byte mClass = 132; byte MClass = 135; string Class = "water taoist"; switch (npcRequest.OptionID) { case 0: { if (client.Entity.Class >= 100 && client.Entity.Class <= 101) { dialog.Text("I am the master of the fire skills. As I see, you started your way on conquering this world. I will try to help you teaching you warrir skills and promoting you."); dialog.Option("Promote me.", 100); dialog.Option("Learn basic skills.", 200); dialog.Option("Claim bound items.", 49); dialog.Option("Wait a minute.", 255); dialog.Send(); } else { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { dialog.Text("I am the master of the water skills. The water skills, are not skills that would make wounds but heal them. As I see, you started your way on conquering this world. I will try to help you teaching you warrir skills and promoting you."); dialog.Option("Promote me.", 1); dialog.Option("Learn skills.", 2); dialog.Option("Learn basic skills.", 200); dialog.Option("Claim bound items.", 49); dialog.Option("Wait a minute.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } } break; } #region BoundItems case 49: { dialog.Text("We just found some equipment, and I thought that we should give them to our pupils so they can be less defeatable."); if (!client.HeadgearClaim) dialog.Option("Headgear (Lvl 15).", 50); if (!client.RingClaim) dialog.Option("Ring (Lvl 40).", 51); if (!client.NecklaceClaim) dialog.Option("Necklace (Lvl 50).", 52); if (!client.ArmorClaim) dialog.Option("Armor (Lvl 70).", 53); dialog.Option("Next.", 48); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 48: { dialog.Text("We just found some equipment, and I thought that we should give them to our pupils so they can be less defeatable."); if (!client.BootsClaim) dialog.Option("Boots (Lvl 80).", 54); if (!client.TowerClaim) dialog.Option("Tower (Lvl 100).", 55); if (!client.FanClaim) dialog.Option("Fan (Lvl 100).", 56); if (!client.WeaponClaim) dialog.Option("Weapon (Lvl 110).", 57); dialog.Option("Back.", 49); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 50: { uint itemid = 117009; byte level = 15; if (!client.HeadgearClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.HeadgearClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 51: { uint itemid = 152089; byte level = 40; if (!client.RingClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.RingClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 52: { uint itemid = 121099; byte level = 50; if (!client.NecklaceClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.NecklaceClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 53: { uint itemid = 134069; byte level = 70; if (!client.ArmorClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.ArmorClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 54: { uint itemid = 160159; byte level = 80; if (!client.BootsClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.BootsClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 55: { uint itemid = 202009; byte level = 100; if (!client.TowerClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.TowerClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 56: { uint itemid = 201009; byte level = 100; if (!client.FanClaim) { if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Bound = true; item.Plus = 3; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.FanClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 57: { byte level = 100; if (!client.WeaponClaim) { ISkill proff = null; ushort maxlevel = 0; foreach (var prof in client.Proficiencies.Values) { if (maxlevel < prof.Level && prof.ID != 0) { maxlevel = prof.Level; proff = prof; } } if (proff == null) return; uint itemid = (uint)(proff.ID * 1000 + 219); if (!Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations.ContainsKey(itemid)) { Console.WriteLine("invalid claim weapon " + itemid); return; } if (client.Entity.Level >= level) { ConquerItem item = new ConquerItem(true); item.ID = itemid; item.Color = Conquer_Online_Server.Game.Enums.Color.White; item.Bound = true; item.Durability = item.MaximDurability = Conquer_Online_Server.Database .ConquerItemInformation.BaseInformations[itemid].Durability; item.Plus = 3; item.SocketOne = Conquer_Online_Server.Game.Enums.Gem.EmptySocket; if (client.Inventory.Add(item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd)) { client.WeaponClaim = true; } else { dialog.Text("You need atleast one free slot in your inventory."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You don't have atleast level " + level + "."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You cannot claim it twice."); dialog.Option("Alright.", 255); dialog.Send(); } break; } #endregion case 100: { if (client.Entity.Class >= 100 && client.Entity.Class <= 101) { if (client.Entity.Class == 101) { dialog.Text("Do you want to become a water taoist?"); dialog.Option("Yes sir.", 254); dialog.Option("No thank you master.", 255); dialog.Send(); } else { dialog.Text("To promote now you need" + client.PromoteItemNameNeed + " level " + client.PromoteLevelNeed + "."); dialog.Option("Promote me sir.", 254); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 254: { if (client.Entity.Class == 100) { client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else if (client.Entity.Class == 101) { client.Entity.Class = 132; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 200: { if (client.Entity.Class >= 100) { dialog.Text("Let me know what you want to learn."); dialog.Option("Thunder (Lvl 1).", 205); dialog.Option("Cure (Lvl 1).", 206); dialog.Option("Meditation. (Lvl 40).", 207); dialog.Option("Nothing.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 205: { if (client.Entity.Class >= 100) { if (!client.AddSpell(LearnableSpell(1000))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned thunder."); dialog.Option("Thank you.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 206: { if (client.Entity.Class >= 100) { if (!client.AddSpell(LearnableSpell(1005))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned cure."); dialog.Option("Thank you.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 207: { if (client.Entity.Class >= 100) { if (client.Entity.Level >= 40) { if (!client.AddSpell(LearnableSpell(1195))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned meditation."); dialog.Option("Thank you.", 255); dialog.Send(); } else { dialog.Text("You need to be level 40 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 1: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Class == MClass) { dialog.Text("You cannot be promoted anymore. You have mastered your class."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("To promote now you need" + client.PromoteItemNameNeed + " level " + client.PromoteLevelNeed + "."); dialog.Option("Promote me sir.", 3); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 3: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Class == MClass) { dialog.Text("You cannot be promoted anymore. You have mastered your class."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { if (client.PromoteItemNeed == 721020) { if (client.Inventory.Remove("moonbox")) { client.Inventory.Add(client.PromoteItemGain, 0, 1); client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } return; } if (client.Inventory.Contains(client.PromoteItemNeed, client.PromoteItemCountNeed) && client.Entity.Level >= client.PromoteLevelNeed) { client.Inventory.Remove(client.PromoteItemNeed, client.PromoteItemCountNeed); client.Inventory.Add(client.PromoteItemGain, 0, 1); client.Entity.Class++; dialog.Text("Congratulations! You have been promoted."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh.", 255); dialog.Send(); } } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 2: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { dialog.Text("Let me know what you want to learn."); dialog.Option("XP Revive (Lvl 1).", 5); dialog.Option("Volcano (Lvl 1).", 6); dialog.Option("Lightning (Lvl 1).", 7); dialog.Option("HealingRain. (Lvl 40).", 8); dialog.Option("StarOfAccuracy. (Lvl 40).", 9); dialog.Option("MagicShield. (Lvl 40).", 10); dialog.Option("Next.", 20); dialog.Option("Nothing.", 255); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 20: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { dialog.Text("Let me know what you want to learn."); dialog.Option("WaterDevil. (Lvl 40).", 21); dialog.Option("Stigma. (Lvl 40).", 11); dialog.Option("Invisibility. (Lvl 70).", 12); dialog.Option("Pray. (Lvl 70).", 13); dialog.Option("SpeedLightning (Lvl 70).", 14); dialog.Option("AdvancedCure. (Lvl 80).", 15); dialog.Option("Nectar. (Lvl 90).", 16); dialog.Option("Back.", 2); dialog.Send(); } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 5: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 1) { if (!client.AddSpell(LearnableSpell(1050))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned xp revive skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 1 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 21: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 40) { if (!client.AddSpell(LearnableSpell(1280))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You have learned water devil."); dialog.Option("Thank you master.", 255); dialog.Send(); } } else { dialog.Text("You need to be level 40 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 6: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 1) { if (!client.AddSpell(LearnableSpell(1125))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the volcano xp skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 1 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 7: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 1) { if (!client.AddSpell(LearnableSpell(1010))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the lightning xp skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 1 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 8: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 40) { if (!client.AddSpell(LearnableSpell(1055))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the fire healing rain."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 40 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 9: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 40) { if (!client.AddSpell(LearnableSpell(1085))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the star of acurracy skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 40 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 10: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 40) { if (!client.AddSpell(LearnableSpell(1090))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the magic shield skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 40 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 11: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 40) { if (!client.AddSpell(LearnableSpell(1095))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the stigma skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 40 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 12: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 70) { if (!client.AddSpell(LearnableSpell(1075))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the invisibility skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 70 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 13: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 70) { if (!client.AddSpell(LearnableSpell(1100))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the pray skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 70 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 14: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 70) { if (!client.AddSpell(LearnableSpell(5001))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the speed lightning skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 70 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 15: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 80) { if (!client.AddSpell(LearnableSpell(1175))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the advanced cure skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 70 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } case 16: { if (client.Entity.Class >= mClass && client.Entity.Class <= MClass) { if (client.Entity.Level >= 80) { if (!client.AddSpell(LearnableSpell(1170))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); break; } dialog.Text("You have learned the nectar skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { dialog.Text("You need to be level 70 or more."); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("I will not tell any of the " + Class + " secrets to another class, so, good bye."); dialog.Option("Alright.", 255); dialog.Send(); } break; } } break; } #endregion #region MightyTao case 35500: { switch (npcRequest.OptionID) { case 0: { dialog.Text("If you have reborn atleast one time, you can learn some great skills. With them you will be able to summon some misterious monsters. They will help you conquer this world much faster."); dialog.Option("Summon guard - 1 euxite ore.", 1); dialog.Option("Summon class monster - 1 gold ore rate5.", 2); dialog.Send(); break; } case 1: { if (client.Entity.Reborn > 0) { if (client.Inventory.Contains(1072031, 1)) { client.Inventory.Remove(1072031, 1); if (!client.AddSpell(LearnableSpell(4000))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } } } else { dialog.Text("You cannot learn those skills until you reborn atleast once."); dialog.Option("Alright", 255); dialog.Send(); break; } break; } case 2: { if (client.Entity.Reborn > 0) { if (client.Entity.Class >= 50 && client.Entity.Class <= 55) { dialog.Text("You cannot learn skills like this one. Ninjas don't need such thing. They are much more stronger than every other class."); dialog.Option("Alright", 255); dialog.Send(); break; } if (client.Inventory.Contains(1072054, 1)) { client.Inventory.Remove(1072054, 1); if (client.Entity.Class <= 15) client.AddSpell(LearnableSpell(4050)); else if (client.Entity.Class <= 25) client.AddSpell(LearnableSpell(4060)); else if (client.Entity.Class <= 45) client.AddSpell(LearnableSpell(4070)); else if (client.Entity.Class <= 135) client.AddSpell(LearnableSpell(4010)); else if (client.Entity.Class <= 145) client.AddSpell(LearnableSpell(4020)); } } else { dialog.Text("You cannot learn those skills until you reborn atleast once."); dialog.Option("Alright", 255); dialog.Send(); break; } break; } } break; } #endregion #endregion } break; } #endregion #region Stables case 1006: { switch (client.ActiveNpc) { #region Stables #region Breeder case 9883: { Data data = new Data(true); data.ID = Data.OpenWindow; data.UID = client.Entity.UID; data.TimeStamp = Time32.Now; data.dwParam = Data.WindowCommands.Breeding; data.wParam1 = client.Entity.X; data.wParam2 = client.Entity.Y; client.Send(data); break; } #endregion #region SkillTeacher case 9881: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Ready to learn some great skills? Their prices are as good as they are."); dialog.Option("Riding - 50000 gold.", 1); dialog.Option("Spook - 100000 gold.", 2); dialog.Option("WarCry - 1000000 gold.", 3); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 1: { if (client.Entity.Money >= 50000) { if (!client.AddSpell(LearnableSpell(7001))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { client.Entity.Money -= 50000; } } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh sorry.", 255); } break; } case 2: { if (client.Entity.Money >= 100000) { if (!client.AddSpell(LearnableSpell(7002))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { client.Entity.Money -= 100000; } } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh sorry.", 255); } break; } case 3: { if (client.Entity.Money >= 1000000) { if (!client.AddSpell(LearnableSpell(7003))) { dialog.Text("You already know this skill."); dialog.Option("Thank you master.", 255); dialog.Send(); } else { client.Entity.Money -= 1000000; } } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh sorry.", 255); } break; } } break; } #endregion #endregion } break; } #endregion #region Lottery case 700: { switch (client.ActiveNpc) { #region LuckyBox case 925: case 926: case 927: case 928: case 929: case 930: case 931: case 932: case 933: case 934: case 935: case 936: case 937: case 938: case 939: case 940: case 942: case 943: case 944: case 945: { switch (npcRequest.OptionID) { case 0: { if (client.InLottery) { dialog.Text("Do you really want to chose me?"); dialog.Option("Yes.", 1); dialog.Option("No.", 255); dialog.Send(); } else { dialog.Text("Re-enter the lottery if you want to try me."); dialog.Option("Ahh.", 255); dialog.Send(); } break; } case 1: { if (client.InLottery) { if (client.Inventory.Count == 40) { client.Send(Conquer_Online_Server.ServerBase.Constants.FullInventory); return; } client.InLottery = false; tryagain: int rand = Conquer_Online_Server.ServerBase.Kernel.Random.Next(Conquer_Online_Server.Database.LotteryTable.LotteryItems.Count); var item = Conquer_Online_Server.Database.LotteryTable.LotteryItems[rand]; var Itemd = Conquer_Online_Server.Database.ConquerItemInformation.BaseInformations[item.ID]; if (Itemd == null) goto tryagain; if (Conquer_Online_Server.ServerBase.Kernel.Rate(item.Rank, item.Chance) && Conquer_Online_Server.ServerBase.Kernel.Rate(item.Rank, 35 - item.Rank)) { IConquerItem Item = new ConquerItem(true); Item.ID = item.ID; Item.Plus = item.Plus; Item.Color = Conquer_Online_Server.Game.Enums.Color.Blue; if (item.Sockets > 0) Item.SocketOne = Conquer_Online_Server.Game.Enums.Gem.EmptySocket; if (item.Sockets > 1) Item.SocketTwo = Conquer_Online_Server.Game.Enums.Gem.EmptySocket; Item.Durability = Item.MaximDurability = Itemd.Durability; client.Inventory.Add(Item, Conquer_Online_Server.Game.Enums.ItemUse.CreateAndAdd); if (item.Rank <= 4) { Conquer_Online_Server.ServerBase.Kernel.SendWorldMessage(new Message("Congratulations! " + client.Entity.Name + " won " + item.Name + " in lottery.", System.Drawing.Color.Black, Message.Talk), Conquer_Online_Server.ServerBase.Kernel.GamePool.Values); } else { if (Conquer_Online_Server.ServerBase.Kernel.Rate(item.Chance, 100)) { Conquer_Online_Server.ServerBase.Kernel.SendWorldMessage(new Message("Congratulations! " + client.Entity.Name + " won " + item.Name + " in lottery.", System.Drawing.Color.Black, Message.Talk), Conquer_Online_Server.ServerBase.Kernel.GamePool.Values); } } } else { goto tryagain; } } break; } } break; } #endregion } break; } #endregion } switch (client.ActiveNpc) { #region QuarantineInvite case 54236: { switch (npcRequest.OptionID) { case 0: { if (Conquer_Online_Server.Game.ConquerStructures.Quarantine.Started) { dialog.Text("The quarantine tournament has now started!"); dialog.Text("You will get divided into two teams, black and white, and "); dialog.Text("must eliminate the other. Only fastblade/scentsword is allowed!"); dialog.Option("Let me join!", 1); dialog.Option("Not intrested", 255); } else { dialog.Text("The quarantine tournament is not active"); dialog.Option("I see", 255); } dialog.Send(); break; } case 1: { if (client.Equipment.Free(3)) { dialog.Text("You need to wear an armor that can be colored."); dialog.Option("I see", 255); dialog.Send(); break; } uint UID = 92000, ID = 0; if (Quarantine.Black.Count > Quarantine.White.Count) { Quarantine.White.Add(client.Entity.UID, client); UID += (uint)Quarantine.White.Count + (uint)Kernel.Random.Next(1,1000); client.Entity.Teleport(1844, 114, 163); } else { Quarantine.Black.Add(client.Entity.UID, client); UID += (uint)Quarantine.Black.Count + (uint)Kernel.Random.Next(1, 1000); ID = 200; client.Entity.Teleport(1844, 225, 162); } Conquer_Online_Server.Interfaces.IConquerItem newItem = new Conquer_Online_Server.Network.GamePackets.ConquerItem(true); newItem.ID = 181315 + ID; newItem.UID = UID; newItem.Durability = 1000; newItem.MaximDurability = 1000; newItem.Position = 9; client.Equipment.Remove(9); if (client.Equipment.Objects[8] != null) client.Equipment.Objects[8] = null; client.Equipment.Add(newItem); newItem.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; newItem.Send(client); client.SendEquipment(false); client.Equipment.UpdateEntityPacket(); break; } } break; } #endregion #region Warden case 10082: { switch (npcRequest.OptionID) { case 0: { dialog.Text("I can take you out of the jail. Just tell me."); dialog.Option("Take me out.", 1); dialog.Option("Alright.", 255); dialog.Send(); break; } case 1: { client.Entity.Teleport(1002, 514, 356); break; } } break; } #endregion #region Tinter case 10064: //Tinter { switch (npcRequest.OptionID) { case 0: { dialog.Text("Select the item."); dialog.Option("Headgear.", 1); dialog.Option("Armor.", 3); dialog.Option("Shield.", 5); dialog.Option("I'm standing by.", 255); dialog.Send(); break; } case 1: case 3: case 5: { client.TinterItemSelect = npcRequest.OptionID; dialog.Text("Select the new color."); dialog.Option("Orange.", 13); dialog.Option("Light Blue.", 14); dialog.Option("Red.", 15); dialog.Option("Blue.", 16); dialog.Option("Yellow.", 17); dialog.Option("Purple.", 18); dialog.Option("White.", 19); dialog.Option("I'm standing by.", 255); dialog.Send(); break; } case 13: case 14: case 15: case 16: case 17: case 18: case 19: { if (client.TinterItemSelect == 0) return; IConquerItem item = client.Equipment.TryGetItem(client.TinterItemSelect); if (item == null || item.ID == 0) { dialog.Text("You don't have a item like this one equiped."); dialog.Send(); break; } item.Color = (Conquer_Online_Server.Game.Enums.Color)(npcRequest.OptionID % 10); Conquer_Online_Server.Database.ConquerItemTable.UpdateColor(item, client); client.TinterItemSelect = 0; item.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update; item.Send(client); item.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Default; break; } } break; } #endregion #region Lottery #region JewlarLau case 3953: case 2065: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Do you have gems? I'm a great fan of them... I'd give gems with better quality for 15 gems of a lower quality. As long as I'll have many more, I don't care about the quality. I think you know, quantity not quality...ha ha! what fools, they say quality is better than quantity but I don't care."); dialog.Option("I have 15 normal gems.", 25); dialog.Option("I have 15 refined gems.", 26); dialog.Option("I'm too poor.", 255); dialog.Send(); break; } case 25: case 26: { client.JewelarLauKind = npcRequest.OptionID; dialog.Text("What gems?"); dialog.Option("PhoenixGem.", 1); dialog.Option("DragonGem.", 11); dialog.Option("FuryGem.", 21); dialog.Option("RainbowGem.", 31); dialog.Option("KylinGem.", 41); dialog.Option("Next.", 50); dialog.Send(); break; } case 50: { dialog.Text("What gems?"); dialog.Option("VioletGem.", 51); dialog.Option("MoonGem.", 61); dialog.Option("TortoiseGem.", 71); dialog.Option("ThunderGem.", 101); dialog.Option("GloryGem.", 121); dialog.Option("Back.", client.JewelarLauKind); dialog.Send(); break; } default: { if (npcRequest.OptionID == 255) return; byte gemid = (byte)(npcRequest.OptionID + client.JewelarLauKind - 25); uint findgemid = (uint)(700000 + gemid); uint givegemid = findgemid + 1; if (client.Inventory.Contains(findgemid, 15)) { client.Inventory.Remove(findgemid, 15); client.Inventory.Add(givegemid, 0, 1); } else { dialog.Text("You don't have enough " + (Conquer_Online_Server.Game.Enums.Gem)gemid + "s. Come back when you have all of them."); dialog.Option("Alright sir.", 255); dialog.Send(); } break; } } break; } #endregion #region LadyLuck case 924: { switch (npcRequest.OptionID) { case 0: { if (client.InLottery) { dialog.Text("You may come back later, if you still want to try your luck. It will be free next time you want."); dialog.Option("Yes please, let me out.", 1); dialog.Option("No thank you.", 255); dialog.Send(); } else { dialog.Text("Thank you for trying out the lottery. Please come back any other time, we will wait you."); dialog.Option("Take me out.", 1); dialog.Send(); } break; } case 1: { client.Entity.Teleport(1036, 219, 189); break; } } break; } #endregion #endregion #region Labirinth case 1153: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello there. Just let me know if you want to move to the second floor of the labirinth with a SkyToken or go to TwinCity for free."); dialog.Option("Second floor.", 1); dialog.Option("TwinCity.", 2); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 1: { if (client.Inventory.Contains(721537, 1)) { client.Inventory.Remove(721537, 1); client.Entity.Teleport(1352, 027, 227); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh sorry.", 255); } break; } case 2: { client.Entity.Teleport(1002, 428, 379); break; } } break; } case 1154: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello there. Just let me know if you want to move to the third floor of the labirinth with a EarthToken or go to TwinCity for free."); dialog.Option("Third floor.", 1); dialog.Option("TwinCity.", 2); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 1: { if (client.Inventory.Contains(721538, 1)) { client.Inventory.Remove(721538, 1); client.Entity.Teleport(1353, 025, 268); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh sorry.", 255); } break; } case 2: { client.Entity.Teleport(1002, 428, 379); break; } } break; } case 1155: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello there. Just let me know if you want to move to the fourth floor of the labirinth with a SoulToken or go to TwinCity for free."); dialog.Option("Fourth floor.", 1); dialog.Option("TwinCity.", 2); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 1: { if (client.Inventory.Contains(721539, 1)) { client.Inventory.Remove(721539, 1); client.Entity.Teleport(1354, 005, 290); } else { dialog.Text("You don't meet the requierments."); dialog.Option("Ahh sorry.", 255); } break; } case 2: { client.Entity.Teleport(1002, 428, 379); break; } } break; } case 1156: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello there. Just let me know if you want to go to TwinCity."); dialog.Option("TwinCity.", 1); dialog.Option("Nothing.", 255); break; } case 1: { client.Entity.Teleport(1002, 428, 379); break; } } break; } #endregion #region Birth Villiage #region RecruitMaster case 1060: { switch (npcRequest.OptionID) { case 0: { dialog.Text("You are about to enter the wonderful world of Trinity Conquer!"); dialog.Text("\n\nYou will have much to learn, to survive here. As the saying goes, if you know yourself and your enemy, you will never lose a battle!"); dialog.Option("Got it!", 1); dialog.Send(); break; } case 1: { switch (client.Entity.Class) { case 50: { dialog.Text("What the..! Oh.. It's just you, Ninja!"); dialog.Text("\n\nSuch a mysterious figures, cloaked in shadow.. Ninjas have the most devastating attacks"); dialog.Text(", but the lowest defence and health of all classes. Their speed and surprising skills are what make"); dialog.Text("are what make them such a dangerous force here!\n\nAlways be aware of your surroundings!\n"); dialog.Option("I am like a shadow!", 2); dialog.Send(); break; } case 100: { dialog.Text("Well hello there, young Taoist! Right now, you don't have any specialty in your magic skills."); dialog.Text("Once you train enough, you can be promoted to a Fire or Water Taoist, and then continure on your path to glory!"); dialog.Option("Fire and Water Taoist?", 11); dialog.Send(); break; } } break; } case 11: { dialog.Text("Fire Taoists are able to smite their enemies at long range, as their spells cause much more damage than other Taoists."); dialog.Text("While the Water Taoists are adept at healing and reviving fallen comrades. Both paths offer their own choices."); dialog.Text("It's up to you to decide where your heart lies."); dialog.Option("I see.", 2); dialog.Send(); break; } case 2: { dialog.Text("In Conquer Online, Path Finding is efficient in helping you locate shops and places of intrest. "); dialog.Text("You can check the current map's list by clicking the \"Path Finding\" button to the right. "); dialog.Text("Just highlight where you would like to go and click, and you're on your way!"); dialog.Option("Anything else?", 3); dialog.Send(); break; } case 3: { dialog.Text("If you click \"Status\" in the lower right corner of the screen you will be able to check your character level, status, and attributes."); dialog.Option("I see.", 4); dialog.Send(); break; } case 4: { dialog.Text("You can also check your equipment, weapon proficiency, skills, and skill levels by click the tabs on the left side of the Status window."); if (client.Entity.Class == 100) { dialog.Option("Got it!", 55); } else { dialog.Option("Got it!", 5); } dialog.Send(); break; } case 5: { dialog.Text("Now you should go speak with Old General Yang.\n I'm sure he will be able to teach you some more useful tips!"); dialog.Option("Okay, thanks!", 6); dialog.Send(); break; } case 55: { dialog.Text("Now you should go speak with Taoist Star.\n I'm sure he will be able to teach you some more useful tips!"); dialog.Option("Okay, thanks!", 66); dialog.Send(); break; } case 6: { new Message("You should follow the Recruit Master's advice!\nGo find Old General Yang.", System.Drawing.Color.Green, Message.PopUP); break; } case 66: { new Message("You should follow the Recruit Master's advice!\nGo find Taoist Star.", System.Drawing.Color.Green, Message.PopUP); break; } } break; } #endregion #region Pharmacist case 10008: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hi! I sell all sorts of potions and town scrolls in all the citys.\nI also sell fireworks and skill books in the market."); dialog.Option("What potions?", 1); dialog.Option("Consult others.", 255); dialog.Send(); break; } case 1: { dialog.Text("Healing and mana potions.\nHealing potions make you healthy.\nMana potions will enable you to cast spells, If you have any.\n"); dialog.Text("\nThat is all. If you have not talked to others NPCs...\nYou had better have a chat with them so that you can learn more.\n"); dialog.Option("I see. Thanks.", 255); dialog.Send(); break; } } break; } #endregion #region WiseGuy case 10004: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Well, if you want to talk to any NPCs, just click them. Easy, huh?"); dialog.Option("About my class...", 1); dialog.Option("Ah, Forget about it.", 255); dialog.Send(); break; } case 1: { switch (client.Entity.Class) { case 50: { dialog.Text("The Ninja is an expert in various oriental weapons, boasting swift and powerful melee attack skills. I know somebody. In Twin City there are merchants I know. you go talk to them, they'll sort you out. Got it?"); break; } case 10: { dialog.Text("The Trojan is an expert in various oriental weapons, dual wield and a powerful melee attack skills. I know somebody. In Twin City there are merchants I know. you go talk to them, they'll sort you out. Got it?"); break; } case 40: { dialog.Text("The Archer is an expert in Ranged oriental weapons, Ppowerful Ranged attack skills. I know somebody. In Twin City there are merchants I know. you go talk to them, they'll sort you out. Got it?"); break; } case 20: { dialog.Text("The Warrior is an expert in various oriental weapons, two handed weapons, Sheald and a powerful melee attack skills. I know somebody. In Twin City there are merchants I know. you go talk to them, they'll sort you out. Got it?"); break; } case 100: { dialog.Text("The Taoist is an expert in various Magic Spells, powerful melee Spells and skills. I know somebody. In Twin City there are merchants I know. you go talk to them, they'll sort you out. Got it?"); break; } } dialog.Option("I see, thanks.", 0); dialog.Send(); break; } } break; } #endregion #region VilliageIdiot case 10009: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello, new blood! Welcome! It is good that you selected This class!"); dialog.Option("Thank you.", 1); dialog.Option("Not a chance. Leave me be!", 255); dialog.Send(); break; } case 1: { switch (client.Entity.Class) { case 10: { dialog.Text("Some handy weapons are essential for Trojans. But you'd never do that, Cause your're my friend now, right?"); break; } case 40: { dialog.Text("Some handy weapons are essential for Archers. But you'd never do that, Cause your're my friend now, right?"); break; } case 20: { dialog.Text("Some handy weapons are essential for Warriors. But you'd never do that, Cause your're my friend now, right?"); break; } case 100: { dialog.Text("Some handy weapons are essential for Taoists. But you'd never do that, Cause your're my friend now, right?"); break; } case 50: { dialog.Text("Some handy weapons are essential for Ninjas. But you'd never do that, Cause your're my friend now, right?"); break; } } dialog.Option("Sure.. I'll be back in my next life.", 255); dialog.Send(); break; } } break; } #endregion #region Armorer case 10007: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Armorers swear only to provide the very best in defense.\nWhether it's robes or helmets, we have it all."); dialog.Option("I see. Where can I find an armorer?", 1); dialog.Option("Consult others.", 255); dialog.Send(); break; } case 1: { dialog.Text("Every city or major settlement has one.\nBut our armors very best from place to place.\nSome armorers have better helms, while others specialize in mail or helms.\n"); dialog.Text("Just to be sure to buy armor without red text in the description.\nYou won't be able to wear those!\n"); dialog.Option("I see. Thanks.", 255); dialog.Send(); break; } } break; } #endregion #region Warehouseman case 10006: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Welcome! I run a warehouse in every city.\nYou can store your money and items in my warehouses, and retrieve them for free."); dialog.Option("Cool. How do I use them?", 1); dialog.Option("Consult others.", 255); dialog.Send(); break; } case 1: { dialog.Text("First, you find my warehouse men in your city..\nClick on him to see your storage box open up.\nTo deposit money, enter the amount in the bank field before clicking Deposit.\n"); dialog.Text("Withdrawing money is the same.\n \nIf you want to put items in your storage space, just drag and drop.\nTaking them out only requires one click.\nAlso, your money is totalled from all warehouses.\n"); dialog.Option("I see. Thanks.", 255); dialog.Send(); break; } } break; } #endregion #region Blacksmith case 10005: { switch (npcRequest.OptionID) { case 0: { dialog.Text("We blacksmiths can be found from North to South, East to West.\nWe promise a fine selection of weapons for you to purchase!"); dialog.Option("Tell me more.", 1); dialog.Option("Consult others.", 255); dialog.Send(); break; } case 1: { dialog.Text("Let me tell you how to choose a good weapon.\nHover your mouse pointer over the weapon, check its stats and find a weapon with all white writing.\nIf there's red text, you won't be able to use it."); dialog.Text("After you buy it, you open your backpack, find the right item and right-click it to equip.\nIt's as easy as that!\n \nOh, and to sell an item, you just drag and drop to my shop!\n"); dialog.Option("What about repairs?", 2); dialog.Option("Consult others.", 255); dialog.Send(); break; } case 2: { dialog.Text("First, unequip the item by double-clicking it in your status window.\nThen find me, click my repair button and click the item."); dialog.Option("Any other tips?", 3); dialog.Option("Consult others.", 255); dialog.Send(); break; } case 3: { dialog.Text("Yeah, some items are high quality: Normal, Refined, Unique, Elite, Super.\nThat's specialist stuff, only found in the market.\nThat is all. If you have not talked to other NPCs...\nYou had better have a chat with them so that you can learn more."); dialog.Option("Thanks.", 255); dialog.Send(); break; } } break; } #endregion #region GateMan case 10010: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Good day to you" + client.Entity.Name + "! I'm the gateman of the Birth Village.\nIs there any way I can help you?"); dialog.Option("I'm ready to start the adventure.", 1); dialog.Option("I'm beyond help...", 255); dialog.Send(); break; } case 1: { dialog.Text("Welcome to the world of Trinity Conquer Online!\nThe road to becoming a legend is both long and bumpy. You should work very hard to become great! Here is a quest for you. Please take this message to Kungfu Boy in Twin City. You will get a reward for your help."); dialog.Option("As you wish.", 2); dialog.Option("I need more advice.", 3); dialog.Option("I'll stay here for a while.", 255); dialog.Send(); break; } case 2: { client.Entity.Teleport(1002, 140, 390); client.Send(new Message("You've recived a present from the gateman and you agreed to take the message to Kungfu Boy in Twin City for him.", System.Drawing.Color.Green, Message.PopUP)); break; } case 3: { dialog.Text("You will soon be in Twin City. I advise you not to stray too far from the city gates. Don't leave the Wind Plains until you are truly ready. You wouldn't even cross the river until you've visited"); dialog.Text("the job center for your first promotion. Open your backpack and drag some potion down into the quick slot bar. You will be able to use F1-F10 keys to use things you place in the quick slots. They should help you stay alive."); dialog.Option("Thanks.", 255); dialog.Send(); break; } } break; } #endregion #region OldGeneralYang case 425: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Oh, I so long for the glory of the field, but I'm too old to go back out and deal with these youngsters...\n"); dialog.Text("I see a spark in your eye that reminds me of my younger days... What can I do for you young one?"); dialog.Option("I'm ready for Initiation.", 1); dialog.Send(); break; } case 1: { dialog.Text("It would be wise for you to learn alittle more about Conquer before you decide to head out on your own."); dialog.Option("Fill me in.", 2); dialog.Send(); break; } case 2: { dialog.Text("There are two kinds of skills in Conquer.\nOne is the active skills, which are activated through the use of your magic or stamina."); dialog.Option("And the other?", 3); dialog.Send(); break; } case 3: { dialog.Text("The other is known as a passive skill.\nPassive skills will automaticly activate if the situation warrants the passive skills use."); dialog.Option("Got it!", 4); dialog.Send(); break; } case 4: { dialog.Text("Well that is all I can tell you for today. It's time to eat!\nYou can talk to the Village Gateman when you are ready to get started."); dialog.Option("Okay", 255); dialog.Send(); break; } } break; } #endregion #endregion #region OUT case 9988: case 9989: case 9990: case 9991: { switch (npcRequest.OptionID) { case 0: { dialog.Text("In exchange of a fee of 500gold, I will teleport you back to the guild war map. Don't bother me if you are poor."); dialog.Option("Teleport me.", 1); dialog.Option("I'm too poor.", 255); dialog.Send(); break; } case 1: { if (client.Entity.Money >= 500) { client.Entity.Money -= 500; client.Entity.Teleport(1038, 348, 339); } break; } } break; } #endregion #region Warehousemen case 8: case 10012: case 10028: case 10011: case 10027: case 4101: case 44: { switch (npcRequest.OptionID) { case 0: { INpc npc = null; if (client.Map.Npcs.TryGetValue(client.ActiveNpc, out npc)) { if (client.WarehousePW == "") client.Send(new Message("To protect your items that are stored in warehouse, you should set an password at WHSGuardian.", System.Drawing.Color.Maroon, Message.TopLeft)); else { if (!client.WarehouseOpen) { dialog.Text("Please tell me the password of your warehouse so I can open it. It's like a key, if you don't have it I can't do anything."); dialog.Input("Here:", 1, 8); dialog.Option("Nevermind.", 255); dialog.Send(); return; } } Data data = new Data(true); data.ID = Data.OpenWindow; data.UID = client.Entity.UID; data.TimeStamp = Time32.Now; data.dwParam = Data.WindowCommands.Warehouse; data.wParam1 = npc.X; data.wParam2 = npc.Y; client.Send(data); } break; } case 1: { if (client.WarehouseOpenTries < 3) { client.WarehouseOpenTries++; if (npcRequest.Input == client.WarehousePW) { INpc npc = null; if (client.Map.Npcs.TryGetValue(client.ActiveNpc, out npc)) { client.WarehouseOpen = true; Data data = new Data(true); data.ID = Data.OpenWindow; data.UID = client.Entity.UID; data.TimeStamp = Time32.Now; data.dwParam = 4; data.wParam1 = npc.X; data.wParam2 = npc.Y; client.Send(data); } } else { dialog.Text("Wrong password. Tries left: " + client.WarehouseOpenTries + ". Try again?"); dialog.Input("Here:", 1, 8); dialog.Option("Alright.", 255); dialog.Send(); } } else { dialog.Text("You can try no more to open your warehouse. Come back later."); dialog.Option("Nevermind.", 255); dialog.Send(); } break; } } break; } #endregion #region Boxers case 180: { switch (npcRequest.OptionID) { case 0: { dialog.Text("If you want to leave just tell me when you are ready. It's free.\nYou will be teleported to the city you were in before coming here."); dialog.Option("I'm ready.", 1); dialog.Option("Wait a minute.", 255); dialog.Send(); break; } case 1: { int PrevMap = client.Entity.PreviousMapID; switch (PrevMap) { default: { client.Entity.Teleport(1002, 429, 378); break; } case 1000: { client.Entity.Teleport(1000, 500, 650); break; } case 1020: { client.Entity.Teleport(1020, 565, 562); break; } case 1011: { client.Entity.Teleport(1011, 188, 264); break; } case 1015: { client.Entity.Teleport(1015, 717, 571); break; } } break; } } break; } case 181: case 182: case 183: case 184: case 185: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello " + client.Entity.Name + ", if your level is higher than 19, I can send you to a training ground in exchange of 1000 silvers. Be aware of the fact that you can't attack dumes with level higher than yours."); dialog.Option("Alright, let me in.", 1); dialog.Option("Nevermind", 255); dialog.Send(); break; } case 1: { if (client.Entity.Level >= 20) { if (client.Entity.Money >= 1000) { client.Entity.Money -= 1000; client.Entity.Teleport(1039, 216, 214); } else { dialog.Text("You do not have 1000 silvers."); dialog.Option("Aww!", 255); dialog.Send(); } } else { dialog.Text("Your level is not high enough."); dialog.Option("Aww!", 255); dialog.Send(); } break; } } break; } #endregion #region Guild War #region Jail warden case 140: { switch (npcRequest.OptionID) { case 0: { if (Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.IsWar) { if (Time32.Now <= Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.LastWin.AddMinutes(5)) { dialog.Text("My friend, you may leave if you want."); dialog.Option("Yes please.", 1); dialog.Option("No need...", 255); dialog.Send(); } else { dialog.Text("You lost your change. Now wait for the next pardon!"); dialog.Option("No!!!", 255); dialog.Send(); } } else { dialog.Text("My friend, you may leave if you want."); dialog.Option("Yes please.", 1); dialog.Option("No need...", 255); dialog.Send(); } break; } case 1: { if (Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.IsWar) { if (Time32.Now <= Conquer_Online_Server.Game.ConquerStructures.Society.GuildWar.LastWin.AddMinutes(5)) { client.Entity.Teleport(1002, 430, 380); } else { dialog.Text("You lost your change. Now wait for the next pardon!"); dialog.Option("No!!!", 255); dialog.Send(); } } else { client.Entity.Teleport(1002, 430, 380); } break; } } break; } #endregion #region Light up runes case 4452: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Hello friend, as you might know, while guild war, you can light up some runes and after guild war is over, you can come to me and I will give you experience in exchange of your rune."); dialog.Text("Once guild war starts, come to me and ask for a rune, and you will receive it. If you lose it, you can come back and reclaim it, but you will start from level 1 once again."); dialog.Option("Give me a rune.", 1); dialog.Option("Claim experience.", 2); dialog.Option("Nothing.", 255); dialog.Send(); break; } case 1: { if (GuildWar.IsWar) { for (int c = 0; c <= 10; c++) { if (client.Inventory.Contains((uint)(729960 + c), 1)) { dialog.Text("You already have a rune."); dialog.Option("Thank you.", 255); dialog.Send(); return; } } if (client.Inventory.Add(729960, 0, 1)) { dialog.Text("Go, and light up this rune."); dialog.Option("Thank you.", 255); dialog.Send(); } else { dialog.Text("There is not enough room in your inventory."); dialog.Option("Ah, hold on.", 255); dialog.Send(); } } else { dialog.Text("I cannot give you a rune now."); dialog.Option("Ahh.", 255); dialog.Send(); } break; } case 2: { if (!GuildWar.IsWar) { for (int c = 0; c <= 10; c++) { if (client.Inventory.Contains((uint)(729960 + c), 1)) { int expballs = c; if (729960 + c == 729970) expballs += 2; for (int ex = 0; ex < expballs; ex++) client.IncreaseExperience(client.ExpBall, false); client.Inventory.Remove((uint)(729960 + c), 1); return; } } dialog.Text("You cannot claim experience if you don't have a rune."); dialog.Option("Ahh.", 255); dialog.Send(); } else { } { dialog.Text("You cannot claim experience while guild war."); dialog.Option("Ahh.", 255); dialog.Send(); } break; } } break; } case 4453: case 4454: case 4455: case 4456: case 4457: case 4458: case 4459: case 4460: case 4461: { dialog.Avatar(0); uint takeFlame = 725507 + client.ActiveNpc; uint addFlame = 725507 + client.ActiveNpc + 1; if (GuildWar.IsWar) { if (client.Inventory.Contains(takeFlame, 1)) { client.Inventory.Remove(takeFlame, 1); client.Inventory.Add(addFlame, 0, 1); dialog.Text("Well done! Next rune is number " + (client.ActiveNpc - 4451) + "."); dialog.Send(); } else { dialog.Text("You cannot flame up this stone without the proper rune."); dialog.Send(); } } else { dialog.Text("You cannot flame up a rune if guild war is not on."); dialog.Send(); } break; } case 4462: { dialog.Avatar(0); uint takeFlame = 725507 + client.ActiveNpc; uint addFlame = 725507 + client.ActiveNpc + 1; if (GuildWar.IsWar) { if (GuildWar.Flame10th) { if (client.Inventory.Contains(takeFlame, 1)) { client.Inventory.Remove(takeFlame, 1); client.Inventory.Add(addFlame, 0, 1); dialog.Text("Well done! Nothing left to light up. Congratulations!"); dialog.Send(); } else { dialog.Text("You cannot flame up this stone without the proper rune."); dialog.Send(); } } else { dialog.Text("It's not the right time to flame up this rune."); dialog.Send(); } } } break; #endregion #endregion #region OfflineTG case 3836: { OfflineTGStats sts = new OfflineTGStats(true); var T1 = new TimeSpan(DateTime.Now.Ticks); var T2 = new TimeSpan(client.OfflineTGEnterTime.Ticks); ushort minutes = (ushort)(T1.TotalMinutes - T2.TotalMinutes); minutes = (ushort)Math.Min((ushort)900, minutes); sts.TotalTrainingMinutesLeft = (ushort)(900 - minutes); sts.TrainedMinutes = minutes; ulong exp = client.Entity.Experience; byte level = client.Entity.Level; double expballGain = (double)300 * (double)minutes / (double)900; while (expballGain >= 100) { expballGain -= 100; exp += client.ExpBall; } if (expballGain != 0) exp += (uint)(client.ExpBall * (expballGain / 100)); while (exp >= Conquer_Online_Server.Database.DataHolder.LevelExperience(level)) { exp -= Conquer_Online_Server.Database.DataHolder.LevelExperience(level); level++; } double percent = (double)exp * (double)100 / (double)Conquer_Online_Server.Database.DataHolder.LevelExperience(level); sts.Character_NewExp = (ulong)(percent * 100000); sts.Character_AcquiredLevel = level; sts.Send(client); break; } #endregion #region Adventure Zone #region Adv zone teleporter case 300655: { switch (npcRequest.OptionID) { case 0: { dialog.Text("I have just discovered a new place, where the turtle doves are so big, that they drop awesome items when they die. It's free, do you want to see it?"); dialog.Option("Yes please.", 1); dialog.Option("No thank you.", 255); dialog.Send(); break; } case 1: { client.Entity.Teleport(1210, 1029, 714); break; } } break; } #endregion #region Adv zone mine supervisor case 300652: { switch (npcRequest.OptionID) { case 0: { dialog.Text("In this mine, the minerals are very good. They are really expensive, would you like to enter?"); dialog.Option("Yes please.", 1); dialog.Option("No thank you.", 255); dialog.Send(); break; } case 1: { client.Entity.Teleport(1218, 30, 69); break; } } break; } #endregion #region Grandpa case 300653: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Would you like to advance?"); dialog.Option("Yes.", 1); dialog.Option("No.", 255); dialog.Send(); break; } case 1: { client.Entity.Teleport(1219, 448, 272); break; } } break; } #endregion #region Boatman case 300654: { switch (npcRequest.OptionID) { case 0: { dialog.Text("Would you like to go in TwinCity?"); dialog.Option("Yes.", 1); dialog.Option("No.", 255); dialog.Send(); break; } case 1: { client.Entity.Teleport(1002, 430, 380); break; } } break; } #endregion #endregion default: { if (client.Account.State == Conquer_Online_Server.Database.AccountTable.AccountState.GameMaster || client.Account.State == Conquer_Online_Server.Database.AccountTable.AccountState.ProjectManager) client.Send(new Message("NpcID[" + client.ActiveNpc + "]", System.Drawing.Color.Red, Message.TopLeft)); break; } } if (!dialog.Sent) if (dialog.Replies.Count > 1) dialog.Send(); }