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; }
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; }