/// <summary> /// Attempts to create a guild. /// </summary> /// <param name="player">The player who becomes the leader.</param> /// <param name="name">The name of the guild.</param> /// <returns>True if the guild was created.</returns> public static bool Create(Models.Entities.Player player, string name) { if (GetGuildByName(name) != null) { return(false); } var guild = new Guild(new Database.Models.DbGuild { Name = name, Announcement = Drivers.Messages.NEW_GUILD_ANNOUNCEMENT, AnnouncementDate = Drivers.Time.GetTime(Drivers.Time.TimeType.Day), Fund = 0, CPsFund = 0, Level = 0, Server = Drivers.Settings.WorldSettings.Server }); if (guild.DbGuild.Create() && _guilds.TryAdd(guild.Id, guild)) { guild.AddMember(player, Enums.GuildRank.GuildLeader, false); player.UpdateClientGuild(); player.UpdateScreen(true); return(true); } return(false); }
public static bool ChangeDirection(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet) { player.Direction = packet.Direction; player.AttackPacket = null; player.UpdateScreen(false, packet); return(true); }
public static bool GetItemSet(Models.Entities.Player player, DataExchangePacket packet) { player.ClientSocket.Send(packet); player.LoggedIn = true; foreach (var dbOwnerItem in Database.Dal.Inventories.GetInventory(player.DbPlayer.Id)) { var item = Collections.ItemCollection.CreateItemById((uint)dbOwnerItem.ItemId); item.DbOwnerItem = dbOwnerItem; if (!string.IsNullOrWhiteSpace(dbOwnerItem.Color)) { item.Color = dbOwnerItem.Color.ToEnum <Enums.ItemColor>(); } item.Gem1 = dbOwnerItem.Gem1.ToEnum <Enums.Gem>(); item.Gem2 = dbOwnerItem.Gem2.ToEnum <Enums.Gem>(); if (!player.Inventory.Add(item)) { player.ClientSocket.Disconnect(Drivers.Messages.Errors.FAILED_TO_LOAD_INVENTORY); return(false); } } foreach (var dbOwnerItem in Database.Dal.Equipments.GetEquipments(player.DbPlayer.Id)) { var item = Collections.ItemCollection.CreateItemById((uint)dbOwnerItem.ItemId); item.DbOwnerItem = dbOwnerItem; item.Position = dbOwnerItem.Position.ToEnum <Enums.ItemPosition>(); if (!string.IsNullOrWhiteSpace(dbOwnerItem.Color)) { item.Color = dbOwnerItem.Color.ToEnum <Enums.ItemColor>(); } item.Gem1 = dbOwnerItem.Gem1.ToEnum <Enums.Gem>(); item.Gem2 = dbOwnerItem.Gem2.ToEnum <Enums.Gem>(); if (!player.Equipments.Equip(item, item.Position, false, false, true)) { player.ClientSocket.Disconnect(Drivers.Messages.Errors.FAILED_TO_LOAD_EQUIPMENTS); return(false); } } player.UpdateScreen(false); return(true); }
public static bool GetSurroundings(Models.Entities.Player player, DataExchangePacket packet) { if (player.Map != null) { player.Map.DisplayWeather(player); } player.UpdateScreen(true); if (player.MapChangeEvents.Count > 0) { Action <Models.Entities.Player> mapChangeEvent; while (player.MapChangeEvents.TryDequeue(out mapChangeEvent)) { mapChangeEvent.Invoke(player); } } return(true); }
public static bool ChangeAction(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet) { var action = (Enums.PlayerAction)packet.Data1Low; player.AttackPacket = null; if (player.Action != Enums.PlayerAction.Sit || player.Action != Enums.PlayerAction.Lie) { if (action == Enums.PlayerAction.Sit || action == Enums.PlayerAction.Lie) { player.UpdateStamina(); } } player.Action = action; player.UpdateScreen(false, packet); return(true); }
/// <summary> /// Adds a member to the guild. /// </summary> /// <param name="player">The player.</param> /// <param name="rank">The starting rank.</param> /// <param name="update">A boolean determining whether the client of the player should be updated.</param> public void AddMember(Models.Entities.Player player, Enums.GuildRank rank, bool update = true) { var guildMember = new GuildMember(new Database.Models.DbGuildRank { GuildId = Guild.Id, PlayerId = player.DbPlayer.Id, PlayerName = player.Name, PlayerLevel = player.Level, SilverDonation = 0, CPDonation = 0, GuildRank = rank.ToString(), JoinDate = Drivers.Time.GetTime(Drivers.Time.TimeType.Day) }); if (guildMember.DbGuildRank.Create() && _members.TryAdd(player.DbPlayer.Id, guildMember)) { player.AddActionLog("JoinGuild", Guild.Id); guildMember.Player = player; player.Guild = Guild; player.GuildMember = guildMember; if (rank == Enums.GuildRank.GuildLeader) { Guild.GuildLeader = guildMember; } if (update) { player.UpdateClientGuild(); player.UpdateScreen(true); } } _cachedSortedMembers = null; }
public static bool Handle(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet) { if (!player.Alive && DateTime.UtcNow > player.DeadTime) { player.ClientSocket.Disconnect(Drivers.Messages.Errors.JUMP_WHILE_DEAD); return(false); } if (packet.ClientId != player.ClientId) { Database.Dal.Accounts.Ban( player.DbPlayer.Account, Drivers.Messages.JUMP_OTHER_PLAYER, Database.Models.DbAccount.BanRangeType.Perm); player.ClientSocket.Disconnect(Drivers.Messages.JUMP_OTHER_PLAYER); return(false); } player.Action = Enums.PlayerAction.None; player.AttackPacket = null; ushort newX = packet.Data1Low; ushort newY = packet.Data1High; if (Tools.RangeTools.GetDistanceU(newX, newY, player.X, player.Y) > 28) { player.Pullback(); return(true); } if (!player.Map.ValidCoord(newX, newY)) { player.Pullback(); return(false); } if (player.LastMovementMode == Enums.WalkMode.Jump && DateTime.UtcNow <= player.LastMovementTime.AddMilliseconds(400)) { player.SpeedHackChecks++; if (player.SpeedHackChecks >= 3) { // speedhack ... if (player.SpeedHackChecks >= 10) { player.ClientSocket.Disconnect(Drivers.Messages.SPEEDHACK); return(false); } player.Pullback(); return(true); } } else { player.SpeedHackChecks = 0; } if (player.Battle != null) { if (!player.Battle.EnterArea(player)) { player.Pullback(); return(true); } else if (!player.Battle.LeaveArea(player)) { player.Pullback(); return(true); } } if (Tools.CalculationTools.ChanceSuccess(Data.Constants.Chances.StaminaOnJump)) { player.Stamina = (byte)Math.Min(100, player.Stamina + 7); } player.X = newX; player.Y = newY; player.LastMovementMode = Enums.WalkMode.Jump; player.LastMovementTime = DateTime.UtcNow; player.ClientSocket.Send(packet); player.UpdateScreen(false, packet, Enums.UpdateScreenFlags.Idle); return(true); }
public static bool Handle(Models.Entities.Player player, Models.Packets.Message.MessagePacket packet) { player.UpdateScreen(false, packet); return(true); }
public static bool HandlePacket(Models.Entities.Player player, Models.Packets.Location.WalkPacket packet) { if (packet.ClientId != player.ClientId) { Database.Dal.Accounts.Ban( player.DbPlayer.Account, Drivers.Messages.MOVE_OTHER_PLAYER, Database.Models.DbAccount.BanRangeType.Perm); player.ClientSocket.Disconnect(Drivers.Messages.MOVE_OTHER_PLAYER); return(false); } player.Action = Enums.PlayerAction.None; player.AttackPacket = null; player.LastMovementMode = packet.Mode; int newX = 0, newY = 0; int newDir = 0; switch (packet.Mode) { case Enums.WalkMode.Walk: case Enums.WalkMode.Run: { newDir = (int)packet.Direction % 8; newX = player.X + Data.Constants.Movement.DeltaX[newDir]; newY = player.Y + Data.Constants.Movement.DeltaY[newDir]; if (DateTime.UtcNow < player.LastMovementTime.AddMilliseconds(100)) { player.SpeedHackChecks++; if (player.SpeedHackChecks >= 3) { // speedhack ... if (player.SpeedHackChecks >= 10) { player.ClientSocket.Disconnect(Drivers.Messages.SPEEDHACK); return(false); } player.Pullback(); return(true); } } else { player.SpeedHackChecks = 0; } break; } case Enums.WalkMode.Mount: { newDir = (int)packet.Direction % 24; newX = player.X + Data.Constants.Movement.DeltaMountX[newDir]; newY = player.Y + Data.Constants.Movement.DeltaMountY[newDir]; if (DateTime.UtcNow < player.LastMovementTime.AddMilliseconds(400)) { player.SpeedHackChecks++; if (player.SpeedHackChecks >= 3) { // speedhack ... if (player.SpeedHackChecks >= 10) { player.ClientSocket.Disconnect(Drivers.Messages.SPEEDHACK); return(false); } player.Pullback(); return(true); } } else { player.SpeedHackChecks = 0; } break; } default: return(false); } if (player.Map.ValidCoord((ushort)newX, (ushort)newY)) { player.LastMovementTime = DateTime.UtcNow; player.X = (ushort)newX; player.Y = (ushort)newY; player.ClientSocket.Send(packet); player.UpdateScreen(false, packet, Enums.UpdateScreenFlags.Idle); if (player.Battle != null) { if (!player.Battle.EnterArea(player)) { player.Pullback(); } else if (!player.Battle.LeaveArea(player)) { player.Pullback(); } } return(true); } return(false); }