Need Help Lua problems

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
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:
Top Bottom