📄 npcscriptmanager.cpp
字号:
#include "stdafx.h"
#include "NpcScriptManager.h"
#include "cPage.h"
#include "cDialogueList.h"
#include "cHyperTextList.h"
#include "GameIn.h"
#include "Npc.h"
#include "ObjectManager.h"
#include "PyogukDialog.h"
#include "MugongSuryunDialog.h"
#include "ChatManager.h"
#include "WindowIDEnum.h"
#include "NpcScriptDialog.h"
#include "InventoryExDialog.h"
#include "MPRegistDialog.h"
#include "GuildLevelUpDialog.h"
#include "GuildMarkDialog.h"
#include "GuildWarehouseDialog.h"
#include "objectstatemanager.h"
#include "WantedManager.h"
#include "GuildManager.h"
#include "BailDialog.h"
#include "WantedDialog.h"
#include "./Interface/cWindowManager.h"
#include "cMsgBox.h"
#include "AbilityManager.h"
GLOBALTON(cNpcScriptManager)
cNpcScriptManager::cNpcScriptManager()
{
m_nRegistNpcCount = 0;
m_pDialogue = NULL;
m_pHyperText = NULL;
m_pCurSelectedNpc = NULL;
}
cNpcScriptManager::~cNpcScriptManager()
{
DeleteAllScriptInfo();
SAFE_DELETE( m_pDialogue );
SAFE_DELETE( m_pHyperText );
}
void cNpcScriptManager::Init()
{
LoadNpcScriptInfo();
m_pDialogue = new cDialogueList;
#ifdef _FILE_BIN_
m_pDialogue->LoadDialogueListFile(NPC_DIALOGUE_PATH, "rb");
#else
m_pDialogue->LoadDialogueListFile(NPC_DIALOGUE_PATH);
#endif
m_pHyperText = new cHyperTextList;
#ifdef _FILE_BIN_
m_pHyperText->LoadHyperTextFormFile(NPC_HYPERTEXT_PATH, "rb");
#else
m_pHyperText->LoadHyperTextFormFile(NPC_HYPERTEXT_PATH);
#endif
}
void cNpcScriptManager::AddNpcScriptInfo(DWORD dwNpcId, cPage* pPage)
{
m_NpcScriptList[dwNpcId].AddTail(pPage);
}
void cNpcScriptManager::DeleteAllScriptInfo()
{
for(int i=0;i<MAX_NPC_COUNT;++i)
{
PTRLISTSEARCHSTART(m_NpcScriptList[i],cPage*,pPage)
delete pPage;
PTRLISTSEARCHEND
m_NpcScriptList[i].RemoveAll();
}
}
cPage* cNpcScriptManager::GetMainPage( DWORD dwNpcId )
{
if( m_NpcScriptList[dwNpcId].IsEmpty() ) return NULL;
return (cPage*)m_NpcScriptList[dwNpcId].GetHead();
}
cPage* cNpcScriptManager::GetPage( DWORD dwNpcId, DWORD dwPageId )
{
PTRLISTSEARCHSTART(m_NpcScriptList[dwNpcId],cPage*,pPage)
if( pPage->GetPageId() == dwPageId )
return pPage;
PTRLISTSEARCHEND
return NULL;
}
void cNpcScriptManager::LoadNpcScriptInfo()
{
CMHFile fp;
#ifdef _FILE_BIN_
if(!fp.Init(NPC_SCRIPT_PATH, "rb"))
return;
#else
if(!fp.Init(NPC_SCRIPT_PATH, "rt"))
return;
#endif
char buff[256]={0,};
while(1)
{
fp.GetString(buff);
if( fp.IsEOF() )
break;
if(buff[0] == '@')
{
fp.GetLineX(buff, 256);
continue;
}
CMD_ST(buff)
CMD_CS("$NPC")
if((fp.GetString())[0] == '{')
{
LoadPageInfo(NULL, &fp);
++m_nRegistNpcCount;
}
else
__asm int 3;
CMD_EN
}
}
void cNpcScriptManager::LoadPageInfo(cPage* pPage, CMHFile* fp)
{
// 促矫茄锅 犬牢 棺 林籍 贸府夸!!
char buff[256]={0,};
static DWORD dwNpcId; // Npc俊措茄 Page沥焊啊 肯丰 瞪锭鳖瘤 蜡瘤 啊瓷秦具 茄促.
DWORD dwPageId;
int nDialogueCount = 0;
int nHyperLinkCount = 0;
DWORD dwDialogueId;
HYPERLINK sHyper;
while(1)
{
fp->GetString(buff);
if(buff[0] == '}'|| fp->IsEOF())
break;
if(buff[0] == '@')
{
fp->GetLineX(buff, 256);
continue;
}
CMD_ST(buff)
CMD_CS("$PAGE")
if((fp->GetString())[0] == '{')
{
cPage* pNewPage = new cPage; // 货肺款 其捞瘤狼 殿废
AddNpcScriptInfo( dwNpcId, pNewPage );
LoadPageInfo(pNewPage, fp);
}
CMD_CS("#NPCID")
dwNpcId = fp->GetDword();
CMD_CS("#PAGEINFO")
dwPageId = fp->GetDword();
nDialogueCount = fp->GetInt();
nHyperLinkCount = fp->GetInt();
pPage->Init( dwPageId );
CMD_CS("#DIALOGUE")
for(int i =0; i<nDialogueCount;++i)
{
dwDialogueId = fp->GetDword();
pPage->AddDialogue( dwDialogueId );
}
CMD_CS("#HYPERLINK")
sHyper.wLinkId = fp->GetWord();
sHyper.wLinkType = fp->GetWord()+1;
// if( sHyper.wLinkType == emLink_Page || sHyper.wLinkType == emLink_Open
// || sHyper.wLinkType == emLink_Quest )
sHyper.dwData = fp->GetDword();
pPage->AddHyperLink( &sHyper );
CMD_EN
}
}
void cNpcScriptManager::StartNpcScript( CNpc* pNpc )
{
// 扁粮俊 粮犁窍搁 扁粮巴阑 昏力窍绊 货肺 楷促.
if( m_pCurSelectedNpc )
{
GAMEIN->GetNpcScriptDialog()->EndDialog();
m_pCurSelectedNpc = NULL;
}
m_pCurSelectedNpc = pNpc;
GAMEIN->GetNpcScriptDialog()->OpenDialog( pNpc->GetNpcUniqueIdx() );
}
void cNpcScriptManager::StartNpcBusiness(DWORD dwData)
{
if( m_pCurSelectedNpc == NULL )
{
ASSERT(0);
if( HERO->GetState() == eObjectState_Deal )
OBJECTSTATEMGR->EndObjectState(HERO, eObjectState_Deal);
return;
}
if(m_pCurSelectedNpc->GetNpcJob() == DEALER_ROLE)
{
MSG_WORD msg;
msg.Category = MP_ITEM;
msg.Protocol = MP_ITEM_DEALER_SYN;
msg.dwObjectID = HEROID;
msg.wData = m_pCurSelectedNpc->GetNpcUniqueIdx();
NETWORK->Send(&msg, sizeof(msg));
}
else if(m_pCurSelectedNpc->GetNpcJob() == MUNPA_ROLE)
{
if(dwData == 0)
{
if(HERO->GetGuildIdx())
{
CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(28));
return;
}
if(ABILITYMGR->GetAbilityLevel(ABILITYINDEX_LEADERSHIP, HERO->GetAbilityGroup()) < 1)
{
CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(41));
return;
}
if(GUILDMGR->CanEntryGuild(HERO->GetGuildEntryDate()) == FALSE)
{
CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(59), HERO->GetGuildEntryDate());
return;
}
cDialog* pDlg = (cDialog*)GAMEIN->GetGuildCreateDlg();
pDlg->SetActive(TRUE);
}
else if(dwData == 1)
{
if(HERO->GetGuildIdx() && (HERO->GetGuildMemberRank() == GUILD_MASTER))
{
WINDOWMGR->MsgBox( MBI_GUILD_BREAKUP, MBT_YESNO, CHATMGR->GetChatMsg( 302 ) );
}
else
{
CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(35));
return;
}
}
else if(dwData == 2)
{
if(HERO->GetGuildIdx() && (HERO->GetGuildMemberRank() == GUILD_MASTER))
{
GAMEIN->GetGuildLevelUpDlg()->SetActive(TRUE);
}
else
{
CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(35));
return;
}
}
else if(dwData == 3)
{
if(GUILDMGR->GetGuildLevel() < GUILD_2LEVEL)
{
CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(723));
return;
}
if(HERO->GetGuildIdx() && (HERO->GetGuildMemberRank() == GUILD_MASTER))
{
GAMEIN->GetGuildMarkDlg()->SetActive(TRUE);
}
else
{
CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(113));
return;
}
}
}
else if(m_pCurSelectedNpc->GetNpcJob() == CHANGGO_ROLE)
{
if(dwData == 0) //芒绊 焊扁
{
if(GAMEIN->GetPyogukDialog()->IsItemInit())
{
GAMEIN->GetInventoryDialog()->SetActive(TRUE);
GAMEIN->GetPyogukDialog()->SetActive(TRUE);
if(HERO->GetPyogukNum() == 0)
{
GAMEIN->GetPyogukDialog()->ShowPyogukMode(ePyogukMode_NoWare);
}
else
{
GAMEIN->GetPyogukDialog()->ShowPyogukMode(ePyogukMode_PyogukWare1);
GAMEIN->GetPyogukDialog()->AddPyogukMode(ePyogukMode_PyogukWare1);
}
}
else
{
if(HERO->GetPyogukNum() == 0)
{
GAMEIN->GetInventoryDialog()->SetActive(TRUE);
GAMEIN->GetPyogukDialog()->SetActive(TRUE);
GAMEIN->GetPyogukDialog()->ShowPyogukMode(ePyogukMode_NoWare);
}
else
{
MSGBASE msg;
msg.Category = MP_ITEM;
msg.Protocol = MP_ITEM_PYOGUK_ITEM_INFO_SYN;
msg.dwObjectID = HEROID;
NETWORK->Send(&msg, sizeof(msg));
}
}
/*
GAMEIN->GetInventoryDialog()->SetActive(TRUE);
GAMEIN->GetPyogukDialog()->SetActive(TRUE);
GAMEIN->GetPyogukDialog()->ShowPyogukMode(ePyogukMode_PyogukWare1);
GAMEIN->GetPyogukDialog()->AddPyogukMode(ePyogukMode_PyogukWare1);
*/
}
else if(dwData == 1) //啊拜钎/备涝
{
GAMEIN->GetPyogukDialog()->SetActive(TRUE);
GAMEIN->GetPyogukDialog()->ShowPyogukMode(ePyogukMode_PyogukListInfo);
GAMEIN->GetPyogukDialog()->AddPyogukMode(ePyogukMode_PyogukListInfo);
}
else if(dwData == 2)
{
GAMEIN->GetGuildWarehouseDlg()->SetActive(TRUE);
}
}
else if(m_pCurSelectedNpc->GetNpcJob() == WANTED_ROLE)
{
//傈俊 努腐茄霸 词霸棵 荐档 乐匙
if(GAMEIN->GetWantedDialog()->IsActive() == TRUE)
return;
if(dwData == 0) //芒绊 焊扁
WANTEDMGR->SortWantedListSyn(1);
else if(dwData == 1)
GAMEIN->GetBailDialog()->Open();
//
}
else if(m_pCurSelectedNpc->GetNpcJob() == SURYUN_ROLE)
{
GAMEIN->GetMPRegistDialog()->SetActive(TRUE);
if(GAMEIN->GetMugongSuryunDialog()->IsActive() == FALSE)
GAMEIN->GetMugongSuryunDialog()->SetActive(TRUE);
}
else
{
ASSERT(0);
if( HERO->GetState() == eObjectState_Deal )
OBJECTSTATEMGR->EndObjectState(HERO, eObjectState_Deal);
return;
}
GAMEIN->GetNpcScriptDialog()->DisActiveEx();
// GAMEIN->GetNpcScriptDialog()->EndDialog();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -