Jump to content

Recommended Posts

-- 在 modinfo.lua 中

game_modes = {

    {
        name = "OceanFishing",
        label = "海钓",
        description = "海钓的自定义模式",
        settings =
        {
            text = "",
            description = "",
            --level_type = "CAVE",
            --level_type = "SURVIVAL",
            level_type = "oceanfishing",
            mod_game_mode = true,
            --产卵模式
            spawn_mode = "fixed",--固定
            --资源更新
            resource_renewal = false,
            --鬼魂队友是否影响理智
            ghost_sanity_drain = false,
            --死亡生成鬼魂,不然就直接重选人物了
            ghost_enabled = true,
            --大门是否可以复活
            portal_rez = true,
            --重置时间
            reset_time = nil,
            --配方在游戏模式下有效吗
            invalid_recipes = nil,
            
            -- 无科技
            -- no_crafting = true,
            -- 无小地图
            -- no_minimap = true,
            -- 没有饥饿
            -- no_hunger = true,
            -- -- 没有理智
            -- no_sanity = true,
            -- 没有头像弹出窗口,点尸体不会出现死亡小卡片
            -- no_avatar_popup = true,
            -- 尸体没有记录,
            -- no_morgue_record = true,
            -- -- 大厅等待所有玩家
            -- lobbywaitforallplayers = true,
            -- -- 隐藏worldgen加载屏幕
            -- hide_worldgen_loading_screen = true,
            -- -- 隐藏你收到的礼物
            -- hide_received_gifts = false,
        },
    }
}

-- 在 modworldgenmain.lua 中

GLOBAL.setmetatable(env,{__index=function(t,k) return GLOBAL.rawget(GLOBAL,k) end})

-- 大部分是借鉴熔炉mod https://steamcommunity.com/sharedfiles/filedetails/?id=1938752683

--世界设置部分

--自定义起始位置
AddStartLocation("cs_sl", {
    name = "测试起始地",
    location = "forest",
    --起始布局
    start_setpeice = "DefaultStart1",
    --房间
    start_node = "Blank",
})

--生物群落设置
AddTaskSet("cs_sz2", {
    name = "海岛",
    location = "forest",-- 森林地图
    tasks = {
        "Make a pick",
    },
    valid_start_tasks = nil,
    ocean_prefill_setpieces = {
    },
    -- 海洋房间
    ocean_population = {

"OceanCoastalShore",
    },
})

--预设
AddLevel("oceanfishing", {
        id = "CS_ZDY_YS1",
        name = "默认预设",
        desc = "默认【海岛】,默认修改出生点",
        location = "forest",
        version = 4,
        overrides={
            start_location = "cs_sl",
            season_start = "default",
            world_size = "default",
            task_set = "cs_sz2",
            layout_mode = "LinkNodesByKeys",
            wormhole_prefab = "wormhole",
            roads = "never",
            birds = "never",
            keep_disconnected_tiles = true,
            no_wormholes_to_disconnected_tiles = true,
            no_joining_islands = true,
            has_ocean = true,
        },
        background_node_range = {0,1},
    })

--前端部分 

local IsTheFrontEnd = rawget(_G, "TheFrontEnd")

local ModsTab = require("widgets/redux/modstab")
local WorldSettingsTab = require("widgets/redux/worldsettings/worldsettingstab")
local _OnConfirmEnable = ModsTab.OnConfirmEnable
local _Cancel = ModsTab.Cancel
local _Refresh = WorldSettingsTab.Refresh

local function Reset(screen, modname)
    if screen and screen.server_settings_tab then
        local fancy_name = modname and KnownModIndex:GetModFancyName(modname) or nil        
        --如果有人禁用了我们的mod或卸载了所有mod(无)。
        if modname == nil or fancy_name == modinfo.name then
            -- 更改回默认的模式 即生存
            screen.server_settings_tab.game_mode.spinner:Enable()
            screen.server_settings_tab.game_mode.spinner:SetOptions(GetGameModesSpinnerData(ModManager:GetEnabledServerModNames()))
            screen.server_settings_tab.game_mode.spinner:SetSelectedIndex(1)
            screen.server_settings_tab.game_mode.spinner:Changed()
            -- 重新打开洞穴选项
            screen.world_tabs[2].isnewshard = true

            for i, v in pairs(screen.world_tabs[1].worldsettings_widgets) do
                v:LoadPreset() --重新载入预设
            end
        end
    end    
