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] Problem z Wpływaniem na DMG


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

#1 Pan PrO

    Wszechpomocny

  • Użytkownik

Reputacja: 99
Zaawansowany

  • Postów:388
  • Lokalizacja:PC
Offline

Napisano 20.10.2012 12:09

Witam. Zrobiłem funkcję która Zwiększa DMG od granatu o 20% i eleminuje DMG wywołane przez wybuch bomby.A więc tak dodatkowe DMG z HE działa lecz gdy wybucha bomba to mnie zabija a nie powinno.


#define DMG_HE (1<<24)
#define DMG_BLAST (1<<6)


RegisterHam(Ham_TakeDamage, "player", "TakeDamage", 0);


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

if(get_user_team(this) == get_user_team(idattacker))
return HAM_IGNORED;

if(!(get_user_flags(idattacker) & ADMIN_LEVEL_H))
return HAM_IGNORED;

if(damagebits & DMG_HE)
ExecuteHam(Ham_TakeDamage, this, idinflictor, idattacker, damage*0.2, damagebits);

if(damagebits & DMG_BLAST)
return HAM_SUPERCEDE

return HAM_IGNORED;
}


Co jest przyczyną tego błędu

Użytkownik Pan PrO edytował ten post 20.10.2012 12:10

  • +
  • -
  • 0

#2 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 20.10.2012 16:45

if(get_user_team(this) == get_user_team(idattacker))
return HAM_IGNORED;
Jeśli podłożysz bombę, to jesteś idattacker, a będą raniony tą bombą, jesteś this, więc ten warunek będzie prawdziwy, tym samym funkcja zwróci HAM_IGNORED, zamiast zablokować obrażenia.

Ja mam do Ciebie podstawowe pytanie: czy wiesz, za co odpowiadają parametry funkcji TakeDamage?

@edit: Napisałem prosty plugin, który pokazuje, jak wygląda zadawanie obrażeń przez C4 z niewielkiej odległości.

#include <amxmodx>
#include <hamsandwich>

public plugin_init(){
register_plugin("Test", "0.1", "benio101");
RegisterHam(Ham_TakeDamage, "player", "TakeDamage", 0);
}

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits){
if(is_user_connected(this)){
client_print(this, print_console, "%i attacked %i by %i with %.f dmg", idattacker, this, idinflictor, damage);
}
}
C4 podłożyłem na środku BSa "B" na dd2 i oddaliłem się ku drzwiom. Rezultat:
1 attacked 1 by 127 with 267 dmg
Trzeba także uwzględnić byty typu env_explosion, które towarzyszą obrażeniom bomby, które mogą nas skutecznie zabić jeszcze przed otrzymaniem obrażeń od C4, przykład:
125 attacked 1 by 125 with 37 dmg
126 attacked 1 by 126 with 42 dmg
130 attacked 1 by 130 with 56 dmg
Trzeba zatem wziąć to pod uwagę.

Najważniejsze jednak w Twoim przypadku będzie poznanie, czemu odpowiadają poszczególne argumenty funkcji.

this oznacza ofiarę, osobę, która otrzymuje obrażenia, idinflictor to id bytu, zadającego obrażenia, np. id broni wroga, a idattacker to id atakującego, np. wroga, najczęściej jest to właściciel broni, od której otrzymujemy obrażenia, choć nie zawsze, damage to wartość obrażeń (float), a damagebits to suma binarna typów otrzymywanych obrażeń (czyt. manual).

#3 Pan PrO

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 99
Zaawansowany

  • Postów:388
  • Lokalizacja:PC
Offline

Napisano 21.10.2012 10:47

Wielkie Dzięki Benio już sobie poradzilem.

Można zamknąć

Użytkownik Pan PrO edytował ten post 21.10.2012 10:56

  • +
  • -
  • 0

#4 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 21.10.2012 11:39

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo





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

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