Module:Infobox spawn command section/sandbox

local p = {}

function copyClipboard( contents ) return ' ' .. contents .. ' ' end

function getExampleCommand( isEntity, identifier, short ) if isEntity then if short then return 'admincheat summon ' .. identifier end return 'admincheat SpawnDino 500 0 0 35' else if short then return 'admincheat gfi ' .. identifier .. ' 1 0 0'		end return 'admincheat giveitem 1 0 0' end end

function makeCommandSet (isEntity, blueprintPath, entityClassName, shortItemName) local commands = '' local canShowSummon = isEntity and entityClassName ~= nil local canShowGFI = not isEntity and shortItemName ~= nil -- Loose, short commands if canShowSummon then commands = copyClipboard(getExampleCommand(true, entityClassName, true)) elseif canShowGFI then commands = copyClipboard(getExampleCommand(false, shortItemName, true)) end -- "or" between the two forms if blueprintPath and (canShowSummon or canShowGFI) then commands = commands .. ' or ' end -- Strict, BP-reliant command if blueprintPath then commands = commands .. copyClipboard(getExampleCommand(isEntity, blueprintPath, false)) end return commands end

function p.spawnCommand( f ) local args = f.args local parentArgs = f:getParent.args

-- Infobox arguments local blueprintPath = parentArgs.blueprintpath or nil local entityClassName = parentArgs.entityId or nil local shortItemName = parentArgs.gfi or nil local isBaseClassIncomplete = parentArgs.incompleteBaseClass == 'yes' or parentArgs.incompleteData == 'yes' or false -- Check if type is specified if args.type == nil then return 'error: "type" has to be specified (creature or item) for spawn command section to be generated' end -- Trim blueprint path and short identifiers if blueprintpath ~= nil then blueprintpath = mw.text.trim(blueprintpath) end if entityClassName ~= nil then entityClassName = mw.text.trim(entityClassName) end if shortItemName ~= nil then shortItemName = mw.text.trim(shortItemName) end -- Own hardcoded arguments local isEntity = args.type == 'creature' local captionLinkTarget = args.linkTarget or '' local variantOrderList = args.variantOrder or '' -- Fill in info from variables set by Dv if creature if isEntity then if blueprintPath == nil or #blueprintPath == 0 then blueprintPath = f:preprocess('') end if entityClassName == nil or #entityClassName == 0 then entityClassName = f:preprocess('') end end -- Display flags local canShowSummon = isEntity and entityClassName ~= nil local canShowGFI = not isEntity and shortItemName ~= nil

-- Variable for generated commands text local commands = '' -- Main class if (not isBaseClassIncomplete) and (blueprintPath or entityId or shortItemName) then commands = makeCommandSet(isEntity, blueprintPath, entityClassName, shortItemName) end -- Initialize variants from variantOrderList local variants = {} local variantOrder = {} if variantOrderList ~= '' then for _, variantName in ipairs(mw.text.split(variantOrderList, ';')) do commands = commands .. 'new:' .. variantName .. '\n' if variants[variantName] == nil then variants[variantName] = {} table.insert(variantOrder, variantName) end end end -- Collect variants for argName, argValue in pairs(parentArgs) do		argName = mw.text.trim(argName) local variantName = nil local isBP = false -- Detect if this parameter is a BP/short ID		if mw.ustring.find(argName, 'blueprintpath ', 0, true) == 1 then variantName = mw.ustring.sub(argName, 14) isBP = true elseif isEntity and mw.ustring.find(argName, 'entityId ', 0, true) == 1 then variantName = mw.ustring.sub(argName, 9) elseif (not isEntity) and mw.ustring.find(argName, 'gfi ', 0, true) == 1 then variantName = mw.ustring.sub(argName, 4) end -- Save the value. if variantName ~= nil then variantName = mw.text.trim(variantName) if #variantName > 0 then if variants[variantName] == nil then variants[variantName] = {} table.insert(variantOrder, variantName) end if isBP then variants[variantName]['bp'] = mw.text.trim(argValue) else variants[variantName]['short'] = mw.text.trim(argValue) end end end end -- Generate commands for variants for _, variantName in ipairs(variantOrder) do commands = commands .. 'add:' .. variantName .. '\n' local spawnInfo = variants[variantName] if spawnInfo['bp'] or spawnInfo['short'] then commands = commands .. ' Variant ' .. variantName .. ' '			commands = commands .. makeCommandSet(isEntity, spawnInfo['bp'], spawnInfo['short'], spawnInfo['short']) end end

-- Return nothing if no command was generated if not commands then return '' end local out = ' ' .. ' '				  .. ' '				      .. ' ' .. "Spawn Command" .. '' .. commands .. ' '				     .. ' '				   .. ' '				.. ' '			 .. ' '	return f:preprocess(out) end

return p