Witam,
Mam w bazie 5 tabel, w każdej są dane gracza, by je wczytać używam takiego kodu (jest to jeden z 5):
public CheckData(id) { if(!gConnected) return new Data[1] Data[0] = id new qCommand[512], szName[64] get_user_name(id, szName, charsmax(szName)) [...] format(qCommand, charsmax(qCommand), "SELECT * FROM `AK47` WHERE `nick` = '%s'", szName) SQL_ThreadQuery(gTuple, "CheckHandlerAK47", qCommand, Data, 1) [...] [...] [...] [...] }
public CheckHandlerM4A1(FailState, Handle:Query, Error[], Errorcode, Data[], DataSize) { new id = Data[0] if(Errorcode) log_amx("Blad w zapytaniu: %s [CheckDataM4A1]", 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 [CheckDataM4A1]") return PLUGIN_CONTINUE } if(SQL_MoreResults(Query)){ pM4A1[id][1] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Cyrex")) pM4A1[id][2] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "DragonKing")) pM4A1[id][3] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Assimov")) pM4A1[id][4] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Nuclear")) } return PLUGIN_CONTINUE; }
No i teraz, jak wejdzie nagle 30 osób po zmianie mapy, to trochę to mija zanim wszystko się załaduje. Druga sprawa to zapis, potrafi nieźle namieszać i komuś się nie zapisze.
public SaveData(id) { if(!gConnected || !Loaded[id]) return new Data[1] Data[0] = id new qCommand[768], szName[64] get_user_name(id, szName, charsmax(szName)) [...] [...] format(qCommand, charsmax(qCommand), "UPDATE M4A1 SET Cyrex='%d', DragonKing='%d', Assimov='%d', Nuclear='%d' WHERE nick='%s'", pM4A1[id][1], pM4A1[id][2], pM4A1[id][3], pM4A1[id][4], szName); SQL_ThreadQuery(gTuple, "SaveHandler", qCommand, Data, 1) [...] [...] [...] }
I teraz przez to wszystko, dawanie banów na serwerze trwa nawet kilka minut (Amxbans). Jakieś pomysły jak to zoptymalizować?
Użytkownik oeN. edytował ten post 28.06.2015 18:24