Sziasztok!
Segítségeteket szeretném kérni a következő plugin javításában, mert a következő hiba üzenetet írja nekem debugolás után is:
Invalid player id 0
[AMXX] Displaying debug trace (plugin "achievement.amxx")
[AMXX] Run time error 10: native error (native "get_user_weapon")
[AMXX] [0] achievement.sma::Oles (line 419)
Kód:
#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
#include <csx>
#include <engine>
#include <fun>
#include <cstrike>
#define PLUGIN "Achievement System"
#define VERSION "1.1"
#define AUTHOR "IrOn"
new g_host, g_user, g_pass, g_db
new Handle:g_SqlTuple
new g_error[512]
new logfelhasznalo[32], logjelszo[32], regfelhasznalo[32], regjelszo[32];
new bool:bejelentkezve[33];
new belepescheck[512], felhasznalocheck[512], sqlmentes[512], sqloles[1024], sqltalalat[1024], sqldisconnect[1024];
new mentett_user[33][33], mentett_pw[33][33], mentett_userid[33], check_pass[33], check_user[33];
new megtett_tavolsag[33], second[33];
new hatastalanitott_bomba[33], lerakott_bomba[33], felrobbant_bomba[33], jatekido[33];
new talalat[33], oles[33], halal[33], ongyilkos[33];
//VIP
new is_user_vip[33];
new vip_ammo, vip_money;
new const MAXBPAMMO[] = {-1, 52, -1, 90, 1, 32, 1, 100, 90, 1, 120, 100, 100, 90, 90, 90, 100, 120,
30, 120, 200, 32, 90, 120, 90, 2, 35, 90, 90, -1, 100};
new const AMMOTYPE[][] = {"", "357sig", "", "762nato", "", "buckshot", "", "45acp", "556nato", "", "9mm",
"57mm", "45acp", "556nato", "556nato", "556nato", "45acp", "9mm", "338magnum", "9mm", "556natobox",
"buckshot", "556nato", "9mm", "762nato", "", "50ae", "556nato", "762nato", "", "57mm"};
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /reg", "AchievementsMenu")
g_host = register_cvar("achi_host", "")
g_user = register_cvar("achi_user", "")
g_pass = register_cvar("achi_pass", "")
g_db = register_cvar("achi_db", "")
register_clcmd("BEJELENTKEZESI_FELHASZNALO", "belepes_felhasznalo")
register_clcmd("BEJELENTKEZESI_JELSZO", "belepes_jelszo")
register_clcmd("FELHASZNALO", "reg_felhasznalo")
register_clcmd("JELSZO", "reg_jelszo")
register_event( "DeathMsg", "Oles", "a" );
register_forward( FM_ClientKill, "Ongyilkossag" );
RegisterHam(Ham_TraceAttack, "player", "Sebzes");
//VIP
RegisterHam(Ham_Spawn, "player", "vip_eledes", 1)
register_cvar("vip_weapon1", "weapon_awp")
register_cvar("vip_weapon2", "weapon_m4a1")
register_cvar("vip_weapon3", "weapon_ak47")
vip_ammo = register_cvar("vip_fullammo", "1")
vip_money = register_cvar("vip_money", "16000")
//VIP Vége
set_task(60.0, "mentes")
}
public vip_eledes(id)
{
if(is_user_vip[id])
{
//FEGYVER
new weapon1[51], weapon2[51], weapon3[51];
get_cvar_string("vip_weapon1", weapon1, 50)
get_cvar_string("vip_weapon2", weapon2, 50)
get_cvar_string("vip_weapon3", weapon3, 50)
if(!(equal(weapon1, "")))
give_item(id, weapon1);
if(!(equal(weapon2, "")))
give_item(id, weapon2);
if(!(equal(weapon3, "")))
give_item(id, weapon3);
//TÖLTÉNY
switch(get_pcvar_num(vip_ammo))
{
case 1:
{
new weapons[32], num;
get_user_weapons(id, weapons, num);
for (new i = 0; i < num; i++)
{
ExecuteHam(Ham_GiveAmmo, id, MAXBPAMMO[weapons[i]], AMMOTYPE[weapons[i]], MAXBPAMMO[weapons[i]]);
}
}
case 0:
return PLUGIN_CONTINUE;
}
//PÉNZ
new penz = cs_get_user_money(id)+get_pcvar_num(vip_money)
cs_set_user_money(id, penz)
}
return PLUGIN_CONTINUE;
}
public client_disconnect(id)
{
if(bejelentkezve[id])
{
jatekido[id] = jatekido[id]+get_user_time(id)
formatex(sqldisconnect, charsmax(sqldisconnect), "UPDATE `achi_felhasznalok` SET `megtett_tavolsag`=^"%d^", `jatekido`=^"%d^", `bomba_hatastalanitas`=^"%d^", `bomba_lerakas`=^"%d^", `bomba_robbanas`=^"%d^", `talalat`=^"%d^", `oles`=^"%d^", `halal`=^"%d^" , `ongyilkos`=^"%d^" WHERE id=^"%d^";", megtett_tavolsag[id], jatekido[id], hatastalanitott_bomba[id], lerakott_bomba[id], felrobbant_bomba[id], talalat[id], oles[id], halal[id], ongyilkos[id], mentett_userid[id])
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", sqldisconnect)
mentett_user[id] = ""
bejelentkezve[id] = false
second[id] = 0;
is_user_vip[id] = false;
}
}
public client_connect(id)
{
mentett_user[id] = ""
bejelentkezve[id] = false
second[id] = 0;
is_user_vip[id] = false;
}
public mentes()
{
new Players[32], pnum;
get_players(Players, pnum, "ch")
for(new i = 0; i < pnum; i++)
{
new id = Players[i];
if(bejelentkezve[id])
{
formatex(sqldisconnect, charsmax(sqldisconnect), "UPDATE `achi_felhasznalok` SET `megtett_tavolsag`=^"%d^", `bomba_hatastalanitas`=^"%d^", `bomba_lerakas`=^"%d^", `bomba_robbanas`=^"%d^", `talalat`=^"%d^", `oles`=^"%d^", `halal`=^"%d^" , `ongyilkos`=^"%d^" WHERE id=^"%d^";", megtett_tavolsag[id], hatastalanitott_bomba[id], lerakott_bomba[id], felrobbant_bomba[id], talalat[id], oles[id], halal[id], ongyilkos[id], mentett_userid[id])
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", sqldisconnect)
}
}
set_task(60.0, "mentes")
}
public client_PreThink(id)
{
if(get_user_button(id) & IN_FORWARD && bejelentkezve[id])
{
new Float: speed[33];
speed[id] = get_user_maxspeed(id);
new speedr[33];
speedr[id] = floatround(speed[id], floatround_round);
second[id]++;
megtett_tavolsag[id] = (speedr[id] * second[id])/1000;
}
}
public plugin_cfg()
{
new Host[64], User[32], Pass[32], DB[128];
get_pcvar_string(g_host, Host, charsmax(Host))
get_pcvar_string(g_user, User, charsmax(User))
get_pcvar_string(g_pass, Pass, charsmax(Pass))
get_pcvar_string(g_db, DB, charsmax(DB))
g_SqlTuple = SQL_MakeDbTuple(Host, User, Pass, DB)
new errorcode, Handle:SqlConnection = SQL_Connect(g_SqlTuple, errorcode, g_error, charsmax(g_error))
new Handle:Query
Query = SQL_PrepareQuery(SqlConnection, "CREATE TABLE IF NOT EXISTS `achi_felhasznalok` (`id` INT(255) NOT NULL AUTO_INCREMENT ,`user` VARCHAR(255) NOT NULL ,`pw` VARCHAR(255) NOT NULL ,PRIMARY KEY (`id`) ,INDEX (`id`));")
SQL_FreeHandle(Query)
SQL_FreeHandle(SqlConnection)
}
public QuerySetData(FailState, Handle:Query, error[],errcode, data[], datasize)
{
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
{
return
}
}
public AchievementsMenu(id)
{
new menu = menu_create("\rAchievements Rendszer:", "AchievementsMenu_handler");
if(bejelentkezve[id])
menu_additem(menu, "\wKijelentkezes", "1", 0);
else
{
menu_additem(menu, "\wRegisztracio", "1", 0);
menu_additem(menu, "\wBelepes", "2", 0);
}
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, menu, 0);
}
public AchievementsMenu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], szName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
new key = str_to_num(data);
switch(key)
{
case 1:
{
if(bejelentkezve[id])
{
bejelentkezve[id] = false;
client_print(id, print_chat, "Kijelentkeztel!")
AchievementsMenu(id)
}
else
client_cmd(id, "messagemode FELHASZNALO")
}
case 2:
{
if(bejelentkezve[id])
client_print(id, print_chat, "Mar be vagy jelentkezve!")
else
client_cmd(id, "messagemode BEJELENTKEZESI_FELHASZNALO")
}
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public belepes_felhasznalo(id)
{
read_args(logfelhasznalo, charsmax(logfelhasznalo))
remove_quotes(logfelhasznalo)
if(equal(logfelhasznalo, ""))
return PLUGIN_HANDLED
mentett_user[id] = logfelhasznalo
client_cmd(id, "messagemode BEJELENTKEZESI_JELSZO")
return PLUGIN_CONTINUE
}
public belepes_jelszo(id)
{
read_args(logjelszo, charsmax(logjelszo))
remove_quotes(logjelszo)
if(equal(logfelhasznalo, ""))
return PLUGIN_HANDLED
mentett_pw[id] = logjelszo
Belepesellenorzese(id)
return PLUGIN_CONTINUE
}
public Belepesellenorzese(id)
{
new data[1]
data[0] = id
formatex(belepescheck, charsmax(belepescheck), "SELECT `id`, `user`, `pw`, `megtett_tavolsag`, `jatekido`, `bomba_hatastalanitas`, `bomba_lerakas`, `bomba_robbanas`, `vip`, `talalat`, `oles`, `halal`, `ongyilkos` FROM `achi_felhasznalok` WHERE user = ^"%s^" AND pw = ^"%s^";", mentett_user[id], mentett_pw[id])
SQL_ThreadQuery(g_SqlTuple, "QuerySelectDataBejelentkezes", belepescheck, data, 1)
}
public QuerySelectDataBejelentkezes(FailState, Handle:Query, error[], errorcode, data[], datasize, Float:fQueueTime)
{
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
{
log_amx("%s", error)
return
}
else
{
new id = data[0];
new col_user = SQL_FieldNameToNum(Query, "user")
new col_pw = SQL_FieldNameToNum(Query, "pw")
new col_id = SQL_FieldNameToNum(Query, "id")
new col_tavolsag = SQL_FieldNameToNum(Query, "megtett_tavolsag")
new col_hatastalanitott = SQL_FieldNameToNum(Query, "bomba_hatastalanitas")
new col_lerakott = SQL_FieldNameToNum(Query, "bomba_lerakas")
new col_robbant = SQL_FieldNameToNum(Query, "bomba_robbanas")
new col_jatekido = SQL_FieldNameToNum(Query, "jatekido")
new col_vip = SQL_FieldNameToNum(Query, "vip")
new col_talalat = SQL_FieldNameToNum(Query, "talalat")
new col_oles = SQL_FieldNameToNum(Query, "oles")
new col_halal = SQL_FieldNameToNum(Query, "halal")
new col_ongyilkos = SQL_FieldNameToNum(Query, "ongyilkos")
while(SQL_MoreResults(Query))
{
SQL_ReadResult(Query, col_user, check_user, charsmax(check_user))
SQL_ReadResult(Query, col_pw, check_pass, charsmax(check_pass))
mentett_userid[id] = SQL_ReadResult(Query, col_id)
megtett_tavolsag[id] = SQL_ReadResult(Query, col_tavolsag)
hatastalanitott_bomba[id] = SQL_ReadResult(Query, col_hatastalanitott)
lerakott_bomba[id] = SQL_ReadResult(Query, col_lerakott)
felrobbant_bomba[id] = SQL_ReadResult(Query, col_robbant)
jatekido[id] = SQL_ReadResult(Query, col_jatekido)
talalat[id] = SQL_ReadResult(Query, col_talalat)
oles[id] = SQL_ReadResult(Query, col_oles)
halal[id] = SQL_ReadResult(Query, col_halal)
ongyilkos[id] = SQL_ReadResult(Query, col_ongyilkos)
new vip[33];
vip[id] = SQL_ReadResult(Query, col_vip)
if(vip[id] == 1)
is_user_vip[id] = true
else
is_user_vip[id] = false
new Float: speed[33];
speed[id] = get_user_maxspeed(id);
new speedr[33];
speedr[id] = floatround(speed[id], floatround_round);
second[id] = ((megtett_tavolsag[id]*1000)/speedr[id])
if(equal(mentett_user[id], check_user) && equal(mentett_pw[id], check_pass))
{
bejelentkezve[id] = true;
client_print(id, print_chat, "Sikeres bejelentkezes!")
AchievementsMenu(id)
}
SQL_NextRow(Query)
}
}
}
public reg_felhasznalo(id)
{
read_args(regfelhasznalo, charsmax(regfelhasznalo))
remove_quotes(regfelhasznalo)
if(equal(regfelhasznalo, ""))
return PLUGIN_HANDLED
mentett_user[id] = regfelhasznalo
Felhasznalo_Ellenorzese(id)
client_cmd(id, "messagemode JELSZO")
return PLUGIN_CONTINUE
}
public reg_jelszo(id)
{
read_args(regjelszo, charsmax(regjelszo))
remove_quotes(regjelszo)
if(equal(regjelszo, ""))
return PLUGIN_HANDLED
mentett_pw[id] = regjelszo
formatex(sqlmentes, charsmax(sqlmentes), "INSERT INTO `achi_felhasznalok`(`user`, `pw`) VALUES (^"%s^",^"%s^");", mentett_user[id], mentett_pw[id])
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", sqlmentes)
client_print(id, print_chat, "Sikeresen regisztraltal!")
Belepesellenorzese(id)
return PLUGIN_CONTINUE
}
public Felhasznalo_Ellenorzese(id)
{
new data[1]
data[0] = id
formatex(felhasznalocheck, charsmax(felhasznalocheck), "SELECT `user` FROM `achi_felhasznalok` WHERE user = ^"%s^";", mentett_user[id])
SQL_ThreadQuery(g_SqlTuple, "QuerySelectDataFelhasznalo", felhasznalocheck, data, 1)
}
public QuerySelectDataFelhasznalo(FailState, Handle:Query, error[], errorcode, data[], datasize, Float:fQueueTime)
{
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
{
log_amx("%s", error)
return
}
else
{
new id = data[0];
new col_user = SQL_FieldNameToNum(Query, "user")
while(SQL_MoreResults(Query))
{
SQL_ReadResult(Query, col_user, check_user, charsmax(check_user))
if(equal(mentett_user[id], check_user))
{
client_print(id, print_chat, "Ez a felhasznalo mar letezik!")
client_cmd(id, "messagemode FELHASZNALO")
}
SQL_NextRow(Query)
}
}
}
public Oles()
{
new killer = read_data( 1 );
new victim = read_data( 2 );
if(killer == victim)
{
if(bejelentkezve[killer])
{
ongyilkos[killer]++
formatex(sqloles, charsmax(sqloles), "INSERT INTO `achi_ongyilkossag`(`userid`) VALUES (^"%d^");", mentett_userid[killer])
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", sqloles)
}
return PLUGIN_HANDLED;
}
halal[victim]++
oles[killer]++
new fegyver = get_user_weapon(killer)
new hp = get_user_health(killer)
new armor = get_user_armor(killer)
if(bejelentkezve[killer] && bejelentkezve[victim])
{
formatex(sqloles, charsmax(sqloles), "INSERT INTO `achi_olesek`(`killer_id`, `halott_id`, `fegyverid`, `killer_hp`, `killer_armor`) VALUES (^"%d^",^"%d^",^"%d^",^"%d^",^"%d^");", mentett_userid[killer], mentett_userid[victim], fegyver, hp, armor)
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", sqloles)
}
else if(bejelentkezve[killer])
{
formatex(sqloles, charsmax(sqloles), "INSERT INTO `achi_olesek`(`killer_id`, `halott_id`, `fegyverid`, `killer_hp`, `killer_armor`) VALUES (^"%d^",^"0^",^"%d^",^"%d^",^"%d^");", mentett_userid[killer], fegyver, hp, armor)
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", sqloles)
}
else if(bejelentkezve[victim])
{
formatex(sqloles, charsmax(sqloles), "INSERT INTO `achi_olesek`(`killer_id`, `halott_id`, `fegyverid`, `killer_hp`, `killer_armor`) VALUES (^"0^",^"%d^",^"%d^",^"%d^",^"%d^");", mentett_userid[victim], fegyver, hp, armor)
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", sqloles)
}
return PLUGIN_CONTINUE;
}
public Ongyilkossag(id)
{
if(bejelentkezve[id])
{
ongyilkos[id]++
formatex(sqloles, charsmax(sqloles), "INSERT INTO `achi_ongyilkossag`(`userid`) VALUES (^"%d^");", mentett_userid[id])
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", sqloles)
}
}
public Sebzes(Vic, Att, Float:dmg, Float:dir[3], traceresult, dmgbits)
{
new talalat_helye = get_tr2(traceresult, TR_iHitgroup)
new fegyver = get_user_weapon(Att)
if(bejelentkezve[Vic] && bejelentkezve[Att])
{
formatex(sqltalalat, charsmax(sqltalalat), "INSERT INTO `achi_talalatok`(`attacker_id`, `victim_id`, `fegyverid`, `talalat_helye`, `sebzes_erteke`) VALUES (^"%d^",^"%d^",^"%d^",^"%d^",^"%f^");", mentett_userid[Att], mentett_userid[Vic], fegyver, talalat_helye, dmg )
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", sqltalalat)
}
else if(bejelentkezve[Vic])
{
formatex(sqltalalat, charsmax(sqltalalat), "INSERT INTO `achi_talalatok`(`attacker_id`, `victim_id`, `fegyverid`, `talalat_helye`, `sebzes_erteke`) VALUES (^"0^",^"%d^",^"%d^",^"%d^",^"%f^");", mentett_userid[Vic], fegyver, talalat_helye, dmg )
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", sqltalalat)
}
else if(bejelentkezve[Att])
{
formatex(sqltalalat, charsmax(sqltalalat), "INSERT INTO `achi_talalatok`(`attacker_id`, `victim_id`, `fegyverid`, `talalat_helye`, `sebzes_erteke`) VALUES (^"%d^",^"0^",^"%d^",^"%d^",^"%f^");", mentett_userid[Att], fegyver, talalat_helye, dmg )
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", sqltalalat)
}
talalat[Att]++
return HAM_IGNORED;
}
public bomb_defused(defuser)
hatastalanitott_bomba[defuser]++;
public bomb_explode(planter)
felrobbant_bomba[planter]++;
public bomb_planted(planter)
lerakott_bomba[planter]++;
Ez a rész direkt üres:
g_host = register_cvar("achi_host", "")
g_user = register_cvar("achi_user", "")
g_pass = register_cvar("achi_pass", "")
g_db = register_cvar("achi_db", "")
Segítségeteket előre is köszönöm.