AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   MySql Help (https://forums.alliedmods.net/showthread.php?t=245202)

demon81 07-29-2014 14:36

MySql Help
 
Code:

#include <amxmodx>
#include <sqlx>

#define PLUGIN "Tutorial"
#define VERSION "1.0"
#define AUTHOR "Grim"

// Ur Mysql Information
new Host[]    = "hostname"
new User[]    = "username"
new Pass[]    = "password"
new Db[]    = "database"


new Handle:g_SqlTuple
new g_Error[512]


new
iExp[33]

// Pcvar's
new cKill
new cHeadshot
new cDeath

public plugin_init() {
   
register_plugin(PLUGIN, VERSION, AUTHOR)
   
   
register_event("DeathMsg", "Event_DeathMsg", "a") // Register death event
   
    // register the Pcvar's
   
cKill = register_cvar("exp_kill", "2")
   
cHeadshot = register_cvar("exp_headshot", "4")
   
cDeath = register_cvar("exp_death", "1")
   
   
set_task(1.0, "MySql_Init") // set a task to activate the mysql_init
}

public
MySql_Init()
{
   
// we tell the API that this is the information we want to connect to,
    // just not yet. basically it's like storing it in global variables
   
g_SqlTuple = SQL_MakeDbTuple(Host,User,Pass,Db)
 
   
// ok, we're ready to connect
   
new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error))
    if(
SqlConnection == Empty_Handle)
       
// stop the plugin with an error message
       
set_fail_state(g_Error)
     
    new
Handle:Queries
   
// we must now prepare some random queries
   
Queries = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS tutorial (steamid varchar(32),exp INT(11))")

    if(!
SQL_Execute(Queries))
    {
       
// if there were any problems
       
SQL_QueryError(Queries,g_Error,charsmax(g_Error))
       
set_fail_state(g_Error)
     
    }
   
   
// close the handle
   
SQL_FreeHandle(Queries)
 
   
// you free everything with SQL_FreeHandle
   
SQL_FreeHandle(SqlConnection
}

public
plugin_end()
{
   
// free the tuple - note that this does not close the connection,
    // since it wasn't connected in the first place
   
SQL_FreeHandle(g_SqlTuple)
}

public
Load_MySql(id)
{
    new
szSteamId[32], szTemp[512]
   
get_user_authid(id, szSteamId, charsmax(szSteamId))
   
    new
Data[1]
   
Data[0] = id
   
   
//we will now select from the table `tutorial` where the steamid match
   
format(szTemp,charsmax(szTemp),"SELECT * FROM `tutorial` WHERE (`tutorial`.`steamid` = '%s')", szSteamId)
   
SQL_ThreadQuery(g_SqlTuple,"register_client",szTemp,Data,1)
}

public
register_client(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    if(
FailState == TQUERY_CONNECT_FAILED)
    {
       
log_amx("Load - Could not connect to SQL database.  [%d] %s", Errcode, Error)
    }
    else if(
FailState == TQUERY_QUERY_FAILED)
    {
       
log_amx("Load Query failed. [%d] %s", Errcode, Error)
    }

    new
id
    id
= Data[0]
   
    if(
SQL_NumResults(Query) < 1)
    {
       
//.if there are no results found
       
       
new szSteamId[32]
       
get_user_authid(id, szSteamId, charsmax(szSteamId)) // get user's steamid
       
        //  if its still pending we can't do anything with it
       
if (equal(szSteamId,"ID_PENDING"))
            return
PLUGIN_HANDLED
           
       
new szTemp[512]
       
       
// now we will insturt the values into our table.
       
format(szTemp,charsmax(szTemp),"INSERT INTO `tutorial` ( `steamid` , `exp`)VALUES ('%s','0');",szSteamId)
       
SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
    }
    else
    {
       
// if there are results found
       
iExp[id]        = SQL_ReadResult(Query, 1)
    }
   
    return
PLUGIN_HANDLED
}

public
Save_MySql(id)
{
    new
szSteamId[32], szName[32], szTemp[512]
   
get_user_authid(id, szSteamId, charsmax(szSteamId))
   
   
// Here we will update the user hes information in the database where the steamid matches.
   
format(szTemp,charsmax(szTemp),"UPDATE `tutorial` SET `exp` = '%i' WHERE `tutorial`.`steamid` = '%s';",iExp[id], szSteamId)
   
SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
}

public
IgnoreHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
   
SQL_FreeHandle(Query)
   
    return
PLUGIN_HANDLED
}

public
client_putinserver(id)
{
   
Load_MySql(id)
}

public
client_disconnect(id)
{
   
Save_MySql(id)
}

public
Event_DeathMsg()
{
    new
iKiller = read_data(1) // read the data to get the killer and victim
   
new iVictim = read_data(2)
   
    if(
is_user_alive(iKiller)) // Check if the killer is alive in case he killed himself
   
{
        if(
read_data(3))
        {
           
iExp[iKiller] += get_pcvar_num(cHeadshot) // Add the amount of the Pcvar to iExp
       
}
        else
        {
           
iExp[iKiller] += get_pcvar_num(cKill)
        }
    }
   
iExp[iVictim] -= get_pcvar_num(cDeath) // Decrease the amount of the Pcvar from iExp

how do i save with the name too? i want to make a rank and a top, and appearing the steam id is kinda ugly

MrKiller2010 07-29-2014 15:18

Re: MySql Help
 
Try this:

Note: for getting player name:

PHP Code:

new szName32 ];  
get_user_nameid szName charsmax(szName) ); 


PHP Code:

//new szName[ 32 ];  
  //      get_user_name( id , szName , charsmax(szName) ); 
    
    
#include <amxmodx>
#include <sqlx>

#define PLUGIN "Tutorial"
#define VERSION "1.0"
#define AUTHOR "Grim"

// Ur Mysql Information
new Host[]     = "hostname"
new User[]    = "username"
new Pass[]     = "password"
new Db[]     = "database"


new Handle:g_SqlTuple
new g_Error[512]


new 
iExp[33]

// Pcvar's
new cKill
new cHeadshot
new cDeath

public plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
register_event("DeathMsg""Event_DeathMsg""a"// Register death event
    
    // register the Pcvar's
    
cKill register_cvar("exp_kill""2")
    
cHeadshot register_cvar("exp_headshot""4")
    
cDeath register_cvar("exp_death""1")
    
    
set_task(1.0"MySql_Init"// set a task to activate the mysql_init
}

public 
MySql_Init()
{
    
// we tell the API that this is the information we want to connect to,
    // just not yet. basically it's like storing it in global variables
    
g_SqlTuple SQL_MakeDbTuple(Host,User,Pass,Db)
   
    
// ok, we're ready to connect
    
new ErrorCode,Handle:SqlConnection SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error))
    if(
SqlConnection == Empty_Handle)
        
// stop the plugin with an error message
        
set_fail_state(g_Error)
       
    new 
Handle:Queries
    
// we must now prepare some random queries
    
Queries SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS tutorial (steamid varchar(32), playername varchar(32), exp INT(11))")

    if(!
SQL_Execute(Queries))
    {
        
// if there were any problems
        
SQL_QueryError(Queries,g_Error,charsmax(g_Error))
        
set_fail_state(g_Error)
       
    }
    
    
// close the handle
    
SQL_FreeHandle(Queries)
   
    
// you free everything with SQL_FreeHandle
    
SQL_FreeHandle(SqlConnection)   
}

public 
plugin_end()
{
    
// free the tuple - note that this does not close the connection,
    // since it wasn't connected in the first place
    
SQL_FreeHandle(g_SqlTuple)
}

public 
Load_MySql(id)
{
    new 
szSteamId[32], szName[32], szTemp[512]
    
get_user_authid(idszSteamIdcharsmax(szSteamId))
    
get_user_nameid szName charsmax(szName) );
    
    new 
Data[1]
    
Data[0] = id
    
    
//we will now select from the table `tutorial` where the steamid match
    
format(szTemp,charsmax(szTemp),"SELECT * FROM `tutorial` WHERE (`tutorial`.`steamid` = '%s' `tutorial`.`playername` = '%s')"szSteamIdszName)
    
SQL_ThreadQuery(g_SqlTuple,"register_client",szTemp,Data,1)
}

public 
register_client(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    if(
FailState == TQUERY_CONNECT_FAILED)
    {
        
log_amx("Load - Could not connect to SQL database.  [%d] %s"ErrcodeError)
    }
    else if(
FailState == TQUERY_QUERY_FAILED)
    {
        
log_amx("Load Query failed. [%d] %s"ErrcodeError)
    }

    new 
id
    id 
Data[0]
    
    if(
SQL_NumResults(Query) < 1
    {
        
//.if there are no results found
        
        
new szSteamId[32]
        
get_user_authid(idszSteamIdcharsmax(szSteamId)) // get user's steamid
        
        //  if its still pending we can't do anything with it
        
if (equal(szSteamId,"ID_PENDING"))
            return 
PLUGIN_HANDLED
            
        
new szTemp[512]
        
        
// now we will insturt the values into our table.
        
format(szTemp,charsmax(szTemp),"INSERT INTO `tutorial` ( `steamid` , `exp`)VALUES ('%s','0');",szSteamId)
        
SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
    } 
    else 
    {
        
// if there are results found
        
iExp[id]         = SQL_ReadResult(Query1)
    }
    
    return 
PLUGIN_HANDLED
}

public 
Save_MySql(id)
{
    new 
szSteamId[32], szName[32], szTemp[512]
    
get_user_authid(idszSteamIdcharsmax(szSteamId))
    
get_user_nameid szName charsmax(szName) ); 
    
    
// Here we will update the user hes information in the database where the steamid matches.
    
format(szTemp,charsmax(szTemp),"UPDATE `tutorial` SET `exp` = '%i' WHERE `tutorial`.`steamid` = '%s `tutorial`.`playername` = '%s';",iExp[id], szSteamIdszName)
    
SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
}

public 
IgnoreHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    
SQL_FreeHandle(Query)
    
    return 
PLUGIN_HANDLED
}

public 
client_putinserver(id)
{
    
Load_MySql(id)
}

public 
client_disconnect(id)
{
    
Save_MySql(id)
}

public 
Event_DeathMsg()
{
    new 
iKiller read_data(1// read the data to get the killer and victim
    
new iVictim read_data(2)
    
    if(
is_user_alive(iKiller)) // Check if the killer is alive in case he killed himself
    
{
        if(
read_data(3))
        {
            
iExp[iKiller] += get_pcvar_num(cHeadshot// Add the amount of the Pcvar to iExp
        
}
        else
        {
            
iExp[iKiller] += get_pcvar_num(cKill)
        }
    }
    
iExp[iVictim] -= get_pcvar_num(cDeath// Decrease the amount of the Pcvar from iExp



demon81 07-30-2014 06:15

Re: MySql Help
 
@edit:

how do i make a top15 with a motd using the players name?

mottzi 07-31-2014 00:13

Re: MySql Help
 
By learning basics and not posting requests into the scripting help section.

demon81 07-31-2014 04:46

Re: MySql Help
 
Sorry then, if someone could move this thread to the Requests section i would be thanked


All times are GMT -4. The time now is 13:13.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.