示例#1
0
        protected override double ScoreAttract(AIProcessor AI, int CastCell, EffectInfos Effect, List<Fighter> Targets, bool InvokPreview)
        {
            if (InvokPreview)
            {
                return 0;
            }

            int Score = 0;
            char d = Pathfinder.getDirBetweenTwoCase(CastCell, AI.myFighter.CellId, AI.myFight.Map, true);
            var EndCell = AI.myFight.GetCell(Pathfinder.DirToCellID(AI.myFighter.CellId, d, AI.myFight.Map, true));
            var StartCell = AI.myFight.GetCell(CastCell);
            if (StartCell != null && EndCell != null)
            {
                var target = StartCell.GetFighter();
                if (target != null)
                {
                    Score += ScorePush(AI, target, Pathfinder.GetDirection(AI.myFight.Map, CastCell, AI.myFighter.CellId), Pathfinder.GoalDistance(AI.myFight.Map, CastCell, AI.myFighter.CellId), true);
                }
            }

            return Score;
        }
示例#2
0
        private static bool isGoodState(EffectInfos Effect)
        {
            switch ((FighterStateEnum)Effect.Value3)
            {
            case FighterStateEnum.STATE_ENRACINER:
            case FighterStateEnum.STATE_INVISIBLE:
            case FighterStateEnum.STATE_REFLECT_SPELL:
            case FighterStateEnum.STATE_SAOUL:
            case FighterStateEnum.STATE_PORTE:
            case FighterStateEnum.STATE_PORTEUR:
            {
                return(true);
            }

            case FighterStateEnum.STATE_AFFAIBLI:
            case FighterStateEnum.STATE_ALTRUISME:
            case FighterStateEnum.STATE_PESANTEUR:
            default:
            {
                return(false);
            }
            }
        }
示例#3
0
        protected override double ScoreRepulse(AIProcessor AI, int CastCell, EffectInfos Effect, List <Fighter> Targets, bool InvokPreview, bool isFear)
        {
            if (InvokPreview)
            {
                return(0);
            }
            var Score = 0;

            if (isFear)
            {
                char d         = Pathfinder.getDirBetweenTwoCase(AI.myFighter.CellId, CastCell, AI.myFight.Map, true);
                var  StartCell = AI.myFight.GetCell(Pathfinder.DirToCellID(AI.myFighter.CellId, d, AI.myFight.Map, true));
                var  EndCell   = AI.myFight.GetCell(CastCell);
                if (StartCell != null && EndCell != null)
                {
                    var target = StartCell.GetFighter();
                    if (target != null)
                    {
                        Score += ScorePush(AI, target, Pathfinder.GetDirection(AI.myFight.Map, AI.myFighter.CellId, CastCell), Pathfinder.GoalDistance(AI.myFight.Map, AI.myFighter.CellId, CastCell), true);
                    }
                }
            }
            else
            {
                var StartCell = AI.myFight.GetCell(CastCell);
                if (StartCell != null)
                {
                    var target = StartCell.GetFighter();
                    if (target != null)
                    {
                        Score += ScorePush(AI, target, Pathfinder.GetDirection(AI.myFight.Map, AI.myFighter.CellId, CastCell), Effect.Value1, false);
                    }
                }
            }

            return(Score);
        }
示例#4
0
        protected override double ScoreUseLayer(AIProcessor AI, int CastCell, EffectInfos Effect, List <Fighter> Targets, bool Reverse = false, bool notUseJet = false)
        {
            int Score = 0;
            var spell = SpellTable.Cache[Effect.Value1];

            if (spell != null)
            {
                var spellLevel = spell.GetLevel(Effect.Value2);
                if (spellLevel != null)
                {
                    spellLevel.Initialize();
                    List <Fighter> possibleTargets = AI.myFight.GetEnnemyTeam(AI.myFighter.Team).GetFighters().FindAll(x => !x.Dead && !x.Left);
                    int            LayerScore      = 0;
                    foreach (var EffectLayer in spellLevel.Effects)
                    {
                        double Result = AIAction.AIActions[AIActionEnum.SELF_ACTING].GetEffectScore(AI, -1, -1, EffectLayer, possibleTargets, false, true);
                        LayerScore += (int)Math.Floor(Result * 0.25);
                    }
                    Score += LayerScore;
                }
            }

            return(Score);
        }
示例#5
0
        protected override double ScoreExchangePlace(AIProcessor AI, int CasterCell, int CastCell, EffectInfos Effect, List <Fighter> Targets, bool InvokPreview)
        {
            int Score      = 0;
            var TargetCell = AI.myFight.GetCell(CastCell);
            var LaunchCell = AI.myFight.GetCell(CasterCell);

            if (TargetCell != null)
            {
                var Target = TargetCell.GetFighter();
                if (Target != null)
                {
                    List <Fighter> TargetList = new List <Fighter>()
                    {
                        AI.myFighter
                    };
                    foreach (var Layer in TargetCell.GetObjects <FightGroundLayer>())
                    {
                        int LayerScore = 0;
                        foreach (var EffectLayer in Layer.CastSpell.Effects)
                        {
                            LayerScore += (int)Math.Floor(AIAction.AIActions[AIActionEnum.SELF_ACTING].GetEffectScore(AI, -1, -1, Effect, TargetList, false, true));
                        }
                        if (Layer is FightTrapLayer)
                        {
                            LayerScore *= 4;//Immediat
                        }
                        else if (Layer is FightBlypheLayer)
                        {
                            LayerScore *= 2;//Debut de tour
                        }
                        Score += LayerScore;
                    }

                    TargetList = new List <Fighter>()
                    {
                        Target
                    };
                    foreach (var Layer in LaunchCell.GetObjects <FightGroundLayer>())
                    {
                        int LayerScore = 0;
                        foreach (var EffectLayer in Layer.CastSpell.Effects)
                        {
                            LayerScore += (int)Math.Floor(AIAction.AIActions[AIActionEnum.SELF_ACTING].GetEffectScore(AI, -1, -1, Effect, TargetList, false, true));
                        }
                        if (Layer is FightTrapLayer)
                        {
                            LayerScore *= 4;//Immediat
                        }
                        else if (Layer is FightBlypheLayer)
                        {
                            LayerScore *= 2;//Debut de tour
                        }
                        Score += LayerScore;
                    }
                }
            }
            return(Score);
        }
示例#6
0
        public double GetEffectScore(AIProcessor AI, int CasterCell, int CastCell, EffectInfos Effect, List <Fighter> Targets, bool Reverse = false, bool InvokPreview = false)
        {
            switch (Effect.EffectType)
            {
            /* HEAL */
            case EffectEnum.RenderedPDV:
            case EffectEnum.Heal:
            case EffectEnum.DamageDropLife:
                return(ScoreHeal(AI, Effect, Targets, Reverse));

            /* BUFFS LEVEL 1*/
            case EffectEnum.ChanceEcaflip:
                return(Targets.Contains(AI.myFighter) ? (ScoreBuff_I(AI, Effect, Targets, Reverse)) : (-ScoreBuff_I(AI, Effect, Targets, Reverse)));

            case EffectEnum.AddDamagePhysic:
            case EffectEnum.AddDamageMagic:
            case EffectEnum.AddDamagePercent:
            case EffectEnum.AddForce:
            case EffectEnum.AddIntelligence:
            case EffectEnum.AddChance:
            case EffectEnum.AddSagesse:
            case EffectEnum.AddAgilite:
            case EffectEnum.AddEsquivePA:
            case EffectEnum.AddEsquivePM:
                return(ScoreBuff_I(AI, Effect, Targets, Reverse));

            /* BUFFS LEVEL 2*/
            case EffectEnum.Invisible:
                return(ScoreBuff_II(AI, Effect, Targets, Reverse, true));

            case EffectEnum.BonusPM:
            case EffectEnum.AddPA:
            case EffectEnum.AddPABis:
            case EffectEnum.AddPO:
            case EffectEnum.AddPM:
            case EffectEnum.AddVitalite:
            case EffectEnum.DoubleDamageOrRendPDV:
            case EffectEnum.AddVie:
            case EffectEnum.AddDamage:
            case EffectEnum.AddCC:
            case EffectEnum.AddSoins:
            case EffectEnum.MultiplyDamage:
            case EffectEnum.AddReduceDamageMagic:
            case EffectEnum.AddReduceDamagePhysic:
                return(ScoreBuff_II(AI, Effect, Targets, Reverse));

            /* BUFFS LEVEL 3*/
            case EffectEnum.IncreaseSpellDamage:
            case EffectEnum.AddArmorBis:
            case EffectEnum.ReflectSpell:
            case EffectEnum.AddArmorNeutre:
            case EffectEnum.AddArmorTerre:
            case EffectEnum.AddArmorFeu:
            case EffectEnum.AddArmorEau:
            case EffectEnum.AddArmorAir:
            case EffectEnum.AddReduceDamagePourcentAir:
            case EffectEnum.AddReduceDamagePourcentEau:
            case EffectEnum.AddReduceDamagePourcentFeu:
            case EffectEnum.AddReduceDamagePourcentTerre:
            case EffectEnum.AddReduceDamagePourcentNeutre:
            case EffectEnum.AddReduceDamageAir:
            case EffectEnum.AddReduceDamageEau:
            case EffectEnum.AddReduceDamageFeu:
            case EffectEnum.AddReduceDamageTerre:
            case EffectEnum.AddReduceDamageNeutre:
            case EffectEnum.AddArmor:
            case EffectEnum.AddRenvoiDamage:
            case EffectEnum.Sacrifice:
                return(ScoreBuff_III(AI, Effect, Targets, Reverse));

            /* DAMAGE LEVEL 3*/
            case EffectEnum.VolEau:
            case EffectEnum.VolTerre:
            case EffectEnum.VolAir:
            case EffectEnum.VolFeu:
            case EffectEnum.VolNeutre:
            case EffectEnum.Punition:
                return(ScoreDamage_III(AI, Effect, Targets, Reverse));

            /* DAMAGE LEVEL 2*/
            case EffectEnum.VolVie:
            case EffectEnum.DamageLifeAir:
            case EffectEnum.DamageLifeEau:
            case EffectEnum.DamageLifeFeu:
            case EffectEnum.DamageLifeNeutre:
            case EffectEnum.DamageLifeTerre:
                return(ScoreDamage_II(AI, Effect, Targets, Reverse));

            /* DAMAGE LEVEL 1*/
            case EffectEnum.DamageEau:
            case EffectEnum.DamageTerre:
            case EffectEnum.DamageAir:
            case EffectEnum.DamageFeu:
            case EffectEnum.DamageNeutre:
                return(ScoreDamage_I(AI, Effect, Targets, Reverse));

            /* DAMAGE LEVEL 0*/
            case EffectEnum.DamageLanceur:
                return(ScoreDamage_0(AI, Effect, Targets, Reverse));

            /* SUBBUFF LEVEL 4*/
            case EffectEnum.TurnPass:
            case EffectEnum.DieFighter:
                return(ScoreSubBuff_IV(AI, Effect, Targets, Reverse, true));

            /* SUBBUFF LEVEL 3*/
            case EffectEnum.VolPA:
            case EffectEnum.VolPO:
            case EffectEnum.VolPM:
            case EffectEnum.SubPA:
            case EffectEnum.SubPM:
            case EffectEnum.SubPO:
            case EffectEnum.SubDamage:
            case EffectEnum.SubVitalite:
            case EffectEnum.SubReduceDamagePourcentNeutre:
            case EffectEnum.SubReduceDamagePourcentFeu:
            case EffectEnum.SubReduceDamagePourcentEau:
            case EffectEnum.SubReduceDamagePourcentAir:
            case EffectEnum.SubReduceDamagePourcentTerre:
                return(ScoreSubBuff_III(AI, Effect, Targets, Reverse));

            /* SUBBUFF LEVEL 2*/
            case EffectEnum.DamagePerPA:
                return(ScoreDamagesPerPA(AI, Effect, Targets, Reverse));

            case EffectEnum.SubSoins:
            case EffectEnum.SubSagesse:
            case EffectEnum.SubForce:
            case EffectEnum.SubAgilite:
            case EffectEnum.SubChance:
            case EffectEnum.SubIntelligence:
            case EffectEnum.SubDamagePercent:
            case EffectEnum.SubDamagePhysic:
            case EffectEnum.SubDamageMagic:
            case EffectEnum.SubCC:
            case EffectEnum.AddEchecCritic:
                return(ScoreSubBuff_II(AI, Effect, Targets, Reverse));

            /* SUBBUFF LEVEL 1*/
            case EffectEnum.SubReduceDamageAir:
            case EffectEnum.SubReduceDamageEau:
            case EffectEnum.SubReduceDamageFeu:
            case EffectEnum.SubReduceDamageNeutre:
            case EffectEnum.SubReduceDamageTerre:
            case EffectEnum.SubPAEsquivable:
            case EffectEnum.SubPMEsquivable:
                return(ScoreSubBuff_I(AI, Effect, Targets, Reverse));

            /* ADDSTATE */
            case EffectEnum.AddState:
            {
                if (isGoodState(Effect))
                {
                    return(ScoreAddStateGood(AI, Effect, Targets, Reverse));
                }
                else
                {
                    return(ScoreAddStateBad(AI, Effect, Targets, Reverse));
                }
            }

            /* REMSTATE */
            case EffectEnum.LostState:
            {
                if (isGoodState(Effect))
                {
                    return(ScoreRemStateGood(AI, Effect, Targets, Reverse));
                }
                else
                {
                    return(ScoreRemStateBad(AI, Effect, Targets, Reverse));
                }
            }

            /* REPULSE */
            case EffectEnum.PushBack:
                return(ScoreRepulse(AI, CastCell, Effect, Targets, InvokPreview, false));

            case EffectEnum.PushFear:
                return(ScoreRepulse(AI, CastCell, Effect, Targets, InvokPreview, true));

            /* ATTRACT */
            case EffectEnum.PushFront:
                return(ScoreAttract(AI, CastCell, Effect, Targets, InvokPreview));

            /* DEPLACE */
            case EffectEnum.Porter:
                return(ScoreDeplace(AI, CastCell, Effect, Targets, InvokPreview, false));

            case EffectEnum.Lancer:
                return(ScoreDeplace(AI, CastCell, Effect, Targets, InvokPreview, true));

            /* EXCHANGE PLACE */
            case EffectEnum.Transpose:
                return(ScoreExchangePlace(AI, CasterCell, CastCell, Effect, Targets, InvokPreview));

            /* DEBUFF */
            case EffectEnum.DeleteAllBonus:
                return(ScoreDebuff(AI, Effect, Targets, Reverse));

            /* INVOCATION */
            case EffectEnum.InvocationStatic:
                return(ScoreInvocationStatic(AI, Effect, Targets, Reverse, InvokPreview));

            case EffectEnum.Invocation:
                return(ScoreInvocation(AI, Effect, Targets, Reverse, InvokPreview));

            case EffectEnum.DieFighterReplaceInvocation:
                return(ScoreSubBuff_IV(AI, Effect, Targets, Reverse, true) + ScoreInvocation(AI, Effect, Targets, Reverse, InvokPreview));

            case EffectEnum.UseGlyph:
            case EffectEnum.UseBlyph:
            case EffectEnum.UseTrap:
                return(ScoreUseLayer(AI, CastCell, Effect, Targets, Reverse));

            /* NADA */
            case EffectEnum.DoNothing:
                return(0);

            default:
            {
                Logger.Info("Effect[" + Effect.EffectType + "] non defini pour l'IA");
                return(ScoreDamage_I(AI, Effect, Targets, Reverse));
            }
            }
        }
示例#7
0
 protected abstract double ScoreUseLayer(AIProcessor AI, int CastCell, EffectInfos Effect, List <Fighter> Targets, bool Reverse = false, bool notUseJet = false);
示例#8
0
 protected abstract double ScoreExchangePlace(AIProcessor AI, int CasterCell, int CastCell, EffectInfos Effect, List <Fighter> Targets, bool InvokPreview);
示例#9
0
 protected abstract double ScoreDeplace(AIProcessor AI, int CastCell, EffectInfos Effect, List <Fighter> Targets, bool InvokPreview, bool isThrow);
示例#10
0
 protected abstract double ScoreRepulse(AIProcessor AI, int CastCell, EffectInfos Effect, List <Fighter> Targets, bool InvokPreview, bool isFear);
示例#11
0
 protected abstract double ScoreInvocationStatic(AIProcessor AI, EffectInfos Effect, List <Fighter> Targets, bool Reverse = false, bool InvokPreview = false);
示例#12
0
 protected abstract double ScoreDebuff(AIProcessor AI, EffectInfos Effect, List <Fighter> Targets, bool Reverse = false);
示例#13
0
 protected abstract double ScoreSubBuff_IV(AIProcessor AI, EffectInfos Effect, List <Fighter> Targets, bool Reverse   = false, bool notUseJet = false);