📄 streetstallmanager.cpp
字号:
#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 + -