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

📄 streetstallmanager.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "stdafx.h"
#include "StreetStallManager.h"
#include "Item.h"
#include "itemmanager.h"
#include "GameIn.h"
#include "ExchangeItem.h"
#include "WindowIdEnum.h"
#include "./interface/cWindowManager.h"
#include "objectmanager.h"
#include "objectstatemanager.h"
#include "cMsgBox.h"
#include "ChatManager.h"
#include "MoveManager.h"
#include "Vimumanager.h"

#include "StreetStall.h"
#include "InventoryExDialog.h"

#include "FilteringTable.h"
#include "MHCamera.h"
#include "Quickmanager.h"

GLOBALTON(CStreetStallManager);
CStreetStallManager::CStreetStallManager()
{
	m_bOpenMsgBox = TRUE;
	
	m_nLinkedItemNum = 0;
	m_IconIndexCreator.Init(MAX_ITEMICON_NUM, IG_STREETSTALLITEM_STARTINDEX);
}

CStreetStallManager::~CStreetStallManager()
{
}

void CStreetStallManager::Init()
{
	m_bOpenMsgBox = TRUE;
	
	m_nLinkedItemNum = 0;


//KES
//	m_posWantBuy	= 0;
	m_dwWantBuyNum	= 0;
}

BOOL CStreetStallManager::LinkItem( CItem* pItem, ITEMBASE* pBase )
{
	CExchangeItem* pExItem = new CExchangeItem;
	int pos;

	pExItem->InitItem( pItem, 0, m_IconIndexCreator.GenerateIndex() );
	pExItem->SetType( WT_STALLITEM );
	pExItem->SetDBId( pBase->dwDBIdx );
	pExItem->SetDurability( pBase->Durability );

	pos = GAMEIN->GetStreetStallDialog()->AddItem( pExItem );

	if( pos == -1 ) 
	{
		SAFE_DELETE(pExItem);
		return FALSE;
	}
	WINDOWMGR->AddWindow( pExItem );

	pExItem->SetPosition( pos );

	pItem->SetLock( TRUE );
	pItem->SetLinkPosition( pos );

	return TRUE;
}

void CStreetStallManager::UnlinkItem( CExchangeItem* pItem )
{
	if( pItem->GetLinkItem() == NULL )
		return;

	pItem->GetLinkItem()->SetLinkPosition( 0 );
	pItem->GetLinkItem()->SetLinkItem( NULL );
	pItem->GetLinkItem()->SetLock( FALSE );
	WINDOWMGR->AddListDestroyWindow( pItem );
}


void CStreetStallManager::ToggleHero_StreetStallMode()
{	
	if( OBJECTSTATEMGR->GetObjectState(HERO) == eObjectState_StreetStall_Owner )
	{
		if(OBJECTSTATEMGR->IsEndStateSetted(HERO) == TRUE)
			return;
		Toggle_StreetStallMode(HERO, FALSE);
		
		DWORD time = HERO->GetEngineObject()->GetAnimationTime(eMotion_StreetStall_End);
		CAMERA->SetCharState( eCS_Normal, time );
	}
	else
	{
		// 惑怕啊 None 老锭父 且 荐 乐促.
		if(HERO->GetState() != eObjectState_None && HERO->GetState() != eObjectState_Immortal )
			return;

		Toggle_StreetStallMode(HERO, TRUE);

		DWORD time = HERO->GetEngineObject()->GetAnimationTime(eMotion_StreetStall_Start);
		CAMERA->SetCharState( eCS_Sit, time );

		m_strOldTitle[0] = 0;
	}
}

void CStreetStallManager::Toggle_StreetStallMode(CObject* pObject, BOOL bStreet)
{
	if(bStreet == TRUE)
	{
		OBJECTSTATEMGR->StartObjectState(pObject, eObjectState_StreetStall_Owner);
	}
	else 
	{
//		if( pObject == HERO )
//		{
//			DWORD time = pObject->GetEngineObject()->GetAnimationTime(eMotion_StreetStall_End);
//			OBJECTSTATEMGR->EndObjectState(pObject, eObjectState_StreetStall_Owner,time);			
//		}
//		else
//		{
			DWORD time = pObject->GetEngineObject()->GetAnimationTime(eMotion_StreetStall_End);
			OBJECTSTATEMGR->EndObjectState(pObject, eObjectState_StreetStall_Owner,time);
//		}
	}
}

void CStreetStallManager::OpenStreetStall()
{
//	if( HERO->GetState() != eObjectState_None && !VIMUMGR->IsVimuing() )
	if( ( HERO->GetState() != eObjectState_None &&
		HERO->GetState() != eObjectState_Immortal )
		|| VIMUMGR->IsVimuing() )
	{
		m_bOpenMsgBox = TRUE;
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(353) );
		return;
	}
	
	MSG_STREETSTALL_TITLE msg;
	msg.Category = MP_STREETSTALL;
	msg.Protocol = MP_STREETSTALL_OPEN_SYN;
	msg.dwObjectID = HEROID;
//	strcpy( msg.Title, GAMEIN->GetStreetStallDialog()->GetTitle() );
	GAMEIN->GetStreetStallDialog()->GetTitle( msg.Title );

	NETWORK->Send( &msg, sizeof(MSG_STREETSTALL_TITLE) );
}

void CStreetStallManager::CloseStreetStall()
{
	if( GAMEIN->GetStreetStallDialog()->GetDlgState() == eSDS_BUY )
	{
		MSG_DWORD msg;
		msg.Category = MP_STREETSTALL;
		msg.Protocol = MP_STREETSTALL_GUESTOUT_SYN;
		msg.dwObjectID = HEROID;
		msg.dwData = GAMEIN->GetStreetStallDialog()->GetStallOwnerId();
		NETWORK->Send( &msg, sizeof(MSG_DWORD) );
	}
	else if( GAMEIN->GetStreetStallDialog()->GetDlgState() ==  eSDS_OPENED )
	{
		MSGBASE msg;
		msg.Category = MP_STREETSTALL;
		msg.dwObjectID = HEROID;
		msg.Protocol = MP_STREETSTALL_CLOSE_SYN;
		NETWORK->Send( &msg, sizeof(MSGBASE) );
	}
}

void CStreetStallManager::EnterStreetStall( DWORD OwnerId )
{
	if( HERO->GetState() == eObjectState_StreetStall_Guest )
	{
		// 咯扁 甸绢坷搁 救登绰淡 ^^;;;
		// ASSERT(0);
		return;
	}

//KES 040924
	OBJECTSTATEMGR->StartObjectState( HERO, eObjectState_StreetStall_Guest );

	MSG_DWORD msg;
	msg.Category = MP_STREETSTALL;
	msg.Protocol = MP_STREETSTALL_GUESTIN_SYN;
	msg.dwObjectID = HEROID;
	msg.dwData = OwnerId;
	NETWORK->Send(&msg, sizeof(MSG_DWORD));
}

void CStreetStallManager::RegistItemEx( CItem* pItem , DWORD money )
{
	MSG_REGISTITEMEX msg;
	msg.Category = MP_STREETSTALL;
	msg.Protocol = MP_STREETSTALL_FAKEREGISTITEM_SYN;
	msg.dwObjectID = HEROID;
	msg.ItemInfo = *pItem->GetItemBaseInfo();
	msg.dwData = m_nLinkedItemNum++;
	msg.dwMoney = money;

	NETWORK->Send( &msg, sizeof(MSG_REGISTITEMEX) );
}

void CStreetStallManager::EditTitle()
{
//	char* strTitle = GAMEIN->GetStreetStallDialog()->GetTitle();
	char strTitle[MAX_STREETSTALL_TITLELEN + 4];
	GAMEIN->GetStreetStallDialog()->GetTitle( strTitle );

	//函版登菌唱 眉农茄锅 窍绰巴捞 亮摆促. 函版 救登菌栏搁 促弗贸府 救窍绊 官肺 府畔.
	if( strcmp( m_strOldTitle, strTitle ) == 0 )
		return;
	
	if( FILTERTABLE->FilterChat( strTitle ) )	//FILTERING  KES
	{
		//垮阑 荤侩窍看澜.
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(27) );
	}
	else
	{
		MSG_STREETSTALL_TITLE msg;
		msg.Category = MP_STREETSTALL;
		msg.Protocol = MP_STREETSTALL_EDITTITLE_SYN;
		msg.dwObjectID = HEROID;
		strcpy( msg.Title, strTitle );

		NETWORK->Send( &msg, sizeof(MSG_STREETSTALL_TITLE) );

		SafeStrCpy( m_strOldTitle, strTitle, MAX_STREETSTALL_TITLELEN + 4 );	//扁粮 鸥捞撇 扁撅
	}
}

void CStreetStallManager::BuyItem()
{
	CStreetStall* pDlg = GAMEIN->GetStreetStallDialog();
	if( pDlg == NULL )				return;
	if( pDlg->IsActive() == FALSE ) return;

	POSTYPE pos = pDlg->GetCurSelectedItemNum();
	DWORD dwCheckDBIdx = pDlg->GetCheckDBIdx();

	//KES pos 客 dwNum父 扁撅窍绊 乐磊.
//	m_posWantBuy = pos;
	m_dwWantBuyNum = 1;

	CExchangeItem* pItem = (CExchangeItem*)pDlg->GetCurSelectedItem();

	if( pItem == NULL )
	{
		pDlg->SetData( NULL );
		pDlg->SetDisable( FALSE );
		return;
	}
	
	if( pDlg->GetItemMoney( pos ) > HERO->GetMoney() ) 
	{
		// MsgBox 贸府 (家瘤陛捞 何练窍促.) 355
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(117) );
		pDlg->SetData( NULL );
		pDlg->SetDisable( FALSE );
		return;
	}
	if( GAMEIN->GetInventoryDialog()->GetBlankNum() == 0 )
	{
		// MsgBox 贸府 (牢亥捞 菜瞒乐促.) 354
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(354) );
		pDlg->SetData( NULL );
		pDlg->SetDisable( FALSE );
		return;
	}
	if( pItem->GetDBId() != dwCheckDBIdx )
	{
		// 国结 迫赴 酒捞袍捞促. 358
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(358) );
		pDlg->SetData( NULL );
		pDlg->SetDisable( FALSE );
		return;
	}
/*
	ITEMBASE base;
	base.dwDBIdx = pItem->GetDBId();
	base.wIconIdx = pItem->GetData();
	if( ITEMMGR->IsDupItem(base.wIconIdx) )
		base.Durability = 1;

	m_BuyMsg.Category = MP_STREETSTALL;
	m_BuyMsg.Protocol = MP_STREETSTALL_BUYITEM_SYN;
	m_BuyMsg.dwObjectID = HEROID;
	m_BuyMsg.StallOwnerID = pDlg->GetStallOwnerId();
	m_BuyMsg.StallPos = pos;
	m_BuyMsg.ItemInfo = base;
	m_BuyMsg.dwBuyPrice = pDlg->GetItemMoney( pos );
*/
	cMsgBox* pBox = WINDOWMGR->MsgBox( MBI_STREETBUYMSG, MBT_YESNO, CHATMGR->GetChatMsg(167), pItem->GetItemName(), AddComma( pDlg->GetItemMoney( pos ) ) );
}

void CStreetStallManager::BuyItemDur( POSTYPE pos, DWORD dwNum )
{
	CStreetStall* pDlg = GAMEIN->GetStreetStallDialog();
	if( pDlg == NULL )				return;
	if( pDlg->IsActive() == FALSE ) return;

	DWORD dwCheckDBIdx = pDlg->GetCheckDBIdx();

	//KES pos 客 dwNum父 扁撅窍绊 乐磊.
//	m_posWantBuy = pos;
	m_dwWantBuyNum = dwNum;

	//CExchangeItem* pItem = (CExchangeItem*)pDlg->GetCurSelectedItem();

	CExchangeItem* pItem = (CExchangeItem*)pDlg->GetItem( (POSTYPE)pos );
	if( pItem == NULL )
	{
		pDlg->SetData( NULL );
		pDlg->SetDisable( FALSE );
		return;
	}
	
	if( pDlg->GetItemMoney( pos )*dwNum > HERO->GetMoney() ) 
	{
		// MsgBox 贸府 (家瘤陛捞 何练窍促.) 355
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(117) );
		pDlg->SetData( NULL );
		pDlg->SetDisable( FALSE );
		return;
	}
	if( GAMEIN->GetInventoryDialog()->GetBlankNum() == 0 )
	{
		// MsgBox 贸府 (牢亥捞 菜瞒乐促.)354
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(354) );
		pDlg->SetData( NULL );
		pDlg->SetDisable( FALSE );
		return;
	}
	if( pItem->GetDBId() != dwCheckDBIdx )
	{
		// 国结 迫赴 酒捞袍捞促. 358
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(358) );
		pDlg->SetData( NULL );
		pDlg->SetDisable( FALSE );
		return;
	}
/*	
	ITEMBASE base;
	base.dwDBIdx = pItem->GetDBId();
	base.wIconIdx = pItem->GetData();
	base.Durability = dwNum;			// 混 肮荐..
	
	m_BuyMsg.Category = MP_STREETSTALL;
	m_BuyMsg.Protocol = MP_STREETSTALL_BUYITEM_SYN;
	m_BuyMsg.dwObjectID = HEROID;
	m_BuyMsg.StallOwnerID = pDlg->GetStallOwnerId();
	m_BuyMsg.StallPos = pos;
	m_BuyMsg.ItemInfo = base;
	m_BuyMsg.dwBuyPrice = pDlg->GetItemMoney( pos );
*/
	char temp[32];
	SafeStrCpy( temp, AddComma( pDlg->GetItemMoney( pos ) ), 32 );
	cMsgBox* pBox = WINDOWMGR->MsgBox( MBI_STREETBUYMSG, MBT_YESNO, CHATMGR->GetChatMsg(166), pItem->GetItemName(), dwNum, temp, AddComma( pDlg->GetItemMoney( pos )*dwNum) );
}

void CStreetStallManager::ItemStatus( CExchangeItem* pItem, BOOL bLock )
{
//	CExchangeItem* pItem = (CExchangeItem*)GAMEIN->GetStreetStallDialog()->GetCurSelectedItem();
	if( !pItem ) return;

//	POSTYPE pos = GAMEIN->GetStreetStallDialog()->GetCurSelectedItemNum();
	POSTYPE pos = pItem->GetPosition();
	GAMEIN->GetStreetStallDialog()->SetDisable( TRUE );

	MSG_STREETSTALL_ITEMSTATUS msg;
	msg.Category = MP_STREETSTALL;
	msg.dwObjectID = HEROID;

	if( bLock )
	{
		msg.Protocol = MP_STREETSTALL_LOCKITEM_SYN;
		msg.wAbsPosition = pos;
		msg.ItemInfo = *pItem->GetLinkItem()->GetItemBaseInfo();
		msg.dwMoney = GAMEIN->GetStreetStallDialog()->GetItemMoney( pos );
	}
	else
	{
		msg.Protocol = MP_STREETSTALL_UNLOCKITEM_SYN;
		msg.wAbsPosition = pos;
		msg.ItemInfo = *pItem->GetLinkItem()->GetItemBaseInfo();
		msg.dwMoney = GAMEIN->GetStreetStallDialog()->GetItemMoney( pos );
	}

	NETWORK->Send( &msg, sizeof(MSG_STREETSTALL_ITEMSTATUS) );
}

