游侠NETSHOW论坛

标题: 剧本编辑突破再告捷!数字输入算盘框的出现!(完整版) [打印本页]

作者: nklinan    时间: 2009-3-9 14:45:04     标题: 剧本编辑突破再告捷!数字输入算盘框的出现!(完整版)

(本功能完整了, 申请加)

数字输入算盘框也就是我们买入兵粮啊军马啊的时候所出现的要求你输入购买数的那个算盘框.

如果你对于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结果:
[attach]1796898[/attach]
更改之后的EVM代码为:
[attach]1796899[/attach]
重新编译, 生成剧本, 进入游戏, 一切都完成了.
运行结果:
[attach]1796900[/attach]

修正后的剧本:
[attach]1794290[/attach]
------------------------------------------------------------------------------------------------------


另外, 强烈希望版上的工具大牛为这个功能开发一个辅助性工具, 因为本功能需要向EVM文件中插入(还不是覆盖)两个BIG5码的字符串, 而且对字符串还有进一步的要求.

数字对话框的指令代码是48, 参数有6个, 分别是:
1.对话框输出值(变量a)
2.数据最大值
3.数据最小值
4.初期值
5.数据单位(字符串型)
6.数字对话框标题(字符串型)

先举一个例子, 源代码如下:

太閤立志伝5イベントソース
//此脚本说明
チャプター:{//脚本开始
    イベント:事件1{//事件1 开始
        属性:何度でも
        発生契機:室内画面表示後(無効,無効)
        発生条件:{
        }//条件结束
        スクリプト:{ //执行开始
            代入a:(0)
            武将死亡:(青山忠成)
            武将死亡:(青山忠成)
            武将死亡:(青山忠成)
            武将死亡:(青山忠成)
            武将死亡:(青山忠成)
            武将死亡:(青山忠成)
            ひとりごと:[[我輸入的是<>]]
        }//执行结束
    }//事件1 结束
}//脚本结束
由于本功能至少需要二十四个字节来存放, 所以例子中用了六条武将死亡:(青山忠成)语句用作修改.
将本段编译后结果如下:
[attach]1794439[/attach]
注意到由于执行六次让青山忠成死亡的代码, 文件中出现了六次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 编辑 ]
作者: aiyoka    时间: 2009-3-9 14:51:46

沙发!   LZ的出现给太阁区带来了活力,历史性的突破,没想到我竟然见证到了
作者: rockymei2k    时间: 2009-3-9 15:54:20

呵呵,一定要坚持探索下去亚!坚决支持楼主所做的工作!
作者: rockymei2k    时间: 2009-3-9 17:57:43

NB的人总是高处不胜寒,呵呵,支持楼主,再顶一下!
盼望楼主能发布数字输入的技术!!
作者: two001    时间: 2009-3-9 18:00:44

樓主再接再厲

另外~最好把那種紅色“停止”按鈕打頭的選擇菜單給研究出來.....

多謝多謝~
作者: fe2plus    时间: 2009-3-9 18:07:24

牛人果然牛人啊,四大难题刷刷干掉两个!膜拜!
作者: nklinan    时间: 2009-3-10 07:33:17

版主怎么也不加个亮啊 呕心沥血的东西呀!
作者: rockymei2k    时间: 2009-3-10 08:04:08     标题: 回复 #1 nklinan 的帖子

支持楼主,不知道楼主是否尝试过用4-5个武将死亡指令加上一个旁白指令来尝试一下,因为旁白的字符串也是这样处理的,就可以不用输入字符串了。
作者: nklinan    时间: 2009-3-10 08:49:47     标题: 回复 #8 rockymei2k 的帖子

嗯! 说的很有道理! 不过我相信如果文章看懂的话, 读者自己也就能够那样处理了!
作者: bigmojin    时间: 2009-3-10 09:07:59

……不错,又是新发现,但是……我觉得这个对剧本作用不大吧?完全可以用旁白金钱给予、用掉多少钱的形式啊?
作者: nklinan    时间: 2009-3-10 09:21:13     标题: 回复 #10 bigmojin 的帖子

看样子你没懂数字对话框的意思, 那是游戏中买入军马兵粮指定日数要求输入数据的时候弹出来的一个有算盘的对话框,
作者: two001    时间: 2009-3-10 10:05:15

原帖由 bigmojin 于 2009-3-10 09:07 发表
……不错,又是新发现,但是……我觉得这个对剧本作用不大吧?完全可以用旁白金钱给予、用掉多少钱的形式啊?



怎么可能用處不大呢!
沒有這個的話 如果想要輸入複雜的數字(譬如劇本的自編軍團的軍糧、鐵炮、軍資等物資),
就只能使用呆板的具體數,亦或者是顯示0~9 這十個數字同時出現的複雜選擇框。

但是現在有了這個,不但這些步驟可以省略掉,而且很多功能都可以有進一步的提升。

另外……樓主能不能把"贯", "石", "匹"等已之代碼告訴我們呢?

多謝多謝!!

[ 本帖最后由 two001 于 2009-3-10 10:34 编辑 ]
作者: ericsim    时间: 2009-3-10 15:53:13

军团编制支持变量么?
一直没尝试过。问问LS的。
作者: two001    时间: 2009-3-10 16:25:55

恩 支持
只要是填入具體數字的都支持

会話:(人物A,主人公)[[請選擇軍備的數量:]]
選択:[[全部清除]][[軍馬:<a>匹]][[鐵炮:<b>挺]][[大筒:<c>筒]][[確定]]
分岐:(0){
    代入a:(0)
    代入b:(0)
    代入c:(0)
}
分岐:(1){
    場合別:(a){
        場合分岐:(0){
            調査:(城::城B.軍馬)>=(4000)
            分岐:(真){
                代入a:(4000)
            }
            分岐:(偽){
                会話:(人物A,主人公)[[主公,庫存不足。]]
            }
        }
        場合分岐:(4000){
            調査:(城::城B.軍馬)>=(8000)
            分岐:(真){
                代入a:(8000)
            }
            分岐:(偽){
                会話:(人物A,主人公)[[主公,庫存不足。]]
            }
        }
        場合分岐:(8000){
            調査:(城::城B.軍馬)>=(12000)
            分岐:(真){
                代入a:(12000)
            }
            分岐:(偽){
                会話:(人物A,主人公)[[主公,庫存不足。]]
            }
        }
        場合分岐:(12000){
            調査:(城::城B.軍馬)>=(16000)
            分岐:(真){
                代入a:(16000)
            }
            分岐:(偽){
                会話:(人物A,主人公)[[主公,庫存不足。]]
            }
        }
        場合分岐:(16000){
            調査:(城::城B.軍馬)>=(20000)
            分岐:(真){
                代入a:(20000)
            }
            分岐:(偽){
                会話:(人物A,主人公)[[主公,庫存不足。]]
            }
        }
        場合分岐:(20000){
            代入a:(0)
        }
    }
}
分岐:(2){
    場合別:(b){
        場合分岐:(0){
            調査:(城::城B.鉄砲)>=(4000)
            分岐:(真){
                代入b:(4000)
            }
            分岐:(偽){
                会話:(人物A,主人公)[[主公,庫存不足。]]
            }
        }
        場合分岐:(4000){
            調査:(城::城B.鉄砲)>=(8000)
            分岐:(真){
                代入b:(8000)
            }
            分岐:(偽){
                会話:(人物A,主人公)[[主公,庫存不足。]]
            }
        }
        場合分岐:(8000){
            調査:(城::城B.鉄砲)>=(12000)
            分岐:(真){
                代入b:(12000)
            }
            分岐:(偽){
                会話:(人物A,主人公)[[主公,庫存不足。]]
            }
        }
        場合分岐:(12000){
            調査:(城::城B.鉄砲)>=(16000)
            分岐:(真){
                代入b:(16000)
            }
            分岐:(偽){
                会話:(人物A,主人公)[[主公,庫存不足。]]
            }
        }
        場合分岐:(16000){
            調査:(城::城B.鉄砲)>=(20000)
            分岐:(真){
                代入b:(20000)
            }
            分岐:(偽){
                会話:(人物A,主人公)[[主公,庫存不足。]]
            }
        }
        場合分岐:(20000){
            代入b:(0)
        }
    }
}
分岐:(3){
    場合別:(c){
        場合分岐:(0){
            調査:(城::城B.大筒)>=(400)
            分岐:(真){
                代入c:(400)
            }
            分岐:(偽){
                会話:(人物A,主人公)[[主公,庫存不足。]]
            }
        }
        場合分岐:(400){
            調査:(城::城B.大筒)>=(800)
            分岐:(真){
                代入c:(800)
            }
            分岐:(偽){
                会話:(人物A,主人公)[[主公,庫存不足。]]
            }
        }
        場合分岐:(800){
            調査:(城::城B.大筒)>=(1200)
            分岐:(真){
                代入c:(1200)
            }
            分岐:(偽){
                会話:(人物A,主人公)[[主公,庫存不足。]]
            }
        }
        場合分岐:(1200){
            調査:(城::城B.大筒)>=(1600)
            分岐:(真){
                代入c:(1600)
            }
            分岐:(偽){
                会話:(人物A,主人公)[[主公,庫存不足。]]
            }
        }
        場合分岐:(1600){
            調査:(城::城B.大筒)>=(2000)
            分岐:(真){
                代入c:(2000)
            }
            分岐:(偽){
                会話:(人物A,主人公)[[主公,庫存不足。]]
            }
        }
        場合分岐:(2000){
            代入c:(0)
        }
    }
}
軍団編成:(主人公軍団,主人公拠点,拠点攻撃,城A,無効,主人公拠点,主人公,人物C,人物C,人物C,人物C,10000,20000,a,b,c,20000,0)



終於可以把這種狗血的設計給剔除掉了..........

[ 本帖最后由 two001 于 2009-3-10 16:33 编辑 ]
作者: ericsim    时间: 2009-3-10 16:37:13

很好很好。这下完美了。
哈哈哈哈哈哈哈哈哈哈
作者: two001    时间: 2009-3-10 16:41:43


突然想起來,可以用這個算盤弄個新一代的驗證密碼

作者: zhuoludian    时间: 2009-3-10 18:55:40

昨天我还说起这个,今天就已经解决了嘛?

nklinan 到底是何妨神圣,真神人也,顶礼膜拜。
作者: nklinan    时间: 2009-3-10 20:01:43     标题: 回复 #17 zhuoludian 的帖子

我昨天在你说起之前就已经解决了, 哈哈, 只是你没看到而已
作者: ericsim    时间: 2009-3-10 20:04:22

LS的快去更新发卡 [汗水]
作者: Julian1212    时间: 2009-3-10 21:10:56

原来LZ真的潜得很深很深,占楼支持……
作者: nklinan    时间: 2009-3-11 10:41:41

完整版的出来了, rockymei兄过目!
作者: sutre    时间: 2009-3-11 12:16:53

神帖....膜拜LZ!
真是为我等造福啊! [谢谢]
作者: ericsim    时间: 2009-3-11 12:55:21

有了据点名更新和人物发卡的功能后,现在发现一个尴尬的问题,无法调查人物的卡片持有状态和据点名的变更状态。大家再研究一下?
作者: rockymei2k    时间: 2009-3-11 13:00:36

原帖由 nklinan 于 2009-3-11 10:41 发表
完整版的出来了, rockymei兄过目!


太强悍了,老大,祝贺一下!工具会随后更新,没有这么快,呵呵,您的手太快了亚
作者: nklinan    时间: 2009-3-11 14:51:34     标题: 回复 #24 ericsim 的帖子

哦, 调查的扩充命令啊, 这个是挺麻烦的...
作者: rockymei2k    时间: 2009-3-11 17:53:09     标题: 回复 #26 nklinan 的帖子

工具已经更新了!可以支持多出来的变量了,就是算盘输入的命令格式变了一点。
作者: nklinan    时间: 2009-3-11 19:05:36     标题: 回复 #27 rockymei2k 的帖子

即能支持常量输入又能支持变量输入, 的确是好东西
作者: abc007king    时间: 2009-3-11 22:53:41

神人啊,真是神人
作者: xzs333    时间: 2009-3-16 09:33:16

编代码,太复杂了我就做个忠实的玩众吧
作者: 驴子123    时间: 2009-4-6 18:14:47

你们 太牛逼了
作者: 小龙女    时间: 2009-4-11 07:40:03

LZ好牛哦~偶像
作者: doujiao    时间: 2009-4-12 09:10:48

太厉害了!!!LZ,真神人!!!这绝对是历史性的突破!




欢迎光临 游侠NETSHOW论坛 (https://game.ali213.net/) Powered by Discuz! X2