gameStateLogin.lua 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. local gameStateLogin = class('gameStateLogin')
  2. function gameStateLogin:ctor()
  3. end
  4. function gameStateLogin:getStateType()
  5. return global.MMO.GAME_STATE_LOGIN
  6. end
  7. function gameStateLogin:onEnter()
  8. global.Facade:sendNotification(global.NoticeTable.Layer_Notice_Open)
  9. global.Facade:sendNotification(global.NoticeTable.Layer_Login_Version_Open)
  10. if self._scheduleId then
  11. UnSchedule(self._scheduleId)
  12. self._scheduleId = nil
  13. end
  14. local function updater( delta )
  15. global.gameEnvironment:GetNetClient():Tick()
  16. global.FrameAnimManager:Tick( delta )
  17. global.ResDownloader:Tick( delta )
  18. end
  19. self._scheduleId = Schedule( updater, 0.05 )
  20. -- 登录
  21. local needInputAccount = true
  22. local currentModule = global.L_ModuleManager:GetCurrentModule()
  23. local moduleGameEnv = currentModule:GetGameEnv()
  24. -- 手机端
  25. local loginData = moduleGameEnv:GetLoginData()
  26. -- PC联运
  27. local PCPlatform = global.L_GameEnvManager:GetEnvDataByKey("PCPlatform")
  28. local user_id = global.L_GameEnvManager:GetEnvDataByKey("user_id")
  29. local token = global.L_GameEnvManager:GetEnvDataByKey("token")
  30. if user_id and string.len(string.trim(user_id)) == 0 then
  31. user_id = nil
  32. end
  33. if token and string.len(string.trim(token)) == 0 then
  34. token = nil
  35. end
  36. -- 盒子
  37. local envProxy = global.Facade:retrieveProxy(global.ProxyTable.GameEnvironment)
  38. local bokuid = envProxy:getBoxuid()
  39. local boxtoken = envProxy:getBoxtoken()
  40. -- PCSDK
  41. local isPcSdk = global.L_GameEnvManager:GetEnvDataByKey("isPcSdk")
  42. if loginData and loginData.username and loginData.password then
  43. -- 针对手机端 账号密码
  44. local username = loginData.username
  45. local password = loginData.password
  46. local AuthProxy = global.Facade:retrieveProxy(global.ProxyTable.AuthProxy)
  47. local authData = {}
  48. authData.type = 1
  49. authData.username = username
  50. authData.password = password
  51. AuthProxy:RequestLoginAdmin(authData)
  52. needInputAccount = false
  53. elseif tonumber(PCPlatform) == 1 and user_id and token then
  54. -- 针对PC联运 账号密码
  55. local password = token
  56. local uid = user_id
  57. local AuthProxy = global.Facade:retrieveProxy(global.ProxyTable.AuthProxy)
  58. local authData = {}
  59. authData.type = 1
  60. authData.username = uid
  61. authData.password = password
  62. AuthProxy:RequestLoginAdmin(authData)
  63. needInputAccount = false
  64. elseif tonumber(PCPlatform) == 2 and user_id and token then
  65. -- 996PC独立包
  66. local AuthProxy = global.Facade:retrieveProxy(global.ProxyTable.AuthProxy)
  67. AuthProxy:RequestCheckToken(user_id, token)
  68. needInputAccount = false
  69. elseif bokuid and boxtoken then
  70. -- 盒子快捷登录
  71. local AuthProxy = global.Facade:retrieveProxy(global.ProxyTable.AuthProxy)
  72. AuthProxy:RequestCheckToken(bokuid, boxtoken)
  73. needInputAccount = false
  74. elseif isPcSdk then
  75. -- 美杜莎pcsdk接入
  76. local data = {}
  77. local cjson= require("cjson")
  78. local jsonString = (data and cjson.encode(data))
  79. local methodName = "GN_accountLogin"
  80. global.NativeBridgeCtl:sendMessage2Native(methodName, jsonString)
  81. needInputAccount = false
  82. end
  83. -- 动画
  84. local ModelConfigProxy = global.Facade:retrieveProxy(global.ProxyTable.ModelConfigProxy)
  85. ModelConfigProxy:LoadConfig()
  86. ModelConfigProxy:LoadSplitConfigs()
  87. global.FrameAnimManager:Init()
  88. -- audio
  89. local AudioProxy = global.Facade:retrieveProxy(global.ProxyTable.Audio)
  90. AudioProxy:LoadConfig()
  91. -- env写入的实名
  92. if global.isMobile then
  93. if global.L_NativeBridgeManager.SetCertification and global.L_NativeBridgeManager.SetAdult then
  94. local is_adult = global.L_GameEnvManager:GetEnvDataByKey("is_adult")
  95. local is_realname = global.L_GameEnvManager:GetEnvDataByKey("is_realname")
  96. if is_adult and is_realname then
  97. global.L_NativeBridgeManager:SetAdult(tonumber(is_adult) == 1)
  98. global.L_NativeBridgeManager:SetCertification(tonumber(is_realname) == 1)
  99. end
  100. end
  101. end
  102. -- 账号界面
  103. if needInputAccount then
  104. -- 进入账号界面
  105. local AuthProxy = global.Facade:retrieveProxy(global.ProxyTable.AuthProxy)
  106. AuthProxy:ReadLocalData()
  107. global.Facade:sendNotification(global.NoticeTable.Layer_Login_Account_Open)
  108. else
  109. global.Facade:sendNotification(global.NoticeTable.Layer_Login_Server_Open)
  110. end
  111. -- 后台静默下载功能
  112. global.ResDownloader:initGMResList()
  113. global.ResDownloader:initBackgroundRes()
  114. -- enter login
  115. global.Facade:sendNotification(global.NoticeTable.EnterLogin)
  116. -- user input
  117. global.userInputController:InitOnEnterLogin()
  118. -- reload config
  119. requireGameConfig("cfg_att_score")
  120. requireGameConfig("cfg_auction_type")
  121. requireGameConfig("cfg_damage_number")
  122. requireGameConfig("cfg_KeyFunc")
  123. requireGameConfig("cfg_magicinfo")
  124. requireGameConfig("cfg_mapdesc")
  125. requireGameConfig("cfg_menulayer")
  126. requireGameConfig("cfg_buff")
  127. requireGameConfig("cfg_pick_set")
  128. requireGameConfig("cfg_setup")
  129. requireGameConfig("cfg_skill_present")
  130. -- 环境配置
  131. local cjson = require("cjson")
  132. local function loadDataConfig(filename)
  133. local filePath = "data_config/" .. filename
  134. if global.FileUtilCtl:isFileExist(filePath) then
  135. local jsonStr = global.FileUtilCtl:getDataFromFileEx(filePath)
  136. if not jsonStr or jsonStr == "" or jsonStr == filePath then
  137. return false
  138. end
  139. local jsonData = {}
  140. xpcall(function()
  141. jsonData = cjson.decode(jsonStr)
  142. end,
  143. function()
  144. if global.isDebugMode or global.isGMMode then
  145. ShowSystemTips(string.format("json文件格式错误: %s", filename))
  146. end
  147. end
  148. )
  149. if jsonData then
  150. for k, v in pairs(jsonData) do
  151. global.ConstantConfig[k] = v
  152. end
  153. end
  154. end
  155. end
  156. loadDataConfig("gameopt_996.txt")
  157. loadDataConfig("gameopt.txt")
  158. -- gamedata配置
  159. local dconfig = requireGameConfig("cfg_game_data")
  160. for k, v in pairs(dconfig) do
  161. global.ConstantConfig[v.k] = v.value
  162. end
  163. if global.ConstantConfig.DEFAULT_FONT_SIZE == 0 then
  164. global.ConstantConfig.DEFAULT_FONT_SIZE = global.isWinPlayMode and 12 or 16
  165. end
  166. --pc 字体设置
  167. if global.ConstantConfig.PCFontConfig then
  168. if global.isWinPlayMode then
  169. local config = string.split(global.ConstantConfig.PCFontConfig, "#") --字体#大小
  170. global.ConstantConfig.PCFontConfig = {tonumber(config[1]), tonumber(config[2])}
  171. if global.ConstantConfig.PCFontConfig[2] then
  172. global.ConstantConfig.DEFAULT_FONT_SIZE = global.ConstantConfig.PCFontConfig[2]
  173. global.ConstantConfig.sceneFontSize_pc = global.ConstantConfig.PCFontConfig[2]
  174. end
  175. else
  176. global.ConstantConfig.PCFontConfig = {}
  177. end
  178. else
  179. global.ConstantConfig.PCFontConfig = {}
  180. end
  181. if global.isWinPlayMode and SL:GetMetaValue("GAME_DATA", "HudNotUseBmpFont") ~= 1 then
  182. -- bmp场景字固定12
  183. global.ConstantConfig.sceneFontSize_pc = 12
  184. end
  185. -- 聊天/tips 字体
  186. if global.isWinPlayMode and global.FileUtilCtl:isFileExist(global.MMO.PATH_FONT4)
  187. and global.LuaBridgeCtl:GetModulesSwitch(global.MMO.Modules_Index_Cpp_Version) >= global.MMO.CPP_VERSION_LABEL_TTF then
  188. global.ChatAndTips_Use_Font = global.MMO.PATH_FONT4
  189. end
  190. -- 武器外观层级配置
  191. if global.ConstantConfig.WeaponLooksOrderUp and string.len(global.ConstantConfig.WeaponLooksOrderUp) > 0 then
  192. local data = string.split(global.ConstantConfig.WeaponLooksOrderUp, "|")
  193. local list = {}
  194. for _, v in ipairs(data) do
  195. if string.len(v) > 0 then
  196. local param = string.split(v, "#")
  197. if tonumber(param[1]) and tonumber(param[2]) then
  198. table.insert(list, {dir = tonumber(param[1]), act = tonumber(param[2])})
  199. end
  200. end
  201. end
  202. global.ConstantConfig.WeaponLooksOrderUp = list
  203. else
  204. global.ConstantConfig.WeaponLooksOrderUp = {}
  205. end
  206. -- 描边大小
  207. if global.Director.setDefaultOutlineSize then
  208. local outlineSize = tonumber(global.ConstantConfig.outlineSize) or 0
  209. global.Director:setDefaultOutlineSize(outlineSize)
  210. end
  211. -- 多职业配置
  212. local list = {}
  213. for i = 5, 15 do
  214. if global.ConstantConfig["MultipleJobSet" .. i] then
  215. local param = string.split(global.ConstantConfig["MultipleJobSet" .. i], "|")
  216. local function checkValue(str)
  217. if string.len(str or "") > 0 then
  218. return str
  219. end
  220. return nil
  221. end
  222. list[i] = {
  223. isOpen = tonumber(param[1]) == 1, -- 开关
  224. name = checkValue(param[2]) or string.format("未命名%s", i), -- 职业名称
  225. hudStr = checkValue(param[3]) or "X", -- HUD
  226. createLightMaleID = tonumber(param[4]), -- 创建常亮动画- 男
  227. createLightFemaleID = tonumber(param[5]), -- 创建常亮动画- 女
  228. animGToLMaleID = tonumber(param[6]), -- 灰到亮动画 - 男
  229. animGToLFemaleID = tonumber(param[7]), -- 灰到亮动画 - 女
  230. clothFeatureShowID = tonumber(param[8]), -- 裸模外观ID
  231. UIModelPicMaleID = checkValue(param[9]), -- 裸模内观图片ID - 男
  232. UIModelPicFeMaleID = checkValue(param[10]), -- 裸模内观图片ID - 女
  233. }
  234. end
  235. end
  236. global.ConstantConfig.MultipleJobSetMap = list
  237. -- 网络玩家网络延迟误差 代理自行配置
  238. if global.ConstantConfig.NetPlayerDelayTime then
  239. global.ConstantConfig.NetPlayerDelayTime = math.min(math.max(0, global.ConstantConfig.NetPlayerDelayTime), 40)
  240. else
  241. global.ConstantConfig.NetPlayerDelayTime = global.MMO.NETWORK_DELAY * 1000
  242. end
  243. -- 血条/蓝条/内功条偏移设置
  244. if global.ConstantConfig.HUDOffsetY then
  245. local hudOffsetY = tonumber(global.ConstantConfig.HUDOffsetY) or 0
  246. global.MMO.HUD_OFFSET_1.y = global.MMO.HUD_OFFSET_1.y + hudOffsetY
  247. global.MMO.HUD_OFFSET_BG_1.y = global.MMO.HUD_OFFSET_BG_1.y + hudOffsetY
  248. global.MMO.HUD_OFFSET_2.y = global.MMO.HUD_OFFSET_2.y + hudOffsetY
  249. global.MMO.HUD_OFFSET_BG_2.y = global.MMO.HUD_OFFSET_BG_2.y + hudOffsetY
  250. global.MMO.HUD_OFFSET_3.y = global.MMO.HUD_OFFSET_3.y + hudOffsetY
  251. global.MMO.HUD_OFFSET_BG_3.y = global.MMO.HUD_OFFSET_BG_3.y + hudOffsetY
  252. end
  253. -- HUDLabel角色名字、角色血量、怪物名、怪物血量、NPC名字 Y轴偏移设置
  254. local setOffsetYTab = {}
  255. if global.ConstantConfig.HudLabelShowOffsetY then
  256. local data = global.ConstantConfig.HudLabelShowOffsetY
  257. if string.len(data) > 0 then
  258. local dataList = string.split(data, "#")
  259. setOffsetYTab[1] = tonumber(dataList[1]) or 0
  260. setOffsetYTab[2] = tonumber(dataList[2]) or 0
  261. setOffsetYTab[3] = tonumber(dataList[3]) or 0
  262. setOffsetYTab[4] = tonumber(dataList[4]) or 0
  263. setOffsetYTab[5] = tonumber(dataList[5]) or 0
  264. end
  265. end
  266. global.ConstantConfig.HudLabelShowOffsetYMap = setOffsetYTab
  267. -- split
  268. local ModelConfigProxy = global.Facade:retrieveProxy(global.ProxyTable.ModelConfigProxy)
  269. ModelConfigProxy:LoadSplitConfigs()
  270. -- anim mrmory warning
  271. if global.L_GameEnvManager:GetEnvDataByKey("isAliCloudPhone") then
  272. local cloudPhoneAnimMemorySize = global.L_GameEnvManager:GetEnvDataByKey("cloudPhoneAnimMemorySize") or 100
  273. global.FrameAnimManager:setMemWarningInMB(cloudPhoneAnimMemorySize)
  274. global.FrameAnimManager._expiredInterval = 5
  275. global.FrameAnimManager._loadingLimit = 1
  276. elseif global.L_GameEnvManager:GetEnvDataByKey("isCloudLogin") then
  277. local cloudPhoneAnimMemorySize = global.L_GameEnvManager:GetEnvDataByKey("cloudPhoneAnimMemorySize") or 400
  278. global.FrameAnimManager:setMemWarningInMB(cloudPhoneAnimMemorySize)
  279. global.FrameAnimManager._expiredInterval = 5
  280. global.FrameAnimManager._loadingLimit = 1
  281. else
  282. local memSize = global.isWindows and 800 or (tonumber(global.ConstantConfig.animMemorySize) or 600)
  283. global.FrameAnimManager:setMemWarningInMB(memSize)
  284. end
  285. -- 抗锯齿在PC端是否开启
  286. if global.isWinPlayMode then
  287. global.Director:setFontAtlasAntialiasEnabled(global.ConstantConfig.FontAtlasAntialiasEnabled == 1)
  288. else
  289. global.Director:setFontAtlasAntialiasEnabled(true)
  290. end
  291. -- 采样方式
  292. global.Director:setTexture2DAntialiasEnabled(global.ConstantConfig.Texture2DAntialiasEnabled == 1 and true or (global.isWinPlayMode == false))
  293. -- GUI
  294. require("GUILayout/GUIInitPre")
  295. end
  296. function gameStateLogin:onEnd()--重启
  297. global.Facade:sendNotification( global.NoticeTable.ReleaseMemory)
  298. end
  299. function gameStateLogin:onExit()
  300. if self._scheduleId ~= -1 then
  301. UnSchedule(self._scheduleId)
  302. self._scheduleId = -1
  303. end
  304. global.Facade:sendNotification(global.NoticeTable.Layer_Notice_Close)
  305. global.Facade:sendNotification(global.NoticeTable.Layer_Login_Version_Close)
  306. global.Facade:sendNotification(global.NoticeTable.Layer_Login_Server_Close)
  307. return 1
  308. end
  309. return gameStateLogin