Version haut débit de: Armée de l'Ombre
Aide - Rechercher - Membres

Système de ressource

Jben (04 Mars 2018, 7:58)
Bonjours a tous.

Je travaille sur une mission présentement et j'aurais besoins du coup de main.

Je tente ici de créer un système de ressources. J'explique: Chaque équipe peut cumulé des point via de zone qu'ils auront capturé. Pour commencé j'aimerais juste créer les différente ressources. Manpower (ressource en homme), Munissions, et Fuel. J'ai le logiciel Poséidon pour m'aidé. Je crois comprendre qu'il faut que je crée des variable pour chaque ressources. Donc je crée un SQF (systeme.sqf)pour y faire. Je veux pas m'embourbé avec les zone de capture pour le moment. Ce que je cherche a faire est de créer les différents type de point et en faire gagné quelqu'un par minute. Si possible les faire affiché a l'écran en bas a droite.

Maintenant que doit-je faire. J'aimerais de l'aide pour démarré le script. Je débute et oui j'ai peut-être de trop grande ambition, mais je ne désespère pas. J'aimerais voir ce projet a jour. Je donnerais de plus information sur ma mission si vous le voulez bien. Merci et votre aide serais apprécié.
philippe83 (05 Mars 2018, 9:48)
Salut, je ne sais pas si une personne de chez nous pourra répondre à tes questions (nous n'utilisons pas ce genre de script), tu pourrais voir du côté de chez bis.--> https://forums.bohemia.net/forums/forum/218-arma-3/
Bon courage pour ton projet. :wink:
The-KiLLeR (05 Mars 2018, 18:30)
Salut,

Oui en effet il faut passer par des variables globales en utilisant les commandes setVariable et getVariable.

Après il faudra faire un script qui tourne en boucle et qui permettra d'incrémenter tes variables selon tes conditions.
Ce n'est pas si simple que ça, tout dépendra des conditions pour chacune des ressources.

Pour les afficher, utilise au début un simple hintSilent qui s'affichera en haut à droite.
Jben (07 Mars 2018, 0:52)
Pour commencer je créer les avriable dans fichier init.sqf comme ceci:

_manpower setVariable ["Manpower", 300, true];
_munition setVariable ["Munition", 50, true];
_Fuel setVariable ["Fuel", 15, true];

est-ce bien la bonne méthode?
The-KiLLeR (07 Mars 2018, 18:57)
En partie.

Si tu mets un "_" devant le nom de ta variable, çà veut dire qu'elle est locale et non globale.
De ce fait, elle ne sera pas accessible en dehors de ton fichier "init.sqf".

Ensuite il faut les faire initialiser par le serveur et non pas le serveur + tous les joueurs.

Met ceci :

if (isServer) then 
{
	missionNamespace setVariable ["Manpower", 300, true];
	missionNamespace setVariable ["Munition", 50, true];
	missionNamespace setVariable ["Fuel", 15, true];
};
Jben (08 Mars 2018, 0:56)
Merci The-Killer.

donc j’obtiens dans mon init.sqf

Citation

if (isServer) then
{
hintSilent "You texte comes here !"
missionNamespace setVariable ["Manpower", 200, true];
missionNamespace setVariable ["Munition", 50, true];
missionNamespace setVariable ["Fuel", 15, true];

};


Est ce la bonne place pour mettre le hint? et que doit-je mettre dans le hint pour affiché chaque ressources.

Et voila mon ressources.sqf
Citation

if (isServer) then

while {(Manpower) = (Manpower)} do {

sleep 60;

Manpower = Manpower + 100;

Munition = Munition + 15

Fuel = Fuel + 5
}

};


est-ce que ce script devrais fonctionner?
The-KiLLeR (08 Mars 2018, 13:48)
Pas besoin de hint dans le "init.sqf".
Tu peux placer ton hint dans ton fichier "ressources.sqf".

S'agit il d'une boucle sans fin ?
Si oui :

if (isServer) then
	while {true} do {

		sleep 60;

		missionNamespace setVariable ["Manpower",missionNamespace getVariable "Manpower" + 100, true];
		missionNamespace setVariable ["Munition",missionNamespace getVariable "Munition" + 15, true];
		missionNamespace setVariable ["Fuel",missionNamespace getVariable "Fuel" + 5, true];

		hintSilent format["Manpower : %1\nMunition : %2\nFuel : %3",missionNamespace getVariable "Manpower",missionNamespace getVariable "Munition",missionNamespace getVariable "Fuel"];
	};
};
Jben (09 Mars 2018, 20:35)
Le scripte semble fonctionné. Par contre j'ai du changer le nom de la variable fuel par Gas. Fuel doit déjà appartenir a une variable par défaut.

Le seul problème est que je ne vois pas le hint.

init.sqf
Citation
if (isServer) then
{
missionNamespace setVariable ["Manpower", 200, true];
missionNamespace setVariable ["Munition", 50, true];
missionNamespace setVariable ["Gas", 15, true];

};

ressources.sqf
Citation
if (isServer) then
while {true} do {

sleep 60;

missionNamespace setVariable ["Manpower",missionNamespace getVariable "Manpower" + 100, true];
missionNamespace setVariable ["Munition",missionNamespace getVariable "Munition" + 15, true];
missionNamespace setVariable ["Gas",missionNamespace getVariable "Gas" + 5, true];

hintSilent format["Manpower : %1\nMunition : %2\nGas : %3",missionNamespace getVariable "Manpower",missionNamespace getVariable "Munition",missionNamespace getVariable "Gas"];
};
};



Ce peut t'il que le script ressources ne démarre pas. Doit le faire partir avec init.sqf
The-KiLLeR (09 Mars 2018, 20:39)
Oui il faut le lancer :

if (isServer) then
{
	missionNamespace setVariable ["Manpower", 200, true];
	missionNamespace setVariable ["Munition", 50, true];
	missionNamespace setVariable ["Gas", 15, true];
};

execVM "ressources.sqf";
Jben (09 Mars 2018, 22:22)
Il y a une erreur dans une expression.
'...missionNamespace getVarriable "Manpower" |#|+ 100, true];

Line 7


Citation

1 if (isServer) then
2{
3 while {true} do {
4
5 sleep 60;
6
7 missionNamespace setVariable ["Manpower",missionNamespace getVariable "Manpower" + 100, true];
8 missionNamespace setVariable ["Munition",missionNamespace getVariable "Munition" + 15, true];
9 missionNamespace setVariable ["Gas",missionNamespace getVariable "Gas" + 5, true];
10
11 hintSilent format["Manpower : %1\nMunition : %2\nGas : %3",missionNamespace getVariable "Manpower",missionNamespace getVariable "Munition",missionNamespace getVariable
"Gas"];
12 };
13};
The-KiLLeR (10 Mars 2018, 9:56)
J'ai oublié les parenthèses :

if (isServer) then {
	while {true} do {

		sleep 5;

		missionNamespace setVariable ["Manpower",(missionNamespace getVariable "Manpower") + 100, true];
		missionNamespace setVariable ["Munition",(missionNamespace getVariable "Munition") + 15, true];
		missionNamespace setVariable ["Gas",(missionNamespace getVariable "Gas") + 5, true];

		hintSilent format["Manpower : %1\nMunition : %2\nGas : %3",missionNamespace getVariable "Manpower",missionNamespace getVariable "Munition",missionNamespace getVariable "Gas"];
	};
};
Jben (10 Mars 2018, 21:09)
Merci The-Killer sa fonctionne super bien. :fsb2_drink:

Pour la suite je veux que les deux équipe possède leur propre ressources.
Doit-je dupliqué le script ressources et ajouté des variables différente?
comme sa?

missionNamespace setVariable ["Manpower", 200, true];
missionNamespace setVariable ["Manpower2", 200, true];
The-KiLLeR (11 Mars 2018, 13:52)
Le plus simple serait de dupliquer les variables comme tu as fait.
Jben (11 Mars 2018, 19:58)
J'ai fait comme ca.

Citation
if (isServer) then
{
missionNamespace setVariable ["Manpower", 200, true];
missionNamespace setVariable ["Munition", 50, true];
missionNamespace setVariable ["Gas", 15, true];
missionNamespace setVariable ["Manpower2", 200, true];
missionNamespace setVariable ["Munition2", 50, true];
missionNamespace setVariable ["Gas2", 15, true];
hintSilent format["Manpower : %1\nMunition : %2\nGas : %3",missionNamespace getVariable "Manpower",missionNamespace getVariable "Munition",missionNamespace getVariable "Gas"];
hintSilent format["Manpower : %1\nMunition : %2\nGas : %3",missionNamespace getVariable "Manpower2",missionNamespace getVariable "Munition2",missionNamespace getVariable "Gas2"];
};
execVM "ressources.sqf";
execVM "ressources2.sqf";


J'ai un problème ici pour deux chose. Je veux que le premier hintSilent soit visible seulement pour les blufor et le deuxième soit visible seulement pour les Independent.
Ensuite il y a ceci; hintSilent format["Manpower : %1\nMunition : %2\nGas : %3",missionNamespace getVariable "Manpower2",missionNamespace getVariable "Munition2",missionNamespace getVariable "Gas2"];
les % et numéraux je ne c'est pas quoi inscrire ici pour le deuxième hint. Doit-je les laissé comme sa?
Jben (15 Mars 2018, 1:24)
J'ai réussi !!! Voila ce que j'ai fait

Script init.sqf
Citation
if (isServer) then
{
missionNamespace setVariable ["Manpower", 200, true];
missionNamespace setVariable ["Munition", 50, true];
missionNamespace setVariable ["Gas", 15, true];
missionNamespace setVariable ["Manpower2", 200, true];
missionNamespace setVariable ["Munition2", 50, true];
missionNamespace setVariable ["Gas2", 15, true];

if (side player == west) then
hintSilent format["Manpower : %1\nMunition : %2\nGas : %3",missionNamespace getVariable "Manpower",missionNamespace getVariable "Munition",missionNamespace getVariable "Gas"];

if (side player == independent) then
hintSilent format["Manpower : %1\nMunition : %2\nGas : %3",missionNamespace getVariable "Manpower2",missionNamespace getVariable "Munition2",missionNamespace getVariable "Gas2"];
};
execVM "ressources.sqf";
execVM "ressources2.sqf";


Script ressources
Citation
if (isServer) then {
while {true} do {

sleep 60;

missionNamespace setVariable ["Manpower",(missionNamespace getVariable "Manpower") + 100, true];
missionNamespace setVariable ["Munition",(missionNamespace getVariable "Munition") + 15, true];
missionNamespace setVariable ["Gas",(missionNamespace getVariable "Gas") + 5, true];

if (side player == west) then
hintSilent format["Manpower : %1\nMunition : %2\nGas : %3",missionNamespace getVariable "Manpower",missionNamespace getVariable "Munition",missionNamespace getVariable "Gas"];
};
};


et script ressources2
Citation
if (isServer) then {
while {true} do {

sleep 60;

missionNamespace setVariable ["Manpower2",(missionNamespace getVariable "Manpower2") + 100, true];
missionNamespace setVariable ["Munition2",(missionNamespace getVariable "Munition2") + 15, true];
missionNamespace setVariable ["Gas2",(missionNamespace getVariable "Gas2") + 5, true];

if (side player == independent) then
hintSilent format["Manpower : %1\nMunition : %2\nGas : %3",missionNamespace getVariable "Manpower2",missionNamespace getVariable "Munition2",missionNamespace getVariable "Gas2"];
};
};


Voila. ;)
Jben (15 Mars 2018, 2:00)
J'ai du changé le nom du script ressoureces2 pour ressourcesV. Il fonctionnaient mais m'affichais un msg d'erreur.
Jben (15 Mars 2018, 7:58)
J'ai créé une zone capturable dans ma mission et j'ai ajouté une variable a l'entité zone; gasS.
Je l'est inscrite dans; Nom de la variable.

Maintenant dans mon script ressources j'ai ajouté ceci
Citation
if (isServer) then {
while {true} do {

sleep 60;

missionNamespace setVariable ["Manpower",(missionNamespace getVariable "Manpower") + 100, true];
missionNamespace setVariable ["Munition",(missionNamespace getVariable "Munition") + 15, true];
missionNamespace setVariable ["Gas",(missionNamespace getVariable "Gas") + 5, true];

if ( gasN == west) then
missionNamespace setVariable ["Gas",(missionNamespace getVariable "Gas") + 5, true];

if (side player == west) then
hintSilent format["Manpower : %1\nMunition : %2\nGas : %3",missionNamespace getVariable "Manpower",missionNamespace getVariable "Munition",missionNamespace getVariable "Gas"];
};
};


Le script ne fonctionne pas? Je veux ajouté des ressources supplémentaire lorsque ma variable gasN appartient au blufor. Est-ce parce que j'ai créé la variable dans la mission et non dans un script.?
The-KiLLeR (15 Mars 2018, 20:22)
Voici un test en aillant modifié légèrement tes fichiers :

init.sqf
if (isServer) then
{
	missionNamespace setVariable ["Manpower", 200, true];
	missionNamespace setVariable ["Munition", 50, true];
	missionNamespace setVariable ["Gas", 15, true];
	missionNamespace setVariable ["Manpower2", 200, true];
	missionNamespace setVariable ["Munition2", 50, true];
	missionNamespace setVariable ["Gas2", 15, true];
	
	execVM "ressources.sqf";
};

execVM "infos.sqf";



ressources.sqf
while {true} do
{
	if (({side _x == west} count list maZone) > 0) then
	{
		missionNamespace setVariable ["Gas",(missionNamespace getVariable "Gas") + 5, true];
	};
	
	if (({side _x == resistance} count list maZone) > 0) then
	{
		missionNamespace setVariable ["Gas2",(missionNamespace getVariable "Gas2") + 5, true];
	};

	sleep 1;
};


infos.sqf
while {true} do
{
	if (side player == west) then 
	{
		hintSilent format["Manpower : %1\nMunition : %2\nGas : %3",missionNamespace getVariable "Manpower",missionNamespace getVariable "Munition",missionNamespace getVariable "Gas"];
	};
	
	if (side player == resistance) then 
	{
		hintSilent format["Manpower : %1\nMunition : %2\nGas : %3",missionNamespace getVariable "Manpower2",missionNamespace getVariable "Munition2",missionNamespace getVariable "Gas2"];
	};
	
	sleep 1;
};




Dans cet exemple, j'ai créé un déclencheur avec comme propriété :
"Nom de variable" : maZone
"Type" : aucun
"Activation" : Tout joueur
"Type d'activation" : Présent
"Condition" : This

Si un Blufor (west) est dans la zone, son "Gas" sera incrémenté de +5 toute les secondes. De même pour un indépendant (resistance), son "Gas2" sera incrémenté de +5 toute les secondes.
Jben (15 Mars 2018, 20:37)
A ok. Ça simplifie le script. Merci!!!

Par-contre si je veux juste qu'une équipe capture la zone et ne sont pas obliger de resté a l'intérieur
de celle-ci.

Citation
if (({side _x == west} count list maZone) > 0) then
{
missionNamespace setVariable ["Gas",(missionNamespace getVariable "Gas") + 5, true];
};


il faut changer quel que chose ici?
The-KiLLeR (15 Mars 2018, 21:43)
Il y a qu'une seule équipe qui puisse la capturer ? la premier équipe dedans ?
Une fois capturée, cela incrémente le "Gas" à l'infini ?
Jben (15 Mars 2018, 21:49)
Oui ou jusqu’à ce que l'autre équipe la capture.5 gas sont ajouté au 60 sec.
Jben (15 Mars 2018, 22:15)
Voici les scripts dans dossier de mission mon que j'ai pour le moment;

init.
Citation
if (isServer) then
{
missionNamespace setVariable ["Manpower", 200, true];
missionNamespace setVariable ["Munition", 50, true];
missionNamespace setVariable ["Gas", 15, true];
missionNamespace setVariable ["Manpower2", 200, true];
missionNamespace setVariable ["Munition2", 50, true];
missionNamespace setVariable ["Gas2", 15, true];

execVM "ressources.sqf";
};
execVM "ressourcesauto.sqf";
execVM "infos.sqf";


infos.
Citation
while {true} do
{
if (side player == west) then
{
hintSilent format["Manpower : %1\nMunition : %2\nGas : %3",missionNamespace getVariable "Manpower",missionNamespace getVariable "Munition",missionNamespace getVariable "Gas"];
};

if (side player == resistance) then
{
hintSilent format["Manpower : %1\nMunition : %2\nGas : %3",missionNamespace getVariable "Manpower2",missionNamespace getVariable "Munition2",missionNamespace getVariable "Gas2"];
};

sleep 1;
};


et ressourcesauto.

Citation
while {true} do
{

missionNamespace setVariable ["Manpower",(missionNamespace getVariable "Manpower") + 15, true];
missionNamespace setVariable ["Manpower2",(missionNamespace getVariable "Manpower2") + 15, true];
missionNamespace setVariable ["Munition",(missionNamespace getVariable "Munition") + 10, true];
missionNamespace setVariable ["Munition2",(missionNamespace getVariable "Munition2") + 10, true];
missionNamespace setVariable ["Gas",(missionNamespace getVariable "Gas") + 5, true];
missionNamespace setVariable ["Gas2",(missionNamespace getVariable "Gas2") + 5, true];

sleep 60;
};


J'aimerai que lorsqu'une des deux équipe ont une zone capturer, le propriétaire de celle-ci obtiens 5 gas supplémentaire au 60 sec.
Jben (15 Mars 2018, 22:48)
Pour faire simple chaque équipe commencera avec des ressources de départ soit 200 manpower, 50 munition et 15 gas.
Au 60 seconde chaque équipe obtiendront des ressources soit 15 manpower, 10 munition et 5 gas et ajoutera un bonus de ressources
pour chaque zone capturé.

Exemple 3 min est écoulé. L'équipe blufor ont capturé la zone gas, au lieu doptenir seulement 5 gas au 60 sec il obtiendront 10 gas.
Jben (16 Mars 2018, 1:50)
J'ai créer un module de secteur et dans nom de la variable j'y est mit maZone. J'y est syncronisé 3 entités logique, blufor, indepentant et zone.

J'ai testé ceci mais sa fonctionne pas....

Citation
while {true} do
{

missionNamespace setVariable ["Manpower",(missionNamespace getVariable "Manpower") + 15, true];
missionNamespace setVariable ["Manpower2",(missionNamespace getVariable "Manpower2") + 15, true];
missionNamespace setVariable ["Munition",(missionNamespace getVariable "Munition") + 10, true];
missionNamespace setVariable ["Munition2",(missionNamespace getVariable "Munition2") + 10, true];
missionNamespace setVariable ["Gas",(missionNamespace getVariable "Gas") + 5, true];
missionNamespace setVariable ["Gas2",(missionNamespace getVariable "Gas2") + 5, true];

if ( maZone == west) then
missionNamespace setVariable ["Gas",(missionNamespace getVariable "Gas") + 5, true];

sleep 60;
};
Jben (19 Mars 2018, 0:36)
J'ai testé ceci:
Citation
while {true} do
{
if ((side maZone) == west) then
{
missionNamespace setVariable ["Gas",(missionNamespace getVariable "Gas") + 5, true];
};
if ((side maZone) == independent) then
{
missionNamespace setVariable ["Gas2",(missionNamespace getVariable "Gas2") + 5, true];
};

sleep 3;
};

J'ai aucun message d’erreur mais portent il ne fonctionne pas.
The-KiLLeR (21 Mars 2018, 19:22)
Voici pour la capture d'une zone :

ressources.sqf

private ["_zoneCamp"];

_zoneCamp = "";

while {true} do
{
	_countWest = parseNumber format["%1",{side _x == west} count list maZone];
	_countInd = parseNumber format["%1",{side _x == resistance} count list maZone];
	
	if ((_countWest > _countInd) || (_zoneCamp == "west" && (_countWest > _countInd || _countInd == 0))) then
	{
		missionNamespace setVariable ["Gas",(missionNamespace getVariable "Gas") + 5, true];
		_zoneCamp = "west";
	};

	if ((_countWest < _countInd) || (_zoneCamp == "resistance" && (_countWest < _countInd || _countWest == 0))) then
	{
		missionNamespace setVariable ["Gas2",(missionNamespace getVariable "Gas2") + 5, true];
		_zoneCamp = "resistance";
	};

	sleep 1;
};
Jben (21 Mars 2018, 21:28)
:fsb2_shocked: Merci The-Killer. Pour savoir je doit modifier quelque chose dans ce script?

Parce que cela ne semble pas fonctionné. J'ai aucun message d'erreur mais les ressource ne sont pas ajouté a la suite de la capture.
The-KiLLeR (21 Mars 2018, 21:54)
Non
Si tu as bien renseigné les fichiers comme dans ce message (sauf le ressources.sqf), cela devrait fonctionner :
https://www.clan-ado.fr/forum/...id=86000#p86000
Jben (21 Mars 2018, 23:17)
J'ai rajouté ressourcesauto.sqf
Citation
while {true} do
{

missionNamespace setVariable ["Manpower",(missionNamespace getVariable "Manpower") + 15, true];
missionNamespace setVariable ["Manpower2",(missionNamespace getVariable "Manpower2") + 15, true];
missionNamespace setVariable ["Munition",(missionNamespace getVariable "Munition") + 10, true];
missionNamespace setVariable ["Munition2",(missionNamespace getVariable "Munition2") + 10, true];
missionNamespace setVariable ["Gas",(missionNamespace getVariable "Gas") + 5, true];
missionNamespace setVariable ["Gas2",(missionNamespace getVariable "Gas2") + 5, true];

sleep 60;
};
Jben (21 Mars 2018, 23:19)
J'ai oublié le déclencheur ...