Valkrionn
The Hamster King
Might be better for you to actually see the script; It's not a complex one, nor does it need to be. Just a counter that is used to trigger a period of anarchy; Golden Ages are simple, Dark Ages should be too.
My original save/load mechanism is still there, but commented out. Worked perfectly well, but not compatible with any other mod saving data.
Spoiler :
Code:
include( "Math" );
include( "SaveUtils" ); MY_MOD_NAME = "DarkAges--vmdy.02.11.25.2010";
DebugMode = true
-- Implement Dark Ages from extended periods of unhappiness
function DarkAges()
local pPlayer = Players[ Game.GetActivePlayer() ];
local availableHappiness = pPlayer:GetExcessHappiness(); -- Get the player's happiness
local goldenAgeMeter = pPlayer:GetGoldenAgeProgressMeter(); -- Get Golden Age progress
-- Load script data, initialize Dark Age variables
--[[ local scriptData = pPlayer:GetScriptData();
local darkAgeProgress;
local darkAgeThreshold;
local darkAgeTurns;
if (tonumber(scriptData) ~= nil) then
scriptData = tonumber(scriptData);
darkAgeProgress = scriptData % 10000;
darkAgeThreshold = math.floor((scriptData % 100000000) / 10000);
darkAgeTurns = math.floor(scriptData / 100000000)
else
scriptData = 0;
darkAgeProgress = 0;
darkAgeThreshold = 500;
darkAgeTurns = 0;
end --]]
local darkAgeProgress = load( pPlayer, "DarkAgeProgress" ) or {0};
local darkAgeThreshold = load( pPlayer, "DarkAgeThreshold" ) or {500};
local darkAgeTurns = load( pPlayer, "DarkAgeTurns" ) or {0};
print( darkAgeProgress, darkAgeThreshold, darkAgeTurns );
-- Check happiness and golden age; If golden age meter < 0 AND happiness < 0, increment Dark Age Meter
if (darkAgeTurns == 0) then
if (availableHappiness < 0) then
if (goldenAgeMeter + availableHappiness < 0) then
darkAgeProgress = darkAgeProgress + math.abs(goldenAgeMeter + availableHappiness);
print( "Dark Age Progress: "..darkAgeProgress );
end
elseif (darkAgeProgress > 0) then
darkAgeProgress = darkAgeProgress - availableHappiness;
if (darkAgeProgress < 0) then
pPlayer:SetGoldenAgeProgressMeter(0 - darkAgeProgress);
darkAgeProgress = 0;
else
pPlayer:SetGoldenAgeProgressMeter(0);
end
end
end
-- If in Dark Age, decrement the number of turns. Do this BEFORE starting a Dark Age!
if (darkAgeTurns > 0) then
darkAgeTurns = darkAgeTurns - 1;
end
-- If Progress >= Threshold, start a Dark Age, and reset/modify Dark Age variables.
if (darkAgeProgress >= darkAgeThreshold) then
darkAgeProgress = darkAgeProgress - darkAgeThreshold;
darkAgeTurns = darkAgeTurns + 10;
if (darkAgeThreshold > 50) then
if (darkAgeThreshold - 50 >= 50) then
darkAgeThreshold = darkAgeThreshold - 50;
else
darkAgeThreshold = 50;
end
end
print( "Dark Age Began! Dark Age Turns: "..darkAgeTurns..", Dark Age Threshold: "..darkAgeThreshold );
doDarkAge(pPlayer, darkAgeTurns);
end
-- Store all Dark Age variables from turn to turn. AFAIK, only allowed one scriptdata... So values must be combined into a single int for storage
save( pPlayer, "DarkAgeProgress", darkAgeProgress );
save( pPlayer, "DarkAgeThreshold", darkAgeThreshold );
save( pPlayer, "DarkAgeTurns", darkAgeTurns );
--[[scriptData = (darkAgeTurns * 100000000) + (darkAgeThreshold * 10000) + darkAgeProgress;
pPlayer:SetScriptData(scriptData);]]
end
-- Start the Dark Age (Anarchy)
function doDarkAge(pPlayer, darkAgeTurns)
if (not pPlayer) then
return;
end
pPlayer:SetAnarchyNumTurns(darkAgeTurns);
end
Events.ActivePlayerTurnStart.Add(DarkAges);
My original save/load mechanism is still there, but commented out. Worked perfectly well, but not compatible with any other mod saving data.