AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Entities velocity query (https://forums.alliedmods.net/showthread.php?t=117212)

Max! 01-30-2010 05:06

Entities velocity query
 
Im trying to make it so i can shoot a grenade from my grenade launcher, but when i look straight up or down, the grenade shoots at an angle and not where I look. Here is the code:

I dont think im creating the entity correctly.
PHP Code:

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>
#include <cstrike>

#define PLUGIN "Weapons Menu"
#define VERSION "1.0"
#define AUTHOR "Max!"

#define MAXDAMAGE 0.0
#define EXPLODERADIUS 100.0

#define MAXWEAPONS 3

#define SHOTDELAY 0.5

#define GRENADE 3695

new g_WeaponType[MAXWEAPONS]
new 
Float:g_shotdelay[33]
new 
explosionrocketsmoke
static const g_rocketmodel[32] = "models/rpgrocket.mdl"


public plugin_precache()
{
    
precache_model(g_rocketmodel)
    
explosion precache_model("sprites/zerogxplode.spr")
    
rocketsmoke precache_model("sprites/smoke.spr")
}

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
register_event("CurWeapon""Event_CurWeapon""be")
    
register_forward(FM_PlayerPreThink"Forward_PreThink"1)
    
register_forward(FM_UpdateClientData"UpdateClientData_Post"1)
    
register_forward(FM_Touch"Forward_Touch")
}

public 
Event_CurWeapon(id)
{
    
}

public 
UpdateClientData_Postidsendweaponscd_handle )
{
    if (!
is_user_alive(id))
        return 
FMRES_IGNORED
        
    set_cd
(cd_handleCD_ID0)  
    return 
FMRES_HANDLED
}

public 
Forward_PreThink(id)
{
    if(
g_shotdelay[id] <= get_gametime())
    {
        if(
pev(idpev_button) & IN_ATTACK)
        {
            new 
Float:origin[3]
            
pev(idpev_originorigin)
            
            
origin[2] += 15
            
            
new Float:vAngles[3]
            new 
Float:vReturn[3]
            new 
Float:fDistance 1200.0
            
new Float:Angle[3]
            
entity_get_vector(id,EV_VEC_v_angle,vAngles)
            
vReturn[0] = floatcosvAngles[1], degrees ) * fDistance
            vReturn
[1] = floatsinvAngles[1], degrees ) * fDistance
            vReturn
[2] = floatsin( -vAngles[0], degrees ) * fDistance
            
            
new ent engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_target"))
            
engfunc(EngFunc_SetOriginentorigin)
            
set_pev(entpev_movetypeMOVETYPE_BOUNCE)
            
pev(idpev_anglesAngle)
            
set_pev(entpev_anglesAngle)
            
engfunc(EngFunc_SetSizeentFloat:{-3.0, -3.0, -3.0}, Float:{3.03.03.0})
            
engfunc(EngFunc_SetModelentg_rocketmodel)
            
            
set_pev(entpev_gravity0.3)
             
            
set_pev(entpev_iuser3GRENADE)
            
            
set_pev(entpev_velocityvReturn)
            
            
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
            
write_byte(22)
            
write_short(ent)
            
write_short(rocketsmoke)
            
write_byte(3)
            
write_byte(3)
            
write_byte(255)
            
write_byte(255)
            
write_byte(255)
            
write_byte(255)
            
message_end()
            
            
g_shotdelay[id] = get_gametime() + SHOTDELAY
        
}
        
set_pev(idpev_buttonpev(id,pev_button) & ~IN_ATTACK )
    }
    else
    {
        
set_pev(idpev_buttonpev(id,pev_button) & ~IN_ATTACK )
    }
}

public 
Forward_Touch(touchertouched)
{
    if(
pev(touchedpev_iuser3) == GRENADE)
    {
        
Explosion(touched)
    }
}

public 
Explosion(grenade)
{
    new 
ent = -1
    
new Float:grenadeorigin[3]
    
pev(grenadepev_origingrenadeorigin)
    
    while((
ent engfuncEngFunc_FindEntityInSphereentgrenadeoriginEXPLODERADIUS)) != 0)
    {
        if(
is_user_alive(ent))
        {
            new 
Float:origin[3]
            
pev(entpev_originorigin)
            
            new 
Float:damage MAXDAMAGE * (floatabs((EXPLODERADIUS get_distance_f(grenadeoriginorigin)) / EXPLODERADIUS))
            
fakedamage(ent"weapon_hegrenade"damageDMG_BLAST)
            
            
Bounce(entgrenade)
        }
    }
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)  // Explosion
    
write_byte(TE_EXPLOSION)
    
write_coord(floatround(grenadeorigin[0]))
    
write_coord(floatround(grenadeorigin[1]))
    
write_coord(floatround(grenadeorigin[2])+5)
    
write_short(explosion)
    
write_byte(20)
    
write_byte(12// framerate
    
write_byte(TE_EXPLFLAG_NONE)
    
message_end()
    
    
engfunc(EngFunc_RemoveEntitygrenade)
}

Bounce(idexplosion)
{
    new 
Float:distanceFloat:origin[3], Float:origin2[3]
    
pev(idpev_originorigin)
    
pev(explosionpev_originorigin2)
    
distance get_distance_f(originorigin2) * 5
    
    
new Float:vReturn[3]
    
    new 
Float:Angle1[3]
    new 
Float:Angle2[3]
    new 
Float:Return[3]
    
    
entity_get_vector(id,EV_VEC_v_angleAngle1)
    
entity_get_vector(explosion,EV_VEC_v_angleAngle2)
    
    Return[
0] = (Angle2[0] - Angle1[0])
    Return[
1] = (Angle2[1] - Angle1[1])
    
    
vReturn[0] = floatcos(Return[1] + 180degrees) * distance
    vReturn
[1] = floatsin(Return[1], degrees) * distance
    vReturn
[2] = floatsin(-Return[0], degrees) * distance
    
    
//new Float:damage = MAXDAMAGE * (floatabs((EXPLODERADIUS - get_distance_f(grenadeorigin, origin)) / EXPLODERADIUS))
    
    
set_pev(idpev_velocityvReturn)



Arkshine 01-30-2010 09:32

Re: Entities velocity query
 
Try to retrieve here : pev(id, pev_angles, Angle) ; pev_v_angle instead.

Max! 01-30-2010 14:36

Re: Entities velocity query
 
the Angle variable changes the direction the rocket is facing, not the direction the rocket is moving. The problem still exists

edit: i think I fixed it, problem was movetype_bounce not being able to shoot straight up.


All times are GMT -4. The time now is 07:18.

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