[Tuto] Bourse 5.0 V2


#1

Bonjour/Bonsoir,

Je vais vous expliquer l’installation de la bourse 5.0, cependant il n’est pas de moi,mais je l’ai adapté.

Telecharger le DynMarket 5.0

Allez dans mpmissions et edité “Functions.hpp”

Ajouter après class Dialog_Controls

class DynMarket  //kovix
{  
    file = "core\DynMarket";  
    class bought {};  
    class update {};  
    class DisplayPrices {};  
    class LoadIntoListbox {};  
    class ForcePrice {};  
    class DYNMARKET_getPrice {};  
}; 

Allez dans mpmissions -> core et edité “init.sqf”

Ajouter à la fin :

//bourse 5.0
DYNAMICMARKET_boughtItems = [];
[player] remoteExec ["TON_fnc_playerLogged",RSERV];

Allez dans mpmissions -> dialog et edité “MasterHandler.hpp”

Ajouter à la fin

#include "dynmarket_changeprice.hpp"  
#include "dynmarket_prices.hpp"

Allez dans mpmissions -> dialog et edité “player_inv.hpp”

class ButtonSyncData : life_RscButtonMenu {  
			idc = -1;  
			//shortcuts[] = {0x00050000 + 2};  
			text = "$STR_PM_SyncData";  
			onButtonClick = "[] call SOCK_fnc_syncData;";  
			x = 0.1;  
			y = 0.805;  
			w = (6.25 / 40);  
			h = (1 / 25);  
		};

Ajouter en dessous

class ButtonMarket : Life_RscButtonMenu {			  
			idc = -1;			  
			text = "Bourse";			  
			onButtonClick = "createDialog ""life_dynmarket_prices"";";			  
			x = 0.26 + (6.25 / 19.8) + (1 / 250 / (safezoneW / safezoneH));			  
			y = 0.805;			  
			w = (6.25 / 40);			  
			h = (1 / 25);		  
		};

Allez dans mpmissions -> core -> shops et “edité fn_virt_sell.sqf”

Remplacer tout par

#include "..\..\script_macros.hpp"
private["_type","_index","_price","_amount","_name"];
if ((lbCurSel 2402) isEqualTo -1) exitWith {};
_type = lbData[2402,(lbCurSel 2402)];

_price = -2;
_itemNameToSearchFor = _type;
{
    _curItemName = _x select 0;
    _curItemPrice = _x select 1;
    if (_curItemName==_itemNameToSearchFor) then {_price=_curItemPrice};
} forEach DYNMARKET_prices;

if (_price isEqualTo -1) exitWith {};
if (_price isEqualTo -2) then {
    _price = M_CONFIG(getNumber,"VirtualItems",_type,"sellPrice");
    if (_price isEqualTo -1) exitWith {};
};

_amount = ctrlText 2405;
if (!([_amount] call TON_fnc_isnumber)) exitWith {hint localize "STR_Shop_Virt_NoNum";};
_amount = parseNumber (_amount);
if (_amount > (ITEM_VALUE(_type))) exitWith {hint localize "STR_Shop_Virt_NotEnough"};
if ((time - life_action_delay) < 0.2) exitWith {hint localize "STR_NOTF_ActionDelay";};
life_action_delay = time;

_price = (_price * _amount);
_name = M_CONFIG(getText,"VirtualItems",_type,"displayName");
if ([false,_type,_amount] call life_fnc_handleInv) then {
    hint format[localize "STR_Shop_Virt_SellItem",_amount,(localize _name),[_price] call life_fnc_numberText];
    CASH = CASH + _price;
    [0] call SOCK_fnc_updatePartial;
    [] call life_fnc_virt_update;
    DYNAMICMARKET_boughtItems pushBack [_type,_amount];
};

if (life_shop_type isEqualTo "drugdealer") then {
    private["_array","_ind","_val"];
    _array = life_shop_npc getVariable["sellers",[]];
    _ind = [getPlayerUID player,_array] call TON_fnc_index;
    if (!(_ind isEqualTo -1)) then {
    _val = ((_array select _ind) select 2);
    _val = _val + _price;
    _array set[_ind,[getPlayerUID player,profileName,_val]];
    life_shop_npc setVariable["sellers",_array,true];
} else {
        _array pushBack [getPlayerUID player,profileName,_price];
        life_shop_npc setVariable["sellers",_array,true];
    };
};

if (life_shop_type isEqualTo "gold" && (LIFE_SETTINGS(getNumber,"noatm_timer")) > 0) then {
    [] spawn {
        life_use_atm = false;
        sleep ((LIFE_SETTINGS(getNumber,"noatm_timer")) * 60);
        life_use_atm = true;
    };
};

[0] call SOCK_fnc_updatePartial;
[3] call SOCK_fnc_updatePartial;

Maintenant on va du coté Life_serveur

Allez a la racine de votre life_server et edité “config.cpp”

Trouvez

    class Actions {
        file = "\life_server\Functions\Actions";
        class pickupAction {};
    };