end

--卸下mod时会执行
ModsTab.OnConfirmEnable = function(self, restart, modname)
    local CurrentScreen = TheFrontEnd:GetActiveScreen()
    Reset(CurrentScreen, modname)
    _OnConfirmEnable(self, restart, modname)
end    

-- 返回退出创建世界时执行
ModsTab.Cancel = function(self)
    local CurrentScreen = TheFrontEnd:GetActiveScreen()
    Reset(CurrentScreen, modname)
    _Cancel(self)
end

-- 刷新时,有问题,会解锁存档的世界生存选项。我也没办法,暂时不能找到客户端读取有这个mod的存档时,洞穴依旧可以添加,而导致崩
WorldSettingsTab.Refresh = function(self)
    -- 不让客户端显示添加洞穴
    self.isnewshard = self.location_index == 1 and true or false
    return _Refresh(self)
end

--设置mod关闭时执行
local old_FrontendUnloadMod = ModManager.FrontendUnloadMod   
ModManager.FrontendUnloadMod = function(self, modname)
    old_FrontendUnloadMod(self, modname)
    local CurrentScreen = TheFrontEnd:GetActiveScreen()    
    if CurrentScreen and CurrentScreen.server_settings_tab then
        local fancy_name = modname and KnownModIndex:GetModFancyName(modname) or nil
        --如果有人禁用了我们的mod或卸载了所有mod(无)。
        if modname == nil or fancy_name == modinfo.name then    
            --恢复原来的
            ModsTab.OnConfirmEnable = _OnConfirmEnable
            ModsTab.Cancel = _Cancel
            ModManager.FrontendUnloadMod = old_FrontendUnloadMod 
            WorldSettingsTab.Refresh = _Refresh
        end
    end
end


if IsTheFrontEnd then
    local CurrentScreen = TheFrontEnd:GetActiveScre() --获取活动屏幕ServerSlotScreen文档界面ServerCreationScreen具体档/新档
    --server_settings_tab服务器设置选项卡game_mode游戏模式启用
    如果CurrentScreen和CurrentScreen.server_settings_tab和CurrentScreen.server_settings_tab.game_mode。 spinner.enabled then
                                                            --从mod中添加数据模式,并设置
        uiCurrentScreen.server_settings_tab.game_mode.spinner:SetOptions(GetGameModesSpinnerData(ModManager:GetEnabledServerModNames()))
                                                            --选择,有选择
        CurrentScreen.server_settings_tab .game_mode.spinner:SetSelected("OceanFishing")
                                                            --改变
        CurrentScreen.server_settings_tab.game_mode.spinner:Changed()
                                                            -- 锁定值    
        CurrentScreen.server_settings_tab.game_mode.spinner:Disable()
        -- 主是显示
        --world_tabs第一个世界的设置(最多支持2个) worldsettings_widgets世界设置(1世界选项、2世界生成) settingslist设置列表scroll_list滚动列表widgets_to_update网格表opt_spinner选择器
        local scroll_list = CurrentScreen.world_tabs[1].worldsettings_widgets[2].settingslist.scroll_list
        -- 生物群落
        scroll_list.widgets_to_update [10].opt_spinner.spinner:SetSelected("cs_sz2")
        scroll_list.widgets_to_update[10].opt_spinner.spinner:Changed()        
        -- 设置出生点
        scroll_list.widgets_to_update[11].opt_spinner.spinner:SetSelected("cs_sl")
        scroll_list.widgets_to_update[11].opt_spinner.spinner:Changed()

        -- 重新加载一次预设
        for i, v in pairs(CurrentScreen.world_tabs[1].worldsettings_widgets) do
            v:LoadPreset() -- 重新加载预设
        end
    end
end

我的英语不是很好。我不知道怎么翻译

我英语不好,不知道怎么才翻译好

Edited by _Yue_Yue_

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
  • Create New...