Example #1
0
        public override void LateTick()
        {
            ReckoningCore.Tick(null);
            ReckoningCore.Move();
            ReckoningCore.Quantize();

            Core.Move();
            Core.Quantize();
            Position = Core.Position;

            if (Player.Team == Team.Spectators)
            {
                Position = new Vector2(Input.TargetX, Input.TargetY);
            }

            {
                var predicted = new SnapshotCharacter();
                var current   = new SnapshotCharacter();

                ReckoningCore.Write(predicted);
                Core.Write(current);

                if (ReckoningTick + Server.TickSpeed * 3 < Server.Tick || !current.Equals(predicted))
                {
                    ReckoningTick = Server.Tick;
                    SendCore.Fill(Core);
                    ReckoningCore.Fill(Core);
                }
            }
        }
Example #2
0
        public override void OnSnapshot(int snappingClient)
        {
            var id = Player.ClientId;

            if (!Server.Translate(ref id, snappingClient))
            {
                return;
            }

            if (NetworkClipped(snappingClient))
            {
                return;
            }

            var character = Server.SnapObject <SnapObj_Character>(id);

            if (character == null)
            {
                return;
            }

            if (ReckoningTick == 0 || GameWorld.IsPaused)
            {
                character.Tick = 0;
                Core.Write(character);
            }
            else
            {
                character.Tick = ReckoningTick;
                SendCore.Write(character);
            }

            if (EmoteStopTick < Server.Tick)
            {
                EmoteStopTick = -1;
                Emote         = Emote.NORMAL;
            }

            character.Emote     = Emote;
            character.AmmoCount = 0;
            character.Health    = 0;
            character.Armor     = 0;

            character.Weapon     = ActiveWeapon;
            character.AttackTick = AttackTick;
            character.Direction  = Input.Direction;

            if (snappingClient == Player.ClientId || snappingClient == -1 ||
                !Config["SvStrictSpectateMode"] && Player.ClientId == GameContext.Players[snappingClient].SpectatorId)
            {
                character.Health = Health;
                character.Armor  = Armor;

                if (Weapons[(int)ActiveWeapon].Ammo > 0)
                {
                    character.AmmoCount = Weapons[(int)ActiveWeapon].Ammo;
                }
            }

            if (character.Emote == Emote.NORMAL)
            {
                if (250 - ((Server.Tick - LastAction) % 250) < 5)
                {
                    character.Emote = Emote.BLINK;
                }
            }


            if (character.HookedPlayer != -1)
            {
                if (!Server.Translate(ref character.HookedPlayer, snappingClient))
                {
                    character.HookedPlayer = -1;
                }
            }

            character.PlayerFlags = Player.PlayerFlags;
        }
Example #3
0
        public override void OnSnapshot(int snappingClient)
        {
            if (NetworkClipped(snappingClient))
            {
                return;
            }

            var character = Server.SnapshotItem <SnapshotCharacter>(Player.ClientId);

            if (character == null)
            {
                return;
            }

            if (ReckoningTick == 0 || GameWorld.Paused)
            {
                character.Tick = 0;
                Core.Write(character);
            }
            else
            {
                character.Tick = ReckoningTick;
                SendCore.Write(character);
            }

            if (EmoteStopTick < Server.Tick)
            {
                EmoteStopTick = -1;
                Emote         = Emote.Normal;
            }

            character.Emote           = Emote;
            character.AmmoCount       = 0;
            character.Health          = 0;
            character.Armor           = 0;
            character.TriggeredEvents = Core.TriggeredEvents;

            character.Weapon     = ActiveWeapon;
            character.AttackTick = AttackTick;
            character.Direction  = Input.Direction;

            if (snappingClient == Player.ClientId ||
                snappingClient == -1 || !Config["SvStrictSpectateMode"] &&
                Player.ClientId == GameContext.Players[snappingClient].SpectatorId)
            {
                character.Health = Health;
                character.Armor  = Armor;

                if (ActiveWeapon == Weapon.Ninja)
                {
                    character.AmmoCount = NinjaStat.ActivationTick +
                                          ServerData.Weapons.Ninja.Duration * Server.TickSpeed / 1000;
                }
                else if (Weapons[(int)ActiveWeapon].Ammo > 0)
                {
                    character.AmmoCount = Weapons[(int)ActiveWeapon].Ammo;
                }
            }

            if (character.Emote == Emote.Normal)
            {
                if (250 - ((Server.Tick - LastAction) % 250) < 5)
                {
                    character.Emote = Emote.Blink;
                }
            }
        }