public override int OnAddResource(EconomyResource resource, int amount, Service service, SubService subService, Level level) { if (resource == EconomyResource.TourismIncome) { // Changing the "amount" value does change the tourism income value displayed in the Economy panel, // but does NOT add actual money to the player. Therefore // the increased cash amount should be added manually, taking into account m_taxMultiplier value. EconomyManager em = Singleton<EconomyManager>.instance; // Get taxMultiplier value FieldInfo field = em.GetType().GetField("m_taxMultiplier", BindingFlags.NonPublic | BindingFlags.Instance); int m_taxMultiplier = (int)field.GetValue(em); int newAmount = amount * PTM_Options.Instance.TourismIncomeMultiplier; em.AddPrivateIncome( (int)((newAmount - amount) * 10000L / m_taxMultiplier), // Ectract "amount", because it is already added, and exclude the influence of m_taxMultiplier (ItemClass.Service)service, (ItemClass.SubService)subService, (ItemClass.Level)level, 100 // Set 100% tax rate because we want to add actual money as it is. ); return newAmount; } // Bonus feature :) if ((ItemClass.SubService)subService == ItemClass.SubService.PublicTransportTaxi) { return amount * PTM_Options.Instance.TaxiIncomeMultiplier; } return amount; }
public override int OnAddResource(EconomyResource resource, int amount, Service service, SubService subService, Level level) { if (resource == EconomyResource.RewardAmount) { DifficultyManager d = Singleton <DifficultyManager> .instance; return((int)(0.01f * amount * d.RewardMultiplier.Value + 0.99f)); } return(amount); }
public override int OnAddResource(EconomyResource resource, int amount, Service service, SubService subService, Level level) { if (resource == EconomyResource.RewardAmount) { DifficultyManager d = Singleton<DifficultyManager>.instance; return (int)(0.01f * amount * d.RewardMultiplier.Value + 0.99f); } return amount; }
public override int OnAddResource(EconomyResource resource, int amount, Service service, SubService subService, Level level) { if (resource == EconomyResource.RewardAmount) { if (Singleton <GameSpeedManager> .instance.values.IsHardMode) { return(0); } } return(amount); }
public override int OnAddResource(EconomyResource resource, int amount, Service service, SubService subService, Level level) { switch (MultiplayerManager.Instance.CurrentRole) { case MultiplayerRole.Client: { typeof(EconomyManager).GetField("m_taxMultiplier", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(Singleton <EconomyManager> .instance, 0); break; } } return(amount); }
public override int OnAddResource(EconomyResource resource, int amount, Service service, SubService subService, Level level) { if (service == Service.Office) { // Altering the return amount appears to not only update the office zone income but also adds to private income as well var newAmount = amount * ModOptions.Instance.OfficeIncomeMultiplier; return(newAmount); } return(amount); }
public override int OnAddResource(EconomyResource resource, int amount, Service service, SubService subService, Level level) { if (resource == EconomyResource.TourismIncome) { // Changing the "amount" value does change the tourism income value displayed in the Economy panel, // but does NOT add actual money to the player. Therefore // the increased cash amount should be added manually, taking into account m_taxMultiplier value. EconomyManager em = Singleton <EconomyManager> .instance; // Get taxMultiplier value FieldInfo field = em.GetType().GetField("m_taxMultiplier", BindingFlags.NonPublic | BindingFlags.Instance); int m_taxMultiplier = (int)field.GetValue(em); int newAmount = amount * PTM_Options.Instance.TourismIncomeMultiplier; em.AddPrivateIncome( (int)((newAmount - amount) * 10000L / m_taxMultiplier), // Ectract "amount", because it is already added, and exclude the influence of m_taxMultiplier (ItemClass.Service)service, (ItemClass.SubService)subService, (ItemClass.Level)level, 100 // Set 100% tax rate because we want to add actual money as it is. ); return(newAmount); } // Office income multiplier if ((ItemClass.Service)service == ItemClass.Service.Office) { return(amount * PTM_Options.Instance.OfficeIncomeMultiplier); } // Office income multiplier if ((ItemClass.Service)service == ItemClass.Service.Industrial) { return(amount * PTM_Options.Instance.IndustryIncomeMultiplier); } // Bonus feature :) if ((ItemClass.SubService)subService == ItemClass.SubService.PublicTransportTaxi) { return(amount * PTM_Options.Instance.TaxiIncomeMultiplier); } return(amount); }
public override int OnAddResource(EconomyResource resource, int amount, Service service, SubService subService, Level level) { if (SaveData2.saveData.DifficultyLevel != DifficultyLevel.Vanilla && resource == EconomyResource.PrivateIncome) { if (amount > 0) { return 0; } else { return -amount; } } if (SaveData2.saveData.DifficultyLevel < DifficultyLevel.Hard) { return amount; } if (resource == EconomyResource.RewardAmount) { return amount / 4; } return amount; }
public override int OnPeekResource(EconomyResource resource, int amount) { return(amount); }
/// <summary> /// Fires when for example a building cost is withdrawed. /// </summary> /// <param name="resource"></param> /// <param name="amount"></param> /// <param name="service"></param> /// <param name="subService"></param> /// <param name="level"></param> /// <returns></returns> public override int OnFetchResource(EconomyResource resource, int amount, Service service, SubService subService, Level level) { MPCashChangeAmount += base.OnFetchResource(resource, amount, service, subService, level); return(base.OnFetchResource(resource, amount, service, subService, level)); }
public override int OnAddResource(EconomyResource resource, int amount, Service service, SubService subService, Level level) { if (!LoadingExtension.installed) { return(amount); } //check if OnAddResource call match what we are looking for if (!resource.Equals(EconomyResource.PrivateIncome)) //interested in private incomes only { return(amount); } if (service != Service.Office) //only office buildings tracked here { return(amount); } //CODebug.Log(LogChannel.Modding, Mod.modName + " - IncomeTracker search building with service " + service + " subservice " + subService + " level " + level + " amount "+amount); SimulationManager instance = Singleton <SimulationManager> .instance; BuildingManager instance2 = Singleton <BuildingManager> .instance; //sync with simulation frame if (checkedFrameIndex != instance.m_currentFrameIndex) { checkedFrameIndex = instance.m_currentFrameIndex; int num6 = (int)(instance.m_currentFrameIndex & 255u); buildingID = (ushort)(num6 * 192); maxBuildingID = (ushort)((num6 + 1) * 192 - 1); } //sync with BuildingManager SimulationStep loop bool skipping = true; bool error = false; do { if ((instance2.m_buildings.m_buffer[buildingID].m_flags & Building.Flags.Created) == Building.Flags.None) { skipping = true; } //abandoned buildings do no go through SimulationStepActive else if ((instance2.m_buildings.m_buffer[buildingID].m_flags & (Building.Flags.Abandoned | Building.Flags.BurnedDown)) != Building.Flags.None) { skipping = true; } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Residential) // { // skipping = false; // if(service != Service.Residential) // error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Industrial) // { // skipping = false; // if(service != Service.Industrial) // error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Commercial) // { // skipping = false; // if(service != Service.Commercial) // error = true; // } else if (instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Office) { skipping = false; } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Beautification) // { // skipping = false; // if(service != Service.Beautification) // error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Citizen) // { // skipping = false; // if(service != Service.Citizen) // error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Education) // { // skipping = false; // if(service != Service.Education) // error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Electricity) // { // skipping = false; // if(service != Service.Electricity) // error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.FireDepartment) // { // skipping = false; // if(service != Service.FireDepartment) // error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Garbage) // { // skipping = false; // if(service != Service.Garbage) // error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Government) // { // skipping = false; //// if(service != Service.Governement) //// error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.HealthCare) // { // skipping = false; // if(service != Service.HealthCare) // error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Monument) // { // skipping = false; // if(service != Service.Monument) // error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.PoliceDepartment) // { // skipping = false; // if(service != Service.PoliceDepartment) // error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.PublicTransport) // { // skipping = false; // if(service != Service.PublicTransport) // error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Road) // { // skipping = false; // if(service != Service.Road) // error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Water) // { // skipping = false; // if(service != Service.Water) // error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Unused1) // { // skipping = false; //// if(service != Service.) //// error = true; // } // else if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Unused2) // { // skipping = false; //// if(service != Service.Education) //// error = true; // } // else // { //// CODebug.Log(LogChannel.Modding, "income tracker private income for service "+instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service); //// skipping = true; // skipping = false; // if(instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service.ToString() != service.ToString()) // { // CODebug.Log(LogChannel.Modding, "income tracker mismatch "+instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service.ToString()+" "+service.ToString()); // } // } if (skipping) { buildingID++; if (buildingID > maxBuildingID) { error = true; skipping = false; } } }while(skipping); //check if active and history is activated if (!error) { if (instance2.m_buildings.m_buffer[buildingID].Info.m_class.m_service == ItemClass.Service.Office) { int buildIndex = s_info.GetResilientBuildingIndex((ushort)buildingID); String buildinfo2 = Singleton <BuildingManager> .instance.GetBuildingName(buildingID, default(InstanceID)); //CODebug.Log(LogChannel.Modding, Mod.modName + " - IncomeTracker found building with id " + buildingID + " buildIndex " + buildIndex + " " + buildinfo2); if (buildIndex != -1) { ResilientBuildings.ResilientInfoV1 ri = s_info.m_resilients[buildIndex]; ri.totalIncome += amount; s_info.m_resilients[buildIndex] = ri; } } buildingID++; //ensure search starts from next building at next function call } else { CODebug.Log(LogChannel.Modding, Mod.modName + " - IncomeTracker could not meet building with service " + service + " subservice " + subService + " level " + level); } return(amount); }
/// <summary> /// Fires when for example a building cost is withdrawed. /// </summary> /// <param name="resource"></param> /// <param name="amount"></param> /// <param name="service"></param> /// <param name="subService"></param> /// <param name="level"></param> /// <returns></returns> public override int OnFetchResource(EconomyResource resource, int amount, Service service, SubService subService, Level level) { MPCashChangeAmount += base.OnFetchResource(resource, amount, service, subService, level); return base.OnFetchResource(resource, amount, service, subService, level); }
public override int OnPeekResource(EconomyResource resource, int amount) { return amount; }
//Thread: Simulation public int OnFetchResource(EconomyResource resource, int amount, Service service, SubService subService, Level level) { return amount; }
public int OnAddResource(EconomyResource resource, int amount, Service service, SubService subService, Level level) { return(amount); }