Po dodaniu nowej statystyki, usunięciu starej tabeli z bazy i restarcie serwera klasy działają normalnie aż do utworzenia się nowej tabeli, w której brakuje owej statystyki.
L 08/04/2014 - 22:17:19: [MySQL] Invalid column: -1 L 08/04/2014 - 22:17:19: [AMXX] Displaying debug trace (plugin "QTM_CodMod.amxx") L 08/04/2014 - 22:17:19: [AMXX] Run time error 10: native error (native "SQL_ReadResult") L 08/04/2014 - 22:17:19: [AMXX] [0] QTM_CodMod.sma::handleCacheDane (line 729)
public client_putinserver(id)
{
for(new i=0; i<MAX_ILOSC_KLAS; i++)
{
lvl_klasy_gracza[id][i] = 1;
xp_klasy_gracza[id][i] = 0;
int_klasy_gracza[id][i] = 0;
zdr_klasy_gracza[id][i] = 0;
wyt_klasy_gracza[id][i] = 0;
kon_klasy_gracza[id][i] = 0;
obr_klasy_gracza[id][i] = 0;
}
gracz_zdobyl_expa[id] = 0;
wczytane_dane[id] = false;
UsunUmiejetnosci(id);
get_user_name(id, nazwa_gracza[id], 63);
replace_all(nazwa_gracza[id], 63, "'", "\'");
replace_all(nazwa_gracza[id], 63, "`", "\`");
new data[1], szTemp[256];
data[0] = id;
formatex(szTemp, 255, "SELECT * FROM `%s` WHERE name = '%s'", Tabela, nazwa_gracza[id]);
SQL_ThreadQuery(hookSql, "handleCacheDane", szTemp, data, 1);
UsunZadania(id);
set_task(10.0, "PokazReklame", id+ZADANIE_POKAZ_REKLAME);
}
public handleCacheDane(failstate, Handle:query, error[], errnum, data[], size)
{
if(failstate != TQUERY_SUCCESS)
{
log_amx("<Query> Error: %s", error);
return;
}
new id = data[0];
if(!is_user_connected(id) && !is_user_connecting(id))
return;
new szClass[32], int;
while(SQL_MoreResults(query))
{
SQL_ReadResult(query, SQL_FieldNameToNum(query, "klasa"), szClass, 31);
TrieGetCell(ClassName, szClass, int);
lvl_klasy_gracza[id][int] = SQL_ReadResult(query, SQL_FieldNameToNum(query, "level"));
xp_klasy_gracza[id][int] = SQL_ReadResult(query, SQL_FieldNameToNum(query, "xp"));
int_klasy_gracza[id][int] = SQL_ReadResult(query, SQL_FieldNameToNum(query, "intelligence"));
zdr_klasy_gracza[id][int] = SQL_ReadResult(query, SQL_FieldNameToNum(query, "health"));
wyt_klasy_gracza[id][int] = SQL_ReadResult(query, SQL_FieldNameToNum(query, "strength"));
kon_klasy_gracza[id][int] = SQL_ReadResult(query, SQL_FieldNameToNum(query, "stamina"));
obr_klasy_gracza[id][int] = SQL_ReadResult(query, SQL_FieldNameToNum(query, "damage"));
SQL_NextRow(query);
}
wczytane_dane[id] = true;
if(is_user_alive(id) && !g_rozgrzewka)
WybierzKlase(id);
}
public ZapiszDane(id, level)
{
if(!klasa_gracza[id] || !wczytane_dane[id])
return;
new szTemp[1024];
formatex(szTemp, 1023, "UPDATE `%s` SET xp=(`xp` + %d), level=(`level` + %d), intelligence='%d', health='%d', strength='%d', stamina='%d', damage='%d WHERE name='%s' AND klasa='%s'", Tabela,
gracz_zdobyl_expa[id], level, inteligencja_gracza[id],
zdrowie_gracza[id], wytrzymalosc_gracza[id], kondycja_gracza[id], obrazenia_gracza[id],
nazwa_gracza[id], nazwy_klas[klasa_gracza[id]]);
doswiadczenie_gracza[id] += gracz_zdobyl_expa[id];
gracz_zdobyl_expa[id] = 0;//wyzeruj expa po dodaniu do bazy zeby nie dawalo 2x tyle expa typowi
lvl_klasy_gracza[id][klasa_gracza[id]] = poziom_gracza[id];
xp_klasy_gracza[id][klasa_gracza[id]] = doswiadczenie_gracza[id];
int_klasy_gracza[id][klasa_gracza[id]] = inteligencja_gracza[id];
zdr_klasy_gracza[id][klasa_gracza[id]] = zdrowie_gracza[id];
wyt_klasy_gracza[id][klasa_gracza[id]] = wytrzymalosc_gracza[id];
kon_klasy_gracza[id][klasa_gracza[id]] = kondycja_gracza[id];
obr_klasy_gracza[id][klasa_gracza[id]] = obrazenia_gracza[id];
SQL_ThreadQuery(hookSql, "handleIgnore", szTemp);
}
public WczytajDane(id, klasa)
{
if(!klasa || !wczytane_dane[id])
return;
gracz_zdobyl_expa[id] = 0;
poziom_gracza[id] = max(1, lvl_klasy_gracza[id][klasa]);
doswiadczenie_gracza[id] = xp_klasy_gracza[id][klasa];
inteligencja_gracza[id] = int_klasy_gracza[id][klasa];
zdrowie_gracza[id] = zdr_klasy_gracza[id][klasa];
wytrzymalosc_gracza[id] = wyt_klasy_gracza[id][klasa];
kondycja_gracza[id] = kon_klasy_gracza[id][klasa];
obrazenia_gracza[id] = obr_klasy_gracza[id][klasa];
punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id]-obrazenia_gracza[id];
if(poziom_gracza[id] && !doswiadczenie_gracza[id])
{
doswiadczenie_gracza[id] = 1;
xp_klasy_gracza[id][klasa] = 1;
new szTemp[512];
formatex(szTemp, 511, "INSERT INTO `%s` (`name`, `klasa`) VALUES ('%s', '%s')", Tabela, nazwa_gracza[id], nazwy_klas[klasa]);
SQL_ThreadQuery(hookSql, "handleIgnore", szTemp);
}
}


Dodatki SourceMod












