Raised This Month: $ Target: $400
 0% 

set_view (engine) > fakemeta


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
Arkshine
AMX Mod X Plugin Approver
Join Date: Oct 2005
Old 06-29-2007 , 14:41   set_view (engine) > fakemeta
Reply With Quote #1

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.
__________________

Last edited by Arkshine; 06-30-2007 at 11:27.
Arkshine 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 21:28.


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