⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 npctable.cpp

📁 魔域源代码需要的可以学习一下真么这么麻烦啊
💻 CPP
字号:
// NpcTable.cpp: implementation of the CNpcTable class.
//
//////////////////////////////////////////////////////////////////////

#include "NpcTable.h"
#include "MapGroup.h"
#include "Npc.h"

char	szNpcTableTable[]		= _TBL_TABLE;
MYHEAP_IMPLEMENTATION(CNpcTable,s_heap)
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CNpcTable::CNpcTable()
{

}

//////////////////////////////////////////////////////////////////////
CNpcTable::~CNpcTable()
{

}

//////////////////////////////////////////////////////////////////////
bool CNpcTable::Create(PROCESS_ID idProcess, CNpc* pOwner, OBJID idNpc)
{
	m_pOwner	= pOwner;
	m_idProcess	= idProcess;
	m_setTable	= CTableSet::CreateNew();

	SQLBUF	szSQL;
	sprintf(szSQL, "SELECT * FROM %s WHERE npc_id=%u ORDER BY id LIMIT 100", _TBL_TABLE, idNpc);
	IF_NOT(m_setTable->Create(szSQL, false))
		return false;

	return true;
}

//////////////////////////////////////////////////////////////////////
bool CNpcTable::AddRecord(int nType, OBJID idKey, int setData[4], LPCTSTR szData)
{
	if(GetRecord(nType, idKey))
		return false;

	CTableData* pData = CTableData::CreateNew();
	IF_NOT(pData && pData->Create(Database(), ID_NONE))		// ID_NONE: for new record
	{
		pData->Release();
		return false;
	}

	if(idKey)
	{
		CTableSet::Iterator pData = m_setTable->NewEnum();
		while(pData.Next())
		{
			if(pData->GetInt(TABLEDATA_KEY) == idKey)
			{
				m_setTable->DelObj(pData);
				break;
			}
		}
	}

	pData->SetInt(TABLEDATA_NPCID, m_pOwner->GetRecordID());
	pData->SetInt(TABLEDATA_TYPE, nType);
	pData->SetInt(TABLEDATA_KEY, idKey);
//	pData->SetInt(TABLEDATA_DATE_STAMP, ::DateStamp());
	pData->SetStr(TABLEDATA_DATASTR, szData, MAX_FIELDSIZE);
	pData->SetInt(TABLEDATA_DATA0, setData[0]);
	pData->SetInt(TABLEDATA_DATA1, setData[1]);
	pData->SetInt(TABLEDATA_DATA2, setData[2]);
	pData->SetInt(TABLEDATA_DATA3, setData[3]);
	pData->InsertRecord();

	m_setTable->AddObj(pData);
	return true;
}

//////////////////////////////////////////////////////////////////////
bool CNpcTable::DelRecord(int nType, OBJID idKey, int setData[4], LPCTSTR szData)	// del it when match all no 0 param
{
	CHECKF(szData);

	int nDataLen = strlen(szData);
	CTableSet::Iterator pData = m_setTable->NewEnum();
	while(pData.Next())
	{
		if(nType && pData->GetInt(TABLEDATA_TYPE) != nType)
			continue;
		if(idKey && pData->GetInt(TABLEDATA_KEY) != idKey)
			continue;
		if(setData[0] && pData->GetInt(TABLEDATA_DATA0) != setData[0])
			continue;
		if(setData[1] && pData->GetInt(TABLEDATA_DATA1) != setData[1])
			continue;
		if(setData[2] && pData->GetInt(TABLEDATA_DATA2) != setData[2])
			continue;
		if(setData[3] && pData->GetInt(TABLEDATA_DATA3) != setData[3])
			continue;
		if(nDataLen && strcmp(pData->GetStr(TABLEDATA_DATASTR), szData) != 0)
			continue;

		m_setTable->DelObj(pData);
	}

	return true;
}

//////////////////////////////////////////////////////////////////////
CTableData* CNpcTable::GetRecord(int nType, OBJID idKey)
{
	CTableSet::Iterator pData = m_setTable->NewEnum();
	while(pData.Next())
	{
		if(pData->GetInt(TABLEDATA_TYPE) == nType && pData->GetInt(TABLEDATA_KEY) == idKey)
			return pData;
	}

	return NULL;
}

//////////////////////////////////////////////////////////////////////
bool CNpcTable::DelInvalid(int nType, int idxDateStamp)
{
	CHECKF(idxDateStamp >= 0 && idxDateStamp < TABLEDATA_SIZE);

	CTableSet::Iterator pData = m_setTable->NewEnum();
	while(pData.Next())
	{
		if(pData->GetInt(TABLEDATA_TYPE) == nType && pData->GetInt(TABLEDATA(TABLEDATA_DATA0+idxDateStamp)) < ::DateStamp())
		{
			pData->DeleteRecord();
			m_setTable->DelObj(pData->GetID());
		}
	}

	return true;
}

//////////////////////////////////////////////////////////////////////
bool CNpcTable::DelRecord(OBJID idRecord)
{
	CTableSet::Iterator pData = m_setTable->NewEnum();
	while(pData.Next())
	{
		if(pData->GetID() == idRecord)
		{
			m_setTable->DelObj(pData);
			return true;
		}
	}

	return true;
}

//////////////////////////////////////////////////////////////////////
bool CNpcTable::FindNext(int nType, int& nIter)			// order by ID, return false: no more syn
{
	OBJID	idLast	= nIter;
	OBJID	idNext	= ID_NONE;
	bool	nBreak		= false;
	CTableSet::Iterator pTarget = QuerySet()->NewEnum();
	while(pTarget.Next())
	{
		if(pTarget && pTarget->GetInt(TABLEDATA_TYPE) == nType)
		{
			if(idNext == ID_NONE)
			{
				idNext	= pTarget->GetID();

				if(nBreak)
					break;
				else
					nBreak = true;
			}

			if(pTarget->GetID() == idLast)
			{
				idNext	= ID_NONE;
				continue;
			}
		}
	}

	if(idNext)
	{
		nIter = idNext;
		return true;
	}
	return false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -