1. We have added a Gift Upgrades feature that allows you to gift an account upgrade to another member, just in time for the holiday season. You can see the gift option when going to the Account Upgrades screen, or on any user profile screen.
    Dismiss Notice

[BNW] Does anybody know why this code for founding religions in a scenario won't fire properly?

Discussion in 'Civ5 - Creation & Customization' started by nguyenforthewin13, Sep 11, 2018.

  1. nguyenforthewin13

    nguyenforthewin13 Chieftain

    Joined:
    Jul 5, 2017
    Messages:
    35
    Gender:
    Male
    I've created scenarios where I successfully had religions founded at game start before, using Lua, but for whatever reason this time I'm unable to get religions founded on the map. The code I'm using this time for founding religions is taken straight out of the Earth 2014 mod, and so it looks like this:

    Code:
    -- Found a religion (function by Craig_Sutter)
    function FoundReligion(pCity, religion, pantheonBelief, founderBelief, followerBelief, followerBelief2, enhancerBelief)
        local iPlayer = pCity:GetOwner()
        local iReligion = GameInfoTypes[religion]
    
        -- Optional extra beliefs
        local iBelief4 = followerBelief2 and GameInfoTypes[followerBelief2] or -1
        local iBelief5 = enhancerBelief and GameInfoTypes[enhancerBelief] or -1
    
        Game.FoundPantheon(iPlayer, GameInfoTypes[pantheonBelief])
        Game.FoundReligion(iPlayer, iReligion, nil, GameInfoTypes[founderBelief], GameInfoTypes[followerBelief], iBelief4, iBelief5, pCity)
    end
    
    -- Set up the religions to be present in the scenario
    function SetupReligions()
    
        if Game.GetElapsedGameTurns() == 0 then
    
            for iPlayer=0, GameDefines.MAX_MAJOR_CIVS-1, 1 do
               
                local pPlayer = Players[iPlayer];
                print("Iterating players..." .. pPlayer:GetName());
    
                if pPlayer:IsEverAlive() then
                   
                    for cityIndex = 0, pPlayer:GetNumCities() - 1, 1 do
    
                        local pCity = pPlayer:GetCityByID(cityIndex)
    
                        -- Found Judaism
                        if pCity ~= nil and pCity:GetNameKey() == "TXT_KEY_CITY_NAME_JERUSALEM" then
                            FoundReligion(pCity, "RELIGION_JUDAISM", "BELIEF_FERTILITY_RITES", "BELIEF_CHOSEN_PEOPLE", "BELIEF_SYNAGOGUES", "BELIEF_ISRAELITE_INGENUITY", "BELIEF_MESSIAH");
                            print("Founding Judaism in " .. pCity:GetName());
                        end
                        -- Found Roman Catholicism
                        if pCity ~= nil and pCity:GetNameKey() == "TXT_KEY_CITY_NAME_ROME" then
                            FoundReligion(pCity, "RELIGION_CHRISTIANITY", "BELIEF_COMMUNION_CATHOLIC", "BELIEF_PAPAL_PRIMACY", "BELIEF_CATHEDRALS", "BELIEF_CHORAL_MUSIC", "BELIEF_HOLY_ORDER");
                            print("Founding Roman Catholicism in " .. pCity:GetName());
                            --return pCity;
                        end
                        -- Found Eastern Orthodoxy
                        if pCity ~= nil and pCity:GetNameKey() == "TXT_KEY_CITY_NAME_MOSCOW" then
                            FoundReligion(pCity, "RELIGION_ORTHODOXY", "BELIEF_COMMUNION_EASTERN", "BELIEF_CHURCH_PROPERTY", "BELIEF_MONASTERIES", "BELIEF_RELIGIOUS_ICONS", "BELIEF_RELIQUARY");
                            print("Founding Eastern Orthodoxy in " .. pCity:GetName());
                        end
                        -- Found Oriental Orthodoxy
                        if pCity ~= nil and pCity:GetName() == "Yerevan" then
                            FoundReligion(pCity, "RELIGION_ORIENTAL_ORTHODOXY", "BELIEF_COMMUNION_ORIENTAL", "BELIEF_CHURCH_PROPERTY_ORIENTAL", "BELIEF_MONASTERIES_ORIENTAL", "BELIEF_INDEPENDENT_LITURGY", "BELIEF_ITINERANT_PREACHERS");
                            print("Founding Eastern Orthodoxy in " .. pCity:GetName());
                        end
                        -- Found Lutheranism
                        if pCity ~= nil and pCity:GetNameKey() == "TXT_KEY_CITY_NAME_BERLIN" then
                            FoundReligion(pCity, "RELIGION_PROTESTANTISM", "BELIEF_COMMUNION_LUTHERAN", "BELIEF_SOLA_GRATIA", "BELIEF_CATHEDRALS_LUTHERAN", "BELIEF_CHORAL_MUSIC_LUTHERAN", "BELIEF_RELIGIOUS_TEXTS");
                            print("Founding Lutheranism in " .. pCity:GetName());
                        end
                        -- Found Calvinism
                        if pCity ~= nil and pCity:GetNameKey() == "TXT_KEY_CITY_NAME_AMSTERDAM" then
                            FoundReligion(pCity, "RELIGION_CALVINISM", "BELIEF_COMMUNION_CALVINIST", "BELIEF_SOLA_GRATIA_CALVINIST", "BELIEF_PRESBYTERIANISM", "BELIEF_PREDESTINATION", "BELIEF_RELIGIOUS_TEXTS_CALVINIST");
                            print("Founding Calvinism in " .. pCity:GetName());
                        end
                        -- Found Anglicanism
                        if pCity ~= nil and pCity:GetNameKey() == "TXT_KEY_CITY_NAME_LONDON" then
                            FoundReligion(pCity, "RELIGION_ANGLICANISM", "BELIEF_COMMUNION_ANGLICAN", "BELIEF_INTERFAITH_DIALOUGE", "BELIEF_CATHEDRALS_ANGLICAN", "BELIEF_FEED_WORLD", "BELIEF_RELIGIOUS_TEXTS_ANGLICAN");
                            print("Founding Anglicanism in " .. pCity:GetName());
                        end
                        -- Found Sunni
                        if pCity ~= nil and pCity:GetName() == "TXT_KEY_CITY_NAME_MEDINA" then
                            FoundReligion(pCity, "RELIGION_ISLAM", "BELIEF_DESERT_FOLKLORE", "BELIEF_PILGRIMAGE", "BELIEF_MOSQUES", "BELIEF_JIHAD", "BELIEF_ISLAMIC_SCHOLARSHIP");
                            print("Founding Islam in " .. pCity:GetName());
                        end
                        -- Found Shia
                        if pCity ~= nil and pCity:GetName() == "TXT_KEY_2014_CITY_NAME_TEHRAN" then
                            FoundReligion(pCity, "RELIGION_ISLAM_SHIA", "BELIEF_DESERT_FOLKLORE_SHIA", "BELIEF_WORLD_CHURCH", "BELIEF_MOSQUES_SHIA", "BELIEF_JIHAD_SHIA", "BELIEF_ISLAMIC_SCHOLARSHIP_SHIA");
                            print("Founding Islam in " .. pCity:GetName());
                        end          
                    end
                end
            end
        end
    end
    
    Events.SequenceGameInitComplete.Add(SetupReligions);
    When I use this code, it only founds the religion founded by the Civ I'm playing as (so if I play Russia, it founds Orthodoxy; if I play Italy, it founds Catholicism), and then fails to found all the other religions. For whatever reason, the British pantheon for Anglicanism also always shows up no matter what - it seems that the United Kingdom is the first non-player Civ that is iterated, but then the code fails.

    I don't believe I've made any mistakes implementing the modded non-Vanilla beliefs, because they're rendering in the Civilopedia just fine and I was meticulous in making sure I coded them all in correctly through XML. Also, the new religions have been added properly, I'm relatively sure, because they are all showing up in the Civilopedia with the correct symbols. They've just been taken from the various Historical Religion mods on Steam.

    However, this is the recurring issue I see in the Lua log every time I try to fire this code:

    Code:
    [133194.609] Europe2014ReligionSetup: Iterating players...Vladimir Putin
    [133194.750] Europe2014ReligionSetup: Founding Eastern Orthodoxy in Moscow
    [133194.750] Europe2014ReligionSetup: Iterating players...David Cameron
    [133194.765] Runtime Error: C:\Users\Brian\Documents\My Games\Sid Meier's Civilization 5\MODS\Europe 2014 (v 1)\Lua/Europe2014ReligionSetup.lua:16: bad argument #2 to 'FoundReligion' (number expected, got nil)
    
    I've tried a variety of solutions already to fix this problem from other areas on the forum. Craig Sutter said that if you have a religion founded in a City-State, you should reduce the number of major religions because apparently otherwise you could get a crash. I did that, but it didn't make a difference. I also tried founding religions using a code written in a different format from Craig Sutter, but that founds five of the religions above and for some reason fails to found the other four. That code is much longer because the arguments utilized to found each religion are separated. This is that code:

    Code:
    function EstablishJewish()
    if Game.GetElapsedGameTurns() == 0 then
    
    function CreateJewishHolyCity(pCity, religion, pantheonBelief, founderBelief, followerBelief, followerBelief2, enhancerBelief)
      local iPlayer = pCity:GetOwner()
      local iReligion = GameInfoTypes[religion]
    
      -- Optional extra beliefs
      local iBelief4 = followerBelief2 and GameInfoTypes[followerBelief2] or -1
      local iBelief5 = enhancerBelief and GameInfoTypes[enhancerBelief] or -1
    
      Game.FoundPantheon(iPlayer, GameInfoTypes[pantheonBelief])
      Game.FoundReligion(iPlayer, iReligion, nil, GameInfoTypes[founderBelief], GameInfoTypes[followerBelief], -1, -1, pCity)
      Game.EnhanceReligion(iPlayer, iReligion, GameInfoTypes[followerBelief2], GameInfoTypes[enhancerBelief]);
    end
    
    function FoundJudaism()
      for iPlayer=0, GameDefines.MAX_CIV_PLAYERS - 1 do
        local pPlayer = Players[iPlayer]
        if (pPlayer:IsEverAlive()) then
    
        for pCity in pPlayer:Cities() do
    
                    -- City exists and has the proper name?
                    if pCity ~= nil and pCity:GetNameKey() == "TXT_KEY_CITY_NAME_JERUSALEM" then
    
                         CreateJewishHolyCity(pCity, "RELIGION_JUDAISM", "BELIEF_FERTILITY_RITES",
                        "BELIEF_CHOSEN_PEOPLE", "BELIEF_SYNAGOGUES",  "BELIEF_ISRAELITE_INGENUITY", "BELIEF_MESSIAH");
                        print("Founding Judaism in " .. pCity:GetName());
                    return pCity
                    end
                end
            end
        end
    end
    
    local pJewishPlot = FoundJudaism():Plot()
    
    end
    end
    
    Events.SequenceGameInitComplete.Add(EstablishJewish)
    
    function EstablishCatholic()
    if Game.GetElapsedGameTurns() == 0 then
    
    function CreateCatholicHolyCity(pCity, religion, pantheonBelief, founderBelief, followerBelief, followerBelief2, enhancerBelief)
      local iPlayer = pCity:GetOwner()
      local iReligion = GameInfoTypes[religion]
    
      -- Optional extra beliefs
      local iBelief4 = followerBelief2 and GameInfoTypes[followerBelief2] or -1
      local iBelief5 = enhancerBelief and GameInfoTypes[enhancerBelief] or -1
    
      Game.FoundPantheon(iPlayer, GameInfoTypes[pantheonBelief])
       Game.FoundReligion(iPlayer, iReligion, nil, GameInfoTypes[founderBelief], GameInfoTypes[followerBelief], -1, -1, pCity)
      Game.EnhanceReligion(iPlayer, iReligion, GameInfoTypes[followerBelief2], GameInfoTypes[enhancerBelief]);
    end
    
    function FoundCatholicism()
      for iPlayer=0, GameDefines.MAX_CIV_PLAYERS - 1 do
        local pPlayer = Players[iPlayer]
        if (pPlayer:IsEverAlive()) then
    
        for pCity in pPlayer:Cities() do
    
                    -- City exists and has the proper name?
                    if pCity ~= nil and pCity:GetNameKey() == "TXT_KEY_CITY_NAME_ROME" then
    
                         CreateCatholicHolyCity(pCity, "RELIGION_CHRISTIANITY", "BELIEF_COMMUNION_CATHOLIC",
                        "BELIEF_PAPAL_PRIMACY", "BELIEF_CATHEDRALS",  "BELIEF_CHORAL_MUSIC", "BELIEF_HOLY_ORDER");
                        print("Founding Catholicism in " .. pCity:GetName());
                    return pCity
                    end
                end
            end
        end
    end
    
    local pCatholicPlot = FoundCatholicism():Plot()
    
    end
    end
    
    Events.SequenceGameInitComplete.Add(EstablishCatholic)
    
    function EstablishOrthodox()
    if Game.GetElapsedGameTurns() == 0 then
    
    function CreateOrthodoxHolyCity(pCity, religion, pantheonBelief, founderBelief, followerBelief, followerBelief2, enhancerBelief)
      local iPlayer = pCity:GetOwner()
      local iReligion = GameInfoTypes[religion]
    
      -- Optional extra beliefs
      local iBelief4 = followerBelief2 and GameInfoTypes[followerBelief2] or -1
      local iBelief5 = enhancerBelief and GameInfoTypes[enhancerBelief] or -1
    
      Game.FoundPantheon(iPlayer, GameInfoTypes[pantheonBelief])
      Game.FoundReligion(iPlayer, iReligion, nil, GameInfoTypes[founderBelief], GameInfoTypes[followerBelief], -1, -1, pCity)
      Game.EnhanceReligion(iPlayer, iReligion, GameInfoTypes[followerBelief2], GameInfoTypes[enhancerBelief]);
    end
    
    function FoundOrthodoxy()
      for iPlayer=0, GameDefines.MAX_CIV_PLAYERS - 1 do
        local pPlayer = Players[iPlayer]
        if (pPlayer:IsEverAlive()) then
    
        for pCity in pPlayer:Cities() do
    
                    -- City exists and has the proper name?
                    if pCity ~= nil and pCity:GetNameKey() == "TXT_KEY_CITY_NAME_MOSCOW" then
    
                         CreateOrthodoxHolyCity(pCity, "RELIGION_ORTHODOXY", "BELIEF_COMMUNION_EASTERN",
                        "BELIEF_CHURCH_PROPERTY", "BELIEF_MONASTERIES",  "BELIEF_RELIGIOUS_ICONS", "BELIEF_RELIQUARY");
                        print("Founding Orthodoxy in " .. pCity:GetName());
                    return pCity
                    end
                end
            end
        end
    end
    
    local pOrthodoxPlot = FoundOrthodoxy():Plot()
    
    end
    end
    
    Events.SequenceGameInitComplete.Add(EstablishOrthodox)
    
    function EstablishOrientalOrthodox()
    if Game.GetElapsedGameTurns() == 0 then
    
    function CreateOrientalOrthodoxHolyCity(pCity, religion, pantheonBelief, founderBelief, followerBelief, followerBelief2, enhancerBelief)
      local iPlayer = pCity:GetOwner()
      local iReligion = GameInfoTypes[religion]
    
      -- Optional extra beliefs
      local iBelief4 = followerBelief2 and GameInfoTypes[followerBelief2] or -1
      local iBelief5 = enhancerBelief and GameInfoTypes[enhancerBelief] or -1
    
      Game.FoundPantheon(iPlayer, GameInfoTypes[pantheonBelief])
      Game.FoundReligion(iPlayer, iReligion, nil, GameInfoTypes[founderBelief], GameInfoTypes[followerBelief], -1, -1, pCity)
      Game.EnhanceReligion(iPlayer, iReligion, GameInfoTypes[followerBelief2], GameInfoTypes[enhancerBelief]);
    end
    
    function FoundOrientalOrthodoxy()
      for iPlayer=0, GameDefines.MAX_CIV_PLAYERS - 1 do
        local pPlayer = Players[iPlayer]
        if (pPlayer:IsEverAlive()) then
    
        for pCity in pPlayer:Cities() do
    
                    -- City exists and has the proper name?
                    if pCity ~= nil and pCity:GetName() == "Yerevan" then
    
                         CreateOrientalOrthodoxHolyCity(pCity, "RELIGION_ORIENTAL_ORTHODOXY", "BELIEF_COMMUNION_EASTERN",
                        "BELIEF_CHURCH_PROPERTY", "BELIEF_MONASTERIES",  "BELIEF_RELIGIOUS_ICONS", "BELIEF_RELIQUARY");
                        print("Founding Oriental Orthodoxy in " .. pCity:GetName());
                    return pCity
                    end
                end
            end
        end
    end
    
    local pOrientalOrthodoxPlot = FoundOrientalOrthodoxy():Plot()
    
    end
    end
    
    Events.SequenceGameInitComplete.Add(EstablishOrientalOrthodox)
    
    function EstablishLutheran()
    if Game.GetElapsedGameTurns() == 0 then
    
    function CreateLutheranHolyCity(pCity, religion, pantheonBelief, founderBelief, followerBelief, followerBelief2, enhancerBelief)
      local iPlayer = pCity:GetOwner()
      local iReligion = GameInfoTypes[religion]
    
      -- Optional extra beliefs
      local iBelief4 = followerBelief2 and GameInfoTypes[followerBelief2] or -1
      local iBelief5 = enhancerBelief and GameInfoTypes[enhancerBelief] or -1
    
      Game.FoundPantheon(iPlayer, GameInfoTypes[pantheonBelief])
      Game.FoundReligion(iPlayer, iReligion, nil, GameInfoTypes[founderBelief], GameInfoTypes[followerBelief], -1, -1, pCity)
      Game.EnhanceReligion(iPlayer, iReligion, GameInfoTypes[followerBelief2], GameInfoTypes[enhancerBelief]);
    end
    
    function FoundLutheranism()
      for iPlayer=0, GameDefines.MAX_CIV_PLAYERS - 1 do
        local pPlayer = Players[iPlayer]
        if (pPlayer:IsEverAlive()) then
    
        for pCity in pPlayer:Cities() do
    
                    -- City exists and has the proper name?
                    if pCity ~= nil and pCity:GetNameKey() == "TXT_KEY_CITY_NAME_BERLIN" then
    
                         CreateLutheranHolyCity(pCity, "RELIGION_PROTESTANTISM", "BELIEF_COMMUNION_LUTHERAN",
                        "BELIEF_SOLA_GRATIA", "BELIEF_CATHEDRALS_LUTHERAN",  "BELIEF_CHORAL_MUSIC_LUTHERAN", "BELIEF_RELIGIOUS_TEXTS");
                        print("Founding Lutheranism in " .. pCity:GetName());
                    return pCity
                    end
                end
            end
        end
    end
    
    local pLutheranPlot = FoundLutheranism():Plot()
    
    end
    end
    
    Events.SequenceGameInitComplete.Add(EstablishLutheran)
    
    function EstablishCalvinist()
    if Game.GetElapsedGameTurns() == 0 then
    
    function CreateCalvinistHolyCity(pCity, religion, pantheonBelief, founderBelief, followerBelief, followerBelief2, enhancerBelief)
      local iPlayer = pCity:GetOwner()
      local iReligion = GameInfoTypes[religion]
    
      -- Optional extra beliefs
      local iBelief4 = followerBelief2 and GameInfoTypes[followerBelief2] or -1
      local iBelief5 = enhancerBelief and GameInfoTypes[enhancerBelief] or -1
    
      Game.FoundPantheon(iPlayer, GameInfoTypes[pantheonBelief])
      Game.FoundReligion(iPlayer, iReligion, nil, GameInfoTypes[founderBelief], GameInfoTypes[followerBelief], -1, -1, pCity)
      Game.EnhanceReligion(iPlayer, iReligion, GameInfoTypes[followerBelief2], GameInfoTypes[enhancerBelief]);
    end
    
    function FoundCalvinism()
      for iPlayer=0, GameDefines.MAX_CIV_PLAYERS - 1 do
        local pPlayer = Players[iPlayer]
        if (pPlayer:IsEverAlive()) then
    
        for pCity in pPlayer:Cities() do
    
                    -- City exists and has the proper name?
                    if pCity ~= nil and pCity:GetNameKey() == "TXT_KEY_CITY_NAME_AMSTERDAM" then
    
                         CreateCalvinistHolyCity(pCity, "RELIGION_CALVINISM", "BELIEF_COMMUNION_CALVINIST",
                        "BELIEF_SOLA_GRATIA_CALVINIST", "BELIEF_PRESBYTERIANISM",  "BELIEF_PREDESTINATION", "BELIEF_RELIGIOUS_TEXTS_CALVINIST");
                        print("Founding Calvinism in " .. pCity:GetName());
                    return pCity
                    end
                end
            end
        end
    end
    
    local pCalvinistPlot = FoundCalvinism():Plot()
    
    end
    end
    
    Events.SequenceGameInitComplete.Add(EstablishCalvinist)
    
    function EstablishAnglican()
    if Game.GetElapsedGameTurns() == 0 then
    
    function CreateAnglicanHolyCity(pCity, religion, pantheonBelief, founderBelief, followerBelief, followerBelief2, enhancerBelief)
      local iPlayer = pCity:GetOwner()
      local iReligion = GameInfoTypes[religion]
    
      -- Optional extra beliefs
      local iBelief4 = followerBelief2 and GameInfoTypes[followerBelief2] or -1
      local iBelief5 = enhancerBelief and GameInfoTypes[enhancerBelief] or -1
    
      Game.FoundPantheon(iPlayer, GameInfoTypes[pantheonBelief])
      Game.FoundReligion(iPlayer, iReligion, nil, GameInfoTypes[founderBelief], GameInfoTypes[followerBelief], -1, -1, pCity)
      Game.EnhanceReligion(iPlayer, iReligion, GameInfoTypes[followerBelief2], GameInfoTypes[enhancerBelief]);
    end
    
    function FoundAnglicanism()
      for iPlayer=0, GameDefines.MAX_CIV_PLAYERS - 1 do
        local pPlayer = Players[iPlayer]
        if (pPlayer:IsEverAlive()) then
    
        for pCity in pPlayer:Cities() do
    
                    -- City exists and has the proper name?
                    if pCity ~= nil and pCity:GetName() == "TXT_KEY_CITY_NAME_LONDON" then
    
                         CreateAnglicanHolyCity(pCity, "RELIGION_ANGLICANISM", "BELIEF_COMMUNION_ANGLICAN",
                        "BELIEF_INTERFAITH_DIALOUGE", "BELIEF_CATHEDRALS_ANGLICAN",  "BELIEF_FEED_WORLD", "BELIEF_RELIGIOUS_TEXTS_ANGLICAN");
                        print("Founding Anglicanism in " .. pCity:GetName());
                    return pCity
                    end
                end
            end
        end
    end
    
    local pAnglicanPlot = FoundAnglicanism():Plot()
    
    end
    end
    
    Events.SequenceGameInitComplete.Add(EstablishAnglican)
    
    function EstablishSunni()
    if Game.GetElapsedGameTurns() == 0 then
    
    function CreateSunniHolyCity(pCity, religion, pantheonBelief, founderBelief, followerBelief, followerBelief2, enhancerBelief)
      local iPlayer = pCity:GetOwner()
      local iReligion = GameInfoTypes[religion]
    
      -- Optional extra beliefs
      local iBelief4 = followerBelief2 and GameInfoTypes[followerBelief2] or -1
      local iBelief5 = enhancerBelief and GameInfoTypes[enhancerBelief] or -1
    
      Game.FoundPantheon(iPlayer, GameInfoTypes[pantheonBelief])
      Game.FoundReligion(iPlayer, iReligion, nil, GameInfoTypes[founderBelief], GameInfoTypes[followerBelief], -1, -1, pCity)
      Game.EnhanceReligion(iPlayer, iReligion, GameInfoTypes[followerBelief2], GameInfoTypes[enhancerBelief]);
    end
    
    function FoundSunni()
      for iPlayer=0, GameDefines.MAX_CIV_PLAYERS - 1 do
        local pPlayer = Players[iPlayer]
        if (pPlayer:IsEverAlive()) then
    
        for pCity in pPlayer:Cities() do
    
                    -- City exists and has the proper name?
                    if pCity ~= nil and pCity:GetNameKey() == "TXT_KEY_CITY_NAME_MEDINA" then
    
                         CreateSunniHolyCity(pCity, "RELIGION_ISLAM", "BELIEF_DESERT_FOLKLORE",
                        "BELIEF_PILGRIMAGE", "BELIEF_MOSQUES", "BELIEF_JIHAD", "BELIEF_ISLAMIC_SCHOLARSHIP");
                        print("Founding Sunni in " .. pCity:GetName());
                    return pCity
                    end
                end
            end
        end
    end
    
    local pSunniPlot = FoundSunni():Plot()
    
    end
    end
    
    Events.SequenceGameInitComplete.Add(EstablishSunni)
    
    function EstablishShia()
    if Game.GetElapsedGameTurns() == 0 then
    
    function CreateShiaHolyCity(pCity, religion, pantheonBelief, founderBelief, followerBelief, followerBelief2, enhancerBelief)
      local iPlayer = pCity:GetOwner()
      local iReligion = GameInfoTypes[religion]
    
      -- Optional extra beliefs
      local iBelief4 = followerBelief2 and GameInfoTypes[followerBelief2] or -1
      local iBelief5 = enhancerBelief and GameInfoTypes[enhancerBelief] or -1
    
      Game.FoundPantheon(iPlayer, GameInfoTypes[pantheonBelief])
      Game.FoundReligion(iPlayer, iReligion, nil, GameInfoTypes[founderBelief], GameInfoTypes[followerBelief], -1, -1, pCity)
      Game.EnhanceReligion(iPlayer, iReligion, GameInfoTypes[followerBelief2], GameInfoTypes[enhancerBelief]);
    end
    
    function FoundShia()
      for iPlayer=0, GameDefines.MAX_CIV_PLAYERS - 1 do
        local pPlayer = Players[iPlayer]
        if (pPlayer:IsEverAlive()) then
    
        for pCity in pPlayer:Cities() do
    
                    -- City exists and has the proper name?
                    if pCity ~= nil and pCity:GetNameKey() == "TXT_KEY_2014_CITY_NAME_TEHRAN" then
    
                         CreateShiaHolyCity(pCity, "RELIGION_ISLAM_SHIA", "BELIEF_DESERT_FOLKLORE_SHIA",
                        "BELIEF_WORLD_CHURCH", "BELIEF_MOSQUES_SHIA", "BELIEF_JIHAD_SHIA", "BELIEF_ISLAMIC_SCHOLARSHIP_SHIA");
                        print("Founding Shia in " .. pCity:GetName());
                    return pCity
                    end
                end
            end
        end
    end
    
    local pShiaPlot = FoundShia():Plot()
    
    end
    end
    
    Events.SequenceGameInitComplete.Add(EstablishShia)
    That code always ends up founding all the religions up to Lutheranism correctly, and then it gives me that same error in the Lua log and goes kaput. As for the code I've used to spread religions across the map, I know that works perfectly fine because I tested it separately from the other codes, and it does spread religions to all the right cities even if they're not founded (but of course not having the religions founded when they're spread crashes the game upon opening the religion overview). So I suspect the problem is somewhere in the code I presented.

    There is some other Lua with my mod, but it's really just the other Lua in the Earth 2014 mod, another Lua code for the Chartres Cathedral mod on Steam, and the Lua code for the Hex Conquer and Release mod. I'm not sure if there would be a conflict but I will test with all those codes disabled.
     
  2. LeeS

    LeeS Imperator

    Joined:
    Jul 23, 2013
    Messages:
    6,288
    Location:
    Illinois, USA
    In both cases you appear to be getting a nil value from this
    Code:
    local iReligion = GameInfoTypes[religion]
    This would tend to mean that some of the religions you are attempting to use are either not actually in the database or else your lua code is not referencing the tag correctly for the XML name of the religion. You need to look to the game's actual database via an SQL database viewer program like SQLite Browser instead of relying on in-game civilopedia.

    You can open the debug database file "Civ5DebugDatabase.db" in folder ~Documents\My Games\Sid Meier's Civilization 5\cache with any SQL database viewer program. The "Civ5DebugDatabase.db" file will reflect any data added/subtracted to the game's database after all mods load so long as you exit directly from your scenario to your desktop. Even if the game crashes the debug database file is maintained and can be opened and inspected.
     
  3. nguyenforthewin13

    nguyenforthewin13 Chieftain

    Joined:
    Jul 5, 2017
    Messages:
    35
    Gender:
    Male
    You were completely right that I used the wrong tags. I don't know how I missed it, but I used the tags RELIGION_ANGLICANISM and RELIGION_CALVINISM instead of RELIGION_CHRISTIAN_ANGLICANISM and RELIGION_PROTESTANT_CALVINISM, which were the actual tags from the historical religions mod SQL I incorporated. I had been very careful with tags up to that point, so I kind of had a mental lapse.

    After some more adjustments, all the 437 cities on my map seem to have their correct religions now, which is good. However, I am having an issue with founding a religion in a City-State, Oriental Orthodoxy in Armenia. Every time I attempt to found that religion in Armenia's capital Yerevan, the game skips over the bit of code supposed to found the religion and starts trying to convert another Armenian city to Oriental Orthodoxy, which doesn't exist because that religion hasn't been founded. The game then promptly crashes (that's what I see in the Lua log).

    In the Earth 2014 mod, the religion of Buddhism is actually successfully founded in the City-State of Thailand's capital Bangkok, and I do see how it's done in the Lua. I'm going to tinker with it again later but for now, I'm just leaving Armenia Eastern Orthodox and basically let that issue slide for the time being. Other than that, all the religion things in my mod are fully functional. Thanks for the help.
     

Share This Page