Raised This Month: $ Target: $400
 0% 

set_view (engine) > fakemeta


Post New Thread Reply   
 
Thread Tools Display Modes
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
Greenberet
AMX Mod X Beta Tester
Join Date: Apr 2004
Location: Vienna
Old 06-30-2007 , 06:40   Re: set_view (engine) > fakemeta
Reply With Quote #2

use the engfunc enum for engfunc and not the FM one...
Code:
engfunc( EngFunc_MakeVectors, makevectors );
__________________
Greenberet is offline
Send a message via ICQ to Greenberet Send a message via MSN to Greenberet
Arkshine
AMX Mod X Plugin Approver
Join Date: Oct 2005
Old 06-30-2007 , 11:23   Re: set_view (engine) > fakemeta
Reply With Quote #3

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

Last edited by Arkshine; 06-30-2007 at 11:39.
Arkshine is offline
Reply



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