raubak
Chieftain
- Joined
- Aug 5, 2019
- Messages
- 87
i try to add custom historic moment like JFD did in RwF: Custom Historic Moments , but my lua knowledge is
i got Error: PWP_Projects_UIFunctions.lua:35: attempt to index a nil value stack traceback
i guess something wrong with second file PWP_Projects_Utils , even error shows in first , can't find what wrong here

Code:
include("PWP_Projects_Utils.lua");
--==========================================================================================================================
-- CORE FUNCTIONS
--==========================================================================================================================
-- GLOBALS
----------------------------------------------------------------------------------------------------------------------------
local localPlayerID = Game.GetLocalPlayer()
----------------------------------------------------------------------------------------------------------------------------
-- GOVERNMENT
----------------------------------------------------------------------------------------------------------------------------
--PWP_Projects_MomentGeted
local projectManToSpaceID = GameInfo.Projects["PROJECT_LAUNCH_MAN_TO_SPACE"].Index
local projectMoonBaseID = GameInfo.Projects["PROJECT_LAUNCH_MOON_BASE"].Index
local projectMarsBaseID = GameInfo.Projects["PROJECT_LAUNCH_MARS_BASE"].Index
local notificationPrideMomentID = GameInfo.Notifications["NOTIFICATION_PRIDE_MOMENT_RECORDED"].Index
function PWP_Projects_MomentGeted(playerID, projectID)
if playerID == -1 then return end
if projectID == -1 then return end
local player = Players[playerID]
local playerIsLocal = Player_IsLocalPlayer(playerID)
local playerConfig = PlayerConfigurations[playerID]
local playerTypeName = playerConfig:GetLeaderTypeName()
local project = GameInfo.Projects[projectID]
local projectType = project.ProjectType -- <--Error: PWP_Projects_UIFunctions.lua:35: attempt to index a nil value stack traceback
--CUSTOM MOMENT
if projectID ~= projectManToSpaceID then return end
-- and projectID ~= projectMoonBaseID
-- and projectID ~= projectMarsBaseID then return end
local currentGameEraID = GameInfo.Eras[Game.GetEras():GetCurrentEra()].ChronologyIndex
if (not Game_GetAnyoneHasHadProjectDone(projectType)) then
Player_SetHasHadProject(playerID, projectType, true)
local momentProjectFirstInWorldType = project.FirstInWorldMoment
if momentProjectFirstInWorldType then
local moment = GameInfo.Moments[momentProjectFirstInWorldType]
local obsoleteEraID = GameInfo.Eras[moment.ObsoleteEra].ChronologyIndex
if currentGameEraID < obsoleteEraID then
local parameters = {}
parameters.playerID = playerID;
parameters.EraScore = moment.EraScore;
parameters.MomentID = moment.Index;
parameters.NotificationDesc = "LOC_" .. moment.MomentType .. "_NOTIFICATION_DESCRIPTION"
parameters.OnStart = "PWP_ProjectsAdopted";
UI.RequestPlayerOperation(playerID, PlayerOperations.EXECUTE_SCRIPT, parameters);
LuaEvents.AddExtraHistoricMoment(playerID, moment.Index, notificationPrideMomentID)
end
end
elseif (not Player_HasHadProjectDone(playerID, projectType, true)) then
Player_SetHasHadProject(playerID, projectType, true)
local momentProjectFirstInTierType = government.FirstInTierMoment
if momentProjectFirstInTierType then
local moment = GameInfo.Moments[momentProjectFirstInTierType]
local obsoleteEraID = GameInfo.Eras[moment.ObsoleteEra].ChronologyIndex
if currentGameEraID < obsoleteEraID then
local parameters = {}
parameters.playerID = playerID;
parameters.EraScore = moment.EraScore;
parameters.MomentID = moment.Index;
parameters.NotificationDesc = "LOC_" .. moment.MomentType .. "_NOTIFICATION_DESCRIPTION"
parameters.OnStart = "PWP_ProjectsAdopted";
UI.RequestPlayerOperation(playerID, PlayerOperations.EXECUTE_SCRIPT, parameters);
LuaEvents.AddExtraHistoricMoment(playerID, moment.Index, notificationPrideMomentID)
end
end
end
end
----------------------------------------------------------------------------------------------------------------------------
-- INIT
----------------------------------------------------------------------------------------------------------------------------
--PWP_Projects_LoadScreenClose
function PWP_Projects_LoadScreenClose()
Events.CityProjectCompleted.Add(PWP_Projects_MomentGeted)
end
Events.LoadScreenClose.Add(PWP_Projects_LoadScreenClose)
Code:
include("PWP_Projects_MasterUtils.lua")
--===========================================================================
-- CACHING UTILS
--===========================================================================
----------------------------------------------------------------------------
local Load
local Save
--PWP_Projects_InitSaveUtils
function PWP_Projects_InitSaveUtils()
Save = ExposedMembers.PWP_Pro.Save
Load = ExposedMembers.PWP_Pro.Load
end
PWP_Projects_InitSaveUtils()
--===========================================================================
-- GOVERNMENT UTILS
--===========================================================================
----------------------------------------------------------------------------
--g_Government_Tiers_Table
--Player_HasHadGovernmentTier
function Player_HasHadProjectDone(playerID, projectType)
local player = Players[playerID]
for i, projectInfo in ipairs(projectInfos) do
if(finishedProjects[i]) then
if Player_GetHasHadProject(playerID, row.ProjectType) then
return true
end
end
end
return false
end
----------------------------------------------------------------------------
--Game_GetAnyoneHasHadGovernmentTier
function Game_GetAnyoneHasHadProjectDone(projectType)
for _, playerID in ipairs(PlayerManager.GetWasEverAliveIDs()) do
if Player_HasHadProjectDone(playerID, projectType) then
return true
end
end
return false
end
----------------------------------------------------------------------------
--Player_GetHasHadGovernment
function Player_GetHasHadProject(playerID, projectType)
return Load(playerID .."_".. projectType.."_HAS_HAD") or false
end
----------------------------------------------------------------------------
--Player_SetHasHadGovernment
function Player_SetHasHadProject(playerID, projectType, hasHadProj)
Save(playerID .."_".. projectType.."_HAS_HAD", nil)
Save(playerID .."_".. projectType.."_HAS_HAD", hasHadProj)
end
i guess something wrong with second file PWP_Projects_Utils , even error shows in first , can't find what wrong here

Last edited: