Français Solved Mise en place d'un système de service et de salaire pour les métiers

26/3/20
101
8
4
1 100
bonjour,
après discutions sur discord avec Maxence je viens poster ici puisque je n'est pas trouver le tuto sur le forum donc j'explique

j'ai pris Job System et Crafting System est ce que je voudrais faire c'est ceci :
mettre une pancarte dans chaque qg métier pour que les personnes puissent prendre leur service et recevoir un salaire en conséquence quand il sont en service
en gros ambulancier une pancarte pour qu'il prenne sont service et a ce moment la il reçois un salaire une fois sont service fini il redeviens donc civil et la plus de salaire mise a part la config faite pour les civil
de même pour dépanneur, dir, etc....
Maxence sais de quoi je parle c'est réalisable avec Crafting System mais j'ai pas trouver

merci d'avance est meilleur vœux pour 2021 car bientôt minuit plein de bonne choses a vous
 
Solution
Pour palier ce problème, tu peux remplacer dans les conditions :
Code:
cursorObject
par :
Code:
(nearestObject [player,"CLASSNAME_PANNEAU"])
En remplaçant CLASSNAME_PANNEAU par la classname du panneau

Ainsi même si ton curseur n'est pas exactement sur le panneau, il prendra le panneau le plus proche pour récupérer sa variable et vérifier les conditions. J'espère que maintenant ça fonctionnera en toute situation :)
Salut !

Pour faire un ou des jobs qui peuvent être pris uniquement à un "Job Center" spécifique, ce que tu peux faire c'est dans l'init de ce "Job Center" mettre (au lieu de ce qui est dans le guide) :
Code:
this addAction [(["STR_Open_Menu","The_Programmer_JobSystem","JobSystem_localization"] call theprogrammer_core_fnc_localize),{[] call TP_JobSystem_fnc_main},"",0,false,false,"",'',5];
this setVariable ["jobcenter_location","qgpolice"];

Et pour les jobs qui peuvent être pris uniquement à cet endroit là, tu peux mettre comme condition du Job (dans le fichier jobs.cpp du dossier configuration) :
Code:
conditions = "((cursorObject getVariable [""jobcenter_location"",""""]) == ""qgpolice"");";

Tu peux changer le qgpolice dans l'init de l'objet et dans la condition du job par n'importe quelle suite de lettre pour différencier les autres Job Centers ;)

---

Le salaire de chaque métier peut être changé dans le jobs.cpp également :
Code:
paycheck = 800;
 
merci je viens de le faire mais dans le panneau quand je vais dessus j'ai tout les metier du jobs system et pas que celui desiré voici la capture ecran

Capture.JPG

j'ai mit sur le panneau dans l'init :

Code:
this addAction [(["STR_Open_Menu","The_Programmer_JobSystem","JobSystem_localization"] call theprogrammer_core_fnc_localize),{[] call TP_JobSystem_fnc_main},"",0,false,false,"",'',5];
this setVariable ["jobcenter_location","qgdir"];

et dans les conditions du jobs.cpp

Code:
conditions = "((cursorObject getVariable [""jobcenter_location"",""""]) == ""qgdir"");";
 
C'est normal puisque les autres métiers n'ont pas de conditions, donc il sont visibles partout. Si tu fais 1 panneau par métier, ils auront tous une condition et donc il ne seront pas visibles sur ce panneau.

Sinon, tu peux mettre une condition sur tous les métiers à cacher pour cacher les autres métier sur ce panneau uniquement, comme ceci :
Code:
conditions = "((cursorObject getVariable [""jobcenter_location"",""""]) != ""qgdir"");";
 
sa marche pas dans le qg dir le metier qui apparait sans les autre sa c'est bon mais dans un autre panneau qg depanneur y a rien
en variable j'ai mit :
Code:
this addAction [(["STR_Open_Menu","The_Programmer_JobSystem","JobSystem_localization"] call theprogrammer_core_fnc_localize),{[] call TP_JobSystem_fnc_main},"",0,false,false,"",'',5];
this setVariable ["jobcenter_location","dp"];

et condition :
Code:
conditions = "((cursorObject getVariable [""jobcenter_location"",""""]) != ""dp"");";
 
j'ai parler trop vite sa fonctionne pas vraiment tout a l'heure c'etait apparu et depuis plus rien je comprend pas pourquoi sa fonctionné qu'une fois
 
Normalement soit ça fonctionne, soit ça fonctionne pas, mais pas de temps en temps 😅
Est-ce que tu peux envoyer ton fichier de config jobs.cpp en entier ?

Petit rappel :
Pour afficher le job :
Code:
conditions = "((cursorObject getVariable [""jobcenter_location"",""""]) == ""dp"");";
Pour ne pas afficher le job :
Code:
conditions = "((cursorObject getVariable [""jobcenter_location"",""""]) != ""dp"");";
 
Je ne vois pas pourquoi ça ne fonctionnerait pas :unsure:
C'est forcément un problème avec le nom qui n'est pas le même, vérifie que tu as bien enregistré ton fichier mission.sqm et remis le fichier dans ton dossier mission.

Si ça ne fonctionne toujours pas, tu peux m'envoyer ton fichier mission.sqm en message privé (en version débinarisé) pour que je regarde de mon côté
 
je suis justement entrain de mettre a jour certain fichier je test une fois fini et je reviens pour tenir informé et envoyé la mission.sqm si pas de changement
 
donc me revoilà alors j'ai essayé hier sa fonctionné ce matin sa va plus a savoir il n'y as eu aucune modification entre temps ni même redémarrage serveur rien tout et rester comme hier et hier le métier était bien sur le panneau ce matin il y ai plus pour sa que je dit sa marche de temps en temps
j'envoi la mission en mp
 
Alors tout est bon, à mon avis c'est plutôt que ton curseur n'est pas sur le panneau quand tu ouvres le menu. T'es peut être légèrement décalé, tu as l'action pour ouvrir le menu mais pourtant il capte pas la variable sur le panneau :unsure:
Pour confirmer que c'est ça, est-ce que tu peux essayer en première personne pour bien viser le panneau ?
 
Pour palier ce problème, tu peux remplacer dans les conditions :
Code:
cursorObject
par :
Code:
(nearestObject [player,"CLASSNAME_PANNEAU"])
En remplaçant CLASSNAME_PANNEAU par la classname du panneau

Ainsi même si ton curseur n'est pas exactement sur le panneau, il prendra le panneau le plus proche pour récupérer sa variable et vérifier les conditions. J'espère que maintenant ça fonctionnera en toute situation :)
 
Solution