源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

490 lines
17 KiB

  1. CheatModel = CheatModel or BaseClass(BaseVo)
  2. CheatModel.UPDATE_CHEAT_INPUT_VIEW = "UPDATE_CHEAT_INPUT_VIEW" --更新秘籍界面数据
  3. CheatModel.SEND_CHEAT_TO_SERVER = "SEND_CHEAT_TO_SERVER" --发送秘籍到服务端
  4. CheatModel.CHEAT_PRINT_DEBUG_INFO = "CHEAT_PRINT_DEBUG_INFO" --打印调试信息
  5. CheatModel.OPEN_CHEAT_SHOW_VIEW = "OPEN_CHEAT_SHOW_VIEW" --打开版号隐藏的界面
  6. CheatModel.OPEN_CAMERA_EDIt_VIEW = "OPEN_CAMERA_EDIt_VIEW" --打开摄像机参数编辑界面
  7. CheatModel.OPEN_UI_CAMERA_EDIT_VIEW = "OPEN_UI_CAMERA_EDIT_VIEW" --打开模型摄像机参数编辑界面
  8. CheatModel.OPEN_BLOOM_EDIt_VIEW = "OPEN_BLOOM_EDIt_VIEW" --打开泛光参数编辑界面
  9. CheatModel.OPEN_CLIENT_PROPERTY_VIEW = "OPEN_CLIENT_PROPERTY_VIEW" --打开属性预览界面
  10. CheatModel.OPEN_CLIENT_ACCELERATION_VIEW = "OPEN_CLIENT_ACCELERATION_VIEW"
  11. CheatModel.Quick_Run_Code = "CheatModel.Quick_Run_Code"--快速执行Lua代码
  12. CheatModel.CLICK_BTN_OK = "CheatModel.CLICK_BTN_OK" --点击确认秘籍
  13. CheatModel.OPEN_FXAA_TEST_VIEW = "CheatModel.OPEN_FXAA_TEST_VIEW" -- 打开FXAA调试界面
  14. CheatModel.OPEN_FREE_CAMERA_VIEW = "CheatModel.OPEN_FREE_CAMERA_VIEW" -- 打开发行全自由摄像机界面
  15. CheatModel.OPEN_GREEN_SCREEN_CLICK_VIEW = "CheatModel.OPEN_GREEN_SCREEN_CLICK_VIEW" -- 打开发行绿屏切换界面
  16. CheatModel.OPEN_SELECTROLEVIEW_SHOW_CLICK_VIEW = "CheatModel.OPEN_SELECTROLEVIEW_SHOW_CLICK_VIEW" -- 打开发行切换显示选角界面
  17. function CheatModel:__init()
  18. CheatModel.Instance = self
  19. self.cheats_data = nil
  20. self.show_green_screen = false
  21. self.func_list = {
  22. ["@test"] = CheatModel.HandleTest,
  23. ["@perform"] = CheatModel.HandlePerform,
  24. ["@hideui"] = CheatModel.HandleHideUI,
  25. }
  26. self.module_check = "perform_"
  27. self.module_data = {}
  28. local func = function( module, data )
  29. self.module_data[module] = data
  30. end
  31. GlobalEventSystem:Bind( EventName.SENT_MODULE_DEBUG_DATA,func)
  32. end
  33. function CheatModel:getInstance()
  34. if CheatModel.Instance == nil then
  35. CheatModel.New();
  36. end
  37. return CheatModel.Instance
  38. end
  39. --保存服务端下发的秘籍
  40. function CheatModel:SetCheatsData(data)
  41. self.cheats_data = data
  42. self:Fire(CheatModel.UPDATE_CHEAT_INPUT_VIEW)
  43. end
  44. function CheatModel:CheckCommand(command)
  45. -- if ClientConfig.is_out_server then
  46. -- return true
  47. -- end
  48. if not command then
  49. return true
  50. end
  51. if string.len(command) < 2 then
  52. return true
  53. end
  54. local command_mode = string.find(command, "@")
  55. if command_mode ~= 1 then
  56. return true
  57. end
  58. local handle_func = self.func_list[command]
  59. if handle_func then
  60. handle_func(self, command)
  61. return false
  62. end
  63. if string.find(command,self.module_check) then
  64. self:ModuleCheck(command)
  65. return false
  66. end
  67. if string.find(command, "@deviceid") then
  68. if SystemInfo then
  69. local temp_model = SystemInfo.deviceModel or "0"
  70. local temp_name = SystemInfo.deviceName or "1"
  71. local temp_uid = SystemInfo.deviceUniqueIdentifier or "2"
  72. local temp_gid = SystemInfo.graphicsDeviceID or "3"
  73. local temp_gvid = SystemInfo.graphicsDeviceVendorID or "4"
  74. local str = "temp_model = " .. temp_model .. " temp_name = " .. temp_name .. " temp_uid = " .. temp_uid .. " temp_gid = " .. temp_gid .. " temp_gvid = " .. temp_gvid
  75. Message.show("deviceid = " .. str)
  76. end
  77. return false
  78. end
  79. if string.find(command,"@RunCode:") then
  80. --执行Lua代码的后门
  81. self:QuickRunCode(command)
  82. return false
  83. end
  84. if string.find(command, "@LuaProfilerStart") then
  85. Message.show("LuaProfilerStart")
  86. LuaProfiler.start()
  87. return false
  88. end
  89. if string.find(command, "@LuaProfilerStop") then
  90. LuaProfiler.stop()
  91. local str = LuaProfiler._CUSTOM_REPORTS
  92. GameError.Instance:SendErrorMsg(str)
  93. Message.show("LuaProfilerStop")
  94. return false
  95. end
  96. if string.find(command, "@OpenCheatState") then
  97. GlobalOpenCheatState = true
  98. return false
  99. end
  100. if string.find(command, "@baseres") then
  101. self:LoadBaseSceneRes()
  102. return false
  103. end
  104. return true
  105. end
  106. function CheatModel.HandleTest()
  107. GlobalEventSystem:Fire(EventName.OPEN_CHEAT_INPUT_VIEW) --秘籍
  108. end
  109. function CheatModel.HandlePerform()
  110. GlobalEventSystem:Fire(EventName.OPEN_LUA_STATE_VIEW) --lua状态
  111. end
  112. function CheatModel.HandleHideUI()
  113. local hide_list = {"Top","Activity","UI","Main","NameBoard","Dynamic_NameBoard"} --隐藏界面
  114. local obj_trans = GameObject.Find("root").transform:Find("Canvas").transform
  115. for index,layer in pairs(hide_list) do
  116. obj_trans:Find(layer).gameObject:SetActive(false)
  117. end
  118. end
  119. function CheatModel:QuickRunCode( str )
  120. if not str then print("CheatModel:QuickRunCode传值为空") return end
  121. CheatModel:getInstance():Fire(CheatModel.Quick_Run_Code,str)
  122. end
  123. function CheatModel:ModuleCheck(command)
  124. local temp = Split(command,"_")
  125. if #temp == 2 then
  126. GlobalEventSystem:Fire(EventName.CHECK_MODULE_DEBUG_DATA)
  127. local module_name = temp[2]
  128. if temp[2] ~= "" then
  129. local sent = function()
  130. local sent_data = ""
  131. for cur_module,data in pairs(self.module_data) do
  132. if module_name == "all" then
  133. sent_data = sent_data .. cur_module .. "\n" .. TableToStr(data) .. "\n"
  134. elseif cur_module == module_name then
  135. sent_data = sent_data .. cur_module .. "\n" .. TableToStr(data)
  136. break
  137. end
  138. end
  139. self.module_data = {}
  140. if Application.platform ~= RuntimePlatform.Android and Application.platform ~= RuntimePlatform.IPhonePlayer then
  141. Debugger.LogWarning("模块调试信息:" .. "\n" .. sent_data)
  142. else
  143. GameError.Instance:SendErrorMsg(sent_data,true)
  144. end
  145. end
  146. setTimeout(sent,2)
  147. end
  148. elseif #temp == 3 then
  149. local module_name = temp[2]
  150. local func_name = temp[3]
  151. if module_name ~= "" and func_name ~= "" then
  152. GlobalEventSystem:Fire(EventName.DO_MODULE_DEBUG_FUNC,module_name,func_name)
  153. end
  154. end
  155. end
  156. function CheatModel:AutoUpgradeFight()
  157. local wear_equip_list = GoodsModel:getInstance().wear_equip_list
  158. local equip = {}
  159. for _, v in pairs(wear_equip_list) do
  160. equip[v.equip_type] = v
  161. end
  162. local add_list = {}
  163. local best_equip = {}
  164. local career, level, turn = RoleManager.Instance.mainRoleInfo.career, RoleManager.Instance.mainRoleInfo.level, RoleManager.Instance.mainRoleInfo.turn
  165. StartCoroutine(function()
  166. local fun,tbl
  167. local fight1, fight2
  168. for k, v in pairs(Config.Goods) do
  169. fun = loadstring(v)
  170. tbl = fun()
  171. if tbl.type == GoodsModel.TYPE.EQUIP then
  172. if (tbl.career_id == 0 or tbl.career_id == career) and tbl.level <= level and (tbl.turn == 0 or tbl.turn == turn) then
  173. if best_equip[tbl.equip_type] then
  174. fight1 = GetFighting(ErlangParser:GetInstance():Parse(tbl.base_attrlist))
  175. fight2 = GetFighting(ErlangParser:GetInstance():Parse(best_equip[tbl.equip_type].base_attrlist))
  176. best_equip[tbl.equip_type] = (best_equip[tbl.equip_type].level < tbl.level or fight2 < fight1) and tbl or best_equip[tbl.equip_type]
  177. else
  178. best_equip[tbl.equip_type] = tbl
  179. end
  180. end
  181. end
  182. --WaitForSeconds(0.25)
  183. end
  184. for k, v in pairs(best_equip) do
  185. if not equip[k] or equip[k].type_id ~= v.type_id then
  186. add_list[#add_list + 1] = v.type_id
  187. end
  188. end
  189. local cheats
  190. for k, v in pairs(add_list) do
  191. cheats = "goods_"..v.."_1"
  192. CheatModel:getInstance():Fire(CheatModel.SEND_CHEAT_TO_SERVER, cheats)
  193. WaitForSeconds(0.5)
  194. end
  195. end)
  196. end
  197. function CheatModel:OnCreateMonList( )
  198. local mon_list = {
  199. 13010001,
  200. 13010002,
  201. 13010003,
  202. 13020001,
  203. 13020002,
  204. 13020003,
  205. 13030001,
  206. 13030002,
  207. 13030003,
  208. 10040001,
  209. 10040002,
  210. }
  211. local index = 1
  212. local function on_step( )
  213. local mon_id = mon_list[index]
  214. if mon_id then
  215. local cmd = string.format("mon_%d_1", mon_id)
  216. self:Fire(CheatModel.SEND_CHEAT_TO_SERVER, cmd)
  217. else
  218. if self.create_mon_timer then
  219. GlobalTimerQuest:CancelQuest(self.create_mon_timer)
  220. self.create_mon_timer = nil
  221. end
  222. end
  223. index = index + 1
  224. end
  225. if self.create_mon_timer then
  226. GlobalTimerQuest:CancelQuest(self.create_mon_timer)
  227. self.create_mon_timer = nil
  228. end
  229. self.create_mon_timer = GlobalTimerQuest:AddPeriodQuest(on_step, 1, -1)
  230. end
  231. -- 发行绿屏统一接口 model_con:挂载模型后的UIModelCommon类 camera_type:1 主摄像机 2 UI摄像机 3 UIModel摄像机
  232. -- mul_model_con : 发送的model_con是否是多个model_con组成的列表
  233. -- green_click_size : 绿幕切换热区大小
  234. function CheatModel:SetupGreenScreenEffect(show, model_con, camera_type, mul_model_con, green_click_size)
  235. -- if show and not model_con then return end
  236. if not LoginModel.ENABLE_GREEN_SCREEN then return end -- 不需要绿屏的话直接return
  237. self.temp_model_con = model_con or self.temp_model_con
  238. self.temp_camera_type = camera_type or self.temp_camera_type
  239. self.temp_mul_model_con = mul_model_con or self.temp_mul_model_con
  240. if not self.temp_model_con or not self.temp_camera_type then return end
  241. self.show_green_screen = show
  242. if not self.mc_camera then -- 获取主摄像机
  243. self.mc_camera = MainCamera.Instance.camera
  244. if camera_type == 1 then
  245. self.target_postEffect = MainCamera.Instance.camera_gameObject:GetComponent(typeof(PostEffect))
  246. self.default_cullingMask = self.mc_camera.cullingMask
  247. self.default_clearFlag = self.mc_camera.clearFlags
  248. self.default_color = self.mc_camera.backgroundColor
  249. end
  250. end
  251. if not self.ui_camera then -- 获取UI摄像机
  252. self.ui_camera = MainCamera.Instance.uiCamera
  253. if camera_type == 2 then
  254. self.target_postEffect = MainCamera.Instance.uiCamera_gameObject:GetComponent(typeof(PostEffect))
  255. self.default_cullingMask = self.ui_camera.cullingMask
  256. self.default_clearFlag = self.ui_camera.clearFlags
  257. self.default_color = self.ui_camera.backgroundColor
  258. end
  259. end
  260. if not self.ui_back_camera then -- 获取UIBack摄像机
  261. self.ui_back_camera = GameObject.Find("root").transform:Find("UIBackRoleCamera"):GetComponent("Camera")
  262. if camera_type == 3 then
  263. self.target_postEffect = self.ui_back_camera.gameObject:GetComponent(typeof(PostEffect))
  264. self.default_cullingMask = self.ui_back_camera.cullingMask
  265. self.default_clearFlag = self.ui_back_camera.clearFlags
  266. self.default_color = self.ui_back_camera.backgroundColor
  267. end
  268. end
  269. self.target_postEffect_enabled = self.target_postEffect and self.target_postEffect.enabled or false
  270. -- 设置需要被隐藏的摄像机
  271. if camera_type == 1 then
  272. self.target_camera = self.mc_camera
  273. self.target_hide_camera1 = self.ui_camera
  274. self.target_hide_camera2 = self.ui_back_camera
  275. elseif camera_type == 2 then
  276. self.target_camera = self.ui_camera
  277. self.target_hide_camera1 = self.mc_camera
  278. self.target_hide_camera2 = self.ui_back_camera
  279. elseif camera_type == 3 then
  280. self.target_camera = self.ui_back_camera
  281. self.target_hide_camera1 = self.mc_camera
  282. self.target_hide_camera2 = self.ui_camera
  283. end
  284. -- 修改目标摄像机的渲染层级,修改清除模式,并控制UI摄像机的渲染
  285. if self.target_camera then
  286. if self.show_green_screen then
  287. self.target_camera.cullingMask = bit.bor(0, bit.lshift(1, UIPartical.RenderingOther_List.Role))
  288. self.target_camera.clearFlags = UnityEngine.CameraClearFlags.SolidColor
  289. self.target_camera.backgroundColor = Color(0, 1, 0, 1)
  290. if self.target_postEffect then
  291. self.target_postEffect.enabled = false
  292. end
  293. self.target_hide_camera1.enabled = false
  294. self.target_hide_camera2.enabled = false
  295. else
  296. self.target_camera.cullingMask = self.default_cullingMask
  297. self.target_camera.clearFlags = self.default_clearFlag
  298. self.target_camera.backgroundColor = self.default_color
  299. if self.target_postEffect then
  300. self.target_postEffect.enabled = self.target_postEffect_enabled
  301. end
  302. self.target_hide_camera1.enabled = true
  303. self.target_hide_camera2.enabled = true
  304. end
  305. end
  306. -- 根据是否绿幕修改主角模型的渲染层级
  307. if self.temp_model_con then
  308. if not self.default_layer then -- 在修改前,按照InstanceID存储节点的layer层级
  309. self.default_layer = {}
  310. end
  311. local layer = self.show_green_screen and UIPartical.RenderingOther_List.Role or nil
  312. local function set_role_layer(obj)
  313. if IsNull(obj) then
  314. return
  315. end
  316. for i = 0, obj.childCount - 1 do
  317. local instanceID = obj:GetChild(i):GetInstanceID()
  318. self.default_layer[instanceID] = self.default_layer[instanceID] or obj:GetChild(i).gameObject.layer
  319. obj:GetChild(i).gameObject.layer = layer or self.default_layer[instanceID]
  320. set_role_layer(obj:GetChild(i), layer)
  321. end
  322. end
  323. local function set_layer_callback(target_model_con)
  324. if target_model_con.type == SceneBaseType.FWeapon then -- 武器要特殊处理
  325. target_model_con.weapon_hand_list = target_model_con.weapon_hand_list or {}
  326. for k, v in pairs(target_model_con.weapon_hand_list) do
  327. set_role_layer(v.transform)
  328. end
  329. else
  330. if target_model_con.role then
  331. set_role_layer(target_model_con.role.transform)
  332. end
  333. end
  334. end
  335. if mul_model_con then -- 如果temp_model_con发的是多个模型列表
  336. for k, v in pairs(self.temp_model_con) do
  337. set_layer_callback(v)
  338. end
  339. else
  340. set_layer_callback(self.temp_model_con)
  341. end
  342. -- if self.temp_model_con.type == SceneBaseType.FWeapon then -- 武器要特殊处理
  343. -- self.temp_model_con.weapon_hand_list = self.temp_model_con.weapon_hand_list or {}
  344. -- for k, v in pairs(self.temp_model_con.weapon_hand_list) do
  345. -- set_role_layer(v.transform)
  346. -- end
  347. -- else
  348. -- if self.temp_model_con.role then
  349. -- set_role_layer(self.temp_model_con.role.transform)
  350. -- end
  351. -- end
  352. end
  353. -- 打开切换绿屏的窗口
  354. self:Fire(CheatModel.OPEN_GREEN_SCREEN_CLICK_VIEW, true, green_click_size)
  355. end
  356. -- 秘籍弹出的窗口调用,用来直接开关已有的绿屏
  357. function CheatModel:EnabledGreenScreenEffect(show)
  358. if self.temp_model_con and self.temp_camera_type then
  359. self:SetupGreenScreenEffect(show, self.temp_model_con, self.temp_camera_type, self.temp_mul_model_con)
  360. end
  361. end
  362. -- 退出界面时使用,关闭绿屏,清除缓存的摄像机
  363. function CheatModel:DisabledGreenScreenEffect(hide_tips)
  364. if self.show_green_screen then
  365. self:SetupGreenScreenEffect(false)
  366. end
  367. self.show_green_screen = false
  368. local show_str = self.temp_model_con and true or false
  369. self.temp_model_con = nil
  370. self.temp_camera_type = nil
  371. self.temp_mul_model_con = nil
  372. self.mc_camera = nil
  373. self.ui_camera = nil
  374. self.ui_back_camera = nil
  375. self.target_camera = nil
  376. self.target_hide_camera1 = nil
  377. self.target_hide_camera2 = nil
  378. self.default_layer = nil
  379. self:Fire(CheatModel.OPEN_GREEN_SCREEN_CLICK_VIEW, false)
  380. LoginModel.ENABLE_GREEN_SCREEN = false
  381. if show_str and not hide_tips then
  382. Message.show("退出绿屏模式,需要时请重新启用")
  383. end
  384. end
  385. function CheatModel:LoadBaseSceneRes( )
  386. self.scene_index = self.scene_index or 1
  387. self.scene_list = {
  388. --大世界
  389. "1001", "1002", "1003", "1004", "1005", "1006", "1007", "1008",
  390. --副本玩法
  391. "2051", "2001", "2071", "7001", "4064", "4063",
  392. }
  393. self.scene_id = self.scene_list[self.scene_index]
  394. local function on_load_scene( )
  395. local function load_scene_call_back( objs )
  396. if objs then
  397. self.async_load_map_obj = UnitySceneManager.LoadSceneAsync(self.scene_id)
  398. end
  399. end
  400. lua_resM:loadPrefabs(self, "terrain_scene_" .. self.scene_id, {}, load_scene_call_back)
  401. print("tanar: [CheatModel 444]=> self.scene_id: ",self.scene_id)
  402. end
  403. local function on_load_finish( )
  404. if self.check_load_event then
  405. GlobalTimerQuest:CancelQuest(self.check_load_event)
  406. self.check_load_event = nil
  407. end
  408. self.scene_id = tostring(SceneManager:getInstance():GetSceneId())
  409. on_load_scene()
  410. Message.show("加载完成")
  411. GlobalEventSystem:Fire(EventName.HIDE_LOADING_VIEW)
  412. end
  413. local check_load = function()
  414. if self.async_load_map_obj then
  415. local progress = self.async_load_map_obj.progress
  416. local max_progress = 1
  417. if progress >= max_progress then
  418. self.async_load_map_obj = nil
  419. self.scene_index = self.scene_index + 1
  420. self.scene_id = self.scene_list[self.scene_index]
  421. if tonumber(self.scene_id) == SceneManager:getInstance():GetSceneId() then
  422. self.scene_index = self.scene_index + 1
  423. self.scene_id = self.scene_list[self.scene_index]
  424. end
  425. if not self.scene_id then
  426. on_load_finish()
  427. return
  428. end
  429. on_load_scene()
  430. end
  431. end
  432. end
  433. on_load_scene()
  434. GlobalEventSystem:Fire(EventName.SHOW_LOADING_VIEW)
  435. if self.check_load_event then
  436. GlobalTimerQuest:CancelQuest(self.check_load_event)
  437. end
  438. self.check_load_event = GlobalTimerQuest:AddPeriodQuest(check_load, 0.5, -1)
  439. end