Raised This Month: $51 Target: $400
 12% 

[SOLVED] How I can optimize this code?


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Nax0ne
Senior Member
Join Date: Jul 2011
Location: Chile
Old 10-13-2014 , 20:01   [SOLVED] How I can optimize this code?
Reply With Quote #1

I need optimize this code, But i can't find some way to do it.

Pleaseeeeeee help me

PHP Code:
public ev_curweapon(id)
{
    if(!
is_user_alive(id) || zp_get_user_zombie(id)) return PLUGIN_CONTINUE;
    
    
g_playercurweapon[id] = read_data(2)

    if(
g_playercurweapon[id] == CSW_AK47)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_ak47.mdl");        
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_ak47.mdl");                
    }
    else if(
g_playercurweapon[id] == CSW_AUG)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_aug.mdl");    
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_aug.mdl");                
    }
    else if(
g_playercurweapon[id] == CSW_AWP)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_awp.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_awp.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_DEAGLE)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_deagle.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_deagle.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_ELITE)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_elite.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_elite.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_FAMAS)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_famas.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_famas.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_FIVESEVEN)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_fiveseven.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_fiveseven.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_FLASHBANG)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_flashbang.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_flashbang.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_G3SG1)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_g3sg1.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_g3sg1.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_GALIL)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_galil.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_galil.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_GLOCK18)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_glock18.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_glock18.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_HEGRENADE)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_hegrenade.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_hegrenade.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_KNIFE)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_knife.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_knife.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_M3)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_m3.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_m3.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_M4A1)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_m4a1.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_m4a1.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_M249)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_m249.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_m249.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_MAC10)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_mac10.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_mac10.mdl");
    }    
    else if(
g_playercurweapon[id] == CSW_MP5NAVY)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_mp5.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_mp5.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_P90)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_p90.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_p90.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_P228)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_p228.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_p228.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_SCOUT)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_scout.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_scout.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_SG550)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_sg550.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_sg550.mdl");
    }    
    else if(
g_playercurweapon[id] == CSW_SG552)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_sg552.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_sg552.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_SMOKEGRENADE)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_smokegrenade.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_smokegrenade.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_TMP)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_tmp.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_tmp.mdl");
    }    
    else if(
g_playercurweapon[id] == CSW_UMP45)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_ump45.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_ump45.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_USP)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_usp.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_usp.mdl");
    }
    else if(
g_playercurweapon[id] == CSW_XM1014)
    {
        if(
g_player_sex[id] == 1)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/male/v_xm1014.mdl");
        else if(
g_player_sex[id] == 2)
            
set_pev(idpev_viewmodel2"models/zombie_mode/weapons/female/v_xm1014.mdl");
    }    
    
    return 
PLUGIN_CONTINUE;

__________________

Last edited by Nax0ne; 10-14-2014 at 18:39.
Nax0ne is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 10-13-2014 , 20:07   Re: [HELP] How I can optimize this code?
Reply With Quote #2

Use a switch instead of a bunch of if else if statements.

Alternatively, if each case is identical other than the model (string), you would be able to make it into a single statement where you index the arrays of strings appropriately. However, this wouldn't necessarily make it more efficient than the switch but it would make it much easier to read and more expandable.
__________________

Last edited by fysiks; 10-13-2014 at 20:10.
fysiks is offline
klippy
AlliedModders Donor
Join Date: May 2013
Location: Serbia
Old 10-14-2014 , 05:43   Re: [HELP] How I can optimize this code?
Reply With Quote #3

Add this somewhere at the top of your code:
PHP Code:
new const g_szModels[][] =
{
    
"v_p228",
    
""// Shield
    
"v_scout",
    
"v_hegrenade",
    
"v_xm1014",
    
""// C4
    
"v_mac10",
    
"v_aug",
    
"v_smokegrenade",
    
"v_elite",
    
"v_fiveseven",
    
"v_ump45",
    
"v_sg550",
    
"v_galil",
    
"v_famas",
    
"v_usp",
    
"v_glock18",
    
"v_awp",
    
"v_mp5navy",
    
"v_m249",
    
"v_m3",
    
"v_m4a1",
    
"v_tmp",
    
"v_g3sg1",
    
"v_flashbang",
    
"v_deagle",
    
"v_sg552",
    
"v_ak47",
    
"v_knife",
    
"v_p90"

Here you can also change your model names.

And replace your function with this one:
PHP Code:
public ev_curweapon(id

    if(!
is_user_alive(id) || zp_get_user_zombie(id)) 
        return 
PLUGIN_CONTINUE
     
    static 
szModel[96];
     
    
g_playercurweapon[id] = read_data(2);
    
formatex(szModelcharsmax(szModel), "models/zombie_mode/weapons/%s/%s.mdl", (g_player_sex[id] == "male" "female"), g_szModels[g_playercurweapon[id]]);
    
set_pev(idpev_viewmodel2szModel);
    
    return 
PLUGIN_CONTINUE

That should work.

EDIT:
If you have troubles modifying plugin_precache() to work with this, just tell me here in the thread. Although, you can leave it as it is probably.

Last edited by klippy; 10-14-2014 at 05:46.
klippy is offline
Nextra
Veteran Member
Join Date: Apr 2008
Location: Germany
Old 10-14-2014 , 07:10   Re: [HELP] How I can optimize this code?
Reply With Quote #4

Quote:
Originally Posted by KliPPy View Post
And replace your function with this one:
This is probably the best solution. The only issue is that this code may set an invalid model if g_szModels[g_playercurweapon[id]] points to "" (such as for the C4). You should add an additional check for that.
__________________
In Flames we trust!

Last edited by Nextra; 10-14-2014 at 07:11.
Nextra is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 10-14-2014 , 08:06   Re: [HELP] How I can optimize this code?
Reply With Quote #5

@Klippy, just remember that that code is technically less efficient than simply implementing a switch. However, that is basically what I said for my alternative approach that is more flexible and is definitely worth it. Also, this is Scripting Help, you should try to have him learn something instead of doing it all for him.
__________________

Last edited by fysiks; 10-14-2014 at 08:07.
fysiks is offline
Nextra
Veteran Member
Join Date: Apr 2008
Location: Germany
Old 10-14-2014 , 09:33   Re: [HELP] How I can optimize this code?
Reply With Quote #6

Quote:
Originally Posted by fysiks View Post
@Klippy, just remember that that code is technically less efficient than simply implementing a switch. However, that is basically what I said for my alternative approach that is more flexible and is definitely worth it.
You can (and should) also optimize code for readability and maintainability, so the almost non-existant performance improvement that a switch might provide is not really worth the tradeoff.
__________________
In Flames we trust!
Nextra is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 10-14-2014 , 13:02   Re: [HELP] How I can optimize this code?
Reply With Quote #7

Quote:
Originally Posted by Nextra View Post
You can (and should) also optimize code for readability and maintainability, so the almost non-existant performance improvement that a switch might provide is not really worth the tradeoff.
Hence why I said it "is definitely worth it".
__________________
fysiks is offline
Nextra
Veteran Member
Join Date: Apr 2008
Location: Germany
Old 10-14-2014 , 13:40   Re: [HELP] How I can optimize this code?
Reply With Quote #8

Quote:
Originally Posted by fysiks View Post
Hence why I said it "is definitely worth it".
I know that you understand and that you don't advise going the switch route. I just felt that I had to stress this a little more.
__________________
In Flames we trust!
Nextra is offline
klippy
AlliedModders Donor
Join Date: May 2013
Location: Serbia
Old 10-14-2014 , 13:58   Re: [HELP] How I can optimize this code?
Reply With Quote #9

@Fysiks, ah, you are right, I should not have given the whole code to him, but oh well...
Anyway, he could just check if g_szModels[g_playercurweapon[id]][0] equals to zero, or '^0'.
klippy is offline
Nax0ne
Senior Member
Join Date: Jul 2011
Location: Chile
Old 10-14-2014 , 17:37   Re: [HELP] How I can optimize this code?
Reply With Quote #10

@Klippy.

The code works excellent. There is not any problem with plugin_precache.



@fysiks

Thanks for the recommendation of the switch. I'll keep it in mind.
__________________

Last edited by Nax0ne; 10-14-2014 at 18:06.
Nax0ne is offline
Reply



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 03:53.


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