Descriere: După cum scrie şi în titlu, am să vă arăt cum modificaţi corect dmg-ul făcut de o armă/cuţit/grenadă. Folosind această metodă nu o să primiţi erori în logs iar plugin-ul va funcţiona corect.
Tutorial:
1. Pentru modificarea dmg-ul avem nevoie de modulul hamsandwich pe care trebuie să-l includem astfel:
Cod:
#include < hamsandwich >
2. Adăugăm un nou define şi anume:
Cod:
#define IsPlayer(%0) ( 1 <= %0 <= g_iMaxPlayers )
3. Acum trebuie să declarăm g_iMaxPlayers, adăugăm:
Cod:
new g_iMaxPlayers
Acum trecem la init (plugin_init).
1. Adăugăm în init următoarea linie:
Cod:
g_iMaxPlayers = get_maxplayers ( )
Această linie înseamnă că g_iMaxPlayers caută numărul maxim de jucători după server.
2. Tot în init adăugăm următoarea funcţie ham:
Cod:
RegisterHam ( Ham_TakeDamage, "player", "Player_TakeDamage" )
Ham_TakeDamage = funcţia care o cere modulul ham.
player = entitatea asupra căruia se exercită funcţia.
Player_TakeDamage = numele public-ului care acţionează.
Gata cu init-ul, mai urmează public-ul, codul dvs. trebuie să arate aşa până acum:
Cod:
/* Plugin generated by AMXX-Studio */
#include < amxmodx >
#include < hamsandwich >
#define PLUGIN "Modificare Damage"
#define VERSION "0.1"
#define AUTHOR "hadesownage"
#define IsPlayer(%0) ( 1 <= %0 <= g_iMaxPlayers )
new g_iMaxPlayers;
public plugin_init ( ) {
register_plugin ( PLUGIN, VERSION, AUTHOR );
g_iMaxPlayers = get_maxplayers ( )
RegisterHam ( Ham_TakeDamage, "player", "Player_TakeDamage" );
}
Crearea public-ului:
1. Creeam public-ul cu 4 param-uri şi acelea fiind:
iVictim - index-ul victimei.
iInflictor - cel care atacă.
iAttacker - index-ul atacatorului.
Float:fDamage - damage-ul făcut.
Începutul public-ului va arăta aşa:
Cod:
public Player_TakeDamage ( iVictim, iInflictor, iAttacker, Float:fDamage ) {
2. Acum trebuie să adăugăm următoarea verificaţie:
Cod:
if ( iInflictor == iAttacker && IsPlayer ( iAttacker ) ) {
Aceasta verifică iInflictor este una şi aceeaşi cu atacatorul şi dacă atacatorul este un jucător nu o entitate oarecare.
3. În această verificare trebuie să adăugăm modificarea damage-ului, adăugăm următoarea linie:
Cod:
SetHamParamFloat ( 4, fDamage * 2.0 );
2.0 - cu cât se multiplică dmg-ul făcut de jucător.
2.0 - dublu.
3.0 - triplu.
4.0, 4.2, 4.5, 5.0 - şi tot aşa.
4. După linia de sus adăugăm un return ca funcţia să se oprească:
Cod:
return HAM_HANDLED;
5. După asta închidem verificaţia ( if-ul ) cu } si adăugăm:
Cod:
return HAM_IGNORED;
Asta a fost tot, codul dvs. trebuie să arate astfel:
Cod:
/* Plugin generated by AMXX-Studio */
#include < amxmodx >
#include < hamsandwich >
#define PLUGIN "Modificare Damage"
#define VERSION "0.1"
#define AUTHOR "hadesownage"
#define IsPlayer(%0) ( 1 <= %0 <= g_iMaxPlayers )
new g_iMaxPlayers;
public plugin_init ( ) {
register_plugin ( PLUGIN, VERSION, AUTHOR );
g_iMaxPlayers = get_maxplayers ( )
RegisterHam ( Ham_TakeDamage, "player", "Player_TakeDamage" );
}
public Player_TakeDamage ( iVictim, iInflictor, iAttacker, Float:fDamage ) {
if ( iInflictor == iAttacker && IsPlayer ( iAttacker ) ) {
SetHamParamFloat ( 4, fDamage * 2.0 );
return HAM_HANDLED;
}
return HAM_IGNORED;
}