Kriax Posté(e) le 15 avril 2013 Share Posté(e) le 15 avril 2013 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
barbierp Posté(e) le 15 avril 2013 Share Posté(e) le 15 avril 2013 Super ! Merci beaucoup je vais tester ça. Après comment on relie ça aux plugins trails, chapeaux ... ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kriax Posté(e) le 15 avril 2013 Auteur Share Posté(e) le 15 avril 2013 Tu doit codé par au dessus des trails et des chapeaux ^^ Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
barbierp Posté(e) le 15 avril 2013 Share Posté(e) le 15 avril 2013 (modifié) 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é le 15 avril 2013 par barbierp Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Skuzy Posté(e) le 15 avril 2013 Share Posté(e) le 15 avril 2013 cest le code pr creer les tables dans ta base de données Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
barbierp Posté(e) le 15 avril 2013 Share Posté(e) le 15 avril 2013 Et je le met où ? Parce que si j'ai déjà sourcebans dans le databases, ca peut pas marcher sans se servir de se code ? En plus je peux créer qu'une seule base de donnée avec mon site et je l'ai déjà utilisé pour sourcebans. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Skuzy Posté(e) le 15 avril 2013 Share Posté(e) le 15 avril 2013 tu change le define et tu met genre point , et tt ton code tu le fou dans l'onglet sql de phpmyadmin Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
barbierp Posté(e) le 15 avril 2013 Share Posté(e) le 15 avril 2013 Donc il faut une 2ème base de donnée ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Skuzy Posté(e) le 15 avril 2013 Share Posté(e) le 15 avril 2013 j'ai tester ton plugin kriax , j'ai l'impression que l'insertion du joueur ds la base de données ne fonctionne pas :/ mtn reste aux autres a confirmer Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Skuzy Posté(e) le 15 avril 2013 Share Posté(e) le 15 avril 2013 Donc il faut une 2ème base de donnée ? non juste une autre table Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
barbierp Posté(e) le 15 avril 2013 Share Posté(e) le 15 avril 2013 Skuzy as-tu steam ou skype stp ? Si ca ne te dérange j'aimerai bien de l'aide comme je suis vraiment nul en codage sql ... :s Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Skuzy Posté(e) le 15 avril 2013 Share Posté(e) le 15 avril 2013 Skuzy as-tu steam ou skype stp ? Si ca ne te dérange j'aimerai bien de l'aide comme je suis vraiment nul en codage sql ... :s je t'ai ajouter Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nems_raiden Posté(e) le 15 avril 2013 Share Posté(e) le 15 avril 2013 Donner un code pas testé. 3 solutions : 1 --> il bug 2 --> tu la testé et tu peux faire genre^^ 3 --> pas de toi kiss kriaxounet:p Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Skuzy Posté(e) le 15 avril 2013 Share Posté(e) le 15 avril 2013 si quelqu'un savais debugger l'insertion des joueurs dans la base de donnée ca serait cool , car a mon avis cest cela qui bug Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kriax Posté(e) le 15 avril 2013 Auteur Share Posté(e) le 15 avril 2013 Raidn je t'expliquerais un truc perso sur Steam et tu comprendras pourquoi :) Je reponderais au question une fois sur un pc :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kriax Posté(e) le 15 avril 2013 Auteur Share Posté(e) le 15 avril 2013 Je te corrige le code demain et je le testerais ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Skuzy Posté(e) le 15 avril 2013 Share Posté(e) le 15 avril 2013 Je te corrige le code demain et je le testerais ;) Ok merci bcp Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Butteur Posté(e) le 16 avril 2013 Share Posté(e) le 16 avril 2013 Je te confirme que c'est pareil chez moi Skuzy pour le bug ! :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Skuzy Posté(e) le 16 avril 2013 Share Posté(e) le 16 avril 2013 Je te confirme que c'est pareil chez moi Skuzy pour le bug ! :) ok merci de la cnfirmation Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Phobie Posté(e) le 16 avril 2013 Share Posté(e) le 16 avril 2013 Bonsoir, Inutile de se prendre la tête, restez dans la limite du convenable, il vaut mieux pour tout le monde. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kriax Posté(e) le 16 avril 2013 Auteur Share Posté(e) le 16 avril 2013 Je regarde pourquoi ça merde et je vous donne la correction. Kriax. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kriax Posté(e) le 16 avril 2013 Auteur Share Posté(e) le 16 avril 2013 (modifié) 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é le 16 avril 2013 par Kriax Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Butteur Posté(e) le 16 avril 2013 Share Posté(e) le 16 avril 2013 Merci de ton travail kriax. Amicalement, Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kriax Posté(e) le 16 avril 2013 Auteur Share Posté(e) le 16 avril 2013 Pas de soucis :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Skuzy Posté(e) le 16 avril 2013 Share Posté(e) le 16 avril 2013 Merci kriax , y'avais quoi qui bugguer? ( je ne l'ai pas encore tester j'attend la mise à jour des serveur pour le faire.) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
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.