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

时间:2015-01-26 00:48:37

标签: lua garrys-mod

首先:我是一个没有经验的编码员,刚开始阅读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 )

我抓了两个值,最后是mapname和id

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

for k, v in pairs(mapname)

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

但我需要对这两个表做的是,如果服务器中有某个地图,检查表中的值,除非地图名称为nil,然后一旦有名称,抓取该地图的值并将其与其他文件的id匹配。

例如,我在maplist.txt文件中有gm_construct,它是第一个条目[1],它在mapid.txt中的相应id可以说是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的mod。 string.Explode在这里解释:http://wiki.garrysmod.com/page/string/Explode

它基本上用指定的字符分隔短语,在本例中为逗号。

1 个答案:

答案 0 :(得分:0)

好。如果我理解正确...你有2个数据文件。

一个有地图名称

gm_construct,
gm_flatgrass,
de_dust2,
ttt_waterworld

其中一个有ID,Numbers,Whataver(与地图名称文件中相同位置的条目相关

1258,
8592,
1354,
2589

现在你想找到当前地图的ID,对吧?

这是你的功能

local function GetCurrentMapID()
  -- Get the current map
  local cur_map = game.GetMap()

  -- Read the Files and Split them
  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)

  -- Iterate over the whole map list
  for k, v in pairs(mapList) do
    -- Until you find the current map
    if (v == cur_map) then
      -- then return the value from mapIDs which is located at the same key (k)
      return mapIDs[k]
    end
  end
  -- Throw a non-breaking error if the current map is not in the Maplist
  ErrorNoHalt( "Current map is not registered in the Maplist!\n" )
end

代码可能有错误,因为我无法测试它。请注释错误,如果是这样。

资料来源:我的经历和GMod Wiki