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] Wyzerowanie Float'u oraz sprawdzenie czy ofiarą jest ent


Najlepsza odpowiedź Master Yoga, 26.06.2015 07:22

Przecie ci napisałem jak masz to zarejestrować:

RegisterHam(Ham_TakeDamage, "func_breakable", "fwHamTakeDamage" );

i to jest też źle i już Ci mówie dlaczego.
bo Nazwa klasy nie równa się "func_breakable", a "func_wall"
pisałem w 1 poście :
 
 

new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_wall"));
set_pev(ent,pev_classname,"Nazwa");

Więc jak już to powinno być :

RegisterHam(Ham_TakeDamage, "func_wall", "fwHamTakeDamage" );

i dziwni mnie, że nikt ( w tym też ja na początku ) nie zauważył, że public takedamagepre różni się od zarejestrowanego Ham'a takedamage :)

 

===============================================================================

== Także dziękuję wszystkim zaangażowanym w ten temat ( wszyscy oczywiście dostają plusiki ).           ==

== Ja wiem, że zrobiliście to specjalnie by skłonić mnie do myślenia, i dla mej satysfakcji. :P                  ==
==  Dzięki Ziomsy :D      ( doszedłem, działa )                                                                                          ==

==================================================================================

 

Przejdź do postu


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

#1 Master Yoga

    Support Team | Mocarz

  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 24.06.2015 18:52

Witam. Mam maly problem a mianowicie.

new Float:Damage[33]
public ForwardPlayerDmg(iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits) {
	if(iAttacker != iVictim && get_user_team(iVictim) != get_user_team(iAttacker)){
		Damage[iAttacker] += fDamage;
		floatround(Damage[iAttacker], floatround_floor);
		if(Damage[iAttacker] > 40){
Damage[iAttacker] == 0.0

//kod 

Próbuje zliczyć zadawane obrażenia przez gracza i działa mi to za pierwszym razem, ale gdy juz dalszy kod sie wykony to nie zeruje mi Float'u Damage I po wykonaniu tego jakiekolwiek obrazenie powoduje ponowne wywołanie  choc po warunku daje Damage[iAttacker] = 0 a Float dalej osiaga wartosci powyzej tych przykladowych 40 dmg.

W którym miejscu robię błąd ?

 

2. np na podstawie forwardu powyzej jak można sprawdzić czy ofiarą jest jakiś ent ?

Proszę o jakiś przykład bo nie wiem jaką funkcję porównywać.

new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_wall"));
set_pev(ent,pev_classname,"Nazwa");

  • +
  • -
  • 0

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


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#2 Sniper Elite

    Master

  • Power User

Reputacja: 176
Profesjonalista

  • Postów:981
  • GG:
  • Imię:Konrad
  • Lokalizacja:Skryptolandia
Offline

Napisano 24.06.2015 19:12

To

==

się nazywa operator porównania i pomyliłeś go z:

=

operator przypisania.

 

A z tym drugim to nie wiem o co kaman. Chodzi o jakiś określony ent stworzony przez ciebie czy zespawnowany już na mapę? Wiesz jak się nazywa?


  • +
  • -
  • 1

Kontakt:

Steam: CSnajper

GG: 4394855

 

Na steam i GG pomagam wyłącznie odpłatnie.


#3 Master Yoga

    Support Team | Mocarz

  • Autor tematu
  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 24.06.2015 19:16

o luju brakuje mi podstawowej wiedzy :D

co do drugiego to chodzi mi o określony ent tworzony np. przeze mnie . 

Nie mam pojęcia do czego przyrównać

if ( iVictim == i jaka funkcje powinna sie tu znalezc )

 

 

A i czy kozystajac z "ForwardPlayerDmg" zawszę będzie nam odczytywał każdy dmg.

Bo pomimo wczesniejsszego warunku if ( iAttacker != iVictim ) nalicza mi dmg ktore sam sobie zadaje.

Czy jest może jakiś sposób by liczyło mi tylko dmg zadwane przeciwnikom za pomoca "ForwardPlayerDmg" ?


Użytkownik Master Yoga edytował ten post 24.06.2015 19:26

  • +
  • -
  • 0

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


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#4 Sniper Elite

    Master

  • Power User

Reputacja: 176
Profesjonalista

  • Postów:981
  • GG:
  • Imię:Konrad
  • Lokalizacja:Skryptolandia
Offline

Napisano 24.06.2015 20:43


Bo pomimo wczesniejsszego warunku if ( iAttacker != iVictim ) nalicza mi dmg ktore sam sobie zadaje.

 

Musisz jeszcze sprawdzić czy attacker !=0 (np. upadek z wysokości)

if ( iAttacker != iVictim && iAttacker !=0)

A i czy kozystajac z "ForwardPlayerDmg" zawszę będzie nam odczytywał każdy dmg.

 

Obrażenia chyba każde, ale nie każdą zmianę HP (np. przez set_user_health)

 

Dalej nie wiem dokładnie o co chodzi. Chcesz sprawdzić czy ofiarą jest byt który stworzyłeś?

 

Ja to robiłem w taki sposób:

public plugin_init()
{
    RegisterHam(Ham_TakeDamage, "func_breakable", "fwHamTakeDamage" );
}
​public fwHamTakeDamage( this, idinflictor, idattacker, Float:damage, damagebits ) {
static classname[ 20 ];
pev( this, pev_classname, classname, 19 );


if( ( equal( classname, "Nazwa")))
{
    //tu kod jezeli ofiara jest nasz byt
}

return HAM_IGNORED;
}

Wiadomo, zamiast "Nazwa" dajesz nazwę jaką nadałeś bytowi. O to chodziło?


  • +
  • -
  • 1

Kontakt:

Steam: CSnajper

GG: 4394855

 

Na steam i GG pomagam wyłącznie odpłatnie.


#5 Master Yoga

    Support Team | Mocarz

  • Autor tematu
  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 24.06.2015 21:44

Masz racje nie uwzględniłem upadku z wysokości.
Co do 2 pytania to byles blisko bo tez o tym myślałem ale chce zablokować obrażenia dla określonego ent do określonych atakujących. Żeby lepiej ci to zobrazować to dam ci taki przykład każdy gracz CT nie będzie mógł zadac obrazen określonemu bytowi.
Wygladalo by to mniej więcej tak :
If ( cs_get_user_team(iAttacker) == 2 && iVictim == byt )
I w tym właśnie miejscu nie wiem co wstawić za "byt". Dalej bylaby tylko funkcja blokujaca zadawane dmg

P.s z góry przepraszam za ewentualne bledy - pisane na tel


@edit czekaj czekaj ty pobrales classname dla ""this"" a potem porównujesz go do. Bytu za pomocą equal w sumie wystarczyło by w tym miejsccu sprawdzić Atakującego i wyszlo by to samo ... Jutro jak będę na kompie to to sprawdzę

Użytkownik Master Yoga edytował ten post 24.06.2015 21:49

  • +
  • -
  • 0

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


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#6 Sniper Elite

    Master

  • Power User

Reputacja: 176
Profesjonalista

  • Postów:981
  • GG:
  • Imię:Konrad
  • Lokalizacja:Skryptolandia
Offline

Napisano 25.06.2015 07:14

Nom, dobrze kombinujesz:

​public fwHamTakeDamage( this, idinflictor, idattacker, Float:damage, damagebits ) {
static classname[ 20 ];
pev( this, pev_classname, classname, 19 );


if( ( equal( classname, "Nazwa")) && cs_get_user_team(idattacker) == 2)
{
    return HAM_SUPERCEDE;
}

return HAM_IGNORED;
}

Tak powinno być dobrze.


  • +
  • -
  • 1

Kontakt:

Steam: CSnajper

GG: 4394855

 

Na steam i GG pomagam wyłącznie odpłatnie.


#7 Master Yoga

    Support Team | Mocarz

  • Autor tematu
  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 25.06.2015 10:51

Ok czy samo ham_supercede zablokuje obrażenia zadawane okreslonemu bytowi? Czy lepiej uzyc sethamparamfloat ?

return HAM_SUPERCEDE;
}


  • +
  • -
  • 0

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


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#8 wiwi249

    Wszechobecny

  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:440
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Tarnobrzeg
Offline

Napisano 25.06.2015 11:33

SetHamParamFloat jak sama nazwa wskazuje to zmiana parametru w tym forwardzie, czyli zadawanego damage.

HAM_SUPERCEDE blokuje wykonanie forwardu.

 

Nie lepiej użyć SUPERCEDE i przerwać niż jeszcze dodatkowo zmieniać wartość dmg?


  • +
  • -
  • 0

Wykonuję strony internetowe, zlecenia AMXX i HLDS - w tym pisanie pluginów, ogarnianie serwerów, edycja i tworzenie modeli.

Potrzebujesz czegoś? Pisz!

 

"śpieszmy się pisać posty, tak szybko banują..." ~ sebul


#9 Master Yoga

    Support Team | Mocarz

  • Autor tematu
  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 25.06.2015 12:52

SetHamParamFloat jak sama nazwa wskazuje to zmiana parametru w tym forwardzie, czyli zadawanego damage.
HAM_SUPERCEDE blokuje wykonanie forwardu.
 
Nie lepiej użyć SUPERCEDE i przerwać niż jeszcze dodatkowo zmieniać wartość dmg?

czytanie ze zrozumieniem !!! Ja pytałem nie stwierdzałem.
  • +
  • -
  • 0

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


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#10 wiwi249

    Wszechobecny

  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:440
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Tarnobrzeg
Offline

Napisano 25.06.2015 13:28

 

SetHamParamFloat jak sama nazwa wskazuje to zmiana parametru w tym forwardzie, czyli zadawanego damage.
HAM_SUPERCEDE blokuje wykonanie forwardu.
 
Nie lepiej użyć SUPERCEDE i przerwać niż jeszcze dodatkowo zmieniać wartość dmg?

czytanie ze zrozumieniem !!! Ja pytałem nie stwierdzałem.

 

Czytanie ze zrozumieniem. Odpowiedziałem na Twoje pytanie pytaniem. Takie to trudne że musisz sie pluć?


  • +
  • -
  • 0

Wykonuję strony internetowe, zlecenia AMXX i HLDS - w tym pisanie pluginów, ogarnianie serwerów, edycja i tworzenie modeli.

Potrzebujesz czegoś? Pisz!

 

"śpieszmy się pisać posty, tak szybko banują..." ~ sebul


#11 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 25.06.2015 13:32

#define HAM_IGNORED        1    /**< Calls target function, returns normal value */
#define HAM_HANDLED        2    /**< Tells the module you did something, still calls target function and returns normal value */
#define HAM_OVERRIDE    3    /**< Still calls the target function, but returns whatever is set with SetHamReturn*() */
#define HAM_SUPERCEDE    4    /**< Block the target call, and use your return value (if applicable) (Set with SetHamReturn*()) */

  • +
  • -
  • 1

#12 Master Yoga

    Support Team | Mocarz

  • Autor tematu
  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 25.06.2015 16:09

1. Smiga.

2. Jest problem


Tak powinno być dobrze.
public fw_TakeDamagePre( this, idinflictor, idattacker, Float:damage, damagebits ){
	static classname[ 20 ];
	pev( this, pev_classname, classname, 19 );
	if ( (equal( classname, "Nazwa bytu")) && !zp_get_user_zombie(idattacker)){
		client_print(idattacker, print_chat, " Uderzasz w byt " )
		return HAM_SUPERCEDE;
	}
	return HAM_SUPERCEDE;
}

zrobiłem to w taki sposób i powiem Ci, że niestety nie pykło.

A czy za pomocą stałej pev_targetname uchwycę nazwę mojego bytu, czy bytu uchyconego przez moj byt ?

w plugu mam

set_pev(ent,pev_classname,"nazwa_bytu");

i podstawiam te ciapki jako 2 argument equal i niestety nie działa :(. Nie wyswietla nawet tej wiadomości uderzasz w byt ...

jakieś pomysły ?


Użytkownik Master Yoga edytował ten post 25.06.2015 16:38

  • +
  • -
  • 0

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


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#13 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 25.06.2015 17:16

this - byt, który przyjmuje obrażenia

idinflictor - byt zadający obrażenia

idattacker - gracz atakujący

 

Jeżeli idinflictor != idattacker to najprawdopodobniej ofiara oberwała granatem, rakietą, miną, INNYM BYTEM

 

 

wyprintuj sobie classname i zobacz co tam sie dzieje...


  • +
  • -
  • 1

#14 Master Yoga

    Support Team | Mocarz

  • Autor tematu
  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 25.06.2015 17:33

tak jakby nie pobiera classname albo ja zle to robie .

Spoiler

  • +
  • -
  • 0

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


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#15 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 25.06.2015 19:46

Printuj classname od razu po pobraniu, nie na komendę


Pokaż jak rejestrujesz event
  • +
  • -
  • 1

#16 Master Yoga

    Support Team | Mocarz

  • Autor tematu
  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 25.06.2015 19:55

Printuj classname od razu po pobraniu, nie na komendę


Pokaż jak rejestrujesz event

RegisterHam( Ham_TakeDamage, "player", "fw_TakeDamagePre" );
Spoiler

 

@edit

Przy skakaniu z wysokości czy zadawaniu dmg przeciwnikowi zawsze zwraca "player"
gdy strzelam w byt to nic sie nie dzieję, tak jakby nie wykrywało obrazen


Użytkownik Master Yoga edytował ten post 25.06.2015 20:12

  • +
  • -
  • 0

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


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#17 Sniper Elite

    Master

  • Power User

Reputacja: 176
Profesjonalista

  • Postów:981
  • GG:
  • Imię:Konrad
  • Lokalizacja:Skryptolandia
Offline

Napisano 25.06.2015 20:38

Przecie ci napisałem jak masz to zarejestrować:

RegisterHam(Ham_TakeDamage, "func_breakable", "fwHamTakeDamage" );

  • +
  • -
  • 1

Kontakt:

Steam: CSnajper

GG: 4394855

 

Na steam i GG pomagam wyłącznie odpłatnie.


#18 Master Yoga

    Support Team | Mocarz

  • Autor tematu
  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 25.06.2015 20:43

 

Przecie ci napisałem jak masz to zarejestrować:

RegisterHam(Ham_TakeDamage, "func_breakable", "fwHamTakeDamage" );

wybacz musiałem przeoczyć, ale dalej bez rezultatu.

funkcje nadające hp bytowi ( może komuś przyjdzie jakiś wspaniały pomysł )

set_pev(ent,pev_takedamage,DAMAGE_NO);
set_pev(ent,pev_health,zdrowie);
set_pev(ent,pev_takedamage,DAMAGE_YES);

Użytkownik Master Yoga edytował ten post 25.06.2015 20:45

  • +
  • -
  • 0

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


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#19 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 26.06.2015 06:17

Daj cały kod tworzenia enta, musisz zarejestrować obrażenia dla tego bytu, a nie dla playera
  • +
  • -
  • 1

#20 Master Yoga

    Support Team | Mocarz

  • Autor tematu
  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 26.06.2015 07:22   Najlepsza odpowiedź

Przecie ci napisałem jak masz to zarejestrować:

RegisterHam(Ham_TakeDamage, "func_breakable", "fwHamTakeDamage" );

i to jest też źle i już Ci mówie dlaczego.
bo Nazwa klasy nie równa się "func_breakable", a "func_wall"
pisałem w 1 poście :
 
 

new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_wall"));
set_pev(ent,pev_classname,"Nazwa");

Więc jak już to powinno być :

RegisterHam(Ham_TakeDamage, "func_wall", "fwHamTakeDamage" );

i dziwni mnie, że nikt ( w tym też ja na początku ) nie zauważył, że public takedamagepre różni się od zarejestrowanego Ham'a takedamage :)

 

===============================================================================

== Także dziękuję wszystkim zaangażowanym w ten temat ( wszyscy oczywiście dostają plusiki ).           ==

== Ja wiem, że zrobiliście to specjalnie by skłonić mnie do myślenia, i dla mej satysfakcji. :P                  ==
==  Dzięki Ziomsy :D      ( doszedłem, działa )                                                                                          ==

==================================================================================

 


Użytkownik Master Yoga edytował ten post 26.06.2015 07:46

  • +
  • -
  • 0

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


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png





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

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