コード例 #1
0
        protected virtual int GetProgress(ConquestState state, LoginEventArgs args)
        {
            if (state.User == null)
            {
                return(0);
            }

            if (args == null || args.Mobile is PlayerMobile && args.Mobile.Account != state.User.Account)
            {
                return(0);
            }

            if (Map != null && Map != Map.Internal && (args.Mobile.Map == null || args.Mobile.Map != Map))
            {
                if (MapChangeReset)
                {
                    return(-state.Progress);
                }

                return(0);
            }

            if (!String.IsNullOrWhiteSpace(Region) && (args.Mobile.Region == null || !args.Mobile.Region.IsPartOf(Region)))
            {
                if (RegionChangeReset)
                {
                    return(-state.Progress);
                }

                return(0);
            }

            return(1);
        }
コード例 #2
0
        public static void ConsolidateConquests()
        {
            var tempprofiles = Profiles.ToDictionary(entry => entry.Key,
                                                     entry => entry.Value);

            foreach (var profile in tempprofiles)
            {
                Console.WriteLine("Consolidating Profile: " + profile.Key.RawName);
                if (!Profiles.ContainsKey(profile.Key))
                {
                    continue;
                }

                foreach (var prof in tempprofiles)
                {
                    if (profile.Value != prof.Value && profile.Value.Owner.Account == prof.Value.Owner.Account)
                    {
                        foreach (var state in prof.Value.Registry)
                        {
                            ConquestState s = profile.Value.EnsureState(state.Conquest);

                            if (state.Tier > s.Tier || state.Progress > s.Progress || state.Completed && s.Completed && state.CompletedDate < s.CompletedDate || state.WorldFirst)
                            {
                                s.CopyState(state);
                            }
                        }
                        Console.WriteLine("Consolidated Profile: " + profile.Key.RawName);
                        Profiles.Remove(prof.Value.Owner);
                    }
                }
            }
        }
コード例 #3
0
        protected override int GetProgress(ConquestState state, ConquestProgressContainer args)
        {
            if (state.User == null)
            {
                return(0);
            }

            int progress = base.GetProgress(state, args);

            if (progress <= 0)
            {
                return(progress);
            }

            int total = args.State.Progress + args.Offset;

            ConquestProfile p = Conquests.EnsureProfile(state.User);

            if (p != null)
            {
                total += p.Sum(s => s != state && Include(s) ? s.Progress : 0);
            }

            return(Math.Max(0, total - state.Progress));
        }
コード例 #4
0
        protected virtual int GetProgress(ConquestState state, Item item, CraftResource res, HarvestSystem harvest)
        {
            if (item == null || harvest == null)
            {
                return(0);
            }

            if (state.User == null)
            {
                return(0);
            }

            if (ItemType.IsNotNull && !item.TypeEquals(ItemType, ItemChildren))
            {
                if (ItemChangeReset)
                {
                    return(-state.Progress);
                }

                return(0);
            }

            if (Resource != CraftResource.None && res != Resource)
            {
                return(0);
            }

            if (HarvestSystem.IsNotNull && !harvest.TypeEquals(HarvestSystem, false))
            {
                return(0);
            }

            return(item.Amount);
        }
コード例 #5
0
        protected override int GetProgress(ConquestState state, ConquestTierCompletedContainer args)
        {
            if (state.User == null)
            {
                return(0);
            }

            int progress = base.GetProgress(state, args);

            if (progress <= 0)
            {
                return(progress);
            }

            int count = args.Tier >= TierReq ? 1 : 0;

            ConquestProfile p = Conquests.EnsureProfile(state.User);

            if (p != null)
            {
                count += p.Count(s => s != state && Include(s));
            }

            return(Math.Max(0, count - state.Progress));
        }
コード例 #6
0
        protected virtual void OnGivereward(ConquestState s, BaseCreature reward)
        {
            if (s == null || s.User == null || reward == null || reward.Deleted)
            {
                return;
            }

            reward.Control(s.User);

            AnimalTaming.ScaleSkills(reward, 0.90);

            if (reward.StatLossAfterTame)
            {
                AnimalTaming.ScaleStats(reward, 0.50);
            }

            if (reward.Stable())
            {
                return;
            }

            if (s.User.IsOnline())
            {
                reward.MoveToWorld(s.User.Location, s.User.Map);
            }
            else
            {
                reward.Delete();
            }
        }
コード例 #7
0
        protected virtual bool Include(ConquestState s)
        {
            if (s == null || s.Conquest == this)
            {
                return(false);
            }

            if (ConquestType.IsNotNull && !s.Conquest.TypeEquals(ConquestType, ConquestChildren))
            {
                return(false);
            }

            if (!String.IsNullOrWhiteSpace(NameReq) && !NameSearch.Execute(s.Conquest.Name, NameReq, NameIgnoreCaps))
            {
                return(false);
            }

            if (!String.IsNullOrWhiteSpace(CategoryReq) &&
                !CategorySearch.Execute(s.Conquest.Category, CategoryReq, CategoryIgnoreCaps))
            {
                return(false);
            }

            return(true);
        }
コード例 #8
0
        public virtual void OnWorldFirst(ConquestState s)
        {
            if (!Enabled || Deleted || s == null || s.Conquest != this || s.User == null)
            {
                return;
            }

            if (SoundOnWorldFirst > 0)
            {
                s.User.PlaySound(SoundOnWorldFirst);
            }

            var msg = new StringBuilder();

            msg.AppendLine("World First Conquest!".WrapUOHtmlTag("big"));
            msg.AppendLine("\"{0}\"", Name.WrapUOHtmlColor(Color));
            msg.AppendLine("Unlocked by {0}", s.User.RawName.WrapUOHtmlColor(s.User.GetNotorietyColor()));

            string text = msg.ToString().WrapUOHtmlColor(KnownColor.White);

            if (!Conquests.CMOptions.SupressWorldFirsts)
            {
                Notify.Broadcast <ConquestNotifyGump>(text, true, 1.0, 10.0);
            }

            if (Conquests.CMOptions.ModuleDebug)
            {
                Conquests.CMOptions.ToConsole("{0} world first: {1}", Name, s.User, s.Tier);
            }
        }
コード例 #9
0
        public override sealed int GetProgress(ConquestState state, object args)
        {
            // Handle multi args.
            if (args is object[])
            {
                var o = (object[])args;

                try
                {
                    var item    = (Item)o[0];
                    var quality = (int)o[1];
                    var slayer  = (bool)o[2];
                    var res     = (CraftResource)o[3];
                    var craft   = (CraftSystem)o[4];

                    return(GetProgress(state, item, quality, slayer, res, craft));
                }
                catch
                {
                    return(0);
                }
            }

            return(0);
        }
コード例 #10
0
        protected override int GetProgress(ConquestState state, PlayerConquestContainer args)
        {
            if (state.User == null)
            {
                return(0);
            }

            if (args == null || args.Mobile == null || args.Killer is PlayerMobile && args.Killer.Account != state.User.Account || !(args.Mobile is PlayerMobile) || !(args.Killer is PlayerMobile))
            {
                return(0);
            }

            var killer = args.Killer as PlayerMobile;
            var victim = args.Killer as PlayerMobile;

            Faction killerFaction = Faction.Find(killer, true);
            Faction victimFaction = Faction.Find(victim, true);

            if (killerFaction == null || victimFaction == null || killerFaction == victimFaction || AutoPvP.IsParticipant(victim))
            {
                return(0);
            }

            Player ethickiller = Player.Find(killer);
            Player ethicvictim = Player.Find(victim);

            if (IsEthic && (ethickiller == null || ethicvictim == null || ethickiller.Ethic == ethicvictim.Ethic))
            {
                return(0);
            }

            return(base.GetProgress(state, args));
        }
コード例 #11
0
        protected virtual int GetProgress(ConquestState state, Skill skill)
        {
            if (skill == null)
            {
                return(0);
            }

            if (state.User == null)
            {
                return(0);
            }

            if ((Skill != (SkillName)skill.SkillID))
            {
                if (ChangeSkillReset)
                {
                    return(-state.Progress);
                }

                return(0);
            }

            if (SkillAmount != 0 && SkillAmount > state.User.Skills[Skill].Value)
            {
                return(0);
            }

            return(1);
        }
