Avatar billede srofhest Nybegynder
31. marts 2009 - 15:42 Der er 3 kommentarer og
1 løsning

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#).
Avatar billede arne_v Ekspert
01. april 2009 - 01:32 #1
Får du en fejl meddelelse ?
Avatar billede srofhest Nybegynder
02. april 2009 - 00:10 #2
nå ja glemte at den kommer med fejlen: "[AMXX] Could not connect to SQL database. Error: no such table: user_info " på alle handles.

men allerede under.

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
}

hmm, ved sku ikke hvad jeg gør galt og jeg ved at table user_info eksisterer da det hele virker som det skal i c#...
Avatar billede srofhest Nybegynder
16. april 2009 - 12:46 #3
Hov, glemte at den også kommer med det her.
L 04/16/2009 - 12:45:15: [SQLITE] Invalid database handle: 1
L 04/16/2009 - 12:45:15: [AMXX] Displaying debug trace (plugin "New_PPK.amxx")
L 04/16/2009 - 12:45:15: [AMXX] Run time error 10: native error (native "SQL_PrepareQuery")
L 04/16/2009 - 12:45:15: [AMXX]    [0] phpObkchx.sma::sql_init (line 81)
Avatar billede srofhest Nybegynder
17. april 2009 - 15:04 #4
Har fundet problemet og fået det til at virke.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester