Zmiana klawiszy kierunku u gracza
Filip1512
22.09.2012
Cześć,
wpadłem na pomysł, żeby do mojej ruletki wprowadzić jeszcze bonus - zmianę kierunków chodzenia u gracza tj.
- gdy gracz chce isc w lewo, to idzie w prawo
- gdy chce isc w prawo, to idzie w lewo
- gdy chce isc do przodu, idzie do tylu
- jak chce isc do tylu, to idzie do przodu
Lecz to co zrobiłem - nie działa.
Chciałem również, aby po zdobyciu tego bonusu pisało "jestes pijany i placisz 10% wiecej czyli "TU KASA", lecz to też niedziała.
Co zrobiłem?
Zadeklarowałem:
W jednym z bonusów dodałem tak:
I tutaj podczas kompilowania wyskakuje mi blad
Ok, no to teraz cała funkcja "pijaka". Chciałem spróbować w ten sposób, ale niestety nie działa i nic nie zmienia (tak jak by tego nie było):
Użytkownik `NN edytował ten post 22.09.2012 20:00
wpadłem na pomysł, żeby do mojej ruletki wprowadzić jeszcze bonus - zmianę kierunków chodzenia u gracza tj.
- gdy gracz chce isc w lewo, to idzie w prawo
- gdy chce isc w prawo, to idzie w lewo
- gdy chce isc do przodu, idzie do tylu
- jak chce isc do tylu, to idzie do przodu
Lecz to co zrobiłem - nie działa.
Chciałem również, aby po zdobyciu tego bonusu pisało "jestes pijany i placisz 10% wiecej czyli "TU KASA", lecz to też niedziała.
Co zrobiłem?
Zadeklarowałem:
new bool:pijak;
W jednym z bonusów dodałem tak:
case 6: {
new mandat = get_cvar_num("kasa_bonus")*0.1
ColorChat(id, GREY, "Jestes pijany i placisz dodatkowy mandat 10%% czyli %d $", mandat)
cs_get_user_money(id)-get_cvar_num("kasa_bonus")*1.1
pijak = true;
}
I tutaj podczas kompilowania wyskakuje mi blad
Warning: Tag mismatch on line 174
Ok, no to teraz cała funkcja "pijaka". Chciałem spróbować w ten sposób, ale niestety nie działa i nic nie zmienia (tak jak by tego nie było):
public client_PreThink(id){
if(pijak == true && is_user_alive(id)){
new button = get_user_button(id)
switch(button){
case IN_LEFT: set_pev(id, pev_button, IN_RIGHT)
case IN_RIGHT: set_pev(id, pev_button, IN_LEFT)
case IN_FORWARD: set_pev(id, pev_button, IN_BACK)
case IN_BACK: set_pev(id, pev_button, IN_FORWARD)
}
}
}
Użytkownik `NN edytował ten post 22.09.2012 20:00
dasiek
22.09.2012
Kasę nie wydaje się w groszach/centach - musi to być okrągła liczba czyli daj floatround(ilosc kasy*0.1) a i tak btw - jak jedna osoba wylosyuje pijaka wszyscy go bd mieli
Filip1512
22.09.2012
Ok floatround użyte i już nie ma błędu
Moja prośba brzmi - pomógłbyś mi z tym pijakiem ? Pierwszy raz bawię się w pevami i nie za bardzo znam też tego składnię..
//edit
przy pijaku już dodałem wszędzie [id], [33] itd.
Użytkownik `NN edytował ten post 22.09.2012 20:16
Moja prośba brzmi - pomógłbyś mi z tym pijakiem ? Pierwszy raz bawię się w pevami i nie za bardzo znam też tego składnię..
//edit
przy pijaku już dodałem wszędzie [id], [33] itd.
Użytkownik `NN edytował ten post 22.09.2012 20:16
dasiek
22.09.2012
case IN_LEFT: set_pev(id, pev_button, IN_RIGHT) case IN_RIGHT: set_pev(id, pev_button, IN_LEFT) case IN_FORWARD: set_pev(id, pev_button, IN_BACK) case IN_BACK: set_pev(id, pev_button, IN_FORWARD)
w tym miejscu ustawiasz mu guzik wciśnięty co nie? Więc Dobrze było by gdybyś usuwał mu wcześniej wciśnięty (bo jest sytuacja że jak klika prawo to jednocześnie klika w lewo i Gracz stoi )
case IN_RIGHT: { set_pev(id, pev_button,~IN_RIGHT) set_pev(id, pev_button, IN_LEFT) }
coś takiego (z guzikiem Prawo) powinno załatwić sprawe (aczkolwiek mogę się mylić) . Teraz według tego zrób reszte.
Filip1512
22.09.2012
A mogę, a raczej muszę spytać - tylda przed IN_RIGHT oznacza "klawisz wciśnięty", a bez tyldy "klawisz na który się zmieni", dobrze rozumiem?
dasiek
22.09.2012
Otóż tego pewny nie jestem - na kodach innych widziałem , oznacza to że z szeregu wciśniętych klawiszy usuwamy ten IN_RIGHT i ustawiamy że ma wciśnięty Lewy.
Filip1512
22.09.2012
public client_PreThink(id){
if(pijak[id] == true && is_user_alive(id)){
new button = get_user_button(id)
switch(button){
case IN_LEFT: {
set_pev(id, pev_button,~IN_LEFT)
set_pev(id, pev_button, IN_RIGHT)
}
case IN_RIGHT: {
set_pev(id, pev_button, ~IN_RIGHT)
set_pev(id, pev_button, IN_LEFT)
}
case IN_FORWARD: {
set_pev(id, pev_button, ~IN_FORWARD)
set_pev(id, pev_button, IN_BACK)
}
case IN_BACK: {
set_pev(id, pev_button, ~IN_BACK)
set_pev(id, pev_button, IN_FORWARD)
}
}
}
}
Zrobiłem tak, lecz nie działa, normalnie chodzę.
http://amxx.pl/topic...trzenia-gracza/
Znalazłem pewien temat, czy byłbyś w stanie na jego podstawie coś wykombinować ?
Użytkownik `NN edytował ten post 22.09.2012 21:02
radim
23.09.2012
Może zamiast switcha i case, użyj warunku:
if(button & IN_LEFT) set_pev(id, pev_button, IN_RIGHT)
Filip1512
23.09.2012
Tzn. coś takiego?
To nie działa Spróbowałem również zamiast & to == - rezultat ten sam.
Tak przy okazji - jaka jest różnica między & a && ?
Użytkownik `NN edytował ten post 23.09.2012 10:35
public client_PreThink(id){
if(pijak[id] == true && is_user_alive(id)){
new button = get_user_button(id)
if(button & IN_LEFT)
set_pev(id, pev_button, IN_RIGHT)
if(button & IN_RIGHT)
set_pev(id, pev_button, IN_LEFT)
if(button & IN_FORWARD)
set_pev(id, pev_button, IN_BACK)
if(button & IN_BACK)
set_pev(id, pev_button, IN_FORWARD)
}
}
To nie działa Spróbowałem również zamiast & to == - rezultat ten sam.
Tak przy okazji - jaka jest różnica między & a && ?
Użytkownik `NN edytował ten post 23.09.2012 10:35
dasiek
23.09.2012
tak też sprawdzałeś?
public client_PreThink(id){ if(pijak[id] && is_user_alive(id)) { new button = get_user_button(id) if(button & IN_LEFT) { set_pev(id, pev_button, IN_RIGHT) set_pev(id, pev_button, ~IN_LEFT) } if(button & IN_RIGHT) { set_pev(id, pev_button, IN_LEFT) set_pev(id, pev_button, ~IN_RIGHT) } if(button & IN_FORWARD) { set_pev(id, pev_button, IN_BACK) set_pev(id, pev_button, ~IN_FORWARD) } if(button & IN_BACK) { set_pev(id, pev_button, IN_FORWARD) set_pev(id, pev_button, ~IN_BACK) } } }
Filip1512
23.09.2012
No już coś zaczęło się dziać, a dokładniej tylko gdy klikam "w", to idzie mi normalnie do przodu, ale używa mouse1 mouse2 oraz +use.. Ważne, że już chociaż coś Na resztę klawiszy nie działa.
Użytkownik `NN edytował ten post 23.09.2012 11:26
Użytkownik `NN edytował ten post 23.09.2012 11:26
DarkGL
23.09.2012
pev_button to suma bitowa definicji klawiszy
np.
chociaż lepiej to robić tak
u ciebie to będzie
mógłbyś to też zrobić poprzez zmianę velocity tzn. velocity to wektor wiec wystarczy tylko przekształcić go na taki z tym samym kierunkiem ale przeciwnym zwrotem
Użytkownik DarkGL edytował ten post 23.09.2012 11:31
np.
set_pev(id, pev_button, IN_FORWARD | IN_RIGHT )czyli do przodu i w prawo
chociaż lepiej to robić tak
set_pev(id, pev_button, pev( id , pev_button ) | ( IN_FORWARD | IN_RIGHT ) )
u ciebie to będzie
set_pev(id, pev_button, ( pev( id , pev_button ) | IN_RIGHT ) & ~IN_LEFT )
mógłbyś to też zrobić poprzez zmianę velocity tzn. velocity to wektor wiec wystarczy tylko przekształcić go na taki z tym samym kierunkiem ale przeciwnym zwrotem
Użytkownik DarkGL edytował ten post 23.09.2012 11:31
Filip1512
23.09.2012
Dark, a mógłbyś napisać całą tą funkcję? Lepiej by mi było to zrozumieć jak bym zobaczył całość...
DarkGL
23.09.2012
Wyznaczanie wektora z przeciwnym zwrotem to pomnożenie jego składowych przez -1 w xs masz xs_vec_neg
Filip1512
23.09.2012
Jak będzie wyglądać cały public client_PreThink poprzez użycie set_pev?
K!113r
23.09.2012
Można też przebindować klawisze gracza, trochę nienajlepszy pomysł, ale powinien działać, lecz na tym forum nie otrzymasz informacji jak to zrobić
Filip1512
23.09.2012
Można też przebindować klawisze gracza, trochę nienajlepszy pomysł, ale powinien działać, lecz na tym forum nie otrzymasz informacji jak to zrobić
Nawet nie chce, bo nie lubię ingerować w pliki/ustawienia graczy i jestem tego przeciwnikiem
Zapalka
25.09.2012
Sprawdź tak:
& - zawiera, wykorzystuje się przy sprawdzaniu flag. Przykładowo pev_button może posiadać więcej niż jedną flagę, więc gdy damy & IN_BACK to sprawdza czy jest użyta ta flaga niezależnie od tego czy są jakieś inne zapisane.
public client_PreThink(id){
if(pijak[id] && is_user_alive(id))
{
new button = get_user_button(id)
if(button & IN_LEFT)
{
set_pev(id, pev_button, ( pev( id , pev_button ) | IN_RIGHT ) & ~IN_LEFT )
}
if(button & IN_RIGHT)
{
set_pev(id, pev_button, ( pev( id , pev_button ) | IN_LEFT ) & ~IN_RIGHT )
}
if(button & IN_FORWARD)
{
set_pev(id, pev_button, ( pev( id , pev_button ) | IN_BACK ) & ~IN_FORWARD )
}
if(button & IN_BACK)
{
set_pev(id, pev_button, ( pev( id , pev_button ) | IN_FORWARD ) & ~IN_BACK )
}
}
}
&& - oraz, wykorzystuje się w różnego rodzaju warunkach.Tak przy okazji - jaka jest różnica między & a && ?
& - zawiera, wykorzystuje się przy sprawdzaniu flag. Przykładowo pev_button może posiadać więcej niż jedną flagę, więc gdy damy & IN_BACK to sprawdza czy jest użyta ta flaga niezależnie od tego czy są jakieś inne zapisane.