AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   New Plugin Submissions (https://forums.alliedmods.net/forumdisplay.php?f=26)
-   -   AWP Models [XP System Support] (https://forums.alliedmods.net/showthread.php?t=293454)

alferd 05-18-2020 02:30

Re: AWP Models [XP System Support]
 
Quote:

Originally Posted by artYY (Post 2700769)
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 


artYY 05-19-2020 19:06

Re: AWP Models [XP System Support]
 
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 ...


OciXCrom 05-19-2020 21:55

Re: AWP Models [XP System Support]
 
All you need to do is replace:
"awp" with "m4a1"
"AWP" with "M4A1"

Note the capitalizaton.
This includes filenames as well.

artYY 05-20-2020 20:40

Re: AWP Models [XP System Support]
 
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!

xonfire 09-20-2020 13:45

Re: AWP Models [XP System Support]
 
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

OciXCrom 09-21-2020 06:33

Re: AWP Models [XP System Support]
 
The only problem can be your server being non-steam.

xonfire 09-22-2020 16:06

Re: AWP Models [XP System Support]
 
Quote:

Originally Posted by OciXCrom (Post 2718348)
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.

xonfire 09-26-2020 20:58

Re: AWP Models [XP System Support]
 
Hey, I would like that you can also use the model w_ because when the weapon falls it looks like the default weapon

OciXCrom 09-27-2020 07:54

Re: AWP Models [XP System Support]
 
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.

xonfire 09-27-2020 13:01

Re: AWP Models [XP System Support]
 
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.


All times are GMT -4. The time now is 06:07.

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