MaHuJa/Sandbox – User

From Bohemia Interactive Community
Jump to navigation Jump to search
No edit summary
 
Line 38: Line 38:
=Script files=
=Script files=


.
<div style="float:right;border-left-style:double;border-bottom-style:double;border-top-style:thin;border-right-style:thin">There are two formats for script files, [[SQS]] and [[SQF]].<br/>
Use [[SQF]]: SQS are deprecated and will stop functioning at some point in time. Besides, [[SQF]] lends itself to readability and style.</div>
 
Obviously, these oneliners are of limited use when you want big things to happen. That's when script files come into play. These files are put alongside the mission.sqm which the editor makes, and get packed into the final pbo that you would give to others. In this section, I'll introduce how to create a system to 'buy weapons'.
 
I leave the enemies and all those little details to you.
 
In order to have a place to save these files, you first need to save your mission with a name. Your next job is to find that mission. It's under
My Documents/ArmA/Missions/''missionname.islandname'' (e.g. My Documents/ArmA/Missions/ScriptTutorial.Sara)
or My Documents/Arma Other Profiles/''Playername''/Missions/''missionname.islandname'' (e.g. My Documents/ArmA Other Profiles/MaHuJa/Missions/ScriptTutorial.Sara)
 
In that directory, you will find a file called mission.sqm - this is the file produced by the mission editor, and contains the type, placement, name, init script, and so on for every object you've placed, every trigger, marker, and so on. Optionally you could create files like [[briefing.html]] and [[description.ext]] but that's beyond the scope of this tutorial.
 
Create an empty file called init.sqf (''Init.sqf'' is a special name, and will be run by the game as the mission starts) and open it - notepad will do fine. (MS Word will probably not.) Here's what to put into it:
money = 0;
We need to set the money value. Like if we don't set up a bank account before we put money into it, bad things happen.
execvm "earnmoney.sqf";
This will start a script called earnmoney.sqf - which we will create later. ''[[Execvm]]'' is more or less a synonym for ''[[spawn]] [[compile]] [[loadfile]]'' - and the script is runs may continue to run in the background.
removeallweapons player;
This thing will make no sense if the player starts with good enough weapons, will it? (That command also removes magazines.)
 
Now, create a new blank file called earnmoney.sqf and choose one of the following:
 
Alternative 1: Time is money
while {true} do {
  sleep 60;
  money = money + 50;
  hint format ["You now have %1 dollars.",money];
}
 
Alternative 2: Travel is money
while {true} do {
  _pos = position player;
  sleep 60;
  _lump = player distance _pos;
  money = money + _lump/2;
  hint format ["You now have %1 dollars.",money];
}
The latter will force the player to move about, even though he is unarmed and there are enemies about.
 
 
 
=Dump for later use=
weapons = ["m16a2","m4","m4aim","m24"];
weaponscost = [100, 200, 250, 500];
stanag = "30Rnd_556x45_Stanag";
ammo = [stanag,stanag,stanag,"5Rnd_762x51_m24"];
 
[] execvm "moneytime.sqf"
Going over that line by line:
*''money = 0;'' sets a [[variable]] called money to 0. Otherwise it would be nil, which has a meaning along the lines of "not a number".
*''weapons = ["m16a2","m4","m4aim","m24"];'' creates an [[array]]
 
 
I'm going to introduce you to a good habit: Gather all magic values in one place.

Revision as of 15:44, 1 March 2007

This article assumes you are somewhat familiar with mission editing - without scripting.

Getting started with ArmAscript

Oneliners in the editor

The most basic form of scripting is the oneline scripts in various init fields, trigger on (de-)activation fields, and waypoint activation fields in the editor itself.

Example: Destroying a tank

A mission requires the player, and his two helpers, to get a tank parked a little behind the engagement area, and reinforce the front with it. However, as they approach the tank, it blows up. Now they have to find and punish the saboteurs. And perhaps go back to the front to help out in any way they can.

These steps can achieve that:

  • Create the player squad
  • Create the tank, name it "theTank"
  • Create a couple saboteurs hiding in some bushes a couple hundred meters nearby - preferrably not with line of sight to the tank so that they could start shooting the player early.
  • Create a trigger near to the tank (almost on top of) with both sizes set to 150. Set it to "west" "present". In the "on activation" field, type in the following:
theTank setdamage 1

Congratulations, you've just written your first script.

The demonstration mission itself needs a few things more, but which aren't important for this tutorial.

  • Briefing, all of that
  • Waypoints for the player group
  • Notification of changed goals
  • Victory condition triggers

Customized ammobox

Create an ammobox. (Give it the name ammo_one) In its init line, fill in

clearweaponcargo this; clearmagazinecargo this; this addweaponcargo ["m16a2",2]; this addmagazinecargo ["30Rnd_556x45_Stanag",30]

You've just created an ammobox that will contain two m16 rifles and 30 magazines for them. For the "scripting names" of weapons and ammunition, see here. For unofficial addons, the names are usually listed in a readme.

Whenever you are editing an object, like an ammobox, "this" has the special meaning of "this particular object". If you write the same thing for an "ammo_two" the lines there will not change the content of ammo_one. This allows copy/paste to be used to write it once and paste it everywhere, and it will affect the object it has been copied to. Had you written

clearweaponcargo ammo_one

instead, you'd always be clearing the contents of that first crate.


Script files

There are two formats for script files, SQS and SQF.
Use SQF: SQS are deprecated and will stop functioning at some point in time. Besides, SQF lends itself to readability and style.

Obviously, these oneliners are of limited use when you want big things to happen. That's when script files come into play. These files are put alongside the mission.sqm which the editor makes, and get packed into the final pbo that you would give to others. In this section, I'll introduce how to create a system to 'buy weapons'.

I leave the enemies and all those little details to you.

In order to have a place to save these files, you first need to save your mission with a name. Your next job is to find that mission. It's under My Documents/ArmA/Missions/missionname.islandname (e.g. My Documents/ArmA/Missions/ScriptTutorial.Sara) or My Documents/Arma Other Profiles/Playername/Missions/missionname.islandname (e.g. My Documents/ArmA Other Profiles/MaHuJa/Missions/ScriptTutorial.Sara)

In that directory, you will find a file called mission.sqm - this is the file produced by the mission editor, and contains the type, placement, name, init script, and so on for every object you've placed, every trigger, marker, and so on. Optionally you could create files like briefing.html and description.ext but that's beyond the scope of this tutorial.

Create an empty file called init.sqf (Init.sqf is a special name, and will be run by the game as the mission starts) and open it - notepad will do fine. (MS Word will probably not.) Here's what to put into it:

money = 0;

We need to set the money value. Like if we don't set up a bank account before we put money into it, bad things happen.

execvm "earnmoney.sqf";

This will start a script called earnmoney.sqf - which we will create later. Execvm is more or less a synonym for spawn compile loadfile - and the script is runs may continue to run in the background.

removeallweapons player;

This thing will make no sense if the player starts with good enough weapons, will it? (That command also removes magazines.)

Now, create a new blank file called earnmoney.sqf and choose one of the following:

Alternative 1: Time is money

while {true} do {
  sleep 60;
  money = money + 50;
  hint format ["You now have %1 dollars.",money];
}

Alternative 2: Travel is money

while {true} do {
  _pos = position player;
  sleep 60;
  _lump = player distance _pos;
  money = money + _lump/2;
  hint format ["You now have %1 dollars.",money];
}

The latter will force the player to move about, even though he is unarmed and there are enemies about.


Dump for later use

weapons = ["m16a2","m4","m4aim","m24"];
weaponscost = [100, 200, 250, 500];
stanag = "30Rnd_556x45_Stanag";
ammo = [stanag,stanag,stanag,"5Rnd_762x51_m24"];
[] execvm "moneytime.sqf"

Going over that line by line:

  • money = 0; sets a variable called money to 0. Otherwise it would be nil, which has a meaning along the lines of "not a number".
  • weapons = ["m16a2","m4","m4aim","m24"]; creates an array


I'm going to introduce you to a good habit: Gather all magic values in one place.