Compare commits

...
2 Commits
Author SHA1 Message Date
539943419 dbaf48e72c 修复bug,强度调整 2024-07-21 11:59:07 +08:00
539943419 5c35a0c334 完成技能【笯凰凤】 2024-07-21 10:21:09 +08:00
2 changed files with 257 additions and 59 deletions

No files matched your search

+244 -55
View File
@@ -73,7 +73,7 @@ game.import("extension", function (lib, game, ui, get, ai, _status) {
zioy_sanjijie: ["male", "qun", "3/3/3", ["zioy_fouzhiyu", "zioy_ningguxi"], []], zioy_sanjijie: ["male", "qun", "3/3/3", ["zioy_fouzhiyu", "zioy_ningguxi"], []],
zioy_yuze: ["none", "wei", "2", ["zioy_juhun"], []], zioy_yuze: ["none", "wei", "2", ["zioy_juhun"], []],
zioy_luosa: ["male", "wu", "4", ["zioy_minchao", "zioy_kuangyong"]], zioy_luosa: ["male", "wu", "4", ["zioy_minchao", "zioy_kuangyong"]],
zioy_gold: ["male", "qun", "5", ["zioy_shihunzhuo","zioy_nuhuangfeng","zioy_duwenlei"]] zioy_gold: ["male", "qun", 5, ["zioy_shihunzhuo","zioy_nuhuangfeng","zioy_duwenlei"]]
}, },
translate: { translate: {
"zioy_xixuegui": "弗拉基米尔", "zioy_xixuegui": "弗拉基米尔",
@@ -8374,7 +8374,7 @@ if(get.type(card)=='basic' && get.type(card)=='trick') flag= true;
global: "phaseBegin" global: "phaseBegin"
}, },
filter: () => true, filter: () => true,
forced: true, direct: true,
init: player => (player.storage.zioy_que2 = true), init: player => (player.storage.zioy_que2 = true),
content: function () { content: function () {
player.storage.zioy_que2 = true; player.storage.zioy_que2 = true;
@@ -8882,7 +8882,7 @@ if(get.type(card)=='basic' && get.type(card)=='trick') flag= true;
④你造成/受到伤害后,你与伤害来源各获得“空”,若其已有“空”则重置“空”的发动次数。<br> ④你造成/受到伤害后,你与伤害来源各获得“空”,若其已有“空”则重置“空”的发动次数。<br>
⑤每个出牌阶段每名角色限10次。一名角色于你的出牌阶段内失去牌时,你令其获得“舍”,若其已有“舍”则重置“舍”的发动次数。<br> ⑤每个出牌阶段每名角色限10次。一名角色于你的出牌阶段内失去牌时,你令其获得“舍”,若其已有“舍”则重置“舍”的发动次数。<br>
⑥你的回合开始阶段,以逆时针顺序从你开始的所有角色依次失去“空”与"舍",每有一名角色以此法失去“空”,你获得1枚“隙”,每有一名角色以此法失去“舍”,你获得1枚“嗜”。<br> ⑥你的回合开始阶段,以逆时针顺序从你开始的所有角色依次失去“空”与"舍",每有一名角色以此法失去“空”,你获得1枚“隙”,每有一名角色以此法失去“舍”,你获得1枚“嗜”。<br>
⑦每当你获得4枚“隙”,你失去1点体力上限并将体力回复至体力上限。<br> ⑦每当你获得4枚“隙”,你失去1点体力上限,若你未处于【灵降】状态,你将体力回复至体力上限。<br>
⑧每当你获得“嗜”时,你摸一张牌。你的手牌上限-X(X为你“嗜”的数量/3)<br> ⑧每当你获得“嗜”时,你摸一张牌。你的手牌上限-X(X为你“嗜”的数量/3)<br>
恒:你的体力上限-1。你的体力上限增加无效。<br> 恒:你的体力上限-1。你的体力上限增加无效。<br>
空:获得此技能时你失去1点体力,失去此技能时你回复1点体力。当你回复体力时,取消之。此技能在发动2次后被失去。<br> 空:获得此技能时你失去1点体力,失去此技能时你回复1点体力。当你回复体力时,取消之。此技能在发动2次后被失去。<br>
@@ -9011,36 +9011,6 @@ if(get.type(card)=='basic' && get.type(card)=='trick') flag= true;
} }
}, },
autoSubSkill:{ autoSubSkill:{
damageBegin1:{
trigger:{
player:'damageBegin1',
source:'damageBegin1'
},
filter:()=>{
return false
return true
},
direct:true,
content:async function(event,trigger,player){
trigger.num *= 2
},
priority:-539943419
},
damageBegin3:{
trigger:{
player:'damageBegin3',
source:'damageBegin3'
},
filter:(event,player)=>{
return false
return event.num < 2
},
direct:true,
content:async function(event,trigger,player){
trigger.num = 2
},
priority:-539943419
},
damageEnd:{ damageEnd:{
trigger:{ trigger:{
player:'damageEnd', player:'damageEnd',
@@ -9049,7 +9019,7 @@ if(get.type(card)=='basic' && get.type(card)=='trick') flag= true;
direct:true, direct:true,
filter:(event)=>{ filter:(event)=>{
// console.log(event.getParent().name) // console.log(event.getParent().name)
return event.getParent().name !== `zioy_shihunzhuo_damageEnd` && event.num > 1 return event.getParent().name !== `zioy_shihunzhuo_damageEnd` && event.num > 1 && event.source
}, },
content:async function(event,trigger,player){ content:async function(event,trigger,player){
const num = Math.floor(trigger.num / 2) const num = Math.floor(trigger.num / 2)
@@ -9118,8 +9088,6 @@ if(get.type(card)=='basic' && get.type(card)=='trick') flag= true;
filter:_=>true, filter:_=>true,
async content(_,__,player){ async content(_,__,player){
player.storage.zioy_shihunzhuo_she_gainHistory = {} player.storage.zioy_shihunzhuo_she_gainHistory = {}
console.log(
player.storage.zioy_shihunzhuo_she_gainHistory)
} }
}, },
phaseBegin:{ phaseBegin:{
@@ -9138,7 +9106,9 @@ if(get.type(card)=='basic' && get.type(card)=='trick') flag= true;
player.addMark('zioy_shihunzhuo_xi') player.addMark('zioy_shihunzhuo_xi')
if(player.countMark('zioy_shihunzhuo_xi') % 4 === 0){ if(player.countMark('zioy_shihunzhuo_xi') % 4 === 0){
player.loseMaxHp(1) player.loseMaxHp(1)
player.recover(player.maxHp - player.hp) if(player.storage.zioy_nuhuangfeng_status !== 'lingjiang'){
player.recover(player.maxHp - player.hp)
}
} }
} }
if(current.hasSkill('zioy_shihunzhuo_she')){ if(current.hasSkill('zioy_shihunzhuo_she')){
@@ -9186,31 +9156,42 @@ if(get.type(card)=='basic' && get.type(card)=='trick') flag= true;
}, },
priority:7058211 priority:7058211
} }
} },
_priority:9579
}, },
zioy_nuhuangfeng:{ zioy_nuhuangfeng:{
autoTranslate: { autoTranslate: {
"name": "笯凰凤", "name": "笯凰凤",
"info": `回合结束阶段:<br> "info": `游戏开始时或回合结束阶段:<br>
若你未处于【灵降】状态且场上存在未拥有“恒”的其他角色,你须选择一名未拥有“恒”的其他角色,你令其获得“恒”并根据你选择的角色进入【灵降】状态。<br> 若你未处于【灵降】且未进入过【常灭】状态且场上存在未拥有“恒”的其他角色,你须选择一名未拥有“恒”的其他角色,你令其获得“恒”并根据你选择的角色进入【灵降】状态。<br>
若你未处于【灵降】状态且场上所有角色均已拥有“恒”,你进入【常灭】状态并进行3个额外的回合。<br> 若你未处于【灵降】且未进入过【常灭】状态且场上所有角色均已拥有“恒”,你进入【常灭】状态并进行3个额外的回合。<br>
<br>【灵降】状态具有以下特性:<br> <br>【灵降】状态具有以下特性:<br>
①进入【灵降】状态时,记录你当前的体力,体力上限,区域内的牌。然后将你区域内的所有牌移出游戏。将你的武将牌替换为你进入【灵降】状态时选择的角色的武将牌。 ①进入【灵降】状态时,记录你当前的体力,体力上限,区域内的牌。然后将你区域内的所有牌移出游戏。将你的武将牌替换为你进入【灵降】状态时选择的角色的武将牌。将你的体力,体力上限调整为与该角色游戏开始时相等。你获得其所有技能并摸4张牌。<br>
将你的体力,体力上限调整为与该角色游戏开始时相等。你获得其所有技能并摸4张牌。<br>
②【灵降】状态下你即将进入濒死状态时,取消之,改为退出【灵降】状态。<br> ②【灵降】状态下你即将进入濒死状态时,取消之,改为退出【灵降】状态。<br>
③退出【灵降】状态时,你失去你区域内的所有牌,失去你于【灵降】状态期间获得的所有技能,将武将牌替换为进入【灵降】状态前的武将牌。将你当前的体力,体力上限 ③退出【灵降】状态时,你失去你区域内的所有牌,失去你于【灵降】状态期间获得的所有技能,将武将牌替换为进入【灵降】状态前的武将牌。将你当前的体力,体力上限调整为于进入【灵降】状态前相等。然后将进入【灵降】前区域内的牌移入相应位置。<br>
调整为于进入【灵降】状态前相等。然后将进入【灵降】前区域内的牌移入相应位置。<br>` <br>【常灭】状态具有以下特性:<br>
①进入【常灭】状态时,所有其他角色立即获得“空”与“舍”。<br>
②你的回合开始阶段,你将你的体力与体力上限修改为9,并将你的手牌补至X(X为你“嗜”的数量)。<br>
③你使用牌没有距离限制。拥有“空”或“舍”的其他角色无法响应你使用的牌。<br>
④你即将造成/受到的伤害*2且结算时至少为2。<br>
⑤你造成伤害时,若受伤角色拥有“恒”,你令其失去之,然后你获得1枚“神罪”。<br>
⑥你杀死一名角色时,你获得3枚“神罪”。<br>
⑦其他角色的回合开始阶段,你失去所有体力。`
}, },
init:function(player){ init:function(player){
player.storage.zioy_nuhuangfeng_status = null player.storage.zioy_nuhuangfeng_status = null
}, },
direct:true, forced:true,
trigger:{ trigger:{
player:'phaseEnd' player:['phaseEnd','zioy_nuhuangfeng_enterGame']
}, },
filter(event,player){ filter(event,player){
// 进入过常灭状态
if(player.storage.zioy_nuhuangfeng_changmie_flag)return false
return player.storage.zioy_nuhuangfeng_status === null return player.storage.zioy_nuhuangfeng_status === null
}, },
skillAnimation: true,
animationColor: "thunder",
async content(_e,_t,player){ async content(_e,_t,player){
const noneHasHeng = game.players.reduce((f,v)=>{return f && v.hasSkill('zioy_shihunzhuo_heng')},true) const noneHasHeng = game.players.reduce((f,v)=>{return f && v.hasSkill('zioy_shihunzhuo_heng')},true)
if(!noneHasHeng){ if(!noneHasHeng){
@@ -9227,6 +9208,7 @@ if(get.type(card)=='basic' && get.type(card)=='trick') flag= true;
return -att; return -att;
}); });
const target = result.targets[0] const target = result.targets[0]
player.line(target)
target.addSkill('zioy_shihunzhuo_heng') target.addSkill('zioy_shihunzhuo_heng')
player.storage.zioy_nuhuangfeng_storage = { player.storage.zioy_nuhuangfeng_storage = {
hp: player.hp, hp: player.hp,
@@ -9254,6 +9236,7 @@ if(get.type(card)=='basic' && get.type(card)=='trick') flag= true;
_mt.player.setName(player,`降·${target.node.name.innerHTML}`, 'zioy_gold') _mt.player.setName(player,`降·${target.node.name.innerHTML}`, 'zioy_gold')
player.changeGroup(target.group) player.changeGroup(target.group)
player.storage.zioy_nuhuangfeng_status = 'lingjiang' player.storage.zioy_nuhuangfeng_status = 'lingjiang'
player.update()
// 退出灵降 // 退出灵降
player.exitLingjiang = ()=>{ player.exitLingjiang = ()=>{
player.discard(player.getCards('hej')) player.discard(player.getCards('hej'))
@@ -9280,17 +9263,45 @@ if(get.type(card)=='basic' && get.type(card)=='trick') flag= true;
_mt.player.changeAvatar(player, 'zioy_gold', 'zioy_gold') _mt.player.changeAvatar(player, 'zioy_gold', 'zioy_gold')
_mt.player.setName(player,`${storage.name}`, 'zioy_gold') _mt.player.setName(player,`${storage.name}`, 'zioy_gold')
player.storage.zioy_nuhuangfeng_status = null player.storage.zioy_nuhuangfeng_status = null
player.update()
} }
}else{ }else{
player.storage.zioy_nuhuangfeng_changmie_flag = true
player.storage.zioy_nuhuangfeng_status = 'changmie'
for(let i = 0;i < 3;i++){
player.insertPhase();
}
game.players.forEach(current=>{
player.line(current)
if(!current.hasSkill('zioy_shihunzhuo_kong')){
current.addSkill('zioy_shihunzhuo_kong')
}
if(!current.hasSkill('zioy_shihunzhuo_she')){
current.addSkill('zioy_shihunzhuo_she')
}
})
} }
}, },
autoSubSkill:{ autoSubSkill:{
lin_dyingBefore:{ enterGame:{
trigger:{ trigger:{
player:'dyingBefore' global:'phaseBefore',
player:['enterGame']
},
filter(event,player){
if(event.name=='phase'&&game.phaseNumber>0) return false;
return true
}, },
direct:true, direct:true,
async content(event,trigger,player){
_status.event.trigger("zioy_nuhuangfeng_enterGame");
}
},
lin_dyingBefore:{
trigger:{
player:['dyingBefore','dieBefore']
},
forced:true,
_priority:5399439705821, _priority:5399439705821,
filter(_e,player){ filter(_e,player){
return player.storage.zioy_nuhuangfeng_status === 'lingjiang' return player.storage.zioy_nuhuangfeng_status === 'lingjiang'
@@ -9298,18 +9309,196 @@ if(get.type(card)=='basic' && get.type(card)=='trick') flag= true;
async content(_e,_t,player){ async content(_e,_t,player){
player.exitLingjiang() player.exitLingjiang()
} }
},
chang_phaseBegin:{
trigger:{
player:'phaseBegin'
},
filter(event,player){
return player.storage.zioy_nuhuangfeng_status === 'changmie'
},
forced:true,
async content(_e,_t,player){
player.hp = 9
player.maxHp = 9
player.update()
const drawTo = player.countMark('zioy_shihunzhuo_shi')
if(player.countCards('h') < drawTo){
player.draw(drawTo - player.countCards('h'))
}
},
_priority:170058
},
chang_directHit:{
trigger:{
player:"useCardToPlayered",
},
forced:true,
filter(event,player){
if(event.player === player){
return false
}
if(player.storage.zioy_nuhuangfeng_status === 'changmie'){
return false
}
return event.player.hasSkill('zioy_shihunzhuo_kong') || event.player.hasSkill('zioy_shihunzhuo_she')
},
_priority:170058,
async function (_e,trigger,player){
game.log(player,'令',trigger.card,'不能被',trigger.target,'响应');
trigger.directHit.push(trigger.target);
}
},
chang_damageBegin1:{
trigger:{
player:'damageBegin1',
source:'damageBegin1'
},
filter(event,player){
return player.storage.zioy_nuhuangfeng_status === 'changmie'
},
direct:true,
content:async function(event,trigger,player){
trigger.num *= 2
},
priority:-539943419
},
chang_damageBegin3:{
trigger:{
player:'damageBegin3',
source:'damageBegin3'
},
filter:(event,player)=>{
return player.storage.zioy_nuhuangfeng_status === 'changmie' && event.num < 2
},
direct:true,
content:async function(event,trigger,player){
trigger.num = 2
},
priority:-539943419
},
chang_damageBeginSource:{
trigger:{
source:'damageEnd'
},
forced:true,
filter(event,player){
return player.storage.zioy_nuhuangfeng_status === 'changmie' && event.player.hasSkill('zioy_shihunzhuo_heng')
},
async content(_e,trigger,player){
trigger.player.removeSkill('zioy_shihunzhuo_heng')
player.addMark('zioy_nuhuangfeng_shenzui')
},
priority:-151654684
},
chang_dieAfterSource:{
trigger:{
source:'dieAfter'
},
forced:true,
filter(_e,player){
return player.storage.zioy_nuhuangfeng_status === 'changmie'
},
async content(_e,trigger,player){
player.addMark('zioy_nuhuangfeng_shenzui', 3)
},
priority:-151654684
},
chang_phaseBegin_other:{
trigger:{
global:"phaseBegin",
},
forced:true,
filter:function(event,player){
return event.player!=player && player.storage.zioy_nuhuangfeng_status === 'changmie';
},
async content(_,__,player){
player.loseHp(player.hp)
},
priority:-151654684
} }
} },
subSkill:{
shenzui:{
mark:false,
marktext:'神罪',
intro:{
name:'神罪',
mark(_,__,player){
return player.countMark('zioy_nuhuangfeng_shenzui') >= 5 ?
'神明反叛':'伪神无赦'
}
}
}
},
mod:{
targetInRange(card,player,target){
if(player.storage.zioy_nuhuangfeng_status === 'changmie') return true;
},
},
_priority: 8648,
}, },
zioy_duwenlei:{ zioy_duwenlei:{
autoTranslate: { autoTranslate: {
"name": "独抆泪", "name": "独抆泪",
"info": `你即将死亡时,若你满足:<br> "info": `每局游戏限1次。你即将死亡时,若你满足:<br>
1.你当前体力大于0<br> 1.你当前体力大于0<br>
2.你于【常灭】状态下杀死至少3名其他角色<br> 2.你的“神罪”标记数量不小于5<br>
其中任意条,则终止死亡,你失去【常灭】状态并获得〖规神舞〗。<br> 其中任意条,则终止死亡,你退出【常灭】状态并使你〖规神舞〗有效。<br>
若均不满足,你令一名死亡角色复活并回复所有体力,获得你所有牌。` 若均不满足,你令一名死亡角色复活并将其体力与体力上限设置为与该角色游戏开始时相等,令其获得你区域内所有牌。`
}, },
autoSubSkill:{
goDie:{
trigger:{
player:'dieBefore'
},
forced:true,
filter(event,player){
if(player.storage.zioy_duwenlei_used)return false
return player.hp < 0 && player.countMark('zioy_nuhuangfeng_shenzui') < 5
},
forceDie:true,
async content(_e,_t,player){
player.storage.zioy_duwenlei_used = true
const {result} = await player.chooseTarget('令一名死亡角色复活并将其体力与体力上限设置为与该角色游戏开始时相等,令其获得你区域内所有牌。',(_, player, target)=>target.isDead()).set('deadTarget',true)
.set("ai", target => {
var att = get.attitude(player, target);
return att;
});
if(result.bool){
const target = result.targets[0]
target.revive()
const targetInfo = lib.character[target.name1]
target.hp = get.infoHp(targetInfo[2]);
target.maxHp = get.infoMaxHp(targetInfo[2]);
target.gain(player.getCards('hej'))
target.update()
}
},
_priority:7055432
},
BecomeGod:{
trigger:{
player:'dieBefore'
},
forced:true,
skillAnimation: true,
animationColor: "thunder",
forceDie:true,
filter(event,player){
if(player.storage.zioy_duwenlei_used)return false
return player.hp > 0 || player.countMark('zioy_nuhuangfeng_shenzui') >= 5
},
async content(_e,trigger,player){
player.storage.zioy_duwenlei_used = true
trigger.cancel()
if(player.storage.zioy_nuhuangfeng_status === 'changmie'){
player.storage.zioy_nuhuangfeng_status = null
}
},
_priority:7055433
}
}
} }
}, },
translate: { translate: {
+13 -4
View File
@@ -24,10 +24,6 @@ export function skillFactory(skill) {
export default (lib, game, ui, get, ai, _status) => { export default (lib, game, ui, get, ai, _status) => {
return { return {
isAsyncFunction(func) {
return func.constructor.name === "AsyncFunction";
},
watch: function (obj, key, callback) {},
game: {}, game: {},
/** /**
* Description 角色相关操作 * Description 角色相关操作
@@ -90,6 +86,19 @@ export default (lib, game, ui, get, ai, _status) => {
return (...args) => { return (...args) => {
console.log(count++, ...args); console.log(count++, ...args);
}; };
},
/**
* Description 类似python的sleep,配合await使用,使async函数暂停。
* @param {number} timeout 暂停时间
* @returns {null}
*/
async sleep(timeout) {
await new Promise(r => setTimeout(r, timeout));
return;
},
isAsyncFunction(func) {
return func.constructor.name === "AsyncFunction";
} }
} }
}; };