reduce ND network pressure

This commit is contained in:
Gurge44 committed 2026-04-01 10:19:50 +02:00
1 parent 1de39390b5
commit f9213f7450
3 files changed
+31 -44

No files matched your search

+3 -2
View File
@@ -361,7 +361,7 @@ public static class NaturalDisasters
if (float.IsNaN(naturalDisaster.SpawnTimer))
{
Type type = AllDisasters.Find(d => d.Name == naturalDisaster.DisasterName);
LateTask.New(() => Activator.CreateInstance(type, naturalDisaster.Position, naturalDisaster), 1f, log: false);
LateTask.New(() => Activator.CreateInstance(type, naturalDisaster.Position, naturalDisaster), Utils.CalculatePingDelay(), log: false);
PreparingDisasters.Remove(naturalDisaster);
}
}
@@ -757,7 +757,8 @@ public static class NaturalDisasters
if (!hit.GetPlainShipRoom())
{
_ = new Lightning(hit);
if (GameStates.CurrentServerType != GameStates.ServerType.Vanilla)
_ = new Lightning(hit);
foreach (PlayerControl pc in Main.EnumerateAlivePlayerControls())
{
+22 -39
View File
@@ -25,12 +25,12 @@ namespace EHR
protected int Id;
public PlayerControl playerControl;
public Vector2 Position;
protected string Sprite;
private string Sprite;
public void RpcChangeSprite(string sprite)
{
if (!AmongUsClient.Instance.AmHost) return;
if (this is not DisasterWarningTimer) Logger.Info($" Change Custom Net Object {GetType().Name} (ID {Id}) sprite", "CNO.RpcChangeSprite");
if (this is not NaturalDisaster nd || nd.SpawnTimer <= 0f) Logger.Info($" Change Custom Net Object {GetType().Name} (ID {Id}) sprite", "CNO.RpcChangeSprite");
Sprite = sprite;
@@ -40,7 +40,8 @@ namespace EHR
string skinId = PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].SkinId;
string petId = PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].PetId;
string visorId = PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].VisorId;
var sender = CustomRpcSender.Create("CustomNetObject.RpcChangeSprite", this is BedWarsItemGenerator ? SendOption.None : SendOption.Reliable, log: false);
bool notImportant = this is BedWarsItemGenerator || (this is NaturalDisaster { SpawnTimer: > 1f } && Options.CurrentGameMode != CustomGameMode.NaturalDisasters && GameStates.CurrentServerType == GameStates.ServerType.Vanilla);
var sender = CustomRpcSender.Create("CustomNetObject.RpcChangeSprite", notImportant ? SendOption.None : SendOption.Reliable, log: false);
MessageWriter writer = sender.stream;
sender.StartMessage();
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].PlayerName = "<size=14><br></size>" + sprite;
@@ -538,72 +539,54 @@ namespace EHR
}
}
internal sealed class DisasterWarningTimer : CustomNetObject
{
public DisasterWarningTimer(Vector2 position, float time, string disaster)
{
CreateNetObject($"<size=250%>{Math.Ceiling(time):N0}</size>\n{disaster}", position);
Disaster = disaster;
Timer = time;
}
private string Disaster { get; }
private float Timer { get; set; }
private int Time => (int)Math.Ceiling(Timer);
protected override void OnFixedUpdate()
{
base.OnFixedUpdate();
int oldTime = Time;
if (oldTime <= 0)
{
Despawn();
return;
}
Timer -= UnityEngine.Time.fixedDeltaTime;
if (Time != oldTime) RpcChangeSprite($"<size=250%>{Time:N0}</size>\n{Disaster}");
}
}
public sealed class NaturalDisaster : CustomNetObject
{
public NaturalDisaster(Vector2 position, float time, string sprite, string disasterName, SystemTypes? room)
{
string name = Translator.GetString($"ND_{disasterName}");
string warning = $"<size=250%>{Math.Ceiling(time):N0}</size>\n{name}";
if (room.HasValue)
{
name = $"<#ff0000>{name}</color>";
warning = $"<#ff4444>{warning}</color>";
Main.EnumerateAlivePlayerControls().DoIf(x => x.IsInRoom(room.Value), x => x.ReactorFlash());
}
WarningTimer = new(position, time, name);
SpawnTimer = time;
Sprite = sprite;
DisasterSprite = sprite;
DisasterName = disasterName;
DisasterNameTranslated = name;
Room = room;
CreateNetObject(warning, position);
}
public SystemTypes? Room { get; }
public string DisasterName { get; }
public float SpawnTimer { get; private set; }
private DisasterWarningTimer WarningTimer { get; }
private string DisasterSprite { get; }
private int TimeInt => (int)Math.Ceiling(SpawnTimer);
private string DisasterNameTranslated { get; }
public void Update()
{
if (float.IsNaN(SpawnTimer)) return;
int oldTime = TimeInt;
SpawnTimer -= Time.fixedDeltaTime;
if (SpawnTimer <= 0f)
{
WarningTimer.Despawn();
CreateNetObject(Sprite, WarningTimer.Position);
RpcChangeSprite(DisasterSprite);
SpawnTimer = float.NaN;
}
else
{
int newTime = TimeInt;
if (oldTime == newTime) return;
RpcChangeSprite($"<size=250%>{newTime:N0}</size>\n{DisasterNameTranslated}");
}
}
}
+6 -3
View File
@@ -792,9 +792,12 @@ internal static class MurderPlayerPatch
target.SetRealKiller(killer, true);
CountAlivePlayers(true);
__instance.MarkDirtySettings();
target.MarkDirtySettings();
Main.Instance.StartCoroutine(NotifyEveryoneAsync(false));
if (Options.CurrentGameMode == CustomGameMode.Standard)
{
__instance.MarkDirtySettings();
target.MarkDirtySettings();
Main.Instance.StartCoroutine(NotifyEveryoneAsync(false));
}
Statistics.OnMurder(killer, target);
}