AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Achievements bug fix (https://forums.alliedmods.net/showthread.php?t=294923)

Airkish 03-11-2017 11:01

Achievements bug fix
 
hi,

I tried to edit achievements by flaxxie (I know it's not good but there aren't any other achievement plugins with menu style progress. MOTD style isn't for me)

Problem:
Progress resets to 0 on new round

PHP Code:

#include <amxmodx>
#include <cstrike>
#include <sqlx>
#include <csgo>

enum Color
{
    
NORMAL 1// clients scr_concolor cvar color
    
GREEN// Green Color
    
TEAM_COLOR// Red, grey, blue
    
GREY// grey
    
RED// Red
    
BLUE// Blue
}

new 
TeamName[][] = 
{
    
"",
    
"TERRORIST",
    
"CT",
    
"SPECTATOR"
}

new 
Host[]      = ""
new User[]      = ""
new Pass[]      = ""
new Db[]        = ""

//NEW

new g_iPlanter
new g_iDefuser

//NEW END
new Handle:g_SqlTuple
new g_Error[512]

enum _:Achieves // Define the available Achievements, dont forget commas
{
    
MURDER,        // Done
    
SURVIVOR,    // Done
    
AIMKEY,        // Done
    
EXECUTION,    // Done
    
ONEHPHERO,    // Done
    
PLANT,
    
RITE,
    
BOOMALA,
    
DEFUSE,
    
DAILININKAS,
    
HATTRICK
}

new const 
AchName[Achieves][] = // Define the Achievements Names, dont forget commas
{
    
"Karo Dievas",
    
"Išgyventojas",
    
"Aimas",
    
"Ace",
    
"1 HP Didvyris",
    
"Sprogdintojas"//NEW
    
"Išminuotojas",
    
"Bombermenas",
    
"Elitinis Išminuotojas",
    
"Dailininkas",
    
"Hat Trick"
}

new const 
AchDescription[Achieves][] = // Define the Achievements Description, dont forget commas
{
    
"Nužudyk 500 priešų",
    
"Išgyvenk 250 raundų",
    
"Padaryk 125 HS",
    
"Padaryk ACE",
    
"Nužudyk 5 priešus su 1 HP",
    
"Laimėk raundą susprogdinęs C4"//NEW
    
"Laimėk raundą išminavęs C4",
    
"Padėk 50 C4 bombų",
    
"Išminuok 50 C4 bombų",
    
"Nupiešk 50 graffiti (spray)",
    
"Padaryk 3 HS iš eilės"
}

new const 
AchRequirement[Achieves] = // Define Requirements. For non progress achievements use 1 (Like Secret Phrase), dont forget commas
{
    
500,
    
250,
    
125,
    
5,
    
5,
    
1//NEW
    
1,
    
50,
    
50,
    
50,
    
3


}

new const 
prefix[] = "pasiekimai >> "

new Achievement[33][Achieves]
new 
szTemp[555 char]

public 
plugin_init() 
{
    
register_plugin("Achievements""5.0""fLaXXiE")
    
    
register_event("DeathMsg""Event_DeathMsg""a")
    
register_logevent("EventRoundStart"2"1=Round_Start")
    
register_logevent"Event_Roundend"2"1=Round_End" ); 

    
//NEW
    
register_logevent"EventBombDefused"3"2=Defused_The_Bomb" );
    
register_logevent"EventPlantTheBomb"3"2=Planted_The_Bomb" );
    
register_logevent"EventBombExploded"6"3=Target_Bombed" );





    
//NEW END
    
    
register_clcmd("say /achievements""CmdAch")
    
register_clcmd("say /ach""CmdAch")
    
register_clcmd("say /a""CmdAch")
    
    
set_task(1.0"MySql_Init")
}

public 
client_putinserver(iPlayer)
    
Load_MySql(iPlayer)

public 
client_disconnect(iPlayer)
{
    
Save_MySql(iPlayer)
}

public 
plugin_end()
    
SQL_FreeHandle(g_SqlTuple)

public 
CmdAch(iPlayer)
{
    new 
g_AchMenu menu_create("\wPasiekimai""Achievements_Handler")
    
    new 
Key[6]
    
    for(new 
iAch 0iAch AchievesiAch++)
    {
        if(
Achievement[iPlayer][iAch] == 0formatex(szTempcharsmax(szTemp), "\d%s - [%s] [%d/%d]"AchName[iAch], AchDescription[iAch], Achievement[iPlayer][iAch], AchRequirement[iAch])
        else if(
Achievement[iPlayer][iAch] >= AchRequirement[iAch]) formatex(szTempcharsmax(szTemp), "\y%s \w- [\rCOMPLETED\w]"AchName[iAch])
        else 
formatex(szTempcharsmax(szTemp), "\y%s \w- [\r%s\w]\w [\r%d\w/\r%d\w]"AchName[iAch], AchDescription[iAch], Achievement[iPlayer][iAch], AchRequirement[iAch])
        
menu_additem(g_AchMenuszTempKey)
    }
    
    
menu_setprop(g_AchMenuMPROP_EXITMEXIT_ALL)
    
menu_display(iPlayerg_AchMenu0)
}

public 
Achievements_Handler(iPlayerg_AchMenuitem

    if(
item == MENU_EXIT
    { 
        
menu_destroy(g_AchMenu)
        return 
PLUGIN_HANDLED 
    
}
    else
    {
        if(
Achievement[iPlayer][item] >= AchRequirement[item]) 
        { 
            
CmdAch(iPlayer); 
        } 
        else 
        { 
               
CmdAch(iPlayer); 
        } 
    } 
    return 
PLUGIN_CONTINUE 
}  



///////////////////////////////////////////////////
///////// START OF ACHIEVEMENT ACTIONS ////////////
///////////////////////////////////////////////////

public Event_DeathMsg()
{
    new 
iKiller read_data(1)
    new 
iVictim read_data(2)

    new 
szName[33]; 
    
get_user_name(iKillerszNamecharsmax(szName))
    
    if(
is_user_alive(iKiller) && get_user_team(iKiller) != get_user_team(iVictim))
    {
        
Achievement[iKiller][EXECUTION]++
        
        if(
Achievement[iKiller][EXECUTION] == AchRequirement[EXECUTION])
        {
            
ColorChat(0RED"%s ^4%s ^1Sėkmingai atrakino ^4%s ^1pasiekimą ir gavo^3 500 ^1taškų!"prefixszNameAchName[EXECUTION])
            
set_user_points(iKillerget_user_points(iKiller) + 500);
        }
        
        if(
is_user_alive(iKiller) && get_user_team(iKiller) != get_user_team(iVictim))
        {
            
Achievement[iKiller][MURDER]++
        
            if(
Achievement[iKiller][MURDER] == AchRequirement[MURDER])
            {
                
ColorChat(0RED"%s ^4%s ^1Sėkmingai atrakino ^4%s ^1pasiekimą ir gavo^3 1000 ^1taškų!"prefixszNameAchName[MURDER])
                
set_user_points(iKillerget_user_points(iKiller) + 1000);
            }
        
        }
        
        if(
get_user_health(iKiller) == 1)
        {
            
Achievement[iKiller][ONEHPHERO]++
            
            if(
Achievement[iKiller][ONEHPHERO] == AchRequirement[ONEHPHERO])
            {
                
ColorChat(0RED"%s ^4%s ^1Sėkmingai atrakino ^4%s ^1pasiekimą ir gavo^3 2000 ^1taškų!"prefixszNameAchName[ONEHPHERO])
                
set_user_points(iKillerget_user_points(iKiller) + 2000);
            }
        }
        if(
read_data(3))
        {    
            
Achievement[iKiller][AIMKEY]++
            
            if(
Achievement[iKiller][AIMKEY] == AchRequirement[AIMKEY])
            {
                
ColorChat(0RED"%s ^4%s ^1Sėkmingai atrakino ^4%s ^1pasiekimą ir gavo^3 1000 ^1taškų!"prefixszNameAchName[AIMKEY])
                
set_user_points(iKillerget_user_points(iKiller) + 1000);

            }
            if( ++
Achievement[iKiller][HATTRICK] == AchRequirement[HATTRICK] ) {
                
ColorChat(0RED"%s ^4%s ^1Sėkmingai atrakino ^4%s ^1pasiekimą ir gavo^3 700 ^1taškų!"prefixszNameAchName[HATTRICK])
                
set_user_points(iKillerget_user_points(iKiller) + 700);
            }
        }
    }
    return 
PLUGIN_CONTINUE
}

public 
EventRoundStart()
{

    new 
iPlayers[32], iNumiPlayerszName[33]
    
get_players(iPlayersiNum"a")

    
arraysetAchievement[iPlayer][HATTRICK], 033 );

    
g_iPlanter 0;
    
g_iDefuser 0;
    
    for(new 
0iNumi++)
    {
        
iPlayer iPlayers[i]
        
get_user_name(iPlayerszNamecharsmax(szName))
        
        if(
Achievement[iPlayer][EXECUTION] < 5)
            
Achievement[iPlayer][EXECUTION] = 0
    
}
    return 
PLUGIN_CONTINUE
}

public 
Event_Roundend() {
    new 
iPlayers[32], iNumiPlayerszName[33]
    
get_players(iPlayersiNum"a")

    for(new 
0iNumi++)
    {
        
iPlayer iPlayers[i]
        
get_user_name(iPlayerszNamecharsmax(szName))

        if(
is_user_alive(iPlayer))
        {
            
Achievement[iPlayer][SURVIVOR]++
                
            if(
Achievement[iPlayer][SURVIVOR] == AchRequirement[SURVIVOR])
            {
                
ColorChat(0RED"%s ^4%s ^1Sėkmingai atrakino ^4%s ^1pasiekimą ir gavo^3 1000 ^1taškų!"prefixszNameAchName[SURVIVOR])
                
set_user_points(iPlayerget_user_points(iPlayer) + 1000);

            }
        }
    }    
    
Save_MySql(iPlayer)
    return 
PLUGIN_CONTINUE
}

//NEW

public EventBombExploded( )
{
    new 
szName[33]; 
    
get_user_name(g_iPlanterszNamecharsmax(szName))

    if( 
is_user_connectedg_iPlanter ) )
    {
        
Achievement[g_iPlanter][PLANT]++;
        if(
Achievement[g_iPlanter][PLANT] == AchRequirement[PLANT])
            {
                
ColorChat(0RED"%s ^4%s ^1Sėkmingai atrakino ^4%s ^1pasiekimą ir gavo^3 300 ^1taškų!"prefixszNameAchName[PLANT])
                
set_user_points(g_iPlanterget_user_points(g_iPlanter) + 300);
            }
    }
}

public 
EventBombDefused( ) 
{
    new 
szName[33]; 
    
get_user_name(g_iDefuserszNamecharsmax(szName))

    if( 
is_user_aliveg_iDefuser ) ) {
        
Achievement[g_iDefuser][PLANT]++;
        if(
Achievement[g_iDefuser][RITE] == AchRequirement[RITE])
            {
                
ColorChat(0RED"%s ^4%s ^1Sėkmingai atrakino ^4%s ^1pasiekimą ir gavo^3 300 ^1taškų!"prefixszNameAchName[RITE])
                
set_user_points(g_iDefuserget_user_points(g_iDefuser) + 300);
            }
        
Achievement[g_iPlanter][DEFUSE]++;
        if(
Achievement[g_iPlanter][DEFUSE] == AchRequirement[DEFUSE])
            {
                
ColorChat(0RED"%s ^4%s ^1Sėkmingai atrakino ^4%s ^1pasiekimą ir gavo^3 1200 ^1taškų!"prefixszNameAchName[DEFUSE])
                
set_user_points(g_iDefuserget_user_points(g_iDefuser) + 1200);
            }
    }
}

public 
EventPlantTheBomb( )
{
    new 
szName[33]; 
    
get_user_name(g_iPlanterszNamecharsmax(szName))

    if( 
get_playersnum( ) < ) return;
        
    if( 
is_user_connectedg_iPlanter ) )
    {
        
Achievement[g_iPlanter][BOOMALA]++;
        if(
Achievement[g_iPlanter][BOOMALA] == AchRequirement[BOOMALA])
            {
                
ColorChat(0RED"%s ^4%s ^1Sėkmingai atrakino ^4%s ^1pasiekimą ir gavo^3 1200 ^1taškų!"prefixszNameAchName[BOOMALA])
                
set_user_points(g_iPlanterget_user_points(g_iPlanter) + 1200);
            }
    }
}

public 
EventSpray( )
{
    new 
sprayer read_data)
    new 
szName[33]; 
    
get_user_name(sprayerszNamecharsmax(szName))

    
Achievement[sprayer][DAILININKAS]++;
    if(
Achievement[sprayer][DAILININKAS] == AchRequirement[DAILININKAS])
        {
            
ColorChat(0RED"%s ^4%s ^1Sėkmingai atrakino ^4%s ^1pasiekimą ir gavo^3 400 ^1taškų!"prefixszNameAchName[DAILININKAS])
            
set_user_points(sprayerget_user_points(sprayer) + 400);
        }
}




