铁血丹心

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

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

[复制链接]
发表于 2010-8-15 15:40 | 显示全部楼层 |阅读模式
本帖最后由 jy02785317 于 2010-8-18 11:00 编辑

效果图
(出自苍龙逐日半即时版

function say(s,pid,flag,name)          --个人新对话
使用方法:
s,对话文本
pid,说话人物id(主要决定头像,以及显示人名),可以留空,留空时默认为0
flag,对话显示位置,同dos版,可以留空
name,显示人物名,可以留空,留空时使用说话人物的名字。

对话文本中可以有控制字符,如下:
--暂停,任意键后继续,p
--控制颜色 R=redG=goldB=blackW=whiteO=orange
--控制字符显示速度0-9
--控制字体ASDF(需要在源码中先配置字体路径,如果不会请勿使用)
--控制换行H分页P

源码如下

  1. --新对话方式
  2. --加入控制字符
  3. --暂停,任意键后继续,p
  4. --控制颜色 R=redG=goldB=blackW=whiteO=orange
  5. --控制字符显示速度0-9
  6. --控制字体ASDF
  7. --控制换行H分页P
  8. --N代表自己n代表主角
  9. function say(s,pid,flag,name)          --个人新对话
  10.     local picw=130;       --最大头像图片宽高
  11.         local pich=130;
  12.         local talkxnum=18;         --对话一行字数
  13.         local talkynum=3;          --对话行数
  14.         local dx=2;
  15.         local dy=2;
  16.     local boxpicw=picw+10;
  17.         local boxpich=pich+10;
  18.         local boxtalkw=talkxnum*CC.DefaultFont+10;
  19.         local boxtalkh=boxpich-27;
  20.         pid=pid or 0
  21.         if flag==nil then
  22.                 if pid==0 then
  23.                         flag=1
  24.                 else
  25.                         flag=0
  26.                 end
  27.         end
  28.         name=name or JY.Person[pid]["姓名"]
  29.     local talkBorder=(pich-talkynum*CC.DefaultFont)/(talkynum+1);

  30.         --显示头像和对话的坐标
  31.     local xy={ [0]={headx=dx,heady=dy,
  32.                         talkx=dx+boxpicw+2,talky=dy+27,
  33.                                         namex=dx+boxpicw+2,namey=dy,
  34.                                         showhead=1},--左上
  35.                    {headx=CC.ScreenW-1-dx-boxpicw,heady=CC.ScreenH-dy-boxpich,
  36.                                     talkx=CC.ScreenW-1-dx-boxpicw-boxtalkw-2,talky= CC.ScreenH-dy-boxpich+27,
  37.                                         namex=CC.ScreenW-1-dx-boxpicw-96,namey=CC.ScreenH-dy-boxpich,
  38.                                         showhead=1},--右下
  39.                    {headx=dx,heady=dy,
  40.                                    talkx=dx+boxpicw-43,talky=dy+27,
  41.                                         namex=dx+boxpicw+2,namey=dy,
  42.                                    showhead=0},--上中
  43.                    {headx=CC.ScreenW-1-dx-boxpicw,heady=CC.ScreenH-dy-boxpich,
  44.                                    talkx=CC.ScreenW-1-dx-boxpicw-boxtalkw-2,talky= CC.ScreenH-dy-boxpich+27,
  45.                                         namex=CC.ScreenW-1-dx-boxpicw-96,namey=CC.ScreenH-dy-boxpich,
  46.                                         showhead=1},
  47.                    {headx=CC.ScreenW-1-dx-boxpicw,heady=dy,
  48.                                     talkx=CC.ScreenW-1-dx-boxpicw-boxtalkw-2,talky=dy+27,
  49.                                         namex=CC.ScreenW-1-dx-boxpicw-96,namey=dy,
  50.                                         showhead=1},--右上
  51.                    {headx=dx,heady=CC.ScreenH-dy-boxpich,
  52.                                    talkx=dx+boxpicw+2,talky=CC.ScreenH-dy-boxpich+27,
  53.                                         namex=dx+boxpicw+2,namey=CC.ScreenH-dy-boxpich,
  54.                                    showhead=1}, --左下
  55.                         }

  56.     if flag<0 or flag>5 then
  57.         flag=0;
  58.     end
  59.         local headid=pid--JY.Person[pid]["头像代号"]
  60.     if xy[flag].showhead==0 then
  61.         headid=-1;
  62.     end


  63.     if CONFIG.KeyRepeat==0 then
  64.              lib.EnableKeyRepeat(0,CONFIG.KeyRepeatInterval);
  65.         end
  66.     lib.GetKey();
  67.        
  68.         local function readstr(str)
  69.                 local T1={"0","1","2","3","4","5","6","7","8","9"}
  70.                 local T2={{"R",C_RED},{"G",C_GOLD},{"B",C_BLACK},{"W",C_WHITE},{"O",C_ORANGE}}
  71.                 local T3={{"H",CC.FontNameSong},{"S",CC.FontNameHei},{"F",CC.FontName}}
  72.                 --美观起见,针对不同字体同一行显示,需要微调y坐标,以及字号
  73.                 --以默认的字体为标准,启体需下移,细黑需上移
  74.                 for i=0,9 do
  75.                         if T1[i+1]==str then return 1,i*50 end
  76.                 end
  77.                 for i=1,5 do
  78.                         if T2[i][1]==str then return 2,T2[i][2] end
  79.                 end
  80.                 for i=1,3 do
  81.                         if T3[i][1]==str then return 3,T3[i][2] end
  82.                 end
  83.                 return 0
  84.         end
  85.        
  86.         local function mydelay(t)
  87.                 if t<=0 then return end
  88.                 lib.ShowSurface(0)
  89.                 lib.Delay(t)
  90.         end
  91.        
  92.         local page,cy,cx=0,0,0
  93.         local color,t,font=C_WHITE,0,CC.FontName
  94.         while string.len(s)>1 do
  95.                 if page==0 then                                --新的一页,清屏,显示头像
  96.                         Cls()
  97.             if headid>=0 then
  98.                 DrawBox(xy[flag].headx, xy[flag].heady, xy[flag].headx + boxpicw, xy[flag].heady + boxpich,C_WHITE);
  99.                                 DrawBox(xy[flag].namex,xy[flag].namey,xy[flag].namex+96,xy[flag].namey+24,C_WHITE)
  100.                                 MyDrawString(xy[flag].namex,xy[flag].namex+96,xy[flag].namey+1,name,C_ORANGE,21)
  101.                                 local w,h=lib.PicGetXY(1,headid*2);
  102.                 local x=(picw-w)/2;
  103.                                 local y=(pich-h)/2;
  104.                                 lib.PicLoadCache(1,headid*2,xy[flag].headx+5+x,xy[flag].heady+5+y,1);
  105.             end
  106.             DrawBox(xy[flag].talkx, xy[flag].talky, xy[flag].talkx +boxtalkw, xy[flag].talky + boxtalkh,C_WHITE);                       
  107.                         page=1
  108.                 end
  109.                 local str
  110.                 str=string.sub(s,1,1)
  111.                 if str=='*' then
  112.                         str='H'
  113.                         s=string.sub(s,2,-1)
  114.                 else
  115.                         str=string.sub(s,1,2)
  116.                         s=string.sub(s,3,-1)
  117.                 end
  118.                 --开始控制逻辑
  119.                 if str=="H" then
  120.                         cx=0
  121.                         cy=cy+1
  122.                         if cy==3 then
  123.                                 cy=0
  124.                                 page=0
  125.                         end
  126.                 elseif str=="P" then
  127.                         cx=0
  128.                         cy=0
  129.                         page=0
  130.                 elseif str=="p" then
  131.                         ShowScreen();
  132.                         WaitKey();       
  133.                         lib.Delay(100)       
  134.                 elseif str=="N" then
  135.                         s=JY.Person[pid]["姓名"]..s
  136.                 elseif str=="n" then
  137.                         s=JY.Person[0]["姓名"]..s
  138.                 else
  139.                         local kz1,kz2=readstr(str)
  140.                         if kz1==1 then
  141.                                 t=kz2
  142.                         elseif kz1==2 then
  143.                                 color=kz2
  144.                         elseif kz1==3 then
  145.                                 font=kz2
  146.                         else
  147.                                 lib.DrawStr(xy[flag].talkx+CC.DefaultFont*cx+5,
  148.                                                         xy[flag].talky+(CC.DefaultFont+talkBorder)*cy+talkBorder-8,
  149.                                                         str,color,CC.DefaultFont,font,0,0)
  150.                                 mydelay(t)
  151.                                 cx=cx+1
  152.                                 if cx==talkxnum then
  153.                                         cx=0
  154.                                         cy=cy+1
  155.                                         if cy==talkynum then
  156.                                                 cy=0
  157.                                                 page=0
  158.                                         end
  159.                                 end
  160.                         end
  161.                 end
  162.                 --如果换页,则显示,等待按键
  163.                 if page==0 or string.len(s)<2 then
  164.                         ShowScreen();
  165.                         WaitKey();
  166.                         lib.Delay(100)
  167.                 end
  168.         end


  169.     if CONFIG.KeyRepeat==0 then
  170.              lib.EnableKeyRepeat(CONFIG.KeyRepeatDelay,CONFIG.KeyRepeatInterval);
  171.         end

  172.         Cls();
  173. end
复制代码

本帖子中包含更多资源

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

x
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-8-15 16:07 | 显示全部楼层
( ⊙o⊙ )哇名字也可变颜色的,Pascal的好像不行?

[发帖际遇]: 上官乐均在街上游玩时,被“妙手书生”朱聪撞个满怀,过后发现少了银两31两。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

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

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

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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