using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using OutwardBasicChatCommands.Events;
using OutwardBasicChatCommands.Events.Publishers;
using OutwardBasicChatCommands.Managers;
using OutwardBasicChatCommands.Utility.Data;
using OutwardBasicChatCommands.Utility.Enemies.Visuals;
using OutwardBasicChatCommands.Utility.Enums;
using OutwardBasicChatCommands.Utility.Helpers;
using OutwardModsCommunicator.EventBus;
using SideLoader;
using UnityEngine;
using UnityEngine.AI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("OutwardBasicChatCommands")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("OutwardBasicChatCommands")]
[assembly: AssemblyCopyright("Copyright © 2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("c5450fe0-edcf-483f-b9ea-4b1ef9d36da7")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace OutwardBasicChatCommands
{
[BepInPlugin("gymmed.basic_chat_commands", "Basic Chat Commands", "0.0.2")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class OBCC : BaseUnityPlugin
{
public const string GUID = "gymmed.basic_chat_commands";
public const string NAME = "Basic Chat Commands";
public const string VERSION = "0.0.2";
public static string prefix = "[Basic-Chat-Command]";
public const string EVENTS_LISTENER_GUID = "gymmed.basic_chat_commands_*";
internal static ManualLogSource Log;
public static ConfigEntry<int> MaxDistanceToStartFollow;
internal void Awake()
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Log = ((BaseUnityPlugin)this).Logger;
LogMessage("Hello world from Basic Chat Commands 0.0.2!");
new Harmony("gymmed.basic_chat_commands").PatchAll();
EventBusPublisher.SendCommands();
}
internal void Update()
{
}
public static void LogMessage(string message)
{
Log.LogMessage((object)(prefix + " " + message));
}
public static void LogStatusMessage(string message, ChatLogStatus status = ChatLogStatus.Info)
{
LogMessage($"[{status}] {message}");
}
public static void LogSL(string message)
{
SL.Log(prefix + " " + message);
}
public static string GetProjectLocation()
{
return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
}
}
}
namespace OutwardBasicChatCommands.Utility.Helpers
{
public static class CharacterHelpers
{
public static Character TryToFindOtherCharacterInLobby(Character mainCharacter, string otherCharName)
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
Character val = null;
foreach (PlayerSystem item in Global.Lobby.PlayersInLobby)
{
val = item.ControlledCharacter;
if ((Object)(object)val != (Object)null && val.UID != mainCharacter.UID && string.Equals(otherCharName, val.Name))
{
return val;
}
}
return null;
}
public static Character TryToFindOtherCharacterInLobby(Character mainCharacter)
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
Character val = null;
foreach (PlayerSystem item in Global.Lobby.PlayersInLobby)
{
val = item.ControlledCharacter;
if ((Object)(object)val != (Object)null && val.UID != mainCharacter.UID)
{
return val;
}
}
return val;
}
public static bool IsCharacterInDistance(Character firstCharacter, Character secondCharacter, float minimumDistance)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = ((Component)firstCharacter).transform.position - ((Component)secondCharacter).transform.position;
float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude;
float num = minimumDistance * minimumDistance;
if (sqrMagnitude > num)
{
return false;
}
return true;
}
public static bool HasManualMovement(Character character)
{
CharacterControl characterControl = character.CharacterControl;
LocalCharacterControl val = (LocalCharacterControl)(object)((characterControl is LocalCharacterControl) ? characterControl : null);
if (val == null)
{
return false;
}
if (((Vector2)(ref ((CharacterControl)val).m_moveInput)).sqrMagnitude > 0.01f)
{
return true;
}
return false;
}
}
public static class ChatHelpers
{
public static void SendChatLog(ChatPanel panel, string message, ChatLogStatus status = ChatLogStatus.Info)
{
panel.ChatMessageReceived("System", ChatLogStatusHelper.GetChatLogText(message, status));
}
public static void SendChatLog(Character character, string message, ChatLogStatus status = ChatLogStatus.Info)
{
CharacterUI characterUI = character.CharacterUI;
if ((Object)(object)((characterUI != null) ? characterUI.ChatPanel : null) == (Object)null)
{
OBCC.LogMessage("ChatHelpers@SendChatLog provided character with missing chatPanel!");
}
else
{
SendChatLog(character.CharacterUI.ChatPanel, message, status);
}
}
public static void SendChatOrLog(Character character, string message, ChatLogStatus status = ChatLogStatus.Info)
{
CharacterUI characterUI = character.CharacterUI;
if ((Object)(object)((characterUI != null) ? characterUI.ChatPanel : null) == (Object)null)
{
OBCC.LogStatusMessage(message, status);
}
else
{
SendChatLog(character.CharacterUI.ChatPanel, message, status);
}
}
}
public static class EnchantmentRecipesHelpers
{
public static HashSet<EnchantmentRecipeItem> GetAllEnchantmentRecipeItems()
{
HashSet<EnchantmentRecipeItem> hashSet = new HashSet<EnchantmentRecipeItem>();
foreach (KeyValuePair<string, Item> iTEM_PREFAB in ResourcesPrefabManager.ITEM_PREFABS)
{
Item value = iTEM_PREFAB.Value;
EnchantmentRecipeItem val = (EnchantmentRecipeItem)(object)((value is EnchantmentRecipeItem) ? value : null);
if (val != null)
{
hashSet.Add(val);
}
}
return hashSet;
}
public static void PrintBrokenEnchantmentRecipeItems(ChatPanel panel, IEnumerable<EnchantmentRecipeItem> enchantmentItems)
{
if ((Object)(object)panel == (Object)null)
{
OBCC.LogMessage("EnchantmentCommandsPublisher@PrintBrokenEnchantmentRecipeItems Tried to use missing chatPanel.");
return;
}
ChatHelpers.SendChatLog(panel, "EnchantmentRecipeItems");
ChatHelpers.SendChatLog(panel, "Name RecipesCount ID!", ChatLogStatus.Success);
foreach (EnchantmentRecipeItem enchantmentItem in enchantmentItems)
{
if (enchantmentItem.Recipes.Count() < 1)
{
ChatHelpers.SendChatLog(panel, $"{((Item)enchantmentItem).GetLocalizedName()} {enchantmentItem.Recipes.Count()} {((Item)enchantmentItem).ItemID}!", ChatLogStatus.Warning);
}
}
}
public static void PrintBrokenEnchantmentRecipeItemsCount(ChatPanel panel, IEnumerable<EnchantmentRecipeItem> enchantmentItems)
{
if ((Object)(object)panel == (Object)null)
{
OBCC.LogMessage("EnchantmentCommandsPublisher@PrintBrokenEnchantmentRecipeItemsCount Tried to use missing chatPanel.");
return;
}
int num = 0;
foreach (EnchantmentRecipeItem enchantmentItem in enchantmentItems)
{
if (enchantmentItem.Recipes.Count() < 1)
{
num++;
}
}
ChatHelpers.SendChatLog(panel, $"Total {num} broken EnchantmentRecipeItems");
}
public static HashSet<EnchantmentRecipe> GetBrokenEnchantmentRecipes()
{
HashSet<EnchantmentRecipe> hashSet = new HashSet<EnchantmentRecipe>();
foreach (EnchantmentRecipe enchantmentRecipe in RecipeManager.Instance.GetEnchantmentRecipes())
{
if ((Object)(object)ResourcesPrefabManager.Instance.GetEnchantmentPrefab(enchantmentRecipe.ResultID) == (Object)null)
{
hashSet.Add(enchantmentRecipe);
}
}
return hashSet;
}
public static void PrintBrokenEnchantmentRecipes(ChatPanel panel, IEnumerable<EnchantmentRecipe> enchantmentRecipes)
{
if ((Object)(object)panel == (Object)null)
{
OBCC.LogMessage("EnchantmentCommandsPublisher@PrintBrokenEnchantmentRecipes Tried to use missing chatPanel.");
return;
}
ChatHelpers.SendChatLog(panel, "EnchantmentRecipes");
ChatHelpers.SendChatLog(panel, "Name ID!", ChatLogStatus.Success);
foreach (EnchantmentRecipe enchantmentRecipe in enchantmentRecipes)
{
ChatHelpers.SendChatLog(panel, $"{((Object)enchantmentRecipe).name} {enchantmentRecipe.ResultID}!", ChatLogStatus.Warning);
}
}
public static void PrintEnchantmentRecipeItems(ChatPanel panel, IEnumerable<EnchantmentRecipeItem> enchantmentItems)
{
if ((Object)(object)panel == (Object)null)
{
OBCC.LogMessage("EnchantmentCommandsPublisher@PrintEnchantmentRecipeItems Tried to use missing chatPanel.");
return;
}
ChatHelpers.SendChatLog(panel, "Name RecipesCount ID!");
foreach (EnchantmentRecipeItem enchantmentItem in enchantmentItems)
{
ChatHelpers.SendChatLog(panel, $"{((Item)enchantmentItem).GetLocalizedName()} {enchantmentItem.Recipes.Count()} {((Item)enchantmentItem).ItemID}!");
}
}
public static void PrintEnchantmentRecipes(ChatPanel panel, IEnumerable<EnchantmentRecipe> enchantmentRecipes)
{
if ((Object)(object)panel == (Object)null)
{
OBCC.LogMessage("EnchantmentCommandsPublisher@PrintEnchantmentRecipes Tried to use missing chatPanel.");
return;
}
ChatHelpers.SendChatLog(panel, "Name RecipeID | Enchantment EnchantmentID!");
foreach (EnchantmentRecipe enchantmentRecipe in enchantmentRecipes)
{
Enchantment enchantmentPrefab = ResourcesPrefabManager.Instance.GetEnchantmentPrefab(enchantmentRecipe.ResultID);
if ((Object)(object)enchantmentPrefab != (Object)null)
{
ChatHelpers.SendChatLog(panel, $"{((Object)enchantmentRecipe).name} {enchantmentRecipe.RecipeID} | {enchantmentPrefab.Name} {enchantmentRecipe.ResultID}!");
}
else
{
ChatHelpers.SendChatLog(panel, $"{((Object)enchantmentRecipe).name} {enchantmentRecipe.RecipeID} | null {enchantmentRecipe.ResultID}!");
}
}
}
public static void PrintEnchantments(ChatPanel panel, IEnumerable<Enchantment> enchantments)
{
if ((Object)(object)panel == (Object)null)
{
OBCC.LogMessage("EnchantmentCommandsPublisher@PrintEnchantments Tried to use missing chatPanel.");
return;
}
ChatHelpers.SendChatLog(panel, "Name ID | Description!");
foreach (Enchantment enchantment in enchantments)
{
if (!string.IsNullOrEmpty(enchantment.Description))
{
ChatHelpers.SendChatLog(panel, $"{enchantment.Name} {((EffectPreset)enchantment).PresetID} | {enchantment.Description}!");
}
else
{
ChatHelpers.SendChatLog(panel, $"{enchantment.Name} {((EffectPreset)enchantment).PresetID}!");
}
}
}
}
public static class SkillsHelpers
{
public static void LogSkillsData(ChatPanel panel, SkillTypes category)
{
switch (category)
{
case SkillTypes.Active:
{
List<Skill> activeSkills = GetActiveSkills();
PrintSkillsAsData(panel, activeSkills);
ChatHelpers.SendChatLog(panel, $"Total {activeSkills.Count()} active skills!", ChatLogStatus.Success);
return;
}
case SkillTypes.Passive:
{
List<Skill> passiveSkills = GetPassiveSkills();
PrintSkillsAsData(panel, passiveSkills);
ChatHelpers.SendChatLog(panel, $"Total {passiveSkills.Count()} passive skills!", ChatLogStatus.Success);
return;
}
case SkillTypes.Cosmetic:
{
List<Skill> cosmeticSkills = GetCosmeticSkills();
PrintSkillsAsData(panel, cosmeticSkills);
ChatHelpers.SendChatLog(panel, $"Total {cosmeticSkills.Count()} cosmetic skills!", ChatLogStatus.Success);
return;
}
}
SkillsData skillsData = GetSkillsData();
int num = skillsData.ActiveSkills.Count();
int num2 = skillsData.PassiveSkills.Count();
int num3 = skillsData.CosmeticSkills.Count();
ChatHelpers.SendChatLog(panel, $"Total {num} active skills!", ChatLogStatus.Success);
ChatHelpers.SendChatLog(panel, $"Total {num2} passive skills!", ChatLogStatus.Success);
ChatHelpers.SendChatLog(panel, $"Total {num3} cosmetic skills!", ChatLogStatus.Success);
ChatHelpers.SendChatLog(panel, $"Total {num + num2 + num3} skills!", ChatLogStatus.Success);
}
public static void PrintSkillsAsData(ChatPanel panel, IEnumerable<Skill> skills)
{
foreach (Skill skill in skills)
{
ChatHelpers.SendChatLog(panel, $"{((Item)skill).Name} {((Item)skill).ItemID}!");
}
}
public static SkillsData GetSkillsData()
{
List<Skill> list = new List<Skill>();
List<Skill> list2 = new List<Skill>();
List<Skill> list3 = new List<Skill>();
foreach (KeyValuePair<string, Item> iTEM_PREFAB in ResourcesPrefabManager.ITEM_PREFABS)
{
Item value = iTEM_PREFAB.Value;
Skill val = (Skill)(object)((value is Skill) ? value : null);
if (val != null)
{
if (val.IsPassive)
{
list2.Add(val);
}
else if (val.IsCosmetic)
{
list3.Add(val);
}
else
{
list.Add(val);
}
}
}
return new SkillsData(list, list2, list3);
}
public static List<Skill> GetActiveSkills()
{
List<Skill> list = new List<Skill>();
foreach (KeyValuePair<string, Item> iTEM_PREFAB in ResourcesPrefabManager.ITEM_PREFABS)
{
Item value = iTEM_PREFAB.Value;
Skill val = (Skill)(object)((value is Skill) ? value : null);
if (val != null && !val.IsPassive && !val.IsCosmetic)
{
list.Add(val);
}
}
return list;
}
public static List<Skill> GetPassiveSkills()
{
List<Skill> list = new List<Skill>();
foreach (KeyValuePair<string, Item> iTEM_PREFAB in ResourcesPrefabManager.ITEM_PREFABS)
{
Item value = iTEM_PREFAB.Value;
Skill val = (Skill)(object)((value is Skill) ? value : null);
if (val != null && val.IsPassive)
{
list.Add(val);
}
}
return list;
}
public static List<Skill> GetCosmeticSkills()
{
List<Skill> list = new List<Skill>();
foreach (KeyValuePair<string, Item> iTEM_PREFAB in ResourcesPrefabManager.ITEM_PREFABS)
{
Item value = iTEM_PREFAB.Value;
Skill val = (Skill)(object)((value is Skill) ? value : null);
if (val != null && val.IsCosmetic)
{
list.Add(val);
}
}
return list;
}
}
public static class TimeHelpers
{
public static void SetTime(int hours, int minutes)
{
minutes = Mathf.Clamp(minutes, 0, 59);
hours = Mathf.Clamp(hours, 0, 23);
float num = (float)hours + (float)minutes / 60f;
float timeJump = num - TOD_Sky.Instance.Cycle.Hour;
TOD_Sky.Instance.Cycle.Hour = num;
EnvironmentConditions.Instance.m_timeJump = timeJump;
EnvironmentConditions.Instance.m_dayReset = true;
}
public static void SetMinutes(int minutes)
{
minutes = Mathf.Clamp(minutes, 0, 59);
float hour = TOD_Sky.Instance.Cycle.Hour;
float num = (float)Mathf.FloorToInt(hour) + (float)minutes / 60f;
float timeJump = num - hour;
TOD_Sky.Instance.Cycle.Hour = num;
EnvironmentConditions.Instance.m_timeJump = timeJump;
EnvironmentConditions.Instance.m_dayReset = true;
}
}
}
namespace OutwardBasicChatCommands.Utility.Enums
{
public enum ChatCommandsManagerParams
{
CommandName,
CommandParameters,
CommandAction,
IsCheatCommand,
CommandDescription,
CommandRequiresDebugMode
}
public static class ChatCommandsManagerParamsHelper
{
private static readonly Dictionary<ChatCommandsManagerParams, (string key, Type type)> _registry = new Dictionary<ChatCommandsManagerParams, (string, Type)>
{
[ChatCommandsManagerParams.CommandName] = ("command", typeof(string)),
[ChatCommandsManagerParams.CommandParameters] = ("parameters", typeof(Dictionary<string, (string, string)>)),
[ChatCommandsManagerParams.CommandAction] = ("function", typeof(Action<Character, Dictionary<string, string>>)),
[ChatCommandsManagerParams.IsCheatCommand] = ("isCheatCommand", typeof(bool)),
[ChatCommandsManagerParams.CommandDescription] = ("description", typeof(string)),
[ChatCommandsManagerParams.CommandRequiresDebugMode] = ("debugMode", typeof(bool))
};
public static (string key, Type type) Get(ChatCommandsManagerParams param)
{
return _registry[param];
}
}
public enum ChatLogStatus
{
Info,
Success,
Warning,
Error
}
public static class ChatLogStatusHelper
{
public static string GetChatLogText(string message, ChatLogStatus status = ChatLogStatus.Info)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
return status switch
{
ChatLogStatus.Success => Global.SetTextColor(message, Global.LIGHT_GREEN),
ChatLogStatus.Warning => Global.SetTextColor(message, Global.LIGHT_ORANGE),
ChatLogStatus.Error => "<color=#" + UnityEngineExtensions.ToHex(Global.LIGHT_RED) + ">" + message + "</color>",
_ => message,
};
}
}
public enum Races
{
Auraian,
Tramon,
Kazite
}
public static class RacesHelper
{
public static readonly Dictionary<Races, RaceData> races = new Dictionary<Races, RaceData>
{
{
Races.Auraian,
new RaceData(new GenderData(15, 11, 8), new GenderData(15, 11, 6))
},
{
Races.Tramon,
new RaceData(new GenderData(15, 11, 6), new GenderData(15, 11, 6))
},
{
Races.Kazite,
new RaceData(new GenderData(15, 11, 7), new GenderData(15, 11, 6))
}
};
}
public enum SkillTypes
{
All,
Active,
Passive,
Cosmetic
}
}
namespace OutwardBasicChatCommands.Utility.Enemies.Visuals
{
public struct GenderData
{
public int TotalHairStyles;
public int TotalHairColors;
public int TotalHeadVariations;
public GenderData(int totalHairStyles = 0, int totalHairColors = 0, int totalHeadVariations = 0)
{
TotalHairStyles = totalHairStyles;
TotalHairColors = totalHairColors;
TotalHeadVariations = totalHeadVariations;
}
}
public struct RaceData
{
public GenderData Male;
public GenderData Female;
public RaceData(GenderData male, GenderData female)
{
Male = male;
Female = female;
}
public GenderData GetGender(Gender gender)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
if ((int)gender == 0)
{
return Male;
}
return Female;
}
}
}
namespace OutwardBasicChatCommands.Utility.Data
{
public class FollowerData
{
private int _cornerIndex;
private float _lastPathTime;
private LocalCharacterControl _localControl;
private bool _isFollowing;
public static float InitialMaxDistance = 20f;
private const float StopFollowingDistance = 5f;
private const float PathRecalcInterval = 0.5f;
private const float CornerReachDistance = 0.6f;
private const float RotationSpeed = 7f;
public Character Follower { get; }
public Character CharacterToFollow { get; set; }
public NavMeshPath NavMeshPath { get; }
public bool IsFollowing
{
get
{
return _isFollowing;
}
set
{
_isFollowing = value;
}
}
public FollowerData(Character follower, Character characterToFollow)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Expected O, but got Unknown
Follower = follower;
CharacterToFollow = characterToFollow;
NavMeshPath = new NavMeshPath();
ref LocalCharacterControl localControl = ref _localControl;
CharacterControl characterControl = follower.CharacterControl;
localControl = (LocalCharacterControl)(object)((characterControl is LocalCharacterControl) ? characterControl : null);
}
public bool StartFollow()
{
if ((Object)(object)Follower == (Object)null || (Object)(object)CharacterToFollow == (Object)null)
{
OBCC.LogMessage("Follower is null or you are trying to follow null character.");
return false;
}
if (!CharacterHelpers.IsCharacterInDistance(Follower, CharacterToFollow, InitialMaxDistance))
{
ChatHelpers.SendChatLog(Follower, "Target is too far away to start following.", ChatLogStatus.Warning);
return false;
}
CharacterControl characterControl = Follower.CharacterControl;
LocalCharacterControl val = (LocalCharacterControl)(object)((characterControl is LocalCharacterControl) ? characterControl : null);
if (val == null)
{
ChatHelpers.SendChatLog(Follower, "Auto-follow only works on local characters.", ChatLogStatus.Warning);
return false;
}
_localControl = val;
IsFollowing = true;
_cornerIndex = 0;
RecalculatePath();
ChatHelpers.SendChatLog(Follower, "Now following " + CharacterToFollow.Name + ".");
return true;
}
public void Update()
{
if (IsFollowing && !((Object)(object)_localControl == (Object)null) && !((Object)(object)CharacterToFollow == (Object)null))
{
if ((Object)(object)Follower == (Object)null || Follower.IsDead || PlayerProvidedMovementInput())
{
StopFollow();
}
else if (((CharacterControl)_localControl).InputLocked)
{
StopFollow();
}
else
{
ApplyFollowMovement();
}
}
}
private void RecalculatePath()
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
NavMesh.CalculatePath(((Component)Follower).transform.position, ((Component)CharacterToFollow).transform.position, -1, NavMeshPath);
_cornerIndex = 0;
}
private void ApplyFollowMovement()
{
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
if (NavMeshPath.corners == null || NavMeshPath.corners.Length == 0)
{
ChatHelpers.SendChatLog(Follower, "Couldn't find navigation path! Recalculating.", ChatLogStatus.Warning);
RecalculatePath();
return;
}
if (Vector3.Distance(((Component)Follower).transform.position, ((Component)CharacterToFollow).transform.position) <= 5f)
{
((CharacterControl)_localControl).m_moveInput = Vector2.zero;
_localControl.m_modifMoveInput = Vector2.op_Implicit(Vector2.zero);
if (((CharacterControl)_localControl).m_character.Sprinting)
{
((CharacterControl)_localControl).m_character.SprintInput(false);
}
return;
}
if (Time.time - _lastPathTime > 0.5f)
{
RecalculatePath();
_lastPathTime = Time.time;
}
RotateTowardsPath();
MoveTowardsPath();
}
private void RotateTowardsPath()
{
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
if (NavMeshPath.corners != null && NavMeshPath.corners.Length != 0)
{
while (_cornerIndex < NavMeshPath.corners.Length - 1 && Vector3.Distance(((Component)Follower).transform.position, NavMeshPath.corners[_cornerIndex]) < 0.6f)
{
_cornerIndex++;
}
Vector3 val = NavMeshPath.corners[_cornerIndex] - ((Component)Follower).transform.position;
val.y = 0f;
if (!(((Vector3)(ref val)).sqrMagnitude < 0.001f))
{
Quaternion val2 = Quaternion.LookRotation(((Vector3)(ref val)).normalized, Vector3.up);
((Component)Follower).transform.rotation = Quaternion.Slerp(((Component)Follower).transform.rotation, val2, 7f * Time.deltaTime);
}
}
}
private void MoveTowardsPath()
{
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_0155: Unknown result type (might be due to invalid IL or missing references)
//IL_0159: Unknown result type (might be due to invalid IL or missing references)
//IL_015e: Unknown result type (might be due to invalid IL or missing references)
//IL_0163: Unknown result type (might be due to invalid IL or missing references)
//IL_016e: Unknown result type (might be due to invalid IL or missing references)
//IL_0170: Unknown result type (might be due to invalid IL or missing references)
if (NavMeshPath.corners != null && _cornerIndex < NavMeshPath.corners.Length)
{
Vector3 val = NavMeshPath.corners[_cornerIndex] - ((Component)((CharacterControl)_localControl).m_character).transform.position;
Vector3 normalized = ((Vector3)(ref val)).normalized;
normalized.y = 0f;
Vector3 forward = ((Component)((CharacterControl)_localControl).m_character.CharacterCamera).transform.forward;
Vector3 right = ((Component)((CharacterControl)_localControl).m_character.CharacterCamera).transform.right;
forward.y = (right.y = 0f);
((Vector3)(ref forward)).Normalize();
((Vector3)(ref right)).Normalize();
float num = Vector3.Dot(normalized, forward);
float num2 = Vector3.Dot(normalized, right);
Vector2 val2 = default(Vector2);
((Vector2)(ref val2))..ctor(num2, num);
if (((Vector2)(ref val2)).magnitude > 1f)
{
((Vector2)(ref val2)).Normalize();
}
float num3 = ((CharacterControl)_localControl).m_character.Speed * 1.75f;
if (((CharacterControl)_localControl).m_character.IsSuperSpeedActive)
{
num3 *= 4f;
}
num3 *= _localControl.MovementMultiplier * ((CharacterControl)_localControl).m_character.Stats.MovementSpeed;
_localControl.m_modifMoveInput = Vector2.op_Implicit(val2 * num3);
((CharacterControl)_localControl).m_moveInput = val2;
if (!((CharacterControl)_localControl).m_character.Sprinting && ((CharacterControl)_localControl).m_character.Stats.CanSprint())
{
((CharacterControl)_localControl).m_character.SprintInput(true);
}
_localControl.m_autoRun = false;
}
}
private void StopFollow()
{
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
IsFollowing = false;
if ((Object)(object)_localControl != (Object)null)
{
((CharacterControl)_localControl).m_moveInput = Vector2.zero;
_localControl.m_modifMoveInput = Vector2.op_Implicit(Vector2.zero);
if ((Object)(object)((CharacterControl)_localControl).m_character != (Object)null && ((CharacterControl)_localControl).m_character.Sprinting)
{
((CharacterControl)_localControl).m_character.SprintInput(false);
}
}
FollowerDataManager.Instance.RemoveFollower(Follower.UID);
ChatHelpers.SendChatLog(Follower, "Auto-follow stopped (movement input detected).");
}
private bool PlayerProvidedMovementInput()
{
int playerID = Follower.OwnerPlayerSys.PlayerID;
float num = ControlsInput.MoveHorizontal(playerID);
float num2 = ControlsInput.MoveVertical(playerID);
if (!(Mathf.Abs(num) > 0.01f))
{
return Mathf.Abs(num2) > 0.01f;
}
return true;
}
}
public struct SkillsData
{
public IEnumerable<Skill> ActiveSkills;
public IEnumerable<Skill> PassiveSkills;
public IEnumerable<Skill> CosmeticSkills;
public SkillsData(IEnumerable<Skill> activeSkills, IEnumerable<Skill> passiveSkills, IEnumerable<Skill> cosmeticSkills)
{
ActiveSkills = activeSkills;
PassiveSkills = passiveSkills;
CosmeticSkills = cosmeticSkills;
}
}
}
namespace OutwardBasicChatCommands.Patches
{
[HarmonyPatch(typeof(LocalCharacterControl), "DetectMovementInputs")]
public static class Patch_LocalCharacterControl_DetectMovementInputs
{
private static void Postfix(LocalCharacterControl __instance)
{
if (FollowerDataManager.Instance.IsCharacterFollowing(((CharacterControl)__instance).Character, out var data))
{
data.Update();
}
}
}
}
namespace OutwardBasicChatCommands.Managers
{
public class FollowerDataManager
{
private static FollowerDataManager _instance;
private Dictionary<UID, FollowerData> _followerData = new Dictionary<UID, FollowerData>();
public static FollowerDataManager Instance
{
get
{
if (_instance == null)
{
_instance = new FollowerDataManager();
}
return _instance;
}
}
public Dictionary<UID, FollowerData> FollowerData
{
get
{
return _followerData;
}
set
{
_followerData = value;
}
}
private FollowerDataManager()
{
}
public bool IsCharacterFollowing(Character follower, out FollowerData data)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
if (!FollowerData.TryGetValue(follower.UID, out data))
{
return false;
}
if (!data.IsFollowing)
{
return false;
}
return true;
}
public void TryToFollow(Character follower, Character charToFollow)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
if (string.Equals(UID.op_Implicit(follower.UID), UID.op_Implicit(charToFollow.UID)))
{
ChatHelpers.SendChatLog(follower, "You cannot follow yourself! Try other target.", ChatLogStatus.Warning);
return;
}
FollowerData value = null;
if (!FollowerData.TryGetValue(follower.UID, out value))
{
value = new FollowerData(follower, charToFollow);
FollowerData.Add(follower.UID, value);
}
else if (value.CharacterToFollow.UID != charToFollow.UID)
{
value.CharacterToFollow = charToFollow;
}
value.StartFollow();
}
public void RemoveFollower(UID uid)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
FollowerData.Remove(uid);
}
}
}
namespace OutwardBasicChatCommands.Events
{
public static class EventBusPublisher
{
public const string Event_AddCommand = "ChatCommandsManager@AddChatCommand";
public const string Event_RemoveCommand = "ChatCommandsManager@RemoveChatCommand";
public const string ChatCommands_Listener = "gymmed.chat_commands_manager_*";
public static void SendCommands()
{
EnchantmentCommandsPublisher.SendAddEnchantmentRecipeItemsCommand();
EnchantmentCommandsPublisher.SendAddEnchantmentRecipesCommand();
EnchantmentCommandsPublisher.SendAddEnchantmentsCommand();
EnchantmentCommandsPublisher.SendAddBrokenEnchantmentsCommand();
FollowCommandsPublisher.SendAddFollowChatCommand();
TimeCommandsPublisher.SendAddSetTimeCommand();
TimeCommandsPublisher.SendAddSetMinutesCommand();
ChatCommandsPublisher.SendAddMaxChatMessagesCommand();
SkillCommandsPublisher.SendAddSkillsCommand();
CharacterVisualsPublisher.SendAddSetVisualsCommand();
}
}
public static class EventBusRegister
{
public static void RegisterEvents()
{
}
}
public static class EventBusSubscriber
{
public const string Event_AddedChatCommand = "ChatCommandsManager@AddChatCommand_After";
public const string Event_RemovedChatCommand = "ChatCommandsManager@RemoveChatCommand_After";
public static void AddSubscribers()
{
EventBus.Subscribe("gymmed.chat_commands_manager_*", "ChatCommandsManager@AddChatCommand_After", (Action<EventPayload>)AddedChatCommand);
EventBus.Subscribe("gymmed.chat_commands_manager_*", "ChatCommandsManager@RemoveChatCommand_After", (Action<EventPayload>)RemovedChatCommand);
}
public static void AddedChatCommand(EventPayload payload)
{
if (payload != null)
{
(string, Type) tuple = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandName);
payload.Get<string>(tuple.Item1, (string)null);
OBCC.LogMessage("Added command " + tuple.Item1);
}
}
public static void RemovedChatCommand(EventPayload payload)
{
if (payload != null)
{
(string, Type) tuple = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandName);
payload.Get<string>(tuple.Item1, (string)null);
OBCC.LogMessage("Removed command " + tuple.Item1);
}
}
}
}
namespace OutwardBasicChatCommands.Events.Publishers
{
public class CharacterVisualsPublisher
{
public static void SendAddSetVisualsCommand()
{
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Expected O, but got Unknown
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Expected O, but got Unknown
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Expected O, but got Unknown
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00e4: Expected O, but got Unknown
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: Expected O, but got Unknown
//IL_0100: Expected O, but got Unknown
Dictionary<string, (string, string)> value = new Dictionary<string, (string, string)>
{
{
"race",
("Required. Changes character race. 1 - Auraian | 2 - Tramon | 3 - Kazite. Ex.:/setVisuals 2", null)
},
{
"hairStyle",
("Required. Changes character hair style. Ex.:/setVisuals 2 15", null)
},
{
"hairColor",
("Required. Changes character hair color. Ex.:/setVisuals 2 15 11", null)
},
{
"headVariation",
("Required. Changes character hair variation. Ex.:/setVisuals 2 15 11 6", null)
},
{
"gender",
("Optional. Changes character gender. 1 - Female | 2 - Male. Ex.:/setVisuals 2 15 11 6 1", null)
}
};
Action<Character, Dictionary<string, string>> value2 = SetVisuals;
EventPayload val = new EventPayload { };
string item;
((Dictionary<string, object>)val)[item] = "setVisuals";
string item2 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandParameters).key;
((Dictionary<string, object>)val)[item2] = value;
string item3 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandAction).key;
((Dictionary<string, object>)val)[item3] = value2;
string item4 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandDescription).key;
((Dictionary<string, object>)val)[item4] = "Changes how your character looks.";
string item5 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandRequiresDebugMode).key;
((Dictionary<string, object>)val)[item5] = true;
EventPayload val2 = val;
EventBus.Publish("gymmed.chat_commands_manager_*", "ChatCommandsManager@AddChatCommand", val2);
}
public static void SetVisuals(Character character, Dictionary<string, string> arguments)
{
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_010f: Unknown result type (might be due to invalid IL or missing references)
//IL_0115: Invalid comparison between Unknown and I4
//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Invalid comparison between Unknown and I4
//IL_0309: Unknown result type (might be due to invalid IL or missing references)
try
{
object obj;
if (character == null)
{
obj = null;
}
else
{
CharacterUI characterUI = character.CharacterUI;
obj = ((characterUI != null) ? characterUI.ChatPanel : null);
}
ChatPanel val = (ChatPanel)obj;
if ((Object)(object)val == (Object)null)
{
OBCC.LogMessage("CharacterVisualsPublisher@SetVisuals Tried to use missing chatPanel.");
return;
}
arguments.TryGetValue("race", out var value);
ChatHelpers.SendChatLog(val, "Race " + value, ChatLogStatus.Warning);
if (!ValidateIntFromString(val, value, "Race", out var result, 3, 1))
{
return;
}
RacesHelper.races.TryGetValue((Races)(result - 1), out var value2);
GenderData genderData = default(GenderData);
arguments.TryGetValue("gender", out var value3);
if (ValidateIntFromString(val, value3, "Gender", out var result2, 2, 1, silent: true))
{
switch (result2)
{
case 1:
genderData = value2.GetGender((Gender)1);
result2 = 1;
break;
case 2:
genderData = value2.GetGender((Gender)0);
result2 = 0;
break;
default:
genderData = value2.GetGender(character.VisualData.Gender);
result2 = (((int)character.VisualData.Gender == 1) ? 1 : 0);
break;
}
}
else
{
genderData = value2.GetGender(character.VisualData.Gender);
result2 = (((int)character.VisualData.Gender == 1) ? 1 : 0);
}
arguments.TryGetValue("hairStyle", out var value4);
ChatHelpers.SendChatLog(val, "hairStyle " + value4, ChatLogStatus.Warning);
if (!ValidateIntFromString(val, value4, "Hair Style", out var result3, genderData.TotalHairStyles, 1))
{
return;
}
arguments.TryGetValue("hairColor", out var value5);
ChatHelpers.SendChatLog(val, "hairColor " + value5, ChatLogStatus.Warning);
if (!ValidateIntFromString(val, value5, "Hair Color", out var result4, genderData.TotalHairColors, 1))
{
return;
}
arguments.TryGetValue("headVariation", out var value6);
ChatHelpers.SendChatLog(val, "headVariation " + value6, ChatLogStatus.Warning);
if (ValidateIntFromString(val, value6, "Head Variation", out var result5, genderData.TotalHeadVariations, 1))
{
ArmorVisuals defaultHairVisuals = character.Visuals.DefaultHairVisuals;
GameObject val2 = ((defaultHairVisuals != null) ? ((Component)defaultHairVisuals).gameObject : null);
ArmorVisuals defaultHeadVisuals = character.Visuals.DefaultHeadVisuals;
GameObject val3 = ((defaultHeadVisuals != null) ? ((Component)defaultHeadVisuals).gameObject : null);
ArmorVisuals defaultBodyVisuals = character.Visuals.DefaultBodyVisuals;
GameObject val4 = ((defaultBodyVisuals != null) ? ((Component)defaultBodyVisuals).gameObject : null);
ArmorVisuals defaultFootVisuals = character.Visuals.DefaultFootVisuals;
GameObject val5 = ((defaultFootVisuals != null) ? ((Component)defaultFootVisuals).gameObject : null);
ArmorVisuals activeVisualsBody = character.Visuals.ActiveVisualsBody;
GameObject val6 = ((activeVisualsBody != null) ? ((Component)activeVisualsBody).gameObject : null);
ArmorVisuals activeVisualsFoot = character.Visuals.ActiveVisualsFoot;
GameObject val7 = ((activeVisualsFoot != null) ? ((Component)activeVisualsFoot).gameObject : null);
if ((Object)(object)val2 != (Object)null)
{
val2.SetActive(false);
}
if ((Object)(object)val3 != (Object)null)
{
val3.SetActive(false);
}
if ((Object)(object)val4 != (Object)null)
{
val4.SetActive(false);
}
if ((Object)(object)val5 != (Object)null)
{
val5.SetActive(false);
}
if ((Object)(object)val6 != (Object)null)
{
val6.SetActive(false);
}
if ((Object)(object)val7 != (Object)null)
{
val7.SetActive(false);
}
int num = result - 1;
int num2 = result3 - 1;
int num3 = result4 - 1;
int num4 = result5 - 1;
character.Visuals.ResetDataCharacterCreation();
character.VisualData.Gender = (Gender)result2;
ChatHelpers.SendChatLog(val, $"Set gender: {(object)(Gender)result2}", ChatLogStatus.Success);
character.Visuals.LoadCharacterCreationHead(num, result2, num4);
character.Visuals.LoadCharacterCreationHair(num2, num3);
character.Visuals.LoadCharacterCreationBody(result2, num);
character.Visuals.LoadCharacterCreationBoots(result2, num);
character.VisualData.SkinIndex = num;
character.VisualData.HairStyleIndex = num2;
character.VisualData.HairColorIndex = num3;
character.VisualData.HeadVariationIndex = num4;
character.Visuals.m_helmVisualChanged = true;
character.Visuals.m_armorVisualChanged = true;
character.Visuals.m_footVisualChanged = true;
ChatHelpers.SendChatLog(val, "Changed Character Visual Data.", ChatLogStatus.Success);
}
}
catch (Exception ex)
{
OBCC.LogMessage("While setting visuals we encontered an error:" + ex.Message);
}
}
public static bool ValidateIntFromString(ChatPanel panel, string variable, string variableName, out int result, int max = 3, int min = 0, bool silent = false)
{
result = -1;
if (string.IsNullOrWhiteSpace(variable))
{
if (!silent)
{
ChatHelpers.SendChatLog(panel, variableName + " argument is required!", ChatLogStatus.Error);
}
return false;
}
int.TryParse(variable, out var result2);
result = result2;
if (result2 < min)
{
if (!silent)
{
ChatHelpers.SendChatLog(panel, $"{variableName} argument value is too small! Minimum {min} is allowed.", ChatLogStatus.Error);
}
return false;
}
if (result2 > max)
{
if (!silent)
{
ChatHelpers.SendChatLog(panel, $"{variableName} argument value is too big! Maximum {max} is allowed.", ChatLogStatus.Error);
}
return false;
}
return true;
}
}
public static class ChatCommandsPublisher
{
public static void SendAddMaxChatMessagesCommand()
{
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Expected O, but got Unknown
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Expected O, but got Unknown
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Expected O, but got Unknown
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Expected O, but got Unknown
//IL_00ab: Expected O, but got Unknown
Dictionary<string, (string, string)> value = new Dictionary<string, (string, string)>
{
{
"show",
("Optional. Can be provided as bool(true, flase). Should show how many messages are set?", "true")
},
{
"amount",
("Optional. Can be provided as number. Amount of messages chat panel can contain.", "30")
}
};
Action<Character, Dictionary<string, string>> value2 = SetMaxChatMessages;
EventPayload val = new EventPayload { };
string item;
((Dictionary<string, object>)val)[item] = "maxChatMessages";
string item2 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandParameters).key;
((Dictionary<string, object>)val)[item2] = value;
string item3 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandAction).key;
((Dictionary<string, object>)val)[item3] = value2;
string item4 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandDescription).key;
((Dictionary<string, object>)val)[item4] = "Changes the amount of messages chat panel can contain.";
EventPayload val2 = val;
EventBus.Publish("gymmed.chat_commands_manager_*", "ChatCommandsManager@AddChatCommand", val2);
}
public static void SetMaxChatMessages(Character character, Dictionary<string, string> arguments)
{
object obj;
if (character == null)
{
obj = null;
}
else
{
CharacterUI characterUI = character.CharacterUI;
obj = ((characterUI != null) ? characterUI.ChatPanel : null);
}
ChatPanel val = (ChatPanel)obj;
if ((Object)(object)val == (Object)null)
{
OBCC.LogMessage("EventBusPublisher@SetMaxChatMessages Tried to use missing chatPanel.");
return;
}
arguments.TryGetValue("show", out var value);
if (string.IsNullOrWhiteSpace(value) || string.Equals(value, "true"))
{
ChatHelpers.SendChatLog(val, $"Currently chat panel can contain {val.MaxMessageCount} messages!", ChatLogStatus.Warning);
}
arguments.TryGetValue("amount", out var value2);
if (string.IsNullOrWhiteSpace(value2))
{
ChatHelpers.SendChatLog(val, "Argument for amount parameter was not provided! No changes made.", ChatLogStatus.Warning);
return;
}
int.TryParse(value2, out var result);
if (result < 0)
{
ChatHelpers.SendChatLog(val, "Argument amount cannot be negative number!", ChatLogStatus.Error);
return;
}
val.MaxMessageCount = result;
ChatHelpers.SendChatLog(val, $"Chat panel now will hold {result} messages!", ChatLogStatus.Success);
}
}
public static class EnchantmentCommandsPublisher
{
public static void SendAddEnchantmentsCommand()
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Expected O, but got Unknown
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Expected O, but got Unknown
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Expected O, but got Unknown
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Expected O, but got Unknown
//IL_0091: Expected O, but got Unknown
Dictionary<string, (string, string)> value = new Dictionary<string, (string, string)> {
{
"short",
("Optional. Can be provided as true or anything else. If it is true provides count of all available Enchantments count", "false")
} };
Action<Character, Dictionary<string, string>> value2 = EnchantmentsInformation;
EventPayload val = new EventPayload { };
string item;
((Dictionary<string, object>)val)[item] = "enchantments";
string item2 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandParameters).key;
((Dictionary<string, object>)val)[item2] = value;
string item3 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandAction).key;
((Dictionary<string, object>)val)[item3] = value2;
string item4 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandDescription).key;
((Dictionary<string, object>)val)[item4] = "Provides information about all enchantments.";
EventPayload val2 = val;
EventBus.Publish("gymmed.chat_commands_manager_*", "ChatCommandsManager@AddChatCommand", val2);
}
public static void EnchantmentsInformation(Character character, Dictionary<string, string> arguments)
{
object obj;
if (character == null)
{
obj = null;
}
else
{
CharacterUI characterUI = character.CharacterUI;
obj = ((characterUI != null) ? characterUI.ChatPanel : null);
}
ChatPanel val = (ChatPanel)obj;
if ((Object)(object)val == (Object)null)
{
OBCC.LogMessage("EventBusPublisher@EnchantmentsInformation Tried to use missing chatPanel.");
return;
}
arguments.TryGetValue("short", out var value);
List<Enchantment> list = ResourcesPrefabManager.ENCHANTMENT_PREFABS.Values.ToList();
if (string.IsNullOrWhiteSpace(value) || !string.Equals(value, "true"))
{
EnchantmentRecipesHelpers.PrintEnchantments(val, list);
}
ChatHelpers.SendChatLog(val, $"Total {list.Count()} Enchantments.");
}
public static void SendAddEnchantmentRecipesCommand()
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Expected O, but got Unknown
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Expected O, but got Unknown
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Expected O, but got Unknown
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Expected O, but got Unknown
//IL_0091: Expected O, but got Unknown
Dictionary<string, (string, string)> value = new Dictionary<string, (string, string)> {
{
"short",
("Optional. Can be provided as true or anything else. If it is true provides count of all available EnchantmentRecipes count", "false")
} };
Action<Character, Dictionary<string, string>> value2 = EnchantmentRecipesInformation;
EventPayload val = new EventPayload { };
string item;
((Dictionary<string, object>)val)[item] = "enchantmentRecipes";
string item2 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandParameters).key;
((Dictionary<string, object>)val)[item2] = value;
string item3 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandAction).key;
((Dictionary<string, object>)val)[item3] = value2;
string item4 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandDescription).key;
((Dictionary<string, object>)val)[item4] = "Provides information about all enchantment recipes.";
EventPayload val2 = val;
EventBus.Publish("gymmed.chat_commands_manager_*", "ChatCommandsManager@AddChatCommand", val2);
}
public static void EnchantmentRecipesInformation(Character character, Dictionary<string, string> arguments)
{
object obj;
if (character == null)
{
obj = null;
}
else
{
CharacterUI characterUI = character.CharacterUI;
obj = ((characterUI != null) ? characterUI.ChatPanel : null);
}
ChatPanel val = (ChatPanel)obj;
if ((Object)(object)val == (Object)null)
{
OBCC.LogMessage("EventBusPublisher@EnchantmentRecipesInformation Tried to use missing chatPanel.");
return;
}
arguments.TryGetValue("short", out var value);
List<EnchantmentRecipe> enchantmentRecipes = RecipeManager.Instance.GetEnchantmentRecipes();
if (string.IsNullOrWhiteSpace(value) || !string.Equals(value, "true"))
{
EnchantmentRecipesHelpers.PrintEnchantmentRecipes(val, enchantmentRecipes);
}
ChatHelpers.SendChatLog(val, $"Total {enchantmentRecipes.Count()} EnchantmentRecipes.");
}
public static void SendAddEnchantmentRecipeItemsCommand()
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Expected O, but got Unknown
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Expected O, but got Unknown
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Expected O, but got Unknown
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Expected O, but got Unknown
//IL_0091: Expected O, but got Unknown
Dictionary<string, (string, string)> value = new Dictionary<string, (string, string)> {
{
"short",
("Optional. Can be provided as true or anything else. If it is true provides count of all available EnchantmentRecipeItems count", "false")
} };
Action<Character, Dictionary<string, string>> value2 = EnchantmentRecipeItemsInformation;
EventPayload val = new EventPayload { };
string item;
((Dictionary<string, object>)val)[item] = "enchantmentRecipeItems";
string item2 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandParameters).key;
((Dictionary<string, object>)val)[item2] = value;
string item3 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandAction).key;
((Dictionary<string, object>)val)[item3] = value2;
string item4 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandDescription).key;
((Dictionary<string, object>)val)[item4] = "Provides information about all enchantment recipe items.";
EventPayload val2 = val;
EventBus.Publish("gymmed.chat_commands_manager_*", "ChatCommandsManager@AddChatCommand", val2);
}
public static void EnchantmentRecipeItemsInformation(Character character, Dictionary<string, string> arguments)
{
object obj;
if (character == null)
{
obj = null;
}
else
{
CharacterUI characterUI = character.CharacterUI;
obj = ((characterUI != null) ? characterUI.ChatPanel : null);
}
ChatPanel val = (ChatPanel)obj;
if ((Object)(object)val == (Object)null)
{
OBCC.LogMessage("EventBusPublisher@EnchantmentRecipeItemsInformation Tried to use missing chatPanel.");
return;
}
arguments.TryGetValue("short", out var value);
HashSet<EnchantmentRecipeItem> allEnchantmentRecipeItems = EnchantmentRecipesHelpers.GetAllEnchantmentRecipeItems();
if (string.IsNullOrWhiteSpace(value) || !string.Equals(value, "true"))
{
EnchantmentRecipesHelpers.PrintEnchantmentRecipeItems(val, allEnchantmentRecipeItems);
}
ChatHelpers.SendChatLog(val, $"Total {allEnchantmentRecipeItems.Count()} EnchantmentRecipeItems.");
}
public static void SendAddBrokenEnchantmentsCommand()
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Expected O, but got Unknown
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Expected O, but got Unknown
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Expected O, but got Unknown
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Expected O, but got Unknown
//IL_0091: Expected O, but got Unknown
Dictionary<string, (string, string)> value = new Dictionary<string, (string, string)> {
{
"short",
("Optional. Can be provided as true or anything else. If it is true provides count of all broken enchantments", "false")
} };
Action<Character, Dictionary<string, string>> value2 = FindBrokenEnchantments;
EventPayload val = new EventPayload { };
string item;
((Dictionary<string, object>)val)[item] = "brokenEnchantments";
string item2 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandParameters).key;
((Dictionary<string, object>)val)[item2] = value;
string item3 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandAction).key;
((Dictionary<string, object>)val)[item3] = value2;
string item4 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandDescription).key;
((Dictionary<string, object>)val)[item4] = "Provides information about all incorrectly added enchantments by modders.";
EventPayload val2 = val;
EventBus.Publish("gymmed.chat_commands_manager_*", "ChatCommandsManager@AddChatCommand", val2);
}
public static void FindBrokenEnchantments(Character character, Dictionary<string, string> arguments)
{
object obj;
if (character == null)
{
obj = null;
}
else
{
CharacterUI characterUI = character.CharacterUI;
obj = ((characterUI != null) ? characterUI.ChatPanel : null);
}
ChatPanel val = (ChatPanel)obj;
if ((Object)(object)val == (Object)null)
{
OBCC.LogMessage("EventBusPublisher@FindBrokenEnchantments Tried to use missing chatPanel.");
return;
}
arguments.TryGetValue("short", out var value);
HashSet<EnchantmentRecipeItem> allEnchantmentRecipeItems = EnchantmentRecipesHelpers.GetAllEnchantmentRecipeItems();
HashSet<EnchantmentRecipe> brokenEnchantmentRecipes = EnchantmentRecipesHelpers.GetBrokenEnchantmentRecipes();
if (!string.IsNullOrWhiteSpace(value) && string.Equals(value, "true"))
{
EnchantmentRecipesHelpers.PrintBrokenEnchantmentRecipeItemsCount(val, allEnchantmentRecipeItems);
ChatHelpers.SendChatLog(val, $"Total {brokenEnchantmentRecipes.Count()} broken EnchantmentRecipes.");
}
else
{
EnchantmentRecipesHelpers.PrintBrokenEnchantmentRecipeItems(val, allEnchantmentRecipeItems);
EnchantmentRecipesHelpers.PrintBrokenEnchantmentRecipes(val, brokenEnchantmentRecipes);
}
}
}
public static class FollowCommandsPublisher
{
public static void SendAddFollowChatCommand()
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Expected O, but got Unknown
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Expected O, but got Unknown
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Expected O, but got Unknown
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Expected O, but got Unknown
//IL_008d: Expected O, but got Unknown
Dictionary<string, (string, string)> value = new Dictionary<string, (string, string)> {
{
"characterName",
("Optional. Tries to follow character by name. If not provided tries to find first local character or lobby character.", null)
} };
Action<Character, Dictionary<string, string>> value2 = FollowCharacter;
EventPayload val = new EventPayload { };
string item;
((Dictionary<string, object>)val)[item] = "follow";
string item2 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandParameters).key;
((Dictionary<string, object>)val)[item2] = value;
string item3 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandAction).key;
((Dictionary<string, object>)val)[item3] = value2;
string item4 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandDescription).key;
((Dictionary<string, object>)val)[item4] = "Tries to find a player to follow. Searching is done starting from local characters and moving to lobby characters.";
EventPayload val2 = val;
EventBus.Publish("gymmed.chat_commands_manager_*", "ChatCommandsManager@AddChatCommand", val2);
}
public static void FollowCharacter(Character follower, Dictionary<string, string> arguments)
{
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
object obj;
if (follower == null)
{
obj = null;
}
else
{
CharacterUI characterUI = follower.CharacterUI;
obj = ((characterUI != null) ? characterUI.ChatPanel : null);
}
ChatPanel val = (ChatPanel)obj;
if ((Object)(object)val == (Object)null)
{
OBCC.LogMessage("EventBusPublisher@SendAddFollowChatCommand Tried to use missing chatPanel.");
return;
}
arguments.TryGetValue("characterName", out var value);
if (string.IsNullOrWhiteSpace(value))
{
UID uID = ((UIElement)val).LocalCharacter.UID;
Character firstLocalCharacter = CharacterManager.Instance.GetFirstLocalCharacter();
if ((Object)(object)firstLocalCharacter != (Object)null && firstLocalCharacter.UID != uID)
{
FollowerDataManager.Instance.TryToFollow(((UIElement)val).LocalCharacter, firstLocalCharacter);
return;
}
Character secondLocalCharacter = CharacterManager.Instance.GetSecondLocalCharacter();
if ((Object)(object)secondLocalCharacter != (Object)null && secondLocalCharacter.UID != uID)
{
FollowerDataManager.Instance.TryToFollow(((UIElement)val).LocalCharacter, secondLocalCharacter);
return;
}
Character val2 = CharacterHelpers.TryToFindOtherCharacterInLobby(((UIElement)val).LocalCharacter);
if ((Object)(object)val2 != (Object)null)
{
FollowerDataManager.Instance.TryToFollow(((UIElement)val).LocalCharacter, val2);
}
else
{
ChatHelpers.SendChatLog(val, "You are playing alone. There is nothing to follow.");
}
}
else
{
Character val3 = CharacterHelpers.TryToFindOtherCharacterInLobby(((UIElement)val).LocalCharacter, value);
if ((Object)(object)val3 != (Object)null)
{
FollowerDataManager.Instance.TryToFollow(((UIElement)val).LocalCharacter, val3);
}
else
{
ChatHelpers.SendChatLog(val, "Could not find other player by name " + value + "!");
}
}
}
}
public static class SkillCommandsPublisher
{
public static void SendAddSkillsCommand()
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Expected O, but got Unknown
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Expected O, but got Unknown
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Expected O, but got Unknown
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Expected O, but got Unknown
//IL_0091: Expected O, but got Unknown
Dictionary<string, (string, string)> value = new Dictionary<string, (string, string)> {
{
"type",
("Optional. Can be provided as int. types: 0 - general data | 1 - active | 2 - passive | 3 - cosmetic", "0")
} };
Action<Character, Dictionary<string, string>> value2 = ShowSkillsData;
EventPayload val = new EventPayload { };
string item;
((Dictionary<string, object>)val)[item] = "skills";
string item2 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandParameters).key;
((Dictionary<string, object>)val)[item2] = value;
string item3 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandAction).key;
((Dictionary<string, object>)val)[item3] = value2;
string item4 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandDescription).key;
((Dictionary<string, object>)val)[item4] = "Shows skills information.";
EventPayload val2 = val;
EventBus.Publish("gymmed.chat_commands_manager_*", "ChatCommandsManager@AddChatCommand", val2);
}
public static void ShowSkillsData(Character character, Dictionary<string, string> arguments)
{
object obj;
if (character == null)
{
obj = null;
}
else
{
CharacterUI characterUI = character.CharacterUI;
obj = ((characterUI != null) ? characterUI.ChatPanel : null);
}
ChatPanel val = (ChatPanel)obj;
if ((Object)(object)val == (Object)null)
{
OBCC.LogMessage("EventBusPublisher@SetMaxChatMessages Tried to use missing chatPanel.");
return;
}
arguments.TryGetValue("type", out var value);
SkillTypes category = (SkillTypes)int.Parse(value);
if (string.IsNullOrWhiteSpace(value))
{
category = SkillTypes.All;
}
SkillsHelpers.LogSkillsData(val, category);
}
}
public static class TimeCommandsPublisher
{
public static void SendPictureModeCommand()
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Expected O, but got Unknown
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Expected O, but got Unknown
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Expected O, but got Unknown
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Expected O, but got Unknown
//IL_008d: Expected O, but got Unknown
Dictionary<string, (string, string)> value = new Dictionary<string, (string, string)> {
{
"isActive",
("Optional. By default sets opposite mode. Removes/adds character and pauses the game for picture capture. Ex.:/setPictureMode true", null)
} };
Action<Character, Dictionary<string, string>> value2 = SetPictureMode;
EventPayload val = new EventPayload { };
string item;
((Dictionary<string, object>)val)[item] = "setPictureMode";
string item2 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandParameters).key;
((Dictionary<string, object>)val)[item2] = value;
string item3 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandAction).key;
((Dictionary<string, object>)val)[item3] = value2;
string item4 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandDescription).key;
((Dictionary<string, object>)val)[item4] = "Pauses/resumes the game time.";
EventPayload val2 = val;
EventBus.Publish("gymmed.chat_commands_manager_*", "ChatCommandsManager@AddChatCommand", val2);
}
public static void SetPictureMode(Character character, Dictionary<string, string> arguments)
{
object obj;
if (character == null)
{
obj = null;
}
else
{
CharacterUI characterUI = character.CharacterUI;
obj = ((characterUI != null) ? characterUI.ChatPanel : null);
}
ChatPanel val = (ChatPanel)obj;
if ((Object)(object)val == (Object)null)
{
OBCC.LogMessage("TimeCommandsPublisher@SetPictureMode Tried to use missing chatPanel.");
return;
}
arguments.TryGetValue("isActive", out var value);
if (string.IsNullOrWhiteSpace(value))
{
float num = 1E-06f;
string text = ((Time.timeScale != num) ? "paused" : "resumed");
character.CharacterUI.PauseMenu.TogglePause();
character.CharacterUI.PauseMenu.OnToggleChat();
ChatHelpers.SendChatLog(val, "Successfully " + text + " world time!", ChatLogStatus.Success);
return;
}
if (string.Equals(value, "true"))
{
((Component)character).gameObject.SetActive(false);
PauseMenu.Pause(true);
ChatHelpers.SendChatLog(val, "Successfully paused the game!", ChatLogStatus.Success);
}
else
{
((Component)character).gameObject.SetActive(true);
PauseMenu.Pause(false);
ChatHelpers.SendChatLog(val, "Successfully resumed the game!", ChatLogStatus.Success);
}
character.CharacterUI.PauseMenu.OnToggleChat();
}
public static void SendAddSetTimeCommand()
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Expected O, but got Unknown
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Expected O, but got Unknown
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Expected O, but got Unknown
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Expected O, but got Unknown
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Expected O, but got Unknown
//IL_00a8: Expected O, but got Unknown
Dictionary<string, (string, string)> value = new Dictionary<string, (string, string)> {
{
"time",
("Required. Set minutes for current time. Ex.: setTime 05:50", null)
} };
Action<Character, Dictionary<string, string>> value2 = SetTime;
EventPayload val = new EventPayload { };
string item;
((Dictionary<string, object>)val)[item] = "setTime";
string item2 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandParameters).key;
((Dictionary<string, object>)val)[item2] = value;
string item3 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandAction).key;
((Dictionary<string, object>)val)[item3] = value2;
string item4 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandDescription).key;
((Dictionary<string, object>)val)[item4] = "Sets current time.";
string item5 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandRequiresDebugMode).key;
((Dictionary<string, object>)val)[item5] = true;
EventPayload val2 = val;
EventBus.Publish("gymmed.chat_commands_manager_*", "ChatCommandsManager@AddChatCommand", val2);
}
public static void SetTime(Character character, Dictionary<string, string> arguments)
{
object obj;
if (character == null)
{
obj = null;
}
else
{
CharacterUI characterUI = character.CharacterUI;
obj = ((characterUI != null) ? characterUI.ChatPanel : null);
}
ChatPanel val = (ChatPanel)obj;
if ((Object)(object)val == (Object)null)
{
OBCC.LogMessage("TimeCommandsPublisher@SetTime Tried to use missing chatPanel.");
return;
}
arguments.TryGetValue("time", out var value);
if (string.IsNullOrWhiteSpace(value))
{
ChatHelpers.SendChatLog(val, "Time argument is required!", ChatLogStatus.Error);
return;
}
string[] array = value.Split(new char[1] { ':' });
if (array.Length > 2)
{
ChatHelpers.SendChatLog(val, "Time argument only needs hours:minutes!", ChatLogStatus.Error);
return;
}
if (array.Length < 1)
{
ChatHelpers.SendChatLog(val, "Time argument lacks on of the parameters hours:minutes!", ChatLogStatus.Error);
return;
}
int.TryParse(array[0], out var result);
if (TryValidateNumber(val, result, 23, 0, "Hours"))
{
int.TryParse(array[1], out var result2);
if (TryValidateNumber(val, result2, 59, 0, "Minutes"))
{
TimeHelpers.SetTime(result, result2);
ChatHelpers.SendChatLog(val, $"Successfully set time to {result}:{result2}!", ChatLogStatus.Success);
}
}
}
public static bool TryValidateNumber(ChatPanel panel, int number, int max, int min, string variableName)
{
if (number < min)
{
ChatHelpers.SendChatLog(panel, $"{variableName} can not be lower than {min}!", ChatLogStatus.Error);
return false;
}
if (number > max)
{
ChatHelpers.SendChatLog(panel, $"{variableName} can not exceed {max}!", ChatLogStatus.Error);
return false;
}
return true;
}
public static void SendAddSetMinutesCommand()
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Expected O, but got Unknown
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Expected O, but got Unknown
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Expected O, but got Unknown
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Expected O, but got Unknown
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Expected O, but got Unknown
//IL_00a8: Expected O, but got Unknown
Dictionary<string, (string, string)> value = new Dictionary<string, (string, string)> {
{
"minutes",
("Required. Set minutes for current time. Ex.: /setMinutes 55", null)
} };
Action<Character, Dictionary<string, string>> value2 = SetMinutes;
EventPayload val = new EventPayload { };
string item;
((Dictionary<string, object>)val)[item] = "setMinutes";
string item2 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandParameters).key;
((Dictionary<string, object>)val)[item2] = value;
string item3 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandAction).key;
((Dictionary<string, object>)val)[item3] = value2;
string item4 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandDescription).key;
((Dictionary<string, object>)val)[item4] = "Sets current hour minutes.";
string item5 = ChatCommandsManagerParamsHelper.Get(ChatCommandsManagerParams.CommandRequiresDebugMode).key;
((Dictionary<string, object>)val)[item5] = true;
EventPayload val2 = val;
EventBus.Publish("gymmed.chat_commands_manager_*", "ChatCommandsManager@AddChatCommand", val2);
}
public static void SetMinutes(Character character, Dictionary<string, string> arguments)
{
object obj;
if (character == null)
{
obj = null;
}
else
{
CharacterUI characterUI = character.CharacterUI;
obj = ((characterUI != null) ? characterUI.ChatPanel : null);
}
ChatPanel val = (ChatPanel)obj;
if ((Object)(object)val == (Object)null)
{
OBCC.LogMessage("TimeCommandsPublisher@SetMinutes Tried to use missing chatPanel.");
return;
}
arguments.TryGetValue("minutes", out var value);
if (string.IsNullOrWhiteSpace(value))
{
ChatHelpers.SendChatLog(val, "Minutes argument is required!", ChatLogStatus.Error);
return;
}
int.TryParse(value, out var result);
if (result < 0)
{
ChatHelpers.SendChatLog(val, "Minutes can not be negative!", ChatLogStatus.Error);
return;
}
if (result > 60)
{
ChatHelpers.SendChatLog(val, "Minutes can not exceed 60!", ChatLogStatus.Error);
return;
}
TimeHelpers.SetMinutes(result);
ChatHelpers.SendChatLog(val, "Successfully set minutes to " + value + "!", ChatLogStatus.Success);
}
}
}