<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.runerealm.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AScaledExperience</id>
	<title>Module:ScaledExperience - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.runerealm.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AScaledExperience"/>
	<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:ScaledExperience&amp;action=history"/>
	<updated>2026-06-15T18:37:16Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://wiki.runerealm.org/index.php?title=Module:ScaledExperience&amp;diff=34198&amp;oldid=prev</id>
		<title>Alex: Created page with &quot;local Experience = require( &#039;Module:Experience&#039; )  local p = {}  -- Determine the XP an action gives at a given level function p.action_xp_at_level(level, scalar, base, intercept) 	return base+(math.max(level-intercept,0)*scalar) end  function p.xp_to_xp_actions(startingExp, targetExp, scalar, base, intercept) 	-- Accumulated exp starts off at whatever amount of exp the player has 	local accExp = startingExp 	local accActions = 0  	-- Since the amount of exp depends on t...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:ScaledExperience&amp;diff=34198&amp;oldid=prev"/>
		<updated>2024-10-15T23:26:13Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local Experience = require( &amp;#039;Module:Experience&amp;#039; )  local p = {}  -- Determine the XP an action gives at a given level function p.action_xp_at_level(level, scalar, base, intercept) 	return base+(math.max(level-intercept,0)*scalar) end  function p.xp_to_xp_actions(startingExp, targetExp, scalar, base, intercept) 	-- Accumulated exp starts off at whatever amount of exp the player has 	local accExp = startingExp 	local accActions = 0  	-- Since the amount of exp depends on t...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local Experience = require( &amp;#039;Module:Experience&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Determine the XP an action gives at a given level&lt;br /&gt;
function p.action_xp_at_level(level, scalar, base, intercept)&lt;br /&gt;
	return base+(math.max(level-intercept,0)*scalar)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.xp_to_xp_actions(startingExp, targetExp, scalar, base, intercept)&lt;br /&gt;
	-- Accumulated exp starts off at whatever amount of exp the player has&lt;br /&gt;
	local accExp = startingExp&lt;br /&gt;
	local accActions = 0&lt;br /&gt;
&lt;br /&gt;
	-- Since the amount of exp depends on the current level and the amount of starting xp&lt;br /&gt;
	-- is variable, each level needs to be checked.&lt;br /&gt;
	while accExp &amp;lt; targetExp do&lt;br /&gt;
		local currentLevel = Experience.level_at_xp({ args = { accExp } })&lt;br /&gt;
&lt;br /&gt;
		-- Need to handle the case when you are already level 99, xp_to_level fails&lt;br /&gt;
		-- if attempting to get xp to level &amp;gt; 99&lt;br /&gt;
		local expToNext = 0&lt;br /&gt;
		if currentLevel ~= 99 then&lt;br /&gt;
			expToNext = Experience.xp_to_level({ args = { accExp, currentLevel+1 } })&lt;br /&gt;
		else&lt;br /&gt;
			expToNext = 200000000 - accExp&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		expToNext = math.min(expToNext, targetExp-accExp)&lt;br /&gt;
&lt;br /&gt;
		local actionsToNext = math.ceil(expToNext/p.action_xp_at_level(currentLevel, scalar, base or 0, intercept or 0))&lt;br /&gt;
&lt;br /&gt;
		accExp = accExp + actionsToNext*p.action_xp_at_level(currentLevel, scalar, base or 0, intercept or 0)&lt;br /&gt;
		accActions = accActions + actionsToNext&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	accExp = math.min(accExp, 200000000)&lt;br /&gt;
&lt;br /&gt;
	local results = {&lt;br /&gt;
		endExp = accExp,&lt;br /&gt;
		endActions = accActions,&lt;br /&gt;
		endLevel = Experience.level_at_xp({ args = { accExp } }),&lt;br /&gt;
		startingExp = startingExp,&lt;br /&gt;
		startingLevel = Experience.level_at_xp({ args = {startingExp} })&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return results&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.xp_to_level_actions(startingExp, targetLevel, scalar, base, intercept)&lt;br /&gt;
	return p.xp_to_xp_actions(startingExp, Experience.xp_at_level({ args = {targetLevel}}), scalar, base or 0, intercept or 0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.level_to_xp_actions(startingLevel, targetExp, scalar, base, intercept)&lt;br /&gt;
	return p.xp_to_xp_actions( Experience.xp_at_level({ args = {startingLevel}}), targetExp, scalar, base or 0, intercept or 0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.level_to_level_actions(startingLevel, targetLevel, scalar)&lt;br /&gt;
	return p.xp_to_xp_actions( Experience.xp_at_level({ args = {startingLevel}}), Experience.xp_at_level({ args = {targetLevel}}), scalar, base or 0, intercept or 0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.from_actions_xp(startingExp, actions, scalar, base, intercept)&lt;br /&gt;
	-- Accumulated exp starts off at whatever amount of exp the player has&lt;br /&gt;
	local accExp = startingExp&lt;br /&gt;
	local actionsLeft = actions&lt;br /&gt;
&lt;br /&gt;
	-- Since the amount of exp depends on the current level and the amount of starting xp&lt;br /&gt;
	-- is variable, each level needs to be checked.&lt;br /&gt;
	while actionsLeft &amp;gt; 0 do&lt;br /&gt;
		local currentLevel = Experience.level_at_xp({ args = { accExp } })&lt;br /&gt;
&lt;br /&gt;
		-- Need to handle the case when you are already level 99, xp_to_level fails&lt;br /&gt;
		-- if attempting to get xp to level &amp;gt; 99&lt;br /&gt;
		local expToNext = 0&lt;br /&gt;
		if currentLevel ~= 99 then&lt;br /&gt;
			expToNext = Experience.xp_to_level({ args = { accExp, currentLevel+1 } })&lt;br /&gt;
		else&lt;br /&gt;
			expToNext = 200000000 - accExp&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local actionsToNext = math.ceil(expToNext/p.action_xp_at_level(currentLevel, scalar, base or 0, intercept or 0))&lt;br /&gt;
		&lt;br /&gt;
		if (actionsToNext &amp;lt;= actionsLeft) then&lt;br /&gt;
			accExp = accExp + actionsToNext*p.action_xp_at_level(currentLevel, scalar, base or 0, intercept or 0)&lt;br /&gt;
			actionsLeft = actionsLeft - actionsToNext&lt;br /&gt;
		else&lt;br /&gt;
			accExp = accExp + (actionsLeft*p.action_xp_at_level(currentLevel, scalar, base or 0, intercept or 0))&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	accExp = math.min(accExp, 200000000)&lt;br /&gt;
&lt;br /&gt;
	local results = {&lt;br /&gt;
		endExp = accExp,&lt;br /&gt;
		endLevel = Experience.level_at_xp({ args = { accExp } }),&lt;br /&gt;
		startingExp = startingExp,&lt;br /&gt;
		startingLevel = Experience.level_at_xp({ args = {startingExp} })&lt;br /&gt;
	}&lt;br /&gt;
	return results&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.from_actions_level(startingLevel, actions, scalar, base, intercept)&lt;br /&gt;
	return p.from_actions_xp(Experience.xp_at_level({ args = {startingLevel}}), actions, scalar, base or 0, intercept or 0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
</feed>