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