Exemple #1
0
    /// <summary>
    /// Disbatch a message to a game object with instructions on locality of the disbatch
    /// </summary>
    public static void DisbatchMessage <EventType>(EventType message, FFPacketInstructionFlags instructions, GameObject go)
    {
        instructions |= FFPacketInstructionFlags.MessageBoardGameObjectSend;
        var packet = new FFPacket <EventType>(instructions, typeof(EventType).Name, message, BaseMessageBoard.LocalIdEntry(go.GetInstanceID()));

        DisbatchPacket(packet);
    }
        /// <inheritdoc />
        public void SendSpecialEffect(IWorldEntity entity, int specialEffectId, bool sfxNoFollow)
        {
            if (entity is IPlayerEntity playerEntity)
            {
                if (playerEntity.PlayerData.Mode.HasFlag(ModeType.TRANSPARENT_MODE))
                {
                    return;
                }
            }

            using var packet = new FFPacket();

            packet.StartNewMergedPacket(entity.Id, SnapshotType.CREATESFXOBJ);
            packet.Write(specialEffectId);
            if (sfxNoFollow)
            {
                packet.Write(entity.Object.Position.X); // X
                packet.Write(entity.Object.Position.Y); // Y
                packet.Write(entity.Object.Position.Z); // Z
            }
            else
            {
                packet.Write(0f); // X
                packet.Write(0f); // Y
                packet.Write(0f); // Z
            }

            packet.Write(false); // Flag

            SendToVisible(packet, entity, sendToPlayer: true);
        }
Exemple #3
0
        /// <inheritdoc />
        public void SendQuestDialogs(IPlayerEntity player, IEnumerable <DialogLink> newQuests, IEnumerable <DialogLink> currentQuests)
        {
            if (newQuests != null || currentQuests != null)
            {
                using var packet = new FFPacket();

                if (newQuests != null)
                {
                    foreach (DialogLink newQuestLink in newQuests)
                    {
                        packet.StartNewMergedPacket(player.Id, SnapshotType.RUNSCRIPTFUNC);
                        packet.Write((short)DialogOptions.FUNCTYPE_NEWQUEST);
                        packet.Write(newQuestLink.Title);
                        packet.Write(newQuestLink.Id);
                        packet.Write(0);
                        packet.Write(newQuestLink.QuestId.GetValueOrDefault());
                    }
                }

                if (currentQuests != null)
                {
                    foreach (DialogLink currentQuestLink in currentQuests)
                    {
                        packet.StartNewMergedPacket(player.Id, SnapshotType.RUNSCRIPTFUNC);
                        packet.Write((short)DialogOptions.FUNCTYPE_CURRQUEST);
                        packet.Write(currentQuestLink.Title);
                        packet.Write(currentQuestLink.Id);
                        packet.Write(0);
                        packet.Write(currentQuestLink.QuestId.GetValueOrDefault());
                    }
                }

                SendToPlayer(player, packet);
            }
        }
Exemple #4
0
        /// <summary>
        /// Sends a NPC dialog to a player.
        /// </summary>
        /// <param name="player">Player</param>
        /// <param name="text">Npc dialog text</param>
        /// <param name="dialogLinks">Npc dialog links</param>
        public static void SendDialog(IPlayerEntity player, string text, IEnumerable <DialogLink> dialogLinks)
        {
            using (var packet = new FFPacket())
            {
                packet.StartNewMergedPacket(player.Id, SnapshotType.RUNSCRIPTFUNC);
                packet.Write((short)DialogOptions.FUNCTYPE_REMOVEALLKEY);

                packet.StartNewMergedPacket(player.Id, SnapshotType.RUNSCRIPTFUNC);
                packet.Write((short)DialogOptions.FUNCTYPE_SAY);
                packet.Write(text);
                packet.Write(0); // quest id

                foreach (DialogLink link in dialogLinks)
                {
                    packet.StartNewMergedPacket(player.Id, SnapshotType.RUNSCRIPTFUNC);
                    packet.Write((short)DialogOptions.FUNCTYPE_ADDKEY);
                    packet.Write(link.Title);
                    packet.Write(link.Id);
                    packet.Write(0);
                    packet.Write(0);
                }

                player.Connection.Send(packet);
            }
        }
