This site is a testing version, but all data is shared with the live forum.


Raised This Month: $ Target: $400
 0% 

Help / Support How to make a normal plugin can be obtainable by a vip admin or a flag only ?


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
MOHAREBX
New Member
Join Date: May 2024
Old 05-02-2024 , 01:51   How to make a normal plugin can be obtainable by a vip admin or a flag only ?
Reply With Quote #1

So I have that knife plugin balrog-9 and it's only obtainable by saying in chat b9 and I'm okay with that but I don't want everyone else to get it unless they have for example the flag "t" in the users.ini and I don't know how to do that!

Any help possible would be appreciated thanks in advance

Here's the code : (sma file included as well)

Code:
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>

#define IsValidEntity(%1)        (pev_valid(%1) == PDATA_SAFE)
#define IsCustomItem(%1)        (get_pdata_int(%1, m_iId, linux_diff_weapon) == CSW_KNIFE)
#define IsUserHasBalrog9(%1)    Get_Bit(g_iBitUserHasBalrog9, %1)

#define Get_Bit(%1,%2)            ((%1 & (1 << (%2 & 31))) ? 1 : 0)
#define Set_Bit(%1,%2)            %1 |= (1 << (%2 & 31))
#define Reset_Bit(%1,%2)        %1 &= ~(1 << (%2 & 31))

#define Set_NextAttack(%1)                                                         \
    
set_pdata_float(iItemm_flNextPrimaryAttack, %1linux_diff_weapon),         \
    
set_pdata_float(iItemm_flNextSecondaryAttack, %1linux_diff_weapon),        \
    
set_pdata_float(iPlayerm_flNextAttack, %1linux_diff_player)

#define PDATA_SAFE                2
#define OBS_IN_EYE                4
#define DONT_BLEED                -1
#define DMG_GRENADE                (1<<24)

// Linux extra offsets
#define linux_diff_weapon         4
#define linux_diff_player         5

// CBasePlayerItem
#define m_pPlayer                41
#define m_iId                     43

// CBasePlayerWeapon
#define m_flNextPrimaryAttack     46
#define m_flNextSecondaryAttack    47
#define m_flTimeWeaponIdle         48
#define m_iWeaponState            74

// CBaseMonster
#define m_LastHitGroup            75
#define m_flNextAttack             83

// CBasePlayer
#define m_iPlayerTeam            114
#define m_pActiveItem             373

enum _e_AnimList
{
    
ANIM_IDLE 0,

    
ANIM_SLASH1,
    
ANIM_SLASH2,
    
ANIM_SLASH3,
    
ANIM_SLASH4,
    
ANIM_SLASH5,

    
ANIM_DRAW,

    
ANIM_CHARGE_START,
    
ANIM_CHARGE_FINISH,
    
ANIM_CHARGE_IDLE_NOT_FINISH,
    
ANIM_CHARGE_IDLE_FINISH,

    
ANIM_CHARGE_ATTACK_NOT_FINISH,
    
ANIM_CHARGE_ATTACK_FINISH
};

enum _e_HitResultList
{
    
SLASH_HIT_NONE 0,
    
SLASH_HIT_WORLD,
    
SLASH_HIT_ENTITY
};

new const 
KNIFE_SOUNDS[][] = 
{
    
"weapons/balrog9_charge_attack2.wav"// 0
    
"weapons/balrog9_charge_finish1.wav"// 1
    
"weapons/balrog9_charge_start1.wav"// 2
    
"weapons/balrog9_draw.wav"// 3
    
"weapons/balrog9_hit1.wav"// 4
    
"weapons/balrog9_hit2.wav"// 5
    
"weapons/balrog9_slash1.wav" // 6
};

#define ANIM_IDLE_TIME            201/30.0
#define ANIM_SLASH_TIME            37/30.0
#define ANIM_DRAW_TIME            40/30.0
#define ANIM_CHARGE_START_TIME    12/30.0
#define ANIM_CHARGE_FINISH_TIME    10/30.0
#define ANIM_CHARGE_IDLE_TIME    30/30.0
#define ANIM_CHARGE_ATTACK_TIME    25/30.0

#define KNIFE_VIEW_MODEL        "models/x/v_balrog9.mdl"
#define KNIFE_PLAYER_MODEL        "models/x/p_balrog9.mdl"

#define KNIFE_SLASH_DISTANCE    100.0
#define KNIFE_STAB_DISTANCE        150.0

#define KNIFE_SLASH_DAMAGE        200.0
#define KNIFE_STAB_DAMAGE        550.0

#define KNIFE_EXPLODE_RADIUS    500.0
#define KNIFE_EXPLODE_DAMAGE    random_float(500.0, 1750.0)

new g_iBitUserHasBalrog9,

    
g_iszModelIndexBloodSpray,
    
g_iszModelIndexBloodDrop,
    
g_iszModelIndexExplode,

    
g_iszAllocString_ModelView,
    
g_iszAllocString_ModelPlayer;

public 
plugin_init()
{
    
register_plugin("Balrog-9""1.0""xUnicorn (t3rkecorejz)");

    
register_forward(FM_UpdateClientData,    "FM_Hook_UpdateClientData_Post"true);

    
RegisterHam(Ham_Item_PostFrame,            "weapon_knife",    "CKnife__PostFrame_Pre"false);
    
RegisterHam(Ham_Item_Deploy,             "weapon_knife""CKnife__Deploy_Post"true);
    
RegisterHam(Ham_Weapon_WeaponIdle,         "weapon_knife""CKnife__Idle_Pre"false);
    
RegisterHam(Ham_Weapon_PrimaryAttack,   "weapon_knife""CKnife__PrimaryAttack_Pre"false);
    
RegisterHam(Ham_Weapon_SecondaryAttack,    "weapon_knife""CKnife__SecondaryAttack_Pre"false);

    
register_clcmd("say b9""Command__GiveBalrog9");
}

public 
plugin_precache()
{
    
// Precache models
    
engfunc(EngFunc_PrecacheModelKNIFE_VIEW_MODEL);
    
engfunc(EngFunc_PrecacheModelKNIFE_PLAYER_MODEL);

    
// Precache sounds
    
new i;
    for(
0sizeof KNIFE_SOUNDSi++) 
        
engfunc(EngFunc_PrecacheSoundKNIFE_SOUNDS[i]);

    
// Other
    
g_iszAllocString_ModelView engfunc(EngFunc_AllocStringKNIFE_VIEW_MODEL);
    
g_iszAllocString_ModelPlayer engfunc(EngFunc_AllocStringKNIFE_PLAYER_MODEL);

    
// Model Index
    
g_iszModelIndexBloodSpray engfunc(EngFunc_PrecacheModel"sprites/bloodspray.spr");
    
g_iszModelIndexBloodDrop engfunc(EngFunc_PrecacheModel"sprites/blood.spr");
    
g_iszModelIndexExplode engfunc(EngFunc_PrecacheModel"sprites/x/balrogcritical.spr");
}

public 
Command__GiveBalrog9(iPlayer)
{
    if(!
IsUserHasBalrog9(iPlayer)) Set_Bit(g_iBitUserHasBalrog9iPlayer);
    else 
Reset_Bit(g_iBitUserHasBalrog9iPlayer);
}

public 
FM_Hook_UpdateClientData_Post(iPlayerSendWeaponsCD_Handle)
{
    if(
get_cd(CD_HandleCD_DeadFlag) != DEAD_NO) return;
    if(!
IsUserHasBalrog9(iPlayer) || zp_get_user_zombie(iPlayer) || get_user_weapon(iPlayer) != CSW_KNIFE) return;
    
set_cd(CD_HandleCD_flNextAttackget_gametime() + 0.01);
}

