AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Is the relationship between "pev_v_angle"and "pev_angles" is very special? (https://forums.alliedmods.net/showthread.php?t=278609)

ColtSky 02-04-2016 09:25

Is the relationship between "pev_v_angle"and "pev_angles" is very special?
 
I am writting a plugin about "Remote Control Airplane" and I met a problem about "pev_v_angle" and "pev_angles" :3
I set the view to the plane entity. Now I want to use my crosshair to control it, so I make its model angle(pev_angles) pace with my view angle(pev_v_angle).
I use the method below
Code:

(Ham_Think)
new Float:TargetOrigin[3], Float:VecOrigin[3], Float:VecAngles[3]

pev(pev(iEntity, pev_owner), pev_v_angle, VecAngles)
//VecAngles[0] *= -1.0
set_pev(iEntity, pev_angles, VecAngles)
engfunc(EngFunc_MakeVectors, VecAngles)

global_get(glb_v_forward, TargetOrigin)
xs_vec_mul_scalar(TargetOrigin, 150.0, VecOrigin)
set_pev(iEntity, pev_velocity, VecOrigin)

Then the problem came: As my mouse slide down, my view also slide down and the plane move down, but it just rotate the plane model upward !?:shock:
Just like this in other players' eyes
http://i13.tietuku.com/867aa51534ed7484.jpg
I know there is something difference between "pev_angles" and "pev_v_angle", so I try to add the code
Code:

VecAngles[0] *= -1.0
It works and... As my mouse slide down, it rotate the plane model downward now, but my view slide up and the plane also move up!!!:shock:
I also tried to set the "pev_v_angle" valve again after set the "pev_angles" value, but it didn't work any way.:cry:

Is the relationship between "pev_v_angle" and "pev_angles" is very special? Could you tell me how to code them in the right way? :)
I'm sorry for my broken English
Here is my full-sourcecode(not finished yet) :)
Code:

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <xs>

#define PLUGIN "miku"
#define VERSION "1.0"
#define AUTHOR "sky"

new g_explode, g_tail
new haveknife[33]

new const g_szMapConditions[][] =
{
        "func_bomb_target",               
        "info_bomb_target",               
        "func_hostage_rescue",       
        "func_escapezone",               
        "func_vip_safetyzone"        ,
        "hostage_entity"
}

public plugin_init()
{
        register_plugin(PLUGIN, VERSION, AUTHOR)
       
        RegisterHam(Ham_Item_AddToPlayer, "weapon_usp", "HAM_USPAddToPlayer_Post")
        RegisterHam(Ham_Item_AddToPlayer, "weapon_glock18", "HAM_GLOCKAddToPlayer_Post")
        RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "HAM_PrimaryAttack")
        RegisterHam(Ham_Item_Deploy, "weapon_knife", "HAM_Item_Deploy_Post", 1)
        RegisterHam(Ham_Think, "info_target", "fw_Think")
        register_forward(FM_Spawn, "fw_Spawn")
        register_forward(FM_Touch, "fw_Touch_Post", 1)
        register_event("CurWeapon", "CurrentWeapon", "be", "1=1")
        register_event("HLTV", "Event_Round_Start", "a", "1=0", "2=0")
        register_clcmd("buy", "ClientCommand_Buy")
        server_cmd("sv_restartround 1")
        register_message(get_user_msgid("StatusIcon"), "Message_StatusIcon")
}

public plugin_precache()
{
        precache_model("models/harry.mdl")
        precache_model("models/p_air.mdl")
        precache_model("models/v_air.mdl")
        g_tail = precache_model("sprites/white.spr")
        g_explode = precache_model("sprites/explode1.spr")
       
        new ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_map_parameters"))
        set_pdata_int(ent, 34, 3)
        dllfunc(DLLFunc_Spawn, ent)
       
        register_clcmd("weapon_gauss","weapon_hook")
}

public weapon_hook(id)
{
        engclient_cmd(id,"weapon_knife")
        return PLUGIN_HANDLED
}

public Event_Round_Start()
{
        new iEntity = -1
        while((iEntity = engfunc(EngFunc_FindEntityByString, iEntity, "classname", "airplane"))) engfunc(EngFunc_RemoveEntity, iEntity)
}

public HAM_USPAddToPlayer_Post(iWeapon, this)
        return HAM_SUPERCEDE

public HAM_GLOCKAddToPlayer_Post(iWeapon, this)
        return HAM_SUPERCEDE

