Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

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

Problem z perkiem - kolejka CT


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

#1 Vakos

    Życzliwy

  • Użytkownik

Reputacja: 0
zer0.

  • Postów:26
  • Imię:Marcin
  • Lokalizacja:Opolskie
Offline

Napisano 14.05.2016 16:50

Witam.

 

 

Posiadam serwer DR na którym mam wgraną kolejkę CT. Na serwerze również posiadam klasy i perki. Osoba która ma perk platynowe naboje w TT może zabijać wszystkie osoby w CT bez kolejki. Tak nie powinno być, poprawnie ma być, że zabija/bije się z 1 osobą która jest na pierwszym miejscu w kolejce a tak nie jest.

 

Czekam na pomoc ;)


  • +
  • -
  • 0

#2 Master Yoga

    Support Team | Mocarz

  • Support Team

Reputacja: 115
Zaawansowany

  • Postów:250
  • GG:
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 20.05.2016 14:30

Widzę 2 rozwiązania:

- zacznij rozsądniej dobierać perki

- edytuj ( czyt. popraw ) plugin


  • +
  • -
  • 0

HTML      ★ CSS       ★ JAVASCRIPT       ★ AJAX       ★ JQUERY       ★ PHP       ★ C++       ★ PAWN      ★ SQL       ★ Objective-C++


#3 Vakos

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 0
zer0.

  • Postów:26
  • Imię:Marcin
  • Lokalizacja:Opolskie
Offline

Napisano 28.05.2016 17:07

1) Co to ma do problemu? - nic

2) Jakbym wiedział o jaki błąd w pluginie chodzi :)


  • +
  • -
  • 0

#4 Master Yoga

    Support Team | Mocarz

  • Support Team

Reputacja: 115
Zaawansowany

  • Postów:250
  • GG:
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 30.05.2016 23:14

Już spieszę ci z wyjaśnieniem w czym leży problem.
 
Przedstawię ci kod natywu cod_inflict_damage
 

public ZadajObrazenia(atakujacy, ofiara, Float:obrazenia, Float:czynnik_inteligencji, byt_uszkadzajacy, dodatkowe_flagi)
	ExecuteHam(Ham_TakeDamage, ofiara, byt_uszkadzajacy, atakujacy, obrazenia+PobierzInteligencje(atakujacy, 1, 1, 1)*czynnik_inteligencji, /*1<<31 |*/ dodatkowe_flagi);
	

Co na temat ExecuteHam mówi nam dokumentacja ? 
Cytuję: "Wywołuje zdarzenie (z ham_const) ale nie jest ono wychwytywane przez RegisterHam." Więc znasz już przyczynę dlaczego gracz z tym perkiem może zabijać graczy nie będących jako pierwszy w kolejce. No bo w końcu jak zablokować coś czego nie da się uchwycić ?
 
Dlatego dobrym rozwiązaniem była by zmiana :

  cod_inflict_damage(idattacker, this, float(wartosc_perku[idattacker]), 0.0, idinflictor, damagebits);

na funckję ExecuteHamB ( ExecuteHamB ), która w odróżnieniu od w/w jest przechwytywana.

 

Funkcja wywołuje wydarzenie kanapki (czyli wydarzenia z ham_const).

W przeciwieństwie do ExecuteHam ta funkcja dodatkowo jest wychwytywana przez RegisterHam/RegisterHamFromEntity

 

Niestety, tutaj rodzi nam się kolejny problem. Bo w/w funkcja wywoła nam zdarzenie, które z kolei wywoła to samo zdarzenie, zakreślając błędne koło. Dlatego musimy przechytrzyć ten mechanizm, np. definiując sobie nowy dmgbits bądź nowy byt zadający dmg ( idinflictor ).

Musimy przerwać tę operację, wiedząc, że otrzymane obrażenia pochodzą od naszego perku.

#define perk_DMGiD 2849

[...]

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!is_user_connected(idattacker))
		return HAM_IGNORED;

        if(idinflictor == perk_DMGiD)
               return HAM_IGNORED;
		
	if(ma_perk[idattacker])
		ExecuteHamB(Ham_TakeDamage, this, perk_DMGiD, idattacker, float(wartosc_perku[idattacker]), damagebits)

	return HAM_IGNORED;
}

Skoro już nasze zdarzenie jest przechwytywane to całą brudną robotę powinien zrobić już za nas plugin od kolejki blokując zadawane obrażenia osobom nie będącym liderem listy.

 

Enjoy :)


  • +
  • -
  • 1

HTML      ★ CSS       ★ JAVASCRIPT       ★ AJAX       ★ JQUERY       ★ PHP       ★ C++       ★ PAWN      ★ SQL       ★ Objective-C++





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

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