diff --git a/card/standard.js b/card/standard.js index bb582c708..dc1072d22 100755 --- a/card/standard.js +++ b/card/standard.js @@ -240,7 +240,7 @@ card.standard={ if(target.hp<0&&target!=player&&target.identity!='zhu') return 0; var att=ai.get.attitude(player,target); if(att<3&&att>=0&&player!=target) return 0; - var tri=_status.event.parent._trigger; + var tri=_status.event.getParent()._trigger; if(lib.config.mode=='identity'&&player.identity=='fan'&&target.identity=='fan'){ if(tri&&tri.name=='dying'&&tri.source&&tri.source.identity=='fan'&&tri.source!=target){ var num=0; @@ -452,13 +452,18 @@ card.standard={ _status.dieClose.push(dialog); dialog.videoId=lib.status.videoId++; game.addVideo('cardDialog',null,['五谷丰登',get.cardsInfo(cards),dialog.videoId]); - event.parent.preResult=dialog.videoId; + event.getParent().preResult=dialog.videoId; + game.broadcast(function(cards,id){ + var dialog=ui.create.dialog('五谷丰登',cards,true); + _status.dieClose.push(dialog); + dialog.videoId=id; + },cards,dialog.videoId); }, content:function(){ "step 0" for(var i=0;i1){ - var next=target.chooseButton(event.dialog,true,function(button){ + var next=target.chooseButton(true,function(button){ return ai.get.value(button.link,_status.event.player); }); - next.closeDialog=false; - next.dialog.style.display=''; + next.set('dialog',event.preResult); + next.set('closeDialog',false); + next.set('dialogdisplay',true); } else{ event.directButton=event.dialog.buttons[0]; } "step 1" var dialog=event.dialog; - var button=event.directButton||result.buttons[0]; - if(button.link){ - target.gain(button.link); - target.$gain2(button.link); + var card; + if(event.directButton){ + card=event.directButton.link; } - dialog.buttons.remove(button); - button.getElementsByClassName('info')[0].innerHTML=get.translation(target.name); - dialog.content.firstChild.innerHTML= - get.translation(target)+'选择了'+get.translation(button.link); + else{ + card=result.links[0]; + } + + var button; + for(var i=0;i=0) return 0; + return state*ai.get.attitude(_status.event.player,source); + } + else{ + var info=get.info(card); + if(info.ai&&info.ai.wuxie){ + var aiii=info.ai.wuxie(target,card,source,_status.event.player,state); + if(typeof aiii=='number') return aiii; + } + if(info.multitarget&&targets){ + var eff=0; + for(var i=0;i0){ + list2.push(list[i]); + } + } + if(!withme){ + if(!withol){ + event.aionly=true; + } + event.goto(3); + } + event.withol=withol; + if(list2.length){ + event.aichoice=list2.randomGet(); + event.wuxietimeout=setTimeout(function(){ + if(!event.wuxieresult){ + event.wuxieresult=event.aichoice; + event.wuxieresult2='ai'; + game.broadcast('cancel',event.id); + if(_status.event.id==event.id&&_status.event.name=='chooseToUse'&&_status.paused){ + ui.click.cancel(); + if(ui.confirm) ui.confirm.close(); + } + if(event.aionly){ + game.resume(); + } + } + },event.aionly?200:(Math.random()*90000+3000)); + } + else{ + event.aionly=false; + } + 'step 2' + if(result&&result.bool&&!event.wuxieresult){ + clearTimeout(event.wuxietimeout); + game.broadcast('cancel',event.id); + event.wuxieresult=game.me; + event.wuxieresult2=result; + } + 'step 3' + if(event.withol&&!event.resultOL){ + game.pause(); + } + else if(event.aionly){ + game.pause(); + } + 'step 4' + clearTimeout(event.wuxietimeout); + if(event.wuxieresult2=='ai'){ + event.wuxieresult.chooseToUse({ + filterCard:function(card,player){ + if(card.name!='wuxie') return false; + var mod=game.checkMod(card,player,'unchanged','cardEnabled',player.get('s')); + if(mod!='unchanged') return mod; + return true; + }, + forced:true, + nouse:true, + type:'wuxie', + ai1:function(){return 1} + }); + } + else{ + event.goto(6) + } + 'step 5' + if(event.wuxieresult2=='ai'){ + if(result&&result.bool){ + event.wuxieresult2=result; + } + else{ + event.blacklist.push(event.wuxieresult); + event.goto(1); + } + } + 'step 6' + if(event.wuxieresult2){ + event.wuxieresult.useResult(event.wuxieresult2); + } + 'step 7' + if(event.wuxieresult){ + if(result=='wuxied'){ + event.state=!event.state; + } + event.goto(1); + } + else{ + if(!event.state){ + trigger.untrigger(); + if(event.triggername=='phaseJudge'){ + trigger.cancelled=true; + } + else{ + trigger.finish(); + } + } + } + delete event.resultOL; + delete event.wuxieresult; + delete event.wuxieresult2; + delete event.aichoice; + } + }, + wuxie1_old:{ trigger:{player:'useCardToBefore'}, priority:5, filter:function(event,player){ @@ -1439,7 +1745,7 @@ card.standard={ } } }, - _wuxie2:{ + wuxie2_old:{ trigger:{player:'phaseJudge'}, priority:5, popup:false, diff --git a/character/sp.js b/character/sp.js index ec20fcd48..53f8266fa 100755 --- a/character/sp.js +++ b/character/sp.js @@ -4436,9 +4436,7 @@ character.sp={ enable:'chooseToUse', direct:true, filter:function(event,player){ - return _status.currentPhase!==player&& - event.parent.name!='_wuxie1'&&event.parent.name!='_wuxie2'&& - event.parent.name!='_chenhuodajie'; + return _status.currentPhase!==player&&event.type!='wuxie'&&event.getParent().name!='_chenhuodajie'; }, delay:0, content:function(){ diff --git a/character/standard.js b/character/standard.js index 862b1f305..0a7115e00 100755 --- a/character/standard.js +++ b/character/standard.js @@ -148,7 +148,7 @@ character.standard={ "step 0" player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ get.translation(trigger.player.judging[0])+',是否发动【鬼才】?').ai=function(card){ - var trigger=_status.event.parent._trigger; + var trigger=_status.event.getParent()._trigger; var player=_status.event.player; var result=trigger.judge(card)-trigger.judge(trigger.player.judging[0]); var attitude=ai.get.attitude(player,trigger.player); @@ -287,8 +287,7 @@ character.standard={ luoyi2:{ trigger:{source:'damageBegin'}, filter:function(event){ - return event.card&&(event.card.name=='sha'||event.card.name=='juedou')&& - event.parent.name!='_lianhuan'&&event.parent.name!='_lianhuan2'; + return event.card&&(event.card.name=='sha'||event.card.name=='juedou')&&event.notLink(); }, forced:true, content:function(){ @@ -319,7 +318,7 @@ character.standard={ "step 2" player.chooseCardTarget({ filterCard:function(card){ - return _status.event.parent.cards.contains(card); + return _status.event.getParent().cards.contains(card); }, selectCard:[1,event.cards.length], filterTarget:function(card,player,target){ @@ -607,7 +606,7 @@ character.standard={ if(event.current==undefined) event.current=player.next; if(event.current==player){ player.addTempSkill('jijiang3','phaseAfter'); - event.parent.parent.step=0; + event.getParent(2).step=0; event.finish(); } else if(event.current.group=='shu'){ @@ -695,7 +694,8 @@ character.standard={ game.modeSwapPlayer(player); } var cards=get.cards(Math.min(5,game.players.length)); - event.switchToAuto=function(){ + event.cards=cards; + var switchToAuto=function(){ _status.imchoosing=false; if(event.dialog) event.dialog.close(); if(event.control) event.control.close(); @@ -737,29 +737,53 @@ character.standard={ game.log(player,'将'+get.cnNumber(top.length)+'张牌置于牌堆顶'); game.delay(2); }; - if(event.isMine()){ + var chooseButton=function(online,player,cards){ + var event=_status.event; + player=player||event.player; + cards=cards||event.cards; event.top=[]; event.bottom=[]; event.status=true; event.dialog=ui.create.dialog('按顺序选择置于牌堆顶的牌(先选择的在上)',cards); + event.switchToAuto=function(){ + event._result='ai'; + event.dialog.close(); + event.control.close(); + _status.imchoosing=false; + }, event.control=ui.create.control('ok','pileTop','pileBottom',function(link){ var event=_status.event; if(link=='ok'){ - var i; - for(i=0;i0;i--){ - if(player.node.handcards1.childNodes[i].classList.contains('removing')==false){ - player.node.handcards1.childNodes[i].animate('last'); - break; - } - } - for(var i=player.node.handcards2.childNodes.length-1;i>0;i--){ - if(player.node.handcards2.childNodes[i].classList.contains('removing')==false){ - player.node.handcards2.childNodes[i].animate('last'); - break; - } - } - ui.updatehl(); - },cards); + if(player==game.me){ + for(var i=player.node.handcards1.childNodes.length-1;i>0;i--){ + if(player.node.handcards1.childNodes[i].classList.contains('removing')==false){ + player.node.handcards1.childNodes[i].animate('last'); + break; + } + } + for(var i=player.node.handcards2.childNodes.length-1;i>0;i--){ + if(player.node.handcards2.childNodes[i].classList.contains('removing')==false){ + player.node.handcards2.childNodes[i].animate('last'); + break; + } + } + ui.updatehl(); + } + },player,cards); game.addVideo('lose',player,[get.cardsInfo(hs),get.cardsInfo(es),get.cardsInfo(js)]); player.update(); game.addVideo('loseAfter',player); @@ -6330,7 +6341,9 @@ position:parseInt(this.dataset.position), hujia:this.hujia, className:this.className, - identity:[this.node.identity.innerHTML,this.node.identity.dataset.color], + identityShown:this.identityShown, + identityNode:[this.node.identity.innerHTML,this.node.identity.dataset.color], + identity:this.identity, transform:this.queueCount?'':this.style.transform } }, @@ -6346,7 +6359,6 @@ game.broadcast(function(player,hp,maxHp,nh,hujia){ player.hp=hp; player.maxHp=maxHp; - player._onlineh=nh; player.hujia=hujia; player.update(); },this,this.hp,this.maxHp,this.num('h'),this.hujia); @@ -6416,9 +6428,6 @@ hp.style.transition=''; }); var numh=this.num('h'); - if(this._onlineh){ - numh=this._onlineh; - } if(_status.video){ numh=arguments[0]; } @@ -7315,6 +7324,26 @@ next.target=target; next.content=lib.element.playerproto.viewHandcards; }, + useResult:function(result,event){ + event=event||_status.event; + if(result.skill&&get.info(result.skill).direct){ + _status.noclearcountdown=true; + } + if(event.logSkill){ + if(typeof event.logSkill=='string'){ + this.logSkill(event.logSkill); + } + else if(Array.isArray(event.logSkill)){ + this.logSkill.apply(this,event.logSkill); + } + } + if(result.card||!result.skill){ + this.useCard(result.card,result.cards,result.targets,result.skill); + } + else if(result.skill){ + this.useSkill(result.skill,result.cards,result.targets); + } + }, useCard:function(){ var next=game.createEvent('useCard'); next.player=this; @@ -7516,9 +7545,9 @@ game.addVideo('directgain',this,get.cardsInfo(cards)); this.update(); } - this.send(function(cards){ - game.me.directgain(cards); - },cards); + game.broadcast(function(player,cards){ + player.directgain(cards); + },this,cards); return this; }, gain:function(){ @@ -7828,25 +7857,43 @@ skip:function(name){ this.skipList.add(name); }, - wait:function(){ + wait:function(callback){ if(lib.node){ - lib.node.torespond[this.playerid]='_noname_waiting'; + if(typeof callback=='function'){ + callback._noname_waiting=true; + lib.node.torespond[this.playerid]=callback; + } + else{ + lib.node.torespond[this.playerid]='_noname_waiting'; + } } }, unwait:function(result){ if(!lib.node.torespond.hasOwnProperty(this.playerid)){ return; } + var noresume=false; + var proceed=null; + if(typeof lib.node.torespond[this.playerid]=='function'&&lib.node.torespond[this.playerid]._noname_waiting){ + proceed=lib.node.torespond[this.playerid](result,this); + if(proceed===false){ + noresume=true; + } + } lib.node.torespond[this.playerid]=result; for(var i in lib.node.torespond){ if(lib.node.torespond[i]=='_noname_waiting'){ return; } + else if(lib.node.torespond[i]&&lib.node.torespond[i]._noname_waiting){ + return; + } } _status.event.result=result; _status.event.resultOL=lib.node.torespond; lib.node.torespond={}; - if(_status.paused) game.resume(); + if(typeof proceed=='function') proceed(); + else if(_status.paused&&!noresume) game.resume(); }, logSkill:function(name,targets,nature){ if(get.itemtype(targets)=='player') targets=[targets]; @@ -8404,6 +8451,26 @@ } return false; }, + hasWuxie:function(){ + if(this.num('h','wuxie')) return true; + var skills=this.get('s',true).concat(lib.skill.global); + game.expandSkills(skills); + for(var i=0;i.player.connect[data-position='0']{left:calc(200% / 7 - 1200px / 7);top:calc(100% / 3 - 400px / 3 + 12px);} -#window>.player.connect[data-position='1']{left:calc(300% / 7 - 750px / 7);top:calc(100% / 3 - 400px / 3 + 12px);} -#window>.player.connect[data-position='2']{left:calc(400% / 7 - 300px / 7);top:calc(100% / 3 - 400px / 3 + 12px);} -#window>.player.connect[data-position='3']{left:calc(500% / 7 + 150px / 7);top:calc(100% / 3 - 400px / 3 + 12px);} -#window>.player.connect[data-position='4']{left:calc(200% / 7 - 1200px / 7);top:calc(150% / 3 - 20px + 9px);} -#window>.player.connect[data-position='5']{left:calc(300% / 7 - 750px / 7);top:calc(150% / 3 - 20px + 9px);} -#window>.player.connect[data-position='6']{left:calc(400% / 7 - 300px / 7);top:calc(150% / 3 - 20px + 9px);} -#window>.player.connect[data-position='7']{left:calc(500% / 7 + 150px / 7);top:calc(150% / 3 - 20px + 9px);} +#window>.player.connect[data-position='0']{left:calc(200% / 7 - 1200px / 7);top:calc(300% / 7 - 160px + 5px);} +#window>.player.connect[data-position='1']{left:calc(300% / 7 - 750px / 7);top:calc(300% / 7 - 160px + 5px);} +#window>.player.connect[data-position='2']{left:calc(400% / 7 - 300px / 7);top:calc(300% / 7 - 160px + 5px);} +#window>.player.connect[data-position='3']{left:calc(500% / 7 + 150px / 7);top:calc(300% / 7 - 160px + 5px);} +#window>.player.connect[data-position='4']{left:calc(200% / 7 - 1200px / 7);top:calc(400% / 7 - 40px + 5px);} +#window>.player.connect[data-position='5']{left:calc(300% / 7 - 750px / 7);top:calc(400% / 7 - 40px + 5px);} +#window>.player.connect[data-position='6']{left:calc(400% / 7 - 300px / 7);top:calc(400% / 7 - 40px + 5px);} +#window>.player.connect[data-position='7']{left:calc(500% / 7 + 150px / 7);top:calc(400% / 7 - 40px + 5px);} diff --git a/mode/connect.js b/mode/connect.js new file mode 100644 index 000000000..be723598f --- /dev/null +++ b/mode/connect.js @@ -0,0 +1,23 @@ +'use strict'; +mode.connect={ + start:function(){ + 'step 0' + if(lib.config.reconnect_info){ + var info=lib.config.reconnect_info; + game.onlineID=info[1]; + game.connect(info[0]); + game.saveConfig('reconnect_info'); + game.pause(); + } + 'step 1' + delete game.onlineID; + for(var i in lib.element.event){ + event.parent[i]=lib.element.event[i]; + } + event.parent.custom={ + add:{}, + replace:{} + }; + game.connect('localhost'); + } +}; diff --git a/mode/identity.js b/mode/identity.js index 1310af126..a004300a4 100755 --- a/mode/identity.js +++ b/mode/identity.js @@ -19,9 +19,14 @@ mode.identity={ else{ lib.configOL.number=lib.configOL.player_number; } - lib.configOL.characterPack=['standard','wind']; + lib.configOL.characterPack=['standard']; lib.configOL.cardPack=['standard']; lib.configOL.mode='identity'; + for(var i=0;i.equips>.equip5 { + border-radius: 4px; +} diff --git a/theme/style/cardback/image/new.png b/theme/style/cardback/image/new.png new file mode 100644 index 000000000..503f97278 Binary files /dev/null and b/theme/style/cardback/image/new.png differ diff --git a/theme/style/cardback/image/new2.png b/theme/style/cardback/image/new2.png new file mode 100644 index 000000000..a872577c9 Binary files /dev/null and b/theme/style/cardback/image/new2.png differ diff --git a/theme/style/cardback/new.css b/theme/style/cardback/new.css new file mode 100644 index 000000000..20dcb9f38 --- /dev/null +++ b/theme/style/cardback/new.css @@ -0,0 +1,8 @@ +.card:empty,.card.infohidden{ + background: url('image/new.png'); + background-size: cover; +} +.card.infohidden:not(.infoflip){ + background: url('image/new2.png'); + background-size: cover; +}