Agregar daño a sis. de habilidades
#1
Lo que dice el titulo, indagando por Internet encontré un sistema de habilidades de @cLAANS y la verdad lo edite un poco quite algunas cosas que no me gustaban y ahora quiero pedir o que me oriente a como añadirle que vaya aumentando el daño ya sea con cualquier arma por puntos.


Cualquier tipo de ayuda será bien recibida.

Código PHP:
#include <amxmodx>  
#include <amxmisc>  
#include <fun>  
#include <hamsandwich>  

#define PLUGIN    "Habilidades por puntos"  
#define AUTHOR    ""  
#define VERSION    "1.2"  

new const TAG [] = "[HABILIDADES]"  

new Ham:Ham_Player_ResetMaxSpeed Ham_Item_PreFrame  

enum _
:DATA_MEJORA  MEJORA_NAME[10], MEJORA_COSTOMEJORA_MAX };  
new 
g_mejora_data[][DATA_MEJORA] =  
{  
    { 
"Vida"1020 },   
    { 
"Velocidad"11},  
    { 
"Gravedad"164}  
};  
new 
g_habilidad[33][3];  
new 
g_puntos[33];  
new 
g_msgSayText;  

#define vida(%1)        (%1 * 15)   
#define velocidad(%1)   (%1 * 0.1)  
#define gravedad(%1)    (%1 * 0.1)    

public plugin_init()  
{  
    
register_plugin(PLUGINVERSIONAUTHOR);  
     
    
register_clcmd("say /habilidades" "show_menu_puntos");  

    
RegisterHam(Ham_Player_ResetMaxSpeed"player""fw_Player_ResetMaxSpeed"1);   
    
RegisterHam(Ham_Spawn"player""fw_PlayerSpawn_Post"1);  
}  
public 
fw_PlayerSpawn_Postid )  
{      
     
    
set_user_health(idget_user_health(id) + vidag_habilidad[id][0]));   
    
set_user_gravity(idget_user_gravity(id) - gravedad(g_habilidad[id][2]));  
     
    return 
HAM_IGNORED;  
}  

public 
fw_Player_ResetMaxSpeedid )   
    
set_user_maxspeed(idget_user_maxspeed(id) + velocidad(g_habilidad[id][1]));  

public 
show_menu_puntos(id)  
{     
    new 
iLen[250]; 
     
    new 
hadle_puntos menu_create("\ySistema de habilidades""hadle_puntos")  
     
    for(new 
0sizeof g_mejora_datai++)  
    {  
        if(
g_habilidad[id][ i] <= g_mejora_data[i][MEJORA_MAX])  
        {  
            if(
g_puntos[id] >= g_mejora_data[i][MEJORA_COSTO])  
                
formatex(iLen charsmax(iLen), "\wAumentar : %s [%d / %d] \y[ Costo : %d P]"g_mejora_data[i][MEJORA_NAME], g_habilidad[id][i], g_mejora_data[i][MEJORA_MAX], g_mejora_data[i][MEJORA_COSTO]);   
            else  
            
formatex(iLen charsmax(iLen), "\dAumentar : %s [%d / %d] \r[P.Necesarios : %d]"g_mejora_data[i][MEJORA_NAME], g_habilidad[id][i], g_mejora_data[i][MEJORA_MAX], g_mejora_data[i][MEJORA_COSTO]);  
             
            if(
g_habilidad[id][i] >= g_mejora_data[i][MEJORA_MAX])  
                
formatex(iLencharsmax(iLen), "\d[%d] %s [%d / %d] \r[COMPLETADO]"i+1g_mejora_data[i][MEJORA_NAME], g_habilidad[id][i], g_mejora_data[i][MEJORA_MAX]);             
        }  
        
menu_additem(hadle_puntosiLen);  
    }  
     
    
menu_setprop(hadle_puntosMPROP_EXITNAME,"\ySalir");  
    
menu_display(idhadle_puntos0);      
     
    return 
PLUGIN_HANDLED;  
}  
public 
hadle_puntos(id menuitem)  
{   
    
menu_destroy(menu);  
     
    if (
item == MENU_EXIT) return; 
     
    if(
g_puntos[id] < g_mejora_data[item][MEJORA_COSTO])  
    {  
        
hns_print_color(id"^x04%s^x01 Nesecitas^x03 %d^x01 puntos para mejorar^x03 %s^x01."TAGg_mejora_data[item][MEJORA_COSTO], g_mejora_data[item][MEJORA_NAME]);  
        
client_cmd(id"spk buttons/button10.wav");  
        return; 
    }  
    if(
g_habilidad[id][item] >= g_mejora_data[item][MEJORA_MAX])  
    {  
        
hns_print_color(id"^x04%s^x01 Subistes el maximo de puntos para la mejora:^x03 %s^x01."TAGg_mejora_data[item][MEJORA_NAME]);  
        
client_cmd(id"spk buttons/button10.wav" );  
        return;  
    } 
    
g_puntos[id] -= g_mejora_data[item][MEJORA_COSTO];  
    
g_habilidad[id][item]++;   
    
hns_print_color(id"^x04%s^x01 Subistes la mejora:^x03 %s^x01 ahora tenes^x03 %d^x01 /^x03 %d^x01 completada de ella. "TAGg_mejora_data[item][MEJORA_NAME], g_habilidad[id][item], g_mejora_data[item][MEJORA_MAX]);  
    
show_menu_puntos(id);  
}  
stock hns_print_colorid, const mensaje[ ], any:...)  
{  
    static 
buffer192 ];  
    
vformat(buffercharsmax(buffer), mensaje3);  
     
    
message_begin(MSG_ONE_UNRELIABLEg_msgSayText_id );  
    
write_byteid );  
    
write_string(buffer );  
    
message_end( );      

Responder
#2
Código PHP:
//                    Daño normal + dano normal * 0.1
// M4A1 sin silenciador, mejora nivel 1: 24 + ((1*0.01) * 24) = 26.4 (redondeado = 26)
#define dano(%1,%2)        (%1 + ((%2 * 0.1) * %1) ) 
En teoria deberia funcionar:

Código PHP:
#include <amxmodx>  
#include <amxmisc>  
#include <fun>  
#include <hamsandwich>  

#define PLUGIN    "Habilidades por puntos"  
#define AUTHOR    ""  
#define VERSION    "1.2"  

new const TAG [] = "[HABILIDADES]"  

new Ham:Ham_Player_ResetMaxSpeed Ham_Item_PreFrame  

enum _
:DATA_MEJORA  MEJORA_NAME[10], MEJORA_COSTOMEJORA_MAX };  
new 
g_mejora_data[][DATA_MEJORA] =  
{  
    
//MEJORA_NAME        MEJORA_COSTO        MEJORA_MAX
    
"Vida",                 10,                 20     },   
    { 
"Velocidad",             11,                 5     },  
    { 
"Gravedad",             16,                 4    },
    { 
"Daño",                18,                    4}
};  
new 
g_habilidad[33][4];  
new 
g_puntos[33];  
new 
g_msgSayText;  

#define vida(%1)        (%1 * 15)   
#define velocidad(%1)   (%1 * 0.1)  
#define gravedad(%1)    (%1 * 0.1)

//                    Daño normal + dano normal * 0.1
// M4A1 sin silenciador, mejora nivel 1: 24 + ((1*0.01) * 24) = 26.4 (redondeado = 26)
#define dano(%1,%2)        (%1 + ((%2 * 0.1) * %1) )

public plugin_init()  
{  
    
register_plugin(PLUGINVERSIONAUTHOR);  
     
    
register_clcmd("say /habilidades" "show_menu_puntos");  

    
RegisterHam(Ham_Player_ResetMaxSpeed"player""fw_Player_ResetMaxSpeed"1);   
    
RegisterHam(Ham_Spawn"player""fw_PlayerSpawn_Post"1); 
    
RegisterHam(Ham_TakeDamage"player""fw_PlayerTakeDamage_Pre"0);


public 
fw_PlayerTakeDamage_Pre(iVictimiInflictoriAttackerFloat:damagedamagebits)
{
    if(!
is_user_connected(iAttacker))
        return 
HAM_IGNORED;

    static 
Float:flDamage;

    
flDamage dano(damageg_habilidad[iAttacker][3]);

    
SetHamParamFloat(4flDamage)
    
    return 
HAM_IGNORED;
}
public 
fw_PlayerSpawn_Postid )  
{      
     
    
set_user_health(idget_user_health(id) + vidag_habilidad[id][0]));   
    
set_user_gravity(idget_user_gravity(id) - gravedad(g_habilidad[id][2]));  
     
    return 
HAM_IGNORED;  
}  

public 
fw_Player_ResetMaxSpeedid )   
    
set_user_maxspeed(idget_user_maxspeed(id) + velocidad(g_habilidad[id][1]));  

