public static bool HandleQueryEquipments(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet) { Models.Entities.Player viewPlayer = Collections.PlayerCollection.GetPlayerByClientId(packet.Data1); if (viewPlayer != null) { player.ClientSocket.Send(viewPlayer.GetSpawnPacket()); foreach (var item in viewPlayer.Equipments.GetAll()) { item.ViewItem(viewPlayer, player); } if (viewPlayer.LoggedIn) { viewPlayer.SendFormattedSystemMessage("VIEW_EQUIPMENTS", true, player.Name); } player.ClientSocket.Send(new Models.Packets.Misc.StringPacket { String = viewPlayer.Spouse, Action = Enums.StringAction.QueryMate }); } return(true); }
public static bool ChangeMap(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet) { if (player.Map.IsDynamic) { if (player.Houses.Count > 0 && player.Houses.GetAll().Any(house => house.DynamicMapId == player.MapId)) { player.AddActionLog("LeaveHouse"); player.TeleportToLastMap(); return(true); } if (player.Guild.InHouse(player)) { player.AddActionLog("LeaveGuildHouse"); player.TeleportToLastMap(); return(true); } } var coordinate = new Models.Maps.Coordinate(packet.Data1Low, packet.Data1High); if (Tools.RangeTools.GetDistanceU(player.X, player.Y, coordinate.X, coordinate.Y) <= 5) { int mapId = player.MapId; if (Collections.PortalCollection.Teleport(player, mapId, coordinate.X, coordinate.Y)) { player.AddActionLog("Portal", string.Format("{0} : {1},{2}", mapId, coordinate.X, coordinate.Y)); return(true); } } player.Pullback(); return(true); }
public static bool ChangePKMode(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet) { player.PKMode = (Enums.PKMode)packet.Data1Low; player.AttackPacket = null; player.ClientSocket.Send(packet); return(true); }
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 Handle(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet) { if (!player.Alive && DateTime.UtcNow >= player.ReviveTime) { player.AddActionLog("RevivePacket"); player.Revive(false); } return(true); }
public static bool HandleQueryPlayer(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet) { Models.Maps.IMapObject obj; if (packet.Data1 > 1000000 && player.GetFromScreen(packet.Data1, out obj)) { var objPlayer = (obj as Models.Entities.Player); objPlayer.ClientSocket.Send(player.GetSpawnPacket()); player.ClientSocket.Send(objPlayer.GetSpawnPacket()); } 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); }
public static bool HandleQueryStats(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet) { if (packet.Data1 > 1000000 && packet.Data1 != player.ClientId) { var queryPlayer = Collections.PlayerCollection.GetPlayerByClientId(packet.Data1); if (queryPlayer != null) { queryPlayer.UpdateBaseStats(); player.ClientSocket.Send(new Models.Packets.Entities.PlayerStatsPacket { Player = queryPlayer }); } } else { player.UpdateBaseStats(); } return(true); }
public static bool GetCustomPlayerData(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet) { #region Basic stats // To update it client side ... player.BoundCPs = player.BoundCPs; player.ValidateLoginMap(); player.UpdateStats(); player.Stamina = Data.Constants.GameMode.StartStamina; #endregion #region Status Flags if (!string.IsNullOrWhiteSpace(player.DbPlayer.StatusFlag)) { player.StaticStatusFlag = player.DbPlayer.StatusFlag.ToEnum <Enums.StatusFlag>(); } // Idk why, but for some reason you can't update the client any other way with the pk points and status flag ... var pkp = player.PKPoints; player.PKPoints = 0; player.PKPoints = pkp; #endregion #region Messages if (Collections.BroadcastQueue.LastMessage != null) { player.ClientSocket.Send(Collections.BroadcastQueue.LastMessage); } foreach (var dbWhisper in Database.Dal.WhisperCache.GetAllByRecipent(player.Name, Drivers.Settings.WorldSettings.Server)) { player.ClientSocket.Send( Controllers.Packets.Message.MessageController.CreateWhisper(string.Concat("[Sent offline]", dbWhisper.Message), dbWhisper.From, dbWhisper.To, dbWhisper.Mesh, player.Mesh) ); dbWhisper.Delete(); } #endregion #region Houses var houses = Database.Dal.PlayerHouses.GetAll(player.DbPlayer.Id); if (houses.Count > 0) { bool anyRent = false; foreach (var dbPlayerHouse in houses) { if (!anyRent && dbPlayerHouse.IsLeasing && dbPlayerHouse.NextRentDate.HasValue && DateTime.UtcNow >= dbPlayerHouse.NextRentDate.Value) { anyRent = true; } var playerHouse = new Models.Maps.PlayerHouse(player, dbPlayerHouse); player.Houses.Add(playerHouse); if (dbPlayerHouse.Warehouse) { player.Warehouses.CreateWarehouse((uint)(dbPlayerHouse.MapId + 100000)); playerHouse.CreateWarehouse(); } } if (anyRent) { player.SendSystemMessage("RENT_DUE"); } } #endregion #region Warehouse foreach (var dbOwnerItem in Database.Dal.Warehouses.GetWarehouseItems(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>(); Collections.Warehouse warehouse; if (player.Warehouses.TryGetWarehouse(dbOwnerItem.LocationId.Value, out warehouse)) { if (!warehouse.Add(item, true)) { player.ClientSocket.Disconnect(Drivers.Messages.Errors.FAILED_TO_LOAD_WAREHOUSE); return(false); } } } #endregion #region Nobility Models.Nobility.NobilityDonation nobility; if (Collections.NobilityBoard.TryGetNobility(player.DbPlayer.Id, out nobility)) { nobility.Player = player; player.Nobility = nobility; } player.UpdateClientNobility(); #endregion #region VIP byte vipLevel = 0; if (player.DbPlayer.DonationPoints >= 6) { vipLevel = 6; } else if (player.DbPlayer.DonationPoints > 0) { vipLevel = (byte)player.DbPlayer.DonationPoints; } player.VIPLevel = vipLevel; #endregion #region Arena Models.Arena.ArenaInfo arenaInfo; if (!Collections.ArenaQualifierCollection.TryGetArenaInfo(player.DbPlayer.Id, out arenaInfo)) { arenaInfo = new Models.Arena.ArenaInfo(null) { Player = player }; if (!Collections.ArenaQualifierCollection.TryAddArenaInfo(player.DbPlayer.Id, arenaInfo)) { player.ClientSocket.Disconnect(Drivers.Messages.Errors.FAILED_TO_INITIALIZE_ARENA_INFO); } } else { arenaInfo.Player = player; } player.ArenaInfo = arenaInfo; #endregion // TODO: Load subclass // TODO: Load heaven blessing #region Merchant player.UpdateClient(Enums.UpdateClientType.Merchant, 255UL); #endregion Server.FinishLogin.Handle(player); return(true); }
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 HandleQueryFriendEquip(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet) { // TODO: Handle this correct ?? return(HandleQueryEquipments(player, packet)); }
public static bool Handle(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet) { player.RemoveStatusFlag(Enums.StatusFlag.Fly); return(true); }