#include "stdafx.h" #include "KUITabControl.h" #include "KUIControlButton.h" #include "KUIControlCombo.h" #include "SGameManager.h" #include "SGameMessage.h" //#include "SGameMessageUI.h" #include "SUISystemWnd.h" #include "SUIDisplayInfo.h" #include "SgameWorldKeymapping.h" #include "SStringDB.h" #include "SGameOption.h" #include "SUISysMsgDefine.h" #include "KUIControlSlider.h" #include "KUIControlStatic.h" #include "KUIControlScroll.h" #include #include #include "SDebug_Util.h" using namespace SGAME_OPT_DATA; // 2010.06.11 - prodongi #include "SGameSystem.h" #include "SGameAvatarEx.h" extern SGameSystem * g_pCurrentGameSystem; //SGameSystem * g_pCurrentGameSystem=NULL; namespace{ enum { // 탭 타입 TAB_ENVIROMENT = 0, TAB_PLAY, TAB_KEYMAPPING //TAB_INTERFACE = MODE_UI, }; enum MODE { GRAPHIC_TEXTURE = 0, GRAPHIC_BACKGROUND, SOUND_BG, SOUND_EFFECT, GRAPHIC_RESOLUTION, // 차후에 추가 될 것들 GRAPHIC_SCREENBIT, GRAPHIC_SCREENBRIGHT, GRAPHIC_BLOOMEFFECT, GRAPHIC_MODELING, GRAPHIC_SHADOW, GRAPHIC_CHARACTER, GRAPHIC_PROP, SOUND_MAIN, SOUND_SURROUND, MINIMAP_ALPHA, MINIMAP_OPEN, INTERFACE_FACECUT, INTERFACE_MINIMAP, INTERFACE_ZOOM, }; enum GRAPHIC { GRAPHIC_REAL = 0, GRAPHIC_HIGH = 1, GRAPHIC_NORMAL = 2, GRAPHIC_LOW = 3, GRAPHIC_LOW_MORE = 4, }; enum SOUND { SOUND_00 = 0, SOUND_01 = 1, SOUND_02 = 2, SOUND_03 = 3, SOUND_04 = 4, SOUND_05 = 5, SOUND_06 = 6, SOUND_07 = 7, SOUND_08 = 8, SOUND_09 = 9, SOUND_10 = 10, }; enum INTERFACE { INTERFACE_SMALL = 0, INTERFACE_NORMAL, INTERFACE_LARGE, }; enum MINIMAP { MINIMAP_ALPHA_MIN = 0, MINIMAP_ALPHA_MIDDLE, MINIMAP_ALPHA_MAX, }; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 게임 환경 옵션 관련 =================================================== enum CONTROL { WinBright, //바탕화면 밝기 적용 0 Bright, //화면 밝기 설정 1 StateEffect, //지속효과 표시 2 StateEffectPlayer, //자신과 크리처 3 StateEffectParty, //파티원 4 StateEffectEnemy, //타겟 5 GlowQual, //글로우 이펙트 6 //WaterQual, //물반사 효과 7 // 2011.11.29 - servantes : 사용하지 않아 주석 처리 TreeAlpha, //나무 투명화 8 Enhance, //무기 강화 효과 9 Shadow, //그림자 표시 10 HeightShadow, //자세히 11 LowShadow, //단순히 12 TownLimit, //마을 내 최소구조물 표시 13 BackGrondDis, //배경 표시거리 14 AvatarDis, //캐릭터 표시 거리 15 MipBias, //택스처 품질 16 //Repeat, //현재 배경음 반복 17 // 2011.11.29 - servantes : 옵션 nui에 해당 효과 없음 / 주석처리 AllMute, //전체음 소거 18 BGM_Mute, //배경음 소거 19 SFX_Mute, //효과음 소거 20 ENVS_Mute, //환경음 소거 21 BGM_Volume, //배경음 볼륨 22 SFX_Volume, //효과음 볼륨 23 ENVS_Volume, //환경음 볼륨 24 MASTER_Volume, //전체음 볼륨 25 Refreshrate, //주사율 26 RenderTree, //나무 표시 27 RenderGrass, //풀 표시 28 Effect, //이펙트 표시 29 EffectPlayer, //자신과 크리처 30 EffectParty, //파티원 31 EffectEnemy, //타겟 32 LightMap, //라이트멥 33 MAXCONTROL }; //체크컨트롤과 서로 매치되야할 static컨트롤 ›? const char* c_Control[MAXCONTROL][2] = { "common_checkbox01", "static_text_23", //바탕화면 밝기 적용 0 "hslider_light", "static_text_19", //화면 밝기 설정 1 "common_checkbox07", "static_text_27", //지속효과 표시 2 "common_checkbox08", "static_text_28", //자신과 크리처 3 "common_checkbox09", "static_text_29", //파티원 4 "common_checkbox10", "static_text_30", //타겟 5 "common_checkbox02", "static_text_10", //글로우 이펙트 6 //"common_checkbox04", "static_text_17", //물반사 효과 7 // 2011.11.24 - servantes : 옵션 nui에 해당 효과 없음 / 주석처리 //"common_checkbox04", "", // : 이름 버퍼의 개수를 맞추기 위해 "static_text_17" 를 ""로 변경 "common_checkbox05", "static_text_24", //나무 투명화 8 "common_checkbox06", "static_text_26", //무기 강화 효과 9 "common_checkbox11", "static_text_12", //그림자 표시 10 "common_radiobutton01", "static_text_25", //자세히 11 "common_radiobutton02", "static_text_22", //단순히 12 "common_checkbox12", "static_text_31", //마을 내 최소구조물 표시 13 "hslider_background_range", "static_text_03", //배경 표시거리 14 "hslider_char_range", "static_text_05", //캐릭터 표시 거리 15 "hslider_texture", "static_text_11", //택스처 품질 16 //"common_checkbox13", "static_text05", //현재 배경음 반복 17 // 2011.11.29 - servantes : 옵션 nui에 해당 효과 없음 / 주석처리 "check_mute00", "static_text32", //전체음 소거 18 "check_mute01", "static_text02", //배경음 소거 19 "check_mute02", "static_text04", //효과음 소거 20 "check_mute03", "static_text07", //환경음 소거 21 "hslider_back_sound", "static_text01", //배경음 볼륨 22 "hslider_effect_sound", "static_text03", //효과음 볼륨 23 "hslider_environment_sound","static_text06", //환경음 볼륨 24 "hslider_all_sound", "static_text08", //전체음 볼륨 25 "static_text_01", "static_text_01", //주사율 26 "common_checkbox14", "static_text_32", //나무 표시 27 "common_checkbox15", "static_text_33", //풀 표시 28 "common_checkbox16", "static_text_34", //이펙트 표시 29 "common_checkbox17", "static_text_35", //자신과 크리처 30 "common_checkbox18", "static_text_36", //파티원 31 "common_checkbox19", "static_text_37", //타겟 32 "common_checkbox_lightmap", "static_text_lightmap", //라이트멥 33 }; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //게임 플레이 옵션 관련 enum PLAYCONTROL { PlayerGage, //자신과 파티원 MonsterGage, //몬스터 TargetGage, //타겟 OPlayerName, //플레이어 CreatureName, //크리처 MonsterName, //몬스터 NPCName, //NPC PlayerDM, //자신 CratureDM, //크리처 PartyDM, //파티원 WinPosClear, //윈도우 위치 초기화 ChatBalloon, //말풍선 Tip, //게임팁 SimpleStore, //간단상점 DetailStore, //기본상점 AvatarStore, //아바타 CameraCollision, // 카메라 충돌 MAX }; //체크컨트롤과 서로 매치되야할 static컨트롤 ›? const char* c_PlayControl[PLAYCONTROL::MAX][2] = { "common_checkbox12", "static_text_26", //자신과 파티원 "common_checkbox13", "static_text_27", //몬스터 "common_checkbox14", "static_text_28", //타겟 "common_checkbox16", "static_text_30", //플레이어 "common_checkbox17", "static_text_12", //크리처 "common_checkbox18", "static_text_25", //몬스터 "common_checkbox19", "static_text_22", //NPC "common_checkbox21", "static_text32", //자신 "common_checkbox22", "static_text01", //크리처 "common_checkbox23", "static_text03", //파티원 "button03", "static_text04", //초기화 "common_checkbox07", "static_text_05", //말풍선 "common_checkbox08", "static_text_11", //팁 "common_radiobutton02", "static_text_33", //간단상점 "common_radiobutton03", "static_text_34", //기본상점 "common_radiobutton04", "static_text_35", //아바타 "common_checkbox26", "static_text08", //카메라 충돌 }; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////// // 키맵핑관련 /////////////////////////// enum KEYMAPPINGCONTROL { //이건 gui 순서대로.... //아마 이게 sgameoption으로 넘어가지 않을까? STATIC_MENUKEY = 0, //메뉴키설정 KM1_CROWSHOP, KM1_EQUIP_WND, // 장작창 KM1_INVENTORY, KM1_UPGRADE_WND, // 강화창 KM1_ITEMCOMBINE_WND, // 조합창 KM1_REPAIR_WND, // 수리/복원/충전 KM1_SKILL, KM1_CHARACTER, KM1_CREATUREFORMATION, KM1_CREATURESKILL, KM1_CREATUREINFO, KM1_MESSENGER, KM1_GUILD, KM1_PARTY, KM1_QUEST, KM1_WOLRDMAP, KM1_CONTROL, KM1_HELP, KM1_SYSTEM, KM1_OPTION, KM1_SLOTUPDOWN, KM1_SLOTCHANGE, // 2010.08.17. 무기스왑. KM1_DURABILITY, // 2010.08.17. 내구도출력UI. KM1_DESTRUCTION, // 2010.09.02. 파괴창. KM1_TITLE, // 2012. 6. 7 - marine 호칭창 KM1_ARENASCORE, // 아레나 스코어 KM1_PARTYMATCHING_WND,// 파티매칭 STATIC_KEYMOVMENU, KM1_HMOVE_UP, KM1_HMOVE_LEFT, KM1_HMOVE_RIGHT, KM1_HMOVE_DOWN, /// 2011.11.23 파티창 - prodongi STATIC_PARTYMENU, KM1_PARTY_1, KM1_PARTY_2, KM1_PARTY_3, KM1_PARTY_4, KM1_PARTY_5, KM1_PARTY_6, KM1_PARTY_7, KM1_PARTY_8, //STATIC_MOUSEMENU, //마우스메뉴 //KM2_MOVECLICK, //KM2_CAMERAMOVE, STATIC_TIPMENU, //팁메뉴 KM3_EXIT, KM3_TARGETWINDOW, KM3_INTERFACEHIDE, KM3_MINIMAPZOOMIN, KM3_MINIMAPZOOMOUT, KM3_PKMODE, KM3_MOVETARGET, KM3_PICKUPITEM, //일단 귀찮으니 생략. STATIC_SLOT1, //슬롯1 KM4_01, KM4_02, KM4_03, KM4_04, KM4_05, KM4_06, KM4_07, KM4_08, KM4_09, KM4_10, KM4_11, KM4_12, STATIC_SLOT2, //슬롯2 KM5_01, KM5_02, KM5_03, KM5_04, KM5_05, KM5_06, KM5_07, KM5_08, KM5_09, KM5_10, KM5_11, KM5_12, STATIC_SLOT3, //슬롯3 KM6_01, KM6_02, KM6_03, KM6_04, KM6_05, KM6_06, KM6_07, KM6_08, KM6_09, KM6_10, KM6_11, KM6_12, STATIC_SLOT4, //슬롯4 KM7_01, KM7_02, KM7_03, KM7_04, KM7_05, KM7_06, KM7_07, KM7_08, KM7_09, KM7_10, KM7_11, KM7_12, STATIC_SLOT5, //슬롯5 KM8_01, KM8_02, KM8_03, KM8_04, KM8_05, KM8_06, KM8_07, KM8_08, KM8_09, KM8_10, KM8_11, KM8_12, STATIC_SLOT6, //슬롯6 KM9_01, KM9_02, KM9_03, KM9_04, KM9_05, KM9_06, KM9_07, KM9_08, KM9_09, KM9_10, KM9_11, KM9_12, STATIC_SLOT7, //슬롯7 KM10_01, KM10_02, KM10_03, KM10_04, KM10_05, KM10_06, KM10_07, KM10_08, KM10_09, KM10_10, KM10_11, KM10_12, STATIC_SLOT8, //슬롯8 KM11_01, KM11_02, KM11_03, KM11_04, KM11_05, KM11_06, KM11_07, KM11_08, KM11_09, KM11_10, KM11_11, KM11_12, KEYMAPPINGCONTROLMAX }; struct KeymappingInfo { int hotkeycode; char *editbuttonid; char *outboxid; char *undobuttonid; int original_y; char *text; char *tip; }; const int nPrevKeyCount = 5; // undo 가능횟수.. std::list PrevKeyList[HOTKEYCODE::MAX]; KeymappingInfo KeymappingInfoList[KEYMAPPINGCONTROL::KEYMAPPINGCONTROLMAX] = { -1,"static_slot_1000","","",-1,"<$6840:메뉴키_설정>","", HOTKEYCODE::CROWSHOP,"button_key1001","static_outbox1001","button_undo1001",-1,"<$6860:크루샵>","<$6912:메뉴키의크루샵>", HOTKEYCODE::EQUIP_WND, "button_key1002","static_outbox1002","button_undo1002",-1,"장착창","메뉴키의 '장착창", HOTKEYCODE::INVENTORY,"button_key1003","static_outbox1003","button_undo1003",-1,"<$6861:인벤토리>","<$6913:인벤>", HOTKEYCODE::UPGRADE_WND, "button_key1004","static_outbox1004","button_undo1004",-1,"강화창","메뉴키의 '강화창", HOTKEYCODE::ITEMCOMBINE_WND,"button_key1005","static_outbox1005","button_undo1005",-1,"조합창","메뉴키의 '조합창", HOTKEYCODE::REPAIR_WND, "button_key1006","static_outbox1006","button_undo1006",-1,"수리/복원/충전","메뉴키의 '수리/복원/충전", HOTKEYCODE::SKILL,"button_key1007","static_outbox1007","button_undo1007",-1,"<$6862:스킬>","<$6914:스킬>", HOTKEYCODE::CHARACTER,"button_key1008","static_outbox1008","button_undo1008",-1,"<$6863:캐릭터>","<$6915:캐릭>", HOTKEYCODE::CREATUREFORMATION,"button_key1009","static_outbox1009","button_undo1009",-1,"<$6864:크리쳐편성>","<$6916:크리쳐편성>", HOTKEYCODE::CREATURESKILL,"button_key1010","static_outbox1010","button_undo1010",-1,"<$6865:크리쳐스킬>","<$6917:크리쳐스킬>", HOTKEYCODE::CREATUREINFO,"button_key1011","static_outbox1011","button_undo1011",-1, "<$6866:크리쳐정보>","<$6918:몰라>", HOTKEYCODE::MESSENGER,"button_key1012","static_outbox1012","button_undo1012",-1,"<$6867:메신저>","<$6919:몰라>", HOTKEYCODE::GUILD,"button_key1013","static_outbox1013","button_undo1013",-1,"<$6868:길드>","<$6920:몰라>", HOTKEYCODE::PARTY_FOLD,"button_key1014","static_outbox1014","button_undo1014",-1,"<$9842:파티>","<$6921:몰라>", HOTKEYCODE::QUEST,"button_key1015","static_outbox1015","button_undo1015",-1,"<$6869:퀘스트>","<$6922:몰라>", HOTKEYCODE::WOLRDMAP,"button_key1016","static_outbox1016","button_undo1016",-1,"<$6870:월드맵>","<$6923:몰라>", HOTKEYCODE::CONTROL,"button_key1017","static_outbox1017","button_undo1017",-1,"<$6871:조작>","<$6924:몰라>", HOTKEYCODE::HELP,"button_key1018","static_outbox1018","button_undo1018",-1,"<$6872:도움말>","<$6925:몰라>", HOTKEYCODE::SYSTEM,"button_key1019","static_outbox1019","button_undo1019",-1,"<$6873:시스템>","<$6926:몰라>", HOTKEYCODE::OPTION,"button_key1020","static_outbox1020","button_undo1020",-1,"<$6899:옵션>","<$6927:몰라>", HOTKEYCODE::SLOTUPDOWN,"button_key1021","static_outbox1021","button_undo1021",-1,"<$6874:슬롯올리기/내리기>","<$6928:몰라>", HOTKEYCODE::SLOTCHANGE,"button_key1023","static_outbox1023","button_undo1023",-1,"무기교체","메뉴키의 '무기교체", HOTKEYCODE::DURABILITY,"button_key1024","static_outbox1024","button_undo1024",-1,"내구도출력","메뉴키의 '내구도출력", HOTKEYCODE::DESTRUCTION,"button_key1025","static_outbox1025","button_undo1025",-1,"파괴창","메뉴키의 '파괴창", HOTKEYCODE::TITLE,"button_key1026","static_outbox1026","button_undo1026",-1,"<$690000014:호칭>","<$690000014:호칭>", HOTKEYCODE::ARENASCORE,"button_key1027","static_outbox1027","button_undo1027",-1,"<$2401:아레나 경기 현황 보기>","<$2401:아레나 경기 현황 보기>", HOTKEYCODE::PARTYMATCHING_WND, "button_key1028","static_outbox1028","button_undo1028",-1,"파티매칭","메뉴키의 '파티매칭창",// 파티매칭 -1,"static_slot_13001","","",-1,"<$1165:이동_키_설정>","<$1165:이동_키_설정>", HOTKEYCODE::HMOVE_UP,"button_key13001","static_outbox13001","button_undo13001",-1,"전방이동","이동 키의 '전방이동", HOTKEYCODE::HMOVE_LEFT,"button_key13002","static_outbox13002","button_undo13002",-1,"좌현이동","이동 키의 '좌현이동", HOTKEYCODE::HMOVE_RIGHT,"button_key13003","static_outbox13003","button_undo13003",-1,"우현이동","이동 키의 '우현이동", HOTKEYCODE::HMOVE_DOWN,"button_key13004","static_outbox13004","button_undo13004",-1,"후방이동","이동 키의 '후방이동", /// 2011.11.23 - prodongi -1,"static_slot_12000","","",-1,"<$1213:파티원_선택>","", HOTKEYCODE::PARTY_1,"button_key12001","static_outbox12001","button_undo12001",-1,"1번 파티원","<$1214:몰라>", HOTKEYCODE::PARTY_2,"button_key12002","static_outbox12002","button_undo12002",-1,"2번 파티원","<$1215:몰라>", HOTKEYCODE::PARTY_3,"button_key12003","static_outbox12003","button_undo12003",-1,"3번 파티원","<$1216:몰라>", HOTKEYCODE::PARTY_4,"button_key12004","static_outbox12004","button_undo12004",-1,"4번 파티원","<$1217:몰라>", HOTKEYCODE::PARTY_5,"button_key12005","static_outbox12005","button_undo12005",-1,"5번 파티원","<$1218:몰라>", HOTKEYCODE::PARTY_6,"button_key12006","static_outbox12006","button_undo12006",-1,"6번 파티원","<$1219:몰라>", HOTKEYCODE::PARTY_7,"button_key12007","static_outbox12007","button_undo12007",-1,"7번 파티원","<$1220:몰라>", HOTKEYCODE::PARTY_8,"button_key12008","static_outbox12008","button_undo12008",-1,"8번 파티원","<$1221:몰라>", //-1,"static_slot_2000","","",-1,"<$6841:마우스_메뉴>", //MOVECLICK,"button_key2001","static_outbox2001","button_undo2001",-1,"<$6876:이동클릭>", //CAMERAMOVE,"button_key2002","static_outbox2002","button_undo2002",-1,"<$6877:카메라_움직이기>", -1,"static_slot_3000","","",-1,"<$6842:팁_메뉴>","", HOTKEYCODE::EXIT,"button_key3001","static_outbox3001","button_undo3001",-1,"<$6900:게임_종료>","<$6930:몰라>", HOTKEYCODE::TARGETWINDOW,"button_key3002","static_outbox3002","button_undo3002",-1,"<$6878:타겟창>","<$6931:몰라>", HOTKEYCODE::INTERFACEHIDE,"button_key3003","static_outbox3003","button_undo3003",-1,"<$6879:인터페이스_숨기기>","<$6932:몰라>", HOTKEYCODE::MINIMAPZOOMIN,"button_key3004","static_outbox3004","button_undo3004",-1,"<$6901:미니맵_확대>","<$6933:몰라>", HOTKEYCODE::MINIMAPZOOMOUT,"button_key3005","static_outbox3005","button_undo3005",-1,"<$6902:미니맵_축소>","<$6934:몰라>", HOTKEYCODE::PKMODE,"button_key3006","static_outbox3006","button_undo3006",-1,"<$6903:PK_모드켜기/_ 끄기>","<$6935:몰라>", HOTKEYCODE::AUTOTARGETING,"button_key3007","static_outbox3007","button_undo3007",-1,"<$6881:타겟이동>","<$6936:몰라>", HOTKEYCODE::PICKUPITEM,"button_key3008","static_outbox3008","button_undo3008",-1,"<$6904:아이템_줍기>","<$6937:몰라>", -1,"static_slot_4000","","",-1,"<$6843:1슬롯_설정>","", HOTKEYCODE::SLOT1_01,"button_key4001","static_outbox4001","button_undo4001",-1,"<$6847:1번>","<$6938:몰라>", HOTKEYCODE::SLOT1_02,"button_key4002","static_outbox4002","button_undo4002",-1,"<$6848:2번>","<$6939:몰라>", HOTKEYCODE::SLOT1_03,"button_key4003","static_outbox4003","button_undo4003",-1,"<$6849:3번>","<$6940:몰라>", HOTKEYCODE::SLOT1_04,"button_key4004","static_outbox4004","button_undo4004",-1,"<$6850:4번>","<$6941:몰라>", HOTKEYCODE::SLOT1_05,"button_key4005","static_outbox4005","button_undo4005",-1,"<$6851:5번>","<$6942:몰라>", HOTKEYCODE::SLOT1_06,"button_key4006","static_outbox4006","button_undo4006",-1,"<$6852:6번>","<$6943:몰라>", HOTKEYCODE::SLOT1_07,"button_key4007","static_outbox4007","button_undo4007",-1,"<$6853:7번>","<$6944:몰라>", HOTKEYCODE::SLOT1_08,"button_key4008","static_outbox4008","button_undo4008",-1,"<$6854:8번>","<$6945:몰라>", HOTKEYCODE::SLOT1_09,"button_key4009","static_outbox4009","button_undo4009",-1,"<$6855:9번>","<$6946:몰라>", HOTKEYCODE::SLOT1_10,"button_key4010","static_outbox4010","button_undo4010",-1,"<$6856:10번>","<$6947:몰라>", HOTKEYCODE::SLOT1_11,"button_key4011","static_outbox4011","button_undo4011",-1,"<$6857:11번>","<$6948:몰라>", HOTKEYCODE::SLOT1_12,"button_key4012","static_outbox4012","button_undo4012",-1,"<$6858:12번>","<$6949:몰라>", -1,"static_slot_5000","","",-1,"<$6844:2슬롯_설정>","", HOTKEYCODE::SLOT2_01,"button_key5001","static_outbox5001","button_undo5001",-1,"<$6847:1번>","<$6950:몰라>", HOTKEYCODE::SLOT2_02,"button_key5002","static_outbox5002","button_undo5002",-1,"<$6848:2번>","<$6951:몰라>", HOTKEYCODE::SLOT2_03,"button_key5003","static_outbox5003","button_undo5003",-1,"<$6849:3번>","<$6952:몰라>", HOTKEYCODE::SLOT2_04,"button_key5004","static_outbox5004","button_undo5004",-1,"<$6850:4번>","<$6953:몰라>", HOTKEYCODE::SLOT2_05,"button_key5005","static_outbox5005","button_undo5005",-1,"<$6851:5번>","<$6954:몰라>", HOTKEYCODE::SLOT2_06,"button_key5006","static_outbox5006","button_undo5006",-1,"<$6852:6번>","<$6955:몰라>", HOTKEYCODE::SLOT2_07,"button_key5007","static_outbox5007","button_undo5007",-1,"<$6853:7번>","<$6956:몰라>", HOTKEYCODE::SLOT2_08,"button_key5008","static_outbox5008","button_undo5008",-1,"<$6854:8번>","<$6957:몰라>", HOTKEYCODE::SLOT2_09,"button_key5009","static_outbox5009","button_undo5009",-1,"<$6855:9번>","<$6958:몰라>", HOTKEYCODE::SLOT2_10,"button_key5010","static_outbox5010","button_undo5010",-1,"<$6856:10번>","<$6959:몰라>", HOTKEYCODE::SLOT2_11,"button_key5011","static_outbox5011","button_undo5011",-1,"<$6857:11번>","<$6960:몰라>", HOTKEYCODE::SLOT2_12,"button_key5012","static_outbox5012","button_undo5012",-1,"<$6858:12번>","<$6961:몰라>", -1,"static_slot_6000","","",-1,"<$6845:3슬롯_설정>","", HOTKEYCODE::SLOT3_01,"button_key6001","static_outbox6001","button_undo6001",-1,"<$6847:1번>","<$6962:몰라>", HOTKEYCODE::SLOT3_02,"button_key6002","static_outbox6002","button_undo6002",-1,"<$6848:2번>","<$6963:몰라>", HOTKEYCODE::SLOT3_03,"button_key6003","static_outbox6003","button_undo6003",-1,"<$6849:3번>","<$6964:몰라>", HOTKEYCODE::SLOT3_04,"button_key6004","static_outbox6004","button_undo6004",-1,"<$6850:4번>","<$6965:몰라>", HOTKEYCODE::SLOT3_05,"button_key6005","static_outbox6005","button_undo6005",-1,"<$6851:5번>","<$6966:몰라>", HOTKEYCODE::SLOT3_06,"button_key6006","static_outbox6006","button_undo6006",-1,"<$6852:6번>","<$6967:몰라>", HOTKEYCODE::SLOT3_07,"button_key6007","static_outbox6007","button_undo6007",-1,"<$6853:7번>","<$6968:몰라>", HOTKEYCODE::SLOT3_08,"button_key6008","static_outbox6008","button_undo6008",-1,"<$6854:8번>","<$6969:몰라>", HOTKEYCODE::SLOT3_09,"button_key6009","static_outbox6009","button_undo6009",-1,"<$6855:9번>","<$6970:몰라>", HOTKEYCODE::SLOT3_10,"button_key6010","static_outbox6010","button_undo6010",-1,"<$6856:10번>","<$6971:몰라>", HOTKEYCODE::SLOT3_11,"button_key6011","static_outbox6011","button_undo6011",-1,"<$6857:11번>","<$6972:몰라>", HOTKEYCODE::SLOT3_12,"button_key6012","static_outbox6012","button_undo6012",-1,"<$6858:12번>","<$6973:몰라>", -1,"static_slot_7000","","",-1,"<$6846:4슬롯_설정>","", HOTKEYCODE::SLOT4_01,"button_key7001","static_outbox7001","button_undo7001",-1,"<$6847:1번>","<$6974:몰라>", HOTKEYCODE::SLOT4_02,"button_key7002","static_outbox7002","button_undo7002",-1,"<$6848:2번>","<$6975:몰라>", HOTKEYCODE::SLOT4_03,"button_key7003","static_outbox7003","button_undo7003",-1,"<$6849:3번>","<$6976:몰라>", HOTKEYCODE::SLOT4_04,"button_key7004","static_outbox7004","button_undo7004",-1,"<$6850:4번>","<$6977:몰라>", HOTKEYCODE::SLOT4_05,"button_key7005","static_outbox7005","button_undo7005",-1,"<$6851:5번>","<$6978:몰라>", HOTKEYCODE::SLOT4_06,"button_key7006","static_outbox7006","button_undo7006",-1,"<$6852:6번>","<$6979:몰라>", HOTKEYCODE::SLOT4_07,"button_key7007","static_outbox7007","button_undo7007",-1,"<$6853:7번>","<$6980:몰라>", HOTKEYCODE::SLOT4_08,"button_key7008","static_outbox7008","button_undo7008",-1,"<$6854:8번>","<$6981:몰라>", HOTKEYCODE::SLOT4_09,"button_key7009","static_outbox7009","button_undo7009",-1,"<$6855:9번>","<$6982:몰라>", HOTKEYCODE::SLOT4_10,"button_key7010","static_outbox7010","button_undo7010",-1,"<$6856:10번>","<$6983:몰라>", HOTKEYCODE::SLOT4_11,"button_key7011","static_outbox7011","button_undo7011",-1,"<$6857:11번>","<$6984:몰라>", HOTKEYCODE::SLOT4_12,"button_key7012","static_outbox7012","button_undo7012",-1,"<$6858:12번>","<$6985:몰라>", -1,"static_slot_8000","","",-1,"<$6766:5슬롯_설정>","", HOTKEYCODE::SLOT5_01,"button_key8001","static_outbox8001","button_undo8001",-1,"<$6847:1번>","<$6974:몰라>", HOTKEYCODE::SLOT5_02,"button_key8002","static_outbox8002","button_undo8002",-1,"<$6848:2번>","<$6975:몰라>", HOTKEYCODE::SLOT5_03,"button_key8003","static_outbox8003","button_undo8003",-1,"<$6849:3번>","<$6976:몰라>", HOTKEYCODE::SLOT5_04,"button_key8004","static_outbox8004","button_undo8004",-1,"<$6850:4번>","<$6977:몰라>", HOTKEYCODE::SLOT5_05,"button_key8005","static_outbox8005","button_undo8005",-1,"<$6851:5번>","<$6978:몰라>", HOTKEYCODE::SLOT5_06,"button_key8006","static_outbox8006","button_undo8006",-1,"<$6852:6번>","<$6979:몰라>", HOTKEYCODE::SLOT5_07,"button_key8007","static_outbox8007","button_undo8007",-1,"<$6853:7번>","<$6980:몰라>", HOTKEYCODE::SLOT5_08,"button_key8008","static_outbox8008","button_undo8008",-1,"<$6854:8번>","<$6981:몰라>", HOTKEYCODE::SLOT5_09,"button_key8009","static_outbox8009","button_undo8009",-1,"<$6855:9번>","<$6982:몰라>", HOTKEYCODE::SLOT5_10,"button_key8010","static_outbox8010","button_undo8010",-1,"<$6856:10번>","<$6983:몰라>", HOTKEYCODE::SLOT5_11,"button_key8011","static_outbox8011","button_undo8011",-1,"<$6857:11번>","<$6984:몰라>", HOTKEYCODE::SLOT5_12,"button_key8012","static_outbox8012","button_undo8012",-1,"<$6858:12번>","<$6985:몰라>", -1,"static_slot_9000","","",-1,"<$6767:6슬롯_설정>","", HOTKEYCODE::SLOT6_01,"button_key9001","static_outbox9001","button_undo9001",-1,"<$6847:1번>","<$6974:몰라>", HOTKEYCODE::SLOT6_02,"button_key9002","static_outbox9002","button_undo9002",-1,"<$6848:2번>","<$6975:몰라>", HOTKEYCODE::SLOT6_03,"button_key9003","static_outbox9003","button_undo9003",-1,"<$6849:3번>","<$6976:몰라>", HOTKEYCODE::SLOT6_04,"button_key9004","static_outbox9004","button_undo9004",-1,"<$6850:4번>","<$6977:몰라>", HOTKEYCODE::SLOT6_05,"button_key9005","static_outbox9005","button_undo9005",-1,"<$6851:5번>","<$6978:몰라>", HOTKEYCODE::SLOT6_06,"button_key9006","static_outbox9006","button_undo9006",-1,"<$6852:6번>","<$6979:몰라>", HOTKEYCODE::SLOT6_07,"button_key9007","static_outbox9007","button_undo9007",-1,"<$6853:7번>","<$6980:몰라>", HOTKEYCODE::SLOT6_08,"button_key9008","static_outbox9008","button_undo9008",-1,"<$6854:8번>","<$6981:몰라>", HOTKEYCODE::SLOT6_09,"button_key9009","static_outbox9009","button_undo9009",-1,"<$6855:9번>","<$6982:몰라>", HOTKEYCODE::SLOT6_10,"button_key9010","static_outbox9010","button_undo9010",-1,"<$6856:10번>","<$6983:몰라>", HOTKEYCODE::SLOT6_11,"button_key9011","static_outbox9011","button_undo9011",-1,"<$6857:11번>","<$6984:몰라>", HOTKEYCODE::SLOT6_12,"button_key9012","static_outbox9012","button_undo9012",-1,"<$6858:12번>","<$6985:몰라>", -1,"static_slot_10000","","",-1,"<$6767:7슬롯_설정>","", HOTKEYCODE::SLOT7_01,"button_key10001","static_outbox10001","button_undo10001",-1,"<$6847:1번>","<$6974:몰라>", HOTKEYCODE::SLOT7_02,"button_key10002","static_outbox10002","button_undo10002",-1,"<$6848:2번>","<$6975:몰라>", HOTKEYCODE::SLOT7_03,"button_key10003","static_outbox10003","button_undo10003",-1,"<$6849:3번>","<$6976:몰라>", HOTKEYCODE::SLOT7_04,"button_key10004","static_outbox10004","button_undo10004",-1,"<$6850:4번>","<$6977:몰라>", HOTKEYCODE::SLOT7_05,"button_key10005","static_outbox10005","button_undo10005",-1,"<$6851:5번>","<$6978:몰라>", HOTKEYCODE::SLOT7_06,"button_key10006","static_outbox10006","button_undo10006",-1,"<$6852:6번>","<$6979:몰라>", HOTKEYCODE::SLOT7_07,"button_key10007","static_outbox10007","button_undo10007",-1,"<$6853:7번>","<$6980:몰라>", HOTKEYCODE::SLOT7_08,"button_key10008","static_outbox10008","button_undo10008",-1,"<$6854:8번>","<$6981:몰라>", HOTKEYCODE::SLOT7_09,"button_key10009","static_outbox10009","button_undo10009",-1,"<$6855:9번>","<$6982:몰라>", HOTKEYCODE::SLOT7_10,"button_key10010","static_outbox10010","button_undo10010",-1,"<$6856:10번>","<$6983:몰라>", HOTKEYCODE::SLOT7_11,"button_key10011","static_outbox10011","button_undo10011",-1,"<$6857:11번>","<$6984:몰라>", HOTKEYCODE::SLOT7_12,"button_key10012","static_outbox10012","button_undo10012",-1,"<$6858:12번>","<$6985:몰라>", -1,"static_slot_11000","","",-1,"<$6869:8슬롯_설정>","", HOTKEYCODE::SLOT8_01,"button_key11001","static_outbox11001","button_undo11001",-1,"<$6847:1번>","<$6974:몰라>", HOTKEYCODE::SLOT8_02,"button_key11002","static_outbox11002","button_undo11002",-1,"<$6848:2번>","<$6975:몰라>", HOTKEYCODE::SLOT8_03,"button_key11003","static_outbox11003","button_undo11003",-1,"<$6849:3번>","<$6976:몰라>", HOTKEYCODE::SLOT8_04,"button_key11004","static_outbox11004","button_undo11004",-1,"<$6850:4번>","<$6977:몰라>", HOTKEYCODE::SLOT8_05,"button_key11005","static_outbox11005","button_undo11005",-1,"<$6851:5번>","<$6978:몰라>", HOTKEYCODE::SLOT8_06,"button_key11006","static_outbox11006","button_undo11006",-1,"<$6852:6번>","<$6979:몰라>", HOTKEYCODE::SLOT8_07,"button_key11007","static_outbox11007","button_undo11007",-1,"<$6853:7번>","<$6980:몰라>", HOTKEYCODE::SLOT8_08,"button_key11008","static_outbox11008","button_undo11008",-1,"<$6854:8번>","<$6981:몰라>", HOTKEYCODE::SLOT8_09,"button_key11009","static_outbox11009","button_undo11009",-1,"<$6855:9번>","<$6982:몰라>", HOTKEYCODE::SLOT8_10,"button_key11010","static_outbox11010","button_undo11010",-1,"<$6856:10번>","<$6983:몰라>", HOTKEYCODE::SLOT8_11,"button_key11011","static_outbox11011","button_undo11011",-1,"<$6857:11번>","<$6984:몰라>", HOTKEYCODE::SLOT8_12,"button_key11012","static_outbox11012","button_undo11012",-1,"<$6858:12번>","<$6985:몰라>", }; enum TIPLEVEL { READYINPUT = 0, CLICK, ROLLOVER, }; }; void SUISystemMainWnd::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ) { switch(nMessage) { case KUI_MESSAGE::KBUTTON_CLICK: { if( ::_stricmp( lpszControlID, "button_close" ) == 0 ) m_pGameManager->PostMsgAtDynamic( new SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM_MAIN ) ); // 캐릭터 변경 else if( ::_stricmp( lpszControlID, "button_character_choice" ) == 0 ) //servantes 2010.10.13 { // sonador #2.3.1.39 m_pGameManager->PostMsgAtDynamic( new SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM_MAIN ) ); SMSG_GAME_OUT* msg = new SMSG_GAME_OUT; msg->character_select = true; m_pGameManager->PostMsgAtDynamic( msg ); } // 게임 종료 else if( ::_stricmp( lpszControlID, "button_game_end" ) == 0 ) //servantes 2010.10.13 { // sonador #2.3.1.39 m_pGameManager->PostMsgAtDynamic( new SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM_MAIN ) ); SMSG_GAME_OUT* msg = new SMSG_GAME_OUT; msg->character_select = false; m_pGameManager->PostMsgAtDynamic( msg ); } // 세부 옵션 설정 else if( ::_stricmp( lpszControlID, "button_option" ) == 0 ) //servantes 2010.10.13 { m_pGameManager->PostMsgAtDynamic( new SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM ) ); m_pGameManager->PostMsgAtDynamic( new SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM_MAIN ) ); } } break; case KUI_MESSAGE::KGENWND_MOVE: // 윈도우 이동 { LimitMoveWnd(); // 게임 외부로 나가지 못하게 제한 //// 좌측 메뉴도 이동시켜 준다 //m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_MOVE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSMENU, GetRect().left, GetRect().top ) ); } break; } SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam ); } bool SUISystemMainWnd::InitControls( KPoint kPos ) { SetCustomMovingRect( KRect( 0, 0, 600, 20 ) ); // 타이틀 바 선택 영역, 이동위해 클릭 Area return SUIWnd::InitControls(kPos); } void SUISystemMainWnd::OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd /*= true*/ ) { if( bOpen ) m_pGameManager->StartSound( "ui_popup_window01.wav" ); SUIWnd::OnNotifyUIWindowOpen( bOpen, bLimitWnd ); } ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //SUISystemWnd void SUISystemWnd::OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd /*= true*/ ) { if( bOpen ) m_pGameManager->StartSound( "ui_popup_window01.wav" ); SUIWnd::OnNotifyUIWindowOpen( bOpen, bLimitWnd ); switch( m_nTabType ) { case TAB_ENVIROMENT: { if( m_pEnvironmentChild ) m_pEnvironmentChild->OnNotifyUIWindowOpen(bOpen, bLimitWnd); } break; case TAB_PLAY: { if( m_pPlayChild ) m_pPlayChild->OnNotifyUIWindowOpen(bOpen, bLimitWnd); } break; case TAB_KEYMAPPING: { if( m_pKeymappingChild ) m_pKeymappingChild->OnNotifyUIWindowOpen(bOpen, bLimitWnd); } break; } } SUIWnd* SUISystemWnd::CreateWnd( const char* szFile, KUIWndManager* pWndManager, KPoint kPos, int nWindowID ) { SUIWnd::CreateWnd( szFile, pWndManager, kPos, nWindowID ); // 게임 환경 옵션 SUISystemEnvironmentChild* pEnvironment = new SUISystemEnvironmentChild( m_pGameManager ); pEnvironment->CreateWnd( "window_system_environment.nui", pWndManager, KPoint(kPos.x, kPos.y+40) ); //// 플레이 관련 옵션 SUISystemPlayChild* pPlay = new SUISystemPlayChild( m_pGameManager ); pPlay->CreateWnd( "window_system_play.nui", pWndManager, KPoint(kPos.x, kPos.y+40) ); //// 인터페이스 옵션 SUISystemKeymappingChild* pKeymapping = new SUISystemKeymappingChild( m_pGameManager,m_pDisplayInfo ); pKeymapping->SetParent(this); pKeymapping->CreateWnd( "window_system_keymapping.nui", pWndManager, KPoint(kPos.x, kPos.y+40) ); AddChild(pEnvironment); m_pEnvironmentChild = pEnvironment; AddChild(pPlay); m_pPlayChild = pPlay; AddChild(pKeymapping); m_pKeymappingChild = pKeymapping; pEnvironment->SetSystemParent(this); return this; } bool SUISystemWnd::InitControls( KPoint kPos ) { SetCustomMovingRect( KRect( 0, 0, 600, 20 ) ); // 타이틀 바 선택 영역, 이동위해 클릭 Area // 탭 만들기 KUISimpleTabControl* pTabControl = dynamicCast(GetChild("tab_setup_type")); if( pTabControl ) { pTabControl->SetTabProperty( 0, false, 2 ); pTabControl->AddTabItem( S(3002)/*"게임 환경 설정"*/, S(3001)/*"게임 환경 설정 옵션"*/ ); pTabControl->AddTabItem( S(3003)/*"게임 플레이 설정"*/, S(3001)/*"게임 플레이 설정 옵션"*/ ); pTabControl->AddTabItem( "<$6989:사용자키설정>", "<$6989:사용자키설정>" ); //sfreer 2009.03.05 제거. } SetChildShow( "window_system_environment" ); SetChildShow( "window_system_play" ); SetChildShow( "window_system_keymapping" ); return SUIWnd::InitControls(kPos); } bool SUISystemWnd::InitData( bool bReload ) { m_nTabType = -1; return SUIWnd::InitData(bReload); } void SUISystemWnd::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ) { switch(nMessage) { case KUI_MESSAGE::KBUTTON_CLICK: { if( ::_stricmp( lpszControlID, "button_close" ) == 0 ) { switch( m_nTabType ) { case TAB_ENVIROMENT: { if( m_pEnvironmentChild ) m_pEnvironmentChild->PumpUpMessage(lpszControlID, nMessage, lparam, wparam); } break; case TAB_PLAY: { if( m_pPlayChild ) m_pPlayChild->PumpUpMessage(lpszControlID, nMessage, lparam, wparam); } break; case TAB_KEYMAPPING: { if( m_pKeymappingChild ) m_pKeymappingChild->PumpUpMessage(lpszControlID, nMessage, lparam, wparam); } break; } m_pGameManager->PostMsgAtDynamic( new SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM ) ); } } break; case KUI_MESSAGE::KGENWND_MOVE: // 윈도우 이동 { LimitMoveWnd(); // 게임 외부로 나가지 못하게 제한 } break; case KUI_MESSAGE::KSCROLL_SELECT: // 스크롤 선택 break; case KUI_MESSAGE::KTAB_SELECT: // 탭 변경 ShowTabChild((int)lparam); m_pGameManager->StartSound( "ui_button_click.wav" ); break; } SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam ); } void SUISystemWnd::ApplyOption() { switch( m_nTabType ) { case TAB_ENVIROMENT: { if( m_pEnvironmentChild ) m_pEnvironmentChild->ApplyOption(); } break; case TAB_PLAY: { if( m_pPlayChild ) m_pPlayChild->ApplyOption(); } break; case TAB_KEYMAPPING: { if( m_pKeymappingChild ) m_pKeymappingChild->ApplyOption(); } break; } } void SUISystemWnd::ApplyCancel() { switch( m_nTabType ) { case TAB_ENVIROMENT: { if( m_pEnvironmentChild ) m_pEnvironmentChild->ApplyCancel(); } break; case TAB_PLAY: { if( m_pPlayChild ) m_pPlayChild->ApplyCancel(); } break; case TAB_KEYMAPPING: { if( m_pKeymappingChild ) m_pKeymappingChild->ApplyCancel(); } break; } } void SUISystemWnd::ProcMsgAtStatic( SGameMessage* pMsg ) { switch( pMsg->nType ) { //case IMSG_UI_OPTION_APPLY : // { // SIMSG_UI_OPTION_APPLY * pApplyOption = static_cast(pMsg); // if( pApplyOption->m_bApply == 0 ) // ApplyOption(); // else if( pApplyOption->m_bApply == 1 ) // ApplyCancel(); // } // break; case IMSG_TOGGLE_UIWINDOW: case IMSG_SHOW_UIWINDOW: { ShowTabChild(m_nTabType); // if( m_nSysMenuPosX > -99 && m_nSysMenuPosY > -99 ) MovePos(m_nSysMenuPosX, m_nSysMenuPosY); pMsg->bUse = true; } break; case IMSG_UI_MOVE: { //SIMSG_UI_MOVE* pMoveMsg = ( SIMSG_UI_MOVE* )pMsg; //m_nSysMenuPosX = pMoveMsg->m_nX; //m_nSysMenuPosY = pMoveMsg->m_nY; pMsg->bUse = true; } break; case IMSG_UI_FOCUS: { m_pManager->SetFocus(this); pMsg->bUse = true; } break; case IMSG_UI_CONSOLE_RELUST: { if( m_pEnvironmentChild ) m_pEnvironmentChild->UpdateOption(); if( m_pPlayChild ) m_pPlayChild->UpdateOption(); if( m_pKeymappingChild ) m_pKeymappingChild->UpdateOption(); } break; case IMSG_UI_BOOTH_OPTION_CHANGE: { SIMSG_UI_BOOTH_OPTION_CHANGE* pBooth = dynamicCast(pMsg); GetGameOption().SetBoothRendType( pBooth->m_nType ); SUISystemPlayChild* pWnd = (dynamicCast(GetChild("window_system_play"))); if( pWnd ) pWnd->UpdateControl(); } break; // 2010.05.20 로그인 할때는 m_nTabType 정보가 세팅이 안되어 있어서 IMSG_HIDE_EQUIP_INFO 일경우에 m_pPlayChild->ProcMsgAtStatic를 호출함 - prodongi case IMSG_HIDE_EQUIP_INFO: if (m_pPlayChild) m_pPlayChild->ProcMsgAtStatic(pMsg); break; /// 2012.05.09 - prodongi case IMSG_UI_SEND_DATA: procMsgData(pMsg); break; } SUIWnd::ProcMsgAtStatic( pMsg );// switch( m_nTabType ) { case TAB_ENVIROMENT: { if( m_pEnvironmentChild ) m_pEnvironmentChild->ProcMsgAtStatic(pMsg); } break; case TAB_PLAY: { if( m_pPlayChild ) m_pPlayChild->ProcMsgAtStatic(pMsg); } break; case TAB_KEYMAPPING: { if( m_pKeymappingChild ) m_pKeymappingChild ->ProcMsgAtStatic(pMsg); } break; } } void SUISystemWnd::ShowTabChild( int nTabType ) { KUISimpleTabControl* pTab = dynamicCast(GetChild( "tab_setup_type" )); if( pTab == NULL ) return; if( m_nTabType == pTab->GetSelectedItem() ) return; m_nTabType = pTab->GetSelectedItem(); //SetChildShow( "window_system_def" , ( TAB_NORMAL == m_nTabType ) ); SetChildShow( "window_system_environment", ( TAB_ENVIROMENT == m_nTabType ) ); SetChildShow( "window_system_play", ( TAB_PLAY == m_nTabType ) ); SetChildShow( "window_system_keymapping", ( TAB_KEYMAPPING == m_nTabType ) ); // switch( m_nTabType ) { case TAB_ENVIROMENT: { if( m_pEnvironmentChild ) m_pEnvironmentChild->UpdateOption(); } break; case TAB_PLAY: { if( m_pPlayChild ) m_pPlayChild->UpdateOption(); } break; case TAB_KEYMAPPING: { if( m_pKeymappingChild ) m_pKeymappingChild ->UpdateOption(); } break; } } void SUISystemWnd::EnableButton( const char* szChildName, bool bEnable ) { if( NULL == m_pKeymappingChild ) return; KUIControl* pWndChild = (KUIControl*)m_pKeymappingChild->GetChild( szChildName ); if( pWndChild ) bEnable ? pWndChild->Enable() : pWndChild->Disable() ; } void SUISystemWnd::procMsgData(SGameMessage* msg) { msg->bUse = true; SIMSG_UI_SEND_DATA* msgData = dynamicCast(msg); /// 사용자 키 설정창 열기 if ("openWithKeyMapping" == msgData->m_strString) { if (!IsShow()) { m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM, true) ); KUISimpleTabControl* pTab = dynamicCast(GetChild( "tab_setup_type" )); if (pTab) { pTab->SetSelectedItem(TAB_KEYMAPPING); ShowTabChild(m_nTabType); } } else { m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM, false) ); } } } //void SUISystemWnd::ChangeTabChild( int nTabType ) //{ // KUISimpleTabControl* pTab = ( KUISimpleTabControl* )GetChild( "tab_setup_type" ); // if( pTab == NULL ) return; // // pTab->SetSelectedItem( TAB_ENVIROMENT, true ); // ShowTabChild( nTabType ); //} ////////////////////////////////////////////////// // // SUISystemNormalChild // normal // ///////////////////////////////////////////////// //void SUISystemNormalChild::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ) //{ // switch(nMessage) // { // case KUI_MESSAGE::KBUTTON_CLICK: // { // m_pGameManager->PlaySound( "ui_button_click.wav" ); // // // 캐릭터 변경 // if( ::_stricmp( lpszControlID, "system_normal_button01" ) == 0 ) // m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_REQ_RETURN_LOBBY() ); // // // 게임 종료 // if( ::_stricmp( lpszControlID, "system_normal_button02" ) == 0 ) // m_pGameManager->ProcMsgAtStatic( &STMSG_REQ_CLOSE( false ) ); // // // 채널 선택 // else if( ::_stricmp( lpszControlID, "system_normal_button03" ) == 0 ) // { // //if( m_pWnd == NULL ) return; // // // //m_pWnd->ChangeTabChild(TAB_ENVIROMENT); // } // } // break; // } // SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam ); //} ////////////////////////////////////////////////// // // SUISystemEnvironmentChild // graphic // /////////////////////////////////////////////////// bool SUISystemEnvironmentChild::InitControls( KPoint kPos ) { KUIControlSlider* pSliderBright = dynamicCast(GetChild(c_Control[CONTROL::Bright][0])); //화면밝기 조절 if( pSliderBright ) { pSliderBright->SetSliderRange( MaxWinAlpha ); pSliderBright->SetPosition( GetGameOption().GetBright() ); } KUIControlSlider* pSliderBackGround = dynamicCast(GetChild(c_Control[CONTROL::BackGrondDis][0])); //배경 표시 거리 if( pSliderBackGround ) pSliderBackGround->SetSliderRange( MaxBakGrondDis ); KUIControlSlider* pSliderChar = dynamicCast(GetChild(c_Control[CONTROL::AvatarDis][0])); //캐릭터 표시 거리 if( pSliderChar ) pSliderChar->SetSliderRange( MaxCharDis ); KUIControlSlider* pSliderTexture = dynamicCast(GetChild(c_Control[CONTROL::MipBias][0])); //택스처 품질 if( pSliderTexture ) pSliderTexture->SetSliderRange( MaxTextureQuality ); KUIControlSlider* pSliderBakcSound = dynamicCast(GetChild(c_Control[CONTROL::BGM_Volume][0])); //배경음 크기 if( pSliderBakcSound ) pSliderBakcSound->SetSliderRange( MaxBackSound ); KUIControlSlider* pSliderEffectSound = dynamicCast(GetChild(c_Control[CONTROL::SFX_Volume][0])); //효과음 크기 if( pSliderEffectSound ) pSliderEffectSound->SetSliderRange( MaxEffectSound ); KUIControlSlider* pSliderEnvSound = dynamicCast(GetChild(c_Control[CONTROL::ENVS_Volume][0])); //환경음 크기 if( pSliderEnvSound ) pSliderEnvSound->SetSliderRange( MaxEnvSound ); KUIControlSlider* pSliderMasterSound = dynamicCast(GetChild(c_Control[CONTROL::MASTER_Volume][0])); //전체음 크기 if( pSliderMasterSound ) pSliderMasterSound->SetSliderRange( MaxEnvSound ); // { //이펙트 관련은 우선 보류 // SetControlEnableWithColor(c_Control[CONTROL::RenderTree][0], false, "<#8e8e8e>"); // SetControlEnableWithColor(c_Control[CONTROL::RenderGrass][0], false, "<#8e8e8e>"); // } { //이펙트 관련은 우선 보류 SetControlEnableWithColor(c_Control[CONTROL::Effect][0], false, "<#8e8e8e>"); SetControlEnableWithColor(c_Control[CONTROL::EffectPlayer][0], false, "<#8e8e8e>"); SetControlEnableWithColor(c_Control[CONTROL::EffectParty][0], false, "<#8e8e8e>"); SetControlEnableWithColor(c_Control[CONTROL::EffectEnemy][0], false, "<#8e8e8e>"); } InitStaticControlEnableOption(); InitControlText(); return SUIWnd::InitControls(kPos); } bool SUISystemEnvironmentChild::InitData( bool bReload ) { const std::vector< DISP_MODE > & disp_list = GetGameOption().GetDispMode(); KUIControlCombo * pCombo00_01 = dynamicCast(GetChild("combo_00_01")); //그래픽 프리셋트 if( pCombo00_01 ) { pCombo00_01->SetEnableColor( "<#ffffff>" ); for( int i(0); 6>i; i++ ) pCombo00_01->AddItem( CStringUtil::StringFormat( "%s%s", S(6425), S(6332+i) ).c_str() ); pCombo00_01->SetCurSel(0); } KUIControlCombo * pCombo10_00 = dynamicCast(GetChild("combo_10_00")); //해상도 if( pCombo10_00 ) { pCombo10_00->SetEnableColor( "<#ffffff>" ); for( UINT i(0); disp_list.size()>i; i++ ) { pCombo10_00->AddItem( CStringUtil::StringFormat( "%s%dx%d", S(6425), disp_list[i].width, disp_list[i].height ).c_str() ); } #ifdef _DEV // kkr 전체창 test 컬럼 추가 pCombo10_00->AddItem( CStringUtil::StringFormat( "%s", "전체창_dev" ).c_str() ); #endif pCombo10_00->SetCurSel(0); } KUIControlCombo * pCombo10_01 = dynamicCast(GetChild("combo_10_01")); //주사율 if( pCombo10_01 ) { pCombo10_01->SetEnableColor( "<#ffffff>" ); for( UINT i(0); disp_list.size()>i; i++ ) { int nCurIndex = -1; for( UINT j(0); disp_list[i].refreshrate_list.size()>j; j++ ) { if( disp_list[i].refreshrate_list[j] == GetGameOption().GetCurrentRefreshRate() ) nCurIndex = j; pCombo10_01->AddItem( CStringUtil::StringFormat( "%s%d Hz", S(6425), disp_list[i].refreshrate_list[j] ).c_str() ); } //현재 인덱스 설정 if( nCurIndex != -1 ) pCombo10_01->SetCurSel( nCurIndex ); break; } } SetChildShow( "button_def", false ); UpdateOption(); return SUIWnd::InitData(bReload); } void SUISystemEnvironmentChild::InitStaticControlEnableOption() { KUIControlStatic* pControl(NULL); for( int i(0); i(GetChild( c_Control[i][1] )); if( pControl ) pControl->SetEnableOption( true ); } } void SUISystemEnvironmentChild::InitControlText() { KUIControlStatic* pControl(NULL); for( int i(0); i(GetChild("combo_00_01")); if( pCombo && bGraphicOp == false ) { pCombo->SetCurSel( 0 ); pCombo->Disable(); KUIControl* pStaticCtrl = dynamicCast(GetChild("static_text_21")); if( pStaticCtrl ) { pStaticCtrl->SetDisableColor( "<#8e8e8e>" ); pStaticCtrl->Disable(); } } if( bMinimumSystem ) { SetControlEnable( "combo_10_00", false ); SetControlEnable( "combo_10_01", false ); if( GetCheckBoxValue( c_Control[CONTROL::WinBright][0] ) ) SetControlEnableWithColor(c_Control[CONTROL::Bright][0], false, "<#8e8e8e>"); //화면 밝기 설정 else SetControlEnableWithColor(c_Control[CONTROL::Bright][0], true, "<#fbe6af>"); //화면 밝기 설정 SetControlEnableWithColor(c_Control[CONTROL::StateEffect][0], false, "<#8e8e8e>"); //지속효과 표시 SetControlEnableWithColor(c_Control[CONTROL::StateEffectPlayer][0], false, "<#8e8e8e>"); //자신과 크리처 SetControlEnableWithColor(c_Control[CONTROL::StateEffectParty][0], false, "<#8e8e8e>"); //파티원 SetControlEnableWithColor(c_Control[CONTROL::StateEffectEnemy][0], false, "<#8e8e8e>"); //타겟 SetControlEnableWithColor(c_Control[CONTROL::GlowQual][0], false, "<#8e8e8e>"); //글로우 이펙트 // SetControlEnableWithColor(c_Control[CONTROL::WaterQual][0], false, "<#8e8e8e>"); //물반사 효과 // 2011.11.29 - servantes : 사용하지 않아 주석 처리 SetControlEnableWithColor(c_Control[CONTROL::TreeAlpha][0], false, "<#8e8e8e>"); //나무 투명화 SetControlEnableWithColor(c_Control[CONTROL::Enhance][0], false, "<#8e8e8e>"); //무기 강화 효과 SetControlEnableWithColor(c_Control[CONTROL::Shadow][0], false, "<#8e8e8e>"); //그림자 표시 SetControlEnableWithColor(c_Control[CONTROL::HeightShadow][0], false, "<#8e8e8e>"); //자세히 SetControlEnableWithColor(c_Control[CONTROL::LowShadow][0], false, "<#8e8e8e>"); //단순히 SetControlEnableWithColor(c_Control[CONTROL::TownLimit][0], false, "<#8e8e8e>"); //마을 내 최소구조물 표시 SetControlEnableWithColor(c_Control[CONTROL::LightMap][0], false, "<#8e8e8e>"); //라이트멥 //저사양 클라이언트 버전이여도 지형 표시 거리와 캐릭터 표시 거리는 수정 가능하다 SetControlEnableWithColor(c_Control[CONTROL::BackGrondDis][0], true, "<#fbe6af>"); //배경 표시거리 SetControlEnableWithColor(c_Control[CONTROL::AvatarDis][0], true, "<#fbe6af>"); //캐릭터 표시 거리 SetControlEnableWithColor(c_Control[CONTROL::MipBias][0], false, "<#8e8e8e>"); //택스처 품질 SetControlEnableWithColor(c_Control[CONTROL::RenderTree][0], false, "<#8e8e8e>"); //나무 표시 SetControlEnableWithColor(c_Control[CONTROL::RenderGrass][0], false, "<#8e8e8e>"); //풀 표시 SetControlEnableWithColor(c_Control[CONTROL::Effect][0], false, "<#8e8e8e>"); //이펙트 표시 SetControlEnableWithColor(c_Control[CONTROL::EffectPlayer][0], false, "<#8e8e8e>"); //자신과 크리처 SetControlEnableWithColor(c_Control[CONTROL::EffectParty][0], false, "<#8e8e8e>"); //파티원 SetControlEnableWithColor(c_Control[CONTROL::EffectEnemy][0], false, "<#8e8e8e>"); //타겟 } else if( IsCustomMode() ) { SetControlEnable( "combo_10_00", true ); SetControlEnable( "combo_10_01", true ); if( GetCheckBoxValue( "common_checkbox00" ) ) { bEnable = false; strColor = "<#8e8e8e>"; } else { bEnable = true; strColor = "<#fbe6af>"; } SetControlEnableWithColor(c_Control[CONTROL::WinBright][0], bEnable, strColor.c_str()); //바탕화면 밝기 적용 if( GetCheckBoxValue( "common_checkbox00" ) || GetCheckBoxValue( c_Control[CONTROL::WinBright][0] ) ) { bEnable = false; strColor = "<#8e8e8e>"; } else { bEnable = true; strColor = "<#fbe6af>"; } SetControlEnableWithColor(c_Control[CONTROL::Bright][0], bEnable, strColor.c_str()); //화면 밝기 설정 SetControlEnableWithColor(c_Control[CONTROL::StateEffect][0], true, "<#fbe6af>"); //지속효과 표시 if( !GetCheckBoxValue( c_Control[CONTROL::StateEffect][0] ) ) { bEnable = false; strColor = "<#8e8e8e>"; } else { bEnable = true; strColor = "<#ffffff>"; } SetControlEnableWithColor(c_Control[CONTROL::StateEffectPlayer][0], bEnable, strColor.c_str()); //자신과 크리처 SetControlEnableWithColor(c_Control[CONTROL::StateEffectParty][0], bEnable, strColor.c_str()); //파티원 SetControlEnableWithColor(c_Control[CONTROL::StateEffectEnemy][0], bEnable, strColor.c_str()); //타겟 SetControlEnableWithColor(c_Control[CONTROL::GlowQual][0], bGlowEffect, bGlowEffect ? "<#fbe6af>" : "<#8e8e8e>" ); //글로우 이펙트 // SetControlEnableWithColor(c_Control[CONTROL::WaterQual][0], bReflectionWater, bReflectionWater ? "<#fbe6af>" : "<#8e8e8e>" ); //물반사 효과 // 2011.11.29 - servantes : 사용하지 않아 주석 처리 SetControlEnableWithColor(c_Control[CONTROL::TreeAlpha][0], true, "<#fbe6af>"); //나무 투명화 SetControlEnableWithColor(c_Control[CONTROL::Enhance][0], true, "<#fbe6af>"); //무기 강화 효과 if( bHighShadow ) { SetControlEnableWithColor(c_Control[CONTROL::Shadow][0], true, "<#fbe6af>" ); //그림자 표시 if( !GetCheckBoxValue( c_Control[CONTROL::Shadow][0] ) ) { bEnable = false; strColor = "<#8e8e8e>"; } else { bEnable = true; strColor = "<#ffffff>"; } SetControlEnableWithColor(c_Control[CONTROL::HeightShadow][0], bEnable, strColor.c_str()); //자세히 SetControlEnableWithColor(c_Control[CONTROL::LowShadow][0], bEnable, strColor.c_str()); //단순히 } else { SetControlEnableWithColor(c_Control[CONTROL::Shadow][0], false, "<#8e8e8e>" ); //그림자 표시 SetControlEnableWithColor(c_Control[CONTROL::HeightShadow][0], false, "<#8e8e8e>"); //자세히 SetControlEnableWithColor(c_Control[CONTROL::LowShadow][0], false, "<#8e8e8e>"); //단순히 } SetControlEnableWithColor(c_Control[CONTROL::TownLimit][0], true, "<#fbe6af>"); //마을 내 최소구조물 표시 SetControlEnableWithColor(c_Control[CONTROL::LightMap][0], bEnableLightMap, bEnableLightMap ? "<#fbe6af>" : "<#8e8e8e>" ); //라이트멥 SetControlEnableWithColor(c_Control[CONTROL::BackGrondDis][0], true, "<#fbe6af>"); //배경 표시거리 SetControlEnableWithColor(c_Control[CONTROL::AvatarDis][0], true, "<#fbe6af>"); //캐릭터 표시 거리 SetControlEnableWithColor(c_Control[CONTROL::MipBias][0], bEnableTexture, bEnableTexture ? "<#fbe6af>" : "<#8e8e8e>" ); //택스처 품질 bool bAllMute = GetCheckBoxValue( c_Control[CONTROL::AllMute][0] ); SetControlEnableWithColor(c_Control[CONTROL::AllMute][0], true, "<#fbe6af>"); //전체음소거 if( bAllMute ) { bEnable = false; strColor = "<#8e8e8e>"; } else { bEnable = true; strColor = "<#fbe6af>"; } SetControlEnableWithColor(c_Control[CONTROL::BGM_Mute][0], bEnable, strColor.c_str()); //배경음 소거 SetControlEnableWithColor(c_Control[CONTROL::SFX_Mute][0], bEnable, strColor.c_str()); //효과음 소거 SetControlEnableWithColor(c_Control[CONTROL::ENVS_Mute][0], bEnable, strColor.c_str()); //환경음 소거 SetControlEnableWithColor(c_Control[CONTROL::MASTER_Volume][0], bEnable, strColor.c_str()); //전체음 볼륨 bool bBGM_Mute = GetCheckBoxValue( c_Control[CONTROL::BGM_Mute][0] ); if( bAllMute || bBGM_Mute ) { bEnable = false; strColor = "<#8e8e8e>"; } else { bEnable = true; strColor = "<#fbe6af>"; } //SetControlEnableWithColor(c_Control[CONTROL::Repeat][0], bEnable, strColor.c_str()); //현재 배경음 반복 // 2011.11.29 - servantes : 옵션 nui에 해당 효과 없음 / 주석처리 SetControlEnableWithColor(c_Control[CONTROL::BGM_Volume][0], bEnable, strColor.c_str()); //배경음 볼륨 bool bSFX_Mute = GetCheckBoxValue( c_Control[CONTROL::SFX_Mute][0] ); if( bAllMute || bSFX_Mute ){ bEnable = false; strColor = "<#8e8e8e>"; } else { bEnable = true; strColor = "<#fbe6af>"; } SetControlEnableWithColor(c_Control[CONTROL::SFX_Volume][0], bEnable, strColor.c_str()); //효과음 볼륨 bool bENVS_Mute = GetCheckBoxValue( c_Control[CONTROL::ENVS_Mute][0] ); if( bAllMute || bENVS_Mute ){ bEnable = false; strColor = "<#8e8e8e>"; } else { bEnable = true; strColor = "<#fbe6af>"; } SetControlEnableWithColor(c_Control[CONTROL::ENVS_Volume][0], bEnable, strColor.c_str()); //환경음 볼륨 SetControlEnableWithColor(c_Control[CONTROL::RenderTree][0], true, "<#fbe6af>"); //나무 표시 SetControlEnableWithColor(c_Control[CONTROL::RenderGrass][0], true, "<#fbe6af>"); //풀 표시 //이펙트 관련 우선 보류 //SetControlEnableWithColor(c_Control[CONTROL::Effect][0], true, "<#fbe6af>"); //이펙트 표시 //if( !GetCheckBoxValue( c_Control[CONTROL::Effect][0] ) ) //{ bEnable = false; strColor = "<#8e8e8e>"; } //else { bEnable = true; strColor = "<#ffffff>"; } //SetControlEnableWithColor(c_Control[CONTROL::EffectPlayer][0], bEnable, strColor.c_str()); //자신과 크리처 //SetControlEnableWithColor(c_Control[CONTROL::EffectParty][0], bEnable, strColor.c_str()); //파티원 //SetControlEnableWithColor(c_Control[CONTROL::EffectEnemy][0], bEnable, strColor.c_str()); //타겟 SetControlEnableWithColor(c_Control[CONTROL::Effect][0], false, "<#8e8e8e>"); //자신과 크리처 SetControlEnableWithColor(c_Control[CONTROL::EffectPlayer][0], false, "<#8e8e8e>"); //자신과 크리처 SetControlEnableWithColor(c_Control[CONTROL::EffectParty][0], false, "<#8e8e8e>"); //파티원 SetControlEnableWithColor(c_Control[CONTROL::EffectEnemy][0], false, "<#8e8e8e>"); //타겟 SetControlEnableWithColor("common_show_player_checkbox", true, "<#fbe6af>"); //다른 플레이어 렌더 } else { SetControlEnable( "combo_10_00", false ); SetControlEnable( "combo_10_01", false ); if( GetCheckBoxValue( c_Control[CONTROL::WinBright][0] ) ) SetControlEnableWithColor(c_Control[CONTROL::Bright][0], false, "<#8e8e8e>"); //화면 밝기 설정 else SetControlEnableWithColor(c_Control[CONTROL::Bright][0], true, "<#fbe6af>"); //화면 밝기 설정 SetControlEnableWithColor(c_Control[CONTROL::StateEffect][0], false, "<#8e8e8e>"); //지속효과 표시 SetControlEnableWithColor(c_Control[CONTROL::StateEffectPlayer][0], false, "<#8e8e8e>"); //자신과 크리처 SetControlEnableWithColor(c_Control[CONTROL::StateEffectParty][0], false, "<#8e8e8e>"); //파티원 SetControlEnableWithColor(c_Control[CONTROL::StateEffectEnemy][0], false, "<#8e8e8e>"); //타겟 SetControlEnableWithColor(c_Control[CONTROL::GlowQual][0], false, "<#8e8e8e>"); //글로우 이펙트 // SetControlEnableWithColor(c_Control[CONTROL::WaterQual][0], false, "<#8e8e8e>"); //물반사 효과 // 2011.11.29 - servantes : 사용하지 않아 주석 처리 SetControlEnableWithColor(c_Control[CONTROL::TreeAlpha][0], false, "<#8e8e8e>"); //나무 투명화 SetControlEnableWithColor(c_Control[CONTROL::Enhance][0], false, "<#8e8e8e>"); //무기 강화 효과 SetControlEnableWithColor(c_Control[CONTROL::Shadow][0], false, "<#8e8e8e>"); //그림자 표시 SetControlEnableWithColor(c_Control[CONTROL::HeightShadow][0], false, "<#8e8e8e>"); //자세히 SetControlEnableWithColor(c_Control[CONTROL::LowShadow][0], false, "<#8e8e8e>"); //단순히 SetControlEnableWithColor(c_Control[CONTROL::TownLimit][0], false, "<#8e8e8e>"); //마을 내 최소구조물 표시 SetControlEnableWithColor(c_Control[CONTROL::LightMap][0], false, "<#8e8e8e>"); //라이트멥 SetControlEnableWithColor(c_Control[CONTROL::BackGrondDis][0], false, "<#8e8e8e>"); //배경 표시거리 SetControlEnableWithColor(c_Control[CONTROL::AvatarDis][0], false, "<#8e8e8e>"); //캐릭터 표시 거리 SetControlEnableWithColor(c_Control[CONTROL::MipBias][0], false, "<#8e8e8e>"); //택스처 품질 SetControlEnableWithColor(c_Control[CONTROL::RenderTree][0], false, "<#8e8e8e>"); //나무 표시 SetControlEnableWithColor(c_Control[CONTROL::RenderGrass][0], false, "<#8e8e8e>"); //풀 표시 SetControlEnableWithColor(c_Control[CONTROL::Effect][0], false, "<#8e8e8e>"); //이펙트 표시 SetControlEnableWithColor(c_Control[CONTROL::EffectPlayer][0], false, "<#8e8e8e>"); //자신과 크리처 SetControlEnableWithColor(c_Control[CONTROL::EffectParty][0], false, "<#8e8e8e>"); //파티원 SetControlEnableWithColor(c_Control[CONTROL::EffectEnemy][0], false, "<#8e8e8e>"); //타겟 } } void SUISystemEnvironmentChild::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ) { switch(nMessage) { case KUI_MESSAGE::SLIDER_SELECT: { m_pGameManager->StartSound( "ui_button_click.wav" ); //그외 if( ::_stricmp( lpszControlID, c_Control[CONTROL::Bright][0] ) == 0 ) //화면 밝기 설정 { m_optData.nBright = (int)lparam; _oprint( "Bright : %d\n", m_optData.nBright ); } else if( ::_stricmp( lpszControlID, c_Control[CONTROL::BackGrondDis][0] ) == 0 ) //배경 표시거리 { if( !IsCustomMode() ) { if( ENV().IsExist( "minimum_system" ) == false ) return; } m_optData.nBackGrondDis = (int)lparam; _oprint( "BackGroundDis : %d\n", m_optData.nBackGrondDis ); m_optData.nTerrainDis = LandDis[ m_optData.nBackGrondDis ]; //지면 _oprint( "TerrainDis : %d\n", m_optData.nTerrainDis ); m_optData.nPropDis = PropDis[ m_optData.nBackGrondDis ]; //구조물 _oprint( "PropDis : %d\n", m_optData.nPropDis ); m_optData.nSpeedDis = TreeDis[ m_optData.nBackGrondDis ]; //나무 _oprint( "SpeedDis : %d\n", m_optData.nSpeedDis ); m_optData.nGrassDis = GraseDis[ m_optData.nBackGrondDis ]; //풀 _oprint( "GrassDis : %d\n", m_optData.nGrassDis ); m_optData.nSpeedQual = TreeQuality[ m_optData.nBackGrondDis ]; //나무 품질 _oprint( "SpeedQual : %d\n", m_optData.nSpeedQual ); } else if( ::_stricmp( lpszControlID, c_Control[CONTROL::AvatarDis][0] ) == 0 ) //캐릭터 표시거리 { if( !IsCustomMode() ) { if( ENV().IsExist( "minimum_system" ) == false ) return; } m_optData.nAvatarDis = (int)lparam; _oprint( "AvatarDis : %d\n", m_optData.nAvatarDis ); m_optData.nShadowDis = (int)lparam; _oprint( "ShadowDis : %d\n", m_optData.nShadowDis ); } else if( ::_stricmp( lpszControlID, c_Control[CONTROL::MipBias][0] ) == 0 ) //택스처 품질 { if( !IsCustomMode() ) return; m_optData.nMipBias = (int)lparam; _oprint( "MipBias : %d\n", m_optData.nMipBias ); m_optData.nFaceAni = (int)lparam; //눈깜박임 m_optData.nSelfShadowQual = SlfeShadowQuality[ m_optData.nMipBias ]; _oprint( "SelfShadowQual : %d\n", m_optData.nSelfShadowQual ); m_optData.nResourceQual = RscQuality[ m_optData.nMipBias ]; } else if( ::_stricmp( lpszControlID, c_Control[CONTROL::BGM_Volume][0] ) == 0 ) //배경 볼륨 { // m_pGameManager->PlaySound( "ui_button_click.wav" ); m_optData.nBGM_Volume = (int)lparam; _oprint( "BGM : %d\n", m_optData.nBGM_Volume ); } else if( ::_stricmp( lpszControlID, c_Control[CONTROL::SFX_Volume][0] ) == 0 ) //효과 볼륨 { // m_pGameManager->PlaySound( "ui_button_click.wav" ); m_optData.nSFX_Volume = (int)lparam; _oprint( "SFX : %d\n", m_optData.nSFX_Volume ); } else if( ::_stricmp( lpszControlID, c_Control[CONTROL::ENVS_Volume][0] ) == 0 ) //효과 볼륨 { // m_pGameManager->PlaySound( "ui_button_click.wav" ); m_optData.nENVS_Volume = (int)lparam; _oprint( "SFX : %d\n", m_optData.nENVS_Volume ); } else if( ::_stricmp( lpszControlID, c_Control[CONTROL::MASTER_Volume][0] ) == 0 ) //전체 볼륨 { // m_pGameManager->PlaySound( "ui_button_click.wav" ); m_optData.nMASTER_Volume = (int)lparam; _oprint( "SFX : %d\n", m_optData.nMASTER_Volume ); } break; } case KUI_MESSAGE::KCOMBO_SELECT: { m_pGameManager->StartSound( "ui_button_click.wav" ); if( ::_stricmp( lpszControlID, "combo_00_01" ) == 0 ) //프리셋 모드 { if( m_optData.nPresetOption == (int)lparam ) return; m_optData.nPresetOption = (int)lparam; _oprint( "PresetOption : %d\n", m_optData.nPresetOption ); GetGameOption().GetPresetOptData( m_optData.nPresetOption, m_optData ); //UI 갱신 UpdateControl( m_optData ); //UI On/Off CheckControlEnable(); } else if( ::_stricmp( lpszControlID, "combo_10_00" ) == 0 ) //해상도 변경 { if( !IsCustomMode() ) return; int nIndex = (int)lparam; const std::vector< DISP_MODE > & disp_list = GetGameOption().GetDispMode(); if( nIndex >= 0 && nIndex < disp_list.size() ) { m_optData.nResolution_OldWidth = m_optData.nResolution_Width; // servantes 2010.11.29 m_optData.nResolution_OldHeight = m_optData.nResolution_Height; // save old resolution m_optData.nResolution_Width = disp_list[nIndex].width; m_optData.nResolution_Height = disp_list[nIndex].height; m_optData.nFullWinMode = 0; GetGameOption().SetFullWinMode( 0 ); ((K3DRenderDeviceDX*) KDeviceManagerDX::GetDeviceManager()->GetRenderDevice())->SetFullWinMode( false ); } #ifdef _DEV //kkr 전체창 테스트 else if( nIndex == 11 ) { m_optData.nResolution_OldWidth = m_optData.nResolution_Width; m_optData.nResolution_OldHeight = m_optData.nResolution_Height; int cx = GetSystemMetrics(SM_CXSCREEN); int cy = GetSystemMetrics(SM_CYSCREEN); m_optData.nResolution_Width = cx; m_optData.nResolution_Height = cy; m_optData.nFullWinMode = 1; GetGameOption().SetFullWinMode( 1 ); ((K3DRenderDeviceDX*) KDeviceManagerDX::GetDeviceManager()->GetRenderDevice())->SetFullWinMode( true ); } #endif else { assert(0); return; } // 2010.07.12 720 해상도 경고 - prodongi if (720 == m_optData.nResolution_Height) { m_pGameManager->InterfaceMsg(&SIMSG_REQ_OPEN_MSGBOX(SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, S(729))); } _oprint( "Resolution : %dx%d\n", m_optData.nResolution_Width, m_optData.nResolution_Height ); //해상도 맞는 주사율 갱신 KUIControlCombo * pCombo10_01 = dynamicCast(GetChild("combo_10_01")); //주사율 if( pCombo10_01 ) { pCombo10_01->ClearItem(); //데이타 삭제 { int nCurIndex = -1; for( UINT j(0); disp_list[nIndex].refreshrate_list.size()>j; j++ ) { if( disp_list[nIndex].refreshrate_list[j] == GetGameOption().GetCurrentRefreshRate() ) nCurIndex = j; pCombo10_01->AddItem( CStringUtil::StringFormat( "%d Hz", disp_list[nIndex].refreshrate_list[j] ).c_str() ); } //현재 인덱스 설정 if( nCurIndex != -1 ) pCombo10_01->SetCurSel( nCurIndex ); break; } } } else if( ::_stricmp( lpszControlID, "combo_10_01" ) == 0 ) //주사율 변경 { if( !IsCustomMode() ) return; m_optData.nRefreshRate = (int)lparam; _oprint( "RefreshRate : %d\n", m_optData.nRefreshRate ); } } break; case KUI_MESSAGE::KBUTTON_CLICK: { m_pGameManager->StartSound( "ui_button_click.wav" ); if( ::_stricmp( lpszControlID, "button_def" ) == 0 ) { //초기값으로 UpdateDef(); } if( ::_stricmp( lpszControlID, "button_apply" ) == 0 ) { //MSG 박스 OK -> 적용, Cancel -> 취소 ApplyOption(); // m_pGameManager->ProcMsgAtStatic( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OPTION_APPLY, c_szOPTION_APPLY ) ); } else if( ::_stricmp( lpszControlID, "button_ok" ) == 0 ) { ApplyOption(); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM, false ) ); } else if( ::_stricmp( lpszControlID, "button_cancel" ) == 0 ) { ApplyCancel(); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM, false ) ); } } break; case KUI_MESSAGE::KCHECK_CHANGE: { m_pGameManager->StartSound( "ui_button_click.wav" ); //그외 if( ::_stricmp( "common_checkbox00", lpszControlID ) == 0 ) { //창모드 m_optData.nWinMode = GetCheckBoxValue( lpszControlID ); //주사율 변경 금지 std::string strColor; if( m_optData.nWinMode ) strColor = "<#8e8e8e>"; else strColor = "<#fbe6af>"; SetControlEnableWithColor(c_Control[CONTROL::Refreshrate][0], !m_optData.nWinMode, strColor.c_str()); //주사율 SetControlEnable( "combo_10_01", !m_optData.nWinMode ); //주사율 콤보 SetControlEnableWithColor(c_Control[CONTROL::WinBright][0], !m_optData.nWinMode, strColor.c_str()); //바탕화면 밝기 적용 SetControlEnableWithColor(c_Control[CONTROL::Bright][0], !m_optData.nWinMode, strColor.c_str()); //화면 밝기 설정 } else if( ::_stricmp( c_Control[CONTROL::WinBright][0], lpszControlID ) == 0 ) { //바탕화면 밝기 적용 m_optData.nWinBright = GetCheckBoxValue( lpszControlID ); std::string strColor; if( m_optData.nWinBright ) strColor = "<#8e8e8e>"; else strColor = "<#fbe6af>"; SetControlEnableWithColor(c_Control[CONTROL::Bright][0], !m_optData.nWinBright, strColor.c_str()); //화면 밝기 설정 } else if( ::_stricmp( c_Control[CONTROL::GlowQual][0], lpszControlID ) == 0 ) { //글로우 이펙트 if( !IsCustomMode() ) return; m_optData.nGlowQual = GetCheckBoxValue( lpszControlID ); } //else if( ::_stricmp( c_Control[CONTROL::Specular][0], lpszControlID ) == 0 ) // else if( ::_stricmp( c_Control[CONTROL::WaterQual][0], lpszControlID ) == 0 ) // { //물반사 효과 // if( !IsCustomMode() ) return; // m_optData.nWaterQual = GetCheckBoxValue( lpszControlID ); // } else if( ::_stricmp( c_Control[CONTROL::TreeAlpha][0], lpszControlID ) == 0 ) { //나무 투명화 m_optData.nTreeAlpha = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_Control[CONTROL::Enhance][0], lpszControlID ) == 0 ) { //무기 강화 효과 if( !IsCustomMode() ) return; m_optData.nEnhance = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_Control[CONTROL::StateEffect][0], lpszControlID ) == 0 ) { //지속효과표시 if( !IsCustomMode() ) return; m_optData.nStateEffect = GetCheckBoxValue( lpszControlID ); std::string strColor; if( m_optData.nStateEffect ) strColor = "<#ffffff>"; else strColor = "<#8e8e8e>"; SetControlEnableWithColor(c_Control[CONTROL::StateEffectPlayer][0], m_optData.nStateEffect, strColor.c_str()); //자신과 크리처 SetControlEnableWithColor(c_Control[CONTROL::StateEffectParty][0], m_optData.nStateEffect, strColor.c_str()); //파티원 SetControlEnableWithColor(c_Control[CONTROL::StateEffectEnemy][0], m_optData.nStateEffect, strColor.c_str()); //타겟 } else if( ::_stricmp( c_Control[CONTROL::StateEffectPlayer][0], lpszControlID ) == 0 ) { //지속효과 -> 자신과 크리처 if( !IsCustomMode() ) return; m_optData.nStateEffectPlayer = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_Control[CONTROL::StateEffectParty][0], lpszControlID ) == 0 ) { //지속효과 -> 파티원 if( !IsCustomMode() ) return; m_optData.nStateEffectParty = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_Control[CONTROL::StateEffectEnemy][0], lpszControlID ) == 0 ) { //지속효과 -> 타겟 if( !IsCustomMode() ) return; m_optData.nStateEffectEnemy = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_Control[CONTROL::Shadow][0], lpszControlID ) == 0 ) { //그림자 표시 if( !IsCustomMode() ) return; m_optData.nShadow = GetCheckBoxValue( lpszControlID ); std::string strColor; if( m_optData.nShadow ) strColor = "<#ffffff>"; else strColor = "<#8e8e8e>"; SetControlEnableWithColor(c_Control[CONTROL::HeightShadow][0], m_optData.nShadow, strColor.c_str()); //자세히 SetControlEnableWithColor(c_Control[CONTROL::LowShadow][0], m_optData.nShadow, strColor.c_str()); //단순히 } else if( ::_stricmp( c_Control[CONTROL::TownLimit][0], lpszControlID ) == 0 ) { //마을내 최소 구조물 if( !IsCustomMode() ) return; m_optData.nTownLimit = GetCheckBoxValue( lpszControlID ); } // 2011.11.29 - servantes : 옵션 nui에 해당 효과 없음 / 주석처리 //else if( ::_stricmp( c_Control[CONTROL::Repeat][0], lpszControlID ) == 0 ) //{ //현재 배경음 반복 // m_optData.nRepeat = GetCheckBoxValue( lpszControlID ); //} else if( ::_stricmp( c_Control[CONTROL::AllMute][0], lpszControlID ) == 0 ) { //전체음소거 m_optData.nAllMute = GetCheckBoxValue( lpszControlID ); std::string strColor; if( m_optData.nAllMute ) strColor = "<#8e8e8e>"; else strColor = "<#fbe6af>"; //SetControlEnableWithColor( c_Control[CONTROL::Repeat][0], !m_optData.nAllMute, strColor.c_str()); //현재 배경음 반복 // 2011.11.29 - servantes : 옵션 nui에 해당 효과 없음 / 주석처리 SetControlEnableWithColor( c_Control[CONTROL::BGM_Mute][0], !m_optData.nAllMute, strColor.c_str()); //배경음 소거 SetControlEnableWithColor( c_Control[CONTROL::SFX_Mute][0], !m_optData.nAllMute, strColor.c_str()); //효과음 소거 SetControlEnableWithColor( c_Control[CONTROL::ENVS_Mute][0], !m_optData.nAllMute, strColor.c_str()); //환경음 소거 SetControlEnableWithColor( c_Control[CONTROL::BGM_Volume][0], !m_optData.nAllMute, strColor.c_str()); //배경음 볼륨 SetControlEnableWithColor( c_Control[CONTROL::SFX_Volume][0], !m_optData.nAllMute, strColor.c_str()); //효과음 볼륨 SetControlEnableWithColor( c_Control[CONTROL::ENVS_Volume][0], !m_optData.nAllMute, strColor.c_str()); //환경음 볼륨 SetControlEnableWithColor( c_Control[CONTROL::MASTER_Volume][0],!m_optData.nAllMute, strColor.c_str()); //전체음 볼륨 } else if( ::_stricmp( c_Control[CONTROL::BGM_Mute][0], lpszControlID ) == 0 ) { //배경음 소거 m_optData.nBGM_Mute = GetCheckBoxValue( lpszControlID ); std::string strColor; if( m_optData.nBGM_Mute ) strColor = "<#8e8e8e>"; else strColor = "<#fbe6af>"; SetControlEnableWithColor( c_Control[CONTROL::BGM_Volume][0], !m_optData.nBGM_Mute, strColor.c_str()); //배경음 볼륨 // SetControlEnableWithColor( c_Control[CONTROL::Repeat][0], !m_optData.nBGM_Mute, strColor.c_str()); //현재 배경음 반복 // 2011.11.29 - servantes : 옵션 nui에 해당 효과 없음 / 주석처리 } else if( ::_stricmp( c_Control[CONTROL::SFX_Mute][0], lpszControlID ) == 0 ) { //효과음 소거 m_optData.nSFX_Mute = GetCheckBoxValue( lpszControlID ); std::string strColor; if( m_optData.nSFX_Mute ) strColor = "<#8e8e8e>"; else strColor = "<#fbe6af>"; SetControlEnableWithColor( c_Control[CONTROL::SFX_Volume][0], !m_optData.nSFX_Mute, strColor.c_str()); //효과음 볼륨 } else if( ::_stricmp( c_Control[CONTROL::ENVS_Mute][0], lpszControlID ) == 0 ) { //환경음 소거 m_optData.nENVS_Mute = GetCheckBoxValue( lpszControlID ); std::string strColor; if( m_optData.nENVS_Mute ) strColor = "<#8e8e8e>"; else strColor = "<#fbe6af>"; SetControlEnableWithColor( c_Control[CONTROL::ENVS_Volume][0], !m_optData.nENVS_Mute, strColor.c_str()); //효과음 볼륨 } else if( ::_stricmp( c_Control[CONTROL::HeightShadow][0], lpszControlID ) == 0 ) { //그림자 효과 자세히 if( !IsCustomMode() ) return; SetCheckBox(c_Control[CONTROL::HeightShadow][0], true); SetCheckBox(c_Control[CONTROL::LowShadow][0], false); m_optData.nLowShadow = false; } else if( ::_stricmp( c_Control[CONTROL::LowShadow][0], lpszControlID ) == 0 ) { //그림자 효과 단순히 if( !IsCustomMode() ) return; SetCheckBox(c_Control[CONTROL::HeightShadow][0], false); SetCheckBox(c_Control[CONTROL::LowShadow][0], true); m_optData.nLowShadow = true; } else if( ::_stricmp( c_Control[CONTROL::RenderTree][0], lpszControlID ) == 0 ) { //나무 표시 if( !IsCustomMode() ) return; m_optData.nRenderTree = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_Control[CONTROL::RenderGrass][0], lpszControlID ) == 0 ) { //풀 표시 if( !IsCustomMode() ) return; m_optData.nRenderGrass = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_Control[CONTROL::LightMap][0], lpszControlID ) == 0 ) { //라이트멥 if( !IsCustomMode() ) return; m_optData.nLightMap = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_Control[CONTROL::Effect][0], lpszControlID ) == 0 ) { //이펙트표시 if( !IsCustomMode() ) return; m_optData.nEffect = GetCheckBoxValue( lpszControlID ); std::string strColor; if( m_optData.nEffect ) strColor = "<#ffffff>"; else strColor = "<#8e8e8e>"; SetControlEnableWithColor(c_Control[CONTROL::EffectPlayer][0], m_optData.nEffect, strColor.c_str()); //자신과 크리처 SetControlEnableWithColor(c_Control[CONTROL::EffectParty][0], m_optData.nEffect, strColor.c_str()); //파티원 SetControlEnableWithColor(c_Control[CONTROL::EffectEnemy][0], m_optData.nEffect, strColor.c_str()); //타겟 } else if( ::_stricmp( c_Control[CONTROL::EffectPlayer][0], lpszControlID ) == 0 ) { //이펙트표시 -> 자신과 크리처 if( !IsCustomMode() ) return; m_optData.nEffectPlayer = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_Control[CONTROL::EffectParty][0], lpszControlID ) == 0 ) { //이펙트표시 -> 파티원 if( !IsCustomMode() ) return; m_optData.nEffectParty = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_Control[CONTROL::EffectEnemy][0], lpszControlID ) == 0 ) { //이펙트표시 -> 타겟 if( !IsCustomMode() ) return; m_optData.nEffectEnemy = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( "common_show_player_checkbox", lpszControlID ) == 0 ) { m_optData.nRenderOtherPlayer = GetCheckBoxValue( lpszControlID ); } } break; } SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam ); } int SUISystemEnvironmentChild::GetCheckBoxValue( const char * pControlName ) { KUIControlCheck* pCheck = dynamicCast( GetChild(pControlName) ); if( pCheck ) { bool bFlag = pCheck->GetCheck(); return bFlag ? 1 : 0; } return 0; } void SUISystemEnvironmentChild::SetControlEnable( const char * pControlName, bool bEnable ) { KUIControl * pControl = dynamicCast(GetChild(pControlName)); if( pControl ) { if( bEnable ) pControl->Enable(); else pControl->Disable(); } } void SUISystemEnvironmentChild::SetControlEnableColor( const char * pControlName, const char* lpColor ) { KUIControl * pControl = dynamicCast(GetChild(pControlName)); if( pControl ) { pControl->SetEnableColor(lpColor); } } void SUISystemEnvironmentChild::SetControlDisableColor( const char * pControlName, const char* lpColor ) { KUIControl * pControl = dynamicCast(GetChild(pControlName)); if( pControl ) { pControl->SetDisableColor(lpColor); } } void SUISystemEnvironmentChild::SetComboBox( const char * pControlName, int nValue ) { KUIControlCombo * pCombo = dynamicCast(GetChild(pControlName)); if( pCombo ) { pCombo->SetCurSel( nValue ); } } void SUISystemEnvironmentChild::SetCheckBox( const char * pControlName, int nValue ) { KUIControlCheck* pCheck = dynamicCast( GetChild(pControlName) ); if( pCheck ) pCheck->SetCheck( nValue > 0 ? true : false ); } void SUISystemEnvironmentChild::SetSlider( const char * pControlName, int nValue ) { KUIControlSlider* pSlider = dynamicCast( GetChild(pControlName) ); if( pSlider ) pSlider->SetPosition(nValue); } // 취소 void SUISystemEnvironmentChild::UpdateOption() { m_optData = GetGameOption().GetOptData(); UpdateControl( m_optData ); CheckControlEnable(); } void SUISystemEnvironmentChild::UpdateDef() { //시스템에 맞는 초기값 m_optData = GetGameOption().GetDefOptData(); UpdateControl( m_optData ); CheckControlEnable(); } void SUISystemEnvironmentChild::UpdateControl( const _OPT_DATA & opt_data ) { SetComboBox( "combo_00_01", opt_data.nPresetOption ); //프리셋트 int nIndex = GetGameOption().GetResolution_Index( opt_data.nResolution_Width, opt_data.nResolution_Height ); SetComboBox( "combo_10_00", nIndex ); //해상도 변경 SetComboBox( "combo_10_01", opt_data.nRefreshRate ); //주사율 변경 SetCheckBox( "common_checkbox00", opt_data.nWinMode );//창모드 bool bFlag = opt_data.nWinMode ? true : false; KUIControlCombo * pCombo10_01 = dynamicCast(GetChild("combo_10_01")); //주사율 if( pCombo10_01 ) pCombo10_01->SetShow( !bFlag ); SetSlider( c_Control[CONTROL::Bright][0], opt_data.nBright ); //화면 밝기 설정 SetSlider( c_Control[CONTROL::BackGrondDis][0], opt_data.nBackGrondDis ); //배경 표시거리 SetSlider( c_Control[CONTROL::AvatarDis][0], opt_data.nAvatarDis ); //캐릭터 표시거리 SetSlider( c_Control[CONTROL::MipBias][0], opt_data.nMipBias ); //택스처 품질 SetSlider( c_Control[CONTROL::BGM_Volume][0], opt_data.nBGM_Volume ); //배경 볼륨 SetSlider( c_Control[CONTROL::SFX_Volume][0], opt_data.nSFX_Volume ); //효과 볼륨 SetSlider( c_Control[CONTROL::ENVS_Volume][0], opt_data.nENVS_Volume ); //환경 볼륨 SetSlider( c_Control[CONTROL::MASTER_Volume][0], opt_data.nMASTER_Volume ); //전체음 볼륨 SetCheckBox( c_Control[CONTROL::WinBright][0], opt_data.nWinBright ); //바탕화면 밝기 적용 SetCheckBox( c_Control[CONTROL::GlowQual][0], opt_data.nGlowQual ); //글로우 이펙트 // SetCheckBox( c_Control[CONTROL::WaterQual][0], opt_data.nWaterQual ); //물반사 효과 // 2011.11.29 - servantes : 사용하지 않아 주석 처리 SetCheckBox( c_Control[CONTROL::TreeAlpha][0], opt_data.nTreeAlpha ); //나무 투명화 SetCheckBox( c_Control[CONTROL::Enhance][0], opt_data.nEnhance ); //무기 강화 효과 SetCheckBox( c_Control[CONTROL::StateEffect][0], opt_data.nStateEffect ); //지속효과표시 SetCheckBox( c_Control[CONTROL::StateEffectPlayer][0], opt_data.nStateEffectPlayer ); //지속효과 -> 자신과 크리처 SetCheckBox( c_Control[CONTROL::StateEffectParty][0], opt_data.nStateEffectParty ); //지속효과 -> 파티원 SetCheckBox( c_Control[CONTROL::StateEffectEnemy][0], opt_data.nStateEffectEnemy ); //지속효과 -> 타겟 SetCheckBox( c_Control[CONTROL::Shadow][0], opt_data.nShadow ); //그림자 표시 SetCheckBox( c_Control[CONTROL::TownLimit][0], opt_data.nTownLimit ); //마을내 최소 구조물 // SetCheckBox( c_Control[CONTROL::Repeat][0], opt_data.nRepeat ); //현재 배경음 반복 // 2011.11.29 - servantes : 옵션 nui에 해당 효과 없음 / 주석처리 SetCheckBox( c_Control[CONTROL::AllMute][0], opt_data.nAllMute ); //전체음소거 SetCheckBox( c_Control[CONTROL::BGM_Mute][0], opt_data.nBGM_Mute ); //배경음 소거 SetCheckBox( c_Control[CONTROL::SFX_Mute][0], opt_data.nSFX_Mute ); //효과음 소거 SetCheckBox( c_Control[CONTROL::ENVS_Mute][0], opt_data.nENVS_Mute ); //환경음 소거 SetCheckBox(c_Control[CONTROL::HeightShadow][0], !opt_data.nLowShadow ); //저사향 그림자(자세히) SetCheckBox(c_Control[CONTROL::LowShadow][0], opt_data.nLowShadow ); //저사향 그림자(단순히) SetCheckBox(c_Control[CONTROL::RenderTree][0], opt_data.nRenderTree ); //나무 표시 SetCheckBox(c_Control[CONTROL::RenderGrass][0], opt_data.nRenderGrass ); //풀 표시 SetCheckBox(c_Control[CONTROL::LightMap][0], opt_data.nLightMap ); //라이트멥 SetCheckBox( c_Control[CONTROL::Effect][0], opt_data.nEffect ); //지속효과표시 SetCheckBox( c_Control[CONTROL::EffectPlayer][0], opt_data.nEffectPlayer ); //지속효과 -> 자신과 크리처 SetCheckBox( c_Control[CONTROL::EffectParty][0], opt_data.nEffectParty ); //지속효과 -> 파티원 SetCheckBox( c_Control[CONTROL::EffectEnemy][0], opt_data.nEffectEnemy ); //지속효과 -> 타겟 KUIControlCheck* pShowPlayerCheck = dynamicCast( GetChild("common_show_player_checkbox") ); if(pShowPlayerCheck) { pShowPlayerCheck->SetCheck( opt_data.nRenderOtherPlayer == 1 ? true : false ); } } void SUISystemEnvironmentChild::ApplyCancel() { UpdateOption(); //재 갱신 } // 적용 void SUISystemEnvironmentChild::ApplyOption() { GetGameOption().SetOptData( m_optData ); GetGameOption().Apply( MODE_ENVIRONMENT ); m_pGameManager->ApplyOption( MODE_ENVIRONMENT ); } ////////////////////////////////////////////////// // // SUISystemPlayChild // sound // /////////////////////////////////////////////////// bool SUISystemPlayChild::InitData( bool bReload/* = false*/ ) { //m_optData = GetGameOption().GetOptData(); //여기서 m_optData를 초기화 안해주면 pCombo->SetCurSel( m_optData.nTABKey ); 에서 쓰레기값을 쎄팅해버린다 주의 KUIControlCombo * pCombo = dynamicCast(GetChild("combo_00_01")); //TAB키 설정 if( pCombo ) { pCombo->SetEnableColor( "<#ffffff>" ); // pCombo->AddItem( S(6410) ); pCombo->AddItem( S(6411) ); pCombo->SetCurSel( 0 ); // pCombo->SetCurSel( m_optData.nTABKey ); } UpdateOption(); return SUIWnd::InitData( bReload ); } bool SUISystemPlayChild::InitControls( KPoint kPos ) { KUIControlSlider* pSlider = dynamicCast(GetChild("hslider_winalpha")); //윈도우 투명도 설정 if( pSlider ) pSlider->SetSliderRange( MaxWinAlpha ); KUIControlSlider* pWeatherQuality = dynamicCast< KUIControlSlider* >( GetChild( "hslider_winalpha-1" ) ); // 날씨 효과 품질 설정 if( pWeatherQuality ) pWeatherQuality->SetSliderRange( MaxWeatherQuality ); InitStaticControlEnableOption(); InitControlText(); return SUIWnd::InitControls(kPos); } void SUISystemPlayChild::UpdateSubCheckControl() { int nCheck(0); { //체력게이지 표시 nCheck = GetCheckBoxValue( "common_checkbox11" ); std::string strColor; if( nCheck ) strColor = "<#ffffff>"; else strColor = "<#8e8e8e>"; SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::PlayerGage][0], nCheck, strColor.c_str()); //자신과 파티원 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::MonsterGage][0], nCheck, strColor.c_str()); //몬스터 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::TargetGage][0], nCheck, strColor.c_str()); //타겟 } { //이름 표시 nCheck = GetCheckBoxValue( "common_checkbox15" ); std::string strColor; if( nCheck ) strColor = "<#ffffff>"; else strColor = "<#8e8e8e>"; SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::OPlayerName][0], nCheck, strColor.c_str()); //플레이어 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::CreatureName][0], nCheck, strColor.c_str()); //크리처 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::MonsterName][0], nCheck, strColor.c_str()); //몬스터 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::NPCName][0], nCheck, strColor.c_str()); //NPC } { //데미지 표시 nCheck = GetCheckBoxValue( "common_checkbox20" ); std::string strColor; if( nCheck ) strColor = "<#ffffff>"; else strColor = "<#8e8e8e>"; SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::PlayerDM][0], nCheck, strColor.c_str()); //자신 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::CratureDM][0], nCheck, strColor.c_str()); //크리처 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::PartyDM][0], nCheck, strColor.c_str()); //파티원 } { //노점표시관련 int nBoothType = GetGameOption().GetBoothType(); nCheck = (nBoothType == BOOTH_TYPE::RENDER_NONE_BOOTH) ? false : true; std::string strColor; if( nCheck ) strColor = "<#ffffff>"; else strColor = "<#8e8e8e>"; SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::SimpleStore][0], nCheck, strColor.c_str()); SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::DetailStore][0], nCheck, strColor.c_str()); SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::AvatarStore][0], nCheck, strColor.c_str()); } { //미구현 컨트롤 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::ChatBalloon][0], false, "<#8e8e8e>"); //(말풍선 표시) SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::Tip][0], false, "<#8e8e8e>"); //(게임팁 표시) SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::PartyDM][0], false, "<#8e8e8e>"); //파티원 } } void SUISystemPlayChild::InitStaticControlEnableOption() { KUIControlStatic* pControl(NULL); for( int i(0); i(GetChild( c_PlayControl[i][1] )); if( pControl ) pControl->SetEnableOption( true ); } } void SUISystemPlayChild::InitControlText() { KUIControlStatic* pControl(NULL); for( int i(0); iStartSound( "ui_button_click.wav" ); // if( ::_stricmp( lpszControlID, "combo_00_01" ) == 0 ) //TAB키 설정 // { // SetComboBox( "combo_00_01", (int)lparam ); // m_optData.nTABKey = (int)lparam; // } } break; case KUI_MESSAGE::KBUTTON_CLICK: { // ======================== if( ::_stricmp( lpszControlID, "button_def" ) == 0 ) { //초기값으로 UpdateDef(); } else if( ::_stricmp( lpszControlID, "button_apply" ) == 0 ) { //MSG 박스 OK -> 적용 ApplyOption(); // m_pGameManager->ProcMsgAtStatic( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OPTION_APPLY, c_szOPTION_APPLY ) ); } else if( ::_stricmp( lpszControlID, "button_ok" ) == 0 ) { ApplyOption(); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM, false ) ); } else if( ::_stricmp( lpszControlID, "button_cancel" ) == 0 ) { ApplyCancel(); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM, false ) ); } else if( ::_stricmp( lpszControlID, "button03" ) == 0 ) { //초기화 ( 윈도우 위치 초기화 하는 버튼 ) m_pGameManager->ResetDefaultWinPos(); } } break; case KUI_MESSAGE::SLIDER_SELECT: { m_pGameManager->StartSound( "ui_button_click.wav" ); if( ::_stricmp( lpszControlID, "hslider_winalpha" ) == 0 ) //윈도우 투명도 설정 { m_optData.nWinAlpha = (int)lparam; } else if( ::_stricmp( lpszControlID, "hslider_winalpha-1" ) == 0 ) //날씨 효과 품질 { m_optData.nWeatherQuality = (int)lparam; } break; } case KUI_MESSAGE::KCHECK_CHANGE: { m_pGameManager->StartSound( "ui_button_click.wav" ); /*if( ::_stricmp( "common_checkbox00", lpszControlID ) == 0 ) { //앤터체팅사용 m_optData.nEnterChat = GetCheckBoxValue( lpszControlID ); } else*/ // 엔터채팅설정 키맵핑쪽으로 이동함. sfreer if( ::_stricmp( "common_checkbox01", lpszControlID ) == 0 ) { //포스칩 후 자동 공격 m_optData.nChipAttack = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( "common_checkbox02", lpszControlID ) == 0 ) { //거래 및 초대 거절 m_optData.nTrade = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( "common_checkbox27", lpszControlID ) == 0 ) { // 대련신청_거부 m_optData.nPVP = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( "common_checkbox31", lpszControlID ) == 0 ) { // 공격_시_자동타겟팅 m_optData.nAutoTarget = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( "common_checkbox30", lpszControlID ) == 0 ) { // 휠방향_반전 m_optData.nWheel = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( "common_checkbox04", lpszControlID ) == 0 ) { //체팅창 자동숨김 m_optData.nChatHide = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( "common_checkbox05", lpszControlID ) == 0 ) { //몬스터 페이스컷 m_optData.nMobFace = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( "common_radiobutton00", lpszControlID ) == 0 ) { //라크 자세히 SetCheckBox("common_radiobutton00", true); SetCheckBox("common_radiobutton01", false); m_optData.nSimpleRak = false; } else if( ::_stricmp( "common_radiobutton01", lpszControlID ) == 0 ) { //라크 단순히 SetCheckBox("common_radiobutton00", false); SetCheckBox("common_radiobutton01", true); m_optData.nSimpleRak = true; } else if( ::_stricmp( "common_checkbox07", lpszControlID ) == 0 ) { //말풍선 표시 m_optData.nChatBalloon = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( "common_checkbox08", lpszControlID ) == 0 ) { //게임팁 표시 m_optData.nTip = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( "common_checkbox09", lpszControlID ) == 0 ) { //투구 보이기 // 2010.05.19 - prodongi PendMessageHideEquipInfo(ItemBase::HIDE_EQUIP_HELM, GetCheckBoxValue( lpszControlID )); //m_optData.nHelm = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( "common_checkbox10", lpszControlID ) == 0 ) { //망토 보이기 m_optData.nMantle = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( "common_checkbox11", lpszControlID ) == 0 ) { //체력게이지 표시 m_optData.nHPGage = GetCheckBoxValue( lpszControlID ); int nCheck = GetCheckBoxValue( lpszControlID ); std::string strColor; if( nCheck ) strColor = "<#ffffff>"; else strColor = "<#8e8e8e>"; SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::PlayerGage][0], nCheck, strColor.c_str()); //자신과 파티원 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::MonsterGage][0], nCheck, strColor.c_str()); //몬스터 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::TargetGage][0], nCheck, strColor.c_str()); //타겟 } else if( ::_stricmp( c_PlayControl[PLAYCONTROL::PlayerGage][0], lpszControlID ) == 0 ) { //자신과 파티원 m_optData.nPlayerGage = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_PlayControl[PLAYCONTROL::MonsterGage][0], lpszControlID ) == 0 ) { //몬스터 m_optData.nMobGage = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_PlayControl[PLAYCONTROL::TargetGage][0], lpszControlID ) == 0 ) { //타겟 m_optData.nTargetGage = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( "common_checkbox15", lpszControlID ) == 0 ) { //이름 표시 m_optData.nName = GetCheckBoxValue( lpszControlID ); int nCheck = GetCheckBoxValue( lpszControlID ); std::string strColor; if( nCheck ) strColor = "<#ffffff>"; else strColor = "<#8e8e8e>"; SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::OPlayerName][0], nCheck, strColor.c_str()); //플레이어 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::CreatureName][0], nCheck, strColor.c_str()); //크리처 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::MonsterName][0], nCheck, strColor.c_str()); //몬스터 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::NPCName][0], nCheck, strColor.c_str()); //NPC } else if( ::_stricmp( c_PlayControl[PLAYCONTROL::OPlayerName][0], lpszControlID ) == 0 ) { //플레이어 m_optData.nPlayerName = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_PlayControl[PLAYCONTROL::CreatureName][0], lpszControlID ) == 0 ) { //크리처 m_optData.nCreatureName = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_PlayControl[PLAYCONTROL::MonsterName][0], lpszControlID ) == 0 ) { //몬스터 m_optData.nMobName = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_PlayControl[PLAYCONTROL::NPCName][0], lpszControlID ) == 0 ) { //NPC m_optData.nNPCName = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( "common_checkbox20", lpszControlID ) == 0 ) { //데미지 표시 m_optData.ndamage = GetCheckBoxValue( lpszControlID ); int nCheck = GetCheckBoxValue( lpszControlID ); std::string strColor; if( nCheck ) strColor = "<#ffffff>"; else strColor = "<#8e8e8e>"; SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::PlayerDM][0], nCheck, strColor.c_str()); //자신 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::CratureDM][0], nCheck, strColor.c_str()); //크리처 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::PartyDM][0], false, "<#8e8e8e>"); //파티원(미구현) // SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::PartyDM][0], nCheck, strColor.c_str()); //파티원 } else if( ::_stricmp( c_PlayControl[PLAYCONTROL::PlayerDM][0], lpszControlID ) == 0 ) { //자신 m_optData.nPlayerDM = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_PlayControl[PLAYCONTROL::CratureDM][0], lpszControlID ) == 0 ) { //크리처 m_optData.nCreatureDM = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( c_PlayControl[PLAYCONTROL::PartyDM][0], lpszControlID ) == 0 ) { //파티원(미구현) // m_optData.nPartyDM = GetCheckBoxValue( lpszControlID ); } else if( ::_stricmp( "common_checkbox24", lpszControlID ) == 0 ) { //현재윈도우장금 int nCheck = GetCheckBoxValue( lpszControlID ); m_optData.nWinLock = nCheck; //gmpbigsun( 20131030 ) : 윈도우 잠금시 이동불가 설정 AbleMoveWin(!nCheck); std::string strColor; if( nCheck ) strColor = "<#8e8e8e>"; else strColor = "<#fbe6af>"; SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::WinPosClear][0], !nCheck, strColor.c_str()); //윈도우 위치 초기화 } else if( ::_stricmp( "common_checkbox25", lpszControlID ) == 0 ) { int nCheck = GetCheckBoxValue( lpszControlID ); if( nCheck > 0 ) { if( GetCheckBoxValue( c_PlayControl[PLAYCONTROL::SimpleStore][0] ) ) m_optData.nSelfBoothType = BOOTH_TYPE::RENDER_SIMPLE_BOOTH; else if( GetCheckBoxValue( c_PlayControl[PLAYCONTROL::DetailStore][0] ) ) m_optData.nSelfBoothType = BOOTH_TYPE::RENDER_DETAIL_BOOTH; else if( GetCheckBoxValue( c_PlayControl[PLAYCONTROL::AvatarStore][0] ) ) m_optData.nSelfBoothType = BOOTH_TYPE::RENDER_AVATAR_BOOTH; } else { nCheck = 0; m_optData.nSelfBoothType = BOOTH_TYPE::RENDER_NONE_BOOTH; } std::string strColor; if( nCheck ) strColor = "<#ffffff>"; else strColor = "<#8e8e8e>"; SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::SimpleStore][0], nCheck, strColor.c_str()); //간단상점 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::DetailStore][0], nCheck, strColor.c_str()); //기본상점 SetControlEnableWithColor(c_PlayControl[PLAYCONTROL::AvatarStore][0], nCheck, strColor.c_str()); //아바타 } else if( ::_stricmp( c_PlayControl[PLAYCONTROL::SimpleStore][0], lpszControlID ) == 0 ) { //간단상점 SetCheckBox(c_PlayControl[PLAYCONTROL::SimpleStore][0], true); SetCheckBox(c_PlayControl[PLAYCONTROL::DetailStore][0], false); SetCheckBox(c_PlayControl[PLAYCONTROL::AvatarStore][0], false); m_optData.nSelfBoothType = BOOTH_TYPE::RENDER_SIMPLE_BOOTH; } else if( ::_stricmp( c_PlayControl[PLAYCONTROL::DetailStore][0], lpszControlID ) == 0 ) { //기본상점 SetCheckBox(c_PlayControl[PLAYCONTROL::SimpleStore][0], false); SetCheckBox(c_PlayControl[PLAYCONTROL::DetailStore][0], true); SetCheckBox(c_PlayControl[PLAYCONTROL::AvatarStore][0], false); m_optData.nSelfBoothType = BOOTH_TYPE::RENDER_DETAIL_BOOTH; } else if( ::_stricmp( c_PlayControl[PLAYCONTROL::AvatarStore][0], lpszControlID ) == 0 ) { //아바타 SetCheckBox(c_PlayControl[PLAYCONTROL::SimpleStore][0], false); SetCheckBox(c_PlayControl[PLAYCONTROL::DetailStore][0], false); SetCheckBox(c_PlayControl[PLAYCONTROL::AvatarStore][0], true); m_optData.nSelfBoothType = BOOTH_TYPE::RENDER_AVATAR_BOOTH; } else if( ::_stricmp( c_PlayControl[ PLAYCONTROL::CameraCollision ][ 0 ], lpszControlID ) == 0 ) { m_optData.nCameraCollision = GetCheckBoxValue( lpszControlID ); } else if(::_stricmp( "common_checkbox_shake", lpszControlID ) == 0 ) { int nCheck = GetCheckBoxValue( lpszControlID ); m_optData.nCriticalCamera = nCheck; } else if( ::_stricmp("common_checkbox28",lpszControlID) == 0 ) // 2012. 5. 24 - marine 호칭 보이기/안보이기 옵션 { int nCheck = GetCheckBoxValue( lpszControlID ); m_optData.nTitleShow = nCheck; } else if( ::_stricmp("common_checkbox29",lpszControlID) == 0 ) // 2012. 5. 24 - marine 호칭 보이기/안보이기 옵션 { int nCheck = GetCheckBoxValue( lpszControlID ); m_optData.isShowSelectOutLine = nCheck; } // 제거. bintitle. 2010.10.07. /*else if(::_stricmp( "common_checkbox_deco", lpszControlID ) == 0 ) { int nCheck = GetCheckBoxValue( lpszControlID ); m_optData.nAvatarDeco = nCheck; }*/ // combo_00_01 TAB키 설정 // common_checkbox01 포스칩 후 자동 공격 // common_checkbox02 거래 및 초대 거절 // common_checkbox27 대련신청_거부 // common_checkbox04 체팅창 자동숨김 // common_checkbox05 몬스터 페이스컷 // common_checkbox07 말풍선 표시 // common_checkbox08 게임팁 표시 // common_checkbox09 투구 보이기 // common_checkbox10 망토 보이기 // common_checkbox11 체력게이지 표시 // common_checkbox12 자신과 파티원 // common_checkbox13 몬스터 // common_checkbox14 타겟 // common_checkbox15 이름 표시 // common_checkbox16 플레이어 // common_checkbox17 크리처 // common_checkbox18 몬스터 // common_checkbox19 NPC // common_checkbox20 데미지 표시 // common_checkbox21 자신 // common_checkbox22 크리처 // common_checkbox23 파티원 // common_checkbox24 현재윈도우장금 // common_checkbox26 간단상점 // common_checkbox27 기본상점 // common_checkbox28 아바타 // hslider_winalpha 윈도우 투명도 설정 // button03 초기화 } break; } SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam ); } // 2010.05.20 - prodongi void SUISystemPlayChild::ProcMsgAtStatic(SGameMessage* pMsg) { switch (pMsg->nType) { case IMSG_HIDE_EQUIP_INFO: OnMsgHideEquipInfo(dynamicCast(pMsg)); break; } } int SUISystemPlayChild::GetCheckBoxValue( const char * pControlName ) { KUIControlCheck* pCheck = dynamicCast( GetChild(pControlName) ); if( pCheck ) { bool bFlag = pCheck->GetCheck(); return bFlag ? 1 : 0; } return 0; } void SUISystemPlayChild::SetControlEnable( const char * pControlName, bool bEnable ) { KUIControl * pControl = dynamicCast(GetChild(pControlName)); if( pControl ) { if( bEnable ) pControl->Enable(); else pControl->Disable(); } } void SUISystemPlayChild::SetControlEnableColor( const char * pControlName, const char* lpColor ) { KUIControl * pControl = dynamicCast(GetChild(pControlName)); if( pControl ) { pControl->SetEnableColor(lpColor); } } void SUISystemPlayChild::SetControlDisableColor( const char * pControlName, const char* lpColor ) { KUIControl * pControl = dynamicCast(GetChild(pControlName)); if( pControl ) { pControl->SetDisableColor(lpColor); } } void SUISystemPlayChild::SetComboBox( const char * pControlName, int nValue ) { KUIControlCombo * pCombo = dynamicCast(GetChild(pControlName)); if( pCombo ) { pCombo->SetCurSel( nValue ); } } void SUISystemPlayChild::SetCheckBox( const char * pControlName, int nValue ) { KUIControlCheck* pCheck = dynamicCast( GetChild(pControlName) ); if( pCheck ) pCheck->SetCheck( nValue ? true : false ); } void SUISystemPlayChild::SetSlider( const char * pControlName, int nValue ) { KUIControlSlider* pSlider = dynamicCast( GetChild(pControlName) ); if( pSlider ) pSlider->SetPosition(nValue); } void SUISystemPlayChild::UpdateDef() { //시스템에 맞는 초기값 GetGameOption().GetDefPlayOptData(m_optData); UpdateControl(); } void SUISystemPlayChild::UpdateControl() { //SetCheckBox("common_checkbox00", m_optData.nEnterChat); //앤터체팅사용 SetCheckBox("common_checkbox01", m_optData.nChipAttack); //포스칩 후 자동 공격 SetCheckBox("common_checkbox02", m_optData.nTrade); //거래 및 초대 거절 // SetCheckBox("common_checkbox03", m_optData); // SetCheckBox("common_checkbox27", m_optData.nPVP); //대련신청_거부 SetCheckBox("common_checkbox31", m_optData.nAutoTarget); //공격_시_자동타겟팅 SetCheckBox("common_checkbox30", m_optData.nWheel); //휠방향_반전 SetCheckBox("common_checkbox04", m_optData.nChatHide); //체팅창 자동숨김 //SetCheckBox("common_checkbox05", m_optData.nMobFace); //몬스터 페이스컷 SetCheckBox("common_checkbox07", m_optData.nChatBalloon); //말풍선 표시 SetCheckBox("common_checkbox08", m_optData.nTip); //게임팁 표시 // 2010.05.20 - prodongi //SetCheckBox("common_checkbox09", m_optData.nHelm); //투구 보이기 SetCheckBox("common_checkbox10", m_optData.nMantle); //망토 보이기 SetCheckBox("common_checkbox11", m_optData.nHPGage); //체력게이지 표시 SetCheckBox("common_checkbox12", m_optData.nPlayerGage); //자신과 파티원 c_PlayControl[PLAYCONTROL::PlayerGage][0] SetCheckBox("common_checkbox13", m_optData.nMobGage); //몬스터 c_PlayControl[PLAYCONTROL::MonsterGage][0] SetCheckBox("common_checkbox14", m_optData.nTargetGage); //타겟 c_PlayControl[PLAYCONTROL::TargetGage][0] SetCheckBox("common_checkbox15", m_optData.nName); //이름 표시 SetCheckBox("common_checkbox16", m_optData.nPlayerGage); //플레이어 표시 c_PlayControl[PLAYCONTROL::OPlayerName][0] SetCheckBox("common_checkbox17", m_optData.nCreatureName); //크리처 c_PlayControl[PLAYCONTROL::CreatureName][0] SetCheckBox("common_checkbox18", m_optData.nMobName); //몬스터 c_PlayControl[PLAYCONTROL::MonsterName][0] SetCheckBox("common_checkbox19", m_optData.nNPCName); //NPC c_PlayControl[PLAYCONTROL::NPCName][0] SetCheckBox("common_checkbox20", m_optData.ndamage); //데미지 표시 SetCheckBox("common_checkbox21", m_optData.nPlayerDM); //자신 c_PlayControl[PLAYCONTROL::PlayerDM][0] SetCheckBox("common_checkbox22", m_optData.nCreatureDM); //크리처 c_PlayControl[PLAYCONTROL::CratureDM][0] SetCheckBox("common_checkbox23", m_optData.nPartyDM); //파티원 c_PlayControl[PLAYCONTROL::PartyDM][0] SetCheckBox("common_checkbox24", m_optData.nWinLock); //현재윈도우장금 SetCheckBox("common_checkbox25", m_optData.nSelfBoothType != BOOTH_TYPE::RENDER_NONE_BOOTH); //개인상점 아바타 표시 SetCheckBox("common_radiobutton02", m_optData.nSelfBoothType == BOOTH_TYPE::RENDER_SIMPLE_BOOTH); SetCheckBox("common_radiobutton03", m_optData.nSelfBoothType == BOOTH_TYPE::RENDER_DETAIL_BOOTH); SetCheckBox("common_radiobutton04", m_optData.nSelfBoothType == BOOTH_TYPE::RENDER_AVATAR_BOOTH); SetCheckBox("common_radiobutton00", m_optData.nSimpleRak<=0); SetCheckBox("common_radiobutton01", m_optData.nSimpleRak>0); SetCheckBox("common_checkbox_shake", m_optData.nCriticalCamera ); SetCheckBox("common_checkbox28", m_optData.nTitleShow ); // 2012. 5. 24 - mainre 호칭 SetCheckBox("common_checkbox29", m_optData.isShowSelectOutLine); //SetCheckBox("common_checkbox_deco" , m_optData.nAvatarDeco ); // 제거. bintitle. 2010.10.07. SetCheckBox("common_checkbox26", m_optData.nCameraCollision); KUIControlSlider* pSliderAlpha = dynamicCast(GetChild("hslider_winalpha")); //윈도우 알파 설정 슬라이더 if( pSliderAlpha ) { pSliderAlpha->SetSliderRange( MaxWinAlpha ); pSliderAlpha->SetPosition( m_optData.nWinAlpha ); } KUIControlSlider* pWeatherQuality = dynamicCast< KUIControlSlider* >( GetChild( "hslider_winalpha-1" ) ); // 날씨 효과 슬라이더 if( pWeatherQuality ) { pWeatherQuality->SetSliderRange( MaxWeatherQuality ); pWeatherQuality->SetPosition( m_optData.nWeatherQuality ); } UpdateSubCheckControl(); } void SUISystemPlayChild::UpdateOption() { m_optData = GetGameOption().GetOptData(); m_nMinimapAlpha = GetGameOption().GetMinimapAlpha(); m_bMinimapOpen = GetGameOption().IsMinimapOpen(); UpdateControl(); //STMSG_REQ_SYSTEM_OPTION msg( STMSG_SYSTEM_OPTION::SYSOPTION_BGSOUND ); // bg //msg.m_Type = STMSG_SYSTEM_OPTION::SYSOPTION_BGSOUND; //m_pGameManager->ProcMsgAtStatic( &msg ); //if( m_nBGVolum != msg.m_nGetOption ) // m_pGameManager->ProcMsgAtStatic( &STMSG_SYSTEM_OPTION( STMSG_SYSTEM_OPTION::SYSOPTION_BGSOUND, m_nBGVolum * 10 ) ); //// effect //msg.m_Type = STMSG_SYSTEM_OPTION::SYSOPTION_EFFECTSOUND; //m_pGameManager->ProcMsgAtStatic( &msg ); //if( m_nEffectVolum != msg.m_nGetOption ) //{ // int nRealVolume[100] = { 0, 3, 5, 8, 10, // 20, 40, 60, 80, 90, 100, }; // // m_pGameManager->ProcMsgAtStatic( &STMSG_SYSTEM_OPTION( STMSG_SYSTEM_OPTION::SYSOPTION_EFFECTSOUND, nRealVolume[m_nEffectVolum] ) ); //} // minimap alpha //m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_MINIMAP_ALPHA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MINIMAP, m_nMinimapAlpha ) ); // minimap open //m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MINIMAP, m_bMinimapOpen ) ); RefreshValue( MINIMAP_ALPHA, m_nMinimapAlpha ); RefreshValue( MINIMAP_OPEN, ( m_bMinimapOpen ) ? 1 : 0 ); } void SUISystemPlayChild::ApplyCancel() { UpdateOption(); //재 갱신 } void SUISystemPlayChild::ApplyOption() { GetGameOption().SetOptData( m_optData ); GetGameOption().Apply( MODE_PLAY ); m_pGameManager->ApplyOption( MODE_PLAY ); //// 배경 사운드 게임에 요청 //if( m_nBGVolum != GetGameOption().GetBGVolum() ) //{ // m_pGameManager->ProcMsgAtStatic( &STMSG_SYSTEM_OPTION( STMSG_SYSTEM_OPTION::SYSOPTION_BGSOUND, m_nBGVolum * 10 ) ); // RefreshValue( SOUND_BG, m_nBGVolum ); //} //// 이펙트 사운드 게임에 요청 //if( m_nEffectVolum != GetGameOption().GetEffectVolum() ) //{ // int nRealVolume[100] = { 0, 3, 5, 8, 10, // 20, 40, 60, 80, 90, 100, }; // m_pGameManager->ProcMsgAtStatic( &STMSG_SYSTEM_OPTION( STMSG_SYSTEM_OPTION::SYSOPTION_EFFECTSOUND, nRealVolume[ m_nEffectVolum ] ) ); // RefreshValue( SOUND_EFFECT, m_nEffectVolum ); //} //// 미니맵 //if( m_nMinimapAlpha != GetGameOption().GetMinimapAlpha() ) //{ // GetGameOption().SetMinimapAlpha( m_nMinimapAlpha ); // m_pGameManager->ProcMsgAtStatic( &SIMSG_UI_MINIMAP_ALPHA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MINIMAP, m_nMinimapAlpha ) ); // RefreshValue( MINIMAP_ALPHA, m_nMinimapAlpha ); //} //// 온/오프 //if( m_bMinimapOpen != GetGameOption().IsMinimapOpen() ) //{ // GetGameOption().SetMinimapOpen( m_bMinimapOpen ); // m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MINIMAP, true ) ); // RefreshValue( MINIMAP_OPEN, ( m_bMinimapOpen ) ? 1 : 0 ); //} //GetGameOption().SetBGVolum( m_nBGVolum * 10 ); //GetGameOption().SetEffectVolum( m_nEffectVolum * 10 ); //GetGameOption().Apply( MODE_PLAY ); } void SUISystemPlayChild::SetMinimapAlpha( int nLevel ) { if( nLevel < MINIMAP_ALPHA_MIN ) return; if( nLevel > MINIMAP_ALPHA_MAX ) return; m_nMinimapAlpha = nLevel; RefreshValue( MINIMAP_ALPHA, m_nMinimapAlpha ); } void SUISystemPlayChild::SetMinimapOpen() { m_bMinimapOpen = !m_bMinimapOpen; RefreshValue( MINIMAP_OPEN, m_bMinimapOpen ); } void SUISystemPlayChild::RefreshValue( int nMode, int nLevel ) { switch(nMode) { case MINIMAP_ALPHA: { std::string strMinimap; switch(nLevel) { case MINIMAP_ALPHA_MAX: strMinimap = "미니맵 투명도: 높음"; break; case MINIMAP_ALPHA_MIDDLE: strMinimap = "미니맵 투명도: 보통"; break; case MINIMAP_ALPHA_MIN: strMinimap = "미니맵 투명도: 낮음"; break; } SetChildCaption( "soundop_text07", strMinimap.c_str() ); } break; case MINIMAP_OPEN: { std::string strMinimap = ( nLevel > 0 ) ? "미니맵 On/Off: on" : "미니맵 On/Off: off"; SetChildCaption( "soundop_text08", strMinimap.c_str() ); } break; } } // 2010.05.19 - prodongi // 수정. bintitle. 2010.10.08. 게임플레이설정 - 투구보이기 체크시에 기존의 꾸미기보임/숨김 정보를 참조하도록 수정. void SUISystemPlayChild::PendMessageHideEquipInfo(unsigned int flag, int show) { TS_CS_HIDE_EQUIP_INFO info; //info.nHideEquipFlag = 0; //if (0 == show) info.nHideEquipFlag |= flag; info.nHideEquipFlag = g_pCurrentGameSystem->GetLocalPlayer()->getHideEquipInfo(); if ( show ) info.nHideEquipFlag ^= flag; else if (0 == show) info.nHideEquipFlag |= flag; m_pGameManager->PendMessage(&info); } // 2010.05.20 - prodongi void SUISystemPlayChild::OnMsgHideEquipInfo(SIMSG_HIDE_EQUIP_INFO* hideEquipInfo) { unsigned int flag = hideEquipInfo->m_flag; int value; // 투구 if (ItemBase::HIDE_EQUIP_HELM & flag) value = 0; // check else value = 1; // uncheck SetCheckBox("common_checkbox09", value); } ////////////////////////////////////////////////////////// //// //// SUIKeymappingChild //// sfreer 키맵핑 기능 추가 2009.03.16 //////////////////////////////////////////////////////////// bool SUISystemKeymappingChild::InitControls( KPoint kPos ) { for(int i=0; iGetRect().top; } KUIControlScrollBase* scroll = dynamicCast< KUIControlScrollBase* >( GetChild( "key_menu_fund_scroll" ) ); if(scroll) { int ph = GetRect().GetHeight(); int range = 0; //스크롤 범위... for(int i=0; iGetRect().GetHeight() - dy > GetRect().GetHeight()) { bInner = false; } } } if(bInner) { range = i+1; break; } } scroll->SetMaxRange(range); //임시땜빵 + 2 scroll->SetPosition(0); UpdateControl(); } // 2012.9.25 Metin 활성화로 변경 /* // 이동키는 수정안되게 비활성 std::string strMoveKeyBtn[4] = {"button_key13001","button_key13002","button_key13003","button_key13004"}; for(int i= 0 ; i<4 ; ++i) { KUIControlButton *pUP = dynamicCast(GetChild(strMoveKeyBtn[i].c_str())); if(pUP) pUP->Disable(); } */ return SUIWnd::InitControls(kPos); } bool SUISystemKeymappingChild::InitData( bool bReload ) { m_DefKeymapping.SetDefaultKeymapping(); m_PrevRappelzDefKeymapping.SetPrevRappelzDefaultKeymapping(); UpdateOption(); return SUIWnd::InitData(bReload); } int SUISystemKeymappingChild::SetHotkey(int hotkeycode, KEYEX &key, bool vailetest) { if(vailetest) { if(!m_GameWorldKeymapping.IsValidKey(key)) return -1; } if(KEYEX() != key) { int overlappingkey = m_GameWorldKeymapping.GetKeymapping(key); if(overlappingkey>=0) { PrevKeyList[overlappingkey].push_front(key); m_GameWorldKeymapping.SetKeymapping(overlappingkey,KEYEX(), true); } } if(KEYEX() != m_GameWorldKeymapping.GetKeymapping(hotkeycode) ) { PrevKeyList[hotkeycode].push_front(m_GameWorldKeymapping.GetKeymapping(hotkeycode)); if(PrevKeyList[hotkeycode].size() > nPrevKeyCount) { PrevKeyList[hotkeycode].pop_back(); } } m_GameWorldKeymapping.SetKeymapping(hotkeycode,key,!vailetest); UpdateControl(); return hotkeycode; } std::string SUISystemKeymappingChild::GetControlTextName(int nhotkeycode) { int k=0; /*std::string tip; for(int i=0; i=KEYMAPPINGCONTROL::KM4_01) tip = KeymappingInfoList[i].text; else if(KeymappingInfoList[i].hotkeycode == nhotkeycode) break; } KUIWnd *wnd = GetChild(KeymappingInfoList[nhotkeycode].editbuttonid); tip += " "; tip += KeymappingInfoList[k].text; */ for(int i=0; inType) { case IMSG_HOTKEY_EX: { SIMSG_HOTKEY_EX* pHotKeyEx = dynamicCast(pMsg); if(m_HighlightKeymappingNumber >= 0) { //if(m_GameWorldKeymapping.IsVaildUnityKey(pHotKeyEx->wParam)) if(m_GameWorldKeymapping.IsValidKey(KEYEX(*pHotKeyEx))) { int j = m_GameWorldKeymapping.GetKeymapping(KEYEX(*pHotKeyEx)); std::string tip; // 2012.9.26 Metin 키보드 이동도 따른 키세팅 방법과 동일하다. /* if(m_GameWorldKeymapping.IsMovingKey( KEYEX(pHotKeyEx->bAlt, pHotKeyEx->bCtrlShift, pHotKeyEx->bCtrl, pHotKeyEx->wParam) )) { tip = "<#ed1c24><$1166:지정하신 키는 이동키로 사용되고 있어 이후에 사용 가능합니다.>"; SetTip(TIPLEVEL::READYINPUT, NULL, -1); SetTip(TIPLEVEL::CLICK, tip.c_str(), -1); UpdateControl(); } else { */ if(j>=0) { if(m_HighlightKeymappingNumber == j) { //만약 같은 동일키를 입력했다면, 해제 시켜준다. //SetHotkey(m_HighlightKeymappingNumber, KEYEX(), false); //tip = GetControlTextName(j); //tip += "<$6910:키가 해제됨...>"; //동일키 입력하면 그냥 취소함. UpdateControl(); } else { //중복된키가 있음. SetHotkey(m_HighlightKeymappingNumber, KEYEX(*pHotKeyEx)); tip = "<#ed1c24><$6906:중복된> "; tip += GetControlTextName(j); tip += "<$6907:는 해제 됩니다.>"; SetTip(TIPLEVEL::READYINPUT, NULL, -1); SetTip(TIPLEVEL::CLICK, tip.c_str(), -1); } } else { SetHotkey(m_HighlightKeymappingNumber, KEYEX(*pHotKeyEx)); tip = GetControlTextName(j); tip += "<$6909:키가 변경됨...>"; SetTip(TIPLEVEL::READYINPUT, NULL, -1); SetTip(TIPLEVEL::CLICK, tip.c_str(), 4000); UpdateControl(); } //} } } break; } } } void SUISystemKeymappingChild::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ) { switch( nMessage ) { case KUI_MESSAGE::KSCROLL_SELECT: // 스크롤 선택 { int nPos = int(lparam); nPos = max( nPos, 0 ); //_oprint("SUISystemKeymappingChild::PumpUpMessage - nPos %d\n",nPos); if( !_stricmp( lpszControlID, "key_menu_fund_scroll" ) ) { UpdateScrollControl(); } } break; case KUI_MESSAGE::KCHECK_CHANGE: { m_pGameManager->StartSound( "ui_button_click.wav" ); if( ::_stricmp( "common_checkbox", lpszControlID ) == 0 ) { //앤터체팅사용 KUIControlCheck* pCheck = dynamicCast( GetChild(lpszControlID) ); if( pCheck ) m_EnterChatMode = !pCheck->GetCheck(); if(m_EnterChatMode) SetTip(TIPLEVEL::CLICK, "<$1114:엔터채팅모드>",4000); else SetTip(TIPLEVEL::CLICK, "<$1116:기본채팅>",4000); UpdateControl(); } } break; case KUI_MESSAGE::KBUTTON_CLICK: { if( ::_stricmp( lpszControlID, "button_def" ) == 0 ) { UpdateDef(); } else if( ::_stricmp( lpszControlID, "button_ok" ) == 0 ) { ApplyOption(); InitPrevKey(); UpdateControl(); m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM, false ) ); } else if( ::_stricmp( lpszControlID, "button_cancel" ) == 0 || ::_stricmp( lpszControlID, "button_close" ) == 0 ) { ApplyCancel(); InitPrevKey(); UpdateControl(); if( ::_stricmp( lpszControlID, "button_cancel" ) == 0 ) m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM, false ) ); } else if( ::_stricmp( lpszControlID, "button_apply" ) == 0 ) { ApplyOption(); } else if( ::_stricmp( lpszControlID, "button_rappelz" ) == 0 ) { UpdateRappelzDef(); } else if( ::_stricmp( lpszControlID, "button_user_open" ) == 0 ) { UserLoad(); } else if( ::_stricmp( lpszControlID, "button_user_save" ) == 0 ) { UserSave(); } // 퀵버튼들.. else if( ::_stricmp( lpszControlID, "quick_button_menu" ) == 0 ) { QuickScroll("static_slot_1000"); } else if( ::_stricmp( lpszControlID, "quick_button_mouse" ) == 0 ) { QuickScroll("static_slot_2000"); } else if( ::_stricmp( lpszControlID, "quick_button_tip" ) == 0 ) { QuickScroll("static_slot_3000"); } else if( ::_stricmp( lpszControlID, "quick_button_1slot" ) == 0 ) { QuickScroll("static_slot_4000"); } else if( ::_stricmp( lpszControlID, "quick_button_2slot" ) == 0 ) { QuickScroll("static_slot_5000"); } else if( ::_stricmp( lpszControlID, "quick_button_3slot" ) == 0 ) { QuickScroll("static_slot_6000"); } else if( ::_stricmp( lpszControlID, "quick_button_4slot" ) == 0 ) { QuickScroll("static_slot_7000"); } else if( ::_stricmp( lpszControlID, "quick_button_5slot" ) == 0 ) { QuickScroll("static_slot_8000"); } else if( ::_stricmp( lpszControlID, "quick_button_6slot" ) == 0 ) { QuickScroll("static_slot_9000"); } else if( ::_stricmp( lpszControlID, "quick_button_7slot" ) == 0 ) { QuickScroll("static_slot_10000"); } else if( ::_stricmp( lpszControlID, "quick_button_8slot" ) == 0 ) { QuickScroll("static_slot_11000"); } else if( ::_stricmp( lpszControlID, "button_notkeyset" ) == 0 && m_HighlightKeymappingNumber >= 0) { //아무키도 입력안함으로 만들기... int j=m_HighlightKeymappingNumber; SetHotkey(j, KEYEX(), false); UpdateControl(); std::string tip2; tip2 = GetControlTextName(j); tip2 += "<$6987:키는 지정안함 으로 설정하였습니다.>"; SetTip(TIPLEVEL::READYINPUT, NULL, -1); SetTip(TIPLEVEL::CLICK, tip2.c_str(),4000); } else { for(int i=0 ;i",4000); } else { UpdateControl(KeymappingInfoList[i].hotkeycode); SetTip(TIPLEVEL::READYINPUT, "<$1122:키를입력해주세요>", -1); } break; } else if( ::_stricmp( lpszControlID, KeymappingInfoList[i].undobuttonid ) == 0 ) { //이전키값으로 돌리기... int j = KeymappingInfoList[i].hotkeycode; if(PrevKeyList[j].size() > 0) { KEYEX tempkey = (PrevKeyList[j].front()); PrevKeyList[j].pop_front(); int overlappingkey = m_GameWorldKeymapping.GetKeymapping(tempkey); if(overlappingkey>=0) { m_GameWorldKeymapping.SetKeymapping(overlappingkey,KEYEX(), true); std::string tip2; tip2 = "<#ed1c24><$6906:중복된>"; tip2 += GetControlTextName(overlappingkey); tip2 += "<$6907:는 해제 됩니다.>"; SetTip(TIPLEVEL::CLICK,tip2.c_str(),-1); } else { SetTip(TIPLEVEL::CLICK,"<$1125:이전키값돌아갔습니다.>",4000); } //이전키값으로 돌릴때는 이전키에 저장되지 말아야함으로 그냥 직접 수정해준다.. m_GameWorldKeymapping.SetKeymapping(j,tempkey,true); UpdateControl(); } break; } } } } break; default: break; } return SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam ); } DWORD SUISystemKeymappingChild::OnMouseMessage(DWORD dwMessage, int x, int y) { char *tip = NULL; if( dwMessage == KMOUSE_MOVE ) { std::list childlist = GetChildList(); for( std::list::iterator itt = childlist.begin(); itt != childlist.end(); ++itt) { KUIWnd *tmpwnd = (*itt); if(!tmpwnd->IsInRect(x,y)) continue; const char *tmpid = tmpwnd->GetID(); if(::_stricmp(tmpid,"button_def")==0) //기본값 { tip = "<$1113:button_def롤오버>"; } else if(::_stricmp(tmpid,"button_rappelz")==0) //기존 라펠즈처럼 { tip = "<$1115:button_rappelz롤오버>"; } else if(::_stricmp(tmpid,"button_user_save")==0) // 사용자키 저장 { tip = "<$1117:button_user_save롤오버>"; } else if(::_stricmp(tmpid,"button_user_open")==0) // 사용자키 불러오기 { tip = "<$6896:button_user_open롤오버>"; } /*else if(::_stricmp(tmpid,"button_ok")==0) // 확인 { tip = "<$1118:button_ok롤오버>"; } else if(::_stricmp(tmpid,"button_cancel")==0) // 취소 { tip = "<$1119:button_cancel롤오버>"; } else if(::_stricmp(tmpid,"static_info_text")==0) // 설명창 { tip = "<$1120:static_info_text롤오버>"; } else if(::_stricmp(tmpid,"button_all_undo")==0) // 전체이전값 { tip = "<$1124:이전키입력버튼롤오버>"; }*/ //else if(::_stricmp(tmpid,"static_chatting_option") ==0 || ::_stricmp(tmpid,"common_checkbox") ==0) // 엔터채팅관련 //{ //현재 이전 라펠즈상태인지 여부에 따라 text출력이 2개가 아닐까? //tip = "<$6908:엔터채팅관련롤오버>"; //} else if(::strncmp(tmpid, "button_key",10) == 0) // 키입력버튼 { //키출력staticbox인가? tip = "<$1121:키입력버튼롤오버>"; } else if(::strncmp(tmpid, "static_outbox",13) == 0) // 키출력 static box { //tip = "!임시!키출력staticbox롤오버"; //롤오버 없음. } else if(::strncmp(tmpid, "button_undo",11) == 0) // 이전키 { tip = "<$1124:이전키입력버튼롤오버>"; } } SetTip(TIPLEVEL::ROLLOVER, tip, -1); } return SUIWnd::OnMouseMessage(dwMessage, x, y); } void SUISystemKeymappingChild::UpdateOption() { m_EnterChatMode = GetGameOption().IsEnterChat(); m_GameWorldKeymapping = GetGameKeymapping(); UpdateControl(); } void SUISystemKeymappingChild::UpdateDef() { m_EnterChatMode = true; //m_PrevKeymapping = m_GameWorldKeymapping; m_GameWorldKeymapping.SetDefaultKeymapping(); UpdateControl(); } void SUISystemKeymappingChild::UpdateRappelzDef() { m_EnterChatMode = false; //m_PrevKeymapping = m_GameWorldKeymapping; m_GameWorldKeymapping.SetPrevRappelzDefaultKeymapping(); UpdateControl(); } void SUISystemKeymappingChild::ApplyOption() { GetGameKeymapping() = m_GameWorldKeymapping; _OPT_DATA data = GetGameOption().GetOptData(); data.nEnterChat = m_EnterChatMode; GetGameOption().SetOptData(data); GetGameKeymapping().EnableMoveKey(data.nEnterChat); GetGameOption().Apply( MODE_PLAY ); m_pGameManager->ApplyOption( MODE_PLAY ); GetGameKeymapping().EnterChat(m_EnterChatMode); m_pDisplayInfo->SaveKeymmapingInfo_current(); UpdateControl(); m_pGameManager->PostMsgAtDynamic( new SIMSG_SET_KEYMAPPING() ); } void SUISystemKeymappingChild::ApplyCancel() { UpdateOption(); } void SUISystemKeymappingChild::UserSave() { GetGameSavedKeymapping() = m_GameWorldKeymapping; GetGameSavedKeymapping().EnterChat(m_EnterChatMode); m_pDisplayInfo->SaveKeymappingInfo_saved(); } void SUISystemKeymappingChild::UserLoad() { m_EnterChatMode = GetGameSavedKeymapping().IsEnterChat(); m_GameWorldKeymapping = GetGameSavedKeymapping(); UpdateControl(); } void SUISystemKeymappingChild::AllUndo() { //m_GameWorldKeymapping = m_PrevKeymapping; UpdateControl(); } void SUISystemKeymappingChild::QuickScroll(const char *str) { int var = -1; for(int i=0 ;iGetID(), str) == 0 ) { var = i; break; } } }*/ } KUIControlScrollBase* scroll = dynamicCast< KUIControlScrollBase* >( GetChild( "key_menu_fund_scroll" ) ); if(scroll && var>=0 && m_HighlightKeymappingNumber==-1) { scroll->SetPosition(var); UpdateScrollControl(); } } void SUISystemKeymappingChild::UpdateScrollControl() { int cur = 0; bool higihlightwnd = true; KUIControlScrollBase* scroll = dynamicCast< KUIControlScrollBase* >( GetChild( "key_menu_fund_scroll" ) ); KUIWnd *highlightwndwnd = GetChild("static_outbox_up"); KUIWnd *notsetkeywnd = GetChild("button_notkeyset"); if(!scroll || !highlightwndwnd || !notsetkeywnd) return; if(m_HighlightKeymappingNumber < 0) higihlightwnd = false; cur = scroll->GetPosition(); int dy = KeymappingInfoList[cur].original_y - KeymappingInfoList[0].original_y; for(int i=0 ;iGetRect().GetHeight() - dy > GetRect().GetHeight() ) bvisble = false; tempwnd->SetShow(bvisble); if(bvisble) { KRect rect = tempwnd->GetRect(); tempwnd->MovePos(rect.left, GetRect().top + KeymappingInfoList[i].original_y - dy); } } } if(higihlightwnd) { KUIWnd *outboxwnd = GetChild(KeymappingInfoList[i].outboxid); KUIWnd *undownd = GetChild(KeymappingInfoList[i].undobuttonid); int j = KeymappingInfoList[i].hotkeycode; if(outboxwnd && undownd && j==m_HighlightKeymappingNumber) { highlightwndwnd->MovePos( outboxwnd->GetRect().left - 4, outboxwnd->GetRect().top -4 ); notsetkeywnd->MovePos( undownd->GetRect().left, undownd->GetRect().top ); if(!outboxwnd->IsShow()) higihlightwnd = false; } } } highlightwndwnd->SetShow(higihlightwnd); notsetkeywnd->SetShow(higihlightwnd); } void SUISystemKeymappingChild::UpdateControl(int highlighthotkeycode) { //키입력모드로 가기.. KUIWnd *highlightwndwnd = GetChild("static_outbox_up"); m_HighlightKeymappingNumber = highlighthotkeycode; if(m_HighlightKeymappingNumber < 0) GetGameKeymapping().SkipMode(false); else GetGameKeymapping().SkipMode(true); UpdateScrollControl(); //앤터체팅사용 KUIControlCheck* pCheck = dynamicCast( GetChild("common_checkbox") ); //기존라펠즈 처럼인지 체크해볼것. if( pCheck ) { bool enable = false; if(m_GameWorldKeymapping == m_PrevRappelzDefKeymapping) enable = true; std::string str; KUIControl *tempstaticwnd = dynamicCast(GetChild("static_chatting_option")); if(enable) { //기존라펠즈처럼임. pCheck->Enable(); str = "<#c7b299><$6905:일반채팅_사용>"; } else { //기존라펠즈처럼 아님 m_EnterChatMode = true; pCheck->Disable(); //tempstaticwnd->Disable(); str = "<#545454><$6905:일반채팅_사용>"; } if(tempstaticwnd) { tempstaticwnd->SetCaption(str.c_str()); tempstaticwnd->UpdateCaption(); } } if( pCheck ) pCheck->SetCheck( !m_EnterChatMode ); //키맵핑관련 컨트롤들 for(int i=0 ;i 0) ((KUIControl*)undownd)->Enable(); else ((KUIControl*)undownd)->Disable(); } //outbox 처리관련 KUIWnd *outboxwnd = GetChild(KeymappingInfoList[i].outboxid); if(outboxwnd) { std::string caption = "<#ffffff>"; if( m_GameWorldKeymapping.GetHotKeyStringInfo(j).empty()) { caption += "<#626262><$6911:지정안됨!>"; } else { if(m_HighlightKeymappingNumber ==j ) caption += "<#626262>"; caption += m_GameWorldKeymapping.GetHotKeyStringInfo(j).c_str(); } outboxwnd->SetCaption( caption.c_str() ); ((KUIControl*)outboxwnd)->UpdateCaption(); } } //전체이전키관련 관련 KUIWnd *allundownd = GetChild("button_all_undo"); if(allundownd) { /*if(m_GameWorldKeymapping != m_PrevKeymapping) ((KUIControl*)allundownd)->Enable(); else ((KUIControl*)allundownd)->Disable(); */ } //사용자저장 버튼 activivate설정. /*KUIWnd *saveuserwnd = GetChild("button_user_save"); if(saveuserwnd) { if(m_GameWorldKeymapping == GetGameKeymapping() && m_EnterChatMode == GetGameOption().IsEnterChat()) ((KUIControl*)saveuserwnd)->Disable(); else ((KUIControl*)saveuserwnd)->Enable(); }*/ //적용버튼 관련.. KUIWnd *applybuttonwnd = GetChild("button_apply"); if(applybuttonwnd) { if(m_GameWorldKeymapping == GetGameKeymapping() && m_EnterChatMode == GetGameOption().IsEnterChat()) ((KUIControl*)applybuttonwnd)->Disable(); else ((KUIControl*)applybuttonwnd)->Enable(); } //사용자읽기 버튼 enable설정 /* KUIWnd *saveuserwnd = GetChild("button_user_load"); if(saveuserwnd) { if(m_GameWorldKeymapping == GetGameKeymapping() && m_EnterChatMode == GetGameOption().IsEnterChat()) ((KUIControl*)saveuserwnd)->Disable(); else ((KUIControl*)saveuserwnd)->Enable(); } */ } void SUISystemKeymappingChild::SetTip( int level, const char *szTip, int iLifeTime ) // 출력할 팁을 설정한다 { //level은 높을수록 tip출력의 우선권을 갖는다. //iLifeTiem == -1 이면 출력 시간에 제약을 받지 않는다. //szTip 이 NULL이면 해당 level의 tip을 해제한다. //Tip출력 KUIControl* tipcontrol = dynamicCast(GetChild( "static_info")); if(!tipcontrol) return; if(szTip == NULL && iLifeTime == -1 && m_TipLevel == level) { m_TipLifeTime = -1; m_TipLevel = 999; m_szTip = ""; } else if(m_TipLevel >= level) { m_TipLifeTime = iLifeTime; m_TipLevel = level; m_szTip = ""; if(szTip) { m_szTip = "<#959595> "; m_szTip += szTip; } } tipcontrol->SetCaption(m_szTip.c_str()); tipcontrol->UpdateCaption(); /*{ std::string tmpsz = "<#959595>"; if(szTip) tmpsz+=szTip; if(::strcmp(tipcontrol->GetCaption(), tmpsz.c_str())==0) return; } m_szTip = "<#959595> "; if(m_HighlightKeymappingNumber>=0) { m_szTip += "<$1122:키대기상태>"; tipcontrol->SetCaption(m_szTip.c_str()); tipcontrol->UpdateCaption(); m_TipLifeTime = -1; } else if(iLifeTime == 0) { m_TipLifeTime = -1; // -1상태는 } else if(m_TipLifeTime <= 0 || iLifeTime>0) { if(szTip ) m_szTip += szTip; m_TipLifeTime = iLifeTime; } else { return; }*/ return; } void SUISystemKeymappingChild::Process(DWORD dwTime) { if(m_PrevTipTime == 0 || m_TipLifeTime<0) { m_PrevTipTime = dwTime; } else { if(m_TipLifeTime == -1) { } else { if(m_TipLifeTime>0) m_TipLifeTime = m_TipLifeTime - (dwTime - m_PrevTipTime); if(m_TipLifeTime<=0) { SetTip(m_TipLevel, NULL, -1); } } m_PrevTipTime = dwTime; } SUIWnd::Process(dwTime); } void SUISystemKeymappingChild::InitPrevKey() { for(int i=0;iSetButtonState( KUIControlSimpleButton::KBUTTON_DISABLE ); // pButton = ( KUIControlSimpleButton* )GetChild( CStringUtil::StringFormat( "interfaceop_right_button%02d", i ).c_str() );if( pButton ) pButton->SetButtonState( KUIControlSimpleButton::KBUTTON_DISABLE ); //} SetValidRect( "interfaceop_confirm_button", KRect( 0, 0, -15, 0 ) ); SetValidRect( "interfaceop_cancle_button", KRect( 20, 0, -20, 0 ) ); SetValidRect( "interfaceop_apply_button", KRect( 20, 0, -15, 0 ) ); SetValidRect( "interfaceop_chreset_button", KRect( 0, 0, -18, 0 ) ); SetValidRect( "interfaceop_interreset_button", KRect( 20, 0, 0, 0 ) ); return SUIWnd::InitControls(kPos); } void SUISystemInterfaceChild::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ) { switch(nMessage) { case KUI_MESSAGE::KBUTTON_CLICK: { m_pGameManager->PlaySound( "ui_button_click.wav" ); //// face cut //if( ::_stricmp( lpszControlID, "interfaceop_left_button01" ) == 0 ) // SetFaceCut( m_nFaceCut-1 ); //else if( ::_stricmp( lpszControlID, "interfaceop_right_button01" ) == 0 ) // SetFaceCut( m_nFaceCut+1 ); //// minimap //if( ::_stricmp( lpszControlID, "interfaceop_left_button02" ) == 0 ) // SetMinimap( m_nMinimap-1 ); //else if( ::_stricmp( lpszControlID, "interfaceop_right_button02" ) == 0 ) // SetMinimap( m_nMinimap+1 ); //// zoom //if( ::_stricmp( lpszControlID, "interfaceop_left_button03" ) == 0 ) // SetZoom( m_nZoom-1 ); //else if( ::_stricmp( lpszControlID, "interfaceop_right_button03" ) == 0 ) // SetZoom( m_nZoom+1 ); if( ::_stricmp( lpszControlID, "interfaceop_confirm_button" ) == 0 ) { ApplyOption(); m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_SYSMENU( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM, false) ); } // 적용 if( ::_stricmp( lpszControlID, "interfaceop_apply_button" ) == 0 ) ApplyOption(); // 취소 if( ::_stricmp( lpszControlID, "interfaceop_cancle_button" ) == 0 ) UpdateOption(); // 채팅 채널 초기화 if( ::_stricmp( lpszControlID, "interfaceop_chreset_button" ) == 0 ) InitChattingChannel(); // 배치 초기화 if( ::_stricmp( lpszControlID, "interfaceop_interreset_button" ) == 0 ) InitUI(); } break; } SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam ); } void SUISystemInterfaceChild::InitChattingChannel() { } void SUISystemInterfaceChild::InitUI() { } void SUISystemInterfaceChild::UpdateOption() { //m_nFaceCut = GetGameOption().GetFaceCut(); //m_nMinimap = GetGameOption().GetMinimap(); //m_nZoom = GetGameOption().GetZoom(); //STMSG_REQ_SYSTEM_OPTION msg( STMSG_SYSTEM_OPTION::SYSOPTION_FACECUT ); //// face cut //msg.m_Type = STMSG_SYSTEM_OPTION::SYSOPTION_FACECUT; //m_pGameManager->ProcMsgAtStatic( &msg ); //if( m_nFaceCut != msg.m_nGetOption ) // m_pGameManager->ProcMsgAtStatic( &STMSG_SYSTEM_OPTION( STMSG_SYSTEM_OPTION::SYSOPTION_FACECUT, m_nFaceCut ) ); //// minimap //msg.m_Type = STMSG_SYSTEM_OPTION::SYSOPTION_MINIMAP; //m_pGameManager->ProcMsgAtStatic( &msg ); //if( m_nMinimap != msg.m_nGetOption ) // m_pGameManager->ProcMsgAtStatic( &STMSG_SYSTEM_OPTION( STMSG_SYSTEM_OPTION::SYSOPTION_MINIMAP, m_nMinimap ) ); //// zoom //msg.m_Type = STMSG_SYSTEM_OPTION::SYSOPTION_ZOOM; //m_pGameManager->ProcMsgAtStatic( &msg ); //if( m_nZoom != msg.m_nGetOption ) // m_pGameManager->ProcMsgAtStatic( &STMSG_SYSTEM_OPTION( STMSG_SYSTEM_OPTION::SYSOPTION_ZOOM, m_nZoom ) ); //RefreshValue( INTERFACE_FACECUT, m_nFaceCut ); //RefreshValue( INTERFACE_MINIMAP, m_nMinimap ); //RefreshValue( INTERFACE_ZOOM, m_nZoom ); } void SUISystemInterfaceChild::ApplyOption() { //// face cut 게임에 요청 //if( m_nFaceCut != GetGameOption().GetFaceCut() ) //{ // m_pGameManager->ProcMsgAtStatic( &STMSG_SYSTEM_OPTION( STMSG_SYSTEM_OPTION::SYSOPTION_FACECUT, m_nFaceCut ) ); // RefreshValue( INTERFACE_FACECUT, m_nFaceCut ); //} //// minimap 게임에 요청 //if( m_nMinimap != GetGameOption().GetMinimap() ) //{ // m_pGameManager->ProcMsgAtStatic( &STMSG_SYSTEM_OPTION( STMSG_SYSTEM_OPTION::SYSOPTION_MINIMAP, m_nMinimap ) ); // RefreshValue( INTERFACE_MINIMAP, m_nMinimap ); //} //// zoom 게임에 요청 //if( m_nZoom != GetGameOption().GetZoom() ) //{ // m_pGameManager->ProcMsgAtStatic( &STMSG_SYSTEM_OPTION( STMSG_SYSTEM_OPTION::SYSOPTION_ZOOM, m_nZoom ) ); // RefreshValue( INTERFACE_ZOOM, m_nZoom ); //} //GetGameOption().SetFaceCut( m_nFaceCut ); //GetGameOption().SetMinimap( m_nMinimap ); //GetGameOption().SetZoom( m_nZoom ); //GetGameOption().Apply( MODE_UI ); } void SUISystemInterfaceChild::ApplyCancel() { //이전 데이타 복구 //GetGameOption().SetOptData( m_backData ); //UpdateOption(); //재 갱신 //GetGameOption().Apply( MODE_ENVIRONMENT ); //m_pGameManager->ApplyOption( MODE_ENVIRONMENT ); } void SUISystemInterfaceChild::RefreshValue( int nMode, int nLevel ) { std::string strLevel = "크게"; std::string strArea = "멀리"; switch(nLevel) { case INTERFACE_SMALL: { strLevel = "작게"; strArea = "가까이"; } break; case INTERFACE_NORMAL: { strLevel = "보통"; strArea = "보통"; } break; case INTERFACE_LARGE: { strLevel = "크게"; strArea = "멀리"; } break; } switch(nMode) { case GRAPHIC_TEXTURE: SetChildCaption( "interfaceop_text01", CStringUtil::StringFormat( "페이스컷: %s", strLevel.c_str() ).c_str() ); break; case GRAPHIC_BACKGROUND: SetChildCaption( "interfaceop_text02", CStringUtil::StringFormat( "미니맵: %s", strLevel.c_str() ).c_str() ); break; case GRAPHIC_RESOLUTION: SetChildCaption( "interfaceop_text03", CStringUtil::StringFormat( "최대 줌 설정: %s", strArea.c_str() ).c_str() ); break; } } void SUISystemInterfaceChild::SetFaceCut( int nLevel ) { if( nLevel < INTERFACE_SMALL ) return; if( nLevel > INTERFACE_LARGE ) return; m_nFaceCut = nLevel; RefreshValue( INTERFACE_FACECUT, m_nFaceCut ); } void SUISystemInterfaceChild::SetMinimap( int nLevel ) { if( nLevel < INTERFACE_SMALL ) return; if( nLevel > INTERFACE_LARGE ) return; m_nMinimap = nLevel; RefreshValue( INTERFACE_MINIMAP, m_nMinimap ); } void SUISystemInterfaceChild::SetZoom( int nLevel ) { if( nLevel < INTERFACE_SMALL ) return; if( nLevel > INTERFACE_LARGE ) return; m_nZoom = nLevel; RefreshValue( INTERFACE_ZOOM, m_nZoom ); }*/