Upload missing file. Fix build.

This commit is contained in:
Night Owl 2017-06-26 07:06:27 +05:00
parent a522ae20c3
commit ecaba0de22
10 changed files with 278 additions and 27 deletions

View File

@ -283,7 +283,7 @@ unsigned short stub_PrecacheEvent( int type, const char *s )
return 0;
}
const char *stub_NameForFunction( unsigned long function )
const char *stub_NameForFunction( unsigned int function )
{
return "func";
}

View File

@ -34,7 +34,7 @@ void HUD_SetMaxSpeed( const struct edict_s *ed, float speed );
int stub_PrecacheModel( char* s );
int stub_PrecacheSound( char* s );
unsigned short stub_PrecacheEvent( int type, const char *s );
const char *stub_NameForFunction( unsigned long function );
const char *stub_NameForFunction( unsigned int function );
void stub_SetModel( struct edict_s *e, const char *m );
extern cvar_t *cl_lw;

View File

@ -314,6 +314,7 @@ int CBasePlayerItem::Restore( class CRestore & ) { return 1; }
int CBasePlayerItem::Save( class CSave & ) { return 1; }
int CBasePlayerWeapon::Restore( class CRestore & ) { return 1; }
int CBasePlayerWeapon::Save( class CSave & ) { return 1; }
float CBasePlayerWeapon::GetNextAttackDelay( float flTime ) { return flTime; }
void CBasePlayerItem::SetObjectCollisionBox( void ) { }
void CBasePlayerItem::FallInit( void ) { }
void CBasePlayerItem::FallThink( void ) { }

View File

@ -560,27 +560,6 @@ void UTIL_ParticleLine( CBasePlayer *player, float *start, float *end, float lif
gEngfuncs.pEfxAPI->R_ParticleLine( start, end, r, g, b, life );
}
/*
=====================
CBasePlayerWeapon::PrintState
For debugging, print out state variables to log file
=====================
*/
void CBasePlayerWeapon::PrintState( void )
{
COM_Log( "c:\\hl.log", "%.4f ", gpGlobals->time );
COM_Log( "c:\\hl.log", "%.4f ", m_pPlayer->m_flNextAttack );
COM_Log( "c:\\hl.log", "%.4f ", m_flNextPrimaryAttack );
COM_Log( "c:\\hl.log", "%.4f ", m_flTimeWeaponIdle - gpGlobals->time );
COM_Log( "c:\\hl.log", "%i ", m_iClip );
}
int RandomLong( int a, int b )
{
return gEngfuncs.pfnRandomLong( a, b );
}
/*
=====================
HUD_InitClientWeapons

View File

@ -90,6 +90,7 @@ LOCAL_SRC_FILES := agrunt.cpp airtank.cpp \
multiplay_gamerules.cpp \
nihilanth.cpp \
nodes.cpp \
observer.cpp \
osprey.cpp \
pathcorner.cpp \
plane.cpp \

View File

@ -92,6 +92,7 @@ set (SVDLL_SOURCES
multiplay_gamerules.cpp
nihilanth.cpp
nodes.cpp
observer.cpp
osprey.cpp
pathcorner.cpp
plane.cpp

View File

@ -129,6 +129,7 @@ OBJ = \
$(DLL_OBJDIR)/multiplay_gamerules.o \
$(DLL_OBJDIR)/nihilanth.o \
$(DLL_OBJDIR)/nodes.o \
$(DLL_OBJDIR)/observer.cpp \^M
$(DLL_OBJDIR)/osprey.o \
$(DLL_OBJDIR)/pathcorner.o \
$(DLL_OBJDIR)/plane.o \

268
dlls/observer.cpp Normal file
View File

@ -0,0 +1,268 @@
//=========== (C) Copyright 1999 Valve, L.L.C. All rights reserved. ===========
//
// The copyright to the contents herein is the property of Valve, L.L.C.
// The contents may be used and/or copied only with the written permission of
// Valve, L.L.C., or in accordance with the terms and conditions stipulated in
// the agreement/contract under which the contents have been supplied.
//
// Purpose: Functionality for the observer chase camera
//
// $Workfile: $
// $Date: $
//
//-----------------------------------------------------------------------------
// $Log: $
//
// $NoKeywords: $
//=============================================================================
#include "extdll.h"
#include "util.h"
#include "cbase.h"
#include "player.h"
#include "weapons.h"
#include "pm_shared.h"
extern int gmsgCurWeapon;
extern int gmsgSetFOV;
// Find the next client in the game for this player to spectate
void CBasePlayer::Observer_FindNextPlayer( bool bReverse )
{
// MOD AUTHORS: Modify the logic of this function if you want to restrict the observer to watching
// only a subset of the players. e.g. Make it check the target's team.
int iStart;
if( m_hObserverTarget )
iStart = ENTINDEX( m_hObserverTarget->edict() );
else
iStart = ENTINDEX( edict() );
int iCurrent = iStart;
m_hObserverTarget = NULL;
int iDir = bReverse ? -1 : 1;
do
{
iCurrent += iDir;
// Loop through the clients
if( iCurrent > gpGlobals->maxClients )
iCurrent = 1;
if( iCurrent < 1 )
iCurrent = gpGlobals->maxClients;
CBaseEntity *pEnt = UTIL_PlayerByIndex( iCurrent );
if( !pEnt )
continue;
if( pEnt == this )
continue;
// Don't spec observers or players who haven't picked a class yet
if( ( (CBasePlayer*)pEnt )->IsObserver() || ( pEnt->pev->effects & EF_NODRAW ) )
continue;
// MOD AUTHORS: Add checks on target here.
m_hObserverTarget = pEnt;
break;
}while( iCurrent != iStart );
// Did we find a target?
if( m_hObserverTarget )
{
// Move to the target
UTIL_SetOrigin( pev, m_hObserverTarget->pev->origin );
// ALERT( at_console, "Now Tracking %s\n", STRING( m_hObserverTarget->pev->netname ) );
// Store the target in pev so the physics DLL can get to it
if( pev->iuser1 != OBS_ROAMING )
pev->iuser2 = ENTINDEX( m_hObserverTarget->edict() );
}
}
// Handle buttons in observer mode
void CBasePlayer::Observer_HandleButtons()
{
// Slow down mouse clicks
if( m_flNextObserverInput > gpGlobals->time )
return;
// Jump changes from modes: Chase to Roaming
if( m_afButtonPressed & IN_JUMP )
{
if( pev->iuser1 == OBS_CHASE_LOCKED )
Observer_SetMode( OBS_CHASE_FREE );
else if( pev->iuser1 == OBS_CHASE_FREE )
Observer_SetMode( OBS_IN_EYE );
else if( pev->iuser1 == OBS_IN_EYE )
Observer_SetMode( OBS_ROAMING );
else if( pev->iuser1 == OBS_ROAMING )
Observer_SetMode( OBS_MAP_FREE );
else if( pev->iuser1 == OBS_MAP_FREE )
Observer_SetMode( OBS_MAP_CHASE );
else
Observer_SetMode( OBS_CHASE_FREE ); // don't use OBS_CHASE_LOCKED anymore
m_flNextObserverInput = gpGlobals->time + 0.2;
}
// Attack moves to the next player
if ( m_afButtonPressed & IN_ATTACK )//&& pev->iuser1 != OBS_ROAMING )
{
Observer_FindNextPlayer( false );
m_flNextObserverInput = gpGlobals->time + 0.2;
}
// Attack2 moves to the prev player
if ( m_afButtonPressed & IN_ATTACK2)// && pev->iuser1 != OBS_ROAMING )
{
Observer_FindNextPlayer( true );
m_flNextObserverInput = gpGlobals->time + 0.2;
}
}
void CBasePlayer::Observer_CheckTarget()
{
if( pev->iuser1 == OBS_ROAMING )
return;
// try to find a traget if we have no current one
if( m_hObserverTarget == NULL )
{
Observer_FindNextPlayer( false );
if( m_hObserverTarget == NULL )
{
// no target found at all
int lastMode = pev->iuser1;
Observer_SetMode( OBS_ROAMING );
m_iObserverLastMode = lastMode; // don't overwrite users lastmode
return; // we still have np target return
}
}
CBasePlayer* target = (CBasePlayer*)( UTIL_PlayerByIndex( ENTINDEX( m_hObserverTarget->edict() ) ) );
if( !target )
{
Observer_FindNextPlayer( false );
return;
}
// check taget
if( target->pev->deadflag == DEAD_DEAD )
{
if( ( target->m_fDeadTime + 2.0f ) < gpGlobals->time )
{
// 3 secs after death change target
Observer_FindNextPlayer( false );
return;
}
}
}
void CBasePlayer::Observer_CheckProperties()
{
// try to find a traget if we have no current one
if( pev->iuser1 == OBS_IN_EYE && m_hObserverTarget != NULL )
{
CBasePlayer* target = (CBasePlayer*)( UTIL_PlayerByIndex( ENTINDEX( m_hObserverTarget->edict() ) ) );
if( !target )
return;
int weapon = ( target->m_pActiveItem != NULL ) ? target->m_pActiveItem->m_iId : 0;
// use fov of tracked client
if( m_iFOV != target->m_iFOV || m_iObserverWeapon != weapon )
{
m_iFOV = target->m_iFOV;
m_iClientFOV = m_iFOV;
// write fov before wepon data, so zoomed crosshair is set correctly
MESSAGE_BEGIN( MSG_ONE, gmsgSetFOV, NULL, pev );
WRITE_BYTE( m_iFOV );
MESSAGE_END();
m_iObserverWeapon = weapon;
//send weapon update
MESSAGE_BEGIN( MSG_ONE, gmsgCurWeapon, NULL, pev );
WRITE_BYTE( 1 ); // 1 = current weapon, not on target
WRITE_BYTE( m_iObserverWeapon );
WRITE_BYTE( 0 ); // clip
MESSAGE_END();
}
}
else
{
m_iFOV = 90;
if( m_iObserverWeapon != 0 )
{
m_iObserverWeapon = 0;
MESSAGE_BEGIN( MSG_ONE, gmsgCurWeapon, NULL, pev );
WRITE_BYTE( 1 ); // 1 = current weapon
WRITE_BYTE( m_iObserverWeapon );
WRITE_BYTE( 0 ); // clip
MESSAGE_END();
}
}
}
// Attempt to change the observer mode
void CBasePlayer::Observer_SetMode( int iMode )
{
// Just abort if we're changing to the mode we're already in
if( iMode == pev->iuser1 )
return;
// is valid mode ?
if( iMode < OBS_CHASE_LOCKED || iMode > OBS_MAP_CHASE )
iMode = OBS_IN_EYE; // now it is
// verify observer target again
if( m_hObserverTarget != NULL )
{
CBaseEntity *pEnt = m_hObserverTarget;
if( ( pEnt == this ) || ( pEnt == NULL ) )
m_hObserverTarget = NULL;
else if( ( (CBasePlayer*)pEnt )->IsObserver() || ( pEnt->pev->effects & EF_NODRAW ) )
m_hObserverTarget = NULL;
}
// set spectator mode
pev->iuser1 = iMode;
// if we are not roaming, we need a valid target to track
if( ( iMode != OBS_ROAMING ) && ( m_hObserverTarget == NULL ) )
{
Observer_FindNextPlayer( false );
// if we didn't find a valid target switch to roaming
if( m_hObserverTarget == NULL )
{
ClientPrint( pev, HUD_PRINTCENTER, "#Spec_NoTarget" );
pev->iuser1 = OBS_ROAMING;
}
}
// set target if not roaming
if( pev->iuser1 == OBS_ROAMING )
{
pev->iuser2 = 0;
}
else
pev->iuser2 = ENTINDEX( m_hObserverTarget->edict() );
pev->iuser3 = 0; // clear second target from death cam
// print spepctaor mode on client screen
char modemsg[16];
sprintf( modemsg,"#Spec_Mode%i", pev->iuser1 );
ClientPrint( pev, HUD_PRINTCENTER, modemsg );
m_iObserverLastMode = iMode;
}

View File

@ -211,7 +211,7 @@ typedef struct cl_enginefuncs_s
void (*pfnPlaybackEvent)( int flags, const struct edict_s *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2 );
void (*pfnWeaponAnim)( int iAnim, int body );
float (*pfnRandomFloat)( float flLow, float flHigh );
long (*pfnRandomLong)( long lLow, long lHigh );
int (*pfnRandomLong)( int lLow, int lHigh );
void (*pfnHookEvent)( char *name, void ( *pfnEvent )( struct event_args_s *args ));
int (*Con_IsVisible) ();
const char *(*pfnGetGameDirectory)( void );
@ -311,4 +311,4 @@ typedef struct cl_enginefuncs_s
}
#endif
#endif//CDLL_INT_H
#endif//CDLL_INT_H

View File

@ -155,7 +155,7 @@ typedef struct ui_enginefuncs_s
// menu interface is freezed at version 0.75
// new functions starts here
float (*pfnRandomFloat)( float flLow, float flHigh );
long (*pfnRandomLong)( long lLow, long lHigh );
int (*pfnRandomLong)( int lLow, int lHigh );
void (*pfnSetCursor)( void *hCursor ); // change cursor
int (*pfnIsMapValid)( char *filename );
@ -185,4 +185,4 @@ typedef struct
typedef int (*MENUAPI)( UI_FUNCTIONS *pFunctionTable, ui_enginefuncs_t* engfuncs, ui_globalvars_t *pGlobals );
#endif//MENU_INT_H
#endif//MENU_INT_H