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

dodanie expa graczu ktory skoczyl na glowe


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

#1 Żuk

    Wszechwidzący

  • Użytkownik

Reputacja: 11
Początkujący

  • Postów:291
  • Lokalizacja:Katowice
Offline

Napisano 13.07.2019 11:45

Mam taki kod z alliedmodsow:

public OnCBasePlayer_PostThink( id )
{
    if( is_user_alive(id) )
    {
        new Float:flFallVelocity = get_pdata_float(id, m_flFallVelocity)
        if( flFallVelocity > 10.0 )
        {
            new target = pev(id, pev_groundentity)
            if( IsPlayer(target) && is_user_alive(target) )
            {
                iExp[id] += gNumExp; // jak dodam to - to nic sie nie dzieje, nikt nic nie dostaje
                iExp[target] += gNumExp; // a to - gracz ktory zostal 'podeptany' dostaje expa i nie wiem jak to ugryzc;d
              //  ExecuteHam(Ham_TakeDamage, target, id, id, flFallVelocity * 0.1, DMG_FALL)
            }
        }
    }
}  

kod jest stad:https://forums.allie... post connor'a)

potrzebuje dodac exp graczu ktory skoczyl drugiemu na glowe i nie zadal przy tym zadnego dmg


Użytkownik Żuk edytował ten post 13.07.2019 11:46

  • +
  • -
  • 0

#2 wonsz żeczny

    Wszechwidzący

  • Użytkownik

Reputacja: 82
Zaawansowany

  • Postów:254
  • Imię:Wonsz
  • Lokalizacja:Żeka
Offline

Napisano 13.07.2019 14:44

public forward_touch(toucher, touched)
{

	if(!is_user_alive(toucher) || !is_user_alive(touched))
		return;
	
	if(falling_speed[touched])
		return;
	
	if(get_user_team(toucher) == get_user_team(touched))
		return;
	
	new touched_origin[3], toucher_origin[3];
	get_user_origin(touched, touched_origin);
	get_user_origin(toucher, toucher_origin);
	
	new Float:toucher_minsize[3], Float:touched_minsize[3];
	pev(toucher,pev_mins,toucher_minsize);
	pev(touched,pev_mins,touched_minsize);
	
	if(touched_minsize[2] != -18.0)
	{
		if(!(toucher_origin[2] == touched_origin[2]+72 && toucher_minsize[2] != -18.0) && !(toucher_origin[2] == touched_origin[2]+54 && toucher_minsize[2] == -18.0))
		{
			return;
		}
	}
	else
	{
		if(!(toucher_origin[2] == touched_origin[2]+68 && toucher_minsize[2] != -18.0) && !(toucher_origin[2] == touched_origin[2]+50 && toucher_minsize[2] == -18.0))
		{
			return;
		}
	}

	if(is_user_alive(toucher) && is_user_alive(touched))
	{
		iExp[toucher] += gNumExp;
		iExp[touched] += gNumExp;
	}
}

public forward_PlayerPreThink(id)
{
	pev(id, pev_flFallVelocity, falling_speed[id])
}

Tylko, że jak stanie na głowie to stojąc na niej np. przez 5 sekund cały czas będzie dostawał expa, iExp[toucher] += gNumExp; to wykona się wtedy około 500 razy.

Myślę, że jakoś sobie poradzisz :D


  • +
  • -
  • 1

#3 Żuk

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 11
Początkujący

  • Postów:291
  • Lokalizacja:Katowice
Offline

Napisano 13.07.2019 15:05

ten kod jest z headsplasha wyciagniety:P tez mialem z nim pewien problem dlatego go olałem i szukałem innego rozwiązania


  • +
  • -
  • 0

#4 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 13.07.2019 15:35

trzeba zrobić taki timeout. podobnie jak rakiety w codmod


  • +
  • -
  • 1

#5 Żuk

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 11
Początkujący

  • Postów:291
  • Lokalizacja:Katowice
Offline

Napisano 16.07.2019 14:06

