mirror of
https://github.com/All-Of-Us-Mods/MiraAPI.git
synced 2026-10-20 01:46:15 +00:00
networking modifiers
This commit is contained in:
1 parent
9b173a4298
commit
a9ff1c7f63
3 files changed
+66
-12
No files matched your search
@@ -13,7 +13,7 @@ namespace MiraAPI.Modifiers;
|
||||
[RegisterInIl2Cpp]
|
||||
public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr)
|
||||
{
|
||||
public List<BaseModifier> activeModifiers = [];
|
||||
public readonly List<BaseModifier> ActiveModifiers = [];
|
||||
|
||||
public PlayerControl player;
|
||||
|
||||
@@ -24,7 +24,7 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr)
|
||||
|
||||
public void Update()
|
||||
{
|
||||
foreach (var modifier in activeModifiers)
|
||||
foreach (var modifier in ActiveModifiers)
|
||||
{
|
||||
modifier.Update();
|
||||
}
|
||||
@@ -40,7 +40,7 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr)
|
||||
|
||||
var modifierComponent = target.GetModifierComponent();
|
||||
|
||||
var modifier = modifierComponent.activeModifiers.Find(x => x.GetType() == type);
|
||||
var modifier = modifierComponent.ActiveModifiers.Find(x => x.GetType() == type);
|
||||
|
||||
if (modifier is null)
|
||||
{
|
||||
@@ -49,7 +49,7 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr)
|
||||
}
|
||||
|
||||
modifier.OnDeactivate();
|
||||
modifierComponent.activeModifiers.Remove(modifier);
|
||||
modifierComponent.ActiveModifiers.Remove(modifier);
|
||||
}
|
||||
|
||||
public static void AddModifier(PlayerControl target, uint modifierId)
|
||||
@@ -70,11 +70,11 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr)
|
||||
return;
|
||||
}
|
||||
|
||||
modifierComponent.activeModifiers.Add(modifier);
|
||||
modifierComponent.ActiveModifiers.Add(modifier);
|
||||
modifier.Player = modifierComponent.player;
|
||||
modifier.OnActivate();
|
||||
|
||||
if (modifier is TimedModifier timer && timer.AutoStart && target.AmOwner)
|
||||
if (modifier is TimedModifier { AutoStart: true } timer && target.AmOwner)
|
||||
{
|
||||
timer.StartTimer();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using MiraAPI.Networking;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using MiraAPI.Utilities;
|
||||
using Reactor.Networking.Rpc;
|
||||
|
||||
namespace MiraAPI.Modifiers;
|
||||
|
||||
@@ -30,18 +32,68 @@ public static class ModifierManager
|
||||
|
||||
public static void SyncAllModifiers(int targetId = -1)
|
||||
{
|
||||
|
||||
var data = new List<NetData>();
|
||||
|
||||
if (targetId == -1)
|
||||
{
|
||||
foreach (var player in GameData.Instance.AllPlayers)
|
||||
{
|
||||
data.Add(GetPlayerModifiers(player.Object));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var player = GameData.Instance.GetPlayerById((byte)targetId).Object;
|
||||
|
||||
data.Add(GetPlayerModifiers(player));
|
||||
}
|
||||
|
||||
|
||||
Rpc<SyncModifiersRpc>.Instance.Send(PlayerControl.LocalPlayer, data.ToArray(), true);
|
||||
}
|
||||
|
||||
|
||||
public static void HandleSyncModifiers(NetData[] data)
|
||||
{
|
||||
foreach (var netData in data)
|
||||
{
|
||||
PlayerControl plr = GameData.Instance.GetPlayerById((byte)netData.Id).Object;
|
||||
foreach (var id in netData.Data)
|
||||
var ids = new uint[netData.Data.Length / 4];
|
||||
Buffer.BlockCopy(netData.Data, 0, ids, 0, netData.Data.Length);
|
||||
|
||||
var plr = GameData.Instance.GetPlayerById((byte)netData.Id).Object;
|
||||
var modifierComponent = plr.GetComponent<ModifierComponent>();
|
||||
|
||||
if (!modifierComponent)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach (var modifier in modifierComponent.ActiveModifiers)
|
||||
{
|
||||
modifier.OnDeactivate();
|
||||
}
|
||||
modifierComponent.ActiveModifiers.Clear();
|
||||
|
||||
foreach (var id in ids)
|
||||
{
|
||||
ModifierComponent.AddModifier(plr, id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static NetData GetPlayerModifiers(PlayerControl player)
|
||||
{
|
||||
var bytes = new List<byte>();
|
||||
var modifierComponent = player.GetComponent<ModifierComponent>();
|
||||
if (!modifierComponent)
|
||||
{
|
||||
return new NetData(player.PlayerId, []);
|
||||
}
|
||||
|
||||
foreach (var modifier in modifierComponent.ActiveModifiers)
|
||||
{
|
||||
bytes.AddRange(BitConverter.GetBytes(TypeToIdModifiers[modifier.GetType()]));
|
||||
}
|
||||
|
||||
return new NetData(player.PlayerId, bytes.ToArray());
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,12 @@
|
||||
using MiraAPI.GameOptions;
|
||||
using System;
|
||||
using MiraAPI.GameOptions;
|
||||
using MiraAPI.Modifiers;
|
||||
using MiraAPI.Roles;
|
||||
using Reactor.Utilities;
|
||||
using Reactor.Utilities.Extensions;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace MiraAPI.Utilities;
|
||||
|
||||
@@ -22,7 +24,7 @@ public static class Extensions
|
||||
|
||||
public static bool HasModifier<T>(this PlayerControl player) where T : BaseModifier
|
||||
{
|
||||
return player.GetModifierComponent().activeModifiers.Exists(x => x is T);
|
||||
return player.GetModifierComponent().ActiveModifiers.Exists(x => x is T);
|
||||
}
|
||||
|
||||
public static void AddModifier<T>(this PlayerControl player) where T : BaseModifier
|
||||
|
||||
Reference in new issue
Block a user