Ajoutez en dessous

	class DynMarket  // Kovix
    {  
        file = "\life_server\Functions\DynMarket";  
        class calculatePrices {}; 
    class changePrice {};			
        class config {};  
        class getUpdate {};  
        class HandleDB {};  
        class playerLogged {};  
        class sleeper {};  
    };  

Vous obtenez cela

class TON_System {
    tag = "TON";
    class Systems {
        file = "\life_server\Functions\Systems";
        class managesc {};
        class cleanup {};
        class huntingZone {};
        class getID {};
        class vehicleCreate {};
        class spawnVehicle {};
        class getVehicles {};
        class vehicleStore {};
        class vehicleDelete {};
        class spikeStrip {};
        class transferOwnership {};
        class federalUpdate {};
        class chopShopSell {};
        class clientDisconnect {};
        class cleanupRequest {};
        class setObjVar {};
        class keyManagement {};
        class vehicleUpdate {};
        class recupkeyforHC {};
        class handleBlastingCharge {};
        class terrainSort {};
		class insureCar {};
    };

    class Housing {
        file = "\life_server\Functions\Housing";
        class addHouse {};
        class addContainer {};
        class deleteDBContainer {};
        class fetchPlayerHouses {};
        class initHouses {};
        class sellHouse {};
        class sellHouseContainer {};
        class updateHouseContainers {};
        class updateHouseTrunk {};
        class houseCleanup {};
        class houseGarage {};
    };

    class Gangs {
        file = "\life_server\Functions\Gangs";
        class insertGang {};
        class queryPlayerGang {};
        class removeGang {};
        class updateGang {};
    };

    class Actions {
        file = "\life_server\Functions\Actions";
        class pickupAction {};
    };

	class DynMarket  // Kovix
    {  
        file = "\life_server\Functions\DynMarket";  
        class calculatePrices {}; 
		class changePrice {};			
        class config {};  
        class getUpdate {};  
        class HandleDB {};  
        class playerLogged {};  
        class sleeper {};  
    };  
	
    class PlayTime {
        file = "\life_server\Functions\PlayTime";
        class setPlayTime {};
        class getPlayTime {};
    };
};

Allez a la racine de votre life_server et edité “init.sqf”

Ajoutez a la fin

// Initialisation de la bourse (DynMarket).  
[] execVM "\life_server\Functions\DynMarket\fn_config.sqf";

Coté base de donnée, allez sur votre phpmyadmin, sélection votre base de donné, ensuite un bouton sur la droit “SQL” et entrez le code suivant :

CREATE TABLE `dynmarket` (  
  `id` INT NOT NULL DEFAULT 1,  
  `prices` TEXT NOT NULL,  
  PRIMARY KEY (`id`));

On ajoute 1 comme valeur par défaut

INSERT INTO `dynmarket` VALUES (1,'[]');

Dans votre battleye ajouter dans scripts.txt ceci

"createDialog" !"life_dynmarket_prices"

Allez dans Life_server -> Functions -> Dynmarket et edité “fn_config.sqf”

Vous editez selon vos besoin

/*
##################### DYNAMIC MARKET SCRIPT #####################
### AUTHOR: RYAN TT.                                          ###
### STEAM: www.steamcommunity.com/id/ryanthett                ###
###                                                           ###
### DISCLAIMER: THIS SCRIPT CAN BE USED ON EVERY SERVER ONLY  ###
###             WITH THIS HEADER / NOTIFICATION               ###
#################################################################
*/

// ███████████████████████████████████████████████████████████████████████
// █████████████████ DYNAMIC MARKET BASIC CONFIGURATION ██████████████████
// ███████████████████████████████████████████████████████████████████████

DYNMARKET_Serveruptime         = 05;   // Serveruptime after restart in hours
DYNMARKET_UseExternalDatabase  = true; // Should the script use the External Database?
DYNMARKET_PriceUpdateInterval  = 03;   // After how many minutes should the price be updated?
DYNMARKET_CreateBackups        = true; // Should the server save write the prices regulary into the Database? If false, it will save the prices before Server-restart?
DYNMARKET_CreateBackupInterval = 05;   // After how many updates (PriceUpdateIntervals) should the prices be saved into the Database?
DYNMARKET_UserNotification     = false; // Should the user be informed with a hint whenever the prices got updated?

// █████████████████ USER NOTIFICATION TEXTS  █████████████████

DYNMARKET_UserNotification_Text = 
[
	"les prix sont mis a jour ! ",
	"Les nouveaux prix sont calculés par l'île ..."
];

// █████████████████ ITEM GROUP CONFIGURATION █████████████████

DYNMARKET_Items_Groups =
[
	["Legal",
		[
			['apple',-1,10,50],
			['peach',-1,30,100],
			['oil_processed',-1,1950,2640],
			['copper_refined',-1,1050,2150],
			['iron_refined',-1,1350,2050],
			['salt_refined',-1,1460,2360],
			['glass',-1,1450,2350],
			['diamond_cut',-1,1530,4600],
			['cement',-1,990,1950]
		],
		0.5
	],
	
	["Illegal", 
		[
			['heroin_processed',1,5320,8640],
			['marijuana',1,5590,8860],
			['cocaine_processed',1,5680,8970],
			['goldbar',1,95000,115000]
		],
		0.5
	]
];

