示例#1
0
        public static void OnTick()
        {
            List <PlayerMobile> list = new List <PlayerMobile>(_CitizenWait.Keys.OfType <PlayerMobile>());

            foreach (PlayerMobile pm in list)
            {
                if (_CitizenWait[pm] < DateTime.UtcNow)
                {
                    RemoveWaitTime(pm);
                }
            }

            list.Clear();
            list.TrimExcess();

            Cities.ForEach(sys =>
            {
                if (DateTime.UtcNow > _NextAtrophy)
                {
                    sys.PlayerTable.ForEach(t =>
                    {
                        CityLoyaltyEntry entry = t as CityLoyaltyEntry;

                        if (entry != null)
                        {
                            PlayerMobile owner = entry.Player;

                            entry.Neutrality -= entry.Neutrality / 50;
                            entry.Hate       -= entry.Hate / 50;

                            if (owner != null && owner.LastOnline + TimeSpan.FromHours(40) < DateTime.UtcNow)
                            {
                                entry.Love -= entry.Love / 75;
                            }
                        }
                    });

                    _NextAtrophy = DateTime.UtcNow + TimeSpan.FromDays(1);
                }

                if (sys.NextTradeDealCheck != DateTime.MinValue && sys.NextTradeDealCheck < DateTime.UtcNow)
                {
                    sys.PayTradeDealCost();
                }

                foreach (CityLoyaltyEntry entry in sys.PlayerTable.OfType <CityLoyaltyEntry>())
                {
                    if (entry.TradeDealExpired)
                    {
                        entry.CheckTradeDeal();
                    }
                }

                if (sys.Election != null)
                {
                    sys.Election.OnTick();
                }
                else
                {
                    sys.Election = new CityElection(sys);
                }
            });

            CityTradeSystem.OnTick();
        }
示例#2
0
        public static void OnTick()
        {
            foreach (var sys in Cities)
            {
                List <Mobile> list = new List <Mobile>(sys.CitizenWait.Keys);

                foreach (var m in list)
                {
                    if (sys.CitizenWait[m] < DateTime.UtcNow)
                    {
                        sys.RemoveWaitTime(m);
                    }
                }

                ColUtility.Free(list);

                if (DateTime.UtcNow > _NextAtrophy)
                {
                    sys.PlayerTable.ForEach(t =>
                    {
                        CityLoyaltyEntry entry = t as CityLoyaltyEntry;

                        if (entry != null && entry.Player != null)
                        {
                            PlayerMobile owner = entry.Player;

                            entry.Neutrality -= entry.Neutrality / 50;
                            entry.Hate       -= entry.Hate / 50;

                            if (owner.LastOnline + LoveAtrophyDuration < DateTime.UtcNow)
                            {
                                entry.Love -= entry.Love / 75;
                            }
                        }
                    });

                    _NextAtrophy = DateTime.UtcNow + TimeSpan.FromDays(1);
                }

                if (sys.NextTradeDealCheck != DateTime.MinValue && sys.NextTradeDealCheck < DateTime.UtcNow)
                {
                    sys.PayTradeDealCost();
                }

                foreach (CityLoyaltyEntry entry in sys.PlayerTable.OfType <CityLoyaltyEntry>())
                {
                    if (entry.TradeDealExpired)
                    {
                        entry.CheckTradeDeal();
                    }
                }

                if (sys.Election != null)
                {
                    sys.Election.OnTick();
                }
                else
                {
                    sys.Election = new CityElection(sys);
                }
            }

            CityTradeSystem.OnTick();
        }