SharingDiploModifier.lua

LastSword

Prince
Joined
Feb 24, 2013
Messages
1,129
The point is to use GetScenarioDiploModifier2 in several mods without conflict.
Code is dependent on SaveUtils.lua.

1. Installation:
Code:
WARN_NOT_SHARED = false; include( "SaveUtils" ); MY_MOD_NAME = "MyMod";
include("SharingDiploModifier")

2. Instant change of Diplo value:
Code:
ChangeDiploMod(aPlayerID (integer), bPlayerID (integer), value (integer))

3. Change of Diplo value delayed by 'delay' turns:
Code:
ChangeDiploMod(aPlayerID (integer), bPlayerID (integer), value (integer), delay (integer))

Spoiler code :
Code:
--SharingDiploModifier Version 4
local iteHelp = GameDefines.MAX_MAJOR_CIVS;
local barbP = GameDefines.MAX_CIV_PLAYERS;
local DiploT = {}

--
--
--
--
--

function LSGetSDM2(aPlayer, bPlayer)
	return DiploT["LS_SDM_CDM" .. aPlayer .."S".. bPlayer] or 0;
end

function LSUpdateSDM2(iPlayer)
	if barbP == iPlayer then
		local GT = Game.GetGameTurn() + 1;
		for i = 0, iteHelp - 2 do
			local sIteHelp = load(Players[i], "LS_SDM_MPT" .. GT);
			if sIteHelp ~= nil then
				for j = i + 1, sIteHelp do
					local TDM = load(Players[i], "LS_SDM_TC" .. j .. "T" .. GT)
					if TDM ~= nil then
						local CDM = DiploT["LS_SDM_CDM" .. i .."S".. j] or 0;
						DiploT["LS_SDM_CDM" .. i .."S".. j] = TDM + CDM;
						DiploT["LS_SDM_CDM" .. j .."S".. i] = TDM + CDM;
						save(Players[i], "LS_SDM_CDM" .. j, TDM + CDM);
						save(Players[j], "LS_SDM_CDM" .. i, TDM + CDM);
					end
				end
			end
		end
	end
end

function SaveValues(aPlayer, bPlayer, value)
	local CDM = DiploT["LS_SDM_CDM" .. aPlayer .."S".. bPlayer] or 0;
	DiploT["LS_SDM_CDM" .. aPlayer .."S".. bPlayer] = CDM + value;
	DiploT["LS_SDM_CDM" .. bPlayer .."S".. aPlayer] = CDM + value;
	save(Players[aPlayer], "LS_SDM_CDM" .. bPlayer, CDM + value);
	save(Players[bPlayer], "LS_SDM_CDM" .. aPlayer, CDM + value);
end

function FutureValues(aPlayer, bPlayer, value, turn)
	local iPlayer = aPlayer;
	local lPlayer = bPlayer;
	if aPlayer > bPlayer then
		iPlayer = bPlayer;
		lPlayer = aPlayer;
	end
	local GT = Game.GetGameTurn() + turn;
	local SDM = load(Players[iPlayer], "LS_SDM_TC" .. lPlayer .. "T" .. GT) or 0;
	save(Players[iPlayer], "LS_SDM_TC" .. lPlayer .. "T" .. GT, value + SDM);
	local MP = load(Players[iPlayer], "LS_SDM_MPT" .. GT) or -1;
	if lPlayer > MP then
		save(Players[iPlayer], "LS_SDM_MPT" .. GT, lPlayer)
	end
end

function ReloadCurrentDiplo()
	for i = 0, iteHelp - 2 do
		for j = i + 1, iteHelp - 1 do
			DiploT["LS_SDM_CDM" .. i .."S".. j] = load(Players[i], "LS_SDM_CDM" .. j);
			DiploT["LS_SDM_CDM" .. j .."S".. i] = load(Players[j], "LS_SDM_CDM" .. i);
		end
	end
end

--
--
--
--
--

local retVal = {};
LuaEvents.DiploSharedFunctions_IsGameEventsAdded(retVal);

if (retVal.isInitialized == nil) then
	LuaEvents.DiploSharedFunctions_IsGameEventsAdded.Add(function (retVal) retVal.isInitialized = true; end);
	GameEvents.GetScenarioDiploModifier2.Add(LSGetSDM2)
	ReloadCurrentDiplo()
	LuaEvents.LSupdateValuesInMainFile.Add(SaveValues)
	LuaEvents.LSupdateFutureInMainFile.Add(FutureValues)
	GameEvents.PlayerDoTurn.Add(LSUpdateSDM2)
end

--
--
--
--
--

function ChangeDiploMod(aPlayer, bPlayer, value, turn)
	if turn == nil then
		LuaEvents.LSupdateValuesInMainFile(aPlayer, bPlayer, value)
		return;
	end
	if turn > 0 then
		LuaEvents.LSupdateFutureInMainFile(aPlayer, bPlayer, value, turn)
	end
end

Site with reference of current diplo penalties.
 
Back
Top Bottom