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: 0
0 użytkowników, 0 gości, 0 anonimowych