Skip to content

Commit 52d6d97

Browse files
zc-mengCuteReimu
andauthored
李宁玉和老汉死亡时澄清优化 (#280)
* 李宁玉和老汉死亡时澄清优化 * 优化老汉【视死】AI * 当前回合是篡夺者时,队友会救李宁玉防止发技能获胜 --------- Co-authored-by: 奇葩の灵梦 <[email protected]>
1 parent 53a80d3 commit 52d6d97

File tree

1 file changed

+36
-4
lines changed

1 file changed

+36
-4
lines changed

Diff for: src/main/kotlin/MessageCardValue.kt

+36-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.fengsheng.ScoreFactory.logger
55
import com.fengsheng.card.Card
66
import com.fengsheng.card.count
77
import com.fengsheng.card.countTrueCard
8+
import com.fengsheng.card.filter
89
import com.fengsheng.phase.FightPhaseIdle
910
import com.fengsheng.protos.Common.*
1011
import com.fengsheng.protos.Common.card_type.*
@@ -268,7 +269,11 @@ fun Player.calculateMessageCardValue(
268269
inFrontOfWhom.messageCards.removeLast()
269270
}
270271
if (Black in colors && inFrontOfWhom.skills.any { it is ShiSi }) { // 老汉【视死】
271-
v1 += 20
272+
if (isPartnerOrSelf(inFrontOfWhom)) {
273+
v1 += 20
274+
} else if (inFrontOfWhom.identity != Black && identity != Black) { // 自己是神秘人就无视,老汉是神秘人也无视
275+
v1 -= 20
276+
}
272277
}
273278
if (Black in colors && inFrontOfWhom.skills.any { it is YiXin } && inFrontOfWhom.messageCards.count(Black) == 2) {
274279
// 李宁玉【遗信】
@@ -606,9 +611,36 @@ fun Player.calSendMessageCard(
606611
* 是否要救人
607612
*/
608613
fun Player.wantToSave(whoseTurn: Player, whoDie: Player): Boolean {
609-
if (whoDie.skills.any { it is RuGui } && whoDie.messageCards.isNotEmpty() ||
610-
whoDie.skills.any { it is YiXin } && whoDie.cards.isNotEmpty())
611-
return false // 如果李宁玉有手牌|老汉有情报,则所有人都不救
614+
// 如果死亡的是老汉且有情报
615+
if (whoDie.skills.any { it is RuGui } && whoDie.messageCards.isNotEmpty()) {
616+
// 如果老汉和当前回合角色是同一身份+老汉情报区有该颜色情报+当前回合角色听牌
617+
if (whoDie !== whoseTurn && whoDie.identity == whoseTurn.identity &&
618+
!whoDie.messageCards.filter(whoDie.identity).isEmpty() &&
619+
whoseTurn.messageCards.count(whoseTurn.identity) == 2) {
620+
// 如果自己也是同一阵营,则不救
621+
if (isPartnerOrSelf(whoDie)) {
622+
return false
623+
}
624+
// 如果自己不是同一阵营,则救(防止发动技能后敌方胜利)
625+
return true
626+
}
627+
}
628+
// 如果死亡的是李宁玉且有手牌
629+
if (whoDie.skills.any { it is YiXin } && whoDie.cards.isNotEmpty()) {
630+
// 如果李宁玉的队友听牌
631+
if (whoDie.game!!.players.any {
632+
it!!.alive && it !== whoDie && it.identity == whoDie.identity && it.messageCards.count(whoDie.identity) == 2
633+
}) {
634+
// 如果自己也是同一阵营,则不救
635+
if (isPartnerOrSelf(whoDie)) {
636+
val stealer = game!!.players.find { it!!.alive && it.identity == Black && it.secretTask == Stealer }
637+
// 特殊情况:当前回合是篡夺者,则救
638+
return whoseTurn === stealer
639+
}
640+
// 如果自己不是同一阵营,则救(防止发动技能后敌方胜利)
641+
return true
642+
}
643+
}
612644
var save = isPartnerOrSelf(whoDie)
613645
var notSave = false
614646
val killer = game!!.players.find { it!!.alive && it.identity == Black && it.secretTask == Killer }

0 commit comments

Comments
 (0)