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

Ham_TakeDamage - wpływanie na obrażenia


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

#1 Onyke

    Godlike

  • Przyjaciel

Reputacja: 708
Guru

  • Postów:2 178
Offline

Napisano 23.02.2014 20:07

RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
public TakeDamage(this, inflictor, attacker, Float:damage)
{
	new weapon = get_user_weapon(attacker)
	if(is_user_alive(this))
	{
		if(ma_bonus(idattacker) && weapon == CSW_AK47){
			damage+=15
		}
		if(ma_jakis_inny_bonus(this)){
			damage-=20
		}
		damage *= 0.5;
		
		SetHamParamFloat(4, damage);
	}
}
To wszystko zrobi się w takiej kolejności: (Przypuśćmy, że oddałem 1 strzał który normalnie powinien wynieść 100 dmg.)?
Sprawdza czy ofiara żyje.
Jeśli atakujący ma "ma_bonus" i broń AK47 dodaje mu +15 DMG
Jesli ofiara ma "ma_jakis_inny_bonus" dostaje 20 DMG mniej
(Czyli obecnie wychodzi, że zostało zadane 100+15-20 dmg = 95 dmg)
I to jest redukowane o 50% czyli ostatecznie zostało zadane ~47.5dmg
To wszystko się sumuje i będzie działać tak jak napisałem czy nie?
  • +
  • -
  • 0

#2 Droso

    Dawniej HubertTM

  • Support Team

Reputacja: 1 291
Godlike

  • Postów:2 371
  • Steam:steam
  • Imię:Hubert
  • Lokalizacja:Wrocław
Offline

Napisano 23.02.2014 20:16

będzie działać tak jak mówisz.

 

Jednak

new weapon = get_user_weapon(attacker)

nie zawsze pokaże jaką bronią zostało zadane dmg, bo może to też być granat, a w momencie wybuchu gracz może zmienić na ak47 czyli wybuch granatu będzie miał o 15 dmg więcej.

 

Jeśli granat inf != attacker, możesz też sprawdzać classname inf.

 

+ sprawdzaj połączenie, albo żywotność atakującego (jeżeli nie chcesz brać pod uwagę granata, to żywotność, a jak chcesz to połączenie :P)


Użytkownik HubertTM edytował ten post 23.02.2014 20:17

  • +
  • -
  • 1

Piszę pluginy pod: AMX MOD X oraz SOURCE MOD!

Na zlecenie i bez zlecenia zresztą też!


#3 Aemiksowy

    Banned

  • Zbanowany

Reputacja: 34
Życzliwy

  • Postów:222
  • Lokalizacja::)
Offline

Napisano 25.02.2014 12:23


+ sprawdzaj połączenie, albo żywotność atakującego (jeżeli nie chcesz brać pod uwagę granata, to żywotność, a jak chcesz to połączenie )

 

Być może nie powinienem w tym wątku, ale chciałbym dopytać. Jeśli załóżmy, zrobię natychmiastowe zabicie z granata, to jeśli zamiast sprawdzanie żywotności atakującego sprawdzę czy on po prostu jest na serwerze, może dojść do jakiegoś konfliktu modyfikacji, np. crash serwera? 


Użytkownik Aemiksowy edytował ten post 25.02.2014 12:29


#4 Droso

    Dawniej HubertTM

  • Support Team

Reputacja: 1 291
Godlike

  • Postów:2 371
  • Steam:steam
  • Imię:Hubert
  • Lokalizacja:Wrocław
Offline

Napisano 25.02.2014 16:58

Nie, niby czemu wpływasz na obrażenia ofiary, atakujący nawet nie musi być połączony, bo może rzucić granat i wyjść z serwera, więc też może być natychmiastowe zabicie :P


  • +
  • -
  • 0

Piszę pluginy pod: AMX MOD X oraz SOURCE MOD!

Na zlecenie i bez zlecenia zresztą też!


#5 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 08.03.2014 08:59

this to identyfikator gracz i jest identyfikatorem gracza (od 1 do liczby slotów włącznie, a więc od 1 do 32).
I zgodnie z ddokumentacją kanapki


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

możemy być pewni, że jest to gracz dzięki deklaracji z klasą player.
Jednakże ani inflictor ani attacker nie muszą być ani graczem, ani istniejącym bytem.
 
Polecam następujący schemat wyznaczania atakującego celem uwzględnienia posiadanych przez niego bonusów:

  • if attacker is connected player, return attacker else
  • if owner = pev(attacker, pev_owner) is connected player, return owner else
  • return "unknown attacker or invalid id (not a connected player)" – assertion.





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

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