//ALL SELLABLE ITEMS

DYNMARKET_Items_ToTrack        = 
[
	['apple',10],
	['peach',30],
	['oil_processed',1950],
	['copper_refined',1050],
	['iron_refined',1350],
	['salt_refined',1460],
	['glass',1450],
	['diamond_cut',1530],
	['cement',990],
	['goldbar',95000],
	['heroin_processed',5320],
	['marijuana',5590],
	['cocaine_processed',5680]
];

//███████████████████████████████████████████████████████████████████████
//██████████████████ DO NOT MODIFY THE FOLLOWING CODE! ██████████████████
//███████████████████████████████████████████████████████████████████████

DYNMARKET_Items_CurrentPriceArr = [];
DYNMARKET_sellarraycopy = DYNMARKET_Items_ToTrack;
DYNMARKET_Serveruptime = (DYNMARKET_Serveruptime * 3600) - 300;
{
	_currentArray = _x;
	DYNMARKET_Items_CurrentPriceArr pushBack [_currentArray select 0,_currentArray select 1,0];
} forEach DYNMARKET_Items_ToTrack;
publicVariable "DYNMARKET_UserNotification";
publicVariable "DYNMARKET_UserNotification_Text";
if (DYNMARKET_UseExternalDatabase) then {[1] call TON_fnc_HandleDB;};
DYNMARKET_UpdateCount = 0;
if (DYNMARKET_UseExternalDatabase) then {
	[] spawn {
		sleep DYNMARKET_Serveruptime;
		diag_log "### DYNMARKET >> CURRENT PRICES ARE BEING WRITTEN TO THE DATABASE    ###";
		diag_log "### DYNMARKET >> AS PLANNED, AWAITING RESULT...                      ###";
		[0] call TON_fnc_HandleDB;
	};
};
sleep 5;
[] call TON_fnc_sleeper;

Allez dans mpmission -> config et edité “Config_vItems.hpp”

Indiquer -1 dans les ressources qui vont se retrouver dans votre bourse.

class cocaine_processed {
        variable = "cocaineProcessed";
        displayName = "STR_Item_CocaineP";
        weight = 4;
        buyPrice = -1;
        sellPrice = -1; // <--- Ici 
        illegal = true;
        edible = -1;
        icon = "icons\ico_cocaineProcessed.paa";
    };

Allez dans mpmission -> CfgRemoteExec.hpp

et ajoutez coté server

F(TON_fnc_playerLogged,SERVER) //BOURSE
F(TON_fnc_getUpdate,SERVER) //BOURSE
F(TON_fnc_changePrice,SERVER) //BOURSE

et coté client

F(life_fnc_update,CLIENT) //BOURSE

J’espère que le tuto aura été suffisamment claire, si un problème contactez moi


#2

Les édits ont été effectué dans les fichiers fournis


#3

kovix5519 C’est très cool de ta part d’avoir refait un tuto digne de ce nom.


#4

aecy il change pas du précédent cependant, les fichiers fournis sont mis a jour ^^. J’espère juste que les gens, en cas de problème ouvrirons un post au lieu d’écrire sur celui ci


#5

Des que j’ai du temps, je referais l’aspect graphique de la bourse


#6

Normale qui manque les fichiers Hpp du dialog dans le dl ? ou faut reprendre ceux de l’ancienne version


#7

Oups !! xD. je rectifie cela. Merci :slight_smile:


#8

Derien :grinning:


#9

Edit 08-04-18 : Ajout des fichiers dialog manquant.

Merci Mr_Lacoste


#10

Petite mise a jour visuel pour les gens que ça intéresse :).

Voici les fichiers ( ne contient que le dialog et l’image paa )

Pack Visuel


#11

Pour les joueurs possédant la tablette bleu :wink:

Tablette bleu a DL


#12

kovix5519 Mais qu’il est gentil


#13

Se sont des petites modif. rien de compliqué aussi


#14

kovix5519 Mais faut avoir envie de le faire, surtout pour des gars qui ne rechercheront jamais de solution à leurs problèmes, personnellement je ne l’aurais jamais fait


#15

aecy je suis d’accord avec toi. Cependant, se que j’ai donné c’est pcq’on me la demandé. Mais je vois pas la raison pour la quelle je ne le donnerais pas a tout le monde :slight_smile:


#16

Kovix5519 Jolie :grinning:


#17

Merci :).


#18

Je reste dispo par mp ou alors ouvrez un post dans la section support au quel vous m’identifier, en cas de soucis


#19

kovix5519 a dit dans /404 :

INSERT INTO dynmarket VALUES (1,’[]’);

Bonsoir j’aimerais savoir ou et comment insérer “INSERT INTO dynmarket VALUES (1,’[]’);” svp ?


#20

kovix5519 a dit dans /404 :

INSERT INTO dynmarket VALUES (1,’[]’);

Alors tout simplement comme cela :

  • 1 tu selectionne ta table => Dynmarket
  • 2 tu clique sur SQL en haut
  • 3 tu insere le code
INSERT INTO `dynmarket` VALUES (1,'[]');
  • 4 tu exécute :slight_smile: