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

85 lines
2.1 KiB
C++

// sonador #2.1.2.4.3 팻 조작 UI 연동
#pragma once
#include <mmo/ArType.h>
#include "SGameUIMgr.h"
// sonador 10.2.1 팻 시스템 구현
struct DATA_PET
{
DATA_PET() : pet_handle( 0 ), code( 0 ), pet_avatar( 0 )
{
::memset( name, 0, sizeof( name ) );
}
AR_HANDLE pet_handle;
AR_HANDLE cage_handle;
int code;
char name[ 19 ];
class SGameAvatarEx* pet_avatar;
};
class SPetMgr : public SGameUIMgr
{
public:
/// 생성자
SPetMgr();
/// 소멸자
virtual ~SPetMgr();
/// process
virtual void Process( DWORD dwTime );
/// 팻 정보 초기화
virtual void ResetInfo();
/// empty ?
virtual bool IsEmpty() const { return m_vPetDataList.empty(); }
/// 현재 소환된 팻 정보를 획득
const DATA_PET& GetSummonPetData() const;
/// 로컬 팻 여부 확인
DATA_PET* IsLocalPet( AR_HANDLE hPetHandle ); // sonador 10.2.1 팻 시스템 구현
/// 소환된 팻 여부 확인
SGameAvatarEx* IsSummonPet( AR_HANDLE hPetHandle );
/// 로컬 팻우리 여부 확인
DATA_PET* IsLocalPetCage( AR_HANDLE hPetCageHandle );
/// 로컬 플레이어의 팻 아바타를 등록
void AddPet( class SGameAvatarEx* pet, struct SMSG_ENTER* enterMsg );
/// 로컬 플레이어의 팻 아바타를 삭제
void RemovePet( AR_HANDLE hPetHandle );
/// SMSG_ADD_PET_INFO 처리
void OnMsgAddPetInfo( struct SMSG_ADD_PET_INFO* msg );
/// SMSG_REMOVE_PET_INFO 처리
void OnMsgRemovePetInfo( struct SMSG_REMOVE_PET_INFO* msg );
private:
/// 팻 정보 컨테이너 타입
typedef std::vector< DATA_PET > pet_data_vector_t;
/// 팻 정보 컨테이너
pet_data_vector_t m_vPetDataList;
/// 현재 소환된 팻 정보
DATA_PET m_SummonPet;
/// 팻 정보 검색용 함수자
struct PetDataFinder { PetDataFinder( AR_HANDLE handle ) : mHandle( handle ) {} AR_HANDLE mHandle; bool operator()( const DATA_PET& petData ) const {
return mHandle == petData.pet_handle;
} };
/// 팻 우리 검색용 함수자
struct PetCageFinder { PetCageFinder( AR_HANDLE handle ) : mHandle( handle ) {} AR_HANDLE mHandle; bool operator()( const DATA_PET& petData ) const {
return mHandle == petData.cage_handle;
} };
};