📄 3droledata.cpp
字号:
SAFE_DELETE(m_setNpcType[i]);
m_setNpcType.clear();
}
//---------------------------------------------------------------------
NpcTypeInfo* C3DRoleData::GetNpcTypeInfo(OBJID idType)
{
int nAmount = m_setNpcType.size();
for(int i = 0; i < nAmount; i ++)
{
NpcTypeInfo* pInfo = m_setNpcType[i];
if(pInfo && pInfo->nType == idType)
return pInfo;
}
return m_setNpcType[0];
}
//---------------------------------------------------------------------
BOOL C3DRoleData::CreatePkTitleInfo()
{
const char szIniFile[]="ini/Common.ini";
char szTitle[]="PkTitle";
char szSubtitle[64];
// get amount
int nAmount = 0;
strcpy(szSubtitle, "Amount");
MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, nAmount));
for(int i = 0; i < nAmount; i ++)
{
PkTitleInfo* pInfoPkTitle = new PkTitleInfo;
MYASSERT(pInfoPkTitle);
sprintf(szSubtitle, "PkValueMax%d", i);
MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, pInfoPkTitle->nMaxPkValue));
sprintf(szSubtitle, "PkValueMin%d", i);
MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, pInfoPkTitle->nMinPkValue));
sprintf(szSubtitle, "PkTitle%d", i);
MYASSERT(::IniStrGet(szIniFile, szTitle, szSubtitle, pInfoPkTitle->szTitle));
m_setPkTitle.push_back(pInfoPkTitle);
}
return true;
}
//---------------------------------------------------------------------
void C3DRoleData::DestroyPkTitleInfo()
{
int nAmount = m_setPkTitle.size();
for(int i = 0; i < nAmount; i ++)
SAFE_DELETE(m_setPkTitle[i]);
m_setPkTitle.clear();
}
//---------------------------------------------------------------------
char* C3DRoleData::GetPkTitle(int nPkValue)
{
for(int i = 0; i < m_setPkTitle.size(); i ++)
{
PkTitleInfo* pInfo = m_setPkTitle[i];
if(pInfo && nPkValue <= pInfo->nMaxPkValue && nPkValue >= pInfo->nMinPkValue)
{
return pInfo->szTitle;
}
}
return NULL;
}
//---------------------------------------------------------------------
void C3DRoleData::DestroyEffectInfo()
{
int nAmount = m_setEffectInfo.size();
for(int i = 0; i < nAmount; i ++)
{
SAFE_DELETE(m_setEffectInfo[i]);
}
m_setEffectInfo.clear();
}
//---------------------------------------------------------------------
EffectInfo* C3DRoleData::GetEffectInfo(char* pszIndex)
{
if(!pszIndex)
return NULL;
int nAmount = m_setEffectInfo.size();
for(int i = 0; i < nAmount; i ++)
{
EffectInfo* pInfo = m_setEffectInfo[i];
if(pInfo && strcmp(pInfo->szTitle, pszIndex) == 0)
{
return pInfo;
}
}
return NULL;
}
//---------------------------------------------------------------------
void C3DRoleData::CreateEffectInfo()
{
CONST CHAR INI_FILE[] = "ini/Effect.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 ...
EffectInfo* pInfo = new EffectInfo;
MYASSERT (pInfo);
memset(pInfo, 0L, sizeof(EffectInfo));
strcpy(pInfo->szTitle, szTitle);
BOOL bSuc = true;
bSuc &= fscanf(fp, "AniTitle=%s\n", pInfo->szAniTitle);
bSuc &= fscanf(fp, "LoopTime=%d\n", &pInfo->dwLoopTime);
bSuc &= fscanf(fp, "FrameInterval=%d\n", &pInfo->dwFrameInterval);
bSuc &= fscanf(fp, "ShowWay=%d\n", &pInfo->dwShowWay);
bSuc &= fscanf(fp, "LoopInterval=%d\n", &pInfo->dwLoopInterval);
bSuc &= fscanf(fp, "OffsetX=%d\n", &pInfo->nOffsetX);
bSuc &= fscanf(fp, "OffsetY=%d\n", &pInfo->nOffsetY);
bSuc &= fscanf(fp, "Exigence=%d\n", &pInfo->nExigence);
bSuc &= fscanf(fp, "Delay=%d\n", &pInfo->dwDelay);
if (!bSuc)
{
::ErrorOut("error data: %s of %s", szTitle, INI_FILE);
break;
}
m_setEffectInfo.push_back(pInfo);
}
fclose(fp);
}
//---------------------------------------------------------------------
BOOL C3DRoleData::CreateMapMagicItemInfo()
{
CONST CHAR INI_FILE[] = "ini/MapMagicItem.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] = "";
int nType = 0;
if (1 != sscanf(szLine, "[Type%d]", &nType))
continue;
// get info ...
MapMagicItemInfo* pInfo = new MapMagicItemInfo;
if (!pInfo)
break;
memset(pInfo, 0L, sizeof(MapMagicItemInfo));
pInfo->idType = nType;
BOOL bSucRead = true;
bSucRead &= fscanf(fp, "Start=%s\n", pInfo->szStart);
bSucRead &= fscanf(fp, "Last=%s\n", pInfo->szLast);
bSucRead &= fscanf(fp, "End=%s\n", pInfo->szEnd);
if (!bSucRead)
{
::ErrorOut("error data: %s of %s", szTitle, INI_FILE);
break;
}
m_setMapMagicItem.push_back(pInfo);
}
fclose(fp);
return true;
}
//-------------------------------------------------------------------
void C3DRoleData::DestroyMapMagicItemInfo()
{
int nAmount = m_setMapMagicItem.size();
for(int i = 0; i < nAmount; i ++)
{
MapMagicItemInfo* pInfo = m_setMapMagicItem[i];
SAFE_DELETE(pInfo);
}
m_setMapMagicItem.clear();
}
//-------------------------------------------------------------------
MapMagicItemInfo* C3DRoleData::GetMapMagicItemInfo(int nType)
{
int nAmount = m_setMapMagicItem.size();
for(int i = 0; i < nAmount; i ++)
{
MapMagicItemInfo* pInfo = m_setMapMagicItem[i];
if(pInfo && pInfo->idType == nType)
return pInfo;
}
return NULL;
}
//-------------------------------------------------------------------
FlyingObjInfo* C3DRoleData::GetFlyingObjInfo(OBJID idItem)
{
int nAmount = m_setFlyObjInfo.size();
for(int i = 0; i < nAmount; i ++)
{
FlyingObjInfo* pInfo = m_setFlyObjInfo[i];
if(pInfo && pInfo->idType == idItem)
{
return pInfo;
}
}
// 容错...
if(nAmount > 0)
return m_setFlyObjInfo[0];
return NULL;
}
//-------------------------------------------------------------------
BOOL C3DRoleData::CreateFlyObjInfo()
{
char szIniFile[] = "ini/3DFlyingObj.ini";
char szTitle[64];
char szSubTitle[64];
//---------------------------------------------------------------
// Get Header info ...
int nData, nAmount;
strcpy(szTitle, "Header");
strcpy(szSubTitle, "Amount");
::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
nAmount = nData;
//---------------------------------------------------------------
for(int i = 0; i < nAmount; i ++)
{
// Get ID ...
strcpy(szTitle, "Header");
sprintf(szSubTitle, "ID%d", i);
OBJID id;
::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
id = nData;
FlyingObjInfo* pInfo = new FlyingObjInfo;
MYASSERT(pInfo);
pInfo->idType = id;
// Get Info ...
sprintf(szTitle, "%u", id);
strcpy(szSubTitle, "SimpleObjID");
::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
pInfo->idSimpleObj = nData;
strcpy(szSubTitle, "EffectIndex");
::IniStrGet(szIniFile, szTitle, szSubTitle, pInfo->szFlyEffect, true);
strcpy(szSubTitle, "FlyingSound");
::IniStrGet(szIniFile, szTitle, szSubTitle, pInfo->szFlySound, true);
strcpy(szSubTitle, "HitSound");
::IniStrGet(szIniFile, szTitle, szSubTitle, pInfo->szHitSound, true);
strcpy(szSubTitle, "TargetEffect");
::IniStrGet(szIniFile, szTitle, szSubTitle, pInfo->szTargetEffect, true);
m_setFlyObjInfo.push_back(pInfo);
}
return true;
}
//-------------------------------------------------------------------
void C3DRoleData::DestroyFlyObjInfo()
{
int nAmount = m_setFlyObjInfo.size();
for(int i = 0; i < nAmount; i ++)
{
SAFE_DELETE(m_setFlyObjInfo[i]);
}
m_setFlyObjInfo.clear();
}
//-------------------------------------------------------------------
BOOL C3DRoleData::CreateTerrainWeatherInfo()
{
TerrainWeatherInfo infoWeather;
char szIni[]="ini/weather.ini";
FILE* fp = fopen(szIni, "r");
MYASSERT(fp);
while(true)
{
int nReturn = fscanf(fp, "%d %d %d %d %u\n", &infoWeather.nTerrain, &infoWeather.nType, &infoWeather.nWindDir, &infoWeather.nLevel, &infoWeather.dwColor);
if(EOF == nReturn)
break;
if(5 == nReturn)
{
TerrainWeatherInfo* pInfo = new TerrainWeatherInfo;
if(pInfo)
{
memcpy(pInfo, &infoWeather, sizeof(TerrainWeatherInfo));
m_setTerrainWeatherInfo.push_back(pInfo);
}
}
}
return true;
}
//-------------------------------------------------------------------
void C3DRoleData::DestroyTerrainWeatherInfo()
{
int nAmount = m_setTerrainWeatherInfo.size();
for(int i = 0; i < nAmount; i ++)
{
if(m_setTerrainWeatherInfo[i])
{
SAFE_DELETE(m_setTerrainWeatherInfo[i]);
}
m_setTerrainWeatherInfo.clear();
}
}
//-------------------------------------------------------------------
TerrainWeatherInfo* C3DRoleData::GetWeatherInfo(int nTerrain)
{
int nAmount = m_setTerrainWeatherInfo.size();
for(int i = 0; i < nAmount; i ++)
{
if(m_setTerrainWeatherInfo[i] && m_setTerrainWeatherInfo[i]->nTerrain == nTerrain)
{
return m_setTerrainWeatherInfo[i];
}
}
return NULL;
}
//-------------------------------------------------------------------
StatusEffectInfo* C3DRoleData::GetStatusEffectInfoByIndex(int nIndex)
{
int nAmount = m_setStatusEffectInfo.size();
if(nIndex>0 && nIndex<nAmount)
return m_setStatusEffectInfo[nIndex];
return NULL;
}
//-------------------------------------------------------------------
DWORD C3DRoleData::GetStatusEffectInfoAmount()
{
return m_setStatusEffectInfo.size();
}
//-------------------------------------------------------------------
BOOL C3DRoleData::CreateStatusEffectInfo()
{
char szIni[]="ini/statuseffect.ini";
StatusEffectInfo info;
FILE* fp = fopen(szIni, "r");
MYASSERT(fp);
while(true)
{
int nReturn = fscanf(fp, "%I64x %s %s\n", &info.dwStatus, info.sz3DEffect, info.sz2DEffect);
if(EOF == nReturn)
break;
if(3 == nReturn)
{
StatusEffectInfo* pInfo = new StatusEffectInfo;
if(pInfo)
{
memcpy(pInfo, &info, sizeof(StatusEffectInfo));
m_setStatusEffectInfo.push_back(pInfo);
}
}
}
return true;
}
//-------------------------------------------------------------------
void C3DRoleData::DestroyStatusEffectInfo()
{
int nAmount = m_setStatusEffectInfo.size();
for(int i = 0; i < nAmount; i ++)
{
if(m_setStatusEffectInfo[i])
SAFE_DELETE(m_setStatusEffectInfo[i]);
}
m_setStatusEffectInfo.clear();
}
//-------------------------------------------------------------------
const char* C3DRoleData::GetUserHelpInfoLineByIndex(int nProfessional, int nLevel, int nSex,int nMapId,int nStatus,int nStatusLevel,int nItemType,int nMagicId, int nIndex)
{
int nAmount = m_setUserHelpInfo.size();
for(int i = 1; i < nAmount; i ++)
{
UserHelpInfo* pInfo = m_setUserHelpInfo[i];
if(pInfo
&& pInfo->nProfession == nProfessional
&& nLevel <= pInfo->nMaxLevel
&& nLevel >= pInfo->nMinLevel
&& nStatus == pInfo->nStatus
&& nStatusLevel == pInfo->nStatusLevel
&& nSex == pInfo->nSex
&& nMapId == pInfo->nMapId
&& nItemType == pInfo->nItemType
&& nMagicId == pInfo->nMagicId)
{
int nStrAmount = pInfo->m_setStr.size();
if(nIndex >= nStrAmount || nIndex < 0)
return NULL;
return pInfo->m_setStr[nIndex].c_str();
}
}
if(nAmount == 0)
return NULL;
// default ...
UserHelpInfo* pInfo = m_setUserHelpInfo[0];
if(!pInfo)
return NULL;
int nStrAmount = pInfo->m_setStr.size();
if(nIndex >= nStrAmount || nIndex < 0)
return NULL;
return pInfo->m_setStr[nIndex].c_str();
}
//--------------------------------------------------------------------------------------
int C3DRoleData::GetUserHelpInfoLineAmount(int nProfessional, int nLevel, int nSex,int nMapId,int nStatus,int nStatusLevel,int nItemType,int nMagicId)
{
int nAmount = m_setUserHelpInfo.size();
for(int i = 1; i < nAmount; i ++)
{
UserHelpInfo* pInfo = m_setUserHelpInfo[i];
if(pInfo &&
pInfo->nProfession == nProfessional
&& nLevel <= pInfo->nMaxLevel
&& nLevel >= pInfo->nMinLevel
&& nStatus == pInfo->nStatus
&& nStatusLevel == pInfo->nStatusLevel
&& nSex == pInfo->nSex
&& nMapId == pInfo->nMapId
&& nItemType == pInfo->nItemType
&& pInfo->nMagicId == nMagicId )
{
return pInfo->m_setStr.size();
}
}
if(nAmount == 0)
return 0;
// default ...
UserHelpInfo* pInfo = m_setUserHelpInfo[0];
if(pInfo)
return pInfo->m_setStr.size();
return NULL;
}
//--------------------------------------------------------------------------------------
BOOL C3DRoleData::CreateTipsInfo()
{
const char szDataFile[] = "ini/tips.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++)
{
TipsInfo* pInfo = new TipsInfo;
// read str ...
DWORD dwStrAmount;
fread(&dwStrAmount, sizeof(DWORD), 1, fp);
for(DWORD dwStrCounter = 0; dwStrCounter < dwStrAmount; dwStrCounter++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -