@Uveso
To your question - Table in tables. After spending some time reading "Cobrand" code ... I think I roughly know how tables work. I know saying it, is easier than doing it ie. to actually write codes out that actually works without a bug.
I think I will know that when I reach that point.
But right now actually I am stuck in this code here.
local NameTable = import("/mods/Veterename/tables.lua").GetTable()
local allUnits = {} ;
local username = nil ;
function UpdateAllUnits()
-- Add unit being built by others
for _, unit in allUnits do
if not unit:IsDead() and unit:GetFocus() and not unit:GetFocus():IsDead() then
allUnits[unit:GetFocus():GetEntityId()] = unit:GetFocus()
end
end
-- Remove dead
for entityid, unit in allUnits do
if unit:IsDead() then
allUnits[entityid] = nil
end
end
end
function RenameVet()
for index, unit in allUnits do
local Ukills = unit:GetStat('KILLS', 0).Value
if Ukills >= unit:GetBlueprint().Veteran.Level1 and Ukills != 0 and unit:GetCustomName(unit) == nil then
local unitname = unit:GetBlueprint().General.UnitName
local newName ;
-- commander upgraded name
if unit:IsInCategory('COMMAND') == true then
if Ukills >= unit:GetBlueprint().Veteran.Level5 then
newName = "[~[Top Rank: Chief Commander]~]"
elseif Ukills >= unit:GetBlueprint().Veteran.Level4 then
newName = "[=[2nd Rank: General]=]"
elseif Ukills >= unit:GetBlueprint().Veteran.Level3 then
newName = "<+>3rd Rank: Colonel<+>"
elseif Ukills >= unit:GetBlueprint().Veteran.Level2 then
newName = "<<4th Rank: Major>>"
elseif Ukills >= unit:GetBlueprint().Veteran.Level1 then
newName = "<5th Rank: First Lieutenant>"
else
newName = username
end
end
else
-- ONLY Tech 3 Transport Air units upgraded name
if unit:IsInCategory('TRANSPORT') and unit:IsInCategory('TECH3') then
if Ukills >= unit:GetBlueprint().Veteran.Level5 then
newName = "[~[Top Rank: Whitehorse]~]"
elseif Ukills >= unit:GetBlueprint().Veteran.Level4 then
newName = "[=[2nd Rank: Hawk]=]"
elseif Ukills >= unit:GetBlueprint().Veteran.Level3 then
newName = "<+>3rd Rank: Pegasus<+>"
elseif Ukills >= unit:GetBlueprint().Veteran.Level2 then
newName = "<<4th Rank: Wolfhound>>"
elseif Ukills >= unit:GetBlueprint().Veteran.Level1 then
newName = "<5th Rank: Puma>"
-- else
-- newName = username
end
else
-- others mobile units that moves around such as land, air and naval units upgraded name
if unit:IsInCategory('DIRECTFIRE') and ( unit:IsInCategory('NAVAL') or unit:IsInCategory('LAND') or unit:IsInCategory('AIR') ) then
if Ukills >= unit:GetBlueprint().Veteran.Level5 then
newName = "[~[Top Rank: Chief General]~]"
elseif Ukills >= unit:GetBlueprint().Veteran.Level4 then
newName = "[=[2nd Rank: General]=]"
elseif Ukills >= unit:GetBlueprint().Veteran.Level3 then
newName = "<+>3rd Rank: Captain<+>"
elseif Ukills >= unit:GetBlueprint().Veteran.Level2 then
newName = "<<4th Rank: Lieutenant>>"
elseif Ukills >= unit:GetBlueprint().Veteran.Level1 then
newName = "<5th Rank: Sergeant>"
end
end
end
--
if newName != nil then
unit:SetCustomName(newName)
else
unit:SetCustomName("test")
end
end
end
end
-- ForkThread
function Repeat()
-- this piece of code will actually select units at the beginning of the game
-- every other unit is eventually created by other units at some point, hence we are adding them via that way
local selection = GetSelectedUnits()
UISelectionByCategory("ALLUNITS", false, false, false, false)
for _, unit in (GetSelectedUnits() or {}) do
username = unit:GetCustomName(unit);
allUnits[unit:GetEntityId()] = unit
end
SelectUnits(selection); -- select back what was previously selected
--
while true do -- while there are units alive out there
WaitSeconds(1)
UpdateAllUnits()
RenameVet()
end
end
-- Init
function VetInit() --
if SessionIsReplay() == true then
LOG("Veterename: Disabled ; Watching replay")
else
LOG("Veterename: Enabled")
local newSelectionsMap = {
['shift-Backspace'] = {action = 'UI_Lua import("/mods/Veterename/autorename.lua").RenameVet()'},
} -- shortcut
IN_AddKeyMapTable(newSelectionsMap)
ForkThread(Repeat)
end
end
The complete code above. Last night I ran the code using this and game still runs okay but I still cannot find out if this thing works or not as I cannot get a unit to stay on battle field long enough to see it's effect.
The last 2 blocks of code, I know for sure it won't work because I have no info as how to trap a unit that is a mobile type ie. moving type of unit and also an attacking type. And also how to trap a Transport Tech 3 unit.
-- others mobile units that moves around such as land, air and naval units upgraded name
if unit:IsInCategory('DIRECTFIRE') and ( unit:IsInCategory('NAVAL') or unit:IsInCategory('LAND') or unit:IsInCategory('AIR') ) then
if Ukills >= unit:GetBlueprint().Veteran.Level5 then
I don't know how to check if a unit is a mobile type and an attacking type of unit.
-- ONLY Tech 3 Transport Air units upgraded name
if unit:IsInCategory('TRANSPORT') and unit:IsInCategory('TECH3') then
if Ukills >= unit:GetBlueprint().Veteran.Level5 then
And also don't know how to check if a unit is a Tech 3 Transport unit.
Thanks.