AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   set_view (engine) > fakemeta (https://forums.alliedmods.net/showthread.php?t=57167)

Arkshine 06-29-2007 14:41

set_view (engine) > fakemeta
 
Hi.

I'm trying to convert set_view() function from engine to fakemeta.

Just for learning. ( and for a plugin I don't want to include engine just for one function ).

According svn here : http://svn.alliedmods.net/viewvc.cgi...dx&view=markup ( in PlayerPostThink_Post) and http://svn.alliedmods.net/viewvc.cgi...dx&view=markup (AMX_NATIVE_CALL set_view)

My attempt : ( in yellow I have no clue how I must do )

Thanks for your help ! :)

Code:
#include <amxmodx> #include <fakemeta> #include <fakemeta_util> #include <xs> #define MAX_PLAYERS  32 #define CAMERA_NONE      0 #define CAMERA_3RDPERSON 1 enum PlayerInfo {     pViewEnt[MAX_PLAYERS + 1],     iViewType[MAX_PLAYERS + 1],     iRenderMode[MAX_PLAYERS + 1],     Float:fRenderAmt[MAX_PLAYERS + 1] } new plinfo[MAX_PLAYERS + 1][PlayerInfo];     new const     g_entity[]  = "info_target",     g_classcam[]    = "VexdCam", //  ----------------------------------------     g_model_rpg[]   = "models/rpgrocket.mdl";     new     g_max_clients,     g_CameraCount;     public plugin_precache() {     precache_model( g_model_rpg ); }         public plugin_init() {     g_max_clients = global_get( glb_maxClients );     register_forward( FM_PlayerPostThink, "fw_PlayerPostThink" ); } _SET_VIEW( iIndex, iCameraType ) {     if( iIndex > g_max_clients || !is_user_connected ( iIndex ) )         return;         new pNewCamera = plinfo[iIndex][pViewEnt];             switch( iCameraType )     {         case CAMERA_NONE:         {               engfunc( EngFunc_SetView, iIndex, iIndex );                         if( pNewCamera )             {                 if( fm_find_ent_by_owner( pNewCamera, g_entity, iIndex ) )                     fm_remove_entity( pNewCamera );             }                         if( plinfo[iIndex][iViewType] != CAMERA_NONE )             {                 g_CameraCount--;                                 if (g_CameraCount < 0)                     g_CameraCount=0;                 //              if (g_CameraCount==0) // Reset the AddToFullPack pointer if there's no more cameras in use...                 //  g_pFunctionTable->pfnAddToFullPack=NULL;             }                         plinfo[iIndex][iViewType] = CAMERA_NONE;             plinfo[iIndex][pViewEnt] = 0;                         plinfo[iIndex][iRenderMode] = pev( iIndex, pev_rendermode );             plinfo[iIndex][fRenderAmt] = pev( iIndex, pev_renderamt );                         set_pev( pNewCamera, pev_rendermode, 0 );             set_pev( pNewCamera, pev_renderamt, 0 );         }         case CAMERA_3RDPERSON:         {             if( plinfo[iIndex][iViewType] != CAMERA_NONE )             {                 plinfo[iIndex][iViewType] = CAMERA_3RDPERSON;                 return;             }                         g_CameraCount++;                         //g_pFunctionTable->pfnAddToFullPack=AddToFullPack;             //g_pFunctionTable_Post->pfnPlayerPostThink=PlayerPostThink_Post;                         set_pev( iIndex, pev_rendermode, plinfo[iIndex][iRenderMode] );             set_pev( iIndex, pev_renderamt, plinfo[iIndex][fRenderAmt] );                         plinfo[iIndex][iViewType] = CAMERA_3RDPERSON;                         new pNewCamera = fm_create_entity( g_entity );                         if( !pNewCamera )                 return;                         set_pev( pNewCamera, pev_classname, g_classcam );             fm_entity_set_model( pNewCamera, g_model_rpg );             fm_entity_set_size( pNewCamera, { 0, 0, 0 }, { 0, 0, 0 } );             set_pev( pNewCamera, pev_movetype, MOVETYPE_NOCLIP );             set_pev( pNewCamera, pev_solid, SOLID_NOT );             set_pev( pNewCamera, pev_takedamage, DAMAGE_NO );             set_pev( pNewCamera, pev_gravity, 0 );             set_pev( pNewCamera, pev_owner, iIndex );             set_pev( pNewCamera, pev_rendermode, kRenderTransColor );             set_pev( pNewCamera, pev_renderamt, 0 );             set_pev( pNewCamera, pev_renderfx, kRenderFxNone );                         engfunc( EngFunc_SetView, iIndex, pNewCamera );                         plinfo[iIndex][pViewEnt] = pNewCamera;         }     } } public fw_PlayerPostThink( pEnt ) {     if( !( 1 <= pEnt <= g_max_clients ) )         return FMRES_IGNORED;             if( !is_user_alive( pEnt ) )         return FMRES_IGNORED;         if( !plinfo[pEnt][pViewEnt] )         return FMRES_IGNORED;         static pCamEnt;     pCamEnt = plinfo[pEnt][pViewEnt];         static         Float:v_angle[3],         Float:punchangle[3],         Float:makevectors[3];             pev( pEnt, pev_v_angle, v_angle );     pev( pEnt, pev_punchangle, punchangle );     xs_vec_add( v_angle, punchangle, makevectors );         engfunc( EngFunc_MakeVectors, makevectors );         static         Float:origin[3],         Float:viewofs[3],         Float:vecSrc[3];             pev( pEnt, pev_origin, origin )     pev( pEnt, pev_view_ofs, viewofs );     xs_vec_add( origin, viewofs, vecSrc )         static Float:vecAiming[3];     global_get( glb_v_forward, vecAiming );     //TraceResult tr;     static tr;         switch( plinfo[pEnt][iViewType] )     {         case CAMERA_3RDPERSON:         {                 static Float:vecResult[3];                 xs_vec_mul_scalar( vecAiming, 128.0, vecAiming );                 xs_vec_sub( vecSrc, vecAiming, vecResult );                     engfunc( EngFunc_SetView, pEnt, pCamEnt );                 engfunc( EngFunc_TraceLine, vecSrc, vecResult, IGNORE_MONSTERS, pEnt, tr );                                 pev( pCamEnt, pev_origin, origin );                 set_tr2( tr, TR_vecEndPos, origin );                                 static Float:angles[3];                 pev( pCamEnt, pev_angles, angles );                 set_pev( pEnt, pev_v_angle, angles );         }                 default:         {                       engfunc( EngFunc_SetView, pEnt, pEnt );                                 if( fm_find_ent_by_owner( pCamEnt, g_entity, pEnt ) )                     fm_remove_entity( pCamEnt );                                 plinfo[pEnt][iViewType] = CAMERA_NONE;                 plinfo[pEnt][pViewEnt] = 0;         }     }     return FMRES_IGNORED; }

It does'nt work well... -_-

I'm pretty sure that there are some missing codes but I do not have great knowledge.

Greenberet 06-30-2007 06:40

Re: set_view (engine) > fakemeta
 
use the engfunc enum for engfunc and not the FM one...
Code:
engfunc( EngFunc_MakeVectors, makevectors );

Arkshine 06-30-2007 11:23

Re: set_view (engine) > fakemeta
 
Oops. Stupid mistake. Thanks.

I've updated the code. But it does'nt work properly again.

Here a screenshot when I've tried to use that.

[IMG]http://img139.**************/img139/484/sanstitrero8.th.png[/IMG]

The camera seems fixed in the wrong origin but I succeeded in moving me to put to me in front.

[IMG]http://img412.**************/img412/6319/sanstitrecy7.th.png[/IMG]


All times are GMT -4. The time now is 21:28.

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