2024-12-21 10:04:04 +08:00
# pragma once
# include "DnObserver.h"
# include "SmartPtrDef.h"
# include "DNTableFile.h"
class CPacketCompressStream ;
namespace BubbleSystem
{
class CDnBubble ;
class IDnConditionChecker ;
class IDnBubbleEventHandler ;
//------------------------------------------------------------------------------
/**
<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ý <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŭ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
<EFBFBD> <EFBFBD> Ŭ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŭ <EFBFBD> <EFBFBD> <EFBFBD> ̾ <EFBFBD> Ʈ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ӽ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> CDnPlayerActor <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϳ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϳ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ǵ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ÷ <EFBFBD> <EFBFBD> ̾ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȹ <EFBFBD> <EFBFBD> , <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <EFBFBD> Ҹ <EFBFBD> <EFBFBD> <EFBFBD> ó <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
ij <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ٸ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ִ <EFBFBD> .
<EFBFBD> <EFBFBD> <EFBFBD> Ŀ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ε <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> װ <EFBFBD> <EFBFBD> ȴ ٸ <EFBFBD> CDnMonsterActor <EFBFBD> ʿ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ó <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
*/
//------------------------------------------------------------------------------
class CDnBubbleSystem : public CDnObserver
{
public :
struct S_CREATE_BUBBLE
{
int iBubbleTypeID ;
int iIconIndex ;
float fDurationTime ;
int iServerBubbleCount ; // Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֱ<EFBFBD> <20> <> <EFBFBD> ؼ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
S_CREATE_BUBBLE ( void ) : iBubbleTypeID ( 0 ) , iIconIndex ( 0 ) , fDurationTime ( 0.0f ) , iServerBubbleCount ( 0 ) { } ;
} ;
// <20> ܺο <DCBA> <CEBF> <EFBFBD> <20> <> ȸ<EFBFBD> <C8B8> <20> <> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
struct S_BUBBLE_INFO
{
int iBubbleTypeID ;
int iCount ;
int iIconIndex ;
float fDurationTime ;
float fRemainTime ;
S_BUBBLE_INFO ( void ) : iBubbleTypeID ( 0 ) , iCount ( 0 ) , iIconIndex ( 0 ) , fDurationTime ( 0.0f ) , fRemainTime ( 0.0f ) { } ;
} ;
private :
// <20> <> <20> <> <EFBFBD> <EFBFBD> <20> ý<EFBFBD> <C3BD> <EFBFBD> <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
DnActorHandle m_hActor ;
// <20> 켱 <20> <> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ߿<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ȴ<EFBFBD> .
//vector<CDnBubble*> m_vlpBubbles;
typedef map < int , deque < CDnBubble * > > BubblesByTypeID ;
typedef BubblesByTypeID : : iterator BubblesByTypeID_iter ;
BubblesByTypeID m_mapBubblesByTypeID ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <CCBA> <EFBFBD> <20> <> <EFBFBD> ǵ<EFBFBD> <20> ̺<EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ƴ<EFBFBD> <C6B3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ü
struct S_DEFINED_BUBBLE_EVENT
{
int iTableID ; // <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> ID
vector < IDnConditionChecker * > vlpConditions ;
vector < IDnBubbleEventHandler * > vlpEventHandlers ;
S_DEFINED_BUBBLE_EVENT ( void ) : iTableID ( 0 ) { } ;
~ S_DEFINED_BUBBLE_EVENT ( void ) ;
} ;
// <20> <> <EFBFBD> ̺<EFBFBD> ID <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̺<EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD>
//map<int, S_DEFINED_BUBBLE_EVENT*> m_mapDefinedBubbleEvent;
vector < S_DEFINED_BUBBLE_EVENT * > m_vlpDefinedBubbleEvent ;
// <20> <> <20> ̺<EFBFBD> Ʈ Ÿ<> Ժ<EFBFBD> <D4BA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ̺<EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
// <20> ̺<EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ܺ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ϳ <EFBFBD> <CDBF> <EFBFBD> <20> <> <EFBFBD> ǵǴ<C7B5> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ƴϹ Ƿ<CFB9>
// <20> ̷<EFBFBD> <CCB7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ؼ<EFBFBD> <20> ڵ忡 <20> ھ Ƴ<DABE> <C6B3> ´ <EFBFBD> .
typedef multimap < int , S_DEFINED_BUBBLE_EVENT * > DefinedByEventMMap ;
typedef DefinedByEventMMap : : iterator DefinedByEventMMap_iter ;
DefinedByEventMMap m_mmapDefinedByEvent ;
// <20> <> <EFBFBD> <EFBFBD> Ÿ<> Ժ<EFBFBD> <D4BA> <EFBFBD> <20> Ҹ<EFBFBD> <D2B8> <EFBFBD> ó<> <C3B3> <EFBFBD> Ǵ<EFBFBD> <20> ̺<EFBFBD> Ʈ <20> ڵ鷯 <20> <> <EFBFBD> <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <20> Ҹ<EFBFBD> <D2B8> <EFBFBD> <20> ̺<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <CCBA> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> <20> <> <EFBFBD> ǿ<EFBFBD> <20> <> <EFBFBD> ؼ<EFBFBD> <20> ڵ忡<DAB5> <E5BFA1> <20> <> <EFBFBD> <EFBFBD> <20> <> ġ<EFBFBD> Ѵ <EFBFBD> .
//map<int, IDnBubbleEventHandler*> m_mapBubbleRemoveEventHandlers;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> .
map < int , vector < int > > m_mapBubbleStateBlowsByBubbleType ;
// <20> <> <EFBFBD> <EFBFBD> Ÿ<> Ժ<EFBFBD> <D4BA> <EFBFBD> <20> Ҹ<EFBFBD> <D2B8> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
// Ÿ<> Ժ<EFBFBD> <D4BA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> ȿ<> <C8BF> .
protected :
void _CreateBubble ( const S_CREATE_BUBBLE & Info ) ;
CDnBubble * _CreateNewBubble ( const S_CREATE_BUBBLE & Info ) ;
void _OnCreatedBubble ( CDnBubble * pCreatedBubble ) ;
//void _OnRemoveBubble( CDnBubble* pBubbleToRemove );
void _OnRemovedBubbles ( int iBubbleTypeID , int iCount ) ;
int _GetRelatedEventMessageType ( int iConditionType ) ;
void _OnCreateEventHandler ( DNTableFileFormat * pBubbleTable , int iBubbleTableID , IDnBubbleEventHandler * pEventHandler , const char * pArgument ) ;
public :
CDnBubbleSystem ( void ) ;
virtual ~ CDnBubbleSystem ( void ) ;
// TODO: <20> <> <EFBFBD> <EFBFBD> ü<EFBFBD> <C3BC> <20> ʿ<EFBFBD> <CABF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ܺο <DCBA> <CEBF> <EFBFBD> <20> ´ <DEB4> . <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 丮, <20> <> ų <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> ..
void Initialize ( DnActorHandle hActor ) ;
// TODO: ij<> <C4B3> <EFBFBD> Ͱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϰų<CFB0> <20> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> ٽ<EFBFBD> <20> ʱ<EFBFBD> ȭ <20> ؾ<EFBFBD> <20> <> .
void Clear ( void ) ;
// <20> <> <EFBFBD> ڷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> ID <20> <> <20> ش<EFBFBD> <D8B4> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
int GetBubbleCountByTypeID ( int iBubbleTypeID ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> Ǿ<EFBFBD> <C7BE> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
void GetAllAppliedBubbles ( /*OUT*/ vector < S_BUBBLE_INFO > & vlBubbleInfos ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD>
void AddBubble ( const S_CREATE_BUBBLE & Info ) ;
// Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
void AddBubbleAndCountRevision ( const S_CREATE_BUBBLE & Info ) ;
void RevisionBubbleCount ( const S_CREATE_BUBBLE & Info ) ;
// <20> <> <EFBFBD> ڷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> ID <20> <> <20> ش<EFBFBD> <D8B4> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ŭ <20> <> <EFBFBD> <EFBFBD> .
void RemoveBubbleByTypeID ( int iBubbleTypeID , int iRemoveCount ) ;
// <20> <> <EFBFBD> ڷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> ID <20> <> <20> ش<EFBFBD> <D8B4> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
void RemoveAllBubbleByTypeID ( int iBubbleTypeID ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
void RemoveAllBubbles ( bool bHandleRemoveEvent = true ) ;
// <20> <> <EFBFBD> <EFBFBD> Ÿ<> Կ<EFBFBD> <20> ش<EFBFBD> <D8B4> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ü <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
CDnBubble * GetBubble ( int iBubbleTypeID ) ;
// Ư<> <C6AF> Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ӽð<D3BD> <C3B0> <EFBFBD> <20> <> <EFBFBD> ڷ<EFBFBD> <20> ־<EFBFBD> <D6BE> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
void SetDurationTime ( int iBubbleTypeID , float fDurationTime ) ;
// <20> <> <EFBFBD> μ<EFBFBD> <CEBC> <EFBFBD> ~
void Process ( LOCAL_TIME LocalTime , float fDelta ) ;
// from CDnObserver
virtual void OnEvent ( boost : : shared_ptr < : : IDnObserverNotifyEvent > & pEvent ) ;
// <20> <> <20> <> <EFBFBD> <EFBFBD> <20> ý<EFBFBD> <C3BD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ڵ<EFBFBD> <DAB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
DnActorHandle GetHasActor ( void ) { return m_hActor ; } ;
# ifdef _GAMESERVER
// CDnAddStateEffectHandler <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȣ <> <C8A3> <EFBFBD> <EFBFBD> .
void AddBubbleStateBlow ( int iBubbleTypeID , int iBlowID ) ;
// CDnRemoveStateEffectHandler <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȣ <> <C8A3> <EFBFBD> <EFBFBD> .
void RemoveBubbleStateBlow ( int iBubbleTypeID ) ;
# else
void CreateBubbleFromPacketStream ( : : CPacketCompressStream * pStream ) ;
void RefreshBubbleDurationTimeFromPacketStream ( : : CPacketCompressStream * pStream ) ;
# endif // #ifdef _GAMESERVER
} ;
} // namespace BubbleSystem