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

📄 questdialog.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// QuestDialog.cpp: implementation of the CQuestDialog class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "QuestDialog.h"
#include "Quest.h"
#include "QuestManager.h"
#include "ChatManager.h"
#include "WindowIDEnum.h"
#include "ObjectManager.h"
#include "..\[CC]Quest\QuestString.h"
#include "../Input/Mouse.h"
#include "./Interface/cWindowManager.h"
#include "./Interface/cListDialog.h"
#include "./Interface/cIconGridDialog.h"
#include "./Interface/cPushupButton.h"
#include "./Interface/cIcon.h"
#include "./Interface/cScriptManager.h"
#include "./Interface/cFont.h"
#include "cMsgBox.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CQuestDialog::CQuestDialog()
{
	m_type	= WT_QUESTDIALOG;
	State	= eQView_QList;
	
	m_SelectedQuestID	= -1;
	m_pMsgBox			= NULL;
	m_QTreeCount		= 0;
	m_QListCount		= 0;	
	m_ChangedRow		= -1;
	m_PreSelectedIdx	= 0;
	m_ListLineIdx		= 0;
	m_QuestItemCount	= 0;
	m_QuestItemPage		= 0;
	m_TooltipIdx		= -1;
	m_PreDescQuestString	= NULL;	
	memset(m_QuestList, 0, sizeof(CQuestString*)*MAX_PROCESSQUEST);

	m_IndexGenerator.Init( 999, IG_QUESTITEM_STARTINDEX);
}

CQuestDialog::~CQuestDialog()
{
	m_IndexGenerator.Release();

	//
	sQuestItem* pData = NULL;
	PTRLISTSEARCHSTART(m_QuestItemList, sQuestItem*, pData);
		delete pData;
		pData = NULL;
	PTRLISTSEARCHEND
	m_QuestItemList.RemoveAll();

	//
	QuestTree* pQTree = NULL;
	QuestInfo* pQInfo = NULL;
	PTRLISTSEARCHSTART(m_QuestTree, QuestTree*, pQTree);
		delete pQTree;
		pQTree = NULL;
	PTRLISTSEARCHEND	
	m_QuestItemList.RemoveAll();
}


void CQuestDialog::Linking()
{
	for(int i=0; i<MAX_QUEST_PAGEBTN; ++i)
		m_pPageBtn[i] = (cPushupButton*)GetWindowForID(QUE_PAGE1BTN+i);
	m_pPageBtn[0]->SetPush(TRUE);
	
//	m_pTitleBtn = (cButton*)GetWindowForID(QUE_TITLEBTN);
	m_pQuestListDlg = (cListDialog*)GetWindowForID(QUE_QUESTLIST);
	m_pIconGridDlg = (cIconGridDialog*)GetWindowForID(QUE_ITEM_GRID);	
}

DWORD CQuestDialog::ActionEvent(CMouse* mouseInfo)
{
	DWORD we = WE_NULL;
	if( !m_bActive )		return we;
	we = cDialog::ActionEvent(mouseInfo);	
	if(m_pMsgBox)			return we;

	// Show QuestItem Tooltip
	if(m_pIconGridDlg->PtInWindow(mouseInfo->GetMouseX(),mouseInfo->GetMouseY()))
	{
		WORD Pos = -1;		
		if(m_pIconGridDlg->GetPositionForXYRef(mouseInfo->GetMouseX(),mouseInfo->GetMouseY(),Pos))
		{
			if(m_TooltipIdx != Pos)			ShowItemToolTip(Pos);			
			return 0;
		}
	}

	if(m_pQuestListDlg->PtIdxInRow(mouseInfo->GetMouseX(),mouseInfo->GetMouseY()) == -1)
	{
		m_ChangedRow = -1;
		// 急琶等霸 乐阑锭 拳搁 观栏肺 唱啊搁 急琶秒家矫难霖促.
		if(m_PreSelectedIdx > -1)		
		{
			if(State == eQView_QList)			QuestListReset();
			else if(State == eQView_QDesc)		QuestDescView(m_PreDescQuestString);
			m_PreSelectedIdx = -1; 
		}
		return 0;
	}
	
	int Idx = m_pQuestListDlg->GetSelectRowIdx() + m_pQuestListDlg->GetTopListItemIdx();
	m_ChangedRow = Idx;

	if(State==eQView_QList)
	{	
		if(we & WE_LBTNCLICK)			QuestTreeStateCheck(Idx);
		else if(m_PreSelectedIdx != m_ChangedRow)
		{
			QuestListReset();
			m_PreSelectedIdx = m_ChangedRow;
		}
	}
	else if(State==eQView_QDesc)
	{
		if(we & WE_LBTNCLICK && m_toPreList == m_ChangedRow)	QuestListReset();
		else if(m_PreSelectedIdx != m_ChangedRow)
		{
			QuestDescView(m_PreDescQuestString);
			m_PreSelectedIdx = m_ChangedRow;
		}
	}	

	return we;
}


void CQuestDialog::Render()
{
	cDialog::Render();

	int Count = 0;
	sQuestItem* pSQuest = NULL;
	int	nStart = m_QuestItemPage*VIEW_QUESTITEM_PERPAGE;
	
	PTRLISTSEARCHSTART(m_QuestItemList, sQuestItem*, pSQuest);
		if(!pSQuest)				break;
		if(Count < nStart)			continue;
		else if(Count >= nStart+VIEW_QUESTITEM_PERPAGE)		break;
		
		// 措面 困摹 棱酒辑 嘛绰促.
		if(pSQuest->Count > 1)
		{
			static char nums[4];
			int absX=0;	int absY=0;
			wsprintf(nums,"%3d", pSQuest->Count);			
			if(m_pIconGridDlg->GetCellAbsPos(pSQuest->Pos, absX, absY))
			{
				RECT rect={(LONG)absX+22, (LONG)absY+29, 1,1};
				CFONT_OBJ->RenderFont(0,nums,strlen(nums),&rect,RGBA_MERGE(m_dwImageRGB, m_alpha * m_dwOptionAlpha / 100 ));		// color hard coding : taiyo 
			}
		}
	
		++Count;
	PTRLISTSEARCHEND
}


// ΞΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΟ
// Ν														 Ν
// Ν	QuestList											 Ν
// Ν														 Ν
// ΡΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΠ
void CQuestDialog::MainQuestAdd(CQuestString* pQuestString)
{
	if(!pQuestString)		return;

	QuestTree* pData = new QuestTree;
	pData->QuestIdx = pQuestString->GetQuestID();
	pData->State = eQTree_Close;
	pData->list.AddHead(pQuestString);
	++pData->Count;
	
	// Quest Giveup Add	
	CQuestString* pQuestGiveup = new CQuestString;
	pQuestGiveup->SetIndex(pQuestString->GetQuestID(), QUEST_GIVEUP_ID);
	pData->list.AddTail(pQuestGiveup);
	++pData->Count;
	
	m_QuestTree.AddTail(pData);
	++m_QTreeCount;
}


void CQuestDialog::SubQuestAdd(CQuestString* pQuestString)
{
	if(!pQuestString)		return;

	QuestTree* pData = new QuestTree;
	pData->QuestIdx = pQuestString->GetQuestID();
	pData->State = eQTree_Close;
	pData->list.AddHead(pQuestString);
	++pData->Count;
	
	m_QuestTree.AddTail(pData);
}

/*
BOOL CQuestDialog::CheckMainQuestList(CQuestString* pQuestString)
{
	if(pQuestString->GetSubID() != 0)			return FALSE;
	QuestTree* pData = NULL;
	CQuestString* pQuestStringList = NULL;


	PTRLISTSEARCHSTART(m_QuestTree, QuestTree*, pData);
		if(pData->QuestIdx == pQuestString->GetQuestID())
		{
			PTRLISTSEARCHSTART(pData->list, CQuestString*, pQuestStringList);
				if(pQuestStringList->GetSubID() == 0)
					return FALSE;
			PTRLISTSEARCHEND
		}		
	PTRLISTSEARCHEND

	return TRUE;
}
*/

void CQuestDialog::ProcessQuestAdd(CQuestString* pQuestString)
{
	if(!pQuestString)		return;
	QuestTree* pData = NULL;
	CQuestString* pQuestGiveup = NULL;
	CQuestString* pQuestStringList = NULL;
	BOOL bQuestAdd = FALSE;

	// MainQuest Add
	if(pQuestString->GetSubID() == 0)
	{
		PTRLISTSEARCHSTART(m_QuestTree, QuestTree*, pData);
			if(!pData)		break;
			
			// 皋牢涅胶飘啊 唱吝俊 肺爹灯阑锭
			if(pData->QuestIdx == pQuestString->GetQuestID())
			{
				PTRLISTSEARCHSTART(pData->list, CQuestString*, pQuestStringList);
					if(pQuestStringList->GetSubID() == 0)
						return;
				PTRLISTSEARCHEND

				pData->State = eQTree_Close;
				pData->list.AddHead(pQuestString);
				++pData->Count;
				
				// Quest Giveup Add
				pQuestGiveup = new CQuestString;
				pQuestGiveup->SetIndex(pQuestString->GetQuestID(), QUEST_GIVEUP_ID);
				pData->list.AddTail(pQuestGiveup);
				++pData->Count;

				++m_QTreeCount;
				bQuestAdd = TRUE;
				break;
			}

		PTRLISTSEARCHEND

		if(!bQuestAdd)
			MainQuestAdd(pQuestString);
	}
	// SubQuest Add
	else	
	{
		PTRLISTSEARCHSTART(m_QuestTree, QuestTree*, pData);
			if(!pData)			break;					
			
			if(pData->QuestIdx == pQuestString->GetQuestID())
			{
				PTRLISTPOS pos = pData->list.GetTailPosition();
				if(pos)
				{
					CQuestString* pQString = (CQuestString*)pData->list.GetTail();
					if(pQString->GetSubID() == QUEST_GIVEUP_ID)
						pData->list.InsertBefore(pos, pQuestString);
					else
						pData->list.AddTail(pQuestString);

					++pData->Count;
					bQuestAdd = TRUE;
				}				
				break;
			}

		PTRLISTSEARCHEND

		if(!bQuestAdd)
			SubQuestAdd(pQuestString);
	}

	//
	QuestListReset();
}


// 场抄 涅胶飘啊 DB俊 力措肺 悸泼捞 救登绰 版快啊 乐澜. 犬牢饶 贸府. - RaMa 04.10.16
void CQuestDialog::CheckQuestDate()
{	
	QuestTree* pQTree = NULL;

	PTRLISTSEARCHSTART(m_QuestTree, QuestTree*, pQTree);
		// 2俺捞扼搁.. MainQuest客 蛆青器扁捞促. 昏力...
		if(pQTree && pQTree->list.GetCount() == 2)
		{	
			// 辑滚肺 焊辰促.
			SEND_QUEST_IDX_SIMPLE msg;
			msg.Category = MP_QUEST;
			msg.Protocol = MP_QUEST_DELETE_CONFIRM_SYN;
			msg.dwObjectID = HERO->GetID();
			msg.MainQuestIdx = pQTree->QuestIdx;

			NETWORK->Send(&msg, sizeof(msg));
		}
		// 趣矫扼档 MainQuest绰 辆丰沁绰单 SubQuest啊 巢酒 乐阑 版快. 瘤况霖促.
		else if(pQTree)
		{
			CQuestString* pQuestString = (CQuestString*)pQTree->list.GetHead();
			if(pQuestString && pQuestString->GetSubID() != 0)
			{
				// 
				m_QuestTree.Remove(pQTree);
				delete pQTree;
				pQTree = NULL;

				// 酒捞袍档 瘤况具 茄促.
			}
		}
	PTRLISTSEARCHEND		
		
	QuestListReset();
}


void CQuestDialog::ProcessQuestDelete(CQuestString* pQuestString)
{
	if(!pQuestString)		return;

	QuestTree* pQTree = NULL;
	CQuestString* pData = NULL;

	PTRLISTSEARCHSTART(m_QuestTree, QuestTree*, pQTree);
		if(pQTree && pQTree->QuestIdx==pQuestString->GetQuestID())
		{
			PTRLISTSEARCHSTART(pQTree->list, CQuestString*, pData);
				if(pData && pData==pQuestString)
				{
					pQTree->list.Remove(pQuestString);
					--pQTree->Count;

					// 葛电 涅胶飘啊 昏力 登菌阑锭
					if(pQTree->Count<=0 || pQuestString->GetSubID()==0)
						CompleteQuestDelete(pQuestString);
					
					break;
				}
			PTRLISTSEARCHEND

			break;
		}
	PTRLISTSEARCHEND

	//
	QuestListReset();
}

void CQuestDialog::CompleteQuestDelete(CQuestString* pQuestString)
{
	if(!pQuestString)		return;
	
	QuestTree* pQTree = NULL;
	
	PTRLISTSEARCHSTART(m_QuestTree, QuestTree*, pQTree);
		if(pQTree && pQTree->QuestIdx == pQuestString->GetQuestID())
		{
			pQTree->State = eQTree_NotUse;
			pQTree->Count = 0;
			pQTree->list.RemoveAll();
			m_QuestTree.Remove(pQTree);
			delete pQTree;
			--m_QTreeCount;
			break;
		}
	PTRLISTSEARCHEND
		
	QuestListReset();
}

void CQuestDialog::QuestTreeStateCheck(int RowIdx)
{
	if(RowIdx<0)			return;

	QuestTree* pQTree = NULL;
	CQuestString* pQuestString = m_QuestList[RowIdx];
	if(!pQuestString)			return;

	// 涅胶飘 器扁
	if(pQuestString->GetSubID() == QUEST_GIVEUP_ID)
	{
		m_SelectedQuestID = pQuestString->GetQuestID();
		// 皋矫瘤芒 剁款促.
		m_pMsgBox = WINDOWMGR->MsgBox(MBI_QUESTGIVEUP, MBT_YESNO, CHATMGR->GetChatMsg(605));
	}
	// 涅胶飘 飘府府胶飘甫 凯绊 摧绰促.
	else if(pQuestString->GetSubID() == 0)
	{
		PTRLISTSEARCHSTART(m_QuestTree, QuestTree*, pQTree);
			if(pQTree && pQTree->QuestIdx == pQuestString->GetQuestID())

⌨️ 快捷键说明

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