Files
Leviathan/Client/Game/game/GameSystem/SGameSystem.h
T
2026-06-01 12:46:52 +02:00

657 lines
29 KiB
C++

#pragma once
#include "GameDefine.h"
//#include "Util.h"
struct DATA_CREATURE
{
AR_HANDLE card_handle;
AR_HANDLE summon_handle;
unsigned char idx;
char name[19];
int code; // 소환수 코드
int level;
int sp;
DATA_CREATURE()
: card_handle( NULL )
, summon_handle( NULL )
, idx( NULL )
, code( NULL )
, level( NULL )
, sp( NULL )
{
ZeroMemory( name, sizeof( name ) );
}
};
using std::string;
//-----------------------------------------------------------------------------------------------------------------
// 게임 시스템
//-----------------------------------------------------------------------------------------------------------------
class SGameSystem
{
public:
SGameSystem( class SGame* pGame );
~SGameSystem( void );
//Target 관련
void SetTarget( class SGameAvatarEx* pTarget, bool bChangeTargetFromSvr = false );
void SetTargetInfo_Player( SGameAvatarEx* const pTarget );
void SetTargetInfo_Npc( SGameAvatarEx* const pTarget );
void SetTargetInfo_Mob( SGameAvatarEx* const pTarget );
void SetTargetInfo_Summon( SGameAvatarEx* const pTarget );
void SetTargetInfo_Pet( SGameAvatarEx* const pTarget );
void SetTargetInfo_Field_Prop( SGameAvatarEx* const pTarget );
void SetTargetInfo_Skill_Prop( SGameAvatarEx* const pTarget );
void SetTargetInfo_Item( SGameAvatarEx* const pTarget ); void CheckTarget( AR_HANDLE leaveID );
class SGameAvatarEx* GetTarget( void );
bool IsTarget( AR_HANDLE handle );
class SContentsManager& GetContentsMgr( void ) { return *m_pContentsMgr; }
// Local player settings
class SGameAvatarEx* GetLocalPlayer( void );
void SetLocalPlayer( class SGameAvatarEx* );
bool IsLocalPlayer( AR_HANDLE handle ) const;
class SCreatureSlotMgr& GetCreatureSlotMgr() { return m_CreatureSlotMgr; }
class SInventoryMgr& GetInventoryMgr() { return m_InventoryMgr; }
class SSkillSlotMgr& GetSkillSlotMgr() { return m_SkillSlotMgr; }
char const* getLocalPlayerName( void );
bool isLocalPlayerName( char const* name );
int GetLocalPlayerPermission();
bool isMyGuild( int id ) const;
void SetLocalInven( void );
void CompleteRqChat( std::string& rq_chat, std::vector< std::string >& vString, bool bTarget );
// 아나 코드 정리 좀 하고 살자 ... lenahyang
//////////////////////////////////////////////////////////////////////////
/// NPC 관련
void AddClickNpc( AR_HANDLE Npc_handle )
{
for( unsigned int i(0); m_ClickNpcList.size()>i; i++ )
{
if( m_ClickNpcList[i] == Npc_handle )
return;
}
/// 2012.07.17 add 할 때마다 clear하면 왜 vector로 갖고 있나? - prodongi
m_ClickNpcList.clear();
m_ClickNpcList.push_back( Npc_handle );
}
/// 노점 관련
void AddClickStore( AR_HANDLE handle )
{
for( unsigned int i(0); m_ClickStoreList.size()>i; i++ )
{
if( m_ClickStoreList[i] == handle )
return;
}
m_ClickStoreList.clear();
m_ClickStoreList.push_back( handle );
}
//////////////////////////////////////////////////////////////////////////
//내것의 소환수 만 등록 한다.
//소환수 등록 삭제
void AddSummon ( class SGameAvatarEx * pSummon, struct SMSG_ENTER* pEnterMsg ); ///< 소환수 등록
void DelSummoon ( AR_HANDLE hCreature ); ///< 소환수 삭제
void LeaveSummon( AR_HANDLE hLeaveHandle );
void EvolutionSummon( struct SMSG_SUMMON_EVOLUTION* pMsg );
// sonador 10.2.1 팻 시스템 구현
/// 로컬 팻인가?
struct DATA_PET* IsLocalPet( AR_HANDLE hPetHandle );
/// 소환된 팻인가?
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 );
void AddSkillProp( class SGameAvatarEx* pSkillProp );
void LeaveSkillProp( AR_HANDLE hLeave );
void SetHideSkillProp();
AR_HANDLE GetSummonCreature(AR_HANDLE handle);
void CreateGuage(AR_HANDLE handle, bool bCreate);
//소환수 명령 관련
struct DATA_CREATURE * IsLocalCreature( AR_HANDLE handle );
SGameAvatarEx* IsSummonCreature( AR_HANDLE handle );
void SetCreatureBackDown( AR_HANDLE handle = 0 ); ///< nIndex == 0, All
void SetCreatureAttack ( class SGameAvatarEx * pTarget, AR_HANDLE handle = 0 ); ///< 소환수 전체, 일부 공격 설정
void SetCreatureCastCancel( AR_HANDLE handle ); ///< 소환수 캐스팅 캔슬
void SetCurSkill( int nSkillID );
bool isTrading() const; /// 2012.05.17 거래 중인가 - prodongi
bool isParting() const; /// 2012.05.17 파티 중인가 - prodongi
bool isNormalParting() const; /// 일반 타피 중인가 - prodongi
bool isInArena() const;
bool isArenaExercise() const; /// 현재 연습 경기인지 아닌지
bool isValidArenaJoinSituation(struct sArenaJoinSituationCondition const& situationCondition);
// AziaMafia EB Arcade
bool isInArcade() const;
bool isHorizon() const;
void Process( DWORD dwTime );
// Here, most of the requests will probably be for Local Player and summoned creature data
bool ProcMsgAtStatic( struct SGameMessage * ); ///< 온갖 메세지~
void Rq_TakeItem ( AR_HANDLE item_handle ); ///< Item 추가 요청
void Rq_PutOnOffItem ( AR_HANDLE hTarget, AR_HANDLE hItem, int nPosition );
//void Rq_DestroyItem ( AR_HANDLE item_handle ); ///< Item 파괴 요청
void Rq_DestroyItem( void * arrItems, int size );
void Rq_ItemSet ( int nItemSetIndex );
void Rq_NPC_Contact ( AR_HANDLE npc_handle ); ///< Npc 고유 handle
void Rq_MarketStall_Buy ( const char * pName ); ///< 구매 노점 개설 요청
void Rq_MarketStall_Sale( const char * pName ); ///< 판매 노점 개설 요청
void Rq_Skill_Learn ( AR_HANDLE handle, int nSkillID, int nOriginSkillID, short nSkillLv ); ///< Skill 관련 스킬 레벨 올림 또는 스킬 배우기 요청
void Rq_JopLevelUp ( AR_HANDLE handle ); ///< Job 관련, 잡 레벨을 올린다(1씩)
void Rq_ChangeLocation ( );
void AddGameCreatureInput( class SGameInput * pInput ); ///< 크리처 직접 입력, 디버깅 용
void AddGameInput ( class SGameInput * pInput ); ///< 키보드, 마우스 입력
void AddNetInputNet( struct SGameMessage* pGameMsg ); ///< 넷 응답
void OnUISync( AR_HANDLE caster, AR_HANDLE target, int nUseType );
void InitInterfaceData();
/// 크리처 슬롯 해당하는 스킬 정보를 가져온다
void CmdUseSkil( struct STRUCT_CREATURE_CMD_SCRIPT &sCCmdScr );
void UseEscCommand();
void AddStatusAction( AR_HANDLE hAttackter, AR_HANDLE hTarget );
void AddStatusCastingAction( struct SMSG_SKILL_EVENT* pMsg );
void AddStatusFireAction( SGameMessage* msg ); //
const std::vector< SGameAvatarEx* > & GetSummonList() { return m_vSummonList; }
bool WeightConfirmationTheBeforeAttacking();
/// 길드 정보 관련
bool IsExistGuildInfo( int nGuild_id );
void SendGuildData( int nGuild_id );
void ActivateQuestProp( SGameAvatarEx* pCaster, SGameAvatarEx* pQuestProp );
bool IsPartyMember( AR_HANDLE hTarget );
bool IsGuildMember( AR_HANDLE hTarget );
bool IsRaidMember( AR_HANDLE hTarget );
void onLeave( struct SMSG_LEAVE* );
// 1:1 대련
bool GetDeathPVP() { return m_bDeathPVP; }
bool GetShowPVPIcon() { return m_bShowPVPIcon; }
bool GetPVPAcceptCheck() { return m_bCheckPVP; }
bool GetPVPStart() { return m_bPVPStart; }
bool SetDeathPVP( bool bDeath ) { return m_bDeathPVP = bDeath; }
bool SetShowPVPIcon( bool bIcon ) { return m_bShowPVPIcon = bIcon; }
bool SetPVPAcceptCheck( bool bCheck ) { return m_bCheckPVP = bCheck; }
bool SetPVPStart( bool bStart ) { return m_bPVPStart = bStart; }
void OnChatRequestFailed();
// 2010.05.11 - prodongi
void updateCurTarget(AR_HANDLE handle);
void Rq_ChattingEx( int nChatType, const char * pTargetName, const char * pChat ) { return Rq_Chatting(nChatType, pTargetName, pChat); } //2011.03.09 servantes
SGame* GetGame() const { return m_pGame; }
int getArenaId() const;
struct sArenaSystem* getArenaSystem() const;
protected:
void InitRaidInfo();
/// 크리처 탑승 가능 여부 체크
void CheckPossibilityCreatureMount( SGameAvatarEx* pPlayer );
bool IsSummon( AR_HANDLE handle );
void SetSkillInputData( class SGameAvatarEx * pCaster, SGameAvatarEx * pTarget, struct SkillBaseEx * pSkill, struct SIMSG_UI_ACT_USESKILL * pMsg );
// 2008. 6. 18 floyd #2.3.1.23
// http://bug.nflavor.com/view.php?id=2868
// 아바타가 대상을 타겟하지 않으면, 크리쳐는 스킬 자동공격을 하지 않는 문제 관련 수정
// 기본적으로 SGameSystem::GetTarget()을 대상으로 인식하던 것을 타겟핸들을 받도록 수정
// 관련 함수 signature수정
SGameAvatarEx * CheckSkillTarget( SkillBaseEx * pSkill, SGameAvatarEx * pCaster, bool bEnableSysMsg, AR_HANDLE target_handle = NULL );
void ReturnToLobby();
//Chatting 관련
bool IsDelimiter( const wchar_t _c, std::wstring& delimiter );
void Split( const wchar_t* szMsg, std::wstring& delimiter, std::vector< std::wstring >& vToken );
//#ifdef _EDIT_MAP_FILE_
public:
//#endif
void Rq_Chatting( int nChatType, const char * pTargetName, const char * pChat );
//#ifdef _EDIT_MAP_FILE_
protected:
//#endif
std::string procGMCommand( const char *pChat );
//Inventory 관련--------------------------------------------------------
//요청
int Rq_UseItem ( AR_HANDLE item_handle, AR_HANDLE target_handle, AR_HANDLE item_use_target_handle, const char* lpText=NULL ); ///< Item 사용 또는 장착/탈착
void Rq_DropItem( AR_HANDLE item_handle, count_t nDropCnt ); ///< Item 떨굼
//응답
int AddItem ( struct TS_ITEM_INFO * ); ///< Item 추가
int DropItem ( AR_HANDLE item_handle ); ///< Item 떨굼
int DestroyItem ( AR_HANDLE item_handle ); ///< Item 파괴
int UpdateItemCount( AR_HANDLE item_handle, count_t nItemCount );
void ItemSet( int nItemSetIndex );
void OnCommercialStorage( struct SMSG_COMMERCIAL_STORAGE_LIST* );
//QuickSlot 관련--------------------------------------------------------
//요청
void Rq_UseSlot( int nSlotIndex ); ///< 사용
void Rq_RegSlot( int nSlotIndex, int nActionID, int nActionType ); ///< 등록, 해제 요청
//응답
void RegSlot( int nSlotIndex, int nActionID, int nActionType ); ///< 등록, 해제
void Init();
void Destory();
void SendLogOutMessage();
BOOL IsLocal( AR_HANDLE handle );
//Msg 처리
void OnMsgChattingRequest( struct SMSG_CHATTING_REQUEST* );
void OnMsgReqUIDisplayInfo( struct SIMSG_REQ_UIDISPLAY_INFO* );
void OnMsgActInventory( struct SIMSG_UI_ACT_INVENTORY* );
void OnMsgActCreature ( struct SIMSG_UI_ACT_CREATURE * );
void OnMsgActTarget ( struct SIMSG_UI_ACT_TARGET * );
void OnMsgActNPCDialog( struct SIMSG_UI_ACT_NPCDIALOG* );
void OnMsgActJopLevelUp( struct SIMSG_UI_ACT_JOB_LEVELUP* );
void OnMsgActItemCombine( struct SIMSG_UI_ACT_ITEMCOMBINE* );
/// 기부관련 아이템 루피 보내기
void OnMsgActItemContribution( struct SIMSG_UI_ACT_ITEMCONTRIBUTION* );
/// 기부보상 선물 요구하기
void OnMsgActRequestRewardItem( struct SIMSG_UI_ACT_REQUESTREWARDITEM* );
///
void OnMsgEnterEventArea( struct SMSG_ENTER_EVENTAREA* );
void OnMsgLeaveEventArea( struct SMSG_LEAVE_EVENTAREA* );
void OnMsgActFullEquip ( struct SIMSG_UI_ACT_FULLEQUIP* );
void OnMsgActBuyItems ( struct SIMSG_UI_ACT_BUYITEMS* );
void OnMsgActSellItems ( struct SIMSG_UI_ACT_SELLITEMS* );
void OnMsgActBuyItemsFromStore( struct SIMSG_UI_ACT_BUYITEMS_FROM_STORE* );
void OnMsgActSellItemsToStore( struct SIMSG_UI_ACT_SELLITEMS_TO_STORE* pMsg );
void OnMsgActLearnSkill ( struct SIMSG_UI_ACT_LEARN_SKILL* );
void OnMsgUseSkill ( struct SIMSG_UI_ACT_USESKILL* );
bool OnMsgUseSkill_by_toggle( struct SIMSG_UI_ACT_USESKILL_BY_TOGGLE* );
void OnMsgSkillEvent ( struct SMSG_SKILL_EVENT* );
// void OnMsgSkillCastingTime( struct SMSG_SKILL_CASTING_TIME* ); //Skill Casting Time
void OnSkillList ( struct SMSG_SKILL_LIST* );
void OnSkillCardInfo ( struct SMSG_SKILLCARD_INFO* );
void OnMsgUseItem ( struct SIMSG_UI_ACT_USEITEM* );
void OnMsgSoulstoneCraft( struct SIMSG_UI_SOULSTONE_CRAFT* pMsg );
void OnMsgRepairSoulstone( struct SIMSG_UI_REPAIR_SOULSTONE* pMsg );
void OnMsgRequestRemoveState( struct SIMSG_REQUEST_REMOVE_STATE* pMsg );
void OnMsgMsgReqChangeItemPosition( struct SIMSG_REQ_CHANGE_ITEM_POSITION* pMsg );
// { [soandor][3.1.2]경매장 구현
void OnMsgReqAuctionSearch( struct SIMSG_REQ_AUCTION_SEARCH* pMsg ); ///< 경매 검색 요청 처리
void OnMsgReqAuctionSellingList( struct SIMSG_REQ_AUCTION_SELLING_LIST* pMsg ); ///< 경매 등록 물품 목록 요청 처리
void OnMsgReqAuctionBiddedList( struct SIMSG_REQ_AUCTION_BIDDED_LIST* pMsg ); ///< 입찰 물품 목록 요청 처리
void OnMsgReqAuctionBid( struct SIMSG_REQ_AUCTION_BID* pMsg ); //!<
void OnMsgReqAuctionInstantPurchase( struct SIMSG_REQ_AUCTION_INSTANT_PURCHASE* pMsg ); //!<
void OnMsgReqAuctionRegister( struct SIMSG_REQ_AUCTION_REGISTER* pMsg ); //!<
void OnMsgReqAuctionCancel( struct SIMSG_REQ_AUCTION_CANCEL* pMsg ); //!<
void OnMsgReqAuctionItemKeepingList( struct SIMSG_REQ_AUCTION_ITEM_KEEPING_LIST* pMsg ); ///< 보관 물품 목록 요청 처리
void OnMsgReqAuctionItemKeepingTake( struct SIMSG_REQ_AUCTION_ITEM_KEEPING_TAKE* pMsg ); ///< 보관 물품 인출 요청 처리
// }
void OnMsgMount ( struct SMSG_MOUNT_SUMMON* );
void OnMsgUnMount ( struct SMSG_UNMOUNT_SUMMON* );
void OnMsgUseCommand ( struct SIMSG_UI_ACT_USECOMMAND* );
void OnMsgResult ( struct SMSG_RESULT* );
void OnMsgLogin ( struct SMSG_LOGIN* );
void OnMsgLeave ( struct SMSG_LEAVE* );
void OnMsgRegenHPMP ( struct SMSG_REGEN_HPMP* ); ///< 타겟창 닫기
void OnStatInfo ( struct SMSG_STAT_INFO* ); ///< 스탯 정보
void OnGoldUpdate ( struct SMSG_GOLD_UPDATE* ); ///< 금 갱신
void OnMsgAddSummonInfo ( struct SMSG_ADD_SUMMON_INFO * ); ///< 소환수 정보 추가
void OnMsgSummonNameChange ( struct SIMSG_UI_CHANGE_SUMMON_NAME* pMsg ); ///< 소환수 이름 변경
void OnMsgRemoveSummonInfo ( struct SMSG_REMOVE_SUMMON_INFO* ); ///< 소환수 정보 제거
void OnMsgEquipSummon ( struct SMSG_EQUIP_SUMMON * ); ///< 소환수 장착
void OnMsgRqSummon ( struct SMSG_RQ_SUMMON * ); ///< 소환 요청
void OnMsgActEquipSummon ( struct SIMSG_UI_ACT_EQUIP_SUMMON* ); ///< 2004/10/14, BERSERK 크리처 등록 요청
void OnMsgActSelectSummon ( struct SIMSG_UI_ACT_SELECT_SUMMON* ); ///< MJ 2004/10/17 소환할 크리쳐 정보 게임에 전달 요청
// sonador 10.2.1 팻 시스템 구현
void OnMsgAddPetInfo ( struct SMSG_ADD_PET_INFO* msg ); ///< a message for adding information of pet
void OnMsgRemovePetInfo ( struct SMSG_REMOVE_PET_INFO* msg ); ///< a message for removing information of pet
void OnMsgReqSetPetName ( struct SIMSG_REQ_SET_PET_NAME* pMsg ); ///< change pet name
void OnMsgReqArrangeItem ( struct SIMSG_REQ_ARRANGE_ITEM* pMsg ); ///< 인벤토리/창고 정렬 요청 처리 // sonador 1.9.1 인벤토리 및 창고 정렬 기능 구현
void OnMsgSaveClientInfo ( struct SIMSG_UI_SAVE_CLIENT_INFO* ); ///< 클라이언트 정보 저장
void OnMsgSaveQuickSlot ( struct SIMSG_UI_SAVE_QUICK_SLOT* ); // 퀵슬롯 정보 저장
void OnMsgSaveCurrentKey ( struct SIMSG_UI_SAVE_CURRENT_KEY* ); // 현재 사용 키 맵핑 정보 저장
void OnMsgSaveSavedKey ( struct SIMSG_UI_SAVE_SAVED_KEY* ); ///< 저장할 키 맵핑 정보 저장
void OnTamingInfo ( struct SMSG_TAMING_INFO * ); ///< 테이밍 정보
void OnMsgTakeResult ( struct SMSG_ITEM_TAKE* ); ///< 아이템 줍기 결과
void OnMsgDropResult ( struct SMSG_ITEM_DROP* ); ///< 아이템 떨굼 결과
void OnMsgItemDestroy ( struct SMSG_ITEM_DESTROY* ); ///< 아이템 제거.
void OnMsgItemErase( struct SMSG_ERASE_ITEM * ); // 아이템파괴.
void OnMsgUpdateItemCount ( struct SMSG_UPDATE_ITEM_COUNT* ); ///< 아이템 카운트 변경
void OnMsgItemWear ( struct SMSG_ITEM_WEAR* ); ///< 아이템 장착
void OnMsgItemWearInfo ( struct SMSG_ITEM_WEAR_INFO* ); ///< 아이템 장착 정보
void OnMsgInventory ( struct SMSG_ITEM_INVEN* ); ///< 인벤토리 메세지
void OnMsgItemcooltime ( struct SMSG_ITEM_COOL_TIME* ); ///< 아이템 그룹 쿨 타임
void OnMsgOpenStorage ( struct SMSG_OPEN_STORAGE* ); ///< 창고 열기
void OnMsgChangeStorage ( struct SMSG_CHANGE_STORAGE* ); ///< 창고 변환?
void OnMsgNPCDialog ( struct SMSG_NPC_DIALOG* ); ///< NPC 대화창
void OnMsgMarket ( struct SMSG_MARKET* ); ///< 상점
void OnMsgChatting ( struct SMSG_CHATTING* ); ///< 채팅
void OnMsgChatPartySystem ( struct SMSG_CHATTING* pMsg ); ///< 채팅중 파티 메세지
void RefreshTargetGuage ( AR_HANDLE handle, bool bFriend ); ///< 타겟 게이지 갱신
void OnMsgTrade ( struct SMSG_TRADE* ); ///< Trade
void OnMsgBeltSlotInfo ( struct SMSG_BELT_SLOT_INFO* ); ///< Belt Slot
void OnMsgBooth ( struct SMSG_UI_BOOTH* );
void OnMsgRqBoothName ( struct SMSG_REQUEST_BOOTH_NAME*);
void OnMsgWatchBooth ( struct SMSG_WATCH_BOOTH*pMsg );
void OnMsgEndQuest ( struct SMSG_END_QUEST* pGameMsg );
void OnMsgTitle ( struct SGameMessage * pMsg );
void OnMsgQuestUpdata ( struct SMSG_QUEST_UPDATA* pGameMsg );
void _SplitText( const char* lpText, const char* lpTag, std::vector<std::string>& rVecText, const char* lpTag2 );
//시스템
void OnMsgChangeAvatar ( struct STMSG_CHANGEAVATAR* ); ///< 아바타 변경 요청
void OnMsgReqClose ( struct STMSG_REQ_CLOSE* );
// MJ 2005/03/04 // 서버에서 받은 타겟으로 타겟 변경
void OnMsgTarget ( struct SMSG_TARGET* );
void OnMsgState ( struct SMSG_STATE* );
void OnMsgStatusChange ( struct SMSG_STATUS_CHANGE* pMsg );
void OnMsgProperty ( struct SMSG_PROPERTY* );
void OnMsgLevelUpdate ( struct SMSG_LEVEL_UPDATE* );
void OnMsgTargetStat ( struct SIMSG_UI_TARGET_STAT* );
void OnMsgHPMP ( struct SMSG_HPMP* );
void OnMsgSP ( struct SMSG_SP* pMsg );
void OnMsgExpUpdate ( struct SMSG_EXP_UPDATE* );
void OnMsgTargetInfo ( struct SIMSG_UI_TARGET_INFO* );
void OnMsgAttack ( struct SMSG_ATTACK* );
void OnMsgAttackDouble ( struct SMSG_ATTACK_DOUBLE* );
void OnMsgStateResult ( struct SMSG_STATE_RESULT* pMsg );
void OnMsgEmotion ( int nEmotionID ); //
//1:1 대련 시스템
//2009-02-05: hunee
void OnMsgCompeteRequest( struct SMSG_SC_COMPETE_REQUEST* pMsg ); ///< 대련 신청 요청
void OnMsgCompeteAnswer( struct SMSG_SC_COMPETE_ANSWER* pMsg ); ///< 대련 신청 응답
void OnMsgCompeteCountdown( struct SMSG_SC_COMPETE_COUNTDOWN* pMsg ); ///< 대련 시작 카운트 다운
void OnMsgCompeteStart( struct SMSG_SC_COMPETE_START* pMsg ); ///< 대련 시작
void OnMsgCompeteEnd( struct SMSG_SC_COMPETE_END* pMsg ); ///< 대련 종료
void OnAddedSkillList ( struct SMSG_ADDED_SKILL_LIST* pMsg );
void OnMsgSummonCardSkillList(struct SIMSG_UI_SUMMON_CARD_SKILL_LIST* pMsg); /// 2011.05.12 우클릭 유도 - prodongi
void OnMsgDoDecompose ( struct SMSG_DECOMPOSE_DO* pMsg );
void OnMsgChangeSkinColor ( struct SMSG_CHANGE_SKIN_COLOR* pMsg );
void UISyncData ( struct SGameMessage * pMsg );
void GetTargetName( std::string& strName );
void UpdateContributionPropData();
bool enableUseSkillAtPVP(SkillBaseEx* skill); /// 2011.09.27 대련중 사용 가능 체크 - prodongi
std::vector< AR_HANDLE > m_vLocalHandleList;
std::vector< DATA_CREATURE > m_vCreatureDataList; ///< 내 소환수 데이타
//NPC 관련
std::vector< AR_HANDLE > m_ClickNpcList; ///< 클릭한 NPC들 리스트
std::vector< AR_HANDLE > m_ClickStoreList; ///< 클릭한 Store들 리스트
bool m_bIsShowTarget;
bool m_bIsShowBattleAccept;
bool m_bPVPStart;
bool m_bDeathPVP;
bool m_bShowPVPIcon;
bool m_bCheckPVP;
class SGameTargetMgr* m_pTargetMgr; ///< 타겟 윈도우 지원
class SGameUISyncMng* m_pUISyncMng;
class SRaidMgr& m_RaidMgr;
// class SPartyMgr& m_PartyMgr;
class SGuildMgr& m_GuildMgr;
class SFriendMgr& m_FriendMgr;
class SCutMgr& m_CutMgr;
class STradeMgr& m_TradeMgr;
class SStorageMgr& m_StorageMgr;
class SMotionMgr& m_MotionMgr;
class SPlayerInfoMgr& m_PlayerInfoMgr;
class SInventoryMgr& m_InventoryMgr;
class SCreatureSlotMgr& m_CreatureSlotMgr;
class SSkillSlotMgr& m_SkillSlotMgr;
class SCreatureSkillSlotMgr& m_CreatureSkillSlotMgr;
class SGuildDataMgr& m_GuildDataMgr;
class SPetMgr& m_PetMgr; ///< 팻 시스템 메니저 // sonador #2.1.2.4.3 팻 조작 UI 연동
class SPetSkillMgr& m_PetSkillMgr; ///< 팻 스킬 메니저 // sonador #2.1.2.4.3 팻 조작 UI 연동
class CPartyListMgr& m_PartyMgr;
class STitleMgr& m_TitleMgr; // 2012. 4. 18 - marine 호칭매니저
std::vector< struct SMSG_STAT_INFO > m_vStatList;
CONTENT_STATE m_nContentState; ///< 클라이언트 상태
class SGameAvatarEx * m_pPlayer;
std::vector< class SGameAvatarEx * > m_vSummonList; ///< 컨트롤 가능한 소환수
class SGame * m_pGame;
DWORD m_dwTime;
std::string m_strNPC_Name;
FILE* m_pFRecord;
SGameAvatarEx* m_pQuestProp;
std::vector< class SGameAvatarEx * > m_vSkillPropList;
std::string m_strAllianceId;
std::string m_strPassword;
// 2011.12.07 If an active prop is clicked repeatedly, the skill may trigger multiple times,
// causing a double warp. To prevent this, an activation delay is added.
// This issue only occurs during movement inside the Kubrick Dungeon,
// so the check is applied only for skill 6904.
// A shared system would be ideal, but the current system cannot be changed,
// so this workaround is used. - prodongi
struct sActivatePropUpdate
{
enum { SKILL_ID = 6904 };
bool enable(int skillId) const;
void update(float elapsedtime);
void checkBegin(int skillId);
sUpdateTime<float> m_update;
};
sActivatePropUpdate m_activatePropUpdate;
/// 대련 상대 정보
struct Battle_Info
{
AR_TIME arTime; ///< 대련 시작 시간
AR_TIME arOldTime;
AR_HANDLE hTarget;
int nOldCount;
bool bStartBattle;
std::string strTargetName;
Battle_Info() : arTime( 0 )
, arOldTime( 0 )
, hTarget( 0 )
, nOldCount( 0 )
, bStartBattle( false )
{}
};
Battle_Info* m_pBattle_Info;
Battle_Info* m_pBattle_End_Info;
class SContentsManager* m_pContentsMgr; // #2.1.2.11.1
class cArenaJoinSituationChecker* m_arenaJoinSituationChecker; /// 2012.05.18 - prodongi
struct sArenaSystem* m_arenaSystem;
public:
std::string OnGMCMDSysCommand( const char *pChat, std::vector < std::string >& vToken );
std::string OnGMCMDSendTown( const char *pChat, std::vector < std::string >& vToken );
std::string OnGMCMDTargetRecord( const char * pChat );
std::string OnGMCMDAddStatus( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDLevelUp( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDLevelDown( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDEvolution( const char* pChat );
std::string OnGMCMDCreatureSP( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDCreatureHP( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDCreatureMP( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDCreatureEXP( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDCreatureBasicEXP( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDCreatureGrowthEXP( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDEvaluate( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDAdjust( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDSetAutoUser( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDUnsetAutoUser( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDCheckAutoUser( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDWarp( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDNotice( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDAnnounce( const char * pChat, std::vector < std::string >& vToken ); /// 2011.07.19
std::string OnGMCMDInvisible( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDShowPlayer( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDRupi( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDDebug( const char * pChat );
std::string OnGMCMDCamera( const char * pChat );
std::string OnGMCMDLevel( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDExp( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDJobPoint( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDJobLevel( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDProhibitChat( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDRegenerate( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDNPCRotation( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDNPCRotationOff( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDAutoMove( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDUI( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDQuest( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDQuestAdd( const char * pChat, std::vector < std::string >& vToken );
std::string OnGMCMDAutoToolTip( const char * pChat, std::vector < std::string >& vToken );
std::string OnCMDHelp( const char * pChat );
std::string OnCMDReturnLobby( const char * pChat );
std::string OnCMDCreateSiegeRaidParty( const char * pChat, std::vector< std::string >& vToken );
/// sonador 3.5.1 던전 시즈 레벨 제한
std::string OnCMDAppointBattleCommander( const char* pChat, std::vector< std::string >& vToken );
std::string OnCMDDelegateBattleCommander( const char* pChat, std::vector< std::string >& vToken ); //
std::string OnCMDAssist( const char * pChat );
std::string OnCMDChangeGuildName( const char* pChat, std::vector< std::string >& vToken );
std::string OnCMDChangeName( const char* pChat, std::vector< std::string >& vToken );
std::string OnCMDCreateGuildAlliance( const char* pChat, std::vector< std::string >& vToken );
std::string OnCMDInviteGuildAlliance( const char* pChat, std::vector< std::string >& vToken );
std::string OnCMDKickGuildAlliance( const char* pChat, std::vector< std::string >& vToken );
std::string OnCMDJoinGuildAlliance( const char* pChat, std::vector< std::string >& vToken );
std::string OnCMDChangeGuildAllianceName( const char* pChat, std::vector< std::string >& vToken );
std::string OnCMDAcceptBattle( const char* pChat, std::vector< std::string >& vToken );
std::string OnCMDSit( const char * pChat );
std::string OnCMDStandUp( const char * pChat );
std::string OnCMDTownPropLimit( const char * pChat, std::vector < std::string >& vToken );
std::string OnCMDShopMode( const char * pChat );
std::string OnCMDRide( const char * pChat );
std::string OnCMDMountCreature( const char * pChat );
std::string OnCMDNormal( const char* pTarget );
std::string OnCMDBattle( const char* pTarget );
std::string OnCMDShop( const char* pChat );
std::string OnCMDUnion( const char* pChat );
std::string OnCMDAddPartyWindow( const char* pChat );
std::string OnCMDDelPartyWindow( const char* pChat );
std::string OnCMDTrade( const char* pChat );
std::string OnCMDMoveSoundOn( const char* pChat );
std::string OnCMDMoveSoundOff( const char* pChat );
std::string OnCMDPkOn( const char* pChat );
std::string OnCMDPkOff( const char* pChat );
std::string OnCMDSetVolume( const char* pChat, std::vector < std::string >& vToken );
std::string OnCMDMusicOff( const char* pChat );
std::string OnCMDGuildIcon( const char* pChat );
std::string OnCMDPartyShare( const char* pChat, std::vector < std::string >& vToken );
std::string OnCMDRun( const char* pChat, std::vector < std::string >& vToken );
std::string OnCMDCashItem( const char* pChat );
std::string OnCMDURLTest( const char* pChat );
#ifdef _COUNTRY_ME_
string OnCMDPangoTest( const char* pChat );
#endif
friend struct SGameCommand;
void OnMsgPartyMatchingAction( struct SMSG_PARTYMATCH_ACTION* pMsg );
void OnMsgMoveMap ( int worldPosX, int worldPosY );
};
extern int g_nMoveSpeed;