public 
CKnife__PostFrame_Pre(iItem)
{
    if(!
IsCustomItem(iItem)) return;
    new 
iPlayer get_pdata_cbase(iItemm_pPlayerlinux_diff_weapon);
    if(!
IsUserHasBalrog9(iPlayer) || zp_get_user_zombie(iPlayer)) return;

    static 
iWeaponStateiWeaponState get_pdata_int(iItemm_iWeaponStatelinux_diff_weapon);
    static 
iButtoniButton pev(iPlayerpev_button);
    static 
FloatvecOrigin[3]; pev(iPlayerpev_originvecOrigin);
    static 
FloatvecVelocity[3]; velocity_by_aim(iPlayer50vecVelocity);
    static 
iVictimiVictim = -1;

    
vecVelocity[0] += vecOrigin[0];
    
vecVelocity[1] += vecOrigin[1];
    
vecVelocity[2] += vecOrigin[2];

    if(!(
iButton IN_ATTACK2))
    {
        switch(
iWeaponState)
        {
            case 
12:
            {
                
UTIL_SendWeaponAnim(iPlayerANIM_CHARGE_ATTACK_NOT_FINISH0);

                
set_pdata_int(iItemm_iWeaponState0linux_diff_weapon);
                
set_pdata_float(iItemm_flTimeWeaponIdleANIM_SLASH_TIMElinux_diff_weapon);
                
FakeTraceLine(iPlayeriItemKNIFE_STAB_DISTANCEKNIFE_STAB_DAMAGEtrue);
            }
            case 
34:
            {
                
UTIL_SendWeaponAnim(iPlayerANIM_CHARGE_ATTACK_FINISH0);

                
set_pdata_int(iItemm_iWeaponState0linux_diff_weapon);
                
set_pdata_float(iItemm_flTimeWeaponIdleANIM_SLASH_TIMElinux_diff_weapon);
                
FakeTraceLine(iPlayeriItemKNIFE_STAB_DISTANCEKNIFE_STAB_DAMAGEfalse);

                while((
iVictim engfunc(EngFunc_FindEntityInSphereiVictimvecVelocityKNIFE_EXPLODE_RADIUS)) > 0)
                {
                    if(
pev(iVictimpev_takedamage) == DAMAGE_NO)
                    {
                        continue;
                    }

                    if(
is_user_alive(iVictim))
                    {
                        if(
iVictim == iPlayer || zp_get_user_zombie(iPlayer) || !zp_get_user_zombie(iVictim))
                        {
                            continue;
                        }
                    }
                    else if(
pev(iVictimpev_solid) == SOLID_BSP)
                    {
                        if(
pev(iVictimpev_spawnflags) & SF_BREAK_TRIGGER_ONLY)
                        {
                            continue;
                        }
                    }

                    
set_pev(iVictimpev_punchangleFloat: { 10.010.010.0 });

                    
set_pdata_int(iVictimm_LastHitGroupHIT_GENERIClinux_diff_player);
                    
ExecuteHamB(Ham_TakeDamageiVictimiPlayeriPlayerKNIFE_EXPLODE_DAMAGEDMG_GRENADE);
                }

                
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
                
write_byte(TE_EXPLOSION);
                
engfunc(EngFunc_WriteCoordvecVelocity[0]);
                
engfunc(EngFunc_WriteCoordvecVelocity[1]);
                
engfunc(EngFunc_WriteCoordvecVelocity[2]);
                
write_short(g_iszModelIndexExplode);
                
write_byte(2); // Scale
                
write_byte(1); // Framerate
                
write_byte(0); // Flags
                
message_end();
            }
        }
    }
}

public 
CKnife__Deploy_Post(iItem)
{
    if(!
IsCustomItem(iItem)) return;
    new 
iPlayer get_pdata_cbase(iItemm_pPlayerlinux_diff_weapon);
    if(!
IsUserHasBalrog9(iPlayer) || zp_get_user_zombie(iPlayer)) return;

    
set_pev_string(iPlayerpev_viewmodel2g_iszAllocString_ModelView);
    
set_pev_string(iPlayerpev_weaponmodel2g_iszAllocString_ModelPlayer);

    
UTIL_SendWeaponAnim(iPlayerANIM_DRAW0);
    
set_pdata_int(iItemm_iWeaponState0linux_diff_weapon);
    
set_pdata_float(iItemm_flTimeWeaponIdleANIM_DRAW_TIMElinux_diff_weapon);
    
Set_NextAttack(ANIM_DRAW_TIME 0.1);
}

