Witam.
Mam problem z lvl na moim COD. Ludziom czasami lvl znika a niektórzy po prostu dostają znikąd lvl (Pewnie czyjś się kopiuje).
Jest to strasznie problematyczne.
Czy ktoś wie jak to naprawić???
Tutaj zapodaję jak wygląda mój sql.inc
#define SQL_SYS stock Module:g_moduleSQLSys; public SQLSys_OnPluginStart(){ new moduledata[ModuleData]; moduledata[ModuleData_Disabled] = false; moduledata[ModuleData_Hidden] = true; strcopy(moduledata[ModuleData_FullName], MM_DATA_FULLNAME, "[Cmod:core] Save data system"); strcopy(moduledata[ModuleData_ShortName], MM_DATA_SHORTNAME, "SQLSys"); strcopy(moduledata[ModuleData_Description], MM_DATA_DESCRIPTION, "Basic save system"); moduledata[ModuleData_Dependencies][0] = INVALID_MODULE; g_moduleSQLSys = ModuleMgr_Register(moduledata); EventMgr_RegisterEvent(g_moduleSQLSys, "Event_OnEventsRegister", "SQLSys_OnEventsRegister"); g_hCmodSQL = SQLite_UseDatabase("codmod_lvl", g_sCmodSQLError, sizeof(g_sCmodSQLError)); if(g_hCmodSQL == INVALID_HANDLE) PrintToServer("Could not connect: %s", g_sCmodSQLError); SQL_FastQuery(g_hCmodSQL, "CREATE VIRTUAL TABLE IF NOT EXISTS codmod_info USING fts4(steamid, class);"); SQL_FastQuery(g_hCmodSQL, "CREATE TABLE IF NOT EXISTS codmod (id INTEGER primary key autoincrement, steamid TEXT references codmod_info(steamid), class TEXT references codmod_info(class), lvl INTEGER, exp INTEGER, sInt INTEGER, sCon INTEGER, sStr INTEGER, sDex INTEGER, UNIQUE(steamid, class) ON CONFLICT REPLACE);"); } public SQLSys_OnEventsRegister(){ #if defined EVENT_MANAGER EventMgr_RegisterEvent(g_moduleSQLSys, "Event_OnClientPutInServer", "SQLSys_OnClientPutInServer"); EventMgr_RegisterEvent(g_moduleSQLSys, "Event_OnClientDisconnect", "SQLSys_OnClientDisconnect"); #endif } public SQLSys_OnClientPutInServer(client){ g_iCmodPlayerClass[client] = 0; SQLSys_Load(client, 0); } public SQLSys_OnClientDisconnect(client){ SQLSys_Save(client); } public SQLSys_Save(id) { decl String:_tmp[1025]; decl String:_authid[64]; if(IsFakeClient(id)) return; if(!GetClientAuthId(id, AuthId_Steam2, _authid, 63)) return; //LogError("_auth = %s", _authid); Format(_tmp, sizeof(_tmp), "INSERT INTO codmod (steamid, class, lvl, exp, sInt, sCon, sStr, sDex) VALUES ('%s', '%s', %d, %d, %d, %d, %d, %d);", _authid, g_sCmodClassName[g_iCmodPlayerClass[id]], g_iCmodLvl[id], g_iCmodExp[id], g_iCmodPlayerINT[id], g_iCmodPlayerCON[id], g_iCmodPlayerSTR[id], g_iCmodPlayerDEX[id]); SQL_TQuery(g_hCmodSQL, SQLSys_SaveHandle, _tmp); } public SQLSys_SaveHandle(Handle:owner, Handle:hndl, const String:error[], any:data){ if (hndl == INVALID_HANDLE){ LogError("[Cmod:SQL:Save]Query failed! %s", error); } } public SQLSys_Load(id, classN) { new String:_tmp[513]; decl String:_authid[64]; if(!GetClientAuthId(id, AuthId_Steam2, _authid, 63)) return -1; Format(_tmp, sizeof(_tmp), "SELECT lvl, exp, sInt, sCon, sStr, sDex FROM codmod WHERE steamID = '%s' AND class = '%s';", _authid, g_sCmodClassName[classN]); new Handle:_query = SQL_Query(g_hCmodSQL, _tmp); if(_query == INVALID_HANDLE){ SQL_GetError(g_hCmodSQL, g_sCmodSQLError, sizeof(g_sCmodSQLError)); PrintToServer("Failed to readClassFromDB query (error: %s)", g_sCmodSQLError); return 0; } if(SQL_GetRowCount(_query)){ g_iCmodLvl[id] = SQL_FetchInt(_query, 0); g_iCmodExp[id] = SQL_FetchInt(_query, 1); g_iCmodPlayerINT[id] = SQL_FetchInt(_query, 2); g_iCmodPlayerCON[id] = SQL_FetchInt(_query, 3); g_iCmodPlayerSTR[id] = SQL_FetchInt(_query, 4); g_iCmodPlayerDEX[id] = SQL_FetchInt(_query, 5); g_iCmodPlayerPoint[id] = (g_iCmodLvl[id]-1)*2-g_iCmodPlayerINT[id]-g_iCmodPlayerCON[id]-g_iCmodPlayerSTR[id]-g_iCmodPlayerDEX[id]; }else{ g_iCmodLvl[id] = 1; g_iCmodExp[id] = 0; g_iCmodPlayerPoint[id] = 0; g_iCmodPlayerINT[id] = 0; g_iCmodPlayerCON[id] = 0; g_iCmodPlayerSTR[id] = 0; g_iCmodPlayerDEX[id] = 0; } CloseHandle(_query); return 1; } public SQLSys_LoadLvl(id, classN) { new String:_tmp[513]; decl String:_authid[64]; if(!GetClientAuthId(id, AuthId_Steam2, _authid, 63)) return -1; Format(_tmp, sizeof(_tmp), "SELECT lvl FROM codmod WHERE steamID = '%s' AND class = '%s';", _authid, g_sCmodClassName[classN]); new Handle:_query = SQL_Query(g_hCmodSQL, _tmp); if(_query == INVALID_HANDLE){ SQL_GetError(g_hCmodSQL, g_sCmodSQLError, sizeof(g_sCmodSQLError)); PrintToServer("Failed to query readLvlClassFromDB (error: %s)", g_sCmodSQLError); return -2; } if(SQL_GetRowCount(_query)){ new _r = SQL_FetchInt(_query, 0); CloseHandle(_query); return _r; }else{ CloseHandle(_query); return 1; } }