mirror of
https://github.com/Gurge44/EndlessHostRoles.git
synced 2026-10-20 01:46:25 +00:00
fixes & balancing
This commit is contained in:
1 parent
6cb7973a69
commit
27b42268cd
70 files changed
+646
-623
No files matched your search
@@ -1,485 +1,486 @@
|
||||
namespace EHR;
|
||||
|
||||
public enum CustomRoles
|
||||
namespace EHR
|
||||
{
|
||||
// Default
|
||||
Crewmate = 0,
|
||||
public enum CustomRoles
|
||||
{
|
||||
// Default
|
||||
Crewmate = 0,
|
||||
|
||||
// Impostors (Vanilla)
|
||||
Impostor,
|
||||
Phantom,
|
||||
Shapeshifter,
|
||||
// Impostors (Vanilla)
|
||||
Impostor,
|
||||
Phantom,
|
||||
Shapeshifter,
|
||||
|
||||
// Vanilla Remakes
|
||||
ImpostorEHR,
|
||||
PhantomEHR,
|
||||
ShapeshifterEHR,
|
||||
// Vanilla Remakes
|
||||
ImpostorEHR,
|
||||
PhantomEHR,
|
||||
ShapeshifterEHR,
|
||||
|
||||
// Impostors
|
||||
// Impostors
|
||||
|
||||
Abyssbringer,
|
||||
Hacker, // Anonymous
|
||||
AntiAdminer,
|
||||
Sans, // Arrogance
|
||||
Assumer,
|
||||
Augmenter,
|
||||
Bard,
|
||||
Blackmailer,
|
||||
Bomber,
|
||||
BountyHunter,
|
||||
OverKiller, // Butcher
|
||||
Camouflager,
|
||||
Capitalism,
|
||||
Cantankerous,
|
||||
Changeling,
|
||||
Chronomancer,
|
||||
Cleaner,
|
||||
Commander,
|
||||
EvilDiviner, // Consigliere
|
||||
Consort,
|
||||
Councillor,
|
||||
Crewpostor,
|
||||
CursedWolf,
|
||||
Deathpact,
|
||||
Devourer,
|
||||
Disperser,
|
||||
Duellist,
|
||||
Dazzler,
|
||||
Echo,
|
||||
Escapee,
|
||||
Eraser,
|
||||
EvilGuesser,
|
||||
EvilTracker,
|
||||
FireWorks,
|
||||
Framer,
|
||||
Freezer,
|
||||
Gambler,
|
||||
Gangster,
|
||||
Generator,
|
||||
Godfather,
|
||||
Greedier,
|
||||
Hangman,
|
||||
Hitman,
|
||||
Hypnotist,
|
||||
Inhibitor,
|
||||
Kamikaze,
|
||||
Kidnapper,
|
||||
Minimalism, // Killing Machine
|
||||
BallLightning, // Lightning
|
||||
Librarian,
|
||||
Lurker,
|
||||
Mafioso,
|
||||
Mastermind,
|
||||
Mafia, // Nemesis
|
||||
SerialKiller, // Mercenary
|
||||
Miner,
|
||||
Morphling,
|
||||
Assassin, // Ninja
|
||||
Nuker,
|
||||
Nullifier,
|
||||
Overheat,
|
||||
Parasite,
|
||||
Penguin,
|
||||
Puppeteer,
|
||||
QuickShooter,
|
||||
Refugee,
|
||||
RiftMaker,
|
||||
Saboteur,
|
||||
Sapper,
|
||||
Scavenger,
|
||||
Silencer,
|
||||
Sniper,
|
||||
ImperiusCurse, // Soul Catcher
|
||||
Swapster,
|
||||
Swiftclaw,
|
||||
Swooper,
|
||||
Stealth,
|
||||
TimeThief,
|
||||
BoobyTrap, // Trapster
|
||||
Trickster,
|
||||
Twister,
|
||||
Underdog,
|
||||
Undertaker,
|
||||
Vampire,
|
||||
Ventriloquist,
|
||||
Vindicator,
|
||||
Visionary,
|
||||
Warlock,
|
||||
Wasp,
|
||||
Wildling,
|
||||
Witch,
|
||||
YinYanger,
|
||||
Zombie,
|
||||
Abyssbringer,
|
||||
Hacker, // Anonymous
|
||||
AntiAdminer,
|
||||
Sans, // Arrogance
|
||||
Assumer,
|
||||
Augmenter,
|
||||
Bard,
|
||||
Blackmailer,
|
||||
Bomber,
|
||||
BountyHunter,
|
||||
OverKiller, // Butcher
|
||||
Camouflager,
|
||||
Capitalism,
|
||||
Cantankerous,
|
||||
Changeling,
|
||||
Chronomancer,
|
||||
Cleaner,
|
||||
Commander,
|
||||
EvilDiviner, // Consigliere
|
||||
Consort,
|
||||
Councillor,
|
||||
Crewpostor,
|
||||
CursedWolf,
|
||||
Deathpact,
|
||||
Devourer,
|
||||
Disperser,
|
||||
Duellist,
|
||||
Dazzler,
|
||||
Echo,
|
||||
Escapee,
|
||||
Eraser,
|
||||
EvilGuesser,
|
||||
EvilTracker,
|
||||
FireWorks,
|
||||
Framer,
|
||||
Freezer,
|
||||
Gambler,
|
||||
Gangster,
|
||||
Generator,
|
||||
Godfather,
|
||||
Greedier,
|
||||
Hangman,
|
||||
Hitman,
|
||||
Hypnotist,
|
||||
Inhibitor,
|
||||
Kamikaze,
|
||||
Kidnapper,
|
||||
Minimalism, // Killing Machine
|
||||
BallLightning, // Lightning
|
||||
Librarian,
|
||||
Lurker,
|
||||
Mafioso,
|
||||
Mastermind,
|
||||
Mafia, // Nemesis
|
||||
SerialKiller, // Mercenary
|
||||
Miner,
|
||||
Morphling,
|
||||
Assassin, // Ninja
|
||||
Nuker,
|
||||
Nullifier,
|
||||
Overheat,
|
||||
Parasite,
|
||||
Penguin,
|
||||
Puppeteer,
|
||||
QuickShooter,
|
||||
Refugee,
|
||||
RiftMaker,
|
||||
Saboteur,
|
||||
Sapper,
|
||||
Scavenger,
|
||||
Silencer,
|
||||
Sniper,
|
||||
ImperiusCurse, // Soul Catcher
|
||||
Swapster,
|
||||
Swiftclaw,
|
||||
Swooper,
|
||||
Stealth,
|
||||
TimeThief,
|
||||
BoobyTrap, // Trapster
|
||||
Trickster,
|
||||
Twister,
|
||||
Underdog,
|
||||
Undertaker,
|
||||
Vampire,
|
||||
Ventriloquist,
|
||||
Vindicator,
|
||||
Visionary,
|
||||
Warlock,
|
||||
Wasp,
|
||||
Wildling,
|
||||
Witch,
|
||||
YinYanger,
|
||||
Zombie,
|
||||
|
||||
// Crewmates (Vanilla)
|
||||
Engineer,
|
||||
GuardianAngel,
|
||||
Noisemaker,
|
||||
Scientist,
|
||||
Tracker,
|
||||
// Crewmates (Vanilla)
|
||||
Engineer,
|
||||
GuardianAngel,
|
||||
Noisemaker,
|
||||
Scientist,
|
||||
Tracker,
|
||||
|
||||
// Vanilla Remakes
|
||||
CrewmateEHR,
|
||||
EngineerEHR,
|
||||
GuardianAngelEHR,
|
||||
NoisemakerEHR,
|
||||
ScientistEHR,
|
||||
TrackerEHR,
|
||||
// Vanilla Remakes
|
||||
CrewmateEHR,
|
||||
EngineerEHR,
|
||||
GuardianAngelEHR,
|
||||
NoisemakerEHR,
|
||||
ScientistEHR,
|
||||
TrackerEHR,
|
||||
|
||||
// Crewmates
|
||||
// Crewmates
|
||||
|
||||
Addict,
|
||||
Adrenaline,
|
||||
Adventurer,
|
||||
Aid,
|
||||
Alchemist,
|
||||
Altruist,
|
||||
Analyst,
|
||||
Autocrat,
|
||||
Bane,
|
||||
Beacon,
|
||||
Benefactor,
|
||||
Bodyguard,
|
||||
CameraMan,
|
||||
Car,
|
||||
Catcher,
|
||||
CyberStar, // Celebrity
|
||||
Chameleon,
|
||||
Chef,
|
||||
Clairvoyant,
|
||||
Cleanser,
|
||||
Convener,
|
||||
CopyCat,
|
||||
Bloodhound, // Coroner
|
||||
LovingCrewmate,
|
||||
LovingImpostor,
|
||||
Crusader,
|
||||
Dad,
|
||||
Demolitionist,
|
||||
Deputy,
|
||||
Detective,
|
||||
Detour,
|
||||
Dictator,
|
||||
Doctor,
|
||||
DonutDelivery,
|
||||
Doormaster,
|
||||
DovesOfNeace,
|
||||
Drainer,
|
||||
Druid,
|
||||
Electric,
|
||||
Enigma,
|
||||
Escort,
|
||||
Express,
|
||||
Farseer,
|
||||
Divinator, // Fortune Teller
|
||||
Gaulois,
|
||||
Goose,
|
||||
Grappler,
|
||||
Grenadier,
|
||||
GuessManagerRole,
|
||||
Guardian,
|
||||
Ignitor,
|
||||
Insight,
|
||||
ParityCop, // Inspector
|
||||
Inquirer,
|
||||
Jailor,
|
||||
Journalist,
|
||||
Judge,
|
||||
Needy, // Lazy Guy
|
||||
Leery,
|
||||
Lighter,
|
||||
Lookout,
|
||||
Luckey,
|
||||
Lyncher,
|
||||
Markseeker,
|
||||
Marshall,
|
||||
Mathematician,
|
||||
Mayor,
|
||||
SabotageMaster, // Mechanic
|
||||
Medic,
|
||||
Mediumshiper,
|
||||
Merchant,
|
||||
Monitor,
|
||||
Mole,
|
||||
Monarch,
|
||||
Mortician,
|
||||
NiceEraser,
|
||||
NiceGuesser,
|
||||
NiceHacker,
|
||||
NiceSwapper,
|
||||
Nightmare,
|
||||
Negotiator,
|
||||
Observer,
|
||||
Oracle,
|
||||
Oxyman,
|
||||
Paranoia,
|
||||
Perceiver,
|
||||
Philantropist,
|
||||
President,
|
||||
Psychic,
|
||||
Rabbit,
|
||||
Randomizer,
|
||||
Rhapsode,
|
||||
Ricochet,
|
||||
Safeguard,
|
||||
Scout,
|
||||
SecurityGuard,
|
||||
Sentinel,
|
||||
Sentry,
|
||||
Sheriff,
|
||||
Shiftguard,
|
||||
Snitch,
|
||||
Socialite,
|
||||
Soothsayer,
|
||||
Spiritualist,
|
||||
Speedrunner,
|
||||
SpeedBooster,
|
||||
Spy,
|
||||
SuperStar,
|
||||
TaskManager,
|
||||
Telekinetic,
|
||||
Tether,
|
||||
TimeManager,
|
||||
TimeMaster,
|
||||
ToiletMaster,
|
||||
Tornado,
|
||||
Transmitter,
|
||||
Transporter,
|
||||
Tracefinder,
|
||||
Tunneler,
|
||||
Ventguard,
|
||||
Veteran,
|
||||
SwordsMan, // Vigilante
|
||||
Whisperer,
|
||||
Witness,
|
||||
Wizard,
|
||||
Addict,
|
||||
Adrenaline,
|
||||
Adventurer,
|
||||
Aid,
|
||||
Alchemist,
|
||||
Altruist,
|
||||
Analyst,
|
||||
Autocrat,
|
||||
Bane,
|
||||
Beacon,
|
||||
Benefactor,
|
||||
Bodyguard,
|
||||
CameraMan,
|
||||
Car,
|
||||
Catcher,
|
||||
CyberStar, // Celebrity
|
||||
Chameleon,
|
||||
Chef,
|
||||
Clairvoyant,
|
||||
Cleanser,
|
||||
Convener,
|
||||
CopyCat,
|
||||
Bloodhound, // Coroner
|
||||
LovingCrewmate,
|
||||
LovingImpostor,
|
||||
Crusader,
|
||||
Dad,
|
||||
Demolitionist,
|
||||
Deputy,
|
||||
Detective,
|
||||
Detour,
|
||||
Dictator,
|
||||
Doctor,
|
||||
DonutDelivery,
|
||||
Doormaster,
|
||||
DovesOfNeace,
|
||||
Drainer,
|
||||
Druid,
|
||||
Electric,
|
||||
Enigma,
|
||||
Escort,
|
||||
Express,
|
||||
Farseer,
|
||||
Divinator, // Fortune Teller
|
||||
Gaulois,
|
||||
Goose,
|
||||
Grappler,
|
||||
Grenadier,
|
||||
GuessManagerRole,
|
||||
Guardian,
|
||||
Ignitor,
|
||||
Insight,
|
||||
ParityCop, // Inspector
|
||||
Inquirer,
|
||||
Jailor,
|
||||
Journalist,
|
||||
Judge,
|
||||
Needy, // Lazy Guy
|
||||
Leery,
|
||||
Lighter,
|
||||
Lookout,
|
||||
Luckey,
|
||||
Lyncher,
|
||||
Markseeker,
|
||||
Marshall,
|
||||
Mathematician,
|
||||
Mayor,
|
||||
SabotageMaster, // Mechanic
|
||||
Medic,
|
||||
Mediumshiper,
|
||||
Merchant,
|
||||
Monitor,
|
||||
Mole,
|
||||
Monarch,
|
||||
Mortician,
|
||||
NiceEraser,
|
||||
NiceGuesser,
|
||||
NiceHacker,
|
||||
NiceSwapper,
|
||||
Nightmare,
|
||||
Negotiator,
|
||||
Observer,
|
||||
Oracle,
|
||||
Oxyman,
|
||||
Paranoia,
|
||||
Perceiver,
|
||||
Philantropist,
|
||||
President,
|
||||
Psychic,
|
||||
Rabbit,
|
||||
Randomizer,
|
||||
Rhapsode,
|
||||
Ricochet,
|
||||
Safeguard,
|
||||
Scout,
|
||||
SecurityGuard,
|
||||
Sentinel,
|
||||
Sentry,
|
||||
Sheriff,
|
||||
Shiftguard,
|
||||
Snitch,
|
||||
Socialite,
|
||||
Soothsayer,
|
||||
Spiritualist,
|
||||
Speedrunner,
|
||||
SpeedBooster,
|
||||
Spy,
|
||||
SuperStar,
|
||||
TaskManager,
|
||||
Telekinetic,
|
||||
Tether,
|
||||
TimeManager,
|
||||
TimeMaster,
|
||||
ToiletMaster,
|
||||
Tornado,
|
||||
Transmitter,
|
||||
Transporter,
|
||||
Tracefinder,
|
||||
Tunneler,
|
||||
Ventguard,
|
||||
Veteran,
|
||||
SwordsMan, // Vigilante
|
||||
Whisperer,
|
||||
Witness,
|
||||
Wizard,
|
||||
|
||||
// Neutrals
|
||||
// Neutrals
|
||||
|
||||
Agitater,
|
||||
Amnesiac,
|
||||
Arsonist,
|
||||
Backstabber,
|
||||
Bandit,
|
||||
Bargainer,
|
||||
Beehive,
|
||||
BloodKnight,
|
||||
Bubble,
|
||||
Chemist,
|
||||
Cherokious,
|
||||
Collector,
|
||||
Deathknight,
|
||||
Gamer, // Demon
|
||||
Doppelganger,
|
||||
Doomsayer,
|
||||
Eclipse,
|
||||
Enderman,
|
||||
Evolver,
|
||||
Executioner,
|
||||
Totocalcio, // Follower
|
||||
Gaslighter,
|
||||
Glitch,
|
||||
God,
|
||||
FFF, // Hater
|
||||
HeadHunter,
|
||||
HexMaster,
|
||||
Hookshot,
|
||||
Imitator,
|
||||
Impartial,
|
||||
Innocent,
|
||||
Jackal,
|
||||
Jester,
|
||||
Jinx,
|
||||
Juggernaut,
|
||||
Konan,
|
||||
Lawyer,
|
||||
Magician,
|
||||
Mario,
|
||||
Maverick,
|
||||
Medusa,
|
||||
Mycologist,
|
||||
Necromancer,
|
||||
Nonplus,
|
||||
Opportunist,
|
||||
Patroller,
|
||||
Pelican,
|
||||
Pestilence,
|
||||
Phantasm,
|
||||
Pickpocket,
|
||||
PlagueBearer,
|
||||
PlagueDoctor,
|
||||
Poisoner,
|
||||
Postman,
|
||||
Predator,
|
||||
Provocateur,
|
||||
Pursuer,
|
||||
Pyromaniac,
|
||||
QuizMaster,
|
||||
Reckless,
|
||||
Revolutionist,
|
||||
Ritualist,
|
||||
Rogue,
|
||||
Romantic,
|
||||
RouleteGrandeur,
|
||||
RuthlessRomantic,
|
||||
Samurai,
|
||||
SchrodingersCat,
|
||||
NSerialKiller, // Serial Killer
|
||||
Shifter,
|
||||
Sidekick,
|
||||
Simon,
|
||||
SoulHunter,
|
||||
Spiritcaller,
|
||||
Sprayer,
|
||||
DarkHide, // Stalker
|
||||
Succubus,
|
||||
Sunnyboy,
|
||||
Technician,
|
||||
Tank,
|
||||
Terrorist,
|
||||
Tiger,
|
||||
Traitor,
|
||||
Tremor,
|
||||
Vengeance,
|
||||
VengefulRomantic,
|
||||
Virus,
|
||||
Vortex,
|
||||
Vulture,
|
||||
Wraith,
|
||||
Werewolf,
|
||||
WeaponMaster,
|
||||
Workaholic,
|
||||
Agitater,
|
||||
Amnesiac,
|
||||
Arsonist,
|
||||
Backstabber,
|
||||
Bandit,
|
||||
Bargainer,
|
||||
Beehive,
|
||||
BloodKnight,
|
||||
Bubble,
|
||||
Chemist,
|
||||
Cherokious,
|
||||
Collector,
|
||||
Deathknight,
|
||||
Gamer, // Demon
|
||||
Doppelganger,
|
||||
Doomsayer,
|
||||
Eclipse,
|
||||
Enderman,
|
||||
Evolver,
|
||||
Executioner,
|
||||
Totocalcio, // Follower
|
||||
Gaslighter,
|
||||
Glitch,
|
||||
God,
|
||||
FFF, // Hater
|
||||
HeadHunter,
|
||||
HexMaster,
|
||||
Hookshot,
|
||||
Imitator,
|
||||
Impartial,
|
||||
Innocent,
|
||||
Jackal,
|
||||
Jester,
|
||||
Jinx,
|
||||
Juggernaut,
|
||||
Konan,
|
||||
Lawyer,
|
||||
Magician,
|
||||
Mario,
|
||||
Maverick,
|
||||
Medusa,
|
||||
Mycologist,
|
||||
Necromancer,
|
||||
Nonplus,
|
||||
Opportunist,
|
||||
Patroller,
|
||||
Pelican,
|
||||
Pestilence,
|
||||
Phantasm,
|
||||
Pickpocket,
|
||||
PlagueBearer,
|
||||
PlagueDoctor,
|
||||
Poisoner,
|
||||
Postman,
|
||||
Predator,
|
||||
Provocateur,
|
||||
Pursuer,
|
||||
Pyromaniac,
|
||||
QuizMaster,
|
||||
Reckless,
|
||||
Revolutionist,
|
||||
Ritualist,
|
||||
Rogue,
|
||||
Romantic,
|
||||
RouleteGrandeur,
|
||||
RuthlessRomantic,
|
||||
Samurai,
|
||||
SchrodingersCat,
|
||||
NSerialKiller, // Serial Killer
|
||||
Shifter,
|
||||
Sidekick,
|
||||
Simon,
|
||||
SoulHunter,
|
||||
Spiritcaller,
|
||||
Sprayer,
|
||||
DarkHide, // Stalker
|
||||
Succubus,
|
||||
Sunnyboy,
|
||||
Technician,
|
||||
Tank,
|
||||
Terrorist,
|
||||
Tiger,
|
||||
Traitor,
|
||||
Tremor,
|
||||
Vengeance,
|
||||
VengefulRomantic,
|
||||
Virus,
|
||||
Vortex,
|
||||
Vulture,
|
||||
Wraith,
|
||||
Werewolf,
|
||||
WeaponMaster,
|
||||
Workaholic,
|
||||
|
||||
// Solo Kombat
|
||||
KB_Normal,
|
||||
// Solo Kombat
|
||||
KB_Normal,
|
||||
|
||||
// FFA
|
||||
Killer,
|
||||
// FFA
|
||||
Killer,
|
||||
|
||||
// Move And Stop
|
||||
Tasker,
|
||||
// Move And Stop
|
||||
Tasker,
|
||||
|
||||
// Hot Potato
|
||||
Potato,
|
||||
// Hot Potato
|
||||
Potato,
|
||||
|
||||
// H&S
|
||||
Hider,
|
||||
Seeker,
|
||||
Fox,
|
||||
Troll,
|
||||
Jumper,
|
||||
Detector,
|
||||
Jet,
|
||||
Dasher,
|
||||
Locator,
|
||||
Venter,
|
||||
Agent,
|
||||
Taskinator,
|
||||
// H&S
|
||||
Hider,
|
||||
Seeker,
|
||||
Fox,
|
||||
Troll,
|
||||
Jumper,
|
||||
Detector,
|
||||
Jet,
|
||||
Dasher,
|
||||
Locator,
|
||||
Venter,
|
||||
Agent,
|
||||
Taskinator,
|
||||
|
||||
// Speedrun
|
||||
Runner,
|
||||
// Speedrun
|
||||
Runner,
|
||||
|
||||
// Capture The Flag
|
||||
CTFPlayer,
|
||||
// Capture The Flag
|
||||
CTFPlayer,
|
||||
|
||||
// Natural Disasters
|
||||
NDPlayer,
|
||||
// Natural Disasters
|
||||
NDPlayer,
|
||||
|
||||
// Room Rush
|
||||
RRPlayer,
|
||||
// Room Rush
|
||||
RRPlayer,
|
||||
|
||||
// GM
|
||||
GM,
|
||||
// GM
|
||||
GM,
|
||||
|
||||
// ????
|
||||
Convict,
|
||||
// ????
|
||||
Convict,
|
||||
|
||||
|
||||
// Sub-role after 500
|
||||
NotAssigned = 500,
|
||||
Allergic,
|
||||
Antidote,
|
||||
AntiTP,
|
||||
Asthmatic,
|
||||
Autopsy,
|
||||
Avanger,
|
||||
Bait,
|
||||
Busy,
|
||||
Trapper, // Beartrap
|
||||
Bewilder,
|
||||
Bloodlust,
|
||||
Bloodmoon, // Ghost role
|
||||
Charmed,
|
||||
Circumvent,
|
||||
Cleansed,
|
||||
Clumsy,
|
||||
Contagious,
|
||||
Damocles,
|
||||
Deadlined,
|
||||
DeadlyQuota,
|
||||
Disco,
|
||||
Diseased,
|
||||
Dynamo,
|
||||
Unreportable, // Disregarded
|
||||
DoubleShot,
|
||||
Egoist,
|
||||
Energetic,
|
||||
EvilSpirit,
|
||||
Finder,
|
||||
Flashman,
|
||||
Fool,
|
||||
Giant,
|
||||
Glow,
|
||||
Gravestone,
|
||||
GA, // Guardian Angel - Ghost role
|
||||
Guesser,
|
||||
Haste,
|
||||
Haunter, // Ghost role
|
||||
Introvert,
|
||||
Knighted,
|
||||
LastImpostor,
|
||||
Lazy,
|
||||
Lovers,
|
||||
Loyal,
|
||||
Lucky,
|
||||
Madmate,
|
||||
Magnet,
|
||||
Mare,
|
||||
Messenger,
|
||||
Mimic,
|
||||
Minion, // Ghost role
|
||||
Mischievous,
|
||||
Necroview,
|
||||
Nimble,
|
||||
Noisy,
|
||||
Oblivious,
|
||||
Onbound,
|
||||
Spurt,
|
||||
Sleep,
|
||||
Specter, // Ghost role
|
||||
Physicist,
|
||||
Rascal,
|
||||
Reach,
|
||||
Recruit,
|
||||
Rookie,
|
||||
Trainee,
|
||||
DualPersonality, // Schizophrenic
|
||||
Seer,
|
||||
Sleuth,
|
||||
Sonar,
|
||||
Stained,
|
||||
Taskcounter,
|
||||
TicketsStealer, // Stealer
|
||||
Stressed,
|
||||
Swift,
|
||||
Sunglasses,
|
||||
Brakar, // Tiebreaker
|
||||
Torch,
|
||||
Truant,
|
||||
Undead,
|
||||
Unlucky,
|
||||
Warden, // Ghost role
|
||||
Watcher,
|
||||
Workhorse,
|
||||
Youtuber
|
||||
// Sub-role after 500
|
||||
NotAssigned = 500,
|
||||
Allergic,
|
||||
Antidote,
|
||||
AntiTP,
|
||||
Asthmatic,
|
||||
Autopsy,
|
||||
Avanger,
|
||||
Bait,
|
||||
Busy,
|
||||
Trapper, // Beartrap
|
||||
Bewilder,
|
||||
Bloodlust,
|
||||
Bloodmoon, // Ghost role
|
||||
Charmed,
|
||||
Circumvent,
|
||||
Cleansed,
|
||||
Clumsy,
|
||||
Contagious,
|
||||
Damocles,
|
||||
Deadlined,
|
||||
DeadlyQuota,
|
||||
Disco,
|
||||
Diseased,
|
||||
Dynamo,
|
||||
Unreportable, // Disregarded
|
||||
DoubleShot,
|
||||
Egoist,
|
||||
Energetic,
|
||||
EvilSpirit,
|
||||
Finder,
|
||||
Flashman,
|
||||
Fool,
|
||||
Giant,
|
||||
Glow,
|
||||
Gravestone,
|
||||
GA, // Guardian Angel - Ghost role
|
||||
Guesser,
|
||||
Haste,
|
||||
Haunter, // Ghost role
|
||||
Introvert,
|
||||
Knighted,
|
||||
LastImpostor,
|
||||
Lazy,
|
||||
Lovers,
|
||||
Loyal,
|
||||
Lucky,
|
||||
Madmate,
|
||||
Magnet,
|
||||
Mare,
|
||||
Messenger,
|
||||
Mimic,
|
||||
Minion, // Ghost role
|
||||
Mischievous,
|
||||
Necroview,
|
||||
Nimble,
|
||||
Noisy,
|
||||
Oblivious,
|
||||
Onbound,
|
||||
Spurt,
|
||||
Sleep,
|
||||
Specter, // Ghost role
|
||||
Physicist,
|
||||
Rascal,
|
||||
Reach,
|
||||
Recruit,
|
||||
Rookie,
|
||||
Trainee,
|
||||
DualPersonality, // Schizophrenic
|
||||
Seer,
|
||||
Sleuth,
|
||||
Sonar,
|
||||
Stained,
|
||||
Taskcounter,
|
||||
TicketsStealer, // Stealer
|
||||
Stressed,
|
||||
Swift,
|
||||
Sunglasses,
|
||||
Brakar, // Tiebreaker
|
||||
Torch,
|
||||
Truant,
|
||||
Undead,
|
||||
Unlucky,
|
||||
Warden, // Ghost role
|
||||
Watcher,
|
||||
Workhorse,
|
||||
Youtuber
|
||||
}
|
||||
}
|
||||
@@ -280,7 +280,7 @@ namespace EHR
|
||||
|
||||
public static bool HasTasks(NetworkedPlayerInfo playerInfo)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost && playerInfo.PlayerId == PlayerControl.LocalPlayer.PlayerId) return PlayerControl.LocalPlayer.GetCustomRole() is CustomRoles.Taskinator or CustomRoles.Hider or CustomRoles.Jet or CustomRoles.Detector or CustomRoles.Jumper;
|
||||
if (!AmongUsClient.Instance.AmHost && playerInfo.IsLocalPlayer()) return PlayerControl.LocalPlayer.GetCustomRole() is CustomRoles.Taskinator or CustomRoles.Hider or CustomRoles.Jet or CustomRoles.Detector or CustomRoles.Jumper;
|
||||
|
||||
if (!PlayerRoles.TryGetValue(playerInfo.PlayerId, out (IHideAndSeekRole Interface, CustomRoles Role) role)) return false;
|
||||
|
||||
@@ -441,7 +441,7 @@ namespace EHR
|
||||
|
||||
static string GetTaskText()
|
||||
{
|
||||
StringBuilder sb = new();
|
||||
Il2CppSystem.Text.StringBuilder sb = new();
|
||||
bool flag = PlayerControl.LocalPlayer.Data.Role != null && PlayerControl.LocalPlayer.Data.Role.IsImpostor;
|
||||
|
||||
foreach (PlayerTask task in PlayerControl.LocalPlayer.myTasks)
|
||||
|
||||
@@ -109,7 +109,7 @@ namespace EHR
|
||||
SurvivalTimes[HotPotatoState.HolderID] = Time.GetInt() * (HotPotatoState.RoundNum - 1);
|
||||
PassHotPotato();
|
||||
|
||||
if (Holder.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (Holder.IsLocalPlayer())
|
||||
Achievements.Type.OutOfTime.Complete();
|
||||
|
||||
return;
|
||||
|
||||
@@ -223,7 +223,7 @@ namespace EHR
|
||||
|
||||
if (LimitMaximumDisastersAtOnce.GetBool())
|
||||
{
|
||||
int numDisasters = ActiveDisasters.Count + PreparingDisasters.Count;
|
||||
int numDisasters = ActiveDisasters.Count + PreparingDisasters.Count + Sinkhole.Sinkholes.Count;
|
||||
|
||||
if (numDisasters > MaximumDisastersAtOnce.GetInt())
|
||||
{
|
||||
|
||||
+5
-15
@@ -226,7 +226,7 @@ namespace EHR
|
||||
yield return new WaitForSeconds(1f);
|
||||
}
|
||||
|
||||
if (ventLimit > 0) aapc.Without(PlayerControl.LocalPlayer).DoIf(x => !x.IsNonHostModClient(), x => x.RpcChangeRoleBasis(CustomRoles.EngineerEHR));
|
||||
if (ventLimit > 0) aapc.Do(x => x.RpcChangeRoleBasis(CustomRoles.EngineerEHR));
|
||||
|
||||
Utils.SendRPC(CustomRPC.RoomRushDataSync, 1);
|
||||
|
||||
@@ -301,7 +301,7 @@ namespace EHR
|
||||
{
|
||||
Main.AllPlayerSpeed[PlayerControl.LocalPlayer.PlayerId] = speed;
|
||||
PlayerControl.LocalPlayer.SyncSettings();
|
||||
}, AmongUsClient.Instance.Ping / 1000f * 4f);
|
||||
}, Utils.CalculatePingDelay() * 2f);
|
||||
}
|
||||
|
||||
private static PlainShipRoom GetRoomClass(this SystemTypes systemTypes)
|
||||
@@ -317,14 +317,14 @@ namespace EHR
|
||||
bool dead = !seer.IsAlive();
|
||||
bool done = dead || DonePlayers.Contains(seer.PlayerId);
|
||||
Color color = done ? Color.green : Color.yellow;
|
||||
|
||||
if (DisplayRoomName.GetBool()) sb.AppendLine(Utils.ColorString(color, Translator.GetString(RoomGoal.ToString())));
|
||||
|
||||
if (DisplayArrowToRoom.GetBool()) sb.AppendLine(Utils.ColorString(color, LocateArrow.GetArrows(seer)));
|
||||
|
||||
color = done ? Color.white : Color.yellow;
|
||||
sb.AppendLine(Utils.ColorString(color, TimeLeft.ToString()));
|
||||
|
||||
if (VentTimes.GetInt() == 0 || dead) return sb.ToString();
|
||||
if (VentTimes.GetInt() == 0 || dead || seer.IsModClient()) return sb.ToString();
|
||||
|
||||
sb.AppendLine();
|
||||
|
||||
@@ -412,7 +412,7 @@ namespace EHR
|
||||
playersOutsideRoom.Do(x => x.Suicide());
|
||||
StartNewRound();
|
||||
|
||||
if (playersOutsideRoom.Any(x => x.PlayerId == PlayerControl.LocalPlayer.PlayerId))
|
||||
if (playersOutsideRoom.Any(x => x.IsLocalPlayer()))
|
||||
Achievements.Type.OutOfTime.Complete();
|
||||
}
|
||||
}
|
||||
@@ -435,15 +435,5 @@ namespace EHR
|
||||
Utils.SendRPC(CustomRPC.RoomRushDataSync, 2, RoomRush.VentLimit[pc.PlayerId], pc.PlayerId);
|
||||
if (RoomRush.VentLimit[pc.PlayerId] <= 0) pc.RpcChangeRoleBasis(CustomRoles.RRPlayer);
|
||||
}
|
||||
|
||||
public override bool CanUseImpostorVentButton(PlayerControl pc)
|
||||
{
|
||||
return !pc.IsHost() && CanUseVent(pc, 0);
|
||||
}
|
||||
|
||||
public override bool CanUseVent(PlayerControl pc, int ventId)
|
||||
{
|
||||
return RoomRush.GameGoing && (pc.inVent || RoomRush.VentLimit[pc.PlayerId] > 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -181,7 +181,7 @@ namespace EHR
|
||||
LastHurt[target.PlayerId] = Utils.TimeStamp;
|
||||
|
||||
float kcd = KB_ATKCooldown.GetFloat();
|
||||
if (killer.IsHost()) kcd += AmongUsClient.Instance.Ping / 1000f * 4f;
|
||||
if (killer.IsHost()) kcd += Utils.CalculatePingDelay() * 2f;
|
||||
|
||||
killer.SetKillCooldown(kcd, target);
|
||||
RPC.PlaySoundRPC(killer.PlayerId, Sounds.KillSound);
|
||||
|
||||
@@ -154,7 +154,7 @@ namespace EHR
|
||||
{
|
||||
__instance.Suicide();
|
||||
|
||||
if (__instance.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (__instance.IsLocalPlayer())
|
||||
Achievements.Type.OutOfTime.Complete();
|
||||
}
|
||||
|
||||
|
||||
@@ -117,7 +117,11 @@ namespace EHR
|
||||
|
||||
byte id = target.PlayerId;
|
||||
|
||||
if (IsCamouflage && Main.PlayerStates[id].IsDead) return;
|
||||
if (IsCamouflage && !target.IsAlive() && target.Data.IsDead)
|
||||
{
|
||||
Logger.Info("Player is dead, returning", "Camouflage.RpcSetSkin");
|
||||
return;
|
||||
}
|
||||
|
||||
NetworkedPlayerInfo.PlayerOutfit newOutfit = CamouflageOutfit;
|
||||
|
||||
|
||||
@@ -3,10 +3,11 @@ namespace EHR
|
||||
public static class DebugModeManager
|
||||
{
|
||||
public static OptionItem EnableDebugMode;
|
||||
public static bool AmDebugger { get; private set; }
|
||||
public static bool AmDebugger { get; private set; } =
|
||||
#if DEBUG
|
||||
true;
|
||||
#else
|
||||
false;
|
||||
#endif
|
||||
|
||||
public static void Auth(HashAuth auth, string input)
|
||||
|
||||
@@ -14,6 +14,7 @@ using EHR.Neutral;
|
||||
using Hazel;
|
||||
using Il2CppInterop.Runtime.InteropTypes.Arrays;
|
||||
using InnerNet;
|
||||
using Sentry.Internal.Extensions;
|
||||
using UnityEngine;
|
||||
using static EHR.Translator;
|
||||
using static EHR.Utils;
|
||||
@@ -257,10 +258,7 @@ namespace EHR
|
||||
{
|
||||
Main.LastNotifyNames[(player.PlayerId, seer.PlayerId)] = name;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ThrowException(e);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
if (player.Data != null) Logger.Info($"Set: {player.Data.PlayerName} => {name} for Everyone", "RpcSetNameEx");
|
||||
@@ -405,7 +403,7 @@ namespace EHR
|
||||
if (seerClientId == -1) continue;
|
||||
|
||||
bool seerIsHost = seer.IsHost();
|
||||
bool self = player.PlayerId == seer.PlayerId;
|
||||
bool self = playerId == seer.PlayerId;
|
||||
|
||||
if (!self && seer.HasDesyncRole() && !seerIsHost)
|
||||
remeberRoleType = newRoleVN is CustomRoles.Noisemaker ? RoleTypes.Noisemaker : RoleTypes.Scientist;
|
||||
@@ -454,7 +452,7 @@ namespace EHR
|
||||
int seerClientId = seer.GetClientId();
|
||||
if (seerClientId == -1) continue;
|
||||
|
||||
bool self = player.PlayerId == seer.PlayerId;
|
||||
bool self = playerId == seer.PlayerId;
|
||||
|
||||
if (self)
|
||||
{
|
||||
@@ -1277,7 +1275,7 @@ namespace EHR
|
||||
CustomGameMode.Speedrun => false,
|
||||
CustomGameMode.CaptureTheFlag => false,
|
||||
CustomGameMode.NaturalDisasters => false,
|
||||
CustomGameMode.RoomRush => !Main.HasJustStarted && RoomRush.VentLimit[pc.PlayerId] > 0,
|
||||
CustomGameMode.RoomRush => false,
|
||||
|
||||
CustomGameMode.Standard when CopyCat.Instances.Any(x => x.CopyCatPC.PlayerId == pc.PlayerId) => true,
|
||||
CustomGameMode.Standard when pc.Is(CustomRoles.Nimble) || Options.EveryoneCanVent.GetBool() => true,
|
||||
@@ -1451,7 +1449,7 @@ namespace EHR
|
||||
RPC.PlaySoundRPC(killer.PlayerId, Sounds.TaskComplete);
|
||||
}, Options.TrapperBlockMoveTime.GetFloat(), "Trapper BlockMove");
|
||||
|
||||
if (killer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (killer.IsLocalPlayer())
|
||||
Achievements.Type.TooCold.CompleteAfterGameEnd();
|
||||
}
|
||||
|
||||
@@ -1530,7 +1528,7 @@ namespace EHR
|
||||
|
||||
Main.DiedThisRound.Add(target.PlayerId);
|
||||
|
||||
if (killer.PlayerId == PlayerControl.LocalPlayer.PlayerId && !killer.HasKillButton())
|
||||
if (killer.IsLocalPlayer() && !killer.HasKillButton())
|
||||
Achievements.Type.InnocentKiller.Complete();
|
||||
|
||||
switch (killer.PlayerId == target.PlayerId)
|
||||
@@ -1584,10 +1582,13 @@ namespace EHR
|
||||
}, 0.1f, log: false);
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsLocalPlayer(this PlayerControl pc) => pc.PlayerId == PlayerControl.LocalPlayer.PlayerId;
|
||||
public static bool IsLocalPlayer(this NetworkedPlayerInfo npi) => npi.PlayerId == PlayerControl.LocalPlayer.PlayerId;
|
||||
|
||||
public static bool IsModClient(this PlayerControl player)
|
||||
{
|
||||
return player.IsHost() || Main.PlayerVersion.ContainsKey(player.PlayerId);
|
||||
return player.IsLocalPlayer() || player.IsHost() || Main.PlayerVersion.ContainsKey(player.PlayerId);
|
||||
}
|
||||
|
||||
public static List<PlayerControl> GetPlayersInAbilityRangeSorted(this PlayerControl player, bool ignoreColliders = false)
|
||||
@@ -1716,15 +1717,7 @@ namespace EHR
|
||||
|
||||
public static RoleTypes GetRoleTypes(this PlayerControl pc)
|
||||
{
|
||||
return pc.GetCustomSubRoles() switch
|
||||
{
|
||||
{ } x when x.Contains(CustomRoles.Bloodlust) => RoleTypes.Impostor,
|
||||
{ } x when x.Contains(CustomRoles.Nimble) && !pc.HasDesyncRole() => RoleTypes.Engineer,
|
||||
{ } x when x.Contains(CustomRoles.Physicist) => RoleTypes.Scientist,
|
||||
{ } x when x.Contains(CustomRoles.Finder) => RoleTypes.Tracker,
|
||||
{ } x when x.Contains(CustomRoles.Noisy) => RoleTypes.Noisemaker,
|
||||
_ => pc.GetCustomRole().GetRoleTypes()
|
||||
};
|
||||
return pc.GetRoleMap().RoleType;
|
||||
}
|
||||
|
||||
public static bool Is(this PlayerControl target, CustomRoles role)
|
||||
|
||||
@@ -794,7 +794,7 @@ namespace EHR
|
||||
if (pc.Is(CustomRoles.Pickpocket) && pc.PlayerId != dp.PlayerId) LateTask.New(() => Utils.SendMessage(string.Format(GetString("PickpocketGetVote"), (int)(Main.AllPlayerControls.Count(x => x.GetRealKiller()?.PlayerId == pc.PlayerId) * Pickpocket.VotesPerKill.GetFloat()))), 0.7f, log: false);
|
||||
}, 0.2f, "Guesser Kill");
|
||||
|
||||
if (guesserSuicide && pc.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (guesserSuicide && pc.IsLocalPlayer())
|
||||
Achievements.Type.BadLuckOrBadObservation.Complete();
|
||||
}
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ namespace EHR
|
||||
|
||||
public static bool CheckSpam(PlayerControl player, string text)
|
||||
{
|
||||
if (player.PlayerId == PlayerControl.LocalPlayer.PlayerId) return false;
|
||||
if (player.IsLocalPlayer()) return false;
|
||||
|
||||
string name = player.GetRealName();
|
||||
var kick = false;
|
||||
|
||||
@@ -254,7 +254,7 @@ namespace EHR.Modules
|
||||
{
|
||||
try
|
||||
{
|
||||
if (killer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (killer.IsLocalPlayer())
|
||||
{
|
||||
if (Main.AliveImpostorCount == 0 && killer.IsCrewmate() && target.IsImpostor() && !Main.AllAlivePlayerControls.Any(x => x.IsNeutralKiller()))
|
||||
Achievements.Type.ImCrewISwear.Complete();
|
||||
@@ -292,7 +292,7 @@ namespace EHR.Modules
|
||||
Achievements.Type.ThereCanOnlyBeOne.CompleteAfterGameEnd();
|
||||
}
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
{
|
||||
PlayerState targetState = Main.PlayerStates[target.PlayerId];
|
||||
|
||||
@@ -310,7 +310,7 @@ namespace EHR.Modules
|
||||
{
|
||||
try
|
||||
{
|
||||
if (shapeshifter.PlayerId == PlayerControl.LocalPlayer.PlayerId && shapeshifting && animated)
|
||||
if (shapeshifter.IsLocalPlayer() && shapeshifting && animated)
|
||||
{
|
||||
Achievements.Type.ItsMorbinTime.Complete();
|
||||
if (shapeshifter.Is(CustomRoles.Disco)) Achievements.Type.Prankster.Complete();
|
||||
|
||||
+20
-7
@@ -968,7 +968,7 @@ other: ∟ ⌠ ⌡ ╬ ╨ ▓ ▒ ░ « » █ ▄ ▌▀▐│ ┤ ╡ ╢
|
||||
|
||||
if ((Main.VisibleTasksCount && PlayerControl.LocalPlayer.Data.IsDead && Options.GhostCanSeeOtherRoles.GetBool()) || (PlayerControl.LocalPlayer.Is(CustomRoles.Mimic) && Main.VisibleTasksCount && __instance.Data.IsDead && Options.MimicCanSeeDeadRoles.GetBool())) return true;
|
||||
|
||||
if (__instance.PlayerId == PlayerControl.LocalPlayer.PlayerId) return true;
|
||||
if (__instance.IsLocalPlayer()) return true;
|
||||
|
||||
switch (__instance.GetCustomRole())
|
||||
{
|
||||
@@ -995,7 +995,7 @@ other: ∟ ⌠ ⌡ ╬ ╨ ▓ ▒ ░ « » █ ▄ ▌▀▐│ ┤ ╡ ╢
|
||||
(__instance.Is(CustomRoleTypes.Impostor) && PlayerControl.LocalPlayer.Is(CustomRoles.Crewpostor) && Options.AlliesKnowCrewpostor.GetBool()) ||
|
||||
(__instance.Is(CustomRoleTypes.Impostor) && PlayerControl.LocalPlayer.Is(CustomRoleTypes.Impostor) && Options.ImpKnowAlliesRole.GetBool()) ||
|
||||
(__instance.Is(CustomRoleTypes.Impostor) && PlayerControl.LocalPlayer.Is(CustomRoles.Madmate) && Options.MadmateKnowWhosImp.GetBool()) ||
|
||||
(Main.LoversPlayers.TrueForAll(x => x.PlayerId == __instance.PlayerId || x.PlayerId == PlayerControl.LocalPlayer.PlayerId) && Main.LoversPlayers.Count == 2 && Lovers.LoverKnowRoles.GetBool()) ||
|
||||
(Main.LoversPlayers.TrueForAll(x => x.PlayerId == __instance.PlayerId || x.IsLocalPlayer()) && Main.LoversPlayers.Count == 2 && Lovers.LoverKnowRoles.GetBool()) ||
|
||||
(CustomTeamManager.AreInSameCustomTeam(__instance.PlayerId, PlayerControl.LocalPlayer.PlayerId) && CustomTeamManager.IsSettingEnabledForPlayerTeam(__instance.PlayerId, CTAOption.KnowRoles)) ||
|
||||
Main.PlayerStates.Values.Any(x => x.Role.KnowRole(PlayerControl.LocalPlayer, __instance)) ||
|
||||
PlayerControl.LocalPlayer.IsRevealedPlayer(__instance) ||
|
||||
@@ -2296,7 +2296,9 @@ other: ∟ ⌠ ⌡ ╬ ╨ ▓ ▒ ░ « » █ ▄ ▌▀▐│ ┤ ╡ ╢
|
||||
}
|
||||
|
||||
if ((IsActive(SystemTypes.MushroomMixupSabotage) || MushroomMixup) && target.IsAlive() && !seer.Is(CustomRoleTypes.Impostor) && Main.ResetCamPlayerList.Contains(seer.PlayerId))
|
||||
{
|
||||
target.RpcSetNamePrivate("<size=0%>", force: NoCache);
|
||||
}
|
||||
else
|
||||
{
|
||||
TargetMark.Clear();
|
||||
@@ -2306,14 +2308,15 @@ other: ∟ ⌠ ⌡ ╬ ╨ ▓ ▒ ░ « » █ ▄ ▌▀▐│ ┤ ╡ ╢
|
||||
TargetMark.Append(Witch.GetSpelledMark(target.PlayerId, isForMeeting));
|
||||
if (isForMeeting) TargetMark.Append(Wasp.GetStungMark(target.PlayerId));
|
||||
|
||||
if (target.Is(CustomRoles.SuperStar) && Options.EveryOneKnowSuperStar.GetBool()) TargetMark.Append(ColorString(GetRoleColor(CustomRoles.SuperStar), "★"));
|
||||
if (target.Is(CustomRoles.SuperStar) && Options.EveryOneKnowSuperStar.GetBool())
|
||||
TargetMark.Append(ColorString(GetRoleColor(CustomRoles.SuperStar), "★"));
|
||||
|
||||
if (BallLightning.IsGhost(target)) TargetMark.Append(ColorString(GetRoleColor(CustomRoles.BallLightning), "■"));
|
||||
|
||||
TargetMark.Append(Snitch.GetWarningMark(seer, target));
|
||||
TargetMark.Append(Marshall.GetWarningMark(seer, target));
|
||||
|
||||
if ((seer.Data.IsDead || Main.LoversPlayers.Exists(x => x.PlayerId == seer.PlayerId)) && Main.LoversPlayers.Exists(x => x.PlayerId == target.PlayerId)) TargetMark.Append($"<color={GetRoleColorCode(CustomRoles.Lovers)}> ♥</color>");
|
||||
if ((seer.Data.IsDead || Main.LoversPlayers.Exists(x => x.PlayerId == seer.PlayerId)) && Main.LoversPlayers.Exists(x => x.PlayerId == target.PlayerId))
|
||||
TargetMark.Append($"<color={GetRoleColorCode(CustomRoles.Lovers)}> ♥</color>");
|
||||
|
||||
if (Randomizer.IsShielded(target)) TargetMark.Append(ColorString(GetRoleColor(CustomRoles.Randomizer), "✚"));
|
||||
|
||||
@@ -2446,9 +2449,11 @@ other: ∟ ⌠ ⌡ ╬ ╨ ▓ ▒ ░ « » █ ▄ ▌▀▐│ ┤ ╡ ╢
|
||||
|
||||
if (Options.CurrentGameMode != CustomGameMode.Standard) goto End;
|
||||
|
||||
if (seer.Is(CustomRoleTypes.Impostor) && target.Is(CustomRoles.Snitch) && target.Is(CustomRoles.Madmate) && target.GetTaskState().IsTaskFinished) TargetMark.Append(ColorString(GetRoleColor(CustomRoles.Impostor), "★"));
|
||||
if (seer.Is(CustomRoleTypes.Impostor) && target.Is(CustomRoles.Snitch) && target.Is(CustomRoles.Madmate) && target.GetTaskState().IsTaskFinished)
|
||||
TargetMark.Append(ColorString(GetRoleColor(CustomRoles.Impostor), "★"));
|
||||
|
||||
if (Marshall.CanSeeMarshall(seer) && target.Is(CustomRoles.Marshall) && target.GetTaskState().IsTaskFinished) TargetMark.Append(ColorString(GetRoleColor(CustomRoles.Marshall), "★"));
|
||||
if (Marshall.CanSeeMarshall(seer) && target.Is(CustomRoles.Marshall) && target.GetTaskState().IsTaskFinished)
|
||||
TargetMark.Append(ColorString(GetRoleColor(CustomRoles.Marshall), "★"));
|
||||
|
||||
TargetMark.Append(Executioner.TargetMark(seer, target));
|
||||
TargetMark.Append(Gamer.TargetMark(seer, target));
|
||||
@@ -3361,5 +3366,13 @@ other: ∟ ⌠ ⌡ ╬ ╨ ▓ ▒ ░ « » █ ▄ ▌▀▐│ ┤ ╡ ╢
|
||||
{
|
||||
return Main.PlayerVersion.ContainsKey(id);
|
||||
}
|
||||
|
||||
public static float CalculatePingDelay()
|
||||
{
|
||||
// The value of AmongUsClient.Instance.Ping is in milliseconds (ms), so ÷1000 to convert to seconds
|
||||
float divice = Options.CurrentGameMode != CustomGameMode.Standard ? 3000f : 2000f;
|
||||
float minTime = Mathf.Max(0.02f, AmongUsClient.Instance.Ping / divice * 6f);
|
||||
return minTime;
|
||||
}
|
||||
}
|
||||
}
|
||||
+24
-17
@@ -1018,16 +1018,20 @@ namespace EHR
|
||||
if (text.Length < 6 || !GameStates.IsMeeting) return;
|
||||
|
||||
string toVote = text[6..].Replace(" ", string.Empty);
|
||||
if (!byte.TryParse(toVote, out byte voteId) || MeetingHud.Instance?.playerStates?.FirstOrDefault(x => x.TargetPlayerId == player.PlayerId)?.DidVote == true) return;
|
||||
if (!byte.TryParse(toVote, out byte voteId) || MeetingHud.Instance.playerStates?.FirstOrDefault(x => x.TargetPlayerId == player.PlayerId)?.DidVote is true or null) return;
|
||||
|
||||
if (voteId > Main.AllPlayerControls.Length) return;
|
||||
|
||||
if (player.PlayerId != PlayerControl.LocalPlayer.PlayerId) ChatManager.SendPreviousMessagesToAll();
|
||||
if (player.PlayerId != PlayerControl.LocalPlayer.PlayerId)
|
||||
ChatManager.SendPreviousMessagesToAll();
|
||||
|
||||
var votedPlayer = voteId.GetPlayer();
|
||||
if (Main.PlayerStates.TryGetValue(player.PlayerId, out var state) && votedPlayer != null && state.Role.OnVote(player, votedPlayer)) return;
|
||||
|
||||
if (!player.IsHost())
|
||||
MeetingHud.Instance?.CastVote(player.PlayerId, voteId);
|
||||
MeetingHud.Instance.CastVote(player.PlayerId, voteId);
|
||||
else
|
||||
MeetingHud.Instance?.CmdCastVote(player.PlayerId, voteId);
|
||||
MeetingHud.Instance.CmdCastVote(player.PlayerId, voteId);
|
||||
}
|
||||
|
||||
private static void SayCommand(ChatController __instance, PlayerControl player, string text, string[] args)
|
||||
@@ -1063,7 +1067,7 @@ namespace EHR
|
||||
|
||||
private static void TemplateCommand(ChatController __instance, PlayerControl player, string text, string[] args)
|
||||
{
|
||||
if (player.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (player.IsLocalPlayer())
|
||||
{
|
||||
if (args.Length > 1)
|
||||
TemplateManager.SendTemplate(args[1]);
|
||||
@@ -1462,7 +1466,7 @@ namespace EHR
|
||||
Utils.SendMessage(GetString("Message.AllowNameLength"), player.PlayerId);
|
||||
else
|
||||
{
|
||||
if (player.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (player.IsLocalPlayer())
|
||||
Main.NickName = args[1];
|
||||
else
|
||||
{
|
||||
@@ -2245,16 +2249,19 @@ namespace EHR
|
||||
|
||||
if (player.Is(CustomRoles.Lovers) || player.GetCustomRole() is CustomRoles.LovingCrewmate or CustomRoles.LovingImpostor)
|
||||
{
|
||||
PlayerControl otherLover = Main.LoversPlayers.First(x => x.PlayerId != player.PlayerId);
|
||||
PlayerControl otherLover = Main.LoversPlayers.FirstOrDefault(x => x.PlayerId != player.PlayerId);
|
||||
|
||||
LateTask.New(() =>
|
||||
if (otherLover != null)
|
||||
{
|
||||
string title = player.GetRealName();
|
||||
ChatUpdatePatch.LoversMessage = true;
|
||||
Utils.SendMessage(text, otherLover.PlayerId, title);
|
||||
Utils.SendMessage(text, player.PlayerId, title);
|
||||
LateTask.New(() => ChatUpdatePatch.LoversMessage = false, Math.Max(AmongUsClient.Instance.Ping / 1000f * 2f, Main.MessageWait.Value + 0.5f), log: false);
|
||||
}, 0.2f, log: false);
|
||||
LateTask.New(() =>
|
||||
{
|
||||
string title = player.GetRealName();
|
||||
ChatUpdatePatch.LoversMessage = true;
|
||||
Utils.SendMessage(text, otherLover.PlayerId, title);
|
||||
Utils.SendMessage(text, player.PlayerId, title);
|
||||
LateTask.New(() => ChatUpdatePatch.LoversMessage = false, Math.Max(AmongUsClient.Instance.Ping / 1000f * 2f, Main.MessageWait.Value + 0.5f), log: false);
|
||||
}, 0.2f, log: false);
|
||||
}
|
||||
}
|
||||
else
|
||||
LateTask.New(() => Utils.SendMessage(GetString("LoversChatCannotTalkMsg"), player.PlayerId, GetString("LoversChatCannotTalkTitle")), 0.5f, log: false);
|
||||
@@ -2267,7 +2274,7 @@ namespace EHR
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(ChatController), nameof(ChatController.Update))]
|
||||
internal class ChatUpdatePatch
|
||||
internal static class ChatUpdatePatch
|
||||
{
|
||||
public static bool DoBlockChat;
|
||||
public static bool LoversMessage;
|
||||
@@ -2346,7 +2353,7 @@ namespace EHR
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(FreeChatInputField), nameof(FreeChatInputField.UpdateCharCount))]
|
||||
internal class UpdateCharCountPatch
|
||||
internal static class UpdateCharCountPatch
|
||||
{
|
||||
public static void Postfix(FreeChatInputField __instance)
|
||||
{
|
||||
@@ -2364,7 +2371,7 @@ namespace EHR
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.RpcSendChat))]
|
||||
internal class RpcSendChatPatch
|
||||
internal static class RpcSendChatPatch
|
||||
{
|
||||
public static bool Prefix(PlayerControl __instance, string chatText, ref bool __result)
|
||||
{
|
||||
|
||||
@@ -54,8 +54,7 @@ namespace EHR
|
||||
else
|
||||
OpenKeyboardIcon.sprite = Utils.LoadSprite("EHR.Resources.Images.DarkKeyboard.png", 100f);
|
||||
}
|
||||
else
|
||||
__instance.freeChatField.textArea.outputText.color = Color.black;
|
||||
else __instance.freeChatField.textArea.outputText.color = Color.black;
|
||||
|
||||
if (!__instance.freeChatField.textArea.hasFocus) return;
|
||||
|
||||
@@ -176,7 +175,7 @@ namespace EHR
|
||||
{
|
||||
case 1 when player.IsAlive(): // Guessing Command & Such
|
||||
Logger.Info("Special Command", "ChatManager");
|
||||
if (player.PlayerId == PlayerControl.LocalPlayer.PlayerId) break;
|
||||
if (player.IsLocalPlayer()) break;
|
||||
|
||||
LateTask.New(() =>
|
||||
{
|
||||
|
||||
@@ -60,16 +60,30 @@ namespace EHR
|
||||
if (menuDescription == null) return;
|
||||
|
||||
Transform infoImage = menuDescription.transform.FindChild("InfoImage");
|
||||
infoImage.transform.localPosition = new(-4.65f, 0.16f, -1f);
|
||||
infoImage.transform.localScale = new(0.2202f, 0.2202f, 0.3202f);
|
||||
|
||||
if (infoImage != null)
|
||||
{
|
||||
infoImage.transform.localPosition = new(-4.65f, 0.16f, -1f);
|
||||
infoImage.transform.localScale = new(0.2202f, 0.2202f, 0.3202f);
|
||||
}
|
||||
|
||||
Transform infoText = menuDescription.transform.FindChild("InfoText");
|
||||
infoText.transform.localPosition = new(-3.5f, 0.83f, -2f);
|
||||
infoText.transform.localScale = new(1f, 1f, 1f);
|
||||
|
||||
if (infoText != null)
|
||||
{
|
||||
infoText.transform.localPosition = new(-3.5f, 0.83f, -2f);
|
||||
infoText.transform.localScale = new(1f, 1f, 1f);
|
||||
}
|
||||
|
||||
Transform cubeObject = menuDescription.transform.FindChild("Cube");
|
||||
cubeObject.transform.localPosition = new(-3.2f, 0.55f, -0.1f);
|
||||
cubeObject.transform.localScale = new(0.61f, 0.64f, 1f);
|
||||
TextMeshPro menuDescriptionText = GameSettingMenu.Instance.MenuDescriptionText;
|
||||
menuDescriptionText.m_marginWidth = 2.5f;
|
||||
|
||||
if (cubeObject != null)
|
||||
{
|
||||
cubeObject.transform.localPosition = new(-3.2f, 0.55f, -0.1f);
|
||||
cubeObject.transform.localScale = new(0.61f, 0.64f, 1f);
|
||||
}
|
||||
|
||||
GameSettingMenu.Instance.MenuDescriptionText.m_marginWidth = 2.5f;
|
||||
}, 0.2f, log: false);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ namespace EHR.Patches
|
||||
|
||||
public static bool Prefix(GameModes gameMode)
|
||||
{
|
||||
if ((!AmongUsClient.Instance.AmHost && PlayerControl.LocalPlayer != null) || gameMode != GameModes.HideNSeek || Warned) return true;
|
||||
if ((!AmongUsClient.Instance.AmHost && PlayerControl.LocalPlayer != null) || gameMode != GameModes.HideNSeek || Warned || !HudManager.Instance) return true;
|
||||
|
||||
HudManager.Instance.ShowPopUp(Translator.GetString("HnSUnloadWarning"));
|
||||
return false;
|
||||
|
||||
@@ -220,6 +220,9 @@ namespace EHR.Patches
|
||||
case CustomRoles.CTFPlayer:
|
||||
__instance.AbilityButton?.OverrideText(GetString("CTF_ButtonText"));
|
||||
break;
|
||||
case CustomRoles.RRPlayer when __instance.AbilityButton != null && __instance.AbilityButton && RoomRush.VentLimit.TryGetValue(PlayerControl.LocalPlayer.PlayerId, out var ventLimit):
|
||||
__instance.AbilityButton.SetUsesRemaining(ventLimit);
|
||||
break;
|
||||
}
|
||||
|
||||
if (role.PetActivatedAbility() && Options.CurrentGameMode == CustomGameMode.Standard && !role.OnlySpawnsWithPets() && !player.GetCustomSubRoles().Any(StartGameHostPatch.BasisChangingAddons.ContainsKey) && role != CustomRoles.Changeling)
|
||||
@@ -463,6 +466,8 @@ namespace EHR.Patches
|
||||
__instance.AbilityButton?.ToggleVisible(false);
|
||||
return;
|
||||
case CustomGameMode.RoomRush:
|
||||
__instance.ImpostorVentButton?.ToggleVisible(false);
|
||||
goto case CustomGameMode.CaptureTheFlag;
|
||||
case CustomGameMode.CaptureTheFlag:
|
||||
case CustomGameMode.HideAndSeek:
|
||||
__instance.ReportButton?.ToggleVisible(false);
|
||||
|
||||
@@ -37,8 +37,7 @@ namespace EHR
|
||||
if (player == null) return;
|
||||
|
||||
if (!Main.EnableCustomButton.Value || !Main.ProcessShapeshifts || Mastermind.ManipulatedPlayers.ContainsKey(player.PlayerId)) return;
|
||||
|
||||
if (!SetHudActivePatch.IsActive || !player.IsAlive()) return;
|
||||
if (!SetHudActivePatch.IsActive || !player.IsAlive() || Options.CurrentGameMode != CustomGameMode.Standard) return;
|
||||
|
||||
if (!AmongUsClient.Instance.IsGameStarted || !Main.IntroDestroyed)
|
||||
{
|
||||
@@ -54,15 +53,10 @@ namespace EHR
|
||||
bool shapeshifting = player.IsShifted();
|
||||
|
||||
if (!Kill) Kill = __instance.KillButton.graphic.sprite;
|
||||
|
||||
if (!Ability) Ability = __instance.AbilityButton.graphic.sprite;
|
||||
|
||||
if (!Vent) Vent = __instance.ImpostorVentButton.graphic.sprite;
|
||||
|
||||
if (!Sabotage) Sabotage = __instance.SabotageButton.graphic.sprite;
|
||||
|
||||
if (!Pet) Pet = __instance.PetButton.graphic.sprite;
|
||||
|
||||
if (!Report) Report = __instance.ReportButton.graphic.sprite;
|
||||
|
||||
Sprite newKillButton = Kill;
|
||||
|
||||
@@ -391,7 +391,7 @@ namespace EHR
|
||||
break;
|
||||
}
|
||||
|
||||
if (Main.LoversPlayers.Count == 2 && Main.LoversPlayers.Exists(x => x.PlayerId == PlayerControl.LocalPlayer.PlayerId))
|
||||
if (Main.LoversPlayers.Count == 2 && Main.LoversPlayers.Exists(x => x.IsLocalPlayer()))
|
||||
{
|
||||
__instance.TeamTitle.color = __instance.BackgroundBar.material.color = Utils.GetRoleColor(CustomRoles.Lovers);
|
||||
byte otherLoverId = Main.LoversPlayers.First(x => x.PlayerId != PlayerControl.LocalPlayer.PlayerId).PlayerId;
|
||||
|
||||
@@ -914,7 +914,7 @@ namespace EHR
|
||||
{
|
||||
foreach (PlayerControl target in Main.AllPlayerControls)
|
||||
{
|
||||
if (seer.PlayerId == target.PlayerId || target.PlayerId == PlayerControl.LocalPlayer.PlayerId) continue;
|
||||
if (seer.PlayerId == target.PlayerId || target.IsLocalPlayer()) continue;
|
||||
|
||||
if (rolesMap.TryGetValue((seer.PlayerId, target.PlayerId), out (RoleTypes, CustomRoles) roleMap))
|
||||
{
|
||||
|
||||
@@ -182,8 +182,7 @@ namespace EHR
|
||||
return false;
|
||||
}
|
||||
|
||||
float divice = Options.CurrentGameMode != CustomGameMode.Standard ? 3000f : 2000f;
|
||||
float minTime = Mathf.Max(0.02f, AmongUsClient.Instance.Ping / divice * 6f); // The value of AmongUsClient.Instance.Ping is in milliseconds (ms), so ÷1000
|
||||
float minTime = CalculatePingDelay();
|
||||
|
||||
// No value is stored in TimeSinceLastKill || Stored time is greater than or equal to minTime => Allow kill
|
||||
// ↓ If not allowed
|
||||
@@ -436,7 +435,7 @@ namespace EHR
|
||||
{
|
||||
Notify("GAGuarded");
|
||||
|
||||
if (killer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (killer.IsLocalPlayer())
|
||||
Achievements.Type.IForgotThisRoleExists.CompleteAfterGameEnd();
|
||||
|
||||
return false;
|
||||
@@ -952,7 +951,7 @@ namespace EHR
|
||||
|
||||
if (!Hypnotist.OnAnyoneReport())
|
||||
{
|
||||
if (__instance.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (__instance.IsLocalPlayer())
|
||||
Achievements.Type.Hypnosis.CompleteAfterGameEnd();
|
||||
|
||||
return false;
|
||||
@@ -1165,7 +1164,7 @@ namespace EHR
|
||||
private static readonly Dictionary<byte, int> BufferTime = [];
|
||||
private static readonly Dictionary<byte, int> DeadBufferTime = [];
|
||||
private static readonly Dictionary<byte, long> LastUpdate = [];
|
||||
private static long LastAddAbilityTime;
|
||||
private static readonly Dictionary<byte, long> LastAddAbilityTime = [];
|
||||
private static long LastErrorTS;
|
||||
|
||||
public static void Postfix(PlayerControl __instance)
|
||||
@@ -1422,9 +1421,9 @@ namespace EHR
|
||||
|
||||
// Ability Use Gain every 5 seconds
|
||||
|
||||
if (inTask && alive && Main.PlayerStates.TryGetValue(playerId, out PlayerState state) && state.TaskState.RemainingTasksCount <= 0 && LastAddAbilityTime + 5 < now)
|
||||
if (inTask && alive && Main.PlayerStates.TryGetValue(playerId, out PlayerState state) && state.TaskState.RemainingTasksCount <= 0 && (!LastAddAbilityTime.TryGetValue(playerId, out var ts) || ts + 5 < now))
|
||||
{
|
||||
LastAddAbilityTime = now;
|
||||
LastAddAbilityTime[playerId] = now;
|
||||
|
||||
AddExtraAbilityUsesOnFinishedTasks(player);
|
||||
}
|
||||
@@ -1555,10 +1554,6 @@ namespace EHR
|
||||
// Name Color Manager
|
||||
RealName = RealName.ApplyNameColorData(seer, target, false);
|
||||
|
||||
if (Marshall.CanSeeMarshall(seer))
|
||||
if (target.Is(CustomRoles.Marshall) && target.GetTaskState().IsTaskFinished)
|
||||
Mark.Append(ColorString(GetRoleColor(CustomRoles.Marshall), "★"));
|
||||
|
||||
Main.PlayerStates.Values.Do(x => Suffix.Append(x.Role.GetSuffix(seer, target, meeting: GameStates.IsMeeting)));
|
||||
|
||||
if (self) Suffix.Append(CustomTeamManager.GetSuffix(seer));
|
||||
@@ -1570,7 +1565,7 @@ namespace EHR
|
||||
case CustomRoles.Snitch when seer.IsImpostor() && target.Is(CustomRoles.Madmate) && target.GetTaskState().IsTaskFinished:
|
||||
Mark.Append(ColorString(GetRoleColor(CustomRoles.Impostor), "★"));
|
||||
break;
|
||||
case CustomRoles.Marshall when seer.IsCrewmate() && target.GetTaskState().IsTaskFinished:
|
||||
case CustomRoles.Marshall when Marshall.CanSeeMarshall(seer) && target.GetTaskState().IsTaskFinished:
|
||||
Mark.Append(ColorString(GetRoleColor(CustomRoles.Marshall), "★"));
|
||||
break;
|
||||
case CustomRoles.SuperStar when Options.EveryOneKnowSuperStar.GetBool():
|
||||
@@ -1848,7 +1843,7 @@ namespace EHR
|
||||
{
|
||||
Logger.Info($" {pc.GetNameWithRole()}, Vent ID: {__instance.Id} ({__instance.name})", "ExitVent");
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId) LateTask.New(() => HudManager.Instance.SetHudActive(pc, pc.Data.Role, true), 0.6f, log: false);
|
||||
if (pc.IsLocalPlayer()) LateTask.New(() => HudManager.Instance.SetHudActive(pc, pc.Data.Role, true), 0.6f, log: false);
|
||||
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
@@ -2029,7 +2024,7 @@ namespace EHR
|
||||
|
||||
Main.PlayerStates[__instance.myPlayer.PlayerId].Role.OnCoEnterVent(__instance, id);
|
||||
|
||||
if (__instance.myPlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (__instance.myPlayer.IsLocalPlayer())
|
||||
Statistics.VentTimes++;
|
||||
|
||||
return true;
|
||||
|
||||
@@ -94,7 +94,7 @@ namespace EHR.AddOns.Common
|
||||
|
||||
int charge = DetermineCharge(player);
|
||||
|
||||
if (player.PlayerId == PlayerControl.LocalPlayer.PlayerId && charge is <= 0 or >= 100)
|
||||
if (player.IsLocalPlayer() && charge is <= 0 or >= 100)
|
||||
LocalPlayerAvoidsZeroAndOneHundredPrecent = false;
|
||||
|
||||
if (DisplaysCharge.GetBool() && !player.IsModClient() && LastNum[player.PlayerId] != charge)
|
||||
|
||||
@@ -139,7 +139,7 @@ namespace EHR.AddOns.Crewmate
|
||||
Timers[pc.PlayerId] = 0;
|
||||
pc.Suicide();
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (pc.IsLocalPlayer())
|
||||
Achievements.Type.OutOfTime.Complete();
|
||||
}
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@ namespace EHR.AddOns.Impostor
|
||||
Timer[id] = 0;
|
||||
pc.Suicide();
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (pc.IsLocalPlayer())
|
||||
Achievements.Type.OutOfTime.Complete();
|
||||
}
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ namespace EHR.Crewmate
|
||||
player.Suicide();
|
||||
SuicideTimer = -10f;
|
||||
|
||||
if (player.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (player.IsLocalPlayer())
|
||||
Achievements.Type.OutOfTime.Complete();
|
||||
}
|
||||
else if (Mathf.Approximately(SuicideTimer + 8, TimeLimit.GetFloat()))
|
||||
|
||||
@@ -94,7 +94,7 @@ namespace EHR.Crewmate
|
||||
Timer = 0;
|
||||
pc.Suicide();
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (pc.IsLocalPlayer())
|
||||
Achievements.Type.OutOfTime.Complete();
|
||||
}
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ namespace EHR.Crewmate
|
||||
ReviveStartTS = 0;
|
||||
ReviveTargetPos = Vector2.zero;
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId && rtg != null && (rtg.IsImpostor() || rtg.IsNeutralKiller() || rtg.IsConverted()))
|
||||
if (pc.IsLocalPlayer() && rtg != null && (rtg.IsImpostor() || rtg.IsNeutralKiller() || rtg.IsConverted()))
|
||||
Achievements.Type.IWishIReported.Complete();
|
||||
}
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ namespace EHR.Crewmate
|
||||
|
||||
LastChange[pc.PlayerId] = now;
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (pc.IsLocalPlayer())
|
||||
Achievements.Type.ALightInTheShadows.CompleteAfterGameEnd();
|
||||
|
||||
break;
|
||||
|
||||
@@ -63,7 +63,7 @@ namespace EHR.Crewmate
|
||||
bodyguard.BodyguardPC.Suicide(PlayerState.DeathReason.Sacrifice, killer);
|
||||
Logger.Info($"{bodyguard.BodyguardPC.GetRealName()} stood up and died for {target.GetRealName()}", "Bodyguard");
|
||||
|
||||
if (bodyguard.BodyguardPC.PlayerId == PlayerControl.LocalPlayer.PlayerId && target.Is(CustomRoles.President))
|
||||
if (bodyguard.BodyguardPC.IsLocalPlayer() && target.Is(CustomRoles.President))
|
||||
Achievements.Type.GetDownMrPresident.Complete();
|
||||
|
||||
return false;
|
||||
|
||||
@@ -134,7 +134,7 @@ namespace EHR.Crewmate
|
||||
}
|
||||
}
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
Achievements.Type.Delicious.Complete();
|
||||
}
|
||||
|
||||
|
||||
@@ -124,7 +124,7 @@ namespace EHR.Crewmate
|
||||
}, SEDelay.GetFloat(), log: false);
|
||||
}
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
Achievements.Type.Delicious.Complete();
|
||||
|
||||
return false;
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace EHR.Crewmate
|
||||
target.MarkDirtySettings();
|
||||
}, FreezeDuration.GetFloat(), "Electric Freeze Reset");
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
Achievements.Type.TooCold.CompleteAfterGameEnd();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ namespace EHR.Crewmate
|
||||
Utils.SendMessage(string.Format(Translator.GetString("MathematicianAnsweredString"), pc.GetRealName(), answer), title: Translator.GetString("Mathematician"));
|
||||
State.AskedQuestion = false;
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (pc.IsLocalPlayer())
|
||||
Achievements.Type.TheBestInSchool.Complete();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,7 +180,7 @@ namespace EHR.Crewmate
|
||||
Utils.NotifyRoles(SpecifySeer: killer, SpecifyTarget: target);
|
||||
Utils.NotifyRoles(SpecifySeer: target, SpecifyTarget: killer);
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId && target.Is(CustomRoles.Snitch))
|
||||
if (target.IsLocalPlayer() && target.Is(CustomRoles.Snitch))
|
||||
{
|
||||
if (WhoCanSeeProtect.GetInt() is 1 or 3) Achievements.Type.ImUnstoppable.CompleteAfterGameEnd();
|
||||
else Achievements.Type.ImUnstoppable.Complete();
|
||||
@@ -227,7 +227,7 @@ namespace EHR.Crewmate
|
||||
}
|
||||
}
|
||||
|
||||
if (killer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (killer.IsLocalPlayer())
|
||||
{
|
||||
LocalPlayerTryKillShieldedTimes++;
|
||||
if (LocalPlayerTryKillShieldedTimes >= 2) Achievements.Type.DiePleaseDie.CompleteAfterGameEnd();
|
||||
|
||||
@@ -130,7 +130,7 @@ namespace EHR.Crewmate
|
||||
pc.MarkDirtySettings();
|
||||
NotifyAboutRNG(pc);
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (pc.IsLocalPlayer())
|
||||
Achievements.Type.TooCold.CompleteAfterGameEnd();
|
||||
}
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@ namespace EHR.Crewmate
|
||||
|
||||
Timer += 35;
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
Achievements.Type.TooCold.CompleteAfterGameEnd();
|
||||
|
||||
break;
|
||||
|
||||
@@ -110,7 +110,7 @@ namespace EHR.Crewmate
|
||||
else TimeMasterBackTrack.Add(player.PlayerId, player.Pos());
|
||||
}
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (pc.IsLocalPlayer())
|
||||
Achievements.Type.APerfectTimeToRewindIt.Complete();
|
||||
}
|
||||
else pc.Notify(Translator.GetString("OutOfAbilityUsesDoMoreTasks"));
|
||||
|
||||
@@ -217,7 +217,7 @@ namespace EHR.Crewmate
|
||||
x.MarkDirtySettings();
|
||||
affectedPlayers.Add(x);
|
||||
|
||||
if (x.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (x.IsLocalPlayer())
|
||||
Achievements.Type.TooCold.CompleteAfterGameEnd();
|
||||
});
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ namespace EHR.Crewmate
|
||||
killer.Kill(target);
|
||||
Logger.Info($"{target.GetRealName()} reverse reverse killed:{target.GetRealName()}", "Pestilence Reflect");
|
||||
|
||||
if (killer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (killer.IsLocalPlayer())
|
||||
Achievements.Type.YoureTooLate.Complete();
|
||||
|
||||
return false;
|
||||
|
||||
@@ -171,7 +171,7 @@ namespace EHR.Impostor
|
||||
|
||||
Utils.NotifyRoles(ForceLoop: true);
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId && totalAlive <= murderCount)
|
||||
if (pc.IsLocalPlayer() && totalAlive <= murderCount)
|
||||
Achievements.Type.ItsJustAPrankBro.Complete();
|
||||
}, 1.5f, "Bomber Suiscide");
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ namespace EHR.Impostor
|
||||
target.SetRealKiller(player);
|
||||
target.Kill(player);
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
Achievements.Type.YoureTooLate.Complete();
|
||||
|
||||
Logger.Info($"Crewpostor tried to kill Pestilence:{target.GetNameWithRole()} => {player.GetNameWithRole().RemoveHtmlTags()}", "Pestilence Reflect");
|
||||
|
||||
@@ -207,7 +207,7 @@ namespace EHR.Impostor
|
||||
|
||||
target.Suicide(realKiller: deathpact);
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
Achievements.Type.OutOfTime.Complete();
|
||||
}
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ namespace EHR.Impostor
|
||||
target.MarkDirtySettings();
|
||||
shapeshifter.TP(pos);
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
Achievements.Type.TooCold.CompleteAfterGameEnd();
|
||||
}
|
||||
else
|
||||
|
||||
@@ -55,7 +55,7 @@ namespace EHR.Impostor
|
||||
target.MarkDirtySettings();
|
||||
}, FreezeDuration.GetFloat(), "FreezerFreezeDuration");
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
Achievements.Type.TooCold.CompleteAfterGameEnd();
|
||||
}
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ namespace EHR.Impostor
|
||||
RPC.PlaySoundRPC(MastermindId, Sounds.KillSound);
|
||||
player.RpcChangeRoleBasis(player.GetCustomRole());
|
||||
|
||||
if (player.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (player.IsLocalPlayer())
|
||||
Achievements.Type.OutOfTime.Complete();
|
||||
}
|
||||
|
||||
@@ -172,7 +172,7 @@ namespace EHR.Impostor
|
||||
target.Kill(killer);
|
||||
TempKCDs.Remove(killer.PlayerId);
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
Achievements.Type.YoureTooLate.Complete();
|
||||
|
||||
return false;
|
||||
|
||||
@@ -63,7 +63,7 @@ namespace EHR.Impostor
|
||||
|
||||
killer.Suicide(PlayerState.DeathReason.Kill, target);
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
Achievements.Type.YoureTooLate.Complete();
|
||||
|
||||
return false;
|
||||
|
||||
@@ -93,7 +93,7 @@ namespace EHR.Impostor
|
||||
SuicideTimer = float.NaN;
|
||||
Timer = TimeLimit.GetInt();
|
||||
|
||||
if (player.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (player.IsLocalPlayer())
|
||||
Achievements.Type.OutOfTime.Complete();
|
||||
}
|
||||
else
|
||||
|
||||
@@ -66,7 +66,7 @@ namespace EHR.Impostor
|
||||
ForSilencer.Add(target.PlayerId);
|
||||
killer.SetKillCooldown(3f);
|
||||
|
||||
if (killer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (killer.IsLocalPlayer())
|
||||
{
|
||||
LocalPlayerTotalSilences++;
|
||||
if (LocalPlayerTotalSilences >= 5) Achievements.Type.Censorship.Complete();
|
||||
@@ -83,7 +83,7 @@ namespace EHR.Impostor
|
||||
{
|
||||
ForSilencer.Add(target.PlayerId);
|
||||
|
||||
if (shapeshifter.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (shapeshifter.IsLocalPlayer())
|
||||
{
|
||||
LocalPlayerTotalSilences++;
|
||||
if (LocalPlayerTotalSilences >= 5) Achievements.Type.Censorship.Complete();
|
||||
|
||||
@@ -21,9 +21,9 @@ namespace EHR.Impostor
|
||||
private static OptionItem PestControlDuration;
|
||||
private static OptionItem PestControlSpeed;
|
||||
private static OptionItem PestControlVision;
|
||||
|
||||
public Dictionary<byte, long> DelayedKills;
|
||||
private bool EvadedKillThisRound;
|
||||
|
||||
private long LastUpdate;
|
||||
public HashSet<byte> MeetingKills;
|
||||
private long PestControlEnd;
|
||||
@@ -113,10 +113,10 @@ namespace EHR.Impostor
|
||||
SwarmModeEnd = 0;
|
||||
Utils.SendRPC(CustomRPC.SyncRoleData, WaspPC.PlayerId, SwarmModeEnd);
|
||||
|
||||
if (WaspDiesAfterSwarmEnd.GetBool())
|
||||
pc.Suicide();
|
||||
if (WaspDiesAfterSwarmEnd.GetBool()) pc.Suicide();
|
||||
else
|
||||
{
|
||||
pc.ResetKillCooldown();
|
||||
pc.SyncSettings();
|
||||
pc.SetKillCooldown(StingCooldown.GetInt());
|
||||
}
|
||||
@@ -144,6 +144,9 @@ namespace EHR.Impostor
|
||||
}
|
||||
|
||||
DelayedKills.Clear();
|
||||
|
||||
if (WaspPC == null || !WaspPC.IsAlive())
|
||||
MeetingKills.Clear();
|
||||
}
|
||||
|
||||
public override bool OnCheckMurderAsTarget(PlayerControl killer, PlayerControl target)
|
||||
@@ -237,7 +240,6 @@ namespace EHR.Impostor
|
||||
public override string GetSuffix(PlayerControl seer, PlayerControl target, bool hud = false, bool meeting = false)
|
||||
{
|
||||
if (seer.PlayerId != WaspPC.PlayerId || seer.PlayerId != target.PlayerId || (seer.IsModClient() && !hud) || meeting || SwarmModeEnd == 0) return string.Empty;
|
||||
|
||||
return string.Format(Translator.GetString("Wasp.SwarmModeSuffix"), SwarmModeEnd - Utils.TimeStamp);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@ namespace EHR.Neutral
|
||||
target.Kill(killer);
|
||||
ResetBomb();
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
Achievements.Type.YoureTooLate.Complete();
|
||||
|
||||
return false;
|
||||
@@ -135,7 +135,7 @@ namespace EHR.Neutral
|
||||
Logger.Info($"{killer.GetNameWithRole().RemoveHtmlTags()} bombed {pc.GetNameWithRole().RemoveHtmlTags()}, bomb cd complete", "Agitater");
|
||||
ResetBomb();
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (pc.IsLocalPlayer())
|
||||
Achievements.Type.OutOfTime.Complete();
|
||||
}
|
||||
}
|
||||
@@ -219,7 +219,7 @@ namespace EHR.Neutral
|
||||
target.Kill(player);
|
||||
ResetBomb();
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
Achievements.Type.YoureTooLate.Complete();
|
||||
|
||||
return;
|
||||
|
||||
@@ -357,7 +357,7 @@ namespace EHR.Neutral
|
||||
break;
|
||||
}
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (pc.IsLocalPlayer())
|
||||
PurchasedItems.Add(SelectedItem);
|
||||
|
||||
break;
|
||||
|
||||
@@ -111,7 +111,7 @@ namespace EHR.Neutral
|
||||
{
|
||||
pc.Suicide(realKiller: Utils.GetPlayerById(BeehiveId));
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (pc.IsLocalPlayer())
|
||||
Achievements.Type.OutOfTime.Complete();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -202,7 +202,7 @@ namespace EHR.Neutral
|
||||
sender.SendMessage();
|
||||
DoppelPresentSkin[pc.PlayerId] = newOutfit;
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (pc.IsLocalPlayer())
|
||||
{
|
||||
LocalPlayerChangeSkinTimes++;
|
||||
if (LocalPlayerChangeSkinTimes >= 2) Achievements.Type.Mimicry.Complete();
|
||||
@@ -231,14 +231,14 @@ namespace EHR.Neutral
|
||||
|
||||
string kname;
|
||||
|
||||
if (killer.PlayerId == PlayerControl.LocalPlayer.PlayerId && Main.NickName.Length != 0)
|
||||
if (killer.IsLocalPlayer() && Main.NickName.Length != 0)
|
||||
kname = Main.NickName;
|
||||
else
|
||||
kname = killer.Data.PlayerName;
|
||||
|
||||
string tname;
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId && Main.NickName.Length != 0)
|
||||
if (target.IsLocalPlayer() && Main.NickName.Length != 0)
|
||||
tname = Main.NickName;
|
||||
else
|
||||
tname = target.Data.PlayerName;
|
||||
@@ -261,6 +261,8 @@ namespace EHR.Neutral
|
||||
Utils.NotifyRoles();
|
||||
killer.ResetKillCooldown();
|
||||
killer.SetKillCooldown();
|
||||
|
||||
target.SetRealKiller(killer);
|
||||
}
|
||||
|
||||
public override void OnReportDeadBody()
|
||||
|
||||
@@ -118,7 +118,7 @@ namespace EHR.Neutral
|
||||
{
|
||||
target.Kill(killer);
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
Achievements.Type.YoureTooLate.Complete();
|
||||
|
||||
return false;
|
||||
|
||||
@@ -157,7 +157,7 @@ namespace EHR.Neutral
|
||||
SendRPC();
|
||||
HookshotPC.SetKillCooldown(5f);
|
||||
|
||||
if (killer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (killer.IsLocalPlayer())
|
||||
Achievements.Type.WellMeetAgainSomeSunnyDay.Complete();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -172,7 +172,7 @@ namespace EHR.Neutral
|
||||
|
||||
Logger.Info($" {target.Data?.PlayerName} = {target.GetCustomRole()} + {CustomRoles.Sidekick}", $"Assign {CustomRoles.Sidekick}");
|
||||
|
||||
if (killer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (killer.IsLocalPlayer())
|
||||
Achievements.Type.YoureMyFriendNow.Complete();
|
||||
|
||||
return false;
|
||||
|
||||
@@ -106,7 +106,7 @@ namespace EHR.Neutral
|
||||
|
||||
new[] { CustomRoles.Damocles, CustomRoles.Stressed }.Do(x => Main.PlayerStates[target.PlayerId].RemoveSubRole(x));
|
||||
|
||||
if (killer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (killer.IsLocalPlayer())
|
||||
Achievements.Type.YoureMyFriendNow.Complete();
|
||||
|
||||
return false;
|
||||
@@ -225,7 +225,7 @@ namespace EHR.Neutral
|
||||
|
||||
Logger.Info($"Recruit: {target.Data?.PlayerName} = {target.GetCustomRole()} + {CustomRoles.Undead}", $"Assign {CustomRoles.Undead}");
|
||||
|
||||
if (killer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (killer.IsLocalPlayer())
|
||||
Achievements.Type.YoureMyFriendNow.Complete();
|
||||
|
||||
return false;
|
||||
|
||||
@@ -113,7 +113,7 @@ namespace EHR.Neutral
|
||||
|
||||
pc.MarkDirtySettings();
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId) HudManager.Instance.SetHudActive(pc, pc.Data.Role, true);
|
||||
if (pc.IsLocalPlayer()) HudManager.Instance.SetHudActive(pc, pc.Data.Role, true);
|
||||
}
|
||||
|
||||
public override void OnEnterVent(PlayerControl pc, Vent vent)
|
||||
|
||||
@@ -179,7 +179,7 @@ namespace EHR.Neutral
|
||||
killer.SetRealKiller(target);
|
||||
target.Kill(killer);
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
Achievements.Type.YoureTooLate.Complete();
|
||||
|
||||
return false;
|
||||
|
||||
@@ -213,7 +213,7 @@ namespace EHR.Neutral
|
||||
|
||||
player.Suicide(PlayerState.DeathReason.Sacrifice);
|
||||
|
||||
if (player.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (player.IsLocalPlayer())
|
||||
Achievements.Type.OutOfTime.Complete();
|
||||
}
|
||||
else RevolutionistCountdown.Add(playerId, countdown);
|
||||
|
||||
@@ -131,7 +131,7 @@ namespace EHR.Neutral
|
||||
|
||||
WasShifter.Add(killer.PlayerId);
|
||||
|
||||
if (killer.PlayerId == PlayerControl.LocalPlayer.PlayerId || target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (killer.IsLocalPlayer() || target.IsLocalPlayer())
|
||||
{
|
||||
ShifterInteractionsCount++;
|
||||
if (ShifterInteractionsCount >= 3) Achievements.Type.TheresThisGameMyDadTaughtMeItsCalledSwitch.Complete();
|
||||
|
||||
@@ -228,7 +228,7 @@ namespace EHR.Neutral
|
||||
simon.MarkedPlayers.Remove(pc.PlayerId);
|
||||
Utils.SendRPC(CustomRPC.SyncRoleData, simon.SimonId, 4, pc.PlayerId);
|
||||
|
||||
if (pc.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (pc.IsLocalPlayer())
|
||||
Achievements.Type.SimonSays.Complete();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,7 +174,7 @@ namespace EHR.Neutral
|
||||
RPC.PlaySoundRPC(target.PlayerId, Sounds.TaskComplete);
|
||||
}, SpiritFreezeTime.GetFloat(), "SpiritcallerFreezeTime");
|
||||
|
||||
if (target.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (target.IsLocalPlayer())
|
||||
Achievements.Type.TooCold.CompleteAfterGameEnd();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ namespace EHR.Neutral
|
||||
|
||||
Logger.Info("SetRole:" + target?.Data?.PlayerName + " = " + target.GetCustomRole() + " + " + CustomRoles.Charmed, "Assign " + CustomRoles.Charmed);
|
||||
|
||||
if (killer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (killer.IsLocalPlayer())
|
||||
Achievements.Type.YoureMyFriendNow.Complete();
|
||||
|
||||
return false;
|
||||
|
||||
@@ -110,7 +110,7 @@ namespace EHR.Neutral
|
||||
else IsWon = true;
|
||||
}
|
||||
|
||||
if (TechnicianPC.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (TechnicianPC.IsLocalPlayer())
|
||||
LocalPlayerFixedSabotageTypes.Add(actualSystemType);
|
||||
}
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ namespace EHR.Neutral
|
||||
{
|
||||
player.Suicide(PlayerState.DeathReason.Kill);
|
||||
|
||||
if (player.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
if (player.IsLocalPlayer())
|
||||
Achievements.Type.OutOfTime.Complete();
|
||||
|
||||
return;
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
global using Object = UnityEngine.Object;
|
||||
global using Vector2 = UnityEngine.Vector2;
|
||||
global using File = System.IO.File;
|
||||
global using StringBuilder = System.Text.StringBuilder;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace EHR
|
||||
public static ManualLogSource Logger;
|
||||
public static bool HasArgumentException;
|
||||
public static string CredentialsText;
|
||||
|
||||
|
||||
public static Dictionary<byte, PlayerVersion> PlayerVersion = [];
|
||||
public static bool ChangedRole = false;
|
||||
public static OptionBackupData RealOptionsData;
|
||||
|
||||
Reference in new issue
Block a user