|
- using System;
- using System.Reflection;
- using CLre.API.Engines;
- using HarmonyLib;
- using NetworkFramework.Shared;
- using Svelto.ECS;
- using Svelto.Obsolete.ECS;
-
- namespace CLre.API.Characters
- {
- public class Character
- {
- private bool isCurrent;
-
- private readonly CharacterEngine _characterEngine = new CharacterEngine();
-
- private static readonly FieldInfo _AccountUtility__username =
- AccessTools.Field(AccessTools.TypeByName("Game.Utilities.Account.AccountUtility"), "_username");
-
- public string Username
- {
- get
- {
- if (isCurrent)
- {
- return _AccountUtility__username.GetValue(null) as string;
- }
-
- return null;
- }
- }
-
- /// <summary>
- /// When enabled, all user flags for the current user are set to one, so they unlock all client functionality
- /// </summary>
- public bool Superuser
- {
- get => AccountUtility_GetUserFlags_Patch.superuser;
- set => AccountUtility_GetUserFlags_Patch.superuser = value;
- }
-
- public static Character Local()
- {
- Character localChar = new Character();
- localChar.isCurrent = true;
- return localChar;
- }
- }
-
- internal class CharacterEngine : GameObsoleteEnginePostBuild
- {
-
- public override void Ready()
- {
- }
-
- public override IEntitiesDB entitiesDB { get; set; }
- public override IEntityFactory entityFactory { get; set; }
-
- public bool GetGodModeRequested()
- {
- if (entitiesDB == null) return false;
- // TODO cache this conversion operation
- // equivalent to
- // return DEPRECATED_SveltoExtensions.GetFirstNodeDeprecatedMethod<Game.GodMode.ClientGodModeRequestNode>()?.godModeRequestComponent.value
- Type cgmrd = AccessTools.TypeByName("Game.GodMode.ClientGodModeRequestNode");
- Type igmrc = AccessTools.TypeByName("Game.GodMode.IGodModeRequestComponent");
- MethodInfo cgmrdFirstNode = AccessTools.Method(typeof(DEPRECATED_SveltoExtensions), "GetFirstNoteDeprecatedMethod")
- .MakeGenericMethod(cgmrd);
- FieldInfo cgmrdIField = AccessTools.Field(cgmrd, "godModeRequestComponent");
- MethodInfo igmrcReqGodMode = AccessTools.PropertyGetter(igmrc, "requestGodMode");
- // op start
- object firstNode = cgmrdFirstNode.Invoke(null, new []{entitiesDB});
- if (firstNode != null)
- {
- object godModeRequestComponent = cgmrdIField.GetValue(firstNode);
- ObsoleteDispatchOnSet<SerialisedBool> requestGodMode = (ObsoleteDispatchOnSet<SerialisedBool>)igmrcReqGodMode.Invoke(godModeRequestComponent, new object[]{});
- return requestGodMode.value;
- }
- return false;
- }
-
- public void SetGodModeRequested(bool val)
- {
- if (entitiesDB == null) return;
- // TODO cache this conversion operation
- //DEPRECATED_SveltoExtensions.GetFirstNodeDeprecatedMethod<Game.GodMode.ClientGodModeRequestNode>()
- Type cgmrd = AccessTools.TypeByName("Game.GodMode.ClientGodModeRequestNode");
- Type igmrc = AccessTools.TypeByName("Game.GodMode.IGodModeRequestComponent");
- MethodInfo cgmrdFirstNode = AccessTools.Method(typeof(DEPRECATED_SveltoExtensions), "GetFirstNoteDeprecatedMethod")
- .MakeGenericMethod(cgmrd);
- FieldInfo cgmrdIField = AccessTools.Field(cgmrd, "godModeRequestComponent");
- MethodInfo igmrcReqGodMode = AccessTools.PropertyGetter(igmrc, "requestGodMode");
- // operation start
- object firstNode = cgmrdFirstNode.Invoke(null, new []{entitiesDB});
- Utility.Logging.MetaLog($"firstNode is null? {firstNode == null}");
- if (firstNode != null)
- {
- Utility.Logging.MetaLog($"firstNode is type {firstNode.GetType().FullName}");
- object godModeRequestComponent = cgmrdIField.GetValue(firstNode);
- ObsoleteDispatchOnSet<SerialisedBool> requestGodMode = (ObsoleteDispatchOnSet<SerialisedBool>)igmrcReqGodMode.Invoke(godModeRequestComponent, new object[]{});
- requestGodMode.value = val;
- Utility.Logging.MetaLog($"SetGodModeRequested completed successfully");
- }
- }
- }
- }
|