Serc – User
Lou Montana (talk | contribs) m (Text replacement - " (={2,})([^ = ])(.*)([^ = ])(={2,}) * " to " $1 $2$3$4 $5 ")  | 
				Lou Montana (talk | contribs)  m (Text replacement - "<code>" to "<code style="display: block">")  | 
				||
| Line 5: | Line 5: | ||
== Syntax ==  | == Syntax ==  | ||
Classes could be compared to folders. There is a folder for every object in ArmA. In every folder there are files which we will call attributes. A class definition with an attribute will look like this:  | Classes could be compared to folders. There is a folder for every object in ArmA. In every folder there are files which we will call attributes. A class definition with an attribute will look like this:  | ||
<code>class name {  | <code style="display: block">class name {  | ||
	attribute = value;  | 	attribute = value;  | ||
};  | };  | ||
| Line 11: | Line 11: | ||
There could also be an array of attributes.  | There could also be an array of attributes.  | ||
<code>class name {  | <code style="display: block">class name {  | ||
	attribute = value;  | 	attribute = value;  | ||
	attributeArray[] = {value1,value2,value3};  | 	attributeArray[] = {value1,value2,value3};  | ||
| Line 17: | Line 17: | ||
There can't be two same classnames in a config. For example  | There can't be two same classnames in a config. For example  | ||
<code>class test {  | <code style="display: block">class test {  | ||
	attribute = value;  | 	attribute = value;  | ||
};  | };  | ||
| Line 27: | Line 27: | ||
will NOT work!  | will NOT work!  | ||
Same goes for two definitions of an attribute in one class.    | Same goes for two definitions of an attribute in one class.    | ||
<code>class test {  | <code style="display: block">class test {  | ||
	attribute = value;  | 	attribute = value;  | ||
	attribute = value;  | 	attribute = value;  | ||
| Line 37: | Line 37: | ||
With inheritance you can create a dependency of a object to a parent object. This saves you a lot of typing and makes it easier to maintain. A parent class is usually a generalisation. A Stryker for example is an APC and an APC is a ground vehicle.  | With inheritance you can create a dependency of a object to a parent object. This saves you a lot of typing and makes it easier to maintain. A parent class is usually a generalisation. A Stryker for example is an APC and an APC is a ground vehicle.  | ||
We can inherit from another class by adding ''': className''' to our class. But the class needs to be present in the config. Like here:  | We can inherit from another class by adding ''': className''' to our class. But the class needs to be present in the config. Like here:  | ||
<code>class parentClass {  | <code style="display: block">class parentClass {  | ||
	attribute = value;  | 	attribute = value;  | ||
};  | };  | ||
| Line 47: | Line 47: | ||
If it is not present, we can reference it. Note the missing {}.  | If it is not present, we can reference it. Note the missing {}.  | ||
<code>'''class parentClass;'''  | <code style="display: block">'''class parentClass;'''  | ||
class childClass : parentClass {  | class childClass : parentClass {  | ||
	additionalAttribute = value;  | 	additionalAttribute = value;  | ||
| Line 53: | Line 53: | ||
Attributes from parent classes can easily be redefined (which is different from overwritten).  | Attributes from parent classes can easily be redefined (which is different from overwritten).  | ||
<code><nowiki>class parentClass {  | <code style="display: block"><nowiki>class parentClass {  | ||
	parentAttribute = value;  | 	parentAttribute = value;  | ||
};  | };  | ||
| Line 73: | Line 73: | ||
=== Block Comment ===  | === Block Comment ===  | ||
A  block comment is initiated by '''/*''' and lasts until the next '''*/'''. It can comment out multiple lines or less than a line.  | A  block comment is initiated by '''/*''' and lasts until the next '''*/'''. It can comment out multiple lines or less than a line.  | ||
<code>/* i an a comment block <br>  | <code style="display: block">/* i an a comment block <br>  | ||
and it works over multiple lines <br>  | and it works over multiple lines <br>  | ||
until its over */</code>  | until its over */</code>  | ||
<code>notCommentedAttribute = /* commentedValue */ notCommentedValue;</code>  | <code style="display: block">notCommentedAttribute = /* commentedValue */ notCommentedValue;</code>  | ||
== Formatting ==  | == Formatting ==  | ||
| Line 83: | Line 83: | ||
=== Example 1 ===  | === Example 1 ===  | ||
<code>class name {  | <code style="display: block">class name {  | ||
	attribute = value;  | 	attribute = value;  | ||
};  | };  | ||
| Line 89: | Line 89: | ||
=== Example 2 ===  | === Example 2 ===  | ||
<code>class name    | <code style="display: block">class name    | ||
{  | {  | ||
	attribute = value;  | 	attribute = value;  | ||
| Line 95: | Line 95: | ||
=== Example 3 ===  | === Example 3 ===  | ||
<code>class name {attribute1 = value;};</code>  | <code style="display: block">class name {attribute1 = value;};</code>  | ||
== Preprocessor Commands ==  | == Preprocessor Commands ==  | ||
| Line 105: | Line 105: | ||
  #define variableName value  |   #define variableName value  | ||
Usage:  | Usage:  | ||
<code><nowiki>#define BASE_COLOR {0,0,0,0}  | <code style="display: block"><nowiki>#define BASE_COLOR {0,0,0,0}  | ||
class button {  | class button {  | ||
| Line 118: | Line 118: | ||
== Example Config ==  | == Example Config ==  | ||
<code><nowiki>  | <code style="display: block"><nowiki>  | ||
class cfgPatches {  | class cfgPatches {  | ||
	class PBONAME {  | 	class PBONAME {  | ||
Latest revision as of 11:52, 11 January 2023
Basic Config File
ATTENTION! This is far from being valuable information for anyone but contributors.
Syntax
Classes could be compared to folders. There is a folder for every object in ArmA. In every folder there are files which we will call attributes. A class definition with an attribute will look like this:
class name {
	attribute = value;
};
There could also be an array of attributes.
class name {
	attribute = value;
	attributeArray[] = {value1,value2,value3};
};
There can't be two same classnames in a config. For example
class test {
	attribute = value;
};
class test {
	attribute = value;
};
will NOT work!
Same goes for two definitions of an attribute in one class. 
class test {
	attribute = value;
	attribute = value;
};
Will not work!
Inheritance
With inheritance you can create a dependency of a object to a parent object. This saves you a lot of typing and makes it easier to maintain. A parent class is usually a generalisation. A Stryker for example is an APC and an APC is a ground vehicle.
We can inherit from another class by adding : className to our class. But the class needs to be present in the config. Like here:
class parentClass {
	attribute = value;
};
class childClass : parentClass {
	anotherAttribue = anotherValue;
};
If it is not present, we can reference it. Note the missing {}.
class parentClass;
class childClass : parentClass {
	additionalAttribute = value;
};
Attributes from parent classes can easily be redefined (which is different from overwritten).
class parentClass {
	parentAttribute = value;
};
class childClass : parentClass {
	parentAttribute = newValue;
};
Commenting
Line Comment
A line comment is initiated by // and lasts until the end of the line. Comments are ignored at runtime, so there can be anything in there, including valid code which should not be used.
//i am a comment
notCommentedAttribute = notCommentedValue; // commented
// commentedAttribute = commentedValue
Block Comment
A  block comment is initiated by /* and lasts until the next */. It can comment out multiple lines or less than a line.
/* i an a comment block 
and it works over multiple lines 
until its over */
notCommentedAttribute = /* commentedValue */ notCommentedValue;
Formatting
The layout and format is a matter of taste. The best formatting is the formatting which suits you best. It is advisable to make it as easily readable as possible by using a lot of whitespaces like linebreaks and indents. The examples 1 and 2 use a lot of whitespace but are easily readable while example 3 is remarkably shorter and much less readable. Especially with multiple attributes this gets confusing.
Example 1
class name {
	attribute = value;
};
Example 2
class name 
{
	attribute = value;
};
Example 3
class name {attribute1 = value;};
Preprocessor Commands
Preprocessor commands are processed before the config has been used.
define
The command define allows you to use variables in a config. Syntax:
#define variableName value
Usage:
#define BASE_COLOR {0,0,0,0}
class button {
	backgroundColor[] = BASE_COLOR;
};
include
This command merges another file into the file with this command. Allowed formats are .h and .hpp. Syntax:
#include "path\to\file.hpp";
Example Config
class cfgPatches {
	class PBONAME {
		requiredVersion = 1.0; // requires Arma 2 version 1.0
	};
};
class cfgVehicles {
	class SoldierWB; // a basic soldier class in ArmA
	class someNewSoldier : SoldierWB {
		displayName = "Rambo";
	};
};