示例#1
0
        public bool Execute(Equipment item, AffixManager affixManager)
        {
            if (item.Corrupted || item.Rarity != EquipmentRarity.Rare)
            {
                return(false);
            }

            int fourMod = 8;
            int fiveMod = 3;
            int sixMod  = 1;

            var sum = fourMod + fiveMod + sixMod;

            var roll     = Random.Next(sum);
            int modCount = roll < fourMod ? 4 :
                           roll < fourMod + fiveMod ? 5 :
                           6;

            item.Stats.Clear();

            var mod = _essence.ItemClassToMod[item.ItemBase.ItemClass];

            StatFactory.AffixToStat(Random, item, mod);

            for (int i = 1; i < modCount; i++)
            {
                StatFactory.AddExplicit(Random, item, affixManager);
            }

            return(true);
        }
示例#2
0
        private static AdditionalSkillLevelParser CreateSut(bool isSpell = false, Dictionary <int, SkillLevelDefinition>?supportLevelDefinitions = null)
        {
            supportLevelDefinitions ??= new Dictionary <int, SkillLevelDefinition>();
            var skillDefinitions = new SkillDefinitions(new[]
            {
                SkillDefinition.CreateActive("a", 0, "", "b", Array.Empty <string>(),
                                             new SkillBaseItemDefinition("a", "a", ReleaseState.Released, new[] { "g1", "g2", isSpell ? "spell" : "attack" }),
                                             CreateActiveSkillDefinition("a"), new Dictionary <int, SkillLevelDefinition>()),
                SkillDefinition.CreateActive("b", 1, "", null, Array.Empty <string>(),
                                             null, CreateActiveSkillDefinition("b"), new Dictionary <int, SkillLevelDefinition>()),
                SkillDefinition.CreateSupport("s1", 2, "", "s2", Array.Empty <string>(),
                                              new SkillBaseItemDefinition("s1", "s1", ReleaseState.Released, new[] { "g2", "g3" }),
                                              CreateSupportSkillDefinition(), supportLevelDefinitions),
                SkillDefinition.CreateSupport("s2", 3, "", null, Array.Empty <string>(),
                                              null, CreateSupportSkillDefinition(), supportLevelDefinitions),
                SkillDefinition.CreateSupport("s3", 4, "", null, Array.Empty <string>(),
                                              null, CreateSupportSkillDefinition(), supportLevelDefinitions),
            });
            var statFactory = new StatFactory();

            return(new AdditionalSkillLevelParser(skillDefinitions,
                                                  new GemStatBuilders(statFactory),
                                                  new GemTagBuilders(),
                                                  new ValueBuilders(),
                                                  new MetaStatBuilders(statFactory),
                                                  new SkillBuilders(statFactory, skillDefinitions)));
        }
        public IStatBuilder AdditionalLevels(ISkillBuilder skill)
        {
            var coreBuilder = new CoreStatBuilderFromCoreBuilder <string>(
                CoreBuilder.Proxy(skill, (ps, b) => b.Build(ps).Id),
                (e, t) => StatFactory.FromIdentity($"Gem.AdditionalLevels.{t}", e, typeof(int)));

            return(new StatBuilder(StatFactory, coreBuilder));
        }
        private IStatBuilder AdditionalLevels(string identityInfix, IGemTagBuilder gemTag, Func <BuildParameters, string, string> buildIdentitySuffix)
        {
            var coreBuilder = new CoreStatBuilderFromCoreBuilder <string>(
                CoreBuilder.Proxy(gemTag, (ps, b) => buildIdentitySuffix(ps, b.Build(ps))),
                (e, t) => StatFactory.FromIdentity($"Gem.AdditionalLevels{identityInfix}.{t}", e, typeof(int)));

            return(new StatBuilder(StatFactory, coreBuilder));
        }
        public IStatBuilder DamageHasKeyword(DamageSource damageSource, IKeywordBuilder keyword)
        {
            var coreBuilder = new CoreStatBuilderFromCoreBuilder <Keyword>(
                CoreBuilder.Proxy(keyword, (ps, b) => b.Build(ps)),
                (e, k) => StatFactory.MainSkillPartDamageHasKeyword(e, k, damageSource));

            return(new StatBuilder(StatFactory, coreBuilder));
        }
示例#6
0
 public Action <Equipment, AffixManager, CurrencyModifiers> RerollExplicits()
 {
     return((item, affixManager, currencyModifier) => {
         foreach (var stat in item.Stats)
         {
             StatFactory.Reroll(_random, item, stat, currencyModifier);
         }
     });
 }
