[5.0] Système D'esclavage

#1

Système D’esclavage

Je rappelle que des modifications (corrections) peuvent-être apportées, elles seront précisées en bas du post.

Description : Le système a pour but le RolePlay, le système ce base sur des actions d’humilliation et tous simplement de soumission. Niveau procédure le “MAITRE” capture une victime et l’emmène au camp d’esclave. Le 'MAITRE" Asservis la victime pour faire d’elle un “ESCLAVE”.
Par la suite cette Esclave a deux solutions :

  • Récolter des prunes, les traiter et les vendre pour récupérer sa liberté
  • Attendre patiemment avant d’être libre.

Système en “OPEN_SOURCE
Apte pour du non moddé
Et compatible pour la 4.4 ® dans la conditions ou vous enlevez la “zonesize” dans le “config_gather.hpp


I - LES APPELS

Dans votre “function.h” :

class Esclavage {
        file = "core\script\esclavage";
        class Maitre {};
        class Victime {};
        class Tache {};
    };

Dans votre “CfgRemoteExec.hpp” :

F(life_fnc_Victime,CLIENT)
F(life_fnc_Tache,CLIENT)

Dans votre “stringtable.xml” :

        <Key ID="STR_Item_jusdeprune">
            <Original>Jus de Prune</Original>
            <French>Jus de Prune</French>           
        </Key>
        <Key ID="STR_Item_prune">
            <Original>Prune</Original>
            <French>Prune</French>           
        </Key>  

II - LE SCRIPT

Crée dans votre dossier “\core” un dossier nommé “script” dans ce même dossier crée ainsi un autre dossier nommé “esclavage

Par la suite crée un nouveau fichier nommé “fn_Maitre.sqf” qui seras le déclencheur de tous votre script.

#include "..\..\script_macros.hpp"
/*
    Auteur : Alésio Bélentofe A.R.R.D CC
    Copyright : A.R.R.D CC - Sous Dépôt du  Numéro Z29372U
    Files : fn_Maitre
    Source : AltisNewLife
    Partage : Système d'esclavage pour le forum communautaire AltisDev. 
*/
private["_unit","_recompense"];
_recompense = 15000;
_unit = cursorTarget;
if(isNull _unit) exitWith {hint "Aucune cible."};
if((_unit getVariable ["nesclavage",false])) exitWith { hint "Votre victime a récemment été asservis, vous devez attendre un peu avant de l'asservir à nouveau"};
if((player getVariable ["esclave",false])) exitWith { hint "Vous avez déjà asservi quelqu'un, vous devez attendre un peu !"};
if(side _unit isEqualTo independent) exitWith {hint "Les medecins ne peuvent pas etre vendu comme esclave"};
if(life_esclave) exitWith {hint "Vous avez déjà asservi quelqu'un, vous devez attendre un peu !"}; 
if((player distance (getMarkerPos "esclavage") < 15)) then
{
	[steamid,player getVariable["realname",name player],"920"] remoteExec ["life_fnc_wantedAdd",false,false];
	detach _unit;
	[_unit,false] remoteExec ["life_fnc_Victime",_unit,false];
};
life_cash = life_cash + _recompense;
hint "Vous avez vendu un esclave pour 15000€";
life_esclave = true;
player setVariable ["esclave",true,true];
uiSleep (4 * 60);
life_esclave = false;
player setVariable ["esclave",false,true];
hint "Vous êtes libre ...";

Ensuite vous créez le fichier “fn_Victime.sqf

