Raised This Month: $ Target: $400
 0% 

Achievements bug fix


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Airkish
AlliedModders Donor
Join Date: Apr 2016
Location: Lithuania
Old 03-11-2017 , 11:01   Achievements bug fix
Reply With Quote #1

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 }
*/ 
__________________
Airkish is offline
wickedd
Veteran Member
Join Date: Nov 2009
Old 03-11-2017 , 11:07   Re: Achievements bug fix
Reply With Quote #2

Because you are setting it to zero

PHP Code:
arraysetAchievement[iPlayer][HATTRICK], 033 ); 
__________________
Just buy the fucking game!!!!
I hate No-Steamers and lazy ass people.
wickedd is offline
Airkish
AlliedModders Donor
Join Date: Apr 2016
Location: Lithuania
Old 03-11-2017 , 11:13   Re: Achievements bug fix
Reply With Quote #3

Quote:
Originally Posted by wickedd View Post
Because you are setting it to zero

PHP Code:
arraysetAchievement[iPlayer][HATTRICK], 033 ); 
Thanks mate!
__________________
Airkish is offline
Airkish
AlliedModders Donor
Join Date: Apr 2016
Location: Lithuania
Old 03-11-2017 , 11:27   Re: Achievements bug fix
Reply With Quote #4

Could any1 also check why bomb plant, defuse, logo spray doesn't add point to progress?
__________________
Airkish is offline
popilas
Senior Member
Join Date: Apr 2017
Location: lituanica
Old 02-06-2018 , 15:44   Re: Achievements bug fix
Reply With Quote #5

how need fix

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

to

??
popilas is offline
edon1337
Penguin Enthusiast
Join Date: Jun 2016
Location: Macedonia
Old 02-06-2018 , 15:56   Re: Achievements bug fix
Reply With Quote #6

Just remove it
__________________
edon1337 is offline
popilas
Senior Member
Join Date: Apr 2017
Location: lituanica
Old 02-06-2018 , 16:37   Re: Achievements bug fix
Reply With Quote #7

Quote:
Originally Posted by edon1337 View Post
Just remove it
THanks,

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

Last edited by popilas; 02-06-2018 at 16:40.
popilas is offline
edon1337
Penguin Enthusiast
Join Date: Jun 2016
Location: Macedonia
Old 02-06-2018 , 17:05   Re: Achievements bug fix
Reply With Quote #8

Quote:
Originally Posted by popilas View Post
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?
__________________
edon1337 is offline
popilas
Senior Member
Join Date: Apr 2017
Location: lituanica
Old 02-11-2018 , 10:46   Re: Achievements bug fix
Reply With Quote #9

re asking how fix
popilas is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


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


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