Русское сообщество по скриптингу

Как поставить флаг админа на оружие  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Как поставить флаг админа на оружие  [Решено]

Сообщение 1Fresh1MaLoY » 08 июл 2017, 06:24

Как поставить флаг на оружие чтобы ток админ с флагом А мог его брать?(Простите за отсутствие знаков препинания)

Код: Выделить всё
/* 
    Plugin generated by AMXX-Studio 
    Visit to: Zombie-Mod.ru; Next21.ru; Aghl.ru; ZombieLite.ru
    Skull-11 created by Chrescoe1
    15.03.2015 v0.1
*/
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "Skull-11"
#define VERSION "0.1"
#define AUTHOR "Chrescoe1"

#define weapon_name    "weapon_xm1014"
#define weapon_new    "dm_skull11"

//Linux extra offsets
#define pData_Player                5
#define pData_Item                4

// CWeaponBox
#define pDataKey_WeaponBoxItems            34

//CBasePlayerItem
#define pDataKey_iOwner                41
#define pDataKey_iNext                42
#define pDataKey_iId                43

//CBasePlayerWeapon
#define pDataKey_flNextPrimaryAttack        46
#define pDataKey_flNextTimeWeaponIdle        48
#define pDataKey_iPrimaryAmmoType        49
#define pDataKey_iClip                51
#define pDataKey_iInReload            54
#define pDataKey_iSpecialReload            55
#define pDataKey_iState                74

//CBaseMonster
#define pDataKey_iLastHitGroup            75
#define pDataKey_flNextAttack            83

//CBasePlayer
#define pDataKey_iPlayerItems            367
#define pDataKey_iActiveItem            373    
#define pDataKey_ibpAmmo            376

//Check
#define WEAPON_KEY                195
#define Is_CustomItem(%0)            (pev(%0,pev_impulse)==WEAPON_KEY)

#define model_v        "models/dm/v_skull11.mdl"
#define model_p        "models/dm/p_skull11.mdl"
#define model_w        "models/dm/w_skull11.mdl"

#define weapon_punchangle    0.8
#define weapon_damage        1.25
#define weapon_damage2        0.75
#define weapon_aspeed        0.325
#define weapon_aspeed2        0.61
#define weapon_ammo        15
#define weapon_bpammo        60
new const sounds_dump[][]={
    
"weapons/skull11_boltpull.wav",
    
"weapons/skull11_clipin.wav",
    
"weapons/skull11_clipout.wav",
    
"weapons/skull11_shoot1.wav"
}
#define sound_shot    "weapons/skull11_shoot1.wav"
new const precache_dump[][]={
    
"sprites/dm_skull11.txt",
    
"sprites/dm/640hud2.spr",
    
"sprites/dm/640hud71.spr"
}
new 
Msg_WeaponList
new g_AllocString_V,g_AllocString_P

new bool:sec_attack,abc
//Amxx
public plugin_precache(){
    
engfunc(EngFunc_PrecacheModel,model_v)
    
engfunc(EngFunc_PrecacheModel,model_p)
    
engfunc(EngFunc_PrecacheModel,model_w)
    
g_AllocString_V engfunc(EngFunc_AllocStringmodel_v)
    
g_AllocString_P engfunc(EngFunc_AllocStringmodel_p)
    new 
i;
    for(
i=0;i<sizeof(sounds_dump);i++)engfunc(EngFunc_PrecacheSound,sounds_dump[i])
    for(
i=0;i<sizeof(precache_dump);i++)engfunc(EngFunc_PrecacheGeneric,precache_dump[i])
    
register_forward(FM_Spawn,"HookFm_Spawn",0)
}
public 
plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
RegisterHam(Ham_Item_Deploy,weapon_name,"HookHam_Weapon_Deploy",1)
    
RegisterHam(Ham_Item_AddToPlayer,weapon_name,"HookHam_Weapon_Add",1)
    
RegisterHam(Ham_Item_PostFrame,weapon_name,"HookHam_Weapon_Frame",0)
    
    
RegisterHam(Ham_Weapon_Reload,weapon_name,"HookHam_Weapon_Reload",0)
    
RegisterHam(Ham_Weapon_WeaponIdle,weapon_name,"HookHam_Weapon_Idle",0)
    
RegisterHam(Ham_Weapon_PrimaryAttack,weapon_name,"HookHam_Weapon_PrimaryAttack",0)
    
    
RegisterHam(Ham_Spawn,"weaponbox","HookHam_WeaponBox_Spawn",1)
    
    
    
register_forward(FM_UpdateClientData,"HookFm_UpdateClientData",1)
    
    
Msg_WeaponList get_user_msgid("WeaponList");
    
register_clcmd("say s11","get_item")
    
register_clcmd(weapon_new,"hook_item")
    
// Add your code here...
}
//Cl cmds
public get_item(id){
    
UTIL_DropWeapon(id,1);
    new 
weapon=make_weapon();if(weapon<=0) return
    if(!
ExecuteHamB(Ham_AddPlayerItemidweapon)) {engfunc(EngFunc_RemoveEntityweapon);return;}
    
ExecuteHam(Ham_Item_AttachToPlayer,weaponid)
    new 
ammotype pDataKey_ibpAmmo +get_pdata_int(weaponpDataKey_iPrimaryAmmoType,pData_Item)
    new 
ammo=get_pdata_int(idammotype,pData_Player)
    if(
ammoweapon_bpammo)set_pdata_int(idammotypeweapon_bpammo,pData_Player)
    
set_pdata_int(weapon,pDataKey_iClip,weapon_ammo,pData_Item)
    
emit_sound(idCHAN_ITEM"items/gunpickup2.wav"VOL_NORMATTN_NORM0PITCH_NORM)
}
public 
hook_item(id){
    
engclient_cmd(id,weapon_name)
    return 
PLUGIN_HANDLED
}
//Ham hooks
public HookHam_Weapon_Deploy(ent){
    if(!
Is_CustomItem(ent))return HAM_IGNORED
    
static id;id=get_pdata_cbase(ent,pDataKey_iOwner,pData_Item)

    
set_pev_string(idpev_viewmodel2g_AllocString_V)
    
set_pev_string(idpev_weaponmodel2g_AllocString_P)
    
set_pdata_float(ent,pDataKey_flNextPrimaryAttack,1.2,pData_Item)
    
set_pdata_float(ent,pDataKey_flNextTimeWeaponIdle,1.2,pData_Item)
    
Play_WeaponAnim(id,4)
    return 
HAM_IGNORED
}
public 
HookHam_Weapon_Add(ent,id){
    switch(
pev(entpev_impulse)){
        case 
WEAPON_KEY:Weaponlist(id,true)
        case 
0:Weaponlist(id,false)
    }
    return 
HAM_IGNORED
}
public 
HookHam_Weapon_Frame(ent){
    if(!
Is_CustomItem(ent)) return HAM_IGNORED;
    static 
idid get_pdata_cbase(entpDataKey_iOwner,pData_Item);
    if(
get_pdata_int(entpDataKey_iInReload,pData_Item)){
        static 
clip,ammotype,ammo,j
        clip 
get_pdata_int(entpDataKey_iClip,pData_Item);
        
ammotype pDataKey_ibpAmmo get_pdata_int(entpDataKey_iPrimaryAmmoType,pData_Item);
        
ammo get_pdata_int(idammotype,pData_Player);
        
min(weapon_ammo clipammo);
        
set_pdata_int(entpDataKey_iClipclip+j,pData_Item);
        
set_pdata_int(idammotypeammo-j,pData_Player);
        
set_pdata_int(entpDataKey_iInReload,0,pData_Item);
    }else if(
pev(id,pev_button)&IN_ATTACK2&&get_pdata_float(ent,pDataKey_flNextPrimaryAttack,pData_Item)<=0.0){
        
sec_attack=true
        ExecuteHamB
(Ham_Weapon_PrimaryAttack,ent)
        
sec_attack=false
    
}
    return 
HAM_IGNORED;
}
public 
HookHam_Weapon_Reload(ent){
    if(!
Is_CustomItem(ent)) return HAM_IGNORED;
    
    static 
clipclip get_pdata_int(entpDataKey_iClippData_Item);
    if(
clip >= weapon_ammo) return HAM_SUPERCEDE;
    
    static 
idid get_pdata_cbase(entpDataKey_iOwnerpData_Item);
    if(
get_pdata_int(id,pDataKey_ibpAmmo+get_pdata_int(ent,pDataKey_iPrimaryAmmoType,pData_Item),pData_Player)<=0)return HAM_SUPERCEDE
    
    set_pdata_int
(entpDataKey_iClip0pData_Item);
    
ExecuteHam(Ham_Weapon_Reloadent);
    
set_pdata_int(entpDataKey_iClipclippData_Item);
    
set_pdata_int(entpDataKey_iInReload1pData_Item);
    
set_pdata_float(ent,pDataKey_flNextPrimaryAttack,3.86,pData_Item)
    
set_pdata_float(ent,pDataKey_flNextTimeWeaponIdle,3.86,pData_Item)
    
set_pdata_float(id,pDataKey_flNextAttack,3.86,pData_Player
    
Play_WeaponAnim(id,3)
    return 
HAM_SUPERCEDE;
}
public 
HookHam_Weapon_Idle(ent){
    if(!
Is_CustomItem(ent))return HAM_IGNORED
    
if(get_pdata_float(ent,pDataKey_flNextTimeWeaponIdle,pData_Item)>0.0)return HAM_IGNORED
    set_pdata_float
(ent,pDataKey_flNextTimeWeaponIdle,1.7,pData_Item)
    
Play_WeaponAnim(get_pdata_cbase(ent,pDataKey_iOwner,pData_Item),0)
    return 
HAM_SUPERCEDE
}
public 
HookHam_Weapon_PrimaryAttack(ent){
    if(!
Is_CustomItem(ent))return HAM_IGNORED
    
static ammo;ammo=get_pdata_int(ent,pDataKey_iClip,pData_Item);
    if(
ammo<=0){
        
ExecuteHam(Ham_Weapon_PlayEmptySoundent);
        
set_pdata_float(ent,pDataKey_flNextPrimaryAttack,sec_attack?weapon_aspeed2:weapon_aspeed,pData_Item)
        return 
HAM_SUPERCEDE
    
}
        
    static 
id;id=get_pdata_cbase(ent,pDataKey_iOwner,pData_Item);abc=id
    
static Float:user_punchangle[3];pev(id,pev_punchangle,user_punchangle)
    static 
fm_hooktrace;fm_hooktrace=register_forward(FM_TraceLine,"HookFm_TraceLine",true)
    static 
fm_playbackevent;fm_playbackevent=register_forward(FM_PlaybackEvent,"HookFm_PlayBackEvent",false)
    
    
state FireBulletsEnabled;
    
ExecuteHam(Ham_Weapon_PrimaryAttack,ent)
    
state FireBulletsDisabled;
    
    
unregister_forward(FM_TraceLine,fm_hooktrace,true)
    
unregister_forward(FM_PlaybackEvent,fm_playbackevent,false)
    
    static 
Float:user_newpunch[3];pev(id,pev_punchangle,user_newpunch)
    
user_newpunch[0]=user_punchangle[0]+(user_newpunch[0]-user_punchangle[0])*weapon_punchangle
    user_newpunch
[1]=user_punchangle[1]+(user_newpunch[1]-user_punchangle[1])*weapon_punchangle
    user_newpunch
[2]=user_punchangle[2]+(user_newpunch[2]-user_punchangle[2])*weapon_punchangle
    set_pev
(id,pev_punchangle,user_newpunch)
    
    
emit_sound(idCHAN_WEAPON,sound_shotVOL_NORMATTN_NORM0PITCH_NORM)
    
Play_WeaponAnim(id,random_num(1,2))
    
    
set_pdata_float(ent,pDataKey_flNextTimeWeaponIdle,1.03,pData_Item)
    
set_pdata_float(ent,pDataKey_flNextPrimaryAttack,sec_attack?weapon_aspeed2:weapon_aspeed,pData_Item)
    
set_pdata_int(ent,pDataKey_iClip,ammo-1,pData_Item)
    
    return 
HAM_SUPERCEDE
}
public 
HookHam_TakeDamage(victim,inflictor,attackerFloat:damage) <FireBulletsEnabled>{SetHamParamFloat(4,damage*(sec_attack?weapon_damage2:weapon_damage));return HAM_OVERRIDE;}
public 
HookHam_TakeDamage() <FireBulletsDisabled> { return HAM_IGNORED; }
public 
HookHam_TakeDamage() <> { return HAM_IGNORED; }

new 
fm_setmodel
public HookHam_WeaponBox_Spawn(ent){fm_setmodel=register_forward(FM_SetModel,"HookFm_SetModel",false);return HAM_IGNORED;}
//Fakemeta
public HookFm_SetModel(ent) { 
    
unregister_forward(FM_SetModel,fm_setmodel,false)
    static 
iclassname[32], itempev(entpev_classnameclassname31);
    if(!
equal(classname"weaponbox")) return FMRES_IGNORED;
    for(
06i++) {
        
item get_pdata_cbase(entpDataKey_WeaponBoxItems i4);
        if(
item && Is_CustomItem(item)) {
            
engfunc(EngFunc_SetModelentmodel_w);
            return 
FMRES_SUPERCEDE;
        }
    }
    return 
FMRES_IGNORED;
}
public 
HookFm_PlayBackEvent()return FMRES_SUPERCEDE
public HookFm_TraceLine(Float:tr_start[3],Float:tr_end[3],tr_flag,tr_ignore,tr){
    
    
/*No recoil*/
    
if(sec_attack==true){
        static 
Float:Origin[3];pev(abc,pev_origin,Origin)
        static 
Float:vOfs[3];pev(abc,pev_view_ofs,vOfs)
        static 
Float:vAngle[3];pev(abc,pev_v_angle,vAngle)
        static 
Float:VecFow[3];angle_vector(vAngle,ANGLEVECTOR_FORWARD,VecFow)
        
VecFow[0]=Origin[0]+vOfs[0]+VecFow[0]*17000.0
        VecFow
[1]=Origin[1]+vOfs[1]+VecFow[1]*17000.0
        VecFow
[2]=Origin[2]+vOfs[2]+VecFow[2]*17000.0
        engfunc
(EngFunc_TraceLine,tr_start,VecFow,tr_flag,tr_ignore,tr)
    }
    
/*No recoil end*/
    
    
static hit;hit=get_tr2(tr,TR_pHit)
    static 
Decal
    
static glassdecal;if(!glassdecal)glassdecal=engfuncEngFunc_DecalIndex"{bproof1" )
    
hit=get_tr2(tr,TR_pHit)
    if(
hit>0&&pev_valid(hit))
        if(
pev(hit,pev_solid)!=SOLID_BSP)return FMRES_IGNORED
        
else if(pev(hit,pev_rendermode)!=0)Decal=glassdecal
        
else Decal=random_num(41,45)
    else 
Decal=random_num(41,45)

    static 
FloatvecEnd[3];get_tr2(trTR_vecEndPosvecEnd)
    
    
engfunc(EngFunc_MessageBeginMSG_PASSVC_TEMPENTITYvecEnd0)
    
write_byte(TE_GUNSHOTDECAL)
    
engfunc(EngFunc_WriteCoordvecEnd[0])
    
engfunc(EngFunc_WriteCoordvecEnd[1])
    
engfunc(EngFunc_WriteCoordvecEnd[2])
    
write_short(hit>0?hit:0)
    
write_byte(Decal)
    
message_end()
    
    static 
Float:WallVector[3];get_tr2(trTR_vecPlaneNormalWallVector)
    
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvecEnd0);
    
write_byte(TE_STREAK_SPLASH)
    
engfunc(EngFunc_WriteCoordvecEnd[0]);
    
engfunc(EngFunc_WriteCoordvecEnd[1]);
    
engfunc(EngFunc_WriteCoordvecEnd[2]);
    
engfunc(EngFunc_WriteCoordWallVector[0]*random_float(25.0,30.0));
    
engfunc(EngFunc_WriteCoordWallVector[1]*random_float(25.0,30.0));
    
engfunc(EngFunc_WriteCoordWallVector[2]*random_float(25.0,30.0));
    
write_byte(111)    //colorid
    
write_short(12)    //count
    
write_short(3)    //speed
    
write_short(75)    //random velocity
    
message_end()
    return 
FMRES_IGNORED
}
public 
HookFm_UpdateClientData(idSendWeaponsCD_Handle) {
    static 
item;item=get_pdata_cbase(idpDataKey_iActiveItem,pData_Player)
    if(
item<=0||!Is_CustomItem(item))return FMRES_IGNORED
    set_cd
(CD_HandleCD_flNextAttack,99999.0)
    return 
FMRES_HANDLED
}
public 
HookFm_Spawn(id){
    static 
ClName[32];pev(id,pev_classname,ClName,31)
    if(
strlen(ClName)<5)return FMRES_IGNORED
    
static Trie:ClBuffer;if(!ClBuffer)ClBuffer TrieCreate()
    if(!
TrieKeyExists(ClBuffer,ClName)){
        
TrieSetCell(ClBuffer,ClName1)
        
RegisterHamFromEntity(Ham_TakeDamage,id,"HookHam_TakeDamage",0)
    }
    return 
FMRES_IGNORED
}
//stocks
stock make_weapon() {
    static 
ent
    static 
g_AllocString_E;
    if(
g_AllocString_E||(g_AllocString_E=engfunc(EngFunc_AllocString,weapon_name)))
        
ent engfunc(EngFunc_CreateNamedEntityg_AllocString_E)
    else return 
0
    
if(ent <= 0) return 0;
    
set_pev(entpev_spawnflagsSF_NORESPAWN);
    
set_pev(entpev_impulseWEAPON_KEY);
    
ExecuteHam(Ham_Spawnent)
    return 
ent
}
stock UTIL_DropWeapon(idslot) {
    static 
iEntityiEntity get_pdata_cbase(id, (pDataKey_iPlayerItems slot), pData_Player);
    if(
iEntity 0) {
        static 
iNext,szWeaponName[32];
        do{
            
iNext get_pdata_cbase(iEntitypDataKey_iNext4);
            if(
get_weaponname(get_pdata_int(iEntitypDataKey_iId4), szWeaponName31))
                
engclient_cmd(id"drop"szWeaponName)
        } while(( 
iEntity iNext) > 0);
    }
}
stock Play_WeaponAnim(id,anim){
    
set_pev(idpev_weaponanim,anim)
    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM_id)
    
write_byte(anim)
    
write_byte(0)
    
message_end()
}
//5,     32, -1, -1, 0, 12,5,  0,    // weapon_xm1014
stock Weaponlist(id,bool:set) {
    if(!
is_user_connected(id))return
    
message_begin(MSG_ONEMsg_WeaponList_id);
    
write_string(set==false?weapon_name:weapon_new);
    
write_byte(5);
    
write_byte(weapon_bpammo);
    
write_byte(-1);
    
write_byte(-1);
    
write_byte(0);
    
write_byte(12);
    
write_byte(5);
    
write_byte(0);
    
message_end();
Аватара пользователя
1Fresh1MaLoY
 
Сообщения: 33
Зарегистрирован: 08 июл 2017, 06:19
Благодарил (а): 8 раз.
Поблагодарили: 2 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
SA:MP
C#

Re: Как поставить флаг админа на оружие

Сообщение артист666 » 08 июл 2017, 08:03

В public get_item(id)

Код: Выделить всё
if(!(get_user_flags(id) & ADMIN_LEVEL_A)) return
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 10