示例#7
0
 public Action <Equipment, AffixManager, CurrencyModifiers> AddExplicitByItemClass(Dictionary <string, Affix> explicitsByItemClass)
 {
     return((item, affixManager, currencyModifier) => {
         if (explicitsByItemClass.ContainsKey(item.ItemBase.ItemClass))
         {
             StatFactory.AddExplicit(_random, item, explicitsByItemClass[item.ItemBase.ItemClass]);
         }
     });
 }
示例#8
0
        private IEnumerable <IStat> ConvertStat(BuildParameters parameters, ICoreBuilder <string> identity, IStat stat)
        {
            var builtIdentity = identity.Build(parameters);

            return(from e in Entity.Build(stat.Entity)
                   let i = $"On({builtIdentity}).By({e})"
                           let registrationType = GainOnAction(stat, builtIdentity, e)
                                                  select StatFactory.CopyWithSuffix(stat, i, stat.DataType, registrationType));
        }
 public CoreStatBuilderFromCoreBuilder(
     ICoreBuilder <T> coreBuilder,
     StatFactory statFactory,
     IEntityBuilder entityBuilder = null)
 {
     _coreBuilder   = coreBuilder;
     _statFactory   = statFactory;
     _entityBuilder = entityBuilder ?? new ModifierSourceEntityBuilder();
 }
示例#10
0
        public bool Execute(Equipment item, AffixManager affixManager)
        {
            if (item.Corrupted || item.Rarity != EquipmentRarity.Rare)
            {
                return(false);
            }

            var corruptedEssenceChance = Fossils.Max(x => x.CorruptedEssenceChance);

            bool addCorruptedEssence = false;

            if (corruptedEssenceChance == 100)
            {
                addCorruptedEssence = true;
            }
            else if (corruptedEssenceChance > 0)
            {
                var chance = Random.Next(100);
                if (chance >= corruptedEssenceChance)
                {
                    addCorruptedEssence = true;
                }
            }

            int addedAffixes = 0;

            if (addCorruptedEssence)
            {
                var essence = _corruptionOnlyEssences[Random.Next(_corruptionOnlyEssences.Count)];

                StatFactory.AddExplicit(Random, item, essence.ItemClassToMod[item.ItemBase.ItemClass]);

                addedAffixes = 1;
            }

            int fourMod = 8;
            int fiveMod = 3;
            int sixMod  = 1;

            var sum = fourMod + fiveMod + sixMod;

            var roll     = Random.Next(sum);
            int modCount = roll < fourMod ? 4 :
                           roll < fourMod + fiveMod ? 5 :
                           6;

            item.Stats.Clear();
            for (int i = addedAffixes; i < modCount; i++)
            {
                StatFactory.AddExplicit(Random, item, affixManager, Fossils);
            }

            return(true);
        }
示例#11
0
    void GiveStats()
    {
        Debug.Log("Give!");
        StatFactory sf = gameObject.GetComponent <StatFactory>();

        if (sf)
        {
            m_Char.GiveStats(sf.Get());
        }
        m_Char.m_Events.MissingStats = false;
    }
示例#12
0
        public bool Execute(Equipment item, AffixManager affixManager)
        {
            if (item.Corrupted || item.Rarity != EquipmentRarity.Magic || item.Prefixes.Count + item.Suffixes.Count != 1)
            {
                return(false);
            }

            StatFactory.AddExplicit(Random, item, affixManager);

            return(true);
        }
示例#13
0
        public bool Execute(Equipment item, AffixManager affixManager)
        {
            if (item.Corrupted || item.Rarity == EquipmentRarity.Normal || item.Rarity == EquipmentRarity.Unique || item.Stats.Count == 0)
            {
                return(false);
            }

            StatFactory.RemoveExplicit(_random, item);

            return(true);
        }
示例#14
0
    void GiveDMG()
    {
        Debug.Log("Give! DMG");

        DamageAble  dmg = gameObject.GetComponent <DamageAble>();
        StatFactory sf  = gameObject.GetComponent <StatFactory>();

        dmg.m_Stats = sf.Get();

        m_Char.m_damage = dmg;
        m_Char.m_Events.MissingDamageComponent = false;
    }
示例#15
0
        public void SetUp()
        {
            _sut = Calculator.CreateCalculator();
            _bar = new Stat("Bar");
            _foo = new Stat("Foo");
            var statFactory = new StatFactory();

            _barFooConversion   = statFactory.ConvertTo(_bar, _foo);
            _barFooGain         = statFactory.GainAs(_bar, _foo);
            _barConversion      = statFactory.Conversion(_bar);
            _barSkillConversion = statFactory.SkillConversion(_bar);
        }
示例#16
0
        private static AdditionalSkillLevelMaximumParser CreateSut(IEnumerable <int> activeLevels, IEnumerable <int> supportLevels)
        {
            var skillDefinitions = new SkillDefinitions(new[]
            {
                CreateActive("a", CreateActiveSkillDefinition("a"), activeLevels.ToDictionary(l => l, _ => CreateLevelDefinition())),
                CreateSupport("s", CreateSupportSkillDefinition(), supportLevels.ToDictionary(l => l, _ => CreateLevelDefinition())),
            });
            var statFactory = new StatFactory();

            return(new AdditionalSkillLevelMaximumParser(skillDefinitions,
                                                         new GemStatBuilders(statFactory),
                                                         new ValueBuilders()));
        }
示例#17
0
        public bool Execute(Equipment item, AffixManager affixManager)
        {
            if (item.Corrupted || item.Rarity != EquipmentRarity.Magic)
            {
                return(false);
            }

            item.Rarity = EquipmentRarity.Rare;

            StatFactory.AddExplicit(Random, item, affixManager);

            return(true);
        }
示例#18
0
        public Action <Equipment, AffixManager, CurrencyModifiers> AddExplicits(DistributionOptions distributionOptions)
        {
            return((item, affixManager, currencyModifier) => {
                switch (distributionOptions)
                {
                case DistributionOptions.MagicDistribution:
                    StatFactory.AddExplicits(_random, item, affixManager, StatFactory.MagicAffixCountOdds, currencyModifier);
                    break;

                case DistributionOptions.RareDistribution:
                    StatFactory.AddExplicits(_random, item, affixManager, StatFactory.RareAffixCountOdds, currencyModifier);
                    break;
                }
            });
        }
        /// <summary>
        /// compute the similarity of case base's cases and problem case
        ///
        /// </summary>
        /// <param name="cases"></param>
        /// <param name="problem"></param>
        /// <returns></returns>
        public ArrayList ComputeSimilarity(ArrayList cases, Case problem)
        {
            if (_env == null)
            {
                throw new ContextException("environment variable is not set");
            }

            ICBRContext ctx = CBRContextManager.GetCBRContext(_env);

            if (ctx == null)
            {
                throw new ContextException("not set context");
            }

            ISimilarity sim = (ISimilarity)ctx.GetSimilarity();

            if (sim == null)
            {
                throw new ContextException("similarity method is not set");
            }

            ArrayList stats = new ArrayList();
            double    similarityThrehold = ctx.GetSimilarityThrehold();

            for (int i = 0; i < cases.Count; i++)
            {
                Case   solution   = (Case)cases[i];
                double similarity = sim.Compare(problem, solution);
                //continue if the similarity by comparing is lower than the
                //similarity threhold in context setting
                if (similarity < similarityThrehold)
                {
                    continue;
                }
                IStat s = StatFactory.newInstance();
                s.SetCBRCase(solution);
                s.SetCaseSimilarity(similarity);
                //bi-sort similarity
                if (stats.Count <= 0)
                {
                    stats.Add(s);
                    continue;
                }
                SortSimilarity(stats, s);
            }

            return(stats);
        }
示例#20
0
    public void Init()
    {
        try
        {
            m_Char.Init(gameObject, m_Image, 1, new SM_Defend(), gameObject.GetComponent <DamageAble>(), m_attLog);
        }
        catch (Exception) { }

        StatFactory sf = gameObject.GetComponent <StatFactory>();

        if (sf)
        {
            m_Char.GiveStats(sf.Get());
        }
        Run = true;
    }
示例#21
0
        public bool Execute(Equipment item, AffixManager affixManager)
        {
            if (Random == null)
            {
                throw new InvalidOperationException("The random number generator is uninitialized");
            }

            if (item.Corrupted || item.Implicit == null)
            {
                return(false);
            }

            StatFactory.Reroll(Random, item, item.Implicit);

            return(true);
        }
示例#22
0
        public bool Execute(Equipment item, AffixManager affixManager)
        {
            if (item.Corrupted || item.Rarity == EquipmentRarity.Normal || item.Rarity == EquipmentRarity.Unique)
            {
                return(false);
            }

            StatFactory.RemoveAllExplicits(item);

            if (!item.Stats.Any())
            {
                item.Rarity = EquipmentRarity.Normal;
            }

            return(true);
        }
        private IValue BuildTargetPoolValue(BuildParameters parameters, IStat targetPoolStat)
        {
            var entity          = parameters.ModifierSourceEntity;
            var targetPoolValue = new StatValue(targetPoolStat);

            return(new FunctionalValue(
                       c => c.GetValue(TargetPoolValueStat(targetPoolValue.Calculate(c))),
                       $"Value of Pool {targetPoolValue}"));

            IStat TargetPoolValueStat(NodeValue?targetPool)
            {
                var targetPoolString = ((Pool)targetPool.Single()).ToString();

                return(StatFactory.FromIdentity(targetPoolString, entity, typeof(uint)));
            }
        }
示例#24
0
        public bool Execute(Equipment item, AffixManager affixManager)
        {
            if (Random == null)
            {
                throw new InvalidOperationException("The random number generator is uninitialized");
            }

            if (item.Corrupted || item.Rarity != EquipmentRarity.Rare || (item.Prefixes.Count >= 3 && item.Suffixes.Count >= 3))
            {
                return(false);
            }

            StatFactory.AddExplicit(Random, item, affixManager);

            return(true);
        }
示例#25
0
        public Action <Equipment, AffixManager, CurrencyModifiers> ResetItem()
        {
            return((item, affixManager, currencyModifier) =>
            {
                item.Influence.Clear();
                item.Implicits.Clear();
                item.Rarity = EquipmentRarity.Normal;
                item.Quality = 0;
                item.QualityType = QualityType.Default;
                item.Stats.Clear();
                item.Destroyed = false;
                item.Completed = false;
                item.Corrupted = false;

                item.ItemBase.Implicits.ForEach(x => StatFactory.AddImplicit(_random, item, x));
            });
        }
示例#26
0
    void SpawnEnemy(int i, int j)
    {
        if (Random.Range(0f, 1f) < m_EnemySpawnrate)
        {
            Vector3 pos = m_Rooms[i, j].transform.position;

            GameObject NE = Instantiate(m_Enemy, transform.parent);
            Enemy      E  = NE.GetComponent <Enemy>();
            E.m_attLog            = m_log;
            E.m_Target            = m_Player;
            NE.transform.position = pos;

            StatFactory SF = NE.GetComponent <StatFactory>();
            SF.MakeRandom(150, 25, 10, 25, 25, 25, 25, 25, 1);
            E.Init();
        }
    }
示例#27
0
        public bool Execute(Equipment item, AffixManager affixManager)
        {
            if (item.Corrupted || item.Rarity != EquipmentRarity.Magic)
            {
                return(false);
            }

            item.Stats.Clear();

            int affixCount = Random.Next(2) + 1;

            for (int i = 0; i < affixCount; i++)
            {
                StatFactory.AddExplicit(Random, item, affixManager);
            }

            return(true);
        }
        private static AdditionalSkillQualityParser CreateSut(Dictionary <int, SkillLevelDefinition>?supportLevelDefinitions = null)
        {
            supportLevelDefinitions ??= new Dictionary <int, SkillLevelDefinition>();
            var skillDefinitions = new SkillDefinitions(new[]
            {
                SkillDefinition.CreateActive("a", 0, "", null, Array.Empty <string>(),
                                             new SkillBaseItemDefinition("a", "a", ReleaseState.Released, Array.Empty <string>()),
                                             CreateActiveSkillDefinition("a"), new Dictionary <int, SkillLevelDefinition>()),
                SkillDefinition.CreateSupport("s1", 2, "", null, Array.Empty <string>(),
                                              new SkillBaseItemDefinition("s1", "s1", ReleaseState.Released, Array.Empty <string>()),
                                              CreateSupportSkillDefinition(), supportLevelDefinitions),
            });
            var statFactory = new StatFactory();

            return(new AdditionalSkillQualityParser(skillDefinitions,
                                                    new GemStatBuilders(statFactory),
                                                    new ValueBuilders(),
                                                    new MetaStatBuilders(statFactory)));
        }
示例#29
0
        public bool Execute(Equipment item, AffixManager affixManager)
        {
            if (Random == null)
            {
                throw new InvalidOperationException("The random number generator is uninitialized");
            }

            if (item.Corrupted || item.Rarity == EquipmentRarity.Normal)
            {
                return(false);
            }

            foreach (var stat in item.Stats)
            {
                StatFactory.Reroll(Random, item, stat);
            }

            return(true);
        }
示例#30
0
    // Class
    // Subclass

    public Unit(string Name = "Unit", double GrowthRate = .25)
    {
        name       = Name;
        growthRate = GrowthRate;
        experience = 0;
        StatFactory sf = new StatFactory();

        Health     = sf.GetStat(StatType.Health, 0, 99);
        Stamina    = sf.GetStat(StatType.Stamina, 0, 99);
        Strength   = sf.GetStat(StatType.Strength);
        Skill      = sf.GetStat(StatType.Skill);
        Endurance  = sf.GetStat(StatType.Endurance);
        Magic      = sf.GetStat(StatType.Magic);
        Defense    = sf.GetStat(StatType.Defense);
        Resistance = sf.GetStat(StatType.Resistance);
        Luck       = sf.GetStat(StatType.Luck);
        Speed      = sf.GetStat(StatType.Speed);
        Movement   = sf.GetStat(StatType.Movement, 4, 8);
    }