Module:CryptogullJr

From Caves of Qud Wiki
Revision as of 01:50, 7 August 2023 by Teamtoto (talk | contribs)
Jump to navigation Jump to search

local zlib = mw.ext.zlib
local utilTable = require('Module:Table Utility')
local data = require('Module:CryptogullJr/Data')
local p = {}

function p.main(frame)
	local frame = mw.getCurrentFrame()
	if frame.args ~= nil and frame.args ~= '' then
		-- argument in template call has to be named so the equal sign doesn't
		-- break input
		local code = frame.args["code"]
		local title = frame.args["title"]
		local author = frame.args["author"]
		if frame.args["code"]~= nil and frame.args["code"] ~= '' then
			return p.decode(mw.text.trim(frame:preprocess(frame.args["code"])), title, author)
		else
    		error "There was no code in your input!"
		end
	end
	
end

function p.decode(code, title, author)
	local frame = mw.getCurrentFrame()
	local decoded = mw.text.jsonDecode(zlib.gzdecode(zlib.base64_decode(code)))
	
	local version = decoded["gameversion"]
	local genotype = decoded["modules"][1]["data"]["Genotype"]
	local classCalled = "Calling"
	local extCalled = "Mutations"
	local subtype = decoded["modules"][2]["data"]["Subtype"]
	local baseStat = 10
	local stats = {
		["Strength"] = 0,
		["Intelligence"] = 0,
		["Toughness"] = 0,
		["Willpower"] = 0,
		["Ego"] = 0,
		["Agility"] = 0}
	local bonusInt = {}
	local exts = {}
	local bonus = {
		["Strength"] = "",
		["Intelligence"] = "",
		["Toughness"] = "",
		["Willpower"] = "",
		["Ego"] = "",
		["Agility"] = ""
	}
	
	if genotype == "True Kin" then
		-- if true kin, stats are [3] and cybernetics are [4]
		classCalled= "Caste"
		extCalled = "Cybernetics"
		statPos = 3
		extPos = 4
		extNoun = 'Cybernetic'
		baseStat = 12
	else
		-- if mutant, stats are [4] and mutations are [3] :crungled:
		statPos=4
		extPos=3
		extNoun='Mutation'
	end
	mw.logObject(decoded["modules"][4]["data"]["selections"])
	stats = decoded["modules"][statPos]["data"]["PointsPurchased"]
	-- No cybernetics means extra toughness
	if extPos == 4 and #decoded["modules"][4]["data"]["selections"] == 0 then
			exts[1] = "No Cybernetic"
	else 
		for i, v in ipairs(decoded["modules"][extPos]["data"]["selections"]) do
			exts[i] = v[extNoun]
			if v["variantName"] ~= "" and v["variantName"] ~= nil then
				exts[i] = exts[i] .. " (" .. v["variantName"] .. ")"
			end
			if data.isDefect(v[extNoun]) then
				exts[i] = exts[i] .. " (<span style=\"color:#a64a2e\">D</span>)"
			end
			if v["Count"] > 1 then
				exts[i] = exts[i] .. " <small>x</small>" .. v["Count"]
			end
		end
	end
	
	-- add 10 (or 12) to stats chosen...
	for statName, statValue in pairs(stats) do
		stats[statName] = stats[statName] + baseStat
	end

	--[Add stat bonuses from subtype and mutations/cybernetics.

	local bonusInt= data.getTotalStatBonuses(subtype, exts)
	for name, num in pairs(bonusInt) do
		stats[name] = stats[name] + num
	end
	
	local skills = data.getSkills(subtype)
	local extra = data.getExtra(subtype)
	return p.MakeUpSheet(code, genotype, subtype, classCalled, extCalled,
						stats, bonus, exts, skills, extra, title, author, frame)
end

function p.MakeUpSheet(codeIn, genoIn, subtype, classcalledIn, extnameIn,
				attributes, bonus, exts, skills, extra, title, author, frame)
    return frame:expandTemplate {
        title = 'Crypto result',
        args = {
            code = codeIn,
            genotype = genoIn,
            classcalled = classcalledIn,
            class = subtype,
            strength = tostring(attributes["Strength"]),
            agility = tostring(attributes["Agility"]),
            toughness = attributes["Toughness"],
            intelligence = attributes["Intelligence"],
            willpower = attributes["Willpower"],
            ego = attributes["Ego"],
            extname = extnameIn,
            skills= skills,
            exts = utilTable.concat(exts, "</br>"),
            extra=extra,
            buildname=title,
            author=author
        }
    }
end

function p.test()
	return p.decode("H4sIAAAAAAAACs1UUWvbMBB+L/Q/CLNHxyTd2LpCHjJvbF07yJrQFUofZPtqiymSkU7bTPF/38luazuGZR2sJBBs3/fd3adPx90dHjAW5HwDP8BYoVVwwoKjaBodTV9Fb4+DsMETJ2TWI8yIML3HNjpzEiyFr/03Y3ft4xFaVyX4pKuL8yguuOEpgnnnK9roq8v8/yMojUT70iSEbGEtbBJZTeIVJZQhu2x7zztlIYudRGdgrsCh4TJkS5dIkZ5BtdbfQc2Vk7LV2IjJOHKS8aiOQi/wqdLeU5GRvK4J1Xzg+7Jr44CdCTUgjGx8wOr2pQ7/2caVS/bUxYGy3Sbe033RuKA6TN8yLIB9Am6weC47F4hGJA7B7qGj2+J2m7rUQqFdOpMW3EI27OlNRwMqJ3tP2JtwgCxyIQVWBLweAmvt8kKBtWPoVCFIKXJQKYzRb0LKUv8EM4Y+5NoHu1jdPwQvVyUoJMbk5fEQuIANF0qonMBpH0rouIuSosOM/zg5cZWAUYAi3cfRGanbPTvS2zeZ9UMWJKRIJ+it/vY3GCtidv28sFN1K6lfImHxyyeH22ztmvudbQOX3AjeQAHtgSzow3X3cfNcd1xobWGFtJFo5s51yr0Z+3jdfxD6F6t4K883+6zLkj9tC/vHzeFB/RuIECz1cAgAAA==")
end
return p