Пример #1
0
 static void Postfix(ref AgingCampaignBehavior __instance, Hero current)
 {
     if (!current.IsTemplate && current.IsAlive)
     {
         if ((int)current.BirthDay.ElapsedDaysUntilNow == (int)CampaignTime.Years((float)Campaign.Current.Models.AgeModel.HeroComesOfAge).ToDays)
         {
             if (current.HeroState != Hero.CharacterStates.Active)
             {
                 CampaignEventDispatcher dispatcher = GameComponent.CampaignEventDispatcher();
                 if (null != dispatcher)
                 {
                     ReflectUtils.ReflectMethodAndInvoke("OnHeroComesOfAge", dispatcher, new Object[] { current });
                 }
             }
         }
         else if ((int)current.BirthDay.ElapsedDaysUntilNow == (int)CampaignTime.Years((float)Campaign.Current.Models.AgeModel.BecomeTeenagerAge).ToDays)
         {
             // CampaignEventDispatcher.Instance.OnHeroReachesTeenAge(current);
         }
         else if ((int)current.BirthDay.ElapsedDaysUntilNow == (int)CampaignTime.Years((float)Campaign.Current.Models.AgeModel.BecomeChildAge).ToDays)
         {
             // CampaignEventDispatcher.Instance.OnHeroGrowsOutOfInfancy(current);
         }
     }
 }
Пример #2
0
        public void DailyTickFixClanLeader()
        {
            //玩家家族领导人修正, 玩家家族领导人不是玩家时,将会修改成玩家
            if (Clan.PlayerClan.Leader != Hero.MainHero)
            {
                Clan.PlayerClan.SetLeader(Hero.MainHero);
                InformationManager.DisplayMessage(new InformationMessage("MoreSpouses: player clan leader fix"));
            }

            //家族领导人的家族不是该家族时,将会把领导人修改成该家族的人员
            IEnumerable <Clan> clans = Clan.All.ToList().Where(obj => obj.IsEliminated && (null != obj.Leader && obj.Leader.Clan != obj));

            if (clans.Count() > 0)
            {
                for (int i = 0; i < clans.Count(); i++)
                {
                    Clan current = clans.ElementAt(i);

                    if (null != current.Leader && null != current.Leader.Clan && current.Leader.Clan != current)
                    {
                        Hero        sourc      = current.Leader;
                        List <Hero> otherHeros = current.Heroes.Where((obj) => (obj != sourc)).ToList();
                        Hero        target     = null;
                        if (otherHeros.Count > 0)
                        {
                            target = otherHeros.GetRandomElement();
                            current.SetLeader(target);
                        }
                        else
                        {
                            CharacterObject character = CharacterObject.FindFirst(obj => obj.Culture == current.Culture && obj.Occupation == Occupation.Lord);
                            target = HeroCreator.CreateSpecialHero(character, sourc.HomeSettlement, null, null, -1);
                            target.ChangeState(CharacterStates.Dead);
                            target.Clan = current;
                            CampaignEventDispatcher.Instance.OnHeroCreated(target, false);
                            current.SetLeader(target);
                        }

                        if (null != GameComponent.CampaignEventDispatcher())
                        {
                            GameComponent.CampaignEventDispatcher().OnClanLeaderChanged(sourc, target);
                        }

                        InformationManager.DisplayMessage(new InformationMessage("MoreSpouses: " + current.Name + " clan leader fix"));
                    }
                }
            }

            //修正国王领导
            IEnumerable <Kingdom> kingdoms = Kingdom.All.ToList().Where(obj => obj.RulingClan == Clan.PlayerClan && (!obj.Clans.Contains(Clan.PlayerClan)));

            if (kingdoms.Count() > 0)
            {
                for (int i = 0; i < kingdoms.Count(); i++)
                {
                    Kingdom            current    = kingdoms.ElementAt(i);
                    IEnumerable <Clan> aliveClans = current.Clans.Where(obj => !obj.IsEliminated);
                    if (aliveClans.Count() > 0)
                    {
                        current.RulingClan = aliveClans.ToList().GetRandomElement();
                    }
                    else
                    {
                        current.RulingClan = current.Clans.GetRandomElement();
                    }

                    InformationManager.DisplayMessage(new InformationMessage("MoreSpouses: " + current.Name + " kingdom leader fix"));
                }
            }

            //修正玩家部队拥有者不是玩家
            if (null != MobileParty.MainParty && null != MobileParty.MainParty.Party && null != MobileParty.MainParty.Party.Owner &&
                MobileParty.MainParty.Party.Owner != Hero.MainHero)
            {
                MobileParty.MainParty.Party.Owner = Hero.MainHero;
            }
        }