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