public override bool OnSkillInvoke(TrustedAI ai, Player player, object data)
        {
            Room room = ai.Room;

            if (data is Player target && room.GetTag(Name) is CardUseStruct use)
            {
                if (ai.HasSkill("zhaxiang", target))
                {
                    if (ai.IsFriend(target) && target.Hp > 1 && !ai.WillSkipPlayPhase(target))
                    {
                        return(true);
                    }
                    else if (target.Hp > 1)
                    {
                        return(false);
                    }
                }

                if (ai.IsEnemy(target) && ai.IsCardEffect(use.Card, target, player))
                {
                    if (use.EffectCount[0].Effect2 == 1 && ai.IsLackCard(target, Jink.ClassName) && ai.HasSkill("qingguo|longdan|longdan_jx", target))
                    {
                        DamageStruct damage = new DamageStruct(use.Card, player, target, 1 + use.Drank + use.EffectCount[0].Effect1);
                        if (use.Card.Name == ThunderSlash.ClassName)
                        {
                            damage.Nature = DamageStruct.DamageNature.Thunder;
                        }
                        if (use.Card.Name == FireSlash.ClassName)
                        {
                            damage.Nature = DamageStruct.DamageNature.Fire;
                        }
                        if (ai.DamageEffect(damage, DamageStruct.DamageStep.Caused) > 1)
                        {
                            return(false);
                        }
                    }
                }

                return(ai.IsEnemy(target));
            }

            return(false);
        }
Esempio n. 2
0
        public override ScoreStruct GetDamageScore(TrustedAI ai, DamageStruct damage)
        {
            ScoreStruct score = new ScoreStruct
            {
                Score = 0
            };

            if (damage.To != null && ai.HasSkill(Name, damage.To))
            {
                int n = ai.DamageEffect(damage, DamageStruct.DamageStep.Done);
                if (n < damage.To.Hp || damage.To.Removed)
                {
                    score.Score = 4 * damage.Damage;
                }

                double numerator = 0.6;
                if (!ai.WillSkipPlayPhase(damage.To))
                {
                    numerator += 0.3;
                }
                foreach (Player p in ai.GetFriends(damage.To))
                {
                    if (p != damage.To && !ai.WillSkipPlayPhase(p))
                    {
                        numerator += 0.1;
                    }
                }
                score.Score *= numerator;

                if (ai.IsEnemy(damage.To))
                {
                    score.Score = -score.Score;
                }
                else
                {
                    score.Score -= 1.5;
                }
            }

            return(score);
        }
Esempio n. 3
0
        public override bool OnSkillInvoke(TrustedAI ai, Player player, object data)
        {
            if (ai.Room.GetTag("chuanxin_data") is DamageStruct damage)
            {
                double value = ai.GetDamageScore(damage).Score;
                if (ai.IsFriend(damage.To))
                {
                    return(value < -6);
                }
                else if (ai.DamageEffect(damage, DamageStruct.DamageStep.Done) > 1 && value > 4)
                {
                    return(false);
                }
                else
                {
                    return(value < 5.5);
                }
            }

            return(true);
        }