public 
CKnife__Idle_Pre(iItem)
{
    if(!
IsCustomItem(iItem)) return HAM_IGNORED;
    if(
get_pdata_float(iItemm_flTimeWeaponIdlelinux_diff_weapon) > 0.0) return HAM_IGNORED;
    new 
iPlayer get_pdata_cbase(iItemm_pPlayerlinux_diff_weapon);
    if(!
IsUserHasBalrog9(iPlayer) || zp_get_user_zombie(iPlayer)) return HAM_IGNORED;

    
UTIL_SendWeaponAnim(iPlayerANIM_IDLE0);
    
set_pdata_float(iItemm_flTimeWeaponIdleANIM_IDLE_TIMElinux_diff_weapon);

    return 
HAM_SUPERCEDE;
}

public 
CKnife__PrimaryAttack_Pre(iItem)
{
    if(!
IsCustomItem(iItem)) return HAM_IGNORED;
    new 
iPlayer get_pdata_cbase(iItemm_pPlayerlinux_diff_weapon);
    if(!
IsUserHasBalrog9(iPlayer) || zp_get_user_zombie(iPlayer)) return HAM_IGNORED;

    static 
iAnim;

    
UTIL_SendWeaponAnim(iPlayeriAnim ANIM_SLASH10);
    if(
iAnim ANIM_SLASH1 == ANIM_SLASH5iAnim 0;
    else 
iAnim++;

    
set_pdata_float(iItemm_flTimeWeaponIdleANIM_SLASH_TIMElinux_diff_weapon);
    
FakeTraceLine(iPlayeriItemKNIFE_SLASH_DISTANCEKNIFE_SLASH_DAMAGEtrue);

    return 
HAM_SUPERCEDE;
}

public 
CKnife__SecondaryAttack_Pre(iItem)
{
    if(!
IsCustomItem(iItem)) return HAM_IGNORED;
    new 
iPlayer get_pdata_cbase(iItemm_pPlayerlinux_diff_weapon);
    if(!
IsUserHasBalrog9(iPlayer) || zp_get_user_zombie(iPlayer)) return HAM_IGNORED;

    static 
iWeaponStateiWeaponState get_pdata_int(iItemm_iWeaponStatelinux_diff_weapon);

    switch(
iWeaponState)
    {
        case 
0:
        {
            
UTIL_SendWeaponAnim(iPlayerANIM_CHARGE_START0);

            
set_pdata_int(iItemm_iWeaponState1linux_diff_weapon);
            
Set_NextAttack(ANIM_CHARGE_START_TIME);
        }
        case 
1:
        {
            
UTIL_SendWeaponAnim(iPlayerANIM_CHARGE_IDLE_NOT_FINISH0);

            
set_pdata_int(iItemm_iWeaponState2linux_diff_weapon);
            
Set_NextAttack(ANIM_CHARGE_IDLE_TIME 1.5);
        }
        case 
2:
        {
            
UTIL_SendWeaponAnim(iPlayerANIM_CHARGE_FINISH0);

            
set_pdata_int(iItemm_iWeaponState3linux_diff_weapon);
            
Set_NextAttack(ANIM_CHARGE_FINISH_TIME);
        }
        case 
34:
        {
            
UTIL_SendWeaponAnim(iPlayerANIM_CHARGE_IDLE_FINISH0);

            
set_pdata_int(iItemm_iWeaponState4linux_diff_weapon);
            
Set_NextAttack(ANIM_CHARGE_IDLE_TIME);
        }
    }

    return 
HAM_SUPERCEDE;
}

public 
FakeTraceLine(iPlayeriItemFloatflDistanceFloatflDamageboolbEffect)
{
    new 
FloatflOrigin[3], FloatflAngle[3], FloatflEnd[3], FloatflViewOfs[3];
    new 
FloatflForw[3], FloatflUp[3], FloatflRight[3];

    
pev(iPlayerpev_originflOrigin);
    
pev(iPlayerpev_view_ofsflViewOfs);

    
flOrigin[0] += flViewOfs[0];
    
flOrigin[1] += flViewOfs[1];
    
flOrigin[2] += flViewOfs[2];
            
    
pev(iPlayerpev_v_angleflAngle);
    
engfunc(EngFunc_AngleVectorsflAngleflForwflRightflUp);
            
    new 
iTrace create_tr2();

    new 
FloatflSendAngles[] = { 0.0 };
    new 
FloatflSendAnglesUp[] = { 0.0 };
    new 
FloatflTan;
    new 
FloatflMul;

    static 
FloatflFractionpHit;
    static 
pHitEntitypHitEntity SLASH_HIT_NONE;
    static 
iHitResultiHitResult SLASH_HIT_NONE;

    for(new 
isizeof flSendAnglesi++)
    {
        
flTan floattan(flSendAngles[i], degrees);

        
flEnd[0] = (flForw[0] * flDistance) + (flRight[0] * flTan flDistance) + flUp[0] * flSendAnglesUp[i];
        
flEnd[1] = (flForw[1] * flDistance) + (flRight[1] * flTan flDistance) + flUp[1] * flSendAnglesUp[i];
        
flEnd[2] = (flForw[2] * flDistance) + (flRight[2] * flTan flDistance) + flUp[2] * flSendAnglesUp[i];
            
        
flMul = (flDistance/vector_length(flEnd));
        
flEnd[0] *= flMul;
        
flEnd[1] *= flMul;
        
flEnd[2] *= flMul;

        
flEnd[0] = flEnd[0] + flOrigin[0];
        
flEnd[1] = flEnd[1] + flOrigin[1];
        
flEnd[2] = flEnd[2] + flOrigin[2];

        
engfunc(EngFunc_TraceLineflOriginflEndDONT_IGNORE_MONSTERSiPlayeriTrace);
        
get_tr2(iTraceTR_flFractionflFraction);

        if(
flFraction == 1.0)
        {
            
engfunc(EngFunc_TraceHullflOriginflEndHULL_HEADiPlayeriTrace);
            
get_tr2(iTraceTR_flFractionflFraction);
        
            
engfunc(EngFunc_TraceLineflOriginflEndDONT_IGNORE_MONSTERSiPlayeriTrace);
            
pHit get_tr2(iTraceTR_pHit);
        }
        else
        {
            
pHit get_tr2(iTraceTR_pHit);
        }

        if(
flFraction != 1.0)
        {
            if(!
iHitResultiHitResult SLASH_HIT_WORLD;
        }

        if(
pHit && pHitEntity != pHit)
        {
            if(
pev(pHitpev_solid) == SOLID_BSP && !(pev(pHitpev_spawnflags) & SF_BREAK_TRIGGER_ONLY))
            {
                
ExecuteHamB(Ham_TakeDamagepHitiPlayeriPlayerflDamageDMG_NEVERGIB DMG_CLUB);
            }
            else
            {
                
FakeTraceAttack(pHitiPlayerflDamageflForwiTraceDMG_NEVERGIB DMG_CLUB);
            }

            
iHitResult SLASH_HIT_ENTITY;
            
pHitEntity pHit;
        }
    }

    
free_tr2(iTrace);

    if(
bEffect)
    {
        switch(
iHitResult)
        {
            case 
SLASH_HIT_NONE
            {
                
emit_sound(iPlayerCHAN_WEAPONKNIFE_SOUNDS[6], VOL_NORMATTN_NORM0PITCH_NORM);
                
Set_NextAttack(0.6);
            }
            case 
SLASH_HIT_WORLD
            {
                
emit_sound(iPlayerCHAN_WEAPONKNIFE_SOUNDS[4], VOL_NORMATTN_NORM0PITCH_NORM);
                
set_pev(iPlayerpev_punchangleFloat: { -2.00.00.0 });
                
Set_NextAttack(0.3);
            }
            case 
SLASH_HIT_ENTITY
            {
                
emit_sound(iPlayerCHAN_WEAPONKNIFE_SOUNDS[5], VOL_NORMATTN_NORM0PITCH_NORM);
                
set_pev(iPlayerpev_punchangleFloat: { -2.00.00.0 });
                
Set_NextAttack(0.3);
            }
        }
    }
}

public 
FakeTraceAttack(iVictimiAttackerFloatflDamageFloatvecDirection[3], iTraceibitsDamageBits)
{
    static 
FloatflTakeDamagepev(iVictimpev_takedamageflTakeDamage);

    if(
flTakeDamage == DAMAGE_NO) return 0
    if(!(
is_user_alive(iVictim))) return 0;

    if(
is_user_connected(iVictim)) 
    {
        if(
get_pdata_int(iVictimm_iPlayerTeamlinux_diff_player) == get_pdata_int(iAttackerm_iPlayerTeamlinux_diff_player)) 
            return 
0;
    }

    static 
iHitgroupiHitgroup get_tr2(iTraceTR_iHitgroup);
    static 
FloatvecEndPos[3]; get_tr2(iTraceTR_vecEndPosvecEndPos);
    static 
iBloodColoriBloodColor ExecuteHamB(Ham_BloodColoriVictim);
    
    
set_pdata_int(iVictimm_LastHitGroupiHitgrouplinux_diff_player);

    switch(
iHitgroup
    {
        case 
HIT_HEAD:                  flDamage *= 3.0;
        case 
HIT_LEFTARMHIT_RIGHTARMflDamage *= 0.75;
        case 
HIT_LEFTLEGHIT_RIGHTLEGflDamage *= 0.75;
        case 
HIT_STOMACH:               flDamage *= 1.5;
    }
    
    
ExecuteHamB(Ham_TakeDamageiVictimiAttackeriAttackerflDamageibitsDamageBits);
    
    
//if(zp_get_user_zombie(iVictim)) 
    
{
        if(
iBloodColor != DONT_BLEED
        {
            
ExecuteHamB(Ham_TraceBleediVictimflDamagevecDirectioniTraceibitsDamageBits);
            
UTIL_BloodDrips(vecEndPosiBloodColorfloatround(flDamage));
        }
    }

    return 
1;
}

stock UTIL_SendWeaponAnim(iPlayeriAnimiBody)
{
    
set_pev(iPlayerpev_weaponanimiAnim);

    
message_begin(MSG_ONESVC_WEAPONANIM_iPlayer);
    
write_byte(iAnim);
    
write_byte(iBody);
    
message_end();

    static 
iiCountiSpectatoriszSpectators[32];

    if(
pev(iPlayerpev_iuser1)) return;

    
get_players(iszSpectatorsiCount"bch");

    for(
0iCounti++)
    {
        
iSpectator iszSpectators[i];

        if(
pev(iSpectatorpev_iuser1) != OBS_IN_EYE) continue;
        if(
pev(iSpectatorpev_iuser2) != iPlayer) continue;

        
set_pev(iSpectatorpev_weaponanimiAnim);

        
message_begin(MSG_ONESVC_WEAPONANIM_iSpectator);
        
write_byte(iAnim);
        
write_byte(iBody);
        
message_end();
    }
}

public 
UTIL_BloodDrips(Float:vecOrigin[3], iColoriAmount) {
    if(
iAmount 255iAmount 255;
    
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvecOrigin0);
    
write_byte(TE_BLOODSPRITE);
    
engfunc(EngFunc_WriteCoordvecOrigin[0]);
    
engfunc(EngFunc_WriteCoordvecOrigin[1]);
    
engfunc(EngFunc_WriteCoordvecOrigin[2]);
    
write_short(g_iszModelIndexBloodSpray);
    
write_short(g_iszModelIndexBloodDrop);
    
write_byte(iColor);
    
write_byte(min(max(3,iAmount/10),16));
    
message_end();

Attached Files
File Type: sma Get Plugin or Get Source (x_knife_balrog9.sma - 28 views - 15.5 KB)

Last edited by MOHAREBX; 05-20-2024 at 20:04. Reason: Miss type
MOHAREBX is offline
Hn.S Xmix
Member
Join Date: May 2021
Old 05-02-2024 , 19:36   Re: How to make a normal plugin can be obtainable by a vip admin or a flag only ?
Reply With Quote #2

Change this
---->
PHP Code:
register_clcmd("say b9""Command__GiveBalrog9"); 
To this
----->
PHP Code:
register_concmd("say b9","Command__GiveBalrog9"ADMIN_SLAY,"<authid, nick or #userid>"
Scroll all the way down to line 150 and change this.
----->
PHP Code:
public Command__GiveBalrog9(iPlayerlevel)
{    
    if ((
get_user_flags(iPlayer) & level) != level)
    return 
PLUGIN_HANDLED
        
    
if(!IsUserHasBalrog9(iPlayer)) Set_Bit(g_iBitUserHasBalrog9iPlayer);
    else 
Reset_Bit(g_iBitUserHasBalrog9iPlayer);    

For t flag you can check your cmd access in your configs you can also edit it to make it more flexible and efficient on any flags

Last edited by Hn.S Xmix; 05-02-2024 at 20:07.
Hn.S Xmix is offline
MOHAREBX
New Member
Join Date: May 2024
Old 05-20-2024 , 19:58   Re: How to make a normal plugin can be obtainable by a vip admin or a flag only ?
Reply With Quote #3

Quote:
Originally Posted by Hn.S Xmix View Post
Change this
---->
PHP Code:
register_clcmd("say b9""Command__GiveBalrog9"); 
To this
----->
PHP Code:
register_concmd("say b9","Command__GiveBalrog9"ADMIN_SLAY,"<authid, nick or #userid>"
Scroll all the way down to line 150 and change this.
----->
PHP Code:
public Command__GiveBalrog9(iPlayerlevel)
{    
    if ((
get_user_flags(iPlayer) & level) != level)
    return 
PLUGIN_HANDLED
        
    
if(!IsUserHasBalrog9(iPlayer)) Set_Bit(g_iBitUserHasBalrog9iPlayer);
    else 
Reset_Bit(g_iBitUserHasBalrog9iPlayer);    

For t flag you can check your cmd access in your configs you can also edit it to make it more flexible and efficient on any flags

Bro just causally spit some life saving code and left such a Chad move ! All though i didn't expect Xmix himself to help lol


P.S:

I tried another way before I tried yours and it seems to work by adding this in 6th line

PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>

#define (not so nice word)_FLAG        ADMIN_LEVEL_F
#define IsValidEntity(%1)        (pev_valid(%1) == PDATA_SAFE)
#define IsCustomItem(%1)        (get_pdata_int(%1, m_iId, linux_diff_weapon) == CSW_KNIFE)
#define IsUserHasBalrog9(%1)    Get_Bit(g_iBitUserHasBalrog9, %1)

#define Get_Bit(%1,%2)            ((%1 & (1 << (%2 & 31))) ? 1 : 0)
#define Set_Bit(%1,%2)            %1 |= (1 << (%2 & 31))
#define Reset_Bit(%1,%2)        %1 &= ~(1 << (%2 & 31)) 
some random dude did it and it worked for me
Even tho I still don't know if he just added this or added something else in the code so I will post it as well so if anyone wanted to check !
Attached Files
File Type: sma Get Plugin or Get Source (x_knife_balrog9.sma - 1 views - 15.6 KB)

Last edited by MOHAREBX; 05-20-2024 at 20:08.
MOHAREBX is offline
Reply



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:37.


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