Files
Client/GameTools/Zallad3D SceneClass/H3DWeaponTable.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

224 lines
4.8 KiB
C++
Raw Blame History

// H3DWeaponTable.cpp: implementation of the CH3DWeaponTable class.
//
//////////////////////////////////////////////////////////////////////
#include "H3DWeaponTable.h"
#include "SimpleParser.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CH3DWeaponTable::CH3DWeaponTable()
{
}
CH3DWeaponTable::~CH3DWeaponTable()
{
std::map<char*, H3DWeaponInfo, szi_less>::iterator it;
for( it = m_mapName2WeaponInfo.begin(); it != m_mapName2WeaponInfo.end(); it++ )
{
it->second.Flush();
}
}
Z3D_CHR_SKELETONPART CH3DWeaponTable::GetSkelPartByString( const char* sz )
{
if( 0 == stricmp( "HEAD", sz) )
{
return Z3D_SP_HEAD;
}
else if( 0 == stricmp( "NECK", sz) )
{
return Z3D_SP_NECK;
}
else if( 0 == stricmp( "CHEST", sz) )
{
return Z3D_SP_CHEST;
}
else if( 0 == stricmp( "WAIST", sz) )
{
return Z3D_SP_WAIST;
}
else if( 0 == stricmp( "PELVIS", sz) )
{
return Z3D_SP_PELVIS;
}
else if( 0 == stricmp( "R_HAND", sz) )
{
return Z3D_SP_R_HAND;
}
else if( 0 == stricmp( "R_FOREARM", sz) )
{
return Z3D_SP_R_FOREARM;
}
else if( 0 == stricmp( "R_UPPERARM", sz) )
{
return Z3D_SP_R_UPPERARM;
}
else if( 0 == stricmp( "R_THIGH", sz) )
{
return Z3D_SP_R_THIGH;
}
else if( 0 == stricmp( "R_CALF", sz) )
{
return Z3D_SP_R_CALF;
}
else if( 0 == stricmp( "R_FOOT", sz) )
{
return Z3D_SP_R_FOOT;
}
else if( 0 == stricmp( "L_HAND", sz) )
{
return Z3D_SP_L_HAND;
}
else if( 0 == stricmp( "L_FOREARM", sz) )
{
return Z3D_SP_L_FOREARM;
}
else if( 0 == stricmp( "L_UPPERARM", sz) )
{
return Z3D_SP_L_UPPERARM;
}
else if( 0 == stricmp( "L_THIGH", sz) )
{
return Z3D_SP_L_THIGH;
}
else if( 0 == stricmp( "L_CALF", sz) )
{
return Z3D_SP_L_CALF;
}
else if( 0 == stricmp( "L_FOOT", sz) )
{
return Z3D_SP_L_FOOT;
}
return Z3D_SP_NONE;
}
bool CH3DWeaponTable::Load( const char* szFileName )
{
CSimpleParser parser;
if( false == parser.OpenFile( szFileName ) )
{
return false; // file open failed
}
H3DWeaponInfo wi;
char* szToken;
long lState; // 0 : reading weapon name, 1 : reading weapon info
lState = 0;
while( (szToken = parser.GetNextToken()) != NULL )
{
switch( lState )
{
case 0:
wi.szItemName = new char[strlen(szToken)+1];
strcpy( wi.szItemName, szToken );
lState = 1;
break;
case 1:
if( 0 == stricmp( "Mesh", szToken ) )
{
szToken = parser.GetNextToken();
wi.szMeshName = new char[strlen(szToken)+1];
strcpy( wi.szMeshName, szToken );
}
else if( 0 == stricmp( "Tex", szToken ) )
{
szToken = parser.GetNextToken();
wi.szTexName = new char[strlen(szToken)+1];
strcpy( wi.szTexName, szToken );
}
else if( 0 == stricmp( "Type", szToken ) )
{
wi.lWeaponType = aton( parser.GetNextToken() );
if( wi.lWeaponType > 9 )
{
return false;
}
}
else if( 0 == stricmp( "HSkel", szToken ) )
{
wi.hskel = GetSkelPartByString( parser.GetNextToken() );
}
else if( 0 == stricmp( "HPos", szToken ) )
{
wi.vecHpos.x = (float)atof( parser.GetNextToken() );
wi.vecHpos.y = (float)atof( parser.GetNextToken() );
wi.vecHpos.z = (float)atof( parser.GetNextToken() );
}
else if( 0 == stricmp( "HRot", szToken ) )
{
wi.quatHrot.x = (float)atof( parser.GetNextToken() );
wi.quatHrot.y = (float)atof( parser.GetNextToken() );
wi.quatHrot.z = (float)atof( parser.GetNextToken() );
wi.quatHrot.w = (float)atof( parser.GetNextToken() );
}
else if( 0 == stricmp( "Skel", szToken ) )
{
wi.skel = GetSkelPartByString( parser.GetNextToken() );
}
else if( 0 == stricmp( "Pos", szToken ) )
{
wi.vecPos.x = (float)atof( parser.GetNextToken() );
wi.vecPos.y = (float)atof( parser.GetNextToken() );
wi.vecPos.z = (float)atof( parser.GetNextToken() );
}
else if( 0 == stricmp( "Rot", szToken ) )
{
wi.quatRot.x = (float)atof( parser.GetNextToken() );
wi.quatRot.y = (float)atof( parser.GetNextToken() );
wi.quatRot.z = (float)atof( parser.GetNextToken() );
wi.quatRot.w = (float)atof( parser.GetNextToken() );
}
else if( 0 == stricmp( ";", szToken ) )
{
AddItem( wi );
lState = 0;
}
break;
}
}
return true;
}
bool CH3DWeaponTable::AddItem( H3DWeaponInfo &wi )
{
if( m_mapName2WeaponInfo.end() != m_mapName2WeaponInfo.find( wi.szItemName ) )
{
// <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> <20><><EFBFBD>ϵ<EFBFBD> <20>׸<EFBFBD><D7B8><EFBFBD> <20>ִ<EFBFBD>.
return false;
}
m_mapName2WeaponInfo[wi.szItemName] = wi;
return true;
}
bool CH3DWeaponTable::GetWeaponInfo( H3DWeaponInfo* &pWi, char* szWeaponName )
{
std::map<char*, H3DWeaponInfo, szi_less>::iterator it;
it = m_mapName2WeaponInfo.find( szWeaponName );
if( m_mapName2WeaponInfo.end() == it )
{
return false;
}
pWi = &(it->second);
return true;
}