Example #1
0
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 )) );
}
Example #2
0
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);
}
Example #3
0
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 );
}
Example #4
0
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;
        }
    }
}
Example #5
0
CClientTooltip::CClientTooltip(dword clilocid, lpctstr args)
{
    m_clilocid = clilocid;
    if ( args )
        strcpylen(m_args, args, SCRIPT_MAX_LINE_LEN);
    else
        m_args[0] = '\0';
}
Example #6
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 );
}
Example #7
0
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 );
}
Example #8
0
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 );
}
Example #9
0
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;
	}
}
Example #10
0
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;
}
Example #11
0
// 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);
}
Example #12
0
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());
}
Example #13
0
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;
}