Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[Poprawione] Lepszy sposób zmiany prędkości graczaZmiana prędkości gracza za pomoca Ham_CS_Item_GetMaxSpeed

nie chce mi sie tagowac

  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
26 odpowiedzi w tym temacie

#1 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 15.07.2014 16:46

*
Popularny

Uwaga: Poradnik poprawiony




Na tym forum już jest tutorial o zmianie prędkości gracza (link) lecz pokazuje nam tylko trzy opcje:
CurWeapon
Ham_CS_Player_ResetMaxSpeed
Ham_Item_PreFrame

Osobiście uważam że każda z nich jest w jakimś stopniu nie odpowiednia. Nawet to udowodnie. Wytłumaczenie dlaczego CurWeapon jest złe do ustawienia zmiany prędkości gracza znajdziecie tutaj. Zostały nam zatem jeszcze dwie opcje do wykluczenia.

Ham_Item_PreFrame
Ma tylko jedną wadę tzn. to jest think wykonuje się tyle samo ile gracz posiada fps. Zatem podczas 1 min gry może wykonać się 6000 razy nawet jeśli stoimy w miejscu i totalnie nic nie robimy haha.gif Czegoś tak nie optymalnego nie chcemy. Dlatego ta opcja od razu odpada.

Ham_CS_Player_ResetMaxSpeed
Patrząc na to teoretycznie to ta funkcja nie posiada wad ale jednak w praktyce się znajdują. Tzn:
• wykonuje sie parę razy więcej niż powinna gdyż nasza prędkość jest resetowana także podczas freeze time'u, śmierci, spawn'u
• W jakiś sposób trzeba rozróżnić wykonanie się tej funkcji w czasie freeze time'u i po nim sad.png
NAJWAŻNIEJSZE Ta funkcja jest dostepna dopiero w wersji 1.3 hamsandwich'a co jest jej największą wadą gdyż z wielu przyczyn nie każdy ma mozliwość jego aktualizacji sad.png

Zatem w jaki sposób ustawiać prędkość graczu? Zastanówmy się. Wszystkie dostępne sposoby jakie znalazłem na necie mówią o wymuszaniu prędkości gracza w jakimś evencie lecz po co mamy wymuszać nową wartość prędkości?? Nie lepiej sprawić by CS sam ustawił taką jaką chcemy? Jasne że lepiej to dlaczego nie haha.gif Dlatego wykombinowałem coś swojego hihihi

Do zmiany wartości którą CS ustawia nam jako prędkość będziemy potrzebować:
• hamsanwich'a
• fakemet'y
• umiejętności myślenia

Uwaga jeśli nie masz choćby jednej z wyżej wymienionych rzeczy ten tutorial ci się nie przyda!!!

W teorii pomyślałem tak: złapmy Ham_Item_Deploy pre/post i podmieńmy tam wartość prędkości na swoją własną lecz niestety w praktyce się przekonałem że offsety między Ham_Item_Deploy pre a Ham_Item_Deploy post są przeładowywane sad.png Dlatego będziemy zmuszeni do operowania tylko na Ham_Item_Deploy post ale na szczęście niczemu to nie wadzi haha.gif

Niestety musimy zmierzyć się jeszcze z jedną acz ostatnią przeszkodą tzn. classname do RegisterHam sad.png Funkcja Ham_Item_Deploy ma to w sobie że wykonuje się dla broni nie dla gracza dlatego nie można złapać momęt pokazania broni za pomocą classname == player, trzeba używać każdego z osobna classname broni. Ma to swoją wadę i zaletę:
Zaleta: w przypadku chęci zwiększenia prędkości np. tylko na nożu wystarczy złapać tylko classname == weapon_knife
Wada: jesli chce się zmieniać prędkość na wszystkich boniach trzeba złapać ten event dla wszystkich classname standardowych broni

Lista classname standardowych broni: klik

Ogółem to wada jest tak mizerna że nie ma co się o nią fapać haha.gif Bo wystarczy raz na całą mapę przejechać po 31 classname

Ham_CS_Item_GetMaxSpeed posłuży nam jako event zmiany prędkości (ale tylko pre)

Wystarczy gadania. Zróbmy kod:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
//Wymagane moduły
//fakemeta tylko do sprawdzania id gracza/broni (opcjonalny moduł)

const m_pPlayer = 41
const m_iId = 43

public plugin_init()
{
	new classname[32] // Zmienna do której będziemy pobierać classname poszczególnych broni
	for(new i=1;i<31;++i)	if(i!=2)
	{
		//Pętelka na wszystkie bronie

		get_weaponname(i,classname,31) //Pobieram classname danej broni
		
		RegisterHam( Ham_CS_Item_GetMaxSpeed, classname, "GetItemMaxSpeed") //Rejestruje uchwyt na event Ham_CS_Item_GetMaxSpeed dla danego classname broni
		//Ważne 4 arg musi == 0 by to był event typu pre
	}
}

public GetItemMaxSpeed(wid) // tutaj łapie event
{
	//Pamiętajcie wid to id bytu broni (nie mylić z CSW_*)
	
	new weapon,id,Float:Speed // robie zmiennej na id gracza i id z CSW_*
	
	id = get_pdata_cbase(wid,m_pPlayer,4) //Ważne tylko takim sposobem pobierać id gracza który trzyma broń
	// Gdyż użycie pev/entity_get_edict może zwrócić -1 nawet jeśli gracz trzyma broń w momęcie startu/końca pracy serwera gdyż
	// Dane z pev/entity_get_edict są czasami (pod dużym obciążeniem) aktualizowane później niż dane pod offsetem m_pPlayer
	//Tak w ogóle to pobieram id gracza xD
	
	weapon = get_pdata_int(wid,m_iId,4) // Pobieram id broni to z CSW_*
	
	
	//Zeby przytoczyć trochę praktyki to dajmy graczu który posiada flagę ADMIN_LEVEL_H prędkość równą 500 na wszystkich broniach
	// oprócz C4 bo na nim ustawimy 900 xD
	
	//Najpierw sprawdzamy czy posiada flagę ADMIN_LEVEL_H
	if(get_user_flags(id) & ADMIN_LEVEL_H)
	{
		//Teraz muzimy sprawdzić czy aktywna broń to nie C4
		if(weapon != CSW_C4)
		{
			//Jeśli to nie C4
			//Ustawiamy prędkość równą 500.0
			Speed = 500.0
		}
		else
		{
			//Lecz jeśli to C4 to 900
			Speed = 900.0
		}
	}
	//Zmieniam zwracana wartosc
	SetHamReturnFloat(Speed)
	//Informuje o zmianie zwracanej wartosci
	return HAM_OVERRIDE
}
Ten sposób zmiany prędkości nie ma większych wad bo:
• uruchamia się tylko prawie tylko wtedy kiedy naprawdę jest to nam potrzebne niepotrzebnie uruchamia sie podczas: włączania/wyłączania zoom'a, startu/zakończenia rozbrajania paki, startu/zakończenia plantowania paki, pod koniec freeze time (Ham_CS_Player_ResetMaxSpeed uruchamia się częściej)
• nie trzeba bawić sie freeze time'em bo CS robi to za nas!!
• możliwość kożystania już od pierwszej (oficjalnej w amxmodx'ie) wersji hamsandwich'ahaha.gif
• nie da się tego zbugować od strony clienta

Opis offset'ów:
m_pPlayer - Typ edict(int). Przechowuje coś w stylu ownera dla danej broni lub byt do którego jest aktualnie przyczepiona (jedno i to samo)
m_iId - Typ int. Przechowuje id broni (to z CSW_*)

To chyba na tyle. Prosty, łatwy i optymalny sposób na zmiane prędkości gracza haha.gif

Użytkownik BlackPerfum edytował ten post 23.07.2014 23:46

  • +
  • -
  • 14
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#2 Oporowiec.

    Zaawansowany

  • Zbanowany

Reputacja: 10
Początkujący

  • Postów:146
  • Imię:Wojtek
  • Lokalizacja:Zadupie
Offline

Napisano 16.07.2014 15:56

ooo :D
coś dla mnie, od wczoraj męczę się z ominięciem bugu przy zmianie broni, grawitacja mi wracała na 800 a szybkość na podstawową.

Poradnik mi się przydał i to bardzo :)
bardzo ładnie wygląda, ładnie napisany :)
leci lajk :)


Reset statystyk: http://amxx.pl/topic...statystyk-2014/

 

5392 oraz 6262 Moim autorytetem  :) 


#3 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 17.07.2014 20:41

*
Popularny

Zajawka


ale już nie pamiętam

A szkoda.
 

Wstęp :: Wyjaśnienie ogólne



Ham_Item_Deploy wykonuje się, gdy gracz wyciąga broń, zresztą zgodnie z dokumentacją kanapki.
Zmiana prędkości gracza następuje jedynie m.in. po zmianie broni.
 
Ham_Item_Deploy różni się od CurWeapon tym, że jest niezawodne i wykonuje się równo raz dla wyciągnięcia broni.
Jest to zdecydowanie lepsza metoda od CurWeapon, gdyż jest niezawodna; jednakże jest to tylko jeden z wielu przypadków, gdy następuje maksymalna zmiana prędkości gracza.
 
Innymi słowy, nie uwzględniłeś ŻADNEGO przypadku zmiany maksymalnej prędkości gracza poza tym jednym, jedynym, tj. po zmianie broni, co spowoduje, że Twoja metoda zadziała jedynie w nielicznych przypadkach.
 

Czarno na białym :: Logi



Ponieważ, pomimo przeczytania kilki artykułów na temat zmiany prędkości u gracza, dalej "nie pamiętasz", kiedy dokładnie ona zachodzi i, będąc członkiem Support Teamu AMXX.pl, piszesz takie brednie, mało tego, podając argumenty wyssane z palca (czyt. ŁŻESZ!), przedstawię czarno na białym, że się mylisz.
 
Wobec tego gwałtu na jakości i rzetelności Support Teamu, którego się dopuściłeś, po blisko pół roku, na nowo zainstalowałem starego, poczciwego CSa 1.6 i jakże kochanego HLDSa tylko po to, by pokazać, jak kłamliwym w swej "profesji" i niegodnym jakiegokolwiek zaufania w tej kwestii uzerem (przez "z" specjalnie) jesteś.
 
Stworzyłem prosty plugin, który będzie notował pewne eventy związane z tym tematem i linkowanym, plus kilka eventów jako punkt odniesienie (start i koniec rundy).
Dodatkowo, notowana będzie maksymalna prędkość gracza tuż po wystąpieniu eventu, oraz moje wypowiedzi, odpowiadające działaniom przeze mnie podejmowanym.
Plain SMA (myślę, że nie wymaga komentarza):
Spoiler

Plain log (cut to session, puste linie dodane przeze mnie w celu zwiększenia czytelności).
Spoiler

Notki odn. testów:

  • sv_maxspeed na serwerze testowym wynosi 1000
  • Dodałem się jako admina w postaci jednej linijki do users.ini
  • Reszta bez zmian; czysta instalka:
    • HLDS 48/1.1.2.7/Stdio 6027 secure  (10)
    • Metamod 1.21.1-am
    • AMXX 1.8.3 3983 (base + cstrike); linux

Ham_Item_PreFrame
Ma tylko jedną wadę tzn. to jest think wykonuje się tyle samo ile gracz posiada fps. Zatem podczas 1 min gry może wykonać się 6000 razy nawet jeśli stoimy w miejscu i totalnie nic nie robimy  Czegoś tak nie optymalnego nie chcemy. Dlatego ta opcja od razu odpada.

Patrzę na logi trwające 2 minuty i 17 sekund i nie widzę, by Ham_Item_PreFrame wykonał się (6000 / 10) × (2 × 60 + 17) = 100 × 137 = 13700 razy., a podpowiem, że miałem ok. 100 fpsów.
 
Ham_Item_PreFrame bowiem nie wykonuje się "tyle samo ile gracz posiada fps"; czyt. ŁŻESZ.
 
 

Ham_CS_Player_ResetMaxSpeed
Patrząc na to teoretycznie to ta funkcja nie posiada wad ale jednak w praktyce się znajdują. Tzn:
• wykonuje sie parę razy więcej niż powinna gdyż nasza prędkość jest resetowana także podczas freeze time'u, śmierci, spawn'u

  • BzduraHam_Item_Deploy nie wykonuje się ani razu z faktu wystąpienia freezetime, tak samo jak Ham_CS_Player_ResetMaxSpeed.
    Logi po rozpoczęciu freezetime:
    L 07/17/2014 - 19:45:38: [test.amxx]L 07/17/2014 - 19:45:35: [test.amxx] logevent_round_start
    L 07/17/2014 - 19:45:36: [test.amxx] Benio: Dolaczenie
  • BzduraHam_Item_Deploy wykonuje się tyle razy samo, co Ham_CS_Player_ResetMaxSpeed po śmierci, dokładnie 1 raz.
    Logi po śmierci:
    L 07/17/2014 - 19:47:23: [test.amxx] Benio: Kill
    L 07/17/2014 - 19:47:23: [test.amxx] MaxSpeed: 250
    L 07/17/2014 - 19:47:24: [test.amxx] logevent_round_end
    L 07/17/2014 - 19:47:24: [test.amxx] Ham_Item_Deploy
    L 07/17/2014 - 19:47:24: [test.amxx] Ham_CS_Player_ResetMaxSpeed
    L 07/17/2014 - 19:47:24: [test.amxx] Ham_Item_PreFrame
    L 07/17/2014 - 19:47:24: [test.amxx] Ham_Killed
  • BzduraHam_CS_Player_ResetMaxSpeed ma się wykonywać podczas spawnu wielokrotnie (czyt. dla każdej broni).
    Logi ze spawnu:
    L 07/17/2014 - 19:45:38: [test.amxx] Ham_CS_Player_ResetMaxSpeed
    L 07/17/2014 - 19:45:38: [test.amxx] Ham_Item_PreFrame
    L 07/17/2014 - 19:45:38: [test.amxx] Ham_Item_Deploy
    L 07/17/2014 - 19:45:38: [test.amxx] MaxSpeed: 1000
    L 07/17/2014 - 19:45:38: [test.amxx] Ham_CS_Player_ResetMaxSpeed
    L 07/17/2014 - 19:45:38: [test.amxx] MaxSpeed: 250
    L 07/17/2014 - 19:45:38: [test.amxx] Ham_Item_PreFrame
    L 07/17/2014 - 19:45:38: [test.amxx] MaxSpeed: 250
    L 07/17/2014 - 19:45:38: [test.amxx] Ham_CS_Player_ResetMaxSpeed
    L 07/17/2014 - 19:45:38: [test.amxx] MaxSpeed: 250
    L 07/17/2014 - 19:45:38: [test.amxx] Ham_Item_PreFrame
    L 07/17/2014 - 19:45:38: [test.amxx] MaxSpeed: 250
    
     
    Jak widać w logach, po Ham_Item_Deploy prędkość wynosi tyle, co sv_maxspeed, a dopiero Ham_CS_Player_ResetMaxSpeed dla każdej kolejnej broni, ustawiają odpowiednią prędkość.
    Konkluzja: Twoja pożal się "metoda" nie zadziała, gdyż zostanie nadpisana kolejnymi wystąpieniami Ham_CS_Player_ResetMaxSpeed po których Ham_Item_Deploy już nie występuje!
    Innymi słowy, gracz nie uzyska zmiany prędkości dopóki po spawnie nie zmieni broni (tak samo, jak przy CurWeapon)! I tu JUŻ wychodzi Twoja ignorancja w kwestii 1."Nie pamiętam", 2. Braku jakiegokolwiek rzetelnego sprawdzenia tego, o czym piszesz.

W jakiś sposób trzeba rozróżnić wykonanie się tej funkcji w czasie freeze time'u i po nim

Bzdura. Zajmuje się tym Ham_CS_Player_ResetMaxSpeed, który i tak nadpisze zmiany dokonane w Ham_Item_Deploy podczas freezetime, o czym napisałem wyżej.
 


NAJWAŻNIEJSZE Ta funkcja jest dostepna dopiero w wersji 1.3 hamsandwich'a co jest jej największą wadą gdyż z wielu przyczyn nie każdy ma mozliwość jego aktualizacji

Bzdura. HamSandwich w wersji 1.3 jest domyślnym modułem AMXX od wersji 1.8.3, a więc NIE WYMAGA AKTUALIZACJI.
 
Przykład Twojej ignorancji i jej fatalne skutki, czyli Zoom.


L 07/17/2014 - 19:46:25: [test.amxx] Benio: Glock > AWP
L 07/17/2014 - 19:46:25: [test.amxx] MaxSpeed: 250
L 07/17/2014 - 19:46:26: [test.amxx] Ham_Item_Deploy
L 07/17/2014 - 19:46:26: [test.amxx] MaxSpeed: 250
L 07/17/2014 - 19:46:26: [test.amxx] Ham_CS_Player_ResetMaxSpeed
L 07/17/2014 - 19:46:26: [test.amxx] MaxSpeed: 210
L 07/17/2014 - 19:46:26: [test.amxx] Ham_Item_PreFrame
L 07/17/2014 - 19:46:26: [test.amxx] MaxSpeed: 210
 
L 07/17/2014 - 19:46:30: [test.amxx] Benio: Zoom
L 07/17/2014 - 19:46:30: [test.amxx] MaxSpeed: 210
L 07/17/2014 - 19:46:32: [test.amxx] Ham_CS_Player_ResetMaxSpeed
L 07/17/2014 - 19:46:32: [test.amxx] MaxSpeed: 150
L 07/17/2014 - 19:46:32: [test.amxx] Ham_Item_PreFrame
L 07/17/2014 - 19:46:32: [test.amxx] MaxSpeed: 150
 
L 07/17/2014 - 19:46:36: [test.amxx] Benio: Zoom x2
L 07/17/2014 - 19:46:36: [test.amxx] MaxSpeed: 150
L 07/17/2014 - 19:46:36: [test.amxx] Ham_CS_Player_ResetMaxSpeed
L 07/17/2014 - 19:46:36: [test.amxx] MaxSpeed: 150
L 07/17/2014 - 19:46:36: [test.amxx] Ham_Item_PreFrame
L 07/17/2014 - 19:46:36: [test.amxx] MaxSpeed: 150
 
L 07/17/2014 - 19:46:40: [test.amxx] Benio: Zoom 0
L 07/17/2014 - 19:46:40: [test.amxx] MaxSpeed: 150
L 07/17/2014 - 19:46:40: [test.amxx] Ham_CS_Player_ResetMaxSpeed
L 07/17/2014 - 19:46:40: [test.amxx] MaxSpeed: 210
L 07/17/2014 - 19:46:40: [test.amxx] Ham_Item_PreFrame
L 07/17/2014 - 19:46:40: [test.amxx] MaxSpeed: 210

Po zmianie broni na AWP, Ham_Item_Deploy zmienia prędkość na 250, a następnie Ham_CS_Player_ResetMaxSpeed na 210, po czym Ham_Item_Deploy już nie występuje ponownie.
Innymi słowy, Ham_CS_Player_ResetMaxSpeed nadpisze zmianę dokonaną w Ham_Item_Deploy tym samym sprawiając, że, znowu, Twoją metodę można wysłać jedynie do /dev/null.
Co się stanie po Zoomie? To samo! Ham_Item_Deploy nie wystąpi podczas, gdy Ham_CS_Player_ResetMaxSpeed owszem, nadpisując ustawienia Twojej (tfu!) "metody".
 
Spawnem i Zoom to nie jedyne eventy, których nie uwzględniłeś, a jeśli do Ham_Item_Deploy dodasz je, oraz wszystkie pozostałe eventy, podczas których zmienia się prędkość broni, ale nie ma ich w załączonych logach ze względów ograniczonej długości posta, uzyskałbyś dokładnie event Ham_CS_Player_ResetMaxSpeed, który to przecież pochodzi wprost z silnika gry i dlatego jest najoptymalniej zmieniać prędkość właśnie tam.
 
Jakiekolwiek rzadsze podmiany wartości zawsze zostaną nadpisane poprzez niekryte wystąpienia Ham_CS_Player_ResetMaxSpeed, a częstsze będą mniej optymalne.
 

TL;DR



27920 wykazał się, jako członek Support Teamu AMXX.pl, niekompetencją i totalną ignorancją, przedstawiając nieprzetestowany i niedziałający, zupełnie błędny sposób, który wyłoży się już przy, chociażby, wyciągnięciu AWP (sprawdź sam!), mało tego, bezczelnie nazywając tę "metodę" "lepszym sposobem zmiany prędkości gracza" (sic!), pokazując, msz, że nie jest godny rangi Support Teamu, gdyż nawet nie przetestował tego jakże błędnego sposobu, do tego okłamując czytelników, podając fałszywe argumenty "za" swoją niedziałającą metodą.

 

PS


Ode mnie, oczywiście, soczysty, czerwony minus i wniosek o zmianę rangi.



#4 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 17.07.2014 22:34

Ham_Item_Deploy wykonuje się, gdy gracz wyciąga broń, zresztą zgodnie z dokumentacją kanapki.
Zmiana prędkości gracza następuje jedynie m.in. po zmianie broni

W 100% się zgadzam ale to niczemu nie wadzi
 

Ham_Item_Deploy różni się od CurWeapon tym, że jest niezawodne i wykonuje się równo raz dla wyciągnięcia broni.
Jest to zdecydowanie lepsza metoda od CurWeapon, gdyż jest niezawodna; jednakże jest to tylko jeden z wielu przypadków, gdy następuje maksymalna zmiana prędkości gracza.

Innymi słowy, nie uwzględniłeś ŻADNEGO przypadku zmiany maksymalnej prędkości gracza poza tym jednym, jedynym, tj. po zmianie broni, co spowoduje, że Twoja metoda zadziała jedynie w nielicznych przypadkach.

Ponieważ, pomimo przeczytania kilki artykułów na temat zmiany prędkości u gracza, dalej "nie pamiętasz", kiedy dokładnie ona zachodzi i, będąc członkiem Support Teamu AMXX.pl, piszesz takie brednie, mało tego, podając argumenty wyssane z palca (czyt. ŁŻESZ!), przedstawię czarno na białym, że się mylisz.

Zauważ pewną rzecz ja nie zmieniam maksmymalnej prędkości gracza!!! Cs robi to za mnie ja jedynie ustawiam standardową wartość na która ma zmieniać... Dlatego nie ma najmniejszej różnicy czy w CS'ie jest 5 czy 912084 eventów zmieniających prędkość gracza

 

Patrzę na logi trwające 2 minuty i 17 sekund i nie widzę, by Ham_Item_PreFrame wykonał się (6000 / 10) × (2 × 60 + 17) = 100 × 137 = 13700 razy., a podpowiem, że miałem ok. 100 fpsów.
 
Ham_Item_PreFrame bowiem nie wykonuje się "tyle samo ile gracz posiada fps"; czyt. ŁŻESZ.

Zaskocze cię. Banalny plugin:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

new Float:Time[2],x,y
const	m_pActiveItem = 373

public plugin_init()
{
	register_plugin("PreFrame","Beta","BlackPerfum")
	register_clcmd("say /start","start")
	RegisterHam(Ham_Item_PreFrame,"weapon_knife","PreFrame")
}

public start(id) y = get_pdata_cbase(id,m_pActiveItem,5)

public PreFrame(id)
{
	if(y != id)	return
	
	global_get(glb_time,Time[0])
	if(!Time[1])	Time[1] = Time[0]
	
	x++
	if(Time[0]-1.0 > Time[1])
	{
		client_print(0,print_chat,"Po %f PreFrame wykonalo sie %i razy",Time[0]-Time[1],x)
		x = 0
		Time[1] = Time[0]
	}
}
• przeczytaj ten banalny skrawek kodu
• wyciągnij nóż
• wpisz say /start
• obserwój co się dzieje
• (wyniki porównój ze swoimi fps'ami oraz popatrz na interwał (dokładnie to na liczbę po przecinku))
 

Jakiekolwiek rzadsze podmiany wartości zawsze zostaną nadpisane poprzez niekryte wystąpienia Ham_CS_Player_ResetMaxSpeed, a częstsze będą mniej optymalne.

Tak zgadzam się z tym lecz Ham_CS_Player_ResetMaxSpeed też skądś pobiera standardową maks prędkośc dla danej broni i właśnie zmieniam wartość nie maks prędkości a jedynie wartość z miejsca w którym jest przechowywana wartość standardowa
 

BlackPerfum wykazał się, jako członek Support Teamu AMXX.pl, niekompetencją i totalną ignorancją, przedstawiając nieprzetestowany i niedziałający, zupełnie błędny sposób, który wyłoży się już przy, chociażby, wyciągnięciu AWP (sprawdź sam!), mało tego, bezczelnie nazywając tę "metodę" "lepszym sposobem zmiany prędkości gracza" (sic!), pokazując, msz, że nie jest godny rangi Support Teamu, gdyż nawet nie przetestował tego jakże błędnego sposobu, do tego okłamując czytelników, podając fałszywe argumenty "za" swoją niedziałającą metodą.

Nie wieżyłem bo podczas testów zawsze działało na każdej broni. Po wielu próbach zauważyłem że DLA NOWYCH BINAREK offset dla broni z 1 slota i 5 zostaje zmieniony... Szukałem offsetu ale ciągle pokazuje błędne informacje bo offsetu się przeładowywują, o ile znajdę to poprawię funkcję


21977 nie bądź tak do przodu haha.gif Przyznaję moja wina że nie sprawdziłem czy na binarkach > 5*** działa ale zauważ że to dobrze działa na broniach ze slotów 2/3/4 a nawet powiem więcej spróbuj wywołać Ham_CS_Player_ResetMaxSpeed na graczu który ma bron ze slota 2/3/4 a zauwazysz ze jego predkosc sie nie zmienila
  • +
  • -
  • -1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#5 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 17.07.2014 23:33

  • Zmieniasz wartość prywatną bytu broni, którą Ham_CS_Player_ResetMaxSpeed ustawi graczowi, innymi słowy, zmieniasz prędkość maksymalną gracza, tylko pośrednio.
    Nie mniej jednak, właśnie z tego powodu, że zmieniasz wartość jedynie dla broni, jakikolwiek inny event, po którym następuje zmiana maksymalnej prędkości gracza, nadpisze Twoją zmianę u gracza, przez co Twoja "metoda" nie zadziała, zrozum to wreszcie.
  • W banalnym pluginie popełniłeś banalny błąd, mianowicie klasą winien być gracz, nie zaś nóż, gdyż to u gracza zmieniamy prędkość maksymalną, nie u noża.

  • Tak zgadzam się z tym lecz Ham_CS_Player_ResetMaxSpeed też skądś pobiera standardową maks prędkośc dla danej broni i właśnie zmieniam wartość nie maks prędkości a jedynie wartość z miejsca w którym jest przechowywana wartość standardowa
    Zgadza się, że Ham_CS_Player_ResetMaxSpeed skądś pobiera prędkość do ustawienia, ale jedynie w przypadku zmiany broni jest to m_flWeaponSpeed, a jak podkreślałem kilkukrotnie, zmiana broni to NIE JEST JEDYNY event, który wpływa na wystąpienie Ham_CS_Player_ResetMaxSpeed, dlatego Twoja metoda nie będzie działać, jak wspomniałem, choćby po wystąpieniu Zoom, który wywoła Ham_CS_Player_ResetMaxSpeed a ten nie będzie czytał wartości z m_flWeaponSpeed, co wytłumaczyłem wraz z załączonymi logami w poście wyżej.

  • Nie wieżyłem bo podczas testów zawsze działało na każdej broni. Po wielu próbach zauważyłem że DLA NOWYCH BINAREK offset dla broni z 1 slota i 5 zostaje zmieniony... Szukałem offsetu ale ciągle pokazuje błędne informacje bo offsetu się przeładowywują, o ile znajdę to poprawię funkcję


    21977 nie bądź tak do przodu Przyznaję moja wina że nie sprawdziłem czy na binarkach > 5*** działa ale zauważ że to dobrze działa na broniach ze slotów 2/3/4 a nawet powiem więcej spróbuj wywołać Ham_CS_Player_ResetMaxSpeed na graczu który ma bron ze slota 2/3/4 a zauwazysz ze jego predkosc sie nie zmienila
    Offsety są stałe i zapisane w pliku hamdata.ini. A co do slotów, to nie ma to żadnego znaczenia; Ham_CS_Player_ResetMaxSpeed (dla zmiany broni) wywołuje się bez względu na to, jaki slot ma wyciągana broń, co zresztą widać po logach w poście wyżej (27–34 zmiana z noża na glocka).

Przyznaj się do błędu, a nie tkwisz w tym błędnym przekonaniu i nie przyjmujesz do wiadomości, że Ham_CS_Player_ResetMaxSpeed wywołuje się NIE TYLKO podczas zmiany broni.



#6 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 18.07.2014 00:11

Zmieniasz wartość prywatną bytu broni, którą Ham_CS_Player_ResetMaxSpeed ustawi graczowi, innymi słowy, zmieniasz prędkość maksymalną gracza, tylko pośrednio.
Nie mniej jednak, właśnie z tego powodu, że zmieniasz wartość jedynie dla broni, jakikolwiek inny event, po którym następuje zmiana maksymalnej prędkości gracza, nadpisze Twoją zmianę u gracza, przez co Twoja "metoda" nie zadziała, zrozum to wreszcie.

Mylisz się!!! Kolejny event nie nadpisze tej wartości. Gdyż pobierze wartość z offsetu m_flWeaponSpeed danej broni a to ją zmieniam a nie maksymalną prędkość gracza. Pewnie nadal nie wierzysz to lepiej ci to wytłumaczę Ham_Item_Deploy wykonuje się przed Ham_CS_Player_ResetMaxSpeed zatem według twojego rozumowania wartość prędkości gracza ustawiona w Ham_Item_Deploy zmieni się w Ham_CS_Player_ResetMaxSpeed. Zatem dlaczego prędkość działa na broniach ze slotu 2/3/4? I tu twoje rozumowanie jest błędne...
 

Zgadza się, że Ham_CS_Player_ResetMaxSpeed skądś pobiera prędkość do ustawienia, ale jedynie w przypadku zmiany broni jest to m_flWeaponSpeed, a jak podkreślałem kilkukrotnie, zmiana broni to NIE JEST JEDYNY event, który wpływa na wystąpienie Ham_CS_Player_ResetMaxSpeed, dlatego Twoja metoda nie będzie działać, jak wspomniałem, choćby po wystąpieniu Zoom, który wywoła Ham_CS_Player_ResetMaxSpeed a ten nie będzie czytał wartości z m_flWeaponSpeed, co wytłumaczyłem wraz z załączonymi logami w poście wyżej.

Tu tez się mylisz ale tylko częściowo bo funkcja Ham_CS_Player_ResetMaxSpeed zawsze pobiera wartość prędkości z Ham_CS_Item_GetMaxSpeed a to z kolei dla broni ze slotów 2/3/4 pobiera wartość z m_flWeaponSpeed a z innych to są stałe, dlatego na sloty 1/5 nie działa mój sposób (w nowych binarkach). To dlaczego jak użyje zoom'a to zwalniam? Bo wartość pobrana jest dzielona/mnożona/dodawana ale nie jest używana żadna stała liczba a nadal pobiera się wartość z Ham_CS_Item_GetMaxSpeed.

 

Offsety są stałe i zapisane w pliku hamdata.ini. A co do slotów, to nie ma to żadnego znaczenia; Ham_CS_Player_ResetMaxSpeed (dla zmiany broni) wywołuje się bez względu na to, jaki slot ma wyciągana broń, co zresztą widać po logach w poście wyżej (27–34 zmiana z noża na glocka).

Mam na myśli offsety pdata nie te z hamdata.ini. Wywołuje się stale ale inaczej pobiera maksymalną prędkość gracza.
 

Przyznaj się do błędu, a nie tkwisz w tym błędnym przekonaniu i nie przyjmujesz do wiadomości, że Ham_CS_Player_ResetMaxSpeed wywołuje się NIE TYLKO podczas zmiany broni.

Wiem że:

Ham_CS_Player_ResetMaxSpeed wywołuje się NIE TYLKO podczas zmiany broni.

Wytłumacz sobie dlaczego na slotach 2/3/4 to dziala a zrozumiesz że moja metoda jest dobra ale niestety przez zmiany w kodzie cs'a prędkość ze slotów 1/5 znajduje się w stałych a nie w zmiennych.

Dowód na moje rozumowanie
Tak jest ustawiana maks prędkość do pobrania dla danej broni:
• ze slotu 2/3/4 (tu jest akurat kod deagl'a) (podam jeden przykład bo tego duzo jest):
Spoiler


• kod ze slotu 1/5 (kod m249):
Spoiler


Poza tym to znalazłem rozwiązanie. Podmieniam 1 post i teraz wszystko działa jak należy możesz sprawdzać

Użytkownik BlackPerfum edytował ten post 18.07.2014 00:12

  • +
  • -
  • 2
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#7 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 18.07.2014 00:44

Wybacz, ale nazwijmy rzeczy po imieniu: pier**lisz jak potłuczony.

Tłumaczę Ci, dlaczego się mylisz, pokazuję Ci logi, które jednoznacznie to potwierdzają i przykłady, kiedy twój kod nie zadziała.

 

Mimo to, wyskakujesz z jakimiś slotami, wersjami HLDSa i teoriami bez pokrycia.

Bierzemy Twój przykładowy plugin z "poradnika", kupujemy AWP i mamy prędkość 210, nie zaś 700 i żadne bajki w tym temacie tego nie zmienią.

 

Dla mnie EOT, temat do usunięcia, a Ty do degradacji.



#8 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 18.07.2014 12:11

Zmieniasz wartość prywatną bytu broni, którą Ham_CS_Player_ResetMaxSpeed ustawi graczowi, innymi słowy, zmieniasz prędkość maksymalną gracza, tylko pośrednio.
Nie mniej jednak, właśnie z tego powodu, że zmieniasz wartość jedynie dla broni, jakikolwiek inny event, po którym następuje zmiana maksymalnej prędkości gracza, nadpisze Twoją zmianę u gracza, przez co Twoja "metoda" nie zadziała, zrozum to wreszcie.

totalna bzdura Ham_CS_Player_ResetMaxSpeed nie zmienia offsetu m_flWeaponSpeed. Jedynie pobiera z niego wartość...

Przyznaje się popełniłem błąd. Pierwotny sposób zmiany prędkości był niepoprawny... Ale każdy przedstawiony przez ciebie powód jego błędnego funkcjonowania jest błędny. Dlaczego? Bo pomyliłeś się na starcie tzn. uznałeś iż wartość offsetu m_flWeaponSpeed jest zmieniana w Ham_CS_Player_ResetMaxSpeed lub innych eventach a to bzdura gdyż wartość tego offsetu jest zmieniana tylko i wyłącznie w jednym evencie tzn. Ham_Item_Deploy (dlatego go łapałem jako post).

Pamiętajmy iż na części broni ten sposób działa a na większej części niee. Teraz dlaczego? Dlatego iż tylko część broni używa tego offsetu:
Spoiler


Podczas testowania mogłem użyć innego sposóbu lub jakiegoś fix'a na to iż działało... Jeśli ktoś nie wierzy że ten sposób działa (ale tylko na paru broniach) to proszę o sobie zobaczyć na następujących broniach:

• Knife
• HeGrenade
• SmokeGrenade
• FlashBang
• Usp
• Glock18
• P228
• Deagl
• FiveSeven

Możecie na nich robić co się wam żywnie podoba a nadal prędkość maksymalną będziecie miec taką samą.

Niestety inne bronie są inaczej zrobione przez co nie korzystają z ofsset'ów do ustawiania na nich standardowej prędkości. Zatem klapa bo po co komu sposób którym można jedynie zmienić prędkość na 9 broniach...

Otóż nie gdyż w chwili gdy zauważamy ten błąd nasuwa nam się ciekawa myśl każda broń korzysta z jednej funkcji do pobrania jej standardowej prędkości. Tą funkcję można złapać za pomocą hamsandwich'a nawet w starszych wersjach i zmienić wartość zmienianą na swoją własną. Sposób naprawiony
  • +
  • -
  • 4
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#9 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 18.07.2014 20:48

totalna bzdura Ham_CS_Player_ResetMaxSpeed nie zmienia offsetu m_flWeaponSpeed. Jedynie pobiera z niego wartość...

Nigdzie tak nie napisałem, ŁŻESZ.
 

uznałeś iż wartość offsetu m_flWeaponSpeed jest zmieniana w Ham_CS_Player_ResetMaxSpeed

Nigdzie tak nie napisałem. ŁŻESZ.
 
 

Dlatego iż tylko część broni używa tego offsetu:

Zalinkowałeś fragment kodu, który… nie istnieje!
HLSDK nie udostępnia broni innych, niż glock.
Jeśli korzystałeś z CSSDK, to Cię zaskoczę, bo kod jest nieoficjalny i błędny.
Jeśli sam próbowałeś odtworzyć kod źródłowy CSa, to Cię zaskoczę, ale mylisz się.
 
 
Reszta posta, standardowo, wyssana z palca. BZDURY.
 
 
 
edit:
Widzę, że w wyniku moich uwag, zmieniłeś Ham_Item_PreFrame na Ham_CS_Item_GetMaxSpeed.
Jest postęp, teraz uwzględniasz już Zoom oraz rozbrajanie bomby!
Teraz jeszcze został Ci spawn, ale… zamiast rejestrować 2 eventy, wystarczy Ham_CS_Player_ResetMaxSpeed.
 
Podsumowując, cieszę się, że wreszcie przyznałeś się do błędu i poprawiłeś podstawowe błędy.

Jednak nie na marne się produkuję.


Użytkownik 21977 edytował ten post 18.07.2014 20:54


#10 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 18.07.2014 21:17

nie trzeba bawić sie freeze time'em bo CS robi to za nas!!

Teraz jeszcze został Ci spawn

Właśnie robie to by spawnu nie łapać... Tylko sam frezze time end.

 

Nigdzie tak nie napisałem, ŁŻESZ.

Zmieniasz wartość prywatną bytu broni, którą Ham_CS_Player_ResetMaxSpeed ustawi graczowi, innymi słowy, zmieniasz prędkość maksymalną gracza, tylko pośrednio.
Nie mniej jednak, właśnie z tego powodu, że zmieniasz wartość jedynie dla broni, jakikolwiek inny event, po którym następuje zmiana maksymalnej prędkości gracza, nadpisze Twoją zmianę u gracza, przez co Twoja "metoda" nie zadziała, zrozum to wreszcie.

Tu to napisałeś. Mojej wartości nic nie może nadpisać. Po prostu się nie da (bez ingerencji w kod). Dlaczego zatem jak wyciągnie się AWP to kod (stary) nie działał? Bo awp nie używa offsetów do ustawiania standardowej maksymalnej prędkości. Chcesz się przekonać? Użyj starego sposobu i pozmieniaj parę razy broń między usp --> HE --> Smoke, wartość będzie poprawnie ustawiana. Możesz też zacząć rozbrajać bombę i po przerwaniu lub skończeniu rozbrajania nadal będziesz miał właściwa wartość a nie standardową (nie przy plantowaniu bo nasza broń wtedy by była C4 a C4 nie używa tego offsetu)
 

Zalinkowałeś fragment kodu, który… nie istnieje!

Częściowo istnieje. Samo ustawianie offsetu podanego przeze mnie i pobieranie z niego wartości jest w 100% dobrze przedstawione w załączonym kodzie. Chcesz się przekonać to sprawdź sam, ja sprawdzałem.
 

Reszta posta, standardowo, wyssana z palca. BZDURY.

Cały czas piszesz że coś nadpisze moją wartość, dowiedź tego dla broni:

• Knife
• HeGrenade
• SmokeGrenade
• FlashBang
• Usp
• Glock18
• P228
• Deagl
• FiveSeven

A oddam ci cześć i piwo postawie. Nie mówię o freeze time bo go właśnie chcę uzyskać tak samo np. zatrzymanie podczas rozbrajania (ale po zakończeniu/przerwaniu prędkość ma wrócić do normy). Podaj mi przykład w którym prędkość gracza (na wyżej wymienionych broniach) zmieni się na inną niż pożądana
  • +
  • -
  • 0
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#11 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 18.07.2014 21:37


Cały czas piszesz że coś nadpisze moją wartość

Nie twoją wartość pdata, ale wartość maksymalnej prędkości gracza, jest różnica.

 


Nigdzie tak nie napisałem, ŁŻESZ.
21977, dnia 18 Lip 2014 - 00:33, napisał:
Zmieniasz wartość prywatną bytu broni, którą Ham_CS_Player_ResetMaxSpeed ustawi graczowi, innymi słowy, zmieniasz prędkość maksymalną gracza, tylko pośrednio.
Nie mniej jednak, właśnie z tego powodu, że zmieniasz wartość jedynie dla broni, jakikolwiek inny event, po którym następuje zmiana maksymalnej prędkości gracza, nadpisze Twoją zmianę u gracza, przez co Twoja "metoda" nie zadziała, zrozum to wreszcie.
Tu to napisałeś. Mojej wartości nic nie może nadpisać. Po prostu się nie da (bez ingerencji w kod). Dlaczego zatem jak wyciągnie się AWP to kod (stary) nie działał? Bo awp nie używa offsetów do ustawiania standardowej maksymalnej prędkości. Chcesz się przekonać? Użyj starego sposobu i pozmieniaj parę razy broń między usp --> HE --> Smoke, wartość będzie poprawnie ustawiana. Możesz też zacząć rozbrajać bombę i po przerwaniu lub skończeniu rozbrajania nadal będziesz miał właściwa wartość a nie standardową (nie przy plantowaniu bo nasza broń wtedy by była C4 a C4 nie używa tego offsetu)
Gdzie w zdaniu "Zmieniasz wartość prywatną bytu broni, którą Ham_CS_Player_ResetMaxSpeed ustawi graczowi" widzisz, że Ham_CS_Player_ResetMaxSpeed zmienia wartość prywatną buty broni?

Nie potrafisz czytać ze zrozumieniem i to sprawia, że popełniasz błędy.

 


Częściowo istnieje. Samo ustawianie offsetu podanego przeze mnie i pobieranie z niego wartości jest w 100% dobrze przedstawione w załączonym kodzie. Chcesz się przekonać to sprawdź sam, ja sprawdzałem.

Nie do końca. Po lutowej aktualizacji Valve zeszłego roku nastąpiła zmiana, której wciąż nie uwzględniasz.

#12 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 18.07.2014 21:45

Nadpisanie mojej wartości moją wartością = Moja wartość zostaje (tak działa mój kod)

Jeśli twierdzisz inaczej to:

dowiedź tego dla broni:

• Knife
• HeGrenade
• SmokeGrenade
• FlashBang
• Usp
• Glock18
• P228
• Deagl
• FiveSeven

A oddam ci cześć i piwo postawie. Nie mówię o freeze time bo go właśnie chcę uzyskać tak samo np. zatrzymanie podczas rozbrajania (ale po zakończeniu/przerwaniu prędkość ma wrócić do normy). Podaj mi przykład w którym prędkość gracza (na wyżej wymienionych broniach) zmieni się na inną niż pożądana


  • +
  • -
  • -1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#13 Hiroshima

    Godlike

  • Przyjaciel

Reputacja: 1 327
Godlike

  • Postów:4 984
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Málaga
Offline

Napisano 20.07.2014 05:00

czas tu chyba wrócić i zrobić porządek co? smile.png
 
komu dajecie rangi teraz?
 
 
 

Nudzi ci się? ---> Daj mi Reputę

dałem - poleciały minusy
 
BTW podziwiam Twój zapał Benio smile.png
 
 
 

Twój plugin nie działa? ---> Pisz PW

kijem.gif
 
czyli teraz support team udziela odpłatnej pomocy na PW? Bo skoro nie odpłatnej to dlaczego na PW a nie na forum?


Użytkownik Hiroshima edytował ten post 20.07.2014 05:01

  • +
  • -
  • 0

#14 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 20.07.2014 06:51

Wiem ze leci na offtop, ale up tez :)


ten uzytkownik pomaga mi na pw. Odpowiedz mam w ciagu 5 minut. Jego rozwiazania dzialaja (jeszcze niegdy sie nie pomylil - w moich kodach). Jak dla mnie to jest dobry gosc. Wiele potrafi.


@topic
Używam Ham_CS_Player_ResetMaxSpeed i działa dobrze. Jednak w czasie freezetime też ustawia prędkość i nawet jak jest freezetime to można się poruszać. Tak jakby nie było freezetime (ale jest ustawiony na serwerze). Co na to poradzić? Łapać freezetime czy jak?


  • +
  • -
  • 2

#15 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 23.07.2014 23:41

Z racji że temat stoi nadal otwarty (i w tym samym dziale ;D) a ludzie czytający go mogą coś źle zrozumieć przydało by się wszystko zgrabnie podsumować zatem:

Cel tematu:
Pokazanie metody najlepszej/najoptymalniejszej do zmiany prędkości gracza


Ham_CS_ResetMaxSpeed
Event łapany/wywoływany poprzez hamsanwich'a. Wykonuje się podczas zmiany maksymalnej prędkości gracza czyli podczas:
• zmiany team'u (pod pewnymi warunkami)
• eventu client_putinserver
• śmierci gracza
• końca gry (zmiana mapy | parę razy)
• spawnu gracza
• specyficznego skoku (np. long jump (ten wbudowany a nie ten jaki się spotyka na modach) | niespotykane w cs'ie )
• spełnienia pewnych warunków przy chodzeniu (niespotykane w cs'ie)
• startu rundy
• spawnu bytu gracza (nie tylko podczas zwykłego spawnu)
• podkładania C4
• rozbrajania C4
• zoom'owania
• zmiany broni

Możliwe że coś pominąłem choć wątpię bo przeleciałem sdk oraz zdekompilowane biblioteki cs'a. Ten event jest wprost wspaniały do zmiany prędkości gracza ale za każdym razem gdy się uruchomi trzeba sprawdzać każdą wyżej wymienioną czynność gdyż np. podczas freeze time'u ustawimy graczu normalną prędkość i będzie biegał podczas freeze time'u co jest sprzeczne z założeniami robienia freeze time'u. Bardzo często widać na różnych modach które używają tego eventu do zmiany prędkości gracza takie bugi jak chodzenie podczas rozbrajania paki. Podkładania jej. Itp.


Możliwości wywołania tego eventu jest zbyt wiele a nie wszystkie nas interesują dlatego chcieli byśmy złapać tylko wywołania tego eventu gdy gracz jest żywy i jest w stanie normalnie się poruszać.


Moje sposoby na złapanie ww. zdarzeń:

1. Ham_Item_Deploy + pdata
Sposób istnie wspaniały gdyż wystarczy że złapiemy tylko zmianę broni oraz podmienimy w danej broni odpowiedni offset. Zanim przedstawię ten sposób powiem że ma on olbrzymią wadę tzn. nie działa na wszystkie bronie gdyż nie wszystkie korzystają z tego offsetu (mogę zarzucić zdekompilowaną biblioteką cs'a nie sdk jak ktoś nie wierzy). Przykład pokazuje zmiane prędkości gracza tylko na nożu z 250.0 na 100.0.
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

const m_flWeaponSpeed = 58

public plugin_init()
{
	RegisterHam( Ham_Item_Deploy, "weapon_knife", "Deploy",1)
	//Rejestruje uchwyt na event Ham_Item_Deploy dla bytów z classname == "weapon_knife"
	//Ważne 4 arg musi == 1 by to był event typu post
}

public Deploy(wid) // tutaj łapie event
{
	//Pamiętajcie wid to id bytu broni (nie mylić z CSW_*)
	
	set_pdata_float(wid,m_flWeaponSpeed,100.0,4)
	//Podmieniam offset z którego podczas zmiany prędkości gracza (za każdym razem gdy będzie posiadał tą broń)
	//zostanie pobrana wartość i ustawiona jako prędkość gracza
	//Ten offset zmiania wartość tylko podczas pokazywania broni
}
Załączony plik  Abnormalspeed.sma   734 bajtów  81 Ilość pobrań
  Abnormalspeed.amxx

Lista broni na których ten sposób działa:

• Knife
• HeGrenade
• SmokeGrenade
• FlashBang
• Usp
• Glock18
• P228
• Deagl
• FiveSeven

Odradzam używania tego sposobu z uwagi na małą ilość broni które on obsługuje. Lecz jeśli ktoś robi plugin w którym chce modyfikować prędkość tylko na broni/broniach podanych w tej liście to ten sposób jest najlepszy.


2. Ham_CS_Item_GetMaxSpeed
To zdarzenie wykonuje się tylko podczas pobierania prędkości dla danej broni. Zatem nie złapiemy niepożądanych zdarzeń. Działa zawsze, każda broń używa tego sposobu. W przykładowym kodzie zmienie wartość prędkości gracza na każdej bronii na 700.0:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

public plugin_init()
{
	new classname[32] // Zmienna do której będziemy pobierać classname poszczególnych broni
	for(new i=1;i<31;++i)	if(i!=2)
	{
		//Pętelka na wszystkie bronie

		get_weaponname(i,classname,31) //Pobieram classname danej broni
		
		RegisterHam( Ham_CS_Item_GetMaxSpeed, classname, "GetItemMaxSpeed") //Rejestruje uchwyt na event Ham_CS_Item_GetMaxSpeed dla danego classname broni
		//Ważne 4 arg musi == 0 by to był event typu pre
	}
}

public GetItemMaxSpeed(wid) // tutaj łapie event
{
	//Zmieniam zwracana wartosc
	SetHamReturnFloat(700.0)
	//Informuje o zmianie zwracanej wartosci
	return HAM_OVERRIDE
}
Załączony plik  Abnormalspeed.sma   721 bajtów  85 Ilość pobrań
  Abnormalspeed.amxx
Nie ma co więcej tu opisywać. Wykonuje się wtedy kiedy trzeba i zawsze kiedy trzeba.




Podsumowanie:
Do zmiany prędkości gracza można użyć Ham_CS_ResetMaxSpeed ale trzeba rozpatrzyć wszystkie możliwości które wypisałem przez co event staje się dosyć ciężki w obsłudze.

Sposób nr. 1 jest tylko i wyłącznie do zmiany prędkości na broniach podanych w liście, jeśli choć trochę nie rozumiesz tego sposobu to go nie używaj

Sposób nr. 2 jest idealny do zmiany prędkości gracza. Praktycznie nie ma wad. Działa poprawnie także z tarczą. Omija niepotrzebne zdarzenia.
  • +
  • -
  • 2
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#16 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 24.07.2014 08:39

Ładnie teraz wytłumaczyłeś, ale... czy prędkość gracza zawsze jest pobierana z prędkości broni? Co gdy np w trakcie freeze time zabierzemy graczowi WSZYSTKIE bronie, łącznie z nożem, na jakiej podstawie zostanie nadana mu prędkość po freeze time?

Jak zostaje nadana prędkość graczowi w trakcie podkładania paki? Czy Ham_CS_ResetMaxSpeed jest jedynym eventem w którym możemy ją "bezpiecznie" zmodyfikować?

I tak, trochę się czepiam, bo jeśli naprawdę chcesz opisać wszelkie przypadki zmiany broni, używając czegoś innego niż Ham_CS_ResetMaxSpeed, to powinieneś zadbać już o absolutnie wszystko.

Wyjaśniłeś wreszcie jaka jest wada używania Ham_CS_ResetMaxSpeed, czego brakowało wcześniej. Oczywiście w samym tym evencie można temu zapobiec odpowiednimi warunkami, więc sposób nie jest nie do użytku...
  • +
  • -
  • 2

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#17 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 24.07.2014 08:46


Oczywiście w samym tym evencie można temu zapobiec odpowiednimi warunkami, więc sposób nie jest nie do użytku...

 

Np. łapać freezetime?

Bo jak ustawiałem prędkość w Ham_CS_ResetMaxSpeed to mozna bylo biegac podczas freezetime.


  • +
  • -
  • 0

#18 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 24.07.2014 10:18

Ładnie teraz wytłumaczyłeś, ale... czy prędkość gracza zawsze jest pobierana z prędkości broni? Co gdy np w trakcie freeze time zabierzemy graczowi WSZYSTKIE bronie, łącznie z nożem, na jakiej podstawie zostanie nadana mu prędkość po freeze time?

Jeśli podczas freeze time'u zabierzemy graczu wszystkie bronie to będzie bigał ze standardową prędkością czyli 240.0 (po freeze time) i event Ham_CS_Item_GetMaxSpeed się nie wykona ale:

Możliwości wywołania tego eventu jest zbyt wiele a nie wszystkie nas interesują dlatego chcieli byśmy złapać tylko wywołania tego eventu gdy gracz jest żywy i jest w stanie normalnie się poruszać.

To miałem na myśli a nawet "normalnie grać" poza tym:

To zdarzenie wykonuje się tylko podczas pobierania prędkości dla danej broni.

Czyli jeśli po freeze timu kupimy broń/dostaniemy ją to nasza prędkość zostanie ustawiona na taką jaką chcemy. Dodatkowo właśnie z takich przyczyn napisałem że ten sposób:

Praktycznie nie ma wad



Jak zostaje nadana prędkość graczowi w trakcie podkładania paki?

Jak zaczniesz plantowac to prędkość gracza jest wymuszana i nie powinno śie wykonać zdarzenie Ham_CS_ResetMaxSpeed lecz czasem pod pewnymi warunkami się wykonuje. Podczas zakończenia plantowania uruchamia się tylko Ham_CS_ResetMaxSpeed. Tak samo jest z rozbrajaniem.
 

Czy Ham_CS_ResetMaxSpeed jest jedynym eventem w którym możemy ją "bezpiecznie" zmodyfikować?

Podczas rozpoczynania palntowania/rozbrajania nie zawsze się te zdarzenie wykonuje przez co to nie jest "bezpieczne"
 

I tak, trochę się czepiam, bo jeśli naprawdę chcesz opisać wszelkie przypadki zmiany broni, używając czegoś innego niż Ham_CS_ResetMaxSpeed, to powinieneś zadbać już o absolutnie wszystko.

Czepiaj się dalej haha.gif Lubię prowadzić dyskusje a zwłaszcza jeżeli możemy tym ludziom parę rzeczy wyjaśnić
 

Bo jak ustawiałem prędkość w Ham_CS_ResetMaxSpeed to mozna bylo biegac podczas freezetime.

Można sprawdzać każde zdarzenie z listy która wyżej podałem lub po prostu łapać tylko post i w post sprawdzać czy maksymalna prędkość gracza jest większa od 2.0 jeśli tak to ustawiać własną a jesli nie to po prostu zostawić lecz wtedy musisz pamiętac by gracza w swoich pluginach prawidłowo zatrzymywać
  • +
  • -
  • 0
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#19 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 24.07.2014 10:38

Hmmm. Dlaczego większą niż 2.0?

A jak używam Ham_CS_Item_GetMaxSpeed to podczas zoom, plant, freezetime będzie dobrze działać?
  • +
  • -
  • 0

#20 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 24.07.2014 10:46

Hmmm. Dlaczego większą niż 2.0?

Bo prędkość podczas zatrzymania przez cs'a jest minimalnie wieksza od 1.0 i mniejsza od 2.0

A jak używam Ham_CS_Item_GetMaxSpeed to podczas zoom, plant, freezetime będzie dobrze działać?

Tak
  • +
  • -
  • 0
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika





Również z jednym lub większą ilością słów kluczowych: nie chce mi sie tagowac

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych