diff --git a/character/standard.js b/character/standard.js index cbac476e5..795eedd98 100755 --- a/character/standard.js +++ b/character/standard.js @@ -102,11 +102,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ async content(event,trigger,player){ event.num=trigger.num||1; while(player.hasSkill('stdshushen')){ - const {result:{targets}}=await player.promises.chooseTarget(get.prompt2('stdshushen'),lib.filter.notMe) + const {result:{targets}}=await player.chooseTarget(get.prompt2('stdshushen'),lib.filter.notMe) .set('ai',target=>get.attitude(_status.event.player,target)); const target=targets[0]; player.logSkill('stdshushen',target); - await target.promises.draw(target.countCards('h')?1:2); + await target.draw(target.countCards('h')?1:2); if(--event.num<1) break; }; }, @@ -121,8 +121,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player.isPhaseUsing()&&event.card&&event.card.name=='sha'&&event.player!=player&&event.player.isIn(); }, async content(event,trigger,player){ - if(trigger.player.hp0; }, async content(event,trigger,player){ - const {result:{bool,cards}}=await trigger.promises.target.chooseCard('he','是否对'+get.translation(player)+'发动【同疾】?','弃置一张牌,将'+get.translation(trigger.card)+'转移给'+get.translation(player)) + const {result:{bool,cards}}=await trigger.target.chooseCard('he','是否对'+get.translation(player)+'发动【同疾】?','弃置一张牌,将'+get.translation(trigger.card)+'转移给'+get.translation(player)) .set('ai',card=>{ if(!_status.event.check) return -1; return get.unuseful(card)+9; @@ -206,7 +206,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ })()>0); if(bool){ player.logSkill('retongji',trigger.target); - await trigger.target.promises.discard(cards); + await trigger.target.discard(cards); const evt=trigger.getParent(); evt.triggeredTargets2.remove(trigger.target); evt.targets.remove(trigger.target); @@ -243,7 +243,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ get.attitude(event.current,player)>2)|| event.current.isOnline()){ player.storage.hujiaing=true; - const next=event.current.promises.chooseToRespond('是否替'+get.translation(player)+'打出一张闪?',{name:'shan'}); + const next=event.current.chooseToRespond('是否替'+get.translation(player)+'打出一张闪?',{name:'shan'}); next.set('ai',()=>{ const event=_status.event; return (get.attitude(event.player,event.source)-2); @@ -289,7 +289,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.itemtype(event.cards)=='cards'&&get.position(event.cards[0],true)=='o'; }, async content(event,trigger,player){ - await player.promises.gain(trigger.cards,'gain2'); + await player.gain(trigger.cards,'gain2'); }, ai:{ maixie:true, @@ -311,7 +311,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return (event.source&&event.source.countGainableCards(player,event.source!=player?'he':'e')&&event.num>0); }, async content(event,trigger,player){ - await player.promises.gainPlayerCard(true,trigger.source,trigger.source!=player?'he':'e'); + await player.gainPlayerCard(true,trigger.source,trigger.source!=player?'he':'e'); }, ai:{ maixie_defend:true, @@ -334,7 +334,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player.countCards(get.mode()=='guozhan'?'hes':'hs')>0; }, async content(event,trigger,player){ - const {result:{bool:chooseCardResultBool,cards:chooseCardResultCards}}=await player.promises.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ + const {result:{bool:chooseCardResultBool,cards:chooseCardResultCards}}=await player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ get.translation(trigger.player.judging[0])+','+get.prompt('guicai'),get.mode()=='guozhan'?'hes':'hs',card=>{ const player=_status.event.player; const mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); @@ -357,7 +357,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }).set('judging',trigger.player.judging[0]).setHiddenSkill('guicai'); if(!chooseCardResultBool) return; - await player.promises.respond(chooseCardResultCards,'guicai','highlight','noOrdering'); + await player.respond(chooseCardResultCards,'guicai','highlight','noOrdering'); if(trigger.player.judging[0].clone){ trigger.player.judging[0].clone.classList.remove('thrownhighlight'); game.broadcast(function(card){ @@ -367,7 +367,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ },trigger.player.judging[0]); game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone])); } - await game.cardsDiscard(trigger.player.judging[0]).toPromise(); + await game.cardsDiscard(trigger.player.judging[0]); trigger.player.judging[0]=chooseCardResultCards[0]; trigger.orderingCards.addArray(chooseCardResultCards); game.log(trigger.player,'的判定牌改为',chooseCardResultCards[0]); @@ -391,14 +391,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, logTarget:'source', async content(event,trigger,player){ - const judgeEvent=player.promises.judge(card=>{ + const judgeEvent=player.judge(card=>{ if(get.suit(card)=='heart') return -2; return 2; }); judgeEvent.judge2=result=>result.bool; const {result:{judge}}=await judgeEvent; if(judge<2) return; - const {result:{bool}}=await trigger.source.promises.chooseToDiscard(2) + const {result:{bool}}=await trigger.source.chooseToDiscard(2) .set('ai',card=>{ if(card.name=='tao') return -10; if(card.name=='jiu'&&_status.event.player.hp==1) return -10; @@ -424,7 +424,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'damageEnd'}, direct:true, async content(event,trigger,player){ - const {result:{bool:chooseTargetResultBool,targets:chooseTargetResultTargets}}=await player.promises.chooseTarget(get.prompt2('ganglie_three'),(card,player,target)=>{ + const {result:{bool:chooseTargetResultBool,targets:chooseTargetResultTargets}}=await player.chooseTarget(get.prompt2('ganglie_three'),(card,player,target)=>{ return target.isEnemyOf(player); }).set('ai',target=>{ return -get.attitude(_status.event.player,target)/(1+target.countCards('h')); @@ -432,14 +432,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!chooseTargetResultBool) return; event.target=chooseTargetResultTargets[0]; player.logSkill('ganglie_three',event.target); - const judgeEvent=player.promises.judge(card=>{ + const judgeEvent=player.judge(card=>{ if(get.suit(card)=='heart') return -2; return 2; }); judgeEvent.judge2=result=>result.bool; const {result:{judge}}=await judgeEvent; if(judge<2) return; - const {result:{bool:chooseToDiscardResultBool}}=await player.promises.chooseToDiscard(2).set('ai',card=>{ + const {result:{bool:chooseToDiscardResultBool}}=await player.chooseToDiscard(2).set('ai',card=>{ if(card.name=='tao') return -10; if(card.name=='jiu'&&_status.event.player.hp==1) return -10; return get.unuseful(card)+2.5*(5-get.owner(card).hp); @@ -472,7 +472,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return current!=player&¤t.countCards('h')&&get.attitude(player,current)<=0; }); check=(num>=2); - const {result:{bool,targets}}=await player.promises.chooseTarget(get.prompt('tuxi'),'获得其他一至两名角色的各一张手牌',[1,2],(card,player,target)=>{ + const {result:{bool,targets}}=await player.chooseTarget(get.prompt('tuxi'),'获得其他一至两名角色的各一张手牌',[1,2],(card,player,target)=>{ return target.countCards('h')>0&&player!=target; },target=>{ if(!_status.event.aicheck) return 0; @@ -482,7 +482,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }).set('aicheck',check); if(!bool) return; player.logSkill('tuxi',targets); - await player.promises.gainMultiple(targets); + await player.gainMultiple(targets); trigger.changeToZero(); await game.asyncDelay(); }, @@ -541,7 +541,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.position(event.result.card,true)=='o'; }, async content(event,trigger,player){ - await player.promises.gain(trigger.result.card,'gain2'); + await player.gain(trigger.result.card,'gain2'); } }, yiji:{ @@ -556,7 +556,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ // event.goto -> while while(true){ event.count--; - const {cards}=await game.cardsGotoOrdering(get.cards(2)).toPromise(); + const {cards}=await game.cardsGotoOrdering(get.cards(2)); if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true}); event.given_map={}; if(!cards.length) return; @@ -565,7 +565,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ const {result:{bool,links}} = cards.length==1? {result:{links:cards.slice(0),bool: true}}: - await player.promises.chooseCardButton('遗计:请选择要分配的牌',true,cards,[1,cards.length]) + await player.chooseCardButton('遗计:请选择要分配的牌',true,cards,[1,cards.length]) .set('ai',button=>{ if(ui.selected.buttons.length==0) return 1; return 0; @@ -573,7 +573,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!bool) return; cards.removeArray(links); event.togive=links.slice(0); - const {result:{targets}}=await player.promises.chooseTarget('选择一名角色获得'+get.translation(links),true) + const {result:{targets}}=await player.chooseTarget('选择一名角色获得'+get.translation(links),true) .set('ai',target=>{ const att=get.attitude(_status.event.player,target); if(_status.event.enemy){ @@ -607,9 +607,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gain_list:list, giver:player, animate:'draw', - }).toPromise().setContent('gaincardMultiple'); + }).setContent('gaincardMultiple'); if(event.count>0&&player.hasSkill(event.name)&&!get.is.blocked(event.name, player)){ - const {result:{bool:chooseBoolResultBool}}=await player.promises.chooseBool(get.prompt2(event.name)).set('frequentSkill',event.name); + const {result:{bool:chooseBoolResultBool}}=await player.chooseBool(get.prompt2(event.name)).set('frequentSkill',event.name); if(chooseBoolResultBool) player.logSkill(event.name); else return; } @@ -649,13 +649,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ async content(event,trigger,player){ while(true){ if(event.cards==undefined) event.cards=[]; - const judgeEvent=player.promises.judge(card=>{ + const judgeEvent=player.judge(card=>{ if(get.color(card)=='black') return 1.5; return -1.5; }); judgeEvent.judge2=result=>result.bool; if(get.mode()!='guozhan'&&!player.hasSkillTag('rejudge')) judgeEvent.set('callback',async event=>{ - if(event.judgeResult.color=='black'&&get.position(event.card,true)=='o') await player.promises.gain(event.card,'gain2'); + if(event.judgeResult.color=='black'&&get.position(event.card,true)=='o') await player.gain(event.card,'gain2'); }); else judgeEvent.set('callback',async event=>{ if(event.judgeResult.color=='black') event.getParent().orderingCards.remove(event.card); @@ -664,7 +664,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ let bool; if(judge>0){ event.cards.push(card); - bool=(await player.promises.chooseBool('是否再次发动【洛神】?').set('frequentSkill','luoshen')).result.bool; + bool=(await player.chooseBool('是否再次发动【洛神】?').set('frequentSkill','luoshen')).result.bool; } else{ for(let i=0;i{ + const judgeEvent=player.judge(card=>{ if(get.color(card)=='black') return 1.5; return -1.5; },ui.special); @@ -703,7 +703,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ let bool; if(judge>0){ event.cards.push(card); - bool=lib.config.autoskilllist.contains('luoshen')?(await player.promises.chooseBool('是否再次发动【洛神】?')).result.bool:true; + bool=lib.config.autoskilllist.contains('luoshen')?(await player.chooseBool('是否再次发动【洛神】?')).result.bool:true; } else{ for(let i=0;i{ if(evt.getParent(2).name=='rende'&&evt.getParent(5)==evt2) num+=evt.cards.length; }); - await player.promises.give(event.cards,event.target); - if(num<2&&num+event.cards.length>1) await player.promises.recover(); + await player.give(event.cards,event.target); + if(num<2&&num+event.cards.length>1) await player.recover(); }, ai:{ order(skill,player){ @@ -940,7 +940,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return; } else if(event.current.group=='shu'){ - const chooseToRespondEvent=event.current.promises.chooseToRespond('是否替'+get.translation(player)+'打出一张杀?',{name:'sha'}); + const chooseToRespondEvent=event.current.chooseToRespond('是否替'+get.translation(player)+'打出一张杀?',{name:'sha'}); chooseToRespondEvent.set('ai',()=>{ const event=_status.event; return (get.attitude(event.player,event.source)-2); @@ -1035,7 +1035,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ async content(event,trigger,player){ player.awakenSkill('zhongyi'); player.addTempSkill('zhongyi2','roundStart'); - await player.promises.addToExpansion(player,'give',event.cards).gaintag.add('zhongyi2'); + await player.addToExpansion(player,'give',event.cards).gaintag.add('zhongyi2'); }, }, zhongyi2:{ @@ -1094,8 +1094,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ async content(event,trigger,player){ const num=player.hasSkill('yizhi')&&player.hasSkill('guanxing')?5:Math.min(5,game.countPlayer()); const cards=get.cards(num); - await game.cardsGotoOrdering(cards).toPromise(); - const next=player.promises.chooseToMove(); + await game.cardsGotoOrdering(cards); + const next=player.chooseToMove(); next.set('list',[ ['牌堆顶',cards], ['牌堆底'], @@ -1140,7 +1140,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(event.top_cards.includes(card)) return ui.cardPile.firstChild; return null; } - ).toPromise(); + ); player.popup(get.cnNumber(top.length)+'上'+get.cnNumber(bottom.length)+'下'); game.log(player,'将'+get.cnNumber(top.length)+'张牌置于牌堆顶'); await game.asyncDelayx(); @@ -1198,7 +1198,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return event.skill=='longdan_sha'||event.skill=='longdan_shan'; }, async content(event,trigger,player){ - await player.promises.draw(); + await player.draw(); player.storage.fanghun2++; } }, @@ -1294,7 +1294,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ logTarget:'target', preHidden:true, async content(event,trigger,player){ - const judgeEvent=player.promises.judge(card=>{ + const judgeEvent=player.judge(card=>{ if(get.zhu(_status.event.player,'shouyue')){ if(get.suit(card)!='spade') return 2; } @@ -1326,7 +1326,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return (get.type(event.card)=='trick'&&event.card.isCard); }, async content(event,trigger,player){ - await player.promises.draw(); + await player.draw(); }, ai:{ threaten:1.4, @@ -1343,7 +1343,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return (get.type(event.card,'trick')=='trick'&&event.cards[0]&&event.cards[0]==event.card); }, async content(event, trigger, player){ - await player.promises.draw(); + await player.draw(); }, ai:{ threaten:1.4, @@ -1395,7 +1395,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ delay:0, async content(event,trigger,player){ if(!player.hasSkill('xinzhiheng_delay')) await game.asyncDelayx(); - await player.promises.draw(event.cards.length); + await player.draw(event.cards.length); }, group:'xinzhiheng_draw', subSkill:{ @@ -1454,7 +1454,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 6-get.value(card) }, async content(event,trigger,player){ - await player.promises.draw(event.cards.length); + await player.draw(event.cards.length); }, ai:{ order:1, @@ -1496,7 +1496,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return true; }, async content(event,trigger,player){ - await player.promises.recover(); + await player.recover(); }, global:'xinjiuyuan2', }, @@ -1517,11 +1517,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ while(event.list.length>0){ const current=event.list.shift(); event.current=current; - const {result:{bool}}=await player.promises.chooseBool(get.prompt('xinjiuyuan',current)).set('choice',get.attitude(player,current)>0); + const {result:{bool}}=await player.chooseBool(get.prompt('xinjiuyuan',current)).set('choice',get.attitude(player,current)>0); if(bool){ player.logSkill('xinjiuyuan',event.current); - await event.current.promises.recover(); - await player.promises.draw(); + await event.current.recover(); + await player.draw(); } } } @@ -1565,8 +1565,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'phaseUse', prompt:'失去1点体力并摸两张牌', async content(event,trigger,player){ - await player.promises.loseHp(1); - await player.promises.draw(2); + await player.loseHp(1); + await player.draw(2); }, ai:{ basic:{ @@ -1608,7 +1608,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, async content(event,trigger,player){ const target=event.target; - const {result:{control}}=await target.promises.chooseControl('heart2','diamond2','club2','spade2').set('ai',event=>{ + const {result:{control}}=await target.chooseControl('heart2','diamond2','club2','spade2').set('ai',event=>{ switch(Math.floor(Math.random()*6)){ case 0:return 'heart2'; case 1:case 4:case 5:return 'diamond2'; @@ -1619,8 +1619,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.log(target,'选择了'+get.translation(control)); event.choice=control; target.chat('我选'+get.translation(event.choice)); - const {result:{bool,cards}}=await target.promises.gainPlayerCard(player,true,'h'); - if(bool&&get.suit(cards[0],player)+'2'!=event.choice) await target.promises.damage('nocard'); + const {result:{bool,cards}}=await target.gainPlayerCard(player,true,'h'); + if(bool&&get.suit(cards[0],player)+'2'!=event.choice) await target.damage('nocard'); }, ai:{ order:1, @@ -1672,7 +1672,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); }, async content(event,trigger,player){ - const {result:{bool,targets,cards}}=await player.promises.chooseCardTarget({ + const {result:{bool,targets,cards}}=await player.chooseCardTarget({ position:'he', filterCard:lib.filter.cardDiscardable, filterTarget:(card,player,target)=>{ @@ -1706,7 +1706,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(bool){ const target=targets[0]; player.logSkill(event.name,target); - await player.promises.discard(cards); + await player.discard(cards); const evt=trigger.getParent(); evt.triggeredTargets2.remove(player); evt.targets.remove(player); @@ -1761,7 +1761,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return evt&&evt.player==player&&evt.hs&&evt.hs.length>0; }, async content(event,trigger,player){ - await player.promises.draw(); + await player.draw(); }, ai:{ threaten:0.8, @@ -1794,9 +1794,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.count=trigger.getl(player).es.length; while(true){ event.count--; - await player.promises.draw(2); + await player.draw(2); if(event.count>0&&player.hasSkill(event.name)&&!get.is.blocked(event.name,player)){ - const chooseBoolEvent=player.promises.chooseBool(get.prompt2('xiaoji')).set('frequentSkill','xiaoji'); + const chooseBoolEvent=player.chooseBool(get.prompt2('xiaoji')).set('frequentSkill','xiaoji'); chooseBoolEvent.ai=lib.filter.all; const {result:{bool}}=await chooseBoolEvent; if(bool){ @@ -1836,8 +1836,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return true; }, async content(event,trigger,player){ - await player.promises.recover(); - await event.target.promises.recover(); + await player.recover(); + await event.target.recover(); }, ai:{ order:5.5, @@ -1898,18 +1898,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ const {cards,target}=event; if(get.position(cards[0])=='e'){ player.$give(cards,target); - await target.promises.equip(cards[0]); + await target.equip(cards[0]); } else{ - await player.promises.discard(cards); + await player.discard(cards); } if(player.hp>target.hp){ - await player.promises.draw(); - if(target.isDamaged()) await target.promises.recover(); + await player.draw(); + if(target.isDamaged()) await target.recover(); } else if(player.hp{ + const {result:{control}}=await player.chooseControl(list,()=>{ const player=_status.event.player; if(list.includes('弃牌')){ if(player.countCards('h')>3&&player.countCards('h','sha')>1){ @@ -2272,12 +2272,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 'cancel2'; }).set('prompt',get.prompt2('new_jiangchi')); if(control=='弃牌'){ - await player.promises.chooseToDiscard(true,'he'); + await player.chooseToDiscard(true,'he'); player.addTempSkill('jiangchi2','phaseUseEnd'); player.logSkill('new_jiangchi'); } else if(control=='摸牌'){ - await player.promises.draw(); + await player.draw(); player.addTempSkill('new_jiangchi3','phaseEnd'); player.logSkill('new_jiangchi'); } @@ -2309,9 +2309,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, async content(event,trigger,player){ const card=get.bottomCards()[0]; - await game.cardsGotoOrdering(card).toPromise(); + await game.cardsGotoOrdering(card); event.card=card; - const {result:{bool,targets}}=await player.promises.chooseTarget(true).set('ai',target=>{ + const {result:{bool,targets}}=await player.chooseTarget(true).set('ai',target=>{ let att=get.attitude(_status.event.player,target); if(_status.event.du){ if(target.hasSkillTag('nodu')) return 0.5; @@ -2329,7 +2329,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(bool){ const target=targets[0]; player.line(target,'green'); - const gainEvent=target.promises.gain(card,'draw'); + const gainEvent=target.gain(card,'draw'); gainEvent.giver=player; await gainEvent; } @@ -2363,13 +2363,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ do{ const target=event.targets.shift(); event.target=target; - const {result:{bool}}=await player.promises.chooseBool(get.prompt2('xinfu_jiyuan',target)).set('ai',()=>{ + const {result:{bool}}=await player.chooseBool(get.prompt2('xinfu_jiyuan',target)).set('ai',()=>{ const evt=_status.event; return get.attitude(player,evt.getParent().target)>0; }); if(bool){ player.logSkill('xinfu_jiyuan',target); - await target.promises.draw(); + await target.draw(); } }while(event.targets.length>0); }, diff --git a/game/game.js b/game/game.js index f17dbdf9a..4ed81e600 100644 --- a/game/game.js +++ b/game/game.js @@ -15,6 +15,7 @@ new Promise(resolve=>{ * @typedef {InstanceType} Card * @typedef {InstanceType} VCard * @typedef {InstanceType} GameEvent + * @typedef {InstanceType} GameEventPromise * @typedef {InstanceType} NodeWS */ const userAgent=navigator.userAgent.toLowerCase(); @@ -21031,22 +21032,6 @@ new Promise(resolve=>{ }; player.queueCount=0; player.outCount=0; - /** - * 这部分应该用d.ts写。目前只给出大概类型 - * @type { {[key in keyof Player]: (...args) => Promise & GameEvent} } - */ - player.promises=new Proxy({},{ - get(target,prop){ - const eventKeys=Object.keys(lib.element.player).filter(key=>typeof lib.element.player[key]=='function'); - if (eventKeys.includes(prop)){ - return function (...args) { - /** @type { GameEvent } */ - const event=player[prop](...args); - return event.toPromise(); - }; - } - } - }); } buildEventListener(noclick){ let player = this; @@ -31273,6 +31258,7 @@ new Promise(resolve=>{ } }, GameEvent:class{ + #promise; /** * @param {string} [name] * @param {false} [trigger] @@ -31293,6 +31279,24 @@ new Promise(resolve=>{ * @type {GameEvent[]} */ this.next=[]; + Object.defineProperty(this.next,'remove',{ + enumerable:false, + value:function(){ + for(const item of arguments){ + let pos=-1; + if (typeof item=='number'&&isNaN(item)){ + pos=this.findIndex(v=>isNaN(v)) + }else if(item instanceof lib.element.GameEventPromise){ + pos=this.indexOf(item.toEvent()); + }else{ + pos=this.indexOf(item); + } + if(pos==-1) continue; + this.splice(pos,1); + } + return this; + } + }); /** * @type {GameEvent[]} */ @@ -31316,7 +31320,7 @@ new Promise(resolve=>{ if(trigger!==false&&!game.online) this._triggered=0; } static initialGameEvent(){ - return new lib.element.GameEvent().finish(); + return new lib.element.GameEvent().finish().toPromise(); } /** * @param {keyof this} key @@ -31643,14 +31647,14 @@ new Promise(resolve=>{ this.next.push(next); next.setContent(content); Object.entries(map).forEach(entry=>next.set(entry[0],entry[1])); - return next; + return next.toPromise(); } insertAfter(content,map){ const next=new lib.element.GameEvent(`${this.name}Inserted`,false); this.after.push(next); next.setContent(content); Object.entries(map).forEach(entry=>next.set(entry[0],entry[1])); - return next; + return next.toPromise(); } backup(skill){ this._backup={ @@ -32104,13 +32108,13 @@ new Promise(resolve=>{ /** * 事件转为Promise化 * - * @returns { Promise & GameEvent } + * @returns { Promise & GameEvent & GameEventPromise } */ toPromise(){ - if(this.async&&this.resolve){ - throw new TypeError('This event has been converted into a promise'); + if(!this.#promise){ + this.#promise=new lib.element.GameEventPromise(this); } - return new lib.element.GameEventPromise(this); + return this.#promise; } }, /** @@ -32126,13 +32130,13 @@ new Promise(resolve=>{ * @todo 需要完成异步事件的debugger方法 * * @example - * 使用toPromise()函数将普通事件转换为异步事件: + * 使用await xx()等待异步事件执行: * ```js - * await game.xxx().toPromise().setContent('yyy').set(zzz, 'i'); + * await game.xxx().setContent('yyy').set(zzz, 'i'); * ``` - * 使用player.promises.xxx()函数将对于player的普通事件转换为异步事件并执行: + * 使用await player.xxx()等待异步事件执行: * ```js - * await player.promises.draw(2); + * await player.draw(2); * game.log('等待', player, '摸牌完成执行log'); * ``` */ @@ -32142,6 +32146,7 @@ new Promise(resolve=>{ static get [Symbol.species]() { return Promise; } + #event; /** * @param { GameEvent } event * @returns { Promise & GameEvent } @@ -32154,7 +32159,7 @@ new Promise(resolve=>{ event.resolve=resolve; // 如果父级事件也是一个异步的话,那应该立即执行这个事件的 // 如果在AsyncFunction执行过程中在别的位置新建了一个异步事件,那也直接(等会set配置完)执行 - if(_status.event.next.includes(event)&&_status.event.content instanceof AsyncFunction){ + if(_status.event&&_status.event.next.includes(event)&&_status.event.content instanceof AsyncFunction){ if (_status.event!=event) { event.parent=_status.event; _status.event=event; @@ -32167,6 +32172,7 @@ new Promise(resolve=>{ Promise.resolve().then(()=>game.loop(event)); } }); + this.#event=event; return new Proxy(this,{ get(target,prop,receiver){ const thisValue=Reflect.get(target,prop); @@ -32182,7 +32188,7 @@ new Promise(resolve=>{ const returnValue=eventValue.call(event,...args); return returnValue==event?receiver:returnValue; }).bind(event); - return eventValue; + return eventValue==event?receiver:eventValue; }, set(target,prop,newValue){ return Reflect.set(event,prop,newValue); @@ -32201,6 +32207,10 @@ new Promise(resolve=>{ }, }); } + /** 获取原事件对象 */ + toEvent(){ + return this.#event; + } /** * TODO: 实现debugger */ @@ -40357,7 +40367,7 @@ new Promise(resolve=>{ createEvent:(name,trigger,triggerEvent)=>{ const next=new lib.element.GameEvent(name,trigger); (triggerEvent||_status.event).next.push(next); - return next; + return next.toPromise(); }, addCharacter:(name,information)=>{ const extensionName=_status.extension||information.extension,character=[