mirror of
https://github.com/Gurge44/EndlessHostRoles.git
synced 2026-10-19 15:51:58 +00:00
CNO: Hide before showing
This commit is contained in:
1 parent
a81a1b5089
commit
f687636cab
13 files changed
+40
-43
No files matched your search
@@ -29,7 +29,7 @@ public static class RRTimeTester
|
||||
Redo:
|
||||
HUDText = $"<#ffff00><size=200%>{otherSystemTypesName}</size></color>";
|
||||
PlayerControl.LocalPlayer.TP(map.Positions.GetValueOrDefault(systemTypes, systemTypes.GetRoomClass().transform.position));
|
||||
yield return new WaitForSeconds(0.5f);
|
||||
yield return new WaitForSecondsRealtime(0.5f);
|
||||
while (PlayerControl.LocalPlayer.IsInRoom(systemTypes)) yield return null;
|
||||
stopwatch.Restart();
|
||||
while (PlayerControl.LocalPlayer.onLadder || PlayerControl.LocalPlayer.inMovingPlat || !PlayerControl.LocalPlayer.IsInRoom(otherSystemTypes))
|
||||
|
||||
@@ -280,7 +280,7 @@ internal static class SoloPVP
|
||||
if (target.inVent || target.MyPhysics.Animations.IsPlayingEnterVentAnimation())
|
||||
{
|
||||
LateTask.New(() => target.MyPhysics.RpcExitVent(target.GetClosestVent().Id), 0.6f, log: false);
|
||||
yield return new WaitForSeconds(1.3f);
|
||||
yield return new WaitForSecondsRealtime(1.3f);
|
||||
}
|
||||
|
||||
while (target.inVent || target.inMovingPlat || target.onLadder || target.MyPhysics.Animations.IsPlayingAnyLadderAnimation() || target.MyPhysics.Animations.IsPlayingEnterVentAnimation())
|
||||
|
||||
+21
-23
@@ -259,7 +259,7 @@ namespace EHR
|
||||
catch { }
|
||||
}
|
||||
|
||||
protected void CreateNetObject(string sprite, Vector2 position)
|
||||
protected void CreateNetObject(string sprite, Vector2 position, IEnumerable<PlayerControl> hideFrom = null, PlayerControl onlyVisibleTo = null)
|
||||
{
|
||||
if (GameStates.IsEnded || !AmongUsClient.Instance.AmHost || TryReusePooledObject(sprite, position)) return;
|
||||
|
||||
@@ -396,6 +396,12 @@ namespace EHR
|
||||
|
||||
playerControl.CachedPlayerData = PlayerControl.LocalPlayer.Data;
|
||||
|
||||
if (hideFrom != null || onlyVisibleTo)
|
||||
{
|
||||
yield return new WaitForSecondsRealtime(0.3f);
|
||||
Hide(onlyVisibleTo ? Main.EnumerateAlivePlayerControls().Without(onlyVisibleTo) : hideFrom);
|
||||
}
|
||||
|
||||
yield return new WaitForSecondsRealtime(0.15f);
|
||||
|
||||
if (this is not ShapeshiftMenuElement)
|
||||
@@ -410,7 +416,7 @@ namespace EHR
|
||||
string visorId = PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].VisorId;
|
||||
var sender = CustomRpcSender.Create("CustomNetObject.CreateNetObject", SendOption.Reliable, log: false);
|
||||
MessageWriter writer = sender.stream;
|
||||
sender.StartMessage();
|
||||
sender.StartMessage(onlyVisibleTo ? onlyVisibleTo.OwnerId : -1);
|
||||
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].PlayerName = "<size=14><br></size>" + sprite;
|
||||
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].ColorId = 0;
|
||||
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].HatId = "";
|
||||
@@ -514,11 +520,10 @@ namespace EHR
|
||||
private readonly long SpawnTimeStamp;
|
||||
private bool Gone;
|
||||
|
||||
public TornadoObject(Vector2 position, IEnumerable<byte> visibleList)
|
||||
public TornadoObject(Vector2 position, PlayerControl tornado)
|
||||
{
|
||||
SpawnTimeStamp = Utils.TimeStamp;
|
||||
CreateNetObject("<line-height=97%><cspace=0.16em><#0000>WW</color><mark=#bababa>WWWW</mark><#0000>WW\nW</color><mark=#bababa>WW</mark><mark=#8c8c8c>WW</mark><mark=#bababa>WW</mark><#0000>W</color>\n<mark=#bababa>WW</mark><mark=#8c8c8c>WWWW</mark><mark=#bababa>WW</mark>\n<mark=#bababa>W</mark><mark=#8c8c8c>WW</mark><mark=#636363>WW</mark><mark=#8c8c8c>WW</mark><mark=#bababa>W</mark>\n<mark=#bababa>W</mark><mark=#8c8c8c>WW</mark><mark=#636363>WW</mark><mark=#8c8c8c>WW</mark><mark=#bababa>W</mark>\n<mark=#bababa>WW</mark><mark=#8c8c8c>WWWW</mark><mark=#bababa>WW</mark>\n<#0000>W</color><mark=#bababa>WW</mark><mark=#8c8c8c>WW</mark><mark=#bababa>WW</mark><#0000>W\nWW</color><mark=#bababa>WWWW</mark><#0000>WW", position);
|
||||
LateTask.New(() => Hide(Main.EnumerateAlivePlayerControls().ExceptBy(visibleList, x => x.PlayerId)), 0.4f);
|
||||
CreateNetObject("<line-height=97%><cspace=0.16em><#0000>WW</color><mark=#bababa>WWWW</mark><#0000>WW\nW</color><mark=#bababa>WW</mark><mark=#8c8c8c>WW</mark><mark=#bababa>WW</mark><#0000>W</color>\n<mark=#bababa>WW</mark><mark=#8c8c8c>WWWW</mark><mark=#bababa>WW</mark>\n<mark=#bababa>W</mark><mark=#8c8c8c>WW</mark><mark=#636363>WW</mark><mark=#8c8c8c>WW</mark><mark=#bababa>W</mark>\n<mark=#bababa>W</mark><mark=#8c8c8c>WW</mark><mark=#636363>WW</mark><mark=#8c8c8c>WW</mark><mark=#bababa>W</mark>\n<mark=#bababa>WW</mark><mark=#8c8c8c>WWWW</mark><mark=#bababa>WW</mark>\n<#0000>W</color><mark=#bababa>WW</mark><mark=#8c8c8c>WW</mark><mark=#bababa>WW</mark><#0000>W\nWW</color><mark=#bababa>WWWW</mark><#0000>WW", position, onlyVisibleTo: tornado);
|
||||
}
|
||||
|
||||
protected override void OnFixedUpdate()
|
||||
@@ -550,10 +555,9 @@ namespace EHR
|
||||
|
||||
internal sealed class PlayerDetector : CustomNetObject
|
||||
{
|
||||
public PlayerDetector(Vector2 position, List<byte> visibleList, out int id)
|
||||
public PlayerDetector(Vector2 position, PlayerControl druid, out int id)
|
||||
{
|
||||
CreateNetObject("<line-height=97%><cspace=0.16em><#0000>WW</color><mark=#33e6b0>W</mark><#0000>WW</color><mark=#33e6b0>W</mark><#0000>WW\nW</color><mark=#33e6b0>W</mark><#0000>WWWW</color><mark=#33e6b0>W</mark><#0000>W</color>\n<mark=#33e6b0>W</mark><#0000>WW</color><mark=#33e6b0>WW</mark><#0000>WW</color><mark=#33e6b0>W</mark>\n<mark=#33e6b0>W</mark><#0000>W</color><mark=#33e6b0>W</mark><mark=#000000>WW</mark><mark=#33e6b0>W</mark><#0000>W</color><mark=#33e6b0>W</mark>\n<mark=#33e6b0>W</mark><#0000>W</color><mark=#33e6b0>W</mark><mark=#000000>WW</mark><mark=#33e6b0>W</mark><#0000>W</color><mark=#33e6b0>W</mark>\n<mark=#33e6b0>W</mark><#0000>WW</color><mark=#33e6b0>WW</mark><#0000>WW</color><mark=#33e6b0>W</mark>\n<#0000>W</color><mark=#33e6b0>W</mark><#0000>WWWW</color><mark=#33e6b0>W</mark><#0000>W\nWW</color><mark=#33e6b0>W</mark><#0000>WW</color><mark=#33e6b0>W</mark><#0000>WW", position);
|
||||
LateTask.New(() => Hide(Main.EnumerateAlivePlayerControls().ExceptBy(visibleList, x => x.PlayerId)), 0.4f);
|
||||
CreateNetObject("<line-height=97%><cspace=0.16em><#0000>WW</color><mark=#33e6b0>W</mark><#0000>WW</color><mark=#33e6b0>W</mark><#0000>WW\nW</color><mark=#33e6b0>W</mark><#0000>WWWW</color><mark=#33e6b0>W</mark><#0000>W</color>\n<mark=#33e6b0>W</mark><#0000>WW</color><mark=#33e6b0>WW</mark><#0000>WW</color><mark=#33e6b0>W</mark>\n<mark=#33e6b0>W</mark><#0000>W</color><mark=#33e6b0>W</mark><mark=#000000>WW</mark><mark=#33e6b0>W</mark><#0000>W</color><mark=#33e6b0>W</mark>\n<mark=#33e6b0>W</mark><#0000>W</color><mark=#33e6b0>W</mark><mark=#000000>WW</mark><mark=#33e6b0>W</mark><#0000>W</color><mark=#33e6b0>W</mark>\n<mark=#33e6b0>W</mark><#0000>WW</color><mark=#33e6b0>WW</mark><#0000>WW</color><mark=#33e6b0>W</mark>\n<#0000>W</color><mark=#33e6b0>W</mark><#0000>WWWW</color><mark=#33e6b0>W</mark><#0000>W\nWW</color><mark=#33e6b0>W</mark><#0000>WW</color><mark=#33e6b0>W</mark><#0000>WW", position, onlyVisibleTo: druid);
|
||||
id = Id;
|
||||
}
|
||||
}
|
||||
@@ -562,12 +566,11 @@ namespace EHR
|
||||
{
|
||||
public readonly Adventurer.Resource Resource;
|
||||
|
||||
internal AdventurerItem(Vector2 position, Adventurer.Resource resource, IEnumerable<byte> visibleList)
|
||||
internal AdventurerItem(Vector2 position, Adventurer.Resource resource, PlayerControl adventurer)
|
||||
{
|
||||
Resource = resource;
|
||||
(char Icon, Color Color) data = Adventurer.ResourceDisplayData[resource];
|
||||
CreateNetObject($"<size=300%><font=\"VCR SDF\"><line-height=67%>{Utils.ColorString(data.Color, data.Icon.ToString())}</line-height></font></size>", position);
|
||||
LateTask.New(() => Hide(Main.EnumerateAlivePlayerControls().ExceptBy(visibleList, x => x.PlayerId)), 0.4f);
|
||||
CreateNetObject($"<size=300%><font=\"VCR SDF\"><line-height=67%>{Utils.ColorString(data.Color, data.Icon.ToString())}</line-height></font></size>", position, onlyVisibleTo: adventurer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -575,8 +578,7 @@ namespace EHR
|
||||
{
|
||||
internal Toilet(Vector2 position, IEnumerable<PlayerControl> hideList)
|
||||
{
|
||||
CreateNetObject("<line-height=97%><cspace=0.16em><#0000>W</color><mark=#e6e6e6>WWWWWWWW</mark><#0000>W</color>\n<mark=#e6e6e6>W</mark><mark=#d3d4ce>WWWWWWWW</mark><mark=#e6e6e6>W</mark>\n<mark=#e6e6e6>W</mark><mark=#d3d4ce>WWWWWWWW</mark><mark=#e6e6e6>W</mark>\n<#0000>W</color><mark=#e6e6e6>W</mark><mark=#d3d4ce>WWWWWW</mark><mark=#e6e6e6>W</mark><#0000>W\nW</color><mark=#e6e6e6>WW</mark><mark=#d3d4ce>W</mark><mark=#dedede>WW</mark><mark=#d3d4ce>W</mark><mark=#e6e6e6>WW</mark><#0000>W\nW</color><mark=#bfbfbf>W</mark><mark=#454545>W</mark><mark=#333333>WWWWWW</mark><mark=#bfbfbf>W</mark>\n<#0000>W</color><mark=#bfbfbf>WW</mark><mark=#454545>WWWWWW</mark><mark=#bfbfbf>W</mark>\n<#0000>WW</color><mark=#bfbfbf>WWWWWWWW</mark>\n<#0000>WWW</color><mark=#dedede>WWWW</mark><#0000>WWW\nWWWW</color><mark=#dedede>WW</mark><#0000>WWWW", position);
|
||||
LateTask.New(() => Hide(hideList), 0.4f);
|
||||
CreateNetObject("<line-height=97%><cspace=0.16em><#0000>W</color><mark=#e6e6e6>WWWWWWWW</mark><#0000>W</color>\n<mark=#e6e6e6>W</mark><mark=#d3d4ce>WWWWWWWW</mark><mark=#e6e6e6>W</mark>\n<mark=#e6e6e6>W</mark><mark=#d3d4ce>WWWWWWWW</mark><mark=#e6e6e6>W</mark>\n<#0000>W</color><mark=#e6e6e6>W</mark><mark=#d3d4ce>WWWWWW</mark><mark=#e6e6e6>W</mark><#0000>W\nW</color><mark=#e6e6e6>WW</mark><mark=#d3d4ce>W</mark><mark=#dedede>WW</mark><mark=#d3d4ce>W</mark><mark=#e6e6e6>WW</mark><#0000>W\nW</color><mark=#bfbfbf>W</mark><mark=#454545>W</mark><mark=#333333>WWWWWW</mark><mark=#bfbfbf>W</mark>\n<#0000>W</color><mark=#bfbfbf>WW</mark><mark=#454545>WWWWWW</mark><mark=#bfbfbf>W</mark>\n<#0000>WW</color><mark=#bfbfbf>WWWWWWWW</mark>\n<#0000>WWW</color><mark=#dedede>WWWW</mark><#0000>WWW\nWWWW</color><mark=#dedede>WW</mark><#0000>WWWW", position, hideList);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -596,10 +598,9 @@ namespace EHR
|
||||
|
||||
internal sealed class SprayedArea : CustomNetObject
|
||||
{
|
||||
public SprayedArea(Vector2 position, IEnumerable<byte> visibleList)
|
||||
public SprayedArea(Vector2 position, PlayerControl sprayer)
|
||||
{
|
||||
CreateNetObject("<line-height=97%><cspace=0.16em><#0000>WW</color><mark=#ffd000>WW</mark><#0000>WW\nW</color><mark=#ffd000>WWWW</mark><#0000>W</color>\n<mark=#ffd000>WWWWWW</mark>\n<mark=#ffd000>WWWWWW</mark>\n<#0000>W</color><mark=#ffd000>WWWW</mark><#0000>W\nWW</color><mark=#ffd000>WW</mark><#0000>WW", position);
|
||||
LateTask.New(() => Hide(Main.EnumerateAlivePlayerControls().ExceptBy(visibleList, x => x.PlayerId)), 0.4f);
|
||||
CreateNetObject("<line-height=97%><cspace=0.16em><#0000>WW</color><mark=#ffd000>WW</mark><#0000>WW\nW</color><mark=#ffd000>WWWW</mark><#0000>W</color>\n<mark=#ffd000>WWWWWW</mark>\n<mark=#ffd000>WWWWWW</mark>\n<#0000>W</color><mark=#ffd000>WWWW</mark><#0000>W\nWW</color><mark=#ffd000>WW</mark><#0000>WW", position, onlyVisibleTo: sprayer);
|
||||
}
|
||||
|
||||
public override void OnMeeting()
|
||||
@@ -612,8 +613,7 @@ namespace EHR
|
||||
{
|
||||
public CatcherTrap(Vector2 position, PlayerControl catcher)
|
||||
{
|
||||
CreateNetObject("<line-height=97%><cspace=0.16em><#0000>WW</color><mark=#ccffda>WW</mark><#0000>WW\nW</color><mark=#ccffda>WWWW</mark><#0000>W</color>\n<mark=#ccffda>WWWWWW</mark>\n<mark=#ccffda>WWWWWW</mark>\n<#0000>W</color><mark=#ccffda>WWWW</mark><#0000>W\nWW</color><mark=#ccffda>WW</mark><#0000>WW", position);
|
||||
LateTask.New(() => Hide(Main.EnumerateAlivePlayerControls().Without(catcher)), 0.4f);
|
||||
CreateNetObject("<line-height=97%><cspace=0.16em><#0000>WW</color><mark=#ccffda>WW</mark><#0000>WW\nW</color><mark=#ccffda>WWWW</mark><#0000>W</color>\n<mark=#ccffda>WWWWWW</mark>\n<mark=#ccffda>WWWWWW</mark>\n<#0000>W</color><mark=#ccffda>WWWW</mark><#0000>W\nWW</color><mark=#ccffda>WW</mark><#0000>WW", position, onlyVisibleTo: catcher);
|
||||
}
|
||||
|
||||
public override void OnMeeting()
|
||||
@@ -642,8 +642,7 @@ namespace EHR
|
||||
{
|
||||
public SoulObject(Vector2 position, PlayerControl whisperer)
|
||||
{
|
||||
CreateNetObject("<size=80%><line-height=97%><cspace=0.16em><#0000>WW</color><mark=#fcfcfc>WWW</mark><#0000>W\nW</color><mark=#fcfcfc>WWWWW</mark>\n<mark=#fcfcfc>WWWW</mark><mark=#cfcfcf>WW</mark>\n<mark=#fcfcfc>WWWWWW</mark>\n<#0000>W</color><mark=#fcfcfc>WWWWW</mark>\n<#0000>W</color><mark=#fcfcfc>WWW</mark><#0000>W</color><mark=#fcfcfc>W", position);
|
||||
LateTask.New(() => Hide(Main.EnumerateAlivePlayerControls().Without(whisperer)), 0.4f);
|
||||
CreateNetObject("<size=80%><line-height=97%><cspace=0.16em><#0000>WW</color><mark=#fcfcfc>WWW</mark><#0000>W\nW</color><mark=#fcfcfc>WWWWW</mark>\n<mark=#fcfcfc>WWWW</mark><mark=#cfcfcf>WW</mark>\n<mark=#fcfcfc>WWWWWW</mark>\n<#0000>W</color><mark=#fcfcfc>WWWWW</mark>\n<#0000>W</color><mark=#fcfcfc>WWW</mark><#0000>W</color><mark=#fcfcfc>W", position, onlyVisibleTo: whisperer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -875,10 +874,9 @@ namespace EHR
|
||||
|
||||
internal sealed class ShapeshiftMenuElement : CustomNetObject
|
||||
{
|
||||
public ShapeshiftMenuElement(byte visibleTo)
|
||||
public ShapeshiftMenuElement(PlayerControl guesser)
|
||||
{
|
||||
CreateNetObject(string.Empty, new Vector2(0f, 0f));
|
||||
LateTask.New(() => Hide(Main.EnumeratePlayerControls().Where(x => x.PlayerId != visibleTo)), 0.4f);
|
||||
CreateNetObject(string.Empty, new Vector2(0f, 0f), onlyVisibleTo: guesser);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ namespace EHR;
|
||||
internal static class EAC
|
||||
{
|
||||
public static int DeNum;
|
||||
public static readonly HashSet<string> InvalidReports = [];
|
||||
public static readonly Dictionary<byte, Stopwatch> TimeSinceLastTaskCompletion = [];
|
||||
|
||||
public static void WarnHost(int denum = 1)
|
||||
|
||||
@@ -1498,7 +1498,7 @@ public static class GuessManager
|
||||
cno = ExistingCNOs[i - alivePlayerControlsLength];
|
||||
else
|
||||
{
|
||||
cno = new ShapeshiftMenuElement(guesserId);
|
||||
cno = new ShapeshiftMenuElement(guesser);
|
||||
ExistingCNOs.Add(cno);
|
||||
}
|
||||
|
||||
|
||||
@@ -4262,7 +4262,6 @@ public static class Utils
|
||||
}
|
||||
|
||||
LateTask.New(() => Asthmatic.RunChecks = true, 2f, log: false);
|
||||
EAC.InvalidReports.Clear();
|
||||
|
||||
CustomNetObject.AfterMeeting();
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ internal class Tornado : RoleBase
|
||||
long now = TimeStamp;
|
||||
Tornados.TryAdd(info, now);
|
||||
SendRPCAddTornado(true, info.Location, info.RoomName, now);
|
||||
_ = new TornadoObject(info.Location, [pc.PlayerId]);
|
||||
_ = new TornadoObject(info.Location, pc);
|
||||
}
|
||||
|
||||
public override void OnCheckPlayerPosition(PlayerControl pc)
|
||||
|
||||
@@ -144,7 +144,7 @@ public class Druid : RoleBase
|
||||
(Vector2 location, string roomName) = pc.GetPositionInfo();
|
||||
Triggers.TryAdd(location, roomName);
|
||||
SendRPCAddTrigger(true, pc.PlayerId, location, roomName);
|
||||
_ = new PlayerDetector(location, [pc.PlayerId], out int id);
|
||||
_ = new PlayerDetector(location, pc, out int id);
|
||||
TriggerIds.TryAdd(location, id);
|
||||
}
|
||||
else
|
||||
@@ -156,7 +156,7 @@ public class Druid : RoleBase
|
||||
(Vector2 location, string roomName) = pc.GetPositionInfo();
|
||||
Triggers.TryAdd(location, roomName);
|
||||
SendRPCAddTrigger(true, id, location, roomName);
|
||||
_ = new PlayerDetector(location, [pc.PlayerId], out int oid);
|
||||
_ = new PlayerDetector(location, pc, out int oid);
|
||||
TriggerIds.TryAdd(location, oid);
|
||||
}, onTick: () => pc.Notify(string.Format(GetString("DruidTimeLeft"), (int)Math.Ceiling(DelayTimer.Remaining.TotalSeconds)), 2f, overrideAll: true), onCanceled: () => DelayTimer = null);
|
||||
}
|
||||
|
||||
@@ -298,7 +298,7 @@ internal class Adventurer : RoleBase
|
||||
Vector2 pos = pc.Pos();
|
||||
LocateArrow.Add(AdventurerPC.PlayerId, pos);
|
||||
ResourceLocations[Resource.Random] = pos;
|
||||
_ = new AdventurerItem(pos, Resource.Random, [AdventurerPC.PlayerId]);
|
||||
_ = new AdventurerItem(pos, Resource.Random, AdventurerPC);
|
||||
LastRandomResourceTimeStamp = now;
|
||||
Utils.NotifyRoles(SpecifySeer: AdventurerPC, SpecifyTarget: AdventurerPC);
|
||||
}
|
||||
@@ -330,7 +330,7 @@ internal class Adventurer : RoleBase
|
||||
|
||||
LocateArrow.Add(AdventurerPC.PlayerId, pcPos);
|
||||
ResourceLocations[Resource.Grouping] = pcPos;
|
||||
_ = new AdventurerItem(pcPos, Resource.Grouping, [AdventurerPC.PlayerId]);
|
||||
_ = new AdventurerItem(pcPos, Resource.Grouping, AdventurerPC);
|
||||
LastGroupingResourceTimeStamp = now;
|
||||
Utils.NotifyRoles(SpecifySeer: AdventurerPC, SpecifyTarget: AdventurerPC);
|
||||
}
|
||||
@@ -380,7 +380,7 @@ internal class Adventurer : RoleBase
|
||||
Vector2 pos = shapeshifter.Pos();
|
||||
av.ResourceLocations[Resource.ShapeshiftSkin] = pos;
|
||||
HideObject(Resource.ShapeshiftSkin);
|
||||
_ = new AdventurerItem(pos, Resource.ShapeshiftSkin, [av.AdventurerPC.PlayerId]);
|
||||
_ = new AdventurerItem(pos, Resource.ShapeshiftSkin, av.AdventurerPC);
|
||||
}
|
||||
|
||||
public static void OnAnyoneDead(PlayerControl target)
|
||||
@@ -392,7 +392,7 @@ internal class Adventurer : RoleBase
|
||||
Vector2 pos = target.Pos();
|
||||
av.ResourceLocations[Resource.DeadBody] = pos;
|
||||
HideObject(Resource.DeadBody);
|
||||
_ = new AdventurerItem(pos, Resource.DeadBody, [av.AdventurerPC.PlayerId]);
|
||||
_ = new AdventurerItem(pos, Resource.DeadBody, av.AdventurerPC);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -224,7 +224,7 @@ public class Swapper : RoleBase
|
||||
{
|
||||
if (Starspawn.IsDayBreak) return;
|
||||
|
||||
if (CNO == null) CNO = CanSwapSelf.GetBool() ? new ShapeshiftMenuElement(shapeshifter.PlayerId) : null;
|
||||
if (CNO == null) CNO = CanSwapSelf.GetBool() ? new ShapeshiftMenuElement(shapeshifter) : null;
|
||||
else if (CNO.playerControl.NetId == target.NetId) target = shapeshifter;
|
||||
|
||||
SwapMsg(shapeshifter, $"/sw {target.PlayerId}");
|
||||
|
||||
@@ -73,7 +73,6 @@ internal class TimeMaster : RoleBase
|
||||
public override void Add(byte playerId)
|
||||
{
|
||||
On = true;
|
||||
BackTrack = [];
|
||||
DesyncCommsActive = false;
|
||||
playerId.SetAbilityUseLimit(TimeMasterMaxUses.GetFloat());
|
||||
}
|
||||
@@ -83,6 +82,8 @@ internal class TimeMaster : RoleBase
|
||||
On = false;
|
||||
Rewinding = false;
|
||||
RevivedPlayers = [];
|
||||
TargetPosition = [];
|
||||
BackTrack = [];
|
||||
}
|
||||
|
||||
public override void ApplyGameOptions(IGameOptions opt, byte playerId)
|
||||
@@ -163,7 +164,7 @@ internal class TimeMaster : RoleBase
|
||||
foreach ((byte playerId, Vector2 pos) in track)
|
||||
{
|
||||
PlayerControl player = playerId.GetPlayer();
|
||||
if (player == null || !player.IsAlive()) continue;
|
||||
if (!player || !player.IsAlive()) continue;
|
||||
|
||||
player.TP(pos);
|
||||
}
|
||||
@@ -182,6 +183,7 @@ internal class TimeMaster : RoleBase
|
||||
ps.Player.RpcRevive();
|
||||
ps.Player.TP(deadBody.TruePosition);
|
||||
ps.Player.Notify(Translator.GetString("RevivedByTimeMaster"), 15f);
|
||||
RevivedPlayers.Add(deadBody.ParentId);
|
||||
}
|
||||
|
||||
if (TimeMasterRevivedKillerAlert.GetBool())
|
||||
@@ -260,7 +262,6 @@ internal class TimeMaster : RoleBase
|
||||
{
|
||||
DesyncCommsActive = false;
|
||||
hasValue = true;
|
||||
activateSabComms = false;
|
||||
}
|
||||
|
||||
if (!hasValue) return;
|
||||
|
||||
@@ -138,7 +138,7 @@ internal class Sprayer : RoleBase
|
||||
if (!IsEnable || SprayerId.GetAbilityUseLimit() <= 0 || SprayerPC.HasAbilityCD()) return;
|
||||
|
||||
Vector2 pos = SprayerPC.Pos();
|
||||
Traps[pos] = new(pos, [SprayerId]);
|
||||
Traps[pos] = new(pos, SprayerPC);
|
||||
SprayerPC.RpcRemoveAbilityUse();
|
||||
|
||||
if (SprayerId.GetAbilityUseLimit() > 0) SprayerPC.AddAbilityCD(CD.GetInt());
|
||||
|
||||
@@ -44,9 +44,9 @@ public class Magistrate : RoleBase
|
||||
|
||||
System.Collections.IEnumerator Coroutine()
|
||||
{
|
||||
while (GameStates.IsMeeting || ExileController.Instance || AntiBlackout.SkipTasks) yield return new WaitForSeconds(5f);
|
||||
yield return new WaitForSeconds(1f);
|
||||
while (GameStates.IsMeeting || ExileController.Instance || AntiBlackout.SkipTasks) yield return new WaitForSeconds(2f);
|
||||
while (GameStates.IsMeeting || ExileController.Instance || AntiBlackout.SkipTasks) yield return new WaitForSecondsRealtime(5f);
|
||||
yield return new WaitForSecondsRealtime(1f);
|
||||
while (GameStates.IsMeeting || ExileController.Instance || AntiBlackout.SkipTasks) yield return new WaitForSecondsRealtime(2f);
|
||||
if (GameStates.IsEnded || !GameStates.InGame) yield break;
|
||||
AfterMeetingTasks();
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user