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

📄 munpawareslot.cpp

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

#include "stdafx.h"
#include "MunpaWareSlot.h"
#include "ItemManager.h"
#include "GuildManager.h"
#include "Player.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
#define ClearItemBase(a)		a.dwDBIdx = 0;	\
								a.wIconIdx = 0;	\
								a.Position = 0;	\
								a.QuickPosition = 0;	\
								a.Durability = 0;

#define ClearSlotInfo(b)		b.bLock = 0;	\
								b.wPassword = 0;	\
								b.wState = 0;

CMunpaWareSlot::CMunpaWareSlot()
{

}

CMunpaWareSlot::~CMunpaWareSlot()
{

}

void CMunpaWareSlot::Init(POSTYPE startAbsPos, POSTYPE slotNum, ITEMBASE * pInfo, SLOTINFO * pSlotInfo)
{
	CItemSlot::Init(startAbsPos, slotNum, pInfo, pSlotInfo);

}
// ÁÖÀÇ!!!!
// ¹®ÆÄ´Â »ó´ë Æ÷Áö¼ÇÀ» »ç¿ë!!!!!
// absPos - m_StartAbsPos
ERROR_ITEM CMunpaWareSlot::InsertItemAbs(CPlayer * pPlayer, POSTYPE absPos, ITEMBASE * pItem, WORD state)
{
	if( !IsPosIn(absPos) )		return EI_OUTOFPOS;
	if( pItem->Position != absPos )
	{
		//YH
		//return EI_NOTEQUALDATA;
		pItem->Position = absPos;
	}
	if( !IsEmptyInner(absPos) )	return EI_EXISTED;
	if( !( SS_LOCKOMIT & state ) && IsLock(absPos) )  return EI_LOCKED;
	if( IsPassword(absPos) ) return EI_PASSWD;
	
	
	//////////////////////////////////////////////////////////////////////////
	//itemmaxcheck
	if(state & SS_PREINSERT == FALSE)	
	if( ITEMMGR->IsDupItem(m_ItemBaseArray[absPos - m_StartAbsPos].wIconIdx) && m_ItemBaseArray[absPos - m_StartAbsPos].Durability > 5 )
		return EI_NOTEQUALDATA;
	//////////////////////////////////////////////////////////////////////////

	if(pPlayer)
	{
		if(ITEMMGR->IsOptionItem(pItem->wIconIdx, pItem->Durability))
			GUILDMGR->AddGuildItemOption(pPlayer->GetItemOption(pItem->Durability));
	}

	m_ItemBaseArray[absPos - m_StartAbsPos] = *pItem;
	m_SlotInfoArray[absPos - m_StartAbsPos].wState = ( state & ~SS_LOCKOMIT );
	m_SlotInfoArray[absPos - m_StartAbsPos].bLock = FALSE;

	return EI_TRUE;
}
ERROR_ITEM CMunpaWareSlot::UpdateItemAbs(CPlayer * pPlayer, POSTYPE whatAbsPos, DWORD dwDBIdx, WORD wItemIdx, POSTYPE position, POSTYPE quickPosition, DURTYPE Dur, WORD flag, WORD state)
{
	if( !IsPosIn(whatAbsPos) )	return EI_OUTOFPOS;
	if( (flag & UB_ABSPOS) && (position != whatAbsPos) )
	{
		//YH
		//return EI_NOTEQUALDATA;
		position = whatAbsPos;
	}
	if( !( SS_LOCKOMIT & state ) && IsLock(whatAbsPos) )  return EI_LOCKED;
	if( IsPassword(whatAbsPos) ) return EI_PASSWD;

	if(flag & UB_DBIDX)
	m_ItemBaseArray[whatAbsPos - m_StartAbsPos].dwDBIdx = dwDBIdx;
	if(flag & UB_ICONIDX)
	m_ItemBaseArray[whatAbsPos - m_StartAbsPos].wIconIdx = wItemIdx;
	if(flag & UB_QABSPOS)
	m_ItemBaseArray[whatAbsPos - m_StartAbsPos].QuickPosition = quickPosition;
	if(flag & UB_ABSPOS)
	m_ItemBaseArray[whatAbsPos - m_StartAbsPos].Position = position;

	
	//////////////////////////////////////////////////////////////////////////
	//itemmaxcheck
	if( ITEMMGR->IsDupItem(m_ItemBaseArray[whatAbsPos - m_StartAbsPos].wIconIdx) && m_ItemBaseArray[whatAbsPos - m_StartAbsPos].Durability > 5 )
		return EI_NOTEQUALDATA;
	//////////////////////////////////////////////////////////////////////////
	

	if(flag & UB_DURA)
	m_ItemBaseArray[whatAbsPos - m_StartAbsPos].Durability = Dur;
	
	
	m_SlotInfoArray[whatAbsPos - m_StartAbsPos].wState = ( state & ~SS_LOCKOMIT );
	m_SlotInfoArray[whatAbsPos - m_StartAbsPos].bLock = FALSE;

	return EI_TRUE;
}
ERROR_ITEM CMunpaWareSlot::DeleteItemAbs(CPlayer * pPlayer, POSTYPE absPos, ITEMBASE * pItemOut, WORD state)
{
	if( !IsPosIn(absPos) )	return EI_OUTOFPOS;
	if( IsEmptyInner(absPos) )	return EI_NOTEXIST;
	if( !( SS_LOCKOMIT & state ) && IsLock(absPos) )  return EI_LOCKED;
	if( IsPassword(absPos) ) return EI_PASSWD;

	if(pItemOut)
		*pItemOut = m_ItemBaseArray[absPos - m_StartAbsPos];

	ClearItemBase(m_ItemBaseArray[absPos - m_StartAbsPos]);
	ClearSlotInfo(m_SlotInfoArray[absPos - m_StartAbsPos]);

	return EI_TRUE;
}


BYTE CMunpaWareSlot::GetTabNum(POSTYPE absPos)
{
	return (absPos - m_StartAbsPos) / TABCELL_GUILDWAREHOUSE_NUM;
}

void CMunpaWareSlot::GetItemInfoTab(BYTE TabNum, ITEMBASE* pRtItemArray)
{
	int StartPos = TABCELL_GUILDWAREHOUSE_NUM * TabNum;
	for(int n=0;n<TABCELL_GUILDWAREHOUSE_NUM;++n)
	{
		pRtItemArray[n] = m_ItemBaseArray[StartPos+n];
	}
}

BOOL CMunpaWareSlot::IsEmptyInner(POSTYPE absPos)
{
	ASSERT( m_StartAbsPos <= absPos && absPos < m_StartAbsPos + m_SlotNum );

	if( m_SlotInfoArray[absPos - m_StartAbsPos].wState != SS_NONE )
		return TRUE;
	else if( m_ItemBaseArray[absPos - m_StartAbsPos].dwDBIdx == 0 ) 
		return TRUE;
	else
		return FALSE;
}
BOOL CMunpaWareSlot::IsEmpty(POSTYPE absPos)
{
	ASSERT( m_StartAbsPos <= absPos && absPos < m_StartAbsPos + m_SlotNum );
	if( !m_SlotInfoArray[absPos - m_StartAbsPos].bLock && m_SlotInfoArray[absPos - m_StartAbsPos].wState == SS_NONE && m_ItemBaseArray[absPos - m_StartAbsPos].dwDBIdx == 0)
		return TRUE;
	else
		return FALSE;
}
BOOL CMunpaWareSlot::IsLock(POSTYPE absPos)
{
	ASSERT( m_StartAbsPos <= absPos && absPos < m_StartAbsPos + m_SlotNum );
	if( m_SlotInfoArray[absPos - m_StartAbsPos].bLock )
		return TRUE;
	else
		return FALSE;
}
BOOL CMunpaWareSlot::IsPassword(POSTYPE absPos)
{
	ASSERT( m_StartAbsPos <= absPos && absPos < m_StartAbsPos + m_SlotNum );
	if( m_SlotInfoArray[absPos - m_StartAbsPos].wPassword ) 
		return TRUE;
	else
		return FALSE;
}
void CMunpaWareSlot::SetLock(POSTYPE absPos, BOOL val)
{
	ASSERT( m_StartAbsPos <= absPos && absPos < m_StartAbsPos + m_SlotNum );
	m_SlotInfoArray[absPos - m_StartAbsPos].bLock = val;
}

⌨️ 快捷键说明

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