AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Cam SetView Problem (https://forums.alliedmods.net/showthread.php?t=154441)

J4CK 04-08-2011 12:23

Cam SetView Problem
 
Hello.
I want when player write /cam - camera set only for 5 sec, i know how do that, but it works only 1 time, and where i can set admin-access only, i mean (get_user_flags(id) & ADMIN...)
PHP Code:

set_task(5.0"ClCmd_ToggleCamera"id

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"
            
set_task(5.0"ClCmd_ToggleCamera"id
        } 
        
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] = 
    ClearUserInCamera
(id
    
CheckForward() 


public 
client_putinserver(id

    
g_iPlayerCamera[id] = 
    ClearUserInCamera
(id


get_cam_owner(iEnt

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

    } 
    return 



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 
        

        if( 
iHhCameraThink 
        { 
            
DisableHamForwardiHhCameraThink 
        } 
    } 




All times are GMT -4. The time now is 19:57.

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