Raised This Month: $ Target: $400
 0% 

Entities velocity query


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
Max!
Member
Join Date: Jun 2009
Old 01-30-2010 , 05:06   Entities velocity query
Reply With Quote #1

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)

Max! is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


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


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