Exemple #5
0
        public void OnNPCInteraction(FFPacket packet)
        {
            var objectId  = packet.Read <int>();
            var dialogKey = packet.Read <string>();
            var global1   = packet.Read <int>();
            var global2   = packet.Read <int>();
            var srcId     = packet.Read <int>();
            var destId    = packet.Read <int>();
            var npc       = this.Player.GetSpawnedObjectById <Npc>(objectId);

            if (npc != null && npc.Dialog != null)
            {
                if (dialogKey == "BYE")
                {
                    var byeLink = npc.Dialog.Links.Where(x => x.Id == dialogKey).FirstOrDefault();

                    npc.SendNormalChatTo(byeLink?.Text, this.Player);
                    npc.SendCloseDialogTo(this.Player);
                }
                else
                {
                    npc.SendDialogTo(this.Player, dialogKey);
                }
            }
        }
Exemple #6
0
    public override void SendToLocalGameObject(FFBasePacket package, GameObject go)
    {
        FFPacket <EventType> sentPackage = (FFPacket <EventType>)package;

        FFPacket <EventType> .Decrypt(ref sentPackage.message);

        switch (package.packetInstructions)
        {
        case FFPacketInstructionFlags.MessageBoardGameObjectSend:
            FFMessageBoard <EventType> .SendToLocal(sentPackage.message, go);

            break;

        case FFPacketInstructionFlags.MessageBoardGameObjectSendDown:
            FFMessageBoard <EventType> .SendToLocalDown(sentPackage.message, go);

            break;

        case FFPacketInstructionFlags.MessageBoardGameObjectSendUp:
            FFMessageBoard <EventType> .SendToLocalUp(sentPackage.message, go);

            break;

        case FFPacketInstructionFlags.MessageBoardGameObjectSendToAllConnected:
            FFMessageBoard <EventType> .SendToLocalToAllConnected(sentPackage.message, go);

            break;

        default:
            break;
        }
    }
Exemple #7
0
        public static void SendMoverBehavior(IEntity entity, Vector3 beginPosition, Vector3 destinationPosition,
                                             float angle, uint state, uint stateFlag, uint motion, int motionEx, int loop, uint motionOption,
                                             long tickCount)
        {
            using (var packet = new FFPacket())
            {
                packet.StartNewMergedPacket(entity.Id, SnapshotType.MOVERBEHAVIOR);
                packet.Write(beginPosition.X);
                packet.Write(beginPosition.Y);
                packet.Write(beginPosition.Z);
                packet.Write(destinationPosition.X);
                packet.Write(destinationPosition.Y);
                packet.Write(destinationPosition.Z);
                packet.Write(angle);
                packet.Write(state);
                packet.Write(stateFlag);
                packet.Write(motion);
                packet.Write(motionEx);
                packet.Write(loop);
                packet.Write(motionOption);
                packet.Write(tickCount);

                SendToVisible(packet, entity, sendToPlayer: false);
            }
        }
Exemple #8
0
        internal void SendMoverMoved(Vector3 direction, int motionEx, int loop, int motionOption, long tick, byte frame, float turnAngle)
        {
            using (var packet = new FFPacket())
            {
                packet.StartNewMergedPacket(this.ObjectId, SnapshotType.MOVERMOVED2);

                packet.Write(this.Position.X);
                packet.Write(this.Position.Y);
                packet.Write(this.Position.Z);
                packet.Write(direction.X);
                packet.Write(direction.Y);
                packet.Write(direction.Z);
                packet.Write(this.Angle);
                packet.Write(this.AngleFly);
                packet.Write(this.FlightSpeed);
                packet.Write(turnAngle);
                packet.Write((uint)this.MovingFlags);
                packet.Write((int)this.MotionFlags);
                packet.Write(this.ActionFlags);
                packet.Write(motionEx);
                packet.Write(loop);
                packet.Write(motionOption);
                packet.Write(tick);
                packet.Write(frame);

                base.SendToVisible(packet);
            }
        }
        /// <inheritdoc />
        public void SendPlayerRevival(IPlayerEntity player)
        {
            using var packet = new FFPacket();

            packet.StartNewMergedPacket(player.Id, SnapshotType.REVIVAL_TO_LODESTAR);

            SendToVisible(packet, player, sendToPlayer: true);
        }
        /// <inheritdoc />
        public void SendDespawnObjectTo(IPlayerEntity player, IWorldEntity entityToDespawn)
        {
            using var packet = new FFPacket();

            packet.StartNewMergedPacket(entityToDespawn.Id, SnapshotType.DEL_OBJ);

            SendToPlayer(player, packet);
        }
