SQLX problem i Pawn.
Hey alle eksperter, jeg er noget ny til at skrive Pawn.Jeg er ved at lave et script til en cs server der kører med amxmodx og jeg har prøvet at spørge om hjælp på amxmodx's forum, men der var ingen hjælp at hente.
Nå til sagen.
Jeg kan ikke hente/gemme data fra/til min MySQL server via sqlx og da jeg ikke har nogen ide om problemet eller så mange andre ting inden for Pawn/sqlx tænkte jeg at jeg bare smider hele mit mod så i kan tjekke det igennem.
[code]
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <sqlx>
#define MAXLEVEL 5
new Float:emptyFloat = 0.0
//Classes and levelup exp.
new const LEVELNAME[MAXLEVEL][] = {
"None",
"Dog",
"Cat",
"Horse",
"Cow"
}
new const LEVELS[MAXLEVEL+1] = {
100,
200,
400,
800,
1600,
3200
}
new cashKickReasons[3][] =
{
"", // Placeholder
"You are not registed, register at []",
"You ran out of money, go get some more."
}
new sqlHost[32] = "****"
new sqlUser[32] = "****"
new sqlPass[32] = "****"
new sqlDB[32] = "****"
new sqlTable[32] = "user_info"
new sqlAuthid[32] = "SteamID"
new sqlMoney[32] = "XMoney"
new sqlKills[32] = "Kills"
new sqlDeaths[32] = "Death"
new sqlExp[32] = "Exp"
new sqlLevel[32] = "Level"
new sqlPlayerName[32] = "Name"
new PlayerXP[32],PlayerLevel[32],PlayerKills[32],PlayerDeath[32],PlayerName[32]
new Float:PlayerMoney[32],Cash,TurnoverProcent
new XP_Kill,XP_Knife,XP_Hs
new show_cash_msg, show_cash_hud
public plugin_init()
{
register_plugin("7cMoneyMod", "0.2", "srofhest")
register_event("DeathMsg", "eDeath", "a")
register_event("ResetHUD","Event_ResetHUD", "be")
set_task(1.0,"sql_init")
// Value to control showing of messages
show_cash_msg=register_cvar("show_cash_msg", "true")
// Value to control showing of HUD
show_cash_hud=register_cvar("show_cash_msg_in_hud", "true")
// How much a player win/loss per kil
Cash=register_cvar("cashloss_per_death", "1")
// Which fee in % the server takes of the cashloss.
TurnoverProcent=register_cvar("money_percent_turnover", "2")
// XP won per kill
XP_Kill=register_cvar("XP_per_kill", "1")
if (show_cash_hud)
{
set_task(2.0,"HudUpdate",0,"",0,"b") //ACTIVEHUD - SALARY - DOTIME
}
}
public sql_init()
{
new error[128], ErrorCode
new Handle:info = SQL_MakeDbTuple(sqlHost,sqlUser,sqlPass,sqlDB)
new Handle:sql = SQL_Connect(info,ErrorCode,error,127)
new Handle:Query = SQL_PrepareQuery(sql,"SELECT * FROM %s", sqlTable)
if (!SQL_Execute(Query))
{
SQL_QueryError(Query, error, 127)
server_print("[AMXX] Could not connect to SQL database. Error: %s %s", error,Query)
}
else
{
SQL_QueryError(Query, error, 127)
server_print("[AMXX] connected to SQL database. description: %s %s",error,Query)
}
SQL_FreeHandle(Query)
SQL_FreeHandle(sql)
SQL_FreeHandle(info)
return PLUGIN_CONTINUE
}
public eDeath(id)
{
new iKiller = read_data(1)
new iVictim = read_data(2)
new Weapon = read_data(4)
new Float:CashWon = get_pcvar_float(Cash) * (1-(TurnoverProcent/100))
if (get_cvar_num("csdm_active")==0) // CSDM is OFF
{
if(get_user_team(iKiller)==get_user_team(iVictim))
{//Teamkill
if (iKiller == iVictim)
{//You killed yourself
PlayerMoney[iKiller] -= get_pcvar_float(Cash)
PlayerXP[iKiller] -= get_pcvar_num(XP_Kill)
PlayerDeath[iKiller] += 1
if (show_cash_msg)
{
client_print(iKiller,print_chat,"[AMXX] Ouch! You lost $%.2f and %i Exp for killing yourself",get_pcvar_float(Cash),get_pcvar_num(XP_Kill));
}
}
else
{//You killed a mate
if (show_cash_msg)
{
PlayerMoney[iKiller] -= get_pcvar_float(Cash)
PlayerXP[iKiller] -= get_pcvar_num(XP_Kill)
client_print(iKiller,print_chat,"[AMXX] You lost $%.2f and %i Exp for killing your team mate %s",get_pcvar_float(Cash),get_pcvar_num(XP_Kill),iVictim);
client_print(iVictim,print_chat,"[AMXX] You were killed by a teammate and didn't loss any money");
}
}
}
else
{//Opponent kill
PlayerXP[iKiller] += get_pcvar_num(XP_Kill)
PlayerKills[iKiller] += 1
PlayerDeath[iVictim] += 1
PlayerMoney[iKiller] += CashWon
PlayerMoney[iVictim] -= get_pcvar_float(Cash)
if (show_cash_msg)
{
client_print(iKiller,print_chat,"[AMXX] You got $%.2f for killing %s",CashWon,iVictim);
client_print(iVictim,print_chat,"[AMXX] You lost $%.2f for dying",get_pcvar_float(Cash));
}
if(Weapon == CSW_KNIFE)
{
PlayerXP[iKiller] += get_pcvar_num(XP_Kill)
PlayerMoney[iKiller] += CashWon
PlayerMoney[iVictim] -= get_pcvar_float(Cash)
}
while(PlayerXP[iKiller] >= LEVELS[PlayerLevel[iKiller]])
{
client_print(iKiller, print_chat, "[AMXX] Congratulations! You are a level %i !", PlayerLevel[iKiller])
PlayerLevel[iKiller] += 1
}
}
}
else
{//CSDM on
if (iKiller != iVictim)
{
PlayerXP[iKiller] += get_pcvar_num(XP_Kill)
PlayerKills[iKiller] += 1
PlayerDeath[iVictim] += 1
PlayerMoney[iKiller] += CashWon
PlayerMoney[iVictim] -= Cash
if(Weapon == CSW_KNIFE)
{
PlayerXP[iKiller] += get_pcvar_num(XP_Kill)
PlayerMoney[iKiller] += get_pcvar_float(Cash)
PlayerMoney[iVictim] -= Cash
}
if (show_cash_msg)
{
client_print(iKiller,print_chat,"[AMXX] You got $%.2f for killing %s",CashWon,iVictim)
client_print(iVictim,print_chat,"[AMXX] You lost $%.2f for dying",get_pcvar_float(Cash))
}
if (PlayerMoney[iVictim]<=get_pcvar_num(Cash))
{
user_kick(id,2)
}
}
else
{
PlayerMoney[iKiller] -= Cash
PlayerXP[iKiller] -= get_pcvar_num(XP_Kill)
PlayerDeath[iKiller] += 1
if (show_cash_msg)
{
client_print(iKiller,print_chat,"[AMXX] Ouch! You lost $%.2f and %i Exp for killing yourself",get_pcvar_float(Cash),get_pcvar_num(XP_Kill));
}
}
SaveData(iKiller)
SaveData(iVictim)
}
}
public HudUpdate()
{
for(new id=0;id < 33;id++) {
if (is_user_connected(id))
{
set_hudmessage(255,255,255,-1.9,0.55,0,0.0,99.9,0.0,0.0,1)
show_hudmessage(id, "Balance: $%.2f^nKills: %i^nDeaths: %i^n^nExp: %i",PlayerMoney[id],PlayerKills[id],PlayerDeath[id],PlayerXP[id])
new name[32]
name[id] = get_user_name(id,name,31)
if (name[id] != ("%s [Level #%s]", PlayerName[id], PlayerLevel[id]))
{
client_cmd(id,"name ^"%s [Level %s(%s)]^"", PlayerName[id],LEVELNAME[PlayerLevel[id]],PlayerLevel[id])
}
}
}
}
public Event_ResetHUD(id) {
//user_money(id,"x",emptyFloat)
client_print(id,print_chat,"[AMXX] You have $%.2f",PlayerMoney[id])
return PLUGIN_HANDLED
}
public client_authorized(id)
{
LoadData(id)
}
public client_disconnect(id)
{
SaveData(id)
PlayerXP[id] = 0
PlayerLevel[id] = 0
PlayerMoney[id] = 0
PlayerKills[id] = 0
PlayerDeath[id] = 0
}
public SaveData(id)
{
new AuthID[35]
get_user_authid(id,AuthID,34)
new error[128], ErrorCode
new Handle:info = SQL_MakeDbTuple(sqlHost,sqlUser,sqlPass,sqlDB)
new Handle:sql = SQL_Connect(info,ErrorCode,error,127)
new Handle:Query = SQL_PrepareQuery(sql,"UPDATE %s SET %s='%.2f', %s='%i', %s='%i', %s='%i', %s='%i' WHERE %s='%s'",sqlTable,sqlMoney,PlayerMoney[id],sqlKills, PlayerKills[id],sqlDeaths,PlayerDeath[id],sqlExp, PlayerXP[id], sqlLevel,PlayerLevel[id],sqlAuthid,AuthID)
if (!SQL_Execute(Query))
{
SQL_QueryError(Query, error, 127)
server_print("[AMXX] Could not connect to SQL database. Error: %s", error)
}
else
{
SQL_QueryError(Query, error, 127)
server_print("[AMXX] connected to SQL database. description: %s", error)
}
SQL_FreeHandle(Query)
SQL_FreeHandle(sql)
SQL_FreeHandle(info)
return PLUGIN_CONTINUE
}
public LoadData(id)
{
new AuthID[32]
//new PlayerXP[32], PlayerLevel[32], PlayerMoney[32], PlayerKills[32], PlayerDeath[32]
get_user_authid(id,AuthID,31)
new error[128], ErrorCode
new Handle:info = SQL_MakeDbTuple(sqlHost,sqlUser,sqlPass,sqlDB)
new Handle:sql = SQL_Connect(info,ErrorCode,error,511)
new Handle:Query = SQL_PrepareQuery(sql,"SELECT %s,%s,%s,%s,%s,%s FROM %s WHERE %s='%s'",sqlMoney,sqlKills,sqlDeaths,sqlExp,sqlLevel,sqlPlayerName,sqlTable,sqlAuthid,AuthID)
if (!SQL_Execute(Query))
{
SQL_QueryError(Query, error, 127)
server_print("[AMXX] Could not connect to SQL database. Error: %s", error)
}
else
{
PlayerMoney[id] = SQL_FieldNameToNum(Query, sqlMoney)
PlayerKills[id] = SQL_FieldNameToNum(Query, sqlKills)
PlayerDeath[id] = SQL_FieldNameToNum(Query, sqlDeaths)
PlayerXP[id] = SQL_FieldNameToNum(Query, sqlExp)
PlayerLevel[id] = SQL_FieldNameToNum(Query, sqlLevel)
PlayerName[id] = SQL_FieldNameToNum(Query, sqlPlayerName)
SQL_QueryError(Query, error, 127)
server_print("[AMXX] connected to SQL database. description: %s", error)
}
SQL_FreeHandle(Query)
SQL_FreeHandle(sql)
SQL_FreeHandle(info)
return PLUGIN_CONTINUE
}
user_kick(id,reasonid) { // Function that kicks a player when he isn`t registered or has too little cash
new userid = get_user_userid(id)
server_cmd("kick #%d ^"%s^"",userid,cashKickReasons[reasonid])
return 1
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1030\\ f0\\ fs16 \n\\ par }
*/
[/code]
DB tables eksisterer og kan fint få kontakt med MySQL og dataen fra min hjemmeside(c#).
