粤之贵族 大约16小时前 平静 的说 现在有点烦```   粤玥枼 11月30日 平静 的说 选择心情,颜色,分享唠叨,就在这输入!   粤harry26056 11月30日 平静 的说 选择心情,颜色,分享唠叨,就在这输入!   粤harry26056 11月30日 平静 的说 选择心情,颜色,分享唠叨,就在这输入!   粤凉茶丶1211 11月30日 平静 的说 选择心情,颜色,分享唠叨,就在这输入!   粤AOVODY 11月28日 平静 的说 已经删除那些广告   粤之贪狼 11月27日 平静 的说 ?怎么还有24号的啊,谁说下规则?   粤之贪狼 11月27日 生气 的说 工会谁在管网页的啊!!又有个顶着给号的名头在欺骗会员,id108932   粤之贪狼 11月27日 平静 的说 工会谁在管网页的啊!!又有个顶着给号的名头在欺骗会员,id108932   粤┬黑暗耶酥 11月27日 平静 的说 签到了~~~~~~~~~~~~~~`   [查看全部 973 条唠叨...]
Google
【南粤公会】主力进驻永恒之塔-提供万元点卡奖励,点击进入登记统计!
  论坛热门游戏导航 朋友买卖 争车位 潮男潮女 心里测试 武林三国 Flash小游戏 论坛奖励任务
300QQ币火热兑换中 发贴就能赚QQ币
打印

汉之云脚本研究(附带MOD制作工具)

本帖地址http://bbs.nyzd.net/viewthread.php?tid=96795

 点击在百度上搜索更多关于 汉之云脚本研究(附带MOD制作工具)

汉之云脚本研究(附带MOD制作工具)




汉之云使用了Lua做为脚本语言,版本是5.0。脚本存放在Text目录下的两个.C01文件中。
将其中的内容解压后就可以得到lua编译生成的二进制文件。可以使用lua附带的luac.exe -l还原为伪代码

这同时也意味着,这代轩辕剑的剧情将史无前例的能被玩家所定制!只要我们修改lua脚本就可以增删剧情 :-)

经过6天的努力,终于完全重建了汉之云的脚本源代码
附件里提供了MOD制作工具,以后有时间会详细介绍汉之云的脚本系统

免责声明
附件中提供的脚本源代码利用逆向工程重建,代码的版权属游戏公司所有。这里仅供玩家个人学习研究和制作MOD之用。任何对代码的非法使用均与本人无关


使用方法:
1、下载Bin.rar和Source.rar,解压到同一目录下
2、修改Source目录下的lua脚本
3、使用compile_main或者compile_fight重新生成C01文件(生成的C01文件在当前目录下)
4、替换游戏Text目录下的C01文件(注意备份原始文件)
5、进入游戏查看效果

附录:
汉之云怪物、物品和奇术全资料http://game.ali213.net/viewthread.php?tid=1881266
汉之云脚本编写简明教程http://game.ali213.net/viewthread.php?tid=1884574

查看全部内容:请登录或者注册

本论坛所有积分均可兑换各类游戏点卡、游戏帐号、QQ会员、QQ卡等..还有大量礼品等您拿,南粤因你加入更精彩!

楼主最新帖子

TOP




继续研究....
汉之云脚本研究(附带MOD制作工具)
http://game.ali213.net/thread-1857825-1-4.html

建议大家在编写脚本之前先认真阅读一下原始的脚本代码,以便能够更好的理解整个游戏系统和如何实现各种效果。
下面就结合原始的脚本代码,介绍一下如何编写自己的MOD脚本。

首先,先来看一下原始的脚本文件各自的功能:

main目录
0000?:基础函数库
002??:主线序章
003??:主线第一章
004??:主线第二章
005??:主线第三章
006??:主线第四章
1000?:游戏基本元素
101??:普通支线剧情
108??:其它剧情(商人/迷宫/DOMO)
109??:伙伴支线剧情
110??:场景切换

fight目录
F001:基础函数
F002:普通战斗
F003:伙伴剧情战斗
F004:支线剧情战斗
F005:主线剧情战斗

一、基础修改

我们以“存档点”部分的代码为例,详细解析一下如何实现最基本的修改
打开10000c.lua,我们可以找到如下的代码:


[Copy to clipboard] [ - ]
CODE:
restore_motion = function()
   local mainid = get_mainrole()
   local mainname = get_rolename(mainid)
   restore_team()
   msginfo("全身籠罩一股清風")
end

restore_save = function()
   restore_motion()
   restore_save_q()
end

restore_save_q = function()
   selmsg(2, "選項:")
   setselect(1, "1.存檔")
   setselect(2, "2.取消")
   sleep(3)
   waitanykey()
   restore_save_ans(getselectanwser())
end

restore_save_ans = function(x)
   local mainid = get_mainrole()
   local mainname = get_rolename(mainid)
   if x == 1 then
      call_save()
   elseif x == 2 then
      restore_team()
   else
      restore_save_q()
   end
end


当我们在存档点按空格键时,就会触发restore_save函数(具体参见10803c.lua中的t7901函数)
它一共做了两件事情。第一,调用restore_motion函数恢复全员的状态;第二,就是弹出选择框,提示你是否需要存档。
弹出对话框的函数是selmsg。它有两个参数,第一个指定对话框中有多少个选择项,第二个是对话框的标题
你可以使用setselect设置选择项的具体内容,getselectanswer函数用于获取用户的选择。
之后你就可以在restore_save_ans里根据用户的选择进行相应的处理了
在支线剧情中,我们会经常看到选择框的身影

这里我给出一个修改的实例,大家可以借此熟悉一下lua脚本的语法(if、for、数组)和汉之云提供的一些函数(additem、addsprite、addmoney分别用于增加物品、怪物和金钱,join用于加入队员)


[Copy to clipboard] [ - ]
CODE:
restore_save_q = function()
   selmsg(3, "選項:")
   setselect(1, "1.存檔")
   setselect(2, "2.作弊")
   setselect(3, "3.取消")
   sleep(3)
   waitanykey()
   restore_save_ans(getselectanwser())
end

restore_cheat_q = function()
   selmsg(6, "選項:")
   setselect(1, "1.怪物")
   setselect(2, "2.物品")
   setselect(3, "3.裝備")
   setselect(4, "4.金錢")
   setselect(5, "5.隊伍")
   setselect(6, "6.取消")
   sleep(3)
   waitanykey()
   restore_cheat_ans(getselectanwser())
end

restore_cheat_ans = function(x)
   local mainid = get_mainrole()
   local mainname = get_rolename(mainid)
   if x == 1 then
      local mon = {17, 14, 15, 15, 16, 16, 14, 12, 7, 6}
      local a = table.getn(mon)
      for i = 1, a do
         for j = 1, mon
do
            addsprite(i * 100 + 900 + j, 1)
         end
      end
   elseif x == 2 then
      for i = 6001, 6028 do
         if i ~= 6024 then
            additem(i, 99)
         end
      end
      for i = 6039, 6046 do
         if i ~= 6040 then
            additem(i, 99)
         end
      end
   elseif x == 3 then
      local i1 = {3001, 3018, 3021, 3041, 3061, 3081, 3101, 4001, 4021, 4041, 5001, 5051}
      local i2 = {3016, 3018, 3034, 3055, 3074, 3090, 3109, 4011, 4030, 4051, 5024, 5063}
      local a = table.getn(i1)
      local b = table.getn(i2)
      local num = 11
      if a == b then
         for i = 1, a do
            for j = i1
, i2 do
               additem(j, num)
            end
         end
      end
   elseif x == 4 then
      addmoney(1000000)
   elseif x == 5 then
      for i = 1, 11 do
         join(i)
      end
   elseif x == 6 then
   else
      restore_cheat_q()
   end
end

restore_save_ans = function(x)
   local mainid = get_mainrole()
   local mainname = get_rolename(mainid)
   if x == 1 then
      call_save()
   elseif x == 3 then
      restore_team()
   elseif x == 2 then
      restore_cheat_q()
   else
      restore_save_q()
   end
end


二、剧情修改
剧情修改相对比较复杂,所以我们先从人物对话开始介绍。
下面是飞羽军营中和“徐豐”对话的相应代码(简化过了):


[Copy to clipboard] [ - ]
CODE:
t341 = function()
   local mainid = get_mainrole()
   local mainname = get_rolename(mainid)
   chang_role_dir_torole(mainid, 341, 0)
   lock_player(1)
   set_watch_each(mainid, 341)
   if isfon(1002) == 1 and isfon(1017) == 0 then
      local a = random(2)
      if a == 0 then
         facetotalk(341, "徐豐", "聽說供應曹賊糧草的是在邽嶺山中的砦堡!")
      else
         facetotalk(341, "徐豐", "邽嶺就在我軍營外幾里處。")
      end
   else
      if isfon(1017) == 1 and isfon(1053) == 0 then
         facetotalk(341, "徐豐", "我們的補給從漢中運來,路途遙遠。不像曹賊,邽嶺以北幾乎是援助他們的砦堡。")
      else
         if isfon(1101) == 1 and isfon(1151) == 0 then
            facetotalk_noback(341, "徐豐", "我們現在就在賊將郭淮、費曜駐守的上邽城外。")
            chatinfo(341, "徐豐", "料想他們怎麼也想不到,我們飛羽部隊會在這地方。")
            chang_role_dir(341, 0, 1)
         end
      end
   end
   lock_player(0)
   set_watch_back(mainid, 341)
end


我们可以看到,和NPC对话之前通常会作两件事情:
第一,调用chang_role_dir_torole,使得NPC朝向主角;第二,调用lock_player将主角锁定
然后就是一长串根据isfon的if...else...了。
isfon是is flag on的缩写。每当我们进行一次对话,完成一次任务的时候,系统都会使用fon函数进行记录。之后就可以使用isfon来判断对话是否发生,任务是否完成,等等。
这里,我们和"徐豐"对话的时候,系统会根据flag的值来推断玩家目前处于剧情的哪个阶段,并显示相应的对话
(比如,游戏一开始,和多聞使对话之后就会设置1002这个flag)

isfon和fon对于主线或者支线的剧情非常重要。可以说是我们制作MOD剧情必不可少的函数
譬如,我们完成NPC交待的任务,返回领取奖励的时候,系统就会根据flag来测试相应任务是否完成。


[ 本帖最后由 粤阿步 于 2008-1-28 01:35 编辑 ]

TOP




我晕,看不懂```

TOP




顶个~,真是不错 哈哈!

TOP

返回顶部
AYBlue

Processed in 0.069391 second(s), 9 queries.

当前时区 GMT+8, 现在时间是 2008-12-2 14:48 粤ICP备06033590号

清除 Cookies - 联系我们 - 南粤之巅游戏公会 - Baidu-bbs - Archiver