예제 #1
0
 void StatsSetup(int atk, int amr) //Khoi tao mac dinh cho player
 {
     basePrimary      = new PrimaryStats(atk, amr);
     currentPrimary   = new PrimaryStats(basePrimary.PowerAttack, basePrimary.Armor);
     maxSecondary     = new SecondaryStats(100 + (int)(basePrimary.Armor * 0.5f), 100 + (int)(basePrimary.PowerAttack * 0.5f));
     currentSecondary = new SecondaryStats(maxSecondary.Hearth, maxSecondary.Mana);
 }
예제 #2
0
    public float GetSecondaryStat(SecondaryStats stat)
    {
        float       results         = 0f;
        float       multiplier      = 1f;
        LeaderSkill LeadershipSkill = PlayerManager.Instance.CurrentLeaderSkill;

        foreach (EquipmentType type in EquipedItems.Keys)
        {
            if (EquipedItems[type] != null)
            {
                results    += EquipedItems[type].GetStats(stat);
                multiplier += EquipedItems[type].GetMultiplier(stat);
            }
        }

        //Debug.Log(stat + " calc: " + results + " * " + (multiplier * 100f).ToString("0") + "%");

        if (LeadershipSkill != null && LeadershipSkill.type == LeadershipSkillType.SecondaryStatBoost && LeadershipSkill.secondaryStat == stat)
        {
            return(Mathf.RoundToInt(results * multiplier * LeadershipSkill.Multiplier));
        }
        else
        {
            return(Mathf.RoundToInt(results * multiplier));
        }
    }
예제 #3
0
    public string GetDisplayValue(SecondaryStats stat, float ilvl, int seed)
    {
        if (!ContainsStat(stat))
        {
            return("");
        }
        string result = "";

        switch (data.ModType)
        {
        case ItemModType.Add:
            result = "+" + Mathf.RoundToInt(data.GetModEffect(ilvl, seed)) + " " + stat.ToString();
            break;

        case ItemModType.Multi:
            Debug.Log("[Display Stat] " + stat + ": " + (data.GetModEffect(ilvl, seed)));
            result = "+" + Mathf.RoundToInt(data.GetModEffect(ilvl, seed) * 100f) + "% " + stat.ToString();
            break;

        case ItemModType.Status:
        default:
            result = "TODO fill this out";
            break;
        }
        return(result);
    }
        public ModifySecondaryStatContext(SecondaryStats stats)
        {
            _stats = stats;

            _setHistory   = new SecondaryStats();
            _resetHistory = new SecondaryStats();
        }
예제 #5
0
        internal static void PopulateSecondryStats()
        {
            using (StyxWoW.Memory.AcquireFrame())
            {
                _secondaryStats = new SecondaryStats();
            }

            // Haste Rating Required Per 1%
            // Level 60	 Level 70	 Level 80	 Level 85	 Level 90
            //   10	      15.77	      32.79	      128.125	 425.19

            Logging.WriteDiagnostic("");
            Logging.WriteDiagnostic("Health: {0}", StyxWoW.Me.MaxHealth);
            Logging.WriteDiagnostic("Agility: {0}", StyxWoW.Me.Agility);
            Logging.WriteDiagnostic("Intellect: {0}", StyxWoW.Me.Intellect);
            Logging.WriteDiagnostic("Spirit: {0}", StyxWoW.Me.Spirit);
            Logging.WriteDiagnostic("");
            Logging.WriteDiagnostic("Attack Power: {0}", _secondaryStats.AttackPower);
            Logging.WriteDiagnostic("Power: {0:F2}", _secondaryStats.Power);
            Logging.WriteDiagnostic("Hit(M/R): {0}/{1}", _secondaryStats.MeleeHit, _secondaryStats.SpellHit);
            Logging.WriteDiagnostic("Expertise: {0}", _secondaryStats.Expertise);
            Logging.WriteDiagnostic("Mastery: {0:F2}", _secondaryStats.Mastery);
            Logging.WriteDiagnostic("Mastery (CR): {0:F2}", _secondaryStats.MasteryCR);
            Logging.WriteDiagnostic("Crit: {0:F2}", _secondaryStats.Crit);
            Logging.WriteDiagnostic("Haste(M/R): {0} (+{1} % Haste) / {2} (+{3} % Haste)", _secondaryStats.MeleeHaste, Math.Round(_secondaryStats.MeleeHaste / 425.19, 2), _secondaryStats.SpellHaste, Math.Round(_secondaryStats.SpellHaste / 425.19, 2));
            Logging.WriteDiagnostic("SpellPen: {0}", _secondaryStats.SpellPen);
            Logging.WriteDiagnostic("PvP Resil: {0}", _secondaryStats.Resilience);
            Logging.WriteDiagnostic("PvP Power: {0}", _secondaryStats.PvpPower);
            Logging.WriteDiagnostic("Spell Power: {0}", _secondaryStats.SpellPower);
            Logging.WriteDiagnostic("");
        }
예제 #6
0
    void StatSetup(int str, int agi, int intl, int stam, int spr)
    {
        basePrimary    = new PrimaryStats(str, agi, intl, stam, spr);
        currentPrimary = new PrimaryStats(basePrimary.strength, basePrimary.agility, basePrimary.intellect, basePrimary.stamina, basePrimary.spirit);

        maxSecondary     = new SecondaryStats(currentPrimary.stamina * 10, currentPrimary.intellect * 10, currentPrimary.agility * 10);
        currentSecondary = new SecondaryStats(maxSecondary.health, maxSecondary.magic, maxSecondary.energy);
    }
예제 #7
0
 public float GetValue(SecondaryStats stat, float ilvl, int seed)
 {
     if (!ContainsStat(stat))
     {
         return(0);
     }
     return(data.GetModEffect(ilvl, seed));
 }
예제 #8
0
 public bool ContainsStat(SecondaryStats stat)
 {
     if (GetModType() == ItemModType.Status)
     {
         return(false);
     }
     return(data.isStatType(ItemModEffects.Secondary) && data.isStat(stat));
 }
예제 #9
0
 public Creature()
 {
     GivenName      = "Default_Name";
     species        = "Ratcher";
     stats          = new Stats();
     temperament    = 0;
     lifeExpectancy = 0;
     secondaryStats = new SecondaryStats();
     guid           = Guid.NewGuid();
 }
예제 #10
0
 void UpdateStatValue(SecondaryStats stat, int difference)
 {
     //print(stat.ToString() + " [" + difference + "]");
     if (!SecondaryStatsUpdates.ContainsKey(stat))
     {
         print("No UI Text Element for stat: " + stat);
         return;
     }
     UpdateStatValue(SecondaryStatsUpdates[stat], difference);
 }
예제 #11
0
 public bool isStat(SecondaryStats stat)
 {
     if (SecondaryStat == null)
     {
         return(false);
     }
     if (SecondaryStat == stat)
     {
         return(true);
     }
     return(false);
 }
예제 #12
0
    public int GetStatDifference(SecondaryStats stat, Item data, Hero hero)
    {
        // Get the base hero stats without the item
        // Get the (original % effect) then remove the item stats after the multi
        float heroBaseStat = (hero.GetSecondaryStat(stat) / hero.GetStatMultiplier(stat)) - GetStats(stat);
        float baseMulti    = hero.GetStatMultiplier(stat) - GetMultiplier(stat);

        // Get the hero stats with the new item
        // Add the  item stats before the multi then scale by the % effect, finish by subtracting the original value to get the difference
        float diffValue = ((heroBaseStat + data.GetStats(stat)) * (baseMulti + data.GetMultiplier(stat))) - hero.GetSecondaryStat(stat);

        return(Mathf.RoundToInt(diffValue));
        //return data.GetStats(stat) - GetStats(stat);
    }
예제 #13
0
    public float GetStatMultiplier(SecondaryStats stat)
    {
        float multiplier = 1f;

        foreach (EquipmentType type in EquipedItems.Keys)
        {
            if (EquipedItems[type] != null)
            {
                multiplier += EquipedItems[type].GetMultiplier(stat);
            }
        }

        return(multiplier);
    }
예제 #14
0
파일: Item.cs 프로젝트: Bia10/SingularMod
        public static void WriteCharacterGearAndSetupInfo()
        {
            if (GlobalSettings.Instance.LogLevel < LogLevel.Normal)
            {
                return;
            }

            uint           totalItemLevel;
            SecondaryStats ss;          //create within frame (does series of LUA calls)

            using (StyxWoW.Memory.AcquireFrame())
            {
                totalItemLevel = CalcTotalGearScore();
                ss             = new SecondaryStats();
            }

            Logger.WriteFile("");
            Logger.WriteFile("Equipped Total Item Level  : {0}", totalItemLevel);
            Logger.WriteFile("Equipped Average Item Level: {0:F0}", ((double)totalItemLevel) / 17.0);
            Logger.WriteFile("");
            Logger.WriteFile("Health:      {0}", Me.MaxHealth);
            Logger.WriteFile("Agility:     {0}", Me.Agility);
            Logger.WriteFile("Intellect:   {0}", Me.Intellect);
            Logger.WriteFile("Spirit:      {0}", Me.Spirit);
            Logger.WriteFile("");
            Logger.WriteFile("Hit(M/R):    {0}/{1}", ss.MeleeHit, ss.SpellHit);
            Logger.WriteFile("Expertise:   {0}", ss.Expertise);
            Logger.WriteFile("Mastery:     {0:F2}", ss.Mastery);
            Logger.WriteFile("Crit:        {0:F2}", ss.Crit);
            Logger.WriteFile("Haste(M/R):  {0}/{1}", ss.MeleeHaste, ss.SpellHaste);
            Logger.WriteFile("SpellPen:    {0}", ss.SpellPen);
            Logger.WriteFile("PvP Resil:   {0}", ss.Resilience);
            Logger.WriteFile("PvP Power:   {0}", ss.PvpPower);
            Logger.WriteFile("");

            if (!Singular.Managers.TalentManager.Glyphs.Any())
            {
                Logger.WriteFile("--- no glyphs equipped");
            }
            else
            {
                foreach (string glyphName in Singular.Managers.TalentManager.Glyphs.OrderBy(g => g).Select(g => g).ToList())
                {
                    Logger.WriteFile("--- {0}", glyphName);
                }
            }

            Logger.WriteFile("");
        }
예제 #15
0
        private void Initialize(int[] primary, int[] secondary, int[] defense, int[] element, int[] armorType, int[] weaponType)
        {
            UnitLevel = new Level(200);

            Conditions = Condition.None;

            Primary        = new PrimaryStats(primary);
            Secondary      = new SecondaryStats(secondary);
            Defense        = new DefenseStats(defense);
            ElementDefense = new ArcaneElementStats(element);
            ArmorTypes     = new ArmorTypeStats(armorType);
            WeaponTypes    = new WeaponDamageTypeStats(weaponType);

            SetMajorStats();
        }
예제 #16
0
        private void Initialize()
        {
            UnitLevel = new Level(200);

            Conditions = Condition.None;

            Primary        = new PrimaryStats();
            Secondary      = new SecondaryStats();
            Defense        = new DefenseStats();
            ElementDefense = new ArcaneElementStats();
            ArmorTypes     = new ArmorTypeStats();
            WeaponTypes    = new WeaponDamageTypeStats();

            SetMajorStats();
        }
예제 #17
0
    public int GetStats(SecondaryStats stat)
    {
        int total = 0;

        if (data is ItemWeapon)
        {
            total = ((ItemWeapon)data).GetStatValue(stat, ItemLevel);
        }
        else if (data is ItemArmor)
        {
            total = ((ItemArmor)data).GetStatValue(stat, ItemLevel);
        }
        else
        {
            total = 0;
        }

        foreach (ItemAffix affix in Affixes)
        {
            if (affix.isStatType(ItemModEffects.Secondary))
            {
                switch (affix.GetModType())
                {
                case ItemModType.Add:
                    total += Mathf.RoundToInt(affix.GetValue(stat, ItemLevel, _VarianceSeed));
                    break;

                default:
                    break;
                }
            }
        }

        if (stat == SecondaryStats.SkillLevel)
        {
            total = Mathf.CeilToInt(total / 100f);
        }

        return(total);
    }
예제 #18
0
        public FieldObjUser(GameStageUser user)
        {
            GameStageUser = user;
            Watching      = new List <IFieldSplit>();
            Controlling   = new List <IFieldControlledObj>();

            ForcedStats    = new ForcedStats();
            SecondaryStats = new SecondaryStats();
            Stats          = new CalculatedStats(
                this,
                GameStage.ItemTemplates,
                GameStage.ItemOptionTemplates,
                GameStage.ItemSetTemplates,
                GameStage.SkillTemplates
                );
            Damage = new CalculatedDamage(
                GameStage.SkillTemplates
                );


            UpdateStats().Wait();
        }
예제 #19
0
    public float GetMultiplier(SecondaryStats stat)
    {
        float multiplier = 0f;

        Random.InitState(_VarianceSeed);

        foreach (ItemAffix affix in Affixes)
        {
            if (affix.isStatType(ItemModEffects.Secondary))
            {
                switch (affix.GetModType())
                {
                case ItemModType.Multi:
                    multiplier += affix.GetValue(stat, ItemLevel, _VarianceSeed);
                    break;

                default:
                    break;
                }
            }
        }

        return(multiplier);
    }
예제 #20
0
        public static void WriteCharacterGearAndSetupInfo()
        {
            Logger.WriteFile("");
            if (SingularSettings.Debug)
            {
                uint totalItemLevel;
                SecondaryStats ss;          //create within frame (does series of LUA calls)

                using (StyxWoW.Memory.AcquireFrame())
                {
                    totalItemLevel = CalcTotalGearScore();
                    ss = new SecondaryStats();
                }

                Logger.WriteFile("Equipped Total Item Level  : {0}", totalItemLevel);
                Logger.WriteFile("Equipped Average Item Level: {0}", totalItemLevel / 16);
                Logger.WriteFile("");
                Logger.WriteFile("Health:      {0}", Me.MaxHealth);
                Logger.WriteFile("Strength:    {0}", Me.Strength);
                Logger.WriteFile("Agility:     {0}", Me.Agility);
                Logger.WriteFile("Intellect:   {0}", Me.Intellect);
                Logger.WriteFile("Spirit:      {0}", Me.Spirit);
                Logger.WriteFile("");
                Logger.WriteFile("Hit(M/R):    {0}/{1}", ss.MeleeHit, ss.SpellHit);
                Logger.WriteFile("Expertise:   {0}", ss.Expertise);
                Logger.WriteFile("Mastery:     {0}", (int)ss.Mastery);
                Logger.WriteFile("Crit:        {0:F2}", ss.Crit);
                Logger.WriteFile("Haste(M/R):  {0}/{1}", ss.MeleeHaste, ss.SpellHaste);
                Logger.WriteFile("SpellPen:    {0}", ss.SpellPen);
                Logger.WriteFile("PvP Resil:   {0}", ss.Resilience);
                Logger.WriteFile("PvP Power:   {0}", ss.PvpPower);
                Logger.WriteFile("");
            }

            Logger.WriteFile("Talents Selected: {0}", Singular.Managers.TalentManager.Talents.Count(t => t.Selected));
            foreach (var t in Singular.Managers.TalentManager.Talents)
            {
                if (!t.Selected)
                    continue;

                string talent = "unknown";
                switch (Me.Class)
                {
                    case WoWClass.DeathKnight:
                        talent = ((ClassSpecific.DeathKnight.DeathKnightTalents)t.Index).ToString();
                        break;
                    case WoWClass.Druid:
                        talent = ((ClassSpecific.Druid.DruidTalents)t.Index).ToString();
                        break;
                    case WoWClass.Hunter:
                        talent = ((ClassSpecific.Hunter.HunterTalents)t.Index).ToString();
                        break;
                    case WoWClass.Mage:
                        talent = ((ClassSpecific.Mage.MageTalents)t.Index).ToString();
                        break;
                    case WoWClass.Monk:
                        talent = ((ClassSpecific.Monk.MonkTalents)t.Index).ToString();
                        break;
                    case WoWClass.Paladin:
                        talent = ((ClassSpecific.Paladin.PaladinTalents)t.Index).ToString();
                        break;
                    case WoWClass.Priest:
                        talent = ((ClassSpecific.Priest.PriestTalents)t.Index).ToString();
                        break;
                    case WoWClass.Rogue:
                        talent = ((ClassSpecific.Rogue.RogueTalents)t.Index).ToString();
                        break;
                    case WoWClass.Shaman:
                        talent = ((ClassSpecific.Shaman.ShamanTalents)t.Index).ToString();
                        break;
                    case WoWClass.Warlock:
                        talent = ((ClassSpecific.Warlock.WarlockTalents)t.Index).ToString();
                        break;
                    case WoWClass.Warrior:
                        talent = ((ClassSpecific.Warrior.WarriorTalents)t.Index).ToString();
                        break;
                }

                Logger.WriteFile("--- #{0} -{1}", t.Index, talent.CamelToSpaced());
            }

            Logger.WriteFile(" ");
            Logger.WriteFile("Glyphs Equipped: {0}", Singular.Managers.TalentManager.Glyphs.Count());
            foreach (string glyphName in Singular.Managers.TalentManager.Glyphs.OrderBy(g => g).Select(g => g).ToList())
            {
                Logger.WriteFile("--- {0}", glyphName );
            }

            Logger.WriteFile("");

            Regex pat = new Regex( "Item \\-" + Me.Class.ToString().CamelToSpaced() + " .*P Bonus");
            if ( Me.GetAllAuras().Any( a => pat.IsMatch( a.Name )))
            {
                foreach( var a in Me.GetAllAuras())
                {
                    if ( pat.IsMatch( a.Name ))
                    {
                        Logger.WriteFile( "  Tier Bonus Aura:  {0}", a.Name );
                    }
                }

                Logger.WriteFile("");
            }

            if (Me.Inventory.Equipped.Trinket1 != null)
                Logger.WriteFile("Trinket1: {0} #{1}", Me.Inventory.Equipped.Trinket1.Name, Me.Inventory.Equipped.Trinket1.Entry);

            if (Me.Inventory.Equipped.Trinket2 != null)
                Logger.WriteFile("Trinket2: {0} #{1}", Me.Inventory.Equipped.Trinket2.Name, Me.Inventory.Equipped.Trinket2.Entry);
        }
