📄 3droledata.cpp
字号:
{
char szIndex[256] = "";
char strEffect[64] = "";
int nX,nY,nZ;
nX =0;
nY =0;
nZ =0;
sprintf(szIndex, "Effect%d=%s\n", i, "%s");
bSuc &= fscanf(fp, szIndex, strEffect);
bSuc &= fscanf(fp, "X=%d\n", &nX);
if (!bSuc)
{
::ErrorOut("error X: Effect%d of %s %s", i, szIniFile, szTitle);
return;
}
bSuc &= fscanf(fp, "Y=%d\n", &nY);
if (!bSuc)
{
::ErrorOut("error Y: Effect%d of %s %s", i, szIniFile, szTitle);
return;
}
bSuc &= fscanf(fp, "Z=%d\n", &nZ);
if (!bSuc)
{
::ErrorOut("error Z: Effect%d of %s %s", i, szIniFile, szTitle);
return;
}
else
{
EffectLookSet pLookSet;
pLookSet.nX = nX;
pLookSet.nY = nY;
pLookSet.nZ = nZ;
strcpy(pLookSet.szEffect,strEffect);
pInfo->setEffect.push_back(pLookSet);
}
}
m_setEffectLookSetInfo[pInfo->dwLook] = pInfo;
}
fclose(fp);
}
else
::ErrorOut("error on open %s.", szIniFile);
}
//---------------------------------------------------------------------
BOOL C3DRoleData::GetEffectLookSetInfo(DWORD dwLook , char* szEffect , int& x,int& y,int& z)
{
map<OBJID, EffectLookSetInfo*>::iterator iter = m_setEffectLookSetInfo.find(dwLook);
if(iter != m_setEffectLookSetInfo.end())
{
EffectLookSetInfo* pInfo = iter->second;
if (pInfo)
{
int nAmount = pInfo->nAmount;
if (nAmount == 0)
{
x = pInfo->nDefaultX;
y = pInfo->nDefaultY;
z = pInfo->nDefaultZ;
return TRUE;
}
for(int i=0;i<nAmount;i++)
{
if(strcmp(szEffect,pInfo->setEffect[i].szEffect) == 0)
{
x = pInfo->setEffect[i].nX;
y = pInfo->setEffect[i].nY;
z = pInfo->setEffect[i].nZ;
return TRUE;
}
}
}
}
return FALSE;
}
//---------------------------------------------------------------------
void C3DRoleData::DestroyEffectLookSetInfo()
{
map<OBJID, EffectLookSetInfo*>::iterator iter = m_setEffectLookSetInfo.begin();
while(iter != m_setEffectLookSetInfo.end())
{
EffectLookSetInfo* pInfo = iter->second;
pInfo->setEffect.clear();
delete iter->second;
iter ++;
}
m_setEffectLookSetInfo.clear();
}
//---------------------------------------------------------------------
void C3DRoleData::DestroyRolePartInfo()
{
this->DestroyRolePartInfo(m_setArmor);
this->DestroyRolePartInfo(m_setArmet);
this->DestroyRolePartInfo(m_setWeapon);
this->DestroyRolePartInfo(m_setMantle);
this->DestroyRolePartInfo(m_setMount);
this->DestroyRolePartInfo(m_setHead);
}
//---------------------------------------------------------------------
void C3DRoleData::CreateRolePartInfo()
{
this->DestroyRolePartInfo();
this->CreateRolePartInfo(m_setHead, "ini/Head.ini");
this->CreateRolePartInfo(m_setArmor, "ini/armor.ini");
this->CreateRolePartInfo(m_setArmet, "ini/armet.ini");
this->CreateRolePartInfo(m_setWeapon, "ini/weapon.ini");
this->CreateRolePartInfo(m_setMantle, "ini/Mantle.ini");
this->CreateRolePartInfo(m_setMount, "ini/mount.ini");
}
//---------------------------------------------------------------------
void C3DRoleData::CreateRolePartInfo(MAP_ROLEPARTINFO& m_setInfo, const char* pszFilename)
{
if(!pszFilename)
return;
this->DestroyRolePartInfo(m_setInfo);
//---------------------------------------
FILE* fp = fopen((char*)pszFilename, "r");
if(!fp)
return;
char szLine[1024];
char szTitle[_MAX_STRING];
while(true)
{
// scan title
if(EOF == fscanf(fp, "%s\n", szLine))
{
fclose(fp);
return;
}
if(1 != sscanf(szLine, "[%s]", szTitle))
continue;
szTitle[strlen(szTitle)-1] = '\0';
// get info ...
OBJID idMesh=0, idTexture=0, idTexture2=0;
float fMoveRateX = 0.0f, fMoveRateY = 0.0f;
fscanf(fp, "Mesh=%u\n", &idMesh);
fscanf(fp, "Texture=%u\n", &idTexture);
if(1==fscanf(fp, "Texture2=%u\n", &idTexture2))
{
fscanf(fp, "MoveRateX=%f\n", &fMoveRateX);
fscanf(fp, "MoveRateY=%f\n", &fMoveRateY);
}
static RolePartInfo infoRolePart;
infoRolePart.idMesh = idMesh;
infoRolePart.idTexture = idTexture;
infoRolePart.fMoveRateX = fMoveRateX;
infoRolePart.fMoveRateY = fMoveRateY;
OBJID id = RolePartInfoStr2ID(szTitle);
m_setInfo[id] = infoRolePart;
}
return;
}
//---------------------------------------------------------------------
void C3DRoleData::DestroyRolePartInfo(MAP_ROLEPARTINFO& m_setInfo)
{
m_setInfo.clear();
}
//---------------------------------------------------------------------
RolePartInfo* C3DRoleData::GetRoleRartInfo(MAP_ROLEPARTINFO& m_setInfo, const char* pszTitle)
{
if(!pszTitle)
return NULL;
OBJID id = RolePartInfoStr2ID(pszTitle);
map<OBJID, RolePartInfo>::iterator iter = m_setInfo.find(id);
if (iter != m_setInfo.end())
{
return &iter->second;
}
return NULL;
}
//---------------------------------------------------------------------
RolePartInfo* C3DRoleData::GetRoleRartInfo(int nRolePartIndex, const char* pszTitle)
{
switch(nRolePartIndex)
{
case ROLEPARTINFO_WEAPON:
return this->GetRoleRartInfo(m_setWeapon, pszTitle);
case ROLEPARTINFO_ARMET:
return this->GetRoleRartInfo(m_setArmet, pszTitle);
case ROLEPARTINFO_AEMOR:
return this->GetRoleRartInfo(m_setArmor, pszTitle);
case ROLEPARTINFO_MANTLE:
return this->GetRoleRartInfo(m_setMantle, pszTitle);
case ROLEPARTINFO_MOUNT:
return this->GetRoleRartInfo(m_setMount, pszTitle);
case ROLEPARTINFO_HEAD:
return this->GetRoleRartInfo(m_setHead, pszTitle);
default:
return NULL;
}
}
//---------------------------------------------------------------------
void C3DRoleData::LoadCommonIni()
{
const char szIniFile[]="ini/Common.ini";
char szTitle[64];
char szSubtitle[64];
// face amount
strcpy(szTitle, "Playerface");
strcpy(szSubtitle, "MaleFaceAmount");
MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nMaleFaceAmount));
strcpy(szSubtitle, "FemaleFaceAmount");
MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nFemaleFaceAmount));
strcpy(szTitle, "EmblemAmount");
strcpy(szSubtitle, "EmblemAmount");
MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nEmblemAmount));
strcpy(szTitle, "Statuary");
strcpy(szSubtitle, "LeaderScale");
MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nLeaderScale));
strcpy(szSubtitle, "LeaderMaxLife");
MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nLeaderMaxLife));
strcpy(szSubtitle, "AssistantScale");
MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nAssistantScale));
strcpy(szSubtitle, "AssistantMaxLife");
MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nAssistantMaxLife));
strcpy(szSubtitle, "SubLeaderScale");
MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nSubLeaderScale));
strcpy(szSubtitle, "SubLeaderMaxLife");
MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nSubLeaderMaxLife));
}
//---------------------------------------------------------------------
void C3DRoleData::Create3DSimpleObjInfo()
{
CONST CHAR INI_FILE[] = "ini/3DSimpleObj.ini";
FILE* fp = fopen(INI_FILE, "r");
if (!fp)
{
::ErrorOut("error on open %s.", INI_FILE);
return;
}
while(true)
{
// scan title
char szLine[1024] = "";
if (EOF == fscanf(fp, "%s\n", szLine))
break;
char szTitle[_MAX_STRING] = "";
if (1 != sscanf(szLine, "[%s]", szTitle))
continue;
szTitle[strlen(szTitle)-1] = '\0';
// get info ...
C3DSimpleObjInfo* pInfo = new C3DSimpleObjInfo;
MYASSERT(pInfo);
memset(pInfo, 0L, sizeof(C3DSimpleObjInfo));
pInfo->idType = atoi(szTitle+strlen("ObjIDType"));
BOOL bSuc = true;
bSuc &= fscanf(fp, "PartAmount=%d\n", &(pInfo->nParts));
if (!bSuc || pInfo->nParts > _MAXPART_SIMPLEOBJ)
{
::ErrorOut("error part amount data: %s of %s, must <= %d", szTitle, INI_FILE, _MAXPART_SIMPLEOBJ);
break;
}
for (int i=0; i<pInfo->nParts; i++)
{
char szIndex[256] = "";
sprintf(szIndex, "Part%d=%s\n", i, "%d");
bSuc &= fscanf(fp, szIndex, &(pInfo->idMesh[i]));
sprintf(szIndex, "Texture%d=%s\n", i, "%d");
bSuc &= fscanf(fp, szIndex, &(pInfo->idTexture[i]));
if (!bSuc)
{
::ErrorOut("error data: %s of %s, must <= %d", szTitle, INI_FILE);
break;
}
}
m_vct3DSimpleObjInfo.push_back(pInfo);
}
fclose(fp);
}
//---------------------------------------------------------------------
C3DSimpleObjInfo* C3DRoleData::Get3DSimpleObjInfo(OBJID idType)
{
int nInfos = m_vct3DSimpleObjInfo.size();
for (int i=0; i<nInfos; i++)
{
C3DSimpleObjInfo* pInfo = m_vct3DSimpleObjInfo[i];
if(pInfo && idType == pInfo->idType)
return pInfo;
}
::ErrorMsg("3DSimpleObj [%u] not found!", idType);
return m_vct3DSimpleObjInfo[0];
}
//---------------------------------------------------------------------
void C3DRoleData::DestroySimpleObjInfo()
{
int nInfos = m_vct3DSimpleObjInfo.size();
for (int i=0; i<nInfos; i++)
{
SAFE_DELETE(m_vct3DSimpleObjInfo[i]);
}
m_vct3DSimpleObjInfo.clear();
}
//---------------------------------------------------------------------
BOOL C3DRoleData::Create2DNpcTypeInfo()
{
return true;
}
//---------------------------------------------------------------------
void C3DRoleData::Destroy2DNpcTypeInfo()
{
/* int nAmount = m_set2DNpcType.size();
for(int i = 0; i < nAmount; i ++)
{
Npc2DTypeInfo infoNpc = m_set2DNpcType[i];
for(int i = 0; i < nAmount; i ++)
{
}
}*/
}
//---------------------------------------------------------------------
BOOL C3DRoleData::CreateTerrainNpcTypeInfo()
{
CONST CHAR INI_FILE[] = "ini/TerrainNpc.ini";
FILE* fp = fopen(INI_FILE, "r");
if (!fp)
{
::ErrorOut("error on open %s.", INI_FILE);
return false;
}
while(true)
{
// scan title
char szLine[1024] = "";
if (EOF == fscanf(fp, "%s\n", szLine))
break;
char szTitle[_MAX_STRING] = "";
if (1 != sscanf(szLine, "[%s]", szTitle))
continue;
szTitle[strlen(szTitle)-1] = '\0';
// get info ...
TerrainNpcTypeInfo* pInfo = new TerrainNpcTypeInfo;
MYASSERT(pInfo);
pInfo->nType = atoi(szTitle+strlen("NpcType"));
BOOL bSuc = true;
bSuc &= fscanf(fp, "Name=%s\n", pInfo->szNpcName);
for(int i = 0; i < 8; i ++)
{
char szFile[_MAX_PATH];
int nDir;
fscanf(fp, "Dir%d=%s\n", &nDir, szFile);
string str = szFile;
pInfo->setStr.push_back(str);
}
if (!bSuc)
{
::ErrorOut("error data: %s of %s", szTitle, INI_FILE);
break;
}
m_setTerrainNpcTypeInfo.push_back(pInfo);
}
fclose(fp);
return true;
}
//---------------------------------------------------------------------
void C3DRoleData::DestroyTerrainNpcTypeInfo()
{
int nAmount = m_setTerrainNpcTypeInfo.size();
for(int i = 0; i < nAmount; i ++)
{
TerrainNpcTypeInfo* pInfo = m_setTerrainNpcTypeInfo[i];
if(pInfo)
{
pInfo->setStr.clear();
SAFE_DELETE(pInfo);
}
}
m_setTerrainNpcTypeInfo.clear();
}
//---------------------------------------------------------------------
BOOL C3DRoleData::CreateNpcTypeInfo()
{
CONST CHAR INI_FILE[] = "ini/Npc.ini";
FILE* fp = fopen(INI_FILE, "r");
if (!fp)
{
::ErrorOut("error on open %s.", INI_FILE);
return false;
}
while(true)
{
// scan title
char szLine[1024] = "";
if (EOF == fscanf(fp, "%s\n", szLine))
break;
char szTitle[_MAX_STRING] = "";
if (1 != sscanf(szLine, "[%s]", szTitle))
continue;
szTitle[strlen(szTitle)-1] = '\0';
// get info ...
NpcTypeInfo* pInfo = new NpcTypeInfo;
MYASSERT(pInfo);
pInfo->nType = atoi(szTitle+strlen("NpcType"));
BOOL bSuc = true;
bSuc &= fscanf(fp, "Name=%s\n", pInfo->szNpcName);
bSuc &= fscanf(fp, "SimpleObjID=%u\n", &pInfo->idSimpleObj);
bSuc &= fscanf(fp, "StandByMotion=%u\n", &pInfo->idMotionStandBy);
bSuc &= fscanf(fp, "BlazeMotion=%u\n", &pInfo->idMotionBlaze);
bSuc &= fscanf(fp, "BlazeMotion1=%u\n", &pInfo->idMotionBlaze1);
bSuc &= fscanf(fp, "BlazeMotion2=%u\n", &pInfo->idMotionBlaze2);
bSuc &= fscanf(fp, "RestMotion=%u\n", &pInfo->idMotionRest);
bSuc &= fscanf(fp, "Effect=%s\n", pInfo->szEffectIndex);
pInfo->nZoomPercent = 100;
strcpy(pInfo->szNpcTitle, "");
fscanf(fp, "ZoomPercent=%d\n", &pInfo->nZoomPercent);
fscanf(fp, "Note=%s\n", &pInfo->szNpcTitle);
if(strcmp(pInfo->szNpcTitle, "NULL") == 0)
strcpy(pInfo->szNpcTitle, "");
pInfo->bMouseSign = 1;
fscanf(fp, "MouseSign=%d\n", &pInfo->bMouseSign);
pInfo->bChangeDir = true;
fscanf(fp, "ChangeDir=%d\n", &pInfo->bChangeDir);
pInfo->nFront = pInfo->nBack = pInfo->nLeft = pInfo->nRight = 0;
fscanf(fp, "FrontBlock=%d\n", &pInfo->nFront);
fscanf(fp, "BackBlock=%d\n", &pInfo->nBack);
fscanf(fp, "LeftBlock=%d\n", &pInfo->nLeft);
fscanf(fp, "RightBlock=%d\n", &pInfo->nRight);
if (!bSuc)
{
::ErrorOut("error data: %s of %s", szTitle, INI_FILE);
break;
}
m_setNpcType.push_back(pInfo);
}
fclose(fp);
return true;
}
//---------------------------------------------------------------------
void C3DRoleData::DestroyNpcTypeInfo()
{
int nAmount = m_setNpcType.size();
for(int i = 0; i < nAmount; i ++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -