铁血丹心

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

[lua复刻] 50指令新对话lua版

[复制链接]
发表于 2010-5-24 09:01 | 显示全部楼层 |阅读模式
本帖最后由 KA 于 2010-5-24 13:47 编辑

由于lua版本中50指令对话的效率实在是太低了(- -),于是本人写了一个lua的新对话指令,用法与50指令对话相同
效果图在此

代码

  1. function talk50(id1,id2,id3,id4)

  2.         local namex,namey,headx,heady,talkx,talky;
  3.         local talkwidth,talkheight;
  4.         local txtnum,txtline;
  5.         local talkaddr,headop,talkcolor;

  6.         local s=ReadTALK(id2);
  7.         local startup=1;local endup=string.len(s);       
  8.         talkcolor=math.modf(id4/100);
  9.         headop=(id4%100)/10;
  10.         talkaddr=id4%10;
  11.         local fontsize=18;
  12.         local color;
  13.         local color0=28515;
  14.         local color1=28421;
  15.         local color2=28435;
  16.         local color3=28563;
  17.         local color4=28466;
  18.         local color5=28450;
  19.        
  20.         if talkcolor==0 then
  21.                 color=ReadCol(color0%256);
  22.         elseif talkcolor==1 then
  23.                 color=ReadCol(color1%256);
  24.         elseif talkcolor==2 then
  25.                 color=ReadCol(color2%256);
  26.         elseif talkcolor==3 then
  27.                 color=ReadCol(color3%256);
  28.         elseif talkcolor==4 then
  29.                 color=ReadCol(color4%256);
  30.         elseif talkcolor==5 then
  31.                 color=ReadCol(color5%256);
  32.         end
  33. --const x,y with config Type
  34.         while startup<endup do
  35.                 Cls();
  36.                 if CONFIG.Type==0 then
  37.                         namex=81;namey=139;
  38.                         talkwidth=224;talkheight=64;
  39.                         talkx=81;talky=164;
  40.                         headx=16;heady=166;
  41.                         txtnum=13;txtline=3;
  42.                         if talkaddr==1 then
  43.                                 namex=158;
  44.                                 talkx=16;headx=248;
  45.                         end
  46.                 else
  47.                         namex=167;namey=340
  48.                         talkwidth=438;talkheight=96;
  49.                         talkx=105;talky=372;
  50.                         headx=105;heady=306;
  51.                         txtnum=25;txtline=5;               
  52.                         if talkaddr==1 then
  53.                                 namex=398;
  54.                                 headx=483;
  55.                         end
  56.                 end
  57.        

  58.        
  59.                 if headop==0 or id3~=0 then
  60.                         DrawBox(headx,heady,headx+60,heady+62,C_WHITE);
  61.                         lib.PicLoadCache(1,id1*2,headx+2,heady+59);
  62.        
  63.                         local strname;
  64.                         if id3==-2 then
  65.                                 strname=JY.Person[id1]['姓名'];
  66.                         elseif id3==0 then
  67.                                 strname="";
  68.                         else
  69.                                 strname=ReadTALK(id3);
  70.                         end
  71.         --local strname=READTALK(id3);
  72.                         local strlong=string.len(strname);
  73.                         DrawBox(namex,namey,namex+82,namey+28,C_WHITE);
  74.                         DrawString(namex+44-(strlong*4.5),namey+5,strname,C_WHITE,fontsize);
  75.                 end

  76.                 local sx=0;local sy=0;
  77.                 local talkstr="";
  78.                 DrawBox(talkx,talky,talkx+talkwidth,talky+talkheight,C_WHITE);
  79.        
  80.                 while sy < txtline do
  81.                         while sx < txtnum-1 do
  82.                                 --lib.Debug("sx="..sx..",sy="..sy);
  83.                                 talkstr=string.sub(s,startup,startup+1);
  84.                                 if string.byte(talkstr,1) == 42 then
  85.                                         --lib.Debug(string.byte(talkstr,1) );
  86.                                         if string.byte(talkstr,2)==42 then --**
  87.                                                 sy=sy+1;
  88.                                                 sx=0;
  89.                                         else
  90.                                                 startup=startup-1;
  91.                                         end
  92.                                 elseif string.byte(talkstr,1)==94 and string.byte(talkstr,2)==48  then --^0
  93.                                         color=color0;
  94.                                         color=ReadCol(color%256);
  95.                                 elseif string.byte(talkstr,1)==94 and string.byte(talkstr,2)==49 then --^1
  96.                                         color=color1;
  97.                                         color=ReadCol(color%256);
  98.                                 elseif string.byte(talkstr,1)==94 and string.byte(talkstr,2)==50  then --^2
  99.                                         color=color2;
  100.                                         color=ReadCol(color%256);
  101.                                 elseif string.byte(talkstr,1)==94 and string.byte(talkstr,2)==51  then
  102.                                         color=color3;
  103.                                         color=ReadCol(color%256);
  104.                                 elseif string.byte(talkstr,1)==94 and string.byte(talkstr,2)==52  then
  105.                                         color=color4;
  106.                                         color=ReadCol(color%256);
  107.                                 elseif string.byte(talkstr,1)==94 and string.byte(talkstr,2)==53  then
  108.                                         color=color5;
  109.                                         color=ReadCol(color%256);
  110.                                 elseif string.byte(talkstr,1)==38 and string.byte(talkstr,2)==38  then --&&
  111.                                         local tmpname=JY.Person[0]['姓名'];
  112.                                         DrawString(talkx+5+sx*fontsize,talky+5+sy*fontsize,tmpname,color,fontsize);
  113.                                         sx=sx+string.len(tmpname)/2;
  114.                                 elseif string.byte(talkstr,1)==64 and string.byte(talkstr,2)==64  then --@@
  115.                                         ShowScreen();
  116.                                         WaitKey();
  117.                                 elseif string.byte(talkstr,1)==94 and string.byte(talkstr,2)==94  then --^^
  118.                                                 if talkcolor==0 then
  119.                                                         color=ReadCol(color0%256);
  120.                                                 elseif talkcolor==1 then
  121.                                                         color=ReadCol(color1%256);
  122.                                                 elseif talkcolor==2 then
  123.                                                         color=ReadCol(color2%256);
  124.                                                 elseif talkcolor==3 then
  125.                                                         color=ReadCol(color3%256);
  126.                                                 elseif talkcolor==4 then
  127.                                                         color=ReadCol(color4%256);
  128.                                                 elseif talkcolor==5 then
  129.                                                         color=ReadCol(color5%256);
  130.                                                 end
  131.                                 else               
  132.                                         DrawString(talkx+5+sx*fontsize,talky+5+sy*fontsize,talkstr,color,fontsize);
  133.                                         sx=sx+1;
  134.                                 end       
  135.                                 startup=startup+2;
  136.                         end
  137.                         sy=sy+1;
  138.                         sx=0;
  139.                 end

  140.                 ShowScreen();
  141.                 WaitKey();
  142.         end
  143. end
复制代码

  1. --其余用到的函数
  2. function ReadCol(id)
  3.         local r,g,b,col;
  4.         col=Byte.create(4);
  5.         Byte.loadfile(col,CONFIG.DataPath..'mmap.col',id*3,3);
  6.         b,g,r=GetRGB(Byte.get32(col,0));
  7.         return RGB(r*4,g*4,b*4);
  8. end

  9. function ReadTALK(id,flag)
  10.         local tidx=Byte.create(id*4+4)
  11.         Byte.loadfile(tidx,CC.TDX,0,id*4+4)
  12.         local idx1,idx2
  13.         if id<1 then
  14.                 idx1=0
  15.         else
  16.                 idx1=Byte.get32(tidx,(id-1)*4)
  17.         end
  18.         idx2=Byte.get32(tidx,id*4)
  19.         local len=idx2-idx1
  20.         local talk=Byte.create(len)
  21.         Byte.loadfile(talk,CC.TRP,idx1,len)
  22.         local str=''
  23.         --str=Byte.getstr(talk,0,len)
  24.        
  25.         for i=0,len-2 do
  26.                 local byte=Byte.getu16(talk,i)
  27.                 byte=255-math.fmod(byte,256)
  28.                 --Byte.setu16(talk,i,byte)
  29.                 str=str..string.char(byte)
  30.         end
  31.         --str=lib.CharSet(Byte.getstr(talk,0,len),0)
  32.         --lib.Debug(string.format('id=%d,idx1=%d,idx2=%d,len=%d,str=%s',id,idx1,idx2,len,str))
  33.         if flag==nil then
  34.                 str=lib.CharSet(str,0)
  35.                 str=GenTalkString(str,12);
  36.         end
  37.         return str;
  38. end

复制代码
谢谢大家,谢谢

本帖子中包含更多资源

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

x

评分

参与人数 1声望 +12 收起 理由
jy02785317 + 12 不错,不过最好再把里面用到的几个函数附上 ...

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-5-24 09:03 | 显示全部楼层
能不能做到KG新对话指令的全部效果?
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2010-5-24 09:07 | 显示全部楼层
能不能做到KG新对话指令的全部效果?
killer_zingy 发表于 2010-5-24 09:03


【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-5-24 10:57 | 显示全部楼层
再把readtalk和readcol发上来吧
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-5-24 17:43 | 显示全部楼层
笑梦也能LUA了吗
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

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

GMT+8, 2024-12-23 00:31

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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