예제 #21
0
 public virtual int GetStatValue(SecondaryStats stat, float ilvl)
 {
     return(0);
 }
예제 #22
0
    public int StatDifference(SecondaryStats stat, ItemData data, float ilvl)
    {
        int results = GetStatValue(stat, ilvl) - data.GetStatValue(stat, ilvl);

        return(results);
    }
예제 #23
0
 public bool isStat(SecondaryStats stat)
 {
     return(data.isStat(stat));
 }
예제 #24
0
        public AnimaCharacter(ExcelWorksheet excelWorksheet, string player)
        {
            Player    = player;
            IsCurrent = false;
            ImageUrl  = excelWorksheet.Cells["AK1"].Text;

            //Character info
            Name    = excelWorksheet.Cells["E1"].Text;
            Origine = excelWorksheet.Cells["P1"].Text;
            Class   = excelWorksheet.Cells["F3"].Text;
            Level   = Convert.ToInt32(excelWorksheet.Cells["E5"].Value);
            Hp      = Convert.ToInt32(excelWorksheet.Cells["B12"].Value);
            string temp = excelWorksheet.Cells["B13"].Text;

            CurrentHp = string.IsNullOrEmpty(temp) ? Hp : Convert.ToInt32(temp);

            Regeneration   = Convert.ToInt32(excelWorksheet.Cells["J18"].Value);
            Fatigue        = Convert.ToInt32(excelWorksheet.Cells["B18"].Value);
            temp           = excelWorksheet.Cells["B19"].Text;
            CurrentFatigue = string.IsNullOrEmpty(temp) ? Fatigue : Convert.ToInt32(temp);
            Movement       = Convert.ToInt32(excelWorksheet.Cells["F18"].Value);

            TotalKiPoints = Convert.ToInt32(excelWorksheet.Cells["V39"].Value);
            temp          = excelWorksheet.Cells["Z39"].Text;
            CurrentKi     = string.IsNullOrEmpty(temp) ? TotalKiPoints : Convert.ToInt32(temp);

            ArmorPoint = Convert.ToInt32(excelWorksheet.Cells["AC55"].Value);

            ZeonPoints  = Convert.ToInt32(excelWorksheet.Cells["U15"].Value);
            temp        = excelWorksheet.Cells["U16"].Text;
            CurrentZeon = string.IsNullOrEmpty(temp) ? ZeonPoints : Convert.ToInt32(temp);
            Amr         = Convert.ToInt32(excelWorksheet.Cells["U21"].Value);
            AmrRegen    = Convert.ToInt32(excelWorksheet.Cells["U24"].Value);
            InnateMagic = Convert.ToInt32(excelWorksheet.Cells["U27"].Value);
            MagicLevel  = Convert.ToInt32(excelWorksheet.Cells["AD8"].Value);

            PppFree       = Convert.ToInt32(excelWorksheet.Cells["Q21"].Value);
            temp          = excelWorksheet.Cells["Q22"].Text;
            CurrentPpp    = string.IsNullOrEmpty(temp) ? PppFree : Convert.ToInt32(temp);
            IsLucky       = Convert.ToBoolean(excelWorksheet.Cells["DC30"].Value);
            IsUnlucky     = Convert.ToBoolean(excelWorksheet.Cells["DC153"].Value);
            DestinFuneste = Convert.ToBoolean(excelWorksheet.Cells["DC165"].Value);
            //Base stats
            foreach (var cell in excelWorksheet.Cells[22, 2, 30, 2])
            {
                BaseStats.Add(new Roll10Stat(StatGroups[0], cell.Text, Convert.ToInt32(cell.Offset(0, 9).Value)));
            }

            //Resistances
            foreach (var cell in excelWorksheet.Cells[32, 2, 36, 2])
            {
                Resistances.Add(new ResistanceStat(StatGroups[1], cell.Text, Convert.ToInt32(cell.Offset(0, 2).Value)));
            }

            //Battle stats
            BattleStats.Add(new Roll100Stat(StatGroups[2], excelWorksheet.Cells["B14"].Text, Convert.ToInt32(excelWorksheet.Cells["B15"].Value)));
            BattleStats.Add(new Roll100Stat(StatGroups[2], excelWorksheet.Cells["B52"].Text, Convert.ToInt32(excelWorksheet.Cells["AC52"].Value)));
            BattleStats.Add(new Roll100Stat(StatGroups[2], excelWorksheet.Cells["B53"].Text, Convert.ToInt32(excelWorksheet.Cells["AC53"].Value)));
            BattleStats.Add(new Roll100Stat(StatGroups[2], excelWorksheet.Cells["B54"].Text, Convert.ToInt32(excelWorksheet.Cells["AC54"].Value)));
            Roll100Stat defence = BattleStats.Where(x => x.Name == "Esquive" || x.Name == "Parade").OrderByDescending(x => x.Value).First();

            BattleStats.Add(new Roll100Stat(StatGroups[2], $"Défense : {defence.Name}", defence.Value));
            foreach (var cell in excelWorksheet.Cells[64, 2, 68, 2])
            {
                BattleStats.Add(new Roll100Stat(StatGroups[2], cell.Text, Convert.ToInt32(cell.Offset(0, 27).Value)));
            }

            BattleStats.Add(new Roll100Stat(StatGroups[2], excelWorksheet.Cells["B71"].Text, Convert.ToInt32(excelWorksheet.Cells["AC71"].Value)));
            try
            {//TODO pourquoi ????
                BattleStats.Add(new Roll100Stat(StatGroups[2], excelWorksheet.Cells["Q23"].Text, Convert.ToInt32(excelWorksheet.Cells["Q24"].Value)));
            }
            catch (Exception ex)
            {
            }

            //Secondary stats
            foreach (var cell in excelWorksheet.Cells[75, 2, 143, 2])
            {
                if (!cell.Style.Font.Bold)
                {
                    SecondaryStats.Add(new Roll100Stat(StatGroups[3], cell.Text, Convert.ToInt32(cell.Offset(0, 27).Value)));
                }
            }
            SecondaryStats.Add(new Roll100Stat(StatGroups[3], excelWorksheet.Cells["G34"].Text, Convert.ToInt32(excelWorksheet.Cells["N34"].Value)));
            SecondaryStats.Add(new Roll100Stat(StatGroups[3], excelWorksheet.Cells["G35"].Text, Convert.ToInt32(excelWorksheet.Cells["N35"].Value)));
            SecondaryStats.RemoveAll(x => string.IsNullOrWhiteSpace(x.Name));

            base.AllStats.AddRange(BaseStats);
            base.AllStats.AddRange(Resistances);
            base.AllStats.AddRange(BattleStats);
            base.AllStats.AddRange(SecondaryStats);
        }
    List <AffixDisplayInformation> AddToAffixList(List <AffixDisplayInformation> list, SecondaryStats stat, ItemAffix affix)
    {
        bool existsInList = false;

        foreach (AffixDisplayInformation info in list)
        {
            if (info.secondary != null && info.secondary == stat && info.type == affix.GetModType())
            {
                info.value  += affix.GetValue(stat, item.ItemLevel, item.VarianceSeed);
                existsInList = true;
            }
        }

        if (!existsInList)
        {
            AffixDisplayInformation info = new AffixDisplayInformation();
            info.secondary = stat;
            info.value     = affix.GetValue(stat, item.ItemLevel, item.VarianceSeed);
            info.type      = affix.GetModType();

            list.Add(info);
        }

        return(list);
    }
예제 #26
0
        public static void WriteCharacterGearAndSetupInfo()
        {
            Logger.WriteFile("");
            if (SingularSettings.Debug)
            {
                uint           totalItemLevel;
                SecondaryStats ss;          //create within frame (does series of LUA calls)

                using (StyxWoW.Memory.AcquireFrame())
                {
                    totalItemLevel = CalcTotalGearScore();
                    ss             = new SecondaryStats();
                }

                Logger.WriteFile("Equipped Total Item Level  : {0}", totalItemLevel);
                Logger.WriteFile("Equipped Average Item Level: {0}", totalItemLevel / 16);
                Logger.WriteFile("");
                Logger.WriteFile("Health:      {0}", Me.MaxHealth);
                Logger.WriteFile("Strength:    {0}", Me.Strength);
                Logger.WriteFile("Agility:     {0}", Me.Agility);
                Logger.WriteFile("Intellect:   {0}", Me.Intellect);
                Logger.WriteFile("Spirit:      {0}", Me.Spirit);
                Logger.WriteFile("");
                Logger.WriteFile("Hit(M/R):    {0}/{1}", ss.MeleeHit, ss.SpellHit);
                Logger.WriteFile("Expertise:   {0}", ss.Expertise);
                Logger.WriteFile("Mastery:     {0}", (int)ss.Mastery);
                Logger.WriteFile("Crit:        {0:F2}", ss.Crit);
                Logger.WriteFile("Haste(M/R):  {0}/{1}", ss.MeleeHaste, ss.SpellHaste);
                Logger.WriteFile("SpellPen:    {0}", ss.SpellPen);
                Logger.WriteFile("PvP Resil:   {0}", ss.Resilience);
                Logger.WriteFile("");
                Logger.WriteFile("PrimaryStat: {0}", Me.GetPrimaryStat());
                Logger.WriteFile("");
            }

            Logger.WriteFile("Talents Selected: {0}", Singular.Managers.TalentManager.Talents.Count(t => t.Selected));
            foreach (var t in Singular.Managers.TalentManager.Talents)
            {
                if (!t.Selected)
                {
                    continue;
                }

                Logger.WriteFile("--- #{0}", t.Index);
            }

            Logger.WriteFile("");

            Regex pat = new Regex("Item \\-" + Me.Class.ToString().CamelToSpaced() + " .*P Bonus");

            if (Me.GetAllAuras().Any(a => pat.IsMatch(a.Name)))
            {
                foreach (var a in Me.GetAllAuras())
                {
                    if (pat.IsMatch(a.Name))
                    {
                        Logger.WriteFile("  Tier Bonus Aura:  {0}", a.Name);
                    }
                }

                Logger.WriteFile("");
            }

            if (Me.Inventory.Equipped.Trinket1 != null)
            {
                int         itemeffectid  = 0;
                uint        spelleffectid = 0;
                SpellEffect se;

                try
                {
                    ItemEffect ie = Me.Inventory.Equipped.Trinket1.Effects.FirstOrDefault(e => e != null);
                    if (ie != null)
                    {
                        itemeffectid = ie.SpellId;
                        se           = ie.Spell.SpellEffects.FirstOrDefault(s => s != null);
                        if (se != null)
                        {
                            spelleffectid = se.Id;
                        }
                    }
                }
                catch { }

                Logger.WriteFile(
                    "Trinket1: {0} #{1} ItemEffect:{2} SpellEffect:{3}",
                    Me.Inventory.Equipped.Trinket1.Name,
                    Me.Inventory.Equipped.Trinket1.Entry,
                    itemeffectid,
                    spelleffectid
                    );
            }

            if (Me.Inventory.Equipped.Trinket2 != null)
            {
                int         itemeffectid  = 0;
                uint        spelleffectid = 0;
                SpellEffect se;

                try
                {
                    ItemEffect ie = Me.Inventory.Equipped.Trinket2.Effects.FirstOrDefault(e => e != null);
                    if (ie != null)
                    {
                        itemeffectid = ie.SpellId;
                        se           = ie.Spell.SpellEffects.FirstOrDefault(s => s != null);
                        if (se != null)
                        {
                            spelleffectid = se.Id;
                        }
                    }
                }
                catch { }

                Logger.WriteFile(
                    "Trinket2: {0} #{1} ItemEffect:{2} SpellEffect:{3}",
                    Me.Inventory.Equipped.Trinket2.Name,
                    Me.Inventory.Equipped.Trinket2.Entry,
                    itemeffectid,
                    spelleffectid
                    );
            }


            WoWItem item;

            if (Me.Inventory.Equipped.Hands != null)
            {
                /*
                 * item = Me.Inventory.Equipped.Hands;
                 * if (!item.Usable)
                 *  Logger.WriteDiagnostic("Hands: {0} #{1} - are not usable and will be ignored", item.Name, item.Entry);
                 * else
                 * {
                 *  string itemSpell = Lua.GetReturnVal<string>("return GetItemSpell(" + item.Entry + ")",0);
                 *  if (string.IsNullOrEmpty(itemSpell))
                 *      Logger.WriteDiagnostic("Hands: {0} #{1} - does not appear to have a usable enchant present and will be ignored", item.Name, item.Entry);
                 *  else
                 *      Logger.WriteFile("Hands: {0} #{1} - found [{2}] and will use as per user settings", item.Name, item.Entry, itemSpell);
                 * }
                 */

                /*
                 * // debug logic:  try another method to check for Engineering Tinkers
                 * foreach (var enchName in GloveEnchants)
                 * {
                 *  WoWItem.WoWItemEnchantment ench = item.GetEnchantment(enchName);
                 *  if (ench != null)
                 *      Logger.WriteFile("Hands (double check): {0} #{1} - found enchant [{2}] #{3} (debug info only)", item.Name, item.Entry, ench.Name, ench.Id);
                 * }
                 */
            }

            item = Me.Inventory.Equipped.Waist;
            if (item != null)
            {
                foreach (var enchName in BeltEnchants)
                {
                    WoWItem.WoWItemEnchantment ench = item.GetEnchantment(enchName);
                    if (ench != null)
                    {
                        Logger.WriteFile("Belt (double check): {0} #{1} - found enchant [{2}] #{3} (debug info only)", item.Name, item.Entry, ench.Name, ench.Id);
                    }
                }
            }
        }
