/// <summary>
    /// Message this instance.
    /// Check if the "Hero" is near an NPC.
    /// </summary>
    void Message()
    {
        if (!isDead)
        {
            foreach (GameObject other in npc)
            {
                if (other)
                {
                    Vector3 offset = other.transform.position - hero.transform.position;
                    float   sqrLen = offset.sqrMagnitude;
                    if (sqrLen < closeDistance * closeDistance)
                    {
                        if (other.GetComponent <Citizen>())                                                       //Condition (If I collide with an object with the component "Citizen").
                        {
                            _citizenData = other.GetComponent <Citizen>().CitizenID();                            //Assigns the citizen's information to use in the message.
                            panelUI.SetActive(true);
                            textTypeName.text = ("Citizen");
                            textDialogue.text = ("Hello I am " + _citizenData.name + " and I have " + _citizenData.age + " years old");    //Message given by the citizen when making contact.
                            StartCoroutine(EnablePanel());
                        }

                        if (other.GetComponent <Zombie>())                                                       //condition (If I collide with an object with the component "Zombie").
                        {
                            _zombieData = other.GetComponent <Zombie>().ZombieID();                              //Assigns the zombie information to use in the message.
                            panelUI.SetActive(true);
                            textTypeName.text = ("Zombie");
                            textDialogue.text = ("Waaaaarrrr I want to eat " + _zombieData._taste);             //Message given by the zombie when he comes into contact.
                            StartCoroutine(EnablePanel());
                        }
                    }
                }
            }
        }
    }
    public CitizenData getNewCitizenData()
    {
        CitizenData aux      = new CitizenData();
        int         position = UnityEngine.Random.Range(0, p.names.Length);

        aux.name  = p.names[position];
        aux.happy = p.happy[position];
        return(aux);
    }
 void Awake()
 {
     isClickable    = true;
     hasTent        = false;
     tent           = null;
     turnActionType = actions.none;
     gameManager    = GameObject.FindGameObjectWithTag("Game Manager").GetComponent <GameManager>();
     citizenData    = CitizenData.CreateCitizen();
 }
        public static void Prefix(uint citizenID, ref Citizen data, ref ushort sourceBuilding, ref ushort targetBuilding)
        {
            if (data.m_workBuilding != targetBuilding)
            {
                var building = Singleton <BuildingManager> .instance.m_buildings.m_buffer[targetBuilding];
                if (building.Info.m_class.m_service == ItemClass.Service.Commercial)
                {
                    CitizenManager instance       = Singleton <CitizenManager> .instance;
                    ushort         homeBuilding   = data.m_homeBuilding;
                    uint           citizenUnit    = CitizenData.GetCitizenUnit(homeBuilding);
                    uint           containingUnit = data.GetContainingUnit((uint)citizenID, citizenUnit, CitizenUnit.Flags.Home);

                    Citizen.BehaviourData behaviour = default;
                    int aliveVisitCount             = 0;
                    int totalVisitCount             = 0;
                    RealCityCommercialBuildingAI.InitDelegate();
                    RealCityCommercialBuildingAI.GetVisitBehaviour((CommercialBuildingAI)(building.Info.m_buildingAI), targetBuilding, ref building, ref behaviour, ref aliveVisitCount, ref totalVisitCount);
                    var amount = building.m_customBuffer2 / MainDataStore.maxGoodPurchase - totalVisitCount + aliveVisitCount;
                    var CommercialBuildingAI = building.Info.m_buildingAI as CommercialBuildingAI;
                    var maxCount             = CommercialBuildingAI.CalculateVisitplaceCount((ItemClass.Level)building.m_level, new Randomizer(targetBuilding), building.m_width, building.m_length);
                    if ((amount <= 0) || (maxCount <= totalVisitCount))
                    {
                        //Close CommercialBuilding
                        //Reject citizen to building which lack of goods
                        sourceBuilding    = targetBuilding;
                        building.m_flags &= ~Building.Flags.Active;
                        return;
                    }

                    if (data.m_flags.IsFlagSet(Citizen.Flags.Tourist))
                    {
                        //DebugLog.LogToFileOnly("Find Tourist in HumanAIStartMovingPatch");
                    }
                    else
                    {
                        //DebugLog.LogToFileOnly("Find Resident in HumanAIStartMovingPatch");
                        if (CitizenUnitData.familyMoney[containingUnit] < MainDataStore.maxGoodPurchase * RealCityIndustryBuildingAI.GetResourcePrice(TransferManager.TransferReason.Shopping))
                        {
                            //Reject poor citizen to building
                            if (CitizenUnitData.familyGoods[containingUnit] > 1000)
                            {
                                //If a family is lacking goods very seriously, even they do not have enough money, they can buy goods.
                                //minimumLivingAllowance will cover this expense.
                                sourceBuilding = targetBuilding;
                                return;
                            }
                        }
                        else if (CitizenUnitData.familyGoods[containingUnit] > 2000)
                        {
                            //Reject citizen who already have enough goods to building
                            sourceBuilding = targetBuilding;
                            return;
                        }
                    }
                }
            }
        }
        public override void OnSaveData()
        {
            if (Loader.CurrentLoadMode == LoadMode.LoadGame || Loader.CurrentLoadMode == LoadMode.NewGame)
            {
                DebugLog.LogToFileOnly("StartSave");
                //1
                var saveData = new byte[2448];
                RealCityEconomyManager.Save(ref saveData);
                _serializableData.SaveData("RealCity RealCityEconomyManager", saveData);

                //2
                saveData = new byte[131];
                MainDataStore.Save(ref saveData);
                _serializableData.SaveData("RealCity MainDataStore", saveData);

                //3
                saveData = new byte[48];
                RealCityResidentAI.Save(ref saveData);
                _serializableData.SaveData("RealCity RealCityResidentAI", saveData);

                //4
                saveData = new byte[60];
                RealCityPrivateBuildingAI.Save(ref saveData);
                _serializableData.SaveData("RealCity RealCityPrivateBuildingAI", saveData);

                //5
                saveData = new byte[4194304];
                CitizenData.Save(ref saveData);
                _serializableData.SaveData("RealCity CitizenData", saveData);

                //6
                saveData = new byte[58];
                Politics.Save(ref saveData);
                _serializableData.SaveData("RealCity Politics", saveData);

                //7
                saveData = new byte[1536];
                TransportLineData.Save(ref saveData);
                _serializableData.SaveData("RealCity TransportLineData", saveData);

                //8
                saveData = new byte[442368];
                BuildingData.Save(ref saveData);
                _serializableData.SaveData("RealCity BuildingData", saveData);

                //9
                saveData = new byte[196608];
                VehicleData.Save(ref saveData);
                _serializableData.SaveData("RealCity VehicleData", saveData);

                //10
                saveData = new byte[3145728];
                CitizenUnitData.Save(ref saveData);
                _serializableData.SaveData("RealCity CitizenUnitData", saveData);
            }
        }
Exemple #6
0
        private void loadWorkLocation(CitizenData c)
        {
            bool   buildingFound = false;
            string taskLoc       = c.CurrentTaskLoc;

            for (int i = 0; i < Game.town.recreational.Count; i++)
            {
                if (Game.town.recreational[i].ID.Equals(taskLoc))
                {
                    workLocation  = Game.town.recreational[i];
                    buildingFound = true;
                }
            }

            if (!buildingFound)
            {
                for (int i = 0; i < Game.town.residential.Count; i++)
                {
                    if (Game.town.recreational[i].ID.Equals(taskLoc))
                    {
                        workLocation  = Game.town.residential[i];
                        buildingFound = true;
                    }
                }

                if (!buildingFound)
                {
                    for (int i = 0; i < Game.town.essentials.Count; i++)
                    {
                        if (Game.town.recreational[i].ID.Equals(taskLoc))
                        {
                            workLocation  = Game.town.essentials[i];
                            buildingFound = true;
                        }
                    }
                }

                if (!buildingFound)
                {
                    for (int i = 0; i < Game.town.emergency.Count; i++)
                    {
                        if (Game.town.recreational[i].ID.Equals(taskLoc))
                        {
                            workLocation  = Game.town.emergency[i];
                            buildingFound = true;
                        }
                    }
                }

                if (!buildingFound)
                {
                    Debug.Log("This game sucks. Mans can't even find a job. Detroit is rough man");
                }
            }
        }
        public static bool Prefix(ushort buildingID, ref Building data, uint citizen)
        {
            CitizenManager citizenManager = Singleton <CitizenManager> .instance;
            BuildingInfo   buildingInfo   = data.Info;

            if ((citizenManager.m_citizens.m_buffer[citizen].m_flags & Citizen.Flags.Tourist) != Citizen.Flags.None)
            {
                var consumptionMoney = -MainDataStore.maxGoodPurchase;
                buildingInfo.m_buildingAI.ModifyMaterialBuffer(buildingID, ref data, TransferManager.TransferReason.Shopping, ref consumptionMoney);
                int priceInt = 0;
                IndustryBuildingGetResourcePricePatch.Prefix(ref priceInt, TransferManager.TransferReason.Shopping, data.Info.m_class.m_service);
                var m_goodsSellPrice = priceInt / 100;
                MainDataStore.outsideTouristMoney += (consumptionMoney * m_goodsSellPrice);
            }
            else
            {
                ushort homeBuilding   = citizenManager.m_citizens.m_buffer[citizen].m_homeBuilding;
                uint   citizenUnit    = CitizenData.GetCitizenUnit(homeBuilding);
                uint   containingUnit = citizenManager.m_citizens.m_buffer[citizen].GetContainingUnit((uint)citizen, citizenUnit, CitizenUnit.Flags.Home);
                int    priceInt       = 0;
                IndustryBuildingGetResourcePricePatch.Prefix(ref priceInt, TransferManager.TransferReason.Shopping, data.Info.m_class.m_service);
                var m_goodsSellPrice = priceInt / 100;

                if (containingUnit != 0)
                {
                    //int goodAmount = (int)(-(CitizenUnitData.familyMoney[containingUnit]) / m_goodsSellPrice);
                    int goodAmount = -MainDataStore.maxGoodPurchase;

                    if (goodAmount < 0)
                    {
                        buildingInfo.m_buildingAI.ModifyMaterialBuffer(buildingID, ref data, TransferManager.TransferReason.Shopping, ref goodAmount);

                        if (goodAmount != 0)
                        {
                            CitizenUnitData.familyGoods[containingUnit] = (ushort)(CitizenUnitData.familyGoods[containingUnit] - (goodAmount * 10));
                            if (CitizenUnitData.familyGoods[containingUnit] > 2000)
                            {
                                citizenManager.m_citizens.m_buffer[citizen].m_flags &= ~Citizen.Flags.NeedGoods;
                            }
                        }
                    }
                    else
                    {
                        goodAmount = 0;
                    }

                    CitizenData.citizenMoney[citizen]           = (CitizenData.citizenMoney[citizen] + goodAmount * m_goodsSellPrice);
                    CitizenUnitData.familyMoney[containingUnit] = CitizenUnitData.familyMoney[containingUnit] + goodAmount * m_goodsSellPrice;
                }
            }

            Singleton <BuildingAI> .instance.VisitorEnter(buildingID, ref data, citizen);

            return(false);
        }
Exemple #8
0
    public static CitizenData CreateCitizen()
    {
        CitizenData citizen = new CitizenData();

        citizen.like        = (Theme)Random.Range(0, 3);
        citizen.proficience = (Theme)Random.Range(0, 3);

        do
        {
            citizen.dislike = (Theme)Random.Range(0, 3);
        } while (citizen.like == citizen.dislike || citizen.proficience == citizen.dislike);

        return(citizen);
    }
Exemple #9
0
        public static void InitData()
        {
            DebugLog.LogToFileOnly("InitData");
            TransportLineData.DataInit();
            VehicleData.DataInit();
            BuildingData.DataInit();
            CitizenUnitData.DataInit();
            CitizenData.DataInit();
            RealCityEconomyManager.DataInit();
            System.Random rand = new System.Random();
            RealCityEconomyExtension.partyTrend         = (byte)rand.Next(5);
            RealCityEconomyExtension.partyTrendStrength = (byte)rand.Next(300);

            DebugLog.LogToFileOnly("InitData Done");
        }
Exemple #10
0
    private void Update()
    {
        checkFunction = IsCraftReady();

        crafter = gameManager.SelectedCitizen.GetComponent <CitizenBehaviour>().citizenData;

        if (IsCraftReady())
        {
            confirmButton.interactable = true;
        }
        else
        {
            confirmButton.interactable = false;
        }
    }
    public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
    {
        int num;

        if (!Int32.TryParse(transform.parent.name, out num))
        {
            num = 0;
        }

        var data = new CitizenData
        {
            CitizenNumber = num
        };

        dstManager.AddComponentData(entity, data);
    }
Exemple #12
0
    private void GoToItemComent(int citizenIndex)
    {
        CitizenData      dude = citizens[citizenIndex];
        DecorationScript item = newItem.GetComponent <DecorationScript>();

        ReorderCitizens(citizenIndex);

        if (item.themes.Contains(dude.like) || (item.themes.Contains(dude.proficience)))
        {
            UpdateCurrentStory($"LikingItemP{Random.Range(0, 4).ToString()}");
        }
        else if (item.themes.Contains(dude.dislike))
        {
            UpdateCurrentStory($"DislikingItemP{Random.Range(0, 4).ToString()}");
        }
        else
        {
            UpdateCurrentStory($"NeutralItemP{Random.Range(0, 4).ToString()}");
        }
    }
Exemple #13
0
        public Citizen(CitizenData c) // I give up man, this team blows. Would have been a better project if I was working solo ngl
        {
            id   = c.ID;
            name = c.Name;
            generateLastTask(c);
            loadWorkLocation(c);
            happiness = 50;
            name      = c.Name;
            age       = random.Next(18, 45);
            infected  = c.Infected;

            if (c.Dead)
            {
                dead = true;
                Game.town.incrementDead();
            }


            //loadFavoriteTask(); // Need to figure out how we're gonna pull out the building here
        }
Exemple #14
0
        public static void Postfix(ref CitizenInstance citizenData)
        {
            CitizenManager instance = Singleton <CitizenManager> .instance;
            uint           citizen  = citizenData.m_citizen;

            if (citizen != 0)
            {
                ushort homeBuilding   = instance.m_citizens.m_buffer[citizen].m_homeBuilding;
                uint   citizenUnit    = CitizenData.GetCitizenUnit(homeBuilding);
                uint   containingUnit = instance.m_citizens.m_buffer[citizen].GetContainingUnit((uint)citizen, citizenUnit, CitizenUnit.Flags.Home);

                if (containingUnit != 0)
                {
                    if (CitizenUnitData.familyGoods[containingUnit] < 2000)
                    {
                        instance.m_citizens.m_buffer[citizen].m_flags |= Citizen.Flags.NeedGoods;
                    }
                }
            }
        }
 public static void Prefix(ref CitizenInstance citizenData, ref Citizen.AgeGroup ageGroup)
 {
     if (RealCity.noPassengerCar)
     {
         CitizenManager instance       = Singleton <CitizenManager> .instance;
         var            citizenID      = citizenData.m_citizen;
         ushort         homeBuilding   = instance.m_citizens.m_buffer[citizenID].m_homeBuilding;
         uint           citizenUnit    = CitizenData.GetCitizenUnit(homeBuilding);
         uint           containingUnit = instance.m_citizens.m_buffer[citizenID].GetContainingUnit((uint)citizenID, citizenUnit, CitizenUnit.Flags.Home);
         if ((containingUnit == 0) || (citizenID == 0))
         {
             //Change ageGroup to Child to disable car.
             ageGroup = Citizen.AgeGroup.Child;
         }
         else
         {
             if (CitizenUnitData.familyMoney[containingUnit] < MainDataStore.highWealth)
             {
                 ageGroup = Citizen.AgeGroup.Child;
             }
         }
     }
 }
Exemple #16
0
    public static CitizenData CreateCitizen()
    {
        CitizenData citizen = new CitizenData();

        citizen.name    = citizen.chooseName();
        citizen.surname = citizen.chooseSurname();

        citizen.like        = (Theme)Random.Range(0, 3);
        citizen.proficience = (Theme)Random.Range(0, 3);

        do
        {
            citizen.dislike = (Theme)Random.Range(0, 3);
        } while (citizen.like == citizen.dislike || citizen.proficience == citizen.dislike);

        citizen.species = (Animals)Random.Range(0, 7);

        Debug.Log($"Like: {citizen.like}");
        Debug.Log($"Dislike: {citizen.dislike}");
        Debug.Log($"Proficience: {citizen.proficience}");
        Debug.Log($"Speciees: {citizen.species}");

        return(citizen);
    }
        public static void LimitCommericalBuildingAccess(ushort buildingID, ref Building buildingData)
        {
            if (buildingData.Info.m_class.m_service == ItemClass.Service.Commercial)
            {
                Citizen.BehaviourData behaviour = default;
                int aliveVisitCount             = 0;
                int totalVisitCount             = 0;
                RealCityCommercialBuildingAI.InitDelegate();
                RealCityCommercialBuildingAI.GetVisitBehaviour((CommercialBuildingAI)buildingData.Info.m_buildingAI, buildingID, ref buildingData, ref behaviour, ref aliveVisitCount, ref totalVisitCount);
                var amount   = buildingData.m_customBuffer2 / MainDataStore.maxGoodPurchase - totalVisitCount + aliveVisitCount;
                var AI       = buildingData.Info.m_buildingAI as CommercialBuildingAI;
                var maxcount = AI.CalculateVisitplaceCount((ItemClass.Level)buildingData.m_level, new Randomizer(buildingID), buildingData.m_width, buildingData.m_length);
                if ((amount <= 0) || (maxcount <= totalVisitCount))
                {
                    buildingData.m_flags &= ~Building.Flags.Active;
                }

                if (RealCityEconomyExtension.Can16timesUpdate(buildingID))
                {
                    //Remove citizen which already have goods
                    CitizenManager instance = Singleton <CitizenManager> .instance;
                    uint           num      = buildingData.m_citizenUnits;
                    int            num2     = 0;
                    while (num != 0u)
                    {
                        if ((ushort)(instance.m_units.m_buffer[(int)((UIntPtr)num)].m_flags & CitizenUnit.Flags.Visit) != 0)
                        {
                            var citizenID = instance.m_units.m_buffer[(int)((UIntPtr)num)].m_citizen0;
                            if (citizenID != 0u)
                            {
                                ushort homeBuilding   = instance.m_citizens.m_buffer[citizenID].m_homeBuilding;
                                uint   citizenUnit    = CitizenData.GetCitizenUnit(homeBuilding);
                                uint   containingUnit = instance.m_citizens.m_buffer[citizenID].GetContainingUnit((uint)citizenID, citizenUnit, CitizenUnit.Flags.Home);
                                if (CitizenUnitData.familyGoods[containingUnit] > 2000)
                                {
                                    if (!instance.m_citizens.m_buffer[citizenID].m_flags.IsFlagSet(Citizen.Flags.Tourist))
                                    {
                                        BuildingManager instance1 = Singleton <BuildingManager> .instance;
                                        instance.m_citizens.m_buffer[citizenID].RemoveFromUnits(citizenID, instance1.m_buildings.m_buffer[buildingID].m_citizenUnits, CitizenUnit.Flags.Visit);
                                        return;
                                    }
                                }
                            }
                            citizenID = instance.m_units.m_buffer[(int)((UIntPtr)num)].m_citizen1;
                            if (citizenID != 0u)
                            {
                                ushort homeBuilding   = instance.m_citizens.m_buffer[citizenID].m_homeBuilding;
                                uint   citizenUnit    = CitizenData.GetCitizenUnit(homeBuilding);
                                uint   containingUnit = instance.m_citizens.m_buffer[citizenID].GetContainingUnit((uint)citizenID, citizenUnit, CitizenUnit.Flags.Home);
                                if (CitizenUnitData.familyGoods[containingUnit] > 2000)
                                {
                                    if (!instance.m_citizens.m_buffer[citizenID].m_flags.IsFlagSet(Citizen.Flags.Tourist))
                                    {
                                        BuildingManager instance1 = Singleton <BuildingManager> .instance;
                                        instance.m_citizens.m_buffer[citizenID].RemoveFromUnits(citizenID, instance1.m_buildings.m_buffer[buildingID].m_citizenUnits, CitizenUnit.Flags.Visit);
                                        return;
                                    }
                                }
                            }
                            citizenID = instance.m_units.m_buffer[(int)((UIntPtr)num)].m_citizen2;
                            if (citizenID != 0u)
                            {
                                ushort homeBuilding   = instance.m_citizens.m_buffer[citizenID].m_homeBuilding;
                                uint   citizenUnit    = CitizenData.GetCitizenUnit(homeBuilding);
                                uint   containingUnit = instance.m_citizens.m_buffer[citizenID].GetContainingUnit((uint)citizenID, citizenUnit, CitizenUnit.Flags.Home);
                                if (CitizenUnitData.familyGoods[containingUnit] > 2000)
                                {
                                    if (!instance.m_citizens.m_buffer[citizenID].m_flags.IsFlagSet(Citizen.Flags.Tourist))
                                    {
                                        BuildingManager instance1 = Singleton <BuildingManager> .instance;
                                        instance.m_citizens.m_buffer[citizenID].RemoveFromUnits(citizenID, instance1.m_buildings.m_buffer[buildingID].m_citizenUnits, CitizenUnit.Flags.Visit);
                                        return;
                                    }
                                }
                            }
                            citizenID = instance.m_units.m_buffer[(int)((UIntPtr)num)].m_citizen3;
                            if (citizenID != 0u)
                            {
                                ushort homeBuilding   = instance.m_citizens.m_buffer[citizenID].m_homeBuilding;
                                uint   citizenUnit    = CitizenData.GetCitizenUnit(homeBuilding);
                                uint   containingUnit = instance.m_citizens.m_buffer[citizenID].GetContainingUnit((uint)citizenID, citizenUnit, CitizenUnit.Flags.Home);
                                if (CitizenUnitData.familyGoods[containingUnit] > 2000)
                                {
                                    if (!instance.m_citizens.m_buffer[citizenID].m_flags.IsFlagSet(Citizen.Flags.Tourist))
                                    {
                                        BuildingManager instance1 = Singleton <BuildingManager> .instance;
                                        instance.m_citizens.m_buffer[citizenID].RemoveFromUnits(citizenID, instance1.m_buildings.m_buffer[buildingID].m_citizenUnits, CitizenUnit.Flags.Visit);
                                        return;
                                    }
                                }
                            }
                            citizenID = instance.m_units.m_buffer[(int)((UIntPtr)num)].m_citizen4;
                            if (citizenID != 0u)
                            {
                                ushort homeBuilding   = instance.m_citizens.m_buffer[citizenID].m_homeBuilding;
                                uint   citizenUnit    = CitizenData.GetCitizenUnit(homeBuilding);
                                uint   containingUnit = instance.m_citizens.m_buffer[citizenID].GetContainingUnit((uint)citizenID, citizenUnit, CitizenUnit.Flags.Home);
                                if (CitizenUnitData.familyGoods[containingUnit] > 2000)
                                {
                                    if (!instance.m_citizens.m_buffer[citizenID].m_flags.IsFlagSet(Citizen.Flags.Tourist))
                                    {
                                        BuildingManager instance1 = Singleton <BuildingManager> .instance;
                                        instance.m_citizens.m_buffer[citizenID].RemoveFromUnits(citizenID, instance1.m_buildings.m_buffer[buildingID].m_citizenUnits, CitizenUnit.Flags.Visit);
                                        return;
                                    }
                                }
                            }
                        }
                        num = instance.m_units.m_buffer[(int)((UIntPtr)num)].m_nextUnit;
                        if (++num2 > 524288)
                        {
                            CODebugBase <LogChannel> .Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace);

                            break;
                        }
                    }
                }
            }
        }
Exemple #18
0
        private void generateLastTask(CitizenData c)
        {
            bool   buildingFound = false;
            string taskLoc       = c.CurrentTaskLoc;

            for (int i = 0; i < Game.town.recreational.Count; i++)
            {
                if (Game.town.recreational[i].ID.Equals(taskLoc))
                {
                    int num = 0;
                    if (c.TaskCompleted)
                    {
                        num = 1;
                    }
                    currentTask   = new CitizenTask(c.CurrentTaskId, Game.town.Time, c.EndTime, Game.town.Day, c.EndDay, num, Game.town.recreational[i]);
                    buildingFound = true;
                }
            }
            if (!buildingFound)
            {
                for (int i = 0; i < Game.town.residential.Count; i++)
                {
                    if (Game.town.residential[i].ID.Equals(taskLoc))
                    {
                        int num = 0;
                        if (c.TaskCompleted)
                        {
                            num = 1;
                        }
                        currentTask   = new CitizenTask(c.CurrentTaskId, Game.town.Time, c.EndTime, Game.town.Day, c.EndDay, num, Game.town.residential[i]);
                        buildingFound = true;
                    }
                }
            }

            if (!buildingFound)
            {
                for (int i = 0; i < Game.town.essentials.Count; i++)
                {
                    if (Game.town.essentials[i].ID.Equals(taskLoc))
                    {
                        int num = 0;
                        if (c.TaskCompleted)
                        {
                            num = 1;
                        }
                        currentTask   = new CitizenTask(c.CurrentTaskId, Game.town.Time, c.EndTime, Game.town.Day, c.EndDay, num, Game.town.essentials[i]);
                        buildingFound = true;
                    }
                }
            }

            if (!buildingFound)
            {
                for (int i = 0; i < Game.town.emergency.Count; i++)
                {
                    if (Game.town.emergency[i].ID.Equals(taskLoc))
                    {
                        int num = 0;
                        if (c.TaskCompleted)
                        {
                            num = 1;
                        }
                        currentTask   = new CitizenTask(c.CurrentTaskId, Game.town.Time, c.EndTime, Game.town.Day, c.EndDay, num, Game.town.emergency[i]);
                        buildingFound = true;
                    }
                }
            }

            if (!buildingFound)
            {
                Debug.Log("This game sucks. Can't even load shit. It's like Detroit all over again");
            }
        }
Exemple #19
0
 public override void Fill(CitizenData citizen)
 {
     Fill(citizen.proficience);
 }
Exemple #20
0
        public override void OnLoadData()
        {
            Loader.InitData();
            DebugLog.LogToFileOnly("StartLoad");
            //1
            var saveData = _serializableData.LoadData("RealCity RealCityEconomyManager");

            if (saveData == null)
            {
                DebugLog.LogToFileOnly("no RealCity RealCityEconomyManager, please check");
            }
            else
            {
                RealCityEconomyManager.Load(ref saveData);
            }

            //2
            saveData = _serializableData.LoadData("RealCity MainDataStore");
            if (saveData == null)
            {
                DebugLog.LogToFileOnly("no RealCity MainDataStore, please check");
            }
            else
            {
                MainDataStore.Load(ref saveData);
            }

            //3
            saveData = _serializableData.LoadData("RealCity RealCityResidentAI");
            if (saveData == null)
            {
                DebugLog.LogToFileOnly("no RealCity RealCityResidentAI, please check");
            }
            else
            {
                RealCityResidentAI.Load(ref saveData);
            }

            //4
            saveData = _serializableData.LoadData("RealCity RealCityPrivateBuildingAI");
            if (saveData == null)
            {
                DebugLog.LogToFileOnly("no RealCity RealCityPrivateBuildingAI, please check");
            }
            else
            {
                RealCityPrivateBuildingAI.Load(ref saveData);
            }

            //5
            saveData = _serializableData.LoadData("RealCity CitizenData");
            if (saveData == null)
            {
                DebugLog.LogToFileOnly("no RealCity CitizenData, please check");
            }
            else
            {
                CitizenData.Load(ref saveData);
            }

            //6
            saveData = _serializableData.LoadData("RealCity Politics");
            if (saveData == null)
            {
                DebugLog.LogToFileOnly("no RealCity Politics, please check");
            }
            else
            {
                Politics.Load(ref saveData);
            }

            //7
            saveData = _serializableData.LoadData("RealCity TransportLineData");
            if (saveData == null)
            {
                DebugLog.LogToFileOnly("no RealCity TransportLineData, please check");
            }
            else
            {
                TransportLineData.Load(ref saveData);
            }

            //8
            saveData = _serializableData.LoadData("RealCity BuildingData");
            if (saveData == null)
            {
                DebugLog.LogToFileOnly("no RealCity BuildingData, please check");
            }
            else
            {
                BuildingData.Load(ref saveData);
            }

            //9
            saveData = _serializableData.LoadData("RealCity VehicleData");
            if (saveData == null)
            {
                DebugLog.LogToFileOnly("no RealCity VehicleData, please check");
            }
            else
            {
                VehicleData.Load(ref saveData);
            }

            //10
            saveData = _serializableData.LoadData("RealCity CitizenUnitData");
            if (saveData == null)
            {
                DebugLog.LogToFileOnly("no RealCity CitizenUnitData, please check");
            }
            else
            {
                CitizenUnitData.Load(ref saveData);
            }
        }
Exemple #21
0
 public void InitData(CitizenData cdata)
 {
     isHappy = cdata.happy;
     name    = cdata.name;
 }