public HAM_Item_Deploy_Post(iEntity)
{
        new id = get_pdata_cbase(iEntity, 41, 4)
       
        UTIL_PlayWeaponAnimation(id, 1)
        set_pdata_float(id, 83, 0.62, 5)
        set_pev(id, pev_viewmodel2, "models/v_air.mdl")
        set_pev(id, pev_weaponmodel2, "models/p_air.mdl")
}

public CurrentWeapon(id)
{
        if (!is_user_alive(id))
                return

        new iEntity = pev(id, pev_euser1)
        if (iEntity <= 0)
                return
       
        set_pev(id, pev_viewmodel2, "models/v_air.mdl")
        set_pev(id, pev_weaponmodel2, "models/p_air.mdl")
}

public HAM_PrimaryAttack(this)
{
        new iPlayer = get_pdata_cbase(this, 41, 4)
       
        new classname[32]
        pev(iPlayer, pev_classname, classname, 31)
       
        new Float:origin[3]//, Float:angles[3]
    //pev(iPlayer, pev_v_angle, angles)
    get_aim_origin_vector(iPlayer, 20.0, 0.0, 10.0, origin)
    new iEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
        set_pev(iPlayer, pev_euser1, iEntity)
    set_pev(iEntity, pev_classname, "airplane")
        set_pev(iEntity, pev_nextthink, get_gametime()+0.1)
    set_pev(iEntity, pev_solid, SOLID_TRIGGER)
    set_pev(iEntity, pev_movetype, MOVETYPE_TOSS)
    set_pev(iEntity, pev_owner, iPlayer)
    //set_pev(iEntity, pev_v_angle, angles)
    engfunc(EngFunc_SetModel, iEntity, "models/harry.mdl")
        set_pev(iEntity, pev_euser1, 1)
    set_pev(iEntity, pev_renderfx, kRenderFxGlowShell)
    set_pev(iEntity, pev_rendercolor, {255.0, 0.0, 0.0})
    set_pev(iEntity, pev_renderamt, 10.0)
    set_pev(iEntity, pev_rendermode, kRenderNormal)
    engfunc(EngFunc_SetSize, iEntity, {-1.0, -1.0, -1.0}, {1.0, 1.0, 1.0})
    engfunc(EngFunc_SetOrigin, iEntity, origin)

    /*new Float:start[3], Float:view_ofs[3], Float:end[3]
    pev(iPlayer, pev_origin, start)
    pev(iPlayer, pev_view_ofs, view_ofs)
    xs_vec_add(start, view_ofs, start)
   
    pev(iPlayer, pev_v_angle, end)
    engfunc(EngFunc_MakeVectors, end)
    global_get(glb_v_forward, end)
    xs_vec_mul_scalar(end, 8120.0, end)
    xs_vec_add(start, end, end)
    engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, iPlayer, 0)
    get_tr2(0, TR_vecEndPos, end)
   
    new Float:velocity[3]
    get_speed_vector(origin, end, 300.0, velocity)
    set_pev(iEntity, pev_velocity, velocity)*/
    new Float:fl_iNewVelocity[3]
        velocity_by_aim(iPlayer, 150, fl_iNewVelocity)
        set_pev(iEntity, pev_velocity, fl_iNewVelocity)
       
       
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    write_byte(TE_BEAMFOLLOW)
    write_short(iEntity)
    write_short(g_tail)
    write_byte(32)
    write_byte(4)
    write_byte(255)
    write_byte(0)
    write_byte(0)
    write_byte(255)
    message_end()
       
        fm_strip_user_weapons(iPlayer)
        haveknife[iPlayer] = 0
        engfunc(EngFunc_SetView, iPlayer, iEntity)
        return HAM_SUPERCEDE
}

public fw_Spawn(iEntity)
{
        static szClassName[32];
        pev(iEntity, pev_classname, szClassName, charsmax(szClassName));
        for(new i = 0; i < sizeof(g_szMapConditions); ++i)
        {
                if(equal(szClassName, g_szMapConditions[i]))
                {
                        engfunc(EngFunc_RemoveEntity, iEntity);
                        return FMRES_SUPERCEDE;
                }
        }
       
        return FMRES_IGNORED;
}

public fw_Think(iEntity)
{
    if(!pev_valid(iEntity))
                return HAM_IGNORED
   
    new classname[32]
    pev(iEntity, pev_classname, classname, charsmax(classname))
   
    if(strcmp(classname, "airplane"))
                return HAM_IGNORED
       
        if(pev(iEntity, pev_euser1)  != 1)
                return HAM_IGNORED
       
        new Float:TargetOrigin[3], Float:VecOrigin[3], Float:VecAngles[3]//, Float:FixAngles[3]
       
        pev(pev(iEntity, pev_owner), pev_v_angle, VecAngles)
        //VecAngles[0] *= -1.0
        set_pev(iEntity, pev_angles, VecAngles)
        pev(iEntity, pev_v_angle, FixAngles)
        //FixAngles[0] *= -1.0
        set_pev(pev(iEntity, pev_owner), pev_v_angle, FixAngles)
       
        engfunc(EngFunc_MakeVectors, VecAngles)
        global_get(glb_v_forward, TargetOrigin)
        xs_vec_mul_scalar(TargetOrigin, 150.0, VecOrigin)
        set_pev(iEntity, pev_velocity, VecOrigin)
       
        /*new owner = pev(iEntity, pev_owner)
        new Float:fl_iNewVelocity[3]
        velocity_by_aim(owner, 300, fl_iNewVelocity)
        set_pev(iEntity, pev_velocity, fl_iNewVelocity)*/
       
        set_pev(iEntity, pev_nextthink, get_gametime()+0.01)
        /*new Float:fVelocity[3], Float:fAngle[3]
        pev(iEntity, pev_velocity, fVelocity)
        vector_to_angle(fVelocity,fAngle)*/

    return HAM_IGNORED
}

public fw_Touch_Post(iEntity, iptr)
{
        if(!pev_valid(iEntity))
                return
        new classname[32];
        pev(iEntity, pev_classname, classname, 31);
        if(strcmp(classname, "airplane") )
                return
       
        new fvelocity
        pev(iEntity, pev_velocity, fvelocity)
       
        new Float:vecOrigin[3];
        pev(iEntity, pev_origin, vecOrigin);
               
        new classname_2[32];
        pev(iptr, pev_classname, classname_2, 31);
        if(!strcmp(classname_2, "worldspawn") )
        {
                set_task(0.1, "TASK_TOUCH", iEntity + 100)
                message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, pev(iEntity, pev_owner))
                write_short((1<<12)*1)
                write_short((1<<12)*1)
                write_short(0x0002)
                write_byte(0)
                write_byte(0)
                write_byte(0)
                write_byte(255)
                message_end()
        }
        else if(iptr <= 32 && haveknife[iptr] == 0 && is_user_alive(iptr) && pev(iEntity, pev_flags)&FL_ONGROUND  == 512)
        {
                haveknife[iptr] = 1
                fm_give_item(iptr, "weapon_knife")
                engfunc(EngFunc_RemoveEntity, iEntity)
                return
        }
}

public TASK_TOUCH(sbhl)
{
        new iEntity = sbhl - 100
        if(pev(iEntity, pev_flags)&FL_ONGROUND != 512)
                return
        new Float:vecOrigin[3];
        pev(iEntity, pev_origin, vecOrigin);
       
        new id = pev(iEntity, pev_owner)
        engfunc(EngFunc_SetView, id, id)

        message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
        write_byte(TE_EXPLOSION);
        engfunc(EngFunc_WriteCoord, vecOrigin[0]);
        engfunc(EngFunc_WriteCoord, vecOrigin[1]);
        engfunc(EngFunc_WriteCoord, vecOrigin[2]);
        write_short(g_explode);
        write_byte(25);
        write_byte(30);
        write_byte(0);
        message_end();
        set_pev(iEntity, pev_euser1, 2)
        new iVicim = -1
        while((iVicim = engfunc(EngFunc_FindEntityInSphere, iVicim, vecOrigin, 10)) > 0)
        {
                if (!pev_valid(iVicim))
                        continue
                if(iVicim == pev(iEntity, pev_owner))
                        continue
                if (pev(iVicim, pev_takedamage) == DAMAGE_NO)
                        continue
                if(get_user_team(iVicim) == get_user_team(pev(iEntity, pev_owner)))
                        continue
               
                new Ptdclassname[32]
                pev(iVicim, pev_classname, Ptdclassname, charsmax(Ptdclassname))
                if (!strcmp(Ptdclassname, "func_breakable")) dllfunc(DLLFunc_Use, iVicim, iEntity)
               
                ExecuteHam(Ham_TakeDamage, iVicim, iEntity,pev(iEntity, pev_owner), 15, DMG_CLUB)
        }
        return
}

stock get_speed_vector(const Float:origin1[3], const Float:origin2[3], Float:speed, Float:new_velocity[3])
{
    xs_vec_sub(origin2, origin1, new_velocity)
    new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
    xs_vec_mul_scalar(new_velocity, num, new_velocity)
}

stock get_aim_origin_vector(iPlayer, Float:forw, Float:right, Float:up, Float:vStart[])
{
    new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
   
    pev(iPlayer, pev_origin, vOrigin)
    pev(iPlayer, pev_view_ofs, vUp)
    xs_vec_add(vOrigin, vUp, vOrigin)
    pev(iPlayer, pev_v_angle, vAngle)
   
    angle_vector(vAngle, ANGLEVECTOR_FORWARD, vForward)
    angle_vector(vAngle, ANGLEVECTOR_RIGHT, vRight)
    angle_vector(vAngle, ANGLEVECTOR_UP, vUp)
   
    vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
    vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
    vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
}

stock fm_get_aim_origin(id, Float:origin[3])
{
        new Float:start[3], Float:view_ofs[3], Float:TargetOrigin[3]
        pev(id, pev_origin, start)
        pev(id, pev_view_ofs, view_ofs)
        xs_vec_add(start, view_ofs, start)
        pev(id, pev_v_angle, TargetOrigin)
        engfunc(EngFunc_MakeVectors, TargetOrigin)
        global_get(glb_v_forward, TargetOrigin)
        xs_vec_mul_scalar(TargetOrigin, 9999.0, TargetOrigin)
        xs_vec_add(start, TargetOrigin, TargetOrigin)
        engfunc(EngFunc_TraceLine, start, TargetOrigin, 0, id, 0)
        get_tr2(0, TR_vecEndPos, origin)
        return 1
}

stock drop_weapons(iPlayer, Slot)
{
        new item = get_pdata_cbase(iPlayer, 367+Slot, 4)
        while(item > 0)
        {
                static classname[24]
                pev(item, pev_classname, classname, charsmax(classname))
                engclient_cmd(iPlayer, "drop", classname)
                item = get_pdata_cbase(item, 42, 5)
        }
        set_pdata_cbase(iPlayer, 367, -1, 4)
}

stock fm_strip_user_weapons(index)
{
    new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString,"player_weaponstrip"))
    if(!pev_valid(ent))
    return 0

    dllfunc(DLLFunc_Spawn, ent)
    dllfunc(DLLFunc_Use, ent, index)
    engfunc(EngFunc_RemoveEntity, ent)

    return 1
}

stock fm_give_item(index, const wEntity[])
{
        new iEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, wEntity))
        new Float:origin[3]
        pev(index, pev_origin, origin)
        set_pev(iEntity, pev_origin, origin)
        set_pev(iEntity, pev_spawnflags, pev(iEntity, pev_spawnflags) | SF_NORESPAWN)
        dllfunc(DLLFunc_Spawn, iEntity)
        new save = pev(iEntity, pev_solid)
        dllfunc(DLLFunc_Touch, iEntity, index)
        if(pev(iEntity, pev_solid) != save) return iEntity
        engfunc(EngFunc_RemoveEntity, iEntity)
        return -1
}

stock fm_find_ent_by_model(index, const classname[], const model[])
{
        new ent = index, mdl[72];
        while ((ent = fm_find_ent_by_class(ent, classname))) {
                pev(ent, pev_model, mdl, sizeof mdl - 1);
                if (equal(mdl, model))
                        return ent;
        }

        return 0;
}
 stock fm_find_ent_by_class(index, const classname[]) return engfunc(EngFunc_FindEntityByString, index, "classname", classname)

 stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
        set_pev(Player, pev_weaponanim, Sequence)
        message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
        write_byte(Sequence)
        write_byte(pev(Player, pev_body))
        message_end()
}

public ClientCommand_Buy() return PLUGIN_HANDLED_MAIN

public Message_StatusIcon(msgid, msg_TargetOrigin, id)
{
        new icon[5]
        get_msg_arg_string(2, icon, 4)
        if (icon[0]=='b' && icon[2]=='y' && icon[3]=='z')
        {
                if (get_msg_arg_int(1))
                {
                        set_pdata_int(id, 235, get_pdata_int(id,235)&~(1<<0))
                        return PLUGIN_HANDLED
                }
        }
        return PLUGIN_CONTINUE
}



All times are GMT -4. The time now is 09:23.

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