FAForever Forums
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Login

    Need some help on modding functions

    Scheduled Pinned Locked Moved I need help
    35 Posts 6 Posters 1.5k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • speed2S Offline
      speed2
      last edited by speed2

      The scripting language the game uses is called Lua. You can learn it here https://www.lua.org/pil/contents.html
      Going through that will answer 90% of your questions.

      S 1 Reply Last reply Reply Quote 0
      • S Offline
        SupCom_16-12-20 @speed2
        last edited by SupCom_16-12-20

        @speed2 said in Need some help on modding functions:

        The scripting language the game uses is called Lua. You can learn it here https://www.lua.org/pil/contents.html
        Going through that will answer 90% of your questions.

        Thanks, this is what I am looking for but to understand it is another question LOL.

        One more question - are the blue and white color texts a function ?
        Thanks again.

        1 Reply Last reply Reply Quote 0
        • S Offline
          SupCom_16-12-20
          last edited by SupCom_16-12-20

          This post is deleted!
          1 Reply Last reply Reply Quote 0
          • S Offline
            SupCom_16-12-20
            last edited by SupCom_16-12-20

            if unit:IsInCategory('MOBILE') then 
            

            (1) How do you use IsInCategory to select only units that moves around and is an attacking type of units.
            I tried the above but it also consider Factory and Engineer as Mobile ?

            (2) Any blueprint for Tech 3 Transport unit ?

            Thanks.

            1 Reply Last reply Reply Quote 0
            • speed2S Offline
              speed2
              last edited by

              Here's a list of categories https://wiki.faforever.com/index.php?title=Mission_Scripting#Categories

              S 1 Reply Last reply Reply Quote 0
              • UvesoU Offline
                Uveso
                last edited by

                hello SupCom_16-12-20 ,

                i guess you already figured out how to use table in tables ?
                If not, let me know.

                You will maybe find custom LUA commands inside the game.

                Here is a list of all commands you can use in SIM-STATE of the game:
                https://github.com/FAForever/fa/blob/deploy/fafdevelop/engine/Sim.lua

                And here a List of all commands you can use in the UI-STATE of the game:
                https://github.com/FAForever/fa/blob/deploy/fafdevelop/engine/User.lua

                You can't use SIM-STATE commands in UI-STATE of the game and vise versa.
                SIM-STATE commands are for the gamesimulation like moving units etc.
                UI-STATE commands are for the user Interface

                S 1 Reply Last reply Reply Quote 0
                • S Offline
                  SupCom_16-12-20 @speed2
                  last edited by

                  @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.

                  speed2S 1 Reply Last reply Reply Quote 0
                  • S Offline
                    SupCom_16-12-20 @Uveso
                    last edited by SupCom_16-12-20

                    @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.

                    1 Reply Last reply Reply Quote 0
                    • S Offline
                      SupCom_16-12-20
                      last edited by

                      This post is deleted!
                      1 Reply Last reply Reply Quote 0
                      • UvesoU Offline
                        Uveso
                        last edited by Uveso

                        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')

                        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)

                        S 2 Replies Last reply Reply Quote 0
                        • S Offline
                          SupCom_16-12-20 @Uveso
                          last edited by

                          @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 ?

                          1 Reply Last reply Reply Quote 0
                          • S Offline
                            SupCom_16-12-20 @Uveso
                            last edited by

                            @Uveso said in Need some help on modding functions:

                            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.

                            1 Reply Last reply Reply Quote 0
                            • UvesoU Offline
                              Uveso
                              last edited by

                              LOG( repr(BluePrint) )
                              

                              repr() will print tables.

                              Don't use this on units or other user/c-objects.

                              S 1 Reply Last reply Reply Quote 0
                              • speed2S Offline
                                speed2 @SupCom_16-12-20
                                last edited by

                                @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.

                                S 1 Reply Last reply Reply Quote 0
                                • S Offline
                                  SupCom_16-12-20 @speed2
                                  last edited by

                                  @speed2 said in Need some help on modding functions:

                                  @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.

                                  1 Reply Last reply Reply Quote 0
                                  • S Offline
                                    SupCom_16-12-20
                                    last edited by SupCom_16-12-20

                                    unit:GetBlueprint().Veteran.Level1
                                    

                                    Am I right to say Veteran.Level1 means, it is 1 star as shown below ?

                                    17a572a9-c7aa-48c3-aba4-d0fc85f82c55-image.png

                                    and

                                    unit:GetBlueprint().Veteran.Level2
                                    

                                    means 2 stars ?

                                    S 1 Reply Last reply Reply Quote 0
                                    • S Offline
                                      SupCom_16-12-20 @Uveso
                                      last edited by

                                      @Uveso said in Need some help on modding functions:

                                      LOG( repr(BluePrint) )
                                      

                                      repr() will print tables.

                                      Don't use this on units or other user/c-objects.

                                      Ok thanks

                                      1 Reply Last reply Reply Quote 0
                                      • UvesoU Offline
                                        Uveso
                                        last edited by

                                        unit:GetBlueprint().Veteran.Level2

                                        unit:GetBlueprint() will get the blueprint from a unit.

                                        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,
                                            },
                                        

                                        unit:GetBlueprint().Veteran.Level2

                                        local TableFromBlueprint = unit:GetBlueprint()
                                        LOG(TableFromBlueprint.Veteran.Level2)  -- this will print the value stored in Veteran/Level2
                                        

                                        same as before:

                                        LOG(unit:GetBlueprint().Veteran.Level2)  -- this will print the value stored in Veteran/Level2
                                        

                                        output:

                                        12
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • S Offline
                                          SupCom_16-12-20 @SupCom_16-12-20
                                          last edited by SupCom_16-12-20

                                          @SupCom_16-12-20 said in Need some help on modding functions:

                                          unit:GetBlueprint().Veteran.Level1
                                          

                                          Am I right to say Veteran.Level1 means, it is 1 star as shown below ?

                                          17a572a9-c7aa-48c3-aba4-d0fc85f82c55-image.png

                                          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
                                          

                                          e4a51295-b6a0-4596-b873-8cd77612e2f5-image.png

                                          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
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • speed2S Offline
                                            speed2
                                            last edited by

                                            Veterancy isnt based on the number of kills but on a killed mass.

                                            Dragun101D 1 Reply Last reply Reply Quote 0

                                            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                            With your input, this post could be even better 💗

                                            Register Login
                                            • First post
                                              Last post