mirror of
https://github.com/Gurge44/EndlessHostRoles.git
synced 2026-10-20 01:46:25 +00:00
reduce ND network pressure
This commit is contained in:
1 parent
1de39390b5
commit
f9213f7450
3 files changed
+31
-44
No files matched your search
@@ -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
@@ -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}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user