mirror of
https://github.com/Gurge44/EndlessHostRoles.git
synced 2026-10-20 01:46:25 +00:00
Start Toilet Master
This commit is contained in:
1 parent
bf8d30e0be
commit
9b7012c36d
5 files changed
+142
-11
No files matched your search
@@ -204,6 +204,7 @@ public enum CustomRoles
|
||||
Tether,
|
||||
TimeManager,
|
||||
TimeMaster,
|
||||
ToiletMaster,
|
||||
Tornado,
|
||||
Tracker,
|
||||
Transmitter,
|
||||
|
||||
+20
-11
@@ -151,7 +151,7 @@ namespace EHR
|
||||
Duration = duration;
|
||||
Timer = -0.1f;
|
||||
Frame = 0;
|
||||
CreateNetObject($"<size={Size}><line-height=85%><font=\"VCR SDF\"><br><#0000>███<#ff0000>█<#0000>███<br><#ff0000>█<#0000>█<#ff0000>███<#0000>█<#ff0000>█<br>█<#ff8000>██<#ffff00>█<#ff8000>██<#ffff00>█<br>██<#ff8000>█<#ffff00>█<#ff8000>█<#ffff00>██<br><#ff8000>█<#ffff80>██<#ffff00>█<#ffff80>██<#ff8000>█<br><#0000>█<#ff8000>█<#ffff80>███<#ff8000>█<#0000>█<br>██<#ff8000>███<#0000>██", position);
|
||||
CreateNetObject($"<size={Size}><line-height=72%><font=\"VCR SDF\"><br><#0000>███<#ff0000>█<#0000>███<br><#ff0000>█<#0000>█<#ff0000>███<#0000>█<#ff0000>█<br>█<#ff8000>██<#ffff00>█<#ff8000>██<#ffff00>█<br>██<#ff8000>█<#ffff00>█<#ff8000>█<#ffff00>██<br><#ff8000>█<#ffff80>██<#ffff00>█<#ffff80>██<#ff8000>█<br><#0000>█<#ff8000>█<#ffff80>███<#ff8000>█<#0000>█<br>██<#ff8000>███<#0000>██", position);
|
||||
}
|
||||
|
||||
protected override void OnFixedUpdate()
|
||||
@@ -159,25 +159,25 @@ namespace EHR
|
||||
Timer += Time.deltaTime;
|
||||
if (Timer >= Duration / 5f && Frame == 0)
|
||||
{
|
||||
RpcChangeSprite($"<size={Size}><line-height=85%><font=\"VCR SDF\"><br><#0000>█<#ff0000>█<#0000>█<#ff0000>█<#0000>█<#ff0000>█<#0000>█<br><#ff0000>█<#ff8000>█<#ff0000>█<#ff8000>█<#ff0000>█<#ff8000>█<#ff0000>█<br><#ff8000>██<#ffff00>█<#ff8000>█<#ffff00>█<#ff8000>██<br><#ffff00>███████<br><#ff8000>█<#ffff00>█████<#ff8000>█<br>██<#ffff00>█<#ff8000>█<#ffff00>█<#ff8000>██<br><#ff0000>█<#0000>█<#ff8000>█<#ff0000>█<#ff8000>█<#0000>█<#ff0000>█");
|
||||
RpcChangeSprite($"<size={Size}><line-height=72%><font=\"VCR SDF\"><br><#0000>█<#ff0000>█<#0000>█<#ff0000>█<#0000>█<#ff0000>█<#0000>█<br><#ff0000>█<#ff8000>█<#ff0000>█<#ff8000>█<#ff0000>█<#ff8000>█<#ff0000>█<br><#ff8000>██<#ffff00>█<#ff8000>█<#ffff00>█<#ff8000>██<br><#ffff00>███████<br><#ff8000>█<#ffff00>█████<#ff8000>█<br>██<#ffff00>█<#ff8000>█<#ffff00>█<#ff8000>██<br><#ff0000>█<#0000>█<#ff8000>█<#ff0000>█<#ff8000>█<#0000>█<#ff0000>█");
|
||||
Frame = 1;
|
||||
}
|
||||
|
||||
if (Timer >= Duration / 5f * 2f && Frame == 1)
|
||||
{
|
||||
RpcChangeSprite($"<size={Size}><line-height=85%><font=\"VCR SDF\"><br><#0000>█<#c0c0c0>█<#ff0000>█<#000000>█<#ff0000>█<#c0c0c0>█<#0000>█<br><#c0c0c0>█<#808080>█<#ff0000>█<#ff8000>█<#ff0000>█<#c0c0c0>██<br><#ff0000>██<#ff8000>█<#ffff00>█<#ff8000>█<#ff0000>██<br><#c0c0c0>█<#ff8000>█<#ffff00>█<#ffff80>█<#ffff00>█<#ff8000>█<#808080>█<br><#ff0000>██<#ff8000>█<#ffff00>█<#ff8000>█<#ff0000>██<br><#c0c0c0>█<#808080>█<#ff0000>█<#ff8000>█<#ff0000>█<#000000>█<#c0c0c0>█<br><#0000>█<#c0c0c0>█<#ff0000>█<#c0c0c0>█<#ff0000>█<#c0c0c0>█<#0000>█");
|
||||
RpcChangeSprite($"<size={Size}><line-height=72%><font=\"VCR SDF\"><br><#0000>█<#c0c0c0>█<#ff0000>█<#000000>█<#ff0000>█<#c0c0c0>█<#0000>█<br><#c0c0c0>█<#808080>█<#ff0000>█<#ff8000>█<#ff0000>█<#c0c0c0>██<br><#ff0000>██<#ff8000>█<#ffff00>█<#ff8000>█<#ff0000>██<br><#c0c0c0>█<#ff8000>█<#ffff00>█<#ffff80>█<#ffff00>█<#ff8000>█<#808080>█<br><#ff0000>██<#ff8000>█<#ffff00>█<#ff8000>█<#ff0000>██<br><#c0c0c0>█<#808080>█<#ff0000>█<#ff8000>█<#ff0000>█<#000000>█<#c0c0c0>█<br><#0000>█<#c0c0c0>█<#ff0000>█<#c0c0c0>█<#ff0000>█<#c0c0c0>█<#0000>█");
|
||||
Frame = 2;
|
||||
}
|
||||
|
||||
if (Timer >= Duration / 5f * 3f && Frame == 2)
|
||||
{
|
||||
RpcChangeSprite($"<size={Size}><line-height=85%><font=\"VCR SDF\"><br><#ff0000>█<#ff8000>█<#0000>█<#808080>█<#0000>█<#ff8000>█<#ff0000>█<br><#ff8000>█<#0000>█<#ffff00>█<#c0c0c0>█<#ffff00>█<#0000>█<#ff8000>█<br><#0000>█<#ffff00>█<#c0c0c0>███<#ffff00>█<#0000>█<br><#808080>█<#c0c0c0>█████<#808080>█<br><#0000>█<#ffff00>█<#c0c0c0>███<#ffff00>█<#0000>█<br><#ff8000>█<#0000>█<#ffff00>█<#c0c0c0>█<#ffff00>█<#0000>█<#ff8000>█<br><#ff0000>█<#ff8000>█<#0000>█<#808080>█<#0000>█<#ff8000>█<#ff0000>█");
|
||||
RpcChangeSprite($"<size={Size}><line-height=72%><font=\"VCR SDF\"><br><#ff0000>█<#ff8000>█<#0000>█<#808080>█<#0000>█<#ff8000>█<#ff0000>█<br><#ff8000>█<#0000>█<#ffff00>█<#c0c0c0>█<#ffff00>█<#0000>█<#ff8000>█<br><#0000>█<#ffff00>█<#c0c0c0>███<#ffff00>█<#0000>█<br><#808080>█<#c0c0c0>█████<#808080>█<br><#0000>█<#ffff00>█<#c0c0c0>███<#ffff00>█<#0000>█<br><#ff8000>█<#0000>█<#ffff00>█<#c0c0c0>█<#ffff00>█<#0000>█<#ff8000>█<br><#ff0000>█<#ff8000>█<#0000>█<#808080>█<#0000>█<#ff8000>█<#ff0000>█");
|
||||
Frame = 3;
|
||||
}
|
||||
|
||||
if (Timer >= Duration / 5f * 4f && Frame == 3)
|
||||
{
|
||||
RpcChangeSprite($"<size={Size}><line-height=85%><font=\"VCR SDF\"><br><#0000>█<#808080>█<#0000>██<#c0c0c0>█<#0000>█<#808080>█<br><#ffff00>█<#0000>██<#c0c0c0>█<#0000>█<#808080>█<#0000>█<br>█<#808080>█<#c0c0c0>████<#0000>█<br>█<#c0c0c0>██████<br>█<#0000>█<#c0c0c0>███<#808080>█<#0000>█<br>█<#c0c0c0>█<#0000>█<#c0c0c0>█<#0000>█<#c0c0c0>██<br><#808080>█<#0000>█<#c0c0c0>█<#0000>█<#808080>█<#0000>█<#ffff00>█");
|
||||
RpcChangeSprite($"<size={Size}><line-height=72%><font=\"VCR SDF\"><br><#0000>█<#808080>█<#0000>██<#c0c0c0>█<#0000>█<#808080>█<br><#ffff00>█<#0000>██<#c0c0c0>█<#0000>█<#808080>█<#0000>█<br>█<#808080>█<#c0c0c0>████<#0000>█<br>█<#c0c0c0>██████<br>█<#0000>█<#c0c0c0>███<#808080>█<#0000>█<br>█<#c0c0c0>█<#0000>█<#c0c0c0>█<#0000>█<#c0c0c0>██<br><#808080>█<#0000>█<#c0c0c0>█<#0000>█<#808080>█<#0000>█<#ffff00>█");
|
||||
Frame = 4;
|
||||
}
|
||||
|
||||
@@ -195,7 +195,7 @@ namespace EHR
|
||||
private int State;
|
||||
private float Timer;
|
||||
|
||||
public TrapArea(float radius, float waitDuration, Vector2 position, List<byte> visibleList)
|
||||
public TrapArea(float radius, float waitDuration, Vector2 position, IEnumerable<byte> visibleList)
|
||||
{
|
||||
Size = radius * 25f;
|
||||
Timer = -0.1f;
|
||||
@@ -227,10 +227,10 @@ namespace EHR
|
||||
private readonly long SpawnTimeStamp;
|
||||
private bool Gone;
|
||||
|
||||
public TornadoObject(Vector2 position, List<byte> visibleList)
|
||||
public TornadoObject(Vector2 position, IEnumerable<byte> visibleList)
|
||||
{
|
||||
SpawnTimeStamp = Utils.TimeStamp;
|
||||
CreateNetObject("<size=100%><font=\"VCR SDF\"><line-height=85%><alpha=#00>\u2588<alpha=#00>\u2588<#bababa>\u2588<#bababa>\u2588<#bababa>\u2588<#bababa>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<br><alpha=#00>\u2588<#bababa>\u2588<#bababa>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#bababa>\u2588<#bababa>\u2588<alpha=#00>\u2588<br><#bababa>\u2588<#bababa>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#bababa>\u2588<#bababa>\u2588<br><#bababa>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#636363>\u2588<#636363>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#bababa>\u2588<br><#bababa>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#636363>\u2588<#636363>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#bababa>\u2588<br><#bababa>\u2588<#bababa>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#bababa>\u2588<#bababa>\u2588<br><alpha=#00>\u2588<#bababa>\u2588<#bababa>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#bababa>\u2588<#bababa>\u2588<alpha=#00>\u2588<br><alpha=#00>\u2588<alpha=#00>\u2588<#bababa>\u2588<#bababa>\u2588<#bababa>\u2588<#bababa>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<br></color></line-height></font></size>", position);
|
||||
CreateNetObject("<size=100%><font=\"VCR SDF\"><line-height=72%><alpha=#00>\u2588<alpha=#00>\u2588<#bababa>\u2588<#bababa>\u2588<#bababa>\u2588<#bababa>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<br><alpha=#00>\u2588<#bababa>\u2588<#bababa>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#bababa>\u2588<#bababa>\u2588<alpha=#00>\u2588<br><#bababa>\u2588<#bababa>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#bababa>\u2588<#bababa>\u2588<br><#bababa>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#636363>\u2588<#636363>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#bababa>\u2588<br><#bababa>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#636363>\u2588<#636363>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#bababa>\u2588<br><#bababa>\u2588<#bababa>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#bababa>\u2588<#bababa>\u2588<br><alpha=#00>\u2588<#bababa>\u2588<#bababa>\u2588<#8c8c8c>\u2588<#8c8c8c>\u2588<#bababa>\u2588<#bababa>\u2588<alpha=#00>\u2588<br><alpha=#00>\u2588<alpha=#00>\u2588<#bababa>\u2588<#bababa>\u2588<#bababa>\u2588<#bababa>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<br></color></line-height></font></size>", position);
|
||||
Main.AllAlivePlayerControls.ExceptBy(visibleList, x => x.PlayerId).Do(Hide);
|
||||
}
|
||||
|
||||
@@ -263,7 +263,7 @@ namespace EHR
|
||||
{
|
||||
public PlayerDetector(Vector2 position, List<byte> visibleList, out int id)
|
||||
{
|
||||
CreateNetObject("<size=100%><font=\"VCR SDF\"><line-height=85%><alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<br><alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<br><#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<br><#33e6b0>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<#000000>\u2588<#000000>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<br><#33e6b0>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<#000000>\u2588<#000000>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<br><#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<br><alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<br><alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<br></color></line-height></font></size>", position);
|
||||
CreateNetObject("<size=100%><font=\"VCR SDF\"><line-height=72%><alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<br><alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<br><#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<br><#33e6b0>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<#000000>\u2588<#000000>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<br><#33e6b0>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<#000000>\u2588<#000000>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<br><#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<br><alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<br><alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<#33e6b0>\u2588<alpha=#00>\u2588<alpha=#00>\u2588<br></color></line-height></font></size>", position);
|
||||
Main.AllAlivePlayerControls.ExceptBy(visibleList, x => x.PlayerId).Do(Hide);
|
||||
id = Id;
|
||||
}
|
||||
@@ -273,11 +273,20 @@ namespace EHR
|
||||
{
|
||||
public readonly Adventurer.Resource Resource;
|
||||
|
||||
internal AdventurerItem(Vector2 position, Adventurer.Resource resource, List<byte> visibleList)
|
||||
internal AdventurerItem(Vector2 position, Adventurer.Resource resource, IEnumerable<byte> visibleList)
|
||||
{
|
||||
Resource = resource;
|
||||
var data = Adventurer.ResourceDisplayData[resource];
|
||||
CreateNetObject($"<size=300%><font=\"VCR SDF\"><line-height=85%>{Utils.ColorString(data.Color, data.Icon.ToString())}</line-height></font></size>", position);
|
||||
CreateNetObject($"<size=300%><font=\"VCR SDF\"><line-height=72%>{Utils.ColorString(data.Color, data.Icon.ToString())}</line-height></font></size>", position);
|
||||
Main.AllAlivePlayerControls.ExceptBy(visibleList, x => x.PlayerId).Do(Hide);
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class Toilet : CustomNetObject
|
||||
{
|
||||
internal Toilet(Vector2 position, IEnumerable<byte> visibleList)
|
||||
{
|
||||
CreateNetObject("INCOMPLETE", position);
|
||||
Main.AllAlivePlayerControls.ExceptBy(visibleList, x => x.PlayerId).Do(Hide);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,9 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Chemist,
|
||||
CustomRoles.Shifter,
|
||||
CustomRoles.Evolver,
|
||||
CustomRoles.ToiletMaster,
|
||||
|
||||
// Add-ons
|
||||
CustomRoles.Energetic,
|
||||
|
||||
// HnS
|
||||
@@ -183,6 +186,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Altruist => CustomRoles.Crewmate,
|
||||
CustomRoles.Transmitter => CustomRoles.Crewmate,
|
||||
CustomRoles.Autocrat => CustomRoles.Crewmate,
|
||||
CustomRoles.ToiletMaster => CustomRoles.Crewmate,
|
||||
CustomRoles.Sentry => CustomRoles.Crewmate,
|
||||
CustomRoles.Perceiver => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
||||
CustomRoles.Convener => UsePets ? CustomRoles.Crewmate : CustomRoles.Engineer,
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using static EHR.Options;
|
||||
|
||||
namespace EHR.Crewmate
|
||||
{
|
||||
public class ToiletMaster : RoleBase
|
||||
{
|
||||
public static bool On;
|
||||
public override bool IsEnable => On;
|
||||
|
||||
private Dictionary<Vector2, (Toilet NetObject, int Uses)> Toilets = [];
|
||||
Dictionary<byte, (Poop Poop, long TimeStamp)> ActivePoops = [];
|
||||
|
||||
private static OptionItem AbilityCooldown;
|
||||
private static OptionItem AbilityUses;
|
||||
private static OptionItem ToiletDuration;
|
||||
private static OptionItem ToiletVisibility;
|
||||
private static OptionItem ToiletUseRadius;
|
||||
private static OptionItem PoopDuration;
|
||||
private static OptionItem BrownPoopSpeedBoost;
|
||||
private static OptionItem GreenPoopRadius;
|
||||
private static OptionItem RedPoopRadius;
|
||||
|
||||
enum ToiletVisibilityOptions
|
||||
{
|
||||
Instant,
|
||||
Delayed,
|
||||
AfterMeeting,
|
||||
Invisible
|
||||
}
|
||||
|
||||
public static void SetupCustomOption()
|
||||
{
|
||||
int id = 644700;
|
||||
const TabGroup tab = TabGroup.CrewmateRoles;
|
||||
SetupRoleOptions(id++, tab, CustomRoles.ToiletMaster);
|
||||
AbilityCooldown = IntegerOptionItem.Create(++id, "AbilityCooldown", new(0, 60, 1), 5, tab)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.ToiletMaster])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
AbilityUses = IntegerOptionItem.Create(++id, "AbilityUseLimit", new(0, 10, 1), 3, tab)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.ToiletMaster]);
|
||||
ToiletDuration = IntegerOptionItem.Create(++id, "TM.ToiletDuration", new(0, 60, 1), 10, tab)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.ToiletMaster])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
ToiletVisibility = StringOptionItem.Create(++id, "TM.ToiletVisibility", Enum.GetNames<ToiletVisibilityOptions>(), 0, tab)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.ToiletMaster]);
|
||||
ToiletUseRadius = FloatOptionItem.Create(++id, "TM.ToiletUseRadius", new(0f, 5f, 0.25f), 1f, tab)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.ToiletMaster])
|
||||
.SetValueFormat(OptionFormat.Multiplier);
|
||||
PoopDuration = IntegerOptionItem.Create(++id, "TM.PoopDuration", new(0, 60, 1), 10, tab)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.ToiletMaster])
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
BrownPoopSpeedBoost = FloatOptionItem.Create(++id, "TM.BrownPoopSpeedBoost", new(0f, 3f, 0.05f), 0.5f, tab)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.ToiletMaster])
|
||||
.SetValueFormat(OptionFormat.Multiplier);
|
||||
GreenPoopRadius = FloatOptionItem.Create(++id, "TM.GreenPoopRadius", new(0f, 5f, 0.25f), 1f, tab)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.ToiletMaster])
|
||||
.SetValueFormat(OptionFormat.Multiplier);
|
||||
RedPoopRadius = FloatOptionItem.Create(++id, "TM.RedPoopRadius", new(0f, 5f, 0.25f), 1f, tab)
|
||||
.SetParent(CustomRoleSpawnChances[CustomRoles.ToiletMaster])
|
||||
.SetValueFormat(OptionFormat.Multiplier);
|
||||
}
|
||||
|
||||
public override void Add(byte playerId)
|
||||
{
|
||||
On = true;
|
||||
Toilets = [];
|
||||
ActivePoops = [];
|
||||
}
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
On = false;
|
||||
}
|
||||
|
||||
public override void OnPet(PlayerControl pc)
|
||||
{
|
||||
var pos = pc.Pos();
|
||||
Toilets[pos] = (new(pos, [pc.PlayerId]), 0);
|
||||
}
|
||||
|
||||
public override void OnGlobalFixedUpdate(PlayerControl pc, bool lowLoad)
|
||||
{
|
||||
if (lowLoad || !pc.IsAlive() || !GameStates.IsInTask) return;
|
||||
|
||||
try
|
||||
{
|
||||
var pos = pc.Pos();
|
||||
var toilet = Toilets.First(x => Vector2.Distance(x.Key, pos) <= ToiletUseRadius.GetFloat()).Value;
|
||||
toilet.Uses++;
|
||||
|
||||
var poop = Enum.GetValues<Poop>().Shuffle()[0];
|
||||
switch (poop)
|
||||
{
|
||||
// INCOMPLETE
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
enum Poop
|
||||
{
|
||||
Brown,
|
||||
Green,
|
||||
Red,
|
||||
Purple,
|
||||
Blue,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -333,6 +333,7 @@ public class Main : BasePlugin
|
||||
{ CustomRoles.Gaulois, "#42d1f5" },
|
||||
{ CustomRoles.Druid, "#ffb694" },
|
||||
{ CustomRoles.Autocrat, "#e2ed64" },
|
||||
{ CustomRoles.ToiletMaster, "#4281f5" },
|
||||
{ CustomRoles.Goose, "#f9ffb8" },
|
||||
{ CustomRoles.Sentry, "#db55f2" },
|
||||
{ CustomRoles.Perceiver, "#ebeb34" },
|
||||
|
||||
Reference in new issue
Block a user