Raised This Month: $32 Target: $400
 8% 

AWP Models [XP System Support]


Post New Thread Reply   
 
Thread Tools Display Modes
alferd
Veteran Member
Join Date: Dec 2019
Location: Iran is Always Eternal
Old 05-18-2020 , 02:30   Re: AWP Models [XP System Support]
Reply With Quote #51

Quote:
Originally Posted by artYY View Post
Is it possible create a menu for others weapons? Like Ak and M4A1?
This plugin has also been changed
( AWP to M4A1 )

PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <cromchat>
#include <fakemeta>
#include <hamsandwich>
#include <nvault>

native crxranks_get_max_levels()
native crxranks_get_rank_by_level(levelbuffer[], len)
native crxranks_get_user_level(id)
native crxranks_get_user_xp(id)

new const 
g_szNatives[][] =
{
    
"crxranks_get_max_levels",
    
"crxranks_get_rank_by_level",
    
"crxranks_get_user_level",
    
"crxranks_get_user_xp"
}

#if !defined m_pPlayer
    #define m_pPlayer 41
#endif

#if defined client_disconnected
    #define client_disconnect client_disconnected
#endif

#define PLUGIN_VERSION "2.1.4"
#define DEFAULT_V "models/v_m4a1.mdl"
#define DEFAULT_P "models/p_m4a1.mdl"
#define MAX_SOUND_LENGTH 128
#define MAX_AUTHID_LENGTH 35

#if !defined MAX_NAME_LENGTH
    #define MAX_NAME_LENGTH 32
#endif

#if !defined MAX_PLAYERS
    #define MAX_PLAYERS 32
#endif

enum _:M4A1
{
    
NAME[MAX_NAME_LENGTH],
    
V_MODEL[MAX_SOUND_LENGTH],
    
P_MODEL[MAX_SOUND_LENGTH],
    
SELECT_SOUND[MAX_SOUND_LENGTH],
    
FLAG,
    
LEVEL,
    
bool:SHOW_RANK,
    
XP
}

new Array:
g_aM4A1,
    
bool:g_bFirstTime[MAX_PLAYERS 1],
    
bool:g_bRankSystem,
    
bool:g_bGetLevel,
    
bool:g_bGetXP,
    
g_eM4A1[MAX_PLAYERS 1][M4A1],
    
g_szAuth[MAX_PLAYERS 1][MAX_AUTHID_LENGTH],
    
g_iM4A1[MAX_PLAYERS 1],
    
g_iCallback,
    
g_pAtSpawn,
    
g_pSaveChoice,
    
g_iSaveChoice,
    
g_iM4A1Num,
    
g_iVault

public plugin_init()
{
    
register_plugin("M4A1 Models"PLUGIN_VERSION"OciXCrom")
    
register_cvar("CRXM4A1Models"PLUGIN_VERSIONFCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
    
    if(!
g_iM4A1Num)
        
set_fail_state("No M4A1's found in the configuration file.")
    
    
register_dictionary("M4A1Models.txt")
    
    
RegisterHam(Ham_Spawn"player""OnPlayerSpawn"1)
    
RegisterHam(Ham_Item_Deploy"weapon_m4a1""OnSelectM4A1"1)
    
    
register_clcmd("say /m4a1""ShowMenu")
    
register_clcmd("say_team /m4a1""ShowMenu")
    
    
g_iCallback menu_makecallback("CheckM4A1Access")
    
g_pAtSpawn register_cvar("am_open_at_spawn""0")
    
g_pSaveChoice register_cvar("am_save_choice""0")
}

public 
plugin_precache()
{
    if(
LibraryExists("crxranks"LibType_Library))
        
g_bRankSystem true
        
    g_aM4A1 
ArrayCreate(M4A1)
    
ReadFile()
}

public 
plugin_cfg()
{
    
g_iSaveChoice get_pcvar_num(g_pSaveChoice)
    
    if(
g_iSaveChoice)
        
g_iVault nvault_open("M4A1Models")
}

public 
plugin_natives()
    
set_native_filter("native_filter")
    
public 
native_filter(const szNative[], idiTrap)
{
    if(!
iTrap)
    {
        static 
i
        
        
for(0sizeof(g_szNatives); i++)
        {
            if(
equal(szNativeg_szNatives[i]))
                return 
PLUGIN_HANDLED
        
}
    }
    
    return 
PLUGIN_CONTINUE
}
    
public 
plugin_end()
{
    
ArrayDestroy(g_aM4A1)
    
    if(
g_iSaveChoice)
        
nvault_close(g_iVault)
}

ReadFile()
{
    new 
szConfigsName[256], szFilename[256]
    
get_configsdir(szConfigsNamecharsmax(szConfigsName))
    
formatex(szFilenamecharsmax(szFilename), "%s/M4A1Models.ini"szConfigsName)
    new 
iFilePointer fopen(szFilename"rt")
    
    if(
iFilePointer)
    {
        new 
eM4A1[M4A1], szData[160], szKey[32], szValue[128], iMaxLevels
        
        
if(g_bRankSystem)
            
iMaxLevels crxranks_get_max_levels()
        
        while(!
feof(iFilePointer))
        {
            
fgets(iFilePointerszDatacharsmax(szData))
            
trim(szData)
            
            switch(
szData[0])
            {
                case 
EOS'#'';': continue
                case 
'[':
                {
                    if(
szData[strlen(szData) - 1] == ']')
                    {
                        if(
g_iM4A1Num)
                            
PushM4A1(eM4A1)
                            
                        
g_iM4A1Num++
                        
replace(szDatacharsmax(szData), "[""")
                        
replace(szDatacharsmax(szData), "]""")
                        
copy(eM4A1[NAME], charsmax(eM4A1[NAME]), szData)
                        
                        
eM4A1[V_MODEL][0] = EOS
                        eM4A1
[P_MODEL][0] = EOS
                        eM4A1
[SELECT_SOUND][0] = EOS
                        eM4A1
[FLAG] = ADMIN_ALL
                        
                        
if(g_bRankSystem)
                        {
                            
eM4A1[LEVEL] = 0
                            eM4A1
[SHOW_RANK] = false
                            eM4A1
[XP] = 0
                        
}
                    }
                    else continue
                }
                default:
                {
                    
strtok(szDataszKeycharsmax(szKey), szValuecharsmax(szValue), '=')
                    
trim(szKey); trim(szValue)
                    
                    if(
equal(szKey"FLAG"))
                        
eM4A1[FLAG] = read_flags(szValue)
                    else if(
equal(szKey"LEVEL") && g_bRankSystem)
                    {
                        
eM4A1[LEVEL] = clamp(str_to_num(szValue), 0iMaxLevels)
                        
                        if(!
g_bGetLevel)
                            
g_bGetLevel true
                    
}
                    else if(
equal(szKey"SHOW_RANK") && g_bRankSystem)
                        
eM4A1[SHOW_RANK] = _:clamp(str_to_num(szValue), falsetrue)
                    else if(
equal(szKey"XP") && g_bRankSystem)
                    {
                        
eM4A1[XP] = _:clamp(str_to_num(szValue), 0)
                        
                        if(!
g_bGetXP)
                            
g_bGetXP true
                    
}
                    else if(
equal(szKey"V_MODEL"))
                    {
                        if(!
file_exists(szValue))
                            
log_amx("ERROR: model ^"%s^" not found!"szValue)
                        else
                        {
                            
precache_model(szValue)
                            
copy(eM4A1[V_MODEL], charsmax(eM4A1[V_MODEL]), szValue)
                        }
                    }
                    else if(
equal(szKey"P_MODEL"))
                    {
                        if(!
file_exists(szValue))
                            
log_amx("ERROR: model ^"%s^" not found!"szValue)
                        else
                        {
                            
precache_model(szValue)
                            
copy(eM4A1[P_MODEL], charsmax(eM4A1[P_MODEL]), szValue)
                        }
                    }
                    else if(
equal(szKey"SELECT_SOUND"))
                    {
                        
precache_sound(szValue)
                        
copy(eM4A1[SELECT_SOUND], charsmax(eM4A1[SELECT_SOUND]), szValue)
                    }
                }
            }
        }
        
        if(
g_iM4A1Num)
            
PushM4A1(eM4A1)
        
        
fclose(iFilePointer)
    }
}

public 
client_connect(id)
{
    
g_bFirstTime[id] = true
    ArrayGetArray
(g_aM4A10g_eM4A1[id])
    
g_iM4A1[id] = 0
    
    
if(g_iSaveChoice)
    {
        
get_user_authid(idg_szAuth[id], charsmax(g_szAuth[]))
        
UseVault(idfalse)
    }
}

public 
client_disconnect(id)
{
    if(
g_iSaveChoice)
        
UseVault(idtrue)
}

public 
ShowMenu(id)
{
    static 
eM41[M4A1]
    new 
szTitle[128], szItem[128], iLeveliXP
    formatex
(szTitlecharsmax(szTitle), "%L"id"M4A1M_MENU_TITLE")

    if(
g_bGetLevel)
        
iLevel crxranks_get_user_level(id)
    
    if(
g_bGetXP)
        
iXP crxranks_get_user_xp(id)
        
    new 
iMenu menu_create(szTitle"MenuHandler")
    
    for(new 
iFlags get_user_flags(id), ig_iM4A1Numi++)
    {
        
ArrayGetArray(g_aM4A1ieM4A1)
        
copy(szItemcharsmax(szItem), eM4A1[NAME])
        
        if(
g_bRankSystem)
        {
            if(
eM4A1[LEVEL] && iLevel eM4AQ[LEVEL])
            {
                if(
eM4AQ[SHOW_RANK])
                {
                    static 
szRank[32]
                    
crxranks_get_rank_by_level(eM4A1[LEVEL], szRankcharsmax(szRank))
                    
format(szItemcharsmax(szItem), "%s %L"szItemid"M4A1M_MENU_RANK"szRank)
                }
                else
                    
format(szItemcharsmax(szItem), "%s %L"szItemid"M4A1M_MENU_LEVEL"eM4A1[LEVEL])
            }
            
            if(
eM4A1[XP] && iXP eM4A1[XP])
                
format(szItemcharsmax(szItem), "%s %L"szItemid"M4A1M_MENU_XP"eM4AQ[XP])
        }
        
        if(
eN4A1[FLAG] != ADMIN_ALL && !(iFlags eM4A1[FLAG]))
            
format(szItemcharsmax(szItem), "%s %L"szItemid"M4A1M_MENU_VIP_ONLY")
            
        if(
g_iM4A1[id] == i)
            
format(szItemcharsmax(szItem), "%s %L"szItemid"M4A1M_MENU_SELECTED")
        
        
menu_additem(iMenuszItemeM4A1[NAME], eM4A1[FLAG], g_iCallback)
    }
    
    if(
menu_pages(iMenu) > 1)
    {
        
formatex(szItemcharsmax(szItem), "%s%L"szTitleid"M4A1M_MENU_TITLE_PAGE")
        
menu_setprop(iMenuMPROP_TITLEszItem)
    }
        
    
menu_display(idiMenu)
    return 
PLUGIN_HANDLED
}

public 
MenuHandler(idiMenuiItem)
{
    if(
iItem != MENU_EXIT)
    {
        
g_iM4A1[id] = iItem
        ArrayGetArray
(g_aM4A1iItemg_eM4A1[id])
        
        if(
is_user_alive(id) && get_user_weapon(id) == CSW_M4A1)
            
RefreshM4A1Model(id)
        
        new 
szName[MAX_NAME_LENGTH], iUnused
        menu_item_getinfo
(iMenuiItemiUnusedszNamecharsmax(szName), .callback iUnused)
        
CC_SendMessage(id"%L %L"id"M4A1M_CHAT_PREFIX"id"M4A1M_CHAT_SELECTED"szName)
        
        if(
g_eM4A1[id][SELECT_SOUND][0])
            
engfunc(EngFunc_EmitSoundidCHAN_AUTOg_eM4A1[id][SELECT_SOUND], 1.0ATTN_NORM0PITCH_NORM)
    }
    
    
menu_destroy(iMenu)
    return 
PLUGIN_HANDLED
}    

public 
CheckM4A1Access(idiMenuiItem)
    return ((
g_iM4A1[id] == iItem) || !HasM4A1Access(idiItem)) ? ITEM_DISABLED ITEM_ENABLED

public OnPlayerSpawn(id)
{
    if(
is_user_alive(id) && get_pcvar_num(g_pAtSpawn) && !g_iM4A1[id] && g_bFirstTime[id])
    {
        
g_bFirstTime[id] = false
        ShowMenu
(id)
    }
}

public 
OnSelectM4A1(iEnt)
{
    new 
id get_pdata_cbase(iEntm_pPlayer4)
    
    if(
is_user_connected(id))
        
RefreshM4A1Model(id)
}

RefreshM4A1Model(const id)
{
    
set_pev(idpev_viewmodel2g_eM4A1[id][V_MODEL])
    
set_pev(idpev_weaponmodel2g_eM4A1[id][P_MODEL])
}

PushM4A1(eM4A1[M4A1])
{
    if(!
eM4A1[V_MODEL][0])
        
copy(eM4A1[V_MODEL], charsmax(eM4A1[V_MODEL]), DEFAULT_V)
        
    if(!
eM4A1[P_MODEL][0])
        
copy(eM4A1[P_MODEL], charsmax(eM4A1[P_MODEL]), DEFAULT_P)
        
    
ArrayPushArray(g_aM4A1eM4A1)
}

bool:HasM4A1Access(const id, const iM4A1)
{        
    static 
eM4A1[M4A1]
    
ArrayGetArray(g_aM4A1iM4A1eM4A1)
    
    if(
g_bRankSystem)
    {
        if(
eM4A1[LEVEL] && crxranks_get_user_level(id) < eM4A1[LEVEL])
            return 
false
            
        
if(eM4A1[XP] && crxranks_get_user_xp(id) < eM4A1[XP])
            return 
false
    
}
        
    if(
eM4A1[FLAG] != ADMIN_ALL && !(get_user_flags(id) & eM4A1[FLAG]))
        return 
false
        
    
return true
}

UseVault(const id, const bool:bSave)
{
    if(
bSave)
    {
        static 
szData[4]
        
num_to_str(g_iM4A1[id], szDatacharsmax(szData))
        
nvault_set(g_iVaultg_szAuth[id], szData)
    }
    else
    {
        static 
iM4A1
        iM4A1 
nvault_get(g_iVaultg_szAuth[id])
        
        if(
iM4A1 g_iM4A1Num)
            
iM4A1 0
        
        
if(iM4A1 && HasM4A1Access(idiM4A1))
        {
            
g_iM4A1[id] = iM4A1
            ArrayGetArray
(g_aM4A1iM4A1g_eM4A1[id])
            
            if(
is_user_alive(id) && get_user_weapon(id) == CSW_M4A1)
                
RefreshM4A1Model(id)
        }
    }

configs/M4A1Models.ini
PHP Code:
[My Cool M4A1]
V_MODEL models/v_coolm4a1.mdl
P_MODEL 
models/p_coolm4a1.mdl
FLAG 
b
LEVEL 
15
SHOW_RANK 
1
XP 
5000
SELECT_SOUND 
coolm4a1/select.wav 
data/lang/M4A1Models.txt
Code:
[en] -- OciXCrom
M4A1M_CHAT_PREFIX = &x04[M4A1 Models]&x01
M4A1M_CHAT_SELECTED = You have selected the M4a1 &x04%s
M4A1M_MENU_TITLE = \y< \rChoose your M4A1 model \y>
M4A1M_MENU_TITLE_PAGE = ^n\r-- \yPage:\r
M4A1M_MENU_SELECTED = \y~ \rSELECTED \y~
M4A1M_MENU_VIP_ONLY = \y~ \rVIP \y~
M4A1M_MENU_LEVEL = \r[LVL %i]
M4A1M_MENU_RANK = \r[RANK: %s]
M4A1M_MENU_XP = \r[XP: %i]
Command:

say/say_team : /m4a1


@OciXCrom:
Can you change sniper_scope.spr?

Like the example below:
PHP Code:
[My Cool AWP]
V_MODEL models/v_coolawp.mdl
P_MODEL 
models/p_coolawp.mdl
FLAG 
b
LEVEL 
15
SHOW_RANK 
1
XP 
5000
SELECT_SOUND 
coolawp/select.wav  
SELECT_SPRITES 
sprites/select_sniper_scope.spr 

Last edited by alferd; 05-18-2020 at 02:33.
alferd is offline
artYY
Member
Join Date: May 2020
Location: Brazil, Curitiba, PR
Old 05-19-2020 , 19:06   Re: AWP Models [XP System Support]
Reply With Quote #52

Tks so much for this!

Follow the language bp
Code:
[bp] - OciXCrom
M4A1M_CHAT_PREFIX = & x04 [Modelos de Colt] & x01
M4A1M_CHAT_SELECTED = Vocę selecionou a Colt & x04% s
M4A1M_MENU_TITLE = \ y <\ rEscolha seu modelo de Colt \ y>
M4A1M_MENU_TITLE_PAGE = ^ n \ r-- \ yPágina: \ r
M4A1M_MENU_SELECTED = \ y ~ \ rSELECIONADO \ y ~
M4A1M_MENU_VIP_ONLY = \ y ~ \ rVIP \ y ~
M4A1M_MENU_LEVEL = \ r [LVL% i]
M4A1M_MENU_RANK = \ r [RANK:% s]
M4A1M_MENU_XP = \ r [XP:% i]
We also call M4A1 it Colt on Brazil

I'll try to do this for AK-47

-- Edit --

Return error on compile:

Code:
//// crx_m4a1_models.sma
// C:\Users\Arthur\Desktop\Jogos\Server\# Avanţado\AMXX Studio 2.4.3\Compilador\crx_m4a1_models.sma(277) : error 017: undefined symbol "eM4A1"
// C:\Users\Arthur\Desktop\Jogos\Server\# Avanţado\AMXX Studio 2.4.3\Compilador\crx_m4a1_models.sma(278) : error 017: undefined symbol "eM4A1"
// C:\Users\Arthur\Desktop\Jogos\Server\# Avanţado\AMXX Studio 2.4.3\Compilador\crx_m4a1_models.sma(278) : warning 215: expression has no effect
// C:\Users\Arthur\Desktop\Jogos\Server\# Avanţado\AMXX Studio 2.4.3\Compilador\crx_m4a1_models.sma(278) : error 001: expected token: ";", but found "]"
// C:\Users\Arthur\Desktop\Jogos\Server\# Avanţado\AMXX Studio 2.4.3\Compilador\crx_m4a1_models.sma(278) : error 029: invalid expression, assumed zero
// C:\Users\Arthur\Desktop\Jogos\Server\# Avanţado\AMXX Studio 2.4.3\Compilador\crx_m4a1_models.sma(278) : fatal error 107: too many error messages on one line
//
// Compilation aborted.
// 5 Errors.
// Could not locate output file compiled\crx_m4a1_models.amx (compile failed).
//
// Compilation Time: 0,7 sec
// ----------------------------------------

Press enter to exit ...
__________________

Last edited by artYY; 05-19-2020 at 20:41. Reason: Plugin edit doesn't work
artYY is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 05-19-2020 , 21:55   Re: AWP Models [XP System Support]
Reply With Quote #53

All you need to do is replace:
"awp" with "m4a1"
"AWP" with "M4A1"

Note the capitalizaton.
This includes filenames as well.
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
artYY
Member
Join Date: May 2020
Location: Brazil, Curitiba, PR
Old 05-20-2020 , 20:40   Re: AWP Models [XP System Support]
Reply With Quote #54

This worked perfectly!

Follow de codes:

configs > M4A1Models.ini
Code:
#============================================#
# M4A1 Models by OciXCrom: Configuration file #
#============================================#

# You can add an M4A1 by following this example:
# [M4A1 Name]
# V_MODEL = location of v_ model
# P_MODEL = location of p_ model

# You don't have to add a p_ or v_ model if the M4A1 doesn't have one.
# You can also add some of the parameters below:

# FLAG = if you want the M4A1 to be for VIP users/admins, enter the flag here
# SELECT_SOUND = sound when you select the M4A1 from the menu

# If you are using OciXCrom's Rank System, the following options are also available:

# LEVEL = required level from the rank system to use the M4A1
# SHOW_RANK = if set to 1, the rank name will be displayed instead of the level number in the menu
# XP = amount of XP required from the rank system to use the M4A1

[Defalut]
V_MODEL = models/v_m4a1.mdl
P_MODEL = models/p_m4a1.mdl
data > lang> M4A1Models.txt
Code:
[en] -- OciXCrom
AM_CHAT_PREFIX = &x04[M4A1 Models]&x01
AM_CHAT_SELECTED = You have selected the sniper &x04%s
AM_MENU_TITLE = \y< \rChoose your M4A1 model \y>
AM_MENU_TITLE_PAGE = ^n\r-- \yPage:\r
AM_MENU_SELECTED = \y~ \rSELECTED \y~
AM_MENU_VIP_ONLY = \y~ \rVIP \y~
AM_MENU_LEVEL = \r[LVL %i]
AM_MENU_RANK = \r[RANK: %s]
AM_MENU_XP = \r[XP: %i]

[mk] -- OciXCrom
AM_CHAT_PREFIX = &x04[M4A1 Models]&x01
AM_CHAT_SELECTED = Go izbra snajperot &x04%s
AM_MENU_TITLE = \y< \rIzberi model za M4A1 \y>
AM_MENU_TITLE_PAGE = ^n\r-- \yStranica:\r
AM_MENU_SELECTED = \y~ \rIZBRAN \y~
AM_MENU_VIP_ONLY = \y~ \rVIP \y~
AM_MENU_LEVEL = \r[LVL %i]
AM_MENU_RANK = \r[RANK: %s]
AM_MENU_XP = \r[XP: %i]

[bg] -- OciXCrom
AM_CHAT_PREFIX = &x04[M4A1 Models]&x01
AM_CHAT_SELECTED = Izbra snaipera &x04%s
AM_MENU_TITLE = \y< \rIzberi model za M4A1 \y>
AM_MENU_TITLE_PAGE = ^n\r-- \yStranica:\r
AM_MENU_SELECTED = \y~ \rIZBRAN \y~
AM_MENU_VIP_ONLY = \y~ \rVIP \y~
AM_MENU_LEVEL = \r[LVL %i]
AM_MENU_RANK = \r[RANK: %s]
AM_MENU_XP = \r[XP: %i]

[bp] -- artYY
AM_CHAT_PREFIX = &x04[M4A1 Models]&x01
AM_CHAT_SELECTED = Voce selecionou a &x04%s
AM_MENU_TITLE = \y< \rEscolha seu modelo de M4A1 \y>
AM_MENU_TITLE_PAGE = ^n\r-- \yPagina:\r
AM_MENU_SELECTED = \y~ \rSELECIONADO \y~
AM_MENU_VIP_ONLY = \y~ \rVIP \y~
AM_MENU_LEVEL = \r[LVL %i]
AM_MENU_RANK = \r[RANK: %s]
AM_MENU_XP = \r[XP: %i]
crx_m4a1_models.sma
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <cromchat>
#include <fakemeta>
#include <hamsandwich>
#include <nvault>

native crxranks_get_max_levels()
native crxranks_get_rank_by_level(levelbuffer[], len)
native crxranks_get_user_level(id)
native crxranks_get_user_xp(id)

new const 
g_szNatives[][] =
{
    
"crxranks_get_max_levels",
    
"crxranks_get_rank_by_level",
    
"crxranks_get_user_level",
    
"crxranks_get_user_xp"
}

#if !defined m_pPlayer
    #define m_pPlayer 41
#endif

#if defined client_disconnected
    #define client_disconnect client_disconnected
#endif

#define PLUGIN_VERSION "2.1.4"
#define DEFAULT_V "models/v_m4a1.mdl"
#define DEFAULT_P "models/p_m4a1.mdl"
#define MAX_SOUND_LENGTH 128
#define MAX_AUTHID_LENGTH 35

#if !defined MAX_NAME_LENGTH
    #define MAX_NAME_LENGTH 32
#endif

#if !defined MAX_PLAYERS
    #define MAX_PLAYERS 32
#endif

enum _:M4A1
{
    
NAME[MAX_NAME_LENGTH],
    
V_MODEL[MAX_SOUND_LENGTH],
    
P_MODEL[MAX_SOUND_LENGTH],
    
SELECT_SOUND[MAX_SOUND_LENGTH],
    
FLAG,
    
LEVEL,
    
bool:SHOW_RANK,
    
XP
}

new Array:
g_aM4A1,
    
bool:g_bFirstTime[MAX_PLAYERS 1],
    
bool:g_bRankSystem,
    
bool:g_bGetLevel,
    
bool:g_bGetXP,
    
g_eM4A1[MAX_PLAYERS 1][M4A1],
    
g_szAuth[MAX_PLAYERS 1][MAX_AUTHID_LENGTH],
    
g_iM4A1[MAX_PLAYERS 1],
    
g_iCallback,
    
g_pAtSpawn,
    
g_pSaveChoice,
    
g_iSaveChoice,
    
g_iM4A1Num,
    
g_iVault

public plugin_init()
{
    
register_plugin("M4A1 Models"PLUGIN_VERSION"OciXCrom")
    
register_cvar("CRXM4A1Models"PLUGIN_VERSIONFCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
    
    if(!
g_iM4A1Num)
        
set_fail_state("No M4A1s found in the configuration file.")
    
    
register_dictionary("M4A1Models.txt")
    
    
RegisterHam(Ham_Spawn"player""OnPlayerSpawn"1)
    
RegisterHam(Ham_Item_Deploy"weapon_m4a1""OnSelectM4A1"1)
    
    
register_clcmd("say /m4a1""ShowMenu")
    
register_clcmd("say .m4a1""ShowMenu")
    
register_clcmd("say_team /m4a1""ShowMenu")
    
register_clcmd("say_team .m4a1""ShowMenu")
    
    
g_iCallback menu_makecallback("CheckM4A1Access")
    
g_pAtSpawn register_cvar("am_open_at_spawn""0")
    
g_pSaveChoice register_cvar("am_save_choice""0")
}

public 
plugin_precache()
{
    if(
LibraryExists("crxranks"LibType_Library))
        
g_bRankSystem true
        
    g_aM4A1 
ArrayCreate(M4A1)
    
ReadFile()
}

public 
plugin_cfg()
{
    
g_iSaveChoice get_pcvar_num(g_pSaveChoice)
    
    if(
g_iSaveChoice)
        
g_iVault nvault_open("M4A1Models")
}

public 
plugin_natives()
    
set_native_filter("native_filter")
    
public 
native_filter(const szNative[], idiTrap)
{
    if(!
iTrap)
    {
        static 
i
        
        
for(0sizeof(g_szNatives); i++)
        {
            if(
equal(szNativeg_szNatives[i]))
                return 
PLUGIN_HANDLED
        
}
    }
    
    return 
PLUGIN_CONTINUE
}
    
public 
plugin_end()
{
    
ArrayDestroy(g_aM4A1)
    
    if(
g_iSaveChoice)
        
nvault_close(g_iVault)
}

ReadFile()
{
    new 
szConfigsName[256], szFilename[256]
    
get_configsdir(szConfigsNamecharsmax(szConfigsName))
    
formatex(szFilenamecharsmax(szFilename), "%s/M4A1Models.ini"szConfigsName)
    new 
iFilePointer fopen(szFilename"rt")
    
    if(
iFilePointer)
    {
        new 
eM4A1[M4A1], szData[160], szKey[32], szValue[128], iMaxLevels
        
        
if(g_bRankSystem)
            
iMaxLevels crxranks_get_max_levels()
        
        while(!
feof(iFilePointer))
        {
            
fgets(iFilePointerszDatacharsmax(szData))
            
trim(szData)
            
            switch(
szData[0])
            {
                case 
EOS'#'';': continue
                case 
'[':
                {
                    if(
szData[strlen(szData) - 1] == ']')
                    {
                        if(
g_iM4A1Num)
                            
PushM4A1(eM4A1)
                            
                        
g_iM4A1Num++
                        
replace(szDatacharsmax(szData), "[""")
                        
replace(szDatacharsmax(szData), "]""")
                        
copy(eM4A1[NAME], charsmax(eM4A1[NAME]), szData)
                        
                        
eM4A1[V_MODEL][0] = EOS
                        eM4A1
[P_MODEL][0] = EOS
                        eM4A1
[SELECT_SOUND][0] = EOS
                        eM4A1
[FLAG] = ADMIN_ALL
                        
                        
if(g_bRankSystem)
                        {
                            
eM4A1[LEVEL] = 0
                            eM4A1
[SHOW_RANK] = false
                            eM4A1
[XP] = 0
                        
}
                    }
                    else continue
                }
                default:
                {
                    
strtok(szDataszKeycharsmax(szKey), szValuecharsmax(szValue), '=')
                    
trim(szKey); trim(szValue)
                    
                    if(
equal(szKey"FLAG"))
                        
eM4A1[FLAG] = read_flags(szValue)
                    else if(
equal(szKey"LEVEL") && g_bRankSystem)
                    {
                        
eM4A1[LEVEL] = clamp(str_to_num(szValue), 0iMaxLevels)
                        
                        if(!
g_bGetLevel)
                            
g_bGetLevel true
                    
}
                    else if(
equal(szKey"SHOW_RANK") && g_bRankSystem)
                        
eM4A1[SHOW_RANK] = _:clamp(str_to_num(szValue), falsetrue)
                    else if(
equal(szKey"XP") && g_bRankSystem)
                    {
                        
eM4A1[XP] = _:clamp(str_to_num(szValue), 0)
                        
                        if(!
g_bGetXP)
                            
g_bGetXP true
                    
}
                    else if(
equal(szKey"V_MODEL"))
                    {
                        if(!
file_exists(szValue))
                            
log_amx("ERROR: model ^"%s^" not found!"szValue)
                        else
                        {
                            
precache_model(szValue)
                            
copy(eM4A1[V_MODEL], charsmax(eM4A1[V_MODEL]), szValue)
                        }
                    }
                    else if(
equal(szKey"P_MODEL"))
                    {
                        if(!
file_exists(szValue))
                            
log_amx("ERROR: model ^"%s^" not found!"szValue)
                        else
                        {
                            
precache_model(szValue)
                            
copy(eM4A1[P_MODEL], charsmax(eM4A1[P_MODEL]), szValue)
                        }
                    }
                    else if(
equal(szKey"SELECT_SOUND"))
                    {
                        
precache_sound(szValue)
                        
copy(eM4A1[SELECT_SOUND], charsmax(eM4A1[SELECT_SOUND]), szValue)
                    }
                }
            }
        }
        
        if(
g_iM4A1Num)
            
PushM4A1(eM4A1)
        
        
fclose(iFilePointer)
    }
}

public 
client_connect(id)
{
    
g_bFirstTime[id] = true
    ArrayGetArray
(g_aM4A10g_eM4A1[id])
    
g_iM4A1[id] = 0
    
    
if(g_iSaveChoice)
    {
        
get_user_authid(idg_szAuth[id], charsmax(g_szAuth[]))
        
UseVault(idfalse)
    }
}

public 
client_disconnect(id)
{
    if(
g_iSaveChoice)
        
UseVault(idtrue)
}

public 
ShowMenu(id)
{
    static 
eM4A1[M4A1]
    new 
szTitle[128], szItem[128], iLeveliXP
    formatex
(szTitlecharsmax(szTitle), "%L"id"AM_MENU_TITLE")

    if(
g_bGetLevel)
        
iLevel crxranks_get_user_level(id)
    
    if(
g_bGetXP)
        
iXP crxranks_get_user_xp(id)
        
    new 
iMenu menu_create(szTitle"MenuHandler")
    
    for(new 
iFlags get_user_flags(id), ig_iM4A1Numi++)
    {
        
ArrayGetArray(g_aM4A1ieM4A1)
        
copy(szItemcharsmax(szItem), eM4A1[NAME])
        
        if(
g_bRankSystem)
        {
            if(
eM4A1[LEVEL] && iLevel eM4A1[LEVEL])
            {
                if(
eM4A1[SHOW_RANK])
                {
                    static 
szRank[32]
                    
crxranks_get_rank_by_level(eM4A1[LEVEL], szRankcharsmax(szRank))
                    
format(szItemcharsmax(szItem), "%s %L"szItemid"AM_MENU_RANK"szRank)
                }
                else
                    
format(szItemcharsmax(szItem), "%s %L"szItemid"AM_MENU_LEVEL"eM4A1[LEVEL])
            }
            
            if(
eM4A1[XP] && iXP eM4A1[XP])
                
format(szItemcharsmax(szItem), "%s %L"szItemid"AM_MENU_XP"eM4A1[XP])
        }
        
        if(
eM4A1[FLAG] != ADMIN_ALL && !(iFlags eM4A1[FLAG]))
            
format(szItemcharsmax(szItem), "%s %L"szItemid"AM_MENU_VIP_ONLY")
            
        if(
g_iM4A1[id] == i)
            
format(szItemcharsmax(szItem), "%s %L"szItemid"AM_MENU_SELECTED")
        
        
menu_additem(iMenuszItemeM4A1[NAME], eM4A1[FLAG], g_iCallback)
    }
    
    if(
menu_pages(iMenu) > 1)
    {
        
formatex(szItemcharsmax(szItem), "%s%L"szTitleid"AM_MENU_TITLE_PAGE")
        
menu_setprop(iMenuMPROP_TITLEszItem)
    }
        
    
menu_display(idiMenu)
    return 
PLUGIN_HANDLED
}

public 
MenuHandler(idiMenuiItem)
{
    if(
iItem != MENU_EXIT)
    {
        
g_iM4A1[id] = iItem
        ArrayGetArray
(g_aM4A1iItemg_eM4A1[id])
        
        if(
is_user_alive(id) && get_user_weapon(id) == CSW_M4A1)
            
RefreshM4A1Model(id)
        
        new 
szName[MAX_NAME_LENGTH], iUnused
        menu_item_getinfo
(iMenuiItemiUnusedszNamecharsmax(szName), .callback iUnused)
        
CC_SendMessage(id"%L %L"id"AM_CHAT_PREFIX"id"AM_CHAT_SELECTED"szName)
        
        if(
g_eM4A1[id][SELECT_SOUND][0])
            
engfunc(EngFunc_EmitSoundidCHAN_AUTOg_eM4A1[id][SELECT_SOUND], 1.0ATTN_NORM0PITCH_NORM)
    }
    
    
menu_destroy(iMenu)
    return 
PLUGIN_HANDLED
}    

public 
CheckM4A1Access(idiMenuiItem)
    return ((
g_iM4A1[id] == iItem) || !HasM4A1Access(idiItem)) ? ITEM_DISABLED ITEM_ENABLED

public OnPlayerSpawn(id)
{
    if(
is_user_alive(id) && get_pcvar_num(g_pAtSpawn) && !g_iM4A1[id] && g_bFirstTime[id])
    {
        
g_bFirstTime[id] = false
        ShowMenu
(id)
    }
}

public 
OnSelectM4A1(iEnt)
{
    new 
id get_pdata_cbase(iEntm_pPlayer4)
    
    if(
is_user_connected(id))
        
RefreshM4A1Model(id)
}

RefreshM4A1Model(const id)
{
    
set_pev(idpev_viewmodel2g_eM4A1[id][V_MODEL])
    
set_pev(idpev_weaponmodel2g_eM4A1[id][P_MODEL])
}

PushM4A1(eM4A1[M4A1])
{
    if(!
eM4A1[V_MODEL][0])
        
copy(eM4A1[V_MODEL], charsmax(eM4A1[V_MODEL]), DEFAULT_V)
        
    if(!
eM4A1[P_MODEL][0])
        
copy(eM4A1[P_MODEL], charsmax(eM4A1[P_MODEL]), DEFAULT_P)
        
    
ArrayPushArray(g_aM4A1eM4A1)
}

bool:HasM4A1Access(const id, const iM4A1)
{        
    static 
eM4A1[M4A1]
    
ArrayGetArray(g_aM4A1iM4A1eM4A1)
    
    if(
g_bRankSystem)
    {
        if(
eM4A1[LEVEL] && crxranks_get_user_level(id) < eM4A1[LEVEL])
            return 
false
            
        
if(eM4A1[XP] && crxranks_get_user_xp(id) < eM4A1[XP])
            return 
false
    
}
        
    if(
eM4A1[FLAG] != ADMIN_ALL && !(get_user_flags(id) & eM4A1[FLAG]))
        return 
false
        
    
return true
}

UseVault(const id, const bool:bSave)
{
    if(
bSave)
    {
        static 
szData[4]
        
num_to_str(g_iM4A1[id], szDatacharsmax(szData))
        
nvault_set(g_iVaultg_szAuth[id], szData)
    }
    else
    {
        static 
iM4A1
        iM4A1 
nvault_get(g_iVaultg_szAuth[id])
        
        if(
iM4A1 g_iM4A1Num)
            
iM4A1 0
        
        
if(iM4A1 && HasM4A1Access(idiM4A1))
        {
            
g_iM4A1[id] = iM4A1
            ArrayGetArray
(g_aM4A1iM4A1g_eM4A1[id])
            
            if(
is_user_alive(id) && get_user_weapon(id) == CSW_M4A1)
                
RefreshM4A1Model(id)
        }
    }

Tks for the help!
__________________
artYY is offline
xonfire
Member
Join Date: Sep 2020
Old 09-20-2020 , 13:45   Re: AWP Models [XP System Support]
Reply With Quote #55

I set the
Code:
am_save_choice option to "1"
But when I exit the server and log back in the weapon is not saved, any help? Vault files are created without problem.

The option does work by the way
Code:
am_open_at_spawn "1"
It would be good if you have the option to save by IP/NICK

Last edited by xonfire; 09-20-2020 at 14:07. Reason: more information
xonfire is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 09-21-2020 , 06:33   Re: AWP Models [XP System Support]
Reply With Quote #56

The only problem can be your server being non-steam.
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
xonfire
Member
Join Date: Sep 2020
Old 09-22-2020 , 16:06   Re: AWP Models [XP System Support]
Reply With Quote #57

Quote:
Originally Posted by OciXCrom View Post
The only problem can be your server being non-steam.
if you like I send you a video showing with "rcon meta list" the console and showing you that I don't use "no-steam"

Code:
meta list
Currently loaded plugins:
      description      stat pend  file              vers      src  load  unlod
 [ 1] AMX Mod X        RUN   -    amxmodx_mm.dll    v1.9.0.5  ini  Start ANY
 [ 2] FakeMeta         RUN   -    fakemeta_amxx.dl  v1.9.0.5  pl1  ANY   ANY
 [ 3] Ham Sandwich     RUN   -    hamsandwich_amxx  v1.9.0.5  pl1  ANY   ANY
3 plugins, 3 running
amxx plugins
Currently loaded plugins:
       name                    version     author            file             status
 [  1] Admin Base              1.9.0.5271  AMXX Dev Team     admin.amxx       running
 [  2] Admin Commands          1.9.0.5271  AMXX Dev Team     admincmd.amxx    running
 [  3] Admin Help              1.9.0.5271  AMXX Dev Team     adminhelp.amxx   running
 [  4] Slots Reservation       1.9.0.5271  AMXX Dev Team     adminslots.amxx  running
 [  5] Multi-Lingual System    1.9.0.5271  AMXX Dev Team     multilingual.am  running
 [  6] Menus Front-End         1.9.0.5271  AMXX Dev Team     menufront.amxx   running
 [  7] Commands Menu           1.9.0.5271  AMXX Dev Team     cmdmenu.amxx     running
 [  8] Players Menu            1.9.0.5271  AMXX Dev Team     plmenu.amxx      running
 [  9] Maps Menu               1.9.0.5271  AMXX Dev Team     mapsmenu.amxx    running
 [ 10] Plugin Menu             1.9.0.5271  AMXX Dev Team     pluginmenu.amxx  running
 [ 11] Admin Chat              1.9.0.5271  AMXX Dev Team     adminchat.amxx   running
 [ 12] Anti Flood              1.9.0.5271  AMXX Dev Team     antiflood.amxx   running
 [ 13] Scrolling Message       1.9.0.5271  AMXX Dev Team     scrollmsg.amxx   running
 [ 14] Info. Messages          1.9.0.5271  AMXX Dev Team     imessage.amxx    running
 [ 15] Admin Votes             1.9.0.5271  AMXX Dev Team     adminvote.amxx   running
 [ 16] NextMap                 1.9.0.5271  AMXX Dev Team     nextmap.amxx     running
 [ 17] Nextmap Chooser         1.9.0.5271  AMXX Dev Team     mapchooser.amxx  running
 [ 18] TimeLeft                1.9.0.5271  AMXX Dev Team     timeleft.amxx    running
 [ 19] Pause Plugins           1.9.0.5271  AMXX Dev Team     pausecfg.amxx    running
 [ 20] Stats Configuration     1.9.0.5271  AMXX Dev Team     statscfg.amxx    running
 [ 21] AWP Models              2.1.4       OciXCrom          crx_awp_models.  running
21 plugins, 21 running
I have compiled with that version of amxx and I get this message

Code:
//// crx_awp_models.sma
//
// C:\name\name\cstrike\addons\amxmodx\scripting\crx_awp_models.sma(33) : warning 201: redefinition of constant/macro (symbol "MAX_AUTHID_LENGTH")
// Header size:           2064 bytes
// Code size:            13768 bytes
// Data size:            69064 bytes
// Stack/heap size:      16384 bytes
// Total requirements:  101280 bytes
//
// 1 Warning.
// Done.
//
// Compilation Time: 0.97 sec
// ----------------------------------------
update: From the compilation I read that I don't need that line #33, now it's compiled well.

Last edited by xonfire; 09-22-2020 at 16:36.
xonfire is offline
xonfire
Member
Join Date: Sep 2020
Old 09-26-2020 , 20:58   Re: AWP Models [XP System Support]
Reply With Quote #58

Hey, I would like that you can also use the model w_ because when the weapon falls it looks like the default weapon
xonfire is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 09-27-2020 , 07:54   Re: AWP Models [XP System Support]
Reply With Quote #59

I'm aware of that. The entire plugin's logic needs to be changed in order to do that. What will happen if you pickup a custom skin dropped from another player? It's not how the plugin is designed to work at the moment.
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
xonfire
Member
Join Date: Sep 2020
Old 09-27-2020 , 13:01   Re: AWP Models [XP System Support]
Reply With Quote #60

The plugin you made is good because you can assign the privileges so that not everyone can use the skins, I guess if the weapon falls and the player is not assigned any privileges can not see it.

I leave by default this way the configuration of the AWPModels.ini file:

Code:
[DEFAULT]
V_MODEL = models/v_awp.mdl
P_MODEL = models/p_awp.mdl
FLAG = 

[AWP-SKIN]
V_MODEL = models/awp_skin/v_awp.mdl
P_MODEL = models/awp_skin/p_awp.mdl
FLAG = b
But when a user with the "b" privilege logs in to the server he is loaded with the "default" option I would like him to load the gun with the skin differently.

I hope I'm not asking too much, but it's one of the only plugins that can be edited from an ini file without having to edit the "sma".

By the way I modified the sma to work with DEAGLE and it went well, but I had a mishap when I put the skin of the GOLDEN DEAGLE this has opaque yellow color that is not żany suggestion?

That you have good day.

Last edited by xonfire; 09-27-2020 at 13:14.
xonfire is offline
Reply


Thread Tools
Display Modes

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 09:08.


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