A Beginner's Guide to Scripting Page 2: Difference between revisions

From The DarkMod Wiki
Jump to navigationJump to search
Fidcal (talk | contribs)
No edit summary
Petike (talk | contribs)
mNo edit summary
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
{{A Beginner's Guide to Scripting}}
{{A Beginner's Guide to Scripting}}
''written by Fidcal''


On this page we shall begin writing scripts that can perform real tasks in your fan missions.
On this page we shall begin writing scripts that can perform real tasks in your fan missions.
Line 8: Line 10:




==How to Activate or Frob, an Entity==
==How to Activate, Trigger, or Frob, an Entity==


Activating an entity is to trigger it into action eg, from a targetting entity or by the player frobbing it.  
Activating an entity is to trigger it into action eg, from a targetting entity. 'Frob' really means the player activates it while it is highlighted so strictly speaking we are just activating it from script, eg, to trigger a door to open or close.


First create a door in the test map and name it ''TestDoor''.
First create a door in the test map and name it ''TestDoor''.


From script we use the script event (command or instruction) ''activate''. As described in the [[A Beginner's Guide to Scripting#Creating a Function|Creating a Function]] section on the previous page, script events need to be used with an entity. Previously we used ''print'' with the sys entity, ie sys.print. Now we use the ''activate'' script event with our door entity...
From script we use the script event (command or instruction) ''activate''. As described in the [[A Beginner's Guide to Scripting#Creating a Function|Creating a Function]] section on the previous page, script events need to be used with an entity. Previously we used ''print'' with the sys entity, ie sys.print. Now we use the ''activate'' script event with our door entity - but we need to get the name of the door entity and tell the script compiler that the word is an entity name as described in the following section...


===Using a Named Entity in a Map from Script===
===Using a Named Entity in a Map from Script===


One easy way to refer to an entity in your map is to put the dollar sign $ at the front of the entity name. The script then knows it is an entity in your map. So we named the door we made ''TestDoor'' so in script we can refer to it as ''$TestDoor''. So, just as we joined ''sys'' with ''print'' to get ''sys.print'' we join ''$TestDoor'' with ''activate'' to get ''$TestDoor.activate''. You recall ''sys.print'' was then followed by the data in brackets - we put the text or values we wanted to print. With ''activate'' we have to put a triggering entity...
One easy way to refer to an entity in your map is to put the dollar sign $ at the front of the entity name. The script then knows it is an entity name in your map. So we named the door we made ''TestDoor'' so in script we can refer to it as ''$TestDoor''. So, just as we joined ''sys'' with ''print'' to get ''sys.print'' we join ''$TestDoor'' with ''activate'' to get ''$TestDoor.activate''.


===''activate's'' Triggering Entity===
You recall ''sys.print'' was then followed by the data in brackets - we put the text or values we wanted to print. With ''activate'' we have to put a triggering entity as described in the next section...


The data in brackets that follows ''activate'' is a triggering entity. Where there is no particular triggering entity needed use ''player1'' which, preceded by $ becomes ''$player1''. So...
===The Triggering Entity===
 
The data in brackets that follows ''activate'' must be a triggering entity. Where there is no special triggering entity needed, use ''player1'' which, preceded by $ to indicate it is an entity, becomes ''$player1''. So...


===The Complete ''activate'' System Event===
===The Complete ''activate'' System Event===
Line 28: Line 32:
Our complete system event is thus ''$TestDoor.activate($player1)''
Our complete system event is thus ''$TestDoor.activate($player1)''


So now we are ready to include this in our script...
==The script to Activate an Entity==
We can use the same script function we wrote to send debug text to the console in the first page of this tutorial. Delete any extras about declaring and printing variables to leave just...


void SendToConsole()
{
  sys.print("\n\nYour script is running");
}


WORK IN PROGRESS...............
Rename the function to something like ''TriggerDoor'' or ''ActivateDoor'' or even ''FrobDoor'' whatever you like. Then insert our activate line under the sys.print line. Finally, let's put a comment line at the top to get into the habit of documenting our scripts so we, and others, know what they do. So the script function should now look something like this....
 
// JoeBloggs: this script triggers a door to open and close in a test map
void FrobDoor()
{
sys.print("\n\nYour script is running");
$TestDoor.activate($player1);
}
 
One last thing is needed to get this to work in our map. Change the function name in the call property of the target_tdm_callscriptfunction entity. Remember, this is the entity that actually starts the script working when triggered by the lever in our test map. So, the property should now be something like...
 
call FrobDoor.
 
All that remains is to map the map in Dark Mod and try it out. Each time you frob the lever the door should open and close remotely. If it fails to work:
 
* Check you can see 'Your script is running' in the console.
* Check every detail in the script is correct. A tiny typo and it might not work at all.
* Check the 'call' property in your ''target_tdm_callscriptfunction'' entity has the value that matches the name of the script function in your script file.
* Check the name of the door entity matches that in the ''$TestDoor.activate($player1);'' system event line in your script.






WORK IN PROGRESS...............




Line 39: Line 72:
{{A Beginner's Guide to Scripting}}
{{A Beginner's Guide to Scripting}}


{{tutorial-scripting}}
[[Category:Tutorial]]
[[Category:Editing]]
[[Category:Scripting]]
[[Category:Scripting Tutorials]]

Latest revision as of 05:21, 20 October 2018

"Teach Yourself Scripting In One Day!" by Fidcal

Page 1 | Page 2 | Page 3


written by Fidcal

On this page we shall begin writing scripts that can perform real tasks in your fan missions.

  • You should already understand the scripting essentials described on the previous page.
  • You should have created a simple reasonably large one room map named testScripts.map as described on the previous page at Create a Test Map
  • You should have created a script file named testScripts.script in the same folder as the map file as described on the previous page at Creating a Script File


How to Activate, Trigger, or Frob, an Entity

Activating an entity is to trigger it into action eg, from a targetting entity. 'Frob' really means the player activates it while it is highlighted so strictly speaking we are just activating it from script, eg, to trigger a door to open or close.

First create a door in the test map and name it TestDoor.

From script we use the script event (command or instruction) activate. As described in the Creating a Function section on the previous page, script events need to be used with an entity. Previously we used print with the sys entity, ie sys.print. Now we use the activate script event with our door entity - but we need to get the name of the door entity and tell the script compiler that the word is an entity name as described in the following section...

Using a Named Entity in a Map from Script

One easy way to refer to an entity in your map is to put the dollar sign $ at the front of the entity name. The script then knows it is an entity name in your map. So we named the door we made TestDoor so in script we can refer to it as $TestDoor. So, just as we joined sys with print to get sys.print we join $TestDoor with activate to get $TestDoor.activate.

You recall sys.print was then followed by the data in brackets - we put the text or values we wanted to print. With activate we have to put a triggering entity as described in the next section...

The Triggering Entity

The data in brackets that follows activate must be a triggering entity. Where there is no special triggering entity needed, use player1 which, preceded by $ to indicate it is an entity, becomes $player1. So...

The Complete activate System Event

Our complete system event is thus $TestDoor.activate($player1)

So now we are ready to include this in our script...

The script to Activate an Entity

We can use the same script function we wrote to send debug text to the console in the first page of this tutorial. Delete any extras about declaring and printing variables to leave just...

void SendToConsole()
{
 	sys.print("\n\nYour script is running");
}

Rename the function to something like TriggerDoor or ActivateDoor or even FrobDoor whatever you like. Then insert our activate line under the sys.print line. Finally, let's put a comment line at the top to get into the habit of documenting our scripts so we, and others, know what they do. So the script function should now look something like this....

// JoeBloggs: this script triggers a door to open and close in a test map

void FrobDoor()
{
	sys.print("\n\nYour script is running");
	$TestDoor.activate($player1);
}

One last thing is needed to get this to work in our map. Change the function name in the call property of the target_tdm_callscriptfunction entity. Remember, this is the entity that actually starts the script working when triggered by the lever in our test map. So, the property should now be something like...

call FrobDoor.

All that remains is to map the map in Dark Mod and try it out. Each time you frob the lever the door should open and close remotely. If it fails to work:

  • Check you can see 'Your script is running' in the console.
  • Check every detail in the script is correct. A tiny typo and it might not work at all.
  • Check the 'call' property in your target_tdm_callscriptfunction entity has the value that matches the name of the script function in your script file.
  • Check the name of the door entity matches that in the $TestDoor.activate($player1); system event line in your script.


WORK IN PROGRESS...............


"Teach Yourself Scripting In One Day!" by Fidcal

Page 1 | Page 2 | Page 3