Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you may not be able to execute some actions.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
Use LOG commands to print debug text to the game.log. Like:
if unit:IsInCategory('TRANSPORT') and unit:IsInCategory('TECH3') then LOG('Found Unit with category TRANSPORT*TECH3') if Ukills >= unit:GetBlueprint().Veteran.Level5 then
To Check For mobil units, you can use unit:IsInCategory('MOBILE')
unit:IsInCategory('MOBILE')
units have layer category, so you can ask for land air or naval units: unit:IsInCategory('LAND') unit:IsInCategory('AIR') unit:IsInCategory('NAVAL')
unit:IsInCategory('LAND')
unit:IsInCategory('AIR')
unit:IsInCategory('NAVAL')
random Examples:
MOBILE * LAND * INDIRECTFIRE * DIRECTFIRE for land units that can attack other land units MOBILE * LAND * ANTIAIR for mobile Anti Air MOBILE * AIR * HIGHALTAIR for ASF MOBILE * AIR * TRANSPORTFOCUS for Air Transporter (if unit:IsInCategory('MOBILE') and unit:IsInCategory('AIR') and unit:IsInCategory('TRANSPORTFOCUS') then)
MOBILE * LAND * INDIRECTFIRE * DIRECTFIRE
MOBILE * LAND * ANTIAIR
MOBILE * AIR * HIGHALTAIR
MOBILE * AIR * TRANSPORTFOCUS
if unit:IsInCategory('MOBILE') and unit:IsInCategory('AIR') and unit:IsInCategory('TRANSPORTFOCUS') then
@Uveso said in Need some help on modding functions:
Use LOG commands to print debug text to the game.log. Like: if unit:IsInCategory('TRANSPORT') and unit:IsInCategory('TECH3') then LOG('Found Unit with category TRANSPORT*TECH3') if Ukills >= unit:GetBlueprint().Veteran.Level5 then
Is there any way we could use LOG to extract the blueprint of a specific unit ?
To Check For mobil units, you can use unit:IsInCategory('MOBILE') units have layer category, so you can ask for land air or naval units: unit:IsInCategory('LAND') unit:IsInCategory('AIR') unit:IsInCategory('NAVAL') random Examples: MOBILE * LAND * INDIRECTFIRE * DIRECTFIRE for land units that can attack other land units MOBILE * LAND * ANTIAIR for mobile Anti Air MOBILE * AIR * HIGHALTAIR for ASF MOBILE * AIR * TRANSPORTFOCUS for Air Transporter (if unit:IsInCategory('MOBILE') and unit:IsInCategory('AIR') and unit:IsInCategory('TRANSPORTFOCUS') then)
This might help me complete the coding. I will get back to you. Thanks a lot for these.
LOG( repr(BluePrint) )
repr() will print tables.
repr()
Don't use this on units or other user/c-objects.
@SupCom_16-12-20 said in Need some help on modding functions:
@speed2 said in Need some help on modding functions: Here's a list of categories https://wiki.faforever.com/index.php?title=Mission_Scripting#Categories Thanks. I will use this if I am doing a mission scripting. Now I am trying to work on skirmish game play. Actually I am looking for these 2 things. (1) category list for unit that is moving around (mobile type) and an attacking unit. (2) Blueprint for Tech 3 Transport unit. Thanks.
@speed2 said in Need some help on modding functions:
Here's a list of categories https://wiki.faforever.com/index.php?title=Mission_Scripting#Categories
Thanks. I will use this if I am doing a mission scripting. Now I am trying to work on skirmish game play.
Actually I am looking for these 2 things. (1) category list for unit that is moving around (mobile type) and an attacking unit.
(2) Blueprint for Tech 3 Transport unit.
Thanks.
Just bcause its in a mission scripting guide doesnt mean its not valid for the rest of the game.
@SupCom_16-12-20 said in Need some help on modding functions: @speed2 said in Need some help on modding functions: Here's a list of categories https://wiki.faforever.com/index.php?title=Mission_Scripting#Categories Thanks. I will use this if I am doing a mission scripting. Now I am trying to work on skirmish game play. Actually I am looking for these 2 things. (1) category list for unit that is moving around (mobile type) and an attacking unit. (2) Blueprint for Tech 3 Transport unit. Thanks. Just bcause its in a mission scripting guide doesnt mean its not valid for the rest of the game.
Ok, I keep that in mind.
unit:GetBlueprint().Veteran.Level1
Am I right to say Veteran.Level1 means, it is 1 star as shown below ?
and
unit:GetBlueprint().Veteran.Level2
means 2 stars ?
LOG( repr(BluePrint) ) repr() will print tables. Don't use this on units or other user/c-objects.
Ok thanks
unit:GetBlueprint() will get the blueprint from a unit.
unit:GetBlueprint()
local TableFromBlueprint = unit:GetBlueprint() LOG(TableFromBlueprint) -- this will print the whole blueprint into the game.log
You can do it directly without storing it in TableFromBlueprint :
LOG(unit:GetBlueprint()) -- this will print the whole blueprint into the game.log
unit:GetBlueprint().Veteran
local TableFromBlueprint = unit:GetBlueprint() LOG(TableFromBlueprint.Veteran) -- this will only print the Veteran table from the blueprint
same as before:
LOG(unit:GetBlueprint().Veteran) -- this will only print the Veteran table from the blueprint
output:
Veteran = { Level1 = 6, Level2 = 12, Level3 = 18, Level4 = 24, Level5 = 30, },
local TableFromBlueprint = unit:GetBlueprint() LOG(TableFromBlueprint.Veteran.Level2) -- this will print the value stored in Veteran/Level2
LOG(unit:GetBlueprint().Veteran.Level2) -- this will print the value stored in Veteran/Level2
12
unit:GetBlueprint().Veteran.Level1 Am I right to say Veteran.Level1 means, it is 1 star as shown below ? and unit:GetBlueprint().Veteran.Level2 means 2 stars ?
if it is, then something is wrong with my modified codes. I don't know where the bug is. The Star increased from 1 to 3 stars but the Ranking don't increase ?
The code for Tech 3 Air Transport unit
-- ONLY Tech 3 Transport Air units upgraded name if unit:IsInCategory('TRANSPORTFOCUS') and unit:IsInCategory('AIR') 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>" end end
Below is the complete codes.
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 else -- others mobile units that moves around such as land, air and naval units upgraded name if ( unit:IsInCategory('NAVAL') or unit:IsInCategory('LAND') or unit:IsInCategory('AIR') ) and ( unit:IsInCategory('TECH2') or unit:IsInCategory('TECH3') or unit:IsInCategory('EXPERIMENTAL') ) then if unit:IsInCategory('DIRECTFIRE') or unit:IsInCategory('INDIRECTFIRE') then if Ukills >= unit:GetBlueprint().Veteran.Level5 then newName = "[~[Top Rank: Commander]~]" elseif Ukills >= unit:GetBlueprint().Veteran.Level4 then newName = "[=[2nd Rank: Genaral]=]" elseif Ukills >= unit:GetBlueprint().Veteran.Level3 then newName = "<<3rd Rank: Colonel>>" elseif Ukills >= unit:GetBlueprint().Veteran.Level2 or Ukills >= unit:GetBlueprint().Veteran.Level1 then newName = "3 stars for promotion" end end end end -- ONLY Tech 3 Transport Air units upgraded name if unit:IsInCategory('TRANSPORTFOCUS') and unit:IsInCategory('AIR') 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>" 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
Veterancy isnt based on the number of kills but on a killed mass.
Just check the code that adds the starts or the veterancy progress bar and you'll understand how it works. You can even hook that to rename your units so you dont have to do the same check again in your code.
I am hungry and just want to buy a loaf of bread, that is all. But in a foreign country it is that hard to do when people speak in language (Lua programming) I don't understand. I did try to clear this hurdle myself by checking the codes and testing the gameplay well into the night but without any good result.
I just need to know how to determine how many stars I have earned (stars shown in image below)
https://github.com/FAForever/fa/blob/deploy/fafdevelop/lua/ui/game/unitview.lua#L176-L191 and then lines 404-411
Thank you guys for helping guess I will have to give this up, not getting any result.
As a reminder that is FA > FAF Change. Not that I imagine that has particularly changed the how code would be hooked here.