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

[ROZWIĄZANE] Kosa 1/1 PPM na drużyne


Najlepsza odpowiedź BlackPerfum, 19.06.2014 10:02

Boże uchroń mnie  bag.gif
 

Witam, mam taki problem, że chce zrobić, że drużyny mają siebie na 1/1 PPM na hita, zrobiłem tak, ale nie działa.

Czemu nie napisałeś że z kosy?? ale dobra to jeszcze idzie się domyślic bo ppm
 

Ja bym zrobił to inaczej, w ataku wykrywał czy obrażenia są zadane z noża - jeżeli tak to zmodyfikuj damage na np. 999 co spowoduje natychmiastowego killa  nie musisz sprawdzać ile aktualnie ma HP gracz.

Zadanie 999 dmg wcale nie spowoduje natychmiastowego kill'a tylko zadanie 999 dmg a to jest mega różnica
 

Dodatkowo zważ na to co zwracasz, przy zmianie wartości parametrów niekoniecznie HAM_IGNORED jest odpowiednie.

Naprostuje twój tok myślenia.
• Zmieniłeś parametr funkcji to zwróć HAM_HANDLED (SetHamParamString/TraceResult/Vector/Entity/Integer/Float)
• Zmieniłeś dane zwracane przez funkcję użyj HAM_OVERRIDE (SetHamReturnString/TraceResult/Vector/Entity/Integer/Float)

 

 

Ludzie on chce by gracze umierali/gineli/zabijali się a wy zadajecie im tylko dmg i czekacie aż któryś z nich zginie.

public TakeDamage(id, ent, attacker, Float:damage, damagebits)
{
	//Najpierw trzeba sprawdzić czy osoba którą mamy zabić żyje
	//oraz czy osoba zabijająca jest graczem
	//Dodatkowo trzeba sprawdzić czy ent jest graczem zabijającym gdyż
	//Gracz mógł rzucić he, zmienić bron na kose i w momęcie wybuchu naciśnąć ppm
	//Co by spowodowało że ta funkcja także się wykona
	
	if(is_user_alive(id) && is_user_connected(attacker) && ent == attacker)
	{
		//Jeśli tak to teraz trzeba sprawdzić broń gracza zabijającego
		
		if(get_user_weapon(attacker) == CSW_KNIFE)
		{
			//Jeśli to nóż to sprawdzamy drużynę
			if(get_user_team(id) == get_user_team(attacker))	return HAM_IGNORED
			
			//Jeśli to są różne drużyny to sprawdzamy aktualnie naciśnięty przycisk
			//I tu jest pewien problem gydż sprawdzanie naciśniętego przycisku tutaj jest bardzo złe 
			// gdyż w banalny sposób można to obejść w grze
			// Dlatego przydało by się sprawdzić w inny sposób czy naciśneliśmy ppm czy lpm
			// I tu z pomocą przychodzi nam fakemeta
			// Porównuje czas następnego ataku :D
			
			//Sprawdzam czy ppm jest naciśnięty ale także trzeba sprawdzić czy to uderzenie było z ppm
			if(get_pdata_float(get_pdata_cbase(attacker,373,5),47,4) > 1.0)
			{
				// Jeśli to ppm to zabijamy gracza
				ExecuteHamB(Ham_Killed, id, attacker, 1);
			}
		}
	}
	return HAM_IGNORED
}

Taki kod w 100% działa + pamiętaj aby zarejestrować funkcje "TakeDamage" jako pre czyli 4 arg == 0. Gdyż inaczej gracz umierający może być martwy :D

 

Przejdź do postu


  • Zamknięty Temat jest zamknięty
17 odpowiedzi w tym temacie

#1 Andrzejek

    Ucze się :]

  • Power User

Reputacja: 136
Zaawansowany

  • Postów:1 300
  • Imię:Andrzej
Offline

Napisano 18.06.2014 23:05

Witam, mam taki problem, że chce zrobić, że drużyny mają siebie na 1/1 PPM na hita, zrobiłem tak, ale nie działa.

 

public TakeDamage(id, ent, attacker, Float:damage, damagebits) {
    if(!is_user_connected(id) || !is_user_connected(attacker))
        return HAM_IGNORED;
    
    new health = get_user_health(id);
    new weapon = get_user_weapon(attacker);    
    
    if(health < 2)
        return HAM_IGNORED;
    
    if(get_user_button(attacker) & IN_ATTACK2 && weapon == CSW_KNIFE && get_user_team(attacker) == get_user_team(id))
        damage = float(health);    
    
    SetHamParamFloat(4, damage);
    return HAM_IGNORED;
    
}

  • +
  • -
  • 0

