Skocz do zawartości

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.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Jak wykryć Double-headshoot


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
15 odpowiedzi w tym temacie

#1 PrezydenT

    Zaawansowany

  • Użytkownik

Reputacja: 23
Życzliwy

  • Postów:146
  • GG:
  • Imię:Mateusz
  • Lokalizacja:Polska
Offline

Napisano 11.09.2014 20:07

Witam, czy dałoby radę sprawdzić jakoś czy gracz trafił dwóch wrogów w głowę jednym pociskiem?


  • +
  • -
  • 0

#2 No Chance

    Życzliwy

  • Użytkownik

Reputacja: 3
Nowy

  • Postów:26
  • Lokalizacja:PS Store
Offline

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;

}

  • +
  • -
  • 0

#3 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 11.09.2014 21:42

Musisz mi podarować ze pisze z telefonu, ale ja wpadłem na coś takiego:
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.
  • +
  • -
  • 0

#4 No Chance

    Życzliwy

  • Użytkownik

Reputacja: 3
Nowy

  • Postów:26
  • Lokalizacja:PS Store
Offline

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


  • +
  • -
  • 0

#5 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 11.09.2014 22:57

zlapanie traceline ?


  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

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

#6 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 12.09.2014 06:04

1+ ? To dokładnie to samo co ++... Ale wkradl mi się błąd bo powinno być strzaly[id]==++stare_strzały[id]. Sprawdza to czy został wystrzelony 1 pocisk i padły 2 HSy. Ale i tak najoptymalniejsze bd TraceLine.
  • +
  • -
  • 0

#7 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 12.09.2014 10:22

1+ ? To dokładnie to samo co ++

Oj absolutnie nie!

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ę.
  • +
  • -
  • 4

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ę.
 
1988650.png?theme=dark


#8 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

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ś?


  • +
  • -
  • 0

#9 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 12.09.2014 15:37

Nie wiedziałem ze wartość zmiennej przy warunku może ulec zmianie. Co do pre i post wiedziałem. Dzięki :D

Użytkownik MAGNET edytował ten post 12.09.2014 15:38

  • +
  • -
  • 0

#10 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

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.


  • +
  • -
  • 2

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ę.
 
1988650.png?theme=dark


#11 PrezydenT

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 23
Życzliwy

  • Postów:146
  • GG:
  • Imię:Mateusz
  • Lokalizacja:Polska
Offline

Napisano 13.09.2014 10:49

Panowie, wróćmy do tematu, bo chyba o wartości zmiennej tu nie chodzi. :)


  • +
  • -
  • 0

#12 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 13.09.2014 11:08

Masz przykłady - sprawdz
  • +
  • -
  • 0

#13 PrezydenT

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 23
Życzliwy

  • Postów:146
  • GG:
  • Imię:Mateusz
  • Lokalizacja:Polska
Offline

Napisano 13.09.2014 14:09

No niby tak, ale jak ustrzelić double headshoot? To graniczy z cudem xD


  • +
  • -
  • -1

#14 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 13.09.2014 14:14

No niby tak, ale jak ustrzelić double headshoot? To graniczy z cudem xD

 

 

Zamrażasz boty i biegniesz na spawn.

 

Przez 2 pkt może przejść tylko jedna prosta :)


  • +
  • -
  • 0

#15 No Chance

    Życzliwy

  • Użytkownik

Reputacja: 3
Nowy

  • Postów:26
  • Lokalizacja:PS Store
Offline

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.


  • +
  • -
  • 0

#16 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

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 
}

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych