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

📄 processnpc.cpp

📁 真正的传奇源代码
💻 CPP
字号:
#include "stdafx.h"

void WINAPI ProcessMerchants();
void WINAPI ProcessEvents();

/*
void DoRunRace(CNPCObject* pNPCObject)
{
	switch (pNPCObject->m_wObjectType)
	{
		case _OBJECT_NPC:
			((CChickenObject*)pNPCObject)->RunRace();
			break;
	}
}
*/
UINT WINAPI ProcessNPC(LPVOID lpParameter)
{
	FILETIME					ftKernelTimeStart, ftKernelTimeEnd;
	FILETIME					ftUserTimeStart, ftUserTimeEnd;
	FILETIME					ftDummy, ftTotalTimeElapsed;
	__int64						qwKernelTimeElapsed, qwUserTimeElapsed, qwTotalTimeElapsed;
	TCHAR						wszThreadTime[32];
	
	DWORD						dwCurrentTick;

	int							nHour = 0;

	while (TRUE)
	{
		GetThreadTimes(GetCurrentThread(), &ftDummy, &ftDummy, &ftKernelTimeStart, &ftUserTimeStart);

		if (g_fTerminated) 
		{
			return 0L;
		}

		if (g_xScripterList.GetCount())
		{
			PLISTNODE pListNode = g_xScripterList.GetHead();

			while (pListNode)
			{
				CScripterObject* pObject = g_xScripterList.GetData(pListNode);

				if (GetTickCount() - pObject->m_dwRunTime >= pObject->m_dwRunNextTick)
				{
					pObject->m_dwRunTime = GetTickCount();
					pObject->Operate();
				}

				pListNode = g_xScripterList.GetNext(pListNode);
			}
		}

		//
		ProcessMerchants();

		//
		ProcessEvents();

		//
		dwCurrentTick = GetTickCount();

		if (g_xNPCObjList.GetCount())
		{
			PLISTNODE pListNode = g_xNPCObjList.GetHead();

			while (pListNode)
			{
				CNPCObject* pNPCObject = g_xNPCObjList.GetData(pListNode);

				if (dwCurrentTick - pNPCObject->m_dwRunTime >= pNPCObject->m_dwRunNextTick)
				{
					pNPCObject->m_dwRunTime = dwCurrentTick;

					if (dwCurrentTick - pNPCObject->m_dwSearchTime >= pNPCObject->m_dwSearchTick)
					{
						pNPCObject->m_dwSearchTime = dwCurrentTick;
						pNPCObject->SearchViewRange();
					}

//					DoRunRace(pNPCObject);
//					pNPCObject->RunRace();
				}

				pListNode = g_xNPCObjList.GetNext(pListNode);
			}
		}

		nHour = GetTime();

		if (nHour == 23 || nHour == 11)
			g_nMirDayTime = 2; // 历翅
		else if (nHour == 4 || nHour == 15)
			g_nMirDayTime = 0; // 货寒
		else if ((nHour >= 0 && nHour <= 3) || (nHour >= 12 && nHour <= 14))
			g_nMirDayTime = 3;
		else
			g_nMirDayTime = 1;

		GetThreadTimes(GetCurrentThread(), &ftDummy, &ftDummy, &ftKernelTimeEnd, &ftUserTimeEnd);

		qwKernelTimeElapsed = FileTimeToQuadWord(&ftKernelTimeEnd) - FileTimeToQuadWord(&ftKernelTimeStart);
		qwUserTimeElapsed	= FileTimeToQuadWord(&ftUserTimeEnd) - FileTimeToQuadWord(&ftUserTimeStart);
		
		qwTotalTimeElapsed = qwKernelTimeElapsed + qwUserTimeElapsed;

		QuadTimeToFileTime(qwTotalTimeElapsed, &ftTotalTimeElapsed);

		wsprintf(wszThreadTime, _TEXT("%lu%lu ns"), ftTotalTimeElapsed.dwHighDateTime, ftTotalTimeElapsed.dwLowDateTime);
		
		SendMessage(g_hStatusBar, SB_SETTEXT, MAKEWORD(5, 0), (LPARAM)wszThreadTime);

		SleepEx(1, TRUE);
	}

	return 0L;
}

⌨️ 快捷键说明

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