Merge pull request #638 from mengxinzxz/PR-Branch

bugfix+配音补充
This commit is contained in:
Spmario233 2023-11-16 22:31:04 +08:00 committed by GitHub
commit 20b6493300
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 201 additions and 22 deletions

Binary file not shown.

View File

@ -914,7 +914,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var cards=_status.event.list[0];
var targets=_status.event.list[1];
var player=_status.event.player;
if(get.attitude(player,targets[cards.indexOf(button.link)])) return 0;
if(get.attitude(player,targets[cards.indexOf(button.link)])>0) return 0;
return get.value(button.link,player);
}).set('list',[cards,targets]);
}
@ -1069,15 +1069,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
trigger:{global:'phaseJieshuBegin'},
filter:function(event,player){
if(!game.hasPlayer(target=>target.countCards('e',card=>get.subtype(card)!='equip5')<3||target.isLinked()||target.isTurnedOver()||target.isDamaged())) return false;
return player.getHistory('damage').length;
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt2('mbquesong')).set('ai',target=>{
player.chooseTarget(get.prompt2('mbquesong'),(card,player,target)=>{
return target.countCards('e',card=>get.subtype(card)!='equip5')<3||target.isLinked()||target.isTurnedOver()||target.isDamaged();
}).set('ai',target=>{
var player=_status.event.player;
if(get.attitude(player,target)<=0) return 0;
var len=Math.max(1,[1,2,3,4].reduce((p,c)=>p+target.countEmptySlot(c),0)),hp=target.getHp();
var len=Math.max(1,3-target.countCards('e',card=>get.subtype(card)!='equip5')),hp=target.getHp();
return len+target.isTurnedOver()*2+1.5*Math.min(4,target.getDamagedHp())/(hp+1);
});
'step 1'
@ -1085,29 +1088,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var target=result.targets[0];
event.target=target;
player.logSkill('mbquesong',target);
var len=Math.max(1,[1,2,3,4].reduce((p,c)=>p+target.countEmptySlot(c),0)),hp=target.getHp();
if(hp==0||target.countCards('h')<hp) event._result={bool:false};
var len=Math.max(1,3-target.countCards('e',card=>get.subtype(card)!='equip5'));
if(target.isHealthy()) event._result={index:0};
else{
var str=`是否弃置${get.cnNumber(hp)}张手牌并回复1点体力或点击“取消”摸${get.cnNumber(len)}张牌并复原武将牌。`;
target.chooseToDiscard(get.translation(player)+'对你发动了【雀颂】',str,'h',hp).set('ai',card=>{
if(!get.event('goon')) return 0;
return 6-get.value(card);
}).set('goon',function(){
var _hp=hp+target.isTurnedOver()*1.5;
if(_hp+player.countCards('hs',card=>get.tag(card,'recover'))<=2-len/4) return true;
return len<=_hp;
}());
target.chooseControl().set('choiceList',[
'摸'+get.cnNumber(len)+'张牌并复原武将牌',
'回复1点体力',
]).set('prompt','雀颂:请选择一项').set('ai',()=>{
var player=_status.event.player;
var len=_status.event.len;
return get.effect(player,{name:'wuzhong'},player,player)*len/2>=get.recoverEffect(player,player,player)?0:1;
}).set('len',len);
}
}
else event.finish();
'step 2'
if(result.bool){
if(result.index==1){
target.recover();
event.finish();
}
else{
target.draw(Math.max(1,[1,2,3,4].reduce((p,c)=>p+target.countEmptySlot(c),0)));
}
else target.draw(Math.max(1,3-target.countCards('e',card=>get.subtype(card)!='equip5')));
'step 3'
target.link(false);
'step 4'
@ -15601,7 +15601,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mbhuiyao:'慧夭',
mbhuiyao_info:'出牌阶段限一次。你可以受到1点无来源伤害然后你选择一名其他角色令其视为对另一名角色造成过1点伤害。',
mbquesong:'雀颂',
mbquesong_info:'一名角色的结束阶段若你于本回合受到过伤害你可以令一名角色选择一项1.摸等同于其装备区中非宝物栏中空栏的数量的牌并复原武将牌至少摸一张牌2.弃置等同于其体力值的手牌并回复1点体力。',
mbquesong_info:'一名角色的结束阶段若你于本回合受到过伤害你可以令一名角色选择一项1.摸X张牌并复原武将牌X为3-其装备区非宝物牌牌数且X至少为12.回复1点体力。',
xin_yuanshao:'手杀界袁绍',
xin_yuanshao_prefix:'手杀界',
re_baosanniang:'手杀鲍三娘',

View File

@ -15521,6 +15521,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olxuanfeng:'旋风',
olxuanfeng_info:'当你一次性失去至少两张牌后,或失去装备区的牌后,你可以依次弃置一至两名其他角色的共计两张牌。',
re_lidian:'界李典',
gz_re_lidian:'李典',
re_lidian_prefix:'界',
re_xushu:'界徐庶',
re_xushu_prefix:'界',

View File

@ -14,9 +14,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
character:{
liuba:['male','shu',3,['duanbi','tongduo']],
sp_zhujun:['male','qun',4,['yangjie','zjjuxiang','houfeng']],
sp_zhujun:['male','qun',4,['xinyangjie','xinjuxiang','houfeng']],
sp_huangfusong:['male','qun',4,['spzhengjun','spshiji','sptaoluan']],
sp_lvfan:['male','wu',3,['spdiaodu','spdiancai','spyanji']],
sp_lvfan:['male','wu',3,['mbdiaodu','mbdiancai','spyanji']],
sp_jiangqing:['male','wu',4,['spjianyi','spshangyi']],
sp_jiangwan:['male','shu',3,['spzhenting','spjincui']],
sp_zhangchangpu:['female','wei',3,['spdifei','spyanjiao']],
@ -244,6 +244,68 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
ai:{expose:10},
},
xinyangjie: {
audio: 'yangjie',
enable: 'phaseUse',
filter: function (event, player) {
return game.hasPlayer(function (target) {
return player.canCompare(target);
});
},
filterTarget: function (card, player, target) {
return player.canCompare(target);
},
usable: 1,
content: function () {
'step 0'
player.chooseToCompare(target).set('small', true);
'step 1'
if (!result.bool && game.hasPlayer(function (current) {
return current != player && current != target && current.canUse({ name: 'sha', nature: 'fire', isCard: true }, target, false);
})) {
player.chooseTarget('佯解:是否选择另一名其他角色?', '令其视为对' + get.translation(target) + '使用一张火【杀】', function (card, player, target) {
return target != player && target != _status.event.getParent().target;
}).set('ai', function (target) {
var player = _status.event.player, target2 = _status.event.getParent().target;
return get.effect(target2, { name: 'sha', nature: 'fire', isCard: true }, target, player);
});
}
else event.finish();
'step 2'
if (result.bool) {
var source = result.targets[0];
player.line(source);
game.log(player, '选择了', source);
var card = { name: 'sha', nature: 'fire', isCard: true };
if (target.isIn() && source.isIn() && source.canUse(card, target, false)) source.useCard(card, target, false, 'noai');
}
},
ai: {
order: 3,
result: {
target: function (player, target) {
var hs = player.getCards('h').sort(function (a, b) {
return a.number - b.number;
});
var ts = target.getCards('h').sort(function (a, b) {
return a.number - b.number;
});
if (!hs.length || !ts.length) return 0;
if (hs[0].number <= ts[0].number) return -3;
if (player.countCards('h') >= target.countCards('h')) return -10;
return -1;
},
},
},
},
xinjuxiang: {
audio: 'zjjuxiang',
inherit: 'zjjuxiang',
content: function () {
player.awakenSkill('xinjuxiang');
trigger.player.damage();
},
},
houfeng:{
audio:3,
group:'houfeng_zhengsu',
@ -582,6 +644,109 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.delayx();
},
},
mbdiaodu: {
audio: 'spdiaodu',
trigger: { player: 'phaseZhunbeiBegin' },
filter: function (event, player) {
return game.hasPlayer(function (target) {
return target.countCards('e', function (card) {
return game.hasPlayer(function (current) {
return current != player && current != target && current.canEquip(card);
});
});
});
},
direct: true,
content: function () {
'step 0'
player.chooseTarget(get.prompt2('mbdiaodu'), function (card, player, target) {
return target.countCards('e', function (card) {
return game.hasPlayer(function (current) {
return current != player && current != target && current.canEquip(card);
});
});
}).set('ai', function (target) {
var player = _status.event.player, att = get.attitude(player, target);
if (att > 0) {
if (target.hasCard(function (card) {
if (get.value(card, target) <= 0 && game.hasPlayer(function (current) {
return current != player && current != target && current.canEquip(card, false) && get.effect(current, card, player, player) > 0;
})) return true;
return false;
}, 'e')) return 2 * att;
}
else if (att < 0) {
if (target.hasCard(function (card) {
if (get.value(card, target) >= 4.5 && game.hasPlayer(function (current) {
return current != player && current != target && current.canEquip(card) && get.effect(current, card, player, player) > 0;
})) return true;
return false;
}, 'e')) return -att;
}
return 0;
})
'step 1'
if (result.bool) {
var target = result.targets[0];
event.target = target;
player.logSkill('mbdiaodu', target);
}
else event.finish();
'step 2'
var es = target.getCards('e', function (card) {
return game.hasPlayer(function (current) {
return current != target && current.canEquip(card);
})
});
if (es.length == 1) event._result = { bool: true, links: es };
else player.chooseButton(['移动' + get.translation(target) + '的一张装备牌', es], true).set('ai', function (button) {
var player = _status.event.player, target = _status.event.getParent().target, card = button.link;
if (game.hasPlayer(function (current) {
return current != player && current != target && current.canEquip(card) && get.effect(current, card, player, player) > 0;
})) return -get.value(card, target) * get.attitude(player, target);
return 0;
});
'step 3'
if (result.bool) {
event.card = result.links[0];
player.chooseTarget('请选择' + get.translation(event.card) + '的移动目标', true, function (card, player, target) {
return target != player && target.canEquip(_status.event.card);
}).set('card', event.card).set('ai', function (target) {
var evt = _status.event;
return get.effect(target, evt.getParent().card, evt.player, evt.player);
});
}
else event.finish();
'step 4'
if (result.bool) {
var target2 = result.targets[0];
target.line(target2);
target.$give(card, target2);
game.delay(0.5);
target2.equip(card);
}
else event.finish();
'step 5'
target.draw();
},
},
mbdiancai: {
audio: 'spdiancai',
trigger: { global: 'phaseUseEnd' },
filter: function (event, player) {
if (_status.currentPhase == player) return false;
var num = 0;
player.getHistory('lose', function (evt) {
if (evt.cards2 && evt.getParent('phaseUse') == event) num += evt.cards2.length;
});
return num >= player.hp && player.countCards('h') < player.maxHp;
},
frequent: true,
content: function () {
var num = player.maxHp - player.countCards('h');
if (num > 0) player.draw(num);
},
},
spyanji:{
audio:3,
group:'spyanji_zhengsu',
@ -6665,6 +6830,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
spdiaodu_info:'准备阶段,你可令一名角色摸一张牌,然后移动其装备区内的一张牌。',
spdiancai:'典财',
spdiancai_info:'其他角色的结束阶段开始时你可以令至多X名角色各摸一张牌X为你本回合失去的手牌数。',
mbdiaodu:'调度',
mbdiaodu_info:'准备阶段,你可以移动一名角色装备区内的一张牌(不能移动给自己),然后其摸一张牌。',
mbdiancai:'典财',
mbdiancai_info:'其他角色的出牌阶段阶段结束后,若你本阶段失去的牌数不小于你的体力值,则你可将手牌数补至体力上限。',
spyanji:'严纪',
spyanji_info:'出牌阶段开始时,你可以进行“整肃”。',
sp_huangfusong:'手杀皇甫嵩',
@ -6679,6 +6848,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yangjie_info:'出牌阶段限一次你可以摸一张牌并和一名其他角色A拼点。当你以此法展示你的拼点牌时你令此牌点数-XX为你已损失的体力值。若你没赢则你可以令另一名其他角色B获得两张拼点牌然后其视为对A使用一张火【杀】。',
zjjuxiang:'拒降',
zjjuxiang_info:'限定技。一名其他角色脱离濒死状态时你可以对其造成1点伤害然后摸X张牌X为其体力上限且至多为5。',
xinyangjie:'佯解',
xinyangjie_info:'出牌阶段限一次你可以与一名其他角色A拼点。若你没赢则你可以令另一名其他角色B视为对A使用一张火【杀】。',
xinjuxiang:'拒降',
xinjuxiang_info:'限定技一名其他角色脱离濒死状态时你可以对其造成1点伤害。',
houfeng:'厚俸',
houfeng_info:'每轮限一次。一名其他角色的出牌阶段开始时,若其在你的攻击范围内,则你可以令其进行“整肃”。然后当其于本回合内因整肃而摸牌或回复体力后,你获得相同的整肃奖励。',
liuba:'手杀刘巴',

View File

@ -1554,6 +1554,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
});
return !player.wontYe('wei')||!game.hasPlayer(current=>current.identity=='wei')
},
check:function(event,player,name){
return name!='damageBegin1';
},
content:function(){
trigger.num++;
},
@ -6258,7 +6261,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
return !player.getHistory('useCard').length||!player.getHistory('sourceDamage').length;
},
check:()=>false,
check:function(event,player){
return !player.getHistory('useCard').length;
},
content:function(){
lib.skill.rekuangcai.change(player,player.getHistory('useCard').length?-1:1);
},