Files
2026-06-01 12:46:52 +02:00

134 lines
3.7 KiB
C++

#pragma once
#include <Windows.h>
//#include <vector>
#include <mmo/ArType.h>
#include "SNetMessage.h"
#include "SGameUIMgr.h"
////////////////////////////////////////////////////////////////////////////////////////////
//
/// Store Data
struct STORE_ITEM : public TS_SC_WATCH_BOOTH::TS_BOOTH_ITEM_INFO
{
STORE_ITEM()
{
}
STORE_ITEM( AR_HANDLE _handle,
ItemBase::ItemCode _code,
__int64 _count,
__int64 _gold,
int _level,
int _enhance,
int _endurance,
int _flag,
const int _socket[ ItemBase::MAX_SOCKET_NUMBER ],
int _remain_time,
char eet,
int eert,
int eeap,
int eemp,
int ed,
ItemBase::ItemCode ap,
AwakenOption* _pAwakenOption,
LPRANDOM_OPTION _pRandomOption,
int nSummonID,
int _additional_item_effect // Fraun Sky Accessories 7/12/2025
)
{
nIdx = 0;
handle = _handle;
uid = 0;
Code = _code;
endurance = _endurance;
count = _count;
gold = _gold;
enhance = _enhance;
Flag = _flag;
level = _level;
remain_time = _remain_time;
memcpy( socket, _socket, sizeof(socket) );
elemental_effect_type = eet;
elemental_effect_remain_time = eert;
elemental_effect_attack_point = eeap;
elemental_effect_magic_point = eemp;
ethereal_durability = ed; // bintitle
appearance_code = ap;
summon_id = nSummonID;
nAdditionalItemEffect = _additional_item_effect;
memcpy( &awakenoption, _pAwakenOption, sizeof(awakenoption) );
memcpy( &random_option, _pRandomOption, sizeof( random_option ) );
}
int nIdx;
};
/// 상점 윈도우의 슬롯 데이터를 보관. (다른것들과 공유할 필요가 없어 이곳에 정의함)
class SStoreMgr : public SGameUIMgr
{
public:
static SStoreMgr & GetInstance();
int AddItem( STORE_ITEM info );
void RemoveItem( ItemBase::ItemCode code );
void RemoveItem( AR_HANDLE handle );
STORE_ITEM GetBoothItemInfo( size_t idx );
void Clear();
void DecItemCount( AR_HANDLE hItem, count_t count );
void SetItemCount( AR_HANDLE hItem, count_t count );
XFlag< int > GetItemFlag( size_t idx ) const;
size_t GetListCount() const;
int GetEnhance( size_t idx ) const;
int GetLevel( size_t idx ) const;
int GetEndurance( size_t idx ) const;
ItemBase::ItemCode GetItemCode( size_t idx ) const;
count_t GetItemCount( size_t idx ) const;
money_t GetItemPrice( size_t idx ) const;
AR_HANDLE GetItemHandle( size_t idx ) const;
int GetItemRemainTime( size_t idx ) const;
int* GetItemSocket( size_t idx );
AR_HANDLE GetTargetHandle() const { return m_hHandle; }
void SetTargetHandle( AR_HANDLE h ) { m_hHandle = h; }
TS_ITEM_BASE_INFO::AwakenOption* GetAwakening( size_t idx );
TS_ITEM_BASE_INFO::LPRANDOM_OPTION GetRandomOption( size_t idx );
int GetSummonID( size_t idx );
// Fraun Sky Accessories 7/12/2025
int GetAdditionalItemEffect(size_t idx);
int GetItemElementalEffectType( size_t idx ) const ;
int GetItemElementalEffectRemainTime( size_t idx ) const ;
int GetItemElementalEffectAttackPoint( size_t idx ) const ;
int GetItemElementalEffectMagicPoint( size_t idx ) const ;
// bintitle 추가. 2010.03.17
int GetEtherealDurability( size_t idx ) const ;
void ChangeItemPrice( size_t idx, money_t nPrice );
void ChangeItemCount( size_t idx, count_t nCnt );
bool IsSellMode() const;
void SwitchStoreMode( bool bIsSellMode );
int GetItemAppearanceCode( size_t idx ) const; // 2012. 7. 26 - marine
private:
SStoreMgr() : m_bIsSellMode( true ), m_hHandle(0) {}
void arrangeIndex();
AR_HANDLE m_hHandle;
bool m_bIsSellMode;
std::vector< STORE_ITEM > m_vItemList;
};