Skocz do zawartości

Nowy szablon forum

mygo.pl

Stworzyliśmy dla Was nowy wygląd forum. Z pewnością znajdziesz rzeczy, które wg Ciebie mogą zostać zmienione - wspomnij o tym w specjalnym wątku.

Czytaj więcej

Jak założyć własną sieć

serwerów CS

Zastanawiasz się nad prowadzeniem własnej sieci serwerów? Przeczytaj podstawowe informacje, na które należy zwrócić uwagę, przy takim projekcie.

Czytaj więcej

Tworzymy spis sieci

dodaj swoją

Dodaj sieć do której należysz, pozwoli to na promocję i budowę ogólnopolskiej bazy sieci CS.

Czytaj więcej

RSSAfter IN_ATTACK2 crash


MYGO.pl
 Udostępnij

Rekomendowane odpowiedzi

  • RSSy
Hello! I working at a custom weapon called Laser Fist and i have a problem.

Full Code:
Code:

#include <amxmodx>
#include <fakemeta_util>
#include <hamsandwich>

// ~ [ Optimization ] ~ //
#define Get_WpnMode(%0) get_pdata_int(%0, m_iWeaponState, 4)
#define Set_WpnMode(%0,%1) set_pdata_int(%0, m_iWeaponState, %1, 4)
#define CustomItem(%1) get_bit(gl_iBitCustomItem, %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))

// ~ [ Resources ] ~ //
new const WEAPON_VIEW_MODEL[] = "models/v_laserfist.mdl";
new const WEAPON_PLAYER_MODEL[] = "models/p_laserfist.mdl";
new const BLUELASER_SPRITE[] = "sprites/ef_laserfist_laserbeam.spr";       
new const WEAPON_SHOOT_SOUND[] = "weapons/laserfist_shoota-1.wav";
new const WEAPON_VIEW_MODEL2[] = "models/v_laserfist2.mdl";

// ~ [ Weapon Settings ] ~ //
#define WEAPON_CSW CSW_M249
new const WEAPON_REFERENCE[] = "weapon_m249";

const WEAPON_MAX_AMMO = 100;
const WEAPON_MAX_BPAMMO = 500;

#define MAX_SHOTS_BMODE 5

// ~ [ Primary Fire Mode ] ~ //
const Float: WEAPON_RATE = 0.01;
const Float: WEAPON_PUNCHANGLE = 0.0;

// ~ [ Weapon Animations ] ~ //
#define WEAPON_ANIM_DRAW_TIME 51/30.0
#define WEAPON_ANIM_IDLE_TIME 141/30.0
#define WEAPON_ANIM_RELOAD_TIME 81/30.0
#define WEAPON_ANIM_SHOOT_TIME 21/60.0
#define WEAPON_ANIM_SHOOT_END_TIME 31/30.0
#define WEAPON_ANIM_CHARGE_START_TIME 39/30.0
#define WEAPON_ANIM_CHARGE_IDLE_TIME 31/30.0
#define WEAPON_ANIM_CHARGE_END_TIME 50/30.0

#define WEAPON_ANIM_DRAW 9
#define WEAPON_ANIM_IDLE 0
#define WEAPON_ANIM_RELOAD 8
#define WEAPON_ANIM_SHOOT 3
#define WEAPON_ANIM_SHOOT_END 4
#define WEAPON_ANIM_CHARGE_START 5
#define WEAPON_ANIM_CHARGE_IDLE 6
#define WEAPON_ANIM_CHARGE_END 7

// ~ [ Offsets ] ~ //
#define linux_diff_player 5
#define linux_diff_weapon 4
#define m_pNext 42
#define m_rgAmmo 376
#define m_flTimeWeaponIdle 48
#define m_flNextPrimaryAttack 46
#define m_rpgPlayerItems 367
#define m_iPrimaryAmmoType 49
#define m_iClip 51
#define m_iWeaponState 74
#define m_fInReload 54
#define m_pPlayer 41
#define m_pActiveItem 373
#define m_iId 43
#define m_flNextAttack 83
#define GetFlameCount(%0) get_pdata_int(%0, m_iFlameCount, 4) // Arabas
#define m_iFlameCount m_iGlock18ShotsFired
#define m_iGlock18ShotsFired 70

// ~ [ Params ] ~ //
new gl_iBitCustomItem,
    gl_iAllocString_ViewModel,
    gl_iAllocString_PlayerModel,
        gl_iszAllocString_ViewModel2,
        gl_iszModelIndex_Trail

// ~ [ AMX Mod X ] ~ //
public plugin_init()
{
    register_plugin("[CSO] Laser Fist", "1.0", "Cristian505 \ Batcoh: Code Base");

        // Forwards
        register_forward(FM_UpdateClientData, "FM_Hook_UpdateClientData_Post", true);

    // Weapon
        RegisterHam(Ham_Weapon_Reload, WEAPON_REFERENCE, "CWeapon__Reload_Pre", false);
        RegisterHam(Ham_Item_PostFrame, WEAPON_REFERENCE, "CWeapon__PostFrame_Pre", false);
        RegisterHam(Ham_Item_Deploy, WEAPON_REFERENCE, "CWeapon__Deploy_Post", true);
        RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_REFERENCE, "CWeapon__PrimaryAttack_Pre", false);
        RegisterHam(Ham_Item_Holster, WEAPON_REFERENCE,        "CWeapon__Holster_Post", true);
        RegisterHam(Ham_Weapon_WeaponIdle, WEAPON_REFERENCE, "CWeapon__WeaponIdle_Pre", false);
        RegisterHam(Ham_Weapon_SecondaryAttack, WEAPON_REFERENCE, "CWeapon__SecondaryAttack_Pre", false);

    // Alloc String
    gl_iAllocString_ViewModel = engfunc(EngFunc_AllocString, WEAPON_VIEW_MODEL);
    gl_iAllocString_PlayerModel = engfunc(EngFunc_AllocString, WEAPON_PLAYER_MODEL);
        gl_iszAllocString_ViewModel2 = engfunc(EngFunc_AllocString, WEAPON_VIEW_MODEL2);

    register_clcmd("say /lf", "Give_LaserFist");
}

public plugin_precache()
{
    // Precache Models
    engfunc(EngFunc_PrecacheModel, WEAPON_VIEW_MODEL);
    engfunc(EngFunc_PrecacheModel, WEAPON_PLAYER_MODEL);
        engfunc(EngFunc_PrecacheModel, WEAPON_VIEW_MODEL2);

        // Precache Sprites
        gl_iszModelIndex_Trail = precache_model(BLUELASER_SPRITE);

        // Precache Sounds
        precache_sound(WEAPON_SHOOT_SOUND);
}

public client_disconnect(id)
{
        reset_bit(gl_iBitCustomItem, id);
}

public Give_LaserFist(iPlayer)
{
    set_bit(gl_iBitCustomItem, iPlayer);
    UTIL_DropWeapon(iPlayer, 1);
    UTIL_GiveNamedItem(iPlayer, WEAPON_REFERENCE);
        static Ent; Ent = fm_get_user_weapon_entity(iPlayer, WEAPON_CSW);
        if(pev_valid(Ent)) set_pdata_int(Ent, m_iClip, WEAPON_MAX_AMMO, 4);
        new iAmmoType = m_rgAmmo + get_pdata_int(Ent, m_iPrimaryAmmoType, linux_diff_weapon);
        if(get_pdata_int(iPlayer, m_rgAmmo, linux_diff_player) < WEAPON_MAX_BPAMMO)
        set_pdata_int(iPlayer, iAmmoType, WEAPON_MAX_BPAMMO, linux_diff_player);
        set_pdata_int(Ent, m_iFlameCount, 0, 4);
        Set_WpnMode(Ent, 1);
        emit_sound(iPlayer, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}

// ~ [ Hamsandwich ] ~ //
public CWeapon__Holster_Post(iItem)
{
        static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
        if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return;
       
        set_pdata_float(iItem, m_flTimeWeaponIdle, 0.0, linux_diff_weapon);
        set_pdata_float(iPlayer, m_flNextAttack, 0.0, linux_diff_player);

        Set_WpnMode(iItem, 1);
}

public CWeapon__Deploy_Post(iItem)
{
    static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
    if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return;
   
        if(GetFlameCount(iItem) > MAX_SHOTS_BMODE) set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ViewModel2);
        else set_pev_string(iPlayer, pev_viewmodel2, gl_iAllocString_ViewModel);
       
        set_pev_string(iPlayer, pev_weaponmodel2, gl_iAllocString_PlayerModel);

    UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_DRAW);

        Set_WpnMode(iItem, 1);

        set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_DRAW_TIME, linux_diff_player);
        set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_DRAW_TIME, linux_diff_weapon);
}

public CWeapon__SecondaryAttack_Pre(iItem)
{
        static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
        if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return HAM_IGNORED;

    if(GetFlameCount(iItem) > MAX_SHOTS_BMODE)
    switch(Get_WpnMode(iItem))
        {
                case 1:
                {
                                                UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_CHARGE_START);

                        set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_CHARGE_START_TIME, linux_diff_player);
                        set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_CHARGE_START_TIME, linux_diff_weapon);

                        Set_WpnMode(iItem, 2);
                }
                case 2:
                {
                                                UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_CHARGE_IDLE);

                        set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_CHARGE_IDLE_TIME, linux_diff_player);
                        set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_CHARGE_IDLE_TIME, linux_diff_weapon);
                }
        }

        return HAM_SUPERCEDE;
}

public CWeapon__PostFrame_Pre(iItem)
{
        static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
        if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return HAM_IGNORED;

        static iClip; iClip = get_pdata_int(iItem, m_iClip, linux_diff_weapon);
    static flHoldTime; pev(iItem, pev_fuser1, flHoldTime);
    static iButton; iButton = pev(iPlayer, pev_button);

    if(!(iButton & IN_ATTACK2) && Get_WpnMode(iItem) == 2)
    {
                        UTIL_SendWeaponAnim(iItem, WEAPON_ANIM_CHARGE_END);

                        set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_CHARGE_END_TIME, linux_diff_player);
                        set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_CHARGE_END_TIME, linux_diff_weapon);
        }

    if(iButton & IN_ATTACK2)
        {
                ExecuteHamB(Ham_Weapon_SecondaryAttack, iItem);

                iButton &= ~IN_ATTACK2;
                set_pev(iPlayer, pev_button, iButton);
        }

    if(iButton & IN_ATTACK) set_pev(iItem, pev_fuser1, flHoldTime + 0.1);
    if(flHoldTime > 0.01)
    if(!(iButton & IN_ATTACK))
    {
                UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_SHOOT_END);
               
                set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_SHOOT_END_TIME, linux_diff_weapon);
                set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_SHOOT_END_TIME, linux_diff_player);

                set_pev(iItem, pev_fuser1, 0.0);
        }

        if(get_pdata_int(iItem, m_fInReload, linux_diff_weapon) == 1)
        {
                static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, linux_diff_weapon);
                static iAmmo; iAmmo = get_pdata_int(iPlayer, iAmmoType, linux_diff_player);
                static j; j = min(WEAPON_MAX_AMMO - iClip, iAmmo);

                set_pdata_int(iItem, m_iClip, iClip + j, linux_diff_weapon);
                set_pdata_int(iPlayer, iAmmoType, iAmmo - j, linux_diff_player);
                set_pdata_int(iItem, m_fInReload, 0, linux_diff_weapon);
        }

        return HAM_IGNORED;
}

public CWeapon__PrimaryAttack_Pre(iItem)
{
        static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
        if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return HAM_IGNORED;

        static iClip; iClip = get_pdata_int(iItem, m_iClip, linux_diff_weapon);
        if(!iClip)
        {
                ExecuteHam(Ham_Weapon_PlayEmptySound, iItem);
                set_pdata_float(iItem, m_flNextPrimaryAttack, 0.2, linux_diff_weapon);

                return HAM_SUPERCEDE;
        }

        ExecuteHam(Ham_Weapon_PrimaryAttack, iItem);

        static Float: vecPunchangle[3];
        pev(iPlayer, pev_punchangle, vecPunchangle);
        vecPunchangle[0] *= WEAPON_PUNCHANGLE
        vecPunchangle[1] *= WEAPON_PUNCHANGLE
        vecPunchangle[2] *= WEAPON_PUNCHANGLE
        set_pev(iPlayer, pev_punchangle, vecPunchangle);
       
        static Float: iEndOrigin[3]; fm_get_aim_origin(iPlayer, iEndOrigin);
       
        // index, attachment, endpos, modelindex, width, red, green, blue
        UTIL_CreateBeamEntPoint(iPlayer, 0x1000, iEndOrigin, gl_iszModelIndex_Trail, 50, 0, 100, 255);
        UTIL_CreateBeamEntPoint(iPlayer, 0x2000, iEndOrigin, gl_iszModelIndex_Trail, 50, 0, 100, 255);
       
        emit_sound(iPlayer, CHAN_WEAPON, WEAPON_SHOOT_SOUND, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

        set_pdata_int(iItem, m_iFlameCount, GetFlameCount(iItem) + 1, 4);

        if(GetFlameCount(iItem) == MAX_SHOTS_BMODE)
        set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ViewModel2);

        UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_SHOOT);

        set_pdata_float(iPlayer, m_flNextAttack, WEAPON_RATE, linux_diff_player);
        set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_SHOOT_TIME, linux_diff_weapon);

        return HAM_SUPERCEDE;
}

public CWeapon__Reload_Pre(iItem)
{
        static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
        if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return HAM_IGNORED;

        static iClip; iClip = get_pdata_int(iItem, m_iClip, linux_diff_weapon);
        if(iClip >= WEAPON_MAX_AMMO) return HAM_SUPERCEDE;
       
        static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, linux_diff_weapon);
        if(get_pdata_int(iPlayer, iAmmoType, linux_diff_player) <= 0) return HAM_SUPERCEDE;

        set_pdata_int(iItem, m_iClip, 0, linux_diff_weapon);
        ExecuteHam(Ham_Weapon_Reload, iItem);
        set_pdata_int(iItem, m_iClip, iClip, linux_diff_weapon);
        set_pdata_int(iItem, m_fInReload, 1, linux_diff_weapon);

        UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_RELOAD);

        Set_WpnMode(iItem, 1);

        set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_RELOAD_TIME, linux_diff_weapon);
        set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_RELOAD_TIME, linux_diff_player);

        return HAM_SUPERCEDE;
}

public CWeapon__WeaponIdle_Pre(iItem)
{
        static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);

        if(pev_valid(iItem) != 2 || !CustomItem(iPlayer) || get_pdata_float(iItem, m_flTimeWeaponIdle, linux_diff_weapon) > 0.0) return HAM_IGNORED;
       
        UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_IDLE);
        set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_IDLE_TIME, linux_diff_weapon);

        return HAM_SUPERCEDE;
}

/* ~ [ Fakemeta ] ~ */
public FM_Hook_UpdateClientData_Post(iPlayer, SendWeapons, CD_Handle)
{
        if(!is_user_alive(iPlayer)) return;
        if(get_user_weapon(iPlayer) != WEAPON_CSW) return;
        static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, linux_diff_player);
        if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return;

        set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001);
}

// ~ [ Stocks ] ~ //
stock UTIL_SendWeaponAnim(iPlayer, iAnim)
{
        set_pev(iPlayer, pev_weaponanim, iAnim);

        message_begin(MSG_ONE, SVC_WEAPONANIM, _, iPlayer);
        write_byte(iAnim);
        write_byte(0);
        message_end();
}

stock UTIL_GiveNamedItem(iPlayer, const szItem[])
{
        new iEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, szItem));
        if(!pev_valid(iEntity)) return 0;
       
        ExecuteHam(Ham_Spawn, iEntity);
        if(!ExecuteHamB(Ham_AddPlayerItem, iPlayer, iEntity))
        {
                set_pev(iEntity, pev_flags, pev(iEntity, pev_flags) | FL_KILLME);
                return 0;
        }

        ExecuteHamB(Ham_Item_AttachToPlayer, iEntity, iPlayer);
       
        return iEntity;
}

stock UTIL_DropWeapon(iPlayer, iSlot)
{
        static iEntity, iNext, szWeaponName[32];
        iEntity = get_pdata_cbase(iPlayer, m_rpgPlayerItems + iSlot, linux_diff_player);

        if(iEntity > 0)
        {     
                do
                {
                        iNext = get_pdata_cbase(iEntity, m_pNext, linux_diff_weapon);

                        if(get_weaponname(get_pdata_int(iEntity, m_iId, linux_diff_weapon), szWeaponName, charsmax(szWeaponName)))
                                engclient_cmd(iPlayer, "drop", szWeaponName);
                }
               
                while((iEntity = iNext) > 0);
        }
}

stock UTIL_CreateBeamEntPoint(iPlayer, iAttachment, Float: flOrigin[3], iszModelIndex, iWidth, iRed, iGreen, iBlue) // xUnicorn
{
        message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
        write_byte(TE_BEAMENTPOINT);
        write_short(iPlayer | iAttachment);
        engfunc(EngFunc_WriteCoord, flOrigin[0]);
        engfunc(EngFunc_WriteCoord, flOrigin[1]);
        engfunc(EngFunc_WriteCoord, flOrigin[2]);
        write_short(iszModelIndex) // Model index
        write_byte(0); // Framestart
        write_byte(0); // Framerate
        write_byte(1); // Life
        write_byte(iWidth * 4); // Width
        write_byte(1); // Noise
        write_byte(iRed); // Red
        write_byte(iGreen); // Green
        write_byte(iBlue); // Blue
        write_byte(255); // Alpha
        write_byte(100); // Speed
        message_end();
}

Crasher Code:
Code:

public CWeapon__PostFrame_Pre(iItem)
{
        static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
        if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return HAM_IGNORED;

        static iClip; iClip = get_pdata_int(iItem, m_iClip, linux_diff_weapon);
    static flHoldTime; pev(iItem, pev_fuser1, flHoldTime);
    static iButton; iButton = pev(iPlayer, pev_button);

    if(!(iButton & IN_ATTACK2) && Get_WpnMode(iItem) == 2) // Crasher Code
    {
                        UTIL_SendWeaponAnim(iItem, WEAPON_ANIM_CHARGE_END);

                        set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_CHARGE_END_TIME, linux_diff_player);
                        set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_CHARGE_END_TIME, linux_diff_weapon);
        }

    if(iButton & IN_ATTACK2)
        {
                ExecuteHamB(Ham_Weapon_SecondaryAttack, iItem);

                iButton &= ~IN_ATTACK2;
                set_pev(iPlayer, pev_button, iButton);
        }

    if(iButton & IN_ATTACK) set_pev(iItem, pev_fuser1, flHoldTime + 0.1);
    if(flHoldTime > 0.01)
    if(!(iButton & IN_ATTACK))
    {
                UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_SHOOT_END);
               
                set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_SHOOT_END_TIME, linux_diff_weapon);
                set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_SHOOT_END_TIME, linux_diff_player);

                set_pev(iItem, pev_fuser1, 0.0);
        }

        if(get_pdata_int(iItem, m_fInReload, linux_diff_weapon) == 1)
        {
                static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, linux_diff_weapon);
                static iAmmo; iAmmo = get_pdata_int(iPlayer, iAmmoType, linux_diff_player);
                static j; j = min(WEAPON_MAX_AMMO - iClip, iAmmo);

                set_pdata_int(iItem, m_iClip, iClip + j, linux_diff_weapon);
                set_pdata_int(iPlayer, iAmmoType, iAmmo - j, linux_diff_player);
                set_pdata_int(iItem, m_fInReload, 0, linux_diff_weapon);
        }

        return HAM_IGNORED;
}

Error:
Code:

Host_Error: WriteDest_Parm: not a client
After using IN_ATTACK2 with charged mode the server crashes and sends that error.
Anyone know a fix?:(

Przeczytaj cały wpis

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...