size_t CResourceQty::WriteNameSingle( TCHAR * pszArgs, int iQty ) const { ADDTOCALLSTACK("CResourceQty::WriteNameSingle"); if ( GetResType() == RES_ITEMDEF ) { const CItemBase * pItemBase = CItemBase::FindItemBase(static_cast<ITEMID_TYPE>(m_rid.GetResIndex())); //DEBUG_ERR(("pItemBase 0x%x m_rid 0%x m_rid.GetResIndex() 0%x\n",pItemBase,m_rid,m_rid.GetResIndex())); if ( pItemBase ) return( strcpylen( pszArgs, pItemBase->GetNamePluralize(pItemBase->GetTypeName(),(( iQty > 1 ) ? true : false))) ); } const CScriptObj * pResourceDef = g_Cfg.ResourceGetDef( m_rid ); if ( pResourceDef != NULL ) return( strcpylen( pszArgs, pResourceDef->GetName()) ); else return( strcpylen( pszArgs, g_Cfg.ResourceGetName( m_rid )) ); }
STAT_TYPE CCharPlayer::Stat_GetLockType( LPCTSTR pszKey ) const { ADDTOCALLSTACK("CCharPlayer::Stat_GetLockType"); // only players can have skill locks. TCHAR szTmpKey[128]; strcpylen( szTmpKey, pszKey, COUNTOF(szTmpKey) ); TCHAR * ppArgs[3]; size_t i = Str_ParseCmds( szTmpKey, ppArgs, COUNTOF(ppArgs), ".[]" ); if ( i <= 1 ) return( STAT_NONE ); if ( IsDigit( ppArgs[1][0] )) { i = ATOI( ppArgs[1] ); } else { i = g_Cfg.FindStatKey( ppArgs[1] ); } if ( i >= STAT_BASE_QTY ) return( STAT_NONE ); return static_cast<STAT_TYPE>(i); }
bool CScriptKeyAlloc::ParseKey( LPCTSTR pszKey, LPCTSTR pszVal ) { ADDTOCALLSTACK("CScriptKeyAlloc::ParseKey"); ASSERT(pszKey); size_t lenkey = strlen( pszKey ); if ( ! lenkey ) { return ParseKey(pszVal); } ASSERT( lenkey < SCRIPT_MAX_LINE_LEN-2 ); size_t lenval = 0; if ( pszVal ) { lenval = strlen( pszVal ); } m_pszKey = GetKeyBufferRaw( lenkey + lenval + 1 ); strcpy( m_pszKey, pszKey ); m_pszArg = m_pszKey + lenkey; if ( pszVal ) { m_pszArg ++; lenval = m_Mem.GetDataLength() - 2; strcpylen( m_pszArg, pszVal, ( lenval - lenkey ) + 1 ); // strcpylen } return( true ); }
CSphereTerrainInfo::CSphereTerrainInfo( TERRAIN_TYPE id ) { ASSERT( id < TERRAIN_QTY ); VERFILE_TYPE filedata; size_t offset; CUOIndexRec Index; VERFILE_FORMAT format; if ( g_VerData.FindVerDataBlock( VERFILE_TILEDATA, id/UOTILE_BLOCK_QTY, Index )) { filedata = VERFILE_VERDATA; format = VERFORMAT_ORIGINAL; offset = Index.GetFileOffset() + 4 + (sizeof(CUOTerrainTypeRec)*(id%UOTILE_BLOCK_QTY)); ASSERT( Index.GetBlockLength() >= sizeof( CUOTerrainTypeRec )); } else { filedata = VERFILE_TILEDATA; format = g_Install.GetMulFormat(filedata); switch (format) { case VERFORMAT_HIGHSEAS: // high seas format (CUOTerrainTypeRec_HS) offset = (id == 0? 0 : 4) + (( id / UOTILE_BLOCK_QTY ) * 4 ) + ( id * sizeof( CUOTerrainTypeRec_HS )); break; case VERFORMAT_ORIGINAL: // original format (CUOTerrainTypeRec) default: offset = 4 + (( id / UOTILE_BLOCK_QTY ) * 4 ) + ( id * sizeof( CUOTerrainTypeRec )); break; } } if ( g_Install.m_File[filedata].Seek( offset, SEEK_SET ) != offset ) { throw CSError(LOGL_CRIT, CSFile::GetLastError(), "CTileTerrainType.ReadInfo: TileData Seek"); } switch (format) { case VERFORMAT_HIGHSEAS: // high seas format (CUOTerrainTypeRec_HS) if ( g_Install.m_File[filedata].Read(static_cast <CUOTerrainTypeRec_HS *>(this), sizeof(CUOTerrainTypeRec_HS)) <= 0 ) throw CSError(LOGL_CRIT, CSFile::GetLastError(), "CTileTerrainType.ReadInfo: TileData Read"); break; case VERFORMAT_ORIGINAL: // old format (CUOTerrainTypeRec) default: { CUOTerrainTypeRec record; if ( g_Install.m_File[filedata].Read(static_cast <CUOTerrainTypeRec *>(&record), sizeof(CUOTerrainTypeRec)) <= 0 ) throw CSError(LOGL_CRIT, CSFile::GetLastError(), "CTileTerrainType.ReadInfo: TileData Read"); m_flags = record.m_flags; m_unknown = 0; m_index = record.m_index; strcpylen(m_name, record.m_name, CountOf(m_name)); break; } } }
CClientTooltip::CClientTooltip(dword clilocid, lpctstr args) { m_clilocid = clilocid; if ( args ) strcpylen(m_args, args, SCRIPT_MAX_LINE_LEN); else m_args[0] = '\0'; }
void __cdecl CClientTooltip::FormatArgs(lpctstr format, ...) { va_list vargs; va_start( vargs, format ); if ( ! vsnprintf( m_args, SCRIPT_MAX_LINE_LEN, format, vargs ) ) strcpylen( m_args, format, SCRIPT_MAX_LINE_LEN ); va_end( vargs ); }
size_t CResourceQty::WriteKey( TCHAR * pszArgs, bool fQtyOnly, bool fKeyOnly ) const { ADDTOCALLSTACK("CResourceQty::WriteKey"); size_t i = 0; if ( (GetResQty() || fQtyOnly) && !fKeyOnly ) { i = sprintf( pszArgs, "%lld ", GetResQty()); } if ( !fQtyOnly ) i += strcpylen( pszArgs+i, g_Cfg.ResourceGetName( m_rid )); return( i ); }
bool CItemMessage::LoadSystemPages() { DEBUG_CHECK( IsBookSystem()); CResourceLock s; if ( ! g_Cfg.ResourceLock( s, m_itBook.m_ResID )) return false; int iPages = -1; while ( s.ReadKeyParse()) { switch ( FindTableSorted( s.GetKey(), sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 )) { case CIC_AUTHOR: m_sAuthor = s.GetArgStr(); break; case CIC_PAGES: iPages = s.GetArgVal(); break; case CIC_TITLE: SetName( s.GetArgStr()); // Make sure the book is named. break; } } if ( iPages > 2*MAX_BOOK_PAGES || iPages < 0 ) return( false ); TCHAR szTemp[ 16*1024 ]; for ( int iPage=1; iPage<=iPages; iPage++ ) { if ( ! g_Cfg.ResourceLock( s, RESOURCE_ID( RES_BOOK, m_itBook.m_ResID.GetResIndex(), iPage ))) { break; } int iLen = 0; while (s.ReadKey()) { int iLenStr = strlen( s.GetKey()); if ( iLen + iLenStr >= sizeof( szTemp )) break; iLen += strcpylen( szTemp+iLen, s.GetKey()); szTemp[ iLen++ ] = '\t'; } szTemp[ --iLen ] = '\0'; AddPageText( szTemp ); } return( true ); }
int Str_RegExMatch( LPCTSTR pPattern, LPCTSTR pText, TCHAR * lastError ) { try { CRegexp expressionformatch(pPattern, NO_FLAG); MatchResult result = expressionformatch.Match(pText); if( result.IsMatched() ) return 1; return 0; } catch (std::bad_alloc e) { strcpylen(lastError,e.what(),SCRIPT_MAX_LINE_LEN); CurrentProfileData.Count(PROFILE_STAT_FAULTS, 1); return -1; } catch ( ... ) { strcpylen(lastError,"Unknown",SCRIPT_MAX_LINE_LEN); CurrentProfileData.Count(PROFILE_STAT_FAULTS, 1); return -1; } }
void CResourceRefArray::WriteResourceRefList( CGString & sVal ) const { ADDTOCALLSTACK("CResourceRefArray::WriteResourceRefList"); TemporaryString tsVal; TCHAR * pszVal = static_cast<TCHAR *>(tsVal); size_t len = 0; for ( size_t j = 0; j < GetCount(); j++ ) { if ( j > 0 ) pszVal[len++] = ','; len += strcpylen( pszVal + len, GetResourceName( j )); if ( len >= SCRIPT_MAX_LINE_LEN-1 ) break; } pszVal[len] = '\0'; sVal = pszVal; }
// only players can have skill locks. SKILL_TYPE CCharPlayer::Skill_GetLockType( LPCTSTR pszKey ) const { ADDTOCALLSTACK("CCharPlayer::Skill_GetLockType"); TCHAR szTmpKey[128]; strcpylen( szTmpKey, pszKey, COUNTOF(szTmpKey) ); TCHAR * ppArgs[3]; size_t i = Str_ParseCmds( szTmpKey, ppArgs, COUNTOF(ppArgs), ".[]" ); if ( i <= 1 ) return( SKILL_NONE ); if ( IsDigit( ppArgs[1][0] )) { i = ATOI( ppArgs[1] ); } else { i = g_Cfg.FindSkillKey( ppArgs[1] ); } if ( i >= g_Cfg.m_iMaxSkill ) return( SKILL_NONE ); return static_cast<SKILL_TYPE>(i); }
int CFileList::ReadDir( LPCTSTR pszFileDir, bool bShowError ) { ADDTOCALLSTACK("CFileList::ReadDir"); // NOTE: It seems NOT to like the trailing \ alone TCHAR szFileDir[_MAX_PATH]; size_t len = strcpylen(szFileDir, pszFileDir); #ifdef _WIN32 if ( len > 0 ) { len--; if ( szFileDir[len] == '\\' || szFileDir[len] == '/' ) strcat( szFileDir, "*.*" ); } #endif #ifdef _WIN32 struct _finddata_t fileinfo; intptr_t lFind = _findfirst(szFileDir, &fileinfo); if ( lFind == -1 ) #else char szFilename[_MAX_PATH]; // Need to strip out the *.scp part for ( size_t i = len; i > 0; i-- ) { if ( szFileDir[i] == '/' ) { szFileDir[i+1] = 0x00; break; } } DIR* dirp = opendir(szFileDir); struct dirent * fileinfo = NULL; if ( !dirp ) #endif { if (bShowError == true) { DEBUG_ERR(("Unable to open directory %s\n", szFileDir)); } return -1; } do { #if defined(_WIN32) if ( fileinfo.name[0] == '.' ) continue; AddHead(fileinfo.name); #else fileinfo = readdir(dirp); if ( !fileinfo ) break; if ( fileinfo->d_name[0] == '.' ) continue; sprintf(szFilename, "%s%s", szFileDir, fileinfo->d_name); len = strlen(szFilename); if ( (len > 4) && !strcmpi(&szFilename[len - 4], SPHERE_SCRIPT) ) AddHead(fileinfo->d_name); #endif } #if defined(_WIN32) while ( !_findnext(lFind, &fileinfo)); _findclose(lFind); #else while ( fileinfo != NULL ); closedir(dirp); #endif return static_cast<int>(GetCount()); }
bool CPartyDef::r_Verb( CScript &s, CTextConsole *pSrc ) { ADDTOCALLSTACK("CPartyDef::r_Verb"); EXC_TRY("Verb"); ASSERT(pSrc); LPCTSTR pszKey = s.GetKey(); CScriptObj *pRef; if ( r_GetRef(pszKey, pRef) ) { if ( pszKey[0] ) { if ( !pRef ) return true; CScript script(pszKey, s.GetArgStr()); return pRef->r_Verb(script, pSrc); } } int iIndex = FindTableSorted(pszKey, sm_szVerbKeys, COUNTOF(sm_szVerbKeys) - 1); switch ( iIndex ) { case PDV_ADDMEMBER: case PDV_ADDMEMBERFORCED: { bool bForced = (iIndex == PDV_ADDMEMBERFORCED); CGrayUID toAdd = static_cast<CGrayUID>(s.GetArgVal()); CChar *pCharAdd = toAdd.CharFind(); CChar *pCharMaster = GetMaster().CharFind(); if ( !pCharAdd || IsInParty(pCharAdd) ) return false; if ( pCharMaster && !bForced ) pCharMaster->SetKeyNum("PARTY_LASTINVITE", (long long)toAdd); return CPartyDef::AcceptEvent(pCharAdd, GetMaster(), bForced); } break; case PDV_CLEARTAGS: { LPCTSTR pszArg = s.GetArgStr(); SKIP_SEPARATORS(pszArg); m_TagDefs.ClearKeys(pszArg); } break; case PDV_CREATE: return true; case PDV_DISBAND: return Disband(GetMaster()); case PDV_MESSAGE: break; case PDV_REMOVEMEMBER: { CGrayUID toRemove; LPCTSTR pszArg = s.GetArgStr(); if ( *pszArg == '@' ) { pszArg++; size_t nMember = Exp_GetVal(pszArg); if ( !m_Chars.IsValidIndex(nMember) ) return false; toRemove = m_Chars.GetChar(nMember); } else toRemove = static_cast<CGrayUID>(s.GetArgVal()); if ( toRemove ) return RemoveMember(toRemove, GetMaster()); return false; } break; case PDV_SETMASTER: { CGrayUID newMaster; LPCTSTR pszArg = s.GetArgStr(); if ( *pszArg == '@' ) { pszArg++; size_t nMember = Exp_GetVal(pszArg); if ( nMember == 0 || !m_Chars.IsValidIndex(nMember) ) return false; newMaster = m_Chars.GetChar(nMember); } else newMaster = static_cast<CGrayUID>(s.GetArgVal()); if ( newMaster ) return SetMaster(newMaster.CharFind()); return false; } break; case PDV_SYSMESSAGE: { CGrayUID toSysmessage; LPCTSTR pszArg = s.GetArgStr(); TCHAR *pUid = Str_GetTemp(); size_t x = 0; if ( *pszArg == '@' ) { pszArg++; if ( *pszArg != '@' ) { LPCTSTR __pszArg = pszArg; while ( *pszArg != ' ' ) { pszArg++; x++; } strcpylen(pUid, __pszArg, ++x); size_t nMember = Exp_GetVal(pUid); if ( !m_Chars.IsValidIndex(nMember) ) return false; toSysmessage = m_Chars.GetChar(nMember); } } else { LPCTSTR __pszArg = pszArg; while ( *pszArg != ' ' ) { pszArg++; x++; } strcpylen(pUid, __pszArg, ++x); toSysmessage = static_cast<CGrayUID>(Exp_GetVal(pUid)); } SKIP_SEPARATORS(pszArg); if ( toSysmessage ) { CChar *pSend = toSysmessage.CharFind(); pSend->SysMessage(pszArg); } else SysMessageAll(pszArg); } break; case PDV_TAGLIST: m_TagDefs.DumpKeys(pSrc, "TAG."); break; default: return false; } return true; EXC_CATCH; EXC_DEBUG_START; EXC_ADD_SCRIPTSRC; EXC_DEBUG_END; return false; }