static unsigned long long
get_arg_value(struct event_format *event, struct filter_arg *arg, struct pevent_record *record)
{
	switch (arg->type) {
	case FILTER_ARG_FIELD:
		return get_value(event, arg->field.field, record);

	case FILTER_ARG_VALUE:
		if (arg->value.type != FILTER_NUMBER)
			die("must have number field!");
		return arg->value.val;

	case FILTER_ARG_EXP:
		return get_exp_value(event, arg, record);

	default:
		die("oops in filter");
	}
	return 0;
}
Ejemplo n.º 2
0
bool GameProcess::Execute(GameProcCfg* pData)
{
	if ( !pData )
	{
		return false;
	}

	vector<string> exp_list;
	StringUtil::StringSplit(pData->trigger_condition,";",exp_list);

	for ( size_t i = 0;i<exp_list.size();++i )
	{
		if ( !get_exp_value(exp_list[i]) )
		{
			return false;
		}
	}
	
	bool ret = false;

	switch (pData->func_type)
	{
	case GameProcFuncType_Succ: ret = true; break;
	case GameProcFuncType_Animation: ret = true; break;
	case GameProcFuncType_Drama:
		{
			vector<string> params;
			if ( 2 != StringUtil::StringSplit(pData->params,",",params) )
			{
				LOGE("GameProcess::Execute params[%s] error.",pData->params.c_str());
				break;
			}
			if( gGameUILayer->isActive(IDU_Drama) )
			{
				ret = true;
				break;
			}
			DramaUI* pDrama = (DramaUI*)gGameUILayer->open(IDU_Drama);
			if ( pDrama )
			{
				pDrama->showDramaByParam(atoi(params[0].c_str()),atoi(params[1].c_str()));

				ret = true;
			}
		}
		break;
	case GameProcFuncType_Guide: 
		{
			int guideid = atoi(pData->params.c_str());
			if ( guideid == 0 )
			{
				LOGE("GameProcess::Execute params[%s] guideid is 0.",pData->params.c_str());
			}
			gHero->GetGuidePtr()->OpenGuide(guideid);
			ret = true;
		}
		break;
	case GameProcFuncType_SystemMsg: 
		{

		}
		break;
	default:
		break;
	}

	if ( pData->type == GameProcType_Main )
	{
		if ( ret )
		{
			SetStepID(pData->succ > 0 ? pData->succ : m_nStepID + 1);
		}
		else
		{
			SetStepID(pData->fail > 0 ? pData->fail : m_nStepID);
		}
	}
	return true;
}