Witam, czy dałoby radę sprawdzić jakoś czy gracz trafił dwóch wrogów w głowę jednym pociskiem?
Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  | 
             
Jak wykryć Double-headshoot
			
				
					
						
					
					#1
					
					
				
				
				
					
				
			
				
			
			
			Napisano 11.09.2014 20:07
			
				
					
						
					
					#2
					
					
				
				
				
					
				
			
				
			
			
			Napisano 11.09.2014 21:13
Zaciekawil mnie troche twoj temat bo lubie nad czyms posiedziec i sie zastanowic troche.
I tak siedzialem az w końcu chcialem zwatpic az nagle cos zablyslo.
Nie wiem jakie beda tego efekty (nie wiem jak zareaguje przy fullauto). Nie testowalem prosto z mojej glowy.
Nawet jak nie zadziala kod to moze temat ruszy i reszta da jakis pomysl moze cos poprawi zmieni i uda ci sie pomoc.
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
new ilosc_strzalow[33];
new bool:strzelil_hs[33];
new numer_naboju[33];
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1);
	
	register_event("DeathMsg","deathmsg","ae")
	register_event("CurWeapon", "CurWeapon", "be", "1=1");
}
public Odrodzenie(id)
{
	if(!is_user_alive(id) || !is_user_connected(id))
		return PLUGIN_CONTINUE;
	
	ilosc_strzalow[id] = 0;
	numer_naboju[id] = 0;
	strzelil_hs[id] = false;
	
	return PLUGIN_CONTINUE;
}
public deathmsg(id) 
{     
	new id = read_data(1)    
	new victim = read_data(2)    
	new headshot = read_data(3)   
	
	if (!is_user_alive(id) || !headshot )        
		return PLUGIN_CONTINUE 
		
	if (get_user_team(id) != get_user_team(victim) && strzelil_hs[id]){
		if(ilosc_strzalow[id] == numer_naboju[id]){
			client_print(id,print_chat,"Prawdopodobnie ustrzeliles Double Headshooooot !!!");
			strzelil_hs[id] = false;
		}
	}
	
	if (get_user_team(id) != get_user_team(victim)){
		strzelil_hs[id] = true;
		numer_naboju[id] = ilosc_strzalow[id];
	}
	return PLUGIN_CONTINUE 
}
public CurWeapon(id)
{
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE
	if(pev(id, pev_button) & IN_ATTACK)
		ilosc_strzalow[id]++;
		
	return PLUGIN_CONTINUE;
}
					
					
			
				
					
						
					
					#3
					
					
				
				
				
					
				
			
				
			
			
			Napisano 11.09.2014 21:42
public Curweapon(id)
{
if(button blabla)
{
stare_strzały[id] = strzały[id]
strzały[id]++
}
}
public Deathmsg()
{
if(hs)
Headshot[id]++
else
Headshot[id] = 0
if(Headshot[id] == 2 && stare_strzały[id] == ++strzały[id])
////Masz double HS
}
Sory za brak tabulacji i w tak okrojonym wydaniu. Mam nadzieję że sama idea jest zrozumiała. Jeśli powyżej jest zastosowana taka sama metoda to przepraszam, ale nie wglebialem się w kod.
					
					
			
				
					
						
					
					#4
					
					
				
				
				
					
				
			
				
			
			
			Napisano 11.09.2014 21:49
public Deathmsg()
{
if(hs)
Headshot[id]++
else
Headshot[id] = 0
if(Headshot[id] == 2 && stare_strzały[id] == ++strzały[id])
////Masz double HS
}
Wydaje mi sie ze to nie przejdzie poniewaz najwazniejsze jest na poczatku sprawdzenie ilosci strzalow gracz w evencie death.
A u ciebie sprawdza czy po prostu strzelil HS. I to by wynikalo ze plugin by nie zadziala.
I bylbym pewny na 100% lecz nie wiem jak to do konca dziala a nie mam czasu aby sprawdzic
if(Headshot[id] == 2 && stare_strzały[id] == ++strzały[id])
stare_strzaly[id] == 1+strzaly[id] ??
Zreszta nie wiem chyba nie. Wytlumacz mi to a moze cos sie wymysli
			
				
					
						
					
					#5
					
					
				
				
				
					
				
			
				
			
			
			Napisano 11.09.2014 22:57
zlapanie traceline ?
Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka
GG:6022845 (nie pomagam za free osobom ponizej rangi MoD)
			
				
					
						
					
					#6
					
					
				
				
				
					
				
			
				
			
			
			Napisano 12.09.2014 06:04
			
				
					
						
					
					#7
					
					
				
				
				
					
				
			
				
			
			
			Napisano 12.09.2014 10:22
