Example #1
0
void GameBase::HandleSolidMsg( HOBJECT hSender, const CParsedMsg &crParsedMsg )
{
	uint32 dwFlags;
	g_pCommonLT->GetObjectFlags(m_hObject, OFT_Flags, dwFlags);
	if( !m_dwOriginalFlags )
	{
		m_dwOriginalFlags = dwFlags;
	}

	if ((crParsedMsg.GetArg(1) == s_cTok_1) ||
		(crParsedMsg.GetArg(1) == s_cTok_True))
	{
		dwFlags |= FLAG_SOLID;

		if (m_dwOriginalFlags & FLAG_RAYHIT)
		{
			dwFlags |= FLAG_RAYHIT;
		}
	}
	else
	{
		if ((crParsedMsg.GetArg(1) == s_cTok_0) ||
			(crParsedMsg.GetArg(1) == s_cTok_False))
		{
			dwFlags &= ~FLAG_SOLID;
			dwFlags &= ~FLAG_RAYHIT;
		}
	}

	g_pCommonLT->SetObjectFlags(m_hObject, OFT_Flags, dwFlags, FLAGMASK_ALL);
}
Example #2
0
bool CAIState::HandleCommand(const CParsedMsg &cMsg)
{
    // If the command starts with the type name if this state,
    // handle it.
    if( cMsg.GetArg(0) == s_aszStateTypes[GetStateType()] )
    {
        // First token specifies the state.  Skip it.

        char szTempBuffer[256];
        char* szName;
        char* szValue;
        for(uint8 iToken=1; iToken < cMsg.GetArgCount(); ++iToken)
        {
            SAFE_STRCPY(szTempBuffer, cMsg.GetArg(iToken));
            szName  = strtok(szTempBuffer, "=");
            szValue = strtok(LTNULL, "");

            // Check for legal NAME=VALUE pair.
            AIASSERT(szName && szValue, LTNULL, "CAIState::HandleCommand: Name or Value is NULL.");
            if ( !(szName && szValue) )
            {
                g_pLTServer->CPrint("Garbage name/value pair = %s", cMsg.GetArg(iToken).c_str());
                continue;
            }

            HandleNameValuePair(szName, szValue);
        }

        return true;
    }

    return false;
}
Example #3
0
bool Fire::OnTrigger(HOBJECT hSender, const CParsedMsg &cMsg)
{
	static CParsedMsg::CToken s_cTok_On("ON");
	static CParsedMsg::CToken s_cTok_Off("OFF");
	static CParsedMsg::CToken s_cTok_Remove("REMOVE");

	if ((cMsg.GetArg(0) == s_cTok_On) && !m_bOn)
	{
        g_pCommonLT->SetObjectFlags(m_hObject, OFT_User, USRFLG_VISIBLE, FLAGMASK_ALL);
        m_bOn = LTTRUE;
	}
	else if ((cMsg.GetArg(0) == s_cTok_Off) && m_bOn)
	{
        g_pCommonLT->SetObjectFlags(m_hObject, OFT_User, 0, FLAGMASK_ALL);
        m_bOn = LTFALSE;
	}
	else if (cMsg.GetArg(0) == s_cTok_Remove)
	{
        g_pLTServer->RemoveObject(m_hObject);
	}
	else
		return GameBase::OnTrigger(hSender, cMsg);

	return true;
}
Example #4
0
bool SecurityCamera::OnTrigger(HOBJECT hSender, const CParsedMsg &cMsg)
{
	static CParsedMsg::CToken s_cTok_Off(s_szOff);
	static CParsedMsg::CToken s_cTok_Reset(s_szReset);
	static CParsedMsg::CToken s_cTok_Gadget(s_szGadget);
	static CParsedMsg::CToken s_cTok_Tripped(s_szTripped);

	if (cMsg.GetArg(0) == s_cTok_Off)
	{
		SetState(eStateOff);
	}
	else if (cMsg.GetArg(0) == s_cTok_Reset)
	{
		SetState(eStateReset);
	}
	else if (cMsg.GetArg(0) == s_cTok_Gadget)
	{
		HandleGadgetMsg(cMsg);
	}
	else if (cMsg.GetArg(0) == s_cTok_Tripped)
	{
		m_bTripped = LTTRUE;
		SetLightColor(eRed);
		SetState(eStateOff);
	}
	else
		return CScanner::OnTrigger(hSender, cMsg);

	return true;
}
Example #5
0
bool TextureFX::OnTrigger(HOBJECT hSender, const CParsedMsg &cMsg)
{
	static CParsedMsg::CToken s_cTok_SetVar("SETVAR");

	bool bUpdate = false;

	if ((cMsg.GetArg(0) == s_cTok_SetVar) && (cMsg.GetArgCount() >= 4))
	{
		uint32 nStage	= (uint32)atoi(cMsg.GetArg(1)) - 1;
		uint32 nVar		= (uint32)atoi(cMsg.GetArg(2)) - 1;
		float  fVal		= (float)atof(cMsg.GetArg(3));

		if((nStage < NUM_STAGES) && (nVar < NUM_VARS))
		{
			//save the variable
			m_Stages[nStage].m_fVars[nVar] = fVal;

			//mark it as changes
			m_Stages[nStage].m_nChanged |= (1 << nVar);

			//we need to update the clients
			bUpdate = true;
		}
	}
	else
		return GameBase::OnTrigger(hSender, cMsg);

	// Tell the clients about the change
	if(bUpdate)
		UpdateClients();

	return true;
}
Example #6
0
void GameBase::HandleMoveMsg( HOBJECT hSender, const CParsedMsg &crParsedMsg )
{
	// Make sure we have all the arguments.
	if( crParsedMsg.GetArgCount( ) < 4 )
		return;

	static CParsedMsg::CToken s_cTok_SetPos( "SETPOS" );
	bool bSetPos = ( crParsedMsg.GetArg( 0 ) == s_cTok_SetPos );

	// Get the position they specified.  This is in WorldEdit space.
	LTVector vPos;
	vPos.x = ( float )atof( crParsedMsg.GetArg( 1 ));
	vPos.y = ( float )atof( crParsedMsg.GetArg( 2 ));
	vPos.z = ( float )atof( crParsedMsg.GetArg( 3 ));

	// Transform the position to runtime space.
	LTVector vOffset;
	g_pLTServer->GetSourceWorldOffset(vOffset);
	vPos -= vOffset;

	if( bSetPos )
		g_pLTServer->SetObjectPos( m_hObject, vPos );
	else
		g_pLTServer->Physics()->MoveObject( m_hObject, vPos, 0 );
}
Example #7
0
void Camera::HandleFOVMsg( HOBJECT hSender, const CParsedMsg &crParsedMsg )
{
	if( crParsedMsg.GetArgCount() >= 3 )
	{
		m_fFovY = (float)atof( crParsedMsg.GetArg(1) );
		m_fFovAspectScale = (float)atof( crParsedMsg.GetArg(2) );

		float fT = 0.0f;

		if( crParsedMsg.GetArgCount() >= 4 )
		{
			fT = (float)atof( crParsedMsg.GetArg(3) );
		}

		CAutoMessage cMsg;
		cMsg.Writeuint8(MID_SFX_MESSAGE);
		cMsg.Writeuint8(SFX_CAMERA_ID);
		cMsg.WriteObject(m_hObject);
		cMsg.Writeuint8(CAMFX_FOV);
		cMsg.Writefloat(m_fFovY);
		cMsg.Writefloat(m_fFovAspectScale);
		cMsg.Writefloat(fT);

		// Send the message to all connected clients
		g_pLTServer->SendToClient(cMsg.Read(), NULL, MESSAGE_GUARANTEED);

		// Update the SpecialFX Message...

		CreateSFXMsg();
	}
}
Example #8
0
void GameBase::HandleCastShadowMsg(  HOBJECT hSender, const CParsedMsg &crParsedMsg )
{
	EEngineLOD eShadowLOD;
	g_pLTServer->GetObjectShadowLOD( m_hObject, eShadowLOD );
	if( eShadowLOD != eEngineLOD_Never )
	{
		m_eOriginalShadowLOD = eShadowLOD;
	}

	if ((crParsedMsg.GetArg(1) == s_cTok_1) ||
		(crParsedMsg.GetArg(1) == s_cTok_True))
	{
		eShadowLOD = m_eOriginalShadowLOD;
	}
	else
	{
		if ((crParsedMsg.GetArg(1) == s_cTok_0) ||
			(crParsedMsg.GetArg(1) == s_cTok_False))
		{
			eShadowLOD = eEngineLOD_Never;
		}
	}

	g_pLTServer->SetObjectShadowLOD( m_hObject, eShadowLOD );
}
Example #9
0
void CDestructibleModel::HandleHiddenMsg( HOBJECT hSender, const CParsedMsg &crParsedMsg )
{
	static CParsedMsg::CToken s_cTok_1("1");
	static CParsedMsg::CToken s_cTok_True("TRUE");
	static CParsedMsg::CToken s_cTok_0("0");
	static CParsedMsg::CToken s_cTok_False("FALSE");

	// Game Base will take care of the solid and visible flags for us...

	if( (crParsedMsg.GetArg(1) == s_cTok_1) ||
		(crParsedMsg.GetArg(1) == s_cTok_True) )
	{
		m_DestructibleModelFlags = ( m_DestructibleModelFlags & ~kDestructibleModelFlag_SaveCanDamage ) | ( GetCanDamage() ? kDestructibleModelFlag_SaveCanDamage : 0 );
		m_DestructibleModelFlags = ( m_DestructibleModelFlags & ~kDestructibleModelFlag_SaveNeverDestroy ) | ( GetNeverDestroy() ? kDestructibleModelFlag_SaveNeverDestroy : 0 );

		SetCanDamage(false);
		SetNeverDestroy(true);
	}
	else if((crParsedMsg.GetArg(1) == s_cTok_0) ||
			(crParsedMsg.GetArg(1) == s_cTok_False) )
	{
		SetCanDamage(( m_DestructibleModelFlags & kDestructibleModelFlag_SaveCanDamage ) != 0 );
		SetNeverDestroy(( m_DestructibleModelFlags & kDestructibleModelFlag_SaveNeverDestroy ) != 0 );
	}
}
Example #10
0
void LightBase::HandleRadiusMsg( HOBJECT /*hSender*/, const CParsedMsg &crParsedMsg )
{
	if(crParsedMsg.GetArgCount() == 2)
	{
		//read in our new dimensions and apply them
		m_fLightRadius =	LTMAX((float)atof(crParsedMsg.GetArg(1)), 0.0f);						
		g_pLTServer->SetLightRadius(m_hObject, m_fLightRadius);
	}
}
Example #11
0
void LightBase::HandleTextureMsg( HOBJECT /*hSender*/, const CParsedMsg &crParsedMsg )
{
	if(crParsedMsg.GetArgCount() == 2)
	{
		//read in our new dimensions and apply them
		m_sLightTexture = crParsedMsg.GetArg(1);			
		g_pLTServer->SetLightTexture(m_hObject, m_sLightTexture.c_str());
	}
}
Example #12
0
void LightBase::HandleIntensityMsg( HOBJECT /*hSender*/, const CParsedMsg &crParsedMsg )
{
	if(crParsedMsg.GetArgCount() == 2)
	{
		//read in our new dimensions and apply them
		m_fIntensityScale =	LTCLAMP((float)atof(crParsedMsg.GetArg(1)), 0.0f, 1.0f);						
		g_pLTServer->SetLightIntensityScale(m_hObject, m_fIntensityScale);
	}
}
Example #13
0
void GameBase::HandleHiddenMsg( HOBJECT hSender, const CParsedMsg &crParsedMsg )
{
	uint32 dwFlags;
	g_pCommonLT->GetObjectFlags(m_hObject, OFT_Flags, dwFlags);
	if( !m_dwOriginalFlags )
	{
		m_dwOriginalFlags = dwFlags;
	}

	EEngineLOD eShadowLOD;
	g_pLTServer->GetObjectShadowLOD( m_hObject, eShadowLOD );
	if( eShadowLOD != eEngineLOD_Never )
	{
		m_eOriginalShadowLOD = eShadowLOD;
	}
	
	if ((crParsedMsg.GetArg(1) == s_cTok_1) ||
		(crParsedMsg.GetArg(1) == s_cTok_True))
	{
		dwFlags &= ~FLAG_SOLID;
		dwFlags &= ~FLAG_RAYHIT;
		dwFlags &= ~FLAG_VISIBLE;

		eShadowLOD = eEngineLOD_Never;
	}
	else
	{
		if ((crParsedMsg.GetArg(1) == s_cTok_0) ||
			(crParsedMsg.GetArg(1) == s_cTok_False))
		{
			// Not all objects should have solid set to true.
			// (e.g. AIs should never set solid true)

			if( m_dwOriginalFlags & FLAG_SOLID )
			{
				dwFlags |= FLAG_SOLID;
			}

			if( m_dwOriginalFlags & FLAG_VISIBLE )
			{
				dwFlags |= FLAG_VISIBLE;
			}

			if (m_dwOriginalFlags & FLAG_RAYHIT)
			{
				dwFlags |= FLAG_RAYHIT;
			}

			eShadowLOD = m_eOriginalShadowLOD;
		}
	}

    g_pCommonLT->SetObjectFlags(m_hObject, OFT_Flags, dwFlags, FLAGMASK_ALL);
	g_pLTServer->SetObjectShadowLOD( m_hObject, eShadowLOD );
}
Example #14
0
void LightBase::HandleDimsMsg( HOBJECT /*hSender*/, const CParsedMsg &crParsedMsg )
{
	if(crParsedMsg.GetArgCount() == 4)
	{
		//read in our new dimensions and apply them
		m_vDirectionalDims.Init(	LTMAX(0.0f, (float)atof(crParsedMsg.GetArg(1))),
									LTMAX(0.0f, (float)atof(crParsedMsg.GetArg(2))),
									LTMAX(0.0f, (float)atof(crParsedMsg.GetArg(3))));
		g_pLTServer->SetLightDirectionalDims(m_hObject, m_vDirectionalDims * LTVector(0.5f, 0.5f, 1.0f));
	}
}
Example #15
0
void LightBase::HandleColorMsg( HOBJECT /*hSender*/, const CParsedMsg &crParsedMsg )
{
	if(crParsedMsg.GetArgCount() == 4)
	{
		//read in our new dimensions and apply them
		m_vColor.Init(	LTCLAMP((float)atof(crParsedMsg.GetArg(1)), 0.0f, 255.0f) / 255.0f,
						LTCLAMP((float)atof(crParsedMsg.GetArg(2)), 0.0f, 255.0f) / 255.0f,
						LTCLAMP((float)atof(crParsedMsg.GetArg(3)), 0.0f, 255.0f) / 255.0f);
		g_pLTServer->SetObjectColor(m_hObject, m_vColor.x, m_vColor.y, m_vColor.z, 1.0f);
	}
}
Example #16
0
void SecurityCamera::HandleGadgetMsg(const CParsedMsg &cMsg)
{
	if (cMsg.GetArgCount() < 2) return;

	AMMO const *pAmmo = g_pWeaponMgr->GetAmmo(atol(cMsg.GetArg(1)));
	if (!pAmmo) return;

	if (pAmmo->eInstDamageType == DT_CAMERA_DISABLER)
	{
		SetState(eStateDisabled);
	}
}
Example #17
0
void AINavMeshLinkAbstract::HandleMaxEnabledAwarenessMsg( HOBJECT hSender, const CParsedMsg &crParsedMsg )
{
	if( crParsedMsg.GetArgCount() > 1 )
	{
		m_eMaxEnabledAwareness = StringToAwareness( crParsedMsg.GetArg(1) );

		// All AIs need to clear existing knowledge of paths,
		// because enabling and disabling NavMeshLinks changes the connectivity.

		g_pAIPathMgrNavMesh->InvalidatePathKnowledge( hSender );
	}
}
Example #18
0
void GunMount::HandleVisibleMsg( HOBJECT hSender, const CParsedMsg &cMsg )
{
	static CParsedMsg::CToken	s_cTok_1("1");
	static CParsedMsg::CToken	s_cTok_True("TRUE");
	static CParsedMsg::CToken	s_cTok_Hidden( "HIDDEN" );

	m_bVisible = (( cMsg.GetArg(1) == s_cTok_1) || (cMsg.GetArg(1) == s_cTok_True));
	if( cMsg.GetArg( 0 ) == s_cTok_Hidden )
		m_bVisible = !m_bVisible;

	SetVisible( m_bVisible );
}
Example #19
0
bool Prop::OnTrigger(HOBJECT hSender, const CParsedMsg &cMsg)
{
	static CParsedMsg::CToken s_cTok_Anim("ANIM");
	static CParsedMsg::CToken s_cTok_AnimLoop("ANIMLOOP");
	static CParsedMsg::CToken s_cTok_Activate("ACTIVATE");
	static CParsedMsg::CToken s_cTok_Remove("REMOVE");
	static CParsedMsg::CToken s_cTok_Destroy("DESTROY");

	uint32 dwFlags;
	g_pCommonLT->GetObjectFlags(m_hObject, OFT_User, dwFlags);

	if ( cMsg.GetArg(0) == s_cTok_Anim )
	{
        g_pLTServer->SetModelLooping(m_hObject, LTFALSE);
        g_pLTServer->SetModelAnimation(m_hObject, g_pLTServer->GetAnimIndex(m_hObject, ( char* )( char const* )cMsg.GetArg( 1 )));
		g_pLTServer->ResetModelAnimation(m_hObject);
		SetNextUpdate(UPDATE_NEXT_FRAME); // Needed to get string keys
	}
	else if ( cMsg.GetArg(0) == s_cTok_AnimLoop )
	{
        g_pLTServer->SetModelLooping(m_hObject, LTTRUE);
        g_pLTServer->SetModelAnimation(m_hObject, g_pLTServer->GetAnimIndex(m_hObject, ( char* )( char const* )cMsg.GetArg( 1 )));
		g_pLTServer->ResetModelAnimation(m_hObject);
		SetNextUpdate(UPDATE_NEXT_FRAME); // Needed to get string keys
	}
	else if ( cMsg.GetArg(0) == s_cTok_Activate )
	{
		if(dwFlags & USRFLG_CAN_ACTIVATE)
		{
			SendActivateMessage( );

 			HandleTouch(hSender);
		}
	}
	else if( cMsg.GetArg(0) == s_cTok_Remove )
	{
		// Remove us...

		g_pLTServer->RemoveObject( m_hObject );
	}
	else if( cMsg.GetArg(0) == s_cTok_Destroy )
	{
		m_damage.HandleDestruction( LTNULL );
		HandleDestroy( LTNULL );
	}
	else
	{
		return GameBase::OnTrigger(hSender, cMsg);
	}

	return true;
}
Example #20
0
void LightBase::HandleSpotFOVMsg( HOBJECT /*hSender*/, const CParsedMsg &crParsedMsg )
{
	if(crParsedMsg.GetArgCount() == 3)
	{
		//read in our new dimensions and apply them
		m_fSpotFovX = LTCLAMP((float)atof(crParsedMsg.GetArg(1)), 0.0f, 90.0f);			
		m_fSpotFovY = LTCLAMP((float)atof(crParsedMsg.GetArg(2)), 0.0f, 90.0f);

		g_pLTServer->SetLightSpotInfo(m_hObject,	MATH_DEGREES_TO_RADIANS(m_fSpotFovX * 0.5f), 
													MATH_DEGREES_TO_RADIANS(m_fSpotFovY * 0.5f), 
													m_fSpotNearClip); 
	}
}
Example #21
0
bool PickupItem::OnTrigger(HOBJECT hSender, const CParsedMsg &cMsg)
{
	static CParsedMsg::CToken s_cTok_Activate("ACTIVATE");
	static CParsedMsg::CToken s_cTok_Team( "TEAM" );

	if( cMsg.GetArg(0) == s_cTok_Activate )
	{
		// Can't activate before we've respawned.
		if( m_bWasPickedUp )
			return true;

		// If the object is dead, it can't pick up stuff...

		if (IsPlayer(hSender))
		{
			CPlayerObj* pPlayer = (CPlayerObj*)g_pLTServer->HandleToObject(hSender);

			if (!pPlayer || pPlayer->IsDead()) return true;

			SetPlayerObj(hSender);

			ObjectTouch(hSender);
		}
		else
		{
			SetPlayerObj(LTNULL);
			return true;
		}
	}
	else if (cMsg.GetArg(0) == s_cTok_Team)
	{
		if( cMsg.GetArgCount( ) > 1 )
		{
			uint32 nTeamId = atoi( cMsg.GetArg( 1 ));
			if( nTeamId < MAX_TEAMS )
			{
				SetTeamId( nTeamId );
			}
			else
			{
				SetTeamId( INVALID_TEAM );
			}

			return true;
		}
	}
	else
		return GameBase::OnTrigger(hSender, cMsg);

	return true;
}
Example #22
0
void GameBase::HandleSetRotationMsg( HOBJECT hSender, const CParsedMsg &crParsedMsg )
{
	// Make sure we have all the arguments.
	if( crParsedMsg.GetArgCount( ) < 4 )
		return;

	// Get the euler angles.  Convert to radians.
	LTVector vEulerAngle;
	vEulerAngle.y = (( float )atof( crParsedMsg.GetArg( 1 )) * MATH_PI / 180.0f );
	vEulerAngle.x = (( float )atof( crParsedMsg.GetArg( 2 )) * MATH_PI / 180.0f );
	vEulerAngle.z = (( float )atof( crParsedMsg.GetArg( 3 )) * MATH_PI / 180.0f );

	LTRotation rRot( vEulerAngle.x, vEulerAngle.y, vEulerAngle.z );
	g_pLTServer->SetObjectRotation( m_hObject, rRot );
}
Example #23
0
void LightBase::HandleScaleAlphaMsg( HOBJECT /*hSender*/, const CParsedMsg &crParsedMsg )
{
	float fAlpha = (float)LTStrToDouble(crParsedMsg.GetArg(1).c_str());

	// Update the object's alpha
	LTVector4 vOldColor;
	g_pLTServer->GetObjectColor( m_hObject, &vOldColor.x, &vOldColor.y, &vOldColor.z, &vOldColor.w );
	g_pLTServer->SetObjectColor( m_hObject, vOldColor.x, vOldColor.y, vOldColor.z, fAlpha );
}
Example #24
0
void WorldModel::HandleDetachMsg( const CParsedMsg &cMsg )
{
	if( cMsg.GetArgCount() >= 2 )
	{
		// Look for the specific objects we want to detach
		for( uint i = 1; i < cMsg.GetArgCount( ); i++ )
		{
			const char *pObjName = cMsg.GetArg(i).c_str();
			if( !pObjName )
				break;

			ObjArray<HOBJECT, 1> objArray;
			g_pLTServer->FindNamedObjects( const_cast<char *>(pObjName), objArray );

			if( objArray.NumObjects() )
			{
				DetachObject( objArray.GetObject( 0 ) );
			}
		}
	}
	else
	{
		// Remove an Object we attached using the AttachDir...

		if( m_hAttachDirObj )
		{
			DetachObject( m_hAttachDirObj );
			m_hAttachDirObj = NULL;
		}
		else
		{
			// Objects attached via ATTACH ....
			while( m_AttachMsgObjList.size( ))
			{
				ObjRefNotifierList::iterator msgiter = m_AttachMsgObjList.begin( );
				HOBJECT hObj = *msgiter;
				if( hObj )
					DetachObject( hObj );

				m_AttachMsgObjList.erase( msgiter );
			}
		}
	}
}
Example #25
0
void CAIWeaponAbstract::DefaultHandleModelString( CAI* pAI, const CParsedMsg& cParsedMsg )
{
	if (!pAI)
	{
		return;
	}

	static CParsedMsg::CToken s_cTok_CineFireWeapon("CINEFIRE");
	static CParsedMsg::CToken s_cTok_FireWeapon(c_szKeyFireWeapon);
	static CParsedMsg::CToken s_cTok_Throw(c_szKeyThrow);

	// FIRE and THROW 

	// When an AI is throwing a grenade, the thrown weapon ought to be
	// the current weapon.  If this changes, and they firing needs to
	// operate differently at a low level, either this default 
	// implementation can change, or the grenade can provide its own 
	// implementation.
	if (cParsedMsg.GetArg(0) == s_cTok_FireWeapon ||
		cParsedMsg.GetArg(0) == s_cTok_Throw )
	{
		if (cParsedMsg.GetArgCount() > 1)
		{
			const char* const pszSocketName = cParsedMsg.GetArg(1).c_str();
			m_szFireSocketName = pszSocketName ? pszSocketName : "";
		}
		else
		{
			m_szFireSocketName = "";
		}

		Fire(pAI);
		return;
	}

	// Cinematic firing.

	if( cParsedMsg.GetArg(0) == s_cTok_CineFireWeapon )
	{
		Cinefire(pAI);
		return;
	}
}
Example #26
0
void Spawner::HandleSpawnMsg( HOBJECT hSender, const CParsedMsg &crParsedMsg )
{
    LTVector	vPos;
    LTRotation	rRot;
    const char *pName = "";

    // Spawn the target object from this spawners position...

    g_pLTServer->GetObjectPos( m_hObject, &vPos );
    g_pLTServer->GetObjectRotation( m_hObject, &rRot );

    // Rename the object if desired
    if( crParsedMsg.GetArgCount() > 1 )
    {
        pName = crParsedMsg.GetArg(1);
    }

    // Spawn using a target template...
    Spawn( m_sTarget.c_str(), pName, vPos, rRot );
}
Example #27
0
bool DecisionObject::OnTrigger(HOBJECT hSender, const CParsedMsg &cMsg)
{
	static CParsedMsg::CToken s_cTok_Start("START");
	static CParsedMsg::CToken s_cTok_On("ON");
	static CParsedMsg::CToken s_cTok_Stop("STOP");
	static CParsedMsg::CToken s_cTok_Off("OFF");
	static CParsedMsg::CToken s_cTok_Lock("LOCK");
	static CParsedMsg::CToken s_cTok_Unlock("UNLOCK");

	if ((cMsg.GetArg(0) == s_cTok_Start) ||
		(cMsg.GetArg(0) == s_cTok_On)
		)
	{
		HandleShow();
	}
	else if ((cMsg.GetArg(0) == s_cTok_Stop) ||
		(cMsg.GetArg(0) == s_cTok_Off)
		)
	{
		HandleAbort();
	}
	else if( cMsg.GetArg(0) == s_cTok_Lock )
	{
		m_bLock = true;
	}
	else if( cMsg.GetArg(0) == s_cTok_Unlock )
	{
		m_bLock = false;
	}
	else
		return GameBase::OnTrigger(hSender, cMsg);

	return true;
}
Example #28
0
void CAIMgr::OnDebugCmd( HOBJECT hSender, const CParsedMsg &crParsedMsg )
{
	// Hand the message to the correct subsystem.

	static CParsedMsg::CToken s_cTok_AIStimulusMgr("AIStimulusMgr");
	static CParsedMsg::CToken s_cTok_AIWorkingMemoryCentral("AIWorkingMemoryCentral");
	static CParsedMsg::CToken s_cTok_ListGoals("ListGoals");
	static CParsedMsg::CToken s_cTok_ListUnusedActions("ListUnusedActions");
	static CParsedMsg::CToken s_cTok_ListUnusedGoals("ListUnusedGoals");

	if ( crParsedMsg.GetArg(0) == s_cTok_AIStimulusMgr )
	{
		m_pAIStimulusMgr->OnAIDebugCmd( hSender, crParsedMsg );
	}
	else if ( crParsedMsg.GetArg(0) == s_cTok_AIWorkingMemoryCentral )
	{
		m_pAICentralMemory->OnAIDebugCmd( hSender, crParsedMsg );
	}
	else if ( crParsedMsg.GetArg(0) == s_cTok_ListGoals )
	{
		AIDebugUtils::PrintGoals();
	}	
	else if ( crParsedMsg.GetArg(0) == s_cTok_ListUnusedActions )
	{
		AIDebugUtils::PrintUnusedActions();
	}
	else if ( crParsedMsg.GetArg(0) == s_cTok_ListUnusedGoals )
	{
		AIDebugUtils::PrintUnusedGoals();
	}
	else
	{
		g_pLTServer->CPrint( "No AI command named: %s", crParsedMsg.GetArg(0).c_str() );
	}
}
Example #29
0
bool WorldModel::OnTrigger(HOBJECT hSender, const CParsedMsg &cMsg)
{
	static CParsedMsg::CToken s_cTok_Attach(KEY_ATTACH);
	static CParsedMsg::CToken s_cTok_Detach(KEY_DETACH);
	static CParsedMsg::CToken s_cTok_AttachClass("ATTACHCLASS");
	static CParsedMsg::CToken s_cTok_Destroy( "DESTROY" );
	static CParsedMsg::CToken s_cTok_Activate( "ACTIVATE" );

	if( cMsg.GetArg(0) == s_cTok_Attach && cMsg.GetArgCount() == 1 )
	{
		HandleAttachMsg( cMsg, "Prop" );
	}
	else if( cMsg.GetArg(0) == s_cTok_Attach && cMsg.GetArgCount() > 1 )
	{
		HandleAttachMsg( cMsg, LTNULL );
	}
	else if( cMsg.GetArg(0) == s_cTok_Detach )
	{
		HandleDetachMsg( cMsg );
	}
	else if( cMsg.GetArg(0) == s_cTok_AttachClass && cMsg.GetArgCount() == 2 )
	{
		HandleAttachMsg( cMsg, cMsg.GetArg(1).c_str() );
	}
	else if( cMsg.GetArg(0) == s_cTok_Destroy )
	{
		// Allow the WorldModel to be destroyed and then let the aggregate destroy it...
		
		m_DamageModel.SetNeverDestroy( LTFALSE );
	}
	else if( cMsg.GetArg(0) == s_cTok_Activate )
	{
		HandleActivateMsg( hSender, cMsg );
	}
	else
		return GameBase::OnTrigger(hSender, cMsg);

	return true;
}
Example #30
0
void Turret::HandleHiddenMsg( HOBJECT hSender, const CParsedMsg &crParsedMsg )
{
	static CParsedMsg::CToken s_cTok_1("1");
	static CParsedMsg::CToken s_cTok_True("TRUE");
	static CParsedMsg::CToken s_cTok_0("0");
	static CParsedMsg::CToken s_cTok_False("FALSE");

	// Hide the base model as usual...
	GameBase::HandleHiddenMsg( hSender, crParsedMsg );

	// Now control the hidden state of the weapon model...
	if( (crParsedMsg.GetArg(1) == s_cTok_1) ||
		(crParsedMsg.GetArg(1) == s_cTok_True) )
	{
		m_Arsenal.HideWeapons( true );
	}
	else if( (crParsedMsg.GetArg(1) == s_cTok_0) ||
			 (crParsedMsg.GetArg(1) == s_cTok_False) )
	{
		m_Arsenal.HideWeapons( false );
	}
}