#include "..\..\script_macros.hpp"
/*
    Auteur : Alésio Bélentofe A.R.R.D CC
    Copyright : A.R.R.D CC - Sous Dépôt du  Numéro Z29372U
    Files : fn_Maitre
    Source : AltisNewLife
    Partage : Système d'esclavage pour le forum communautaire AltisDev. 
*/
private["_unit","_cles"];
_unit = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param;
hint format["%1", _unit];
if(isNull _unit) exitWith {};
if(life_nesclavage) exitWith {hint "Il a deja été un esclave, attendez un peu avant de l'enchainer a nouveau !"};
_cles = (findDisplay 46) displayAddEventHandler ["KeyDown", "if ((_this select 1) == 1) then { true }"];
player setPos (getMarkerPos "esclavage");
removeVest player;
removeAllWeapons player;
removeHeadgear player;
removeBackpack player;
player forceAddUniform "U_MillerBody"; 
player setVariable["restrained",false,true];
player setVariable["escorting",false,true];
player setVariable["transporting",false,true];
player setVariable["nesclavage",true,true];
life_nesclavage = true;
titleText["Vous avez été vendu comme esclave, travailler si vous voulez sortir de cette condition !","PLAIN"];
hint "Vous avez été vendu comme esclave, travailler si vous voulez sortir de cette condition !";
[0,format["%1 a été vendu comme esclave !"],name player] remoteExec ["life_fnc_broadcast",nil,false];
uiSleep 15;
Tache = player createSimpleTask ["Quete"];
Tache setSimpleTaskDescription ["Obtenir sa liberté en échange de 10 jus de prune","ALTISDEV",""];
Tache setTaskState "Assigned";
player setCurrentTask Tache;
[] spawn 
{
	while {life_nesclavage && alive player} do 
	{
		if(player distance (getMarkerPos "esclavage") > 40) then
		{	
			player setPos (getMarkerPos "esclavage");
		};
	};
};
waitUntil {!life_nesclavage};
(findDisplay 46) displayRemoveEventHandler ["KeyDown", _cles];

Et pour finir vous créez le fichier “fn_Tache.sqf

#include "..\..\script_macros.hpp"
/*
    Auteur : Alésio Bélentofe A.R.R.D CC
    Copyright : A.R.R.D CC - Sous Dépôt du  Numéro Z29372U
    Files : fn_Maitre
    Source : AltisNewLife
    Partage : Système d'esclavage pour le forum communautaire AltisDev. 
*/
if(life_inv_prunev < 10) exitWith {hint "Vous devez travailler pour votre liberté. Vous avez besoin de 10 jus de prune !"};
if(life_inv_prunev >= 10) then 
{
	[false,"prunev",10] call life_fnc_handleInv;
	Tache setTaskState "Vous avez gagné votre liberté !";
	player addUniform "U_C_Poloshirt_redwhite";
	player removeSimpleTask Tache;
	hint "Vous avez gagné votre liberté !";
};
life_nesclavage = false;
player setVariable["nesclavage",true,true];
uiSleep (10 * 60);
player setVariable["nesclavage",false,true];
hint "Attention ! Vous pouvez à nouveau vous faire asservir en esclavage !";

III - LES INTERACTIONS

Maintenant on va faire en sorte que le joueur “X” puisse avoir la fonctionnalité d’asservir une victime.
Pour cela vous vous rendrez dans votre menu d’interaction pour les civils.

Vous définissez le bouton qui seras notre nouvelle interaction.

#define Btn9 37458

Vous le définissez aussi dans le “Display”

_Btn9 = _display displayCtrl Btn9;

Vous définissez aussi la variable _Btn9 dans la condition d’escorte comme ceci.

if (player getVariable ["isEscorting",false]) then {
    { _x ctrlShow false; } forEach [_Btn1,_Btn2,_Btn4,_Btn5,_Btn6,_Btn7,_Btn8,_Btn9];
};

Ensuite vous créez le bouton à la fin.

_Btn9 ctrlSetText "Esclave";
_Btn9 buttonSetAction "[] spawn life_fnc_Maitre; closeDialog 0;";
        
if(player distance (getMarkerPos "esclavage") < 15) then {_Btn9 ctrlEnable true;} else {_Btn9 ctrlEnable false;};

Et pour finir vous créez le bouton sur le “GUI” qui seras justement bien placer dans le menu d’interaction.
Pour cela vous vous rendez dans le fichier “pinteraction.hpp”
Et vous créez le bouton “ButtonNine” comme ceci :

