Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

WeaponList не фурычит

Статус пользователя Butterfly
сообщение 14.1.2020, 11:47
Сообщение #1


Стаж: 11 лет

Сообщений: 49
Благодарностей: 1
Полезность: 18

Подскажите, что не так, почему веапонлист не фурычит.

Cкрытый текст
Код
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <bmm>

#define PLUGIN "[Z]Weapon:Mauser C96"
#define VERSION "0.1"
#define AUTHOR "Batcon"

#define CustomItem(%0) (pev(%0, pev_impulse) == WEAPON_KEY)

// CWeaponBox
#define m_rgpPlayerItems_CWeaponBox 34

// CBasePlayerItem
#define m_pPlayer 41
#define m_pNext 42
#define m_iId 43

// CBasePlayerWeapon
#define m_flNextPrimaryAttack 46
#define m_flNextSecondaryAttack 47
#define m_flTimeWeaponIdle 48
#define m_iPrimaryAmmoType 49
#define m_iClip 51
#define m_fInReload 54
#define m_iShell 57
#define m_iShotsFired 64

// CBaseMonster
#define m_flNextAttack 83

// CBasePlayer
#define m_flEjectBrass 111
#define m_rpgPlayerItems 367
#define m_pActiveItem 373
#define m_rgAmmo 376

#define WEAPON_KEY 208
#define WEAPON_OLD "weapon_glock18"
#define WEAPON_NEW "b_weapon_mauser96"

#define WEAPON_MODEL_V "models/b_zm/v_mauser96.mdl"
#define WEAPON_MODEL_P "models/b_zm/p_mauser96.mdl"
#define WEAPON_MODEL_W "models/b_zm/w_mauser96.mdl"
#define WEAPON_MODEL_S "models/pshell.mdl"
#define WEAPON_SOUND_S  "weapons/mauser96-1.wav"

#define WEAPON_CLIP    10
#define WEAPON_AMMO    120
#define WEAPON_RATE    0.20
#define WEAPON_RATE2   0.18
#define WEAPON_DAMAGE  1.3

/*https://wiki.alliedmods.net/CS_WeaponList_Message_Dump*/
#define LIST_OLD_1 10
#define LIST_OLD_2 120
#define LIST_OLD_3 -1
#define LIST_OLD_4 -1
#define LIST_OLD_5 1
#define LIST_OLD_6 2
#define LIST_OLD_7 17
#define LIST_OLD_8 0

#define LIST_NEW_1 10
#define LIST_NEW_2 WEAPON_AMMO
#define LIST_NEW_3 -1
#define LIST_NEW_4 -1
#define LIST_NEW_5 1
#define LIST_NEW_6 2
#define LIST_NEW_7 17
#define LIST_NEW_8 0

