GreatBayethe
Chieftain
- Joined
- Jul 12, 2017
- Messages
- 24
Hi, I'm making a mod, and I made this code.
It works well, but saveutils doesn't work in UnitPanel Table. So, I checked the log.
Is there any solution?
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?