public static void ItemSell(byte[] Data, ClientSocket CSocket) { int ItemUID = PacketProcessor.ReadLong(Data, 8); if (CSocket.Client.Inventory.ContainsKey(ItemUID)) { Struct.ItemInfo Item = new Struct.ItemInfo(); Item = CSocket.Client.Inventory[ItemUID]; if (MainGS.Items.ContainsKey(Item.ItemID)) { Struct.ItemData iData = MainGS.Items[Item.ItemID]; int Money = iData.Cost / 3; if (Money > 0) { CSocket.Client.Money += Money; CSocket.Client.Inventory.Remove(Item.UID); CSocket.Send(EudemonPacket.ItemUsage(Item.UID, 255, Struct.ItemUsage.RemoveDropItem)); Database.Database.DeleteItem(Item.UID); CSocket.Send(EudemonPacket.Status(CSocket, 2, CSocket.Client.Money, Struct.StatusTypes.InvMoney)); } } } else { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] You do not have that item..", Struct.ChatType.System)); } }
public static void PickupItem(int UID, ClientSocket CSocket) { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "Pickup: " + UID, Struct.ChatType.Normal)); foreach (Struct.ItemGround IG in MainGS.ItemFloor.Values) { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "Item On Ground: " + IG.UID, Struct.ChatType.Normal)); } if (CSocket.Client.Inventory.Count < 40) { if (MainGS.ItemFloor.ContainsKey(UID)) { Struct.ItemGround IG = MainGS.ItemFloor[UID]; if (IG.X == CSocket.Client.X && IG.Y == CSocket.Client.Y && IG.Map == (int)CSocket.Client.Map) { if (IG.OwnerOnly.Enabled) { //Only able to give the item to its owner, until the timer expires that is, or to his/her team members.. :D int TeamLeaderID = 0; if (CSocket.Client.Team != null) { ClientSocket Leader = MainGS.ClientPool[CSocket.Client.Team.LeaderID]; if (IG.Money > 0) { if (!Leader.Client.Team.ForbidMoney) TeamLeaderID = CSocket.Client.Team.LeaderID; } else { if (!Leader.Client.Team.ForbidItems) TeamLeaderID = CSocket.Client.Team.LeaderID; } } if (IG.OwnerID == CSocket.Client.ID || IG.OwnerID == TeamLeaderID) { IG.Stop(); if (MainGS.ItemFloor.ContainsKey(UID)) { //lock(MainGS.ItemFloor) //{ try { Monitor.Enter(MainGS.ItemFloor); MainGS.ItemFloor.Remove(UID); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Monitor.Exit(MainGS.ItemFloor); } //} } if (IG.Money > 0) { CSocket.Client.Money += IG.Money; CSocket.Send(EudemonPacket.Status(CSocket, 2, CSocket.Client.Money, Struct.StatusTypes.InvMoney)); CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "You picked up " + IG.Money + " silvers!", Struct.ChatType.System)); EudemonPacket.ToLocal(EudemonPacket.RemoveItemDrop(UID), IG.X, IG.Y, IG.Map, 0, 0); return; } EudemonPacket.ToLocal(EudemonPacket.RemoveItemDrop(UID), IG.X, IG.Y, IG.Map, 0, 0); Struct.ItemInfo Item = new Struct.ItemInfo(); Struct.ItemData iData = MainGS.Items[IG.ItemID]; Item.Bless = IG.Bless; Item.Dura = IG.Dura; Item.Enchant = IG.Enchant; Item.ItemID = IG.ItemID; Item.Color = IG.Color; Item.MaxDura = IG.MaxDura; Item.Plus = IG.Plus; Item.Position = (int)Struct.ItemPosition.Invetory; Item.Soc1 = IG.Soc1; Item.Soc2 = IG.Soc2; Item.UID = IG.UID; bool created = Database.Database.NewItem(Item, CSocket); while (!created) { Item.UID = MainGS.Rand.Next(1000, 9999999); created = Database.Database.NewItem(Item, CSocket); } CSocket.Send(EudemonPacket.ItemInfo(Item.UID, Item.ItemID, Item.Plus, Item.Bless, Item.Enchant, Item.Soc1, Item.Soc2, Item.Dura, Item.MaxDura, Item.Position, Item.Color)); CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "You have picked up a(n) " + iData.Name + " off the ground.", Struct.ChatType.System)); if (!CSocket.Client.Inventory.ContainsKey(Item.UID)) CSocket.Client.Inventory.Add(Item.UID, Item); } else { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] That item is not yet yours to pick up.", Struct.ChatType.System)); } } else { IG.Stop(); if (MainGS.ItemFloor.ContainsKey(UID)) { //lock(MainGS.ItemFloor) //{ try { Monitor.Enter(MainGS.ItemFloor); MainGS.ItemFloor.Remove(UID); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Monitor.Exit(MainGS.ItemFloor); } //} } if (IG.Money > 0) { CSocket.Client.Money += IG.Money; CSocket.Send(EudemonPacket.Status(CSocket, 2, CSocket.Client.Money, Struct.StatusTypes.InvMoney)); CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "You picked up " + IG.Money + " silvers!", Struct.ChatType.System)); EudemonPacket.ToLocal(EudemonPacket.RemoveItemDrop(UID), IG.X, IG.Y, IG.Map, 0, 0); return; } EudemonPacket.ToLocal(EudemonPacket.RemoveItemDrop(UID), IG.X, IG.Y, IG.Map, 0, 0); Struct.ItemInfo Item = new Struct.ItemInfo(); Struct.ItemData iData = MainGS.Items[IG.ItemID]; Item.Bless = IG.Bless; Item.Dura = IG.Dura; Item.Enchant = IG.Enchant; Item.ItemID = IG.ItemID; Item.MaxDura = IG.MaxDura; Item.Plus = IG.Plus; Item.Position = IG.Position; Item.Color = IG.Color; Item.Soc1 = IG.Soc1; Item.Soc2 = IG.Soc2; Item.UID = IG.UID; bool created = Database.Database.NewItem(Item, CSocket); while (!created) { Item.UID = MainGS.Rand.Next(1000, 9999999); created = Database.Database.NewItem(Item, CSocket); } Database.Database.NewItem(Item, CSocket); CSocket.Send(EudemonPacket.ItemInfo(Item.UID, Item.ItemID, Item.Plus, Item.Bless, Item.Enchant, Item.Soc1, Item.Soc2, Item.Dura, Item.MaxDura, Item.Position, Item.Color)); CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "You have picked up a(n) " + iData.Name + " off the ground.", Struct.ChatType.System)); if (!CSocket.Client.Inventory.ContainsKey(Item.UID)) CSocket.Client.Inventory.Add(Item.UID, Item); } } else { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] Item is not in range!", Struct.ChatType.System)); } } else { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] Item does not exist in Nano floor.", Struct.ChatType.System)); } } else { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] Your inventory is full.", Struct.ChatType.System)); } }
public static void Chat(byte[] Data, ClientSocket CSocket) { Struct.ChatType Type = (Struct.ChatType)((Data[9] << 8) + Data[8]); int Position = 26; int Len = 0; string From = ""; string To = ""; string Message = ""; for (int C = 0; C < Data[25]; C++) { From += Convert.ToChar(Data[Position]); Position++; } Len = Data[Position]; Position++; for (int C = 0; C < Len; C++) { To += Convert.ToChar(Data[Position]); Position++; } Position++; Len = Data[Position]; Position++; for (int C = 0; C < Len; C++) { Message += Convert.ToChar(Data[Position]); Position++; } #region Commands try { if (Message.StartsWith("/")) { string[] Command = Message.Substring(1).Split(' '); switch (Command[0].ToLower()) { case "heal": { CSocket.Send(EudemonPacket.Status(CSocket, Struct.StatusTypes.Hp, CSocket.Client.MaxHP)); CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[GameServer] Healed " + CSocket.Client.Name, Struct.ChatType.System)); break; } case "bp": { Calculation.BP(CSocket.Client); CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[Info] Current BP " + CSocket.Client.BP, Struct.ChatType.System)); break; } case "dc": { CSocket.Disconnect(); break; } case "dl": { int type = Convert.ToInt16(Command[1]); CSocket.Send(EudemonPacket.General(CSocket.Client.ID, CSocket.Client.X, CSocket.Client.Y, CSocket.Client.Direction, Struct.DataType.Dialog, type)); break; } case "pos": { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[GameServer] Current Pos " + CSocket.Client.X + ", " + CSocket.Client.Y, Struct.ChatType.System)); break; } case "unstuck": { Handler.Teleport((int)Struct.Maps.Cronus, 290, 424, 0, CSocket); break; } case "stattest": { CSocket.Send(EudemonPacket.Status(CSocket, Struct.StatusTypes.Hp, 50)); break; } case "kick": { if (CSocket.Client.isGM || CSocket.Client.isPM) { if (Command.Length < 2) { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] Command example: /kick player", Struct.ChatType.Talk)); break; } bool kicked = false; try { Monitor.Enter(MainGS.ClientPool); foreach (KeyValuePair<int, ClientSocket> Player in MainGS.ClientPool) { if (Player.Value.Client.Name.ToLower() == Command[1].ToLower()) { if (Player.Value.Client.isPM && !CSocket.Client.isPM) CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "GMs cannot kick PMs, sorry!", Struct.ChatType.System)); else { EudemonPacket.ToServer(EudemonPacket.Chat(0, "SYSTEM", "ALLUSERS", Player.Value.Client.Name + " has been kicked from the server", Struct.ChatType.CenterGm), 0); Player.Value.Disconnect(); kicked = true; } break; } } } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Monitor.Exit(MainGS.ClientPool); } if (!kicked) { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] Cannot kick player.", Struct.ChatType.Talk)); } } break; } case "ban": { if (CSocket.Client.isPM) { if (Command.Length < 2) { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] Command example: /kick player", Struct.ChatType.Talk)); break; } bool kicked = false; Database.Database.BanPlayer(Command[1]); try { Monitor.Enter(MainGS.ClientPool); foreach (KeyValuePair<int, ClientSocket> Player in MainGS.ClientPool) { if (Player.Value.Client.Name.ToLower() == Command[1].ToLower()) { EudemonPacket.ToServer(EudemonPacket.Chat(0, "SYSTEM", "ALLUSERS", Player.Value.Client.Name + " has been kicked & banned from the server.", Struct.ChatType.CenterGm), 0); Player.Value.Disconnect(); kicked = true; break; } } } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Monitor.Exit(MainGS.ClientPool); } if (!kicked) { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] Cannot ban player.", Struct.ChatType.Talk)); } } break; } case "save": { Database.Database.SaveCharacter(CSocket.Client); CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[GameServer] Saved " + CSocket.Client.Name, Struct.ChatType.System)); break; } case "reload": { if (Command.Length == 2 && CSocket.Client.isGM || CSocket.Client.isPM) { switch (Command[1].ToLower()) { case "portals": { MainGS.Portals.Clear(); Struct.LoadPortals(); break; } case "monsters": { MainGS.BaseMonsters.Clear(); MainGS.MonsterSpawns.Clear(); MainGS.Monsters.Clear(); Struct.LoadMonsters(); break; } case "npcs": { MainGS.Npcs.Clear(); Struct.LoadNpcs(); break; } case "tnpcs": { MainGS.TerrainNpcs.Clear(); Struct.LoadTNpcs(); break; } } } break; } case "scroll": { if (Command.Length == 2) { switch (Command[1].ToLower()) { case "tc": { Handler.Teleport(1002, 438, 377, 0, CSocket); break; } default: { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] Unknown scroll location. Example: /scroll tc", Struct.ChatType.Talk)); break; } } } else { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] /scroll tc", Struct.ChatType.Talk)); } break; } case "i": { if (CSocket.Client.isGM || CSocket.Client.isPM) { if (!CSocket.Client.Invincible) { CSocket.Client.Invincible = true; EudemonPacket.ToLocal(EudemonPacket.Chat(0, "SYSTEM", "ALLUSERS", CSocket.Client.Name + " has just become even more godly..", Struct.ChatType.CenterGm), CSocket.Client.X, CSocket.Client.Y, (int)CSocket.Client.Map, 0, 0); } else { CSocket.Client.Invincible = false; CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "You are no longer flagged as invincible.", Struct.ChatType.System)); } EudemonPacket.ToLocal(EudemonPacket.General(CSocket.Client.ID, CSocket.Client.X, CSocket.Client.Y, CSocket.Client.Direction, Struct.DataType.EntityRemove, 0), CSocket.Client.X, CSocket.Client.Y, (int)CSocket.Client.Map, 0, CSocket.Client.ID); EudemonPacket.ToLocal(EudemonPacket.SpawnCharacter(CSocket), CSocket.Client.X, CSocket.Client.Y, (int)CSocket.Client.Map, 0, 0); } break; } case "money": { if (Command.Length == 2 && CSocket.Client.isPM || CSocket.Client.isGM) { int Money = Convert.ToInt32(Command[1]); CSocket.Client.Money += Money; CSocket.Send(EudemonPacket.Status(CSocket, 2, CSocket.Client.Money, Struct.StatusTypes.InvMoney)); } break; } case "eps": { if (Command.Length == 2 && CSocket.Client.isPM || CSocket.Client.isGM) { int Ep = Convert.ToInt32(Command[1]); CSocket.Client.EPs += Ep; CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "You now have " + CSocket.Client.EPs + " EPs.", Struct.ChatType.System)); CSocket.Send(EudemonPacket.Status(CSocket, 2, CSocket.Client.EPs, Struct.StatusTypes.InvEPoints)); } break; } case "hair": { if (Command.Length == 2) { int Hair = Convert.ToInt32(Command[1]); CSocket.Client.Hair = Hair; CSocket.Send(EudemonPacket.Status(CSocket, 2, CSocket.Client.Hair, Struct.StatusTypes.HairStyle)); } break; } case "dropitem": { if (CSocket.Client.isPM || CSocket.Client.isGM) { if (Calculation.PercentSuccess(30)) { int Level = 137; int Times = 1; if (Calculation.PercentSuccess(15)) { Times = MainGS.Rand.Next(1, 6); } for (int i = 0; i < Times; i++) { int Money = MainGS.Rand.Next(1, 10); if (Calculation.PercentSuccess(90)) Money = MainGS.Rand.Next(2, 240); if (Calculation.PercentSuccess(70)) Money = MainGS.Rand.Next(60, 3000); if (Calculation.PercentSuccess(50)) Money = MainGS.Rand.Next(200, 4000); if (Calculation.PercentSuccess(30)) Money = MainGS.Rand.Next(1000, 30000); if (Calculation.PercentSuccess(100)) Money = MainGS.Rand.Next(2000, 50000); Money = Money / ((138 - Level) * 10); if (Money < 1) Money = 1; Struct.ItemGround IG = new Struct.ItemGround(); IG.Money = Money; if (Money < 10) IG.ItemID = 1090000; else if (Money < 100) IG.ItemID = 1090010; else if (Money < 1000) IG.ItemID = 1090020; else if (Money < 3000) IG.ItemID = 1091000; else if (Money < 10000) IG.ItemID = 1091010; else IG.ItemID = 1091020; IG.UID = MainGS.Rand.Next(1, 1000); while (MainGS.ItemFloor.ContainsKey(IG.UID)) { IG.UID = MainGS.Rand.Next(1, 1000); } IG.X = CSocket.Client.X; IG.Y = CSocket.Client.Y; IG.OwnerOnly = new System.Timers.Timer(); IG.Map = (int)CSocket.Client.Map; IG.Dispose = new System.Timers.Timer(); IG.Dispose.Interval = 60000; IG.Dispose.AutoReset = false; IG.Dispose.Elapsed += delegate { IG.Disappear(); }; IG.Dispose.Start(); MainGS.ItemFloor.Add(IG.UID, IG); EudemonPacket.ToLocal(EudemonPacket.DropItem(IG.UID, IG.ItemID, IG.X, IG.Y), IG.X, IG.Y, IG.Map, 0, 0); } } else { if (Calculation.PercentSuccess(5)) { Struct.ItemGround IG = new Struct.ItemGround(); IG.ItemID = 1088001; IG.X = CSocket.Client.X; IG.Y = CSocket.Client.Y; IG.Map = (int)CSocket.Client.Map; IG.OwnerOnly = new System.Timers.Timer(); IG.UID = MainGS.Rand.Next(1000, 9999999); while (MainGS.ItemFloor.ContainsKey(IG.UID)) { IG.UID = MainGS.Rand.Next(1000, 9999999); } //TODO: UID generation that is better. IG.Dispose.Interval = 10000; IG.Dispose.AutoReset = false; IG.Dispose.Elapsed += delegate { IG.Disappear(); }; IG.Dispose.Start(); MainGS.ItemFloor.Add(IG.UID, IG); EudemonPacket.ToLocal(EudemonPacket.DropItem(IG.UID, IG.ItemID, IG.X, IG.Y), IG.X, IG.Y, IG.Map, 0, 0); } else if (Calculation.PercentSuccess(3)) { Struct.ItemGround IG = new Struct.ItemGround(); IG.ItemID = 1088000; IG.X = CSocket.Client.X; IG.Y = CSocket.Client.Y; IG.Map = (int)CSocket.Client.Map; IG.OwnerOnly = new System.Timers.Timer(); IG.UID = MainGS.Rand.Next(1000, 9999999); while (MainGS.ItemFloor.ContainsKey(IG.UID)) { IG.UID = MainGS.Rand.Next(1000, 9999999); } //TODO: UID generation that is better. IG.Dispose.Interval = 10000; IG.Dispose.AutoReset = false; IG.Dispose.Elapsed += delegate { IG.Disappear(); }; IG.Dispose.Start(); MainGS.ItemFloor.Add(IG.UID, IG); EudemonPacket.ToLocal(EudemonPacket.DropItem(IG.UID, IG.ItemID, IG.X, IG.Y), IG.X, IG.Y, IG.Map, 0, 0); } } } break; } case "bringtome": { if (CSocket.Client.isPM || CSocket.Client.isGM) { if (Command.Length == 2) { ClientSocket Target = null; try { Monitor.Enter(MainGS.ClientPool); foreach (KeyValuePair<int, ClientSocket> Clients in MainGS.ClientPool) { if (Clients.Value.Client.Name == Command[1]) { Target = Clients.Value; break; } } } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Monitor.Exit(MainGS.ClientPool); } if (Target != null) { Handler.Teleport((int)CSocket.Client.Map, CSocket.Client.X, CSocket.Client.Y, 0, Target); Target.Send(EudemonPacket.Chat(0, "SYSTEM", Target.Client.Name, "You have been summoned by " + CSocket.Client.Name, Struct.ChatType.System)); } else { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] Player not found!", Struct.ChatType.System)); } } } break; } case "bringmeto": { if (CSocket.Client.isPM || CSocket.Client.isGM) { if (Command.Length == 2) { ClientSocket Target = null; try { Monitor.Enter(MainGS.ClientPool); foreach (KeyValuePair<int, ClientSocket> Clients in MainGS.ClientPool) { if (Clients.Value.Client.Name == Command[1]) { Target = Clients.Value; break; } } //} } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Monitor.Exit(MainGS.ClientPool); } if (Target != null) { Handler.Teleport((int)Target.Client.Map, Target.Client.X, Target.Client.Y, 0, CSocket); CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "Teleported to " + Target.Client.Name, Struct.ChatType.System)); } else { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] Player not found!", Struct.ChatType.System)); } } } break; } case "bc": { if (CSocket.Client.isPM || CSocket.Client.isGM) { EudemonPacket.ToServer(EudemonPacket.Chat(0, CSocket.Client.Name, "ALLUSERS", Message.Substring(2 + Command[0].Length), Struct.ChatType.NewBroadcast), 0); } break; } case "gm": { if (CSocket.Client.isPM || CSocket.Client.isGM) { EudemonPacket.ToServer(EudemonPacket.Chat(0, CSocket.Client.Name, "ALLUSERS", Message.Substring(2 + Command[0].Length), Struct.ChatType.CenterGm), 0); } break; } case "itemtest": { if (Command.Length == 2) { Struct.ItemInfo NewItem = new Struct.ItemInfo(); NewItem.Bless = 0; NewItem.Dura = 1; NewItem.Enchant = 0; NewItem.ItemID = Convert.ToInt32(Command[1]); NewItem.MaxDura = 1; NewItem.Plus = 0; NewItem.Position = 50; NewItem.Soc1 = 0; NewItem.Soc2 = 0; NewItem.Color = 0; NewItem.UID = MainGS.Rand.Next(1, 9999999); bool created = Database.Database.NewItem(NewItem, CSocket); while (!created) { NewItem.UID = MainGS.Rand.Next(1, 9999999); created = Database.Database.NewItem(NewItem, CSocket); } CSocket.Client.Inventory.Add(NewItem.UID, NewItem); //CSocket.Send(EudemonPacket.ItemInfo(0, Item.Value.ItemID, Item.Value.Plus, Item.Value.Soc1, Item.Value.Soc2, Item.Value.Dura, Item.Value.MaxDura, Item.Value.Position, 0, 0, 6)); CSocket.Send(EudemonPacket.ItemInfo(NewItem.UID, NewItem.ItemID, NewItem.Plus, NewItem.Soc1, NewItem.Soc2, NewItem.Dura, NewItem.MaxDura, NewItem.Position, 0, 0, 0)); // CSocket.Send(EudemonPacket.ItemInfo(NewItem.UID, NewItem.ItemID, NewItem.Plus, NewItem.Bless, NewItem.Enchant, NewItem.Soc1, NewItem.Soc2, NewItem.Dura, NewItem.MaxDura, NewItem.Position, NewItem.Color)); //CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "Created a(n) " + Item.Name + " Plus: " + Plus + ", Bless: " + Bless + ", Enchant: " + Enchant + ", Version: " + version, Struct.ChatType.Top)); } else { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "Error in command", Struct.ChatType.System)); } break; } case "item": { if (CSocket.Client.isPM || CSocket.Client.isGM) { if (Command.Length == 8) { if (CSocket.Client.Inventory.Count == 40) { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] Your inventory is full.", Struct.ChatType.System)); break; } foreach (KeyValuePair<int, Struct.ItemData> Items in MainGS.Items) { Struct.ItemData Item = Items.Value; if (Item.Name.ToLower() == Command[1].ToLower()) { int version = Convert.ToInt32(Command[2]); int NewItemID = Item.ID; int Plus = Convert.ToInt32(Command[4]); int Bless = Convert.ToInt32(Command[5]); int Enchant = Convert.ToInt32(Command[6]); int Soc1 = 0; int Soc2 = 0; int Color = Convert.ToInt32(Command[7]); if ((Convert.ToInt32(Command[3])) == 1) { Soc1 = 255; } else if ((Convert.ToInt32(Command[3])) == 2) { Soc1 = 255; Soc2 = 255; } else if ((Convert.ToInt32(Command[3])) == 0) { Soc1 = 0; Soc2 = 0; } if (Color < 2 || Color > 9) if (Bless != 1 && Bless != 3 && Bless != 5 && Bless != 7 && Bless != 0) { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] " + Bless + " is an invalid bless amount. Accepted amounts are 0/1/3/5/7.", Struct.ChatType.System)); break; } if (Enchant > 255 || Enchant < 0) { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] " + Enchant + " is an invalid enchant amount. Accepted amounts are 255>x>0.", Struct.ChatType.System)); break; } if (Plus > 12 || Plus < 0) { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] " + Plus + " is an invalid plus amount. Accepted amounts are 12>x>0.", Struct.ChatType.System)); break; } string ItemID = Item.ID.ToString(); if (ItemID.EndsWith("0")) NewItemID += 3; #region Version Switch switch (version) { case 3: { //the default item break; } case 4: { NewItemID += 1; break; } case 5: { NewItemID += 2; break; } case 6: { NewItemID += 3; break; } case 7: { NewItemID += 4; break; } case 8: { NewItemID += 5; break; } case 9: { NewItemID += 6; break; } case 13: { NewItemID += 10; break; } case 14: { NewItemID += 11; break; } case 15: { NewItemID += 12; break; } case 16: { NewItemID += 13; break; } case 17: { NewItemID += 14; break; } case 18: { NewItemID += 15; break; } case 19: { NewItemID += 16; break; } case 23: { NewItemID += 20; break; } case 24: { NewItemID += 21; break; } case 25: { NewItemID += 22; break; } case 26: { NewItemID += 23; break; } case 27: { NewItemID += 24; break; } case 28: { NewItemID += 25; break; } case 29: { NewItemID += 26; break; } case 33: { NewItemID += 30; break; } case 34: { NewItemID += 31; break; } case 35: { NewItemID += 32; break; } case 36: { NewItemID += 33; break; } case 37: { NewItemID += 34; break; } case 38: { NewItemID += 35; break; } case 39: { NewItemID += 36; break; } case 43: { NewItemID += 40; break; } case 44: { NewItemID += 41; break; } case 45: { NewItemID += 42; break; } case 46: { NewItemID += 43; break; } case 47: { NewItemID += 44; break; } case 48: { NewItemID += 45; break; } case 49: { NewItemID += 46; break; } case 53: { NewItemID += 50; break; } case 54: { NewItemID += 51; break; } case 55: { NewItemID += 52; break; } case 56: { NewItemID += 53; break; } case 57: { NewItemID += 54; break; } case 58: { NewItemID += 55; break; } case 59: { NewItemID += 56; break; } case 63: { NewItemID += 60; break; } case 64: { NewItemID += 61; break; } case 65: { NewItemID += 62; break; } case 66: { NewItemID += 63; break; } case 67: { NewItemID += 64; break; } case 68: { NewItemID += 65; break; } case 69: { NewItemID += 66; break; } case 73: { NewItemID += 70; break; } case 74: { NewItemID += 71; break; } case 75: { NewItemID += 72; break; } case 76: { NewItemID += 73; break; } case 77: { NewItemID += 74; break; } case 78: { NewItemID += 75; break; } case 79: { NewItemID += 76; break; } case 83: { NewItemID += 80; break; } case 84: { NewItemID += 81; break; } case 85: { NewItemID += 82; break; } case 86: { NewItemID += 83; break; } case 87: { NewItemID += 84; break; } case 88: { NewItemID += 85; break; } case 89: { NewItemID += 86; break; } case 93: { NewItemID += 90; break; } case 94: { NewItemID += 91; break; } case 95: { NewItemID += 92; break; } case 96: { NewItemID += 93; break; } case 97: { NewItemID += 94; break; } case 98: { NewItemID += 95; break; } case 99: { NewItemID += 96; break; } case 103: { NewItemID += 100; break; } case 104: { NewItemID += 101; break; } case 105: { NewItemID += 102; break; } case 106: { NewItemID += 103; break; } case 107: { NewItemID += 104; break; } case 108: { NewItemID += 105; break; } case 109: { NewItemID += 106; break; } case 113: { NewItemID += 110; break; } case 114: { NewItemID += 111; break; } case 115: { NewItemID += 112; break; } case 116: { NewItemID += 113; break; } case 117: { NewItemID += 114; break; } case 118: { NewItemID += 115; break; } case 119: { NewItemID += 116; break; } default: { //Do nothing break; } } #endregion Struct.ItemInfo NewItem = new Struct.ItemInfo(); NewItem.Bless = Bless; NewItem.Dura = Item.MaxDura; NewItem.Enchant = Enchant; NewItem.ItemID = NewItemID; NewItem.MaxDura = Item.MaxDura; NewItem.Plus = Plus; NewItem.Position = 0; NewItem.Soc1 = Soc1; NewItem.Soc2 = Soc2; NewItem.Color = Color; NewItem.UID = MainGS.Rand.Next(1, 9999999); bool created = Database.Database.NewItem(NewItem, CSocket); while (!created) { NewItem.UID = MainGS.Rand.Next(1, 9999999); created = Database.Database.NewItem(NewItem, CSocket); } CSocket.Client.Inventory.Add(NewItem.UID, NewItem); CSocket.Send(EudemonPacket.ItemInfo(NewItem.UID, NewItem.ItemID, NewItem.Plus, NewItem.Bless, NewItem.Enchant, NewItem.Soc1, NewItem.Soc2, NewItem.Dura, NewItem.MaxDura, NewItem.Position, NewItem.Color)); CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "Created a(n) " + Item.Name + " Plus: " + Plus + ", Bless: " + Bless + ", Enchant: " + Enchant + ", Version: " + version, Struct.ChatType.System)); break; } } } } break; } case "effect": { if (CSocket.Client.isPM || CSocket.Client.isGM) { if (Command.Length == 2) { EudemonPacket.ToLocal(EudemonPacket.Effect(CSocket.Client.ID, Command[1]), CSocket.Client.X, CSocket.Client.Y, (int)CSocket.Client.Map, 0, 0); } } break; } case "modify": { if (CSocket.Client.isPM || CSocket.Client.isGM) { if (Command.Length > 2) { switch (Command[1].ToLower()) { case "name": { //TODO:Modify name and other's name's. break; } case "level": { if (Command.Length == 3) { int NewLevel = Convert.ToInt32(Command[2]); if (NewLevel <= 135) { CSocket.Client.Level = NewLevel; CSocket.Client.Exp = 0; CSocket.Send(EudemonPacket.Status(CSocket, 2, CSocket.Client.Level, Struct.StatusTypes.Level)); EudemonPacket.ToLocal(EudemonPacket.Effect(CSocket.Client.ID, "LevelUp"), CSocket.Client.X, CSocket.Client.Y, (int)CSocket.Client.Map, 0, 0); if (CSocket.Client.Level == 135) EudemonPacket.ToServer(EudemonPacket.Chat(0, "SYSTEM", "ALLUSERS", "CONGRATULATIONS! " + CSocket.Client.Name + " has just achieved level 135! Great job!", Struct.ChatType.NewBroadcast), 0); } } break; } case "dex": { if (Command.Length == 3) { int Dex = Convert.ToInt32(Command[2]); CSocket.Client.Dexterity = Dex; CSocket.Send(EudemonPacket.Status(CSocket, 2, CSocket.Client.Dexterity, Struct.StatusTypes.DexterityStatPoints)); Calculation.Vitals(CSocket, false); } break; } case "vit": { if (Command.Length == 3) { int Vit = Convert.ToInt32(Command[2]); CSocket.Client.Vitality = Vit; CSocket.Send(EudemonPacket.Status(CSocket, 2, CSocket.Client.Vitality, Struct.StatusTypes.VitalityStatPoints)); Calculation.Vitals(CSocket, false); } break; } } } } break; } case "skill": { if (CSocket.Client.isPM || CSocket.Client.isGM) { if (Command.Length == 3) { int ID = Convert.ToInt32(Command[1]); int Level = Convert.ToInt32(Command[2]); if (CSocket.Client.Skills.ContainsKey(ID)) { Struct.CharSkill Skill = CSocket.Client.Skills[ID]; Skill.Level = Level; Skill.Exp = 0; Database.Database.SetSkill(Skill.ID, Skill.Level, Skill.Exp, CSocket.Client.ID, true); } else { Struct.CharSkill Skill = new Struct.CharSkill(); Skill.Level = Level; Skill.ID = ID; CSocket.Client.Skills.Add(Skill.ID, Skill); Database.Database.SetSkill(ID, Level, 0, CSocket.Client.ID, false); } CSocket.Send(EudemonPacket.Skill(ID, Level, 0)); } else { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] /skill ID Level.", Struct.ChatType.Talk)); } } break; } case "status": { if (CSocket.Client.isPM || CSocket.Client.isGM) { CSocket.Send(EudemonPacket.Chat(0, "", "", "", Struct.ChatType.ClearTopRight)); CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "Players online: " + MainGS.ClientPool.Count, Struct.ChatType.TopRight)); CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "Monsters spawned: " + MainGS.Monsters.Count, Struct.ChatType.TopRight)); CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "Exp/Prof/Skill Rates: " + MainGS.EXP_MULTIPLER + "/" + MainGS.PROF_MULTIPLER + "/" + MainGS.SKILL_MULTIPLER, Struct.ChatType.TopRight)); } break; } /*case "tnpc": { if(CSocket.Client.isPM) { if(Command.Length == 4) { int ID = Convert.ToInt32(Command[1]); int TType = Convert.ToInt32(Command[2]); int Flag = Convert.ToInt32(Command[3]); CSocket.Send(EudemonPacket.TerrainNPC(ID, 100, 100, CSocket.Client.X, CSocket.Client.Y, TType, Flag)); } } break; }*/ /*case "killallmobs": { if(CSocket.Client.isPM) { Dictionary<int, Monster> Mobs = new Dictionary<int, Monster>(); foreach(KeyValuePair<int, Monster> Mon in MainGS.Monsters) { Mobs.Add(Mon.Key, Mon.Value); } MainGS.Monsters.Clear(); foreach(KeyValuePair<int, Monster> Mon in Mobs) { Handler.doMonster(Mon.Value, Mon.Value.CurrentHP, 2, CSocket); } } break; }*/ case "gmove": { if (Command.Length == 4) { Handler.Teleport(Convert.ToInt32(Command[1]), Convert.ToUInt16(Command[2]), Convert.ToUInt16(Command[3]), 0, CSocket); } break; } } } #endregion #region Chats else { switch (Type) { case Struct.ChatType.Talk: { EudemonPacket.ToLocal(EudemonPacket.Chat(0, CSocket.Client.Name, To, Message, Type), CSocket.Client.X, CSocket.Client.Y, (int)CSocket.Client.Map, 0, CSocket.Client.ID); break; } case Struct.ChatType.Team: { if (CSocket.Client.Team != null) { if (MainGS.ClientPool.ContainsKey(CSocket.Client.Team.LeaderID)) { ClientSocket Leader = MainGS.ClientPool[CSocket.Client.Team.LeaderID]; foreach (KeyValuePair<int, ClientSocket> Member in Leader.Client.Team.Members) { if (Member.Value.Client.ID != CSocket.Client.ID) Member.Value.Send(EudemonPacket.Chat(0, CSocket.Client.Name, To, Message, Type)); } } } break; } case Struct.ChatType.Ghost: { EudemonPacket.ToLocal(EudemonPacket.Chat(0, CSocket.Client.Name, To, Message, Type), CSocket.Client.X, CSocket.Client.Y, (int)CSocket.Client.Map, 0, CSocket.Client.ID); break; } case Struct.ChatType.Whisper: { bool online = false; //lock(MainGS.ClientPool) //{ try { Monitor.Enter(MainGS.ClientPool); foreach (KeyValuePair<int, ClientSocket> Player in MainGS.ClientPool) { if (Player.Value.Client.Name == To) { Player.Value.Send(EudemonPacket.Chat(0, CSocket.Client.Name, To, Message, Type)); online = true; break; } } //} } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Monitor.Exit(MainGS.ClientPool); } //} if (!online) CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", "ALLUSERS", "[ERROR] Player not found.", Struct.ChatType.Talk)); break; } case Struct.ChatType.Friend: { EudemonPacket.ToServer(EudemonPacket.Chat(0, From, To, Message, Struct.ChatType.Friend), CSocket.Client.ID); break; } default: { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] Chat type not coded.", Struct.ChatType.Talk)); break; } } } #endregion } catch (Exception Except) { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] Please report: Exception thrown during command parsing/message handling.", Struct.ChatType.System)); Console.WriteLine(Except.ToString()); } }
public static void ItemBuy(byte[] Data, ClientSocket CSocket) { int ID = PacketProcessor.ReadLong(Data, 8); if (CSocket.Client.Inventory.Count == 40) { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] Your inventory is full.", Struct.ChatType.System)); return; } string Shop = System.IO.File.ReadAllText("Shop.dat"); if (itemexist(Convert.ToString(ID), Shop)) { Struct.ItemInfo Item = new Struct.ItemInfo(); if (MainGS.Items.ContainsKey(ID)) { Struct.ItemData NewItem = MainGS.Items[ID]; if (NewItem.EPCost > 0) { if (CSocket.Client.EPs >= NewItem.EPCost) { Handler.CPs(NewItem.EPCost * -1, CSocket); Item.ItemID = NewItem.ID; Item.UID = MainGS.Rand.Next(1, 9999999); bool created = Database.Database.NewItem(Item, CSocket); while (!created) { Item.UID = MainGS.Rand.Next(1, 9999999); created = Database.Database.NewItem(Item, CSocket); } CSocket.Client.Inventory.Add(Item.UID, Item); CSocket.Send(EudemonPacket.ItemInfo(Item.UID, Item.ItemID, 0, 0, 0, 0, 0, 0, 0, 0, 0)); } else { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] You do not have enough EPs.", Struct.ChatType.System)); } } else if (NewItem.Cost > 0) { if (CSocket.Client.Money >= NewItem.Cost) { Handler.Money(NewItem.Cost * -1, CSocket); Item.ItemID = NewItem.ID; Item.UID = MainGS.Rand.Next(1, 9999999); bool created = Database.Database.NewItem(Item, CSocket); while (!created) { Item.UID = MainGS.Rand.Next(1, 9999999); created = Database.Database.NewItem(Item, CSocket); } CSocket.Client.Inventory.Add(Item.UID, Item); CSocket.Send(EudemonPacket.ItemInfo(Item.UID, Item.ItemID, 0, 0, 0, 0, 0, 0, 0, 0, 0)); } else { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] You do not have enough money.", Struct.ChatType.System)); } } else { Item.ItemID = NewItem.ID; Item.UID = MainGS.Rand.Next(1, 9999999); bool created = Database.Database.NewItem(Item, CSocket); while (!created) { Item.UID = MainGS.Rand.Next(1, 9999999); created = Database.Database.NewItem(Item, CSocket); } CSocket.Client.Inventory.Add(Item.UID, Item); CSocket.Send(EudemonPacket.ItemInfo(Item.UID, Item.ItemID, 0, 0, 0, 0, 0, 0, 0, 0, 0)); } } } else { CSocket.Send(EudemonPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "[ERROR] Item does not exist in Shop.dat", Struct.ChatType.System)); } }