Exemple #11
0
        /// <inheritdoc />
        public void SendWelcome(IWorldClient client, uint sessionId)
        {
            using var packet = new FFPacket(PacketType.WELCOME);

            packet.Write(sessionId);

            client.Send(packet);
        }
Exemple #12
0
    public override bool SendToLocalEntry(FFBasePacket package, string entry)
    {
        FFPacket <EventType> sentPackage = (FFPacket <EventType>)package;

        FFPacket <EventType> .Decrypt(ref sentPackage.message);

        return(FFMessageBoard <EventType> .SendToLocal(sentPackage.message, entry));
    }
Exemple #13
0
        /// <inheritdoc />
        public void SendTradeOk(IPlayerEntity player, uint traderId)
        {
            using var packet = new FFPacket();

            packet.StartNewMergedPacket(traderId, SnapshotType.TRADEOK);

            SendToPlayer(player, packet);
        }
Exemple #14
0
        /// <inheritdoc />
        public void SendTradeRequestCancel(IPlayerEntity player, IPlayerEntity target)
        {
            using var packet = new FFPacket();

            packet.StartNewMergedPacket(player.Id, SnapshotType.CONFIRMTRADECANCEL);

            SendToPlayer(target, packet);
        }
Exemple #15
0
        /// <inheritdoc />
        public void SendTradeConsent(IPlayerEntity player)
        {
            using var packet = new FFPacket();

            packet.StartNewMergedPacket(0, SnapshotType.TRADECONSENT);

            SendToPlayer(player, packet);
        }
Exemple #16
0
        /// <inheritdoc />
        public void SendTradeLastConfirm(IPlayerEntity player)
        {
            using var packet = new FFPacket();

            packet.StartNewMergedPacket(0, SnapshotType.TRADELASTCONFIRM);

            SendToPlayer(player, packet);
        }
Exemple #17
0
    // Used to unpack messages from the net
    public override bool SendToLocal(FFBasePacket package)
    {
        FFPacket <EventType> sentPackage = (FFPacket <EventType>)package;

        FFPacket <EventType> .Decrypt(ref sentPackage.message);

        return(FFMessage <EventType> .SendToLocal(sentPackage.message));
    }
        public void SendMessageBoardEntry <MessageType>(MessageType message, string entry, bool varifiedPacket)
        {
            FFPacket <MessageType> packet =
                new FFPacket <MessageType>(FFPacketInstructionFlags.MessageBoardEntry,
                                           typeof(MessageType).ToString(), message, entry);

            SendNetPacket(packet, varifiedPacket);
        }
        public void SendGameAllConnectedObject <MessageType>(MessageType message, ulong netId, bool varifiedPacket)
        {
            FFPacket <MessageType> packet =
                new FFPacket <MessageType>(FFPacketInstructionFlags.MessageBoardGameObjectSendToAllConnected,
                                           typeof(MessageType).ToString(), message, netId.ToString());

            SendNetPacket(packet, varifiedPacket);
        }
        public void SendSkillCancellation(IPlayerEntity player)
        {
            using var packet = new FFPacket();

            packet.StartNewMergedPacket(player.Id, SnapshotType.CLEAR_USESKILL);

            SendToPlayer(player, packet);
        }
    public override uint Inspect(FFServer.ClientSocket clientSocket, FFBasePacket incommingPacket)
    {
        FFPacket <ClientSyncTimeEvent> packet = (FFPacket <ClientSyncTimeEvent>)incommingPacket;

        packet.message.serverLifeTime = FFServer.serverTime;
        clientSocket.SendNetPacket <ClientSyncTimeEvent>(packet, false);
        return(1); // return zero to to have this inspector pass this message
    }
