This commit is contained in:
libccy 2016-08-13 15:28:11 +08:00
parent 5fc3cbf14e
commit d7874bc77b
8 changed files with 190 additions and 155 deletions

View File

@ -230,7 +230,7 @@ card.yunchou={
if(target==player&&target.num('h')<=1) return 0; if(target==player&&target.num('h')<=1) return 0;
return 0.5; return 0.5;
} }
if(target.skills.contains('toulianghuanzhu2')) return 0; if(target.hasSkill('toulianghuanzhu2')) return 0;
return -0.5; return -0.5;
} }
}, },
@ -648,7 +648,7 @@ card.yunchou={
return 0; return 0;
}, },
target:function(player,target){ target:function(player,target){
if(target.skills.contains('dujian2')||target.num('h')==0) return 0; if(target.hasSkill('dujian2')||target.num('h')==0) return 0;
if(player.num('h')<=1) return 0; if(player.num('h')<=1) return 0;
return -1.5; return -1.5;
} }

View File

@ -155,7 +155,7 @@ character.boss={
targets[1].$gain2(cards); targets[1].$gain2(cards);
targets[0].damage(targets[1]); targets[0].damage(targets[1]);
} }
if(!player.skills.contains('yinmo')){ if(!player.hasSkill('yinmo')){
event.finish(); event.finish();
} }
"step 2" "step 2"
@ -208,7 +208,7 @@ character.boss={
usable:1, usable:1,
filterCard:{color:'black'}, filterCard:{color:'black'},
filterTarget:function(card,player,target){ filterTarget:function(card,player,target){
return !target.skills.contains('mazui2'); return !target.hasSkill('mazui2');
}, },
check:function(card){ check:function(card){
return 6-ai.get.value(card); return 6-ai.get.value(card);
@ -709,7 +709,7 @@ character.boss={
globalTo:function(from,to,distance){ globalTo:function(from,to,distance){
if(to.isFriendOf(from)) return; if(to.isFriendOf(from)) return;
for(var i=0;i<game.players.length;i++){ for(var i=0;i<game.players.length;i++){
if(game.players[i].skills.contains('boss_zhenwei')&& if(game.players[i].hasSkill('boss_zhenwei')&&
game.players[i].isFriendOf(to)&&game.players[i]!=to){ game.players[i].isFriendOf(to)&&game.players[i]!=to){
return distance+1; return distance+1;
} }
@ -775,7 +775,7 @@ character.boss={
} }
if(_status.mode=='jiange'){ if(_status.mode=='jiange'){
for(var i=0;i<game.players.length;i++){ for(var i=0;i<game.players.length;i++){
if(game.players[i].isFriendOf(player)&&game.players[i].skills.contains('huodi')){ if(game.players[i].isFriendOf(player)&&game.players[i].hasSkill('huodi')){
return num>0; return num>0;
} }
} }
@ -992,11 +992,11 @@ character.boss={
popup:false, popup:false,
content:function(){ content:function(){
for(var i=0;i<game.players.length;i++){ for(var i=0;i<game.players.length;i++){
if(game.players[i].skills.contains('boss_biantian3')){ if(game.players[i].hasSkill('boss_biantian3')){
game.players[i].removeSkill('boss_biantian3'); game.players[i].removeSkill('boss_biantian3');
game.players[i].popup('boss_biantian3'); game.players[i].popup('boss_biantian3');
} }
if(game.players[i].skills.contains('boss_biantian2')){ if(game.players[i].hasSkill('boss_biantian2')){
game.players[i].removeSkill('boss_biantian2'); game.players[i].removeSkill('boss_biantian2');
game.players[i].popup('boss_biantian2'); game.players[i].popup('boss_biantian2');
} }
@ -1012,11 +1012,11 @@ character.boss={
content:function(){ content:function(){
"step 0" "step 0"
for(var i=0;i<game.players.length;i++){ for(var i=0;i<game.players.length;i++){
if(game.players[i].skills.contains('boss_biantian3')){ if(game.players[i].hasSkill('boss_biantian3')){
game.players[i].removeSkill('boss_biantian3'); game.players[i].removeSkill('boss_biantian3');
game.players[i].popup('boss_biantian3'); game.players[i].popup('boss_biantian3');
} }
if(game.players[i].skills.contains('boss_biantian2')){ if(game.players[i].hasSkill('boss_biantian2')){
game.players[i].removeSkill('boss_biantian2'); game.players[i].removeSkill('boss_biantian2');
game.players[i].popup('boss_biantian2'); game.players[i].popup('boss_biantian2');
} }
@ -1382,7 +1382,7 @@ character.boss={
globalFrom:function(from,to,distance){ globalFrom:function(from,to,distance){
if(to.isEnemyOf(from)) return; if(to.isEnemyOf(from)) return;
for(var i=0;i<game.players.length;i++){ for(var i=0;i<game.players.length;i++){
if(game.players[i].skills.contains('boss_jingfan')&& if(game.players[i].hasSkill('boss_jingfan')&&
game.players[i].isFriendOf(from)&&game.players[i]!=from){ game.players[i].isFriendOf(from)&&game.players[i]!=from){
return distance-1; return distance-1;
} }
@ -1401,7 +1401,7 @@ character.boss={
globalFixed:true, globalFixed:true,
filter:function(event){ filter:function(event){
if(lib.config.mode!='boss') return false; if(lib.config.mode!='boss') return false;
return event.player==game.boss&&event.player.skills.contains('boss_bianshen2'); return event.player==game.boss&&event.player.hasSkill('boss_bianshen2');
}, },
content:function(){ content:function(){
'step 0' 'step 0'
@ -1421,7 +1421,7 @@ character.boss={
globalFixed:true, globalFixed:true,
filter:function(event){ filter:function(event){
if(lib.config.mode!='boss') return false; if(lib.config.mode!='boss') return false;
return event.player==game.boss&&event.player.skills.contains('boss_bianshen3'); return event.player==game.boss&&event.player.hasSkill('boss_bianshen3');
}, },
content:function(){ content:function(){
'step 0' 'step 0'
@ -1441,7 +1441,7 @@ character.boss={
globalFixed:true, globalFixed:true,
filter:function(event){ filter:function(event){
if(lib.config.mode!='boss') return false; if(lib.config.mode!='boss') return false;
return event.player==game.boss&&event.player.skills.contains('boss_bianshen4'); return event.player==game.boss&&event.player.hasSkill('boss_bianshen4');
}, },
content:function(){ content:function(){
'step 0' 'step 0'
@ -1704,7 +1704,7 @@ character.boss={
target:function(card,player,target,current){ target:function(card,player,target,current){
if(target.get('e','2')) return; if(target.get('e','2')) return;
if(card.name=='sha'){ if(card.name=='sha'){
if(card.nature=='fire'||player.skills.contains('zhuque_skill')) return 2; if(card.nature=='fire'||player.hasSkill('zhuque_skill')) return 2;
} }
if(get.tag(card,'fireDamage')&&current<0) return 2; if(get.tag(card,'fireDamage')&&current<0) return 2;
} }
@ -1756,7 +1756,7 @@ character.boss={
forced:true, forced:true,
globalFixed:true, globalFixed:true,
filter:function(event,player){ filter:function(event,player){
return event.player.skills.contains('boss_minbao')&&event.player.isDead(); return event.player.hasSkill('boss_minbao')&&event.player.isDead();
}, },
content:function(){ content:function(){
trigger.player.line(player,'fire'); trigger.player.line(player,'fire');
@ -1832,7 +1832,7 @@ character.boss={
forced:true, forced:true,
globalFixed:true, globalFixed:true,
filter:function(event,player){ filter:function(event,player){
return player.num('e')>0&&event.player.skills.contains('boss_shanbeng')&&event.player.isDead(); return player.num('e')>0&&event.player.hasSkill('boss_shanbeng')&&event.player.isDead();
}, },
content:function(){ content:function(){
player.discard(player.get('e')); player.discard(player.get('e'));
@ -1975,11 +1975,11 @@ character.boss={
} }
var be=target.num('e',{color:'black'}); var be=target.num('e',{color:'black'});
if(target.num('h','shan')&&be){ if(target.num('h','shan')&&be){
if(!target.skills.contains('guidao')) return 0; if(!target.hasSkill('guidao')) return 0;
return [0,hastarget?target.num('he')/2:0]; return [0,hastarget?target.num('he')/2:0];
} }
if(target.num('h','shan')&&target.num('h')>2){ if(target.num('h','shan')&&target.num('h')>2){
if(!target.skills.contains('guidao')) return 0; if(!target.hasSkill('guidao')) return 0;
return [0,hastarget?target.num('h')/4:0]; return [0,hastarget?target.num('h')/4:0];
} }
if(target.num('h')>3||(be&&target.num('h')>=2)){ if(target.num('h')>3||(be&&target.num('h')>=2)){
@ -1991,7 +1991,7 @@ character.boss={
if(target.num('h')==1&&!be){ if(target.num('h')==1&&!be){
return [1.2,0]; return [1.2,0];
} }
if(!target.skills.contains('guidao')) return [1,0.05]; if(!target.hasSkill('guidao')) return [1,0.05];
return [1,Math.min(0.5,(target.num('h')+be)/4)]; return [1,Math.min(0.5,(target.num('h')+be)/4)];
} }
} }

View File

@ -100,7 +100,7 @@ character.extra={
trigger:{source:'dieAfter'}, trigger:{source:'dieAfter'},
forced:true, forced:true,
filter:function(event,player){ filter:function(event,player){
return !player.skills.contains('lianpo2'); return !player.hasSkill('lianpo2');
}, },
content:function(){ content:function(){
player.addSkill('lianpo2'); player.addSkill('lianpo2');
@ -193,7 +193,7 @@ character.extra={
audio:2, audio:2,
enable:'phaseUse', enable:'phaseUse',
filter:function(event,player){ filter:function(event,player){
return player.storage.baonu>=2&&!player.skills.contains('wushuang'); return player.storage.baonu>=2&&!player.hasSkill('wushuang');
}, },
content:function(){ content:function(){
player.storage.baonu-=2; player.storage.baonu-=2;
@ -244,10 +244,10 @@ character.extra={
maixie:true, maixie:true,
effect:{ effect:{
target:function(card,player,target){ target:function(card,player,target){
if(player.skills.contains('jueqing')) return [1,-2]; if(player.hasSkill('jueqing')) return [1,-2];
if(get.tag(card,'damage')){ if(get.tag(card,'damage')){
if(target.hp==target.maxHp){ if(target.hp==target.maxHp){
if(!target.skills.contains('jilue')){ if(!target.hasSkill('jilue')){
return [0,1]; return [0,1];
} }
return [0.7,1]; return [0.7,1];
@ -259,7 +259,7 @@ character.extra={
if(_status.currentPhase!=player) return; if(_status.currentPhase!=player) return;
if(get.type(card)=='basic'||get.type(card,'trick')=='trick') return; if(get.type(card)=='basic'||get.type(card,'trick')=='trick') return;
if(player.hp<=2) return; if(player.hp<=2) return;
if(!player.skills.contains('jilue')||player.storage.renjie==0){ if(!player.hasSkill('jilue')||player.storage.renjie==0){
return [0,0,0,0]; return [0,0,0,0];
} }
} }
@ -497,7 +497,7 @@ character.extra={
effect:{ effect:{
target:function(card,player,target,current){ target:function(card,player,target,current){
if(target.hp<=1&&get.tag(card,'damage')){ if(target.hp<=1&&get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return [1,-5]; if(player.hasSkill('jueqing')) return [1,-5];
var hasfriend=false; var hasfriend=false;
for(var i=0;i<game.players.length;i++){ for(var i=0;i<game.players.length;i++){
if(game.players[i]!=target&&ai.get.attitude(game.players[i],target)>=0){ if(game.players[i]!=target&&ai.get.attitude(game.players[i],target)>=0){
@ -569,7 +569,7 @@ character.extra={
effect:{ effect:{
target:function(card,player,target){ target:function(card,player,target){
if(get.tag(card,'damage')){ if(get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return [1,-2]; if(player.hasSkill('jueqing')) return [1,-2];
if(target.hp==1) return; if(target.hp==1) return;
if(target.isTurnedOver()) return [0,3]; if(target.isTurnedOver()) return [0,3];
var num=0; var num=0;
@ -696,7 +696,7 @@ character.extra={
player.chooseTarget('选择角色获得大雾标记', player.chooseTarget('选择角色获得大雾标记',
[1,Math.min(game.players.length,player.storage.qixing.length)]).ai=function(target){ [1,Math.min(game.players.length,player.storage.qixing.length)]).ai=function(target){
if(target.isMin()) return 0; if(target.isMin()) return 0;
if(target.skills.contains('biantian2')) return 0; if(target.hasSkill('biantian2')) return 0;
var att=ai.get.attitude(player,target); var att=ai.get.attitude(player,target);
if(att>=4){ if(att>=4){
if(target.hp==1&&target.maxHp>2) return att; if(target.hp==1&&target.maxHp>2) return att;
@ -763,11 +763,11 @@ character.extra={
silent:true, silent:true,
content:function(){ content:function(){
for(var i=0;i<game.players.length;i++){ for(var i=0;i<game.players.length;i++){
if(game.players[i].skills.contains('dawu2')){ if(game.players[i].hasSkill('dawu2')){
game.players[i].removeSkill('dawu2'); game.players[i].removeSkill('dawu2');
game.players[i].popup('dawu2'); game.players[i].popup('dawu2');
} }
if(game.players[i].skills.contains('kuangfeng2')){ if(game.players[i].hasSkill('kuangfeng2')){
game.players[i].removeSkill('kuangfeng2'); game.players[i].removeSkill('kuangfeng2');
game.players[i].popup('kuangfeng2'); game.players[i].popup('kuangfeng2');
} }

View File

@ -192,7 +192,7 @@ character.hearth={
'step 1' 'step 1'
var skill1=result.buttons[0].name; var skill1=result.buttons[0].name;
var skill2=result.buttons[1].name; var skill2=result.buttons[1].name;
if(target.skills.contains(skill1)){ if(target.hasSkill(skill1)){
target.removeSkill(skill1); target.removeSkill(skill1);
target.addSkill(skill2); target.addSkill(skill2);
target.storage.peiyu[skill2]=player; target.storage.peiyu[skill2]=player;
@ -936,7 +936,7 @@ character.hearth={
filter:function(event,player){ filter:function(event,player){
return event.targets&&event.targets.length==1&& return event.targets&&event.targets.length==1&&
event.target!=event.player&&_status.currentPhase==event.player&& event.target!=event.player&&_status.currentPhase==event.player&&
!event.player.skills.contains('yiwen2'); !event.player.hasSkill('yiwen2');
}, },
forced:true, forced:true,
content:function(){ content:function(){
@ -1107,7 +1107,7 @@ character.hearth={
trigger:{player:'phaseBegin'}, trigger:{player:'phaseBegin'},
frequent:true, frequent:true,
filter:function(event,player){ filter:function(event,player){
return !player.skills.contains('xunbao2'); return !player.hasSkill('xunbao2');
}, },
priority:1, priority:1,
// filterCard:true, // filterCard:true,
@ -1588,7 +1588,7 @@ character.hearth={
effect:{ effect:{
target:function(card,player,target){ target:function(card,player,target){
if(get.tag(card,'damage')){ if(get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return [1,-2]; if(player.hasSkill('jueqing')) return [1,-2];
if(!target.hasFriend()) return; if(!target.hasFriend()) return;
var nh=target.num('h'); var nh=target.num('h');
if(nh>5) return [1,-1]; if(nh>5) return [1,-1];
@ -2382,7 +2382,7 @@ character.hearth={
forced:true, forced:true,
globalFixed:true, globalFixed:true,
filter:function(event,player){ filter:function(event,player){
return event.player.skills.contains('bingshi')&&event.player.isDead(); return event.player.hasSkill('bingshi')&&event.player.isDead();
}, },
content:function(){ content:function(){
trigger.player.line(player,'thunder'); trigger.player.line(player,'thunder');
@ -2624,7 +2624,7 @@ character.hearth={
shengyan:{ shengyan:{
trigger:{global:'recoverEnd'}, trigger:{global:'recoverEnd'},
filter:function(event,player){ filter:function(event,player){
return !player.skills.contains('shengyan2')&&event.player.hp<event.player.maxHp; return !player.hasSkill('shengyan2')&&event.player.hp<event.player.maxHp;
}, },
prompt:function(event,player){ prompt:function(event,player){
return '是否对'+get.translation(event.player)+'发动【圣言】?'; return '是否对'+get.translation(event.player)+'发动【圣言】?';
@ -2699,7 +2699,7 @@ character.hearth={
effect:{ effect:{
target:function(card,player){ target:function(card,player){
if(get.tag(card,'damage')){ if(get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return [1,-1]; if(player.hasSkill('jueqing')) return [1,-1];
return 0.8; return 0.8;
} }
} }
@ -2954,7 +2954,7 @@ character.hearth={
bianxing:{ bianxing:{
trigger:{global:'useCard'}, trigger:{global:'useCard'},
filter:function(event,player){ filter:function(event,player){
if(player.skills.contains('bianxing2')) return false; if(player.hasSkill('bianxing2')) return false;
if(event.player==player) return false; if(event.player==player) return false;
if(_status.currentPhase!=event.player) return false; if(_status.currentPhase!=event.player) return false;
if(!event.targets) return false; if(!event.targets) return false;
@ -3023,7 +3023,7 @@ character.hearth={
bingjia:{ bingjia:{
enable:'phaseUse', enable:'phaseUse',
filter:function(event,player){ filter:function(event,player){
return !player.skills.contains('bingjia2'); return !player.hasSkill('bingjia2');
}, },
filterCard:true, filterCard:true,
check:function(card){ check:function(card){
@ -3135,7 +3135,7 @@ character.hearth={
return player.num('h',{color:'black'})>0; return player.num('h',{color:'black'})>0;
}, },
filterTarget:function(card,player,target){ filterTarget:function(card,player,target){
return player!=target&&!target.skills.contains('mdzhoufu2'); return player!=target&&!target.hasSkill('mdzhoufu2');
}, },
prepare:function(cards,player){ prepare:function(cards,player){
player.$throw(cards); player.$throw(cards);
@ -3339,7 +3339,7 @@ character.hearth={
filter:function(event,player){ filter:function(event,player){
if(event.player==player) return false; if(event.player==player) return false;
if(_status.currentPhase!=event.player) return false; if(_status.currentPhase!=event.player) return false;
if(event.player.skills.contains('mengun2')) return false; if(event.player.hasSkill('mengun2')) return false;
if(get.itemtype(event.card)!='card') return false; if(get.itemtype(event.card)!='card') return false;
if(!player.num('h',{suit:get.suit(event.card)})) return false; if(!player.num('h',{suit:get.suit(event.card)})) return false;
return get.type(event.card)=='basic'; return get.type(event.card)=='basic';
@ -3448,7 +3448,7 @@ character.hearth={
trigger:{player:'discardAfter'}, trigger:{player:'discardAfter'},
direct:true, direct:true,
filter:function(event,player){ filter:function(event,player){
if(player.skills.contains('tzhenji2')){ if(player.hasSkill('tzhenji2')){
return false; return false;
} }
if(event.cards){ if(event.cards){
@ -3581,7 +3581,7 @@ character.hearth={
ai:{ ai:{
effect:function(card,player){ effect:function(card,player){
if(get.tag(card,'damage')){ if(get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return [1,1]; if(player.hasSkill('jueqing')) return [1,1];
return 1.2; return 1.2;
} }
}, },
@ -3727,7 +3727,7 @@ character.hearth={
else if(result.buttons.length==2){ else if(result.buttons.length==2){
var skill1=result.buttons[0].name; var skill1=result.buttons[0].name;
var skill2=result.buttons[1].name; var skill2=result.buttons[1].name;
if(player.skills.contains(skill1)){ if(player.hasSkill(skill1)){
player.removeSkill(skill1); player.removeSkill(skill1);
player.addSkill(skill2); player.addSkill(skill2);
} }
@ -3744,7 +3744,7 @@ character.hearth={
}, },
effect:function(card,player){ effect:function(card,player){
if(get.tag(card,'damage')){ if(get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return; if(player.hasSkill('jueqing')) return;
return 1.2; return 1.2;
} }
}, },
@ -4341,7 +4341,7 @@ character.hearth={
value:10, value:10,
result:{ result:{
target:function(player,target){ target:function(player,target){
if(target.skills.contains('hsmengjing_mengye')) return 0.5; if(target.hasSkill('hsmengjing_mengye')) return 0.5;
return -target.num('he'); return -target.num('he');
} }
} }

View File

@ -143,7 +143,7 @@ character.shenhua={
if(_status.event.name=='xiangle') return; if(_status.event.name=='xiangle') return;
var bs=player.get('h',{type:'basic'}); var bs=player.get('h',{type:'basic'});
if(bs.length<2) return 0; if(bs.length<2) return 0;
if(player.skills.contains('jiu')||player.skills.contains('tianxianjiu')) return; if(player.hasSkill('jiu')||player.hasSkill('tianxianjiu')) return;
if(bs.length<=3&&player.num('h','sha')<=1){ if(bs.length<=3&&player.num('h','sha')<=1){
for(var i=0;i<bs.length;i++){ for(var i=0;i<bs.length;i++){
if(bs[i].name!='sha'&&ai.get.value(bs[i])<7){ if(bs[i].name!='sha'&&ai.get.value(bs[i])<7){
@ -232,7 +232,7 @@ character.shenhua={
player.maxHp++; player.maxHp++;
player.update(); player.update();
player.recover(); player.recover();
if(player.skills.contains('ruoyu')){ if(player.hasSkill('ruoyu')){
player.addSkill('jijiang'); player.addSkill('jijiang');
} }
else{ else{
@ -1455,7 +1455,7 @@ character.shenhua={
effect:{ effect:{
target:function(card,player,target){ target:function(card,player,target){
if(get.tag(card,'damage')){ if(get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return [1,-2]; if(player.hasSkill('jueqing')) return [1,-2];
if(target.hp<=1) return; if(target.hp<=1) return;
var hastarget=false; var hastarget=false;
var hasfriend=false; var hasfriend=false;
@ -2072,7 +2072,7 @@ character.shenhua={
if(ai.get.equipValue(card)<=8) return 0; if(ai.get.equipValue(card)<=8) return 0;
} }
if(target.get('e','2')) return; if(target.get('e','2')) return;
if(player.skills.contains('unequip')) return; if(player.hasSkill('unequip')) return;
if(get.tag(card,'respondShan')) return [0.5,0]; if(get.tag(card,'respondShan')) return [0.5,0];
} }
} }
@ -2243,7 +2243,7 @@ character.shenhua={
return 0; return 0;
}, },
player:function(player,target){ player:function(player,target){
if(target.skills.contains('jueqing')) return -10; if(target.hasSkill('jueqing')) return -10;
var mn=1; var mn=1;
var hs=player.get('h'); var hs=player.get('h');
for(var i=0;i<hs.length;i++){ for(var i=0;i<hs.length;i++){
@ -2299,7 +2299,7 @@ character.shenhua={
effect:{ effect:{
target:function(card,player,target,current){ target:function(card,player,target,current){
if(get.tag(card,'damage')&&target.hp>1){ if(get.tag(card,'damage')&&target.hp>1){
if(player.skills.contains('jueqing')) return [1,-2]; if(player.hasSkill('jueqing')) return [1,-2];
var max=0; var max=0;
for(var i=0;i<game.players.length;i++){ for(var i=0;i<game.players.length;i++){
if(ai.get.attitude(target,game.players[i])>0){ if(ai.get.attitude(target,game.players[i])>0){
@ -2601,7 +2601,7 @@ character.shenhua={
content:function(){ content:function(){
"step 0"; "step 0";
player.chooseTarget('是否发动【'+get.skillTranslation('releiji',player)+'】?').ai=function(target){ player.chooseTarget('是否发动【'+get.skillTranslation('releiji',player)+'】?').ai=function(target){
if(target.skills.contains('hongyan')) return 0; if(target.hasSkill('hongyan')) return 0;
return ai.get.damageEffect(target,_status.event.player,_status.event.player,'thunder'); return ai.get.damageEffect(target,_status.event.player,_status.event.player,'thunder');
}; };
"step 1" "step 1"
@ -2639,11 +2639,11 @@ character.shenhua={
} }
var be=target.num('e',{color:'black'}); var be=target.num('e',{color:'black'});
if(target.num('h','shan')&&be){ if(target.num('h','shan')&&be){
if(!target.skills.contains('guidao')) return 0; if(!target.hasSkill('guidao')) return 0;
return [0,hastarget?target.num('he')/2:0]; return [0,hastarget?target.num('he')/2:0];
} }
if(target.num('h','shan')&&target.num('h')>2){ if(target.num('h','shan')&&target.num('h')>2){
if(!target.skills.contains('guidao')) return 0; if(!target.hasSkill('guidao')) return 0;
return [0,hastarget?target.num('h')/4:0]; return [0,hastarget?target.num('h')/4:0];
} }
if(target.num('h')>3||(be&&target.num('h')>=2)){ if(target.num('h')>3||(be&&target.num('h')>=2)){
@ -2655,7 +2655,7 @@ character.shenhua={
if(target.num('h')==1&&!be){ if(target.num('h')==1&&!be){
return [1.2,0]; return [1.2,0];
} }
if(!target.skills.contains('guidao')) return [1,0.05]; if(!target.hasSkill('guidao')) return [1,0.05];
return [1,Math.min(0.5,(target.num('h')+be)/4)]; return [1,Math.min(0.5,(target.num('h')+be)/4)];
} }
} }
@ -2850,7 +2850,7 @@ character.shenhua={
ai:{ ai:{
effect:{ effect:{
target:function(card,player,target){ target:function(card,player,target){
if(player.skills.contains('jueqing')) return; if(player.hasSkill('jueqing')) return;
if(get.tag(card,'damage')&&target.num('h')>1) return 0.7; if(get.tag(card,'damage')&&target.num('h')>1) return 0.7;
} }
}, },
@ -2951,7 +2951,7 @@ character.shenhua={
content:function(){ content:function(){
"step 0"; "step 0";
player.chooseTarget('是否发动【雷击】?').ai=function(target){ player.chooseTarget('是否发动【雷击】?').ai=function(target){
if(target.skills.contains('hongyan')) return 0; if(target.hasSkill('hongyan')) return 0;
return ai.get.damageEffect(target,_status.event.player,_status.event.player,'thunder'); return ai.get.damageEffect(target,_status.event.player,_status.event.player,'thunder');
}; };
"step 1" "step 1"

View File

@ -106,7 +106,7 @@ character.standard={
maixie:true, maixie:true,
effect:{ effect:{
target:function(card,player){ target:function(card,player){
if(player.skills.contains('jueqing')) return [1,-1]; if(player.hasSkill('jueqing')) return [1,-1];
if(get.tag(card,'damage')) return [1,0.5]; if(get.tag(card,'damage')) return [1,0.5];
} }
} }
@ -133,7 +133,7 @@ character.standard={
effect:{ effect:{
target:function(card,player,target){ target:function(card,player,target){
if(player.num('he')>1&&get.tag(card,'damage')){ if(player.num('he')>1&&get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return [1,-1.5]; if(player.hasSkill('jueqing')) return [1,-1.5];
if(ai.get.attitude(target,player)<0) return [1,1]; if(ai.get.attitude(target,player)<0) return [1,1];
} }
} }
@ -230,7 +230,7 @@ character.standard={
ai:{ ai:{
result:{ result:{
target:function(card,player,target){ target:function(card,player,target){
if(player.skills.contains('jueqing')) return [1,-1]; if(player.hasSkill('jueqing')) return [1,-1];
if(get.tag(card,'damage')&&ai.get.damageEffect(target,player,player)>0) return [1,0,0,-1.5]; if(get.tag(card,'damage')&&ai.get.damageEffect(target,player,player)>0) return [1,0,0,-1.5];
} }
} }
@ -256,7 +256,7 @@ character.standard={
},function(target){ },function(target){
if(!_status.event.aicheck) return 0; if(!_status.event.aicheck) return 0;
var att=ai.get.attitude(_status.event.player,target); var att=ai.get.attitude(_status.event.player,target);
if(target.skills.contains('tuntian')) return att/10; if(target.hasSkill('tuntian')) return att/10;
return 1-att; return 1-att;
}).set('aicheck',check); }).set('aicheck',check);
"step 1" "step 1"
@ -377,7 +377,7 @@ character.standard={
effect:{ effect:{
target:function(card,player,target){ target:function(card,player,target){
if(get.tag(card,'damage')){ if(get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return [1,-2]; if(player.hasSkill('jueqing')) return [1,-2];
if(!target.hasFriend()) return; if(!target.hasFriend()) return;
if(target.hp>=4) return [1,get.tag(card,'damage')*2]; if(target.hp>=4) return [1,get.tag(card,'damage')*2];
if(target.hp==3) return [1,get.tag(card,'damage')*1.5]; if(target.hp==3) return [1,get.tag(card,'damage')*1.5];
@ -620,7 +620,7 @@ character.standard={
filter:function(event,player){ filter:function(event,player){
if(event.filterCard&&!event.filterCard({name:'sha'},player)) return false; if(event.filterCard&&!event.filterCard({name:'sha'},player)) return false;
if(!player.hasZhuSkill('jijiang')) return false; if(!player.hasZhuSkill('jijiang')) return false;
if(player.skills.contains('jijiang3')) return false; if(player.hasSkill('jijiang3')) return false;
for(var i=0;i<game.players.length;i++){ for(var i=0;i<game.players.length;i++){
if(game.players[i].group=='shu'&&game.players[i]!=player){ if(game.players[i].group=='shu'&&game.players[i]!=player){
return lib.filter.cardUsable({name:'sha'},player); return lib.filter.cardUsable({name:'sha'},player);
@ -684,7 +684,7 @@ character.standard={
ai:{ ai:{
result:{ result:{
target:function(player,target){ target:function(player,target){
if(player.skills.contains('jijiang3')) return 0; if(player.hasSkill('jijiang3')) return 0;
return ai.get.effect(target,{name:'sha'},player,target); return ai.get.effect(target,{name:'sha'},player,target);
} }
}, },

View File

@ -3558,7 +3558,7 @@
} }
if(!lib.node.http) lib.node.http=require('http'); if(!lib.node.http) lib.node.http=require('http');
if(!lib.node.https) lib.node.https=require('https'); if(!lib.node.https) lib.node.https=require('https');
var request = (url.indexOf('https'==0)?lib.node.https:lib.node.http).get(url, function(response) { var request = (url.indexOf('https')==0?lib.node.https:lib.node.http).get(url, function(response) {
var stream=response.pipe(file); var stream=response.pipe(file);
stream.on('finish',onsuccess); stream.on('finish',onsuccess);
stream.on('error',onerror); stream.on('error',onerror);
@ -9975,6 +9975,14 @@
addSkillTrigger:function(skill,hidden){ addSkillTrigger:function(skill,hidden){
var info=lib.skill[skill]; var info=lib.skill[skill];
if(!info) return; if(!info) return;
if(typeof info.group=='string'){
this.addSkillTrigger(info.group,hidden);
}
else if(Array.isArray(info.group)){
for(var i=0;i<info.group.length;i++){
this.addSkillTrigger(info.group[i],hidden);
}
}
if(info.global&&(!hidden||info.globalSilent)){ if(info.global&&(!hidden||info.globalSilent)){
if(typeof info.global=='string'){ if(typeof info.global=='string'){
game.addGlobalSkill(info.global,this); game.addGlobalSkill(info.global,this);
@ -10107,6 +10115,55 @@
} }
return this; return this;
}, },
removeSkillTrigger:function(skill){
var info=lib.skill[skill];
if(!info) return;
if(typeof info.group=='string'){
this.removeSkillTrigger(info.group);
}
else if(Array.isArray(info.group)){
for(var i=0;i<info.group.length;i++){
this.removeSkillTrigger(info.group[i]);
}
}
if(info.trigger){
var playerid=this.playerid;
var removeTrigger=function(i,evt){
if(i=='global'){
for(var j in lib.hook.globaltrigger){
if(lib.hook.globaltrigger[j][playerid]){
lib.hook.globaltrigger[j][playerid].remove(skill);
if(lib.hook.globaltrigger[j][playerid].length==0){
delete lib.hook.globaltrigger[j][playerid];
}
if(get.emptyobj(lib.hook.globaltrigger[j])){
delete lib.hook.globaltrigger[j];
}
}
}
}
else{
var name=playerid+'_'+i+'_'+evt;
if(lib.hook[name]){
lib.hook[name].remove(skill);
if(lib.hook[name].length==0){
delete lib.hook[name];
}
}
}
}
for(var i in info.trigger){
if(typeof info.trigger[i]=='string'){
removeTrigger(i,info.trigger[i]);
}
else if(Array.isArray(info.trigger)){
for(var j=0;j<info.trigger.length;j++){
removeTrigger(i,info.trigger[i][j]);
}
}
}
}
},
removeSkill:function(skill){ removeSkill:function(skill){
if(Array.isArray(skill)){ if(Array.isArray(skill)){
for(var i=0;i<skill.length;i++){ for(var i=0;i<skill.length;i++){
@ -10117,46 +10174,14 @@
this.unmarkSkill(skill); this.unmarkSkill(skill);
this.skills.remove(skill); this.skills.remove(skill);
this.checkConflict(); this.checkConflict();
this.initedSkills.remove(skill);
delete this.tempSkills[skill]; delete this.tempSkills[skill];
var info=lib.skill[skill]; var info=lib.skill[skill];
if(info){ if(info){
if(info.onremove){ if(info.onremove){
info.onremove(this); info.onremove(this);
} }
if(info.trigger){ this.removeSkillTrigger(skill);
var playerid=this.playerid;
var removeTrigger=function(i,evt){
if(i=='global'){
for(var j in lib.hook.globaltrigger){
if(lib.hook.globaltrigger[j][playerid]){
lib.hook.globaltrigger[j][playerid].remove(skill);
if(lib.hook.globaltrigger[j][playerid].length==0){
delete lib.hook.globaltrigger[j][playerid];
}
}
}
}
else{
var name=playerid+'_'+i+'_'+evt;
if(lib.hook[name]){
lib.hook[name].remove(skill);
if(lib.hook[name].length==0){
delete lib.hook[name];
}
}
}
}
for(var i in info.trigger){
if(typeof info.trigger[i]=='string'){
removeTrigger(i,info.trigger[i]);
}
else if(Array.isArray(info.trigger)){
for(var j=0;j<info.trigger.length;j++){
removeTrigger(i,info.trigger[i][j]);
}
}
}
}
} }
} }
return skill; return skill;
@ -12078,25 +12103,6 @@
if(name=='gameStart'){ if(name=='gameStart'){
_status.gameStarted=true; _status.gameStarted=true;
} }
for(var i=0;i<game.players.length;i++){
for(var j in game.players[i].tempSkills){
var expire=game.players[i].tempSkills[j];
if(expire==name||
(get.objtype(expire)=='array'&&expire.contains(name))||
(typeof expire=='function'&&expire(event,game.players[i],name))){
delete game.players[i].tempSkills[j];
game.players[i].removeSkill(j);
}
else if(typeof expire=='object'){
if(expire.player==name&&event.player==game.players[i]||
expire.target==name&&event.target==game.players[i]||
expire.source==name&&event.source==game.players[i]){
delete game.players[i].tempSkills[j];
game.players[i].removeSkill(j);
}
}
}
}
var event=this; var event=this;
var start=event.player||game.me||game.players[0]; var start=event.player||game.me||game.players[0];
if(!game.players.contains(start)){ if(!game.players.contains(start)){
@ -12104,48 +12110,77 @@
} }
var list=[]; var list=[];
var roles=['player','source','target']; var roles=['player','source','target'];
for(var i=0;i<roles.length;i++){ var addList=function(skill,player){
if(event[roles[i]]){ var info=lib.skill[skill];
var triggername=event[roles[i]].playerid+'_'+roles[i]+'_'+name; var num=0;
if(lib.hook[triggername]){ if(info.priority){
for(var j=0;j<lib.hook[triggername].length;j++){ num=info.priority*100;
list.push([lib.hook[triggername][j],event[roles[i]]]);
}
}
triggername=roles[i]+'_'+name;
if(lib.hook.globalskill[triggername]){
for(var j=0;j<lib.hook.globalskill[triggername].length;j++){
list.push([lib.hook.globalskill[triggername][j],event[roles[i]]]);
}
}
} }
} if(info.forced){
var triggername='global_'+name; num+=50;
if(lib.hook.globalskill[triggername]){
for(var i=0;i<game.players.length;i++){
for(var j=0;j<lib.hook.globalskill[triggername].length;j++){
list.push([lib.hook.globalskill[triggername][j],game.players[i]]);
}
} }
} list.push([skill,player,num]);
};
var totalPopulation=game.players.length+game.dead.length+1;
var player=start;
var globalskill='global_'+name;
var map=_status.connectMode?lib.playerOL:game.playerMap; var map=_status.connectMode?lib.playerOL:game.playerMap;
for(var i in lib.hook.globaltrigger[name]){ for(var iwhile=0;iwhile<totalPopulation;iwhile++){
if(map[i]&&map[i].isAlive()){ for(var j in player.tempSkills){
for(var j=0;j<lib.hook.globaltrigger[name][i].length;j++){ var expire=player.tempSkills[j];
list.push([lib.hook.globaltrigger[name][i][j],map[i]]); if(expire==name||
(get.objtype(expire)=='array'&&expire.contains(name))||
(typeof expire=='function'&&expire(event,player,name))){
delete player.tempSkills[j];
player.removeSkill(j);
}
else if(typeof expire=='object'){
if(expire.player==name&&event.player==player||
expire.target==name&&event.target==player||
expire.source==name&&event.source==player){
delete player.tempSkills[j];
player.removeSkill(j);
}
}
}
for(var i=0;i<roles.length;i++){
if(event[roles[i]]==player){
var triggername=player.playerid+'_'+roles[i]+'_'+name;
if(lib.hook[triggername]){
for(var j=0;j<lib.hook[triggername].length;j++){
addList(lib.hook[triggername][j],player);
}
}
triggername=roles[i]+'_'+name;
if(lib.hook.globalskill[triggername]){
for(var j=0;j<lib.hook.globalskill[triggername].length;j++){
addList(lib.hook.globalskill[triggername][j],player);
}
}
} }
} }
} if(lib.hook.globalskill[globalskill]){
list.sort(function(a,b){ for(var j=0;j<lib.hook.globalskill[globalskill].length;j++){
var priority=lib.sort.priority(a,b); addList(lib.hook.globalskill[globalskill][j],player);
if(priority) return priority; }
if(start){
return get.distance(start,a[1],'absolute')-get.distance(start,b[1],'absolute');
} }
return 0; for(var i in lib.hook.globaltrigger[name]){
if(map[i]==player){
for(var j=0;j<lib.hook.globaltrigger[name][i].length;j++){
addList(lib.hook.globaltrigger[name][i][j],map[i]);
}
}
}
player=player.next;
if(!player||player==start){
break;
}
}
list.sort(function(a,b){
return b[2]-a[2];
}); });
if(list.length){ if(list.length){
for(i=0;i<list.length;i++){ for(var i=0;i<list.length;i++){
game.createTrigger(name,list[i][0],list[i][1],event); game.createTrigger(name,list[i][0],list[i][1],event);
} }
} }
@ -21756,7 +21791,7 @@
} }
} }
page.classList.add('menu-buttons'); page.classList.add('menu-buttons');
if(mode.indexOf('mode_')!=0&&!lib.config.customCardPack[mode]){ if(!connectMenu&&mode.indexOf('mode_')!=0&&!lib.config.customCardPack[mode]){
ui.create.div('.config.more','隐藏卡牌包',page,function(){ ui.create.div('.config.more','隐藏卡牌包',page,function(){
if(this.innerHTML=='隐藏卡牌包'){ if(this.innerHTML=='隐藏卡牌包'){
this.innerHTML='卡牌包将在重启后隐藏'; this.innerHTML='卡牌包将在重启后隐藏';

View File

@ -1,5 +1,5 @@
window.noname_update={ window.noname_update={
version:'1.8.20.4', version:'1.8.20.5',
changeLog:[ changeLog:[
'修bug' '修bug'
], ],