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ć
#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
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.
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()
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
Najlepsza odpowiedź
grankee
15.04.2016
Czyli chcesz wyłapać skok i dać po prostu kopa?
Kolegów wyżej lepiej nie słuchać
#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 } }
wonsz żeczny
15.04.2016
Kolegi wyżej nie słuchać
@grankee
A gdy wyląduje to prędkość jest standardowa(250).
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
Linux'
16.04.2016
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ć
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
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); }
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ć
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.