RSSy MYGO.pl Opublikowano Luty 25, 2021 o 19:08 RSSy Udostępnij Opublikowano Luty 25, 2021 o 19:08 Hi! Someone can edit this plugin? I want to add 3 more abilities to this plugin. This is the source: Code: #include <amxmodx> #include <amxmisc> #include <fakemeta_util> #include <hamsandwich> #include <fun> #include <WPMGPrintChatColor> #define PLUGIN "Нация Ножей" #define VERSION "0.8.1" #define AUTHOR "Psycrow" #define is_entity_player(%1) (1<=%1<=g_maxPlayers) #define PRESENT_CLASSNAME "next21_gift" #define pev_lifes pev_euser1 #define MODEL_PRESENT "models/next21_knife_v2/presents/presents.mdl" #define MODEL_SKINS 3 #define MODEL_SUBMODELS 5 #define MAX_MONEY 20000 // Максимальное кол-во денег у игрока #if cellbits == 32 #define OFFSET_CSMONEY 115 #else #define OFFSET_CSMONEY 140 #endif new g_msgMoney, g_infoTarget, g_maxPlayers, g_menuId = -1, bool: g_registration, g_totalGifts, //Кол-во загруженных подарков на карте g_get_round_times[33], //Сколько раз игрок поднял подарков за раунд g_get_game_times[33], //Сколько раз игрок поднял подарков за игру g_disconnections, //Сколько игроков покинуло сервер bool: g_have_speed[33], //Имеет ли игрок добавленную скорость bool: g_have_gravity[33], //Имеет ли игрок добавленную гравитацию bool: g_have_sw[33], //Имеет ли игрок заглушенные шаги bool: g_save_cpl, //Изменения в расположении подарков Float: g_massage_rate[33], //Ограничение оповещений о попытке собрать подарок ограниченному игроку Array:g_gift_id, //Индексы подарков Array:g_gift_x, Array:g_gift_y, Array:g_gift_z, Array:g_plr_steamid, Array:g_plr_times public plugin_precache() { precache_model(MODEL_PRESENT) } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_cvar("cv_gift_access","l") // Флаг доступа к меню register_cvar("cv_gift_money_min","500") // Минимальная награда за собрынный подарок register_cvar("cv_gift_money_max","8000") // Максимальная награда за собрынный подарок register_cvar("cv_gift_silent_walk","0") // Добавить ли в подарки бесшумный бег register_cvar("cv_gift_gravitation","0.5") // Значение гравитации. 0.0 - убрать такой вид подарка register_cvar("cv_gift_speed","300.0") // Значение скорости. 0.0 - убрать такой вид подарка register_cvar("cv_gift_HE","2") // Сколько HE гранат можно получить в подарках. 0 - убрать такой вид подарка register_cvar("cv_gift_health","35") // Сколько HP можно получить в подарках. 0 - убрать такой вид подарка register_cvar("cv_gift_timerate","500.0") // Сколько секунд до появление подарка register_cvar("cv_gift_get_times_round","0") // Сколько максимум можно собрать подарков за раундов. 0 - снимает ограничение register_cvar("cv_gift_get_times_game","0") // Сколько максимум можно собрать подарков за игру (карту). 0 - снимает ограничение register_cvar("cv_gift_lifes","0") // Сколько раз может появиться подарок в одном и том же месте (0 - неограниченно, 1 - после сбора больше не появляеться...) register_clcmd("say /gift", "gift_menu") register_clcmd("say_team /gift", "gift_menu" ) register_clcmd("say /gifts", "gift_menu" ) register_clcmd("say_team /gifts", "gift_menu" ) g_infoTarget = engfunc(EngFunc_AllocString, "info_target") } public plugin_cfg() { new map[32] get_mapname(map, charsmax(map)) formatex(map, charsmax(map),"%s.ini",map) new cfgDir[64], iDir, iFile[128] get_configsdir(cfgDir, charsmax(cfgDir)) formatex(cfgDir, charsmax(cfgDir), "%s/next21_gifts", cfgDir) iDir = open_dir(cfgDir, iFile, charsmax(iFile)) if(iDir) { while(next_file(iDir, iFile, charsmax(iFile))) { if (iFile[0] == '.') continue if(equal(map, iFile)) { format(iFile, 128, "%s/%s", cfgDir, iFile) get_gifts(iFile) break } } } else server_print("[%s] Gifts was not loaded", PLUGIN) } public client_putinserver(id) { if(!g_registration) return if(get_cvar_num("cv_gift_get_times_game")) { new steamId[32], arraySteamId[32] get_user_authid(id, steamId, 31) for(new i = 0; i < g_disconnections; i++) { ArrayGetString(g_plr_steamid, i, arraySteamId, 31) if(equal(steamId, arraySteamId)) { g_get_game_times[id] = ArrayGetCell(g_plr_times, i) return } } g_get_game_times[id] = 0 } } public client_disconnect(id) { if(!g_registration) return if(get_cvar_num("cv_gift_get_times_game")) { new steamId[32], arraySteamId[32] get_user_authid(id, steamId, 31) for(new i = 0; i < g_disconnections; i++) { ArrayGetString(g_plr_steamid, i, arraySteamId, 31) if(equal(steamId, arraySteamId)) { ArraySetCell(g_plr_times, i, g_get_game_times[id]) return } } ArrayPushString(g_plr_steamid, steamId) ArrayPushCell(g_plr_times, g_get_game_times[id]) g_disconnections++ } } public fw_PlayerSpawn(id) { if(!is_user_alive(id)) return; if(g_have_gravity[id]) { set_user_gravity(id) g_have_gravity[id] = false } if(g_have_sw[id]) { set_user_footsteps(id, 0) g_have_sw[id] = false } g_have_speed[id] = false } public CurWeapon(id) { if(g_have_speed[id]) set_user_maxspeed(id, get_cvar_float("cv_gift_speed")) } public fw_RoundStart() { for(new i = 1; i <= g_maxPlayers; i++) g_get_round_times[i] = 0 new lifes = get_cvar_num("cv_gift_lifes") if(lifes) { new ent while((ent = fm_find_ent_by_class(ent, PRESENT_CLASSNAME))) set_pev(ent, pev_lifes, lifes) } } public fw_TouchGift(ent, id) { if(!is_entity_player(id)) return if(g_massage_rate[id] > get_gametime() || !is_user_alive(id) || !pev_valid(ent)) return static className[32] pev(ent, pev_classname, className, 31) if(!equal(className, PRESENT_CLASSNAME)) return new times = get_cvar_num("cv_gift_get_times_round") if(times && g_get_round_times[id] >= times) { PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы привысили лимит сбора подарков за раунд", PLUGIN) g_massage_rate[id] = get_gametime() + 3.0 return } times = get_cvar_num("cv_gift_get_times_game") if(times && g_get_game_times[id] >= times) { PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы привысили лимит сбора подарков за игру", PLUGIN) g_massage_rate[id] = get_gametime() + 3.0 return } engfunc(EngFunc_SetModel, ent, MODEL_PRESENT) set_pev(ent, pev_skin, random_num(0, MODEL_SKINS - 1)) set_pev(ent, pev_body, random_num(0, MODEL_SUBMODELS - 1)) hide_gift(ent) give_gift(id) if(get_cvar_num("cv_gift_get_times_game")) g_get_game_times[id]++ if(get_cvar_num("cv_gift_get_times_round")) g_get_round_times[id]++ if(get_cvar_num("cv_gift_lifes")) set_pev(ent, pev_lifes, pev(ent, pev_lifes) - 1) } public set_gift() { if(!g_totalGifts) return new valid_gifts_count = 0 new ent, lifes_active = get_cvar_num("cv_gift_lifes") while((ent = fm_find_ent_by_class(ent, PRESENT_CLASSNAME))) { if(pev(ent, pev_solid) != SOLID_NOT || (lifes_active && !pev(ent, pev_lifes))) valid_gifts_count++ } if(valid_gifts_count == g_totalGifts) return new bool: check = false, id while(check == false) { id = random_num(0, g_totalGifts - 1) ent = ArrayGetCell(g_gift_id ,id) if(pev(ent, pev_solid) == SOLID_NOT && (!lifes_active || pev(ent, pev_lifes))) { set_pev(ent, pev_solid, SOLID_TRIGGER) unhide_gift(ent) check = true } } } public gift_menu(id) { if(!is_user_access(id)) { PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tУ вас нет прав на эту функцию", PLUGIN) return } new menu_name[90] format(menu_name, 89, "\rРасстановка подарков^n\dТекущий подарок: %d", g_totalGifts + 1) g_menuId = menu_create(menu_name, "menu_handler") menu_additem(g_menuId, "\wУстановить Подарок", "1", 0) if(!g_totalGifts) { menu_additem(g_menuId, "\dУдалить предыдущий Подарок", "2", 0) menu_additem(g_menuId, "\dУдалить все Подарки", "3", 0) } else { menu_additem(g_menuId, "\wУдалить предыдущий Подарок", "2", 0) menu_additem(g_menuId, "\wУдалить все Подарки", "3", 0) } if(!g_save_cpl) menu_additem(g_menuId, "\dСохранить изменения", "4", 0) else menu_additem(g_menuId, "\wСохранить изменения", "4", 0) menu_setprop(g_menuId, MPROP_EXIT, MEXIT_ALL) menu_setprop(g_menuId, MPROP_EXITNAME, "\yВыход") menu_display(id, g_menuId, 0) new keys get_user_menu(id, g_menuId, keys) for(new i = 0; i < g_totalGifts; i++) unhide_gift(ArrayGetCell(g_gift_id, i)) } public menu_handler(id, menu, item) { if(item == MENU_EXIT) { new ent for(new i = 0; i < g_totalGifts; i++) { ent = ArrayGetCell(g_gift_id, i) if(pev(ent, pev_solid) == SOLID_NOT) hide_gift(ent) } menu_destroy(menu) return PLUGIN_HANDLED } switch(item) { case 0: { new Float:fOrigin[3] fm_get_aim_origin(id, fOrigin) if(create_gift(fOrigin)) g_save_cpl = true menu_destroy(menu) gift_menu(id) } case 1: { if(!g_totalGifts) { PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tНа карте нет Подарков", PLUGIN) menu_destroy(menu) gift_menu(id) return PLUGIN_HANDLED } g_save_cpl = true PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tПодарок удален", PLUGIN) g_totalGifts-- engfunc(EngFunc_RemoveEntity, ArrayGetCell(g_gift_id, g_totalGifts)) ArrayDeleteItem(g_gift_id, g_totalGifts) ArrayDeleteItem(g_gift_x, g_totalGifts) ArrayDeleteItem(g_gift_y, g_totalGifts) ArrayDeleteItem(g_gift_z, g_totalGifts) menu_destroy(menu) gift_menu(id) } case 2: { if(!g_totalGifts) { PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tНа карте нет Подарков", PLUGIN) menu_destroy(menu) gift_menu(id) return PLUGIN_HANDLED } g_save_cpl = true PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tБыло удалено !g%d !tПодарков", PLUGIN, g_totalGifts) new ent while((ent = fm_find_ent_by_class(ent, PRESENT_CLASSNAME))) engfunc(EngFunc_RemoveEntity, ent) g_totalGifts = 0 ArrayClear(g_gift_id) ArrayClear(g_gift_x) ArrayClear(g_gift_y) ArrayClear(g_gift_z) menu_destroy(menu) gift_menu(id) } case 3: { if(!g_save_cpl) { menu_destroy(menu) gift_menu(id) return PLUGIN_HANDLED } g_save_cpl = false PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !t%s", PLUGIN, save_gifts() ? "Сохранено" : "Не сохранено") menu_destroy(menu) gift_menu(id) } } return PLUGIN_HANDLED } bool: save_gifts() { new map[32] get_mapname(map, charsmax(map)) formatex(map, charsmax(map), "%s.ini", map) new cfgDir[64], iFile[128] get_configsdir(cfgDir, charsmax(cfgDir)) formatex(cfgDir, charsmax(cfgDir), "%s/next21_gifts", cfgDir) formatex(iFile, charsmax(iFile), "%s/%s", cfgDir, map) if(!dir_exists(cfgDir)) if(!mkdir(cfgDir)) return false delete_file(iFile) if(!g_totalGifts) return true for(new i = 0; i < g_totalGifts; i++) { new text[128], Float:fOrigin[3], ent = ArrayGetCell(g_gift_id, i) pev(ent, pev_origin, fOrigin) format(text, charsmax(text),"^"%f^" ^"%f^" ^"%f^"",fOrigin[0], fOrigin[1], fOrigin[2]) write_file(iFile, text, i) } return true } get_gifts(const iFile[128]) { new file = fopen(iFile, "rt") if(!file) { server_print("[%s] Gifts was not loaded", PLUGIN) return } while(file && !feof(file)) { new sfLineData[512] fgets(file, sfLineData, charsmax(sfLineData)) if(sfLineData[0] == ';') continue if(equal(sfLineData, "")) continue new origins[3][32], Float: fOrigin[3] parse(sfLineData, origins[0], 31, origins[1], 31, origins[2], 31) fOrigin[0] = str_to_float(origins[0]) fOrigin[1] = str_to_float(origins[1]) fOrigin[2] = str_to_float(origins[2]) create_gift(fOrigin) } fclose(file) if(!g_totalGifts) server_print("[%s] Gifts was not loaded", PLUGIN) else if(g_totalGifts == 1) server_print("[%s] Loaded one gift", PLUGIN) else server_print("[%s] Loaded %d gifts", PLUGIN, g_totalGifts) } bool: create_gift(const Float: fOrigin[3]) { new ent = engfunc(EngFunc_CreateNamedEntity, g_infoTarget) if(!pev_valid(ent)) return false if(!g_registration) { register_event("CurWeapon", "CurWeapon", "be","1=1") register_event("HLTV", "fw_RoundStart", "a", "1=0", "2=0") RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1) RegisterHamFromEntity(Ham_Touch, ent, "fw_TouchGift") set_task(get_cvar_float("cv_gift_timerate"), "set_gift", _, _, _, "b") g_gift_id = ArrayCreate() g_gift_x = ArrayCreate() g_gift_y = ArrayCreate() g_gift_z = ArrayCreate() if(get_cvar_num("cv_gift_get_times_game")) { g_plr_steamid = ArrayCreate(32) g_plr_times = ArrayCreate(32) } g_maxPlayers = get_maxplayers() g_msgMoney = get_user_msgid("Money") g_registration = true fw_RoundStart() } ArrayPushCell(g_gift_id, ent) ArrayPushCell(g_gift_x, fOrigin[0]) ArrayPushCell(g_gift_y, fOrigin[1]) ArrayPushCell(g_gift_z, fOrigin[2]) engfunc(EngFunc_SetModel, ent, MODEL_PRESENT) set_pev(ent, pev_origin, fOrigin) set_pev(ent, pev_solid, SOLID_NOT) set_pev(ent, pev_movetype, MOVETYPE_FLY) set_pev(ent, pev_gravity, 1.0) set_pev(ent, pev_classname, PRESENT_CLASSNAME) set_pev(ent, pev_skin, random_num(0, MODEL_SKINS - 1)) set_pev(ent, pev_body, random_num(0, MODEL_SUBMODELS - 1)) engfunc(EngFunc_SetSize, ent, Float:{-15.0, -15.0, 0.0}, Float:{15.0, 15.0, 30.0}) hide_gift(ent) g_totalGifts++ return true } hide_gift(ent) { set_pev(ent, pev_solid, SOLID_NOT) for(new i = 1; i <= g_maxPlayers; i++) { new mid, keys get_user_menu(i, mid, keys) if(mid == g_menuId) { fm_set_rendering(ent, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 150) return } } fm_set_rendering(ent, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0) } unhide_gift(ent) { if(pev(ent, pev_solid) == SOLID_NOT) fm_set_rendering(ent, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 150) else fm_set_rendering(ent, kRenderFxGlowShell, random_num(0,255), random_num(0,255), random_num(0,255), kRenderNormal, 15) } give_gift(id) //Выдает случайный бонус с подарка. Добавьте case, если хотите доавить свой. { static loopDestroy loopDestroy++ if(loopDestroy > 20) { PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tПодарок оказался пустым", PLUGIN) loopDestroy = 0 return } new max_random_gift = 6//Сколько видов бонусов в подарках switch(random_num(1, max_random_gift)) { case 1: { new reward = random_num(get_cvar_num("cv_gift_money_min"), get_cvar_num("cv_gift_money_max")) new curr_money = get_pdata_int(id, OFFSET_CSMONEY) if(curr_money + reward > MAX_MONEY) reward = MAX_MONEY - curr_money if(reward) { set_pdata_int(id, OFFSET_CSMONEY, curr_money + reward) message_begin(MSG_ONE, g_msgMoney, _, id) write_long(curr_money + reward) write_byte(1) message_end() PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы получаете !g%d$", PLUGIN, reward) loopDestroy = 0 } else give_gift(id) } case 2: { if(!g_have_sw[id] && !get_user_footsteps(id) && get_cvar_num("cv_gift_silent_walk")) { g_have_sw[id] = true set_user_footsteps(id) PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы получаете !gбесшумный бег", PLUGIN) loopDestroy = 0 } else give_gift(id) } case 3: { new Float: gravity = get_cvar_float("cv_gift_gravitation") if(!g_have_gravity[id] && get_user_gravity(id) > gravity && gravity) { g_have_gravity[id] = true set_user_gravity(id, gravity) PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы получаете !gгравитацию", PLUGIN) loopDestroy = 0 } else give_gift(id) } case 4: { new Float: speed = get_cvar_float("cv_gift_speed") if(!g_have_speed[id] && get_user_maxspeed(id) < speed && speed) { g_have_speed[id] = true set_user_maxspeed(id, speed) PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы получаете !gскорость", PLUGIN) loopDestroy = 0 } else give_gift(id) } case 5: { new hes = get_cvar_num("cv_gift_HE") if(hes) { if(!user_has_weapon(id, CSW_HEGRENADE)) { fm_give_item(id, "weapon_hegrenade") cs_set_user_bpammo(id, CSW_HEGRENADE, hes) } else cs_set_user_bpammo(id, CSW_HEGRENADE, cs_get_user_bpammo(id, CSW_HEGRENADE) + hes) PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы получаете !gкомплект гранат (%d HE)", PLUGIN, hes) loopDestroy = 0 } else give_gift(id) } case 6: { new hp = get_cvar_num("cv_gift_health") if(hp) { fm_set_user_health(id, pev(id, pev_health) + hp) PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tВы получаете !gздоровье (%d hp)", PLUGIN, hp) loopDestroy = 0 } else give_gift(id) } //case 7: тут по примерам выше } } bool: is_user_access(id) { new flag_access[24] get_cvar_string("cv_gift_access", flag_access, charsmax(flag_access)) new flags = get_user_flags(id) if(contain(flag_access, "a") > -1 && (flags & ADMIN_IMMUNITY)) return true if(contain(flag_access, "b") > -1 && (flags & ADMIN_RESERVATION)) return true if(contain(flag_access, "c") > -1 && (flags & ADMIN_KICK)) return true if(contain(flag_access, "d") > -1 && (flags & ADMIN_BAN)) return true if(contain(flag_access, "e") > -1 && (flags & ADMIN_SLAY)) return true if(contain(flag_access, "f") > -1 && (flags & ADMIN_MAP)) return true if(contain(flag_access, "g") > -1 && (flags & ADMIN_CVAR)) return true if(contain(flag_access, "h") > -1 && (flags & ADMIN_CFG)) return true if(contain(flag_access, "i") > -1 && (flags & ADMIN_CHAT)) return true if(contain(flag_access, "j") > -1 && (flags & ADMIN_VOTE)) return true if(contain(flag_access, "k") > -1 && (flags & ADMIN_PASSWORD)) return true if(contain(flag_access, "l") > -1 && (flags & ADMIN_RCON)) return true if(contain(flag_access, "m") > -1 && (flags & ADMIN_LEVEL_A)) return true if(contain(flag_access, "n") > -1 && (flags & ADMIN_LEVEL_B)) return true if(contain(flag_access, "o") > -1 && (flags & ADMIN_LEVEL_C)) return true if(contain(flag_access, "p") > -1 && (flags & ADMIN_LEVEL_D)) return true if(contain(flag_access, "q") > -1 && (flags & ADMIN_LEVEL_E)) return true if(contain(flag_access, "r") > -1 && (flags & ADMIN_LEVEL_F)) return true if(contain(flag_access, "s") > -1 && (flags & ADMIN_LEVEL_G)) return true if(contain(flag_access, "t") > -1 && (flags & ADMIN_LEVEL_H)) return true if(contain(flag_access, "u") > -1 && (flags & ADMIN_MENU)) return true if(contain(flag_access, "y") > -1 && (flags & ADMIN_ADMIN)) return true if(contain(flag_access, "z") > -1 && (flags & ADMIN_USER)) return true return false } I want to add: 1. invisible with knife in hand after 3 seconds 2. infinite ammo 3. revive after death (one time) Przeczytaj cały wpis Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi