Création d'un addon d'unités

la création de Mods et les Tutoriels liés au Modding.
Avatar de l’utilisateur
Wolf
Messages : 123
Inscription : 15 oct. 2012, 09:38

Création d'un addon d'unités

Message par Wolf » 06 févr. 2016, 15:20

Bonjour,
(oui je sors du bois ...)
Comment créer un mod d'unités venant de l'arsenal virtuel d'Arma3 ?
Quelque chose comme le mod @R3F_UNITES_ENI et certainement vos unités [V]Vétérans ou le Missing-Units-v19 de Sparfell.

Merci.
nobody is perfect

Avatar de l’utilisateur
Tyrghen
Membre des [V]Vétérans
Messages : 4119
Inscription : 14 oct. 2012, 22:47

Re: Création d'un addon d'unités

Message par Tyrghen » 07 févr. 2016, 19:35

Salut,

J'ai déplacé le message dans un nouveau fil pour que ce soit plus clair.

Partons du principe que l'extension de ton addon sera "MAD" (mon_addon).

En gros, tu dois faire un répertoire d'addon, "MAD_units", placer un fichier "config.cpp" à la racine de ce répertoire.
Dans un répertoire "ui" tu mets les icônes et les autres images (le drapeau de ta faction, etc.).

Ci-dessous, le contenu d'un config.cpp qui défini une nouvelle faction et une nouvelle unité et ce qui est nécessaire autour.

Code : Tout sélectionner

enum {
	OrdinalEnum = 2,
	destructengine = 2,
	destructdefault = 6,
	destructwreck = 7,
	destructtree = 3,
	destructtent = 4,
	stabilizedinaxisx = 1,
	stabilizedinaxesxyz = 4,
	stabilizedinaxisy = 2,
	stabilizedinaxesboth = 3,
	destructno = 0,
	stabilizedinaxesnone = 0,
	destructman = 5,
	destructbuilding = 1
};
class CfgPatches
{
	class MAD_addon_unite
	{
		units[] = {"MAD_Unite_F"};
		weapons[] = {"MAD_U_Uniforme_1"};
		requiredVersion = 0.1;
		requiredAddons[] = {"A3_Characters_F_BLUFOR"};
	};
};
class CfgFactionClasses {
	class MAD_Faction {
		displayname = "Nom de ma faction";
		flag = "\MAD_units\ui\flag_faction_co.paa";
		icon = "\MAD_units\ui\icon_faction_co.paa";
		priority = 10;
		side = 0;
	};
};
class CfgVehicles {
	class CAManBase;
	class SoldierEB: CAManBase
	{
		class EventHandlers;
		class Wounds;
	};
	
	class MAD_Unite_F: SoldierEB {
		scope = 2;
		cost = 40000;
		facetype = "Man_A3";
		faction = "MAD_Faction";
		model = "\A3\Characters_F\Civil\c_poloshirt";
		genericnames = "AfroMen";
		identitytypes[] = {"Head_African", "G_CIVIL_male"};
		uniformClass = "MAD_U_Uniforme_1";
		vehicleclass = "Afroamerican";
		weapons[] = {"arifle_TRG21_F", "Throw", "Put"};
		respawnweapons[] = {"arifle_TRG21_F", "Throw", "Put"};
		magazines[] = {"30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "HandGrenade", "HandGrenade", "SmokeShell", "SmokeShell", "SmokeShell", "SmokeShell"};
		respawnmagazines[] = {"30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "HandGrenade", "HandGrenade", "SmokeShell", "SmokeShell", "SmokeShell", "SmokeShell"};
		items[] = {"FirstAidKit","FirstAidKit"};
		respawnitems[] = {"FirstAidKit","FirstAidKit"};
		linkeditems[] = {"V_TacVest_blk"};
		respawnlinkeditems[] = {"V_TacVest_blk"};
	};
};
class cfgWeapons
{
	class Uniform_Base;
	class UniformItem;
	class ItemCore;
	class ItemInfo;
		
	class MAD_U_Uniforme_1: Uniform_Base {
		displayname = "Nom uniforme pour rebelle";
		model = "\A3\Characters_F\Common\Suitpacks\suitpack_blufor_diver";
		picture = "\A3\characters_f\data\ui\icon_U_Citizen_ca.paa";
		scope = 2;
		class ItemInfo: UniformItem {
			containerclass = "Supply30";
			mass = 30;
			uniformclass = "MAD_Unite_F";
			uniformmodel = "-";
		};
	};
};
Ce soir je suis assez chargé, mais si t'as d'autres questions, n'hésites pas.

*edit* j'ai mis à jour la config parce que j'ai laissé des éléments bloquants de mon addon.
Image

Avatar de l’utilisateur
Wolf
Messages : 123
Inscription : 15 oct. 2012, 09:38

Re: Création d'un addon d'unités

Message par Wolf » 07 févr. 2016, 21:42

Oui, merci.
J'y vois un peu plus clair mais p-e pas suffisamment ...
(Qui a éteint la lumière ?)
nobody is perfect

Avatar de l’utilisateur
Tyrghen
Membre des [V]Vétérans
Messages : 4119
Inscription : 14 oct. 2012, 22:47

Re: Création d'un addon d'unités

Message par Tyrghen » 08 févr. 2016, 09:44

Bon, j'ai mis à jour la config avec des éléments que j'avais oublié hier soir.
Je vais vite parcourir les points importants pour essayer d'éclaircir le truc.


Définition du contenu du PBO et nom du PBO

Ce premier bout défini le nom interne à ArmA de ton PBO ("MAD_addon_unite"), c'est le nom à référencer si tu dois le mettre en pré-requis d'un autre addon.
requiredAddons contient la liste des addons requis par ton addons. Comme tu fais un addons d'unité qui hérite des unités d'ArmA, il faut ajouter au minimum l'addon qui défini les unités de base.
Si par exemple tu utilises les armes du @MAS ou du @CUP, faudra ajouter l'addon en question comme pré-requis.

Code : Tout sélectionner

class CfgPatches
{
   class MAD_addon_unite
   {
      units[] = {"MAD_Unite_F"};
      weapons[] = {"MAD_U_Uniforme_1"};
      requiredVersion = 0.1;
      requiredAddons[] = {"A3_Characters_F_BLUFOR"};
   };
};

Ajout d'une faction dans ArmA

Ce bout ci va ajouter une faction pour tes unités. Je pense que le code parle de lui-même.
Les deux points importants:
  • Le nom de ta faction "MAD_Faction"
  • Camp opfor: Side=0;

Code : Tout sélectionner

class CfgFactionClasses {
   class MAD_Faction {
      displayname = "Nom de ma faction";
      flag = "\MAD_units\ui\flag_faction_co.paa";
      icon = "\MAD_units\ui\icon_faction_co.paa";
      priority = 10;
      side = 0;
   };
};

Création de la classe de l'unité

On commence par définir les classes dont héritera notre unité. Ce qui permet de ne pas redéfinir l'ensemble des valeurs liées à une unité.
Et comme ça, lorsque BIS ajoute une bisserie sur les unités, tu ne dois pas le faire, ça vient tout seul.

Code : Tout sélectionner

   class CAManBase;
   class SoldierEB: CAManBase
   {
      class EventHandlers;
      class Wounds;
   };


Ensuite on définit la classe de notre unité, pour faciliter la vie des scripteurs, il vaut mieux commencer les éléments d'un addon par son extension puis suivre la nomenclature de bis.

Code : Tout sélectionner

   class MAD_Unite_F: SoldierEB {
Le contenu qui défini à quoi ressemble l'unité

Code : Tout sélectionner

      scope = 2;
      cost = 40000;
      facetype = "Man_A3";
      faction = "MAD_Faction";
      model = "\A3\Characters_F\Civil\c_poloshirt";
      genericnames = "AfroMen";
      identitytypes[] = {"Head_African", "G_CIVIL_male"};
      scope = 0;
      sensitivity = 3;
      threat[] = {1, 0.1, 0.1};
      uniformClass = "MAD_U_Uniforme_1";
      vehicleclass = "Afroamerican";
Les éléments obscurs de la classe:
  • scope défini la visibilité de l'unité pour ArmA, 0 et 1 signifie qu'on ne peut pas créer l'unité avec createVehicle, 2 permet de créer l'unité.
  • cost c'est la valeur de l'unité pour que les IAs définissent la dangerosité de l'unité.
  • model on y reviendra, mais c'est ce qui défini l'uniforme de la classe
  • genericnames la gamme de noms qu'on va chercher pour l'unité, il faut un peu chercher pour trouver celles qui sont dispos
  • identitytypes défini les visages et l'origine ethnique, il faut un peu chercher pour trouver celles qui sont dispos
  • uniformClass on y reviendra, il faut le coupler avec le modèle défini plus haut

Définition des armes et équipements:

Code : Tout sélectionner

      weapons[] = {"arifle_TRG21_F", "Throw", "Put"};
      respawnweapons[] = {"arifle_TRG21_F", "Throw", "Put"};
      magazines[] = {"30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "HandGrenade", "HandGrenade", "SmokeShell", "SmokeShell", "SmokeShell", "SmokeShell"};
      respawnmagazines[] = {"30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "HandGrenade", "HandGrenade", "SmokeShell", "SmokeShell", "SmokeShell", "SmokeShell"};
      items[] = {"FirstAidKit","FirstAidKit"};
      respawnitems[] = {"FirstAidKit","FirstAidKit"};
      linkeditems[] = {"V_TacVest_blk"};
      respawnlinkeditems[] = {"V_TacVest_blk"};

Concernant le uniformes

Les uniformes sont un point difficile d'ArmA.
Le principe est qu'à chaque uniforme correspond un modèle 3D appliqué à l'unité. Dans notre cas, c'est celui défini dans "model".
Donc, lorsque tu vois un uniforme dans l'Arsenal, ce qui est important, ce n'est pas le nom, mais le modèle de cet uniforme.

Pour obtenir le chemin complet du modèle, le plus simple c'est de placer l'unité dans l'éditeur, lancer le script donné par l'arsenal, ensuite tu ouvres la console de débogage et tu exécutes le code suivant:

Code : Tout sélectionner

hint format ["%1", getModelInfo player];
La deuxième valeur devrait te donner le chemin complet du P3D.

Une fois que tu as cette valeur, tu peux remplir le champ "model".

Vient ensuite le champ "uniformClass", là c'est un peu plus subtil.
Dans mon exemple, j'ai pris le polo/t-shirt des civils, comme c'est un vêtement civil, tu ne peux pas l'appliquer à une unité opfor.
Si l'unité que tu crées et l'uniforme sont de la même faction, c'est facile, tu mets le nom de l'uniforme. Si ce n'est pas le cas, il faut créer un uniforme dans la bonne faction. C'est ce que fait le code suivant:

Code : Tout sélectionner

class cfgWeapons
{
   class Uniform_Base;
   class UniformItem;
   class ItemCore;
   class ItemInfo;
      
   class MAD_U_Uniforme_1: Uniform_Base {
      displayname = "Nom uniforme pour rebelle";
      model = "\A3\Characters_F\Common\Suitpacks\suitpack_blufor_diver";
      picture = "\A3\characters_f\data\ui\icon_U_Citizen_ca.paa";
      scope = 2;
      class ItemInfo: UniformItem {
         containerclass = "Supply30";
         mass = 30;
         uniformclass = "MAD_Unite_F";
         uniformmodel = "-";
      };
   };
};
Aucunes des informations ici ne sont vraiment utiles à part:

Code : Tout sélectionner

uniformclass = "MAD_Unite_F";
Dans ton unité, tu as choisis un modèle, souvent ce modèle est accompagné d'une texture prédéfinie dans le modèle qu'on peut écraser par une autre texture (c'est ça le principe des addons de retextures).
Mais là on est hors sujet.

Donc, tu ne dois te soucier que d'une chose, que le nom dans "uniformclass" corresponde au nom de l'unité que tu as définie.

Ensuite, pour créer d'autres unités avec le même uniforme, il suffit d'hériter de cette première unité et d'omettre tout ce que tu ne dois pas redéfinir.
Par exemple:

Code : Tout sélectionner

   class MAD_Unite_2_F: MAD_Unite_F {
      weapons[] = {"arifle_TRG21_F", "Throw", "Put"};
      respawnweapons[] = {"arifle_TRG21_F", "Throw", "Put"};
      magazines[] = {"30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "HandGrenade", "HandGrenade", "SmokeShell", "SmokeShell", "SmokeShell", "SmokeShell"};
      respawnmagazines[] = {"30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "30Rnd_556x45_Stanag", "HandGrenade", "HandGrenade", "SmokeShell", "SmokeShell", "SmokeShell", "SmokeShell"};
      items[] = {"FirstAidKit","FirstAidKit"};
      respawnitems[] = {"FirstAidKit","FirstAidKit"};
      linkeditems[] = {"V_TacVest_blk"};
      respawnlinkeditems[] = {"V_TacVest_blk"};
   };
Image

Avatar de l’utilisateur
Tyrghen
Membre des [V]Vétérans
Messages : 4119
Inscription : 14 oct. 2012, 22:47

Re: Création d'un addon d'unités

Message par Tyrghen » 08 févr. 2016, 09:50

Un point important, c'est la création de groupes si tu veux pouvoir placer des groupes dans l'éditeur.

Tu crées dans ton addon un sous-répertoire "groups" et tu mets dedans un autre fichier config.cpp.
Le contenu est suffisamment explicite je pense.

Code : Tout sélectionner

class CfgPatches
{
	class MAD_Groups
	{
		units[] = {};
		weapons[] = {};
		requiredVersion = 0.1;
		requiredAddons[] = {};
	};
};
class CfgGroups {
	class East {
		class MAD_Rebelles {
			name = "MAD Faction";
			class Infantry {
				name = "Infantry";
				class MAD_InfSquad {
					faction = "MAD_Faction";
					name = "Militiens 1";
					side = 0;
					class Unit0 {
						position[] = {0, 0, 0};
						rank = "SERGEANT";
						side = 0;
						vehicle = "MAD_Unite_1_F";
					};
					class Unit1 {
						position[] = {5, -5, 0};
						rank = "SERGEANT";
						side = 0;
						vehicle = "MAD_Unite_2_F";
					};
				};
			};
		};
	};
};
Image

Avatar de l’utilisateur
Wolf
Messages : 123
Inscription : 15 oct. 2012, 09:38

Re: Création d'un addon d'unités

Message par Wolf » 08 févr. 2016, 12:02

Merci Tyrghen.
Avec la Lumière je vois bcp mieux ;)
nobody is perfect

Avatar de l’utilisateur
Tyrghen
Membre des [V]Vétérans
Messages : 4119
Inscription : 14 oct. 2012, 22:47

Re: Création d'un addon d'unités

Message par Tyrghen » 08 févr. 2016, 13:59

Si tu rencontres des problèmes avec ce que j'ai posté, n'hésites pas.

J'ai sans doute oublié l'un ou l'autre truc.
Image

Avatar de l’utilisateur
Wolf
Messages : 123
Inscription : 15 oct. 2012, 09:38

Re: Création d'un addon d'unités

Message par Wolf » 08 févr. 2016, 14:50

Je comprends dans la globalité, je bidouille avec les éléments de réponse que tu m'as donné.
genericnames et identitytypes, je ne trouve pas de listing ou autres.
Je voulais commencer par faire un pack avec les Taliban_fighters de EricJ.
Ils n'ont pas d'armement et ne sont pas en grp.
Je me demande si un script ne serait pas plus rentable pour les grouper et les équiper de fusils et MUN ...
Bref je traine a chercher des références à enregistrer dans le cpp :?
nobody is perfect

Avatar de l’utilisateur
Tyrghen
Membre des [V]Vétérans
Messages : 4119
Inscription : 14 oct. 2012, 22:47

Re: Création d'un addon d'unités

Message par Tyrghen » 08 févr. 2016, 15:26

Pour les genericnames:
Dans l'éditeur, config viewer:
"CfgWorlds" >> "GenericNames"
Tu auras la liste de ceux intégrés à ArmA, tu peux en définir toi-même.

Pour les identités:
https://community.bistudio.com/wiki/setIdentity


Pour créer des groupes d'unités existantes, il ne te faut que le deuxième fichier et les noms des classes des unités dans le pack d'EricJ.
Image

Avatar de l’utilisateur
Wolf
Messages : 123
Inscription : 15 oct. 2012, 09:38

Re: Création d'un addon d'unités

Message par Wolf » 08 févr. 2016, 15:30

Ok, merci encore.
nobody is perfect

Répondre