Vip dla Zaawansowanych
bula1100
04.03.2013
Bardzo proszę tych bardziej zaawansowancyh o pomoc Wystawiam Reputki
Plik SMA
#include <amxmodx> #include <colorchat> #include <cstrike> #include <engine> #include <fakemeta> #include <fun> #include <hamsandwich> #define DMG_HE (1<<24) #define IsPlayer(%1) (1<=%1<=maxPlayers) forward amxbans_admin_connect(id); new Array:g_Array, CsArmorType:armortype, bool:g_Vip[33], gRound=0, g_Hudmsg, ioid, maxPlayers, menu, menu_callback_handler, weapon_id; new const g_Langcmd[][]={"say /vips","say_team /vips","say /vipy","say_team /vipy"}; public plugin_init(){ register_plugin("VIP Ultimate", "10.0.0.2", "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"); RegisterHam(Ham_TakeDamage, "player", "takeDamage", 0); register_event("DeathMsg", "DeathMsg", "a"); g_Array=ArrayCreate(64,32); for(new i;i<sizeof g_Langcmd;i++){ register_clcmd(g_Langcmd[i], "ShowVips"); } register_clcmd("say /vip", "ShowMotd"); g_Hudmsg=CreateHudSyncObj(); register_event("Damage", "damage", "b", "2!0", "3=0", "4!0"); register_message(get_user_msgid("SayText"),"handleSayText"); } public client_authorized(id){ if(get_user_flags(id) & 524288 == 524288){ 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)); new g_Size = ArraySize(g_Array); new szName[64]; for(new i = 0; i < g_Size; i++){ ArrayGetString(g_Array, i, szName, charsmax(szName)); if(equal(g_Name, szName)){ return 0; } } ArrayPushString(g_Array,g_Name); set_hudmessage(24, 190, 220, 0.25, 0.2, 0, 6.0, 6.0); ShowSyncHudMsg(0, g_Hudmsg, "Vip %s wbija na serwer !",g_Name); return PLUGIN_CONTINUE; } public client_disconnect(id){ if(g_Vip[id]){ client_disconnect_vip(id); } } public client_disconnect_vip(id){ g_Vip[id]=false; new Name[64]; get_user_name(id,Name,charsmax(Name)); new g_Size = ArraySize(g_Array); new g_Name[64]; for(new i = 0; i < g_Size; i++){ ArrayGetString(g_Array, i, g_Name, charsmax(g_Name)); if(equal(g_Name,Name)){ ArrayDeleteItem(g_Array,i); break; } } } public SpawnedEventPre(id){ if(g_Vip[id]){ if(is_user_alive(id)){ SpawnedEventPreVip(id); } } } public SpawnedEventPreVip(id){ cs_set_user_armor(id, min(cs_get_user_armor(id,armortype)+100, 300), armortype); show_vip_menu(id); if(gRound>=5){ cs_set_user_money(id, min(cs_get_user_money(id)+1000, 16000), 1); } if(get_user_team(id)==2){ give_item(id, "item_thighpack"); } } public event_new_round(){ ++gRound; } public GameCommencing(){ gRound=0; } public plugin_cfg(){ maxPlayers=get_maxplayers(); } public takeDamage(this, idinflictor, idattacker, Float:damage, damagebits){ if(((IsPlayer(idattacker) && is_user_connected(idattacker) && g_Vip[idattacker] && (ioid=idattacker)) || (ioid=pev(idinflictor, pev_owner) && IsPlayer(ioid) && is_user_connected(ioid) && g_Vip[ioid]))){ if(damagebits & DMG_HE){ damage*=(100+15)/100; } } } 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?40:20),100)); cs_set_user_money(kid, cs_get_user_money(kid)+(hs?800:500)); } public show_vip_menu(id){ menu=menu_create("\rMenu VIPa","menu_handler"); menu_callback_handler=menu_makecallback("menu_callback"); new bool:active=false, num=-1; menu_additem(menu,"\wDeagle + AWP ( Granaty )","",0,menu_callback_handler); if(menu_callback(id, menu, ++num)==ITEM_ENABLED){ active=true; } menu_additem(menu,"\wDeagle + AK47 ( Granaty )","",0,menu_callback_handler); if(menu_callback(id, menu, ++num)==ITEM_ENABLED){ active=true; } menu_additem(menu,"\wDeagle + M4A1 ( Granaty )","",0,menu_callback_handler); if(menu_callback(id, menu, ++num)==ITEM_ENABLED){ active=true; } if(active){ menu_setprop(menu,MPROP_EXITNAME,"Wyjscie"); menu_setprop(menu,MPROP_TITLE,"\yMenu Vipa"); menu_setprop(menu,MPROP_NUMBER_COLOR,"\r"); menu_display(id, menu); } else { menu_destroy(menu); } } public menu_callback(id, menu, item){ if(gRound>=5){ if(is_user_alive(id)){ if(item==0){ return ITEM_ENABLED; } if(item==1){ return ITEM_ENABLED; } if(item==2){ return ITEM_ENABLED; } } } return ITEM_DISABLED; } public menu_handler(id, menu, item){ if(gRound>=5){ if(is_user_alive(id)){ if(item==0){ 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); give_item(id, "weapon_awp"); give_item(id, "ammo_338magnum"); weapon_id=find_ent_by_owner(-1, "weapon_awp", id); if(weapon_id)cs_set_weapon_ammo(weapon_id, 10); cs_set_user_bpammo(id, CSW_AWP, 30); give_item(id, "weapon_hegrenade"); give_item(id, "weapon_flashbang"); give_item(id, "weapon_flashbang"); give_item(id, "weapon_smokegrenade"); } if(item==1){ 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); give_item(id, "weapon_ak47"); give_item(id, "ammo_762nato"); weapon_id=find_ent_by_owner(-1, "weapon_ak47", id); if(weapon_id)cs_set_weapon_ammo(weapon_id, 30); cs_set_user_bpammo(id, CSW_AK47, 90); give_item(id, "weapon_hegrenade"); give_item(id, "weapon_flashbang"); give_item(id, "weapon_flashbang"); give_item(id, "weapon_smokegrenade"); } if(item==2){ 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); give_item(id, "weapon_m4a1"); give_item(id, "ammo_556nato"); weapon_id=find_ent_by_owner(-1, "weapon_m4a1", id); if(weapon_id)cs_set_weapon_ammo(weapon_id, 30); cs_set_user_bpammo(id, CSW_M4A1, 90); give_item(id, "weapon_hegrenade"); give_item(id, "weapon_flashbang"); give_item(id, "weapon_flashbang"); give_item(id, "weapon_smokegrenade"); } } } menu_destroy(menu); return PLUGIN_HANDLED; } public ShowVips(id){ new g_Name[64],g_Message[192]; new g_Size=ArraySize(g_Array); for(new i = 0; i < g_Size; i++){ ArrayGetString(g_Array, i, g_Name, charsmax(g_Name)); add(g_Message, charsmax(g_Message), g_Name); if(i == g_Size - 1){ add(g_Message, charsmax(g_Message), "."); } else{ add(g_Message, charsmax(g_Message), ", "); } } ColorChat(id,GREEN,"^x03Vipy ^x04na ^x03serwerze: ^x04%s", g_Message); return PLUGIN_CONTINUE; } public client_infochanged(id){ if(g_Vip[id]){ new szName[64]; get_user_info(id,"name",szName,charsmax(szName)); new Name[64]; get_user_name(id,Name,charsmax(Name)); if(!equal(szName,Name)){ ArrayPushString(g_Array,szName); new g_Size=ArraySize(g_Array); new g_Name[64]; for(new i = 0; i < g_Size; i++){ ArrayGetString(g_Array, i, g_Name, charsmax(g_Name)); if(equal(g_Name,Name)){ ArrayDeleteItem(g_Array,i); break; } } } } } public plugin_end(){ ArrayDestroy(g_Array); } public ShowMotd(id){ show_motd(id, "vip.txt", "Informacje o vipie"); } public damage(id){ new attacker=get_user_attacker(id); new damage=read_data(2); if(g_Vip[id]){ set_hudmessage(255, 0, 0, 0.45, 0.50, 2, 0.1, 4.0, 0.1, 0.1, -1); ShowSyncHudMsg(id, g_Hudmsg, "%i^n", damage); } if(is_user_connected(attacker) && g_Vip[attacker]){ set_hudmessage(0, 100, 200, -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1); ShowSyncHudMsg(attacker, g_Hudmsg, "%i^n", damage); } } 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[VIP]"; 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; } public amxbans_admin_connect(id){ client_authorized(id); }
Co Vip Aktualnie Posiada :
1. 500$ za Killa i 800$ za HS
2. 20HP za Killa i 40HP za HS
3. Free Defusal Kit
4. Specjalne przywitanie przy wejsciu na serwer
5. Zwiększenie o 15% obrażeń z HE
6. Free Armor + Helm
7. Free 1k$ od 5 rundy
8. Od 5 rundy 3 zestawy broni
* Deagle + AWP ( Granaty )
* Deagle + Ak47 ( Granaty )
* Deagle + M4A1 ( Granaty )
proszę o zmiany :
1. Menu broni oraz 1k$ dodstajemy od 5 rundy aczkolwiek uwzglednia w tym rozgrzewke w ktorej wlasciwie liczba rund jest losowa ( kinfe rozgrzewka 60 sekund ) bo zalezy od tego ile rund zdazymy rozegrac.
Chcialbym aby Menu broni i 1k$ bylo od 3 rundy nie uwzgledniajac rozgrzewki
2. Aby wyjśc z Menu VIpa trzeba nacisnac 0, a chcialbym zeby samo wygasalo po 20 sekundach
3. Tutaj juz bardziej zaawansowane Chcialbym Inne Funkcje Dla inncyh Map
- Aktualny VIP dzialajacy na kazdej mapie z wylaczeniem tych co wymienie nizej
- Na mapach :
Wszystkie funkcje zawarte w VIpe lecz w Menu Broni tylko i wylacznie
- Deagle + Ak47
- Deagle + M4A1
aim_map
Wszystkie funkcje zawarte w VIpe lecz w Menu Broni tylko i wylacznie
- Deagle + Ak47
- Deagle + M4A1
- Deagle + AWP
aim_map_usp
Wszystkie funkcje zawarte w VIpe lecz w Menu Broni tylko i wylacznie
- Deagle
- USP
- Glock
- Dual
awp_india + aim_awp + awp+map
Wszystkie funkcje zawarte w VIpe lecz w Menu Broni tylko i wylacznie
- Deagle + AWP
- Deagle + Scout
Użytkownik bula1100 edytował ten post 04.03.2013 00:31
O'Zone
04.03.2013
To nie jest duży problem, wystarczy dodać zerowanie liczby rund przy restarcie w vipie lub ewentualnie w samym pluginie rozgrzewki wyłączanie vipa na czas jej trwania.1. Menu broni oraz 1k$ dodstajemy od 5 rundy aczkolwiek uwzglednia w tym rozgrzewke w ktorej wlasciwie liczba rund jest losowa ( kinfe rozgrzewka 60 sekund ) bo zalezy od tego ile rund zdazymy rozegrac.
Chcialbym aby Menu broni i 1k$ bylo od 3 rundy nie uwzgledniajac rozgrzewki
Hmm.. set_task w połączeniu z menu_destroy.2. Aby wyjśc z Menu VIpa trzeba nacisnac 0, a chcialbym zeby samo wygasalo po 20 sekundach
Tutaj to ostro namieszałeś, ale też da się zrobić. Trzeba zastosować sprawdzanie mapy i dla każdej wywoływać wybrane menu lub wybrane funkcje z menu (kwestia upodobania ).3. Tutaj juz bardziej zaawansowane Chcialbym Inne Funkcje Dla inncyh Map
Aktualny VIP dzialajacy na kazdej mapie z wylaczeniem tych co wymienie nizej
Na mapach :
aim_map2
Wszystkie funkcje zawarte w VIpe lecz w Menu Broni tylko i wylacznie
- Deagle + Ak47
- Deagle + M4A1
aim_map
Wszystkie funkcje zawarte w VIpe lecz w Menu Broni tylko i wylacznie
- Deagle + Ak47
- Deagle + M4A1
- Deagle + AWP
aim_map_usp
Wszystkie funkcje zawarte w VIpe lecz w Menu Broni tylko i wylacznie
- Deagle
- USP
- Glock
- Dual
awp_india + aim_awp + awp+map
Wszystkie funkcje zawarte w VIpe lecz w Menu Broni tylko i wylacznie
- Deagle + AWP
- Deagle + Scout
Podejmę się tego wyzwania i spróbuję go zrobić
Użytkownik O'Zone edytował ten post 04.03.2013 16:51
O'Zone
04.03.2013
Oczywiście nie obyło się bez wpadki - przez godzinę 4 razy przerabiałem plugin zastanawiając się czemu nie wyświetla się menu, kiedy olśniło mnie, że wyświetla się dopiero od 3 rundy.
Menu broni dopasowane do map jak i jego znikanie po 20 sekundach na pewno działa, bo sprawdziłem je na własnym serwerze. Nie wiem jednak, czy działa wyzerowanie liczby rund po resecie, ponieważ nie mam na serwerze rozgrzewki. Dodatkowo menu broni na tych mapach, które wymieniłeś działa od pierwszej rundy, a na pozostałych od trzeciej (skoro bronie i tak są dostępne, to nie widzę sensu, żeby trzeba było czekać na menu). Dodałem także czyszczenie broni przed dodaniem ich z menu, by nie wystąpił bug z podwójnymi broniami jednej klasy.