public void UpdateState(string new_state)
 {
     if (!_statusList.ContainsKey(Game1.player.UniqueMultiplayerID) || _statusList[Game1.player.UniqueMultiplayerID] != new_state)
     {
         _statusList.Remove(Game1.player.UniqueMultiplayerID);
         _statusList.Add(Game1.player.UniqueMultiplayerID, new_state);
     }
 }
Beispiel #2
0
 public virtual void Update()
 {
     _AddSpecialRulesIfNecessary();
     if (_objectiveRegistrationDirty)
     {
         _objectiveRegistrationDirty = false;
         _UpdateObjectiveRegistration();
     }
     if (!readyForRemoval.Value)
     {
         if (questState.Value == QuestState.InProgress && !participants.ContainsKey(Game1.player.UniqueMultiplayerID))
         {
             participants[Game1.player.UniqueMultiplayerID] = true;
         }
         else if (questState.Value == QuestState.Complete)
         {
             if (unclaimedRewards.ContainsKey(Game1.player.UniqueMultiplayerID))
             {
                 unclaimedRewards.Remove(Game1.player.UniqueMultiplayerID);
                 Game1.stats.QuestsCompleted++;
                 Game1.playSound("questcomplete");
                 Game1.dayTimeMoneyBox.questsDirty = true;
                 foreach (OrderReward reward in rewards)
                 {
                     reward.Grant();
                 }
             }
             if (participants.ContainsKey(Game1.player.UniqueMultiplayerID) && GetMoneyReward() <= 0)
             {
                 RemoveFromParticipants();
             }
         }
     }
     donateMutex.Update(Game1.getOnlineFarmers());
     if (donateMutex.IsLockHeld() && Game1.activeClickableMenu == null)
     {
         donateMutex.ReleaseLock();
     }
     if (Game1.activeClickableMenu == null)
     {
         _highlightLookup = null;
     }
     if (Game1.IsMasterGame && questState.Value != 0)
     {
         MarkForRemovalIfEmpty();
         if (readyForRemoval.Value)
         {
             _RemoveSpecialRuleIfNecessary();
             Game1.player.team.specialOrders.Remove(this);
         }
     }
 }
 public override void UpdateWhenCurrentLocation(GameTime time)
 {
     base.UpdateWhenCurrentLocation(time);
     foreach (KeyValuePair <long, FarmAnimal> kvp2 in animals.Pairs)
     {
         _tempAnimals.Add(kvp2);
     }
     foreach (KeyValuePair <long, FarmAnimal> kvp in _tempAnimals)
     {
         if (kvp.Value.updateWhenCurrentLocation(time, this))
         {
             animals.Remove(kvp.Key);
         }
     }
     _tempAnimals.Clear();
 }
