📄 questdialog.cpp
字号:
// 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 + -