コード例 #12
0
        protected virtual int GetProgress(ConquestState state, PlayerMobile victim)
        {
            if (victim == null)
            {
                return(0);
            }

            if (state.User == null)
            {
                return(0);
            }

            PvPBattle battle = AutoPvP.FindBattle(state.User);

            if (Battle.IsNotNull && !battle.TypeEquals(Battle, BattleChildren))
            {
                if (ChangeBattleReset)
                {
                    return(-state.Progress);
                }

                return(0);
            }

            return(1);
        }
コード例 #13
0
        protected virtual int GetProgress(ConquestState state, CreatureConquestContainer args)
        {
            if (state.User == null)
            {
                return(0);
            }

            if (args == null || args.Creature == null || args.Killer is PlayerMobile && args.Killer.Account != state.User.Account)
            {
                return(0);
            }

            if (Creature.IsNotNull && !args.Creature.TypeEquals(Creature, Children))
            {
                if (ChangeCreatureReset)
                {
                    return(-state.Progress);
                }

                return(0);
            }

            if (AccessCreature > args.Creature.AccessLevel)
            {
                return(0);
            }

            if (AccessKiller > args.Killer.AccessLevel)
            {
                return(0);
            }

            if (NotoCompare != NotorietyType.None && NotoCompare != args.Killer.ComputeNotoriety(args.Creature))
            {
                return(0);
            }

            if (NotoCreature != NotorietyType.None && NotoCreature != args.Creature.ComputeNotoriety())
            {
                return(0);
            }

            if (NotoKiller != NotorietyType.None && NotoKiller != args.Killer.ComputeNotoriety())
            {
                return(0);
            }

            if (((BaseCreature)args.Creature).IsBonded)
            {
                return(0);
            }

            if (IsParagon && !((BaseCreature)args.Creature).IsParagon)
            {
                return(0);
            }

            return(1);
        }
コード例 #14
0
        protected virtual int GetProgress(
            ConquestState state, Item item, int quality, bool slayer, CraftResource res, CraftSystem craft)
        {
            if (state.User == null)
            {
                return(0);
            }

            if (item == null || craft == null)
            {
                return(0);
            }

            if (ItemType.IsNotNull && !item.TypeEquals(ItemType, ItemChildren))
            {
                if (ItemChangeReset)
                {
                    return(-state.Progress);
                }

                return(0);
            }

            if (IsExceptional && quality == 0)
            {
                return(0);
            }

            if (IsSlayer && !slayer)
            {
                return(0);
            }

            if (IsCloth && !(item is BaseClothing))
            {
                return(0);
            }

            if (Resource != CraftResource.None && res != Resource)
            {
                return(0);
            }

            if (CraftSystem.IsNotNull && !craft.TypeEquals(CraftSystem, false))
            {
                return(0);
            }

            // This function is only called after a successful completion so amount will
            // not be zero except for the case of a potion that was created and auto-consolidated
            // into a keg by the oncraft handler in BasePotion
            if (item.Amount <= 0)
            {
                return(1);
            }

            return(item.Amount);
        }
コード例 #15
0
        public static ConquestCompletedGump Acquire(ConquestState state)
        {
            var gumps = GetInstances <ConquestCompletedGump>(state.User, true);
            var type  = Conquests.ConquestCompleteGumpTypes.FirstOrDefault(t => gumps.All(g => !g.TypeEquals(t)));

            var cg = type.CreateInstanceSafe <ConquestCompletedGump>(state.User, state);

            if (cg != null)
            {
                const int xPos = 100;
                const int yPos = 80;

                cg.X = xPos;
                cg.Y = yPos;

                if (gumps.Length > 0)
                {
                    const int w = 350;
                    const int h = 150;

                    const int rows = 2;
                    const int cols = 3;

                    bool escape = false;

                    for (int x = 0; x < cols; x++)
                    {
                        int realX = xPos + (x * w);

                        for (int y = 0; y < rows; y++)
                        {
                            int realY = yPos + (y * h);

                            if (gumps.Any(g => g.X == realX && g.Y == realY))
                            {
                                continue;
                            }

                            cg.X = realX;
                            cg.Y = realY;

                            escape = true;
                            break;
                        }

                        if (escape)
                        {
                            break;
                        }
                    }
                }
            }

            return(cg);
        }
