This commit is contained in:
nineMangos 2024-04-23 21:13:34 +08:00
commit 7aecf91ed0
308 changed files with 439898 additions and 351042 deletions

View File

@ -32,3 +32,4 @@
- [ ] 如果此次PR需要扩展跟进我已在`扩展适配`中写入详细文档
- [ ] 如果这个PR解决了一个issue我在`诱因和背景`中明确链接到该issue
- [ ] 我保证该PR中没有随意修改换行符等内容没有制造出大量的Diff
- [ ] 我保证该PR遵循项目中`.editorconfig`、`eslint.config.mjs`和`prettier.config.mjs`所规定的代码样式,并且已经通过`prettier`格式化过代码

1
.gitignore vendored
View File

@ -30,3 +30,4 @@ noname.ico
package-lock.json
package.json
Thumbs.db
bun.lockb

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/die/chengji.mp3 Normal file

Binary file not shown.

BIN
audio/die/dc_jiangji.mp3 Normal file

Binary file not shown.

BIN
audio/die/gz_yuji.mp3 Normal file

Binary file not shown.

BIN
audio/die/lizhaojiaobo.mp3 Normal file

Binary file not shown.

BIN
audio/die/mb_caomao.mp3 Normal file

Binary file not shown.

Binary file not shown.

BIN
audio/die/sp_sunce.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcshiju1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcshiju2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcyingshi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcyingshi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbcuizhen1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbcuizhen2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbjuejin1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbjuejin2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbkuangli1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbkuangli2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbkuili1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbkuili2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbqianlong1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbqianlong2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbqianlong3.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbqianlong4.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbqianlong5.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbqianlong6.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbshishou1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbshishou2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbweitong1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbxiongsi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbxiongsi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbzuoyou1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbzuoyou2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olliantao1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olliantao2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +1,18 @@
'use strict';
game.import('card',function(lib,game,ui,get,ai,_status){
import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("card", function () {
return {
name:'hearth',
name: "hearth",
card: {
linghunzhihuo: {
fullskin: true,
type:'trick',
type: "trick",
enable: true,
filterTarget: true,
content: function () {
'step 0'
target.damage('fire');
'step 1'
var hs=player.getCards('h');
"step 0";
target.damage("fire");
"step 1";
var hs = player.getCards("h");
if (hs.length) {
player.discard(hs.randomGet());
}
@ -26,22 +26,22 @@ game.import('card',function(lib,game,ui,get,ai,_status){
result: {
player: function (player, target) {
if (player == target) return -1;
if(player.countCards('h')>=player.hp) return -0.1;
if(player.countCards('h')>1) return -0.5;
if (player.countCards("h") >= player.hp) return -0.1;
if (player.countCards("h") > 1) return -0.5;
return 0;
},
target:-1
target: -1,
},
tag: {
damage: 1,
fireDamage: 1,
natureDamage: 1,
}
}
},
},
},
jihuocard: {
fullskin: true,
type:'trick',
type: "trick",
enable: true,
toself: true,
filterTarget: function (card, player, target) {
@ -51,43 +51,42 @@ game.import('card',function(lib,game,ui,get,ai,_status){
modTarget: true,
content: function () {
if (_status.currentPhase == target) {
target.addTempSkill('jihuocard2');
target.addTempSkill("jihuocard2");
}
target.draw();
},
ai: {
order: 10,
result: {
target:1
}
}
target: 1,
},
},
},
zhaomingdan: {
fullskin: true,
type:'trick',
type: "trick",
enable: true,
filterTarget: function (card, player, target) {
return player!=target&&target.countCards('hej')>0;
return player != target && target.countCards("hej") > 0;
},
content: function () {
'step 0'
if(target.countCards('hej')){
var next=player.discardPlayerCard('hej',target,true);
"step 0";
if (target.countCards("hej")) {
var next = player.discardPlayerCard("hej", target, true);
next.visible = true;
next.delay = false;
}
else{
} else {
event.goto(2);
}
'step 1'
"step 1";
if (result.bool) {
game.delay(0.5);
}
'step 2'
"step 2";
target.draw(false);
target.$draw();
game.delay(0.5);
'step 3'
"step 3";
player.draw();
},
ai: {
@ -97,49 +96,49 @@ game.import('card',function(lib,game,ui,get,ai,_status){
result: {
target: function (player, target) {
if (get.attitude(player, target) > 0) {
var js=target.getCards('j');
var js = target.getCards("j");
if (js.length) {
var jj = js[0].viewAs ? { name: js[0].viewAs } : js[0];
if(jj.name=='zhaomingdan') return 3;
if (jj.name == "zhaomingdan") return 3;
if (js.length == 1 && get.effect(target, jj, target, player) >= 0) {
return 0;
}
return 3;
}
}
var es=target.getCards('e');
var nh=target.countCards('h');
var noe=(es.length==0||target.hasSkillTag('noe'));
var noe2=(es.length==1&&es[0].name=='baiyin'&&target.hp<target.maxHp);
var noh=(nh==0||target.hasSkillTag('noh'));
var es = target.getCards("e");
var nh = target.countCards("h");
var noe = es.length == 0 || target.hasSkillTag("noe");
var noe2 = es.length == 1 && es[0].name == "baiyin" && target.hp < target.maxHp;
var noh = nh == 0 || target.hasSkillTag("noh");
if (noh && noe) return 0;
if (noh && noe2) return 0.01;
if(get.attitude(player,target)<=0) return (target.countCards('he'))?-1.5:1.5;
if (get.attitude(player, target) <= 0)
return target.countCards("he") ? -1.5 : 1.5;
return 0.1;
}
}
}
},
},
},
},
shijieshu: {
fullskin: true,
enable: true,
type:'trick',
type: "trick",
filterTarget: function (card, player, target) {
return !target.isMin();
},
content: function () {
'step 0'
"step 0";
var cards = [];
var subtype = null;
for (var i = 0; i < 2; i++) {
var card = get.cardPile(function (card) {
if(get.type(card)=='equip'){
if (get.type(card) == "equip") {
if (subtype) {
if (get.subtype(card) == subtype) {
return false;
}
}
else{
} else {
subtype = get.subtype(card);
}
return true;
@ -167,7 +166,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}
}
event.cards = cards;
'step 1'
"step 1";
if (event.cards.length) {
target.equip(event.cards.shift());
game.delay(0.5);
@ -175,11 +174,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){
event.redo();
}
}
'step 2'
"step 2";
game.delay(0.5);
'step 3'
if(target.countCards('he')){
target.chooseToDiscard('he',true);
"step 3";
if (target.countCards("he")) {
target.chooseToDiscard("he", true);
}
},
ai: {
@ -188,26 +187,26 @@ game.import('card',function(lib,game,ui,get,ai,_status){
useful: 2,
result: {
target: function (player, target) {
return Math.max(0,2-target.countCards('e'));
return Math.max(0, 2 - target.countCards("e"));
},
},
tag: {
norepeat:1
}
}
norepeat: 1,
},
},
},
shandianjian: {
fullskin: true,
type:'trick',
type: "trick",
enable: true,
cardnature:'thunder',
cardnature: "thunder",
filterTarget: function (card, player, target) {
if(player!=game.me&&player.countCards('h')<2) return false;
return target.countCards('h')>0;
if (player != game.me && player.countCards("h") < 2) return false;
return target.countCards("h") > 0;
},
content: function () {
"step 0"
if(target.countCards('h')==0){
"step 0";
if (target.countCards("h") == 0) {
event.finish();
return;
}
@ -216,29 +215,38 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if (rand) return Math.random();
return get.value(card);
};
"step 1"
event.dialog=ui.create.dialog(get.translation(target.name)+'展示的手牌',result.cards);
"step 1";
event.dialog = ui.create.dialog(
get.translation(target.name) + "展示的手牌",
result.cards
);
event.card2 = result.cards[0];
event.videoId = lib.status.videoId++;
game.addVideo('cardDialog',null,[get.translation(target.name)+'展示的手牌',get.cardsInfo(result.cards),event.videoId]);
game.log(target,'展示了',event.card2);
player.chooseToDiscard(function(card){
game.addVideo("cardDialog", null, [
get.translation(target.name) + "展示的手牌",
get.cardsInfo(result.cards),
event.videoId,
]);
game.log(target, "展示了", event.card2);
player.chooseToDiscard(
function (card) {
return get.suit(card) == get.suit(_status.event.parent.card2);
},function(card){
if(get.damageEffect(target,player,player,'thunder')>0){
},
function (card) {
if (get.damageEffect(target, player, player, "thunder") > 0) {
return 6 - get.value(card, _status.event.player);
}
return -1;
}).prompt=false;
}
).prompt = false;
game.delay(2);
"step 2"
"step 2";
if (result.bool) {
target.damage('thunder');
target.damage("thunder");
} else {
target.addTempSkill("huogong2");
}
else{
target.addTempSkill('huogong2');
}
game.addVideo('cardDialog',null,event.videoId);
game.addVideo("cardDialog", null, event.videoId);
event.dialog.close();
},
ai: {
@ -252,49 +260,53 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
result: {
player: function (player) {
var nh=player.countCards('h');
if(nh<=player.hp&&nh<=4&&_status.event.name=='chooseToUse'){
if(typeof _status.event.filterCard=='function'&&
_status.event.filterCard(new lib.element.VCard({name:'shandianjian'}))){
var nh = player.countCards("h");
if (nh <= player.hp && nh <= 4 && _status.event.name == "chooseToUse") {
if (
typeof _status.event.filterCard == "function" &&
_status.event.filterCard(new lib.element.VCard({ name: "shandianjian" }))
) {
return -10;
}
if (_status.event.skill) {
var viewAs = get.info(_status.event.skill).viewAs;
if(viewAs=='shandianjian') return -10;
if(viewAs&&viewAs.name=='shandianjian') return -10;
if (viewAs == "shandianjian") return -10;
if (viewAs && viewAs.name == "shandianjian") return -10;
}
}
return 0;
},
target: function (player, target) {
if(target.hasSkill('huogong2')||target.countCards('h')==0) return 0;
if(player.countCards('h')<=1) return 0;
if (target.hasSkill("huogong2") || target.countCards("h") == 0) return 0;
if (player.countCards("h") <= 1) return 0;
if (target == player) {
if(typeof _status.event.filterCard=='function'&&
_status.event.filterCard(new lib.element.VCard({name:'shandianjian'}))){
if (
typeof _status.event.filterCard == "function" &&
_status.event.filterCard(new lib.element.VCard({ name: "shandianjian" }))
) {
return -1.5;
}
if (_status.event.skill) {
var viewAs = get.info(_status.event.skill).viewAs;
if(viewAs=='shandianjian') return -1.5;
if(viewAs&&viewAs.name=='shandianjian') return -1.5;
if (viewAs == "shandianjian") return -1.5;
if (viewAs && viewAs.name == "shandianjian") return -1.5;
}
return 0;
}
return -1.5;
}
},
},
tag: {
damage: 1,
thunderDamage: 1,
natureDamage: 1,
norepeat:1
}
}
norepeat: 1,
},
},
},
shihuawuqi: {
fullskin: true,
type:'basic',
type: "basic",
enable: true,
usable: 1,
filterTarget: function (card, player, target) {
@ -302,11 +314,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
selectTarget: -1,
content: function () {
player.addTempSkill('shihuawuqi');
if(!player.countCards('h','sha')){
var card=get.cardPile('sha');
player.addTempSkill("shihuawuqi");
if (!player.countCards("h", "sha")) {
var card = get.cardPile("sha");
if (card) {
player.gain(card,'gain2');
player.gain(card, "gain2");
}
}
},
@ -316,26 +328,26 @@ game.import('card',function(lib,game,ui,get,ai,_status){
order: 8,
result: {
target: function (player, target) {
return target.countCards('h','sha')?0:1;
}
}
}
return target.countCards("h", "sha") ? 0 : 1;
},
},
},
},
siwangchanrao: {
enable: true,
type:'trick',
type: "trick",
filterTarget: function (card, player, target) {
return player!=target&&target.countCards('h')>0;
return player != target && target.countCards("h") > 0;
},
selectTarget: 1,
content: function () {
'step 0'
var hs=target.getCards('h');
"step 0";
var hs = target.getCards("h");
if (hs.length) {
target.discard(hs.randomGet());
}
'step 1'
if(!target.countCards('h')){
"step 1";
if (!target.countCards("h")) {
player.draw();
}
},
@ -346,15 +358,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){
result: {
target: -1,
player: function (player, target) {
if(target.countCards('h')==1) return 1;
}
}
}
if (target.countCards("h") == 1) return 1;
},
},
},
},
dunpaigedang: {
fullskin: true,
enable: true,
type:'trick',
type: "trick",
toself: true,
filterTarget: function (card, player, target) {
return player == target;
@ -362,12 +374,12 @@ game.import('card',function(lib,game,ui,get,ai,_status){
selectTarget: -1,
modTarget: true,
content: function () {
'step 0'
"step 0";
target.changeHujia();
target.draw();
'step 1'
if(target.countCards('he')){
target.chooseToDiscard('he',true);
"step 1";
if (target.countCards("he")) {
target.chooseToDiscard("he", true);
}
},
ai: {
@ -375,13 +387,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){
value: 7,
useful: 3,
result: {
target:1
}
}
target: 1,
},
},
},
chuansongmen: {
fullskin: true,
type:'trick',
type: "trick",
enable: true,
discard: false,
toself: true,
@ -393,41 +405,40 @@ game.import('card',function(lib,game,ui,get,ai,_status){
// usable:3,
// forceUsable:true,
content: function () {
'step 0'
"step 0";
var gained = get.cards()[0];
target.gain(gained,'gain2');
if(event.getParent(3).name=='phaseUse'&&_status.currentPhase==target&&
lib.filter.filterCard(gained,target,event.getParent(2))){
target.gain(gained, "gain2");
if (
event.getParent(3).name == "phaseUse" &&
_status.currentPhase == target &&
lib.filter.filterCard(gained, target, event.getParent(2))
) {
var next = target.chooseToUse();
next.filterCard = function (card) {
return card == gained;
};
next.prompt='是否使用'+get.translation(gained)+'';
next.prompt = "是否使用" + get.translation(gained) + "";
if (cards[0]) {
ui.special.appendChild(cards[0]);
}
else{
} else {
event.finish();
}
}
else{
} else {
// if(cards[0]){
// cards[0].discard();
// }
event.finish();
}
'step 1'
if(result.bool&&!target.hasSkill('chuansongmen3')){
if(target.hasSkill('chuansongmen2')){
target.addTempSkill('chuansongmen3');
}
else{
target.addTempSkill('chuansongmen2');
"step 1";
if (result.bool && !target.hasSkill("chuansongmen3")) {
if (target.hasSkill("chuansongmen2")) {
target.addTempSkill("chuansongmen3");
} else {
target.addTempSkill("chuansongmen2");
}
cards[0].fix();
target.gain(cards,'gain2');
}
else{
target.gain(cards, "gain2");
} else {
cards[0].discard();
}
},
@ -436,16 +447,16 @@ game.import('card',function(lib,game,ui,get,ai,_status){
value: 7,
useful: 3,
result: {
target:1
target: 1,
},
tag: {
norepeat:1
}
}
norepeat: 1,
},
},
},
tanshezhiren: {
fullskin: true,
type:'trick',
type: "trick",
enable: true,
// recastable:true,
filterTarget: function (card, player, target) {
@ -454,25 +465,25 @@ game.import('card',function(lib,game,ui,get,ai,_status){
selectTarget: -1,
modTarget: true,
content: function () {
'step 0'
"step 0";
event.current = target;
event.num = game.countPlayer();
if (event.num % 2 == 0) {
event.num--;
}
'step 1'
"step 1";
if (event.num) {
var enemies = event.current.getEnemies();
enemies.remove(player);
for (var i = 0; i < enemies.length; i++) {
if(!enemies[i].countCards('h')){
if (!enemies[i].countCards("h")) {
enemies.splice(i--, 1);
}
}
if (enemies.length) {
var enemy = enemies.randomGet();
event.current.line(enemy);
enemy.discard(enemy.getCards('h').randomGet());
enemy.discard(enemy.getCards("h").randomGet());
event.current = enemy;
event.num--;
event.redo();
@ -485,26 +496,28 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return 0;
},
result: {
player:1
player: 1,
},
tag: {
multineg: 1,
multitarget:1
}
}
multitarget: 1,
},
},
},
xingjiegoutong: {
fullskin: true,
type:'trick',
type: "trick",
enable: true,
selectTarget: -1,
modTarget: true,
toself: true,
filterTarget:function(card,player,target){return player==target},
filterTarget: function (card, player, target) {
return player == target;
},
content: function () {
target.gainMaxHp();
target.recover();
target.discard(target.getCards('h'));
target.discard(target.getCards("h"));
},
ai: {
basic: {
@ -514,38 +527,38 @@ game.import('card',function(lib,game,ui,get,ai,_status){
order: 1,
result: {
target: function (player, target) {
if(target.countCards('h','tao')) return 0;
var nh=target.countCards('h');
if (target.countCards("h", "tao")) return 0;
var nh = target.countCards("h");
if (nh <= 2) return 1;
if (target.hp == 1 && target.maxHp > 2) return 1;
return 0;
},
},
tag: {
recover:1
}
}
recover: 1,
},
},
},
shenenshu: {
fullskin: true,
enable: true,
type:'trick',
type: "trick",
selectTarget: -1,
filterTarget: function (card, player, target) {
return target == player;
},
modTarget: true,
content: function () {
'step 0'
var cards=target.getCards('h');
"step 0";
var cards = target.getCards("h");
if (cards.length) {
target.lose(cards)._triggered = null;
}
event.num = 1 + cards.length;
'step 1'
"step 1";
var cards = [];
var list=get.typeCard('basic');
list.remove('du');
var list = get.typeCard("basic");
list.remove("du");
if (list.length) {
for (var i = 0; i < event.num; i++) {
cards.push(game.createCard(list.randomGet()));
@ -557,16 +570,16 @@ game.import('card',function(lib,game,ui,get,ai,_status){
order: 1,
result: {
target: function (player, target) {
var hs=target.getCards('h');
var hs = target.getCards("h");
for (var i = 0; i < hs.length; i++) {
if(get.type(hs[i])!='basic'&&get.useful(hs[i])>=6){
if (get.type(hs[i]) != "basic" && get.useful(hs[i]) >= 6) {
return 0;
}
}
return 1;
}
}
}
},
},
},
},
zhiliaobo: {
fullskin: true,
@ -574,17 +587,16 @@ game.import('card',function(lib,game,ui,get,ai,_status){
filterTarget: function (card, player, target) {
return target.hp < target.maxHp;
},
type:'trick',
type: "trick",
content: function () {
'step 0'
"step 0";
target.judge(function (card) {
return get.color(card)=='red'?1:0;
return get.color(card) == "red" ? 1 : 0;
});
'step 1'
"step 1";
if (result.bool) {
target.recover();
}
else{
} else {
target.changeHujia();
}
},
@ -601,56 +613,55 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if (num == 1) return 1;
if (target.hp == 1) return 2.5;
return 2;
}
},
},
tag: {
recover:1
}
}
recover: 1,
},
},
},
yuansuhuimie: {
fullskin: true,
type:'trick',
type: "trick",
enable: true,
selectTarget: -1,
filterTarget: true,
reverseOrder: true,
content: function () {
"step 0"
target.chooseToDiscard([1,2],'he').ai=function(card){
if(get.damageEffect(target,player,target,'thunder')>=0){
if(target.hasSkillTag('maixie')){
"step 0";
target.chooseToDiscard([1, 2], "he").ai = function (card) {
if (get.damageEffect(target, player, target, "thunder") >= 0) {
if (target.hasSkillTag("maixie")) {
if (ui.selected.cards.length) return 0;
}
else{
} else {
return 0;
}
}
if(player.hasSkillTag('notricksource')) return 0;
if(target.hasSkillTag('notrick')) return 0;
if(card.name=='tao') return 0;
if(target.hp==1&&card.name=='jiu') return 0;
if(get.type(card)!='basic'){
if (player.hasSkillTag("notricksource")) return 0;
if (target.hasSkillTag("notrick")) return 0;
if (card.name == "tao") return 0;
if (target.hp == 1 && card.name == "jiu") return 0;
if (get.type(card) != "basic") {
return 10 - get.value(card);
}
return 8 - get.value(card);
};
"step 1"
"step 1";
if (!result.bool || result.cards.length < 2) {
if(result.bool) target.damage(2-result.cards.length,'thunder');
else target.damage(2,'thunder');
if (result.bool) target.damage(2 - result.cards.length, "thunder");
else target.damage(2, "thunder");
}
},
ai: {
basic: {
order: 7,
useful:[5,1]
useful: [5, 1],
},
result: {
target: function (player, target) {
if(target.hasSkillTag('nothunder')) return 0;
if (target.hasSkillTag("nothunder")) return 0;
if (player.hasUnknown(2)) return 0;
var nh=target.countCards('he');
var nh = target.countCards("he");
if (target == player) nh--;
if (nh == 2) return -2.5;
if (nh == 1) return -3;
@ -666,9 +677,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){
multineg: 1,
discard: 2,
loseCard: 2,
}
}
}
},
},
},
},
skill: {
chuansongmen2: {},
@ -677,65 +688,69 @@ game.import('card',function(lib,game,ui,get,ai,_status){
mod: {
attackFrom: function (from, to, distance) {
return distance - 1;
}
}
},
},
},
jihuocard2: {
mod: {
maxHandcard: function (player, num) {
return num + 2;
}
}
}
},
},
},
},
translate: {
linghunzhihuo:'灵魂之火',
linghunzhihuo_info:'对一名角色造成1点火焰伤害然后随机弃置一张手牌。',
shenenshu:'神恩术',
shenenshu_info:'出牌阶段对自己使用,将所有手牌(含此张)替换为基本牌。',
zhiliaobo:'治疗波',
zhiliaobo_info:'出牌阶段对一名受伤角色使用目标进行一次判定若结果为红色则回复1点体力否则获得1点护甲。',
yuansuhuimie:'元素毁灭',
yuansuhuimie_info:'对所有角色使用令目标弃置0~2张牌并受到2-X点雷电伤害X为其弃置的手牌数。',
xingjiegoutong:'星界沟通',
xingjiegoutong_info:'增加1点体力上限并回复1点体力弃置你的所有手牌。',
tanshezhiren:'弹射之刃',
tanshezhiren_info:'出牌阶段对自己使用,依次按敌方-友方-敌方-的顺序随机弃置阵营内一名随机角色的一张牌目标不包含你共结算X次X为存活角色数若X为偶数改为X-1。',
chuansongmen:'传送门',
chuansongmen_info:'摸一张牌并展示若发生在出牌阶段你可以立即使用摸到的牌若如此做你将传送门收回手牌每阶段最多收回2张传送门。',
dunpaigedang:'盾牌格挡',
dunpaigedang_info:'获得1点护甲值摸一张牌然后弃置一张牌。',
siwangchanrao:'死亡缠绕',
siwangchanrao_infox:'弃置一名其他角色的一张手牌,若其此时没有手牌,则你摸一张牌。',
shihuawuqi:'石化武器',
shihuawuqi_infox:'本回合内攻击范围+1若你手牌中没有杀则从牌堆中获得一张杀。',
shandianjian:'闪电箭',
shandianjian_info:'目标角色展示一张手牌然后若你能弃掉一张与所展示牌相同花色的手牌则对该角色造成1点雷电伤害。',
shijieshu:'视界术',
shijieshu_info:'目标从牌堆或弃牌堆中随机装备两张类别不同的装备牌,然后弃置一张牌。',
zhaomingdan:'照明弹',
zhaomingdan_info:'观看一名其他角色的手牌,并弃置其区域内的一张牌,然后其与你各摸一张牌。',
jihuocard:'激活',
jihuocard_info:'摸一张牌,本回合手牌上限+2。',
linghunzhihuo: "灵魂之火",
linghunzhihuo_info: "对一名角色造成1点火焰伤害然后随机弃置一张手牌。",
shenenshu: "神恩术",
shenenshu_info: "出牌阶段对自己使用,将所有手牌(含此张)替换为基本牌。",
zhiliaobo: "治疗波",
zhiliaobo_info:
"出牌阶段对一名受伤角色使用目标进行一次判定若结果为红色则回复1点体力否则获得1点护甲。",
yuansuhuimie: "元素毁灭",
yuansuhuimie_info: "对所有角色使用令目标弃置0~2张牌并受到2-X点雷电伤害X为其弃置的手牌数。",
xingjiegoutong: "星界沟通",
xingjiegoutong_info: "增加1点体力上限并回复1点体力弃置你的所有手牌。",
tanshezhiren: "弹射之刃",
tanshezhiren_info:
"出牌阶段对自己使用,依次按敌方-友方-敌方-的顺序随机弃置阵营内一名随机角色的一张牌目标不包含你共结算X次X为存活角色数若X为偶数改为X-1。",
chuansongmen: "传送门",
chuansongmen_info:
"摸一张牌并展示若发生在出牌阶段你可以立即使用摸到的牌若如此做你将传送门收回手牌每阶段最多收回2张传送门。",
dunpaigedang: "盾牌格挡",
dunpaigedang_info: "获得1点护甲值摸一张牌然后弃置一张牌。",
siwangchanrao: "死亡缠绕",
siwangchanrao_infox: "弃置一名其他角色的一张手牌,若其此时没有手牌,则你摸一张牌。",
shihuawuqi: "石化武器",
shihuawuqi_infox: "本回合内攻击范围+1若你手牌中没有杀则从牌堆中获得一张杀。",
shandianjian: "闪电箭",
shandianjian_info:
"目标角色展示一张手牌然后若你能弃掉一张与所展示牌相同花色的手牌则对该角色造成1点雷电伤害。",
shijieshu: "视界术",
shijieshu_info: "目标从牌堆或弃牌堆中随机装备两张类别不同的装备牌,然后弃置一张牌。",
zhaomingdan: "照明弹",
zhaomingdan_info: "观看一名其他角色的手牌,并弃置其区域内的一张牌,然后其与你各摸一张牌。",
jihuocard: "激活",
jihuocard_info: "摸一张牌,本回合手牌上限+2。",
},
list: [
['heart',2,'shenenshu'],
['diamond',12,'shenenshu'],
['club',7,'zhiliaobo'],
['spade',1,'zhiliaobo'],
['spade',13,'yuansuhuimie'],
['spade',13,'xingjiegoutong'],
['diamond',2,'tanshezhiren'],
['diamond',2,'chuansongmen'],
['heart',2,'chuansongmen'],
['club',3,'dunpaigedang'],
['club',3,'shandianjian','thunder'],
['spade',1,'shandianjian','thunder'],
['spade',7,'shijieshu'],
['diamond',5,'zhaomingdan'],
['heart',10,'zhaomingdan'],
['diamond',2,'jihuocard'],
['diamond',1,'linghunzhihuo'],
["heart", 2, "shenenshu"],
["diamond", 12, "shenenshu"],
["club", 7, "zhiliaobo"],
["spade", 1, "zhiliaobo"],
["spade", 13, "yuansuhuimie"],
["spade", 13, "xingjiegoutong"],
["diamond", 2, "tanshezhiren"],
["diamond", 2, "chuansongmen"],
["heart", 2, "chuansongmen"],
["club", 3, "dunpaigedang"],
["club", 3, "shandianjian", "thunder"],
["spade", 1, "shandianjian", "thunder"],
["spade", 7, "shijieshu"],
["diamond", 5, "zhaomingdan"],
["heart", 10, "zhaomingdan"],
["diamond", 2, "jihuocard"],
["diamond", 1, "linghunzhihuo"],
],
};
});

View File

@ -1,10 +1,10 @@
'use strict';
game.import('card',function(lib,game,ui,get,ai,_status){
import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("card", function () {
return {
name:'huanlekapai',
name: "huanlekapai",
connect: true,
card: {
"monkey":{
monkey: {
audio: true,
fullskin: true,
type: "equip",
@ -16,7 +16,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
},
},
"mianju":{
mianju: {
audio: true,
fullskin: true,
type: "equip",
@ -33,7 +33,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
},
},
"shoulijian":{
shoulijian: {
audio: true,
type: "basic",
enable: true,
@ -43,20 +43,20 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
filterTarget: lib.filter.notMe,
content: function () {
"step 0"
if(!target.countCards('he',{type:'equip'})){
"step 0";
if (!target.countCards("he", { type: "equip" })) {
target.damage();
event.finish();
}
else{
target.chooseToDiscard('he',{type:'equip'},'弃置一张装备牌或受到1点伤害').ai=function(card){
} else {
target.chooseToDiscard("he", { type: "equip" }, "弃置一张装备牌或受到1点伤害").ai =
function (card) {
var player = _status.event.player;
var source = _status.event.getParent().player;
if (get.damageEffect(player, source, player) > 0) return -1;
return 7 - get.value(card);
};
}
"step 1"
"step 1";
if (!result.bool) {
target.damage();
}
@ -77,7 +77,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
selectTarget: 1,
},
"kuwu":{
kuwu: {
audio: true,
fullskin: true,
type: "equip",
@ -93,7 +93,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
equipValue: 6,
},
},
"xuelunyang":{
xuelunyang: {
audio: true,
fullskin: true,
type: "equip",
@ -105,7 +105,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
},
},
"jiuwei":{
jiuwei: {
audio: true,
fullskin: true,
type: "equip",
@ -119,7 +119,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
},
skill: {
"monkey":{
monkey: {
trigger: {
global: "useCardToBegin",
},
@ -128,7 +128,14 @@ game.import('card',function(lib,game,ui,get,ai,_status){
var card = player.getEquip(5);
if (card) {
var name = card.name;
if(name&&name.indexOf('monkey')!=-1&&event.name=='tao'&&event.player!=player&&event.cards.filterInD().length>0) return true;
if (
name &&
name.indexOf("monkey") != -1 &&
event.name == "tao" &&
event.player != player &&
event.cards.filterInD().length > 0
)
return true;
}
return false;
},
@ -136,17 +143,17 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return get.attitude(player, event.player) <= 0;
},
content: function () {
"step 0"
player.$fullscreenpop('猴子偷桃','fire');
"step 0";
player.$fullscreenpop("猴子偷桃", "fire");
trigger.untrigger();
trigger.finish();
"step 1"
"step 1";
player.discard(player.getEquip(5));
"step 2"
player.gain(trigger.cards.filterInD(),'gain2','log');
"step 2";
player.gain(trigger.cards.filterInD(), "gain2", "log");
},
},
"mianju":{
mianju: {
audio: true,
trigger: {
player: "turnOverBefore",
@ -160,12 +167,12 @@ game.import('card',function(lib,game,ui,get,ai,_status){
noturnOver: true,
effect: {
target: function (card, player, target, current) {
if(get.tag(card,'turnOver')) return [0,0];
if (get.tag(card, "turnOver")) return [0, 0];
},
},
},
},
"kuwu":{
kuwu: {
audio: true,
trigger: {
source: "damageSource",
@ -174,13 +181,18 @@ game.import('card',function(lib,game,ui,get,ai,_status){
equipSkill: true,
filter: function (event, player) {
if (event._notrigger.includes(event.player)) return false;
return event.card&&event.card.name=='sha'&&event.notLink()&&event.player.countCards('he')>0;
return (
event.card &&
event.card.name == "sha" &&
event.notLink() &&
event.player.countCards("he") > 0
);
},
content: function () {
trigger.player.chooseToDiscard(true,'he');
trigger.player.chooseToDiscard(true, "he");
},
},
"xuelunyang":{
xuelunyang: {
audio: true,
trigger: {
player: "phaseBegin",
@ -188,8 +200,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){
equipSkill: true,
direct: true,
content: function () {
'step 0'
player.chooseTarget(get.prompt2('xuelunyang'),function(card,player,target){
"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);
@ -200,26 +213,30 @@ game.import('card',function(lib,game,ui,get,ai,_status){
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.includes(skills[j])){
if (
lib.translate[skills[j] + "_info"] &&
lib.skill[skills[j]] &&
!lib.skill[skills[j]].unique &&
!pss.includes(skills[j])
) {
return true;
}
}
}
return false;
}
}).set('ai',function(target){
})
.set("ai", function (target) {
return Math.random();
});
'step 1'
"step 1";
if (result.bool) {
event.target = result.targets[0];
player.logSkill('xuelunyang',event.target);
}
else{
player.logSkill("xuelunyang", event.target);
} else {
event.finish();
}
'step 2'
"step 2";
var names = [];
var list = [];
if (target.name && !target.isUnseen(0)) names.add(target.name);
@ -231,22 +248,31 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if (info) {
var skills = info[3];
for (var j = 0; j < skills.length; j++) {
if(lib.translate[skills[j]+'_info']&&lib.skill[skills[j]]&&
if (
lib.translate[skills[j] + "_info"] &&
lib.skill[skills[j]] &&
!lib.skill[skills[j]].unique &&
!pss.includes(skills[j])){
!pss.includes(skills[j])
) {
list.push(skills[j]);
}
}
}
}
player.chooseControl(list).set('prompt','选择获得一个技能').set('choice',get.max(list,get.skillRank,'item')).set('ai',function(){return _status.event.choice})
'step 3'
player
.chooseControl(list)
.set("prompt", "选择获得一个技能")
.set("choice", get.max(list, get.skillRank, "item"))
.set("ai", function () {
return _status.event.choice;
});
"step 3";
player.addTempSkill(result.control);
player.popup(result.control);
game.log(player,'获得了','#g【'+get.translation(result.control)+'】');
game.log(player, "获得了", "#g【" + get.translation(result.control) + "】");
},
},
"jiuwei":{
jiuwei: {
trigger: {
player: "phaseEnd",
},
@ -256,26 +282,26 @@ game.import('card',function(lib,game,ui,get,ai,_status){
content: function () {
if (player.isDamaged()) {
player.recover();
}
else{
} else {
player.draw();
}
},
},
},
translate: {
"monkey":"猴子",
"monkey_info":"猴子偷桃:当场上有其他角色使用【桃】时,你可以弃掉【猴子】,阻止【桃】的结算并将其收为手牌。",
"mianju":"漩涡面具",
"mianju_info":"<font color=#f00>锁定技</font> 你的武将牌不能被翻面。",
"shoulijian":"手里剑",
"shoulijian_info":"出牌阶段对一名距离1以外的角色使用令其弃置一张装备牌或受到1点伤害。",
"kuwu":"苦无",
"kuwu_info":"<font color=#f00>锁定技</font> 每当你使用【杀】造成一次伤害,受伤角色须弃置一张牌。",
"xuelunyang":"写轮眼",
"xuelunyang_info":"回合开始阶段,你可以选择一名角色,然后获得其一项技能,直到回合结束。",
"jiuwei":"九尾",
"jiuwei_info":"收集查克拉回合结束时若你已受伤你可回复1点体力否则摸一张牌。",
monkey: "猴子",
monkey_info:
"猴子偷桃:当场上有其他角色使用【桃】时,你可以弃掉【猴子】,阻止【桃】的结算并将其收为手牌。",
mianju: "漩涡面具",
mianju_info: "<font color=#f00>锁定技</font> 你的武将牌不能被翻面。",
shoulijian: "手里剑",
shoulijian_info: "出牌阶段对一名距离1以外的角色使用令其弃置一张装备牌或受到1点伤害。",
kuwu: "苦无",
kuwu_info: "<font color=#f00>锁定技</font> 每当你使用【杀】造成一次伤害,受伤角色须弃置一张牌。",
xuelunyang: "写轮眼",
xuelunyang_info: "回合开始阶段,你可以选择一名角色,然后获得其一项技能,直到回合结束。",
jiuwei: "九尾",
jiuwei_info: "收集查克拉回合结束时若你已受伤你可回复1点体力否则摸一张牌。",
},
list: [
["diamond", "5", "monkey"],
@ -286,5 +312,5 @@ game.import('card',function(lib,game,ui,get,ai,_status){
["spade", "4", "shoulijian"],
["club", "3", "mianju"],
],
}
};
});

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +1,21 @@
'use strict';
game.import('card',function(lib,game,ui,get,ai,_status){
import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("card", function () {
return {
name:'sp',
name: "sp",
connect: true,
card: {
jinchan: {
audio: true,
fullskin: true,
wuxieable: true,
type:'trick',
type: "trick",
notarget: true,
global:['g_jinchan','g_jinchan2'],
global: ["g_jinchan", "g_jinchan2"],
content: function () {
var evt = event.getParent(3)._trigger;
if (evt.jinchan) {
var type=get.type(evt.card,'trick');
if(type=='basic'||type=='trick'){
var type = get.type(evt.card, "trick");
if (type == "basic" || type == "trick") {
evt.neutralize();
}
}
@ -24,7 +24,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
ai: {
useful: function () {
var player = _status.event.player;
var nj=player.countCards('h','jinchan');
var nj = player.countCards("h", "jinchan");
var num = player.getHandcardLimit();
if (nj >= num) {
return 10;
@ -35,36 +35,35 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return 1;
},
result: {
player:1
player: 1,
},
value: 5,
},
value:5
}
},
qijia: {
audio: true,
fullskin: true,
type:'trick',
type: "trick",
enable: true,
filterTarget: function (card, player, target) {
if (target == player) return false;
if (target.getEquips(5).length) {
return target.countCards('e')>1;
}
else{
return target.countCards('e')>0;
return target.countCards("e") > 1;
} else {
return target.countCards("e") > 0;
}
},
content: function () {
'step 0'
var e1=[],e2=[];
var he=target.getCards('he');
"step 0";
var e1 = [],
e2 = [];
var he = target.getCards("he");
for (var i = 0; i < he.length; i++) {
if(get.type(he[i])=='equip'){
if (get.type(he[i]) == "equip") {
var subtype = get.subtype(he[i]);
if(subtype=='equip1'||subtype=='equip4'){
if (subtype == "equip1" || subtype == "equip4") {
e1.push(he[i]);
}
else if(subtype=='equip2'||subtype=='equip3'){
} else if (subtype == "equip2" || subtype == "equip3") {
e2.push(he[i]);
}
}
@ -76,22 +75,21 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}
event.e1 = e1;
event.e2 = e2;
target.chooseControl(choice).set('choiceList',['弃置'+get.translation(e1),'弃置'+get.translation(e2)]);
}
else{
target
.chooseControl(choice)
.set("choiceList", ["弃置" + get.translation(e1), "弃置" + get.translation(e2)]);
} else {
if (e1.length) {
target.discard(e1);
}
else if(e2.length){
} else if (e2.length) {
target.discard(e2);
}
event.finish();
}
'step 1'
"step 1";
if (result.index == 0) {
target.discard(event.e1);
}
else{
} else {
target.discard(event.e2);
}
},
@ -101,14 +99,14 @@ game.import('card',function(lib,game,ui,get,ai,_status){
value: 5,
result: {
target: function (player, target) {
var num1=0,num2=0;
var num1 = 0,
num2 = 0;
for (var i = 1; i <= 4; i++) {
var card = target.getEquip(i);
if (card) {
if (i == 1 || i == 4) {
num1 += get.equipValue(card);
}
else{
} else {
num2 += get.equipValue(card);
}
}
@ -116,32 +114,29 @@ game.import('card',function(lib,game,ui,get,ai,_status){
var num;
if (num1 == 0) {
num = num2;
}
else if(num2==0){
} else if (num2 == 0) {
num = num1;
}
else{
} else {
num = Math.min(num1, num2);
}
if (num > 0) {
return -0.8 - num / 10;
}
else{
} else {
return 0;
}
}
},
},
tag: {
loseCard: 1,
discard:1
}
}
discard: 1,
},
},
},
fulei: {
audio: true,
fullskin: true,
type:'delay',
cardnature:'thunder',
type: "delay",
cardnature: "thunder",
modTarget: function (card, player, target) {
return lib.filter.judge(card, player, target);
},
@ -149,12 +144,12 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return player.canAddJudge(card);
},
filterTarget: function (card, player, target) {
return (lib.filter.judge(card,player,target)&&player==target);
return lib.filter.judge(card, player, target) && player == target;
},
selectTarget: [-1, -1],
toself: true,
judge: function (card) {
if(get.suit(card)=='spade') return -6;
if (get.suit(card) == "spade") return -6;
return 6;
},
judge2: function (result) {
@ -162,25 +157,29 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return false;
},
cardPrompt: function (card) {
var str='出牌阶段对你使用。你将【浮雷】置入判定区。若判定结果为♠则目标角色受到X点雷电伤害X为此牌判定结果为♠的次数。判定完成后将此牌移动到下家的判定区里。';
if(card.storage&&card.storage.fulei) str+=('<br><span style="font-family:yuanli">此牌已判定命中过:'+card.storage.fulei+'次</span>');
var str =
"出牌阶段对你使用。你将【浮雷】置入判定区。若判定结果为♠则目标角色受到X点雷电伤害X为此牌判定结果为♠的次数。判定完成后将此牌移动到下家的判定区里。";
if (card.storage && card.storage.fulei)
str +=
'<br><span style="font-family:yuanli">此牌已判定命中过:' +
card.storage.fulei +
"次</span>";
return str;
},
effect: function () {
'step 0'
"step 0";
if (result.bool == false) {
var card = cards[0];
if (card) {
if (!card.storage.fulei) {
card.storage.fulei = 1;
}
else{
} else {
card.storage.fulei++;
}
player.damage(card.storage.fulei,'thunder','nosource');
player.damage(card.storage.fulei, "thunder", "nosource");
}
}
'step 1'
"step 1";
player.addJudgeNext(card);
},
cancel: function () {
@ -195,68 +194,74 @@ game.import('card',function(lib,game,ui,get,ai,_status){
result: {
target: function (player, target) {
return lib.card.shandian.ai.result.target(player, target);
}
},
},
tag: {
damage: 0.25,
natureDamage: 0.25,
thunderDamage: 0.25,
}
}
},
},
},
qibaodao: {
audio: true,
fullskin: true,
type:'equip',
subtype:'equip1',
skills:['qibaodao','qibaodao2'],
type: "equip",
subtype: "equip1",
skills: ["qibaodao", "qibaodao2"],
distance: { attackFrom: -1 },
ai: {
equipValue: function (card, player) {
if(game.hasPlayer(function(current){
return player.canUse('sha',current)&&current.isHealthy()&&get.attitude(player,current)<0;
})){
if (
game.hasPlayer(function (current) {
return (
player.canUse("sha", current) &&
current.isHealthy() &&
get.attitude(player, current) < 0
);
})
) {
return 5;
}
return 3;
},
basic: {
equipValue:5
}
equipValue: 5,
},
},
},
zhungangshuo: {
audio: true,
fullskin: true,
type:'equip',
subtype:'equip1',
skills:['zhungangshuo'],
type: "equip",
subtype: "equip1",
skills: ["zhungangshuo"],
distance: { attackFrom: -2 },
ai: {
equipValue:4
equipValue: 4,
},
},
lanyinjia: {
fullskin: true,
type:'equip',
subtype:'equip2',
skills:['lanyinjia','lanyinjia2'],
type: "equip",
subtype: "equip2",
skills: ["lanyinjia", "lanyinjia2"],
ai: {
equipValue:6
}
equipValue: 6,
},
},
yinyueqiang: {
audio: true,
fullskin: true,
type:'equip',
subtype:'equip1',
type: "equip",
subtype: "equip1",
distance: { attackFrom: -2 },
ai: {
basic: {
equipValue:4
}
equipValue: 4,
},
skills:['yinyueqiang']
},
skills: ["yinyueqiang"],
},
shengdong: {
audio: true,
@ -268,10 +273,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return game.countPlayer() <= 2;
},
singleCard: true,
type:'trick',
type: "trick",
complexTarget: true,
multitarget: true,
targetprompt:['给一张牌','得两张牌'],
targetprompt: ["给一张牌", "得两张牌"],
filterTarget: function (card, player, target) {
return target !== player;
},
@ -279,31 +284,33 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return target !== preTarget && target !== player;
},
content: function () {
'step 0'
if(!player.countCards('h')){
"step 0";
if (!player.countCards("h")) {
event.finish();
}
else{
} else {
event.target1 = target;
event.target2 = event.addedTarget;
player.chooseCard('h','将一张手牌交给'+get.translation(event.target1),true);
player.chooseCard("h", "将一张手牌交给" + get.translation(event.target1), true);
}
'step 1'
"step 1";
player.give(result.cards, event.target1);
'step 2'
if(!event.target1.countCards('h')){
"step 2";
if (!event.target1.countCards("h")) {
event.finish();
}
else{
var he=event.target1.getCards('he');
} else {
var he = event.target1.getCards("he");
if (he.length <= 2) {
event.directresult = he;
}
else{
event.target1.chooseCard('he','将两张牌交给'+get.translation(event.target2),2,true);
} else {
event.target1.chooseCard(
"he",
"将两张牌交给" + get.translation(event.target2),
2,
true
);
}
}
'step 3'
"step 3";
if (!event.directresult) {
event.directresult = result.cards;
}
@ -318,50 +325,60 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
result: {
target: function (player, target) {
let hs=player.getCards('h');
if(hs.length<=1||!hs.some(i=>{
let hs = player.getCards("h");
if (
hs.length <= 1 ||
!hs.some((i) => {
return get.value(i) < 5.5;
})) return 0;
})
)
return 0;
let targets = get.copy(ui.selected.targets);
if (_status.event.preTarget) targets.add(_status.event.preTarget);
if (targets.length) {
if(target.hasSkillTag('nogain')) return 0.01;
if (target.hasSkillTag("nogain")) return 0.01;
return 2;
}
if(!target.countCards('he')) return 0;
if (!target.countCards("he")) return 0;
if (player.hasFriend()) return -1;
return 0;
}
}
}
},
},
},
},
zengbin: {
audio: true,
fullskin: true,
enable: true,
type:'trick',
type: "trick",
filterTarget: true,
content: function () {
'step 0'
"step 0";
target.draw(3);
'step 1'
if(target.countCards('he',{type:'basic'})<target.countCards('he')){
target.chooseToDiscard('增兵减灶','he',function(card){
return get.type(card)!='basic';
}).set('ai',function(card){
"step 1";
if (target.countCards("he", { type: "basic" }) < target.countCards("he")) {
target
.chooseToDiscard("增兵减灶", "he", function (card) {
return get.type(card) != "basic";
})
.set("ai", function (card) {
if (_status.event.goon) return 8 - get.value(card);
return 11 - get.value(card);
}).set('goon',target.countCards('h',function(card){
return get.value(card,target,'raw')<8;
})>1).set('prompt2','弃置一张非基本牌,或取消并弃置两张牌');
})
.set(
"goon",
target.countCards("h", function (card) {
return get.value(card, target, "raw") < 8;
}) > 1
)
.set("prompt2", "弃置一张非基本牌,或取消并弃置两张牌");
event.more = true;
} else {
target.chooseToDiscard("he", 2, true).set("ai", get.disvalue2);
}
else{
target.chooseToDiscard('he',2,true).set('ai',get.disvalue2);
}
'step 2'
"step 2";
if (event.more && !result.bool) {
target.chooseToDiscard('he',2,true).set('ai',get.disvalue2);
target.chooseToDiscard("he", 2, true).set("ai", get.disvalue2);
}
},
ai: {
@ -370,26 +387,26 @@ game.import('card',function(lib,game,ui,get,ai,_status){
value: 10,
tag: {
draw: 3,
discard:1
discard: 1,
},
result: {
target: function (player, target) {
if(target.hasJudge('lebu')) return 0;
return Math.max(1,2-target.countCards('h')/10);
}
}
}
if (target.hasJudge("lebu")) return 0;
return Math.max(1, 2 - target.countCards("h") / 10);
},
},
},
},
caomu: {
audio: true,
fullskin: true,
enable: true,
type:'delay',
type: "delay",
filterTarget: function (card, player, target) {
return (lib.filter.judge(card,player,target)&&player!=target);
return lib.filter.judge(card, player, target) && player != target;
},
judge: function (card) {
if(get.suit(card)=='club') return 1;
if (get.suit(card) == "club") return 1;
return -3;
},
judge2: function (result) {
@ -398,7 +415,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
effect: function () {
if (result.bool == false) {
player.addTempSkill('caomu_skill');
player.addTempSkill("caomu_skill");
}
},
ai: {
@ -414,65 +431,63 @@ game.import('card',function(lib,game,ui,get,ai,_status){
var att = get.attitude(player, current);
if (att > 3) {
return 1.1;
}
else if(att>0){
} else if (att > 0) {
return 1;
}
else if(att<-3){
} else if (att < -3) {
return -1.1;
}
else if(att<0){
} else if (att < 0) {
return -1;
}
}
});
},
target: function (player, target) {
if(target.hasJudge('bingliang')) return 0;
return -1.5/Math.sqrt(target.countCards('h')+1);
}
if (target.hasJudge("bingliang")) return 0;
return -1.5 / Math.sqrt(target.countCards("h") + 1);
},
},
},
},
}
}
},
skill: {
lanyinjia: {
equipSkill: true,
enable:['chooseToUse','chooseToRespond'],
enable: ["chooseToUse", "chooseToRespond"],
filterCard: true,
viewAs:{name:'shan'},
viewAs: { name: "shan" },
viewAsFilter: function (player) {
if(!player.countCards('hs')) return false;
if (!player.countCards("hs")) return false;
},
position:'hs',
prompt:'将一张手牌当闪使用或打出',
position: "hs",
prompt: "将一张手牌当闪使用或打出",
check: function (card) {
return 6 - get.value(card);
},
ai: {
respondShan: true,
skillTagFilter: function (player) {
if(!player.countCards('hs')) return false;
if (!player.countCards("hs")) return false;
},
effect: {
target: function (card, player, target, current) {
if(get.tag(card,'respondShan')&&current<0&&target.countCards('hs')) return 0.59
}
if (get.tag(card, "respondShan") && current < 0 && target.countCards("hs"))
return 0.59;
},
},
order: 4,
useful: -0.5,
value:-0.5
}
value: -0.5,
},
},
lanyinjia2: {
equipSkill: true,
trigger:{player:'damageBegin4'},
trigger: { player: "damageBegin4" },
forced: true,
filter: function (event, player) {
return event.card&&event.card.name=='sha'&&player.getEquips('lanyinjia').length>0;
return event.card && event.card.name == "sha" && player.getEquips("lanyinjia").length > 0;
},
content: function () {
var card=player.getEquips('lanyinjia');
var card = player.getEquips("lanyinjia");
if (card.length) {
player.discard(card);
}
@ -480,37 +495,41 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
zhungangshuo: {
equipSkill: true,
trigger:{player:'useCardToPlayered'},
logTarget:'target',
trigger: { player: "useCardToPlayered" },
logTarget: "target",
filter: function (event, player) {
return event.card.name=='sha'&&(event.player.countCards('h')||player.countCards('h'));
return (
event.card.name == "sha" && (event.player.countCards("h") || player.countCards("h"))
);
},
check: function (event, player) {
var target = event.target;
if (get.attitude(player, target) >= 0) return false;
if(player.hasCard(function(card){
if (
player.hasCard(function (card) {
return get.value(card) >= 8;
})){
})
) {
return false;
}
var n1=event.target.countCards('h');
return n1>0&&n1<=player.countCards('h');
var n1 = event.target.countCards("h");
return n1 > 0 && n1 <= player.countCards("h");
},
content: function () {
'step 0'
"step 0";
game.delayx();
'step 1'
trigger.target.discardPlayerCard('h',player,true);
'step 2'
player.discardPlayerCard('h',trigger.target,true);
}
"step 1";
trigger.target.discardPlayerCard("h", player, true);
"step 2";
player.discardPlayerCard("h", trigger.target, true);
},
},
qibaodao: {
equipSkill: true,
trigger:{source:'damageBegin1'},
trigger: { source: "damageBegin1" },
forced: true,
filter: function (event) {
return event.card&&event.card.name=='sha'&&event.player.isHealthy();
return event.card && event.card.name == "sha" && event.player.isHealthy();
},
content: function () {
trigger.num++;
@ -518,107 +537,117 @@ game.import('card',function(lib,game,ui,get,ai,_status){
ai: {
effect: {
player: function (card, player, target) {
if(card.name=='sha'&&target.isHealthy()&&get.attitude(player,target)>0){
if (
card.name == "sha" &&
target.isHealthy() &&
get.attitude(player, target) > 0
) {
return [1, -2];
}
}
}
}
},
},
},
},
qibaodao2: {
inherit:'qinggang_skill',
inherit: "qinggang_skill",
audio: true,
},
g_jinchan: {
cardSkill: true,
trigger:{target:'useCardToBefore'},
trigger: { target: "useCardToBefore" },
forced: true,
popup: false,
filter: function (event, player) {
if (event.player == player) return false;
if (event.getParent().directHit.includes(player)) return false;
var num=player.countCards('h','jinchan');
return num&&num==player.countCards('h');
var num = player.countCards("h", "jinchan");
return num && num == player.countCards("h");
},
content: function () {
'step 0'
player.chooseToUse('是否对'+get.translation(trigger.card)+'使用【金蝉脱壳】?').set('ai1',function(card){
"step 0";
player
.chooseToUse("是否对" + get.translation(trigger.card) + "使用【金蝉脱壳】?")
.set("ai1", function (card) {
return _status.event.bool;
}).set('bool',-get.effect(player,trigger.card,trigger.player,player)).set('respondTo',[trigger.player,trigger.card]).set('filterCard',function(card,player){
if(get.name(card)!='jinchan') return false;
return lib.filter.cardEnabled(card,player,'forceEnable');
})
.set("bool", -get.effect(player, trigger.card, trigger.player, player))
.set("respondTo", [trigger.player, trigger.card])
.set("filterCard", function (card, player) {
if (get.name(card) != "jinchan") return false;
return lib.filter.cardEnabled(card, player, "forceEnable");
});
trigger.jinchan = true;
'step 1'
"step 1";
delete trigger.jinchan;
}
},
},
g_jinchan2: {
trigger: {
player:'loseAfter',
global:'loseAsyncAfter',
player: "loseAfter",
global: "loseAsyncAfter",
},
forced: true,
cardSkill: true,
filter: function (event, player) {
if(event.type!='discard') return false;
if (event.type != "discard") return false;
var evt = event.getl(player);
if (!evt || !evt.cards2 || !evt.cards2.length) return false;
for (var i of evt.cards2) {
if(i.name=='jinchan') return true;
if (i.name == "jinchan") return true;
}
return false;
},
content: function () {
var num=0,cards=trigger.getl(player).cards2;
var num = 0,
cards = trigger.getl(player).cards2;
for (var i = 0; i < cards.length; i++) {
if(cards[i].name=='jinchan') num++;
if (cards[i].name == "jinchan") num++;
}
if (num) {
player.draw(num);
}
}
},
},
yinyueqiang: {
equipSkill: true,
trigger:{player:['useCard','respondAfter']},
trigger: { player: ["useCard", "respondAfter"] },
direct: true,
filter: function (event, player) {
if (_status.currentPhase == player) return false;
if (!event.cards) return false;
if (event.cards.length != 1) return false;
if (lib.filter.autoRespondSha.call({ player: player })) return false;
return get.color(event.cards[0])=='black';
return get.color(event.cards[0]) == "black";
},
content: function () {
'step 0'
var next=player.chooseToUse(get.prompt('yinyueqiang'),{name:'sha'});
"step 0";
var next = player.chooseToUse(get.prompt("yinyueqiang"), { name: "sha" });
next.aidelay = true;
next.logSkill='yinyueqiang';
next.logSkill = "yinyueqiang";
next.noButton = true;
'step 1'
"step 1";
if (result.bool) {
game.delay();
}
}
},
},
caomu_skill: {
cardSkill: true,
unique: true,
trigger:{player:'phaseDrawBegin'},
trigger: { player: "phaseDrawBegin" },
popup: false,
charlotte: true,
forced: true,
content: function () {
trigger.num--;
},
group:'caomu_skill2'
group: "caomu_skill2",
},
caomu_skill2: {
cardSkill: true,
popup: false,
forced: true,
trigger:{player:'phaseDrawAfter'},
trigger: { player: "phaseDrawAfter" },
content: function () {
var targets = game.filterPlayer(function (current) {
return get.distance(player, current) <= 1 && player != current;
@ -626,54 +655,64 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if (targets.length) {
game.asyncDraw(targets);
}
}
}
},
},
},
translate: {
qijia:'弃甲曳兵',
qijia_info:'出牌阶段对一名装备区里有牌的其他角色使用。该角色选择一项1.弃置手牌区和装备区里所有的武器和-1坐骑2.弃置手牌区和装备区里所有的防具和+1坐骑。',
jinchan:'金蝉脱壳',
g_jinchan2:'金蝉脱壳',
g_jinchan2_info:'当你因弃置而失去【金蝉脱壳】时,你摸一张牌。',
jinchan_info:'其他角色使用的基本牌或普通牌对你生效时,若你的所有手牌均为【金蝉脱壳】,则你可以使用此牌。你令此牌对你无效并摸两张牌。当你因弃置而失去【金蝉脱壳】时,你摸一张牌。',
fulei:'浮雷',
fulei_info:'出牌阶段对你使用。你将【浮雷】置入判定区。若判定结果为♠则目标角色受到X点雷电伤害X为此牌判定结果为♠的次数。判定完成后将此牌移动到下家的判定区里。',
qibaodao:'七宝刀',
qibaodao_info:'攻击范围2锁定技你使用【杀】无视目标防具若目标角色未损失体力值此【杀】伤害+1。',
qibaodao2:'七宝刀',
zhungangshuo:'衠钢槊',
zhungangshuo_info:'当你使用【杀】指定一名角色为目标后,你可令该角色弃置你的一张手牌,然后你弃置其一张手牌。',
lanyinjia:'烂银甲',
lanyinjia_info:'你可以将一张手牌当做【闪】使用或打出。锁定技,【烂银甲】不会无效化;当你受到【杀】造成的伤害时,弃置【烂银甲】。',
yinyueqiang:'银月枪',
yinyueqiang_info:'你的回合外,每当你使用或打出了一张黑色手牌(若为使用则在它结算之前),你可以立即对你攻击范围内的任意一名角色使用一张【杀】。',
shengdong:'声东击西',
shengdong_info:'出牌阶段对一名其他角色使用。你交给目标角色一张手牌若如此做其将两张牌交给另一名由你选择的其他角色不足则全给存活角色不超过2时可重铸。',
zengbin:'增兵减灶',
zengbin_info:'出牌阶段对一名角色使用。目标角色摸三张牌然后选择一项1.弃置一张非基本牌2.弃置两张牌。',
caomu:'草木皆兵',
caomu_info:'出牌阶段对一名其他角色使用。将【草木皆兵】放置于该角色的判定区里若判定结果不为梅花摸牌阶段目标角色少摸一张牌摸牌阶段结束时与其距离为1的角色各摸一张牌。',
qijia: "弃甲曳兵",
qijia_info:
"出牌阶段对一名装备区里有牌的其他角色使用。该角色选择一项1.弃置手牌区和装备区里所有的武器和-1坐骑2.弃置手牌区和装备区里所有的防具和+1坐骑。",
jinchan: "金蝉脱壳",
g_jinchan2: "金蝉脱壳",
g_jinchan2_info: "当你因弃置而失去【金蝉脱壳】时,你摸一张牌。",
jinchan_info:
"其他角色使用的基本牌或普通牌对你生效时,若你的所有手牌均为【金蝉脱壳】,则你可以使用此牌。你令此牌对你无效并摸两张牌。当你因弃置而失去【金蝉脱壳】时,你摸一张牌。",
fulei: "浮雷",
fulei_info:
"出牌阶段对你使用。你将【浮雷】置入判定区。若判定结果为♠则目标角色受到X点雷电伤害X为此牌判定结果为♠的次数。判定完成后将此牌移动到下家的判定区里。",
qibaodao: "七宝刀",
qibaodao_info:
"攻击范围2锁定技你使用【杀】无视目标防具若目标角色未损失体力值此【杀】伤害+1。",
qibaodao2: "七宝刀",
zhungangshuo: "衠钢槊",
zhungangshuo_info:
"当你使用【杀】指定一名角色为目标后,你可令该角色弃置你的一张手牌,然后你弃置其一张手牌。",
lanyinjia: "烂银甲",
lanyinjia_info:
"你可以将一张手牌当做【闪】使用或打出。锁定技,【烂银甲】不会无效化;当你受到【杀】造成的伤害时,弃置【烂银甲】。",
yinyueqiang: "银月枪",
yinyueqiang_info:
"你的回合外,每当你使用或打出了一张黑色手牌(若为使用则在它结算之前),你可以立即对你攻击范围内的任意一名角色使用一张【杀】。",
shengdong: "声东击西",
shengdong_info:
"出牌阶段对一名其他角色使用。你交给目标角色一张手牌若如此做其将两张牌交给另一名由你选择的其他角色不足则全给存活角色不超过2时可重铸。",
zengbin: "增兵减灶",
zengbin_info:
"出牌阶段对一名角色使用。目标角色摸三张牌然后选择一项1.弃置一张非基本牌2.弃置两张牌。",
caomu: "草木皆兵",
caomu_info:
"出牌阶段对一名其他角色使用。将【草木皆兵】放置于该角色的判定区里若判定结果不为梅花摸牌阶段目标角色少摸一张牌摸牌阶段结束时与其距离为1的角色各摸一张牌。",
},
list: [
['spade',1,'caomu'],
['club',3,'caomu'],
['heart',12,'shengdong'],
['club',9,'shengdong'],
['spade',9,'shengdong'],
['diamond',4,'zengbin'],
['heart',6,'zengbin'],
['spade',7,'zengbin'],
['diamond',12,'yinyueqiang'],
["spade",11,'jinchan'],
["club",12,'jinchan'],
["club",13,'jinchan'],
["club",12,'qijia'],
["club",13,'qijia'],
["spade",1,'fulei'],
["spade",6,'qibaodao'],
["spade",5,'zhungangshuo'],
["spade",2,'lanyinjia'],
["club",2,'lanyinjia'],
["spade", 1, "caomu"],
["club", 3, "caomu"],
["heart", 12, "shengdong"],
["club", 9, "shengdong"],
["spade", 9, "shengdong"],
["diamond", 4, "zengbin"],
["heart", 6, "zengbin"],
["spade", 7, "zengbin"],
["diamond", 12, "yinyueqiang"],
["spade", 11, "jinchan"],
["club", 12, "jinchan"],
["club", 13, "jinchan"],
["club", 12, "qijia"],
["club", 13, "qijia"],
["spade", 1, "fulei"],
["spade", 6, "qibaodao"],
["spade", 5, "zhungangshuo"],
["spade", 2, "lanyinjia"],
["club", 2, "lanyinjia"],
],
};
});

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,10 @@
'use strict';
game.import('card',function(lib,game,ui,get,ai,_status){
import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("card", function () {
return {
name:'zhenfa',
name: "zhenfa",
card: {
pozhenjue: {
type:'zhenfa',
type: "zhenfa",
recastable: true,
enable: true,
notarget: true,
@ -15,20 +15,20 @@ game.import('card',function(lib,game,ui,get,ai,_status){
game.swapSeat(targets.randomGet(), targets.randomGet());
}
},
mode:['guozhan'],
mode: ["guozhan"],
ai: {
order: 8,
result: {
player: 1,
},
}
},
},
changshezhen: {
type:'zhenfa',
type: "zhenfa",
recastable: true,
enable: function (card, player) {
if (player.inline()) return true;
if(player.identity=='unknown'||player.identity=='ye') return false;
if (player.identity == "unknown" || player.identity == "ye") return false;
return game.hasPlayer(function (current) {
return current != player && current.isFriendOf(player);
});
@ -41,33 +41,34 @@ game.import('card',function(lib,game,ui,get,ai,_status){
});
player.line(targets);
game.asyncDraw(targets);
}
else if(player.getNext()){
} else if (player.getNext()) {
var list = game.filterPlayer(function (current) {
return current != player && current.isFriendOf(player);
});
if (list.length) {
list.sort(function (a, b) {
return get.distance(player,a,'absolute')-get.distance(player,b,'absolute');
return (
get.distance(player, a, "absolute") - get.distance(player, b, "absolute")
);
});
player.line(list[0]);
game.swapSeat(list[0], player.getNext(), true, true);
}
}
},
mode:['guozhan'],
mode: ["guozhan"],
ai: {
order: 6.5,
result: {
player: 1,
},
tag: {
draw:1
}
}
draw: 1,
},
},
},
tianfuzhen: {
type:'zhenfa',
type: "zhenfa",
recastable: true,
enable: function () {
return game.hasPlayer(function (current) {
@ -75,25 +76,25 @@ game.import('card',function(lib,game,ui,get,ai,_status){
});
},
filterTarget: function (card, player, target) {
return target.isMajor()&&target.countCards('he')>0;
return target.isMajor() && target.countCards("he") > 0;
},
selectTarget: -1,
content: function () {
target.chooseToDiscard('he',true).delay=false;
target.chooseToDiscard("he", true).delay = false;
},
mode:['guozhan'],
mode: ["guozhan"],
ai: {
order: 7,
result: {
target: -1,
},
tag: {
discard:1
}
}
discard: 1,
},
},
},
dizaizhen: {
type:'zhenfa',
type: "zhenfa",
recastable: true,
enable: function () {
return game.hasPlayer(function (current) {
@ -108,19 +109,19 @@ game.import('card',function(lib,game,ui,get,ai,_status){
target.draw(false);
target.$draw();
},
mode:['guozhan'],
mode: ["guozhan"],
ai: {
order: 7,
result: {
target: 1,
},
tag: {
draw:1
}
}
draw: 1,
},
},
},
fengyangzhen: {
type:'zhenfa',
type: "zhenfa",
recastable: true,
enable: true,
filterTarget: function (card, player, target) {
@ -128,20 +129,20 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
selectTarget: -1,
content: function () {
target.addTempSkill('feiying',{player:'damageAfter'});
target.popup('feiying');
game.log(target,'获得了技能','【飞影】');
target.addTempSkill("feiying", { player: "damageAfter" });
target.popup("feiying");
game.log(target, "获得了技能", "【飞影】");
},
mode:['guozhan'],
mode: ["guozhan"],
ai: {
order: 7,
result: {
target: 2,
},
}
},
},
yunchuizhen: {
type:'zhenfa',
type: "zhenfa",
recastable: true,
enable: true,
filterTarget: function (card, player, target) {
@ -149,20 +150,20 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
selectTarget: -1,
content: function () {
target.addTempSkill('wushuang',{source:'damageAfter'});
target.popup('wushuang');
game.log(target,'获得了技能','【无双】');
target.addTempSkill("wushuang", { source: "damageAfter" });
target.popup("wushuang");
game.log(target, "获得了技能", "【无双】");
},
mode:['guozhan'],
mode: ["guozhan"],
ai: {
order: 7,
result: {
target: 2,
},
}
},
},
qixingzhen: {
type:'zhenfa',
type: "zhenfa",
recastable: true,
enable: function (card, player) {
return player.siege() || player.sieged();
@ -172,19 +173,19 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
selectTarget: -1,
content: function () {
'step 0'
"step 0";
event.targets = game.filterPlayer(function (current) {
return current.siege(player);
});
'step 1'
"step 1";
if (event.targets.length) {
var current = event.targets.shift();
player.line(current,'green');
player.line(current, "green");
player.discardPlayerCard(current, true);
event.redo();
}
'step 2'
var card={name:'sha',isCard:true};
"step 2";
var card = { name: "sha", isCard: true };
var list = game.filterPlayer(function (current) {
return current.siege(player) && player.canUse(card, current);
});
@ -192,22 +193,26 @@ game.import('card',function(lib,game,ui,get,ai,_status){
player.useCard(card, list, false);
}
},
mode:['guozhan'],
mode: ["guozhan"],
ai: {
order: 7,
result: {
target: 1,
},
}
},
},
shepanzhen: {
type:'zhenfa',
type: "zhenfa",
recastable: true,
enable: function (card, player) {
if(player.identity=='unknown'||player.identity=='ye') return false;
if (player.identity == "unknown" || player.identity == "ye") return false;
if (get.population(player.identity) <= 1) return false;
return game.hasPlayer(function (current) {
return current!=player&&current.identity==player.identity&&!player.inline(current);
return (
current != player &&
current.identity == player.identity &&
!player.inline(current)
);
});
},
notarget: true,
@ -219,48 +224,48 @@ game.import('card',function(lib,game,ui,get,ai,_status){
for (var i = 1; i < targets.length; i++) {
game.swapSeat(targets[i], targets[i - 1].next, false);
}
game.log(get.translation(player.identity)+'势力角色摆成了蛇蟠阵')
game.log(get.translation(player.identity) + "势力角色摆成了蛇蟠阵");
},
mode:['guozhan'],
mode: ["guozhan"],
ai: {
order: 7,
result: {
player: 1,
},
}
},
},
longfeizhen: {
type:'zhenfa',
type: "zhenfa",
recastable: true,
enable: function (card, player) {
return player.next.siege(player);
},
filterTarget: function (card, player, target) {
if(target.getCards('he').length==0) return false;
if (target.getCards("he").length == 0) return false;
return target == player.next || target == player.previous;
},
selectTarget: -1,
content: function () {
"step 0"
player.choosePlayerCard(target,'he',true);
"step 1"
"step 0";
player.choosePlayerCard(target, "he", true);
"step 1";
target.discard(result.buttons[0].link);
"step 2"
"step 2";
if (target == targets[targets.length - 1]) {
player.draw();
}
},
mode:['guozhan'],
mode: ["guozhan"],
ai: {
order: 10,
result: {
target: -1,
player:1
player: 1,
},
},
}
},
huyizhen: {
type:'zhenfa',
type: "zhenfa",
recastable: true,
enable: function (card, player) {
return player.siege(player.next) || player.siege(player.previous);
@ -270,62 +275,72 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
selectTarget: -1,
content: function () {
"step 0"
player.chooseCard('将一张非基本牌当作杀对'+get.translation(target)+'使用','he',function(card){
return get.type(card)!='basic';
}).ai=function(card){
if(get.effect(target,{name:'sha'},player,player)>0){
"step 0";
player.chooseCard(
"将一张非基本牌当作杀对" + get.translation(target) + "使用",
"he",
function (card) {
return get.type(card) != "basic";
}
).ai = function (card) {
if (get.effect(target, { name: "sha" }, player, player) > 0) {
return 6 - get.value(card);
}
return 0;
};
"step 1"
"step 1";
if (result.bool) {
player.useCard({name:'sha'},result.cards,target,false);
player.useCard({ name: "sha" }, result.cards, target, false);
}
"step 2"
"step 2";
if (target == player.next) event.player2 = player.next.next;
else event.player2 = player.previous.previous;
event.player2.chooseCard('将一张非基本牌当作杀对'+get.translation(target)+'使用','he',function(card){
return get.type(card)!='basic';
}).ai=function(card){
if(get.effect(target,{name:'sha'},event.player2,event.player2)>0){
event.player2.chooseCard(
"将一张非基本牌当作杀对" + get.translation(target) + "使用",
"he",
function (card) {
return get.type(card) != "basic";
}
).ai = function (card) {
if (get.effect(target, { name: "sha" }, event.player2, event.player2) > 0) {
return 6 - get.value(card);
}
return 0;
};
"step 3"
"step 3";
if (result.bool) {
event.player2.useCard({name:'sha'},result.cards,target,false);
event.player2.useCard({ name: "sha" }, result.cards, target, false);
}
},
mode:['guozhan'],
mode: ["guozhan"],
ai: {
order: 7,
result: {
target: -2,
},
}
},
},
niaoxiangzhen: {
type:'zhenfa',
type: "zhenfa",
recastable: true,
enable: true,
filterTarget: function (card, player, target) {
if (player.identity == target.identity) return false;
if(target.identity=='unknown'||target.identity=='ye') return false;
return target.identity==target.next.identity||target.identity==target.previous.identity
if (target.identity == "unknown" || target.identity == "ye") return false;
return (
target.identity == target.next.identity || target.identity == target.previous.identity
);
},
selectTarget: -1,
content: function () {
"step 0"
var next=target.chooseToRespond({name:'shan'});
"step 0";
var next = target.chooseToRespond({ name: "shan" });
next.ai = function (card) {
if (get.damageEffect(target, player, target) >= 0) return 0;
return 1;
};
next.autochoose = lib.filter.autoRespondShan;
"step 1"
"step 1";
if (result.bool == false) {
target.damage();
}
@ -333,7 +348,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
ai: {
basic: {
order: 9,
useful:1
useful: 1,
},
result: {
target: -1.5,
@ -342,55 +357,56 @@ game.import('card',function(lib,game,ui,get,ai,_status){
respond: 1,
respondShan: 1,
damage: 1,
}
},
mode:['guozhan'],
},
},
skill:{
mode: ["guozhan"],
},
},
skill: {},
translate: {
zhenfa:'阵法',
changshezhen:'长蛇阵',
pozhenjue:'破阵决',
tianfuzhen:'天覆阵',
dizaizhen:'地载阵',
fengyangzhen:'风扬阵',
yunchuizhen:'云垂阵',
qixingzhen:'七星阵',
shepanzhen:'蛇蟠阵',
shepanzhen_bg:'列',
yunchuizhen_bg:'垂',
longfeizhen:'龙飞阵',
huyizhen:'虎翼阵',
niaoxiangzhen:'鸟翔阵',
niaoxiangzhen_info:'令所有非你阵营的队列的角色今次打出一张闪或者受到1点伤害。',
qixingzhen_info:'弃置所有围攻你的角色各一张牌,然后视为对所有你围攻的角色使用一张不计入出杀次数的杀。',
zhenfa: "阵法",
changshezhen: "长蛇阵",
pozhenjue: "破阵决",
tianfuzhen: "天覆阵",
dizaizhen: "地载阵",
fengyangzhen: "风扬阵",
yunchuizhen: "云垂阵",
qixingzhen: "七星阵",
shepanzhen: "蛇蟠阵",
shepanzhen_bg: "列",
yunchuizhen_bg: "垂",
longfeizhen: "龙飞阵",
huyizhen: "虎翼阵",
niaoxiangzhen: "鸟翔阵",
niaoxiangzhen_info: "令所有非你阵营的队列的角色今次打出一张闪或者受到1点伤害。",
qixingzhen_info:
"弃置所有围攻你的角色各一张牌,然后视为对所有你围攻的角色使用一张不计入出杀次数的杀。",
// longfeizhen_info:'弃置围攻你的角色各一张牌,然后摸一张牌。',
// qixingzhen_info:'令我方所有角色进入围攻状态。',
// shepanzhen_info:'令我方所有角色进入队列状态。',
// yunchuizhen_info:'令所有围攻角色获得技能〖无双〗,直到其首次造成伤害。',
// fengyangzhen_info:'令所有被围攻角色获得技能〖飞影〗,直到其首次受到伤害。',
dizaizhen_info:'所有小势力角色摸一张牌。',
changshezhen_info:'若你处于队列中,与你同一队列的所有角色摸一张牌,否则将与你逆时针距离最近的同势力角色移至你下家。',
dizaizhen_info: "所有小势力角色摸一张牌。",
changshezhen_info:
"若你处于队列中,与你同一队列的所有角色摸一张牌,否则将与你逆时针距离最近的同势力角色移至你下家。",
// pozhenjue_info:'将所有角色的顺序随机重排。',
tianfuzhen_info:'所有大势力角色弃置一张牌。'
tianfuzhen_info: "所有大势力角色弃置一张牌。",
},
list: [
["diamond",1,'changshezhen'],
["club",1,'changshezhen'],
["diamond", 1, "changshezhen"],
["club", 1, "changshezhen"],
// ["spade",1,'changshezhen'],
// ["heart",1,'changshezhen'],
["diamond",2,'tianfuzhen'],
["diamond", 2, "tianfuzhen"],
// ["club",2,'tianfuzhen'],
["spade",2,'tianfuzhen'],
["heart",2,'tianfuzhen'],
["spade", 2, "tianfuzhen"],
["heart", 2, "tianfuzhen"],
["diamond",3,'dizaizhen'],
["diamond", 3, "dizaizhen"],
// ["club",3,'dizaizhen'],
["spade",3,'dizaizhen'],
["heart",3,'dizaizhen'],
["spade", 3, "dizaizhen"],
["heart", 3, "dizaizhen"],
// ["diamond",4,'fengyangzhen'],
// ["club",4,'fengyangzhen'],
@ -407,9 +423,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){
// ["spade",6,'huyizhen'],
// ["heart",6,'huyizhen'],
["diamond",7,'qixingzhen'],
["club",7,'qixingzhen'],
["spade",7,'qixingzhen'],
["diamond", 7, "qixingzhen"],
["club", 7, "qixingzhen"],
["spade", 7, "qixingzhen"],
// ["heart",7,'qixingzhen'],
// ["diamond",8,'shepanzhen'],
@ -422,10 +438,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
// ["spade",9,'longfeizhen'],
// ["heart",9,'longfeizhen'],
["diamond",11,'niaoxiangzhen'],
["diamond", 11, "niaoxiangzhen"],
// ["club",11,'niaoxiangzhen'],
["spade",11,'niaoxiangzhen'],
["heart",11,'niaoxiangzhen'],
["spade", 11, "niaoxiangzhen"],
["heart", 11, "niaoxiangzhen"],
// ["diamond",12,'yunchuizhen'],
// ["club",12,'yunchuizhen'],

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,30 +1,30 @@
import { game } from '../noname.js';
game.import('character',function(lib,game,ui,get,ai,_status){
import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("character", function () {
return {
name:'jiange',
name: "jiange",
character: {
jg_pangtong:['male','shu',3,['qiwu','tianyu']],
jg_huangyueying:['female','shu',3,['zhinang','jingmiao']],
jg_zhugeliang:['male','shu',3,['biantian','bazhen']],
jg_liubei:['male','shu',4,['jizhen','lingfeng']],
jg_xiahouyuan:['male','wei',4,['xinshensu','juechen']],
jg_caozhen:['male','wei',4,['chiying','jingfan']],
jg_zhanghe:['male','wei',4,['huodi','jueji']],
jg_simayi:['male','wei',5,['xuanlei','sfanshi','konghun']],
jg_pangtong: ["male", "shu", 3, ["qiwu", "tianyu"]],
jg_huangyueying: ["female", "shu", 3, ["zhinang", "jingmiao"]],
jg_zhugeliang: ["male", "shu", 3, ["biantian", "bazhen"]],
jg_liubei: ["male", "shu", 4, ["jizhen", "lingfeng"]],
jg_xiahouyuan: ["male", "wei", 4, ["xinshensu", "juechen"]],
jg_caozhen: ["male", "wei", 4, ["chiying", "jingfan"]],
jg_zhanghe: ["male", "wei", 4, ["huodi", "jueji"]],
jg_simayi: ["male", "wei", 5, ["xuanlei", "sfanshi", "konghun"]],
},
skill: {
sfanshi: {
trigger:{player:'phaseEnd'},
trigger: { player: "phaseEnd" },
forced: true,
check: function () {
return false;
},
content: function () {
player.loseHp();
}
},
},
konghun: {
trigger:{player:'phaseUseBegin'},
trigger: { player: "phaseUseBegin" },
direct: true,
filter: function (event, player) {
if (game.players.length >= 6) {
@ -33,147 +33,165 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return player.hp <= 1;
},
content: function () {
"step 0"
player.chooseTarget(get.prompt('konghun'),function(card,player,target){
"step 0";
player.chooseTarget(
get.prompt("konghun"),
function (card, player, target) {
return player != target;
},[1,Math.min(4,Math.floor((game.players.length-1)/2))]).ai=function(target){
return get.damageEffect(target,player,player,'thunder')+1;
}
"step 1"
},
[1, Math.min(4, Math.floor((game.players.length - 1) / 2))]
).ai = function (target) {
return get.damageEffect(target, player, player, "thunder") + 1;
};
"step 1";
if (result.bool) {
event.targets = result.targets.slice(0);
player.logSkill('konghun',event.targets,'thunder');
player.logSkill("konghun", event.targets, "thunder");
event.targets.sort(lib.sort.seat);
event.num = 0;
}
else{
} else {
event.finish();
}
"step 2"
"step 2";
if (event.num < event.targets.length) {
event.targets[event.num].damage('thunder');
event.targets[event.num].damage("thunder");
event.num++;
event.redo();
}
"step 3"
"step 3";
player.recover(event.targets.length);
}
},
},
xuanlei: {
trigger:{player:'phaseBegin'},
trigger: { player: "phaseBegin" },
forced: true,
filter: function (event, player) {
for (var i = 0; i < game.players.length; i++) {
if(game.players[i]!=player&&game.players[i].countCards('j')) return true;
if (game.players[i] != player && game.players[i].countCards("j")) return true;
}
return false;
},
content: function () {
"step 0"
"step 0";
event.targets = [];
for (var i = 0; i < game.players.length; i++) {
if(game.players[i]!=player&&game.players[i].countCards('j')){
if (game.players[i] != player && game.players[i].countCards("j")) {
event.targets.push(game.players[i]);
}
}
event.targets.sort(lib.sort.seat);
"step 1"
"step 1";
if (event.targets.length) {
event.targets.shift().damage('thunder');
event.targets.shift().damage("thunder");
event.redo();
}
}
},
},
jueji: {
trigger:{global:'phaseDrawBegin'},
trigger: { global: "phaseDrawBegin" },
direct: true,
filter: function (event, player) {
return event.num>0&&event.player!=player&&event.player.hp<event.player.maxHp&&player.countCards('he');
return (
event.num > 0 &&
event.player != player &&
event.player.hp < event.player.maxHp &&
player.countCards("he")
);
},
content: function () {
"step 0"
var next=player.chooseToDiscard('he','是否弃置一张牌令'+get.translation(trigger.player)+'的摸牌数-1');
"step 0";
var next = player.chooseToDiscard(
"he",
"是否弃置一张牌令" + get.translation(trigger.player) + "的摸牌数-1"
);
next.ai = function (card) {
if (get.attitude(player, trigger.player) < 0) {
return 6 - get.value(card);
}
return 0;
}
next.logSkill=['jueji',trigger.player];
"step 1"
};
next.logSkill = ["jueji", trigger.player];
"step 1";
if (result.bool) {
trigger.num--;
}
},
ai: {
expose: 0.2,
threaten:1.8
}
threaten: 1.8,
},
},
huodi: {
trigger:{player:'phaseEnd'},
trigger: { player: "phaseEnd" },
direct: true,
filter: function (event, player) {
return !player.hasSkill('huodi3');
return !player.hasSkill("huodi3");
},
content: function () {
"step 0"
player.chooseTarget(get.prompt('huodi'),function(card,player,target){
return target.countCards('he')&&player!=target;
"step 0";
player.chooseTarget(get.prompt("huodi"), function (card, player, target) {
return target.countCards("he") && player != target;
}).ai = function (target) {
return -get.attitude(player, target);
}
"step 1"
};
"step 1";
if (result.bool) {
player.logSkill('huodi',result.targets);
player.discardPlayerCard(result.targets[0],true,'he');
player.logSkill("huodi", result.targets);
player.discardPlayerCard(result.targets[0], true, "he");
}
},
ai: {
expose: 0.2,
threaten:1.2
threaten: 1.2,
},
group:'huodi2'
group: "huodi2",
},
huodi2: {
trigger:{player:'useCard'},
trigger: { player: "useCard" },
filter: function (event, player) {
return _status.currentPhase==player&&event.targets&&(event.targets.length>1||event.targets[0]!=player);
return (
_status.currentPhase == player &&
event.targets &&
(event.targets.length > 1 || event.targets[0] != player)
);
},
silent: true,
content: function () {
player.addTempSkill('huodi3');
}
player.addTempSkill("huodi3");
},
},
huodi3: {},
jingfan: {
trigger:{player:'phaseUseEnd'},
trigger: { player: "phaseUseEnd" },
unique: true,
direct: true,
content: function () {
"step 0"
var num=player.countUsed()-player.countCards('h');
"step 0";
var num = player.countUsed() - player.countCards("h");
event.num = num;
if (num > 0) {
player.draw(num);
}
"step 1"
"step 1";
if (event.num > 0) {
player.chooseTarget('选择至多'+get.cnNumber(event.num)+'名角色令其进攻距离+1',[1,event.num],function(card,player,target){
player.chooseTarget(
"选择至多" + get.cnNumber(event.num) + "名角色令其进攻距离+1",
[1, event.num],
function (card, player, target) {
return player != target;
}).ai=function(target){
}
).ai = function (target) {
return get.attitude(player, target);
}
}
else{
};
} else {
event.finish();
}
"step 2"
"step 2";
if (result.bool && result.targets) {
player.logSkill('jingfan',result.targets);
player.logSkill("jingfan", result.targets);
for (var i = 0; i < result.targets.length; i++) {
result.targets[i].addSkill('jingfan2');
result.targets[i].popup('jingfan');
result.targets[i].addSkill("jingfan2");
result.targets[i].popup("jingfan");
}
}
},
@ -182,26 +200,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if (_status.currentPhase == from) {
return distance - from.countUsed();
}
}
},
},
ai: {
expose:0.1
}
expose: 0.1,
},
},
jingfan2: {
mod: {
globalFrom: function (from, to, distance) {
return distance - 1;
}
},
trigger:{player:'phaseEnd'},
},
trigger: { player: "phaseEnd" },
forced: true,
content: function () {
player.removeSkill('jingfan2');
}
player.removeSkill("jingfan2");
},
},
chiying: {
trigger:{global:'damageBegin2'},
trigger: { global: "damageBegin2" },
check: function (event, player) {
return get.attitude(player, event.player) > 0;
},
@ -212,40 +230,46 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content: function () {
trigger.num = 1;
if (trigger.source) {
trigger.source.addTempSkill('chiying2','damageAfter');
}
trigger.source.addTempSkill("chiying2", "damageAfter");
}
},
},
chiying2: {
trigger:{source:'damageEnd'},
trigger: { source: "damageEnd" },
forced: true,
popup: false,
content: function () {
player.draw();
}
},
},
juechen: {
trigger:{player:'useCard'},
trigger: { player: "useCard" },
filter: function (event, player) {
return event.card.name=='sha';
return event.card.name == "sha";
},
direct: true,
content: function () {
"step 0"
player.chooseTarget(get.prompt('juechen'),function(card,player,target){
return player!=target&&!trigger.targets.includes(target)&&target.countCards('he')>0;
}).set('autodelay',true).ai=function(target){
"step 0";
player
.chooseTarget(get.prompt("juechen"), function (card, player, target) {
return (
player != target &&
!trigger.targets.includes(target) &&
target.countCards("he") > 0
);
})
.set("autodelay", true).ai = function (target) {
return -get.attitude(player, target);
}
"step 1"
};
"step 1";
if (result.bool) {
player.logSkill('juechen',result.targets);
player.discardPlayerCard(true,result.targets[0],'he');
}
player.logSkill("juechen", result.targets);
player.discardPlayerCard(true, result.targets[0], "he");
}
},
},
lingfeng: {
trigger:{player:'phaseDrawBefore'},
trigger: { player: "phaseDrawBefore" },
check: function (event, player) {
for (var i = 0; i < game.players.length; i++) {
if (player != game.players[i]) {
@ -255,92 +279,95 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return false;
},
content: function () {
"step 0"
"step 0";
trigger.cancel();
event.cards = get.cards(2);
player.showCards(event.cards);
"step 1"
"step 1";
if (get.color(event.cards[0]) != get.color(event.cards[1])) {
player.chooseTarget('是否弃置一名角色一张牌?',function(card,player,target){
return player!=target&&target.countCards('he')>0;
player.chooseTarget("是否弃置一名角色一张牌?", function (card, player, target) {
return player != target && target.countCards("he") > 0;
}).ai = function (target) {
return -get.attitude(player, target);
};
}
}
"step 2"
"step 2";
if (result.bool && result.targets && result.targets.length) {
player.discardPlayerCard(result.targets[0],'he',true);
player.discardPlayerCard(result.targets[0], "he", true);
}
"step 3"
"step 3";
player.gain(event.cards);
player.$draw(event.cards);
game.delay();
},
ai: {
threaten:1.1
}
threaten: 1.1,
},
},
biantian4: {
trigger:{player:'dieBegin'},
trigger: { player: "dieBegin" },
forced: true,
popup: false,
content: function () {
for (var i = 0; i < game.players.length; i++) {
if(game.players[i].hasSkill('biantian3')){
game.players[i].removeSkill('biantian3');
game.players[i].popup('biantian3');
}
if (game.players[i].hasSkill("biantian3")) {
game.players[i].removeSkill("biantian3");
game.players[i].popup("biantian3");
}
}
},
},
biantian: {
trigger:{player:'phaseBegin'},
trigger: { player: "phaseBegin" },
forced: true,
unique: true,
group:'biantian4',
group: "biantian4",
content: function () {
"step 0"
player.removeSkill('biantian2');
"step 0";
player.removeSkill("biantian2");
for (var i = 0; i < game.players.length; i++) {
if(game.players[i].hasSkill('biantian3')){
game.players[i].removeSkill('biantian3');
game.players[i].popup('biantian3');
if (game.players[i].hasSkill("biantian3")) {
game.players[i].removeSkill("biantian3");
game.players[i].popup("biantian3");
}
}
player.judge(function (card) {
if(get.color(card)=='red') return 1;
if(get.suit(card)=='spade') return 3;
if (get.color(card) == "red") return 1;
if (get.suit(card) == "spade") return 3;
return -1;
});
"step 1"
if(result.color=='red'){
player.chooseTarget('选择至多三名角色获得狂风标记',[1,3],function(card,player,target){
"step 1";
if (result.color == "red") {
player.chooseTarget(
"选择至多三名角色获得狂风标记",
[1, 3],
function (card, player, target) {
return player != target;
}).ai=function(target){
if(target.hasSkillTag('nofire')) return 0;
}
).ai = function (target) {
if (target.hasSkillTag("nofire")) return 0;
return -get.attitude(player, target);
};
}
else{
} else {
event.finish();
if(result.suit=='spade'){
player.addSkill('biantian2');
if (result.suit == "spade") {
player.addSkill("biantian2");
}
}
"step 2"
"step 2";
if (result.bool && result.targets) {
for (var i = 0; i < result.targets.length; i++) {
result.targets[i].addSkill('biantian3');
result.targets[i].popup('kuangfeng');
}
player.logSkill('kuangfeng',result.targets,'fire');
result.targets[i].addSkill("biantian3");
result.targets[i].popup("kuangfeng");
}
player.logSkill("kuangfeng", result.targets, "fire");
}
},
},
biantian2: {
trigger:{player:'damageBefore'},
trigger: { player: "damageBefore" },
filter: function (event) {
if(event.nature!='thunder') return true;
if (event.nature != "thunder") return true;
return false;
},
forced: true,
@ -352,15 +379,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
nodamage: true,
effect: {
target: function (card, player, target, current) {
if(get.tag(card,'damage')&&!get.tag(card,'thunderDamage')) return [0,0];
}
}
}
if (get.tag(card, "damage") && !get.tag(card, "thunderDamage")) return [0, 0];
},
},
},
},
biantian3: {
trigger:{player:'damageBegin'},
trigger: { player: "damageBegin" },
filter: function (event) {
if(event.nature=='fire') return true;
if (event.nature == "fire") return true;
return false;
},
forced: true,
@ -370,88 +397,90 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ai: {
effect: {
target: function (card, player, target, current) {
if(get.tag(card,'fireDamage')) return 1.5;
}
}
}
if (get.tag(card, "fireDamage")) return 1.5;
},
},
},
},
jingmiao: {
trigger:{global:'useCardAfter'},
trigger: { global: "useCardAfter" },
direct: true,
filter: function (event, player) {
return event.player!=player&&event.card.name=='wuxie'&&event.player.countCards('he')>0;
return (
event.player != player &&
event.card.name == "wuxie" &&
event.player.countCards("he") > 0
);
},
content: function () {
"step 0"
player.choosePlayerCard(trigger.player,get.prompt('jingmiao',trigger.player),'he');
"step 1"
"step 0";
player.choosePlayerCard(trigger.player, get.prompt("jingmiao", trigger.player), "he");
"step 1";
if (result.bool) {
player.logSkill('jingmiao',trigger.player);
player.logSkill("jingmiao", trigger.player);
trigger.player.discard(result.links);
}
},
ai: {
expose:0.2
}
expose: 0.2,
},
},
zhinang: {
trigger:{player:'phaseBegin'},
trigger: { player: "phaseBegin" },
frequent: true,
content: function () {
"step 0"
"step 0";
event.cards = get.cards(3);
event.cards2 = [];
for (var i = 0; i < event.cards.length; i++) {
var type = get.type(event.cards[i]);
if(type=='trick'||type=='equip'){
if (type == "trick" || type == "equip") {
event.cards2.push(event.cards[i]);
}
}
if (!event.isMine() || event.cards2.length == 0) {
player.showCards(event.cards);
}
"step 1"
"step 1";
if (event.cards2.length == 0) {
event.finish();
}
else{
var dialog=ui.create.dialog('将三张牌中的锦囊牌或装备牌交给一名角色','hidden');
} else {
var dialog = ui.create.dialog("将三张牌中的锦囊牌或装备牌交给一名角色", "hidden");
dialog.add(event.cards);
for (var i = 0; i < dialog.buttons.length; i++) {
if (event.cards2.includes(dialog.buttons[i].link)) {
dialog.buttons[i].style.opacity = 1;
}
else{
} else {
dialog.buttons[i].style.opacity = 0.5;
}
}
var next = player.chooseTarget(true, dialog);
next.ai = function (target) {
if(player.hasJudge('lebu')){
if (player.hasJudge("lebu")) {
if (target == player) return 0.1;
}
var att = get.attitude(player, target);
if(player.countCards('h')>player.hp){
if (player.countCards("h") > player.hp) {
if (target == player) return Math.max(1, att - 2);
}
if (target == player) return att + 5;
return att;
};
}
}
"step 2"
"step 2";
if (result && result.targets && result.targets.length) {
event.target = result.targets[0];
}
if (event.cards2.length) {
event.target.gain(event.cards2,'gain2');
event.target.gain(event.cards2, "gain2");
}
},
ai: {
threaten:1.3
}
threaten: 1.3,
},
},
tianyu: {
trigger:{player:'phaseEnd'},
trigger: { player: "phaseEnd" },
direct: true,
filter: function (event, player) {
for (var i = 0; i < game.players.length; i++) {
@ -461,28 +490,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
content: function () {
"step 0"
"step 0";
var num = 0;
for (var i = 0; i < game.players.length; i++) {
if (!game.players[i].isLinked() && player != game.players[i]) {
num++;
}
}
player.chooseTarget(get.prompt('tianyu'),[1,num],function(card,player,target){
player.chooseTarget(get.prompt("tianyu"), [1, num], function (card, player, target) {
return !target.isLinked() && player != target;
}).ai = function (target) {
return -get.attitude(player, target);
}
"step 1"
};
"step 1";
if (result.bool) {
player.logSkill('tianyu',result.targets);
player.logSkill("tianyu", result.targets);
event.targets = result.targets;
event.num = 0;
}
else{
} else {
event.finish();
}
"step 2"
"step 2";
if (event.num < event.targets.length) {
event.targets[event.num].link();
event.num++;
@ -490,11 +518,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
ai: {
expose:0.3
}
expose: 0.3,
},
},
jizhen: {
trigger:{player:'phaseEnd'},
trigger: { player: "phaseEnd" },
direct: true,
filter: function (event, player) {
for (var i = 0; i < game.players.length; i++) {
@ -505,72 +533,77 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return false;
},
content: function () {
"step 0"
"step 0";
var num = 0;
for (var i = 0; i < game.players.length; i++) {
if (!game.players[i].isLinked() && player != game.players[i]) {
num++;
}
}
player.chooseTarget(get.prompt('jizhen'),[1,2],function(card,player,target){
player.chooseTarget(get.prompt("jizhen"), [1, 2], function (card, player, target) {
return target.hp < target.maxHp && player != target;
}).ai = function (target) {
return get.attitude(player, target);
}
"step 1"
};
"step 1";
if (result.bool) {
player.logSkill('jizhen',result.targets);
player.logSkill("jizhen", result.targets);
game.asyncDraw(result.targets);
}
},
ai: {
expose: 0.3,
threaten:1.3
}
threaten: 1.3,
},
},
},
translate: {
jg_pangtong:'浴火士元',
jg_huangyueying:'工神月英',
jg_zhugeliang:'天侯孔明',
jg_liubei:'烈帝玄德',
jg_xiahouyuan:'绝尘妙才',
jg_caozhen:'佳人子丹',
jg_zhanghe:'巧魁儁乂',
jg_simayi:'断狱仲达',
tianyu:'天狱',
zhinang:'智囊',
jingmiao:'精妙',
biantian:'变天',
biantian2:'大雾',
biantian3:'狂风',
jizhen:'激阵',
xuanlei:'玄雷',
xuanlei_info:'锁定技准备阶段你令所有判定区内有牌的其他角色受到1点雷电伤害。',
sfanshi:'反噬',
sfanshi_info:'锁定技结束阶段你失去1点体力。',
konghun:'控魂',
konghun_info:'出牌阶段开始时若你的体力值不大于1场上存活角色数不小于6时改为2你可以对至多X名角色各造成1点雷电伤害然后你恢复等量体力X为场上其他存活角色数的一半向下取整且至多为4。',
jizhen_info:'结束阶段,你可以令所至多两名已受伤角色摸一张牌。',
jg_pangtong: "浴火士元",
jg_huangyueying: "工神月英",
jg_zhugeliang: "天侯孔明",
jg_liubei: "烈帝玄德",
jg_xiahouyuan: "绝尘妙才",
jg_caozhen: "佳人子丹",
jg_zhanghe: "巧魁儁乂",
jg_simayi: "断狱仲达",
tianyu: "天狱",
zhinang: "智囊",
jingmiao: "精妙",
biantian: "变天",
biantian2: "大雾",
biantian3: "狂风",
jizhen: "激阵",
xuanlei: "玄雷",
xuanlei_info: "锁定技准备阶段你令所有判定区内有牌的其他角色受到1点雷电伤害。",
sfanshi: "反噬",
sfanshi_info: "锁定技结束阶段你失去1点体力。",
konghun: "控魂",
konghun_info:
"出牌阶段开始时若你的体力值不大于1场上存活角色数不小于6时改为2你可以对至多X名角色各造成1点雷电伤害然后你恢复等量体力X为场上其他存活角色数的一半向下取整且至多为4。",
jizhen_info: "结束阶段,你可以令所至多两名已受伤角色摸一张牌。",
// biantian2_info:'已获得大雾标记',
// biantian3_info:'已获得狂风标记',
lingfeng:'灵锋',
jueji:'绝汲',
huodi:'惑敌',
huodi_info:'结束阶段,若你本回合内没有使用过指定其他角色为目标的卡牌,你可以弃置一名其他角色的一张牌。',
jueji_info:'其他角色的摸牌阶段开始时,若其已受伤,你可以弃置一张牌令其摸牌数-1。',
lingfeng_info:'摸牌阶段,你可以弃置摸牌,改为亮出牌堆顶的两张牌并获得之,若两张牌颜色不同,你可以弃置一名角色的一张牌。',
biantian_info:'锁定技,准备阶段,你进行一次判定,若为红色,你可以选择至多三名角色进入“狂风”状态直到你的下一回合开始,若为黑桃,直到下个回合开始前,你处于“大雾”状态。',
jingmiao_info:'每当有一名其他角色使用无懈可击,你可以弃置其一张牌。',
zhinang_info:'准备阶段,你可以亮出牌堆顶的三张牌,你可以将其中锦囊或装备牌交给一名角色。',
tianyu_info:'结束阶段,你可以将任意名未横置的其他角色横置。',
juechen:'绝尘',
juechen_info:'每当你使用一张杀,可以弃置一名其他角色的一张牌(不能是杀的目标)。',
chiying:'持盈',
chiying_info:'每当一名角色受到多于1伤害时你可以令其防止其余伤害然后令伤害来源摸一张牌。',
jingfan:'惊帆',
jingfan2:'惊帆',
jingfan_info:'回合内,每当你使用一张卡牌,你的进攻距离+1出牌阶段结束时你可以将手牌数补至X并指定至多X名角色令其进攻距离+1直到其下一回合结束X为你回合内使用的卡牌数。',
lingfeng: "灵锋",
jueji: "绝汲",
huodi: "惑敌",
huodi_info:
"结束阶段,若你本回合内没有使用过指定其他角色为目标的卡牌,你可以弃置一名其他角色的一张牌。",
jueji_info: "其他角色的摸牌阶段开始时,若其已受伤,你可以弃置一张牌令其摸牌数-1。",
lingfeng_info:
"摸牌阶段,你可以弃置摸牌,改为亮出牌堆顶的两张牌并获得之,若两张牌颜色不同,你可以弃置一名角色的一张牌。",
biantian_info:
"锁定技,准备阶段,你进行一次判定,若为红色,你可以选择至多三名角色进入“狂风”状态直到你的下一回合开始,若为黑桃,直到下个回合开始前,你处于“大雾”状态。",
jingmiao_info: "每当有一名其他角色使用无懈可击,你可以弃置其一张牌。",
zhinang_info: "准备阶段,你可以亮出牌堆顶的三张牌,你可以将其中锦囊或装备牌交给一名角色。",
tianyu_info: "结束阶段,你可以将任意名未横置的其他角色横置。",
juechen: "绝尘",
juechen_info: "每当你使用一张杀,可以弃置一名其他角色的一张牌(不能是杀的目标)。",
chiying: "持盈",
chiying_info: "每当一名角色受到多于1伤害时你可以令其防止其余伤害然后令伤害来源摸一张牌。",
jingfan: "惊帆",
jingfan2: "惊帆",
jingfan_info:
"回合内,每当你使用一张卡牌,你的进攻距离+1出牌阶段结束时你可以将手牌数补至X并指定至多X名角色令其进攻距离+1直到其下一回合结束X为你回合内使用的卡牌数。",
},
};
});

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,31 +1,37 @@
import { game } from '../noname.js';
game.import('character',function(lib,game,ui,get,ai,_status){
import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("character", function () {
return {
name:'mtg',
name: "mtg",
character: {
mtg_jiding:['male','qun',4,['mbaizhan','msilian']],
mtg_jiding: ["male", "qun", 4, ["mbaizhan", "msilian"]],
// mtg_qianzhuo:['female','shu',3,[]],
mtg_jiesi:['male','wei',3,['mtongnian','msuoling','mhuanyi']],
mtg_lilianna:['female','qun',3,['lingyong','mduohun']],
mtg_jiesi: ["male", "wei", 3, ["mtongnian", "msuoling", "mhuanyi"]],
mtg_lilianna: ["female", "qun", 3, ["lingyong", "mduohun"]],
// mtg_nisha:['female','wu',3,[]],
// mtg_ayeni:['male','qun',4,[]],
},
characterIntro: {
mtg_jiding:'这名白色魔法的使用者极其注重忠诚,正义和荣誉。他曾全力追捕茜卓纳拉,如今已不可思议地与这位火焰法师成为伙伴。',
mtg_qianzhuo:'茜卓纳拉是使用红色法术力的旅法师。她擅长使用火焰:除了火焰,还是火焰。茜卓性格冲动、易怒、富有激情,不断增长的火焰法术能力随时都准备爆发。她的火花在还很年轻时便已点燃,如今已是相当有经验的烈焰术士和旅法师。',
mtg_jiesi:'杰斯贝连是使用蓝色法术的鹏洛客。他擅长心灵法术:读取心灵,幻影,知识,以及欺瞒的咒语。',
mtg_lilianna:'莉莲娜维斯是一位精通死灵术的旅法师,她擅长用黑色法术力来复活死者,腐化生者,并从死亡中召唤力量。',
mtg_nisha:'赞迪卡妖精部落玖瑞加的一名战士,做事倾尽全力,与大地有密切的联系,还擅使元素魔法。她能够引导时空的魔法生机地脉,为土地赋予生命。',
mtg_ayeni:'金鬃阿耶尼是使用白色法术的鹏洛客。他长于净化身体与心灵的法术:用咒语来治疗、强化盟友,以及唤醒他人内在的心灵精华。',
mtg_jiding:
"这名白色魔法的使用者极其注重忠诚,正义和荣誉。他曾全力追捕茜卓纳拉,如今已不可思议地与这位火焰法师成为伙伴。",
mtg_qianzhuo:
"茜卓纳拉是使用红色法术力的旅法师。她擅长使用火焰:除了火焰,还是火焰。茜卓性格冲动、易怒、富有激情,不断增长的火焰法术能力随时都准备爆发。她的火花在还很年轻时便已点燃,如今已是相当有经验的烈焰术士和旅法师。",
mtg_jiesi:
"杰斯贝连是使用蓝色法术的鹏洛客。他擅长心灵法术:读取心灵,幻影,知识,以及欺瞒的咒语。",
mtg_lilianna:
"莉莲娜维斯是一位精通死灵术的旅法师,她擅长用黑色法术力来复活死者,腐化生者,并从死亡中召唤力量。",
mtg_nisha:
"赞迪卡妖精部落玖瑞加的一名战士,做事倾尽全力,与大地有密切的联系,还擅使元素魔法。她能够引导时空的魔法生机地脉,为土地赋予生命。",
mtg_ayeni:
"金鬃阿耶尼是使用白色法术的鹏洛客。他长于净化身体与心灵的法术:用咒语来治疗、强化盟友,以及唤醒他人内在的心灵精华。",
},
skill: {
mduohun: {
trigger:{player:'dyingAfter'},
trigger: { player: "dyingAfter" },
forced: true,
filter: function (event, player) {
return event.source && event.source.isIn() && event.source.hp > 0;
},
logTarget:'source',
logTarget: "source",
content: function () {
trigger.source.loseHp();
},
@ -37,24 +43,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
effect: {
target: function (card, player, target, current) {
if (!target.hasFriend()) return;
if(target.hp<=1&&get.tag(card,'damage')) return [1,0,0,-1];
}
}
}
if (target.hp <= 1 && get.tag(card, "damage")) return [1, 0, 0, -1];
},
},
},
},
lingyong: {
enable:'phaseUse',
enable: "phaseUse",
filter: function (event, player) {
return !player.hasSkill('subplayer')&&player.getSubPlayers('lingyong_get').length>0;
return !player.hasSkill("subplayer") && player.getSubPlayers("lingyong_get").length > 0;
},
nosub: true,
group:'lingyong_get',
group: "lingyong_get",
direct: true,
delay: 0,
skillAnimation: true,
animationColor:'thunder',
animationColor: "thunder",
content: function () {
player.callSubPlayer().set('tag','lingyong_get');
player.callSubPlayer().set("tag", "lingyong_get");
},
ai: {
order: 1,
@ -64,15 +70,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
// if(player.hp<=1) return 1;
// if(!player.needsToDiscard(player.hp-1)) return 1;
// return 0;
}
}
},
},
},
subSkill: {
get: {
trigger:{global:'dieAfter'},
trigger: { global: "dieAfter" },
forced: true,
filter: function (event, player) {
return !event.player.isMin()&&![player.name,player.name1,player.name2].includes(event.player.name);
return (
!event.player.isMin() &&
![player.name, player.name1, player.name2].includes(event.player.name)
);
},
content: function () {
var skills = lib.character[trigger.player.name][3].slice(0);
@ -85,70 +94,78 @@ game.import('character',function(lib,game,ui,get,ai,_status){
name: trigger.player.name,
skills: skills,
hs: get.cards(2),
intro:'出牌阶段,你可以调遣此随从(直到随从死亡不可再次切换)'
intro: "出牌阶段,你可以调遣此随从(直到随从死亡不可再次切换)",
});
}
}
}
},
},
},
},
mhuanyi: {
round: 2,
trigger:{player:'phaseEnd'},
trigger: { player: "phaseEnd" },
direct: true,
addintro: function (storage, player) {
if(player.hasSkill('mhuanyi_target')){
return '直到下一回合开始,当成为某类型的卡牌的惟一目标时,将目标转移给某名其他角色;'
if (player.hasSkill("mhuanyi_target")) {
return "直到下一回合开始,当成为某类型的卡牌的惟一目标时,将目标转移给某名其他角色;";
}
return '';
return "";
},
content: function () {
'step 0'
"step 0";
var rand = Math.random();
player.chooseTarget(get.prompt2('mhuanyi'),function(card,player,target){
player
.chooseTarget(get.prompt2("mhuanyi"), function (card, player, target) {
return target != player;
}).set('ai',function(target){
})
.set("ai", function (target) {
if (get.attitude(player, target) < 0) {
return rand;
}
return 0;
});
'step 1'
"step 1";
if (result.bool) {
event.target = result.targets[0];
if (player.isUnderControl(true)) {
player.line(event.target,'green');
player.line(event.target, "green");
}
player.chooseControl('基本牌','非基本牌','cancel2',function(){
player
.chooseControl("基本牌", "非基本牌", "cancel2", function () {
return Math.floor(Math.random() * 2);
}).set('prompt','选择一种卡牌类型');
}
else{
})
.set("prompt", "选择一种卡牌类型");
} else {
event.finish();
}
'step 2'
if(result.control&&result.control!='cancel2'){
player.logSkill('mhuanyi');
"step 2";
if (result.control && result.control != "cancel2") {
player.logSkill("mhuanyi");
player.storage.mhuanyi_target = [event.target, result.index];
player.addTempSkill('mhuanyi_target',{player:'phaseBegin'});
player.addTempSkill("mhuanyi_target", { player: "phaseBegin" });
}
},
subSkill: {
target: {
trigger:{target:'useCardToBefore'},
trigger: { target: "useCardToBefore" },
priority: 6,
forced: true,
onremove: true,
group:'mhuanyi_die',
group: "mhuanyi_die",
filter: function (event, player) {
if (!player.storage.mhuanyi_target) return false;
if (event.player == player.storage.mhuanyi_target[0]) return false;
if(get.type(event.card)=='basic'){
if (get.type(event.card) == "basic") {
if (player.storage.mhuanyi_target[1] != 0) return false;
}
else{
} else {
if (player.storage.mhuanyi_target[1] != 1) return false;
}
if(!lib.filter.targetEnabled2(event.card,event.player,player.storage.mhuanyi_target[0])){
if (
!lib.filter.targetEnabled2(
event.card,
event.player,
player.storage.mhuanyi_target[0]
)
) {
return false;
}
return true;
@ -158,69 +175,72 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content: function () {
trigger.target = player.storage.mhuanyi_target[0];
player.removeSkill('mhuanyi_target');
}
player.removeSkill("mhuanyi_target");
},
},
die: {
trigger:{global:'dieAfter'},
trigger: { global: "dieAfter" },
silent: true,
filter: function (event, player) {
if (!player.storage.mhuanyi_target) return false;
return event.player == player.storage.mhuanyi_target[0];
},
content: function () {
player.removeSkill('mhuanyi_target');
}
}
}
player.removeSkill("mhuanyi_target");
},
},
},
},
msuoling: {
trigger:{global:'useCard'},
trigger: { global: "useCard" },
direct: true,
priority: 5.5,
round: 1,
filter: function (event, player) {
if(get.type(event.card)=='trick'&&event.card.isCard){
if (get.type(event.card) == "trick" && event.card.isCard) {
if (event.player == player) return false;
if(!player.countCards('he',{suit:get.suit(event.card)})) return false;
if (!player.countCards("he", { suit: get.suit(event.card) })) return false;
return true;
}
return false;
},
content: function () {
'step 0'
"step 0";
var att = get.attitude(player, trigger.player);
var suit = get.suit(trigger.card);
player.chooseToDiscard('he',get.prompt2('msuoling',trigger.player),function(card){
player
.chooseToDiscard("he", get.prompt2("msuoling", trigger.player), function (card) {
return get.suit(card) == suit;
}).set('autodelay',true).set('logSkill',['msuoling',trigger.player]).ai=function(card){
})
.set("autodelay", true)
.set("logSkill", ["msuoling", trigger.player]).ai = function (card) {
if (att < 0) {
return 8 - get.value(card);
}
return 0;
};
'step 1'
"step 1";
if (result.bool) {
trigger.cancel();
player.chooseUseTarget(true, trigger.card);
}
}
},
},
msuoling_old: {
enable:'phaseUse',
enable: "phaseUse",
usable: 1,
subSkill: {
ai: {
onremove:true
}
onremove: true,
},
},
filter: function (event, player) {
var nh=player.countCards('h');
var nh = player.countCards("h");
if (nh <= 1 || nh >= 5) return false;
return lib.skill.msuoling.getc(player).number > 0;
},
getc: function (player) {
var hs=player.getCards('h');
var hs = player.getCards("h");
for (var i = 0; i < hs.length; i++) {
if (hs[i].mtongnian_link) {
return hs[i];
@ -229,7 +249,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return -1;
},
getn: function (player) {
var hs=player.getCards('h');
var hs = player.getCards("h");
var ns = [];
for (var i = 0; i < hs.length; i++) {
if (!hs[i].mtongnian_link) {
@ -270,24 +290,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){
check: function (card) {
// if(player.isUnderControl(true)) return 0;
var player = _status.event.player;
if(player.hasSkill('msuoling_ai')){
if (player.hasSkill("msuoling_ai")) {
return false;
}
if (lib.skill.msuoling.test(player)) {
return true;
}
else{
player.addTempSkill('msuoling_ai',{player:['gainAfter','phaseAfter']});
} else {
player.addTempSkill("msuoling_ai", { player: ["gainAfter", "phaseAfter"] });
return false;
}
},
content: function () {
'step 0'
"step 0";
player.showHandcards();
'step 1'
"step 1";
if (lib.skill.msuoling.test(player)) {
var card = lib.skill.msuoling.getc(player);
card.classList.remove('glow');
card.classList.remove("glow");
delete card.mtongnian_link;
delete card._destroy;
@ -296,24 +315,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var card = list.randomGet();
var fake = game.createCard(card);
fake.mtongnian_link = card;
player.gain(fake,'draw')._triggered=null;
fake.classList.add('glow');
fake._destroy='mtongnian';
player.gain(fake, "draw")._triggered = null;
fake.classList.add("glow");
fake._destroy = "mtongnian";
}
}
},
selectCard: [1, Infinity],
ai: {
order:11
}
order: 11,
},
},
mtongnian: {
trigger:{player:'phaseUseBegin'},
trigger: { player: "phaseUseBegin" },
forced: true,
filter: function (event, player) {
var enemies = player.getEnemies();
for (var i = 0; i < enemies.length; i++) {
if(enemies[i].countCards('h')) return true;
if (enemies[i].countCards("h")) return true;
}
return false;
},
@ -321,7 +340,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var list = [];
var enemies = player.getEnemies();
for (var i = 0; i < enemies.length; i++) {
list.addArray(enemies[i].getCards('h'));
list.addArray(enemies[i].getCards("h"));
}
return list;
},
@ -331,24 +350,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var card = list.randomGet();
var fake = game.createCard(card);
fake.mtongnian_link = card;
player.gain(fake,'draw')._triggered=null;
fake.classList.add('glow');
fake._destroy='mtongnian';
player.gain(fake, "draw")._triggered = null;
fake.classList.add("glow");
fake._destroy = "mtongnian";
}
},
group:['mtongnian_change','mtongnian_use','mtongnian_lose'],
group: ["mtongnian_change", "mtongnian_use", "mtongnian_lose"],
subSkill: {
change: {
trigger:{player:'useCard'},
trigger: { player: "useCard" },
silent: true,
filter: function (event, player) {
return player.hasCard(function (card) {
return card.mtongnian_link ? true : false;
},'h');
}, "h");
},
content: function () {
var list = lib.skill.mtongnian.getList(player);
var hs=player.getCards('h',function(card){
var hs = player.getCards("h", function (card) {
return card.mtongnian_link ? true : false;
});
for (var i = 0; i < hs.length; i++) {
@ -359,10 +378,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
hs[i].init(hs[i].mtongnian_link);
}
}
},
},
use: {
trigger:{player:'useCardBefore'},
trigger: { player: "useCardBefore" },
silent: true,
filter: function (event, player) {
return event.card.mtongnian_link ? true : false;
@ -377,41 +396,40 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger.cards.length = 0;
trigger.cards.push(link);
target.lose(link, ui.discardPile);
player.logSkill('mtongnian',target);
game.log(target,'失去了',link);
player.logSkill("mtongnian", target);
game.log(target, "失去了", link);
game.delayx();
}
else{
} else {
player.lose(trigger.card);
trigger.cancel();
}
}
},
},
lose: {
trigger:{player:'phaseUseEnd',global:'loseEnd'},
trigger: { player: "phaseUseEnd", global: "loseEnd" },
silent: true,
filter: function (event, player) {
if(event.name=='lose'){
if (event.name == "lose") {
return lib.skill.mtongnian.getList(player).length == 0;
}
return true;
},
content: function () {
var hs=player.getCards('h',function(card){
var hs = player.getCards("h", function (card) {
return card.mtongnian_link ? true : false;
});
if (hs.length) {
player.lose(hs)._triggered = null;
}
}
}
},
},
},
ai: {
threaten:1.3
}
threaten: 1.3,
},
},
mbaizhan: {
trigger:{source:'damageEnd'},
trigger: { source: "damageEnd" },
forced: true,
filter: function (event) {
return event.num > 0;
@ -420,11 +438,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.changeHujia(trigger.num);
},
ai: {
damageBonus:true
}
damageBonus: true,
},
},
msilian: {
trigger:{player:'phaseEnd'},
trigger: { player: "phaseEnd" },
filter: function (event, player) {
return player.hujia > 0;
},
@ -436,57 +454,63 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.changeHujia(-player.hujia);
player.insertPhase();
},
group:['msilian_hp','msilian_draw'],
group: ["msilian_hp", "msilian_draw"],
subSkill: {
hp: {
trigger:{player:'phaseAfter'},
trigger: { player: "phaseAfter" },
silent: true,
filter: function (event, player) {
return event.skill=='msilian'&&!player.getStat('damage');
return event.skill == "msilian" && !player.getStat("damage");
},
content: function () {
player.loseHp();
}
},
},
draw: {
trigger:{player:'phaseDrawBegin'},
trigger: { player: "phaseDrawBegin" },
filter: function (event) {
return event.getParent('phase').skill=='msilian';
return event.getParent("phase").skill == "msilian";
},
silent: true,
content: function () {
trigger.num += player.storage.msilian - 2;
}
}
}
}
},
},
},
},
},
translate: {
mtg_jiding:'基定',
mtg_qianzhuo:'茜卓',
mtg_jiesi:'杰斯',
mtg_lilianna:'莉莲娜',
mtg_nisha:'妮莎',
mtg_ayeni:'阿耶尼',
mtg_jiding: "基定",
mtg_qianzhuo: "茜卓",
mtg_jiesi: "杰斯",
mtg_lilianna: "莉莲娜",
mtg_nisha: "妮莎",
mtg_ayeni: "阿耶尼",
mduohun:'夺魂',
mduohun_info:'锁定技当你解除濒死状态后令你进入濒死状态的角色失去1点体力。',
lingyong:'灵俑',
lingyong2:'灵俑',
lingyong3:'灵俑',
lingyong3_bg:'俑',
lingyong_info:'锁定技每当一名其他角色死亡你获得一个与该角色同名且体力上限为1、初始手牌为2的随从出牌阶段你可以调遣以此法获得的随从直到随从死亡不可再次切换。',
mbaizhan:'百战',
mbaizhan_info:'锁定技每当你造成1点伤害你获得1点护甲。',
msilian:'祀炼',
msilian_info:'结束阶段若你有护甲你可以移去全部护甲然后进行一个额外回合在额外回合中你的摸牌阶段摸牌基数为你移去的护甲数额外回合结束后若你未造成伤害你失去1点体力。',
mtongnian:'通念',
mtongnian_info:'锁定技,出牌阶段开始时,你获得一张替身牌,此牌对应一名随机敌人的一张随机手牌;每当你使用一张非替身牌,随机更换替身牌对应的牌;当你使用替身牌时,改为使用替身牌对应的牌;当出牌阶段结束,或替身牌离开手牌区,或敌方角色没有手牌时,销毁替身牌。',
msuoling:'塑灵',
msuoling_info:'每轮限一次,当一名其他角色使用一张非转化的普通锦囊牌时,你可以弃置一张与之花色相同的牌取消之,然后你视为使用该锦囊牌。',
msuoling_old_info:'出牌阶段限一次若你手牌中有替身牌且手牌数不超过5你可以展示手牌若其中的非替身手牌能通过四则运算得到你的替身牌的点数你将替身牌转化为非替身牌然后获得一张新的替身牌此技能托管无效。',
mhuanyi:'幻逸',
mhuanyi_info:'每两轮限一次,结束阶段,你可以选择一名其他角色和一种卡牌类型(选择结果对其他角色不可见),直到下一回合开始,当你首次成为该类型卡牌的惟一目标时,你将目标转移给你指定的角色(目标须合法)。',
mduohun: "夺魂",
mduohun_info: "锁定技当你解除濒死状态后令你进入濒死状态的角色失去1点体力。",
lingyong: "灵俑",
lingyong2: "灵俑",
lingyong3: "灵俑",
lingyong3_bg: "俑",
lingyong_info:
"锁定技每当一名其他角色死亡你获得一个与该角色同名且体力上限为1、初始手牌为2的随从出牌阶段你可以调遣以此法获得的随从直到随从死亡不可再次切换。",
mbaizhan: "百战",
mbaizhan_info: "锁定技每当你造成1点伤害你获得1点护甲。",
msilian: "祀炼",
msilian_info:
"结束阶段若你有护甲你可以移去全部护甲然后进行一个额外回合在额外回合中你的摸牌阶段摸牌基数为你移去的护甲数额外回合结束后若你未造成伤害你失去1点体力。",
mtongnian: "通念",
mtongnian_info:
"锁定技,出牌阶段开始时,你获得一张替身牌,此牌对应一名随机敌人的一张随机手牌;每当你使用一张非替身牌,随机更换替身牌对应的牌;当你使用替身牌时,改为使用替身牌对应的牌;当出牌阶段结束,或替身牌离开手牌区,或敌方角色没有手牌时,销毁替身牌。",
msuoling: "塑灵",
msuoling_info:
"每轮限一次,当一名其他角色使用一张非转化的普通锦囊牌时,你可以弃置一张与之花色相同的牌取消之,然后你视为使用该锦囊牌。",
msuoling_old_info:
"出牌阶段限一次若你手牌中有替身牌且手牌数不超过5你可以展示手牌若其中的非替身手牌能通过四则运算得到你的替身牌的点数你将替身牌转化为非替身牌然后获得一张新的替身牌此技能托管无效。",
mhuanyi: "幻逸",
mhuanyi_info:
"每两轮限一次,结束阶段,你可以选择一名其他角色和一种卡牌类型(选择结果对其他角色不可见),直到下一回合开始,当你首次成为该类型卡牌的惟一目标时,你将目标转移给你指定的角色(目标须合法)。",
},
};
});

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +1,23 @@
import { game } from '../noname.js';
game.import('character',function(lib,game,ui,get,ai,_status){
import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("character", function () {
return {
name:'xiake',
name: "xiake",
character: {
// xk_dongfangweiming:['male','shu',4,[]],
xk_guyuexuan:['male','qun',4,['rouquan','gzhenji']],
xk_jinji:['male','shu',4,['zhongzhan','lianpo']],
xk_guyuexuan: ["male", "qun", 4, ["rouquan", "gzhenji"]],
xk_jinji: ["male", "shu", 4, ["zhongzhan", "lianpo"]],
// xk_shenxiangyun:['female','wei',3,['zhenjiu']],
xk_fujianhan:['male','qun',4,['zuijian','zitong']],
xk_fujianhan: ["male", "qun", 4, ["zuijian", "zitong"]],
},
skill: {
zhongzhan: {
trigger:{source:'damageBegin'},
logTarget:'player',
trigger: { source: "damageBegin" },
logTarget: "player",
check: function (event, player) {
if(get.damageEffect(event.player,player,player)>0&&
get.attitude(player,event.player)<0){
if (
get.damageEffect(event.player, player, player) > 0 &&
get.attitude(player, event.player) < 0
) {
return player.hp > event.player.hp && player.hp >= 2;
}
return false;
@ -23,28 +25,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content: function () {
player.loseHp();
trigger.num++;
}
},
},
rouquan: {
mod: {
selectTarget: function (card, player, range) {
if(card.name=='sha'&&!player.getEquip(1)&&range[1]!=-1) range[1]=Infinity;
}
if (card.name == "sha" && !player.getEquip(1) && range[1] != -1) range[1] = Infinity;
},
enable:'phaseUse',
position:'e',
},
enable: "phaseUse",
position: "e",
filter: function (event, player) {
return player.hasCard(card=>lib.skill.rouquan.filterCard(card,player),lib.skill.rouquan.position);
return player.hasCard(
(card) => lib.skill.rouquan.filterCard(card, player),
lib.skill.rouquan.position
);
},
filterCard: lib.filter.cardRecastable,
prompt:'将要重铸的牌置入弃牌堆并摸一张牌',
prompt: "将要重铸的牌置入弃牌堆并摸一张牌",
discard: false,
lose: false,
delay: false,
check: function (card, player) {
var val = get.equipValue(card);
var player = _status.event.player;
var cards=player.getCards('h',{subtype:get.subtype(card)});
var cards = player.getCards("h", { subtype: get.subtype(card) });
for (var i = 0; i < cards.length; i++) {
if (get.equipValue(cards[i]) >= val) {
return 1;
@ -58,61 +63,61 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ai: {
order: 9.5,
result: {
player:1
}
}
player: 1,
},
},
},
gzhenji: {
trigger:{source:'damageEnd'},
trigger: { source: "damageEnd" },
frequent: true,
filter: function (event, player) {
if (event._notrigger.includes(event.player)) return false;
return _status.currentPhase==player&&event.card&&event.card.name=='sha';
return _status.currentPhase == player && event.card && event.card.name == "sha";
},
content: function () {
player.draw();
player.addTempSkill('gzhenji3');
}
player.addTempSkill("gzhenji3");
},
},
gzhenji3: {
mod: {
cardUsable: function (card, player, num) {
if(card.name=='sha') return num+1;
}
if (card.name == "sha") return num + 1;
},
},
},
zitong: {
trigger:{player:'useCard'},
trigger: { player: "useCard" },
frequent: true,
filter: function (event, player) {
return _status.currentPhase == player && player.countUsed() == 3;
},
content: function () {
var card=get.cardPile('chuansongmen');
var card = get.cardPile("chuansongmen");
if (!card) {
card=game.createCard('chuansongmen');
card = game.createCard("chuansongmen");
}
player.gain(card,'gain2');
player.gain(card, "gain2");
},
ai: {
threaten:1.2
}
}
threaten: 1.2,
},
},
},
translate: {
xk_dongfangweiming:'东方未明',
xk_guyuexuan:'谷月轩',
xk_jinji:'荆棘',
xk_shenxiangyun:'沈湘芸',
xk_fujianhan:'傅剑寒',
zhongzhan:'重斩',
zhongzhan_info:'每当你即将造成伤害你可失去1点体力令伤害+1。',
gzhenji:'震击',
gzhenji_info:'你使用杀造成伤害后,可以摸一张牌,并且本回合内可以额外使用一张杀。',
rouquan:'柔拳',
rouquan_info:'你可以重铸装备区内的牌;当你没有武器牌时,你的杀可以指定任意个目标。',
zitong:'通悟',
zitong_info:'当你于自己的回合内使用第三张牌时,你可以将一张传送门置于你的手牌。',
xk_dongfangweiming: "东方未明",
xk_guyuexuan: "谷月轩",
xk_jinji: "荆棘",
xk_shenxiangyun: "沈湘芸",
xk_fujianhan: "傅剑寒",
zhongzhan: "重斩",
zhongzhan_info: "每当你即将造成伤害你可失去1点体力令伤害+1。",
gzhenji: "震击",
gzhenji_info: "你使用杀造成伤害后,可以摸一张牌,并且本回合内可以额外使用一张杀。",
rouquan: "柔拳",
rouquan_info: "你可以重铸装备区内的牌;当你没有武器牌时,你的杀可以指定任意个目标。",
zitong: "通悟",
zitong_info: "当你于自己的回合内使用第三张牌时,你可以将一张传送门置于你的手牌。",
},
};
});

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,96 +1,96 @@
import { game } from '../noname.js';
game.import('character',function(lib,game,ui,get,ai,_status){
import { lib, game, ui, get, ai, _status } from "../noname.js";
game.import("character", function () {
return {
name:'zhuogui',
name: "zhuogui",
character: {
nianshou:['male','shu',4,['nianrui','qixiang']],
mamian:['male','qun',4,['lianyu','guiji']],
niutou:['male','shu',4,['manjia','xiaoshou']],
baiwuchang:['male','qun',3,['qiangzheng','moukui']],
heiwuchang:['male','qun',3,['suoling','xixing']],
nianshou: ["male", "shu", 4, ["nianrui", "qixiang"]],
mamian: ["male", "qun", 4, ["lianyu", "guiji"]],
niutou: ["male", "shu", 4, ["manjia", "xiaoshou"]],
baiwuchang: ["male", "qun", 3, ["qiangzheng", "moukui"]],
heiwuchang: ["male", "qun", 3, ["suoling", "xixing"]],
},
skill: {
qixiang: {
group:['qixiang1','qixiang2'],
group: ["qixiang1", "qixiang2"],
ai: {
effect: {
target: function (card, player, target, current) {
if(card.name=='lebu'&&card.name=='bingliang') return 0.8;
}
}
}
if (card.name == "lebu" && card.name == "bingliang") return 0.8;
},
},
},
},
qixiang1: {
trigger:{player:'judge'},
trigger: { player: "judge" },
forced: true,
filter: function (event, player) {
if (event.card) {
if (event.card.viewAs) {
return event.card.viewAs=='lebu';
}
else{
return event.card.name=='lebu';
return event.card.viewAs == "lebu";
} else {
return event.card.name == "lebu";
}
}
},
content: function () {
player.addTempSkill('qixiang3','phaseJudgeAfter');
}
player.addTempSkill("qixiang3", "phaseJudgeAfter");
},
},
qixiang2: {
trigger:{player:'judge'},
trigger: { player: "judge" },
forced: true,
filter: function (event, player) {
if (event.card) {
if (event.card.viewAs) {
return event.card.viewAs=='bingliang';
}
else{
return event.card.name=='bingliang';
return event.card.viewAs == "bingliang";
} else {
return event.card.name == "bingliang";
}
}
},
content: function () {
player.addTempSkill('qixiang4','phaseJudgeAfter');
}
player.addTempSkill("qixiang4", "phaseJudgeAfter");
},
},
qixiang3: {
mod: {
suit: function (card, suit) {
if(suit=='diamond') return 'heart';
}
}
if (suit == "diamond") return "heart";
},
},
},
qixiang4: {
mod: {
suit: function (card, suit) {
if(suit=='spade') return 'club';
}
}
if (suit == "spade") return "club";
},
},
},
nianrui: {
trigger:{player:['phaseBegin','phaseEnd']},
trigger: { player: ["phaseBegin", "phaseEnd"] },
content: function () {
"step 0"
"step 0";
player.judge(function (card) {
return get.color(card)=='red'?1:0;
return get.color(card) == "red" ? 1 : 0;
});
"step 1"
"step 1";
if (result.bool) {
player.draw();
}
}
},
},
lianyu: {
enable:'phaseUse',
enable: "phaseUse",
usable: 1,
filterCard:{color:'red'},
check:function(card){return 6-get.value(card)},
filterCard: { color: "red" },
check: function (card) {
return 6 - get.value(card);
},
filterTarget: true,
selectTarget: -1,
line:'fire',
line: "fire",
content: function () {
target.damage('fire');
target.damage("fire");
},
ai: {
result: {
@ -98,20 +98,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var eff = 0;
for (var i = 0; i < game.players.length; i++) {
if (!game.players[i].isOut()) {
eff+=get.damageEffect(game.players[i],player,player,'fire');
eff += get.damageEffect(game.players[i], player, player, "fire");
}
}
return eff;
}
},
expose:0.1
}
},
expose: 0.1,
},
},
manjia: {
group:['manjia1','manjia2']
group: ["manjia1", "manjia2"],
},
manjia1: {
trigger:{target:'useCardToBefore'},
trigger: { target: "useCardToBefore" },
forced: true,
priority: 6,
filter: function (event, player) {
@ -126,15 +126,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target: function (card, player, target, current) {
if (target.getEquip(2)) return;
return lib.skill.tengjia1.ai.effect.target.apply(this, arguments);
}
}
}
},
},
},
},
manjia2: {
trigger:{player:'damageBegin'},
trigger: { player: "damageBegin" },
filter: function (event, player) {
if (player.getEquip(2)) return false;
if(event.hasNature('fire')) return true;
if (event.hasNature("fire")) return true;
},
forced: true,
check: function () {
@ -148,12 +148,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target: function (card, player, target, current) {
if (target.getEquip(2)) return;
return lib.skill.tengjia2.ai.effect.target.apply(this, arguments);
}
}
}
},
},
},
},
xiaoshou: {
trigger:{player:'phaseEnd'},
trigger: { player: "phaseEnd" },
filter: function (event, player) {
var players = game.players.slice(0);
players.sort(function (a, b) {
@ -166,14 +166,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
players.sort(function (a, b) {
return b.hp - a.hp;
});
return get.damageEffect(players[0],player,player,'fire')>0;
return get.damageEffect(players[0], player, player, "fire") > 0;
},
prompt: function () {
var players = game.players.slice(0);
players.sort(function (a, b) {
return b.hp - a.hp;
});
return '枭首:是否对'+get.translation(players[0])+'造成1点火焰伤害';
return "枭首:是否对" + get.translation(players[0]) + "造成1点火焰伤害";
},
content: function () {
var players = game.players.slice(0);
@ -181,63 +181,63 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return b.hp - a.hp;
});
if (players[0].hp > players[1].hp && players[0] != player) {
players[0].damage('fire');
player.line(players[0],'fire');
players[0].damage("fire");
player.line(players[0], "fire");
}
},
ai: {
expose:0.2
}
expose: 0.2,
},
},
guiji: {
trigger:{player:'phaseJudgeBegin'},
trigger: { player: "phaseJudgeBegin" },
forced: true,
content: function () {
player.discard(player.getCards('j').randomGet());
player.discard(player.getCards("j").randomGet());
},
filter: function (event, player) {
return player.countCards('j')>0;
return player.countCards("j") > 0;
},
ai: {
effect: {
target: function (card, player, target, current) {
if(get.type(card)=='delay'&&target.countCards('j')==0) return 0.1;
}
}
}
if (get.type(card) == "delay" && target.countCards("j") == 0) return 0.1;
},
},
},
},
qiangzheng: {
audio: 2,
trigger:{player:'phaseEnd'},
trigger: { player: "phaseEnd" },
direct: true,
forced: true,
filter: function (event, player) {
for (var i = 0; i < game.players.length; i++) {
if(game.players[i]!=player&&game.players[i].countCards('h')) return true;
if (game.players[i] != player && game.players[i].countCards("h")) return true;
}
return false;
},
content: function () {
"step 0"
player.chooseTarget('获得一名角色的一张手牌',true,function(card,player,target){
return player!=target&&target.countCards('h')>0;
"step 0";
player.chooseTarget("获得一名角色的一张手牌", true, function (card, player, target) {
return player != target && target.countCards("h") > 0;
}).ai = function (target) {
return -get.attitude(player, target);
};
"step 1"
"step 1";
if (result.targets && result.targets.length) {
player.logSkill('qiangzheng',result.targets);
player.gain(result.targets[0].getCards('h').randomGet(),result.targets[0]);
player.logSkill("qiangzheng", result.targets);
player.gain(result.targets[0].getCards("h").randomGet(), result.targets[0]);
result.targets[0].$give(1, player);
game.delay();
}
},
ai: {
threaten:1.7
}
threaten: 1.7,
},
},
suoling: {
trigger:{player:'phaseEnd'},
trigger: { player: "phaseEnd" },
forced: true,
filter: function (event, player) {
if (player.isLinked()) return true;
@ -249,12 +249,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return false;
},
content: function () {
"step 0"
"step 0";
event.targets = game.players.slice(0);
event.targets.remove(player);
event.targets.sort(lib.sort.seat);
if (player.isLinked()) player.link();
"step 1"
"step 1";
if (event.targets.length) {
var target = event.targets.shift();
if (!target.isLinked()) {
@ -262,10 +262,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
event.redo();
}
}
},
},
xixing: {
enable:'phaseUse',
enable: "phaseUse",
usable: 1,
filterCard: function (card) {
var type = get.type(card);
@ -276,7 +276,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
complexCard: true,
selectCard: 3,
position:'he',
position: "he",
filterTarget: function (card, player, target) {
return player != target;
},
@ -287,9 +287,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return 10 - get.value(card);
},
content: function () {
"step 0"
"step 0";
target.damage();
"step 1"
"step 1";
player.recover();
},
ai: {
@ -297,46 +297,47 @@ game.import('character',function(lib,game,ui,get,ai,_status){
result: {
target: function (player, target) {
return get.damageEffect(target, player);
}
},
expose:0.2
}
}
},
expose: 0.2,
},
},
},
translate: {
nianshou:'年兽',
nianrui:'年瑞',
qixiang:'祺祥',
qixiang1:'祺祥',
qixiang2:'祺祥',
nianrui_info:'准备阶段和结束阶段,你可以进行一次判定,若结果为红色则摸一张牌。',
qixiang_info:'乐不思蜀判定时,你的方块判定牌视为红桃;兵粮寸断判定时,你的黑桃判定牌视为草花。',
nianshou: "年兽",
nianrui: "年瑞",
qixiang: "祺祥",
qixiang1: "祺祥",
qixiang2: "祺祥",
nianrui_info: "准备阶段和结束阶段,你可以进行一次判定,若结果为红色则摸一张牌。",
qixiang_info: "乐不思蜀判定时,你的方块判定牌视为红桃;兵粮寸断判定时,你的黑桃判定牌视为草花。",
mamian:'马面',
lianyu:'炼狱',
lianyu_info:'出牌阶段限一次你可以弃置一张红色手牌令场上所有角色受到1点火焰伤害。',
mamian: "马面",
lianyu: "炼狱",
lianyu_info: "出牌阶段限一次你可以弃置一张红色手牌令场上所有角色受到1点火焰伤害。",
niutou:'牛头',
manjia:'蛮甲',
manjia1:'蛮甲',
manjia2:'蛮甲',
manjia_info:'锁定技,若你的装备区内没有防具牌,则你视为装备了【藤甲】。',
xiaoshou:'枭首',
xiaoshou_info:'结束阶段若场上体力值最多的角色只有一个你可以对其造成1点火焰伤害。',
guiji:'诡计',
guiji_info:'锁定技,准备阶段结束时,若你的判定区内有牌,你随机弃置其中一张牌。',
niutou: "牛头",
manjia: "蛮甲",
manjia1: "蛮甲",
manjia2: "蛮甲",
manjia_info: "锁定技,若你的装备区内没有防具牌,则你视为装备了【藤甲】。",
xiaoshou: "枭首",
xiaoshou_info: "结束阶段若场上体力值最多的角色只有一个你可以对其造成1点火焰伤害。",
guiji: "诡计",
guiji_info: "锁定技,准备阶段结束时,若你的判定区内有牌,你随机弃置其中一张牌。",
baiwuchang:'白无常',
qiangzheng:'强征',
qiangzheng_info:'锁定技,结束阶段,你获得一名其他角色的一张手牌。',
zuijiu:'醉酒',
zuijiu_info:'锁定技,你的黑杀造成的伤害+1造成伤害后须弃置一张手牌。',
baiwuchang: "白无常",
qiangzheng: "强征",
qiangzheng_info: "锁定技,结束阶段,你获得一名其他角色的一张手牌。",
zuijiu: "醉酒",
zuijiu_info: "锁定技,你的黑杀造成的伤害+1造成伤害后须弃置一张手牌。",
heiwuchang:'黑无常',
suoling:'索令',
suoling_info:'锁定技,结束阶段,你解除横置状态,除你之外的所有角色进入横置状态。',
xixing:'吸星',
xixing_info:'出牌阶段限一次你可以弃置三张不同类别的牌对一名其他角色造成1点伤害然后回复1点体力。',
heiwuchang: "黑无常",
suoling: "索令",
suoling_info: "锁定技,结束阶段,你解除横置状态,除你之外的所有角色进入横置状态。",
xixing: "吸星",
xixing_info:
"出牌阶段限一次你可以弃置三张不同类别的牌对一名其他角色造成1点伤害然后回复1点体力。",
},
};
});

39
eslint.config.mjs Normal file
View File

@ -0,0 +1,39 @@
import js from "@eslint/js";
import globals from "globals";
export default [
js.configs.recommended,
{
rules: {
"no-console": 0,
"no-constant-condition": [
"error",
{
checkLoops: false,
},
],
"no-irregular-whitespace": [
"error",
{
skipStrings: true,
skipTemplates: true,
},
],
"no-redeclare": 0,
"no-undef": 0,
"no-unused-vars": 0,
"require-yield": 0,
},
languageOptions: {
ecmaVersion: 13,
sourceType: "module",
globals: {
...globals.browser,
...globals.es2015,
...globals.node,
...globals.serviceworker,
...globals.worker,
},
},
},
];

View File

@ -1,22 +1,27 @@
'use strict';
game.import('play',function(lib,game,ui,get,ai,_status){
import { lib, game, ui, get, ai, _status } from "../../noname.js";
game.import("play", function () {
return {
name:'boss',
name: "boss",
init: function () {
if(get.mode()=='tafang') return;
var storage=localStorage.getItem('boss_storage_playpackconfig');
if (get.mode() == "tafang") return;
var storage = localStorage.getItem("boss_storage_playpackconfig");
try {
storage = JSON.parse(storage) || {};
}
catch(e){
} catch (e) {
storage = {};
}
if(get.mode()!='boss'){
if (get.mode() != "boss") {
lib.characterPack.mode_extension_boss = storage.boss || {};
for (var i in lib.characterPack.mode_extension_boss) {
lib.characterPack.mode_extension_boss[i][4].push('mode:boss');
lib.characterPack.mode_extension_boss[i][4].push(
"mode:boss"
);
lib.character[i] = lib.characterPack.mode_extension_boss[i];
if(typeof lib.character[i][2]!='number'&&(typeof lib.character[i][2]!='string'||lib.character[i][2].indexOf('/')==-1)){
if (
typeof lib.character[i][2] != "number" &&
(typeof lib.character[i][2] != "string" ||
lib.character[i][2].indexOf("/") == -1)
) {
lib.character[i][2] = Infinity;
}
if (!lib.config.boss_enableai_playpackconfig) {
@ -25,13 +30,18 @@ game.import('play',function(lib,game,ui,get,ai,_status){
}
}
var list2 = storage.versus || {};
if(get.mode()!='versus'||get.config('versus_mode')!='jiange'){
if (
get.mode() != "versus" ||
get.config("versus_mode") != "jiange"
) {
lib.characterPack.mode_extension_jiange = list2;
for (var i in list2) {
lib.characterPack.mode_extension_jiange[i] = list2[i];
lib.characterPack.mode_extension_jiange[i][4].push('mode:versus');
lib.characterPack.mode_extension_jiange[i][4].push(
"mode:versus"
);
lib.character[i] = list2[i];
if(typeof lib.character[i][2]!='number'){
if (typeof lib.character[i][2] != "number") {
lib.character[i][2] = Infinity;
}
if (!lib.config.boss_enableai_playpackconfig) {
@ -39,15 +49,21 @@ game.import('play',function(lib,game,ui,get,ai,_status){
}
}
lib.characterIntro.boss_liedixuande = lib.characterIntro.liubei;
lib.characterIntro.boss_gongshenyueying=lib.characterIntro.huangyueying;
lib.characterIntro.boss_tianhoukongming=lib.characterIntro.shen_zhugeliang;
lib.characterIntro.boss_yuhuoshiyuan=lib.characterIntro.pangtong;
lib.characterIntro.boss_qiaokuijunyi=lib.characterIntro.zhanghe;
lib.characterIntro.boss_jiarenzidan=lib.characterIntro.caozhen;
lib.characterIntro.boss_duanyuzhongda=lib.characterIntro.simayi;
lib.characterIntro.boss_juechenmiaocai=lib.characterIntro.xiahouyuan;
}
else if(_status.mode!='jiange'){
lib.characterIntro.boss_gongshenyueying =
lib.characterIntro.huangyueying;
lib.characterIntro.boss_tianhoukongming =
lib.characterIntro.shen_zhugeliang;
lib.characterIntro.boss_yuhuoshiyuan =
lib.characterIntro.pangtong;
lib.characterIntro.boss_qiaokuijunyi =
lib.characterIntro.zhanghe;
lib.characterIntro.boss_jiarenzidan =
lib.characterIntro.caozhen;
lib.characterIntro.boss_duanyuzhongda =
lib.characterIntro.simayi;
lib.characterIntro.boss_juechenmiaocai =
lib.characterIntro.xiahouyuan;
} else if (_status.mode != "jiange") {
for (var i in list2) {
lib.character[i] = list2[i];
if (!lib.config.boss_enableai_playpackconfig) {
@ -56,60 +72,66 @@ game.import('play',function(lib,game,ui,get,ai,_status){
}
}
var list = storage.translate || {};
list.mode_extension_boss_character_config='挑战武将';
list.mode_extension_jiange_character_config='剑阁武将';
list.mode_extension_boss_character_config = "挑战武将";
list.mode_extension_jiange_character_config = "剑阁武将";
for (var i in list) {
lib.translate[i] = lib.translate[i] || list[i];
}
},
arenaReady: function () {
if(get.mode()=='tafang') return;
var storage=localStorage.getItem('boss_storage_playpackconfig');
if (get.mode() == "tafang") return;
var storage = localStorage.getItem("boss_storage_playpackconfig");
try {
storage = JSON.parse(storage) || {};
}
catch(e){
} catch (e) {
storage = {};
}
if (!storage.translate) {
storage.translate = {};
}
var loadversus = function () {
if(get.mode()!='versus'){
game.loadModeAsync('versus',function(mode){
if (get.mode() != "versus") {
game.loadModeAsync("versus", function (mode) {
for (var i in mode.translate) {
lib.translate[i]=lib.translate[i]||mode.translate[i];
lib.translate[i] =
lib.translate[i] || mode.translate[i];
storage.translate[i] = mode.translate[i];
}
for (var i in mode.skill) {
if (lib.skill[i]) console.log(i);
if(i!='versus_ladder'){
if (i != "versus_ladder") {
lib.skill[i] = mode.skill[i];
}
}
for (var ii in mode.skill) {
if(ii!='versus_ladder'){
if (ii != "versus_ladder") {
game.finishSkill(ii);
}
}
storage.versus = {};
for (var i in mode.jiangeboss) {
if(mode.jiangeboss[i][4].includes('bossallowed')){
if (mode.jiangeboss[i][4].includes("bossallowed")) {
storage.versus[i] = mode.jiangeboss[i];
}
}
localStorage.setItem('boss_storage_playpackconfig',JSON.stringify(storage));
localStorage.setItem(
"boss_storage_playpackconfig",
JSON.stringify(storage)
);
});
}
else{
localStorage.setItem('boss_storage_playpackconfig',JSON.stringify(storage));
} else {
localStorage.setItem(
"boss_storage_playpackconfig",
JSON.stringify(storage)
);
}
};
if(get.mode()!='boss'){
game.loadModeAsync('boss',function(mode){
if (get.mode() != "boss") {
game.loadModeAsync("boss", function (mode) {
for (var i in mode.translate) {
lib.translate[i]=lib.translate[i]||mode.translate[i];
lib.translate[i] =
lib.translate[i] || mode.translate[i];
storage.translate[i] = mode.translate[i];
}
for (var i in mode.skill) {
@ -117,20 +139,23 @@ game.import('play',function(lib,game,ui,get,ai,_status){
lib.skill[i] = mode.skill[i];
}
for (var ii in mode.skill) {
if(ii!='versus_ladder'){
if (ii != "versus_ladder") {
game.finishSkill(ii);
}
}
storage.boss = {};
for (var i in mode.characterPack.mode_boss) {
if(mode.characterPack.mode_boss[i][4].includes('bossallowed')){
if (
mode.characterPack.mode_boss[i][4].includes(
"bossallowed"
)
) {
storage.boss[i] = mode.characterPack.mode_boss[i];
}
}
loadversus();
});
}
else{
} else {
loadversus();
}
},

View File

@ -1,7 +1,7 @@
'use strict';
game.import('play',function(lib,game,ui,get,ai,_status){
import { lib, game, ui, get, ai, _status } from "../../noname.js";
game.import("play", function () {
return {
name:'cardpile',
name: "cardpile",
arenaReady: function () {
var data = {
total: 160,
@ -13,20 +13,20 @@ game.import('play',function(lib,game,ui,get,ai,_status){
},
huosha: {
diamond: 2,
heart:3
heart: 3,
},
leisha: {
spade: 5,
club:4
club: 4,
},
shan: {
heart: 6,
diamond:18
diamond: 18,
},
jiu: {
diamond: 1,
spade: 2,
club:2
club: 2,
},
tao: {
heart: 9,
@ -42,28 +42,33 @@ game.import('play',function(lib,game,ui,get,ai,_status){
guohe: {
spade: 3,
club: 2,
heart:1
heart: 1,
},
shunshou: {
spade: 3,
diamond:2
diamond: 2,
},
wuxie: {
heart: 2,
diamond: 1,
spade: 2,
club:2
club: 2,
},
tiesuo: {
spade: 2,
club:4
}
}
club: 4,
},
};
var rand = function () {
return Math.ceil(Math.random() * 13);
};
var getn = function (i, j) {
return Math.round(data[i][j]*parseFloat(lib.config['cardpile_'+i+'_playpackconfig']));
return Math.round(
data[i][j] *
parseFloat(
lib.config["cardpile_" + i + "_playpackconfig"]
)
);
};
var num = 0;
for (var i in data) {
@ -71,21 +76,26 @@ game.import('play',function(lib,game,ui,get,ai,_status){
num += getn(i, j);
}
}
var dn=num*(lib.card.list.length-data.total)/(data.total-num);
var dn =
(num * (lib.card.list.length - data.total)) /
(data.total - num);
if (dn > 1000) dn = 1000;
if (dn > 0) {
var p = 0;
for (var i in data) {
for (var j in data[i]) {
var n=Math.round(dn*getn(i,j)/num);
var n = Math.round((dn * getn(i, j)) / num);
while (n--) {
if(i=='huosha'){
lib.card.list.push([j,rand(),'sha','fire']);
}
else if(i=='leisha'){
lib.card.list.push([j,rand(),'sha','thunder']);
}
else{
if (i == "huosha") {
lib.card.list.push([j, rand(), "sha", "fire"]);
} else if (i == "leisha") {
lib.card.list.push([
j,
rand(),
"sha",
"thunder",
]);
} else {
lib.card.list.push([j, rand(), i]);
}
}

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More