예제 #27
0
        public static void WriteCharacterGearAndSetupInfo()
        {
            if (GlobalSettings.Instance.LogLevel < LogLevel.Normal)
                return;

            uint totalItemLevel;
            SecondaryStats ss;          //create within frame (does series of LUA calls)

            using (StyxWoW.Memory.AcquireFrame())
            {
                totalItemLevel = CalcTotalGearScore();
                ss = new SecondaryStats();
            }

            Logger.WriteFile("");
            Logger.WriteFile("Equipped Total Item Level  : {0}", totalItemLevel);
            Logger.WriteFile("Equipped Average Item Level: {0:F0}", ((double)totalItemLevel) / 17.0);
            Logger.WriteFile("");
            Logger.WriteFile("Health:      {0}", Me.MaxHealth);
            Logger.WriteFile("Agility:     {0}", Me.Agility);
            Logger.WriteFile("Intellect:   {0}", Me.Intellect);
            Logger.WriteFile("Spirit:      {0}", Me.Spirit);
            Logger.WriteFile("");
            Logger.WriteFile("Hit(M/R):    {0}/{1}", ss.MeleeHit, ss.SpellHit);
            Logger.WriteFile("Expertise:   {0}", ss.Expertise);
            Logger.WriteFile("Mastery:     {0:F2}", ss.Mastery);
            Logger.WriteFile("Crit:        {0:F2}", ss.Crit);
            Logger.WriteFile("Haste(M/R):  {0}/{1}", ss.MeleeHaste, ss.SpellHaste);
            Logger.WriteFile("SpellPen:    {0}", ss.SpellPen);
            Logger.WriteFile("PvP Resil:   {0}", ss.Resilience);
            Logger.WriteFile("PvP Power:   {0}", ss.PvpPower);
            Logger.WriteFile("");

            if (!Singular.Managers.TalentManager.Glyphs.Any())
                Logger.WriteFile("--- no glyphs equipped");
            else
            {
                foreach (string glyphName in Singular.Managers.TalentManager.Glyphs.OrderBy(g => g).Select(g => g).ToList())
                {
                    Logger.WriteFile("--- {0}", glyphName );
                }
            }

            Logger.WriteFile("");
        }