public static void InitDialog(World.Network.WorldClient client, string packet) { if (!client.Action.IsOccuped) { Database.Records.NpcPositionRecord Npc = client.Character.Map.Engine.GetNpc(int.Parse(packet.Substring(2))); if (Npc != null) { Database.Records.NpcDialogRecord Dialog = Helper.NpcHelper.GetDialog(Npc.Template.InitQuestion); if (Dialog != null) { client.State = Network.WorldClientState.OnDialog; client.Send("DCK" + int.Parse(packet.Substring(2))); client.Send("DQ" + Dialog.ID + "|" + Dialog.Responses.Replace(",", ";")); } else { client.Send("BN"); } } else { client.Send("BN"); } } else { client.Send("BN"); } }
public static void CreateGuildRequest(World.Network.WorldClient client, string packet) { string[] data = packet.Substring(2).Split('|'); //Guild creator request pattern : gC8|16777215|8|8796216|Nightteam int backArtID = int.Parse(data[0]); int backColor = int.Parse(data[1]); int frontArtID = int.Parse(data[2]); int frontColor = int.Parse(data[3]); Game.Guilds.GuildEmblem emblem = new Game.Guilds.GuildEmblem(backArtID, backColor, frontArtID, frontColor); string guildName = data[4]; if (!Helper.GuildHelper.ExistGuild(guildName.ToLower())) { Game.Guilds.Guild guild = new Game.Guilds.Guild(1, guildName, emblem); guild.AddMember(client); client.Action.GuildMember.Rank = Game.Guilds.GuildRank.Leader; client.Action.GuildMember.AllowFullRight(); } else // Guild already exist { client.Action.SystemMessage("Ce nom de guilde existe deja !"); client.Send("gV"); } client.Send("gV"); }
public void HandleMoveItem(World.Network.WorldClient client, string packet) { //EMO+59|1|10000 string data = packet.Substring(4); char typeMove = packet[3]; string[] itemsInfos = data.Split('|'); var itemID = int.Parse(itemsInfos[0]); var quantity = int.Parse(itemsInfos[1]); switch (typeMove) { case '+': var price = int.Parse(itemsInfos[2]); if (client.Character.Items.HaveItemID(itemID)) { var item = client.Character.Items.GetItem(itemID); if (item != null) { if (quantity > 0 && item.Quantity >= quantity) { var ahi = new Database.Records.AuctionHouseItemRecord() { Owner = client.Account.ID, AuctionID = this.ID, ItemID = item.Template, Quantity = quantity, SellPrice = price, StartTime = 0, Stats = item.Engine.StringEffect(), }; Database.Cache.AuctionHouseItemsCache.Cache.Add(ahi); ahi.SaveAndFlush(); client.Character.Items.RemoveItem(item, quantity); client.Send("EmK+" + ahi.ToEML()); } } } break; case '-': var ahItem = this.GetItemForOwner(client.Account.ID).FirstOrDefault(x => x.ID == itemID); var genItem = World.Helper.ItemHelper.GenerateItem(ahItem.ItemID); genItem.Engine.Load(ahItem.Stats, genItem.GetTemplate.WeaponInfo); genItem.Owner = client.Character.ID; client.Character.AddItem(genItem, ahItem.Quantity); client.Send("EmK-" + ahItem.ID); Database.Cache.AuctionHouseItemsCache.Cache.Remove(ahItem); ahItem.DeleteAndFlush(); break; } }
public void ShowMap(World.Network.WorldClient client) { if (Map.DecryptKey != "") { client.Send(new StringBuilder("GDM|").Append(Map.ID) .Append("|").Append(Map.CreateTime).Append("|").Append(Map.DecryptKey).ToString()); } else { client.Send(new StringBuilder("GDM|").Append(Map.ID) .Append("|").Append(Map.CreateTime).ToString()); } }
public static void AddFriend(World.Network.WorldClient client, string packet) { string addType = packet[2].ToString(); string nickname; Network.WorldClient player; switch (addType) { case "%": //Character name nickname = packet.Substring(3); player = Helper.WorldHelper.GetClientByCharacter(nickname); if (player != null) { client.AccountData.FriendsIDs.Add(player.AccountData.AccountID); } else { client.Send("cMEf" + nickname); } break; case "*": nickname = packet.Substring(3); player = Helper.WorldHelper.GetClientByCharacter(nickname); if (player != null) { client.AccountData.FriendsIDs.Add(player.AccountData.AccountID); } else { client.Send("cMEf" + nickname); } break; default: nickname = packet.Substring(2); player = Helper.WorldHelper.GetClientByCharacter(nickname); if (player != null) { client.AccountData.FriendsIDs.Add(player.AccountData.AccountID); client.Send("BN"); } else { client.Send("cMEf" + nickname); } break; } }
public void ShowPlayers(World.Network.WorldClient client) { string packet = "GM"; CharactersOnMap.ForEach(x => packet += "|+" + x.Character.Pattern.ShowCharacterOnMap); client.Send(packet); }
public void HandleMoveKamas(World.Network.WorldClient client, string packet) { var kamas = 0; if (packet[0] == '-')//From bag { kamas = int.Parse(packet.Substring(1)); if (this.Kamas >= kamas)//Anti-Cheat security { client.Character.Kamas += kamas; this.Kamas -= kamas; } } else//From character/entity { kamas = int.Parse(packet); if (client.Character.Kamas >= kamas)//Anti-Cheat security { client.Character.Kamas -= kamas; this.Kamas += kamas; } } this.Record.kamas = this.Kamas; this.Save(); client.Send("ESKG" + this.Kamas); client.Character.Stats.RefreshStats(); }
public void AddExp(int exp, World.Network.WorldClient client = null) { try { //Only add exp if is needed if (this.Level < 100 && this.Level > 0) { this.Experience += exp; var possibleNextLevel = Helper.ExpFloorHelper.GetJobFloorExp(this.Experience); if (possibleNextLevel != null) { if (possibleNextLevel.ID != this.LevelFloor.ID) { this.Level = possibleNextLevel.ID; if (client != null) { client.Send("JN" + this.JobID + "|" + this.Level); } } } this.SendJob(client); } } catch (Exception e) { Utilities.ConsoleStyle.Error("Can't add exp to the job : " + e.ToString()); } }
public static void ShowFriends(World.Network.WorldClient client, string packet = "") { string friendPacket = "FL"; foreach (int i in client.AccountData.FriendsIDs) { if (Helper.AccountHelper.ExistAccountData(i)) { Database.Records.AccountDataRecord account = Helper.AccountHelper.GetAccountData(i); friendPacket += "|" + account.NickName; World.Network.WorldClient player = Helper.WorldHelper.GetClientByAccountNickName(account.NickName); if (player != null) { if (player.AccountData.FriendsIDs.Contains(client.AccountData.AccountID)) { friendPacket += player.Character.Pattern.CharacterToFriendsListKnow; } else { friendPacket += player.Character.Pattern.CharacterToFriendsListUnKnow; } } } } client.Send(friendPacket); }
public static void OpenZaapPanel(World.Network.WorldClient client) { StringBuilder packet = new StringBuilder("WC" + client.Character.SaveMap + "|"); client.Character.Zaaps.ForEach(x => packet.Append(x + ";" + GetPriceOfTravel(client.Character.MapID, x) + "|")); client.Send(packet.ToString().Substring(0, packet.ToString().Length - 1)); }
public static void DropItem(World.Network.WorldClient client, string packet) { if (!Utilities.ConfigurationManager.GetBoolValue("EnableDropItems")) { client.Action.SystemMessage("Impossible de jeter des objets sur ce serveur, la fonction n'est pas activer !"); return; } string[] data = packet.Substring(2).Split('|'); int id = int.Parse(data[0]); int quantity = int.Parse(data[1]); if (client.Character.Map.Engine.GetDroppedItem(client.Character.CellID) == null) { Database.Records.WorldItemRecord playerItem = client.Character.Items.GetItem(id); if (playerItem != null) { if (quantity == playerItem.Quantity) { int itemPos = playerItem.Position; playerItem.Position = -1; //Delete the item if (itemPos != -1) { playerItem.Engine.Effects.ForEach(x => client.Character.Stats.ApplyEffect(x, true)); client.Action.RefreshCharacter(); client.Character.Stats.RefreshStats(); client.Action.RefreshRoleplayEntity(); client.Action.RefreshPods(); } client.Character.Items.RemoveItem(playerItem, playerItem.Quantity, false); client.Character.Map.Engine.AddNewDroppedItem(playerItem, client.Character.CellID); } else if (quantity < playerItem.Quantity) { //Remove quantity and create another object stack Database.Records.WorldItemRecord duplicatedItem = new Database.Records.WorldItemRecord() { Template = playerItem.Template, Quantity = quantity, Effects = playerItem.Effects, Position = -1, }; duplicatedItem.Engine.Load(duplicatedItem.Effects, duplicatedItem.GetTemplate.WeaponInfo); client.Character.Items.RemoveItem(playerItem, quantity); client.Character.Map.Engine.AddNewDroppedItem(duplicatedItem, client.Character.CellID); } client.Character.RefreshItemSet(); client.Action.RefreshCharacterJob(true); } } else { client.Send("BN"); } }
public static void SendOperatorOnline(World.Network.WorldClient client) { var packet = new StringBuilder("100MJ|"); var names = new List <string>(); World.Helper.WorldHelper.GetClientsArray.ToList().ForEach(x => names.Add(x.Character.Nickname)); packet.Append(string.Join("|", names)); names.Clear(); client.Send(packet.ToString()); }
public void ShowMonstersGroup(World.Network.WorldClient client) { try { this.Spawner.GroupsOnMap.ForEach(x => client.Send("GM" + x.CatchedPattern)); } catch (Exception e) { Utilities.ConsoleStyle.Error("Can't show fights : " + e.ToString()); } }
public static void HandleEmoteRequest(World.Network.WorldClient client, string packet) { var emoteID = int.Parse(packet.Substring(2)); switch (emoteID) { case 1: //Sit client.Action.StartAutoRegen(); break; } client.Send("eUK" + client.Character.ID + "|" + emoteID); }
public void ShowIO(World.Network.WorldClient client) { if (!Program.ARKALIA) { var packet = new StringBuilder(); foreach (var io in this.InteractiveObjects) { packet.Append(io.Value.GetPattern()).Append("\x00"); } client.Send(packet.ToString()); } }
public void SendJobTool(World.Network.WorldClient client) { if (client.Character.Items.GetItemAtPos(1) != null) { var item = client.Character.Items.GetItemAtPos(1); if (this.Tools.Contains(item.Template)) { var packet = new StringBuilder("OT"); packet.Append(this.JobID); client.Send(packet.ToString()); } } }
public void ShowPanel(World.Network.WorldClient client) { client.Action.CurrentAuctionHouse = this; var packet = new StringBuilder("ECK11|"); packet.Append("1,10,100;") .Append(this.GetStrTypeFromType()) .Append(";").Append("500").Append(";") .Append(this.ItemLevelLimit) .Append(";") .Append(this.ItemLimit) .Append(";-1;").Append("2000000"); client.Send(packet.ToString()); }
public void ShowFightListInfos(World.Network.WorldClient client) { string packet = "fL"; foreach (World.Game.Fights.Fight fight in FightsOnMap) { if (packet.Length > 2) { packet += "|"; } packet += fight.DisplayFightInformations; } client.Send(packet); }
public static void CancelInvitation(World.Network.WorldClient client) { if (client != null) { if (client.Action.InvitedGuildPlayer != -1) { var otherPlayer = World.Helper.WorldHelper.GetClientByCharacter(client.Action.InvitedGuildPlayer); if (otherPlayer != null) { otherPlayer.Send("gJEc"); otherPlayer.Action.InvitedGuildPlayer = -1; } client.Send("gJEc"); client.Action.InvitedGuildPlayer = -1; } } }
public void SendJobSkill(World.Network.WorldClient client) { var packet = new StringBuilder("JS"); packet.Append("|").Append(this.JobID).Append(";"); var skills = ""; foreach (var s in this.Skills.FindAll(x => x.Level <= this.Level)) { if (skills != "") { skills += ","; } skills += s.ToJS(); } packet.Append(skills); client.Send(packet.ToString()); }
public static void RequestInviteMember(World.Network.WorldClient client, string packet) { // On verifie si il a une guilde et qu'il n'invite déjà personne if (client.Action.Guild != null && client.Action.InvitedGuildPlayer == -1) { if (client.Action.GuildMember != null) { if (client.Action.GuildMember.HaveRight(Game.Guilds.GuildRightsConstants.CAN_INVITE)) { var invitedPlayer = World.Helper.WorldHelper.GetClientByCharacter(packet.Substring(3)); //On verifie si le joueur voulus est connecter if (invitedPlayer != null) { //Si il a pas de guilde on lui envois la demande if (invitedPlayer.Action.Guild == null) { client.Send("gJR" + invitedPlayer.Character.Nickname); invitedPlayer.Send("gJr" + client.Character.ID + "|" + client.Character.Nickname + "|" + client.Action.Guild.Name); //On initialise les ID des demandes client.Action.InvitedGuildPlayer = invitedPlayer.Character.ID; invitedPlayer.Action.InvitedGuildPlayer = client.Character.ID; } else { client.Action.SystemMessage("Ce joueur possede deja une guilde !"); } } } else { client.Action.SystemMessage("Vous ne disposer pas des droits requis !"); } } else { client.Action.SystemMessage("Joueur introuvable !"); } } else { client.Action.SystemMessage("Vous devez posseder une guilde pour effectuer cette action !"); } }
public void HandleMoveItem(World.Network.WorldClient client, string packet) { try { var mode = packet[3]; var id = int.Parse(packet.Substring(4).Split('|')[0]); var quantity = int.Parse(packet.Substring(4).Split('|')[1]); if (mode == '+') { var item = client.Character.Items.GetItem(id); if (item.Quantity >= quantity) { item.Quantity -= quantity; if (item.Quantity == 0) { client.Character.Items.RemoveItem(item, quantity, false); item.Owner = -1; item.SaveAndFlush(); } else { client.Send("OQ" + item.ID + "|" + item.Quantity); } this.Add(item, quantity); } } else { //TODO: Remove items } } catch (Exception e) { Utilities.ConsoleStyle.Error("Can't handle move item : " + e.ToString()); } finally { this.Save(); } }
public void ShowPaddocks(World.Network.WorldClient client) { foreach (var paddock in this.Paddocks) { string packet = "Rp"; if (paddock.IsPublic) { packet += "-1;"; packet += "0;"; packet += paddock.Capacity + ";"; packet += "0;"; } else { packet += paddock.Owner + ";"; packet += paddock.Cost + ";"; packet += paddock.Capacity + ";"; packet += "0;"; } client.Send(packet); } }
public void ShowNpcsOnMap(World.Network.WorldClient client) { try { string globalPattern = "GM"; foreach (var npc in Npcs) { try { globalPattern += npc.Patterns.DisplayOnMap; } catch (Exception e) { } } client.Send(globalPattern); } catch (Exception e) { Utilities.ConsoleStyle.Error("Can't show npc : " + e.ToString()); } }
public static void ShowPaddocksMountData(World.Network.WorldClient client) { StringBuilder packet = new StringBuilder("ECK16|"); List <string> data = new List <string>(); List <Database.Records.WorldMountRecord> mounts = Helper.PaddockHelper.GetMountForOwner(client.Character.ID); foreach (var m in mounts) { if (m.ScrollID == 0) { if (client.Character.Mount != null) { if (client.Character.Mount.ID == m.ID) { continue; } } data.Add(m.GetMountData); } } packet.Append(string.Join(";", data)); client.Send(packet.ToString()); }
public void SendJobInfos(World.Network.WorldClient client) { var packet = "JX|" + this.JobID + ";" + this.Level + ";"; if (this.LevelFloor != null) { packet += this.LevelFloor.Job; } else { packet += this.Experience; } packet += ";" + this.Experience + ";"; if (this.NextLevelFloor != null) { packet += this.NextLevelFloor.Job; } else { packet += this.Experience; } packet += ";"; client.Send(packet); }
public static void ExitDialog(World.Network.WorldClient client, string packet = "") { client.State = Network.WorldClientState.None; client.Send("DV"); }
public static void GuildKick(World.Network.WorldClient client, string packet) { if (client.Action.Guild != null && client.Action.GuildMember != null) { string nickname = packet.Substring(2); Game.Guilds.GuildMember guildMember = client.Action.Guild.FindMember(nickname); var guild = guildMember.OwnGuild; if (guildMember != null) { if (guildMember.Rank == Game.Guilds.GuildRank.Leader) { if (guildMember.Character.ID == client.Character.ID) { if (guild.Members.Count > 1) { client.Action.Guild.KickMember(guildMember); client.Send("gKK" + client.Character.Nickname + "|" + client.Character.Nickname); client.Action.Guild = null; client.Action.GuildMember = null; client.Action.RefreshRoleplayEntity(); guild.Delete(); } else { client.Action.SystemMessage("Selectionner avant un nouveau meneur !"); } return; } else { client.Action.SystemMessage("Impossible de bannir le joueur"); return; } } /* Si il s'auto-kick */ if (guildMember.ID == client.Action.GuildMember.ID) { client.Action.Guild.KickMember(guildMember); client.Send("gKK" + client.Character.Nickname + "|" + client.Character.Nickname); client.Action.Guild = null; client.Action.GuildMember = null; client.Action.RefreshRoleplayEntity(); } else /* Il kick un autre joueur que sois même */ { if (client.Action.GuildMember.HaveRight(Game.Guilds.GuildRightsConstants.CAN_KICK)) { client.Action.Guild.KickMember(guildMember); Network.WorldClient kickedClient = World.Helper.WorldHelper.GetClientByCharacter(nickname); if (kickedClient != null) { kickedClient.Send("gKK" + kickedClient.Character.Nickname + "|" + kickedClient.Character.Nickname); kickedClient.Action.Guild = null; kickedClient.Action.GuildMember = null; kickedClient.Action.RefreshRoleplayEntity(); } } else { client.Action.SystemMessage("Impossible de bannir le joueur : Vous ne posseder pas le droit"); } } } else { client.Action.SystemMessage("Le joueur n'existe pas, ou ne fait pas partie de la guilde !"); } } else { client.Action.SystemMessage("Vous devez posseder une guilde pour effectuer cette action !"); } }
public void ExecuteWithClientArg(ScriptArgs args, World.Network.WorldClient client, params object[] parameters) { try { switch (args.Args[0]) { case "player": switch (args.Args[1]) { case "goto": World.Network.World.GoToMap(client, args.GetIntValue(2), args.GetIntValue(3)); break; case "respawn": World.Network.World.GoToMap(client, client.Character.SaveMap, client.Character.SaveCell); break; case "dialog": switch (args.Args[2]) { case "start": //TODO! break; } break; case "life": switch (args.Args[2]) { case "restore": client.Action.Regen(int.Parse(args.Args[3])); break; } break; case "message": client.Action.SystemMessage(args.GetStringValue(2)); break; case "align": switch (args.Args[2]) { case "set": if (client.Character.Fighter == null) { client.Character.Faction.SetAlign(int.Parse(args.Args[3])); } else { client.Action.SystemMessage("Impossible en combat !"); } break; } break; case "need": switch (args.Args[2]) { case "mj": if (client.Account.AdminLevel < int.Parse(args.Args[3])) { client.Action.SystemMessage("Vous ne posseder pas les conditions requises !"); return; } break; } break; case "look": switch (args.Args[2]) { case "set": client.Character.Look = int.Parse(args.Args[3]); client.Action.RefreshRoleplayEntity(); break; case "normal": break; } break; case "scale": switch (args.Args[2]) { case "set": client.Character.Scal = int.Parse(args.Args[3]); client.Action.RefreshRoleplayEntity(); break; case "normal": client.Character.Scal = 100; client.Action.RefreshRoleplayEntity(); break; } break; case "elite": switch (args.Args[2]) { case "up": World.Game.Elite.EliteManager.UpElite(client); break; } break; case "level": switch (args.Args[2]) { case "set": if (client.Character.Fighter == null) { Database.Records.ExpFloorRecord floor = World.Helper.ExpFloorHelper.GetCharactersLevelFloor(int.Parse(args.Args[3])); client.Character.Experience = floor.Character; client.Action.TryLevelUp(); } else { client.Action.SystemMessage("Impossible en combat !"); } break; case "add": if (client.Character.Fighter == null) { int addedLevel = int.Parse(args.Args[3]); int nextLevel = client.Character.Level + addedLevel; if (nextLevel > 5000) { nextLevel = 5000; } Database.Records.ExpFloorRecord floor = World.Helper.ExpFloorHelper.GetCharactersLevelFloor(nextLevel); client.Character.Experience = floor.Character; client.Action.TryLevelUp(); } else { client.Action.SystemMessage("Impossible en combat !"); } break; } break; } break; case "ui": switch (args.Args[1]) { case "show": switch (args.Args[2]) { case "paddock": client.Character.Map.Engine.ShowPaddocksMounts(client); break; case "guild": client.Send("gn"); break; } break; } break; case "this": switch (args.Args[1]) { case "item": switch (args.Args[2]) { case "remove": Database.Records.WorldItemRecord toDeleteItem = (Database.Records.WorldItemRecord)parameters[0]; client.Character.Items.RemoveItem(toDeleteItem, 1); break; } break; } break; } } catch { } }
public static void CloseZaapPanel(World.Network.WorldClient client, string packet = "") { client.State = Network.WorldClientState.None; client.Send("WV"); }