Exemple #22
0
        public static void SendTradeOk(IPlayerEntity player, uint traderId)
        {
            using (var packet = new FFPacket())
            {
                packet.StartNewMergedPacket(traderId, SnapshotType.TRADEOK);

                player.Connection.Send(packet);
            }
        }
Exemple #23
0
        /// <summary>
        /// Sends the despawn object to the current player.
        /// </summary>
        /// <param name="player">Current player</param>
        /// <param name="entityToDespawn">Entity to despawn</param>
        public static void SendDespawnObjectTo(IPlayerEntity player, IEntity entityToDespawn)
        {
            using (var packet = new FFPacket())
            {
                packet.StartNewMergedPacket(entityToDespawn.Id, SnapshotType.DEL_OBJ);

                player.Connection.Send(packet);
            }
        }
Exemple #24
0
        /// <summary>
        /// Send greetings to the client.
        /// </summary>
        public override void Greetings()
        {
            var packet = new FFPacket();

            packet.WriteHeader(PacketType.WELCOME);
            packet.Write(this.sessionId);

            this.Send(packet);
        }
        /// <inheritdoc />
        public void SendPlayerSetLevel(IPlayerEntity player, int level)
        {
            using var packet = new FFPacket();

            packet.StartNewMergedPacket(player.Id, SnapshotType.SETLEVEL);
            packet.Write((short)level);

            SendToVisible(packet, player);
        }
        /// <summary>
        /// Sends a request telling the player can join the world.
        /// </summary>
        /// <param name="client"></param>
        public static void SendJoinWorld(NetUser client)
        {
            using (var packet = new FFPacket())
            {
                packet.WriteHeader(PacketType.PRE_JOIN);

                client.Send(packet);
            }
        }
Exemple #27
0
        public static void SendToNet <EventType>(FFPacket <EventType> netPacket, bool varifiedPacket)
        {
            // any Data scrambling which is based on type needs to happen here. It is unscrambled
            // in
            FFPacket <EventType> .Encrypt(ref netPacket.message);

            //FFClient.SendPacket(netPacket, varifiedPacket);
            return;
        }
        /// <inheritdoc />
        public void SendJoinWorld(IClusterClient client)
        {
            using (var packet = new FFPacket())
            {
                packet.WriteHeader(PacketType.PRE_JOIN);

                client.Send(packet);
            }
        }
Exemple #29
0
        internal void SendDespawnObject(WorldObject worldObject)
        {
            using (var packet = new FFPacket())
            {
                packet.StartNewMergedPacket(worldObject.ObjectId, SnapshotType.DEL_OBJ);

                this.Send(packet);
            }
        }
Exemple #30
0
        public static void SendTradeLastConfirm(IPlayerEntity player)
        {
            using (var packet = new FFPacket())
            {
                packet.StartNewMergedPacket(0, SnapshotType.TRADELASTCONFIRM);

                player.Connection.Send(packet);
            }
        }
    private static void SendClientSyncTimeEvent(bool isDistorsionSync)
    {
        ClientSyncTimeEvent e;
        e.serverLifeTime = -1;
        e.isDistortionSyncEvent = isDistorsionSync;
        e.clientSendTime = clientTimeNoDistortion;

        FFPacket<ClientSyncTimeEvent> packet = new FFPacket<ClientSyncTimeEvent>(
            FFPacketInstructionFlags.Message | FFPacketInstructionFlags.Immediate,
            typeof(ClientSyncTimeEvent).ToString(), e);

        FFMessageSystem.SendToNet<ClientSyncTimeEvent>(packet, false);
    }