SaveUtils doesn't work with Unitpanel.

GreatBayethe

Chieftain
Joined
Jul 12, 2017
Messages
24
Hi, I'm making a mod, and I made this code.
Code:
include("SaveUtils_Suk_V2.lua"); MY_MOD_NAME = "Valerian";

local ValerianPromotion = GameInfoTypes.PROMOTION_VALERIAN_GHOST
local VLGHEnergyStack = {[0] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA,
                                        [1] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_1, [2] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_2, [3] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_3, [4] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_4, [5] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_5,
                                        [6] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_6, [7] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_7, [8] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_8, [9] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_9, [10] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_10,
                                        [11] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_11, [12] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_12, [13] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_13, [14] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_14, [15] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_15,
                                        [16] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_16, [17] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_17, [18] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_18, [19] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_19, [20] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_20,
                                        [21] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_21, [22] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_22, [23] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_23, [24] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_24, [25] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_25,
                                        [26] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_26, [27] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_27, [28] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_28, [29] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_29, [30] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_30,
                                        [31] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_31, [32] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_32, [33] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_33, [34] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_34, [35] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_35,
                                        [36] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_36, [37] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_37, [38] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_38, [39] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_39, [40] = GameInfoTypes.PROMOTION_VALERIAN_GHOST_MANA_40}

function ValerianGhostMana( iPlayer, iUnit, hexVec, unitType, cultureType, civID, primaryColor, secondaryColor, unitFlagIndex, fogState, selected, military, notInvisible)
            local pPlayer = Players[iPlayer]
            if pPlayer:GetCivilizationType() == Valerian and pPlayer:IsAlive() then
                local pUnit = pPlayer:GetUnitByID(iUnit)
                if (pUnit:GetUnitType() == ValerianGhost or pUnit:GetUnitType() == ValerianScienceVessel) and load(pUnit, "ValerianGhostEnergy") == nil then
                    save(pUnit, "ValerianGhostEnergy", 10)
                    pUnit:SetHasPromotion(VLGHEnergy, true)
                end
            end
        end
        Events.SerialEventUnitCreated.Add( ValerianGhostMana )

        function ValerianGhostMana2(iPlayer)
            local pPlayer = Players[iPlayer]
            if pPlayer:GetCivilizationType() == Valerian and pPlayer:IsAlive() then
                for pUnit in pPlayer:Units() do
                    if (pUnit:GetUnitType() == ValerianGhost or pUnit:GetUnitType() == ValerianScienceVessel) and load(pUnit, "ValerianGhostEnergy") <= 40 then
                        if pUnit:IsHasPromotion(ValerianPromotion) then
                            save(pUnit, "ValerianGhostEnergy", load(pUnit, "ValerianGhostEnergy") - 2)
                        else
                            save(pUnit, "ValerianGhostEnergy", math.min(load(pUnit, "ValerianGhostEnergy") + 4, 40))
                        end
                        for i = 0, 40 do
                            pUnit:SetHasPromotion(VLGHEnergyStack[i], (i == load(pUnit, "ValerianGhostEnergy")))
                        end
                        if load(pUnit, "ValerianGhostEnergy") <= 1 then
                            pUnit:SetHasPromotion(ValerianPromotion, false)
                        end
                        if pUnit:GetUnitType() == ValerianGhost then
                            print("고스트 에너지 : "..load(pUnit, "ValerianGhostEnergy") * 5)
                        elseif pUnit:GetUnitType() == ValerianScienceVessel then
                            print("과학선 에너지 : "..load(pUnit, "ValerianGhostEnergy") * 5)
                        end
                    end
                end
            end
        end
        GameEvents.PlayerDoTurn.Add( ValerianGhostMana2 )

function GetTraitType(pPlayer)
            leaderType = GameInfo.Leaders[pPlayer:GetLeaderType()].Type
            traitType = GameInfo.Leader_Traits("LeaderType ='" .. leaderType .. "'")().TraitType
            return GameInfo.Traits[traitType]
        end

function CheckValerianButtonValidity(traitType, unit)
            for i = 0, 1 do
                if unit:IsHasPromotion(VLGHEnergyStack[i]) then
                    return false
                end
            end
            return true;
        end

local ValerianSkillButton = {
            Name = "TXT_KEY_NAME_VALERIAN_GHOST",
            Title = "TXT_KEY_TITLE_VALERIAN_GHOST",
            OrderPriority = 200,
            IconAtlas = "UNIT_ACTION_ATLAS_VALERIAN",
            PortraitIndex = 0,
            ToolTip = function(action, unit)
                local sTooltip;
                local pPlayer = Players[Game:GetActivePlayer()];
                local traitType = GetTraitType(pPlayer);
                local bIsValid = CheckValerianButtonValidity(traitType, unit);
                if bIsValid then
                    sTooltip = Locale.ConvertTextKey( "TXT_KEY_COND_VALERIAN_GHOST" );
                else
                    sTooltip = Locale.ConvertTextKey( "TXT_KEY_COND_VALERIAN_GHOST_2" );
                end
                return sTooltip
            end, -- or a TXT_KEY_ or a function
            Condition = function(action, unit)
                if unit:GetMoves() <= 0 then
                    return false
                end
                    if (unit:GetUnitType() == ValerianGhost) and not unit:IsHasPromotion(ValerianPromotion) then
                        return true
                    else
                        return false
                    end
                --print(string.format("Condition %s called for unit %i for player %i", action.Name, unit:GetID(), unit:GetOwner()));
            end, -- or nil or a boolean, default is true
            Disabled = function(action, unit)
                  local traitType = GetTraitType(Players[Game:GetActivePlayer()]);
                local bIsValid = CheckValerianButtonValidity(traitType, unit);
                if bIsValid then
                    return false
                end
                return true;
            end, -- or nil or a boolean, default is false
            Action = function(action, unit, eClick)
                if eClick == Mouse.eRClick then
                    return
                end
                unit:SetHasPromotion(ValerianPromotion, true)
                save(unit, "ValerianGhostEnergy", load(unit, "ValerianGhostEnergy") - 5)
                for i = 0, 40 do
                    unit:SetHasPromotion(VLGHEnergyStack[i], (i == load(unit, "ValerianGhostEnergy")))
                end
                Events.GameplayAlertMessage(Locale.ConvertTextKey("TXT_KEY_ALERT_VALERIAN_GHOST"))
                Events.AudioPlay2DSound("AS2D_VALERIAN_CLOAKING")
                print("고스트 클로킹")
                ValerianSkill = 1
            end
        }

        LuaEvents.UnitPanelActionAddin(ValerianSkillButton)

It works well, but saveutils doesn't work in UnitPanel Table. So, I checked the log.

Code:
[49611.296] Runtime Error: C:\Users\DELL\Documents\My Games\Sid Meier's Civilization 5\MODS\Hierarchy Artanis' Valerian Mengsk - Terran Dominion Civilization (v 1)\Lua/ValerianDLLFunction.lua:365: attempt to perform arithmetic on a nil value

Is there any solution?
 
Back
Top Bottom