1+ namespace Nebula . Roles . VirusCrisisRoles ;
2+
3+ public class InfectedSidekick : Role {
4+ private Module . CustomOption freezeCooldown ;
5+ private Module . CustomOption freezeDuring ;
6+
7+ public override bool IsSpawnable ( ) {
8+ return CustomOptionHolder . gameModeNormal . getSelection ( ) == 3 ;
9+ }
10+
11+ public override void LoadOptionData ( ) {
12+ TopOption . tab = Module . CustomOptionTab . ImpostorRoles ;
13+ TopOption . AddCustomPrerequisite ( ( ) => { return CustomOptionHolder . gameModeNormal . getSelection ( ) == 3 ; } ) ;
14+ freezeCooldown = CreateOption ( Color . white , "freezecooldown" , 7.5f , 2.5f , 25f , 2.5f ) ;
15+ freezeCooldown . suffix = "second" ;
16+ freezeDuring = CreateOption ( Color . white , "freezeduring" , 2.5f , 1f , 5f , 0.5f ) ;
17+ freezeDuring . suffix = "second" ;
18+ }
19+
20+ //public int TotalLives;
21+
22+ private SpriteLoader buttonSprite = new ( "Nebula.Resources.ChainShiftButton.png" , 115f ) ;
23+
24+ /*
25+ public override void Initialize(PlayerControl __instance){
26+ RPCEventInvoker.SetInfectLives((byte)(int)lives.getFloat());
27+ }
28+ */
29+
30+ /*
31+ public override Helpers.MurderAttemptResult OnMurdered(byte murderId,byte playerId){
32+ //Helpers.RoleAction(Helpers.playerById(playerId),(role) => { role.OnMeetingStart(); });
33+ RPCEventInvoker.SetInfectLives((byte)(Roles.Infected.TotalLives - 1));
34+ return Helpers.MurderAttemptResult.SuppressKill;
35+ }
36+ */
37+
38+ private CustomButton freeze ;
39+ public override void ButtonInitialize ( HudManager __instance )
40+ {
41+ if ( freeze != null )
42+ {
43+ freeze . Destroy ( ) ;
44+ }
45+ freeze = new CustomButton (
46+ ( ) =>
47+ {
48+ RPCEventInvoker . EmitSpeedFactor ( Game . GameData . data . myData . currentTarget , new Game . SpeedFactor ( 255 , freezeDuring . getFloat ( ) , 0.1f , true ) ) ;
49+ freeze . Timer = freeze . MaxTimer ;
50+ } ,
51+ ( ) => { return ! PlayerControl . LocalPlayer . Data . IsDead ; } ,
52+ ( ) => { return Game . GameData . data . myData . currentTarget && PlayerControl . LocalPlayer . CanMove ; } ,
53+ ( ) => { freeze . Timer = freeze . MaxTimer ; } ,
54+ buttonSprite . GetSprite ( ) ,
55+ Expansion . GridArrangeExpansion . GridArrangeParameter . AlternativeKillButtonContent ,
56+ __instance ,
57+ Module . NebulaInputManager . abilityInput . keyCode ,
58+ "button.label.freeze"
59+ ) . SetTimer ( freezeCooldown . getFloat ( ) ) ;
60+ freeze . MaxTimer = freezeCooldown . getFloat ( ) ;
61+ //killButton.SetButtonCoolDownOption(true);
62+ }
63+
64+ public override void CleanUp ( ) {
65+ if ( freeze != null ) {
66+ freeze . Destroy ( ) ;
67+ freeze = null ;
68+ }
69+ }
70+
71+ public override void MyPlayerControlUpdate ( )
72+ {
73+ Game . MyPlayerData data = Game . GameData . data . myData ;
74+ data . currentTarget = Patches . PlayerControlPatch . SetMyTarget ( ) ;
75+ Patches . PlayerControlPatch . SetPlayerOutline ( data . currentTarget , Palette . ImpostorRed ) ;
76+ //if(TotalLives <= 0 && !PlayerControl.LocalPlayer.Data.IsDead) RPCEventInvoker.UncheckedMurderPlayer(PlayerControl.LocalPlayer.PlayerId,PlayerControl.LocalPlayer.PlayerId,Game.PlayerData.PlayerStatus.Dead.Id,false);
77+ }
78+
79+ public override void EditDisplayNameColor ( byte playerId , ref Color displayColor ) {
80+ displayColor = Color ;
81+ }
82+
83+ /*
84+ public override void EditDisplayName(byte playerId, ref string displayName, bool hideFlag)
85+ {
86+ displayName += " " + TotalLives.ToString() + "♥";
87+ }
88+ */
89+
90+ public InfectedSidekick ( ) : base ( "InfectedSidekick" , "infectedSidekick" , Palette . ImpostorRed , RoleCategory . Neutral , Side . Infected , Side . Infected ,
91+ new HashSet < Side > ( ) { Side . Infected } , new HashSet < Side > ( ) { Side . Infected } , new HashSet < Patches . EndCondition > { Patches . EndCondition . InfectedWin } ,
92+ true , VentPermission . CanUseUnlimittedVent , true , true , true ) {
93+ //IsHideRole = true;
94+ Allocation = AllocationType . None ;
95+ ValidGamemode = Module . CustomGameMode . VirusCrisis ;
96+ canReport = false ;
97+ CanCallEmergencyMeeting = false ;
98+ freeze = null ;
99+ }
100+ }
0 commit comments