new g_AllocString_V, g_AllocString_P, g_AllocString_E, g_ModelIndexShell
new g_msg_WeaponList, g_item
public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR);
    RegisterHam(Ham_Item_Deploy, WEAPON_OLD, "fw_Item_Deploy_Post", 1);
    RegisterHam(Ham_Item_PostFrame, WEAPON_OLD, "fw_Item_PostFrame");
    RegisterHam(Ham_Item_AddToPlayer, WEAPON_OLD, "fw_Item_AddToPlayer_Post", 1);
    
    RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_OLD, "fw_Weapon_PrimaryAttack");
    RegisterHam(Ham_Weapon_Reload, WEAPON_OLD, "fw_Weapon_Reload");
    RegisterHam(Ham_Weapon_WeaponIdle, WEAPON_OLD, "fw_Weapon_WeaponIdle");
    RegisterHam(Ham_Weapon_SecondaryAttack, WEAPON_OLD, "fw_Weapon_SecondaryAttack");
    
    RegisterHam(Ham_TraceAttack, "func_breakable",     "fw_TraceAttack_Post", 1);
    RegisterHam(Ham_TraceAttack, "func_wall",          "fw_TraceAttack_Post", 1);
    RegisterHam(Ham_TraceAttack, "func_door",          "fw_TraceAttack_Post", 1);
    RegisterHam(Ham_TraceAttack, "func_plat",          "fw_TraceAttack_Post", 1);
    RegisterHam(Ham_TraceAttack, "func_rotating",      "fw_TraceAttack_Post", 1);
    RegisterHam(Ham_TraceAttack, "worldspawn",         "fw_TraceAttack_Post", 1);
    RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack_Post", 1);
    
    RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack");
    RegisterHam(Ham_TraceAttack, "hostage_entity", "fw_TraceAttack");
    RegisterHam(Ham_TraceAttack, "player",         "fw_TraceAttack");
    RegisterHam(Ham_TraceAttack, "info_target",    "fw_TraceAttack");
    
    register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1);
    register_forward(FM_PlaybackEvent, "fw_PlaybackEvent");
    register_forward(FM_SetModel, "fw_SetModel");
    
    g_msg_WeaponList = get_user_msgid("WeaponList");
    
    register_clcmd(WEAPON_NEW, "hook_weapon");
    g_item = bmm_add_item("MAUSER", 0, BMM_TEAM_ALL, BMM_PISTOLS);
}
public plugin_precache() {
    engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_V);
    engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_P);
    engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_W);
    g_ModelIndexShell = engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_S);
    engfunc(EngFunc_PrecacheSound, WEAPON_SOUND_S);
        
    engfunc(EngFunc_PrecacheGeneric, "sprites/zb/640hud109.spr");

        engfunc(EngFunc_PrecacheSound, "weapons/mauser96_clipin.wav");
        engfunc(EngFunc_PrecacheSound, "weapons/mauser96_clipout.wav");
        engfunc(EngFunc_PrecacheSound, "weapons/mauser96_draw.wav");
        engfunc(EngFunc_PrecacheSound, "weapons/mauser96_boltpull.wav");
        engfunc(EngFunc_PrecacheSound, "weapons/mauser96_empty_boltpull.wav");
    
    new buffer[64]; formatex(buffer, charsmax(buffer), "sprites/%s.txt", WEAPON_NEW);
    engfunc(EngFunc_PrecacheGeneric, buffer);
    
    g_AllocString_V = engfunc(EngFunc_AllocString, WEAPON_MODEL_V);
    g_AllocString_P = engfunc(EngFunc_AllocString, WEAPON_MODEL_P);
    g_AllocString_E = engfunc(EngFunc_AllocString, WEAPON_OLD);
}
public bmm_item_selected(id, item) if(item == g_item) give_mauser(id);
public hook_weapon(id) { engclient_cmd(id, WEAPON_OLD); return PLUGIN_HANDLED; }
public give_mauser(id) {
    UTIL_DropWeapon(id, 2);
    static weapon; weapon = give_weapon(id);
    if(!weapon) return;
    emit_sound(id, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
        ExecuteHamB(Ham_GiveAmmo, id, WEAPON_AMMO, "9mm", WEAPON_AMMO);
}
public give_weapon(id) {
    static ent; ent = engfunc(EngFunc_CreateNamedEntity, g_AllocString_E);
    if(ent <= 0) return 0;
    set_pev(ent, pev_spawnflags, SF_NORESPAWN);
    set_pev(ent, pev_impulse, WEAPON_KEY);
    ExecuteHam(Ham_Spawn, ent);
    if(!ExecuteHamB(Ham_AddPlayerItem, id, ent)) {
        engfunc(EngFunc_RemoveEntity, ent);
        return 0;
    }
    ExecuteHamB(Ham_Item_AttachToPlayer, ent, id);
    set_pdata_int(ent, m_iClip, WEAPON_CLIP, 4);
    set_pdata_int(ent, m_iShell, g_ModelIndexShell, 4);
    return ent;
}
public fw_Item_Deploy_Post(ent) {
    if(!CustomItem(ent)) return HAM_IGNORED;
    static id; id = get_pdata_cbase(ent, m_pPlayer, 4);
    set_pev_string(id, pev_viewmodel2, g_AllocString_V);
    set_pev_string(id, pev_weaponmodel2, g_AllocString_P);
    set_pdata_float(id, m_flNextAttack, 1.2, 5);
    set_pdata_float(ent, m_flTimeWeaponIdle, 1.3, 4);
    UTIL_SendWeaponAnim(id, get_pdata_int(ent, m_iClip, 4) ? 6 : 7);
    return HAM_IGNORED;
}
public fw_Item_PostFrame(ent) {
    if(!CustomItem(ent)) return HAM_IGNORED;
    if(get_pdata_int(ent, m_fInReload, 4)) {
        static id; id = get_pdata_cbase(ent, m_pPlayer, 4);
            static clip; clip = get_pdata_int(ent, m_iClip, 4);
            static ammotype; ammotype = m_rgAmmo + get_pdata_int(ent, m_iPrimaryAmmoType, 4);
            static ammo; ammo = get_pdata_int(id, ammotype, 5);
            static j; j = min(WEAPON_CLIP - clip, ammo);
            set_pdata_int(ent, m_iClip, clip+j, 4);
            set_pdata_int(id, ammotype, ammo-j, 5);
                set_pdata_int(ent, m_fInReload, 0, 4);
    }
    return HAM_IGNORED;
}
public fw_Item_AddToPlayer_Post(ent, id) {
    switch(pev(ent, pev_impulse)) {
        case 0:          Weaponlist(id, 0);
        case WEAPON_KEY: Weaponlist(id, 1);
    }
}
public fw_Weapon_PrimaryAttack(ent) {
    if(!CustomItem(ent)) return HAM_IGNORED;
    if(get_pdata_int(ent, m_iShotsFired, 4)) return HAM_SUPERCEDE;
    static clip; clip = get_pdata_int(ent, m_iClip, 4);
    if(!clip) {
        ExecuteHamB(Ham_Weapon_PlayEmptySound, ent);
        set_pdata_float(ent, m_flNextPrimaryAttack, 0.2, 4);
        set_pdata_float(ent, m_flNextSecondaryAttack, 0.2, 4);
        return HAM_SUPERCEDE;
    }
    
    state FireBullets: Enabled;
    ExecuteHam(Ham_Weapon_PrimaryAttack, ent);
    state FireBullets: Disabled;
    
    static id; id = get_pdata_cbase(ent, m_pPlayer, 4);
    
    emit_sound(id, CHAN_WEAPON, WEAPON_SOUND_S, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
    UTIL_SendWeaponAnim(id, clip == 1 ? 3 : 2);
    set_pdata_float(ent, m_flNextPrimaryAttack, WEAPON_RATE, 4);
    set_pdata_float(ent, m_flNextSecondaryAttack, WEAPON_RATE, 4);
    set_pdata_float(ent, m_flTimeWeaponIdle, 1.1, 4);
    set_pdata_float(id, m_flEjectBrass, get_gametime(), 5);
    
    return HAM_SUPERCEDE;
}
public fw_Weapon_Reload(ent) {
    if(!CustomItem(ent)) return HAM_IGNORED;
    static clip; clip = get_pdata_int(ent, m_iClip, 4);
    if(clip == WEAPON_CLIP) return HAM_SUPERCEDE;
    static id; id = get_pdata_cbase(ent, m_pPlayer, 4);
    if(!get_pdata_int(id, m_rgAmmo + get_pdata_int(ent, m_iPrimaryAmmoType, 4), 5)) return HAM_IGNORED;
    set_pdata_int(ent, m_iClip, 0, 4);
    ExecuteHam(Ham_Weapon_Reload, ent);
    set_pdata_int(ent, m_iClip, clip, 4);
    set_pdata_float(id, m_flNextAttack, 2.2, 5);
    set_pdata_float(ent, m_flTimeWeaponIdle, 2.2, 4);
    set_pdata_int(ent, m_fInReload, 1, 4);
    UTIL_SendWeaponAnim(id, clip ? 4 : 5);
        return HAM_SUPERCEDE;
}
public fw_Weapon_WeaponIdle(ent) {
    if(!CustomItem(ent) || get_pdata_float(ent, m_flTimeWeaponIdle, 4) > 0.0) return HAM_IGNORED;
    UTIL_SendWeaponAnim(get_pdata_cbase(ent, m_pPlayer, 4), get_pdata_int(ent, m_iClip, 4) ? 0 : 1);
    set_pdata_float(ent, m_flTimeWeaponIdle, 1.6, 4);
    return HAM_SUPERCEDE;
}
public fw_Weapon_SecondaryAttack(ent) {
    if(!CustomItem(ent)) return HAM_IGNORED;
    static clip; clip = get_pdata_int(ent, m_iClip, 4)
    if(!clip) {
        ExecuteHamB(Ham_Weapon_PlayEmptySound, ent);
        set_pdata_float(ent, m_flNextPrimaryAttack, 0.2, 4);
        set_pdata_float(ent, m_flNextSecondaryAttack, 0.2, 4);
        return HAM_SUPERCEDE;
    }
    
    set_pdata_int(ent, m_iShotsFired, 0, 4);
    static id; id = get_pdata_cbase(ent, m_pPlayer, 4);
    static Float:Punchangle[3]; pev(id, pev_punchangle, Punchangle);
    
    state FireBullets: Enabled;
    ExecuteHam(Ham_Weapon_PrimaryAttack, ent);
    state FireBullets: Disabled;
    
    Punchangle[0] = random_float(1.0, 2.0);
    Punchangle[1] = random_float(-1.0, 1.0);
    
    emit_sound(id, CHAN_WEAPON, WEAPON_SOUND_S, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
    UTIL_SendWeaponAnim(id, clip == 1 ? 3 : 2);
    set_pdata_float(ent, m_flNextPrimaryAttack, WEAPON_RATE2, 4);
    set_pdata_float(ent, m_flNextSecondaryAttack, WEAPON_RATE2, 4);
    set_pdata_float(ent, m_flTimeWeaponIdle, 1.1, 4);
    set_pdata_float(id, m_flEjectBrass, get_gametime(), 5);
    set_pev(id, pev_punchangle, Punchangle);
    set_pev(id, pev_button, pev(id, pev_button) & ~IN_ATTACK);
    
    return HAM_SUPERCEDE;
}
public fw_TraceAttack_Post(victim, attacker, Float:damage, Float:fDir[3], ptr, damagetype) <FireBullets: Enabled>
{
    if(!is_user_connected(attacker)) return HAM_IGNORED;
    static item; item = get_pdata_cbase(attacker, m_pActiveItem, 5);
    if(item <= 0 || !CustomItem(item)) return HAM_IGNORED;
    
        static Float:vecEnd[3]; get_tr2(ptr, TR_vecEndPos, vecEnd);
        engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0);
        write_byte(TE_GUNSHOTDECAL);
    engfunc(EngFunc_WriteCoord, vecEnd[0]);
        engfunc(EngFunc_WriteCoord, vecEnd[1]);
        engfunc(EngFunc_WriteCoord, vecEnd[2]);
        write_short(victim);
        write_byte(random_num(41, 45));
        message_end();
        return HAM_IGNORED;
}
public fw_TraceAttack(victim, attacker, Float:damage) <FireBullets: Enabled>
{
    if(!is_user_connected(attacker)) return HAM_IGNORED;
    static item; item = get_pdata_cbase(attacker, m_pActiveItem, 5);
    if(item <= 0 || !CustomItem(item)) return HAM_IGNORED;
    
        SetHamParamFloat(3, damage * WEAPON_DAMAGE);
    return HAM_IGNORED;
}
public fw_SetModel(ent) {
    if(!pev_valid(ent)) return FMRES_IGNORED;
        static i, classname[32], item; pev(ent, pev_classname, classname, 31);
    if(!equal(classname, "weaponbox")) return FMRES_IGNORED;
    for(i = 0; i < 6; i++) {
        item = get_pdata_cbase(ent, m_rgpPlayerItems_CWeaponBox + i, 4);
        if(item > 0 && CustomItem(item)) {
            engfunc(EngFunc_SetModel, ent, WEAPON_MODEL_W);
            return FMRES_SUPERCEDE;
        }
    }
    return FMRES_IGNORED;
}
public fw_UpdateClientData_Post(id, SendWeapons, CD_Handle) {
    if(get_cd(CD_Handle, CD_DeadFlag) != DEAD_NO) return;
    static item; item = get_pdata_cbase(id, m_pActiveItem, 5);
    if(item <= 0 || !CustomItem(item)) return;
    set_cd(CD_Handle, CD_flNextAttack, 999999.0);
}
public fw_PlaybackEvent() <FireBullets: Enabled> { return FMRES_SUPERCEDE; }
public fw_PlaybackEvent() <FireBullets: Disabled> { return FMRES_IGNORED; }
public fw_PlaybackEvent() <> { return FMRES_IGNORED; }
public fw_TraceAttack_Post() <FireBullets: Disabled> { return HAM_IGNORED; }
public fw_TraceAttack_Post() <> { return FMRES_IGNORED; }
public fw_TraceAttack() <FireBullets: Disabled> { return HAM_IGNORED; }
public fw_TraceAttack() <> { return FMRES_IGNORED; }
stock UTIL_SendWeaponAnim(id, Sequence) {
    set_pev(id, pev_weaponanim, Sequence);
    message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id);
        write_byte(Sequence);
        write_byte(0);
        message_end();
}
stock UTIL_DropWeapon(id, slot) {
        static iEntity; iEntity = get_pdata_cbase(id, (m_rpgPlayerItems + slot), 5);
        if(iEntity > 0) {
               static iNext;
               static szWeaponName[32];
      
               do{
                       iNext = get_pdata_cbase(iEntity, m_pNext, 4);
                       if(get_weaponname(get_pdata_int(iEntity, m_iId, 4), szWeaponName, 31)) {  
                               engclient_cmd(id, "drop", szWeaponName);
               }
               } while(( iEntity = iNext) > 0);
    }
}
stock Weaponlist(id, type) {
    message_begin(MSG_ONE, g_msg_WeaponList, _, id);
    if(type) {
        write_string(WEAPON_NEW);
            write_byte(LIST_NEW_1);
            write_byte(LIST_NEW_2);
            write_byte(LIST_NEW_3);
            write_byte(LIST_NEW_4);
            write_byte(LIST_NEW_5);
            write_byte(LIST_NEW_6);
            write_byte(LIST_NEW_7);
            write_byte(LIST_NEW_8);
    }
    else {
        write_string(WEAPON_OLD);
            write_byte(LIST_OLD_1);
            write_byte(LIST_OLD_2);
            write_byte(LIST_OLD_3);
            write_byte(LIST_OLD_4);
            write_byte(LIST_OLD_5);
            write_byte(LIST_OLD_6);
            write_byte(LIST_OLD_7);
            write_byte(LIST_OLD_8);
    }
    message_end();
}
stock UTIL_EjectBrass(id, ModelShellIndex, Float:Up, Float:Forward, Float:Right, Koord1, Koord2) {
    static Float:Velocity[3]; pev(id, pev_velocity, Velocity);
    static Float:ViewOfs[3]; pev(id, pev_view_ofs, ViewOfs);
    static Float:Angles[3]; pev(id, pev_angles, Angles);
    static Float:Origin[3]; pev(id, pev_origin, Origin);
    static Float:AnglesV[3]; pev(id, pev_v_angle, AnglesV);
    static Float:Punchangle[3]; pev(id, pev_punchangle, Punchangle);
    AnglesV[0] = Punchangle[0] + AnglesV[0];
    AnglesV[1] = Punchangle[1] + AnglesV[1];
    AnglesV[2] = Punchangle[2] + AnglesV[2];
    engfunc(EngFunc_MakeVectors, AnglesV);
    
    static Float:VRight[3]; global_get(glb_v_right, VRight);
    static Float:VUp[3]; global_get(glb_v_up, VUp);
    static Float:VForward[3]; global_get(glb_v_forward, VForward);
    static Float:vShellOrigin[3], Float:vShellVelocity[3];

    vShellOrigin[0] = Origin[0]+ViewOfs[0]+VUp[0]*Up+VForward[0]*Forward+VRight[0]*Right;
    vShellOrigin[1] = Origin[1]+ViewOfs[1]+VUp[1]*Up+VForward[1]*Forward+VRight[1]*Right;
    vShellOrigin[2] = Origin[2]+ViewOfs[2]+VUp[2]*Up+VForward[2]*Forward+VRight[2]*Right;
    vShellVelocity[1] = Velocity[1]+VRight[1]*random_num(Koord1,Koord2)+VUp[1]*random_float(100.0,150.0)+VForward[1]*25.0;
    vShellVelocity[0] = Velocity[0]+VRight[0]*random_num(Koord1,Koord2)+VUp[0]*random_float(100.0,150.0)+VForward[0]*25.0;
    vShellVelocity[2] = Velocity[2]+VRight[2]*random_num(Koord1,Koord2)+VUp[2]*random_float(100.0,150.0)+VForward[2]*25.0;

    engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vShellOrigin, 0);
    write_byte(TE_MODEL);
    engfunc(EngFunc_WriteCoord, vShellOrigin[0]);
    engfunc(EngFunc_WriteCoord, vShellOrigin[1]);
    engfunc(EngFunc_WriteCoord, vShellOrigin[2]);
    engfunc(EngFunc_WriteCoord, vShellVelocity[0]);
    engfunc(EngFunc_WriteCoord, vShellVelocity[1]);
    engfunc(EngFunc_WriteCoord, vShellVelocity[2]);
    engfunc(EngFunc_WriteAngle, Angles[1]);
    write_short(ModelShellIndex);
    write_byte(1);
    write_byte(15); // 2.5 seconds
    message_end();
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: