コード例 #1
0
        public static void InitiateCombat(BaseCharacter g, BaseCharacter r, BasicAbility gca, BasicAbility rca)
        {
            bMods.Clear();
            foreach (var item in Enum.GetNames(typeof(BattleMods)))
            {
                bMods.Add(0);
            }
            castAbility = gca;
            giver       = g;
            receiver    = r;
            // giverAS.DefaultStatChart();
            // receiverAS.DefaultStatChart();

            giverAS    = g.trueSTATChart();
            receiverAS = r.trueSTATChart();
            Console.WriteLine(g.trueSTATChart().currentActiveStats[(int)STATChart.ACTIVESTATS.SHIELD]);

            if (gca.abilityType == (int)BasicAbility.ABILITY_TYPE.ATTACK)
            {
                bMods[(int)BattleMods.MIN_DAMAGE]        = CalculateMinDamage();
                bMods[(int)BattleMods.MAX_DAMAGE]        = CalculateMaxDamage();
                bMods[(int)BattleMods.MIN_STATUS_CHANCE] = 0;
                bMods[(int)BattleMods.MAX_STATUS_CHANCE] = 0;
                bMods[(int)BattleMods.CRIT]  = 5;
                bMods[(int)BattleMods.DODGE] = 5;
                bMods[(int)BattleMods.FAIL]  = 5;
            }

            BattleGUI.Start(giverAS, receiverAS, g, r, gca, rca);
        }
コード例 #2
0
        public static KeyValuePair <List <int>, List <int> > CalculateDamage(BaseCharacter g, BaseCharacter r, BasicAbility gca, BasicAbility rca)
        {
            BasicAbility Idle = new BasicAbility();

            Idle.abilityName = "Idle";


            castAbility = gca;
            giver       = g;
            receiver    = r;


            giverAS    = g.trueSTATChart();
            giverAS    = giverAS.StatChartAddition(gca.abilityModifier);
            receiverAS = r.trueSTATChart();

            List <int> giverDMG  = new List <int>();
            List <int> targetDMG = new List <int>();

            if (gca.abilityType == (int)BasicAbility.ABILITY_TYPE.ATTACK)
            {
                giverDMG.Add(CalculateMinDamage());
                giverDMG.Add(CalculateMaxDamage());
                targetDMG.Add(0);
                targetDMG.Add(0);
            }

            return(new KeyValuePair <List <int>, List <int> >(giverDMG, targetDMG));
        }
コード例 #3
0
 static public void ProcessAbilityCastByHero(BaseCharacter hero, BasicAbility ba)
 {
     if (ba.bAbilityHasDebuff && !hero.bIsAI)
     {
         DebuffsAppliedThisFight[partyMembers.IndexOf(hero)] += 1;
     }
 }
コード例 #4
0
        internal static KeyValuePair <List <int>, List <int> > CalculateHealing(BaseCharacter g, BaseCharacter r, BasicAbility gca, BasicAbility rca)
        {
            BasicAbility Idle = new BasicAbility();

            Idle.abilityName = "Idle";


            castAbility = gca;
            giver       = g;
            receiver    = r;


            giverAS    = g.trueSTATChart();
            giverAS    = giverAS.StatChartAddition(gca.abilityModifier);
            receiverAS = r.trueSTATChart();

            List <int> giverDMG  = new List <int>();
            List <int> targetDMG = new List <int>();

            if (gca.abilityType == (int)BasicAbility.ABILITY_TYPE.SUPPORT)
            {
                giverDMG.Add(-(g.trueSTATChart().currentActiveStats[(int)STATChart.ACTIVESTATS.HP]));
                giverDMG.Add(-(g.trueSTATChart().currentActiveStats[(int)STATChart.ACTIVESTATS.HP] + g.trueSTATChart().currentActiveStats[(int)STATChart.ACTIVESTATS.HP] / 2));
                targetDMG.Add(0);
                targetDMG.Add(0);
            }

            return(new KeyValuePair <List <int>, List <int> >(giverDMG, targetDMG));
        }
コード例 #5
0
 public void Add(BasicAbility ba)
 {
     if (!abilities.Contains(ba) && abilities.Find(abi => abi.abilityIdentifier == ba.abilityIdentifier) == null)
     {
         abilityIDs.Add(ba.abilityIdentifier);
         abilities.Add(ba);
     }
 }
コード例 #6
0
 public void Remove(BasicAbility ba)
 {
     if ((abilities.Find(abi => abi.abilityIdentifier == ba.abilityIdentifier) != null) && abilities.Count > 1)
     {
         int index = abilities.IndexOf(abilities.Find(abi => abi.abilityIdentifier == ba.abilityIdentifier));
         abilityIDs.RemoveAt(index);
         abilities.RemoveAt(index);
     }
 }
コード例 #7
0
 public bool CanAddAbility(BasicAbility ba)
 {
     if (abilities.Contains(ba))
     {
         return(false);
     }
     if (abilities.Count < amount)
     {
         return(true);
     }
     return(false);
 }
コード例 #8
0
 public void ReloadDefaultAIAbility(GameContentDataBase gcdb, EnemyAIInfo AII)
 {
     defaultAbilityID = AII.defaultAIAbilityID;
     try
     {
         AIDefaultAttack = gcdb.gameAbilities.Find(abi => abi.abilityIdentifier == defaultAbilityID).Clone();
     }
     catch (Exception)
     {
         Console.WriteLine("Error generating default ability info for" + AII.ToString());
         AIDefaultAttack = new BasicAbility();
     }
 }
コード例 #9
0
        internal float baseVSModifier(BasicAbility ba)
        {
            BasicAbility.ABILITY_AFFINITY affinity = ba.affinity;
            var temp = affinityEffects.Find(aff => aff.parent == affinity);

            if (temp != null)
            {
                return(temp.modifier);
            }
            else
            {
                return(AffinityCounter(affinity));
            }
        }
コード例 #10
0
        internal AbilitySelectTab(BasicAbility ba, Rectangle containerPanel, int index)
        {
            if (!bInitialize)
            {
                Initialize();
            }



            parent     = ba;
            this.index = index;

            positionOnscreen     = new Rectangle(containerPanel.X, containerPanel.Y + index * renderSize.Height + index * verticalSpacing, renderSize.Width, renderSize.Height);
            drawPositionOnscreen = new Rectangle(0, 0 + index * renderSize.Height + index * verticalSpacing, renderSize.Width, renderSize.Height);
            render = new RenderTarget2D(Game1.graphics.GraphicsDevice, renderSize.Width, renderSize.Height);
        }
コード例 #11
0
        public BasicAbility Clone()
        {
            BasicAbility temp = (BasicAbility)this.MemberwiseClone();

            temp.abilityIcon       = abilityIcon.Clone();
            temp.statModifier      = statModifier.Clone();
            temp.EnemyStatModifier = EnemyStatModifier.Clone();
            temp.abilityModifier   = abilityModifier.Clone();
            //temp.AbilityManaCost = new List<int>(AbilityManaCost);
            //temp.AbilityAPCost = new List<int>(AbilityAPCost);
            //temp.AbilityHitChance = new List<int>(AbilityHitChance);
            //temp.AbilityCritChance = new List<int>(AbilityCritChance);
            temp.abiAOEM         = abiAOEM.Clone();
            temp.abiAOEMAS       = abiAOEMAS.Clone();
            temp.targetableTypes = new List <BaseClass.CLASSType>(targetableTypes);
            //temp.abilityDescription = "";

            return(temp);
        }
コード例 #12
0
        internal AbilitySelectDescription(BaseCharacter bc, BasicAbility ba, Rectangle screenPos)
        {
            if (bInitialize)
            {
                Initialize();
            }
            parent = ba;
            // GameProcessor.gcDB
            drawOnScreen = screenPos;
            pos          = new Rectangle(new Point(), screenPos.Size);

            render = new RenderTarget2D(Game1.graphics.GraphicsDevice, pos.Width, pos.Height);
            panel  = new TexPanel(guiTex, pos, new Rectangle(90, 679, 64, 2), new Rectangle(90, 745, 64, 2), new Rectangle(88, 681, 2, 64), new Rectangle(154, 681, 2, 64), new Rectangle(88, 679, 2, 2), new Rectangle(154, 679, 2, 2), new Rectangle(88, 745, 2, 2), new Rectangle(154, 745, 2, 2), new Rectangle(90, 681, 64, 64));

            startUpTimer = new TimingUtility(16, true, StartUpTimer);
            startUpTimer.SetStepTimer(startUpStepTimer);

            titleBox       = new Rectangle(offsetPanel, offsetPanel, render.Width - 2 * offsetPanel, titleBoxHeight);
            descriptionBox = new Rectangle(titleBox.Location + new Point(0, titleBoxHeight + offsetBoxes), new Point(render.Width - 2 * offsetPanel));
            aoeBox         = new Rectangle(new Point(0, descriptionBox.Y + descriptionBox.Height + offsetBoxes), new Point(render.Width - 2 * offsetPanel));
            potencyText    = ba.GetEstimatedPotency(bc);
        }
コード例 #13
0
        internal static KeyValuePair <BasicTile, BasicAbility> returnFavoredAttackAndPosition(KeyValuePair <List <List <BasicTile> >, List <BasicAbility> > llbtlba, BaseCharacter caster, BaseCharacter target)
        {
            List <BasicAbility> listOfNonDefaultAbilities = llbtlba.Value.FindAll(ba => !ba.abilityName.Equals(caster.CCC.AIDefaultAttack.abilityName) && ba.IsAbilityAvailable(caster.trueSTATChart()));
            BasicAbility        randomNonDefaultAbility   = new BasicAbility();
            BasicAbility        finalAbility = null;


            if (listOfNonDefaultAbilities.Count != 0)
            {
                randomNonDefaultAbility = listOfNonDefaultAbilities[GamePlayUtility.Randomize(0, listOfNonDefaultAbilities.Count)];
                int randomChance = GamePlayUtility.Randomize(0, 101);
                if (randomChance <= randomNonDefaultAbility.castChance)
                {
                    finalAbility = randomNonDefaultAbility;
                }
            }

            if (finalAbility == default(BasicAbility) && llbtlba.Value.Find(ba => ba.abilityIdentifier == caster.CCC.AIDefaultAttack.abilityIdentifier) != default(BasicAbility))
            {
                finalAbility = caster.CCC.AIDefaultAttack;
            }
            else
            {
                finalAbility = listOfNonDefaultAbilities[GamePlayUtility.Randomize(0, listOfNonDefaultAbilities.Count - 1)];
            }

            Console.WriteLine(llbtlba.Value.IndexOf(llbtlba.Value.Find(ba => ba.abilityName.Equals(finalAbility.abilityName))));

            if (llbtlba.Value.Count == 0 && llbtlba.Key.Count != 0)
            {
                while (llbtlba.Value.Count != llbtlba.Key.Count)
                {
                    llbtlba.Value.Add(finalAbility);
                }
            }

            //if(!finalAbility.abilityName.Equals(llbtlba.Value[0].abilityName, StringComparison.OrdinalIgnoreCase))
            //{
            //    finalAbility = llbtlba.Value[0];
            //}

            List <BasicTile> AbilityLocationList = llbtlba.Key[llbtlba.Value.IndexOf(llbtlba.Value.Find(ba => ba.abilityIdentifier == finalAbility.abilityIdentifier))];


            if (AbilityLocationList.Find(bt => bt.mapPosition.Location.ToVector2() == caster.position) != null)
            {
                //    AbilityLocationList.Remove(AbilityLocationList.Find(bt => bt.mapPosition.Location.ToVector2() == caster.position));
            }
            BasicTile randomDestinationTile;

            if (AbilityLocationList.Count != 0)
            {
                randomDestinationTile = AbilityLocationList[GamePlayUtility.Randomize(0, AbilityLocationList.Count)];
            }
            else
            {
                randomDestinationTile = GameProcessor.loadedMap.possibleTiles(CombatProcessor.zone.returnBoundingZone()).Find(t => t.mapPosition == caster.spriteGameSize);
            }

            return(new KeyValuePair <BasicTile, BasicAbility>(randomDestinationTile, finalAbility));
        }
コード例 #14
0
        internal static LUA.LuaAbilityInfo abiToLuaAbilityInfo(TBAGW.BasicAbility ba, LuaCharacterInfo caster, LuaCharacterInfo target, CallType ct = CallType.Attack)
        {
            LuaAbilityInfo lai = new LuaAbilityInfo();

            lai.abiType     = ba.abilityType.ToString();
            lai.abiCastType = ba.abilityFightStyle.ToString();
            lai.bIsAttack   = ba.abilityType == (int)BasicAbility.ABILITY_TYPE.ATTACK;

            lai.minDmg = ba.baseDamage;
            lai.minDmg = (int)(lai.minDmg * target.parent.combatInfo.baseVSModifier(ba));
            lai.maxDmg = (int)(lai.minDmg * 1.5f);

            lai.abiName = ba.abilityName;
            lai.target  = target;

            lai.caster = caster;
            lai.target = target;

            lai.parent = ba;

            lai.hitChance  = ba.ReturnAbilityHitChanceNum(caster.parent);
            lai.critChance = ba.ReturnAbilityCritChanceNum(caster.parent);

            if (caster != null)
            {
                caster.parent.combatInfo.CheckAffinity(target.parent);
            }
            if (target != null)
            {
                target.parent.combatInfo.CheckAffinity(target.parent);
            }


            if (target.parent.combatInfo.Absorbs(ba.affinity))
            {
                lai.bAbsorbs = true;
            }

            if (BattleGUI.bIsRunning)
            {
                var surroundInfo = BattleGUI.GetSurroundInfo();
                lai.surrAliesCaster   = surroundInfo.gbcAllies;
                lai.surrEnemiesCaster = surroundInfo.gbcEnemies;
                lai.surrAliesTarget   = surroundInfo.rbcAllies;
                lai.surrEnemiesTarget = surroundInfo.rbcEnemies;
                lai.critChance       += surroundInfo.critChance;
                lai.hitChance        += surroundInfo.hitChance;
            }

            switch (ct)
            {
            case CallType.Attack:
                break;

            case CallType.Area:
                lai.bCalledForArea = true;
                break;

            default:
                break;
            }

            return(lai);
        }
コード例 #15
0
 public void AddAbility(BasicAbility ba)
 {
     classAbilities.Add(ba);
     classAbilityInfos.Add(new ClassAbilityInfo(ba));
     // classAbilitiesIDs.Add(ba.abilityIdentifier);
 }
コード例 #16
0
        private void LastDitchEffortAttack()
        {
            BasicAbility testAbility = currentEnemy.character.CCC.AIDefaultAttack.Clone();

            testAbility.abilityCooldownTimer = 0;

            if (currentEnemy.character.AbilityList().Find(abi => abi.abilityIdentifier == testAbility.abilityIdentifier) == null)
            {
                currentEnemy.character.CCC.equippedClass.classAbilities.Add(testAbility);
            }

            List <BasicAbility> possibleAbilities = new List <BasicAbility>();

            foreach (var ability in currentEnemy.character.AbilityList())
            {
                if (ability.IsAbilityAvailable(currentEnemy.character.trueSTATChart()))
                {
                    possibleAbilities.Add(ability);
                }
            }

            foreach (var item in possibleAbilities)
            {
                if (GamePlayUtility.randomChance() < item.castChance)
                {
                    testAbility = item;
                    break;
                }
            }

            if (testAbility.IsAbilityAvailable(currentEnemy.character.trueSTATChart()))
            {
                List <BaseCharacter> allTargetableCharactersInRange = new List <BaseCharacter>();
                if (testAbility.abilityType == (int)BasicAbility.ABILITY_TYPE.ATTACK)
                {
                    foreach (var item in currentEnemy.parentTS.targetGroups)
                    {
                        foreach (var character in item.charactersInGroup)
                        {
                            if (testAbility.abilityCanHitTargetInRange(currentEnemy.character, character))
                            {
                                allTargetableCharactersInRange.Add(character);
                            }
                        }
                    }
                    if (allTargetableCharactersInRange.Count > 0)
                    {
                        // BattleGUI.AIStart(currentEnemy.character, allTargetableCharactersInRange[GamePlayUtility.Randomize(0, allTargetableCharactersInRange.Count)], currentEnemy.character.AbilityList().IndexOf(testAbility));
                        GameProcessor.StartBattleSoon(currentEnemy.character, allTargetableCharactersInRange[GamePlayUtility.Randomize(0, allTargetableCharactersInRange.Count)], currentEnemy.character.AbilityList().IndexOf(testAbility));
                    }
                }
                else if (testAbility.abilityType == (int)BasicAbility.ABILITY_TYPE.SUPPORT)
                {
                    foreach (var character in currentEnemy.parentTS.charactersInGroup)
                    {
                        if (character == currentEnemy.character)
                        {
                        }
                        if (character != currentEnemy.character && testAbility.abilityCanHitTargetInRange(currentEnemy.character, character))
                        {
                            allTargetableCharactersInRange.Add(character);
                        }
                    }

                    if (allTargetableCharactersInRange.Count > 0)
                    {
                        //BattleGUI.AIStart(currentEnemy.character, allTargetableCharactersInRange[GamePlayUtility.Randomize(0, allTargetableCharactersInRange.Count)], currentEnemy.character.AbilityList().IndexOf(testAbility));
                        GameProcessor.StartBattleSoon(currentEnemy.character, allTargetableCharactersInRange[GamePlayUtility.Randomize(0, allTargetableCharactersInRange.Count)], currentEnemy.character.AbilityList().IndexOf(testAbility));
                    }
                }
            }
            if (!BattleGUI.bIsRunning)
            {
                currentEnemy.character.attackedAsAI = true;
            }
        }
コード例 #17
0
        public void ReloadFromDatabase(GameContentDataBase gcDB)
        {
            #region charClassList
            var classesToDelete = new List <int>();
            charClassListIDs = charClassListIDs.Distinct().ToList();
            foreach (var item in charClassListIDs)
            {
                try
                {
                    charClassList.Add(gcDB.gameClasses.Find(cl => cl.classIdentifier == item).Clone());
                }
                catch (Exception)
                {
                }
            }
            //Removes all abilityIDs of abilities that don't exist anymore.
            charClassListIDs.RemoveAll(id => charClassList.Find(cl => cl.classIdentifier == id) == default(BaseClass));
            #endregion

            #region charSeparateAbilities
            var abilitiesToDelete = new List <int>();
            charSeparateAbilityIDs = charSeparateAbilityIDs.Distinct().ToList();
            foreach (var item in charSeparateAbilityIDs)
            {
                try
                {
                    charSeparateAbilities.Add(gcDB.gameAbilities.Find(abi => abi.abilityIdentifier == item).Clone());
                }
                catch (Exception)
                {
                }
            }
            //Removes all abilityIDs of abilities that don't exist anymore.
            charSeparateAbilityIDs.RemoveAll(id => charSeparateAbilities.Find(ca => ca.abilityIdentifier == id) == default(BasicAbility));
            #endregion

            try
            {
                equippedClass = gcDB.gameClasses.Find(gc => gc.classIdentifier == equippedClassIdentifier).Clone();
            }
            catch (Exception)
            {
                equippedClass = new BaseClass(true);
            }

            try
            {
                var temp = gcDB.gameAbilities.Find(abi => abi.abilityIdentifier == defaultAbilityID);
                if (temp == null)
                {
                    temp = new BasicAbility();
                }
                AIDefaultAttack = temp.Clone();
            }
            catch (Exception e)
            {
            }

            try
            {
                abiEquipList.Reload(this);
            }
            catch (Exception e)
            {
            }

            try
            {
                //classExp.Initialize(this);
            }
            catch (Exception e)
            {
                Console.WriteLine("Error initializing class EXP");
                if (Game1.bIsDebug)
                {
                    throw e;
                }
            }


            ReloadTalents();
        }
コード例 #18
0
 public void AddAbility(BasicAbility ba)
 {
     ba.abilityIdentifier = abilityID;
     gameAbilities.Add(ba);
     abilityID++;
 }
コード例 #19
0
 public ClassAbilityInfo(BasicAbility ba)
 {
     abilityID = ba.abilityIdentifier;
     parent    = ba;
 }