Category | Scripting |
Created | 11.10.2021 09:58 |
@ Squity (Squity) | 11.10.2021 09:58 |
---|---|
This guide refers to FS19 and things may change. I'm also new to FS scripting so please be patient and correct me if i'm doing something wrong. #1 - Prepare the game for development ## Enable development mode that allow you to see the game logs/console in game, the console can be opened by pressing the keyboard key positioned above Tab key, pressing the key twice will allow you to input commands. Go in <My games/Farming Simulartor19>/game.xml and set controls to true: <development> <controls>true</controls> </development> #2 - Create your mod folder myModName in mods folder and the modDesc.xml file, for this file you can copy most of the stuff from other mods. #3 - Create a myScript.lua file and put it in myModName folder, below are some examples on how to include it in modDesc.xml file in order to be loaded by the game. ## Basic way to include the script in modDesc.xml <extraSourceFiles> <sourceFile filename="myScript.lua" /> </extraSourceFiles> -- You can include multiple scripts files and then use the myScript Class created later in this guide in your file to reach for the main script. ## Another way is by using the AddSpecialization.lua script (you need to get the script file from other mods, search for it online). <extraSourceFiles> <sourceFile filename="AddSpecialization.lua" /> </extraSourceFiles> <addSpecialization> <specialization name="myScript" className="myScript" filename="myScript.lua" debug="false"> <restrictions state="0" name="drivable" /> </specialization> </addSpecialization> -- The AddSpecialization.lua script will allow you to register for events fired when things happens on vehicles, for instance you can do this in your script: myScript.specialization = {}; function myScript.prerequisitesPresent(specializations) return SpecializationUtil.hasSpecialization(Drivable, specializations); end -- Register specialization events function myScript.registerEventListeners(vehicleType) SpecializationUtil.registerEventListener(vehicleType, "onEnterVehicle", myScript.specialization); -- onLeaveVehicle is also available. end function myScript.specialization:onEnterVehicle() -- DO YOUR STUFF end #4 - Capture game events in your mod myScript.lua, the myScript Class has to be created and attached to the mod event listener game function: myScript = {}; local myScript_mt = Class(myScript); addModEventListener(myScript); function myScript:draw() -- Render your text or images on screen (called at every frame draw?) end function myScript:update(dt) -- The update function is a function that is called after every frame. The parameter dt is the time that has passed since the last update call in milliseconds. end function myScript:loadMap() -- Savegame map is loaded end function myScript:mouseEvent(posX, posY, isDown, isUp, button) -- When the mouse is moved or mouse buttons are pressed. end -- For keyboard inputs see how registerActionEvents() is used on other mods, you need to define the input key and action in modDesc.xml and then attach the key listener in myScript.lua -- etc... #5 - Important game global variables g_inputBinding -- Contains all input related stuff, properties, events, attach listeners. g_currentMission -- Contains player related stuff, properties, events, attach listeners, enter/exit vehicles, farm, current vehicle (g_currentMission.controlledVehicle) g_i18n -- Localization stuff and strings g_screenAspectRatio g_screenWidth g_screenHeight g_referenceScreenWidth g_referenceScreenHeight -- Save g_currentModName and g_currentModDirectory to your local scope or to myScript Class since they may be available only in the global scope when the mod is loaded. myScript.modName = g_currentModName; myScript.modDir = g_currentModDirectory; #6 - Useful stuff ## Fast way to edit your myScript.lua and reload the game, create a console command that restarts your savegame. function myScript:restartMySavegame() if g_server then restartApplication(true, " -autoStartSavegameId 6"); -- FS22 restart application -- OLD FS19 command: restartApplication(" -autoStartSavegameId 6"); -- 6 is the savegame number used by me to test my mods, you can change the number to your savegame nr. end end function myScript:loadMap(name) -- Note: You don't need to duplicate the loadMap listener. addConsoleCommand('restartMySavegame', 'Restart my savegame', 'restartMySavegame', self); -- Add a console command when the mod is loaded, you can call this command from in game console and quickly restart the savegame. end ## LUA Print stuff in console/log.txt file print("This is my text") print("This is my variable: " ..tostring(yourVariable)) -- with the two dots ".." you can concatenate stuff print_r(myScript) -- Print all table contents. ## NOTES: -- the self is defined only if you call the function like this: myScript:myFn() calling the function with the dot works but will not define the self variable myScript.myFn() function myScript:myFn() -- self is myScript Class. end myScript:myFn(); |
Hungrycowdesign (HungryCow212) | 10.11.2021 14:31 |
---|---|
Thanks for this! I have a lot of experience with low-level languages such as C, but I'm just getting started with object oriented languages and scripts. This is extremely helpful. Thanks again! |
Kal Sarwar (KhalidIbn) | 13.11.2021 14:23 |
---|---|
Thanks for this, I don't have FS19 but was looking at what the SDK would let you do. Hopefully most of this will be applicable to FS22. |
Marciel Grutzmann (Marciel032) | 19.11.2021 19:49 |
---|---|
Thank you so much, I realy need this. |
Olivier Beauchemin (obeauchemin) | 23.11.2021 19:14 |
---|---|
Very nice. It could be helpful too to show how debugging works with Giant Remote Debugger or how to set up a minimal development environment. |
Holger Tangemann (Holger1607) | 22.12.2021 14:38 |
---|---|
Your code for automatically reload the savegame is not working with FS22 - the reason is a missing parameter. Don't write: restartApplication(" -autoStartSavegameId 6") --6 is only the Savgame placeholder better write: restartApplication( true, " -autoStartSavegameId 6" ) |
Josh Benoit (CaffeinatedCM) | 10.01.2022 00:31 |
---|---|
The restartApplication isn't auto loading my savegame, I'm using the " restartApplication( true, " -autoStartSavegameId 6" )" and my save id is 6, any ideas? (I'm in FS22) |
Antonis L (antonis78) | 11.01.2022 00:13 |
---|---|
@ Squity Hello. Thank you very much for this guide. Is it possible to send you PM for a little help if you can? Best regards |
@ Squity (Squity) | 23.01.2022 07:55 |
---|---|
Hi, happy to help you all. Thank you @Holger, i've edited the code in my example. I well keep an eye on this thread and try to update the script to FS22. @Antonis, you can get better help by posting in this forum. |
Gordo Ismyname (gordoismyname) | 06.02.2022 05:42 |
---|---|
i wish there were more posts like this one on the forum. it is really helpful! |
Gordo Ismyname (gordoismyname) | 06.02.2022 05:43 |
---|---|
i wish there were more posts like this one on the forum. it is really helpful! |
Tobias Schumacher (NeoPrince) | 22.02.2022 22:36 |
---|---|
@ Squity you sir are awesome. You saved me a ton of work with this restartApplication( true, " -autoStartSavegameId 6" ) |
@ Squity (Squity) | 26.02.2022 09:06 |
---|---|
Happy to help @Tobias You can work even faster if you create a shortcut on windows and append the restart string with your savegame nr. After creating a duplicate of fs22 launching shortcut you can edit the shortcut properties (right click on shortcut -> Properties) and modify the Target: "C:\Program Files (x86)\Farming Simulator 22\x64\FarmingSimulator2022Game.exe" -autoStartSavegameId 3 Then you can launch the game directly to your savegame, and in window mode you can close the game and start again faster with the shortcut. |
Note: Log in to post. Create a new account here.