diff --git a/card/mingzhong.js b/card/mingzhong.js index ef0f6bb18..41206d7a0 100644 --- a/card/mingzhong.js +++ b/card/mingzhong.js @@ -53,6 +53,9 @@ card.mingzhong={ order:2.5, value:[4,1], useful:1, + wuxie:function(){ + return 0; + }, result:{ target:function(player,target){ var ok=false; diff --git a/card/standard.js b/card/standard.js index dc1072d22..2c31bf189 100755 --- a/card/standard.js +++ b/card/standard.js @@ -77,16 +77,18 @@ card.standard={ } else{ var next=target.chooseToRespond({name:'shan'}); - next.ai=function(){ + next.set('ai',function(){ + var target=_status.event.player; + var evt=_status.event.getParent(); var sks=target.get('s'); if(sks.contains('leiji')|| sks.contains('diyleiji')|| sks.contains('lingbo')){ return 1; } - if(ai.get.damageEffect(target,player,target,card.nature)>=0) return -1; + if(ai.get.damageEffect(target,evt.player,target,evt.card.nature)>=0) return -1; return 1; - }; + }); next.autochoose=lib.filter.autoRespondShan; } "step 1" @@ -605,12 +607,13 @@ card.standard={ content:function(){ "step 0" var next=target.chooseToRespond({name:'sha'}); - next.ai=function(card){ - if(ai.get.damageEffect(target,player,target)>=0) return 0; - if(player.get('s').contains('xinwuyan')) return 0; - if(target.get('s').contains('xinwuyan')) return 0; + next.set('ai',function(card){ + var evt=_status.event.getParent(); + if(ai.get.damageEffect(evt.target,evt.player,evt.target)>=0) return 0; + if(evt.player.get('s').contains('xinwuyan')) return 0; + if(evt.target.get('s').contains('xinwuyan')) return 0; return 1; - }; + }); next.autochoose=lib.filter.autoRespondSha; "step 1" if(result.bool==false){ @@ -664,12 +667,13 @@ card.standard={ content:function(){ "step 0" var next=target.chooseToRespond({name:'shan'}); - next.ai=function(card){ - if(ai.get.damageEffect(target,player,target)>=0) return 0; - if(player.get('s').contains('xinwuyan')) return 0; - if(target.get('s').contains('xinwuyan')) return 0; + next.set('ai',function(card){ + var evt=_status.event.getParent(); + if(ai.get.damageEffect(evt.target,evt.player,evt.target)>=0) return 0; + if(evt.player.get('s').contains('xinwuyan')) return 0; + if(evt.target.get('s').contains('xinwuyan')) return 0; return 1; - }; + }); next.autochoose=lib.filter.autoRespondShan; "step 1" if(result.bool==false){ @@ -1196,9 +1200,10 @@ card.standard={ }, content:function(){ "step 0" - trigger.target.chooseToDiscard().ai=function(card){ - return -ai.get.attitude(trigger.target,player)-ai.get.value(card); - }; + trigger.target.chooseToDiscard().set('ai',function(card){ + var trigger=_status.event.getParent()._trigger; + return -ai.get.attitude(trigger.target,trigger.player)-ai.get.value(card); + }); "step 1" if(result.bool==false) player.draw(); } @@ -1265,21 +1270,21 @@ card.standard={ content:function(){ "step 0" var next=player.chooseToDiscard('是否发动贯石斧?',2,'he',function(card){ - return player.get('e',{subtype:'equip1'}).contains(card)==false; + return _status.event.player.get('e',{subtype:'equip1'}).contains(card)==false; }); next.logSkill='guanshi_skill'; - next.ai= - function(card){ - if(ai.get.attitude(player,trigger.target)<0){ - if(player.skills.contains('jiu')|| - player.skills.contains('tianxianjiu')|| - trigger.target.hp==1){ + next.set('ai',function(card){ + var evt=_status.event.getParent(); + if(ai.get.attitude(evt.player,evt._trigger.target)<0){ + if(evt.player.skills.contains('jiu')|| + evt.player.skills.contains('tianxianjiu')|| + evt._trigger.target.hp==1){ return 8-ai.get.value(card) } return 5-ai.get.value(card) } return -1; - }; + }); "step 1" if(result.bool){ trigger.untrigger(); @@ -1312,17 +1317,17 @@ card.standard={ content:function(){ "step 0" var att=(ai.get.attitude(player,trigger.target)<=0); - player.chooseButton(ui.create.dialog('选择要弃置的马', - trigger.target.get('e',{subtype:['equip3','equip4']}))).ai=function(button){ - if(att){ - return ai.get.buttonValue(button); - } + var next=player.chooseButton(); + next.set('att',att); + next.set('createDialog',['选择要弃置的马',trigger.target.get('e',{subtype:['equip3','equip4']})]); + next.set('ai',function(button){ + if(_status.event.att) return ai.get.buttonValue(button); return 0; - }; + }); "step 1" if(result.bool){ player.logSkill('qilin_skill'); - trigger.target.discard(result.buttons[0].link); + trigger.target.discard(result.links[0]); } } }, @@ -1399,6 +1404,7 @@ card.standard={ var id=get.id(); event.id=id; var send=function(state,isJudge,card,source,target,targets,id){ + state=state?1:-1; var str=''; if(isJudge){ str+=get.translation(source)+'的'; @@ -1432,7 +1438,7 @@ card.standard={ return 0; } } - var eff=ai.get.effect(source,card,source,_status.event.player); + var eff=ai.get.effect(source,card,source,source); if(eff>=0) return 0; return state*ai.get.attitude(_status.event.player,source); } @@ -1466,20 +1472,44 @@ card.standard={ } }; var aix=function(player){ - var info=get.info(event.card); - if(info.ai&&info.ai.wuxie){ - var aiii=info.ai.wuxie(event.target,event.card,event.source,player,event.state); - if(typeof aiii=='number') return aiii; - } - if(info.multitarget&&targets){ - var eff=0; - for(var i=0;i=0) return 0; + return state*ai.get.attitude(player,source); + } + else{ + var info=get.info(card); + if(info.ai&&info.ai.wuxie){ + var aiii=info.ai.wuxie(target,card,source,player,state); + if(typeof aiii=='number') return aiii; + } + if(info.multitarget&&targets){ + var eff=0; + for(var i=0;iget.number(event.card2)){ event.result.bool=true; - setTimeout(function(){ - event.dialog=ui.create.dialog(get.translation(player.name)+'拼点成功'); + var str=get.translation(player.name)+'拼点成功'; + game.broadcast(function(str,id){ + var dialog=ui.create.dialog(str); + dialog.videoId=id; + dialog.classList.add('center'); + },str,event.dialogid); + event.dialog=ui.create.dialog(str); event.dialog.classList.add('center'); player.popup('胜'); target.popup('负'); @@ -4420,7 +4449,13 @@ if(get.number(event.card1)>get.number(event.card2)){ event.result.tie=true; setTimeout(function(){ - event.dialog=ui.create.dialog(get.translation(player.name)+'拼点失败'); + var str=get.translation(player.name)+'拼点失败'; + game.broadcast(function(str,id){ + var dialog=ui.create.dialog(str); + dialog.videoId=id; + dialog.classList.add('center'); + },str,event.dialogid); + event.dialog=ui.create.dialog(str); event.dialog.classList.add('center'); player.popup('平'); target.popup('平'); @@ -4445,8 +4480,18 @@ event.target.ai.shown+=0.1; } ui.arena.classList.remove('thrownhighlight'); + game.broadcast(function(id){ + var dialog=get.idDialog(id); + if(dialog){ + dialog.close(); + } + ui.arena.classList.remove('thrownhighlight'); + },event.dialogid); game.addVideo('thrownhighlight2'); - if(event.clear!==false) ui.clear(); + if(event.clear!==false){ + ui.clear(); + game.broadcast(ui.clear); + } event.dialog.close(); }, chooseButton:function(){ @@ -4565,8 +4610,16 @@ } } } + else if(event.isOnline()){ + event.send(); + } else{ - if(ai.basic.chooseCard(event.ai)||forced){ + event.result='ai'; + } + "step 1" + if(event.result=='ai'){ + game.check(); + if(ai.basic.chooseCard(event.ai)||forced){ ui.click.ok(); } else if(event.skill){ @@ -4579,14 +4632,14 @@ else{ ui.click.cancel(); } - } - "step 1" + } + "step 2" if(event.dialog) event.dialog.close(); }, chooseTarget:function(){ "step 0" - game.check(); if(event.isMine()){ + game.check(); game.pause(); if(event.prompt!=false){ var str; @@ -4610,15 +4663,22 @@ event.dialog.open(); } } + else if(event.isOnline()){ + event.send(); + } else{ - if(ai.basic.chooseTarget(event.ai)||forced){ + event.result='ai'; + } + "step 1" + if(event.result=='ai'){ + game.check(); + if(ai.basic.chooseTarget(event.ai)||forced){ ui.click.ok(); } else{ ui.click.cancel(); } - } - "step 1" + } if(event.result.bool){ for(var i=0;i=this.maxHp) this.hp=this.maxHp; var hp=this.node.hp; hp.style.transition='none'; - game.broadcast(function(player,hp,maxHp,nh,hujia){ + game.broadcast(function(player,hp,maxHp,hujia){ player.hp=hp; player.maxHp=maxHp; player.hujia=hujia; player.update(); - },this,this.hp,this.maxHp,this.num('h'),this.hujia); + },this,this.hp,this.maxHp,this.hujia); if(!_status.video){ if(this.hujia){ this.markSkill('ghujia'); @@ -6909,6 +7048,7 @@ } } next.content=lib.element.playerproto.chooseToRespond; + next._args=Array.from(arguments); return next; }, chooseToDiscard:function(){ @@ -6951,6 +7091,7 @@ return get.select(this.selectCard)[0]>=this.player.num(this.position||'h'); } next.content=lib.element.playerproto.chooseToDiscard; + next._args=Array.from(arguments); return next; }, chooseToCompare:function(target,check){ @@ -6977,6 +7118,7 @@ } } next.content=lib.element.playerproto.chooseToCompare; + next._args=Array.from(arguments); return next; }, chooseCardButton:function(){ @@ -7021,6 +7163,7 @@ if(next.selectButton==undefined) next.selectButton=[1,1]; if(next.ai==undefined) next.ai=function(){return 1}; next.content=lib.element.playerproto.chooseButton; + next._args=Array.from(arguments); return next; }, chooseButtonOL:function(list,callback,ai){ @@ -7029,6 +7172,7 @@ next.content=lib.element.playerproto.chooseButtonOL; next.ai=ai; next.callback=callback; + next._args=Array.from(arguments); return next; }, chooseCard:function(){ @@ -7062,6 +7206,7 @@ if(next.selectCard==undefined) next.selectCard=[1,1]; if(next.ai==undefined) next.ai=ai.get.unuseful2; next.content=lib.element.playerproto.chooseCard; + next._args=Array.from(arguments); return next; }, chooseTarget:function(){ @@ -7093,6 +7238,7 @@ if(next.selectTarget==undefined) next.selectTarget=[1,1]; if(next.ai==undefined) next.ai=ai.get.attitude2; next.content=lib.element.playerproto.chooseTarget; + next._args=Array.from(arguments); return next; }, chooseCardTarget:function(choose){ @@ -7124,6 +7270,7 @@ if(next.ai1==undefined) next.ai1=ai.get.unuseful2; if(next.ai2==undefined) next.ai2=ai.get.attitude2; next.content=lib.element.playerproto.chooseCardTarget; + next._args=Array.from(arguments); return next; }, chooseControl:function(){ @@ -7149,6 +7296,7 @@ next.player=this; if(next.choice==undefined) next.choice=0; next.content=lib.element.playerproto.chooseControl; + next._args=Array.from(arguments); return next; }, chooseBool:function(){ @@ -7170,6 +7318,7 @@ } next.player=this; next.content=lib.element.playerproto.chooseBool; + next._args=Array.from(arguments); return next; }, choosePlayerCard:function(){ @@ -7214,6 +7363,7 @@ return val; }; next.content=lib.element.playerproto.choosePlayerCard; + next._args=Array.from(arguments); return next; }, discardPlayerCard:function(){ @@ -7258,6 +7408,7 @@ return val; }; next.content=lib.element.playerproto.discardPlayerCard; + next._args=Array.from(arguments); return next; }, gainPlayerCard:function(){ @@ -7302,12 +7453,15 @@ return val; }; next.content=lib.element.playerproto.gainPlayerCard; + next._args=Array.from(arguments); return next; }, showHandcards:function(){ var next=game.createEvent('showHandcards'); next.player=this; next.content=lib.element.playerproto.showHandcards; + next._args=Array.from(arguments); + return next; }, showCards:function(cards,str){ var next=game.createEvent('showCards'); @@ -7317,12 +7471,15 @@ else if(get.itemtype(cards)=='cards') next.cards=cards; else _status.event.next.remove(next); next.content=lib.element.playerproto.showCards; + next._args=Array.from(arguments); }, viewHandcards:function(target){ var next=game.createEvent('viewHandcards'); next.player=this; next.target=target; next.content=lib.element.playerproto.viewHandcards; + next._args=Array.from(arguments); + return next; }, useResult:function(result,event){ event=event||_status.event; @@ -9833,10 +9990,11 @@ skills:lib.playerOL[i].skills, hiddenSkills:lib.playerOL[i].hiddenSkills, additionalSkills:lib.playerOL[i].additionalSkills, + tempSkills:lib.playerOL[i].tempSkills, storage:lib.playerOL[i].storage, } } - this.player.send(function(name,args,set,event,trigger,stat,skills){ + this.player.send(function(name,args,set,event,stat,skills){ for(var i in skills){ if(i=='global'){ lib.skill.global=skills[i]; @@ -9853,11 +10011,9 @@ next.set(set[i][0],set[i][1]); } next._modparent=event; - next._trigger=trigger; game.resume(); },this.name,this._args||[],this._set, get.stringifiedResult(this.parent,3), - get.stringifiedResult(this._trigger,2), this.player.getStat(),skills); this.player.wait(); game.pause(); @@ -10239,6 +10395,10 @@ }, ws:{ onopen:function(){ + if(_status.connectCallback){ + _status.connectCallback(true); + delete _status.connectCallback; + } game.send('init',lib.versionOL,{ avatar:lib.config.connect_avatar, nickname:lib.config.connect_nickname @@ -10267,12 +10427,22 @@ lib.message.client[message.shift()].apply(null,message); }, onerror:function(e){ - alert('连接失败'); + if(_status.connectCallback){ + _status.connectCallback(false); + delete _status.connectCallback; + } + else{ + alert('连接失败'); + } }, onclose:function(){ + if(_status.connectCallback){ + _status.connectCallback(false); + delete _status.connectCallback; + } game.saveConfig('reconnect_info'); if(game.online){ - alert('连接已断开'); + game.saveConfig('reconnect_more',game.ip); game.reload(); } game.online=false; @@ -10831,6 +11001,7 @@ init:function(id,config,ip){ game.online=true; game.onlineID=id; + game.ip=ip; game.saveConfig('reconnect_info',[_status.ip,id]); _status.connectMode=true; lib.configOL=config; @@ -10839,7 +11010,17 @@ game.clearArena(); game.finishCards(); ui.create.connectPlayers(ip); + ui.pause.hide(); ui.auto.hide(); + ui.cardPileButton.style.display='none'; + if(ui.ipnode){ + ui.ipnode.delete(); + delete ui.ipnode; + } + if(ui.iptext){ + ui.iptext.delete(); + delete ui.iptext; + } var proceed=function(){ game.loadModeAsync(config.mode,function(mode){ for(var i in mode.ai){ @@ -10857,8 +11038,8 @@ lib.translate[i]=mode.translate[i]; } if(mode.game){ - game.getIdentityList=mode.game.getIdentityList; - game.updateState=mode.game.updateState; + game.getIdentityList=lib.init.eval(mode.game.getIdentityList); + game.updateState=lib.init.eval(mode.game.updateState); } _status.event={ finished:true, @@ -10906,8 +11087,8 @@ lib.translate[i]=mode.translate[i]; } if(mode.game){ - game.getIdentityList=mode.game.getIdentityList; - game.updateState=mode.game.updateState; + game.getIdentityList=lib.init.eval(mode.game.getIdentityList); + game.updateState=lib.init.eval(mode.game.updateState); } state=get.parsedResult(state); game.players=[]; @@ -10984,7 +11165,11 @@ case 'version':alert('加入失败:版本不匹配');break; case 'gaming':alert('加入失败:游戏已开始');break; case 'number':alert('加入失败:房间已满');break; - case 'offline':if(_status.paused) game.resume();break; + case 'offline': + if(_status.paused&&_status.event.name=='game'){ + setTimeout(game.resume,500); + } + break; } game.ws.close(); }, @@ -11008,7 +11193,15 @@ ui.connectStartButton.delete(); delete ui.connectStartButton; } + if(ui.connectStartBar){ + ui.connectStartBar.delete(); + delete ui.connectStartBar; + } ui.auto.show(); + ui.pause.show(); + if(lib.config.show_cardpile){ + ui.cardPileButton.style.display=''; + } }, updateWaiting:function(map){ for(var i=0;i