Beispiel #1
0
bool CXmlScriptSaver::HaveValue( const char * name )
{
	ScriptAnyValue value;
	if (CurTable()->GetValueAny( name, value ))
		if (value.GetVarType() != svtNull)
			return true;
	return false;
}
Beispiel #2
0
bool CXmlScriptSaver::HaveElemAt( int elem )
{
	ScriptAnyValue value;
	if (CurTable()->GetAtAny( elem, value ))
		if (value.GetVarType() != svtNull)
			return true;
	return false;
}
Beispiel #3
0
int CScriptBind_HUD::BattleLogEvent(IFunctionHandler *pH, int type, const char *msg)
{
	CHUD *pHUD = g_pGame->GetHUD();
	if(pHUD)
	{
		string p[4];
		for (int i=0;i<pH->GetParamCount()-2;i++)
		{
			switch(pH->GetParamType(3+i))
			{
			case svtPointer:
				{
					ScriptHandle sh;
					pH->GetParam(3+i, sh);

					if (IEntity *pEntity=gEnv->pEntitySystem->GetEntity((EntityId)sh.n))
						p[i]=pEntity->GetName();
				}
				break;
			default:
				{
					ScriptAnyValue value;
					pH->GetParamAny(3+i, value);
					switch(value.GetVarType())
					{
					case svtNumber:
						p[i].Format("%g", value.number);
						break;
					case svtString:
						p[i]=value.str;
						break;
					case svtBool:
						p[i]=value.b?"true":"false";
						break;
					default:
						break;
					}			
				}
				break;
			}
		}

		pHUD->BattleLogEvent(type, msg, p[0].c_str(), p[1].c_str(), p[2].c_str(), p[3].c_str());
	}

	return pH->EndFunction();
}
	virtual void ProcessEvent( EFlowEvent event, SActivationInfo *pActInfo )
	{
		switch (event)
		{
		case eFE_Activate:
			if (IsPortActive(pActInfo, INP_TRIGGER))
			{
				IEntity* pEntity = pActInfo->pEntity;
				if (pEntity)
				{ 
					int damage = GetPortInt(pActInfo, INP_DAMAGE);
					if (damage==0)
					{
						int damageRelative = GetPortInt( pActInfo, INP_RELATIVEDAMAGE );
						if (IScriptTable* pScriptTable = pEntity->GetScriptTable())
						{
							IScriptSystem* pSS = pScriptTable->GetScriptSystem();
							if (pScriptTable->GetValueType("GetMaxHealth") == svtFunction &&	pSS->BeginCall(pScriptTable, "GetMaxHealth"))
							{
								pSS->PushFuncParam(pScriptTable);
								ScriptAnyValue result;
								if (pSS->EndCallAny( result ))
								{
									int maxHealth = 0;
									if (result.CopyTo( maxHealth ))
									{
										damage = ( damageRelative * maxHealth ) / 100;
									}
								}
							}
						}
					}
					
					SendFlowHitToEntity( pEntity->GetId(), pEntity->GetId(), damage, GetPortVec3(pActInfo, INP_POSITION) );
				}
			}
			break;
		}
	}
static bool GetRadioSoundName(CGameRules *gr, const string &teamName, const int groupId, const int keyId, char **ppSoundName = 0, char **ppSoundText = 0, int *pVariations = 0)
{
	SmartScriptTable radioTable;

	if(!GetTeamRadioTable(gr, teamName, radioTable))
	{
		return false;
	}

	SmartScriptTable groupTable;

	if(!radioTable->GetAt(groupId, groupTable))
	{
		return false;
	}

	SmartScriptTable soundTable;

	if(!groupTable->GetAt(keyId, soundTable))
	{
		return false;
	}

	ScriptAnyValue soundName;
	ScriptAnyValue soundText;
	ScriptAnyValue soundVariations = 1;

	if(!soundTable->GetAtAny(1, soundName) || !soundTable->GetAtAny(2, soundText))
	{
		return false;
	}

	soundTable->GetAtAny(3, soundVariations);

	if(pVariations)
	{
		soundVariations.CopyTo(*pVariations);
	}

	if(ppSoundName)
	{
		if(!soundName.CopyTo(*ppSoundName))
		{
			return false;
		}
	}

	if(ppSoundText)
	{
		if(!soundText.CopyTo(*ppSoundText))
		{
			return false;
		}
	}

	return true;
}
int CScriptBind_GameToken::SetToken( IFunctionHandler *pH)
{
	SCRIPT_CHECK_PARAMETERS(2);
	const char* tokenName = 0;
	if (pH->GetParams(tokenName) == false)
	{
		GameWarning("[GameToken.SetToken] Usage: GameToken.SetToken TokenName TokenValue]");
		return pH->EndFunction();
	}
	ScriptAnyValue val;
	TFlowInputData data;

	if (pH->GetParamAny( 2, val) == false)
	{
		GameWarning("[GameToken.SetToken(%s)] Usage: GameToken.SetToken TokenName TokenValue]", tokenName);
		return pH->EndFunction();
	}
	switch (val.type)
	{
	case ANY_TBOOLEAN:
		{ 
			bool v; 
			val.CopyTo(v); 	
			data.Set(v);
		}
		break;
	case ANY_TNUMBER:
		{ 
			float v; 
			val.CopyTo(v); 		
			data.Set(v);
		}
		break;
	case ANY_TSTRING:
		{ 
			const char* v;
			val.CopyTo(v); 		
			data.Set(string(v));
		}
		break;
	case ANY_TVECTOR:
		{ 
			Vec3 v; 
			val.CopyTo(v); 		
			data.Set(v);
		}
	case ANY_TTABLE:
		{
			float x,y,z;
			IScriptTable * pTable = val.table;
			assert (pTable != 0);
			if (pTable->GetValue( "x", x ) && pTable->GetValue( "y", y ) && pTable->GetValue( "z", z ))
			{
				data.Set(Vec3(x,y,z));
			}
			else
			{
				GameWarning("[GameToken.SetToken(%s)] Cannot convert parameter type '%s' to Vec3", tokenName, ScriptAnyTypeToString(val.type));
				return pH->EndFunction();
			}
		}
		break;
	case ANY_THANDLE:
		{
			ScriptHandle handle;
			val.CopyTo(handle);
			data.Set((EntityId)handle.n);
		}
		break;
	default:
		GameWarning("[GameToken.SetToken(%s)] Cannot convert parameter type '%s'", tokenName, ScriptAnyTypeToString(val.type));
		return pH->EndFunction();
		break; // dummy ;-)
	}
#ifdef SCRIPT_GAMETOKEN_ALWAYS_CREATE
	m_pTokenSystem->SetOrCreateToken(tokenName, data);
#else
	IGameToken *pToken = m_pTokenSystem->FindToken(tokenName);
	if (!pToken)
		GameWarning("[GameToken.SetToken] Cannot find token '%s'", tokenName);
	else
	{
		pToken->SetValue(data);
	}
#endif
	return pH->EndFunction();
}