【问题标题】:LUA context format beginnerLUA 上下文格式初学者
【发布时间】:2022-01-11 09:25:46
【问题描述】:

我已对此进行了更新,以显示我正在使用的整个代码。事后看来,我不应该试图让它速记。任何帮助,将不胜感激。谢谢。

--[[Checks to see if a player owns 1 of 12 buildings.]]--
events.FactionTurnStart[#events.FactionTurnStart+1] = function(context)
    if (conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Smithing_1_Blacksmith_Iwate", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Smithing_2_Weaponsmith_Iwate", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Smithing_3_Master_Weaponsmith_Iwate", context)) then
        Player_Iwate = ""
    else
        Player_Iwate = "Inf_Four_Iwate_Nodachi"
    end
end

events.FactionTurnStart[#events.FactionTurnStart+1] = function(context)
    if (conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Ninja_1_Hideout_Iga", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Ninja_2_Ninjutsu_School_Iga", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Ninja_3_Clan_Fortress_Iga", context)) then
        Player_Iga = ""
    else
        Player_Iga = "Inf_Four_Iga_Kisho_Ninja"
    end
end

events.FactionTurnStart[#events.FactionTurnStart+1] = function(context)
    if (conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Horses_1_Pastures_Mikawa", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Horses_2_Breeders_Mikawa", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Horses_3_Warhorse_Breeders_Mikawa", context)) then
        Player_Mikawa = ""
    else
        Player_Mikawa = "Inf_Four_Mikawa_Mounted_Ninja"
    end
end

events.FactionTurnStart[#events.FactionTurnStart+1] = function(context)
    if (conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Horses_1_Pastures_Kai", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Horses_2_Breeders_Kai", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Horses_3_Warhorse_Breeders_Kai", context)) then
        Player_Kai = ""
    else
        Player_Kai = "Inf_Four_Kai_Light_Cavalry"
    end
end

events.FactionTurnStart[#events.FactionTurnStart+1] = function(context)
    if (conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Smithing_1_Blacksmith_Satsuma", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Smithing_2_Armourer_Satsuma", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Smithing_3_Master_Armourer_Satsuma", context)) then
        Player_Satsuma = ""
    else
        Player_Satsuma = "Inf_Four_Satsuma_Katana_Samurai"
    end
end

events.FactionTurnStart[#events.FactionTurnStart+1] = function(context)
    if (conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Naval_1_Merchant_Colony_Bungo", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Naval_2_Warehouses_Bungo", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Naval_3_Red_Seal_Company_Bungo", context)) then
        Player_Bungo = ""
    else
        Player_Bungo = "Inf_Four_Bungo_Matchlock"
    end
end

events.FactionTurnStart[#events.FactionTurnStart+1] = function(context)
    if (conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Holy_Site_1_Holy_Site_Aki", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Holy_Site_2_Pilgrim_Hostel_Aki", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Holy_Site_3_Great_Soja_Shrine_Aki", context)) then
        Player_Aki = ""
    else
        Player_Aki = "Inf_Four_Aki_Wako_Raiders"
    end
end

events.FactionTurnStart[#events.FactionTurnStart+1] = function(context)
    if (conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Timber_1_Lumbercamp_Tosa", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Timber_2_Lumberyards_Tosa", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Timber_3_Sawmills_Tosa", context)) then
        Player_Tosa = ""
    else
        Player_Tosa = "Inf_Four_Tosa_Yumi_Samurai"
    end
end

events.FactionTurnStart[#events.FactionTurnStart+1] = function(context)
    if (conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Craftwork_1_Artisans_Echizen", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Craftwork_2_Fletchers_Echizen", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Craftwork_3_Master_Bowmaker_Echizen", context)) then
        Player_Echizen = ""
    else
        Player_Echizen = "Inf_Four_Echizen_Katana_Ronin"
    end
end

events.FactionTurnStart[#events.FactionTurnStart+1] = function(context)
    if (conditions.FactionBuildingExists(Player_Faction, "SHO_Farming_1_Rice_Paddies_Owari", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Farming_2_Irrigation_Owari", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Farming_3_Terraces_Owari", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Farming_4_Consolidation_Owari", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Farming_5_Specialization_Owari", context)) then
        Player_Owari = ""
    else
        Player_Owari = "Inf_Four_Owari_Long"
    end
end

events.FactionTurnStart[#events.FactionTurnStart+1] = function(context)
    if (conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Gold_Mining_1_Surface_Mining_Izu", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Gold_Mining_2_Open_Pit_Izu", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Gold_Mining_3_Mining_Complex_Izu", context)) then
        Player_Izu = ""
    else
        Player_Izu = "Inf_Four_Izu_Mortar_Team"
    end
end

events.FactionTurnStart[#events.FactionTurnStart+1] = function(context)
    if (conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Naval_1_Merchant_Colony_Echigo", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Naval_2_Warehouses_Echigo", context) or conditions.FactionBuildingExists(Player_Faction, "SHO_Region_Specialty_Naval_3_Red_Seal_Company_Echigo", context)) then
        Player_Echigo = ""
    else
        Player_Echigo = "Inf_Four_Echigo_Marathon_Monks"
    end
end

-- 上面的代码按预期工作,因为如果我在 CampaignSettlementAttack 事件中一次使用一个,它将起作用。玩家可以有所有 12 个的任意组合,所以我试图避免发生数千个派系启动事件。

-- 下面的代码不起作用,因为它在每个单元之间用“”写入玩家值的方式。在最底部,我举了一个示例,说明应该如何布置单元以使代码正常工作。我不知道如何让播放器值匹配所需的格式。

events.CampaignSettlementAttacked[#events.CampaignSettlementAttacked+1] = function(context)
    if conditions.IsPlayerTurn(context) and not conditions.IsBesieging(context) and conditions.SettlementName("settlement:jap_yamashiro:kyoto", context) and not kill_switch_kyoto then
        kill_switch_kyoto = true
        scripting.game_interface:create_force("ashikaga", Player_Iwate,Player_Iga,Player_Mikawa,Player_Kai,Player_Satsuma,Player_Bungo,Player_Aki,Player_Tosa,Player_Echizen,Player_Owari,Player_Izu,Player_Echigo, -42.0, -123.0, "Kyoto Nightmare", true)
        return false
    end
    return false
end

如下所示效果会起作用

scripting.game_interface:create_force("ashikaga", "Inf_Four_Iwate_Nodachi,Inf_Four_Iga_Kisho_Ninja,Inf_Four_Mikawa_Mounted_Ninja,Inf_Four_Satsuma_Katana_Samurai", -42.0, -123.0, "Kyoto Nightmare", true)

我能够通过更改如下效果来解决问题并使其正常工作。感谢您的回复。

scripting.game_interface:create_force("ashikaga", ('"' .. ',' .. Player_Izu .. ',' .. Player_Echigo .. ',' .. Player_Iga .. ',' .. Player_Echizen .. ',' .. Player_Owari .. ',' .. Player_Tosa .. ',' .. Player_Aki .. ',' .. Player_Bungo .. ',' .. Player_Iwate .. ',' .. Player_Satsuma .. ',' .. Player_Kai .. ',' .. Player_Mikawa .. ',' .. '"'), -42.0, -123.0, "Kyoto Nightmare", true)

【问题讨论】:

  • 这是怎么回事? Lua中没有播放器,你说的是哪个API?目前还不太清楚你想要实现什么,我看不出你如何在这里保存“数千行代码”。请不要夸大其词。
  • 你还没有告诉我们你的框架/库。 events 不是原版 Lua 的一部分。
  • 我是一个业余爱好者,我不知道你在问什么。我收集了一系列事件、条件和效果,并且相当成功地写出了我想在游戏中发生的事情。我认为我遇到的这个问题会有一个 lua 通用解决方案。
  • Lua 是一种非常简单的语言,主要用于嵌入到其他程序中。 Here is its website. 您的代码看起来可能是为嵌入 Lua 的程序编写的,例如特定游戏或 Love2d 等游戏引擎。如果存在嵌入程序,为您的问题添加标签会很有帮助。

标签: lua


【解决方案1】:
Player_1 = "Unit_1" else Player_1 = ""

Player_2 = "Unit_2" else Player_2 = ""

这是句法废话。 else 是条件语句的一部分。你不能这样使用它。

要么这样做:

if condition then
  Player_1 = "Unit_1"
else
  Player_1 = ""
end

Player_1 = condition and "Unit_1" or ""

目前尚不清楚您真正想要实现什么。如果我不得不猜测,我会提议:

本地玩家 = {"Unit_1", "Unit_2"} scripting.game_interface:create_force(table.concat(players, ","), true)

假设 12 名玩家拥有 Unit_1 .. Unit_12 你可以简单地做

local unit = ""
for 1,12 do
  unit = unit .. "Unit_" .. i .. ","
end
scripting.game_interface:create_force(unit, true) 

【讨论】:

  • 我已经更新了我的帖子以显示我正在使用的整个代码。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
  • 2013-10-12
  • 1970-01-01
相关资源
最近更新 更多