• [5.0] Créer un "Hotel des ventes / Enchères"


    Bonsoir a tous !

    Tout d’abord le tuto n’est pas de moi, mais de Fresqo.

    Il a cependant était mis a jour, j’attends néanmoins vos retours.

    Aperçu ( venant du tuto d’origine )

    FONCTIONNALITÉS

    • Hotel des ventes persistant (sauvegarde sur une table de DB)

    • Peut vendre les deux éléments du menu I et de l’inventaire Virtuel Y

    • Une temporisation sur les items et une suppression si l’article y est depuis trop longtemps.

    • Fonction de recherche.

    • Bannière animée.

    • Possibilité d’acheter des articles lorsque les vendeurs sont hors ligne

    • Les vendeurs reçoivent de l’argent quand ils se connectent avant (en cas de vente hors ligne)

    • Taxe de pourcentage pour placer une annonce.

    LIMITATIONS

    • Limité a 80 annonces maximums

    • Impossible de vendre plusieurs armes , seulement des munitions._


    Début du tuto !

    Lien du pack

    Mpmission :

    • Déplacez le dossier vAH se trouvant dans mission/core/ dans votre dossier core se trouvant dans votre mpmission !

    • Déplacez les fichiers “AH_buy” et “AH_vsell” se trouvant dans mission/dialog/ dans votre dossier dialog se trouvant dans votre mpmission !

    • Déplacez les textures se trouvant dans mission/textures/ dans votre dossier texture sue trouvant dans votre mpmission !

    Ouvrir votre fichiers functions et inclure le code suivant sous la “class vehicle”

    class vAH
    	{
    		file = "core\vAH";
    		class vAH_load;
    		class vAH_buy;
    		class vAH_reciever;
    		class vAH_loadInventory;
    		class vAH_sell;
    		class vAH_checkItem;
    		class vAH_takeBack;
    		class vAH_select;
    	};
    
    
    

    Allez dans votre dossier core et ouvrez le fichier init.sqf

    Ajoutez a la fin :

    //Hotel des ventes
    waitUntil {!isNil "vAH_loaded"};
    private["_total","_uid","_toDel"];
    _total = 0;
    _toDel = [];
    _uid = getPlayerUID player;
    {if ((_x select 5 IsEqualto _uid) && (_x select 7 IsEqualto 2)) then {_total = _total + (_x select 4);_toDel pushBack (_x select 0)};}forEach all_ah_items;
    
     if (_total > 0) then {
     {[1,_x] remoteExec ["TON_fnc_vAH_update",false];}forEach _toDel;
    [0,format["Pendant que vous étiez déconnecté vous avez vendu $%1 à l'hotel des ventes",[_total]call life_fnc_numberText]] remoteExec ["life_fnc_broadcast",player];
    life_atmcash = life_atmcash + _total;
    };
    
    

    Allez ensuite dans votre dossier dialog et ouvrez “masterhandler”, ajoutez :

    #include "AH_buy.hpp" //HDV 5.0
    #include "AH_vsell.hpp" //HDV 5.0
    
    

    Ouvrez votre CfgRemoteExec.hpp et ajoutez

    F(TON_fnc_vAH_update,ANYONE)
    F(life_fnc_vah_reciever,ANYONE)
    
    

    Côté Life_Server :

    • Déplacez le dossier vAH se trouvant dans life_server/functions/ vers votre Life_Server/functions/

    Ouvrez votre “config.cpp” et ajoutez sous la class TON_System :

    		class vAH {
    			file = "\life_server\Functions\vAH";
    			class vAH_init {};
    			class vAH_update {};
    		};
    
    
    

    Ouvrez votre init.sqf et ajoutez le code suivant a la fin :

    //Hotel des ventes
    all_ah_items = [];
    publicVariable "all_ah_items";
    [] spawn TON_fnc_vAH_init;
    [] spawn
    {
        while {true} do
        {
        sleep (20 * 60);
        if (count all_ah_items > 0) then
            {
                [] spawn TON_fnc_vAH_update;
            };
        };
    };
    
    

    Côté mapping :

    Ajoutez un png/panneau ( a vous de voir ) et inclure l’init suivante :

    this addAction ["Hotel des ventes",life_fnc_vAH_load];
    
    

    Côté BDD :

    Executez le code sql suivant dans votre BDD :

    CREATE TABLE IF NOT EXISTS `ah` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `type` int(5) NOT NULL DEFAULT '0',
      `amount` int(5) NOT NULL DEFAULT '0',
      `item` text NOT NULL,
      `price` int(100) NOT NULL DEFAULT '0',
      `seller` varchar(50) NOT NULL,
      `sellername` varchar(32) NOT NULL,
      `status` int(5) NOT NULL DEFAULT '0',
      `time` int(11) NOT NULL DEFAULT '0',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=174 DEFAULT CHARSET=latin1;
    
    

    Pour augmenter le nombre d’article max par joueur :

    • Allez dans fn_vAH_sell.sqf et modifiez
    _able= 10;
    

    (Actuellement il est sur 10 par joueur)

    Pour modifier la taxe :

    • Allez dans fn_vAH_sell.sqf et modifiez
    _tax = round (_price * 0.03);
    

    le 0.3 correspond a 3%

    Voilà je pense que tout est bon :)

  • Salut,
    j’ai une erreur avec ton script:

    22:53:23 Error in expression <me","_playerName","_toDel"];
    _switch = [_this,0,0,[0]] call BIS_fnc_param;
    _id =>
    22:53:23   Error position: <_this,0,0,[0]] call BIS_fnc_param;
    _id =>
    22:53:23   Error Variable indéfinie dans une expression: _this
    22:53:23 File \life_server\Functions\vAH\fn_vAH_update.sqf [TON_fnc_vAH_update], line 13```
  • Quand tu effectue quelle action?

  • enfaite l’objet apparait, et au moment ou quelqu’un l’achète, il le reçoit, mais n’est pas supprimez du market

  • Je t’avouerais que comme, je suis solo et n’ayant pas de seconde personne pour tester c’est assez compliqué. je jette un oeil a ca

  • J’ai de l’avancement, cependant j’aurais besoin d’un vrai dev pour comprendre là x)

    Je n’ai plus aucunes erreur

    Voici le contenu du fichier fn_vAH_update.sqf

    /*
    	File: fn_vAH_update.sqf
    	Description: Sorts all db calls for the Vendetta AH
    	Author: Fresqo
    	inputs.
    	0-Removes a 20minute counter from item timer and Updates the DB every 20 minutes. if timer runs out then change status to
    	1- deletes a field once payment has been made and player has been notified?
    	2- updates db after it gets ah variables from case 0
    	3- changes status to sold and awaits player to log in to get paid
    	4- inserts a new item into the db
    */
    private["_switch","_id","_rows","_query","_queryResult","_time","_status","_handle","_seller","_item","_items","_itemName","_playerName","_toDel","_this"];
    //_switch = param [0];
    /*_target = [_this, 0, objNull, [objNull,[]]] call BIS_fnc_param;*/
    		_id = param [1];
    		_time = param [2];
    		_status = param [3];
    		_seller = param [4];
    		_item = param [5];
    		_itemName = param [6];
    		_playerName = param [7];
    
    vAH_loaded = false;
    publicVariable "vAH_loaded";
    
    switch (param [0]) do {
    	case 0: {
    		_handle = {_id = _x select 0;_time = _x select 8;_time = round(_time - 1); if (_time < 1 && _x select 7 == 0) then {_status = 1} else {_status = _x select 7}; _toDel = round(_time + 216); if (_toDel < 1) then {[1,_id] spawn TON_fnc_vAH_update} else {[2,_id,_time,_status] spawn TON_fnc_vAH_update};} forEach all_ah_items;
    		waitUntil {scriptDone _handle};
    		sleep 0.3;
    		diag_log "------------- Auction House Times UPDATED -------------";
    		[] spawn TON_fnc_vAH_init;
    	};
    	case 1: {
    		_query = format["DELETE FROM ah WHERE id ='%1'",_id];
    		[_query,1] call DB_fnc_asyncCall;
    		diag_log format["Vendetta Auction House: ITEM REMOVED: %1",_query];
    		[] spawn TON_fnc_vAH_init;
    	};
    	case 2: {
    		_query = format["UPDATE ah SET time='%1', status='%2' WHERE id='%3'",_time,_status,_id];
    		[_query,1] call DB_fnc_asyncCall;
    	};
    	case 3: {
    		_query = format["UPDATE ah SET status='2' WHERE id ='%1'",_id];
    		[_query,1] call DB_fnc_asyncCall;
    		diag_log format["Vendetta Auction House: ITEM SOLD: %1",_query];
    
    		[] spawn TON_fnc_vAH_init;
    	};
    	case 4: {
    		_items = [_item,_itemName];
    		_items = [_items] call DB_fnc_mresArray;
    		_query = format["INSERT INTO ah (type, amount, item, price, seller, sellername, status, time) VALUES ('%1', '%2', '%3', '%4', '%5', '%6','0', '504')",_id,_time,_items,_status,_seller,_playerName];
    		[_query,1] call DB_fnc_asyncCall;
    		diag_log format["Vendetta Auction House: ITEM ADDED: %1",_query];
    		[] spawn TON_fnc_vAH_init;
    	};
    };
    
    vAH_loaded = true;
    publicVariable "vAH_loaded";
    
    
    

    Le truc c’est que l’annonce ne se delete pas, j’ai check mes logs extdb cependant RAS

    Logs server

    Logs client

    Logs extdb3

    @тσм @Steez avez vous une idées?

  • L erreur n est pas dans ce script mais dans celui qui envoie le parametre select 0, que je ne trouve nul part non plus !

    Je suis le méchant monsieur qui n aide pas !
    Le SQF ça s'apprend, ça ne s'improvise pas !
    Mon CV: https://www.youtube.com/user/brutalzic
    Mes sites: http://btrteam.fr
    http://devarma3france.fr
    Mon TS = ts3.btrteam.fr:52432
    Projet UnRealLife.fr

  • AH merde x) Merci d’avoir jeté un œil @brutalzic

  • Résolu, j’ai fais un truc tout con xD
    A croire que la nuit port conseil.

    J’ai été check le fichier fn_vAH_takeBack, car lui le retirer de la BDD

    Et donc j’ai juste ajouté

    [1,_id] remoteExec ["TON_fnc_vAH_update"];
    

    Dans le fichier buy

  • Mise a jour du tuto :

    Remplacement du lien du pack ( fichier mis a jour dedans )
    Ajout d’un remote dans CfgRemoteExec

  • Salut, petit soucis constaté, le temp des items ajoutés dedans reste toujours le même :)

  • Ah !! J’vais y jeter un oeil

Messages 13Vues 567
Se connecter pour répondre