mirror of
https://github.com/Gurge44/EndlessHostRoles.git
synced 2026-10-19 15:51:58 +00:00
MAY have fixed T1-T2 kicking.... also reverted GameOptionsMenuPatch.cs changes to 7.2.2 and did some other fixes
This commit is contained in:
1 parent
75df30d923
commit
a67a5c58a1
28 files changed
+482
-555
No files matched your search
+2
-101
@@ -1,50 +1,33 @@
|
||||
[*.cs]
|
||||
|
||||
# CA2211: Non-constant fields should not be visible
|
||||
dotnet_diagnostic.ca2211.severity = none
|
||||
|
||||
# IDE0060: Remove unused parameter
|
||||
dotnet_diagnostic.ide0060.severity = none
|
||||
csharp_using_directive_placement = outside_namespace:silent
|
||||
csharp_prefer_simple_using_statement = true:suggestion
|
||||
csharp_prefer_braces = when_multiline:none
|
||||
csharp_style_namespace_declarations = file_scoped:none
|
||||
csharp_style_prefer_method_group_conversion = true:silent
|
||||
csharp_style_prefer_top_level_statements = true:silent
|
||||
csharp_style_prefer_primary_constructors = true:suggestion
|
||||
csharp_style_expression_bodied_operators = false:silent
|
||||
csharp_style_expression_bodied_indexers = true:silent
|
||||
csharp_style_expression_bodied_lambdas = true:silent
|
||||
csharp_style_expression_bodied_local_functions = false:silent
|
||||
csharp_indent_labels = one_less_than_current
|
||||
csharp_style_throw_expression = true:suggestion
|
||||
csharp_style_prefer_null_check_over_type_check = true:suggestion
|
||||
csharp_prefer_simple_default_expression = true:suggestion
|
||||
csharp_style_prefer_local_over_anonymous_function = true:suggestion
|
||||
csharp_style_prefer_index_operator = true:suggestion
|
||||
csharp_style_prefer_range_operator = true:suggestion
|
||||
csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion
|
||||
csharp_style_prefer_tuple_swap = true:suggestion
|
||||
csharp_style_prefer_utf8_string_literals = true:suggestion
|
||||
csharp_style_inlined_variable_declaration = true:suggestion
|
||||
csharp_style_deconstructed_variable_declaration = true:suggestion
|
||||
csharp_style_unused_value_assignment_preference = discard_variable:suggestion
|
||||
csharp_style_unused_value_expression_statement_preference = discard_variable:silent
|
||||
csharp_prefer_static_local_function = true:suggestion
|
||||
csharp_style_prefer_readonly_struct = true:suggestion
|
||||
csharp_style_prefer_readonly_struct_member = true:suggestion
|
||||
csharp_style_allow_embedded_statements_on_same_line_experimental = true:silent
|
||||
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true:silent
|
||||
csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true:silent
|
||||
csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true:silent
|
||||
csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true:silent
|
||||
csharp_style_conditional_delegate_call = true:suggestion
|
||||
csharp_style_prefer_switch_expression = true:suggestion
|
||||
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
|
||||
csharp_style_prefer_pattern_matching = true:silent
|
||||
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
|
||||
csharp_style_prefer_not_pattern = true:suggestion
|
||||
csharp_style_prefer_extended_property_pattern = true:suggestion
|
||||
csharp_style_var_for_built_in_types = false:none
|
||||
csharp_style_var_when_type_is_apparent = true:none
|
||||
csharp_style_var_elsewhere = false:none
|
||||
@@ -99,82 +82,42 @@ resharper_use_indent_from_vs = false
|
||||
# Microsoft .NET properties
|
||||
csharp_new_line_before_members_in_object_initializers = false
|
||||
csharp_preferred_modifier_order = public, private, protected, internal, file, new, static, abstract, virtual, sealed, readonly, override, extern, unsafe, volatile, async, required:suggestion
|
||||
dotnet_naming_rule.constants_rule.import_to_resharper = True
|
||||
dotnet_naming_rule.constants_rule.resharper_description = Constant fields (not private)
|
||||
dotnet_naming_rule.constants_rule.resharper_guid = 669e5282-fb4b-4e90-91e7-07d269d04b60
|
||||
dotnet_naming_rule.constants_rule.severity = suggestion
|
||||
dotnet_naming_rule.constants_rule.style = upper_camel_case_style
|
||||
dotnet_naming_rule.constants_rule.symbols = constants_symbols
|
||||
dotnet_naming_rule.interface_should_be_begins_with_i_rule.import_to_resharper = True
|
||||
dotnet_naming_rule.interface_should_be_begins_with_i_rule.resharper_description = interface_should_be_begins_with_i
|
||||
dotnet_naming_rule.interface_should_be_begins_with_i_rule.resharper_guid = 60bf1ae3-25da-46bc-8281-c816299091c0
|
||||
dotnet_naming_rule.interface_should_be_begins_with_i_rule.severity = suggestion
|
||||
dotnet_naming_rule.interface_should_be_begins_with_i_rule.style = i_upper_camel_case_style
|
||||
dotnet_naming_rule.interface_should_be_begins_with_i_rule.symbols = interface_should_be_begins_with_i_symbols
|
||||
dotnet_naming_rule.non_field_members_should_be_pascal_case_rule.import_to_resharper = True
|
||||
dotnet_naming_rule.non_field_members_should_be_pascal_case_rule.resharper_description = non_field_members_should_be_pascal_case
|
||||
dotnet_naming_rule.non_field_members_should_be_pascal_case_rule.resharper_guid = c4363532-209c-4073-90f0-b0d1296bc910
|
||||
dotnet_naming_rule.non_field_members_should_be_pascal_case_rule.severity = none
|
||||
dotnet_naming_rule.non_field_members_should_be_pascal_case_rule.style = upper_camel_case_style
|
||||
dotnet_naming_rule.non_field_members_should_be_pascal_case_rule.symbols = non_field_members_should_be_pascal_case_symbols
|
||||
dotnet_naming_rule.parameters_rule.import_to_resharper = True
|
||||
dotnet_naming_rule.parameters_rule.resharper_description = Parameters
|
||||
dotnet_naming_rule.parameters_rule.resharper_guid = 8a85b61a-1024-4f87-b9ef-1fdae19930a1
|
||||
dotnet_naming_rule.parameters_rule.resharper_style = aaBb, __ + aaBb
|
||||
dotnet_naming_rule.parameters_rule.severity = suggestion
|
||||
dotnet_naming_rule.parameters_rule.style = lower_camel_case_style
|
||||
dotnet_naming_rule.parameters_rule.symbols = parameters_symbols
|
||||
dotnet_naming_rule.private_constants_rule.import_to_resharper = True
|
||||
dotnet_naming_rule.private_constants_rule.resharper_description = Constant fields (private)
|
||||
dotnet_naming_rule.private_constants_rule.resharper_guid = 236f7aa5-7b06-43ca-bf2a-9b31bfcff09a
|
||||
dotnet_naming_rule.private_constants_rule.severity = suggestion
|
||||
dotnet_naming_rule.private_constants_rule.style = upper_camel_case_style
|
||||
dotnet_naming_rule.private_constants_rule.symbols = private_constants_symbols
|
||||
dotnet_naming_rule.private_instance_fields_rule.import_to_resharper = True
|
||||
dotnet_naming_rule.private_instance_fields_rule.resharper_description = Instance fields (private)
|
||||
dotnet_naming_rule.private_instance_fields_rule.resharper_guid = 4a98fdf6-7d98-4f5a-afeb-ea44ad98c70c
|
||||
dotnet_naming_rule.private_instance_fields_rule.severity = none
|
||||
dotnet_naming_rule.private_instance_fields_rule.style = lower_camel_case_style_1
|
||||
dotnet_naming_rule.private_instance_fields_rule.symbols = private_instance_fields_symbols
|
||||
dotnet_naming_rule.private_static_fields_rule.import_to_resharper = True
|
||||
dotnet_naming_rule.private_static_fields_rule.resharper_description = Static fields (private)
|
||||
dotnet_naming_rule.private_static_fields_rule.resharper_guid = f9fce829-e6f4-4cb2-80f1-5497c44f51df
|
||||
dotnet_naming_rule.private_static_fields_rule.severity = suggestion
|
||||
dotnet_naming_rule.private_static_fields_rule.style = upper_camel_case_style
|
||||
dotnet_naming_rule.private_static_fields_rule.symbols = private_static_fields_symbols
|
||||
dotnet_naming_rule.private_static_readonly_rule.import_to_resharper = True
|
||||
dotnet_naming_rule.private_static_readonly_rule.resharper_description = Static readonly fields (private)
|
||||
dotnet_naming_rule.private_static_readonly_rule.resharper_guid = 15b5b1f1-457c-4ca6-b278-5615aedc07d3
|
||||
dotnet_naming_rule.private_static_readonly_rule.severity = suggestion
|
||||
dotnet_naming_rule.private_static_readonly_rule.style = upper_camel_case_style
|
||||
dotnet_naming_rule.private_static_readonly_rule.symbols = private_static_readonly_symbols
|
||||
dotnet_naming_rule.public_fields_rule.import_to_resharper = True
|
||||
dotnet_naming_rule.public_fields_rule.resharper_description = Instance fields (not private)
|
||||
dotnet_naming_rule.public_fields_rule.resharper_guid = 53eecf85-d821-40e8-ac97-fdb734542b84
|
||||
dotnet_naming_rule.public_fields_rule.severity = none
|
||||
dotnet_naming_rule.public_fields_rule.style = upper_camel_case_style
|
||||
dotnet_naming_rule.public_fields_rule.symbols = public_fields_symbols
|
||||
dotnet_naming_rule.public_static_fields_rule.import_to_resharper = True
|
||||
dotnet_naming_rule.public_static_fields_rule.resharper_description = Static fields (not private)
|
||||
dotnet_naming_rule.public_static_fields_rule.resharper_guid = 70345118-4b40-4ece-937c-bbeb7a0b2e70
|
||||
dotnet_naming_rule.public_static_fields_rule.severity = suggestion
|
||||
dotnet_naming_rule.public_static_fields_rule.style = upper_camel_case_style
|
||||
dotnet_naming_rule.public_static_fields_rule.symbols = public_static_fields_symbols
|
||||
dotnet_naming_rule.static_readonly_rule.import_to_resharper = True
|
||||
dotnet_naming_rule.static_readonly_rule.resharper_description = Static readonly fields (not private)
|
||||
dotnet_naming_rule.static_readonly_rule.resharper_guid = c873eafb-d57f-481d-8c93-77f6863c2f88
|
||||
dotnet_naming_rule.static_readonly_rule.severity = suggestion
|
||||
dotnet_naming_rule.static_readonly_rule.style = upper_camel_case_style
|
||||
dotnet_naming_rule.static_readonly_rule.symbols = static_readonly_symbols
|
||||
dotnet_naming_rule.types_should_be_pascal_case_rule.import_to_resharper = True
|
||||
dotnet_naming_rule.types_should_be_pascal_case_rule.resharper_description = types_should_be_pascal_case
|
||||
dotnet_naming_rule.types_should_be_pascal_case_rule.resharper_guid = 749d8538-ec25-40b6-87c8-0ec37cfd4ba4
|
||||
dotnet_naming_rule.types_should_be_pascal_case_rule.severity = none
|
||||
dotnet_naming_rule.types_should_be_pascal_case_rule.style = upper_camel_case_style
|
||||
dotnet_naming_rule.types_should_be_pascal_case_rule.symbols = types_should_be_pascal_case_symbols
|
||||
dotnet_naming_rule.unity_serialized_field_rule.import_to_resharper = True
|
||||
dotnet_naming_rule.unity_serialized_field_rule.resharper_description = Unity serialized field
|
||||
dotnet_naming_rule.unity_serialized_field_rule.resharper_guid = 5f0fdb63-c892-4d2c-9324-15c80b22a7ef
|
||||
dotnet_naming_rule.unity_serialized_field_rule.severity = suggestion
|
||||
dotnet_naming_rule.unity_serialized_field_rule.style = lower_camel_case_style
|
||||
dotnet_naming_rule.unity_serialized_field_rule.symbols = unity_serialized_field_symbols
|
||||
@@ -187,69 +130,37 @@ dotnet_naming_style.upper_camel_case_style.capitalization = pascal_case
|
||||
dotnet_naming_symbols.constants_symbols.applicable_accessibilities = public, internal, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.constants_symbols.applicable_kinds = field
|
||||
dotnet_naming_symbols.constants_symbols.required_modifiers = const
|
||||
dotnet_naming_symbols.constants_symbols.resharper_applicable_kinds = constant_field
|
||||
dotnet_naming_symbols.constants_symbols.resharper_required_modifiers = any
|
||||
dotnet_naming_symbols.interface_should_be_begins_with_i_symbols.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.interface_should_be_begins_with_i_symbols.applicable_kinds = interface
|
||||
dotnet_naming_symbols.interface_should_be_begins_with_i_symbols.resharper_applicable_kinds = interface
|
||||
dotnet_naming_symbols.interface_should_be_begins_with_i_symbols.resharper_required_modifiers = any
|
||||
dotnet_naming_symbols.non_field_members_should_be_pascal_case_symbols.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.non_field_members_should_be_pascal_case_symbols.applicable_kinds = event, method, property
|
||||
dotnet_naming_symbols.non_field_members_should_be_pascal_case_symbols.resharper_applicable_kinds = property, event, method
|
||||
dotnet_naming_symbols.non_field_members_should_be_pascal_case_symbols.resharper_required_modifiers = any
|
||||
dotnet_naming_symbols.parameters_symbols.applicable_accessibilities = *
|
||||
dotnet_naming_symbols.parameters_symbols.applicable_kinds = parameter
|
||||
dotnet_naming_symbols.parameters_symbols.resharper_applicable_kinds = parameter
|
||||
dotnet_naming_symbols.parameters_symbols.resharper_required_modifiers = any
|
||||
dotnet_naming_symbols.private_constants_symbols.applicable_accessibilities = private
|
||||
dotnet_naming_symbols.private_constants_symbols.applicable_kinds = field
|
||||
dotnet_naming_symbols.private_constants_symbols.required_modifiers = const
|
||||
dotnet_naming_symbols.private_constants_symbols.resharper_applicable_kinds = constant_field
|
||||
dotnet_naming_symbols.private_constants_symbols.resharper_required_modifiers = any
|
||||
dotnet_naming_symbols.private_instance_fields_symbols.applicable_accessibilities = private
|
||||
dotnet_naming_symbols.private_instance_fields_symbols.applicable_kinds = field
|
||||
dotnet_naming_symbols.private_instance_fields_symbols.resharper_applicable_kinds = field, readonly_field
|
||||
dotnet_naming_symbols.private_instance_fields_symbols.resharper_required_modifiers = instance
|
||||
dotnet_naming_symbols.private_static_fields_symbols.applicable_accessibilities = private
|
||||
dotnet_naming_symbols.private_static_fields_symbols.applicable_kinds = field
|
||||
dotnet_naming_symbols.private_static_fields_symbols.required_modifiers = static
|
||||
dotnet_naming_symbols.private_static_fields_symbols.resharper_applicable_kinds = field
|
||||
dotnet_naming_symbols.private_static_fields_symbols.resharper_required_modifiers = static
|
||||
dotnet_naming_symbols.private_static_readonly_symbols.applicable_accessibilities = private
|
||||
dotnet_naming_symbols.private_static_readonly_symbols.applicable_kinds = field
|
||||
dotnet_naming_symbols.private_static_readonly_symbols.required_modifiers = readonly, static
|
||||
dotnet_naming_symbols.private_static_readonly_symbols.resharper_applicable_kinds = readonly_field
|
||||
dotnet_naming_symbols.private_static_readonly_symbols.resharper_required_modifiers = static
|
||||
dotnet_naming_symbols.public_fields_symbols.applicable_accessibilities = public, internal, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.public_fields_symbols.applicable_kinds = field
|
||||
dotnet_naming_symbols.public_fields_symbols.resharper_applicable_kinds = field, readonly_field
|
||||
dotnet_naming_symbols.public_fields_symbols.resharper_required_modifiers = instance
|
||||
dotnet_naming_symbols.public_static_fields_symbols.applicable_accessibilities = public, internal, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.public_static_fields_symbols.applicable_kinds = field
|
||||
dotnet_naming_symbols.public_static_fields_symbols.required_modifiers = static
|
||||
dotnet_naming_symbols.public_static_fields_symbols.resharper_applicable_kinds = field
|
||||
dotnet_naming_symbols.public_static_fields_symbols.resharper_required_modifiers = static
|
||||
dotnet_naming_symbols.static_readonly_symbols.applicable_accessibilities = public, internal, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.static_readonly_symbols.applicable_kinds = field
|
||||
dotnet_naming_symbols.static_readonly_symbols.required_modifiers = readonly, static
|
||||
dotnet_naming_symbols.static_readonly_symbols.resharper_applicable_kinds = readonly_field
|
||||
dotnet_naming_symbols.static_readonly_symbols.resharper_required_modifiers = static
|
||||
dotnet_naming_symbols.types_should_be_pascal_case_symbols.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.types_should_be_pascal_case_symbols.applicable_kinds = class, enum, interface, struct
|
||||
dotnet_naming_symbols.types_should_be_pascal_case_symbols.resharper_applicable_kinds = class, struct, interface, enum
|
||||
dotnet_naming_symbols.types_should_be_pascal_case_symbols.resharper_required_modifiers = any
|
||||
dotnet_naming_symbols.unity_serialized_field_symbols.applicable_accessibilities = *
|
||||
dotnet_naming_symbols.unity_serialized_field_symbols.applicable_kinds =
|
||||
dotnet_naming_symbols.unity_serialized_field_symbols.resharper_applicable_kinds = unity_serialised_field
|
||||
dotnet_naming_symbols.unity_serialized_field_symbols.resharper_required_modifiers = instance
|
||||
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:none
|
||||
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:none
|
||||
dotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:none
|
||||
dotnet_style_qualification_for_event = false:none
|
||||
dotnet_style_qualification_for_method = false:none
|
||||
|
||||
# Standard properties
|
||||
end_of_line = crlf
|
||||
|
||||
# ReSharper inspection severities
|
||||
resharper_arrange_accessor_owner_body_highlighting = none
|
||||
@@ -280,8 +191,8 @@ resharper_mvc_view_not_resolved_highlighting = warning
|
||||
resharper_razor_assembly_not_resolved_highlighting = warning
|
||||
resharper_switch_statement_handles_some_known_enum_values_with_default_highlighting = none
|
||||
resharper_switch_statement_missing_some_enum_cases_no_default_highlighting = none
|
||||
resharper_unity_performance_critical_code_invocation_highlighting = none
|
||||
resharper_unity_performance_critical_code_null_comparison_highlighting = none
|
||||
resharper_unity_performance_critical_code_invocation_highlighting = hint
|
||||
resharper_unity_performance_critical_code_null_comparison_highlighting = warning
|
||||
resharper_web_config_module_not_resolved_highlighting = warning
|
||||
resharper_web_config_type_not_resolved_highlighting = warning
|
||||
resharper_web_config_wrong_module_highlighting = warning
|
||||
@@ -324,11 +235,6 @@ dotnet_naming_style.begins_with_i.required_suffix =
|
||||
dotnet_naming_style.begins_with_i.word_separator =
|
||||
dotnet_naming_style.begins_with_i.capitalization = pascal_case
|
||||
|
||||
dotnet_naming_style.pascal_case.required_prefix =
|
||||
dotnet_naming_style.pascal_case.required_suffix =
|
||||
dotnet_naming_style.pascal_case.word_separator =
|
||||
dotnet_naming_style.pascal_case.capitalization = pascal_case
|
||||
|
||||
dotnet_naming_style.pascal_case.required_prefix =
|
||||
dotnet_naming_style.pascal_case.required_suffix =
|
||||
dotnet_naming_style.pascal_case.word_separator =
|
||||
@@ -339,8 +245,6 @@ dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggesti
|
||||
dotnet_style_prefer_auto_properties = true:silent
|
||||
dotnet_style_object_initializer = true:suggestion
|
||||
dotnet_style_operator_placement_when_wrapping = beginning_of_line
|
||||
tab_width = 4
|
||||
indent_size = 4
|
||||
end_of_line = crlf
|
||||
dotnet_style_collection_initializer = true:suggestion
|
||||
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
|
||||
@@ -351,13 +255,10 @@ dotnet_style_prefer_inferred_tuple_names = true:suggestion
|
||||
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
|
||||
dotnet_style_prefer_compound_assignment = true:suggestion
|
||||
dotnet_style_prefer_simplified_interpolation = true:suggestion
|
||||
dotnet_style_namespace_match_folder = true:suggestion
|
||||
dotnet_style_readonly_field = true:suggestion
|
||||
dotnet_style_predefined_type_for_locals_parameters_members = true:silent
|
||||
dotnet_style_predefined_type_for_member_access = true:silent
|
||||
dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent
|
||||
dotnet_style_allow_multiple_blank_lines_experimental = true:silent
|
||||
dotnet_style_allow_statement_immediately_after_block_experimental = true:silent
|
||||
dotnet_code_quality_unused_parameters = all:suggestion
|
||||
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
|
||||
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@
|
||||
<PackageReference Include="AmongUs.GameLibs.Android" Version="2025.10.14" PrivateAssets="all" Condition="'$(Configuration)' == 'Android'"/>
|
||||
<PackageReference Include="BepInEx.IL2CPP.MSBuild" Version="2.1.0-rc.1"/>
|
||||
<PackageReference Include="BepInEx.Unity.IL2CPP" Version="6.0.0-be.735" Private="false" ExcludeAssets="runtime;native"/>
|
||||
<PackageReference Include="JetBrains.Annotations" Version="2025.2.2" />
|
||||
<PackageReference Include="JetBrains.Annotations" Version="2025.2.4" />
|
||||
<PackageReference Include="Samboy063.Cpp2IL.Core" Version="2022.1.0-pre-release.20"/>
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
<wpf:ResourceDictionary xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xml:space="preserve">
|
||||
<s:String x:Key="/Default/CodeInspection/Highlighting/AnalysisEnabled/@EntryValue">SOLUTION</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ExtractCommonBranchingCode/@EntryIndexedValue">SUGGESTION</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=Unity_002EPerformanceCriticalCodeCameraMain/@EntryIndexedValue">WARNING</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=Unity_002EPerformanceCriticalCodeInvocation/@EntryIndexedValue">HINT</s:String>
|
||||
<s:Boolean x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=Unity_002EPerformanceCriticalCodeInvocation/@EntryIndexRemoved">True</s:Boolean>
|
||||
|
||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=Unity_002EPerformanceCriticalCodeNullComparison/@EntryIndexedValue">WARNING</s:String>
|
||||
|
||||
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/ThisQualifier/INSTANCE_MEMBERS_QUALIFY_DECLARED_IN/@EntryValue">BaseClass</s:String>
|
||||
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGN_MULTILINE_STATEMENT_CONDITIONS/@EntryValue">False</s:Boolean>
|
||||
<s:Int64 x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/BLANK_LINES_AFTER_MULTILINE_STATEMENTS/@EntryValue">0</s:Int64>
|
||||
@@ -66,6 +72,7 @@
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=7590fd11_002D72c9_002D406a_002Db74b_002D13b6d7ffaeba/@EntryIndexedValue"></s:String>
|
||||
<s:Boolean x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=7590fd11_002D72c9_002D406a_002Db74b_002D13b6d7ffaeba/@EntryIndexRemoved">True</s:Boolean>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=8a85b61a_002D1024_002D4f87_002Db9ef_002D1fdae19930a1/@EntryIndexedValue"><Policy><Descriptor Staticness="Any" AccessRightKinds="Any" Description="Parameters"><ElementKinds><Kind Name="PARAMETER" /></ElementKinds></Descriptor><Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="aaBb"><ExtraRule Prefix="__" Suffix="" Style="aaBb" /></Policy></Policy></s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=d8b48811_002D4424_002D4f8e_002Da7a8_002D5dfc32a7a73f/@EntryIndexedValue"><Policy><Descriptor Staticness="Any" AccessRightKinds="Public" Description="Harmony Special Parameter Name"><ElementKinds><Kind Name="PARAMETER" /></ElementKinds></Descriptor><Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="aaBb"><ExtraRule Prefix="__" Suffix="" Style="aaBb" /></Policy></Policy></s:String>
|
||||
<s:Boolean x:Key="/Default/dotCover/Editor/HighlightingEnabled/@EntryValue">False</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/dotCover/Editor/ShowDocumentCoverageIndicator/@EntryValue">False</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
|
||||
|
||||
+18
-21
@@ -8,19 +8,19 @@ using static EHR.Translator;
|
||||
|
||||
namespace EHR.Gamemodes;
|
||||
|
||||
public class Counter(int totalGreenTime, int totalRedTime, long startTimeStamp, char symbol, bool isRed, Func<char, int> randomRedTimeFunc, Func<char, int> randomGreenTimeFunc, bool isYellow = false)
|
||||
public class Counter(int totalGreenTime, int totalRedTime, char symbol, bool isRed, Func<char, int> randomRedTimeFunc, Func<char, int> randomGreenTimeFunc, bool isYellow = false)
|
||||
{
|
||||
private int TotalGreenTime { get; set; } = totalGreenTime;
|
||||
public int TotalRedTime { get; private set; } = totalRedTime;
|
||||
public long StartTimeStamp { get; set; } = startTimeStamp;
|
||||
public Stopwatch Stopwatch { get; } = Stopwatch.StartNew();
|
||||
private char Symbol { get; } = symbol;
|
||||
public bool IsRed { get; private set; } = isRed;
|
||||
private Func<char, int> RandomRedTime { get; } = randomRedTimeFunc;
|
||||
private Func<char, int> RandomGreenTime { get; } = randomGreenTimeFunc;
|
||||
private bool IsYellow { get; set; } = isYellow;
|
||||
private static int TotalYellowTime => 3;
|
||||
private const int TotalYellowTime = 3;
|
||||
|
||||
public int Timer => (IsRed ? TotalRedTime : IsYellow ? TotalYellowTime : TotalGreenTime) - (int)Math.Round((double)(Utils.TimeStamp - StartTimeStamp));
|
||||
public int Timer => (IsRed ? TotalRedTime : IsYellow ? TotalYellowTime : TotalGreenTime) - (int)Stopwatch.Elapsed.TotalSeconds;
|
||||
|
||||
public string ColoredTimerString
|
||||
{
|
||||
@@ -45,26 +45,26 @@ public class Counter(int totalGreenTime, int totalRedTime, long startTimeStamp,
|
||||
{
|
||||
if (Timer <= 0)
|
||||
{
|
||||
switch (IsRed)
|
||||
switch (IsRed, IsYellow)
|
||||
{
|
||||
// Change from green to yellow
|
||||
case false when !IsYellow:
|
||||
case (IsRed: false, IsYellow: false):
|
||||
IsYellow = true;
|
||||
break;
|
||||
// Change from red to green
|
||||
case true when !IsYellow:
|
||||
case (IsRed: true, IsYellow: false):
|
||||
TotalGreenTime = RandomGreenTime(Symbol);
|
||||
IsRed = false;
|
||||
break;
|
||||
// Change from yellow to red
|
||||
case false when IsYellow:
|
||||
case (IsRed: false, IsYellow: true):
|
||||
TotalRedTime = RandomRedTime(Symbol);
|
||||
IsYellow = false;
|
||||
IsRed = true;
|
||||
break;
|
||||
}
|
||||
|
||||
StartTimeStamp = Utils.TimeStamp;
|
||||
Stopwatch.Restart();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -347,7 +347,6 @@ internal static class StopAndGo
|
||||
{
|
||||
if (Options.CurrentGameMode != CustomGameMode.StopAndGo) return;
|
||||
|
||||
FixedUpdatePatch.LastSuffix = [];
|
||||
FixedUpdatePatch.Limit = [];
|
||||
AllPlayerTimers = [];
|
||||
RoundTimer = Stopwatch.StartNew();
|
||||
@@ -360,14 +359,12 @@ internal static class StopAndGo
|
||||
RoundTimer = Stopwatch.StartNew();
|
||||
FixedUpdatePatch.DoChecks = true;
|
||||
|
||||
long now = Utils.TimeStamp;
|
||||
|
||||
foreach (PlayerControl pc in Main.EnumerateAlivePlayerControls())
|
||||
{
|
||||
int startingGreenTime = StartingGreenTime(pc);
|
||||
Vector2 pos = pc.Pos();
|
||||
|
||||
Counter[] counters = new[] { '⬅', '⇅', '➡' }.Select(x => new Counter(startingGreenTime, RandomRedTime(x), now, x, false, RandomRedTime, RandomGreenTime)).ToArray();
|
||||
Counter[] counters = new[] { '⬅', '⇅', '➡' }.Select(x => new Counter(startingGreenTime, RandomRedTime(x), x, false, RandomRedTime, RandomGreenTime)).ToArray();
|
||||
AllPlayerTimers[pc.PlayerId] = new(counters, pos.x, pos.y, PlayerLives.GetInt());
|
||||
|
||||
float limit;
|
||||
@@ -402,7 +399,7 @@ internal static class StopAndGo
|
||||
if (!pc.IsAlive() || !AllPlayerTimers.TryGetValue(pc.PlayerId, out StopAndGoPlayerData timers)) return string.Empty;
|
||||
|
||||
string text = IsEventActive ? $"{string.Format(GetString("StopAndGo_EventActive"), GetString($"StopAndGo_Event_{Event.Type}"), Event.Duration + Event.StartTimeStamp - Utils.TimeStamp)}\n" : "\n";
|
||||
text += IsEventActive && Event.Type == Events.FrozenTimers ? FixedUpdatePatch.LastSuffix[pc.PlayerId].Trim() : timers.ToString();
|
||||
text += timers.ToString();
|
||||
|
||||
if (TimeSinceStart < 20 && EnableTutorial.GetBool() && !HasPlayed.Contains(pc.FriendCode))
|
||||
text += $"\n\n{GetString("StopAndGo_Tutorial")}";
|
||||
@@ -420,7 +417,6 @@ internal static class StopAndGo
|
||||
{
|
||||
public static bool DoChecks;
|
||||
private static long LastFixedUpdate;
|
||||
public static Dictionary<byte, string> LastSuffix = [];
|
||||
public static Dictionary<byte, float> Limit = [];
|
||||
|
||||
public static void Postfix(PlayerControl __instance)
|
||||
@@ -480,7 +476,8 @@ internal static class StopAndGo
|
||||
}
|
||||
case Events.FrozenTimers:
|
||||
{
|
||||
AllPlayerTimers.Values.SelectMany(x => new[] { x.LeftCounter, x.MiddleCounter, x.RightCounter }).Do(x => x.StartTimeStamp += duration);
|
||||
AllPlayerTimers.Values.SelectMany(x => new[] { x.LeftCounter, x.MiddleCounter, x.RightCounter }).Do(x => x.Stopwatch.Stop());
|
||||
LateTask.New(() => AllPlayerTimers.Values.SelectMany(x => new[] { x.LeftCounter, x.MiddleCounter, x.RightCounter }).Do(x => x.Stopwatch.Start()), duration, log: false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -564,19 +561,19 @@ internal static class StopAndGo
|
||||
}
|
||||
|
||||
End:
|
||||
|
||||
if (IsEventActive && Event.Type == Events.FrozenTimers) return;
|
||||
|
||||
data.UpdateCounters();
|
||||
|
||||
if (!IsEventActive || Event.Type != Events.FrozenTimers)
|
||||
LastSuffix[pc.PlayerId] = GetSuffixText(pc);
|
||||
|
||||
bool IsCounterRed(Counter counter) => counter.IsRed && (pc.AmOwner || counter.Timer != counter.TotalRedTime);
|
||||
}
|
||||
|
||||
if (LastFixedUpdate == now) return;
|
||||
LastFixedUpdate = now;
|
||||
|
||||
Utils.NotifyRoles();
|
||||
return;
|
||||
|
||||
bool IsCounterRed(Counter counter) => counter.IsRed && (pc.AmOwner || counter.Timer != counter.TotalRedTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -432,6 +432,11 @@ namespace EHR
|
||||
finally { Gone = true; }
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnMeeting()
|
||||
{
|
||||
Despawn();
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class PlayerDetector : CustomNetObject
|
||||
|
||||
@@ -14,19 +14,15 @@ public static class CustomSoundsManager
|
||||
|
||||
public static void RPCPlayCustomSound(this PlayerControl pc, string sound, float volume = 1f, float pitch = 1f, bool force = false)
|
||||
{
|
||||
if (!force)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost || !pc.IsModdedClient())
|
||||
return;
|
||||
}
|
||||
if (!force && (!AmongUsClient.Instance.AmHost || !pc.IsModdedClient())) return;
|
||||
|
||||
if (pc == null || PlayerControl.LocalPlayer.PlayerId == pc.PlayerId)
|
||||
{
|
||||
Play(sound);
|
||||
Play(sound, volume, pitch);
|
||||
return;
|
||||
}
|
||||
|
||||
MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.PlayCustomSound, SendOption.Reliable, pc.OwnerId);
|
||||
MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.PlayCustomSound, SendOption.None, pc.OwnerId);
|
||||
writer.Write(sound);
|
||||
writer.Write(volume);
|
||||
writer.Write(pitch);
|
||||
@@ -37,10 +33,13 @@ public static class CustomSoundsManager
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.PlayCustomSound, SendOption.Reliable);
|
||||
Play(sound, volume, pitch);
|
||||
|
||||
MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.PlayCustomSound, SendOption.None);
|
||||
writer.Write(sound);
|
||||
writer.Write(volume);
|
||||
writer.Write(pitch);
|
||||
AmongUsClient.Instance.FinishRpcImmediately(writer);
|
||||
Play(sound);
|
||||
}
|
||||
|
||||
public static void ReceiveRPC(MessageReader reader)
|
||||
|
||||
+14
-7
@@ -16,9 +16,11 @@ internal static class Logger
|
||||
{
|
||||
private static bool IsEnable;
|
||||
private static readonly List<string> DisableList = [];
|
||||
#if DEBUG
|
||||
public static bool IsAlsoInGame;
|
||||
#endif
|
||||
|
||||
private static readonly HashSet<string> NowDetailedErrorLog = [];
|
||||
private static readonly Dictionary<string, DateTime> NowDetailedErrorLog = [];
|
||||
|
||||
public static void Enable()
|
||||
{
|
||||
@@ -53,7 +55,7 @@ internal static class Logger
|
||||
|
||||
NotificationPopper np = NotificationPopperPatch.Instance;
|
||||
|
||||
if (np != null)
|
||||
if (np)
|
||||
{
|
||||
Warn(text, "SendInGame");
|
||||
|
||||
@@ -72,26 +74,31 @@ internal static class Logger
|
||||
{
|
||||
if (!IsEnable || DisableList.Contains(tag) || (level == LogLevel.Debug && !DebugModeManager.AmDebugger)) return;
|
||||
|
||||
#if DEBUG
|
||||
if (IsAlsoInGame) SendInGame($"[{tag}]{text}");
|
||||
#endif
|
||||
|
||||
string logText;
|
||||
|
||||
if (level is LogLevel.Error or LogLevel.Fatal && !multiLine && !NowDetailedErrorLog.Contains(tag))
|
||||
DateTime now = DateTime.Now;
|
||||
|
||||
if (level is LogLevel.Error or LogLevel.Fatal && !multiLine && (!NowDetailedErrorLog.TryGetValue(tag, out DateTime dt) || dt.AddSeconds(3) < now))
|
||||
{
|
||||
var t = DateTime.Now.ToString("HH:mm:ss");
|
||||
var t = now.ToString("HH:mm:ss");
|
||||
StackFrame stack = new(2);
|
||||
string className = stack.GetMethod()?.ReflectedType?.Name;
|
||||
string memberName = stack.GetMethod()?.Name;
|
||||
logText = $"[{t}][{className}.{memberName}({Path.GetFileName(fileName)}:{lineNumber})][{tag}]{text}";
|
||||
NowDetailedErrorLog.Add(tag);
|
||||
LateTask.New(() => NowDetailedErrorLog.Remove(tag), 3f, log: false);
|
||||
NowDetailedErrorLog[tag] = now;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (escapeCRLF) text = text.Replace("\r", "\\r").Replace("\n", "\\n");
|
||||
|
||||
var t = DateTime.Now.ToString("HH:mm:ss");
|
||||
var t = now.ToString("HH:mm:ss");
|
||||
logText = $"[{t}][{tag}]{text}";
|
||||
|
||||
if (level == LogLevel.Message) NowDetailedErrorLog.Clear();
|
||||
}
|
||||
|
||||
CustomLogger.Instance.Log(level.ToString(), logText, multiLine);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#nullable enable
|
||||
/*#nullable enable
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
@@ -47,3 +47,4 @@ internal static class EmbeddedDeps
|
||||
return loaded;
|
||||
}
|
||||
}
|
||||
*/
|
||||
@@ -168,7 +168,7 @@ public class ErrorText : MonoBehaviour
|
||||
|
||||
Frame = 0;
|
||||
|
||||
if (_camera != null && _camera1 != null) return;
|
||||
if (_camera && _camera1) return;
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
@@ -3,7 +3,6 @@ using System.Linq;
|
||||
using EHR.Gamemodes;
|
||||
using EHR.Patches;
|
||||
using HarmonyLib;
|
||||
using Hazel;
|
||||
using InnerNet;
|
||||
|
||||
namespace EHR.Modules;
|
||||
@@ -111,7 +110,7 @@ public static class FixedUpdateCaller
|
||||
NonLowLoadPlayerIndex = Math.Min(0, -(30 - count));
|
||||
|
||||
CustomGameMode currentGameMode = Options.CurrentGameMode;
|
||||
bool vanilla = GameStates.CurrentServerType == GameStates.ServerType.Vanilla;
|
||||
//bool vanilla = GameStates.CurrentServerType == GameStates.ServerType.Vanilla;
|
||||
|
||||
for (var index = 0; index < count; index++)
|
||||
{
|
||||
@@ -125,8 +124,8 @@ public static class FixedUpdateCaller
|
||||
|
||||
if (lobby) continue;
|
||||
|
||||
if (vanilla && NonLowLoadPlayerIndex == index)
|
||||
Utils.NotifyRoles(SpecifySeer: pc, ForceLoop: true, SendOption: SendOption.None);
|
||||
// if (vanilla && NonLowLoadPlayerIndex == index)
|
||||
// Utils.NotifyRoles(SpecifySeer: pc, ForceLoop: true, SendOption: Hazel.SendOption.None);
|
||||
|
||||
switch (currentGameMode)
|
||||
{
|
||||
|
||||
@@ -119,32 +119,38 @@ public abstract class GameOptionsSender
|
||||
|
||||
public static IEnumerator SendDirtyGameOptionsContinuously()
|
||||
{
|
||||
while (GameStates.InGame || GameStates.IsLobby)
|
||||
try
|
||||
{
|
||||
for (var index = 0; index < AllSenders.Count; index++)
|
||||
while (GameStates.InGame || GameStates.IsLobby)
|
||||
{
|
||||
GameOptionsSender sender = AllSenders[index];
|
||||
|
||||
yield return WaitFrameIfNecessary();
|
||||
|
||||
if (sender == null || !sender.AmValid())
|
||||
for (var index = 0; index < AllSenders.Count; index++)
|
||||
{
|
||||
AllSenders.RemoveAt(index);
|
||||
index--;
|
||||
continue;
|
||||
yield return WaitFrameIfNecessary();
|
||||
|
||||
if (index >= AllSenders.Count) break;
|
||||
GameOptionsSender sender = AllSenders[index];
|
||||
|
||||
if (sender == null || !sender.AmValid())
|
||||
{
|
||||
AllSenders.RemoveAt(index);
|
||||
index--;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (sender.IsDirty)
|
||||
yield return sender.SendGameOptionsAsync();
|
||||
|
||||
sender.IsDirty = false;
|
||||
}
|
||||
|
||||
if (sender.IsDirty)
|
||||
yield return sender.SendGameOptionsAsync();
|
||||
|
||||
sender.IsDirty = false;
|
||||
ForceWaitFrame = true;
|
||||
yield return WaitFrameIfNecessary();
|
||||
}
|
||||
|
||||
ForceWaitFrame = true;
|
||||
yield return WaitFrameIfNecessary();
|
||||
}
|
||||
|
||||
ActiveCoroutine = null;
|
||||
finally
|
||||
{
|
||||
ActiveCoroutine = null;
|
||||
}
|
||||
}
|
||||
|
||||
protected static IEnumerator WaitFrameIfNecessary()
|
||||
|
||||
@@ -687,7 +687,7 @@ public sealed class PlayerGameOptionsSender(PlayerControl player) : GameOptionsS
|
||||
|
||||
protected override bool AmValid()
|
||||
{
|
||||
return base.AmValid() && player != null && player.Data != null && !player.Data.Disconnected && Main.RealOptionsData != null;
|
||||
return base.AmValid() && player && player.Data && !player.Data.Disconnected && Main.RealOptionsData != null;
|
||||
}
|
||||
|
||||
}
|
||||
+2
-2
@@ -467,8 +467,8 @@ internal static class RPCHandlerPatch
|
||||
|
||||
try
|
||||
{
|
||||
if (option.Id == OptionItem.PresetId && option.CurrentValue != 9)
|
||||
option.SetValue(9, false, false);
|
||||
if (option.Id == OptionItem.PresetId && option.CurrentValue != 19)
|
||||
option.SetValue(19, false, false);
|
||||
}
|
||||
catch (Exception e) { Utils.ThrowException(e); }
|
||||
}
|
||||
|
||||
+9
-7
@@ -15,7 +15,6 @@ using AmongUs.InnerNet.GameDataMessages;
|
||||
using BepInEx;
|
||||
using EHR.Gamemodes;
|
||||
using EHR.Modules;
|
||||
using EHR.Modules.Extensions;
|
||||
using EHR.Patches;
|
||||
using EHR.Roles;
|
||||
using HarmonyLib;
|
||||
@@ -1723,9 +1722,12 @@ public static class Utils
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Options.CurrentGameMode != CustomGameMode.Standard || !deadPlayer || deadPlayer.Object.Is(CustomRoles.Renegade) || Main.HasJustStarted || !GameStates.InGame || !Options.SpawnAdditionalRenegadeOnImpsDead.GetBool() || Main.AllAlivePlayerControls.Count < Options.SpawnAdditionalRenegadeMinAlivePlayers.GetInt() || CustomRoles.Renegade.RoleExist(true) || Main.EnumerateAlivePlayerControls().Any(x => x.PlayerId != deadPlayer.PlayerId && (x.Is(CustomRoleTypes.Impostor) || (x.IsNeutralKiller() && !Options.SpawnAdditionalRenegadeWhenNKAlive.GetBool())))) return;
|
||||
if (Options.CurrentGameMode != CustomGameMode.Standard || !deadPlayer || deadPlayer.Object.Is(CustomRoles.Renegade) || Main.HasJustStarted || !GameStates.InGame || !Options.SpawnAdditionalRenegadeOnImpsDead.GetBool()) return;
|
||||
|
||||
PlayerControl[] listToChooseFrom = Main.EnumerateAlivePlayerControls().Where(x => x.PlayerId != deadPlayer.PlayerId && x.Is(CustomRoleTypes.Crewmate) && !x.Is(CustomRoles.Loyal)).ToArray();
|
||||
var aapc = Main.AllAlivePlayerControls;
|
||||
if (aapc.Count < Options.SpawnAdditionalRenegadeMinAlivePlayers.GetInt() || aapc.Any(x => x.Is(CustomRoles.Renegade) || (x.PlayerId != deadPlayer.PlayerId && (x.Is(CustomRoleTypes.Impostor) || (x.IsNeutralKiller() && !Options.SpawnAdditionalRenegadeWhenNKAlive.GetBool()))))) return;
|
||||
|
||||
PlayerControl[] listToChooseFrom = aapc.Where(x => x.PlayerId != deadPlayer.PlayerId && x.Is(CustomRoleTypes.Crewmate) && !x.Is(CustomRoles.Loyal)).ToArray();
|
||||
|
||||
if (listToChooseFrom.Length > 0)
|
||||
{
|
||||
@@ -1745,7 +1747,7 @@ public static class Utils
|
||||
IEnumerator WaitForMeetingEnd()
|
||||
{
|
||||
while (AntiBlackout.SkipTasks || GameStates.IsMeeting || ExileController.Instance) yield return null;
|
||||
if (GameStates.IsEnded || GameStates.IsLobby) yield break;
|
||||
if (GameStates.IsEnded || GameStates.IsLobby || !pc) yield break;
|
||||
pc.RpcChangeRoleBasis(CustomRoles.Renegade);
|
||||
pc.ResetKillCooldown();
|
||||
pc.SetKillCooldown();
|
||||
@@ -1823,8 +1825,8 @@ public static class Utils
|
||||
|
||||
if (vanilla)
|
||||
{
|
||||
if (importance != MessageImportance.High && GameStates.InGame && !title.Contains("#ffff00") && !title.Contains('⚠') && !text.Contains('⚠') && title != GetString("NoSpamAnymoreUseCmd"))
|
||||
sendOption = SendOption.None;
|
||||
// if (importance != MessageImportance.High && GameStates.InGame && !title.Contains("#ffff00") && !title.Contains('⚠') && !text.Contains('⚠') && title != GetString("NoSpamAnymoreUseCmd"))
|
||||
// sendOption = SendOption.None;
|
||||
|
||||
text = ReplaceHexColorsWithSafeColors(text);
|
||||
text = ReplaceDigitsOutsideRichText(text);
|
||||
@@ -2645,7 +2647,7 @@ public static class Utils
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!ForMeeting && !NoCache && !ForceLoop && !CamouflageIsForMeeting && !GuesserIsForMeeting && !MushroomMixup && GameStates.CurrentServerType == GameStates.ServerType.Vanilla) return;
|
||||
//if (!ForMeeting && !NoCache && !ForceLoop && !CamouflageIsForMeeting && !GuesserIsForMeeting && !MushroomMixup && GameStates.CurrentServerType == GameStates.ServerType.Vanilla) return;
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
if (!SetUpRoleTextPatch.IsInIntro && ((SpecifySeer && SpecifySeer.IsModdedClient() && (Options.CurrentGameMode == CustomGameMode.Standard || SpecifySeer.IsHost())) || (GameStates.IsMeeting && !ForMeeting) || GameStates.IsLobby)) return;
|
||||
|
||||
|
||||
+14
-12
@@ -10,16 +10,18 @@ namespace EHR;
|
||||
public static class Zoom
|
||||
{
|
||||
private static bool ResetButtons;
|
||||
private static Camera Main;
|
||||
|
||||
public static void Postfix()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!Camera.main) return;
|
||||
if (!Main) Main = Camera.main;
|
||||
if (!Main) return;
|
||||
|
||||
if (((GameStates.IsShip && !GameStates.IsMeeting && GameStates.IsCanMove && !PlayerControl.LocalPlayer.IsAlive()) || (GameStates.IsLobby && GameStates.IsCanMove)) && !InGameRoleInfoMenu.Showing)
|
||||
{
|
||||
if (Camera.main.orthographicSize > 3.0f) ResetButtons = true;
|
||||
if (Main.orthographicSize > 3.0f) ResetButtons = true;
|
||||
|
||||
if (Input.touchSupported)
|
||||
{
|
||||
@@ -39,7 +41,7 @@ public static class Zoom
|
||||
{
|
||||
case > 0:
|
||||
{
|
||||
if (Camera.main.orthographicSize > 3.0f)
|
||||
if (Main.orthographicSize > 3.0f)
|
||||
SetZoomSize();
|
||||
|
||||
break;
|
||||
@@ -48,7 +50,7 @@ public static class Zoom
|
||||
{
|
||||
if (GameStates.IsDead || GameStates.IsFreePlay || DebugModeManager.AmDebugger || GameStates.IsLobby)
|
||||
{
|
||||
if (Camera.main.orthographicSize < 18.0f)
|
||||
if (Main.orthographicSize < 18.0f)
|
||||
SetZoomSize(true);
|
||||
}
|
||||
|
||||
@@ -62,7 +64,7 @@ public static class Zoom
|
||||
{
|
||||
case > 0:
|
||||
{
|
||||
if (Camera.main.orthographicSize > 3.0f)
|
||||
if (Main.orthographicSize > 3.0f)
|
||||
SetZoomSize();
|
||||
|
||||
break;
|
||||
@@ -71,7 +73,7 @@ public static class Zoom
|
||||
{
|
||||
if (GameStates.IsDead || GameStates.IsFreePlay || DebugModeManager.AmDebugger || GameStates.IsLobby)
|
||||
{
|
||||
if (Camera.main.orthographicSize < 18.0f)
|
||||
if (Main.orthographicSize < 18.0f)
|
||||
SetZoomSize(true);
|
||||
}
|
||||
|
||||
@@ -88,25 +90,25 @@ public static class Zoom
|
||||
|
||||
public static void SetZoomSize(bool times = false, bool reset = false)
|
||||
{
|
||||
if (!Camera.main || !HudManager.InstanceExists) return;
|
||||
if (!Main || !HudManager.InstanceExists) return;
|
||||
|
||||
var size = 1.5f;
|
||||
if (!times) size = 1 / size;
|
||||
|
||||
if (reset)
|
||||
{
|
||||
Camera.main.orthographicSize = 3.0f;
|
||||
Main.orthographicSize = 3.0f;
|
||||
HudManager.Instance.UICamera.orthographicSize = 3.0f;
|
||||
HudManager.Instance.Chat.transform.localScale = Vector3.one;
|
||||
if (GameStates.IsMeeting) MeetingHud.Instance.transform.localScale = Vector3.one;
|
||||
}
|
||||
else
|
||||
{
|
||||
Camera.main.orthographicSize *= size;
|
||||
Main.orthographicSize *= size;
|
||||
HudManager.Instance.UICamera.orthographicSize *= size;
|
||||
}
|
||||
|
||||
HudManager.Instance?.ShadowQuad?.gameObject.SetActive((reset || Mathf.Approximately(Camera.main.orthographicSize, 3.0f)) && PlayerControl.LocalPlayer.IsAlive());
|
||||
HudManager.Instance?.ShadowQuad?.gameObject.SetActive((reset || Mathf.Approximately(Main.orthographicSize, 3.0f)) && PlayerControl.LocalPlayer.IsAlive());
|
||||
|
||||
if (ResetButtons)
|
||||
{
|
||||
@@ -117,9 +119,9 @@ public static class Zoom
|
||||
|
||||
public static void OnFixedUpdate()
|
||||
{
|
||||
if (!Camera.main || !HudManager.InstanceExists) return;
|
||||
if (!Main || !HudManager.InstanceExists) return;
|
||||
|
||||
HudManager.Instance?.ShadowQuad?.gameObject.SetActive(Mathf.Approximately(Camera.main.orthographicSize, 3.0f) && PlayerControl.LocalPlayer.IsAlive());
|
||||
HudManager.Instance?.ShadowQuad?.gameObject.SetActive(Mathf.Approximately(Main.orthographicSize, 3.0f) && PlayerControl.LocalPlayer.IsAlive());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -782,7 +782,7 @@ internal static class ChatCommands
|
||||
|
||||
private static void CopyPresetCommand(PlayerControl player, string text, string[] args)
|
||||
{
|
||||
if (args.Length < 3 || !int.TryParse(args[1], out int sourcePresetId) || sourcePresetId is < 1 or > 10 || (!int.TryParse(args[2], out int targetPreset) && targetPreset is < 1 or > 10)) return;
|
||||
if (args.Length < 3 || !int.TryParse(args[1], out int sourcePresetId) || sourcePresetId is < 1 or > 20 || (!int.TryParse(args[2], out int targetPreset) && targetPreset is < 1 or > 20)) return;
|
||||
|
||||
Prompt.Show(string.Format(GetString("Promt.CopyPreset"), sourcePresetId, targetPreset), Copy, () => { });
|
||||
return;
|
||||
|
||||
@@ -330,14 +330,14 @@ internal static class GameEndChecker
|
||||
WinnerIds.UnionWith(Main.LoversPlayers.Select(x => x.PlayerId));
|
||||
}
|
||||
|
||||
if (Options.NeutralWinTogether.GetBool() && (WinnerRoles.Any(x => x.IsNeutral()) || WinnerIds.Select(x => GetPlayerById(x)).Any(x => x != null && x.GetCustomRole().IsNeutral() && !x.IsMadmate())))
|
||||
if (Options.NeutralWinTogether.GetBool() && (WinnerRoles.Any(x => x.IsNeutral()) || WinnerIds.Select(x => GetPlayerById(x)).Any(x => x && x.GetCustomRole().IsNeutral() && !x.IsMadmate())))
|
||||
WinnerIds.UnionWith(Main.EnumeratePlayerControls().Where(x => x.GetCustomRole().IsNeutral()).Select(x => x.PlayerId));
|
||||
else if (Options.NeutralRoleWinTogether.GetBool())
|
||||
{
|
||||
foreach (byte id in WinnerIds.ToArray())
|
||||
{
|
||||
PlayerControl pc = GetPlayerById(id);
|
||||
if (pc == null || !pc.GetCustomRole().IsNeutral()) continue;
|
||||
if (!pc || !pc.GetCustomRole().IsNeutral()) continue;
|
||||
|
||||
foreach (PlayerControl tar in Main.EnumeratePlayerControls())
|
||||
{
|
||||
@@ -834,7 +834,7 @@ internal static class GameEndChecker
|
||||
IEnumerable<HashSet<byte>> teams = FreeForAll.PlayerTeams.GroupBy(x => x.Value, x => x.Key).Select(x => x.Where(p =>
|
||||
{
|
||||
PlayerControl pc = GetPlayerById(p);
|
||||
return pc != null && !pc.Data.Disconnected;
|
||||
return pc && !pc.Data.Disconnected;
|
||||
}).ToHashSet()).Where(x => x.Count > 0);
|
||||
|
||||
foreach (HashSet<byte> team in teams)
|
||||
@@ -893,7 +893,7 @@ internal static class GameEndChecker
|
||||
if (StopAndGo.RoundTime <= 0 || !StopAndGo.RoundTimer.IsRunning)
|
||||
{
|
||||
var apc = Main.AllPlayerControls;
|
||||
SetWinner(Main.GM.Value && apc.Count == 1 ? PlayerControl.LocalPlayer : apc.Where(x => !x.Is(CustomRoles.GM) && x != null).OrderBy(x => StopAndGo.GetRankFromScore(x.PlayerId)).ThenByDescending(x => x.IsAlive()).First());
|
||||
SetWinner(Main.GM.Value && apc.Count == 1 ? PlayerControl.LocalPlayer : apc.Where(x => x && !x.Is(CustomRoles.GM)).OrderBy(x => StopAndGo.GetRankFromScore(x.PlayerId)).ThenByDescending(x => x.IsAlive()).First());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
+11
-9
@@ -31,6 +31,15 @@ internal static class MakePublicPatch
|
||||
}
|
||||
}*/
|
||||
|
||||
[HarmonyPatch(typeof(InnerNetClient), nameof(InnerNetClient.StartRpcImmediately))]
|
||||
static class StartRpcImmediatelyPatch
|
||||
{
|
||||
public static void Postfix(uint targetNetId, byte callId, Hazel.SendOption option, int targetClientId = -1)
|
||||
{
|
||||
Logger.Info($"Starting RPC: {callId} ({RPC.GetRpcName(callId)}) as {targetNetId} with SendOption {option} to {targetClientId}", "StartRpcImmediately");
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(MMOnlineManager), nameof(MMOnlineManager.Start))]
|
||||
// ReSharper disable once InconsistentNaming
|
||||
internal static class MMOnlineManagerStartPatch
|
||||
@@ -130,7 +139,7 @@ internal static class SetResolutionManager
|
||||
{
|
||||
public static void Postfix()
|
||||
{
|
||||
if (MainMenuManagerPatch.UpdateButton != null)
|
||||
if (MainMenuManagerPatch.UpdateButton)
|
||||
MainMenuManagerPatch.UpdateButton.transform.localPosition = MainMenuManagerPatch.Template.transform.localPosition + new Vector3(0.25f, 0.75f);
|
||||
}
|
||||
}
|
||||
@@ -138,16 +147,9 @@ internal static class SetResolutionManager
|
||||
[HarmonyPatch(typeof(InnerNetClient), nameof(InnerNetClient.SendAllStreamedObjects))]
|
||||
internal static class InnerNetObjectSerializePatch
|
||||
{
|
||||
private static int Count;
|
||||
|
||||
public static void Prefix()
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
if (Count++ < 100) return;
|
||||
Count = 0;
|
||||
|
||||
if (GameOptionsSender.ActiveCoroutine != null) return;
|
||||
if (!AmongUsClient.Instance.AmHost || GameOptionsSender.ActiveCoroutine != null) return;
|
||||
GameOptionsSender.ActiveCoroutine = Main.Instance.StartCoroutine(GameOptionsSender.SendDirtyGameOptionsContinuously());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,15 +219,15 @@ internal static class ControllerManagerUpdatePatch
|
||||
Utils.SendMessage(GetString("HostKillSelfByCommand"), title: $"<color=#ff0000>{GetString("DefaultSystemMessageTitle")}</color>");
|
||||
}
|
||||
|
||||
if (!Options.NoGameEnd.GetBool()) return;
|
||||
|
||||
#if DEBUG
|
||||
if (KeysDown(KeyCode.F2, KeyCode.LeftControl))
|
||||
{
|
||||
Logger.IsAlsoInGame = !Logger.IsAlsoInGame;
|
||||
Logger.SendInGame($"In-game output log: {Logger.IsAlsoInGame}");
|
||||
}
|
||||
|
||||
if (!Options.NoGameEnd.GetBool()) return;
|
||||
|
||||
#if DEBUG
|
||||
if (KeysDown(KeyCode.Return, KeyCode.F, KeyCode.LeftShift))
|
||||
{
|
||||
Utils.FlashColor(new(1f, 0f, 0f, 0.3f));
|
||||
|
||||
@@ -466,25 +466,23 @@ internal static class TitleLogoPatch
|
||||
[HarmonyPatch(typeof(ModManager), nameof(ModManager.LateUpdate))]
|
||||
internal static class ModManagerLateUpdatePatch
|
||||
{
|
||||
|
||||
|
||||
public static bool Prefix(ModManager __instance)
|
||||
{
|
||||
__instance.ShowModStamp();
|
||||
|
||||
ChatBubbleShower.Update();
|
||||
|
||||
if (LobbySharingAPI.LastRoomCode != string.Empty && Utils.TimeStamp - LobbySharingAPI.LastRequestTimeStamp > Options.LobbyUpdateInterval.GetInt())
|
||||
LobbySharingAPI.NotifyLobbyStatusChanged(PlayerControl.LocalPlayer == null ? LobbyStatus.Closed : GameStates.InGame ? LobbyStatus.In_Game : LobbyStatus.In_Lobby);
|
||||
if (!string.IsNullOrEmpty(LobbySharingAPI.LastRoomCode) && Utils.TimeStamp - LobbySharingAPI.LastRequestTimeStamp > Options.LobbyUpdateInterval.GetInt())
|
||||
LobbySharingAPI.NotifyLobbyStatusChanged(!PlayerControl.LocalPlayer ? LobbyStatus.Closed : GameStates.InGame ? LobbyStatus.In_Game : LobbyStatus.In_Lobby);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void Postfix(ModManager __instance)
|
||||
{
|
||||
__instance.localCamera = !HudManager.InstanceExists
|
||||
? Camera.main
|
||||
: HudManager.Instance.GetComponentInChildren<Camera>();
|
||||
|
||||
if (__instance.localCamera != null)
|
||||
if (__instance.localCamera)
|
||||
{
|
||||
float offsetY = HudManager.InstanceExists ? 1.1f : 0.9f;
|
||||
|
||||
@@ -492,6 +490,12 @@ internal static class ModManagerLateUpdatePatch
|
||||
__instance.localCamera, AspectPosition.EdgeAlignments.RightTop,
|
||||
new(0.4f, offsetY, __instance.localCamera.nearClipPlane + 0.1f));
|
||||
}
|
||||
else
|
||||
{
|
||||
__instance.localCamera = !HudManager.InstanceExists
|
||||
? Camera.main
|
||||
: HudManager.Instance.GetComponentInChildren<Camera>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+306
-308
@@ -1,17 +1,16 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using BepInEx.Unity.IL2CPP.Utils.Collections;
|
||||
using EHR.Gamemodes;
|
||||
using EHR.Modules;
|
||||
using EHR.Patches;
|
||||
using EHR.Roles;
|
||||
using HarmonyLib;
|
||||
using Il2CppSystem.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
using EHR.Roles;
|
||||
using EHR.Gamemodes;
|
||||
|
||||
// ReSharper disable PossibleLossOfFraction
|
||||
|
||||
@@ -21,30 +20,9 @@ namespace EHR;
|
||||
public static class ModGameOptionsMenu
|
||||
{
|
||||
public static int TabIndex;
|
||||
private static Dictionary<int, int> _optionList;
|
||||
private static Dictionary<int, OptionBehaviour> _behaviourList;
|
||||
private static Dictionary<int, CategoryHeaderMasked> _categoryHeaderList;
|
||||
|
||||
public static void ClearDictionaries()
|
||||
{
|
||||
OptionList.Clear();
|
||||
BehaviourList.Clear();
|
||||
CategoryHeaderList.Clear();
|
||||
}
|
||||
|
||||
public static OptionItem GetFromBehaviour(OptionBehaviour behaviour)
|
||||
{
|
||||
if (OptionList.TryGetValue(behaviour.GetHashCode(), out int id))
|
||||
{
|
||||
return OptionItem.FastOptions[id];
|
||||
}
|
||||
|
||||
return null;// behaviour.GetComponent<CustomOptionBehaviour>() is { item: var item } ? item : null;
|
||||
}
|
||||
|
||||
public static Dictionary<int, int> OptionList => _optionList ??= new();
|
||||
public static Dictionary<int, OptionBehaviour> BehaviourList => _behaviourList ??= new();
|
||||
public static Dictionary<int, CategoryHeaderMasked> CategoryHeaderList => _categoryHeaderList ??= new();
|
||||
public static Dictionary<OptionBehaviour, int> OptionList = new();
|
||||
public static Dictionary<int, OptionBehaviour> BehaviourList = new();
|
||||
public static Dictionary<int, CategoryHeaderMasked> CategoryHeaderList = new();
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(GameOptionsMenu))]
|
||||
@@ -133,102 +111,90 @@ public static class GameOptionsMenuPatch
|
||||
const float posZ = -2.0f;
|
||||
|
||||
TextOptionItem header = null;
|
||||
|
||||
const int frameBudget = 10; // milliseconds
|
||||
var stopwatch = new Stopwatch();
|
||||
stopwatch.Start();
|
||||
|
||||
foreach (var option in OptionItem.AllOptions)
|
||||
|
||||
for (var index = 0; index < OptionItem.AllOptions.Count; index++)
|
||||
{
|
||||
OptionItem option = OptionItem.AllOptions[index];
|
||||
if (option.Tab != modTab) continue;
|
||||
|
||||
bool enabled = !option.IsCurrentlyHidden() && AllParentsEnabledAndVisible(option.Parent);
|
||||
|
||||
if (option is TextOptionItem toi)
|
||||
{
|
||||
CategoryHeaderMasked categoryHeaderMasked = Object.Instantiate(__instance.categoryHeaderOrigin, Vector3.zero, Quaternion.identity, __instance.settingsContainer);
|
||||
categoryHeaderMasked.SetHeader(StringNames.RolesCategory, 20);
|
||||
categoryHeaderMasked.Title.text = option.GetName(disableColor: true).Trim('★', ' ');
|
||||
categoryHeaderMasked.Background.color = categoryHeaderMasked.Divider.color = option.NameColor;
|
||||
categoryHeaderMasked.transform.localScale = Vector3.one * 0.63f;
|
||||
categoryHeaderMasked.transform.localPosition = new(-0.903f, num, posZ);
|
||||
var chmText = categoryHeaderMasked.transform.FindChild("HeaderText").GetComponent<TextMeshPro>();
|
||||
chmText.fontStyle = FontStyles.Bold | FontStyles.SmallCaps;
|
||||
chmText.fontWeight = FontWeight.Black;
|
||||
chmText.outlineWidth = 0.17f;
|
||||
var chmCollider = categoryHeaderMasked.gameObject.AddComponent<BoxCollider2D>();
|
||||
chmCollider.size = new Vector2(7, 0.7f);
|
||||
chmCollider.offset = new Vector2(1.5f, -0.3f);
|
||||
var chmButton = categoryHeaderMasked.gameObject.AddComponent<PassiveButton>();
|
||||
chmButton.ClickSound = __instance.BackButton.GetComponent<PassiveButton>().ClickSound;
|
||||
chmButton.OnMouseOver = new();
|
||||
chmButton.OnMouseOut = new();
|
||||
chmButton.OnClick.AddListener((UnityAction)(() =>
|
||||
{
|
||||
toi.CollapsesSection = !toi.CollapsesSection;
|
||||
ReCreateSettings(__instance);
|
||||
}));
|
||||
chmButton.SetButtonEnableState(true);
|
||||
categoryHeaderMasked.gameObject.SetActive(enabled);
|
||||
ModGameOptionsMenu.CategoryHeaderList.TryAdd(index, categoryHeaderMasked);
|
||||
|
||||
if (enabled) num -= 0.63f;
|
||||
header = toi;
|
||||
continue;
|
||||
}
|
||||
|
||||
option.Header = header;
|
||||
|
||||
if (option.IsHeader && enabled)
|
||||
num -= 0.18f;
|
||||
|
||||
BaseGameSetting baseGameSetting = GetSetting(option);
|
||||
if (baseGameSetting == null) continue;
|
||||
|
||||
|
||||
OptionBehaviour optionBehaviour;
|
||||
|
||||
try
|
||||
{
|
||||
if (option.Tab != modTab) continue;
|
||||
|
||||
bool enabled = !option.IsCurrentlyHidden() && AllParentsEnabledAndVisible(option.Parent);
|
||||
|
||||
if (option is TextOptionItem toi)
|
||||
optionBehaviour = baseGameSetting.Type switch
|
||||
{
|
||||
CategoryHeaderMasked categoryHeaderMasked = Object.Instantiate(__instance.categoryHeaderOrigin, Vector3.zero, Quaternion.identity, __instance.settingsContainer);
|
||||
categoryHeaderMasked.SetHeader(StringNames.RolesCategory, 20);
|
||||
categoryHeaderMasked.Title.text = option.GetName(disableColor: true).Trim('★', ' ');
|
||||
categoryHeaderMasked.Background.color = categoryHeaderMasked.Divider.color = option.NameColor;
|
||||
categoryHeaderMasked.transform.localScale = Vector3.one * 0.63f;
|
||||
categoryHeaderMasked.transform.localPosition = new(-0.903f, num, posZ);
|
||||
var chmText = categoryHeaderMasked.transform.FindChild("HeaderText").GetComponent<TextMeshPro>();
|
||||
chmText.fontStyle = FontStyles.Bold | FontStyles.SmallCaps;
|
||||
chmText.fontWeight = FontWeight.Black;
|
||||
chmText.outlineWidth = 0.17f;
|
||||
var chmCollider = categoryHeaderMasked.gameObject.AddComponent<BoxCollider2D>();
|
||||
chmCollider.size = new Vector2(7, 0.7f);
|
||||
chmCollider.offset = new Vector2(1.5f, -0.3f);
|
||||
var chmButton = categoryHeaderMasked.gameObject.AddComponent<PassiveButton>();
|
||||
chmButton.ClickSound = __instance.BackButton.GetComponent<PassiveButton>().ClickSound;
|
||||
chmButton.OnMouseOver = new();
|
||||
chmButton.OnMouseOut = new();
|
||||
chmButton.OnClick.AddListener((UnityAction)(() =>
|
||||
{
|
||||
toi.CollapsesSection = !toi.CollapsesSection;
|
||||
ReCreateSettings(__instance);
|
||||
}));
|
||||
chmButton.SetButtonEnableState(true);
|
||||
categoryHeaderMasked.gameObject.SetActive(enabled);
|
||||
ModGameOptionsMenu.CategoryHeaderList.TryAdd(option.Id, categoryHeaderMasked);
|
||||
|
||||
if (enabled) num -= 0.63f;
|
||||
header = toi;
|
||||
continue;
|
||||
}
|
||||
|
||||
option.Header = header;
|
||||
|
||||
if (option.IsHeader && enabled)
|
||||
num -= 0.18f;
|
||||
|
||||
BaseGameSetting baseGameSetting = GetSetting(option);
|
||||
if (baseGameSetting == null) continue;
|
||||
|
||||
|
||||
OptionBehaviour optionBehaviour;
|
||||
|
||||
try
|
||||
{
|
||||
optionBehaviour = baseGameSetting.Type switch
|
||||
{
|
||||
OptionTypes.Checkbox => Object.Instantiate(__instance.checkboxOrigin, Vector3.zero, Quaternion.identity, __instance.settingsContainer),
|
||||
OptionTypes.String => Object.Instantiate(__instance.stringOptionOrigin, Vector3.zero, Quaternion.identity, __instance.settingsContainer),
|
||||
OptionTypes.Float or OptionTypes.Int => Object.Instantiate(__instance.numberOptionOrigin, Vector3.zero, Quaternion.identity, __instance.settingsContainer),
|
||||
_ => throw new Exception("Skipped option type")
|
||||
};
|
||||
}
|
||||
catch { continue; }
|
||||
|
||||
optionBehaviour.transform.localPosition = new(posX, num, posZ);
|
||||
OptionBehaviourSetSizeAndPosition(optionBehaviour, option, baseGameSetting.Type);
|
||||
|
||||
if (!ModGameOptionsMenu.OptionList.ContainsValue(option.Id) && option.Name == "Preset")
|
||||
GameSettingMenuPatch.PresetBehaviour = (NumberOption)optionBehaviour;
|
||||
|
||||
optionBehaviour.transform.localPosition = new(0.952f, num, -2f);
|
||||
optionBehaviour.SetClickMask(__instance.ButtonClickMask);
|
||||
optionBehaviour.SetUpFromData(baseGameSetting, 20);
|
||||
ModGameOptionsMenu.OptionList.TryAdd(optionBehaviour.GetHashCode(), option.Id);
|
||||
ModGameOptionsMenu.BehaviourList.TryAdd(option.Id, optionBehaviour);
|
||||
optionBehaviour.gameObject.SetActive(enabled);
|
||||
optionBehaviour.OnValueChanged = new Action<OptionBehaviour>(__instance.ValueChanged);
|
||||
__instance.Children.Add(optionBehaviour);
|
||||
|
||||
option.OptionBehaviour = optionBehaviour;
|
||||
|
||||
if (enabled) num -= 0.45f;
|
||||
OptionTypes.Checkbox => Object.Instantiate(__instance.checkboxOrigin, Vector3.zero, Quaternion.identity, __instance.settingsContainer),
|
||||
OptionTypes.String => Object.Instantiate(__instance.stringOptionOrigin, Vector3.zero, Quaternion.identity, __instance.settingsContainer),
|
||||
OptionTypes.Float or OptionTypes.Int => Object.Instantiate(__instance.numberOptionOrigin, Vector3.zero, Quaternion.identity, __instance.settingsContainer),
|
||||
_ => throw new Exception("Skipped option type")
|
||||
};
|
||||
}
|
||||
catch (Exception e) { Utils.ThrowException(e); }
|
||||
catch { continue; }
|
||||
|
||||
if (stopwatch.ElapsedMilliseconds >= frameBudget)
|
||||
{
|
||||
stopwatch.Reset();
|
||||
yield return null;
|
||||
stopwatch.Start();
|
||||
}
|
||||
optionBehaviour.transform.localPosition = new(posX, num, posZ);
|
||||
OptionBehaviourSetSizeAndPosition(optionBehaviour, option, baseGameSetting.Type);
|
||||
|
||||
if (!ModGameOptionsMenu.OptionList.ContainsValue(index) && option.Name == "Preset")
|
||||
GameSettingMenuPatch.PresetBehaviour = (NumberOption)optionBehaviour;
|
||||
|
||||
optionBehaviour.transform.localPosition = new(0.952f, num, -2f);
|
||||
optionBehaviour.SetClickMask(__instance.ButtonClickMask);
|
||||
optionBehaviour.SetUpFromData(baseGameSetting, 20);
|
||||
ModGameOptionsMenu.OptionList.TryAdd(optionBehaviour, index);
|
||||
ModGameOptionsMenu.BehaviourList.TryAdd(index, optionBehaviour);
|
||||
optionBehaviour.gameObject.SetActive(enabled);
|
||||
optionBehaviour.OnValueChanged = new Action<OptionBehaviour>(__instance.ValueChanged);
|
||||
__instance.Children.Add(optionBehaviour);
|
||||
|
||||
option.OptionBehaviour = optionBehaviour;
|
||||
|
||||
if (enabled) num -= 0.45f;
|
||||
|
||||
if (index % 100 == 0) yield return null;
|
||||
}
|
||||
|
||||
__instance.ControllerSelectable.Clear();
|
||||
@@ -355,8 +321,11 @@ public static class GameOptionsMenuPatch
|
||||
{
|
||||
if (ModGameOptionsMenu.TabIndex < 3) return true;
|
||||
|
||||
if (ModGameOptionsMenu.GetFromBehaviour(option) is { } item && item.Children.Count > 0)
|
||||
ReCreateSettings(__instance);
|
||||
if (ModGameOptionsMenu.OptionList.TryGetValue(option, out int index))
|
||||
{
|
||||
OptionItem item = OptionItem.AllOptions[index];
|
||||
if (item != null && item.Children.Count > 0) ReCreateSettings(__instance);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -369,13 +338,14 @@ public static class GameOptionsMenuPatch
|
||||
|
||||
var num = 2.0f;
|
||||
|
||||
foreach (var option in OptionItem.AllOptions)
|
||||
for (var index = 0; index < OptionItem.AllOptions.Count; index++)
|
||||
{
|
||||
OptionItem option = OptionItem.AllOptions[index];
|
||||
if (option.Tab != modTab) continue;
|
||||
|
||||
bool enabled = !option.IsCurrentlyHidden() && AllParentsEnabledAndVisible(option.Parent);
|
||||
|
||||
if (ModGameOptionsMenu.CategoryHeaderList.TryGetValue(option.Id, out CategoryHeaderMasked categoryHeaderMasked))
|
||||
if (ModGameOptionsMenu.CategoryHeaderList.TryGetValue(index, out CategoryHeaderMasked categoryHeaderMasked))
|
||||
{
|
||||
categoryHeaderMasked.transform.localPosition = new(-0.903f, num, -2f);
|
||||
categoryHeaderMasked.gameObject.SetActive(enabled);
|
||||
@@ -383,7 +353,7 @@ public static class GameOptionsMenuPatch
|
||||
}
|
||||
else if (option.IsHeader && enabled) num -= 0.18f;
|
||||
|
||||
if (ModGameOptionsMenu.BehaviourList.TryGetValue(option.Id, out OptionBehaviour optionBehaviour))
|
||||
if (ModGameOptionsMenu.BehaviourList.TryGetValue(index, out OptionBehaviour optionBehaviour))
|
||||
{
|
||||
optionBehaviour.transform.localPosition = new(0.952f, num, -2f);
|
||||
optionBehaviour.gameObject.SetActive(enabled);
|
||||
@@ -474,17 +444,19 @@ public static class GameOptionsMenuPatch
|
||||
optionsConsole = console;
|
||||
}
|
||||
|
||||
if (optionsConsole == null) return;
|
||||
if (!optionsConsole) return;
|
||||
|
||||
if (Camera.main != null)
|
||||
Camera main = Camera.main;
|
||||
|
||||
if (main)
|
||||
{
|
||||
GameObject gameObject = Object.Instantiate(optionsConsole.MenuPrefab, Camera.main.transform, false);
|
||||
GameObject gameObject = Object.Instantiate(optionsConsole.MenuPrefab, main.transform, false);
|
||||
gameObject.transform.localPosition = optionsConsole.CustomPosition;
|
||||
}
|
||||
|
||||
LateTask.New(() =>
|
||||
{
|
||||
if (GameSettingMenu.Instance == null) return;
|
||||
if (!GameSettingMenu.Instance) return;
|
||||
GameSettingMenu.Instance.ChangeTab(tab, false);
|
||||
}, 0.01f);
|
||||
|
||||
@@ -499,28 +471,32 @@ public static class ToggleOptionPatch
|
||||
[HarmonyPrefix]
|
||||
private static bool InitializePrefix(ToggleOption __instance)
|
||||
{
|
||||
OptionItem item = ModGameOptionsMenu.GetFromBehaviour(__instance);
|
||||
if (item == null) return true;
|
||||
|
||||
CustomGameMode gm = Options.CurrentGameMode;
|
||||
Color32 color = gm == CustomGameMode.Standard ? (TabGroup)(ModGameOptionsMenu.TabIndex - 3) switch
|
||||
if (ModGameOptionsMenu.OptionList.TryGetValue(__instance, out int index))
|
||||
{
|
||||
TabGroup.ImpostorRoles => new Color32(255, 25, 25, 255),
|
||||
TabGroup.CrewmateRoles => new Color32(140, 255, 255, 255),
|
||||
TabGroup.NeutralRoles => new Color32(255, 171, 27, 255),
|
||||
TabGroup.CovenRoles => new Color32(123, 63, 187, 255),
|
||||
_ => new Color32(0, 165, 255, 255)
|
||||
} : Main.GameModeColors.TryGetValue(gm, out var c) ? c : new Color32(0, 165, 255, 255);
|
||||
__instance.CheckMark.sprite = Utils.LoadSprite("EHR.Resources.Images.Checkmark.png", 100f);
|
||||
__instance.CheckMark.color = color;
|
||||
var renderer = __instance.CheckMark.transform.parent.FindChild("ActiveSprite").GetComponent<SpriteRenderer>();
|
||||
renderer.sprite = Utils.LoadSprite("EHR.Resources.Images.CheckMarkBox.png", 100f);
|
||||
renderer.color = color;
|
||||
|
||||
__instance.TitleText.text = item.GetName();
|
||||
__instance.CheckMark.enabled = item.GetBool();
|
||||
item.OptionBehaviour = __instance;
|
||||
return false;
|
||||
OptionItem item = OptionItem.AllOptions[index];
|
||||
|
||||
CustomGameMode gm = Options.CurrentGameMode;
|
||||
Color32 color = gm == CustomGameMode.Standard ? (TabGroup)(ModGameOptionsMenu.TabIndex - 3) switch
|
||||
{
|
||||
TabGroup.ImpostorRoles => new Color32(255, 25, 25, 255),
|
||||
TabGroup.CrewmateRoles => new Color32(140, 255, 255, 255),
|
||||
TabGroup.NeutralRoles => new Color32(255, 171, 27, 255),
|
||||
TabGroup.CovenRoles => new Color32(123, 63, 187, 255),
|
||||
_ => new Color32(0, 165, 255, 255)
|
||||
} : Main.GameModeColors.TryGetValue(gm, out var c) ? c : new Color32(0, 165, 255, 255);
|
||||
__instance.CheckMark.sprite = Utils.LoadSprite("EHR.Resources.Images.Checkmark.png", 100f);
|
||||
__instance.CheckMark.color = color;
|
||||
var renderer = __instance.CheckMark.transform.parent.FindChild("ActiveSprite").GetComponent<SpriteRenderer>();
|
||||
renderer.sprite = Utils.LoadSprite("EHR.Resources.Images.CheckMarkBox.png", 100f);
|
||||
renderer.color = color;
|
||||
|
||||
__instance.TitleText.text = item.GetName();
|
||||
__instance.CheckMark.enabled = item.GetBool();
|
||||
item.OptionBehaviour = __instance;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// For some reason, ToggleOption.UpdateValue isn't called for Steam users
|
||||
@@ -528,14 +504,17 @@ public static class ToggleOptionPatch
|
||||
[HarmonyPrefix]
|
||||
private static bool TogglePrefix(ToggleOption __instance)
|
||||
{
|
||||
OptionItem item = ModGameOptionsMenu.GetFromBehaviour(__instance);
|
||||
if (item == null) return true;
|
||||
if (ModGameOptionsMenu.OptionList.TryGetValue(__instance, out int index))
|
||||
{
|
||||
__instance.CheckMark.enabled = !__instance.CheckMark.enabled;
|
||||
OptionItem item = OptionItem.AllOptions[index];
|
||||
item.SetValue(__instance.GetBool() ? 1 : 0);
|
||||
__instance.OnValueChanged.Invoke(__instance);
|
||||
NotificationPopperPatch.AddSettingsChangeMessage(item, true);
|
||||
return false;
|
||||
}
|
||||
|
||||
__instance.CheckMark.enabled = !__instance.CheckMark.enabled;
|
||||
item.SetValue(__instance.GetBool() ? 1 : 0);
|
||||
__instance.OnValueChanged.Invoke(__instance);
|
||||
NotificationPopperPatch.AddSettingsChangeMessage(item, true);
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -589,56 +568,65 @@ public static class NumberOptionPatch
|
||||
break;
|
||||
}
|
||||
|
||||
OptionItem item = ModGameOptionsMenu.GetFromBehaviour(__instance);
|
||||
if (item == null) return true;
|
||||
|
||||
__instance.TitleText.text = item.GetName();
|
||||
item.OptionBehaviour = __instance;
|
||||
return false;
|
||||
if (ModGameOptionsMenu.OptionList.TryGetValue(__instance, out int index))
|
||||
{
|
||||
OptionItem item = OptionItem.AllOptions[index];
|
||||
__instance.TitleText.text = item.GetName();
|
||||
item.OptionBehaviour = __instance;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(NumberOption.UpdateValue))]
|
||||
[HarmonyPrefix]
|
||||
private static bool UpdateValuePrefix(NumberOption __instance)
|
||||
{
|
||||
OptionItem item = ModGameOptionsMenu.GetFromBehaviour(__instance);
|
||||
if (item == null) return true;
|
||||
|
||||
switch (item)
|
||||
if (ModGameOptionsMenu.OptionList.TryGetValue(__instance, out int index))
|
||||
{
|
||||
case IntegerOptionItem integerOptionItem:
|
||||
integerOptionItem.SetValue(integerOptionItem.Rule.GetNearestIndex(__instance.GetInt()));
|
||||
break;
|
||||
case FloatOptionItem floatOptionItem:
|
||||
floatOptionItem.SetValue(floatOptionItem.Rule.GetNearestIndex(__instance.GetFloat()));
|
||||
break;
|
||||
case PresetOptionItem presetOptionItem:
|
||||
presetOptionItem.SetValue(presetOptionItem.Rule.GetNearestIndex(__instance.GetInt()));
|
||||
GameOptionsMenuPatch.ReloadUI();
|
||||
break;
|
||||
OptionItem item = OptionItem.AllOptions[index];
|
||||
|
||||
switch (item)
|
||||
{
|
||||
case IntegerOptionItem integerOptionItem:
|
||||
integerOptionItem.SetValue(integerOptionItem.Rule.GetNearestIndex(__instance.GetInt()));
|
||||
break;
|
||||
case FloatOptionItem floatOptionItem:
|
||||
floatOptionItem.SetValue(floatOptionItem.Rule.GetNearestIndex(__instance.GetFloat()));
|
||||
break;
|
||||
case PresetOptionItem presetOptionItem:
|
||||
presetOptionItem.SetValue(presetOptionItem.Rule.GetNearestIndex(__instance.GetInt()));
|
||||
GameOptionsMenuPatch.ReloadUI();
|
||||
break;
|
||||
}
|
||||
|
||||
NotificationPopperPatch.AddSettingsChangeMessage(item, true);
|
||||
return false;
|
||||
}
|
||||
|
||||
NotificationPopperPatch.AddSettingsChangeMessage(item, true);
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(NumberOption.FixedUpdate))]
|
||||
[HarmonyPrefix]
|
||||
private static bool FixedUpdatePrefix(NumberOption __instance)
|
||||
{
|
||||
OptionItem item = ModGameOptionsMenu.GetFromBehaviour(__instance);
|
||||
if (item == null) return true;
|
||||
|
||||
__instance.MinusBtn.SetInteractable(true);
|
||||
__instance.PlusBtn.SetInteractable(true);
|
||||
|
||||
if (!Mathf.Approximately(__instance.oldValue, __instance.Value))
|
||||
if (ModGameOptionsMenu.OptionList.TryGetValue(__instance, out int index))
|
||||
{
|
||||
__instance.oldValue = __instance.Value;
|
||||
__instance.ValueText.text = GetValueString(__instance, __instance.Value, item);
|
||||
__instance.MinusBtn.SetInteractable(true);
|
||||
__instance.PlusBtn.SetInteractable(true);
|
||||
|
||||
if (!Mathf.Approximately(__instance.oldValue, __instance.Value))
|
||||
{
|
||||
__instance.oldValue = __instance.Value;
|
||||
__instance.ValueText.text = GetValueString(__instance, __instance.Value, OptionItem.AllOptions[index]);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
private static string GetValueString(NumberOption __instance, float value, OptionItem item)
|
||||
@@ -708,44 +696,47 @@ public static class StringOptionPatch
|
||||
[HarmonyPrefix]
|
||||
private static bool InitializePrefix(StringOption __instance)
|
||||
{
|
||||
OptionItem item = ModGameOptionsMenu.GetFromBehaviour(__instance);
|
||||
if (item == null) return true;
|
||||
|
||||
string name = item.GetName();
|
||||
item.OptionBehaviour = __instance;
|
||||
string name1 = name;
|
||||
|
||||
if (Main.CustomRoleValues.FindFirst(x => Translator.GetString($"{x}") == name1.RemoveHtmlTags(), out CustomRoles role))
|
||||
if (ModGameOptionsMenu.OptionList.TryGetValue(__instance, out int index))
|
||||
{
|
||||
if (role.ToString().Contains("GuardianAngel")) role = CustomRoles.GA;
|
||||
OptionItem item = OptionItem.AllOptions[index];
|
||||
string name = item.GetName();
|
||||
item.OptionBehaviour = __instance;
|
||||
string name1 = name;
|
||||
|
||||
name = name.RemoveHtmlTags();
|
||||
|
||||
switch (Options.UsePets.GetBool())
|
||||
if (Enum.GetValues<CustomRoles>().FindFirst(x => Translator.GetString($"{x}") == name1.RemoveHtmlTags(), out CustomRoles role))
|
||||
{
|
||||
case false when role.OnlySpawnsWithPets():
|
||||
name += Translator.GetString("RequiresPetIndicator");
|
||||
break;
|
||||
case true when role.PetActivatedAbility():
|
||||
name += Translator.GetString("SupportsPetIndicator");
|
||||
break;
|
||||
if (role.ToString().Contains("GuardianAngel")) role = CustomRoles.GA;
|
||||
|
||||
name = name.RemoveHtmlTags();
|
||||
|
||||
switch (Options.UsePets.GetBool())
|
||||
{
|
||||
case false when role.OnlySpawnsWithPets():
|
||||
name += Translator.GetString("RequiresPetIndicator");
|
||||
break;
|
||||
case true when role.PetActivatedAbility():
|
||||
name += Translator.GetString("SupportsPetIndicator");
|
||||
break;
|
||||
}
|
||||
|
||||
if (role.IsExperimental()) name += $"<size=2>{Translator.GetString("ExperimentalRoleIndicator")}</size>";
|
||||
if (role.IsGhostRole()) name += GetGhostRoleTeam(role);
|
||||
if (role.IsDevFavoriteRole()) name += " <size=2><#00ffff>★</color></size>";
|
||||
|
||||
__instance.TitleText.fontWeight = FontWeight.Black;
|
||||
__instance.TitleText.outlineColor = new(255, 255, 255, 255);
|
||||
__instance.TitleText.outlineWidth = 0.04f;
|
||||
__instance.LabelBackground.color = Utils.GetRoleColor(role);
|
||||
__instance.TitleText.color = Color.white;
|
||||
name = $"<size=3.5>{name}</size>";
|
||||
SetupHelpIcon(role, __instance);
|
||||
}
|
||||
|
||||
if (role.IsExperimental()) name += $"<size=2>{Translator.GetString("ExperimentalRoleIndicator")}</size>";
|
||||
if (role.IsGhostRole()) name += GetGhostRoleTeam(role);
|
||||
if (role.IsDevFavoriteRole()) name += " <size=2><#00ffff>★</color></size>";
|
||||
|
||||
__instance.TitleText.fontWeight = FontWeight.Black;
|
||||
__instance.TitleText.outlineColor = new(255, 255, 255, 255);
|
||||
__instance.TitleText.outlineWidth = 0.04f;
|
||||
__instance.LabelBackground.color = Utils.GetRoleColor(role);
|
||||
__instance.TitleText.color = Color.white;
|
||||
name = $"<size=3.5>{name}</size>";
|
||||
SetupHelpIcon(role, __instance);
|
||||
__instance.TitleText.text = name;
|
||||
return false;
|
||||
}
|
||||
|
||||
__instance.TitleText.text = name;
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void SetupHelpIcon(CustomRoles role, StringOption option)
|
||||
@@ -762,45 +753,46 @@ public static class StringOptionPatch
|
||||
|
||||
gameOptionButton.OnClick.AddListener((Action)(() =>
|
||||
{
|
||||
var item = ModGameOptionsMenu.GetFromBehaviour(option);
|
||||
if (item == null) return;
|
||||
|
||||
string name = item.GetName();
|
||||
|
||||
if (Main.CustomRoleValues.FindFirst(x => Translator.GetString($"{x}") == name.RemoveHtmlTags(), out CustomRoles value))
|
||||
if (ModGameOptionsMenu.OptionList.TryGetValue(option, out int index))
|
||||
{
|
||||
string roleName = value.IsVanilla() ? value + "EHR" : value.ToString();
|
||||
string str = Translator.GetString($"{roleName}InfoLong").FixRoleName(value);
|
||||
string infoLong;
|
||||
OptionItem item = OptionItem.AllOptions[index];
|
||||
string name = item.GetName();
|
||||
|
||||
try { infoLong = CustomHnS.AllHnSRoles.Contains(value) ? str : str[(str.IndexOf('\n') + 1)..str.Split("\n\n")[0].Length]; }
|
||||
catch { infoLong = str; }
|
||||
|
||||
GameObject.Find("PlayerOptionsMenu(Clone)").transform.FindChild("What Is This?").gameObject.SetActive(true);
|
||||
GameSettingMenuPatch.GMButtons.ForEach(x => x.gameObject.SetActive(false));
|
||||
|
||||
var info = $"{value.ToColoredString()}: {infoLong}";
|
||||
GameSettingMenu.Instance.MenuDescriptionText.text = info;
|
||||
|
||||
long now = Utils.TimeStamp;
|
||||
bool startCoRoutine = now > HelpShowEndTS;
|
||||
HelpShowEndTS = now + 15;
|
||||
if (startCoRoutine) Main.Instance.StartCoroutine(CoRoutine());
|
||||
|
||||
IEnumerator CoRoutine()
|
||||
if (Enum.GetValues<CustomRoles>().FindFirst(x => Translator.GetString($"{x}") == name.RemoveHtmlTags(), out CustomRoles value))
|
||||
{
|
||||
while (HelpShowEndTS > Utils.TimeStamp)
|
||||
yield return new WaitForSecondsRealtime(1f);
|
||||
string roleName = value.IsVanilla() ? value + "EHR" : value.ToString();
|
||||
string str = Translator.GetString($"{roleName}InfoLong").FixRoleName(value);
|
||||
string infoLong;
|
||||
|
||||
GameObject gameObject = GameObject.Find("PlayerOptionsMenu(Clone)");
|
||||
try { infoLong = CustomHnS.AllHnSRoles.Contains(value) ? str : str[(str.IndexOf('\n') + 1)..str.Split("\n\n")[0].Length]; }
|
||||
catch { infoLong = str; }
|
||||
|
||||
if (gameObject != null)
|
||||
GameObject.Find("PlayerOptionsMenu(Clone)").transform.FindChild("What Is This?").gameObject.SetActive(true);
|
||||
GameSettingMenuPatch.GMButtons.ForEach(x => x.gameObject.SetActive(false));
|
||||
|
||||
var info = $"{value.ToColoredString()}: {infoLong}";
|
||||
GameSettingMenu.Instance.MenuDescriptionText.text = info;
|
||||
|
||||
long now = Utils.TimeStamp;
|
||||
bool startCoRoutine = now > HelpShowEndTS;
|
||||
HelpShowEndTS = now + 15;
|
||||
if (startCoRoutine) Main.Instance.StartCoroutine(CoRoutine());
|
||||
|
||||
IEnumerator CoRoutine()
|
||||
{
|
||||
Transform findChild = gameObject.transform.FindChild("What Is This?");
|
||||
if (findChild != null) findChild.gameObject.SetActive(false);
|
||||
}
|
||||
while (HelpShowEndTS > Utils.TimeStamp)
|
||||
yield return new WaitForSecondsRealtime(1f);
|
||||
|
||||
GameSettingMenuPatch.GMButtons.ForEach(x => x.gameObject.SetActive(true));
|
||||
GameObject gameObject = GameObject.Find("PlayerOptionsMenu(Clone)");
|
||||
|
||||
if (gameObject != null)
|
||||
{
|
||||
Transform findChild = gameObject.transform.FindChild("What Is This?");
|
||||
if (findChild != null) findChild.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
GameSettingMenuPatch.GMButtons.ForEach(x => x.gameObject.SetActive(true));
|
||||
}
|
||||
}
|
||||
}
|
||||
}));
|
||||
@@ -844,72 +836,74 @@ public static class StringOptionPatch
|
||||
[HarmonyPrefix]
|
||||
private static bool UpdateValuePrefix(StringOption __instance)
|
||||
{
|
||||
var item = ModGameOptionsMenu.GetFromBehaviour(__instance);
|
||||
if (item == null)
|
||||
if (ModGameOptionsMenu.OptionList.TryGetValue(__instance, out int index))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
item.SetValue(__instance.GetInt());
|
||||
string name = item.GetName();
|
||||
OptionItem item = OptionItem.AllOptions[index];
|
||||
item.SetValue(__instance.GetInt());
|
||||
string name = item.GetName();
|
||||
|
||||
string name1 = name;
|
||||
string name1 = name;
|
||||
|
||||
if (Main.CustomRoleValues.FindFirst(x => Translator.GetString($"{x}") == name1.RemoveHtmlTags(), out CustomRoles role))
|
||||
{
|
||||
if (role.ToString().Contains("GuardianAngel")) role = CustomRoles.GA;
|
||||
|
||||
name = name.RemoveHtmlTags();
|
||||
|
||||
switch (Options.UsePets.GetBool())
|
||||
if (Enum.GetValues<CustomRoles>().FindFirst(x => Translator.GetString($"{x}") == name1.RemoveHtmlTags(), out CustomRoles role))
|
||||
{
|
||||
case true when role.PetActivatedAbility():
|
||||
name += Translator.GetString("SupportsPetIndicator");
|
||||
break;
|
||||
case false when role.OnlySpawnsWithPets():
|
||||
name += Translator.GetString("RequiresPetIndicator");
|
||||
Prompt.Show(Translator.GetString("Promt.RequiresPets"), () => Options.UsePets.SetValue(1), () => { });
|
||||
break;
|
||||
if (role.ToString().Contains("GuardianAngel")) role = CustomRoles.GA;
|
||||
|
||||
name = name.RemoveHtmlTags();
|
||||
|
||||
switch (Options.UsePets.GetBool())
|
||||
{
|
||||
case true when role.PetActivatedAbility():
|
||||
name += Translator.GetString("SupportsPetIndicator");
|
||||
break;
|
||||
case false when role.OnlySpawnsWithPets():
|
||||
name += Translator.GetString("RequiresPetIndicator");
|
||||
Prompt.Show(Translator.GetString("Promt.RequiresPets"), () => Options.UsePets.SetValue(1), () => { });
|
||||
break;
|
||||
}
|
||||
|
||||
if (role.IsExperimental()) name += $"<size=2>{Translator.GetString("ExperimentalRoleIndicator")}</size>";
|
||||
if (role.IsGhostRole()) name += GetGhostRoleTeam(role);
|
||||
if (role.IsDevFavoriteRole()) name += " <size=2><#00ffff>★</color></size>";
|
||||
|
||||
__instance.TitleText.fontWeight = FontWeight.Black;
|
||||
__instance.TitleText.outlineColor = new(255, 255, 255, 255);
|
||||
__instance.TitleText.outlineWidth = 0.04f;
|
||||
__instance.LabelBackground.color = Utils.GetRoleColor(role);
|
||||
__instance.TitleText.color = Color.white;
|
||||
name = $"<size=3.5>{name}</size>";
|
||||
NotificationPopperPatch.AddRoleSettingsChangeMessage(item, role, true);
|
||||
}
|
||||
else
|
||||
NotificationPopperPatch.AddSettingsChangeMessage(item, true);
|
||||
|
||||
if (role.IsExperimental()) name += $"<size=2>{Translator.GetString("ExperimentalRoleIndicator")}</size>";
|
||||
if (role.IsGhostRole()) name += GetGhostRoleTeam(role);
|
||||
if (role.IsDevFavoriteRole()) name += " <size=2><#00ffff>★</color></size>";
|
||||
|
||||
__instance.TitleText.fontWeight = FontWeight.Black;
|
||||
__instance.TitleText.outlineColor = new(255, 255, 255, 255);
|
||||
__instance.TitleText.outlineWidth = 0.04f;
|
||||
__instance.LabelBackground.color = Utils.GetRoleColor(role);
|
||||
__instance.TitleText.color = Color.white;
|
||||
name = $"<size=3.5>{name}</size>";
|
||||
NotificationPopperPatch.AddRoleSettingsChangeMessage(item, role, true);
|
||||
__instance.TitleText.text = name;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
NotificationPopperPatch.AddSettingsChangeMessage(item, true);
|
||||
|
||||
__instance.TitleText.text = name;
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(StringOption.FixedUpdate))]
|
||||
[HarmonyPrefix]
|
||||
private static bool FixedUpdatePrefix(StringOption __instance)
|
||||
{
|
||||
var item = ModGameOptionsMenu.GetFromBehaviour(__instance);
|
||||
if (item == null) return true;
|
||||
|
||||
__instance.MinusBtn.SetInteractable(true);
|
||||
__instance.PlusBtn.SetInteractable(true);
|
||||
|
||||
if (__instance.oldValue != __instance.Value && item is StringOptionItem stringOptionItem)
|
||||
if (ModGameOptionsMenu.OptionList.TryGetValue(__instance, out int index))
|
||||
{
|
||||
__instance.oldValue = __instance.Value;
|
||||
string selection = stringOptionItem.Selections[stringOptionItem.Rule.GetValueByIndex(__instance.Value)];
|
||||
if (!stringOptionItem.noTranslation) selection = Translator.GetString(selection);
|
||||
__instance.ValueText.text = selection;
|
||||
__instance.MinusBtn.SetInteractable(true);
|
||||
__instance.PlusBtn.SetInteractable(true);
|
||||
|
||||
if (__instance.oldValue != __instance.Value && OptionItem.AllOptions[index] is StringOptionItem stringOptionItem)
|
||||
{
|
||||
__instance.oldValue = __instance.Value;
|
||||
string selection = stringOptionItem.Selections[stringOptionItem.Rule.GetValueByIndex(__instance.Value)];
|
||||
if (!stringOptionItem.noTranslation) selection = Translator.GetString(selection);
|
||||
__instance.ValueText.text = selection;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
[HarmonyPatch(nameof(StringOption.Increase))]
|
||||
@@ -946,7 +940,7 @@ public static class StringOptionPatch
|
||||
[HarmonyPatch(typeof(GameSettingMenu))]
|
||||
public static class GameSettingMenuPatch
|
||||
{
|
||||
public static List<GameObject> GMButtons = [];
|
||||
public static System.Collections.Generic.List<GameObject> GMButtons = [];
|
||||
|
||||
private static readonly Vector3 ButtonPositionLeft = new(-3.9f, -0.55f, 0f);
|
||||
private static readonly Vector3 ButtonPositionRight = new(-2.4f, -0.55f, 0f);
|
||||
@@ -956,15 +950,15 @@ public static class GameSettingMenuPatch
|
||||
private static GameOptionsMenu TemplateGameOptionsMenu;
|
||||
private static PassiveButton TemplateGameSettingsButton;
|
||||
|
||||
private static Dictionary<TabGroup, PassiveButton> ModSettingsButtons = [];
|
||||
private static Dictionary<TabGroup, GameOptionsMenu> ModSettingsTabs = [];
|
||||
private static System.Collections.Generic.Dictionary<TabGroup, PassiveButton> ModSettingsButtons = [];
|
||||
private static System.Collections.Generic.Dictionary<TabGroup, GameOptionsMenu> ModSettingsTabs = [];
|
||||
|
||||
public static NumberOption PresetBehaviour;
|
||||
|
||||
public static long LastPresetChange;
|
||||
|
||||
public static FreeChatInputField InputField;
|
||||
private static List<OptionItem> HiddenBySearch = [];
|
||||
private static System.Collections.Generic.List<OptionItem> HiddenBySearch = [];
|
||||
public static Action SearchForOptionsAction;
|
||||
|
||||
private static int NumImpsOnOpen = 1;
|
||||
@@ -1277,9 +1271,9 @@ public static class GameSettingMenuPatch
|
||||
string text = textField.textArea.text.Trim().ToLower();
|
||||
var modTab = (TabGroup)(ModGameOptionsMenu.TabIndex - 3);
|
||||
OptionItem[] optionItems = Options.GroupedOptions[modTab];
|
||||
List<OptionItem> result = optionItems.Where(x => x.Parent == null && !x.IsCurrentlyHidden() && !Translator.GetString($"{x.Name}").Contains(text, StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
System.Collections.Generic.List<OptionItem> result = optionItems.Where(x => x.Parent == null && !x.IsCurrentlyHidden() && !Translator.GetString($"{x.Name}").Contains(text, StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
HiddenBySearch = result;
|
||||
List<OptionItem> searchWinners = optionItems.Where(x => x.Parent == null && !x.IsCurrentlyHidden() && !result.Contains(x)).ToList();
|
||||
System.Collections.Generic.List<OptionItem> searchWinners = optionItems.Where(x => x.Parent == null && !x.IsCurrentlyHidden() && !result.Contains(x)).ToList();
|
||||
|
||||
if (searchWinners.Count == 0 || !ModSettingsTabs.TryGetValue(modTab, out GameOptionsMenu gameSettings) || gameSettings == null)
|
||||
{
|
||||
@@ -1413,7 +1407,9 @@ public static class GameSettingMenuPatch
|
||||
|
||||
SetDefaultButton(__instance);
|
||||
|
||||
ModGameOptionsMenu.ClearDictionaries();
|
||||
ModGameOptionsMenu.OptionList = new();
|
||||
ModGameOptionsMenu.BehaviourList = new();
|
||||
ModGameOptionsMenu.CategoryHeaderList = new();
|
||||
|
||||
ControllerManager.Instance.OpenOverlayMenu(__instance.name, __instance.BackButton, __instance.DefaultButtonSelected, __instance.ControllerSelectable);
|
||||
if (HudManager.InstanceExists) HudManager.Instance.menuNavigationPrompts.SetActive(false);
|
||||
@@ -1465,7 +1461,9 @@ public static class GameSettingMenuPatch
|
||||
foreach (GameOptionsMenu tab in ModSettingsTabs.Values) Object.Destroy(tab);
|
||||
foreach (GameObject button in GMButtons) Object.Destroy(button);
|
||||
|
||||
ModGameOptionsMenu.ClearDictionaries();
|
||||
ModSettingsButtons = [];
|
||||
ModSettingsTabs = [];
|
||||
GMButtons = [];
|
||||
|
||||
Main.Instance.StartCoroutine(OptionShower.GetText());
|
||||
}
|
||||
@@ -1514,4 +1512,4 @@ public static class RpcSyncSettingsPatch
|
||||
OptionItem.SyncAllOptions();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+21
-23
@@ -27,11 +27,11 @@ internal static class HudManagerPatch
|
||||
public static Color? CooldownTimerFlashColor = null;
|
||||
public static string AchievementUnlockedText = string.Empty;
|
||||
|
||||
public static TaskPanelBehaviour RoleTab;
|
||||
private static TaskPanelBehaviour RoleTab;
|
||||
|
||||
public static void ClearLowerInfoText()
|
||||
{
|
||||
if (LowerInfoText == null) return;
|
||||
if (!LowerInfoText) return;
|
||||
LowerInfoText.text = string.Empty;
|
||||
}
|
||||
|
||||
@@ -44,11 +44,9 @@ internal static class HudManagerPatch
|
||||
PlayerControl player = PlayerControl.LocalPlayer;
|
||||
if (!player) return;
|
||||
|
||||
if (!__instance) return;
|
||||
|
||||
if (GameStates.IsLobby)
|
||||
{
|
||||
if (PingTrackerUpdatePatch.Instance != null && SettingsText == null)
|
||||
if (PingTrackerUpdatePatch.Instance && !SettingsText)
|
||||
{
|
||||
SettingsText = Object.Instantiate(__instance.KillButton.cooldownTimerText, __instance.transform, true);
|
||||
SettingsText.name = "EHR_SettingsText";
|
||||
@@ -59,19 +57,19 @@ internal static class HudManagerPatch
|
||||
SettingsText.overflowMode = TextOverflowModes.Overflow;
|
||||
SettingsText.enableWordWrapping = false;
|
||||
}
|
||||
else if (PingTrackerUpdatePatch.Instance == null && SettingsText != null)
|
||||
else if (!PingTrackerUpdatePatch.Instance && SettingsText)
|
||||
{
|
||||
Object.Destroy(SettingsText.gameObject);
|
||||
SettingsText = null;
|
||||
}
|
||||
|
||||
if (SettingsText != null)
|
||||
if (SettingsText)
|
||||
{
|
||||
SettingsText.text = OptionShower.GetTextNoFresh();
|
||||
SettingsText.enabled = SettingsText.text != string.Empty;
|
||||
}
|
||||
}
|
||||
else if (SettingsText != null)
|
||||
else if (SettingsText)
|
||||
{
|
||||
Object.Destroy(SettingsText.gameObject);
|
||||
SettingsText = null;
|
||||
@@ -79,7 +77,7 @@ internal static class HudManagerPatch
|
||||
|
||||
if (AmongUsClient.Instance.AmHost)
|
||||
{
|
||||
if (OverriddenRolesText == null)
|
||||
if (!OverriddenRolesText)
|
||||
{
|
||||
OverriddenRolesText = Object.Instantiate(__instance.KillButton.cooldownTimerText, __instance.transform, true);
|
||||
OverriddenRolesText.alignment = TextAlignmentOptions.Right;
|
||||
@@ -100,7 +98,7 @@ internal static class HudManagerPatch
|
||||
{
|
||||
PlayerControl pc = Utils.GetPlayerById(item.Key);
|
||||
string prefix = first ? string.Empty : "\n";
|
||||
var text = $"{prefix}{(item.Key == 0 ? "Host" : $"{(pc == null ? $"ID {item.Key}" : $"{pc.GetRealName()}")}")} - <color={Main.RoleColors.GetValueOrDefault(item.Value, "#ffffff")}>{GetString(item.Value.ToString())}</color>";
|
||||
var text = $"{prefix}{(item.Key == 0 ? "Host" : $"{(!pc ? $"ID {item.Key}" : $"{pc.GetRealName()}")}")} - <color={Main.RoleColors.GetValueOrDefault(item.Value, "#ffffff")}>{GetString(item.Value.ToString())}</color>";
|
||||
resultText[item.Key] = text;
|
||||
first = false;
|
||||
}
|
||||
@@ -121,7 +119,7 @@ internal static class HudManagerPatch
|
||||
else
|
||||
{
|
||||
string prefix = first ? string.Empty : "\n";
|
||||
var text = $"{prefix}{(item.Key == 0 ? "Host" : $"{(pc == null ? $"ID {item.Key}" : $"{pc.GetRealName()}")}")} - <#ffffff>(</color><color={Main.RoleColors.GetValueOrDefault(role, "#ffffff")}>{GetString(role.ToString())}</color><#ffffff>)</color>";
|
||||
var text = $"{prefix}{(item.Key == 0 ? "Host" : $"{(!pc ? $"ID {item.Key}" : $"{pc.GetRealName()}")}")} - <#ffffff>(</color><color={Main.RoleColors.GetValueOrDefault(role, "#ffffff")}>{GetString(role.ToString())}</color><#ffffff>)</color>";
|
||||
resultText[item.Key] = text;
|
||||
first = false;
|
||||
}
|
||||
@@ -138,7 +136,7 @@ internal static class HudManagerPatch
|
||||
|
||||
if (Options.AutoGMRotationEnabled)
|
||||
{
|
||||
if (AutoGMRotationStatusText == null)
|
||||
if (!AutoGMRotationStatusText)
|
||||
{
|
||||
AutoGMRotationStatusText = Object.Instantiate(__instance.KillButton.cooldownTimerText, __instance.transform, true);
|
||||
AutoGMRotationStatusText.alignment = TextAlignmentOptions.Left;
|
||||
@@ -153,7 +151,7 @@ internal static class HudManagerPatch
|
||||
AutoGMRotationStatusText.text = BuildAutoGMRotationStatusText(false);
|
||||
AutoGMRotationStatusText.enabled = AutoGMRotationStatusText.text != string.Empty && GameStates.IsLobby;
|
||||
}
|
||||
else if (AutoGMRotationStatusText != null)
|
||||
else if (AutoGMRotationStatusText)
|
||||
{
|
||||
AutoGMRotationStatusText.text = string.Empty;
|
||||
AutoGMRotationStatusText.enabled = false;
|
||||
@@ -196,7 +194,7 @@ internal static class HudManagerPatch
|
||||
|
||||
CustomRoles role = player.GetCustomRole();
|
||||
|
||||
if (RoleTab == null) RoleTab = TaskPanelBehaviourPatch.CreateRoleTab(role);
|
||||
if (!RoleTab) RoleTab = TaskPanelBehaviourPatch.CreateRoleTab(role);
|
||||
TaskPanelBehaviourPatch.UpdateRoleTab(RoleTab, role);
|
||||
|
||||
bool usesPetInsteadOfKill = player.UsesPetInsteadOfKill();
|
||||
@@ -247,7 +245,7 @@ internal static class HudManagerPatch
|
||||
case CustomRoles.CTFPlayer:
|
||||
__instance.AbilityButton?.OverrideText(GetString("CTF_ButtonText"));
|
||||
break;
|
||||
case CustomRoles.RRPlayer when __instance.AbilityButton != null && RoomRush.VentLimit.TryGetValue(PlayerControl.LocalPlayer.PlayerId, out int ventLimit):
|
||||
case CustomRoles.RRPlayer when __instance.AbilityButton && RoomRush.VentLimit.TryGetValue(PlayerControl.LocalPlayer.PlayerId, out int ventLimit):
|
||||
__instance.AbilityButton?.SetUsesRemaining(ventLimit);
|
||||
break;
|
||||
case CustomRoles.SnowdownPlayer:
|
||||
@@ -258,7 +256,7 @@ internal static class HudManagerPatch
|
||||
if (role.PetActivatedAbility() && Options.CurrentGameMode == CustomGameMode.Standard && player.GetRoleTypes() != RoleTypes.Engineer && !role.OnlySpawnsWithPets() && !role.AlwaysUsesPhantomBase() && !player.GetCustomSubRoles().Any(StartGameHostPatch.BasisChangingAddons.ContainsKey) && role is not CustomRoles.Changeling and not CustomRoles.Ninja and not CustomRoles.Duality and not CustomRoles.Witch and not CustomRoles.Silencer && (!role.SimpleAbilityTrigger() || !Options.UsePhantomBasis.GetBool() || !(player.IsNeutralKiller() && Options.UsePhantomBasisForNKs.GetBool())) && !(Options.UseMeetingShapeshift.GetBool() && player.UsesMeetingShapeshift()) && !role.ToString().EndsWith("EHR") && !role.IsVanilla())
|
||||
__instance.AbilityButton?.Hide();
|
||||
|
||||
if (LowerInfoText == null)
|
||||
if (!LowerInfoText)
|
||||
{
|
||||
LowerInfoText = Object.Instantiate(__instance.KillButton.cooldownTimerText, __instance.transform, true);
|
||||
LowerInfoText.alignment = TextAlignmentOptions.Center;
|
||||
@@ -571,7 +569,7 @@ internal static class SetHudActivePatch
|
||||
{
|
||||
if (GameStates.IsLobby || !isActive) __instance?.ReportButton?.ToggleVisible(false);
|
||||
|
||||
if (__instance == null)
|
||||
if (!__instance)
|
||||
{
|
||||
Logger.Fatal("HudManager __instance ended up being null", "SetHudActivePatch.Postfix");
|
||||
return;
|
||||
@@ -642,7 +640,7 @@ internal static class SetHudActivePatch
|
||||
}
|
||||
|
||||
PlayerControl player = PlayerControl.LocalPlayer;
|
||||
if (player == null) return;
|
||||
if (!player) return;
|
||||
|
||||
switch (player.GetCustomRole())
|
||||
{
|
||||
@@ -726,7 +724,7 @@ internal static class HudManagerStartPatch
|
||||
{
|
||||
foreach (AspectPosition aspect in HudManager.Instance.transform.FindChild("Buttons").GetComponentsInChildren<AspectPosition>(true))
|
||||
{
|
||||
if (aspect.gameObject == null) continue;
|
||||
if (!aspect.gameObject) continue;
|
||||
if (aspect.gameObject.transform.parent.name == "TopRight") continue;
|
||||
if (aspect.gameObject.transform.parent.transform.parent.name == "TopRight") continue;
|
||||
|
||||
@@ -737,7 +735,7 @@ internal static class HudManagerStartPatch
|
||||
|
||||
foreach (ActionButton button in HudManager.Instance.GetComponentsInChildren<ActionButton>(true))
|
||||
{
|
||||
if (button.gameObject == null) continue;
|
||||
if (!button.gameObject) continue;
|
||||
|
||||
button.gameObject.SetActive(!button.isActiveAndEnabled);
|
||||
button.gameObject.transform.localScale *= scaleFactor;
|
||||
@@ -818,7 +816,7 @@ internal static class SabotageMapPatch
|
||||
|
||||
foreach (MapRoom mr in __instance.rooms)
|
||||
{
|
||||
if (mr.special == null || mr.special.transform == null) continue;
|
||||
if (!mr.special || !mr.special.transform) continue;
|
||||
|
||||
SystemTypes room = mr.room;
|
||||
|
||||
@@ -893,7 +891,7 @@ internal static class MapRoomDoorsUpdatePatch
|
||||
{
|
||||
var autoOpenDoor = door.TryCast<AutoOpenDoor>();
|
||||
|
||||
if (autoOpenDoor != null)
|
||||
if (autoOpenDoor)
|
||||
{
|
||||
total = 30f;
|
||||
timer = autoOpenDoor.CooldownTimer;
|
||||
@@ -1347,7 +1345,7 @@ internal static class TaskPanelBehaviourPatch
|
||||
|
||||
PlayerControl player = PlayerControl.LocalPlayer;
|
||||
|
||||
if (taskList == "None" || GameStates.IsLobby || player == null) return;
|
||||
if (taskList == "None" || GameStates.IsLobby || !player) return;
|
||||
|
||||
NetworkedPlayerInfo data = PlayerControl.LocalPlayer.Data;
|
||||
if (data && data.Role) taskList = taskList.Replace($"\n{data.Role.NiceName} {TranslationController.Instance.GetString(StringNames.RoleHint)}\n{data.Role.BlurbMed}", string.Empty);
|
||||
|
||||
@@ -456,11 +456,12 @@ internal static class SetEverythingUpPatch
|
||||
|
||||
IEnumerator SetupPoolablePlayers()
|
||||
{
|
||||
if (Camera.main == null) yield break;
|
||||
Camera main = Camera.main;
|
||||
if (!main) yield break;
|
||||
|
||||
yield return null;
|
||||
|
||||
Vector3 pos = Camera.main.ViewportToWorldPoint(new(0f, 1f, Camera.main.nearClipPlane));
|
||||
Vector3 pos = main.ViewportToWorldPoint(new(0f, 1f, main.nearClipPlane));
|
||||
GameObject roleSummaryObject = Object.Instantiate(__instance.WinText.gameObject);
|
||||
roleSummaryObject.transform.position = new(__instance.Navigation.ExitButton.transform.position.x + 0.1f, pos.y - 0.1f, -15f);
|
||||
roleSummaryObject.transform.localScale = new(1f, 1f, 1f);
|
||||
|
||||
@@ -551,7 +551,7 @@ internal static class VentilationSystemDeterioratePatch
|
||||
{
|
||||
int vents = ShipStatus.Instance.AllVents.Count(vent => !pc.CanUseVent(vent.Id));
|
||||
if (allPlayers.Count >= vents) continue;
|
||||
MessageWriter writer = MessageWriter.Get(SendOption.Reliable);
|
||||
MessageWriter writer = MessageWriter.Get();
|
||||
writer.StartMessage(6);
|
||||
writer.Write(AmongUsClient.Instance.GameId);
|
||||
writer.WritePacked(pc.OwnerId);
|
||||
|
||||
@@ -74,7 +74,7 @@ internal class Asthmatic : IAddon
|
||||
foreach (PlayerControl pc in Main.EnumerateAlivePlayerControls())
|
||||
{
|
||||
if (pc.Is(CustomRoles.Asthmatic))
|
||||
Timers[pc.PlayerId] = new(30, r.Next(MinRedTime, MaxRedTime), now, '●', false, RandomRedTime, RandomGreenTime);
|
||||
Timers[pc.PlayerId] = new(30, r.Next(MinRedTime, MaxRedTime), '●', false, RandomRedTime, RandomGreenTime);
|
||||
}
|
||||
}, 8f, log: false);
|
||||
}
|
||||
|
||||
@@ -116,8 +116,6 @@ internal class Tornado : RoleBase
|
||||
|
||||
public static void SpawnTornado(PlayerControl pc)
|
||||
{
|
||||
if (pc == null) return;
|
||||
|
||||
(Vector2 Location, string RoomName) info = pc.GetPositionInfo();
|
||||
long now = TimeStamp;
|
||||
Tornados.TryAdd(info, now);
|
||||
@@ -127,27 +125,27 @@ internal class Tornado : RoleBase
|
||||
|
||||
public override void OnCheckPlayerPosition(PlayerControl pc)
|
||||
{
|
||||
if (!IsEnable || !GameStates.IsInTask || Tornados.Count == 0 || pc == null) return;
|
||||
if (!IsEnable || !GameStates.IsInTask || Tornados.Count == 0) return;
|
||||
|
||||
long now = TimeStamp;
|
||||
|
||||
if (!pc.Is(CustomRoles.Tornado))
|
||||
{
|
||||
var Random = IRandom.Instance;
|
||||
string NotifyString = GetString("TeleportedByTornado");
|
||||
var random = IRandom.Instance;
|
||||
string notifyString = GetString("TeleportedByTornado");
|
||||
float tornadoRange = TornadoRange.GetFloat();
|
||||
int tornadoDuration = TornadoDuration.GetInt();
|
||||
|
||||
foreach (KeyValuePair<(Vector2 Location, string RoomName), long> tornado in Tornados)
|
||||
foreach (KeyValuePair<(Vector2 Location, string RoomName), long> tornado in Tornados.ToArray())
|
||||
{
|
||||
if (FastVector2.DistanceWithinRange(tornado.Key.Location, pc.Pos(), tornadoRange))
|
||||
{
|
||||
if (!CanUseMap || Random.Next(0, 100) < 50)
|
||||
if (!CanUseMap || random.Next(0, 100) < 50)
|
||||
pc.TPToRandomVent();
|
||||
else
|
||||
Map.RandomTeleport(pc);
|
||||
|
||||
pc.Notify(NotifyString);
|
||||
pc.Notify(notifyString);
|
||||
}
|
||||
|
||||
if (tornado.Value + tornadoDuration < now)
|
||||
|
||||
@@ -120,7 +120,7 @@ public class Altruist : RoleBase
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!ReviveTargetsKillerGetsArrow.GetBool()) return;
|
||||
if (!On || !ReviveTargetsKillerGetsArrow.GetBool()) return;
|
||||
|
||||
foreach (PlayerControl pc in Main.EnumeratePlayerControls())
|
||||
{
|
||||
|
||||
@@ -138,7 +138,7 @@ internal class Necromancer : RoleBase
|
||||
{
|
||||
if (!GameStates.IsInTask || ExileController.Instance) return;
|
||||
|
||||
if (!NecromancerPC.IsAlive() && Deathknight.DeathknightPC.IsAlive())
|
||||
if ((NecromancerPC == null || !NecromancerPC.IsAlive()) && (Deathknight.DeathknightPC != null && Deathknight.DeathknightPC.IsAlive()))
|
||||
{
|
||||
Deathknight.DeathknightPC.RpcSetCustomRole(CustomRoles.Necromancer);
|
||||
Deathknight.DeathknightPC = null;
|
||||
|
||||
Reference in new issue
Block a user