📄 gamedataset.cpp
字号:
C3DMotion* CGameDataSet::CreateNew3DMotion(const char* pszFileName)
{
if (!pszFileName)
return NULL;
C3DMotion* pObj = new C3DMotion;
if (!pObj)
return NULL;
if (!pObj->Create((char*)pszFileName))
{
const OBJID idMotionError = 500010;
::ErrorMsg(g_objGameDataSet.GetStr(idMotionError), pszFileName);
SAFE_DELETE(pObj);
return NULL;
}
return pObj;
}
//--------------------------------------------------------------
C3DTexture* CGameDataSet::CreateNew3DTexture(OBJID id)
{
if (id == ID_NONE)
return NULL;
map<OBJID, string>::iterator iter = m_mapResTexture.find(id);
if (iter == m_mapResTexture.end())
{
const OBJID idTextureError = 500011;
::ErrorMsg(g_objGameDataSet.GetStr(idTextureError), id);
return NULL;
}
const char* pszFileName = iter->second.c_str();
MYASSERT (pszFileName);
C3DTexture* pTexture = new C3DTexture;
if (!pTexture)
return NULL;
if (!pTexture->Create(pszFileName))
{
SAFE_DELETE(pTexture);
const OBJID idTextureError = 500012;
::ErrorOut(g_objGameDataSet.GetStr(idTextureError), pszFileName);
return NULL;
}
return pTexture;
}
//--------------------------------------------------------------
C3DEffect* CGameDataSet::CreateNew3DEffect(OBJID id)
{
if (id == ID_NONE)
return NULL;
map<OBJID, string>::iterator iter = m_mapResEffectObj.find(id);
if (iter == m_mapResEffectObj.end())
{
const OBJID idEffect = 500013;
::ErrorMsg(g_objGameDataSet.GetStr(idEffect), id);
return NULL;
}
char szFileName[_MAX_PATH] = "";
strcpy(szFileName, iter->second.c_str());
C3DEffect* pEffect = new C3DEffect;
if (!pEffect)
return NULL;
if (!pEffect->Load(szFileName))
{
::ErrorMsg("Error: CreateNew3DEffect(%s) 失败. ", szFileName);
SAFE_DELETE(pEffect);
return NULL;
}
return pEffect;
}
//--------------------------------------------------------------
void CGameDataSet::Process3DObjSet(void)
{
MAP_3DOBJEX::iterator iter = m_set3DObj.begin();
while(iter != m_set3DObj.end())
{
C3DObjInfo* pInfo = iter->second;
if(!pInfo || ::TimeGet() - pInfo->timeBirth > _3DOBJ_DEADLINE)
{
if(pInfo)
{
SAFE_DELETE(pInfo->p3DObj);
SAFE_DELETE(pInfo->pDefaultMotion);
SAFE_DELETE(pInfo);
}
MAP_3DOBJEX::iterator iterCopy = iter;
iterCopy ++;
m_set3DObj.erase(iter);
iter = iterCopy;
}
else
{
iter ++;
}
}
}
//--------------------------------------------------------------
void CGameDataSet::Process3DMotionSet(void)
{
MAP_3DMOTIONEX::iterator iter = m_set3DMotion.begin();
while(iter != m_set3DMotion.end())
{
C3DMotionInfo* pInfo = iter->second;
if(!pInfo || ::TimeGet() - pInfo->timeBirth > m_dw3DMotionLife)
{
if(pInfo)
{
SAFE_DELETE(pInfo->p3DMotion);
SAFE_DELETE(pInfo);
}
MAP_3DMOTIONEX::iterator iterCopy = iter;
iterCopy ++;
m_set3DMotion.erase(iter);
iter = iterCopy;
}
else
{
iter ++;
}
}
}
//--------------------------------------------------------------
void CGameDataSet::Process3DWeaponMotionSet(void)
{
MAP_3DMOTIONEX::iterator iter = m_set3DWeaponMotion.begin();
while(iter != m_set3DWeaponMotion.end())
{
C3DMotionInfo* pInfo = iter->second;
if(!pInfo || ::TimeGet() - pInfo->timeBirth > m_dw3DMotionLife)
{
if(pInfo)
{
SAFE_DELETE(pInfo->p3DMotion);
SAFE_DELETE(pInfo);
}
MAP_3DMOTIONEX::iterator iterCopy = iter;
iterCopy ++;
m_set3DWeaponMotion.erase(iter);
iter = iterCopy;
}
else
{
iter ++;
}
}
}
//--------------------------------------------------------------
void CGameDataSet::Process3DMountMotionSet (void)
{
MAP_3DMOTIONEX::iterator iter = m_set3DMountMotion.begin();
while(iter != m_set3DMountMotion.end())
{
C3DMotionInfo* pInfo = iter->second;
if(!pInfo || ::TimeGet() - pInfo->timeBirth > m_dw3DMotionLife)
{
if(pInfo)
{
SAFE_DELETE(pInfo->p3DMotion);
SAFE_DELETE(pInfo);
}
MAP_3DMOTIONEX::iterator iterCopy = iter;
iterCopy ++;
m_set3DMountMotion.erase(iter);
iter = iterCopy;
}
else
{
iter ++;
}
}
}
//--------------------------------------------------------------
void CGameDataSet::Process3DMantalMotionSet (void)
{
MAP_3DMOTIONEX::iterator iter = m_set3DMantleMotion.begin();
while(iter != m_set3DMantleMotion.end())
{
C3DMotionInfo* pInfo = iter->second;
if(!pInfo || ::TimeGet() - pInfo->timeBirth > m_dw3DMotionLife)
{
if(pInfo)
{
SAFE_DELETE(pInfo->p3DMotion);
SAFE_DELETE(pInfo);
}
MAP_3DMOTIONEX::iterator iterCopy = iter;
iterCopy ++;
m_set3DMantleMotion.erase(iter);
iter = iterCopy;
}
else
{
iter ++;
}
}
}
//--------------------------------------------------------------
void CGameDataSet::Process3DTextureSet(void)
{
MAP_3DTEXTUREEX::iterator iter = m_set3DTexture.begin();
while(iter != m_set3DTexture.end())
{
C3DTextureInfo* pInfo = iter->second;
if(!pInfo || ::TimeGet() - pInfo->timeBirth > m_dw3DTextureLife)
{
if(pInfo)
{
SAFE_DELETE(pInfo->p3DTexture);
SAFE_DELETE(pInfo);
}
MAP_3DTEXTUREEX::iterator iterCopy = iter;
iterCopy ++;
m_set3DTexture.erase(iter);
iter = iterCopy;
}
else
{
iter ++;
}
}
}
//--------------------------------------------------------------
void CGameDataSet::Process3DEffectSet(void)
{
MAP_3DEFFECTEX::iterator iter = m_set3DEffect.begin();
while(iter != m_set3DEffect.end())
{
C3DEffectInfo* pInfo = iter->second;
if(!pInfo || ::TimeGet() - pInfo->timeBirth > m_dw3DEffectLife)
{
if(pInfo)
{
SAFE_DELETE(pInfo->p3DEffect);
SAFE_DELETE(pInfo);
}
MAP_3DEFFECTEX::iterator iterCopy = iter;
iterCopy ++;
m_set3DEffect.erase(iter);
iter = iterCopy;
}
else
{
iter ++;
}
}
}
//--------------------------------------------------------------
OBJID CGameDataSet::Get3DTextureID(C3DTexture* pTexture)
{
/*
int nAmount = m_set3DTexture.size();
for(int i = 0; i < nAmount; i++)
{
C3DTextureInfo* pInfo = m_set3DTexture[i];
if(pInfo->p3DTexture == pTexture)
return pInfo->id;
}*/
return ID_NONE;
}
//--------------------------------------------------------------
CAni* CGameDataSet::GetItemMinIcon(OBJID idItemType, int nExigence)
{
if(idItemType == ID_NONE)
{
return NULL;
}
else
{
char szAniFile[] = "ani/ItemMinIcon.Ani";
char szTitle[64];
sprintf(szTitle, "Item%d", idItemType);
CAni* pAni = g_objGameDataSet.GetDataAni(szAniFile, szTitle, nExigence);
if (!pAni)
{
pAni = g_objGameDataSet.GetDataAni(szAniFile, "ItemDefault", nExigence);
}
return pAni;
}
}
//--------------------------------------------------------------
CAni* CGameDataSet::GetPlayerFaceIcon(int nFace, int nLook, int nExigence)
{
char szAniFile[] = "ani/PlayerFace.Ani";
char szTitle[64];
int nRealFace = 10000*(nFace+1) + nLook;
sprintf(szTitle, "Face%d", nRealFace);
return g_objGameDataSet.GetDataAni(szAniFile, szTitle, nExigence);
}
//--------------------------------------------------------------
CAni* CGameDataSet::GetPetFaceIcon(int nFace, int nExigence)
{
char szAniFile[] = "ani/PetFace.Ani";
char szTitle[64];
sprintf(szTitle, "Face%d", nFace);
return g_objGameDataSet.GetDataAni(szAniFile, szTitle, nExigence);
}
//--------------------------------------------------------------
CAni* CGameDataSet::GetNpcFaceIcon(int nFace, int nExigence)
{
char szAniFile[] = "ani/NpcFace.Ani";
char szTitle[64];
sprintf(szTitle, "Face%d", nFace);
return g_objGameDataSet.GetDataAni(szAniFile, szTitle, nExigence);
}
//--------------------------------------------------------------
void CGameDataSet::GetObjAmount(DWORD& dw3DObj, DWORD& dw3DMotion, DWORD& dw3DWMotion, DWORD& dwTexture, DWORD& dw3DEffect, DWORD& dwDataAni)
{
dw3DObj = m_set3DObj.size();
dw3DMotion = m_set3DMotion.size();
dw3DWMotion = m_set3DWeaponMotion.size();
dwTexture = m_set3DTexture.size();
dw3DEffect = m_set3DEffect.size();
dwDataAni = m_mapDataAni.size();
}
//--------------------------------------------------------------
const char* CGameDataSet::GetSound(OBJID idSound)
{
map<OBJID, string>::iterator iter = m_mapSound.find(idSound);
if(iter != m_mapSound.end())
return iter->second.c_str();
return NULL;
}
//--------------------------------------------------------------
CAni* CGameDataSet::GetMedal(int nMedal, int nExigence)
{
char szAniFile[] = "ani/Medal.Ani";
char szTitle[64];
sprintf(szTitle, "Medal%d", nMedal);
return g_objGameDataSet.GetDataAni(szAniFile, szTitle, nExigence);
}
//--------------------------------------------------------------
void CGameDataSet::InitDnp(void)
{
/*
const char szDisperseFile[] = "ini/DisperseFile.ini";
char szLine[512];
FILE* fp = fopen(szDisperseFile, "r");
if(!fp)
return;
while(true)
{
if(EOF == fscanf(fp, "%s\n", szLine))
break;
else
::Common_AddDnpDisperseFile(szLine);
}
fclose(fp);*/
const char szDnpFile[] = "ini/dnpFile.ini";
char szLine[512];
FILE* fp = fopen(szDnpFile, "r");
if(!fp)
return;
while(true)
{
if(EOF == fscanf(fp, "%s\n", szLine))
break;
else
::MyDnpFileOpen(szLine);
}
}
//--------------------------------------------------------------
CAni* CGameDataSet::GetEmblemIcon(int nIndex, int nExigence)
{
char szAniFile[] = "ani/Emblem.Ani";
char szTitle[64];
sprintf(szTitle, "Emblem%d", nIndex);
return g_objGameDataSet.GetDataAni(szAniFile, szTitle, nExigence);
}
//--------------------------------------------------------------
void CGameDataSet::CreateItemEffectInfo()
{
char szIniFile[] = "ini/itemeffect.ini";
FILE* fp = fopen(szIniFile, "r");
if(fp)
{
char szLine[1024];
while(fgets(szLine, 1023, fp))
{
OBJID id;
char szEffect0[256];
char szEffect1[256];
char szEffect2[256];
char szWaveFile[_MAX_PATH];
if(5 == sscanf(szLine, "%u %s %s %s %s\n", &id, szEffect0, szEffect1, szEffect2,
szWaveFile))
{
ItemEffectInfo Info;
Info.strItemUseEffect = szEffect0;
Info.strMapItemEffect = szEffect1;
Info.strItemBgEffect = szEffect2;
Info.strItemDropSound = szWaveFile;
m_mapItemEffectInfo[id] = Info;
}
}
fclose(fp);
}
}
//--------------------------------------------------------------
void CGameDataSet::DestroyItemEffectInfo()
{
m_mapItemEffectInfo.clear();
}
//--------------------------------------------------------------
ItemEffectInfo* CGameDataSet::GetItemEffectInfo(OBJID id)
{
std :: map<OBJID, ItemEffectInfo>::iterator iter = m_mapItemEffectInfo.find(id);
if(iter != m_mapItemEffectInfo.end())
{
return &iter->second;
}
return NULL;
}
//--------------------------------------------------------------
void CGameDataSet::CreateEmotionInfo ()
{
char szIniFile[] = "ini/EmotionIco.ini";
char szLine[1024];
FILE* fp = fopen(szIniFile, "r");
if (fp)
{
while(fgets(szLine, 1023, fp))
{
int nIndex = 0;
char szShutCut[128];
if(2 == sscanf(szLine, "%d %s\n",&nIndex, szShutCut))
{
string str = szShutCut;
m_setEmotion.push_back (str);
}
}
fclose(fp);
}
}
//--------------------------------------------------------------
int CGameDataSet::GetEmotionAmount ()
{
return m_setEmotion.size ();
}
//--------------------------------------------------------------
const char* CGameDataSet::GetEmotionShutCut (int nIndex)
{
int nAmount = m_setEmotion.size ();
if (nIndex >= nAmount || nIndex < 0)
return NULL;
else
return m_setEmotion[nIndex].c_str();
}
//--------------------------------------------------------------
CAni* CGameDataSet::GetEmotionIcon(int nIndex, int nExigence)
{
char szAniFile[] = "ani/EmotionIco.Ani";
char szTitle[64];
sprintf(szTitle, "ICON%d", nIndex);
return g_objGameDataSet.GetDataAni(szAniFile, szTitle, nExigence);
}
//--------------------------------------------------------------
void CGameDataSet::ShowInfoBack(int x, int y, int nWidth, int nHeight)
{
CAni* BackAni = g_objGameDataSet.GetDataAni ( "ani/control.ani",
"InfoBack",
EXIGENCE_IMMEDIATE ) ;
RECT rect1 = { 2,2,30,30 } ;
RECT rect2 = { 0,0,2,2 } ;
RECT rect3 = { 30,0,32,2 } ;
RECT rect4 = { 0,30,2,32 } ;
RECT rect5 = { 30,30,32,32 } ;
RECT rect6 = { 2,0,30,2 } ;
RECT rect7 = { 0,2,2,30 } ;
if (BackAni != NULL)
{
BackAni->ShowEx( 0, x,y,
&rect1, nWidth, nHeight);
BackAni->ShowEx( 0, x,y,
&rect6, nWidth, 2);
BackAni->ShowEx( 0, x,y + nHeight,
&rect6, nWidth, 2);
BackAni->ShowEx( 0, x,y,
&rect7, 2, nHeight);
BackAni->ShowEx( 0, x + nWidth,y,
&rect7, 2, nHeight);
BackAni->ShowEx( 0, x,y,
&rect2, 2, 2);
BackAni->ShowEx( 0, x + nWidth - 2 ,y ,
&rect3, 2, 2);
BackAni->ShowEx( 0, x,y + nHeight - 2,
&rect4, 2, 2);
BackAni->ShowEx( 0, x + nWidth - 2,y + nHeight -2,
&rect5, 2, 2);
}
}
//--------------------------------------------------------------
const char* CGameDataSet::GetVersionInfo(void)
{
#ifdef _ENGLISH_VERSION
return "English";
#else
return this->GetStr(10426);
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -