Znajdź zawartość
Wyświetlanie wyników dla tagów 'prędkości' .
-
Zmiana prędkości gracza Istota prędkości u gracza Prędkość, z jaką porusza się gracz to iloczyn jego maksymalnej prędkości oraz spowolnienia (np. po skoku, otrzymaniu niektórych obrażeń czy podczas używania spadochronu). Jednakże chcąc dodać graczowi bonus prędkości, bądź go spowolnić, wystarczy się skupić na jego maksymalnej prędkości i tym się właśnie zajmiemy. Prędkość standardowa Standardowo, prędkość maksymalna gracza jest ustalana głównie w 3 sytuacjach (dla CS 1.6): Przy aktywowaniu broni, gdzie wartość maksymalnej prędkości gracza jest ustalana w zależności od przyjmowanej broni (210 - 260):210: AWP, G3SG1, SG550 220: M249 221: AK47 230: M3, M4A1 235: SG552 240: XM1014, Galil, Famas, AUG 245: P90 250: Glock, USP, P228, dEagle, Elites, FiveseveN, UZI, TMP, MP5, UMP ,Knife , HE, FB, SG, C4 260: Scout Przy rozpoczęciu podkładania bomby (0) Przy rozpoczęciu rozbrajania bomby (0) Ograniczenia górne prędkości maksymalnej Maksymalna prędkość graczy jest ograniczona bezwzględnie:do 1000 przez HLDS przez cvar serwera sv_maxspeed przez cvary każdego z graczy: cl_forwardspeed dla biegu do przodu cl_backspeed dla biegu do tyłu cl_sidespeed dla biegu w bok cl_upspeed dla szybkości wspinania się po drabinie cl_downspeed dla szybkości schodzenia z drabiny Jeśli chcemy zezwolić graczom na korzystanie z bonusów prędkości, warto ustawić cvar serwera sv_maxspeed na 1000. Do tego, możemy zmieść graczom limity ustalone przez nich samych: public client_connect(id){ client_cmd(id, "cl_forwardspeed 1000"); client_cmd(id, "cl_backspeed 1000"); client_cmd(id, "cl_sidespeed 1000"); client_cmd(id, "cl_upspeed 1000"); client_cmd(id, "cl_downspeed 1000"); } Zmiana prędkości gracza Maksymalna prędkość gracza zapisana jest jako dana prywatna bytu (pdata) pod identyfikatorem pev_maxspeed. Jednak dużo łatwiej będzie nam korzystać z gotowych natywów set_user_maxspeed i get_user_maxspeed. jednakże, jak już wiemy, prędkość gracza zmienia się m.in. wraz z aktywowaniem broni, a więc samo przypisanie jej do gracza nie wystarczy. W tym celu, poza zmianą prędkości gracza w miejscu, będziemy musieli oznaczyć go jako posiadacza bonusu prędkości, by w momencie, gdy zaistnieje reset jego prędkości, ponownie nadać utracony bonus. Event zmiany prędkości Do wykrycia resetu maksymalnej prędkości u gracza, służy event HamSandwich: Ham_CS_Player_ResetMaxSpeed. RegisterHam(Ham_CS_Player_ResetMaxSpeed, "player", "speed", 1); Funkcja Ham_CS_Player_ResetMaxSpeed wyłapuje dokładnie i tylko reset prędkości gracza, czyli właśnie to, czego chcemy. Ham_CS_Player_ResetMaxSpeed jest częścią HamSandwich od wersji 1.3. Jeśli korzystasz ze starszej wersji HamSandwich, zalecam Ci zaktualizować go do najnowszej wersji 1.3, dzięki czemu zyskasz dość sporo nowych eventów do wykorzystania. Jeśli jednak masz starą wersję i nie chcesz aktualizować modułu kanapki z szynką, zamiast eventu Ham_CS_Player_ResetMaxSpeed, użyj eventu, który wykonuje się przy każdym procesie myślenia przedmiotów, czyli zawsze, gdy potrzeba, oraz przy zmianie właściwości przedmiotów, zwłaszcza broni, podczas przeładowania, czy oddawania strzałów, czyli Ham_Item_PreFrame. Dla wersji HamSandwich starszych, niż 1.3 jest to jedyne rozwiązanie. WebKompilator na AMXX.pl posiada ham_const.inc w wersji 1.3, a więc obsługuje najnosze eventy HamSandwich. Jeśli tworzysz uniwersalny plugin, bądź modyfikację i nie wiesz, czy Administrator korzysta z aktualnej wersji HamSandwich, czy nie, warto sprawdzić, czy można wykorzystać event Ham_CS_Player_ResetMaxSpeed, czy będzie trzeba użyć Ham_Item_PreFrame. RegisterHam(get_player_resetmaxspeed_func(), "player", "speed", 1); Ham:get_player_resetmaxspeed_func(){ #if defined Ham_CS_Player_ResetMaxSpeed return IsHamValid(Ham_CS_Player_ResetMaxSpeed)?Ham_CS_Player_ResetMaxSpeed:Ham_Item_PreFrame; #else return Ham_Item_PreFrame; #endif }Autor funkcji get_player_resetmaxspeed_func: ConnorMcLeod. Przykładowe zastosowanie Przykład pluginu, który na początku każdej rundy, przyzna losowemu graczowi buff prędkości do 1000.0 wraz z komentarzami. Dlaczego CurWeapon NIE JEST eventem od resetu prędkości CurWeapon jest eventem, wywoływanym w momencie zmiany stanu broni. Czyli m.in. po każdym strzale, zmianie broni, przeładowaniu czy zakupieniu. Wiele osób BŁĘDNIE wykorzystuje event CurWeapon zamiast Ham_CS_Player_ResetMaxSpeed. Wymienię tutaj kilka najważniejszych z negatywnych skutków tego tragicznego rozwiązania. CurWeapon nie wykonuje się po spawnie graczy (choć powinien) i zmiana prędkości gracza zachodzi w praktyce dopiero po zmianie broni, bądź oddanym strzale czy przeładowaniu. CurWeapon zachodzi w momencie, kiedy zmienia się stan broni, jak wspomniałem, m.in. podczas strzału, choć nie powinien. Jest to zdecydowanie niepotrzebne i wpływa zauważalnie na zwiększenie lagów na serwerze. Używanie tego rozwiązania w połączeniu z wymagającymi obliczeniami, znacząco zwiększa lagi gracza i potem na forum pojawiają się tematy "Zacina mi CS, jak strzelam". CurWeapon wykonuje się dopiero pewien czas po evencie resetu prędkości gracza, przez co możemy zauważyć dość irytujące "bujanie' postacią podczas strzelania, czy zmiany broni. CurWeapon jest eventem zawodnym. Innymi słowy, może się nie wykonać, tym samym, nie reustalić prędkości gracza po resecie jego maksymalnej prędkości. Wystarczy bardzo szybko zmienić dokładnie czterokrotnie broń (z jednej na drugą), by zyskał status zawodnego i nie wykonał się, nie przyznając nam buffu, czy antybuffu. Dla standardowego połączenia, jest to okres ok. 1/4 sekundy. Czterokrotna zmiana broni w tym czasie nie jest trudna, zapewne zgodzą się ze mną Ci, którzy odblokowali labirynt w ukrytej krainie w Raymanie 2 bez wpisywania tajnego kodu w menu głównym. Przykład nieskutecznego działania eventu CurWeapon dla przykładowego pluginu: #include <amxmodx> #include <fun> public plugin_init(){ register_plugin("1000 speed", "1.0", "benio101"); register_event("CurWeapon", "CurWeapon", "be"); } public CurWeapon(id){ set_user_maxspeed(id, 75.0); } Jeśli nie potraficie w ciągu ok. 1/4 sekundy czterokrotnie zmienić broni, a chcielibyście się przekonać, że CurWeapon faktycznie NIE ZAWSZE działa, załączam Wam config, który możecie sobie zbindować pod wodolny klawisz. Po wciśnięciu klawisza, wasza prędkość wróci do podstawowej (zignoruje efekt speed buffa, spowolnienia, czy unieruchomienia) o ile jest on nadawany przez CurWeapon. Config z bindem pod klawisz "L", wymaga posiadania noża oraz pistoletu: alias "waits" "wait; wait; wait; wait; wait; wait" bind "l" "slot2; wait; slot3; waits; slot2; waits; slot3; waits; slot2;"Jak widzicie, zmienia on broń dokładnie czterokrotnie w ok. 1/4 sekundy. Pierwsza zmiana służy jedynie upewnieniu się, że rozpoczniemy zmiany od pistoletu. Dla wolnego połączenia lub mulącego serwera / CSa, należy zmniejszyć liczbę wait w aliasie z 6 do ok. 4. Zainteresowani zresztą trafią na to metodą prób i błędów. Źródło: amxx.pl | Autor: benio101
