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);
        }
예제 #2
0
    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));
    }
예제 #3
0
        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);
        }
예제 #4
0
    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));
    }