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

📄 questdialog.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			{
				if(pQTree->State == eQTree_Open)			pQTree->State = eQTree_Close;
				else if(pQTree->State == eQTree_Close)		pQTree->State = eQTree_Open;
				QuestListReset();
				break;
			}
		PTRLISTSEARCHEND
	}
	// 涅胶飘 惑技 郴侩阑 夯促.
	else
		QuestDescView(pQuestString);
}

void CQuestDialog::QuestListReset()
{
	int BackupLine = m_pQuestListDlg->GetTopListItemIdx();
	//
	m_pQuestListDlg->RemoveAll();
	memset(m_QuestList, 0, sizeof(CQuestString*)*MAX_PROCESSQUEST);
	m_QListCount=0;
	m_ListLineIdx = 0;


	//
	QuestTree* pQTree = NULL;
	CQuestString* pQuestString = NULL;

	PTRLISTSEARCHSTART(m_QuestTree, QuestTree*, pQTree);
		if(pQTree->State == eQTree_Close)
		{
			pQuestString = (CQuestString*)pQTree->list.GetHead();			
			QuestListAdd(pQuestString);
		}
		else if(pQTree->State == eQTree_Open)
		{
			PTRLISTSEARCHSTART(pQTree->list, CQuestString*, pQuestString);
				QuestListAdd(pQuestString, pQuestString->GetSubID());
			PTRLISTSEARCHEND
		}		
	PTRLISTSEARCHEND

	m_ListLineIdx = -1;
	if(!m_pMsgBox)		m_SelectedQuestID = -1;
	m_pQuestListDlg->SetTopListItemIdx(BackupLine);	
	State = eQView_QList;	
}

void CQuestDialog::QuestListAdd(CQuestString* pQuestString, int SubID)
{	
	if(!pQuestString)			return;

	DWORD Color = 0;
	QString* pQStr = NULL;
	char buf[256] = { 0, };
	

	// Quest Giveup Message
	if(SubID == QUEST_GIVEUP_ID)
	{
///		AddListEmptyLine();

		(m_ListLineIdx==m_ChangedRow)?Color=QUEST_GIVEUP_COLOR_SEL:Color=QUEST_GIVEUP_COLOR;

		m_pQuestListDlg->AddItem(CHATMGR->GetChatMsg(604), Color);
		++m_ListLineIdx;
		m_QuestList[m_QListCount] = pQuestString;
		++m_QListCount;
//		AddListEmptyLine();

		return;
	}
//	else if(SubID == 0 && m_QListCount)
//		AddListEmptyLine();


	//
	PTRLISTPOS spos = pQuestString->GetTitle()->GetHeadPosition();	
	while(spos)
	{
		pQStr = (QString*)pQuestString->GetTitle()->GetNext(spos);
		if(pQStr)
		{
			if(m_ListLineIdx == m_ChangedRow)
				(SubID==0)?Color=MAINQUEST_TITLE_COLOR_SEL:Color=SUBQUEST_TITLE_COLOR_SEL;
			else
				(SubID==0)?Color=MAINQUEST_TITLE_COLOR:Color=SUBQUEST_TITLE_COLOR;			

			(SubID==0)?sprintf(buf, "* "):sprintf(buf, "	- ");
			strcat(buf, pQStr->Str);

			if(pQuestString->GetSubID())
			{
				CQuest* pQuest = QUESTMGR->GetQuest(pQuestString->GetQuestID());
				SUBQUEST* pSubQuest = pQuest->GetSubQuest(pQuestString->GetSubID());

				if(pSubQuest->dwMaxCount)
				{
					char tbuf[32] = { 0, };
					sprintf(tbuf, "  (%d/%d)", pSubQuest->dwData, pSubQuest->dwMaxCount);
					strcat(buf, tbuf);
				}
			}

			m_pQuestListDlg->AddItem(buf, Color);
			++m_ListLineIdx;
			memset(buf, 0, 256);
			
			// ListDialog 
			m_QuestList[m_QListCount] = pQuestString;
			++m_QListCount;
		}
	}
}

void CQuestDialog::QuestDescView(CQuestString* pQuestString)
{
	if(!pQuestString)			return;
	
	int BackupLine = m_pQuestListDlg->GetTopListItemIdx();
	m_pQuestListDlg->RemoveAll();
	memset(m_QuestList, 0, sizeof(CQuestString*)*MAX_PROCESSQUEST);
	m_QListCount=0;
	m_toPreList= -1;

	QString* pQStr=NULL;
	PTRLISTPOS pos = NULL;
	// Title
	pos = pQuestString->GetTitle()->GetHeadPosition();
	while(pos)
	{
		pQStr = (QString*)pQuestString->GetTitle()->GetNext(pos);
		if(pQStr)
		{
			m_pQuestListDlg->AddItem(pQStr->Str, SUBQUEST_TITLE_COLOR_SEL);
			++m_toPreList;
		}
	}
	m_pQuestListDlg->AddItem(" ", 0);
	++m_toPreList;

	// Desc	
	int preline = -1;
	pos = pQuestString->GetDesc()->GetHeadPosition();
	while(pos)
	{
		pQStr = (QString*)pQuestString->GetDesc()->GetNext(pos);
		if(pQStr)
		{
			m_pQuestListDlg->AddItem(pQStr->Str, pQStr->Color, pQStr->Line);

			// 扼牢捞 官拆锭父 捞傈拳搁 扼牢阑 悸泼.
			if(preline != pQStr->Line)
			{
				++m_toPreList;
				preline = pQStr->Line;
			}

//			m_pQuestListDlg->AddItem(pBuf->Str, QUEST_DESC_COLOR);
//			++m_toPreList;
		}
	}

	DWORD Color = 0;
	m_toPreList+=2;	
	(m_ChangedRow==m_toPreList)?Color=SELECT_COLOR_SEL:Color=SELECT_COLOR;

	// Back
	m_pQuestListDlg->AddItem(" ", 0);
	m_pQuestListDlg->AddItem(CHATMGR->GetChatMsg(601), Color);

	m_PreDescQuestString = pQuestString;
	m_pQuestListDlg->SetTopListItemIdx(BackupLine);	
	State = eQView_QDesc;
}

void CQuestDialog::AddListEmptyLine()
{
	m_pQuestListDlg->AddItem(" ", 0);
	++m_ListLineIdx;
	m_QuestList[m_QListCount] = NULL;
	++m_QListCount;
}

void CQuestDialog::GiveupQuestDelete(DWORD QuestIdx)
{
	if(QuestIdx > 100)			return;

	QuestTree* pQTree = NULL;

	PTRLISTSEARCHSTART(m_QuestTree, QuestTree*, pQTree);
	{
		if(pQTree->QuestIdx == QuestIdx)
		{
			pQTree->list.RemoveAll();
			pQTree->State = eQTree_Close;
			pQTree->Count = 0;
			pQTree->QuestIdx = 0;
			m_QuestTree.Remove(pQTree);
			delete pQTree;
			--m_QTreeCount;
			break;
		}
	}
	PTRLISTSEARCHEND

	DWORD Idx = 0;
	cIcon* pIcon = NULL;
	sQuestItem* pSQuest = NULL;

	PTRLISTSEARCHSTART(m_QuestItemList, sQuestItem*, pSQuest);
		if(!pSQuest)			break;

		Idx = pSQuest->pQuestItemInfo->QuestKey/100;
		if(Idx == QuestIdx)
		{
			m_pIconGridDlg->DeleteIcon(pSQuest->Pos, &pIcon);
			if(!pIcon)			break;

			WINDOWMGR->AddListDestroyWindow(pIcon);
			m_IndexGenerator.ReleaseIndex(pIcon->GetID());
			m_QuestItemList.Remove(pSQuest);
			--m_QuestItemCount;
		}
	PTRLISTSEARCHEND

	QuestListReset();
	RefreshQuestItem(m_QuestItemPage);
}

// ΞΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΟ
// Ν														 Ν
// Ν	QuestItem											 Ν
// Ν														 Ν
// ΡΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΠ
void CQuestDialog::QuestItemAdd(QUEST_ITEM_INFO* pQuestItemInfo, DWORD Count)
{
	if(!pQuestItemInfo)			return;

	sQuestItem* pSQuest = new sQuestItem;
	pSQuest->pQuestItemInfo = pQuestItemInfo;
	pSQuest->Count = Count;
	pSQuest->Pos = -1;

	m_QuestItemList.AddTail(pSQuest);
	
	//
	cIcon* pIcon = new cIcon;
	cImage Image;

	SCRIPTMGR->GetImage(pSQuest->pQuestItemInfo->Image2DNum, &Image, PFT_ITEMPATH);	
	pIcon->SetBasicImage(&Image);
	pIcon->Init(0, 0, 40, 40, &Image, m_IndexGenerator.GenerateIndex() );
	pIcon->SetMovable(FALSE);
	pIcon->SetActive(FALSE);

	pSQuest->pIcon = pIcon;
	WINDOWMGR->AddWindow(pIcon);
	//

	++m_QuestItemCount;
	RefreshQuestItem(m_QuestItemPage);
}

void CQuestDialog::QuestItemDelete(DWORD ItemIdx)
{
	cIcon* pIcon = NULL;
	sQuestItem* pSQuest = NULL;

	PTRLISTSEARCHSTART(m_QuestItemList, sQuestItem*, pSQuest);
		if(!pSQuest)			break;

		//
		if(pSQuest->pQuestItemInfo->ItemIdx == ItemIdx)
		{
			m_pIconGridDlg->DeleteIcon(pSQuest->Pos, &pIcon);
			if(!pIcon)			break;

			pIcon->SetActive(FALSE);
			WINDOWMGR->AddListDestroyWindow(pIcon);
			m_IndexGenerator.ReleaseIndex(pIcon->GetID());
			m_QuestItemList.Remove(pSQuest);
			break;
		}
	PTRLISTSEARCHEND

	--m_QuestItemCount;
	RefreshQuestItem(m_QuestItemPage);
}

DWORD CQuestDialog::QuestItemUpdate(DWORD type, DWORD ItemIdx, DWORD data)
{
	sQuestItem* pSQuest = NULL;
	PTRLISTSEARCHSTART(m_QuestItemList, sQuestItem*, pSQuest);
		if(!pSQuest)			break;

		if(pSQuest->pQuestItemInfo->ItemIdx == ItemIdx)
		{
			switch(type)
			{
			case eQItem_AddCount:
				if(pSQuest)		pSQuest->Count += data;		
				break;
			case eQItem_SetCount:
				if(pSQuest)		pSQuest->Count = data;		
				break;
			case eQItem_GetCount:
				if(pSQuest)		return pSQuest->Count;
				break;
			}
			break;
		}
	PTRLISTSEARCHEND
	
	return 0;
}

void CQuestDialog::RefreshQuestItem(DWORD Page)
{	
	cIcon* pIcon = NULL;
	int Count = 0;
	int Pos = 0;
	sQuestItem* pSQuest = NULL;
	int	nStart = Page*VIEW_QUESTITEM_PERPAGE;

	// PageButton PushState Setting
	for(int i=0; i<MAX_QUEST_PAGEBTN; ++i)
		m_pPageBtn[i]->SetPush(FALSE);
	m_pPageBtn[Page]->SetPush(TRUE);

	//
	for(i=0; i<m_pIconGridDlg->GetCellNum(); i++)	
		m_pIconGridDlg->DeleteIcon(i, &pIcon);
	
	
	PTRLISTSEARCHSTART(m_QuestItemList, sQuestItem*, pSQuest);
		if(!pSQuest)			break;

		if(Count>=nStart && Count < nStart+VIEW_QUESTITEM_PERPAGE)
		{
			// Add
			pSQuest->Pos = Pos;			
			m_pIconGridDlg->AddIcon(pSQuest->Pos, pSQuest->pIcon);			
			pSQuest->pIcon->SetActive(TRUE);
			++Pos;
		}
		else
			pSQuest->pIcon->SetActive(FALSE);

		++Count;
	PTRLISTSEARCHEND

	m_QuestItemPage = Page;
}

void CQuestDialog::ShowItemToolTip(DWORD Index)
{
	sQuestItem* pSQuest = NULL;
	char buf[64] = { 0, };

	PTRLISTSEARCHSTART(m_QuestItemList, sQuestItem*, pSQuest);
		if(!pSQuest)			break;

		if(pSQuest->Pos == Index)
		{			
			cImage Image;
			SCRIPTMGR->GetImage(63, &Image, PFT_HARDPATH);
			pSQuest->pIcon->SetToolTip( "", RGBA_MAKE(255, 255, 255, 255), &Image, TTCLR_ITEM_CANEQUIP );

			wsprintf(buf, "[%s]", pSQuest->pQuestItemInfo->ItemName);
			pSQuest->pIcon->AddToolTipLine(buf, TTTC_DEFAULT);
			pSQuest->pIcon->AddToolTipLine("");
			AddTooltipInfo(pSQuest->pQuestItemInfo->ItemDesc, pSQuest->pIcon);				
			break;
		}

		if(pSQuest->Pos == m_TooltipIdx)
			pSQuest->pIcon->SetToolTip("");
	PTRLISTSEARCHEND
		
	m_TooltipIdx = Index;
}

void CQuestDialog::AddTooltipInfo(char* pString, cIcon* pIcon)
{
	if(strlen(pString) > MAX_ITEMDESC_LINE)
	{
		char* pStr = pString;
		char tb[MAX_ITEMDESC_LINE+2] = { 0,  };
		int len = 0;
		
		while(*pStr)
		{						
			tb[len]=*pStr;
			if( pStr + 1 != CharNext( CharPrev( pStr, pStr + 1 ) ) )
				tb[++len] = *(++pStr);

			++len;
			++pStr;
			
			// 老窜篮 弊成 阜磊.. ぱ.ぱ;;
			if(tb[0] == ' ')		{	len = 0;	}
			
			if(strlen(tb) >= MAX_ITEMDESC_LINE)
			{
				pIcon->AddToolTipLine(tb, TTTC_DESCRIPTION);
				memset(tb, 0, MAX_ITEMDESC_LINE+2);
				len = 0;
			}
		}
		if(len)
		{
			pIcon->AddToolTipLine(tb, TTTC_DESCRIPTION);
			memset(tb, 0, MAX_ITEMDESC_LINE+2);
			len = 0;
		}
	}
	else
		pIcon->AddToolTipLine(pString, TTTC_DESCRIPTION);
}

⌨️ 快捷键说明

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