Raised This Month: $ Target: $400
 0% 

[ZP] Optimización de code


  
 
 
Thread Tools Display Modes
Author Message
Sidix
Senior Member
Join Date: Feb 2011
Location: Limbo City
Old 06-09-2012 , 19:30   [ZP] Optimización de code
#1

hola, estuve agregando un code para el daño de la armas por resets pero quisiera un ayuda para optimizar el code ya que consume muchas líneas. Gracias de antemano.

PHP Code:
static id
        id 
attacker

        
switch (get_user_weapon(attacker))
        {
            case 
CSW_KNIFE:
            {
                if(
g_survivor[attacker] && g_sniperround
                {
                    
damage *= 500.0
                
}
                if(!
g_sniperround)
                {
                    if (!
g_reset[attacker])
                        
damage *= 1.5
                    
else if (g_reset[id] == 1)
                        
damage *= 3
                    
else if (g_reset[attacker] == 2)
                        
damage *= 3.5
                    
else if (g_reset[attacker] == 3)
                        
damage *= 3.7
                    
else if (g_reset[attacker] == 4)
                        
damage *= 4.3
                    
else if (g_reset[attacker] == 5)
                        
damage *= 4.7
                
}
            }
            case 
CSW_GLOCK18:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 2.0
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 1.5
                
}
            }
            case 
CSW_USP:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 3.0
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 2.5
                
}
            }
            case 
CSW_P228:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 3.2
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 2.7
                
}
            }
            case 
CSW_FIVESEVEN:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 3.5
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 3.0
                
}
            }
            case 
CSW_ELITEdamage *= 3.0
            
case CSW_DEAGLE:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 3.8
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 3.3
                
}
            }
            case 
CSW_TMP:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 1.7
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 1.2
                
}
            }
            case 
CSW_MAC10:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 2.0
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 1.5
                
}
            }
            case 
CSW_UMP45:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 2.2
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 1.7
                
}
            }
            case 
CSW_P90:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 2.5
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 2.0
                
}
            }
            case 
CSW_SCOUT:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 3.5
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 3.0
                
}
            }
            case 
CSW_FAMAS:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 3.0
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 2.5
                
}
            }
            case 
CSW_GALIL:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 3.2
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 2.7
                
}
            }
            case 
CSW_M3:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 3.9
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 3.4
                
}
            }
            case 
CSW_XM1014:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 2.7
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 2.2
                
}
            }
            case 
CSW_SG552:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 2.0
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 1.5
                
}
            }
            case 
CSW_AUG:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 2.5
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 2.0
                
}
            }
            case 
CSW_AK47:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 3.5
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 3.0
                
}
            }
            case 
CSW_SG550:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 4.0
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 3.5
                
}
            }
            case 
CSW_AWP:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 2.8
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 2.3
                
}
            }
            case 
CSW_G3SG1:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 3.2
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 2.7
                
}
            }
            case 
CSW_M4A1:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 4.0
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 3.5
                
}
            }
            case 
CSW_M249:
            {
                if (!
g_survivor[attacker])
                {
                    
damage *= 4
                
}
                else
                {
                    
damage *= 10.0
                
}
            }
            case 
CSW_MP5NAVY:
            {
                if (
g_reset[id] == 1)
                {
                    
damage *= 3
                
}
                else if (
g_reset[id] == 2)
                {
                    
damage *= 20.0
                
}
            }
        }
        
        
SetHamParamFloat(4damage

pd: El code de rak

Quisiera saber que hace esta macro por cada reset acumulado?

PHP Code:
#define ResetDamage(%1)     (1.5 + (0.5 * float(%1))) 
__________________
[IMG]http://img839.**************/img839/1879/dmcdanteprofile.png[/IMG]

Last edited by Sidix; 06-09-2012 at 19:39.
Sidix is offline
xLeoNNN
Veteran Member
Join Date: Sep 2010
Location: de_dust2
Old 06-09-2012 , 20:11   Re: [ZP] Optimización de code
#2

debe haber una forma mejor estoy seguro, pero la hice mientras, no sé si funcione quizás este mal, pero corrigan o revisen :B pero es una base practicamente.

PHP Code:
#include <amxmodx>
#include <hamsandwich>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"

/*
#define CSW_ELITE        10
#define CSW_FIVESEVEN        11
#define CSW_UMP45        12
#define CSW_SG550        13
*/

new g_reset[33]

new const 
weapons_num[] = { 012345678910111213 }
new const 
Float:weapon_damage[][] =
{
    { },{ },{ },{ },{ },{ },{ },{ },{ },{ },{ 
1.11.21.3}, { 2.22.32.4}, { 3.33.43.5}, {4.14.24.3 }
}

public 
plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
RegisterHam(Ham_TakeDamage"player""fw_TakeDamage")
}

public 
fw_TakeDamage(victiminflictorattackerFloat:damagedamage_bits)
{
    if(!
is_user_connected(attacker))
        return;
        
    if(
get_user_weapon(attacker) == weapons_num[get_user_weapon(attacker)])
        
SetHamParamFloat(4damage weapon_damage[get_user_weapon(attacker)][g_reset[attacker]])

quizás hay algunos fails también, pero bueno jaja.

ahi tu vas editando y haciendo bugfix (editar los const, y si tiene mas de 3 resets te dara a index out) u otro.
__________________

Last edited by xLeoNNN; 06-09-2012 at 20:13.
xLeoNNN is offline
Send a message via MSN to xLeoNNN
lucas_7_94
Leche Loco
Join Date: Mar 2009
Location: Argentina
Old 06-09-2012 , 20:15   Re: [ZP] Optimización de code
#3

La variable que ingresas en ese macro es pasada a float , se le multiplica 0.5 , y luego a ese resultado se le suman 1.5 , te digo lo que hace , no se que funcion cumple adentro del zp.
__________________
ATWWMH - MiniDuels
Madness is like gravity, just need a little push.
lucas_7_94 is offline
Send a message via Skype™ to lucas_7_94
Neeeeeeeeeel.-
Some Guy Yellin'
Join Date: Jul 2010
Location: Argentina
Old 06-09-2012 , 23:04   Re: [ZP] Optimización de code
#4

Si no me equivoco esto funcionaría...

PHP Code:
#define ResetDamagePercent(%1) ( damage + ( damage * g_reset[ attacker ] * ( %1 / 100.0 ) ) ) 
%1 = porcentaje que se multiplica por la cantidad de resets...

Un ejemplo de uso:
PHP Code:
// aumenta un 15% por cada reset que tenga el cliente
damage ResetDamagePercent15 ); 
Podes definirle a cada arma el procentaje a usar y podrías hacer algo así:

PHP Code:
new const g_weapon_percent[ ] =  { // Esto por las constantes de amxconst.inc
    
10//CSW_P228
    
10//CSW_SCOUT
    
0//CSW_HEGRENADE
    
10//CSW_XM1014
    
0//CSW_C4
    
10//CSW_MAC10
    
10//CSW_AUG
    
0//CSW_SMOKEGRENADE
    
10//CSW_ELITE
    
10//CSW_FIVESEVEN
    
10//CSW_UMP45
    
10//CSW_SG550
    
10//CSW_GALIL
    
10//CSW_FAMAS
    
10//CSW_USP
    
10//CSW_GLOCK18
    
10//CSW_AWP
    
10//CSW_MP5NAVY
    
10//CSW_M249
    
10//CSW_M3
    
10//CSW_M4A1
    
10//CSW_TMP
    
10//CSW_G3SG1
    
10//CSW_AK47
    
10//CSW_KNIFE
    
10//CSW_P90
}

// takedamage

damage ResetDamagePercentg_weapon_percentget_user_weaponattacker ) ] ); 
PD: No estoy seguro pero quizás deberías hacer un check que get_user_weapon sea diferente de las granadas y de algunas otras cosas que hay ahi que no son armas...
__________________

Last edited by Neeeeeeeeeel.-; 06-09-2012 at 23:14.
Neeeeeeeeeel.- is offline
Send a message via Skype™ to Neeeeeeeeeel.-
Sidix
Senior Member
Join Date: Feb 2011
Location: Limbo City
Old 06-10-2012 , 11:31   Re: [ZP] Optimización de code
#5

Probaré los dos métodos y les avisaré. ! Gracias xLeoNNN & Neeeeeeeeeel.- and lucas_7_94;)

Saludos.

Edit:

Solucion:

Usando un macro & Static:

c:

PHP Code:
#define ResetDamage(%1)     (1.5 + (0.5 * float(%1))) 
PHP Code:
    static plrWeapId
    
if (is_user_connected(attacker))
        
plrWeapId get_user_weapon(attacker)

        
damage *= ResetDamage(g_reset[attacker] || (cvar_zombiearmor))
        switch (
plrWeapId)
        {
            case (
CSW_MP5NAVY): damage *= 2.5
            
case (CSW_DEAGLE): damage *= 3.0
            
case (CSW_SCOUT): damage *= 2.5
            
case (CSW_KNIFE): damage *= 3.0
        
}
        
SetHamParamFloat(4damage
__________________
[IMG]http://img839.**************/img839/1879/dmcdanteprofile.png[/IMG]

Last edited by Sidix; 06-10-2012 at 12:04. Reason: Solucionado
Sidix is offline
Neeeeeeeeeel.-
Some Guy Yellin'
Join Date: Jul 2010
Location: Argentina
Old 06-10-2012 , 13:53   Re: [ZP] Optimización de code
#6

Con el mio te ahorras el switch por arma xd
__________________
Neeeeeeeeeel.- is offline
Send a message via Skype™ to Neeeeeeeeeel.-
Sidix
Senior Member
Join Date: Feb 2011
Location: Limbo City
Old 06-10-2012 , 14:03   Re: [ZP] Optimización de code
#7

Neeeeeeeeeel.- me puedes explicar que hace cada numero en la constante y el resto
__________________
[IMG]http://img839.**************/img839/1879/dmcdanteprofile.png[/IMG]
Sidix is offline
Neeeeeeeeeel.-
Some Guy Yellin'
Join Date: Jul 2010
Location: Argentina
Old 06-10-2012 , 14:13   Re: [ZP] Optimización de code
#8

Quote:
Originally Posted by Sidix View Post
Neeeeeeeeeel.- me puedes explicar que hace cada numero en la constante y el resto
Lo que hice fue tomar los números de las constantes de cada weaponid y con eso arme la constante que puse arriba. Vas al arma que queres en la constante y le ponés el número que quieras. Ese número significa el porcentaje (multiplicado por la cantidad de resets) que va a aumentar el daño...

Por ejemplo si ponés en la usp un 7 y tenes 5 resets tu daño con la usp aumentará un 35%
__________________
Neeeeeeeeeel.- is offline
Send a message via Skype™ to Neeeeeeeeeel.-
Sidix
Senior Member
Join Date: Feb 2011
Location: Limbo City
Old 06-10-2012 , 14:24   Re: [ZP] Optimización de code
#9

Entendido gracias

edit:
Tengo una duda explicame esto: "PD: No estoy seguro pero quizás deberías hacer un check que get_user_weapon sea diferente de las granadas y de algunas otras cosas que hay ahi que no son armas..."
__________________
[IMG]http://img839.**************/img839/1879/dmcdanteprofile.png[/IMG]

Last edited by Sidix; 06-10-2012 at 14:33.
Sidix is offline
xLeoNNN
Veteran Member
Join Date: Sep 2010
Location: de_dust2
Old 06-10-2012 , 15:45   Re: [ZP] Optimización de code
#10

con los 2 metodos te ahorras el switch xdd
__________________
xLeoNNN is offline
Send a message via MSN to xLeoNNN
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 22:37.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode