本文整理汇总了C++中CCodeChainCtx::DefineString方法的典型用法代码示例。如果您正苦于以下问题:C++ CCodeChainCtx::DefineString方法的具体用法?C++ CCodeChainCtx::DefineString怎么用?C++ CCodeChainCtx::DefineString使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CCodeChainCtx
的用法示例。
在下文中一共展示了CCodeChainCtx::DefineString方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Translate
bool CLanguageDataBlock::Translate (CSpaceObject *pObj, const CString &sID, ICCItem **retpResult) const
// Translate
//
// Translates to an item. The caller is responsible for discarding.
{
// If we can't find this ID then we can't translate
SEntry *pEntry = m_Data.GetAt(sID);
if (pEntry == NULL)
return false;
// If we don't need to run code then we just return the string.
if (pEntry->pCode == NULL)
{
*retpResult = g_pUniverse->GetCC().CreateString(pEntry->sText);
return true;
}
// Otherwise we have to run some code
CCodeChainCtx Ctx;
Ctx.SaveAndDefineSourceVar(pObj);
Ctx.DefineString(CONSTLIT("aTextID"), sID);
*retpResult = Ctx.Run(pEntry->pCode); // LATER:Event
return true;
}
示例2: FireOnDamageOverlay
bool CWeaponFireDesc::FireOnDamageOverlay (SDamageCtx &Ctx, CEnergyField *pOverlay)
// FireOnDamageOverlay
//
// Fire OnDamageOverlay event. Returns TRUE if we should skip further overlay damage
{
SEventHandlerDesc Event;
if (FindEventHandler(evtOnDamageOverlay, &Event))
{
// Setup arguments
CCodeChainCtx CCCtx;
CCCtx.SaveAndDefineSourceVar(Ctx.pObj);
CCCtx.DefineInteger(CONSTLIT("aArmorSeg"), Ctx.iSectHit);
CCCtx.DefineInteger(CONSTLIT("aOverlayID"), pOverlay->GetID());
CCCtx.DefineSpaceObject(CONSTLIT("aCause"), Ctx.pCause);
CCCtx.DefineSpaceObject(CONSTLIT("aAttacker"), Ctx.Attacker.GetObj());
CCCtx.DefineSpaceObject(CONSTLIT("aOrderGiver"), (Ctx.Attacker.GetObj() ? Ctx.Attacker.GetObj()->GetOrderGiver(Ctx.Attacker.GetCause()) : NULL));
CCCtx.DefineVector(CONSTLIT("aHitPos"), Ctx.vHitPos);
CCCtx.DefineInteger(CONSTLIT("aHitDir"), Ctx.iDirection);
CCCtx.DefineInteger(CONSTLIT("aDamageHP"), Ctx.iDamage);
CCCtx.DefineString(CONSTLIT("aDamageType"), GetDamageShortName(Ctx.Damage.GetDamageType()));
CCCtx.DefineItemType(CONSTLIT("aWeaponType"), Ctx.pDesc->GetWeaponType());
ICCItem *pResult = CCCtx.Run(Event);
if (pResult->IsError())
Ctx.pObj->ReportEventError(ON_DAMAGE_OVERLAY_EVENT, pResult);
// If we return Nil, then we continue processing
bool bResult;
if (pResult->IsNil())
bResult = false;
// Otherwise, the result is the damage left
else
{
Ctx.iDamage = pResult->GetIntegerValue();
bResult = true;
}
CCCtx.Discard(pResult);
return bResult;
}
else
return false;
}
示例3: FireOnGameEnd
void CAdventureDesc::FireOnGameEnd (const CGameRecord &Game, const SBasicGameStats &BasicStats)
// FireOnGameEnd
//
// Fire OnGameEnd event
{
SEventHandlerDesc Event;
if (FindEventHandler(ON_GAME_END_EVENT, &Event))
{
CCodeChainCtx Ctx;
// Initialize variables
Ctx.DefineInteger(CONSTLIT("aScore"), Game.GetScore());
Ctx.DefineInteger(CONSTLIT("aResurrectCount"), Game.GetResurrectCount());
Ctx.DefineInteger(CONSTLIT("aSystemsVisited"), BasicStats.iSystemsVisited);
Ctx.DefineInteger(CONSTLIT("aEnemiesDestroyed"), BasicStats.iEnemiesDestroyed);
Ctx.DefineInteger(CONSTLIT("aBestEnemiesDestroyed"), BasicStats.iBestEnemyDestroyedCount);
if (BasicStats.dwBestEnemyDestroyed)
Ctx.DefineInteger(CONSTLIT("aBestEnemyClass"), BasicStats.dwBestEnemyDestroyed);
else
Ctx.DefineNil(CONSTLIT("aBestEnemyClass"));
Ctx.DefineString(CONSTLIT("aEndGameReason"), Game.GetEndGameReason());
Ctx.DefineString(CONSTLIT("aEpitaph"), Game.GetEndGameEpitaph());
Ctx.DefineString(CONSTLIT("aEpitaphOriginal"), Game.GetEndGameEpitaph());
Ctx.DefineString(CONSTLIT("aTime"), Game.GetPlayTimeString());
// Invoke
ICCItem *pResult = Ctx.Run(Event);
if (pResult->IsError())
kernelDebugLogMessage("OnGameEnd error: %s", pResult->GetStringValue());
Ctx.Discard(pResult);
}
}
示例4: FireOnFragment
bool CWeaponFireDesc::FireOnFragment (const CDamageSource &Source, CSpaceObject *pShot, const CVector &vHitPos, CSpaceObject *pNearestObj, CSpaceObject *pTarget)
// FireOnFragment
//
// Event fires when a shot fragments. If we return TRUE then we skip the default
// fragmentation event.
{
SEventHandlerDesc Event;
if (FindEventHandler(evtOnFragment, &Event))
{
// Setup arguments
CCodeChainCtx CCCtx;
CCCtx.SaveAndDefineSourceVar(pShot);
CCCtx.DefineSpaceObject(CONSTLIT("aNearestObj"), pNearestObj);
CCCtx.DefineSpaceObject(CONSTLIT("aTargetObj"), pTarget);
CCCtx.DefineVector(CONSTLIT("aHitPos"), vHitPos);
CCCtx.DefineInteger(CONSTLIT("aHitDir"), (pShot ? pShot->GetRotation() : 0));
CCCtx.DefineItemType(CONSTLIT("aWeaponType"), GetWeaponType());
CCCtx.DefineString(CONSTLIT("aWeaponFragment"), m_sUNID);
CSpaceObject *pAttacker = Source.GetObj();
CCCtx.DefineSpaceObject(CONSTLIT("aCause"), pShot);
CCCtx.DefineSpaceObject(CONSTLIT("aAttacker"), pAttacker);
CCCtx.DefineSpaceObject(CONSTLIT("aOrderGiver"), (pAttacker ? pAttacker->GetOrderGiver(Source.GetCause()) : NULL));
ICCItem *pResult = CCCtx.Run(Event);
if (pResult->IsError())
pShot->ReportEventError(ON_FRAGMENT_EVENT, pResult);
// If we return Nil, then we continue processing
bool bResult;
if (pResult->IsNil())
bResult = false;
// Otherwise, we skip fragmentation
else
bResult = true;
CCCtx.Discard(pResult);
return bResult;
}
else
return false;
}
示例5: FireOnArmorDamage
void CArmorClass::FireOnArmorDamage (CItemCtx &ItemCtx, SDamageCtx &Ctx)
// FireOnArmorDamage
//
// Fires OnArmorDamage event
{
SEventHandlerDesc Event;
if (FindEventHandlerArmorClass(evtOnArmorDamage, &Event))
{
// Setup arguments
CCodeChainCtx CCCtx;
CCCtx.SaveAndDefineSourceVar(ItemCtx.GetSource());
CCCtx.SaveAndDefineItemVar(ItemCtx);
CCCtx.DefineInteger(CONSTLIT("aArmorHP"), Ctx.iHPLeft);
CCCtx.DefineInteger(CONSTLIT("aArmorSeg"), Ctx.iSectHit);
CCCtx.DefineSpaceObject(CONSTLIT("aAttacker"), Ctx.Attacker.GetObj());
CCCtx.DefineSpaceObject(CONSTLIT("aCause"), Ctx.pCause);
CCCtx.DefineDamageEffects(CONSTLIT("aDamageEffects"), Ctx);
CCCtx.DefineInteger(CONSTLIT("aDamageHP"), Ctx.iDamage);
CCCtx.DefineString(CONSTLIT("aDamageType"), GetDamageShortName(Ctx.Damage.GetDamageType()));
CCCtx.DefineInteger(CONSTLIT("aHitDir"), Ctx.iDirection);
CCCtx.DefineVector(CONSTLIT("aHitPos"), Ctx.vHitPos);
CCCtx.DefineSpaceObject(CONSTLIT("aOrderGiver"), (Ctx.Attacker.GetObj() ? Ctx.Attacker.GetObj()->GetOrderGiver(Ctx.Attacker.GetCause()) : NULL));
CCCtx.DefineItemType(CONSTLIT("aWeaponType"), Ctx.pDesc->GetWeaponType());
ICCItem *pResult = CCCtx.Run(Event);
// If we return Nil, then nothing
if (pResult->IsNil())
NULL;
// If we return an integer, then this is the damage that armor should take
else if (pResult->IsInteger())
Ctx.iDamage = pResult->GetIntegerValue();
// If we return a list, then we it to be a DamageEffects list (modifications to
// aDamageEffects)
else if (pResult->IsList())
LoadDamageEffectsFromItem(pResult, Ctx);
CCCtx.Discard(pResult);
}
}
示例6: FireOnSetPlayerTarget
void CMission::FireOnSetPlayerTarget (const CString &sReason)
// FireOnSetPlayerTarget
//
// Fire <OnSetPlayerTarget>
{
SEventHandlerDesc Event;
if (FindEventHandler(EVENT_ON_SET_PLAYER_TARGET, &Event))
{
CCodeChainCtx Ctx;
Ctx.SaveAndDefineSourceVar(this);
Ctx.DefineString(STR_A_REASON, sReason);
ICCItem *pResult = Ctx.Run(Event);
if (pResult->IsError())
ReportEventError(EVENT_ON_SET_PLAYER_TARGET, pResult);
Ctx.Discard(pResult);
}
}
示例7: FireOnStop
void CMission::FireOnStop (const CString &sReason, ICCItem *pData)
// FireOnStop
//
// Fire <OnCompleted>
{
SEventHandlerDesc Event;
if (FindEventHandler(EVENT_ON_COMPLETED, &Event))
{
CCodeChainCtx Ctx;
Ctx.SaveAndDefineSourceVar(this);
Ctx.SaveAndDefineDataVar(pData);
Ctx.DefineString(STR_A_REASON, sReason);
ICCItem *pResult = Ctx.Run(Event);
if (pResult->IsError())
ReportEventError(EVENT_ON_COMPLETED, pResult);
Ctx.Discard(pResult);
}
}
示例8: Translate
CLanguageDataBlock::ETranslateResult CLanguageDataBlock::Translate (CSpaceObject *pObj, const CString &sID, TArray<CString> *retText, CString *retsText) const
// Translate
//
// Translates an entry to either a string or an array of strings.
{
int i;
// If we can't find this ID then we can't translate
SEntry *pEntry = m_Data.GetAt(sID);
if (pEntry == NULL)
return resultNotFound;
// If we don't want the text back then all we need to do is return that we
// have the text.
if (retText == NULL && retsText == NULL)
return resultFound;
// If we don't need to run code then we just return the string.
if (pEntry->pCode == NULL)
{
if (retsText)
{
*retsText = ::ComposePlayerNameString(pEntry->sText, g_pUniverse->GetPlayerName(), g_pUniverse->GetPlayerGenome());
return resultString;
}
else
return resultFound;
}
// Otherwise we have to run some code
CCodeChainCtx Ctx;
Ctx.SaveAndDefineSourceVar(pObj);
Ctx.DefineString(CONSTLIT("aTextID"), sID);
ICCItem *pResult = Ctx.Run(pEntry->pCode); // LATER:Event
ETranslateResult iResult;
// Nil
if (pResult->IsNil())
iResult = resultNotFound;
// List of strings
else if (pResult->GetCount() > 1)
{
if (retText)
{
CString sPlayerName = g_pUniverse->GetPlayerName();
GenomeTypes iPlayerGenome = g_pUniverse->GetPlayerGenome();
retText->DeleteAll();
retText->InsertEmpty(pResult->GetCount());
for (i = 0; i < pResult->GetCount(); i++)
retText->GetAt(i) = ::ComposePlayerNameString(pResult->GetElement(i)->GetStringValue(), sPlayerName, iPlayerGenome);
iResult = resultArray;
}
else
iResult = resultFound;
}
// String
else
{
if (retsText)
{
*retsText = ::ComposePlayerNameString(pResult->GetStringValue(), g_pUniverse->GetPlayerName(), g_pUniverse->GetPlayerGenome());
iResult = resultString;
}
else
iResult = resultFound;
}
// Done
Ctx.Discard(pResult);
return iResult;
}
示例9: FireOnDamageShields
bool CWeaponFireDesc::FireOnDamageShields (SDamageCtx &Ctx, int iDevice)
// FireOnDamageShields
//
// Fire OnDamageShields event. Returns TRUE if we should skip further shields damage
{
SEventHandlerDesc Event;
if (FindEventHandler(evtOnDamageShields, &Event))
{
// Setup arguments
CCodeChainCtx CCCtx;
CItemListManipulator ItemList(Ctx.pObj->GetItemList());
CShip *pShip = Ctx.pObj->AsShip();
if (pShip)
pShip->SetCursorAtDevice(ItemList, iDevice);
CCCtx.SaveAndDefineSourceVar(Ctx.pObj);
CCCtx.DefineInteger(CONSTLIT("aArmorSeg"), Ctx.iSectHit);
CCCtx.DefineInteger(CONSTLIT("aDevice"), iDevice);
CCCtx.DefineItem(CONSTLIT("aDeviceItem"), ItemList.GetItemAtCursor());
CCCtx.DefineSpaceObject(CONSTLIT("aCause"), Ctx.pCause);
CCCtx.DefineSpaceObject(CONSTLIT("aAttacker"), Ctx.Attacker.GetObj());
CCCtx.DefineSpaceObject(CONSTLIT("aOrderGiver"), (Ctx.Attacker.GetObj() ? Ctx.Attacker.GetObj()->GetOrderGiver(Ctx.Attacker.GetCause()) : NULL));
CCCtx.DefineVector(CONSTLIT("aHitPos"), Ctx.vHitPos);
CCCtx.DefineInteger(CONSTLIT("aHitDir"), Ctx.iDirection);
CCCtx.DefineInteger(CONSTLIT("aDamageHP"), Ctx.iDamage);
CCCtx.DefineString(CONSTLIT("aDamageType"), GetDamageShortName(Ctx.Damage.GetDamageType()));
CCCtx.DefineItemType(CONSTLIT("aWeaponType"), Ctx.pDesc->GetWeaponType());
CCCtx.DefineInteger(CONSTLIT("aShieldHP"), Ctx.iHPLeft);
CCCtx.DefineInteger(CONSTLIT("aShieldDamageHP"), Ctx.iShieldDamage);
CCCtx.DefineInteger(CONSTLIT("aArmorDamageHP"), Ctx.iDamage - Ctx.iAbsorb);
if (Ctx.bReflect)
{
CCCtx.DefineString(CONSTLIT("aShieldReflect"), STR_SHIELD_REFLECT);
CCCtx.DefineInteger(CONSTLIT("aOriginalShieldDamageHP"), Ctx.iOriginalShieldDamage);
CCCtx.DefineInteger(CONSTLIT("aOriginalArmorDamageHP"), Ctx.iDamage - Ctx.iOriginalAbsorb);
}
else
{
CCCtx.DefineNil(CONSTLIT("aShieldReflect"));
CCCtx.DefineInteger(CONSTLIT("aOriginalShieldDamageHP"), Ctx.iShieldDamage);
CCCtx.DefineInteger(CONSTLIT("aOriginalArmorDamageHP"), Ctx.iDamage - Ctx.iAbsorb);
}
ICCItem *pResult = CCCtx.Run(Event);
// If we return Nil, then we continue processing
bool bResult;
if (pResult->IsNil())
bResult = false;
// If this is an integer, we pass damage to armor
else if (pResult->IsInteger())
{
Ctx.iDamage = pResult->GetIntegerValue();
bResult = true;
}
// If we return a list, then modify variables
else if (pResult->IsList())
{
// A single value means we modified the damage to armor
if (pResult->GetCount() == 1)
{
if (strEquals(pResult->GetElement(0)->GetStringValue(), STR_SHIELD_REFLECT))
{
Ctx.bReflect = true;
Ctx.iAbsorb = Ctx.iDamage;
Ctx.iShieldDamage = 0;
}
else
{
Ctx.iShieldDamage = Max(0, Min(pResult->GetElement(0)->GetIntegerValue(), Ctx.iHPLeft));
if (Ctx.bReflect)
{
Ctx.bReflect = false;
Ctx.iAbsorb = Ctx.iOriginalAbsorb;
}
}
}
// Two values mean we modified both damage to armor and shield damage
else if (pResult->GetCount() == 2)
{
Ctx.bReflect = false;
Ctx.iShieldDamage = Max(0, Min(pResult->GetElement(0)->GetIntegerValue(), Ctx.iHPLeft));
Ctx.iAbsorb = Max(0, Ctx.iDamage - Max(0, pResult->GetElement(1)->GetIntegerValue()));
}
// Otherwise, we deal with reflection
//.........这里部分代码省略.........