OFPEC tags: Difference between revisions
Lou Montana (talk | contribs) m (Text replacement - "[[Category:ArmA 2: Editing" to "[[Category:Arma 2: Editing") |
Lou Montana (talk | contribs) (Page refresh) |
||
Line 1: | Line 1: | ||
{{SideTOC}} | |||
A Tag, also referred as [[OFPEC]] tag, is a three to five characters identifier that is individual to each designer, and allows for proper distinction between different authors' content. | |||
If an addon does not have a tag it could cause a conflict with another addon: this can cause your mission, game (or even your whole computer depending on the game) to crash. | |||
Tags are used in the following '''mod/addon''' contents: | |||
* [[Identifier#Recommendations|Global variables]] | |||
* [[Arma 3 Functions Library#Tag|Function names]] | |||
* New classes (in config.cpp files) | * New classes (in config.cpp files) | ||
* P3D names | |||
* Addon PBO names - this is less true in {{arma3}} since mod management is made through Steam. | |||
{{Informative | It is [[Code Best Practices#Variable format|good practice]] for mission makers to use tags for global variables, but at present it is not compulsory.}} | |||
== History == | |||
Tags were originally introduced by [[OFPEC]] in 2002 as a way of avoiding conflicts between different addons. | |||
The system was so effective that it was officially adopted by BI as a requirement for their [[Addons at Ease]] initiative. | |||
Today, every respectable addon maker has their own individual tag. | |||
OFPEC have created a list of all these tags, so that people can see who registered which tag in order to avoid a tag usage conflict. | |||
{{Informative | | |||
* See the [http://www.ofpec.com/tags/ OFPEC Tags page] | |||
** to register a tag, an account is required: [http://www.ofpec.com/forum/index.php?action{{=}}register click here to register/login]. | |||
* A Biki Backup exists at [[OFPEC tag list]]. | |||
}} | |||
==Tag Rules== | == Tag Rules == | ||
{| class="wikitable" style="float: right; margin-left: 1em" | |||
! Valid !! Invalid | |||
|- | |||
| style="vertical-align: top" | | |||
* ARMA_Variable | |||
* ABC_Variable | |||
* A5555_Variable | |||
| | |||
* {{Color|red|1}}ST_Variable | |||
* {{Color|red|A}}_Variable | |||
* A2345{{Color|red|67}}_Variable | |||
* A{{Color|red|b}}C_Variable | |||
* AB{{Color|red|CV}}ariable | |||
|} | |||
Tags must: | |||
* be composed of letters and eventually numbers | |||
* be 3 to 5 characters long | |||
* be uppercase | |||
* start with a letter | |||
* followed by an '''underscore''' <tt>_</tt> | |||
{{note| Following the regex {{Inline code|[A-Z][A-Z0-9]{2,4}<nowiki/>}}.}} | |||
== Examples == | |||
=== Example 1 === | |||
{{cc|considering {{Color|purple|MYTAG}} is the current tag}} | |||
[[player]] [[setVariable]] ["{{Color|purple|MYTAG}}_hasDocuments", [[false]]]; | |||
{{cc|...}} | |||
[[waitUntil]] { [[sleep]] 1; [[player]] [[getVariable]] ["{{Color|purple|MYTAG}}_hasDocuments", [[false]]] }; | |||
{{Color|purple|MYTAG}}_DocumentsGrabbed = [[true]]; | |||
[[publicVariable]] {{Color|purple|MYTAG}}_DocumentsGrabbed; | |||
== | === Example 2 === | ||
<syntaxhighlight lang="cpp"> | |||
class TAG_Ranger: B_Soldier_F | |||
{ | |||
displayName = "TAG Ranger"; | |||
model="\TAG_Rangers\TAG_Ranger"; | |||
} | |||
</syntaxhighlight> | |||
this would use | this would use <tt>TAG_Rangers'''.pbo'''</tt> and <tt>TAG_Ranger'''.p3d'''</tt> files | ||
=== Example 3 === | |||
<syntaxhighlight lang="cpp"> | |||
class CfgAmmo | |||
{ | |||
class Default {}; | |||
class BulletSingle : Default {}; | |||
class BulletBurst : BulletSingle {}; | |||
class KozliceShell : BulletBurst {}; | |||
class TAG_RemShell : KozliceShell | |||
{ | |||
hit = 6; | |||
indirectHit = 6; | |||
indirectHitRange = 0.2; | |||
}; | |||
}; | |||
class CfgWeapons | |||
{ | |||
class Default {}; | |||
class MGun : Default {}; | |||
class Riffle: MGun {}; | |||
class KozliceShell : Riffle {}; | |||
class TAG_RemShell : KozliceShell | |||
{ | |||
picture = "\TAG_Delta\TAG_m_kozlice2.paa"; | |||
### | |||
ammo = TAG_RemShell; | |||
### | |||
sound[] = { "\TAG_Delta\TAG_shotgun.wav", db0, 1 }; | |||
reloadMagazineSound[] = { "\TAG_Delta\TAG_shotgunreload.wav", db-80, 1 }; | |||
}; | |||
class Kozlice {}; | |||
class TAG_Remington : Kozlice | |||
{ | |||
displayName = "TAG_Remington"; | |||
model = "\TAG_Delta\TAG_Remington"; | |||
picture = "\TAG_Delta\TAG_w_kozlice.paa"; | |||
muzzles[] = {TAG_RemingtonShellMuzzle}; | |||
class TAG_RemingtonShellMuzzle : TAG_RemShell | |||
{ | |||
magazines[] = { TAG_RemShell }; | |||
} | |||
}; | |||
}; | |||
class CfgNonAIVehicles | |||
{ | |||
class ProxyWeapon {}; | |||
class ProxyTAG_Remington: ProxyWeapon {}; | |||
}; | |||
</syntaxhighlight> | |||
This would be stored in <tt>TAG_Delta'''.pbo'''</tt> and use the <tt>TAG_Remington'''.p3d'''</tt> file. | |||
[[Category:Operation Flashpoint: Editing]] | [[Category:Operation Flashpoint: Editing]] | ||
[[Category:ArmA: Editing]] | [[Category:ArmA: Editing]] | ||
[[Category:Arma 2: Editing]] | [[Category:Arma 2: Editing]] | ||
[[Category:Arma 3: Editing]] | |||
[[Category:Take On Helicopters: Editing]] | [[Category:Take On Helicopters: Editing]] |
Revision as of 12:43, 3 May 2020
Template:SideTOC A Tag, also referred as OFPEC tag, is a three to five characters identifier that is individual to each designer, and allows for proper distinction between different authors' content.
If an addon does not have a tag it could cause a conflict with another addon: this can cause your mission, game (or even your whole computer depending on the game) to crash.
Tags are used in the following mod/addon contents:
- Global variables
- Function names
- New classes (in config.cpp files)
- P3D names
- Addon PBO names - this is less true in Arma 3 since mod management is made through Steam.
History
Tags were originally introduced by OFPEC in 2002 as a way of avoiding conflicts between different addons. The system was so effective that it was officially adopted by BI as a requirement for their Addons at Ease initiative. Today, every respectable addon maker has their own individual tag.
OFPEC have created a list of all these tags, so that people can see who registered which tag in order to avoid a tag usage conflict.
Tag Rules
Valid | Invalid |
---|---|
|
|
Tags must:
- be composed of letters and eventually numbers
- be 3 to 5 characters long
- be uppercase
- start with a letter
- followed by an underscore _
Examples
Example 1
// considering MYTAG is the current tag player setVariable ["MYTAG_hasDocuments", false]; // ... waitUntil { sleep 1; player getVariable ["MYTAG_hasDocuments", false] }; MYTAG_DocumentsGrabbed = true; publicVariable MYTAG_DocumentsGrabbed;
Example 2
class TAG_Ranger: B_Soldier_F
{
displayName = "TAG Ranger";
model="\TAG_Rangers\TAG_Ranger";
}
this would use TAG_Rangers.pbo and TAG_Ranger.p3d files
Example 3
class CfgAmmo
{
class Default {};
class BulletSingle : Default {};
class BulletBurst : BulletSingle {};
class KozliceShell : BulletBurst {};
class TAG_RemShell : KozliceShell
{
hit = 6;
indirectHit = 6;
indirectHitRange = 0.2;
};
};
class CfgWeapons
{
class Default {};
class MGun : Default {};
class Riffle: MGun {};
class KozliceShell : Riffle {};
class TAG_RemShell : KozliceShell
{
picture = "\TAG_Delta\TAG_m_kozlice2.paa";
###
ammo = TAG_RemShell;
###
sound[] = { "\TAG_Delta\TAG_shotgun.wav", db0, 1 };
reloadMagazineSound[] = { "\TAG_Delta\TAG_shotgunreload.wav", db-80, 1 };
};
class Kozlice {};
class TAG_Remington : Kozlice
{
displayName = "TAG_Remington";
model = "\TAG_Delta\TAG_Remington";
picture = "\TAG_Delta\TAG_w_kozlice.paa";
muzzles[] = {TAG_RemingtonShellMuzzle};
class TAG_RemingtonShellMuzzle : TAG_RemShell
{
magazines[] = { TAG_RemShell };
}
};
};
class CfgNonAIVehicles
{
class ProxyWeapon {};
class ProxyTAG_Remington: ProxyWeapon {};
};
This would be stored in TAG_Delta.pbo and use the TAG_Remington.p3d file.