public override OfficeLevelUp OnCalculateOfficeLevelUp(OfficeLevelUp levelUp, int averageEducation, int serviceScore, ushort buildingID, Service service, SubService subService, Level currentLevel)
        {
            DifficultyManager d = Singleton <DifficultyManager> .instance;

            if (levelUp.serviceProgress != 0)
            {
                Level targetLevel;

                int target2 = d.OfficeTargetScore.GetValue(Level.Level2);
                int target3 = d.OfficeTargetScore.GetValue(Level.Level3);

                if (serviceScore < target2)
                {
                    targetLevel             = Level.Level1;
                    levelUp.serviceProgress = 1 + (int)(15f * serviceScore / target2 + 0.49f);
                }
                else if (serviceScore < target3)
                {
                    targetLevel             = Level.Level2;
                    levelUp.serviceProgress = 1 + (int)(15f * (serviceScore - target2) / (target3 - target2) + 0.49f);
                }
                else
                {
                    targetLevel             = Level.Level5;
                    levelUp.serviceProgress = 1;
                }

                if (targetLevel < currentLevel)
                {
                    levelUp.serviceProgress = 1;
                }
                else if (targetLevel > currentLevel)
                {
                    levelUp.serviceProgress = 15;
                }

                if (targetLevel < levelUp.targetLevel)
                {
                    levelUp.targetLevel = targetLevel;
                }
            }

            levelUp.tooFewServices = false;
            if (currentLevel == Level.Level2)
            {
                if (serviceScore < d.OfficeTargetScore.GetTooLowValue(Level.Level2))
                {
                    levelUp.tooFewServices = true;
                }
            }
            else if (currentLevel == Level.Level3)
            {
                if (serviceScore < d.OfficeTargetScore.GetTooLowValue(Level.Level3))
                {
                    levelUp.tooFewServices = true;
                }
            }

            return(levelUp);
        }
        public override OfficeLevelUp OnCalculateOfficeLevelUp(OfficeLevelUp levelUp, int averageEducation, int serviceScore, ushort buildingID, Service service, SubService subService, Level currentLevel)
        {
            if (!Singleton <GameSpeedManager> .instance.values.IsHardMode)
            {
                return(levelUp);
            }

            if (levelUp.serviceProgress != 0)
            {
                Level targetLevel;

                if (serviceScore < 55)
                {
                    targetLevel             = Level.Level1;
                    levelUp.serviceProgress = 1 + (serviceScore * 15 + 27) / 55;
                }
                else if (serviceScore < 110)
                {
                    targetLevel             = Level.Level2;
                    levelUp.serviceProgress = 1 + ((serviceScore - 55) * 15 + 27) / 55;
                }
                else
                {
                    targetLevel             = Level.Level5;
                    levelUp.serviceProgress = 1;
                }

                if (targetLevel < currentLevel)
                {
                    levelUp.serviceProgress = 1;
                }
                else if (targetLevel > currentLevel)
                {
                    levelUp.serviceProgress = 15;
                }

                if (targetLevel < levelUp.targetLevel)
                {
                    levelUp.targetLevel = targetLevel;
                }
            }

            levelUp.tooFewServices = false;
            if (currentLevel == Level.Level2)
            {
                if (serviceScore < 35)
                {
                    levelUp.tooFewServices = true;
                }
            }
            else if (currentLevel == Level.Level3)
            {
                if (serviceScore < 80)
                {
                    levelUp.tooFewServices = true;
                }
            }

            return(levelUp);
        }
Esempio n. 3
0
        public override OfficeLevelUp OnCalculateOfficeLevelUp(OfficeLevelUp levelUp, int averageEducation, int serviceScore, ushort buildingID,
                                                               Service service, SubService subService, Level currentLevel)
        {
            if (HistoricalStatusDataManager.Instance.IsHistorical(buildingID))
            {
                levelUp.targetLevel = currentLevel;
            }

            return(levelUp);
        }
        /// <summary>
        /// Office level up control - game extension method.
        /// Used to override 'too few services' complaint as appropriate.
        /// </summary>
        /// <param name="levelUp">Original upgrade struct (target level and progress)</param>
        /// <param name="averageEducation">Average education for the building (ignored)</param>
        /// <param name="serviceScore">Building service score (ignored)</param>
        /// <param name="buildingID">Building instance ID</param>
        /// <param name="service">Building service (ignored)</param>
        /// <param name="subService">Building subservice (ignored)</param>
        /// <param name="currentLevel">Existing building level (ignored)</param>
        /// <returns>Revised target level (level and progress)</returns>
        /// <returns></returns>
        public override OfficeLevelUp OnCalculateOfficeLevelUp(OfficeLevelUp levelUp, int averageEducation, int serviceScore, ushort buildingID,
                                                               Service service, SubService subService, Level currentLevel)
        {
            // Check if this building is RICO or not.
            bool isRICO = IsRICOBuilding(buildingID);

            // Check if the relevant 'ignore too few services complaint' setting is set.
            if ((ModSettings.noServicesOther && !isRICO) || (ModSettings.noServicesRico && isRICO))
            {
                // It is - force too few services complaint off.
                levelUp.tooFewServices = false;
            }

            return(levelUp);
        }
 public override OfficeLevelUp OnCalculateOfficeLevelUp(OfficeLevelUp levelUp, int averageEducation, int serviceScore, ushort buildingID, Service service, SubService subService, Level currentLevel)
 {
     return levelUp;
 }
 public override OfficeLevelUp OnCalculateOfficeLevelUp(OfficeLevelUp levelUp, int averageEducation, int serviceScore, ushort buildingID, Service service, SubService subService, Level currentLevel)
 {
     levelUp.targetLevel = this.controlLevelUp(levelUp.targetLevel, currentLevel, buildingID);
     return(levelUp);
 }
        public override OfficeLevelUp OnCalculateOfficeLevelUp(OfficeLevelUp levelUp, int averageEducation, int serviceScore, ushort buildingID, Service service, SubService subService, Level currentLevel)
        {
            if (levelUp.serviceProgress != 0)
            {
                Level targetLevel;

                if (serviceScore < 55)
                {
                    targetLevel = Level.Level1;
                    levelUp.serviceProgress = 1 + (serviceScore * 15 + 27) / 55;
                }
                else if (serviceScore < 110)
                {
                    targetLevel = Level.Level2;
                    levelUp.serviceProgress = 1 + ((serviceScore - 55) * 15 + 27) / 55;
                }
                else
                {
                    targetLevel = Level.Level5;
                    levelUp.serviceProgress = 1;
                }

                if (targetLevel < currentLevel)
                {
                    levelUp.serviceProgress = 1;
                }
                else if (targetLevel > currentLevel)
                {
                    levelUp.serviceProgress = 15;
                }

                if (targetLevel < levelUp.targetLevel)
                {
                    levelUp.targetLevel = targetLevel;
                }
            }

            levelUp.tooFewServices = false;
            if (currentLevel == Level.Level2)
            {
                if (serviceScore < 35) levelUp.tooFewServices = true;
            }
            else if (currentLevel == Level.Level3)
            {
                if (serviceScore < 80) levelUp.tooFewServices = true;
            }

            return levelUp;
        }
        public override OfficeLevelUp OnCalculateOfficeLevelUp(OfficeLevelUp levelUp, int averageEducation, int serviceScore, ushort buildingID, Service service, SubService subService, Level currentLevel)
        {
            if (SaveData2.saveData.DifficultyLevel == DifficultyLevel.Vanilla)
            {
                return levelUp;
            }

            var instance = Singleton<BuildingManager>.instance.m_buildings.m_buffer[(int)buildingID];
            var zone = instance.Info.m_class.GetZone();
            float education = 0;
            float happy = 0;
            float commute = 0;
            var levelUpHelper = LevelUpHelper3.instance;

            serviceScore = levelUpHelper.GetProperServiceScore(buildingID);
            levelUpHelper.GetEducationHappyScore(buildingID, out education, out happy, out commute);
            Level targetLevel = Level.Level3;

            for (var i = 0; i < 3; i += 1)
            {
                if (serviceScore < levelUpHelper.GetServiceThreshhold((ItemClass.Level)i, zone) || education < levelUpHelper.GetEducationThreshhold((ItemClass.Level)i, zone))
                {
                    targetLevel = (Level)i;
                    levelUp.serviceProgress = 1 + CalcProgress(serviceScore, levelUpHelper.GetServiceThreshhold((ItemClass.Level)i, ItemClass.Zone.Office), levelUpHelper.GetServiceThreshhold((ItemClass.Level)(i - 1), ItemClass.Zone.Office), 15);
                    levelUp.educationProgress = 1 + CalcProgress((int)education, levelUpHelper.GetEducationThreshhold((ItemClass.Level)i, zone), levelUpHelper.GetEducationThreshhold((ItemClass.Level)(i - 1), zone), 15);
                    break;
                }
            }

            levelUp.tooFewServices = (serviceScore < levelUpHelper.GetServiceThreshhold((ItemClass.Level)(Math.Max(-1, (int)currentLevel - 2)), zone));

            if (targetLevel < currentLevel)
            {
                levelUp.serviceProgress = 1;
                levelUp.educationProgress = 1;
            }
            else if (targetLevel > currentLevel)
            {
                levelUp.serviceProgress = 15;
                levelUp.educationProgress = 15;
            }
            if (targetLevel < levelUp.targetLevel)
            {
                levelUp.targetLevel = targetLevel;
            }
            return levelUp;
        }
        public override OfficeLevelUp OnCalculateOfficeLevelUp(OfficeLevelUp levelUp, int averageEducation, int serviceScore, ushort buildingID, Service service, SubService subService, Level currentLevel)
        {
            DifficultyManager d = Singleton<DifficultyManager>.instance;

            if (levelUp.serviceProgress != 0)
            {
                Level targetLevel;

                int target2 = d.OfficeTargetScore.GetValue(Level.Level2);
                int target3 = d.OfficeTargetScore.GetValue(Level.Level3);

                if (serviceScore < target2)
                {
                    targetLevel = Level.Level1;
                    levelUp.serviceProgress = 1 + (int)(15f * serviceScore / target2 + 0.49f);
                }
                else if (serviceScore < target3)
                {
                    targetLevel = Level.Level2;
                    levelUp.serviceProgress = 1 + (int)(15f * (serviceScore - target2) / (target3 - target2) + 0.49f);
                }
                else
                {
                    targetLevel = Level.Level5;
                    levelUp.serviceProgress = 1;
                }

                if (targetLevel < currentLevel)
                {
                    levelUp.serviceProgress = 1;
                }
                else if (targetLevel > currentLevel)
                {
                    levelUp.serviceProgress = 15;
                }

                if (targetLevel < levelUp.targetLevel)
                {
                    levelUp.targetLevel = targetLevel;
                }
            }

            levelUp.tooFewServices = false;
            if (currentLevel == Level.Level2)
            {
                if (serviceScore < d.OfficeTargetScore.GetTooLowValue(Level.Level2)) levelUp.tooFewServices = true;
            }
            else if (currentLevel == Level.Level3)
            {
                if (serviceScore < d.OfficeTargetScore.GetTooLowValue(Level.Level3)) levelUp.tooFewServices = true;
            }

            return levelUp;
        }
 // Thread: Simulation
 public OfficeLevelUp OnCalculateOfficeLevelUp(OfficeLevelUp levelUp, int averageEducation, int serviceScore, ushort buildingID, Service service, SubService subService, Level currentLevel)
 {
     return(levelUp);
 }