コード例 #16
0
        protected virtual void OnGiveReward(ConquestState s, XmlAttachment reward)
        {
            if (s == null || s.User == null || reward == null || reward.Deleted)
            {
                return;
            }

            if (!XmlAttach.AttachTo(s.User, reward))
            {
                reward.Delete();
            }
        }
コード例 #17
0
ファイル: StateGump.cs プロジェクト: zerodowned/UO-Forever
        public ConquestStateGump(PlayerMobile user, ConquestState state)
            : base(user, null, null, null)
        {
            State = state;

            Modal = false;

            CanClose   = true;
            CanDispose = true;
            CanMove    = true;
            CanResize  = true;

            ForceRecompile = true;
        }
コード例 #18
0
        protected virtual int GetProgress(ConquestState state, Account account)
        {
            if (state.User == null)
            {
                return(0);
            }

            if (account == null || DateTime.UtcNow - account.Created < AccountAge)
            {
                return(0);
            }

            return(1);
        }
コード例 #19
0
        protected virtual int GetProgress(ConquestState state, CastSpellConquestContainer args)
        {
            if (state.User == null)
            {
                return(0);
            }

            if (args == null || args.SpellID < 0 || args.Mobile is PlayerMobile && args.Mobile.Account != state.User.Account)
            {
                return(0);
            }

            if (CheckBook)
            {
                var book = args.Spellbook as Spellbook;

                if (book == null || !book.HasSpell(args.SpellID))
                {
                    book = Spellbook.Find(args.Mobile, args.SpellID);
                }

                if (book == null)
                {
                    return(0);
                }
            }

            if (CheckRegs)
            {
                SpellInfo info = SpellRegistry.GetSpellInfo(args.SpellID);

                if (info != null && !args.Mobile.HasItems(info.Reagents, info.Amounts))
                {
                    return(0);
                }
            }

            if (Spell.IsNotNull && SpellRegistry.GetRegistryNumber(Spell) != args.SpellID)
            {
                if (ChangeSpellReset)
                {
                    return(-state.Progress);
                }

                return(0);
            }

            return(1);
        }
コード例 #20
0
        protected virtual void OnGiveReward(ConquestState s, Mobile reward)
        {
            if (s == null || s.User == null || reward == null || reward.Deleted)
            {
                return;
            }

            if (s.User.IsOnline())
            {
                reward.MoveToWorld(s.User.Location, s.User.Map);
            }
            else
            {
                reward.Delete();
            }
        }
コード例 #21
0
        public static ConquestState FindWorldFirst(Conquest c)
        {
            if (c == null || c.Deleted)
            {
                return(null);
            }

            ConquestState state = null;

            if (Profiles.Values.Any(p => p != null && p.Owner != null && p.TryGetState(c, out state) && state.WorldFirst))
            {
                return(state);
            }

            return(null);
        }
コード例 #22
0
        public virtual void OnProgress(ConquestState s, int offset)
        {
            if (!Enabled || Deleted || s == null || s.Conquest != this || s.User == null || offset <= 0)
            {
                return;
            }

            if (!Secret && SoundOnProgress > 0)
            {
                s.User.PlaySound(SoundOnProgress);
            }

            if (Conquests.CMOptions.ModuleDebug)
            {
                Conquests.CMOptions.ToConsole("{0} progress: {1} ({2}{3})", Name, s.User, offset >= 0 ? "+" : String.Empty, offset);
            }
        }
コード例 #23
0
        protected virtual int GetProgress(ConquestState state, Item stolenItem)
        {
            if (stolenItem == null)
            {
                return(0);
            }

            if (state.User == null)
            {
                return(0);
            }

            var creature = stolenItem.RootParent as BaseCreature;

            if (IsDungeon && !state.User.InRegion <DungeonRegion>())
            {
                return(0);
            }

            if (PlayerTarget && !(stolenItem.RootParent is PlayerMobile))
            {
                return(0);
            }

            if (Creature.IsNotNull && creature != null && !creature.TypeEquals(Creature, Children))
            {
                if (ChangeCreatureReset)
                {
                    return(-state.Progress);
                }

                return(0);
            }

            if (Item.IsNotNull && !stolenItem.TypeEquals(Item, ItemChildren))
            {
                if (ItemChangeReset)
                {
                    return(-state.Progress);
                }

                return(0);
            }

            return(1);
        }
