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;
        }
Пример #4
0
        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);
        }
Пример #5
0
 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);
 }
Пример #6
0
        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);
        }
Пример #7
0
        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;
        }
Пример #9
0
 public override int OnPeekResource(EconomyResource resource, int amount)
 {
     return(amount);
 }
Пример #10
0
 /// <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));
 }
Пример #11
0
        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);
        }
Пример #12
0
 /// <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);
 }
Пример #13
0
 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;
 }
Пример #15
0
 public int OnAddResource(EconomyResource resource, int amount, Service service, SubService subService, Level level)
 {
     return(amount);
 }