Spoiler 
	
					
					/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <nvault>
#include <sqlx>
#include <ColorChat>
#define VERSION "0.2"
new pCvar_Kill
new pCvar_Survive;
new pCvar_MinPlayers;
new pCvar_SaveType;
new g_iMaxClients;
new bool:g_bEnoughPlayers = false;
new g_sPrefix[] = "ExpMod";
new g_PlayerExp[33];
new bool:g_bWasLoad[33] = false;
#if defined WORKING_ON_IP
new const g_sServerAdress[] = "Write your server IP";
#endif
new g_NvaultFile;
new const g_sNvaultName[] = "ExpMod";
enum _:SQLData
{
    SQLD_Host,
    SQLD_User,
    SQLD_Password,
    SQLD_Database
};
new g_sSQLData[SQLData][32];
new g_pSQLD_Cvars[SQLData];
new g_sTable[32];
new Handle:g_hTuple;
new bool:g_bRemote;
new g_sCreateTableSql[] = "\
CREATE TABLE IF NOT EXISTS `%s`\
(\
`sid` VARCHAR(32),\
`exp` INT(10)\
)";
public plugin_init(){
    register_plugin("Silnik ExpMod", VERSION, "");
    
    #if defined WORKING_ON_IP
    new sServerAdress[24];
    get_user_ip(0, sServerAdress, sizeof sServerAdress - 1);
    
    if(!equali(g_sServerAdress, sServerAdress))
        set_fail_state("Dont try copy this plugin <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/smile.png' class='bbc_emoticon' alt=':)' />");
    #endif
    
    register_event("DeathMsg", "eventDeathMsg", "a");
    
    register_logevent("eventRoundStart", 2, "1=Round_Start");
    register_logevent("eventRoundEnd", 2 , "1=Round_End");
    
    register_cvar("exp_kill", "10");
    register_cvar("exp_survive", "15");
    register_cvar("exp_minplayers", "0");
    register_cvar("exp_savetype", "1");
    /* savetype: 0 - none, 1 - SQL, 2 - nvault */
    
    pCvar_Kill = get_cvar_num("exp_kill");
    pCvar_Survive = get_cvar_num("exp_survive");
    pCvar_MinPlayers = get_cvar_num("exp_minplayers");
    pCvar_SaveType = get_cvar_num("exp_savetype");
    
    register_clcmd("say asd", "asd");
    
    g_NvaultFile = nvault_open(g_sNvaultName);
    
    if(g_NvaultFile == INVALID_HANDLE)
        log_amx("Couldn't open nvault file (%s).", g_sNvaultName);
    
    g_pSQLD_Cvars[SQLD_Host] = register_cvar("exp_sql_host", "127.0.0.1");
    g_pSQLD_Cvars[SQLD_User] = register_cvar("exp_sql_user", "root");
    g_pSQLD_Cvars[SQLD_Password] = register_cvar("exp_sql_password", "");
    g_pSQLD_Cvars[SQLD_Database] = register_cvar("exp_sql_database", "tescik");
    
    register_cvar("exp_sql_table", "tabela");
    
    register_cvar("exp_sql_remote_access", "0"); /* if database with server are on this same server, you would use 1, if aren't, use 0 */
    
    SqlConnect();
    
    g_iMaxClients = get_maxplayers();
}
public asd(id){
    client_print(id, print_chat, "%d", g_PlayerExp[id]);
}
public SqlConnect(){
    get_pcvar_string(g_pSQLD_Cvars[SQLD_Host], g_sSQLData[SQLD_Host], 31);
    get_pcvar_string(g_pSQLD_Cvars[SQLD_User], g_sSQLData[SQLD_User], 31);
    get_pcvar_string(g_pSQLD_Cvars[SQLD_Password], g_sSQLData[SQLD_Password], 31);
    get_pcvar_string(g_pSQLD_Cvars[SQLD_Database], g_sSQLData[SQLD_Database], 31);
    get_cvar_string("exp_sql_table", g_sTable, 31);
    g_bRemote = bool:get_cvar_num("exp_sql_remote_access");
    g_hTuple = SQL_MakeDbTuple(g_sSQLData[SQLD_Host], g_sSQLData[SQLD_User], g_sSQLData[SQLD_Password], g_sSQLData[SQLD_Database]);
    
    new Handle:hConnection, error, sError[256];
    
    if((hConnection = SQL_Connect(g_hTuple, error, sError, 255))){
        if(g_bRemote){
            new Handle:hQuery;
            hQuery = SQL_PrepareQuery(hConnection, g_sCreateTableSql, g_sTable);
            
            if(!SQL_Execute(hQuery)){
                SQL_QueryError(hQuery, sError, 255);
                log_amx("%s", sError);
            }
        }
        else{
            new sCommand[512];
            formatex(sCommand, 511, g_sCreateTableSql, g_sTable);
            
            SQL_ThreadQuery(g_hTuple, "handleSqlCreateTable", sCommand);
        }
    }
    else{
        log_amx("%s", sError);
    }
}
public handleSqlCreateTable(FailState, Handle:Query, Error[], Errcode, Data[], DataSize){
    if(Errcode)
        log_amx("Error on Table query: %s",Error)
    
    if(FailState == TQUERY_CONNECT_FAILED){
        log_amx("Could not connect to SQL database.")
        return 0;
    }
    else if(FailState == TQUERY_QUERY_FAILED){
        log_amx("Table Query failed.")
        return 0;
    }
    
    return 0;
}
public handleSqlSaveData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize){
    if(Errcode)
        log_amx("Error on Table query: %s", Error);
    
    if(FailState == TQUERY_CONNECT_FAILED){
        log_amx("Could not connect to SQL database.");
        return 0;
    }
    else if(FailState == TQUERY_QUERY_FAILED){
        log_amx("Table Query failed");
        return 0;
    }
    
    new id = Data[0];
    if(SQL_MoreResults(Query) > 0){
        new sCommand[512], sAUTHID[32];
        get_user_authid(id, sAUTHID, sizeof sAUTHID - 1);
        
        formatex(sCommand, 511, "UPDATE %s SET `exp` = %i WHERE `sid` = '%s'", g_sTable, g_PlayerExp[id], sAUTHID);
        SQL_ThreadQuery(g_hTuple, "handleSqlSaveDataOther", sCommand);
    }
    else{
        new sCommand[512], sAUTHID[32];
        get_user_authid(id, sAUTHID, sizeof sAUTHID - 1);
        
        formatex(sCommand, 511, "INSERT INTO %s (`sid`, `exp`) VALUES('%s', %i)", g_sTable, sAUTHID, g_PlayerExp[id]);
        SQL_ThreadQuery(g_hTuple, "handleSqlSaveDataOther", sCommand);
    }
    
    return 0;
}
public handleSqlSaveDataOther(FailState, Handle:Query, Error[], Errcode, Data[], DataSize){
    if(Errcode){
        log_amx("Error on Table query: %s", Error);
    }
    if(FailState == TQUERY_CONNECT_FAILED){
        log_amx("Could not connect to SQL database");
        return 0;
    }
    else if(FailState == TQUERY_QUERY_FAILED){
        log_amx("Table Query failed");
        return 0;
    }
    
    return 0;
}
public handleSqlLoadData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize){
    if(Errcode)
        log_amx("Error on Table query: %s",Error);
    
    if(FailState == TQUERY_CONNECT_FAILED){
        log_amx("Could not connect to SQL database");
        return 0;
    }
    else if(FailState == TQUERY_QUERY_FAILED){
        log_amx("Table Query failed");
        return 0;
    }
    
    new id = Data[0];
    
    if(SQL_MoreResults(Query)){
        g_PlayerExp[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "exp"));
    }
    else {
        g_bWasLoad[id] = true; /* change to true for don't double save to SQL */
        SaveData(id);
    }
    
    return 0;
}
SaveData(id){
    if(!is_user_connected(id))
        return PLUGIN_CONTINUE;
    
    else if(!g_bWasLoad[id])
        LoadData(id);
    
        
    if(pCvar_SaveType == 1){
        new Handle:hConnection, error, sError[256];
        
        if((hConnection = SQL_Connect(g_hTuple, error, sError, 255))){
            new sAUTHID[32];
            get_user_authid(id, sAUTHID, sizeof sAUTHID - 1);
            
            if(g_bRemote){
                new Handle:hQuery;
                
                hQuery = SQL_PrepareQuery(hConnection, "SELECT * FROM %s WHERE `sid` = '%s'", g_sTable, sAUTHID);
                
                if(!SQL_Execute(hQuery)){
                    SQL_QueryError(hQuery, sError, 255);
                    log_amx("%s", sError);
                }
                else{
                    if(SQL_MoreResults(hQuery) > 0){
                        hQuery = SQL_PrepareQuery(hConnection, "UPDATE %s SET `exp` = %i WHERE `sid` = '%s'", g_sTable, g_PlayerExp[id], sAUTHID);
                        
                        if(!SQL_Execute(hQuery)){
                            SQL_QueryError(hQuery, sError, 255);
                            log_amx("%s", sError);
                        }
                    }
                    else{
                        hQuery = SQL_PrepareQuery(hConnection, "INSERT INTO %s (`sid`, `exp`) VALUES('%s', %i)", g_sTable, sAUTHID, g_PlayerExp[id]);
                        
                        if(!SQL_Execute(hQuery)){
                            SQL_QueryError(hQuery, sError, 255);
                            log_amx("%s", sError);
                        }
                    }
                }
            }
            else{
                new sCommand[512], iData[1];
                formatex(sCommand, 511, "SELECT * FROM %s WHERE `sid` = '%s'", g_sTable, sAUTHID);
                
                iData[0] = id;
                SQL_ThreadQuery(g_hTuple, "handleSqlSaveData", sCommand, iData, 1);
            }
        }
        else log_amx("%s", sError);
    }
    
    else if(pCvar_SaveType == 2){
        new sAUTHID[32], sCommand[512];
        get_user_authid(id, sAUTHID, sizeof sAUTHID - 1);
        
        formatex(sCommand, sizeof sCommand - 1, "#%d", g_PlayerExp[id]);
        
        nvault_set(g_NvaultFile, sAUTHID, sCommand);
    }
    
    return PLUGIN_CONTINUE;
}
LoadData(id){
    if(is_user_connected(id) && !g_bWasLoad[id])
        g_bWasLoad[id] = true;
    
    if(pCvar_SaveType == 1){
        new Handle:hConnection, error, sError[256];
        
        if((hConnection = SQL_Connect(g_hTuple, error, sError, 255))){
            new sAUTHID[32];
            get_user_authid(id, sAUTHID, sizeof sAUTHID - 1);
            
            if(g_bRemote){
                new Handle:hQuery;
                hQuery = SQL_PrepareQuery(hConnection, "SELECT * FROM %s WHERE `sid` = '%s'", g_sTable, sAUTHID);
                
                if(!SQL_Execute(hQuery)){
                    SQL_QueryError(hQuery, sError, 255);
                    log_amx("%s", sError);
                }
                else{
                    if(SQL_MoreResults(hQuery)){
                        g_PlayerExp[id] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "exp"));
                    }
                    else SaveData(id);
                }
            }
            else{
                new sCommand[512], iData[1];
                formatex(sCommand, 511, "SELECT * FROM %s WHERE `sid` = '%s'", g_sTable, sAUTHID);
                iData[0] = id;
                
                SQL_ThreadQuery(g_hTuple, "handleSqlLoadData", sCommand, iData, 1);
            }
        }
        else{
            log_amx("%s", sError);
        }
    }
    
    else if(pCvar_SaveType == 2){
        new sAUTHID[32], sCommand[512], sPlayerExp[16];
        get_user_authid(id, sAUTHID, sizeof sAUTHID - 1);
        
        nvault_get(g_NvaultFile, sAUTHID, sCommand, sizeof sCommand - 1);
        
        replace_all(sCommand, charsmax(sCommand), " ", "_");
        replace_all(sCommand, charsmax(sCommand), "#", " ");
    
        parse(sCommand, sPlayerExp, sizeof sPlayerExp - 1);
        
        g_PlayerExp[id] = str_to_num(sPlayerExp);
    }
}
public client_authorized(id){
    g_bWasLoad[id] = false;
    g_PlayerExp[id] = 0;
    
    LoadData(id);
}
public client_disconnect(id){
    SaveData(id);
    
    g_bWasLoad[id] = false;
}
    
public eventRoundStart(){
    if(get_playersnum() >= pCvar_MinPlayers)
        g_bEnoughPlayers = true;
    else
        g_bEnoughPlayers = false;
    
    if(pCvar_SaveType == 2){
        nvault_close(g_NvaultFile);
        
        g_NvaultFile = nvault_open(g_sNvaultName);
        
        if(g_NvaultFile == INVALID_HANDLE)
            log_amx("Couldn't open nvault file (%s).", g_sNvaultName);
    }
    
    return PLUGIN_CONTINUE;
}
public eventRoundEnd(){
    if(!g_bEnoughPlayers)
        return PLUGIN_CONTINUE;
    
    new iPlayers[32], iNum;
    get_players(iPlayers, iNum);
        
    for(new g = 0; g < iNum; g++){        
        new id = iPlayers[g];
        
        if(!is_user_connected(id) || !is_user_alive(id))
            continue;
        
        if(get_user_team(id) == 1){
            g_PlayerExp[id] += pCvar_Survive;
        
            ColorChat(id, GREY, "^x04[%s]^x03 Zdobyles^x01 %d^x03 doswiadczenia za przezycie rundy^x01!", g_sPrefix, pCvar_Survive);
        
            SaveData(id);
        }
    }
}
            
public eventDeathMsg(){
    new KillerID = read_data(1);
    new VictimID = read_data(2);
    
    if(IsPlayer(KillerID) && NotSameTeam(KillerID, VictimID) && KillerID != VictimID && g_bEnoughPlayers){
        g_PlayerExp[KillerID] += pCvar_Kill;
        
        ColorChat(KillerID, GREY, "^x04[%s]^x03 Zdobyles^x01 %d^x03 doswiadczenia za zabicie przeciwnika^x01!", g_sPrefix, pCvar_Kill);
    }
    
    SaveData(KillerID);
    
    return PLUGIN_CONTINUE;
}
bool:IsPlayer(index)
    return ((1 <= index <= g_iMaxClients) && is_user_connected(index));
    
bool:NotSameTeam(index1, index2)
    return (get_user_team(index1) != get_user_team(index2));
Użytkownik funfel edytował ten post 02.10.2011 18:08


 
Dodatki SourceMod




				
				



				
				







