📄 3droledata.cpp
字号:
{
// get length ...
DWORD dwLength;
fread(&dwLength, sizeof(DWORD), 1, fp);
// get str ...
char szStr[_MAX_STRING];
fread(szStr, sizeof(char), dwLength, fp);
string str = szStr;
pInfo->m_setStr.push_back(str);
}
m_setTipsInfo.push_back(pInfo);
}
return true;
}
//--------------------------------------------------------------------------------------
void C3DRoleData::DestroyTipsInfo()
{
int nAmount = m_setTipsInfo.size();
for(int i = 0; i < nAmount; i ++)
{
TipsInfo* pInfo = m_setTipsInfo[i];
if(pInfo)
{
pInfo->m_setStr.clear();
SAFE_DELETE(pInfo);
}
}
m_setTipsInfo.clear();
}
//--------------------------------------------------------------------------------------
BOOL C3DRoleData::CreateUserHelpInfo()
{
const char szDataFile[] = "ini/UserHelpInfo.dat";
// open file ...
FILE* fp = fopen(szDataFile, "rb");
MYASSERT(fp);
// header ...
char szHeader[32];
fread(szHeader, sizeof(char), 32, fp);
// version
DWORD dwVersion;
fread(&dwVersion, sizeof(DWORD), 1, fp);
// amount
DWORD dwRecordAmount;
fread(&dwRecordAmount, sizeof(DWORD), 1, fp);
for(DWORD dwCounter = 0; dwCounter < dwRecordAmount; dwCounter++)
{
UserHelpInfo* pInfo = new UserHelpInfo;
MYASSERT(pInfo);
fread(&pInfo->nMaxLevel, sizeof(int), 1, fp);
fread(&pInfo->nMinLevel, sizeof(int), 1, fp);
fread(&pInfo->nProfession, sizeof(int), 1, fp);
fread(&pInfo->nSex,sizeof(int),1,fp);
fread(&pInfo->nMapId,sizeof(int),1,fp);
fread(&pInfo->nStatus,sizeof(int),1,fp);
fread(&pInfo->nStatusLevel,sizeof(int),1,fp);
fread(&pInfo->nItemType,sizeof(int),1,fp);
fread(&pInfo->nMagicId,sizeof(int),1,fp);
fread(&pInfo->nMagicLevel,sizeof(int),1,fp);
//set default to 0
if(pInfo->nMaxLevel <0) pInfo->nMaxLevel = 0;
if(pInfo->nMinLevel <0) pInfo->nMinLevel = 0;
if(pInfo->nProfession <0) pInfo->nProfession = 0;
if(pInfo->nSex <0) pInfo->nSex = 0;
if(pInfo->nMapId <0) pInfo->nMapId = 0;
if(pInfo->nStatus <0) pInfo->nStatus = 0;
if(pInfo->nStatusLevel <0) pInfo->nStatusLevel = 0;
if(pInfo->nItemType <0) pInfo->nItemType = 0;
if(pInfo->nMagicId <0) pInfo->nMagicId = 0;
if(pInfo->nMagicLevel <0) pInfo->nMagicLevel = 0;
// read str ...
DWORD dwStrAmount;
fread(&dwStrAmount, sizeof(DWORD), 1, fp);
for(DWORD dwStrCounter = 0; dwStrCounter < dwStrAmount; dwStrCounter++)
{
// get length ...
DWORD dwLength;
fread(&dwLength, sizeof(DWORD), 1, fp);
// get str ...
char szStr[_MAX_STRING];
fread(szStr, sizeof(char), dwLength, fp);
string str = szStr;
pInfo->m_setStr.push_back(str);
}
m_setUserHelpInfo.push_back(pInfo);
}
return true;
}
//--------------------------------------------------------------------------------------
/*
BOOL C3DRoleData::CreateUserHelpInfo()
{
const char szIniFile[] = "ini/UserHelpInfo.ini";
char szTitle[64];
char szSubTitle[64];
char szStr[512];
int nData;
int i;
string str;
//Part1: header ...
DWORD dwInfoAmount = 0;
strcpy(szTitle, "Header");
strcpy(szSubTitle, "HelpInfoAmount");
::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
dwInfoAmount = nData;
//Part2: default info ...
UserHelpInfo* pInfo = new UserHelpInfo;
MYASSERT(pInfo);
DWORD dwStrAmount = 0;
strcpy(szTitle, "DefaultInfo");
strcpy(szSubTitle, "HelpLineAmount");
::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
dwStrAmount = nData;
for(i = 0; i < dwStrAmount; i ++)
{
sprintf(szSubTitle, "Line%d", i);
::IniStrGet(szIniFile, szTitle, szSubTitle, szStr, true);
str = szStr;
pInfo->m_setStr.push_back(str);
}
m_setUserHelpInfo.push_back(pInfo);
//Part3: text ...
for(i = 0; i < dwInfoAmount; i ++)
{
UserHelpInfo* pInfo = new UserHelpInfo;
MYASSERT(pInfo);
sprintf(szTitle, "HelpInfo%d", i);
strcpy(szSubTitle, "Profession");
::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
pInfo->nProfession = nData;
strcpy(szSubTitle, "MinLevel");
::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
pInfo->nMinLevel = nData;
strcpy(szSubTitle, "MaxLevel");
::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
pInfo->nMaxLevel = nData;
strcpy(szSubTitle, "Syndicate");
::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
pInfo->nSyndicate = nData;
strcpy(szSubTitle, "Marriage");
::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
pInfo->nMarriage = nData;
strcpy(szSubTitle, "HelpLineAmount");
::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
dwStrAmount = nData;
for(int j = 0; j < dwStrAmount; j ++)
{
sprintf(szSubTitle, "Line%d", j);
::IniStrGet(szIniFile, szTitle, szSubTitle, szStr, true);
str = szStr;
pInfo->m_setStr.push_back(str);
}
m_setUserHelpInfo.push_back(pInfo);
}
return true;
}*/
//--------------------------------------------------------------------------------------
void C3DRoleData::DestroyUserHelpInfo()
{
int nAmount = m_setUserHelpInfo.size();
for(int i = 0; i < nAmount; i ++)
{
UserHelpInfo* pInfo = m_setUserHelpInfo[i];
if(pInfo)
{
pInfo->m_setStr.clear();
SAFE_DELETE(pInfo);
}
}
m_setUserHelpInfo.clear();
}
//--------------------------------------------------------------------------------------
TerrainNpcTypeInfo* C3DRoleData::GetTerrainNpcInfo(OBJID idType)
{
int nAmount = m_setTerrainNpcTypeInfo.size();
for(int i = 0; i < nAmount; i ++)
{
TerrainNpcTypeInfo* pInfo = m_setTerrainNpcTypeInfo[i];
if(pInfo && pInfo->nType == idType)
{
return pInfo;
}
}
if(nAmount > 0)
return m_setTerrainNpcTypeInfo[0];
return NULL;
}
//--------------------------------------------------------------------------------------
int C3DRoleData::GetTipsAmount()
{
return m_setTipsInfo.size();
}
//--------------------------------------------------------------------------------------
int C3DRoleData::GetTipLineAmount(int nIndex)
{
int nAmount = m_setTipsInfo.size();
if((nIndex < 0) && (nIndex >= nAmount))
return 0;
if(m_setTipsInfo[nIndex])
return m_setTipsInfo[nIndex]->m_setStr.size();
else
return 0;
}
//--------------------------------------------------------------------------------------
char* C3DRoleData::GetTipLine(int nTipIndex, int nLineIndex)
{
int nAmount = m_setTipsInfo.size();
if((nTipIndex < 0) && (nTipIndex >= nAmount))
return NULL;
TipsInfo* pInfo = m_setTipsInfo[nTipIndex];
if(!pInfo)
return NULL;
nAmount = pInfo->m_setStr.size();
if((nLineIndex < 0) && (nLineIndex >= nAmount))
return NULL;
return (char*)pInfo->m_setStr[nLineIndex].c_str();
}
//--------------------------------------------------------------------------------------
BOOL C3DRoleData::CreateTextAction()
{
const char szIniFile[]="ini/TxtAction.ini";
FILE* fp =fopen(szIniFile, "r");
if (!fp)
return false;
char szAction[_MAX_STRING];
char szText[_MAX_STRING];
while (true)
{
int rval = fscanf(fp, "%s %s\n", szAction, szText);
if (rval == EOF)
break;
TextActionInfo* pInfo = new TextActionInfo;
MYASSERT (pInfo);
pInfo->strAction = szAction;
pInfo->strText = szText;
m_setTextAction.push_back(pInfo);
}
fclose(fp);
return true;
}
//--------------------------------------------------------------------------------------
void C3DRoleData::DestroyTextAction()
{
int nAmount = m_setTextAction.size();
for(int i = 0; i < nAmount; i ++)
{
SAFE_DELETE(m_setTextAction[i]);
}
m_setTextAction.clear();
}
//--------------------------------------------------------------------------------------
int C3DRoleData::GetTextActionAmount()
{
return m_setTextAction.size();
}
//--------------------------------------------------------------------------------------
char* C3DRoleData::GetTextActionTitle(int nIndex)
{
int nAmount = m_setTextAction.size();
if((nIndex < 0) || (nIndex >= nAmount))
return NULL;
return (char*)m_setTextAction[nIndex]->strAction.c_str();
}
//--------------------------------------------------------------------------------------
char* C3DRoleData::GetTextActionText(int nIndex)
{
int nAmount = m_setTextAction.size();
if((nIndex < 0) || (nIndex >= nAmount))
return NULL;
return (char*)m_setTextAction[nIndex]->strText.c_str();
}
//--------------------------------------------------------------------------------------
BOOL C3DRoleData::CreatePetInfo()
{
const char szPetData[_MAX_PATH] = "ini/pet.dat";
FILE* fp = fopen(szPetData, "rb");
if(!fp)
return false;
//read ...
int nRecordAmount;
fread(&nRecordAmount, sizeof(int), 1, fp);
for(int i = 0; i < nRecordAmount; i ++)
{
PetInfo* pInfo = new PetInfo;
MYASSERT(pInfo);
m_setPetInfo.push_back(pInfo);
// read Method Amount ...
DWORD dwMethodAmount;
fread(&dwMethodAmount, sizeof(DWORD), 1, fp);
DWORD dwMyCheck = 0;
for(int j = 0; j < dwMethodAmount; j++)
{
int nMethod;
fread(&nMethod, sizeof(int), 1, fp);
pInfo->setLocateTargetMethod.push_back(nMethod);
dwMyCheck += nMethod;
}
dwMyCheck = dwMethodAmount*dwMyCheck;
fread(&pInfo->nEnvMethod, sizeof(int), 1, fp);
fread(&pInfo->nAddSize, sizeof(int), 1, fp);
fread(&pInfo->nScale, sizeof(int), 1, fp);
fread(&pInfo->nAttackRange, sizeof(int), 1, fp);
fread(&pInfo->dwAttackInterval, sizeof(DWORD), 1, fp);
DWORD dwCheck;
fread(&dwCheck, sizeof(DWORD), 1, fp);
dwMyCheck += pInfo->nEnvMethod + pInfo->setLocateTargetMethod.size() * 2
+ pInfo->nAddSize + pInfo->nAttackRange * pInfo->dwAttackInterval;
if(dwCheck != dwMyCheck)
exit(-1);
}
fclose(fp);
return true;
}
//--------------------------------------------------------------------------------------
void C3DRoleData::DestroyPetInfo()
{
int nAmount = m_setPetInfo.size();
for(int i = 0; i < nAmount; i ++)
{
PetInfo* pInfo = m_setPetInfo[i];
if(pInfo)
pInfo->setLocateTargetMethod.clear();
SAFE_DELETE(pInfo);
}
m_setPetInfo.clear();
}
//--------------------------------------------------------------------------------------
PetInfo* C3DRoleData::GetPetInfo(int nIndex)
{
int nAmount = m_setPetInfo.size();
if(nIndex < 0 || nIndex >= nAmount)
return NULL;
return m_setPetInfo[nIndex];
}
//--------------------------------------------------------------------------------------
LightInfo* C3DRoleData::GetLightInfoByIndex(int nIndex)
{
if(nIndex == 0)
return NULL;
nIndex --;
int nAmount = m_setLightInfo.size();
if(nIndex < 0 && nIndex >= nAmount)
return NULL;
return m_setLightInfo[nIndex];
}
//--------------------------------------------------------------------------------------
DWORD C3DRoleData::GetRolePartLightInfo(OBJID idType)
{
map<OBJID, DWORD>::iterator iter = m_setRolePartLightInfo.find(idType);
if(iter != m_setRolePartLightInfo.end())
return iter->second;
return 0;
}
//--------------------------------------------------------------------------------------
BOOL C3DRoleData::CreateLightLInfo()
{
this->DestroyLightInfo();
const char szFile[]="ini/Light.ini";
FILE* fp = fopen(szFile, "r");
if(!fp)
return false;
while(true)
{
// scan title
char szLine[1024] = "";
if(EOF == fscanf(fp, "%s\n", szLine))
{
fclose(fp);
return true;
}
char szTitle[MAX_PATH] = "";
if (1 != sscanf(szLine, "[%s", szTitle))
continue;
char* p =strchr(szTitle, ']');
if (p)
*p = '\0';
else
{
fclose(fp);
::ErrorOut("Error Title line %s in %s", szLine, szFile);
return false;
}
LightInfo* pInfo = new LightInfo;
MYASSERT(pInfo);
pInfo->m_setLightPartInfo.clear();
int nLightAmount = 0;
MYASSERT(1 == fscanf(fp, "LightAmount=%d\n", &nLightAmount));
for(int i = 0; i < nLightAmount; i ++)
{
LightInfoPart* pPart = new LightInfoPart;
MYASSERT(pPart);
int nIndex;
int nData[4];
MYASSERT(6 == fscanf(fp, "Light%d=%u %d %d %d %d\n", &nIndex, &pPart->dwTimeCost,
&nData[0], &nData[1],
&nData[2], &nData[3]));
MYASSERT(nIndex == i);
pPart->ucAlphaRate = nData[0];
pPart->ucRedRate = nData[1];
pPart->ucGreenRate = nData[2];
pPart->ucBlueRate = nData[3];
pInfo->m_setLightPartInfo.push_back(pPart);
}
m_setLightInfo.push_back(pInfo);
}
fclose(fp);
return true;
}
//--------------------------------------------------------------------------------------
void C3DRoleData::DestroyLightInfo()
{
int nAmount = m_setLightInfo.size();
for(int i = nAmount-1; i >= 0; i --)
{
LightInfo* pInfo = m_setLightInfo[i];
if(pInfo)
{
int nPartAmount = pInfo->m_setLightPartInfo.size();
for(int j = 0; j < nPartAmount; j ++)
{
SAFE_DELETE(pInfo->m_setLightPartInfo[j]);
}
pInfo->m_setLightPartInfo.clear();
}
SAFE_DELETE(pInfo);
}
m_setLightInfo.clear();
}
//--------------------------------------------------------------------------------------
BOOL C3DRoleData::CreateRolePartLightInfo()
{
m_setRolePartLightInfo.clear();
const char szFile[]="ini/RolePartLight.ini";
FILE* fp = fopen(szFile, "r");
if(!fp)
return false;
OBJID idItemType;
DWORD dwLight;
while(true)
{
int rval = fscanf(fp, "%u=%u\n", &idItemType, &dwLight);
if(rval == EOF)
return false;
if(rval == 2)
m_setRolePartLightInfo[idItemType]=dwLight;
}
fclose(fp);
return true;
}
//------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -