Code improvement, audio fix

This commit is contained in:
Baisebaoma 2023-12-13 17:36:38 +08:00
parent 71b34d78cf
commit 5347da9e3d
2 changed files with 40 additions and 29 deletions

View File

@ -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"] = [[<br>
1. 使<br>
2. 4使]],
-- TODO: 好像luojiao2的语音不显示
["$jy_luojiao1"] = "Muchas gracias afición, esto es para vosotros, Siuuu",
["$jy_luojiao2"] = "(观众声)",
["#jy_luojiao_after"] = "罗绞",