note for tomorrow: why is OptionBehaviour null on clients?

This commit is contained in:
XtraCube committed 2024-07-13 22:57:04 -04:00
1 parent eafc0bea44
commit c9ebb9348c
8 files changed
+33 -15

No files matched your search

@@ -79,6 +79,7 @@ namespace MiraAPI.GameOptions
{
if (ModdedOptions.TryGetValue(netData.Id, out var option))
{
Logger<MiraApiPlugin>.Error("Handling option " + option.Title);
option.HandleNetData(netData.Data);
}
}
@@ -60,6 +60,7 @@ namespace MiraAPI.GameOptions.OptionTypes
public override void OnValueChanged(int newValue)
{
DestroyableSingleton<HudManager>.Instance.Notifier.AddSettingsChangeMessage(StringName, OptionBehaviour.GetValueString(newValue), false);
if (OptionBehaviour is null) return;
var opt = OptionBehaviour as StringOption;
@@ -67,8 +68,6 @@ namespace MiraAPI.GameOptions.OptionTypes
{
opt.Value = newValue;
}
DestroyableSingleton<HudManager>.Instance.Notifier.AddSettingsChangeMessage(StringName, OptionBehaviour.GetValueString(Value), false);
}
}
}
@@ -72,14 +72,13 @@ namespace MiraAPI.GameOptions.OptionTypes
Value = Mathf.Clamp(newValue, Min, Max);
if (OptionBehaviour is null) return;
DestroyableSingleton<HudManager>.Instance.Notifier.AddSettingsChangeMessage(StringName, OptionBehaviour.GetValueString(newValue), false);
var opt = OptionBehaviour as NumberOption;
if (opt)
{
opt.Value = newValue;
}
DestroyableSingleton<HudManager>.Instance.Notifier.AddSettingsChangeMessage(StringName, OptionBehaviour.GetValueString(Value), false);
}
}
}
@@ -3,6 +3,7 @@ using MiraAPI.Roles;
using Reactor.Localization.Utilities;
using System;
using MiraAPI.Networking;
using Reactor.Networking.Rpc;
using Reactor.Utilities;
using UnityEngine;
@@ -58,10 +59,16 @@ namespace MiraAPI.GameOptions.OptionTypes
ChangedEvent.Invoke(Value);
}
if (AmongUsClient.Instance.AmHost)
{
Rpc<SyncOptionsRpc>.Instance.Send(PlayerControl.LocalPlayer, [GetNetData()], true);
}
OnValueChanged(newValue);
}
public abstract NetData GetNetData();
public abstract void HandleNetData(byte[] data);
public abstract void OnValueChanged(T newValue);
@@ -56,6 +56,7 @@ namespace MiraAPI.GameOptions.OptionTypes
public override void OnValueChanged(int newValue)
{
DestroyableSingleton<HudManager>.Instance.Notifier.AddSettingsChangeMessage(StringName, OptionBehaviour.GetValueString(newValue), false);
if (OptionBehaviour is null) return;
var opt = OptionBehaviour as StringOption;
@@ -63,8 +64,6 @@ namespace MiraAPI.GameOptions.OptionTypes
{
opt.Value = newValue;
}
DestroyableSingleton<HudManager>.Instance.Notifier.AddSettingsChangeMessage(StringName, OptionBehaviour.GetValueString(Value), false);
}
}
}
@@ -49,6 +49,7 @@ namespace MiraAPI.GameOptions.OptionTypes
public override void OnValueChanged(bool newValue)
{
DestroyableSingleton<HudManager>.Instance.Notifier.AddSettingsChangeMessage(StringName, newValue ? "On" : "Off", false);
if (OptionBehaviour is null) return;
var toggleOpt = OptionBehaviour as ToggleOption;
@@ -56,8 +57,6 @@ namespace MiraAPI.GameOptions.OptionTypes
{
toggleOpt.CheckMark.enabled = newValue;
}
DestroyableSingleton<HudManager>.Instance.Notifier.AddSettingsChangeMessage(StringName, Value ? "On" : "Off", false);
}
}
}
@@ -5,6 +5,8 @@ using MiraAPI.Utilities.Assets;
using Reactor.Utilities.Extensions;
using System;
using System.Linq;
using MiraAPI.Networking;
using Reactor.Networking.Rpc;
using Reactor.Utilities;
using TMPro;
using UnityEngine;
@@ -79,7 +81,7 @@ namespace MiraAPI.Patches.Options
{
var roleSetting = obj.Cast<RoleOptionSetting>();
var role = roleSetting.Role as ICustomRole;
if (role.HideSettings) return;
if (role is null or { HideSettings: true }) return;
PluginSingleton<MiraApiPlugin>.Instance.Config.TryGetEntry<int>(role.NumConfigDefinition, out var numEntry);
numEntry.Value = roleSetting.RoleMaxCount;
@@ -88,13 +90,13 @@ namespace MiraAPI.Patches.Options
chanceEntry.Value = roleSetting.RoleChance;
roleSetting.UpdateValuesAndText(GameOptionsManager.Instance.CurrentGameOptions.RoleOptions);
DestroyableSingleton<HudManager>.Instance.Notifier.AddRoleSettingsChangeMessage(roleSetting.Role.StringName, roleSetting.RoleMaxCount, roleSetting.RoleChance, roleSetting.Role.TeamType, false);
/* if (AmongUsClient.Instance.AmHost)
{
Rpc<SyncRoleOptionsRpc>.Instance.Send(new SyncRoleOptionsRpc.Data((ushort)roleSetting.Role.Role, numEntry.Value, chanceEntry.Value));
}*/
if (AmongUsClient.Instance.AmHost)
{
Rpc<SyncRoleOptionsRpc>.Instance.Send(PlayerControl.LocalPlayer, [role.GetNetData(roleSetting.Role)], true);
}
GameOptionsManager.Instance.GameHostOptions = GameOptionsManager.Instance.CurrentGameOptions;
return;
}
private static void CreateAdvancedSettings(RolesSettingsMenu __instance, RoleBehaviour role)
+13 -1
View File
@@ -1,8 +1,12 @@
using AmongUs.GameOptions;
using System;
using AmongUs.GameOptions;
using BepInEx.Configuration;
using MiraAPI.Utilities;
using MiraAPI.Utilities.Assets;
using System.Text;
using HarmonyLib;
using MiraAPI.Networking;
using Reactor.Utilities;
using UnityEngine;
namespace MiraAPI.Roles;
@@ -64,4 +68,12 @@ public interface ICustomRole
var taskStringBuilder = Helpers.CreateForRole(this);
return taskStringBuilder;
}
NetData GetNetData(RoleBehaviour roleBehaviour)
{
PluginSingleton<MiraApiPlugin>.Instance.Config.TryGetEntry<int>(NumConfigDefinition, out var numEntry);
PluginSingleton<MiraApiPlugin>.Instance.Config.TryGetEntry<int>(ChanceConfigDefinition, out var chanceEntry);
return new NetData((uint)roleBehaviour.Role, BitConverter.GetBytes(numEntry.Value).AddRangeToArray(BitConverter.GetBytes(chanceEntry.Value)));
}
}