noname/character/diy.js

732 lines
20 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

character.diy={
character:{
// diy_caocao:['male','wei',4,['xicai','diyjianxiong','hujia']],
// diy_hanlong:['male','wei',4,['siji','ciqiu']],
diy_feishi:['male','shu',3,['shuaiyan','moshou']],
diy_liuyan:['male','shu',3,['juedao','geju']],
// diy_luxun:['male','wu',3,['shaoying','zonghuo']],
diy_yuji:['male','qun',3,['diyguhuo','diychanyuan']],
// diy_zhouyu:['male','wu',3,['jieyan','honglian']],
diy_zhouyu:['male','wu',3,['xiongzi','yaliang']],
diy_caiwenji:['female','qun',3,['beige','guihan']],
diy_lukang:['male','wu',4,['luweiyan','qianxun']],
diy_xuhuang:['male','wei',4,['diyduanliang']],
diy_dianwei:['male','wei',4,['diyqiangxi']],
diy_huangzhong:['male','shu',4,['liegong','fuli']],
diy_weiyan:['male','shu',4,['diykuanggu']],
diy_zhenji:['female','wei',3,['jiaoxia','yiesheng']],
// diy_menghuo:['male','shu',4,['huoshou','zaiqix']],
re_huangyueying:['female','shu',3,['rejizhi','qicai']],
old_zhonghui:['male','wei',3,['zzhenggong','zquanji','zbaijiang']],
},
skill:{
zaiqix:{
trigger:{player:'phaseDrawBefore'},
filter:function(event,player){
return player.hp<player.maxHp;
},
check:function(event,player){
if(1+player.maxHp-player.hp<2){
return false;
}
else if(1+player.maxHp-player.hp==2){
return player.num('h')>=2;
}
return true;
},
content:function(){
"step 0"
trigger.untrigger();
trigger.finish();
event.cards=get.cards(player.maxHp-player.hp+1);
player.showCards(event.cards);
"step 1"
var num=0;
for(var i=0;i<event.cards.length;i++){
if(get.suit(event.cards[i])=='heart'){
num++;
ui.discardPile.appendChild(event.cards[i]);
event.cards.splice(i--,1);
}
}
if(num){
player.recover(num);
}
"step 2"
if(event.cards.length){
player.gain(event.cards);
player.$gain2(event.cards);
game.delay();
}
},
ai:{
threaten:function(player,target){
if(target.hp==1) return 2;
if(target.hp==2) return 1.5;
return 1;
},
}
},
batu:{
trigger:{player:'phaseEnd'},
frequent:true,
filter:function(event,player){
var num=0;
var list=['wei','shu','wu','qun'];
for(var i=0;i<game.players.length&&list.length;i++){
if(list.contains(game.players[i].group)){
list.remove(game.players[i].group);
num++;
}
}
return player.num('h')<num;
},
content:function(){
var num=0;
var list=['wei','shu','wu','qun'];
for(var i=0;i<game.players.length&&list.length;i++){
if(list.contains(game.players[i].group)){
list.remove(game.players[i].group);
num++;
}
}
player.draw(num-player.num('h'));
},
ai:{
threaten:1.3
}
},
diyzaiqi:{
trigger:{player:'phaseDrawBegin'},
forced:true,
filter:function(event,player){
return player.hp<player.maxHp;
},
content:function(){
trigger.num+=player.maxHp-player.hp;
},
ai:{
threaten:function(player,target){
if(target.hp==1) return 2.5;
if(target.hp==2) return 1.8;
return 0.5;
},
maixie:true,
effect:{
target:function(card,player,target){
if(get.tag(card,'damage')){
if(target.hp==target.maxHp) return [0,1];
}
if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0];
}
}
}
},
jiaoxia:{
trigger:{target:'useCardToBegin'},
filter:function(event,player){
return event.card&&get.color(event.card)=='red';
},
frequent:true,
content:function(){
player.draw();
},
ai:{
effect:function(card,player,target){
if(get.color(card)=='red') return [1,1];
},
}
},
diykuanggu:{
trigger:{source:'damageEnd'},
forced:true,
content:function(){
if(get.distance(trigger.player,player,'attack')>1){
player.draw(trigger.num);
}
else{
player.recover(trigger.num);
}
}
},
diyduanliang:{
group:['diyduanliang1','diyduanliang2'],
ai:{
threaten:1.2
}
},
diyduanliang1:{
enable:'phaseUse',
usable:1,
discard:false,
filter:function(event,player){
var cards=player.get('he',{color:'black'});
for(var i=0;i<cards.length;i++){
var type=get.type(cards[i]);
if(type=='basic') return true;
}
return false;
},
prepare:function(cards,player,targets){
player.$throw(cards);
},
position:'he',
filterCard:function(card){
if(get.color(card)!='black') return false;
var type=get.type(card);
return type=='basic';
},
filterTarget:function(card,player,target){
return lib.filter.filterTarget({name:'bingliang'},player,target);
},
check:function(card){
return 7-ai.get.value(card);
},
content:function(){
player.useCard({name:'bingliang'},target,cards).animate=false;
player.draw();
},
ai:{
result:{
target:function(player,target){
return ai.get.effect(target,{name:'bingliang'},player,target);
}
},
order:9,
}
},
diyduanliang2:{
mod:{
targetInRange:function(card,player,target){
if(card.name=='bingliang'){
if(get.distance(player,target)<=2) return true;
}
}
}
},
guihan:{
unique:true,
enable:'chooseToUse',
mark:true,
init:function(player){
player.storage.guihan=false;
},
filter:function(event,player){
if(event.type!='dying') return false;
if(player!=_status.dying) return false;
if(player.storage.guihan) return false;
return true;
},
filterTarget:function(card,player,target){
return target.sex=='male'&&player!=target;
},
content:function(){
"step 0"
player.unmarkSkill('guihan');
player.recover();
player.storage.guihan=true;
"step 1"
player.draw(2);
"step 2"
target.recover();
"step 3"
target.draw(2);
// if(lib.config.mode=='identity'){
// player.node.identity.style.backgroundColor=get.translation('weiColor');
// player.group='wei';
// }
},
ai:{
skillTagFilter:function(player){
if(player.storage.guihan) return false;
if(player.hp>0) return false;
},
save:true,
result:{
player:4,
target:function(player,target){
if(target.hp==target.maxHp) return 2;
return 4;
}
},
threaten:function(player,target){
if(!target.storage.guihan) return 0.8;
}
},
intro:{
content:'limited'
}
},
luweiyan:{
enable:'chooseToUse',
filterCard:{type:'equip'},
position:'he',
viewAs:{name:'shuiyanqijun'},
prompt:'将一张装备牌当水淹七军使用',
check:function(card){return 8-ai.get.equipValue(card)},
},
yaliang:{
inherit:'wangxi'
},
xiongzi:{
trigger:{player:'phaseDrawBegin'},
forced:true,
content:function(){
trigger.num+=1+Math.floor(player.num('e')/2);
}
},
honglian:{
trigger:{player:'damageEnd'},
check:function(event,player){
return ai.get.attitude(player,event.player)<0;
},
filter:function(event,player){
return event.source&&event.source!=player&&event.source.num('he',{color:'red'})>0;
},
content:function(){
trigger.source.discard(trigger.source.get('he',{color:'red'}));
},
ai:{
expose:0.1,
result:{
threaten:0.8,
target:function(card,player,target){
if(get.tag(card,'damage')&&ai.get.attitude(target,player)<0){
return [1,0,0,-player.num('he',{color:'red'})];
}
}
}
}
},
diyguhuo:{
trigger:{player:'phaseBegin'},
forced:true,
filter:function(event,player){
return player.num('hej')>0;
},
content:function(){
"step 0"
player.draw(2);
"step 1"
player.chooseToDiscard('hej',2,true);
},
ai:{
effect:{
target:function(card){
if(get.type(card)=='delay') return [0,1];
}
}
}
},
diychanyuan:{
trigger:{player:'dieBegin'},
forced:true,
filter:function(event){
return event.source!=undefined;
},
content:function(){
trigger.source.loseMaxHp(true);
},
ai:{
threaten:function(player,target){
if(target.hp==1) return 0.2;
},
result:{
target:function(card,player,target,current){
if(target.hp<=1&&get.tag(card,'damage')){
if(player.skills.contains('jueqing')) return [1,-5];
return [1,0,0,-2];
}
}
}
}
},
zonghuo:{
trigger:{source:'damageBefore'},
direct:true,
priority:10,
filter:function(event){
return event.nature!='fire';
},
content:function(){
"step 0"
player.chooseToDiscard('是否发动【纵火】?').ai=function(card){
var att=ai.get.attitude(player,trigger.player);
if(trigger.player.hasSkillTag('nofire')){
if(att>0) return 8-ai.get.value(card);
return -1;
}
if(att<0){
return 7-ai.get.value(card);
}
return -1;
}
"step 1"
if(result.bool){
player.logSkill('zonghuo',trigger.player,'fire');
trigger.nature='fire';
}
}
},
shaoying:{
trigger:{source:'damageAfter'},
direct:true,
filter:function(event){
return event.nature=='fire';
},
content:function(){
"step 0"
player.chooseTarget('是否发动【烧营】?',function(card,player,target){
return get.distance(trigger.player,target)<=1&&trigger.player!=target;
}).ai=function(target){
return ai.get.damageEffect(target,player,player,'fire');
}
"step 1"
if(result.bool){
var card=get.cards()[0];
ui.discardPile.appendChild(card);
player.showCards(card);
event.bool=get.color(card)=='red';
event.target=result.targets[0];
player.logSkill('shaoying',event.target,false);
trigger.player.line(event.target,'fire');
}
else{
event.finish();
}
"step 2"
if(event.bool){
event.target.damage('fire');
}
}
},
tiangong:{
group:['tiangong2'],
trigger:{player:'damageBefore'},
filter:function(event){
if(event.nature=='thunder') return true;
},
forced:true,
content:function(){
trigger.untrigger();
trigger.finish();
},
ai:{
effect:{
target:function(card,player,target,current){
if(card.name=='tiesuo') return 0;
if(get.tag(card,'thunderDamage')) return 0;
}
},
threaten:0.5
}
},
tiangong2:{
trigger:{source:'damageAfter'},
filter:function(event){
if(event.nature=='thunder') return true;
},
forced:true,
popup:false,
priority:1,
content:function(){
player.draw();
},
},
xicai:{
inherit:'jianxiong'
},
diyjianxiong:{
mode:['identity'],
trigger:{global:'dieBefore'},
forced:true,
filter:function(event,player){
return event.player!=game.zhu&&_status.currentPhase==player;
},
content:function(){
trigger.player.identity='fan';
trigger.player.setIdentity('fan');
trigger.player.identityShown=true;
}
},
shuaiyan:{
trigger:{global:'recoverAfter'},
filter:function(event,player){
return event.player!=player&&_status.currentPhase!=player;
},
content:function(){
"step 0"
var att=ai.get.attitude(trigger.player,player);
var bool=0;
if(att<0){
if(trigger.player.num('e')==0&&trigger.player.num('h')>2) bool=1;
else if(trigger.player.num('he')==0) bool=1;
}
else if(att==0&&trigger.player.num('he')==0){
bool=1;
}
trigger.player.chooseControl('draw_card','discard_card').ai=function(){
return bool;
};
"step 1"
if(result.control=='draw_card'){
player.draw();
event.finish();
}
else if(trigger.player.num('he')){
player.discardPlayerCard(trigger.player,true,'he');
}
else{
event.finish();
}
},
ai:{
threaten:1.2
}
},
moshou:{
mod:{
targetEnabled:function(card,player,target,now){
if(card.name=='bingliang'||card.name=='lebu') return false;
}
},
},
siji:{
trigger:{player:'phaseDiscardEnd'},
frequent:true,
filter:function(event,player){
if(event.cards){
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].name=='sha') return true;
}
}
return false;
},
content:function(){
var num=0;
for(var i=0;i<trigger.cards.length;i++){
if(trigger.cards[i].name=='sha') num++;
}
player.draw(2*num);
}
},
ciqiu:{
unique:true,
trigger:{source:'damageBegin'},
forced:true,
filter:function(event,player){
return event.card&&event.card.name=='sha'&&event.player.hp==event.player.maxHp;
},
content:function(){
trigger.num++;
player.addTempSkill('ciqiu3','damageAfter');
},
group:['ciqiu2']
},
ciqiu2:{
trigger:{source:'damage'},
filter:function(event,player){
return player.skills.contains('ciqiu3')&&event.player.hp<=0;
},
forced:true,
content:function(){
trigger.player.die(trigger);
player.removeSkill('ciqiu');
}
},
ciqiu3:{},
juedao:{
enable:'phaseUse',
filter:function(event,player){
return player.isLinked()==false;
},
filterCard:true,
check:function(card){
return 6-ai.get.value(card);
},
content:function(){
if(player.isLinked()==false) player.link();
},
ai:{
order:2,
result:{
player:function(player){
if(player.isLinked()) return 0;
return 1;
},
},
effect:{
target:function(card,player,target){
if(card.name=='tiesuo'){
if(target.isLinked()){
return [0,-0.5];
}
else{
return [0,0.5];
}
}
}
}
},
mod:{
globalFrom:function(from,to,distance){
if(from.isLinked()) return distance+1;
},
globalTo:function(from,to,distance){
if(to.isLinked()) return distance+1;
},
}
},
geju:{
trigger:{player:'phaseBegin'},
frequent:true,
filter:function(event,player){
var list=[];
for(var i=0;i<game.players.length;i++){
if(player!=game.players[i]) list.add(game.players[i].group);
}
list.remove('unknown');
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player){
if(lib.filter.targetInRange({name:'sha'},game.players[i],player)){
list.remove(game.players[i].group);
}
}
}
return list.length>0;
},
content:function(){
var list=[];
for(var i=0;i<game.players.length;i++){
if(player!=game.players[i]) list.add(game.players[i].group);
}
list.remove('unknown');
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player){
if(lib.filter.targetInRange({name:'sha'},game.players[i],player)){
list.remove(game.players[i].group);
}
}
}
if(list.length>0) player.draw(list.length);
}
},
diyqiangxi:{
enable:'phaseUse',
usable:1,
filterCard:function(card){
return get.subtype(card)=='equip1';
},
selectCard:[0,1],
filterTarget:function(card,player,target){
if(player==target) return false;
return get.distance(player,target,'attack')<=1;
},
content:function(){
"step 0"
if(cards.length==0){
player.loseHp();
}
"step 1"
target.damage();
"step 2"
if(target.isAlive()&&target.num('he')){
player.discardPlayerCard(target);
}
},
check:function(card){
return 10-ai.get.value(card);
},
position:'he',
ai:{
order:8,
result:{
player:function(player,target){
if(ui.selected.cards.length) return 0;
if(player.hp>=target.hp) return -0.9;
if(player.hp<=2) return -10;
return -2;
},
target:function(player,target){
if(player.hp<=1) return 0;
return ai.get.damageEffect(target,player);
}
}
},
threaten:1.3
},
},
translate:{
diy_caocao:'曹操',
diy_menghuo:'孟获',
diy_huangzhong:'黄汉升',
diy_xuhuang:'徐公明',
diy_dianwei:'新典韦',
diy_weiyan:'魏文长',
xicai:'惜才',
diyjianxiong:'奸雄',
diy_feishi:'费诗',
shuaiyan:'率言',
moshou:'墨守',
diy_hanlong:'韩龙',
diy_luxun:'陆伯言',
diy_yuji:'于吉',
diy_zhouyu:'神周瑜',
diy_zhouyu:'周公瑾',
diy_lukang:'陆抗',
diy_caiwenji:'蔡昭姬',
diy_zhenji:'甄宓',
siji:'伺机',
ciqiu:'刺酋',
ciqiu2:'刺酋',
ciqiu3:'刺酋',
diy_liuyan:'刘焉',
juedao:'绝道',
geju:'割据',
shaoying:'烧营',
zonghuo:'纵火',
diychanyuan:'缠怨',
diyguhuo:'蛊惑',
jieyan:'劫焰',
honglian:'红莲',
xiongzi:'雄姿',
yaliang:'雅量',
yaliang_info:'每当你对其他角色造成1点伤害后或受到其他角色造成的1点伤害后你可与该角色各摸一张牌。',
luweiyan:'围堰',
guihan:'归汉',
diyduanliang:'断粮',
diyduanliang1:'断粮',
diyduanliang2:'断粮',
diyqiangxi:'强袭',
diykuanggu:'狂骨',
jiaoxia:'皎霞',
diyzaiqi:'再起',
batu:'霸图',
zaiqix:'再起',
zaiqix_info:'摸牌阶段若你已受伤你可以放弃摸牌并展示牌堆顶的X+1张牌X为你已损失的体力值其中每有一张♥牌你回复1点体力然后弃掉这些♥牌将其余的牌收入手牌。',
batu_info:'回合结束阶段你可以将手牌数补至XX为现存的势力数',
diyzaiqi_info:'锁定技你摸牌阶段额外摸X张牌X为你已损失的体力值',
jiaoxia_info:'每当你成为红色牌的目标,你可以摸一张牌',
diykuanggu_info:'锁定技,每当你造成一点伤害,你在其攻击范围内,你回复一点体力,否则你摸一张牌',
diyqiangxi_info:'出牌阶段,你可以自减一点体力或弃一张武器牌,然后你对你攻击范围内的一名角色造成一点伤害并弃置其一张牌,每回合限一次。',
diyduanliang_info:'出牌阶段限一次你可以将一张黑色的基本牌当兵粮寸断对一名角色使用然后摸一张牌。你的兵粮寸断可以指定距离2以内的角色作为目标',
guihan_info:'限定技,当你进入濒死状态时,可以指定一名男性角色与其各回复一点体力并摸两张牌',
luweiyan_info:'你可以将一张装备牌当水淹七军使用',
xiongzi_info:'锁定技你于摸牌阶段额外摸X+1张牌X为你装备区牌数的一半向下取整',
honglian_info:'每当你受到来自其他角色的伤害,可以弃置伤害来源的所有红色牌',
jieyan_info:'出牌阶段限一次,你可以弃置一张红色手牌令场上所有角色受到一点火焰伤害',
diyguhuo_info:'锁定技,回合开始阶段,你摸两张牌,然后弃置区域内的两张牌',
diychanyuan_info:'锁定技,杀死你的角色失去一点体力上限',
zonghuo_info:'你可弃置一张牌将你即将造成的伤害变为火焰伤害',
shaoying_info:'每当你造成一次火焰伤害可指定距离受伤害角色1以内的另一名角色并展示牌堆顶的一张牌若此牌为红色该角色受到一点火焰伤害',
juedao_info:'出牌阶段,你可以弃置一张手牌,横置你的武将牌;锁定技,若你处于连环状态,你与其他角色的距离、其他角色与你的距离各+1。',
geju_info:'准备阶段开始时你可以摸X张牌X为攻击范围内不含有你的势力数。',
siji_info:'弃牌阶段结束后你可以摸2X张牌X为你于此阶段内弃置的【杀】的数量。',
ciqiu_info:'锁定技,每当你使用【杀】对目标角色造成伤害时,若该角色未受伤,你令此伤害+1锁定技每当未受伤的角色因受到你使用【杀】造成的伤害而扣减体力后若该角色的体力值为0你令其死亡然后你失去“刺酋”。 ',
shuaiyan_info:'每当其他角色于你的回合外回复体力后你可以令该角色选择一项1.令你摸一张牌2.令你弃置其一张牌。 ',
moshou_info:'锁定技,你不能成为乐不思蜀和兵粮寸断的目标。',
xicai_info:'你可以立即获得对你造成伤害的牌',
diyjianxiong_info:'锁定技,在身份局中,在你回合内死亡的角色均视为反贼,国战中,在你回合内死亡的角色若与你势力相同则随机改为另一个势力',
},
}