////////////////////////////////////////////////////////////////////////// // Date : 2004/09/15 ~ // Author : MJ /////////////////////////////////////////////////////////////////////////// #include "StdAfx.h" #include "KDeviceManager.h" // { [sonador] #ifdef _KUI_INVALIDATION #include "SUIViewport.h" #endif // } #include "SGameInterface.h" #include "SItemDB.h" #include "SNpcResourceDB.h" #include "SMonsterDB.h" #include "SCreatureDB.h" #include "SStringDB.h" #include "SSkillDB.h" #include "STenacityDB.h" #include "SGameManager.h" #include "SUIDisplayInfo.h" #include "KUIWndManager.h" #include "KUIDefine.h" //#include "KUIControl.h" #include "KUIControlButton.h" #include "KUIControlScroll.h" #include "KUIControlDamage.h" #include "KUITabControl.h" #include "KUIControlEdit.h" #include "KUIControlStatic.h" #include "KUIControlGauge.h" #include "KUIMsgControl.h" #include "KUIControlEffectText.h" #include "SUICharacterWnd.h" #include "SUILoginWnd.h" #include "SUIIPBlockWnd.h" #include "SUILoginGameRatingWnd.h" #include "SUILoginSubMenuWnd.h" #include "SUILoginWnd.h" #include "SUICreditMenuWnd.h" #include "Quest\\SUIQuestListWnd.h" #include "Quest\\SUIQuestInfoWnd.h" #include "Quest\\SUIQuestReward.h" #include "SUINotifyWnd.h" #include "SUIMinimapWnd.h" #include "SUICharSelectWnd.h" #include "SUICreateCharWnd.h" #include "SUICharScreenControl.h" #include "SUIMainFrameWnd.h" #include "SUIChattingWnd.h" #include "SUIQuickSlotWnd.h" //-- 인벤 , 장비창 관련. #include "SUIInventoryWnd.h" #include "SUIEquipmentWnd.h" #include "SUIPopupEquip.h" #include "SUIDestructionWnd.h" #include "SUIDurabilityWnd.h" // 조합-- #include "SUIFormulaListWnd.h" #include "SUIMixWnd.h" #include "SUIUpgradeWnd.h" #include "SUIRepairWnd.h" #include "SUIProgressWnd.h" //------------------------ #include "SUITargetWnd.h" #include "SUICreatureWnd.h" #include "SUICreatureCardWnd.h" // 2010.08.03 - prodongi #include "SUICharNameListWnd.h" #include "SUIDevOutputWnd.h" #include "MainMenu/SUIMainMenuWnd.h" #include "MainMenu/SUIMainSubMenuWnd.h" #include "SUINPCDialogWnd.h" #include "SUIInputNumberWnd.h" /// 2010.12.17 - prodongi #include "Skill\\SUISkillWnd.h" /// 2010.12.02 - prodongi #include "Skill\\SUISkillTreeFundWnd.h" /// 2010.12.03 - prodongi #include "SUISysMenuWnd.h" #include "SUIShopWnd.h" #include "SUIStateEffectWnd.h" #include "SUIMotionWnd.h" #include "SUISystemWnd.h" #include "SUICreatureInfoWnd.h" #include "SUIEquipCreatureWnd.h" #include "SUIServerNoticeWnd.h" #include "SUIServerListMenuWnd.h" #include "SUIServerListWnd.h" #include "SUICommunity.h" #include "SUICommunityFriend.h" #include "SUICommunityGuild.h" #include "SUICommunityCut.h" #include "SUIRaceSelectWnd.h" #include "SUIJewelEquipWnd.h" #include "RaidSiege/SUIDungeonStoneExWnd.h" #include "SUIDungeonUnitWnd.h" #include "SUITopConsoleWnd.h" #include "TopConsole/SUINoticeWnd.h" #include "SUIFulldownPlayerWnd.h" #include "SUIFulldownTargetPlayerWnd.h" #include "SUIFulldownTargetMonsterWnd.h" #include "SUIFulldownMinimapWnd.h" #include "SUIFulldownItemDropWnd.h" #include "SUIFulldownCreatureWnd.h" #include "SUITradeWnd.h" #include "SUIStoreWnd.h" #include "SUISysMsgDefine.h" #include "CharacterInfo/SUICharacterInfoWnd.h" #include "SUICreaturePageWnd.h" #include "SUICreatureSkillWnd.h" #include "SUICreatureFarmWnd.h" //servantes 2011.01.17 #include "SUIPetCommandWnd.h" // sonador #2.1.2.4.3 팻 조작 UI 연동 #include "SUIAwakeningWnd.h" #include "party\SUIPartyTypes.h" #include "party\SUIPartyStateWnd.h" // 2011.11.09 - servantes #include "party\SUIPartyWndBase.h" #include "party\SUIPartyWndMenuParty.h" #include "party\SUIPartyWndDual.h" #include "party\SUIPopupPartyMenuCharacterWnd.h" #include "party\SUIPopupPartyMenuCreatureWnd.h" #include "party\SUIPartyWndMgr.h" #include "party\SUIPartyCreateWnd.h" #include "party\SUIPartyRMenuWnd.h" #include "RaidSiege/SUIRaidSiegeStatusWnd.h" /// 2011.10.12 - prodongi #include "SUIStorageWnd.h" #include "SUIInputTextWnd.h" #include "SUIWorldMapWnd.h" #include "SUILocalSignWnd.h" /// 2010.11.25 - prodongi #include "SUITargetStateWnd.h" #include "SUIRaceDescWnd.h" #include "SUISecurityWnd.h" #include "SUIAuctionWnd.h" // { [sonador][3.1.2]경매장 구현 #include "SUIInGameLogoutWnd.h" #include "SUIHuntaHolicLobbyWnd.h" // #2.1.2.11.1 #include "SUIHuntaHolicCreateInstanceWnd.h" #include "SUIHuntaHolicConfirmPasswordWnd.h" #include "SUIHuntaHolicInstanceWnd.h" #include "SUIHuntaHolicScoreBoardWnd.h" #include "SUIHuntaHolicResultWnd.h" #include "MainMenu/SUITaskBarWnd.h" #include "MainMenu/SUIInstanceMainSubMenuWnd.h" #include "SUIChangeNameWnd.h" // sonador #2.1.24 #include "Badge/SUIBadgeWnd.h" // hunee 2009-03-02 수련자의섬 리뉴얼 #include "SUILoadingWnd.h" #include "SUIEndingWnd.h" #include "SUIProtectSolutionWnd.h" #include "SUIInstanceEntranceWnd.h" //#include "SUIInstanceWarRecordWnd.h" /// 2011.05.26 안 쓰임 - prodongi // servantes 2011.06.30 #include "Mission/SUIMissionTitleWnd.h" #include "Mission/SUIMissionEnteranceWnd.h" // Guild 길드 -------- #include "SUIGuildWnd.h" // 메인 #include "SUIGuildSubInfoWnd.h" // 길드정보 #include "SUIGuildSubManageWnd.h" // 길드관리 #include "SUIGuildSubMasterWnd.h" // 길드마스터 #include "SUIMemoViewWnd.h" // TEST 메모 #include "SUIOneselfPanelWnd.h" // 길드관리 - 나의관리 #include "SUIMarkPanelWnd.h" // 길드관리 - 나의관리 #include "SUIMemberPopupWnd.h" // 팝업 - 길드맴버관련 #include "SUIInvitationWnd.h" // 길드초대 윈도우. #include "SUIClassManageWnd.h" // 길드원등급 윈도우 #include "SUIClassPopupWnd.h" // 팝업 - 길드맴버관련 #include "SUIExpulsionWnd.h" // 팝업 - 길드원 제명 #include "SUIAllianceGuild.h" // 팝업 - 연합길드 정보 #include "SUIMasterTransfer.h" // 팝업 - 길드장인계. #include "SUITeamWnd.h" // 팝업 - 공격대결성. #include "SUIHelpTeamPopupWnd.h" // 팝업 - 공격대도움말. #include "SUITitleWnd.h" // 2012. 4. 4 marine 호칭창 #include "SUIPartyMatchingWnd.h" // 파티매칭 시스템UI #include "SUIPartyMatchingRegisterWnd.h" // 파티매칭 시스템 등록 //------ // 도움말 출력 윈도우. #include "SUIHelpWnd.h" //#include "Util.h" #include "SUIAddOnWnd.h" #include "SGameLobbyDefine.h" #include "XAbuseFilter.h" #include "SGameOption.h" #include "SSummonSlotMgr.h" #include "SPlayerInfoMgr.h" #include "SPetMgr.h" // sonador #2.1.2.4.3 팻 조작 UI 연동 #include "SQuestMgr.h" #include #include "ErrorCode/ErrorCode.h" #include #include #include "SChatType.h" #include "SDebug_Util.h" #include "SGameWorld.h" //CreateGaugeWindow()함수에서 게이지 만들 오브젝트가 크리처인지 확인하기 위해 추가 -N4- #include "SGameAvatarEx.h" #include "SGameSystem.h" // sonador 10.2.1 팻 시스템 구현 #include "SGameMessage.h" #include "GameUrlDefine.h" #include "LuaVM.h" #include #include "shellapi.h" #include "SMessengerMgr.h" #ifdef CLOUD_LUA #include "SGameSky.h" #include "SGameCloud.h" #endif /// 2011.02.16 - prodongi #include "SUIRechargeMsgBoxWnd.h" #include "SFieldPropResourceDB.h" /// 2011.08.17 - prodongi #include "Mission\\SUIMissionWnd.h" #include "Announce\\SUIAnnounceWnd.h" #include "Notification\\SUINotificationWnd.h" #include "Arena\\SUIMsgControlPenaltyCustomizer.h" #include "Arena\\SUIArenaWaitingWnd.h" #include "Arena\\SUIArenaPracticeWaitingWnd.h" #include "Arena\\SUIArenaPracticeReadyWnd.h" #include "Arena\\SUIArenaSelectReadyWnd.h" #include "Arena\\SUIArenaMenuWnd.h" #include "Arena\\SUIArenaGameClassicWnd.h" #include "Arena\\SUIArenaGameSlaughterWnd.h" #include "Arena\\SUIArenaGameBingoWnd.h" #include "Arena\\SUIArenaGameBingoBoardWnd.h" #include "Arena\\SUIArenaGameSlaughterPracticeWnd.h" #include "Arena\\SUIArenaResultWnd.h" #include "Arena\\SUIArenaReportDiveWnd.h" #include "Arena\\ArenaJoinSituationChecker.h" #include "Arena\\SUIArenaGuideTooltipWnd.h" #include "SBattleArenaDB.h" #include #include "SUIGuildMemberTab.h" // 길드멤버리스트 #define CONTRIBUTION #include "./Decomposition/SUIDecompositionWnd.h" // 분해 창 #include "./Target/SUITargetWnd_player.h" // 타겟 창 - (플레이어) #include "./Target/SUITargetWnd_Creature.h" // 타겟 창 - (크리쳐) #include "./Target/SUITargetWnd_Npc.h" // 타겟 창 - (NPC) #include "./Target/SUITargetWnd_Prop.h" // 타겟 창 - (프랍) #include "KTypes.h" //Explorer extern HWND g_hWnd; extern bool g_bServerListSeen; extern bool g_bServerListFocus; extern bool g_bCharListSeen; extern void SetNavigate( const char * pURL, bool bVisible, int nAddWidth, int nAddHeight ); extern void SetOtherNavigate( int nWinID, const char * pURL, int nWidth, int nHeight ); extern void SetOtherNavigateMove( int nWinID, int nX, int nY ); extern void SetOtherNavigateClose( int nWinID ); extern void CurOtherURLRefresh( int nWinID ); extern void MsgSplit( const char* szMsg, std::vector& vecText, const wchar_t* lpDelimiter, bool bProcSpecialCharacter=false ); extern bool g_bUserCamMode; extern KPoint g_Help_url; extern KPoint g_Cash_url; extern KPoint g_Cash_add_url; extern SGameSystem* g_pCurrentGameSystem; namespace { const int c_nScreenNormalW = 1024; const int c_nScreenNormalH = 768; const int c_nCharWindowMoveMargin = 16; const int c_nCharWindowPos = 50; const char* c_szChatMessageTag = ""; const char* c_szMarkAniName00 = "static_playerselect_over00"; const char* c_szMarkAniName01 = "static_playerselect_over01"; const char* c_szMarkAniName02 = "static_playerselect_over02"; // Game Window const char* c_szWindowsName[TOGGLE_WINDOW::UIWINDOW_LAST] = { "window_lobby_login.nui", //UIWINDOW_LOGIN 0 "window_lobby_login_logo.nui", //UIWINDOW_LOGIN_LOGO 1 "", //UIWINDOW_NOTIFY 2 "window_main_minimap.nui", //UIWINDOW_MINIMAP 3 "window_lobby_character_admin.nui", //UIWINDOW_CHARSELECT 4 "window_lobby_character_create.nui", //UIWINDOW_CREATECHAR 5 "window_lobby_server_list.nui", //UIWINDOW_SERVERLIST 6 "window_lobby_server_notice.nui", //UIWINDOW_SERVERNOTICE 7 "window_lobby_clanselect.nui", //UIWINDOW_CLANSELECT 8 "window_main_player.nui", //UIWINDOW_MAINFRAME 9 "window_main_chat.nui", //UIWINDOW_CHATTING 10 "window_main_inventory_bag.nui", //UIWINDOW_INVENTORY 11 "", //UIWINDOW_TARGET 12 "window_main_target_view.nui", //UIWINDOW_TARGETPORTRAIT 13 "window_main_simple_summon.nui", //UIWINDOW_CREATURE 14 "", //UIWINDOW_CONSOLE 15 "window_lobby_character_list.nui", //UIWINDOW_CHARNAMELIST 16 "window_lobby_character_name_tag.nui", //UIWINDOW_SELECTCHAR_INFO 17 "", //UIWINDOW_DEVOUTPUT 18 "window_main_menu.nui", //UIWINDOW_MAINMENU 19 "window_main_menu_sub.nui", //UIWINDOW_MAINMENU_SUB 20 "window_npc_talk.nui", //UIWINDOW_NPCDIALOG 21 "window_main_quickslot.nui", //UIWINDOW_HQUICKSLOT 22 "", //UIWINDOW_VQUICKSLOT 23 "", //UIWINDOW_HQUICKSLOTMENU 24 "window_system_number_input.nui", //UIWINDOW_INPUTNUMBER 25 "window_player_skill.nui", //UIWINDOW_SKILL 26 "window_player_skill_sub.nui", //UIWINDOW_SKILLFUND 27 "sys_menu.nui", //아직 없음UIWINDOW_SYSMENU 28 //"window_enchant.nui", //UIWINDOW_ITEMCOMBINE 29 "window_main_inventory_mix.nui", // UIWINDOW_ITEMCOMBINE 조합 윈도우. "window_donation_main.nui", //UIWINDOW_ITEMCONTRIBUTION 30 "window_business_shop.nui", //UIWINDOW_SHOP 31 "window_business_shop_sub.nui", //UIWINDOW_SHOPKART 32 "", //UIWINDOW_STORAGEKART 33 "window_main_state_h_effect.nui", //UIWINDOW_STATE_H_EFFECT 34 "window_main_state_h_effect.nui", //UIWINDOW_STATE_V_EFFECT 35 "window_operation.nui", //UIWINDOW_MOTION 36 "window_system_def.nui", //UIWINDOW_SYSTEM 37 "window_system_setup.nui", //UIWINDOW_SYSTEM_MAIN 38 "", //UIWINDOW_MOTION_NORMAL 39 "", //UIWINDOW_MOTION_PARTY 40 "", //UIWINDOW_MOTION_GESTURE 41 "", //UIWINDOW_SYSTEM_NORMAL 42 /// 2011.01.11 - prodongi "window_main_creature.nui", //UIWINDOW_CREATURE_MAIN 43 "window_summon_formation.nui", //UIWINDOW_CREATUREFORM 44 "window_business_trade.nui", //UIWINDOW_TRADE 45 /// 2011.02.09 - prodongi "window_player_character_info_main.nui", //UIWINDOW_CHARINFO 46 "window_player_character_info_sub_basic.nui",//UIWINDOW_CHARINFO_SUB_BASIC 47 "window_player_character_info_sub_added.nui",//UIWINDOW_CHARINFO_SUB_ADDED 47 "window_summon_info.nui", //UIWINDOW_CREATURE_PAGE 48 "window_summon_info_sub.nui", //UIWINDOW_CREATURE_DETAIL 49 "window_summon_skill.nui", //UIWINDOW_CREATURE_SKILL 50 "window_summon_skill_sub.nui", //UIWINDOW_CREATURE_SKILLFUND 51 "window_pet_skill.nui", //UIWINDOW_PET_COMMAND 52 //gmpbigsun(20130403) : #26729 펫 활성화 "window_player_party_base_screen.nui", //UIWINDOW_PARTY 53 "window_player_party_base_buff.nui", //UIWINDOW_PARTY_STATE 54 "window_business_warehouse.nui", //UIWINDOW_STORAGE 55 // { [ [sonador][3.1.2]경매장 구현 "window_system_auction.nui", //UIWINDOW_AUCTION 56 "", //UIWINDOW_AUCTION_SEARCH 57 "", //UIWINDOW_AUCTION_REGISTER 58 "", //UIWINDOW_AUCTION_TENDER 59 "", //UIWINDOW_AUCTION_DEPOSIT 60 // } [ [sonador][3.1.2]경매장 구현 "window_system_text_input_box.nui", //UIWINDOW_INPUTTEXT 61 // 2011.09.01 - servantes "window_player_party_submenu.nui", //UIWINDOW_PARTY_MENU 62 "window_player_party_submenu_rclick_titlebar.nui", // UIWINDOW_PARTY_RMENU "window_player_party_submenu_rclick_creature.nui", //UIWINDOW_POPUP_PARTY_MENU_CREATURE 63 //"window_main_quickslot_summon.nui", //UIWINDOW_CREATURE_HQUICK 64 "window_world_map.nui", //UIWINDOW_WORLDMAP 65 "window_main_chat_sub.nui", //UIWINDOW_CHAT_OPTION 66 "window_target_state_h_effect.nui", //UIWINDOW_TARGET_STATE 67 "window_business_booth_create.nui", //UIWINDOW_STORE_HOST 68 "window_business_booth_exchange.nui", //UIWINDOW_STORE_CLIENT 69 "window_quest_list_main.nui", //UIWINDOW_QUEST_LIST 70 "window_quest_info.nui", //UIWINDOW_QUEST_INFO 71 "window_quest_reward.nui", //UIWINDOW_QUEST_REWARD 72 "window_area_title.nui", //UIWINDOW_LOCAL_SIGN 74 "window_player_party_create.nui", //UIWINDOW_PARTY_CREATE 75 "", //UIWINDOW_PARTY_INVITE 76 "window_Socket.nui", //UIWINDOW_JEWEL_EQUIP 77 "window_SoulCharge.nui", //UIWINDOW_SOUL_CHARGE 78 "window_dungeon_stone.nui", //UIWINDOW_DUNGEON_STONE 79 "window_dungeon_siege_team_list_max.nui", //UIWINDOW_DUNGEON_UNIT 80 "window_system_license.nui", //UIWINDOW_LICENSE 81 "window_messenger.nui", //UIWINDOW_COMMUNITY 82 "", //UIWINDOW_GUILD 83 "window_messenger_friend.nui", //UIWINDOW_FRIEND 84 "window_messenger_cut.nui", //UIWINDOW_CUT 85 "window_lobby_character_customizing.nui", //"window_lobby_character_create01.nui", //UIWINDOW_CREATECHAR_SECOND 86 "window_lobby_screen_admin.nui", //UIWINDOW_CREATECHAR_ROTATE00 87 "", //더 이상 사용 안함. UIWINDOW_CREATECHAR_ROTATE01 88 "", //UIWINDOW_NOTICE 89 "", //UIWINDOW_CHINAWARRING 90 "", //UIWINDOW_WEBGAMESUTDOWN 91 "window_fulldown_player.nui", //UIWINDOW_FULLDOWN_PLAYER 92 "window_fulldown_target_player.nui", //UIWINDOW_FULLDOWN_TARGETPLAYER 93 "window_fulldown_target_monster.nui", //UIWINDOW_FULLDOWN_TARGETMONSTER 94 "window_fulldown_minimap.nui", //UIWINDOW_FULLDOWN_MINIMAP 95 "window_fulldown_itemdrop.nui", //UIWINDOW_FULLDOWN_ITEMDROP 96 "window_fulldown_creature.nui", //UIWINDOW_FULLDOWN_CREATURE 97 // servnates - 2011.08.29 : window_business_cash.nui -> window_main_inventory_sub_cart.nui "window_main_inventory_sub_cart.nui", // "window_business_cash.nui", //UIWINDOW_CASH_STORAGE 98 수령함. "window_lobby_character_create_2.nui", //UIWINDOW_CREATECHAR_BOTTOM 99 "window_lobby_character_create01_2.nui", //UIWINDOW_CREATECHAR_SECOND_BOTTOM 100 "window_cash01.nui", //UIWINDOW_CASH_TITLE 101 "window_guild_bar.nui", //UIWINDOW_GUILD_TITLE 102 "window_system_resurrect.nui", //UIWINDOW_RESURRECT 103 "window_system_recall.nui", //UIWINDOW_RECALL 104 "window_help_bar.nui", //UIWINDOW_HELP_TITLE 105 "window_popurl_bar.nui", //UIWINDOW_POPURL_TITLE 106 "window_lobby_gamerating.nui", //UIWINDOW_GAME_RATING 107 "window_lobby_gamerating_18only.nui", //UIWINDOW_GAME_RATING_18ONLY 108 "", //UIWINDOW_SCREENSHOT 109 "window_lobby_clan_main.nui", //UIWINDOW_RACE_SELECT 110 "",//"window_lobby_racetext_select.nui", //UIWINDOW_RACE_TEXT 111 "window_lobby_clan_sub.nui", //UIWINDOW_RACE_DESC 112 "", //UIWINDOW_EFFECT_FOCUS 113 "", //UIWINDOW_LOADING 114 // 2010.08.03 - prodongi //"window_creaturecard.nui", //UIWINDOW_CREATURE_CARD 115 //"window_creaturecard_sub.nui", //UIWINDOW_CREATURE_CARD_SUB 116 "window_creature_card_front.nui", //UIWINDOW_CREATURE_CARD_FRONT 115 "window_creature_card_back.nui", //UIWINDOW_CREATURE_CARD_BACK 116 "window_SkinColor.nui", //UIWINDOW_SKIN_COLOR 117 "window_donation_msgbox.nui", //UIWINDOW_CONTRIBUTION_MSGBOX 118 "window_lobby_gamerating_15years.nui", //UIWINDOW_KOREAWARRING_GRADE_15 119 "window_lobby_gamerating_18years.nui", //UIWINDOW_KOREAWARRING_GRADE_18 120 "window_grade_language.nui", //UIWINDOW_KOREAWARRING_VIO_LAN 121 "window_lobby_lock_create.nui", //UIWINDOW_SECURITYSETTING 122 "window_lobby_lock_change.nui", //UIWINDOW_SECURITYSETTINGMODIFY 123 "window_lobby_lock_question01.nui", //UIWINDOW_SECURITYCHARACTER 124 "window_lock_question02.nui", //UIWINDOW_SECURITYSTORAGE 125 "window_in_game_logout.nui", //UIWINDOW_IN_GAME_LOGOUT 126 "", //UIWINDOW_TEST 127 "window_main_target_submenu_rclick.nui", //UIWINDOW_TARGET_WND_ADDON 128 "window_inventory_wnd_addon.nui", //UIWINDOW_INVENTORY_WND_ADDON 129 "window_lobby_pubilshed_logo.nui", //UIWINDOW_LOGIN_PUBLISHER 130 // sonador #2.3.3.4 (국내) copy rights 변경 "window_bearload_robby.nui", //UIWINDOW_HUNTAHOLIC_LOBBY, 131 // #2.1.2.11.1 "window_bearload_robby_ready.nui", //UIWINDOW_HUNTAHOLIC_INSTANCE 132 "window_bearload_time_point.nui", //UIWINDOW_HUNTAHOLIC_SCOREBOARD 133 "window_bearload_room_complete_result.nui", //UIWINDOW_HUNTAHOLIC_RESULT 134 "window_bearload_room_make.nui", //UIWINDOW_HUNTAHOLIC_CREATE_INSTANCE, 135 "window_bearload_room_number.nui", //UIWINDOW_HUNTAHOLIC_CONFIRM_PASSWORD, 136 "window_main_taskbar.nui", //UIWINDOW_TASKBAR 137 "window_system_namechange.nui", //UIWINDOW_CHANGE_NAME, 138 // sonador #2.1.24 "window_ip_block_box.nui", //UIWINDOW_IP_BLOCK 139 // floyd 2008. 12. 25 "window_quest_infopaper.nui", //UIWINDOW_BADGE 140 // hunee 2009-03-02 "window_player_pvp_rebirth.nui", //UIWINDOW_RESURRECT_PVP 141 // kappamind. 2009.03.10 "window_donation_ranking.nui", //UIWINDOW_CONTRIBUTION_RANKING 142 // kappamind. 2009.04.02 "window_donation_msgbox_rankingitem.nui", //UIWINDOW_CONTRIBUTION_REWARD_CONFIRM 143 // 정동섭 2009.4.21 "window_lobby_login_logo_subtitle.nui", //UIWINDOW_LOGIN_SUBTITLE 144 // 로비리뉴얼관련 추가 sfreer 2009.06.05 "window_lobby_login_sub.nui", //UIWINDOW_LOGIN_SUBMENU 145 // 로비리뉴얼관련 추가 sfreer 2009.06.05 "window_lobby_copyright_logo.nui", //UIWINDOW_LOGIN_COPYRIGHT_LOGO 146 //로그인시 화면 우측 하단에 나오는 nflavor로고 sfreer 2009.06.05 "window_lobby_login_text.nui", //UIWINDOW_LOGIN_TEXT 147 // 로비리뉴얼관련 추가 sfreer 2009.06.05 "window_lobby_gamerating.nui", //UIWINDOW_LOGIN_GAMERATING 148 // 로비리뉴얼관련 추가 sfreer 2009.06.05 "window_lobby_credit_sub.nui", //UIWINDOW_CREDIT 149 "window_lobby_credit_text.nui", //UIWINDOW_CREDIT_TEXT 150 "window_lobby_server_sub.nui", //UIWINDOW_SERVERMENU 151 서버 선택시 하단 메뉴 "window_lobby_server_screenshot.nui", //UIWINDOW_SERVERSCREENSHOT 152 스크린샷출력시 테두리 실제 스크린샷은 UIWINDOW_SCREENSHOT에서 처리한다. "window_lobby_server_text.nui", //UIWINDOW_SERVERTEXT 153 "window_lobby_lock_clear.nui", //UIWINDOW_SECURITYCLEAR 154 "window_lobby_character_choice_text.nui", //UIWINDOW_CHARSELECTTEXT 155 "", //UIWINDOW_ENDING 156 "window_lobby_intro_sub.nui", //UIWINDOW_INTRO_SUB 157 "", //UIWINDOW_PROTECTSOLUTION "window_instance_entrance.nui", //UIWINDOW_INSTANCE_ENTRANCE "window_instance_main.nui", //UIWINDOW_INSTANCE_TASKBAR_ENTRANCE //"window_instance_warrecord.nui", //UIWINDOW_INSTANCE_WARRECORD /// 2011.05.26 안쓰임 - prodongi "window_copyrights_marking01.nui", //UIWINDOW_COPYRIGHTS_MARKING01 "window_copyrights_marking02.nui", //UIWINDOW_COPYRIGHTS_MARKING02 // 길드 GUILD UI. // bintitle //"window_guild_main.nui", // UIWINDOW_GUILD_MAINWND "window_guild_main.nui", // UIWINDOW_GUILD_MAINWND "window_guild_sub_info.nui", // UIWINDOW_GUILD_SUB_INFO "window_guild_sub_manage.nui", // UIWINDOW_GUILD_SUB_MANAGE "window_guild_sub_master_class_manage.nui", //UIWINDOW_GUILD_SUB_MASTER "window_guild_main_member_list.nui", //"_____window_messenger_guild_tap_guildmember.nui", // UIWINDOW_GUILD_MAIN_TAP_MEMBER "window_community_content_box.nui", // UIWINDOW_MEMOWND // 길드관리 - 패널윈도우 //"___window_guild_sub_manage_oneself.nui", // UIWINDOW_GUILD_SUB_MANAGE_PANEL_ONESELF //"___window_guild_sub_manage_mark.nui", // UIWINDOW_GUILD_SUB_MANAGE_PANEL_MARK "window_guild_sub_manage_persnal.nui", // Panel 나의관리 "window_guild_sub_manage_guildmark.nui", // Panel 길드마크넣기 "window_guild_sub_manage_member.nui", // Panel 길드원 관리 "window_guild_sub_manage_team.nui", // Panel 공격대 결성 "window_guild_sub_manage_classname.nui", // Panel 길드등급 명칭 "window_guild_sub_manage_invitation.nui", // Panel 길드원 가입 "window_guild_sub_manage_notice.nui", // Panel 길드 공지 "window_guild_sub_manage_donate.nui", // Panel // 길드마스터 - 패널윈도우 "window_guild_sub_master_tab_class_manage_panel_class.nui", // UIWINDOW_GUILD_SUB_MASTER_PANEL_CLASS1 // 길드맴버관련 팝업윈도우. "window_guild_submenu_rightclick.nui", // UIWINDOW_GUILD_SUBMENU_RIGHTCLICK // 길드관리 - 길드원가입 - 길드초대 윈도우. "window_guild_msgbox_invitation.nui", // UIWINDOW_GUILD_SUB_MANAGE_INVITATION // 길드관리 - 길드원관리 - 길드원등급 윈도우. "window_guild_msgbox_class_manage.nui", // UIWINDOW_GUILD_SUB_MANAGE_CLASS // 길드등급 팝업윈도우. "window_guild_submenu_class_rightclick.nui",// UIWINDOW_GUILD_SUBMENU_CLASS_RIGHTCLICK // 길드원제명 팝업윈도우. "window_guild_msgbox_dismiss.nui", // UIWINDOW_GUILD_SUB_MANAGE_EXPULSION // 연합길드 정보 팝업 윈도우 "window_guild_sub_info_alliance.nui", // UIWINDOW_GUILD_SUB_INFO_ALLIANCE // 길드장인계 팝업 윈도우. "window_guild_msgbox_appoint.nui", // UIWINDOW_GUILD_SUB_MASTER_PROMOTE // 길드장인계 팝업 윈도우. "window_dungeon_msgbox_siege_team_organize.nui", // UIWINDOW_GUILD_SUB_MANAGE_TEAM /// 2011.10.17 파일명 바뀐 // 공격대 도움말 팝업 윈도우. "window_guild_sub_help_team.nui", //UIWINDOW_GUILD_SUB_MANAGE_TEAM_HELP // 장비. // 인벤토리에 붙어있던걸 따로 분리한다( 인벤토리 리뉴얼 ). 2010.07.23. bintitle. "window_main_inventory_equip.nui", // UIWINDOW_EQUIPMENT, 2010.11.10. servantes // "window_main_inventory_character.nui", // UIWINDOW_EQUIPMENT, // 장비창의 우클릭메뉴. "window_main_inventory_submenu_rightclick.nui", // UIWINDOW_EQUIPMENT_POPUP, SUIPopupEquip // 아이템 파괴 윈도우. "window_main_inventory_sub_break.nui", // UIWINDOW_DESTRUCTION 파괴창. "window_monster_card_boss_front.nui", // UIWINDOW_BOSS_MONSTER_CARD 2010.08.06 - prodongi "window_main_inventory_sub_repairviewer.nui", // 내구도출력UI. UIWINDOW_DURABILITY "window_main_inventory_mixlist.nui", // 공식 리스트 윈도우. "window_main_inventory_enchant.nui", // 아이템강화 윈도우.UIWINDOW_UPGRADE "window_main_inventory_repair.nui", // 아이템수리 윈도우. UIWINDOW_REPAIR "window_main_inventory_sub_progress.nui", // 아이템수리 윈도우. UIWINDOW_MIX_PROGRESS "window_help.nui", // 도움말 출력 윈도우. UIWINDOW_HELP_WND, "window_creature_farm.nui", // 크리처 농장. UIWINDOW_CREATURE_FRAM_WND, //servantes 2011.01.17 "window_creature_farm_help.nui", // 크리처 농장 도움말. UIWINDOW_CREATURE_FRAM_HELP_WND, //servantes 2011.02.17 /// 2011.02.16 - prodongi "window_main_inventory_msgbox_charge.nui", /// 충전 확인 창. UIWINDOW_RECHARGE_MSGBOX, "window_dungeon_target_entrance.nui", // 인스턴스 던전 입장 UI UIWINDOW_MISSION_ENTERANCE_WND, // servantes 2011.06.30 "window_dungeon_target_title.nui", // 인스턴스 던전 제목 UI UIWINDOW_MISSION_TITLE_WND, // servantes 2011.06.30 "window_player_party_submenu_rclick_character.nui", // 우클릭 팝업 캐릭터 메뉴 UI UIWINDOW_POPUP_PARTY_MENU_CHARACTER, // servantes 2011.09.16 "window_dungeon_siege_team_list_min.nui", // 공격대 미니창 UIWINDOW_DUNGEON_UNIT_MINI // 2011. 10. 10 - marine "window_raid_siege_status.nui", /// UIWINDOW_RAID_SIEGE_STATUS 2011.10.12 레이드 시즈 상태 창 - prodongi "window_dungeon_msgbox_siege_team_invitation.nui", // 공격대 공격대 파티 초대창 UIWINDOW_DUNGEON_UNIT_INVITATION // 2011. 10. 20 - marine "window_dungeon_siege_team_list_viewer.nui" , // 길드멤버 리스트(초대용) UIWINDOW_GUILD_MEMBER_LIST // 2011. 10. 26 - marine "window_mission_main.nui", /// 2011.11.29 미션 창 - prodongi "window_title_main.nui", // 2012. 4. 4 marine - 호칭창 "window_title_gain_result.nui", // 2012. 4. 4 marine - 호칭획득시 알림창 "window_instance_arena_tooltip.nui", /// UIWINDOW_ARENA_GUIDE_TOOLTIP 2012.04.26 유도 툴팁 - prodongi "window_system_main_message_base.nui", /// UIWINDOW_ANNOUNCE 2012.04.30 중앙 공지 창 - prodongi "window_main_notification.nui", /// UIWINDOW_NOFITICATION 2012.05.04 알림 창 - prodongi "window_instance_arena_main.nui", /// UIWINDOW_ARENA_MENU 2012.05.02 - prodongi "window_instance_arena_sub_ready.nui", /// UIWINDOW_ARENA_SELECTION_READY 2012.05.02 - prodongi "window_instance_arena_sub_practice.nui", /// UIWINDOW_ARENA_PRACTICE_READY 2012.05.02 - prodongi "window_instance_arena_sub_standby.nui", /// UIWINDOW_ARENA_WAITING 2012.05.02 - prodongi "window_instance_arena_sub_practice_standby.nui", /// UIWINDOW_ARENA_PRACTICE_WAITING 2012.05.02 - prodongi "window_instance_arena_game_classic.nui", /// UIWINDOW_ARENA_GAME_CLASSIC 2012.05.02 - prodongi "window_instance_arena_game_slaughter.nui", /// UIWINDOW_ARENA_GAME_SLAUGHTER 2012.05.02 - prodongi "window_instance_arena_game_bingo.nui", /// UIWINDOW_ARENA_GAME_BINGO 2012.05.02 - prodongi "window_instance_arena_game_bingo_panel.nui", /// UIWINDOW_ARENA_GAME_BINGO_BOARD 2012.05.02 - prodongi "window_instance_arena_game_slaughter_practice.nui", /// UIWINDOW_ARENA_GAME_SLAUGHTER_PRACTICE 2012.05.02 - prodongi "window_instance_arena_game_status.nui", /// UIWINDOW_ARENA_RESULT 2012.05.02 - prodongi "window_instance_arena_sub_dive.nui", /// UIWINDOW_ARENA_REPORT_DIVE 2012.05.31 - prodongi "window_inventory_sub_awaken.nui", // 각성 창 - ( UIWINDOW_AWAKENING ) "window_sub_inventory_decompose.nui", // 분해 창 - ( UIWINDOW_DECOMPOSITION ) - lenahyang "window_main_target_player.nui", // 타겟 창 - 플레이어 ( UIWINDOW_TARGET_PLAYER ) - lenahyang "window_main_target_creature_monster.nui", // 타겟 창 - 크리쳐 ( UIWINDOW_TARGET_CREATURE ) - lenahyang "window_main_target_npc.nui", // 타겟 창 - NPC( UIWINDOW_TARGET_NPC ) - lenahyang "window_main_target_prop.nui", // 타겟 창 - 퀘스트 프랍( UIWINDOW_TARGET_PROP ) - lenahyang "window_partymatching.nui", // UIWINDOW_PARTYMATCHING "window_partymatching_register.nui", // UIWINDOW_PARTYMATCHING_REGISTER }; const char* c_szLoginNameWithOTP = "window_lobby_login_otp.nui"; //OTP 추가된 로그인 const char* c_szGuildName = "window_messenger_guild.nui"; //길드 const char* c_szSystemEnvironment = "window_system_environment.nui"; const char* c_szSystemPlay = "window_system_play.nui"; const char* GetWindowsID( TOGGLE_WINDOW::_UIWINDOW_TYPE window_type ) { if( window_type >= TOGGLE_WINDOW::UIWINDOW_LOGIN && window_type < TOGGLE_WINDOW::UIWINDOW_LAST ) { return c_szWindowsName[window_type]; } return "error_window_id"; } TOGGLE_WINDOW::_UIWINDOW_TYPE GetWindowsType( const char* szWindowName ) { for( int x = 0; x < TOGGLE_WINDOW::UIWINDOW_LAST; ++x ) { if( ::_stricmp( c_szWindowsName[x], szWindowName ) == 0 ) { return (TOGGLE_WINDOW::_UIWINDOW_TYPE)x; } } return TOGGLE_WINDOW::UIWINDOW_LAST; } ///////////////////////////////////////////////////////////////////// // const char* c_szMessageBoxName[SIMSG_REQ_OPEN_MSGBOX::MSGBOX_MAX] = { "msgbox_notuse", //MSGBOX_NOTUSE "msgboxGeneral", //MSGBOX_GENERAL "msgboxExitGame", //MSGBOX_EXITGAME "msgboxAlreadyexist", //MSGBOX_ALREADYEXIST "msgboxNoConnectServer", //MSGBOX_NOCONNECTSERVER "msgboxServerLimitMax", //MSGBOX_SERVERLIMITMAX "msgboxDeleteCharCheck", //MSGBOX_DELETECHARCHECK "msgboxDeleteCharWait", //MSGBOX_DELETECHARWAIT // #2.1.2.8.3 sonador "msgboxItemDropCheck", //MSGBOX_ITEMDROPCHECK "msgboxPartyJoinCheck", //MSGBOX_PARTYJOINCHECK "msgboxPartyArenaOpponentJoinCheck", //MSGBOX_PARTYARENAOPPONENTJOINCHECK "msgboxPartyArenMemberJoinCheck", //MSGBOX_PARTYARENAMEMBERJOINCHECK "msgboxGuildJoinCheck", //MSGBOX_GUILDJOINCHECK "msgboxTradeJoinCheck", //MSGBOX_TRADEJOINCHECK "msgboxTradeFreezeCheck", //MSGBOX_TRADEFREEZECHECK "msgboxPartyDestroyCheck", //MSGBOX_PARTYDESTROYCHECK "msgboxPartyKickMemberCheck", //MSGBOX_PARTYKICKMEMBERCHECK "msgboxGiveupQuest", //MSGBOX_GIVEUPQUEST "msgboxDead", //MSGBOX_DEAD "msgboxOptionApply", //MSGBOX_OPTION_APPLY "msgboxLoginWaiting", //MSGBOX_LOGINWAITING "msgboxCashShopOpen", //MSGBOX_CASHSHOP_OPEN "msgboxstorepriceover", //MSGBOX_STORE_PRICE_OVER "msgboxstorepriceunder", //MSGBOX_STORE_PRICE_UNDER "msgboxstoreweightover", //MSGBOX_STORE_WEIGHT_OVER "msgboxbaduserwarning", //MSGBOX_BAD_USER_WARNING "msgboxsellwarning", //MSGBOX_SELL_WARNING "msgboxselectserver", //MSGBOX_SELECT_SERVER "msgboxcontributionrewarddisable", //MSGBOX_CONTRIBUTION_REWARD_DISABLE "msgboxbattleaccept", //MSGBOX_BATTLE_ACCEPT "msgboxallianceaccept", //MSGBOX_ALLIANCE_ACCEPT "msgboxjewelequip", //MSGBOX_JEWEL_EQUIP "", //MSGBOX_RESTART_GAME "msgboxAuctionDeregister", //MSGBOX_AUCTION_DEREGISTER // [sonador][3.1.2]경매장 구현 "msgboxHuntaHolicScoreBoard", //MSGBOX_HUNTAHOLIC_SCOREBOARD // #2.1.2.11.1 "msgboxHuntaHolicMaxPoint", //MSGBOX_HUNTAHOLIC_MAXPOINT // #2.1.2.11.5 "msgboxdungeonstonerequest", //MSGBOX_DUNGEONSTONE_REQUEST "msgboxdungeonstonecancel", //MSGBOX_DUNGEONSTONE_CANCEL "msgboxraidguildinvite", //MSGBOX_RAID_GUILD_INVITE "msgboxraidmercenaryinvite", //MSGBOX_RAID_MERCENARY_INVITE "msgboxdungeonraidconfirm", //MSGBOX_DUNGEON_RAID_CONFIRM "msgboxSecuritysetting_succes", //MSGBOX_SECURITYSETTING_SUCCES "msgboxSecuritysetting_failed", //MSGBOX_SECURITYSETTING_FAILED "msgboxSecuritysettingmodify_succes", //MSGBOX_SECURITYSETTINGMODIFY_SUCCES "msgboxSecuritysettingmodify_failed", //MSGBOX_SECURITYSETTINGMODIFY_FAILED "msgboxSecuritycharacter_failed", //MSGBOX_SECURITYCHARACTER_FAILED "msgboxSecuritystorage_failed", //MSGBOX_SECURITYSTORAGE_FAILED "msgboxSecuritycharacter_access_denied",//MSGBOX_SECURITYCHARACTER_ACCESS_DENIED "msgboxSecurityclear_succes", //MSGBOX_SECURITYCLEAR_SUCCES "msgboxSecurityclear_failed", //MSGBOX_SECURITYCLEAR_FAILED "msgboxSecurityclear_impossible", //MSGBOX_SECURITYCLEAR_IMPOSSIBLE "", //MSGBOX_HS_DETECT_ALREADYHOOKED "msgboxdetect_automouse", //MSGBOX_HS_DETECT_AUTOMOUSE "msgboxdetect_hookfunction", //MSGBOX_HS_DETECT_HOOKFUNCTION "msgboxdetect_driverfailed", //MSGBOX_HS_DETECT_DRIVERFAILED "msgboxdetect_speedhack", //MSGBOX_HS_DETECT_SPEEDHACK "msgboxdetect_speedhack_app", //MSGBOX_HS_DETECT_SPEEDHACK_APP "msgboxdetect_messagehook", //MSGBOX_HS_DETECT_MESSAGEHOOK "msgboxdetect_kdtrace", //MSGBOX_HS_DETECT_KDTRACE "msgboxdetect_kdtrace_changed", //MSGBOX_HS_DETECT_KDTRACE_CHANGED "", //MSGBOX_HS_DETECT_SPEEDHACK_RATIO "msgboxdetect_game_hack", //MSGBOX_HS_DETECT_GAME_HACK "msgboxdetect_general_hack", //MSGBOX_HS_DETECT_GENERAL_HACK "msgboxdetect_module_change", //MSGBOX_HS_DETECT_MODULE_CHANGE "msgboxdetect_automacro", //MSGBOX_HS_DETECT_AUTOMACRO // sonador 7.4.1 AHNHS_ACTAPC_DETECT_AUTOMACRO 관련 callback 처리 "", //MSGBOX_HS_DETECT_ENGINEFAILED // #2.3.2.7 sonador "", //MSGBOX_HS_DETECT_CODEMISMATCH /// 2012.04.24 해당 스트링이 없어서 ok 버튼을 눌러도 게임 종료가 안되고 있었다 - prodongi "", //MSGBOX_NP_COMM_ERROR "", //MSGBOX_NP_COMM_CLOSE "", //MSGBOX_NP_INIT_ERROR "", //MSGBOX_NP_SPEEDHACK "msgbox_np_gamehack_killed", //MSGBOX_NP_GAMEHACK_KILLED "msgbox_np_gamehack_detect", //MSGBOX_NP_GAMEHACK_DETECT "", //MSGBOX_NP_GAMEHACK_DOUBT "msgboxdeatchmatch_freed_enter", //MSGBOX_DEATHMATCH_FREED_ENTER "msgboxdeatchmatch_ranked_enter", //MSGBOX_DEATHMATCH_FREED_ENTER "msgboxdeatchmatch_exit", //MSGBOX_DEATHMATCH_EXIT "msgboxsecretdungenconfirm", //MSGBOX_SECRET_DUNGEON_CONFIRM // 2010.05.12 - prodongi "msgboxusehairitem", //MSGBOX_USE_HAIR_ITEM "msgboxguild_secession", //MSGBOX_GUILD_SECESSION "msgboxGuildYes", //MSGBOX_GUILD_YES "msgboxGuildOkCancel", //MSGBOX_GUILD_OKCANCEL "msgboxGuild_expulsion", //MSGBOX_GUILD_EXPULSION "msgboxGuild_destroy", // MSGBOX_GUILD_DESTROY "msgboxGuild_promote", // MSGBOX_GUILD_PROMOTE "msgboxGuild_team", //MSGBOX_GUILD_TEAM "msgboxGuild_buff", //MSGBOX_GUILD_BUFF "msgboxGuild_donate" //MSGBOX_GUILD_DONATE "msgboxGuild_upgrade", //MSGBOX_GUILD_UPGRADE // 2010.06.23 - prodongi "msgbox_loginerr", //MSXBOX_LOGIN_ERR "msgbox_itemdestruction", // MSGBOX_ITEMDESTRUCTION, // 아이템파괴. "msgbox_creatureFarmAssign", // MSGBOX_CREATURE_FARM_ASSIGN_OKCANCEL, // 크리처 농장 맡기기 2011.03.07 servantes "msgbox_creatureFarmRegain", // MSGBOX_CREATURE_FARM_REGAIN_OKCANCEL, // 크리처 농장 맡기기 2011.03.07 servantes "msgbox_creatureFarmDoNotAssign1", // MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN1, // 크리처 농장 맡기기 2011.05.16 servantes "msgbox_creatureFarmDoNotAssign2", // MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN2, // 크리처 농장 맡기기 2011.05.16 servantes "msgbox_creatureFarmDoNotAssign3", // MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN3, // 크리처 농장 맡기기 2011.05.16 servantes "msgbox_creatureFarmDoNotAssign4", // MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN4, // 크리처 농장 맡기기 2011.05.16 servantes // 2011.07.06 - servantes "msgbox_instance_dungeon_enterance", // XX던전으로 이동하겠습니까 "msgbox_instance_dungeon_exit", // XX던전에서 퇴장하시겠습니까 "msgbox_instance_dungeon_exit2", // XX던전에서 나가겠습니까 "msgbox_instance_dungeon_confirm", // MSGBOX_INSTANCE_DUNGEON_CONFIRM "msgbox_compose_raid", // 레이드를 구성하시겠습니까? "msgbox_scriptshowwindow_confirm", /// MSGBOX_SCRIPT_SHOW_CONFIRM "msgbox_arena_waiting_exit", /// MSGBOX_ARENA_WAITING_EXIT, "msgbox_arena_practice_waiting_exit", /// MSGBOX_ARENA_PRACTICE_WAITING_EXIT, "msgbox_arena_practice_exit", /// MSGBOX_ARENA_PRACTICE_EXIT, "msgbox_arena_game_exit", /// MSGBOX_ARENA_GAME_EXIT, "msgbox_Decomposition_Confirm_Append", // 분해 - 아이템 등록 "msgbox_Decomposition_Comfirm_Do", // 분해 - 전체 분해 "msgbox_GeneralAndHttpLink", // MSGBOX_GENERAL_AND_HTTP_LINK, // 웹젠 통합관련 메시지 박스 타입 }; const char* GetMessageBoxID( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID MsgBoxID ) { if( MsgBoxID >= SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOTUSE && MsgBoxID < SIMSG_REQ_OPEN_MSGBOX::MSGBOX_MAX ) { return c_szMessageBoxName[MsgBoxID]; } return "err_not_found_msg_box"; } inline bool CompareMessageBoxID( const char* szMsgBoxID, SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID MsgBoxID ) { if( 0 == ::_stricmp( szMsgBoxID, GetMessageBoxID( MsgBoxID ) ) ) return true; return false; } SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID FindMessageBoxID( const char* szMsgBoxID ) { for( int strt_id = 0 ; strt_id < SIMSG_REQ_OPEN_MSGBOX::MSGBOX_MAX; ++strt_id ) { if( CompareMessageBoxID( szMsgBoxID, (SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID)strt_id ) ) return (SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID)strt_id; } return SIMSG_REQ_OPEN_MSGBOX::MSGBOX_MAX; } ///////////////////////////////////////////////////////////////////// //Addon Window 관련 TOGGLE_WINDOW::_UIWINDOW_TYPE GetAddonWindowsType( const char* szWindowName ) { for( int x = TOGGLE_WINDOW::UIWINDOW_TARGET_WND_ADDON; x < TOGGLE_WINDOW::UIWINDOW_LAST; ++x ) { if( c_szWindowsName[x] != NULL && ::_stricmp( c_szWindowsName[x], szWindowName ) == 0 ) { return (TOGGLE_WINDOW::_UIWINDOW_TYPE)x; } } return TOGGLE_WINDOW::UIWINDOW_LAST; } const char* c_szAddonWindowsPosition[ADDON_WINDOW_POSITION::USER_INPUT_POSTION] = { "mouse", "center_h", "center_v", "left_in", "left_out", "right_in", "right_out", "top_in", "top_out", "bottom_in", "bottom_out", }; ADDON_WINDOW_POSITION GetAddOnWindowPositionType( const char* szPositionName ) { for( int x = 0; x < ADDON_WINDOW_POSITION::USER_INPUT_POSTION; ++x ) { if( ::_stricmp( c_szAddonWindowsPosition[x], szPositionName ) == 0 ) { return (ADDON_WINDOW_POSITION)x; } } return USER_INPUT_POSTION; } bool GetAddOnWindowPosition( ADDON_WINDOW_POSITION type, int &val, KRect& main_rect, KRect& addon_rect ) { switch( type ) { case MOUSE_POSITION: return false; case CENTER_H_POSITION: { int main_center = main_rect.GetWidth() / 2; int addon_center = addon_rect.GetWidth() / 2; val = main_rect.left + ( main_center - addon_center ); }; break; case CENTER_V_POSITION: { int main_center = main_rect.GetHeight() / 2; int addon_center = addon_rect.GetHeight() / 2; val = main_rect.top + ( main_center - addon_center ); } break; case LEFT_IN_POSITION: { val = main_rect.left; }; break; case LEFT_OUT_POSITION: { val = main_rect.left - addon_rect.GetWidth(); }; break; case RIGHT_IN_POSITION: { val = main_rect.right - addon_rect.GetWidth(); }; break; case RIGHT_OUT_POSITION: { val = main_rect.right; }; break; case TOP_IN_POSITION: { val = main_rect.top; }; break; case TOP_OUT_POSITION: { val = main_rect.top - addon_rect.GetHeight(); }; break; case BOTTOM_IN_POSITION: { val = main_rect.bottom - addon_rect.GetHeight(); }; break; case BOTTOM_OUT_POSITION: { val = main_rect.bottom; } break; } return true; } }; const unsigned TYPE_MASK = 0xE0000000; const unsigned TYPE_SUMMON = 0xC0000000; const unsigned TYPE_PLAYER = 0x80000000; const unsigned TYPE_MONSTER = 0x40000000; const unsigned TYPE_MISC = 0x20000000; const unsigned TYPE_ITEM = 0x00000000; inline bool IsSummon ( AR_HANDLE uid ) { return TYPE_SUMMON == ( TYPE_MASK & uid ); } inline bool IsPlayer ( AR_HANDLE uid ) { return TYPE_PLAYER == ( TYPE_MASK & uid ); } inline bool IsItem ( AR_HANDLE uid ) { return TYPE_ITEM == ( TYPE_MASK & uid ); } inline bool IsMonster( AR_HANDLE uid ) { return TYPE_MONSTER == ( TYPE_MASK & uid ); } SGameInterface::SGameInterface() : m_pGameManager( NULL ) , m_pUIWndManager( new KUIWndManager ) , m_pDisplayInfo( new SUIDisplayInfo ) , m_hOldTarget( NULL ) , m_bShowCharWindow( true ) , m_bWarping( true ) , m_pLoadingWnd( NULL ) , m_pEndingWnd( NULL ) , m_pProtectSolutionWnd( NULL ) , m_pEffectFocusWnd( NULL ) , m_pFadeInOutEffectWnd( NULL ) , m_pWaitOpenURL( NULL ) , m_nCurrentLocation( PLAYER_IN_WORLD ) , m_nAddonWndRef( 0 ) , m_bBattleAccept( false ) , m_nCurrentSelectUI( 0 ) //servantes 2010.11.29 { m_vecOpenWindowList.clear(); m_bIsActive_Display_Process = false; m_pLocalSignWnd = NULL; m_nHeapMsgBox = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOTUSE; m_nDynamicWndCount = 0; m_pLoadingWnd = NULL; m_pEndingWnd = NULL; m_pProtectSolutionWnd = NULL; m_pEffectFocusWnd = NULL; if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::KR) { m_pKoreaWarringGrade_15 = NULL; m_pKoreaWarringGrade_18 = NULL; m_pKoreaWarringVioLan = NULL; m_dwShowKoreaWarringTime = 0; m_dwShowKoreaWarringLeaveTime = 0; } /// 2012.04.04 - prodongi m_passwordCount.clear(); } #ifdef _KUI_INVALIDATION // { [sonador] void SGameInterface::InvalidateAllWnd() { struct SUIWnd_Invalidator { void operator () ( SUIWnd* window ) { window->InvalidateWnd(); } }; struct CHARWINDOW_Invalidator { void operator () ( CHARWINDOW* cw ) { cw->pWnd->InvalidateWnd(); } }; std::for_each( m_sortUIWindowMap.begin(), m_sortUIWindowMap.end(), SUIWnd_Invalidator() ); std::for_each( m_sortDropItemWind.begin(), m_sortDropItemWind.end(), SUIWnd_Invalidator() ); std::for_each( m_sortGaugeWind.begin(), m_sortGaugeWind.end(), SUIWnd_Invalidator() ); std::for_each( m_sortCharacterWindow.begin(), m_sortCharacterWindow.end(), CHARWINDOW_Invalidator() ); if( GetWndManager() ) GetWndManager()->InvalidateAllWnd(); } void SGameInterface::ValidateAllWnd() { struct SUIWnd_Validator { void operator () ( SUIWnd* window ) { window->ValidateWnd(); } }; struct CHARWINDOW_Validator { void operator () ( CHARWINDOW* cw ) { cw->pWnd->ValidateWnd(); } }; std::for_each( m_sortUIWindowMap.begin(), m_sortUIWindowMap.end(), SUIWnd_Validator() ); std::for_each( m_sortDropItemWind.begin(), m_sortDropItemWind.end(), SUIWnd_Validator() ); std::for_each( m_sortGaugeWind.begin(), m_sortGaugeWind.end(), SUIWnd_Validator() ); std::for_each( m_sortCharacterWindow.begin(), m_sortCharacterWindow.end(), CHARWINDOW_Validator() ); if( GetWndManager() ) GetWndManager()->ValidateAllWnd(); } void SGameInterface::DeviceLostAllWnd() { struct SUIWnd_DeviceLost { void operator () ( SUIWnd* window ) { window->OnDeviceLost(); } }; struct CHARWINDOW_DeviceLost { void operator () ( CHARWINDOW* cw ) { cw->pWnd->OnDeviceLost(); } }; std::for_each( m_sortUIWindowMap.begin(), m_sortUIWindowMap.end(), SUIWnd_DeviceLost() ); std::for_each( m_sortDropItemWind.begin(), m_sortDropItemWind.end(), SUIWnd_DeviceLost() ); std::for_each( m_sortGaugeWind.begin(), m_sortGaugeWind.end(), SUIWnd_DeviceLost() ); std::for_each( m_sortCharacterWindow.begin(), m_sortCharacterWindow.end(), CHARWINDOW_DeviceLost() ); } // } #endif void SGameInterface::onDeviceLost() { SUIMinimapWnd* pMinimapWnd = (SUIMinimapWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP ); if( pMinimapWnd ) pMinimapWnd->OnDeviceLost(); SUIWorldMapWnd* pWorldmapWnd = (SUIWorldMapWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_WORLDMAP ); if( pWorldmapWnd ) pWorldmapWnd->OnDeviceLost(); if( m_pLoadingWnd ) ((SUILoadingWnd*)m_pLoadingWnd)->OnDeviceLost(); if( m_pEndingWnd ) ((SUIEndingWnd*)m_pEndingWnd)->OnDeviceLost(); // 2010.08.03 정리 - prodongi SUICreatureCardFrontWnd* pCreatureCardFrontWnd = (SUICreatureCardFrontWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_CARD_FRONT ); if( pCreatureCardFrontWnd ) pCreatureCardFrontWnd->OnDeviceLost(); #ifdef _KUI_INVALIDATION // { [sonador] initGUIViewport(); DeviceLostAllWnd(); // } #endif } void SGameInterface::ReSet() { m_hOldTarget = NULL; m_bShowCharWindow = true; m_bWarping = true; SAFE_DELETE( m_pWaitOpenURL ); destroyCharacterWnd(); destroyDropItemWnd(); destroyGaugeWnd(); m_pLocalSignWnd = NULL; m_nHeapMsgBox = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOTUSE; if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::KR) { m_dwShowKoreaWarringTime = 0; m_dwShowKoreaWarringLeaveTime = 0; } } SGameInterface::~SGameInterface() { destroyCharacterWnd(); destroyDropItemWnd(); destroyGaugeWnd(); destroySUIWnd(); SAFE_DELETE( m_pWaitOpenURL ); SAFE_DELETE( m_pEffectFocusWnd ); SAFE_DELETE( m_pLoadingWnd ); SAFE_DELETE( m_pEndingWnd ); SAFE_DELETE( m_pProtectSolutionWnd ); SAFE_DELETE( m_pFadeInOutEffectWnd ); //destroyDynamic for( unsigned int i(0); m_vDynamicWndList.size()>i; i++ ) { delete m_vDynamicWndList[i].pWnd; } m_vDynamicWndList.clear(); m_vecOpenWindowList.clear(); SAFE_DELETE( m_pDisplayInfo ); SAFE_DELETE( m_pUIWndManager ); m_popupList.clear(); /// 2011.11.09 - prodongi } void SGameInterface::SetShowEffectFocusWnd( bool bFlag ) { // if( m_pEffectFocusWnd ) m_pEffectFocusWnd->SetShow( bFlag ); if( bFlag ) { SIMSG_UI_SEND_DATA msg( TOGGLE_WINDOW::UIWINDOW_EFFECT_FOCUS, "alpha_open" ); if( m_pEffectFocusWnd ) m_pEffectFocusWnd->ProcMsgAtStatic( &msg ); } else { SIMSG_UI_SEND_DATA msg( TOGGLE_WINDOW::UIWINDOW_EFFECT_FOCUS, "alpha_close" ); if( m_pEffectFocusWnd ) m_pEffectFocusWnd->ProcMsgAtStatic( &msg ); } } void SGameInterface::SetShowProtectSolutionWnd( bool bFlag ) { if( m_pProtectSolutionWnd ) { if(bFlag) { SGame* pGame( m_pGameManager->GetActiveGame() ); if( !pGame || pGame->GetGameType() == GAME_TYPE_WORLD ) return; } ((SUIProtectSolutionWnd*)m_pProtectSolutionWnd)->MsgDelay(1000); m_pProtectSolutionWnd->SetShow(bFlag); } } void SGameInterface::SetShowEndingWnd( bool bFlag ) { if( m_pEndingWnd ) { if( bFlag ) { ((SUIEndingWnd*)m_pEndingWnd)->Start_ExitProcess(10000); m_pGameManager->AllStopSound( 500 ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_LOGO, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_SUBTITLE, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_PUBLISHER, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_COPYRIGHT_LOGO, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_GAMERATING, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_SUBMENU, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_TEXT, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN, false ) ); // 2010.07.14 엔딩화면에서 보여주므로 hide 시킨다 - prodongi m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING01, false ) ); //m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING01, true ) ); } //RefreshImage(); m_pEndingWnd->SetShow(bFlag); } } void SGameInterface::SetShowLoadingWnd( bool bFlag, unsigned int warpx, unsigned int warpy ) { if( m_pLoadingWnd ) { bool bShowKoreaWarring = false; if( bFlag ) { //_ASSERTE( _CrtCheckMemory( ) ); ((SUILoadingWnd*)m_pLoadingWnd)->RefreshImage(warpx, warpy); if( ((SUILoadingWnd*)m_pLoadingWnd)->IsShowKoreaWarring() ) { bShowKoreaWarring = true; } } /*else { ((SUILoadingWnd*)m_pLoadingWnd)->InitLoadingBar(); }*/ bool bView15 = false; bool bView18 = false; #ifndef _DEV //개발용 버전에선 보여주지 않는다. if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::KR) { if( bShowKoreaWarring ) { if( g_UserInfo.IsAdultServer() ) { //UIWINDOW_KOREAWARRING_GRADE_18 bView18 = true; ((SUILoadingWnd*)m_pLoadingWnd)->SetChangeKoreaWarringCaption( 136 ); ((SUILoadingWnd*)m_pLoadingWnd)->SetAdultMode( true ); SetShowKoreaWarring( KOREA_WARRING_GRADE_18, true ); } else { bView15 = true; //UIWINDOW_KOREAWARRING_GRADE_15 ((SUILoadingWnd*)m_pLoadingWnd)->SetChangeKoreaWarringCaption( 134 ); ((SUILoadingWnd*)m_pLoadingWnd)->SetAdultMode( false ); SetShowKoreaWarring( KOREA_WARRING_GRADE_15, true ); } } else { SetShowKoreaWarring( KOREA_WARRING_NONE ); } } #endif if(bFlag) { m_pGameManager->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_KOREAWARRING_GRADE_15, bView15 ) ); //게임 등급 m_pGameManager->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_KOREAWARRING_GRADE_18, bView18 ) ); //게임 등급 } else { m_pGameManager->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_KOREAWARRING_GRADE_15, false ) ); m_pGameManager->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_KOREAWARRING_GRADE_18, false ) ); } m_pLoadingWnd->SetShow( bFlag ); } } void SGameInterface::UpdateAddLoadingProcess(float UpdateAddLoadingProcess) { if (m_pLoadingWnd) ((SUILoadingWnd *)m_pLoadingWnd)->UpdateAddLoadingProcess(UpdateAddLoadingProcess); } void SGameInterface::InitLoadingBar() { if (m_pLoadingWnd) ((SUILoadingWnd *)m_pLoadingWnd)->InitLoadingBar(); } /*void SGameInterface::UpdateLoadingProgress(float fPercent) { // robypark 20081103 로딩화면 프로그래스바 if (m_pLoadingWnd) ((SUILoadingWnd *)m_pLoadingWnd)->UpdateLoadingProgress(fPercent); Sleep(10); }*/ void SGameInterface::SetShowKoreaWarring( int nType, bool bShow ) { switch( nType ) { case KOREA_WARRING_NONE: { if( m_pKoreaWarringGrade_15 ) m_pKoreaWarringGrade_15->SetShow( false ); if( m_pKoreaWarringGrade_18 ) m_pKoreaWarringGrade_18->SetShow( false ); //if( m_pKoreaWarringVioLan ) m_pKoreaWarringVioLan->SetShow( false ); } break; case KOREA_WARRING_GRADE_15: { if( m_pKoreaWarringGrade_15 ) m_pKoreaWarringGrade_15->SetShow( bShow ); if( m_pKoreaWarringGrade_18 ) m_pKoreaWarringGrade_18->SetShow( false ); //if( m_pKoreaWarringVioLan ) m_pKoreaWarringVioLan->SetShow( bShow ); } break; case KOREA_WARRING_GRADE_18: { if( m_pKoreaWarringGrade_15 ) m_pKoreaWarringGrade_15->SetShow( false ); if( m_pKoreaWarringGrade_18 ) m_pKoreaWarringGrade_18->SetShow( bShow ); //if( m_pKoreaWarringVioLan ) m_pKoreaWarringVioLan->SetShow( bShow ); } break; } } void SGameInterface::SetShowFadeInOutWnd( bool bFlag ) { if( m_pFadeInOutEffectWnd ) m_pFadeInOutEffectWnd->SetShow( bFlag ); } void SGameInterface::Initialize( SGameManager* pGameManager ) { SUIMinimapWnd::SetRenderDevice( (K3DRenderDeviceDX *)KDeviceManagerDX::GetDeviceManager()->GetRenderDevice() ); SUIWorldMapWnd::SetRenderDevice( (K3DRenderDeviceDX *)KDeviceManagerDX::GetDeviceManager()->GetRenderDevice() ); m_pGameManager = pGameManager; m_pDisplayInfo->SetGameManager( m_pGameManager ); #ifdef _KUI_INVALIDATION // { [sonador] initGUIViewport(); // } #endif InitInterface(); addSUIWnd( TOGGLE_WINDOW::UIWINDOW_NOTICE, CreateNoticeWnd() ); addSUIWnd( TOGGLE_WINDOW::UIWINDOW_NOTIFY, CreateNotifyWnd() ); addSUIWnd( TOGGLE_WINDOW::UIWINDOW_DEVOUTPUT, CreateDevOutputWnd() ); addSUIWnd( TOGGLE_WINDOW::UIWINDOW_CHINAWARRING, CreateChinaWarringWnd() ); addSUIWnd( TOGGLE_WINDOW::UIWINDOW_WEBGAMESUTDOWN, CreateWebGameSutDownWnd() ); #ifdef _DEBUG addSUIWnd( TOGGLE_WINDOW::UIWINDOW_TEST, CreateTestWnd() ); // OnToggleUIWindow( TOGGLE_WINDOW::UIWINDOW_TEST ); #endif m_pProtectSolutionWnd = CreateProtectSolutionWnd(); m_pEffectFocusWnd = CreateEffectWnd(); m_pLoadingWnd = CreateLoadingWnd(); m_pEndingWnd = CreateEndingWnd(); m_pFadeInOutEffectWnd = (SUIFadeInOutEffectWnd*)CreateFadeInOutWnd(); } void SGameInterface::InitializeAddonScript() { LUA()->RunString( "initialize_addon_list()" ); LUA()->RunString( "get_addon_list()" ); } void SGameInterface::ReloadAddonScript() { m_nAddonWndRef = 0; LUA()->RunString( "get_addon_list()" ); } bool SGameInterface::ChatFocusOnKey( DWORD dwKey ) { if( dwKey >= VK_F1 && dwKey <= VK_F24 ) return false; // else if( dwKey == VK_TAB || dwKey == VK_CONTROL || dwKey == VK_SHIFT ) // return false; return true; } void SGameInterface::SetChattingFocus( KID id, KArg& msg ) { if( !GetGameOption().IsEnterChat() ) { SUIChattingWnd* pChattingWnd = (SUIChattingWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING ); if( NULL != pChattingWnd ) { // _oprint( "채팅윈도우에게 포커스를\n" ); if( !g_bUserCamMode ) //동영상 지원 카메라 모드 일때는, 채팅창에 포커스를 주지 않는다. { // _performance_print( "--SetChattingFocus--\n" ); //강제로 꺼버림 pChattingWnd->SetFocus(false); //WndManager에서 SetFocus 를 하는 것과, Wnd 자체에서 SetFocus 를 하는 것때문에 문제 발생됨. m_pUIWndManager->SetFocus( pChattingWnd ); if( msg.at(0) == WM_KEYDOWN && VK_RETURN != msg.at(1) ) KUIControlEdit::PostWndMsgToFocusEdit( msg.at(0), msg.at(1), msg.at(2) ); } } } } void* SGameInterface::Perform( KID id, KArg& msg ) { _CID( WINDOWMSG ); _CID( UI_CALLBACK ); //로딩 화면 있을 경우에는 처리 안됨. // 2010.06.11 - prodongi if( m_pLoadingWnd && m_pLoadingWnd->IsShow() ) { if (!m_pUIWndManager->isExistPostWnd()) return (void*)0; } /* if( m_pLoadingWnd && m_pLoadingWnd->IsShow() ) return (void*)0; */ if( m_pEndingWnd && m_pEndingWnd->IsShow() ) return (void*)0; if( m_pProtectSolutionWnd && m_pProtectSolutionWnd->IsShow() ) return (void*)0; if ( id == id_WINDOWMSG && msg.slotCount() > 0 ) { switch( msg.at(0) ) { case WM_KEYDOWN: if( msg.slotCount() > 1 && VK_ESCAPE != msg.at(1) && ChatFocusOnKey( msg.at(1) ) ) { #ifdef _SPECULAR_EDITING_ int _nkey = msg.at(1); if( _nkey == 49 ) // 1 { g_testTextureUseType = TYPE_0D1S2SC; _oprint( "MODE 0D 1S 2SC\n" ); } else if( _nkey == 50 ) // 2 { g_testTextureUseType = TYPE_0D1S2X; _oprint( "MODE 0D 1S 2X\n" ); } else if( _nkey == 51 ) // 3 { g_testTextureUseType = TYPE_0D1X2X; _oprint( "MODE 0D 1X 2X\n" ); } else if( _nkey == 52 ) // 4 { g_testTextureUseType = TYPE_0S1X2SC; _oprint( "MODE 0S 1X 2SC\n" ); } else if( _nkey == 53 ) // 5 { g_testTextureUseType = TYPE_0S1S2SC; _oprint( "MODE 0S 1S 2SC\n" ); } else if( _nkey == 54 ) // 6 { g_testTextureUseType = TYPE_0S1X2X; _oprint( "MODE 0S 1X 2X\n" ); } #endif if( IsWebPageWndOpened() ) { break; } if( KUIControlEdit::IsNobodyHasFocus() ) { // _oprint( "어떤 edit에게도 포커스가 없었음\n" ); if( IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_CHATTING ) ) { //엔터채팅 처리는 ProcMsgAtStatic의 Hoykeyex 이벤트로 옮긴다. sfreer 2009.03.17 if( !IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_INPUTNUMBER ) && !IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_SYSTEM ) ) SetChattingFocus( id, msg ); } else if ( IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_LOGIN ) ) { if( !m_pUIWndManager->IsOpenModalWnd() ) { SUILoginWnd* pLoginWnd = (SUILoginWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_LOGIN ); if( NULL != pLoginWnd ) { // _oprint( "채팅윈도우에게 포커스를\n" ); if( !g_bUserCamMode ) //동영상 지원 카메라 모드 일때는, 채팅창에 포커스를 주지 않는다. { m_pUIWndManager->SetFocus( pLoginWnd ); if( msg.slotCount() > 2 ) KUIControlEdit::PostWndMsgToFocusEdit( msg.at(0), msg.at(1), msg.at(2) ); } } } } } } //지금은 서버리스트 윈도우에서 3가지 키 메세지만 사용한다. if( msg.slotCount() > 1 && VK_UP == msg.at(1) || VK_DOWN == msg.at(1) || VK_RETURN == msg.at(1) ) { KUIWnd* pWnd(NULL); if( g_bServerListFocus ) { //m_pUIWndManager-> //pWnd = m_pUIWndManager->FindWnd( "window_lobby_server_list" ); //if( pWnd ) pWnd->OnKeyMessage( msg.at(0), msg.at(1) ); SUIServerListWnd* pServerListWnd = (SUIServerListWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_SERVERLIST ); if( pServerListWnd ) pServerListWnd->OnKeyMessage( msg.at(0), msg.at(1) ); } else if( g_bCharListSeen ) { if( !m_pUIWndManager->IsOpenModalWnd() ) { //pWnd = m_pUIWndManager->FindWnd( "window_lobby_character_list" ); //if( pWnd ) pWnd->OnKeyMessage( msg.at(0), msg.at(1) ); SUICharNameListWnd* pCharNameListWnd = (SUICharNameListWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CHARNAMELIST ); if( pCharNameListWnd ) pCharNameListWnd->OnKeyMessage( msg.at(0), msg.at(1) ); } } } break; case WM_LBUTTONDBLCLK: case WM_RBUTTONDBLCLK: case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: { #ifdef _DEV /// 2011.11.24 - prodongi KUIValidChecker::setIsProcessingMsg(true); #endif void *r = m_pUIWndManager->Perform( id, msg ); #ifdef _DEV /// 2011.11.24 - prodongi KUIValidChecker::setIsProcessingMsg(false); #endif RelocationWnd(); /// 2011.11.09 팝업 윈도우에 메세지 전달 - prodongi pumpUpMessageToPopup(msg); return r; } break; } return m_pUIWndManager->Perform( id, msg ); } else if ( id == id_UI_CALLBACK ) { KCallbackMessage* pUICallBackMsg = (KCallbackMessage*)&msg; const char* szMsgBoxID = pUICallBackMsg->sMsgID.c_str(); // if( pUICallBackMsg->dwResult ) m_pGameManager->StartSound( "ui_button_click.wav" ); switch( FindMessageBoxID( szMsgBoxID ) ) { case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_EXITGAME: { if( 0 == pUICallBackMsg->dwResult ) SetShowEndingWnd(true); //m_pGameManager->GameExit(); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DELETECHARCHECK: { if( 0 == pUICallBackMsg->dwResult ) { SIMSG_DELETE_SELECTEDAVATAR* pGameMsg = new SIMSG_DELETE_SELECTEDAVATAR; ::strncpy( pGameMsg->security_no, "", 18 ); m_pGameManager->PostMsgAtDynamic( pGameMsg ); } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYSETTING_FAILED: OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_SECURITYSETTING, true ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYSETTINGMODIFY_FAILED: OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_SECURITYSETTINGMODIFY, true ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYCHARACTER_FAILED: OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_SECURITYCHARACTER, true ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYSTORAGE_FAILED: OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_SECURITYSTORAGE, true ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYCLEAR_FAILED: OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_SECURITYCLEAR, true ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYCHARACTER_ACCESS_DENIED: break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ITEMDROPCHECK: { if( 0 == pUICallBackMsg->dwResult ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, &SIMSG_UI_DISCARDITEM() ); } break; // 파괴메세지박스 하던중.... case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ITEMDESTRUCTION: { if( 0 == pUICallBackMsg->dwResult ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_DESTRUCTION, &SIMSG_UI_DESTRUCTIONITEM() ); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOCONNECTSERVER: m_pGameManager->GameExit(); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SERVERLIMITMAX: m_pGameManager->GameExit(); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DEAD: m_pGameManager->PostMsgAtDynamic( new SMSG_RESURRECTION( 0, 0, false ) ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GIVEUPQUEST: { // 퀘스트 포기 메세지 서버에 보냄 if( 0 == pUICallBackMsg->dwResult ) { m_pGameManager->PostMsgAtDynamic( new SMSG_SEND_DATA( SQuestMgr::GetInstance().GetCurrentQuest(), "drop_quest" ) ); } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OPTION_APPLY: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SYSTEM, &SIMSG_UI_OPTION_APPLY(pUICallBackMsg->dwResult) ); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_LOGINWAITING: { // 서버에 부활 메세지 보냄 m_pGameManager->PostMsgAtDynamic( new SMSG_SEND_DATA( pUICallBackMsg->dwResult, "loginwaiting_cancel" ) ); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CASHSHOP_OPEN: { // 캐쉬샵 이용 할까? or 말까? if( 0 == pUICallBackMsg->dwResult ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CASH_STORAGE, &SMSG_SEND_DATA( TOGGLE_WINDOW::UIWINDOW_INVENTORY, "cash_shop_open" ) ); } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_PARTYJOINCHECK: m_pDisplayInfo->RequestJoinInvitedParty( 0 == pUICallBackMsg->dwResult ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_PARTYARENAOPPONENTJOINCHECK: m_pDisplayInfo->RequestArenaOpponentJoinInvitedParty( 0 == pUICallBackMsg->dwResult ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_PARTYARENAMEMBERJOINCHECK: m_pDisplayInfo->RequestArenaMemberJoinInvitedParty( 0 == pUICallBackMsg->dwResult ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILDJOINCHECK: m_pDisplayInfo->RequestJoinInvitedGuild( 0 == pUICallBackMsg->dwResult ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_RAID_GUILD_INVITE: m_pDisplayInfo->RequestJoinRaidGuildInvite( 0 == pUICallBackMsg->dwResult ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_RAID_MERCENARY_INVITE: m_pDisplayInfo->RequestJoinRaidMercenaryInvite( 0 == pUICallBackMsg->dwResult ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_TRADEJOINCHECK: m_pDisplayInfo->JoinTrade( 0 == pUICallBackMsg->dwResult ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_TRADEFREEZECHECK: m_pDisplayInfo->SetFreeze( 0 == pUICallBackMsg->dwResult ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_PARTYDESTROYCHECK: m_pDisplayInfo->RequestDestroyParty( 0 == pUICallBackMsg->dwResult ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_PARTYKICKMEMBERCHECK: m_pDisplayInfo->RequestDestroyParty( 0 == pUICallBackMsg->dwResult, true ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_STORE_PRICE_OVER: { if( pUICallBackMsg->dwResult == 0 ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_HOST, &SIMSG_UI_STORE_OVER() ); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_STORE_PRICE_UNDER: { if( pUICallBackMsg->dwResult == 0 ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_HOST, &SIMSG_UI_STORE_UNDER() ); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_STORE_WEIGHT_OVER: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_HOST, &SIMSG_UI_STORE_WEIGHT_OVER() ); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_BAD_USER_WARNING: { m_pGameManager->PostMsgAtDynamic( new SMSG_SEND_DATA( pUICallBackMsg->dwResult, "BadUserWarning" ) ); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SELL_WARNING: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOPKART, &SIMSG_UI_STORE_SELL_WARNING(pUICallBackMsg->dwResult) ); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DUNGEONSTONE_REQUEST: { if( pUICallBackMsg->dwResult == 0 ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_DUNGEON_STONE, &SIMSG_UI_DUNGEONSTONE( SIMSG_UI_DUNGEONSTONE::DUNGEONSTONE_REQUEST, pUICallBackMsg->dwResult ) ); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DUNGEONSTONE_CANCEL: { if( pUICallBackMsg->dwResult == 0 ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_DUNGEON_STONE, &SIMSG_UI_DUNGEONSTONE( SIMSG_UI_DUNGEONSTONE::DUNGEONSTONE_CANCEL, pUICallBackMsg->dwResult ) ); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DUNGEON_RAID_CONFIRM: { if( pUICallBackMsg->dwResult == 0 ) { std::string strTrigger = CStringUtil::StringFormat( "%s()", m_strShowWindowTrigger.c_str() ).c_str(); m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_ACT_NPCDIALOG( strTrigger.c_str() ) ); } else { m_strShowWindowTrigger = ""; } } break; /// 2011.10.26 - prodongi case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SCRIPTSHOWWINDOW_CONFIRM: { if( pUICallBackMsg->dwResult == 0 ) { m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_ACT_NPCDIALOG( m_strShowWindowTrigger.c_str() ) ); /// 2011.10.26 - prodongi } else { m_strShowWindowTrigger = ""; } } break; // 상급 던전. kappamind, 2010.02.10 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECRET_DUNGEON_CONFIRM: { if( pUICallBackMsg->dwResult == 0 ) { std::string strTrigger = CStringUtil::StringFormat( "%s(%s)", m_strShowWindowTrigger.c_str(), m_strShowWindowArgument.c_str() ).c_str(); m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_ACT_NPCDIALOG( strTrigger.c_str() ) ); } else { m_strShowWindowTrigger = ""; } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CONTRIBUTION_REWARD_DISABLE: { } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_BATTLE_ACCEPT: { if( pUICallBackMsg->dwResult == 0 ) { SMSG_SEND_DATA msg( "battle_start", pUICallBackMsg->strReqValue.c_str() ); m_pGameManager->ProcMsgAtStatic( &msg ); } else // sonador 1.10.1 모럴 포인트 증/감 메시지 및 대련장 관련 메시지 추가 { SMSG_SEND_DATA msg( "battle_reject", pUICallBackMsg->strReqValue.c_str() ); m_pGameManager->ProcMsgAtStatic( &msg ); } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ALLIANCE_ACCEPT: { if( pUICallBackMsg->dwResult == 0 ) { SMSG_SEND_DATA msg(TOGGLE_WINDOW::UIWINDOW_CHATTING, "Alliance_Accept"); m_pGameManager->ProcMsgAtStatic( &msg ); } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_JEWEL_EQUIP: { if( pUICallBackMsg->dwResult == 0 ) { SIMSG_UI_SEND_DATA msg(TOGGLE_WINDOW::UIWINDOW_JEWEL_EQUIP, "Jewel_Equip", pUICallBackMsg->strReqValue.c_str()); m_pGameManager->ProcMsgAtStatic( &msg ); } else if( pUICallBackMsg->dwResult == 1 ) //servantes 2010.12.21 { SIMSG_UI_SEND_DATA msg(TOGGLE_WINDOW::UIWINDOW_INVENTORY, "RefreshSelection"); m_pGameManager->ProcMsgAtStatic( &msg ); } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ALREADYEXIST: { m_pGameManager->ProcMsgAtStatic( &STMSG_REQ_CLOSE( false ) ); } break; // { [sonador][3.1.2]경매장 구현 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_AUCTION_DEREGISTER: { if( pUICallBackMsg->dwResult == 0 ) { SIMSG_UI_SEND_DATA msg( TOGGLE_WINDOW::UIWINDOW_AUCTION, pUICallBackMsg->strReqValue.c_str( ) ); m_pGameManager->ProcMsgAtStatic( &msg ); } } break; // 데스매치 관련 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DEATHMATCH_FREED_ENTER: { if( pUICallBackMsg->dwResult == 0 ) { SMSG_INSTANCE_GAME_ENTER *pMsg = new SMSG_INSTANCE_GAME_ENTER(SMSG_INSTANCE_GAME_ENTER::INSTANCE_TYPE::FREED_DEATHMATCH); m_pGameManager->PostMsgAtDynamic( pMsg ); } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DEATHMATCH_RANKED_ENTER: { if( pUICallBackMsg->dwResult == 0 ) { SMSG_INSTANCE_GAME_ENTER *pMsg = new SMSG_INSTANCE_GAME_ENTER(SMSG_INSTANCE_GAME_ENTER::INSTANCE_TYPE::RANKED_DEATHMATCH); m_pGameManager->PostMsgAtDynamic( pMsg ); } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DEATHMATCH_EXIT: { if( pUICallBackMsg->dwResult == 0 ) { SMSG_INSTANCE_GAME_EXIT *pMsg = new SMSG_INSTANCE_GAME_EXIT(); m_pGameManager->PostMsgAtDynamic( pMsg ); } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HUNTAHOLIC_SCOREBOARD: // #2.1.2.11.1 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HUNTAHOLIC_MAXPOINT: // #2.1.2.11.5 { if( pUICallBackMsg->dwResult == 0 ) { SIMSG_UI_SEND_DATA msg( TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_SCOREBOARD, pUICallBackMsg->strReqValue.c_str() ); m_pGameManager->ProcMsgAtStatic( &msg ); } } break; //------------------------------------------ // 길드 탈퇴 결정. case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_SECESSION : if( 0 == pUICallBackMsg->dwResult ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE, &SIMSG_UI_GUILD_SECESSION() ); break; // 길드 추방 결정. case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_EXPULSION : if( 0 == pUICallBackMsg->dwResult ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_EXPULSION, &SIMSG_UI_GUILD_WNDMSG( IMSG_UI_GUILD_EXPULSION ) ); break; // 길드 해체 결정. case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_DESTROY : if( 0 == pUICallBackMsg->dwResult ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MASTER, &SIMSG_UI_GUILD_WNDMSG( IMSG_UI_GUILD_DESTROY ) ); //m_pGameManager->ProcMsgAtStatic( new SIMSG_UI_GUILD_WNDMSG( IMSG_UI_GUILD_DESTROY ) ); break; // 길드장인계. case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_PROMOTE : if( 0 == pUICallBackMsg->dwResult ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MASTER_PROMOTE, &SIMSG_UI_GUILD_WNDMSG( IMSG_UI_GUILD_PROMOTE ) ); break; // 공격대결성. case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_TEAM : if( 0 == pUICallBackMsg->dwResult ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_TEAM, &SIMSG_UI_GUILD_WNDMSG( IMSG_UI_GUILD_PROMOTE ) ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_BUFF : if( 0 == pUICallBackMsg->dwResult ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE, &SIMSG_UI_GUILD_WNDMSG( IMSG_UI_GUILD_BUFF ) ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_DONATE : if( 0 == pUICallBackMsg->dwResult ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE, &SIMSG_UI_GUILD_WNDMSG( IMSG_UI_GUILD_DONATE ) ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_UPGRADE : if( 0 == pUICallBackMsg->dwResult ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MASTER, &SIMSG_UI_GUILD_WNDMSG( IMSG_UI_GUILD_UPGRADE ) ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_AUTOMOUSE: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_HOOKFUNCTION: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_DRIVERFAILED: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_SPEEDHACK: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_SPEEDHACK_APP: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_MESSAGEHOOK: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_KDTRACE: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_KDTRACE_CHANGED: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_GAME_HACK: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_MODULE_CHANGE: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_AUTOMACRO: // sonador 7.4.1 AHNHS_ACTAPC_DETECT_AUTOMACRO 관련 callback 처리 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_ENGINEFAILED: // sonador 7.4.4 핵쉴드 270 적용 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_CODEMISMATCH: // case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NP_COMM_ERROR: // #2.3.2.7 sonador case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NP_COMM_CLOSE: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NP_INIT_ERROR: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NP_SPEEDHACK: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NP_GAMEHACK_KILLED: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NP_GAMEHACK_DETECT: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NP_GAMEHACK_DOUBT: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_LOGIN_ERR: // 2010.06.23 - prodongi { //게임 종료 m_pGameManager->GameExit(); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_GENERAL_HACK: { if( pUICallBackMsg->dwResult != 0 ) //게임 종료 m_pGameManager->GameExit(); } break; // 2010.05.12 - prodongi case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_USE_HAIR_ITEM: { /// 2011.05.16 ProcMsgAtStatic는 정적 입력 변수이다 - prodongi //ProcMsgAtStatic(new SIMSG_UI_USE_HAIR_ITEM(pUICallBackMsg->dwResult)); ProcMsgAtStatic(&SIMSG_UI_USE_HAIR_ITEM(pUICallBackMsg->dwResult)); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_ASSIGN_OKCANCEL: //2011.03.07 servantes { if( 0 == pUICallBackMsg->dwResult ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, &SIMSG_UI_SEND_DATA( TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, number_t( 0 ), "assign" ) ); } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_REGAIN_OKCANCEL: { if( 0 == pUICallBackMsg->dwResult ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, &SIMSG_UI_SEND_DATA( TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, number_t( 0 ), "regain" ) ); } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN1: // 2011.05.16 - servantes case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN2: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN3: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN4: { if( 0 == pUICallBackMsg->dwResult ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, &SIMSG_UI_SEND_DATA( TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, number_t( 0 ), "do not assign" ) ); } } break; // 2011.07.06 - servantes case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_INSTANCE_DUNGEON_ENTERANCE: // XX던전으로 이동하겠습니까 { if( 0 == pUICallBackMsg->dwResult ) { int kk=0; } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_INSTANCE_DUNGEON_EXIT: // XX던전에서 퇴장하시겠습니까 { if( pUICallBackMsg->dwResult == 0 ) { std::string strTrigger = CStringUtil::StringFormat( "%s(%s)", m_strShowWindowTrigger.c_str(), m_strShowWindowArgument.c_str() ).c_str(); m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_ACT_NPCDIALOG( strTrigger.c_str() ) ); } else { m_strShowWindowTrigger = ""; } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_INSTANCE_DUNGEON_EXIT2: // XX던전에서 나가겠습니까 { if( 0 == pUICallBackMsg->dwResult ) { int kk=0; } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_INSTANCE_DUNGEON_CONFIRM: // 인스턴스던전 { if( pUICallBackMsg->dwResult == 0 ) { std::string strTrigger = CStringUtil::StringFormat( "%s(%s)", m_strShowWindowTrigger.c_str(), m_strShowWindowArgument.c_str() ).c_str(); m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_ACT_NPCDIALOG( strTrigger.c_str() ) ); } else { m_strShowWindowTrigger = ""; } } break; /// 2012.05.17 임시로 함 - prodongi case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ARENA_WAITING_EXIT: { if( pUICallBackMsg->dwResult == 0 ) { TS_CS_BATTLE_ARENA_LEAVE msgLeave; m_pGameManager->PendMessage(&msgLeave); } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ARENA_PRACTICE_WAITING_EXIT: { if( pUICallBackMsg->dwResult == 0 ) { TS_CS_BATTLE_ARENA_LEAVE msgLeave; m_pGameManager->PendMessage(&msgLeave); } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ARENA_PRACTICE_EXIT: { if( pUICallBackMsg->dwResult == 0 ) { TS_CS_BATTLE_ARENA_LEAVE msgLeave; m_pGameManager->PendMessage(&msgLeave); } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ARENA_GAME_EXIT: { if( pUICallBackMsg->dwResult == 0 ) { TS_CS_BATTLE_ARENA_LEAVE msgLeave; m_pGameManager->PendMessage(&msgLeave); } } break; // 2011.09.20 - servantes case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_COMPOSE_RAID: // 레이드를 구성하시겠습니까? { if( 0 == pUICallBackMsg->dwResult ) { // 공격대결성 팝업 Wnd. // 이전에 열려있을 경우를 대비해서 닫는다. m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_TEAM, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_TEAM, // 위치이동. m_pGameManager->GetScreenWidth() / 2, m_pGameManager->GetScreenHeight() / 2 ) ); // m_pGameManager->GetScreenWidth() / 2, m_pGameManager->GetScreenHeight() / 2 ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_SUB_MANAGE_TEAM, true ) ); // 팝업 Wnd 열기. } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DECOMPOSITON_CONFIRM_APPEND: { if( 0 == pUICallBackMsg->dwResult ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_DECOMPOSITION, &SIMSG_UI_SEND_DATA( TOGGLE_WINDOW::UIWINDOW_DECOMPOSITION, number_t( 0 ), "Append_Yes" ) ); else ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_DECOMPOSITION, &SIMSG_UI_SEND_DATA( TOGGLE_WINDOW::UIWINDOW_DECOMPOSITION, number_t( 0 ), "Append_No" ) ); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DECOMPOSITON_CONFIRM_DO: { if( 0 == pUICallBackMsg->dwResult ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_DECOMPOSITION, &SIMSG_UI_SEND_DATA( TOGGLE_WINDOW::UIWINDOW_DECOMPOSITION, number_t( 0 ), "Do_Decomposition" ) ); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL_AND_HTTP_LINK: { if( m_strHttpLink.empty() == false ) { ShellExecute( NULL, "open", m_strHttpLink.c_str(), NULL, NULL, SW_SHOWNORMAL ); m_strHttpLink.clear(); } } break; } } return (void*)0; } void SGameInterface::CheckInterfaceManager() { // 각 인터페이스 매니저 세팅 /* SUIWnd* pWnd = NULL; KSortVector< class SUIWnd* >::iterator it; for ( it = m_sortUIWindowMap.begin(); it != m_sortUIWindowMap.end(); ++it ) { pWnd = (*it); if( pWnd != NULL ) pWnd->CheckManager(); } m_pDisplayInfo->CheckManager();*/ } bool SGameInterface::addDropItemWnd( AR_HANDLE handle, SUIDropItemWnd* pWnd ) { SUIDropItemWnd* pDropItemWnd = NULL; if( m_hashDropItemWind.lookup( handle, pDropItemWnd ) ) { assert(0); return false; } m_hashDropItemWind.add( handle, pWnd ); m_sortDropItemWind.insert( pWnd ); return true; } void SGameInterface::delDropItemWnd( AR_HANDLE handle ) { SUIDropItemWnd* pWnd = NULL; if( m_hashDropItemWind.lookup( handle, pWnd ) ) { m_hashDropItemWind.erase( handle ); m_sortDropItemWind.erase( pWnd ); delete pWnd; } } void SGameInterface::destroyDropItemWnd() { SUIDropItemWnd* pWnd = NULL; KSortVector< SUIDropItemWnd* >::iterator it; for ( it = m_sortDropItemWind.begin(); it != m_sortDropItemWind.end(); ++it ) { pWnd = (*it); if( pWnd != NULL ) { delete pWnd; } } m_hashDropItemWind.clear(); m_sortDropItemWind.clear(); } SUIDropItemWnd* SGameInterface::getDropItemWnd( AR_HANDLE handle ) { SUIDropItemWnd* pWnd = NULL; if( m_hashDropItemWind.lookup( handle, pWnd ) ) { return pWnd; } return NULL; } void SGameInterface::ShowDropItemWnd(bool nShow) { SUIDropItemWnd* pWnd = NULL; KSortVector< SUIDropItemWnd* >::iterator it; for ( it = m_sortDropItemWind.begin(); it != m_sortDropItemWind.end(); ++it ) { pWnd = (*it); if( pWnd != NULL ) { pWnd->SetShow(nShow);; } } } bool SGameInterface::addGaugeWnd( AR_HANDLE handle, SUIGaugeWnd* pWnd ) { SUIGaugeWnd* pDropItemWnd = NULL; if( m_hashGaugeWind.lookup( handle, pDropItemWnd ) ) { assert(0); return false; } m_hashGaugeWind.add( handle, pWnd ); m_sortGaugeWind.insert( pWnd ); return true; } void SGameInterface::delGaugeWnd( AR_HANDLE handle ) { SUIGaugeWnd* pWnd = NULL; if( m_hashGaugeWind.lookup( handle, pWnd ) ) { m_hashGaugeWind.erase( handle ); m_sortGaugeWind.erase( pWnd ); delete pWnd; } } void SGameInterface::destroyGaugeWnd() { SUIGaugeWnd* pWnd = NULL; KSortVector< SUIGaugeWnd* >::iterator it; for ( it = m_sortGaugeWind.begin(); it != m_sortGaugeWind.end(); ++it ) { pWnd = (*it); if( pWnd != NULL ) { delete pWnd; } } m_hashGaugeWind.clear(); m_sortGaugeWind.clear(); } SUIGaugeWnd* SGameInterface::getGaugeWnd( AR_HANDLE handle ) { SUIGaugeWnd* pWnd = NULL; if( m_hashGaugeWind.lookup( handle, pWnd ) ) { return pWnd; } return NULL; } void SGameInterface::delCharacterWnd( AR_HANDLE handle ) { CHARWINDOW* pCWnd = NULL; if( m_hashCharacterWindow.lookup( handle, pCWnd ) ) { m_hashCharacterWindow.erase( handle ); m_sortCharacterWindow.erase( pCWnd ); delete pCWnd->pWnd; delete pCWnd; } } bool SGameInterface::addCharacterWnd( AR_HANDLE handle, CHARWINDOW & wnd ) { CHARWINDOW* pCharWnd = NULL; if( m_hashCharacterWindow.lookup( handle, pCharWnd ) ) { assert(0); return false; } CHARWINDOW* newCWnd = new CHARWINDOW( wnd.pWnd, wnd.bImmeditelyPosUpdate ); m_hashCharacterWindow.add( handle, newCWnd ); m_sortCharacterWindow.insert( newCWnd ); return true; } void SGameInterface::destroyCharacterWnd() { CHARWINDOW* pWnd = NULL; KSortVector< struct CHARWINDOW* >::iterator it; for ( it = m_sortCharacterWindow.begin(); it != m_sortCharacterWindow.end(); ++it ) { pWnd = (*it); if( pWnd != NULL ) { delete pWnd->pWnd; delete pWnd; } } for ( it = m_sortTempCharacterWindow.begin(); it != m_sortTempCharacterWindow.end(); ++it ) { pWnd = (*it); if( pWnd != NULL ) { delete pWnd->pWnd; delete pWnd; } } m_hashCharacterWindow.clear(); m_sortCharacterWindow.clear(); m_hashTempCharacterWindow.clear(); m_sortTempCharacterWindow.clear(); } SGameInterface::CHARWINDOW* SGameInterface::getCharacterWnd( AR_HANDLE handle ) { CHARWINDOW* pCharWnd = NULL; if( m_hashCharacterWindow.lookup( handle, pCharWnd ) ) { return pCharWnd; } return NULL; } /// 2011.01.17 - prodongi int SGameInterface::getCharacterWndMarkStatus(AR_HANDLE handle) { CHARWINDOW* wnd = getCharacterWnd(handle); return (wnd) ? wnd->pWnd->getMarkStatus() : 0; } static std::string getItemShopURL( int n1, int n2, int n3, const char *szServerName ) { struct TempStructForEncode { int nSeed; int n1; int n2; int n3; int nChecksum; int user_no; } temp; temp.nSeed = rand() * rand() * rand(); temp.nSeed = 384723432; temp.n1 = n1; temp.n2 = n2; temp.n3 = n3; temp.nChecksum = n1 + n2 + n3; temp.n1 ^= temp.nSeed; temp.n2 ^= temp.n1; temp.n3 ^= temp.n2; temp.nChecksum ^= temp.n3; temp.n1 ^= 0xD8FB51A9; temp.n2 ^= 0x9DC720AC; temp.n3 ^= 0x31F42CB7; temp.nChecksum ^= 0x7F9B3D2E; temp.user_no = g_UserInfo.GetUserNo(); //std::string strURL = ENV().GetString( "shop.url", "http://itemshop.rappelz.com/login.aspx" ); std::string strURL = ENV().GetString( "shop.url", "http://127.0.0.1/itemshop" ); // Fraun nullifying gala spyware asscans 7/12/2025 strURL += "?server="; strURL += szServerName; strURL += "&id="; char buf[512]; /*if(temp.user_no) { sprintf( buf, "%08X%08X%08X%08X%08X%08X", temp.nSeed, temp.n1, temp.n2, temp.n3, temp.nChecksum, temp.user_no ); } else*/ { sprintf( buf, "%08X%08X%08X%08X%08X", temp.nSeed, temp.n1, temp.n2, temp.n3, temp.nChecksum ); } strURL += buf; strURL += "&languagecode="; strURL += ENV().GetString( "locale" ); return strURL; } static std::string getGuildInfoURL( int n1, int n2, int n3, const char *szServerName ) { struct TempStructForEncode { int nSeed; int n1; int n2; int n3; int nChecksum; } temp; temp.nSeed = rand() * rand() * rand(); temp.nSeed = 384723432; temp.n1 = n1; temp.n2 = n2; temp.n3 = n3; temp.nChecksum = n1 + n2 + n3; temp.n1 ^= temp.nSeed; temp.n2 ^= temp.n1; temp.n3 ^= temp.n2; temp.nChecksum ^= temp.n3; temp.n1 ^= 0xD8FB51A9; temp.n2 ^= 0x9DC720AC; temp.n3 ^= 0x31F42CB7; temp.nChecksum ^= 0x7F9B3D2E; std::string strURL; if( ENV().IsExist( "guild_test.url" ) ) { //strURL = ENV().GetString( "guild_test.url", "http://rion:8080/client/guild/login.aspx" ); strURL = ENV().GetString( "guild_test.url", "http://127.0.0.1:8080/client/guild/login.aspx" ); // Fraun nullifying gala spyware asscans 7/12/2025 //아이콘 다운로드 URL : http:// rion:8080/upload/client/guild/ + 파일명 } else { //strURL = ENV().GetString( "guild.url", "http://www.rappelz.com/client/guild/login.aspx" ); strURL = ENV().GetString( "guild.url", "http://127.0.0.1/client/guild/login.aspx" ); // Fraun nullifying gala spyware asscans 7/12/2025 //아이콘 다운로드 URL : http://www.rappelz.com/upload/client/guild/ + 파일명 } strURL += "?server="; strURL += szServerName; strURL += "&id="; char buf[512]; sprintf( buf, "%08X%08X%08X%08X%08X", temp.nSeed, temp.n1, temp.n2, temp.n3, temp.nChecksum ); strURL += buf; return strURL; } void SGameInterface::changeChattingWndFocus( class SUIChattingWnd* pChattingWnd ) { if( !g_bUserCamMode ) //동영상 지원 카메라 모드 일때는, 채팅창에 포커스를 주지 않는다. { //강제로 꺼버림 KUIWnd* pWnd = pChattingWnd->GetFocusChild(); if( pWnd && stricmp( pWnd->GetID(),"chat_edit" ) == 0 ) { //ChattingWnd 윈도우 자체가 포커스 날림 pChattingWnd->SetFocus( false ); pChattingWnd->SetFocusEdit( false ); } else { m_pUIWndManager->SetFocus( pChattingWnd ); pChattingWnd->SetFocusEdit( true ); } } } void castError( class SUIDisplayInfo* pDisplayInfo, int nErrorCode ) { switch( nErrorCode ) { case RESULT_NOT_ACTABLE: //스킬 시전 실패시 pDisplayInfo->SetSysMsg( SYS_MSG_POINT_TARGET ); break; case RESULT_NOT_ENOUGH_HP: //HP 부족 pDisplayInfo->SetSysMsg( SYS_MSG_HP_NOT_ENOUGH ); break; case RESULT_NOT_ENOUGH_MP: //MP 부족 pDisplayInfo->SetSysMsg( SYS_MSG_MP_NOT_ENOUGH ); break; case RESULT_COOL_TIME: //아이템 사용 pDisplayInfo->SetSysMsg( SYS_MSG_SKILL_DELAYTIME ); break; case RESULT_LIMIT_WEAPON: //장착 중인 무기로는 스킬 시전이 안됨 pDisplayInfo->SetSysMsg( SYS_MSG_USE_SKILL_NOTUSE ); break; case RESULT_LIMIT_RACE: //종족 제한 pDisplayInfo->SetSysMsg( SYS_MSG_TRADE_NOT_TRADETARGET ); break; case RESULT_LIMIT_JOB: //직업 제한 pDisplayInfo->SetSysMsg( SYS_MSG_TRADE_NOT_TRADETARGET ); break; case RESULT_LIMIT_TARGET: //대상 제한 pDisplayInfo->SetSysMsg( SYS_MSG_TRADE_NOT_TRADETARGET ); break; case RESULT_NOT_ENOUGH_ENERGY: //기공 부족 pDisplayInfo->SetSysMsg( SYS_MSG_ENERGY_LACK ); break; case RESULT_NOT_ENOUGH_BULLET: //화살 모질람 pDisplayInfo->SetSysMsg( SYS_MSG_SKILL_NEED_ARROW ); break; case RESULT_ALREADY_TAMING: pDisplayInfo->SetSysMsg( SYS_MSG_SKILLRESULT_ALREADY_TAMING ); break; case RESULT_NOT_TAMABLE: pDisplayInfo->SetSysMsg( SYS_MSG_SKILLRESULT_NOT_TAMABLE ); break; case RESULT_TARGET_ALREADY_BEING_TAMED: pDisplayInfo->SetSysMsg( SYS_MSG_SKILLRESULT_ALREADY_TAMING_MONSTER ); break; case RESULT_NOT_ENOUGH_TARGET_HP: pDisplayInfo->SetSysMsg( SYS_MSG_SKILLRESULT_NOT_ENOUGH_TARGET_HP ); break; case RESULT_NOT_ENOUGH_SUMMON_CARD: pDisplayInfo->SetSysMsg( SYS_MSG_SKILLRESULT_NOT_ENOUGH_SUMMON_CARD ); break; case RESULT_NOT_ENOUGH_SOUL_TAMING_CARD: pDisplayInfo->SetSysMsg( SYS_MSG_SKILLRESULT_NOT_ENOUGH_SOUL_TAMING_CARD ); break; } } void SGameInterface::ProcMsgAtStatic( SGameMessage* pMsg ) { if(m_pEndingWnd && m_pEndingWnd->IsShow() ) { switch( pMsg->nType ) { case IMSG_HOTKEY_EX: { pMsg->bUse = true; SIMSG_HOTKEY_EX* pHotKeyMsg = (SIMSG_HOTKEY_EX*)pMsg; if( LOWORD(pHotKeyMsg->wParam ) == VK_ESCAPE ) { m_pGameManager->GameExit(); } } } return; } #ifdef _DEV extern bool g_bDebugMode; #endif if( m_pDisplayInfo ) m_pDisplayInfo->ProcMsgAtStatic( pMsg ); ProcRefreshWindow( pMsg ); switch( pMsg->nType ) { case MSG_BOOTH_NAME_CHANGED: { CHARWINDOW * pCWnd = getCharacterWnd( static_cast< SMSG_BOOTH_NAME_CHANGED* >( pMsg )->hTarget ); if( pCWnd ) { pCWnd->pWnd->SetBoothName( static_cast< SMSG_BOOTH_NAME_CHANGED* >( pMsg )->hTarget, static_cast< SMSG_BOOTH_NAME_CHANGED* >( pMsg )->strBoothName.c_str() ); } pMsg->bUse = true; } break; case MSG_BOOTH_CLOSED : { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_HOST, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_CLIENT, pMsg ); pMsg->bUse = true; } break; case MSG_BOOTH_TRADE_INFO: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_HOST, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_CLIENT, pMsg ); pMsg->bUse = true; } break; case MSG_BOOTH_INFO : { if( static_cast< SMSG_BOOTH_INFO* >( pMsg )->hTarget == m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerHandle() ) { // 판매 상황 업데 되기 알려주자~ ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_HOST, pMsg ); } else { if( !m_pGameManager->IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_SHOP ) && !m_pGameManager->IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_TRADE ) && !m_pGameManager->IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_STORAGE ) && !m_pGameManager->IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_STORE_HOST ) ) { // 데이터 처리할 수 있게 해주고 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_CLIENT, pMsg ); bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; // 다이얼로그 보여주자 OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_CLIENT, true, bFocus ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOPKART, true, bFocus ); } } pMsg->bUse = true; } break; case MSG_AC_SERVER_LIST: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SERVERLIST, pMsg ); pMsg->bUse = true; } break; case MSG_BELT_SLOT_INFO: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_EQUIPMENT, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_UPGRADE, pMsg ); /// 2011.05.13 - prodongi ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOP, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOPKART, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_HOST, pMsg ); pMsg->bUse = true; } break; case MSG_OPEN_URL: { SMSG_OPEN_URL* pOpenURL = (SMSG_OPEN_URL*)pMsg; pMsg->bUse = true; if( pOpenURL->wait_for_event_scene ) { SAFE_DELETE( m_pWaitOpenURL ); m_pWaitOpenURL = new SMSG_OPEN_URL; m_pWaitOpenURL->wait_for_event_scene = pOpenURL->wait_for_event_scene; m_pWaitOpenURL->m_strURL = pOpenURL->m_strURL.c_str(); m_pWaitOpenURL->width = pOpenURL->width; m_pWaitOpenURL->height = pOpenURL->height; return; } //메시지 박스 존재 하면, 안 열림 if( m_pUIWndManager->IsOpenModalWnd() ) return; _refreshOpenURL( pOpenURL ); } break; case MSG_CHANGE_NAME: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINFRAME, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHARINFO, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_GUILD, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_PLAYER, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_CREATURE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_NPC, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_PROP, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATUREFORM, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, pMsg ); SMSG_CHANGE_NAME * pChangeName = (SMSG_CHANGE_NAME*)pMsg; CHARWINDOW* pCWnd = getCharacterWnd( pChangeName->handle ); if( pCWnd && pCWnd->pWnd ) { std::string szNameColorTag; SGame* pGame(NULL); pGame = m_pGameManager->GetActiveGame(); SGameAvatarEx* pAvatar(NULL); if( pGame ) pAvatar = (SGameAvatarEx*)( pGame->GetGameObject(pChangeName->handle) ); if( pAvatar && pAvatar->GetObjType() == TS_ENTER::GAME_SUMMON ) { szNameColorTag = "<#ffcfb5><@5a4435>"; } else { if( ( pChangeName->status & TS_ENTER::PlayerInfo::FLAG_PK_ON ) || ( pChangeName->status & TS_ENTER::PlayerInfo::FLAG_DEMONIAC ) || ( pChangeName->status & TS_ENTER::PlayerInfo::FLAG_BLOODY ) ) { if( pChangeName->IsLocal ) szNameColorTag = "<#f49595><@970000>"; else szNameColorTag = "<#f49595><@970000>"; } else { if( pChangeName->IsLocal ) szNameColorTag = "<@313246>"; else szNameColorTag = "<@313246>"; } } pCWnd->pWnd->SetName( pChangeName->m_name.c_str(), szNameColorTag.c_str() ); } pMsg->bUse = true; } break; case MSG_WEATHER_INFO: { if( IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_TASKBAR ) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TASKBAR, pMsg ); } pMsg->bUse = true; } break; case IMSG_MOUSEWHEEL: { if( IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_PARTY ) ) { if( 0 != HIBYTE(GetAsyncKeyState(VK_CONTROL)) ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY, pMsg ); } pMsg->bUse = true; } break; case IMSG_UI_RELOAD: { SIMSG_UI_RELOAD* pReloadMsg = (SIMSG_UI_RELOAD*)pMsg; if( pReloadMsg->m_bDelete ) // Removing interface { KUIControl::SetNULLToolTipOnControl(); destroyCharacterWnd(); destroySUIWnd(); m_vecOpenWindowList.clear(); m_pUIWndManager->Clear(); m_pLocalSignWnd = NULL; m_bIsActive_Display_Process = false; } else // Creating interface { InitInterface(); addSUIWnd( TOGGLE_WINDOW::UIWINDOW_NOTICE, CreateNoticeWnd() ); addSUIWnd( TOGGLE_WINDOW::UIWINDOW_NOTIFY, CreateNotifyWnd() ); addSUIWnd( TOGGLE_WINDOW::UIWINDOW_DEVOUTPUT, CreateDevOutputWnd() ); addSUIWnd( TOGGLE_WINDOW::UIWINDOW_CHINAWARRING, CreateChinaWarringWnd() ); addSUIWnd( TOGGLE_WINDOW::UIWINDOW_WEBGAMESUTDOWN, CreateWebGameSutDownWnd() ); ReloadAddonScript(); } pMsg->bUse = true; } break; case IMSG_TOGGLE_UIWINDOW: { TOGGLE_WINDOW* pMsgToggleWnd = (TOGGLE_WINDOW*)pMsg; OnToggleUIWindow( pMsgToggleWnd->m_Type ); switch( pMsgToggleWnd->m_Type ) { case TOGGLE_WINDOW::UIWINDOW_SKILL: case TOGGLE_WINDOW::UIWINDOW_MOTION: case TOGGLE_WINDOW::UIWINDOW_SYSTEM: case TOGGLE_WINDOW::UIWINDOW_CHARINFO: case TOGGLE_WINDOW::UIWINDOW_CREATECHAR: case TOGGLE_WINDOW::UIWINDOW_STORE_HOST: case TOGGLE_WINDOW::UIWINDOW_STORE_CLIENT: case TOGGLE_WINDOW::UIWINDOW_QUEST_LIST: case TOGGLE_WINDOW::UIWINDOW_QUEST_INFO: case TOGGLE_WINDOW::UIWINDOW_QUEST_REWARD: // case TOGGLE_WINDOW::UIWINDOW_CLANSELECT: case TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE: case TOGGLE_WINDOW::UIWINDOW_MAINMENU_SUB: case TOGGLE_WINDOW::UIWINDOW_BADGE: // LOG_BOOK sfreer 2009-03-04 case TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_MSGBOX: case TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_RANKING: case TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_REWARD_CONFIRM: case TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND: // servantes 2011.01.26 // servantes 2011.07.05 case TOGGLE_WINDOW::UIWINDOW_MISSION_ENTERANCE_WND: case TOGGLE_WINDOW::UIWINDOW_MISSION_TITLE_WND: case TOGGLE_WINDOW::UIWINDOW_PARTY_MENU: // 2011.09.16 - servantes case TOGGLE_WINDOW::UIWINDOW_POPUP_PARTY_MENU_CHARACTER: // 2011.11.14 - servantes case TOGGLE_WINDOW::UIWINDOW_DECOMPOSITION: ProcMsgToUIWindow( pMsgToggleWnd->m_Type, pMsg ); break; } pMsg->bUse = true; RelocationWnd(); } break; case IMSG_UI_ACT_SELECT_SUMMON: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE , pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, pMsg ); pMsg->bUse = true; } break; case IMSG_CREATE_NEWCHAR: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATECHAR_SECOND , pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATECHAR_SECOND_BOTTOM , pMsg ); pMsg->bUse = true; } break; case IMSG_SHOW_UIWINDOW: { bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; SIMSG_SHOW_UIWINDOW* pMsgShowWnd = (SIMSG_SHOW_UIWINDOW*)pMsg; if( !pMsgShowWnd->m_bModal ) { if( pMsgShowWnd->m_Type == TOGGLE_WINDOW::UIWINDOW_STORE_HOST ) { if( IsShow(TOGGLE_WINDOW::UIWINDOW_SHOPKART) || IsShow(TOGGLE_WINDOW::UIWINDOW_STORAGE) ) OnShowUIWindow( pMsgShowWnd->m_Type, false, bFocus ); else { if( pMsgShowWnd->m_bShow == true && CloseAllNPCContactedWindows( ) ) { bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; // 경매장 닫자. // [sonador][3.1.3]경매장 서버 연동 OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_AUCTION, false, bFocus ); } OnShowUIWindow( pMsgShowWnd->m_Type, pMsgShowWnd->m_bShow, bFocus); } } // { [sonador][3.1.3]경매장 서버 연동 else if( pMsgShowWnd->m_Type == TOGGLE_WINDOW::UIWINDOW_AUCTION ) { if( CloseAllNPCContactedWindows( ) ) { bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; // 노점을 닫자. OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_HOST, false, bFocus ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_AUCTION, pMsg ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_AUCTION, true, true ); } } // } else OnShowUIWindow( pMsgShowWnd->m_Type, pMsgShowWnd->m_bShow, bFocus ); switch( pMsgShowWnd->m_Type ) { case TOGGLE_WINDOW::UIWINDOW_MAINMENU: case TOGGLE_WINDOW::UIWINDOW_SKILL: case TOGGLE_WINDOW::UIWINDOW_MOTION: case TOGGLE_WINDOW::UIWINDOW_SYSTEM: case TOGGLE_WINDOW::UIWINDOW_QUEST_LIST: case TOGGLE_WINDOW::UIWINDOW_QUEST_REWARD: case TOGGLE_WINDOW::UIWINDOW_CHARINFO: case TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE: case TOGGLE_WINDOW::UIWINDOW_BADGE: // LOG_BOOK sfreer 2009-03-04 ProcMsgToUIWindow( pMsgShowWnd->m_Type, pMsg ); break; } /*if( pMsgShowWnd->m_Type == TOGGLE_WINDOW::UIWINDOW_PARTY ) { SUIWnd* pCreatureMainWnd = GetUIWindow(TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN); SUIWnd* pPartyWnd = GetUIWindow(TOGGLE_WINDOW::UIWINDOW_PARTY); if( pPartyWnd && pCreatureMainWnd && pCreatureMainWnd->IsShow() ) { int nCreatureBottom( pCreatureMainWnd->GetRect().bottom ); int nPartyTop( pPartyWnd->GetRect().top ); int nPartyLeft( pPartyWnd->GetRect().left ); if( nCreatureBottom < nPartyTop ) { SIMSG_UI_MOVE MsgMove(TOGGLE_WINDOW::UIWINDOW_PARTY, nPartyLeft, nCreatureBottom-2); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY, &MsgMove ); } } }*/ } else //Modal Wnd { switch( pMsgShowWnd->m_Type ) { case TOGGLE_WINDOW::UIWINDOW_RESURRECT: case TOGGLE_WINDOW::UIWINDOW_RESURRECT_PVP: case TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_MSGBOX: case TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_RANKING: case TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_REWARD_CONFIRM: case TOGGLE_WINDOW::UIWINDOW_SECURITYSETTING: case TOGGLE_WINDOW::UIWINDOW_SECURITYSETTINGMODIFY: case TOGGLE_WINDOW::UIWINDOW_SECURITYCHARACTER: case TOGGLE_WINDOW::UIWINDOW_SECURITYSTORAGE: case TOGGLE_WINDOW::UIWINDOW_SECURITYCLEAR: case TOGGLE_WINDOW::UIWINDOW_IN_GAME_LOGOUT: case TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_CREATE_INSTANCE: // #2.1.2.11.1 case TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_CONFIRM_PASSWORD: case TOGGLE_WINDOW::UIWINDOW_CHANGE_NAME: // sonador #2.1.24 case TOGGLE_WINDOW::UIWINDOW_IP_BLOCK : // floyd 2008. 12. 15 case TOGGLE_WINDOW::UIWINDOW_BADGE: // hunee 2009-03-02 case TOGGLE_WINDOW::UIWINDOW_MIX_PROGRESS: // 아이템수리 윈도우. /// 2011.02.16 아이템 충전 확인 창 - prodongi case TOGGLE_WINDOW::UIWINDOW_RECHARGE_MSGBOX: //2011.07.05 servantes case TOGGLE_WINDOW::UIWINDOW_MISSION_ENTERANCE_WND: case TOGGLE_WINDOW::UIWINDOW_AWAKENING: //case TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_INVITATION : // 길드원초대. bintitle 길드 2010.04.08 //case TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_CLASS : // 길드원등급관리. bintitle 길드 2010.04.27 //case TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_EXPULSION : // 길드원제명. bintitle 길드 2010.04.27 { OnShowUIWindowModal( pMsgShowWnd->m_Type, pMsgShowWnd->m_bShow ); } break; } } pMsg->bUse = true; RelocationWnd(); } break; case IMSG_UI_LIST_MOVE_BACK : { SIMSG_UI_LIST_MOVE_BACK *pData = (SIMSG_UI_LIST_MOVE_BACK*)pMsg; SUIWnd* pWnd = getSUIWnd( pData->nWinID ); if( pWnd ) { m_pUIWndManager->RemoveWnd( pWnd ); //제거 후 m_pUIWndManager->AddWnd( pWnd, false, true ); //맨앞에 추가(앞쪽 일 수 록 맨뒤에 랜더링 됨) } pData->bUse = true; } break; /// 2012.06.20 - prodongi case IMSG_UI_LIST_MOVE_FORCE_BACK : { SIMSG_UI_LIST_MOVE_FORCE_BACK *pData = (SIMSG_UI_LIST_MOVE_FORCE_BACK*)pMsg; SUIWnd* pWnd = getSUIWnd( pData->nWinID ); if( pWnd ) { m_pUIWndManager->RemoveWnd( pWnd ); //제거 후 m_pUIWndManager->addWndForceBack(pWnd); //맨앞에 추가(앞쪽 일 수 록 맨뒤에 랜더링 됨) } pData->bUse = true; } break; case MSG_SEND_DATA: { SMSG_SEND_DATA *pData = (SMSG_SEND_DATA *)pMsg; pMsg->bUse = true; if( pData->strMessage == "open_item_shop" ) { // floyd 3.11.1 iMBC 채널링 구현 std::string strUrl; if ( ENV().IsExist( "shop_url" ) ) { strUrl = ENV().GetString( "shop_url" ); ShellExecute( NULL, NULL, "iexplore.exe", strUrl.c_str(), NULL, SW_SHOWMAXIMIZED ); } else { strUrl = getItemShopURL( pData->nNumber, pData->nNumber2, pData->nNumber3, pData->strData.c_str() ); if( stricmp( ENV().GetString( "country" ).c_str(), "HK" ) == 0 ) { ShellExecute( NULL, NULL, "iexplore.exe", strUrl.c_str(), NULL, SW_SHOWMAXIMIZED ); } else { //strURL 로 아이템 샵 웹페이지 열기 SetNavigate( strUrl.c_str(), true, g_Cash_add_url.x, g_Cash_add_url.y ); HWND hWnd=g_hWnd; RECT rcWnd/*, rWnd*/; GetClientRect(hWnd, &rcWnd); // GetWindowRect(hWnd, &rWnd); rcWnd.left = 0; rcWnd.top = 0; int nWidth = rcWnd.right - rcWnd.left; int nHeight = rcWnd.bottom - rcWnd.top; SUIWnd* pWnd = GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CASH_TITLE ); if( pWnd ) { int nCenterX = (nWidth - g_Cash_url.x ) /2 + g_Cash_add_url.x; // int nCenterY = (nHeight - g_Cash_url.y ) /2 + g_Cash_add_url.y; // int nLeft = rcWnd.left + nCenterX; int nTop = rcWnd.top + nCenterY; pWnd->MovePos( nLeft, (nTop-pWnd->GetRect().GetHeight()+1) ); ////인벤 강제 이동 //SUIWnd* pInvenWnd = GetUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY ); //if( pInvenWnd ) pInvenWnd->MovePos( nLeft, nTop ); ////캐쉬 아이템 창고 강제 이동 //SUIWnd* pCashTitle = GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CASH_STORAGE ); //if( pInvenWnd && pCashTitle ) //{ // pCashTitle->MovePos( pInvenWnd->GetRect().left-pCashTitle->GetRect().GetWidth()+2, pInvenWnd->GetRect().bottom-pCashTitle->GetRect().GetHeight()-60 ); //} } bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_CASH_TITLE, true, bFocus ); } } return; } if( pData->strMessage == "open_guil_web" ) { std::string strUrl = getGuildInfoURL( pData->nNumber, pData->nNumber2, pData->nNumber3, pData->strData.c_str() ); /// 2011.05.16 ProcMsgAtStatic는 정적 입력 변수이다 - prodongi //this->m_pGameManager->ProcMsgAtStatic( new SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MANAGE, "guild_url", strUrl.c_str() ) ); this->m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MANAGE, "guild_url", strUrl.c_str() ) ); // 삭제. bintitle. 2010.05.17 ////메시지 박스 존재 하면, 안 열림 //if( m_pUIWndManager->IsOpenModalWnd() ) // return; //if( !IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_GUILD_TITLE ) ) //{ // std::string strUrl = getGuildInfoURL( pData->nNumber, pData->nNumber2, pData->nNumber3, pData->strData.c_str() ); // this->m_pGameManager->ProcMsgAtStatic( new SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::_UIWINDOW_TYPE::UIWINDOW_GUILD_SUB_MANAGE, "guild_url", strUrl.c_str() ) ); // // int nWinWidth = 240; // int nWinHeight = 330; // //strURL 로 길드 관리 웹페이지 열기 // SetOtherNavigate( TOGGLE_WINDOW::UIWINDOW_GUILD_TITLE, strUrl.c_str(), nWinWidth, nWinHeight ); // HWND hWnd=g_hWnd; // RECT rcWnd; // GetClientRect(hWnd, &rcWnd); // rcWnd.left = 0; // rcWnd.top = 0; // int nWidth = rcWnd.right - rcWnd.left; // int nHeight = rcWnd.bottom - rcWnd.top; // int nCenterX = (nWidth - nWinWidth)/2; // int nCenterY = (nHeight - nWinHeight)/2; // int nLeft = rcWnd.left + nCenterX; // int nTop = rcWnd.top + nCenterY; // SUIWnd* pWnd = GetUIWindow( TOGGLE_WINDOW::UIWINDOW_GUILD_TITLE ); // if( pWnd ) pWnd->MovePos( nLeft, (nTop-20+1) ); // bool bFocus = true; // if( GetGameOption().IsEnterChat() ) // bFocus = false; // OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_GUILD_TITLE, true, bFocus ); //} return; } if( pData->strMessage == "open_help_web" ) { //메시지 박스 존재 하면, 안 열림 if( m_pUIWndManager->IsOpenModalWnd() ) return; /* std::string strUrl = ENV().GetString( "ghelp_url", "http://www.rappelz.com/client/help/default.aspx" ); int nWinWidth = g_Help_url.x; int nWinHeight = g_Help_url.y; //strURL 로 길드 관리 웹페이지 열기 SetOtherNavigate( TOGGLE_WINDOW::UIWINDOW_HELP_TITLE, strUrl.c_str(), nWinWidth, nWinHeight ); */ // 2009.02.27 floyd : 도움말 화면을 열때 웹서버쪽으로 부가정보를 보내어 Dynamic Help가 가능하도록 지원 std::string strUrl; SPlayerInfo & info = m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerInfo(); SGameAvatarEx* pLocalPlayer = g_pCurrentGameSystem->GetLocalPlayer(); // 성별과 종족 정보는 SPlayerInfo쪽에 제대로 들어있지 않기 떄문에 어쩔수 없이... XStringUtil::Format( strUrl, "%s?name=%s&sex=%d&race=%d&job=%s&jlv=%d&lv=%d", //ENV().GetString( "ghelp_url", "http://www.rappelz.com/client/help/default.aspx" ).c_str(), ENV().GetString( "ghelp_url", "http://127.0.0.1/client/help/default.aspx" ).c_str(), //Fraun nullifying gala spyware asscans 7/12/2025 info.GetName(), pLocalPlayer->GetSex(), pLocalPlayer->GetRace(), info.GetJobName(), info.GetJLv(), info.GetLevel() ); int nWinWidth = g_Help_url.x; int nWinHeight = g_Help_url.y; //strURL 로 길드 관리 웹페이지 열기 SetOtherNavigate( TOGGLE_WINDOW::UIWINDOW_HELP_TITLE, strUrl.c_str(), nWinWidth, nWinHeight ); HWND hWnd=g_hWnd; RECT rcWnd; GetClientRect(hWnd, &rcWnd); rcWnd.left = 0; rcWnd.top = 0; int nWidth = rcWnd.right - rcWnd.left; int nHeight = rcWnd.bottom - rcWnd.top; int nCenterX = (nWidth - nWinWidth)/2; int nCenterY = (nHeight - nWinHeight)/2; int nLeft = rcWnd.left + nCenterX; int nTop = rcWnd.top + nCenterY; SUIWnd* pWnd = GetUIWindow( TOGGLE_WINDOW::UIWINDOW_HELP_TITLE ); if( pWnd ) pWnd->MovePos( nLeft, (nTop-20+1) ); bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_HELP_TITLE, true, bFocus ); return; } if( pData->strMessage == "re_popurl_web" ) { //메시지 박스 존재 하면, 안 열림 if( m_pUIWndManager->IsOpenModalWnd() ) return; //URL 갱신 int nWinWidth = 620; int nWinHeight = 633; if( pData->nNumber2 != 0 && pData->nNumber3 != 0 ) { nWinWidth = pData->nNumber2; nWinHeight = pData->nNumber3; } SetOtherNavigate( TOGGLE_WINDOW::UIWINDOW_POPURL_TITLE, pData->strData.c_str(), nWinWidth, nWinHeight ); return; } if( pData->strMessage == "move_popurl_web" ) { SUIWnd* pWnd = GetUIWindow( TOGGLE_WINDOW::UIWINDOW_POPURL_TITLE ); if( pWnd ) { SetOtherNavigateMove( TOGGLE_WINDOW::UIWINDOW_POPURL_TITLE, pWnd->GetRect().left+2, (pWnd->GetRect().top+20-1) ); } return; } if( pData->strMessage == "move_guild_web" ) { SUIWnd* pWnd = GetUIWindow( TOGGLE_WINDOW::UIWINDOW_GUILD_TITLE ); if( pWnd ) { SetOtherNavigateMove( TOGGLE_WINDOW::UIWINDOW_GUILD_TITLE, pWnd->GetRect().left+2, (pWnd->GetRect().top+20-1) ); } return; } if( pData->strMessage == "move_help_web" ) { SUIWnd* pWnd = GetUIWindow( TOGGLE_WINDOW::UIWINDOW_HELP_TITLE ); if( pWnd ) { SetOtherNavigateMove( TOGGLE_WINDOW::UIWINDOW_HELP_TITLE, pWnd->GetRect().left+2, (pWnd->GetRect().top+20-1) ); } return; } if( pData->strMessage == "close_item_shop" ) { std::string strUrl = "EmptyPage"; SetNavigate( strUrl.c_str(), false, 0, 0 ); //종료 메시지 처리 if( m_nHeapMsgBox == SIMSG_REQ_OPEN_MSGBOX::MSGBOX_EXITGAME ) { OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_EXITGAME, false, SYS_MSG_SERVER_EXITGAME ); m_nHeapMsgBox = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOTUSE; } //서버 접속 종료 처리 if( !m_pGameManager->IsValidConnectedServer() ) { OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOCONNECTSERVER, false, SYS_MSG_SERVER_DISCONNECT ); } return; } if( pData->strMessage == "close_guild_web" ) { SetOtherNavigateClose( TOGGLE_WINDOW::UIWINDOW_GUILD_TITLE ); //종료 메시지 처리 if( m_nHeapMsgBox == SIMSG_REQ_OPEN_MSGBOX::MSGBOX_EXITGAME ) { OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_EXITGAME, false, SYS_MSG_SERVER_EXITGAME ); m_nHeapMsgBox = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOTUSE; } return; } if( pData->strMessage == "close_help_web" ) { SetOtherNavigateClose( TOGGLE_WINDOW::UIWINDOW_HELP_TITLE ); //종료 메시지 처리 if( m_nHeapMsgBox == SIMSG_REQ_OPEN_MSGBOX::MSGBOX_EXITGAME ) { OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_EXITGAME, false, SYS_MSG_SERVER_EXITGAME ); m_nHeapMsgBox = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOTUSE; } return; } if( pData->strMessage == "close_popurl_web" ) { SetOtherNavigateClose( TOGGLE_WINDOW::UIWINDOW_POPURL_TITLE ); //종료 메시지 처리 if( m_nHeapMsgBox == SIMSG_REQ_OPEN_MSGBOX::MSGBOX_EXITGAME ) { OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_EXITGAME, false, SYS_MSG_SERVER_EXITGAME ); m_nHeapMsgBox = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOTUSE; } //서버 접속 종료 처리 if( !m_pGameManager->IsValidConnectedServer() ) { OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOCONNECTSERVER, false, SYS_MSG_SERVER_DISCONNECT ); } return; } //파티 옵션 창으로 초대 메세지 보낸다. if( pData->strMessage == "req_invite" ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY_MENU, pMsg ); return; } if( pData->strMessage == "close_all_message_box" ) { m_pUIWndManager->CloseAllMessageBox(); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_RESURRECT, false, false ); return; } if( pData->strMessage == "close_rebirth_message_box" ) { m_pUIWndManager->CloseRebirthMessageBox(); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_RESURRECT, false, false ); return; } // kappamind. 대련 부활 메세지 박스 닫기. if( pData->strMessage == "close_rebirth_PVP_message_box" ) { m_pUIWndManager->CloseRebirth_PVP_MessageBox(); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_RESURRECT_PVP, false, false ); g_pCurrentGameSystem->SetDeathPVP(false); return; } /* if( pData->strMessage == "local_name" ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP, pMsg ); return; }*/ if( pData->strMessage == "creature_update" ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE, pMsg ); return; } if( pData->strMessage == "RECALL_DYNAMIC_CLOSE" ) { delDynamicWnd( pData->nNumber ); return; } // 2010.05.12 - prodongi if (pData->strMessage == "inventory_use_hair_item") { std::string str = CStringUtil::StringFormat("<#e3d19f>%s
<#ffffff>%s", pData->strData.c_str(), S(1734)); OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_USE_HAIR_ITEM, false, -1, str.c_str()); return ; } /// 2012.04.30 페널티용 메세지 박스 오픈 - prodongi else if (pData->strMessage == "open_panelty_message_box") { KUIMsgControl* msgControl = OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, false, pData->nNumber); if (msgControl) { cMsgControlPenaltyCustomizer* customizer = new cMsgControlPenaltyCustomizer; customizer->setBlockTime(pData->nNumber2); customizer->setPenaltyCount(pData->nNumber3); customizer->setPenaltyCountTime(pData->nNumber4); msgControl->setCustomizing(customizer); } return ; } } break; case IMSG_UI_DUNGEONUNIT_UPDATE: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_DUNGEON_UNIT, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_DUNGEON_UNIT_MINI, pMsg ); //2011. 10 .21 - marine } break; case IMSG_UI_TITLE_GAIN_NOTIFY: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TITLE_GAIN_RESULT, pMsg ); // 2012. 4. 4 - marine } break; case IMSG_UI_TITLE_SET_MAIN: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TITLE_MAIN, pMsg ); // 2012. 5. 7 - marine ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHARINFO, pMsg ); // 2012. 5. 21 - marine 캐릭터 창 주호칭 이름 갱신 // 2012. 5. 29 - marine 네임판넬 호칭 변경 알림 SIMSG_UI_TITLE_SET_MAIN *pTitle = dynamicCast(pMsg); if(pTitle) { CHARWINDOW * pCWnd = getCharacterWnd( pTitle->handle ); if( pCWnd && pCWnd->pWnd ) { pCWnd->pWnd->setTitleName(pTitle->strName); } } } break; case IMSG_UI_TITLE_SET_SUB: ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TITLE_MAIN, pMsg ); break; case IMSG_UI_TITLE_SET_CONDITION: ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TITLE_MAIN, pMsg ); break; case IMSG_UI_TITLE_SET_BOOKMARK: ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TITLE_MAIN, pMsg ); break; case IMSG_UI_TITLE_SET_ACHIEVE: ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TITLE_MAIN, pMsg ); break; case IMSG_UI_TITLE_SET_OPEN: ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TITLE_MAIN, pMsg ); break; case IMSG_UI_TITLE_SET_COOLTIME: ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TITLE_MAIN, pMsg ); break; case IMSG_UI_TITLE_NEW_ALRAM: ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TITLE_MAIN, pMsg ); break; case IMSG_UI_TITLE_OPTION_CHANGE: { CHARWINDOW* pCWnd = NULL; bool res; res = m_hashCharacterWindow.get_first_value( pCWnd ); while ( res ) { if ( pCWnd && pCWnd->pWnd ) { if( pCWnd->pWnd->GetObjType() == TS_ENTER::GAME_PLAYER ) { pCWnd->pWnd->NotifyTitleNameUsingState(); } } res = m_hashCharacterWindow.get_next_value( pCWnd ); } } break; case IMSG_UI_TITLE_WND_OPEN: ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TITLE_MAIN, pMsg ); break; case IMSG_UI_NAMEPANEL_PARTY_HP: { SIMSG_UI_NAMEPANEL_PARTY_HP *pMsgHP = dynamicCast(pMsg); if(pMsgHP) { CHARWINDOW* pCWnd = NULL; pCWnd = getCharacterWnd( pMsgHP->handle ); if(pCWnd && pCWnd->pWnd ) { // 파티원 HP 리프레시 하고 pCWnd->pWnd->RefreshHP(); // 파티원 크리쳐도 HP 리프레시 SetCreatureNamePanel( pMsgHP->handle, false ); // false는 적군이 아님.. } } }break; case IMSG_REQ_OPEN_MSGBOX: { // _oprint( "IMSG_REQ_OPEN_MSGBOX\n" ); SIMSG_REQ_OPEN_MSGBOX* pReqMsgBoxMsg = (SIMSG_REQ_OPEN_MSGBOX*)pMsg; switch( pReqMsgBoxMsg->m_MsgBoxID ) { case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOCONNECTSERVER: { //크루샵 떠 있으면, 따로 처리 if( IsWebPageWndOpened() ) { //크루샵 Open } else { //일반 OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SERVERLIMITMAX: OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DEAD: { //크루샵 떠 있으면, 따로 처리 if( IsWebPageWndOpened() ) { } else { //나중에 정리 하자 ㅡ.,ㅡ if( pReqMsgBoxMsg->m_bIsPlayer ) { // 2010.08.02 대련중일때는 유료아이템(대모요정의 병, 요정의 병)에 관련된 메세지 박스가 나오지 않도록 한다- prodongi if( g_pCurrentGameSystem->GetDeathPVP() ) // kappamind. 대련 부활 메세지 박스. { //유료 아이템이 없으면 // OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText, 0, false ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_RESURRECT_PVP, true, false ) ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_RESURRECT_PVP, &SIMSG_UI_RESURRECTION( SUIResurrectWnd::RESURRECTION_PVP, pReqMsgBoxMsg->m_hOwner, 0, pReqMsgBoxMsg->m_strTextValue.c_str() ) ); } else if( g_pCurrentGameSystem->isInArena() ) { OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText, 0, false ); } // Azia Mafia Horizon pvp else if (g_pCurrentGameSystem->isHorizon()) { m_pGameManager->PostMsgAtDynamic(new SIMSG_SHOW_UIWINDOW(TOGGLE_WINDOW::UIWINDOW_RESURRECT_PVP, true, false)); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_RESURRECT_PVP, &SIMSG_UI_RESURRECTION(SUIResurrectWnd::RESURRECTION_PVP, pReqMsgBoxMsg->m_hOwner, 0, pReqMsgBoxMsg->m_strTextValue.c_str())); } else { int item_id = 0; if( m_pDisplayInfo->IsExistInvenItem( 910004 ) ) item_id = 910004; if( m_pDisplayInfo->IsExistInvenItem( 910005 ) ) item_id = 910005; if( m_pDisplayInfo->IsExistInvenItem( 2902042 ) ) item_id = 2902042; if( m_pDisplayInfo->IsExistInvenItem( 2010454 ) ) // 09년 국내 출석 이벤트용 대모 요정의병 2009.04.29 sfreer item_id = 2010454; if( m_pDisplayInfo->IsExistInvenItem( 910102 ) ) item_id = 910102; if( m_pDisplayInfo->IsExistInvenItem( 2016036 ) ) item_id = 2016036; if( m_pDisplayInfo->IsExistInvenItem( 2016142 ) ) item_id = 2016142; // Azia Mafia EB Arcade if (g_pCurrentGameSystem->isInArcade()) item_id = 0; if( !item_id ) { if( pReqMsgBoxMsg->m_hOwner ) //Owner가 존재하면 지속효과 부활 { m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_RESURRECT, true, false ) ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_RESURRECT, &SIMSG_UI_RESURRECTION( SUIResurrectWnd::RESURRECTION_BY_STATE, pReqMsgBoxMsg->m_hOwner, 0, pReqMsgBoxMsg->m_strTextValue.c_str() ) ); } else //유료 아이템이 없으면 OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText, 0, false ); } else { m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_RESURRECT, true, false ) ); if( pReqMsgBoxMsg->m_hOwner ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_RESURRECT, &SIMSG_UI_RESURRECTION( SUIResurrectWnd::RESURRECTION_BY_ITEM_STATE, pReqMsgBoxMsg->m_hOwner, item_id, pReqMsgBoxMsg->m_strTextValue.c_str() ) ); else ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_RESURRECT, &SIMSG_UI_RESURRECTION( SUIResurrectWnd::RESURRECTION_BY_ITEM, pReqMsgBoxMsg->m_hOwner, item_id ) ); } } } else { if( pReqMsgBoxMsg->m_hOwner ) { m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_RESURRECT, true, false ) ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_RESURRECT, &SIMSG_UI_RESURRECTION( SUIResurrectWnd::RESURRECTION_CREATURE_BY_STATE, pReqMsgBoxMsg->m_hOwner, 910005, pReqMsgBoxMsg->m_strTextValue.c_str() ) ); } } } } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ALREADYEXIST: OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL_AND_HTTP_LINK: m_strHttpLink = SStringDB::GetTaggedHttpLink( pReqMsgBoxMsg->m_strText ); OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_EXITGAME: { if( IsWebPageWndOpened() ) { m_nHeapMsgBox = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_EXITGAME; return; } OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); } break; // 2010.06.11 - prodongi case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_LOGIN_ERR: // 2010.06.23 - prodongi //OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_EXITGAME, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_LOGIN_ERR, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DELETECHARCHECK: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OPTION_APPLY: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CASHSHOP_OPEN: OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DELETECHARWAIT: // #2.1.2.8.3 sonador OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NONE, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); break; //모달 리스 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_EXPULSION: // 길드원추방 결정. case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_PARTYJOINCHECK: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_PARTYARENAOPPONENTJOINCHECK: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_PARTYARENAMEMBERJOINCHECK: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILDJOINCHECK: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_TRADEJOINCHECK: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_RAID_GUILD_INVITE: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_RAID_MERCENARY_INVITE: if( !g_pCurrentGameSystem->GetPVPAcceptCheck() ) OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText, 0, false ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_DESTROY: // 길드해체. case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_PROMOTE: // 길드장인계. //case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_EXPULSION: // 길드원추방 결정. case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_SECESSION: // 길드 탈퇴 결정. case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_BUFF: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_DONATE: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_UPGRADE: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ITEMDROPCHECK: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ITEMDESTRUCTION: // 아이템파괴. case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GIVEUPQUEST: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_TRADEFREEZECHECK: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_PARTYDESTROYCHECK: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_PARTYKICKMEMBERCHECK: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DUNGEONSTONE_REQUEST: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DUNGEONSTONE_CANCEL: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_ASSIGN_OKCANCEL: // 2011.03.07 servantes case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_REGAIN_OKCANCEL: OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN1: // 2011.05.16 - servantes case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN2: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN3: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CREATURE_FARM_DO_NOT_ASSIGN4: OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); break; // 2011.07.06 - servantes case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_INSTANCE_DUNGEON_ENTERANCE: // XX던전으로 이동하겠습니까 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_INSTANCE_DUNGEON_EXIT: // XX던전에서 퇴장하시겠습니까 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_INSTANCE_DUNGEON_EXIT2: // XX던전에서 나가겠습니까 OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_LOGINWAITING: OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CANCEL, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText, pReqMsgBoxMsg->m_dwWaitTime ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_STORE_PRICE_OVER: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_STORE_PRICE_UNDER: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ALLIANCE_ACCEPT: OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); break; //2009-02-25: hunee case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_BATTLE_ACCEPT: // 2011.07.26 - servantes : 대련 신청 주석 추가 OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText, 0, false, pReqMsgBoxMsg->m_strTextValue.c_str() ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_JEWEL_EQUIP: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_AUCTION_DEREGISTER: // [sonador][3.1.2]경매장 구현 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HUNTAHOLIC_SCOREBOARD: // #2.1.2.11.1 OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText, 0, true, pReqMsgBoxMsg->m_strTextValue.c_str() ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HUNTAHOLIC_MAXPOINT: // #2.1.2.11.5 OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText, 0, true, pReqMsgBoxMsg->m_strTextValue.c_str() ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_STORE_WEIGHT_OVER: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CONTRIBUTION_REWARD_DISABLE: OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); break; //HK 경고창 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_BAD_USER_WARNING: OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CONTINUECANCEL, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SELL_WARNING: OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SELECT_SERVER: OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NONE, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_RESTART_GAME: { OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText, 0, false ); } break; //HackShield 경고창 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_AUTOMOUSE : //메세지 and 종료 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_HOOKFUNCTION : //메세지 and 종료 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_DRIVERFAILED : //메세지 and 종료 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_SPEEDHACK : //메세지 and 종료 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_SPEEDHACK_APP : //메세지 and 종료 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_MESSAGEHOOK : //메세지 and 종료 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_KDTRACE : //메세지 and 종료 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_KDTRACE_CHANGED : //메세지 and 종료 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_GAME_HACK : //메세지 and 종료 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_MODULE_CHANGE : //메세지 and 종료 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_AUTOMACRO : //메세지 and 종료 // sonador 7.4.1 AHNHS_ACTAPC_DETECT_AUTOMACRO 관련 callback 처리 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_ENGINEFAILED: // sonador 7.4.4 핵쉴드 270 적용 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_CODEMISMATCH: // //nProtect 경고창 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NP_COMM_ERROR: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NP_COMM_CLOSE: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NP_INIT_ERROR: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NP_SPEEDHACK: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NP_GAMEHACK_KILLED: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NP_GAMEHACK_DETECT: case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NP_GAMEHACK_DOUBT: { // sonador 7.4.3 해킹 툴 감지후 종료 프로세스 구현 OpenMessageBox( pReqMsgBoxMsg->m_Type, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); m_pGameManager->CloseToServer(); } break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_HS_DETECT_GENERAL_HACK : //메세지 and Yes | Cancel OpenMessageBox( pReqMsgBoxMsg->m_Type, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); break; case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DEATHMATCH_FREED_ENTER : case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DEATHMATCH_RANKED_ENTER : case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DEATHMATCH_EXIT : { //OpenMessageBox( pReqMsgBoxMsg->m_Type, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText ); OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText, 0, false, pReqMsgBoxMsg->m_strTextValue.c_str() ); } break; //----------------------------- // 길드 case SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GUILD_YES : OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, pReqMsgBoxMsg->m_MsgBoxID, pReqMsgBoxMsg->m_bClose, pReqMsgBoxMsg->m_nTextID, pReqMsgBoxMsg->m_strText, 0, false, pReqMsgBoxMsg->m_strTextValue.c_str() ); break; } pMsg->bUse = true; } break; case MSG_LOGIN: { SMSG_LOGIN * pLoginMsg = (SMSG_LOGIN *)pMsg; CheckInterfaceManager(); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHARINFO, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINFRAME, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP , pMsg ); CreateCharacterWindow( m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerHandle(), TS_ENTER::GAME_PLAYER, true, m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerInfo().GetName(), "<@313246>" ); CreateGaugeWindow( m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerHandle(), true ); UpdateWndMovePos(); CHARWINDOW* pCWnd = getCharacterWnd( m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerHandle() ); if( pCWnd && pCWnd->pWnd ) { pCWnd->pWnd->RefreshHP( pLoginMsg->hp, pLoginMsg->max_hp ); pCWnd->pWnd->SetGuildID( pLoginMsg->guild_id ); } /// 배틀 아레나 재접속 했을 경우에, 업데이트를 해줘야 된다. /// SMSG_LOGIN를 받기 전에 아레나 관련 패킷만 받아서 처리된거는 로컬 핸들이 유효하지 않기 때문에 /// 제대로 설정이 되지 않는다. sArenaUtility utility; int wndId = utility.getArenaGameWindowId(g_pCurrentGameSystem->getArenaId()); ProcMsgToUIWindow(wndId, pMsg); m_bIsActive_Display_Process = true; pMsg->bUse = true; // 캐릭터 변경시 에디터 창에 포커스 가는 버그 수정.. sfreer 2009.04.30 if( !KUIControlEdit::IsNobodyHasFocus() ) { //KUIControlEdit::SetInitFocus(); } } break; case MSG_ENTER: { SMSG_ENTER* pEnterMsg = (SMSG_ENTER*)pMsg; std::string strName; const char* szNameColorTag = NULL; int nItemCode = 0; count_t nItemCount( 0 ); int nGuild_ID = 0; int nTitleID = 0; int nBackBoardID = 0; bool bPvpUnit = false; // 시즈, 아레나 에서의 적 캐릭터 또는 적 크리쳐 int nHP, nMaxHP; nHP = 0; nMaxHP = 100; switch( pEnterMsg->ObjType ) { case TS_ENTER::GAME_PLAYER: { SMSG_ENTER::PlayerInfo * pPlayerInfo = ((SMSG_ENTER::PlayerInfo*)(pEnterMsg + 1)); strName = pPlayerInfo->szName; /* if( ( pPlayerInfo->status & TS_ENTER::PlayerInfo::FLAG_PK_ON ) || ( pPlayerInfo->status & TS_ENTER::PlayerInfo::FLAG_DEMONIAC ) || ( pPlayerInfo->status & TS_ENTER::PlayerInfo::FLAG_BLOODY ) ) { szNameColorTag = "<#FF000000><@525d71FF>"; } else szNameColorTag = "<#FFFFFFFF><@525d71FF>";*/ szNameColorTag = "<@313246>"; SGame* pGame(NULL); pGame = m_pGameManager->GetActiveGame(); if(pGame && pGame->GetCurrentLocation() == PLAYER_IN_DUNGEON_SIEGE) { if(!g_pCurrentGameSystem->isMyGuild(pPlayerInfo->guild_id)) szNameColorTag = "<#e54c4c><@401717>"; } nHP = pPlayerInfo->hp; nMaxHP = pPlayerInfo->max_hp; nGuild_ID = pPlayerInfo->guild_id; nTitleID = pPlayerInfo->title_code; nBackBoardID = pPlayerInfo->back_board; bPvpUnit = IsEnemyUnit( pEnterMsg->handle, pEnterMsg->ObjType ); } break; case TS_ENTER::GAME_NPC: { SMSG_ENTER::NPCInfo * pNPCInfo = ((SMSG_ENTER::NPCInfo*)(pEnterMsg + 1)); strName = GetNpcResourceDB().GetNpcJobName( pNPCInfo->npc_id ); strName += " "; strName += GetNpcResourceDB().GetNpcName( pNPCInfo->npc_id ); szNameColorTag = "<#ff8400><@3f2115>"; } break; /* case TS_ENTER::GAME_MOB: //IMSG_UI_ADD_MONSTER 여기서 처리 { SMSG_ENTER::MonsterInfo * pMobInfo = ((SMSG_ENTER::MonsterInfo*)(pEnterMsg + 1)); int TextID = GetMonsterDB().GetTextID( pMobInfo->monster_id ); strName = GetStringDB().GetString( TextID ); szNameColorTag = "<#ffcfb5FF><@562921FF>"; nHP = pMobInfo->hp; nMaxHP = pMobInfo->max_hp; } break;*/ case TS_ENTER::GAME_MOB: { // 2012. 6. 18 - marine IMSG_UI_ADD_MONSTER 에서 처리하던 부분을 가져옴.. 엔터메시지에서 MonsterInfo를 얻을 수 있다. CHARWINDOW* pCWnd = getCharacterWnd( pEnterMsg->handle ); if( pCWnd && pCWnd->pWnd ) { // 2012 .6. 18 - marine ( 1 == 환경몹(전투타입) ) SMSG_ENTER::MonsterInfo * pMobInfo = ((SMSG_ENTER::MonsterInfo*)(pEnterMsg + 1)); if(pMobInfo) { if( GetMonsterDB().GetFightType( pMobInfo->monster_id ) == 1 ) pCWnd->pWnd->RemoveHpGuage(); else pCWnd->pWnd->RefreshHP( pMobInfo->hp, pMobInfo->max_hp ); } } }break; case TS_ENTER::GAME_SUMMON: { SMSG_ENTER::SummonInfo * pSummonInfo = ((SMSG_ENTER::SummonInfo*)(pEnterMsg + 1)); // int TextID = GetCreatureDB().GetTextID( pSummonInfo->summon_code ); // strName = GetStringDB().GetString( TextID ); strName = pSummonInfo->szName; szNameColorTag = "<#ffcfb5><@5a4435>"; nHP = pSummonInfo->hp; nMaxHP = pSummonInfo->max_hp; // 나의 크리처라면.. // 현재 보여 주면 안되는 상황임... if( m_pDisplayInfo->GetCreatureManager() && m_pDisplayInfo->GetCreatureManager()->IsEquipedCreature( pEnterMsg->handle ) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN , pMsg ); //ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_HQUICK, pMsg ); bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN , true, bFocus ); //게이지 윈도우 CreateGaugeWindow( pEnterMsg->handle ); } else CheckInterfaceManager(); SGame* pGame(NULL); pGame = m_pGameManager->GetActiveGame(); if( pGame ) { SGameAvatarEx* pAvatar = (SGameAvatarEx*)( pGame->GetGameObject(pEnterMsg->handle) ); if( m_pDisplayInfo->IsPartyMember( pAvatar->GetMaster() )) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY_STATE, pMsg ); } bPvpUnit = IsEnemyUnit( pEnterMsg->handle , pEnterMsg->ObjType ); } } break; case TS_ENTER::GAME_PET: // sonador 10.2.1 팻 시스템 구현 { SMSG_ENTER::PetInfo* pPetInfo = ( (SMSG_ENTER::PetInfo*)( pEnterMsg + 1 ) ); strName = pPetInfo->szName; szNameColorTag = "<#ffcfb5><@5a4435>"; } break; case TS_ENTER::GAME_ITEM: { SMSG_ENTER::ItemInfo * pItemInfo = ((SMSG_ENTER::ItemInfo*)(pEnterMsg + 1)); nItemCode = pItemInfo->code; nItemCount = count_t( pItemInfo->cnt ); int TextID = GetItemDB().GetTextID( nItemCode ); strName = GetStringDB().GetString( TextID ); szNameColorTag = "<#ffffff><@313246>"; } break; } if( pEnterMsg->ObjType != TS_ENTER::GAME_ITEM && pEnterMsg->ObjType != TS_ENTER::GAME_FIELD_PROP && pEnterMsg->ObjType != TS_ENTER::GAME_SKILL_PROP ) { if( !strName.empty() ) { CreateCharacterWindow( pEnterMsg->handle, pEnterMsg->ObjType, false, strName.c_str(), szNameColorTag ); CHARWINDOW* pCWnd = getCharacterWnd( pEnterMsg->handle ); if( pCWnd && pCWnd->pWnd ) { pCWnd->pWnd->RefreshHP( nHP, nMaxHP ); if( pEnterMsg->ObjType == TS_ENTER::GAME_PLAYER ) { //Player는 SetPKNameColor를 한번 호출해준다 pCWnd->pWnd->SetPKNameColor( ((SMSG_ENTER::PlayerInfo*)(pEnterMsg + 1))->status ); pCWnd->pWnd->SetGuildID( nGuild_ID ); pCWnd->pWnd->ChangeGuildName(); pCWnd->pWnd->setTitleName( nTitleID ); pCWnd->pWnd->SetEmblem( nBackBoardID ); pCWnd->pWnd->setEnemyUnit( bPvpUnit, pEnterMsg->ObjType ); // 적군인지 아닌지 알려준다. m_pDisplayInfo->ReqGuildIcon( nGuild_ID ); } else if( pEnterMsg->ObjType == TS_ENTER::GAME_SUMMON) { pCWnd->pWnd->setEnemyUnit( bPvpUnit, pEnterMsg->ObjType ); // 적군인지 아닌지 알려준다. } } } } else { if( !strName.empty() && pEnterMsg->ObjType == TS_ENTER::GAME_ITEM ) CreateDropItemWindow( pEnterMsg->handle, nItemCode, nItemCount, strName.c_str(), szNameColorTag ); } if( pEnterMsg->ObjType == TS_ENTER::GAME_NPC || pEnterMsg->ObjType == TS_ENTER::GAME_MOB || pEnterMsg->ObjType == TS_ENTER::GAME_FIELD_PROP) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP, pMsg ); } /// 2011.08.16 - prodongi if (pEnterMsg->ObjType == TS_ENTER::GAME_FIELD_PROP) { SMSG_ENTER::FieldPropInfo * fieldPropInfo = ((SMSG_ENTER::FieldPropInfo*)(pEnterMsg + 1)); FieldPropResource* res = GetFieldPropResourceDB().GetFieldPropResource( fieldPropInfo->prop_id ); if (res) { CreateCharacterWindow(pEnterMsg->handle, pEnterMsg->ObjType, false, S(res->text_id), "<#FFFFFF>"); } } pMsg->bUse = true; } break; case MSG_LEAVE: { SMSG_LEAVE* pLeaveMsg = (SMSG_LEAVE*)pMsg; RemoveCharacterWindow( pLeaveMsg->handle ); RemoveDropItemWindow( pLeaveMsg->handle ); RemoveGaugeWindow( pLeaveMsg->handle ); SGame* pGame(NULL); pGame = m_pGameManager->GetActiveGame(); if( pGame ) { SGameAvatarEx* pAvatar = (SGameAvatarEx*)( pGame->GetGameObject(pLeaveMsg->handle) ); if( pAvatar && pAvatar->GetObjType() == TS_ENTER::GAME_SUMMON ) { if( m_pDisplayInfo->IsPartyMember( pAvatar->GetMaster() )) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY_STATE, pMsg ); } } else { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY_STATE, pMsg ); /// 2011.08.17 - prodongi if( pAvatar && (pAvatar->GetObjType() == TS_ENTER::GAME_MOB || pAvatar->GetObjType() == TS_ENTER::GAME_FIELD_PROP)) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP, pMsg ); } } } if( m_pDisplayInfo->GetCreatureManager() && m_pDisplayInfo->GetCreatureManager()->IsEquipedCreature( pLeaveMsg->handle ) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN , pMsg ); } pMsg->bUse = true; } break; case MSG_LEVEL_UPDATE: { AR_HANDLE handle = 0; handle = ((SMSG_LEVEL_UPDATE*)pMsg)->handle; if( m_pDisplayInfo->GetPlayerInfoManager() ) { if( handle == m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerHandle() ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINFRAME, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILL, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILLFUND, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_EQUIPMENT, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHARINFO, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY, pMsg ); } if( m_pDisplayInfo->GetCreatureManager()->IsEquipedCreature( handle ) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILLFUND, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATUREFORM, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE, pMsg ); } if( m_pDisplayInfo->GetCreatureManager()->IsExistSummonedCreature(handle) ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN, pMsg ); } else CheckInterfaceManager(); pMsg->bUse = true; } break; case IMSG_MOUSEMOVE: { //채팅창 알파처리 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING, pMsg ); //퀵슬롯 단축키 처리 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT, pMsg ); //미니맵 확대맵 처리 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINMENU, pMsg ); // 길드 - 길드맴버탭 - 길드맴버팝업. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_GUILD_SUBMENU_RIGHTCLICK, pMsg ); // 길드 - 메모뷰어. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MEMOWND, pMsg ); // 장비창 우클릭메뉴. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_EQUIPMENT_POPUP, pMsg ); // 2010.08.24 - prodongi ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_EQUIPMENT, pMsg); /// 2010.11.02 - prodongi ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_WORLDMAP, pMsg); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, pMsg); //servantes 2011.01.25 //2011.07.05 servantes ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_MISSION_ENTERANCE_WND, pMsg); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_PARTY, pMsg); //servantes 2011.09.08 ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_QUEST_LIST, pMsg); /// 2011.09.09 - prodongi ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_DUNGEON_UNIT_MINI, pMsg); /// 2011.10.17 - marine ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_DUNGEON_UNIT_INVITATION, pMsg); /// 2011.10.20 - marine ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_GUILD_MEMBER_LIST, pMsg); /// 2011. 10. 26 - marine ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_RAID_SIEGE_STATUS, pMsg); /// 2012. 12. 12 - prodongi ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_TITLE_MAIN, pMsg); //2012. 4. 4 - marine } break; case IMSG_HOTKEY_EX: { pMsg->bUse = true; SIMSG_HOTKEY_EX* pHotKeyMsg = (SIMSG_HOTKEY_EX*)pMsg; //gmpbigsun(20131114): chat log // 한국이고 운영자이면 if( GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::KR && g_pCurrentGameSystem->GetLocalPlayerPermission() > 0 ) { if( ( LOWORD(pHotKeyMsg->wParam) == VK_HOME || LOWORD(pHotKeyMsg->wParam) == VK_END ) && GetAsyncKeyState(VK_CONTROL) ) { SUIChattingWnd* pChattingWnd = (SUIChattingWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING ); if( pChattingWnd ) { if( VK_HOME == LOWORD(pHotKeyMsg->wParam) ) pChattingWnd->SetChatLog( true ); else if( VK_END == LOWORD( pHotKeyMsg->wParam ) ) pChattingWnd->SetChatLog( false ); } } } bool b = GetGameKeymapping().IsSkipMode(); if(!b) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_ITEMCONTRIBUTION, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_MSGBOX, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg ); /// 2011.03.15 - prodongi ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_WORLDMAP, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORAGE, pMsg ); //servantes 2010.10.15 창고 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TRADE, pMsg ); // 거래 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_ITEMCOMBINE, pMsg ); // 조합 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_DECOMPOSITION, pMsg ); // 분해 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_UPGRADE, pMsg ); // 강화 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_REPAIR, pMsg ); // 수리 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_DESTRUCTION, pMsg ); //파괴창 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SOUL_CHARGE, pMsg ); // 영혼력충전창 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CASH_STORAGE, pMsg ); // 수령함 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_AUCTION, pMsg ); // 경매 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_JEWEL_EQUIP, pMsg ); // 소울스톤세공창 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOP, pMsg ); // 상점창 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOPKART, pMsg ); //상점 카트 창 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_HOST, pMsg ); // 노점 열고 팔 때 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_CLIENT, pMsg ); // 노점에서 살 때 /// 2012.07.23 - prodongi ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_GAME_CLASSIC, pMsg); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_GAME_SLAUGHTER, pMsg); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_GAME_BINGO, pMsg); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_GAME_SLAUGHTER_PRACTICE, pMsg); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_QUEST_LIST, pMsg); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_QUEST_INFO, pMsg); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_QUEST_REWARD, pMsg); } ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SYSTEM, pMsg ); /* ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, pMsg ); */ #ifdef _DEV if( g_bDebugMode && ( GetKeyState( VK_SCROLL ) & 0x01 ) ) { //캐릭터 머리위의 이름 //Key Down 만 처리 if( !pHotKeyMsg->bUp && pHotKeyMsg->bAlt && pHotKeyMsg->bCtrl && ( LOWORD(pHotKeyMsg->wParam ) == VK_NEXT ) ) ShowAllCharacterWindows( !m_bShowCharWindow ); } #endif /*if( LOWORD(pHotKeyMsg->wParam ) == VK_RETURN ) { SetShowProtectSolutionWnd(true); }*/ // #ifdef CLOUD_LUA if ( LOWORD(pHotKeyMsg->wParam) == VK_F3 ) g_bUseWorldTM = true; else if( LOWORD(pHotKeyMsg->wParam) == VK_F4 ) g_bUseWorldTM = false; else if( LOWORD(pHotKeyMsg->wParam) == VK_NUMPAD6 ) g_fTestZ = 0.0f; else if( LOWORD(pHotKeyMsg->wParam) == VK_NUMPAD7 ) g_fTestZ += g_fTestG; else if( LOWORD(pHotKeyMsg->wParam) == VK_NUMPAD8 ) g_fTestZ -= g_fTestG; else if( LOWORD(pHotKeyMsg->wParam) == VK_NUMPAD4 ) g_fTestY += g_fTestG; else if( LOWORD(pHotKeyMsg->wParam) == VK_NUMPAD5 ) g_fTestY -= g_fTestG; else if( LOWORD(pHotKeyMsg->wParam) == VK_NUMPAD1 ) g_fTestX += g_fTestG; else if( LOWORD(pHotKeyMsg->wParam) == VK_NUMPAD2 ) g_fTestX -= g_fTestG; else if( LOWORD(pHotKeyMsg->wParam) == 49 ) // 1 g_fRate = 1.0f; else if( LOWORD(pHotKeyMsg->wParam) == 50 ) // 2 g_fRate = 10.0f; else if( LOWORD(pHotKeyMsg->wParam) == 51 ) // 3 g_fRate = 100.0f; else if( LOWORD(pHotKeyMsg->wParam) == 52 ) // 4 g_fRate = 1000.0f; else if( LOWORD(pHotKeyMsg->wParam) == 53 ) // 5 g_fRateScale = 1.0f; // else if( LOWORD(pHotKeyMsg->wParam) == 54 ) // 6 // g_fRateScale = 0.1f; // else if( LOWORD(pHotKeyMsg->wParam) == 55 ) // 7 // g_fRateScale = 0.01f; // else if( LOWORD(pHotKeyMsg->wParam) == 56 ) // 8 // g_fRateScale = 0.001f; else if( LOWORD(pHotKeyMsg->wParam) == VK_F7 ) g_fTestG = 0.05f; else if( LOWORD(pHotKeyMsg->wParam) == VK_F8 ) g_fTestG = 0.5f; else if( LOWORD(pHotKeyMsg->wParam) == VK_F9 ) g_fTestG = 5.0f; else if( LOWORD(pHotKeyMsg->wParam) == VK_F10 ) g_fTestG = 53.0f; else if( LOWORD(pHotKeyMsg->wParam) == VK_F11 ) g_fTestG = 500.0f; else if( LOWORD(pHotKeyMsg->wParam) == 81 ) // q g_fRateG += 1.0f; else if( LOWORD(pHotKeyMsg->wParam) == 87 ) // w g_fRateG -= 1.0f; else if( LOWORD(pHotKeyMsg->wParam) == VK_F6 ) { SGameAvatarEx* localPlayer = g_pCurrentGameSystem->GetLocalPlayer(); K3DVector vPos = localPlayer->GetCurPos(); g_fTestX = vPos.x; g_fTestY = vPos.y; g_fTestZ = vPos.z; } else if( LOWORD(pHotKeyMsg->wParam) == VK_F5 ) { g_fTestX = 0.0f; g_fTestY = 0.0f; g_fTestZ = 0.0f; } else if( LOWORD(pHotKeyMsg->wParam) == 54) //90 ) // z { SGameWorld* pGameWorld = dynamicCast(g_pCurrentGameSystem->GetGame()); if( pGameWorld ) { pGameWorld->GetSky()->ChangeCloud(0); } // g_fX += g_fTestG; } else if( LOWORD(pHotKeyMsg->wParam) == 55) //88 ) // x { SGameWorld* pGameWorld = dynamicCast(g_pCurrentGameSystem->GetGame()); if( pGameWorld ) { pGameWorld->GetSky()->ChangeCloud(1); } // g_fX += g_fTestG; } else if( LOWORD(pHotKeyMsg->wParam) == 56)//67 ) // c { SGameWorld* pGameWorld = dynamicCast(g_pCurrentGameSystem->GetGame()); if( pGameWorld ) { pGameWorld->GetSky()->ChangeCloud(2); } // g_fX += g_fTestG; } else if( LOWORD(pHotKeyMsg->wParam) == 86 ) // v { SGameWorld* pGameWorld = dynamicCast(g_pCurrentGameSystem->GetGame()); if( pGameWorld ) { // pGameWorld->GetSky()->ChangeCloud(2); } // g_fX += g_fTestG; } else if( LOWORD(pHotKeyMsg->wParam) == 66 ) // b { SGameWorld* pGameWorld = dynamicCast(g_pCurrentGameSystem->GetGame()); if( pGameWorld ) { // pGameWorld->GetSky()->ChangeCloudColor(255, 128, 128); } // g_fX += g_fTestG; } // g_fZ += g_fTestG; else if( LOWORD(pHotKeyMsg->wParam) == 78 ) // n { SGameWorld* pGameWorld = dynamicCast(g_pCurrentGameSystem->GetGame()); if( pGameWorld ) { // pGameWorld->GetSky()->ChangeCloudColor(0, 255, 128); } // g_fX += g_fTestG; } // g_fZ -= g_fTestG; else if( LOWORD(pHotKeyMsg->wParam) == 65 ) // a { g_fX = g_fY = 0.0f; g_fZ = 15.0f; } #endif if( pHotKeyMsg->bUp && !pHotKeyMsg->bAlt && !pHotKeyMsg->bCtrl && !pHotKeyMsg->bShift && ( LOWORD(pHotKeyMsg->wParam ) == VK_RETURN ) ) { if( !IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_INPUTNUMBER ) && !IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_INPUTTEXT ) && !IsWebPageWndOpened() ) { // _oprint( "IMSG_HOTKEY_EX : VK_RETUR\Nn" ); SUIInputTextWnd* pInputTextWnd = (SUIInputTextWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTTEXT ); if( IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_INPUTTEXT ) && NULL != pInputTextWnd ) { if( pInputTextWnd->IsInputEditFocus() == true ) return; } SUIStoreHostWnd* pStoreHostWnd = (SUIStoreHostWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_HOST ); if( IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_STORE_HOST ) && NULL != pStoreHostWnd ) { if( pStoreHostWnd->IsBoothNameFocus() == true ) return; } // 2010.08.12 - prodongi SUIAuctionWnd* auctionWnd = (SUIAuctionWnd*)GetUIWindow(TOGGLE_WINDOW::UIWINDOW_AUCTION); if (IsUIWindowOpened(TOGGLE_WINDOW::UIWINDOW_AUCTION) && NULL != auctionWnd) { if (auctionWnd->isSearchEditFocus()) { ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_AUCTION, pMsg); return ; } } SUIChattingWnd* pChattingWnd = (SUIChattingWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING ); if( NULL != pChattingWnd ) { if( pChattingWnd->GetImeState() == false && !IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_SYSTEM )) //옵션창이 open시 채팅창 안먹게끔... sfreer.2009.03.17 { // _performance_print( "changeChattingWndFocus\n" ); changeChattingWndFocus( pChattingWnd ); } } } } if( !pHotKeyMsg->bUp && !pHotKeyMsg->bAlt && !pHotKeyMsg->bCtrl && !pHotKeyMsg->bShift && ( LOWORD(pHotKeyMsg->wParam ) == VK_ESCAPE ) ) { KUIWnd* pFocusWnd = m_pUIWndManager->GetMouseFocusWnd(); if( pFocusWnd ) { for( unsigned int i(0); m_EscHotKeyWinList.size()>i; i++ ) { SUIWnd* pWnd = m_EscHotKeyWinList[i]; if( stricmp( pWnd->GetID(), pFocusWnd->GetID() ) == 0 ) { if( stricmp( pWnd->GetID(), "window_popurl_bar" ) == 0) { m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_POPURL_TITLE, false) ); m_pGameManager->PostMsgAtDynamic( new SMSG_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_POPURL_TITLE, "close_popurl_web" ) ); } else { m_pUIWndManager->RemoveWnd( pWnd ); pWnd->SetShow( false ); pWnd->OnNotifyUIWindowOpen( pWnd->IsShow() ); m_pUIWndManager->FocusWindowOff(); return; } } } } } } break; case MSG_SC_RANKING_TOP_RECORD: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_RANKING, pMsg ); } break; case IMSG_UI_NAME_TEXT : { SIMSG_UI_NAME_TEXT* pNameTextMsg = (SIMSG_UI_NAME_TEXT*)pMsg; ShowAllCharacterWindows( pNameTextMsg->bShow, true ); pMsg->bUse = true; } break; case IMSG_UI_WARP_COMPLETE : { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY_STATE, pMsg ); pMsg->bUse = true; } break; case MSG_PROPERTY: { SMSG_PROPERTY* pPropertyMsg = (SMSG_PROPERTY*)pMsg; if( m_pDisplayInfo->GetPlayerInfoManager() ) { if( m_pDisplayInfo->GetPlayerInfoManager()->IsLocalPlayer(pPropertyMsg->handle) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINFRAME, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILL, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOPKART, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHARINFO, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORAGE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP , pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING , pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILLFUND, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INSTANCE_ENTRANCE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INSTANCE_TASKBAR_ENTRANCE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_REPAIR, pMsg ); // 아이템수리 윈도우. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_EQUIPMENT, pMsg ); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_MENU, pMsg); } if( m_pDisplayInfo->GetPlayerInfoManager()->IsTargetPlayer(pPropertyMsg->handle) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_PLAYER, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_CREATURE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_NPC, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_PROP, pMsg ); } if( m_pDisplayInfo->GetCreatureManager()->IsEquipedCreature( pPropertyMsg->handle ) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILLFUND, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN, pMsg ); } if( m_pDisplayInfo->GetCreatureManager()->IsExistSummonedCreature(pPropertyMsg->handle) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN, pMsg ); } } else CheckInterfaceManager(); pMsg->bUse = true; } break; case MSG_EXP_UPDATE: { //TODO : 무조건 수정!!! While 과 For While 로 검색이 이뤄지고 있음. if( m_pDisplayInfo->GetPlayerInfoManager() ) { if( ((SMSG_EXP_UPDATE*)pMsg)->handle == m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerHandle() ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINFRAME, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILL, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY, pMsg ); if( m_pGameManager->IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_SKILLFUND ) ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILLFUND, pMsg ); //겁나 느리다. } if( m_pDisplayInfo->GetCreatureManager()->IsEquipedCreature( ((SMSG_EXP_UPDATE*)pMsg)->handle ) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, pMsg ); if( m_pGameManager->IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILLFUND ) ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILLFUND, pMsg ); } if( m_pDisplayInfo->GetCreatureManager()->IsExistSummonedCreature(((SMSG_EXP_UPDATE*)pMsg)->handle) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN, pMsg ); } } else { CheckInterfaceManager(); } pMsg->bUse = true; } break; case MSG_STATUS_CHANGE : { SMSG_STATUS_CHANGE * pStatus = (SMSG_STATUS_CHANGE*)pMsg; if( (pStatus->status & TS_ENTER::CreatureInfo::FLAG_INVISIBLE) ) SetForceShowCharacterWindow( pStatus->handle, false ); else SetForceShowCharacterWindow( pStatus->handle, true ); //TODO:문제 있음, 컬링 되었던 것이 나올 수 있음. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHARINFO, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP, pMsg ); CHARWINDOW *pCWnd = getCharacterWnd( pStatus->handle ); if( pCWnd && pCWnd->pWnd ) { if( pCWnd->pWnd->GetObjType() == TS_ENTER::GAME_PLAYER ) { pCWnd->pWnd->SetPKNameColor( pStatus->status ); SetCreatureNamePanel( pStatus->handle, pStatus->status); } } ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_CREATURE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_PLAYER, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_NPC, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_PROP, pMsg ); pMsg->bUse = true; } break; case MSG_STAT_INFO: { SMSG_STAT_INFO* pStatInfoMsg = (SMSG_STAT_INFO*)pMsg; // 캐릭터 정보를 설정 if( m_pDisplayInfo->GetPlayerInfoManager() ) { if( m_pDisplayInfo->GetPlayerInfoManager()->IsLocalPlayer(pStatInfoMsg->handle) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHARINFO, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING, pMsg ); } // 크리쳐 정보를 설정 if( m_pDisplayInfo->GetCreatureManager()->IsEquipedCreature( pStatInfoMsg->handle ) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_DETAIL, pMsg ); } } else { CheckInterfaceManager(); } pMsg->bUse = true; } break; case IMSG_UI_TARGET_PORTRAIT_REFRESH: { ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_TARGETPORTRAIT, pMsg); } break; case IMSG_UI_TARGET_INFO: { /// 여기에 새로 추가되는 타켓 창 종류별로 만들면 되것네 SIMSG_UI_TARGET_INFO* pTargetMsg( static_cast( pMsg ) ); if( NULL == pTargetMsg || NULL == pTargetMsg->handle ) break; switch( pTargetMsg->nObjType ) { case TS_ENTER::GAME_PLAYER: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_PLAYER, pMsg ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_PLAYER, true ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_CREATURE, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_NPC, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_PROP, false ) ); } break; case TS_ENTER::GAME_NPC: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_NPC, pMsg ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_PLAYER, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_CREATURE, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_NPC, true ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_PROP, false ) ); } break; case TS_ENTER::GAME_MOB: case TS_ENTER::GAME_SUMMON: case TS_ENTER::GAME_PET: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_CREATURE, pMsg ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_PLAYER, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_CREATURE, true ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_NPC, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_PROP, false ) ); } break; case TS_ENTER::GAME_FIELD_PROP: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_PROP, pMsg ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_PLAYER, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_CREATURE, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_NPC, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_PROP, true ) ); } break; default: { SLOG( "[GameInterface] 알수없는 타겟 타입." ); assert( NULL ); } break; } ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_STATE, pMsg ); if( m_hOldTarget != pTargetMsg->handle ) { if( NULL != m_hOldTarget ) SetTargetToCharacterWindow( m_hOldTarget, false ); if( NULL != pTargetMsg->handle ) SetTargetToCharacterWindow( pTargetMsg->handle, true ); m_hOldTarget = pTargetMsg->handle; } } break; case IMSG_UI_ACT_FAR_PARTY_TARGET: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY, pMsg ); pMsg->bUse = false; } break; case IMSG_UI_TARGET_CAM_POS: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGETPORTRAIT, pMsg ); pMsg->bUse = false; } break; case IMSG_UI_TARGET_ACTIVE_INFO: { SIMSG_UI_TARGET_ACTIVE_INFO* pTargetActiveMsg = (SIMSG_UI_TARGET_ACTIVE_INFO*)pMsg; SetActiveCharacterWindow( pTargetActiveMsg->handle, pTargetActiveMsg->nActiveInfo ); pMsg->bUse = true; } break; case IMSG_UI_NAME_FORCE_SET : { SIMSG_UI_NAME_FORCE_SET* pForceShowMsg = (SIMSG_UI_NAME_FORCE_SET*)pMsg; SetForceShowCharacterWindow( pForceShowMsg->handle, pForceShowMsg->bForceShow ); pMsg->bUse = true; } break; case IMSG_UI_QUICKSLOT_INFO: { // 아직 메시지 정의 제대로 되지 않았음. pMsg->bUse = true; } break; case IMSG_UI_CUSTOM: { SIMSG_UI_CUSTOM* pCustomMsg = (SIMSG_UI_CUSTOM*)pMsg; ProcMsgToUIWindow( pCustomMsg->m_nWinID, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_MAINPLAYER_INFO: { //ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg ); 제거. bintitle, 2010.09.06. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_EQUIPMENT, pMsg ); // 인벤과 장비창 분리. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, pMsg ); // 인벤과 장비창 분리. //servantes 2011.01.24 pMsg->bUse = true; } break; case IMSG_UI_MAINPLAYER_CAM_POS : { //ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg ); 제거. bintitle, 2010.09.06. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_EQUIPMENT, pMsg ); // 인벤과 장비창 분리. pMsg->bUse = true; } break; case IMSG_UI_MAINPLAYER_CAM_TARGET_POS : { //ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg ); 제거. bintitle, 2010.09.06. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_EQUIPMENT, pMsg ); // 인벤과 장비창 분리. pMsg->bUse = true; } break; case IMSG_UI_MAINPLAYER_LIGHT_DIR : { //ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg ); 제거. bintitle, 2010.09.06. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_EQUIPMENT, pMsg ); // 인벤과 장비창 분리. pMsg->bUse = true; } break; case IMSG_UI_MAINPLAYER_LIGHT : { //ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg ); 제거. bintitle, 2010.09.06. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_EQUIPMENT, pMsg ); // 인벤과 장비창 분리. pMsg->bUse = true; } break; case MSG_GOLD_UPDATE: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg ); ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_AUCTION, pMsg ); // { [sonador][3.1.2]경매장 구현 pMsg->bUse = true; } break; case MSG_ITEM_WEAR: { SMSG_ITEM_WEAR* pWear = (SMSG_ITEM_WEAR*)pMsg; CHARWINDOW* pCWnd = getCharacterWnd(pWear->handle); if (pCWnd && pCWnd->pWnd) { pCWnd->pWnd->SetEmblem( pWear->nItemCode[ ItemBase::WEAR_BACKBOARD ] ); } } break; case MSG_UPDATE_ITEM_COUNT: case MSG_ITEM_ERASE: case MSG_ITEM_DESTROY: case MSG_ITEM_INVEN: case MSG_ITEM_WEAR_INFO: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_ITEMCOMBINE, pMsg ); //조합 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOP, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOPKART, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_HOST, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATUREFORM, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORAGE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_DURABILITY, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_EQUIPMENT, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_UPGRADE, pMsg ); pMsg->bUse = true; } break; case MSG_ITEM_COOL_TIME: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg ); } break; case MSG_DAMAGE: { SMSG_DAMAGE* pDamageMsg = (SMSG_DAMAGE*)pMsg; bool bIsPartyMember = false; AR_HANDLE target = NULL; if( pDamageMsg->skillresult.damage.type != SkillResult::NOT_USE ) { target = pDamageMsg->skillresult.GetTargetHandle(); if( target != pDamageMsg->target_handle ) // sonador 7.0.29 전투 관련 메시지 대상 이름 오류 수정 { pDamageMsg->target_handle = target; if( pDamageMsg->target_handle != 0 && m_pGameManager->GetActiveGame() != 0 ) { SGameAvatarEx* Avatar = (SGameAvatarEx*)m_pGameManager->GetActiveGame()->GetGameObject( pDamageMsg->target_handle ); if( Avatar ) pDamageMsg->strTargetName = Avatar->GetName(); } } } else { //일반 공격 target = pDamageMsg->target_handle; } if (target == NULL) { SDEBUGLOG( "[Function = %s]", __FUNCTION__); SDEBUGLOG( "Target handle missed, cannot draw damage : caster : %s, target : %s", pDamageMsg->strCasterName.c_str(), pDamageMsg->strTargetName.c_str()); // assert( target && "타겟 핸들 없음, 데미지 표시 못 함." ); } // MJ 2004/11/12 SPlayerInfoMgr* pPlayerInfoMgr = m_pDisplayInfo->GetPlayerInfoManager(); if( pPlayerInfoMgr && target ) { AR_HANDLE hPlayer = pPlayerInfoMgr->GetPlayerHandle(); AR_HANDLE hTarget = pDamageMsg->target_handle; //공격자가 플레이어인가 //타겟이 플레이어인가 //공격자가 내 크리처 인가 //타겟이 내 크리처 인가 //전부 아니라면 리턴 /// 2011.03.25 - prodongi if( pDamageMsg->attacker_handle != hPlayer && target != hPlayer && pDamageMsg->chainCaster != hPlayer && !m_pDisplayInfo->GetCreatureManager()->IsExistSummonedCreature(pDamageMsg->attacker_handle ) && !m_pDisplayInfo->GetCreatureManager()->IsExistSummonedCreature(target) ) { // Fraun performance tweak int nSkippTypeResult = pDamageMsg->skillresult.GetType(); if( nSkippTypeResult == SkillResult::ADD_HP || nSkippTypeResult == SkillResult::ADD_MP || nSkippTypeResult == SkillResult::ADD_HP_MP_SP || nSkippTypeResult == SkillResult::CHAIN_HEAL ) { if( m_pDisplayInfo->IsPartyMember( hPlayer ) || m_pDisplayInfo->IsPartyMember( hTarget ) ) { bIsPartyMember = true; } /// 2011.03.24 - prodongi else if (pDamageMsg->chainCaster && m_pDisplayInfo->IsPartyMember(pDamageMsg->chainCaster)) { bIsPartyMember = true; } else { return; } } else { return; } } // Fraun performance tweak bool bDamageRender = GetGameOption().IsDemageRender(); if (bDamageRender) { if (pDamageMsg->attacker_handle == hPlayer && !GetGameOption().IsPlayerDmgRend()) bDamageRender = false; if (m_pDisplayInfo->GetCreatureManager()->IsExistSummonedCreature(pDamageMsg->attacker_handle) && !GetGameOption().IsCratureDmgRend()) bDamageRender = false; } //if( !GetGameOption().IsDemageRender() ) bDemageRender = false; //else //{ // if( pDamageMsg->attacker_handle == hPlayer && !GetGameOption().IsPlayerDmgRend() ) // bDemageRender = false; // if( m_pDisplayInfo->GetCreatureManager()->IsExistSummonedCreature(pDamageMsg->attacker_handle) && // !GetGameOption().IsCratureDmgRend() ) // bDemageRender = false; // // if( bIsPartyMember && !GetGameOption().IsPartyDmgRend() ) // // bDemageRender = false; //지금은 파티원은 데미지 메세지기 오지 않는다. //} bool bSendMsg = false; // 범위 데미지인 경우 공격자가 나인 경우만 처리 if( pDamageMsg->bSphereDamage && pDamageMsg->attacker_handle == hPlayer ) { bSendMsg = true; if(bDamageRender) SetDamageToCharacterWindow( pDamageMsg ); } // 범위 데미지가 아니고 내가 타겟이거나 내가 선택한 타겟과 데미지로 들어온 타겟이 같다면 else if( hPlayer == target || hTarget == target ) { bSendMsg = true; if(bDamageRender) SetDamageToCharacterWindow( pDamageMsg ); } //몹이 크리쳐에 뎀쥐를 줬을때 else if( m_pDisplayInfo->GetCreatureManager()->IsExistSummonedCreature(target) ) { bSendMsg = true; if(bDamageRender) SetDamageToCharacterWindow( pDamageMsg ); } else if( bIsPartyMember ) { bSendMsg = true; if(bDamageRender) SetDamageToCharacterWindow( pDamageMsg ); } // System message if( bSendMsg ) m_pDisplayInfo->DamageSysMsg( pDamageMsg ); } //else // CheckInterfaceManager(); pMsg->bUse = true; } break; case IMSG_UI_2DPOS_INFO: { SIMSG_UI_2DPOS_INFO* p2DPosMsg = (SIMSG_UI_2DPOS_INFO*)pMsg; if( p2DPosMsg->nObjType != SIMSG_UI_2DPOS_INFO::TY_ITEM ) { MoveCharacterWindow( p2DPosMsg->handle, p2DPosMsg->nX-90, p2DPosMsg->nY-( 75 + c_nCharWindowPos ), p2DPosMsg->nX-90, p2DPosMsg->nY- ( 130 ), p2DPosMsg->fCamDistance, p2DPosMsg->bVisible, p2DPosMsg->fAlpha ); MoveGaugeWindow( p2DPosMsg->handle, p2DPosMsg->nX_bottom-120, p2DPosMsg->nY_bottom, p2DPosMsg->fCamDistance, p2DPosMsg->bVisible, p2DPosMsg->fAlpha ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_WORLDMAP, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_CLIENT, pMsg ); pMsg->bUse = true; } else { // Display item tip MoveDropItemWindow( p2DPosMsg->handle, p2DPosMsg->nX-90, p2DPosMsg->nY-10, p2DPosMsg->fCamDistance, p2DPosMsg->bVisible, p2DPosMsg->fAlpha ); } pMsg->bUse = true; } break; case IMSG_UI_MY_DEGREE: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_WORLDMAP, pMsg ); pMsg->bUse = true; } break; //case MSG_SKILL_CASTING_TIME://메세지 폐기됨 // { // SMSG_SKILL_CASTING_TIME* pCastTimeMsg = ( SMSG_SKILL_CASTING_TIME* )pMsg; // if( pCastTimeMsg->tm > 0 ) // { // if( m_pDisplayInfo->GetPlayerInfoManager() ) // { // SUIGaugeWnd * pWnd = getGaugeWnd( m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerHandle() ); // if( pWnd ) // pWnd->ChangeMaxGauge( pCastTimeMsg->tm ); // } // } // pMsg->bUse = true; // } // break; case IMSG_UI_GAUGE_TIME_INFO: { SIMSG_UI_GAUGE_TIME_INFO* pGaugeTimeMsg = (SIMSG_UI_GAUGE_TIME_INFO*)pMsg; if( pGaugeTimeMsg->time > 0 ) { SUIGaugeWnd * pGaugeWnd = getGaugeWnd( ((SIMSG_UI_GAUGE_TIME_INFO*)pMsg)->caster ); if( pGaugeWnd ) { //플레이어의 크리처인지 확인하는 부분 -N4- bool bLocalCraeture(false); SGame* pGame(NULL); pGame = m_pGameManager->GetActiveGame(); if( pGame ) { if( pGame->IsLocalCreature( ((SIMSG_UI_GAUGE_TIME_INFO*)pMsg)->caster ) != NULL ) bLocalCraeture = true; } //'Lv'을 String DB 9501로 참조하도록 한다 2009.09.25. sfreer if( bLocalCraeture ) pGaugeWnd->ActivateGauge( pGaugeTimeMsg->time,CStringUtil::StringFormat( "<#aaff00>%s %s%d", GetStringDB().GetString( GetSkillDB().GetStringID(((SIMSG_UI_GAUGE_TIME_INFO*)pMsg)->nSkillID) ), GetStringDB().GetString(9501), ((SIMSG_UI_GAUGE_TIME_INFO*)pMsg)->nSkillLv ).c_str() ); else pGaugeWnd->ActivateGauge( pGaugeTimeMsg->time,CStringUtil::StringFormat( "<#00F6FFFF>%s %s%d", GetStringDB().GetString( GetSkillDB().GetStringID(((SIMSG_UI_GAUGE_TIME_INFO*)pMsg)->nSkillID) ), GetStringDB().GetString(9501), ((SIMSG_UI_GAUGE_TIME_INFO*)pMsg)->nSkillLv ).c_str() ); } } pMsg->bUse = true; } break; case IMSG_UI_DROP_ITEM_NAME : { if( GetKeyState(VK_MENU) < 0 ) break; // 알트입력되어있으면 break; SIMSG_UI_DROP_ITEM_NAME * pDropItemName = (SIMSG_UI_DROP_ITEM_NAME*)pMsg; SUIDropItemWnd* pDropItemWnd = getDropItemWnd( pDropItemName->hItem ); if( pDropItemWnd ) { pDropItemWnd->SetShow( pDropItemName->bShow ); } pMsg->bUse = true; } break; case IMSG_UI_DROP_ALL_ITEM_NAME : { SIMSG_UI_DROP_ALL_ITEM_NAME * pDropItemName = (SIMSG_UI_DROP_ALL_ITEM_NAME*)pMsg; ShowDropItemWnd(pDropItemName->bShow); pMsg->bUse = true; } break; case IMSG_SHOW_GUAGE: { SIMSG_SHOW_GUAGE* pLoginMsg = (SIMSG_SHOW_GUAGE*)pMsg; SetShowGuage(pLoginMsg->handle, pLoginMsg->bEnter); } break; case MSG_CHATTING: { SMSG_CHATTING* pChatMsg = (SMSG_CHATTING*)pMsg; if( pChatMsg->nChatType < CHAT_NOTICE && pChatMsg->nChatType != CHAT_FRIEND ) { ////////////////////////////////////////////////////////////////////////// //욕 필터 std::wstring wstrText = nsl::uni::conv( pChatMsg->strText ); wchar_t szTemp[1024]={0,}; //AbuseFilter::Filter에 들어갈 마지막 인자의 size는 실질적인 버퍼상의 싸이즈이다. 따라서 wstr이지만 그냥 sizeof를 한다. AbuseFilter::Filter( wstrText.c_str(), szTemp, sizeof(szTemp) ); pChatMsg->strText = nsl::uni::conv( szTemp ); ////////////////////////////////////////////////////////////////////////// } if( pChatMsg->nNoticeOnly != 1 ) // 일단 채팅, kappamind. { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING, pMsg ); } ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHARINFO, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_WORLDMAP, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY, pMsg ); if( pChatMsg->nChatType == CHAT_PARTY_SYSTEM ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY_MENU, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY_STATE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_INSTANCE, pMsg ); } /// 2011.11.30 - prodongi if (pChatMsg->nChatType == CHAT_DUNGEON_SYSTEM) { ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_MISSION, pMsg); } /// 2012.06.26 - prodongi else if (CHAT_CENTER_NOTICE == pChatMsg->nChatType) { sArenaJoinSituationCondition situationCondition; situationCondition.m_notificationWays = cArenaJoinSituationChecker::WAY_CENTER_NOTICE; situationCondition.addNone(pChatMsg->strText.c_str(), false); g_pCurrentGameSystem->isValidArenaJoinSituation(situationCondition); } else if( 0 == ::_stricmp( pChatMsg->szSender.c_str(), "@NOTICE" ) ) // if( m_pDisplayInfo->GetPlayerInfoManager()->IsLocalPlayer(pChatMsg->handle) ) //테스트 코드 { OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_NOTICE, true, false ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_NOTICE, pMsg ); } if( 0 == ::_stricmp( pChatMsg->szSender.c_str(), "@ANNOUNCE" ) ) { OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_NOTICE, true, false ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_NOTICE, pMsg ); } bool bCutuser=false; SCutMgr *CutMgr = ( (SCutMgr*)(GameUIMgrInstance.GetUIMgr( SGameUIInstance::CUT_MGR )) ); std::vector& MemberList = CutMgr->GetMemberList(); for( int i(0); iGetName(), pChatMsg->szSender.c_str() ) == 0) { bCutuser = true; } } if(!bCutuser) SetChatMsgToCharacterWindow( pChatMsg->handle, pChatMsg->strText.c_str() ); pMsg->bUse = true; } break; case IMSG_UI_WHISPER: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING, pMsg ); } break; case IMSG_CHARLIST_SELECTEDINFO: { SIMSG_CHARLIST_SELECTEDINFO* pCharListSelectedInfo = (SIMSG_CHARLIST_SELECTEDINFO*)pMsg; SUICharNameListWnd* pCharNameListWnd = (SUICharNameListWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CHARNAMELIST ); if( NULL != pCharNameListWnd ) pCharNameListWnd->SetSelectedCharInfo ( pCharListSelectedInfo->m_nIndex , pCharListSelectedInfo->m_nLevel , pCharListSelectedInfo->m_nJobLevel , pCharListSelectedInfo->m_nJobID , pCharListSelectedInfo->m_strName.c_str() , pCharListSelectedInfo->m_bSelected ); if( pCharListSelectedInfo->m_bSelected ) { SUISelectCharInfoWnd* pSelectInfoWnd = (SUISelectCharInfoWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_SELECTCHAR_INFO ); pSelectInfoWnd->SetAvatarData( pCharListSelectedInfo->m_nLevel, pCharListSelectedInfo->m_nJobLevel, pCharListSelectedInfo->m_nJobID, pCharListSelectedInfo->m_strName.c_str() ); } pMsg->bUse = true; } break; case IMSG_SET_NOTICEWND: { SIMSG_SET_NOTICEWND* pSetNoticeMsg = (SIMSG_SET_NOTICEWND*)pMsg; SUIServerNoticeWnd* pWndServerNotice = (SUIServerNoticeWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_SERVERNOTICE ); if( NULL != pWndServerNotice ) pWndServerNotice->SetNotice( pSetNoticeMsg->m_strNotice.c_str(), pSetNoticeMsg->m_nUseType ); pMsg->bUse = true; } break; case IMSG_UI_ETC_INFO: { SIMSG_UI_ETC_INFO* pETCInfoMsg = (SIMSG_UI_ETC_INFO*)pMsg; SUIDevOutputWnd* pDevOutputWnd = (SUIDevOutputWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_DEVOUTPUT ); if( NULL != pDevOutputWnd ) { pDevOutputWnd->SetPosition( pETCInfoMsg->x, pETCInfoMsg->y, pETCInfoMsg->z, pETCInfoMsg->cx, pETCInfoMsg->cy, pETCInfoMsg->cz ); pDevOutputWnd->SetFPS( pETCInfoMsg->fps, pETCInfoMsg->dwFree, pETCInfoMsg->dwTotal ); } pMsg->bUse = true; } break; case IMSG_UI_SEND_DATA: { SIMSG_UI_SEND_DATA* pUIMove = (SIMSG_UI_SEND_DATA*)pMsg; // 제거, 웹페이지는 더이상 사용하지않음. bintitle. 2010.08.24. //if( pUIMove->m_nTarget == TOGGLE_WINDOW::UIWINDOW_COMMUNITY && pUIMove->m_strString == "guild_update" ) //{ //웹페이지 갱신 // if( m_pGameManager->IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_GUILD_TITLE ) ) // CurOtherURLRefresh( TOGGLE_WINDOW::UIWINDOW_GUILD_TITLE ); //} ProcMsgToUIWindow( ((SIMSG_UI_SEND_DATA*)pMsg)->m_nTarget, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_MOVE: { ProcMsgToUIWindow( ((SIMSG_UI_MOVE*)pMsg)->m_nType, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_MOVE_EX: { ProcMsgToUIWindow( ((SIMSG_UI_MOVE_EX*)pMsg)->m_nType, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_FOCUS: { ProcMsgToUIWindow( ((SIMSG_UI_FOCUS*)pMsg)->m_nType, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_SYSMENU: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SYSMENU, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_MINIMAP_INFO: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_WORLDMAP, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_SYSMENU_HOTKEY: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINMENU, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SYSMENU, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_STATE_UPDATE: { SIMSG_UI_STATE_UPDATE* pGameMsg = (SIMSG_UI_STATE_UPDATE*)pMsg; if( pGameMsg->m_hPlayer == 0 ) if( pGameMsg->m_nType == TOGGLE_WINDOW::UIWINDOW_INVENTORY ) ProcMsgToUIWindow( pGameMsg->m_nType, pMsg ); if( pGameMsg->m_hPlayer == 0 ) if( pGameMsg->m_nType == TOGGLE_WINDOW::UIWINDOW_STORAGE ) ProcMsgToUIWindow( pGameMsg->m_nType, pMsg ); SPlayerInfoMgr* pPlayerMgr = m_pDisplayInfo->GetPlayerInfoManager(); if( pPlayerMgr && pPlayerMgr->IsLocalPlayer( pGameMsg->m_hPlayer ) ) if( pGameMsg->m_nType == TOGGLE_WINDOW::UIWINDOW_STATE_H_EFFECT ) ProcMsgToUIWindow( pGameMsg->m_nType, pMsg ); if( pPlayerMgr && pPlayerMgr->IsTargetPlayer(pGameMsg->m_hPlayer) ) if( pGameMsg->m_nType == TOGGLE_WINDOW::UIWINDOW_TARGET_STATE ) ProcMsgToUIWindow( pGameMsg->m_nType, pMsg ); if( m_pDisplayInfo && m_pDisplayInfo->IsPartyMember( pGameMsg->m_hPlayer) ) if( pGameMsg->m_nType == TOGGLE_WINDOW::UIWINDOW_PARTY_STATE ) ProcMsgToUIWindow( pGameMsg->m_nType, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_STATE_LIST_UPDATE: { SIMSG_UI_STATE_LIST_UPDATE* pGameMsg = (SIMSG_UI_STATE_LIST_UPDATE*)pMsg; SPlayerInfoMgr* pPlayerMgr = m_pDisplayInfo->GetPlayerInfoManager(); if( pPlayerMgr && pPlayerMgr->IsLocalPlayer( pGameMsg->hPlayer ) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STATE_H_EFFECT, pMsg ); /// 2011.01.14 - prodongi ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_MAINFRAME, pMsg); } if( pPlayerMgr && pPlayerMgr->IsTargetPlayer(pGameMsg->hPlayer) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_STATE, pMsg ); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_TARGET_PLAYER, pMsg); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_TARGET_CREATURE, pMsg); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_TARGET_NPC, pMsg); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_TARGET_PROP, pMsg); } /// 2011.12.22 크리처일 경우에는 파티 멤버에서 검색이 안되서 갱신이 되지 않는다, SUIPartyStateWndMgr에서 검색하도록 하고 여기서는 체크하지 않는다 - prodongi //if( m_pDisplayInfo && m_pDisplayInfo->IsPartyMember( pGameMsg->hPlayer) ) // ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY_STATE, pMsg ); if(m_pDisplayInfo) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY_STATE, pMsg ); } break; case IMSG_UI_FRIEND_UPDATE: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_COMMUNITY, pMsg ); } break; case IMSG_UI_GUILDICON: // 길드아이콘 등록,변경 시에 넘어온다. { pMsg->bUse = true; SIMSG_UI_GUILDICON* pGameMsg = (SIMSG_UI_GUILDICON*)pMsg; CHARWINDOW* pCWnd = NULL; KSortVector< struct CHARWINDOW* >::iterator it; for ( it = m_sortCharacterWindow.begin(); it != m_sortCharacterWindow.end(); ++it ) { pCWnd = (*it); if( pCWnd && pCWnd->pWnd ) { if( pCWnd->pWnd->GetGuildID() == pGameMsg->nGuild_id ) { pCWnd->pWnd->SetGuildInfo( pGameMsg->strGuildName.c_str(), pGameMsg->strIconAniName.c_str() ); // 위의 SIMSG_UI_GUILD_WNDMSG 가 UIWINDOW_GUILD_MAINWND 에 전달이 안되는 기이한 현상으로 인해 // GUILD UI 에 아이콘 AniName 전송. bintitle. 2010.07.12. /// 2011.02.11 왜 loop만큼 guild window가 갱신되어야 하는가??? - prodongi m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_MAINWND, pGameMsg->strGuildName.c_str(), pGameMsg->strIconAniName.c_str(), IMSG_GUILD_ICON, number_t( pGameMsg->nGuild_id ), number_t(0) ) ); } } } /// 2011.02.11 - prodongi if (g_pCurrentGameSystem->isMyGuild(pGameMsg->nGuild_id)) { m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARINFO, pGameMsg->strGuildName.c_str(), pGameMsg->strIconAniName.c_str(), IMSG_GUILD_ICON, number_t( pGameMsg->nGuild_id ), number_t(0) ) ); } } break; case IMSG_UI_GUILDICON_LEAVE: { //GetLog().Log( "\n&&&&&& IMSG_UI_GUILDICON_LEAVE &&&&&&\n " ); SIMSG_UI_GUILDICON_LEAVE* pGameMsg = (SIMSG_UI_GUILDICON_LEAVE*)pMsg; CHARWINDOW* pCWnd = getCharacterWnd( pGameMsg->handle ); if( pCWnd && pCWnd->pWnd ) { pCWnd->pWnd->SetGuildID( 0 ); pCWnd->pWnd->SetGuildInfo( "#@DELETEGUILD@#", "#@DELETEGUILD@#" ); // GUILD UI 에 아이콘 AniName 전송. bintitle. 2010.06.22. m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_GUILD_WNDMSG( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_MAINWND, SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_MAINWND, IMSG_GUILD_ICON_LEAVE, "" ) ); /// 2011.02.11 - prodongi m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_GUILD_WNDMSG( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARINFO, IMSG_GUILD_ICON_LEAVE)); } pGameMsg->bUse = true; } break; case IMSG_UI_GUILDICON_REFRESH : // 길드생성 시에 넘어온다. { pMsg->bUse = true; SIMSG_UI_GUILDICON_REFRESH* pGameMsg = (SIMSG_UI_GUILDICON_REFRESH*)pMsg; for( unsigned int i(0); pGameMsg->vHandleList.size()>i; i++ ) { int nSize = pGameMsg->vHandleList.size(); if( i < nSize && nSize >= 0 ) { CHARWINDOW* pCWnd = getCharacterWnd( pGameMsg->vHandleList[i] ); if( pCWnd && pCWnd->pWnd ) { pMsg->bUse = true; pCWnd->pWnd->SetGuildID( pGameMsg->nGuild_id ); pCWnd->pWnd->SetGuildInfo( pGameMsg->strGuildName.c_str(), pGameMsg->strIconAniName.c_str() ); } } } } break; case IMSG_UI_GUILDICON_DESTROY: // 길드해체 { SIMSG_UI_GUILDICON_DESTROY* pGameMsg = (SIMSG_UI_GUILDICON_DESTROY*)pMsg; CHARWINDOW* pCWnd = NULL; KSortVector< struct CHARWINDOW* >::iterator it; for ( it = m_sortCharacterWindow.begin(); it != m_sortCharacterWindow.end(); ++it ) { pCWnd = (*it); if( pCWnd && pCWnd->pWnd ) { if( pCWnd->pWnd->GetGuildID() == pGameMsg->nGuild_id ) { pCWnd->pWnd->SetGuildID( 0 ); pCWnd->pWnd->SetGuildInfo( "#@DELETEGUILD@#", "#@DELETEGUILD@#" ); // GUILD UI 에 아이콘 AniName 전송. bintitle. 2010.06.22. m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_GUILD_WNDMSG( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_MAINWND, SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_MAINWND, IMSG_GUILD_ICON_DESTROY, std::string(""), pGameMsg->nGuild_id ) ); } } } /// 2011.02.11 - prodongi if (g_pCurrentGameSystem->isMyGuild(pGameMsg->nGuild_id)) { m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_GUILD_WNDMSG( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARINFO, IMSG_GUILD_ICON_DESTROY)); } pGameMsg->bUse = true; } break; case IMSG_UI_CHANGE_GUILD_NAME : { SIMSG_UI_CHANGE_GUILD_NAME* pGameMsg = (SIMSG_UI_CHANGE_GUILD_NAME*)pMsg; CHARWINDOW* pCWnd = NULL; KSortVector< struct CHARWINDOW* >::iterator it; for ( it = m_sortCharacterWindow.begin(); it != m_sortCharacterWindow.end(); ++it ) { pCWnd = (*it); if( pCWnd && pCWnd->pWnd ) { if( pCWnd->pWnd->GetGuildID() == pGameMsg->m_nGuildID ) { pCWnd->pWnd->ChangeGuildName( pGameMsg->m_strNewGuildName.c_str() ); } } } pGameMsg->bUse = true; } break; case MSG_ADDED_SKILL_LIST: { if( m_pDisplayInfo->GetPlayerInfoManager() ) { SPlayerInfoMgr* pPlayerMgr = m_pDisplayInfo->GetPlayerInfoManager(); if( pPlayerMgr && pPlayerMgr->IsLocalPlayer(((SMSG_ADDED_SKILL_LIST*)pMsg)->target) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILL, pMsg ); } SCreatureSlotMgr* pCreatureMgr = m_pDisplayInfo->GetCreatureManager(); if( pCreatureMgr && pCreatureMgr->IsEquipedCreature( ((SMSG_ADDED_SKILL_LIST*)pMsg)->target ) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, pMsg ); } // sonador #2.1.2.4.3 팻 조작 UI 연동 SGame* pGame = m_pGameManager->GetActiveGame(); if( pGame && pGame->IsLocalPet( ((SMSG_ADDED_SKILL_LIST*)pMsg)->target ) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILL, pMsg ); } } pMsg->bUse = true; } break; case MSG_SKILL_LIST: { if( m_pDisplayInfo->GetPlayerInfoManager() ) { SPlayerInfoMgr* pPlayerMgr = m_pDisplayInfo->GetPlayerInfoManager(); if( pPlayerMgr && pPlayerMgr->IsLocalPlayer(((SMSG_SKILL_LIST*)pMsg)->target) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILL, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILLFUND, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT, pMsg ); } SCreatureSlotMgr* pCreatureMgr = m_pDisplayInfo->GetCreatureManager(); if( pCreatureMgr && pCreatureMgr->IsEquipedCreature( ((SMSG_SKILL_LIST*)pMsg)->target ) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILLFUND, pMsg ); // 2010.08.04 - prodongi ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT, pMsg ); //ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_HQUICK, pMsg ); } // sonador #2.1.2.4.3 팻 조작 UI 연동 SGame* pGame = m_pGameManager->GetActiveGame(); if( pGame && pGame->IsLocalPet( ((SMSG_SKILL_LIST*)pMsg)->target ) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PET_COMMAND, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILL, pMsg ); } } else { CheckInterfaceManager(); } pMsg->bUse = true; } break; case MSG_NPC_DIALOG: { SMSG_NPC_DIALOG* pNPCDlgMsg = (SMSG_NPC_DIALOG*)pMsg; if( pNPCDlgMsg->nDialogType == TS_SC_DIALOG::TYPE_NPC ) { if( CloseAllNPCContactedWindows() ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_NPCDIALOG, pMsg ); bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_NPCDIALOG, true, bFocus ); //// 타겟 해제, 게임 내에 NULL 타겟을 보낸다 //SIMSG_UI_ACT_TARGET msg; //msg.m_nTargetHandle = ((SMSG_NPC_DIALOG*)pMsg)->npc_handle; //m_pGameManager->ProcMsgAtStatic(&msg); } } else if( pNPCDlgMsg->nDialogType == TS_SC_DIALOG::TYPE_QUEST_INFO_AND_START || pNPCDlgMsg->nDialogType == TS_SC_DIALOG::TYPE_QUEST_INFO_IN_PROGRESS || pNPCDlgMsg->nDialogType == TS_SC_DIALOG::TYPE_QUEST_INFO_AND_END )// // 보상창도 추가할지 검토 해봐야한다...... //|| ) { if( CloseAllNPCContactedWindows() || pNPCDlgMsg->nDialogType != TS_SC_DIALOG::TYPE_QUEST_INFO_AND_START) { //ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_QUEST_DIALOG, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_QUEST_INFO, pMsg ); bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; //OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_QUEST_DIALOG, true, bFocus ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_QUEST_INFO, true, bFocus ); } } else if( pNPCDlgMsg->nDialogType == TS_SC_DIALOG::TYPE_DUNGEON_STONE ) { //던전 시즈 UI 처리 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_DUNGEON_STONE, pMsg ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_DUNGEON_STONE, true, true ); } else if( pNPCDlgMsg->nDialogType == TS_SC_DIALOG::TYPE_DONATION_PROP ) { //기부 UI 처리 SUIWnd* pReward = GetUIWindow(TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_REWARD_CONFIRM); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_MSGBOX, pMsg ); // 기부보상아이템 지급 확인창이 떠있으면 포커스 안 넣는다 OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_ITEMCONTRIBUTION, true, !pReward->IsShow() ); } // { [sonador][3.1.3]경매장 서버 연동 else if( pNPCDlgMsg->nDialogType == TS_SC_DIALOG::TYPE_AUCTION_WINDOW ) { if( CloseAllNPCContactedWindows( ) ) { bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; // 노점을 닫자. OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_HOST, false, bFocus ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_AUCTION, pMsg ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_AUCTION, true, true ); } } else if( pNPCDlgMsg->nDialogType == TS_SC_DIALOG::TYPE_HUNTAHOLIC_LOBBY ) // #2.1.2.11.1 { // 헌터홀릭 ui 처리 CloseAllNPCContactedWindows(); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_LOBBY, true, true ); } else if( pNPCDlgMsg->nDialogType == TS_SC_DIALOG::TYPE_DONATION_REWARD_NOTIFY ) { //기부 UI 처리 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_REWARD_CONFIRM, pMsg ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_REWARD_CONFIRM, true, true ); } else if( pNPCDlgMsg->nDialogType == TS_SC_DIALOG::TYPE_CREATE_FARM_WINDOW ) //servantes 2011.03.08 { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, pMsg ); bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, true, bFocus ); } else if( pNPCDlgMsg->nDialogType == TS_SC_DIALOG::TYPE_OTHER_INSTANCE_DUNGEON_CONFIRM_WINDOW ) // 2011.07.13 - servantes { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MISSION_ENTERANCE_WND, pMsg ); OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_MISSION_ENTERANCE_WND, true ); } // } pMsg->bUse = true; } break; case MSG_SCRIPT_SHOW_WINDOW : { pMsg->bUse = true; SMSG_SCRIPT_SHOW_WINDOW* pScriptShowWindow = static_cast(pMsg); /// 2011.10.26 처리 방식 변경 - prodongi m_strShowWindowTrigger = pScriptShowWindow->strTrigger; m_strShowWindowArgument = pScriptShowWindow->strArgument; if(pScriptShowWindow->strWindow == "number_input_window") { bool bFocus = true; //채팅창과 상관 없이 포커스 갖는다 KillChatFocus(); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTNUMBER, pMsg ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTNUMBER, true, bFocus ); return; } else if( pScriptShowWindow->strWindow == "confirm_window") { // 2011.07.26 - servantes : redmine #18039 : 파티초대, 대련창 이 떠있다면 닫아준다 CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_PARTYJOINCHECK ) ); // 파티초대 CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_BATTLE_ACCEPT ) ); // 대련창 OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_YESNO, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SCRIPTSHOWWINDOW_CONFIRM, false, -1, m_strShowWindowArgument.c_str()); // 상급 던전으로 이동하시겠습니까, * 기획팀에서 스트링 변경 해야함* ///프랍을 클릭해서 활성화 될 때, 무기가 안 보이므로 다시 보이게 해준다. SGameAvatarEx* localPlayer = g_pCurrentGameSystem->GetLocalPlayer(); if (localPlayer) localPlayer->HideWeapon(TRUE); return; } else if( pScriptShowWindow->strWindow == "dungeon_raid_confirm_window" && pScriptShowWindow->strTrigger == "begin_dungeon_raid" ) { OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DUNGEON_RAID_CONFIRM, false, -1, S(699) ); //던전에 입장 하시겠삼? return; } else if( pScriptShowWindow->strWindow == "recall_feather_confirm_window" ) { //서버에서 트리거를 여러개 지원 하지 못해서 윈도우는 마지막 한개만 유지. alldelDynamicWnd(); //불리는 만큼 윈도우 생성 int nHalfW = KUIWndManager::GetResolution().cx / 2; int nHalfH = KUIWndManager::GetResolution().cy / 2; SUIRecallWnd* pRecallWnd = new SUIRecallWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pRecallWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_RECALL, true ); pRecallWnd->MovePos( nHalfW - pRecallWnd->GetRect().GetWidth()/2, nHalfH - pRecallWnd->GetRect().GetHeight()/2 ); pRecallWnd->ProcMsgAtStatic( pMsg ); return; } // 상급 던전 입장 여부 추가. kappamind, 2010.02.10 else if( pScriptShowWindow->strWindow == "secret_dungeon_confirm_window" && pScriptShowWindow->strTrigger == "warp_to_secret_dungeon" ) { int nDungeonID = atoi( m_strShowWindowArgument.c_str() ) + 70000000; // 스트링 DB상의 던전 이름을 구하기 위하여 OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECRET_DUNGEON_CONFIRM, false, -1, SR( 728, "#@dungeon_name@#", S( nDungeonID ) ) ); // 상급 던전으로 이동하시겠습니까, * 기획팀에서 스트링 변경 해야함* return; } // 2011.07.07 - servantes // else if( pScriptShowWindow->strWindow == "instance_dungeon_confirm_window" && pScriptShowWindow->strTrigger == "warp_to_instance_dungeon" ) { int nDungeonID = atoi( m_strShowWindowArgument.c_str() ) + 80000000; // 스트링 DB상의 던전 이름을 구하기 위하여 OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_INSTANCE_DUNGEON_CONFIRM, false, -1, SR( 9805, "#@dungeon_name@#", S( nDungeonID ) ) ); // 상급 던전으로 이동하시겠습니까, * 기획팀에서 스트링 변경 해야함* // 2011.07.26 - servantes : redmine #18039 : 파티초대, 대련창 이 떠있다면 닫아준다 CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_PARTYJOINCHECK ) ); // 파티초대 CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_BATTLE_ACCEPT ) ); // 대련창 ///프랍을 클릭해서 활성화 될 때, 무기가 안 보이므로 다시 보이게 해준다. SGameAvatarEx* localPlayer = g_pCurrentGameSystem->GetLocalPlayer(); if (localPlayer) localPlayer->HideWeapon(TRUE); return; } // 2011.07.21 - servantes // 던전에서 나갈 때 뜨는 메세지 박스 else if( pScriptShowWindow->strWindow == "instance_dungeon_confirm_window2" && pScriptShowWindow->strTrigger == "exit_indun" ) { int nDungeonID = atoi( m_strShowWindowArgument.c_str() ) + 80000000; // 스트링 DB상의 던전 이름을 구하기 위하여 OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_YESNO, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_INSTANCE_DUNGEON_EXIT, false, -1, SR( 9807, "#@dungeon_name@#", S(nDungeonID) ) ); return; } } break; /// 2011.10.26 - prodongi case MSG_GENERAL_MESSAGE_BOX: { pMsg->bUse = true; SMSG_GENERAL_MESSAGE_BOX* msg = dynamic_cast(pMsg); if (msg) { OpenMessageBox(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, false, -1, msg->m_text.c_str()); } } break; // 크리쳐 카드 장착 정보 case MSG_EQUIP_SUMMON: { if( ((SMSG_EQUIP_SUMMON*)pMsg)->open_dialog ) { if( CloseAllNPCContactedWindows() ) { bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; // 크리처 컨트롤(1042) 가지고 있는지 검사 if( m_pDisplayInfo->GetSkillSlotManager()->IsEnableCreatureSkill() ) OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATUREFORM, true, bFocus ); else OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, false, -1, S(802) ); } } ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATUREFORM, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT, pMsg ); pMsg->bUse = true; } break; case MSG_REQUEST_EQUIP_SUMMON: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATUREFORM, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, pMsg ); pMsg->bUse = true; } break; case MSG_MARKET: { if( CloseAllNPCContactedWindows() ) { bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOP, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOPKART, pMsg ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOP, true, bFocus ); } pMsg->bUse = true; } break; case MSG_TOOFAR_AS_CONTACTEDNPC: { CloseAllNPCContactedWindows(); pMsg->bUse = true; } break; case MSG_STATE: { if( m_pDisplayInfo->GetPlayerInfoManager() == NULL ) CheckInterfaceManager(); SMSG_STATE * pStateMsg = (SMSG_STATE *)pMsg; // 나 자신 if( pStateMsg->data_owner == SMSG_STATE::OWNER_LOCAL_PLAYER ) { if( !pStateMsg->isToggle ) add_ui_state( pStateMsg ); if( pStateMsg->state_level && !IsUIWindowOpened(TOGGLE_WINDOW::UIWINDOW_STATE_H_EFFECT) ) m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_STATE_H_EFFECT, true ) ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STATE_H_EFFECT, pMsg ); } //else if( pStateMsg->data_owner == SMSG_STATE::OWNER_LOCAL_CREATURE || // pStateMsg->data_owner == SMSG_STATE::OWNER_LOCAL_PARTY || // pStateMsg->data_owner == SMSG_STATE::OWNER_LOCAL_GUILD ) //{ // if( !pStateMsg->isToggle ) // add_ui_state( pStateMsg ); //} // 타겟일경우, 내가 타겟인 경우는 말고 if( m_pDisplayInfo->GetPlayerInfoManager()->IsTargetPlayer(((SMSG_STATE*)pMsg)->handle) && m_pDisplayInfo->GetPlayerInfoManager()->IsTargetPlayer(m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerHandle()) ) { //if( !pStateMsg->isToggle ) // add_ui_state( pStateMsg ); if( IsUIWindowOpened(TOGGLE_WINDOW::UIWINDOW_TARGET_STATE) ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_STATE, pMsg ); else { if( !m_bWarping ) { m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( TOGGLE_WINDOW::UIWINDOW_TARGET_STATE, true ) ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_STATE, pMsg ); } } } pMsg->bUse = true; } break; case IMSG_REFRESH_QUICKSLOT: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_QUICKSLOT_STATECHANGE: { ProcMsgToUIWindow( ((SIMSG_UI_QUICKSLOT_STATECHANGE*)pMsg)->m_ReceiveWndType, pMsg ); pMsg->bUse = true; } break; case IMSG_SET_KEYMAPPING: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT, pMsg );//퀵슬롯 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TASKBAR, pMsg );//태스크바 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINMENU_SUB, pMsg );//메인서브메뉴 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINMENU, pMsg ); // 2012.06.28 - prodongi pMsg->bUse = true; } break; case IMSG_SET_COMBINEITEM: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_ITEMCOMBINE, pMsg );//퀵슬롯 pMsg->bUse = true; } break; case IMSG_SET_UPGRADEITEM: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_UPGRADE, pMsg );//강화창 pMsg->bUse = true; } break; case IMSG_UI_STORE_BUYITEM_TOKART: case IMSG_UI_STORE_SELLITEM_TOKART: case IMSG_UI_SHOP_BUYMODECHANGE: case IMSG_UI_SHOP_BUYITEM_TOKART: case IMSG_UI_SHOP_SELLITEM_TOKART: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOPKART, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_INPUTNUMBER: { ProcMsgToUIWindow( ((SIMSG_UI_INPUTNUMBER*)pMsg)->m_Receiver, pMsg ); pMsg->bUse = true; } break; case IMSG_SET_TRADE: //servantes 2010.10.20 { ProcMsgToUIWindow( ((SIMSG_SET_TRADE*)pMsg)->m_Receiver, pMsg ); pMsg->bUse = true; } break; case IMSG_MOVE_AUCTIONITEM: { ProcMsgToUIWindow( ((SIMSG_MOVE_AUCTIONITEM*)pMsg)->m_Receiver, pMsg ); pMsg->bUse = true; } break; case IMSG_SOULCHARGE_MOVEITEM: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SOUL_CHARGE, pMsg ); pMsg->bUse = true; } break; case IMSG_DESTROY_MOVEITEM: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_DESTRUCTION, pMsg ); pMsg->bUse = true; } break; case IMSG_NOJUM_HOST_MOVEITEM: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_HOST, pMsg ); pMsg->bUse = true; } break; case IMSG_NOJUM_CLIENT_MOVEITEM: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_CLIENT, pMsg ); pMsg->bUse = true; } break; case IMSG_SOULSTONE_MOVEITEM: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_JEWEL_EQUIP, pMsg ); pMsg->bUse = true; } break; //2011.04.26 - servantes / mantis : 12753 case IMSG_REPAIR_MOVEITEM: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_REPAIR, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_REQ_INPUTNUMBER: { //예외 처리임 bool bFocus = true; KillChatFocus(); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTNUMBER, pMsg ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTNUMBER, true, bFocus ); //여기서 다시 SetFocus하는 것은 엔터체팅일때는 위의 OnShowUIWindow에서 bFocus를 true해도 포커스가 이동을 안하기 때문 //INPUT창은 에디트 컨트롤이 있기 때문에 체팅모드과 관계 없이 열릴때 바로 포커스가 가야한다. if( GetGameOption().IsEnterChat() ) { KUIWnd* pInputWnd = GetUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTNUMBER ); if( pInputWnd ) m_pUIWndManager->SetFocus(pInputWnd); } pMsg->bUse = true; } break; case IMSG_UI_INPUTTEXT: { ProcMsgToUIWindow( ((SIMSG_UI_INPUTTEXT*)pMsg)->m_Receiver, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_REQ_INPUTTEXT: { bool bFocus = true; KillChatFocus(); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTTEXT, pMsg ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTTEXT, true, bFocus ); //여기서 다시 SetFocus하는 것은 엔터체팅일때는 위의 OnShowUIWindow에서 bFocus를 true해도 포커스가 이동을 안하기 때문 //INPUT창은 에디트 컨트롤이 있기 때문에 체팅모드과 관계 없이 열릴때 바로 포커스가 가야한다. if( GetGameOption().IsEnterChat() ) { KUIWnd* pInputWnd = GetUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTTEXT ); if( pInputWnd ) m_pUIWndManager->SetFocus(pInputWnd); } pMsg->bUse = true; } break; case IMSG_UI_INPUTTEXT_UPDATE: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTTEXT, pMsg ); pMsg->bUse = true; } break; case MSG_UNSUMMON: { // 2010.07.01 소환된 크리처 일때도 체크 - prodongi //if( m_pDisplayInfo->GetCreatureManager()->IsEquipedCreature(((SMSG_UNSUMMON*)pMsg)->summon_handle) ) if( m_pDisplayInfo->GetCreatureManager()->IsEquipedCreature(((SMSG_UNSUMMON*)pMsg)->summon_handle) || m_pDisplayInfo->GetCreatureManager()->IsEquipedCreatureCheckZeroCount(((SMSG_UNSUMMON*)pMsg)->summon_handle)) //m_pDisplayInfo->GetCreatureManager()->IsExistSummonedCreature(((SMSG_UNSUMMON*)pMsg)->summon_handle)) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT, pMsg ); //ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_HQUICK, pMsg ); } pMsg->bUse = true; } break; case MSG_SUMMON_EVOLUTION : { //ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_HQUICK, pMsg ); OnUpdateWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE ); OnUpdateWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE ); UpdateSummonName( ((SMSG_SUMMON_EVOLUTION*)pMsg)->summon_handle, ((SMSG_SUMMON_EVOLUTION*)pMsg)->name, "<#ffcfb5><@5a4435>" ); pMsg->bUse = true; } case MSG_TRADE: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TRADE, pMsg ); pMsg->bUse = true; } break; case MSG_SKILLCARD_INFO: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILL , pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILLFUND , pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY , pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOP , pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING, pMsg ); pMsg->bUse = true; } break; // storage case MSG_OPEN_STORAGE: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORAGE, pMsg ); pMsg->bUse = true; } break; case MSG_OPEN_JEWEL_EQUIP: { m_nCurrentSelectUI = TOGGLE_WINDOW::UIWINDOW_JEWEL_EQUIP; //servantes 2010.11.29 OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, true, true ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_JEWEL_EQUIP, true, true ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_SOUL_CHARGE, false, true ); pMsg->bUse = true; } break; case MSG_OPEN_SOUL_REPAIR: { m_nCurrentSelectUI = TOGGLE_WINDOW::UIWINDOW_SOUL_CHARGE; //servantes 2010.11.29 OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, true, true ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_SOUL_CHARGE, true, true ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_JEWEL_EQUIP, false, true ); pMsg->bUse = true; } break; case IMSG_UI_CHAT_OPTION: { SIMSG_UI_CHAT_OPTION* pOptionMsg = ( SIMSG_UI_CHAT_OPTION* )pMsg; ProcMsgToUIWindow( pOptionMsg->m_Type, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_CHAT_UPDATE: { SIMSG_UI_CHAT_UPDATE* pChatUpdateMsg = ( SIMSG_UI_CHAT_UPDATE* )pMsg; ProcMsgToUIWindow( pChatUpdateMsg->m_Type, pMsg ); pMsg->bUse = true; } break; //case IMSG_UI_MINIMAP_ALPHA: // { // SIMSG_UI_MINIMAP_ALPHA* pAlphaMsg = ( SIMSG_UI_MINIMAP_ALPHA* )pMsg; // ProcMsgToUIWindow( pAlphaMsg->m_Type, pMsg ); // pMsg->bUse = true; // } // break; case IMSG_UI_OPEN_UPDATE: { SIMSG_UI_OPEN_UPDATE* pOpenMsg = ( SIMSG_UI_OPEN_UPDATE* )pMsg; m_pUIWndManager->SetRenderFlag( pOpenMsg->m_bShow ); m_bWarping = !pOpenMsg->m_bShow; if( !pOpenMsg->m_bShow ) WarpInterface( false ); else ShowInterface( true ); pMsg->bUse = true; } break; case IMSG_UI_CHAT_TABNAME_CHANGE: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_CHAT_TABNAME_OPTION_CHANGE: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHAT_OPTION, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_TAB_UPDATE: { ProcMsgToUIWindow( ((SIMSG_UI_TAB_UPDATE*)pMsg)->m_Type, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_CREATURE_FUND_TAB_UPDATE: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILLFUND, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_SKILL_RADIO_UPDATE: { ProcMsgToUIWindow( ((SIMSG_UI_SKILL_RADIO_UPDATE*)pMsg)->m_Type, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_TARGET_STAT: { SIMSG_UI_TARGET_STAT* pStat = ( SIMSG_UI_TARGET_STAT* )pMsg; if( pStat->m_nMode == SIMSG_UI_TARGET_STAT::USE_DEF || pStat->m_nMode == SIMSG_UI_TARGET_STAT::USE_HPMP ) // hp, mp { //캐릭터 머리 위 HP CHARWINDOW* pCWnd = getCharacterWnd( pStat->handle ); if( pCWnd && pCWnd->pWnd ) { pCWnd->pWnd->RefreshHP( pStat->m_nVar1, pStat->m_nVar3 ); } if( m_pDisplayInfo->GetPlayerInfoManager() && pStat->handle == m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerHandle() ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHARINFO , pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINFRAME, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY , pMsg ); } if( m_pDisplayInfo->GetCreatureManager() && m_pDisplayInfo->GetCreatureManager()->IsEquipedCreature( pStat->handle ) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATUREFORM, pMsg ); } if( m_pDisplayInfo->GetCreatureManager() && m_pDisplayInfo->GetCreatureManager()->IsExistSummonedCreature(pStat->handle) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN, pMsg ); } if( m_pDisplayInfo->GetPlayerInfoManager() && m_pDisplayInfo->GetPlayerInfoManager()->IsTargetPlayer(((SIMSG_UI_TARGET_STAT*)pMsg)->handle) ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_PLAYER, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_CREATURE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_NPC, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_PROP, pMsg ); } SGame* pGame(NULL); pGame = m_pGameManager->GetActiveGame(); if( pGame ) { SGameAvatarEx* pAvatar = (SGameAvatarEx*)( pGame->GetGameObject(pStat->handle) ); if( pAvatar && pAvatar->GetObjType() == TS_ENTER::GAME_SUMMON ) { if( m_pDisplayInfo->IsPartyMember( pAvatar->GetMaster() )) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY_STATE, pMsg ); } } } } else if( pStat->m_nMode == SIMSG_UI_TARGET_STAT::USE_EXP ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHARINFO , pMsg ); } pMsg->bUse = true; } break; case IMSG_UI_SKILL_TIME_UPDATE: { SIMSG_UI_SKILL_TIME_UPDATE* pSkillMsg = ( SIMSG_UI_SKILL_TIME_UPDATE* )pMsg; if( !m_pDisplayInfo->GetCreatureManager()->IsEquipedCreature(pSkillMsg->m_hTarget) ) ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILL, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_MOTION_TIME_UPDATE: { SIMSG_UI_MOTION_TIME_UPDATE* pMotionMsg = (SIMSG_UI_MOTION_TIME_UPDATE*)pMsg; ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MOTION, pMsg ); pMsg->bUse = true; } case IMSG_UI_CREATURE_QUICK_UPDATE: { // OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_HQUICK, true ); // ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_HQUICK, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, pMsg ); pMsg->bUse = true; } break; case MSG_SHOW_CREATE_GUILD: { bool bFocus = true; KillChatFocus(); SIMSG_UI_REQ_INPUTTEXT msg( SIMSG_UI_REQ_INPUTTEXT::USAGE_CREATE_GUILD, TOGGLE_WINDOW::UIWINDOW_PARTY, S(6794), 6782, 6792 ); // [sonador][7.0.6] Mantis 0002624 msg.m_nLimitText = 16; ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTTEXT, &msg ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTTEXT, true, bFocus ); pMsg->bUse = true; } break; case MSG_ADD_PET_INFO: case MSG_REMOVE_PET_INFO: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TASKBAR, pMsg ); SPetMgr* mgr = static_cast< SPetMgr* >( GameUIMgrInstance.GetUIMgr( SGameUIInstance::PET_MGR ) ); if( !mgr || mgr->IsEmpty() ) OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_PET_COMMAND, false, false ); } break; case MSG_SHOW_SET_PET_NAME: // sonador 10.2.1 팻 시스템 구현 { KillChatFocus(); SMSG_SHOW_SET_PET_NAME* pShowSetPetNameMsg = static_cast< SMSG_SHOW_SET_PET_NAME* >( pMsg ); SGame* ActiveGame = m_pGameManager->GetActiveGame(); if( ActiveGame ) { DATA_PET* PetData = ActiveGame->IsLocalPet( pShowSetPetNameMsg->pet_handle ); if( PetData ) { SIMSG_REQ_SET_PET_NAME* reqSetPetName = new SIMSG_REQ_SET_PET_NAME(); reqSetPetName->handle = pShowSetPetNameMsg->pet_handle; std::string Description = S( 1103 ); XStringUtil::Replace( Description, "#@pet_name@#", PetData->name ); SIMSG_UI_REQ_INPUTTEXT msg( SIMSG_UI_REQ_INPUTTEXT::USAGE_CHANGE_PET_NAME, reqSetPetName, TOGGLE_WINDOW::UIWINDOW_INPUTTEXT, Description.c_str(), 6785 ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTTEXT, &msg ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTTEXT, true, true ); } } pMsg->bUse = true; } break; case MSG_SHOW_CREATE_ALLIANCE: { bool bFocus = true; KillChatFocus(); SIMSG_UI_REQ_INPUTTEXT msg( SIMSG_UI_REQ_INPUTTEXT::USAGE_CREATE_ALLIANCE, TOGGLE_WINDOW::UIWINDOW_PARTY, S(6795), 6783, 6792 ); // [sonador][7.0.6] Mantis 0002624 msg.m_nLimitText = 16; ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTTEXT, &msg ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_INPUTTEXT, true, bFocus ); pMsg->bUse = true; } break; case MSG_UNSUMMON_NOTICE: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_CONSOLE_RELUST: { ProcMsgToUIWindow( ((SIMSG_UI_CONSOLE_RELUST*)pMsg)->m_Type, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_DISPLAY_LOCAL_NAME: { SIMSG_UI_DISPLAY_LOCAL_NAME* pLocalNameMsg = (SIMSG_UI_DISPLAY_LOCAL_NAME*)pMsg; OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_LOCAL_SIGN, pLocalNameMsg->bShow, false ); SUILocalSignWnd* pLocalSignWnd = (SUILocalSignWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_LOCAL_SIGN ); if( pLocalSignWnd ) { std::string strLocalName = "<#facb5f>"; strLocalName += pLocalNameMsg->strLocalName; pLocalSignWnd->SetLocalTitle( strLocalName.c_str(), m_dwTime ); } m_nCurrentLocation = pLocalNameMsg->nCurrentLocation; //미니맵에 통보 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP, pMsg ); /// 2011.11.28 - prodongi ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_RAID_SIEGE_STATUS, pMsg); pMsg->bUse = true; } break; case IMSG_IME_NOTIFY : { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING, pMsg ); pMsg->bUse = true; } break; case IMSG_UPDATE_MSGBOX: { SIMSG_UPDATE_MSGBOX *pUpdateMsgBox = static_cast(pMsg); KUIMsgControl* pMsgBox = (KUIMsgControl*)m_pUIWndManager->GetModalWnd( GetMsgBoxID( pUpdateMsgBox->m_MsgBoxID ) ); if( pMsgBox ) pMsgBox->SetMsg( "static_msg", pUpdateMsgBox->m_strMessage.c_str() ); pMsg->bUse = true; } break; case IMSG_DISPLAY_SYS_MSG: { SIMSG_UI_DISPLAY_SYS_MSG* pDisSysMsg = static_cast(pMsg); switch( pDisSysMsg->nSystemMsg ) { case SYS_MSG_LEARN_SKILL: m_pDisplayInfo->SetSkillSysMsg( pDisSysMsg->nSystemMsg, pDisSysMsg->nVar1, pDisSysMsg->nVar2 ); break; case SYS_MSG_DONUSE_PARTY_COMMAND: m_pDisplayInfo->SetPartySysMsg( pDisSysMsg->nSystemMsg ); break; case SYS_MSG_CREATURE_NAME_CHANGE: m_pDisplayInfo->SetSysMsg( pDisSysMsg->nSystemMsg, pDisSysMsg->strText.c_str() ); break; default: m_pDisplayInfo->SetSysMsg( pDisSysMsg->nSystemMsg, pDisSysMsg->nVar1, pDisSysMsg->nVar2 ); break; } pMsg->bUse = true; } break; case IMSG_UI_DISPLAY_STATE_DMG_SYS_MSG: { SIMSG_UI_DISPLAY_STATE_DMG_SYS_MSG* pStateDmg = static_cast(pMsg); m_pDisplayInfo->StateDamageSysMsg( pStateDmg ); pMsg->bUse = true; } break; case IMSG_UI_CHANGE_WIN_ALPHA: { SIMSG_UI_CHANGE_WIN_ALPHA* pAlpha = static_cast(pMsg); SUIWnd* pWnd(NULL); for( int i(0); iChangeAlpha( pAlpha->fAlpha ); } //미니맵 확대맵 알파 적용 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP, pMsg ); pMsg->bUse = true; } break; case MSG_AURA: { SMSG_AURA* pAuraMsg = static_cast(pMsg); if( pAuraMsg->data_owner == SMSG_AURA::OWNER_LOCAL_PLAYER || pAuraMsg->data_owner == SMSG_AURA::OWNER_LOCAL_CREATURE ) // 크리쳐 퀵슬롯을 기존 퀵슬롯에 통합하는 과정중. sfreer. 2009.03.20 { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT, pMsg ); } pMsg->bUse = true; } break; case MSG_CHAT_COMMAND: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg ); pMsg->bUse = true; } break; case MSG_MIX_RESULT: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_ITEMCOMBINE, pMsg ); // 조합. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_UPGRADE, pMsg ); // 강화. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_REPAIR, pMsg ); // 수리. 2010.11.03. 장비수리는 MSG_RESULT - TM_CS_TRANSMIT_ETHEREAL_DURABILITY 로 반환됩니다, 크리쳐카드는 MSG_MIX_RESULT. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_AWAKENING, pMsg ); // 각성 결과창. //SMSG_MIX_RESULT* pMixResultMsg = (SMSG_MIX_RESULT*)pMsg; //if( pMixResultMsg->count > 0 ) //{ // // 강화 성공 // m_pDisplayInfo->SetSysMsg( SYS_MSG_BUILDUP_ITEM ); //} //else //{ // // 강화 실패 아이템 핸들을 서버에서 받아야 할듯 // m_pDisplayInfo->SetSysMsg( SYS_MSG_BUILDUP_ITEM_FAIL ); //} pMsg->bUse = true; } break; case MSG_SKILL_EVENT: { if( m_pDisplayInfo->GetPlayerInfoManager() ) { bool bUiWindow = false; SMSG_SKILL_EVENT* pSkillEvent = (SMSG_SKILL_EVENT*)pMsg; if( pSkillEvent->data_owner == SMSG_SKILL_EVENT::OWNER_LOCAL_PLAYER || pSkillEvent->data_owner == SMSG_AURA::OWNER_LOCAL_CREATURE ) // 크리쳐 퀵슬롯을 기존 퀵슬롯에 통합하는 과정중. sfreer. 2009.03.20 { CHARWINDOW * pCWnd = getCharacterWnd( m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerHandle() ); if ( pSkillEvent->status_type == TS_SC_SKILL::CASTING ) { castError( m_pDisplayInfo, pSkillEvent->cast.nErrorCode ); bUiWindow = true; } else if( pSkillEvent->status_type == TS_SC_SKILL::FIRE || pSkillEvent->status_type == TS_SC_SKILL::CANCEL ) { SUIGaugeWnd * pWnd = getGaugeWnd( pSkillEvent->caster ); if( pWnd ) pWnd->SetActivate( false ); bUiWindow = true; } else if( pSkillEvent->status_type == TS_SC_SKILL::CASTING_UPDATE ) { SUIGaugeWnd * pGaugeWnd = getGaugeWnd( pSkillEvent->caster ); if( pGaugeWnd ) pGaugeWnd->DelayGauge( ((SMSG_SKILL_EVENT*)pMsg)->cast.tm * 10 ); bUiWindow = true; } //크리쳐 퀵슬롯을 기존 퀵슬롯에 통합하는 과정중. sfreer. 2009.03.20 //크리쳐 퀵슬롯에서 REGION_FIRE,COMPLETE관련 처리 루틴 가져옴. else if( pSkillEvent->status_type == TS_SC_SKILL::REGION_FIRE ) { bUiWindow = true; } else if( pSkillEvent->status_type == TS_SC_SKILL::COMPLETE ) { bUiWindow = true; } if( bUiWindow ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILL, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT, pMsg ); } } // 크리처 스킬 사용 if( m_pDisplayInfo->GetCreatureManager()->IsEquipedCreature( pSkillEvent->caster ) && pSkillEvent->data_owner == SMSG_SKILL_EVENT::OWNER_LOCAL_CREATURE ) // !m_pDisplayInfo->GetPlayerInfoManager()->IsLocalPlayer( pSkillEvent->caster ) ) { if( pSkillEvent->status_type == TS_SC_SKILL::CASTING ) { castError( m_pDisplayInfo, pSkillEvent->cast.nErrorCode ); bUiWindow = true; } else if( pSkillEvent->status_type == TS_SC_SKILL::FIRE || pSkillEvent->status_type == TS_SC_SKILL::CANCEL ) { SUIGaugeWnd * pWnd = getGaugeWnd( pSkillEvent->caster ); if( pWnd ) pWnd->SetActivate( false ); bUiWindow = true; } else if( pSkillEvent->status_type == TS_SC_SKILL::CASTING_UPDATE ) { SUIGaugeWnd* pWnd = getGaugeWnd( pSkillEvent->caster ); if( pWnd ) pWnd->DelayGauge( ((SMSG_SKILL_EVENT*)pMsg)->cast.tm * 10 ); bUiWindow = true; } else if( pSkillEvent->status_type == TS_SC_SKILL::REGION_FIRE ) { bUiWindow = true; } else if( pSkillEvent->status_type == TS_SC_SKILL::COMPLETE ) { bUiWindow = true; } if( bUiWindow ) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, pMsg ); //..ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_HQUICK, pMsg ); } } } else { CheckInterfaceManager(); } pMsg->bUse = true; } break; case MSG_ATTACK: { if( m_pDisplayInfo->GetPlayerInfoManager() ) { if( m_pDisplayInfo->GetPlayerInfoManager()->IsLocalPlayer( ((SMSG_ATTACK*)pMsg)->attacker_handle ) || m_pDisplayInfo->GetCreatureManager()->IsEquipedCreature( ((SMSG_ATTACK*)pMsg)->attacker_handle ) ) { SMSG_ATTACK* pAttackMsg = (SMSG_ATTACK*)pMsg; //플래그가 활 종류라면 MotionWnd로 메시지 보냄 if( pAttackMsg->attack_flag & TS_ATTACK_EVENT::ATTACK_FLAG_BOW || pAttackMsg->attack_flag & TS_ATTACK_EVENT::ATTACK_FLAG_CROSS_BOW ) { if( pAttackMsg->attack_action == TS_ATTACK_EVENT::ATTACK_AIMING ) { SUIGaugeWnd * pGaugeWnd = getGaugeWnd( ((SMSG_ATTACK*)pMsg)->attacker_handle ); if( pGaugeWnd ) { pGaugeWnd->ActivateBowGauge( ((SMSG_ATTACK*)pMsg)->attack_speed ); } //ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MOTION, pMsg ); //break; } else if( pAttackMsg->attack_action == TS_ATTACK_EVENT::ATTACK_ATTACK ) { SUIGaugeWnd * pGaugeWnd = getGaugeWnd( ((SMSG_ATTACK*)pMsg)->attacker_handle ); if( pGaugeWnd ) { pGaugeWnd->DeActivateBowGauge( ((SMSG_ATTACK*)pMsg)->attack_delay ); } } else if( pAttackMsg->attack_action == TS_ATTACK_EVENT::ATTACK_END || pAttackMsg->attack_action == TS_ATTACK_EVENT::ATTACK_CANCEL ) { //숨기기 SUIGaugeWnd * pGaugeWnd = getGaugeWnd( ((SMSG_ATTACK*)pMsg)->attacker_handle ); if( pGaugeWnd ) { pGaugeWnd->SetBowEnd(); } } } else { if (pAttackMsg->attack_action == TS_ATTACK_EVENT::ATTACK_CANCEL || pAttackMsg->attack_action == TS_ATTACK_EVENT::ATTACK_ATTACK) { if( m_bowAttackEventBuffer.m_attackFlag & TS_ATTACK_EVENT::ATTACK_FLAG_BOW || m_bowAttackEventBuffer.m_attackFlag & TS_ATTACK_EVENT::ATTACK_FLAG_CROSS_BOW ) { SUIGaugeWnd * pGaugeWnd = getGaugeWnd(m_bowAttackEventBuffer.m_attacker); if (pGaugeWnd) pGaugeWnd->SetBowEnd(); } } } m_bowAttackEventBuffer.m_attackAction = pAttackMsg->attack_action; m_bowAttackEventBuffer.m_attackFlag = pAttackMsg->attack_flag; m_bowAttackEventBuffer.m_attacker = pAttackMsg->attacker_handle; } } else CheckInterfaceManager(); pMsg->bUse = true; } break; case MSG_CANT_ATTACK: { SMSG_CANT_ATTACK* pCantAttack = static_cast(pMsg); if( pCantAttack->reason == RESULT_NOT_ENOUGH_BULLET ) //화살 없다 m_pDisplayInfo->SetSysMsg( SYS_MSG_SKILL_NEED_ARROW ); pMsg->bUse = true; } break; case MSG_COMMERCIAL_STORAGE_LIST: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CASH_STORAGE, pMsg ); } break; case MSG_RESULT: { // 이거 문제 있3 -_- by Testors ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOPKART, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_ITEMCOMBINE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILLFUND, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILLFUND, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_HOST, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_STORE_CLIENT, pMsg ); SMSG_RESULT* pMsgResult = static_cast(pMsg); switch( pMsgResult->request_msg_id ) { case TM_CS_DECOMPOSE: { if( pMsgResult->result == RESULT_SUCCESS ) m_pDisplayInfo->AddSystemMessage( S( SYS_MSG_DECOMPOSE_SUCCESS ), 99); // Dismantling successful. else if( pMsgResult->result == RESULT_INVALID_ARGUMENT ) m_pDisplayInfo->AddSystemMessage( S( SYS_MSG_DECOMPOSE_FAILED ), 99); // Dismantling failed. else if ( pMsgResult->result == RESULT_NOT_EXIST ) __noop; // In case of an error where the number of items sent by the client to the server becomes 0 (do not display a system message). else m_pDisplayInfo->AddSystemMessage( "[ERROR] The server sent an undefined result message!", 255 ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_DECOMPOSITION, pMsgResult ); } break; case TM_CS_PUTON_ITEM: { if( pMsgResult->result == RESULT_SUCCESS ) m_pDisplayInfo->SetSysMsg( SYS_MSG_PUT_ON_ITEM, pMsgResult->value ); //아이템 장착 else m_pDisplayInfo->SetSysMsg( SYS_MSG_PUT_ITEM_FAIL ); //아이템 장착 실패 } break; case TM_CS_PUTOFF_ITEM: { if( pMsgResult->result == RESULT_SUCCESS ) m_pDisplayInfo->SetSysMsg( SYS_MSG_PUT_OFF_ITEM, pMsgResult->value ); //아이템 탈착 else if( pMsgResult->result == RESULT_ACCESS_DENIED ) m_pDisplayInfo->SetSysMsg( SYS_MSG_LAK_PEDENT_EQUIP_REPLACE ); //아이템 탈착 } break; case TM_CS_USE_ITEM: { switch( pMsgResult->result ) { //아이템 사용 case RESULT_SUCCESS: m_pDisplayInfo->SetSysMsg( SYS_MSG_USE_ITEM, pMsgResult->value ); break; // 사용하려던 아이템이 존재하지 않습니다. case RESULT_NOT_EXIST: { // 부름의 깃털을 아이템을 타겟이 없이 사용할 때 예외처리. kappamind, 2010.01.14 if( !m_pDisplayInfo->IsExistInvenItem( 910007 ) ) m_pDisplayInfo->SetSysMsg( SYS_MSG_USE_ITEM_FAIL_NOT_EXSIT, pMsgResult->value ); else m_pDisplayInfo->SetSysMsg( SYS_MSG_USE_SKILL_NEED_TARGET, pMsgResult->value ); } break; // 해당 유저가 아이템을 사용할 수 없는 상태입니다.(앉기, 이동 중 등) case RESULT_NOT_ACTABLE: // { [sonador][1.4.1]시스템 메시지 추가 case RESULT_NOT_ACTABLE_IN_SIEGE_OR_RAID: case RESULT_NOT_ACTABLE_IN_SECROUTE: case RESULT_NOT_ACTABLE_IN_EVENTMAP: // } m_pDisplayInfo->SetSysMsg( SYS_MSG_USE_ITEM_FAIL_NOT_ACTABLE, pMsgResult->value ); break; // 타겟 유저 이름이 TS_CS_USE_ITEM 메시지에 세팅되지 않았습니다. case RESULT_INVALID_ARGUMENT: m_pDisplayInfo->SetSysMsg( SYS_MSG_USE_ITEM_FAIL_INVALID_ARGUMENT, pMsgResult->value ); break; //무게 땜에 사용못함 case RESULT_TOO_HEAVY: m_pDisplayInfo->SetSysMsg( SYS_MSG_USE_ITEM_WEIGHT, pMsgResult->value ); break; //아이템 쿨타임 case RESULT_COOL_TIME: m_pDisplayInfo->SetSysMsg( SYS_MSG_ITEM_DELAYTIME, pMsgResult->value ); break; //아이템을 사용할수 있는 레벨이 아님 case RESULT_NOT_ENOUGH_LEVEL: m_pDisplayInfo->SetSysMsg( SYS_MSG_USE_ITEM_FAIL, pMsgResult->value ); break; //라이딩 상태에서는 할 수없는 행동입니다. case RESULT_LIMIT_RIDING: m_pDisplayInfo->SetSysMsg( SYS_MSG_RIDING_IMPASSABLE, pMsgResult->value ); break; //이미 스테미너 세이버 효과가 적용중일때 case RESULT_ALREADY_STAMINA_SAVED: m_pDisplayInfo->SetSysMsg( SYS_MSG_SAVER_ALREADY, pMsgResult->value ); break; //크리처 이름변경 아이템을 사용시 옳바르지 않은 이름을 입력했을 때 case RESULT_INVALID_TEXT: m_pDisplayInfo->SetSysMsg( SYS_MSG_WRONGSTR, pMsgResult->value ); break; // 옳바르지 않은 크리처의 이름을 변경하고자 하였을 때 // [염원의 깃털] // A.아이템을 사용하려는 개체가 플레이어가 아닙니다. // B.대상 유저가 없거나, 로그아웃 중이거나 로그인이 완료되지 않았습니다. // C.대상 유저가 길드 혹은 파티/공대파티원이 아닙니다. case RESULT_ACCESS_DENIED: m_pDisplayInfo->SetSysMsg( SYS_MSG_USE_ITEM_FAIL, pMsgResult->value ); break; //렙이 높을때 case RESULT_LIMIT_MAX: m_pDisplayInfo->SetSysMsg( SYS_MSG_USE_ITEM_FAIL_LEVELMAX, pMsgResult->value ); break; //렙이 낮을때 case RESULT_LIMIT_MIN: m_pDisplayInfo->SetSysMsg( SYS_MSG_USE_ITEM_FAIL_LEVELMIN, pMsgResult->value ); break; case RESULT_GAMETIME_TIRED_STAMINA_SAVER: m_pDisplayInfo->SetSysMsg( SYS_MSG_CHINA_FATIGUE_TIME_STAMINA, pMsgResult->value ); break; case RESULT_GAMETIME_HARMFUL_STAMINA_SAVER: m_pDisplayInfo->SetSysMsg( SYS_MSG_CHINA_BAD_TIME_STAMINA, pMsgResult->value ); break; // { [sonador][1.4.2]피아구분에 따른 메시지 분류 case RESULT_TARGET_IN_SIEGE_OR_RAID: case RESULT_TARGET_IN_SECROUTE: case RESULT_TARGET_IN_EVENTMAP: m_pDisplayInfo->SetSysMsg( SYS_MSG_USE_ITEM_FAIL_TARGET_LOCATION_WRONG, pMsgResult->value ); break; // } case RESULT_TOO_MUCH_MONEY: // sonador 3.4.3 소지금 최대 한도 오류 시스템 메시지 추가 m_pDisplayInfo->AddSystemMessage( S( 577 ), 99); // You cannot acquire more rupee because of the maximum rupee limit. break; // 2010.06.09 - prodongi case RESULT_NOT_ACTABLE_IN_SECRET_DUNGEON: m_pDisplayInfo->AddSystemMessage( S( 9245 ), 0 ); // <#ff0000>This action cannot be performed in this dungeon.<(version:7.3)> break; case RESULT_TARGET_IN_SECRET_DUNGEON: m_pDisplayInfo->AddSystemMessage( S( 9246 ), 0 ); // You cannot use this item inside the Veiled Dungeon. break; /// 2010.10.05 성장의 물약 관련 에러 메세지 - prodongi case RESULT_ALREADY_SUPER_SAVER: m_pDisplayInfo->AddSystemMessage( S( 245 ), 99); // The effect of the Growth Potion is already in effect. break; case RESULT_GAMETIME_TIRED_SUPER_SAVER: m_pDisplayInfo->AddSystemMessage( S( 593 ), 99 ); // You cannot use growth potions while 'Fatigue' is active during gameplay break; case RESULT_GAMETIME_HARMFUL_SUPER_SAVER: m_pDisplayInfo->AddSystemMessage( S( 594 ), 99 ); // You cannot use growth potions while 'Harmful to the body' is active during gameplay. break; } } break; case TM_CS_TAKE_ITEM: { if( pMsgResult->result == RESULT_SUCCESS ) m_pDisplayInfo->SetSysMsg( SYS_MSG_GET_ITEM, pMsgResult->value ); //아이템 획득 else if( pMsgResult->result == RESULT_TOO_MUCH_MONEY ) // sonador 3.4.3 소지금 최대 한도 오류 시스템 메시지 추가 m_pDisplayInfo->AddSystemMessage( S( 568 ), 99 ); // Your have reached the maximum amount of rupee allowed. You cannot pick up anymore. } break; case TM_TRADE: { if( pMsgResult->result == RESULT_TOO_HEAVY ) //상대방의 무게가 초과됨 { m_pDisplayInfo->SetSysMsg( SYS_MSG_TOO_HEAVY ); // 무게 초과로 거래가 취소 되면 거래창 닫기. kappamind, 2010.01.08 m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_TRADE, false ) ); } // else if( pMsgResult->result == RESULT_NOT_EXIST ) //상대방을 찾을수 없음 //m_pDisplayInfo->SetSysMsg( SYS_MSG_TRADE_NOT_TRADETARGET ); //상대방이 거래를 취소했다 else if( pMsgResult->result == RESULT_TOO_MUCH_MONEY ) // sonador 3.4.3 소지금 최대 한도 오류 시스템 메시지 추가 { SGame* pGame = m_pGameManager->GetActiveGame(); if( pGame ) { SGameAvatarEx* pAvatar = static_cast< SGameAvatarEx* >( pGame->GetGameObject( pMsgResult->value ) ); if( pAvatar ) { std::string Message = S( 567 ); XStringUtil::Replace( Message, "#@player_name@#", pAvatar->GetName() ); m_pDisplayInfo->AddSystemMessage( Message.c_str(), 99 ); // #@player_name@#'s rupee reaches the maximum limit so that the exchange is canceled. } } m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_TRADE, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_INVENTORY, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_INPUTNUMBER, false ) ); } } break; case TM_CS_MIX: { //MIX_RESULT 가 별도로 있어서 막음. if( pMsgResult->result == RESULT_NO_SKILL ) //기초조합 스킬이 있어야 기본적인 강화나 조합이 가능합니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_BUILDUP_ITEM_NO_SKILL ); else if( pMsgResult->result == RESULT_INVALID_ARGUMENT ) //조건이 맞지 않아 조합/강화를 할 수 없습니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_BUILDUP_ITEM_FAILED ); else if( pMsgResult->result == RESULT_NOT_EXIST ) //클라이언트에서 처리하고 있다. 여기서 처리할 필요는 없을듯 m_pDisplayInfo->SetSysMsg( SYS_MSG_BUILDUP_ITEM_NOT_EXIST ); else if( pMsgResult->result == RESULT_ENHANCE_LIMIT ) // 이 아이템의 기간을 더이상 연장할 수 없습니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_DURATION_LIMIT ); else if (pMsgResult->result != RESULT_SUCCESS) m_pDisplayInfo->SetSysMsg( SYS_MSG_BUILDUP_ITEM_FAILED ); //조건이 맞지 않아 강화/조합/수리를 할 수 없습니다. else { SDEBUGLOG( "알 수 없는 조합 실패 (결과:%u)\n", pMsgResult->result ); } } break; case TM_CS_TURN_ON_PK_MODE : { if( pMsgResult->result == RESULT_SUCCESS ) { //이름 점등 CHARWINDOW* pCWnd = getCharacterWnd( m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerHandle() ); if( pCWnd && pCWnd->pWnd ) pCWnd->pWnd->SetNameAlarm( 20 ); } else if( pMsgResult->result == RESULT_NOT_ACTABLE ) { CHARWINDOW* pCWnd = getCharacterWnd( m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerHandle() ); if( pCWnd && pCWnd->pWnd ) pCWnd->pWnd->SetNameAlarm( 1 ); } } break; case TM_CS_TURN_OFF_PK_MODE : { if( pMsgResult->result == RESULT_SUCCESS ) { // } } break; case TM_CS_DROP_ITEM: { if( pMsgResult->result == RESULT_NOT_ACTABLE ) //지금은 그 행동을 할수 읍다 { int x = 0; } else if( pMsgResult->result == RESULT_ACCESS_DENIED ) //떨굴수 없는 아이템이다 { int x = 0; } } break; case TM_SC_DROP_RESULT: { if( pMsgResult->result == RESULT_NOT_ACTABLE ) //지금은 그 행동을 할수 읍다 { int x = 0; } else if( pMsgResult->result == RESULT_ACCESS_DENIED ) //떨굴수 없는 아이템이다 { int x = 0; } } break; case TM_CS_SOULSTONE_CRAFT: { if( pMsgResult->result == RESULT_SUCCESS ) { m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SEND_DATA( TOGGLE_WINDOW::UIWINDOW_JEWEL_EQUIP, "success" ) ); } } break; case TM_CS_LEARN_SKILL: { SIMSG_UI_SEND_DATA kkk( TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT, number_t( pMsgResult->value ), "skillup" ); if( pMsgResult->result == RESULT_SUCCESS ) m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SEND_DATA( TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT, number_t( pMsgResult->value ), "skillup" ) ); } case TM_CS_REPAIR_SOULSTONE: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_SOUL_CHARGE, pMsg ); } break; case TM_CS_START_BOOTH : { if( pMsgResult->result == RESULT_INVALID_TEXT ) m_pDisplayInfo->SetSysMsg( SYS_MSG_BOOTHFILTER_TEXT_1 ); } break; case TM_CS_DONATE_ITEM: { //클라이언트에서 처리하고 있다. 여기서 처리할 필요는 없을듯 // if( pMsgResult->result == RESULT_NOT_EXIST ) // m_pDisplayInfo->SetSysMsg( SYS_MSG_CONTRIBUTE_ITEM_NOT_EXIST ); } break; // { [sonador][3.1.3] 서버 연동, [sonador][3.1.4]시스템 메시지 추가 case TM_CS_AUCTION_SEARCH: { switch( pMsgResult->result ) { case RESULT_INVALID_ARGUMENT: // 요청 플레이어, 카테고리 번호, 페이지 번호 등에 문제가 있을 경우 // 반환됩니다. 잘못된 요청이라는 정도의 내용을 표시하면 적절할 듯 합니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_INVALID_ARGUMENT ); break; } ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_AUCTION, pMsg ); } break; case TM_CS_AUCTION_SELLING_LIST: { switch( pMsgResult->result ) { case RESULT_INVALID_ARGUMENT: // 요청 플레이어, 페이지 번호에 문제가 있을 경우 반환됩니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_INVALID_ARGUMENT ); break; case RESULT_NOT_EXIST: /*해당 메시지를 보낸 유저가 등록한 경매가 없을 경우 반환됩니다. 클라에서 필요할 경우 비어있는 리스트로 RESULT_SUCCESS와 같이 처리 성공으로 보내도 무방하니 변경이 필요하다면 회신 부탁 드립니다.*/ break; } ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_AUCTION, pMsg ); } break; case TM_CS_AUCTION_BIDDED_LIST: { switch( pMsgResult->result ) { case RESULT_INVALID_ARGUMENT: //요청 플레이어, 페이지 번호에 문제가 있을 경우 반환됩니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_INVALID_ARGUMENT ); break; case RESULT_NOT_EXIST: /*해당 메시지를 보낸 유저가 입찰한 경매가 없을 경우 반환됩니다. TS_CS_AUCTION_SELLING_LIST 와 마찬가지로 변경 가능하니 변경이 필요하다면 회신 부탁 드립니다.*/ break; } ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_AUCTION, pMsg ); } break; case TM_CS_AUCTION_BID: { switch( pMsgResult->result ) { case RESULT_SUCCESS: // 입찰 성공 m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_TENDER, pMsgResult->value ); break; case RESULT_INVALID_ARGUMENT: //요청 플레이어, 페이지 번호에 문제가 있을 경우 반환됩니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_INVALID_ARGUMENT ); break; case RESULT_NOT_EXIST: /*입찰 대상 경매 번호에 해당하는 경매가 없을 경우 반환됩니다. 클라에서 경매 리스트 요청을 통해 리스트를 받은 후에 다른 유저가 즉시 구매를 했거나 만료, 경매 취소에 의해 해당 경매가 사라졌을 경우 발생할 수 있습니다.*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_EXIST ); break; case RESULT_NOT_ACTABLE_WHILE_TRADING: //입찰 요청 플레이어가 다른 플레이어와 거래 중일 때 반환됩니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_ACTABLE_WHILE_TRADING ); break; case RESULT_NOT_ACTABLE_WHILE_USING_STORAGE: //입찰 요청 플레이어가 창고를 사용 중일 때 반환됩니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_ACTABLE_WHILE_USING_STORAGE ); break; case RESULT_NOT_ENOUGH_MONEY: //입찰 요청 가격보다 소지금이 부족할 경우 반환됩니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_ENOUGH_MONEY ); break; case RESULT_ACCESS_DENIED: /*자신이 등록한 경매에 입찰을 시도할 경우 반환됩니다. 기본적으로 클라 UI에서도 등록자가 자신이면 막는 것이 좋지만 메시지 조작 등에 의해서 발생될 경우 반환될 수도 있습니다.*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_ACCESS_DENIED ); break; case RESULT_TOO_CHEAP: /*기존 입찰 가격보다 5% 이상 비싼 가격으로만 입찰이 가능한데 해당 가격보다 낮은 가격으로 입찰을 시도할 경우 반환됩니다. 역시 클라 UI에서도 처리가 필요한 부분입니다.*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_TOO_CHEAP ); break; case RESULT_TOO_MUCH_MONEY: /*즉시 구매 가격보다 높은 가격으로 입찰을 시도할 때 반환됩니다. 입찰은 즉구가보다 높게 이루어질 수 없습니다.*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_TOO_MUCH_MONEY ); break; } ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_AUCTION, pMsg ); } break; case TM_CS_AUCTION_INSTANT_PURCHASE: { switch( pMsgResult->result ) { case RESULT_SUCCESS: // 즉구 성공 m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_ATONCE, pMsgResult->value ); break; case RESULT_INVALID_ARGUMENT: // 즉시 구매 요청 플레이어, 경매 번호에 이상이 있을 경우 반환됩니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_INVALID_ARGUMENT ); break; case RESULT_NOT_ACTABLE_WHILE_TRADING: //즉시 구매 요청 플레이어가 다른 플레이어와 거래 중일 때 반환됩니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_ACTABLE_WHILE_TRADING ); break; case RESULT_NOT_ACTABLE_WHILE_USING_STORAGE: //즉시 구매 요청 플레이어가 창고를 사용 중일 때 반환됩니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_ACTABLE_WHILE_USING_STORAGE ); break; case RESULT_NOT_EXIST: /*즉시 구매를 요청한 경매 ID에 해당하는 경매가 존재하지 않을 경우 반환됩니다. 타 플레이어의 즉시 구매, 경매 만료, 경매 취소 등에 의해 이미 종료된 경매일 경우 발생할 수 있습니다.*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_EXIST ); break; case RESULT_ACCESS_DENIED: // 자신이 등록한 경매에 즉시 구매를 시도할 경우 반환됩니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_ACCESS_DENIED ); break; case RESULT_TOO_CHEAP: /*즉시 구매자가 최고 입찰자였을 경우 입찰 가격의 차액 만큼만 소지금을 소모하게 되어 있는데 해당 차액을 계산하던 중 차액이 음수가 될 경우 (오버 플로우일 가능성 높음) 반환됩니다. 즉시구매 실패로 끝나고 어떠한 처리도 일어나지 않습니다.*/ break; case RESULT_NOT_ENOUGH_MONEY: //즉시 구매에 필요한 비용(최고 입찰자였을 경우 즉구가-최고입찰가, 아닌 //경우 즉구가)이 소지금보다 높을 경우 반환됩니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_ENOUGH_MONEY ); break; } ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_AUCTION, pMsg ); } break; case TM_CS_AUCTION_REGISTER: { switch( pMsgResult->result ) { case RESULT_SUCCESS: m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_START, pMsgResult->value ); break; case RESULT_INVALID_ARGUMENT: //경매 기간 정보가 잘못된 경우 반환됩니다. 플레이어 정보가 잘못되어 //등록하는 플레이어의 포인터가 NULL인 경우에는 시스템이 자동 등록 //(기획서 참조)하는 경우로 처리되기 때문에 오류 코드를 발생시키지 //않습니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_INVALID_ARGUMENT ); break; case RESULT_NOT_EXIST: //아이템의 핸들 값이 0이거나 수량이 0보다 작거나 같은 경우, 혹은 지정된 //핸들에 해당하는 아이템이 존재하지 않는 경우 반환됩니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_EXIST ); break; case RESULT_TOO_MUCH_MONEY: /*경매 시작가 관련 계산 중 상점 판매 가격 계산에서 오버플로우가 발생할 경우 반환됩니다. 만일 발생한다면 서버 내부 처리의 수정이 필요합니다.*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_INVALID_STORE_PRICE ); break; case RESULT_TOO_CHEAP: /*경매 시작가격이 상점 판매가보다 낮은 경우 반환됩니다. 경매 시작 가격은 특정 물품을 상점에 판매할 때 가격(상점에 버리기) 이상이어야 합니다. 그 외에 즉시 구매 가격은 경매 시작 가격의 110% 이상의 가격이어야 하지만 그 미만으로 지정되었을 경우에도 반환됩니다.*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_INVALID_REGISTER_PRICE ); break; case RESULT_NOT_ACTABLE: /*경매에 등록하려는 아이템이 거래 불가 아이템이거나 시간제 아이템일 경우 반환됩니다. 또한 카테고리 분류 과정에서 오류가 발생할 경우에도 반환됩니다. 일반적으로 카테고리 분류는 아이템의 대분류를 통해 이루어지지만 서버에서 지정된 대분류에 속하지 않는 경우 모두 기타 그룹으로 포함됩니다. 허나 아예 해당 아이템에 관한 정보가 정상적이지 않기에 대분류 값조차 비정상적인 경우에만 발생합니다. 즉, ItemResource DB에 존재하지 않는 이상한 아이템을 등록할 경우 발생합니다... 거의 발생 못합니다...;; ItemResource DB에 존재하지 않는 아이템은 생성되지도 않습니다 ;ㅅ ; 그냥 등록할 수 없는 아이템이라고 해주세요 ㅠㅜ;*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_UNREGISTER ); break; case RESULT_NOT_ACTABLE_WHILE_TRADING: /*경매에 물품을 등록하려는 플레이어가 다른 플레이어와 거래 중일 때 반환됩니다.*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_ACTABLE_WHILE_TRADING ); break; case RESULT_NOT_ACTABLE_WHILE_USING_STORAGE: /*경매에 물품을 등록하려는 플레이어가 창고를 사용 중일 때 반환됩니다.*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_ACTABLE_WHILE_USING_STORAGE ); break; case RESULT_NOT_OWN: /*경매에 등록하려는 아이템이 등록 요청 플레이어의 소유가 아니거나 인벤토리에 있지 않은 경우(창고에 있다거나)에 반환됩니다. 거래나 무언가 다른 동작과 연이어서 경매 등록 메시지를 보낼 경우 발생할 수 있습니다. (사실 락 때문에 발생 못할 거 같습니다만...ㄷㄷ;;;)*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_UNREGISTER ); break; case RESULT_NOT_ENOUGH_MONEY: /*경매 등록 수수료가 경매 등록 요청 플레이어의 소지금보다 많은 경우 반환됩니다.*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_ENOUGH_MONEY ); break; case RESULT_ALREADY_EXIST: /*경매에 등록하려는 아이템이 이미 경매에 등록된 아이템인 경우 반환됩니다. 버그에 의해서 경매에 등록된 후에 아이템이 인벤토리에 남았거나 메시지 조작을 통해 중복 등록을 시도할 경우 발생한다고 보시면 됩니다.*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_ALREADY_EXIST ); break; } ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_AUCTION, pMsg ); } break; case TM_CS_AUCTION_CANCEL: { switch( pMsgResult->result ) { case RESULT_SUCCESS: m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_CANCEL, pMsgResult->value ); break; case RESULT_NOT_EXIST: /*취소하려는 경매 번호에 해당하는 경매가 존재하지 않을 경우 반환됩니다. 취소를 시도한 플레이어가 해당 경매의 등록자인지 여부와 관계 없이 발생할 수 있으며, 경매 만료, 즉시 구매에 의해 경매가 종료된 이후에 요청하는 경우에 주로 발생합니다.*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_EXIST ); break; case RESULT_NOT_ACTABLE: //취소하려는 경매 번호에 입찰자가 있을 경우 반환됩니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_ACTABLE ); break; case RESULT_ACCESS_DENIED: //취소하려는 경매 번호에 해당하는 경매의 등록자가 취소 요청을 한 플레이어가 //아닐 경우 반환됩니다. 남의 경매는 취소하려고 하면 떽끼~! : ) m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_OWN ); break; } ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_AUCTION, pMsg ); } break; case TM_CS_ITEM_KEEPING_LIST: { switch( pMsgResult->result ) { case RESULT_INVALID_ARGUMENT: /*보관함 리스트를 요청한 플레이어, 페이지 번호에 이상이 있을 경우 반환됩니다.*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_INVALID_ARGUMENT ); break; case RESULT_NOT_EXIST: /*보관함 리스트를 요청한 플레이어의 보관함에 아무런 아이템이 없을 경우 반환됩니다.*/ break; } ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_AUCTION, pMsg ); } break; case TM_CS_ITEM_KEEPING_TAKE: { switch( pMsgResult->result ) { case RESULT_INVALID_ARGUMENT: //보관함 아이템 수령 요청 플레이어, 아이템 보관 ID 정보에 이상이 있을 경우 //반환됩니다. m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_INVALID_ARGUMENT ); break; case RESULT_NOT_EXIST: /*아이템 보관 ID에 해당하는 아이템 보관 정보가 없을 경우 반환됩니다. 시간 제한 만료로 인해 보관 중이던 아이템이 사라진 경우 발생할 수 있습니다.*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_EXIST_TIME_OVER ); break; case RESULT_ACCESS_DENIED: /*수령하려는 아이템의 소유주가 아닐 경우 반환됩니다. 뭐... 이쯤 되면 메시지 조작이라고 봐도 될 것 같습니다...ㄷㄷ;;*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_NOT_OWN ); break; case RESULT_TOO_HEAVY: /*수령하려는 아이템을 수령하면 인벤토리의 무게가 100%를 넘어가서 이동이 불가능하게 될 경우 반환됩니다. 과욕은 금물이죠 : )*/ m_pDisplayInfo->SetSysMsg( SYS_MSG_AUCTION_TOO_HEAVY ); break; case RESULT_TOO_MUCH_MONEY: // sonador 3.4.3 소지금 최대 한도 오류 시스템 메시지 추가 m_pDisplayInfo->AddSystemMessage( S( 569 ), 99 ); // Your rupee reaches the maximum limit so that you cannot withdraw the money for the items in the storage box. break; } ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_AUCTION, pMsg ); } break; // } [sonador][3.1.3] 서버 연동, [sonador][3.1.4]시스템 메시지 추가 case TM_CS_ARRANGE_ITEM: // sonador 1.9.1 인벤토리 및 창고 정렬 기능 구현 { switch( pMsgResult->result ) { case RESULT_SUCCESS: //정렬 처리가 성공했음을 의미합니다. 정렬 처리가 완료되자마자 TS_SC_INVENTORY 메시지를 //서버에서 보내기 때문에 실질적으로 TS_SC_INVENTORY 메시지를 통해 아이템 리스트를 다시 //받은 후에 TS_SC_RESULT 메시지를 받게 됩니다. TS_SC_RESULT 메시지 수신 시점부터 클라 //자체의 정렬 쿨타임을 주시면 됩니다.(기본적으로 쿨타임은 인벤/창고 서로 독립적으로 30초입니다) break; case RESULT_NOT_ACTABLE: //창고 정렬을 시도할 때에는 창고 이용 중이어야 하지만 창고 이용 중이 아닌 상태에서 창고 정렬 //시도 메시지(bIsStorage = true)를 보냈을 경우 반환하게 됩니다. break; case RESULT_COOL_TIME: //서버에서 계산하는 쿨타임을 기준으로 쿨타임이 완료되기 전에 정렬 요청 메시지가 수신되었을 //경우 서버에서 보내게 됩니다. 해당 메시지는 일반적으로는 클라이언트 쿨타임이 정상적으로 //처리되는 한 발생하지 않는 것이 정상입니다. 렉에 의해서 발생 가능성이 있긴 합니다. break; } if( pMsgResult->value ) // is this message from storage window? ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_STORAGE, pMsg ); else // or from inventory window? ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_INVENTORY, pMsg ); } break; /* case TM_CS_CREATE_SECURITY_NO: { SIMSG_UI_PASSWORD_COMPARE::COMPARE_RESULT result = SIMSG_UI_PASSWORD_COMPARE::SUCCESS_FROM_SERVER; if( pMsgResult->result == RESULT_DB_ERROR ) result = SIMSG_UI_PASSWORD_COMPARE::FAILED_DB_ERROR_FROM_SERVER; else if( pMsgResult->result == RESULT_PASSWORD_MISMATCH ) { /// 2012.04.04 - prodongi if (checkPasswordCount()) { pMsg->bUse = true; return ; } result = SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_SERVER; } else if (pMsgResult->result == RESULT_SUCCESS) { m_passwordCount.clear(); } m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_PASSWORD_COMPARE( TOGGLE_WINDOW::UIWINDOW_SECURITYSETTING, result ) ); } break; case TM_CS_CLEAR_SECURITY_NO: { SIMSG_UI_PASSWORD_COMPARE::COMPARE_RESULT result = SIMSG_UI_PASSWORD_COMPARE::SUCCESS_FROM_SERVER; if( pMsgResult->result == RESULT_DB_ERROR ) result = SIMSG_UI_PASSWORD_COMPARE::FAILED_DB_ERROR_FROM_SERVER; else if( pMsgResult->result == RESULT_PASSWORD_MISMATCH ) { /// 2012.04.04 - prodongi if (checkPasswordCount()) { pMsg->bUse = true; return ; } result = SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_SERVER; } else if (pMsgResult->result == RESULT_SUCCESS) { m_passwordCount.clear(); } m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_PASSWORD_COMPARE( TOGGLE_WINDOW::UIWINDOW_SECURITYCLEAR, result ) ); } break; case TM_CS_CHANGE_SECURITY_NO: { SIMSG_UI_PASSWORD_COMPARE::COMPARE_RESULT result = SIMSG_UI_PASSWORD_COMPARE::SUCCESS_FROM_SERVER; if( pMsgResult->result == RESULT_DB_ERROR ) result = SIMSG_UI_PASSWORD_COMPARE::FAILED_DB_ERROR_FROM_SERVER; else if( pMsgResult->result == RESULT_PASSWORD_MISMATCH ) { /// 2012.04.04 - prodongi if (checkPasswordCount()) { pMsg->bUse = true; return ; } result = SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_SERVER; } else if (pMsgResult->result == RESULT_SUCCESS) { m_passwordCount.clear(); } m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_PASSWORD_COMPARE( TOGGLE_WINDOW::UIWINDOW_SECURITYSETTINGMODIFY, result ) ); } break; */ case TM_CS_SECURITY_NO: { SIMSG_UI_PASSWORD_COMPARE::COMPARE_RESULT result; if( pMsgResult->result == RESULT_SUCCESS ) { m_passwordCount.clear(); result = SIMSG_UI_PASSWORD_COMPARE::SUCCESS_FROM_SERVER; } else if (pMsgResult->result == RESULT_PASSWORD_MISMATCH) { /// 2012.04.04 - prodongi if (checkPasswordCount()) { pMsg->bUse = true; return ; } result = SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_SERVER; } else result = SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_SERVER; m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_PASSWORD_COMPARE( TOGGLE_WINDOW::UIWINDOW_SECURITYSTORAGE, result ) ); } break; case TM_CS_SELL_ITEM: if( pMsgResult->result == RESULT_NOT_ACTABLE || pMsgResult->result == RESULT_NOT_EXIST || pMsgResult->result == RESULT_NOT_ENOUGH_MONEY ) { m_pDisplayInfo->AddSystemMessage( S(276), 99 ); // You cannot sell your #@item_name@#. } else if( pMsgResult->result == RESULT_TOO_MUCH_MONEY ) // sonador 3.4.3 소지금 최대 한도 오류 시스템 메시지 추가 { m_pDisplayInfo->AddSystemMessage( S( 564 ), 99); // Your rupee reaches the maximum limit so that you cannot purchase the item. } break; case TM_CS_BUY_ITEM: if( pMsgResult->result == RESULT_NOT_ACTABLE || pMsgResult->result == RESULT_NOT_EXIST ) { m_pDisplayInfo->AddSystemMessage( S(275), 99); // You cannot buy #@item_name@#. } else if( pMsgResult->result == RESULT_NOT_ENOUGH_MONEY ) { m_pDisplayInfo->AddSystemMessage( S(283), 99); // You do not have enough Rupees. } else if( pMsgResult->result == RESULT_NOT_ENOUGH_HUNTAHOLIC_POINT ) // sonador #2.1.2.11.4 { m_pDisplayInfo->AddSystemMessage( S( 998 ), 99); // You do not have enough Gen Points. } else if( pMsgResult->result == RESULT_NOT_ENOUGH_ARENA_POINT ) { m_pDisplayInfo->AddSystemMessage( S(1007), 99); // You do not have enough AP. } break; case TM_CS_CHECK_BOOTH_STARTABLE: //노점 개설 가능 여부 { if( pMsgResult->result == RESULT_NOT_ACTABLE ) //행동 불가, 이동 중, 스킬 사용 중, 공격 중, 라이딩 크리처 탑승 중에는 사용 불가 m_pDisplayInfo->SetSysMsg( SYS_MSG_ACTION_FAIL ); else if( pMsgResult->result == RESULT_NOT_ENOUGH_LEVEL ) //레벨이 딸려서 불가 m_pDisplayInfo->SetSysMsg( SYS_MSG_STALL_OPENLEVEL, pMsgResult->value ); else if( pMsgResult->result == RESULT_NOT_ACTABLE_HERE ) //마리캣 마켓이 아닌경우 m_pDisplayInfo->SetSysMsg( SYS_MSG_STALL_OPENHERE, pMsgResult->value ); else if( pMsgResult->result == RESULT_SUCCESS ) //간흥~ m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_STORE_HOST, true ) ); } break; case TM_CS_REQUEST_RETURN_LOBBY: { SUIInGameLogoutWnd* pLogOutWnd = (SUIInGameLogoutWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_IN_GAME_LOGOUT ); if( pLogOutWnd ) { if( pMsgResult->result == RESULT_SUCCESS ) { pLogOutWnd->SetOutType( SUIInGameLogoutWnd::GAME_LOGOUT_INT_TOWN ); OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_IN_GAME_LOGOUT, true ); } else if( pMsgResult->result == RESULT_COOL_TIME ) { pLogOutWnd->SetOutType( SUIInGameLogoutWnd::GAME_LOGOUT, pMsgResult->value ); OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_IN_GAME_LOGOUT, true ); } } } break; case TM_CS_REQUEST_LOGOUT: { SUIInGameLogoutWnd* pLogOutWnd = (SUIInGameLogoutWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_IN_GAME_LOGOUT ); if( pLogOutWnd ) { if( pMsgResult->result == RESULT_SUCCESS ) { pLogOutWnd->SetOutType( SUIInGameLogoutWnd::GAME_EXIT_IN_TOWN ); OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_IN_GAME_LOGOUT, true ); } else if( pMsgResult->result == RESULT_COOL_TIME ) { pLogOutWnd->SetOutType( SUIInGameLogoutWnd::GAME_EXIT, pMsgResult->value ); OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_IN_GAME_LOGOUT, true ); } } } break; case TM_CS_BUY_FROM_BOOTH: // sonador 3.4.3 소지금 최대 한도 오류 시스템 메시지 추가 { if( pMsgResult->result == RESULT_TOO_MUCH_MONEY ) { SGame* pGame = m_pGameManager->GetActiveGame(); if( pGame ) { SGameAvatarEx* pAvatar = static_cast< SGameAvatarEx* >( pGame->GetGameObject( pMsgResult->value ) ); if( pAvatar ) { std::string Message = S( 566 ); XStringUtil::Replace( Message, "#@target_name@#", pAvatar->GetName() ); m_pDisplayInfo->AddSystemMessage( Message.c_str(), 99); // Dealer "#@target_name@#"'s rupee reaches the maximum limit so that "#@target_name@#" cannot purchase items anymore } } } } break; case TM_CS_SELL_TO_BOOTH: // sonador 3.4.3 소지금 최대 한도 오류 시스템 메시지 추가 { if( pMsgResult->result == RESULT_TOO_MUCH_MONEY ) { m_pDisplayInfo->AddSystemMessage( S( 565 ), 99); // Your rupee reaches the maximum limit so that you cannot purchase items anymore. } } break; case TM_CS_STORAGE : // 유저 창고 아이템 보관개수 초과 시 경고 스트링 추가 2009.06.01. sfreer { if( pMsgResult->result == RESULT_TOO_HEAVY ) { m_pDisplayInfo->AddSystemMessage( S( 6751 ), 0 ); // Your warehouse is full. Please remove some items before trying to add more. } } break; case TM_CS_TRANSMIT_ETHEREAL_DURABILITY : // 아이템 개별수리 결과 반환. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_REPAIR , pMsg ); break; /// 2012.06.05 아레나 에러 메세지 - prodongi case TM_CS_BATTLE_ARENA_JOIN_QUEUE: recvMsgResultBattleArenaJoinQueue(pMsgResult->result); break; case TM_CS_BATTLE_ARENA_LEAVE: recvMsgResultBattleArenaLeave(pMsgResult->result); break; case TM_CS_BATTLE_ARENA_ABSENCE_CHECK_REQUEST: recvMsgResultBattleArenaAbsenceRequest(pMsgResult->result); break; case TM_CS_BATTLE_ARENA_ENTER_WHILE_COUNTDOWN: recvMsgResultBattleArenaEnterWhileCountdown(pMsgResult->result); break; case TM_CS_BATTLE_ARENA_EXERCISE_READY: recvMsgResultBattleArenaExerciseReady(pMsgResult->result); break; case TM_CS_BATTLE_ARENA_EXERCISE_START: recvMsgResultBattleArenaExerciseStart(pMsgResult->result); break; case TM_CS_CHANGE_ALIAS: recvMsgResultBattleArenaChangeAlias(pMsg); break; } pMsg->bUse = true; } break; case MSG_CHAT_RESULT: { SMSG_CHAT_RESULT* pChatResult = static_cast(pMsg); if( pChatResult->type == CHAT_YELL || pChatResult->type == CHAT_GLOBAL ) { if( pChatResult->result == TS_SC_CHAT_RESULT::RESULT_DECREASE_HPMP ) //피 까임 { if( pChatResult->type == CHAT_GLOBAL ) m_pDisplayInfo->SetSysMsg( SYS_MSG_ALLCHAT_DECREASE, pChatResult->percentage ); //전체 쳇 else if( pChatResult->type == CHAT_YELL ) m_pDisplayInfo->SetSysMsg( SYS_MSG_LOCALCHAT_DECREASE, pChatResult->percentage ); //광역 쳇 } else if( pChatResult->result == TS_SC_CHAT_RESULT::RESULT_COOLTIME ) //채팅 딜레이 m_pDisplayInfo->SetSysMsg( SYS_MSG_CHATTING_BAN_NOW ); else if( pChatResult->result == TS_SC_CHAT_RESULT::RESULT_NEED_MORE_HPMP ) //피 필요 m_pDisplayInfo->SetSysMsg( SYS_MSG_CHATTING_BAN ); else if( pChatResult->result == TS_SC_CHAT_RESULT::RESULT_LEVEL_RESTRICT) //피 필요 m_pDisplayInfo->SetSysMsg( SYS_MSG_EVERYCHAT, pChatResult->percentage ); } pMsg->bUse = true; } break; case MSG_ITEM_DROP_RESULT: { SMSG_ITEM_DROP* pDropResult = static_cast(pMsg); //아이템 버리기 if( pDropResult->isAccepted ) { // if( pDropResult->nDropType ) m_pDisplayInfo->SetSysMsg( SYS_MSG_DUMP_ITEM, pDropResult->item_handle ); // else // m_pDisplayInfo->SetSysMsg( SYS_MSG_PK_ITEMDROP, pDropResult->item_handle ); } pMsg->bUse = true; } break; case MSG_USE_ITEM_RESULT: { // m_pDisplayInfo->SetSysMsg( SYS_MSG_USE_ITEM, ((SMSG_USE_ITEM_RESULT*)pMsg)->item_handle ); pMsg->bUse = true; } break; case IMSG_UI_CHANGE_MAP_PROCESS: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP , pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_WORLDMAP, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_ADD_MONSTER: { SIMSG_UI_ADD_MONSTER* pAddMonster = static_cast(pMsg); std::string strName = GetStringDB().GetString( pAddMonster->nameid ); // sonador 1.2.6 CharacterWnd 선공/비선공 구분 구현 _MONSTER_INFO_FILE* pMonsterData = GetMonsterDB().GetMonsterData( pAddMonster->code.value() ); const char* szNameColorTag = 0; if (IsAttack(pAddMonster->handle)) { if( pMonsterData && ( pMonsterData->attack_type & MonsterBase::AT_FIRST_ATTACK ) ) { szNameColorTag = "<#e54c4c><@401717>"; // sonador 1.2.9 선공 표시 색상 수정 } else { szNameColorTag = "<#ffcfb5><@5a4435>"; } } else { szNameColorTag = "<#ffcfb5><@5a4435>"; } std::string str = strName; CreateCharacterWindow( pAddMonster->handle, pAddMonster->objtype, false, str.c_str(), szNameColorTag ); pMsg->bUse = true; } break; case IMSG_UI_CHANGE_RESOLUTION: { SIMSG_UI_CHANGE_RESOLUTION* pChangeResolution = static_cast(pMsg); if( m_pProtectSolutionWnd ) m_pProtectSolutionWnd->ProcMsgAtStatic( pMsg ); if( m_pEndingWnd ) m_pEndingWnd->ProcMsgAtStatic( pMsg ); if( m_pLoadingWnd ) m_pLoadingWnd->ProcMsgAtStatic( pMsg ); if( m_pEffectFocusWnd ) m_pEffectFocusWnd->ProcMsgAtStatic( pMsg ); if( m_pFadeInOutEffectWnd ) m_pFadeInOutEffectWnd->ProcMsgAtStatic( pMsg ); // 해상도변경 알림. bintitle. 2010.09.17. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_EQUIPMENT, pMsg ); // 장비 - 인벤토리, 합성 윈도우 위치조정. ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP, pMsg ); // 미니맵 - 내구도뷰어 위치조정. if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::KR) { int nLeft = pChangeResolution->m_nWidth; if( m_pKoreaWarringGrade_15 ) { nLeft -= m_pKoreaWarringGrade_15->GetRect().GetWidth(); m_pKoreaWarringGrade_15->MovePos( nLeft, 0 ); } else if( m_pKoreaWarringGrade_18 ) { nLeft -= m_pKoreaWarringGrade_18->GetRect().GetWidth(); m_pKoreaWarringGrade_18->MovePos( nLeft, 0 ); } if( m_pKoreaWarringVioLan ) { nLeft -= m_pKoreaWarringVioLan->GetRect().GetWidth(); m_pKoreaWarringVioLan->MovePos( nLeft, 0 ); } } } break; case MSG_SUMMON_NAME_CHANGE: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN, pMsg ); } break; case MSG_SUMMON_CARD: { // 2010.08.03 정리 - prodongi ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_CARD_FRONT, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_CARD_BACK, pMsg ); } break; case MSG_SUMMON_CARD_ITEM_INFO: { // 2010.08.03 정리 - prodongi ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_CARD_FRONT, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_CARD_BACK, pMsg ); } break; case IMSG_FIXED_CREATURESLOT: // servantes 2011.05.02 { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATUREFORM, pMsg ); } break; // 2010.08.06 - prodongi case MSG_BOSS_MONSTER_CARD: { ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_BOSS_MONSTER_CARD, pMsg); } break; case IMSG_UI_FADE_IN_EFFECT: { if( m_pFadeInOutEffectWnd ) m_pFadeInOutEffectWnd->ProcMsgAtStatic( pMsg ); } break; case IMSG_UI_FADE_OUT_EFFECT: { if( m_pFadeInOutEffectWnd ) m_pFadeInOutEffectWnd->ProcMsgAtStatic( pMsg ); } break; case IMSG_UI_CUSTOMIZIG_UPDATE: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATECHAR_SECOND, pMsg ); } break; case IMSG_UI_OPEN_PRIVATE_MENU: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_POPUP_PARTY_MENU_CHARACTER, pMsg ); //2011.11.15 - servantes : enum 값의 스트링 변경 } break; case IMSG_UI_EMPTY_SOULPWER_MSG: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING, pMsg ); } break; case IMSG_UI_REQ_RETURN_LOBBY: { if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::KR) { SUILoadingWnd::SetRenderKoreaWarring( 2 ); SUILoadingWnd::SetFirstLoading( true ); } pMsg->bUse = true; } break; case IMSG_UI_CHANGE_DISPLAY_NAME: { SIMSG_UI_CHANGE_DISPLAY_NAME* pDisName = static_cast(pMsg); CHARWINDOW * pCWnd = getCharacterWnd( pDisName->hOwner ); if( pCWnd && pCWnd->pWnd ) { pCWnd->pWnd->ChangeDisplayName( pDisName ); } } break; // { [sonador][3.1.2] 경매장 구현 case IMSG_RES_AUCTION_SEARCH: case IMSG_RES_AUCTION_SELLING_LIST: case IMSG_RES_AUCTION_BIDDED_LIST: case IMSG_RES_AUCTION_ITEM_KEEPING_LIST: { ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_AUCTION, pMsg ); pMsg->bUse = true; } break; // } case MSG_REQUEST_SECURITY_NO: //창고 관련 보안 서버에서 요청 함 { SMSG_REQUEST_SECURITY_NO* pSecurityMsg = static_cast(pMsg); if( pSecurityMsg->mode == 1 ) { SUISecurityStorageWnd* pStorageWnd = (SUISecurityStorageWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_SECURITYSTORAGE ); if( pStorageWnd ) { pStorageWnd->SetMode( pSecurityMsg->mode ); OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_SECURITYSTORAGE, true ); } } else { SUISecurityCharacterWnd* pCharacterWnd = (SUISecurityCharacterWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_SECURITYCHARACTER ); if( pCharacterWnd ) { pCharacterWnd->SetMode( pSecurityMsg->mode ); // sonador // 서버에서 케릭터 삭제를 위해 보안 번호 입력창을 요구할 때, // 케릭터 삭제를 묻는 메시지 박스가 활성화 되어있어 클라이언트가 // 포커스를 놓친후, 다시 포커스가 들어오면 모달 윈도우가 두개가 // 떠 있어 내부 UI 포커싱에 문제가 생긴다. 모든 메시지 박스를 닫자. if( m_pUIWndManager ) m_pUIWndManager->CloseAllMessageBox(); OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_SECURITYCHARACTER, true ); } } pMsg->bUse = true; } break; case IMSG_UI_PASSWORD_COMPARE: { SIMSG_UI_PASSWORD_COMPARE* pMsgPassWord = static_cast(pMsg); if( pMsgPassWord->compare_result == SIMSG_UI_PASSWORD_COMPARE::SUCCESS_FROM_CLIENT ) //클라이언트에서 재입력 비교 성공했을때 서버에 요청 { switch( pMsgPassWord->window_type ) { case TOGGLE_WINDOW::UIWINDOW_SECURITYSETTING: { if( pMsgPassWord->password1 && pMsgPassWord->password2 ) { SMSG_CS_CREATE_SECURITY_NO* pGameMsg = new SMSG_CS_CREATE_SECURITY_NO; ::strncpy( pGameMsg->password, pMsgPassWord->password1, 18 ); ::strncpy( pGameMsg->security_no, pMsgPassWord->password2, 18 ); m_pGameManager->PostMsgAtDynamic( pGameMsg ); } } break; case TOGGLE_WINDOW::UIWINDOW_SECURITYSETTINGMODIFY: { if( pMsgPassWord->password1 && pMsgPassWord->password2 ) { SMSG_CHANGE_SECURITY_NO* pGameMsg = new SMSG_CHANGE_SECURITY_NO; ::strncpy( pGameMsg->security_no_old, pMsgPassWord->password1, 18 ); ::strncpy( pGameMsg->security_no, pMsgPassWord->password2, 18 ); m_pGameManager->PostMsgAtDynamic( pGameMsg ); } } break; case TOGGLE_WINDOW::UIWINDOW_SECURITYCHARACTER: { if( pMsgPassWord->password1 && pMsgPassWord->password2 ) { SMSG_SECURITY_NO* pGameMsg = new SMSG_SECURITY_NO; pGameMsg->mode = pMsgPassWord->mode; ::strncpy( pGameMsg->security_no, pMsgPassWord->password1, 18 ); m_pGameManager->PostMsgAtDynamic( pGameMsg ); } } break; case TOGGLE_WINDOW::UIWINDOW_SECURITYSTORAGE: { if( pMsgPassWord->password1 ) { SMSG_SECURITY_NO* pGameMsg = new SMSG_SECURITY_NO; pGameMsg->mode = pMsgPassWord->mode; ::strncpy( pGameMsg->security_no, pMsgPassWord->password1, 18 ); m_pGameManager->PostMsgAtDynamic( pGameMsg ); } } break; case TOGGLE_WINDOW::UIWINDOW_SECURITYCLEAR: { if( pMsgPassWord->password1 && pMsgPassWord->password2 ) { SMSG_CS_CLEAR_SECURITY_NO* pGameMsg = new SMSG_CS_CLEAR_SECURITY_NO; ::strncpy( pGameMsg->password, pMsgPassWord->password1, 18 ); ::strncpy( pGameMsg->security_no, pMsgPassWord->password2, 18 ); m_pGameManager->PostMsgAtDynamic( pGameMsg ); } } break; } } else //클라이언트에서 재입력 비교 실패시 메시지 박스를 띄운후 입력창 다시 띄우기 { SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOTUSE; std::string strErrorMsg; switch( pMsgPassWord->window_type ) { case TOGGLE_WINDOW::UIWINDOW_SECURITYSETTING: { boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYSETTING_SUCCES; switch( pMsgPassWord->compare_result ) { case SIMSG_UI_PASSWORD_COMPARE::SUCCESS_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_REGISTER_COMPLETE ); //새로운 보안 설정이 완료되었습니다. } break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_CLIENT: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_03 ); boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYSETTING_FAILED; } break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_07 ); boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYSETTING_FAILED; } break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_SPECIALCHAR_FROM_CLIENT: case SIMSG_UI_PASSWORD_COMPARE::FAILED_SPECIALCHAR_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_01 ); boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYSETTING_FAILED; } break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_DB_ERROR_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_06 ); boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYSETTINGMODIFY_FAILED; } break; } } break; case TOGGLE_WINDOW::UIWINDOW_SECURITYSETTINGMODIFY: { boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYSETTINGMODIFY_SUCCES; switch( pMsgPassWord->compare_result ) { case SIMSG_UI_PASSWORD_COMPARE::SUCCESS_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_CHANGE_COMPLETE ); //변경된 설정이 성공적으로 적용되었습니다. } break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_CLIENT: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_03 ); boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYSETTINGMODIFY_FAILED; } break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_07 ); boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYSETTINGMODIFY_FAILED; } break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_SPECIALCHAR_FROM_CLIENT: case SIMSG_UI_PASSWORD_COMPARE::FAILED_SPECIALCHAR_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_01 ); boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYSETTINGMODIFY_FAILED; } break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_DB_ERROR_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_06 ); boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYSETTINGMODIFY_FAILED; } break; } } break; case TOGGLE_WINDOW::UIWINDOW_SECURITYCHARACTER: { boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYCHARACTER_FAILED; switch( pMsgPassWord->compare_result ) { case SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_CLIENT: strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_03 ); break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_SERVER: strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_07 ); break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_SPECIALCHAR_FROM_CLIENT: case SIMSG_UI_PASSWORD_COMPARE::FAILED_SPECIALCHAR_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_01 ); } break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_NOT_EXIT_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_04 ); } break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_ACCESS_DENIED_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_05 ); boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYCHARACTER_ACCESS_DENIED; } break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_DB_ERROR_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_06 ); } break; } } break; case TOGGLE_WINDOW::UIWINDOW_SECURITYSTORAGE: { boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYSTORAGE_FAILED; switch( pMsgPassWord->compare_result ) { case SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_CLIENT: strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_03 ); break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_SERVER: strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_07 ); break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_SPECIALCHAR_FROM_CLIENT: case SIMSG_UI_PASSWORD_COMPARE::FAILED_SPECIALCHAR_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_01 ); } break; } } break; case TOGGLE_WINDOW::UIWINDOW_SECURITYCLEAR: { //들어오는 에러메시지 걸러낼것... //비밀번호가 틀렸니 마니 등등등 에러 띄우기. boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYCLEAR_SUCCES; switch( pMsgPassWord->compare_result ) { case SIMSG_UI_PASSWORD_COMPARE::SUCCESS_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( 1393 ); //새로운 보안 설정이 완료되었습니다. } break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_CLIENT: { strErrorMsg = GetStringDB().GetString( 1394 ); // "비밀번호를 다시 입력바람. 서로 안맞음."; // boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYCLEAR_FAILED; } break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( 1395 ); // "보안비번을 바꿀수 없습니다. 주민번호, 보안비번을 다시 확인해주세요."; boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYCLEAR_FAILED; } break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_ACCESS_DENIED_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( 1396 ); //"보안 비밀번호를 초기화 할수 없다(혹은 세팅되어 있지 않다)"; boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYCLEAR_IMPOSSIBLE; } break; case SIMSG_UI_PASSWORD_COMPARE::FAILED_SPECIALCHAR_FROM_CLIENT: case SIMSG_UI_PASSWORD_COMPARE::FAILED_SPECIALCHAR_FROM_SERVER: { strErrorMsg = GetStringDB().GetString( SYS_MSG_SECURITY_WND_01 ); boxid = SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SECURITYCLEAR_FAILED; } break; } } break; } if( boxid != SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOTUSE && strErrorMsg.empty() == false ) OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, boxid, true, 0, strErrorMsg.c_str() ); } } break; case IMSG_UI_WINDOW_ADDON: { CreateNewAddOnWindow( static_cast(pMsg) ); } break; case IMSG_UI_GET_ADDON_POSITION: { SIMSG_GET_ADDON_POSITION* pMsgAddOnPos = static_cast(pMsg); GetAddOnWindowPosition( (ADDON_WINDOW_POSITION)pMsgAddOnPos->type, pMsgAddOnPos->val, pMsgAddOnPos->main_rect, pMsgAddOnPos->addon_rect ); } break; case MSG_NPC_TRADE_INFO: { SMSG_NPC_TRADE_INFO* pNpcTradeInfo = static_cast(pMsg); if (!pNpcTradeInfo) { pMsg->bUse = true; break; } int msg_type = SYS_MSG_BUYNUM_ITEM; if( pNpcTradeInfo && pNpcTradeInfo->is_sell ) // is_sell이 true면 판거다 msg_type = SYS_MSG_SELLNUM_ITEM; m_pDisplayInfo->SetSysMsg( msg_type, pNpcTradeInfo->code, pNpcTradeInfo->count.getAmount() ); pMsg->bUse = true; } break; case MSG_GAME_OUT: { SMSG_GAME_OUT* pGameOut = static_cast(pMsg); if( IsWebPageWndOpened() == false ) { /* SUIInGameLogoutWnd* pLogOutWnd = (SUIInGameLogoutWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_IN_GAME_LOGOUT ); if( pLogOutWnd ) { if( pGameOut->character_select ) //true면 log out pLogOutWnd->SetOutType( pGameOut->in_town ? SUIInGameLogoutWnd::GAME_LOGOUT_INT_TOWN : SUIInGameLogoutWnd::GAME_LOGOUT ); else //false면 게임 종료 pLogOutWnd->SetOutType( pGameOut->in_town ? SUIInGameLogoutWnd::GAME_EXIT_IN_TOWN : SUIInGameLogoutWnd::GAME_EXIT ); OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_IN_GAME_LOGOUT, true ); }*/ } pMsg->bUse = true; } break; case TMSG_REQ_CLOSE_EX: { SetShowEndingWnd(true); //m_pGameManager->GameExit(); } break; case IMSG_REQ_WINDOW_OBJECT: // #2.1.2.11.1 { SIMSG_REQ_WINDOW_OBJECT* reqWndObj = static_cast< SIMSG_REQ_WINDOW_OBJECT* >( pMsg ); reqWndObj->window = getSUIWnd( reqWndObj->windowType ); } break; case IMSG_INSTANCE_GAME_ENTER: case IMSG_INSTANCE_GAME_EXIT: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INSTANCE_TASKBAR_ENTRANCE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INSTANCE_ENTRANCE, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_TASKBAR, pMsg );//태스크바 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_INSTANCE, pMsg ); alldelDynamicWnd(); pMsg->bUse = true; } break; case IMSG_INSTANCE_GAME_SCORE: case MSG_INSTANCE_GAME_SCORE_REQUEST: { /// 2011.02.11 - prodongi /// 2011.05.26 안 쓰임 - prodongi /* if (IsShow(TOGGLE_WINDOW::UIWINDOW_INSTANCE_WARRECORD)) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INSTANCE_WARRECORD, pMsg ); ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg ); // 인벤토리에 홀릭포인트 전달. } */ if (IsShow(TOGGLE_WINDOW::UIWINDOW_CHARINFO)) { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CHARINFO, pMsg ); } pMsg->bUse = true; } break; case MSG_HUNTAHOLIC_BEGIN_HUNTING: case MSG_HUNTAHOLIC_BEGIN_COUNTDOWN: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_INSTANCE, pMsg ); pMsg->bUse = true; } break; case IMSG_RESURRECTION: { SMSG_RESURRECTION *newmsg = new SMSG_RESURRECTION( ((SMSG_RESURRECTION*)pMsg)->hOwner, ((SMSG_RESURRECTION*)pMsg)->nUseItem, ((SMSG_RESURRECTION*)pMsg)->bCompete, ((SMSG_RESURRECTION*)pMsg)->bDeathmatch ); g_pCurrentGameSystem->ProcMsgAtStatic(newmsg); } break; // 2010.05.12 - prodongi case IMSG_UI_USE_HAIR_ITEM: ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_INVENTORY, pMsg); break; // 2010.05.20 - prodongi case IMSG_HIDE_EQUIP_INFO: ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_SYSTEM, pMsg); //------------------------------------------------------------------- // 길드 윈도우 관련 메세지. case IMSG_UI_SETUP_REGION: { ProcMsgToUIWindow( ((SIMSG_UI_SETUP_REGION*)pMsg)->m_nType, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_GUILD_DONATE_MODE: case IMSG_UI_GUILD_MASTER_MODE : // 길드마스터 모드. case IMSG_UI_GUILD_MANAGE_MODE : // 길드원 관리모드. case IMSG_UI_GUILD_EXPULSION_SETUP : // 길드맴버 팝업메뉴( 길드원제명 ) -> 길드원관리패널( 길드원제명 팝업 오픈 ) case IMSG_UI_GUILD_MEMBERCLASS_SETUP : // 길드맴버 팝업메뉴( 등급관리 ) -> 길드원관리패널( 길드원등급 팝업 오픈 ) case IMSG_UI_GUILD_MEMBERTAB : // 길드원 탭 활성화. case IMSG_UI_GUILD_APPLICANTTAB : // 길드신청자 탭 활성화. case IMSG_UI_GUILD_APPLICANT_FOR_ADMISSION : // 길드원가입 패널 오픈. case IMSG_UI_GUILD_CLASSNAME : // 길드등급 팝업메뉴의 길드등급 명 전송. case IMSG_UI_GUILD_PROMOTE_TO_MEMBER : // 길드장인계 맴버 정보. case IMSG_UI_GUILD_ICON : // 길드아이콘 AniName. // 길드메인 윈도우로 메세지 전송. ProcMsgToUIWindow( static_cast< SIMSG_UI_GUILD_WNDMSG * >( pMsg )->wndType, pMsg ); break; //-------------------------------------------------------------------- //------------------------------------------------------------------- // 인벤토리, 장비창 관련 메세지. case IMSG_EQUIPMENT_POPUP: // 장비창에서 아이템팝업메뉴 오픈. case IMSG_DESTRY_ITEM: // 인벤토리에서 아이템파괴창으로 정보전달. ProcMsgToUIWindow( static_cast< SIMSG_UI_EQUIPMENT_POPUP_WNDMSG * >( pMsg )->wndType, pMsg ); break; case IMSG_DECO_VISIBILITY_CHANGE: // 꾸미기아이템 보임,숨김 변경. ProcMsgToUIWindow( static_cast< SIMSG_DECO_VISIBILITY_CHANGE * >( pMsg )->wndType, pMsg ); break; case IMSG_DURABILITY_TOGGLE: // 내구도출력UI 토글. ( 단축키로 토글한 경우 ). ProcMsgToUIWindow( static_cast< SIMSG_DURABILITY_TOGGLE * >( pMsg )->wndType, pMsg ); break; case IMSG_SYNTHETIC_ID: // 합성분류( 강화, 조합 )을 알림. ProcMsgToUIWindow( static_cast< SIMSG_DURABILITY_TOGGLE * >( pMsg )->wndType, pMsg ); break; case IMSG_FORMAL_ID: ProcMsgToUIWindow( static_cast< SIMSG_FORMAL_ID * >( pMsg )->wndType, pMsg ); break; case IMSG_SYNTHETIC_ITEM: ProcMsgToUIWindow( static_cast< SIMSG_FORMAL_ID * >( pMsg )->wndType, pMsg ); break; //-------------------------------------------------------------------- case IMSG_HELP_TEXT: // 도움말 윈도우에 도움말 전달. ProcMsgToUIWindow( static_cast< SIMSG_HELP_TEXT * >( pMsg )->wndType, pMsg ); break; case IMSG_UPDATE_CASHITEM: // 캐쉬아이템 업데이트를 알림. ProcMsgToUIWindow( static_cast< SIMSG_UPDATE_CASHITEM * >( pMsg )->wndType, pMsg ); break; //--------------------------------------------------------------------------- // ★ 업로드서버 결과.( 긷드아이콘, 길드배너 등 이미지 업로드 서버 ) // case IMSG_UPLOADSERVER_RESULT: ProcMsgToUIWindow( static_cast< SIMSG_UPLOADSERVER_RESULT * >( pMsg )->wndType, pMsg ); break; /// 2011.01.17 - prodongi case IMSG_MARK_STATUS_CHANGE: { SMSG_MARK_STATUS_CHANGE* msg = dynamic_cast(pMsg); if (g_pCurrentGameSystem->IsLocalPlayer(msg->m_handle)) ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_MAINFRAME, pMsg); if (g_pCurrentGameSystem->IsTarget(msg->m_handle)) { ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_TARGET_PLAYER, pMsg); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_TARGET_CREATURE, pMsg); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_TARGET_NPC, pMsg); ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_TARGET_PROP, pMsg); } } break; case IMSG_SELECT_TARGET: /// 2011.02.15 - prodongi { ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN, pMsg); pMsg->bUse = true; } break; case IMSG_RECHARGE_MSGBOX: { ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_REPAIR, pMsg); pMsg->bUse = true; } break; /// 2011.08.11 - prodongi case IMSG_RECHARGE_MSGBOX_CONTENT: { ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_RECHARGE_MSGBOX, pMsg); pMsg->bUse = true; } break; case MSG_CREATURE_FARM_INFO: // 2011.02.23 - servantes { ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, pMsg); pMsg->bUse = true; } break; case MSG_RESULT_FOSTER: // 2011.03.02 - servantes { ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, pMsg); pMsg->bUse = true; } break; case MSG_RESULT_NURSE: // 2011.03.04 - servantes { ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, pMsg); pMsg->bUse = true; } break; case MSG_RESULT_RETRIEVE: // 2011.03.07 - servantes { ProcMsgToUIWindow(TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, pMsg); pMsg->bUse = true; } break; case IMSG_UI_CREATURE: // 2011.03.15 servantes { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, pMsg ); pMsg->bUse = true; } break; case IMSG_UI_CREATURE_DATA: // 2011.03.28 servantes { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, pMsg ); pMsg->bUse = true; } break; /// 2011.05.12 우클릭 유도 - prodongi case MSG_SKILL_LEVEL_LIST: { ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_CARD_BACK, pMsg ); } break; case IMSG_UI_SELECT_CREATURE: // 2011.05.13 - servantes ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE, pMsg ); break; case IMSG_UI_SET_MAIN_CREATURE: // 2011.05.19 - servantes ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE, pMsg ); break; case IMSG_UI_GET_MAIN_CREATURE_HANDLE: // 2011.05.24 - servantes ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE, pMsg ); break; case IMSG_UI_SELECT_CREATURE_2ND: // 2011.05.13 - servantes ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATUREFORM, pMsg ); break; case IMSG_UI_SET_MAIN_CREATURE_2ND: // 2011.05.25 - servantes ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATUREFORM, pMsg ); break; case IMSG_UI_SELECT_LAST_CREATURE: // 2011.06.02 - servantes ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE, pMsg ); break; case IMSG_UI_OPEN_BADGE: /// 2011.07.07 - prodongi ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_BADGE, pMsg ); pMsg->bUse = true; break; case IMSG_MISSION_TITLE: // 2011.07.07 - servantes ProcMsgToUIWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MISSION_TITLE_WND, pMsg ); break; case IMSG_UI_RECT: // 2011.09.08 - servantes : UI의 영역을 얻어온다 { SIMSG_UI_RECT* pRMsg = (SIMSG_UI_RECT*)pMsg; ProcMsgToUIWindow( pRMsg->wndType, pMsg ); } break; case IMSG_SET_PARTY_TYPE: // 2011.09.20 - servantes : 파티타입 전송 { SMSG_SET_PARTY_TYPE* pRMsg = (SMSG_SET_PARTY_TYPE*)pMsg; ProcMsgToUIWindow( pRMsg->wndType, pMsg ); } break; case IMSG_GET_PARTY_WND_PTR: // 2011.09.20 - servantes : 파티타입 전송 { SIMSG_GET_PARTY_WND_PTR* pRMsg = (SIMSG_GET_PARTY_WND_PTR*)pMsg; ProcMsgToUIWindow( pRMsg->wndType, pMsg ); } break; /// 2012.04.26 - prodongi case IMSG_ANNOUNCE: { ProcMsgToUIWindow(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ANNOUNCE, pMsg); } break; case IMSG_UPDATE_MAIN_MENU_BUTTON: { ProcMsgToUIWindow(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MAINMENU, pMsg); } break; /// 2012.06.05 아레나 메세지 처리 - prodongi case MSG_BATTLE_ARENA_JOIN_QUEUE: recvMsgBattleArenaJoinQueue(pMsg); break; case MSG_BATTLE_ARENA_LEAVE: recvMsgBattleArenaLeave(pMsg); break; case MSG_BATTLE_ARENA_BATTLE_INFO: recvMsgBattleArenaBattleInfo(pMsg); break; case MSG_BATTLE_ARENA_BATTLE_STATUS: recvMsgBattleArenaBattleStatus(pMsg); break; case MSG_BATTLE_ARENA_BATTLE_SCORE: recvMsgBattleArenaBattleScore(pMsg); break; case MSG_BATTLE_ARENA_JOIN_BATTLE: recvMsgBattleArenaJoinBattle(pMsg); break; case MSG_BATTLE_ARENA_DISCONNECT_BATTLE: recvMsgBattleArenaDisconnectBattle(pMsg); break; case MSG_BATTLE_ARENA_RECONNECT_BATTLE: recvMsgBattleArenaReconnectBattle(pMsg); break; case MSG_BATTLE_ARENA_RESULT: recvMsgBattleArenaResult(pMsg); break; case MSG_BATTLE_ARENA_ABSENCE_CHECK: recvMsgBattleArenaAbsenceCheck(pMsg); break; case MSG_BATTLE_ARENA_PENALTY_INFO: recvMsgBattleArenaPenaltyInfo(pMsg); break; case MSG_BATTLE_ARENA_UPDATE_WAIT_USER_COUNT: recvMsgBattleArenaUpdateWaitUserCount(pMsg); break; case MSG_BATTLE_ARENA_EXERCISE_READY_STATUS: recvMsgBattleArenaExerciseReadyStatus(pMsg); break; case MSG_BATTLE_ARENA_PROMOTE: recvMsgBattleArenaPromote(pMsg); break; case IMSG_DECOMPOSE_RESULT: ProcMsgToUIWindow(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DECOMPOSITION, pMsg ); break; case MSG_PARTYMATCH_MEMBER: ProcMsgToUIWindow(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_PARTYMATCHING_REGISTER, pMsg ); break; case MSG_PARTYMATCH_LIST: ProcMsgToUIWindow(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_PARTYMATCHING, pMsg ); break;// 파티매칭 } } void SGameInterface::ViewWaitOpenURL() { _refreshOpenURL( m_pWaitOpenURL ); SAFE_DELETE( m_pWaitOpenURL ); } void SGameInterface::_refreshOpenURL( struct SMSG_OPEN_URL* pMsg ) { if( pMsg == NULL ) return; if( !pMsg->m_strURL.empty() ) { int nWinWidth = 620; int nWinHeight = 633; if( pMsg->width != 0 && pMsg->height != 0 ) { nWinWidth = pMsg->width; nWinHeight = pMsg->height; } std::vector< std::string > vToken; MsgSplit( pMsg->m_strURL.c_str(), vToken, L"|" ); if( vToken.empty() ) return; //PopUp 웹페이지 열기 SetOtherNavigate( TOGGLE_WINDOW::UIWINDOW_POPURL_TITLE, vToken[0].c_str(), nWinWidth, nWinHeight ); //두번째 것이 있으면, 타이틀이 처리 ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_POPURL_TITLE, pMsg ); HWND hWnd=g_hWnd; RECT rcWnd; GetClientRect(hWnd, &rcWnd); rcWnd.left = 0; rcWnd.top = 0; int nWidth = rcWnd.right - rcWnd.left; int nHeight = rcWnd.bottom - rcWnd.top; int nCenterX = (nWidth - nWinWidth)/2; int nCenterY = (nHeight - nWinHeight)/2; int nLeft = rcWnd.left + nCenterX; int nTop = rcWnd.top + nCenterY; SUIWnd* pWnd = GetUIWindow( TOGGLE_WINDOW::UIWINDOW_POPURL_TITLE ); if( pWnd ) pWnd->MovePos( nLeft, (nTop-20+1) ); bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_POPURL_TITLE, true, bFocus ); vToken.clear(); } } void SGameInterface::KillChatFocus() { SUIChattingWnd* pChattingWnd = (SUIChattingWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING ); if( NULL != pChattingWnd ) { if( !g_bUserCamMode ) //동영상 지원 카메라 모드 일때는, 채팅창에 포커스를 주지 않는다. { if( pChattingWnd->GetFocusChild() ) { //ChattingWnd 윈도우 자체가 포커스 날림 pChattingWnd->SetFocus( false ); pChattingWnd->SetFocusEdit( false ); } } } } void SGameInterface::add_ui_state( SMSG_STATE * pStateMsg ) { if( pStateMsg->state_code == 9004 ) { //시크루드 패스는 처리 안함. return; } bool bScaleDown = true; if(pStateMsg->data_owner == SMSG_STATE::OWNER_LOCAL_PLAYER ) bScaleDown = false; CHARWINDOW* pCWnd = getCharacterWnd( pStateMsg->handle ); if( pCWnd && pCWnd->pWnd ) { StateInfoEx * pStateInfo = GetTenacityDB().GetTenacityData( pStateMsg->state_code ); if( pStateInfo && pStateMsg->state_level ) { /// 2011.05.16 지속효과가 부여될 때 출력되는 메시지가 지속효과가 중첩이 가능인 경우 2회 중첩부터 지속효과 부여 메시지를 보여주지 않습니다. - prodongi if (0 < pStateInfo->reiteration_count && 1 < pStateMsg->state_level) return ; /// 2012.02.01 새로운 스킬이 아니면 메세지를 출력해 주지 않는다 - prodongi if (!pStateMsg->isNewState) return ; //기획팀 요청으로 size 1씩 줄임 if( pStateInfo->is_harmful ) { if( bScaleDown ) pCWnd->pWnd->AddState( CStringUtil::StringFormat( "<#090101><@e22831>%s", GetStringDB().GetString( pStateInfo->name_id ) ).c_str(), KUIControlEffectText::EFFECT_BAD, bScaleDown ); // pCWnd->pWnd->AddState( CStringUtil::StringFormat( "<#090101><@e22831>%s Lv%d", GetStringDB().GetString( pStateInfo->name_id ), pStateMsg->state_level ).c_str(), KUIControlEffectText::EFFECT_BAD, bScaleDown ); else //#090101/ 33pt/ 글로우#e22831 pCWnd->pWnd->AddState( CStringUtil::StringFormat( "<#090101><@e22831>%s", GetStringDB().GetString( pStateInfo->name_id ) ).c_str(), KUIControlEffectText::EFFECT_BAD, bScaleDown ); // pCWnd->pWnd->AddState( CStringUtil::StringFormat( "<#090101><@e22831>%s Lv%d", GetStringDB().GetString( pStateInfo->name_id ), pStateMsg->state_level ).c_str(), KUIControlEffectText::EFFECT_BAD, bScaleDown ); } else { if( bScaleDown ) pCWnd->pWnd->AddState( CStringUtil::StringFormat( "<#ffffff><@cbfcf4>%s", GetStringDB().GetString( pStateInfo->name_id ) ).c_str(), KUIControlEffectText::EFFECT_GOOD, bScaleDown ); // pCWnd->pWnd->AddState( CStringUtil::StringFormat( "<#ffffff><@cbfcf4>%s Lv%d", GetStringDB().GetString( pStateInfo->name_id ), pStateMsg->state_level ).c_str(), KUIControlEffectText::EFFECT_GOOD, bScaleDown ); else //#ffffff/ 33pt/ 글로우#cbfcf4 pCWnd->pWnd->AddState( CStringUtil::StringFormat( "<#ffffff><@cbfcf4>%s", GetStringDB().GetString( pStateInfo->name_id ) ).c_str(), KUIControlEffectText::EFFECT_GOOD, bScaleDown ); // pCWnd->pWnd->AddState( CStringUtil::StringFormat( "<#ffffff><@cbfcf4>%s Lv%d", GetStringDB().GetString( pStateInfo->name_id ), pStateMsg->state_level ).c_str(), KUIControlEffectText::EFFECT_GOOD, bScaleDown ); } } } } void SGameInterface::Process(DWORD dwTime, int nGameRef) { if (m_dwTime == dwTime) return; m_dwTime = dwTime; if (m_bIsActive_Display_Process) //SGameLogin 등에는 보낼 필요가 없다. { m_pDisplayInfo->Process(dwTime); } m_pUIWndManager->Process(dwTime); if (m_pLocalSignWnd) m_pLocalSignWnd->Process(dwTime); if (m_pEffectFocusWnd && m_pEffectFocusWnd->IsShow()) m_pEffectFocusWnd->Process(dwTime); if (m_pProtectSolutionWnd && m_pProtectSolutionWnd->IsShow()) m_pProtectSolutionWnd->Process(dwTime); if (m_pEndingWnd && m_pEndingWnd->IsShow()) m_pEndingWnd->Process(dwTime); if (m_pLoadingWnd && m_pLoadingWnd->IsShow()) m_pLoadingWnd->Process(dwTime); if (m_pFadeInOutEffectWnd && m_pFadeInOutEffectWnd->IsShow()) m_pFadeInOutEffectWnd->Process(dwTime); } void SGameInterface::Render( KViewportObject* pViewport, bool bLoading,bool isFront ) { if( !bLoading ) m_pUIWndManager->Render( pViewport,isFront ); //최상위 윈도우 랜더링 if( m_pEffectFocusWnd && m_pEffectFocusWnd->IsShow() ) m_pEffectFocusWnd->Render( pViewport ); if(m_pFadeInOutEffectWnd && m_pFadeInOutEffectWnd->IsShow() ) m_pFadeInOutEffectWnd->Render( pViewport ); if( m_pLoadingWnd && m_pLoadingWnd->IsShow() ) m_pLoadingWnd->Render( pViewport ); // 2010.06.11 - prodongi if (!bLoading) m_pUIWndManager->renderPostWnd(pViewport, isFront); if( m_pEndingWnd && m_pEndingWnd->IsShow() ) m_pEndingWnd->Render( pViewport ); if( m_pProtectSolutionWnd && m_pProtectSolutionWnd->IsShow() ) m_pProtectSolutionWnd->Render( pViewport ); if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::KR) { if( m_pKoreaWarringGrade_15 && m_pKoreaWarringGrade_15->IsShow() ) m_pKoreaWarringGrade_15->Render( pViewport, true ); if( m_pKoreaWarringGrade_18 && m_pKoreaWarringGrade_18->IsShow() ) m_pKoreaWarringGrade_18->Render( pViewport, true ); } } void SGameInterface::RelocationWnd() { //태스크바, 메인메뉴, 퀵슬롯 은 무조건 가장 뒤로 보내기 2009.11.24 sfreer // prodongi UIWINDOW_HQUICKSLOT가 UIWINDOW_MAINMENU보다 먼저 호출 되어야 한다, 메뉴 버튼이 QUICKSLOT을 가리기 때문에 m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_LIST_MOVE_BACK( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MAINMENU ) ); //m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_LIST_MOVE_BACK( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_INSTANCE_TASKBAR_ENTRANCE ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_LIST_MOVE_BACK( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_TASKBAR ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_LIST_MOVE_BACK( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_HQUICKSLOT ) ); //m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_LIST_MOVE_BACK( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MAINMENU_SUB ) ); // prodongi UIWINDOW_HQUICKSLOT가 UIWINDOW_MAINMENU보다 먼저 호출 되어야 한다, 메뉴 버튼이 QUICKSLOT을 가리기 때문에 //m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_LIST_MOVE_BACK( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_HQUICKSLOT ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_LIST_MOVE_FORCE_BACK( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ARENA_GUIDE_TOOLTIP ) ); } void SGameInterface::RefeshAllWndPos() { // 각 인터페이스 매니저 세팅 //servantes 2010.11.30 SUIWnd* pWnd = NULL; KSortVector< class SUIWnd* >::iterator it; //servantes 2010.11.24 for ( it = m_sortUIWindowMap.begin(); it != m_sortUIWindowMap.end(); ++it ) { pWnd = (*it); if( pWnd != NULL ) pWnd->LimitMoveWnd(); } SUIMainMenuWnd* pMainMenuWnd = (SUIMainMenuWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINMENU ); SUIMainMenuSubWnd* pMainMenuSubWnd = (SUIMainMenuSubWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINMENU_SUB ); SUIChattingWnd* pChatWnd = (SUIChattingWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING ); SUIChattingOptionWnd* pChatOptionWnd = (SUIChattingOptionWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CHAT_OPTION ); SUIMinimapWnd* pMinimapWnd = (SUIMinimapWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP ); SUITargetWnd_Player* pTargetWnd_Player = (SUITargetWnd_Player* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_PLAYER ); SUITargetWnd_Creature* pTargetWnd_Creature = (SUITargetWnd_Creature* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_CREATURE ); SUITargetWnd_Npc* pTargetWnd_Npc = (SUITargetWnd_Npc* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_NPC ); SUITargetWnd_Prop* pTargetWnd_Prop = (SUITargetWnd_Prop* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_PROP ); SUITargetStateWnd* pTargetStateWnd = (SUITargetStateWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_TARGET_STATE ); SUITaskBarWnd* pTaskBarWnd = (SUITaskBarWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_TASKBAR ); SUIHQuickSlotWnd* pHQuickWnd = (SUIHQuickSlotWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT ); SUIPetCommandWnd* pPetCmdWnd = (SUIPetCommandWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_PET_COMMAND ); // {2.1.2.4.3} SUIHuntaHolicLobbyWnd* pHuntaHolicLobbyWnd = (SUIHuntaHolicLobbyWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_LOBBY ); // #2.1.2.11.1 SUIHuntaHolicCreateInstanceWnd* pHuntaHolicCreateInstanceWnd = (SUIHuntaHolicCreateInstanceWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_CREATE_INSTANCE ); // SUIHuntaHolicConfirmPasswordWnd* pHuntaHolicConfirmPasswordWnd = (SUIHuntaHolicConfirmPasswordWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_CONFIRM_PASSWORD ); // SUIHuntaHolicInstanceWnd* pHuntaHolicInstanceWnd = (SUIHuntaHolicInstanceWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_INSTANCE ); // SUIHuntaHolicScoreBoardWnd* pHuntaHolicScoreBoardWnd = (SUIHuntaHolicScoreBoardWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_SCOREBOARD ); // SUIHuntaHolicResultWnd* pHuntaHolicResultWnd = (SUIHuntaHolicResultWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_RESULT ); // SUIChangeNameWnd* pChangeNameWnd = (SUIChangeNameWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CHANGE_NAME ); // sonador #2.1.24 SUIBadgeWnd* pLogBookWnd = (SUIBadgeWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_BADGE ); // hunee 2009-03-02 /// 2011.07.05 - prodongi SUIPartyWndMgr* pMessengerWnd = (SUIPartyWndMgr* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY ); SUIInstanceTaskbarEntranceWnd* pInstanceTaskbarEntranceWnd = (SUIInstanceTaskbarEntranceWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_INSTANCE_TASKBAR_ENTRANCE ); SUIInstanceEntranceWnd* pInstanceEntranceWnd = (SUIInstanceEntranceWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_INSTANCE_ENTRANCE ); SUIMainFrameWnd* pMainFrameWnd = (SUIMainFrameWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINFRAME ); SUIStateHEffectWnd* pStateHEffectWnd = (SUIStateHEffectWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_STATE_H_EFFECT ); if( NULL != pMainMenuSubWnd && NULL != pMainMenuWnd && NULL != pChatWnd && NULL != pChatOptionWnd && NULL != pHQuickWnd && NULL != pTaskBarWnd ) { pChatOptionWnd->MovePos( 0, KUIWndManager::GetResolution().cy - pChatOptionWnd->GetRect().GetHeight() - pMainMenuWnd->GetRect().GetHeight() ); int nHalfX = (int)KUIWndManager::GetResolution().cx/(int)2; int nHalfTaskX = pTaskBarWnd->GetRect().GetWidth() / 2; pTaskBarWnd->MovePos ( nHalfX - nHalfTaskX, KUIWndManager::GetResolution().cy - pTaskBarWnd->GetRect().GetHeight() ); pHQuickWnd->MovePos ( nHalfX - nHalfTaskX, pTaskBarWnd->GetRect().top - pHQuickWnd->GetRect().GetHeight() ); //채팅창은 퀵슬롯 이동시 메시지를 전달하는데 이때 그 메시지로 분석하여 채팅창 내부에서 자동 위치 변경이 된다. { int nhdw = (KUIWndManager::GetResolution().cx - 1024)/2; int ndy = (KUIWndManager::GetResolution().cy - 768); /// 2012.05.03 위치 조정 - prodongi pMainMenuWnd->MovePos(866+nhdw, KUIWndManager::GetResolution().cy - pMainMenuWnd->GetRect().GetHeight()); pMainMenuSubWnd->MovePos(866+nhdw, KUIWndManager::GetResolution().cy - pMainMenuSubWnd->GetRect().GetHeight() - pMainMenuWnd->GetRect().GetHeight()); } /// pMainMenuWnd 위치 조절 후에 호출 되어야 한다 if(pInstanceTaskbarEntranceWnd) { pInstanceTaskbarEntranceWnd->syncPos(); /// 2012.05.03 - proodngi } } if( pMainFrameWnd && pStateHEffectWnd ) pStateHEffectWnd->MovePos( pMainFrameWnd->GetRect().GetWidth() - 2, 0 ); if( pMinimapWnd ) pMinimapWnd->MovePos( KUIWndManager::GetResolution().cx - pMinimapWnd->GetRect().GetWidth(), 0 ); if( pTargetWnd_Player ) { int nPosX( KUIWndManager::GetResolution().cx * 0.5f ); pTargetWnd_Player->MovePos( nPosX, 0 ); if( pTargetStateWnd ) { KRect rtTargetPlayer( pTargetWnd_Player->GetRect() ); KRect rtTargetState( pTargetStateWnd->GetRect() ); int nOffset( ( rtTargetPlayer.GetWidth() - rtTargetState.GetWidth() ) / 2 ); pTargetStateWnd->MovePos( rtTargetPlayer.left + nOffset, rtTargetPlayer.bottom ); } } if( pTargetWnd_Creature ) { int nPosX( KUIWndManager::GetResolution().cx * 0.5f ); pTargetWnd_Creature->MovePos( nPosX, 0 ); if( pTargetStateWnd ) { KRect rtTargetCreature( pTargetWnd_Creature->GetRect() ); KRect rtTargetState( pTargetStateWnd->GetRect() ); int nOffset( ( rtTargetCreature.GetWidth() - rtTargetState.GetWidth() ) / 2 ); pTargetStateWnd->MovePos( rtTargetCreature.left + nOffset, rtTargetCreature.bottom ); } } if( pTargetWnd_Npc ) { int nPosX( KUIWndManager::GetResolution().cx * 0.5f ); pTargetWnd_Npc->MovePos( nPosX, 0 ); } if( pTargetWnd_Prop ) { int nPosX( KUIWndManager::GetResolution().cx * 0.5f ); pTargetWnd_Npc->MovePos( nPosX, 0 ); } if( pPetCmdWnd ) // {2.1.2.4.3} { pPetCmdWnd->MovePos( KUIWndManager::GetResolution().width - pPetCmdWnd->GetRect().GetWidth(), KUIWndManager::GetResolution().height - pPetCmdWnd->GetRect().GetHeight() - 120 ); } // #2.1.2.11.1 if( pHuntaHolicLobbyWnd ) { pHuntaHolicLobbyWnd->MovePos( ( KUIWndManager::GetResolution().cx / 2 - ( pHuntaHolicLobbyWnd->GetRect().GetWidth() / 2 ) ), ( KUIWndManager::GetResolution().cy / 2 - ( pHuntaHolicLobbyWnd->GetRect().GetHeight() / 2 ) ) ); } if( pHuntaHolicCreateInstanceWnd ) { pHuntaHolicCreateInstanceWnd->MovePos( ( KUIWndManager::GetResolution().cx / 2 - ( pHuntaHolicCreateInstanceWnd->GetRect().GetWidth() / 2 ) ), ( KUIWndManager::GetResolution().cy / 2 - ( pHuntaHolicCreateInstanceWnd->GetRect().GetHeight() / 2 ) ) ); } if( pHuntaHolicConfirmPasswordWnd ) { pHuntaHolicConfirmPasswordWnd->MovePos( ( KUIWndManager::GetResolution().cx / 2 - ( pHuntaHolicConfirmPasswordWnd->GetRect().GetWidth() / 2 ) ), ( KUIWndManager::GetResolution().cy / 2 - ( pHuntaHolicConfirmPasswordWnd->GetRect().GetHeight() / 2 ) ) ); } if( pHuntaHolicInstanceWnd ) { pHuntaHolicInstanceWnd->MovePos( KUIWndManager::GetResolution().cx - 284, KUIWndManager::GetResolution().cy - 262 ); } if( pHuntaHolicScoreBoardWnd ) { pHuntaHolicScoreBoardWnd->MovePos( KUIWndManager::GetResolution().cx - 163, KUIWndManager::GetResolution().cy - 301 ); } if( pHuntaHolicResultWnd ) { pHuntaHolicResultWnd->MovePos( KUIWndManager::GetResolution().cx / 2 - 204, KUIWndManager::GetResolution().cy / 2 - 200 ); } if( pChangeNameWnd ) // sonador #2.1.24 { pChangeNameWnd->MovePos( ( KUIWndManager::GetResolution().cx / 2 - ( pChangeNameWnd->GetRect().GetWidth() / 2 ) ), ( KUIWndManager::GetResolution().cy / 2 - ( pChangeNameWnd->GetRect().GetHeight() / 2 ) ) ); } if( pInstanceEntranceWnd ) { pInstanceEntranceWnd->MovePos( ( KUIWndManager::GetResolution().cy / 2 - ( pInstanceEntranceWnd->GetRect().GetWidth() / 2 ) ), ( KUIWndManager::GetResolution().cy / 2 - ( pInstanceEntranceWnd->GetRect().GetHeight() / 2 ) ) ); } SetWindowPos( TRUE ); //servantes 2010.12.10 : TRUE 추가 if (pMessengerWnd) { const int c_nTitleSize = 20; m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_PARTY_MENU, pMessengerWnd->GetRect().right, pMessengerWnd->GetRect().top ) ); } //공지사항 남아있는 버그 임시 수정 2009.09.17 sfreer if( IsUIWindowOpened( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERNOTICE ) ) { m_pGameManager->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERNOTICE, false) ); } SUIArenaMenuWnd* arenaMenuWnd = dynamicCast(GetUIWindow( TOGGLE_WINDOW::UIWINDOW_ARENA_MENU)); if (arenaMenuWnd) { arenaMenuWnd->syncPos(); } } SUIWnd* SGameInterface::CreateNotifyWnd() { const KSize c_sizNotifyWnd = KSize( 320, 64 ); const KPoint c_ptNotifyWnd = KPoint( 352, 352 ); SUINotifyWnd* pWndNotify = new SUINotifyWnd( m_pGameManager ); pWndNotify->Create( KUIWND_CREATE_ARG( "genwnd", "notify", " ", KRect( c_ptNotifyWnd, c_sizNotifyWnd ), KSTYLE_NORESIZE | KSTYLE_NOSTATUSBAR | KSTYLE_NOMINIMIZE | KSTYLE_NOCLOSE | KSTYLE_VERTICAL_REPEAT, 0, NULL, "frame", c_szDEF_SPR_NAME, m_pUIWndManager ) ); m_pUIWndManager->CreateControl( KUIWND_CREATE_ARG( "static", "staticText", "캐릭터 정보를 요청하는 중입니다.", KRect( c_ptNotifyWnd, c_sizNotifyWnd ), 0, 0, pWndNotify, "", c_szDEF_SPR_NAME, m_pUIWndManager ) ); pWndNotify->SetWindowID( TOGGLE_WINDOW::UIWINDOW_NOTIFY ); return pWndNotify; } SUIWnd* SGameInterface::CreateEffectWnd() { const KSize c_size = KSize( KUIWndManager::GetResolution().cx, KUIWndManager::GetResolution().cy ); const KPoint c_pt = KPoint( 0, 0 ); SUIEffectWnd* pWndEffect = new SUIEffectWnd( m_pGameManager ); pWndEffect->Create( KUIWND_CREATE_ARG( "genwnd", "effect", " ", KRect( c_pt, c_size ), KSTYLE_NORESIZE | KSTYLE_NOSTATUSBAR | KSTYLE_NOMINIMIZE | KSTYLE_NOCLOSE | KSTYLE_VERTICAL_REPEAT, KFLAG_NO_GET_MESSAGE|KFLAG_NO_GET_FOCUS, NULL, "frame", c_szDEF_SPR_NAME, m_pUIWndManager ) ); pWndEffect->CreateControls(m_pUIWndManager); pWndEffect->SetWindowID( TOGGLE_WINDOW::UIWINDOW_EFFECT_FOCUS ); return pWndEffect; } SUIWnd* SGameInterface::CreateProtectSolutionWnd() { const KSize c_size = KSize( KUIWndManager::GetResolution().cx, KUIWndManager::GetResolution().cy ); const KPoint c_pt = KPoint( 0, 0 ); SUIProtectSolutionWnd* pWnd = new SUIProtectSolutionWnd( m_pGameManager ); pWnd->Create( KUIWND_CREATE_ARG( "genwnd", "protect", " ", KRect( c_pt, c_size ), KSTYLE_NORESIZE | KSTYLE_NOSTATUSBAR | KSTYLE_NOMINIMIZE | KSTYLE_NOCLOSE | KSTYLE_VERTICAL_REPEAT, 0, NULL, "frame", c_szDEF_SPR_NAME, m_pUIWndManager ) ); pWnd->CreateControls(m_pUIWndManager); pWnd->SetWindowID( TOGGLE_WINDOW::UIWINDOW_PROTECTSOLUTION ); return pWnd; } SUIWnd* SGameInterface::CreateEndingWnd() { const KSize c_size = KSize( KUIWndManager::GetResolution().cx, KUIWndManager::GetResolution().cy ); const KPoint c_pt = KPoint( 0, 0 ); SUIEndingWnd* pWndEnding = new SUIEndingWnd( m_pGameManager ); pWndEnding->Create( KUIWND_CREATE_ARG( "genwnd", "ending", " ", KRect( c_pt, c_size ), KSTYLE_NORESIZE | KSTYLE_NOSTATUSBAR | KSTYLE_NOMINIMIZE | KSTYLE_NOCLOSE | KSTYLE_VERTICAL_REPEAT, 0, NULL, "frame", c_szDEF_SPR_NAME, m_pUIWndManager ) ); pWndEnding->CreateControls(m_pUIWndManager); pWndEnding->SetWindowID( TOGGLE_WINDOW::UIWINDOW_ENDING ); return pWndEnding; } SUIWnd* SGameInterface::CreateLoadingWnd() { const KSize c_size = KSize( KUIWndManager::GetResolution().cx, KUIWndManager::GetResolution().cy ); const KPoint c_pt = KPoint( 0, 0 ); SUILoadingWnd* pWndLoading = new SUILoadingWnd( m_pGameManager ); pWndLoading->Create( KUIWND_CREATE_ARG( "genwnd", "loading", " ", KRect( c_pt, c_size ), KSTYLE_NORESIZE | KSTYLE_NOSTATUSBAR | KSTYLE_NOMINIMIZE | KSTYLE_NOCLOSE | KSTYLE_VERTICAL_REPEAT, 0, NULL, "frame", c_szDEF_SPR_NAME, m_pUIWndManager ) ); pWndLoading->CreateControls(m_pUIWndManager); pWndLoading->SetWindowID( TOGGLE_WINDOW::UIWINDOW_LOADING ); class IntervalRandomMessageSelector : public SUILoadingWnd::ILoadingMessageSelector { public: explicit IntervalRandomMessageSelector( int _min, int _max ) : min( _min ) , max( _max ) { if( min > max ) std::swap( min, max ); } virtual std::string selectMessage() { int stringIndex = min + rand() % ( max - min + 1 ); return CStringUtil::StringFormat( "%s", GetStringDB().GetString( stringIndex ) ); } private: int min; int max; }; #ifdef _COUNTRY_CN_ pWndLoading->SetMessageSelector( new IntervalRandomMessageSelector( 4001, 4105 ) ); #else pWndLoading->SetMessageSelector( new IntervalRandomMessageSelector( 881, 890) ); #endif #ifdef _KUI_INVALIDATION pWndLoading->ActivateImageCache( false ); #endif return pWndLoading; } SUIWnd* SGameInterface::CreateNoticeWnd() { const KSize c_size = KSize( WIN_NOTICE::c_nNoticeWidth, WIN_NOTICE::c_nNoticeHeight ); const KPoint c_pt = KPoint( KUIWndManager::GetResolution().cx/2 - c_size.width/2, KUIWndManager::GetResolution().cy/2 - c_size.height/2 ); SUINoticeWnd* pWndNotice = new SUINoticeWnd( m_pGameManager ); pWndNotice->Create( KUIWND_CREATE_ARG( "genwnd", "notice", " ", KRect( c_pt, c_size ), KSTYLE_NORESIZE | KSTYLE_NOSTATUSBAR | KSTYLE_NOMINIMIZE | KSTYLE_NOCLOSE | KSTYLE_VERTICAL_REPEAT, 0, NULL, "frame", c_szDEF_SPR_NAME, m_pUIWndManager ) ); pWndNotice->CreateControls(m_pUIWndManager); pWndNotice->SetWindowID( TOGGLE_WINDOW::UIWINDOW_NOTICE ); return pWndNotice; } SUIWnd* SGameInterface::CreateChinaWarringWnd() { KPoint c_pt( 0, KUIWndManager::GetResolution().height - WIN_CHINAWARRING::c_nChinawarringHeight ); const KSize c_size = KSize( WIN_CHINAWARRING::c_nChinawarringWidth, WIN_CHINAWARRING::c_nChinawarringHeight ); //SUIServerListWnd* pLoginWnd = (SUIServerListWnd*)( GetUIWindow(TOGGLE_WINDOW::UIWINDOW_LOGIN) ); //if( pLoginWnd ) //{ // c_pt.x = pLoginWnd->GetRect().right + 45; // c_pt.y = pLoginWnd->GetRect().top; //} SUIChinaWarringWnd* pWndChinaWarring = new SUIChinaWarringWnd( m_pGameManager ); pWndChinaWarring->Create( KUIWND_CREATE_ARG( "genwnd", "chinawarring", " ", KRect( c_pt, c_size ), KSTYLE_NORESIZE | KSTYLE_NOSTATUSBAR | KSTYLE_NOMINIMIZE | KSTYLE_NOCLOSE | KSTYLE_VERTICAL_REPEAT, 0, NULL, "frame", c_szDEF_SPR_NAME, m_pUIWndManager ) ); pWndChinaWarring->CreateControls(m_pUIWndManager); pWndChinaWarring->SetWindowID( TOGGLE_WINDOW::UIWINDOW_CHINAWARRING ); return pWndChinaWarring; } SUIWnd* SGameInterface::CreateWebGameSutDownWnd() { KPoint c_pt(0,0); const KSize c_size = KSize( 100, 25 ); SUIServerListWnd* pLoginWnd = (SUIServerListWnd*)( GetUIWindow(TOGGLE_WINDOW::UIWINDOW_LOGIN) ); if( pLoginWnd ) { c_pt.x = 860; c_pt.y = 695; } SUIWebGameSutDownWnd* pWndWebGameSutDown = new SUIWebGameSutDownWnd( m_pGameManager ); pWndWebGameSutDown->Create( KUIWND_CREATE_ARG( "genwnd", "webgamesutdown", " ", KRect( c_pt, c_size ), KSTYLE_NORESIZE | KSTYLE_NOSTATUSBAR | KSTYLE_NOMINIMIZE | KSTYLE_NOCLOSE | KSTYLE_VERTICAL_REPEAT, 0, NULL, "frame", c_szDEF_SPR_NAME, m_pUIWndManager ) ); pWndWebGameSutDown->CreateControls(m_pUIWndManager); pWndWebGameSutDown->SetWindowID( TOGGLE_WINDOW::UIWINDOW_WEBGAMESUTDOWN ); return pWndWebGameSutDown; } SUIWnd* SGameInterface::CreateDevOutputWnd() { const KPoint c_ptWnd = KPoint( 0, 200 ); const KSize c_sizWnd = KSize( 300, 80 ); SUIDevOutputWnd* pWndDevOutput = new SUIDevOutputWnd( m_pGameManager ); pWndDevOutput->Create( KUIWND_CREATE_ARG( "genwnd", "devOutput", "", KRect( c_ptWnd, c_sizWnd ), KSTYLE_NORESIZE | KSTYLE_NOSTATUSBAR | KSTYLE_NOTOPFRAME | KSTYLE_NOCLOSE | KSTYLE_NOMINIMIZE | KSTYLE_VERTICAL_REPEAT | KSTYLE_MOVE_BY_CUSTOM, 0, NULL, "frame", c_szDEF_SPR_NAME, m_pUIWndManager ) ); m_pUIWndManager->CreateControl( KUIWND_CREATE_ARG( "static", "staticFPS", "", KRect( c_ptWnd + KPoint( 16, 32 ), KSize( 290, 12 ) ), 0, 0, pWndDevOutput, "", c_szDEF_SPR_NAME, m_pUIWndManager ) ); m_pUIWndManager->CreateControl( KUIWND_CREATE_ARG( "static", "staticPosition", "", KRect( c_ptWnd + KPoint( 16, 44 ), KSize( 290, 12 ) ), 0, 0, pWndDevOutput, "", c_szDEF_SPR_NAME, m_pUIWndManager ) ); if( pWndDevOutput ) { pWndDevOutput->SetCustomMovingRect( KRect(0,0,50,20) ); pWndDevOutput->SetWindowID( TOGGLE_WINDOW::UIWINDOW_DEVOUTPUT ); } return pWndDevOutput; } SUIWnd* SGameInterface::CreateFadeInOutWnd() { const KSize c_size = KSize( KUIWndManager::GetResolution().cx, KUIWndManager::GetResolution().cy ); const KPoint c_pt = KPoint( 0, 0 ); SUIFadeInOutEffectWnd* pFadeInOutEffect = new SUIFadeInOutEffectWnd( m_pGameManager ); pFadeInOutEffect->Create( KUIWND_CREATE_ARG( "genwnd", "fadeinout", " ", KRect( c_pt, c_size ), KSTYLE_NORESIZE | KSTYLE_NOSTATUSBAR | KSTYLE_NOMINIMIZE | KSTYLE_NOCLOSE | KSTYLE_VERTICAL_REPEAT, KFLAG_NO_GET_MESSAGE|KFLAG_NO_GET_FOCUS, NULL, "frame", c_szDEF_SPR_NAME, m_pUIWndManager ) ); pFadeInOutEffect->CreateControls( m_pUIWndManager ); return pFadeInOutEffect; } SUIWnd* SGameInterface::CreateTestWnd() { const KPoint c_ptWnd = KPoint( 0, 400 ); const KSize c_sizWnd = KSize( 300, 180 ); SUITestWnd* pWndTest = new SUITestWnd( m_pGameManager ); pWndTest->Create( KUIWND_CREATE_ARG( "genwnd", "testWnd", "", KRect( c_ptWnd, c_sizWnd ), KSTYLE_NORESIZE | KSTYLE_NOSTATUSBAR | KSTYLE_NOTOPFRAME | KSTYLE_NOCLOSE | KSTYLE_NOMINIMIZE | KSTYLE_VERTICAL_REPEAT | KSTYLE_MOVE_BY_CUSTOM, 0, NULL, "frame", c_szDEF_SPR_NAME, m_pUIWndManager ) ); pWndTest->CreateControls( m_pUIWndManager ); return pWndTest; } class KUIWndManager* SGameInterface::GetWndManager() { return m_pUIWndManager; } bool SGameInterface::IsUIWindowOpened( int nWindowID ) { SUIWnd* pWnd = getSUIWnd( nWindowID ); if( pWnd ) return pWnd->IsShow(); else return false; } SUIWnd* SGameInterface::GetUIWindow( int nWindowID ) { return getSUIWnd( nWindowID ); } void SGameInterface::OnToggleUIWindow( int nWindowID ) { SUIWnd* pWnd = getSUIWnd( nWindowID ); if( pWnd ) { bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; pWnd->IsShow() ? m_pUIWndManager->RemoveWnd( pWnd ) : m_pUIWndManager->AddWnd( pWnd, bFocus ); pWnd->SetShow( !pWnd->IsShow() ); pWnd->OnNotifyUIWindowOpen( pWnd->IsShow() ); RefreshManuMenuButtonToggle( nWindowID, pWnd->IsShow() ); // 2014-05-27 kkr, esc UpdateShowWindowList( pWnd ); } } void SGameInterface::OnUpdateWindow( int nWindowID ) { SUIWnd* pWnd = getSUIWnd( nWindowID ); if( pWnd ) { pWnd->OnNotifyUIWindowOpen( pWnd->IsShow() ); RefreshManuMenuButtonToggle( nWindowID, pWnd->IsShow() ); } } void SGameInterface::OnUpdateState( int nWindowID ) { SUIWnd* pWnd = getSUIWnd( nWindowID ); if( pWnd ) { if( pWnd->IsShow() ) { pWnd->OnNotifyUIWindowOpen( pWnd->IsShow() ); RefreshManuMenuButtonToggle( nWindowID, pWnd->IsShow() ); } } } bool SGameInterface::IsOpenDynamicWnd() { return !m_vDynamicWndList.empty(); } void SGameInterface::alldelDynamicWnd() { for( unsigned int i(0); m_vDynamicWndList.size()>i; i++ ) { SUIWnd* pWnd = m_vDynamicWndList[i].pWnd; pWnd->SetShow( false ); m_pUIWndManager->RemoveWnd( pWnd ); m_pUIWndManager->MouseFocusWndRemoveCheck( pWnd ); delete pWnd; } m_vDynamicWndList.erase( m_vDynamicWndList.begin(), m_vDynamicWndList.end() ); } void SGameInterface::delDynamicWnd( int nDynamicWndID ) { for( unsigned int i(0); m_vDynamicWndList.size()>i; i++ ) { if( m_vDynamicWndList[i].nDynamicID == nDynamicWndID ) { SUIWnd* pWnd = m_vDynamicWndList[i].pWnd; pWnd->SetShow( false ); m_pUIWndManager->RemoveWnd( pWnd ); m_pUIWndManager->MouseFocusWndRemoveCheck( pWnd ); delete pWnd; m_vDynamicWndList.erase( m_vDynamicWndList.begin()+i); return; } } } void SGameInterface::addDynamicWnd( int nDynamicID, SUIWnd* pWnd ) { if( pWnd ) { DYNAMIC_WND_INFO dynamic_wnd_info; dynamic_wnd_info.nDynamicID = nDynamicID; dynamic_wnd_info.pWnd = pWnd; pWnd->SetShow( true ); m_pUIWndManager->AddWnd( pWnd ); pWnd->OnNotifyUIWindowOpen( pWnd->IsShow() ); m_vDynamicWndList.push_back( dynamic_wnd_info ); } } void SGameInterface::OnShowUIWindow( int nWindowID, bool bShow, bool bFocus ) { SUIWnd* pWnd = getSUIWnd( nWindowID ); if( !pWnd ) return; if( pWnd->IsShow() == bShow ) return; pWnd->IsShow() ? m_pUIWndManager->RemoveWnd( pWnd ) : m_pUIWndManager->AddWnd( pWnd, bFocus ); pWnd->SetShow( bShow ); pWnd->OnNotifyUIWindowOpen( pWnd->IsShow() ); RefreshManuMenuButtonToggle( nWindowID, pWnd->IsShow() ); // 2014-05-27 kkr, esc UpdateShowWindowList( pWnd ); } void SGameInterface::OnShowUIWindowModal( int nWindowID, bool bShow ) { SUIWnd* pWnd = getSUIWnd( nWindowID ); if( !pWnd ) return; if( pWnd->IsShow() == bShow ) return; pWnd->IsShow() ? m_pUIWndManager->RemoveModalWnd( pWnd ) : m_pUIWndManager->AddModalWnd( pWnd ); pWnd->SetShow( bShow ); pWnd->OnNotifyUIWindowOpen( pWnd->IsShow() ); } void SGameInterface::ProcMsgToUIWindow( int nWindowID, SGameMessage* pMsg ) { SUIWnd* pWnd = GetUIWindow( nWindowID ); if( NULL != pWnd ) pWnd->ProcMsgAtStatic( pMsg ); // 2011.10.24 : servantes : 가독성을 위해 코드 수정 } //서버와의 접속이 종료 되었습니다. 메시지 수정 //2009-02-24: hunee extern char g_disconnectId; // 메시지 박스 KUIMsgControl* SGameInterface::OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXTYPE Type, SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID MsgBoxID, bool bClose, int nTextID, const std::string& rText, DWORD dwWaitTime/* = 0*/, bool bModal, const char* lpValue ) { std::string strMsgID = GetMsgBoxID( MsgBoxID ); if( strMsgID == "err" ) return NULL; if( MsgBoxID == SIMSG_REQ_OPEN_MSGBOX::MSGBOX_BATTLE_ACCEPT ) { if( bClose ) { CloseMessageBox( strMsgID ); m_bBattleAccept = false; return NULL; } else { m_pUIWndManager->CloseAllMessageBox(); m_bBattleAccept = true; } /*{ //SUIWnd* pWnd = (SUIWnd*)GetUIWindow( MsgBoxID ); //pWnd->SetShow(false); bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; OnShowUIWindow( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_BATTLE_ACCEPT, false, bFocus ); return; }*/ } else { if( bClose ) { m_pUIWndManager->CloseAllMessageBox(); } } //1:1 대련 //2009-02-26: hunee if (MsgBoxID == SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOCONNECTSERVER) { if( bClose ) CloseMessageBox( strMsgID ); } else { if( bClose ) { m_pUIWndManager->CloseAllMessageBox(); } } if( MsgBoxID == SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOCONNECTSERVER ) { m_pUIWndManager->CloseAllMessageBox(); CloaseAllSecurityWindows(); } else if( MsgBoxID == SIMSG_REQ_OPEN_MSGBOX::MSGBOX_EXITGAME ) CloaseAllSecurityWindows(); if( m_pUIWndManager->IsExistMessageBox( strMsgID.c_str() ) ) return NULL; KMsgBoxBtnInfo BtnInfo; if( Type == SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK ) { std::string strCaption = "<#000000>"; strCaption += S(11); BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDOK", strCaption.c_str(), 2 ) ); } else if( Type == SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKCANCEL ) { std::string strCaptionOk = "<#000000>"; strCaptionOk += S(11); std::string strCaptionCancel = "<#000000>"; strCaptionCancel += S(12); /*BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDOK" , strCaptionOk.c_str(), 2 ) ); BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDCANCEL", strCaptionCancel.c_str(), 2 ) );*/ BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDCANCEL", strCaptionCancel.c_str(), 2 ) ); BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDOK" , strCaptionOk.c_str(), 2 ) ); } else if( Type == SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CANCEL ) { std::string strCaptionCancel = "<#000000>"; strCaptionCancel += S(12); BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDCANCEL", strCaptionCancel.c_str(), 2 ) ); } else if ( Type == SIMSG_REQ_OPEN_MSGBOX::MSGBOX_CONTINUECANCEL ) { std::string strCaptionContinue = "<#000000>"; strCaptionContinue += S(6407); std::string strCaptionCancel = "<#000000>"; strCaptionCancel += S(12); /*BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDOK" , strCaptionContinue.c_str(), 2 ) ); BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDCANCEL", strCaptionCancel.c_str(), 2 ) );*/ BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDCANCEL", strCaptionCancel.c_str(), 2 ) ); BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDOK" , strCaptionContinue.c_str(), 2 ) ); } else if ( Type == SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OKINFO ) { std::string strCaptionOK = "<#000000>"; strCaptionOK += S(11); std::string strCaptionInfo = "<#000000>"; strCaptionInfo += S(3275); /*BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDOK" , strCaptionOK.c_str(), 2 ) ); BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDCANCEL", strCaptionInfo.c_str(), 4 ) );*/ BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDCANCEL", strCaptionInfo.c_str(), 4 ) ); BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDOK" , strCaptionOK.c_str(), 2 ) ); } // 2011.07.06 - servantes else if( Type == SIMSG_REQ_OPEN_MSGBOX::MSGBOX_YESNO ) { std::string strCaptionYes = "<#000000>"; strCaptionYes += S(21); std::string strCaptionNo = "<#000000>"; strCaptionNo += S(22); BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDNO", strCaptionNo.c_str(), 2 ) ); BtnInfo.AddBtn( MSGBOX_BTN_INFO_ITEM( true, "IDYES", strCaptionYes.c_str(), 2 ) ); } //서버와의 접속이 종료 되었습니다. 메시지 수정 //2009-02-24 : hunee int nDisID = nTextID; if (nTextID == SYS_MSG_SERVER_DISCONNECT) { switch (g_disconnectId) { case TS_SC_DISCONNECT_DESC::DISCONNECT_TYPE_ANOTHER_LOGIN: //동일 계정으로 로그인하여 접속을 종료합니다. nDisID = 1645; break; case TS_SC_DISCONNECT_DESC::DISCONNECT_TYPE_DUPLICATED_LOGIN: //결제기간이 만료되어 접속을 종료합니다. nDisID = 1646; break; case TS_SC_DISCONNECT_DESC::DISCONNECT_TYPE_BILLING_EXPIRED: //게임 중독방지 제한으로 접속을 종료합니다. nDisID = 1647; break; case TS_SC_DISCONNECT_DESC::DISCONNECT_TYPE_GAME_ADDICTION: //일시적 시스템 장애로 접속을 종료합니다. case TS_SC_DISCONNECT_DESC::DISCONNECT_TYPE_DB_ERROR: nDisID = 1648; break; case TS_SC_DISCONNECT_DESC::DISCONNECT_TYPE_ANTI_HACK: //보안 솔루션으로 인해 접속을 종료합니다. nDisID = 1649; break; case TS_SC_DISCONNECT_DESC::DISCONNECT_TYPE_SCRIPT: default: nDisID = SYS_MSG_SERVER_DISCONNECT; break; } } std::string strMsg; if( rText.size() <= 0 ) strMsg = GetStringDB().GetString( nDisID ); else strMsg = rText; KUIMsgControl* msgControl; if( g_bServerListSeen ) msgControl = m_pUIWndManager->MessageBox( strMsgID.c_str(), "", strMsg.c_str(), BtnInfo, this, dwWaitTime, bModal, NULL, 642 ); else msgControl = m_pUIWndManager->MessageBox( strMsgID.c_str(), "", strMsg.c_str(), BtnInfo, this, dwWaitTime, bModal, lpValue ); return msgControl; } void SGameInterface::CloseMessgeBoxWithID(SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID MsgBoxID) { std::string strID = GetMsgBoxID(MsgBoxID); CloseMessageBox(strID); } // 2012. 2. 21 - marine // if-else if 구문에 걸린 창들이 열려있는 경우 true 리턴 bool SGameInterface::IsAgainstUiOpen() { bool bRet = false; if( m_pGameManager->IsShow(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_TRADE) ) // 거래중 bRet = true; else if( m_pGameManager->IsShow(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_STORE_HOST) ) // 노점 bRet = true; else if( m_pGameManager->IsShow(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SHOP) ) // 상점 bRet = true; else if( m_pGameManager->IsShow(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_AUCTION) ) // 경매장 bRet = true; else bRet = false; if( bRet ) m_pGameManager->ProcMsgAtStatic( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID::MSGBOX_GENERAL, S(228), true ) ); // 지금은할수없습니다. return bRet; } void SGameInterface::CloseAgainstUi() { // 2012. 2. 21 - marine isAgainstUiOpen 하고 같은 창 사용 m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DESTRUCTION, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_REPAIR, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ITEMCOMBINE, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_UPGRADE, false ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DECOMPOSITION, false ) ); } void SGameInterface::CloseMessageBox( const std::string& rMsgBoxID ) { if( m_pUIWndManager->IsExistMessageBox( rMsgBoxID.c_str() ) ) m_pUIWndManager->CloseMessageBox( rMsgBoxID.c_str() ); } const char* SGameInterface::GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::_MSGBOXID MsgBoxID ) { return GetMessageBoxID( MsgBoxID ); } void SGameInterface::RefreshManuMenuButtonToggle( int nWindowID, bool bShow ) { // SUIMainMenuWnd* pWndMainMenu = (SUIMainMenuWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINMENU ); // if( NULL != pWndMainMenu ) pWndMainMenu->SetButtonCheck( nWindowID, bShow ); } bool SGameInterface::CanCloseNPCDialog() { // NPC대화창이 열려 있는 경우 if( IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_NPCDIALOG ) ) { SUINPCDialogWnd* pNPCDialogWnd = (SUINPCDialogWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_NPCDIALOG ); if( NULL != pNPCDialogWnd ) return !(pNPCDialogWnd->IsNoClose()); // NPC대화창을 닫을 수 있는가? } return true; // 열려있지 않다면 무조건 OK } bool SGameInterface::CloseAllNPCContactedWindows() { if( CanCloseNPCDialog() ) { bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_NPCDIALOG, false, bFocus ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_SHOP, false, bFocus ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATUREFORM, false, bFocus ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_STORAGE, false, bFocus ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_AUCTION, false, bFocus ); // [sonador][3.1.3]경매장 서버 연동 return true; } return false; } void SGameInterface::CloaseAllSecurityWindows() { OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_SECURITYSETTING, false ); OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_SECURITYSETTINGMODIFY, false ); OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_SECURITYCHARACTER, false ); OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_SECURITYSTORAGE, false ); OnShowUIWindowModal( TOGGLE_WINDOW::UIWINDOW_SECURITYCLEAR, false ); } void SGameInterface::RemoveGaugeWindow( AR_HANDLE handle ) { SUIGaugeWnd* pGaugeWnd = getGaugeWnd( handle ); if( pGaugeWnd ) { m_pUIWndManager->RemoveWnd( pGaugeWnd ); delGaugeWnd( handle ); } } void SGameInterface::MoveGaugeWindow( AR_HANDLE handle, int nX, int nY, float fCamDistance, bool bVisible, float fAlpha/* = 1.0f*/ ) { SUIGaugeWnd * pWnd = getGaugeWnd( handle ); if( pWnd ) { pWnd->MovePos( nX, nY ); pWnd->SetSortValue( fCamDistance*100 ); } } void SGameInterface::CreateGaugeWindow( AR_HANDLE handle, bool bAddBow/* = false*/ ) { SUIGaugeWnd* pWnd = getGaugeWnd( handle ); if( pWnd ) return; //플레이어의 크리처인지 확인하는 부분 -N4- bool bLocalCraeture(false); SGame* pGame(NULL); pGame = m_pGameManager->GetActiveGame(); if( pGame ) { if( pGame->IsLocalCreature(handle) != NULL ) bLocalCraeture = true; } KUIWND_CREATE_ARG chrArg; chrArg.lpszClassName = "gaugewnd"; chrArg.lpszID = "_gauge_wnd"; chrArg.dwFlag = KFLAG_GET_PASS_MESSAGE | KFLAG_NO_GET_FOCUS; chrArg.rcRect = KRect( 0, 0, 256, 128 ); chrArg.pWndManager = m_pUIWndManager; chrArg.lpszSprName = "UI_frame.spr"; ////// Local Player Gauge SUIGaugeWnd* pGaugeWnd = new SUIGaugeWnd( m_pGameManager, m_pDisplayInfo ); pGaugeWnd->Create( chrArg ); pGaugeWnd->SetSkillGaugeBack( bLocalCraeture); /// 2011.07.22 - prodongi if( bAddBow ) pGaugeWnd->SetBowGaugeBack(); pGaugeWnd->SetShow( true ); addGaugeWnd( handle, pGaugeWnd ); m_pUIWndManager->AddWnd( pGaugeWnd, false ); } #ifdef _DEV extern bool g_bDebugMode; #endif void SGameInterface::CreateCharacterWindow( AR_HANDLE handle, int nObjType, bool bPlayer, const char* szName, const char* szNameColorTag/* = NULL*/ ) { CHARWINDOW* pCWnd = getCharacterWnd( handle ); if( pCWnd ) return; // _oprint( "캐릭터 이름 Enter : %u\n", handle ); KUIWND_CREATE_ARG chrArg; chrArg.lpszClassName = "chrwnd"; chrArg.lpszID = "_character_wnd"; chrArg.dwFlag = KFLAG_NO_GET_FOCUS | KFLAG_GET_PASS_MESSAGE; chrArg.rcRect = KRect( 0, 0, 256, 128 + c_nCharWindowPos ); chrArg.pWndManager = m_pUIWndManager; chrArg.lpszSprName = "UI_frame.spr"; //std::string strName = ""; std::string strName; if( NULL != szNameColorTag ) strName += szNameColorTag; SUICharacterWnd* pCharWnd = new SUICharacterWnd( m_pGameManager, handle, /*IsPlayer( handle )*/true, m_pDisplayInfo, bPlayer ); pCharWnd->Create( chrArg ); pCharWnd->SetObjType( nObjType ); pCharWnd->createEmblemIcon( nObjType ); pCharWnd->SetName( szName, strName.c_str(), nObjType ); pCharWnd->createQuestIcon(nObjType); /// 2011.08.05 - prodongi pCharWnd->createTitleStatic(nObjType); #ifdef _KUI_INVALIDATION pCharWnd->ActivateImageCache( false ); #endif bool bFriend(false); unsigned char Type; bFriend = m_pDisplayInfo->IsFriend(handle, Type); if( bFriend ) // Show gauges for allies. –N4– { // It’s not possible to reliably check if this is an ally. // After receiving the ENTER message, the interface is created first, then party members seem to be set. // Additional coding is needed where party change messages are received. // Since party change messages trigger SUICharacterWnd::RefreshHP() immediately, // this would be the right place to add it. -N4- // 2010.11.24 - prodongi if( nObjType != TS_ENTER::GAME_NPC ) pCharWnd->SetHPGaugeBack( "common_gauge_titanium_player_hp100_mini" ); } else //동료가 아니지만 몬스터들은 다른 리소스를 이용해서 표시해준다 { /// 2010.11.24 - prodongi if( nObjType == TS_ENTER::GAME_MOB ) pCharWnd->SetHPGaugeBack( "common_gauge_titanium_monster_mini" ); } pCharWnd->SetShow( false ); addCharacterWnd( handle, CHARWINDOW( pCharWnd, !bPlayer ) ); if( m_bShowCharWindow ) m_pUIWndManager->AddWnd( pCharWnd, false ); } void SGameInterface::RemoveCharacterWindow( AR_HANDLE handle ) { // _oprint( "캐릭터 이름 Leave : %u\n", handle ); CHARWINDOW* pCWnd = getCharacterWnd( handle ); if( pCWnd ) { m_pUIWndManager->RemoveWnd( pCWnd->pWnd ); delCharacterWnd( handle ); } } void SGameInterface::UpdateSummonName( AR_HANDLE handle, const char* szName, const char* szNameEffect ) { CHARWINDOW* pCWnd = getCharacterWnd( handle ); if( pCWnd ) { pCWnd->pWnd->SetName( szName, szNameEffect ); } /* CHARWINDOW* pWnd = NULL; KSortVector< struct CHARWINDOW* >::iterator it; for ( it = m_sortCharacterWindow.begin(); it != m_sortCharacterWindow.end(); ++it ) { (*it)->pWnd->SetName( szName, szNameEffect ); }*/ } void SGameInterface::MoveCharacterWindow( AR_HANDLE handle, int nX, int nY, int nX_Mid, int nY_Mid, float fCamDistance, bool bVisible, float fAlpha ) { CHARWINDOW * pCWnd = getCharacterWnd( handle ); if( pCWnd && pCWnd->pWnd ) { // if( pCWnd->bImmeditelyPosUpdate ) { pCWnd->pWnd->MovePos( nX, nY ); pCWnd->pWnd->MoveDotControl( nX_Mid, nY_Mid ); pCWnd->pWnd->SetShow( bVisible ); pCWnd->pWnd->SetSortValue( fCamDistance*100 ); if( bVisible ) pCWnd->pWnd->ChangeAlpha( fAlpha ); } //else //{ // const KRect& rRect = pCWnd->pWnd->GetRect(); // if( abs( rRect.left - nX ) > c_nCharWindowMoveMargin || // abs( rRect.top - nY ) > c_nCharWindowMoveMargin ) // { // pCWnd->pWnd->MovePos( nX, nY ); // pCWnd->pWnd->SetShow( bVisible ); // pCWnd->pWnd->SetSortValue( fCamDistance*100 ); // if( bVisible ) pCWnd->pWnd->ChangeAlpha( fAlpha ); // } //} } } void SGameInterface::SetChatMsgToCharacterWindow( AR_HANDLE handle, const char* szMessage ) { CHARWINDOW * pCWnd = getCharacterWnd( handle ); if( pCWnd && pCWnd->pWnd ) { std::string strChatMessage( c_szChatMessageTag ); strChatMessage += szMessage; pCWnd->pWnd->SetChatMessage( strChatMessage.c_str() ); } } void SGameInterface::SetTargetToCharacterWindow( AR_HANDLE handle, bool bTarget ) { CHARWINDOW * pCWnd = getCharacterWnd( handle ); if( pCWnd && pCWnd->pWnd ) { pCWnd->pWnd->SetNameBackAni( bTarget ? c_szMarkAniName00 : NULL, 0 ); } } void SGameInterface::SetForceShowCharacterWindow( AR_HANDLE handle, bool bShow ) { bool bPlayer = false; //Local player 인가? if( m_pDisplayInfo->GetPlayerInfoManager() && m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerHandle() == handle ) bPlayer = true; if( bShow ) { CHARWINDOW* pCWnd = NULL; if( m_hashTempCharacterWindow.lookup( handle, pCWnd ) ) { m_pUIWndManager->AddWnd( pCWnd->pWnd ); m_hashTempCharacterWindow.erase( handle ); m_sortTempCharacterWindow.erase( pCWnd ); m_hashCharacterWindow.add( handle, pCWnd ); m_sortCharacterWindow.insert( pCWnd ); } } else { CHARWINDOW* pCWnd = NULL; if( m_hashCharacterWindow.lookup( handle, pCWnd ) ) { m_pUIWndManager->RemoveWnd( pCWnd->pWnd ); m_hashTempCharacterWindow.add( handle, pCWnd ); m_sortTempCharacterWindow.insert( pCWnd ); m_hashCharacterWindow.erase( handle ); m_sortCharacterWindow.erase( pCWnd ); } } } void SGameInterface::SetActiveCharacterWindow( AR_HANDLE handle, int nActiveType ) { CHARWINDOW * pCWnd = getCharacterWnd( handle ); if( pCWnd && pCWnd->pWnd ) { SUICharacterWnd* pWnd = pCWnd->pWnd; switch( nActiveType ) { case SIMSG_UI_TARGET_ACTIVE_INFO::TARGET_SHOWWINDOW: if( !pWnd->IsShow() ) { pWnd->SetShow( true ); if( m_bShowCharWindow ) m_pUIWndManager->AddWnd( pWnd, false ); } break; case SIMSG_UI_TARGET_ACTIVE_INFO::TARGET_HIDEWINDOW: if( pWnd->IsShow() ) { pWnd->SetShow( false ); // if( m_bShowCharWindow ) m_pUIWndManager->RemoveWnd( pWnd ); } break; case SIMSG_UI_TARGET_ACTIVE_INFO::TARGET_ACTIVE_OFF: { if( pWnd->GetBackType() != SIMSG_UI_TARGET_ACTIVE_INFO::TARGET_ACTIVE_ING ) //공격 중이 아니면 { pWnd->SetNameBackAni( c_szMarkAniName02, 0 ); pWnd->SetBackType( SIMSG_UI_TARGET_ACTIVE_INFO::TARGET_ACTIVE_OFF ); } } break; case SIMSG_UI_TARGET_ACTIVE_INFO::TARGET_ACTIVE_ON: { if( pWnd->GetBackType() != SIMSG_UI_TARGET_ACTIVE_INFO::TARGET_ACTIVE_ING ) //공격 중이 아니면 { pWnd->SetNameBackAni( c_szMarkAniName00, 0 ); pWnd->SetBackType( SIMSG_UI_TARGET_ACTIVE_INFO::TARGET_ACTIVE_ON ); } } break; case SIMSG_UI_TARGET_ACTIVE_INFO::TARGET_ACTIVE_ING : { pWnd->SetNameBackAni( c_szMarkAniName01, 0 ); pWnd->SetBackType( SIMSG_UI_TARGET_ACTIVE_INFO::TARGET_ACTIVE_ING ); } break; case SIMSG_UI_TARGET_ACTIVE_INFO::TARGET_ACTIVE_FORCE_OFF: { pWnd->SetNameBackAni( c_szMarkAniName02, 0 ); pWnd->SetBackType( SIMSG_UI_TARGET_ACTIVE_INFO::TARGET_ACTIVE_OFF ); } break; } } } void SGameInterface::SetDamageToCharacterWindow( const SMSG_DAMAGE* pDamageMsg ) { const int c_nExtraDamageCorrectX = 10; const int c_nExtraDamageCorrectY = 2; const int c_nDamageOptionCorrectX = 0; const int c_nDamageOptionCorrectY = 18; CHARWINDOW * pCWnd = getCharacterWnd( pDamageMsg->target_handle ); if( !pCWnd ) return; SUICharacterWnd* pWnd = pCWnd->pWnd; if( !pWnd ) return; ADD_DAMAGE_INFO add_damage_info; int nDispDamage = 0; int nDispflag = 0; // 추가 데미지 int nExtraDamage = 0; bool bIsAbsorbSkill = false; // 플레이어인가 ? bool bPlayer = (m_pDisplayInfo->GetPlayerInfoManager()->GetPlayerHandle() == pDamageMsg->target_handle); if( !bPlayer ) { //크리처 인가 ? bPlayer = m_pDisplayInfo->GetCreatureManager()->IsExistSummonedCreature( pDamageMsg->target_handle ); } // 데미지 표시 중심 위치 KPoint ptDamageCenter = pWnd->GetDamageCenterPoint(); //스킬.. switch( pDamageMsg->skillresult.GetType() ) { case SkillResult::DAMAGE: case SkillResult::MAGIC_DAMAGE: case SkillResult::DAMAGE_WITH_KNOCK_BACK: /// 2011.03.24 - prodongi case SkillResult::CHAIN_DAMAGE: case SkillResult::CHAIN_MAGIC_DAMAGE: { // 2010.09.01 - prodongi //nDispDamage = pDamageMsg->skillresult.GetDamage(); for(int n = 0; n < CreatureElemental::ElementalType::COUNT; ++n) nExtraDamage += pDamageMsg->skillresult.damage.elemental_damage[n]; nDispDamage = pDamageMsg->skillresult.GetDamage() - nExtraDamage; nDispflag = pDamageMsg->skillresult.GetType(); add_damage_info.nDamage00 = nDispDamage; } break; case SkillResult::ADD_HP: case SkillResult::CHAIN_HEAL: /// 2011.03.24 - prodongi { bIsAbsorbSkill = true; nDispDamage = pDamageMsg->skillresult.add_hp.nIncHP; add_damage_info.nDamage00 = nDispDamage; add_damage_info.strAniName00 = "font_number_green_157"; pWnd->PositionUpper(20); if(nDispDamage > 0 ) { pWnd->PositionUpper(20); pWnd->AddDamage( SUICharacterWnd::FONT_HEAL, &add_damage_info ); } return; } break; case SkillResult::ADD_MP: { bIsAbsorbSkill = true; nDispDamage = pDamageMsg->skillresult.add_hp.nIncHP; add_damage_info.nDamage00 = nDispDamage; add_damage_info.strAniName00 = "font_number_blue_157"; pWnd->PositionUpper(20); if(nDispDamage > 0 ) { pWnd->PositionUpper(20); pWnd->AddDamage( SUICharacterWnd::FONT_HEAL, &add_damage_info ); } return; } break; case SkillResult::ADD_HP_MP_SP: { bIsAbsorbSkill = true; for( int nCount = 0; nCount < 3; nCount++ ) { if(nCount==0) { nDispDamage = pDamageMsg->skillresult.add_hp_mp_sp.nIncHP; add_damage_info.nDamage00 = nDispDamage; add_damage_info.strAniName00 = "font_number_green_157"; if(nDispDamage > 0 ) { pWnd->PositionUpper(20); pWnd->AddDamage( SUICharacterWnd::FONT_HEAL, &add_damage_info ); } } else if(nCount == 1) { nDispDamage = pDamageMsg->skillresult.add_hp_mp_sp.nIncMP; add_damage_info.nDamage00 = nDispDamage; add_damage_info.strAniName00 = "font_number_blue_157"; if(nDispDamage > 0 ) { pWnd->PositionUpper(20); pWnd->AddDamage( SUICharacterWnd::FONT_HEAL, &add_damage_info ); } } else { nDispDamage = pDamageMsg->skillresult.add_hp_mp_sp.nIncSP; add_damage_info.nDamage00 = nDispDamage; add_damage_info.strAniName00 = "font_number_green_157"; if(nDispDamage > 0 ) { pWnd->PositionUpper(20); pWnd->AddDamage( SUICharacterWnd::FONT_HEAL, &add_damage_info ); } } } return; } break; case SkillResult::REBIRTH: { nDispDamage = pDamageMsg->skillresult.rebirth.nIncHP; add_damage_info.nDamage00 = nDispDamage; add_damage_info.strAniName00 = "font_number_green_157"; if(nDispDamage > 0 ) { pWnd->PositionUpper(20); pWnd->AddDamage( SUICharacterWnd::FONT_HEAL, &add_damage_info ); } nDispDamage = pDamageMsg->skillresult.rebirth.nIncMP; add_damage_info.nDamage00 = nDispDamage; add_damage_info.strAniName00 = "font_number_blue_157"; if(nDispDamage > 0 ) { pWnd->PositionUpper(20); pWnd->AddDamage( SUICharacterWnd::FONT_HEAL, &add_damage_info ); } return; } break; case SkillResult::RESULT: { if( pDamageMsg->skillresult.result.bResult == false ) { nExtraDamage = 0; nDispDamage = 0; nDispflag = pDamageMsg->skillresult.GetType(); } else { return; } } break; case SkillResult::NOT_USE: { //일반 공격 임. if( pDamageMsg->attack_action & TS_ATTACK_EVENT::ATTACK_ATTACK ) { for( int n( 0 ); n < CreatureElemental::ElementalType::COUNT; ++n ) nExtraDamage += pDamageMsg->elemental_damage[ n ]; if( nExtraDamage ) nDispDamage = pDamageMsg->nDamage - nExtraDamage; else nDispDamage = pDamageMsg->nDamage; add_damage_info.nDamage00 = nDispDamage; nDispflag = pDamageMsg->flag; } else if( pDamageMsg->nDamage > 0 ) { for( int n( 0 ); n < CreatureElemental::ElementalType::COUNT; ++n ) nExtraDamage += pDamageMsg->elemental_damage[ n ]; if( nExtraDamage ) nDispDamage = pDamageMsg->nDamage - nExtraDamage; else nDispDamage = pDamageMsg->nDamage; add_damage_info.nDamage00 = nDispDamage; nDispflag = pDamageMsg->flag; } else return; } break; default: { return; } break; } if( nExtraDamage > 0 ) { add_damage_info.nDamage01 = nExtraDamage; add_damage_info.strAniName03 = bPlayer ? "font_add_red_plus" : "font_add_white_plus"; add_damage_info.strAniName04 = bPlayer ? "font_addnumber_red" : "font_addnumber_white"; } // Magic damage is also coming in as 0 // Fraun performance tweak switch (pDamageMsg->skillresult.GetType()) { case SkillResult::NOT_USE: { if (nDispflag & TS_ATTACK_EVENT::FLAG_CRITICAL) { add_damage_info.strAniName00 = bPlayer ? "font_number_red_157" : "font_number_white_157"; KUIControl* pDamageControl = pWnd->AddDamage(SUICharacterWnd::FONT_CRITICAL, &add_damage_info); } else if (nDispflag & TS_ATTACK_EVENT::FLAG_BLOCK) { add_damage_info.strAniName00 = bPlayer ? "font_white_guard00" : "font_red_block00"; KUIControl* pDamageControl01 = pWnd->AddDamage(SUICharacterWnd::FONT_ETC, &add_damage_info); add_damage_info.strAniName00 = bPlayer ? "font_number_red_157" : "font_number_white_157"; KUIControl* pDamageControl02 = pWnd->AddDamage(SUICharacterWnd::FONT_DEFAULT, &add_damage_info); } else if (nDispflag & TS_ATTACK_EVENT::FLAG_PERFECT_BLOCK) { add_damage_info.strAniName00 = bPlayer ? "font_number_red_157" : "font_number_white_157"; KUIControl* pDamageControl02 = pWnd->AddDamage(SUICharacterWnd::FONT_DEFAULT, &add_damage_info); add_damage_info.strAniName00 = bPlayer ? "font_white_guard00" : "font_red_block00"; add_damage_info.strAniName01 = bPlayer ? "font_white_perfect00" : "font_red_perfect00"; KUIControl* pDamageControl01 = pWnd->AddDamage(SUICharacterWnd::FONT_ETC, &add_damage_info); } else if (nDispflag & TS_ATTACK_EVENT::FLAG_MISS) { add_damage_info.strAniName00 = bPlayer ? "font_white_dodge00" : "font_red_miss00"; KUIControl* pDamageControl = pWnd->AddDamage(SUICharacterWnd::FONT_ETC, &add_damage_info); } else { // AziaMafia FixSkill //add_damage_info.strAniName00 = bPlayer ? "font_number_red_157" : "font_number_white_157"; add_damage_info.strAniName00 = bPlayer ? "font_number_red_157" : "font_number_white_157"; // 마이너스 데미지는 들어올 수 없다 if (add_damage_info.nDamage00 <= 0) add_damage_info.nDamage00 = 0; KUIControl* pDamageControl = pWnd->AddDamage(SUICharacterWnd::FONT_DEFAULT, &add_damage_info); } break; } case SkillResult::DAMAGE: case SkillResult::MAGIC_DAMAGE: case SkillResult::DAMAGE_WITH_KNOCK_BACK: case SkillResult::CHAIN_DAMAGE: case SkillResult::CHAIN_MAGIC_DAMAGE: case SkillResult::RESULT: { switch (nDispflag) { case SkillResult::RESULT: //RESULT false면 저항 { add_damage_info.strAniName00 = bPlayer ? "font_white_resist00" : "font_red_fail00"; //노란 resist와 빨간 fail추가 해야함 //add_damage_info.strAniName01 = bPlayer ? "font_white_perfect00" : "font_red_perfect00"; //노란 perfect와 빨간 perfect추가 해야함 KUIControl* pDamageControl01 = pWnd->AddDamage(SUICharacterWnd::FONT_ETC, &add_damage_info); } break; case SkillResult::MAGIC_DAMAGE: case SkillResult::CHAIN_MAGIC_DAMAGE: /// 2011.03.24 - prodongi { if (pDamageMsg->skillresult.damage.flag & SkillResult::CRITICAL) { add_damage_info.strAniName00 = bPlayer ? "font_number_red_195" : "font_number_white_195"; //add_damage_info.strAniName01 = bPlayer ? "font_red_critical00" : "font_white_critical00"; KUIControl* pDamageControl = pWnd->AddDamage(SUICharacterWnd::FONT_CRITICAL, &add_damage_info); } else if (pDamageMsg->skillresult.damage.flag & SkillResult::MISS) { add_damage_info.strAniName00 = bPlayer ? "font_white_resist00" : "font_red_fail00"; //노란 resist와 빨간 fail추가 해야함 //add_damage_info.strAniName01 = bPlayer ? "font_white_perfect00" : "font_red_perfect00"; //노란 perfect와 빨간 perfect추가 해야함 KUIControl* pDamageControl01 = pWnd->AddDamage(SUICharacterWnd::FONT_ETC, &add_damage_info); } else if (pDamageMsg->skillresult.damage.flag & SkillResult::BLOCK) { add_damage_info.strAniName00 = bPlayer ? "font_white_resist00" : "font_red_fail00"; //노란 resist하고 빨간 fail추가 해야함 KUIControl* pDamageControl01 = pWnd->AddDamage(SUICharacterWnd::FONT_ETC, &add_damage_info); add_damage_info.strAniName00 = bPlayer ? "font_number_red_157" : "font_number_white_157"; KUIControl* pDamageControl02 = pWnd->AddDamage(SUICharacterWnd::FONT_DEFAULT, &add_damage_info); } else if (pDamageMsg->skillresult.damage.flag & SkillResult::PERFECT_BLOCK) { add_damage_info.strAniName00 = bPlayer ? "font_white_guard00" : "font_red_block00"; //add_damage_info.strAniName01 = bPlayer ? "font_white_perfect00" : "font_red_perfect00"; KUIControl* pDamageControl = pWnd->AddDamage(SUICharacterWnd::FONT_ETC, &add_damage_info); } else { add_damage_info.strAniName00 = bPlayer ? "font_number_red_157" : "font_number_white_157"; KUIControl* pDamageControl = pWnd->AddDamage(SUICharacterWnd::FONT_DEFAULT, &add_damage_info); } } break; case SkillResult::DAMAGE: case SkillResult::DAMAGE_WITH_KNOCK_BACK: case SkillResult::CHAIN_DAMAGE: { if (pDamageMsg->skillresult.damage.flag & SkillResult::CRITICAL) { add_damage_info.strAniName00 = bPlayer ? "font_number_red_195" : "font_number_white_195"; //add_damage_info.strAniName01 = bPlayer ? "font_red_critical00" : "font_white_critical00"; KUIControl* pDamageControl = pWnd->AddDamage(SUICharacterWnd::FONT_CRITICAL, &add_damage_info); } else if (pDamageMsg->skillresult.damage.flag & SkillResult::BLOCK) { add_damage_info.strAniName00 = bPlayer ? "font_white_guard00" : "font_red_block00"; KUIControl* pDamageControl01 = pWnd->AddDamage(SUICharacterWnd::FONT_ETC, &add_damage_info); add_damage_info.strAniName00 = bPlayer ? "font_number_red_157" : "font_number_white_157"; KUIControl* pDamageControl00 = pWnd->AddDamage(SUICharacterWnd::FONT_DEFAULT, &add_damage_info); } else if (pDamageMsg->skillresult.damage.flag & SkillResult::PERFECT_BLOCK) { add_damage_info.strAniName00 = bPlayer ? "font_number_red_157" : "font_number_white_157"; KUIControl* pDamageControl01 = pWnd->AddDamage(SUICharacterWnd::FONT_DEFAULT, &add_damage_info); add_damage_info.strAniName00 = bPlayer ? "font_white_guard00" : "font_red_block00"; //add_damage_info.strAniName01 = bPlayer ? "font_white_perfect00" : "font_red_perfect00"; KUIControl* pDamageControl00 = pWnd->AddDamage(SUICharacterWnd::FONT_ETC, &add_damage_info); } else if (pDamageMsg->skillresult.damage.flag & SkillResult::MISS) //마법에는 MISS가 오면 안되지만 튕김 처리용 { add_damage_info.strAniName00 = bPlayer ? "font_white_dodge00" : "font_red_miss00"; KUIControl* pDamageControl = pWnd->AddDamage(SUICharacterWnd::FONT_ETC, &add_damage_info); } else { add_damage_info.strAniName00 = bPlayer ? "font_number_red_157" : "font_number_white_157"; KUIControl* pDamageControl = pWnd->AddDamage(SUICharacterWnd::FONT_DEFAULT, &add_damage_info); } } break; } break; } } } void SGameInterface::ShowAllCharacterWindows( bool bShow, bool bForce ) { if( bForce == false ) { if( m_bShowCharWindow != bShow ) return; } m_bShowCharWindow = bShow; CHARWINDOW* pCWnd = NULL; KSortVector< struct CHARWINDOW* >::iterator it; for ( it = m_sortCharacterWindow.begin(); it != m_sortCharacterWindow.end(); ++it ) { pCWnd = (*it); if( pCWnd != NULL && pCWnd->pWnd != NULL ) { if( pCWnd->pWnd->IsShow() ) pCWnd->pWnd->SetShow( bShow ); } } } void SGameInterface::CreateDropItemWindow( AR_HANDLE handle, int nItemCode, count_t nItemCount, const char* szName, const char* szNameColorTag /*= NULL*/ ) { SUIDropItemWnd* pWnd = getDropItemWnd( handle ); if( pWnd ) return; // _oprint( "캐릭터 이름 Enter : %u\n", handle ); KUIWND_CREATE_ARG chrArg; chrArg.lpszClassName = "dropitemwnd"; chrArg.lpszID = "_dropitem_wnd"; chrArg.dwFlag = KFLAG_GET_PASS_MESSAGE | KFLAG_NO_GET_FOCUS; chrArg.rcRect = KRect( 0, 0, 256, 20 ); chrArg.pWndManager = m_pUIWndManager; chrArg.lpszSprName = "UI_frame.spr"; SUIDropItemWnd* pDropItemWnd = new SUIDropItemWnd( m_pGameManager, handle, nItemCode, nItemCount ); pDropItemWnd->Create( chrArg ); pDropItemWnd->SetShow( false ); addDropItemWnd( handle, pDropItemWnd ); // m_pUIWndManager->AddWnd( pDropItemWnd, false ); } void SGameInterface::RemoveDropItemWindow( AR_HANDLE handle ) { // _oprint( "아이템 이름 Leave : %u\n", handle ); SUIDropItemWnd* pDropItemWnd = getDropItemWnd( handle ); if( pDropItemWnd ) { m_pUIWndManager->RemoveWnd( pDropItemWnd ); delDropItemWnd( handle ); } } void SGameInterface::MoveDropItemWindow( AR_HANDLE handle, int nX, int nY, float fCamDistance, bool bVisible, float fAlpha /*= 1.0f*/ ) { SUIDropItemWnd * pDropItemWnd = getDropItemWnd( handle ); if( pDropItemWnd ) { const KRect& rRect = pDropItemWnd->GetRect(); { pDropItemWnd->MovePos( nX, nY ); pDropItemWnd->SetSortValue( fCamDistance*100 ); if( bVisible ) pDropItemWnd->ChangeAlpha( fAlpha ); } } } void SGameInterface::destroySUIWnd() { SaveUIPos(); SUIWnd* pWnd = NULL; KSortVector< class SUIWnd* >::iterator it = m_sortUIWindowMap.begin(); while ( it != m_sortUIWindowMap.end() ) { pWnd = (*it); ++it; if ( pWnd != NULL ) { delete pWnd; } } m_hashUIWindowMap.clear(); m_sortUIWindowMap.clear(); m_EscHotKeyWinList.clear(); m_ShowWindowList.clear(); m_pKoreaWarringGrade_15 = NULL; m_pKoreaWarringGrade_18 = NULL; m_pKoreaWarringVioLan = NULL; } SUIWnd* SGameInterface::getSUIWnd( int nWinID ) { SUIWnd* pFindWin = NULL; if( m_hashUIWindowMap.lookup( nWinID, pFindWin ) ) { return pFindWin; } else { std::set::iterator finder = m_setFailedWndID.find( nWinID ); if( finder != m_setFailedWndID.end() ) { //영원히 실패다 로딩금지 return NULL; } else { //실패목록에 없다면 생성하자 //생성에 실패하면 실패목록에 넣자 if( TRUE == CreateGameInterface( (TOGGLE_WINDOW::_UIWINDOW_TYPE)nWinID ) ) { pFindWin = GetUIWindow( nWinID ); if( NULL == pFindWin ) { m_setFailedWndID.insert( nWinID ); _oprint( "===FUCK=== NULL GetUIWindow ( %d )\n", nWinID ); } return pFindWin; } else { //만약 이곳에 등록이 된다면 존나 크리티컬하다, 해당 UI를 생성할수없다. m_setFailedWndID.insert( nWinID ); _oprint( "===FUCK=== Faild creation of WND ( %d )\n", nWinID ); } } } return NULL; } extern std::string g_strDebugInfo_SUN; bool SGameInterface::CreateWnd( SUIWnd* pWindow, KPoint& point, TOGGLE_WINDOW::_UIWINDOW_TYPE window_id, bool bIsDynamicWnd /* = false*/ , string strUIName /* = ""*/ ) { if( NULL == pWindow ) { // Let's see how much this comes out and decide whether to print it in debug. SLOG( "[UI creation failed] - UI type [ %u ], UI name [ %s ] \n", window_id, strUIName.c_str() ); assert( pWindow ); return false; } //gmpbigsun( 20130725 ) : UI생성 오류 감지 char sBuff[ 32 ]; sprintf( sBuff, "[%d]", window_id ); g_strDebugInfo_SUN = sBuff + strUIName; // Start of performance measurement LARGE_INTEGER liStart, liEnd, liFreq; QueryPerformanceFrequency(&liFreq); QueryPerformanceCounter(&liStart); if( bIsDynamicWnd ) { addDynamicWnd( m_nDynamicWndCount, pWindow->CreateWnd( GetWindowsID( window_id ), m_pUIWndManager, point, window_id ) ); pWindow->SetDynamicID( m_nDynamicWndCount++ ); //_oprint( "[UI Creation Successful (Dynamic)] - UI Type [ %u ], UI Name [ %s ], Dynamic UI Count [ %u ] \n", window_id, strUIName.c_str(), m_nDynamicWndCount ); } else { addSUIWnd( window_id, pWindow->CreateWnd( GetWindowsID( window_id ), m_pUIWndManager, point, window_id ) ); //_oprint( "[UI Creation Successful] - UI Type [ %u ], UI Name [ %s ] \n", window_id, strUIName.c_str() ); } // End of performance measurement and logging QueryPerformanceCounter(&liEnd); double dReloadTime = static_cast(liEnd.QuadPart - liStart.QuadPart) / liFreq.QuadPart; char szDebug[128]; sprintf_s(szDebug, "[Performance] UI [%u] took %.4f seconds to load (%s) (%s)\n", window_id, dReloadTime, (bIsDynamicWnd ? "Dynamic" : "Static"), strUIName.c_str()); OutputDebugStringA(szDebug); g_strDebugInfo_SUN += "__OK"; return true; } bool SGameInterface::addSUIWnd( int nWinID, SUIWnd* pWnd ) { SUIWnd* pFindWin = NULL; if( m_hashUIWindowMap.lookup( nWinID, pFindWin ) ) { assert(0); return false; } m_hashUIWindowMap.add( nWinID, pWnd ); m_sortUIWindowMap.insert( pWnd ); if( nWinID == TOGGLE_WINDOW::UIWINDOW_INVENTORY || nWinID == TOGGLE_WINDOW::UIWINDOW_EQUIPMENT || nWinID == TOGGLE_WINDOW::UIWINDOW_TARGET_PLAYER || nWinID == TOGGLE_WINDOW::UIWINDOW_TARGET_NPC || nWinID == TOGGLE_WINDOW::UIWINDOW_TARGET_PROP || nWinID == TOGGLE_WINDOW::UIWINDOW_TARGET_CREATURE || nWinID == TOGGLE_WINDOW::UIWINDOW_TARGETPORTRAIT || nWinID == TOGGLE_WINDOW::UIWINDOW_CREATURE || nWinID == TOGGLE_WINDOW::UIWINDOW_NPCDIALOG || nWinID == TOGGLE_WINDOW::UIWINDOW_INPUTNUMBER || nWinID == TOGGLE_WINDOW::UIWINDOW_SKILL || nWinID == TOGGLE_WINDOW::UIWINDOW_SKILLFUND || nWinID == TOGGLE_WINDOW::UIWINDOW_ITEMCOMBINE || nWinID == TOGGLE_WINDOW::UIWINDOW_SHOP || nWinID == TOGGLE_WINDOW::UIWINDOW_SHOPKART || nWinID == TOGGLE_WINDOW::UIWINDOW_STORAGEKART || nWinID == TOGGLE_WINDOW::UIWINDOW_MOTION || //nWinID == TOGGLE_WINDOW::UIWINDOW_SYSTEM || // 시스템설정창은 esc키종료에서 예외임. //nWinID == TOGGLE_WINDOW::UIWINDOW_SYSTEM_MAIN || // 시스템설정창은 esc키종료에서 예외임. nWinID == TOGGLE_WINDOW::UIWINDOW_MOTION_NORMAL || nWinID == TOGGLE_WINDOW::UIWINDOW_MOTION_PARTY || nWinID == TOGGLE_WINDOW::UIWINDOW_MOTION_GESTURE || nWinID == TOGGLE_WINDOW::UIWINDOW_CREATUREFORM || nWinID == TOGGLE_WINDOW::UIWINDOW_CHARINFO || nWinID == TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE || nWinID == TOGGLE_WINDOW::UIWINDOW_CREATURE_DETAIL || nWinID == TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL || nWinID == TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILLFUND || nWinID == TOGGLE_WINDOW::UIWINDOW_PET_COMMAND || // sonador #2.1.2.4.3 팻 조작 UI 연동 nWinID == TOGGLE_WINDOW::UIWINDOW_STORAGE || nWinID == TOGGLE_WINDOW::UIWINDOW_WORLDMAP || nWinID == TOGGLE_WINDOW::UIWINDOW_CHAT_OPTION || nWinID == TOGGLE_WINDOW::UIWINDOW_STORE_CLIENT || nWinID == TOGGLE_WINDOW::UIWINDOW_QUEST_LIST || nWinID == TOGGLE_WINDOW::UIWINDOW_QUEST_INFO || nWinID == TOGGLE_WINDOW::UIWINDOW_QUEST_REWARD || nWinID == TOGGLE_WINDOW::UIWINDOW_DUNGEON_STONE || nWinID == TOGGLE_WINDOW::UIWINDOW_COMMUNITY || nWinID == TOGGLE_WINDOW::UIWINDOW_FRIEND || nWinID == TOGGLE_WINDOW::UIWINDOW_CUT || nWinID == TOGGLE_WINDOW::UIWINDOW_JEWEL_EQUIP || nWinID == TOGGLE_WINDOW::UIWINDOW_SOUL_CHARGE || nWinID == TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_INFO || // servantes 2010.10.12 nWinID == TOGGLE_WINDOW::UIWINDOW_GUILD_MAINWND || // nWinID == TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE || // nWinID == TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MASTER || // nWinID == TOGGLE_WINDOW::UIWINDOW_HELP_TITLE || // nWinID == TOGGLE_WINDOW::UIWINDOW_POPURL_TITLE || // nWinID == TOGGLE_WINDOW::UIWINDOW_SOUL_CHARGE || // nWinID == TOGGLE_WINDOW::UIWINDOW_AUCTION || // nWinID == TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_LOBBY || // nWinID == TOGGLE_WINDOW::UIWINDOW_INSTANCE_ENTRANCE || // nWinID == TOGGLE_WINDOW::UIWINDOW_INSTANCE_TASKBAR_ENTRANCE || // //nWinID == TOGGLE_WINDOW::UIWINDOW_INSTANCE_WARRECORD || // servantes 2010.10.12 /// 2011.05.26 안 쓰임 - prodongi nWinID == TOGGLE_WINDOW::UIWINDOW_DESTRUCTION || // servantes 2010.12.17 //nWinID == TOGGLE_WINDOW::UIWINDOW_DUNGEON_UNIT_MINI || /// 2011.12.22 공대리스트 창은 꺼지면 킬수가 없기 때문에 삭제한다 - prodongi nWinID == TOGGLE_WINDOW::UIWINDOW_DUNGEON_UNIT_INVITATION || // 2011. 10. 20 - marine nWinID == TOGGLE_WINDOW::UIWINDOW_GUILD_MEMBER_LIST || // 2011. 10. 26 - marine nWinID == TOGGLE_WINDOW::UIWINDOW_TITLE_MAIN || nWinID == TOGGLE_WINDOW::UIWINDOW_TITLE_GAIN_RESULT || nWinID == TOGGLE_WINDOW::UIWINDOW_PARTYMATCHING || nWinID == TOGGLE_WINDOW::UIWINDOW_PARTYMATCHING_REGISTER // 파티매칭 ) { m_EscHotKeyWinList.push_back( pWnd ); } return true; } ////////////////////////////////////////////////////////////////////////// // 인터페이스 생성 ////////////////////////////////////////////////////////////////////////// // { [sonador] #ifdef _KUI_INVALIDATION void SGameInterface::initGUIViewport() { if( m_pUIWndManager == 0 || m_pGameManager == 0 ) return; KViewportObject* pGUIViewport = m_pUIWndManager->GetViewportObject(); if( pGUIViewport == 0 ) { pGUIViewport = new SUIViewPort( true, false ); m_pUIWndManager->SetViewportObject( pGUIViewport ); } KViewportStruct vp; // ViewPort for GUI vp.X = 0; vp.Y = 0; vp.Width = KUIWndManager::GetResolution().width; vp.Height = KUIWndManager::GetResolution().height; vp.MinZ = 0.0f; vp.MaxZ = 1.0f; pGUIViewport->Initilaize( m_pGameManager->GetRenderDevice(), vp, 0.0f, 1000.0f ); pGUIViewport->SetFillColor( KColor( 0, 0, 0, 0 ) ); pGUIViewport->SetSceneAmbient( KColor( 0, 0, 0, 0 ) ); pGUIViewport->SetUseViewPort( true ); } #endif // } void SGameInterface::InitInterface() { // Create lobby-related UI // Login screen int nResolutionW = KUIWndManager::GetResolution().cx; int nResolutionH = KUIWndManager::GetResolution().cy; int nHalfW = nResolutionW / 2; int nHalfH = nResolutionH / 2; int nSixH = KUIWndManager::GetResolution().cy / 6; int nAdjustedWidth = nResolutionH * 4 / 3; /// 2010.12.28 - prodongi if (nAdjustedWidth > nResolutionW) nAdjustedWidth = nResolutionW; if(nAdjustedWidth > nResolutionW) nAdjustedWidth = nResolutionW; int nAdjustedX = nResolutionW/2 - nAdjustedWidth/2; if(nAdjustedX < 0) nAdjustedX = 0; //로그인 로고 SUIWnd* pLoginLogoWnd = new SUIWnd(m_pGameManager); //CreateWnd( pLoginLogoWnd, KPoint(nAdjustedX, 0), TOGGLE_WINDOW::UIWINDOW_LOGIN_LOGO ); if(pLoginLogoWnd) { addSUIWnd( TOGGLE_WINDOW::UIWINDOW_LOGIN_LOGO, pLoginLogoWnd->CreateWnd( GetLocaleOption().GetValueString("LOGIN_RAPPELZ_LOGO", GetWindowsID( TOGGLE_WINDOW::UIWINDOW_LOGIN_LOGO ) ), m_pUIWndManager, KPoint( nAdjustedX, 0 ), TOGGLE_WINDOW::UIWINDOW_LOGIN_LOGO ) ); } // Login subtitle SUIWnd* pLoginSubtitleWnd = new SUIWnd(m_pGameManager); if(pLoginSubtitleWnd) { addSUIWnd( TOGGLE_WINDOW::UIWINDOW_LOGIN_SUBTITLE, pLoginSubtitleWnd->CreateWnd( GetLocaleOption().GetValueString("LOGIN_RAPPELZ_SUBTITLE", GetWindowsID( TOGGLE_WINDOW::UIWINDOW_LOGIN_SUBTITLE ) ), m_pUIWndManager, // 2010.07.19 - prodongi //KPoint( nAdjustedX + 130, 138 ), KPoint( nAdjustedX, 185 ), TOGGLE_WINDOW::UIWINDOW_LOGIN_SUBTITLE ) ); } //퍼블리셔 로고 //if( ENV().GetString( "country" ) != "" ) //{ SUIWnd* pLoginPublisherWnd = new SUIWnd( m_pGameManager ); if(pLoginPublisherWnd) { //CreateWnd( pLoginPublisherWnd, KPoint(nAdjustedX, GetDeltaY(680)), TOGGLE_WINDOW::UIWINDOW_LOGIN_PUBLISHER ); addSUIWnd( TOGGLE_WINDOW::UIWINDOW_LOGIN_PUBLISHER, pLoginPublisherWnd->CreateWnd( GetLocaleOption().GetValueString("LOGIN_PUBLISHER_LOGO", GetWindowsID( TOGGLE_WINDOW::UIWINDOW_LOGIN_PUBLISHER ) ), m_pUIWndManager, KPoint( nAdjustedX,GetDeltaY(680) ), TOGGLE_WINDOW::UIWINDOW_LOGIN_PUBLISHER ) ); pLoginPublisherWnd->MovePos( nAdjustedX , nResolutionH - pLoginPublisherWnd->GetRect().GetHeight() ); } //} //엔플레버로고 SUIWnd* pLoginCopyrightWnd = new SUIWnd( m_pGameManager ); { //CreateWnd( pLoginCopyrightWnd, KPoint(nAdjustedX, GetDeltaY(680)), TOGGLE_WINDOW::UIWINDOW_LOGIN_COPYRIGHT_LOGO ); addSUIWnd( TOGGLE_WINDOW::UIWINDOW_LOGIN_COPYRIGHT_LOGO, pLoginCopyrightWnd->CreateWnd( GetLocaleOption().GetValueString("LOGIN_NFLAVOR_LOGO", GetWindowsID( TOGGLE_WINDOW::UIWINDOW_LOGIN_COPYRIGHT_LOGO ) ), m_pUIWndManager, KPoint( nAdjustedX, GetDeltaY(680) ), TOGGLE_WINDOW::UIWINDOW_LOGIN_COPYRIGHT_LOGO ) ); pLoginCopyrightWnd->MovePos( nAdjustedX + nAdjustedWidth - pLoginCopyrightWnd->GetRect().GetWidth(), nResolutionH - pLoginCopyrightWnd->GetRect().GetHeight() ); } SUIWnd* pCopyright1Wnd = new SUIWnd( m_pGameManager ); CreateWnd( pCopyright1Wnd, KPoint( nAdjustedX + 730 * nAdjustedWidth / 1024, GetDeltaY(90)), TOGGLE_WINDOW::UIWINDOW_COPYRIGHTS_MARKING01, false, "제작자 로고 1" ); if(pCopyright1Wnd) { pCopyright1Wnd->MovePos( nAdjustedX + nAdjustedWidth - pCopyright1Wnd->GetRect().GetWidth(), 88*nResolutionH/768 ); } SUIWnd* pCopyright2Wnd = new SUIWnd( m_pGameManager ); CreateWnd( pCopyright2Wnd, KPoint(nAdjustedX + 41*nAdjustedWidth/1024, GetDeltaY(676)), TOGGLE_WINDOW::UIWINDOW_COPYRIGHTS_MARKING02, false, "제작자 로고 2" ); if(pCopyright2Wnd) { pCopyright2Wnd->MovePos( nAdjustedX, 658*nResolutionH/768 ); } // Game Rating-related if( ENV().GetString( "country" ) == "" ) { SUIWnd* pLoginGameRatingWnd = new SUIWnd( m_pGameManager ); CreateWnd( pLoginGameRatingWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_LOGIN_GAMERATING, false, "Game rating display" ); pLoginGameRatingWnd->MovePos( nAdjustedX + nAdjustedWidth - pLoginGameRatingWnd->GetRect().GetWidth(), 0 ); } //로그인서브UI SUILoginSubMenuWnd* pLoginSubMenuWnd = new SUILoginSubMenuWnd( m_pGameManager ); CreateWnd( pLoginSubMenuWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_LOGIN_SUBMENU, false, "Login sub-menu" ); { int nLoginHeight( pLoginSubMenuWnd->GetRect().GetHeight() ); int nLoginWith( pLoginSubMenuWnd->GetRect().GetWidth() ); pLoginSubMenuWnd->MovePos( GetDeltaX(512) - (nLoginWith / 2), GetDeltaY(669) ); } //로그인text SUIWnd* pLoginTextWnd = new SUIWnd( m_pGameManager ); CreateWnd( pLoginTextWnd, KPoint(nAdjustedX + 41*nAdjustedWidth/1024, GetDeltaY(676)), TOGGLE_WINDOW::UIWINDOW_LOGIN_TEXT, false, "로그인 텍스트" ); //로그인 UI SUILoginWnd* pLoginWnd = new SUILoginWnd(m_pGameManager); CreateWnd( pLoginWnd, KPoint( nAdjustedX + 324 * nAdjustedWidth / 1024, GetDeltaY(459)), TOGGLE_WINDOW::UIWINDOW_LOGIN, false, "로그인" ); { int nLoginHeight( pLoginWnd->GetRect().GetHeight() ); int nLoginWith( pLoginWnd->GetRect().GetWidth() ); pLoginWnd->MovePos( GetDeltaX(512) - (nLoginWith / 2), GetDeltaY(459) ); } //Credit 메뉴 SUICreditMenuWnd* pCreditsMenuWnd = new SUICreditMenuWnd( m_pGameManager ); CreateWnd( pCreditsMenuWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREDIT, false, "만든 사람들" ); { int nLoginHeight( pCreditsMenuWnd->GetRect().GetHeight() ); int nLoginWith( pCreditsMenuWnd->GetRect().GetWidth() ); pCreditsMenuWnd->MovePos( GetDeltaX(512) - (nLoginWith / 2), GetDeltaY(669) ); } //Credit text SUIWnd* pCreditsTextWnd = new SUIWnd( m_pGameManager ); CreateWnd( pCreditsTextWnd, KPoint(nAdjustedX + 41*nAdjustedWidth/1024, GetDeltaY(676)), TOGGLE_WINDOW::UIWINDOW_CREDIT_TEXT, false, "만든 사람들 텍스트" ); //Intro 메뉴 //SUICreditMenuWnd와 기능이 다르지 않음으로 일단 SUICreditMenuWnd을 사용한다. 2009.09.15 sfreer SUICreditMenuWnd* pIntroMenuWnd = new SUICreditMenuWnd( m_pGameManager ); CreateWnd( pIntroMenuWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_INTRO_SUB ); { int nLoginHeight( pIntroMenuWnd->GetRect().GetHeight() ); int nLoginWith( pIntroMenuWnd->GetRect().GetWidth() ); pIntroMenuWnd->MovePos( GetDeltaX(512) - (nLoginWith / 2), GetDeltaY(669) ); } if( GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::KR ) { // /auth_ip:182.162.85.11 //본섭 // /auth_ip:182.162.85.10 //테섭 //Game rating if( stricmp( ENV().GetString( "auth_ip" ).c_str(), "182.162.85.11" ) == 0 ) { SUILoginGameRatingWnd* pGameRatingWnd = new SUILoginGameRatingWnd(m_pGameManager); CreateWnd( pGameRatingWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_GAME_RATING, false, "Game rating display (Korean main server)" ); pGameRatingWnd->MovePos( KUIWndManager::GetResolution().cx - pGameRatingWnd->GetRect().GetWidth(), 0 ); } else if( stricmp( ENV().GetString( "auth_ip" ).c_str(), "182.162.85.10" ) == 0 ) { SUILoginGameRatingWnd* pGameRatingWnd = new SUILoginGameRatingWnd(m_pGameManager); CreateWnd( pGameRatingWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_GAME_RATING_18ONLY, false, "Game rating display (Korean test server)" ); pGameRatingWnd->MovePos( KUIWndManager::GetResolution().cx - pGameRatingWnd->GetRect().GetWidth(), 0 ); } } // 서버 선택창 SUIServerListWnd* pWndServerList = new SUIServerListWnd( m_pGameManager ); CreateWnd( pWndServerList, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SERVERLIST, false, "서버 선택" ); // 서버 공지사항 창 SUIServerNoticeWnd* pWndServerNotice = new SUIServerNoticeWnd( m_pGameManager ); CreateWnd( pWndServerNotice, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SERVERNOTICE, false, "공지사항" ); // 스크린샷 창 SUIWnd* pWndServerScreenShot = new SUIWnd( m_pGameManager ); CreateWnd( pWndServerScreenShot, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SERVERSCREENSHOT, false, "스크린 샷" ); //서버선택,서버공지,스크린샷창 위치조정 { int blankwidth = (nResolutionW - (pWndServerList->GetRect().GetWidth() + pWndServerNotice->GetRect().GetWidth() + 5))/2; pWndServerList->MovePos( nResolutionW-blankwidth-pWndServerList->GetRect().GetWidth(), nHalfH - (pWndServerNotice->GetRect().GetHeight()/2) ); pWndServerNotice->MovePos( blankwidth, nHalfH - (pWndServerNotice->GetRect().GetHeight()/2) ); pWndServerScreenShot->MovePos( blankwidth, nHalfH - (pWndServerNotice->GetRect().GetHeight()/2) ); } // 서버 메뉴창 SUIServerListMenuWnd* pServerMenuWnd = new SUIServerListMenuWnd( m_pGameManager ); CreateWnd( pServerMenuWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SERVERMENU, false, "서버 메뉴" ); { int nLoginHeight( pServerMenuWnd->GetRect().GetHeight() ); int nLoginWith( pServerMenuWnd->GetRect().GetWidth() ); pServerMenuWnd->MovePos( GetDeltaX(512) - (nLoginWith / 2), GetDeltaY(662) ); } // 서버 텍스트창(로그인 Text처럼 아무내용도 없음으로 일단 이걸 쓴다.) SUIWnd* pServerTextWnd = new SUIWnd( m_pGameManager ); CreateWnd( pServerTextWnd, KPoint(nAdjustedX + 41*nAdjustedWidth/1024, GetDeltaY(676)), TOGGLE_WINDOW::UIWINDOW_SERVERTEXT, false, "서버 텍스트" ); // IP Block 안내 SUIIPBlockWnd* pIPBlockWnd = new SUIIPBlockWnd( m_pGameManager ); CreateWnd( pIPBlockWnd, KPoint( 324, 320 ), TOGGLE_WINDOW::UIWINDOW_IP_BLOCK, false, "IP BLOCK 안내" ); // 캐릭터 이름 목록 ( 실제 선택창 ... ) SUICharNameListWnd* pWndCharNameList = new SUICharNameListWnd( m_pGameManager ); CreateWnd( pWndCharNameList, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CHARNAMELIST, false, "캐릭터 이름 목록" ); // Character Selection (creation, deletion, security password change, etc.) SUICharSelectWnd* pWndCharSelect = new SUICharSelectWnd( m_pGameManager ); CreateWnd( pWndCharSelect, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CHARSELECT, false, "Character Management" ); { int totalheight = (pWndCharNameList->GetRect().GetHeight() + pWndCharSelect->GetRect().GetHeight() + 16); pWndCharNameList->MovePos( nAdjustedX + (661*nAdjustedWidth/1024), (nResolutionH/2 - totalheight/2) ); pWndCharSelect->MovePos( nAdjustedX + (661*nAdjustedWidth/1024), (nResolutionH/2 - totalheight/2) + pWndCharNameList->GetRect().GetHeight() + 16 ); } // 선택된 캐릭 정보 출력창 SUISelectCharInfoWnd* pWndSelectCharInfo = new SUISelectCharInfoWnd( m_pGameManager ); CreateWnd( pWndSelectCharInfo, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SELECTCHAR_INFO, false, "선택 된 캐릭터 정보 출력" ); pWndSelectCharInfo->MovePos( nAdjustedX + (168*nAdjustedWidth/1024) , GetDeltaY(656) ); // 캐릭터 선택창 화면관리 SUICharScreenControl* pWndCharScreenContro = new SUICharScreenControl( m_pGameManager ); CreateWnd( pWndCharScreenContro, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREATECHAR_ROTATE00, false, "캐릭터 선택 창 화면 관리" ); pWndCharScreenContro->MovePos( nAdjustedX + (480*nAdjustedWidth/1024), GetDeltaY(527) ); // 캐릭터 선택창 text window SUIWnd* pWndCharText = new SUIWnd( m_pGameManager ); CreateWnd( pWndCharText, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CHARSELECTTEXT, false, "캐릭터 선택 텍스트" ); pWndCharText->MovePos( nAdjustedX + (43*nAdjustedWidth/1024), GetDeltaY(727) ); // During character creation, only the window UIWINDOW_CREATECHAR_SECOND is actually used // [ window_lobby_character_customizing.nui ] SUICreateCharSecondDlg* pWndCreateCharSec = new SUICreateCharSecondDlg( m_pGameManager ); CreateWnd( pWndCreateCharSec, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREATECHAR_SECOND, false, "Character Creation Window" ); pWndCreateCharSec->MovePos( GetDeltaX(636), nResolutionH / 2 - pWndCreateCharSec->GetRect().GetHeight() / 2 ); //종족 선택 // 종족 선택 윈도우 SUIRaceSelectWnd* pWndRaceSelect = new SUIRaceSelectWnd( m_pGameManager ); CreateWnd( pWndRaceSelect, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_RACE_SELECT, false, "종족 선택" ); pWndRaceSelect->SetRect(KRect(0,0,nResolutionW,nResolutionH)); //종족 세부사항 정보 윈도우 /// 2011.02.25 - prodongi SUIRaceDescWnd* pWndRaceDesc = new SUIRaceDescWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pWndRaceDesc, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_RACE_DESC, false, "종족 설명" ); pWndRaceDesc->SetRect(KRect(0,0,nResolutionW,nResolutionH)); // 약관 동의 SUILicenseWnd* pWndLicense = new SUILicenseWnd( m_pGameManager ); CreateWnd( pWndLicense, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_LICENSE, false, "약관 동의" ); pWndLicense->MovePos( (nHalfW - (pWndLicense->GetRect().GetWidth()/2)), (nHalfH - (pWndLicense->GetRect().GetHeight()/2)) ); //피부색 윈도우 SUISkinColorWnd* pSkinColorWnd = new SUISkinColorWnd( m_pGameManager ); CreateWnd( pSkinColorWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SKIN_COLOR, false, "피부색 선택" ); pSkinColorWnd->MovePos( (nHalfW - (pSkinColorWnd->GetRect().GetWidth()/2)), (nHalfH - (pSkinColorWnd->GetRect().GetHeight()/2)) ); if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::KR) { // 등급 표시 15세/18세/폭력,언어 int nLeft = KUIWndManager::GetResolution().cx; m_pKoreaWarringGrade_15 = new SUIKoreaWarringWnd( m_pGameManager ); CreateWnd( m_pKoreaWarringGrade_15, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_KOREAWARRING_GRADE_15, false, "등급 표시 ( 15세 )" ); nLeft -= m_pKoreaWarringGrade_15->GetRect().GetWidth(); m_pKoreaWarringGrade_15->MovePos( nLeft, 0 ); m_pKoreaWarringGrade_18 = new SUIKoreaWarringWnd( m_pGameManager ); CreateWnd( m_pKoreaWarringGrade_18, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_KOREAWARRING_GRADE_18, false, "등급 표시 ( 18세 )" ); m_pKoreaWarringGrade_18->MovePos( nLeft, 0 ); m_pKoreaWarringVioLan = new SUIKoreaWarringWnd( m_pGameManager ); CreateWnd( m_pKoreaWarringVioLan, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_KOREAWARRING_VIO_LAN, false, "등급 표시 ( 폭력,언어 )" ); nLeft -= m_pKoreaWarringVioLan->GetRect().GetWidth(); m_pKoreaWarringVioLan->MovePos( nLeft, 0 ); m_pGameManager->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_KOREAWARRING_GRADE_15, false ) ); //게임 등급 m_pGameManager->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_KOREAWARRING_GRADE_18, false ) ); //게임 등급 } SUISecuritySettingWnd* pSecuritySettingWnd = new SUISecuritySettingWnd( m_pGameManager ); CreateWnd( pSecuritySettingWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SECURITYSETTING, false, "보안 설정" ); int left = nHalfW - ( pSecuritySettingWnd->GetRect().GetWidth() / 2 ); int height = nHalfH - ( pSecuritySettingWnd->GetRect().GetHeight() / 2 ); pSecuritySettingWnd->MovePos( left, height ); SUISecuritySettingModifyWnd* pSecuritySettingModifyWnd = new SUISecuritySettingModifyWnd( m_pGameManager ); CreateWnd( pSecuritySettingModifyWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SECURITYSETTINGMODIFY, false, "보안 설정 확인" ); left = nHalfW - ( pSecuritySettingModifyWnd->GetRect().GetWidth() / 2 ); height = nHalfH - ( pSecuritySettingModifyWnd->GetRect().GetHeight() / 2 ); pSecuritySettingModifyWnd->MovePos( left, height ); SUISecurityCharacterWnd* pSecurityCharacterWnd = new SUISecurityCharacterWnd( m_pGameManager ); CreateWnd( pSecurityCharacterWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SECURITYCHARACTER ); left = nHalfW - ( pSecurityCharacterWnd->GetRect().GetWidth() / 2 ); height = nHalfH - ( pSecurityCharacterWnd->GetRect().GetHeight() / 2 ); pSecurityCharacterWnd->MovePos( left, height ); SUISecurityStorageWnd* pSecurityStorageWnd = new SUISecurityStorageWnd( m_pGameManager ); CreateWnd( pSecurityStorageWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SECURITYSTORAGE ); left = nHalfW - ( pSecurityStorageWnd->GetRect().GetWidth() / 2 ); height = nHalfH - ( pSecurityStorageWnd->GetRect().GetHeight() / 2 ); pSecurityStorageWnd->MovePos( left, height ); SUISecurityClearWnd* pSecurityClearWnd = new SUISecurityClearWnd( m_pGameManager ); CreateWnd( pSecurityClearWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SECURITYCLEAR ); left = nHalfW - ( pSecurityClearWnd->GetRect().GetWidth() / 2 ); height = nHalfH - ( pSecurityClearWnd->GetRect().GetHeight() / 2 ); pSecurityClearWnd->MovePos( left, height ); InitWorldGameInterface(); } void SGameInterface::InitWorldGameInterface() { int nHalfW = KUIWndManager::GetResolution().cx / 2; int nHalfH = KUIWndManager::GetResolution().cy / 2; int nSixH = KUIWndManager::GetResolution().cy / 6; // 메인 플레이어 SUIMainFrameWnd* pMainFrameWnd = new SUIMainFrameWnd(m_pGameManager, m_pDisplayInfo); CreateWnd( pMainFrameWnd, KPoint(0,0), TOGGLE_WINDOW::UIWINDOW_MAINFRAME, false, "메인 캐릭터 정보 창" ); // assert( _CrtCheckMemory() && "Memory Error!!!" ); //1024*768 기준에 메인메뉴와 메인서브메뉴의 좌표가 설정되었음으로, 그에 맞게 변환해버림 sfreer 2009.03.30 //만약 위치 수정시 RefeshAllWndPos() 함수부분도 수정해야함. SUIMainMenuWnd* pMainMenuWnd = new SUIMainMenuWnd(m_pGameManager, m_pDisplayInfo); SUIMainMenuSubWnd* pMainMenuSubWnd = new SUIMainMenuSubWnd(m_pGameManager, m_pDisplayInfo); { int nhdw = (KUIWndManager::GetResolution().cx - 1024)/2; int ndy = (KUIWndManager::GetResolution().cy - 768); /* window_main_menuball(리뉴얼).nui (860, 617) (1031, 786) window_main_menupanel(리뉴얼).nui 위치입니다. (866, 317)(1025, 669) */ //// 메인 메뉴 CreateWnd( pMainMenuWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_MAINMENU, false, "메인 메뉴" ); pMainMenuWnd->MovePos(866+nhdw, KUIWndManager::GetResolution().cy - pMainMenuWnd->GetRect().GetHeight()); //// 메인 메뉴 (서브) CreateWnd( pMainMenuSubWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_MAINMENU_SUB, false, "메인 메뉴 (서브)" ); pMainMenuSubWnd->MovePos(866+nhdw, KUIWndManager::GetResolution().cy - pMainMenuSubWnd->GetRect().GetHeight() - pMainMenuWnd->GetRect().GetHeight()); pMainMenuSubWnd->SetShow(false); } SUIMinimapWnd* pMinimapWnd = new SUIMinimapWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pMinimapWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_MINIMAP, false, "미니맵" ); pMinimapWnd->MovePos( KUIWndManager::GetResolution().cx - pMinimapWnd->GetRect().GetWidth(), 0 ); #ifdef _KUI_INVALIDATION pMinimapWnd->ActivateImageCache( false ); #endif SUITargetWnd* pTaretWnd = new SUITargetWnd(m_pGameManager, m_pDisplayInfo); CreateWnd( pTaretWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_TARGET, false, "타겟 (구버젼 - 지금 사용 안함)" ); pTaretWnd->MovePos( (pMinimapWnd->GetRect().left - pTaretWnd->GetRect().GetWidth() ), 0 ); //// 타겟 3D SUITargetPortraitWnd* pTarget3DWnd = new SUITargetPortraitWnd(m_pGameManager); CreateWnd( pTarget3DWnd, KPoint(0,0), TOGGLE_WINDOW::UIWINDOW_TARGETPORTRAIT ); pTarget3DWnd->MovePos( pMinimapWnd->GetRect().left - pTaretWnd->GetRect().GetWidth() - pTarget3DWnd->GetRect().GetWidth(), 0 ); SUINPCDialogWnd* pNPCWnd = new SUINPCDialogWnd(m_pGameManager, m_pDisplayInfo ); CreateWnd( pNPCWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_NPCDIALOG, false, "NPC 대화" ); pNPCWnd->MovePos( nHalfW - pNPCWnd->GetRect().GetWidth() / 2, 0 ); SUIInputNumberWnd* pInputNumberWnd = new SUIInputNumberWnd(m_pGameManager, m_pDisplayInfo); CreateWnd( pInputNumberWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_INPUTNUMBER, false, "인풋 넘버 창" ); pInputNumberWnd->MovePos( nHalfW - pInputNumberWnd->GetRect().GetWidth()/2, nHalfH - pInputNumberWnd->GetRect().GetHeight()/2 ); SUIInputTextWnd* pInputTextWnd = new SUIInputTextWnd(m_pGameManager, m_pDisplayInfo); CreateWnd( pInputTextWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_INPUTTEXT, false, "인풋 텍스트 창" ); pInputTextWnd->MovePos( nHalfW - pInputTextWnd->GetRect().GetWidth()/2, nHalfH - pInputTextWnd->GetRect().GetHeight()/2 ); SUIShopWnd* pShopWnd = new SUIShopWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pShopWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SHOP, false, "상점" ); pShopWnd->MovePos( nHalfW - pShopWnd->GetRect().GetWidth(), nHalfH - pShopWnd->GetRect().GetHeight()/2 ); SUIShopKartWnd* pShopKartWnd = new SUIShopKartWnd(m_pGameManager, m_pDisplayInfo); CreateWnd(pShopKartWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SHOPKART, false, "상점 카트 창"); pShopKartWnd->MovePos(pShopWnd->GetRect().right, pShopWnd->GetRect().bottom - pShopKartWnd->GetRect().GetHeight()); SUITradeWnd* pTradeWnd = new SUITradeWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pTradeWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_TRADE, false, "교환" ); pTradeWnd->MovePos( nHalfW - pTradeWnd->GetRect().GetWidth(), nHalfH - pTradeWnd->GetRect().GetHeight()/2 ); SUIStoreHostWnd* pStoreWnd = new SUIStoreHostWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pStoreWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_STORE_HOST, false, "상점(HOST)" ); pStoreWnd->MovePos( nHalfW - pStoreWnd->GetRect().GetWidth(), nHalfH - pStoreWnd->GetRect().GetHeight()/2 ); SUIStoreClientWnd* pStoreClientWnd = new SUIStoreClientWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pStoreClientWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_STORE_CLIENT, false, "상점(CLIENT)" ); pStoreClientWnd->MovePos( nHalfW - pStoreClientWnd->GetRect().GetWidth(), nHalfH - pStoreClientWnd->GetRect().GetHeight()/2 ); SUIQuestListWnd* pQuestListWnd = new SUIQuestListWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pQuestListWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_QUEST_LIST, false, "퀘스트 목록" ); pQuestListWnd->MovePos( nHalfW - pQuestListWnd->GetRect().GetWidth()*1.5, nHalfH - pQuestListWnd->GetRect().GetHeight()/2 ); SUIQuestRewardWnd* pQuestRewardWnd = new SUIQuestRewardWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pQuestRewardWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_QUEST_REWARD, false, "퀘스트 보상" ); pQuestRewardWnd->MovePos( nHalfW - pQuestRewardWnd->GetRect().GetWidth()*1.5, nHalfH - pQuestRewardWnd->GetRect().GetHeight()/2 ); SUIQuestInfoWnd* pQuestInfoWnd = new SUIQuestInfoWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pQuestInfoWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_QUEST_INFO, false, "퀘스트 정보" ); pQuestInfoWnd->MovePos( nHalfW - pQuestInfoWnd->GetRect().GetWidth()/2, nHalfH - pQuestInfoWnd->GetRect().GetHeight()/2 ); SUICreatureInfoWnd* pCreatureInfoWnd = new SUICreatureInfoWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pCreatureInfoWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN, false, "크리쳐 정보 ( 왼쪽 상단 창 )" ); pCreatureInfoWnd->MovePos( 0, pMainFrameWnd->GetRect().bottom ); SUIEquipCreatureWnd* pEquipCreatureWnd = new SUIEquipCreatureWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pEquipCreatureWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREATUREFORM, false, "크리쳐 편성 창" ); pEquipCreatureWnd->MovePos( nHalfW - pEquipCreatureWnd->GetRect().GetWidth(), nHalfH - pEquipCreatureWnd->GetRect().GetHeight()/2 ); SUIStorageWnd* pStorageWnd = new SUIStorageWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pStorageWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_STORAGE, false, "창고" ); pStorageWnd->MovePos( nHalfW - pStorageWnd->GetRect().GetWidth(), nHalfH - pStorageWnd->GetRect().GetHeight()/2 ); SUICashTitleWnd* pCashTitleWnd = new SUICashTitleWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pCashTitleWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CASH_TITLE, false, "크루샵 타이틀 바" ); pCashTitleWnd->MovePos( nHalfW - pCashTitleWnd->GetRect().GetWidth(), nHalfH - pCashTitleWnd->GetRect().GetHeight()/2 ); SUIGuildTitleWnd* pGuildTitleWnd = new SUIGuildTitleWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pGuildTitleWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_GUILD_TITLE, false, "길드 타이틀 바" ); pGuildTitleWnd->MovePos( nHalfW - pGuildTitleWnd->GetRect().GetWidth()/2, nHalfH - pGuildTitleWnd->GetRect().GetHeight()/2 ); SUIHelpTitleWnd* pHelpTitleWnd = new SUIHelpTitleWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pHelpTitleWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_HELP_TITLE, false, "도움말 타이틀 바" ); pHelpTitleWnd->MovePos( nHalfW - pHelpTitleWnd->GetRect().GetWidth()/2, nHalfH - pHelpTitleWnd->GetRect().GetHeight()/2 ); SUIPopURLTitleWnd* pPopURLTitleWnd = new SUIPopURLTitleWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pPopURLTitleWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_POPURL_TITLE ); pPopURLTitleWnd->MovePos( nHalfW - pPopURLTitleWnd->GetRect().GetWidth()/2, nHalfH - pPopURLTitleWnd->GetRect().GetHeight()/2 ); SUIWorldMapWnd* pWorldMapWnd = new SUIWorldMapWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pWorldMapWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_WORLDMAP, false, "월드맵" ); pWorldMapWnd->MovePos( nHalfW - pWorldMapWnd->GetRect().GetWidth()/2, nHalfH - pWorldMapWnd->GetRect().GetHeight()/2 ); SUILocalSignWnd* pLocalSignWnd = new SUILocalSignWnd( m_pGameManager ); CreateWnd( pLocalSignWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_LOCAL_SIGN, false, "지역 정보" ); #ifdef NDEBUG pLocalSignWnd->MovePos( nHalfW, nSixH ); #else pLocalSignWnd->MovePos( nHalfW, nHalfH ); #endif //별도 Process가 필요 m_pLocalSignWnd = pLocalSignWnd; SUICreatureWnd* pCreatureWnd = new SUICreatureWnd(m_pGameManager, m_pDisplayInfo ); CreateWnd( pCreatureWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREATURE, false, "크리쳐 장착" ); pCreatureWnd->MovePos( KUIWndManager::GetResolution().cx - ( pCreatureWnd->GetRect().GetWidth() + 40 ), KUIWndManager::GetResolution().cy-(pMainMenuWnd->GetRect().GetHeight()+pCreatureWnd->GetRect().GetHeight()) ); SUITaskBarWnd* pTaskBarWnd = new SUITaskBarWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pTaskBarWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_TASKBAR, false, "작업 바 (테스크 바)" ); pTaskBarWnd->MovePos( 0, KUIWndManager::GetResolution().cy - pTaskBarWnd->GetRect().GetHeight() ); SUIHQuickSlotWnd* pHQuickWnd = new SUIHQuickSlotWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pHQuickWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT, false, "퀵슬롯" ); pHQuickWnd->MovePos( 0, pTaskBarWnd->GetRect().top - pHQuickWnd->GetRect().GetHeight() ); SUIChattingWnd* pChatWnd = new SUIChattingWnd(m_pGameManager, m_pDisplayInfo); CreateWnd( pChatWnd, KPoint(0,0), TOGGLE_WINDOW::UIWINDOW_CHATTING, false, "채팅" ); pChatWnd->MovePos( 2, pHQuickWnd->GetRect().top - pChatWnd->GetRect().GetHeight()-5 ); SUIChattingOptionWnd* pChatOptionWnd = new SUIChattingOptionWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pChatOptionWnd, KPoint(0,0), TOGGLE_WINDOW::UIWINDOW_CHAT_OPTION, false, "채팅 옵션" ); pChatOptionWnd->MovePos( 0, KUIWndManager::GetResolution().cy - pChatOptionWnd->GetRect().GetHeight() - pMainMenuWnd->GetRect().GetHeight() ); SUIPartyWndMgr* pPartyWnd = new SUIPartyWndMgr( m_pGameManager, m_pDisplayInfo ); CreateWnd( pPartyWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_PARTY, false, "파티" ); // 2011.10.19 : servantes SUIPartyStateWndMgr* pPartyStateWnd = new SUIPartyStateWndMgr( m_pGameManager, m_pDisplayInfo ); CreateWnd( pPartyStateWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_PARTY_STATE, false, "파티 상태" ); pPartyStateWnd->MovePos( 0, 0 ); SUIPartyWndMenuParty* pPartyMenuWnd = new SUIPartyWndMenuParty( m_pGameManager, m_pDisplayInfo ); // 2011.10.18 : servantes CreateWnd( pPartyMenuWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_PARTY_MENU, false, "파티 메뉴" ); pPartyMenuWnd->MovePos( pPartyWnd->GetRect().right, pPartyWnd->GetRect().top-24 ); SUIPartyRMenuWnd* partyRMenuWnd = new SUIPartyRMenuWnd(m_pGameManager, m_pDisplayInfo); CreateWnd(partyRMenuWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_PARTY_RMENU, false, "파티 메뉴 (마우스 우클릭)" ); ////// private party menu SUIPopupPartyMenuCreatureWnd* popupPartyMenuCreature = new SUIPopupPartyMenuCreatureWnd( m_pGameManager ); // 2011.10.18 : servantes CreateWnd( popupPartyMenuCreature, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_POPUP_PARTY_MENU_CREATURE ); //2011.11.15 - servantes : enum 값의 스트링 변경 popupPartyMenuCreature->MovePos( pPartyWnd->GetRect().right, pPartyWnd->GetRect().top-24 ); SUIPartyCreate* pPartyCreate = new SUIPartyCreate( m_pGameManager, m_pDisplayInfo ); CreateWnd( pPartyCreate, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_PARTY_CREATE, false, "파티 생성" ); pPartyCreate->MovePos( pPartyWnd->GetRect().right, pPartyWnd->GetRect().top ); SUICommunityWnd* pCommunity = new SUICommunityWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pCommunity, KPoint(0,0), TOGGLE_WINDOW::UIWINDOW_COMMUNITY, false, "커뮤니티" ); pCommunity->MovePos( nHalfW, nSixH ); SUIPartyMatchingWnd* pPartyMatching = new SUIPartyMatchingWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pPartyMatching, KPoint(0,0), TOGGLE_WINDOW::UIWINDOW_PARTYMATCHING, false, "파티매칭" ); pPartyMatching->MovePos( nHalfW/4, nSixH ); SUIPartyMatchingRegisterWnd* pPartyMatchingRegister = new SUIPartyMatchingRegisterWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pPartyMatchingRegister, KPoint(0,0), TOGGLE_WINDOW::UIWINDOW_PARTYMATCHING_REGISTER, false, "파티매칭등록" ); pPartyMatchingRegister->MovePos( pPartyMatching->GetRect().right, pPartyMatching->GetRect().top );// 파티매칭 #ifndef NDEBUG //#define _COMMUNITY #ifdef _COMMUNITY //Friend SUICommunityFriend* pFriendWnd = new SUICommunityFriend( m_pGameManager ); CreateWnd( pFriendWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_FRIEND ); pFriendWnd->MovePos( nHalfW, nSixH ); SUICommunityCut* pCutWnd = new SUICommunityCut( m_pGameManager ); CreateWnd( pCutWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CUT ); pCutWnd->MovePos( nHalfW, nSixH ); #endif #endif SUIDungeonStoneWnd* pDungeonStoneWnd = new SUIDungeonStoneWnd(m_pGameManager); CreateWnd( pDungeonStoneWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_DUNGEON_STONE, false, "던전 스톤" ); pDungeonStoneWnd->MovePos( 130, 110 ); //공격대 미니창 2011. 10 .10 - marine KRect RectAttack = pMinimapWnd->GetRect(); SUIDungeonUnitMiniWnd* pDungeonAttackMiniWnd = new SUIDungeonUnitMiniWnd(m_pGameManager); CreateWnd( pDungeonAttackMiniWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_DUNGEON_UNIT_MINI, false, "공격대 (미니)" ); pDungeonAttackMiniWnd->MovePos( RectAttack.left, RectAttack.bottom ); //테스트 던전 공대 SUIDungeonUnitWnd* pDungeonAttackWnd = new SUIDungeonUnitWnd(m_pGameManager); CreateWnd( pDungeonAttackWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_DUNGEON_UNIT, false, "공격대 (공격)" ); pDungeonAttackWnd->MovePos( RectAttack.left, RectAttack.bottom ); SUIDungeonUnitInvitation* pDungeonAttackInvitationWnd = new SUIDungeonUnitInvitation(m_pGameManager); CreateWnd( pDungeonAttackInvitationWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_DUNGEON_UNIT_INVITATION, false, "공격대 (초대)" ); pDungeonAttackInvitationWnd->MovePos( nHalfW,RectAttack.bottom ); // 2011. 10. 26 - marine 길드리스트 (공대 파티장, 파티원 초대용) SUIGuildMemberListView* pGuildMeberListView = new SUIGuildMemberListView(m_pGameManager); CreateWnd( pGuildMeberListView, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_GUILD_MEMBER_LIST, false, "길드 멤버 리스트" ); KRect RectGuildMember = pDungeonAttackInvitationWnd->GetRect(); RectGuildMember.left -= pGuildMeberListView->GetRect().GetWidth(); pGuildMeberListView->MovePos(RectGuildMember.left,RectGuildMember.top); SUITitleWnd* pTitleWnd = new SUITitleWnd(m_pGameManager, m_pDisplayInfo); CreateWnd( pTitleWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_TITLE_MAIN, false, "호칭" ); pTitleWnd->MovePosCustom( KUIWndManager::GetResolution() ); SUITitleGainResultWnd* pTitleGainResultWnd = new SUITitleGainResultWnd(m_pGameManager); CreateWnd( pTitleGainResultWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_TITLE_GAIN_RESULT, false, "호칭 획득 결과" ); pTitleGainResultWnd->MovePosCustom( KUIWndManager::GetResolution() ); SUIInventoryWnd* pInvenWnd = new SUIInventoryWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pInvenWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_INVENTORY, false, "인벤토리" ); pInvenWnd->MovePos( KUIWndManager::GetResolution().cx - pInvenWnd->GetRect().GetWidth() - GetDeltaX(50), pMinimapWnd->GetRect().bottom ); SUIDurabilityWnd * pDurability = new SUIDurabilityWnd( m_pGameManager ); CreateWnd( pDurability, KPoint(0,0), TOGGLE_WINDOW::UIWINDOW_DURABILITY, false, "내구도" ); SUIEquipmentWnd * pEquipmentWnd = new SUIEquipmentWnd( m_pGameManager, m_pDisplayInfo, pInvenWnd ); CreateWnd( pEquipmentWnd, KPoint(0,0), TOGGLE_WINDOW::UIWINDOW_EQUIPMENT, false, "장비" ); pEquipmentWnd->MovePos( KUIWndManager::GetResolution().width / 2 - pEquipmentWnd->GetRect().GetWidth(), pMinimapWnd->GetRect().bottom ); SUIPopupEquip * pPopupEquip = new SUIPopupEquip( m_pGameManager ); CreateWnd( pPopupEquip, KPoint(0,0), TOGGLE_WINDOW::UIWINDOW_EQUIPMENT_POPUP, false, "장비(우클릭 팝업)" ); SUIDestructionWnd * pDestructionWnd = new SUIDestructionWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pDestructionWnd, KPoint(0,0), TOGGLE_WINDOW::UIWINDOW_DESTRUCTION, false, "파괴" ); SUICashStorageWnd* pCashStorageWnd = new SUICashStorageWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pCashStorageWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CASH_STORAGE, false, "보관함" ); pCashStorageWnd->MovePos( pInvenWnd->GetRect().left-pCashStorageWnd->GetRect().GetWidth(), pInvenWnd->GetRect().bottom -pCashStorageWnd->GetRect().GetHeight()-20 ); SUIInvCombineWnd* pItemCombineWnd = new SUIInvCombineWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pItemCombineWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_ITEMCOMBINE, false, "아이템 조합" ); pItemCombineWnd->MovePos( (KUIWndManager::GetResolution().cx-pItemCombineWnd->GetRect().GetWidth())/2, (KUIWndManager::GetResolution().cy - pItemCombineWnd->GetRect().GetHeight())/2 ); #ifdef CONTRIBUTION SUIContributionWnd* pContributionWnd = new SUIContributionWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pContributionWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_ITEMCONTRIBUTION, false, "기부" ); pContributionWnd->MovePos( (KUIWndManager::GetResolution().cx-pContributionWnd->GetRect().GetWidth())/2, (KUIWndManager::GetResolution().cy - pContributionWnd->GetRect().GetHeight())/2 ); #endif /// 2011.02.16 - prodongi SUIRechargeMsgBoxWnd* rechargeMsgBox = new SUIRechargeMsgBoxWnd(m_pGameManager); CreateWnd(rechargeMsgBox, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_RECHARGE_MSGBOX); SUIAuctionWnd* pAuctionWnd = new SUIAuctionWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pAuctionWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_AUCTION, false, "경매" ); pAuctionWnd->MovePos( ( KUIWndManager::GetResolution( ).cx - pAuctionWnd->GetRect( ).GetWidth( ) ) / 2, ( KUIWndManager::GetResolution( ).cy / 2 ) - ( pAuctionWnd->GetRect( ).GetHeight( ) * 3 / 5 ) ); // 상태이상/지속효과 가로 SUIStateHEffectWnd* pStateHEffectWnd = new SUIStateHEffectWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pStateHEffectWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_STATE_H_EFFECT, false, "버프" ); pStateHEffectWnd->MovePos( pMainFrameWnd->GetRect().right-2, 0 ); // 스킬 SUISkillWnd* pSkillWnd = new SUISkillWnd(m_pGameManager, m_pDisplayInfo); CreateWnd( pSkillWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SKILL, false, "스킬" ); pSkillWnd->MovePos( nHalfW, pMainFrameWnd->GetRect().bottom ); SUISkillTreeFundWnd* pSkillFundWnd = new SUISkillTreeFundWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pSkillFundWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SKILLFUND, false, "스킬 트리" ); pSkillFundWnd->MovePos( nHalfW - pSkillFundWnd->GetRect().GetWidth(), nHalfH - pSkillFundWnd->GetRect().GetHeight() ); SUIMotionWnd* pMotionWnd = new SUIMotionWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pMotionWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_MOTION, false, "모션" ); pMotionWnd->MovePos( KUIWndManager::GetResolution().cx - pMotionWnd->GetRect().GetWidth() - GetDeltaX(50), pMinimapWnd->GetRect().bottom ); SUISystemMainWnd* pSystemMainWnd = new SUISystemMainWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pSystemMainWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SYSTEM_MAIN, false, "시스템 메인" ); pSystemMainWnd->MovePos( nHalfW - pSystemMainWnd->GetRect().GetWidth()/2, nHalfH - pSystemMainWnd->GetRect().GetHeight()/2 ); SUISystemWnd* pSystemWnd = new SUISystemWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pSystemWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SYSTEM, false, "시스템" ); pSystemWnd->MovePos( nHalfW - pSystemWnd->GetRect().GetWidth()/2, nHalfH - pSystemWnd->GetRect().GetHeight()/2 ); //부활관련 메세지 박스를 여기서 처리하고 addSUIWnd하게 되면 WndMgr에서 ModalList에 넣고서 또 삭제하게 된다.... //MODAL을 관리하는 부분에서 재사용하는 모달들은 따로 관리하게 바꿔야 하겠다. 코드는 KUIWndManager.cpp에 들어있다. -N4- //부활 SUIResurrectWnd* pResurrectWnd = new SUIResurrectWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pResurrectWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_RESURRECT, false, "부활" ); pResurrectWnd->MovePos( nHalfW - pResurrectWnd->GetRect().GetWidth()/2, nHalfH - pResurrectWnd->GetRect().GetHeight()/2 ); SUIResurrectWnd* pResurrectPVPWnd = new SUIResurrectWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pResurrectPVPWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_RESURRECT_PVP, false, "대련 부활" ); pResurrectPVPWnd->MovePos( nHalfW - pResurrectPVPWnd->GetRect().GetWidth()/2, nHalfH - pResurrectPVPWnd->GetRect().GetHeight()/2 ); SUIRecallWnd* pRecallWnd = new SUIRecallWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pRecallWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_RECALL, false, "소환"); pRecallWnd->MovePos( nHalfW - pRecallWnd->GetRect().GetWidth()/2, nHalfH - pRecallWnd->GetRect().GetHeight()/2 ); SUIContributionMsgboxWnd* pContributionMsgboxWnd = new SUIContributionMsgboxWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pContributionMsgboxWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_MSGBOX, false, "기부 메시지 박스" ); pContributionMsgboxWnd->MovePos( nHalfW - pContributionMsgboxWnd->GetRect().GetWidth()/2, nHalfH - pContributionMsgboxWnd->GetRect().GetHeight()/2 ); SUIRankingWnd* pContributionRankingWnd = new SUIRankingWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pContributionRankingWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_RANKING, false, "기부 랭킹" ); pContributionRankingWnd->MovePos( nHalfW - pContributionRankingWnd->GetRect().GetWidth()/2, nHalfH - pContributionRankingWnd->GetRect().GetHeight()/2 ); SUIContributionRewardConfirmWnd* pContributionConfirm = new SUIContributionRewardConfirmWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pContributionConfirm, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_REWARD_CONFIRM, false, "기부 보상 아이템 받기 확인 창" ); pContributionConfirm->MovePos( nHalfW - pContributionConfirm->GetRect().GetWidth()/2, nHalfH - pContributionConfirm->GetRect().GetHeight()/2 ); /// 2011.02.09 - prodongi SUICharacterInfoWnd* pCharInfoWnd = new SUICharacterInfoWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pCharInfoWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CHARINFO, false, "캐릭터 정보" ); pCharInfoWnd->MovePos( KUIWndManager::GetResolution().cx - pCharInfoWnd->GetRect().GetWidth() - GetDeltaX(50), pMinimapWnd->GetRect().bottom ); SUICreaturePageWnd* pCreaturePageWnd = new SUICreaturePageWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pCreaturePageWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE ); pCreaturePageWnd->MovePos( nHalfW - pCreaturePageWnd->GetRect().GetWidth(), pMainFrameWnd->GetRect().bottom ); SUIDetailCreaturePageWnd* pDetailCreatureWnd = new SUIDetailCreaturePageWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pDetailCreatureWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREATURE_DETAIL ); pDetailCreatureWnd->MovePos( pCreaturePageWnd->GetRect().right, pCreaturePageWnd->GetRect().bottom - pDetailCreatureWnd->GetRect().GetHeight()-20 ); SUICreatureSkillWnd* pCreatureSkillWnd = new SUICreatureSkillWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pCreatureSkillWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, false, "크리쳐 스킬" ); pCreatureSkillWnd->MovePos( nHalfW - pCreatureSkillWnd->GetRect().GetWidth(), pMainFrameWnd->GetRect().bottom ); SUICreatureSkillFundWnd* pCreatureSkillFundWnd = new SUICreatureSkillFundWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pCreatureSkillFundWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILLFUND ); pCreatureSkillFundWnd->MovePos( pCreatureSkillWnd->GetRect().right, pCreatureSkillWnd->GetRect().bottom-pCreatureSkillFundWnd->GetRect().GetHeight()-20 ); SUIPetCommandWnd* pPetCmdWnd = new SUIPetCommandWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pPetCmdWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_PET_COMMAND, false, "펫 컨트롤" ); pPetCmdWnd->MovePos( KUIWndManager::GetResolution().width - pPetCmdWnd->GetRect().GetWidth(), KUIWndManager::GetResolution().height - pPetCmdWnd->GetRect().GetHeight() - 120 ); SUICreatureCardFrontWnd* pCreatureCardFrontWnd = new SUICreatureCardFrontWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pCreatureCardFrontWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREATURE_CARD_FRONT, false, "크리쳐 카드 (앞)" ); pCreatureCardFrontWnd->MovePos( nHalfW - pCreatureCardFrontWnd->GetRect().GetWidth()/2, nHalfH - pCreatureCardFrontWnd->GetRect().GetHeight()/2 ); SUICreatureCardBackWnd* pCreatureCardBackWnd = new SUICreatureCardBackWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pCreatureCardBackWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREATURE_CARD_BACK, false, "크리쳐 카드 (뒤)" ); pCreatureCardBackWnd->MovePos( nHalfW - pCreatureCardBackWnd->GetRect().GetWidth()/2, nHalfH - pCreatureCardBackWnd->GetRect().GetHeight()/2 ); SUIBossMonsterCardWnd* bossMonsterCardWnd = new SUIBossMonsterCardWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( bossMonsterCardWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_BOSS_MONSTER_CARD, false, "보스 몬스터 카드" ); bossMonsterCardWnd->MovePos( nHalfW - bossMonsterCardWnd->GetRect().GetWidth()/2, nHalfH - bossMonsterCardWnd->GetRect().GetHeight()/2 ); SUIFulldownPlayerWnd* pFulldownPlayerWnd = new SUIFulldownPlayerWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pFulldownPlayerWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_FULLDOWN_PLAYER ); SUIFulldownTargetPlayerWnd* pFulldownTargetPlayerWnd = new SUIFulldownTargetPlayerWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pFulldownTargetPlayerWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_FULLDOWN_TARGETPLAYER ); SUIFulldownTargetMonsterWnd* pFulldownTargetMonsterWnd = new SUIFulldownTargetMonsterWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pFulldownTargetMonsterWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_FULLDOWN_TARGETMONSTER ); SUIFulldownMinimapWnd* pFulldownMinimapWnd = new SUIFulldownMinimapWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pFulldownMinimapWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_FULLDOWN_MINIMAP ); SUIFulldownItemDropWnd* pFulldownItemDropWnd = new SUIFulldownItemDropWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pFulldownItemDropWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_FULLDOWN_ITEMDROP ); SUIFulldownCreatureWnd* pFulldownCreaturWnd = new SUIFulldownCreatureWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pFulldownCreaturWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_FULLDOWN_CREATURE ); SUIJewelEquipWnd* pJewelEquipWnd = new SUIJewelEquipWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pJewelEquipWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_JEWEL_EQUIP, false, "Soulstones installation" ); pJewelEquipWnd->MovePos( (nHalfW - (pJewelEquipWnd->GetRect().GetWidth()/2)), (nHalfH - (pJewelEquipWnd->GetRect().GetHeight()/2)) ); SUISoulChargeWnd* pSoulChargeWnd = new SUISoulChargeWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pSoulChargeWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SOUL_CHARGE ); pSoulChargeWnd->MovePos( (nHalfW - (pSoulChargeWnd->GetRect().GetWidth()/2)), (nHalfH - (pSoulChargeWnd->GetRect().GetHeight()/2)) ); SUIInGameLogoutWnd* pInGameLogoutWnd = new SUIInGameLogoutWnd( m_pGameManager ); CreateWnd( pInGameLogoutWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_IN_GAME_LOGOUT, false, "로그 아웃" ); pInGameLogoutWnd->MovePos( (nHalfW - (pInGameLogoutWnd->GetRect().GetWidth()/2)), ((KUIWndManager::GetResolution().cy / 4) - (pInGameLogoutWnd->GetRect().GetHeight() / 2) ) ); // #2.1.2.11.1 // HuntaHolicLobby SUIHuntaHolicLobbyWnd* pHuntaHolicLobbyWnd = new SUIHuntaHolicLobbyWnd( m_pGameManager ); CreateWnd( pHuntaHolicLobbyWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_LOBBY ); pHuntaHolicLobbyWnd->MovePos( ( nHalfW - ( pHuntaHolicLobbyWnd->GetRect().GetWidth() / 2 ) ), ( nHalfH - ( pHuntaHolicLobbyWnd->GetRect().GetHeight() / 2 ) ) ); SUIHuntaHolicCreateInstanceWnd* pHuntaHolicCreateInstanceWnd = new SUIHuntaHolicCreateInstanceWnd( m_pGameManager ); CreateWnd( pHuntaHolicCreateInstanceWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_CREATE_INSTANCE ); pHuntaHolicCreateInstanceWnd->MovePos( ( nHalfW - ( pHuntaHolicCreateInstanceWnd->GetRect().GetWidth() / 2 ) ), ( nHalfH - ( pHuntaHolicCreateInstanceWnd->GetRect().GetHeight() / 2 ) ) ); SUIHuntaHolicConfirmPasswordWnd* pHuntaHolicConfirmPasswordWnd = new SUIHuntaHolicConfirmPasswordWnd( m_pGameManager ); CreateWnd( pHuntaHolicConfirmPasswordWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_CONFIRM_PASSWORD ); pHuntaHolicConfirmPasswordWnd->MovePos( ( nHalfW - ( pHuntaHolicConfirmPasswordWnd->GetRect().GetWidth() / 2 ) ), ( nHalfH - ( pHuntaHolicConfirmPasswordWnd->GetRect().GetHeight() / 2 ) ) ); SUIHuntaHolicInstanceWnd* pHuntaHolicInstanceWnd = new SUIHuntaHolicInstanceWnd( m_pGameManager ); CreateWnd( pHuntaHolicInstanceWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_INSTANCE ); pHuntaHolicInstanceWnd->MovePos( KUIWndManager::GetResolution().cx - 284, KUIWndManager::GetResolution().cy - 262 ); SUIHuntaHolicScoreBoardWnd* pHuntaHolicScoreBoardWnd = new SUIHuntaHolicScoreBoardWnd( m_pGameManager ); CreateWnd( pHuntaHolicScoreBoardWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_SCOREBOARD ); pHuntaHolicScoreBoardWnd->MovePos( KUIWndManager::GetResolution().cx - 163, KUIWndManager::GetResolution().cy - 301 ); SUIHuntaHolicResultWnd* pHuntaHolicResultWnd = new SUIHuntaHolicResultWnd( m_pGameManager ); CreateWnd( pHuntaHolicResultWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_RESULT ); pHuntaHolicResultWnd->MovePos( nHalfW - 204, nHalfH - 200 ); SUIChangeNameWnd* pChangeNameWnd = new SUIChangeNameWnd( m_pGameManager ); CreateWnd( pChangeNameWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_CHANGE_NAME, false, "이름 변경" ); pChangeNameWnd->MovePos( ( nHalfW - ( pChangeNameWnd->GetRect().GetWidth() / 2 ) ), ( nHalfH - ( pChangeNameWnd->GetRect().GetHeight() / 2 ) ) ); // 퀘스트 정보 창 추가. // 수련자의섬 리뉴얼 관련 // 2009-03-02: hunee /// 2011.07.05 - prodongi SUIBadgeWnd* pBadgeWnd = new SUIBadgeWnd( m_pGameManager ); CreateWnd( pBadgeWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_BADGE ); pBadgeWnd->MovePos( ( nHalfW - ( pBadgeWnd->GetRect().GetWidth() / 2 ) ), ( nHalfH - ( pBadgeWnd->GetRect().GetHeight() / 2 ) ) ); SUIInstanceEntranceWnd *pInstanceEntranceWnd = new SUIInstanceEntranceWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pInstanceEntranceWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_INSTANCE_ENTRANCE ); pInstanceEntranceWnd->MovePos( ( nHalfW - ( pInstanceEntranceWnd->GetRect().GetWidth() / 2 ) ), ( nHalfH - ( pInstanceEntranceWnd->GetRect().GetHeight() / 2 ) ) ); SUIInstanceTaskbarEntranceWnd *pInstanceTaskbarEntranceWnd = new SUIInstanceTaskbarEntranceWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pInstanceTaskbarEntranceWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_INSTANCE_TASKBAR_ENTRANCE ); pInstanceTaskbarEntranceWnd->syncPos(); /// 2012.05.03 - prodongi //------------------------------------------- // 길드 GUILD UI. // *bintitle // 길드 메인. SUIWnd * pGuildWnd = new SUIGuildWnd( m_pGameManager ); pGuildWnd->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pGuildWnd, KPoint(261, 90), TOGGLE_WINDOW::UIWINDOW_GUILD_MAINWND, false, "길드 메인" ); KRect rtGuildMain = pGuildWnd->GetRect(); // 길드정보. SUIWnd * pGuildSubInfoWnd = new SUIGuildSubInfoWnd( m_pGameManager ); pGuildSubInfoWnd->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pGuildSubInfoWnd, KPoint( rtGuildMain.GetWidth(), 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_INFO, false, "길드 정보" ); // 길드관리. SUIWnd * pGuildSubManageWnd = new SUIGuildSubManageWnd( m_pGameManager ); pGuildSubManageWnd->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pGuildSubManageWnd, KPoint( rtGuildMain.GetWidth(), 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE, false, "길드 관리" ); // 길드마스터. SUIWnd * pGuildSubMasterWnd = new SUIGuildSubMasterWnd( m_pGameManager ); pGuildSubMasterWnd->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pGuildSubMasterWnd, KPoint( rtGuildMain.GetWidth(), 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MASTER, false, "길드 마스터" ); // 메모뷰 팝업 Wnd. SUIWnd * pMemoViewWnd = new SUIMemoViewWnd( m_pGameManager ); CreateWnd( pMemoViewWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_MEMOWND, false, "메모 뷰 팝업" ); m_pUIWndManager->AddWnd( pMemoViewWnd ); // WndManager에 Wnd 강제등록( Dynamic Wnd 만 등록되는 관계로 강제처리 ). // 길드맴버관련 팝업. SUIWnd * pGuildMemberPopup = new SUIMemberPopupWnd( m_pGameManager ); pGuildMemberPopup->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pGuildMemberPopup, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUBMENU_RIGHTCLICK, false, "길드 멤버 우클릭 메뉴 팝업" ); // 길드관리 - 길드원가입 - 길드초대윈도우. SUIWnd * pGuildInvitation = new SUIInvitationWnd( m_pGameManager ); pGuildInvitation->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pGuildInvitation, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_INVITATION, false, "길드원 초대" ); // // 길드관리 - 길드원관리 - 길드원등급 윈도우. SUIWnd * pGuildClassManage = new SUIClassManageWnd( m_pGameManager ); pGuildClassManage->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pGuildClassManage, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_CLASS, false, "길드원 등급" ); // 길드등급 팝업메뉴. SUIWnd * pGuildClassPopup = new SUIClassPopupWnd( m_pGameManager ); pGuildClassPopup->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pGuildClassPopup, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUBMENU_CLASS_RIGHTCLICK, false, "길드 등급 팝업" ); // 길드원제명 팝업 윈도우. SUIWnd * pGuildExpulsion = new SUIExpulsionWnd( m_pGameManager ); pGuildExpulsion->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pGuildExpulsion, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_EXPULSION, false, "길드원 제명 팝업" ); // 연합길드 정보 팝업 윈도우. SUIWnd * pAllianceGuild = new SUIAllianceGuild( m_pGameManager ); pAllianceGuild->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pAllianceGuild, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_INFO_ALLIANCE, false, "연합 길드 정보 팝업" ); // 길드장인계 팝업 윈도우. SUIWnd * pMasterTransfer = new SUIMasterTransfer( m_pGameManager ); pMasterTransfer->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pMasterTransfer, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MASTER_PROMOTE, false, "길드장 인계 팝업" ); // 공격대결성 팝업 윈도우. SUIWnd * pTeamPopup = new SUITeamWnd( m_pGameManager ); pTeamPopup->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pTeamPopup, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_TEAM, false, "공격대 결성 팝업" ); // 공격대 도움말 팝업 윈도우. SUIWnd * pHelpTeamPopup = new SUIHelpTeamPopupWnd( m_pGameManager ); CreateWnd( pHelpTeamPopup, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_TEAM_HELP, false, "공격대 도움말 팝업" ); CreateWnd( new SUIFormulaListWnd( m_pGameManager ) , KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_FORMULA, false, "공식 리스트" ); CreateWnd( new SUIUpgradeWnd( m_pGameManager, m_pDisplayInfo ), KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_UPGRADE, false, "강화" ); // 아이템강화 윈도우. CreateWnd( new SUIRepairWnd( m_pGameManager, m_pDisplayInfo ), KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_REPAIR, false, "수리" ); // 아이템수리 윈도우. CreateWnd( new SUIProgressWnd( m_pGameManager ), KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_MIX_PROGRESS, false, "프로그레시브 바" ); // 아이템합성 진척도 출력 윈도우. CreateWnd( new SUIHelpWnd( m_pGameManager ), KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_HELP_WND, false, "도움말" ); SUICreatureFarmWnd* pCreatureFramWnd = new SUICreatureFarmWnd( m_pGameManager, m_pDisplayInfo ); // servantes 2011.01.17 CreateWnd( pCreatureFramWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND, false, "크리쳐 농장" ); SUICreatureFarmHelpWnd* pCreatureFramHelpWnd = new SUICreatureFarmHelpWnd( m_pGameManager, m_pDisplayInfo ); // servantes 2011.02.17 CreateWnd( pCreatureFramHelpWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_HELP_WND, false, "크리쳐 농장 도움말" ); SUIMissionEnteranceWnd* missionEnterWnd = new SUIMissionEnteranceWnd( m_pGameManager, m_pDisplayInfo ); // servantes 2011.06.30 CreateWnd( missionEnterWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_MISSION_ENTERANCE_WND, false, "인스턴스 던전 입장" ); SUIMissionTitleWnd* missionTitleWnd = new SUIMissionTitleWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( missionTitleWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_MISSION_TITLE_WND, false, "인스턴스 던전 제목" ); SUIPopupPartyMenuCharacterWnd* popupPartyMenuCharacter = new SUIPopupPartyMenuCharacterWnd( m_pGameManager ); // 2011.09.16 - servantes : 우클릭 메뉴1 UI CreateWnd( popupPartyMenuCharacter, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_POPUP_PARTY_MENU_CHARACTER ); SUIRaidSiegeStatusWnd* raidSiegeStatusWnd = new SUIRaidSiegeStatusWnd(m_pGameManager); /// 2011.10.12 - prodongi CreateWnd(raidSiegeStatusWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_RAID_SIEGE_STATUS, false, "레이드 시즈 상태 창"); if( raidSiegeStatusWnd ) { raidSiegeStatusWnd->SetShow(false); raidSiegeStatusWnd->SetRect(KRect(0, 0, GetGameOption().GetResolution_Width(), GetGameOption().GetResolution_Height())); } /// 2011.11.29 - prodongi SUIMissionWnd* missionWnd = new SUIMissionWnd(m_pGameManager); if (CreateWnd(missionWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_MISSION, false, "미션") ) missionWnd->SetShow(false); /// guide tooltip if (!createWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_GUIDE_TOOLTIP)) assert(0 && "failed create guide tooltip wnd"); /// announce if (!createWindow(TOGGLE_WINDOW::UIWINDOW_ANNOUNCE)) assert(0 && "failed create announce wnd"); /// notification if (!createWindow(TOGGLE_WINDOW::UIWINDOW_NOTIFICATION)) assert(0 && "failed create notification wnd"); initArenaWnds(); InitAwakeningWnd(); InitDecomposeWnd(); InitTargetWnds(); } BOOL SGameInterface::CreateGameInterface( TOGGLE_WINDOW::_UIWINDOW_TYPE eWnd_id ) { int nHalfW = KUIWndManager::GetResolution().cx / 2; int nHalfH = KUIWndManager::GetResolution().cy / 2; int nSixH = KUIWndManager::GetResolution().cy / 6; switch( eWnd_id ) { case TOGGLE_WINDOW::UIWINDOW_SHOP: case TOGGLE_WINDOW::UIWINDOW_SHOPKART: { //// 상점 창 _oprint( "Create : SUIShopWnd\n" ); SUIShopWnd* pShopWnd = new SUIShopWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pShopWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SHOP ); pShopWnd->MovePos( nHalfW - pShopWnd->GetRect().GetWidth(), nHalfH - pShopWnd->GetRect().GetHeight()/2 ); //// 상점 카트 창 _oprint( "Create : SUIShopKartWnd\n" ); SUIShopKartWnd* pShopKartWnd = new SUIShopKartWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pShopKartWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SHOPKART ); pShopKartWnd->MovePos( pShopWnd->GetRect().right, pShopWnd->GetRect().bottom - pShopKartWnd->GetRect().GetHeight() ); } break; case TOGGLE_WINDOW::UIWINDOW_TRADE: { //// trade _oprint( "Create : SUITradeWnd\n" ); SUITradeWnd* pTradeWnd = new SUITradeWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pTradeWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_TRADE ); pTradeWnd->MovePos( nHalfW - pTradeWnd->GetRect().GetWidth(), nHalfH - pTradeWnd->GetRect().GetHeight()/2 ); } break; case TOGGLE_WINDOW::UIWINDOW_STORE_HOST: { //// store _oprint( "Create : SUIStoreHostWnd\n" ); SUIStoreHostWnd* pStoreWnd = new SUIStoreHostWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pStoreWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_STORE_HOST ); pStoreWnd->MovePos( nHalfW - pStoreWnd->GetRect().GetWidth(), nHalfH - pStoreWnd->GetRect().GetHeight()/2 ); } break; case TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN: { SUIMainFrameWnd* pMainFrameWnd = (SUIMainFrameWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINFRAME ); if( NULL == pMainFrameWnd ) return FALSE; ////// creature hp/mp _oprint( "Create : SUICreatureMainWnd\n" ); SUICreatureInfoWnd* pCreatureInfoWnd = new SUICreatureInfoWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pCreatureInfoWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN ); /// 2011.01.11 - prodongi pCreatureInfoWnd->MovePos( 0, pMainFrameWnd->GetRect().bottom-4 ); } break; case TOGGLE_WINDOW::UIWINDOW_CREATUREFORM: { ////// equip creature _oprint( "Create : SUIEquipCreatureWnd\n" ); SUIEquipCreatureWnd* pEquipCreatureWnd = new SUIEquipCreatureWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pEquipCreatureWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREATUREFORM ); pEquipCreatureWnd->MovePos( nHalfW - pEquipCreatureWnd->GetRect().GetWidth(), nHalfH - pEquipCreatureWnd->GetRect().GetHeight()/2 ); } break; case TOGGLE_WINDOW::UIWINDOW_STORAGE: { //// 창고 창 _oprint( "Create : SUIStorageWnd\n" ); SUIStorageWnd* pStorageWnd = new SUIStorageWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pStorageWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_STORAGE ); pStorageWnd->MovePos( nHalfW - pStorageWnd->GetRect().GetWidth(), nHalfH - pStorageWnd->GetRect().GetHeight()/2 ); } break; case TOGGLE_WINDOW::UIWINDOW_LOCAL_SIGN: { ////// 지역정보 _oprint( "Create : SUILocalSignWnd\n" ); SUILocalSignWnd* pLocalSignWnd = new SUILocalSignWnd( m_pGameManager ); CreateWnd( pLocalSignWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_LOCAL_SIGN ); #ifdef NDEBUG pLocalSignWnd->MovePos( nHalfW, nSixH ); #else pLocalSignWnd->MovePos( nHalfW, nHalfH ); #endif //별도 Process가 필요 m_pLocalSignWnd = pLocalSignWnd; } break; case TOGGLE_WINDOW::UIWINDOW_PARTY_STATE: { _oprint( "Create : SUIPartyStateWnd\n" ); // 2011.09.05 - servantes SUIPartyStateWndMgr* pPartyStateWnd = new SUIPartyStateWndMgr( m_pGameManager, m_pDisplayInfo ); CreateWnd( pPartyStateWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_PARTY_STATE ); pPartyStateWnd->MovePos( 0, 0 ); } break; case TOGGLE_WINDOW::UIWINDOW_COMMUNITY: { //Community _oprint( "Create : SUIChattingOptionWnd\n" ); SUICommunityWnd* pCommunity = new SUICommunityWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pCommunity, KPoint(0,0), TOGGLE_WINDOW::UIWINDOW_COMMUNITY ); pCommunity->MovePos( nHalfW, nSixH ); } break; #ifndef NDEBUG //#define _COMMUNITY #ifdef _COMMUNITY case TOGGLE_WINDOW::UIWINDOW_FRIEND: { //Friend SUICommunityFriend* pFriendWnd = new SUICommunityFriend( m_pGameManager ); CreateWnd( pFriendWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_FRIEND ); pFriendWnd->MovePos( nHalfW, nSixH ); } break; case TOGGLE_WINDOW::UIWINDOW_CUT: { SUICommunityCut* pCutWnd = new SUICommunityCut( m_pGameManager ); CreateWnd( pCutWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CUT ); pCutWnd->MovePos( nHalfW, nSixH ); } break; #endif #endif case TOGGLE_WINDOW::UIWINDOW_DUNGEON_STONE: { //테스트 던전 스톤 SUIDungeonStoneWnd* pDungeonStoneWnd = new SUIDungeonStoneWnd(m_pGameManager); CreateWnd( pDungeonStoneWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_DUNGEON_STONE ); pDungeonStoneWnd->MovePos( 130, 110 ); } break; case TOGGLE_WINDOW::UIWINDOW_DESTRUCTION: { // 아이템 파괴 윈도우. SUIDestructionWnd * pDestructionWnd = new SUIDestructionWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pDestructionWnd, KPoint(0,0), TOGGLE_WINDOW::UIWINDOW_DESTRUCTION ); } break; case TOGGLE_WINDOW::UIWINDOW_ITEMCOMBINE: { //// 아이템 조합 창 _oprint( "Create : SUIInvCombineWnd\n" ); SUIInvCombineWnd* pItemCombineWnd = new SUIInvCombineWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pItemCombineWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_ITEMCOMBINE ); pItemCombineWnd->MovePos( (KUIWndManager::GetResolution().cx-pItemCombineWnd->GetRect().GetWidth())/2, (KUIWndManager::GetResolution().cy - pItemCombineWnd->GetRect().GetHeight())/2 ); } break; #ifdef CONTRIBUTION case TOGGLE_WINDOW::UIWINDOW_ITEMCONTRIBUTION: { //// 기부창 _oprint( "Create : SUIContributionWnd\n" ); SUIContributionWnd* pContributionWnd = new SUIContributionWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pContributionWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_ITEMCONTRIBUTION ); pContributionWnd->MovePos( (KUIWndManager::GetResolution().cx-pContributionWnd->GetRect().GetWidth())/2, (KUIWndManager::GetResolution().cy - pContributionWnd->GetRect().GetHeight())/2 ); } break; #endif case TOGGLE_WINDOW::UIWINDOW_RECHARGE_MSGBOX: { /// 2011.02.16 - prodongi SUIRechargeMsgBoxWnd* rechargeMsgBox = new SUIRechargeMsgBoxWnd(m_pGameManager); CreateWnd(rechargeMsgBox, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_RECHARGE_MSGBOX); } break; case TOGGLE_WINDOW::UIWINDOW_AUCTION: { // { [sonador][3.1.2] 경매장 구현 _oprint( "Create : SUIAuctionWnd\n" ); SUIAuctionWnd* pAuctionWnd = new SUIAuctionWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pAuctionWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_AUCTION ); pAuctionWnd->MovePos( ( KUIWndManager::GetResolution( ).cx - pAuctionWnd->GetRect( ).GetWidth( ) ) / 2, ( KUIWndManager::GetResolution( ).cy / 2 ) - ( pAuctionWnd->GetRect( ).GetHeight( ) * 3 / 5 ) ); } break; case TOGGLE_WINDOW::UIWINDOW_MOTION: { SUIMinimapWnd* pMinimapWnd = (SUIMinimapWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP ); if( NULL == pMinimapWnd ) return FALSE; _oprint( "Create : SUIMotionWnd\n" ); SUIMotionWnd* pMotionWnd = new SUIMotionWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pMotionWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_MOTION ); pMotionWnd->MovePos( KUIWndManager::GetResolution().cx - pMotionWnd->GetRect().GetWidth() - GetDeltaX(50), pMinimapWnd->GetRect().bottom ); } break; case TOGGLE_WINDOW::UIWINDOW_RECALL: { //소환 _oprint( "Create : SUIRecallWnd\n" ); SUIRecallWnd* pRecallWnd = new SUIRecallWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pRecallWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_RECALL ); pRecallWnd->MovePos( nHalfW - pRecallWnd->GetRect().GetWidth()/2, nHalfH - pRecallWnd->GetRect().GetHeight()/2 ); } break; case TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_MSGBOX: { //기부 보상관련 모달형 메시지 박스 _oprint( "Create : SUIContributionMsgboxWnd\n" ); SUIContributionMsgboxWnd* pContributionMsgboxWnd = new SUIContributionMsgboxWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pContributionMsgboxWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_MSGBOX ); pContributionMsgboxWnd->MovePos( nHalfW - pContributionMsgboxWnd->GetRect().GetWidth()/2, nHalfH - pContributionMsgboxWnd->GetRect().GetHeight()/2 ); } break; case TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_RANKING: { _oprint( "Create : SUIRankingWnd\n" ); SUIRankingWnd* pContributionRankingWnd = new SUIRankingWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pContributionRankingWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_RANKING ); pContributionRankingWnd->MovePos( nHalfW - pContributionRankingWnd->GetRect().GetWidth()/2, nHalfH - pContributionRankingWnd->GetRect().GetHeight()/2 ); } break; case TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_REWARD_CONFIRM: { // 매월 기부 보상 아이템 받기 확인용 모달형 메시지박스 _oprint( "Create : SUIContributionRewardConfirmWnd\n" ); SUIContributionRewardConfirmWnd* pContributionConfirm = new SUIContributionRewardConfirmWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pContributionConfirm, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_REWARD_CONFIRM ); pContributionConfirm->MovePos( nHalfW - pContributionConfirm->GetRect().GetWidth()/2, nHalfH - pContributionConfirm->GetRect().GetHeight()/2 ); } break; case TOGGLE_WINDOW::UIWINDOW_PET_COMMAND: { // 팻 컨트롤 윈도우 생성 // sonador #2.1.2.4.3 팻 조작 UI 연동 _oprint( "Create: SUIPetCommandWnd\n" ); SUIPetCommandWnd* pPetCmdWnd = new SUIPetCommandWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pPetCmdWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_PET_COMMAND ); pPetCmdWnd->MovePos( KUIWndManager::GetResolution().width - pPetCmdWnd->GetRect().GetWidth(), KUIWndManager::GetResolution().height - pPetCmdWnd->GetRect().GetHeight() - 120 ); } break; case TOGGLE_WINDOW::UIWINDOW_CREATURE_CARD_FRONT: { //크리쳐 카드 // 2010.08.03 - prodongi SUICreatureCardFrontWnd* pCreatureCardFrontWnd = new SUICreatureCardFrontWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pCreatureCardFrontWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREATURE_CARD_FRONT ); pCreatureCardFrontWnd->MovePos( nHalfW - pCreatureCardFrontWnd->GetRect().GetWidth()/2, nHalfH - pCreatureCardFrontWnd->GetRect().GetHeight()/2 ); } break; case TOGGLE_WINDOW::UIWINDOW_CREATURE_CARD_BACK: { //크리쳐 카드 서브 // 2010.08.03 - prodongi SUICreatureCardBackWnd* pCreatureCardBackWnd = new SUICreatureCardBackWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pCreatureCardBackWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_CREATURE_CARD_BACK ); pCreatureCardBackWnd->MovePos( nHalfW - pCreatureCardBackWnd->GetRect().GetWidth()/2, nHalfH - pCreatureCardBackWnd->GetRect().GetHeight()/2 ); } break; case TOGGLE_WINDOW::UIWINDOW_BOSS_MONSTER_CARD: { // 2010.08.09 boss monster card - prodongi SUIBossMonsterCardWnd* bossMonsterCardWnd = new SUIBossMonsterCardWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( bossMonsterCardWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_BOSS_MONSTER_CARD ); bossMonsterCardWnd->MovePos( nHalfW - bossMonsterCardWnd->GetRect().GetWidth()/2, nHalfH - bossMonsterCardWnd->GetRect().GetHeight()/2 ); } break; case TOGGLE_WINDOW::UIWINDOW_FULLDOWN_PLAYER: { //// FulldownPlayer _oprint( "Create : SUIFulldownPlayer\n" ); SUIFulldownPlayerWnd* pFulldownPlayerWnd = new SUIFulldownPlayerWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pFulldownPlayerWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_FULLDOWN_PLAYER ); } break; case TOGGLE_WINDOW::UIWINDOW_FULLDOWN_TARGETPLAYER: { //// FulldownTargetPlayer _oprint( "Create : SUIFulldownTargetPlayer\n" ); SUIFulldownTargetPlayerWnd* pFulldownTargetPlayerWnd = new SUIFulldownTargetPlayerWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pFulldownTargetPlayerWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_FULLDOWN_TARGETPLAYER ); } break; case TOGGLE_WINDOW::UIWINDOW_FULLDOWN_TARGETMONSTER: { //// FulldownTargetMonster _oprint( "Create : SUIFulldownTargetMonster\n" ); SUIFulldownTargetMonsterWnd* pFulldownTargetMonsterWnd = new SUIFulldownTargetMonsterWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pFulldownTargetMonsterWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_FULLDOWN_TARGETMONSTER ); } break; case TOGGLE_WINDOW::UIWINDOW_FULLDOWN_MINIMAP: { //// FulldownMinimap _oprint( "Create : SUIFulldownMinimap\n" ); SUIFulldownMinimapWnd* pFulldownMinimapWnd = new SUIFulldownMinimapWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pFulldownMinimapWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_FULLDOWN_MINIMAP ); } break; case TOGGLE_WINDOW::UIWINDOW_FULLDOWN_ITEMDROP: { //// FulldownitemDrop _oprint( "Create : SUIFulldownItemDrop\n" ); SUIFulldownItemDropWnd* pFulldownItemDropWnd = new SUIFulldownItemDropWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pFulldownItemDropWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_FULLDOWN_ITEMDROP ); } break; case TOGGLE_WINDOW::UIWINDOW_FULLDOWN_CREATURE: { //// FulldownCreature _oprint( "Create : SUIFulldownCreature\n" ); SUIFulldownCreatureWnd* pFulldownCreaturWnd = new SUIFulldownCreatureWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pFulldownCreaturWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_FULLDOWN_CREATURE ); } break; case TOGGLE_WINDOW::UIWINDOW_JEWEL_EQUIP: { //// JewelEquip _oprint( "Create : SUIJewelEquipWnd\n" ); SUIJewelEquipWnd* pJewelEquipWnd = new SUIJewelEquipWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pJewelEquipWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_JEWEL_EQUIP ); pJewelEquipWnd->MovePos( (nHalfW - (pJewelEquipWnd->GetRect().GetWidth()/2)), (nHalfH - (pJewelEquipWnd->GetRect().GetHeight()/2)) ); } break; case TOGGLE_WINDOW::UIWINDOW_SOUL_CHARGE: { //// JewelEquip _oprint( "Create : SUISoulChargeWnd\n" ); SUISoulChargeWnd* pSoulChargeWnd = new SUISoulChargeWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pSoulChargeWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_SOUL_CHARGE ); pSoulChargeWnd->MovePos( (nHalfW - (pSoulChargeWnd->GetRect().GetWidth()/2)), (nHalfH - (pSoulChargeWnd->GetRect().GetHeight()/2)) ); } break; case TOGGLE_WINDOW::UIWINDOW_IN_GAME_LOGOUT: { SUIInGameLogoutWnd* pInGameLogoutWnd = new SUIInGameLogoutWnd( m_pGameManager ); CreateWnd( pInGameLogoutWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_IN_GAME_LOGOUT ); pInGameLogoutWnd->MovePos( (nHalfW - (pInGameLogoutWnd->GetRect().GetWidth()/2)), ((KUIWndManager::GetResolution().cy / 4) - (pInGameLogoutWnd->GetRect().GetHeight() / 2) ) ); } break; case TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_LOBBY: { // HuntaHolicLobby _oprint( "Create: SUIHuntaHolicLobbyWnd\n" ); SUIHuntaHolicLobbyWnd* pHuntaHolicLobbyWnd = new SUIHuntaHolicLobbyWnd( m_pGameManager ); CreateWnd( pHuntaHolicLobbyWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_LOBBY ); pHuntaHolicLobbyWnd->MovePos( ( nHalfW - ( pHuntaHolicLobbyWnd->GetRect().GetWidth() / 2 ) ), ( nHalfH - ( pHuntaHolicLobbyWnd->GetRect().GetHeight() / 2 ) ) ); } break; case TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_CREATE_INSTANCE: { _oprint( "Create: SUIHuntaHolicCreateInstanceWnd\n" ); SUIHuntaHolicCreateInstanceWnd* pHuntaHolicCreateInstanceWnd = new SUIHuntaHolicCreateInstanceWnd( m_pGameManager ); CreateWnd( pHuntaHolicCreateInstanceWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_CREATE_INSTANCE ); pHuntaHolicCreateInstanceWnd->MovePos( ( nHalfW - ( pHuntaHolicCreateInstanceWnd->GetRect().GetWidth() / 2 ) ), ( nHalfH - ( pHuntaHolicCreateInstanceWnd->GetRect().GetHeight() / 2 ) ) ); } break; case TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_CONFIRM_PASSWORD: { _oprint( "Create: SUIHuntaHolicConfirmPasswordWnd\n" ); SUIHuntaHolicConfirmPasswordWnd* pHuntaHolicConfirmPasswordWnd = new SUIHuntaHolicConfirmPasswordWnd( m_pGameManager ); CreateWnd( pHuntaHolicConfirmPasswordWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_CONFIRM_PASSWORD ); pHuntaHolicConfirmPasswordWnd->MovePos( ( nHalfW - ( pHuntaHolicConfirmPasswordWnd->GetRect().GetWidth() / 2 ) ), ( nHalfH - ( pHuntaHolicConfirmPasswordWnd->GetRect().GetHeight() / 2 ) ) ); } break; case TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_INSTANCE: { _oprint( "Create: SUIHuntaHolicInstanceWnd\n" ); SUIHuntaHolicInstanceWnd* pHuntaHolicInstanceWnd = new SUIHuntaHolicInstanceWnd( m_pGameManager ); CreateWnd( pHuntaHolicInstanceWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_INSTANCE ); pHuntaHolicInstanceWnd->MovePos( KUIWndManager::GetResolution().cx - 284, KUIWndManager::GetResolution().cy - 262 ); } break; case TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_SCOREBOARD: { _oprint( "Create: SUIHuntaHolicScoreBoardWnd\n" ); SUIHuntaHolicScoreBoardWnd* pHuntaHolicScoreBoardWnd = new SUIHuntaHolicScoreBoardWnd( m_pGameManager ); CreateWnd( pHuntaHolicScoreBoardWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_SCOREBOARD ); pHuntaHolicScoreBoardWnd->MovePos( KUIWndManager::GetResolution().cx - 163, KUIWndManager::GetResolution().cy - 301 ); } break; case TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_RESULT: { _oprint( "Create: SUIHuntaHolicResultWnd\n" ); SUIHuntaHolicResultWnd* pHuntaHolicResultWnd = new SUIHuntaHolicResultWnd( m_pGameManager ); CreateWnd( pHuntaHolicResultWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_HUNTAHOLIC_RESULT ); pHuntaHolicResultWnd->MovePos( nHalfW - 204, nHalfH - 200 ); } break; case TOGGLE_WINDOW::UIWINDOW_CHANGE_NAME: { _oprint( "Create: SUINameChangeWnd\n" ); // sonador #2.1.24 SUIChangeNameWnd* pChangeNameWnd = new SUIChangeNameWnd( m_pGameManager ); CreateWnd( pChangeNameWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_CHANGE_NAME ); pChangeNameWnd->MovePos( ( nHalfW - ( pChangeNameWnd->GetRect().GetWidth() / 2 ) ), ( nHalfH - ( pChangeNameWnd->GetRect().GetHeight() / 2 ) ) ); } break; case TOGGLE_WINDOW::UIWINDOW_BADGE: { // 퀘스트 정보 창 추가. // 수련자의섬 리뉴얼 관련 _oprint( "Create: SUIBadgeWnd\n" ); SUIBadgeWnd* pBadgeWnd = new SUIBadgeWnd( m_pGameManager ); CreateWnd( pBadgeWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_BADGE ); pBadgeWnd->MovePos( ( nHalfW - ( pBadgeWnd->GetRect().GetWidth() / 2 ) ), ( nHalfH - ( pBadgeWnd->GetRect().GetHeight() / 2 ) ) ); } break; case TOGGLE_WINDOW::UIWINDOW_INSTANCE_ENTRANCE: { SUIInstanceEntranceWnd *pInstanceEntranceWnd = new SUIInstanceEntranceWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pInstanceEntranceWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_INSTANCE_ENTRANCE ); pInstanceEntranceWnd->MovePos( ( nHalfW - ( pInstanceEntranceWnd->GetRect().GetWidth() / 2 ) ), ( nHalfH - ( pInstanceEntranceWnd->GetRect().GetHeight() / 2 ) ) ); } break; case TOGGLE_WINDOW::UIWINDOW_MEMOWND: { // 메모뷰 팝업 Wnd. SUIWnd * pMemoViewWnd = new SUIMemoViewWnd( m_pGameManager ); CreateWnd( pMemoViewWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_MEMOWND ); m_pUIWndManager->AddWnd( pMemoViewWnd ); // WndManager에 Wnd 강제등록( Dynamic Wnd 만 등록되는 관계로 강제처리 ). } break; case TOGGLE_WINDOW::UIWINDOW_GUILD_SUBMENU_RIGHTCLICK: { // 길드맴버관련 팝업. SUIWnd * pGuildMemberPopup = new SUIMemberPopupWnd( m_pGameManager ); pGuildMemberPopup->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pGuildMemberPopup, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUBMENU_RIGHTCLICK ); } break; case TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_INVITATION: { // 길드관리 - 길드원가입 - 길드초대윈도우. SUIWnd * pGuildInvitation = new SUIInvitationWnd( m_pGameManager ); pGuildInvitation->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pGuildInvitation, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_INVITATION ); } break; case TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_CLASS: { // // 길드관리 - 길드원관리 - 길드원등급 윈도우. SUIWnd * pGuildClassManage = new SUIClassManageWnd( m_pGameManager ); pGuildClassManage->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pGuildClassManage, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_CLASS ); } break; case TOGGLE_WINDOW::UIWINDOW_GUILD_SUBMENU_CLASS_RIGHTCLICK: { // 길드등급 팝업메뉴. SUIWnd * pGuildClassPopup = new SUIClassPopupWnd( m_pGameManager ); pGuildClassPopup->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pGuildClassPopup, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUBMENU_CLASS_RIGHTCLICK ); } break; case TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_EXPULSION: { // 길드원제명 팝업 윈도우. SUIWnd * pGuildExpulsion = new SUIExpulsionWnd( m_pGameManager ); pGuildExpulsion->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pGuildExpulsion, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_EXPULSION ); } break; case TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_INFO_ALLIANCE: { // 연합길드 정보 팝업 윈도우. SUIWnd * pAllianceGuild = new SUIAllianceGuild( m_pGameManager ); pAllianceGuild->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pAllianceGuild, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_INFO_ALLIANCE ); } break; case TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MASTER_PROMOTE: { // 길드장인계 팝업 윈도우. SUIWnd * pMasterTransfer = new SUIMasterTransfer( m_pGameManager ); pMasterTransfer->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pMasterTransfer, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MASTER_PROMOTE ); } break; case TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_TEAM: { // 공격대결성 팝업 윈도우. SUIWnd * pTeamPopup = new SUITeamWnd( m_pGameManager ); pTeamPopup->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pTeamPopup, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_TEAM ); } break; case TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_TEAM_HELP: { // 공격대 도움말 팝업 윈도우. SUIWnd * pHelpTeamPopup = new SUIHelpTeamPopupWnd( m_pGameManager ); //pHelpTeamPopup->SetUseCutCaption(); // 컨트롤의 Caption 텍스트 자르기. CreateWnd( pHelpTeamPopup, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_GUILD_SUB_MANAGE_TEAM_HELP ); } break; case TOGGLE_WINDOW::UIWINDOW_FORMULA: CreateWnd( new SUIFormulaListWnd( m_pGameManager ) , KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_FORMULA ); // 공식리스트윈도우. break; case TOGGLE_WINDOW::UIWINDOW_UPGRADE: CreateWnd( new SUIUpgradeWnd( m_pGameManager, m_pDisplayInfo ), KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_UPGRADE ); // 아이템강화 윈도우. break; case TOGGLE_WINDOW::UIWINDOW_REPAIR: CreateWnd( new SUIRepairWnd( m_pGameManager, m_pDisplayInfo ), KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_REPAIR ); // 아이템수리 윈도우. break; case TOGGLE_WINDOW::UIWINDOW_MIX_PROGRESS: CreateWnd( new SUIProgressWnd( m_pGameManager ), KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_MIX_PROGRESS ); // 아이템합성 진척도 출력 윈도우. break; case TOGGLE_WINDOW::UIWINDOW_HELP_WND: // 도움말 출력 윈도우. UIWINDOW_HELP_WND, CreateWnd( new SUIHelpWnd( m_pGameManager ), KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_HELP_WND ); CreateWnd( new SUIProgressWnd( m_pGameManager ), KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_MIX_PROGRESS, false, "프로그레시브 바" ); // 아이템합성 진척도 출력 윈도우. CreateWnd( new SUIHelpWnd( m_pGameManager ), KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_HELP_WND, false, "도움말" ); break; case TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_HELP_WND: { // servantes 2011.02.17 SUICreatureFarmHelpWnd* pCreatureFramHelpWnd = new SUICreatureFarmHelpWnd( m_pGameManager, m_pDisplayInfo ); // 크리처 농장 CreateWnd( pCreatureFramHelpWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_HELP_WND ); } break; case TOGGLE_WINDOW::UIWINDOW_MISSION_ENTERANCE_WND: { // servantes 2011.06.30 SUIMissionEnteranceWnd* missionEnterWnd = new SUIMissionEnteranceWnd( m_pGameManager, m_pDisplayInfo ); // 인스턴스던전 입장 UI CreateWnd( missionEnterWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_MISSION_ENTERANCE_WND ); } break; case TOGGLE_WINDOW::UIWINDOW_MISSION_TITLE_WND: { SUIMissionTitleWnd* missionTitleWnd = new SUIMissionTitleWnd( m_pGameManager, m_pDisplayInfo ); // 인스턴스 던전 제목 UI CreateWnd( missionTitleWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_MISSION_TITLE_WND ); } break; case TOGGLE_WINDOW::UIWINDOW_MISSION: { SUIMissionWnd* missionWnd = new SUIMissionWnd(m_pGameManager); if (CreateWnd(missionWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_MISSION)) { missionWnd->SetShow(false); } } break; case TOGGLE_WINDOW::UIWINDOW_AWAKENING: { // 2012.10.16 Metin SUIAwakeningWnd* pAwakeningWnd = new SUIAwakeningWnd( m_pGameManager, m_pDisplayInfo); CreateWnd( pAwakeningWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_AWAKENING ); } break; case TOGGLE_WINDOW::UIWINDOW_DECOMPOSITION: { SUIDecompositionWnd* pDecompositonWnd( new SUIDecompositionWnd( m_pGameManager, m_pDisplayInfo ) ); if( pDecompositonWnd ) { if( CreateWnd( pDecompositonWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_DECOMPOSITION ) ) pDecompositonWnd->SetShow( false ); else { SDEBUGLOG( "[GameInterface] Failed Create Decomposition Window" ); return FALSE; } } else { SDEBUGLOG( "[GameInterface] Failed alloc Decomposition Window" ); return FALSE; } } break; case TOGGLE_WINDOW::UIWINDOW_PARTYMATCHING: { //PartyMatching _oprint( "Create : SUIPartyMatchingWnd\n" ); SUIPartyMatchingWnd* pPartyMatching = new SUIPartyMatchingWnd( m_pGameManager, m_pDisplayInfo ); CreateWnd( pPartyMatching, KPoint(0,0), TOGGLE_WINDOW::UIWINDOW_PARTYMATCHING ); pPartyMatching->MovePos( nHalfW, nSixH ); } break;// 파티매칭 default: assert( 0 && "fuck!!" ); return FALSE; } return TRUE; } void SGameInterface::CreateNewAddOnWindow( SIMSG_UI_WINDOW_ADDON* pMsg ) { if( pMsg == NULL ) return; if( pMsg->main_window_name && pMsg->addon_window_name ) { TOGGLE_WINDOW::_UIWINDOW_TYPE window_type = GetWindowsType( pMsg->main_window_name ); if( window_type == TOGGLE_WINDOW::UIWINDOW_LAST ) return; SUIWnd* pMainWnd = GetUIWindow( window_type ); if( pMainWnd == NULL ) return; SUIAddonWnd* pNewAddonWindow = NULL; TOGGLE_WINDOW::_UIWINDOW_TYPE addon_window_type = GetAddonWindowsType( pMsg->addon_window_name ); switch( addon_window_type ) { case TOGGLE_WINDOW::UIWINDOW_TARGET_WND_ADDON: pNewAddonWindow = new SUITargetWndAddon( m_pGameManager ); break; case TOGGLE_WINDOW::UIWINDOW_INVENTORY_WND_ADDON: pNewAddonWindow = new SUIInventoryWndAddon( m_pGameManager ); break; } if( pNewAddonWindow ) { KPoint point( 0, 0 ); int new_window_type = addon_window_type + m_nAddonWndRef++; pNewAddonWindow->CreateWnd( pMsg->addon_window_name, m_pUIWndManager, point, new_window_type ); // KRect main_rect = pMainWnd->GetRect(); /* point.x = pMsg->n_position_x; if( pMsg->c_position_x != NULL ) { if( !GetAddOnWindowPosition( pMsg->c_position_x, point.x, pMainWnd, pNewAddonWindow ) ) bMousePosX = true; } else { point.x += main_rect.left; } point.y = pMsg->n_position_y; if( pMsg->c_position_y != NULL ) { if( !GetAddOnWindowPosition( pMsg->c_position_y, point.y, pMainWnd, pNewAddonWindow ) ) bMousePosY = true; } else { point.y += main_rect.top; }*/ ADDON_WINDOW_POSITION posx_type = ADDON_WINDOW_POSITION::USER_INPUT_POSTION; ADDON_WINDOW_POSITION posy_type = ADDON_WINDOW_POSITION::USER_INPUT_POSTION; if( pMsg->c_position_x != NULL ) { posx_type = GetAddOnWindowPositionType( pMsg->c_position_x ); } if( pMsg->c_position_y != NULL ) { posy_type = GetAddOnWindowPositionType( pMsg->c_position_y ); } pMainWnd->AddChildAddonWnd( new_window_type, pNewAddonWindow, pMsg->open_type, pMsg->vControlList, posx_type, posy_type, pMsg->n_position_x, pMsg->n_position_y ); pNewAddonWindow->MovePos( 0, 0 ); addSUIWnd( new_window_type, pNewAddonWindow ); } } } int SGameInterface::GetDeltaX( int nValue ) { return (nValue*KUIWndManager::GetResolution().cx) / c_nScreenNormalW; } int SGameInterface::GetDeltaY( int nValue ) { return (nValue*KUIWndManager::GetResolution().cy) / c_nScreenNormalH; } bool SGameInterface::IsEnableSize( int nX, int nY, KRect rt ) { if( nX < 0 ) return false; if( nY < 0 ) return false; if( nX + rt.GetWidth() > KUIWndManager::GetResolution().cx ) return false; if( nY + rt.GetHeight() > KUIWndManager::GetResolution().cy ) return false; return true; } void SGameInterface::UpdateWndMovePos() { // 상태이상/지속효과 가로 //SUIStateHEffectWnd* pStateHEffectWnd = ( SUIStateHEffectWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_STATE_H_EFFECT ); //if( pStateHEffectWnd ) //{ // if( GetGameOption().GetStateHozX() != -1 && GetGameOption().GetStateHozY() != -1 && IsEnableSize( GetGameOption().GetStateHozX(), GetGameOption().GetStateHozY(), pStateHEffectWnd->GetRect() ) ) // pStateHEffectWnd->MovePos( GetGameOption().GetStateHozX(), GetGameOption().GetStateHozY() ); //} // 시스템 메뉴 SUISysMenuWnd* pSysMenuWnd = ( SUISysMenuWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_SYSMENU ); if( pSysMenuWnd ) { if( GetGameOption().GetSysMenuX() != -1 && GetGameOption().GetSysMenuY() != -1 && IsEnableSize( GetGameOption().GetSysMenuX(), GetGameOption().GetSysMenuY(), pSysMenuWnd->GetRect() ) ) { pSysMenuWnd->MovePos( GetGameOption().GetSysMenuX(), GetGameOption().GetSysMenuY() ); // 스킬 SUISkillWnd* pSkillWnd = ( SUISkillWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILL ); pSkillWnd->MovePos( pSysMenuWnd->GetRect().right, pSysMenuWnd->GetRect().top ); // 스킬펀트 SUISkillTreeFundWnd* pSkillFundWnd = ( SUISkillTreeFundWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_SKILLFUND ); pSkillFundWnd->MovePos( pSkillWnd->GetRect().right, pSkillWnd->GetRect().bottom-pSkillFundWnd->GetRect().GetHeight() ); // motion SUIMotionWnd* pMotionWnd = ( SUIMotionWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_MOTION ); pMotionWnd->MovePos( pSysMenuWnd->GetRect().right, pSysMenuWnd->GetRect().top ); // system SUISystemWnd* pSystemWnd = ( SUISystemWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_SYSTEM ); pSystemWnd->MovePos( pSysMenuWnd->GetRect().right, pSysMenuWnd->GetRect().top ); // charinfo SUICharacterInfoWnd* pCharInfoWnd = ( SUICharacterInfoWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CHARINFO ); pCharInfoWnd->MovePos( pSysMenuWnd->GetRect().right, pSysMenuWnd->GetRect().top ); } } SetWindowPos(); // MJ 2004/12/23 채팅 사이즈 초기화 SUIChattingWnd* pChatWnd =( SUIChattingWnd* )GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING ); if( pChatWnd ) pChatWnd->UpdateChattingResize(); } void SGameInterface::MoveWindow( int nWinIndex, int x, int y, BOOL bDeviceReset ) //servantes 2010.12.10 : BOOL bDeviceReset 추가 { if( nWinIndex >= SGAME_OPT_DATA::MAX ) return; SUIWnd* pUIWin(NULL); m_hashUIWindowMap.lookup( SGAME_OPT_DATA::c_nWindowOption[nWinIndex][0], pUIWin ); if( pUIWin == NULL ) return; int nResolutionW = GetGameOption().GetResolution_Width(); int nResolutionH = GetGameOption().GetResolution_Height(); if( IsEnableSize( x, y, pUIWin->GetRect() ) ) { if(bDeviceReset) SetWinPos( pUIWin, pUIWin->GetRect().left, pUIWin->GetRect().top, nResolutionW, nResolutionH ); // servantes 2010.11.26 else SetWinPos( pUIWin, x, y, nResolutionW, nResolutionW ); // servantes 2010.11.26 } else { if(bDeviceReset) SetWinPos( pUIWin, pUIWin->GetRect().left, pUIWin->GetRect().top, nResolutionW, nResolutionH ); else SetWinPos( pUIWin, SGAME_OPT_DATA::c_nWindowOption[nWinIndex][1], SGAME_OPT_DATA::c_nWindowOption[nWinIndex][2], nResolutionW, nResolutionH ); } } //servantes 2010.11.26 // 옵션을 저장하지 않은 UI들의 위치를 조정할 때 사용하자 void SGameInterface::MoveWindow( int nWinIndex ) { SUIWnd* pWnd = m_pGameManager->GetSUI(nWinIndex); //servantes 2010.12.10 if( pWnd == NULL ) return; KRect rt = pWnd->GetRect(); SetWinPos( pWnd, rt.left, rt.top, GetGameOption().GetResolution_Width(), GetGameOption().GetResolution_Height() ); } void SGameInterface::SetWindowPos(BOOL bDeviceReset) //servantes 2010.12.10 BOOL bDeviceReset 추가 및 함수내 MoveWindow 에 bDeviceReset 추가 { MoveWindow( SGAME_OPT_DATA::Inventory, GetGameOption().GetInventoryX(), GetGameOption().GetInventoryY() , bDeviceReset); MoveWindow( SGAME_OPT_DATA::Quest, GetGameOption().GetQuestX(), GetGameOption().GetQuestY() , bDeviceReset); MoveWindow( SGAME_OPT_DATA::Map, GetGameOption().GetMapX(), GetGameOption().GetMapY() , FALSE); MoveWindow( SGAME_OPT_DATA::Messanger, GetGameOption().GetMessangerX(), GetGameOption().GetMessangerY() , bDeviceReset); MoveWindow( SGAME_OPT_DATA::ItemCombine, GetGameOption().GetItemCombineX(), GetGameOption().GetItemCombineY() , bDeviceReset); MoveWindow( SGAME_OPT_DATA::Skill, GetGameOption().GetSkillX(), GetGameOption().GetSkillY() , FALSE); MoveWindow( SGAME_OPT_DATA::Motion, GetGameOption().GetMotionX(), GetGameOption().GetMotionY() , FALSE); MoveWindow( SGAME_OPT_DATA::Char, GetGameOption().GetCharX(), GetGameOption().GetCharY() , bDeviceReset); //메인메뉴에 겹치는지 확인후 보정할것.. sfreer 2009.04.07 { int x = GetGameOption().GetCreatureX(); int y = GetGameOption().GetCreatureY(); SUIMainMenuWnd* pWndMainMenu = (SUIMainMenuWnd*)GetUIWindow(TOGGLE_WINDOW::UIWINDOW_MAINMENU); SUICreatureWnd* pWndCreature = (SUICreatureWnd*)GetUIWindow(TOGGLE_WINDOW::UIWINDOW_CREATURE); if(pWndMainMenu && pWndCreature) { if(pWndMainMenu->GetRect().IsInRect(x,y)) { //y = tempmenu->GetRect().top() - GetGameOption().GetCreatureX(); GetGameOption().SetCreatureY(pWndMainMenu->GetRect().top - pWndCreature->GetRect().GetHeight() ); } } } MoveWindow( SGAME_OPT_DATA::Creature, GetGameOption().GetCreatureX(), GetGameOption().GetCreatureY() , bDeviceReset); MoveWindow( SGAME_OPT_DATA::CreatureInfo, GetGameOption().GetCreatureInfoX(), GetGameOption().GetCreatureInfoY() , bDeviceReset); MoveWindow( SGAME_OPT_DATA::CreatureSkill, GetGameOption().GetCreatureSkillX(), GetGameOption().GetCreatureSkillY() , bDeviceReset); MoveWindow( SGAME_OPT_DATA::Shop, GetGameOption().GetShopX(), GetGameOption().GetShopY() , bDeviceReset); MoveWindow( SGAME_OPT_DATA::Store, GetGameOption().GetStoreX(), GetGameOption().GetStoreY() , bDeviceReset); MoveWindow( SGAME_OPT_DATA::Storage, GetGameOption().GetStorageX(), GetGameOption().GetStorageY() , bDeviceReset); MoveWindow( SGAME_OPT_DATA::Party, GetGameOption().GetPartyX(), GetGameOption().GetPartyY() , bDeviceReset); // 장비창. bintitle. 2010.10.07. MoveWindow( SGAME_OPT_DATA::Equipment, GetGameOption().GetEquipmentX(), GetGameOption().GetEquipmentY() , bDeviceReset); // 강화/세공, 조합, 수리/복원/충전 /servantes 2010.11.26 MoveWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_REPAIR ); MoveWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_UPGRADE ); MoveWindow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ITEMCOMBINE ); //이것은 임시코드이다.- 크리처 스킬창은 option에 저장 안됨으로 움직였다는 메시지를 보내주도록 하자. 2009.11.26. sfreer /* { SUICreatureSkillWnd *ptempwnd = (SUICreatureSkillWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL); SUICreatureSkillWnd *ptempwnd2 = (SUICreatureSkillWnd*)GetUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILLFUND); if(ptempwnd) { ptempwnd2->MovePos(ptempwnd->GetRect().left,ptempwnd->GetRect().top); } //ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_SKILL, xx, yy) ); //ProcMsgToUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILLFUND, new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_SKILLFUND, xx, yy) ); }*/ } void SGameInterface::ResetDefaultWinPos() { int x(0), y(0); SUIWnd* pUIWin(NULL); for( int i(0); iGetRect(); float fx = (float)x; float fOldResolutionW = (float)GetGameOption().GetResolution_OldWidth(); if(fOldResolutionW != -1.0f) { // fx = ((float)x * (float)nResolutionX) / fOldResolutionW; if(nResolutionX > (int)fOldResolutionW) //해상도를 키웠다면 { fx = ((float)x * (float)nResolutionX) / fOldResolutionW; } else if(nResolutionX < (int)fOldResolutionW) //해상도를 줄였다면 { if(fx + rt.GetWidth() > nResolutionX) { fx = nResolutionX - rt.GetWidth(); } else { fx = ((float)x * (float)nResolutionX) / fOldResolutionW; } } } float fy = (float)y; float fOldResolutionH = (float)GetGameOption().GetResolution_OldHeight(); if(fOldResolutionW != -1.0f) { // fy = ((float)y * (float)nResolutionY) / fOldResolutionH; if(nResolutionY > (int)fOldResolutionH) //해상도를 키웠다면 { fy = ((float)y * (float)nResolutionY) / fOldResolutionH; } else if(nResolutionY < (int)fOldResolutionH) //해상도를 줄였다면 { if(fy + rt.GetHeight() > nResolutionY) { fy = nResolutionY - rt.GetHeight(); } else { fy = ((float)y * (float)nResolutionY) / fOldResolutionH; } } } pUIWin->MovePos( fx, fy ); } } void SGameInterface::SetWinPosCenter( SUIWnd* pUIWin ) { if( pUIWin ) { int nResolutionW = KUIWndManager::GetResolution().cx; int nResolutionH = KUIWndManager::GetResolution().cy; int nHalfW = nResolutionW / 2; int nHalfH = nResolutionH / 2; pUIWin->MovePos( nHalfW - pUIWin->GetRect().GetWidth()/2, nHalfH - pUIWin->GetRect().GetHeight()/2 ); } } void SGameInterface::SetWinPosLeft( SUIWnd* pUIWin ) { if( pUIWin ) { int nResolutionW = KUIWndManager::GetResolution().cx; int nResolutionH = KUIWndManager::GetResolution().cy; int nHalfW = nResolutionW / 2; int nHalfH = nResolutionH / 2; pUIWin->MovePos( nHalfW - pUIWin->GetRect().GetWidth(), nHalfH - pUIWin->GetRect().GetHeight()/2 ); } } void SGameInterface::SetWinPosRight( SUIWnd* pUIWin ) { if( pUIWin ) { int nResolutionW = KUIWndManager::GetResolution().cx; int nResolutionH = KUIWndManager::GetResolution().cy; int nHalfW = nResolutionW / 2; int nHalfH = nResolutionH / 2; pUIWin->MovePos( nHalfW, nHalfH - pUIWin->GetRect().GetHeight()/2 ); } } // 모두 닫아준다 void SGameInterface::WarpInterface( bool bShow ) { if( bShow ) return; //SaveUIPos(); 제거. bintitle. 2010.10.08. destroySUIWnd() 에서도 하고 있습니다. m_vecOpenWindowList.clear(); SUIWnd* pWnd = NULL; KSortVector< class SUIWnd* >::iterator it; for ( it = m_sortUIWindowMap.begin(); it != m_sortUIWindowMap.end(); ++it ) { pWnd = (*it); if( pWnd && pWnd->IsShow() ) { int nWndID = pWnd->GetGenWndID(); // 무조건 닫아야 하는 얘들은 skip if( nWndID != TOGGLE_WINDOW::UIWINDOW_TARGET_PLAYER && nWndID != TOGGLE_WINDOW::UIWINDOW_TARGET_NPC && nWndID != TOGGLE_WINDOW::UIWINDOW_TARGET_PROP && nWndID != TOGGLE_WINDOW::UIWINDOW_TARGET_CREATURE && nWndID != TOGGLE_WINDOW::UIWINDOW_TARGET_STATE && nWndID != TOGGLE_WINDOW::UIWINDOW_TARGETPORTRAIT && nWndID != TOGGLE_WINDOW::UIWINDOW_ITEMCOMBINE && nWndID != TOGGLE_WINDOW::UIWINDOW_NPCDIALOG && nWndID != TOGGLE_WINDOW::UIWINDOW_CHAT_OPTION && nWndID != TOGGLE_WINDOW::UIWINDOW_SHOP && nWndID != TOGGLE_WINDOW::UIWINDOW_SHOPKART && nWndID != TOGGLE_WINDOW::UIWINDOW_STORAGE && nWndID != TOGGLE_WINDOW::UIWINDOW_TRADE && nWndID != TOGGLE_WINDOW::UIWINDOW_WORLDMAP && nWndID != TOGGLE_WINDOW::UIWINDOW_CREATUREFORM && //servantes 2011.01.17 nWndID != TOGGLE_WINDOW::UIWINDOW_CREATURE_FRAM_WND && nWndID != TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN && nWndID != TOGGLE_WINDOW::UIWINDOW_LOGIN && //nWndID != TOGGLE_WINDOW::UIWINDOW_STATE_H_EFFECT && nWndID != TOGGLE_WINDOW::UIWINDOW_WORLDMAP && nWndID != TOGGLE_WINDOW::UIWINDOW_AUCTION && // [sonador][7.0.1]기부창 열린 상태로 워프시 기부창 닫기 nWndID != TOGGLE_WINDOW::UIWINDOW_ITEMCONTRIBUTION && nWndID != TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_MSGBOX && nWndID != TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_RANKING && nWndID != TOGGLE_WINDOW::UIWINDOW_CONTRIBUTION_REWARD_CONFIRM && nWndID != TOGGLE_WINDOW::UIWINDOW_JEWEL_EQUIP && nWndID != TOGGLE_WINDOW::UIWINDOW_SOUL_CHARGE && nWndID != TOGGLE_WINDOW::UIWINDOW_MISSION_ENTERANCE_WND // 2011.09.26 - servantes // 다른 층 던전 입장창 닫기 && nWndID != TOGGLE_WINDOW::UIWINDOW_ARENA_MENU ) { m_vecOpenWindowList.push_back( pWnd->GetGenWndID() ); } m_pUIWndManager->RemoveWnd( pWnd ); pWnd->SetShow( false ); pWnd->OnNotifyUIWindowOpen( pWnd->IsShow() ); RefreshManuMenuButtonToggle( pWnd->GetGenWndID(), pWnd->IsShow() ); } } // 2011.07.20 - servantes CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_INSTANCE_DUNGEON_CONFIRM ) ); // 인스턴스던전 확인 윈도우 CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_INSTANCE_DUNGEON_ENTERANCE ) ); // XX던전으로 이동하겠습니까 CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_INSTANCE_DUNGEON_EXIT ) ); // XX던전에서 퇴장하시겠습니까 CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_INSTANCE_DUNGEON_EXIT2 ) ); // XX던전에서 나가겠습니까 CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_PARTYJOINCHECK ) ); // 2011.07.20 - servantes // 파티수락창 닫기 CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_PARTYARENAOPPONENTJOINCHECK ) ); CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_PARTYARENAMEMBERJOINCHECK ) ); CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ARENA_WAITING_EXIT ) ); CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ARENA_PRACTICE_WAITING_EXIT ) ); CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ARENA_PRACTICE_EXIT ) ); CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ARENA_GAME_EXIT ) ); CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SCRIPTSHOWWINDOW_CONFIRM ) ); /// 2011.10.26 - prodongi CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DECOMPOSITON_CONFIRM_APPEND ) ); CloseMessageBox( GetMsgBoxID( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DECOMPOSITON_CONFIRM_DO ) ); } void SGameInterface::ShowInterfacePartyState() { SUIWnd* pWnd = getSUIWnd( TOGGLE_WINDOW::UIWINDOW_PARTY ); if( pWnd == NULL) return ; if(pWnd->IsShow() == false) return ; SUIWnd* pWndState = getSUIWnd( TOGGLE_WINDOW::UIWINDOW_PARTY_STATE ); if( pWndState == NULL) return ; if( m_pUIWndManager->FindWnd( GetWindowsID( TOGGLE_WINDOW::UIWINDOW_PARTY_STATE ) ) == NULL ) m_pUIWndManager->AddWnd( pWndState, true ); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_PARTY_STATE, true ) ); } // 모두 열어준다 void SGameInterface::ShowInterface( bool bShow ) { if( !bShow ) return; bool bFocus = true; if( GetGameOption().IsEnterChat() ) bFocus = false; // 오픈리스트는 모두 열어준다 for( std::vector::iterator it = m_vecOpenWindowList.begin(); it != m_vecOpenWindowList.end(); it++ ) { if( (*it) != TOGGLE_WINDOW::UIWINDOW_LOGIN ) OnShowUIWindow( (*it), true, bFocus ); } SGame* pGame = m_pGameManager->GetActiveGame(); if( pGame && pGame->GetGameType() == GAME_TYPE_WORLD ) { // 항상 열려 있는 얘들도 열어준다 OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINFRAME, true, bFocus ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_MAINMENU , true, bFocus ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING , true, bFocus ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_HQUICKSLOT, true, bFocus ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_TASKBAR, true, bFocus ); // OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_STATE_H_EFFECT, true ); //상태 이상 // 처음에 열때 조건에 따라 세팅해준다 // 미니맵, 채팅, 파티, 크리처 OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_MINIMAP , ( /*GetGameOption().IsMinimapOpen() &&*/ bShow ), bFocus ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_CHATTING, ( GetGameOption().IsChattingOpen() && bShow ), bFocus ); OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE, ( GetGameOption().IsCreatureOpen() && bShow ), bFocus ); if( m_pDisplayInfo->GetCreatureManager() && m_pDisplayInfo->GetCreatureManager()->GetSummonedCreatureCount() > 0 ) OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_MAIN , bShow, bFocus ); // OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY_STATE, true, bFocus ); ShowInterfacePartyState(); // OnShowUIWindow( TOGGLE_WINDOW::UIWINDOW_PARTY , ( true ) ); RefeshAllWndPos(); RelocationWnd(); } //2012. 1. 5 - marine redmine(19878)UI들을 못움직이게 하는 옵션이 있는데 워프시 KUIWND 생성자에서 이 옵션을 초기화해서 버그가 발생 KUIGenWnd::AbleMoveWin( !GetGameOption().IsWinLock() ); } void SGameInterface::OnRefreshWindow( int nWindowID, SGameMessage* pMsg ) { SUIWnd* pWnd = GetUIWindow(nWindowID); if( pWnd ) pWnd->OnRefresh( pMsg ); } void SGameInterface::ProcRefreshWindow( SGameMessage* pMsg ) { switch(pMsg->nType) { case MSG_ADD_SUMMON_INFO: { OnRefreshWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE, pMsg ); OnRefreshWindow( TOGGLE_WINDOW::UIWINDOW_CREATURE , pMsg ); OnRefreshWindow( TOGGLE_WINDOW::UIWINDOW_CREATUREFORM , pMsg ); } break; } } void SGameInterface::ProcConsole( SGameMessage* pGameMsg ) { if( pGameMsg->nType != MSG_CONSOLE_BUILDER ) return; // 인터페이스 처리 m_pDisplayInfo->ProcConsole(pGameMsg); } //// UI 위치저장. //void SGameInterface::SaveUIPos() //{ // SUIWnd* pUIWin(NULL); // // //Shop // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_SHOP, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetShopX(rt.left); // GetGameOption().SetShopY(rt.top); // } // pUIWin = NULL; // // //// store_Client // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_STORE_CLIENT, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetStoreX(rt.left); // GetGameOption().SetStoreY(rt.top); // } // pUIWin = NULL; // // //// Quest List // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_QUEST_LIST, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetQuestX(rt.left); // GetGameOption().SetQuestY(rt.top); // } // pUIWin = NULL; // // //// 창고 창 // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_STORAGE, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetStorageX(rt.left); // GetGameOption().SetStorageY(rt.top); // } // pUIWin = NULL; // // ////// 월드맵 // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_WORLDMAP, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetMapX(rt.left); // GetGameOption().SetMapY(rt.top); // } // pUIWin = NULL; // // //커뮤니티 // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_COMMUNITY, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetMessangerX(rt.left); // GetGameOption().SetMessangerY(rt.top); // } // pUIWin = NULL; // // //파티창 // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_PARTY, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetPartyX(rt.left); // GetGameOption().SetPartyY(rt.top); // } // pUIWin = NULL; // // //// 장비 창. // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_EQUIPMENT, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetEquipmentWndPos( KPoint( rt.left, rt.top ) ); // } // pUIWin = NULL; // // //// 인벤토리 창 // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetInventoryX(rt.left); // GetGameOption().SetInventoryY(rt.top); // } // pUIWin = NULL; // // //// 아이템 조합 창 // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_ITEMCOMBINE, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetItemCombineX(rt.left); // GetGameOption().SetItemCombineY(rt.top); // } // pUIWin = NULL; // // //// 스킬 // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_SKILL, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetSkillX(rt.left); // GetGameOption().SetSkillY(rt.top); // } // pUIWin = NULL; // // //// motion // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_MOTION, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetMotionX(rt.left); // GetGameOption().SetMotionY(rt.top); // } // pUIWin = NULL; // // //// charinfo // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_CHARINFO, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetCharX(rt.left); // GetGameOption().SetCharY(rt.top); // } // pUIWin = NULL; // // ////// 크리쳐 장착 창 // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_CREATURE, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetCreatureX(rt.left); // GetGameOption().SetCreatureY(rt.top); // } // pUIWin = NULL; // // ////// creature Info // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetCreatureInfoX(rt.left); // GetGameOption().SetCreatureInfoY(rt.top); // } // pUIWin = NULL; // // ////// creature skill // m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, pUIWin ); // if( pUIWin ) // { // KRect rt = pUIWin->GetRect(); // GetGameOption().SetCreatureSkillX(rt.left); // GetGameOption().SetCreatureSkillY(rt.top); // } // pUIWin = NULL; //} // 수정. bintitle. 2010.10.07. // 1. 계속 사용되는 KRect 를 한번만 선언. // 2. lookup 함수에서 찾은 결과를 반환하고 찾지못한경우에는 value( pUIWin ) 에 NULL 을 넣어주므로 NULL 대입 제거. // // UI 위치저장. void SGameInterface::SaveUIPos() { SUIWnd* pUIWin(NULL); KRect rt; //Shop if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_SHOP, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetShopX(rt.left); GetGameOption().SetShopY(rt.top); } //// store_Client if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_STORE_CLIENT, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetStoreX(rt.left); GetGameOption().SetStoreY(rt.top); } //// Quest List if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_QUEST_LIST, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetQuestX(rt.left); GetGameOption().SetQuestY(rt.top); } //// 창고 창 if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_STORAGE, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetStorageX(rt.left); GetGameOption().SetStorageY(rt.top); } ////// 월드맵 if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_WORLDMAP, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetMapX(rt.left); GetGameOption().SetMapY(rt.top); } //커뮤니티 if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_COMMUNITY, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetMessangerX(rt.left); GetGameOption().SetMessangerY(rt.top); } //파티매칭 if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_PARTYMATCHING, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetMessangerX(rt.left); GetGameOption().SetMessangerY(rt.top); } //파티창 if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_PARTY, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetPartyX(rt.left); GetGameOption().SetPartyY(rt.top); } //// 장비 창. bintitle. 2010.10.07. if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_EQUIPMENT, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetEquipmentWndPos( KPoint( rt.left, rt.top ) ); } //// 인벤토리 창 if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_INVENTORY, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetInventoryX(rt.left); GetGameOption().SetInventoryY(rt.top); } //// 아이템 조합 창 if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_ITEMCOMBINE, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetItemCombineX(rt.left); GetGameOption().SetItemCombineY(rt.top); } //// 스킬 if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_SKILL, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetSkillX(rt.left); GetGameOption().SetSkillY(rt.top); } //// motion if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_MOTION, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetMotionX(rt.left); GetGameOption().SetMotionY(rt.top); } //// charinfo if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_CHARINFO, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetCharX(rt.left); GetGameOption().SetCharY(rt.top); } ////// 크리쳐 장착 창 if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_CREATURE, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetCreatureX(rt.left); GetGameOption().SetCreatureY(rt.top); } ////// creature Info if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_CREATURE_PAGE, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetCreatureInfoX(rt.left); GetGameOption().SetCreatureInfoY(rt.top); } ////// creature skill if( m_hashUIWindowMap.lookup( TOGGLE_WINDOW::UIWINDOW_CREATURE_SKILL, pUIWin ) ) { rt = pUIWin->GetRect(); GetGameOption().SetCreatureSkillX(rt.left); GetGameOption().SetCreatureSkillY(rt.top); } } bool SGameInterface::IsShow( int nWinID ) { SUIWnd* pFindWin = NULL; if( m_hashUIWindowMap.lookup( nWinID, pFindWin ) ) { if( pFindWin ) return pFindWin->IsShow(); } return false; } //파티원이 로그인과 동시에 ENTER발생하는 경우 호출해야하는 함수 void SGameInterface::SetShowGuage( AR_HANDLE handle, bool bEnter ) { CHARWINDOW* pCWnd = getCharacterWnd( handle ); if( !pCWnd || !pCWnd->pWnd ) return; unsigned char Type; if( !bEnter || !m_pDisplayInfo->IsFriend(handle, Type) ) { pCWnd->pWnd->RemoveHpGuage(); return; } if( !pCWnd->pWnd->IsShowHpGuage() ) //보여지고 있으면 이미 SetHPGaugeBack()을 한것이니 다시 하지말자 -N4- { /// 2010.11.24 - prodongi pCWnd->pWnd->SetHPGaugeBack( "common_gauge_titanium_player_hp100_mini" ); //HP 쎄팅 SGame* pGame(NULL); pGame = m_pGameManager->GetActiveGame(); if( pGame ) { SGameAvatarEx* pAvatar = (SGameAvatarEx*)( pGame->GetGameObject(handle) ); if( pAvatar ) pCWnd->pWnd->RefreshHP( pAvatar->GetHP(), pAvatar->GetMaxHP() ); } } } // Return values: // 1: Self // 2: Party member // 3: Guild member during Dungeon Siege // 4: NPC // 5: Summoned creature // 6: Party member's creature // 7: Guild member's creature during Dungeon Siege // // Function to check if the target corresponding to the handle is a friend -N4- // Normally, party avatars and the creature itself are considered allies. // During Dungeon Siege, guild members and their creatures are also included as allies. int SGameInterface::IsFriend( AR_HANDLE Handle, unsigned char& rType ) { return m_pDisplayInfo->IsFriend(Handle, rType); } bool SGameInterface::IsShowLoadingWnd() { if( !m_pLoadingWnd ) return false; return m_pLoadingWnd->IsShow(); } bool SGameInterface::IsShowProtectSolutionWnd() { if( !m_pProtectSolutionWnd ) return false; return m_pProtectSolutionWnd->IsShow(); } bool SGameInterface::IsShowEndingWnd() { if( !m_pEndingWnd ) return false; return m_pEndingWnd->IsShow(); } bool SGameInterface::IsShowFadeInOutWnd() { if( !m_pFadeInOutEffectWnd ) return false; return m_pFadeInOutEffectWnd->IsShow(); } bool SGameInterface::IsEndFadeInOutWnd() { if( !m_pFadeInOutEffectWnd ) return false; return m_pFadeInOutEffectWnd->IsEnd(); } bool SGameInterface::IsWebPageWndOpened() { //크루샵 떠 있으면, 따로 처리 if( IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_CASH_TITLE ) || //크루샵 Open IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_GUILD_TITLE ) || //길드 Web IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_HELP_TITLE ) || //Help Web IsUIWindowOpened( TOGGLE_WINDOW::UIWINDOW_POPURL_TITLE) ) //Web PopUp { return true; } return false; } /// 2011.11.09 팝업 윈도우에 메세지 전달 - prodongi void SGameInterface::pumpUpMessageToPopup(KArg& msg) { if (WM_LBUTTONDOWN != msg.at(0)) return ; struct sPumpUpMessageToPopup { sPumpUpMessageToPopup(SGameInterface* gameInterface, int x, int y) : m_gameInterface(gameInterface) { m_msg.m_strString = "popup_update"; m_msg.m_nNumber = number_t(x); m_msg.m_nNumber2 = number_t(y); } void operator() (int id) { SUIWnd* wnd = m_gameInterface->GetUIWindow(id); if (wnd && wnd->IsShow()) wnd->ProcMsgAtStatic(&m_msg); } SGameInterface* m_gameInterface; SIMSG_UI_SEND_DATA m_msg; }; int x = LOWORD(msg.at(2)); int y = HIWORD(msg.at(2)); std::for_each(m_popupList.begin(), m_popupList.end(), sPumpUpMessageToPopup(this, x, y)); } void SGameInterface::addPopupList(int id) { std::vector::iterator it = std::find(m_popupList.begin(), m_popupList.end(), id); if (it != m_popupList.end()) return ; m_popupList.push_back(id); } bool SGameInterface::IsEnemyUnit(AR_HANDLE handle, unsigned char type) { SGame* pGame(NULL); pGame = m_pGameManager->GetActiveGame(); if(pGame == NULL) return false; // 공격이 가능하 //if( IsAttack(handle) ) //{ // if(pGame->IsFriend(handle, type) == false) // 적군 // return true; //} //return false; return IsAttack(handle); } bool SGameInterface::IsAttack( AR_HANDLE handle ) { SGame* pGame(NULL); pGame = m_pGameManager->GetActiveGame(); if(pGame == NULL) return false; SGameAvatarEx* pAvatar(NULL); pAvatar = (SGameAvatarEx*)( pGame->GetGameObject(handle) ); if( pAvatar ) return pGame->IsAttack(pAvatar); return false; //int curLocation = pGame->GetCurrentLocation(); //return ( curLocation == PLAYER_IN_DUNGEON_SIEGE || ( curLocation == PLAYER_IN_ARENA ) ); } void SGameInterface::SetCreatureNamePanel( AR_HANDLE playerHandle, unsigned status ) { // 로컬플레이어가 아닐경우 크리쳐의 네임패널 변경 함수 호출.. SGame* pGame(NULL); pGame = m_pGameManager->GetActiveGame(); if(pGame) { unsigned char rType = TS_ENTER::GAME_PLAYER; if( pGame->IsFriend(playerHandle, rType) == 1 ) // 자기 자신일 경우.. enum값이 없다... return; SGameAvatarEx* pAvatar(NULL); pAvatar = (SGameAvatarEx*)( pGame->GetGameObject(playerHandle) ); if( pAvatar ) { AR_HANDLE hCreature = pAvatar->GetCreature(); CHARWINDOW *pCWndCreature = getCharacterWnd(hCreature); if( pCWndCreature && pCWndCreature->pWnd ) pCWndCreature->pWnd->setCreatureState( status ); } } } bool SGameInterface::checkPasswordCount() { m_passwordCount.inc(); /// 2012.04.04 - prodongi if (m_passwordCount.end()) { OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOCONNECTSERVER, false, SYS_MSG_SERVER_DISCONNECT ); return true; } return false; } void SGameInterface::initArenaWnds() { if (!createWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_MENU)) assert(0 && "failed create arena menu wnd"); if (!createWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_SELECTION_READY)) assert(0 && "failed create arena select ready wnd"); if (!createWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_PRACTICE_READY)) assert(0 && "failed create arena practice ready wnd"); if (!createWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_WAITING)) assert(0 && "failed create arena waiting wnd"); if (!createWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_PRACTICE_WAITING)) assert(0 && "failed create arena practice waiting wnd"); if (!createWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_GAME_CLASSIC)) assert(0 && "failed create arena game classic wnd"); if (!createWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_GAME_SLAUGHTER)) assert(0 && "failed create arena game slaughter wnd"); if (!createWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_GAME_BINGO)) assert(0 && "failed create arena game bingo wnd"); if (!createWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_GAME_BINGO_BOARD)) assert(0 && "failed create arena game bingo board wnd"); if (!createWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_GAME_SLAUGHTER_PRACTICE)) assert(0 && "failed create arena game slaughter practice wnd"); if (!createWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_RESULT)) assert(0 && "failed create arena result wnd"); if (!createWindow(TOGGLE_WINDOW::UIWINDOW_ARENA_REPORT_DIVE)) assert(0 && "failed create arena report dive wnd"); } void SGameInterface::setArenaJoinSituation(char const* string, int ways) { sArenaJoinSituationCondition situationCondition; /// way situationCondition.m_notificationWays = ways; situationCondition.addNone(string); g_pCurrentGameSystem->isValidArenaJoinSituation(situationCondition); } void SGameInterface::hideAllBattleArenaWnd() { m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ARENA_MENU, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ARENA_SELECTION_READY, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ARENA_PRACTICE_READY, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ARENA_WAITING, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ARENA_PRACTICE_WAITING, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ARENA_GAME_CLASSIC, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ARENA_GAME_SLAUGHTER, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ARENA_GAME_BINGO, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ARENA_GAME_BINGO_BOARD, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ARENA_GAME_SLAUGHTER_PRACTICE, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ARENA_RESULT, false ) ); m_pGameManager->ProcMsgAtStatic( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ARENA_REPORT_DIVE, false ) ); } void SGameInterface::updatePlayerName() { SGameAvatarEx* localPlayer = g_pCurrentGameSystem->GetLocalPlayer(); if (!localPlayer) return ; CHARWINDOW* cwnd = getCharacterWnd(localPlayer->GetArID()); if (!cwnd) return ; sArenaSystem* arenaSystem = g_pCurrentGameSystem->getArenaSystem(); char const* name = arenaSystem->getPlayerName(m_pDisplayInfo->GetPlayerInfoManager()); cwnd->pWnd->SetName(name, "<@313246>"); } //----------------------------------------------------------------------------------------------------------------- // 각성 윈도우 초기화 //----------------------------------------------------------------------------------------------------------------- void SGameInterface::InitAwakeningWnd() { // 2012.10.16 Metin SUIAwakeningWnd* pAwakeningWnd = new SUIAwakeningWnd( m_pGameManager, m_pDisplayInfo); CreateWnd( pAwakeningWnd, KPoint( 0, 0 ), TOGGLE_WINDOW::UIWINDOW_AWAKENING, false, "각성" ); } //----------------------------------------------------------------------------------------------------------------- // 분해 윈도우 초기화 //----------------------------------------------------------------------------------------------------------------- void SGameInterface::InitDecomposeWnd() { SUIDecompositionWnd* pDecompositonWnd( new SUIDecompositionWnd( m_pGameManager, m_pDisplayInfo ) ); if( pDecompositonWnd ) { if( CreateWnd( pDecompositonWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_DECOMPOSITION, false, "분해" ) ) pDecompositonWnd->SetShow( false ); else { SDEBUGLOG( "[GameInterface] Failed Create Decomposition Window" ); assert( pDecompositonWnd ); } } else { SDEBUGLOG( "[GameInterface] Failed alloc Decomposition Window" ); assert( pDecompositonWnd ); } } //----------------------------------------------------------------------------------------------------------------- // 타겟 윈도우 초기화 //----------------------------------------------------------------------------------------------------------------- void SGameInterface::InitTargetWnds() { int nPosX( KUIWndManager::GetResolution().cx * 0.5f ); SUITargetWnd_Player* pTargetWnd_Player( new SUITargetWnd_Player( m_pGameManager, m_pDisplayInfo ) ); if( pTargetWnd_Player ) { if( CreateWnd( pTargetWnd_Player, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_TARGET_PLAYER, false, "타겟 (플레이어)" ) ) { pTargetWnd_Player->SetShow( false ); pTargetWnd_Player->MovePos( nPosX, 0 ); } } else { SLOG( "[GameInterface] Failed alloc Target (Player) Window" ); assert( pTargetWnd_Player ); } SUITargetWnd_Creature* pTargetWnd_Creature( new SUITargetWnd_Creature( m_pGameManager, m_pDisplayInfo ) ); if( pTargetWnd_Creature ) { if( CreateWnd( pTargetWnd_Creature, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_TARGET_CREATURE, false, "타겟 (크리쳐)" ) ) { pTargetWnd_Creature->SetShow( false ); pTargetWnd_Creature->MovePos( nPosX, 0 ); } } else { SLOG( "[GameInterface] Failed alloc Target (Creature) Window" ); assert( NULL ); } SUITargetWnd_Npc* pTargetWnd_Npc( new SUITargetWnd_Npc( m_pGameManager, m_pDisplayInfo ) ); if( pTargetWnd_Npc ) { if( CreateWnd( pTargetWnd_Npc, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_TARGET_NPC, false, "타겟 (NPC)" ) ) { pTargetWnd_Npc->SetShow( false ); pTargetWnd_Npc->MovePos( nPosX, 0 ); } } else { SLOG( "[GameInterface] Failed alloc Target (NPC) Window" ); assert( NULL ); } SUITargetWnd_Prop* pTargetWnd_Prop( new SUITargetWnd_Prop( m_pGameManager, m_pDisplayInfo ) ); if( pTargetWnd_Prop ) { if( CreateWnd( pTargetWnd_Prop, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_TARGET_PROP, false, "타겟 (프랍)" ) ) { pTargetWnd_Prop->SetShow( false ); pTargetWnd_Prop->MovePos( nPosX, 0 ); } } else { SLOG( "[GameInterface] Failed alloc Target (Prop) Window" ); assert( NULL ); } SUITargetStateWnd* pTargetStateWnd( new SUITargetStateWnd( m_pGameManager, m_pDisplayInfo ) ); if( pTargetStateWnd ) { if( CreateWnd( pTargetStateWnd, KPoint(0, 0), TOGGLE_WINDOW::UIWINDOW_TARGET_STATE, false, "버프 (타켓창)" ) ) { if( pTargetWnd_Player ) { KRect rtTargetPlayer( pTargetWnd_Player->GetRect() ); KRect rtTargetState( pTargetStateWnd->GetRect() ); int nOffset( ( rtTargetPlayer.GetWidth() - rtTargetState.GetWidth() ) / 2 ); pTargetStateWnd->MovePos( rtTargetPlayer.left + nOffset, rtTargetPlayer.bottom ); } } } else { SLOG( "[GameInterface] Failed alloc Target State (Buff) Window" ); assert( NULL ); } } void SGameInterface::UpdateShowWindowList( SUIWnd* pUIWin ) { // Exception handling (e.g. the creature info window closes only when clicked) if( stricmp( pUIWin->GetID(), "window_simple_summon" ) == 0 ) return; bool bEscWnd = false; for( unsigned int i(0); m_EscHotKeyWinList.size()>i; i++ ) { SUIWnd* pEscHotKeyWnd = m_EscHotKeyWinList[i]; if( stricmp( pUIWin->GetID(), pEscHotKeyWnd->GetID() ) == 0 ) // If it’s a window that can be closed with ESC { bEscWnd = true; break; } } if( true == bEscWnd ) { // Add it to m_ShowWindowList if( true == pUIWin->IsShow() ) // Add the currently visible UI to m_ShowWindowList m_ShowWindowList.push_front( pUIWin ); else // Find the UI that disappears from the screen and remove it from m_ShowWindowList { std::list< SUIWnd* >::iterator it; for( it = m_ShowWindowList.begin() ; it != m_ShowWindowList.end() ; ++it ) { SUIWnd* pShowWnd = *(it); // UI window that disappears if( stricmp( pShowWnd->GetID(), pUIWin->GetID() ) == 0 ) { LPCSTR strWinID = pShowWnd->GetID(); _oprint("Erasing [ %s ] window\n", strWinID); m_ShowWindowList.erase( it ); _oprint("[ %s ] window successfully got erased!\n", strWinID); break; } } } } _oprint("END OF void SGameInterface::UpdateShowWindowList( SUIWnd* pUIWin )\n"); }