louyihua 发表于 2011-1-14 22:53

[MOD]收取“御剑飞行”和“沦波舟”的研究报告

本帖最后由 louyihua 于 2011-1-14 22:59 编辑

书信“御剑飞行”和“沦波舟”的研究报告在目前游戏中是无法正常获取的,早在去年9月已经有人提出来了。

但是,对于MOD党来说,收封信还是可以的:自己动手,丰衣足食。

首先,分析一下信件收不到的原因:
这两封信件均不属于“主线信件”,因此会由分散在各个场景中的showMail函数负责派发给玩家。
在解包后的脚本Scripts\Q07.LU A(安陆县场景脚本)中,可以看到showMail函数开始的几行如下:

查阅解包后的data.table文件可知,这两个ID(134和135)正是信件“御剑飞行研究报告”和“沦波舟研究报告”的信件ID。那既然这两封信件没有收到,必然是其sendMail函数没有被执行到的缘故;该函数没有执行到,必然是上述两条if语句的条件得不到满足所致;而这两条if语句的条件很简单,是一个对剧情变量(GetMainStory())的判断和一个对场景次地点(minor)判断的条件作逻辑“与”得来的,也就是说如果其中一个条件得不到满足,整个if语句的测试就会失败。回头再查data.table,会发现上述if语句中的两个剧情变量值91600和130100分别对应剧情“第二章:感恩”和“第三章:返回安陆”,也就是说攻略本上关于两个词条获得时间的说明并无问题;而其场景次地址的值“Q13N01”查data.table可知是安陆县的长庚书院。两个条件加起来,应该是说在特定的剧情点时,进入长庚书院将会收到这两封信(这里攻略本上把地点说错了)。
可是,遗憾地是,即使在正确的时间进入了正确的地点,依然没有信件收到……那问题出在哪了呢?显然GetMainStory是一个全局定义的函数,到处都在用,它出错是不可能的,唯一的可能就是minor变量的值不对,不是条件中测试的这个值,那它的值究竟是什么呢?等等,minor这个变量在哪定义了?明明,明明没有在这个函数里定义嘛~貌似,它也不是全局变量哦~这么着……它不就得是空值(nil)了么?唉……一个nil怎么会和“Q13N01”相等呢……难怪各位玩家从来也收不到书信了!(写这部分的是哪位程序员TX啊?是不是C语言写惯了习惯让编译器帮检查变量有无定义?像LU A这种动态语言变量是不能乱写滴~~~赶紧蹲墙角画圈圈去!)

好,既然原因找到了,那怎么解决呢?其实,说起来很简单,既然minor变量的值是nil,那咱就用正确的方法得到minor呗,这个方法是神马捏……?对,你答对了,就是“getMinor()”,所以说,只要用“getMinor()”分别替换这两处“minor”,就OK了。不信?有图为证:

具体MOD方法:
1、解包scripts.zpk.37,打开q07.lu a,将第2142行和2146行的两个单词“minor”均替换成“getMinor()”(都不带引号啦!),保存。(如果版本低于1.3.7,则请根据自己的版本选择替换1.1.6/1.0.4/1.0.3/1.0.1/1.0.0中的相应部分)。
2、在游戏的Data下建一个文件夹,名为“Scripts”,之后将上述修改后的q07.lu a复制到该文件夹中。
3、下载此处的MOD辅助补丁,按说明解压到游戏目录中(啦啦啦,广告时间~~~);或者,如果不愿意用此补丁的,可以参考此文制作完整的Scripts目录的MOD包。
4、进入游戏,读入相应剧情点的存档,进入长庚书院。嘿嘿,看到什么了吧?

zhuoyu 发表于 2011-1-14 23:02

顶一下,支持技术贴

Zx2 发表于 2011-1-15 00:01

LZ可以给MOD过后的载图不?长庚书院里有增加什么...

909b3 发表于 2011-1-15 00:07

程序员泪流满面

maocong 发表于 2011-1-15 14:20

技术贴么民间MOD出了没呢{:3_167:}

grimghosthell 发表于 2011-1-15 21:53

顶技术贴!!1

浮生客 发表于 2011-1-15 23:04

支持,辛苦了

lixionglz 发表于 2011-1-16 14:42

汗水,居然犯这种错误,古剑的程序编译时不检查变量是否已定义过吗?

guzheng889900 发表于 2011-1-19 12:37

晕,没定义过就用。。。。。
{:3_54:}这种错误貌似我也经常犯啊

螃蟹横行 发表于 2011-1-19 15:08

支持楼主发布研究成果
页: [1]
查看完整版本: [MOD]收取“御剑飞行”和“沦波舟”的研究报告