Mam plugin, który będzie zapisywać dane od gracza. Wszystko jest ładnie pięknie i cacy tylko, że jak tworzy mi nowe tabele w sql, to są one puste, a chcę aby zawierały dane "Brak" oraz jak mam pobrać dane z messagemode'a i przekazać je do tablic.
Spoiler
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <amxmisc> #include <sqlx> #define PLUGIN "Polaczenie z MySQL" #define VERSION "0.1a" #define AUTHOR "Daniosik" #define SQL_TABLE "dane_alpha_01" new Handle:gTuple new bool:gConnected; new iPlayerDane1[64]; new iPlayerDane2[64]; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd( "say /p", "PokazDane"); register_clcmd( "say /n", "NadpiszDane"); register_clcmd( "messagemode dane1", "Cmd_CreateDane1" ); register_clcmd( "messagemode dane2", "Cmd_CreateDane2" ); } public plugin_cfg(){ sqlStart(); } public client_putinserver(id){ CheckData(id) } public sqlStart(){ gTuple = SQL_MakeDbTuple("xxx", "xxx", "xxx", "xxx"); new szCommand[1024],iLen = 0; iLen += formatex(szCommand,charsmax( szCommand ),"CREATE TABLE IF NOT EXISTS %s (`nick` VARCHAR ( 64 ) , `dane1` VARCHAR (64) , `dane2` VARCHAR( 64 )",SQL_TABLE) iLen += formatex(szCommand[ iLen ],charsmax( szCommand ) - iLen,")" ); SQL_ThreadQuery(gTuple,"sqlStartHandle",szCommand) } public sqlStartHandle(FailState,Handle:Query,Error[],Errorcode,Data[],DataSize) { if(Errorcode) log_amx("Blad w zapytaniu: %s [SaveData]", Error) if(FailState == TQUERY_CONNECT_FAILED) { log_amx("Nie mozna podlaczyc sie do bazy danych.") return PLUGIN_CONTINUE } else if(FailState == TQUERY_QUERY_FAILED) { log_amx("Zapytanie anulowane [SaveData]") return PLUGIN_CONTINUE } gConnected = true; return PLUGIN_CONTINUE } public SaveData(id) { if(!gConnected) return new Data[1] Data[0] = id new qCommand[512], szName[32] get_user_name(id, szName, charsmax(szName)) format(qCommand, sizeof qCommand-1, "INSERT INTO %s (`nick`, `dane1`, `dane2`) VALUES ('%s', '%s', '%s');",SQL_TABLE, szName, iPlayerDane1[id], iPlayerDane2[id]) SQL_ThreadQuery(gTuple, "SaveHandler", qCommand, Data, 1) } public SaveHandler(FailState, Handle:Query, Error[], Errorcode, Data[], DataSize) { if(Errorcode) log_amx("Blad w zapytaniu: %s [SaveData]", Error) if(FailState == TQUERY_CONNECT_FAILED) { log_amx("Nie mozna podlaczyc sie do bazy danych.") return PLUGIN_CONTINUE } else if(FailState == TQUERY_QUERY_FAILED) { log_amx("Zapytanie anulowane [SaveData]") return PLUGIN_CONTINUE } return PLUGIN_CONTINUE } public CheckData(id) { if(!gConnected) return new Data[1] Data[0] = id new qCommand[512], szName[32] get_user_name(id, szName, charsmax(szName)) format(qCommand, sizeof qCommand-1, "SELECT * FROM %s WHERE `nick` = '%s'",SQL_TABLE, szName) SQL_ThreadQuery(gTuple, "CheckHandler", qCommand, Data, 1) } public CheckHandler(FailState, Handle:Query, Error[], Errorcode, Data[], DataSize) { new id = Data[0] if(Errorcode) log_amx("Blad w zapytaniu: %s [CheckData]", Error) if(FailState == TQUERY_CONNECT_FAILED) { log_amx("Nie mozna podlaczyc sie do bazy danych.") return PLUGIN_CONTINUE } else if(FailState == TQUERY_QUERY_FAILED) { log_amx("Zapytanie anulowane [CheckData]") return PLUGIN_CONTINUE } if(!SQL_MoreResults(Query)) { SaveData(id) client_cmd(id, "echo Zapisywanie") } else { client_cmd(id, "echo Wczytywanie") iPlayerDane1[id] = SQL_ReadResult(Query,SQL_FieldNameToNum(Query,"dane1")) iPlayerDane2[id] = SQL_ReadResult(Query,SQL_FieldNameToNum(Query,"dane2")) } return PLUGIN_CONTINUE } public NadpiszDane(id) { if(!gConnected) return new Data[1] Data[0] = id new qCommand[512], szName[32] get_user_name(id, szName, charsmax(szName)) format(qCommand, sizeof qCommand-1, "UPDATE %s SET `dane1` = '%s' , `dane2` = '%s' WHERE `nick` = '%s'",SQL_TABLE, iPlayerDane1[id], iPlayerDane2[id], szName) SQL_ThreadQuery(gTuple, "SaveHandler", qCommand, Data, 1) client_cmd(id, "echo Nadpisywanie") } public PokazDane(id) { client_print(id, print_chat, "Dane1: %s | Dane2: %s", iPlayerDane1[id], iPlayerDane2[id]) } public Cmd_CreateDane1(id) { new szArgs[ 60 ]; read_args( szArgs, charsmax( szArgs ) ); remove_quotes( szArgs ); iPlayerDane1[id] = szArgs; } public Cmd_CreateDane2(id) { new szArgs[ 60 ]; read_args( szArgs, charsmax( szArgs ) ); remove_quotes( szArgs ); iPlayerDane2[id] = szArgs; }
Dla moda, kod ma mniej niz 200 linijek
Użytkownik daniosik edytował ten post 13.10.2013 17:54