本文整理汇总了C++中CContainer::OnContTriggerForLoop方法的典型用法代码示例。如果您正苦于以下问题:C++ CContainer::OnContTriggerForLoop方法的具体用法?C++ CContainer::OnContTriggerForLoop怎么用?C++ CContainer::OnContTriggerForLoop使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CContainer
的用法示例。
在下文中一共展示了CContainer::OnContTriggerForLoop方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ADDTOCALLSTACK
TRIGRET_TYPE CContainer::OnContTriggerForLoop( CScript &s, CTextConsole * pSrc, CScriptTriggerArgs * pArgs, CGString * pResult, CScriptLineContext & StartContext, CScriptLineContext & EndContext, RESOURCE_ID_BASE rid, DWORD dwArg, int iDecendLevels )
{
ADDTOCALLSTACK("CContainer::OnContTriggerForLoop");
if ( rid.GetResIndex() != 0 )
{
CItem* pItem = GetContentHead();
CItem * pItemNext;
for ( ; pItem!=NULL; pItem=pItemNext)
{
pItemNext = pItem->GetNext();
if ( pItem->IsResourceMatch( rid, dwArg ))
{
s.SeekContext( StartContext );
TRIGRET_TYPE iRet = pItem->OnTriggerRun( s, TRIGRUN_SECTION_TRUE, pSrc, pArgs, pResult );
if ( iRet == TRIGRET_BREAK )
{
EndContext = StartContext;
break;
}
if (( iRet != TRIGRET_ENDIF ) && ( iRet != TRIGRET_CONTINUE ))
return( iRet );
if ( iRet == TRIGRET_CONTINUE )
EndContext = StartContext;
else
EndContext = s.GetContext();
}
if ( iDecendLevels <= 0 )
continue;
CItemContainer * pCont = dynamic_cast <CItemContainer*>(pItem);
if ( pCont != NULL )
{
if ( pCont->IsSearchable())
{
CContainer * pContBase = dynamic_cast <CContainer *> (pCont);
TRIGRET_TYPE iRet = pContBase->OnContTriggerForLoop( s, pSrc, pArgs, pResult, StartContext, EndContext, rid, dwArg, iDecendLevels-1 );
if ( iRet != TRIGRET_ENDIF )
{
return( iRet );
}
// Since the previous call has already found the EndContext, set it.
EndContext = s.GetContext();
}
}
}
}
if ( EndContext.m_lOffset <= StartContext.m_lOffset )
{
CScriptObj * pScript = dynamic_cast <CScriptObj *> (this);
TRIGRET_TYPE iRet = pScript->OnTriggerRun( s, TRIGRUN_SECTION_FALSE, pSrc, pArgs, pResult );
if ( iRet != TRIGRET_ENDIF )
return( iRet );
}
else
s.SeekContext( EndContext );
return( TRIGRET_ENDIF );
}
示例2: OnTriggerRun
//.........这里部分代码省略.........
{
CObjBase * pObj = pCurUid.ObjFind();
if ( pObj && pObj->IsContainer() )
{
CContainer * pContThis = dynamic_cast <CContainer *> (pObj);
CScriptLineContext StartContext = s.GetContext();
CScriptLineContext EndContext = StartContext;
iRet = pContThis->OnGenericContTriggerForLoop( s, pSrc, pArgs, pResult, StartContext, EndContext, ppArgs[1] != NULL ? Exp_GetVal(ppArgs[1]) : 255 );
break;
}
}
}
}
}
case SK_FORCONTID:
case SK_FORCONTTYPE:
{
EXC_SET(m_ExcKeys[12]);
CContainer * pCont = dynamic_cast <CContainer *> (this);
if ( pCont )
{
if ( s.HasArgs() )
{
LPCTSTR pszKey = s.GetArgRaw();
SKIP_SEPERATORS(pszKey);
TCHAR * ppArgs[2];
Str_ParseCmds( (TCHAR*) pszKey, ppArgs, COUNTOF(ppArgs), " \t," );
CScriptLineContext StartContext = s.GetContext();
CScriptLineContext EndContext = StartContext;
#ifdef _WIN32
iRet = pCont->OnContTriggerForLoop( s, pSrc, pArgs, pResult, StartContext, EndContext, g_Cfg.ResourceGetID( ( iCmd == SK_FORCONTID ) ? RES_ITEMDEF : RES_TYPEDEF, ppArgs[0] ), 0, ppArgs[1] != NULL ? Exp_GetVal( ppArgs[1] ) : 255 );
#else
iRet = pCont->OnContTriggerForLoop( s, pSrc, pArgs, pResult, StartContext, EndContext, g_Cfg.ResourceGetID( ( iCmd == SK_FORCONTID ) ? RES_ITEMDEF : RES_TYPEDEF, (const char*&) ppArgs[0] ), 0, ppArgs[1] != NULL ? Exp_GetVal( ppArgs[1] ) : 255 );
#endif
break;
}
}
}
default:
// Parse out any variables in it. (may act like a verb sometimes?)
EXC_SET(m_ExcKeys[0]);
ParseText( s.GetArgRaw(), pSrc, 0, pArgs );
}
switch ( iCmd )
{
case SK_FORITEM:
case SK_FORCHAR:
case SK_FORCHARLAYER:
case SK_FORCHARMEMORYTYPE:
case SK_FORCLIENTS:
case SK_FORCONT:
case SK_FORCONTID:
case SK_FORCONTTYPE:
case SK_FOROBJ:
case SK_FORPLAYERS:
case SK_FOR:
case SK_WHILE:
if ( iRet != TRIGRET_ENDIF )
{
if ( iRet > TRIGRET_RET_DEFAULT )
{
DEBUG_MSG(( "WARNING: Trigger Bad For Ret %d '%s','%s'\n", iRet, s.GetKey(), s.GetArgStr()));