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); }
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); }
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); }