public override void Execute(GameCommandTrigger trigger) { Player player = trigger.Session.Player; Character fieldPlayer = player.FieldPlayer; int mountId = trigger.Get <int>("mountId"); byte enable = trigger.Get <byte>("enable"); if (enable is 0) { player.Mount = null; // Remove mount from player trigger.Session.FieldManager.BroadcastPacket(MountPacket.StopRide(fieldPlayer, true)); trigger.Session.Send(KeyTablePacket.SendHotbars(player.GameOptions)); return; } IFieldObject <Mount> fieldMount = trigger.Session.FieldManager.RequestFieldObject(new Mount { Type = RideType.Default, Id = mountId, Uid = 0 }); fieldMount.Value.Players[0] = fieldPlayer; player.Mount = fieldMount; trigger.Session.FieldManager.BroadcastPacket(MountPacket.StartRide(fieldPlayer)); }
private static void HandleStartRide(GameSession session, PacketReader packet) { RideType type = (RideType)packet.ReadByte(); int mountId = packet.ReadInt(); packet.ReadLong(); long mountUid = packet.ReadLong(); // [46-0s] (UgcPacketHelper.Ugc()) but client doesn't set this data? if (type == RideType.UseItem && !session.Player.Inventory.Items.ContainsKey(mountUid)) { return; } IFieldObject <Mount> fieldMount = session.FieldManager.RequestFieldObject(new Mount { Type = type, Id = mountId, Uid = mountUid, }); fieldMount.Value.Players[0] = session.FieldPlayer; session.Player.Mount = fieldMount; Packet startPacket = MountPacket.StartRide(session.FieldPlayer); session.FieldManager.BroadcastPacket(startPacket); }
private static void HandleStartMultiPersonRide(GameSession session, PacketReader packet) { int otherPlayerObjectId = packet.ReadInt(); if (!session.FieldManager.State.Players.TryGetValue(otherPlayerObjectId, out IFieldObject <Player> otherPlayer) || otherPlayer.Value.Mount == null) { return; } bool isFriend = BuddyManager.IsFriend(session.Player, otherPlayer.Value); bool isGuildMember = session.Player != null && otherPlayer.Value.Guild != null && session.Player.Guild.Id == otherPlayer.Value.Guild.Id; bool isPartyMember = session.Player.Party == otherPlayer.Value.Party; if (!isFriend && !isGuildMember && !isPartyMember) { return; } int index = Array.FindIndex(otherPlayer.Value.Mount.Value.Players, 0, otherPlayer.Value.Mount.Value.Players.Length, x => x == null); otherPlayer.Value.Mount.Value.Players[index] = session.FieldPlayer; session.Player.Mount = otherPlayer.Value.Mount; session.FieldManager.BroadcastPacket(MountPacket.StartTwoPersonRide(otherPlayerObjectId, session.FieldPlayer.ObjectId, (byte)(index - 1))); }
private static void HandleChangeRide(GameSession session, PacketReader packet) { int mountId = packet.ReadInt(); long mountUid = packet.ReadLong(); if (!session.Player.Inventory.HasItem(mountUid)) { return; } Item item = session.Player.Inventory.GetByUid(mountUid); if (item.IsExpired()) { return; } if (item.TransferFlag.HasFlag(ItemTransferFlag.Binds) && !item.IsBound()) { item.BindItem(session.Player); } PacketWriter changePacket = MountPacket.ChangeRide(session.Player.FieldPlayer.ObjectId, mountId, mountUid); session.FieldManager.BroadcastPacket(changePacket); }
private static void HandleStopRide(GameSession session, PacketReader packet) { packet.ReadByte(); bool forced = packet.ReadBool(); // Going into water without amphibious riding session.Player.Mount = null; // Remove mount from player session.FieldManager.BroadcastPacket(MountPacket.StopRide(session.Player.FieldPlayer, forced)); }
private static void HandleChangeRide(GameSession session, PacketReader packet) { int mountId = packet.ReadInt(); long mountUid = packet.ReadLong(); Packet changePacket = MountPacket.ChangeRide(session.FieldPlayer.ObjectId, mountId, mountUid); session.FieldManager.BroadcastPacket(changePacket); }
public override void Handle(GameSession session, PacketReader packet) { if (session.Player.OnAirMount) { session.Player.OnAirMount = false; } if (session.Player.Mount != null) { session.FieldManager.BroadcastPacket(MountPacket.StopRide(session.FieldPlayer, false)); } }
private static void HandleChangeRide(GameSession session, PacketReader packet) { int mountId = packet.ReadInt(); long mountUid = packet.ReadLong(); if (!session.Player.Inventory.Items.ContainsKey(mountUid)) { return; } Packet changePacket = MountPacket.ChangeRide(session.FieldPlayer.ObjectId, mountId, mountUid); session.FieldManager.BroadcastPacket(changePacket); }
private static void HandleStopMultiPersonRide(GameSession session) { IFieldObject <Player> otherPlayer = session.Player.Mount.Value.Players[0]; if (otherPlayer == null) { return; } session.FieldManager.BroadcastPacket(MountPacket.StopTwoPersonRide(otherPlayer.ObjectId, session.FieldPlayer.ObjectId)); session.Send(UserMoveByPortalPacket.Move(session.FieldPlayer, otherPlayer.Coord, otherPlayer.Rotation)); session.Player.Mount = null; if (otherPlayer.Value.Mount != null) { int index = Array.FindIndex(otherPlayer.Value.Mount.Value.Players, 0, otherPlayer.Value.Mount.Value.Players.Length, x => x.ObjectId == session.FieldPlayer.ObjectId); otherPlayer.Value.Mount.Value.Players[index] = null; } }
private static void HandleStartRide(GameSession session, PacketReader packet) { var type = (RideType)packet.ReadByte(); int mountId = packet.ReadInt(); packet.ReadLong(); long mountUid = packet.ReadLong(); // [46-0s] (UgcPacketHelper.Ugc()) but client doesn't set this data? IFieldObject <Mount> fieldMount = session.FieldManager.RequestFieldObject(new Mount { Type = type, Id = mountId, Uid = mountUid }); session.Player.Mount = fieldMount; Packet startPacket = MountPacket.StartRide(session.FieldPlayer); session.FieldManager.BroadcastPacket(startPacket); }
public override void Handle(GameSession session, PacketReader packet) { float distance = packet.ReadFloat(); if (distance > Block.BLOCK_SIZE * 6) { // TODO: Check if player has Safe ride enabled if (session.Player.Mount != null) { session.FieldManager.BroadcastPacket(MountPacket.StopRide(session.Player.FieldPlayer)); } session.Player.FallDamage(); } if (session.Player.OnAirMount) { session.Player.OnAirMount = false; } }
private static void HandleStartRide(GameSession session, PacketReader packet) { RideType type = (RideType)packet.ReadByte(); int mountId = packet.ReadInt(); packet.ReadLong(); long mountUid = packet.ReadLong(); // [46-0s] (UgcPacketHelper.Ugc()) but client doesn't set this data? if (type == RideType.UseItem && !session.Player.Inventory.HasItem(mountUid)) { return; } Item item = session.Player.Inventory.GetByUid(mountUid); if (item.IsExpired()) { return; } IFieldObject <Mount> fieldMount = session.FieldManager.RequestFieldObject(new Mount { Type = type, Id = mountId, Uid = mountUid, Ugc = item.Ugc }); fieldMount.Value.Players[0] = session.Player.FieldPlayer; session.Player.Mount = fieldMount; if (item.TransferFlag.HasFlag(ItemTransferFlag.Binds) && !item.IsBound()) { item.BindItem(session.Player); } session.FieldManager.BroadcastPacket(MountPacket.StartRide(session.Player.FieldPlayer)); }
public override void Handle(GameSession session, PacketReader packet) { float distance = packet.ReadFloat(); if (distance > Block.BLOCK_SIZE * 6) { if (session.Player.Mount != null && session.Player.Levels.PrestigeLevel < (int)PrestigePerk.SafeRiding) { session.FieldManager.BroadcastPacket(MountPacket.StopRide(session.Player.FieldPlayer)); } session.Player.FallDamage(); TrophyManager.OnFallDamage(session.Player); } if (session.Player.OnAirMount) { session.Player.OnAirMount = false; } TrophyManager.OnFall(session.Player, distance); }