Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <amxmodx>
- #include <amxmisc>
- #include <zombieplague>
- #include <sqlx>
- #include <hamsandwich>
- new c_SqlHost
- new c_SqlUser
- new c_SqlPass
- new c_SqlDB
- new c_SqlType
- enum _: UserStats {
- g_zh_kill,
- g_ms_round,
- g_zt_infect,
- g_nh_kill,
- g_hh_kill,
- g_total_dmg,
- g_grenade,
- };
- new User [ 33 ] [ UserStats ];
- new g_Error[512]
- #define ZH_MAX_KILL 500
- #define MS_MAX_ROUND 500
- #define ZT_MAX_INFECT 500
- #define NH_MAX_KILL 100
- #define HH_MAX_KILL 100
- #define TOTAL_DAMAGE 9999999
- #define GRENADE 100
- new Handle:g_SqlTuple
- public plugin_init()
- {
- register_plugin("ZP Ammo Saving", "1.0.5", "wbyokomo")
- register_event("DeathMsg", "event_death", "a")
- register_logevent("event_round_end", 2, "1=Round_End")
- register_event("TextMsg","event_round_end","a","2=#Game_Commencing","2=#Game_will_restart_in")
- register_clcmd("say /achievement", "show_medal")
- register_clcmd("ach", "show_medal")
- RegisterHam(Ham_TakeDamage, "player", "HAM_TakeDamage", 1);
- c_SqlHost = register_cvar( "zp_ammo_bank_host", "linuxclub.ro" )
- c_SqlUser = register_cvar( "zp_ammo_bank_user", "darkcs_zm" )
- c_SqlPass = register_cvar( "zp_ammo_bank_pass", "s" )
- c_SqlDB = register_cvar( "zp_ammo_bank_db", "darkcs_zm" )
- c_SqlType = register_cvar( "zp_ammo_bank_type", "mysql" )
- if( !_PrepareSQL() )
- {
- set_fail_state( "[ZP Ammo Bank] Fail to prepare SQL" )
- return;
- }
- }
- public show_medal(id)
- {
- static menu
- menu = menu_create("Achievement", "medal_menu_handle1")
- add_zombie_hunter(id, menu)
- add_master_survival(id, menu)
- add_zombie_terminator(id, menu)
- add_nemesis_hunter(id, menu)
- add_hero_hunter(id, menu)
- add_total_damage(id, menu)
- add_grenade(id, menu)
- menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
- menu_display(id, menu, 0)
- }
- public zp_user_infected_post(victim, attacker)
- {
- if(is_user_alive(attacker) && zp_get_user_zombie(attacker))
- {
- if(User [ attacker ] [ g_zt_infect ] < ZT_MAX_INFECT)
- {
- User [ attacker ] [ g_zt_infect ]++
- if(User [ attacker ] [ g_zt_infect ] >= ZT_MAX_INFECT)
- {
- static Name[64]
- get_user_name(attacker, Name, sizeof(Name))
- client_printcolor(attacker, "!g[ZP Achievement]!n Felicitari ! !g%s!n ai deblocat realizarea !gZombie Terminator", Name)
- }
- }
- }
- }
- public event_death()
- {
- static attacker, victim
- attacker = read_data(1)
- victim = read_data(2)
- static Name[64]
- get_user_name(attacker, Name, sizeof(Name))
- if(zp_get_user_zombie(victim) && !zp_get_user_zombie(attacker))
- {
- if(User [ attacker ] [ g_zh_kill ] < ZH_MAX_KILL)
- {
- User [ attacker ] [ g_zh_kill ]++
- if(User [ attacker ] [ g_zh_kill ] >= ZH_MAX_KILL)
- {
- client_printcolor(attacker, "!g[ZP Achievement]!n Felicitari! !g%s!n ai deblocat realizarea !gZombie Hunter", Name)
- }
- }
- } else if(zp_get_user_nemesis(victim) && !zp_get_user_zombie(attacker) && !zp_get_user_nemesis(attacker)) {
- if(User [ attacker ] [ g_nh_kill ] < NH_MAX_KILL)
- {
- User [ attacker ] [ g_nh_kill ]++
- if(User [ attacker ] [ g_nh_kill ] >= NH_MAX_KILL)
- {
- client_printcolor(attacker, "!g[ZP Achievement]!n Felicitari! !g%s!n ai deblocat realizarea !gNemesis Hunter", Name)
- }
- }
- } else if(zp_get_user_survivor(victim) && zp_get_user_zombie(attacker) || zp_get_user_nemesis(attacker)) {
- if(User [ attacker ] [ g_hh_kill ] < HH_MAX_KILL)
- {
- User [ attacker ] [ g_hh_kill ]++
- if(User [ attacker ] [ g_hh_kill ] >= HH_MAX_KILL)
- {
- client_printcolor(attacker, "!g[ZP Achievement]!n Felicitari! !g%s!n ai deblocat realizarea !gHero Hunter", Name)
- }
- }
- }
- if( (get_user_weapon( attacker ) == CSW_HEGRENADE ) && !zp_get_user_zombie(victim))
- {
- if(User [ attacker ] [ g_grenade ] < GRENADE )
- {
- User [ attacker ] [ g_grenade ]++
- if(User [ attacker ] [ g_grenade ] >= GRENADE)
- {
- client_printcolor(attacker, "!g[ZP Achievement]!n Felicitari! !g%s!n ai deblocat realizarea !gDeadly Grenade", Name)
- }
- }
- }
- }
- public event_round_end(id)
- {
- static attacker, victim
- attacker = read_data(1)
- victim = read_data(2)
- if(is_user_alive(attacker) && !zp_get_user_zombie(attacker))
- {
- if(User [ attacker ][g_ms_round] < MS_MAX_ROUND)
- {
- User [ attacker ][g_ms_round]++
- if(User [ attacker ][g_ms_round] >= MS_MAX_ROUND)
- {
- static Name[64]
- get_user_name(id, Name, sizeof(Name))
- client_printcolor(0, "[ZP Achievement] Felicitari! %s ai deblocat realizarea !gMaster Of Survival", Name)
- }
- }
- }
- }
- public add_zombie_hunter(id, menu)
- {
- static temp_string[128]
- if(User [ id ] [ g_zh_kill ] < ZH_MAX_KILL)
- formatex(temp_string, sizeof(temp_string), "\wZombie Hunter \r%i/%i", User [ id ] [ g_zh_kill ], ZH_MAX_KILL)
- else
- formatex(temp_string, sizeof(temp_string), "\wZombie Hunter \dComplete")
- menu_additem(menu, temp_string, "\y0")
- }
- public add_master_survival(id, menu)
- {
- static temp_string[128]
- if(User [ id ] [ g_ms_round ] < MS_MAX_ROUND)
- formatex(temp_string, sizeof(temp_string), "\wMaster Of Survival \r%i/%i", User [ id ] [ g_ms_round ] , MS_MAX_ROUND)
- else
- formatex(temp_string, sizeof(temp_string), "\wMaster Of Survival \dComplete")
- menu_additem(menu, temp_string, "\y1")
- }
- public add_zombie_terminator(id, menu)
- {
- static temp_string[128]
- if(User [ id ] [ g_zt_infect] < ZT_MAX_INFECT)
- formatex(temp_string, sizeof(temp_string), "\wZombie Terminator \r%i/%i", User [ id ] [ g_zt_infect], ZT_MAX_INFECT)
- else
- formatex(temp_string, sizeof(temp_string), "\wZombie Terminator \dComplete")
- menu_additem(menu, temp_string, "\y2")
- }
- public add_nemesis_hunter(id, menu)
- {
- static temp_string[128]
- if(User [ id ] [ g_nh_kill] < NH_MAX_KILL)
- formatex(temp_string, sizeof(temp_string), "\wNemesis Hunter \r%i/%i", User [ id ] [ g_nh_kill], NH_MAX_KILL)
- else
- formatex(temp_string, sizeof(temp_string), "\wNemesis Hunter \dComplete")
- menu_additem(menu, temp_string, "\y3")
- }
- public add_hero_hunter(id, menu)
- {
- static temp_string[128]
- if(User [ id ] [ g_hh_kill] < HH_MAX_KILL)
- formatex(temp_string, sizeof(temp_string), "\wHero Hunter \r%i/%i", User [ id ] [ g_hh_kill], HH_MAX_KILL)
- else
- formatex(temp_string, sizeof(temp_string), "\wHero Hunter \dComplete")
- menu_additem(menu, temp_string, "\y4")
- }
- public add_total_damage(id, menu)
- {
- static temp_string[128]
- if(User [ id ] [ g_total_dmg] < TOTAL_DAMAGE)
- formatex(temp_string, sizeof(temp_string), "\wAgresive Hunter \r%i/%i", User [ id ] [ g_total_dmg], TOTAL_DAMAGE)
- else
- formatex(temp_string, sizeof(temp_string), "\wAgresive Hunter \dComplete")
- menu_additem(menu, temp_string, "\y5")
- }
- public add_grenade(id, menu)
- {
- static temp_string[128]
- if(User [ id ] [ g_grenade] < GRENADE )
- formatex(temp_string, sizeof(temp_string), "\wDeadly Grenade \r%i/%i", User [ id ] [ g_grenade], GRENADE)
- else
- formatex(temp_string, sizeof(temp_string), "\wDeadly Grenade \dComplete")
- menu_additem(menu, temp_string, "\y6")
- }
- public medal_menu_handle1(id, menu, item)
- {
- if(item == MENU_EXIT)
- {
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
- static data[6], szName[64], access1, callback
- menu_item_getinfo(menu, item, access1, data,charsmax(data), szName,charsmax(szName), callback)
- static key_number
- key_number = str_to_num(data)
- switch(key_number)
- {
- case 0:
- {
- if(User [ id ] [ g_zh_kill] < ZH_MAX_KILL)
- client_printcolor(id, "!g[ZP Achievement!n Trebuie sa omori !g%i!n zombi pentru a debloca realizarea !gZombie Hunter!", ZH_MAX_KILL)
- else
- client_printcolor(id, "!g[ZP Achievement!n Ai deblocat realizarea !gZombie Hunter!")
- }
- case 1:
- {
- if(User [ id ] [ g_ms_round] < MS_MAX_ROUND)
- client_printcolor(id, "!g[ZP Achievement!n Trebuie sa supravietuiesti !g%i!n runde pentru a debloca realizarea!gMaster Of Survival!", MS_MAX_ROUND)
- else
- client_printcolor(id, "!g[ZP Achievement!n Ai deblocat realizarea !gMaster Of Survival!")
- }
- case 2:
- {
- if(User [ id ] [ g_zt_infect] < ZT_MAX_INFECT)
- client_printcolor(id, "!g[ZP Achievement!n Trebuie sa infectezi !g%i!n oameni pentru a debloca realizarea !gZombie Terminator!", ZT_MAX_INFECT)
- else
- client_printcolor(id, "!g[ZP Achievement!n Ai deblocat realizarea !gZombie Terminator!")
- }
- case 3:
- {
- if(User [ id ] [ g_nh_kill] < NH_MAX_KILL)
- client_printcolor(id, "!g[ZP Achievement!n Trebuie sa omori !g%i!n nemesis pentru a debloca realizarea !gNemesis Hunter!", NH_MAX_KILL)
- else
- client_printcolor(id, "!g[ZP Achievement!n Ai deblocat realizarea !gNemesis Hunter!")
- }
- case 4:
- {
- if(User [ id ] [ g_hh_kill] < HH_MAX_KILL)
- client_printcolor(id, "!g[ZP Achievement!n Trebuie sa omori !g%i!n eroi pentru a debloca realizarea !gHero Hunter!", HH_MAX_KILL)
- else
- client_printcolor(id, "!g[ZP Achievement!n Ai deblocat realizarea !gHero Hunter!")
- }
- case 5:
- {
- if(User [ id ] [ g_total_dmg] < TOTAL_DAMAGE)
- client_printcolor(id, "!g[ZP Achievement!n Trebuie sa omori !g%i!n eroi pentru a debloca realizarea !gHero Hunter!", HH_MAX_KILL)
- else
- client_printcolor(id, "!g[ZP Achievement!n Ai deblocat realizarea !gAgresive Hunter!")
- }
- case 6:
- {
- if(User [ id ] [ g_grenade] < GRENADE)
- client_printcolor(id, "!g[ZP Achievement!n Trebuie sa omori !g%i!n eroi pentru a debloca realizarea !gDeadly Grenade!", HH_MAX_KILL)
- else
- client_printcolor(id, "!g[ZP Achievement!n Ai deblocat realizarea !gDeadly Grenade!")
- }
- }
- return PLUGIN_HANDLED
- }
- public client_putinserver(id)
- {
- _LoadSQL(id)
- }
- public client_disconnect(id)
- {
- _SaveSQL(id)
- }
- public HAM_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type) {
- if (victim == attacker || !is_user_alive(attacker) || !is_user_connected(victim))
- return HAM_IGNORED;
- if ( User[ attacker ] [ g_total_dmg ] < TOTAL_DAMAGE ) User[ attacker ] [ g_total_dmg ] +=floatround(damage)
- return HAM_HANDLED;
- }
- _PrepareSQL() {
- new host[32], user[32], pass[32], db[32], type[12]
- get_pcvar_string( c_SqlHost, host, charsmax(host) )
- get_pcvar_string( c_SqlUser, user, charsmax(user) )
- get_pcvar_string( c_SqlPass, pass, charsmax(pass) )
- get_pcvar_string( c_SqlDB, db, charsmax(db) )
- get_pcvar_string( c_SqlType, type, charsmax(type) )
- new get_type[12]
- SQL_GetAffinity( get_type, charsmax(get_type) )
- log_amx( "[ZP Ammo Bank] SQL affinity type is %s", get_type )
- if( !equali(get_type, type) )
- {
- if( !SQL_SetAffinity(type) )
- {
- log_amx( "[ZP Ammo Bank] Failed to set affinity from %s to %s", get_type, type )
- }
- }
- g_SqlTuple = SQL_MakeDbTuple( host, user, pass, db )
- if( g_SqlTuple == Empty_Handle )
- {
- log_amx( "[ZP Ammo Bank] Failed to create SQL tuple." )
- return 0;
- }
- new const queryString[] = "CREATE TABLE IF NOT EXISTS `achievement` (\
- `auth` VARCHAR(64) NOT NULL,\
- `ZHunter` INT UNSIGNED NOT NULL,\
- `MOSurvival` INT UNSIGNED NOT NULL,\
- `ZTerminator` INT UNSIGNED NOT NULL,\
- `NHunter` INT UNSIGNED NOT NULL,\
- `HHunter` INT UNSIGNED NOT NULL,\
- `TDamage` INT UNSIGNED NOT NULL,\
- `Grenade` INT UNSIGNED NOT NULL,\
- `last_save` INT UNSIGNED NOT NULL,\
- PRIMARY KEY (`auth`) );"
- new errcode, error[128];
- new Handle:link = SQL_Connect( g_SqlTuple, errcode, error, charsmax(error) )
- if( link == Empty_Handle )
- {
- log_amx( "[ZP Ammo Bank] Failed to connect to database (%d): %s", errcode, error )
- return 0;
- }
- new Handle:query = SQL_PrepareQuery( link, "%s", queryString )
- if( !SQL_Execute(query) )
- {
- SQL_QueryError( query, error, charsmax(error) )
- log_amx( "[ZP Ammo Bank] Error creating table: %s", error )
- return 0;
- }
- else
- {
- server_print( "[ZP Ammo Bank] SQL table successful create!" )
- }
- SQL_FreeHandle(query)
- SQL_FreeHandle(link)
- return 1;
- }
- _MakeStringSQLSafe( output[], len ) {
- replace_all( output, len, "'", "*" )
- replace_all( output, len, "^"", "*" ) //" - fix Sublime Text syntax highlight
- replace_all( output, len, "`", "*" )
- }
- _LoadSQL(id) {
- new Name[64]
- get_user_name( id, Name, charsmax(Name) )
- _MakeStringSQLSafe( Name, charsmax(Name) )
- new queryString[512]
- new data[2]
- data[0] = id
- new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
- if(SqlConnection == Empty_Handle)
- set_fail_state(g_Error)
- formatex( queryString, charsmax(queryString), "SELECT ZHunter, MOSurvival, ZTerminator, NHunter, HHunter, TDamage, Grenade FROM achievement WHERE auth = '%s'", Name )
- new Handle:Query = SQL_PrepareQuery(SqlConnection,queryString)
- if(!SQL_Execute(Query))
- {
- SQL_QueryError(Query,g_Error,511)
- }
- while(SQL_MoreResults(Query))
- {
- User [ id ] [ g_zh_kill ] = SQL_ReadResult(Query,0);
- User [ id ] [ g_ms_round ] = SQL_ReadResult(Query,1);
- User [ id ] [ g_zt_infect ] = SQL_ReadResult(Query,2);
- User [ id ] [ g_nh_kill ] = SQL_ReadResult(Query,3);
- User [ id ] [ g_hh_kill ] = SQL_ReadResult(Query,4);
- User [ id ] [ g_total_dmg ] = SQL_ReadResult(Query,5);
- User [ id ] [ g_grenade ] = SQL_ReadResult(Query,6);
- SQL_NextRow(Query)
- }
- SQL_FreeHandle(Query)
- SQL_FreeHandle(SqlConnection)
- }
- _SaveSQL(id) {
- new data[2]
- data[0] = id
- new Name[64]
- get_user_name( id, Name, charsmax(Name) )
- _MakeStringSQLSafe( Name, charsmax(Name) )
- new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
- if(SqlConnection == Empty_Handle)
- set_fail_state(g_Error)
- new queryString[ 1024 ];
- formatex( queryString, charsmax(queryString),
- "INSERT INTO achievement(auth, ZHunter, MOSurvival, ZTerminator, NHunter, HHunter, last_save, TDamage, Grenade) VALUES ('%s',%d,%d,%d,%d,%d,%d,%d,%d) ON DUPLICATE KEY UPDATE auth = VALUES(auth), ZHunter = VALUES(ZHunter), MOSurvival = VALUES(MOSurvival), ZTerminator = VALUES(ZTerminator), NHunter = VALUES(NHunter), HHunter = VALUES(HHunter), last_save = VALUES(last_save), TDamage = VALUES(TDamage), Grenade = VALUES(Grenade)",
- Name, User [ id ] [ g_zh_kill ], User [ id ] [ g_ms_round ], User [ id ] [ g_zt_infect ], User [ id ] [ g_nh_kill ], User [ id ] [ g_hh_kill ], get_systime(), User [ id ] [ g_total_dmg ], User [ id ] [ g_grenade ]);
- new Handle:Query = SQL_PrepareQuery(SqlConnection,queryString)
- if(!SQL_Execute(Query))
- {
- SQL_QueryError(Query,g_Error,511)
- set_fail_state(g_Error)
- }
- SQL_FreeHandle(Query)
- SQL_FreeHandle(SqlConnection)
- }
- public QuerySaveData( failstate, Handle:query, error[], errcode, data[], size, Float:queueTime )
- {
- if( failstate == TQUERY_CONNECT_FAILED )
- {
- log_amx( "[ZP Achievement] Failed connecting to save data (%d): %s", errcode, error )
- }
- else if( failstate == TQUERY_QUERY_FAILED )
- {
- log_amx( "[ZP Achievement] Failed query on save data (%d): %s", errcode, error )
- }
- else
- {
- }
- }
- stock client_printcolor(const id, const input[], any:...)
- {
- new iCount = 1, iPlayers[32]
- static szMsg[191]
- vformat(szMsg, charsmax(szMsg), input, 3)
- replace_all(szMsg, 190, "!g", "^4")
- replace_all(szMsg, 190, "!y", "^1")
- replace_all(szMsg, 190, "!t", "^3")
- if(id) iPlayers[0] = id
- else get_players(iPlayers, iCount, "ch")
- for (new i = 0; i < iCount; i++)
- {
- if(is_user_connected(iPlayers[i]))
- {
- message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i])
- write_byte(iPlayers[i])
- write_string(szMsg)
- message_end()
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement