Raised This Month: $12 Target: $400
 3% 

Knife Models [XP System & Skills Support]


Post New Thread Reply   
 
Thread Tools Display Modes
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 07-11-2018 , 17:04   Re: Knife Models [XP System Support]
Reply With Quote #101

Quote:
Originally Posted by CzechPeter View Post
Code:
"L 07/11/2018 - 18:15:16: [AMXX] Run time error 10: native error (native "clamp")
L 07/11/2018 - 18:15:16: [AMXX]    [0] yb983cxt.sma.p::use_vault (line 677)
L 07/11/2018 - 18:15:16: [AMXX]    [1] yb983cxt.sma.p::ReadData (line 452)
L 07/11/2018 - 18:15:16: [AMXX] Displaying debug trace (plugin "crx_ranksystem.amxx", version "unknown)"
Please help
Why did you post this here? Look in which plugin the error is.
__________________

Last edited by OciXCrom; 07-11-2018 at 17:04.
OciXCrom is offline
Send a message via Skype™ to OciXCrom
CzechPeter
New Member
Join Date: Jul 2018
Old 07-12-2018 , 03:21   Re: Knife Models [XP System Support]
Reply With Quote #102

Quote:
Originally Posted by OciXCrom View Post
Why did you post this here? Look in which plugin the error is.
Yeah sorry.
CzechPeter is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 07-13-2018 , 08:43   Re: Knife Models [XP System Support]
Reply With Quote #103


  • Added an option for the skins to require a certain amount of XP.
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
negat1we
Member
Join Date: Aug 2012
Old 07-27-2018 , 07:14   Re: Knife Models [XP System Support]
Reply With Quote #104

L 07/18/2018 - 028:24: [AMXX] Displaying debug trace (plugin "crx_knife_models.amxx", version "2.5")
L 07/18/2018 - 028:24: [AMXX] Run time error 4: index out of bounds
L 07/18/2018 - 028:24: [AMXX] [0] crx_knife_models.sma::RefreshKnifeModel (line 410)
L 07/18/2018 - 028:24: [AMXX] [1] crx_knife_models.sma::OnSelectKnife (line 406)
negat1we is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 07-27-2018 , 08:10   Re: Knife Models [XP System Support]
Reply With Quote #105

Quote:
Originally Posted by negat1we View Post
L 07/18/2018 - 028:24: [AMXX] Displaying debug trace (plugin "crx_knife_models.amxx", version "2.5")
L 07/18/2018 - 028:24: [AMXX] Run time error 4: index out of bounds
L 07/18/2018 - 028:24: [AMXX] [0] crx_knife_models.sma::RefreshKnifeModel (line 410)
L 07/18/2018 - 028:24: [AMXX] [1] crx_knife_models.sma::OnSelectKnife (line 406)
It should be fixed now.
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
Lyklor
Junior Member
Join Date: Apr 2013
Location: Belgium
Old 07-30-2018 , 03:37   Re: Knife Models [XP System Support]
Reply With Quote #106

The knife model turns back to default one when i switch weapons, why? This was not happening in older versions. Thx btw.

Last edited by Lyklor; 07-30-2018 at 03:38.
Lyklor is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 07-30-2018 , 08:21   Re: Knife Models [XP System Support]
Reply With Quote #107

It works fine for me, just tested it. Make sure you downloaded the latest version (2.5.1), because there was such a bug in the previous version. If the bug still occurs, see if it works like this:

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.5.1"
#define DEFAULT_V "models/v_knife.mdl"
#define DEFAULT_P "models/p_knife.mdl"
#define DELAY_ON_CONNECT 2.5
#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
{
    
SOUND_NONE 0,
    
SOUND_DEPLOY,
    
SOUND_HIT,
    
SOUND_HITWALL,
    
SOUND_SLASH,
    
SOUND_STAB
}

enum _:Knives
{
    
NAME[MAX_NAME_LENGTH],
    
V_MODEL[MAX_SOUND_LENGTH],
    
P_MODEL[MAX_SOUND_LENGTH],
    
DEPLOY_SOUND[MAX_SOUND_LENGTH],
    
HIT_SOUND[MAX_SOUND_LENGTH],
    
HITWALL_SOUND[MAX_SOUND_LENGTH],
    
SLASH_SOUND[MAX_SOUND_LENGTH],
    
STAB_SOUND[MAX_SOUND_LENGTH],
    
SELECT_SOUND[MAX_SOUND_LENGTH],
    
FLAG,
    
LEVEL,
    
bool:SHOW_RANK,
    
bool:HAS_CUSTOM_SOUND,
    
XP
}

new Array:
g_aKnives,
    
bool:g_bFirstTime[MAX_PLAYERS 1],
    
bool:g_bRankSystem,
    
bool:g_bGetLevel,
    
bool:g_bGetXP,
    
g_eKnife[MAX_PLAYERS 1][Knives],
    
g_szAuth[MAX_PLAYERS 1][MAX_AUTHID_LENGTH],
    
g_iKnife[MAX_PLAYERS 1],
    
g_iCallback,
    
g_pAtSpawn,
    
g_pSaveChoice,
    
g_iSaveChoice,
    
g_iKnivesNum,
    
g_iVault

public plugin_init()
{
    
register_plugin("Knife Models"PLUGIN_VERSION"OciXCrom")
    
register_cvar("CRXKnifeModels"PLUGIN_VERSIONFCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
    
    if(!
g_iKnivesNum)
        
set_fail_state("No knives found in the configuration file.")
    
    
register_dictionary("KnifeModels.txt")
    
    
RegisterHam(Ham_Spawn"player""OnPlayerSpawn"1)
    
register_forward(FM_EmitSound,    "OnEmitSound")
    
register_event("CurWeapon""OnSelectKnife""be""1=1""2=29")
    
    
register_clcmd("say /knife""ShowMenu")
    
register_clcmd("say_team /knife""ShowMenu")
    
    
g_iCallback menu_makecallback("CheckKnifeAccess")
    
g_pAtSpawn register_cvar("km_open_at_spawn""0")
    
g_pSaveChoice register_cvar("km_save_choice""0")
}

public 
plugin_precache()
{
    if(
LibraryExists("crxranks"LibType_Library))
        
g_bRankSystem true
        
    g_aKnives 
ArrayCreate(Knives)
    
ReadFile()
}

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

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_aKnives)
    
    if(
g_iSaveChoice)
        
nvault_close(g_iVault)
}

ReadFile()
{
    new 
szConfigsName[256], szFilename[256]
    
get_configsdir(szConfigsNamecharsmax(szConfigsName))
    
formatex(szFilenamecharsmax(szFilename), "%s/KnifeModels.ini"szConfigsName)
    new 
iFilePointer fopen(szFilename"rt")
    
    if(
iFilePointer)
    {
        new 
szData[160], szKey[32], szValue[128], iMaxLevels
        
new eKnife[Knives], bool:bCustom
        
        
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_iKnivesNum)
                            
PushKnife(eKnife)
                            
                        
g_iKnivesNum++
                        
replace(szDatacharsmax(szData), "[""")
                        
replace(szDatacharsmax(szData), "]""")
                        
copy(eKnife[NAME], charsmax(eKnife[NAME]), szData)
                        
                        
eKnife[V_MODEL][0] = EOS
                        eKnife
[P_MODEL][0] = EOS
                        eKnife
[DEPLOY_SOUND][0] = EOS
                        eKnife
[HIT_SOUND][0] = EOS
                        eKnife
[HITWALL_SOUND][0] = EOS
                        eKnife
[SLASH_SOUND][0] = EOS
                        eKnife
[STAB_SOUND][0] = EOS
                        eKnife
[SELECT_SOUND][0] = EOS
                        eKnife
[FLAG] = ADMIN_ALL
                        eKnife
[HAS_CUSTOM_SOUND] = false
                        
                        
if(g_bRankSystem)
                        {
                            
eKnife[LEVEL] = 0
                            eKnife
[SHOW_RANK] = false
                            eKnife
[XP] = 0
                        
}
                    }
                    else continue
                }
                default:
                {
                    
strtok(szDataszKeycharsmax(szKey), szValuecharsmax(szValue), '=')
                    
trim(szKey); trim(szValue)
                    
bCustom true
                    
                    
if(equal(szKey"FLAG"))
                        
eKnife[FLAG] = read_flags(szValue)
                    else if(
equal(szKey"LEVEL") && g_bRankSystem)
                    {
                        
eKnife[LEVEL] = clamp(str_to_num(szValue), 0iMaxLevels)
                        
                        if(!
g_bGetLevel)
                            
g_bGetLevel true
                    
}
                    else if(
equal(szKey"SHOW_RANK") && g_bRankSystem)
                        
eKnife[SHOW_RANK] = _:clamp(str_to_num(szValue), falsetrue)
                    else if(
equal(szKey"XP") && g_bRankSystem)
                    {
                        
eKnife[XP] = _:clamp(str_to_num(szValue), 0)
                        
                        if(!
g_bGetXP)
                            
g_bGetXP true
                    
}
                    else if(
equal(szKey"V_MODEL"))
                        
copy(eKnife[V_MODEL], charsmax(eKnife[V_MODEL]), szValue)
                    else if(
equal(szKey"P_MODEL"))
                        
copy(eKnife[P_MODEL], charsmax(eKnife[P_MODEL]), szValue)
                    else if(
equal(szKey"DEPLOY_SOUND"))
                        
copy(eKnife[DEPLOY_SOUND], charsmax(eKnife[DEPLOY_SOUND]), szValue)
                    else if(
equal(szKey"HIT_SOUND"))
                        
copy(eKnife[HIT_SOUND], charsmax(eKnife[HIT_SOUND]), szValue)
                    else if(
equal(szKey"HITWALL_SOUND"))
                        
copy(eKnife[HITWALL_SOUND], charsmax(eKnife[HITWALL_SOUND]), szValue)
                    else if(
equal(szKey"SLASH_SOUND"))
                        
copy(eKnife[SLASH_SOUND], charsmax(eKnife[SLASH_SOUND]), szValue)
                    else if(
equal(szKey"STAB_SOUND"))
                        
copy(eKnife[STAB_SOUND], charsmax(eKnife[STAB_SOUND]), szValue)
                    else if(
equal(szKey"SELECT_SOUND"))
                    {
                        
bCustom false
                        copy
(eKnife[SELECT_SOUND], charsmax(eKnife[SELECT_SOUND]), szValue)
                    }
                    else continue
                    
                    static const 
szModelArg[] = "_MODEL"
                    
static const szSoundArg[] = "_SOUND"
                    
                    
if(contain(szKeyszModelArg) != -1)
                        
precache_model(szValue)
                    else if(
contain(szKeyszSoundArg) != -1)
                    {
                        
precache_sound(szValue)
                        
                        if(
bCustom)
                            
eKnife[HAS_CUSTOM_SOUND] = true
                    
}
                }
            }
        }
        
        if(
g_iKnivesNum)
            
PushKnife(eKnife)
        
        
fclose(iFilePointer)
    }
}

public 
client_authorized(id)
{
    
g_bFirstTime[id] = true
    ArrayGetArray
(g_aKnives0g_eKnife[id])
    
g_iKnife[id] = 0
    
    
if(g_iSaveChoice)
    {
        
get_user_authid(idg_szAuth[id], charsmax(g_szAuth[]))
        
set_task(DELAY_ON_CONNECT"LoadData"id)
    }
}

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

public 
OnEmitSound(idiChannel, const szSample[])
{
    if(!
is_user_connected(id) || !g_eKnife[id][HAS_CUSTOM_SOUND] || !IsKnifeSound(szSample))
        return 
FMRES_IGNORED
    
    
switch(DetectKnifeSound(szSample))
    {
        case 
SOUND_DEPLOY:         if(g_eKnife[id][DEPLOY_SOUND][0])         { PlayKnifeSound(idg_eKnife[id][DEPLOY_SOUND][0]);     return FMRES_SUPERCEDE; }
        case 
SOUND_HIT:         if(g_eKnife[id][HIT_SOUND][0])             { PlayKnifeSound(idg_eKnife[id][HIT_SOUND][0]);         return FMRES_SUPERCEDE; }
        case 
SOUND_HITWALL:        if(g_eKnife[id][HITWALL_SOUND][0])         { PlayKnifeSound(idg_eKnife[id][HITWALL_SOUND][0]);     return FMRES_SUPERCEDE; }
        case 
SOUND_SLASH:         if(g_eKnife[id][SLASH_SOUND][0])         { PlayKnifeSound(idg_eKnife[id][SLASH_SOUND][0]);        return FMRES_SUPERCEDE; }
        case 
SOUND_STAB:         if(g_eKnife[id][STAB_SOUND][0])         { PlayKnifeSound(idg_eKnife[id][STAB_SOUND][0]);         return FMRES_SUPERCEDE; }
    }
    
    return 
FMRES_IGNORED
}

public 
ShowMenu(id)
{
    static 
eKnife[Knives]
    new 
szTitle[128], szItem[128], iLeveliXP
    formatex
(szTitlecharsmax(szTitle), "%L"id"KM_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_iKnivesNumi++)
    {
        
ArrayGetArray(g_aKnivesieKnife)
        
copy(szItemcharsmax(szItem), eKnife[NAME])
        
        if(
g_bRankSystem)
        {
            if(
eKnife[LEVEL] && iLevel eKnife[LEVEL])
            {
                if(
eKnife[SHOW_RANK])
                {
                    static 
szRank[32]
                    
crxranks_get_rank_by_level(eKnife[LEVEL], szRankcharsmax(szRank))
                    
format(szItemcharsmax(szItem), "%s %L"szItemid"KM_MENU_RANK"szRank)
                }
                else
                    
format(szItemcharsmax(szItem), "%s %L"szItemid"KM_MENU_LEVEL"eKnife[LEVEL])
            }
            
            if(
eKnife[XP] && iXP eKnife[XP])
                
format(szItemcharsmax(szItem), "%s %L"szItemid"KM_MENU_XP"eKnife[XP])
        }
        
        if(
eKnife[FLAG] != ADMIN_ALL && !(iFlags eKnife[FLAG]))
            
format(szItemcharsmax(szItem), "%s %L"szItemid"KM_MENU_VIP_ONLY")
            
        if(
g_iKnife[id] == i)
            
format(szItemcharsmax(szItem), "%s %L"szItemid"KM_MENU_SELECTED")
        
        
menu_additem(iMenuszItemeKnife[NAME], eKnife[FLAG], g_iCallback)
    }
    
    if(
menu_pages(iMenu) > 1)
    {
        
formatex(szItemcharsmax(szItem), "%s%L"szTitleid"KM_MENU_TITLE_PAGE")
        
menu_setprop(iMenuMPROP_TITLEszItem)
    }
        
    
menu_display(idiMenu)
    return 
PLUGIN_HANDLED
}

public 
MenuHandler(idiMenuiItem)
{
    if(
iItem != MENU_EXIT)
    {
        
g_iKnife[id] = iItem
        ArrayGetArray
(g_aKnivesiItemg_eKnife[id])
        
        if(
is_user_alive(id) && get_user_weapon(id) == CSW_KNIFE)
            
RefreshKnifeModel(id)
        
        new 
szName[MAX_NAME_LENGTH], iUnused
        menu_item_getinfo
(iMenuiItemiUnusedszNamecharsmax(szName), .callback iUnused)
        
CC_SendMessage(id"%L %L"id"KM_CHAT_PREFIX"id"KM_CHAT_SELECTED"szName)
        
        if(
g_eKnife[id][SELECT_SOUND][0])
            
PlayKnifeSound(idg_eKnife[id][SELECT_SOUND])
    }
    
    
menu_destroy(iMenu)
    return 
PLUGIN_HANDLED
}

public 
LoadData(id)
    
UseVault(idfalse)

public 
CheckKnifeAccess(idiMenuiItem)
    return ((
g_iKnife[id] == iItem) || !HasKnifeAccess(idiItem)) ? ITEM_DISABLED ITEM_ENABLED

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

public 
OnSelectKnife(id)
    
RefreshKnifeModel(id)

RefreshKnifeModel(const id)
{
    
set_pev(idpev_viewmodel2g_eKnife[id][V_MODEL])
    
set_pev(idpev_weaponmodel2g_eKnife[id][P_MODEL])
}

PushKnife(eKnife[Knives])
{
    if(!
eKnife[V_MODEL][0])
        
copy(eKnife[V_MODEL], charsmax(eKnife[V_MODEL]), DEFAULT_V)
        
    if(!
eKnife[P_MODEL][0])
        
copy(eKnife[P_MODEL], charsmax(eKnife[P_MODEL]), DEFAULT_P)
        
    
ArrayPushArray(g_aKniveseKnife)
}

bool:HasKnifeAccess(const id, const iKnife)
{        
    static 
eKnife[Knives]
    
ArrayGetArray(g_aKnivesiKnifeeKnife)
    
    if(
g_bRankSystem)
    {
        if(
eKnife[LEVEL] && crxranks_get_user_level(id) < eKnife[LEVEL])
            return 
false
            
        
if(eKnife[XP] && crxranks_get_user_xp(id) < eKnife[XP])
            return 
false
    
}
        
    if(
eKnife[FLAG] != ADMIN_ALL && !(get_user_flags(id) & eKnife[FLAG]))
        return 
false
        
    
return true
}

bool:IsKnifeSound(const szSample[])
    return 
bool:equal(szSample[8], "kni"3)

DetectKnifeSound(const szSample[])
{
    static 
iSound
    iSound 
SOUND_NONE
    
    
if(equal(szSample"weapons/knife_deploy1.wav"))
        
iSound SOUND_DEPLOY
    
else if(equal(szSample[14], "hit"3))
        
iSound szSample[17] == 'w' SOUND_HITWALL SOUND_HIT
    
else if(equal(szSample[14], "sla"3))
        
iSound SOUND_SLASH
    
else if(equal(szSample[14], "sta"3))
        
iSound SOUND_STAB
        
    
return iSound
}

UseVault(const id, const bool:bSave)
{
    if(
bSave)
    {
        static 
szData[4]
        
num_to_str(g_iKnife[id], szDatacharsmax(szData))
        
nvault_set(g_iVaultg_szAuth[id], szData)
    }
    else
    {
        static 
iKnife
        iKnife 
nvault_get(g_iVaultg_szAuth[id])
        
        if(
iKnife g_iKnivesNum)
            
iKnife 0
        
        
if(iKnife && HasKnifeAccess(idiKnife))
        {
            
g_iKnife[id] = iKnife
            
            
if(is_user_alive(id) && get_user_weapon(id) == CSW_KNIFE)
                
RefreshKnifeModel(id)
        }
    }
}

PlayKnifeSound(const id, const szSound[])
    
engfunc(EngFunc_EmitSoundidCHAN_AUTOszSound1.0ATTN_NORM0PITCH_NORM
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
Lyklor
Junior Member
Join Date: Apr 2013
Location: Belgium
Old 07-31-2018 , 08:20   Re: Knife Models [XP System Support]
Reply With Quote #108

Worked thanks! I'm using it on Xash3D, idk but maybe that's why the newest version wasn't working? Anyway it's working now!

EDIT

I found out that when i reconnect to the server, my selected knife model is shown as SELECTED on the menu but the model and sounds is reverted to default one.

Btw, it would be cool if you can add a draw animation on knife selection. Just an suggestion!

Last edited by Lyklor; 07-31-2018 at 08:30.
Lyklor is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 07-31-2018 , 08:44   Re: Knife Models [XP System Support]
Reply With Quote #109

I fixed both issues now, download the plugin again (only the .sma file) and recompile. I also added a protection for the server not to crash if a model set in the .ini file doesn't exist.

About the animation - I like the idea, but I'm not sure if all models have the same animation ids. I'll have a look and add it if it's possible.

@HamletEagle - sorry, but yet again I switched back to CurWeapon. The guy above is a clear example that the hamsandwich method simply doesn't work properly. I had 2 other people say the same thing in another forum and it worked for them when I sent them a CurWeapon version. I don't know when and why this is happening, but it's clearly a problem. I'm pretty sure it's happening only on Linux.
__________________

Last edited by OciXCrom; 07-31-2018 at 15:13.
OciXCrom is offline
Send a message via Skype™ to OciXCrom
HamletEagle
AMX Mod X Plugin Approver
Join Date: Sep 2013
Location: Romania
Old 08-04-2018 , 10:15   Re: Knife Models [XP System Support]
Reply With Quote #110

Quote:
@HamletEagle - sorry, but yet again I switched back to CurWeapon. The guy above is a clear example that the hamsandwich method simply doesn't work properly. I had 2 other people say the same thing in another forum and it worked for them when I sent them a CurWeapon version. I don't know when and why this is happening, but it's clearly a problem. I'm pretty sure it's happening only on Linux.
Anecdotal evidence is just that, nothing more.
Ham_Item_Deploy is just a hook for Deploy(), which is where game sets models. That's literally how it's done inside game, there is no reason for it not to work, except really outdated game binaries. Using Ham_Item_Deploy to set models it's really not a new or fancy thing.
Example:
https://github.com/s1lentq/ReGameDLL...n_ak47.cpp#L55
If you insist that there is an issue find a way to reproduce it and get some debug logs, which should tell if the forward is even called, if the owner is retrieved sucessfully and so on.

I'm sorry but I'll have to unapprove if you wish to stick with CurWeapon, as this is not optimal.


Edit: I looked at your old code and it is wrong.
PHP Code:
new id get_pdata_cbase(iEntm_pPlayer
You forgot the linux extra offset:
PHP Code:
new id get_pdata_cbase(iEntm_pPlayer4
which explains why the "bug" was noticed only under linux. The extra offset is 5 only for players and grenades.
__________________

Last edited by HamletEagle; 08-04-2018 at 10:25.
HamletEagle 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 16:53.


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