diff --git a/audio/skill/xjb__aweiluo_luojiao2.mp3 b/audio/skill/jy_luojiao2.mp3
similarity index 100%
rename from audio/skill/xjb__aweiluo_luojiao2.mp3
rename to audio/skill/jy_luojiao2.mp3
diff --git a/jianyu.lua b/jianyu.lua
index 17c3ed6..b5373cf 100644
--- a/jianyu.lua
+++ b/jianyu.lua
@@ -1134,6 +1134,10 @@ local jy_tiaoshui = fk.CreateTriggerSkill{
name = "jy_tiaoshui",
anim_type = "special",
events = {fk.Damaged},
+ can_trigger = function(self, event, target, player, data)
+ local dians = player:getPile("xjb__aweiluo_dian")
+ return #dians ~= 0
+ end
on_use = function(self, event, target, player, data)
local room = player.room
local dians = player:getPile("xjb__aweiluo_dian")
@@ -1146,9 +1150,7 @@ local jy_tiaoshui = fk.CreateTriggerSkill{
}
-- 罗绞
--- 抄自上面的jy_erduanxiao_2
--- 罗绞主技能只判断是否有牌进出特殊区,它的触发不保证罗绞真的触发。罗绞是否触发在后面的关联函数里面判断。
--- 为了让群友理解这个函数,写了很多注释
+-- 罗绞主技能只判断是否有牌进出特殊区,它的触发不保证罗绞真的触发。罗绞是否触发在后面的关联函数里面判断
local jy_luojiao = fk.CreateTriggerSkill{
name = "jy_luojiao",
anim_type = "offensive",
@@ -1202,15 +1204,17 @@ local jy_luojiao = fk.CreateTriggerSkill{
}
-- 修改:使用同一个函数来判断是否触发了南蛮和万箭。
local jy_luojiao_after = fk.CreateTriggerSkill{
- name = "#jy_luojiao_after",
- events = {fk.AfterCardsMove},
+ name = "#jy_luojiao_after", -- 这个技能的名字
+ events = {fk.AfterCardsMove}, -- 卡牌移动之后,如果can_trigger返回真,那就可以发动这个技能
+
+ -- can_trigger是用来判断是否能触发这个技能的,返回真就能触发,返回假就不能触发
can_trigger = function(self, event, target, player, data)
if not player:hasSkill(self) then return false end
- if not player.is_dian_may_changing then return false end -- 如果点有可能在变化
+ if not player.is_dian_may_changing then return false end -- 如果【点】有可能在变化
local dians = player:getPile("xjb__aweiluo_dian")
- -- 判断花色是否全部不同
+ -- 判断是否有两张同样花色的【点】,若有返回false,若没有返回true
if #dians == 0 then return false end -- 设计者说1张也可以发动南蛮
dict = {}
local is_luojiao_suit_satisfied = true
@@ -1229,56 +1233,63 @@ local jy_luojiao_after = fk.CreateTriggerSkill{
player.is_archery_attack =
player.is_luojiao_archery_attack_may_be_triggered and
#player:getPile("xjb__aweiluo_dian") == 4
+
-- 南蛮需要满足的条件:花色全部不同,且本回合未使用过
player.is_savage_assault = is_luojiao_suit_satisfied and
player:usedSkillTimes(self.name) == 0
+ -- 万箭或南蛮满足,返回真
return player.is_archery_attack or player.is_savage_assault
end,
+
+ -- on_cost代表执行该技能时要做什么事情
on_cost = function(self, event, target, player, data)
local room = player.room
- self.first = nil
+ self.first = nil -- 如果两个条件都满足,这个变量存储谁是第一个使用的牌
- -- 如果同时触发
+ -- 如果两个条件都满足
if player.is_archery_attack and player.is_savage_assault then
- if room:askForSkillInvoke(player, self.name, nil, "#jy_luojiao_both_ask") then -- 都触发了,询问是否要使用这个技能
+ if room:askForSkillInvoke(player, self.name, nil, "#jy_luojiao_both_ask") then -- 都触发了,询问是否要使用罗绞
local choices = {"archery_attack", "savage_assault"}
- self.first = room:askForChoice(player, choices, self.name, "#jy_luojiao_ask_which") -- 如果确定使用,询问先发动谁
+ self.first = room:askForChoice(player, choices, self.name, "#jy_luojiao_ask_which") -- 如果玩家确定使用,询问先用哪张牌
+ return true
+ end
+ end
+
+ -- 因为南蛮触发的比万箭多,所以把南蛮放到前面提高效率
+
+ -- 如果南蛮的条件满足
+ if player.is_savage_assault then
+ if room:askForSkillInvoke(player, self.name, nil, "#jy_luojiao_savage_assault_ask") then -- 那么问是否要发动
+ self.do_savage_assault = true
return true
end
end
- -- 如果有可能触发万箭
+ -- 如果万箭的条件满足
if player.is_archery_attack then
if room:askForSkillInvoke(player, self.name, nil, "#jy_luojiao_archery_attack_ask") then -- 那么问是否要发动
self.do_archery_attack = true
return true
end
end
-
- if player.is_savage_assault then
- if room:askForSkillInvoke(player, self.name, nil, "#jy_luojiao_savage_assault_ask") then
- self.do_savage_assault = true
- return true
- end
- end
end,
on_use = function(self, event, target, player, data)
local room = player.room
- if self.first then -- 如果同时触发
- -- 判断到底第一个触发谁
+ if self.first then -- 如果self.first这个值有,那就代表两个条件同时满足
local cards
local skills
- -- 总之,像这样写方便以后扩展,也可以更好地移植到别的代码里去(
- if self.first == "archery_attack" then
+ -- 这样写方便以后扩展,也可以更好地移植到别的代码里去
+ if self.first == "archery_attack" then -- 如果玩家选择先用万箭
cards = { "archery_attack", "savage_assault"}
skill_names = {"#jy_luojiao_archery_attack", "#jy_luojiao_savage_assault"}
else
cards = { "savage_assault", "archery_attack"}
skill_names = {"#jy_luojiao_savage_assault", "#jy_luojiao_archery_attack"}
end
- -- assert(#cards == #skill_names) 如果以后想使用这段代码,需要确保上面的两个变量的长度相等
+ -- assert(#cards == #skill_names)
+ -- 对于
for i = 1, #cards do
if room:askForSkillInvoke(player, skill_names[i]) then -- 如果同意发动这个技能
room:notifySkillInvoked(player, skill_names[i], "offensive") -- 在武将上显示这个技能的名字
@@ -1286,14 +1297,14 @@ local jy_luojiao_after = fk.CreateTriggerSkill{
room:useVirtualCard(cards[i], nil, player, room:getOtherPlayers(player, true), self.name, true)
end
end
- else -- 如果没有同时触发,那就自己算自己的
- -- 万箭
+ else -- 如果没有两个条件同时满足,那满足谁就执行谁
+ -- 满足万箭,执行万箭
if self.do_archery_attack then
room:notifySkillInvoked(player, "jy_luojiao", "offensive")
player:broadcastSkillInvoke("jy_luojiao")
room:useVirtualCard("archery_attack", nil, player, room:getOtherPlayers(player, true), self.name, true)
end
- -- 南蛮
+ -- 满足南蛮,执行南蛮
if self.do_savage_assault then
room:notifySkillInvoked(player, "jy_luojiao", "offensive")
player:broadcastSkillInvoke("jy_luojiao")
@@ -1318,7 +1329,8 @@ local jy_luojiao_set_0 = fk.CreateTriggerSkill{
can_refresh = function(self, event, target, player, data)
-- 任何一个人回合都要发动
return player:hasSkill(self)
- and target.phase == Player.Finish
+ and target.phase == Player.Finish and -- 如果是这个人的回合结束阶段
+ player:getMark("@jy_is_luojiao_savage_assault_used") ~= 0
end,
on_refresh = function(self, event, target, player, data)
player.room:setPlayerMark(player, "@jy_is_luojiao_savage_assault_used", 0) -- 将罗绞南蛮发动过的标记设为0(也就是取消显示)
@@ -1400,7 +1412,6 @@ Fk:loadTranslationTable {
[":jy_luojiao"] = [[当你的【点】的数量变化后:
1. 若你没有两张及以上相同花色的【点】,可以视为立即使用一张【南蛮入侵】,每回合限一次;
2. 若你有4张【点】,可以视为立即使用一张【万箭齐发】。]],
- -- TODO: 好像luojiao2的语音不显示
["$jy_luojiao1"] = "Muchas gracias afición, esto es para vosotros, Siuuu",
["$jy_luojiao2"] = "(观众声)",
["#jy_luojiao_after"] = "罗绞",