Beispiel #4
0
 public void RemoveOutgoingProposal()
 {
     proposals.Remove(Game1.player.UniqueMultiplayerID);
 }
        /// <summary>The method to call before <see cref="Utility.fixAllAnimals"/>.</summary>
        private static bool Before_FixAllAnimals()
        {
            if (!Game1.IsMasterGame)
            {
                return(false);
            }

            foreach (var loc in Mod.GetAllLocations())
            {
                if (loc is BuildableGameLocation farm && loc is IAnimalLocation farm_animals)
                {
                    foreach (Building building in farm.buildings)
                    {
                        if (building.indoors.Value is AnimalHouse house)
                        {
                            foreach (long id in house.animalsThatLiveHere)
                            {
                                FarmAnimal animal = Utility.getAnimal(id);
                                if (animal != null)
                                {
                                    animal.home = building;
                                    animal.homeLocation.Value = new Vector2(building.tileX.Value, building.tileY.Value);
                                }
                            }
                        }
                    }
                    List <FarmAnimal> farmAnimalList1 = new List <FarmAnimal>();
                    foreach (FarmAnimal allFarmAnimal in UtilityPatcher.GetAllFarmAnimals(farm))
                    {
                        if (allFarmAnimal.home == null)
                        {
                            farmAnimalList1.Add(allFarmAnimal);
                        }
                    }
                    foreach (FarmAnimal farmAnimal in farmAnimalList1)
                    {
                        NetDictionary <long, FarmAnimal, NetRef <FarmAnimal>, SerializableDictionary <long, FarmAnimal>, NetLongDictionary <FarmAnimal, NetRef <FarmAnimal> > > .PairsCollection pairs;
                        KeyValuePair <long, FarmAnimal> keyValuePair;
                        foreach (Building building in farm.buildings)
                        {
                            if (building.indoors.Value is AnimalHouse house)
                            {
                                for (int index = house.animals.Count() - 1; index >= 0; --index)
                                {
                                    pairs        = house.animals.Pairs;
                                    keyValuePair = pairs.ElementAt(index);
                                    if (keyValuePair.Value.Equals(farmAnimal))
                                    {
                                        NetLongDictionary <FarmAnimal, NetRef <FarmAnimal> > animals = house.animals;
                                        pairs        = house.animals.Pairs;
                                        keyValuePair = pairs.ElementAt(index);
                                        long key = keyValuePair.Key;
                                        animals.Remove(key);
                                    }
                                }
                            }
                        }
                        for (int index = farm_animals.Animals.Count() - 1; index >= 0; --index)
                        {
                            pairs        = farm_animals.Animals.Pairs;
                            keyValuePair = pairs.ElementAt(index);
                            if (keyValuePair.Value.Equals(farmAnimal))
                            {
                                NetLongDictionary <FarmAnimal, NetRef <FarmAnimal> > animals = farm_animals.Animals;
                                pairs        = farm_animals.Animals.Pairs;
                                keyValuePair = pairs.ElementAt(index);
                                long key = keyValuePair.Key;
                                animals.Remove(key);
                            }
                        }
                    }
                    foreach (Building building in farm.buildings)
                    {
                        if (building.indoors.Value is AnimalHouse house)
                        {
                            for (int index = house.animalsThatLiveHere.Count - 1; index >= 0; --index)
                            {
                                if (Utility.getAnimal(house.animalsThatLiveHere[index]).home != building)
                                {
                                    house.animalsThatLiveHere.RemoveAt(index);
                                }
                            }
                        }
                    }
                    foreach (FarmAnimal farmAnimal in farmAnimalList1)
                    {
                        foreach (Building building in farm.buildings)
                        {
                            if (building.buildingType.Contains(farmAnimal.buildingTypeILiveIn.Value) && building.indoors.Value is AnimalHouse house && !house.isFull())
                            {
                                farmAnimal.home = building;
                                farmAnimal.homeLocation.Value = new Vector2(building.tileX.Value, building.tileY.Value);
                                farmAnimal.setRandomPosition(farmAnimal.home.indoors.Value);
                                (farmAnimal.home.indoors.Value as AnimalHouse).animals.Add(farmAnimal.myID.Value, farmAnimal);
                                (farmAnimal.home.indoors.Value as AnimalHouse).animalsThatLiveHere.Add(farmAnimal.myID.Value);
                                break;
                            }
                        }
                    }
                    List <FarmAnimal> farmAnimalList2 = new List <FarmAnimal>();
                    foreach (FarmAnimal farmAnimal in farmAnimalList1)
                    {
                        if (farmAnimal.home == null)
                        {
                            farmAnimalList2.Add(farmAnimal);
                        }
                    }
                    foreach (FarmAnimal farmAnimal in farmAnimalList2)
                    {
                        farmAnimal.Position = Utility.recursiveFindOpenTileForCharacter(farmAnimal, farm, new Vector2(40f, 40f), 200) * 64f;
                        if (!farm_animals.Animals.ContainsKey(farmAnimal.myID.Value))
                        {
                            farm_animals.Animals.Add(farmAnimal.myID.Value, farmAnimal);
                        }
                    }
                }
            }
            return(false);
        }
Beispiel #6
0
 public virtual void RemoveSittingFarmer(Farmer farmer)
 {
     sittingFarmers.Remove(farmer.UniqueMultiplayerID);
 }
Beispiel #7
0
 public virtual void RemoveFromParticipants()
 {
     participants.Remove(Game1.player.UniqueMultiplayerID);
     MarkForRemovalIfEmpty();
 }