Mam do sprzedania pluginy AMXX pod serwery typu, JB, ONLY DD2, ZOMBIE, COD MOD, DR i inne...

 

Jeżeli jesteś zainteresowany(a), napisz na PW lub GG 42384104


#2 Puchate

    Wszechobecny

  • Użytkownik

Reputacja: 204
Profesjonalista

  • Postów:433
  • Lokalizacja:Polska
Offline

Napisano 19.06.2014 00:19

Ja bym zrobił to inaczej, w ataku wykrywał czy obrażenia są zadane z noża - jeżeli tak to zmodyfikuj damage na np. 999 co spowoduje natychmiastowego killa ;) nie musisz sprawdzać ile aktualnie ma HP gracz.

 

Twój kod nie działa Ci pewnie bo...

 

 

get_user_team(attacker) == get_user_team(id)

 

Ten kod

 

 

get_user_button(attacker) & IN_ATTACK2 

niekoniecznie musi poprawnie działać w tym miejscu, weź pod uwagę to. Obecnie również próbujesz zmienić wartość parametru nawet wtedy gdy nie trzeba.

 

Dodatkowo zważ na to co zwracasz, przy zmianie wartości parametrów niekoniecznie HAM_IGNORED jest odpowiednie.

 

 

 

HAM_IGNORED - Nothing happened, the call continues. 
HAM_HANDLED - You did something, but the call continues. 
HAM_OVERRIDE - The call will still be executed, but instead you will change the return value. 
HAM_SUPERCEDE - The call is not executed, and you use your return value, if applicable.

 


Użytkownik Puchate edytował ten post 19.06.2014 00:27

  • +
  • -
  • 0

#3 Drago36

    Profesjonalista - if you know what i mean

  • Power User

Reputacja: 561
Wszechwiedzący

  • Postów:707
  • GG:
  • Imię:Mów mi D.ave
  • Lokalizacja:Polska
Offline

Napisano 19.06.2014 07:30


że drużyny

czyli wszyscy?

To spróbuj tak:

public TakeDamage(id, ent, attacker, Float:damage, damagebits) {
	if(!is_user_connected(id) || !is_user_connected(attacker))
		return HAM_IGNORED;
    
	if(get_user_weapon(attacker) != CSW_KNIFE && !(get_user_button(attacker) & IN_ATTACK2) && get_user_team(attacker) == get_user_team(id))
		return HAM_IGNORED;
    
	SetHamParamFloat(4, float(get_user_health(id)))
	
	return HAM_IGNORED;
}

  • +
  • -
  • 0

#4 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 19.06.2014 10:02   Najlepsza odpowiedź

Boże uchroń mnie  bag.gif
 

Witam, mam taki problem, że chce zrobić, że drużyny mają siebie na 1/1 PPM na hita, zrobiłem tak, ale nie działa.

Czemu nie napisałeś że z kosy?? ale dobra to jeszcze idzie się domyślic bo ppm
 

Ja bym zrobił to inaczej, w ataku wykrywał czy obrażenia są zadane z noża - jeżeli tak to zmodyfikuj damage na np. 999 co spowoduje natychmiastowego killa  nie musisz sprawdzać ile aktualnie ma HP gracz.

Zadanie 999 dmg wcale nie spowoduje natychmiastowego kill'a tylko zadanie 999 dmg a to jest mega różnica
 

Dodatkowo zważ na to co zwracasz, przy zmianie wartości parametrów niekoniecznie HAM_IGNORED jest odpowiednie.

Naprostuje twój tok myślenia.
• Zmieniłeś parametr funkcji to zwróć HAM_HANDLED (SetHamParamString/TraceResult/Vector/Entity/Integer/Float)
• Zmieniłeś dane zwracane przez funkcję użyj HAM_OVERRIDE (SetHamReturnString/TraceResult/Vector/Entity/Integer/Float)

 

 

Ludzie on chce by gracze umierali/gineli/zabijali się a wy zadajecie im tylko dmg i czekacie aż któryś z nich zginie.

