📄 itemmanager.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 + -