Beispiel #8
0
        public static bool Prefix()
        {
            if (!Game1.IsMasterGame)
            {
                return(false);
            }

            foreach (var loc in Mod.GetAllLocations())
            {
                if (loc is BuildableGameLocation farm && loc is IAnimalLocation farm_animals)
                {
                    foreach (Building building in farm.buildings)
                    {
                        if (building.indoors.Value != null && building.indoors.Value is AnimalHouse)
                        {
                            foreach (long id in (NetList <long, NetLong>)(building.indoors.Value as AnimalHouse).animalsThatLiveHere)
                            {
                                FarmAnimal animal = Utility.getAnimal(id);
                                if (animal != null)
                                {
                                    animal.home = building;
                                    animal.homeLocation.Value = new Vector2(( float )( int )(NetFieldBase <int, NetInt>)building.tileX, ( float )( int )(NetFieldBase <int, NetInt>)building.tileY);
                                }
                            }
                        }
                    }
                    List <FarmAnimal> farmAnimalList1 = new List <FarmAnimal>();
                    foreach (FarmAnimal allFarmAnimal in getAllFarmAnimals(farm))
                    {
                        if (allFarmAnimal.home == null)
                        {
                            farmAnimalList1.Add(allFarmAnimal);
                        }
                    }
                    foreach (FarmAnimal farmAnimal in farmAnimalList1)
                    {
                        NetDictionary <long, FarmAnimal, NetRef <FarmAnimal>, SerializableDictionary <long, FarmAnimal>, NetLongDictionary <FarmAnimal, NetRef <FarmAnimal> > > .PairsCollection pairs;
                        KeyValuePair <long, FarmAnimal> keyValuePair;
                        foreach (Building building in farm.buildings)
                        {
                            if (building.indoors.Value != null && building.indoors.Value is AnimalHouse)
                            {
                                for (int index = (building.indoors.Value as AnimalHouse).animals.Count() - 1; index >= 0; --index)
                                {
                                    pairs        = (building.indoors.Value as AnimalHouse).animals.Pairs;
                                    keyValuePair = pairs.ElementAt(index);
                                    if (keyValuePair.Value.Equals(( object )farmAnimal))
                                    {
                                        NetLongDictionary <FarmAnimal, NetRef <FarmAnimal> > animals = (building.indoors.Value as AnimalHouse).animals;
                                        pairs        = (building.indoors.Value as AnimalHouse).animals.Pairs;
                                        keyValuePair = pairs.ElementAt(index);
                                        long key = keyValuePair.Key;
                                        animals.Remove(key);
                                    }
                                }
                            }
                        }
                        for (int index = farm_animals.Animals.Count() - 1; index >= 0; --index)
                        {
                            pairs        = farm_animals.Animals.Pairs;
                            keyValuePair = pairs.ElementAt(index);
                            if (keyValuePair.Value.Equals(( object )farmAnimal))
                            {
                                NetLongDictionary <FarmAnimal, NetRef <FarmAnimal> > animals = farm_animals.Animals;
                                pairs        = farm_animals.Animals.Pairs;
                                keyValuePair = pairs.ElementAt(index);
                                long key = keyValuePair.Key;
                                animals.Remove(key);
                            }
                        }
                    }
                    foreach (Building building in farm.buildings)
                    {
                        if (building.indoors.Value != null && building.indoors.Value is AnimalHouse)
                        {
                            for (int index = (building.indoors.Value as AnimalHouse).animalsThatLiveHere.Count - 1; index >= 0; --index)
                            {
                                if (Utility.getAnimal((building.indoors.Value as AnimalHouse).animalsThatLiveHere[index]).home != building)
                                {
                                    (building.indoors.Value as AnimalHouse).animalsThatLiveHere.RemoveAt(index);
                                }
                            }
                        }
                    }
                    foreach (FarmAnimal farmAnimal in farmAnimalList1)
                    {
                        foreach (Building building in farm.buildings)
                        {
                            if (building.buildingType.Contains(( string )(NetFieldBase <string, NetString>)farmAnimal.buildingTypeILiveIn) && building.indoors.Value != null && (building.indoors.Value is AnimalHouse && !(building.indoors.Value as AnimalHouse).isFull()))
                            {
                                farmAnimal.home = building;
                                farmAnimal.homeLocation.Value = new Vector2(( float )( int )(NetFieldBase <int, NetInt>)building.tileX, ( float )( int )(NetFieldBase <int, NetInt>)building.tileY);
                                farmAnimal.setRandomPosition(( GameLocation )(NetFieldBase <GameLocation, NetRef <GameLocation> >)farmAnimal.home.indoors);
                                (farmAnimal.home.indoors.Value as AnimalHouse).animals.Add(( long )farmAnimal.myID, farmAnimal);
                                (farmAnimal.home.indoors.Value as AnimalHouse).animalsThatLiveHere.Add(( long )farmAnimal.myID);
                                break;
                            }
                        }
                    }
                    List <FarmAnimal> farmAnimalList2 = new List <FarmAnimal>();
                    foreach (FarmAnimal farmAnimal in farmAnimalList1)
                    {
                        if (farmAnimal.home == null)
                        {
                            farmAnimalList2.Add(farmAnimal);
                        }
                    }
                    foreach (FarmAnimal farmAnimal in farmAnimalList2)
                    {
                        farmAnimal.Position = Utility.recursiveFindOpenTileForCharacter(( Character )farmAnimal, ( GameLocation )farm, new Vector2(40f, 40f), 200) * 64f;
                        if (!farm_animals.Animals.ContainsKey(( long )farmAnimal.myID))
                        {
                            farm_animals.Animals.Add(( long )farmAnimal.myID, farmAnimal);
                        }
                    }
                }
            }
            return(false);
        }