欢乐卡牌
This commit is contained in:
parent
47cdc3d4d4
commit
4e1daab70e
|
@ -0,0 +1,566 @@
|
|||
'use strict';
|
||||
game.import('card',function(lib,game,ui,get,ai,_status){
|
||||
return {
|
||||
name:'huanlekapai',
|
||||
connect:true,
|
||||
card:{
|
||||
"monkey":{
|
||||
audio:true,
|
||||
fullskin:true,
|
||||
type:"equip",
|
||||
subtype:"equip5",
|
||||
skills:["monkey"],
|
||||
ai:{
|
||||
basic:{
|
||||
equipValue:8,
|
||||
order:function (card,player){
|
||||
if(player&&player.hasSkillTag('reverseEquip')){
|
||||
return 8.5-get.equipValue(card,player)/20;
|
||||
}
|
||||
else{
|
||||
return 8+get.equipValue(card,player)/20;
|
||||
}
|
||||
},
|
||||
useful:2,
|
||||
value:function (card,player){
|
||||
var value=0;
|
||||
var info=get.info(card);
|
||||
var current=player.getEquip(info.subtype);
|
||||
if(current&&card!=current){
|
||||
value=get.value(current,player);
|
||||
}
|
||||
var equipValue=info.ai.equipValue;
|
||||
if(equipValue==undefined){
|
||||
equipValue=info.ai.basic.equipValue;
|
||||
}
|
||||
if(typeof equipValue=='function') return equipValue(card,player)-value;
|
||||
if(typeof equipValue!='number') equipValue=0;
|
||||
return equipValue-value;
|
||||
},
|
||||
},
|
||||
result:{
|
||||
target:function (player,target){
|
||||
return get.equipResult(player,target,name);
|
||||
},
|
||||
},
|
||||
},
|
||||
enable:true,
|
||||
selectTarget:-1,
|
||||
filterTarget:function (card,player,target){
|
||||
return target==player;
|
||||
},
|
||||
modTarget:true,
|
||||
allowMultiple:false,
|
||||
content:function (){
|
||||
target.equip(card);
|
||||
},
|
||||
toself:true,
|
||||
},
|
||||
|
||||
"mianju":{
|
||||
audio:true,
|
||||
type:"equip",
|
||||
subtype:"equip2",
|
||||
skills:["mianju"],
|
||||
ai:{
|
||||
order:9.5,
|
||||
basic:{
|
||||
equipValue:function (card,player){
|
||||
if(!player.isTurnedOver()) return 6;
|
||||
if(player.isTurnedOver()) return -10;
|
||||
return 0;
|
||||
},
|
||||
order:function (card,player){
|
||||
if(player&&player.hasSkillTag('reverseEquip')){
|
||||
return 8.5-get.equipValue(card,player)/20;
|
||||
}
|
||||
else{
|
||||
return 8+get.equipValue(card,player)/20;
|
||||
}
|
||||
},
|
||||
useful:2,
|
||||
value:function (card,player){
|
||||
var value=0;
|
||||
var info=get.info(card);
|
||||
var current=player.getEquip(info.subtype);
|
||||
if(current&&card!=current){
|
||||
value=get.value(current,player);
|
||||
}
|
||||
var equipValue=info.ai.equipValue;
|
||||
if(equipValue==undefined){
|
||||
equipValue=info.ai.basic.equipValue;
|
||||
}
|
||||
if(typeof equipValue=='function') return equipValue(card,player)-value;
|
||||
if(typeof equipValue!='number') equipValue=0;
|
||||
return equipValue-value;
|
||||
},
|
||||
},
|
||||
result:{
|
||||
target:function (player,target){
|
||||
return get.equipResult(player,target,name);
|
||||
},
|
||||
},
|
||||
},
|
||||
enable:true,
|
||||
selectTarget:-1,
|
||||
modTarget:true,
|
||||
allowMultiple:false,
|
||||
toself:true,
|
||||
fullskin:true,
|
||||
},
|
||||
"shoulijian":{
|
||||
audio:true,
|
||||
type:"basic",
|
||||
skills:["shoulijian"],
|
||||
enable:true,
|
||||
fullskin:true,
|
||||
filterTarget:function (card,player,target){
|
||||
return get.distance(player,target)>1;
|
||||
},
|
||||
content:function (){
|
||||
"step 0"
|
||||
game.playSu('shoulijian');
|
||||
if(!target.countCards('he',{type:'equip'})){
|
||||
target.damage();
|
||||
event.finish();
|
||||
}
|
||||
else{
|
||||
target.chooseToDiscard('he',{type:'equip'},'弃置一张装备牌或受到一点伤害').ai=function(card){
|
||||
return 7-get.value(card);
|
||||
};
|
||||
}
|
||||
"step 1"
|
||||
if(!result.bool){
|
||||
target.damage();
|
||||
}
|
||||
},
|
||||
|
||||
ai:{
|
||||
basic:{
|
||||
order:9,
|
||||
value:6,
|
||||
useful:2,
|
||||
},
|
||||
result:{
|
||||
target:-2,
|
||||
},
|
||||
tag:{
|
||||
discard:1,
|
||||
damage:1,
|
||||
},
|
||||
},
|
||||
selectTarget:1,
|
||||
},
|
||||
|
||||
"kuwu":{
|
||||
audio:true,
|
||||
fullskin:true,
|
||||
|
||||
type:"equip",
|
||||
subtype:"equip1",
|
||||
skills:["kuwu"],
|
||||
nomod:true,
|
||||
nopower:true,
|
||||
unique:true,
|
||||
distance:{
|
||||
attackFrom:-1,
|
||||
},
|
||||
ai:{
|
||||
equipValue:6,
|
||||
basic:{
|
||||
order:function (card,player){
|
||||
if(player&&player.hasSkillTag('reverseEquip')){
|
||||
return 8.5-get.equipValue(card,player)/20;
|
||||
}
|
||||
else{
|
||||
return 8+get.equipValue(card,player)/20;
|
||||
}
|
||||
},
|
||||
useful:2,
|
||||
equipValue:1,
|
||||
value:function (card,player){
|
||||
var value=0;
|
||||
var info=get.info(card);
|
||||
var current=player.getEquip(info.subtype);
|
||||
if(current&&card!=current){
|
||||
value=get.value(current,player);
|
||||
}
|
||||
var equipValue=info.ai.equipValue;
|
||||
if(equipValue==undefined){
|
||||
equipValue=info.ai.basic.equipValue;
|
||||
}
|
||||
if(typeof equipValue=='function') return equipValue(card,player)-value;
|
||||
if(typeof equipValue!='number') equipValue=0;
|
||||
return equipValue-value;
|
||||
},
|
||||
},
|
||||
result:{
|
||||
target:function (player,target){
|
||||
return get.equipResult(player,target,name);
|
||||
},
|
||||
},
|
||||
},
|
||||
enable:true,
|
||||
selectTarget:-1,
|
||||
modTarget:true,
|
||||
allowMultiple:false,
|
||||
toself:true,
|
||||
},
|
||||
"xuelunyang":{
|
||||
audio:true,
|
||||
fullskin:true,
|
||||
type:"equip",
|
||||
subtype:"equip5",
|
||||
skills:["xuelunyang"],
|
||||
ai:{
|
||||
basic:{
|
||||
equipValue:8,
|
||||
order:function (card,player){
|
||||
if(player&&player.hasSkillTag('reverseEquip')){
|
||||
return 8.5-get.equipValue(card,player)/20;
|
||||
}
|
||||
else{
|
||||
return 8+get.equipValue(card,player)/20;
|
||||
}
|
||||
},
|
||||
useful:2,
|
||||
value:function (card,player){
|
||||
var value=0;
|
||||
var info=get.info(card);
|
||||
var current=player.getEquip(info.subtype);
|
||||
if(current&&card!=current){
|
||||
value=get.value(current,player);
|
||||
}
|
||||
var equipValue=info.ai.equipValue;
|
||||
if(equipValue==undefined){
|
||||
equipValue=info.ai.basic.equipValue;
|
||||
}
|
||||
if(typeof equipValue=='function') return equipValue(card,player)-value;
|
||||
if(typeof equipValue!='number') equipValue=0;
|
||||
return equipValue-value;
|
||||
},
|
||||
},
|
||||
result:{
|
||||
target:function (player,target){
|
||||
return get.equipResult(player,target,name);
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
enable:true,
|
||||
selectTarget:-1,
|
||||
modTarget:true,
|
||||
allowMultiple:false,
|
||||
toself:true,
|
||||
},
|
||||
"jiuwei":{
|
||||
audio:true,
|
||||
fullskin:true,
|
||||
type:"equip",
|
||||
subtype:"equip5",
|
||||
skills:["jiuwei"],
|
||||
ai:{
|
||||
basic:{
|
||||
equipValue:8,
|
||||
order:function (card,player){
|
||||
if(player&&player.hasSkillTag('reverseEquip')){
|
||||
return 8.5-get.equipValue(card,player)/20;
|
||||
}
|
||||
else{
|
||||
return 8+get.equipValue(card,player)/20;
|
||||
}
|
||||
},
|
||||
useful:2,
|
||||
value:function (card,player){
|
||||
var value=0;
|
||||
var info=get.info(card);
|
||||
var current=player.getEquip(info.subtype);
|
||||
if(current&&card!=current){
|
||||
value=get.value(current,player);
|
||||
}
|
||||
var equipValue=info.ai.equipValue;
|
||||
if(equipValue==undefined){
|
||||
equipValue=info.ai.basic.equipValue;
|
||||
}
|
||||
if(typeof equipValue=='function') return equipValue(card,player)-value;
|
||||
if(typeof equipValue!='number') equipValue=0;
|
||||
return equipValue-value;
|
||||
},
|
||||
},
|
||||
result:{
|
||||
target:function (player,target){
|
||||
return get.equipResult(player,target,name);
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
enable:true,
|
||||
selectTarget:-1,
|
||||
modTarget:true,
|
||||
allowMultiple:false,
|
||||
toself:true,
|
||||
},
|
||||
},
|
||||
skill:{
|
||||
|
||||
"shoulijian":{
|
||||
audio:true,
|
||||
enable:true,
|
||||
filterTarget:function (card,player,target){
|
||||
return get.distance(player,target)>1;
|
||||
},
|
||||
content:function (){
|
||||
"step 0"
|
||||
game.playSu('shoulijian');
|
||||
if(!target.countCards('he',{type:'equip'})){
|
||||
target.damage();
|
||||
event.finish();
|
||||
}
|
||||
else{
|
||||
target.chooseToDiscard('he',{type:'equip'},'弃置一张装备牌或受到一点伤害').ai=function(card){
|
||||
return 7-get.value(card);
|
||||
};
|
||||
}
|
||||
"step 1"
|
||||
if(!result.bool){
|
||||
target.damage();
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
basic:{
|
||||
order:9,
|
||||
value:6,
|
||||
useful:2,
|
||||
},
|
||||
result:{
|
||||
target:-2,
|
||||
},
|
||||
tag:{
|
||||
discard:1,
|
||||
damage:1,
|
||||
},
|
||||
},
|
||||
selectTarget:1,
|
||||
},
|
||||
|
||||
"monkey":{
|
||||
trigger:{
|
||||
global:"useCardToBegin",
|
||||
},
|
||||
audio:true,
|
||||
filter:function (event,player){
|
||||
var card=player.get('e','5');
|
||||
if(card){
|
||||
var name=card.name;
|
||||
if(event.name=='tao'&&get.itemtype(event.cards)=='cards'&&get.position(event.cards[0])=='d'&&event.player!=player&&name&&name.indexOf('monkey')!=-1) return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
check:function (event,player){
|
||||
return ai.get.attitude(player,event.player)<=0;
|
||||
},
|
||||
content:function (){
|
||||
"step 0"
|
||||
player.$fullscreenpop('猴子偷桃','fire');
|
||||
trigger.untrigger();
|
||||
trigger.finish();
|
||||
"step 1"
|
||||
player.discard(player.get('e','5'));
|
||||
"step 2"
|
||||
player.gain(trigger.cards);
|
||||
player.$gain2(trigger.cards);
|
||||
},
|
||||
},
|
||||
|
||||
"mianju":{
|
||||
audio:true,
|
||||
trigger:{
|
||||
player:"turnOverBefore",
|
||||
},
|
||||
forced:true,
|
||||
content:function (){
|
||||
trigger.cancel();
|
||||
},
|
||||
ai:{
|
||||
noturnOver:true,
|
||||
effect:{
|
||||
target:function (card,player,target,current){
|
||||
if(get.tag(card,'turnOver')) return [0,0];
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
"kuwu":{
|
||||
audio:true,
|
||||
trigger:{
|
||||
source:"damageEnd",
|
||||
},
|
||||
forced:true,
|
||||
priority:55,
|
||||
filter:function (event,player){
|
||||
if(event._notrigger.contains(event.player)) return false;
|
||||
return event.card&&event.card.name=='sha'&&event.notLink()&&event.player.countCards('he')>0;
|
||||
},
|
||||
content:function (){
|
||||
trigger.player.chooseToDiscard(true,'he');
|
||||
},
|
||||
},
|
||||
|
||||
"xuelunyang":{
|
||||
audio:true,
|
||||
trigger:{
|
||||
player:"phaseBegin",
|
||||
},
|
||||
priority:2018,
|
||||
direct:true,
|
||||
createDialog:function (player,target,onlylist){
|
||||
var names=[];
|
||||
var list=[];
|
||||
if(target.name&&!target.isUnseen(0)) names.add(target.name);
|
||||
if(target.name1&&!target.isUnseen(0)) names.add(target.name1);
|
||||
if(target.name2&&!target.isUnseen(1)) names.add(target.name2);
|
||||
var pss=player.getSkills();
|
||||
for(var i=0;i<names.length;i++){
|
||||
var info=lib.character[names[i]];
|
||||
if(info){
|
||||
var skills=info[3];
|
||||
for(var j=0;j<skills.length;j++){
|
||||
if(lib.translate[skills[j]+'_info']&&lib.skill[skills[j]]&&
|
||||
!lib.skill[skills[j]].unique&&
|
||||
!pss.contains(skills[j])){
|
||||
list.push(skills[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(onlylist) return list;
|
||||
var dialog=ui.create.dialog('forcebutton');
|
||||
dialog.add('选择获得一项技能');
|
||||
_status.event.list=list;
|
||||
var clickItem=function(){
|
||||
_status.event._result=this.link;
|
||||
game.resume();
|
||||
};
|
||||
for(i=0;i<list.length;i++){
|
||||
if(lib.translate[list[i]+'_info']){
|
||||
var translation=get.translation(list[i]);
|
||||
if(translation[0]=='新'&&translation.length==3){
|
||||
translation=translation.slice(1,3);
|
||||
}
|
||||
else{
|
||||
translation=translation.slice(0,2);
|
||||
}
|
||||
var item=dialog.add('<div class="popup pointerdiv" style="width:80%;display:inline-block"><div class="skill">【'+
|
||||
translation+'】</div><div>'+lib.translate[list[i]+'_info']+'</div></div>');
|
||||
item.firstChild.addEventListener('click',clickItem);
|
||||
item.firstChild.link=list[i];
|
||||
}
|
||||
}
|
||||
dialog.add(ui.create.div('.placeholder'));
|
||||
return dialog;
|
||||
},
|
||||
content:function (){
|
||||
'step 0'
|
||||
player.chooseTarget(get.prompt2('xuelunyang'),function(card,player,target){
|
||||
var names=[];
|
||||
if(target.name&&!target.isUnseen(0)) names.add(target.name);
|
||||
if(target.name1&&!target.isUnseen(0)) names.add(target.name1);
|
||||
if(target.name2&&!target.isUnseen(1)) names.add(target.name2);
|
||||
var pss=player.getSkills();
|
||||
for(var i=0;i<names.length;i++){
|
||||
var info=lib.character[names[i]];
|
||||
if(info){
|
||||
var skills=info[3];
|
||||
for(var j=0;j<skills.length;j++){
|
||||
if(lib.translate[skills[j]+'_info']&&lib.skill[skills[j]]&&
|
||||
!lib.skill[skills[j]].unique&&!pss.contains(skills[j])){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}).set('ai',function(target){
|
||||
if(get.attitude(_status.event.player,target)>0) return Math.randomGet();
|
||||
return get.attitude(_status.event.player,target)<=0;
|
||||
});
|
||||
'step 1'
|
||||
if(result.bool){
|
||||
event.target=result.targets[0];
|
||||
player.logSkill('xuelunyang',event.target);
|
||||
}
|
||||
else{
|
||||
event.finish();
|
||||
}
|
||||
'step 2'
|
||||
event.skillai=function(list){
|
||||
return get.max(list,get.skillRank,'item');
|
||||
};
|
||||
if(event.isMine()){
|
||||
event.dialog=lib.skill.xuelunyang.createDialog(player,target);//tianshu
|
||||
event.switchToAuto=function(){
|
||||
event._result=event.skillai(event.list);
|
||||
game.resume();
|
||||
};
|
||||
_status.imchoosing=true;
|
||||
game.pause();
|
||||
}
|
||||
else{
|
||||
event._result=event.skillai(lib.skill.xuelunyang.createDialog(player,target,true));
|
||||
}
|
||||
'step 3'
|
||||
_status.imchoosing=false;
|
||||
if(event.dialog){
|
||||
event.dialog.close();
|
||||
}
|
||||
player.addTempSkill(result);
|
||||
player.popup(result);
|
||||
game.log(player,'获得了','【'+get.translation(result)+'】');
|
||||
},
|
||||
},
|
||||
|
||||
"jiuwei":{
|
||||
trigger:{
|
||||
player:"phaseEnd",
|
||||
},
|
||||
audio:true,
|
||||
filter:function (event,player){
|
||||
return player.isAlive();
|
||||
},
|
||||
frequent:true,
|
||||
content:function (){
|
||||
if(player.isDamaged()){
|
||||
player.recover();
|
||||
}
|
||||
else{
|
||||
player.draw();
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
translate:{
|
||||
"monkey":"猴子",
|
||||
"monkey_info":"猴子偷桃:当场上有其他角色使用【桃】时,你可以弃掉【猴子】,阻止【桃】的结算并将其收为手牌",
|
||||
"mianju":"漩涡面具",
|
||||
"mianju_info":"<font color=#f00>锁定技</font> 你的武将牌不能被翻面",
|
||||
"shoulijian":"手里剑",
|
||||
"shoulijian_info":"出牌阶段,对一名距离1以外的角色使用,令其弃置一张装备牌或受到一点伤害",
|
||||
"kuwu":"苦无",
|
||||
"kuwu_info":"<font color=#f00>锁定技</font> 每当你使用【杀】造成一次伤害,受伤角色须弃置一张牌",
|
||||
"xuelunyang":"写轮眼",
|
||||
"xuelunyang_info":"回合开始阶段,你可以选择一名角色,然后获得其一项技能,直到回合结束",
|
||||
"jiuwei":"九尾",
|
||||
"jiuwei_info":"(收集查克拉)回合结束时,若你已受伤,你可回复一点体力,否则摸一张牌",
|
||||
},
|
||||
list:[
|
||||
["diamond","5","monkey"],
|
||||
["heart","9","jiuwei"],
|
||||
["heart","2","xuelunyang"],
|
||||
["spade","6","kuwu"],
|
||||
["diamond","4","shoulijian"],
|
||||
["spade","4","shoulijian"],
|
||||
["club","3","mianju"],
|
||||
],
|
||||
}
|
||||
});
|
Loading…
Reference in New Issue