| 	
  
 
UID3252586主题2阅读权限50帖子62精华3积分1031金钱618 荣誉40 人气0 在线时间9 小时评议0 
 
 帖子62精华3积分1031金钱618 荣誉40 人气0 评议0 
 |  
| (本功能完整了, 申请加精) 
 数字输入算盘框也就是我们买入兵粮啊军马啊的时候所出现的要求你输入购买数的那个算盘框.
 
 如果你对于EVM文件指令代码还不熟悉的话, 请参详下帖的1楼和12楼:
 http://game.ali213.net/thread-2621026-1-1.html
 
 ------------------------------------------------------------------------------------------------------
 3月11日的更新:
 1.解决了标题和单位输入字符串的问题.
 2.允许最大值和初始值代入变量.
 
 具体实现如下:
 
 太閤立志伝5イベントソース
 //此脚本说明
 チャプター:{//脚本开始
 イベント:事件1{//事件1 开始
 属性:何度でも
 発生契機:室内画面表示後(無効,無効)
 発生条件:{
 }//条件结束
 スクリプト:{ //执行开始
 代入x:(0)//用作存放算盘的输出结果
 代入y:(1000)//用作存放代入初始值的数据
 代入z:(10000)//用作存放代入最大值的数据
 武将死亡:(青山忠成)//原代码30 00 00 00, 将变为48 1D 03 00, 1D表示变量x
 武将死亡:(青山忠成)//原代码30 00 00 00, 将改作算盘输入的最小值, (需要用户自行设定, 不能代为变量)
 武将死亡:(青山忠成)//原代码30 00 00 00, 将改作1E 00 00 00, 即变量y, 表示初始值
 ひとりごと:[[這裏是標題\n這裏是標題第二行\n單位]]
 //这句话原代码以12 00 00 00打头, 将这四位改作1F 00 00 00, 即变量z, 表示最大值
 //从后面表示内容的代码中找到0A, 这个表示换行符\n, 找到第二个0A, 将其改为00.
 //如果你的标题只含一行, 则源代码中这句话应该写为
 //ひとりごと:[[這裏是標題\n\n單位]]
 //evm文件处理方法仍然是将第二个0A改为00
 //字符串中不能含有诸如(主人公), {二人称名前}, <年>之类的不确定的东西
 ひとりごと:[[我輸入的是<x>。]]//这句不用变化
 }//执行结束
 }//事件1 结束
 }//脚本结束
 
 先编译运行源代码, 可以得到这样的EVM结果:
 
 更改之后的EVM代码为:
 
 重新编译, 生成剧本, 进入游戏, 一切都完成了.
 运行结果:
 
 
 修正后的剧本:
 
 ------------------------------------------------------------------------------------------------------
 
 
 另外, 强烈希望版上的工具大牛为这个功能开发一个辅助性工具, 因为本功能需要向EVM文件中插入(还不是覆盖)两个BIG5码的字符串, 而且对字符串还有进一步的要求.
 
 数字对话框的指令代码是48, 参数有6个, 分别是:
 1.对话框输出值(变量a)
 2.数据最大值
 3.数据最小值
 4.初期值
 5.数据单位(字符串型)
 6.数字对话框标题(字符串型)
 
 先举一个例子, 源代码如下:
 
 太閤立志伝5イベントソース
 //此脚本说明
 チャプター:{//脚本开始
 イベント:事件1{//事件1 开始
 属性:何度でも
 発生契機:室内画面表示後(無効,無効)
 発生条件:{
 }//条件结束
 スクリプト:{ //执行开始
 代入a:(0)
 武将死亡:(青山忠成)
 武将死亡:(青山忠成)
 武将死亡:(青山忠成)
 武将死亡:(青山忠成)
 武将死亡:(青山忠成)
 武将死亡:(青山忠成)
 ひとりごと:[[我輸入的是<a>。]]
 }//执行结束
 }//事件1 结束
 }//脚本结束
 由于本功能至少需要二十四个字节来存放, 所以例子中用了六条武将死亡:(青山忠成)语句用作修改.
 将本段编译后结果如下:
 
 注意到由于执行六次让青山忠成死亡的代码, 文件中出现了六次30 00 00 00, 将其换为:
 48 06 00 00 00 00 00 00 00 00 00 00 10 00 00 00 A4 40 00 00 A4 41 00 00
 保存后编译EVM文件, 输出剧本文件, 进入新游戏, 任意进入一个设施, 大家就可以看到结果.
 
 下面将对这行代码作出解释:
 48:指令代号, 表示输入数字框.
 06:对话框输出值, 变量a,  执行这条语句之后, 用户输入的数据将被赋给先前代入的a, 此处可能可以改为07, 08等等以更新变量b, c, 但是我没有试过.
 00 00: 此处不能改变
 00 00 00 00:这四个字节用来表示输入数字的最小值, 此处设为0, 如果想设为3000的话, 3000的16进制是0BB8, 将这四个00改作 B8 0B 00 00就可以了, 注意是要倒着来的. 可以用变量代入, 但方法现在还没有搞清楚.
 00 00 00 00:这四个字节表示输入数字的初始值, 此处设为0, 想设为其它的话, 方法同上.
 10 00 00 00:这四个字节表示输入数字的最大值, 此处设为16.
 最麻烦的地方来了, 就是字符串的输入, 所以强烈要求为本功能写一个工具.
 首先字符串的字节数, 必须能被4整除, 而且必须以00结尾, 如果不足的话, 应以00补全.
 其次剧本中用的字符串必须是BIG5码的, 否则显示为乱码.
 为了简单起见, 本例中字符串我都只设为一个字.
 A4 40 00 00:表示数字的单位, 如"贯", "石", "匹"等, 此处设为汉字"一".
 A4 41 00 00:表示数字框的说明, 也就是显示在数字框左上角的"要给多少呢?"之类的字样, 注意字符最好不要超过25个字, 否则样子很难看. 允许换行, 也就是说本字符串中允许加入0D 0A表示的换行符. 此处设为汉字"乙".
 
 (八楼的版友说的很有道理, 后两个参数, 可以直接改EVM文件中会话的代码来实现, 出于识别的考虑, 用"自语"的命令最好.)
 
 好了解释完了, 欢迎大家试验.
 
 附件为例子剧本, 数据有所不同.
 
 本作未解决的问题: 如何让最小值, 初使值, 最大值能够代入变量的值? 而不用亲自给定?
 欢迎大家继续研究.
 
 我的QQ:249476488
 E-mail:nklinan@163.com
 
 [ 本帖最后由 nklinan 于 2010-9-12 11:51 编辑 ]
 | 
 附件: 你需要登录才可以下载或查看附件。没有帐号?注册   
总评分: 金钱 + 90 
 + 5 
 查看全部评分
 |