AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Knife bug (https://forums.alliedmods.net/showthread.php?t=317881)

strangeguy 08-03-2019 04:56

Knife bug
 
Hello! (Zombie Plague Jetpack/Knife bug)
When I change from a gun to a melee weapon instead of a knife, appears to me (v_) jetpack model.
I need knife no (v_) jetpack model
Can anyone change for me this bug?



Code:

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
native zp_get_user_zombie(id)
native zp_register_extra_item(const name[], cost, teams)

new const ClassnameJetPack[] = "n4d_jetpack"
new const ClassnameRocket[] = "n4d_bazooka"
new const ModelVJetPack[] = "models/premium_zombie/v_jetpack_T.mdl"
new const ModelPJetPack[] = "models/premium_zombie/p_jetpack_T.mdl"
new const ModelWJetPack[] = "models/premium_zombie/w_jetpack_T.mdl"
new const ModelRocket[] = "models/rpgrocket.mdl"
new const SoundPickup[] = "items/gunpickup2.wav"
new const SoundShoot[] = "ls/at4-1.wav"
new const SoundTravel[] = "ls/bfuu.wav"
new const SoundFly[] = "ls/fly.wav"
new const SoundBlow[] = "ls/blow.wav"

new bool:bHasJetPack[33]
new Float:fJetpackFuel[33]
new Float:fLastShoot[33]
new SprExp, SprTrail, ItemJetPack, iAllocInfoTarget, iMaxClients, MsgSayText
new CvarMaxFuel, CvarRadius, CvarDamage, CvarSpeed, CvarCooldown, CvarRegen, CvarRocketSpeed, CvarCount
new Float:CMaxFuel, Float:CRadius, Float:CDamage, CSpeed, Float:CCooldown, Float:CRegen, CRocketSpeed, CCount
#define IsPlayer(%0) (1<=%0<=iMaxClients)
#define ZP_TEAM_HUMAN (1<<1)
#define ZP_PLUGIN_HANDLED 97
#define PevEntType pev_flSwimTime
#define EntTypeJetPack 3904
#define EntTypeRocket 9340

// Uncomment this to draw ring effect
#define DrawRing

// Uncomment this to draw flame effect
//#define DrawFlame

// Uncomment this to draw flame effect
#define DrawTrail

#if defined DrawTrail
#define TRAIL_LIFE                        1
#define TRAIL_WIDTH                  8
#define TRAIL_RED                      210
#define TRAIL_GREEN                  100
#define TRAIL_BLUE                0
#define TRAIL_BRIGTHNESS        200
#endif

#if defined DrawRing
new SprRing
#endif

#if defined DrawFlame
new SprFlame
#endif

public plugin_precache()
{
        precache_sound(SoundPickup)
        precache_sound(SoundShoot)
        precache_sound(SoundTravel)
        precache_sound(SoundFly)
        precache_sound(SoundBlow)

        SprExp = precache_model("sprites/zerogxplode.spr")
        SprTrail = precache_model("sprites/smoke.spr")

        #if defined DrawFlame
        SprFlame = precache_model("sprites/xfireball3.spr")
        #endif

        #if defined DrawRing
        SprRing = precache_model("sprites/shockwave.spr")
        #endif

        precache_model(ModelVJetPack)
        precache_model(ModelPJetPack)
        precache_model(ModelWJetPack)
        precache_model(ModelRocket)
}

public plugin_init()
{
        register_plugin("New Jetpack", "0.0.2", "Bad_Bud,ZmOutStanding,Connor,wbyokomo")

        register_event("HLTV", "OnNewRound", "a", "1=0", "2=0")
        register_logevent("OnRoundEnd", 2, "1=Round_End")

        RegisterHam(Ham_Killed, "player", "OnPlayerKilled")
        RegisterHam(Ham_Player_Jump, "player", "OnPlayerJump")
        RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "OnKnifeSecAtkPost", 1)
        //RegisterHam(Ham_Item_Deploy, "weapon_knife", "OnKnifeDeployPost", 1)
        register_event("CurWeapon", "check_models", "be")

        register_forward(FM_PlayerPreThink, "OnPlayerPreThink")
        register_forward(FM_Touch, "OnTouch")

        CvarMaxFuel = register_cvar("jp_maxfuel", "250.0")
        CvarRadius = register_cvar("jp_radius", "250.0")
        CvarDamage = register_cvar("jp_damage", "800.0")
        CvarSpeed = register_cvar("jp_speed", "300")
        CvarCooldown = register_cvar("jp_cooldown", "10.0")
        CvarRegen = register_cvar("jp_regen", "0.5")
        CvarRocketSpeed = register_cvar("jp_rocket_speed", "1500")
        CvarCount = register_cvar("jp_count", "3")

        iMaxClients = get_maxplayers()
        MsgSayText = get_user_msgid("SayText")
        ItemJetPack = zp_register_extra_item("Jetpack", 35, ZP_TEAM_HUMAN)

        register_clcmd("drop", "CmdDropJP")
}

public plugin_cfg()
{
        iAllocInfoTarget = engfunc(EngFunc_AllocString, "info_target")
}

public client_putinserver(id)
{
        ResetValues(id)
}

public client_disconnect(id)
{
        ResetValues(id)
}

public OnNewRound()
{
        RemoveAllJetPack()
        CMaxFuel = get_pcvar_float(CvarMaxFuel)
        CRadius = get_pcvar_float(CvarRadius)
        CDamage = get_pcvar_float(CvarDamage)
        CSpeed = get_pcvar_num(CvarSpeed)
        CCooldown = get_pcvar_float(CvarCooldown)
        CRegen = get_pcvar_float(CvarRegen)
        CRocketSpeed = get_pcvar_num(CvarRocketSpeed)
        CCount = get_pcvar_num(CvarCount)
}

public OnRoundEnd()
{
        RemoveAllJetPack()
}

public OnPlayerKilled(id)
{
        if(bHasJetPack[id]) DropJetPack(id);

        ResetValues(id)
}

public OnPlayerJump(id)
{
        if(bHasJetPack[id] && fJetpackFuel[id] > 0.0 && get_user_weapon(id) == CSW_KNIFE && pev(id, pev_button) & IN_DUCK && ~pev(id, pev_flags) & FL_ONGROUND)
        {
                static Float:vVelocity[3], Float:upSpeed
                pev(id, pev_velocity, vVelocity)
                upSpeed = vVelocity[2] + 35.0
                velocity_by_aim(id, CSpeed, vVelocity)
                vVelocity[2] = upSpeed > 300.0 ? 300.0 : upSpeed
                set_pev(id, pev_velocity, vVelocity)

                #if defined DrawFlame
                pev(id, pev_origin, vVelocity)
                engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vVelocity, 0)
                write_byte(TE_SPRITE)
                engfunc(EngFunc_WriteCoord, vVelocity[0])
                engfunc(EngFunc_WriteCoord, vVelocity[1])
                engfunc(EngFunc_WriteCoord, vVelocity[2])
                write_short(SprFlame)
                write_byte(8)
                write_byte(128)
                message_end()
                #endif

                #if defined DrawTrail
                message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
                write_byte (TE_BEAMFOLLOW)
                write_short (id)
                write_short (SprTrail)
                write_byte (TRAIL_LIFE)
                write_byte (TRAIL_WIDTH)
                write_byte (TRAIL_RED)
                write_byte (TRAIL_GREEN)
                write_byte (TRAIL_BLUE)
                write_byte (TRAIL_BRIGTHNESS)
                message_end()
                #endif

                fJetpackFuel[id] > 80.0 ? emit_sound(id, CHAN_STREAM, SoundFly, VOL_NORM, ATTN_NORM, 0,  PITCH_NORM) : emit_sound(id, CHAN_STREAM, SoundBlow, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
                fJetpackFuel[id] -= 1.0
        }
}

public zp_user_infected_pre(id)
{
        if(bHasJetPack[id]) DropJetPack(id);

        ResetValues(id)
}

public zp_extra_item_selected(id, item)
{
        if(item == ItemJetPack)
        {
                if(bHasJetPack[id])
                {
                        zp_colored_print(id, "^x04[ZP]^x01 You already have this item!")
                        return ZP_PLUGIN_HANDLED;
                }
                else if (jet_count() >= CCount)
                {
                        zp_colored_print(id, "^x04[ZP]^x01 Sorry, but maximum JetPack's reached!")
                        return ZP_PLUGIN_HANDLED;
                }
                else
                {
                        bHasJetPack[id] = true
                        //zp_colored_print(id, "^x04[ZP]^x01 JetPack usage:^x04 JUMP+DUCK^x01 -- fly |^x04 SECATTACK^x01 -- shoot rocket.")
                        engclient_cmd(id, "weapon_knife")
                        ReplaceModel(id)
                }
        }

        return PLUGIN_CONTINUE;
}

jet_count()
{
        new i, count = 0;
       
        for(i = 1; i < 33; i++)
        {
                if(bHasJetPack[i])
                {
                        count++;
                }
        }
        return count;
}

public OnKnifeSecAtkPost(ent2)
{
        if(pev_valid(ent2) == 2)
        {
                static id, Float:ctime
                id = get_pdata_cbase(ent2, 41, 4)
                ctime = get_gametime()
                if(is_user_alive(id) && bHasJetPack[id] && fLastShoot[id] < ctime)
                {
                        new ent = engfunc(EngFunc_CreateNamedEntity, iAllocInfoTarget)
                        if(ent)
                        {
                                engfunc(EngFunc_SetModel, ent, ModelRocket)
                                engfunc(EngFunc_SetSize, ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
                                new Float:fOrigin[3]
                                pev(id, pev_origin, fOrigin)
                                fOrigin[2] += 16.0
                                engfunc(EngFunc_SetOrigin, ent, fOrigin)
                                set_pev(ent, pev_classname, ClassnameRocket)
                                set_pev(ent, pev_dmg, 100.0)
                                set_pev(ent, pev_owner, id)
                                velocity_by_aim(id, CRocketSpeed, fOrigin)
                                set_pev(ent, pev_velocity, fOrigin)
                                new Float:vecAngles[3]
                                engfunc(EngFunc_VecToAngles, fOrigin, vecAngles)
                                set_pev(ent, pev_angles, vecAngles)
                                set_pev(ent, PevEntType, EntTypeRocket)       
                                set_pev(ent, pev_movetype, MOVETYPE_FLY)
                                set_pev(ent, pev_effects, EF_LIGHT)
                                set_pev(ent, pev_solid, SOLID_BBOX)

                                emit_sound(id, CHAN_STATIC, SoundShoot, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                                emit_sound(ent, CHAN_WEAPON, SoundTravel, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

                                message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
                                write_byte(TE_BEAMFOLLOW)
                                write_short(ent)
                                write_short(SprTrail)
                                write_byte(40)
                                write_byte(5)
                                write_byte(224)
                                write_byte(224)
                                write_byte(255)
                                write_byte(192)
                                message_end()

                                //set_pdata_float(ent2, 46, CCooldown, 4)
                                //set_pdata_float(ent2, 47, CCooldown, 4)
                                //set_pdata_float(ent2, 48, CCooldown, 4)
                                set_pdata_float(id, 83, CCooldown, 5)
                                fLastShoot[id] = ctime+CCooldown
                        }
                        else
                        {
                                client_print(id, print_chat, "[JpDebug] Failed to create rocket!")
                                fLastShoot[id] = ctime+1.5
                        }
                }
        }
}

public check_models(id)
{
        if (zp_get_user_zombie(id))
        {
                return FMRES_IGNORED
        }
        if(bHasJetPack[id])
        {
                new clip,ammo
                new wpnid = get_user_weapon(id,clip,ammo)
               
                if ( wpnid == CSW_KNIFE )
                {
                        ReplaceModel(id)
                }
                return PLUGIN_CONTINUE
        }
        return PLUGIN_CONTINUE
}

/*
public OnKnifeDeployPost(ent)
{
        if(pev_valid(ent) == 2)
        {
        static id; id = get_pdata_cbase(ent, 41, 4)
        //if(is_user_alive(id) && bHasJetPack[id]) ReplaceModel(id);
        if(!is_user_alive(id)) return;
        //if(bHasJetPack[id]) ReplaceModel(id);
        if(bHasJetPack[id])
        {
                new clip,ammo
                new wpnid = get_user_weapon(id,clip,ammo)
               
                if ( wpnid == CSW_KNIFE )
                {
                ReplaceModel(id)
                }
        }
        }
}
*/

public OnPlayerPreThink(id)
{
        if(bHasJetPack[id] && fJetpackFuel[id] < CMaxFuel)
        {
                static button; button = pev(id, pev_button)
                if(!(button & IN_DUCK) && !(button & IN_JUMP)) fJetpackFuel[id] += CRegen;
        }
}

public OnTouch(ent, id)
{
        if(pev_valid(ent))
        {
                if(pev(ent, PevEntType) == EntTypeJetPack)
                {
                        if(IsPlayer(id) && is_user_alive(id) && !zp_get_user_zombie(id) && !bHasJetPack[id])
                        {
                                engfunc(EngFunc_RemoveEntity, ent)
                                bHasJetPack[id] = true
                                emit_sound(id, CHAN_STATIC, SoundPickup, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                                engclient_cmd(id,"weapon_knife")
                                ReplaceModel(id)
                        }
                }
                else if(pev(ent, PevEntType) == EntTypeRocket)
                {
                        static Float:fOrigin[3]
                        pev(ent, pev_origin, fOrigin)

                        engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
                        write_byte(TE_EXPLOSION)
                        engfunc(EngFunc_WriteCoord, fOrigin[0])
                        engfunc(EngFunc_WriteCoord, fOrigin[1])
                        engfunc(EngFunc_WriteCoord, fOrigin[2])
                        write_short(SprExp)
                        write_byte(40)
                        write_byte(30)
                        write_byte(10)
                        message_end()

                        #if defined DrawRing
                        engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
                        write_byte(TE_BEAMCYLINDER)
                        engfunc(EngFunc_WriteCoord, fOrigin[0])
                        engfunc(EngFunc_WriteCoord, fOrigin[1])
                        engfunc(EngFunc_WriteCoord, fOrigin[2])
                        engfunc(EngFunc_WriteCoord, fOrigin[0])
                        engfunc(EngFunc_WriteCoord, fOrigin[1])
                        engfunc(EngFunc_WriteCoord, fOrigin[2]+555.0)
                        write_short(SprRing)
                        write_byte(0)
                        write_byte(1)
                        write_byte(6)
                        write_byte(8)
                        write_byte(10)
                        write_byte(224)
                        write_byte(224)
                        write_byte(255)
                        write_byte(192)
                        write_byte(5)
                        message_end()
                        #endif

                        static attacker; attacker = pev(ent, pev_owner)
                        if(!is_user_connected(attacker))
                        {
                                engfunc(EngFunc_RemoveEntity, ent)
                                return FMRES_IGNORED;
                        }

                        if(pev_valid(id) && !is_user_connected(id))
                        {
                                static szClassname[32]
                                pev(id, pev_classname, szClassname, 31)
                                if(equal(szClassname, "func_breakable") && (pev(id, pev_solid) != SOLID_NOT))
                                {
                                        dllfunc(DLLFunc_Use, id, ent)
                                }
                        }

                        static victim; victim = -1
                        while((victim = engfunc(EngFunc_FindEntityInSphere, victim, fOrigin, CRadius)) != 0)
                        {
                                if(is_user_alive(victim) && zp_get_user_zombie(victim))
                                {
                                        static Float:originV[3], Float:dist, Float:damage
                                        pev(victim, pev_origin, originV)
                                        dist = get_distance_f(fOrigin, originV)
                                        damage = CDamage-(CDamage/CRadius)*dist
                                        if(damage > 0.0)
                                        {
                                                ExecuteHamB(Ham_TakeDamage, victim, ent, attacker, damage, DMG_BULLET)
                                                // client_print(attacker, print_chat, "[JpDebug] Rocket damage: %.1f", damage)
                                        }
                                }
                        }

                        engfunc(EngFunc_RemoveEntity, ent)
                }
        }

        return FMRES_IGNORED;
}

public CmdDropJP(id)
{
        if(is_user_alive(id) && bHasJetPack[id] && get_user_weapon(id) == CSW_KNIFE)
        {
                DropJetPack(id)
                ResetValues(id)
                set_pev(id, pev_viewmodel2, "models/v_knife.mdl")
                set_pev(id, pev_weaponmodel2, "models/p_knife.mdl")
                return PLUGIN_HANDLED;
        }

        return PLUGIN_CONTINUE;
}

ReplaceModel(id)
{
        set_pev(id, pev_viewmodel2, ModelVJetPack)
        set_pev(id, pev_weaponmodel2, ModelPJetPack)
}

DropJetPack(id)
{
        new Float:fAim[3], Float:fOrigin[3]
        velocity_by_aim(id, 64, fAim)
        pev(id, pev_origin, fOrigin)
        fOrigin[0] += fAim[0]
        fOrigin[1] += fAim[1]

        new ent = engfunc(EngFunc_CreateNamedEntity, iAllocInfoTarget)
        if(ent)
        {
                engfunc(EngFunc_SetModel, ent, ModelWJetPack)
                engfunc(EngFunc_SetSize, ent, Float:{-4.0,-4.0,-4.0}, Float:{4.0,4.0,4.0})
                engfunc(EngFunc_SetOrigin, ent, fOrigin)
                set_pev(ent, pev_classname, ClassnameJetPack)
                set_pev(ent, pev_dmg, 100.0)
                set_pev(ent, PevEntType, EntTypeJetPack)
                set_pev(ent, pev_movetype, MOVETYPE_TOSS)
                set_pev(ent, pev_solid, SOLID_TRIGGER)
        }
}

RemoveAllJetPack()
{
        new ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
        while(ent > 0)
        {
                engfunc(EngFunc_RemoveEntity, ent)
                ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
        }
}

ResetValues(id)
{
        bHasJetPack[id] = false
        fJetpackFuel[id] = get_pcvar_float(CvarMaxFuel)
}

zp_colored_print(target, const message[], any:...)
{
        static buffer[512], i, argscount
        argscount = numargs()

        if (!target)
        {
                static iPlayers[32], iNum, j, player
                get_players(iPlayers, iNum, "ch")
                for (j = 0; j < iNum; j++)
                {
                        player = iPlayers[j]
                        static changed[5], changedcount
                        changedcount = 0

                        for (i = 2; i < argscount; i++)
                        {
                                if (getarg(i) == LANG_PLAYER)
                                {
                                        setarg(i, 0, player)
                                        changed[changedcount] = i
                                        changedcount++
                                }
                        }

                        vformat(buffer, charsmax(buffer), message, 3)
                        message_begin(MSG_ONE_UNRELIABLE, MsgSayText, _, player)
                        write_byte(player)
                        write_string(buffer)
                        message_end()

                        for (i = 0; i < changedcount; i++) setarg(changed[i], 0, LANG_PLAYER);
                }
        }
        else
        {
                vformat(buffer, charsmax(buffer), message, 3)
                message_begin(MSG_ONE, MsgSayText, _, target)
                write_byte(target)
                write_string(buffer)
                message_end()
        }
}



All times are GMT -4. The time now is 17:29.

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