←  Pluginy

AMXX.pl: Support AMX Mod X i SourceMod

»

Modyfikacja
Vip dla Zaawansowanych

  • +
  • -
bula1100 - zdjęcie bula1100 04.03.2013

Stworzylem sobie VIP'a i wszystko działa :) Chciałbym go jednak troszke zmodyfikować odnośnie swoich wymagań ale nie wiem czy jest to w ogóle możliwe gdyż sam miernie znam sie na edycji pluginów :)
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 :
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
Użytkownik bula1100 edytował ten post 04.03.2013 00:31
Odpowiedz

  • +
  • -
O'Zone - zdjęcie O'Zone 04.03.2013

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

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.

2. Aby wyjśc z Menu VIpa trzeba nacisnac 0, a chcialbym zeby samo wygasalo po 20 sekundach

Hmm.. set_task w połączeniu z menu_destroy.

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

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 :D).

Podejmę się tego wyzwania i spróbuję go zrobić :P
Użytkownik O'Zone edytował ten post 04.03.2013 16:51
Odpowiedz

  • +
  • -
O'Zone - zdjęcie O'Zone 04.03.2013

Popracowałem, popracowałem i zrobiłem :D
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.

Załączone pliki

Odpowiedz