public TakeDamage(id, ent, attacker, Float:damage, damagebits)
{
	//Najpierw trzeba sprawdzić czy osoba którą mamy zabić żyje
	//oraz czy osoba zabijająca jest graczem
	//Dodatkowo trzeba sprawdzić czy ent jest graczem zabijającym gdyż
	//Gracz mógł rzucić he, zmienić bron na kose i w momęcie wybuchu naciśnąć ppm
	//Co by spowodowało że ta funkcja także się wykona
	
	if(is_user_alive(id) && is_user_connected(attacker) && ent == attacker)
	{
		//Jeśli tak to teraz trzeba sprawdzić broń gracza zabijającego
		
		if(get_user_weapon(attacker) == CSW_KNIFE)
		{
			//Jeśli to nóż to sprawdzamy drużynę
			if(get_user_team(id) == get_user_team(attacker))	return HAM_IGNORED
			
			//Jeśli to są różne drużyny to sprawdzamy aktualnie naciśnięty przycisk
			//I tu jest pewien problem gydż sprawdzanie naciśniętego przycisku tutaj jest bardzo złe 
			// gdyż w banalny sposób można to obejść w grze
			// Dlatego przydało by się sprawdzić w inny sposób czy naciśneliśmy ppm czy lpm
			// I tu z pomocą przychodzi nam fakemeta
			// Porównuje czas następnego ataku :D
			
			//Sprawdzam czy ppm jest naciśnięty ale także trzeba sprawdzić czy to uderzenie było z ppm
			if(get_pdata_float(get_pdata_cbase(attacker,373,5),47,4) > 1.0)
			{
				// Jeśli to ppm to zabijamy gracza
				ExecuteHamB(Ham_Killed, id, attacker, 1);
			}
		}
	}
	return HAM_IGNORED
}

Taki kod w 100% działa + pamiętaj aby zarejestrować funkcje "TakeDamage" jako pre czyli 4 arg == 0. Gdyż inaczej gracz umierający może być martwy :D

 


  • +
  • -
  • 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 Puchate

    Wszechobecny

  • Użytkownik

Reputacja: 204
Profesjonalista

  • Postów:433
  • Lokalizacja:Polska
Offline

Napisano 19.06.2014 12:11

 

 

Zadanie 999 dmg wcale nie spowoduje natychmiastowego kill'a tylko zadanie 999 dmg a to jest mega różnica

Spowoduje - kwestia wywołania śmierci entity zajmie się już engine. Entity musiałoby mieć powyżej 999 HP aby to nie zadziałało poprawnie.

 

 

 

Naprostuje twój tok myślenia.
• Zmieniłeś parametr funkcji to zwróć HAM_HANDLED (SetHamParamString/TraceResult/Vector/Entity/Integer/Float)
• Zmieniłeś dane zwracane przez funkcję użyj HAM_OVERRIDE (SetHamReturnString/TraceResult/Vector/Entity/Integer/Float)

 

Jak widać prosty angielski niekoniecznie dla każdego jest prosty, więc może od razu przetłumaczę na język polski:

 

HAM_OVERRIDE - Nadpisuje zwracane wartości przez funkcję własnymi, ale nie blokuje dalszego wykonywania wywołania funkcji
HAM_SUPERCEDE - Nadpisuje zwracane wartości przez funkcję własnymi oraz blokuje dalsze wywoływanie funkcji

 

Kod który pokazałeś doskonale pokazuje że nie potrafisz skorzystać nawet z dokumentacji a chcesz pouczać innych. Dla przykładu 

 

 

&& ent == attacker)

 

Ahh znów ten angielski 

 

 

/**
     * Description:        Usually called whenever an entity takes any kind of damage.
     *                    Inflictor is the entity that caused the damage (such as a gun).
     *                    Attacker is the entity that tirggered the damage (such as the gun's owner).
     * Forward params:    function(this, idinflictor, idattacker, Float:damage, damagebits);
     * Return type:        Integer.
     * Execute params:    ExecuteHam(Ham_TakeDamage, this, idinflictor, idattacker, Float:damage, damagebits);
     */
    Ham_TakeDamage,

 

Idziemy dalej 

 

 

            if(get_pdata_float(get_pdata_cbase(attacker,373,5),47,4) > 1.0)
 

 

Czemu używasz kodów których nie rozumiesz, które po prostu znalazłeś w internecie?

 

 

 

W 100% to nie masz pojęcia o czym piszesz.


Użytkownik Puchate edytował ten post 19.06.2014 12:22

  • +
  • -
  • 1

#6 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 19.06.2014 12:59

Hahahahhahahahahaha żarty to nie ze mną. Kod napisany w locie przeze mnie.
 

Spowoduje - kwestia wywołania śmierci entity zajmie się już engine. Entity musiałoby mieć powyżej 999 HP aby to nie zadziałało poprawnie.

A zatem jest możliwość że to nie spowoduje śmierci gracza :(
Dodatkowo jakiś inny plugin może zmodyfikować dmg tak by nie zabiło ono gracza
 

Jak widać prosty angielski niekoniecznie dla każdego jest prosty, więc może od razu przetłumaczę na język polski:
 
HAM_OVERRIDE - Nadpisuje zwracane wartości przez funkcję własnymi, ale nie blokuje dalszego wykonywania wywołania funkcji
HAM_SUPERCEDE - Nadpisuje zwracane wartości przez funkcję własnymi oraz blokuje dalsze wywoływanie funkcji

Omg naczytałeś się bzdur na necie i świecisz :D
Naprawdę uważasz że wszystko co jest napisane na tym forum przez wyższych rangą użytkowników jest w 100% prawdą?? Nawet w dokumentacji są błędy a w dodatku nie rozumiesz różnicy między HAM_HANDLED a HAM_OVERRIDE bo HAM_SUPERCEDE w przypadku użycia twojej funkcji jest całkowicie nie wskazane
 

Kod który pokazałeś doskonale pokazuje że nie potrafisz skorzystać nawet z dokumentacji a chcesz pouczać innych. Dla przykładu

hahahahahahaha to sobie serio jaja robisz. Ent równa się zawsze id gracza chyba że dmg zadał he lub inny byt nie będący bronią/graczem a że inaczej pisze w dokumentacji to nie mój problem. Idź sprawdź jak nie wiezysz.
 

Czemu używasz kodów których nie rozumiesz, które po prostu znalazłeś w internecie?

Nieee. Teraz to już przesadziłeś. Sam nie wiesz co napisałem i się temu dziwisz.
Ale będę taki chojny i ci wytłumaczę:

//Mamy taki kod
if(get_pdata_float(get_pdata_cbase(attacker,373,5),47,4) > 1.0)

Zacznijmy od get_pdata_cbase(attacker,373,5) bo jest tu dosyć ważne
Pobieram dane z offsetu 373(czyli id ostatnio aktywowanej broni na graczu)
Tzn. robi prawie to samo co find_ent_by_owner lecz bardziej optymalniej :D

Jak mamy id broni to możemy pobrać czas za jaki możemu użyć następnego ataku ppm
czyli get_pdata_float(id(id broni),47,4) offset 47 odpowiada za czas następnego ataku ppm
Teraz dlaczego ten atak ma być większy od 1.0??

Z paru minut testowania wynika że jak użyjemy lpm to
offset 46 == 0.6~0.8
offset 47 == 0.7~0.9

a jak użyjemy ppm to
offset 46 == 1.0
offset 4.7 == 1.1

Wytłumaczyłem??


  • +
  • -
  • 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 Puchate

    Wszechobecny

  • Użytkownik

Reputacja: 204
Profesjonalista

  • Postów:433
  • Lokalizacja:Polska
Offline

Napisano 19.06.2014 13:23

 

 

Naprawdę uważasz że wszystko co jest napisane na tym forum przez wyższych rangą użytkowników jest w 100% prawdą?? Nawet w dokumentacji są błędy a w dodatku nie rozumiesz różnicy między HAM_HANDLED a HAM_OVERRIDE bo HAM_SUPERCEDE w przypadku użycia twojej funkcji jest całkowicie nie wskazane

 

Masz chyba jakieś rozdwojenie jaźni, bo ani żadnych funkcji nie dawałem, ani nie wypowiadałem się w ogóle na temat HAM_HANDLED

 

 

 

Nieee. Teraz to już przesadziłeś. Sam nie wiesz co napisałem i się temu dziwisz.

 

O mnie się nie martw, lepiej zadbaj sam o swój rozwój bo masz ewidentne braki, bazujesz na kodach przypadkowo znalezionych w internecie i pokazujesz to w każdym kolejnym poście. Polecam CSSDK od Arkashine, wiele powinno Ci wyjaśnić o ile cokolwiek z niego zrozumiesz.

 

Będąc znawcą na którego chcesz się wyplasować powinieneś wiedzieć że sposób który pokazałeś jest słaby i są lepsze, np. za pomocą Ham_Weapon_SecondaryAttack.

 

Nie wiesz z kim rozmawiasz a się strasznie sadzisz,  zluzuj porty bo masz ciśnienie jak typowy gimnazjalista gdy się mu zwróci uwagę.


Użytkownik Puchate edytował ten post 19.06.2014 13:26

  • +
  • -
  • 0

#8 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 19.06.2014 13:44

Ty się nie wypowiadałeś na temat HAM_HANDLED ale ja tak gdyż jeśli zmieniasz jakiś parametr to tego powinieneś użyć a ty tego nie zrobiłeś :(

 

 

Ham_Weapon_SecondaryAttack.

To czemu go nie użyłeś a zrobiłeś to nie poprawnie działającym sposobem?? Poza tym to wcale nie jest lepszy sposób a że tak powiem najgorszy.

Dlaczego?? A bo ten event wydarzy się w momęcie naciśnięcia ppm a trzeba pamiętać że między kliknięciem ppm a uderzeniem kogos z kosy jest jeszcze momęt na machnięcie kosą przez co nie da się w prosty sposób wyłapać czy w kogoś trafiliśmy bo jeszcze z kosy nie uderzyliśmy :(

 

 

 

Nie wiesz z kim rozmawiasz a się strasznie sadzisz,  zluzuj porty bo masz ciśnienie jak typowy gimnazjalista gdy się mu zwróci uwagę.

Też byś nie był zadowolony jak by jakiś koleś Wielki znawca pisał:

 

Czemu używasz kodów których nie rozumiesz, które po prostu znalazłeś w internecie?

W 100% to nie masz pojęcia o czym piszesz.

Uwierz mi to nie jest zbyt miłe zwłaszcze że to ja przed chwilą ten kod napisałem + w 100% go rozumiem

 

Znasz lepszy sposób?? Pokaż go!!! Inaczej będziesz kolejnym co dużo mówi a mało robi :/


  • +
  • -
  • 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

#9 Puchate

    Wszechobecny

  • Użytkownik

Reputacja: 204
Profesjonalista

  • Postów:433
  • Lokalizacja:Polska
Offline

Napisano 19.06.2014 14:05

 

 

Dlaczego?? A bo ten event wydarzy się w momęcie naciśnięcia ppm a trzeba pamiętać że między kliknięciem ppm a uderzeniem kogos z kosy jest jeszcze momęt na machnięcie kosą przez co nie da się w prosty sposób wyłapać czy w kogoś trafiliśmy bo jeszcze z kosy nie uderzyliśmy sad.png

I co, jako uzdolniony programista widzisz w tym problem? 

 

https://forums.allie...04&postcount=12

 

A teraz idź powiedz ludziom typu Exolent czy Arkashine że się nie znają  :giggle:

 


Użytkownik Puchate edytował ten post 19.06.2014 14:08

  • +
  • -
  • 0

#10 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 19.06.2014 14:33

Przyznaje taki kod zadziała ale jest pewna różnica między powiedzeniem

są lepsze, np. za pomocą Ham_Weapon_SecondaryAttack.

 

 

A podaniem całego sposobu. Tylko że nie rozumiem dlaczego:

sposób który pokazałeś jest słaby

 

Jeszcze jakbyś mógł mi to wytłumaczyć


  • +
  • -
  • 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 Andrzejek

    Ucze się :]

  • Autor tematu
  • Power User

Reputacja: 136
Zaawansowany

  • Postów:1 300
  • Imię:Andrzej
Offline

Napisano 19.06.2014 15:50

Dobra dodałem

 

if(get_pdata_float(get_pdata_cbase(attacker,373,5),47,4) > 1.0)
            {
                ExecuteHamB(Ham_Killed, id, attacker, 1);
            }

 

I śmiga.


  • +
  • -
  • 0

Mam do sprzedania pluginy AMXX pod serwery typu, JB, ONLY DD2, ZOMBIE, COD MOD, DR i inne...

 

Jeżeli jesteś zainteresowany(a), napisz na PW lub GG 42384104


#12 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

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

Napisano 19.06.2014 16:23

Panowie 27920 i 44177, ja rozumiem, że podyskutować czasem trzeba, ale proszę zejść z tonu i prowadzić czysto merytoryczną dyskusję, bez niedomówień i zachwalania jednej metody nad drugą, bo tak.

Po 1. Jeśli czegoś się tak nie robi lub się robi tak, argumety dlaczego!
Po 2. Jeśli jest taka a nie inna metoda to proszę pokazać jak wygląda, albo przynajmniej nakierować, a nie podawać suchy fakt który nic nikomu nie pomoże. Chodzi mi tu głównie o Ham_Weapon_SecondaryAttack, ja wiem w jaki sposób działa, 27920 też jak widać wie, ale 26984 już niekoniecznie, a to on założył temat. Więc prosiłbym na przyszłość opisać przynajmniej jak działa Ham_Weapon_SecondaryAttack i nakierować jak go połączyć z czymś innym, aby uzyskać pożądany rezultat. A nie podawać suchy fakt i patrzeć jak się ktoś męczy nie mogąc dojść do tego jak to ma mu pomóc...

Jeszcze istota różnicy między zadaniem obrażeń, a zabiciem. Owszem, różnica jest, nawet jeśli się zada obrażenia pewnymi sposobami to może to skutkować graczem z 0 ilością HP (lub ujemną) ale nadal żyjącym. Tu też na przyszłość proszę opisać dlaczego zadanie obrażeń jest w danym przypadku lepsze od zabicia lub odwrotnie, bo w ten sposób to można się sprzeczać w nieskończoność.

I jeszcze raz powtarzam, proszę zejść z tonu, a nie sugerować, że druga strona dyskusji się nie zna lub nic nie wie. To, że potrafię zrobić najlepszą jajecznicę na świecie ze mnie wybitnego kucharza nie czyni, jeśli potrafię tylko jajecznicę robić. Tak samo o kucharzu źle nie świadczy, jeśli nie wie jak zrobić jajecznicę, ale z innymi daniami sobie radzi świetnie. Nawet ekspert nie wie wszystkiego.

Odnośnie samego problemu:
get_pdata_cbase(attacker,373,5)
Czym jest to magiczne 373? Nie lepiej jest użyć tutaj stałej, która coś nam już powie? I skąd pewność, że:
Z paru minut testowania wynika że jak użyjemy lpm to
offset 46 == 0.6~0.8
offset 47 == 0.7~0.9

a jak użyjemy ppm to
offset 46 == 1.0
offset 4.7 == 1.1
Kilka minut testowania owszem, może dać ciekawe wyniki, ale moim zdaniem ta wartość może się zmienić pod wpływem czynników, których nie przewidziałeś. Choćby tego, ze jakiś inny plugin postanowi zmodyfikować obrażenia przy LPM.

W tym przypadku wykrywanie użycia PPM do którego podlinkował 44177 jest dużo bardziej pewne. I nawet jeśli jest mniej optymalne to jeśli komuś taka różnica w optymalności przeszkadza to powinien przestać szukać optymalizacji w kodzie na siłę, a zająć się czymś pożyteczniejszym.
  • +
  • -
  • 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


#13 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 19.06.2014 17:03

Dziękuję biały wilku hehe xD
 

Czym jest to magiczne 373?

Zapraszam http://amxx.pl/topic...-offsety-pdata/
 

Kilka minut testowania owszem, może dać ciekawe wyniki, ale moim zdaniem ta wartość może się zmienić pod wpływem czynników, których nie przewidziałeś. Choćby tego, ze jakiś inny plugin postanowi zmodyfikować obrażenia przy LPM.

Porównuje ppm ale także pewności nie mam i nie moge mieć :(
 
Jedynym czynnikiem sprawiającym iż get_pdata_cbase(attacker,m_pActiveItem,5) będzie mniejsze od 1.0 na ppm lub większe od 1.0 na lpm to ingerencja w kod podczas testowania nawet podczas skrajności get_pdata_cbase(attacker,m_pActiveItem,5) po użyciu lpm było mniejsze od 1.0 a po użyciu ppm zawsze było większe od 1.0 (brałem pod uwagę masę przypadków)


  • +
  • -
  • 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

#14 Puchate

    Wszechobecny

  • Użytkownik

Reputacja: 204
Profesjonalista

  • Postów:433
  • Lokalizacja:Polska
Offline

Napisano 19.06.2014 17:35

 

 

Panowie BlackPerfum i Puchate, ja rozumiem, że podyskutować czasem trzeba, ale proszę zejść z tonu i prowadzić czysto merytoryczną dyskusję, bez niedomówień i zachwalania jednej metody nad drugą, bo tak.

Po 1. Jeśli czegoś się tak nie robi lub się robi tak, argumety dlaczego!
Po 2. Jeśli jest taka a nie inna metoda to proszę pokazać jak wygląda, albo przynajmniej nakierować, a nie podawać suchy fakt który nic nikomu nie pomoże. Chodzi mi tu głównie o Ham_Weapon_SecondaryAttack, ja wiem w jaki sposób działa, BlackPerfum też jak widać wie, ale Andrzejek już niekoniecznie, a to on założył temat. Więc prosiłbym na przyszłość opisać przynajmniej jak działa Ham_Weapon_SecondaryAttack i nakierować jak go połączyć z czymś innym, aby uzyskać pożądany rezultat. A nie podawać suchy fakt i patrzeć jak się ktoś męczy nie mogąc dojść do tego jak to ma mu pomóc...

Jeszcze istota różnicy między zadaniem obrażeń, a zabiciem. Owszem, różnica jest, nawet jeśli się zada obrażenia pewnymi sposobami to może to skutkować graczem z 0 ilością HP (lub ujemną) ale nadal żyjącym. Tu też na przyszłość proszę opisać dlaczego zadanie obrażeń jest w danym przypadku lepsze od zabicia lub odwrotnie, bo w ten sposób to można się sprzeczać w nieskończoność.

I jeszcze raz powtarzam, proszę zejść z tonu, a nie sugerować, że druga strona dyskusji się nie zna lub nic nie wie. To, że potrafię zrobić najlepszą jajecznicę na świecie ze mnie wybitnego kucharza nie czyni, jeśli potrafię tylko jajecznicę robić. Tak samo o kucharzu źle nie świadczy, jeśli nie wie jak zrobić jajecznicę, ale z innymi daniami sobie radzi świetnie. Nawet ekspert nie wie wszystkiego.

To zaświeć przykładem swoich postów i pokaż jak w każdym temacie dokładnie wszystko opisujesz o czym wspominasz, bo inaczej takie zachowanie nazywamy hipokryzją. ;) no offence.

 

W tym temacie dyskutujemy o możliwych rozwiązaniach, nie jest to tutorial ani gotowy kod aby wszystko dokładnie opisywać. Żadnych dodatkowych pytań autor tematu jeszcze nie zadał, więc można założyć że na tą chwilę ich nie ma. Forum dyskusyjne jest do... dyskusji, o czym wskazuję nazwa, dyskutujemy cały czas o jednym wątku więc nie wiem gdzie tu może istnieć jakiś problem o którym piszesz.

 

Dając ludziom gotowce niczego się nie nauczą, więc dlaczego napieracie wciąż w tą stronę? Chce mieć nowy plugin, typowo na swoje potrzeby to niech się też wykaże inicjatywą ze swojej strony i dopyta o szczegóły. My za pomoc nic nie mamy, poza straconym czasem.

 

 

Jeszcze jakbyś mógł mi to wytłumaczyć

 

Być może dlatego że zwracane wartości nie są wartościami stałymi i przyjmowane wartości wywnioskowałeś po prostu poprzez test 5 minutowy. Gra ma kod w większości zamknięty (no, powiedzmy :P) do którego specyfikacja nie jest dołączona więc bez reverse engineering'u którego tutaj nie użyłeś nie będziesz mieć żadnej pewności że sposób o którym piszesz zawsze zadziała.

 

 

 


Użytkownik Puchate edytował ten post 19.06.2014 17:39

  • +
  • -
  • 0

#15 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 19.06.2014 18:48

Być może dlatego że zwracane wartości nie są wartościami stałymi i przyjmowane wartości wywnioskowałeś po prostu poprzez test 5 minutowy. Gra ma kod w większości zamknięty (no, powiedzmy ) do którego specyfikacja nie jest dołączona więc bez reverse engineering'u którego tutaj nie użyłeś nie będziesz mieć żadnej pewności że sposób o którym piszesz zawsze zadziała.

Nigdy nie napisałem że testowałem 5 minut i w jaki sposób dlatego nie możesz wiedziec czy moje testy nie były wystarczające :/
Tak samo mógł bym powiedzieć iż jakiś plugin był tak pięknie zrobiony iż zepsuł działanie sposobu jaki przedstawiłeś

Dodam jeszcze iż nie trzeba używać "reverse engineering'u" by akurat w moim sposobie dowiedzieć się iż zawsze zadziała (o ile ktoś nie będzie ingerował w kod). Czasami wystarczy użyć logiki + lenistwa (najlepszy sposób aby wykrywać błędy w cs'ie) aby dowiedzieć się kiedy i na jakie wartości są zmieniane dane bytu

 

To zaświeć przykładem swoich postów i pokaż jak w każdym temacie dokładnie wszystko opisujesz o czym wspominasz, bo inaczej takie zachowanie nazywamy hipokryzją

Nie musi gdyż nie wypowiada się w temacie na temat tematu. Jedynie przez wzgląd na swoją rangę jest zmuszony do ingerencji gdyż zbliżamy się do łamania regulaminu (w pewnym stopniu naciągamy go)

 

Dając ludziom gotowce niczego się nie nauczą, więc dlaczego napieracie wciąż w tą stronę?

Mylisz się. Dając ludziom gotowce(nie opisane) niczego się nie nauczą lecz jeśli je opiszesz sprowokujesz ludzką psychike do chęci poznania nowego a to powinno być najbardziej pożądaną rzeczą dla człowieka pomagającemu innym :D


  • +
  • -
  • 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

#16 Puchate

    Wszechobecny

  • Użytkownik

Reputacja: 204
Profesjonalista

  • Postów:433
  • Lokalizacja:Polska
Offline

Napisano 19.06.2014 23:41

 

 

Nigdy nie napisałem że testowałem 5 minut i w jaki sposób dlatego nie możesz wiedziec czy moje testy nie były wystarczające kwasny.gif

 

Hmmm

 

 

Z paru minut testowania wynika że jak użyjemy lpm to

 

 

 
:)
 

 

 

Dodam jeszcze iż nie trzeba używać "reverse engineering'u" by akurat w moim sposobie dowiedzieć się iż zawsze zadziała (o ile ktoś nie będzie ingerował w kod). Czasami wystarczy użyć logiki + lenistwa (najlepszy sposób aby wykrywać błędy w cs'ie) aby dowiedzieć się kiedy i na jakie wartości są zmieniane dane bytu
 
Na jakiej podstawie twierdzisz że ZAWSZE zadziała skoro nie widzisz kodu źródłowego gry i nie wykonujesz inżynierii wstecznej, więc tak naprawdę nie wiesz kiedy dokładnie ta wartość jest modyfikowana? Możesz co najwyżej przypuszczać, 100% pewności nie uzyskasz :)
 
Z mojej strony EOT w tym temacie, pozdrawiam. :)

  • +
  • -
  • 0

#17 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 20.06.2014 07:04

Na jakiej podstawie twierdzisz że ZAWSZE zadziała skoro nie widzisz kodu źródłowego gry i nie wykonujesz inżynierii wstecznej, więc tak naprawdę nie wiesz kiedy dokładnie ta wartość jest modyfikowana? Możesz co najwyżej przypuszczać, 100% pewności nie uzyskasz

Chyba troszkę mnie nie zrozumiałeś. Widzę kod źródłowy i to bardzo dobrze. Poczytaj sobie SDK metamoda. Komu by się chciało testować tyle ?? By znać całą grę w 100% Ja polecam najpierw w teorii szybko przelecieć SDK aby sprawdzić kiedy jest modyfikowana wartość m_flNextSecondaryAttack następnie w praktyce dokładnie poszukać błędów/nieprawidłowości które mogły by zniszczyć/zaburzyć teorię.


  • +
  • -
  • 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

#18 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

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

Napisano 20.06.2014 08:39

Dając ludziom gotowce niczego się nie nauczą, więc dlaczego napieracie wciąż w tą stronę? Chce mieć nowy plugin, typowo na swoje potrzeby to niech się też wykaże inicjatywą ze swojej strony i dopyta o szczegóły. My za pomoc nic nie mamy, poza straconym czasem.


Nigdzie nie napisałem o pisaniu gotowców, napisałem o tym, że dla kogoś kto oczekuje odpowiedzi może nic nie powiedzieć spróbuj użyć tego i tamtego, bez choćby cienia wytłumaczenia czym się to różni od używanego przez niego obecnie sposobu lub jak trzeba dostosować kod (w tym przypadku wystarczyłoby opisać użyj Ham_Weapon_SecondaryAttack aby sprawdzić jaki atak nożem wykonuje gracz, a następnie w evencie, którego teraz używasz wykonaj to co chcesz. Nie wykonuj tego bezpośrednio w Ham_Weapon_SecondaryAttack bo on się wykonuje przed właściwym zadaniem obrażeń).

To tak jakby Jedi zamiast uczyć padawana jak się posługiwać mocą powtarzał mu w kółko "użyj mocy". Czegoś go to nauczy?

Chyba troszkę mnie nie zrozumiałeś. Widzę kod źródłowy i to bardzo dobrze. Poczytaj sobie SDK metamoda. Komu by się chciało testować tyle ?? By znać całą grę w 100% Ja polecam najpierw w teorii szybko przelecieć SDK aby sprawdzić kiedy jest modyfikowana wartość m_flNextSecondaryAttack następnie w praktyce dokładnie poszukać błędów/nieprawidłowości które mogły by zniszczyć/zaburzyć teorię.

Zrozum różnicę pomiędzy tym, co Ci dają testy, a tym co Ci da inżynieria wsteczna. Przy testach NIGDY nie pokryjesz 100% przypadków, bo zawsze znajdzie się coś, co potencjalnie nie powinno mieć wpływu, a ma. Przy inżynierii wstecznej odkryjesz wszystko, co ma wpływ na daną wartość, więc zyskasz pewność.
  • +
  • -
  • 1

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





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

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