←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Zmiana klawiszy kierunku u gracza

  • +
  • -
Filip1512 - zdjęcie 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:

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
Odpowiedz

  • +
  • -
dasiek - zdjęcie 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 ;)
Odpowiedz

  • +
  • -
Filip1512 - zdjęcie 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
Odpowiedz

  • +
  • -
dasiek - zdjęcie 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 :P)

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.
Odpowiedz

  • +
  • -
Filip1512 - zdjęcie 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?
Odpowiedz

  • +
  • -
dasiek - zdjęcie 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. ;)
Odpowiedz

  • +
  • -
Filip1512 - zdjęcie 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ć ?:P
Użytkownik `NN edytował ten post 22.09.2012 21:02
Odpowiedz

  • +
  • -
radim - zdjęcie radim 23.09.2012

Może zamiast switcha i case, użyj warunku:
if(button & IN_LEFT)
set_pev(id, pev_button, IN_RIGHT)
Odpowiedz

  • +
  • -
Filip1512 - zdjęcie Filip1512 23.09.2012

Tzn. coś takiego?


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
Odpowiedz

  • +
  • -
dasiek - zdjęcie 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)

  }

}

}

Odpowiedz

  • +
  • -
Filip1512 - zdjęcie 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ś :P Na resztę klawiszy nie działa.
Użytkownik `NN edytował ten post 23.09.2012 11:26
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 23.09.2012

pev_button to suma bitowa definicji klawiszy
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
Odpowiedz

  • +
  • -
Filip1512 - zdjęcie 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ść...
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 23.09.2012

Wyznaczanie wektora z przeciwnym zwrotem to pomnożenie jego składowych przez -1 w xs masz xs_vec_neg
Odpowiedz

  • +
  • -
Filip1512 - zdjęcie Filip1512 23.09.2012

Chodziło mi bardziej o set_pev :)
Odpowiedz

  • +
  • -
Filip1512 - zdjęcie Filip1512 23.09.2012

Jak będzie wyglądać cały public client_PreThink poprzez użycie set_pev?
Odpowiedz

  • +
  • -
K!113r - zdjęcie 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ć ;)
Odpowiedz

  • +
  • -
Filip1512 - zdjęcie 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 :)
Odpowiedz

  • +
  • -
Zapalka - zdjęcie Zapalka 25.09.2012

Sprawdź tak:
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 )
}
}
}


Tak przy okazji - jaka jest różnica między & a && ?

&& - oraz, wykorzystuje się w różnego rodzaju warunkach.
& - 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.
Odpowiedz

  • +
  • -
Filip1512 - zdjęcie Filip1512 25.09.2012

Niestety, nie działa :/
Odpowiedz