This commit is contained in:
libccy 2017-01-15 14:58:39 +08:00
parent 555c33c7cb
commit b0eb4eaf23
12 changed files with 276 additions and 42 deletions

View File

@ -217,7 +217,7 @@ card.sp={
},
content:function(){
'step 0'
var next=player.chooseToUse(get.prompt('yinyueqiang'),{name:'sha'});
var next=player.chooseToUse(get.prompt('yinyueqiang'),{name:'sha'}).aidelay=true;
next.logSkill='yinyueqiang';
next.noButton=true;
'step 1'

View File

@ -992,10 +992,15 @@ card.standard={
},
content:function(){
"step 0"
targets[0].chooseToUse('对'+get.translation(targets[1])+'使用一张杀,或令'+get.translation(player)+'获得你的武器牌',
{name:'sha'},targets[1],-1).set('targetRequired',true);
if(!targets[0].hasSha()){
event.directfalse=true;
}
else{
targets[0].chooseToUse('对'+get.translation(targets[1])+'使用一张杀,或令'+get.translation(player)+'获得你的武器牌',
{name:'sha'},targets[1],-1).set('targetRequired',true);
}
"step 1"
if(result.bool==false){
if(event.directfalse||result.bool==false){
player.gain(targets[0].get('e',{subtype:'equip1'}),targets[0]);
targets[0].$give(targets[0].get('e',{subtype:'equip1'}),player);
}

View File

@ -4631,16 +4631,15 @@ character.hearth={
derivation:'hs_ysera',
filterTarget:true,
content:function(){
target.damage(2);
player.loseHp();
target.damage();
},
ai:{
order:5,
result:{
target:-2
target:-1
},
tag:{
damage:2
damage:1
},
useful:5,
value:10,
@ -4741,7 +4740,7 @@ character.hearth={
return target.hp<target.maxHp;
},
content:function(){
target.recover(2);
target.recover();
},
ai:{
order:6,
@ -4749,12 +4748,7 @@ character.hearth={
useful:[7,4],
result:{
target:function(player,target){
var eff=ai.get.recoverEffect(target,player,target);
if(eff<=0) return 0;
var num=target.maxHp-target.hp;
if(num<1) return 0;
if(target.hp==1) return num+0.5;
return num;
return ai.get.recoverEffect(target,player,target);
}
}
}
@ -5034,9 +5028,9 @@ character.hearth={
hsmengjing:'梦境',
hsmengjing_card_config:'梦境',
hsmengjing_feicuiyoulong:'翡翠幼龙',
hsmengjing_feicuiyoulong_info:'出牌阶段对任意一名角色使用,对目标造成2点伤害然后流失一点体力',
hsmengjing_feicuiyoulong_info:'出牌阶段对任意一名角色使用,对目标造成一点伤害',
hsmengjing_huanxiaojiemei:'欢笑姐妹',
hsmengjing_huanxiaojiemei_info:'出牌阶段对一名已受伤角色使用,令目标恢复点体力',
hsmengjing_huanxiaojiemei_info:'出牌阶段对一名已受伤角色使用,令目标恢复点体力',
hsmengjing_suxing:'苏醒',
hsmengjing_suxing_info:'令所有其他角色流失一点体力并随机弃置两张牌',
hsmengjing_mengye:'梦魇',

View File

@ -136,6 +136,7 @@ window.characterRank={
],
am:[
'guohuanghou',
'swd_duanmeng',
'sunziliufang',
'hs_blingtron',
'hs_kcthun',
@ -220,7 +221,6 @@ window.characterRank={
'sunru',
'yxs_zhangsanfeng',
'yxs_nandinggeer',
'swd_duanmeng',
],
bp:[
'dongbai',

View File

@ -1242,8 +1242,7 @@ character.refresh={
direct:true,
filter:function(event,player){
return event.player.isAlive()&&event.player.getStat('damage')&&
lib.filter.targetEnabled({name:'sha'},player,event.player)&&
!lib.filter.autoRespondSha.call({player:player});
lib.filter.targetEnabled({name:'sha'},player,event.player)&&player.hasSha();
},
content:function(){
player.chooseToUse({name:'sha'},'诛害:是否对'+get.translation(trigger.player)+'使用一张杀?',

View File

@ -1541,7 +1541,7 @@ character.shenhua={
filter:function(event,player){
return (event.card&&event.card.name=='sha'&&
event.player.classList.contains('dead')==false&&
event.player.num('h')&&player.num('h'));
event.player.num('h')&&player.num('h'))&&event.player!=player;
},
check:function(event,player){
return ai.get.attitude(player,event.player)<0&&player.num('h')>1;

View File

@ -322,7 +322,7 @@ character.sp={
return 6-ai.get.value(card);
}
else if(type=='equip'){
if(!lib.filter.autoRespondSha.call({player:player})){
if(player.hasSha()){
for(var i=0;i<game.players.length;i++){
if(player.canUse('sha',game.players[i])&&
ai.get.attitude(player,game.players[i])<0&&

View File

@ -975,7 +975,7 @@ character.standard={
skillTagFilter:function(player){
if(!player.num('h','shan')) return false;
},
order:4,
order:3.1,
useful:-1,
value:-1
}

View File

@ -153,12 +153,18 @@ character.swd={
},
precontent:function(){
player.link();
// player.getStat().card.sha--;
},
filterCard:function(){return false},
selectCard:-1,
prompt:'横置武将牌,视为使用一张无视距离的杀',
ai:{
skillTagFilter:function(player){
order:function(){
// if(_status.event.player.num('h',{type:'equip'})) return 9;
return 3.15;
},
skillTagFilter:function(player,tag,arg){
if(arg!='use') return false;
if(player.isLinked()) return false;
},
respondSha:true,
@ -197,11 +203,55 @@ character.swd={
}
}
},
damage:{
trigger:{player:'damageEnd'},
filter:function(event,player){
return event.source&&event.source.isAlive()&&player.isLinked()&&
lib.filter.targetEnabled({name:'sha'},player,event.source);
},
check:function(event,player){
return ai.get.effect(event.source,{name:'sha'},player,player)>0;
},
logTarget:'source',
content:function(){
'step 0'
player.link();
'step 1'
player.useCard({name:'sha'},trigger.source);
}
},
use:{
trigger:{player:'loseEnd'},
direct:true,
filter:function(event,player){
return _status.currentPhase!=player&&player.isLinked()&&event.cards&&event.cards.length;
},
content:function(){
'step 0'
player.chooseTarget(get.prompt('xuanying'),function(card,player,target){
return lib.filter.targetEnabled({name:'sha'},player,target);
}).set('ai',function(target){
return ai.get.effect(target,{name:'sha'},_status.event.player);
});
'step 1'
if(result.bool){
player.logSkill('xuanying');
if(!event.isMine()) game.delay(0.5);
player.link();
player.useCard({name:'sha'},result.targets,false);
}
},
}
},
group:['xuanying_sha','xuanying_shan']
group:['xuanying_sha','xuanying_use'],
ai:{
threaten:function(player,target){
if(target.isLinked()) return 0.7;
return 1.4;
}
}
},
wendao:{
audio:2,
trigger:{player:['useCardAfter','respondAfter',]},
check:function(event,player){
return ai.get.attitude(player,_status.currentPhase)<=0;
@ -313,13 +363,16 @@ character.swd={
if(!player.hasFriend()) return 0;
var enemies=player.getEnemies();
if(enemies.length+1==game.players.length) return 0;
if('h',player.num(function(card){
var num=player.num('h',function(card){
return card.name=='sha'||get.color(card)=='red';
})<3) return 0;
});
if(num<2) return 0;
for(var i=0;i<enemies.length;i++){
if(player.canUse('sha',enemies[i])&&
ai.get.effect(enemies[i],{name:'sha'},player,player)>0&&
enemies[i].hp<=2&&!enemies[i].get('e','2')) return 1;
!enemies[i].get('e','2')&&num>enemies[i].hp&&enemies[i].hp<=2){
return 1;
}
}
return 0;
}
@ -666,6 +719,7 @@ character.swd={
prompt:'将一张红色牌当杀使用',
check:function(card){return 5-ai.get.value(card)},
ai:{
order:3.1,
skillTagFilter:function(player){
if(!player.num('he',{color:'red'})) return false;
},
@ -3773,7 +3827,7 @@ character.swd={
trigger:{global:'phaseBegin'},
direct:true,
filter:function(event,player){
return lib.filter.targetEnabled({name:'sha'},player,event.player)&&!lib.filter.autoRespondSha.call({player:player});
return lib.filter.targetEnabled({name:'sha'},player,event.player)&&player.hasSha();
},
content:function(){
"step 0"
@ -8314,7 +8368,7 @@ character.swd={
swd_xiyan:'犀衍',
xuanying:'旋影',
xuanying_info:'出牌阶段,你可以横置你的武将牌视为使用一张无视距离的杀;你可以竖置你的武将牌视为使用一张闪',
xuanying_info:'你可以横置你的武将牌,视为使用一张无视距离的杀;每当你于回合外失去牌,你可以竖置你的武将牌,视为使用一张无视距离的杀',
wendao:'问道',
wendao_info:'每当你于回合外使用或打出一张牌,你可以令当前回合角色弃置一张与之花色相同的牌,否则你获得其一张牌',
lingfeng:'凌锋',

View File

@ -3184,6 +3184,7 @@ character.yijiang={
popup:false,
silent:true,
content:function(){
if(!player.storage.huomo) player.storage.huomo={};
switch(trigger.card.name){
case 'sha':player.storage.huomo.sha=true;break;
case 'tao':player.storage.huomo.tao=true;break;
@ -3192,6 +3193,145 @@ character.yijiang={
}
},
huomo_sha:{
enable:'chooseToUse',
viewAs:{name:'sha'},
viewAsFilter:function(player){
if(!player.storage.huomo) player.storage.huomo={};
if(player.storage.huomo.sha) return false;
var hs=player.get('he',{color:'black'});
for(var i=0;i<hs.length;i++){
if(get.type(hs[i])!='basic'){
return true;
}
}
return false;
},
precontent:function(){
'step 0'
var card=event.result.cards[0];
event.card=card;
player.$throw(card,1000);
game.log(player,'将',card,'置于牌堆顶');
event.result.cards.length=0;
player.lose(card);
'step 1'
game.delay();
'step 2'
ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild);
},
filterCard:function(card){
return get.type(card)!='basic'&&get.color(card)=='black';
},
ai:{
skillTagFilter:function(player,tag,arg){
if(arg!='use') return false;
if(!player.storage.huomo) player.storage.huomo={};
if(player.storage.huomo.sha) return false;
var hs=player.get('he',{color:'black'});
for(var i=0;i<hs.length;i++){
if(get.type(hs[i])!='basic'){
return true;
}
}
return false;
},
order:2.9,
respondSha:true,
},
},
huomo_tao:{
enable:'chooseToUse',
viewAs:{name:'tao'},
viewAsFilter:function(player){
if(!player.storage.huomo) player.storage.huomo={};
if(player.storage.huomo.tao) return false;
var hs=player.get('he',{color:'black'});
for(var i=0;i<hs.length;i++){
if(get.type(hs[i])!='basic'){
return true;
}
}
return false;
},
precontent:function(){
'step 0'
var card=event.result.cards[0];
event.card=card;
player.$throw(card,1000);
game.log(player,'将',card,'置于牌堆顶');
event.result.cards.length=0;
player.lose(card);
'step 1'
game.delay();
'step 2'
ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild);
},
filterCard:function(card){
return get.type(card)!='basic'&&get.color(card)=='black';
},
ai:{
order:4,
skillTagFilter:function(player){
if(!player.storage.huomo) player.storage.huomo={};
if(player.storage.huomo.tao) return false;
var hs=player.get('he',{color:'black'});
for(var i=0;i<hs.length;i++){
if(get.type(hs[i])!='basic'){
return true;
}
}
return false;
},
save:true,
},
},
huomo_jiu:{
enable:'chooseToUse',
viewAs:{name:'jiu'},
viewAsFilter:function(player){
if(!player.storage.huomo) player.storage.huomo={};
if(player.storage.huomo.jiu) return false;
var hs=player.get('he',{color:'black'});
for(var i=0;i<hs.length;i++){
if(get.type(hs[i])!='basic'){
return true;
}
}
return false;
},
precontent:function(){
'step 0'
var card=event.result.cards[0];
event.card=card;
player.$throw(card,1000);
game.log(player,'将',card,'置于牌堆顶');
event.result.cards.length=0;
player.lose(card);
'step 1'
game.delay();
'step 2'
ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild);
},
filterCard:function(card){
return get.type(card)!='basic'&&get.color(card)=='black';
},
ai:{
skillTagFilter:function(player){
if(!player.storage.huomo) player.storage.huomo={};
if(player.storage.huomo.jiu) return false;
if(player.hp>0) return false;
var hs=player.get('he',{color:'black'});
for(var i=0;i<hs.length;i++){
if(get.type(hs[i])!='basic'){
return true;
}
}
return false;
},
save:true,
},
},
huomo_sha_old:{
enable:'phaseUse',
discard:false,
prepare:'throw',
@ -3237,7 +3377,7 @@ character.yijiang={
}
}
},
huomo_tao:{
huomo_tao_old:{
enable:'chooseToUse',
discard:false,
prepare:'throw',
@ -3301,7 +3441,7 @@ character.yijiang={
}
}
},
huomo_jiu:{
huomo_jiu_old:{
enable:'chooseToUse',
discard:false,
prepare:'throw',
@ -7518,7 +7658,7 @@ character.yijiang={
huomo_shan:'墨闪',
huomo_tao:'墨桃',
huomo_jiu:'墨酒',
huomo_info:'在出牌或濒死阶段,每当你需要使用一张本回合内未使用过的基本牌时,你可以将一张黑色非基本牌置于牌堆顶,然后视为你使用了此基本牌',
huomo_info:'每当你需要使用一张本回合内未使用过的基本牌时,你可以将一张黑色非基本牌置于牌堆顶,然后视为你使用了此基本牌',
zuoding:'佐定',
zuoding_info:'每当一名其他角色于其出牌阶段内使用♠牌指定目标后,若此阶段没有角色受到过伤害,则你可以令其中一名目标角色摸一张牌',
taoxi:'讨袭',

View File

@ -182,8 +182,7 @@ character.yxs={
taiji:{
trigger:{player:'respond'},
filter:function(event,player){
if(lib.filter.autoRespondSha.call({player:player})) return false;
return event.card.name=='shan';
return event.card.name=='shan'&&player.hasSha();
},
direct:true,
content:function(){
@ -2661,7 +2660,7 @@ character.yxs={
zyhufu:'胡服',
zyhufu_info:'锁定技,当你的装备区内没有防具牌时,你摸牌阶段额外摸一张牌;当你装备区内有防具牌时,你的手牌上限+5',
hanbei:'捍北',
hanbei_info:'你的装备区有马时,你的杀不可闪避',
hanbei_info:'锁定技,你的装备区有马时,你的杀不可闪避',
kuangchan:'狂禅',
kuangchan_info:'锁定技,你做主公时,不增加体力上限',
dili:'底力',

View File

@ -4961,6 +4961,29 @@
window.lib=lib;
window._status=_status;
},
e:function(){
var cards=[],target;
for(var i=0;i<arguments.length;i++){
if(get.itemtype(arguments[i])=='player'){
target=arguments[i];
}
else{
cards.push(game.createCard(arguments[i]));
}
}
target=target||game.me;
for(var i=0;i<cards.length;i++){
var str=get.subtype(cards[i])[5];
if(!str) continue;
var card=target.get('e',str);
if(card){
console.log(card);
ui.discardPile.appendChild(card);
target.clearEquipTrigger(card);
}
target.$equip(cards[i]);
}
},
m:function(){
if(lib.config.game!='sgs'){
game.saveConfig('game','sgs');
@ -6171,6 +6194,9 @@
else{
ui.click.cancel();
}
if(event.aidelay&&event.result&&event.result.bool){
game.delayx();
}
}
"step 2"
if(event.result){
@ -6188,7 +6214,7 @@
else if(info&&info.precontent){
var next=game.createEvent('pre_'+event.result.skill);
next.setContent(info.precontent);
next.set('argresult',event.result);
next.set('result',event.result);
next.set('player',player);
}
}
@ -11891,14 +11917,19 @@
}
return false;
},
hasSkillTag:function(tag,hidden){
hasSkillTag:function(tag,hidden,arg){
var skills=game.expandSkills(this.get('s',hidden));
for(var i=0;i<skills.length;i++){
var info=lib.skill[skills[i]];
if(info&&info.ai){
if(info.ai.skillTagFilter&&
info.ai.skillTagFilter(this,tag)===false) continue;
if(info.ai[tag]) return true;
info.ai.skillTagFilter(this,tag,arg)===false) continue;
if(typeof info.ai[tag]=='string'){
if(info.ai[tag]==arg) return true;
}
else if(info.ai[tag]){
return true;
}
}
}
return false;
@ -11960,6 +11991,18 @@
}
return false;
},
hasSha:function(respond){
if(this.num('h','sha')) return true;
if(this.num('h','hufu')) return true;
if(this.hasSkillTag('respondSha',true,respond?'respond':'use')) return true;
return false;
},
hasShan:function(){
if(this.num('h','shan')) return true;
if(this.num('h','hufu')) return true;
if(this.hasSkillTag('respondShan',true)) return true;
return false;
},
getJudge:function(name){
var judges=this.node.judges.childNodes;
for(var i=0;i<judges.length;i++){
@ -14389,7 +14432,7 @@
autoRespondSha:function(){
if(this.player.num('h','sha')) return false;
if(this.player.num('h','hufu')) return false;
if(this.player.hasSkillTag('respondSha',true)) return false;
if(this.player.hasSkillTag('respondSha',true,'respond')) return false;
return true;
},
autoRespondShan:function(){