Thalassicus
Bytes and Nibblers
I've got this algorithm:
Some output:
How is it possible to not reset the current value? Here's the full text:
PHP:
local milRewardCurrent = (LoadPlayer(player, "milRewardCurrent") or 0) + 1
log:Error("%25s %15s current=%i threshold=%i", "GiveMilitaristicRewards", player:GetName(), milRewardCurrent, milRewardThreshold)
if milRewardCurrent >= milRewardThreshold then
milRewardCurrent = milRewardCurrent - milRewardThreshold
-- give a free unit (no more interaction with the milReward variables)
end
SavePlayer(player, "milRewardCurrent", milRewardCurrent)
PHP:
function LoadPlayer(player, key)
return saveDB.GetValue(string.format("%s_player%s_%s", MOD_ID, player:GetID(), key))
end
function SavePlayer(player, key, value)
return saveDB.SetValue(string.format("%s_player%s_%s", MOD_ID, player:GetID(), key), value)
end
Code:
ERROR GiveMilitaristicRewards Montezuma current=11 threshold=10
(free unit)
ERROR GiveMilitaristicRewards Montezuma current=11 threshold=10
(free unit)
Spoiler :
PHP:
local milRewardThreshold = UnofficialPatch.MINOR_CIV_MILITARISTIC_BASE_TURNS / rateMod
milRewardThreshold = milRewardThreshold * GameInfo.GameSpeeds[Game.GetGameSpeedType()].TrainPercent / 100
local milRewardCurrent = (LoadPlayer(player, "milRewardCurrent") or 0) + 1
log:Error("%25s %15s current=%i threshold=%i new=%i", "GiveMilitaristicRewards", player:GetName(), milRewardCurrent, milRewardThreshold, milRewardCurrent - milRewardThreshold)
if milRewardCurrent >= milRewardThreshold then
milRewardCurrent = milRewardCurrent - milRewardThreshold
local availableIDs = GetAvailableUnitIDs(capitalCity)
local newUnitID = availableIDs[1 + Map.Rand(#availableIDs, "InitUnitFromList")]
local capitalPlot = capitalCity:Plot()
local xp = GetCitystateYields(player, MinorCivTraitTypes.MINOR_CIV_TRAIT_MILITARISTIC, 2)[YieldTypes.YIELD_EXPERIENCE].Total
if GameInfo.Units[newUnitID].Domain ~= "DOMAIN_LAND" then
xp = xp * UnofficialPatch.MINOR_CIV_MILITARISTIC_XP_NONLAND_PENALTY
end
log:Debug(" Reward=%s XP=%s", GameInfo.Units[newUnitID].Type, xp)
local newUnit = M_InitUnit(player, newUnitID, capitalPlot, xp)
local promotion = GetTrait(player).MilitaristicCSFreePromotion
if promotion then
newUnit:SetHasPromotion(GameInfo.UnitPromotions[promotion].ID, true)
end
local newUnitInfo = GameInfo.Units[newUnitID]
if Game.GetActivePlayer() == player:GetID() then
local newUnitIcon = {{"Unit1", newUnitID, 0, 0, 0}}
local newUnitName = Locale.ConvertTextKey(newUnitInfo.Description)
CustomNotification(
"RewardMilitaristic",
"New "..newUnitName,
"A new "..newUnitName.." arrived in your [ICON_CAPITAL] Capital from your militaristic [ICON_CITY_STATE] City-State allies.",
capitalPlot,
0,
0,
newUnitIcon
)
end
end
SavePlayer(player, "milRewardCurrent", milRewardCurrent)