Jakoś tam sobie poradziłem, ale jeśli ma ktoś lepszy sposób na wykrycie skoku/ spadnięcia komuś na głowę (tak, że jeśli gracz na głowę skoczy to -> coś ale jeśli stoi -> stop dalszej czynności to byłbym wdzięczny.


  • +
  • -
  • 0

#6 wonsz żeczny

    Wszechwidzący

  • Użytkownik

Reputacja: 82
Zaawansowany

  • Postów:254
  • Imię:Wonsz
  • Lokalizacja:Żeka
Offline

Napisano 16.07.2019 14:26

Ja bym spróbował zrobić zmienną dotknal, jeśli dotknie to dotknal = true, i dać taska, który po 0.1 sekundy sprawdza czy gracz nadal dotyka, jeśli tak to dalej ustawiać dotknal = true a jeśli nie to dotknal = false.

 

na samym początku daj

if( dotknal[ toucher ] )
    return;

i na końcu set_task i dotknal = false.


  • +
  • -
  • 1

#7 Żuk

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 11
Początkujący

  • Postów:291
  • Lokalizacja:Katowice
Offline

Napisano 16.07.2019 14:48

sprawdze pod wieczor jak sie wyrobie :P


  • +
  • -
  • 0

#8 Robiin

    Godlike

  • Support Team

Reputacja: 1 103
Super Hero

  • Postów:2 043
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 16.07.2019 17:07

To może być overkill:

  • Sprawdzaj czy gracz A podskoczył (np. używając flag),
  • Sprawdzaj dotknięcie się dwóch entity o classname "player",
  • Sprawdzaj wysokość gracza B i gracza A (jeśli A jest wyżej o wysokość bytu B, to przyjmijmy, że podskoczył mu nad głowę lub równo z nią)

 

Drugi sposób (zważając na to, że już do tej pory widzieliśmy taski co 0.1 sekundy z wykorzystaniem mnóstwa natywów i złożonych funkcji aby formatować tekst HUDu przy 32 graczach):

  • Dla gracza, który się zrespi uruchom task co 0.1 sek.,
  • Sprawdzaj dotknięcie się dwóch entity o classname "player",
  • Sprawdzaj różnicę w wysokości graczy, których indeksy otrzymasz z eventu entity touch (podobnie do powyższego; jeśli A jest wyżej...),
  • Sprawdzaj w tasku flagę FL_ONGROUND (jeśli dobrze pamiętam) - jeśli będzie ustawiona to znaczy, że gracz skaczący dotknął podłoża (więc tym samym nie może stać komuś na głowie)

  • +
  • -
  • 1

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#9 Żuk

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 11
Początkujący

  • Postów:291
  • Lokalizacja:Katowice
Offline

Napisano 18.07.2019 22:08

Ok, do zamknięcia, z wszystkim jak na razie się uporałem :)


  • +
  • -
  • 0

#10 Robiin

    Godlike

  • Support Team

Reputacja: 1 103
Super Hero

  • Postów:2 043
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 18.07.2019 22:56

Ok, do zamknięcia, z wszystkim jak na razie się uporałem :)

 

Warto powiedzieć w jaki sposób Ci się udało dla uniknięcia przyszłych tematów z tym samym problemem.


  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#11 Żuk

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 11
Początkujący

  • Postów:291
  • Lokalizacja:Katowice
Offline

Napisano 20.07.2019 16:42

Na razie użyłem kodu z headsplasha + odpowiedni warunek i ustawienie zmiennej headjump:

if(touched_minsize[2] != -18.0) 
	{
		if(!(toucher_origin[2] == touched_origin[2]+72 && toucher_minsize[2] != -18.0) && !(toucher_origin[2] == touched_origin[2]+54 && toucher_minsize[2] == -18.0))
		{
			headtest[toucher] = false;
			return;
		}
	}
	else 
	{
		if(!(toucher_origin[2] == touched_origin[2]+68 && toucher_minsize[2] != -18.0) && !(toucher_origin[2] == touched_origin[2]+50 && toucher_minsize[2] == -18.0))
		{
			headjump[toucher] = false;
			return;
		}
	}
	if(headjump[toucher])
		{	
			return;
	}
	
	if(is_user_alive(touched)) 
	{
		
		// tutaj kod
		headjump[toucher] = true;

	}

	
}


  • +
  • -
  • 0

#12 Żuk

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 11
Początkujący

  • Postów:291
  • Lokalizacja:Katowice
Offline

Napisano 20.07.2019 17:33

f(!(toucher_origin[2] == touched_origin[2]+72 && toucher_minsize[2] != -18.0) && !(toucher_origin[2] == touched_origin[2]+54 && toucher_minsize[2] == -18.0))
		{
			headtest[toucher] = false;
			return;
		}

na

f(!(toucher_origin[2] == touched_origin[2]+72 && toucher_minsize[2] != -18.0) && !(toucher_origin[2] == touched_origin[2]+54 && toucher_minsize[2] == -18.0))
		{
			headjump[toucher] = false;
			return;
		}

wkradl sie blad, juz brak edycji


  • +
  • -
  • 0




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

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