class ButtonNine: Life_RscButtonMenu {
            idc = 37458;
            colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5};
            text = "";
            sizeEx = 0.025;
            x = BGX + 0.03;
            y = BGY + 0.47;
            w = 0.24;
            h = 0.038;
        };

La condition serviras d’affichage pour éviter que les joueurs utilisent la fonction n’importe ou …
Dans ce cas elle seras visible à 15 Mètres du marqueur que nous créons toute à l’heure. Si vous voulez changer, vous modifier la valeur qui est de 15 actuellement.


IV - LE MAPPING

Maintenant vous rendrez sur votre map, vous devez choisir un petit spot sympa pour faire votre affaire, et vous créez un marqueur visible nommé “esclavage


Par la suite vous créez un panneau qui seras utilisable seulement pour les esclaves.
Dans ce panneau vous mettrez,

this enableSimulation false; 
this allowDamage false; 
this addAction["Recuperer sa liberté", life_fnc_Tache,"",0,false,false,"",' life_nesclavage ']; 
this addAction["Couper les prunes",life_fnc_processAction,"jusdeprune",0,false,false,"",' life_inv_prune > 0 && !life_is_processing && life_nesclavage'];

Par la suite prêt de votre marqueur vous créez un autre marqueur nommé “prune”
qui serviras au esclave pour récupérer leurs libertés.

V - LES RESSOURCES

Et pour finir on va crée tous le procédé de récolte -> traitement -> vente pour le système de liberté.

Dans votre fichier “Config_Vitem.hpp”

Crée la nouvelle ressource Prune et Jus de Prune comme ceci

    class prunev {
        variable = "prunev";
        displayName = "STR_Item_jusdeprune";
        weight = 1;
        buyPrice = -1;
        sellPrice = -1;
        illegal = false;
        edible = -1;
        icon = ""; // TOI QUI FAIT
    };

    class prune {
        variable = "prune";
        displayName = "STR_Item_prune";
        weight = 1;
        buyPrice = -1;
        sellPrice = -1;
        illegal = false;
        edible = -1;
        icon = ""; // TOI QUI FAIT
    }; 

Ensuite on crée le champ

        class prune {
            amount = 3;
            zones[] = { "prune"};
            item = "";
            zoneSize = 50;
        };

Et pour finir le traitement

    class jusdeprune {
        MaterialsReq[] = {{"prune",1}};        
        MaterialsGive[] = {{"prunev",1}};
    };

Voila je pense n’avoir rien oubliée si quelque choses tourne mal faite le moi savoir.

Cdt,
Alésio Bélentofe

0 Likes

#2

Je tient a préciser que Dans votre “function.hpp” il y a pas besoin de mettre le core\script\esclavage mais just script\esclavage ^^ sinon votre serveur ne va pas trouver le fichier maitre, victime et tache ^^.

0 Likes

#3

Je sais pas ce que tu raconte mais le core\ est plus qu’important enfaîte…

Sans le \core

class Esclavage {
        file = "script\esclavage";
        class Maitre {};
        class Victime {};
        class Tache {};
    };
14:12:01 Warning Message: Script script\Esclavage\fn_Maitre.sqf not found
14:12:01 Warning Message: Script script\Esclavage\fn_Victime.sqf not found
14:12:01 Warning Message: Script script\Esclavage\fn_Tache.sqf not found

Le système va par deviner comme pas magie que ton repertoire ce trouve dans core\

0 Likes

#4

Wtf bas moi enfaite si je met le core sa me met exactement tes messages d’erreur et si je l’enlève bas tout va nickel ???

0 Likes

#5

Ha non mais je suis con enfaite xDD je l’est pas mis dans core donc normal XDDD

0 Likes

#6

A oui tu as crée directement à la racine …
Logique que sa marche :slight_smile:

0 Likes

#7

alésio-belentofe Ouais car j’ai passer pas mal de temps a le régler je comprenais pas au début .

0 Likes

#8

Pas de soucis tu me diras si tous est good pour toi Bateka

0 Likes

#9

alésio-belentofe Oui je suis actuellement entrain de le tester je vais te dire tout de suite ^^

0 Likes

#10

Voilà je viens de tester le script fontionne parfaitement :slight_smile: Merci encore pour ce magnifique script :slight_smile: En rappelle a AltisNewLife

2 Likes

#11

Ravie que cela te plaise ! :wink:

0 Likes

#12

bande de SM XD, sinon gg le script, ca pourrais etre cool de le faire aussi avec des pnj

1 Like

#13

Comment faire pour le menu d’interaction pour les civils. Je n’ai aucuns fichier pour cela dans “civilian”

0 Likes

#14

gbutome02 a dit dans [5.0] Système D'esclavage :

Comment faire pour le menu d’interaction pour les civils. Je n’ai aucuns fichier pour cela dans “civilian”

Alors il faut que tu le crée, je part du principe que tous le monde la.
Inspire toi du “fn_copInteractionMenu”

0 Likes

#15

alésio-belentofe a dit dans /404 :

III - LES INTERACTIONS
Maintenant on va faire en sorte que le joueur “X” puisse avoir la fonctionnalité d’asservir une victime.
Pour cela vous vous rendrez dans votre menu d’interaction pour les civils.
Vous définissez le bouton qui seras notre nouvelle interaction.
#define Btn9 37458

Vous le définissez aussi dans le “Display”
_Btn9 = _display displayCtrl Btn9;

Vous définissez aussi la variable _Btn9 dans la condition d’escorte comme ceci.
if (player getVariable [“isEscorting”,false]) then {
{ _x ctrlShow false; } forEach [_Btn1,_Btn2,_Btn4,_Btn5,_Btn6,_Btn7,_Btn8,_Btn9];
};

Ensuite vous créez le bouton à la fin.
_Btn9 ctrlSetText “Esclave”;
_Btn9 buttonSetAction “[] spawn life_fnc_Maitre; closeDialog 0;”;

if(player distance (getMarkerPos “esclavage”) < 15) then {_Btn9 ctrlEnable true;} else {_Btn9 ctrlEnable false;};

Et pour finir vous créez le bouton sur le “GUI” qui seras justement bien placer dans le menu d’interaction.
Pour cela vous vous rendez dans le fichier “pinteraction.hpp”
Et vous créez le bouton “ButtonNine” comme ceci :
class ButtonNine: Life_RscButtonMenu {
idc = 37458;
colorBackground[] = {"(profilenamespace getvariable [‘GUI_BCG_RGB_R’,0.3843])", “(profilenamespace getvariable [‘GUI_BCG_RGB_G’,0.7019])”, “(profilenamespace getvariable [‘GUI_BCG_RGB_B’,0.8862])”, 0.5};
text = “”;
sizeEx = 0.025;
x = BGX + 0.03;
y = BGY + 0.47;
w = 0.24;
h = 0.038;
};

La condition serviras d’affichage pour éviter que les joueurs utilisent la fonction n’importe ou …
Dans ce cas elle seras visible à 15 Mètres du marqueur que nous créons toute à l’heure. Si vous voulez changer, vous modifier la valeur qui est de 15 actuellement.

Salut je reviens sur cette partie car je ne trouve pas le fichier concerné pour ajouter cette commande peux-tu m’aider?

0 Likes

#16

regarde le profile !BANNI

0 Likes

#17

brutalzic j’ai vu après

0 Likes

#18

Cree un poste !

0 Likes

#19

Salut tout le monde, petite question.
Je ne peux malheureusement pas tester ma ligne de code en ce moment du coup du je me tourne vers vous.
Ne serait-il pas plus facile d’ajouter au switch playerSide du fn_setupActions.sqf cette ligne?

life_actions pushBack (player addAction[localize "STR_sell_slave",life_fnc_Maitre, "",0,false,false,"",'
(player distance (getMarkerPos "esclavage") < 15) && (player getVariable ["isEscorting",true]) ']);
0 Likes