mam problem z warunkiem sprawdzającym czy gracz jest steam czy NS, a mianowicie podczas łączenia się gracza powinno sprawdzić czy gracz ma rekord w bazie czy też nie, graczy steam sprawdza dobrze a dla NS raz działa raz nie...
Aktualnie mam tak:
public handle_load(FailState,Handle:Query,Error[],Errcode,Data[],DataSize){
if(FailState){
log_amx("SQL Error: %s (%d)", Error, Errcode)
return PLUGIN_HANDLED
}
new id = Data[0]
new PlayerName[32], args[32]
read_args(args, 31)
remove_quotes(args)
new steam[32]
get_user_authid(id, steam, sizeof steam - 1 )
if(SQL_MoreResults(Query) > 0)
{
PlayerXP[id] = SQL_ReadResult(Query,SQL_FieldNameToNum(Query,"xp"))
PlayerLevel[id] = SQL_ReadResult(Query,SQL_FieldNameToNum(Query,"lvl"))
SkillPoints[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "sptk"))
PtkGraw[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "pgraw"))
PtkSpeed[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "pspeed"))
PtkFuria[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "pfuria"))
PtkFizyk[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "pfizyk"))
PtkCzar[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "pczar"))
PtkNc[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "pnc"))
marzenia[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "fbhy"))
gratz[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "gz"))
lpm[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "lpm"))
sprawdz_przejsca[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "s_prz"))
lpmt_os[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "lpmt_os"))
sprawdz_level[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "s_lvl"))
sprawdz_graw[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "s_graw"))
sprawdz_speed[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "s_speed"))
lpmtOS[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "lpmtos"))
os_scout[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "os_scout"))
os_scout_s[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "os_scout_s"))
new name[32]
get_user_name(id, name, 31)
log_to_file(sql_load, "Dane gracza ^"%s^" zostaly wczytane", name)
return PLUGIN_HANDLED
}
else
{
if(equal(PlayerName, "STEAM_ID_LAN") || strlen(steam) > 18){
get_user_name(id,PlayerName,charsmax(PlayerName));
}
else
{
get_user_authid(id,PlayerName,charsmax(PlayerName));
}
new cache[1024],pos
pos = formatex(cache, 1023, "INSERT INTO `fbh_xp` (sid, xp, lvl, sptk, pgraw, pspeed, pfuria, pfizyk, pczar, pnc, fbhy, gz, lpm, s_prz, lpmt_os, s_lvl, s_graw, s_speed, lpmtos, os_scout, os_scout_s) VALUES (");
pos += formatex(cache[pos], 1023 - pos, "'%s', '0', '0', '0', '0', '0', '0', '0', '0', '0',", PlayerName);
pos += formatex(cache[pos], 1023 - pos, " '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0');");
log_to_file(sql_save, "Tworze Nowego Uzytkownika: %s", cache)
SQL_ThreadQuery(g_SqlTuple, "handle_save", cache)
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
próbowałem też sprawdzać czy gracz steam czy ns przez stock:
stock bool: is_user_steam(id)
{
static pcv_dp_r_id_provider;
pcv_dp_r_id_provider = get_cvar_pointer("dp_r_id_provider");
server_cmd("dp_clientinfo %d", id);
server_exec();
static uClient;
uClient = get_pcvar_num(pcv_dp_r_id_provider);
if ( uClient == 2)
return true;
return false;
}
lecz też nie działa...
Da się to naprawić?
Oraz jeszcze jedno pytanie:
Jak mogę zamienić znaki w nicku gracza tak by nie bugowały bazy (przykład " ' ", " " ", " \ ", itp)
myślałem by to zrobić tak:
replace_all(PlayerName,31,"^"^"","6")
replace_all(PlayerName,31,"*","8")
replace_all(PlayerName,31,":","0")
replace_all(PlayerName,31,"-","4")
replace_all(PlayerName,31,"=","5")
replace_all(PlayerName,31,">","7")
replace_all(PlayerName,31,"<","1")
replace_all(PlayerName,31,"?","3")
replace_all(PlayerName,31,"'","2")
ale albo nie działało, albo robiło podwójne rekordy w bazie...
Myślałem o SQL_QuoteString ale nie za bardzo wiem jak tym to zrobić...
Pozdrawiam!