Raised This Month: $ Target: $400
 0% 

CS 1.6 Custom 3rd Person View


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
amokossi
Senior Member
Join Date: Apr 2008
Old 07-16-2009 , 03:38   Re: CS 1.6 Custom 3rd Person View
Reply With Quote #1

This could be very useful for Soccerjam right? Hm thinkling about to try to use it on SJ-Maps only.
amokossi is offline
Send a message via ICQ to amokossi Send a message via MSN to amokossi
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 07-21-2009 , 17:28   Re: CS 1.6 Custom 3rd Person View
Reply With Quote #2

Working version with less code, with smoth moves :

PHP Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fun>
#include <hamsandwich>

#define VERSION "0.0.1"

#define MAX_PLAYERS    32

#define    m_flWait        42

#define USE_TOGGLE 3

new g_iCam[MAX_PLAYERS+1]
new 
g_iMaxPlayers

public plugin_init()
{
    
register_plugin("Camera View"VERSION"ConnorMcLeod")

    
register_clcmd("say /cam""cam")
    
register_think("trigger_camera""Camera_Think")
    
g_iMaxPlayers get_maxplayers()
}

public 
camid )
{
    if( !
is_user_alive(id) )
    {
        return
    }
    new 
iEnt g_iCam[id]
    if( !
is_valid_ent(iEnt) )
    {
        
iEnt create_entity("trigger_camera")

        
entity_set_int(iEntEV_INT_spawnflagsSF_CAMERA_PLAYER_TARGET|SF_CAMERA_PLAYER_POSITION)

        
DispatchSpawn(iEnt)
        
set_pdata_float(iEntm_flWait999999.04)

        
g_iCam[id] = iEnt
    
}

    
ExecuteHamHam_UseiEntididUSE_TOGGLE1.0)

    
entity_set_int(idEV_INT_flagsentity_get_int(idEV_INT_flags) & ~FL_FROZEN)
    
cs_reset_user_maxspeed(id)
}

public 
client_disconnect(id)
{
    new 
iEnt g_iCam[id]
    if( !
is_valid_ent(iEnt) )
    {
        
g_iCam[id] = 0
        remove_entity
(iEnt)
    }
}

cs_reset_user_maxspeed(id)
{
    new 
Float:flMaxSpeed;
    switch ( 
get_user_weapon(id) )
    {
        case 
CSW_SG550CSW_AWPCSW_G3SG1 flMaxSpeed 210.0;
        case 
CSW_M249 flMaxSpeed 220.0;
        case 
CSW_AK47 flMaxSpeed 221.0;
        case 
CSW_M3CSW_M4A1 flMaxSpeed 230.0;
        case 
CSW_SG552 flMaxSpeed 235.0;
        case 
CSW_XM1014CSW_AUGCSW_GALILCSW_FAMAS flMaxSpeed 240.0;
        case 
CSW_P90 flMaxSpeed 245.0;
        case 
CSW_SCOUT flMaxSpeed 260.0;
        default : 
flMaxSpeed 250.0;
    }
    
set_user_maxspeed(idflMaxSpeed);
}

get_cam_owner(iEnt)
{
    static 
id
    
for(id 1id<=g_iMaxPlayersid++)
    {
        if( 
g_iCam[id] == iEnt )
        {
            return 
id
        
}
    }
    return 
0
}

public 
Camera_Think(entid)
{
    new 
id get_cam_owner(entid);
    if( !
id )
    {
        return
    }

    static 
Float:origin[3], Float:angle[3], Float:vBack[3];
    
entity_get_vectoridEV_VEC_originorigin );
    
entity_get_vectoridEV_VEC_v_angleangle );

    
angle_vectorangleANGLEVECTOR_FORWARDvBack );

    
origin[2] += 20.0//So we're closer to the eyes.

    //Move back to see ourself (150 units)
    
origin[0] += (-vBack[0] * 150.0);
    
origin[1] += (-vBack[1] * 150.0);
    
origin[2] += (-vBack[2] * 150.0);

    
entity_set_originentidorigin );
    
entity_set_vectorentidEV_VEC_anglesangle );  

    
entity_set_float(entidEV_FL_nextthinkget_gametime())

__________________
- tired and retired -

- my plugins -

Last edited by ConnorMcLeod; 07-21-2009 at 17:31.
ConnorMcLeod is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 07-21-2009 , 18:38   Re: CS 1.6 Custom 3rd Person View
Reply With Quote #3

Any chance of a Mod independent version of this? I was testing code for TFC and changing player models and would have really liked this since I was the only person on my listen server.
__________________
fysiks is online now
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 07-21-2009 , 19:27   Re: CS 1.6 Custom 3rd Person View
Reply With Quote #4

Quote:
Originally Posted by fysiks View Post
Any chance of a Mod independent version of this? I was testing code for TFC and changing player models and would have really liked this since I was the only person on my listen server.
For testing purpose on listenserver you can do :

sv_cheats 1; cam_command 1; restart
__________________
- tired and retired -

- my plugins -
ConnorMcLeod is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 01-26-2011 , 15:07   Re: CS 1.6 Custom 3rd Person View
Reply With Quote #5

Quote:
Originally Posted by fysiks View Post
Any chance of a Mod independent version of this? I was testing code for TFC and changing player models and would have really liked this since I was the only person on my listen server.
Code updated, no more specific cs code (maxspeed or camera wait offset)
Camera origin adjustements in case it would be in a solid place.
Real map cameras stay usabled.

PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define VERSION "0.0.2"

#define MAX_PLAYERS    32

#define USE_TOGGLE 3

new g_iPlayerCamera[MAX_PLAYERS+1]

new 
g_bInCamera
//#define MarkUserInCamera(%0)        g_bInCamera |= 1<<(%0&31)
#define ClearUserInCamera(%0)        g_bInCamera &= ~(1<<(%0&31))
#define IsUserInCamera(%0)            ( g_bInCamera & 1<<(%0&31) )
#define ToggleUserCameraState(%0)    g_bInCamera ^= 1<<(%0&31)

new g_iMaxPlayers

public plugin_init()
{
    
register_plugin("Camera View"VERSION"ConnorMcLeod")

    
register_clcmd("say /cam""ClCmd_ToggleCamera")

    
g_iMaxPlayers get_maxplayers()
}

public 
ClCmd_ToggleCameraid )
{
    if( !
is_user_alive(id) )
    {
        return
    }

    new 
iEnt g_iPlayerCamera[id]
    if( !
pev_valid(iEnt) )
    {
        static 
iszTriggerCamera
        
if( !iszTriggerCamera )
        {
            
iszTriggerCamera engfunc(EngFunc_AllocString"trigger_camera")
        }
        
iEnt engfunc(EngFunc_CreateNamedEntityiszTriggerCamera)
        
set_kvd(0KV_ClassName"trigger_camera")
        
set_kvd(0KV_fHandled0)
        
set_kvd(0KV_KeyName"wait")
        
set_kvd(0KV_Value"999999")
        
dllfunc(DLLFunc_KeyValueiEnt0)

        
set_pev(iEntpev_spawnflagsSF_CAMERA_PLAYER_TARGET|SF_CAMERA_PLAYER_POSITION)
        
set_pev(iEntpev_flagspev(iEntpev_flags) | FL_ALWAYSTHINK)

        
dllfunc(DLLFunc_SpawniEnt)

        
g_iPlayerCamera[id] = iEnt
    
}

    
ToggleUserCameraStateid )
    
CheckForward()

    new 
Float:flMaxSpeediFlags pev(idpev_flags)
    
pev(idpev_maxspeedflMaxSpeed)

    
ExecuteHamHam_UseiEntididUSE_TOGGLE1.0)

    
set_pev(idpev_flagsiFlags)
    
// depending on mod, you may have to send SetClientMaxspeed here.
    // engfunc(EngFunc_SetClientMaxspeed, id, flMaxSpeed)
    
set_pev(idpev_maxspeedflMaxSpeed)
}

public 
SetView(idiEnt)
{
    if( 
IsUserInCamera(id) && is_user_alive(id) )
    {
        new 
iCamera g_iPlayerCamera[id]
        if( 
iCamera && iEnt != iCamera )
        {
            new 
szClassName[16]
            
pev(iEntpev_classnameszClassNamecharsmax(szClassName))
            if( !
equal(szClassName"trigger_camera") ) // should let real cams enabled
            
{
                
engfunc(EngFunc_SetViewidiCamera// shouldn't be always needed
                
return FMRES_SUPERCEDE
            
}
        }
    }
    return 
FMRES_IGNORED
}

public 
client_disconnect(id)
{
    new 
iEnt g_iPlayerCamera[id]
    if( 
pev_valid(iEnt) )
    {
        
engfunc(EngFunc_RemoveEntityiEnt)
    }
    
g_iPlayerCamera[id] = 0
    ClearUserInCamera
(id)
    
CheckForward()
}

public 
client_putinserver(id)
{
    
g_iPlayerCamera[id] = 0
    ClearUserInCamera
(id)
}

get_cam_owner(iEnt)
{
    static 
id
    
for(id 1id<=g_iMaxPlayersid++)
    {
        if( 
g_iPlayerCamera[id] == iEnt )
        {
            return 
id
        
}
    }
    return 
0
}

public 
Camera_ThinkiEnt )
{
    static 
id
    
if( !(id get_cam_owneriEnt )) )
    {
        return
    }

    static 
Float:fVecPlayerOrigin[3], Float:fVecCameraOrigin[3], Float:fVecAngles[3], Float:fVecBack[3]

    
pev(idpev_originfVecPlayerOrigin)
    
pev(idpev_view_ofsfVecAngles)
    
fVecPlayerOrigin[2] += fVecAngles[2]

    
pev(idpev_v_anglefVecAngles)

    
// See player from front ?
    //fVecAngles[0] = 15.0
    //fVecAngles[1] += fVecAngles[1] > 180.0 ? -180.0 : 180.0

    
angle_vector(fVecAnglesANGLEVECTOR_FORWARDfVecBack)

    
//Move back to see ourself (150 units)
    
fVecCameraOrigin[0] = fVecPlayerOrigin[0] + (-fVecBack[0] * 150.0)
    
fVecCameraOrigin[1] = fVecPlayerOrigin[1] + (-fVecBack[1] * 150.0)
    
fVecCameraOrigin[2] = fVecPlayerOrigin[2] + (-fVecBack[2] * 150.0)

    
engfunc(EngFunc_TraceLinefVecPlayerOriginfVecCameraOriginIGNORE_MONSTERSid0)
    static 
Float:flFraction
    get_tr2
(0TR_flFractionflFraction)
    if( 
flFraction != 1.0 // adjust camera place if close to a wall
    
{
        
flFraction *= 150.0
        fVecCameraOrigin
[0] = fVecPlayerOrigin[0] + (-fVecBack[0] * flFraction)
        
fVecCameraOrigin[1] = fVecPlayerOrigin[1] + (-fVecBack[1] * flFraction)
        
fVecCameraOrigin[2] = fVecPlayerOrigin[2] + (-fVecBack[2] * flFraction)
    }

    
set_pev(iEntpev_originfVecCameraOrigin)
    
set_pev(iEntpev_anglesfVecAngles)
}

CheckForward()
{
    static 
HamHook:iHhCameraThinkiFhSetView
    
if( g_bInCamera )
    {
        if( !
iFhSetView )
        {
            
iFhSetView register_forward(FM_SetView"SetView")
        }
        if( !
iHhCameraThink )
        {
            
iHhCameraThink RegisterHam(Ham_Think"trigger_camera""Camera_Think")
        }
        else
        {
            
EnableHamForwardiHhCameraThink )
        }
    }
    else
    {
        if( 
iFhSetView )
        {
            
unregister_forward(FM_SetViewiFhSetView)
            
iFhSetView 0
        
}
        if( 
iHhCameraThink )
        {
            
DisableHamForwardiHhCameraThink )
        }
    }

__________________
- tired and retired -

- my plugins -

Last edited by ConnorMcLeod; 01-30-2011 at 08:36.
ConnorMcLeod is offline
Ryokin
Senior Member
Join Date: Jan 2010
Old 03-06-2011 , 05:38   Re: CS 1.6 Custom 3rd Person View
Reply With Quote #6

Quote:
Originally Posted by ConnorMcLeod View Post
Code updated, no more specific cs code (maxspeed or camera wait offset)
Camera origin adjustements in case it would be in a solid place.
Real map cameras stay usabled.

PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
 
#define VERSION "0.0.2"
 
#define MAX_PLAYERS    32
 
#define USE_TOGGLE 3
 
new g_iPlayerCamera[MAX_PLAYERS+1]
 
new 
g_bInCamera
//#define MarkUserInCamera(%0)        g_bInCamera |= 1<<(%0&31)
#define ClearUserInCamera(%0)        g_bInCamera &= ~(1<<(%0&31))
#define IsUserInCamera(%0)            ( g_bInCamera & 1<<(%0&31) )
#define ToggleUserCameraState(%0)    g_bInCamera ^= 1<<(%0&31)
 
new g_iMaxPlayers
 
public plugin_init()
{
    
register_plugin("Camera View"VERSION"ConnorMcLeod")
 
    
register_clcmd("say /cam""ClCmd_ToggleCamera")
 
    
g_iMaxPlayers get_maxplayers()
}
 
public 
ClCmd_ToggleCameraid )
{
    if( !
is_user_alive(id) )
    {
        return
    }
 
    new 
iEnt g_iPlayerCamera[id]
    if( !
pev_valid(iEnt) )
    {
        static 
iszTriggerCamera
        
if( !iszTriggerCamera )
        {
            
iszTriggerCamera engfunc(EngFunc_AllocString"trigger_camera")
        }
        
iEnt engfunc(EngFunc_CreateNamedEntityiszTriggerCamera)
        
set_kvd(0KV_ClassName"trigger_camera")
        
set_kvd(0KV_fHandled0)
        
set_kvd(0KV_KeyName"wait")
        
set_kvd(0KV_Value"999999")
        
dllfunc(DLLFunc_KeyValueiEnt0)
 
        
set_pev(iEntpev_spawnflagsSF_CAMERA_PLAYER_TARGET|SF_CAMERA_PLAYER_POSITION)
        
set_pev(iEntpev_flagspev(iEntpev_flags) | FL_ALWAYSTHINK)
 
        
dllfunc(DLLFunc_SpawniEnt)
 
        
g_iPlayerCamera[id] = iEnt
    
}
 
    
ToggleUserCameraStateid )
    
CheckForward()
 
    new 
Float:flMaxSpeediFlags pev(idpev_flags)
    
pev(idpev_maxspeedflMaxSpeed)
 
    
ExecuteHamHam_UseiEntididUSE_TOGGLE1.0)
 
    
set_pev(idpev_flagsiFlags)
    
// depending on mod, you may have to send SetClientMaxspeed here.
    // engfunc(EngFunc_SetClientMaxspeed, id, flMaxSpeed)
    
set_pev(idpev_maxspeedflMaxSpeed)
}
 
public 
SetView(idiEnt)
{
    if( 
IsUserInCamera(id) && is_user_alive(id) )
    {
        new 
iCamera g_iPlayerCamera[id]
        if( 
iCamera && iEnt != iCamera )
        {
            new 
szClassName[16]
            
pev(iEntpev_classnameszClassNamecharsmax(szClassName))
            if( !
equal(szClassName"trigger_camera") ) // should let real cams enabled
            
{
                
engfunc(EngFunc_SetViewidiCamera// shouldn't be always needed
                
return FMRES_SUPERCEDE
            
}
        }
    }
    return 
FMRES_IGNORED
}
 
public 
client_disconnect(id)
{
    new 
iEnt g_iPlayerCamera[id]
    if( 
pev_valid(iEnt) )
    {
        
engfunc(EngFunc_RemoveEntityiEnt)
    }
    
g_iPlayerCamera[id] = 0
    ClearUserInCamera
(id)
    
CheckForward()
}
 
public 
client_putinserver(id)
{
    
g_iPlayerCamera[id] = 0
    ClearUserInCamera
(id)
}
 
get_cam_owner(iEnt)
{
    static 
id
    
for(id 1id<=g_iMaxPlayersid++)
    {
        if( 
g_iPlayerCamera[id] == iEnt )
        {
            return 
id
        
}
    }
    return 
0
}
 
public 
Camera_ThinkiEnt )
{
    static 
id
    
if( !(id get_cam_owneriEnt )) )
    {
        return
    }
 
    static 
