Jump to content

[mini TuT/Script] OnPlayerTakeDamage (Dobré pro anti-team kill)


Hrb™

Recommended Posts

Zdravím,

 

rozhodl jsem se udělat svůj první mini Tutorial / script.

Velice se to hodí pro anti-team kill. Nemusíte už lidi za to třeba kickovat.

 

Takže přejdeme k obsahu.

 

Obsah:

  1. Úvod, vysvětlení
     
  2. Krok za krokem při tvorbě anti- team killu
     
  3. Konečná podoba anti-team killu

1. Úvod, vysvětlení

 

public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)

 

public OnPlayerTakeDamage - název publicu

 

playerid - hráč, na kterém je způsobena újma na zdraví

 

issuerid - hráč, který působí újmu na zdraví 2. hráči

 

Float: amount - hodnota zdraví nebo vesty, která byla ubrána

 

weaponid - ID zbraně, která způsobila újmu na zdraví

 

 

2. Krok za krokem při tvorbě anti-team killu

 

 

 

public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid) // začneme tím, že si v pawnu najdeme tento public. Pokud zde není, tak ho vložte takto mezi ostatní publicy.
{

 

if(issuerid != INVALID_PLAYER_ID) // podmínka, pokud nemá hráč co dělá újmu na zdraví neplatné ID. (Nevím, jak to přesně přeložit.)
{

 

if(VašeProměnná[playerid] == VašeProměnná[issuerid] ) // pokud proměnné obou hráčů souhlasí. Místo VašeProměnná se dejte Vaši proměnnou třeba pro zaměstnání nebo jiní. (GetPlayerTeam, ..)
{

 

new Float:hp; // vytvoříme si proměnnou pro hráčovo zdraví

 

GetPlayerHealth(playerid, hp); // zjistíme si původní zdraví hráče, který přichází o životy

 

SetPlayerHealth(playerid, hp); // nastavíme mu zpět přesný počet zdraví, který měl před ztrátou zdraví.

 

} // uzavřeme otevřené {
} // uzavřeme otevřené {
return 1; // konec publicu
}

 

 

Když by jste třeba použili jak je:

 

SetPlayerHealth(playerid, hp);

 

toto:

 

SetPlayerHealth(playerid, hp + amount);

 

Tak to hráči nastaví zpět původní zdraví + ještě zdraví, které ztratil.

 

Může se taky hodit pro anti-kill zónu u warpů.

Stačí dat podmínku pokud je v daném radiusu:

 

if(IsPlayerInRangeOfPoint(playerid,1, X, Y, Z )) // 1 - radius (u zón třeba 15.) X,Y,Z - pozice, odkud bude radius. (X, Y a Z si můžeme představit jako střed kruhu.)

 

Konečná podoba:

 

public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
if(issuerid != INVALID_PLAYER_ID)
{
 if ( VašeProměnná[playerid] == VašeProměnná [issuerid] )
 {
	 new Float:hp;
	 GetPlayerHealth(playerid, hp);
	 SetPlayerHealth(playerid, hp);
 }
}
return 1;
}

 

 

Doufám, že se bude hodit.

Pokud najdete chybu, prosím opravte mě. Děkuji.

  • Líbí se mi to! (+1) 3
Link to comment
Share on other sites

O tom vím taky, ale co když mu chceš k tomu napsat zprávu nebo udělat tu zónu u warpů? A navíc, u toho co si poslal tě sice nemůže zabít zbraněmi, ale nožem ano a že by toto byl nějaký velký script, tak to mi nepříjde.

Link to comment
Share on other sites

  • 2 weeks later...

No, v GetPlayerHealth zjistíš hodnotu HP a tu nastavíš, takže se ta hodnota nezmění, výše píšeš toto:

"// nastavíme mu zpět přesný počet zdraví, který měl před ztrátou zdraví." což je blbost

 

Mělo by to být tak, jak jsi psal pak pár řádků pod tím:

 

SetPlayerHealth(playerid, hp + amount);

Link to comment
Share on other sites

Taky jsem si to nejdříve myslel, ale amount je v tomto případě počet zdraví který ztratil. Takže když dáš to, co si psal, tak mu to vrátí jeho zdraví co měl před zásahem + zdraví na víc, které při tom ztratil. Testoval jsem to a je to tak.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...