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

📄 wantedmanager.cpp

📁 墨香最新私服
💻 CPP
字号:
// WantedManager.cpp: implementation of the CWantedManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "WantedManager.h"
#include "ObjectManager.h"
#include "ChatManager.h"
#include "GameIn.h"
#include "WantNpcDialog.h"
#include "WantRegistDialog.h"
#include "ReviveDialog.h"
#include "WantedDialog.h"
#include "JournalDialog.h"
#include "PKManager.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GLOBALTON(CWantedManager)

CWantedManager::CWantedManager()
{
}

CWantedManager::~CWantedManager()
{
}

void CWantedManager::Init()
{
	m_MurdererID = 0;
	m_bIsWaiting = eNone;
	m_bCanRevive = FALSE;
}

void CWantedManager::NetworkMsgParse(BYTE Protocol,void* pMsg)
{
	switch(Protocol)
	{
	case MP_WANTED_INFO_BY_USERLOGIN:
		{
			SEND_WANTEDLIST * pmsg = (SEND_WANTEDLIST*)pMsg;
			m_Wanted.SetInfo(pmsg);
			SetWaiting(eNone);
			
			HERO->SetWantedIdx(pmsg->WantedIdx);
			GAMEIN->GetWantedDialog()->SetInfo(pmsg->List);
			//quest interface update
		}
		break;
	case MP_WANTED_ORDERLIST_ACK:
		{
			SEND_WANTNPCLIST* pmsg = (SEND_WANTNPCLIST*)pMsg;
			GAMEIN->GetWantNpcDialog()->SetActive(TRUE);
			GAMEIN->GetWantNpcDialog()->ShowWantMode(eWantNpcMode_Npc);
			GAMEIN->GetWantNpcDialog()->SetWantedList(pmsg);
		}
		break;
	case MP_WANTED_MYLIST_ACK:
		{
			SEND_WANTNPCLIST* pmsg = (SEND_WANTNPCLIST*)pMsg;
			GAMEIN->GetWantNpcDialog()->ShowWantMode(eWantNpcMode_My);
			GAMEIN->GetWantNpcDialog()->SetWantedList(pmsg);
		}
		break;
	case MP_WANTED_KILLEDBYPLAYER:
		{
			MSG_NAME_DWORD* pmsg = (MSG_NAME_DWORD*)pMsg;
			SetMurdererID(pmsg->dwData);
			GAMEIN->GetWantRegistDialog()->SetWantedName(pmsg->Name);
			GAMEIN->GetWantRegistDialog()->SetActive( TRUE );	//掉饭捞 饶俊 active等促.
			SetWaiting(eStart);
		}
		break;
	case MP_WANTED_REGIST_ACK:
		{
			SetWaiting(eNone);
			SetMurdererID(0);
			//皋矫瘤 贸府
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(426));
		}
		break;
	case MP_WANTED_BUYRIGHT_ACK:
		{
			SEND_WANTEDLIST_TO_CLIENT * pmsg = (SEND_WANTEDLIST_TO_CLIENT*)pMsg;
			BuyWantedRightResult(&pmsg->List);	
			CHATMGR->AddMsg(CTC_GETMONEY, CHATMGR->GetChatMsg(118), "500");
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(429), pmsg->List.WantedName);
			
			OBJECTMGR->ApplyOverInfoOptionToAll();
		}
		break;
	case MP_WANTED_GIVEUPRIGHT_ACK:
		{
			MSG_WORD * pmsg = (MSG_WORD*)pMsg;
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(428), m_Wanted.GetWantedName(pmsg->wData));
			GiveUpWantedRightResult(pmsg->wData);
			OBJECTMGR->ApplyOverInfoOptionToAll();
		}
		break;
	case MP_WANTED_NOTCOMPLETE:
		{
			SEND_WANTED_NOTCOMPLETE* pmsg = (SEND_WANTED_NOTCOMPLETE*)pMsg;
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(437), pmsg->CompleterName, m_Wanted.GetWantedName(pmsg->WantedIDX));
			DeleteFromWantedList(pmsg->WantedIDX, eJournal_Wanted_FailbyOther);
			//interface update			
			OBJECTMGR->ApplyOverInfoOptionToAll();
		}
		break;
	case MP_WANTED_COMPLETE:
		{
			MSG_DWORD2 * pmsg = (MSG_DWORD2*)pMsg;
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(427), m_Wanted.GetWantedName(pmsg->dwData1) , pmsg->dwData2);
			DeleteFromWantedList(pmsg->dwData1, eJournal_Wanted_Succeed);
			OBJECTMGR->ApplyOverInfoOptionToAll();
		}
		break;
	case MP_WANTED_NOTCOMPLETE_BY_DELCHR_TO_CL:
		{
			MSG_WORD * pmsg = (MSG_WORD*)pMsg;
			//interface update
			DeleteFromWantedList(pmsg->wData, eJournal_Wanted_FailbyDelChr);
		}
		break;
	case MP_WANTED_LET_KNOW_REGIST:
		{
			m_Wanted.InitInfo();
		}
		break;
	case MP_WANTED_DESTROYED_TO_CLIENT:
		{
			MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
			if(pmsg->dwData == HERO->GetWantedIdx()) //泅惑裹捞搁
			{
				HERO->SetWantedIdx(0);
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(682));
			}
			else //么混鼻 啊柳 荤恩捞搁
			{
				if(m_Wanted.IsInList(pmsg->dwData) == TRUE)
				{
					CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(683), m_Wanted.GetWantedName(pmsg->dwData));
					DWORD WantedIdx = 0;
					WantedIdx = m_Wanted.GetWantedChrID(pmsg->dwData);
					DeleteFromWantedList(pmsg->dwData, eJournal_Wanted_FailbyTime);
					CObject* pPlayer = OBJECTMGR->GetObject(WantedIdx);
					if(pPlayer != 0)
					{
						OBJECTMGR->ApplyOverInfoOption(pPlayer);
					}					
				}
			}
		}
		break;
		//////////////////////////////////////////////////////////////////////////
		//NACK
	
	case MP_WANTED_REGIST_NACK:
		{
			SetMurdererID(0);			
			SetWaiting(eDone);
			//角菩 概技瘤..
			ASSERT(0);
		}
		break;
	case MP_WANTED_ORDERLIST_NACK: 
		{
			SEND_WANTNPCLIST info;
			memset(&info, 0, sizeof(info));
			GAMEIN->GetWantNpcDialog()->ShowWantMode(eWantNpcMode_Npc);
			GAMEIN->GetWantNpcDialog()->SetWantedList(&info);
			GAMEIN->GetWantNpcDialog()->SetActive(TRUE);
		}
		break;
	case MP_WANTED_MYLIST_NACK: // 啊柳霸 绝阑 锭档 nack啊 柯促.
		{
			MSG_BYTE* pmsg = (MSG_BYTE*)pMsg;
			if(pmsg->bData == 0) // 啊柳霸 绝促.
			{
				SEND_WANTNPCLIST info;
				memset(&info, 0, sizeof(info));
				GAMEIN->GetWantNpcDialog()->ShowWantMode(eWantNpcMode_My);
				GAMEIN->GetWantNpcDialog()->SetWantedList(&info);
			}
			else //  1: 啊妨绰 其捞瘤啊 醚 其捞瘤焊促 农促. 
				ASSERT(0);
		}
		break;
	case MP_WANTED_BUYRIGHT_NACK:
		{
			MSG_INT * pmsg = (MSG_INT*)pMsg;
			if(pmsg->nData == eBWR_Err_FullVolunteer)
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(693));
			else
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(570));
		}	
		break;
	default:
		ASSERT(0);
	}
}




BOOL CWantedManager::IsInList(WANTEDTYPE WantedIDX)
{
	return m_Wanted.IsInList(WantedIDX);
}

void CWantedManager::RegistKillerSyn(MONEYTYPE Prize)
{
	if(CanRegist(Prize) == FALSE)
	{
		return;
	}

	MSG_DWORD2 msg;
	msg.Category = MP_WANTED;
	msg.Protocol = MP_WANTED_REGIST_SYN;
	msg.dwData1 = m_MurdererID;
	msg.dwData2 = Prize;
	msg.dwObjectID = HEROID;

	NETWORK->Send(&msg, sizeof(msg));
	
	SetWaiting(eWaiting);	
	GAMEIN->GetWantRegistDialog()->SetActive(FALSE);
	SetMurdererID(0);
}

BOOL CWantedManager::CanRegist(MONEYTYPE Prize)
{
	ASSERT(m_MurdererID);

	if(IsWaiting() != eStart)
		return FALSE;	
	if(HERO->GetMoney() < Prize)
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(117) );
		return FALSE;
	}

	return TRUE;
}

void CWantedManager::BuyWantedRightSyn(WANTEDTYPE WantedIDX)
{
	if(CanBuyWantedRight(WantedIDX) == FALSE)
	{
		//nack
		return;
	}

	MSG_WORD msg;
	msg.Category = MP_WANTED;
	msg.Protocol = MP_WANTED_BUYRIGHT_SYN;
	msg.wData = WantedIDX;
	msg.dwObjectID = HEROID;
	NETWORK->Send(&msg, sizeof(msg));	
}

void CWantedManager::BuyWantedRightResult(WANTEDLIST * pInfo)
{
	m_Wanted.Add(pInfo);
	
	GAMEIN->GetWantedDialog()->AddInfo(pInfo);
}

BOOL CWantedManager::CanBuyWantedRight(WANTEDTYPE WantedIDX)
{
	if(HERO->GetMoney() < WANTED_CHARGE)
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(117) );
		return FALSE;
	}		
	if(m_Wanted.IsFull() == TRUE )
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(542) );
		return FALSE;
	}	
	if(m_Wanted.IsInList(WantedIDX) == TRUE)
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(543) );
		return FALSE;
	}
	if(HERO->GetWantedIdx() != 0)
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(675) );
		return FALSE;
	}
	return TRUE;
}

void CWantedManager::DeleteFromWantedList(WANTEDTYPE WantedIDX, BYTE DelKind)
{
	JOURNALINFO info;
	char temp[64];
	SYSTEMTIME ti;
	WANTEDLIST Info[MAX_WANTED_NUM];

	WANTEDLIST* pWInfo = m_Wanted.GetWantedInfo(WantedIDX);
	info.Kind = eJournal_Wanted;
	info.Param = DelKind;
	SafeStrCpy(info.ParamName, pWInfo->WantedName, MAX_NAME_LENGTH+1);
	
	GetSystemTime(&ti);
	sprintf(temp,"%d.%02d.%02d",ti.wYear,ti.wMonth ,ti.wDay);
	SafeStrCpy(info.RegDate, temp, 11);
	GAMEIN->GetJournalDialog()->JournalItemAdd(&info);

	m_Wanted.Delete(WantedIDX);
	m_Wanted.GetTotalInfo(Info);
	GAMEIN->GetWantedDialog()->SetInfo(Info);
}

void CWantedManager::GiveUpWantedRightSyn(WANTEDTYPE WantedIDX)
{
	if(m_Wanted.IsInList(WantedIDX) == FALSE)
	{
		ASSERT(0);
		return;
	}

	MSG_WORD msg;
	msg.Category = MP_WANTED;
	msg.Protocol = MP_WANTED_GIVEUPRIGHT_SYN;
	msg.wData = WantedIDX;
	msg.dwObjectID = HEROID;
	NETWORK->Send(&msg, sizeof(msg));
}

void CWantedManager::GiveUpWantedRightResult(WANTEDTYPE WantedIDX)
{
	//delete
	m_Wanted.Delete(WantedIDX);
	
	//interface update
	WANTEDLIST Info[MAX_WANTED_NUM];
	m_Wanted.GetTotalInfo(Info);
	GAMEIN->GetWantedDialog()->SetInfo(Info);
	MyWantedListSyn(1);
}

void CWantedManager::SortWantedListSyn(WORD Page)
{
	if(Page == 0)
		return;
	BYTE type = GAMEIN->GetWantNpcDialog()->GetOrderType();

	SEND_WANTED_ORDER_SYN msg;
	msg.Category = MP_WANTED;
	msg.Protocol = MP_WANTED_ORDERLIST_SYN;
	msg.dwObjectID = HEROID;
	msg.page = Page;
	msg.type =  type;

	NETWORK->Send(&msg, sizeof(msg));
	GAMEIN->GetWantNpcDialog()->SetCurPage(Page);
}

void CWantedManager::MyWantedListSyn(WORD Page)
{
	ASSERT((Page>0) && (Page<6)); 
	
	MSG_WORD msg;
	msg.Category = MP_WANTED;
	msg.Protocol = MP_WANTED_MYLIST_SYN;
	msg.dwObjectID = HEROID;
	msg.wData = Page;

	NETWORK->Send(&msg, sizeof(msg));	
	GAMEIN->GetWantNpcDialog()->SetCurPage(Page);
}

void CWantedManager::SetActiveDialog()
{
	if(GetMurdererID() == 0)
	{
		//烙矫肺 PK风泼阑 寸窍绰 吝俊绰 何劝芒捞 救哆档废
		if( !PKMGR->IsPKLooted() )
		{
			if(!GAMEIN->GetReviveDialog()->IsActive())
				GAMEIN->GetReviveDialog()->SetActive(TRUE);
		}
	}
	else if((IsWaiting() == eNone) && (!GAMEIN->GetReviveDialog()->IsActive()))
	{
		if( !GAMEIN->GetWantRegistDialog()->IsActive())
		{
			GAMEIN->GetWantRegistDialog()->SetActive(TRUE);
			SetWaiting(eStart);
		}
	}
}

BOOL CWantedManager::IsChrIDInList(DWORD CharacterID)
{
	return m_Wanted.IsChrIDInList(CharacterID);
}

⌨️ 快捷键说明

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