#include #include #include #include #define PLUGIN "Achievements" #define VERSION "1.0" #define AUTHOR "Fili:P" #define MAX 32 #define PREFIX "[Achievements]" // achievement new AchValue; new Array:AchStance[ MAX+1 ]; new Array:AchStatus[ MAX+1 ]; new Array:AchTarget; new Array:AchName; new Array:AchDesc; // forwardy new g_Forward[ 5 ]; // cvary new g_cvar_display; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_clcmd("say /ach", "AchMenu"); register_clcmd("say_team /ach", "AchMenu"); RegisterHam(Ham_Killed, "player", "HamCheck", 0); RegisterHam(Ham_Spawn, "player", "HamSpawn", 1); g_cvar_display = get_pcvar_num( register_cvar("ach_display_gz", "1") ); // czy wyswietlac gratulacje zdobyles %s ? AchTarget = ArrayCreate(1, 1); AchName = ArrayCreate(32, 1); AchDesc = ArrayCreate(256, 1); g_Forward[ 0 ] = CreateMultiForward("ach_give_reward", ET_CONTINUE, FP_CELL, FP_CELL); g_Forward[ 1 ] = CreateMultiForward("ach_load_post", ET_CONTINUE, FP_CELL); g_Forward[ 2 ] = CreateMultiForward("ach_save_pre", ET_CONTINUE, FP_CELL, FP_CELL); g_Forward[ 3 ] = CreateMultiForward("ach_save_post", ET_CONTINUE, FP_CELL, FP_CELL); g_Forward[ 4 ] = CreateMultiForward("ach_menu_display", ET_CONTINUE, FP_CELL, FP_ARRAY); AchValue = nvault_open("Achievements"); if (AchValue == INVALID_HANDLE) set_fail_state( "Nie moge otworzyc pliku!"); } public plugin_natives() { register_library("achievements"); register_native("ach_get_index", "_ach_get_index"); register_native("ach_get_stance", "_ach_get_stance"); // pobiera czy ach zaliczony czy nie register_native("ach_get_status", "_ach_get_status"); // pobiera postep w achu register_native("ach_get_desc", "_ach_get_desc"); // pobiera do talibyc opis acha o konkretnym id register_native("ach_get_name", "_ach_get_name"); // pobiera do tablicy nazwe acha o konkretnym id register_native("ach_get_target", "_ach_get_target"); // pobiera wymagana ilosc do zakonczenia acha register_native("ach_get_max", "_ach_get_max"); // pobiera ilosc achievementow (ACH_NUM) register_native("ach_set_stance", "_ach_set_stance"); // ustawia czy gracz ukonczyl acha register_native("ach_set_status", "_ach_set_status"); // ustawia postep w achu register_native("ach_add", "_ach_add"); // tworzy nowy ach register_native("ach_reset_status", "_ach_reset_status"); // ustawia AchStatus[id][aid] na 0 register_native("ach_add_status", "_ach_add_status"); // dodaje postep w achu } public plugin_end() { nvault_close(AchValue); } public client_authorized(id) { AchStance[id]=ArrayCreate(1,1); AchStatus[id]=ArrayCreate(1,1); for(new i=0; i= ArrayGetCell(AchTarget, aid) && !ArrayGetCell(AchStance[pid], aid) && is_user_connected(pid)) { new name[33]; get_user_name(pid, name, 32); ArraySetCell(AchStance[pid], aid, 1); new iAchName[64]; ArrayGetString(AchName, aid, iAchName, 63); if(g_cvar_display) ColorChat(pid, YELLOW, "^x04%s ^x01Gratulacje ^x04%s^x01! Zdobyles osiagniecie ^x04^"%s^"^x01!", PREFIX, name, iAchName) new iRet; ExecuteForward(g_Forward[ 0 ], iRet, pid, aid); } } stock check_all_ach(pid) for(new i=0; i