铁血丹心

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

[通用] lua版,物品菜单显示物品使用效果和需求

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

避开广告
避开广告
避开广告
避开广告
避开广告
避开广告
避开广告
避开广告
避开广告
避开广告
避开广告
避开广告
避开广告
  1. function SelectThing(thing,thingnum)    --显示物品菜单

  2.     local xnum=CC.MenuThingXnum;
  3.     local ynum=CC.MenuThingYnum;

  4. local w=CC.ThingPicWidth*xnum+(xnum-1)*CC.ThingGapIn+2*CC.ThingGapOut;  --总体宽度
  5. local h=CC.ThingPicHeight*ynum+(ynum-1)*CC.ThingGapIn+2*CC.ThingGapOut; --物品栏高度

  6. local dx=(CC.ScreenW-w)/2;
  7. local dy=(CC.ScreenH-h-2*(CC.ThingFontSize+2*CC.MenuBorderPixel+5))/2-50;


  8.     local y1_1,y1_2,y2_1,y2_2,y3_1,y3_2;                  --名称,说明和图片的Y坐标

  9.     local cur_line=0;
  10.     local cur_x=0;
  11.     local cur_y=0;
  12.     local cur_thing=-1;

  13. while true do
  14.      Cls();
  15. y1_1=dy;
  16.         y1_2=y1_1+CC.ThingFontSize+2*CC.MenuBorderPixel;
  17.         DrawBox(dx,y1_1,dx+w,y1_2,C_WHITE);
  18. y2_1=y1_2+5
  19. y2_2=y2_1+CC.ThingFontSize+2*CC.MenuBorderPixel
  20.         DrawBox(dx,y2_1,dx+w,y2_2,C_WHITE);
  21.         y3_1=y2_2+5;
  22.         y3_2=y3_1+h;
  23. DrawBox(dx,y3_1,dx+w,y3_2,C_WHITE);

  24.         for y=0,ynum-1 do
  25.             for x=0,xnum-1 do
  26.                 local id=y*xnum+x+xnum*cur_line         --当前待选择物品
  27. local boxcolor;
  28.                 if x==cur_x and y==cur_y then
  29.      boxcolor=C_WHITE;
  30.                     if thing[id]>=0 then
  31.                         cur_thing=thing[id];
  32.                         local str=JY.Thing[thing[id]]["名称"];
  33.                         if JY.Thing[thing[id]]["类型"]==1 or JY.Thing[thing[id]]["类型"]==2 then
  34.                             if JY.Thing[thing[id]]["使用人"] >=0 then
  35.                                 str=str .. "(" .. JY.Person[JY.Thing[thing[id]]["使用人"]]["姓名"] .. ")";
  36.                             end
  37.                         end
  38.                         str=string.format("%s X %d",str,thingnum[id]);
  39. local str2=JY.Thing[thing[id]]["物品说明"];

  40.               DrawString(dx+CC.ThingGapOut,y1_1+CC.MenuBorderPixel,str,C_GOLD,CC.ThingFontSize);
  41.               DrawString(dx+CC.ThingGapOut,y2_1+CC.MenuBorderPixel,str2,C_ORANGE,CC.ThingFontSize);
  42. local myfont=math.modf(CC.ThingFontSize*0.7)--20
  43. local mx,my=dx+4*myfont,y3_2+2--130,365
  44. local myflag=0
  45. local myThing=JY.Thing[thing[id]]
  46. local function drawitem(ss,str,news)
  47. local mys
  48. if str==nil then
  49. mys=ss
  50. elseif myThing[ss]~=0 then
  51. if news==nil then
  52. if myflag==0 then
  53. mys=string.format(str..':%+d',myThing[ss])
  54. elseif myflag==1 then
  55. mys=string.format(str..':%d',myThing[ss])
  56. end
  57. else
  58. if myThing[ss]<0 then
  59. return
  60. end
  61. mys=string.format(str..':%s',news[myThing[ss]])
  62. end
  63. else
  64. return
  65. end
  66. local mylen=myfont*string.len(mys)/2+12
  67. if mx+mylen>CC.ScreenW-dx then
  68. my=my+myfont+10
  69. mx=dx+4*myfont
  70. end
  71. DrawStrBox(mx,my,mys,C_GOLD,myfont)
  72. mx=mx+mylen
  73. end
  74. if myThing['练出武功']>0 then
  75. local kfname='习得:'..JY.Wugong[myThing['练出武功']]['名称']
  76. DrawStrBox(mx,my,kfname,C_GOLD,myfont)
  77. mx=mx+myfont*string.len(kfname)/2+12
  78. end
  79. if myThing['类型']>0 then
  80. drawitem('加生命','生命')
  81. drawitem('加生命最大值','生命最值')
  82. drawitem('加中毒解毒','中毒')
  83. drawitem('加体力','体力')
  84. if myThing['改变内力性质']==2 then
  85. drawitem('内力门路阴阳合一')
  86. end
  87. drawitem('加内力','内力')
  88. drawitem('加内力最大值','内力最值')
  89. drawitem('加攻击力','攻击')
  90. drawitem('加轻功','轻功')
  91. drawitem('加防御力','防御')
  92. drawitem('加医疗能力','医疗')
  93. drawitem('加用毒能力','用毒')
  94. drawitem('加解毒能力','解毒')
  95. drawitem('加抗毒能力','抗毒')
  96. drawitem('加拳掌功夫','拳掌')
  97. drawitem('加御剑能力','御剑')
  98. drawitem('加耍刀技巧','耍刀')
  99. drawitem('加特殊兵器','特殊')
  100. drawitem('加暗器技巧','暗器')
  101. drawitem('加武学常识','武常')
  102. drawitem('加品德','品德')
  103. drawitem('加攻击次数','左右',{[0]='否','是'})
  104. drawitem('加攻击带毒','带毒')
  105. if mx~=dx or my~=y3_2+2 then
  106. DrawStrBox(dx,y3_2+2,' 效果:',C_RED,myfont)
  107. end
  108. end
  109. if myThing['类型']==1 or myThing['类型']==2 then
  110. if mx~=dx then
  111. mx=dx+4*myfont
  112. my=my+myfont+10
  113. end
  114. myflag=1
  115. local my2=my
  116. if myThing['仅修炼人物']>-1 then
  117. --drawitem('仅修炼人物','仅限',{[myThing['仅修炼人物']]=JY.Person[myThing['仅修炼人物']]['姓名']})
  118. drawitem('仅限:'..JY.Person[myThing['仅修炼人物']]['姓名'])
  119. end
  120. drawitem('需内力性质','阴阳',{[0]='阴','阳','不限'})
  121. drawitem('需内力','内力')
  122. drawitem('需攻击力','攻击')
  123. drawitem('需轻功','轻功')
  124. drawitem('需用毒能力','用毒')
  125. drawitem('需医疗能力','医疗')
  126. drawitem('需解毒能力','解毒')
  127. drawitem('需拳掌功夫','拳掌')
  128. drawitem('需御剑能力','御剑')
  129. drawitem('需耍刀技巧','耍刀')
  130. drawitem('需特殊兵器','特殊')
  131. drawitem('需暗器技巧','暗器')
  132. drawitem('需资质','资质')
  133. drawitem('需经验','修炼经验')
  134. if mx~=dx or my~=my2 then
  135. DrawStrBox(dx,my2,' 需求:',C_RED,myfont)
  136. end
  137. end
  138.                     else
  139.                         cur_thing=-1;
  140.                     end
  141.                 else
  142.       boxcolor=C_BLACK;
  143.                 end
  144. local boxx=dx+CC.ThingGapOut+x*(CC.ThingPicWidth+CC.ThingGapIn);
  145. local boxy=y3_1+CC.ThingGapOut+y*(CC.ThingPicHeight+CC.ThingGapIn);
  146.                 lib.DrawRect(boxx,boxy,boxx+CC.ThingPicWidth+1,boxy+CC.ThingPicHeight+1,boxcolor);
  147.                 if thing[id]>=0 then
  148.      if CC.LoadThingPic==1 then
  149.      lib.PicLoadCache(2,thing[id]*2,boxx+1,boxy+1,1);
  150. else
  151.                         lib.PicLoadCache(0,(thing[id]+CC.StartThingPic)*2,boxx+1,boxy+1,1);
  152. end
  153.                 end
  154.             end
  155.         end

  156.         ShowScreen();
  157.      local keypress=WaitKey();
  158.         lib.Delay(100);
  159.         if keypress==VK_ESCAPE then
  160.             cur_thing=-1;
  161.             break;
  162.         elseif keypress==VK_RETURN or keypress==VK_SPACE then
  163.             break;
  164.         elseif keypress==VK_UP then
  165.             if  cur_y == 0 then
  166.                 if  cur_line > 0 then
  167.                     cur_line = cur_line - 1;
  168.                 end
  169.             else
  170.                 cur_y = cur_y - 1;
  171.             end
  172.         elseif keypress==VK_DOWN then
  173.             if  cur_y ==ynum-1 then
  174.                 if  cur_line < (math.modf(200/xnum)-ynum) then
  175.                     cur_line = cur_line + 1;
  176.                 end
  177.             else
  178.                 cur_y = cur_y + 1;
  179.             end
  180.         elseif keypress==VK_LEFT then
  181.             if  cur_x > 0 then
  182.                 cur_x=cur_x-1;
  183.             else
  184.                 cur_x=xnum-1;
  185.             end
  186.         elseif keypress==VK_RIGHT then
  187.             if  cur_x ==xnum-1 then
  188.                 cur_x=0;
  189.             else
  190.                 cur_x=cur_x+1;
  191.             end
  192.         end

  193. end

  194.     Cls();
  195.     return cur_thing;
  196. end
复制代码
选择到物品时,显示物品的使用效果和需求,在各种分辨率下均可正常显示
下面是图


[发帖际遇]: jy02785317吃烧饼的时候,发现烧饼里藏着一枚“玄铁令”,转手卖掉后,赚到银两14。

本帖子中包含更多资源

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

x
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-24 12:22 | 显示全部楼层
记得weyl写过类似的功能~

不过这个小字体的看起来更棒~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-24 12:25 | 显示全部楼层
好厉害啊,一看标题就知道是你了,你对LUAu版贡献好大啊

[发帖际遇]: 风吹屁屁凉帮助流落破窑的孤儿杨过,得郭靖称赞,增加声望1。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-24 18:14 | 显示全部楼层
我帖上来没改前的物品界面
对比体现修改后的美观清晰

PS:
我特意跑到恒山门口


[发帖际遇]: 夏海发现牛家村曲灵风藏宝,共银两15两。

本帖子中包含更多资源

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

x
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-1-31 15:57 | 显示全部楼层
前几天我就以站内短信和作者联系过,得出的结论是在本帖代码第38行,[ID]后面紧挨的三个字符因为论坛的原因显示错误(简单的说,就是原本贴上来的代码不是字符+gt,但是上传到论坛后自动变成这样了),而且不止是第38行,后面还有,都是同样的错误。作者最近两天没来论坛,目前还不知道怎么修复。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-1-31 13:02 | 显示全部楼层
代码不完整,其他地方肯定还有要改的地方,光改这里改完连游戏都进不去了

点评

我确实是猜的,我之前遇到的问题是这个的,抱歉之极  发表于 2011-2-1 15:54
KA
鄙视乱指点= =~~  发表于 2011-1-31 15:21
应该是有全局变量  发表于 2011-1-31 13:07
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-1-31 13:50 | 显示全部楼层
全局变量在哪里,找了半天没找到
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-1-31 15:21 | 显示全部楼层
回复 彩雲追月 的帖子

没有全局变量啊
str=str .. "(" .. JY.Person[JY.Thing[thing[id]]["使用人"]]["姓名"] .. ")";
估计是这个东西闯祸的。。
把&quot全部删掉就可以了
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

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

GMT+8, 2024-12-22 19:53

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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