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

📄 share_control.lua

📁 这是整套横扫千军3D版游戏的源码
💻 LUA
字号:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------  file:    share_control.lua--  brief:   only allow sharing with allied teams--  author:  Dave Rodgers----  Copyright (C) 2007.--  Licensed under the terms of the GNU GPL, v2 or later.------------------------------------------------------------------------------------------------------------------------------------------------------------------function gadget:GetInfo()  return {    name      = "ShareControl",    desc      = "Controls sharing of units and resources",    author    = "trepan",    date      = "Apr 22, 2007",    license   = "GNU GPL, v2 or later",    layer     = -5,    enabled   = true  --  loaded by default?  }end----------------------------------------------------------------------------------------------------------------------------------------------------------------local resShare  = true  -- allow sharing resourceslocal unitShare = true  -- allow sharing unitslocal resShareEnemy  = false  -- allow sharing resources with enemieslocal unitShareEnemy = false  -- allow sharing units with enemies----  A team indexed list of the last frames that a unit transfer was blocked.--  This helps to avoid filling up the console with warnings when a user tries--  to share multiple units.----local lastRefusals = {}--------------------------------------------------------------------------------local function AllowAction(playerID)  if (playerID ~= 0) then    Spring.SendMessageToPlayer(playerID, "Must be the host player")    return false  end  if (not Spring.IsCheatingEnabled()) then    Spring.SendMessageToPlayer(playerID, "Cheating must be enabled")    return false  end  return trueendlocal function PrintState()  Spring.Echo('sharing units is '              .. (unitShare and 'enabled' or 'disabled'))  Spring.Echo('sharing resources is '              .. (resShare and 'enabled' or 'disabled'))  Spring.Echo('sharing units with enemies is '              .. (unitShare and unitShareEnemy and 'enabled' or 'disabled'))  Spring.Echo('sharing resources with enemies is '              .. (resShare and resShareEnemy and 'enabled' or 'disabled'))  return trueendlocal function ChatControl(cmd, line, words, playerID)  if (not AllowAction(playerID)) then    PrintState()    return true  end  local count = #words  if (count == 0) then    unitShare = not unitShare    resShare  = unitShare  elseif (count == 1) then    if ((words[1] == '0') or (words[1] == 'none')) then      resShare  = false      unitShare = false      resShareEnemy  = false      unitShareEnemy = false    elseif ((words[1] == '1') or (words[1] == 'ally')) then      resShare  = true      unitShare = true      resShareEnemy  = false      unitShareEnemy = false    elseif ((words[1] == '2') or (words[1] == 'full')) then      resShare  = true      unitShare = true      resShareEnemy  = true      unitShareEnemy = true    elseif (words[1] == 'r') then      resShare  = not resShare    elseif (words[1] == 'u') then      unitShare  = not unitShare    elseif (words[1] == 'e') then      resShareEnemy  = not resShareEnemy      unitShareEnemy = not unitShareEnemy    end  elseif (count == 2) then    if (words[1] == 'e') then      if (words[2] == '0') then        resShareEnemy  = false        unitShareEnemy = false      elseif (words[2] == '1') then        resShareEnemy  = true        unitShareEnemy = true      end    elseif (words[1] == 'r') then      if (words[2] == '0') then        resShare = false      elseif (words[2] == '1') then        resShare = true      elseif (words[2] == 'e') then        resShareEnemy = not resShareEnemy      end    elseif (words[1] == 'u') then      if (words[2] == '0') then        unitShare = false      elseif (words[2] == '1') then        unitShare = true      elseif (words[2] == 'e') then        unitShareEnemy = not unitShareEnemy      end    end  elseif (count == 3) then    if (words[1] == 'r') then      if (words[2] == 'e') then        if (words[3] == '0') then          resShareEnemy = false        elseif (words[3] == '1') then          resShareEnemy = true        end      end    elseif (words[1] == 'u') then      if (words[2] == 'e') then        if (words[3] == '0') then          unitShareEnemy = false        elseif (words[3] == '1') then          unitShareEnemy = true        end      end    end  end  PrintState()  return trueendfunction gadget:Initialize()  if (not gadgetHandler:IsSyncedCode()) then    gadgetHandler:RemoveGadget()    return  end  local cmd, help    cmd  = "sharectrl"  local h = ''  h = h..     ' [ "none" | "ally" | "full"]:  basic sharing modes\n'  h = h..cmd..' <"u"|"r"> ["e"] [0|1]:  finer sharing control\n'  h = h..'  u: unit sharing\n'  h = h..'  r: resource sharing\n'  h = h..'  e: enemy mode\n'  --  h = h..cmd..' [0|1]:  control unit and resource sharing\n'--  h = h..cmd..' res [0|1]:  control resource sharing\n'--  h = h..cmd..' unit [0|1]:  control unit sharing\n'--  h = h..cmd..' enemy [0|1]:  control enemy unit and resource sharing\n'--  h = h..cmd..' enemy res [0|1]:  control enemy resource sharing\n'  help = h  gadgetHandler:AddChatAction(cmd, ChatControl, help)  Script.AddActionFallback(cmd .. ' ', help)endfunction gadget:Shutdown()  gadgetHandler:RemoveChatAction("sharectrl", ChatControl)endfunction gadget:AllowResourceTransfer(oldTeam, newTeam, type, amount)  if (resShare) then    if (resShareEnemy or Spring.AreTeamsAllied(oldTeam, newTeam)) then      return true    else      Spring.SendMessageToTeam(oldTeam, "Can not give resources to enemies")    end  else    Spring.SendMessageToTeam(oldTeam, "Resource sharing has been disabled")  end  return falseendlocal function AddRefusal(team, msg)  local frameNum = Spring.GetGameFrame()  local lastRefusal = lastRefusals[team]  if ((not lastRefusal) or (lastRefusal ~= frameNum)) then    lastRefusals[team] = frameNum    Spring.SendMessageToTeam(team, msg)  endendfunction gadget:AllowUnitTransfer(unitID, unitDefID, oldTeam, newTeam, capture)  if (capture) then    return true  end  if (Spring.IsCheatingEnabled()) then    return true  end  if (not unitShare) then    AddRefusal(oldTeam, "Unit sharing has been disabled")    return false  end      if (unitShareEnemy or Spring.AreTeamsAllied(oldTeam, newTeam)) then    return true  end  AddRefusal(oldTeam, "Can not give units to enemies")  return falseend----------------------------------------------------------------------------------------------------------------------------------------------------------------

⌨️ 快捷键说明

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