铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 2005|回复: 19

Kdef转成lua脚本

  [复制链接]
发表于 2013-3-28 16:32 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
本帖最后由 蓝烟清 于 2013-3-29 16:22 编辑

刚写了一个程序,把事件全部转成lua脚本其实事件脚本化是大势所趋,因为脚本可以实现很多编辑器无法达到的功能


这是龙的传人所有的脚本,我大致测试了一下,应该没有太大问题。
对于开发者来说可能会有些用,下载之后覆盖到CEvent目录下就可以了、
http://pan.baidu.com/share/link?shareid=357588&uk=3258208085




如果没有问题,我再把转化的代码发出来给大家,也方便以后的扩展
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-3-28 17:57 | 显示全部楼层
总算是等到了,晚上有空时先试试
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-3-28 19:44 | 显示全部楼层
本帖最后由 慕容老恭 于 2013-3-28 19:45 编辑

这个给力,可以更有效率的编辑事件了~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-3-28 20:08 | 显示全部楼层
这样事件就统一起来了,也方便修改和扩展

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-3-28 22:06 | 显示全部楼层
本帖最后由 hnc 于 2013-3-28 22:09 编辑

感谢感谢大感谢~~蓝大超威武%>_<%期待程序,希望快点发出来~~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-3-29 04:03 | 显示全部楼层
同时显示两个动画的instruct_26函数输出有误,擂鼓山剧情果断跳出,事件600
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-3-29 04:13 | 显示全部楼层
另外,程序在转换事件时能否添加一些简单的注释?不求细致到显示xx增加攻击力多少,只要注释个离队,判断攻击力之类的就成,不然看着也太蛋疼了,老是得对照
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-3-29 04:46 | 显示全部楼层
啊您老人家太帅了,三跪九叩之
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2013-3-29 09:09 | 显示全部楼层
回复 苍天泰坦 的帖子

非常感谢提供。
等有时间,我把代码注释加进去
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-3-29 09:17 | 显示全部楼层
convertkdef2.lua

  1. --转换fishedit 输出的kdefout.txt为lua函数。
  2. --对里面的所有事件进行解析。每个事件生成一个函数:名字为 oldevent_238();
  3. --暂时只处理标准指令,指令函数名字为 instruct_23(xxx);
  4. labellevel=0;

  5. --指令解析
  6. function gen_instruct(k)
  7.     local i,j=string.find(line[k],"说明:")
  8.     local note=string.sub(line[k],j+1);
  9.     local instruct=string.sub(line[k],1,i-1);
  10.     local data={};
  11.     local num=0;
  12.     local start=1;
  13.     while true do
  14.         local i,j=string.find(instruct,"[+-]?%d+",start);
  15.         if i~=nil then
  16.             data[num]=tonumber(string.sub(instruct,i,j));
  17.             num=num+1;
  18.             start=j+1;
  19.         else
  20.             break;
  21.         end
  22.     end

  23.     if num>0 then
  24.         if data[0]==-1 then
  25.             outp:write("--end\n\n");
  26.         elseif data[0]==7 then
  27.             outp:write(string.rep("    ",labellevel),"do return; end\n");
  28.         else
  29.             local jump=0;
  30.             local value="";
  31.             local i,j=string.find(note,"是则跳转到");
  32.             if i~=nil then
  33.                 jump=1;
  34.                 value="false";
  35.             end
  36.             local i,j=string.find(note,"否则跳转到");
  37.             if i~=nil then
  38.                 jump=2;
  39.                 value="true"
  40.             end

  41.             if jump==0 then
  42.                 outp:write(string.rep("    ",labellevel));
  43.                 fun(data,num);
  44.                 outp:write(";   --",note,"\n");
  45.             else
  46.                 outp:write("\n",string.rep("    ",labellevel));
  47.                 outp:write("if ");
  48.                 fun(data,num);
  49.                 outp:write(" ==",value," then ");
  50.                 labellevel=labellevel+1;
  51.                 outp:write("   --",note,"\n");
  52.         end

  53.         end

  54.     else
  55.         labellevel=labellevel-1;
  56.         outp:write(string.rep("    ",labellevel),"end    --",note,"\n\n");
  57.     end

  58. end

  59. function fun(data,num)
  60.     outp:write(string.format("instruct_%d(",data[0]));
  61.     if num>1 then
  62.         outp:write(string.format("%d",data[1]));
  63.         for i=2,num-1 do
  64.             outp:write(string.format(",%d",data[i]));
  65.         end
  66.     end
  67.     outp:write(string.format(")",data[1]));
  68. end



  69.     inp=io.open("kdefout.txt","r");

  70.     print("start");
  71.     line={};
  72.     local n=0;
  73.     while true do
  74.         local s=inp:read("*l");
  75.         if s==nil then
  76.             break;
  77.         end
  78.         if #s>0 then
  79.             line[n]=s;
  80.             n=n+1;
  81.         end
  82.     end
  83.     inp:close();

  84.     outp=io.open("kdefnew.lua","w");
  85.     for k=0,n-1 do
  86.         local i,j=string.find(line[k],"事件[+-]?%d+");
  87.         if i==1 then          --第一个位置
  88.             local i,j=string.find(line[k],"[+-]?%d+");      --匹配数字
  89.                         outp:close();
  90.             outp=io.open(string.format("oldevent\\oldevent_%d.lua",tonumber(string.sub(line[k],i,j))),"w");
  91.             outp:write(string.format("--function oldevent_%d()\n",tonumber(string.sub(line[k],i,j))));
  92.             labellevel=1;
  93.         else
  94.             gen_instruct(k);
  95.         end
  96.     end

  97.     outp:close();


  98.     inp=io.open("talk.txt","r");
  99.     outp=io.open("oldtalk.grp","w");
  100.     local s=inp:read("*l");
  101.     while true do
  102.         local s=inp:read("*l");
  103.         if s==nil then
  104.             break;
  105.         end
  106.         if #s>0 then
  107.             local i,j=string.find(s,"[+-]?%d+");      --匹配数字
  108.             local id=tonumber(string.sub(s,i,j))
  109.             i,j=string.find(s,'"%x+",',j+1);        --匹配带引号的数字
  110.             i,j=string.find(s,'".*"',j+1);          --匹配最后的字符串
  111.             local talk=string.sub(s,i+1,j-1)
  112.                         local newtalk=string.gsub(talk,'""','"');           --把字符串中的""替换成"
  113.             outp:write(string.format('%s\n',newtalk));
  114.         end
  115.     end
  116.     inp:close();
  117.     outp:close();
复制代码
调用方法

  1. luac5.1 -o convertkdef2.lua
复制代码
可能需要过一遍sfe,改下应该就能运行
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2013-3-29 10:12 | 显示全部楼层
回复 KA 的帖子

我没有用lua,我纯C语言写的导出。。。。
这样不需要借助其它工具

点评

鱼帝,是先用他的FE工具,把事件和对话导出来,才可以生成事件。但是FE似乎用不了新的对话。。。  发表于 2013-3-29 14:16
KA
(俺的意思是鱼帝貌似也写过而已)  发表于 2013-3-29 12:00
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2013-3-29 16:23 | 显示全部楼层
回复 苍天泰坦 的帖子

改好了,修复了一些指令的错误。。。
还有加了注释,因为没有读R数据,所以没有具体的物品或者人物名称数据
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-3-29 17:18 | 显示全部楼层
求助,请问
luac5.1 -o convertkdef2.lua
是添加在哪个文件里啊

点评

新建一个批处理文件,然后写进去就可以了  发表于 2013-3-29 17:38
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-3-29 17:39 | 显示全部楼层
回复 蓝烟清 的帖子

蓝大威武,晚上接着测试
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-3-29 18:18 | 显示全部楼层
本帖最后由 zengMF 于 2013-3-29 18:20 编辑

这个好,赞一个。。

能否转50指令的Kdef文件?如再战江湖这些用很多50指令的kdef文件??

如果能直接转,当然好,鱼大的LUA代码要先导出txt文本,经常因为文本格式问题出错。而且也不支持50指令的导出。。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2013-3-29 18:27 | 显示全部楼层
回复 hnc 的帖子

必须先用FE工具,导出对话文件和事件文件,然后才可以用那个lua来执行

点评

hnc
话说upedit导出的不行的吧...请问用的是什么版本的FE,主要是设置ini文件后,进入之后修改项都是灰色的  发表于 2013-3-29 18:37
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2013-3-29 18:37 | 显示全部楼层
回复 zengMF 的帖子

50指令。。。没得去研究。。
现在都在弄复刻版了

最好还是找KA, 大凯阿
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-3-29 18:58 | 显示全部楼层
本帖最后由 hnc 于 2013-3-29 18:59 编辑

果然还是使用了笨办法,先把事件文件和对话文件扔到复刻原版上再用SFE导出来...话说有没有办法把 instruct_1 直接替换成蓝大CEVENT文件夹里的talkex形式啊,新用UPEDIT添加的对话用LUA格式在游戏里显示的是乱码的说~~好像是因为oldtalk和现在用的talk文件有差异导致的...

点评

你直接用文本替换的方式不就好了  发表于 2013-4-3 15:17
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-4-3 10:29 | 显示全部楼层
啊,发现蓝巨又做了新的东东?有两个小问题
1. 这个和鱼神之前那个转换程序主要有啥不同?
2. 很多MOD(苍龙等)的不是都有全事件的lua文件了吗,这个主要是给其他没转换过的Kdef用的?
资质鲁钝的人诚心请教  
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2013-4-3 11:01 | 显示全部楼层
回复 StarShine 的帖子

之前的转换有几个问题, 必须要先下FE工具,把事件和对话导出,然后才能转换这样就必须借助FE工具,而且FE工具导出来的对话会是乱码

另外FE工具导出来的都是instruct的函数,没有个性化的函数设置。

之前的MOD大部分都是用kdef,小部分是用全局变量实现


【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-11-22 05:24

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表