📄 npcscriptdialog.cpp
字号:
#include "stdafx.h"
#include "NpcScriptDialog.h"
#include "NpcScriptManager.h"
#include "cDialogueList.h"
#include "cHyperTextList.h"
#include "WindowIDEnum.h"
#include "ObjectStateManager.h"
#include "ObjectManager.h"
#include "./Interface/cStatic.h"
#include "ChatManager.h"
#include "./Interface/cWindowManager.h"
#include "Quest.h"
#include "QuestManager.h"
#include "ChatManager.h"
cNpcScriptDialog::cNpcScriptDialog()
{
// LBS 03.10.16
m_type = WT_NPCSCRIPDIALOG;
m_nHyperCount = 0;
m_dwCurNpc = 0;
m_pListDlg = NULL;
m_pTitleText = NULL;
for(int i=0 ; i< MAX_REGIST_HYPERLINK;++i)
m_sHyper[i].Init();
m_dwQuestIdx = 0;
}
cNpcScriptDialog::~cNpcScriptDialog()
{
}
void cNpcScriptDialog::Linking()
{
m_pListDlg = (cListDialogEx*)this->GetWindowForID( NSI_LISTDLG );
m_pTitleText = new cStatic;
if( m_pTitleText )
{
m_pTitleText->Init( 13, 4, 0, 0, NULL, -1 );
m_pTitleText->SetShadow( TRUE );
m_pTitleText->SetFontIdx( 2 );
m_pTitleText->SetAlign( TXT_LEFT );
m_pTitleText->SetStaticText( "" );
Add( m_pTitleText );
}
}
BOOL cNpcScriptDialog::OpenDialog( DWORD dwNpcId )
{
// 檬扁拳
for(int i=0 ; i< MAX_REGIST_HYPERLINK;++i)
m_sHyper[i].Init();
m_pListDlg->RemoveAll();
m_nHyperCount = 0;
// 其捞瘤俊 措茄 沥焊甫 夸没茄促.
m_dwCurNpc = dwNpcId; // 急琶 Npc甫 汲沥茄促.
cPage* pMainPage = NPCSCRIPTMGR->GetMainPage( m_dwCurNpc );
if( pMainPage == NULL ) return FALSE;
m_dwCurPageId = pMainPage->GetPageId(); // 烙矫肺 泅犁 钎矫 其捞瘤甫 啊柳促.
// 其捞瘤 沥焊甫 捞侩窍咯 其捞瘤甫 备己茄促.
DWORD dwMsg = pMainPage->GetRandomDialogue(); // 皋技瘤狼 锅龋
// 皋技瘤 锅龋甫 捞侩窍咯 荤侩且 皋技瘤甫 啊廉柯促.
cDialogueList* pList = NPCSCRIPTMGR->GetDialogueList();
if( pList == NULL ) return FALSE;
cHyperTextList* pHyper = NPCSCRIPTMGR->GetHyperTextList();
if( pHyper == NULL ) return FALSE;
// 措荤 沥焊 悸泼 矫累
WORD wIdx = 0;
WORD LineInfo = 0;
DIALOGUE* temp = NULL;
LINKITEM* pItem = NULL;
LINKITEM* Prev = NULL;
while(1)
{
temp = pList->GetDialogue( dwMsg, wIdx );
if( temp == NULL ) break;
// 扼牢沥焊啊 乐栏搁 酒捞袍阑 梅啊茄促.(鞘荐!!)
pItem = new LINKITEM;
// pItem->Init();
strcpy(pItem->string, temp->str);
pItem->rgb = temp->dwColor;
if( Prev == NULL )
{
m_pListDlg->cListItem::AddItem(pItem);
LineInfo = temp->wLine;
}
else
{
if( LineInfo == temp->wLine )
{
Prev->NextItem = pItem;
}
else
{
m_pListDlg->cListItem::AddItem(pItem);
LineInfo = temp->wLine;
}
}
Prev = pItem;
++wIdx;
}
// 傅农 沥焊甫 啊廉客辑 汲沥茄促. (眠饶 累诀 : 炼扒阑 八祸窍咯 焊咯临 傅农俊 措茄 钎矫)
HYPERLINK* pLink;
int nLinkCount = pMainPage->GetHyperLinkCount();
// 傅农甫 拳搁俊 免仿窍扁傈俊 扼牢阑 剁款促.
if( nLinkCount > 0 )
{
for( int i=0; i< 3;++i)
{
LINKITEM* pItem = new LINKITEM;
// pItem->Init();
char* temp = " ";
strcpy(pItem->string, temp);
m_pListDlg->cListItem::AddItem( pItem );
}
}
// 蛆青 焊老瘤 富瘤 搬沥
BOOL bQuest = QUESTMGR->IsNpcRelationQuest( m_dwCurNpc );
/* DWORD data = QUESTMGR->GetNpcScriptPage( m_dwCurNpc );
BOOL aa = FALSE;
if( data == 0 || data == 30 )
aa = TRUE;
*/
for( int j = 0 ; j < nLinkCount ; ++j )
{
pLink = pMainPage->GetHyperText(j);
if( pLink == NULL ) break;
// if( pLink->wLinkType == emLink_Quest && aa == TRUE )
if( pLink->wLinkType == emLink_Quest && !bQuest )
continue;
temp = pHyper->GetHyperText( pLink->wLinkId );
if( temp )
{
// 眠啊
LINKITEM* pItem = new LINKITEM;
// pItem->Init();
strcpy(pItem->string, temp->str);
pItem->dwType = pLink->wLinkType;
m_pListDlg->cListItem::AddItem( pItem );
// Data
m_sHyper[m_nHyperCount].bUse = TRUE;
m_sHyper[m_nHyperCount].dwListItemIdx = m_pListDlg->GetItemCount()-1;
m_sHyper[m_nHyperCount].sHyper = *pLink;
++m_nHyperCount;
}
}
// SetActiveRecursive( TRUE );
SetActive( TRUE );
//咀记俊辑 固府 贸府窃. - hs
// OBJECTSTATEMGR->StartObjectState(HERO, eObjectState_Deal);
CNpc* pObj = NPCSCRIPTMGR->GetSelectedNpc();
if( pObj )
SetDlgTitleText( pObj->GetObjectName() );
else
SetDlgTitleText( CHATMGR->GetChatMsg(232) );
return TRUE;
}
BOOL cNpcScriptDialog::OpenLinkPage( DWORD dwPageId )
{
// 檬扁拳
for(int i=0 ; i< MAX_REGIST_HYPERLINK;++i)
m_sHyper[i].Init();
m_pListDlg->RemoveAll();
m_nHyperCount = 0;
// 其捞瘤俊 措茄 沥焊甫 夸没茄促.
cPage* pPage = NPCSCRIPTMGR->GetPage( m_dwCurNpc, dwPageId );
if( pPage == NULL ) return FALSE;
m_dwCurPageId = dwPageId; // 烙矫肺 泅犁 钎矫 其捞瘤甫 啊柳促.
// 其捞瘤 沥焊甫 捞侩窍咯 其捞瘤甫 备己茄促.
DWORD dwMsg = pPage->GetRandomDialogue(); // 皋技瘤狼 锅龋
// 皋技瘤 锅龋甫 捞侩窍咯 荤侩且 皋技瘤甫 啊廉柯促.
cDialogueList* pList = NPCSCRIPTMGR->GetDialogueList();
if( pList == NULL ) return FALSE;
cHyperTextList* pHyper = NPCSCRIPTMGR->GetHyperTextList();
if( pHyper == NULL ) return FALSE;
// 措荤 沥焊 悸泼 矫累
WORD wIdx = 0;
WORD LineInfo = 0;
DIALOGUE* temp = NULL;
LINKITEM* pItem = NULL;
LINKITEM* Prev = NULL;
while(1)
{
temp = pList->GetDialogue( dwMsg, wIdx );
if( temp == NULL ) break;
// 扼牢沥焊啊 乐栏搁 酒捞袍阑 梅啊茄促.(鞘荐!!)
pItem = new LINKITEM;
// pItem->Init();
strcpy(pItem->string, temp->str);
pItem->rgb = temp->dwColor;
if( Prev == NULL )
{
m_pListDlg->cListItem::AddItem(pItem);
LineInfo = temp->wLine;
}
else
{
if( LineInfo == temp->wLine )
{
Prev->NextItem = pItem;
}
else
{
m_pListDlg->cListItem::AddItem(pItem);
LineInfo = temp->wLine;
}
}
Prev = pItem;
++wIdx;
}
// 傅农 沥焊甫 啊廉客辑 汲沥茄促. (眠饶 累诀 : 炼扒阑 八祸窍咯 焊咯临 傅农俊 措茄 钎矫)
HYPERLINK* pLink;
int nLinkCount = pPage->GetHyperLinkCount();
// 傅农甫 拳搁俊 免仿窍扁傈俊 扼牢阑 剁款促.
if( nLinkCount > 0 )
{
for( int i=0; i< 3;++i)
{
LINKITEM* pItem = new LINKITEM;
// pItem->Init();
char* temp = " ";
strcpy(pItem->string, temp);
m_pListDlg->cListItem::AddItem( pItem );
}
}
for( int j = 0 ; j < nLinkCount ; ++j )
{
pLink = pPage->GetHyperText(j);
if( pLink == NULL ) break;
temp = pHyper->GetHyperText( pLink->wLinkId );
if( temp )
{
// 眠啊
LINKITEM* pItem = new LINKITEM;
// pItem->Init();
strcpy(pItem->string, temp->str);
pItem->dwType = pLink->wLinkType;
m_pListDlg->cListItem::AddItem( pItem );
// Data
m_sHyper[m_nHyperCount].bUse = TRUE;
m_sHyper[m_nHyperCount].dwListItemIdx = m_pListDlg->GetItemCount()-1;
m_sHyper[m_nHyperCount].sHyper = *pLink;
++m_nHyperCount;
}
}
return TRUE;
}
void cNpcScriptDialog::EndDialog()
{
for(int i=0 ; i< MAX_REGIST_HYPERLINK;++i)
m_sHyper[i].Init();
m_pListDlg->RemoveAll();
m_nHyperCount = 0;
m_dwCurNpc = 0;
NPCSCRIPTMGR->SetSelectedNpc( NULL );
//磷篮饶俊 甸绢棵 荐档 乐促.
if( HERO->GetState() != eObjectState_Die )
OBJECTSTATEMGR->EndObjectState(HERO, eObjectState_Deal);
// SetActive( FALSE );
SetDlgTitleText("");
}
HYPER* cNpcScriptDialog::GetHyperInfo( DWORD dwIdx )
{
for(int i=0;i<m_nHyperCount;++i)
{
if( m_sHyper[i].bUse && m_sHyper[i].dwListItemIdx == dwIdx)
return &m_sHyper[i];
}
return NULL;
}
void cNpcScriptDialog::HyperLinkParser( DWORD dwIdx )
{
if( m_nHyperCount == 0 ) return;
int nType = -1;
DWORD dwData;
for( int i=0 ; i<m_nHyperCount ; ++i)
{
if( m_sHyper[i].dwListItemIdx == dwIdx )
{
nType = m_sHyper[i].sHyper.wLinkType;
dwData = m_sHyper[i].sHyper.dwData;
break;
}
}
switch( nType )
{
case emLink_Page:
{
OpenLinkPage( dwData );
m_pListDlg->ResetGuageBarPos();
}
break;
case emLink_Open:
{
// 芭贰芒 凯扁
NPCSCRIPTMGR->StartNpcBusiness( dwData );
}
break;
case emLink_End:
{
EndDialog();
DisActiveEx();
}
break;
case emLink_Quest:
{
OpenQuestLinkPage( dwData );
}
break;
case emLink_QuestLink:
{
m_dwQuestIdx = 0;
DWORD dwPage = 0;
CQuest* pQuest = QUESTMGR->GetQuest( dwData );
if( pQuest )
{
dwPage = pQuest->GetNpcScriptPage( m_dwCurNpc );
if( dwPage == 0 )
dwPage = 30;
OpenLinkPage( dwPage );
m_dwQuestIdx = dwData;
}
}
break;
case emLink_QuestStart:
{
OpenLinkPage( dwData );
if( m_dwQuestIdx )
QUESTMGR->SendNpcTalkEvent( m_dwCurNpc, m_dwQuestIdx );
}
break;
case emLink_QuestContinue:
{
OpenLinkPage( dwData );
}
break;
case emLink_QuestEnd:
{
QUESTMGR->QuestAbandon( m_dwQuestIdx );
OpenLinkPage( dwData );
}
break;
}
}
void cNpcScriptDialog::SetDlgTitleText( char* strTitle )
{
if( !m_pTitleText ) return;
m_pTitleText->SetStaticText( strTitle );
}
void cNpcScriptDialog::SetActive( BOOL val )
{
if( m_bActive == val ) return;
if(!val) EndDialog();
cDialog::SetActiveRecursive( val );
}
// 促弗镑俊辑 例措 龋免窍瘤 付矫坷!!
void cNpcScriptDialog::DisActiveEx()
{
for(int i=0 ; i< MAX_REGIST_HYPERLINK;++i)
m_sHyper[i].Init();
m_pListDlg->RemoveAll();
m_nHyperCount = 0;
m_dwCurNpc = 0;
NPCSCRIPTMGR->SetSelectedNpc( NULL );
SetDlgTitleText("");
cDialog::SetActiveRecursive( FALSE );
WINDOWMGR->SetMouseInputProcessed();
}
void cNpcScriptDialog::OpenQuestLinkPage( DWORD dwPageId )
{
// 檬扁拳
for( int i = 0; i < MAX_REGIST_HYPERLINK; ++i )
m_sHyper[i].Init();
m_pListDlg->RemoveAll();
m_nHyperCount = 0;
// 其捞瘤俊 措茄 沥焊甫 夸没茄促.
cPage* pPage = NPCSCRIPTMGR->GetPage( m_dwCurNpc, dwPageId );
if( pPage == NULL ) return;
// 烙矫肺 泅犁 钎矫 其捞瘤甫 啊柳促.
m_dwCurPageId = dwPageId;
// 其捞瘤 沥焊甫 捞侩窍咯 其捞瘤甫 备己茄促.
DWORD dwMsg = pPage->GetRandomDialogue();
// 皋技瘤 锅龋甫 捞侩窍咯 荤侩且 皋技瘤甫 啊廉柯促.
cDialogueList* pList = NPCSCRIPTMGR->GetDialogueList();
if( pList == NULL ) return;
cHyperTextList* pHyper = NPCSCRIPTMGR->GetHyperTextList();
if( pHyper == NULL ) return;
// 措荤 沥焊 悸泼 矫累
WORD wIdx = 0;
WORD LineInfo = 0;
DIALOGUE* temp = NULL;
LINKITEM* pItem = NULL;
LINKITEM* Prev = NULL;
while(1)
{
temp = pList->GetDialogue( dwMsg, wIdx );
if( temp == NULL ) break;
// 扼牢沥焊啊 乐栏搁 酒捞袍阑 梅啊茄促.(鞘荐!!)
pItem = new LINKITEM;
strcpy(pItem->string, temp->str);
pItem->rgb = temp->dwColor;
if( Prev == NULL )
{
m_pListDlg->cListItem::AddItem(pItem);
LineInfo = temp->wLine;
}
else
{
if( LineInfo == temp->wLine )
{
Prev->NextItem = pItem;
}
else
{
m_pListDlg->cListItem::AddItem(pItem);
LineInfo = temp->wLine;
}
}
Prev = pItem;
++wIdx;
}
// 傅农 沥焊甫 啊廉客辑 汲沥茄促.
HYPERLINK* pLink;
int nLinkCount = pPage->GetHyperLinkCount();
pItem = new LINKITEM;
strcpy( pItem->string, CHATMGR->GetChatMsg(649) );
pItem->rgb = RGBA_MAKE( 0, 255, 0, 255 );
m_pListDlg->cListItem::AddItem( pItem );
// 茄临 剁快扁
pItem = new LINKITEM;
strcpy( pItem->string, "" );
m_pListDlg->cListItem::AddItem( pItem );
BOOL bCheck = FALSE;
// 咯扁辑 蛆青 炼扒 八祸 饶 焊咯临 傅农俊 措茄 钎矫
// 荐青啊瓷茄 蛆青
for( int j = 0; j < nLinkCount; ++j )
{
pLink = pPage->GetHyperText(j);
if( pLink == NULL ) break;
CQuest* pQuest = QUESTMGR->GetQuest( pLink->dwData );
if( pQuest )
{
if( pQuest->IsQuestState( m_dwCurNpc ) != 1 )
continue;
}
else
continue;
if( !bCheck )
{
pItem = new LINKITEM;
strcpy( pItem->string, CHATMGR->GetChatMsg(653) );
pItem->rgb = RGBA_MAKE( 0, 255, 0, 255 );
m_pListDlg->cListItem::AddItem( pItem );
bCheck = TRUE;
}
temp = pHyper->GetHyperText( pLink->wLinkId );
if( temp )
{
// 眠啊
pItem = new LINKITEM;
strcpy( pItem->string, temp->str );
pItem->dwType = pLink->wLinkType;
m_pListDlg->cListItem::AddItem( pItem );
// Data
m_sHyper[m_nHyperCount].bUse = TRUE;
m_sHyper[m_nHyperCount].dwListItemIdx = m_pListDlg->GetItemCount()-1;
m_sHyper[m_nHyperCount].sHyper = *pLink;
++m_nHyperCount;
}
}
if( bCheck )
{
// 茄临 剁快扁
pItem = new LINKITEM;
strcpy( pItem->string, "" );
m_pListDlg->cListItem::AddItem( pItem );
}
bCheck = FALSE;
// 荐青吝牢 蛆青
for( j = 0; j < nLinkCount; ++j )
{
pLink = pPage->GetHyperText(j);
if( pLink == NULL ) break;
CQuest* pQuest = QUESTMGR->GetQuest( pLink->dwData );
if( pQuest )
{
if( pQuest->IsQuestState( m_dwCurNpc ) != 2 )
continue;
}
else
continue;
if( !bCheck )
{
pItem = new LINKITEM;
strcpy( pItem->string, CHATMGR->GetChatMsg(654) );
pItem->rgb = RGBA_MAKE( 0, 255, 0, 255 );
m_pListDlg->cListItem::AddItem( pItem );
bCheck = TRUE;
}
temp = pHyper->GetHyperText( pLink->wLinkId );
if( temp )
{
// 眠啊
pItem = new LINKITEM;
strcpy( pItem->string, temp->str );
pItem->dwType = pLink->wLinkType;
m_pListDlg->cListItem::AddItem( pItem );
// Data
m_sHyper[m_nHyperCount].bUse = TRUE;
m_sHyper[m_nHyperCount].dwListItemIdx = m_pListDlg->GetItemCount()-1;
m_sHyper[m_nHyperCount].sHyper = *pLink;
++m_nHyperCount;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -