⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 actions.lua

📁 这是整套横扫千军3D版游戏的源码
💻 LUA
字号:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------  file:    actions--  brief:   hooks for GotChatMsg() and RecvFromSynced() calls--  author:  Dave Rodgers----  Copyright (C) 2007.--  Licensed under the terms of the GNU GPL, v2 or later.------------------------------------------------------------------------------------------------------------------------------------------------------------------if (actionHandler) then  return actionHandlerend--------------------------------------------------------------------------------local chatActions = {}local syncActions = {}----------------------------------------------------------------------------------------------------------------------------------------------------------------local isSyncedCode = (SendToUnsynced ~= nil)local function MakeWords(line)  local words = {}  for w in string.gfind(line, "[^%s]+") do    table.insert(words, w)  end     return wordsend            --------------------------------------------------------------------------------------------------------------------------------------------------------------------  Insertions--local function InsertCallInfo(callInfoList, gadget, func, help)  local layer = gadget.ghInfo.layer  local index = 1  for i,ci in ipairs(callInfoList) do    local g = ci[1]    if (g == gadget) then      return false  --  already in the table    end    if (layer >= g.ghInfo.layer) then      index = i + 1    end  end  table.insert(callInfoList, index, { func, gadget, help = help })  return trueendlocal function InsertAction(map, gadget, cmd, func, help)  local callInfoList = map[cmd]  if (callInfoList == nil) then    callInfoList = {}    map[cmd] = callInfoList  end  return InsertCallInfo(callInfoList, gadget, func, help)end--------------------------------------------------------------------------------------------------------------------------------------------------------------------  Removals--local function RemoveCallInfo(callInfoList, gadget)  local count = 0  for i,callInfo in ipairs(callInfoList) do    local g = callInfo[1]    if (g == gadget) then      table.remove(callInfoList, i)      count = count + 1      -- break    end  end  return countendlocal function RemoveAction(map, gadget, cmd)  local callInfoList = map[cmd]  if (callInfoList == nil) then    return false  end  local count = RemoveCallInfo(callInfoList, gadget)  if (#callInfoList <= 0) then    map[cmd] = nil  end  return (count > 0)endlocal function RemoveGadgetActions(gadget)  local function clearActionList(actionMap)    for cmd, callInfoList in pairs(actionMap) do      RemoveCallInfo(callInfoList, gadget)    end  end  clearActionList(chatActions)  clearActionList(syncActions)end--------------------------------------------------------------------------------------------------------------------------------------------------------------------  Add / Remove Chat Action--local function AddChatAction(gadget, cmd, func, help)  return InsertAction(chatActions, gadget, cmd, func, help)endlocal function RemoveChatAction(gadget, cmd)  return RemoveAction(chatActions, gadget, cmd)end--------------------------------------------------------------------------------------------------------------------------------------------------------------------  Add / Remove Sync Action--local function AddSyncAction(gadget, cmd, func, help)  return InsertAction(syncActions, gadget, cmd, func, help)endlocal function RemoveSyncAction(gadget, cmd)  return RemoveAction(syncActions, gadget, cmd)end----------------------------------------------------------------------------------------------------------------------------------------------------------------local function EchoLines(msg)  for line in string.gfind(msg, '([^\n]+)\n?') do    Spring.Echo(line)  endendlocal function Help(playerID, cmd)  if (cmd == nil) then    -- print the list of commands, alphabetically    local sorted = {}    for name in pairs(chatActions) do      table.insert(sorted, name)    end    table.sort(sorted)    local str = Script.GetName() .. ' commands: '    for _,name in ipairs(sorted) do      str = str .. '  ' .. name    end    Spring.Echo(str)    if (isSyncedCode) then      SendToUnsynced(playerID, "help")    end  else    local callInfoList = chatActions[cmd]    if (not callInfoList) then      if (not isSyncedCode) then        Spring.Echo('unknown command:  ' .. cmd)      end    else      for i,callInfo in ipairs(callInfoList) do        if (callInfo.help) then          EchoLines(cmd .. callInfo.help)          return        end      end    end    if (isSyncedCode) then      SendToUnsynced(playerID, "help " .. cmd)    end  endend----------------------------------------------------------------------------------------------------------------------------------------------------------------local function GotChatMsg(msg, playerID)  local words = MakeWords(msg)  local cmd = words[1]  if (cmd == nil) then    return false  end  local callInfoList = chatActions[cmd]  if (callInfoList == nil) then    if (cmd == 'help') then      Help(playerID, words[2])      return true    end    return false  end  -- remove the command from the words list and the raw line  table.remove(words, 1)  local _,_,msg = string.find(msg, "[%s]*[^%s]+[%s]+(.*)")  if (msg == nil) then    msg = ""  -- no args  end  for i,callInfo in ipairs(callInfoList) do    local func = callInfo[1]    -- local gadget = callInfo[2]    if (func(cmd, msg, words, playerID)) then      return true    end  end  return falseendlocal function RecvFromSynced(...)  if (type(arg[1]) == 'string') then    -- a raw sync msg    local callInfoList = syncActions[arg[1]]    if (callInfoList == nil) then      return false    end        for i,callInfo in ipairs(callInfoList) do      local func = callInfo[1]      -- local gadget = callInfo[2]      if (func(unpack(arg))) then        return true      end    end    return false  end  if (type(arg[1]) == 'number') then    -- a proxied chat msg    if (type(arg[2]) == 'string') then      return GotChatMsg(arg[2], arg[1])    end    return false  end    return false -- unknown typeend----------------------------------------------------------------------------------------------------------------------------------------------------------------local AH = {}actionHandler = AH  -- set the globalAH.GotChatMsg     = GotChatMsgAH.RecvFromSynced = RecvFromSyncedAH.AddChatAction    = AddChatActionAH.AddSyncAction    = AddSyncActionAH.RemoveChatAction = RemoveChatActionAH.RemoveSyncAction = RemoveSyncActionAH.RemoveGadgetActions = RemoveGadgetActionsAH.HaveChatAction = function() return (next(chatActions) ~= nil) endAH.HaveSyncAction = function() return (next(syncActions) ~= nil) endreturn AH----------------------------------------------------------------------------------------------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -