Witam!
Tak wygląda funkcja zapisu danych:
public sql_save(id) { if (gTablesLoaded[id] == 1) { if ( gIntermission ) { sql_save_nonthreaded(id); return; } new tempSaveKeyID[63], tempSaveKeyIP[63]; copy(tempSaveKeyID, charsmax(tempSaveKeyID), gSaveKeyID[id]); replace_all(tempSaveKeyID, charsmax(tempSaveKeyID), "'", "\'" ); copy(tempSaveKeyIP, charsmax(tempSaveKeyIP), gSaveKeyIP[id]); replace_all(tempSaveKeyIP, charsmax(tempSaveKeyIP), "'", "\'" ); formatex(g_Cache, charsmax(g_Cache), "UPDATE zp_user_weapons SET player_selection=%i, weapon_first=%i, weapon_second=%i, player_ip=^"%s^" WHERE player_id=^"%s^"", typ_wybierania[id] == 1 ? 0 : typ_wybierania[id], typ_wybierania[id] == 0 ? -1 : first_selection[id], typ_wybierania[id] == 0 ? -1 : second_selection[id], tempSaveKeyIP, tempSaveKeyID); SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_Cache); } }
Wszystko dziala poprawanie:
I teraz kiedy probuje odczytac adres IP danego gracza i porownac go z adresem podczas laczenia sie z serwerem to juz mam problemy z tym.
Funkcja sprawdzania/odczytu danych z bazy SQL:
public SelectHandle(FailState, Handle:Query, Error[], Errcode, Data[], DataSize) { if (FailState) { if (FailState == TQUERY_CONNECT_FAILED) { log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error); } else if (FailState == TQUERY_QUERY_FAILED) { log_amx("Load Query failed. [%d] %s", Errcode, Error); } return; } new id = Data[0]; if (!SQL_NumResults(Query)) { typ_wybierania[id] = 0; first_selection[id] = 0; second_selection[id] = 0; new tempSaveKeyID[63]; copy(tempSaveKeyID, charsmax(tempSaveKeyID), gSaveKeyID[id]); replace_all(tempSaveKeyID, charsmax(tempSaveKeyID), "'", "\'" ); formatex(g_Cache, charsmax(g_Cache), "INSERT INTO zp_user_weapons VALUES('%s', '0', '0', '0', '0')", tempSaveKeyID); SQL_ThreadQuery(g_SqlTuple, "QueryHandle", g_Cache); } else { new tempSaveKeyIP[63]; copy(tempSaveKeyIP, charsmax(tempSaveKeyIP), gSaveKeyIP[id]); replace_all(tempSaveKeyIP, charsmax(tempSaveKeyIP), "'", "\'" ); typ_wybierania[id] = SQL_ReadResult(Query, 0); first_selection[id] = SQL_ReadResult(Query, 1); second_selection[id] = SQL_ReadResult(Query, 2); } gTablesLoaded[id]++; }
I w moim przypadku adres IP będzie: SQL_ReadResult(Query, 3);
Kiedy tworze zmienną adres_ip[33]
i próbuję ustawić to w ten sposób:
adres_ip[id] = SQL_ReadResult(Query, 3);
A następnie chcę odczytać ten adres IP robiąc to używajac kodu ponizej:
public PokazIP(id) { new tempSaveKeyIP[63]//, tempSaveKeyOldIP[63] copy(tempSaveKeyIP, charsmax(tempSaveKeyIP), gSaveKeyIP[id]); replace_all(tempSaveKeyIP, charsmax(tempSaveKeyIP), "'", "\'" ); //copy(tempSaveKeyOldIP, charsmax(tempSaveKeyOldIP), gSavedKeyIP[id][64]); //replace_all(tempSaveKeyOldIP, charsmax(tempSaveKeyOldIP), "'", "\'" ); client_print(id, print_chat, "Twoje IP: %s, a w bazie widnieje jako %s", tempSaveKeyIP, dane) }
To wyswietla mi tylko info:
"widnieje jako 185" reszty adresu IP nie widac, tylko pierwsze trzy cyfry to kropki.
Jakie pomysly, co zle robie?