74 lines
3.6 KiB
Objective-C
74 lines
3.6 KiB
Objective-C
// sonador 10.2.1 팻 시스템 구현
|
|
#pragma once
|
|
#include "SGamePet.h"
|
|
#include <deque>
|
|
|
|
/**------------------------------------------------------------------
|
|
@class SGameLocalPet
|
|
@brief Avatar class for local player's pet
|
|
@author sonador
|
|
-------------------------------------------------------------------*/
|
|
class SGameLocalPet : public SGamePet
|
|
{
|
|
public:
|
|
|
|
enum DISTANCE_TYPE
|
|
{
|
|
DISTANCE_3 = 3 * GameRule::DEFAULT_UNIT_SIZE,
|
|
DISTANCE_15 = 15 * GameRule::DEFAULT_UNIT_SIZE,
|
|
DISTANCE_50 = 50 * GameRule::DEFAULT_UNIT_SIZE,
|
|
DISTANCE_150 = 150 * GameRule::DEFAULT_UNIT_SIZE,
|
|
};
|
|
|
|
SGameLocalPet( int nPetID );
|
|
virtual ~SGameLocalPet();
|
|
virtual void Destroy(); /// 2010.10.13 - prodongi
|
|
virtual bool Process( DWORD time, unsigned long procBitSet = 0 ); ///< process local pet
|
|
virtual void OnInput( class SGameInput* input ); ///< process game input data
|
|
virtual void ReqTakeItem( AR_HANDLE handle ); ///< process to acquire item
|
|
virtual void ReqMove( AR_HANDLE handle, const ArPosition& target, bool speedSync = true, bool chase = false ); ///< process moving request
|
|
/// 2010.10.14 - prodongi
|
|
virtual void ReqCast( AR_HANDLE target, int skillID, int skillLv, K3DVector const& targetPos ); ///< process casting request
|
|
virtual void ReqCancelAction(); ///< process canceling action request
|
|
virtual void CmdIdle(); ///< (스크립트 대응)Idle 명령: 소환자와의 거리 검사 후 이동여부 결정
|
|
virtual void CmdMove(); ///< (스크립트 대응)Move 명령: 이동
|
|
virtual void InputCmd_MoveToFitPosition( bool syncWithMasterPlayer = false, bool immediately = false ); ///< locate pet at the best position
|
|
virtual void SetAutoPickItemMode( bool activate ) { m_bPickItemMode = activate; } ///< 팻 자동 줍기 모드 설정 {2.1.2.4.3}
|
|
virtual bool IsAutoPickItemMode() { return m_bPickItemMode; } ///< 팻 자동 줍기 모드 활성화 여부 {2.1.2.4.3}
|
|
virtual void SetAutoPickItemDistanceByMeter( float meter ); ///< 팻 자동 줍기 거리 설정( meter ) {2.1.2.4.3}
|
|
|
|
void DeleteItemFromIgnoreQueue(AR_HANDLE id);
|
|
|
|
private:
|
|
|
|
// internal method
|
|
virtual const char* getClassName() { return "SGamePet"; } ///< for type identification
|
|
bool GetFitPosition( K3DVector& out ); ///< find fit position
|
|
AR_UNIT GetSize( SGameObject* object ); ///< calculate object's real radius
|
|
bool HasStateHeld(); ///< 현재 HOLD 된 상태인가?
|
|
bool IsFarFrom( SGameAvatarEx* Target, DISTANCE_TYPE Type ); ///< 아바타와의 거리를 점검
|
|
void UpdateStateByScript(); ///< 현재 스테이트 설정에 따라 스크립트 호출
|
|
|
|
// member variables
|
|
DWORD m_dwUpdateTime; ///< time value for update
|
|
DWORD m_dwFindDetour; ///< time value for rarely finding path
|
|
DWORD m_dwFindDetourTick; ///< time interval for rarely finding path
|
|
DWORD m_dwBeginScriptTime; ///< 스크립트 호출 주기 검사 시작 값
|
|
DWORD m_dwCallScriptTime; ///< 스크립트 호출 주기
|
|
AR_UNIT m_arMySize; ///< size of this pet
|
|
bool m_bPickItemMode; ///< 자동 아이템 줍기
|
|
float m_fPickItemDistance; ///< 자동 아이템 줍기 가능 거리 // sonador #2.1.2.4.3 팻 조작 UI 연동
|
|
K3DVector m_vMasterLastPos; // 주인님 마지막 좌표
|
|
|
|
struct IgnoredItem
|
|
{
|
|
DWORD m_dwIgnoredTime;
|
|
DWORD m_dwLastAttemptedTime;
|
|
AR_HANDLE m_hItem;
|
|
int m_nTryCount;
|
|
};
|
|
|
|
DWORD m_dwCurrentTime;
|
|
DWORD m_dwItemPickCommandTime;
|
|
std::deque<IgnoredItem> m_queueIgnoredItems; ///< 자동 아이템 줍기 기능 관련 - 못 줍는 아이템의 경우 무시한다. 10분유지
|
|
}; |