Page 1 of 4

[AMXX] Modificarea DMG-ul făcut de o arma.

Posted: 16 Aug 2013, 17:43
by Hades Ownage
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:

Code: Select all

#include <  hamsandwich  >         
2. Adăugăm un nou define şi anume:

Code: Select all

#define IsPlayer(%0)    ( 1 <= %0 <= g_iMaxPlayers )         
3. Acum trebuie să declarăm g_iMaxPlayers, adăugăm:

Code: Select all

new g_iMaxPlayers
Acum trecem la init ( plugin_init )

1. Adăugăm în init următoarea linie:

Code: Select all

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:

Code: Select all

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:

Code: Select all

/* 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:

Code: Select all

public Player_TakeDamage ( iVictim, iInflictor, iAttacker, Float:fDamage ) {
2. Acum trebuie să adăugăm următoarea verificaţie:

Code: Select all

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:

Code: Select all

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ă:

Code: Select all

return HAM_HANDLED;
5. După asta închidem verificaţia ( if-ul ) cu } si adăugăm:

Code: Select all

return HAM_IGNORED;
Asta a fost tot, codul dvs. trebuie să arate astfel:

Code: Select all

/* 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;
    
}
                        
Dacă doriţi ca doar o singură armă să aibă dmg-ul modificat, atunci daţi click aici.

Dacă întâlniti probleme puteţi să lăsaţi reply în topic şi o să vă răspund cât pot de repede.
Exprimăţi recunoştinţa dacă ţi-a fost de folos acest tutorial !

Re: [AMXX] Modificarea DMG-ul făcut de o arma.

Posted: 16 Aug 2013, 17:53
by CryWolf
Foarte bun tutorialul si bine explicat.

Cea ce vreau sa spun este ca este un tutorial AMXX si categoria mai potrivita pentru el ar fi asta nu ? ce spui ? Alegerea este a ta, dar va fi mult mai vizibil acolo! :)

Re: [AMXX] Modificarea DMG-ul făcut de o arma.

Posted: 16 Aug 2013, 17:56
by Hades Ownage
CryWolf wrote:Foarte bun tutorialul si bine explicat.

Cea ce vreau sa spun este ca este un tutorial AMXX si categoria mai potrivita pentru el ar fi asta nu ? ce spui ? Alegerea este a ta, dar va fi mult mai vizibil acolo! :)
Merge şi acolo, dar mulţi începători cu forumul postează şi cereri de plugine acolo şi acest tutorial o să se piardă prin cereri. Aici sunt doar tutoriale, eu spun că e ok aici. :)

Re: [AMXX] Modificarea DMG-ul făcut de o arma.

Posted: 16 Aug 2013, 18:02
by Hades Ownage
Dacă doriţi să modificaţi dmg-ul doar a unei singure arme faceţi astfel:

* În public-ul nostru ( Player_TakeDamge ) avem o verificaţie, şi anume:

Code: Select all

if ( iInflictor == iAttacker && IsPlayer ( iAttacker ) ) { 
În ea adăugăm următoarea funcţie:

Code: Select all

&& get_user_weapon ( iAttacker ) == CSW_DEAGLE
Verificaţia noastră va arăta astfel:

Code: Select all

if ( iInflictor == iAttacker && IsPlayer ( iAttacker ) && get_user_weapon ( iAttacker ) == CSW_DEAGLE ) { 
  • get_user_weapon ( index ) - verifică arma jucătorului.
  • CSW_DEAGLE - arma care trebuie să o aibă jucătorul ca să facă dmg mai mult.

Re: [AMXX] Modificarea DMG-ul făcut de o arma.

Posted: 16 Aug 2013, 21:45
by CsN^ ;x
Foarte frumos acest tutorial ,e foarte bun pentru incepatorii chiar si pentru mine ca daca e ceva pot sa fac si eu un mic plugin dasta adica sa fac sa imi modific :)) .
OFF : Felicitari pentru grad ;)

Re: [AMXX] Modificarea DMG-ul făcut de o arma.

Posted: 16 Aug 2013, 23:03
by Hades Ownage
O sa mai fac maine cateva, acum sunt dupa telefon.

Re: [AMXX] Modificarea DMG-ul făcut de o arma.

Posted: 17 Aug 2013, 21:40
by prorvl
Ai putea sa-mi spun cum pun damage la o singura clasa?
Exemplu: Clasa Trainer - Damage 3.0...

Re: [AMXX] Modificarea DMG-ul făcut de o arma.

Posted: 17 Aug 2013, 22:55
by Hades Ownage
Creezi un bool ( boolean ) şi îl pui în verificaţia din Player_TakeDamage.
Exemplu:

Code: Select all

new bool: IsTrainer [ 33 ]

if ( iInflictor == iAttacker && IsPlayer ( iAttacker ) && IsTrainer [ iAttacker ] ) {
        // damage
}

 

Re: [AMXX] Modificarea DMG-ul făcut de o arma.

Posted: 18 Aug 2013, 12:41
by prorvl
Bun am inteles cum pun la o clasa dar daca am mai multe?
Fac acelasi lucru?

P.S.: +1 Multumesc

Re: [AMXX] Modificarea DMG-ul făcut de o arma.

Posted: 19 Aug 2013, 09:38
by Hades Ownage
Da, şi spre exemplu dacă ai un meniu cu clase, în handler la meniu ( in case-uri ) pui

Code: Select all

IsTrainer [ id ] = true; 

Re: [AMXX] Modificarea DMG-ul făcut de o arma.

Posted: 19 Aug 2013, 17:40
by prorvl
Mersi mult de ajutor +1 Multumesc!

EDIT: Daca mai am nelamuriri te pot contacta?

Re: [AMXX] Modificarea DMG-ul făcut de o arma.

Posted: 21 Aug 2013, 18:39
by LordOfNothing
thanks boss :D