Unofficial CardLife revival project, pronounced like "celery"
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
4.3KB

  1. using System;
  2. using System.Reflection;
  3. using CLre.API.Engines;
  4. using HarmonyLib;
  5. using NetworkFramework.Shared;
  6. using Svelto.ECS;
  7. using Svelto.Obsolete.ECS;
  8. namespace CLre.API.Characters
  9. {
  10. public class Character
  11. {
  12. private bool isCurrent;
  13. private readonly CharacterEngine _characterEngine = new CharacterEngine();
  14. private static readonly FieldInfo _AccountUtility__username =
  15. AccessTools.Field(AccessTools.TypeByName("Game.Utilities.Account.AccountUtility"), "_username");
  16. public string Username
  17. {
  18. get
  19. {
  20. if (isCurrent)
  21. {
  22. return _AccountUtility__username.GetValue(null) as string;
  23. }
  24. return null;
  25. }
  26. }
  27. /// <summary>
  28. /// When enabled, all user flags for the current user are set to one, so they unlock all client functionality
  29. /// </summary>
  30. public bool Superuser
  31. {
  32. get => AccountUtility_GetUserFlags_Patch.superuser;
  33. set => AccountUtility_GetUserFlags_Patch.superuser = value;
  34. }
  35. public static Character Local()
  36. {
  37. Character localChar = new Character();
  38. localChar.isCurrent = true;
  39. return localChar;
  40. }
  41. }
  42. internal class CharacterEngine : GameObsoleteEnginePostBuild
  43. {
  44. public override void Ready()
  45. {
  46. }
  47. public bool GetGodModeRequested()
  48. {
  49. if (entitiesDB == null) return false;
  50. // TODO cache this conversion operation
  51. // equivalent to
  52. // return DEPRECATED_SveltoExtensions.GetFirstNodeDeprecatedMethod<Game.GodMode.ClientGodModeRequestNode>()?.godModeRequestComponent.value
  53. Type cgmrd = AccessTools.TypeByName("Game.GodMode.ClientGodModeRequestNode");
  54. Type igmrc = AccessTools.TypeByName("Game.GodMode.IGodModeRequestComponent");
  55. MethodInfo cgmrdFirstNode = AccessTools.Method(typeof(DEPRECATED_SveltoExtensions), "GetFirstNoteDeprecatedMethod")
  56. .MakeGenericMethod(cgmrd);
  57. FieldInfo cgmrdIField = AccessTools.Field(cgmrd, "godModeRequestComponent");
  58. MethodInfo igmrcReqGodMode = AccessTools.PropertyGetter(igmrc, "requestGodMode");
  59. // op start
  60. object firstNode = cgmrdFirstNode.Invoke(null, new []{entitiesDB});
  61. if (firstNode != null)
  62. {
  63. object godModeRequestComponent = cgmrdIField.GetValue(firstNode);
  64. ObsoleteDispatchOnSet<SerialisedBool> requestGodMode = (ObsoleteDispatchOnSet<SerialisedBool>)igmrcReqGodMode.Invoke(godModeRequestComponent, new object[]{});
  65. return requestGodMode.value;
  66. }
  67. return false;
  68. }
  69. public void SetGodModeRequested(bool val)
  70. {
  71. if (entitiesDB == null) return;
  72. // TODO cache this conversion operation
  73. //DEPRECATED_SveltoExtensions.GetFirstNodeDeprecatedMethod<Game.GodMode.ClientGodModeRequestNode>()
  74. Type cgmrd = AccessTools.TypeByName("Game.GodMode.ClientGodModeRequestNode");
  75. Type igmrc = AccessTools.TypeByName("Game.GodMode.IGodModeRequestComponent");
  76. MethodInfo cgmrdFirstNode = AccessTools.Method(typeof(DEPRECATED_SveltoExtensions), "GetFirstNoteDeprecatedMethod")
  77. .MakeGenericMethod(cgmrd);
  78. FieldInfo cgmrdIField = AccessTools.Field(cgmrd, "godModeRequestComponent");
  79. MethodInfo igmrcReqGodMode = AccessTools.PropertyGetter(igmrc, "requestGodMode");
  80. // operation start
  81. object firstNode = cgmrdFirstNode.Invoke(null, new []{entitiesDB});
  82. Utility.Logging.MetaLog($"firstNode is null? {firstNode == null}");
  83. if (firstNode != null)
  84. {
  85. Utility.Logging.MetaLog($"firstNode is type {firstNode.GetType().FullName}");
  86. object godModeRequestComponent = cgmrdIField.GetValue(firstNode);
  87. ObsoleteDispatchOnSet<SerialisedBool> requestGodMode = (ObsoleteDispatchOnSet<SerialisedBool>)igmrcReqGodMode.Invoke(godModeRequestComponent, new object[]{});
  88. requestGodMode.value = val;
  89. Utility.Logging.MetaLog($"SetGodModeRequested completed successfully");
  90. }
  91. }
  92. }
  93. }