void CStreetStallManager::ItemStatus( POSTYPE pos, BOOL bLock )
{
	CExchangeItem* pItem = (CExchangeItem*)GAMEIN->GetStreetStallDialog()->GetItem(pos);
	if( !pItem ) return;

	MSG_STREETSTALL_ITEMSTATUS msg;
	msg.Category = MP_STREETSTALL;
	msg.dwObjectID = HEROID;

	if( bLock )
	{
		msg.Protocol = MP_STREETSTALL_LOCKITEM_SYN;
		msg.wAbsPosition = pos;
		msg.ItemInfo = *pItem->GetLinkItem()->GetItemBaseInfo();
		msg.dwMoney = GAMEIN->GetStreetStallDialog()->GetItemMoney( pos );
	}
	else
	{
		msg.Protocol = MP_STREETSTALL_UNLOCKITEM_SYN;
		msg.wAbsPosition = pos;
		msg.ItemInfo = *pItem->GetLinkItem()->GetItemBaseInfo();
		msg.dwMoney = 0;
	}

	NETWORK->Send( &msg, sizeof(MSG_STREETSTALL_ITEMSTATUS) );
}


void CStreetStallManager::ChangeDialogState()
{
	CStreetStall* pStall = GAMEIN->GetStreetStallDialog();
	DWORD state = pStall->GetDlgState();

	if( !m_bOpenMsgBox ) return;
	
	if( state == eSDS_NOT_OPENED )
	{
		if( !WINDOWMGR->MsgBox( MBI_MAKESTREETSTALL, MBT_YESNO, CHATMGR->GetChatMsg(340) ) )
			return;

		m_bOpenMsgBox = FALSE;
	}

	if( state == eSDS_OPENED )
	{
		if( !pStall->IsActive() )
			GAMEIN->GetStreetStallDialog()->ShowSellStall();
	}
}

void CStreetStallManager::LinkBuyItem( STREETSTALL_INFO* pStallInfo )
{
	CStreetStall* pDlg = GAMEIN->GetStreetStallDialog();
	char buf[32] = {0,};
	int i;

	// Option Info 悸泼
	for(i=0;i<pStallInfo->count;++i)
		ITEMMGR->AddItemOption(&pStallInfo->sOption[i]);
	
	for( i=0;i<SLOT_STREETSTALL_NUM;++i)
	{
		if( pStallInfo->Item[i].Fill )
		{
			CExchangeItem* pExItem = new CExchangeItem;
			cImage tmpImage;
			pExItem->Init( 0, 0, DEFAULT_ICONSIZE, DEFAULT_ICONSIZE, 
				ITEMMGR->GetIconImage( pStallInfo->Item[i].wIconIdx, &tmpImage ), m_IconIndexCreator.GenerateIndex() );
			pExItem->SetData( pStallInfo->Item[i].wIconIdx );
			pExItem->SetDBId( pStallInfo->Item[i].dwDBIdx );
			pExItem->SetDurability( pStallInfo->Item[i].Durability );

			if( !ITEMMGR->IsDupItem(pStallInfo->Item[i].wIconIdx) && pStallInfo->Item[i].Durability !=0 )
				ITEMMGR->SetToolTipIcon( pExItem, ITEMMGR->GetItemOption(pStallInfo->Item[i].Durability) );
			else
				ITEMMGR->SetToolTipIcon( pExItem );

			//啊拜砒屏
			if( pStallInfo->Item[i].Locked  )
			{
				if( ITEMMGR->IsDupItem(pStallInfo->Item[i].wIconIdx) )
					wsprintf( buf, CHATMGR->GetChatMsg(199), AddComma( pStallInfo->Item[i].money ) );
				else
					wsprintf( buf, CHATMGR->GetChatMsg(214), AddComma( pStallInfo->Item[i].money ) );
			}
			else
				wsprintf( buf, CHATMGR->GetChatMsg(114) );

			pExItem->AddToolTipLine( buf, TTTC_BUYPRICE );

			pExItem->SetLock( !pStallInfo->Item[i].Locked );
			pExItem->SetMovable( FALSE );

			int pos = pDlg->AddItem( pExItem );
			if( pos == -1 ) 
			{
				SAFE_DELETE(pExItem);
				continue;
			}

			WINDOWMGR->AddWindow( pExItem );

⌨️ 快捷键说明

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