コード例 #24
0
        protected virtual int GetProgress(ConquestState state, TArgs args)
        {
            if (args == null || args.State == null || args.State.Conquest == null || args.State.Conquest == this)
            {
                return(0);
            }

            if (state.User == null)
            {
                return(0);
            }

            if (ConquestType.IsNotNull && !args.State.Conquest.TypeEquals(ConquestType, ConquestChildren))
            {
                if (ConquestChangeReset)
                {
                    return(-state.Progress);
                }

                return(0);
            }

            if (!String.IsNullOrWhiteSpace(NameReq) && !NameSearch.Execute(args.State.Conquest.Name, NameReq, NameIgnoreCaps))
            {
                if (NameChangeReset)
                {
                    return(-state.Progress);
                }

                return(0);
            }

            if (!String.IsNullOrWhiteSpace(CategoryReq) &&
                !CategorySearch.Execute(args.State.Conquest.Category, CategoryReq, CategoryIgnoreCaps))
            {
                if (CategoryChangeReset)
                {
                    return(-state.Progress);
                }

                return(0);
            }

            return(1);
        }
コード例 #25
0
        protected virtual int GetProgress(ConquestState state, Faction faction)
        {
            if (state.User == null)
            {
                return(0);
            }

            if (faction == null && !IsFactionQuit)
            {
                return(0);
            }

            if (faction != null && !string.IsNullOrEmpty(Faction) && faction.Definition.FriendlyName != Faction)
            {
                return(0);
            }

            return(1);
        }
コード例 #26
0
        protected virtual int GetProgress(ConquestState state, ISpell spell)
        {
            if (state.User == null)
            {
                return(0);
            }

            if (Spell.IsNotNull && !spell.TypeEquals(Spell, false))
            {
                if (ChangeSpellReset)
                {
                    return(-state.Progress);
                }

                return(0);
            }

            return(1);
        }
コード例 #27
0
        protected virtual int GetProgress(ConquestState state, BaseHouse house)
        {
            if (house == null)
            {
                return(0);
            }

            if (state.User == null)
            {
                return(0);
            }

            if (House.IsNotNull && !house.TypeEquals(House, false))
            {
                return(0);
            }

            return(1);
        }
コード例 #28
0
        protected virtual int GetProgress(ConquestState state, CommandEventArgs args)
        {
            if (state.User == null)
            {
                return(0);
            }

            if (args == null || args.Mobile is PlayerMobile && args.Mobile.Account != state.User.Account)
            {
                return(0);
            }

            if (!String.IsNullOrWhiteSpace(Command) && !Insensitive.Equals(args.Command, Command))
            {
                return(0);
            }

            return(1);
        }
コード例 #29
0
        protected virtual Color GetTierColor(ConquestState entry)
        {
            if (entry == null || !entry.ConquestExists)
            {
                return(Color.Yellow);
            }

            double p = entry.Tier / entry.TierMax;

            if (p < 0.50)
            {
                return(Color.OrangeRed.Interpolate(Color.Yellow, p / 0.50));
            }

            if (p > 0.50)
            {
                return(Color.Yellow.Interpolate(Color.LawnGreen, (p - 0.50) / 0.50));
            }

            return(Color.Yellow);
        }
コード例 #30
0
        protected virtual void OnRewarded(
            ConquestState s, List <IEntity> rewards, List <IXmlAttachment> attachments, bool message)
        {
            if (s == null || s.User == null || !message)
            {
                return;
            }

            int count = rewards.Count + attachments.Count;

            if (count > 0)
            {
                s.User.SendMessage(
                    85,
                    "You received {0:#,0} reward{1} and {2:#,0} point{3} for your conquest!",
                    rewards.Count,
                    rewards.Count != 1 ? "s" : String.Empty,
                    s.Conquest.Points,
                    s.Conquest.Points != 1 ? "s" : String.Empty);
            }
        }