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

📄 itemmanager.h

📁 墨香最新私服
💻 H
字号:
// ItemManager.h: interface for the CItemManager class.
// created by taiyo
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_ITEMMANAGER_H__B48BE6A4_2998_4459_B958_995D81EAAF1E__INCLUDED_)
#define AFX_ITEMMANAGER_H__B48BE6A4_2998_4459_B958_995D81EAAF1E__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "IndexGenerator.h"
#include "cLinkedList.h"

class CMHFile;
struct ITEM_INFO;
class ITEM_MIX_INFO;
struct MATERIAL_ARRAY;
class ITEM_MIX_RES;
class ITEM_REINFORCE_INFO;
// < 窃荐甫 备泅 且 锭 馆靛矫 瘤难具 且 巴 >
// 1. 窃荐俊辑 俊矾贸府绰 肯寒洒 贸府 且 巴
// 2. 俊矾贸府 且锭 (盔贰 累诀栏肺 登倒副 巴 RollBack!!!)
#define MAX_MIX_PERCENT	10000
#define ITEMMGR CItemManager::GetInstance()

class CItemSlot;

struct DealerItem
{
	BYTE Tab;
	BYTE Pos;
	WORD ItemIdx;
};
struct DealerData
{
	POS pos;
public:
	void SetPositionHead(){	pos = m_DealItemList.GetFirstPos();	}
	DealerItem* GetNextItem(){	return m_DealItemList.GetNextPos(pos);	}
	BOOL FindItem(WORD ItemIdx)
	{
		DealerItem* pItem;
		SetPositionHead();
		while(pItem = GetNextItem())
		{
			if(pItem->ItemIdx == ItemIdx)
				return TRUE;
		}

		return FALSE;
	}

	cLinkedList<DealerItem> m_DealItemList;
};

class CItemManager  
{
	CYHHashTable<DealerData>	m_DealerTable;
	DWORD m_Key; //炼钦, 碍拳, 殿鞭诀矫 肺弊 巢辨 锭 鞍篮 炼钦捞菌促绰 巴阑 钎矫窍扁 困秦.

	DWORD MakeNewKey();
	

public:
	CItemManager();
	virtual ~CItemManager();
	GETINSTANCE(CItemManager);
	void LoadDealerItem();
	DealerData * GetDealer(DWORD dwDealerIdx);
	int DivideItem( CPlayer* pPlayer, WORD ItemIdx,  POSTYPE FromPos, POSTYPE ToPos, DURTYPE FromDur, DURTYPE ToDur);
	int CombineItem( CPlayer* pPlayer, WORD ItemIdx, POSTYPE FromPos, POSTYPE ToPos, DURTYPE & FromDur, DURTYPE & ToDur);
	int MoveItem( CPlayer * pPlayer, WORD FromItemIdx, POSTYPE FromPos, WORD ToItemIdx, POSTYPE& ToPos);
	int DiscardItem(CPlayer * pPlayer, POSTYPE whatPos, WORD whatItemIdx, WORD whatItemNum);
	
	void SendErrorMsg( CPlayer * pPlayer, MSG_ITEM_ERROR * msg, int msgSize, int ECode);
	void SendAckMsg( CPlayer * pPlayer, MSGBASE * msg, int msgSize);
	void SendGuildErrorMsg( CPlayer * pPlayer, BYTE Protocol, int ECode );

	//	int ObtainItem(CPlayer * pPlayer, ITEMOBTAINARRAYINFO * pArrayInf, WORD whatItemIdx, WORD whatItemNum);
	int ObtainItemEx(CPlayer * pPlayer, ITEMOBTAINARRAYINFO * pArrayInfo, WORD whatItemIdx, WORD whatItemNum, WORD * EmptyCellPos, WORD EmptyCellNum, WORD ArrayInfoUnitNum);

	int SellItem( CPlayer* pPlayer, POSTYPE whatPos, WORD wSellItemIdx, DURTYPE sellItemDur, DWORD DealerIdx );
	int BuyItem( CPlayer* pPlayer, WORD buyItemIdx, WORD buyItemNum, DWORD DealerIdx );
	
	int MonsterObtainItem(CPlayer * pPlayer, WORD obtainItemIdx, DWORD dwFurnisherIdx);
	int CheatObtainItem( CPlayer* pPlayer, WORD obtainItemIdx, WORD ItemNum );

	static void ObtainItemDBResult(CPlayer * pPlayer, WORD ArrayID);
	static void BuyItemDBResult(CPlayer * pPlayer, WORD ArrayID );	
	static void DivideItemDBResult(CPlayer* pPlayer, WORD ArrayID);


	void NetworkMsgParse( BYTE Protocol, void* pMsg );
	void LoadMixList();
	void LoadMixResultItemInfo(CMHFile * fp, ITEM_MIX_RES * pResInfo);
	void LoadReinforceItemInfo();

	void LoadItemList();
	void ReloadItemList();
	void SetItemInfo(WORD ItemIdx,ITEM_INFO* pInfo,CMHFile* pFile);
	ITEM_INFO * GetItemInfo( WORD wItemIdx );
	ITEM_MIX_INFO * GetMixItemInfo(WORD wItemIdx);
	ITEM_REINFORCE_INFO * GetReinforceItemInfo(WORD wItemIdx);

	int UseItem( CPlayer* pPlayer, WORD TargetPos, WORD wItemIdx );
	int UpgradeItem(CPlayer* pPlayer, WORD & TargetItemIdx, POSTYPE TargetPos, WORD MatItemIdx, POSTYPE MatItemPos);
	int MixItem(CPlayer* pPlayer, WORD wBasicItemIdx, POSTYPE BasicItemPos, POSTYPE ResultIdx, MATERIAL_ARRAY * pMaterialArray, WORD wMaterialNum);
	int ReinforceItem(CPlayer* pPlayer, WORD wTargetItemIdx, POSTYPE TargetPos, ITEM_JEWEL_POS_EX * pJewelInfo, WORD wJewelNum);
	void ReinforceItemDBResult(CPlayer * pPlayer, WORD wItemIdx, POSTYPE TargetPos, ITEM_OPTION_INFO * pOptionInfo);
	int DissolveItem(CPlayer* pPlayer, WORD wTargetItemIdx, POSTYPE TargetPos, WORD wOptionIdx);

	BOOL EnoughDissolveSpace(CPlayer * pPlayer, WORD wOptionIdx, LEVELTYPE ItemLevel, WORD wAbilityGrade, MATERIAL_ARRAY * pJewelArray, WORD & wJewelNum);
	BOOL EnoughDissolveInvSpace(CPlayer * pPlayer, WORD wJewelNum);
	
	BOOL EnoughMixMaterial(WORD needItemIdx, WORD needItemNum, MATERIAL_ARRAY * pMaterialArray, WORD wMaterialNum);

	ITEMOBTAINARRAYINFO *	Alloc(CPlayer * pPlayer, BYTE c, BYTE p, DWORD dwObjectID, DWORD dwFurnisherIdx, WORD wType, WORD ObtainNum, DBResult CallBackFunc);
	void Free(CPlayer * pPlayer, ITEMOBTAINARRAYINFO * info);
	BOOL IsDupItem( WORD wItemIdx );
	BOOL IsOptionItem( WORD wItemIdx, WORD wDurability );
	
	BOOL ItemMoveUpdateToDBbyTable(CPlayer* pPlayer, DWORD dwfromDBIdx, WORD dwfromIconIdx,  POSTYPE frompos, DWORD dwtoDBIdx, POSTYPE topos);
	void ItemInsertbyTable(CPlayer* pPlayer, WORD wItemIdx, DURTYPE Durability, POSTYPE bPosition, DWORD dwKey);
	void ItemUpdatebyTable(CPlayer* pPlayer, DWORD dwDBIdx, WORD wIconIdx, DURTYPE FromDur, POSTYPE Position, POSTYPE QuickPosition);
	const ITEMBASE * GetItemInfoAbsIn(CPlayer* pPlayer, POSTYPE Pos);

	void ItemMoveLog(POSTYPE FromPos, POSTYPE ToPos, CPlayer* pPlayer, ITEMBASE* pItem);
	void AddGuildItemOption(POSTYPE FromPos, POSTYPE ToPos, CPlayer* pPlayer);
	void RemoveGuildItemOption(POSTYPE ToPos, const ITEMBASE* pItem, CPlayer* pPlayer);
	
private:
	WORD GetCanBuyNumInSpace(CPlayer * pPlayer, CItemSlot * pSlot, WORD whatItemIdx, WORD whatItemNum, WORD * EmptyCellPos, WORD & EmptyCellNum);
	WORD GetCanBuyNumInMoney(CPlayer * pPlayer, WORD butNum, MONEYTYPE Price);
	BOOL CanMovetoMunpaWare(POSTYPE FromPos, POSTYPE ToPos, CPlayer* pPlayer);
	BOOL CanbeMoved(WORD wIconIdx,POSTYPE pos, CPlayer* pPlayer);
	BOOL CanEquip(ITEM_INFO* pInfo, CPlayer* pPlayer);
	void ClearQuickPos(ITEMBASE* pItem, POSTYPE ToPos);

	CYHHashTable<ITEM_INFO> m_ItemInfoList;
	CYHHashTable<ITEM_MIX_INFO> m_MixItemInfoList;
	CYHHashTable<ITEM_REINFORCE_INFO> m_ReinforceItemInfoList;
	CMemoryPoolTempl<ITEMOBTAINARRAYINFO> m_ItemArrayPool;
	CIndexGenerator		m_ArrayIndexCreator;

public:
	// jsd quest
	int		ObtainItemFromQuest( CPlayer* pPlayer, DWORD dwItemKind, DWORD dwItemNum );
	WORD	GetWeaponKind( WORD wWeapon );
	void	GetItemKindType( WORD wItemIdx, WORD* wKind, WORD* wType );

	int		ObtainItemFromChangeItem( CPlayer* pPlayer, WORD wItemKind, WORD wItemNum );
};


#endif // !defined(AFX_ITEMMANAGER_H__B48BE6A4_2998_4459_B958_995D81EAAF1E__INCLUDED_)

⌨️ 快捷键说明

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