尝试在Lua中将一个原始文件中的值与另一个原始文件中的值匹配。

首先:我是一个没有经验的程序员,刚开始阅读 PiL。我只知道一两件事,但我很快就能学会和理解。这种方法真的很不必要,但我想给自己一些困难,以便学到更多。

好的,为了测试和更好地了解这种语言,我试图从两个不同的文件中取出两个不同的值,并将它们存储在表格中

local gamemap = file.Read("addons/easymap/data/maplist.txt", "GAME")
local mapname = string.Explode( ",", gamemap )
local mapid = file.Read("addons/easymap/data/mapid.txt", "GAME")
local id = string.Explode( ",", mapid )

我正在获取两个值,最后是mapnameid

一旦我有了它们,我知道使用

for k, v in pairs(mapname)

它将为从文件获取的数据提供特定的值,或者至少分配它们。

但是我需要使用两个表格的方法是,如果服务器中有某个地图,请检查表格中的值,除非地图名称为空,然后一旦有名称,获取该地图的值并将其匹配与另一个文件的id。

例如,我在maplist.txt文件中有gm_construct,它是第一个条目[1],并且对应的id在mapid.txt中,假设它是54321,也是第一个条目[1]

但现在我必须使用game.GetMap函数检查服务器的当前地图,我已经解决了这个问题,我获取当前地图,将其与mapname表格匹配,然后检查其在id表格中的相应值,这将是gm_construct = 1

例如,它会像这样:

local mapdl = game.GetMap()
local match = mapname[mapdl]

if( match != nil )then --supposing the match isn't nil and it is in the table
    --grab its table value, lets say it is 1 and match it with the one in the id table

这是http://pastebin.com/3652J8Pv的更复杂版本

我知道这是不必要的,但执行此脚本将为我提供更多扩展脚本的选项。

TL;DR:我需要找到一个函数,让我匹配来自不同表格和文件的两个值,但最终它们以相同的顺序([1] = [1])出现在两个文件中。或者从另一个文件获取完整的表。我不知道表格是否可以全局加载,然后被另一个文件抓住以在该文件中使用它。

如果我问太多,我很抱歉,但是在我所在的地方,如果您想学习编程,您必须自己学习,没有学校有课程或任何类似的东西,至少在大学之前没有,我离完成高中还很远。

编辑:这是用于 Garry's mod,string.Explode在这里解释:http://wiki.garrysmod.com/page/string/Explode

它基本上通过指定的字符(在此情况下为逗号)分隔短语。

点赞
用户4273199
用户4273199

好的。如果我理解正确...你有两个文件,其中一个是地图名称:

gm_construct,
gm_flatgrass,
de_dust2,
ttt_waterworld

另一个是ID、数字或与地图名称文件中相同的位置相关的内容:

1258,
8592,
1354,
2589

现在你想要找到当前地图的ID,是吗?

以下是你的函数:

local function GetCurrentMapID()
  -- 获取当前地图
  local cur_map = game.GetMap()

  -- 读取文件并分割它们
  local mapListRaw = file.Read("addons/easymap/data/maplist.txt", "GAME")
  local mapList= string.Explode(",", mapListRaw)
  local mapIDsRaw = file.Read("addons/easymap/data/mapid.txt", "GAME")
  local mapIDs = string.Explode(",", mapIDsRaw)

  -- 遍历整个地图列表
  for k, v in pairs(mapList) do
    -- 直到找到当前地图
    if (v == cur_map) then
      -- 然后返回位于相同键(k)的mapIDs中的值
      return mapIDs[k]
    end
  end
  -- 如果当前地图不在Maplist中,则会抛出一个不可中断的错误
  ErrorNoHalt( "当前地图未在地图列表中注册!\n" )
end

该代码可能存在错误,因为我无法测试它。如果有错误,请在评论中指出。

来源:我的经验和GMod Wiki

2015-06-22 18:35:36