←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Dodanie speeda po skoku, jak to zrobić?


Najlepsza odpowiedź grankee 15.04.2016 01:53

Czyli chcesz wyłapać skok i dać po prostu kopa?

 

Kolegów wyżej lepiej nie słuchać  :cfaniak:

#include <amxmodx>
#include <amxmisc>
#include <engine>




public plugin_init() {
	register_plugin("Jump boost","0.1","grankee")
	
	// Add your code here...
}
public client_PreThink(id)
{
	if((get_user_button(id)&IN_JUMP)&&(!get_user_oldbutton(id)&IN_JUMP))//skok
	{
		new Float:flVecVelocity[3]
		get_user_velocity(id,flVecVelocity)//pobieramy prędkość gracza
                //tworzymy zmienna wspolczynnik
		new Float:wsp=0.1// 0.1 zwiększy o 10%, ustaw ile chcesz, ale musi być po przecinku.
		//zwiększamy prędkość o współczynnik w trzech kierunkach, jeśli chcesz tylko w górę zwiększyć to usuń dwie oznaczone linijki
                flVecVelocity[0]*=wsp;//usun jesli chcesz tylko w górę przyspieszyć
		flVecVelocity[1]*=wsp;//usun jesli chcesz tylko w górę przyspieszyć
		flVecVelocity[2]*=wsp;
		set_user_velocity(id,flVecVelocity)//ustawiamy nowa zwiekszona predkosc
	}
}
Przejdź do postu

  • +
  • -
Shalom_israel - zdjęcie Shalom_israel 14.04.2016

Witam, czy jest możliwość zrobienia pluginu który działa następująco?:

 

Gdy gracz podskoczy, dodawana jest mu prędkość(nie ustawiana) np. 10? 

A gdy wyląduje to prędkość jest standardowa(250).

 

Prosiłbym o dokładne wytłumaczenie nt. ew. stworzenia takiego pluginu, w miarę mozliwości krok po kroku.

Odpowiedz

  • +
  • -
Robiin - zdjęcie Robiin 14.04.2016

:)


Użytkownik aSiorr edytował ten post 24.04.2018 21:18
Odpowiedz

  • +
  • -
wonsz żeczny - zdjęcie wonsz żeczny 14.04.2016

Kolegi wyżej lepiej nie słuchać.

Jako takiej bezpośredniej funkcji lub eventu odpowiadającego za skok nie ma, można użyć np. tego:

set_pev(id, pev_oldbuttons, pev(id, pev_oldbuttons) | IN_JUMP)

Ale jak złapać wylądowanie to nie wiem, może 

register_touch()
Odpowiedz

  • +
  • -
GeDox - zdjęcie GeDox 14.04.2016

 

Kolegi wyżej lepiej nie słuchać.

Jako takiej bezpośredniej funkcji lub eventu odpowiadającego za skok nie ma, można użyć np. tego:

set_pev(id, pev_oldbuttons, pev(id, pev_oldbuttons) | IN_JUMP)

Ale jak złapać wylądowanie to nie wiem, może 

register_touch()
entity_get_int(id, EV_INT_flags)

Flaga odpowiadająca za stanie na podłodze:

FL_ONGROUND

Uwaga, flagi są bitami.

 

Gdybyś nie miał:

#define    FL_ONGROUND    (1<<9)    // At rest / on the ground

 


Użytkownik GeDox edytował ten post 14.04.2016 20:29
Odpowiedz

  • +
  • -
Najlepsza odpowiedź grankee - zdjęcie grankee 15.04.2016

Czyli chcesz wyłapać skok i dać po prostu kopa?

 

Kolegów wyżej lepiej nie słuchać  :cfaniak:

#include <amxmodx>
#include <amxmisc>
#include <engine>




public plugin_init() {
	register_plugin("Jump boost","0.1","grankee")
	
	// Add your code here...
}
public client_PreThink(id)
{
	if((get_user_button(id)&IN_JUMP)&&(!get_user_oldbutton(id)&IN_JUMP))//skok
	{
		new Float:flVecVelocity[3]
		get_user_velocity(id,flVecVelocity)//pobieramy prędkość gracza
                //tworzymy zmienna wspolczynnik
		new Float:wsp=0.1// 0.1 zwiększy o 10%, ustaw ile chcesz, ale musi być po przecinku.
		//zwiększamy prędkość o współczynnik w trzech kierunkach, jeśli chcesz tylko w górę zwiększyć to usuń dwie oznaczone linijki
                flVecVelocity[0]*=wsp;//usun jesli chcesz tylko w górę przyspieszyć
		flVecVelocity[1]*=wsp;//usun jesli chcesz tylko w górę przyspieszyć
		flVecVelocity[2]*=wsp;
		set_user_velocity(id,flVecVelocity)//ustawiamy nowa zwiekszona predkosc
	}
}
Odpowiedz

  • +
  • -
wonsz żeczny - zdjęcie wonsz żeczny 15.04.2016

Kolegi wyżej nie słuchać :)

 

@grankee

A gdy wyląduje to prędkość jest standardowa(250).
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 16.04.2016

A czy ja gdzieś zmieniam maxspeed?

Przeczytaj mój kod i pomyśl, czy jak wyląduje to prędkość będzie inna niż standardowa :)

 


Użytkownik grankee edytował ten post 16.04.2016 02:09
Odpowiedz

  • +
  • -
Linux' - zdjęcie Linux' 16.04.2016

@Grankee częściowo dobrze lecz zapomniałeś o sprawdzaniu czy gracz jest w powietrzu, poza tym lepszym rozwiązaniem było by użycie cmdstart.
Odpowiedz

  • +
  • -
Shalom_israel - zdjęcie Shalom_israel 16.04.2016

Dziękuję grankee, działa

Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 16.04.2016


zapomniałeś o sprawdzaniu czy gracz jest w powietrzu,

Fakt, przypomniałem sobie jak już kompa wyłączyłem. Teraz teoretycznie klikając spację odpowiednio szybko można latać :D

Ktoś przypomni jak to sprawdzić? Wystarczy !FL_ON_GROUND && !FL_PARTIALGROUND czy jeszcze coś trzeba sprawdzić?

 

 


poza tym lepszym rozwiązaniem było by użycie cmdstart.

Czemu?

 

 

Zrobiłem tak, sprawdź:

#include <amxmodx>
#include <amxmisc>
#include <engine>




public plugin_init() {
	register_plugin("Jump boost","0.2","grankee")
	
	// Add your code here...
}
public client_PreThink(id)
{
	if((get_user_button(id)&IN_JUMP)&&(!get_user_oldbutton(id)&IN_JUMP)&&(entity_get_int(id,EV_INT_flags)&FL_ONGROUND || entity_get_int(id,EV_INT_flags)&FL_PARTIALGROUND))//skok
	{
		new Float:flVecVelocity[3]
		get_user_velocity(id,flVecVelocity)
		new Float:wsp=0.1// 0.1 zwiększy o 10%, ustaw ile chcesz, ale musi być po przecinku.
		flVecVelocity[0]*=wsp;//usun jesli chcesz tylko w górę przyspieszyć
		flVecVelocity[1]*=wsp;//usun jesli chcesz tylko w górę przyspieszyć
		flVecVelocity[2]*=wsp;
		set_user_velocity(id,flVecVelocity)
	}
}


Użytkownik grankee edytował ten post 16.04.2016 14:26
Odpowiedz

  • +
  • -
Asiap - zdjęcie Asiap 16.04.2016

najlepszym rozwiazaniem jest uzycie Ham_Player_Jump :)

Odpowiedz

  • +
  • -
Asiap - zdjęcie Asiap 16.04.2016

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

public plugin_init() {
	register_plugin("Jump Boost", "1.0", "AsiaP");

	RegisterHamPlayer(Ham_Player_Jump, "PlayerJump");
}

public PlayerJump(id)
{
	if(!is_user_alive(id) || pev(id, pev_oldbuttons) & IN_JUMP || ~pev(id, pev_flags) & FL_ONGROUND)
	{
		return;
	}

	static Float:vecVelocity[3];
	pev(id, pev_velocity, vecVelocity);

	vecVelocity[0] += 10.0;
	vecVelocity[1] += 10.0;
	vecVelocity[2] += 10.0;

	set_pev(id, pev_velocity, vecVelocity);
}
Odpowiedz

  • +
  • -
Linux' - zdjęcie Linux' 16.04.2016

 


zapomniałeś o sprawdzaniu czy gracz jest w powietrzu,

Fakt, przypomniałem sobie jak już kompa wyłączyłem. Teraz teoretycznie klikając spację odpowiednio szybko można latać :D

Ktoś przypomni jak to sprawdzić? Wystarczy !FL_ON_GROUND && !FL_PARTIALGROUND czy jeszcze coś trzeba sprawdzić?

 

 


poza tym lepszym rozwiązaniem było by użycie cmdstart.

Czemu?

 

 

Zrobiłem tak, sprawdź:

#include <amxmodx>
#include <amxmisc>
#include <engine>




public plugin_init() {
	register_plugin("Jump boost","0.2","grankee")
	
	// Add your code here...
}
public client_PreThink(id)
{
	if((get_user_button(id)&IN_JUMP)&&(!get_user_oldbutton(id)&IN_JUMP)&&(entity_get_int(id,EV_INT_flags)&FL_ONGROUND || entity_get_int(id,EV_INT_flags)&FL_PARTIALGROUND))//skok
	{
		new Float:flVecVelocity[3]
		get_user_velocity(id,flVecVelocity)
		new Float:wsp=0.1// 0.1 zwiększy o 10%, ustaw ile chcesz, ale musi być po przecinku.
		flVecVelocity[0]*=wsp;//usun jesli chcesz tylko w górę przyspieszyć
		flVecVelocity[1]*=wsp;//usun jesli chcesz tylko w górę przyspieszyć
		flVecVelocity[2]*=wsp;
		set_user_velocity(id,flVecVelocity)
	}
}

 

Prethink wykonywany jest non stop a cmdstart tylko gdy zachodzą w środku jakieś zmiany więc jest bardziej optymalny dla serwera.

Odpowiedz