DokiMod 开发文档 DokiMod 开发文档
主页
DDLC 中文 Mod 模板
返回主站 (opens new window)
  • Mod 模板 2.0 (opens new window)
  • 新版文档 (opens new window)
  • 新版开发文档 (opens new window)
主页
DDLC 中文 Mod 模板
返回主站 (opens new window)
  • Mod 模板 2.0 (opens new window)
  • 新版文档 (opens new window)
  • 新版开发文档 (opens new window)
  • 序

  • 入门

    • 开始准备环境
    • 第一个简单的脚本
    • 选择菜单与多 Label
    • 存档文件和判断
      • 存档文件
      • 判断
      • 本章原作者
      • 贡献者
    • 角色立绘那些事
    • 变量与定义角色
    • 额外脚本介绍
  • 进阶

  • 分发

  • 杂项

  • DDLC 中文 Mod 模板
  • 入门
PartyParrot359
2021-08-19

存档文件和判断

# 存档文件和判断

注意!!!

本文将假定您有一定的 Python 基础,因为本文涉及到变量和判断,虽然也很简单,但我仍建议您在了解 Python 基础知识后再来完成本教程。

今天学的内容会有一点点的难,但如果你利用的好,能够使 Mod 更有趣。

# 存档文件

一般来说,在使用 Ren'Py 制作的游戏的标准主存档位置里会有一个名为 DDLCModTempCNNext 的文件夹,那就是模组模板的存档位置;而里面通常有一个名为 persistent 的文件,那就是我们今天要重点介绍的存档文件。

扩展知识

您可以去 options.rpy 更改存档文件夹名称。 请不要在存档文件夹的名称中包含中文,以免存档失败,引发异常。

各操作系统的主存档位置如下:

  • Windows: %APPDATA%\RenPy
  • Linux: ~/.renpy
  • macOS: $HOME/Library/RenPy

# 用法

您可以在脚本文件里输入:

$ persistent.<变量名称> = <数字、布尔值、字符串...>

提示

请按需修改上面标注的内容。

这样,这个变量就会被保存到存档文件里。

# 记录周目

您可以在脚本里输入:

$ persistent.playthrough = <数字>

来记录玩家游玩到了哪一个周目(虽然你可能用不到)。

提示:

请按需修改上面标注的内容。一般情况下为了保证兼容性,请保持数值范围在 0 到 4 之间。

# 防作弊

您可以在脚本里输入:

$ persistent.anticheat = renpy.random.randint([特殊数字一], [特殊数字二])

来防止玩家作弊,跨周目 / 设备读取存档(除非你删除了 after_load 里的对应代码)。

提示:

请手动替换[]里的内容(包括中括号)。

# 删除存档

在脚本里输入:

    $ delete_all_saves()

就可以删除所有存档(除非你删除了 delete_all_saves 函数)。

警告:

此函数请谨慎调用。


把上面的都结合起来:

label ch1_start:
    $ persistent.playthrough = 0
    $ persistent.anticheat = renpy.random.randint(100000, 999999)
    $ delete_all_saves()

    stop music fadeout 2.0
    scene bg club_day with dissolve_scene_full

    "今天是学园祭的第一天。"
    show monika 2 at t42
    m "好了,各位!我们开始准备吧!"
    show sayori 4r at t43
    s "耶!小饼干!"
    show natsuki 2l at t41
    n "要不也来尝下我的纸杯蛋糕?"
    show yuri 3m at t44
    y "...其实都可以了。"
    $ n_aff = 0
    $ s_aff = 0
    menu:
        "那么,我该先吃些什么呢?"
        "纸杯蛋糕":
            n "怎么样,是不是很好吃啊?"
            $ n_aff += 1
            $ s_aff = s_aff - 1
        "小饼干":
            s "怎么样,是不是很好吃?"
            $ s_aff += 1
            $ n_aff = n_aff - 1
    menu:
        "我该先和谁交流?"
        "纱世里":
            s "你好啊!在文学部感觉怎么样?"
        "莫妮卡":
            m "嗨,有什么事吗?"
        "夏树":
            n "哼,看我干什么?"
        "优里":
            y "你好..."
    mc "总之,以后也要多多关照!"

    return

以上就是存档文件的基本用法,在以后的章节,我(或许)会详细地讲一下。

# 判断

在剧情里,我们或许需要判断某个角色对玩家的好感度是否满足某个条件。

Python 自带以下几个比较常用的比较表达式:

  • a == b 判断 a 是否等于 bw

  • a > b 判断 a 是否大于 b

  • a < b 判断 a 是否小于 b

  • a >= b 判断 a 是否大于或等于 b

  • a <= b 判断 a 是否小于或等于 b

警告

以下内容牵涉到等效语句。

在 Ren'Py 文档里是这样介绍的:

为了允许 Ren'Py 能够在 Python 中脚本化,每个 Ren'Py 语句都有一条等效的 Python 语句。每条等效 Python 语句通常包含一个 Python 函数,也可能包含一个 Python 正则表达式,执行一个等效行为。

最后就是和 if 连在一起的几个判断:

  • elif <条件>: ... 代表如果 if 链里的以上条件均不能被满足,但这里定义的条件能够被满足,就执行某些语句。

    如:

    if a == b:
        renpy.say(None, "a 等于 b。")
    elif a > b:
        renpy.say(None, "a 大于 b。")
    

    代表如果 a 等于 b 就让旁白说:"a 等于 b";否则,如果 a 大于 b 就让旁白说:"a 大于 b"。

  • else: ... 代表如果 if 链里的以上条件均不能被满足,就执行某些语句。

    如:

    if a == b:
        renpy.say(None, "a 等于 b。")
    else:
        renpy.say(None, "a 不等于 b。")
    

    代表如果 a 等于 b 就让旁白说:"a 等于 b";否则就让旁白说:"a 不等于 b"。

提示

这里的 renpy.say() 等于一句对话。

elif 和 else 可以一起使用。

尝试理解并运行下面的代码:

label ch1_start:
    $ persistent.playthrough = 0
    $ persistent.anticheat = renpy.random.randint(1000, 0)
    $ delete_all_saves()
    stop music fadeout 2.0
    scene bg club_day with dissolve_scene_full
    "今天是学园祭的第一天。"
    show monika 2 at t42
    m "好了,各位!我们开始准备吧!"
    show sayori 4r at t43
    s "耶!小饼干!"
    show natsuki 2l at t41
    n "要不也来尝下我的纸杯蛋糕?"
    show yuri 3m at t44
    y "...其实都可以了。"
    $ n_aff = 0
    $ s_aff = 0
    menu:
        "那么,我该先吃些什么呢?"
        "纸杯蛋糕":
            n "怎么样,是不是很好吃啊?"
            $ n_aff += 1
            $ s_aff = s_aff - 1
        "小饼干":
            s "怎么样,是不是很好吃?"
            $ s_aff += 1
            $ n_aff = n_aff - 1
    menu:
        "我该先和谁交流?"
        "纱世里":
            s "你好啊!在文学部感觉怎么样?"
        "莫妮卡":
            m "嗨,有什么事吗?"
        "夏树":
            n "哼,看我干什么?"
        "优里":
            y "你好..."
    if s_aff >= 1:
        s "诶嘿嘿~"
    mc "总之,以后也要多多关照!"

执行上面的代码,s_haogandu 大于或等于 1(在选择吃什么时选择了小饼干),在后面纱世里就会说"诶嘿嘿~",否则只会继续。

# 本章原作者

@PartyParrot359 (opens new window)

# 贡献者

@Dobby233Liu (opens new window)

上次更新于: 1/22/2022, 3:45:15 AM
选择菜单与多 Label
角色立绘那些事

← 选择菜单与多 Label 角色立绘那些事→

Theme by Vdoing | Copyright © 2021-2022 DokiMod Team | 本网站是粉丝作品,与 Team Salvato 无关 | hosted by ▲ Vercel | powered by VuePress
访问统计信息
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式