Oj absolutnie nie!1+ ? To dokładnie to samo co ++
a = 3
b = 2
if (a == b) {
    // false, z oczywistych przyczyn
}
if (a == ++b) {
    // true, gdyż ++b zwróci 3, gdy b było równe 2
}
if (a == b) {
    // true, gdyż b jest teraz równe 3!
}
a = 3
b = 2
if (a == b) {
    // false, z oczywistych przyczyn
}
if (a == 1+b) {
    // true, gdyż 1+b zwróci 3, gdy b było równe 2
}
if (a == b) {
    // nadal false, b dalej jest równe 2
}Tak wygląda różnica w praktyce. Dodatkowo:
a = 3
b = 2
if (a == b) {
    // false, z oczywistych przyczyn
}
if (a == b++) {
    // false, gdyż b++ zwróci STARĄ wartość b
}
if (a == b) {
    // true, nowa wartość b to 3!
}++b jest nazywane pre-inkrementacją, gdyż inkrementacja zmiennej (czyli zwiększenie jej wartości o 1) następuje przed zwróceniem wartości zmiennej. b++ nazywane jest post-inkrementacją, gdyż inkrementacja następuje PO zwróceniu wartości zmiennej.I jeszcze jedna uwaga, w pętli for warto jest użyć ++i zamiast i++, czyli:
for (new i=0; i<a;++i)dlaczego?
b++ w praktyce jest reprezentowane następującymi składowymi operacjami:
1. zapamiętaj wartość zmiennej b
2. zwiększ b o 1
3. zwróć zapamiętaną wartość zmiennej b
natomiast ++b:
1. zwiększ b o 1
2. zwróć wartość zmiennej b
czyli mamy o jedną operację MNIEJ! I to przy każdej iteracji! Gdy pętla ma przejść 1000 razy to już jest 1000 operacji mniej. Mądre kompilatory jednak zauważą, że b++ jest użyte niepotrzebnie i kod automatycznie zoptymalizują przy kompilacji, jednak nie każdy kompilator jest mądry i nie każdy ma włączoną optymalizację.
NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 

			
				
					
						
					
					#8
					
					
				
				
				
					
				
			
				
			
			
			Napisano 12.09.2014 12:44
czyli mamy o jedną operację MNIEJ! I to przy każdej iteracji! Gdy pętla ma przejść 1000 razy to już jest 1000 operacji mniej. Mądre kompilatory jednak zauważą, że b++ jest użyte niepotrzebnie i kod automatycznie zoptymalizują przy kompilacji, jednak nie każdy kompilator jest mądry i nie każdy ma włączoną optymalizację.
A kompilator PAWN'a wykryje takie coś?
			
				
					
						
					
					#9
					
					
				
				
				
					
				
			
				
			
			
			Napisano 12.09.2014 15:37
Użytkownik MAGNET edytował ten post 12.09.2014 15:38
			
				
					
						
					
					#10
					
					
				
				
				
					
				
			
				
			
			
			Napisano 12.09.2014 19:54
A kompilator PAWN'a wykryje takie coś?
Przy maksymalnej optymalizacji ( -d0) tak, przy domyślnej: nigdy nie sprawdzałem.
NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 

			
				
					
						
					
					#11
					
					
				
				
				
					
				
			
				
			
			
			Napisano 13.09.2014 10:49
Panowie, wróćmy do tematu, bo chyba o wartości zmiennej tu nie chodzi. ![]()
			
				
					
						
					
					#12
					
					
				
				
				
					
				
			
				
			
			
			Napisano 13.09.2014 11:08
			
				
					
						
					
					#13
					
					
				
				
				
					
				
			
				
			
			
			Napisano 13.09.2014 14:09
No niby tak, ale jak ustrzelić double headshoot? To graniczy z cudem ![]()
			
				
					
						
					
					#14
					
					
				
				
				
					
				
			
				
			
			
			Napisano 13.09.2014 14:14
No niby tak, ale jak ustrzelić double headshoot? To graniczy z cudem
Zamrażasz boty i biegniesz na spawn.
Przez 2 pkt może przejść tylko jedna prosta ![]()
			
				
					
						
					
					#15
					
					
				
				
				
					
				
			
				
			
			
			Napisano 13.09.2014 14:42
Nie musi to byc akurat 2x hs. Mozesz event death zamienic na cos innego przy wpisaniu nawet komendy przez gracza...lecz wszystkie zmienne warunki i reszta publicow powinno zostac taka sama.
			
				
					
						
					
					#16
					
					
				
				
				
					
				
			
				
			
			
			Napisano 14.09.2014 06:50
new Float:last_hs[33]
public deathmsg(id) 
{     
	new id = read_data(1)    
	new victim = read_data(2)    
	new headshot = read_data(3)   
	
	if (!is_user_alive(id) || !headshot )        
		return PLUGIN_CONTINUE 
		
	//celowo nie daje warunków czy jest z przeciwnego teamu, podwójny headshot to podwójny headshot, nie wa¿ne czy swojemu :D chcesz to sobie dodaj
	if(last_hs[id]+0.3>get_gametime())//no chyba ze ktos umie ustrzelic dwie glowy dwoma strzalami w ciagu 0.3 sek albo mnie, jesli tak to skroc ten czas.
	{
		client_print(id,print_chat,"Ustrzeliles dwie glowy")
	}
	else
	{
		last_hs[id]=get_gametime()
	}
	return PLUGIN_CONTINUE 
}
					
					Użytkownicy przeglądający ten temat: 1
0 użytkowników, 1 gości, 0 anonimowych


 
Dodatki SourceMod





				
				
				
				
				
				






