Cześc, mój problem polega na tym, że zapis sql w ogóle nie działa lub jak już zadziała to mieszają się rekordy, że moge dostać zapis szlugow innego gracza... Nie wiem jak to jest możliwe, w 1 bazie mysql mam 5 tabel, a w nich różne zapisy od pluginów. A to od banku, szlugów, gangów itd...
Daję tu kod zapisu szlugów, może jak tu się dowiem o co chodzi to w pozostałych też to poprawie:
tak tworzę, tabele. Task jest ustawiony dlatego, że jak kilka pluginów mam, że tworzą tabele i się łączą z bazą danych to serwer się nie włącza ![]()
public plugin_cfg()
{
set_task(1.0, "Wczytaj", TASK_POBIERZ);
}
public Wczytaj(){
info = SQL_MakeDbTuple("xxx", "xxx", "ccc", "xxx");
new len_full, temp_full[2024];
len_full += formatex(temp_full[len_full], charsmax(temp_full)-len_full, "CREATE TABLE IF NOT EXISTS `szlugid` (`name` VARCHAR(48), `szlugi` FLOAT(10), PRIMARY KEY (`name`));)");
SQL_ThreadQuery(info, "ConnectSql_Handler", temp_full);
remove_task(TASK_POBIERZ)
}
public ConnectSql_Handler(failstate, Handle:query, error[], errnum, data[], size)
{
if(failstate != TQUERY_SUCCESS)
{
connected = false;
return PLUGIN_CONTINUE;
}
connected = true;
return PLUGIN_CONTINUE;
}
public client_putinserver(id)
{
get_user_name(id, nazwa_gracza, 63)
resetData(id);
readData(id);
}
public client_disconnect(id)
{
saveData(id);
resetData(id);
}
public resetData(id)
{
ilosc_jbpack[id] = 0.00
}
public saveData(id)
{
if(!connected || is_user_bot(id) || is_user_hltv(id))
return PLUGIN_CONTINUE;
new len_full, temp_full[2048];
mysql_escape_string(nazwa_gracza, charsmax(nazwa_gracza));
len_full += formatex(temp_full[len_full], charsmax(temp_full)-len_full, "UPDATE `szlugid` SET `szlugi` = '%.2f' WHERE `name` = ^"%s^";", ilosc_jbpack[id], nazwa_gracza);
SQL_ThreadQuery(info, "saveDataHandler", temp_full);
return PLUGIN_CONTINUE;
}
public saveDataHandler(failstate, Handle:query, error[], errnum, data[], size)
{
if(failstate != TQUERY_SUCCESS)
{
return PLUGIN_CONTINUE;
}
return PLUGIN_CONTINUE;
}
public readData(id)
{
if(!connected || is_user_bot(id) || is_user_hltv(id))
return PLUGIN_CONTINUE;
new data[1], temp[2048], name[33];
data[0] = id;
mysql_escape_string(name, charsmax(name));
formatex(temp, charsmax(temp), "SELECT * FROM `szlugid` WHERE `name` = '%s'", nazwa_gracza);
SQL_ThreadQuery(info, "readDataHandler", temp, data, sizeof(data));
return PLUGIN_CONTINUE;
}
public readDataHandler(failstate, Handle:query, error[], errnum, data[], size)
{
new id = data[0];
if(failstate != TQUERY_SUCCESS)
{
log_amx("Error %s", error)
return PLUGIN_CONTINUE;
}
new Float:ilosc_pre;
if(SQL_MoreResults(query))
{
SQL_ReadResult(query, 1, ilosc_pre)
ilosc_jbpack[id] = ilosc_pre
}
else
{
new data[1];
data[0] = id;
if(!connected || !is_user_connected(id) || is_user_bot(id) || is_user_hltv(id))
return PLUGIN_CONTINUE;
new temp[2048];
mysql_escape_string(nazwa_gracza, charsmax(nazwa_gracza));
format(temp, charsmax(temp), "INSERT INTO `szlugid` (`name`, `szlugi`) VALUES ('%s', '0')", nazwa_gracza);
SQL_ThreadQuery(info, "readDataHandler2", temp, data, sizeof(data));
return PLUGIN_CONTINUE;
}
return PLUGIN_CONTINUE;
}
public readDataHandler2(failstate, Handle:query, error[], errnum, data[], size)
{
if(failstate != TQUERY_SUCCESS)
{
log_amx("Wczytywanie dla %s blad %s", nazwa_gracza, error);
return PLUGIN_CONTINUE;
}
return PLUGIN_CONTINUE;
}
stock mysql_escape_string(output[], len)
{
static const szReplaceIn[][] = { "\\", "\0", "\n", "\r", "\x1a", "'", "^"" };
static const szReplaceOut[][] = { "\\\\", "\\0", "\\n", "\\r", "\Z", "\'", "\^"" };
for(new i; i < sizeof szReplaceIn; i++)
replace_all(output, len, szReplaceIn[i], szReplaceOut[i]);
}
Nie wiem już sam o co chodzi, już trochę z tym się męczę. Z góry dzięki za pomoc
Użytkownik Black004 edytował ten post 03.08.2019 17:19


Dodatki SourceMod