public 
show_menu_puntos(id)  
{     
    new 
iLen[250]; 
     
    new 
hadle_puntos menu_create("\ySistema de habilidades""hadle_puntos")  
     
    for(new 
0sizeof g_mejora_datai++)  
    {  
        if(
g_habilidad[id][ i] <= g_mejora_data[i][MEJORA_MAX])  
        {  
            if(
g_puntos[id] >= g_mejora_data[i][MEJORA_COSTO])  
                
formatex(iLen charsmax(iLen), "\wAumentar : %s [%d / %d] \y[ Costo : %d P]"g_mejora_data[i][MEJORA_NAME], g_habilidad[id][i], g_mejora_data[i][MEJORA_MAX], g_mejora_data[i][MEJORA_COSTO]);   
            else  
            
formatex(iLen charsmax(iLen), "\dAumentar : %s [%d / %d] \r[P.Necesarios : %d]"g_mejora_data[i][MEJORA_NAME], g_habilidad[id][i], g_mejora_data[i][MEJORA_MAX], g_mejora_data[i][MEJORA_COSTO]);  
             
            if(
g_habilidad[id][i] >= g_mejora_data[i][MEJORA_MAX])  
                
formatex(iLencharsmax(iLen), "\d[%d] %s [%d / %d] \r[COMPLETADO]"i+1g_mejora_data[i][MEJORA_NAME], g_habilidad[id][i], g_mejora_data[i][MEJORA_MAX]);             
        }  
        
menu_additem(hadle_puntosiLen);  
    }  
     
    
menu_setprop(hadle_puntosMPROP_EXITNAME,"\ySalir");  
    
menu_display(idhadle_puntos0);      
     
    return 
PLUGIN_HANDLED;  
}  
public 
hadle_puntos(id menuitem)  
{   
    
menu_destroy(menu);  
     
    if (
item == MENU_EXIT) return; 
     
    if(
g_puntos[id] < g_mejora_data[item][MEJORA_COSTO])  
    {  
        
hns_print_color(id"^x04%s^x01 Nesecitas^x03 %d^x01 puntos para mejorar^x03 %s^x01."TAGg_mejora_data[item][MEJORA_COSTO], g_mejora_data[item][MEJORA_NAME]);  
        
client_cmd(id"spk buttons/button10.wav");  
        return; 
    }  
    if(
g_habilidad[id][item] >= g_mejora_data[item][MEJORA_MAX])  
    {  
        
hns_print_color(id"^x04%s^x01 Subistes el maximo de puntos para la mejora:^x03 %s^x01."TAGg_mejora_data[item][MEJORA_NAME]);  
        
client_cmd(id"spk buttons/button10.wav" );  
        return;  
    } 
    
g_puntos[id] -= g_mejora_data[item][MEJORA_COSTO];  
    
g_habilidad[id][item]++;   
    
hns_print_color(id"^x04%s^x01 Subistes la mejora:^x03 %s^x01 ahora tenes^x03 %d^x01 /^x03 %d^x01 completada de ella. "TAGg_mejora_data[item][MEJORA_NAME], g_habilidad[id][item], g_mejora_data[item][MEJORA_MAX]);  
    
show_menu_puntos(id);  
}  
stock hns_print_colorid, const mensaje[ ], any:...)  
{  
    static 
buffer192 ];  
    
vformat(buffercharsmax(buffer), mensaje3);  
     
    
message_begin(MSG_ONE_UNRELIABLEg_msgSayText_id );  
    
write_byteid );  
    
write_string(buffer );  
    
message_end( );      

[Imagen: b_350_20_323957_202743_f19a15_111111.png]

Estudia siempre; el tiempo es oro, lo material se puede recuperar pero el tiempo no se puede recuperar.
(02/10/2016, 05:05 PM)meTaLiCroSS escribió: Siempre me gusta ayudar cuando alguien esta interesado realmente en ver que esta programando.
(08/08/2019, 05:32 PM)meTaLiCroSS escribió: grax x el dato cr4ck


Mis aportes

PLUGINS
MAPAS
Menú LANG [SF] Sistema de Frags
Say System (Admin Prefix)
Responder
#3
Lo probare, es normal que me tire este logs al compilarlo ?

Cita:AMX Mod X Compiler 1.9.0.5241
Copyright © 1997-2006 ITB CompuPhase
Copyright © 2004-2013 AMX Mod X Team

C:\Users\Lenovo\Desktop\habilidades.sma(52) : warning 213: tag mismatch
Header size: 1156 bytes
Code size: 4888 bytes
Data size: 4156 bytes
Stack/heap size: 16384 bytes
Total requirements: 26584 bytes

1 Warning.
Done.
[Finished in 0.5s]
Responder
#4
Allí edité el mensaje de arriba, revíselo.
[Imagen: b_350_20_323957_202743_f19a15_111111.png]

Estudia siempre; el tiempo es oro, lo material se puede recuperar pero el tiempo no se puede recuperar.
(02/10/2016, 05:05 PM)meTaLiCroSS escribió: Siempre me gusta ayudar cuando alguien esta interesado realmente en ver que esta programando.
(08/08/2019, 05:32 PM)meTaLiCroSS escribió: grax x el dato cr4ck


Mis aportes

PLUGINS
MAPAS
Menú LANG [SF] Sistema de Frags
Say System (Admin Prefix)
Responder
#5
Gracias, avisare si hay algun problema.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)