Aller au contenu
News ticker
  • Bienvenue sur le nouveau forum VeryGames
  • Welcome to the new VeryGames forum
  • VeryNews

    .:: PARTAGE - AIDE ::. Script Points | MYQSL |


    Kriax

    Messages recommandés

    Salut,

     

    ayant vue que plusieurs personnes cherche un système de menu d'achat et tout et tout, je décide de partagé un petit code que j'ai codé pour la communauté VeryGames.

    Je tiens à signalé que le code n'est pas tester mais devrais fonctionner :)

    -_> C'est mieux que rien ^^.

     

    Cela fait biens longtemps que j'ai pas fait un partage utile donc autant en refaire un petit :p

     

    Ce code ne fait que quelque petite chose :

    - Enregistrement du joueurs dans la base de donnée si il n'y est pas.

    - Les points que le joueur possèdes sont repris si il est dans la base de donnée.

    - Les points sont sauvegarder à la déconnexion du joueur

    - Timer de X secondes (Temps configurable).

    - X points sont donnée par le timer (Nombre de points configurable).

     

    Vous l'aurez compris, ce script permet de donnée des points au joueur connecter sur le serveur.

    Les points ce donne seulement si le joueur n'est pas en spectateur.

     

    Il y à deux petites "fonctions" qui sont présentes, elles sont la pour donner et retiré des points.

     

    Donner des points :

    GivePoints(client, amount)
    

    Retirer des points :

    RemovePoints(client, amount)
    

    @amount = Nombre de points

     

    Plus haut je parlais de configuration, les configurations se font via le fichier config/points/config.cfg

    Il n'y à que deux lignes mais ces deux lignes sont primordiales !

    Mais il faut aussi édité la #define présente à la ligne 3 qui permettra une connexion dans le database.cfg.

     

    Bon bah j'ai terminer.

    Je vous met les codes et les configs dans le post et une archive de téléchargement comment toujours.

     

    config/points/config.cfg

    "Points"
    {
       "timer"    "180.0"
       "points"    "3"
    }
    

    @timer = Temps en secondes avant de donné les points

    @points = Nombre de points donnés

     

    Code

    #include <sourcemod>
    
    #define SQL_CONFIG "sourcebans"
    
    new Handle:g_hDatabase;
    new Handle:g_hTimerGive[MAXPLAYERS+1] = { INVALID_HANDLE, ... };
    new Float:g_fTimer;
    new g_iPoints[MAXPLAYERS+1] = 0;
    new g_iGivePoints;
    
    public OnMapStart()
    {
       LoadConfig();
    }
    
    public OnPluginStart()
    {
       GetInfoBDD();
    }
    
    public OnClientPutInServer(client)
    {
       if(!IsFakeClient(client))
       {
           SQL_CheckClient(client);
           g_hTimerGive[client] = CreateTimer(g_fTimer, Timer_GivePoints, client, TIMER_REPEAT);
       }
    }
    
    public OnClientDisconnect(client)
    {
       if(!IsFakeClient(client))
       {
           SQL_UpdatePlayer(client);
           FlashTimer(client)
       }
    }
    
    /**********************************************************************************************************************************************************************/
    /**********************************************************************************************************************************************************************/
    
    public Action:Timer_GivePoints(Handle:timer, any:client)
    {
       if(IsClientInGame(client) && GetClientTeam(client) > 1)
       {
           GivePoints(client, g_iGivePoints)
       }
    }
    
    /**********************************************************************************************************************************************************************/
    /**********************************************************************************************************************************************************************/
    
    public LoadConfig()
    {
       new Handle:hKv = CreateKeyValues("Points");
    
       decl String:sConfig[PLATFORM_MAX_PATH];
       BuildPath(Path_SM, sConfig, sizeof(sConfig), "configs/points/config.cfg");
    
       if (!FileToKeyValues(hKv, sConfig)) 
       {
           CloseHandle(hKv);
           SetFailState("Impossible de lire le fichier %s", sConfig);
       }
    
       g_fTimer = KvGetFloat(hKv, "timer", 180.0);
       g_iGivePoints = KvGetNum(hKv, "points", 3);
    
       CloseHandle(hKv);
    }
    
    /**********************************************************************************************************************************************************************/
    /**********************************************************************************************************************************************************************/
    
    public GetInfoBDD()
    {
       if (SQL_CheckConfig(SQL_CONFIG))
       {
           new String:sError[255];
           g_hDatabase = SQL_Connect(SQL_CONFIG, true, sError, sizeof(sError));
           if (g_hDatabase == INVALID_HANDLE)
           {
               LogMessage("Erreur de connexion: %s", sError);
           }
           else 
           {
               LogMessage("Connexion à la BDD MySQL réussie");
           }
       } 
       else
       {
           LogError("Impossible de trouvé <%s> dans le fichier databases.cfg", SQL_CONFIG);
       }
    }
    
    stock SQL_CheckClient(client) 
    {
       decl String:sStamID[64]
       decl String:sBuffer[255];
       GetClientAuthString(client, sStamID, sizeof(sStamID));
    
       Format(sBuffer, sizeof(sBuffer),"SELECT points FROM `points_players` WHERE authid = '%s';", sStamID);
       new Handle:hQuery = SQL_Query(g_hDatabase, sBuffer);
       if(hQuery)
       {
           SQL_Rewind(hQuery);
           new bool:fetch = SQL_FetchRow(hQuery);
           if(!fetch)
           {
               SQL_InsertPlayer(client);
           }
           else      
           {
               g_iPoints[client] = SQL_FetchInt(hQuery, 0);
           }
       }
    }
    
    stock SQL_InsertPlayer(client)
    {
       decl String:sName[255];
       GetClientName(client, sName, sizeof(sName));
    
       decl String:sNameSQL[255];
       SQL_EscapeString(g_hDatabase, sName, sNameSQL, sizeof(sNameSQL));
    
       decl String:SteamID[32];
       GetClientAuthString(client, SteamID, sizeof(SteamID));
    
       decl String:sBuffer[255];
       Format(sBuffer, sizeof(sBuffer), "INSERT INTO `points_players` (`name`, `authid`, `points`) VALUES ('%s', '%s', 0);", sNameSQL, SteamID);    
       PrintToConsole(client, sBuffer);
    
       SQL_FastQuery(g_hDatabase, sBuffer);    
       return true;
    }
    
    stock SQL_UpdatePlayer(client) 
    {
       decl String:sName[255];
       GetClientName(client, sName, sizeof(sName));
    
       decl String:sNameSQL[255];
       SQL_EscapeString(g_hDatabase, sName, sNameSQL, sizeof(sNameSQL));
    
       decl String:SteamID[32];
       GetClientAuthString(client, SteamID, sizeof(SteamID));
    
       decl String:sBuffer[255];
       Format(sBuffer, sizeof(sBuffer), "UPDATE points_players SET name = '%s', points = '%d' WHERE authid = '%s';", sNameSQL, SteamID);
       SQL_FastQuery(g_hDatabase, sBuffer);
    }
    
    /**********************************************************************************************************************************************************************/
    /**********************************************************************************************************************************************************************/
    
    public FlashTimer(client)
    {
       if(g_hTimerGive[client] != INVALID_HANDLE)
       {
           KillTimer(g_hTimerGive[client]);
           g_hTimerGive[client] = INVALID_HANDLE;
       }    
    }
    
    /**********************************************************************************************************************************************************************/
    /**********************************************************************************************************************************************************************/
    
    stock GivePoints(client, amount)
    {
       g_iPoints[client] += amount;
    }
    
    stock RemovePoints(client, amount)
    {
       g_iPoints[client] -= amount;
    }
    

     

    Code à inséré dans votre base de donnée pour créé la tables.

    CREATE TABLE IF NOT EXISTS `points_players` (
     `name` varchar(255) NOT NULL,
     `authid` varchar(255) NOT NULL,
     `points` int(255) NOT NULL DEFAULT '0',
     PRIMARY KEY (`name`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
    

    @ponts_players = Nom de la table

    @name = Pseudo des joueurs

    @authid = SteamID des joueurs

    @points = Nombre de points des joueurs

    Je le redit encore, je n'ai pas tester le code mais d'un point de vue LOGIQUE il devrais fonctionner :)

    Téléchargement de l'archive : points.zip

    Ce script est la pour aider de futur codeur, ou des codeurs qui ne savent pas comment utilisé le SQL en SourcePawn :)

    Je verrais pour donner un fichier d'explication du plugin un peu plus tard, quand j'aurais la certitude que le script fonctionne ^^

    @lameur : Cassez-vous de mon post si vous êtes la pour faire chier votre monde.

     

    Kriax.

    Lien vers le commentaire
    Partager sur d’autres sites

    Et sinon j'ai pas compris où il fallait que je mette ca :

    CREATE TABLE IF NOT EXISTS `points_players` (

    `name` varchar(255) NOT NULL,

    `authid` varchar(255) NOT NULL,

    `points` int(255) NOT NULL DEFAULT '0',

    PRIMARY KEY (`name`)

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

     

    Et le define de la ligne 3, je peux le laisser comme ça si j'ai sourcebans installé ?

    Et comment voit-on le nombre de points qu'on a stp ?

     

    Merci

    Modifié par barbierp
    Lien vers le commentaire
    Partager sur d’autres sites

    Après avoir tester cette version du script je peux vous assuré que ça fonctionne.

     

    sm plugins list via le rcon dans votre console et vous saurez si le smx est lancé, sinon il diras l'erreur, ou alors la connexion au Mysql merde ou bien il manque le fichier de config :)

     

    Le fichier de config doit être présent obligatoirement !!!!

     

    Kriax.

    Modifié par Kriax
    Lien vers le commentaire
    Partager sur d’autres sites

    Rejoindre la conversation

    Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

    Invité
    Répondre à ce sujet…

    ×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

      Seulement 75 émoticônes maximum sont autorisées.

    ×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

    ×   Votre contenu précédent a été rétabli.   Vider l’éditeur

    ×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

    ×
    ×
    • Créer...