diff --git a/init.lua b/init.lua index c22dbc03294c19be6aedb8ab7cbfc512fb134635..a13c5c37097762ab443f087a7afe83f5a563806e 100644 --- a/init.lua +++ b/init.lua @@ -196,6 +196,50 @@ Fk:loadTranslationTable{ ["~m_ex__xusheng"] = "盛只恨,不能再为主公,破敌致胜了。", } +local askForChooseKingdom = function(room, players) + local specialKingdomPlayers = table.filter(players, function(p) + return p.kingdom == "god" or Fk.generals[p.general].subkingdom + end) + + if #specialKingdomPlayers > 0 then + local choiceMap = {} + for _, p in ipairs(specialKingdomPlayers) do + local allKingdoms = {} + if p.kingdom == "god" then + allKingdoms = table.simpleClone(Fk.kingdoms) + + local exceptedKingdoms = { "god" } + for _, kingdom in ipairs(exceptedKingdoms) do + table.removeOne(allKingdoms, kingdom) + end + else + local curGeneral = Fk.generals[p.general] + allKingdoms = { curGeneral.kingdom, curGeneral.subkingdom } + end + + choiceMap[p.id] = allKingdoms + + local data = json.encode({ allKingdoms, "AskForKingdom", "#ChooseInitialKingdom" }) + p.request_data = data + end + + room:notifyMoveFocus(players, "AskForKingdom") + room:doBroadcastRequest("AskForChoice", specialKingdomPlayers) + + for _, p in ipairs(specialKingdomPlayers) do + local kingdomChosen + if p.reply_ready then + kingdomChosen = p.client_reply + else + kingdomChosen = choiceMap[p.id][1] + end + + p.kingdom = kingdomChosen + room:notifyProperty(p, p, "kingdom") + end + end +end + -- Because packages are loaded before gamelogic.lua loaded -- so we can not directly create subclass of gamelogic in the top of lua local m_1v2_getLogic = function() @@ -228,13 +272,21 @@ local m_1v2_getLogic = function() for _, p in ipairs(nonlord) do if p.general == "" and p.reply_ready then local general = json.decode(p.client_reply)[1] - room:setPlayerGeneral(p, general, true) + room:setPlayerGeneral(p, general, true, true) else - room:setPlayerGeneral(p, p.default_reply, true) + room:setPlayerGeneral(p, p.default_reply, true, true) end - room:broadcastProperty(p, "general") p.default_reply = "" end + + askForChooseKingdom(room, nonlord) + + for _, p in ipairs(nonlord) do + room:broadcastProperty(p, "general") + if p.role == "lord" then + room:broadcastProperty(p, "kingdom") + end + end end return m_1v2_logic @@ -398,12 +450,14 @@ local m_2v2_getLogic = function() for _, p in ipairs(nonlord) do if p.general == "" and p.reply_ready then local general = json.decode(p.client_reply)[1] - room:setPlayerGeneral(p, general, true) + room:setPlayerGeneral(p, general, true, true) else - room:setPlayerGeneral(p, p.default_reply, true) + room:setPlayerGeneral(p, p.default_reply, true, true) end p.default_reply = "" end + + askForChooseKingdom(room, nonlord) end return m_2v2_logic