Merge branch 'libccy:PR-Branch' into PR-Branch
This commit is contained in:
commit
f3bfa1061f
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -208,12 +208,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(name=='sha'&&get.type(trigger.card.name)!='trick') continue;
|
||||
if(!player.canUse(get.autoViewAs({name:name},[]),target)) continue;
|
||||
list.push([get.translation(get.type(name)),'',name]);
|
||||
if(name=='sha'){
|
||||
for(var nature of lib.inpile_nature){
|
||||
if(!player.canUse(get.autoViewAs({name:name,nature:nature},[]),target)) continue;
|
||||
list.push([get.translation(get.type(name)),'',name,nature]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!list.length) event.goto(3);
|
||||
else{
|
||||
|
|
|
@ -20,7 +20,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sp_fuhuanghou:['female','qun',3,['spcangni','spmixin']],
|
||||
sp_fuwan:['male','qun',3,['spfengyin','spchizhong']],
|
||||
old_lingju:['female','qun',3,['jieyuan','fenxin_old']],
|
||||
sp_mushun:['male','qun',4,['dcmoukui']],
|
||||
sp_mushun:['male','qun',4,['moukui']],
|
||||
},
|
||||
characterFilter:{
|
||||
old_lingju:function(mode){
|
||||
|
@ -598,32 +598,38 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
},
|
||||
},
|
||||
content_old:function(){
|
||||
'step 0'
|
||||
if(lib.skill.dcshixian.filterx(trigger)){
|
||||
player.chooseControl('cancel2').set('choiceList',[
|
||||
'摸一张牌',
|
||||
'令'+get.translation(trigger.card)+'额外结算一次',
|
||||
]).set('prompt',get.prompt('dcsitian'));
|
||||
}
|
||||
else{
|
||||
player.chooseBool('是否发动【诗仙】摸一张牌?').set('frequentSkill','dcshixian');
|
||||
}
|
||||
'step 1'
|
||||
if(result.control){
|
||||
if(result.index==0){
|
||||
player.logSkill('dcshixian');
|
||||
player.draw();
|
||||
}
|
||||
else if(result.index==1){
|
||||
trigger.effectCount++;
|
||||
}
|
||||
}
|
||||
else if(result.bool){
|
||||
player.logSkill('dcshixian');
|
||||
player.draw();
|
||||
init:function(player){
|
||||
player.addSkill('dcshixian_yayun');
|
||||
var history=player.getAllHistory('useCard');
|
||||
if(history.length){
|
||||
player.addGaintag(player.getCards('h',card=>{
|
||||
return get.is.yayun(get.translation(card.name),get.translation(history[history.length-1].card.name));
|
||||
}),'dcshixian_yayun');
|
||||
}
|
||||
},
|
||||
onremove:function(player){
|
||||
player.removeSkill('dcshixian_yayun');
|
||||
player.removeGaintag('dcshixian_yayun');
|
||||
},
|
||||
subSkill:{
|
||||
yayun:{
|
||||
charlotte:true,
|
||||
trigger:{player:'useCard1'},
|
||||
filter:function(event,player){
|
||||
return player.countCards('h');
|
||||
},
|
||||
direct:true,
|
||||
priority:11+45+14+19+19+810,
|
||||
content:function(){
|
||||
'step 0'
|
||||
player.removeGaintag('dcshixian_yayun');
|
||||
'step 1'
|
||||
player.addGaintag(player.getCards('h',card=>{
|
||||
return get.is.yayun(get.translation(card.name),get.translation(trigger.card.name));
|
||||
}),'dcshixian_yayun');
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
//龙王
|
||||
dclonggong:{
|
||||
|
@ -1281,9 +1287,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
direct:true,
|
||||
content:function(){
|
||||
'step 0'
|
||||
player.chooseDrawRecover('###'+get.prompt('spcangni')+'###摸两张牌或回复1点体力,然后将武将牌翻面',2).set('ai',function(){
|
||||
return 'cancel2';
|
||||
}).logSkill='spcangni';
|
||||
player.chooseDrawRecover('###'+get.prompt('spcangni')+'###摸两张牌或回复1点体力,然后将武将牌翻面',2).logSkill='spcangni';
|
||||
'step 1'
|
||||
if(result.control!='cancel2') player.turnOver();
|
||||
},
|
||||
|
@ -1566,6 +1570,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dclbjiuxian:'酒仙',
|
||||
dclbjiuxian_info:'①你可以将额定目标数大于1的锦囊牌当做【酒】使用。②你使用【酒】无次数限制。',
|
||||
dcshixian:'诗仙',
|
||||
dcshixian_yayun:'押韵',
|
||||
dcshixian_info:'当你使用一张牌时,若此牌的牌名与你于本局游戏使用的上一张牌的牌名押韵,则你可以摸一张牌,并令此牌额外结算一次。',
|
||||
taoshen:'涛神',
|
||||
dcnutao:'怒涛',
|
||||
|
|
|
@ -41,7 +41,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
shen_taishici:['male','shen',4,['dulie','tspowei'],['wu']],
|
||||
shen_guojia:['male','shen',3,['reshuishi','stianyi','resghuishi'],['wei']],
|
||||
shen_diaochan:['female','shen',3,['meihun','huoxin'],['qun']],
|
||||
shen_guanyu:['male','shen',5,['new_wuhun','wushen'],['shu']],
|
||||
shen_guanyu:['male','shen',5,['wushen','new_wuhun'],['shu']],
|
||||
shen_zhaoyun:['male','shen',2,['xinjuejing','relonghun'],['shu']],
|
||||
shen_zhugeliang:['male','shen',3,['qixing','kuangfeng','dawu'],['shu']],
|
||||
shen_lvmeng:['male','shen',3,['shelie','gongxin'],['wu']],
|
||||
|
@ -4414,98 +4414,75 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
wuhun2:{audio:2},
|
||||
wuhun21:{
|
||||
audio:true,
|
||||
skillAnimation:true,
|
||||
animationColor:'soil',
|
||||
},
|
||||
wuhun22:{
|
||||
audio:true,
|
||||
skillAnimation:true,
|
||||
animationColor:'soil',
|
||||
},
|
||||
wuhun23:{
|
||||
audio:true,
|
||||
skillAnimation:true,
|
||||
animationColor:'soil',
|
||||
},
|
||||
"new_wuhun":{
|
||||
audio:"wuhun2",
|
||||
group:["new_wuhun_mark","new_wuhun_die","wuhun22","wuhun23"],
|
||||
trigger:{
|
||||
player:"damageEnd",
|
||||
new_wuhun:{
|
||||
audio:'wuhun2',
|
||||
trigger:{player:'damageEnd'},
|
||||
filter:function(event,player){
|
||||
return event.source&&event.source.isIn();
|
||||
},
|
||||
forced:true,
|
||||
filter:function (event,player){
|
||||
return event.source!=undefined;
|
||||
logTarget:'source',
|
||||
content:function(){
|
||||
trigger.source.addMark('new_wuhun',trigger.num);
|
||||
},
|
||||
content:function (){
|
||||
trigger.source.addMark('new_wuhun_mark',trigger.num);
|
||||
group:'new_wuhun_die',
|
||||
ai:{
|
||||
threaten:0.01,
|
||||
notemp:true,
|
||||
},
|
||||
marktext:'魇',
|
||||
intro:{
|
||||
name:'梦魇',
|
||||
content:'mark',
|
||||
onunmark:true,
|
||||
},
|
||||
subSkill:{
|
||||
die:{
|
||||
//audio:"wuhun2",
|
||||
skillAnimation:true,
|
||||
animationColor:'soil',
|
||||
trigger:{
|
||||
player:"die",
|
||||
},
|
||||
forced:true,
|
||||
forceDie:true,
|
||||
direct:true,
|
||||
filter:function (event,player){
|
||||
audio:'wuhun2',
|
||||
trigger:{player:'die'},
|
||||
filter:function(event,player){
|
||||
return game.hasPlayer(function(current){
|
||||
return current!=player&¤t.hasMark('new_wuhun_mark');
|
||||
return current!=player&¤t.hasMark('new_wuhun');
|
||||
});
|
||||
},
|
||||
content:function (){
|
||||
"step 0"
|
||||
forced:true,
|
||||
direct:true,
|
||||
forceDie:true,
|
||||
skillAnimation:true,
|
||||
animationColor:'soil',
|
||||
content:function(){
|
||||
'step 0'
|
||||
var num=0;
|
||||
for(var i=0;i<game.players.length;i++){
|
||||
var current=game.players[i];
|
||||
if(current!=player&¤t.countMark('new_wuhun_mark')>num){
|
||||
num=current.countMark('new_wuhun_mark');
|
||||
if(current!=player&¤t.countMark('new_wuhun')>num){
|
||||
num=current.countMark('new_wuhun');
|
||||
}
|
||||
}
|
||||
player.chooseTarget(true,'请选择【武魂】的目标',function(card,player,target){
|
||||
return target!=player&&target.countMark('new_wuhun_mark')==_status.event.num;
|
||||
player.chooseTarget(true,'请选择【武魂】的目标','令其进行判定,若判定结果不为【桃】或【桃园结义】,则其死亡',function(card,player,target){
|
||||
return target!=player&&target.countMark('new_wuhun')==_status.event.num;
|
||||
}).set('ai',function(target){
|
||||
return -get.attitude(_status.event.player,target);
|
||||
}).set('forceDie',true).set('num',num);
|
||||
"step 1"
|
||||
if(result.bool&&result.targets&&result.targets.length){
|
||||
'step 1'
|
||||
if(result.bool){
|
||||
var target=result.targets[0];
|
||||
event.target=target;
|
||||
player.logSkill(Math.random()<0.5?'wuhun21':'wuhun22',target);
|
||||
player.logSkill('new_wuhun_die',target);
|
||||
player.line(target,{color:[255, 255, 0]});
|
||||
game.delay(2);
|
||||
}
|
||||
"step 2"
|
||||
'step 2'
|
||||
target.judge(function(card){
|
||||
if(['tao','taoyuan'].contains(card.name)) return 10;
|
||||
return -10;
|
||||
}).judge2=function(result){
|
||||
return result.bool==false?true:false;
|
||||
};
|
||||
"step 3"
|
||||
if(!result.bool){
|
||||
lib.element.Player.prototype.die.apply(target,[]);
|
||||
}
|
||||
'step 3'
|
||||
if(!result.bool) target.die();
|
||||
},
|
||||
sub:true,
|
||||
},
|
||||
mark:{
|
||||
marktext:"魇",
|
||||
intro:{
|
||||
name:"梦魇",
|
||||
content:"mark",
|
||||
},
|
||||
sub:true,
|
||||
},
|
||||
},
|
||||
ai:{
|
||||
threaten:0.01,
|
||||
notemp:true,
|
||||
},
|
||||
},
|
||||
"new_guixin":{
|
||||
|
@ -4989,7 +4966,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
maixie:true,
|
||||
maixie_hp:true,
|
||||
combo:'sbaiyin',
|
||||
/*effect:{
|
||||
effect:{
|
||||
target:function(card,player,target){
|
||||
if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
|
||||
if(get.tag(card,'damage')){
|
||||
|
@ -5013,7 +4990,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return 'zeroplayertarget';
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
},
|
||||
renjie2:{
|
||||
|
@ -5030,7 +5007,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
content:function(){
|
||||
player.addMark('renjie',trigger.getl(player).cards2.length);
|
||||
}
|
||||
},
|
||||
},
|
||||
sbaiyin:{
|
||||
skillAnimation:'epic',
|
||||
|
@ -5048,11 +5025,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.addSkill('jilue');
|
||||
player.awakenSkill('sbaiyin');
|
||||
},
|
||||
derivation:'jilue',
|
||||
derivation:['jilue','reguicai','fangzhu','rejizhi','rezhiheng','rewansha'],
|
||||
},
|
||||
jilue:{
|
||||
unique:true,
|
||||
group:['jilue_guicai','jilue_fangzhu','jilue_wansha','jilue_zhiheng','jilue_jizhi','jilue_jizhi_clear']
|
||||
group:['jilue_guicai','jilue_fangzhu','jilue_wansha','jilue_zhiheng','jilue_jizhi'],
|
||||
},
|
||||
jilue_guicai:{
|
||||
audio:1,
|
||||
|
@ -5253,7 +5230,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
skillTagFilter:function(player,tag,arg){
|
||||
if(tag==='nokeep') return player.isPhaseUsing()&&!player.getStat().skill.jilue_zhiheng&&player.hasCard((card)=>get.name(card)!=='tao','h');
|
||||
},
|
||||
threaten:1.5
|
||||
},
|
||||
},
|
||||
jilue_jizhi:{
|
||||
|
@ -5262,9 +5238,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
filter:function(event,player){
|
||||
return (get.type(event.card,'trick')=='trick'&&event.card.isCard&&player.hasMark('renjie'));
|
||||
},
|
||||
init:function(player){
|
||||
player.storage.jilue_jizhi=0;
|
||||
},
|
||||
content:function(){
|
||||
'step 0'
|
||||
player.removeMark('renjie',1);
|
||||
|
@ -5279,33 +5252,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
'step 2'
|
||||
if(result.bool){
|
||||
player.discard(event.card);
|
||||
player.storage.jilue_jizhi++;
|
||||
if(_status.currentPhase==player){
|
||||
player.markSkill('jilue_jizhi');
|
||||
}
|
||||
player.addTempSkill('jilue_jizhi_clear');
|
||||
player.addMark('jilue_jizhi_clear',1,false);
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
threaten:1.4
|
||||
},
|
||||
mod:{
|
||||
maxHandcard:function(player,num){
|
||||
return num+player.storage.jilue_jizhi;
|
||||
}
|
||||
},
|
||||
intro:{
|
||||
content:'本回合手牌上限+#',
|
||||
},
|
||||
subSkill:{
|
||||
clear:{
|
||||
trigger:{global:'phaseAfter'},
|
||||
silent:true,
|
||||
content:function(){
|
||||
player.storage.jilue_jizhi=0;
|
||||
player.unmarkSkill('jilue_jizhi');
|
||||
}
|
||||
}
|
||||
}
|
||||
charlotte:true,
|
||||
onremove:true,
|
||||
mod:{
|
||||
maxHandcard:function(player,num){
|
||||
return num+player.countMark('jilue_jizhi_clear');
|
||||
},
|
||||
},
|
||||
intro:{content:'手牌上限+#'},
|
||||
},
|
||||
},
|
||||
},
|
||||
wushen:{
|
||||
mod:{
|
||||
|
@ -5350,161 +5312,39 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
},
|
||||
wuhun:{
|
||||
trigger:{
|
||||
player:"damageEnd",
|
||||
},
|
||||
//alter:true,
|
||||
filter:function (event,player){
|
||||
if(event.source==undefined) return false;
|
||||
if(!get.is.altered('wuhun')) return false
|
||||
return true;
|
||||
},
|
||||
forced:true,
|
||||
content:function (){
|
||||
if(!trigger.source.storage.wuhun_mark){
|
||||
trigger.source.storage.wuhun_mark=0;
|
||||
}
|
||||
trigger.source.storage.wuhun_mark+=trigger.num;
|
||||
trigger.source.syncStorage('wuhun_mark');
|
||||
trigger.source.markSkill('wuhun_mark');
|
||||
},
|
||||
global:["wuhun_mark"],
|
||||
subSkill:{
|
||||
mark:{
|
||||
marktext:"魇",
|
||||
intro:{
|
||||
content:"mark",
|
||||
},
|
||||
sub:true,
|
||||
},
|
||||
},
|
||||
group:["wuhun2","wuhun4","wuhun5"],
|
||||
},
|
||||
wuhun2:{
|
||||
trigger:{
|
||||
player:'dieBegin',
|
||||
},
|
||||
forced:true,
|
||||
popup:false,
|
||||
filter:function (event,player){
|
||||
for(var i=0;i<game.players.length;i++){
|
||||
if(game.players[i].storage.wuhun_mark) return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
content:function (){
|
||||
"step 0"
|
||||
player.chooseTarget(true,get.prompt('wuhun2'),function(card,player,target){
|
||||
if(player==target) return false;
|
||||
if(!target.storage.wuhun_mark) return false;
|
||||
for(var i=0;i<game.players.length;i++){
|
||||
if(game.players[i].storage.wuhun_mark>target.storage.wuhun_mark){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}).set('ai',function(target){
|
||||
return -ai.get.attitude(_status.event.player,target);
|
||||
});
|
||||
"step 1"
|
||||
player.line(result.targets[0],'fire');
|
||||
result.targets[0].addSkill('wuhun3')
|
||||
},
|
||||
ai:{
|
||||
threaten:0.5,
|
||||
effect:{
|
||||
target:function (card,player,target,current){
|
||||
if(get.tag(card,'damage')){
|
||||
if(player.hasSkill('jueqing')) return [1,-5];
|
||||
var hasfriend=false;
|
||||
for(var i=0;i<game.players.length;i++){
|
||||
if(game.players[i]!=target&&ai.get.attitude(game.players[i],target)>=0){
|
||||
hasfriend=true;break;
|
||||
}
|
||||
}
|
||||
if(!hasfriend) return;
|
||||
if(player.hp>2&&ai.get.attitude(player,target)<=0) return [0,2];
|
||||
return [1,0,0,-player.hp];
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
wuhun3:{
|
||||
audio:3,
|
||||
trigger:{
|
||||
global:'dieAfter',
|
||||
},
|
||||
forced:true,
|
||||
content:function (){
|
||||
"step 0"
|
||||
player.judge(function(card){
|
||||
if(card.name=='tao'||card.name=='taoyuan') return 2;
|
||||
return -2;
|
||||
})
|
||||
"step 1"
|
||||
if(result.judge==-2){
|
||||
player.die();
|
||||
}
|
||||
player.removeSkill('wuhun3');
|
||||
},
|
||||
},
|
||||
wuhun4:{
|
||||
trigger:{
|
||||
player:'dieAfter',
|
||||
},
|
||||
forced:true,
|
||||
popup:false,
|
||||
content:function (){
|
||||
for(var i=0;i<game.players.length;i++){
|
||||
if(game.players[i].storage.wuhun_mark){
|
||||
game.players[i].storage.wuhun_mark=0;
|
||||
game.players[i].unmarkSkill('wuhun_mark');
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
wuhun5:{
|
||||
trigger:{player:'dieBegin'},
|
||||
forced:true,
|
||||
popup:false,
|
||||
audio:'wuhun2',
|
||||
trigger:{player:'die'},
|
||||
filter:function(event){
|
||||
if(event.source!=player&&event.source!=undefined&&!get.is.altered('wuhun')) return true
|
||||
return false;
|
||||
return event.source&&event.source.isIn();
|
||||
},
|
||||
forced:true,
|
||||
forceDie:true,
|
||||
skillAnimation:true,
|
||||
animationColor:'soil',
|
||||
logTarget:'source',
|
||||
content:function(){
|
||||
trigger.source.addSkill('wuhun6');
|
||||
var num=trigger.source.getHp();
|
||||
if(num>0) trigger.source.loseHp(num);
|
||||
},
|
||||
ai:{
|
||||
threaten:function(player,target){
|
||||
if(target.hp==1) return 0.5;
|
||||
if(target.hp==1){
|
||||
if(player.getHp()<=0) return 100;
|
||||
return 0.2;
|
||||
}
|
||||
return 0.8;
|
||||
},
|
||||
effect:{
|
||||
target:function(card,player,target,current){
|
||||
if(target.hp<=1&&get.tag(card,'damage')){
|
||||
if(player.hasSkillTag('jueqing',false,target)) return [1,-5];
|
||||
if(!target.hasFriend()) return;
|
||||
if(player.hp>2&&get.attitude(player,target)<=0) return [0,2];
|
||||
return [1,0,0,-player.hp];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(player.getHp()<=0) return;
|
||||
if(!target.hasFriend()) return;
|
||||
if(target.hp<=1&&get.tag(card,'damage')) return [1,0,0,-2];
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
wuhun6:{
|
||||
audio:3,
|
||||
trigger:{global:'dieAfter'},
|
||||
forced:true,
|
||||
content:function(){
|
||||
if(player.hp<Infinity){
|
||||
player.loseHp(player.hp);
|
||||
}
|
||||
player.removeSkill('wuhun6');
|
||||
}
|
||||
},
|
||||
guixin:{
|
||||
audio:2,
|
||||
// alter:true,
|
||||
trigger:{player:'damageEnd'},
|
||||
check:function(event,player){
|
||||
if(player.isTurnedOver()||event.num>1) return true;
|
||||
|
@ -5519,59 +5359,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return num>=2;
|
||||
},
|
||||
content:function(){
|
||||
"step 0"
|
||||
var targets=game.filterPlayer();
|
||||
targets.remove(player);
|
||||
targets.sort(lib.sort.seat);
|
||||
event.targets=targets;
|
||||
'step 0'
|
||||
event.count=trigger.num;
|
||||
"step 1"
|
||||
event.num=0;
|
||||
player.line(targets,'green');
|
||||
"step 2"
|
||||
if(num<event.targets.length){
|
||||
if(!get.is.altered('guixin')){
|
||||
if(event.targets[num].countGainableCards(player,'hej')){
|
||||
player.gainPlayerCard(event.targets[num],true,'hej');
|
||||
}
|
||||
}
|
||||
else{
|
||||
var hej=event.targets[num].getCards('hej')
|
||||
if(hej.length){
|
||||
var card=hej.randomGet();
|
||||
player.gain(card,event.targets[num]);
|
||||
if(get.position(card)=='h'){
|
||||
event.targets[num].$giveAuto(card,player);
|
||||
}
|
||||
else{
|
||||
event.targets[num].$give(card,player);
|
||||
}
|
||||
}
|
||||
}
|
||||
event.num++;
|
||||
event.redo();
|
||||
}
|
||||
"step 3"
|
||||
'step 1'
|
||||
var targets=game.filterPlayer(current=>current!=player).sortBySeat();
|
||||
player.line(targets);
|
||||
player.gainMultiple(targets,'hej');
|
||||
'step 2'
|
||||
player.turnOver();
|
||||
"step 4"
|
||||
'step 3'
|
||||
event.count--;
|
||||
if(event.count&&player.hasSkill('guixin')){
|
||||
player.chooseBool(get.prompt2('guixin'));
|
||||
}
|
||||
else{
|
||||
event.finish();
|
||||
}
|
||||
"step 5"
|
||||
if(event.count&&result.bool){
|
||||
event.goto(1);
|
||||
}
|
||||
else event.finish();
|
||||
'step 4'
|
||||
if(event.count&&result.bool) event.goto(1);
|
||||
},
|
||||
ai:{
|
||||
maixie:true,
|
||||
maixie_hp:true,
|
||||
threaten:function(player,target){
|
||||
if(target.hp==1) return 2.5;
|
||||
return 1;
|
||||
return 0.5;
|
||||
},
|
||||
effect:{
|
||||
target:function(card,player,target){
|
||||
|
@ -7510,14 +7320,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
longhun_info:'你可以将同花色的X张牌按下列规则使用或打出:红桃当【桃】,方块当具火焰伤害的【杀】,梅花当【闪】,黑桃当【无懈可击】(X为你当前的体力值且至少为1)。',
|
||||
juejing_info:'锁定技。①摸牌阶段,你令额定摸牌数+X(X为你已损失的体力值)。②你的手牌上限+2。',
|
||||
wushen:'武神',
|
||||
wushen_info:'锁定技,你的红桃手牌均视为【杀】;锁定技,你使用红桃【杀】无距离和次数限制且不可被响应。',
|
||||
wushen_info:'锁定技。①你的红桃手牌均视为【杀】。②你使用红桃【杀】无距离和次数限制且不可被响应。',
|
||||
wuhun:'武魂',
|
||||
wuhun21:'武魂',
|
||||
wuhun22:'武魂',
|
||||
wuhun23:'武魂',
|
||||
wuhun2:'武魂',
|
||||
wuhun3:'武魂',
|
||||
wuhun_info_alter:'锁定技,当你受到1点伤害后,你令伤害来源获得1枚“梦魇”标记;当你死亡时,你令拥有最多“梦魇”标记的一名其他角色判定,若结果不为【桃】或【桃园结义】,则该角色死亡。',
|
||||
wuhun_info:'锁定技,杀死你的角色立即进入濒死状态。',
|
||||
shelie:'涉猎',
|
||||
gongxin:'攻心',
|
||||
|
@ -7577,8 +7381,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
ol_wuqian_info:'出牌阶段,你可以弃置2枚“暴怒”标记并选择一名本回合内未选择过的其他角色,你获得技能〖无双〗并令其防具无效直到回合结束。',
|
||||
ol_shenfen:'神愤',
|
||||
ol_shenfen_info:'出牌阶段限一次,你可以弃置6枚“暴怒”标记并选择所有其他角色,对这些角色各造成1点伤害。然后这些角色先各弃置其装备区里的牌,再各弃置四张手牌。最后你将你的武将牌翻面。',
|
||||
"new_wuhun":"武魂",
|
||||
"new_wuhun_info":"锁定技,当你受到伤害后,伤害来源获得X个“梦魇”标记(X为伤害点数)。锁定技,当你死亡时,你选择一名“梦魇”标记数量最多的其他角色。该角色进行判定:若判定结果不为【桃】或【桃园结义】,则该角色死亡。",
|
||||
new_wuhun:'武魂',
|
||||
new_wuhun_info:'锁定技,当你受到伤害后,伤害来源获得X个“梦魇”标记(X为伤害点数)。锁定技,当你死亡时,你选择一名“梦魇”标记数量最多的其他角色。该角色进行判定:若判定结果不为【桃】或【桃园结义】,则该角色死亡。',
|
||||
"new_guixin":"归心",
|
||||
"new_guixin_info":"当你受到1点伤害后,你可以按照你选择的区域优先度随机获得每名其他角色区域里的一张牌,然后你翻面。",
|
||||
ol_zhangliao:'OL神张辽',
|
||||
|
|
|
@ -4,16 +4,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
name:'huicui',
|
||||
connect:true,
|
||||
character:{
|
||||
dc_sunchen:['male','wu',4,['dczigu','dczuowei'],['unseen']],
|
||||
dc_sunchen:['male','wu',4,['dczigu','dczuowei']],
|
||||
dc_zhangmancheng:['male','qun',4,['dclvecheng','dczhongji']],
|
||||
yue_zhoufei:['female','wu',3,['dclingkong','dcxianshu']],
|
||||
dc_wuban:['male','shu',4,['dcyouzhan'],['clan:陈留吴氏','unseen']],
|
||||
dc_wuban:['male','shu',4,['dcyouzhan'],['clan:陈留吴氏']],
|
||||
yue_caiwenji:['female','qun',3,['dcshuangjia','dcbeifen']],
|
||||
liuchongluojun:['male','qun',3,['dcminze','dcjini']],
|
||||
yuechen:['male','wei',4,['dcporui','dcgonghu']],
|
||||
zhangkai:['male','qun',4,['dcxiangshu']],
|
||||
gaoxiang:['male','shu',4,['dcchiying']],
|
||||
yuanyin:['male','qun',3,['dcmoshou','dcyunjiu'],['unseen']],
|
||||
yuanyin:['male','qun',3,['dcmoshou','dcyunjiu']],
|
||||
dongwan:['female','qun',3,['dcshengdu','dcjieling']],
|
||||
zhangchu:['female','qun',3,['dcjizhong','dcrihui','dcguangshi']],
|
||||
peiyuanshao:['male','qun',4,['dcmoyu']],
|
||||
|
|
|
@ -31,8 +31,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
xin_wuban:['male','shu',4,['xinjintao'],['clan:陈留吴氏','character:wuban']],
|
||||
baoxin:['male','qun',4,['mutao','yimou'],['character:tw_baoxin','die_audio:tw_baoxin']],
|
||||
jiangji:['male','wei',3,['twjichou','jilun'],['character:tw_jiangji','die_audio:tw_jiangji']],
|
||||
liwei:['male','shu',4,['jiaohua'],['character:tw_liwei','die:tw_liwei']],
|
||||
laimin:['male','shu',3,['laishou','luanqun'],['unseen']],
|
||||
liwei:['male','shu',4,['jiaohua'],['die_audio:tw_liwei']],
|
||||
laimin:['male','shu',3,['laishou','luanqun']],
|
||||
yj_zhoubuyi:['male','wei',3,['mbhuiyao','mbquesong']],
|
||||
xin_guozhao:['female','wei',3,['yichong','wufei']],
|
||||
xin_zhangyi:['male','shu',4,['xinwurong','shizhi']],
|
||||
|
@ -4739,7 +4739,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
xingtu:{
|
||||
trigger:{player:'useCard'},
|
||||
filter:function(event,player){
|
||||
var num1=get.number(event.card),num2=player.storage.xingtu;
|
||||
var evt=lib.skill.dcjianying.getLastUsed(player,event);
|
||||
if(!evt||!evt.card) return false;
|
||||
var num1=get.number(event.card),num2=get.number(evt.card);
|
||||
return typeof num1=='number'&&typeof num2=='number'&&num2%num1==0;
|
||||
},
|
||||
forced:true,
|
||||
|
@ -4748,29 +4750,73 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
mod:{
|
||||
cardUsable:function(card,player){
|
||||
var num1=get.number(card),num2=player.storage.xingtu;
|
||||
if(typeof num1=='number'&&typeof num2=='number'&&num1%num2==0) return Infinity;
|
||||
if(typeof card=='object'){
|
||||
var evt=lib.skill.dcjianying.getLastUsed(player);
|
||||
if(!evt||!evt.card) return;
|
||||
var num1=get.number(card),num2=get.number(evt.card);
|
||||
if(typeof num1=='number'&&typeof num2=='number'&&num1%num2==0) return Infinity;
|
||||
}
|
||||
},
|
||||
aiOrder:function(player,card,num){
|
||||
var num1=get.number(card),num2=player.storage.xingtu;
|
||||
if(typeof num1=='number'&&typeof num2=='number'&&num2%num1==0) return num+5;
|
||||
if(typeof card=='object'){
|
||||
var evt=lib.skill.dcjianying.getLastUsed(player);
|
||||
if(!evt||!evt.card) return;
|
||||
var num1=get.number(card),num2=num2=get.number(evt.card);
|
||||
if(typeof num1=='number'&&typeof num2=='number'&&num2%num1==0) return num+5;
|
||||
}
|
||||
},
|
||||
},
|
||||
group:'xingtu_record',
|
||||
intro:{
|
||||
content:'当前记录:X=#',
|
||||
init:function(player){
|
||||
player.addSkill('xingtu_mark');
|
||||
var history=player.getAllHistory('useCard');
|
||||
if(history.length){
|
||||
var trigger=history[history.length-1],num=get.number(trigger.card);
|
||||
player.storage.xingtu_mark=num;
|
||||
player[typeof num!='number'?'unmarkSkill':'markSkill']('xingtu_mark');
|
||||
}
|
||||
},
|
||||
onremove:function(player){
|
||||
player.removeSkill('xingtu_mark');
|
||||
player.removeGaintag('xingtu1');
|
||||
player.removeGaintag('xingtu2');
|
||||
delete player.storage.xingtu_mark;
|
||||
},
|
||||
subSkill:{
|
||||
record:{
|
||||
trigger:{player:'useCardAfter'},
|
||||
forced:true,
|
||||
filter:function(event,player){
|
||||
return typeof get.number(event.card)=='number';
|
||||
mark:{
|
||||
charlotte:true,
|
||||
trigger:{
|
||||
player:['useCard1','gainAfter'],
|
||||
global:'loseAsyncAfter',
|
||||
},
|
||||
filter:function(event,player,name){
|
||||
if(!player.countCards('h')) return false;
|
||||
return name=='useCard1'||event.getg(player).length;
|
||||
},
|
||||
direct:true,
|
||||
firstDo:true,
|
||||
content:function(){
|
||||
player.storage.xingtu=get.number(trigger.card);
|
||||
player.markSkill('xingtu');
|
||||
'step 0'
|
||||
player.removeGaintag('xingtu1');
|
||||
player.removeGaintag('xingtu2');
|
||||
if(event.triggername=='useCard1'){
|
||||
var num=get.number(trigger.card,player);
|
||||
player.storage.xingtu_mark=num;
|
||||
player[typeof num!='number'?'unmarkSkill':'markSkill']('xingtu_mark');
|
||||
if(typeof num!='number') event.finish();
|
||||
}
|
||||
'step 1'
|
||||
var cards1=[],cards2=[],num=player.storage.xingtu_mark;
|
||||
player.getCards('h').forEach(card=>{
|
||||
var numx=get.number(card,player);
|
||||
if(typeof numx=='number'){
|
||||
if(numx%num==0) cards1.push(card);
|
||||
if(num%numx==0) cards2.push(card);
|
||||
}
|
||||
});
|
||||
player.addGaintag(cards1,'xingtu1');
|
||||
player.addGaintag(cards2,'xingtu2');
|
||||
},
|
||||
intro:{content:'上一张牌的点数:#'},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -4784,7 +4830,33 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
selectCard:[2,Infinity],
|
||||
check:function(card){
|
||||
if(ui.selected.cards.length>1) return 0;
|
||||
return 4-get.value(card);
|
||||
var player=_status.event.player;
|
||||
if(player.hasSkill('xingtu')&&player.storage.xingtu){
|
||||
var cards=player.getCards('he');
|
||||
var num=player.storage.xingtu,stop=false;
|
||||
for(var i=0;i<=cards.length;i++){
|
||||
if(i!=cards.length){
|
||||
var num1=get.number(cards[i],player);
|
||||
if(typeof num1!='number') continue;
|
||||
for(var j=0;j<cards.length;j++){
|
||||
if(i==j) continue;
|
||||
var num2=get.number(cards[j],player);
|
||||
if(typeof num2!='number') continue;
|
||||
var sum=num1+num2;
|
||||
if(sum%num==0||num%sum==0){
|
||||
stop=true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(stop) break;
|
||||
}
|
||||
}
|
||||
if(i!=cards.length){
|
||||
var cardx=[cards[i],cards[j]];
|
||||
if(cardx.includes(card)) return 10-get.value(card);
|
||||
}
|
||||
}
|
||||
return 5-get.value(card);
|
||||
},
|
||||
content:function(){
|
||||
var num=0;
|
||||
|
@ -15272,9 +15344,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
re_gaoshun_prefix:'手杀界',
|
||||
peixiu:'裴秀',
|
||||
xingtu:'行图',
|
||||
xingtu_info:'锁定技。①当你使用有点数的牌结算结束后,你将此牌点数记录为X。②当你使用牌时,若X÷Y的余数为0,则你摸一张牌(Y为此牌的点数)。③你使用Y÷X的余数为0的牌无次数限制(Y为此牌的点数)。',
|
||||
xingtu1:'倍数',
|
||||
xingtu2:'约数',
|
||||
xingtu_info:'锁定技。你使用点数为X的倍数的牌无次数限制,你使用点数为X的约数的牌时摸一张牌(X为你本局游戏使用的上一张牌的点数)。',
|
||||
juezhi:'爵制',
|
||||
juezhi_info:'出牌阶段,你可以弃置至少两张牌,然后从牌堆中获得一张点数为X的牌(X为这些牌的点数和除以13后的余数,且当余数为0时X为13)。',
|
||||
juezhi_info:'出牌阶段,你可以弃置至少两张牌,然后从牌堆中获得一张点数为Y的牌(Y为这些牌的点数和对13取余,余数为0时Y取13)。',
|
||||
sp_jianggan:'手杀蒋干',
|
||||
sp_jianggan_prefix:'手杀',
|
||||
spdaoshu:'盗书',
|
||||
|
|
|
@ -4836,7 +4836,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
content:function(){
|
||||
'step 0'
|
||||
player.chooseButton([get.prompt('sphantong'),player.storage.sphantong],function(button){return -1});
|
||||
player.chooseButton([get.prompt('sphantong'),player.storage.sphantong],function(button){
|
||||
var player=_status.event.player;
|
||||
if(_status.currentPhase==player){
|
||||
//血裔
|
||||
if((player.hasJudge('lebu')||player.skipList.includes('phaseUse'))&&game.hasPlayer(function(current){
|
||||
return current!=player&¤t.group=='qun';
|
||||
})) return 1;
|
||||
//激将
|
||||
if(!player.hasJudge('lebu')&&!player.skipList.includes('phaseUse')&&game.hasPlayer(function(current){
|
||||
return current!=player&¤t.group=='shu'&¤t.hasSha()&&get.attitude(player,current)>0&&get.attitude(current,player)>0;
|
||||
})&&game.hasPlayer(function(target){
|
||||
return player.canUse({name:'sha'},target)&&get.effect(target,{name:'sha'},player,player)>0;
|
||||
})) return 1;
|
||||
}
|
||||
//护驾
|
||||
else if(!player.hasShan()&&game.hasPlayer(function(current){
|
||||
return current!=player&¤t.group=='wei'&¤t.mayHaveShan()&&get.attitude(player,current)>0&&get.attitude(current,player)>0;
|
||||
})) return 1;
|
||||
return -1;
|
||||
});
|
||||
'step 1'
|
||||
if(result.bool){
|
||||
player.logSkill('sphantong');
|
||||
|
@ -4848,31 +4867,41 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
game.cardsDiscard(card);
|
||||
var list=['hujia','jijiang','jiuyuan','xueyi'];
|
||||
for(var i=0;i<list.length;i++){
|
||||
if(player.hasZhuSkill(list[i])) list.splice(i--,1);
|
||||
if(player.hasSkill(list[i])) list.splice(i--,1);
|
||||
}
|
||||
if(list.length){
|
||||
player.chooseControl(list).set('prompt','选择获得以下技能中的一个').set('ai',function(){
|
||||
var player=_status.event.player;
|
||||
if(_status.currentPhase==player){
|
||||
//血裔
|
||||
if((player.hasJudge('lebu')||player.skipList.includes('phaseUse'))&&game.hasPlayer(function(current){
|
||||
return current!=player&¤t.group=='qun';
|
||||
})) return 'xueyi';
|
||||
//激将
|
||||
if(!player.hasJudge('lebu')&&!player.skipList.includes('phaseUse')&&game.hasPlayer(function(current){
|
||||
return current!=player&¤t.group=='shu'&¤t.hasSha()&&get.attitude(player,current)>0&&get.attitude(current,player)>0;
|
||||
})&&game.hasPlayer(function(target){
|
||||
return player.canUse({name:'sha'},target)&&get.effect(target,{name:'sha'},player,player)>0;
|
||||
})) return 'jijiang';
|
||||
}
|
||||
//护驾
|
||||
else if(!player.hasShan()&&game.hasPlayer(function(current){
|
||||
return current!=player&¤t.group=='wei'&¤t.mayHaveShan()&&get.attitude(player,current)>0&&get.attitude(current,player)>0;
|
||||
})) return 'hujia';
|
||||
});
|
||||
}
|
||||
if(list.length>0) player.chooseControl(list).set('prompt','选择获得以下技能中的一个');
|
||||
else event.finish();
|
||||
}
|
||||
else event.finish();
|
||||
'step 2'
|
||||
var skill=result.control;
|
||||
player.addTempSkill(skill);
|
||||
if(!player.storage.zhuSkill_sphantong) player.storage.zhuSkill_sphantong=[];
|
||||
player.storage.zhuSkill_sphantong.add(skill);
|
||||
player.popup(skill,'wood');
|
||||
game.log(player,'获得了技能','#g【'+get.translation(skill)+'】');
|
||||
var next=game.createEvent('sphantong_clear',false);
|
||||
event.next.remove(next);
|
||||
trigger.after.push(next);
|
||||
next.player=player;
|
||||
next.skill=skill;
|
||||
next.setContent(function(){
|
||||
if(player.storage.zhuSkill_sphantong) player.storage.zhuSkill_sphantong.remove(event.skill);
|
||||
})
|
||||
},
|
||||
},
|
||||
sphuangen:{
|
||||
trigger:{global:'useCardToPlayered'},
|
||||
trigger:{global:'useCardToPlayered'},
|
||||
filter:function(event,player){
|
||||
if(!event.isFirstTarget) return false;
|
||||
if(get.type(event.card)!='trick') return false;
|
||||
|
@ -5436,7 +5465,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
audio:2,
|
||||
enable:'phaseUse',
|
||||
filterCard:{suit:'diamond'},
|
||||
filterTarget:true,
|
||||
filterTarget:function(card,player,target){
|
||||
return target.canAddJudge({name:'yanxiao_card'});
|
||||
},
|
||||
check:function(card){
|
||||
return 7-get.value(card);
|
||||
},
|
||||
|
|
|
@ -520,7 +520,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
old_guhuo:{
|
||||
audio:2,
|
||||
group:['old_guhuo_guess'],
|
||||
enable:['chooseToUse','chooseToRespond'],
|
||||
hiddenCard:function(player,name){
|
||||
return (lib.inpile.contains(name)&&player.countCards('hs')>0);
|
||||
|
@ -636,6 +635,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
precontent:function(){
|
||||
player.logSkill('old_guhuo');
|
||||
player.addTempSkill('old_guhuo_guess');
|
||||
var card=event.result.cards[0];
|
||||
event.result.card.suit=get.suit(card);
|
||||
event.result.card.number=get.number(card);
|
||||
|
|
|
@ -342,6 +342,8 @@ window.noname_character_rank={
|
|||
'key_kyou',
|
||||
'key_tomoyo',
|
||||
'star_yuanshu',
|
||||
'jiangji',
|
||||
'tianshangyi',
|
||||
],
|
||||
am:[
|
||||
'diy_caiwenji',
|
||||
|
@ -622,6 +624,10 @@ window.noname_character_rank={
|
|||
'jsrg_sunshangxiang',
|
||||
'jsrg_machao',
|
||||
'sunyu',
|
||||
're_caorui',
|
||||
're_zhugedan',
|
||||
'tw_yanxiang',
|
||||
'yanxiang',
|
||||
],
|
||||
bp:[
|
||||
'chess_diaochan',
|
||||
|
@ -983,6 +989,10 @@ window.noname_character_rank={
|
|||
'ol_dingshangwan',
|
||||
'ol_liwan',
|
||||
'chengjichengcui',
|
||||
'xin_zhangliang',
|
||||
'liwei',
|
||||
'xin_wuban',
|
||||
'ol_liuyan',
|
||||
],
|
||||
b:[
|
||||
'diy_feishi',
|
||||
|
@ -1290,6 +1300,10 @@ window.noname_character_rank={
|
|||
'feiyao',
|
||||
'jsrg_xiahouen',
|
||||
'old_shen_zhaoyun',
|
||||
'sb_qiaoxiao',
|
||||
're_simalang',
|
||||
'laimin',
|
||||
'baoxin',
|
||||
],
|
||||
bm:[
|
||||
'diy_xizhenxihong',
|
||||
|
@ -1482,6 +1496,7 @@ window.noname_character_rank={
|
|||
'huanfan',
|
||||
'jsrg_xugong',
|
||||
'old_xiaoqiao',
|
||||
'old_guanyu',
|
||||
],
|
||||
c:[
|
||||
'xiahoudun',
|
||||
|
@ -1545,6 +1560,7 @@ window.noname_character_rank={
|
|||
'ol_huban',
|
||||
'sb_menghuo',
|
||||
'old_caocao',
|
||||
'sb_yl_luzhi',
|
||||
],
|
||||
d:[
|
||||
'lvmeng',
|
||||
|
|
|
@ -23,10 +23,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
re_xushu:['male','shu',4,['zhuhai','qianxin']],
|
||||
re_lidian:['male','wei',3,['xunxun','xinwangxi']],
|
||||
re_zhongyao:['male','wei',3,['rehuomo','zuoding'],['clan:颍川钟氏']],
|
||||
xin_zhangliang:['male','qun',4,['rejijun','refangtong'],['unseen']],
|
||||
re_simalang:['male','wei',3,['requji','rejunbing'],['unseen']],
|
||||
re_zhugedan:['male','wei',4,['regongao','rejuyi'],['unseen']],
|
||||
re_caorui:['male','wei',3,['huituo','mingjian','rexingshuai'],['unseen','zhu']],
|
||||
xin_zhangliang:['male','qun',4,['rejijun','refangtong']],
|
||||
re_simalang:['male','wei',3,['requji','rejunbing']],
|
||||
re_zhugedan:['male','wei',4,['regongao','rejuyi']],
|
||||
re_caorui:['male','wei',3,['huituo','mingjian','rexingshuai'],['zhu']],
|
||||
re_caochong:['male','wei',3,['rechengxiang','renxin']],
|
||||
ol_zhangzhang:['male','wu',3,['olzhijian','olguzheng']],
|
||||
re_jsp_huangyueying:['female','qun',3,['rejiqiao','relinglong']],
|
||||
|
@ -3850,6 +3850,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.loseMaxHp();
|
||||
player.addSkill('rejianyan');
|
||||
},
|
||||
derivation:'rejianyan',
|
||||
},
|
||||
rejianyan:{
|
||||
audio:2,
|
||||
|
@ -10752,6 +10753,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
precontent:function(){
|
||||
player.logSkill('reguhuo');
|
||||
player.addTempSkill('reguhuo_guess');
|
||||
var card=event.result.cards[0];
|
||||
event.result.card.suit=get.suit(card);
|
||||
event.result.card.number=get.number(card);
|
||||
|
@ -10775,7 +10777,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
threaten:1.3,
|
||||
},
|
||||
group:['reguhuo_shan','reguhuo_wuxie','reguhuo_guess'],
|
||||
group:['reguhuo_shan','reguhuo_wuxie'],
|
||||
},
|
||||
reguhuo_shan:{
|
||||
enable:['chooseToUse','chooseToRespond'],
|
||||
|
@ -10812,6 +10814,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
precontent:function(){
|
||||
player.logSkill('reguhuo');
|
||||
player.addTempSkill('reguhuo_guess');
|
||||
var card=event.result.cards[0];
|
||||
event.result.card.suit=get.suit(card);
|
||||
event.result.card.number=get.number(card);
|
||||
|
@ -10852,6 +10855,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
precontent:function(){
|
||||
player.logSkill('reguhuo');
|
||||
player.addTempSkill('reguhuo_guess');
|
||||
var card=event.result.cards[0];
|
||||
event.result.card.suit=get.suit(card);
|
||||
event.result.card.number=get.number(card);
|
||||
|
@ -10979,7 +10983,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
'step 1'
|
||||
if(!result.bool) target.loseHp();
|
||||
'step 2'
|
||||
target.addSkill('rechanyuan');
|
||||
target.addSkillLog('rechanyuan');
|
||||
if(targets.length) event.goto(0);
|
||||
},
|
||||
},
|
||||
|
@ -10987,13 +10991,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
reguhuo_phase:{},
|
||||
rechanyuan:{
|
||||
init:function(player,skill){
|
||||
if(player.hp<=1){
|
||||
player.logSkill(skill);
|
||||
player.addSkill('rechanyuan_log');
|
||||
}
|
||||
player.addSkillBlocker(skill);
|
||||
},
|
||||
onremove:function(player,skill){
|
||||
player.removeSkill('rechanyuan_log');
|
||||
player.removeSkillBlocker(skill);
|
||||
},
|
||||
charlotte:true,
|
||||
locked:true,
|
||||
skillBlocker:function(skill,player){
|
||||
return skill!='chanyuan'&&skill!='rechanyuan'&&!lib.skill[skill].charlotte&&player.hp<=1;
|
||||
},
|
||||
|
@ -11006,8 +11013,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
});
|
||||
if(list.length) str+=('<br><li>失效技能:'+get.translation(list))
|
||||
return str;
|
||||
},
|
||||
},
|
||||
audio:2,
|
||||
trigger:{player:'changeHp'},
|
||||
filter:function(event,player){
|
||||
return (player.hp<=1)!=(player.hasSkill('rechanyuan_log'));
|
||||
},
|
||||
direct:true,
|
||||
locked:true,
|
||||
content:function(){
|
||||
if(player.hp<=1){
|
||||
player.logSkill('rechanyuan');
|
||||
player.addSkill('rechanyuan_log');
|
||||
}
|
||||
}
|
||||
else player.removeSkill('rechanyuan_log');
|
||||
},
|
||||
subSkill:{
|
||||
log:{charlotte:true},
|
||||
},
|
||||
},
|
||||
botu:{
|
||||
audio:2,
|
||||
|
|
|
@ -38,8 +38,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sb_liubiao:['male','qun',3,['sbzishou','sbzongshi']],
|
||||
sb_zhurong:['female','shu',4,['sblieren','sbjuxiang']],
|
||||
sb_menghuo:['male','shu',4,['sbhuoshou','sbzaiqi']],
|
||||
sb_yl_luzhi:['male','qun',3,['nzry_mingren','sbzhenliang'],['unseen']],
|
||||
sb_xiaoqiao:['female','wu',3,['sbtianxiang','xinhongyan'],['unseen']],
|
||||
sb_yl_luzhi:['male','qun',3,['nzry_mingren','sbzhenliang']],
|
||||
sb_xiaoqiao:['female','wu',3,['sbtianxiang','xinhongyan']],
|
||||
},
|
||||
characterSort:{
|
||||
sb:{
|
||||
|
|
|
@ -1117,17 +1117,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
'step 1'
|
||||
switch(result.control){
|
||||
case 'equip1':
|
||||
player.addTempSkill('drlt_jueyan1',{player:'phaseAfter'});
|
||||
player.addTempSkill('drlt_jueyan1');
|
||||
break;
|
||||
case 'equip2':
|
||||
player.draw(3);
|
||||
player.addTempSkill('drlt_jueyan3',{player:'phaseAfter'});
|
||||
player.addTempSkill('drlt_jueyan3');
|
||||
break;
|
||||
case 'equip3_4':
|
||||
player.addTempSkill('drlt_jueyan2',{player:'phaseAfter'});
|
||||
player.addTempSkill('drlt_jueyan2');
|
||||
break;
|
||||
case 'equip5':
|
||||
player.addTempSkill('rejizhi',{player:'phaseAfter'});
|
||||
player.addTempSkill('rejizhi');
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
@ -1146,6 +1146,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
},
|
||||
derivation:'rejizhi',
|
||||
},
|
||||
'drlt_jueyan1':{
|
||||
mod:{
|
||||
|
@ -7457,7 +7458,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
xinfu_guhuo:{
|
||||
audio:'guhuo_guess',
|
||||
derivation:['chanyuan'],
|
||||
group:['guhuo_guess'],
|
||||
enable:['chooseToUse','chooseToRespond'],
|
||||
hiddenCard:function(player,name){
|
||||
return (lib.inpile.contains(name)&&player.countCards('hs')>0&&!player.hasSkill('guhuo_phase'));
|
||||
|
@ -7553,6 +7553,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
precontent:function(){
|
||||
player.logSkill('xinfu_guhuo');
|
||||
player.addTempSkill('guhuo_guess');
|
||||
var card=event.result.cards[0];
|
||||
event.result.card.suit=get.suit(card);
|
||||
event.result.card.number=get.number(card);
|
||||
|
@ -7708,22 +7709,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
chanyuan:{
|
||||
init:function(player,skill){
|
||||
if(player.hp==1) player.logSkill(skill);
|
||||
player.addSkillBlocker(skill);
|
||||
},
|
||||
onremove:function(player,skill){
|
||||
player.removeSkillBlocker(skill);
|
||||
},
|
||||
charlotte:true,
|
||||
locked:true,
|
||||
skillBlocker:function(skill,player){
|
||||
return skill!='chanyuan'&&skill!='rechanyuan'&&!lib.skill[skill].charlotte&&player.hp==1;
|
||||
},
|
||||
audio:2,
|
||||
trigger:{player:'changeHp'},
|
||||
filter:function(event,player){
|
||||
return event.num<0&&player.hp==1;
|
||||
},
|
||||
content:function(){},
|
||||
mark:true,
|
||||
intro:{
|
||||
content:function(storage,player,skill){
|
||||
|
@ -7733,8 +7727,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
});
|
||||
if(list.length) str+=('<br><li>失效技能:'+get.translation(list))
|
||||
return str;
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
audio:2,
|
||||
trigger:{player:'changeHp'},
|
||||
filter:function(event,player){
|
||||
return player.hp==1;
|
||||
},
|
||||
forced:true,
|
||||
content:function(){},
|
||||
},
|
||||
guhuo_phase:{},
|
||||
},
|
||||
|
@ -7764,7 +7765,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
huangzhong:['re_huangzhong','ol_huangzhong','sb_huangzhong','huangzhong','jsrg_huangzhong'],
|
||||
weiyan:['re_weiyan','ol_weiyan','weiyan'],
|
||||
zhoutai:['zhoutai','xin_zhoutai','old_zhoutai'],
|
||||
xiaoqiao:['xiaoqiao','ol_xiaoqiao','re_xiaoqiao','old_xiaoqiao'],
|
||||
xiaoqiao:['xiaoqiao','ol_xiaoqiao','re_xiaoqiao','sb_xiaoqiao','old_xiaoqiao'],
|
||||
yuji:['xin_yuji','re_yuji','yuji'],
|
||||
zhangjiao:['sp_zhangjiao','re_zhangjiao','sb_zhangjiao','zhangjiao'],
|
||||
dianwei:['dianwei','ol_dianwei','re_dianwei'],
|
||||
|
@ -7797,7 +7798,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
zhugezhan:['zhugezhan','old_zhugezhan'],
|
||||
ol_lusu:['re_lusu','ol_lusu'],
|
||||
zhanghe:['zhanghe','re_zhanghe','sb_zhanghe'],
|
||||
yl_luzhi:['yl_luzhi','tw_yl_luzhi'],
|
||||
yl_luzhi:['yl_luzhi','sb_yl_luzhi','tw_yl_luzhi'],
|
||||
sunliang:['sunliang','xin_sunliang'],
|
||||
},
|
||||
translate:{
|
||||
|
@ -7873,6 +7874,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
drlt_wanglie:"往烈",
|
||||
drlt_wanglie_info:"①出牌阶段,你使用的第一张牌无距离限制。②当你于出牌阶段内使用牌时,你可以令此牌不能被响应,然后你于本阶段内不能再使用牌。",
|
||||
"drlt_xiongluan":"雄乱",
|
||||
drlt_xiongluan1:'雄乱',
|
||||
"drlt_xiongluan_info":"限定技,出牌阶段,你可以废除你的判定区和装备区,然后指定一名其他角色。直到回合结束,你对其使用牌无距离和次数限制,其不能使用和打出手牌。",
|
||||
"drlt_congjian":"从谏",
|
||||
"drlt_congjian_info":"当你成为锦囊牌的目标时,若此牌的目标数大于1,则你可以交给其中一名其他目标角色一张牌,然后摸一张牌,若你给出的是装备牌,改为摸两张牌。",
|
||||
|
|
|
@ -49,7 +49,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
haopu:['male','shu',4,['olzhenying']],
|
||||
ol_mengda:['male','shu',4,['olgoude']],
|
||||
ol_wanglang:['male','wei',3,['gushe','oljici']],
|
||||
ol_liuyan:['male','qun','4/6',['olpianan','olyinji','olkuisi'],['unseen']],
|
||||
ol_liuyan:['male','qun','4/6',['olpianan','olyinji','olkuisi']],
|
||||
lushi:['female','qun',3,['olzhuyan','olleijie']],
|
||||
zhangshiping:['male','shu',3,['olhongji','olxinggu']],
|
||||
sunhong:['male','wu',3,['olxianbi','olzenrun']],
|
||||
|
@ -21884,12 +21884,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
},
|
||||
moukui:{
|
||||
audio:2,
|
||||
audioname:['sp_mushun'],
|
||||
trigger:{player:'useCardToPlayered'},
|
||||
direct:true,
|
||||
filter:function(event,player){
|
||||
return event.card.name=='sha';
|
||||
},
|
||||
audio:2,
|
||||
content:function(){
|
||||
"step 0"
|
||||
var controls=['draw_card'];
|
||||
|
@ -24282,7 +24283,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
xionghuo:{
|
||||
marktext:"戾",
|
||||
mark:true,
|
||||
intro:{
|
||||
name:'暴戾',
|
||||
content:"mark",
|
||||
|
@ -25253,7 +25253,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
jin_simazhao:['jin_simazhao','simazhao','sp_simazhao'],
|
||||
jin_wangyuanji:['jin_wangyuanji','wangyuanji','sp_wangyuanji'],
|
||||
wangyun:['wangyun','dc_wangyun','re_wangyun','jsrg_wangyun','old_wangyun','pe_wangyun'],
|
||||
zhangliang:['re_zhangliang','zhangliang'],
|
||||
zhangliang:['xin_zhangliang','re_zhangliang','zhangliang'],
|
||||
lingju:['lingju','old_lingju'],
|
||||
guansuo:['guansuo','dc_guansuo'],
|
||||
zhangxingcai:['zhangxingcai','old_zhangxingcai'],
|
||||
|
@ -25295,6 +25295,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
ol_pengyang:['ol_pengyang','sp_pengyang'],
|
||||
ol_luyusheng:['ol_luyusheng','luyusheng'],
|
||||
fanjiangzhangda:['fanjiangzhangda','jsrg_fanjiangzhangda'],
|
||||
simalang:['re_simalang','simalang'],
|
||||
zhugedan:['re_zhugedan','zhugedan'],
|
||||
},
|
||||
translate:{
|
||||
"xinfu_lingren":"凌人",
|
||||
|
|
|
@ -12,7 +12,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dc_mengda:['male','wei',4,['dclibang','dcwujie']],
|
||||
//dc_fuwan:['male','qun',4,['dcmoukui']],
|
||||
guānning:['male','shu',3,['dcxiuwen','dclongsong']],
|
||||
sunhuan:['male','wu',4,['dcniji'],['unseen']],
|
||||
sunhuan:['male','wu',4,['dcniji']],
|
||||
sunlang:['male','shu',4,['dctingxian','dcbenshi']],
|
||||
shiyi:['male','wu',3,['dccuichuan','dczhengxu']],
|
||||
dc_hujinding:['female','shu','3/6',['dcdeshi','dcwuyuan','huaizi']],
|
||||
|
@ -3821,7 +3821,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
target:1,
|
||||
},
|
||||
},
|
||||
derivation:['releiji','rebiyue','new_retuxi','mingce','xinzhiyan','nhyinbing','nhhuoqi','nhguizhu','nhxianshou','nhlundao','nhguanyue','nhyanzheng'],
|
||||
derivation:['releiji','rebiyue','new_retuxi','remingce','xinzhiyan','nhyinbing','nhhuoqi','nhguizhu','nhxianshou','nhlundao','nhguanyue','nhyanzheng'],
|
||||
subSkill:{
|
||||
clear:{
|
||||
onremove:function(player){
|
||||
|
|
|
@ -2539,7 +2539,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sp_zhangliao:['sp_zhangliao','yj_zhangliao','jsrg_zhangliao'],
|
||||
xiahoudun:['xiahoudun','re_xiahoudun','xin_xiahoudun'],
|
||||
liubei:['liubei','re_liubei','sb_liubei','dc_liubei','junk_liubei'],
|
||||
guanyu:['guanyu','re_guanyu','ps_guanyu'],
|
||||
guanyu:['guanyu','re_guanyu','ps_guanyu','old_guanyu'],
|
||||
zhangfei:['zhangfei','re_zhangfei','old_zhangfei','xin_zhangfei','sb_zhangfei','tw_zhangfei','jsrg_zhangfei','yj_zhangfei'],
|
||||
zhaoyun:['zhaoyun','re_zhaoyun','old_zhaoyun','sb_zhaoyun','ps2063_zhaoyun','ps2067_zhaoyun'],
|
||||
sp_zhaoyun:['sp_zhaoyun','jsp_zhaoyun'],
|
||||
|
|
|
@ -14579,6 +14579,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
jiangji:['tw_jiangji','jiangji'],
|
||||
baoxin:['tw_baoxin','baoxin'],
|
||||
yanxiang:['yanxiang','tw_yanxiang'],
|
||||
liwei:['liwei','tw_liwei'],
|
||||
},
|
||||
dynamicTranslate:{
|
||||
twfeifu:function(player){
|
||||
|
|
|
@ -14,7 +14,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
old_huangfusong:['male','qun',4,['xinfenyue']],
|
||||
dc_xiahouba:['male','shu',4,['rebaobian']],
|
||||
dc_daxiaoqiao:['female','wu',3,['dcxingwu','dcluoyan']],
|
||||
tianshangyi:['female','wei',3,['dcposuo','dcxiaoren'],['unseen']],
|
||||
tianshangyi:['female','wei',3,['dcposuo','dcxiaoren']],
|
||||
sunlingluan:['female','wu',3,['dclingyue','dcpandi']],
|
||||
dc_wangjun:['male','qun',4,['dctongye','dcchangqu']],
|
||||
zhoubuyi:['male','wei',3,['dcshiji','dcsilun']],
|
||||
|
|
|
@ -2043,6 +2043,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.addTempSkill('paoxiao');
|
||||
}
|
||||
},
|
||||
derivation:['wusheng','paoxiao'],
|
||||
},
|
||||
shiyong:{
|
||||
audio:2,
|
||||
|
@ -13791,7 +13792,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
trigger:{player:'phaseZhunbeiBegin'},
|
||||
forced:true,
|
||||
unique:true,
|
||||
derivation:['zyexin','zzili'],
|
||||
derivation:['zyexin','zzili','zpaiyi'],
|
||||
filter:function(event,player){
|
||||
return player.countCards('e')>=2;
|
||||
},
|
||||
|
|
180
game/game.js
180
game/game.js
|
@ -6710,6 +6710,12 @@
|
|||
frequent:true,
|
||||
intro:'在用户填写的IP地址没有直接指定使用WS/WSS协议的情况下,默认使用WSS协议,而非WS协议来连接到联机服务器。<br>请不要轻易勾选此项!',
|
||||
},
|
||||
read_clipboard:{
|
||||
name:'读取邀请链接',
|
||||
init:false,
|
||||
frequent:true,
|
||||
intro:'读取剪贴板以解析邀请链接自动加入联机房间',
|
||||
}
|
||||
}
|
||||
},
|
||||
boss:{
|
||||
|
@ -8571,13 +8577,42 @@
|
|||
}
|
||||
else if(modeimage) src=`image/mode/${modeimage}/character/${name}${ext}`;
|
||||
else if(type=='character'&&lib.config.skin[name]&&arguments[2]!='noskin') src=`image/skin/${name}/${lib.config.skin[name]}${ext}`;
|
||||
else if(type=='character') src=`image/character/${gzbool?'gz_':''}${name}${ext}`;
|
||||
else if(type=='character'){
|
||||
src=`image/character/${gzbool?'gz_':''}${name}${ext}`;
|
||||
}
|
||||
else src=`image/${type}/${subfolder}/${name}${ext}`;
|
||||
}
|
||||
else src=`image/${name}${ext}`;
|
||||
this.setBackgroundImage(src);
|
||||
this.style.backgroundPositionX='center';
|
||||
this.style.backgroundSize='cover';
|
||||
new Promise((resolve,reject)=>{
|
||||
const image=new Image();
|
||||
image.src=`${lib.assetURL}${src}`;
|
||||
image.onload=resolve;
|
||||
if(type=='character') image.onerror=reject;
|
||||
}).then(()=>{
|
||||
this.setBackgroundImage(src);
|
||||
this.style.backgroundPositionX='center';
|
||||
this.style.backgroundSize='cover';
|
||||
}).catch(()=>new Promise((resolve,reject)=>{
|
||||
const nameinfo=get.character(name);
|
||||
const sex=nameinfo[0];
|
||||
src=`image/character/default_silhouette_${sex}${ext}`;
|
||||
const image=new Image();
|
||||
image.src=`${lib.assetURL}${src}`;
|
||||
image.onload=()=>resolve(src);
|
||||
image.onerror=reject;
|
||||
}).catch(()=>new Promise((resolve,reject)=>{
|
||||
const nameinfo=get.character(name);
|
||||
const sex=nameinfo[0];
|
||||
src=`image/character/default_silhouette_${sex=='female'?'female':'male'}${ext}`;
|
||||
const image=new Image();
|
||||
image.src=`${lib.assetURL}${src}`;
|
||||
image.onload=()=>resolve(src);
|
||||
image.onerror=reject;
|
||||
})).then((src)=>{
|
||||
this.setBackgroundImage(src);
|
||||
this.style.backgroundPositionX='center';
|
||||
this.style.backgroundSize='cover';
|
||||
}));
|
||||
return this;
|
||||
}
|
||||
});
|
||||
|
@ -11406,7 +11441,13 @@
|
|||
localStorage.removeItem(lib.configprefix+'background');
|
||||
}
|
||||
},
|
||||
parsex:function(item){
|
||||
/**
|
||||
*
|
||||
* @param {*} item
|
||||
* @param {Function} [scope] 作用域
|
||||
* @returns
|
||||
*/
|
||||
parsex:function(item,scope){
|
||||
//by 诗笺、Tipx-L
|
||||
/**
|
||||
* @param {Function} func
|
||||
|
@ -11466,9 +11507,15 @@
|
|||
}
|
||||
str=`if(event.step==${k}){event.finish();return;}`+str;
|
||||
}
|
||||
return (new (hasDebugger?GeneratorFunction:Function)('event','step','source','player','target','targets',
|
||||
if(!scope){
|
||||
return (new (hasDebugger?GeneratorFunction:Function)('event','step','source','player','target','targets',
|
||||
'card','cards','skill','forced','num','trigger','result',
|
||||
'_status','lib','game','ui','get','ai',str));
|
||||
}else{
|
||||
return scope(`function${hasDebugger?'*':''} anonymous(event,step,source,player,target,targets,
|
||||
card,cards,skill,forced,num,trigger,result,
|
||||
_status,lib,game,ui,get,ai){${str}}; anonymous;`);
|
||||
}
|
||||
}
|
||||
switch(typeof item){
|
||||
case "object":
|
||||
|
@ -11537,7 +11584,7 @@
|
|||
else lastEvent=currentResult;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else if(item._parsed) return item;
|
||||
// falls through
|
||||
default:
|
||||
return Legacy(item);
|
||||
|
@ -20858,11 +20905,24 @@
|
|||
this.markSkill('stratagem_fury');
|
||||
}
|
||||
/**
|
||||
* version 1.6
|
||||
* version 1.7
|
||||
*
|
||||
* 链式创建一次性技能的api。
|
||||
*
|
||||
* 使用者只需要关注技能的效果,而不是技能的本身。
|
||||
*
|
||||
* v1.7 可传递作用域
|
||||
* @example
|
||||
* ```js
|
||||
* (function () {
|
||||
* let _var = 1;
|
||||
* let me = player;
|
||||
* player.when('drawAfter')
|
||||
* .apply(code => eval(code))
|
||||
* .then(() => console.log(_var))
|
||||
* .then('me.gainMaxHp(5)');
|
||||
* })();
|
||||
* ```
|
||||
*/
|
||||
when(){
|
||||
if(!_status.postReconnect.player_when) _status.postReconnect.player_when=[
|
||||
|
@ -20909,6 +20969,11 @@
|
|||
else if(Array.isArray(trigger.player)) trigger.player.add(after);
|
||||
else if(typeof trigger.player=='string') trigger.player=[trigger.player,after];
|
||||
const vars={};
|
||||
/**
|
||||
* 作用域
|
||||
* @type { (code: string) => any }
|
||||
*/
|
||||
let scope;
|
||||
let skill={
|
||||
trigger:trigger,
|
||||
forced:true,
|
||||
|
@ -20963,11 +21028,12 @@
|
|||
const fun2=skill.contentFuns[i];
|
||||
const a=fun2.toString();
|
||||
//防止传入()=>xxx的情况
|
||||
const begin=a.indexOf("{")==a.indexOf("}")&&a.indexOf("{")==-1?a.indexOf("=>")+2:a.indexOf("{")+1;
|
||||
const begin=a.indexOf("{")==a.indexOf("}")&&a.indexOf("{")==-1&&a.indexOf("=>")>-1?a.indexOf("=>")+2:a.indexOf("{")+1;
|
||||
const str2=a.slice(begin,a.lastIndexOf("}")!=-1?a.lastIndexOf("}"):undefined).trim();
|
||||
str+=`'step ${i}'\n\t${str2}\n\t`;
|
||||
}
|
||||
skill.content=eval(str+`\n};content;`);
|
||||
skill.content=lib.init.parsex((scope||eval)(str+`\n};content;`),scope);
|
||||
skill.content._parsed=true;
|
||||
};
|
||||
Object.defineProperty(lib.skill,skillName,{
|
||||
configurable:true,
|
||||
|
@ -21042,6 +21108,21 @@
|
|||
Object.assign(vars,arg);
|
||||
createContent();
|
||||
return this;
|
||||
},
|
||||
/**
|
||||
* 传递外部作用域
|
||||
*
|
||||
* 一般是传递一个 code=>eval(code) 函数
|
||||
*
|
||||
* 传递后可在then中使用外部变量(vars的上位替代)
|
||||
*
|
||||
* @param {Function} _scope
|
||||
*/
|
||||
apply(_scope){
|
||||
if(lib.skill[skillName]!=skill) throw `This skill has been destroyed`;
|
||||
scope=_scope;
|
||||
if(skill.contentFuns.length>0) createContent();
|
||||
return this;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -31361,14 +31442,18 @@
|
|||
const next=new lib.element.GameEvent(`${this.name}Inserted`,false);
|
||||
this.next.push(next);
|
||||
next.setContent(content);
|
||||
Object.entries(map).forEach(entry=>next.set(entry[0],entry[1]));
|
||||
if(map){
|
||||
Object.entries(map).forEach(entry=>next.set(entry[0],entry[1]));
|
||||
}
|
||||
return next;
|
||||
}
|
||||
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]));
|
||||
if(map){
|
||||
Object.entries(map).forEach(entry=>next.set(entry[0],entry[1]));
|
||||
}
|
||||
return next;
|
||||
}
|
||||
backup(skill){
|
||||
|
@ -34938,6 +35023,39 @@
|
|||
ui.rooms.push(player);
|
||||
}
|
||||
}
|
||||
if(!_status.requestReadClipboard&&get.config('read_clipboard','connect')){
|
||||
//每次启动只请求一次
|
||||
_status.requestReadClipboard=true;
|
||||
function read(text){
|
||||
try{
|
||||
var roomId=text.split('\n')[1].match(/\d+/);
|
||||
var caption=ui.rooms.find(caption=>caption.key==roomId);
|
||||
if (caption&&(_status.read_clipboard_text||confirm(`是否通过复制的内容加入${roomId}房间?`))){
|
||||
ui.click.connectroom.call(caption);
|
||||
delete _status.read_clipboard_text;
|
||||
}
|
||||
}catch(e){console.log(e)}
|
||||
}
|
||||
if(_status.read_clipboard_text){
|
||||
read(_status.read_clipboard_text);
|
||||
}else{
|
||||
window.focus();
|
||||
if(navigator.clipboard&&lib.node){
|
||||
navigator.clipboard.readText().then(read).catch(_=>{});
|
||||
}else{
|
||||
var input=ui.create.node('textarea',ui.window,{opacity:'0'});
|
||||
input.select();
|
||||
var result=document.execCommand('paste');
|
||||
input.blur();
|
||||
ui.window.removeChild(input);
|
||||
if(result||input.value.length>0) read(input.value);
|
||||
else if(confirm('是否输入邀请链接以加入房间?')){
|
||||
var text=prompt('请输入邀请链接');
|
||||
if(typeof text=='string'&&text.length>0) read(text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
lib.message.client.updateclients(clients,true);
|
||||
},
|
||||
|
@ -35454,6 +35572,10 @@
|
|||
ui.connectStartBar.delete();
|
||||
delete ui.connectStartBar;
|
||||
}
|
||||
if(ui.connectShareButton){
|
||||
ui.connectShareButton.delete();
|
||||
delete ui.connectShareButton;
|
||||
}
|
||||
if(ui.roomInfo){
|
||||
ui.roomInfo.remove();
|
||||
delete ui.roomInfo;
|
||||
|
@ -53461,7 +53583,7 @@
|
|||
ipbar.style.borderRadius='2px';
|
||||
ipbar.style.position='relative';
|
||||
|
||||
var button=ui.create.div('.menubutton.large.highlight.connectbutton.pointerdiv',game.online?'退出联机':'开始游戏',ui.window,function(){
|
||||
var button=ui.create.div('.menubutton.large.highlight.connectbutton.connectbutton1.pointerdiv',game.online?'退出联机':'开始游戏',ui.window,function(){
|
||||
if(button.clicked) return;
|
||||
if(game.online){
|
||||
if(game.onlinezhu){
|
||||
|
@ -53487,13 +53609,37 @@
|
|||
}
|
||||
button.delete();
|
||||
bar.delete();
|
||||
shareButton.delete();
|
||||
delete ui.connectStartButton;
|
||||
delete ui.connectStartBar;
|
||||
delete ui.connectShareButton;
|
||||
button.clicked=true;
|
||||
});
|
||||
|
||||
var shareButton=ui.create.div('.menubutton.large.highlight.connectbutton.connectbutton2.pointerdiv','分享房间',ui.window,function(){
|
||||
var text=`无名杀-联机-${lib.translate[get.mode()]}-${game.connectPlayers.filter(p=>p.avatar).length}/${game.connectPlayers.filter(p=>!p.classList.contains('unselectable2')).length}\n${get.connectNickname()}邀请你加入${game.roomId}房间\n联机地址:${game.ip}\n请先通过游戏内菜单-开始-联机中启用“读取邀请链接”选项`;
|
||||
window.focus();
|
||||
if(navigator.clipboard&&lib.node){
|
||||
navigator.clipboard.writeText(text).then(()=>{
|
||||
game.alert(`分享内容复制成功`);
|
||||
}).catch(e=>{
|
||||
game.alert(`分享内容复制失败${e||''}`);
|
||||
});
|
||||
}else{
|
||||
var input=ui.create.node('textarea',ui.window,{opacity:'0'});
|
||||
input.value=text;
|
||||
input.focus();
|
||||
input.select();
|
||||
var result=document.execCommand('copy');
|
||||
input.blur();
|
||||
ui.window.removeChild(input);
|
||||
game.alert(`分享内容复制${result?'成功':'失败'}`);
|
||||
}
|
||||
});
|
||||
|
||||
ui.connectStartButton=button;
|
||||
ui.connectStartBar=bar;
|
||||
ui.connectShareButton=shareButton;
|
||||
},
|
||||
players:numberOfPlayers=>{
|
||||
if(numberOfPlayers===0){
|
||||
|
@ -53539,10 +53685,10 @@
|
|||
ui.handcards1Container.onmousewheel=ui.click.mousewheel;
|
||||
ui.handcards2Container.onmousewheel=ui.click.mousewheel;
|
||||
}
|
||||
ui.handcards1Container.ontouchstart = ui.click.touchStart;
|
||||
ui.handcards2Container.ontouchstart = ui.click.touchStart;
|
||||
ui.handcards1Container.ontouchmove = ui.click.touchScroll;
|
||||
ui.handcards2Container.ontouchmove = ui.click.touchScroll;
|
||||
ui.handcards1Container.ontouchstart=ui.click.touchStart;
|
||||
ui.handcards2Container.ontouchstart=ui.click.touchStart;
|
||||
ui.handcards1Container.ontouchmove=ui.click.touchScroll;
|
||||
ui.handcards2Container.ontouchmove=ui.click.touchScroll;
|
||||
ui.handcards1Container.style.webkitOverflowScrolling='touch';
|
||||
ui.handcards2Container.style.webkitOverflowScrolling='touch';
|
||||
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 67 KiB |
Binary file not shown.
After Width: | Height: | Size: 70 KiB |
|
@ -3374,7 +3374,12 @@ div:not(.handcards)>.card>.info>span,
|
|||
.connectbutton {
|
||||
top: calc(400% / 7 - 35px);
|
||||
width: 130px;
|
||||
left: calc(50% - 70px);
|
||||
}
|
||||
.connectbutton1 {
|
||||
left: calc(50% - 200px);
|
||||
}
|
||||
.connectbutton2 {
|
||||
left: calc(50% + 60px);
|
||||
}
|
||||
.connectevents {
|
||||
left: auto;
|
||||
|
|
|
@ -119,6 +119,44 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
});
|
||||
return uiintro;
|
||||
},220);
|
||||
if (get.config('read_clipboard','connect')){
|
||||
var ced=false;
|
||||
function read(text){
|
||||
try{
|
||||
var text2=text.split('\n')[2];
|
||||
var ip=text2.slice(5);
|
||||
if(ip.length>0&&text2.startsWith("联机地址:")&&(ced||confirm('是否根据剪贴板的邀请链接以进入联机地址和房间?'))){
|
||||
node.innerHTML=ip;
|
||||
event.textnode.innerHTML='正在连接...';
|
||||
clearTimeout(event.timeout);
|
||||
game.saveConfig('last_ip',node.innerHTML);
|
||||
game.connect(node.innerHTML,function(success){
|
||||
if(!success&&event.textnode){
|
||||
alert('邀请链接解析失败');
|
||||
event.textnode.innerHTML='输入联机地址';
|
||||
}
|
||||
if (success) _status.read_clipboard_text=text;
|
||||
});
|
||||
}
|
||||
}catch(e){console.log(e);}
|
||||
}
|
||||
window.focus();
|
||||
if (navigator.clipboard&&lib.node){
|
||||
navigator.clipboard.readText().then(read).catch(_=>{});
|
||||
}else{
|
||||
var input=ui.create.node('textarea',ui.window,{opacity:'0'});
|
||||
input.select();
|
||||
var result=document.execCommand('paste');
|
||||
input.blur();
|
||||
ui.window.removeChild(input);
|
||||
if(result||input.value.length>0) read(input.value);
|
||||
else if(confirm('是否输入邀请链接以进入联机地址和房间?')){
|
||||
ced=true;
|
||||
var text=prompt('请输入邀请链接');
|
||||
if(typeof text=='string'&&text.length>0) read(text);
|
||||
}
|
||||
}
|
||||
}
|
||||
lib.init.onfree();
|
||||
}
|
||||
if(window.isNonameServer){
|
||||
|
|
Loading…
Reference in New Issue