示例#1
0
	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 );
	}
示例#2
0
//-----------------------------------------------------------------------------
// 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" ) )