AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   [SOLVED] How I can optimize this code? (https://forums.alliedmods.net/showthread.php?t=249887)

Nax0ne 10-13-2014 20:01

[SOLVED] How I can optimize this code?
 
I need optimize this code, But i can't find some way to do it.

Pleaseeeeeee help me :cry:

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;



fysiks 10-13-2014 20:07

Re: [HELP] How I can optimize this code?
 
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.

klippy 10-14-2014 05:43

Re: [HELP] How I can optimize this code?
 
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.

Nextra 10-14-2014 07:10

Re: [HELP] How I can optimize this code?
 
Quote:

Originally Posted by KliPPy (Post 2210881)
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.

fysiks 10-14-2014 08:06

Re: [HELP] How I can optimize this code?
 
@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.

Nextra 10-14-2014 09:33

Re: [HELP] How I can optimize this code?
 
Quote:

Originally Posted by fysiks (Post 2210924)
@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.

fysiks 10-14-2014 13:02

Re: [HELP] How I can optimize this code?
 
Quote:

Originally Posted by Nextra (Post 2210964)
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".

Nextra 10-14-2014 13:40

Re: [HELP] How I can optimize this code?
 
Quote:

Originally Posted by fysiks (Post 2211046)
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.

klippy 10-14-2014 13:58

Re: [HELP] How I can optimize this code?
 
@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'. :)

Nax0ne 10-14-2014 17:37

Re: [HELP] How I can optimize this code?
 
@Klippy.

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

:D

@fysiks

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


All times are GMT -4. The time now is 17:38.

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