#pragma once /** @brief Game의 네트웍 메세지, KeyBoard, Mouse 들의 윈도우 메세지를 Game Msg로 변환해서 돌려 준다. @warning 주의 : 네트웍, KeyBoard, Mouse 들의 메세지들은 직접 Game 안에서 사용 하지 않는다. */ #include #include //#include #include #include "KObject.h" #include class SGameVM : public KObject { public: SGameVM(); ~SGameVM(); void Process( DWORD dwTime ); /// NetWork 메세지 받기 bool onReadEvent( struct IStreamSocketConnection * pConn, struct IQueue* pRecvQueue ); /// 윈도우 메세지 받기 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); bool IsProcGameMsg() { // if( m_bActiveRecycle && !m_ReQueueGame.empty() ) if( !m_ReQueueGame.empty() ) return !m_ReQueueGame.empty(); return !m_QueueGame.empty(); } /// 하나씩 꺼내서 처리한다. struct SGameMessage* GetGameMsg(); void AddRecycle( struct SGameMessage* pMsg ); void AddDelMsg( struct SGameMessage* pMsg ); void ProcDel(); void AddSafeKeeping( struct SGameMessage* pMsg ); void onHotkey( struct GameHotKeystrcut & HotKey ); void SetGameManager( class SGameManager* pGameManager ) { m_pGameManager = pGameManager; } virtual void *Perform( KID id, KArg& msg ); // void SetActiveRecycle( BOOL bActive ) { m_bActiveRecycle = bActive; } // 필요하지 않아 보여서 삭제 2009.3.25 by 정동섭 /// 2010.10.06 id에 해당되는 스트링을 찾는다 - prodongi void lookUpNetStr(unsigned short id, std::string& str); protected: void Init(); void Destroy(); bool ISProcNetMsg() { return !m_QueueNet.empty(); } struct TS_MESSAGE* GetNetMsg(); /// 바로 처리할 메세지 void ProcMsgAtStatic( struct SGameMessage* pMsg ); void onMsgMove ( struct TS_MOVE* pMsg ); void onMsgMoveAck ( struct TS_MOVE_ACK* pMsg ); void onMsgRegionAck( struct TS_REGION_ACK* pMsg ); void onMsgLeave ( struct TS_LEAVE * pMsg ); void onMsgEnter ( struct TS_ENTER * pMsg ); void onMsgLogin ( struct TS_LOGIN_RESULT * pMsg ); void onMsgCharacterList( struct TS_SC_CHARACTER_LIST* pMsg ); void onMsgTimeSync ( struct TS_TIMESYNC * pMsg ); void onAttackEvent ( struct TS_ATTACK_EVENT * pMsg ); void OnDoubleAttackEvent( struct TS_DOUBLE_WEAPON_ATTACK_EVENT * pMsg ); void onCantAttack ( struct TS_SC_CANT_ATTACK* pMsg); void onMsgHairInfo( struct TS_SC_HAIR_INFO* pMsg); void OnStatInfo ( struct TS_SC_STAT_INFO* pMsg ); void OnGoldUpdate ( struct TS_SC_GOLD_UPDATE* pMsg ); void OnLevelUpdate ( struct TS_SC_LEVEL_UPDATE* pMsg ); void OnExpUpdate ( struct TS_SC_EXP_UPDATE* pMsg ); void OnBonusExpUpdate( struct TS_SC_BONUS_EXP_JP* pMsg ); void OnAddSummonInfo ( struct TS_SC_ADD_SUMMON_INFO* pMsg ); void OnRemoveSummonInfo( struct TS_SC_REMOVE_SUMMON_INFO* pMsg); void OnEquipSummonInfo ( struct TS_EQUIP_SUMMON* pMsg ); void OnUnsummon ( struct TS_SC_UNSUMMON* pMsg ); void OnUnsummonNotice ( struct TS_SC_UNSUMMON_NOTICE* pMsg ); void OnSummonEvolution ( struct TS_SC_SUMMON_EVOLUTION* pMsg ); void OnTamingInfo ( struct TS_SC_TAMING_INFO* pMsg ); void OnMountSummon ( struct TS_SC_MOUNT_SUMMON* pMsg ); void OnUnMountSummon ( struct TS_SC_UNMOUNT_SUMMON* pMsg ); void OnSummonNameChange( struct TS_SC_SHOW_SUMMON_NAME_CHANGE* pMsg ); // sonador 10.2.1 팻 시스템 구현 void OnUnsummonPet ( struct TS_SC_UNSUMMON_PET* pMsg ); void OnAddPetInfo ( struct TS_SC_ADD_PET_INFO* pMsg ); void OnRemovePetInfo ( struct TS_SC_REMOVE_PET_INFO* pMsg ); void OnShowSetPetName ( struct TS_SC_SHOW_SET_PET_NAME* pMsg ); void OnSkillEvent ( struct TS_SC_SKILL* pMsg ); void OnSkillList ( struct TS_SC_SKILL_LIST* pMsg ); void onMsgDropInfo ( struct TS_SC_ITEM_DROP_INFO* pMsg ); void onWearInfo( struct TS_WEAR_INFO* pMsg ); void onMsgDrop ( struct TS_SC_DROP_RESULT* pMsg ); void onMsgSkillCardInfo( struct TS_SC_SKILLCARD_INFO* pMsg ); void onItemWearInfo ( struct TS_SC_ITEM_WEAR_INFO* pMsg ); void OnMsgInven( struct TS_SC_INVENTORY* pMsg ); void OnMsgTakeItemResult( struct TS_SC_TAKE_ITEM_RESULT* pMsg ); /// quest void OnQuestList( struct TS_SC_QUEST_LIST* pMsg ); void OnQuestStatus( struct TS_SC_QUEST_STATUS* pMsg ); /// guild void OnShowCreateGuild( struct TS_SC_SHOW_CREATE_GUILD* pMsg ); /// guild alliance void OnShowCreateAlliance( struct TS_SC_SHOW_CREATE_ALLIANCE* pMsg ); // storage void OnMsgOpenStorage ( struct TS_SC_OPEN_STORAGE* pMsg ); void OnMsgOpenSoulstoneCraft ( struct TS_SC_SHOW_SOULSTONE_CRAFT_WINDOW* pMsg ); void OnMsgOpenSoulstoneRepair( struct TS_SC_SHOW_SOULSTONE_REPAIR_WINDOW* pMsg ); /// chatting void OnMsgChattingLocal( struct TS_SC_CHAT_LOCAL* pMsg ); void OnMsgChatting ( struct TS_SC_CHAT* pMsg ); // 2010.05.19 HIDE_EQUIP_INFO - prodongi void OnMsgHideEquipInfo(struct TS_SC_HIDE_EQUIP_INFO* pMsg); void onMarket ( struct TS_SC_MARKET* pMsg ); void onEraseItem ( struct TS_SC_ERASE_ITEM* pMsg ); // 아이템파괴. void onDestroyItem ( struct TS_SC_DESTROY_ITEM* pMsg ); void onUpdateItemCount( struct TS_SC_UPDATE_ITEM_COUNT* pMsg ); void onMixResult ( struct TS_SC_MIX_RESULT* pMsg ); void onTrade ( struct TS_TRADE* pMsg ); void onBoothTradeInfo ( struct TS_SC_BOOTH_TRADE_INFO* pMsg ); void onMsgBoothClopsed( struct TS_SC_BOOTH_CLOSED* pMsg ); void onMsgWatchBooth ( struct TS_SC_WATCH_BOOTH* pMsg ); void onBoothName ( struct TS_SC_GET_BOOTHS_NAME* pMsg ); void onUseItemResult ( struct TS_SC_USE_ITEM_RESULT* pMsg ); void OnDead ( struct TS_MESSAGE* pMsg ); void OnState ( struct TS_SC_STATE* pMsg ); void OnProperty ( struct TS_SC_PROPERTY* pMsg ); void OnHPMP ( struct TS_SC_HPMP* pMsg ); void OnDialog ( struct TS_SC_DIALOG* pMsg ); void OnShowWindow ( struct TS_SC_SHOW_WINDOW* pMsg ); void OnGeneralMessageBox(struct TS_SC_GENERAL_MESSAGE_BOX* pMsg); void OnChangeLocation ( struct TS_SC_CHANGE_LOCATION* pMsg ); /// 날씨 정보를 받는다 void OnWeatherInfo ( struct TS_SC_WEATHER_INFO* pMsg ); void OnGametime ( struct TS_SC_GAME_TIME* pMsg ); void OnEmotion ( struct TS_SC_EMOTION* pMsg ); void OnGetChaos ( struct TS_SC_GET_CHAOS* pMsg ); void OnEnergy ( struct TS_SC_ENERGY* pMsg ); void OnItemCoolTime ( struct TS_SC_ITEM_COOL_TIME* pMsg ); void OnStateResult ( struct TS_SC_STATE_RESULT* pMsg ); /// 채팅 관련 결과 void OnChatResult ( struct TS_SC_CHAT_RESULT* pMsg ); //1:1 대련 // 2009-01-30 : hunee void OnMsgCompeteRequest ( struct TS_SC_COMPETE_REQUEST* pMsg); void OnMsgCompeteAnswer ( struct TS_SC_COMPETE_ANSWER* pMsg); void OnMsgCompeteCountdown ( struct TS_SC_COMPETE_COUNTDOWN* pMsg); void OnMsgCompeteStart ( struct TS_SC_COMPETE_START* pMsg); void OnMsgCompeteEnd ( struct TS_SC_COMPETE_END* pMsg); void OnMsgRanking ( struct TS_SC_RANKING_TOP_RECORD* pMsg ); // 스킬레벨의변동이발생 void onAddedSkillList( struct TS_SC_ADDED_SKILL_LIST* pMsg ); /// cheat 관련 void OnWarp ( struct TS_SC_WARP* pMsg ); /// 뭔가 결과 void OnResult( struct TS_SC_RESULT* pMsg ); /// 상태 변경 void OnStatusChange( struct TS_SC_STATUS_CHANGE* pMsg ); //HP/MP/SP 설정 // void OnHP ( struct TS_SC_HP* pMsg ); // void OnMP ( struct TS_SC_MP* pMsg ); void OnRegenHPMP( struct TS_SC_REGEN_HPMP* pMsg ); void OnSP ( struct TS_SC_SP* pMsg ); void OnTarget( struct TS_SC_TARGET* pMsg ); // { [sonador][3.1.2] 경매장 구현 void OnMsgResultAuctionSearch ( struct TS_SC_AUCTION_SEARCH* pMsg ); ///< 경매장 검색에 대한 서버로 부터의 결과 메시지 처리 void OnMsgResultAuctionSellingList ( struct TS_SC_AUCTION_SELLING_LIST* pMsg ); ///< 등록 물품 목록 요청 결과 처리 void OnMsgResultAuctionBiddedList ( struct TS_SC_AUCTION_BIDDED_LIST* pMsg ); ///< 입찰 물품 목록 요청 결과 처리 void OnMsgResultAuctionItemKeepingList ( struct TS_SC_ITEM_KEEPING_LIST* pMsg ); ///< 보관함 물품 목록 요청 결과 처리 // } // #2.1.2.11.1 { void OnMsgHuntaHolicInstanceList( struct TS_SC_HUNTAHOLIC_INSTANCE_LIST* pMsg ); void OnMsgHuntaHolicInstanceInfo( struct TS_SC_HUNTAHOLIC_INSTANCE_INFO* pMsg ); void OnMsgHuntaHolicHuntingScore( struct TS_SC_HUNTAHOLIC_HUNTING_SCORE* pMsg ); void OnMsgHuntaHolicUpdateScroe ( struct TS_SC_HUNTAHOLIC_UPDATE_SCORE* pMsg ); void OnMsgHuntaHolicBeginHunting( struct TS_SC_HUNTAHOLIC_BEGIN_HUNTING* pMsg ); void OnMsgHuntaHolicMaxPointReached( struct TS_SC_HUNTAHOLIC_MAX_POINT_ACHIEVED* pMsg ); // sonador #2.1.2.11.5 // #2.1.2.11.1 } //인스턴스게임 //sfreer 2009.11.04 void OnMsgHuntaHolicBeginCountDown( struct TS_SC_HUNTAHOLIC_BEGIN_COUNTDOWN* pMsg ); // void OnMsgInstanceGameScoreRequest( struct TS_SC_INSTANCE_GAME_SCORE_REQUEST* pMsg ); // void OnMsgXTrapCheck( struct TS_SC_XTRAP_CHECK* pMsg ); void OnMsgCreatureFarmInfo ( struct TS_SC_FARM_INFO* pMsg ); // servantes 2011.02.23 void OnMsgAssignResult ( struct TS_SC_RESULT_FOSTER* pMsg ); //servantes 2011.02.25 void OnMsgNurseResult ( struct TS_SC_RESULT_NURSE* pMsg ); //2011.03.04 - servantes void OnMsgRegainResult ( struct TS_SC_RESULT_RETRIEVE* pMsg ); //2011.03.07 - servantes /// 2011.05.12 - prodongi void OnMsgSkillLevelList(struct TS_SC_SKILL_LEVEL_LIST* pMsg); void OnMsgTitle_List ( struct TS_SC_TITLE_LIST* pMsg ); void OnMsgTitle_ConditonList( struct TS_SC_TITLE_CONDITION_LIST* pMsg ); void OnMsgTitle_RemainTime( struct TS_SC_REMAIN_TITLE_TIME* pMsg ); void OnMsgTitle_SetMain( struct TS_SC_SET_MAIN_TITLE* pMsg ); void OnMsgTitle_SetSub( struct TS_SC_SET_SUB_TITLE* pMsg ); void OnMsgTitle_Bookmark( struct TS_SC_BOOKMARK_TITLE* pMsg ); void OnMsgTitle_Achieve( struct TS_SC_ACHIEVE_TITLE* pMsg ); void OnMsgTitle_Open( struct TS_SC_OPEN_TITLE* pMsg ); void OnMsgTite_ChangeCondition( struct TS_SC_CHANGE_TITLE_CONDITION* pMsg ); void OnBattleArenaJoinQueue(struct TS_SC_BATTLE_ARENA_JOIN_QUEUE* msg); void OnBattleArenaLeave(struct TS_SC_BATTLE_ARENA_LEAVE* msg); void OnBattleArenaBattleInfo(struct TS_SC_BATTLE_ARENA_BATTLE_INFO* msg); void OnBattleArenaExerciseReadyStatus(struct TS_SC_BATTLE_ARENA_EXERCISE_READY_STATUS* msg); void OnBattleArenaBattleStatus(struct TS_SC_BATTLE_ARENA_BATTLE_STATUS* msg); void OnBattleArenaBattleScore(struct TS_SC_BATTLE_ARENA_BATTLE_SCORE* msg); void OnBattleArenaJoinBattle(struct TS_SC_BATTLE_ARENA_JOIN_BATTLE* msg); void OnBattleArenaDisconnectBattle(struct TS_SC_BATTLE_ARENA_DISCONNECT_BATTLE* msg); void OnBattleArenaReconnectBattle(struct TS_SC_BATTLE_ARENA_RECONNECT_BATTLE* msg); void OnBattleArenaResult(struct TS_SC_BATTLE_ARENA_RESULT* msg); void OnBattleArenaAbsenceCheck(struct TS_SC_BATTLE_ARENA_ABSENCE_CHECK* msg); void OnBattleArenaPenaltyInfo(struct TS_SC_BATTLE_ARENA_PENALTY_INFO* msg); void OnBattleArenaUpdateWaitUserCount(struct TS_SC_BATTLE_ARENA_UPDATE_WAIT_USER_COUNT* msg); void OnDecomposeResult( struct TS_SC_DECOMPOSE_RESULT* pMsg ); void OnChangeSkinColor( struct TS_SC_SKIN_INFO* pMsg ); //-------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- // Upload Server void OnUploadServerLogin( struct TS_UC_LOGIN_RESULT * ); void OnUploadServerGuildIconUpload( struct TS_UC_UPLOAD * ); //-------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- void OnPartyMatchList ( struct TS_SC_PARTYMATCH_LIST * ); void OnPartyMatchMember( struct TS_SC_PARTYMATCH_MEMBER * ); std::vector m_vDelList; ///< Game Msg 지울 것; std::queue m_ReQueueGame; // Generated Game Message std::queue m_QueueGame; // Generated Game Message std::queue m_QueueNet; ///< Net Msg; std::vector m_vSafeKeepingList; ///< Game Msg 보관; DWORD m_dwTime; ///< 현재 Process Time //Mouse BOOL m_bLPress; BOOL m_bRPress; POINT m_ptOldPoint; std::map MAP_PROPERTY; // //World Msg //BOOL m_bActiveRecycle; // 필요하지 않아 보여서 삭제 2009.3.25 by 정동섭 class SGameManager* m_pGameManager; DWORD m_dwAttackTime; AR_HANDLE m_hLocal; KHash< std::string, hashPr_mod_int > m_hNetStr; };