PHP Code:
#include <amxmodx>
#include <colorchat>
#include <fakemeta>
#include <engine>
#include <xs>
#include <nvault>
#define VERSION "1.0.0"
#define MaxPlayers 33
// native get_user_achievements(id)
// native set_user_achievements(id, Achievements)
new TotalAchievements[33]
new iTotalAchievements = 12
new gVault
new const szAchievementSound[] = "Achievements/AchievementReach.wav"
enum _:iAchCount {
DIES,
SPRAYS,
KILLS,
CONNECT,
HEADSHOT,
KNIFE,
DISTANCE,
SURVIVE,
GRENADE,
USP,
GLOCK,
SNEAKY
}
new const iAchPoints[iAchCount] = {
500,
1000,
1000,
500,
500,
100,
3,
100,
50,
250,
250,
100
}
new iAchLevel[MaxPlayers][iAchCount]
new const Float:vecNullOrigin[3]
new Float:flDistance[MaxPlayers]
new Float:vecOldOrigin[MaxPlayers][3]
new Float:g_iFeet = 35.0
public plugin_init() {
register_plugin("JailBreak Achievements", VERSION, "NapoleoN#")
// Commands
register_clcmd("say /achs", "Cmd_ShowAchievements")
// Events
register_event("DeathMsg", "eDeath", "a")
register_event("23", "player_spray", "a", "1=112")
register_event("SendAudio", "TerrorWins", "a", "2=%!MRAD_terwin")
// Fakemeta
register_forward(FM_CmdStart, "CmdStart")
// nVault
nvault_open("AchievementSystem")
}
/*public plugin_natives() {
register_library("AchievementsNatives")
register_native("get_user_achievements", "_get_achievements")
register_native("set_user_achievements", "_set_achievements")
}
*/
/*public _get_achievements(id) {
return TotalAchievements[get_param(1)]
}
public _set_achievements(id, Achievements) {
new iPlayer = get_param(1)
TotalAchievements[iPlayer] = max(0, get_param(2))
return TotalAchievements[iPlayer]
}
*/
public plugin_precache() {
precache_sound(szAchievementSound)
}
public TerrorWins() {
new players[32], count
get_players(players, count, "ae", "TERRORIST")
if(count == 1) {
new id = players[0]
iAchLevel[id][SURVIVE]++
if(iAchLevel[id][SURVIVE] == 100) {
TotalAchievements[id]++
ColorChat(id, GREEN, "[Achievements]^1 Congratulations! You have unclocked the achievement:^3 Survivor!")
}
}
}
public client_putinserver(id) {
iAchLevel[id][CONNECT]++
switch(iAchLevel[id][CONNECT]) {
case 500: {
set_task(2.0, "ReachAddict", id) // Avoid playing the sound and printing the message to early.
}
}
LoadData(id)
}
public ReachAddict(id) {
TotalAchievements[id]++
ColorChat(id, GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Addict!")
emit_sound(id, CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public eDeath() {
new iClip, iAmmo, iWeapon = get_user_weapon(read_data(1), iClip, iAmmo)
if(is_user_alive(read_data(1))) {
iAchLevel[read_data(1)][KILLS]++
}
if(read_data(3)) {
iAchLevel[read_data(1)][HEADSHOT]++
}
if(iWeapon == CSW_KNIFE) {
iAchLevel[read_data(1)][KNIFE]++
}
if(iWeapon == CSW_HEGRENADE) {
iAchLevel[read_data(1)][GRENADE]++
}
if(iWeapon == CSW_USP) {
iAchLevel[read_data(1)][USP]++
}
if(iWeapon == CSW_GLOCK18) {
iAchLevel[read_data(1)][GLOCK]++
}
if(get_user_weapon(read_data(2)) == CSW_AWP && iWeapon == CSW_KNIFE) {
iAchLevel[read_data(1)][SNEAKY]++
}
iAchLevel[read_data(2)][DIES]++
switch(iAchLevel[read_data(2)][DIES]) {
case 500: {
TotalAchievements[read_data(2)]++
ColorChat(read_data(2), GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Anti-GodMode!")
emit_sound(read_data(2), CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
switch(iAchLevel[read_data(1)][KILLS]) {
case 1000: {
TotalAchievements[read_data(1)]++
ColorChat(read_data(1), GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Prison Breaker!")
emit_sound(read_data(1), CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
switch(iAchLevel[read_data(1)][HEADSHOT]) {
case 500: {
TotalAchievements[read_data(1)]++
ColorChat(read_data(1), GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 HeadzHunterz!")
emit_sound(read_data(1), CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
switch(iAchLevel[read_data(1)][KNIFE]) {
case 100: {
TotalAchievements[read_data(1)]++
ColorChat(read_data(1), GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 The Butcher!")
emit_sound(read_data(1), CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
switch(iAchLevel[read_data(1)][GRENADE]) {
case 50: {
TotalAchievements[read_data(1)]++
ColorChat(read_data(1), GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Grenadier!")
emit_sound(read_data(1), CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
switch(iAchLevel[read_data(1)][USP]) {
case 250: {
TotalAchievements[read_data(1)]++
ColorChat(read_data(1), GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Officer!")
emit_sound(read_data(1), CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
switch(iAchLevel[read_data(1)][GLOCK]) {
case 250: {
TotalAchievements[read_data(1)]++
ColorChat(read_data(1), GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Glocker!")
emit_sound(read_data(1), CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
switch(iAchLevel[read_data(1)][SNEAKY]) {
case 100: {
TotalAchievements[read_data(1)]++
ColorChat(read_data(1), GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Sneaky...")
emit_sound(read_data(1), CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
}
public player_spray() {
iAchLevel[read_data(2)][SPRAYS]++
switch(iAchLevel[read_data(2)][SPRAYS]) {
case 1000: {
TotalAchievements[read_data(2)]++
ColorChat(read_data(2), GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Graffity Gangster!")
emit_sound(read_data(2), CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
}
public Cmd_ShowAchievements(id) {
new szTemp[500 char]
formatex(szTemp, charsmax(szTemp), "JailBreak Achievements Menu^nTotal Achievements: \r%i/%i", TotalAchievements[id], iTotalAchievements)
new menu = menu_create(szTemp, "Ach_Handler")
formatex(szTemp, charsmax(szTemp), "Anti-GodMode! \r%i/%i", iAchLevel[id][DIES], iAchPoints[DIES])
menu_additem(menu, szTemp, "1")
formatex(szTemp, charsmax(szTemp), "Graffity Gangster! \r%i/%i", iAchLevel[id][SPRAYS], iAchPoints[SPRAYS])
menu_additem(menu, szTemp, "2")
formatex(szTemp, charsmax(szTemp), "Prison Breaker! \r%i/%i", iAchLevel[id][KILLS], iAchPoints[KILLS])
menu_additem(menu, szTemp, "3")
formatex(szTemp, charsmax(szTemp), "Addict! \r%i/%i", iAchLevel[id][CONNECT], iAchPoints[CONNECT])
menu_additem(menu, szTemp, "4")
formatex(szTemp, charsmax(szTemp), "HeadzHunterz! \r%i/%i", iAchLevel[id][HEADSHOT], iAchPoints[HEADSHOT])
menu_additem(menu, szTemp, "5")
formatex(szTemp, charsmax(szTemp), "The Butcher! \r%i/%i", iAchLevel[id][KNIFE], iAchPoints[KNIFE])
menu_additem(menu, szTemp, "6")
formatex(szTemp, charsmax(szTemp), "Sprinter! \r%i/%i", iAchLevel[id][DISTANCE], iAchPoints[DISTANCE])
menu_additem(menu, szTemp, "7")
formatex(szTemp, charsmax(szTemp), "Survivor! \r%i/%i", iAchLevel[id][SURVIVE], iAchPoints[SURVIVE])
menu_additem(menu, szTemp, "8")
formatex(szTemp, charsmax(szTemp), "Grenadier! \r%i/%i", iAchLevel[id][GRENADE], iAchPoints[GRENADE])
menu_additem(menu, szTemp, "9")
formatex(szTemp, charsmax(szTemp), "Officer! \r%i/%i", iAchLevel[id][USP], iAchPoints[USP])
menu_additem(menu, szTemp, "10")
formatex(szTemp, charsmax(szTemp), "Glocker! \r%i/%i", iAchLevel[id][GLOCK], iAchPoints[GLOCK])
menu_additem(menu, szTemp, "11")
formatex(szTemp, charsmax(szTemp), "Sneaky... \r%i/%i", iAchLevel[id][SNEAKY], iAchPoints[SNEAKY])
menu_additem(menu, szTemp, "12")
menu_display(id, menu)
}
public Ach_Handler(id, menu, item) {
if(item == MENU_EXIT) {
menu_destroy(menu)
return PLUGIN_HANDLED
}
switch(item) {
case 0: {
ColorChat(id, GREEN, "[Achievements]^1 Reach^3 %i^1 deaths to unlock this^4 Achievement!", iAchPoints[DIES])
ColorChat(id, GREEN, "[Achievements]^3 %i/%i.", iAchLevel[id][DIES], iAchPoints[DIES])
}
case 1: {
ColorChat(id, GREEN, "[Achievements]^1 Reach^3 %i^1 sprays to unlock this^4 Achievement!", iAchPoints[SPRAYS])
ColorChat(id, GREEN, "[Achievements]^3 %i/%i.", iAchLevel[id][SPRAYS], iAchPoints[SPRAYS])
}
case 2: {
ColorChat(id, GREEN, "[Achievements]^1 Reach^3 %i^1 kills to unlock this^4 Achievement!", iAchPoints[KILLS])
ColorChat(id, GREEN, "[Achievements]^3 %i/%i.", iAchLevel[id][KILLS], iAchPoints[KILLS])
}
case 3: {
ColorChat(id, GREEN, "[Achievements]^1 Reach^3 %i^1 connects to unlock this^4 Achievement!", iAchPoints[CONNECT])
ColorChat(id, GREEN, "[Achievements]^3 %i/%i.", iAchLevel[id][CONNECT], iAchPoints[CONNECT])
}
case 4: {
ColorChat(id, GREEN, "[Achievements]^1 Reach^3 %i^1 headshots to unlock this^4 Achievement!", iAchPoints[HEADSHOT])
ColorChat(id, GREEN, "[Achievements]^3 %i/%i.", iAchLevel[id][HEADSHOT], iAchPoints[HEADSHOT])
}
case 5: {
ColorChat(id, GREEN, "[Achievements]^1 Reach^3 %i^1 knife kills to unlock this^4 Achievement!", iAchPoints[KNIFE])
ColorChat(id, GREEN, "[Achievements]^3 %i/%i.", iAchLevel[id][KNIFE], iAchPoints[KNIFE])
}
case 6: {
new Float:footsteps = flDistance[id] / g_iFeet
ColorChat(id, GREEN, "[Achievements]^1 Reach^3 52800^1 footsteps to unlock this achievement!")
ColorChat(id, GREEN, "[Achievements]^3 %f/52800.", footsteps)
}
case 7: {
ColorChat(id, GREEN, "[Achievements]^1 Survive^3 %i^1 rounds to unlock this achievement!", iAchPoints[SURVIVE])
ColorChat(id, GREEN, "[Achievements]^1 %i/%i.", iAchLevel[id][SURVIVE], iAchPoints[SURVIVE])
}
case 8: {
ColorChat(id, GREEN, "[Achievements]^1 Kill^3 %i^1 players with a he grende to unlock this achievement!", iAchPoints[GRENADE])
ColorChat(id, GREEN, "[Achievements]^1 %i/%i.", iAchLevel[id][GRENADE], iAchPoints[GRENADE])
}
case 9: {
ColorChat(id, GREEN, "[Achievements]^1 Kill^3 %i^1 players with a USP to unlock this achievement!", iAchPoints[USP])
ColorChat(id, GREEN, "[Achievements]^1 %i/%i.", iAchLevel[id][USP], iAchPoints[USP])
}
case 10: {
ColorChat(id, GREEN, "[Achievements]^1 Kill^3 %i^1 players with a Glock18 to unlock this achievement!", iAchPoints[GLOCK])
ColorChat(id, GREEN, "[Achievements]^1 %i/%i.", iAchLevel[id][GLOCK], iAchPoints[GLOCK])
}
case 11: {
ColorChat(id, GREEN, "[Achievements]^1 Kill^3 %i^1 players with a knife while they carry an AWP to unlock this achievement!", iAchPoints[SNEAKY])
ColorChat(id, GREEN, "[Achievements]^1 %i/%i.", iAchLevel[id][SNEAKY], iAchPoints[SNEAKY])
}
}
return PLUGIN_HANDLED
}
public CmdStart(id) {
if(!is_user_alive(id)) {
return FMRES_IGNORED
}
if(iAchLevel[id][DISTANCE] <= 2) {
new Float:vecOrigin[ 3 ]
entity_get_vector( id, EV_VEC_origin, vecOrigin )
if(!xs_vec_equal(vecOldOrigin[id], vecNullOrigin)) {
flDistance[id] += get_distance_f(vecOrigin, vecOldOrigin[id])
}
xs_vec_copy(vecOrigin, vecOldOrigin[id])
switch(iAchLevel[id][DISTANCE]) {
case 0: {
if(flDistance[id] / g_iFeet >= 1)
{
iAchLevel[id][DISTANCE]++
ColorChat(id, GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Baby Footsteps!")
emit_sound(id, CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
}
}
case 1: {
if(flDistance[id] / g_iFeet >= 5280) {
iAchLevel[id][DISTANCE]++
ColorChat(id, GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Walk Away!")
emit_sound(id, CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
}
}
case 2: {
if(flDistance[id] / g_iFeet >= 52800) {
iAchLevel[id][DISTANCE]++
TotalAchievements[id]++
ColorChat(id, GREEN, "[Achievements]^1 Congratulations! You have unlocked the achievement:^3 Sprinter!")
emit_sound(id, CHAN_STATIC, szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
}
}
}
}
return FMRES_IGNORED
}
public client_disconnect(id) {
SaveData(id)
}
public SaveData(id)
{
new SteamID[32]; get_user_authid(id, SteamID, charsmax(SteamID))
new vaultkey[64], vaultdata[256] , iPos
formatex(vaultkey, charsmax(vaultkey), "%s-AchievementSystem", SteamID)
iPos = num_to_str(TotalAchievements[id], vaultdata, charsmax(vaultdata))
vaultdata[iPos++] = ' '
for(new i; i < iAchCount; i++) {
iPos += formatex(vaultdata[iPos], charsmax(vaultdata) - iPos, "%i ", iAchLevel[id][i])
}
nvault_set(gVault, vaultkey, vaultdata)
}
public LoadData(id)
{
new SteamID[35]; get_user_authid(id, SteamID, charsmax(SteamID))
new vaultkey[64], vaultdata[256], szVal[6]
formatex(vaultkey, charsmax(vaultkey), "%s-AchievementSystem", SteamID)
nvault_get(gVault, vaultkey, vaultdata, charsmax(vaultdata))
strbreak(vaultdata, szVal, charsmax(szVal), vaultdata, charsmax(vaultdata ))
TotalAchievements[id] = str_to_num(szVal)
for(new i; i < iAchCount; i++) {
strbreak(vaultdata, szVal , charsmax(szVal) , vaultdata , charsmax(vaultdata))
iAchLevel[id][i] = str_to_num(szVal)
}
}