Zatrzymanie gracza
kyriuch
04.01.2013
Witam, mam problem. Potrzebuję zatrzymać gracza w jednym miejscu, podczas gdy jest on rozpędzony. Nie chce go wsadzać w ziemię, ponieważ wtedy jest taki dziwny efekt skrzywienia/latania. Nie chcę również ustawić mu flagi FL_FROZEN ponieważ wtedy też jest dziwny efekt. Chcę po prostu aby został zatrzymany w miejscu, w czasie dotyku pewnego bytu. Potrzebuję tylko zatrzymania, ponieważ dotyk mam już zarejestrowany. Proszę, pomóżcie!
Droso
04.01.2013
http://amxx.pl/dokum...t_user_maxspeed
+ wywołuj to wtedy kiedy chcesz go zatrzymać i w event CurWeapon
+ wywołuj to wtedy kiedy chcesz go zatrzymać i w event CurWeapon
kyriuch
04.01.2013
Tylko widzisz, prędkość się ustawi maksymalna, ale i tak muszę czekać, aż się zatrzyma, dodatkowo jeśli przyduckuje, to poleci dalej Umiem już trochę i wpadłem na to
Droso
04.01.2013
Nje, skoro gościu przekracza prędkość to go zatrzyma, chyba, że jest w powietrzu.Tylko widzisz, prędkość się ustawi maksymalna, ale i tak muszę czekać, aż się zatrzyma
kyriuch
05.01.2013
Ustawiam maxspeed w chwili zetknięcia gracza z ziemią, a i tak go nie zatrzymuje
sebul
05.01.2013
Na graczu wykonaj
entity_set_vector(id, EV_VEC_velocity, Float:{0.0,0.0,0.0});
sebul
05.01.2013
To widocznie źle coś robisz, to co ja podałem, zatrzymuje gracza na chwilę i po tym wystarczy mu ustawić prędkość na 0.00001 i na pewno nie będzie mógł chodzić oraz zatrzyma się od razu.
kyriuch
05.01.2013
entity_set_vector(id,EV_VEC_velocity,Float:{0.0,0.0,0.0})
fm_set_user_maxspeed(id,0.00001)
Nie zatrzymuje, uwierz mi, zwłaszcza jak przyduckuje.
Gość_21977_* 07.01.2013
nie CurWeapon, a Ham_Item_PreFrame. CurWeapon nie służy zmiany prędkości na graczu i NIE DZIAŁA POPRAWNIE!http://amxx.pl/dokum...t_user_maxspeed
+ wywołuj to wtedy kiedy chcesz go zatrzymać i w event CurWeapon
Chcąc zatrzymać gracza w miejscu, zmień jego prędkość na 0.1, używając funowskiego set_user_maxspeed.
Do tego warto graczowi wyzerować wektor ruchu, o czym napisał sebul.
MarWit
07.01.2013
Hmm... moze tak ?
#include < amxmodx >
#include < fakemeta >
new bool:gbisFrozen[ 33 ] = { false };
public plugin_init()
{
register_forward( FM_SetClientMaxspeed, "fwSetClientMaxspeed" );
register_clcmd( "say /test", "cmdIWannaToTestIt" )
}
public client_connect( id )
gbisFrozen[ id ] = false;
public cmdIWannaToTestIt( id )
{
engfunc( EngFunc_SetClientMaxspeed, id, 0.00001 ); // Nie wiem czy to w ogole potrzebne = D
gbisFrozen[ id ] = ! gbisFrozen[ id ];
}
public fwSetClientMaxspeed( id, Float: fMaxspeed )
{
if( gbisFrozen[ id ] )
{
fMaxspeed = 0.00001;
return FMRES_HANDLED;
}
return FMRES_IGNORED ;
}
kyriuch
07.01.2013
my god, MarWit to co napisałeś, to weź to przeczytaj jeszcze raz, przecież co da
Użytkownik kyriuch edytował ten post 07.01.2013 19:37
fMaxpseed = 0.00001w forwardzie? nic, co do reszty, to benio, set_user_maxspeed na 0.1 i vector na 0 0 0 owszem, zatrzymuje gracza, ale zrozumcie, że ja to robię w chwili zetknięcia z entem podłogi, kiedy to gracz jest znacznie rozpędzony, przez co jeśli sobie przyduckuje, to zatrzyma go dopiero wtedy kiedy straci prędkość
Użytkownik kyriuch edytował ten post 07.01.2013 19:37
MarWit
07.01.2013
<br />my god, MarWit to co napisałeś, to weź to przeczytaj jeszcze raz, przecież co da<br />fMaxpseed = 0.00001<br />w forwardzie? nic<br />
Czysty błąd w doborze funkcji ( nie wspominając o tym że sam forward nie działa jak należy o czym było wspominane m.in. na AM ). Masz zatem jeszcze możliwość zmiany pev_movetype na NONE ( chodz nie mam pojęcia czy to zadziała ), bądź ew. zmianę prędkości przy animacji modelu chodu. Możesz także w ogóle zablokować klawisze chodu, bądź po prostu zablokować zmianę origin.
Użytkownik MarWit edytował ten post 07.01.2013 20:13