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(){
target.addJudge('bingliang',cards);
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:'锁定技在身份局中在你回合内死亡的角色均视为反贼国战中在你回合内死亡的角色若与你势力相同则随机改为另一个势力',
},
}