Exemple #22
0
        public static bool Prefix(ushort buildingID, ref Building data, uint citizen)
        {
            CitizenManager citizenManager = Singleton <CitizenManager> .instance;
            BuildingInfo   buildingInfo   = data.Info;

            if ((citizenManager.m_citizens.m_buffer[citizen].m_flags & Citizen.Flags.Tourist) != Citizen.Flags.None)
            {
                int consumptionMoney = MainDataStore.govermentSalary << 4;
                if (citizenManager.m_citizens.m_buffer[citizen].WealthLevel == Citizen.Wealth.High)
                {
                    consumptionMoney <<= 2;
                }
                if (citizenManager.m_citizens.m_buffer[citizen].WealthLevel == Citizen.Wealth.Medium)
                {
                    consumptionMoney <<= 1;
                }

                consumptionMoney = -consumptionMoney;
                if (MainDataStore.outsideTouristMoney > 0)
                {
                    buildingInfo.m_buildingAI.ModifyMaterialBuffer(buildingID, ref data, TransferManager.TransferReason.Entertainment, ref consumptionMoney);
                    MainDataStore.outsideTouristMoney += (consumptionMoney);
                }
                consumptionMoney = -MainDataStore.maxGoodPurchase;
                buildingInfo.m_buildingAI.ModifyMaterialBuffer(buildingID, ref data, TransferManager.TransferReason.Shopping, ref consumptionMoney);
                int priceInt = 0;
                IndustryBuildingGetResourcePricePatch.Prefix(ref priceInt, TransferManager.TransferReason.Shopping, data.Info.m_class.m_service);
                var m_goodsSellPrice = priceInt / 100;
                MainDataStore.outsideTouristMoney += (consumptionMoney * m_goodsSellPrice);
            }
            else
            {
                ushort homeBuilding   = citizenManager.m_citizens.m_buffer[citizen].m_homeBuilding;
                uint   citizenUnit    = CitizenData.GetCitizenUnit(homeBuilding);
                uint   containingUnit = citizenManager.m_citizens.m_buffer[citizen].GetContainingUnit((uint)citizen, citizenUnit, CitizenUnit.Flags.Home);

                if (containingUnit != 0)
                {
                    //int goodAmount = (int)(-(CitizenUnitData.familyMoney[containingUnit]) / RealCityIndustryBuildingAI.GetResourcePrice(TransferManager.TransferReason.Shopping));
                    int goodAmount = -MainDataStore.maxGoodPurchase;

                    if (goodAmount < 0)
                    {
                        buildingInfo.m_buildingAI.ModifyMaterialBuffer(buildingID, ref data, TransferManager.TransferReason.Shopping, ref goodAmount);

                        if (goodAmount != 0)
                        {
                            CitizenUnitData.familyGoods[containingUnit] = (ushort)(CitizenUnitData.familyGoods[containingUnit] - (goodAmount * 10));
                            if (CitizenUnitData.familyGoods[containingUnit] > 2000)
                            {
                                citizenManager.m_citizens.m_buffer[citizen].m_flags &= ~Citizen.Flags.NeedGoods;
                            }
                        }
                    }
                    else
                    {
                        goodAmount = 0;
                    }

                    var familyMoney = (CitizenUnitData.familyMoney[containingUnit] + goodAmount * RealCityIndustryBuildingAI.GetResourcePrice(TransferManager.TransferReason.Shopping));

                    float consumptionIndex;
                    if (buildingInfo.m_class.m_subService == ItemClass.SubService.CommercialLeisure)
                    {
                        consumptionIndex = 0.25f;
                    }
                    else if ((buildingInfo.m_class.m_subService == ItemClass.SubService.CommercialTourist))
                    {
                        consumptionIndex = 0.2f;
                    }
                    else if ((buildingInfo.m_class.m_subService == ItemClass.SubService.CommercialEco))
                    {
                        consumptionIndex = 0.05f;
                    }
                    else if ((buildingInfo.m_class.m_subService == ItemClass.SubService.CommercialHigh))
                    {
                        consumptionIndex = 0.15f;
                    }
                    else
                    {
                        consumptionIndex = 0.1f;
                    }

                    int consumptionMoney = -(int)(consumptionIndex * familyMoney);

                    if (consumptionMoney < 0)
                    {
                        int money = consumptionMoney;
                        buildingInfo.m_buildingAI.ModifyMaterialBuffer(buildingID, ref data, TransferManager.TransferReason.Entertainment, ref money);
                    }
                    else
                    {
                        consumptionMoney = 0;
                    }

                    CitizenData.citizenMoney[citizen]           = (CitizenData.citizenMoney[citizen] + consumptionMoney + goodAmount * RealCityIndustryBuildingAI.GetResourcePrice(TransferManager.TransferReason.Shopping));
                    CitizenUnitData.familyMoney[containingUnit] = CitizenUnitData.familyMoney[containingUnit] + consumptionMoney + goodAmount * RealCityIndustryBuildingAI.GetResourcePrice(TransferManager.TransferReason.Shopping);
                }
            }

            Singleton <BuildingAI> .instance.VisitorEnter(buildingID, ref data, citizen);

            return(false);
        }
        public static bool Prefix(TransferManager.TransferReason material, ref TransferManager.TransferOffer offer)
        {
            switch (material)
            {
            case TransferManager.TransferReason.Shopping:
            case TransferManager.TransferReason.ShoppingB:
            case TransferManager.TransferReason.ShoppingC:
            case TransferManager.TransferReason.ShoppingD:
            case TransferManager.TransferReason.ShoppingE:
            case TransferManager.TransferReason.ShoppingF:
            case TransferManager.TransferReason.ShoppingG:
            case TransferManager.TransferReason.ShoppingH:
            case TransferManager.TransferReason.Entertainment:
            case TransferManager.TransferReason.EntertainmentB:
            case TransferManager.TransferReason.EntertainmentC:
            case TransferManager.TransferReason.EntertainmentD:
            case TransferManager.TransferReason.TouristA:
            case TransferManager.TransferReason.TouristB:
            case TransferManager.TransferReason.TouristC:
            case TransferManager.TransferReason.TouristD:
                if (RealCity.realCityV10)
                {
                    if (MainDataStore.outsideTouristMoney < 0)
                    {
                        if (Singleton <BuildingManager> .instance.m_buildings.m_buffer[offer.Building].Info.m_buildingAI is OutsideConnectionAI)
                        {
                            return(false);
                        }
                    }
                }
                break;

            case TransferManager.TransferReason.Oil:
            case TransferManager.TransferReason.Ore:
            case TransferManager.TransferReason.Coal:
            case TransferManager.TransferReason.Petrol:
            case TransferManager.TransferReason.Food:
            case TransferManager.TransferReason.Grain:
            case TransferManager.TransferReason.Lumber:
            case TransferManager.TransferReason.Logs:
            case TransferManager.TransferReason.Goods:
            case TransferManager.TransferReason.LuxuryProducts:
            case TransferManager.TransferReason.AnimalProducts:
            case TransferManager.TransferReason.Flours:
            case TransferManager.TransferReason.Petroleum:
            case TransferManager.TransferReason.Plastics:
            case TransferManager.TransferReason.Metals:
            case TransferManager.TransferReason.Glass:
            case TransferManager.TransferReason.PlanedTimber:
            case TransferManager.TransferReason.Paper:
                break;

            default:
                return(true);
            }

            if (offer.Citizen != 0)
            {
                var    instance       = Singleton <CitizenManager> .instance;
                ushort homeBuilding   = instance.m_citizens.m_buffer[offer.Citizen].m_homeBuilding;
                uint   citizenUnit    = CitizenData.GetCitizenUnit(homeBuilding);
                uint   containingUnit = instance.m_citizens.m_buffer[offer.Citizen].GetContainingUnit((uint)offer.Citizen, citizenUnit, CitizenUnit.Flags.Home);

                if (!instance.m_citizens.m_buffer[offer.Citizen].m_flags.IsFlagSet(Citizen.Flags.Tourist))
                {
                    if (CitizenUnitData.familyMoney[containingUnit] < MainDataStore.maxGoodPurchase * RealCityIndustryBuildingAI.GetResourcePrice(TransferManager.TransferReason.Shopping))
                    {
                        //Reject poor citizen to building
                        return(false);
                    }
                }
            }
            else if (offer.Building != 0)
            {
                var instance     = Singleton <BuildingManager> .instance;
                var buildingID   = offer.Building;
                var buildingData = instance.m_buildings.m_buffer[buildingID];
                if (buildingData.Info.m_class.m_service == ItemClass.Service.Industrial)
                {
                    RealCityIndustrialBuildingAI.InitDelegate();
                    RealCityCommonBuildingAI.InitDelegate();
                    var industrialBuildingAI = buildingData.Info.m_buildingAI as IndustrialBuildingAI;
                    TransferManager.TransferReason incomingTransferReason          = RealCityIndustrialBuildingAI.GetIncomingTransferReason((IndustrialBuildingAI)(buildingData.Info.m_buildingAI), buildingID);
                    TransferManager.TransferReason secondaryIncomingTransferReason = RealCityIndustrialBuildingAI.GetSecondaryIncomingTransferReason((IndustrialBuildingAI)(buildingData.Info.m_buildingAI), buildingID);
                    int maxIncomingLoadSize = RealCityIndustrialBuildingAI.MaxIncomingLoadSize((IndustrialBuildingAI)(buildingData.Info.m_buildingAI));
                    int num  = 0;
                    int num1 = 0;
                    int incomingCargoCapacity = 0;
                    int value = 0;
                    if (incomingTransferReason != TransferManager.TransferReason.None)
                    {
                        if (secondaryIncomingTransferReason != TransferManager.TransferReason.None)
                        {
                            RealCityCommonBuildingAI.CalculateGuestVehicles1((IndustrialBuildingAI)(buildingData.Info.m_buildingAI), buildingID, ref buildingData, incomingTransferReason, secondaryIncomingTransferReason, ref num, ref num1, ref incomingCargoCapacity, ref value);
                        }
                        else
                        {
                            RealCityCommonBuildingAI.CalculateGuestVehicles((IndustrialBuildingAI)(buildingData.Info.m_buildingAI), buildingID, ref buildingData, incomingTransferReason, ref num, ref num1, ref incomingCargoCapacity, ref value);
                        }
                    }
                    int productionCapacity  = industrialBuildingAI.CalculateProductionCapacity((ItemClass.Level)buildingData.m_level, new Randomizer((int)buildingID), buildingData.m_width, buildingData.m_length);
                    int consumptionDivider  = RealCityIndustrialBuildingAI.GetConsumptionDivider((IndustrialBuildingAI)(buildingData.Info.m_buildingAI));
                    int fullCapacity        = Mathf.Max(productionCapacity * 500 / consumptionDivider, maxIncomingLoadSize * 4);
                    int incomingAmontNeeded = fullCapacity - (int)buildingData.m_customBuffer1 - incomingCargoCapacity;
                    incomingAmontNeeded -= 8000;

                    if (incomingAmontNeeded < 0)
                    {
                        return(false);
                    }
                    else
                    {
                        if (material == incomingTransferReason)
                        {
                            //first remove.
                            //game bug, will send 2 incomingTransferReason per period
                            TransferManager.TransferOffer offer1 = default;
                            offer1.Building = buildingID;
                            Singleton <TransferManager> .instance.RemoveIncomingOffer(incomingTransferReason, offer1);
                        }
                    }
                }
                else if (buildingData.Info.m_class.m_service == ItemClass.Service.Commercial)
                {
                    RealCityCommercialBuildingAI.InitDelegate();
                    RealCityCommonBuildingAI.InitDelegate();
                    var commercialBuildingAI = buildingData.Info.m_buildingAI as CommercialBuildingAI;
                    int maxIncomingLoadSize  = RealCityCommercialBuildingAI.MaxIncomingLoadSize((CommercialBuildingAI)(buildingData.Info.m_buildingAI));
                    int visitplaceCount      = commercialBuildingAI.CalculateVisitplaceCount((ItemClass.Level)buildingData.m_level, new Randomizer((int)buildingID), buildingData.m_width, buildingData.m_length);
                    int fullCapacity         = Mathf.Max(visitplaceCount * 500, maxIncomingLoadSize * 4);
                    int num  = 0;
                    int num1 = 0;
                    int incomingCargoCapacity = 0;
                    int value = 0;
                    TransferManager.TransferReason incomingTransferReason = RealCityCommercialBuildingAI.GetIncomingTransferReason((CommercialBuildingAI)(buildingData.Info.m_buildingAI));
                    if (incomingTransferReason != TransferManager.TransferReason.None)
                    {
                        if (incomingTransferReason == TransferManager.TransferReason.Goods || incomingTransferReason == TransferManager.TransferReason.Food)
                        {
                            RealCityCommonBuildingAI.CalculateGuestVehicles1((CommercialBuildingAI)(buildingData.Info.m_buildingAI), buildingID, ref buildingData, incomingTransferReason, TransferManager.TransferReason.LuxuryProducts, ref num, ref num1, ref incomingCargoCapacity, ref value);
                        }
                        else
                        {
                            RealCityCommonBuildingAI.CalculateGuestVehicles((CommercialBuildingAI)(buildingData.Info.m_buildingAI), buildingID, ref buildingData, incomingTransferReason, ref num, ref num1, ref incomingCargoCapacity, ref value);
                        }
                        buildingData.m_tempImport = (byte)Mathf.Clamp(value, (int)buildingData.m_tempImport, 255);
                    }
                    int incomingAmontNeeded = fullCapacity - (int)buildingData.m_customBuffer1 - incomingCargoCapacity;
                    incomingAmontNeeded -= 6000;
                    if (incomingAmontNeeded < 0)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }