OFPEC tags: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "\[\[[Cc]ategory:ArmA:[ _]?([^|]+)\]\]" to "{{GameCategory|arma1|$1}}")
m (Text replacement - "\{\{( *)Informative( *)\|" to "{{$1Feature$2|$2Informative$2|")
Line 13: Line 13:
* Addon PBO names - this is less true in {{arma3}} since mod management is made through Steam.
* 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.}}
{{Feature | 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.}}




Line 24: Line 24:
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.
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 |
{{Feature | Informative |
* See the [http://www.ofpec.com/tags/ OFPEC Tags page] - [http://www.ofpec.com/forum/index.php?action{{=}}register an account] is required in order to register a tag.
* See the [http://www.ofpec.com/tags/ OFPEC Tags page] - [http://www.ofpec.com/forum/index.php?action{{=}}register an account] is required in order to register a tag.
* A Biki Backup exists at [[OFPEC tag list]].
* A Biki Backup exists at [[OFPEC tag list]].
Line 52: Line 52:
* followed by an '''underscore''' <tt>_</tt>
* followed by an '''underscore''' <tt>_</tt>


{{Informative | Following the regex {{Inline code|^[A-Z][A-Z0-9]{2,4}$<nowiki/>}}.}}
{{Feature | Informative | Following the regex {{Inline code|^[A-Z][A-Z0-9]{2,4}$<nowiki/>}}.}}





Revision as of 01:01, 7 February 2021

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.
It is 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.


Tag Rules

Valid Invalid
  • ARMA_Variable
  • ABC_Variable
  • A5555_Variable
  • 1ST_Variable
  • A_Variable
  • A234567_Variable
  • AbC_Variable
  • ABCVariable

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 _
Following the regex ^[A-Z][A-Z0-9]{2,4}$.


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 MYTAG_Ranger: B_Soldier_F
{
	displayName = "MYTAG Ranger";
	model="\MYTAG_Rangers\MYTAG_Ranger";
}

this would use MYTAG_Rangers.pbo and MYTAG_Ranger.p3d files

Example 3

class CfgAmmo
{
	class Default {};
	class BulletSingle : Default {};
	class BulletBurst : BulletSingle {};
	class KozliceShell : BulletBurst {};
	class MYTAG_RemShell : KozliceShell
	{
		hit = 6;
		indirectHit = 6;
		indirectHitRange = 0.2;
	};
};

class CfgWeapons
{
	class Default {};
	class MGun : Default {};
	class Riffle: MGun {};
	class KozliceShell : Riffle {};
	class MYTAG_RemShell : KozliceShell
	{
		picture = "\MYTAG_Delta\MYTAG_m_kozlice2.paa";
		###
		ammo = MYTAG_RemShell;
		###
		sound[] = { "\MYTAG_Delta\MYTAG_shotgun.wav", db0, 1 };
		reloadMagazineSound[] = { "\MYTAG_Delta\MYTAG_shotgunreload.wav", db-80, 1 };
	};
	class Kozlice {};
	class MYTAG_Remington : Kozlice
	{
		displayName = "MYTAG_Remington";
		model = "\MYTAG_Delta\MYTAG_Remington";
		picture = "\MYTAG_Delta\MYTAG_w_kozlice.paa";
		muzzles[] = {MYTAG_RemingtonShellMuzzle};
		class MYTAG_RemingtonShellMuzzle : MYTAG_RemShell
		{
			magazines[] = { MYTAG_RemShell };
		}
	};
};

class CfgNonAIVehicles
{
	class ProxyWeapon {};
	class ProxyMYTAG_Remington: ProxyWeapon {};
};

This would be stored in MYTAG_Delta.pbo and use the MYTAG_Remington.p3d file.