←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Czy musze sprawdzać damagebit...


Najlepsza odpowiedź BlackPerfum 29.06.2014 16:25

Kod na celu ma: 1/6 na natychmiastowe zabicie z p228 i +10 obrazen z niego

Powinno być lub na +10 dmg haha.gif
 

koro broń gracza to p228 to damagebits musi byd DMG_BULLET

Nie musi a rzuć HE i zmień broń na p228 następnie zobacz jakią wykryło twoją broń a jakie damagebits
 

Co zwrocic po zabiciu?

Dużej różnicy to nie robi zwracaj między 1 a 3 haha.gif Tzn wybierz sobie między:
HAM_IGNORED
HAM_HANDLED
HAM_OVERRIDE
Ale już jest różnica co zwrócisz po SetHamParamFloat. Osobiście polecam operowanie nad zmienną nagłówkową damage a dopiero na sam koniec funkcji ustawiać dmg xD Przejdź do postu
Zablokowany

  • +
  • -
Rivit - zdjęcie Rivit 29.06.2014

Witam.

 

Czy w tym:

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

	if(!ma_perk[idattacker])
		return HAM_IGNORED;
		
      if(get_user_weapon(idattacker) != CSW_P228)
		return HAM_IGNORED;

	if(!random(6))
	{
		ExecuteHamB(Ham_Killed, this, idattacker, 1)
		return PLUGIN_HANDLED //CO TU ZWROCIC?
	}
	else
            SetHamParamFloat(4, damage+10)
		
	return HAM_IGNORED	
}

Kod na celu ma: 1/6 na natychmiastowe zabicie z p228 i +10 obrazen z niego

 

Skoro broń gracza to p228 to damagebits musi byd DMG_BULLET

 

+ Co zwrocic po zabiciu?

Odpowiedz

  • +
  • -
Najlepsza odpowiedź BlackPerfum - zdjęcie BlackPerfum 29.06.2014

Kod na celu ma: 1/6 na natychmiastowe zabicie z p228 i +10 obrazen z niego

Powinno być lub na +10 dmg haha.gif
 

koro broń gracza to p228 to damagebits musi byd DMG_BULLET

Nie musi a rzuć HE i zmień broń na p228 następnie zobacz jakią wykryło twoją broń a jakie damagebits
 

Co zwrocic po zabiciu?

Dużej różnicy to nie robi zwracaj między 1 a 3 haha.gif Tzn wybierz sobie między:
HAM_IGNORED
HAM_HANDLED
HAM_OVERRIDE
Ale już jest różnica co zwrócisz po SetHamParamFloat. Osobiście polecam operowanie nad zmienną nagłówkową damage a dopiero na sam koniec funkcji ustawiać dmg xD
Użytkownik BlackPerfum edytował ten post 29.06.2014 16:27
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 29.06.2014

Tak musisz sprawdzać

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 29.06.2014

Dobra wiem. Jestem debilem :) Ten HE zawsze sprawia problemy/komplikuje

@BlackPerfum
Uzywam SetHamParamFloat w srodku i co mam zwrocic? A czasem na koncu i co wtedy?
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 01.07.2014

Uzywam SetHamParamFloat w srodku i co mam zwrocic? A czasem na koncu i co wtedy?

Polecam używanie tego na samym końcu gdyż nie ma się problemów z zakańczaniem na parę sposobów funkcji ;D
Najlepiej pokaż przykładowy kod
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 01.07.2014

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
if(!is_user_connected(idattacker)|| !ma_perk[idattacker] || get_user_weapon(idattacker) != CSW_P228 || !(damagebits & DMG_BULLET)) return HAM_IGNORED;


if(!random(6))
{
   SetHamParamFloat(4, float(get_user_health))
   return  //CO TU ZWROCIC?
}
else
{
   SetHamParamFloat(4, damage+10)
   return  //CO TU ZWROCIC?
}

return HAM_IGNORED
}
Kurde. Sam nie wiem. W tutorialu 'wplywanie na obrazenia' pisze zeby zwracac HAM_HANDLED zeby zatwierdzic zmiany. Wiec jak to jest?
Odpowiedz

  • +
  • -
szelbi - zdjęcie szelbi 01.07.2014

Ja bym to zrobił tak, ale nie wiem czy zadziała:

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!is_user_connected(idattacker)|| !ma_perk[idattacker] || get_user_weapon(idattacker) != CSW_P228 || !(damagebits & DMG_BULLET))
	return HAM_IGNORED;
	
	if(!random(6))
	damage = float(get_user_health(id)); // zapomniales o id
	else
	damage += 10.0;

	SetHamParamFloat(4, damage);
	return HAM_IGNORED;
}

