22using Virial . Configuration ;
33using Virial . Events . Game . Meeting ;
44using Virial ;
5- using System . Text . RegularExpressions ;
65using Virial . Events . Game ;
7- using Nebula . Compat ;
86
97namespace Nebula . Roles . Crewmate ;
108
119public class Spiritualist : DefinedRoleTemplate , DefinedRole
1210{
13- private Spiritualist ( ) : base ( "spiritualist" , new ( 200 , 191 , 231 ) , RoleCategory . CrewmateRole , Crewmate . MyTeam , [ CharCountOption , OnlyLettersOption ] ) { }
11+ private Spiritualist ( ) : base ( "spiritualist" , new ( 200 , 191 , 231 ) , RoleCategory . CrewmateRole , Crewmate . MyTeam , [ CharCountOption , LettersEachMeetingOption ] ) { }
1412
1513 RuntimeRole RuntimeAssignableGenerator < RuntimeRole > . CreateInstance ( GamePlayer player , int [ ] arguments ) => new Instance ( player ) ;
1614
1715 private static IntegerConfiguration CharCountOption = NebulaAPI . Configurations . Configuration ( "options.role.spiritualist.charCount" , ( 1 , 100 ) , 5 ) ;
18- private static BoolConfiguration OnlyLettersOption = NebulaAPI . Configurations . Configuration ( "options.role.spiritualist.onlyLetters " , true ) ;
16+ private static IntegerConfiguration LettersEachMeetingOption = NebulaAPI . Configurations . Configuration ( "options.role.spiritualist.lettersEachMeeting " , ( 1 , 36 ) , 5 ) ;
1917
2018 static public Spiritualist MyRole = new Spiritualist ( ) ;
2119 [ NebulaRPCHolder ]
2220 public class Instance : RuntimeAssignableTemplate , RuntimeRole
2321 {
22+ const string letterTab = "qwertyuiopasdfghjklzxcvbnm1234567890" ;
2423 DefinedRole RuntimeRole . Role => MyRole ;
2524 public Instance ( GamePlayer player ) : base ( player ) { }
2625
2726 void RuntimeAssignable . OnActivated ( ) { }
2827
2928 GamePlayer ? lastReported = null ;
29+ string subTab = string . Empty ;
3030
3131 void OnMeetingEnd ( MeetingEndEvent ev ) => lastReported = null ;
3232
@@ -38,7 +38,16 @@ void OnReportDeadBody(ReportDeadBodyEvent ev)
3838 if ( ev . Reported != null )
3939 {
4040 lastReported = ev . Reported ;
41- RpcNoticeSeleted . Invoke ( ev . Reported . PlayerId ) ;
41+ var tab = letterTab . ToList ( ) ;
42+ while ( subTab . Length < LettersEachMeetingOption )
43+ {
44+ char c = tab . Random ( ) ;
45+ subTab += c ;
46+ tab . Remove ( c ) ;
47+ }
48+ var tmp = subTab . OrderBy ( x => x ) . ToList ( ) ;
49+ subTab = tmp . Join ( ) ;
50+ RpcNoticeSeleted . Invoke ( ( ev . Reported . PlayerId , subTab ) ) ;
4251 }
4352 }
4453
@@ -50,7 +59,9 @@ void CheckAddChat(PlayerAddChatEvent ev)
5059 if ( lastReported != null && ev . source . PlayerId == lastReported . PlayerId )
5160 {
5261 //Debug.LogError(1);
53- if ( OnlyLettersOption ) ev . chatText = Regex . Replace ( ev . chatText , "[^0-9A-Za-z]" , "" , RegexOptions . IgnoreCase ) ;
62+ ev . chatText = ev . chatText . ToLower ( ) ;
63+ //ev.chatText = Regex.Replace(ev.chatText, subTab, "", RegexOptions.IgnoreCase);
64+ ev . chatText = ev . chatText . RemoveAll ( letterTab . RemoveAll ( subTab . ToCharArray ( ) ) . ToCharArray ( ) ) ;
5465 ev . chatText = ev . chatText . Substring ( 0 , Math . Min ( CharCountOption , ev . chatText . Length ) ) ;
5566 if ( ev . chatText == string . Empty ) return ;
5667 ev . SetExtraShow ( ) ;
@@ -66,23 +77,37 @@ void CheckCanSeeAllInfo(RequestEvent ev)
6677 }
6778 */
6879
69- private static readonly RemoteProcess < byte > RpcNoticeSeleted = new (
80+ private static readonly RemoteProcess < ( byte , string ) > RpcNoticeSeleted = new (
7081 "NoticeSeleted" ,
7182 ( message , _ ) =>
7283 {
73- if ( message == PlayerControl . LocalPlayer . PlayerId )
84+ if ( message . Item1 == PlayerControl . LocalPlayer . PlayerId )
7485 {
7586 var Message = GameObject . Instantiate ( VanillaAsset . StandardTextPrefab , HudManager . Instance . transform ) ;
7687 new TextAttributeOld ( TextAttributeOld . NormalAttr ) { Size = new Vector2 ( 4f , 0.72f ) } . EditFontSize ( 2.7f , 2.7f , 2.7f ) . Reflect ( Message ) ;
7788 Message . transform . localPosition = new Vector3 ( 0 , - 1.5f , - 5f ) ;
7889 Message . color = MyRole . UnityColor ;
7990 Message . text = Language . Translate ( "role.spiritualist.seleted" ) ;
8091 float duration = 5f ;
81- var timer = new FunctionalLifespan ( ( ) => duration > 0 ) ;
92+ bool flag = true ;
93+ var timer = new GameObjectLifespan ( Message . gameObject ) ;
8294 GameOperatorManager . Instance ? . Register < GameUpdateEvent > ( ev =>
8395 {
8496 duration -= Time . deltaTime ;
85- if ( duration < 0f ) UnityEngine . GameObject . Destroy ( Message ) ;
97+ if ( flag && duration <= 0f )
98+ {
99+ Message . text = message . Item2 ;
100+ flag = false ;
101+ }
102+ //if (duration <= 0f) UnityEngine.GameObject.Destroy(Message);
103+ } , timer ) ;
104+ GameOperatorManager . Instance ? . Register < MeetingVoteEndEvent > ( ev =>
105+ {
106+ if ( Message != null )
107+ {
108+ UnityEngine . GameObject . Destroy ( Message ) ;
109+ Message = null ;
110+ }
86111 } , timer ) ;
87112 }
88113 } ) ;
0 commit comments