265 lines
8.7 KiB
C++
265 lines
8.7 KiB
C++
#pragma once
|
|
|
|
#include <mmo/ArType.h>
|
|
//#include "SUIWnd.h"
|
|
#include "SGameMessage.h"
|
|
#include "SUIDefine.h"
|
|
|
|
class SUIDisplayInfo;
|
|
class SInventorySlot;
|
|
class SShopSlot_CRAFT;
|
|
|
|
//
|
|
// 상점
|
|
//
|
|
|
|
// Azia Mafia New Craft Systeme
|
|
class SUIShopWnd_CRAFT : public SUIWnd
|
|
{
|
|
public:
|
|
|
|
|
|
SUIShopWnd_CRAFT( class SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo );
|
|
virtual ~SUIShopWnd_CRAFT();
|
|
|
|
|
|
virtual bool InitControls( KPoint kPos );
|
|
virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true );
|
|
virtual bool InitData( bool bReload = false );
|
|
virtual void* Perform( KID id, KArg& msg );
|
|
virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam );
|
|
virtual void ProcMsgAtStatic( SGameMessage* pMsg );
|
|
|
|
private:
|
|
SUIDisplayInfo* m_pDisplayInfo;
|
|
|
|
/// 아이템 슬롯 정보 표현용 control들의 ID
|
|
struct SLOT_INFO_CRAFT
|
|
{
|
|
std::string strIconControl;
|
|
std::string strStaticNameControl;
|
|
std::string strStaticCountControl;
|
|
std::string strStaticPriceControl;
|
|
std::string strStaticUnitControl;
|
|
};
|
|
SLOT_INFO_CRAFT* m_pSlotControlIDs;
|
|
int m_nSlotStartIndex; ///< 첫번째 슬롯의 아이템 인덱스 ( 스크롤 시킴에 따라 바뀐다. )
|
|
int m_nSlotCountY; ///< 현재 보여지는 슬롯들의 세로 갯수 ( 리사이즈 시킴에 따라 바뀐다. )
|
|
|
|
int m_nScrollBarTopOffset; ///< 스크롤바 resize의 기준 offset
|
|
int m_nScrollBarBottomOffset;
|
|
|
|
UI_ITEM_CATEGORY m_CurrentCategory; ///< 현재 선택된 아이템 분류
|
|
int m_nCurrentSelect; ///< 현재 선택된 아이템 인덱스 (없으면 -1)
|
|
std::vector<SInventorySlot*> m_vecSellItemList;
|
|
|
|
std::vector<SShopSlot_CRAFT*> m_vecBuyItemList;
|
|
|
|
void RefreshScrollBar();
|
|
void RefreshSlots();
|
|
void RefreshSelection();
|
|
void RefreshItems();
|
|
void RefreshGold();
|
|
void RefreshWeight();
|
|
|
|
void RefreshSelectionCraft();
|
|
|
|
void SelectItemSendToCraft();
|
|
void MoveShoppingKartWindow();
|
|
void SetBuyModeShoppingKartWindow();
|
|
|
|
int GetSlotSellItemIndex( int nSlotControlNum ) const;
|
|
int GetSlotBuyItemIndex( int nSlotControlNum ) const;
|
|
SInventorySlot* GetSlotSellItem( int nSlotControlNum ) const;
|
|
SShopSlot_CRAFT* GetSlotBuyItem( int nSlotControlNum ) const;
|
|
|
|
bool IsBuyMode() const;
|
|
int GetSlotControlNum( const char* szSlotControlID ) const;
|
|
|
|
|
|
bool m_bCtrlKey;
|
|
bool m_bShiptKey;
|
|
};
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// LA KART
|
|
/// </summary>
|
|
|
|
class SUIShopKartWnd_CRAFT : public SUIWnd
|
|
{
|
|
public:
|
|
SUIShopKartWnd_CRAFT(SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo);
|
|
virtual ~SUIShopKartWnd_CRAFT();
|
|
|
|
virtual bool InitControls(KPoint kPos);
|
|
virtual bool InitData(bool bReload = false);
|
|
virtual void* Perform(KID id, KArg& msg);
|
|
virtual void PumpUpMessage(LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam);
|
|
virtual void ProcMsgAtStatic(SGameMessage* pMsg);
|
|
virtual void OnNotifyUIWindowOpen(bool bOpen, bool bLimitWnd = true);
|
|
|
|
private:
|
|
SUIDisplayInfo* m_pDisplayInfo;
|
|
|
|
/// 아이템 슬롯 정보 표현용 control들의 ID
|
|
struct SLOT_INFO
|
|
{
|
|
std::string strIconControl;
|
|
std::string strStaticNameControl;
|
|
std::string strStaticCountControl;
|
|
std::string strStaticPriceControl;
|
|
std::string strStaticUnitControl;
|
|
};
|
|
SLOT_INFO* m_pSlotControlIDs;
|
|
int m_nSlotStartIndex; ///< 첫번째 슬롯의 아이템 인덱스 ( 스크롤 시킴에 따라 바뀐다. )
|
|
|
|
bool m_bIsShop;
|
|
bool m_bBuyMode; ///< 구입 or 판매
|
|
|
|
bool m_bCtrlKey;
|
|
bool m_bShiptKey;
|
|
|
|
int m_nCurrentSelect;
|
|
|
|
bool m_bAct; // 카트에 구분 : 기본 FALSE, 구입/판매 TRUE;
|
|
DWORD m_PrevProcessTime;
|
|
|
|
struct KART_BUYITEM
|
|
{
|
|
ItemBase::ItemCode ItemID;
|
|
int nSummonID;
|
|
int nEnhance;
|
|
int nLevel;
|
|
int nEndurance;
|
|
int nFlag;
|
|
count_t nItemCount;
|
|
int nSocket[ItemBase::MAX_SOCKET_NUMBER];
|
|
int nIndex;
|
|
int remain_time;
|
|
char elemental_effect_type;
|
|
int elemental_effect_remain_time;
|
|
int elemental_effect_attack_point;
|
|
int elemental_effect_magic_point;
|
|
int ethereal_durability; // 노점bintitle
|
|
ItemBase::ItemCode appearanceCode;
|
|
TS_ITEM_BASE_INFO::AwakenOption stAwakenOption;
|
|
TS_ITEM_BASE_INFO::RANDOM_OPTION stRandomOption;
|
|
int nAdditionalItemEffect; // Fraun Sky Accessories 7/12/2025
|
|
|
|
KART_BUYITEM(ItemBase::ItemCode id,
|
|
int _nSummonID,
|
|
count_t _nItemCount,
|
|
int _nEnhance = 0,
|
|
int _nLevel = 0,
|
|
int _nFlag = 0,
|
|
int _nEndurance = 0,
|
|
int* pnSocket = NULL,
|
|
int _nIndex = 0,
|
|
int _remain_time = 0,
|
|
char elemental_effect_type_ = 0,
|
|
int elemental_effect_remain_time_ = 0,
|
|
int elemental_effect_attack_point_ = 0,
|
|
int elemental_effect_magic_point_ = 0,
|
|
int ethereal_durability_ = 0,
|
|
ItemBase::ItemCode appearanceCode_ = 0,
|
|
TS_ITEM_BASE_INFO::AwakenOption* pAwakenOption = NULL, // 아 짜증나... 위에 디폴트 인자 때문에 어쩔수없이 포인터로... 코드 꼬라지 보소 ㅠㅠ (lenahyang)
|
|
TS_ITEM_BASE_INFO::RANDOM_OPTION* pRandomOption = NULL,
|
|
int nAdditionalItemEffect = 0 // Fraun Sky Accessories 7/12/2025
|
|
|
|
)
|
|
: ItemID(id),
|
|
nSummonID(_nSummonID),
|
|
nItemCount(_nItemCount),
|
|
nEnhance(_nEnhance),
|
|
nLevel(_nLevel),
|
|
nFlag(_nFlag),
|
|
nEndurance(_nEndurance),
|
|
nIndex(_nIndex),
|
|
remain_time(_remain_time),
|
|
elemental_effect_type(elemental_effect_type_),
|
|
elemental_effect_remain_time(elemental_effect_remain_time_),
|
|
elemental_effect_attack_point(elemental_effect_attack_point_),
|
|
elemental_effect_magic_point(elemental_effect_magic_point_),
|
|
ethereal_durability(ethereal_durability_), // bintitle
|
|
appearanceCode(appearanceCode_)
|
|
{
|
|
if (pnSocket)
|
|
memcpy(nSocket, pnSocket, sizeof(nSocket));
|
|
else
|
|
memset(nSocket, 0, sizeof(nSocket));
|
|
|
|
if (pAwakenOption)
|
|
memcpy(&stAwakenOption, pAwakenOption, sizeof(stAwakenOption));
|
|
|
|
if (pRandomOption)
|
|
memcpy(&stRandomOption, pRandomOption, sizeof(stRandomOption));
|
|
}
|
|
|
|
TS_ITEM_BASE_INFO::AwakenOption* GetAwakenOption(void) { return &stAwakenOption; }
|
|
TS_ITEM_BASE_INFO::RANDOM_OPTION* GetRandomOption(void) { return &stRandomOption; }
|
|
};
|
|
|
|
struct KART_SELLITEM
|
|
{
|
|
AR_HANDLE handle;
|
|
count_t nItemCount;
|
|
int nIndex;
|
|
|
|
KART_SELLITEM(AR_HANDLE _handle, count_t _nItemCount, int _nIndex)
|
|
: handle(_handle), nItemCount(_nItemCount), nIndex(_nIndex) { }
|
|
};
|
|
typedef std::vector<KART_BUYITEM> KARTBUYITEM_VECTOR;
|
|
typedef std::vector<KART_SELLITEM> KARTSELLITEM_VECTOR;
|
|
|
|
KARTSELLITEM_VECTOR m_KartSellItemsVector; ///< 현재 표시중인 판매할 아이템 벡터
|
|
KARTBUYITEM_VECTOR m_KartBuyItemsVector; ///< 현재 표시중인 구입할 아이템 벡터
|
|
|
|
/// 카트 추가 예약 상태
|
|
enum KART_RESERVE
|
|
{
|
|
KART_NO_RESERVE,
|
|
KART_BUYITEM_RESERVE,
|
|
KART_SELLITEM_RESERVE,
|
|
};
|
|
KART_RESERVE m_ReserveState;
|
|
ItemBase::ItemCode m_ReserveBuyItemID; ///< 카트 추가 예약 구입 아이템
|
|
AR_HANDLE m_ReserveSellItemHandle; ///< 카트 추가 예약 판매 아이템
|
|
|
|
SUIShopKartWnd_CRAFT::KARTBUYITEM_VECTOR::iterator GetBuyItem(ItemBase::ItemCode ItemID);
|
|
SUIShopKartWnd_CRAFT::KARTSELLITEM_VECTOR::iterator GetSellItem(AR_HANDLE hItem);
|
|
|
|
void AddBuyItem(const KART_BUYITEM& itemInfo);
|
|
void AddBuyItem(ItemBase::ItemCode ItemID , count_t nItemCount, ItemBase::ItemCode ItemID1, int nCount1, ItemBase::ItemCode ItemID2, int nCount2, ItemBase::ItemCode ItemID3, int nCount3 , ItemBase::ItemCode ItemID4, int nCount4, ItemBase::ItemCode ItemID5, int nCount5, ItemBase::ItemCode ItemID6, int nCount6, ItemBase::ItemCode ItemID7, int nCount7, ItemBase::ItemCode ItemID8, int nCount8, ItemBase::ItemCode ItemID9, int nCount9);
|
|
void RemoveBuyItem(int nIndex);
|
|
void RemoveBuyItem(int nIndex, count_t nCount);
|
|
void AddSellItem(AR_HANDLE hItem, count_t nItemCount, int index);
|
|
|
|
void RemoveSellItem(int nIndex);
|
|
void RemoveSellItem(int nIndex, count_t nCount);
|
|
void RemoveAllKartItems();
|
|
|
|
void ShopBuyOrder();
|
|
void ShopSellOrder();
|
|
void StoreBuyOrder();
|
|
void ShopSellbyUser();
|
|
|
|
void RefreshScrollBar();
|
|
void RefreshSlots();
|
|
void RefreshGoldAndWeight();
|
|
|
|
void Process(DWORD time);
|
|
|
|
int GetSlotKartSellItemIndex(int nSlotControlNum) const;
|
|
int GetSlotKartBuyItemIndex(int nSlotControlNum) const;
|
|
const SUIShopKartWnd_CRAFT::KART_SELLITEM* GetSlotKartSellItem(int nSlotControlNum) const;
|
|
const SUIShopKartWnd_CRAFT::KART_BUYITEM* GetSlotKartBuyItem(int nSlotControlNum) const;
|
|
|
|
bool IsShop() const { return m_bIsShop; }
|
|
bool IsBuyMode() const { return m_bBuyMode; }
|
|
int GetSlotControlNum(const char* szSlotControlID) const;
|
|
void GetTotalPriceAndWeight(money_t& rTotalPrice, float& rTotalWeight) const;
|
|
|
|
void CheckWeightOver(int nItemCode, count_t& nItemCnt);
|
|
}; |