From b84c122cd3fd373a8473f40f42ed82966deb3320 Mon Sep 17 00:00:00 2001 From: Spmario233 Date: Mon, 5 Feb 2024 21:38:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8D=81=E5=91=A8=E5=B9=B4?= =?UTF-8?q?=E6=BB=95=E8=8A=B3=E5=85=B0=E3=80=90=E8=90=BD=E5=AE=A0=E3=80=91?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- character/xianding.js | 119 ++++++++++++++++++++++++------------------ 1 file changed, 69 insertions(+), 50 deletions(-) diff --git a/character/xianding.js b/character/xianding.js index 0784078ef..b472446f0 100644 --- a/character/xianding.js +++ b/character/xianding.js @@ -5095,58 +5095,77 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return game.hasPlayer(current=>current.countDiscardableCards(player,'hej')>0); }, direct:true, - content:function(){ - 'step 0' - var num=4-player.countMark('dcluochong'); - var dialog=[]; - dialog.push('###'+get.prompt('dcluochong')+'###
弃置任意名角色区域内共计至多'+get.cnNumber(num)+'张牌
'); - game.filterPlayer().sortBySeat().forEach(target=>{ - if(target.countDiscardableCards(player,'hej')<=0) return false; - var name=(target==player?'你':get.translation(target)); - if(target.countCards('h')){ - dialog.add('
'+name+'的手牌区
'); - if(player.hasSkillTag('viewHandcard',null,target,true)||player==target) dialog.push(target.getCards('h')); - else dialog.push([target.getCards('h'),'blank']); - } - if(target.countCards('e')) dialog.addArray(['
'+name+'的装备区
',target.getCards('e')]); - if(target.countCards('j')) dialog.addArray(['
'+name+'的判定区
',target.getCards('j')]); - }); - player.chooseButton([1,num]).set('createDialog',dialog).set('filterButton',button=>{ - return lib.filter.canBeDiscarded(button.link,_status.event.player,get.owner(button.link)); - }).set('ai',button=>{ - var player=_status.event.player, - target=get.owner(button.link), - num=ui.selected.buttons.filter(i=>get.owner(i.link)==target).length; - if(num>1&&player.hp+player.hujia>2) return 0; - if(target==player){ - if(num) return -get.value(button.link,target); - if(ui.cardPile.childNodes.length>80) return 6-get.value(button.link,player); - return 0; - } - var val=get.buttonValue(button); - if(num===2) val/=4; - if(get.attitude(player,target)>0) return -val; - return val; - //return -(get.position(card)!='h'?get.value(card,target):(4.5+Math.random()-0.2*(num>2?1:0)))*get.attitude(player,target); - }); - 'step 1' - if(result.bool){ - var links=result.links; - var lose_list=[]; - var log=false; - for(var target of game.players){ - var cards=links.filter(card=>get.owner(card)==target); - if(cards.length){ - if(cards.length>2){ - player.addMark('dcluochong',1,false); - log=true; - } - lose_list.push([target,cards]); + async content(event,trigger,player){ + if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true}); + const lose_list = []; + let num = 4 - player.countMark('dcluochong'); + while (num>0) { + const result = await player.chooseTarget( + get.prompt('dcluochong'), + `弃置任意名角色区域内的累计至多${num}张牌`, + (card,player,target)=>{ + return target.hasCard(card => { + const discarded = _status.event.lose_list.find(item => item[0] == target); + if (discarded && discarded[1].includes(card)) return false; + return lib.filter.canBeDiscarded(card,player,target,'dcluochong'); + }, 'hej') + } + ).set('ai',target=>{ + const player = _status.event.player, discarded = _status.event.lose_list.find(item => item[0] == target); + if(discarded){ + if (target == player) return 0; + const num = discarded[1].length; + if (num > 1 && player.hp + player.hujia > 2) return 0; + } + if (target == player){ + if(ui.cardPile.childNodes.length > 80 && player.hasCard(card => get.value(card) < 8)) return 20; + return 0; + } + return get.effect(target, {name:'guohe_copy2'}, player, player); + }).set('lose_list',lose_list).forResult(); + if (result.bool) { + const target = result.targets[0]; + const cards = await player.choosePlayerCard(target, true, 'hej', [1,num], `选择弃置${get.translation(target)}区域内的牌`, (button) => { + const card = button.link, target = _status.event.target; + const discarded = _status.event.lose_list.find(item => item[0] == target); + if (discarded && discarded[1].includes(card)) return false; + return lib.filter.canBeDiscarded(card,player,target,'dcluochong'); + }).set('lose_list',lose_list).set('ai', button => { + if (ui.selected.buttons.length>0) return false; + var val = get.buttonValue(button); + if (get.attitude(_status.event.player, _status.event.target) > 0) return -val; + return val; + }).forResultCards(); + num -= cards.length; + const index = lose_list.find(item => item[0] == target); + if (!index) { + lose_list.push([target, cards]); + } + else { + index[1].addArray(cards); } } - player.logSkill('dcluochong',lose_list.map(i=>i[0])); - if(log) game.log(player,'可弃置牌数','#g-1'); - if(lose_list[0].length==1) lose_list[0][0].discard(lose_list[0][1]); + else { + break; + } + } + if (_status.connectMode) { + game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()}); + } + if (lose_list.length>0) { + lib.tempSortSeat = trigger.player; + lose_list.sort((a,b)=>{ + return lib.sort.seat(a[0],b[0]); + }); + delete lib.tempSortSeat; + player.logSkill('dcluochong',lose_list.map(i => i[0])); + if (lose_list.some(i => i[1].length > 2)) { + game.log(player,'可弃置牌数','#g-1'); + player.addMark('dcluochong',1,false); + } + if (lose_list[0].length==1) { + lose_list[0][0].discard(lose_list[0][1]); + } else{ game.loseAsync({ lose_list:lose_list,