#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& 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 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;