AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Improving and optimizing this thing (https://forums.alliedmods.net/showthread.php?t=337959)

Krystek. 05-29-2022 10:35

Improving and optimizing this thing
 
Hello, would someone be so kind and point out how to improve "this thing?", since it can't be called a plugin due to the rather clunky code ;DD

PHP Code:

#include < amxmodx >
#include < amxmisc >
#include < fakemeta >
#include < nvault >

new const PLUGIN[] = "Skins"
new const VERSION[] = "1.0.0"
new const AUTHOR[] = ""

new const gcCommands[][] = { "say /skins""say /skiny""say /skin""say /modele""say /model""say /models" };

new 
KnifeNames[][] = {
    
"Default"
    
"Knife \d×\w Skins"
    
"Knife \d×\w Skins"
    
"Knife \d×\w Skins"
    
"Knife \d×\w Skins"
    
"Knife \d×\w Skins"
    
"Knife \d×\w Skins"
    
"Knife \d×\w Skins"
    
"Knife \d×\w Skins"
    
"Knife \d×\w Skins"
    
"Knife \d×\w Skins"
    
"Knife \d×\w Skins",
    
"Knife \d×\w Skins"
    
"Knife \d×\w Skins",
    
"Knife \d×\w Skins"            
};
new const 
KnifeModels[][] = {
    
"models/v_knife.mdl",
    
"models/v_knife_boreal_forest.mdl",
    
"models/v_knife_safari_mesh.mdl",
    
"models/v_falchion_slaughter.mdl",
    
"models/v_bayonet_doppler_saphire.mdl",
    
"models/v_bayonet_lore.mdl",
    
"models/v_butterfly_case_hardened.mdl",
    
"models/v_butterfly_doppler_ruby.mdl",
    
"models/v_huntsman_fade.mdl",
    
"models/v_huntsman_tiger_tooth.mdl",
    
"models/v_navaja_forestddpat.mdl",
    
"models/v_navaja_night.mdl",
    
"models/v_bowie_damascus_steel.mdl",
    
"models/v_bowie_marble_fade.mdl",
    
"models/v_noz_miku.mdl"
};
new 
FlagsKnife[] = { 0000ADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_D };

new 
P90Names[][] = {
    
"Kroliczek"
    
"P90 \d×\w Skins"
    
"P90 \d×\w Skins"
    
"P90 \d×\w Skins"
    
"P90 \d×\w Skins"
    
"P90 \d×\w Skins",
    
"P90 \d×\w Skins",
    
"P90 \d×\w Skins",
    
"P90 \d×\w Skins",
    
"P90 \d×\w Skins"        
};
new const 
P90Models[][] = {
    
"models/v_p90_rabbit.mdl",
    
"models/v_p90_assimov.mdl",
    
"models/v_p90_chicken_of_war.mdl",
    
"models/v_p90_chopper.mdl",
    
"models/v_p90_death_by_kitty.mdl",
    
"models/v_p90_emerald_dragon.mdl",
    
"models/v_p90_grim.mdl",
    
"models/v_p90_puzzle.mdl",
    
"models/v_p90_trigon.mdl",
    
"models/v_p90_miku.mdl"
};
new 
FlagsP90[] = { 0ADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_HADMIN_LEVEL_D };

new const 
weaponSOUND[][] = {
    
"sound/weapons/blockas1_change1.wav",
    
"sound/weapons/blockas1_change2.wav",
    
"sound/weapons/blockas1_reload_loop.wav",
    
"sound/weapons/blockas2_change1_1.wav",
    
"sound/weapons/blockas2_change2_1.wav",
    
"sound/weapons/blockas2_draw.wav",
    
"sound/weapons/blockas2_idle.wav",
    
"sound/weapons/blockas2_reload.wav",
    
"sound/weapons/blockas2_shoot_end.wav",
    
"sound/weapons/blockas2_shoot_start.wav"
};

new 
player_item[7][MAX_PLAYERS 1]
new 
g_vault

public plugin_init() {
    
    
register_plugin(PLUGINVERSIONAUTHOR)
    
register_event("CurWeapon""CurWeapon""be""1=1");

    
register_menucmd(register_menuid("MENU_MAIN"), 1023"MENU_MAIN_Handler");

    
register_menucmd(register_menuid("@MENU_KNIFE"), 1023"@MENU_KNIFE_Handler");
    
register_menucmd(register_menuid("@MENU_P90"), 1023"@MENU_P90_Handler");

    for(new 
0sizeof(gcCommands); i++) 
        
register_clcmd(gcCommands[i], "Command_MainMenu");
    
    
g_vault nvault_open("Skins");
}

public 
client_connect(id) {
    
LoadsModels(id);
}

public 
client_disconnected(id)
{
    
player_item[1][id] = 0;
    
player_item[2][id] = 0;
}

public 
plugin_end()
    
nvault_close(g_vault);

public 
plugin_precache() {
    
    for (new 
0sizeof KnifeModelsi++)
    
precache_model(KnifeModels[i]);
    
    for (new 
0sizeof P90Modelsi++)
    
precache_model(P90Models[i]);
}

public 
Command_MainMenu(id){
    new 
szMenu[512], len 0;
    
    
len formatex(szMenu[len], charsmax(szMenu) - len"\dSkins Menu^n^n");
    
    
len += formatex(szMenu[len], charsmax(szMenu) - len"\r1. \d» \wSkins \rKnife^n^n");
    
len += formatex(szMenu[len], charsmax(szMenu) - len"\r2. \d» \wSkins \rP90 \y(VIP)^n");
    
len += formatex(szMenu[len], charsmax(szMenu) - len"^n^n\r0. \wExit");
    
    
show_menu(id, (<< 0)|(<< 1)|(<< 2)|(<< 3)|(<< 4)|(<< 5)|(<< 9), szMenu, -1"MENU_MAIN");
    return 
PLUGIN_HANDLED;    
}

public 
MENU_MAIN_Handler(idkey)
{
    switch(
key)
    {
        case 
0: @MENU_KNIFE(id);
        case 
1: @MENU_P90(id);
        case 
2: @MENU_M249(id);
        case 
3: @MENU_XM1014(id);        
        case 
4: @MENU_MP5_TT(id);
        case 
5: @MENU_MP5_CT(id);
    }
}

@
MENU_KNIFE(id) {
    
    new 
Knife menu_create(fmt("\dSkins \rKnifes\d"), "@MENU_KNIFE_Handler")
    
    for(new 
0sizeof(KnifeNames); i++){
        if(
FlagsKnife[i] == ADMIN_LEVEL_H){
            
menu_additem(Knife fmt("\d» %s %s"get_user_flags(id) & ADMIN_LEVEL_H "\y(VIP)\w" "\d(VIP)\d"KnifeNames[i]), ""FlagsKnife[i], -1);
        }
        if(
FlagsKnife[i] == ADMIN_LEVEL_D){
            
menu_additem(Knife fmt("\d» %s %s"get_user_flags(id) & ADMIN_LEVEL_D "\y(MODEL MIKU)\w" "\d(MODEL MIKU)\d"KnifeNames[i]), ""FlagsKnife[i], -1);            
        }
        if(
FlagsKnife[i] == 0){
            
menu_additem(Knife fmt("\d»\w %s"KnifeNames[i]), ""FlagsKnife[i], -1);
        }
    }
    
menu_setprop(KnifeMPROP_EXITNAME"Exit");

    
menu_display(idKnife);

    return 
PLUGIN_HANDLED;
}
@
MENU_KNIFE_Handler(idKnifeitem) {
    if (
item == MENU_EXIT) {
        
menu_destroy(Knife);
        return 
PLUGIN_HANDLED;
    }
    
    if(
FlagsKnife[item] == 0){
        
player_item[1][id] = item
    
}
    else if(
FlagsKnife[item] > && get_user_flags(id) & FlagsKnife[item]){
        
player_item[1][id] = item
    
}

    
Set_Model(id);
    
SaveModels(id)    

    
menu_destroy(Knife);

    return 
PLUGIN_HANDLED;
}

@
MENU_P90(id) {
    
    new 
P90 menu_create(fmt("\dSkins \rP90\d"), "@MENU_P90_Handler")
    
    for(new 
0sizeof(P90Names); i++){
        if(
FlagsP90[i] == ADMIN_LEVEL_H){
            
menu_additem(P90 fmt("\d»\w %s %s"get_user_flags(id) & ADMIN_LEVEL_H "\y(VIP)\w" "\d(VIP)\d"P90Names[i]), ""FlagsP90[i], -1);
        }
        if(
FlagsP90[i] == ADMIN_LEVEL_D){
            
menu_additem(P90 fmt("\d»\w %s %s"get_user_flags(id) & ADMIN_LEVEL_D "\y(MODEL MIKU)\w" "\d(MODEL MIKU)\d"P90Names[i]), ""FlagsP90[i], -1);
        }        
        if(
FlagsP90[i] == 0){
            
menu_additem(P90 fmt("\d»\w %s"P90Names[i]), ""FlagsP90[i], -1);
        }
    }
    
menu_setprop(P90MPROP_EXITNAME"Exit");

    
menu_display(idP90);

    return 
PLUGIN_HANDLED;
}
@
MENU_P90_Handler(idP90item) {
    if (
item == MENU_EXIT) {
        
menu_destroy(P90);
        return 
PLUGIN_HANDLED;
    }
    
    if(
FlagsP90[item] == 0){
        
player_item[2][id] = item
    
}
    else if(
FlagsP90[item] > && get_user_flags(id) & FlagsP90[item]){
        
player_item[2][id] = item
    
}

    
Set_Model(id);
    
SaveModels(id);

    
menu_destroy(P90);

    return 
PLUGIN_HANDLED;
}

public 
LoadsModels(id){
    
    new 
pszName[33][64]; get_user_name(idpszName[id], charsmax(pszName));
    new 
pszValue[128];    
    
    if(
nvault_get(g_vaultfmt("%s"pszName[id]), pszValuecharsmax(pszValue))) 
    {
        new 
skinUser[7][32];
        
parse(pszValueskinUser[1], charsmax(skinUser), skinUser[2]);

        
player_item[1][id] = str_to_num(skinUser[1]);
        
player_item[2][id] = str_to_num(skinUser[2]);        
    }
    return 
PLUGIN_CONTINUE;
}
public 
SaveModels(id){
    
    new 
pszName[33][64]; get_user_name(idpszName[id], charsmax(pszName));

    
nvault_set(g_vaultfmt("%s"pszName[id]), fmt("%i %i"player_item[1][id], player_item[2][id]));
    
    return 
PLUGIN_CONTINUE;
}

public 
Set_Model(id) {
    
    new 
piWeapon get_user_weapon(id);
    
    if (
piWeapon == CSW_KNIFE) {
        
        
set_pev(idpev_viewmodel2KnifeModels[player_item[1][id]]);
    }
    if(
piWeapon == CSW_P90) {
        
        
set_pev(idpev_viewmodel2P90Models[player_item[2][id]]);
    }

    return 
PLUGIN_CONTINUE;
}

public 
CurWeapon(id) {
    if (!
is_user_alive(id)) {
        return 
PLUGIN_HANDLED;
    }
    
    new 
weapon get_user_weapon(id);
    
    switch (
weapon) {
        case 
CSW_KNIFE: {
            
Set_Model(id)
        }
        case 
CSW_P90: {
            
Set_Model(id)
        }        
    }

    return 
PLUGIN_CONTINUE;


It's about:
- Using code more wisely,
- optimization,
- shortening the insane functions and lines.

I know, I know, the code is tragic and you can cry over it.

Bugsy 05-29-2022 11:08

Re: Improving and optimizing this thing
 
Why are all KnifeNames and P90Names the same?

Krystek. 05-29-2022 11:10

Re: Improving and optimizing this thing
 
Quote:

Originally Posted by Bugsy (Post 2780425)
Why are all KnifeNames and P90Names the same?

This is a working name.

Bugsy 05-29-2022 11:13

Re: Improving and optimizing this thing
 
You don't need an array then

PHP Code:

menu_additem(Knife fmt("\d» %s %s"get_user_flags(id) & ADMIN_LEVEL_H "\y(VIP)\w" "\d(VIP)\d"
 
== "Default" "Knife \d×\w Skins"), ""FlagsKnife[i], -1); 


Krystek. 05-29-2022 11:14

Re: Improving and optimizing this thing
 
Quote:

Originally Posted by Bugsy (Post 2780428)
You don't need an array then

PHP Code:

menu_additem(Knife fmt("\d» %s %s"get_user_flags(id) & ADMIN_LEVEL_H "\y(VIP)\w" "\d(VIP)\d"
 
== "Default" "Knife \d×\w Skins"), ""FlagsKnife[i], -1); 


This is a working name, other names will follow later. :oops:

Bugsy 05-29-2022 11:22

Re: Improving and optimizing this thing
 
I'd consolidate item data into an enum sized array:

Edit: Added flags
PHP Code:

enum Knives
{
    
DefaultKnife,
    
SomeKnife1,
    
SomeKnife2
}
enum P90s
{
    
DefaultP90,
    
SomeP901,
    
SomeP902
}
enum ItemData
{
    
ItemName64 ],
    
ItemModel64 ],
    
ItemFlags
}

new const 
KnivesItemsKnives ][ ItemData ] =
{
    { 
"Default" "models/v_knife.mdl" },
    { 
"Knife \d×\w Skins" "models/v_knife_boreal_forest.mdl" },
    { 
"Knife \d×\w Skins" "models/v_knife_safari_mesh.mdl" }
};
new const 
P90ItemsP90s ][ ItemData ] =
{
    { 
"Default" "models/v_p90_rabbit.mdl" },
    { 
"P90 \d×\w Skins" "models/v_p90_assimov.mdl" },
    { 
"P90 \d×\w Skins" "models/v_p90_chicken_of_war.mdl" }
};

public 
plugin_precache() 
{
    for ( new 
Knives:kKnifeID DefaultKnife kKnifeID Knives kKnifeID++ )
    {
        
precache_modelKnivesItemskKnifeID ][ ItemModel ] );
    }
    
    for ( new 
P90s:pP90ID DefaultP90 pP90ID P90s pP90ID++ )
    {
        
precache_modelP90ItemspP90ID ][ ItemModel ] );
    }



Bugsy 05-29-2022 11:31

Re: Improving and optimizing this thing
 
CurWeapon
PHP Code:

    switch ( get_user_weapon(id) ) 
    {
        case 
CSW_KNIFE CSW_P90
        {
            
Set_Model(id)
        }    
    } 

Set_Model
PHP Code:

public Set_Model(id
{
    switch ( 
get_user_weapon(id) )
    {
        case 
CSW_KNIFE:
        {
            
set_pev(idpev_viewmodel2KnifeModels[player_item[1][id]]);
        }
        case 
CSW_P90
        {
            
set_pev(idpev_viewmodel2P90Models[player_item[2][id]]);
        }
    }
    
    return 
PLUGIN_CONTINUE;



Krystek. 05-29-2022 11:57

Re: Improving and optimizing this thing
 
Quote:

Originally Posted by Bugsy (Post 2780432)
I'd consolidate item data into an enum sized array:
PHP Code:

enum Knives
{
    
DefaultKnife,
    
SomeKnife1,
    
SomeKnife2
}
enum P90s
{
    
DefaultP90,
    
SomeP901,
    
SomeP902
}
enum ItemData
{
    
ItemName64 ],
    
ItemModel64 ]
}

new const 
KnivesItemsKnives ][ ItemData ] =
{
    { 
"Default" "models/v_knife.mdl" },
    { 
"Knife \d×\w Skins" "models/v_knife_boreal_forest.mdl" },
    { 
"Knife \d×\w Skins" "models/v_knife_safari_mesh.mdl" }
};
new const 
P90ItemsP90s ][ ItemData ] =
{
    { 
"Default" "models/v_p90_rabbit.mdl" },
    { 
"P90 \d×\w Skins" "models/v_p90_assimov.mdl" },
    { 
"P90 \d×\w Skins" "models/v_p90_chicken_of_war.mdl" }
};

public 
plugin_precache() 
{
    for ( new 
Knives:kKnifeID DefaultKnife kKnifeID Knives kKnifeID++ )
    {
        
precache_modelKnivesItemskKnifeID ][ ItemModel ] );
    }
    
    for ( new 
P90s:pP90ID DefaultP90 pP90ID P90s pP90ID++ )
    {
        
precache_modelP90ItemspP90ID ][ ItemModel ] );
    }



And how do you see it, for example in @MENU?

lexzor 05-29-2022 15:25

Re: Improving and optimizing this thing
 
Quote:

Originally Posted by Krystek. (Post 2780439)
And how do you see it, for example in @MENU?

the same way you precache the model, but instead of ItemModel you use ItemName

Bugsy 05-29-2022 19:34

Re: Improving and optimizing this thing
 
I didnt realize you also had separate flags for each, I added that to the above code. If you have any questions on using this, let me know.


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

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