///////////////////////////////////////////////////
////////// END OF ACHIEVEMENT ACTIONS /////////////
///////////////////////////////////////////////////

///////////////////////////////////////////////////
///////// START OF ACHIEVEMENT SAVING /////////////
///////////////////////////////////////////////////

public MySql_Init()
{
    
g_SqlTuple SQL_MakeDbTuple(Host,User,Pass,Db)
   
    new 
ErrorCode,Handle:SqlConnection SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error))
    
    if(
SqlConnection == Empty_Handle)
        
set_fail_state(g_Error)
       
    new 
Handle:Queries
    Queries 
SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS achievements(steamid varchar(32), murder INT(11), survivor INT(11), aimkey INT(11), execution INT(11), onehphero INT(11), plant INT(11), rite INT(11), boomala INT(11), defuse INT(11), dailininkas INT(11), hattrick INT(11))")

    if(!
SQL_Execute(Queries))
    {
        
SQL_QueryError(Queries,g_Error,charsmax(g_Error))
        
set_fail_state(g_Error)
    }
    
    
SQL_FreeHandle(Queries)
    
SQL_FreeHandle(SqlConnection)   
}

public 
Load_MySql(iPlayer)
{
    new 
szSteamId[32], szTemp[512]
    
get_user_authid(iPlayerszSteamIdcharsmax(szSteamId))
    
    new 
Data[1]
    
Data[0] = iPlayer

    format
(szTemp,charsmax(szTemp),"SELECT * FROM `achievements` WHERE (`achievements`.`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"ErrcodeError)
    }
    else if(
FailState == TQUERY_QUERY_FAILED)
    {
        
log_amx("Load Query failed. [%d] %s"ErrcodeError)
    }

    new 
iPlayer
    iPlayer 
Data[0]
    
    if(
SQL_NumResults(Query) < 1
    {    
        new 
szSteamId[32]
        
get_user_authid(iPlayerszSteamIdcharsmax(szSteamId))
        
        if (
equal(szSteamId,"ID_PENDING"))
            return 
PLUGIN_HANDLED
            
        
new szTemp[512]
        
        
format(szTemp,charsmax(szTemp),"INSERT INTO `achievements` (`steamid`, `murder`, `survivor`, `aimkey`, `execution`, `onehphero`, `plant`, `rite`, `boomala`, `defuse`, `dailininkas`, `hattrick`)VALUES ('%s', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0')"szSteamId)
        
SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
    } 
    else 
    {
        
Achievement[iPlayer][MURDER]    = SQL_ReadResult(Query1)
        
Achievement[iPlayer][SURVIVOR]    = SQL_ReadResult(Query2)
        
Achievement[iPlayer][AIMKEY]    = SQL_ReadResult(Query3)
        
Achievement[iPlayer][EXECUTION]    = SQL_ReadResult(Query4)
        
Achievement[iPlayer][ONEHPHERO]    = SQL_ReadResult(Query5)
        
Achievement[iPlayer][PLANT]        = SQL_ReadResult(Query6)
        
Achievement[iPlayer][RITE]        = SQL_ReadResult(Query7)
        
Achievement[iPlayer][BOOMALA]    = SQL_ReadResult(Query8)
        
Achievement[iPlayer][DEFUSE]    = SQL_ReadResult(Query9)
        
Achievement[iPlayer][DAILININKAS]    = SQL_ReadResult(Query10)
        
Achievement[iPlayer][HATTRICK]    = SQL_ReadResult(Query11)
    }
    
    return 
PLUGIN_HANDLED
}

public 
Save_MySql(iPlayer)
{
    new 
szSteamId[32], szTemp[512], szTemp2[512]
    
get_user_authid(iPlayerszSteamIdcharsmax(szSteamId))
    
    
format(szTemp,charsmax(szTemp),"UPDATE `achievements` SET `murder` = '%d', `survivor` = '%d', `aimkey` = '%d', `execution` = '%d', `onehphero` = '%d' WHERE `achievements`.`steamid` = '%s';"Achievement[iPlayer][MURDER], Achievement[iPlayer][SURVIVOR], Achievement[iPlayer][AIMKEY], Achievement[iPlayer][EXECUTION], Achievement[iPlayer][ONEHPHERO], szSteamId)

    
format(szTemp2,charsmax(szTemp2),"UPDATE `achievements` SET `plant` = '%d', `rite` = '%d', `boomala` = '%d', `defuse` = '%d', `dailininkas` = '%d', `hattrick` = '%d' WHERE `achievements`.`steamid` = '%s';"Achievement[iPlayer][PLANT], Achievement[iPlayer][RITE], Achievement[iPlayer][BOOMALA], Achievement[iPlayer][DEFUSE], Achievement[iPlayer][DAILININKAS], Achievement[iPlayer][HATTRICK], szSteamId)
    
    
SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
    
SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp2)
}

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

///////////////////////////////////////////////////
///////// START OF ACHIEVEMENT COLORCHAT //////////
///////////////////////////////////////////////////

ColorChat(idColor:type, const msg[], {Float,Sql,Result,_}:...)
{
    static 
message[256];

    switch(
type)
    {
        case 
NORMAL// clients scr_concolor cvar color
        
{
            
message[0] = 0x01;
        }
        case 
GREEN// Green
        
{
            
message[0] = 0x04;
        }
        default: 
// White, Red, Blue
        
{
            
message[0] = 0x03;
        }
    }

    
vformat(message[1], 251msg4);

    
// Make sure message is not longer than 192 character. Will crash the server.
    
message[192] = '^0';

    static 
teamColorChangeindexMSG_Type;
    
    if(
id)
    {
        
MSG_Type MSG_ONE;
        
index id;
    } else {
        
index FindPlayer();
        
MSG_Type MSG_ALL;
    }
    
    
team get_user_team(index);
    
ColorChange ColorSelection(indexMSG_Typetype);

    
ShowColorMessage(indexMSG_Typemessage);
        
    if(
ColorChange)
    {
        
Team_Info(indexMSG_TypeTeamName[team]);
    }
}

ShowColorMessage(idtypemessage[])
{
    
message_begin(typeget_user_msgid("SayText"), _id);
    
write_byte(id)        
    
write_string(message);
    
message_end();    
}

Team_Info(idtypeteam[])
{
    
message_begin(typeget_user_msgid("TeamInfo"), _id);
    
write_byte(id);
    
write_string(team);
    
message_end();

    return 
1;
}

ColorSelection(indextypeColor:Type)
{
    switch(
Type)
    {
        case 
RED:
        {
            return 
Team_Info(indextypeTeamName[1]);
        }
        case 
BLUE:
        {
            return 
Team_Info(indextypeTeamName[2]);
        }
        case 
GREY:
        {
            return 
Team_Info(indextypeTeamName[0]);
        }
    }

    return 
0;
}

FindPlayer()
{
    static 
i;
    
= -1;

    while(
<= get_maxplayers())
    {
        if(
is_user_connected(++i))
        {
            return 
i;
        }
    }

    return -
1;
}
///////////////////////////////////////////////////
///////// END OF ACHIEVEMENT COLORCHAT ////////////
///////////////////////////////////////////////////

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0\\ deflang1053{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
*/ 


wickedd 03-11-2017 11:07

Re: Achievements bug fix
 
Because you are setting it to zero

PHP Code:

arraysetAchievement[iPlayer][HATTRICK], 033 ); 


Airkish 03-11-2017 11:13

Re: Achievements bug fix
 
Quote:

Originally Posted by wickedd (Post 2502701)
Because you are setting it to zero

PHP Code:

arraysetAchievement[iPlayer][HATTRICK], 033 ); 


Thanks mate!

Airkish 03-11-2017 11:27

Re: Achievements bug fix
 
Could any1 also check why bomb plant, defuse, logo spray doesn't add point to progress?

popilas 02-06-2018 15:44

Re: Achievements bug fix
 
how need fix

arrayset( Achievement[iPlayer][HATTRICK], 0, 33 ); ?

to

??

edon1337 02-06-2018 15:56

Re: Achievements bug fix
 
Just remove it

popilas 02-06-2018 16:37

Re: Achievements bug fix
 
Quote:

Originally Posted by edon1337 (Post 2576784)
Just remove it

THanks,

Could any1 also check why bomb plant, defuse, logo spray doesn't add point to progress?
___

edon1337 02-06-2018 17:05

Re: Achievements bug fix
 
Quote:

Originally Posted by popilas (Post 2576790)
THanks,

Could any1 also check why bomb plant, defuse, logo spray doesn't add point to progress?
___

.. are u really re-asking the actual same questions that OP did?

popilas 02-11-2018 10:46

Re: Achievements bug fix
 
re asking how fix :)


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

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