import os import dbg import app import localeInfo import wndMgr import systemSetting import mouseModule import networkModule import uiCandidate import constInfo import musicInfo import stringCommander #bind_me(locals().values()) def _GetHeadlessScenario(): return os.environ.get("M2_HEADLESS_SCENARIO", "").strip().lower() def _WriteHeadlessTrace(message): scenario = _GetHeadlessScenario() if scenario == "map_load": tracePath = "log/headless_map_load_trace.txt" elif scenario == "gm_teleport": tracePath = "log/headless_gm_teleport_trace.txt" else: return try: open(tracePath, "a").write("%s\n" % message) except: pass def _GetHeadlessInt(name, default): try: return int(os.environ.get(name, str(default))) except (TypeError, ValueError): return default def _SetInitialPhase(mainStream): scenario = _GetHeadlessScenario() if scenario == "map_load": mapName = os.environ.get("M2_HEADLESS_MAP_NAME", "").strip() globalX = _GetHeadlessInt("M2_HEADLESS_GLOBAL_X", 460800) globalY = _GetHeadlessInt("M2_HEADLESS_GLOBAL_Y", 960000) _WriteHeadlessTrace("Scenario begin map=%s global_x=%d global_y=%d" % (mapName, globalX, globalY)) mainStream.SetTestGamePhase(globalX, globalY) return if scenario == "gm_teleport": _WriteHeadlessTrace("Scenario begin gm_teleport") mainStream.SetLoginPhase() return mainStream.SetLoginPhase() def RunApp(): musicInfo.LoadLastPlayFieldMusic() app.SetHairColorEnable(constInfo.HAIR_COLOR_ENABLE) app.SetArmorSpecularEnable(constInfo.ARMOR_SPECULAR_ENABLE) app.SetWeaponSpecularEnable(constInfo.WEAPON_SPECULAR_ENABLE) app.SetMouseHandler(mouseModule.mouseController) wndMgr.SetMouseHandler(mouseModule.mouseController) wndMgr.SetScreenSize(systemSetting.GetWidth(), systemSetting.GetHeight()) try: app.Create(localeInfo.APP_TITLE, systemSetting.GetWidth(), systemSetting.GetHeight(), 1) except RuntimeError as msg: msg = str(msg) if "CREATE_DEVICE" == msg: dbg.LogBox("Sorry, Your system does not support 3D graphics,\r\nplease check your hardware and system configeration\r\nthen try again.") else: dbg.LogBox("Metin2.%s" % msg) return app.SetCamera(1500.0, 30.0, 0.0, 180.0) #Gets and sets the floating-point control word #app.SetControlFP() if not mouseModule.mouseController.Create(): return mainStream = networkModule.MainStream() mainStream.Create() #mainStream.SetLoadingPhase() _SetInitialPhase(mainStream) #mainStream.SetSelectCharacterPhase() #mainStream.SetCreateCharacterPhase() #mainStream.SetSelectEmpirePhase() #mainStream.SetGamePhase() app.Loop() mainStream.Destroy() RunApp()