virtual bool ShouldHitEntity( IHandleEntity *pServerEntity, int contentsMask ) { CBaseEntity *pEntity = EntityFromEntityHandle( pServerEntity ); if ( !pEntity ) return false; IUnit *pUnit = pEntity->GetIUnit(); if( pUnit && pUnit->AreAttacksPassable(m_pUnit) && m_pUnit->GetCommander() == NULL ) { return false; } return BaseClass::ShouldHitEntity( pServerEntity, contentsMask ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- bool CHL2WarsPlayer::ClientCommand( const CCommand &args ) { // FIXME: Most commands do not check the number of args. // (Although this doesn't really matter since an arg out of range is just an empty string...). if( GetControlledUnit() && GetControlledUnit()->GetIUnit() ) { if( GetControlledUnit()->GetIUnit()->ClientCommand( args ) ) return true; } if( !V_stricmp( args[0], "player_clearselection" ) ) { ClearSelection(); return true; } else if( !V_stricmp( args[0], "player_addunit" ) ) { for( int i = 1; i < args.ArgC(); i++ ) { #ifdef CLIENTSENDEHANDLE long iEncodedEHandle = atol(args[i]); int iSerialNum = (iEncodedEHandle >> MAX_EDICT_BITS); int iEntryIndex = iEncodedEHandle & ~(iSerialNum << MAX_EDICT_BITS); EHANDLE pEnt( iEntryIndex, iSerialNum ); #else CBaseEntity *pEnt = UTIL_EntityByIndex( atoi(args[i]) ); #endif // CLIENTSENDEHANDLE //DevMsg( "player_addunit: selecting ent #%d\n", atoi(args[i]) ); if( pEnt && pEnt->IsAlive() && pEnt->GetIUnit() ) pEnt->GetIUnit()->Select(this); else DevMsg( "player_addunit: tried to select an invalid unit (#%d)\n", atoi(args[i]) ); } return true; } else if( !V_stricmp( args[0], "player_removeunit" ) )