bool CWebPageDef::r_WriteVal( LPCTSTR pszKey, CGString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CWebPageDef::r_WriteVal"); EXC_TRY("WriteVal"); switch ( FindTableSorted( pszKey, sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case WC_PLEVEL: sVal.FormatVal( m_privlevel ); break; case WC_WEBPAGEFILE: sVal = m_sDstFilePath; break; case WC_WEBPAGELOG: sVal.FormatVal( m_iUpdateLog ); break; case WC_WEBPAGESRC: sVal = m_sSrcFilePath; break; case WC_WEBPAGEUPDATE: // (seconds) sVal.FormatVal( m_iUpdatePeriod / TICK_PER_SEC ); break; default: return( g_Serv.r_WriteVal( pszKey, sVal, pSrc )); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CItemMap::r_WriteVal(LPCTSTR pszKey, CGString &sVal, CTextConsole *pSrc) { ADDTOCALLSTACK("CItemMap::r_WriteVal"); EXC_TRY("WriteVal"); if ( !strnicmp(pszKey, "PINS", 4) ) { sVal.FormatVal(m_Pins.GetCount()); return true; } if ( !strnicmp(pszKey, "PIN.", 4) ) { pszKey += 4; size_t i = Exp_GetVal(pszKey) - 1; if ( m_Pins.IsValidIndex(i) ) { sVal.Format("%i,%i", m_Pins[i].m_x, m_Pins[i].m_y); return true; } } return CItemVendable::r_WriteVal(pszKey, sVal, pSrc); EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CContainer::r_WriteValContainer(LPCTSTR pszKey, CGString & sVal, CTextConsole *pSrc) { ADDTOCALLSTACK("CContainer::r_WriteValContainer"); EXC_TRY("WriteVal"); static LPCTSTR const sm_szParams[] = { "count", "fcount", "rescount", "restest" }; int i = FindTableHeadSorted(pszKey, sm_szParams, COUNTOF(sm_szParams)); if ( i < 0 ) return false; LPCTSTR pKey = pszKey + strlen(sm_szParams[i]); SKIP_SEPARATORS(pKey); switch ( i ) { case 0: // count { int iTotal = 0; for ( CItem* pItem = GetContentHead(); pItem != NULL; pItem = pItem->GetNext() ) iTotal++; sVal.FormatVal(iTotal); } break; case 1: // fcount sVal.FormatVal(ContentCountAll()); break; case 2: // rescount sVal.FormatVal(*pKey ? ContentCount(g_Cfg.ResourceGetID(RES_ITEMDEF, pKey)) : GetCount()); break; case 3: // restest { CResourceQtyArray Resources; sVal.FormatVal(Resources.Load(pKey) ? ResourceConsume(&Resources, 1, true) : 0); } break; default: return false; } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CSkillClassDef::r_WriteVal( LPCTSTR pszKey, CGString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CSkillClassDef::r_WriteVal"); EXC_TRY("WriteVal"); switch ( FindTableSorted( pszKey, sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case SCC_NAME: // "NAME" sVal = m_sName; break; case SCC_SKILLSUM: sVal.FormatVal( m_SkillSumMax ); break; case SCC_STATSUM: sVal.FormatVal( m_StatSumMax ); break; default: { int i = g_Cfg.FindSkillKey( pszKey); if ( i != SKILL_NONE ) { ASSERT( i >= 0 && static_cast<size_t>(i) < COUNTOF(m_SkillLevelMax)); sVal.FormatVal( m_SkillLevelMax[i] ); break; } i = g_Cfg.FindStatKey( pszKey); if ( i >= 0 ) { ASSERT( static_cast<size_t>(i) < COUNTOF(m_StatMax)); sVal.FormatVal( m_StatMax[i] ); break; } } return( CResourceDef::r_WriteVal( pszKey, sVal, pSrc )); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CRegionResourceDef::r_WriteVal( LPCTSTR pszKey, CGString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CRegionResourceDef::r_WriteVal"); EXC_TRY("r_WriteVal"); // RES_REGIONRESOURCE switch ( FindTableSorted( pszKey, sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case RMC_AMOUNT: sVal = m_Amount.Write(); break; case RMC_REAP: // "REAP", { CItemBase * pItemDef = CItemBase::FindItemBase(m_ReapItem); if ( !pItemDef ) { return false; } sVal = pItemDef->GetResourceName(); } break; case RMC_REAPAMOUNT: sVal = m_ReapAmount.Write(); break; case RMC_REGEN: sVal = m_iRegenerateTime.Write(); break; case RMC_SKILL: sVal = m_Skill.Write(); break; default: return( CResourceDef::r_WriteVal( pszKey, sVal, pSrc )); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CItemVendable::r_WriteVal(LPCTSTR pszKey, CGString &sVal, CTextConsole *pSrc) { ADDTOCALLSTACK("CItemVendable::r_WriteVal"); EXC_TRY("WriteVal"); switch ( FindTableSorted( pszKey, sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case IVC_PRICE: // PRICE sVal.FormatVal( m_price ); return true; case IVC_QUALITY: // QUALITY sVal.FormatVal( GetQuality()); return true; default: return CItem::r_WriteVal( pszKey, sVal, pSrc ); } EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CItemMessage::r_WriteVal(LPCTSTR pszKey, CGString &sVal, CTextConsole *pSrc) { ADDTOCALLSTACK("CItemMessage::r_WriteVal"); EXC_TRY("WriteVal"); // Load the message body for a book or a bboard message. if ( !strnicmp(pszKey, "BODY", 4) ) { pszKey += 4; size_t iPage = Exp_GetVal(pszKey); if ( m_sBodyLines.IsValidIndex(iPage) == false ) return false; sVal = *m_sBodyLines[iPage]; return true; } switch ( FindTableSorted(pszKey, sm_szLoadKeys, COUNTOF(sm_szLoadKeys) - 1) ) { case CIC_AUTHOR: sVal = m_sAuthor; return true; case CIC_BODY: // handled above return false; case CIC_PAGES: // not settable (used for resource stuff) sVal.FormatVal(m_sBodyLines.GetCount()); return true; case CIC_TITLE: sVal = GetName(); return true; } return CItemVendable::r_WriteVal(pszKey, sVal, pSrc); EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CBaseBaseDef::r_WriteVal( LPCTSTR pszKey, CGString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CBaseBaseDef::r_WriteVal"); EXC_TRY("WriteVal"); bool fZero = false; int index = FindTableHeadSorted( pszKey, sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 ); switch ( index ) { //return as string or hex number or NULL if not set case OBC_CATEGORY: case OBC_DESCRIPTION: case OBC_SUBSECTION: case OBC_HITSPELL: case OBC_SLAYER: case OBC_SLAYERLESSER: case OBC_SLAYERMISC: case OBC_SLAYERSUPER: case OBC_ABILITYPRIMARY: case OBC_ABILITYSECONDARY: case OBC_MANABURST: sVal = GetDefStr(pszKey, false); break; //return as decimal number or 0 if not set case OBC_BALANCED: case OBC_BANE: case OBC_BATTLELUST: case OBC_BLOODDRINKER: case OBC_CASTINGFOCUS: case OBC_DAMCHAOS: case OBC_DAMCOLD: case OBC_DAMDIRECT: case OBC_DAMENERGY: case OBC_DAMFIRE: case OBC_DAMMODIFIER: case OBC_DAMPHYSICAL: case OBC_DECREASEHITCHANCE: case OBC_DAMPOISON: case OBC_EATERCOLD: case OBC_EATERDAM: case OBC_EATERENERGY: case OBC_EATERFIRE: case OBC_EATERKINETIC: case OBC_EATERPOISON: case OBC_ENHANCEPOTIONS: case OBC_EXPANSION: case OBC_FASTERCASTING: case OBC_FASTERCASTRECOVERY: case OBC_HITAREACOLD: case OBC_HITAREAENERGY: case OBC_HITAREAFIRE: case OBC_HITAREAPHYSICAL: case OBC_HITAREAPOISON: case OBC_HITCURSE: case OBC_HITDISPEL: case OBC_HITFATIGUE: case OBC_HITFIREBALL: case OBC_HITHARM: case OBC_HITLEECHLIFE: case OBC_HITLEECHMANA: case OBC_HITLEECHSTAM: case OBC_HITLIGHTNING: case OBC_HITLOWERATK: case OBC_HITLOWERDEF: case OBC_HITMAGICARROW: case OBC_HITMANADRAIN: case OBC_INCREASEDAM: case OBC_INCREASEDEFCHANCE: case OBC_INCREASEDEFCHANCEMAX: case OBC_INCREASEHITCHANCE: case OBC_INCREASEGOLD: case OBC_INCREASEKARMALOSS: case OBC_INCREASESPELLDAM: case OBC_INCREASESWINGSPEED: case OBC_LOWERAMMOCOST: case OBC_LOWERMANACOST: case OBC_LOWERREAGENTCOST: case OBC_LOWERREQ: case OBC_LUCK: case OBC_MANABURSTFREQUENCY: case OBC_MANABURSTKARMA: case OBC_NIGHTSIGHT: case OBC_RAGEFOCUS: case OBC_REACTIVEPARALYZE: case OBC_REFLECTPHYSICALDAM: case OBC_REGENFOOD: case OBC_REGENHITS: case OBC_REGENMANA: case OBC_REGENSTAM: case OBC_REGENVALFOOD: case OBC_REGENVALHITS: case OBC_REGENVALMANA: case OBC_REGENVALSTAM: case OBC_RESCOLD: case OBC_RESFIRE: case OBC_RESENERGY: case OBC_RESPHYSICAL: case OBC_RESPOISON: case OBC_RESCOLDMAX: case OBC_RESFIREMAX: case OBC_RESENERGYMAX: case OBC_RESPHYSICALMAX: case OBC_RESPOISONMAX: case OBC_RESONANCECOLD: case OBC_RESONANCEENERGY: case OBC_RESONANCEFIRE: case OBC_RESONANCEKINETIC: case OBC_RESONANCEPOISON: case OBC_SOULCHARGE: case OBC_SOULCHARGECOLD: case OBC_SOULCHARGEENERGY: case OBC_SOULCHARGEFIRE: case OBC_SOULCHARGEKINETIC: case OBC_SOULCHARGEPOISON: case OBC_SPELLCONSUMPTION: case OBC_SPELLFOCUSING: case OBC_SPLINTERINGWEAPON: case OBC_VELOCITY: case OBC_SPELLCHANNELING: case OBC_NAMELOC: case OBC_HITSPELLSTR: case OBC_WEIGHTREDUCTION: case OBC_COMBATBONUSSTAT: case OBC_COMBATBONUSPERCENT: sVal.FormatLLVal(GetDefNum(pszKey, true)); break; case OBC_DEFNAME: sVal = GetResourceName(); break; case OBC_ARMOR: { pszKey += strlen(sm_szLoadKeys[index]); // 9; if ( *pszKey == '.' ) { SKIP_SEPARATORS( pszKey ); if ( !strnicmp( pszKey, "LO", 2 ) ) { sVal.Format( "%d", m_defenseBase ); } else if ( !strnicmp( pszKey, "HI", 2 ) ) { sVal.Format( "%d", m_defenseBase+m_defenseRange ); } } else { sVal.Format( "%d,%d", m_defenseBase, m_defenseBase+m_defenseRange ); } } break; case OBC_DAM: { pszKey += strlen(sm_szLoadKeys[index]); // 9; if ( *pszKey == '.' ) { SKIP_SEPARATORS( pszKey ); if ( !strnicmp( pszKey, "LO", 2 ) ) { sVal.Format( "%d", m_attackBase ); } else if ( !strnicmp( pszKey, "HI", 2 ) ) { sVal.Format( "%d", m_attackBase+m_attackRange ); } } else { sVal.Format( "%d,%d", m_attackBase, m_attackBase+m_attackRange ); } } break; case OBC_BASEID: sVal = g_Cfg.ResourceGetName( GetResourceID()); break; case OBC_CAN: sVal.FormatHex( m_Can ); break; case OBC_HEIGHT: { //CBaseBaseDef * pBaseBaseDef = dynamic_cast<CBaseBaseDef*>(this); //DEBUG_ERR(("OBC_HEIGHT - m_dwDispIndex %d GetHeight() %d pBaseBaseDef->GetHeight() %d pBaseBaseDef 0x%x\n",m_wDispIndex,GetHeight(),pBaseBaseDef->GetHeight(),pBaseBaseDef)); sVal.FormatVal( GetHeight() ); } break; case OBC_INSTANCES: sVal.FormatVal( GetRefInstances()); break; case OBC_NAME: sVal = GetName(); break; case OBC_RANGE: if ( RangeH() == 0 ) sVal.Format( "%d", RangeL() ); else sVal.Format( "%d,%d", RangeH(), RangeL() ); break; case OBC_RANGEL: // internally: rangel seems to be Range Highest value sVal.FormatVal( RangeH() ); break; case OBC_RANGEH: // but rangeh seems to be the Range Lowest value. sVal.FormatVal( RangeL() ); break; case OBC_RESOURCES: // Print the resources { pszKey += strlen(sm_szLoadKeys[index]); // 9; if ( *pszKey == '.' ) { SKIP_SEPARATORS( pszKey ); if ( !strnicmp( pszKey, "COUNT", 5 )) { sVal.FormatVal(m_BaseResources.GetCount()); } else { bool fQtyOnly = false; bool fKeyOnly = false; index = Exp_GetVal( pszKey ); SKIP_SEPARATORS( pszKey ); if ( !strnicmp( pszKey, "KEY", 3 )) fKeyOnly = true; else if ( !strnicmp( pszKey, "VAL", 3 )) fQtyOnly = true; TCHAR *pszTmp = Str_GetTemp(); m_BaseResources.WriteKeys( pszTmp, index, fQtyOnly, fKeyOnly ); if ( fQtyOnly && pszTmp[0] == '\0' ) strcpy( pszTmp, "0" ); sVal = pszTmp; } } else { TCHAR *pszTmp = Str_GetTemp(); m_BaseResources.WriteKeys( pszTmp ); sVal = pszTmp; } } break; case OBC_RESLEVEL: sVal.FormatVal( GetResLevel() ); break; case OBC_RESDISPDNHUE: sVal.FormatHex( GetResDispDnHue() ); break; case OBC_TAG0: fZero = true; pszKey++; case OBC_TAG: // "TAG" = get/set a local tag. if ( pszKey[3] != '.' ) return( false ); pszKey += 4; sVal = m_TagDefs.GetKeyStr(pszKey, fZero ); break; case OBC_TEVENTS: m_TEvents.WriteResourceRefList( sVal ); break; default: return false; } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CPartyDef::r_WriteVal( LPCTSTR pszKey, CGString &sVal, CTextConsole *pSrc ) { ADDTOCALLSTACK("CPartyDef::r_WriteVal"); EXC_TRY("WriteVal"); CScriptObj *pRef; if ( r_GetRef(pszKey, pRef) ) { if ( pRef == NULL ) // good command but bad link. { sVal = "0"; return true; } if ( pszKey[0] == '\0' ) // we where just testing the ref. { CObjBase *pObj = dynamic_cast<CObjBase *>(pRef); if ( pObj ) sVal.FormatHex(static_cast<DWORD>(pObj->GetUID())); else sVal.FormatVal(1); return true; } return pRef->r_WriteVal(pszKey, sVal, pSrc); } bool fZero = false; switch ( FindTableHeadSorted(pszKey, sm_szLoadKeys, COUNTOF(sm_szLoadKeys) - 1) ) { case PDC_ISSAMEPARTYOF: { pszKey += 13; GETNONWHITESPACE(pszKey); if ( pszKey[0] != '\0' ) { CGrayUID uidToCheck = static_cast<CGrayUID>(Exp_GetVal(pszKey)); CChar *pCharToCheck = uidToCheck.CharFind(); sVal.FormatVal(pCharToCheck && (pCharToCheck->m_pParty == this)); } else return false; } break; case PDC_MEMBERS: sVal.FormatVal(m_Chars.GetCharCount()); break; case PDC_SPEECHFILTER: sVal = m_pSpeechFunction.IsEmpty() ? "" : m_pSpeechFunction; break; case PDC_TAG0: fZero = true; pszKey++; case PDC_TAG: { if ( pszKey[3] != '.' ) return false; pszKey += 4; sVal = m_TagDefs.GetKeyStr(pszKey, fZero); } break; case PDC_TAGAT: { pszKey += 5; // eat the 'TAGAT' if ( *pszKey == '.' ) // do we have an argument? { SKIP_SEPARATORS(pszKey); size_t iQty = static_cast<size_t>(Exp_GetVal(pszKey)); if ( iQty >= m_TagDefs.GetCount() ) return false; // trying to get non-existant tag CVarDefCont *pTagAt = m_TagDefs.GetAt(iQty); if ( !pTagAt ) return false; // trying to get non-existant tag SKIP_SEPARATORS(pszKey); if ( !*pszKey ) { sVal.Format("%s=%s", pTagAt->GetKey(), pTagAt->GetValStr()); return true; } else if ( !strnicmp(pszKey, "KEY", 3) ) { sVal = pTagAt->GetKey(); return true; } else if ( !strnicmp(pszKey, "VAL", 3) ) { sVal = pTagAt->GetValStr(); return true; } } return false; } case PDC_TAGCOUNT: sVal.FormatVal(m_TagDefs.GetCount()); break; default: return false; } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CSkillDef::r_WriteVal( LPCTSTR pszKey, CGString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CSkillDef::r_WriteVal"); EXC_TRY("WriteVal"); switch ( FindTableSorted( pszKey, sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case SKC_ADV_RATE: // ADV_RATE=Chance at 100, Chance at 50, chance at 0 sVal = m_AdvRate.Write(); break; case SKC_BONUS_DEX: // "BONUS_DEX" sVal.FormatVal( m_StatBonus[STAT_DEX] ); break; case SKC_BONUS_INT: // "BONUS_INT" sVal.FormatVal( m_StatBonus[STAT_INT] ); break; case SKC_BONUS_STR: // "BONUS_STR" sVal.FormatVal( m_StatBonus[STAT_STR] ); break; // case SKC_DEFNAME: // "DEFNAME" case SKC_DELAY: sVal = m_Delay.Write(); break; case SKC_EFFECT: sVal = m_Effect.Write(); break; case SKC_FLAGS: sVal.FormatHex( m_dwFlags ); break; case SKC_GROUP: sVal.FormatHex( m_dwGroup ); break; case SKC_KEY: // "KEY" sVal = m_sKey; break; case SKC_NAME: // "NAME" sVal = m_sName.IsEmpty() ? m_sKey : m_sName; break; case SKC_PROMPT_MSG: // "PROMPT_MSG" sVal = m_sTargetPrompt; break; case SKC_RANGE: sVal.FormatVal(m_Range); break; case SKC_BONUS_STATS: // "BONUS_STATS" sVal.FormatVal( m_StatPercent ); break; case SKC_STAT_DEX: // "STAT_DEX" sVal.FormatVal( m_Stat[STAT_DEX] ); break; case SKC_STAT_INT: // "STAT_INT" sVal.FormatVal( m_Stat[STAT_INT] ); break; case SKC_STAT_STR: // "STAT_STR" sVal.FormatVal( m_Stat[STAT_STR] ); break; case SKC_TITLE: // "TITLE" sVal = m_sTitle; break; case SKC_VALUES: // VALUES = 100,50,0 price levels. sVal = m_Values.Write(); break; case SKC_GAINRADIUS: // "GAINRADIUS" sVal.FormatVal( m_GainRadius ); break; default: return( CResourceDef::r_WriteVal( pszKey, sVal, pSrc )); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CServerDef::r_WriteVal( lpctstr pszKey, CSString &sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CServerDef::r_WriteVal"); EXC_TRY("WriteVal"); switch ( FindTableSorted( pszKey, sm_szLoadKeys, CountOf( sm_szLoadKeys )-1 ) ) { case SC_ACCAPP: sVal.FormatVal( m_eAccApp ); break; case SC_ACCAPPS: // enum string ASSERT( m_eAccApp >= 0 && m_eAccApp < ACCAPP_QTY ); sVal = sm_AccAppTable[ m_eAccApp ]; break; case SC_ADMINEMAIL: sVal = m_sEMail; break; case SC_AGE: // display the age in days. sVal.FormatLLVal( GetAgeHours()/24 ); break; case SC_CLIENTVERSION: { char szVersion[ 128 ]; sVal = m_ClientVersion.WriteClientVer( szVersion ); } break; case SC_CREATE: sVal.FormatLLVal( -( g_World.GetTimeDiff(m_timeCreate) / TICK_PER_SEC ) ); break; case SC_LANG: sVal = m_sLang; break; case SC_LASTVALIDDATE: if ( m_timeLastValid.IsTimeValid() ) sVal.FormatLLVal( GetTimeSinceLastValid() / ( TICK_PER_SEC * 60 ) ); else sVal = "NA"; break; case SC_LASTVALIDTIME: // How many seconds ago. sVal.FormatLLVal( m_timeLastValid.IsTimeValid() ? ( GetTimeSinceLastValid() / TICK_PER_SEC ) : -1 ); break; case SC_SERVIP: sVal = m_ip.GetAddrStr(); break; case SC_NAME: case SC_SERVNAME: sVal = GetName(); // What the name should be. Fill in from ping. break; case SC_SERVPORT: sVal.FormatVal( m_ip.GetPort() ); break; case SC_ACCOUNTS: sVal.FormatSTVal( StatGet( SERV_STAT_ACCOUNTS ) ); break; case SC_CLIENTS: sVal.FormatSTVal( StatGet( SERV_STAT_CLIENTS ) ); break; case SC_ITEMS: sVal.FormatSTVal( StatGet( SERV_STAT_ITEMS ) ); break; case SC_MEM: sVal.FormatSTVal( StatGet( SERV_STAT_MEM ) ); break; case SC_CHARS: sVal.FormatSTVal( StatGet( SERV_STAT_CHARS ) ); break; case SC_TIMEZONE: sVal.FormatVal( m_TimeZone ); break; case SC_URL: sVal = m_sURL; break; case SC_URLLINK: // try to make a link of it. if ( m_sURL.IsEmpty() ) { sVal = GetName(); break; } sVal.Format("<a href=\"http://%s\">%s</a>", static_cast<lpctstr>(m_sURL), GetName()); break; case SC_VERSION: sVal = SPHERE_VERSION; break; default: { lpctstr pszArgs = strchr(pszKey, ' '); if (pszArgs != NULL) GETNONWHITESPACE(pszArgs); CScriptTriggerArgs Args( pszArgs ? pszArgs : "" ); if ( r_Call( pszKey, pSrc, &Args, &sVal ) ) return true; return CScriptObj::r_WriteVal( pszKey, sVal, pSrc ); } } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CCharPlayer::r_WriteVal( CChar * pChar, LPCTSTR pszKey, CGString & sVal ) { ADDTOCALLSTACK("CCharPlayer::r_WriteVal"); EXC_TRY("WriteVal"); if ( !pChar || !GetAccount() ) return false; if ( !strnicmp(pszKey, "SKILLCLASS.", 11) ) { return GetSkillClass()->r_WriteVal(pszKey + 11, sVal, pChar); } else if ( ( !strnicmp(pszKey, "GUILD", 5) ) || ( !strnicmp(pszKey, "TOWN", 4) ) ) { bool bIsGuild = !strnicmp(pszKey, "GUILD", 5); pszKey += bIsGuild ? 5 : 4; if ( *pszKey == 0 ) { CItemStone *pMyGuild = pChar->Guild_Find(bIsGuild ? MEMORY_GUILD : MEMORY_TOWN); if ( pMyGuild ) sVal.FormatHex((DWORD)pMyGuild->GetUID()); else sVal.FormatVal(0); return true; } else if ( *pszKey == '.' ) { pszKey += 1; CItemStone *pMyGuild = pChar->Guild_Find(bIsGuild ? MEMORY_GUILD : MEMORY_TOWN); if ( pMyGuild ) return pMyGuild->r_WriteVal(pszKey, sVal, pChar); } return false; } switch ( FindTableHeadSorted( pszKey, sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case CPC_ACCOUNT: sVal = GetAccount()->GetName(); return( true ); case CPC_DEATHS: sVal.FormatVal( m_wDeaths ); return( true ); case CPC_DSPEECH: m_Speech.WriteResourceRefList( sVal ); return( true ); case CPC_KILLS: sVal.FormatVal( m_wMurders ); return( true ); case CPC_KRTOOLBARSTATUS: sVal.FormatVal( m_bKrToolbarEnabled ); return true; case CPC_ISDSPEECH: if ( pszKey[9] != '.' ) return( false ); pszKey += 10; sVal = m_Speech.ContainsResourceName(RES_SPEECH, pszKey) ? "1" : "0"; return( true ); case CPC_LASTUSED: sVal.FormatLLVal( - g_World.GetTimeDiff( m_timeLastUsed ) / TICK_PER_SEC ); return( true ); case CPC_PFLAG: sVal.FormatVal(m_pflag); return( true ); case CPC_PROFILE: { TCHAR szLine[SCRIPT_MAX_LINE_LEN-16]; Str_MakeUnFiltered( szLine, m_sProfile, sizeof(szLine)); sVal = szLine; } return( true ); case CPC_REFUSETRADES: { CVarDefCont * pVar = pChar->GetDefKey(pszKey, true); sVal.FormatLLVal(pVar ? pVar->GetValNum() : 0); } return( true ); case CPC_SKILLCLASS: sVal = GetSkillClass()->GetResourceName(); return( true ); case CPC_SKILLLOCK: { // "SkillLock[alchemy]" SKILL_TYPE skill = Skill_GetLockType( pszKey ); if ( skill <= SKILL_NONE ) return( false ); sVal.FormatVal( Skill_GetLock( skill )); } return( true ); case CPC_SPEEDMODE: sVal.FormatVal( m_speedMode ); return( true ); case CPC_STATLOCK: { // "StatLock[str]" STAT_TYPE stat = Stat_GetLockType( pszKey ); if (( stat <= STAT_NONE ) || ( stat >= STAT_BASE_QTY )) return( false ); sVal.FormatVal( Stat_GetLock( stat )); } return( true ); default: if ( FindTableSorted( pszKey, CCharNPC::sm_szLoadKeys, COUNTOF( CCharNPC::sm_szLoadKeys )-1 ) >= 0 ) { sVal = "0"; return( true ); } return( false ); } EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pChar); EXC_DEBUG_END; return false; }
bool CClient::r_WriteVal(LPCTSTR pszKey, CGString &sVal, CTextConsole *pSrc) { ADDTOCALLSTACK("CClient::r_WriteVal"); EXC_TRY("WriteVal"); if ( !strnicmp("CTAG.", pszKey, 5) ) { if ( pszKey[4] != '.' ) return false; pszKey += 5; CVarDefCont *pVar = m_TagDefs.GetKey(pszKey); sVal = pVar ? pVar->GetValStr() : ""; return true; } if ( !strnicmp("CTAG0.", pszKey, 6) ) { if ( pszKey[5] != '.' ) return false; pszKey += 6; CVarDefCont *pVar = m_TagDefs.GetKey(pszKey); sVal = pVar ? pVar->GetValStr() : "0"; return true; } int index; if ( !strnicmp("TARGP", pszKey, 5) && ((pszKey[5] == '\0') || (pszKey[5] == '.')) ) index = CC_TARGP; else if ( !strnicmp("SCREENSIZE", pszKey, 10) && ((pszKey[10] == '\0') || (pszKey[10] == '.')) ) index = CC_SCREENSIZE; else if ( !strnicmp("REPORTEDCLIVER", pszKey, 14) && ((pszKey[14] == '\0') || (pszKey[14] == '.')) ) index = CC_REPORTEDCLIVER; else index = FindTableSorted(pszKey, sm_szLoadKeys, COUNTOF(sm_szLoadKeys) - 1); switch ( index ) { case CC_ALLMOVE: sVal.FormatVal(IsPriv(PRIV_ALLMOVE)); break; case CC_ALLSHOW: sVal.FormatVal(IsPriv(PRIV_ALLSHOW)); break; case CC_CLIENTIS3D: sVal.FormatVal(m_NetState->isClient3D()); break; case CC_CLIENTISKR: sVal.FormatVal(m_NetState->isClientKR()); break; case CC_CLIENTISSA: sVal.FormatVal(m_NetState->isClientEnhanced()); break; case CC_CLIENTVERSION: { TCHAR szVersion[128]; sVal = m_Crypt.WriteClientVerString(m_Crypt.GetClientVer(), szVersion); break; } case CC_DEBUG: sVal.FormatVal(IsPriv(PRIV_DEBUG)); break; case CC_DETAIL: sVal.FormatVal(IsPriv(PRIV_DETAIL)); break; case CC_GM: sVal.FormatVal(IsPriv(PRIV_GM)); break; case CC_HEARALL: sVal.FormatVal(IsPriv(PRIV_HEARALL)); break; case CC_LASTEVENT: sVal.FormatLLVal(m_timeLastEvent.GetTimeRaw()); break; case CC_PRIVSHOW: sVal.FormatVal(!IsPriv(PRIV_PRIV_NOSHOW)); break; case CC_REPORTEDCLIVER: { pszKey += 14; GETNONWHITESPACE(pszKey); DWORD dwCliVer = m_NetState->getReportedVersion(); if ( pszKey[0] == '\0' ) { // Return full version string (eg: 5.0.2d) TCHAR szVersion[128]; sVal = CCrypt::WriteClientVerString(dwCliVer, szVersion); } else { // Return raw version number (eg: 5.0.2d = 5000204) sVal.FormatUVal(dwCliVer); } break; } case CC_SCREENSIZE: { if ( pszKey[10] == '.' ) { pszKey += 10; SKIP_SEPARATORS(pszKey); if ( !strnicmp("X", pszKey, 1) ) sVal.Format("%hu", m_ScreenSize.x); else if ( !strnicmp("Y", pszKey, 1) ) sVal.Format("%hu", m_ScreenSize.y); else return false; } else sVal.Format("%hu,%hu", m_ScreenSize.x, m_ScreenSize.y); break; } case CC_TARG: sVal.FormatHex(m_Targ_UID); break; case CC_TARGP: { if ( pszKey[5] == '.' ) return m_Targ_p.r_WriteVal(pszKey + 6, sVal); sVal = m_Targ_p.WriteUsed(); break; } case CC_TARGPROP: sVal.FormatHex(m_Prop_UID); break; case CC_TARGPRV: sVal.FormatHex(m_Targ_PrvUID); break; case CC_TARGTXT: sVal = m_Targ_Text; break; default: return CScriptObj::r_WriteVal(pszKey, sVal, pSrc); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CItemStone::r_WriteVal( LPCTSTR pszKey, CGString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CItemStone::r_WriteVal"); EXC_TRY("WriteVal"); CChar * pCharSrc = pSrc->GetChar(); if ( !strnicmp("member.",pszKey,7) ) { LPCTSTR pszCmd = pszKey + 7; if ( !strnicmp("COUNT",pszCmd,5) ) { pszCmd = pszCmd + 5; int i = 0; CStoneMember * pMember = STATIC_CAST <CStoneMember *>(GetHead()); if ( *pszCmd ) { SKIP_ARGSEP(pszCmd); STONEPRIV_TYPE iPriv = static_cast<STONEPRIV_TYPE>(Exp_GetVal(pszCmd)); for (; pMember != NULL; pMember = pMember->GetNext()) { if ( !pMember->GetLinkUID().IsChar() ) continue; if ( pMember->GetPriv() != iPriv ) continue; i++; } } else { for (; pMember != NULL; pMember = pMember->GetNext()) { if (!pMember->GetLinkUID().IsChar()) continue; i++; } } sVal.FormatVal(i); return true; } int nNumber = Exp_GetVal(pszCmd); SKIP_SEPARATORS(pszCmd); CStoneMember * pMember = STATIC_CAST <CStoneMember *>(GetHead()); sVal.FormatVal(0); for ( int i = 0 ; pMember != NULL; pMember = pMember->GetNext() ) { if (!pMember->GetLinkUID().IsChar()) continue; if ( nNumber == i ) { if (!pszCmd[0]) return true; return pMember->r_WriteVal(pszCmd, sVal, pSrc); } i++; } return true; } else if ( !strnicmp("memberfromuid.", pszKey, 14) ) { LPCTSTR pszCmd = pszKey + 14; sVal.FormatVal(0); if ( !pszCmd[0] ) return true; CGrayUID pMemberUid = static_cast<DWORD>(Exp_GetVal(pszCmd)); SKIP_SEPARATORS(pszCmd); CChar * pMemberChar = pMemberUid.CharFind(); if ( pMemberChar ) { CStoneMember * pMemberGuild = GetMember( pMemberChar ); if ( pMemberGuild ) { return pMemberGuild->r_WriteVal(pszCmd, sVal, pSrc); } } return true; } else if ( !strnicmp("guild.",pszKey,6) ) { LPCTSTR pszCmd = pszKey + 6; if ( !strnicmp("COUNT",pszCmd,5) ) { pszCmd = pszCmd + 5; int i = 0; CStoneMember * pMember = STATIC_CAST <CStoneMember *>(GetHead()); if ( *pszCmd ) { SKIP_ARGSEP(pszCmd); int iToCheck = Exp_GetVal(pszCmd); for (; pMember != NULL; pMember = pMember->GetNext()) { if ( pMember->GetLinkUID().IsChar() ) continue; if ( ( iToCheck == 1 ) && ( pMember->GetWeDeclared() && !pMember->GetTheyDeclared() ) ) i++; else if ( ( iToCheck == 2 ) && ( !pMember->GetWeDeclared() && pMember->GetTheyDeclared() ) ) i++; else if ( ( iToCheck == 3 ) && ( pMember->GetWeDeclared() && pMember->GetTheyDeclared() ) ) i++; } } else { for (; pMember != NULL; pMember = pMember->GetNext()) { if (pMember->GetLinkUID().IsChar()) continue; i++; } } sVal.FormatVal(i); return true; } int nNumber = Exp_GetVal(pszCmd); SKIP_SEPARATORS(pszCmd); CStoneMember * pMember = STATIC_CAST <CStoneMember *>(GetHead()); sVal.FormatVal(0); for ( int i = 0 ; pMember != NULL; pMember = pMember->GetNext() ) { if (pMember->GetLinkUID().IsChar()) continue; if ( nNumber == i ) { if (!pszCmd[0]) return true; return pMember->r_WriteVal(pszCmd, sVal, pSrc); } i++; } return true; } else if ( !strnicmp("guildfromuid.", pszKey, 13) ) { LPCTSTR pszCmd = pszKey + 13; sVal.FormatVal(0); if ( !pszCmd[0] ) return true; CGrayUID pGuildUid = static_cast<DWORD>(Exp_GetVal(pszCmd)); SKIP_SEPARATORS(pszCmd); CItem * pMemberGuild = pGuildUid.ItemFind(); if ( pMemberGuild ) { CStoneMember * pGuild = GetMember( pMemberGuild ); if ( pGuild ) { return pGuild->r_WriteVal(pszCmd, sVal, pSrc); } } return true; } else if ( !strnicmp(sm_szLoadKeys[STC_CHARTER], pszKey, 7) ) { LPCTSTR pszCmd = pszKey + 7; unsigned int i = ATOI(pszCmd); if ( i >= COUNTOF(m_sCharter)) sVal = ""; else sVal = m_sCharter[i]; return( true ); } STC_TYPE iIndex = (STC_TYPE) FindTableSorted( pszKey, sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 ); switch ( iIndex ) { case STC_ABBREV: // "ABBREV" sVal = m_sAbbrev; return true; case STC_ALIGN: sVal.FormatVal( GetAlignType()); return true; case STC_WEBPAGE: // "WEBPAGE" sVal = GetWebPageURL(); return true; case STC_AbbreviationToggle: { CStoneMember * pMember = GetMember(pCharSrc); CVarDefCont * pResult = NULL; if ( pMember == NULL ) { pResult = g_Exp.m_VarDefs.GetKey("STONECONFIG_VARIOUSNAME_NONMEMBER"); } else { pResult = pMember->IsAbbrevOn() ? g_Exp.m_VarDefs.GetKey("STONECONFIG_VARIOUSNAME_ABBREVON") : g_Exp.m_VarDefs.GetKey("STONECONFIG_VARIOUSNAME_ABBREVOFF"); } sVal = pResult ? pResult->GetValStr() : ""; } return true; case STC_AlignType: sVal = GetAlignName(); return true; case STC_LoyalTo: { CStoneMember * pMember = GetMember(pCharSrc); CVarDefCont * pResult = NULL; if ( pMember == NULL ) { pResult = g_Exp.m_VarDefs.GetKey("STONECONFIG_VARIOUSNAME_NONMEMBER"); } else { CChar * pLoyalTo = pMember->GetLoyalToUID().CharFind(); if ((pLoyalTo == NULL) || (pLoyalTo == pCharSrc )) { pResult = g_Exp.m_VarDefs.GetKey("STONECONFIG_VARIOUSNAME_YOURSELF"); } else { sVal = pLoyalTo->GetName(); return true; } } sVal = pResult ? pResult->GetValStr() : ""; } return( true ); case STC_Master: { CChar * pMaster = GetMaster(); sVal = (pMaster) ? pMaster->GetName() : g_Exp.m_VarDefs.GetKeyStr("STONECONFIG_VARIOUSNAME_PENDVOTE"); } return( true ); case STC_MasterGenderTitle: { CChar * pMaster = GetMaster(); if ( pMaster == NULL ) sVal = ""; // If no master (vote pending) else if ( pMaster->Char_GetDef()->IsFemale()) sVal = g_Exp.m_VarDefs.GetKeyStr("STONECONFIG_VARIOUSNAME_MASTERGENDERFEMALE"); else sVal = g_Exp.m_VarDefs.GetKeyStr("STONECONFIG_VARIOUSNAME_MASTERGENDERMALE"); } return( true ); case STC_MasterTitle: { CStoneMember * pMember = GetMasterMember(); sVal = (pMember) ? pMember->GetTitle() : ""; } return( true ); case STC_MasterUid: { CChar * pMaster = GetMaster(); if ( pMaster ) sVal.FormatHex( (DWORD) pMaster->GetUID() ); else sVal.FormatHex( (DWORD) 0 ); } return( true ); default: return( CItem::r_WriteVal( pszKey, sVal, pSrc )); } EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CStoneMember::r_WriteVal( LPCTSTR pszKey, CGString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CStoneMember::r_WriteVal"); EXC_TRY("WriteVal"); STMM_TYPE iIndex = (STMM_TYPE) FindTableSorted( pszKey, sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 ); if ( GetLinkUID().IsChar() ) { switch ( iIndex ) { case STMM_ACCOUNTGOLD: sVal.FormatVal(GetAccountGold()); break; case STMM_ISMASTER: sVal.FormatVal(IsPrivMaster()); break; case STMM_ISMEMBER: sVal.FormatVal(IsPrivMember()); break; case STMM_LOYALTO: sVal.FormatHex(GetLoyalToUID()); break; case STMM_PRIV: sVal.FormatVal(GetPriv()); break; case STMM_PRIVNAME: sVal = GetPrivName(); break; case STMM_TITLE: sVal = GetTitle(); break; case STMM_SHOWABBREV: sVal.FormatVal(IsAbbrevOn()); break; case STMM_ISCANDIDATE: sVal.FormatVal((GetPriv() == STONEPRIV_CANDIDATE) ? 1 : 0); break; default: { CScriptObj *pRef = GetLinkUID().CharFind(); return pRef->r_WriteVal(pszKey,sVal,pSrc); } } } else if ( GetLinkUID().IsItem() ) { switch ( iIndex ) { case STMM_GUILD_ISENEMY: sVal.FormatVal(GetWeDeclared() && GetTheyDeclared()); break; case STMM_GUILD_THEYWAR: sVal.FormatVal(GetTheyDeclared()); break; case STMM_GUILD_WEWAR: sVal.FormatVal(GetWeDeclared()); break; case STMM_GUILD_WEALLIANCE: sVal.FormatVal(0); break; case STMM_GUILD_THEYALLIANCE: sVal.FormatVal(0); break; default: { CScriptObj *pRef = GetLinkUID().ItemFind(); return pRef->r_WriteVal(pszKey,sVal,pSrc); } } } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CRandGroupDef::r_WriteVal( LPCTSTR pszKey, CGString &sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CRandGroupDef::r_WriteVal"); EXC_TRY("WriteVal"); switch ( FindTableHeadSorted( pszKey, sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case RGC_CATEGORY: sVal = m_sCategory; break; case RGC_SUBSECTION: sVal = m_sSubsection; break; case RGC_DESCRIPTION: sVal = m_sDescription; break; case RGC_ID: case RGC_CONTAINER: { size_t i = GetRandMemberIndex(); if ( i != BadMemberIndex() ) sVal.FormatHex(GetMemberID(i) & 0xFFFFFF); break; } case RGC_CALCMEMBERINDEX: { pszKey += 15; GETNONWHITESPACE( pszKey ); if ( pszKey[0] == '\0' ) { sVal.FormatVal( GetRandMemberIndex(NULL, false) ); } else { CGrayUID uidTofind = static_cast<DWORD>(Exp_GetVal(pszKey)); CChar * pSend = uidTofind.CharFind(); if ( pSend ) { sVal.FormatVal( GetRandMemberIndex(pSend, false) ); } else { return false; } } } break; case RGC_DEFNAME: // "DEFNAME" sVal = GetResourceName(); break; case RGC_RESOURCES: { pszKey += 9; if ( *pszKey == '.' ) { SKIP_SEPARATORS( pszKey ); if ( !strnicmp( pszKey, "COUNT", 5 )) { sVal.FormatVal(m_Members.GetCount()); } else { bool fQtyOnly = false; bool fKeyOnly = false; int index = Exp_GetVal( pszKey ); SKIP_SEPARATORS( pszKey ); if ( !strnicmp( pszKey, "KEY", 3 )) fKeyOnly = true; else if ( !strnicmp( pszKey, "VAL", 3 )) fQtyOnly = true; TCHAR *pszTmp = Str_GetTemp(); m_Members.WriteKeys( pszTmp, index, fQtyOnly, fKeyOnly ); if ( fQtyOnly && pszTmp[0] == '\0' ) strcpy( pszTmp, "0" ); sVal = pszTmp; } } else { TCHAR *pszTmp = Str_GetTemp(); m_Members.WriteKeys( pszTmp ); sVal = pszTmp; } } break; default: return( CResourceDef::r_WriteVal( pszKey, sVal, pSrc )); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CSector::r_WriteVal( LPCTSTR pszKey, CGString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CSector::r_WriteVal"); EXC_TRY("WriteVal"); static const CValStr sm_ComplexityTitles[] = { { "HIGH", INT_MIN }, // speech can be very complex if low char count { "MEDIUM", 5 }, { "LOW", 10 }, { NULL, INT_MAX } }; switch ( FindTableHeadSorted( pszKey, sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case SC_CLIENTS: sVal.FormatVal(m_Chars_Active.HasClients()); return true; case SC_COLDCHANCE: sVal.FormatVal( GetColdChance()); return( true ); case SC_COMPLEXITY: if ( pszKey[10] == '.' ) { pszKey += 11; sVal = ( ! strcmpi( pszKey, sm_ComplexityTitles->FindName( GetCharComplexity()))) ? "1" : "0"; return( true ); } sVal.FormatVal( GetCharComplexity()); return( true ); case SC_FLAGS: sVal.FormatHex(m_dwFlags); return( true ); case SC_LIGHT: sVal.FormatVal(GetLight()); return true; case SC_LOCALTIME: sVal = GetLocalGameTime(); return( true ); case SC_LOCALTOD: sVal.FormatVal( GetLocalTime()); return( true ); case SC_NUMBER: sVal.FormatVal(m_index); return( true ); case SC_ISDARK: sVal.FormatVal( IsDark() ); return( true ); case SC_ISNIGHTTIME: { int iMinutes = GetLocalTime(); sVal = ( iMinutes < 7*60 || iMinutes > (9+12)*60 ) ? "1" : "0"; } return( true ); case SC_RAINCHANCE: sVal.FormatVal( GetRainChance()); return( true ); case SC_ITEMCOUNT: sVal.FormatVal(GetItemComplexity()); return true; case SC_SEASON: sVal.FormatVal(static_cast<int>(GetSeason())); return true; case SC_WEATHER: sVal.FormatVal(static_cast<int>(GetWeather())); return true; } EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CBaseBaseDef::r_WriteVal(LPCTSTR pszKey, CGString &sVal, CTextConsole *pSrc) { ADDTOCALLSTACK("CBaseBaseDef::r_WriteVal"); EXC_TRY("WriteVal"); bool fZero = false; switch ( FindTableHeadSorted(pszKey, sm_szLoadKeys, COUNTOF(sm_szLoadKeys) - 1) ) { // Return as string or hex number (NULL if not set) case OBC_CATEGORY: case OBC_DESCRIPTION: case OBC_SUBSECTION: sVal = GetDefStr(pszKey, false); break; // Return as decimal number (0 if not set) case OBC_COMBATBONUSPERCENT: case OBC_COMBATBONUSSTAT: case OBC_DAMCHAOS: case OBC_DAMDIRECT: case OBC_EXPANSION: case OBC_NAMELOC: case OBC_REGENFOOD: case OBC_REGENHITS: case OBC_REGENMANA: case OBC_REGENSTAM: case OBC_REGENVALFOOD: case OBC_REGENVALHITS: case OBC_REGENVALMANA: case OBC_REGENVALSTAM: sVal.FormatLLVal(GetDefNum(pszKey)); break; case OBC_ARMOR: { pszKey += 5; if ( *pszKey == '.' ) { SKIP_SEPARATORS(pszKey); if ( !strnicmp(pszKey, "LO", 2) ) sVal.Format("%hu", m_defenseBase); else if ( !strnicmp(pszKey, "HI", 2) ) sVal.Format("%hu", m_defenseBase + m_defenseRange); } else sVal.Format("%hu,%hu", m_defenseBase, m_defenseBase + m_defenseRange); break; } case OBC_BASEID: sVal = g_Cfg.ResourceGetName(GetResourceID()); break; case OBC_CAN: sVal.FormatHex(m_Can); break; case OBC_DAM: { pszKey += 3; if ( *pszKey == '.' ) { SKIP_SEPARATORS(pszKey); if ( !strnicmp(pszKey, "LO", 2) ) sVal.Format("%hu", m_attackBase); else if ( !strnicmp(pszKey, "HI", 2) ) sVal.Format("%hu", m_attackBase + m_attackRange); } else sVal.Format("%hu,%hu", m_attackBase, m_attackBase + m_attackRange); break; } case OBC_DAMCOLD: sVal.FormatVal(m_DamCold); break; case OBC_DAMENERGY: sVal.FormatVal(m_DamEnergy); break; case OBC_DAMFIRE: sVal.FormatVal(m_DamFire); break; case OBC_DAMPHYSICAL: sVal.FormatVal(m_DamPhysical); break; case OBC_DAMPOISON: sVal.FormatVal(m_DamPoison); break; case OBC_DEFNAME: sVal = GetResourceName(); break; case OBC_ENHANCEPOTIONS: sVal.FormatVal(m_EnhancePotions); break; case OBC_FASTERCASTING: sVal.FormatVal(m_FasterCasting); break; case OBC_FASTERCASTRECOVERY: sVal.FormatVal(m_FasterCastRecovery); break; case OBC_HEIGHT: sVal.FormatVal(GetHeight()); break; case OBC_HITLEECHLIFE: sVal.FormatVal(m_HitLifeLeech); break; case OBC_HITLEECHMANA: sVal.FormatVal(m_HitManaLeech); break; case OBC_HITLEECHSTAM: sVal.FormatVal(m_HitStaminaLeech); break; case OBC_HITMANADRAIN: sVal.FormatVal(m_HitManaDrain); break; case OBC_INCREASEDAM: sVal.FormatVal(m_DamIncrease); break; case OBC_INCREASEDEFCHANCE: sVal.FormatVal(m_DefChanceIncrease); break; case OBC_INCREASEDEFCHANCEMAX: sVal.FormatVal(m_DefChanceIncreaseMax); break; case OBC_INCREASEHITCHANCE: sVal.FormatVal(m_HitChanceIncrease); break; case OBC_INCREASESPELLDAM: sVal.FormatVal(m_SpellDamIncrease); break; case OBC_INCREASESWINGSPEED: sVal.FormatVal(m_SwingSpeedIncrease); break; case OBC_INSTANCES: sVal.FormatUVal(GetRefInstances()); break; case OBC_LOWERMANACOST: sVal.FormatVal(m_LowerManaCost); break; case OBC_LOWERREAGENTCOST: sVal.FormatVal(m_LowerReagentCost); break; case OBC_LUCK: sVal.FormatVal(m_Luck); break; case OBC_NAME: sVal = GetName(); break; case OBC_NIGHTSIGHT: sVal.FormatVal(m_NightSight); break; case OBC_REFLECTPHYSICALDAM: sVal.FormatVal(m_ReflectPhysicalDamage); break; case OBC_RANGE: if ( GetRangeH() == 0 ) sVal.Format("%hhu", GetRangeL()); else sVal.Format("%hhu,%hhu", GetRangeH(), GetRangeL()); break; case OBC_RANGEH: sVal.FormatUVal(GetRangeL()); break; case OBC_RANGEL: sVal.FormatUVal(GetRangeH()); break; case OBC_RESCOLD: sVal.FormatVal(m_ResCold); break; case OBC_RESCOLDMAX: sVal.FormatVal(m_ResColdMax); break; case OBC_RESDISPDNHUE: sVal.FormatHex(GetResDispDnHue()); break; case OBC_RESENERGY: sVal.FormatVal(m_ResEnergy); break; case OBC_RESENERGYMAX: sVal.FormatVal(m_ResEnergyMax); break; case OBC_RESFIRE: sVal.FormatVal(m_ResFire); break; case OBC_RESFIREMAX: sVal.FormatVal(m_ResFireMax); break; case OBC_RESLEVEL: sVal.FormatUVal(GetResLevel()); break; case OBC_RESOURCES: { pszKey += 9; if ( *pszKey == '.' ) { SKIP_SEPARATORS(pszKey); if ( !strnicmp(pszKey, "COUNT", 5) ) sVal.FormatVal(m_BaseResources.GetCount()); else { size_t index = static_cast<size_t>(Exp_GetLLVal(pszKey)); SKIP_SEPARATORS(pszKey); bool fQtyOnly = false; bool fKeyOnly = false; if ( !strnicmp(pszKey, "KEY", 3) ) fKeyOnly = true; else if ( !strnicmp(pszKey, "VAL", 3) ) fQtyOnly = true; TCHAR *pszTmp = Str_GetTemp(); m_BaseResources.WriteKeys(pszTmp, index, fQtyOnly, fKeyOnly); if ( fQtyOnly && (pszTmp[0] == '\0') ) strcpy(pszTmp, "0"); sVal = pszTmp; } } else { TCHAR *pszTmp = Str_GetTemp(); m_BaseResources.WriteKeys(pszTmp); sVal = pszTmp; } break; } case OBC_RESPHYSICAL: sVal.FormatVal(m_ResPhysical); break; case OBC_RESPHYSICALMAX: sVal.FormatVal(m_ResPhysicalMax); break; case OBC_RESPOISON: sVal.FormatVal(m_ResPoison); break; case OBC_RESPOISONMAX: sVal.FormatVal(m_ResPoisonMax); break; case OBC_TAG0: fZero = true; ++pszKey; // fall through case OBC_TAG: if ( pszKey[3] != '.' ) return false; pszKey += 4; sVal = m_TagDefs.GetKeyStr(pszKey, fZero); break; case OBC_TEVENTS: m_TEvents.WriteResourceRefList(sVal); break; default: return false; } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CCharNPC::r_WriteVal( CChar * pChar, LPCTSTR pszKey, CGString & sVal ) { EXC_TRY("WriteVal"); switch ( FindTableSorted( pszKey, sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { //return as string or hex number or NULL if not set //On these ones, check BaseDef too if not found on dynamic case CNC_THROWDAM: case CNC_THROWOBJ: case CNC_THROWRANGE: sVal = pChar->GetDefStr(pszKey, false, true); break; //return as decimal number or 0 if not set //On these ones, check BaseDef if not found on dynamic case CNC_BONDED: sVal.FormatVal( m_bonded ); break; case CNC_FOLLOWERSLOTS: sVal.FormatLLVal(pChar->GetDefNum(pszKey, true, true)); break; case CNC_ACTPRI: sVal.FormatVal( m_Act_Motivation ); break; case CNC_NPC: sVal.FormatVal( m_Brain ); break; case CNC_HOMEDIST: sVal.FormatVal( m_Home_Dist_Wander ); break; case CNC_NEED: { TCHAR *pszTmp = Str_GetTemp(); m_Need.WriteKey( pszTmp ); sVal = pszTmp; } break; case CNC_NEEDNAME: { TCHAR *pszTmp = Str_GetTemp(); m_Need.WriteNameSingle( pszTmp ); sVal = pszTmp; } break; case CNC_SPEECH: m_Speech.WriteResourceRefList( sVal ); break; case CNC_SPEECHCOLOR: sVal.FormatVal( m_SpeechHue ); break; case CNC_VENDCAP: { CItemContainer * pBank = pChar->GetBank(); if ( pBank ) sVal.FormatVal( pBank->m_itEqBankBox.m_Check_Restock ); } break; case CNC_VENDGOLD: { CItemContainer * pBank = pChar->GetBank(); if ( pBank ) sVal.FormatVal( pBank->m_itEqBankBox.m_Check_Amount ); } break; default: if ( FindTableHeadSorted( pszKey, CCharPlayer::sm_szLoadKeys, COUNTOF( CCharPlayer::sm_szLoadKeys )-1 ) >= 0 ) { sVal = "0"; return( true ); } if ( FindTableSorted( pszKey, CClient::sm_szLoadKeys, CC_QTY ) >= 0 ) { sVal = "0"; return( true ); } return(false ); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pChar); EXC_DEBUG_END; return false; }
bool CSector::r_WriteVal( lpctstr pszKey, CSString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CSector::r_WriteVal"); EXC_TRY("WriteVal"); static const CValStr sm_ComplexityTitles[] = { { "HIGH", INT32_MIN }, // speech can be very complex if low char count { "MEDIUM", 5 }, { "LOW", 10 }, { nullptr, INT32_MAX } }; SC_TYPE key = (SC_TYPE)FindTableHead(pszKey, sm_szLoadKeys, CountOf(sm_szLoadKeys) - 1); switch ( key ) { case SC_CANSLEEP: { pszKey += 8; bool fCheckAdjacents = Exp_GetVal(pszKey); sVal.FormatBVal(CanSleep(fCheckAdjacents)); return true; } case SC_CLIENTS: sVal.FormatSTVal(m_Chars_Active.GetClientsNumber()); return true; case SC_COLDCHANCE: sVal.FormatVal( GetColdChance()); return true; case SC_COMPLEXITY: if ( pszKey[10] == '.' ) { pszKey += 11; sVal = ( ! strcmpi( pszKey, sm_ComplexityTitles->FindName( (int)GetCharComplexity() )) ) ? "1" : "0"; return true; } sVal.FormatSTVal( GetCharComplexity() ); return true; case SC_FLAGS: sVal.FormatHex(m_dwFlags); return true; case SC_LIGHT: sVal.FormatVal(GetLight()); return true; case SC_LOCALTIME: sVal = GetLocalGameTime(); return true; case SC_LOCALTOD: sVal.FormatVal( GetLocalTime()); return true; case SC_NUMBER: sVal.FormatVal(m_index); return true; case SC_ISDARK: sVal.FormatVal( IsDark() ); return true; case SC_ISNIGHTTIME: { int iMinutes = GetLocalTime(); sVal = ( iMinutes < 7*60 || iMinutes > (9+12)*60 ) ? "1" : "0"; } return true; case SC_ISSLEEPING: sVal.FormatVal(IsSleeping()); return true; case SC_RAINCHANCE: sVal.FormatVal( GetRainChance()); return true; case SC_ITEMCOUNT: sVal.FormatSTVal(GetItemComplexity()); return true; case SC_SEASON: sVal.FormatVal((int)GetSeason()); return true; case SC_WEATHER: sVal.FormatVal((int)GetWeather()); return true; } EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CClient::r_WriteVal( LPCTSTR pszKey, CGString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CClient::r_WriteVal"); EXC_TRY("WriteVal"); int index; if ( !strnicmp("CTAG.", pszKey, 5) ) // CTAG.xxx - client tag { if ( pszKey[4] != '.' ) return( false ); pszKey += 5; CVarDefCont *vardef = m_TagDefs.GetKey(pszKey); sVal = vardef ? vardef->GetValStr() : ""; return true; } if ( !strnicmp("CTAG0.", pszKey, 6) ) // CTAG0.xxx - client tag { if ( pszKey[5] != '.' ) return( false ); pszKey += 6; CVarDefCont *vardef = m_TagDefs.GetKey(pszKey); sVal = vardef ? vardef->GetValStr() : "0"; return true; } if ( !strnicmp( "TARGP", pszKey, 5 ) && ( pszKey[5] == '\0' || pszKey[5] == '.' ) ) index = CC_TARGP; else if ( !strnicmp( "SCREENSIZE", pszKey, 10 ) && ( pszKey[10] == '\0' || pszKey[10] == '.' ) ) index = CC_SCREENSIZE; else if ( !strnicmp( "REPORTEDCLIVER", pszKey, 14 ) && ( pszKey[14] == '\0' || pszKey[14] == '.' ) ) index = CC_REPORTEDCLIVER; else index = FindTableSorted( pszKey, sm_szLoadKeys, COUNTOF(sm_szLoadKeys)-1 ); switch (index) { case CC_ALLMOVE: sVal.FormatVal( IsPriv( PRIV_ALLMOVE )); break; case CC_ALLSHOW: sVal.FormatVal( IsPriv( PRIV_ALLSHOW )); break; case CC_CLIENTIS3D: sVal.FormatVal( GetNetState()->isClient3D() ); break; case CC_CLIENTISKR: sVal.FormatVal( GetNetState()->isClientKR() ); break; case CC_CLIENTISSA: sVal.FormatVal( GetNetState()->isClientSA() ); break; case CC_CLIENTVERSION: { TCHAR szVersion[ 128 ]; sVal = m_Crypt.WriteClientVer( szVersion ); } break; case CC_DEBUG: sVal.FormatVal( IsPriv( PRIV_DEBUG )); break; case CC_DETAIL: sVal.FormatVal( IsPriv( PRIV_DETAIL )); break; case CC_GM: // toggle your GM status on/off sVal.FormatVal( IsPriv( PRIV_GM )); break; case CC_HEARALL: sVal.FormatVal( IsPriv( PRIV_HEARALL )); break; case CC_LASTEVENT: sVal.FormatLLVal( m_timeLastEvent.GetTimeRaw() ); break; case CC_PRIVSHOW: // Show my priv title. sVal.FormatVal( ! IsPriv( PRIV_PRIV_NOSHOW )); break; case CC_REPORTEDCLIVER: { pszKey += strlen(sm_szLoadKeys[index]); GETNONWHITESPACE( pszKey ); int iCliVer = (GetNetState()->getReportedVersion() & 0xFFFFFF0); if ( pszKey[0] != '\0' ) iCliVer = GetNetState()->getReportedVersion(); TCHAR szVersion[128]; sVal = CCrypt::WriteClientVerString( iCliVer, szVersion ); } break; case CC_SCREENSIZE: { if ( pszKey[10] == '.' ) { pszKey += strlen(sm_szLoadKeys[index]); SKIP_SEPARATORS(pszKey); if ( !strnicmp("X", pszKey, 1) ) sVal.Format( "%lu", m_ScreenSize.x ); else if ( !strnicmp("Y", pszKey, 1) ) sVal.Format( "%lu", m_ScreenSize.y ); else return( false ); } else sVal.Format( "%lu,%lu", m_ScreenSize.x, m_ScreenSize.y ); } break; case CC_TARG: sVal.FormatHex(m_Targ_UID); break; case CC_TARGP: if ( pszKey[5] == '.' ) { return m_Targ_p.r_WriteVal( pszKey+6, sVal ); } sVal = m_Targ_p.WriteUsed(); break; case CC_TARGPROP: sVal.FormatHex(m_Prop_UID); break; case CC_TARGPRV: sVal.FormatHex(m_Targ_PrvUID); break; case CC_TARGTXT: sVal = m_Targ_Text; break; default: return( CScriptObj::r_WriteVal( pszKey, sVal, pSrc )); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }
bool CSpellDef::r_WriteVal( lpctstr pszKey, CSString & sVal, CTextConsole * pSrc ) { ADDTOCALLSTACK("CSpellDef::r_WriteVal"); EXC_TRY("WriteVal"); int index = FindTableSorted( pszKey, sm_szLoadKeys, CountOf( sm_szLoadKeys )-1 ); if (index < 0) { if (!strnicmp( "RESOURCES.", pszKey, 10 )) index = SPC_RESOURCES; } switch (index) { case SPC_CAST_TIME: sVal = m_CastTime.Write(); break; case SPC_DEFNAME: sVal = GetResourceName(); break; case SPC_DURATION: sVal = m_Duration.Write(); break; case SPC_EFFECT: sVal = m_Effect.Write(); break; case SPC_EFFECT_ID: sVal.FormatVal( m_idEffect ); break; case SPC_FLAGS: sVal.FormatVal( m_dwFlags ); break; case SPC_GROUP: sVal.FormatVal( m_dwGroup ); break; case SPC_INTERRUPT: sVal = m_Interrupt.Write(); break; case SPC_LAYER: sVal.FormatVal(m_idLayer); break; case SPC_MANAUSE: sVal.FormatVal( m_wManaUse ); break; case SPC_NAME: sVal = m_sName; break; case SPC_PROMPT_MSG: sVal = m_sTargetPrompt; break; case SPC_RESOURCES: { pszKey += 9; // Check for "RESOURCES.*" if ( *pszKey == '.' ) { bool fQtyOnly = false; bool fKeyOnly = false; SKIP_SEPARATORS( pszKey ); // Determine the index of the resource // we wish to find index = Exp_GetVal( pszKey ); SKIP_SEPARATORS( pszKey ); // Check for "RESOURCES.x.KEY" if ( !strnicmp( pszKey, "KEY", 3 )) fKeyOnly = true; // Check for "RESORUCES.x.VAL" else if ( !strnicmp( pszKey, "VAL", 3 )) fQtyOnly = true; tchar *pszTmp = Str_GetTemp(); m_Reags.WriteKeys( pszTmp, index, fQtyOnly, fKeyOnly ); if ( fQtyOnly && pszTmp[0] == '\0' ) strcpy( pszTmp, "0" ); // Return 0 for empty quantity sVal = pszTmp; } else { tchar *pszTmp = Str_GetTemp(); m_Reags.WriteKeys( pszTmp ); sVal = pszTmp; } break; } case SPC_RUNE_ITEM: sVal.FormatVal( m_idSpell ); break; case SPC_RUNES: // This may only be basic chars ! sVal = m_sRunes; break; case SPC_SCROLL_ITEM: sVal.FormatVal( m_idScroll ); break; case SPC_SKILLREQ: { tchar *pszTmp = Str_GetTemp(); m_SkillReq.WriteKeys( pszTmp ); sVal = pszTmp; } break; case SPC_SOUND: sVal.FormatVal(m_sound); break; case SPC_TITHINGUSE: sVal.FormatVal(m_wTithingUse); break; default: return( CResourceDef::r_WriteVal( pszKey, sVal, pSrc )); } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_KEYRET(pSrc); EXC_DEBUG_END; return false; }