using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using BepInEx; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace WobblyLifePlus; [BepInPlugin("com.wobblylife.plus", "WobblyLife+", "2.0.0")] public class Plugin : BaseUnityPlugin { public struct FoodData { public float h; public float t; public float f; public FoodData(float hh, float tt, float ff = 0f) { h = hh; t = tt; f = ff; } } [Serializable] public class BusinessData { public string businessId; public string businessName; public string businessType; public int purchasePrice; public int dailyIncome; public int dailyExpenses; public bool isOwned; public int ownerSaveSlot; public int ownerCharSlot; public bool hasJobs; public float workerBonus; public int activeWorkerCount; public Vector3 triggerPosition; } [Serializable] public class CharacterFullData { public int age = 18; public string name = ""; public bool nameGenerated = false; public float ageTimer = 0f; public float health = 100f; public float hunger = 100f; public float thirst = 100f; public float fatigue = 0f; public int hospitalDebt = 0; public int totalDeaths = 0; public int totalFoodEaten = 0; public int houseCount = 0; public List houseCosts = new List(); public List businesses = new List(); } [Serializable] public class BusinessOwnedEntry { public string businessId; public int activeWorkerCount; } [Serializable] public class GlobalBusinessData { public List businesses = new List(); } [Serializable] public class GlobalBusinessEntry { public string businessId; public bool isOwned; public int ownerSaveSlot; public int ownerCharSlot; } [HarmonyPatch(typeof(JobMission), "ServerJobCompleted", new Type[] { typeof(PlayerController) })] private class Patch_JobMission_ServerJobCompleted { private static void Postfix(JobMission __instance, PlayerController playerController) { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)__instance == (Object)null || (Object)(object)playerController == (Object)null) { return; } JobDispensorBehaviour jobDispensor = __instance.GetJobDispensor(); if ((Object)(object)jobDispensor == (Object)null) { return; } int playerSlot = GetPlayerSlot(playerController); if (playerSlot < 0 || playerSlot >= maxPlayers) { return; } BusinessData businessData = null; Vector3 position = ((Component)jobDispensor).transform.position; foreach (BusinessData allBusiness in allBusinesses) { if (!allBusiness.hasJobs || !(Vector3.Distance(position, allBusiness.triggerPosition) < 100f)) { continue; } businessData = allBusiness; break; } if (businessData == null || !businessData.isOwned || (businessData.ownerSaveSlot == playerSaveSlot[playerSlot] && businessData.ownerCharSlot == playerCharSlot[playerSlot])) { return; } int num = 35; int num2 = -1; for (int i = 0; i < maxPlayers; i++) { if (bInitialized[i] && playerSaveSlot[i] == businessData.ownerSaveSlot && playerCharSlot[i] == businessData.ownerCharSlot) { num2 = i; break; } } if (num2 >= 0 && (Object)(object)localCharacters[num2] != (Object)null) { MethodInfo method = ((object)localCharacters[num2]).GetType().GetMethod("GetPlayerController", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method != null) { object? obj = method.Invoke(localCharacters[num2], null); Component val = (Component)((obj is Component) ? obj : null); if ((Object)(object)val != (Object)null) { MethodInfo method2 = ((object)val).GetType().GetMethod("GetPlayerControllerEmployment", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method2 != null) { object? obj2 = method2.Invoke(val, null); Component val2 = (Component)((obj2 is Component) ? obj2 : null); if ((Object)(object)val2 != (Object)null) { MethodInfo method3 = ((object)val2).GetType().GetMethod("UpdateMoney", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method3 != null) { method3.Invoke(val2, new object[1] { -num }); } } } } } } businessData.activeWorkerCount++; Plugin plugin = Object.FindObjectOfType(); if ((Object)(object)plugin != (Object)null) { plugin.SaveAll(); } } } private const float SECONDS_PER_YEAR = 1314000f; private const float GAME_DAY_DURATION = 3600f; public static int maxPlayers = 4; public static int maxSaveSlots = 5; public static int maxCharSlots = 4; public static float[][] health = new float[5][] { new float[4] { 100f, 100f, 100f, 100f }, new float[4] { 100f, 100f, 100f, 100f }, new float[4] { 100f, 100f, 100f, 100f }, new float[4] { 100f, 100f, 100f, 100f }, new float[4] { 100f, 100f, 100f, 100f } }; public static float[][] hunger = new float[5][] { new float[4] { 100f, 100f, 100f, 100f }, new float[4] { 100f, 100f, 100f, 100f }, new float[4] { 100f, 100f, 100f, 100f }, new float[4] { 100f, 100f, 100f, 100f }, new float[4] { 100f, 100f, 100f, 100f } }; public static float[][] thirst = new float[5][] { new float[4] { 100f, 100f, 100f, 100f }, new float[4] { 100f, 100f, 100f, 100f }, new float[4] { 100f, 100f, 100f, 100f }, new float[4] { 100f, 100f, 100f, 100f }, new float[4] { 100f, 100f, 100f, 100f } }; public static float[][] fatigue = new float[5][] { new float[4], new float[4], new float[4], new float[4], new float[4] }; public static float maxFatigue = 100f; public static int[][] hospitalDebt = new int[5][] { new int[4], new int[4], new int[4], new int[4], new int[4] }; public static int[][] playerAge = new int[5][] { new int[4] { 18, 18, 18, 18 }, new int[4] { 18, 18, 18, 18 }, new int[4] { 18, 18, 18, 18 }, new int[4] { 18, 18, 18, 18 }, new int[4] { 18, 18, 18, 18 } }; public static float[][] ageTimers = new float[5][] { new float[4], new float[4], new float[4], new float[4], new float[4] }; public static bool[][] bDead = new bool[5][] { new bool[4], new bool[4], new bool[4], new bool[4], new bool[4] }; public static bool[][] bDying = new bool[5][] { new bool[4], new bool[4], new bool[4], new bool[4], new bool[4] }; public static bool[][] bFatigueCollapse = new bool[5][] { new bool[4], new bool[4], new bool[4], new bool[4], new bool[4] }; public static bool[][] bDeathByAge = new bool[5][] { new bool[4], new bool[4], new bool[4], new bool[4], new bool[4] }; public static bool[][] bShowingLifeSummary = new bool[5][] { new bool[4], new bool[4], new bool[4], new bool[4], new bool[4] }; public static int[][] totalDeaths = new int[5][] { new int[4], new int[4], new int[4], new int[4], new int[4] }; public static int[][] totalFoodEaten = new int[5][] { new int[4], new int[4], new int[4], new int[4], new int[4] }; public static string[][] playerNames = new string[5][] { new string[4] { "", "", "", "" }, new string[4] { "", "", "", "" }, new string[4] { "", "", "", "" }, new string[4] { "", "", "", "" }, new string[4] { "", "", "", "" } }; public static bool[][] namesGenerated = new bool[5][] { new bool[4], new bool[4], new bool[4], new bool[4], new bool[4] }; public static int[][] playerHouseCount = new int[5][] { new int[4], new int[4], new int[4], new int[4], new int[4] }; public static Component[] localCharacters = (Component[])(object)new Component[4]; public static int[] playerSaveSlot = new int[4] { -1, -1, -1, -1 }; public static int[] playerCharSlot = new int[4] { -1, -1, -1, -1 }; public static bool[] bInitialized = new bool[4]; public static bool[] wasDead = new bool[4]; public static bool[] needsHospitalTeleport = new bool[4]; public static bool[] firstSpawn = new bool[4] { true, true, true, true }; public static int[] lastKnownMoney = new int[4] { -1, -1, -1, -1 }; public static List allBusinesses = new List(); private float dailyCycleTimer = 0f; private List businessSigns = new List(); private bool signsSpawned = false; private string[] notificationMessage = new string[4]; private float[] notificationTimer = new float[4]; private bool[] notificationIsError = new bool[4]; private float housingCheckTimer = 0f; private float autoSaveTimer = 0f; private BusinessData[] nearestBusiness = new BusinessData[4]; private bool[] isNearBusiness = new bool[4]; private GUIStyle labelStyle; private GUIStyle debtStyle; private GUIStyle ageStyle; private Texture2D redTex; private Texture2D orangeTex; private Texture2D blueTex; private Texture2D bgTex; private Texture2D fatigueTex; private float[] eatCooldown = new float[4]; private Vector3 hospitalPos = new Vector3(-158.6f, 48.4f, 12f); private Vector3 metroStationPos = new Vector3(4.5f, 31.4f, -268.3f); private float nextPlayerScan = 0f; private float vitalsTimer = 0f; private float debtCheckTimer = 0f; private float[] hungerTimer = new float[4]; private float[] thirstTimer = new float[4]; private Dictionary[] playerHouseCosts = new Dictionary[5] { new Dictionary(), new Dictionary(), new Dictionary(), new Dictionary(), new Dictionary() }; private string[] firstNames = new string[100] { "James", "John", "Robert", "Michael", "William", "David", "Richard", "Joseph", "Thomas", "Charles", "Christopher", "Daniel", "Matthew", "Anthony", "Mark", "Donald", "Steven", "Paul", "Andrew", "Joshua", "Kenneth", "Kevin", "Brian", "George", "Edward", "Ronald", "Timothy", "Jason", "Jeffrey", "Ryan", "Jacob", "Gary", "Nicholas", "Eric", "Jonathan", "Stephen", "Larry", "Justin", "Scott", "Brandon", "Benjamin", "Samuel", "Raymond", "Gregory", "Frank", "Alexander", "Patrick", "Jack", "Dennis", "Jerry", "Tyler", "Aaron", "Jose", "Adam", "Nathan", "Henry", "Douglas", "Zachary", "Peter", "Kyle", "Walter", "Ethan", "Jeremy", "Harold", "Keith", "Christian", "Roger", "Noah", "Gerald", "Carl", "Terry", "Sean", "Austin", "Arthur", "Lawrence", "Jesse", "Dylan", "Bryan", "Joe", "Jordan", "Billy", "Bruce", "Albert", "Willie", "Gabriel", "Logan", "Alan", "Juan", "Wayne", "Roy", "Ralph", "Randy", "Eugene", "Vincent", "Russell", "Elijah", "Louis", "Bobby", "Philip", "Johnny" }; private string[] lastNames = new string[100] { "Smith", "Johnson", "Williams", "Brown", "Jones", "Garcia", "Miller", "Davis", "Rodriguez", "Martinez", "Hernandez", "Lopez", "Gonzalez", "Wilson", "Anderson", "Thomas", "Taylor", "Moore", "Jackson", "Martin", "Lee", "Perez", "Thompson", "White", "Harris", "Sanchez", "Clark", "Ramirez", "Lewis", "Robinson", "Walker", "Young", "Allen", "King", "Wright", "Scott", "Torres", "Nguyen", "Hill", "Flores", "Green", "Adams", "Nelson", "Baker", "Hall", "Rivera", "Campbell", "Mitchell", "Carter", "Roberts", "Gomez", "Phillips", "Evans", "Turner", "Diaz", "Parker", "Cruz", "Edwards", "Collins", "Reyes", "Stewart", "Morris", "Morales", "Murphy", "Cook", "Rogers", "Gutierrez", "Ortiz", "Morgan", "Cooper", "Peterson", "Bailey", "Reed", "Kelly", "Howard", "Ramos", "Kim", "Cox", "Ward", "Richardson", "Watson", "Brooks", "Chavez", "Wood", "James", "Bennett", "Gray", "Mendoza", "Ruiz", "Hughes", "Price", "Alvarez", "Castillo", "Sanders", "Patel", "Myers", "Long", "Ross", "Foster", "Jimenez" }; public static Dictionary foodDB = new Dictionary { { "PropShop_Pizza", new FoodData(40f, 5f) }, { "PropShop_Burger", new FoodData(35f, 5f) }, { "PropShop_Donut", new FoodData(15f, -5f) }, { "PropShop_HotDog", new FoodData(30f, 5f) }, { "PropShop_Steak", new FoodData(50f, 0f) }, { "PropShop_Banana", new FoodData(10f, 5f) }, { "PropShop_Apple", new FoodData(10f, 5f) }, { "PropShop_Sandwich", new FoodData(25f, 5f) }, { "PropShop_Baguette", new FoodData(30f, -5f) }, { "PropShop_Fries", new FoodData(20f, 0f) }, { "PropShop_Chicken", new FoodData(35f, 0f) }, { "PropShop_Fish", new FoodData(30f, 5f) }, { "PropShop_CakeSlice", new FoodData(25f, -5f) }, { "PropShop_Cheese", new FoodData(15f, 0f) }, { "PropShop_Ham", new FoodData(20f, 0f) }, { "PropShop_Lettuce", new FoodData(5f, 10f) }, { "PropShop_Tomato", new FoodData(5f, 10f) }, { "PropShop_Carrot", new FoodData(10f, 5f) }, { "PropShop_CauliFlower", new FoodData(10f, 5f) }, { "PropShop_SweetCorn", new FoodData(15f, 5f) }, { "PropShop_Bean", new FoodData(15f, 0f) }, { "PropShop_WaterMelon", new FoodData(15f, 25f) }, { "PropShop_BottleWater", new FoodData(0f, 50f) }, { "PropShop_SodaPop", new FoodData(5f, 35f) }, { "PropShop_Milk", new FoodData(10f, 30f) }, { "PropShop_Bread", new FoodData(15f, -10f) }, { "PropShop_CrispyCrisps", new FoodData(10f, -5f) }, { "PropShop_PopCorn", new FoodData(15f, -5f) }, { "PropShop_Cereal", new FoodData(20f, -10f) }, { "PropShop_Croissant", new FoodData(20f, -5f) }, { "PropShop_LargeCake", new FoodData(50f, -10f) }, { "PropShop_Chocolate", new FoodData(15f, -5f) }, { "PropShop_ChocolateLolly", new FoodData(10f, -5f) }, { "PropShop_Eclair", new FoodData(20f, -5f) }, { "PropShop_IceCreamCone", new FoodData(10f, 5f) }, { "PropShop_IceCreamSoft", new FoodData(15f, 5f) }, { "PropShop_IceCreamTub", new FoodData(30f, 5f) }, { "PropShop_IceSlice", new FoodData(10f, 10f) }, { "PropShop_IceLolly", new FoodData(10f, 10f) }, { "PropShop_TwoStickIceLolly", new FoodData(15f, 10f) }, { "PropShop_JamJar", new FoodData(10f, 0f) }, { "PropShop_Barrito", new FoodData(35f, 0f) }, { "PropShop_VeggieSausage", new FoodData(20f, 5f) }, { "Space_PropShop_EnergyDrink", new FoodData(5f, 40f, -30f) }, { "SpaceDiner_Drink_Coffee", new FoodData(5f, 25f, -25f) }, { "SpaceDiner_Drink_Water", new FoodData(0f, 50f) }, { "SpaceDiner_Drink_Soda", new FoodData(5f, 30f) }, { "SpaceDiner_Drink_Milkshake", new FoodData(10f, 30f, -10f) }, { "SpaceDiner_Food_Burger", new FoodData(35f, 5f) }, { "SpaceDiner_Food_Chips", new FoodData(20f, 0f) }, { "SpaceDiner_Food_Pancakes", new FoodData(25f, 5f) }, { "SpaceDiner_Food_Pizza", new FoodData(40f, 5f) }, { "SpaceDiner_Food_Spaghetti", new FoodData(35f, 5f) } }; private void Awake() { //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Expected O, but got Unknown for (int i = 0; i < maxSaveSlots; i++) { for (int j = 0; j < maxCharSlots; j++) { health[i][j] = 100f; hunger[i][j] = 100f; thirst[i][j] = 100f; playerAge[i][j] = 18; playerNames[i][j] = ""; namesGenerated[i][j] = false; } } for (int k = 0; k < maxPlayers; k++) { notificationMessage[k] = ""; notificationTimer[k] = 0f; nearestBusiness[k] = null; isNearBusiness[k] = false; playerSaveSlot[k] = -1; playerCharSlot[k] = -1; } InitializeBusinesses(); LoadGlobalBusinesses(); Harmony val = new Harmony("com.wobblylife.plus"); val.PatchAll(); Debug.Log((object)"[WobblyLife+] v2.0.0 - Economy Overhaul Ready"); } private string GetCharFilePath(int saveSlot, int charSlot) { return Path.Combine(Paths.PluginPath, $"WobblyLifePlus_Slot{saveSlot}_Char{charSlot}.json"); } private string GetGlobalBusinessPath() { return Path.Combine(Paths.PluginPath, "WobblyLifePlus_GlobalBusinesses.json"); } private void LoadGlobalBusinesses() { string globalBusinessPath = GetGlobalBusinessPath(); if (!File.Exists(globalBusinessPath)) { return; } try { GlobalBusinessData globalBusinessData = JsonUtility.FromJson(File.ReadAllText(globalBusinessPath)); if (globalBusinessData == null || globalBusinessData.businesses == null) { return; } foreach (GlobalBusinessEntry e in globalBusinessData.businesses) { List list = allBusinesses; Predicate match = (BusinessData b) => b.businessId == e.businessId; BusinessData businessData = list.Find(match); if (businessData != null) { businessData.isOwned = e.isOwned; businessData.ownerSaveSlot = e.ownerSaveSlot; businessData.ownerCharSlot = e.ownerCharSlot; } } } catch { } } private void SaveGlobalBusinesses() { GlobalBusinessData globalBusinessData = new GlobalBusinessData(); foreach (BusinessData allBusiness in allBusinesses) { globalBusinessData.businesses.Add(new GlobalBusinessEntry { businessId = allBusiness.businessId, isOwned = allBusiness.isOwned, ownerSaveSlot = allBusiness.ownerSaveSlot, ownerCharSlot = allBusiness.ownerCharSlot }); } try { File.WriteAllText(GetGlobalBusinessPath(), JsonUtility.ToJson((object)globalBusinessData, true)); } catch { } } private void LoadCharacter(int saveSlot, int charSlot) { string charFilePath = GetCharFilePath(saveSlot, charSlot); if (!File.Exists(charFilePath)) { GenerateNameForCharacter(saveSlot, charSlot); SaveCharacter(saveSlot, charSlot); return; } try { CharacterFullData characterFullData = JsonUtility.FromJson(File.ReadAllText(charFilePath)); if (characterFullData == null) { GenerateNameForCharacter(saveSlot, charSlot); SaveCharacter(saveSlot, charSlot); return; } if (!string.IsNullOrEmpty(characterFullData.name)) { playerNames[saveSlot][charSlot] = characterFullData.name; namesGenerated[saveSlot][charSlot] = characterFullData.nameGenerated; } else { GenerateNameForCharacter(saveSlot, charSlot); } playerAge[saveSlot][charSlot] = characterFullData.age; ageTimers[saveSlot][charSlot] = characterFullData.ageTimer; health[saveSlot][charSlot] = characterFullData.health; hunger[saveSlot][charSlot] = characterFullData.hunger; thirst[saveSlot][charSlot] = characterFullData.thirst; fatigue[saveSlot][charSlot] = characterFullData.fatigue; hospitalDebt[saveSlot][charSlot] = characterFullData.hospitalDebt; totalDeaths[saveSlot][charSlot] = characterFullData.totalDeaths; totalFoodEaten[saveSlot][charSlot] = characterFullData.totalFoodEaten; playerHouseCount[saveSlot][charSlot] = characterFullData.houseCount; playerHouseCosts[saveSlot].Clear(); if (characterFullData.houseCosts != null) { for (int i = 0; i < characterFullData.houseCosts.Count; i++) { playerHouseCosts[saveSlot][i] = characterFullData.houseCosts[i]; } } if (characterFullData.businesses == null) { return; } foreach (BusinessOwnedEntry be in characterFullData.businesses) { List list = allBusinesses; Predicate match = (BusinessData b) => b.businessId == be.businessId; BusinessData businessData = list.Find(match); if (businessData != null && businessData.isOwned && businessData.ownerSaveSlot == saveSlot && businessData.ownerCharSlot == charSlot) { businessData.activeWorkerCount = be.activeWorkerCount; } } } catch { GenerateNameForCharacter(saveSlot, charSlot); SaveCharacter(saveSlot, charSlot); } } public void SaveCharacter(int saveSlot, int charSlot) { CharacterFullData characterFullData = new CharacterFullData(); characterFullData.age = playerAge[saveSlot][charSlot]; characterFullData.name = playerNames[saveSlot][charSlot]; characterFullData.nameGenerated = namesGenerated[saveSlot][charSlot]; characterFullData.ageTimer = ageTimers[saveSlot][charSlot]; characterFullData.health = health[saveSlot][charSlot]; characterFullData.hunger = hunger[saveSlot][charSlot]; characterFullData.thirst = thirst[saveSlot][charSlot]; characterFullData.fatigue = fatigue[saveSlot][charSlot]; characterFullData.hospitalDebt = hospitalDebt[saveSlot][charSlot]; characterFullData.totalDeaths = totalDeaths[saveSlot][charSlot]; characterFullData.totalFoodEaten = totalFoodEaten[saveSlot][charSlot]; characterFullData.houseCount = playerHouseCount[saveSlot][charSlot]; CharacterFullData characterFullData2 = characterFullData; if (playerHouseCosts[saveSlot] != null) { foreach (KeyValuePair item in playerHouseCosts[saveSlot]) { characterFullData2.houseCosts.Add(item.Value); } } foreach (BusinessData allBusiness in allBusinesses) { if (allBusiness.isOwned && allBusiness.ownerSaveSlot == saveSlot && allBusiness.ownerCharSlot == charSlot) { characterFullData2.businesses.Add(new BusinessOwnedEntry { businessId = allBusiness.businessId, activeWorkerCount = allBusiness.activeWorkerCount }); } } try { File.WriteAllText(GetCharFilePath(saveSlot, charSlot), JsonUtility.ToJson((object)characterFullData2, true)); } catch { } } public void SaveAll() { SaveGlobalBusinesses(); for (int i = 0; i < maxSaveSlots; i++) { for (int j = 0; j < maxCharSlots; j++) { SaveCharacter(i, j); } } } private void GenerateNameForCharacter(int saveSlot, int charSlot) { if (!namesGenerated[saveSlot][charSlot] || string.IsNullOrEmpty(playerNames[saveSlot][charSlot])) { playerNames[saveSlot][charSlot] = firstNames[Random.Range(0, firstNames.Length)] + " " + lastNames[Random.Range(0, lastNames.Length)]; namesGenerated[saveSlot][charSlot] = true; } } private void InitializeBusinesses() { //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_0260: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_030a: Unknown result type (might be due to invalid IL or missing references) //IL_030f: Unknown result type (might be due to invalid IL or missing references) //IL_03b5: Unknown result type (might be due to invalid IL or missing references) //IL_03ba: Unknown result type (might be due to invalid IL or missing references) //IL_0460: Unknown result type (might be due to invalid IL or missing references) //IL_0465: Unknown result type (might be due to invalid IL or missing references) //IL_050b: Unknown result type (might be due to invalid IL or missing references) //IL_0510: Unknown result type (might be due to invalid IL or missing references) //IL_05b6: Unknown result type (might be due to invalid IL or missing references) //IL_05bb: Unknown result type (might be due to invalid IL or missing references) //IL_0661: Unknown result type (might be due to invalid IL or missing references) //IL_0666: Unknown result type (might be due to invalid IL or missing references) //IL_070c: Unknown result type (might be due to invalid IL or missing references) //IL_0711: Unknown result type (might be due to invalid IL or missing references) //IL_07b7: Unknown result type (might be due to invalid IL or missing references) //IL_07bc: Unknown result type (might be due to invalid IL or missing references) //IL_0862: Unknown result type (might be due to invalid IL or missing references) //IL_0867: Unknown result type (might be due to invalid IL or missing references) //IL_090d: Unknown result type (might be due to invalid IL or missing references) //IL_0912: Unknown result type (might be due to invalid IL or missing references) //IL_09b8: Unknown result type (might be due to invalid IL or missing references) //IL_09bd: Unknown result type (might be due to invalid IL or missing references) //IL_0a63: Unknown result type (might be due to invalid IL or missing references) //IL_0a68: Unknown result type (might be due to invalid IL or missing references) //IL_0b0e: Unknown result type (might be due to invalid IL or missing references) //IL_0b13: Unknown result type (might be due to invalid IL or missing references) //IL_0bb9: Unknown result type (might be due to invalid IL or missing references) //IL_0bbe: Unknown result type (might be due to invalid IL or missing references) //IL_0c64: Unknown result type (might be due to invalid IL or missing references) //IL_0c69: Unknown result type (might be due to invalid IL or missing references) //IL_0d0f: Unknown result type (might be due to invalid IL or missing references) //IL_0d14: Unknown result type (might be due to invalid IL or missing references) //IL_0dba: Unknown result type (might be due to invalid IL or missing references) //IL_0dbf: Unknown result type (might be due to invalid IL or missing references) //IL_0e65: Unknown result type (might be due to invalid IL or missing references) //IL_0e6a: Unknown result type (might be due to invalid IL or missing references) //IL_0f10: Unknown result type (might be due to invalid IL or missing references) //IL_0f15: Unknown result type (might be due to invalid IL or missing references) //IL_0fbb: Unknown result type (might be due to invalid IL or missing references) //IL_0fc0: Unknown result type (might be due to invalid IL or missing references) //IL_1066: Unknown result type (might be due to invalid IL or missing references) //IL_106b: Unknown result type (might be due to invalid IL or missing references) //IL_1111: Unknown result type (might be due to invalid IL or missing references) //IL_1116: Unknown result type (might be due to invalid IL or missing references) //IL_11bc: Unknown result type (might be due to invalid IL or missing references) //IL_11c1: Unknown result type (might be due to invalid IL or missing references) //IL_1267: Unknown result type (might be due to invalid IL or missing references) //IL_126c: Unknown result type (might be due to invalid IL or missing references) //IL_1312: Unknown result type (might be due to invalid IL or missing references) //IL_1317: Unknown result type (might be due to invalid IL or missing references) //IL_13bd: Unknown result type (might be due to invalid IL or missing references) //IL_13c2: Unknown result type (might be due to invalid IL or missing references) //IL_1468: Unknown result type (might be due to invalid IL or missing references) //IL_146d: Unknown result type (might be due to invalid IL or missing references) //IL_1513: Unknown result type (might be due to invalid IL or missing references) //IL_1518: Unknown result type (might be due to invalid IL or missing references) //IL_15be: Unknown result type (might be due to invalid IL or missing references) //IL_15c3: Unknown result type (might be due to invalid IL or missing references) //IL_1669: Unknown result type (might be due to invalid IL or missing references) //IL_166e: Unknown result type (might be due to invalid IL or missing references) //IL_1714: Unknown result type (might be due to invalid IL or missing references) //IL_1719: Unknown result type (might be due to invalid IL or missing references) //IL_17bf: Unknown result type (might be due to invalid IL or missing references) //IL_17c4: Unknown result type (might be due to invalid IL or missing references) //IL_186a: Unknown result type (might be due to invalid IL or missing references) //IL_186f: Unknown result type (might be due to invalid IL or missing references) //IL_1915: Unknown result type (might be due to invalid IL or missing references) //IL_191a: Unknown result type (might be due to invalid IL or missing references) //IL_19c0: Unknown result type (might be due to invalid IL or missing references) //IL_19c5: Unknown result type (might be due to invalid IL or missing references) //IL_1a6b: Unknown result type (might be due to invalid IL or missing references) //IL_1a70: Unknown result type (might be due to invalid IL or missing references) //IL_1b16: Unknown result type (might be due to invalid IL or missing references) //IL_1b1b: Unknown result type (might be due to invalid IL or missing references) //IL_1bc1: Unknown result type (might be due to invalid IL or missing references) //IL_1bc6: Unknown result type (might be due to invalid IL or missing references) allBusinesses.Add(new BusinessData { businessId = "wobbly_pizza", businessName = "Wobbly Pizza", businessType = "pizzeria", purchasePrice = 12000, dailyIncome = 900, dailyExpenses = 350, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = true, workerBonus = 0.25f, activeWorkerCount = 0, triggerPosition = new Vector3(-21.11f, 39.89f, -339.04f) }); allBusinesses.Add(new BusinessData { businessId = "wobbly_burger", businessName = "Wobbly Burger", businessType = "diner", purchasePrice = 10000, dailyIncome = 800, dailyExpenses = 300, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = true, workerBonus = 0.25f, activeWorkerCount = 0, triggerPosition = new Vector3(-131.35f, 39.37f, -153.61f) }); allBusinesses.Add(new BusinessData { businessId = "wobbly_tv", businessName = "Wobbly TV", businessType = "tv_station", purchasePrice = 35000, dailyIncome = 2500, dailyExpenses = 1100, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = true, workerBonus = 0.25f, activeWorkerCount = 0, triggerPosition = new Vector3(-315.47f, 39.39f, -92.16f) }); allBusinesses.Add(new BusinessData { businessId = "wobbly_disco", businessName = "Wobbly Disco", businessType = "disco_club", purchasePrice = 20000, dailyIncome = 1600, dailyExpenses = 700, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = true, workerBonus = 0.25f, activeWorkerCount = 0, triggerPosition = new Vector3(-287.78f, 39.39f, -224.28f) }); allBusinesses.Add(new BusinessData { businessId = "city_taxi", businessName = "City Taxi", businessType = "taxi", purchasePrice = 8000, dailyIncome = 700, dailyExpenses = 300, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = true, workerBonus = 0.25f, activeWorkerCount = 0, triggerPosition = new Vector3(-222.72f, 39.36f, -188.41f) }); allBusinesses.Add(new BusinessData { businessId = "the_wobbly_marina", businessName = "The Wobbly Marina", businessType = "marina", purchasePrice = 15000, dailyIncome = 1100, dailyExpenses = 450, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = true, workerBonus = 0.25f, activeWorkerCount = 0, triggerPosition = new Vector3(740.54f, 7.33f, -103.81f) }); allBusinesses.Add(new BusinessData { businessId = "post_office", businessName = "Post Office", businessType = "post_office", purchasePrice = 12000, dailyIncome = 950, dailyExpenses = 400, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = true, workerBonus = 0.25f, activeWorkerCount = 0, triggerPosition = new Vector3(524.79f, 35.33f, 34.5f) }); allBusinesses.Add(new BusinessData { businessId = "village_taxi", businessName = "Village Taxi", businessType = "taxi", purchasePrice = 8000, dailyIncome = 700, dailyExpenses = 300, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = true, workerBonus = 0.25f, activeWorkerCount = 0, triggerPosition = new Vector3(267.67f, 21.69f, 263.11f) }); allBusinesses.Add(new BusinessData { businessId = "dock_bait", businessName = "Dock Bait", businessType = "marina", purchasePrice = 8000, dailyIncome = 600, dailyExpenses = 250, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = true, workerBonus = 0.25f, activeWorkerCount = 0, triggerPosition = new Vector3(-818.48f, 7.73f, -441.13f) }); allBusinesses.Add(new BusinessData { businessId = "paradise_taxi", businessName = "Paradise Taxi", businessType = "taxi", purchasePrice = 8000, dailyIncome = 700, dailyExpenses = 300, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = true, workerBonus = 0.25f, activeWorkerCount = 0, triggerPosition = new Vector3(556.99f, 12.06f, -1236.02f) }); allBusinesses.Add(new BusinessData { businessId = "ice_cream_world", businessName = "Ice-Cream World", businessType = "cafe", purchasePrice = 8000, dailyIncome = 650, dailyExpenses = 280, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = true, workerBonus = 0.25f, activeWorkerCount = 0, triggerPosition = new Vector3(476.39f, 13.54f, -1193.53f) }); allBusinesses.Add(new BusinessData { businessId = "farm", businessName = "Farm", businessType = "farm", purchasePrice = 25000, dailyIncome = 1800, dailyExpenses = 800, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = true, workerBonus = 0.25f, activeWorkerCount = 0, triggerPosition = new Vector3(-1157.55f, 56.8f, -29.63f) }); allBusinesses.Add(new BusinessData { businessId = "sawmill", businessName = "Sawmill", businessType = "sawmill", purchasePrice = 18000, dailyIncome = 1300, dailyExpenses = 550, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = true, workerBonus = 0.25f, activeWorkerCount = 0, triggerPosition = new Vector3(-1055.44f, 57.09f, 803.66f) }); allBusinesses.Add(new BusinessData { businessId = "jungle_bait", businessName = "Jungle Bait", businessType = "marina", purchasePrice = 8000, dailyIncome = 600, dailyExpenses = 250, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = true, workerBonus = 0.25f, activeWorkerCount = 0, triggerPosition = new Vector3(1378.74f, 8.41f, 579.04f) }); allBusinesses.Add(new BusinessData { businessId = "pine_design_furniture", businessName = "Pine Design Furniture", businessType = "furniture_store", purchasePrice = 15000, dailyIncome = 1100, dailyExpenses = 500, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = true, workerBonus = 0.25f, activeWorkerCount = 0, triggerPosition = new Vector3(-751.17f, 122.32f, 670.76f) }); allBusinesses.Add(new BusinessData { businessId = "park", businessName = "Park", businessType = "amusement_park", purchasePrice = 75000, dailyIncome = 4200, dailyExpenses = 2000, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-200.35f, 40.13f, -378.59f) }); allBusinesses.Add(new BusinessData { businessId = "main_gas", businessName = "Main Gas", businessType = "gas_station", purchasePrice = 8000, dailyIncome = 600, dailyExpenses = 250, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-113.21f, 40.05f, -319.5f) }); allBusinesses.Add(new BusinessData { businessId = "cars_for_sale", businessName = "Cars For Sale", businessType = "car_dealership", purchasePrice = 60000, dailyIncome = 3500, dailyExpenses = 1600, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-116.48f, 40.05f, -256.47f) }); allBusinesses.Add(new BusinessData { businessId = "squishy_electronics", businessName = "Squishy Electronics", businessType = "electronics_store", purchasePrice = 20000, dailyIncome = 1400, dailyExpenses = 650, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-131.25f, 39.39f, -183.7f) }); allBusinesses.Add(new BusinessData { businessId = "wobbly_cinema", businessName = "Wobbly Cinema", businessType = "cinema", purchasePrice = 30000, dailyIncome = 2000, dailyExpenses = 900, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-116.06f, 39.73f, -84.15f) }); allBusinesses.Add(new BusinessData { businessId = "streetwear_urbanstyle", businessName = "StreetWear UrbanStyle", businessType = "clothing_store", purchasePrice = 15000, dailyIncome = 1100, dailyExpenses = 500, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-239.04f, 39.39f, -54.3f) }); allBusinesses.Add(new BusinessData { businessId = "wobbly_bank", businessName = "Wobbly Bank", businessType = "bank", purchasePrice = 150000, dailyIncome = 7500, dailyExpenses = 2800, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-306.33f, 39.93f, -163.99f) }); allBusinesses.Add(new BusinessData { businessId = "el_wobbles", businessName = "El Wobbles", businessType = "drink_bar", purchasePrice = 15000, dailyIncome = 1200, dailyExpenses = 550, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-227.11f, 39.39f, -224.51f) }); allBusinesses.Add(new BusinessData { businessId = "wobbly_museum", businessName = "Wobbly Museum", businessType = "museum", purchasePrice = 55000, dailyIncome = 3200, dailyExpenses = 1400, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-576.32f, 53.04f, -270.59f) }); allBusinesses.Add(new BusinessData { businessId = "wobbly_bowling", businessName = "Wobbly Bowling", businessType = "bowling_club", purchasePrice = 25000, dailyIncome = 1700, dailyExpenses = 750, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-453.71f, 66.48f, -0.42f) }); allBusinesses.Add(new BusinessData { businessId = "disaster_drive_gas", businessName = "Disaster Drive Gas", businessType = "gas_station", purchasePrice = 8000, dailyIncome = 600, dailyExpenses = 250, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-509.13f, 90.3f, 200.89f) }); allBusinesses.Add(new BusinessData { businessId = "wobbly_mall", businessName = "Wobbly Mall", businessType = "mall", purchasePrice = 45000, dailyIncome = 2800, dailyExpenses = 1200, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(281.15f, 40.15f, -213.32f) }); allBusinesses.Add(new BusinessData { businessId = "wobbly_mall_gas", businessName = "Wobbly Mall Gas", businessType = "gas_station", purchasePrice = 8000, dailyIncome = 600, dailyExpenses = 250, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(318.24f, 39.95f, -148.56f) }); allBusinesses.Add(new BusinessData { businessId = "fresh_fur_fashion", businessName = "Fresh Fur Fashion", businessType = "clothing_store", purchasePrice = 15000, dailyIncome = 1100, dailyExpenses = 500, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-728.81f, 122.29f, 670.69f) }); allBusinesses.Add(new BusinessData { businessId = "mayors_assistent", businessName = "Mayor's Assistant", businessType = "mayor_office", purchasePrice = 100000, dailyIncome = 5000, dailyExpenses = 2000, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-383.12f, 47.75f, -321.4f) }); allBusinesses.Add(new BusinessData { businessId = "bus_station", businessName = "Bus Station", businessType = "bus_station", purchasePrice = 20000, dailyIncome = 1500, dailyExpenses = 650, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-427.51f, 40.11f, -405.29f) }); allBusinesses.Add(new BusinessData { businessId = "swimming_pool", businessName = "Swimming Pool", businessType = "swimming_pool", purchasePrice = 20000, dailyIncome = 1500, dailyExpenses = 700, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-484.84f, 42.09f, -415.82f) }); allBusinesses.Add(new BusinessData { businessId = "groceries", businessName = "Groceries", businessType = "grocery_store", purchasePrice = 10000, dailyIncome = 750, dailyExpenses = 350, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-279.57f, 40.13f, -346.69f) }); allBusinesses.Add(new BusinessData { businessId = "beachside_boutique", businessName = "Beachside Boutique", businessType = "clothing_store", purchasePrice = 15000, dailyIncome = 1100, dailyExpenses = 500, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(473.38f, 15.73f, -1057.58f) }); allBusinesses.Add(new BusinessData { businessId = "pets_away_from_home", businessName = "Pets Away From Home", businessType = "pet_store", purchasePrice = 12000, dailyIncome = 900, dailyExpenses = 400, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(518.75f, 14.82f, -1078.05f) }); allBusinesses.Add(new BusinessData { businessId = "the_coffe_bean_kiosk", businessName = "The Coffee Bean Kiosk", businessType = "cafe", purchasePrice = 5000, dailyIncome = 400, dailyExpenses = 180, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(399.48f, 15.73f, -1113.79f) }); allBusinesses.Add(new BusinessData { businessId = "paradise_gas", businessName = "Paradise Gas", businessType = "gas_station", purchasePrice = 8000, dailyIncome = 600, dailyExpenses = 250, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(707.77f, 33.3f, -1009.39f) }); allBusinesses.Add(new BusinessData { businessId = "magic_motors", businessName = "Magic Motors", businessType = "car_dealership", purchasePrice = 60000, dailyIncome = 3500, dailyExpenses = 1600, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(767.59f, 39.12f, -915.64f) }); allBusinesses.Add(new BusinessData { businessId = "wobbly_golf", businessName = "Wobbly Golf", businessType = "golf_club", purchasePrice = 100000, dailyIncome = 5000, dailyExpenses = 2200, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(1066.59f, 86.09f, -901.77f) }); allBusinesses.Add(new BusinessData { businessId = "pets", businessName = "Pets", businessType = "pet_store", purchasePrice = 12000, dailyIncome = 900, dailyExpenses = 400, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-1006.37f, 57.11f, 373.69f) }); allBusinesses.Add(new BusinessData { businessId = "mountains_gas", businessName = "Mountains Gas", businessType = "gas_station", purchasePrice = 8000, dailyIncome = 600, dailyExpenses = 250, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(-539.25f, 157.45f, 742.79f) }); allBusinesses.Add(new BusinessData { businessId = "sawmill_express", businessName = "Sawmill Express", businessType = "sawmill", purchasePrice = 18000, dailyIncome = 1300, dailyExpenses = 550, isOwned = false, ownerSaveSlot = -1, ownerCharSlot = -1, hasJobs = false, workerBonus = 0f, activeWorkerCount = 0, triggerPosition = new Vector3(0f, 0f, 0f) }); } private void OnDestroy() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) SaveAll(); new Harmony("com.wobblylife.plus").UnpatchSelf(); DestroyAllSigns(); } private void OnApplicationQuit() { SaveAll(); } private void DestroyAllSigns() { foreach (GameObject businessSign in businessSigns) { if ((Object)(object)businessSign != (Object)null) { Object.Destroy((Object)(object)businessSign); } } businessSigns.Clear(); signsSpawned = false; } private void Update() { float time = Time.time; if (time >= nextPlayerScan) { nextPlayerScan = time + 3f; ScanPlayers(); } for (int i = 0; i < maxPlayers; i++) { if (bInitialized[i] && playerSaveSlot[i] >= 0 && playerCharSlot[i] >= 0 && string.IsNullOrEmpty(playerNames[playerSaveSlot[i]][playerCharSlot[i]])) { LoadCharacter(playerSaveSlot[i], playerCharSlot[i]); } } if (!signsSpawned && bInitialized[0]) { SpawnBusinessSigns(); } if (signsSpawned && !HasAnyPlayer()) { DestroyAllSigns(); } debtCheckTimer += Time.deltaTime; if (debtCheckTimer >= 2f) { debtCheckTimer = 0f; CheckDebtRepayment(); } dailyCycleTimer += Time.deltaTime; if (dailyCycleTimer >= 3600f) { dailyCycleTimer = 0f; ProcessDailyBusinessCycle(); } housingCheckTimer += Time.deltaTime; if (housingCheckTimer >= 10f) { housingCheckTimer = 0f; CheckHousing(); } autoSaveTimer += Time.deltaTime; if (autoSaveTimer >= 60f) { autoSaveTimer = 0f; if (HasAnyPlayer()) { SaveAll(); } } for (int j = 0; j < maxPlayers; j++) { if (notificationTimer[j] > 0f) { notificationTimer[j] -= Time.deltaTime; } } for (int i = 0; i < maxPlayers; i++) { int num = playerSaveSlot[i]; int num2 = playerCharSlot[i]; if (!bInitialized[i] || num < 0 || num2 < 0 || bShowingLifeSummary[num][num2]) { continue; } ageTimers[num][num2] += Time.deltaTime; if (ageTimers[num][num2] >= 1314000f) { ageTimers[num][num2] = 0f; playerAge[num][num2]++; if (playerAge[num][num2] >= 65 && playerAge[num][num2] % 30 == 0) { ChargePlayer(i, 50); } if (playerAge[num][num2] >= 65 && !bDying[num][num2] && !bDead[num][num2] && Random.value < (float)(playerAge[num][num2] - 65) * 0.02f) { bDeathByAge[num][num2] = true; bShowingLifeSummary[num][num2] = true; ((MonoBehaviour)this).StartCoroutine(DeathByAgeSequence(num, num2, i)); } } if (!((Object)(object)localCharacters[i] != (Object)null)) { continue; } MethodInfo method = ((object)localCharacters[i]).GetType().GetMethod("IsDead", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method != null && (bool)method.Invoke(localCharacters[i], null)) { if (!wasDead[i]) { totalDeaths[num][num2]++; if (!bDeathByAge[num][num2]) { int playerMoney = GetPlayerMoney(i); int num3 = 100; if (playerMoney >= num3) { ChargePlayer(i, -num3); } else { if (playerMoney > 0) { ChargePlayer(i, -playerMoney); } hospitalDebt[num][num2] += num3 - playerMoney; } } health[num][num2] = 100f; hunger[num][num2] = 100f; thirst[num][num2] = 100f; fatigue[num][num2] = 0f; bDead[num][num2] = false; bDying[num][num2] = false; needsHospitalTeleport[i] = true; SaveCharacter(num, num2); } wasDead[i] = true; } else { wasDead[i] = false; } MethodInfo method2 = ((object)localCharacters[i]).GetType().GetMethod("IsSleeping", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method2 != null && (bool)method2.Invoke(localCharacters[i], null) && fatigue[num][num2] > 0f) { fatigue[num][num2] = Mathf.Max(fatigue[num][num2] - 3f, 0f); if (fatigue[num][num2] <= 0f) { bFatigueCollapse[num][num2] = false; } } } CheckAllBusinessInteraction(); vitalsTimer += Time.deltaTime; if (vitalsTimer >= 1f) { vitalsTimer = 0f; UpdateVitals(); } for (int j = 0; j < maxPlayers; j++) { eatCooldown[j] -= Time.deltaTime; } for (int i = 0; i < maxPlayers; i++) { int num = playerSaveSlot[i]; int num2 = playerCharSlot[i]; if (!bInitialized[i] || num < 0 || bDying[num][num2] || eatCooldown[i] > 0f || bFatigueCollapse[num][num2] || bShowingLifeSummary[num][num2]) { continue; } bool flag = i == 0 && Input.GetKeyDown((KeyCode)102); if (!flag) { try { flag = Input.GetKeyDown("joystick " + (i + 1) + " button 0"); } catch { } } if (flag) { TryEatFood(i); } } } private bool HasAnyPlayer() { for (int i = 0; i < maxPlayers; i++) { if (bInitialized[i]) { return true; } } return false; } private int GetCurrentSaveSlot() { try { ComputerSaveGameManager instance = SaveGameManager.Instance; if ((Object)(object)instance != (Object)null) { SaveSlotInfoData activeSlotData = ((SaveGameManager)instance).GetActiveSlotData(); if (activeSlotData != null) { return activeSlotData.GetSaveSlot() - 1; } } } catch { } return 0; } private void ScanPlayers() { //IL_03b4: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < maxPlayers; i++) { if (bInitialized[i] && ((Object)(object)localCharacters[i] == (Object)null || (Object)(object)localCharacters[i].gameObject == (Object)null)) { bInitialized[i] = false; localCharacters[i] = null; } } int currentSaveSlot = GetCurrentSaveSlot(); MonoBehaviour[] array = Object.FindObjectsOfType(true); foreach (MonoBehaviour val in array) { if ((Object)(object)val == (Object)null || ((object)val).GetType().Name != "GameInstance") { continue; } MethodInfo method = ((object)val).GetType().GetMethod("GetPlayerCharacters", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method == null || !(method.Invoke(val, null) is IList list)) { continue; } bool[] array2 = new bool[maxPlayers]; foreach (object item in list) { if (item == null) { continue; } Component val2 = (Component)((item is Component) ? item : null); if ((Object)(object)val2 == (Object)null || (Object)(object)val2.gameObject == (Object)null) { continue; } MethodInfo method2 = ((object)val2).GetType().GetMethod("GetPlayerController", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method2 == null) { continue; } object? obj = method2.Invoke(val2, null); Component val3 = (Component)((obj is Component) ? obj : null); if ((Object)(object)val3 == (Object)null) { continue; } MethodInfo method3 = ((object)val3).GetType().GetMethod("IsLocal", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method3 == null || !(bool)method3.Invoke(val3, null)) { continue; } MethodInfo method4 = ((object)val3).GetType().GetMethod("GetLocalPlayerid", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); int i = 0; if (method4 != null) { i = (int)method4.Invoke(val3, null); } if (i >= maxPlayers) { continue; } array2[i] = true; int num = 0; Type type = Type.GetType("LocalPlayerManager, Game"); if (type != null) { MethodInfo method5 = type.GetMethod("GetPlayerSelectedSlot", BindingFlags.Static | BindingFlags.Public); if (method5 != null) { num = (int)method5.Invoke(null, new object[1] { i }); } } if (num < 0) { num = 0; } if (playerSaveSlot[i] != currentSaveSlot || playerCharSlot[i] != num) { if (playerSaveSlot[i] >= 0 && playerCharSlot[i] >= 0) { SaveCharacter(playerSaveSlot[i], playerCharSlot[i]); } playerSaveSlot[i] = currentSaveSlot; playerCharSlot[i] = num; LoadCharacter(currentSaveSlot, num); } if (!((Object)(object)localCharacters[i] != (Object)(object)val2)) { continue; } if (firstSpawn[i]) { firstSpawn[i] = false; } else if (needsHospitalTeleport[i]) { needsHospitalTeleport[i] = false; MethodInfo method6 = ((object)val2).GetType().GetMethod("SetPlayerPosition", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method6 != null) { method6.Invoke(val2, new object[1] { hospitalPos }); } } localCharacters[i] = val2; bInitialized[i] = true; } for (int k = 0; k < maxPlayers; k++) { if (!array2[k] && bInitialized[k]) { if (playerSaveSlot[k] >= 0 && playerCharSlot[k] >= 0) { SaveCharacter(playerSaveSlot[k], playerCharSlot[k]); } bInitialized[k] = false; localCharacters[k] = null; } } break; } } private void CheckAllBusinessInteraction() { //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: 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_004d: 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_009c: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < maxPlayers; i++) { if (!bInitialized[i] || (Object)(object)localCharacters[i] == (Object)null) { isNearBusiness[i] = false; nearestBusiness[i] = null; continue; } Vector3 playerPos = GetPlayerPos(i); if (playerPos == Vector3.zero) { isNearBusiness[i] = false; nearestBusiness[i] = null; continue; } BusinessData businessData = null; float num = 5f; foreach (BusinessData allBusiness in allBusinesses) { float num2 = Vector3.Distance(playerPos, allBusiness.triggerPosition); if (num2 < num) { num = num2; businessData = allBusiness; } } nearestBusiness[i] = businessData; isNearBusiness[i] = businessData != null; if (businessData == null) { continue; } bool keyDown = Input.GetKeyDown((KeyCode)102); if (!keyDown) { try { keyDown = Input.GetKeyDown("joystick " + (i + 1) + " button 3"); } catch { } } if (keyDown) { int num3 = playerSaveSlot[i]; int num4 = playerCharSlot[i]; if (businessData.isOwned && businessData.ownerSaveSlot == num3 && businessData.ownerCharSlot == num4) { SellBusiness(i, businessData); } else if (!businessData.isOwned) { BuyBusiness(i, businessData); } } } } private void BuyBusiness(int pid, BusinessData biz) { //IL_009d: Unknown result type (might be due to invalid IL or missing references) if (!biz.isOwned && !((Object)(object)localCharacters[pid] == (Object)null)) { int playerMoney = GetPlayerMoney(pid); if (playerMoney < biz.purchasePrice) { ShowNotification(pid, "Need $" + (biz.purchasePrice - playerMoney) + " more!", err: true); return; } ChargePlayer(pid, -biz.purchasePrice); biz.isOwned = true; biz.ownerSaveSlot = playerSaveSlot[pid]; biz.ownerCharSlot = playerCharSlot[pid]; UpdateSignColor(biz.businessId, Color.green); ShowNotification(pid, "Purchased " + biz.businessName + "!", err: false); SaveAll(); } } private void SellBusiness(int pid, BusinessData biz) { //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) if (biz.isOwned && biz.ownerSaveSlot == playerSaveSlot[pid] && biz.ownerCharSlot == playerCharSlot[pid]) { int num = Mathf.RoundToInt((float)biz.purchasePrice * 0.7f); ChargePlayer(pid, num); biz.isOwned = false; biz.ownerSaveSlot = -1; biz.ownerCharSlot = -1; biz.activeWorkerCount = 0; UpdateSignColor(biz.businessId, biz.hasJobs ? Color.yellow : Color.white); ShowNotification(pid, "Sold " + biz.businessName + " for $" + num + "!", err: false); SaveAll(); } } private void SpawnBusinessSigns() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: 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_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Expected O, but got Unknown //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Expected O, but got Unknown //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) if (signsSpawned) { return; } DestroyAllSigns(); foreach (BusinessData allBusiness in allBusinesses) { if (!(allBusiness.triggerPosition == Vector3.zero)) { GameObject val = GameObject.CreatePrimitive((PrimitiveType)2); val.transform.position = allBusiness.triggerPosition; val.transform.localScale = new Vector3(0.15f, 1.5f, 0.15f); Object.Destroy((Object)(object)val.GetComponent()); GameObject val2 = GameObject.CreatePrimitive((PrimitiveType)3); val2.transform.position = allBusiness.triggerPosition + new Vector3(0f, 1.2f, 0f); val2.transform.localScale = new Vector3(0.6f, 0.4f, 0.05f); Renderer component = val2.GetComponent(); if ((Object)(object)component != (Object)null) { Color color = (allBusiness.isOwned ? Color.green : (allBusiness.hasJobs ? Color.yellow : Color.white)); Material val3 = new Material(Shader.Find("Standard")); val3.color = color; component.material = val3; } GameObject val4 = new GameObject("Sign_" + allBusiness.businessId); val4.transform.position = allBusiness.triggerPosition; val.transform.SetParent(val4.transform); val2.transform.SetParent(val4.transform); businessSigns.Add(val4); } } signsSpawned = true; } private void ProcessDailyBusinessCycle() { for (int i = 0; i < maxPlayers; i++) { if (!bInitialized[i]) { continue; } int num = playerSaveSlot[i]; if (num < 0) { continue; } int num2 = playerCharSlot[i]; foreach (BusinessData allBusiness in allBusinesses) { if (allBusiness.isOwned && allBusiness.ownerSaveSlot == num && allBusiness.ownerCharSlot == num2) { float num3 = 1f + (float)allBusiness.activeWorkerCount * allBusiness.workerBonus; int num4 = Mathf.RoundToInt((float)allBusiness.dailyIncome * num3); int num5 = num4 - allBusiness.dailyExpenses; if (num5 != 0) { ChargePlayer(i, num5); } } } int num6 = CalculateHousingCost(num); if (num6 > 0) { ChargePlayer(i, -num6); } } SaveAll(); } private int CalculateHousingCost(int ss) { int num = 0; if (playerHouseCosts[ss] == null) { return 0; } foreach (KeyValuePair item in playerHouseCosts[ss]) { int value = item.Value; num = ((value > 600) ? ((value > 750) ? ((value > 1000) ? ((value > 1500) ? ((value > 2000) ? ((value > 5000) ? ((value > 8000) ? ((value > 10000) ? (num + 200) : (num + 180)) : (num + 120)) : (num + 80)) : (num + 40)) : (num + 30)) : (num + 20)) : (num + 15)) : (num + 10)); } return num; } private void CheckHousing() { for (int i = 0; i < maxPlayers; i++) { if (!bInitialized[i] || (Object)(object)localCharacters[i] == (Object)null) { continue; } int num = playerSaveSlot[i]; if (num < 0) { continue; } Dictionary playerHousesWithCosts = GetPlayerHousesWithCosts(i); bool flag = playerHousesWithCosts.Count != playerHouseCosts[num].Count; if (!flag) { foreach (KeyValuePair item in playerHousesWithCosts) { if (!playerHouseCosts[num].ContainsKey(item.Key) || playerHouseCosts[num][item.Key] != item.Value) { flag = true; break; } } } if (flag) { playerHouseCosts[num] = playerHousesWithCosts; playerHouseCount[num][playerCharSlot[i]] = playerHousesWithCosts.Count; SaveCharacter(num, playerCharSlot[i]); } } } private Dictionary GetPlayerHousesWithCosts(int pid) { Dictionary dictionary = new Dictionary(); if ((Object)(object)localCharacters[pid] == (Object)null) { return dictionary; } try { MethodInfo method = ((object)localCharacters[pid]).GetType().GetMethod("GetPlayerController", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method == null) { return dictionary; } object? obj = method.Invoke(localCharacters[pid], null); PlayerController val = (PlayerController)((obj is PlayerController) ? obj : null); if ((Object)(object)val == (Object)null) { return dictionary; } BuyableHouse[] array = Object.FindObjectsOfType(); BuyableHouse[] array2 = array; foreach (BuyableHouse val2 in array2) { if (!((Object)(object)val2 == (Object)null) && val2.IsHouseOwner(val)) { dictionary[((object)val2).GetHashCode()] = val2.GetHousePrice(); } } } catch { } return dictionary; } private IEnumerator DeathByAgeSequence(int ss, int cs, int pid) { bDying[ss][cs] = true; bDead[ss][cs] = true; yield return (object)new WaitForSeconds(5f); playerAge[ss][cs] = 18; ageTimers[ss][cs] = 0f; health[ss][cs] = 100f; hunger[ss][cs] = 100f; thirst[ss][cs] = 100f; fatigue[ss][cs] = 0f; bDead[ss][cs] = false; bDying[ss][cs] = false; bDeathByAge[ss][cs] = false; playerNames[ss][cs] = firstNames[Random.Range(0, firstNames.Length)] + " " + lastNames[Random.Range(0, lastNames.Length)]; namesGenerated[ss][cs] = true; totalDeaths[ss][cs] = 0; totalFoodEaten[ss][cs] = 0; if (pid >= 0) { firstSpawn[pid] = true; } SaveAll(); yield return (object)new WaitForSeconds(3f); bShowingLifeSummary[ss][cs] = false; } private int GetPlayerMoney(int pid) { if ((Object)(object)localCharacters[pid] == (Object)null) { return 0; } MethodInfo method = ((object)localCharacters[pid]).GetType().GetMethod("GetPlayerController", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method == null) { return 0; } object? obj = method.Invoke(localCharacters[pid], null); Component val = (Component)((obj is Component) ? obj : null); if ((Object)(object)val == (Object)null) { return 0; } MethodInfo method2 = ((object)val).GetType().GetMethod("GetPlayerControllerEmployment", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method2 == null) { return 0; } object? obj2 = method2.Invoke(val, null); Component val2 = (Component)((obj2 is Component) ? obj2 : null); if ((Object)(object)val2 == (Object)null) { return 0; } MethodInfo method3 = ((object)val2).GetType().GetMethod("GetLocalMoney", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); return (method3 != null) ? ((int)method3.Invoke(val2, null)) : 0; } private void ChargePlayer(int pid, int amount) { if ((Object)(object)localCharacters[pid] == (Object)null) { return; } MethodInfo method = ((object)localCharacters[pid]).GetType().GetMethod("GetPlayerController", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method == null) { return; } object? obj = method.Invoke(localCharacters[pid], null); Component val = (Component)((obj is Component) ? obj : null); if ((Object)(object)val == (Object)null) { return; } MethodInfo method2 = ((object)val).GetType().GetMethod("GetPlayerControllerEmployment", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method2 == null) { return; } object? obj2 = method2.Invoke(val, null); Component val2 = (Component)((obj2 is Component) ? obj2 : null); if (!((Object)(object)val2 == (Object)null)) { MethodInfo method3 = ((object)val2).GetType().GetMethod("UpdateMoney", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method3 != null) { method3.Invoke(val2, new object[1] { amount }); } } } private void UpdateVitals() { for (int i = 0; i < maxPlayers; i++) { if (!bInitialized[i]) { continue; } int num = playerSaveSlot[i]; int num2 = playerCharSlot[i]; if (num < 0 || bDying[num][num2] || bDead[num][num2] || bShowingLifeSummary[num][num2]) { continue; } hunger[num][num2] -= 0.028f; thirst[num][num2] -= 0.037f; if (hunger[num][num2] <= 0f) { hungerTimer[i] += 1f; if (hungerTimer[i] >= 30f) { hungerTimer[i] = 0f; health[num][num2] -= 3f; } } else { hungerTimer[i] = 0f; } if (thirst[num][num2] <= 0f) { thirstTimer[i] += 1f; if (thirstTimer[i] >= 30f) { thirstTimer[i] = 0f; health[num][num2] -= 5f; } } else { thirstTimer[i] = 0f; } if (!bFatigueCollapse[num][num2]) { fatigue[num][num2] += 0.028f; if (fatigue[num][num2] >= maxFatigue) { fatigue[num][num2] = maxFatigue; ((MonoBehaviour)this).StartCoroutine(FatigueCollapse(num, num2)); } } if (health[num][num2] <= 0f && !bDead[num][num2] && !bDying[num][num2]) { ((MonoBehaviour)this).StartCoroutine(DeathSequence(num, num2)); } } } private IEnumerator FatigueCollapse(int ss, int cs) { bFatigueCollapse[ss][cs] = true; yield return (object)new WaitForSeconds(3f); fatigue[ss][cs] = 90f; bFatigueCollapse[ss][cs] = false; } private IEnumerator DeathSequence(int ss, int cs) { bDying[ss][cs] = true; bDead[ss][cs] = true; yield return (object)new WaitForSeconds(5f); health[ss][cs] = 100f; hunger[ss][cs] = 100f; thirst[ss][cs] = 100f; fatigue[ss][cs] = 0f; bDead[ss][cs] = false; bDying[ss][cs] = false; } private void CheckDebtRepayment() { for (int i = 0; i < maxPlayers; i++) { if (!bInitialized[i]) { continue; } int num = playerSaveSlot[i]; int num2 = playerCharSlot[i]; if (num >= 0 && hospitalDebt[num][num2] > 0) { int playerMoney = GetPlayerMoney(i); if (lastKnownMoney[i] >= 0 && playerMoney > lastKnownMoney[i]) { int num3 = playerMoney - lastKnownMoney[i]; int num4 = Mathf.Min(num3, hospitalDebt[num][num2]); hospitalDebt[num][num2] -= num4; ChargePlayer(i, -num4); } lastKnownMoney[i] = playerMoney; } } } private void TryEatFood(int pid) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)localCharacters[pid] == (Object)null) { return; } Vector3 playerPos = GetPlayerPos(pid); if (playerPos == Vector3.zero) { return; } GameObject[] array = Object.FindObjectsOfType(); GameObject val = null; float num = 5f; string key = ""; GameObject[] array2 = array; foreach (GameObject val2 in array2) { if ((Object)(object)val2 == (Object)null) { continue; } float num2 = Vector3.Distance(playerPos, val2.transform.position); if (num2 >= num) { continue; } foreach (string key2 in foodDB.Keys) { if (((Object)val2).name.IndexOf(key2, StringComparison.OrdinalIgnoreCase) >= 0) { num = num2; val = val2; key = key2; break; } } } if ((Object)(object)val != (Object)null && foodDB.ContainsKey(key)) { FoodData foodData = foodDB[key]; int num3 = playerSaveSlot[pid]; int num4 = playerCharSlot[pid]; hunger[num3][num4] = Mathf.Clamp(hunger[num3][num4] + foodData.h, 0f, 100f); thirst[num3][num4] = Mathf.Clamp(thirst[num3][num4] + foodData.t, 0f, 100f); totalFoodEaten[num3][num4]++; Object.Destroy((Object)(object)val); eatCooldown[pid] = 0.5f; } } private Vector3 GetPlayerPos(int pid) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)localCharacters[pid] == (Object)null) { return Vector3.zero; } MethodInfo method = ((object)localCharacters[pid]).GetType().GetMethod("GetPlayerBody", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method != null) { object? obj = method.Invoke(localCharacters[pid], null); Component val = (Component)((obj is Component) ? obj : null); if ((Object)(object)val != (Object)null) { return val.transform.position; } } return localCharacters[pid].gameObject.transform.position; } private void UpdateSignColor(string bid, Color c) { //IL_0065: Unknown result type (might be due to invalid IL or missing references) foreach (GameObject businessSign in businessSigns) { if (!(((Object)businessSign).name == "Sign_" + bid)) { continue; } Renderer[] componentsInChildren = businessSign.GetComponentsInChildren(); foreach (Renderer val in componentsInChildren) { if ((Object)(object)val.material != (Object)null) { val.material.color = c; } } break; } } private void ShowNotification(int pid, string msg, bool err) { notificationMessage[pid] = msg; notificationIsError[pid] = err; notificationTimer[pid] = 4f; } private static int GetPlayerSlot(PlayerController pc) { if ((Object)(object)pc == (Object)null) { return -1; } MethodInfo method = ((object)pc).GetType().GetMethod("GetLocalPlayerid", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); return (method != null) ? ((int)method.Invoke(pc, null)) : (-1); } private void OnGUI() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Expected O, but got Unknown //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_0407: Unknown result type (might be due to invalid IL or missing references) //IL_0428: Unknown result type (might be due to invalid IL or missing references) //IL_0570: Unknown result type (might be due to invalid IL or missing references) //IL_05c7: Unknown result type (might be due to invalid IL or missing references) //IL_068a: Unknown result type (might be due to invalid IL or missing references) //IL_066f: Unknown result type (might be due to invalid IL or missing references) //IL_0690: Unknown result type (might be due to invalid IL or missing references) //IL_06ac: Unknown result type (might be due to invalid IL or missing references) //IL_06b4: Unknown result type (might be due to invalid IL or missing references) //IL_06cb: Unknown result type (might be due to invalid IL or missing references) //IL_06d2: Expected O, but got Unknown //IL_06f5: Unknown result type (might be due to invalid IL or missing references) //IL_072f: Unknown result type (might be due to invalid IL or missing references) if (labelStyle == null) { labelStyle = new GUIStyle(); labelStyle.normal.textColor = Color.white; labelStyle.fontSize = 9; labelStyle.fontStyle = (FontStyle)1; labelStyle.alignment = (TextAnchor)4; debtStyle = new GUIStyle(); debtStyle.normal.textColor = new Color(1f, 0.3f, 0.3f); debtStyle.fontSize = 9; debtStyle.fontStyle = (FontStyle)1; debtStyle.alignment = (TextAnchor)4; ageStyle = new GUIStyle(); ageStyle.normal.textColor = new Color(0.7f, 0.7f, 1f); ageStyle.fontSize = 9; ageStyle.fontStyle = (FontStyle)1; ageStyle.alignment = (TextAnchor)4; redTex = MakeTex(1, 1, new Color(0.85f, 0.15f, 0.15f)); orangeTex = MakeTex(1, 1, new Color(1f, 0.55f, 0.1f)); blueTex = MakeTex(1, 1, new Color(0.15f, 0.5f, 1f)); bgTex = MakeTex(1, 1, new Color(0.05f, 0.05f, 0.05f, 0.75f)); fatigueTex = MakeTex(1, 1, new Color(0.5f, 0.4f, 0.9f)); } int num = 0; for (int i = 0; i < maxPlayers; i++) { if (bInitialized[i]) { num++; } } for (int j = 0; j < maxPlayers; j++) { if (!bInitialized[j]) { continue; } int num2 = playerSaveSlot[j]; int num3 = playerCharSlot[j]; if (num2 < 0 || bShowingLifeSummary[num2][num3]) { continue; } float num4 = 140f; float num5 = 14f; float num6 = 20f; float num7 = Screen.width; float num8 = Screen.height; float num9 = 20f; float num10 = 20f; switch (num) { case 1: num9 = num7 - num4 - 20f; num10 = num8 - 155f; break; case 2: num9 = ((j == 0) ? (num7 / 2f - num4 - 20f) : (num7 - num4 - 20f)); num10 = num8 - 155f; break; case 3: switch (j) { case 0: num9 = num7 / 2f - num4 - 20f; num10 = num8 - 155f; break; case 1: num9 = num7 - num4 - 20f; num10 = num8 - 155f; break; default: num9 = num7 - num4 - 20f; num10 = num8 / 2f - 80f; break; } break; default: switch (j) { case 0: num9 = num7 / 2f - num4 - 20f; num10 = num8 - 155f; break; case 1: num9 = num7 - num4 - 20f; num10 = num8 - 155f; break; case 2: num9 = num7 / 2f - num4 - 20f; num10 = num8 / 2f - 80f; break; case 3: num9 = num7 - num4 - 20f; num10 = num8 / 2f - 80f; break; } break; } GUI.Box(new Rect(num9 - 3f, num10 - 18f, num4 + 45f, 140f), ""); GUI.Label(new Rect(num9, num10 - 18f, num4, 16f), playerNames[num2][num3], labelStyle); DrawBar(num9, num10, num4, num5, health[num2][num3] / 100f, redTex, "HP:" + (int)health[num2][num3]); DrawBar(num9, num10 + num6, num4, num5, hunger[num2][num3] / 100f, orangeTex, "H:" + (int)hunger[num2][num3]); DrawBar(num9, num10 + num6 * 2f, num4, num5, thirst[num2][num3] / 100f, blueTex, "T:" + (int)thirst[num2][num3]); DrawBar(num9, num10 + num6 * 3f, num4, num5, fatigue[num2][num3] / maxFatigue, fatigueTex, "Fatigue:" + (int)fatigue[num2][num3] + "%"); GUI.Label(new Rect(num9, num10 + num6 * 4f + 4f, num4, num5), "Age: " + playerAge[num2][num3], ageStyle); if (hospitalDebt[num2][num3] > 0) { GUI.Label(new Rect(num9, num10 + num6 * 5f + 4f, num4, num5), "Debt: $" + hospitalDebt[num2][num3], debtStyle); } if (isNearBusiness[j] && nearestBusiness[j] != null) { DrawBusinessUI(j, num); } if (notificationTimer[j] > 0f && !string.IsNullOrEmpty(notificationMessage[j])) { float num11 = 400f; float num12 = 45f; Color c = (notificationIsError[j] ? new Color(0.8f, 0.2f, 0.2f, 0.9f) : new Color(0.2f, 0.7f, 0.2f, 0.9f)); GUI.DrawTexture(new Rect((num7 - num11) / 2f, num8 - num12 - 30f, num11, num12), (Texture)(object)MakeTex(1, 1, c)); GUIStyle val = new GUIStyle(GUI.skin.label); val.alignment = (TextAnchor)4; val.fontSize = 13; val.fontStyle = (FontStyle)1; val.normal.textColor = Color.white; val.wordWrap = true; GUI.Label(new Rect((num7 - num11) / 2f + 5f, num8 - num12 - 30f, num11 - 10f, num12), notificationMessage[j], val); } } } private void DrawBusinessUI(int pid, int ac) { //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Expected O, but got Unknown //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Expected O, but got Unknown //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Expected O, but got Unknown //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Expected O, but got Unknown //IL_021a: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_03bd: Unknown result type (might be due to invalid IL or missing references) //IL_03ef: Unknown result type (might be due to invalid IL or missing references) //IL_0422: Unknown result type (might be due to invalid IL or missing references) //IL_045f: Unknown result type (might be due to invalid IL or missing references) //IL_0486: Unknown result type (might be due to invalid IL or missing references) //IL_04d2: Unknown result type (might be due to invalid IL or missing references) //IL_04a7: Unknown result type (might be due to invalid IL or missing references) //IL_051a: Unknown result type (might be due to invalid IL or missing references) //IL_0513: Unknown result type (might be due to invalid IL or missing references) //IL_0530: Unknown result type (might be due to invalid IL or missing references) //IL_055d: Unknown result type (might be due to invalid IL or missing references) //IL_058f: Unknown result type (might be due to invalid IL or missing references) //IL_05c6: Unknown result type (might be due to invalid IL or missing references) //IL_05fd: Unknown result type (might be due to invalid IL or missing references) //IL_0638: Unknown result type (might be due to invalid IL or missing references) //IL_0631: Unknown result type (might be due to invalid IL or missing references) //IL_0660: Unknown result type (might be due to invalid IL or missing references) //IL_069a: Unknown result type (might be due to invalid IL or missing references) BusinessData businessData = nearestBusiness[pid]; if (businessData == null) { return; } int playerMoney = GetPlayerMoney(pid); float num = 320f; float num2 = (businessData.isOwned ? 170f : 230f); float num3 = Screen.width; float num4 = Screen.height; float num5 = Mathf.Clamp(ac switch { 1 => num3 / 2f, 2 => (pid == 0) ? (num3 / 4f) : (num3 * 3f / 4f), 3 => (pid == 0) ? (num3 / 4f) : (num3 * 3f / 4f), _ => (pid % 2 == 0) ? (num3 / 4f) : (num3 * 3f / 4f), } - num / 2f, 5f, num3 - num - 5f); float num6 = Mathf.Clamp((num4 - num2) / 2f, 5f, num4 - num2 - 5f); GUI.Box(new Rect(num5, num6, num, num2), ""); GUIStyle val = new GUIStyle(GUI.skin.label); val.alignment = (TextAnchor)4; val.fontStyle = (FontStyle)1; val.fontSize = 16; val.normal.textColor = (businessData.isOwned ? Color.green : Color.yellow); GUIStyle val2 = new GUIStyle(GUI.skin.label); val2.fontSize = 12; val2.alignment = (TextAnchor)4; val2.normal.textColor = Color.white; GUIStyle val3 = new GUIStyle(GUI.skin.label); val3.fontSize = 13; val3.fontStyle = (FontStyle)1; val3.alignment = (TextAnchor)4; GUIStyle val4 = new GUIStyle(GUI.skin.label); val4.fontSize = 11; val4.alignment = (TextAnchor)4; val4.normal.textColor = new Color(0.7f, 0.7f, 1f); GUI.Label(new Rect(num5, num6 + 8f, num, 25f), businessData.businessName, val); if (businessData.isOwned && businessData.ownerSaveSlot >= 0) { string text = playerNames[businessData.ownerSaveSlot][businessData.ownerCharSlot]; if (string.IsNullOrEmpty(text)) { text = "S" + (businessData.ownerSaveSlot + 1) + "C" + (businessData.ownerCharSlot + 1); } if (businessData.ownerSaveSlot == playerSaveSlot[pid] && businessData.ownerCharSlot == playerCharSlot[pid]) { text = "YOU"; } GUI.Label(new Rect(num5, num6 + 33f, num, 18f), "Owner: " + text, val4); } float num7 = (businessData.isOwned ? (num6 + 55f) : (num6 + 50f)); if (businessData.isOwned && businessData.ownerSaveSlot == playerSaveSlot[pid] && businessData.ownerCharSlot == playerCharSlot[pid]) { float num8 = 1f + (float)businessData.activeWorkerCount * businessData.workerBonus; int num9 = Mathf.RoundToInt((float)businessData.dailyIncome * num8); int num10 = num9 - businessData.dailyExpenses; GUI.Label(new Rect(num5, num7, num, 22f), "Workers: " + businessData.activeWorkerCount, val2); GUI.Label(new Rect(num5, num7 + 25f, num, 22f), "Profit: $" + num10 + "/day", val2); GUI.Label(new Rect(num5, num7 + 50f, num, 22f), "Sell: $" + Mathf.RoundToInt((float)businessData.purchasePrice * 0.7f), val2); GUI.backgroundColor = new Color(1f, 0.5f, 0.3f); if (GUI.Button(new Rect(num5 + 60f, num7 + 80f, num - 120f, 28f), "SELL [F/Y]")) { SellBusiness(pid, businessData); } GUI.backgroundColor = Color.white; return; } if (businessData.isOwned) { GUI.Label(new Rect(num5, num7, num, 22f), "Owned by " + playerNames[businessData.ownerSaveSlot][businessData.ownerCharSlot], val2); return; } val3.normal.textColor = ((playerMoney >= businessData.purchasePrice) ? Color.green : Color.red); GUI.Label(new Rect(num5, num7, num, 22f), "Balance: $" + playerMoney, val3); GUI.Label(new Rect(num5, num7 + 30f, num, 22f), "Price: $" + businessData.purchasePrice, val2); GUI.Label(new Rect(num5, num7 + 55f, num, 22f), "Income: $" + businessData.dailyIncome + "/d", val2); GUI.Label(new Rect(num5, num7 + 80f, num, 22f), "Expenses: $" + businessData.dailyExpenses + "/d", val2); GUI.Label(new Rect(num5, num7 + 105f, num, 22f), businessData.hasJobs ? "WORK AVAILABLE" : "PASSIVE", val2); bool flag = playerMoney >= businessData.purchasePrice; GUI.backgroundColor = (flag ? Color.green : Color.red); if (GUI.Button(new Rect(num5 + 45f, num7 + 135f, num - 90f, 30f), flag ? "BUY [F/Y]" : "CANNOT AFFORD") && flag) { BuyBusiness(pid, businessData); } GUI.backgroundColor = Color.white; } private void DrawBar(float x, float y, float w, float h, float f, Texture2D tex, string l) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) GUI.DrawTexture(new Rect(x, y, w, h), (Texture)(object)bgTex); GUI.DrawTexture(new Rect(x, y, w * Mathf.Clamp01(f), h), (Texture)(object)tex); GUI.Label(new Rect(x, y - 1f, w, h), l, labelStyle); } private Texture2D MakeTex(int w, int h, Color c) { //IL_0015: 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_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown Color[] array = (Color[])(object)new Color[w * h]; for (int i = 0; i < array.Length; i++) { array[i] = c; } Texture2D val = new Texture2D(w, h); val.SetPixels(array); val.Apply(); return val; } }