Code:
MSGHANDLER cScr_NVModify::OnModify(sScrMsg* pMsg, sMultiParm* pReply, eScrTraceAction eTrace)
{
SService<IPropertySrv> pPropSrv(g_pScriptManager);
cMultiParm mpReturn;
int iSelection = static_cast<int>(m_iSelection);
char sz[24];
char szProp[22];
char szProp2[22];
float fNewValue, fOperand;
const char* pszOperator;
for ( int i = 0; i < 20; ++i )
{
sprintf(szProp, "NVModify%iProp%i", iSelection, i);
sprintf(szProp2, "NVModify%iSubProp%i", iSelection, i);
const char* pszProp = ParamGetString(m_iObjId, szProp, NULL);
const char* pszSubPropName = ParamGetString(m_iObjId, szProp2, NULL);
if (pszProp == NULL )
continue;
char *pszSubProp = new char[strlen(pszSubPropName) + 12];
for ( int j = 0; j < 2; ++j )
{
if ( ( !stricmp(pszProp, "BaseGunDesc") ) || (!stricmp(pszProp, "GunKick") ) )
sprintf(pszSubProp, "Setting %i: %s", j, pszSubPropName);
else
strcpy(pszSubProp, pszSubPropName);
pPropSrv->Get(mpReturn, m_iObjId, pszProp, pszSubProp);
fNewValue = static_cast<float>(mpReturn);
sprintf(sz, "NVModify%iOperand%i", iSelection, i);
fOperand = ParamGetFloat(m_iObjId, sz, 1.20);
sprintf(sz, "NVModify%iOperator%i", iSelection, i);
pszOperator = ParamGetString(m_iObjId, sz, "*");
switch (pszOperator[0])
{
case '*':
fNewValue *= fOperand;
break;
case '/':
fNewValue /= fOperand;
break;
case '+':
fNewValue += fOperand;
break;
case '-':
fNewValue -= fOperand;
break;
case '=':
fNewValue = fOperand;
break;
}
pPropSrv->Set(m_iObjId, pszProp, pszSubProp, fNewValue);
}
delete[] pszSubProp;
}
StopOverlay();
g_pScriptManager->SetTimedMessage2(m_iObjId, "StartOverlay", 20, kSTM_OneShot, g_mpUndef);
return 0;
}