From 726602873e5ee664bf93979467b83be6f8d83d0f Mon Sep 17 00:00:00 2001 From: notify Date: Tue, 27 Feb 2024 16:33:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=AD=A6=E5=B0=86=E7=89=8C?= =?UTF-8?q?=E5=A0=86=E5=9B=9E=E6=B5=81=20(role=20mode=E4=B8=8B)=20(#325)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 18 ++++-------------- lua/server/room.lua | 11 ++++++++--- packages/standard/init.lua | 30 ++++++++++-------------------- 3 files changed, 22 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index 4ab0d5d0..040e914f 100644 --- a/README.md +++ b/README.md @@ -14,21 +14,11 @@ ___ 新月杀(FreeKill)是一款开源的三国杀游戏,但其目的不在于补完官方所有武将,而是着力于提供一个最适合DIY的框架。 +___ + ## 项目文档 -[新月杀文档](https://qsgs-fans.github.io/FreeKill/usr/index.html) - -### 依赖的库 - -以下是新月杀运行所必不可少的依赖库: - -* [![](https://img.shields.io/badge/qt6-50D160?style=for-the-badge&logo=qt&logoColor=white)](https://www.qt.io) -* [![](https://img.shields.io/badge/lua5.4-030380?style=for-the-badge&logo=lua)](https://www.lua.org) -* [![](https://img.shields.io/badge/sqlite3-7ABEEA?style=for-the-badge&logo=sqlite)](https://www.sqlite.org) -* [![](https://img.shields.io/badge/libgit2-FFFFFF?style=for-the-badge&logo=git)](https://www.libgit2.org) -* [![](https://img.shields.io/badge/openssl-721412?style=for-the-badge&logo=openssl)](https://www.openssl.org) - -新月杀在编译过程中,需要用到cmake, flex, bison, swig。 +https://fkbook-all-in-one.readthedocs.io/ ___ @@ -46,7 +36,7 @@ ___ ## 如何构建 -关于如何从头构建新月杀,详见[编译教程](https://qsgs-fans.github.io/FreeKill/inner/01-compile.html)。 +https://fkbook-all-in-one.readthedocs.io/zh-cn/latest/develop/02-env.html ___ diff --git a/lua/server/room.lua b/lua/server/room.lua index 68b32a3d..5f6b9688 100644 --- a/lua/server/room.lua +++ b/lua/server/room.lua @@ -1508,17 +1508,22 @@ end --- 把武将牌塞回去(……) ---@param g string[] @ 武将名数组 ----@param position? string @位置,top/bottom,默认bottom +---@param position? string @位置,top/bottom/random,默认random ---@return boolean @ 是否成功 function Room:returnToGeneralPile(g, position) - position = position or "bottom" - assert(position == "top" or position == "bottom") + position = position or "random" + assert(position == "top" or position == "bottom" or position == "random") if position == "bottom" then table.insertTable(self.general_pile, g) elseif position == "top" then while #g > 0 do table.insert(self.general_pile, 1, table.remove(g)) end + elseif position == "random" then + while #g > 0 do + table.insert(self.general_pile, math.random(1, #self.general_pile), + table.remove(g)) + end end return true diff --git a/packages/standard/init.lua b/packages/standard/init.lua index 16670af7..2b5fbaba 100644 --- a/packages/standard/init.lua +++ b/packages/standard/init.lua @@ -1132,17 +1132,12 @@ local role_getlogic = function() lord_general = lord_generals lord_generals = {lord_general} end + generals = table.filter(generals, function(g) + return not table.find(lord_generals, function(lg) + return Fk.generals[lg].trueName == Fk.generals[g].trueName + end) + end) room:returnToGeneralPile(generals) - local index = 1 - while index <= #room.general_pile do - local ret = {} - for _, gname in ipairs(lord_generals) do - if room.general_pile[index] == gname or Fk.generals[room.general_pile[index]].trueName == Fk.generals[gname].trueName then - table.insert(ret, table.remove(room.general_pile, index)) - end - end - if #ret == 0 then index = index + 1 end - end room:setPlayerGeneral(lord, lord_general, true) room:askForChooseKingdom({lord}) @@ -1231,17 +1226,12 @@ local role_getlogic = function() p.default_reply = "" end + generals = table.filter(generals, function(g) + return not table.find(selected, function(lg) + return Fk.generals[lg].trueName == Fk.generals[g].trueName + end) + end) room:returnToGeneralPile(generals) - local index = 1 - while index <= #room.general_pile do - local ret = {} - for _, gname in ipairs(selected) do - if room.general_pile[index] == gname or Fk.generals[room.general_pile[index]].trueName == Fk.generals[gname].trueName then - table.insert(ret, table.remove(room.general_pile, index)) - end - end - if #ret == 0 then index = index + 1 end - end room:askForChooseKingdom(nonlord) end