查看“模组:鱼类数据”的源代码
←
模组:鱼类数据
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看和复制此页面的源代码。
← [[模组:目录|目录]] 此页面解释游戏如何存储和解析鱼数据,包括生成机制。这是面向模组开发者的高级指南。 ==解析鱼类生成条件== 游戏会检查两个位置来决定玩家钓鱼时生成何种鱼类。这仅适用于正常鱼类;计算生成传说鱼类的概率时,在检查这两个位置''之前''还会单独检查地点代码。 <small>(由<samp>BobberBar</samp>和<samp>GameLocation::getFish</samp>的逆向工程可知)</small> ===生成地点=== 每种鱼类都归属于地点内的一片区域,且仅当玩家处在该区域内时才会生成。<code>GameLocation::getFishingLocation</code>定义了每个区域的地块坐标。对于每个游戏区域,它都可以被重写。现定义了如下区域: * [[煤矿森林]]: ** [[煤矿森林#池塘|池塘]](区域#1,从地块<code>(0, 0)</code>到<code>(52, 42)</code>,包括边界); ** [[煤矿森林#河流|河流]] (区域#0,匹配森林的其他区域) * [[姜岛#岛屿西部|岛屿西部]] ** 淡水(区域#2,从地块<code>(36, 0)</code>到<code>(36, 80)</code>,包括边界); ** 海洋(区域#0,匹配其他位置) * 其他所有地点只有区域-1,所以从哪里钓鱼都无影响。 可在给定地点生成的鱼由<code>Data\Locations.xnb</code>中用斜杠分隔的数据定义(另请参阅:[[模组:地点数据]])。具体而言,有如下的字段索引:4(春季),5(夏季),6(秋季),7(冬季)。每个字段都包含{{t|int fishID}}(匹配<code>Data\Fish.xnb</code>)+{{t|int areaID}}(或-1表示任何区域)整数对。例如,[[煤矿森林]]夏季的鱼数据为<code>153 -1 145 0 144 -1 138 0 132 0 706 0 704 0 702 0</code>。其可被解析为: {| class="wikitable" |- ! 值 ! 鱼 ! 区域 |- | <code>153 -1</code> | [[绿藻]] | 任何区域(池塘或河流) |- | <code>145 0</code> | [[太阳鱼]] | 河流 |- | <code>144 -1</code> | [[狗鱼]] | 任何区域(池塘或河流) |- | <code>138 0</code> | [[虹鳟鱼]] | 河流 |- | <code>132 0</code> | [[鲷鱼]] | 河流 |- | <code>706 0</code> | [[西鲱]] | 河流 |- | <code>704 0</code> | [[麻哈脂鲤]] | 河流 |- | <code>702 0</code> | [[鲢鱼]] | 河流 |} ===鱼类数据和生成规则=== 鱼类数据和生成规则是存储在<code>Data\Fish.xnb</code>中的字段。包括两种不同格式。 若第二个字段为<code>trap</code>,则这种鱼只能用[[蟹笼]]捕获,且使用如下格式: {| class="wikitable" |- ! 索引 ! 语法 ! 示例 ! 内容 |- | 0 | {{t|name}} | <code>Lobster</code> | 鱼的名称 |- | 1 | {{t|type}} | <code>trap</code> | 必须为<code>trap</code>,以指示需要使用蟹笼 |- | 2 | {{t|chance}} | <code>.05</code> | 抓到此鱼的概率。介于0到1之间。只有当文件中之前列出的鱼都没有被判定选中时,才会依此概率判定此鱼选中与否。 |- | 3 | | <code>688 .45 689 .35 690 .35</code> | 未使用。 |- | 4 | {{t|location}} | <code>ocean</code> | 能抓到此鱼的水体类型。为<code>freshwater</code>或<code>ocean</code>。 |- | 5 | {{t|min size}} | <code>2</code> |rowspan="2"| 此鱼可能的最小和最大长度,单位为英寸。用于统计钓鱼数据。非英语语言下,乘2.54转换为厘米。 |- | 6 | {{t|max size}} | <code>20</code> |} 否则,该鱼类可以用钓竿捕获,且使用如下格式: {| class="wikitable" |- ! 索引 ! 语法 ! 示例 ! 内容 |- | 0 | {{t|name}} | <code>Pufferfish</code> | 鱼的名称。 |- | 1 | {{t|chance to dart}} | <code>80</code> | 鱼在钓鱼小游戏中以多高频率猛冲;介于15([[鲤鱼]])和100([[冰川鱼]])之间。 |- | 2 | {{t|darting randomness}} | <code>floater</code> | 钓鱼小游戏中浮标以何种模式运动;取值为<code>mixed</code>,<code>smooth</code>,<code>floater</code>,<code>sinker</code>,或<code>dart</code>。 |- | 3 | {{t|min size}} | <code>1</code> |rowspan="2"| 此鱼可能的最小和最大长度,单位为英寸。用于统计钓鱼数据。非英语语言下,乘2.54转换为厘米。. |- | 4 | {{t|max size}} | <code>36</code> |- | 5 | [{{t|min time}} {{t|max time}}]+ | <code>1200 1600</code> | 一天中生成该鱼的时间。包括最小值,不包括最大值。可以指定多个范围。 |- | 6 | [{{t|season}}]+ | <code>summer</code> | 未使用;季节数据会从<samp>Data/Locations</samp>读取。 |- | 7 | {{t|weather}} | <code>sunny</code> | 生成该鱼的天气。<code>sunny</code>,<code>rainy</code>,或<code>both</code>. |- | 8 | {{t|locations}} | <code>690 .4 685 .1</code> | 未使用;地点会从<samp>Data/Locations</samp>读取。 |- | 9 | {{t|max depth}} | <code>4</code> | 以最大概率抓住此类型的鱼的最小水深;用于计算生成率(见下文)。 |- | 10 | {{t|spawn multiplier}} | <code>.3</code> | 用于计算生成率的生成率乘数(见下文)。 |- | 11 | {{t|depth multiplier}} | <code>.5</code> | 用于计算生成率的深度乘数(见下文)。 |- | 12 | {{t|fishing level}} | <code>0</code> | 鱼出现所需的最低[[技能|钓鱼等级]]。 |- | 13 | {{t|first-catch tutorial eligible}} | <code>true</code> | 可否出现在第一次钓鱼教程中。 |} ===生成率=== <!-- 注意: 不同于英语页面,此小节中文页面已经与1.6版本同步 --> <!-- ATTENTION: The Chinese page of this section has been updated to adapt version 1.6 --> 鱼类生成率的计算详见游戏文件<ref name="spawn_rate" />。每次玩家投掷钓竿时,会生成一个包含该地点所有可用[[鱼|鱼类]]的队列(包括藻类、海草、垃圾、秘密纸条、齐豆等)。随后,按照特定优先级(例如“鱼王 > 普通鱼类 > 秘密纸条 > 垃圾”)进行排序,再随机打乱同一优先级的不同鱼类。游戏将按顺序遍历该队伍,对于队伍中的每种鱼类,在经过对季节、位置、水深、钓鱼等级、魔法鱼饵等要素的检查后,将进行第一次随机性判定计算选择此种鱼类的概率。若选中,游戏将进行一些其他判定,例如鱼饵类型、是否只能钓起1条等,并进行第二次随机性判定。此方法会根据多重因素随机地生成true或false,以决定能否钓起此鱼,其机制较为复杂,见下文。若最终未能选中钓起的物品,则在非教程模式下返回空,否则返回[[太阳鱼]]。 在上文中,第一次随机性判定的概率由<samp>SpawnFishData::GetChance</samp>方法和<samp>Data/Locations.xnb</samp>中的鱼类数据给出,计算公式为''{概率} = ChanceModifiers({Chance} + {CuriosityLureBuff} + {当日运气}) * {SpecificBaitMultiplier} + {SpecificBaitBuff} + {ChanceBoostPerLuckLevel} * {运气等级}'',其中英文参数均为<samp>Data/Locations.xnb</samp>中的对应字段。 第二次随机性的概率由<samp>GameLocation::CheckGenericFishRequirements</samp>方法和<samp>Data/Fish.xnb</samp>中的鱼类数据给出,其计算较复杂。首先,计算''{概率} = {生成率乘数} - max(0, {最小水深} - {实际水深}) * {深度乘数} * {生成率乘数} + {钓鱼等级} / 50''。若为训练用钓竿,则在此基础上乘1.1,但最高不超过0.9 。若此时概率仍小于0.25且有珍稀诱钩增益,则判断是否为该收益是否为默认值。若是,则采用''新概率 = 原概率 * 0.17 / 0.25 + 0.17 / 2''来更新概率,否则直接在原概率的基础上增加该鱼类特有的珍稀诱钩增益(<samp>CuriosityLureBuff</samp>)。若使用针对性鱼饵,则再将此概率乘1.66 。若还受每日运气影响则加上每日运气。最后再应用概率修饰器(若有)。 1.6版本中鱼类生成的相对概率计算更为复杂。 ==鱼缸鱼类== [[鱼缸]]中的鱼类可通过<samp>Data/AquariumFish</samp>资源来编辑: {| class="wikitable" |- ! 索引 ! 字段 ! 目的 |- | 0 | 贴图索引 | <samp>LooseSprites/AquariumFish</samp> 贴图集中该贴图的索引,从左上角的贴图为0开始计数。 |- | 1 | 类型 | 鱼的类型。影响鱼的行为。可能的取值为: {| class="wikitable" |- ! 值 ! 说明 |- | <samp>鳗鱼</samp> | |- | <samp>头足类</samp></samp> | |- | <samp>爬行类</samp> | |- | <samp>底栖类</samp> | |- | <samp>鱼类</samp> | |- | <samp>置顶爬行类</samp> | 用于贴图延伸到底板下面的爬行类。这类鱼总被贴到离玻璃最近的位置且置于其他鱼类上方,以避免排序问题。U |} |- | 2<br />3–5 | 空闲动画<br />猛冲动画 | 鱼类空闲(2)或猛冲(3–5)时使用的动画。为一系列空格分隔的帧,每个帧都是<samp>LooseSprites/AquariumFish</samp>贴图集中的贴图索引。每帧持续125毫秒。例如,[[黄貂鱼]]的空闲动画为<samp>70 70 70 71 71 72</samp>。 冲刺动画分列三个字段:起始(3)、保持(4)和结束(5)。 |- | 7 | 帽子位置 | 在此贴图上放置帽子的像素位置。为包含<samp>X</samp>和<samp>Y</samp>值的对象。自定义的[[模组:鱼类数据|鱼缸鱼类]]也能戴[[帽子]],就像原版游戏中的[[海胆]]。 |} ==参考== <references> <ref name="spawn_rate">鱼类上钩的概率计算涉及:<samp>Data/Locations.xnb</samp>、<samp>SpawnFishData::GetChance</samp>、<samp>Data/Fish.xnb</samp>、<samp>GameLocation::CheckGenericFishRequirements</samp>;通过这4个文件路径可以得到各个地方各种鱼类的基础数据并计算出钓上的概率</ref> </references> [[Category:模组]] [[en:Modding:Fish data]] [[pt:Modificações:Dados de Peixes]] [[ru:Модификации:Рыболовство]]
该页面使用的模板:
Template:T
(
查看源代码
)
返回至
模组:鱼类数据
。
导航菜单
个人工具
创建账户
登录
名字空间
模组
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
台灣正體
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
未翻译的页面
帮助:编辑入门
随机页面
链接
官方网站
官方论坛
官方商品
社交媒体
工具
链入页面
相关更改
上传文件
特殊页面
页面信息