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); }
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) { 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); }
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)); }