←  Poradniki oraz Łatki

AMXX.pl: Support AMX Mod X i SourceMod

»

Fix
Ustawienie danej szybkosci po zmianie broni

Drewno. - zdjęcie Drewno. 14.01.2011

Zauważyłem w diablomodzie,że jest bug,że szybkość odpowiednią zmieni,dopiero,gdy zmieni się broń,przedstawię wam łatkę,dzięki której bedziemy miec dana predkosc,bez zmiany broni



W public client_PreThink ( id )

pod:
else 
{
if(casting[id]==1)
{
message_begin( MSG_ONE, gmsgBartimer, {0,0,0}, id )
write_byte( 0 )
write_byte( 0 )
message_end()
}
casting[id]=0
}

dodaj:
if (is_user_connected(id) && is_user_alive(id))
{
set_speedchange(id)
}


Teraz nie musisz zmieniac broni,zeby miec dana szybkosc...tylko,jak masz freeze time na serwerze,to po tym czasie szybkosc dziala po 1-2 sekundach;)Padło w tym temacie pytanie,że przez to nie będzie działać moc ninjy,to podaje na to sposób

new x_speed[33] = 1

w gdzieś public RoundStart(){
x_speed[i]=0

w public set_speedchange(id)
pod:
set_user_maxspeed(id, agi + speeds)

dodaj:
if (x_speed[id] > 0) set_user_maxspeed(id, agi + speeds + x_speed[id])

w public call_cast(id)
to:
case Ninja:
{
show_hudmessage(id, "Zwiekszyles sobie tymczasowo predkosc")
set_user_maxspeed(id,get_user_maxspeed(id)+50.0)
}

zamien na:

case Ninja:
{
show_hudmessage(id, "Zwiekszyles sobie tymczasowo predkosc")
x_speed[id] = 50
}

Użytkownik PedoBear. edytował ten post 16.01.2011 18:10
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 14.01.2011

Ale zauważ, że ninja ma taką moc na nożu, że na chwile zwiększa swoją prędkość, a ta chwila to właśnie na czas dopóki nie zmieni broni. Oczywiście można zastosować ten "fix", ale wtedy trzeba albo dać inną moc ninji (bo po co moc, która będzie od razu przestawać działać), albo dodać tą moc na prędkość inaczej.
Użytkownik sebul edytował ten post 14.01.2011 16:15
Odpowiedz

Drewno. - zdjęcie Drewno. 14.01.2011

to trzeba zrobić nową zmienną,coś jak player_b_speed[id] i przypisać ją ninjy w public call_cast(id)
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 14.01.2011

to trzeba zrobić nową zmienną,coś jak player_b_speed[id] i przypisać ją ninjy w public call_cast(id)

Ja wiem, ale ktoś sobie doda to co napisałeś i potem będzie się dopytywał czemu nie działa mu moc na nożu ninji ;]
Odpowiedz

Drewno. - zdjęcie Drewno. 16.01.2011

już dodałem jak zmienić moc ninjy,aby działała,zmienna x_speed też teraz będzie przydatna jako dodatek do /rune jako np. "Mikstura przyśpieszająca"Edytowałem ten temat,bo zrobiłem drobną optymalizację tego kodu.
Użytkownik PedoBear. edytował ten post 16.01.2011 11:03
Odpowiedz

GoldeN - zdjęcie GoldeN 18.01.2011

Super mi optymalizacja, aby plugin co 60-70 razy na sekundę ustawiał szybkość. ;x Już moim zdaniem lepsze by było puścić taska jedno-sekundowego od RoundStart i raz w nim wywołać to. (O ile się nie mylę też by tak działało)
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 18.01.2011

Super mi optymalizacja, aby plugin co 60-70 razy na sekundę ustawiał szybkość.

A no też fakt.

Już moim zdaniem lepsze by było puścić taska jedno-sekundowego od RoundStart i raz w nim wywołać to. (O ile się nie mylę też by tak działało)

Wydaje mi się, że można by to zrobić na tej samej zasadzie co leczenie co 5 sek. Czyli pod
set_task(5.0, "Timed_Healing", 0, "", 0, "b")

trzeba dodać
set_task(3.0, "ustaw_predkosc", 0, "", 0, "b")

i przed
public set_speedchange(id) {

dodać
public ustaw_predkosc() {
for(new i=1; i<=32; i++) if(is_user_alive(i)) set_speedchange(i);
}

Użytkownik sebul edytował ten post 18.01.2011 19:21
Odpowiedz

GoldeN - zdjęcie GoldeN 24.01.2011

@Up

Albo zamiast wywoływać taska w plugin_init wywołać go w jakimś evencie startu rundy, np sekundę po starcie rundy wywołać ustawienie prędkości i tyle, czyli task tylko raz przy starcie rundy.
Użytkownik GoldeN edytował ten post 24.01.2011 22:38
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 24.01.2011

No tak też można, ale myślę, że te rozwiązanie z tym taskiem w plugin_init nie jest takie złe (na pewno lepszy niż wykonywanie tego w "client_PreThink"), a tym bardziej, że u mnie funkcja ze zmianą prędkości zajmuje tylko 363 znaków (po znacznym przerobieniu), więc dużo do wykonania nie jest. No ale jak już zostało to wspomniane, to napiszę jak zrobić to z tym taskiem w "RoundStart".
Znajdź
public RoundStart(){
for (new i=0; i < 33; i++){

dodaj pod
set_task(get_cvar_float("diablo_klass_delay")+0.1, "ustaw_predkosc", i);

następnie znajdź
public set_speedchange(id) {

i dodaj przed
public ustaw_predkosc(id) {
if(is_user_alive(id)) set_speedchange(id);
}

Użytkownik sebul edytował ten post 04.05.2011 17:47
Odpowiedz

GoldeN - zdjęcie GoldeN 25.01.2011

Ja nie mówię, że jest źle, bo przy moim ustawieniu, byłoby dobre:

public set_speedchange(id)
{
if(DemageTake[id]==1) agi=(BASE_SPEED / 2)
else agi=BASE_SPEED

if (is_user_connected(id) && freeze_ended)
{
new speeds = race_speed[player_class[id]] + floatround(player_dextery[id]*1.1)
set_user_maxspeed(id, agi + speeds)
}
}


Ale w prethinku zlagowałoby prawdopodobnie serwer.
Odpowiedz

  • +
  • -
Pawlo^^ - zdjęcie Pawlo^^ 26.01.2011

Mógłby ktoś napisać jeszcze raz, tylko razem z ninją? Działa mi ta opcja pod healingiem, tylko wtedy buguje ninje. Próbowałem połączyć to z częścią drugą autora, ale nie dało się wtedy skompilować.
Odpowiedz

  • +
  • -
Divic - zdjęcie Divic 17.04.2011

dołączam się do prośby
Odpowiedz

  • +
  • -
::Gogiel:: - zdjęcie ::Gogiel:: 18.04.2011

Sebul to daj kod od siebie jeżeli chce Ci się xD ;)

Bo twoje kody są niezawodne :)
Odpowiedz

  • +
  • -
Kapucha112 - zdjęcie Kapucha112 05.11.2011

Ustawianie taska z flagą "b" (infinite) powoduje większe zużycie CPU niż w przypadku zrobienia tego w PreThinku.

Mimo wszystko PreThink nie powinien być używany do ustawiania prędkości gracza.

Proponuję Ham_Item_PreFrame albo CurWeapon - są to najbardziej efektywne metody ustawiania prędkości.
Odpowiedz