📄 3droledata.cpp
字号:
BOOL C3DRoleData::GetTransformJumpAble(int nLook)
{
int nAmount = m_setTransFormInfo.size();
for(int i = 0; i < nAmount; i ++)
{
if(m_setTransFormInfo[i].nLook == nLook)
{
return m_setTransFormInfo[i].bCanJump;
}
}
return false;
}
//---------------------------------------------------------------------
int C3DRoleData::GetTransformAdditiveSize(int nLook)
{
int nAmount = m_setTransFormInfo.size();
for(int i = 0; i < nAmount; i ++)
{
if(m_setTransFormInfo[i].nLook == nLook)
{
return m_setTransFormInfo[i].nAddSize;
}
}
return 0;
}
//---------------------------------------------------------------------
BOOL C3DRoleData::CreateTransFormInfo()
{
this->DestroyTransFormInfo();
m_setTransFormInfo.clear();
CONST char INI_FILE[] = "ini/AdditiveSize.ini";
char szTitle[64];
char szSubtitle[64];
// get header info
strcpy(szTitle, "Header");
strcpy(szSubtitle, "Amount");
int nAmount = 0;
::IniDataGet(INI_FILE, szTitle, szSubtitle, nAmount, true);
for(int i = 0; i < nAmount; i ++)
{
// get Index
int nIndex = 0;
strcpy(szTitle, "Header");
sprintf(szSubtitle, "Index%d", i);
::IniDataGet(INI_FILE, szTitle, szSubtitle, nIndex, true);
// get look ...
sprintf(szTitle, "Transform%d", nIndex);
strcpy(szSubtitle, "Look");
int nLook;
::IniDataGet(INI_FILE, szTitle, szSubtitle, nLook, true);
// get size ...
int nSize;
strcpy(szSubtitle, "AdditiveSize");
::IniDataGet(INI_FILE, szTitle, szSubtitle, nSize, true);
CTransformInfo info;
info.nLook = nLook;
info.nAddSize = nSize;
strcpy(szSubtitle, "Jump");
char szJump[256];
::IniStrGet(INI_FILE, szTitle, szSubtitle, szJump, true);
if(strcmp(szJump, "ON") == 0)
info.bCanJump = true;
else
info.bCanJump = false;
int nScale;
strcpy(szSubtitle, "Scale");
::IniDataGet(INI_FILE, szTitle, szSubtitle, nScale, true);
info.nScale = nScale;
info.nIndex = nIndex;
m_setTransFormInfo.push_back(info);
}
return true;
}
//---------------------------------------------------------------------
void C3DRoleData::DestroyTransFormInfo()
{
m_setTransFormInfo.clear();
}
//---------------------------------------------------------------------
CTransformInfo* C3DRoleData::GetTransformInfo(int nIndex)
{
int nAmount = m_setTransFormInfo.size();
for(int i = 0; i < nAmount; i ++)
{
if(m_setTransFormInfo[i].nIndex == nIndex)
return &m_setTransFormInfo[i];
}
return NULL;
}
//---------------------------------------------------------------------
BOOL C3DRoleData::CreateMonsterInfo(void)
{
CONST CHAR INI_FILE[] = "ini/Monster.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;
DWORD dwType = 0;
if (1 != sscanf(szLine, "[%d]", &dwType))
continue;
if (dwType == 0 )
continue;
// get info ...
CMonsterInfo* pInfo = new CMonsterInfo;
if (!pInfo)
break;
memset(pInfo, 0L, sizeof(CMonsterInfo));
BOOL bSucRead = true;
char szTitle[_MAX_STRING] = "";
pInfo->idType = dwType;
if(!fscanf(fp, "Name=%s\n", pInfo->szMonster))
{
strcpy(pInfo->szMonster, "NULL");
}
bSucRead &= fscanf(fp, "SizeAdd=%d\n", &pInfo->nAddSize);
bSucRead &= fscanf(fp, "ZoomPercent=%d\n", &pInfo->nZoomPercent);
bSucRead &= fscanf(fp, "MaxLife=%d\n", &pInfo->nMaxLife);
bSucRead &= fscanf(fp, "Level=%d\n", &pInfo->nLevel);
bSucRead &= fscanf(fp, "WhiteBlack=%d\n", &pInfo->nWhiteBlack);
int nData;
bSucRead &= fscanf(fp, "Defy=%d\n", &nData);
bSucRead &= fscanf(fp, "Defence=%d\n", &nData);
bSucRead &= fscanf(fp, "MDefence=%d\n", &nData);
if(!fscanf(fp, "DisappearEffect=%s\n", pInfo->szDisappearEffect))
{
strcpy(pInfo->szDisappearEffect, "NULL");
strcpy(pInfo->szDisappearSound, "NULL");
}
else if(!fscanf(fp, "DisappearSound=%s\n", pInfo->szDisappearSound))
{
strcpy(pInfo->szDisappearSound, "NULL");
}
if (!bSucRead)
{
::ErrorOut("error data: %s of %s", szTitle, INI_FILE);
break;
}
m_setMonsterInfo.push_back(pInfo);
}
fclose(fp);
return true;
}
//---------------------------------------------------------------------
const CMonsterInfo* C3DRoleData::GetMonsterInfo(const char* pszMonster)
{
if (!pszMonster && strlen(pszMonster)>16)
return NULL;
int nInfoAmount = m_setMonsterInfo.size();
for (int i=nInfoAmount-1; i>=0; i--)
{
CMonsterInfo* pInfo = m_setMonsterInfo[i];
if (pInfo && 0 == strcmp(pszMonster, pInfo->szMonster))
return pInfo;
}
return NULL;
}
//---------------------------------------------------------------------
const CMonsterInfo* C3DRoleData::GetMonsterInfo(DWORD idType)
{
if (idType == 0)
return NULL;
int nInfoAmount = m_setMonsterInfo.size();
for (int i=nInfoAmount-1; i>=0; i--)
{
CMonsterInfo* pInfo = m_setMonsterInfo[i];
if (pInfo && idType == pInfo->idType)
return pInfo;
}
return NULL;
}
//---------------------------------------------------------------------
BOOL C3DRoleData::CreateActionMapEffectInfo()
{
const char szIniFile[] = "ini/ActionMap3DEffect.ini";
FILE* fp = fopen(szIniFile, "r");
if (!fp)
{
::ErrorOut("error on open %s.", szIniFile);
return false;
}
while(true)
{
// scan title
char szLine[1024] = "";
if (EOF == fscanf(fp, "%s\n", szLine))
break;
// get info ...
char szTitle[_MAX_STRING] = "";
if (1 != sscanf(szLine, "[%s]", szTitle))
continue;
ActionMapEffectInfo* pInfo = new ActionMapEffectInfo;
MYASSERT (pInfo);
BOOL bSucRead = true;
bSucRead &= fscanf(fp, "Index=%d\n", &pInfo->idx);
bSucRead &= fscanf(fp, "Effect=%s\n", &pInfo->szEffect);
bSucRead &= fscanf(fp, "ShowTime=%d\n", &pInfo->nShowTime);
bSucRead &= fscanf(fp, "Rotate=%d\n", &pInfo->bRotate);
if(!fscanf(fp, "Type=%d\n", &pInfo->nType))
pInfo->nType = 0;
if (!bSucRead)
{
::ErrorOut("error data: %s of %s", szTitle, szIniFile);
break;
}
// keep it
m_setMapEffectInfo.push_back(pInfo);
}
fclose(fp);
return true;
}
//---------------------------------------------------------------------
void C3DRoleData::DestroyActionMapEffectInfo()
{
int nInfos = m_setMapEffectInfo.size();
for (int i=nInfos-1; i>=0; i--)
{
ActionMapEffectInfo* pInfo = m_setMapEffectInfo[i];
SAFE_DELETE(pInfo);
}
m_setMapEffectInfo.clear();
}
//---------------------------------------------------------------------
const ActionMapEffectInfo* C3DRoleData::GetActionMapEffect (int nLook, int nAction, int nTerrain) const
{
int nInfos = m_setMapEffectInfo.size();
for (int i=nInfos-1; i>=0; i--)
{
ActionMapEffectInfo* pInfo = m_setMapEffectInfo[i];
MYASSERT (pInfo);
DWORD idx = nLook*1000000+nAction*1000+nTerrain;
if (pInfo->idx == idx)
return pInfo;
// wildcard
const int nWildCard = 999;
idx = nWildCard*1000000+nAction*1000+nTerrain;
if (pInfo->idx == idx)
return pInfo;
idx = nLook*1000000+nWildCard*1000+nTerrain;
if (pInfo->idx == idx)
return pInfo;
idx = nLook*1000000+nAction*1000+nWildCard;
if (pInfo->idx == idx)
return pInfo;
}
return NULL;
}
//---------------------------------------------------------------------
void C3DRoleData::UpdateMy3DEffectInfo()
{
CONST CHAR INI_FILE[] = "ini/3DEffect.ini";
FILE* fp = fopen(INI_FILE, "w");
if (!fp)
{
::ErrorOut("error on open %s.", INI_FILE);
return;
}
for(int i = 0; i < m_setMy3DEffectInfo.size(); i ++)
{
CMy3DEffectInfo* pInfo = m_setMy3DEffectInfo[i];
fprintf(fp, "[%s]\n", pInfo->szIndex);
fprintf(fp, "Amount=%u\n", pInfo->nAmount);
for (int j=0; j<pInfo->nAmount; j++)
{
fprintf(fp, "EffectId%d=%u\n", j, pInfo->idEffect[j]);
fprintf(fp, "TextureId%d=%u\n", j, pInfo->idTexture[j]);
fprintf(fp, "ASB%d=%d\n", j, pInfo->nASB[j]);
fprintf(fp, "ADB%d=%d\n", j, pInfo->nADB[j]);
}
fprintf(fp, "Delay=%d\n", pInfo->nDelay);
fprintf(fp, "LoopTime=%d\n", pInfo->nLoopTime);
fprintf(fp, "FrameInterval=%d\n", pInfo->nFrameInterval);
fprintf(fp, "LoopInterval=%d\n", pInfo->nLoopInterval);
fprintf(fp, "OffsetX=%d\n", pInfo->nOffsetX);
fprintf(fp, "OffsetY=%d\n", pInfo->nOffsetY);
fprintf(fp, "OffsetZ=%d\n", pInfo->nOffsetZ);
fprintf(fp, "\n");
fprintf(fp, "\n");
fprintf(fp, "\n");
}
fclose(fp);
}
//---------------------------------------------------------------------
void C3DRoleData::CreateMy3DEffectInfo()
{
CONST CHAR INI_FILE[] = "ini/3DEffect.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 ...
CMy3DEffectInfo* pInfo = new CMy3DEffectInfo;
MYASSERT (pInfo);
memset(pInfo, 0L, sizeof(CMy3DEffectInfo));
strcpy(pInfo->szIndex, szTitle);
BOOL bSuc = true;
bSuc &= fscanf(fp, "Amount=%d\n", &pInfo->nAmount);
if (!bSuc)
{
::ErrorOut("error part amount data: %s of %s", szTitle, INI_FILE);
break;
}
for (int i=0; i<pInfo->nAmount; i++)
{
char szIndex[256] = "";
sprintf(szIndex, "EffectId%d=%s\n", i, "%d");
bSuc &= fscanf(fp, szIndex, &pInfo->idEffect[i]);
sprintf(szIndex, "TextureId%d=%s\n", i, "%d");
bSuc &= fscanf(fp, szIndex, &pInfo->idTexture[i]);
sprintf(szIndex, "ASB%d=%s\n", i, "%d");
if(!fscanf(fp, szIndex, &pInfo->nASB[i]))
{
pInfo->nASB[i] = 5;
}
sprintf(szIndex, "ADB%d=%s\n", i, "%d");
if(!fscanf(fp, szIndex, &pInfo->nADB[i]))
{
pInfo->nADB[i] = 6;
}
}
bSuc &= fscanf(fp, "Delay=%d\n", &pInfo->nDelay);
bSuc &= fscanf(fp, "LoopTime=%d\n", &pInfo->nLoopTime);
bSuc &= fscanf(fp, "FrameInterval=%d\n", &pInfo->nFrameInterval);
bSuc &= fscanf(fp, "LoopInterval=%d\n", &pInfo->nLoopInterval);
bSuc &= fscanf(fp, "OffsetX=%d\n", &pInfo->nOffsetX);
bSuc &= fscanf(fp, "OffsetY=%d\n", &pInfo->nOffsetY);
if(!fscanf(fp, "OffsetZ=%d\n", &pInfo->nOffsetZ))
{
pInfo->nOffsetZ = 0;
}
if (!fscanf(fp, "ShapeAir=%d\n", &pInfo->nShapeAir) )
{
pInfo->nShapeAir = 0;
}
if (!bSuc)
{
::ErrorOut("error data: %s of %s", szTitle, INI_FILE);
break;
}
m_setMy3DEffectInfo.push_back(pInfo);
}
fclose(fp);
}
//---------------------------------------------------------------------
const CMy3DEffectInfo* C3DRoleData::GetMy3DEffectInfo(const char* pszIndex)
{
if (!pszIndex)
return false;
int nAmount = m_setMy3DEffectInfo.size();
for (int i=nAmount-1; i>=0; i--)
{
CMy3DEffectInfo* pInfo = m_setMy3DEffectInfo[i];
if (pInfo && 0 == strcmp(pInfo->szIndex, pszIndex))
return pInfo;
}
return NULL;
}
//---------------------------------------------------------------------
void C3DRoleData::DestroyMy3DEffectInfo()
{
int nAmount = m_setMy3DEffectInfo.size();
for (int i=nAmount-1; i>=0; i--)
{
CMy3DEffectInfo* pInfo = m_setMy3DEffectInfo[i];
SAFE_DELETE (pInfo);
}
m_setMy3DEffectInfo.clear();
}
//---------------------------------------------------------------------
void C3DRoleData::CreateEffectLookSetInfo()
{
const char szIniFile[] = "ini/EffectLookSet.ini";
FILE* fp = fopen(szIniFile, "r");
if(fp)
{
char szLine[1024];
while(NULL != fgets(szLine, 1023, fp))
{
if(strlen(szLine) <= 0)
continue;
if(szLine[0] == ';')
continue;
char szTitle[_MAX_STRING] = "";
if (1 != sscanf(szLine, "[%s]", szTitle))
continue;
BOOL bSuc = true;
EffectLookSetInfo* pInfo = new EffectLookSetInfo;
bSuc &= fscanf(fp, "Look=%d\n", &pInfo->dwLook);
bSuc &= fscanf(fp, "DefaultX=%d\n", &pInfo->nDefaultX);
bSuc &= fscanf(fp, "DefaultY=%d\n", &pInfo->nDefaultY);
bSuc &= fscanf(fp, "DefaultZ=%d\n", &pInfo->nDefaultZ);
bSuc &= fscanf(fp, "Amount=%d\n", &pInfo->nAmount);
if (!bSuc)
{
::ErrorOut("error data: %s of %s", szTitle, szIniFile);
break;
}
for(int i=0;i<pInfo->nAmount;i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -