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)

Nutu_ 01-13-2019 11:31

Re: AWP Models [XP System Support]
 
Quote:

Originally Posted by DevilBoy.eXe (Post 2634410)
I'm still waiting as you to make a plugin that have a menu with all weapons and from there you can select skins for any weapon and ofc that would include xp support ;)
Not very productive to create a plugin for each weapon

+1

OciXCrom 01-13-2019 18:57

Re: AWP Models [XP System Support]
 
Quote:

Originally Posted by HamletEagle (Post 2634518)
Please no, we already have 2352352354236345324523432 basic model plugins.
Spoiler

We still don't have one that lets you choose weapon models though. My knife models plugin is already approved and this one is the same, but only for AWP. If I make it for all weapons there won't be any need for the other 2 plugins.

zynthetik 12-30-2019 08:09

Re: AWP Models [XP System Support]
 
Hey, this plugin and the knife one has been working great, but I ran into a problem. The saving doesn't work after you change the map. I use both the knife and awp models, and also the rank system. I've set the cvar correctly, but the only "saving" happening is if you disconnect and then come back (only for knifemodels). I'll be waiting for your response, thanks in advance!

OciXCrom 12-30-2019 09:57

Re: AWP Models [XP System Support]
 
The problem is in your server, not the plugin. It's not shutting down properly thus it's unable to save the data in the end of the map. I've made a video a while ago that shows it's working as intended (at least on my test server):


Elit59 03-18-2020 03:57

Re: AWP Models [XP System Support]
 
hi.

how to fixed plugin? vip skin not save.

RBE sLayeR 05-05-2020 15:41

Re: AWP Models [XP System Support]
 
We have AWP Models , Knife Models .... but what about creating a Player Models Plugin
Btw nice plugin I like it

alferd 05-17-2020 09:04

Re: AWP Models [XP System Support]
 
@OciXCrom:
You really have good intelligence

God willing, you will do greater things

artYY 05-17-2020 19:36

Re: AWP Models [XP System Support]
 
Is it possible create a menu for others weapons? Like Ak and M4A1?

artYY 05-17-2020 23:15

Re: AWP Models [XP System Support]
 
I translated the language [bp]

UTF-8
Code:

[bp] -- OciXCrom
AM_CHAT_PREFIX = &x04[AWP Models]&x01
AM_CHAT_SELECTED = Voce selecionou a sniper &x04%s
AM_MENU_TITLE = \y< \rEscolha seu modelo de AWP \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]

ANSI
Code:

[bp] -- OciXCrom
AM_CHAT_PREFIX = &x04[AWP Models]&x01
AM_CHAT_SELECTED = Você selecionou a sniper &x04%s
AM_MENU_TITLE = \y< \rEscolha seu modelo de AWP \y>
AM_MENU_TITLE_PAGE = ^n\r-- \yPágina:\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]


alferd 05-18-2020 02:09

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?

It is possible with changes

Like the changes below:
Code:

CSW_AWP  -To-  CSW_M4A1

weapon_awp  -To-  weapon_m4a1


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.

OciXCrom 09-27-2020 13:46

Re: AWP Models [XP System Support]
 
Again - this plugin allows the player to choose his own skin. Replacing the default skin based on flags is not a part of it. In fact, I'm not sure how exactly that could be accomplished with the current setup. Maybe adding a "DEFAULT" option as a skin setting could do the trick.

The plugin doesn't modify how the skins look or work. If the skin is yellow, then the skin is indeed yellow. A plugin cannot change this in any way. Find a better skin. You might also have another skin with the same name in your CS folder, so the new one is not being downloaded.

ALonsoVIP4141 06-05-2021 05:57

Re: AWP Models [XP System Support]
 
She Does not work with level only with xp why ???

OciXCrom 06-06-2021 18:43

Re: AWP Models [XP System Support]
 
Because you didn't set it up properly? Show what you did.

ALonsoVIP4141 06-07-2021 08:42

Re: AWP Models [XP System Support]
 
Quote:

Originally Posted by OciXCrom (Post 2749079)
Because you didn't set it up properly? Show what you did.

OK say to me how plase it ????

OciXCrom 06-07-2021 13:31

Re: AWP Models [XP System Support]
 
Quote:

Originally Posted by OciXCrom (Post 2749079)
Show what you did.


ALonsoVIP4141 06-07-2021 15:17

Re: AWP Models [XP System Support]
 


Can you give me link to download level trail menu + level hats menu plz ?

OciXCrom 06-07-2021 17:49

Re: AWP Models [XP System Support]
 
Quote:

Originally Posted by ALonsoVIP4141 (Post 2749186)
Can you give me link to download level trail menu + level hats menu plz ?

The correct place to ask this is here - https://google.com

Erra 06-12-2021 09:04

Re: AWP Models [XP System Support]
 
I want it added in skill mode

sanimare 06-19-2021 19:14

Re: AWP Models [XP System Support]
 
Can you add categories if you type /awp you can choose from categories which is configured in .ini like simplemenu plugin for example and into them skins?

Erra 10-12-2021 17:01

Re: AWP Models [XP System Support]
 
How can I edit the damage score of models?

MeliMeli 02-24-2023 18:33

Re: AWP Models [XP System Support]
 
Your plugins are very good, but leaves to be desired in the thoughtful details. What if someone wanted to work with ZP (Which is a famous Mod) and if someone wanted to use their level/xp to buy a model? When you did Knife Models, didn't you think about the players you'd want to use in ZP?

saitama19 06-25-2023 18:47

Re: AWP Models [XP System Support]
 
why when i drop the AWP it dissapear? any fix pls

OciXCrom 02-25-2024 09:21

Re: AWP Models [XP System Support]
 
Quote:

Originally Posted by saitama19 (Post 2806417)
why when i drop the AWP it dissapear? any fix pls

Your issue has nothing do to with this plugin.

nemvagyokorult 02-29-2024 19:23

Re: AWP Models [XP System Support]
 
For some reason, the plugin doesn't save the awp skin after disconnect or map change if I set the XP or flag requirement for the skins.

EDIT: If I set the ranksystem to save to nvault instead of mysql, it saves the skins correctly.

Gooday 05-24-2024 10:54

Re: AWP Models [XP System Support]
 
Quote:

Originally Posted by nemvagyokorult (Post 2818827)
For some reason, the plugin doesn't save the awp skin after disconnect or map change if I set the XP or flag requirement for the skins.

EDIT: If I set the ranksystem to save to nvault instead of mysql, it saves the skins correctly.

The same here, hope he will come back and will try to fix it


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

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