Cześć wszystkim,
Ostatnio stworzyłem plugin VIP poprzez generator i przerabiam go na własne potrzeby. Mam problem jeszcze z zamykaniem się menu po 20s.
Ustawiłem
set_task(20.0, "zamknij_menu", id + TASK_CLOSE_MENU);
Gdzie trzeba ale menu się nie zamyka... Gdy kliknę "AWP" i menu otworzy się ponownie, bo "nie ma środków" albo limit awp jest przekroczony to od tego momentu menu po 20 sekundach automatycznie się zamknie.
Gdzie popełniam błąd? Jak to powinno wyglądać aby faktycznie za każdym razem menu zamykało się po 20 sekundach?
#include <amxmodx> #include <cstrike> #include <csx> #include <engine> #include <fun> #include <hamsandwich> #include <stripweapons> new bool:g_Vip[33], gRound=0, g_Hudmsg, maxPlayers, menu, menu_callback_handler, weapon_id; new bool:g_GameStarted; new menu_id[33]; #define TASK_CLOSE_MENU 1000 new p_awp_limit_0_5, p_awp_limit_6_10, p_awp_limit_11_16, p_awp_limit_17_23, p_awp_limit_24_inf; public plugin_init(){ register_plugin("VIP Ultimate", "12.3.0.3", "benio101 & speedkill"); RegisterHam(Ham_Spawn, "player", "SpawnedEventPre", 1); register_event("HLTV", "event_new_round", "a", "1=0", "2=0"); register_logevent("GameCommencing", 2, "1=Game_Commencing"); register_event("DeathMsg", "DeathMsg", "a"); register_message(get_user_msgid("ScoreAttrib"), "VipStatus"); register_message(get_user_msgid("SayText"),"handleSayText"); g_Hudmsg=CreateHudSyncObj(); register_logevent("RoundEnd", 2, "1=Round_End"); register_logevent("event_round_start", 2, "1=Round_Start"); p_awp_limit_0_5 = register_cvar("awp_limit_0_5", "0"); p_awp_limit_6_10 = register_cvar("awp_limit_6_10", "5"); p_awp_limit_11_16 = register_cvar("awp_limit_11_16", "5"); p_awp_limit_17_23 = register_cvar("awp_limit_17_23", "5"); p_awp_limit_24_inf = register_cvar("awp_limit_24_inf", "5"); } public plugin_cfg(){ maxPlayers = get_maxplayers(); } public client_putinserver(id){ set_task(1.0, "check_vip_flag", id); } public check_vip_flag(id){ if (get_user_flags(id) & ADMIN_LEVEL_H){ client_authorized_vip(id); } } public client_authorized_vip(id){ g_Vip[id]=true; new g_Name[64]; get_user_name(id,g_Name,charsmax(g_Name)); set_hudmessage(24, 190, 220, 0.25, 0.2, 0, 6.0, 6.0); ShowSyncHudMsg(0, g_Hudmsg, "V.I.P %s wbija na serwer!", g_Name); } public client_disconnected(id) { if(g_Vip[id]) { client_disconnect_vip(id); } remove_task(id + TASK_CLOSE_MENU); if(menu_id[id]) { menu_destroy(menu_id[id]); menu_id[id] = 0; } } public client_disconnect_vip(id){ g_Vip[id]=false; } public SpawnedEventPre(id){ if(g_Vip[id] && is_user_alive(id)){ SpawnedEventPreVip(id); } } public SpawnedEventPreVip(id){ cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM); give_item(id, "weapon_hegrenade"); cs_set_user_bpammo(id, CSW_FLASHBANG, 2); give_item(id, "weapon_flashbang"); StripWeapons(id, Secondary); give_item(id, "weapon_deagle"); give_item(id, "ammo_50ae"); weapon_id = find_ent_by_owner(-1, "weapon_deagle", id); if (weapon_id) cs_set_weapon_ammo(weapon_id, 7); cs_set_user_bpammo(id, CSW_DEAGLE, 35); show_vip_menu(id); if (gRound >= 3){ give_item(id, "weapon_smokegrenade"); } if (get_user_team(id) == 2){ give_item(id, "item_thighpack"); } } public event_new_round(){ ++gRound; } public GameCommencing(){ gRound = 0; g_GameStarted = false; } public event_round_start(){ if (!g_GameStarted) { g_GameStarted = true; gRound = 1; } else { gRound++; } } public DeathMsg(){ new killer = read_data(1); new victim = read_data(2); if(is_user_alive(killer) && g_Vip[killer] && get_user_team(killer) != get_user_team(victim)){ DeathMsgVip(killer, victim, read_data(3)); } } public DeathMsgVip(kid, vid, hs){ set_user_health(kid, min(get_user_health(kid) + (hs ? 10 : 5), 100)); cs_set_user_money(kid, cs_get_user_money(kid) + (hs ? 500 : 300)); } public RoundEnd(){ for(new i = 1; i <= maxPlayers; i++){ if(is_user_alive(i) && g_Vip[i]){ cs_set_user_money(i, cs_get_user_money(i) + 500); } } } public show_vip_menu(id){ if (!is_user_alive(id)) return; if (gRound < 3) return; set_task(20.0, "zamknij_menu", id + TASK_CLOSE_MENU); menu = menu_create("\rMenu VIPa", "menu_handler"); menu_callback_handler = menu_makecallback("menu_callback"); new bool:active = false, num = -1; menu_additem(menu, "\wAK47 + DEAGLE", "", 0, menu_callback_handler); if (menu_callback(id, menu, ++num) == ITEM_ENABLED) active = true; menu_additem(menu, "\wM4A1 + DEAGLE", "", 0, menu_callback_handler); if (menu_callback(id, menu, ++num) == ITEM_ENABLED) active = true; menu_additem(menu, "\d(\w2000\y$\d) \wAWP + DEAGLE", "", 0, menu_callback_handler); if (menu_callback(id, menu, ++num) == ITEM_ENABLED) active = true; menu_additem(menu, "\d(\w2000\y$\d) \wKROWA + DEAGLE", "", 0, menu_callback_handler); if (menu_callback(id, menu, ++num) == ITEM_ENABLED) active = true; menu_additem(menu, "\wFAMAS + DEAGLE", "", 0, menu_callback_handler); if (menu_callback(id, menu, ++num) == ITEM_ENABLED) active = true; menu_additem(menu, "\wSCOUT + DEAGLE", "", 0, menu_callback_handler); if (menu_callback(id, menu, ++num) == ITEM_ENABLED) active = true; if (active) { menu_setprop(menu, MPROP_EXITNAME, "Wyjście"); menu_setprop(menu, MPROP_TITLE, "\r[\yMENU broni V.I.P'a\r]^n\r[\y20 sekund na wybór\r]^n\r[\yNasze forum: \r]"); menu_setprop(menu, MPROP_NUMBER_COLOR, "\r"); menu_display(id, menu); menu_id[id] = menu; } else { menu_destroy(menu); } } public menu_callback(id, menu, item){ return ITEM_ENABLED; } public menu_handler(id, menu, item) { remove_task(id + TASK_CLOSE_MENU); if (!is_user_alive(id) || item == MENU_EXIT) { if (menu_id[id]) { menu_destroy(menu_id[id]); menu_id[id] = 0; } return PLUGIN_HANDLED; } if (gRound >= 3) { switch (item) { case 0: menu_1_handler(id); case 1: menu_2_handler(id); case 2: { new money = cs_get_user_money(id); if (money < 2000) { client_print(id, print_center, "Nie masz 2000$ na AWP!"); show_vip_menu(id); return PLUGIN_HANDLED; } if (!canBuyAWP(id)) { client_print(id, print_center, "Limit AWP w druzynie zostal osiagniety!"); show_vip_menu(id); return PLUGIN_HANDLED; } menu_3_handler(id); cs_set_user_money(id, money - 2000, 1); } case 3: { new money = cs_get_user_money(id); if (money < 2000) { client_print(id, print_center, "Nie masz 2000$ na KROWE!"); show_vip_menu(id); return PLUGIN_HANDLED; } menu_4_handler(id); cs_set_user_money(id, money - 2000, 1); } case 4: menu_5_handler(id); case 5: menu_6_handler(id); } } if (menu_id[id]) { menu_destroy(menu_id[id]); menu_id[id] = 0; } set_task(20.0, "zamknij_menu", id + TASK_CLOSE_MENU); return PLUGIN_HANDLED; } public zamknij_menu(taskid) { new id = taskid - TASK_CLOSE_MENU; if (!is_user_connected(id)) return; if (menu_id[id]) { show_menu(id, 0, "^n", 1); menu_destroy(menu_id[id]); menu_id[id] = 0; client_print(id, print_center, "Menu VIP wygasło po 20 sekundach!"); } } public menu_2_handler(id){ StripWeapons(id, Primary); give_item(id, "weapon_m4a1"); give_item(id, "ammo_556nato"); set_weapon_ammo(id, "weapon_m4a1", 30, CSW_M4A1, 90); } public menu_1_handler(id){ StripWeapons(id, Primary); give_item(id, "weapon_ak47"); give_item(id, "ammo_762nato"); set_weapon_ammo(id, "weapon_ak47", 30, CSW_AK47, 90); } public menu_3_handler(id){ StripWeapons(id, Primary); give_item(id, "weapon_awp"); give_item(id, "ammo_338magnum"); set_weapon_ammo(id, "weapon_awp", 10, CSW_AWP, 30); } public menu_5_handler(id){ StripWeapons(id, Primary); give_item(id, "weapon_famas"); give_item(id, "ammo_556nato"); set_weapon_ammo(id, "weapon_famas", 25, CSW_FAMAS, 90); } public menu_4_handler(id){ StripWeapons(id, Primary); give_item(id, "weapon_m249"); give_item(id, "ammo_556natobox"); set_weapon_ammo(id, "weapon_m249", 100, CSW_M249, 200); } public menu_6_handler(id){ StripWeapons(id, Primary); give_item(id, "weapon_scout"); give_item(id, "ammo_762nato"); set_weapon_ammo(id, "weapon_scout", 10, CSW_SCOUT, 90); } stock set_weapon_ammo(id, const weapon[], clip, csw, bpammo){ weapon_id = find_ent_by_owner(-1, weapon, id); if(weapon_id) cs_set_weapon_ammo(weapon_id, clip); cs_set_user_bpammo(id, csw, bpammo); } public bool:canBuyAWP(const id){ new players[32], num; get_players(players, num, "a"); new team = get_user_team(id); new awpCount = 0; for(new i = 0; i < num; i++){ new pid = players[i]; if(get_user_team(pid) == team && user_has_weapon(pid, CSW_AWP)){ awpCount++; } } new limit = getDynamicAWPLimit(); return (awpCount < limit); } public getDynamicAWPLimit(){ new players[32], num; get_players(players, num, "h"); if(num <= 5) return get_pcvar_num(p_awp_limit_0_5); else if(num <= 10) return get_pcvar_num(p_awp_limit_6_10); else if(num <= 16) return get_pcvar_num(p_awp_limit_11_16); else if(num <= 23) return get_pcvar_num(p_awp_limit_17_23); else if(num > 23) return get_pcvar_num(p_awp_limit_24_inf); return 0; } public VipStatus(){ new id = get_msg_arg_int(1); if(is_user_alive(id) && g_Vip[id]){ set_msg_arg_int(2, ARG_BYTE, get_msg_arg_int(2) | 4); } } public bomb_planted(id){ if(is_user_alive(id) && g_Vip[id]){ cs_set_user_money(id, cs_get_user_money(id) + 250); } } public bomb_defused(id){ if(is_user_alive(id) && g_Vip[id]){ cs_set_user_money(id, cs_get_user_money(id) + 250); } } public handleSayText(msgId,msgDest,msgEnt){ new id = get_msg_arg_int(1); if(is_user_connected(id) && g_Vip[id]){ new szTmp[256],szTmp2[256]; get_msg_arg_string(2,szTmp, charsmax(szTmp)) new szPrefix[64] = "^x04[V.I.P]"; if(!equal(szTmp,"#Cstrike_Chat_All")){ add(szTmp2,charsmax(szTmp2),szPrefix); add(szTmp2,charsmax(szTmp2)," "); add(szTmp2,charsmax(szTmp2),szTmp); } else{ add(szTmp2,charsmax(szTmp2),szPrefix); add(szTmp2,charsmax(szTmp2),"^x03 %s1^x01 : %s2"); } set_msg_arg_string(2,szTmp2); } return PLUGIN_CONTINUE; }