Float:fVecPlayerOrigin[3], Float:fVecCameraOrigin[3], Float:fVecAngles[3], Float:fVecBack[3]
 
    
pev(idpev_originfVecPlayerOrigin)
    
pev(idpev_view_ofsfVecAngles)
    
fVecPlayerOrigin[2] += fVecAngles[2]
 
    
pev(idpev_v_anglefVecAngles)
 
    
// See player from front ?
    //fVecAngles[0] = 15.0
    //fVecAngles[1] += fVecAngles[1] > 180.0 ? -180.0 : 180.0
 
    
angle_vector(fVecAnglesANGLEVECTOR_FORWARDfVecBack)
 
    
//Move back to see ourself (150 units)
    
fVecCameraOrigin[0] = fVecPlayerOrigin[0] + (-fVecBack[0] * 150.0)
    
fVecCameraOrigin[1] = fVecPlayerOrigin[1] + (-fVecBack[1] * 150.0)
    
fVecCameraOrigin[2] = fVecPlayerOrigin[2] + (-fVecBack[2] * 150.0)
 
    
engfunc(EngFunc_TraceLinefVecPlayerOriginfVecCameraOriginIGNORE_MONSTERSid0)
    static 
Float:flFraction
    get_tr2
(0TR_flFractionflFraction)
    if( 
flFraction != 1.0 // adjust camera place if close to a wall
    
{
        
flFraction *= 150.0
        fVecCameraOrigin
[0] = fVecPlayerOrigin[0] + (-fVecBack[0] * flFraction)
        
fVecCameraOrigin[1] = fVecPlayerOrigin[1] + (-fVecBack[1] * flFraction)
        
fVecCameraOrigin[2] = fVecPlayerOrigin[2] + (-fVecBack[2] * flFraction)
    }
 
    
set_pev(iEntpev_originfVecCameraOrigin)
    
set_pev(iEntpev_anglesfVecAngles)
}
 
CheckForward()
{
    static 
HamHook:iHhCameraThinkiFhSetView
    
if( g_bInCamera )
    {
        if( !
iFhSetView )
        {
            
iFhSetView register_forward(FM_SetView"SetView")
        }
        if( !
iHhCameraThink )
        {
            
iHhCameraThink RegisterHam(Ham_Think"trigger_camera""Camera_Think")
        }
        else
        {
            
EnableHamForwardiHhCameraThink )
        }
    }
    else
    {
        if( 
iFhSetView )
        {
            
unregister_forward(FM_SetViewiFhSetView)
            
iFhSetView 0
        
}
        if( 
iHhCameraThink )
        {
            
DisableHamForwardiHhCameraThink )
        }
    }

this's much better than OneEyed's way ?
__________________
NH4CL + NaOH -> NH3 + H2O + NaCL
Ryokin is offline
Old 10-14-2015, 23:58
nico_barrera
This message has been deleted by nico_barrera.
jasondoyle
Member
Join Date: Dec 2009
Old 12-14-2009 , 10:00   Re: CS 1.6 Custom 3rd Person View
Reply With Quote #8

could anybody please post the most updated version of this code please, engine or fakemeta i dont mind witch, ty
jasondoyle is offline
Arkshine
AMX Mod X Plugin Approver
Join Date: Oct 2005
Old 12-14-2009 , 10:08   Re: CS 1.6 Custom 3rd Person View
Reply With Quote #9

3 posts above you, you have a version using an alternate method which should provide "smooth moves".
__________________
Arkshine is offline
jasondoyle
Member
Join Date: Dec 2009
Old 12-14-2009 , 10:09   Re: CS 1.6 Custom 3rd Person View
Reply With Quote #10

Quote:
Originally Posted by Arkshine View Post
3 posts above you, you have a version using an alternate method which should provide "smooth moves".
ok thanks for the reply Arkshine.

does the camera get stuck in the wall sometimes when u turn corners or is it just me?

Last edited by jasondoyle; 12-15-2009 at 05:51.
jasondoyle 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 23:16.


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