源战役客户端
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 

491 linhas
17 KiB

CheatModel = CheatModel or BaseClass(BaseVo)
CheatModel.UPDATE_CHEAT_INPUT_VIEW = "UPDATE_CHEAT_INPUT_VIEW" --更新秘籍界面数据
CheatModel.SEND_CHEAT_TO_SERVER = "SEND_CHEAT_TO_SERVER" --发送秘籍到服务端
CheatModel.CHEAT_PRINT_DEBUG_INFO = "CHEAT_PRINT_DEBUG_INFO" --打印调试信息
CheatModel.OPEN_CHEAT_SHOW_VIEW = "OPEN_CHEAT_SHOW_VIEW" --打开版号隐藏的界面
CheatModel.OPEN_CAMERA_EDIt_VIEW = "OPEN_CAMERA_EDIt_VIEW" --打开摄像机参数编辑界面
CheatModel.OPEN_UI_CAMERA_EDIT_VIEW = "OPEN_UI_CAMERA_EDIT_VIEW" --打开模型摄像机参数编辑界面
CheatModel.OPEN_BLOOM_EDIt_VIEW = "OPEN_BLOOM_EDIt_VIEW" --打开泛光参数编辑界面
CheatModel.OPEN_CLIENT_PROPERTY_VIEW = "OPEN_CLIENT_PROPERTY_VIEW" --打开属性预览界面
CheatModel.OPEN_CLIENT_ACCELERATION_VIEW = "OPEN_CLIENT_ACCELERATION_VIEW"
CheatModel.Quick_Run_Code = "CheatModel.Quick_Run_Code"--快速执行Lua代码
CheatModel.CLICK_BTN_OK = "CheatModel.CLICK_BTN_OK" --点击确认秘籍
CheatModel.OPEN_FXAA_TEST_VIEW = "CheatModel.OPEN_FXAA_TEST_VIEW" -- 打开FXAA调试界面
CheatModel.OPEN_FREE_CAMERA_VIEW = "CheatModel.OPEN_FREE_CAMERA_VIEW" -- 打开发行全自由摄像机界面
CheatModel.OPEN_GREEN_SCREEN_CLICK_VIEW = "CheatModel.OPEN_GREEN_SCREEN_CLICK_VIEW" -- 打开发行绿屏切换界面
CheatModel.OPEN_SELECTROLEVIEW_SHOW_CLICK_VIEW = "CheatModel.OPEN_SELECTROLEVIEW_SHOW_CLICK_VIEW" -- 打开发行切换显示选角界面
function CheatModel:__init()
CheatModel.Instance = self
self.cheats_data = nil
self.show_green_screen = false
self.func_list = {
["@test"] = CheatModel.HandleTest,
["@perform"] = CheatModel.HandlePerform,
["@hideui"] = CheatModel.HandleHideUI,
}
self.module_check = "perform_"
self.module_data = {}
local func = function( module, data )
self.module_data[module] = data
end
GlobalEventSystem:Bind( EventName.SENT_MODULE_DEBUG_DATA,func)
end
function CheatModel:getInstance()
if CheatModel.Instance == nil then
CheatModel.New();
end
return CheatModel.Instance
end
--保存服务端下发的秘籍
function CheatModel:SetCheatsData(data)
self.cheats_data = data
self:Fire(CheatModel.UPDATE_CHEAT_INPUT_VIEW)
end
function CheatModel:CheckCommand(command)
-- if ClientConfig.is_out_server then
-- return true
-- end
if not command then
return true
end
if string.len(command) < 2 then
return true
end
local command_mode = string.find(command, "@")
if command_mode ~= 1 then
return true
end
local handle_func = self.func_list[command]
if handle_func then
handle_func(self, command)
return false
end
if string.find(command,self.module_check) then
self:ModuleCheck(command)
return false
end
if string.find(command, "@deviceid") then
if SystemInfo then
local temp_model = SystemInfo.deviceModel or "0"
local temp_name = SystemInfo.deviceName or "1"
local temp_uid = SystemInfo.deviceUniqueIdentifier or "2"
local temp_gid = SystemInfo.graphicsDeviceID or "3"
local temp_gvid = SystemInfo.graphicsDeviceVendorID or "4"
local str = "temp_model = " .. temp_model .. " temp_name = " .. temp_name .. " temp_uid = " .. temp_uid .. " temp_gid = " .. temp_gid .. " temp_gvid = " .. temp_gvid
Message.show("deviceid = " .. str)
end
return false
end
if string.find(command,"@RunCode:") then
--执行Lua代码的后门
self:QuickRunCode(command)
return false
end
if string.find(command, "@LuaProfilerStart") then
Message.show("LuaProfilerStart")
LuaProfiler.start()
return false
end
if string.find(command, "@LuaProfilerStop") then
LuaProfiler.stop()
local str = LuaProfiler._CUSTOM_REPORTS
GameError.Instance:SendErrorMsg(str)
Message.show("LuaProfilerStop")
return false
end
if string.find(command, "@OpenCheatState") then
GlobalOpenCheatState = true
return false
end
if string.find(command, "@baseres") then
self:LoadBaseSceneRes()
return false
end
return true
end
function CheatModel.HandleTest()
GlobalEventSystem:Fire(EventName.OPEN_CHEAT_INPUT_VIEW) --秘籍
end
function CheatModel.HandlePerform()
GlobalEventSystem:Fire(EventName.OPEN_LUA_STATE_VIEW) --lua状态
end
function CheatModel.HandleHideUI()
local hide_list = {"Top","Activity","UI","Main","NameBoard","Dynamic_NameBoard"} --隐藏界面
local obj_trans = GameObject.Find("root").transform:Find("Canvas").transform
for index,layer in pairs(hide_list) do
obj_trans:Find(layer).gameObject:SetActive(false)
end
end
function CheatModel:QuickRunCode( str )
if not str then print("CheatModel:QuickRunCode传值为空") return end
CheatModel:getInstance():Fire(CheatModel.Quick_Run_Code,str)
end
function CheatModel:ModuleCheck(command)
local temp = Split(command,"_")
if #temp == 2 then
GlobalEventSystem:Fire(EventName.CHECK_MODULE_DEBUG_DATA)
local module_name = temp[2]
if temp[2] ~= "" then
local sent = function()
local sent_data = ""
for cur_module,data in pairs(self.module_data) do
if module_name == "all" then
sent_data = sent_data .. cur_module .. "\n" .. TableToStr(data) .. "\n"
elseif cur_module == module_name then
sent_data = sent_data .. cur_module .. "\n" .. TableToStr(data)
break
end
end
self.module_data = {}
if Application.platform ~= RuntimePlatform.Android and Application.platform ~= RuntimePlatform.IPhonePlayer then
Debugger.LogWarning("模块调试信息:" .. "\n" .. sent_data)
else
GameError.Instance:SendErrorMsg(sent_data,true)
end
end
setTimeout(sent,2)
end
elseif #temp == 3 then
local module_name = temp[2]
local func_name = temp[3]
if module_name ~= "" and func_name ~= "" then
GlobalEventSystem:Fire(EventName.DO_MODULE_DEBUG_FUNC,module_name,func_name)
end
end
end
function CheatModel:AutoUpgradeFight()
local wear_equip_list = GoodsModel:getInstance().wear_equip_list
local equip = {}
for _, v in pairs(wear_equip_list) do
equip[v.equip_type] = v
end
local add_list = {}
local best_equip = {}
local career, level, turn = RoleManager.Instance.mainRoleInfo.career, RoleManager.Instance.mainRoleInfo.level, RoleManager.Instance.mainRoleInfo.turn
StartCoroutine(function()
local fun,tbl
local fight1, fight2
for k, v in pairs(Config.Goods) do
fun = loadstring(v)
tbl = fun()
if tbl.type == GoodsModel.TYPE.EQUIP then
if (tbl.career_id == 0 or tbl.career_id == career) and tbl.level <= level and (tbl.turn == 0 or tbl.turn == turn) then
if best_equip[tbl.equip_type] then
fight1 = GetFighting(ErlangParser:GetInstance():Parse(tbl.base_attrlist))
fight2 = GetFighting(ErlangParser:GetInstance():Parse(best_equip[tbl.equip_type].base_attrlist))
best_equip[tbl.equip_type] = (best_equip[tbl.equip_type].level < tbl.level or fight2 < fight1) and tbl or best_equip[tbl.equip_type]
else
best_equip[tbl.equip_type] = tbl
end
end
end
--WaitForSeconds(0.25)
end
for k, v in pairs(best_equip) do
if not equip[k] or equip[k].type_id ~= v.type_id then
add_list[#add_list + 1] = v.type_id
end
end
local cheats
for k, v in pairs(add_list) do
cheats = "goods_"..v.."_1"
CheatModel:getInstance():Fire(CheatModel.SEND_CHEAT_TO_SERVER, cheats)
WaitForSeconds(0.5)
end
end)
end
function CheatModel:OnCreateMonList( )
local mon_list = {
13010001,
13010002,
13010003,
13020001,
13020002,
13020003,
13030001,
13030002,
13030003,
10040001,
10040002,
}
local index = 1
local function on_step( )
local mon_id = mon_list[index]
if mon_id then
local cmd = string.format("mon_%d_1", mon_id)
self:Fire(CheatModel.SEND_CHEAT_TO_SERVER, cmd)
else
if self.create_mon_timer then
GlobalTimerQuest:CancelQuest(self.create_mon_timer)
self.create_mon_timer = nil
end
end
index = index + 1
end
if self.create_mon_timer then
GlobalTimerQuest:CancelQuest(self.create_mon_timer)
self.create_mon_timer = nil
end
self.create_mon_timer = GlobalTimerQuest:AddPeriodQuest(on_step, 1, -1)
end
-- 发行绿屏统一接口 model_con:挂载模型后的UIModelCommon类 camera_type:1 主摄像机 2 UI摄像机 3 UIModel摄像机
-- mul_model_con : 发送的model_con是否是多个model_con组成的列表
-- green_click_size : 绿幕切换热区大小
function CheatModel:SetupGreenScreenEffect(show, model_con, camera_type, mul_model_con, green_click_size)
-- if show and not model_con then return end
if not LoginModel.ENABLE_GREEN_SCREEN then return end -- 不需要绿屏的话直接return
self.temp_model_con = model_con or self.temp_model_con
self.temp_camera_type = camera_type or self.temp_camera_type
self.temp_mul_model_con = mul_model_con or self.temp_mul_model_con
if not self.temp_model_con or not self.temp_camera_type then return end
self.show_green_screen = show
if not self.mc_camera then -- 获取主摄像机
self.mc_camera = MainCamera.Instance.camera
if camera_type == 1 then
self.target_postEffect = MainCamera.Instance.camera_gameObject:GetComponent(typeof(PostEffect))
self.default_cullingMask = self.mc_camera.cullingMask
self.default_clearFlag = self.mc_camera.clearFlags
self.default_color = self.mc_camera.backgroundColor
end
end
if not self.ui_camera then -- 获取UI摄像机
self.ui_camera = MainCamera.Instance.uiCamera
if camera_type == 2 then
self.target_postEffect = MainCamera.Instance.uiCamera_gameObject:GetComponent(typeof(PostEffect))
self.default_cullingMask = self.ui_camera.cullingMask
self.default_clearFlag = self.ui_camera.clearFlags
self.default_color = self.ui_camera.backgroundColor
end
end
if not self.ui_back_camera then -- 获取UIBack摄像机
self.ui_back_camera = GameObject.Find("root").transform:Find("UIBackRoleCamera"):GetComponent("Camera")
if camera_type == 3 then
self.target_postEffect = self.ui_back_camera.gameObject:GetComponent(typeof(PostEffect))
self.default_cullingMask = self.ui_back_camera.cullingMask
self.default_clearFlag = self.ui_back_camera.clearFlags
self.default_color = self.ui_back_camera.backgroundColor
end
end
self.target_postEffect_enabled = self.target_postEffect and self.target_postEffect.enabled or false
-- 设置需要被隐藏的摄像机
if camera_type == 1 then
self.target_camera = self.mc_camera
self.target_hide_camera1 = self.ui_camera
self.target_hide_camera2 = self.ui_back_camera
elseif camera_type == 2 then
self.target_camera = self.ui_camera
self.target_hide_camera1 = self.mc_camera
self.target_hide_camera2 = self.ui_back_camera
elseif camera_type == 3 then
self.target_camera = self.ui_back_camera
self.target_hide_camera1 = self.mc_camera
self.target_hide_camera2 = self.ui_camera
end
-- 修改目标摄像机的渲染层级,修改清除模式,并控制UI摄像机的渲染
if self.target_camera then
if self.show_green_screen then
self.target_camera.cullingMask = bit.bor(0, bit.lshift(1, UIPartical.RenderingOther_List.Role))
self.target_camera.clearFlags = UnityEngine.CameraClearFlags.SolidColor
self.target_camera.backgroundColor = Color(0, 1, 0, 1)
if self.target_postEffect then
self.target_postEffect.enabled = false
end
self.target_hide_camera1.enabled = false
self.target_hide_camera2.enabled = false
else
self.target_camera.cullingMask = self.default_cullingMask
self.target_camera.clearFlags = self.default_clearFlag
self.target_camera.backgroundColor = self.default_color
if self.target_postEffect then
self.target_postEffect.enabled = self.target_postEffect_enabled
end
self.target_hide_camera1.enabled = true
self.target_hide_camera2.enabled = true
end
end
-- 根据是否绿幕修改主角模型的渲染层级
if self.temp_model_con then
if not self.default_layer then -- 在修改前,按照InstanceID存储节点的layer层级
self.default_layer = {}
end
local layer = self.show_green_screen and UIPartical.RenderingOther_List.Role or nil
local function set_role_layer(obj)
if IsNull(obj) then
return
end
for i = 0, obj.childCount - 1 do
local instanceID = obj:GetChild(i):GetInstanceID()
self.default_layer[instanceID] = self.default_layer[instanceID] or obj:GetChild(i).gameObject.layer
obj:GetChild(i).gameObject.layer = layer or self.default_layer[instanceID]
set_role_layer(obj:GetChild(i), layer)
end
end
local function set_layer_callback(target_model_con)
if target_model_con.type == SceneBaseType.FWeapon then -- 武器要特殊处理
target_model_con.weapon_hand_list = target_model_con.weapon_hand_list or {}
for k, v in pairs(target_model_con.weapon_hand_list) do
set_role_layer(v.transform)
end
else
if target_model_con.role then
set_role_layer(target_model_con.role.transform)
end
end
end
if mul_model_con then -- 如果temp_model_con发的是多个模型列表
for k, v in pairs(self.temp_model_con) do
set_layer_callback(v)
end
else
set_layer_callback(self.temp_model_con)
end
-- if self.temp_model_con.type == SceneBaseType.FWeapon then -- 武器要特殊处理
-- self.temp_model_con.weapon_hand_list = self.temp_model_con.weapon_hand_list or {}
-- for k, v in pairs(self.temp_model_con.weapon_hand_list) do
-- set_role_layer(v.transform)
-- end
-- else
-- if self.temp_model_con.role then
-- set_role_layer(self.temp_model_con.role.transform)
-- end
-- end
end
-- 打开切换绿屏的窗口
self:Fire(CheatModel.OPEN_GREEN_SCREEN_CLICK_VIEW, true, green_click_size)
end
-- 秘籍弹出的窗口调用,用来直接开关已有的绿屏
function CheatModel:EnabledGreenScreenEffect(show)
if self.temp_model_con and self.temp_camera_type then
self:SetupGreenScreenEffect(show, self.temp_model_con, self.temp_camera_type, self.temp_mul_model_con)
end
end
-- 退出界面时使用,关闭绿屏,清除缓存的摄像机
function CheatModel:DisabledGreenScreenEffect(hide_tips)
if self.show_green_screen then
self:SetupGreenScreenEffect(false)
end
self.show_green_screen = false
local show_str = self.temp_model_con and true or false
self.temp_model_con = nil
self.temp_camera_type = nil
self.temp_mul_model_con = nil
self.mc_camera = nil
self.ui_camera = nil
self.ui_back_camera = nil
self.target_camera = nil
self.target_hide_camera1 = nil
self.target_hide_camera2 = nil
self.default_layer = nil
self:Fire(CheatModel.OPEN_GREEN_SCREEN_CLICK_VIEW, false)
LoginModel.ENABLE_GREEN_SCREEN = false
if show_str and not hide_tips then
Message.show("退出绿屏模式,需要时请重新启用")
end
end
function CheatModel:LoadBaseSceneRes( )
self.scene_index = self.scene_index or 1
self.scene_list = {
--大世界
"1001", "1002", "1003", "1004", "1005", "1006", "1007", "1008",
--副本玩法
"2051", "2001", "2071", "7001", "4064", "4063",
}
self.scene_id = self.scene_list[self.scene_index]
local function on_load_scene( )
local function load_scene_call_back( objs )
if objs then
self.async_load_map_obj = UnitySceneManager.LoadSceneAsync(self.scene_id)
end
end
lua_resM:loadPrefabs(self, "terrain_scene_" .. self.scene_id, {}, load_scene_call_back)
print("tanar: [CheatModel 444]=> self.scene_id: ",self.scene_id)
end
local function on_load_finish( )
if self.check_load_event then
GlobalTimerQuest:CancelQuest(self.check_load_event)
self.check_load_event = nil
end
self.scene_id = tostring(SceneManager:getInstance():GetSceneId())
on_load_scene()
Message.show("加载完成")
GlobalEventSystem:Fire(EventName.HIDE_LOADING_VIEW)
end
local check_load = function()
if self.async_load_map_obj then
local progress = self.async_load_map_obj.progress
local max_progress = 1
if progress >= max_progress then
self.async_load_map_obj = nil
self.scene_index = self.scene_index + 1
self.scene_id = self.scene_list[self.scene_index]
if tonumber(self.scene_id) == SceneManager:getInstance():GetSceneId() then
self.scene_index = self.scene_index + 1
self.scene_id = self.scene_list[self.scene_index]
end
if not self.scene_id then
on_load_finish()
return
end
on_load_scene()
end
end
end
on_load_scene()
GlobalEventSystem:Fire(EventName.SHOW_LOADING_VIEW)
if self.check_load_event then
GlobalTimerQuest:CancelQuest(self.check_load_event)
end
self.check_load_event = GlobalTimerQuest:AddPeriodQuest(check_load, 0.5, -1)
end