←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Źle działająca funkcja (freeze)

  • +
  • -
Filip1512 - zdjęcie Filip1512 22.09.2012

Cześć,
w wolnym czasie piszę i uzupełniam sobie mój własny plugin (coś w stylu ruletki, lecz pisane od 0 i inaczej działa), ale do rzeczy.
Funkcja, która odpowiada za zamrożenie na 5 sekund trochę źle działa - zamraża ona dopiero po 5 sekundach i w dodatku przy zmianie broni już nie ma tego zamrożenia.

Miejsca, w których jest ta funkcja(wedlug kolejnosci):

new bool:freeze[33];

register_event("CurWeapon","speed150a","be", "1=1")

                case 4: {
ColorChat(id, RED, "Nie mozesz sie ruszac przez 5 sekund!")
cs_set_user_money(id, (cs_get_user_money(id)-get_cvar_num("kasa_bonus")), 1)
freeze[id] = true
set_task(5.0, "zamrozenie", id)
}

public CurWeapon(id){
if(!is_user_alive(id)){
return PLUGIN_CONTINUE;
}

if(freeze[id] == true){

set_user_maxspeed(id, 0.1);
}
return PLUGIN_CONTINUE;
}

public zamrozenie(id){
set_user_maxspeed(id);
}


Całe sma:

Spoiler

Użytkownik `NN edytował ten post 22.09.2012 13:56
Odpowiedz

  • +
  • -
dasiek - zdjęcie dasiek 22.09.2012

Może spróbuj tak.
case 4: {
                                        ColorChat(id, RED, "Nie mozesz sie ruszac przez 5 sekund!")
                                        cs_set_user_money(id, (cs_get_user_money(id)-get_cvar_num("kasa_bonus")), 1)
                                        freeze[id] = true
set_user_maxspeed(id,-1.0)
                                        set_task(5.0, "zamrozenie", id)
                                }
public CurWeapon(id){
	    if(!is_user_alive(id)){
			    return PLUGIN_CONTINUE;
	    }
	    if(freeze[id] == true){			    set_user_maxspeed(id,-1.0)
	    }
	    return PLUGIN_CONTINUE;
}
public zamrozenie(id){
freeze[id] = false;
	    set_user_maxspeed(id,1.0);
}
Odpowiedz

  • +
  • -
Filip1512 - zdjęcie Filip1512 22.09.2012

Wartość -1 z tego co czytałem to zmieni prędkość na standardową, więc zmienię na 0.1 i zaraz dam odp :)

A więc tak - ustawiając w całości według tego co napisałeś, w momencie zamrozenia ekran bardzo lekko się trzęsie (tylko podczas próby ruchu), a po tych 5 sekundach całkowicie stoję w miejscu już bez drgania ekranu, lecz nadal nie mogę się ruszyć. Dopiero po zmianie broni mogę się ruszyć, nawet przed tym czasem.

Ustawiając wartości takie:

case 4: {
ColorChat(id, RED, "Nie mozesz sie ruszac przez 5 sekund!")
cs_set_user_money(id, (cs_get_user_money(id)-get_cvar_num("kasa_bonus")), 1)
freeze[id] = true
set_user_maxspeed(id, 0.1)
set_task(5.0, "zamrozenie", id)
}

public CurWeapon(id){
if(!is_user_alive(id)){
return PLUGIN_CONTINUE;
}
if(freeze[id] == true){
set_user_maxspeed(id, 0.1)
}
return PLUGIN_CONTINUE;
}
public zamrozenie(id){
freeze[id] = false;
set_user_maxspeed(id, -1.0);
}


Miałem na odwrót - przez pierwsze 5 sekund z ekranem (podczas próby ruchu) nic się nie dzieje, a po tych 5 sekundach już się zaczyna trząść, z bronią jest nadal tak samo, czyli po zmianie broni prędkość zmienia się na normalną, bez względu na to, czy minęło 5 sekund, czy nie.
Przy okazji, kolejna funkcja, która odpowiada za ograniczenie prędkości gracza (speed150) do 150, po zmianie broni nie działa, lecz jeśli nie zmieniam broni to wszystko jest ok.

Ps. Napisz mi na PW (bądź też nie), jeśli chcesz IP mojego testowego serwera i zobaczyć jak to wygląda :)
Odpowiedz

  • +
  • -
dasiek - zdjęcie dasiek 22.09.2012

Ekran się trzęsię jak ktoś chce się ruszyć (ponieważ wraca mu na poprzednie miejsce czy coś takiego:P) więc w funkcji zamrozenie musisz dodać CurWeapon(id) i powinno śmigać ;)
Odpowiedz

AztekHQS - zdjęcie AztekHQS 22.09.2012

Do zmiany prędkości gracza najlepiej użyć CmdStart
I lepiej zrobić to tak:

new freeze[33] = 0

register_forward(FM_CmdStart, "RealStartCMD")

public RealStartCMD(id, uc_handle, seed) {
if(is_user_alive(id) && is_user_connected(id)) {
if(freeze[id] == 1) set_user_maxspeed(id, 0.1)
else if(freeze[id] == 2) set_user_maxspeed(id, -1.0)
}
return FMRES_HANDLED
}

case 4: {
ColorChat(id, RED, "Nie mozesz sie ruszac przez 5 sekund!")
cs_set_user_money(id, (cs_get_user_money(id) - get_cvar_num("kasa_bonus")), 1)
freeze[id] = 1
set_task(5.0, "zamrozenie", id)
}

public zamrozenie(id) freeze[id] = 2

Użytkownik AztekHQS edytował ten post 22.09.2012 14:34
Odpowiedz

  • +
  • -
Filip1512 - zdjęcie Filip1512 22.09.2012

new bool:freeze[33] = 0


A przypadkiem zmienna bool nie może przyjmować tylko 2 wartości - prawda/fałsz?
Użytkownik `NN edytował ten post 22.09.2012 14:34
Odpowiedz

AztekHQS - zdjęcie AztekHQS 22.09.2012

A przypadkiem zmienna globalna nie może przyjmować tylko 2 wartości - prawda/fałsz?

Tak, poprawiłem :)
Odpowiedz

  • +
  • -
Filip1512 - zdjęcie Filip1512 22.09.2012

Ekran się trzęsię jak ktoś chce się ruszyć (ponieważ wraca mu na poprzednie miejsce czy coś takiego:P) więc w funkcji zamrozenie musisz dodać CurWeapon(id) i powinno śmigać ;)


A jak to zrobić ?:P
Odpowiedz