//edit

 

Tak btw. to stosując to, co napisałeś wyżej, możesz równie dobrze nic nie zwracać i powinno działać ;)

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 01.07.2014

Aaaa no tak tez mozna.

Ale jestes pewien ze obrazenia zostana dodane/ustawienie? Potem zwracasz IGNORED.

amxx.pl/topic/14829-wplywanie-na-obrazenia/
Odpowiedz

  • +
  • -
szelbi - zdjęcie szelbi 01.07.2014

Stosuję identyczny patent w innym pluginie i tam działa bez problemu. Co do tych poradników, to ja przy pisaniu pluginów używam tylko HAM_IGNORED oraz HAM_SUPERCEDE i jakoś nigdy nie miałem problemu :D

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 01.07.2014

Do czego supercede?

Moglbys rzucic jakis kod? Przykladowy, dzialajacy plugin.
Odpowiedz

  • +
  • -
szelbi - zdjęcie szelbi 01.07.2014

HAM_SUPERCEDE używałem w silniku JB, kiedy chciałem całkowicie zatrzymać zadawanie obrażeń, np. żeby CT nie mogło bić TT w danym przypadku itp.

public player_damage(victim, ent, attacker, Float:damage, bits)
{	
	if(victim == attacker || !is_user_connected(attacker))
	return HAM_IGNORED;
	
	/* Gracz majacy FreeDay'a nie zadaje obrazen CT */
	if(cs_get_user_team(victim) == CS_TEAM_CT && FreeDayGracz[attacker])
	return HAM_SUPERCEDE;
	
	/* CT nie zadaje obrazen TT, jesli zmienna nieaktywna */
	if(cs_get_user_team(attacker) == CS_TEAM_CT && cs_get_user_team(victim) == CS_TEAM_T && !zmienna[CT_HIT_TT])
	return HAM_SUPERCEDE;
	
	/* TT nie zadaje sobie nawzajem obrazen, jesli zmienna nieaktywna */
	if(cs_get_user_team(attacker) == CS_TEAM_T && cs_get_user_team(victim) == CS_TEAM_T && !zmienna[WALKA])
	return HAM_SUPERCEDE;
}
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 01.07.2014

Dobra.
Czyli SUPERCEDE blokuje tak ze inne pluginy nie moga tego wychwycic?

To dlaczego R3X pisal ze HANDLED zatwierdza zmiany?
Chce zeby to wylapywaly inne pluginy...
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 01.07.2014

W tutorialu 'wplywanie na obrazenia' pisze zeby zwracac HAM_HANDLED zeby zatwierdzic zmiany

I dobrze tam prawią ;D
 

możesz równie dobrze nic nie zwracać i powinno działać

Tylko że pisząc wszyscy powinniśmy być pewni że nasz kod zadziała ;D
Oczywiście szansa na to że metamod czegoś nieogarnie wynosi 1/d245777abca64ece2d5d7ca0d19fddb6.png
Ale powinniśmy się bać tej malutkiej szansy i to bardzo :D

Dobra.
Czyli SUPERCEDE blokuje tak ze inne pluginy nie moga tego wychwycic?

Zawsze się w jakiś sposób da wychwycić albo po prostu info o dmg najpierw doszło do jakiegoś pluginu potem do pluginu blokującego :(
Czyli pewni nie jesteśmy że nie dojdzie ale ogułem zwrócenie tej wartości równa się z zablokowaniem funkcji

To dlaczego R3X pisal ze HANDLED zatwierdza zmiany?
Chce zeby to wylapywaly inne pluginy...

Żeby inny pluginy łapały zmienione dmg ;D
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 01.07.2014

Popatrz na kod ktory dal norbi :)

Jak tam wepchnac return HAM_HANDLED ?

Do mojego jest prosto bo dajesz miedzy klamrami.
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 01.07.2014

Tam jest jeszcze prościej daj po SetHamParamFloat
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 01.07.2014

chodzi Ci o zamienienie IGNORED na HANDLED ??
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 01.07.2014

Tak xD
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 01.07.2014

Hmmm ale to na pewno tak?

Chociaz faktycznie. Jesli nie spelnia warunkow to zwroci sie IGNORED a jesli spelni to SetHamParamFloat.

Dobra dzięki wam :) plusy rozdam pozniej
Odpowiedz
Zablokowany