铁血丹心

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

资源:判定修炼秘籍是否成功的函数 War_PersonTrainBook 及应用技巧举例

  [复制链接]
发表于 2011-9-16 13:59 | 显示全部楼层 |阅读模式

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

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

x
  1. function War_PersonTrainBook(pid) --战斗后修炼秘籍是否成功
  2. local p=JY.Person[pid];

  3. local thingid=p["修炼物品"];
  4. if thingid<0 then
  5. return ;
  6. end

  7. local wugongid=JY.Thing[thingid]["练出武功"];
  8. local wg=0;

  9. if JY.Person[pid]["武功10"]>0 then --请思考一下 这里的定义是为了什么
  10. for i=1,10 do
  11. if JY.Thing[thingid]["练出武功"]==JY.Person[pid]["武功"..i] then
  12. wg=1
  13. break;
  14. end
  15. end
  16. if wg==0 then return end
  17. end

  18. local yes1,yes2,kfnum=false,false
  19. while true do
  20. local needpoint=TrainNeedExp(pid);

  21. if p["修炼点数"]>=needpoint then
  22. yes1=true

  23. AddPersonAttrib(pid,"生命最大值",JY.Thing[thingid]["加生命最大值"]);
  24. if thingid==139 then
  25. AddPersonAttrib(pid,"生命最大值",-15)
  26. AddPersonAttrib(pid,"生命",-15)
  27. if JY.Person[pid]["生命最大值"]<1 then JY.Person[pid]["生命最大值"]=1 end
  28. if JY.Person[pid]["生命"]<1 then JY.Person[pid]["生命"]=1 end
  29. end
  30. if JY.Thing[thingid]["改变内力性质"]==2 then
  31. p["内力性质"]=2;
  32. end
  33. AddPersonAttrib(pid,"内力最大值",JY.Thing[thingid]["加内力最大值"]);
  34. AddPersonAttrib(pid,"攻击力",JY.Thing[thingid]["加攻击力"]);
  35. AddPersonAttrib(pid,"轻功",JY.Thing[thingid]["加轻功"]); --★★
  36. AddPersonAttrib(pid,"防御力",JY.Thing[thingid]["加防御力"]);
  37. AddPersonAttrib(pid,"医疗能力",JY.Thing[thingid]["加医疗能力"]);
  38. AddPersonAttrib(pid,"用毒能力",JY.Thing[thingid]["加用毒能力"]);
  39. AddPersonAttrib(pid,"解毒能力",JY.Thing[thingid]["加解毒能力"]);
  40. AddPersonAttrib(pid,"抗毒能力",JY.Thing[thingid]["加抗毒能力"]);

  41. if pid==56 then
  42. AddPersonAttrib(pid,"拳掌功夫",JY.Thing[thingid]["加拳掌功夫"]*2);
  43. AddPersonAttrib(pid,"御剑能力",JY.Thing[thingid]["加御剑能力"]*2);
  44. AddPersonAttrib(pid,"耍刀技巧",JY.Thing[thingid]["加耍刀技巧"]*2);
  45. AddPersonAttrib(pid,"特殊兵器",JY.Thing[thingid]["加特殊兵器"]*2);
  46. else
  47. AddPersonAttrib(pid,"拳掌功夫",JY.Thing[thingid]["加拳掌功夫"]);
  48. AddPersonAttrib(pid,"御剑能力",JY.Thing[thingid]["加御剑能力"]);
  49. AddPersonAttrib(pid,"耍刀技巧",JY.Thing[thingid]["加耍刀技巧"]);
  50. AddPersonAttrib(pid,"特殊兵器",JY.Thing[thingid]["加特殊兵器"]);
  51. end

  52. AddPersonAttrib(pid,"暗器技巧",JY.Thing[thingid]["加暗器技巧"]);
  53. AddPersonAttrib(pid,"武学常识",JY.Thing[thingid]["加武学常识"]);
  54. AddPersonAttrib(pid,"品德",JY.Thing[thingid]["加品德"]);
  55. AddPersonAttrib(pid,"攻击带毒",JY.Thing[thingid]["加攻击带毒"]);
  56. if JY.Thing[thingid]["加攻击次数"]==1 then
  57. p["左右互搏"]=1;
  58. end

  59. p["修炼点数"]=p["修炼点数"]-needpoint;

  60. if wugongid>=0 then
  61. yes2=true
  62. local oldwugong=0;
  63. for i =1,10 do
  64. if p["武功" .. i]==wugongid then
  65. oldwugong=1;
  66. p["武功等级" .. i]=math.modf((p["武功等级" .. i]+100)/100)*100;
  67. kfnum=i

  68. break;
  69. end
  70. end
  71. if oldwugong==0 then
  72. for i=1,10 do
  73. if p["武功" .. i]==0 then
  74. p["武功" .. i]=wugongid;
  75. kfnum=i
  76. break;
  77. end
  78. end
  79. end
  80. end
  81. else
  82. break
  83. end
  84. end

  85. if yes1 then
  86. DrawStrBoxWaitKey( string.format('%s 修炼 %s 成功',p["姓名"],JY.Thing[thingid]["名称"]),C_WHITE,CC.DefaultFont);
  87. end
  88. if yes2 then
  89. DrawStrBoxWaitKey(string.format("%s 升为第%s级" ,JY.Wugong[wugongid]["名称"],math.modf(p["武功等级" ..kfnum]/100)+1),C_WHITE,CC.DefaultFont);
  90. end
  91. end
复制代码

这是在战斗后判定人物修炼秘籍是否成功的函数
也包括了如果修炼成功就会做相应的处理
在这个函数中大家就可以做一些相关的特殊定义了

以某位坛友发的帖子来举个例:
http://www.txdx.net/thread-492416-1-1.html

比如我想这样设定:
万劫刀法如果钟灵修炼的话,可以额外加轻功2
但如果别人修炼的只,只加普通的属性。
求DIY代码,高手帮下手哈

其实这个就可以做为钟灵的一个天赋特效使用
先把钟灵的天赋名定义成 “万仇万劫” (这什么鸟名字)
效果就是修炼万劫刀法每级额外加轻功2
那么,就在上面函数中有 --★★ 的地方加上这样的代码

  1. if pid==90 and thingid==165 then
  2. AddPersonAttrib(pid,"轻功",2)
  3. end
复制代码

把代码加在这里是因为加的是轻功,放在一起方便查找
写入以后,把整个函数放在DIY中运行,再让钟灵修炼万刀看下效果吧
(先把钟灵的耍刀改为:JY.Person[90]['耍刀技巧']=30)

这只是一个例子,还可以做其它很多相关的定义
大家自由的创作吧

小课题:上面函数中标注了一个请大家思考一下的问题
请想想看这段代码的意义是什么










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

回复 whitefox5 的帖子

在有星星那行代码的下一行添加新代码
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-16 14:18 | 显示全部楼层
思考那个很显然就是判定武功是否练满的么- -|| 额 好吧这是用来教新人的我错了
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2011-9-16 14:21 | 显示全部楼层
回复 xzqcm111 的帖子

很明显你完全没有理解这段代码的意义
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-16 14:21 | 显示全部楼层
本帖最后由 whitefox5 于 2011-9-16 14:22 编辑

12.if JY.Person[pid]["武功10"]>0 then --请思考一下 这里的定义是为了什么
找到了。。这个标记
前面是问标记。。。。没去看文字,以为是注释


应该是判断有没有练满10个武功吧,如果修炼的秘籍不在已有的10个武功里,则修炼失败
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2011-9-16 14:26 | 显示全部楼层
whitefox5 发表于 2011-9-16 14:21
12.if JY.Person["武功10"]>0 then --请思考一下 这里的定义是为了什么
找到了。。这个标记
前面是问标记 ...

你的理解那部份是正确的

但问题的关键在于:
为什么要在这里添加这样的定义
对一般人物来说,需要这样的定义吗?

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-16 14:51 | 显示全部楼层
您老是要完整解释啊…
那段代码的意义是角色在练满十武功的情况下,再装备秘籍,假如秘籍武功在自身武功列表里有的话,则可以继续修炼(也就是接着往下走代码)如果不是那么这个秘笈的各种加属性就不起作用了。这也是为什么练满十武功后再练医书不加属性。这个是可以修正的…不过我现在已经用手机了就留给别人去修正吧

点评

你什么时候变成代码达人了。。。  发表于 2011-9-16 14:56
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2011-9-16 15:46 | 显示全部楼层
xzqcm111 发表于 2011-9-16 14:51
您老是要完整解释啊…
那段代码的意义是角色在练满十武功的情况下,再装备秘籍,假如秘籍武功在自身武功列表 ...

没说到问题的关键
我问的是 “请思考一下 这里的定义是为了什么”
即为什么要做这样的定义,而不是问这段代码是什么意思

意思大家都明白
就是当已经炼满了十个武功后,如果新修炼的武功不在已有十个武功的范围内
就停止执行后面的功能

但是按一般情况来说,有必要在这里做这样的定义吗?
一个角色如果已经练满了十个武功
再装备没有修炼过的武功秘籍会出现什么情况?
还能装备上这个秘籍吗?

一个人只能修炼10种武功

这个提示应该不陌生吧
既然根本不能装备新秘籍
那在这个函数中做这样的定义是不是多余了呢?它的意义何在?
这才是我想让大家思考一下的问题
遇到问题请多想一下再回答

不过有一点你说对了
因为这个定义导致了练满十个武功后修炼医毒书不加能力的问题
如何修复大家也可以想一下,很简单的
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-16 16:41 | 显示全部楼层
本帖最后由 wu209000 于 2011-9-16 16:55 编辑

  • if JY.Person[pid]["武功10"]>0 then --请思考一下 这里的定义是为了什么
  • for i=1,10 do
  • if JY.Thing[thingid]["练出武功"]==JY.Person[pid]["武功"..i] then
  • wg=1
  • break;
  • end
  • end
  • if wg==0 then return end
  • end


上面是满十个武功的分支
按上面的代码,医疗和毒满十武功之后修练秘籍将都无法增加,左右也练不到
为什么一定要加呢
原因是有一个比较比较特殊的角色就是水镜,洗了武功,装上秘籍,这样就绕过了装备秘籍时的判断条件, 下一场战斗中再洗成其它的。。。。如果不进行十武功判断,那么就可以有第11种武功出现了


不知道S大是不是这个意思



至于修改,我的想法是判断条件改一下
if JY.Person[pid]["武功10"]>0 then
改成
if JY.Person[pid]["武功10"]>0 && JY.Thing[thingid]["加医疗能力"]==0 && JY.Thing[thingid]["加用毒能力"]==0 && JY.Thing[thingid]["加攻击次数"]!=1 then






点评

刚才又去看了一下lua的语法,蛋疼啊,不等于是这么写~=而不是!=,真不习惯。。。。  发表于 2011-9-16 17:48
好像lua没有&&符号。。要用and。。。判断物品编号好,还是判断属性好。。。。  发表于 2011-9-16 17:45

评分

参与人数 1声望 +5 收起 理由
tsmdsyp + 5 回答正确

查看全部评分

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

那應是針對水鏡的云体寫的吧
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-16 17:31 | 显示全部楼层
原因上面的已经说了 是针对云体吧
修复还是判断物品编号好一点 因为医书的物品编号在一起,让物品编号在这个范围的的wg=1就是了

点评

不用修改啊,所有的医书都排列在一起的  发表于 2011-9-16 18:11
判断物品编号也想过,但是感觉不是很好,到时新加医疗秘籍还得修改。。。  发表于 2011-9-16 17:43
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2011-9-16 18:38 | 显示全部楼层
wu209000 发表于 2011-9-16 16:41
  • if JY.Person["武功10"]>0 then --请思考一下 这里的定义是为了什么
  • for i=1,10 do
  • if JY.Thi ...

  • 很好!
    如果没有这段定义,水镜的云体就有BUG了
    不仅会导致可在练满十个武功后继续修炼秘籍增加能力
    而且还会令这个函数中某个变量值为空,在调用此变量时游戏就会弹出

    而在这段定义中修复医毒书的问题
    你不用物品编号来做条件判定这个思路也是对的
    改动的方法很简单,只需要再加一个判定条件即可
    再想想看

    ~~~~~~~~~~~~~~~~~~~

    让大家思考一下这个定义是想说明一件事:

    编程需要比较严密的逻辑思维
    当你定义了一个新功能时,应该多想想会不会对游戏的其它地方造成影响

    比如在这里,我虽然想到了云体的问题
    但在修复时又少考虑了练满十个武功再练医书的情况








    【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
    可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
    发表于 2011-9-16 19:17 | 显示全部楼层
    那就用练出武功来判断吧,如果秘籍没有练出武功则wg=1
    这样新增也不用改编号
    【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
    可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
    发表于 2011-9-16 19:55 | 显示全部楼层
    好幾天沒上了 大家討論的越來越熱了
    【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
    可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
    发表于 2011-9-16 21:16 | 显示全部楼层
    local wugongid=JY.Thing[thingid]["练出武功"];
    重新再看了一次,终于明白这个变量的意义。。。。这个变量小于0时是修改不出武功。。。所以在十武功处加上判断。。。

    if JY.Person[pid]["武功10"]>0 then
    改成
    if JY.Person[pid]["武功10"]>0  and wugongid >= 0 then  
    就可以了

    评分

    参与人数 1声望 +3 收起 理由
    xzqcm111 + 3 很好,正确

    查看全部评分

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

    来晚了。错过了这么精彩的教程了。

    在看到九楼的时候,我的看法是:

    一般人物如果已练满十格武功是无法再装备新秘籍的。此处再加判断的目的在于,防止有人利用洗武功的空子,来无限刷属性。例如主角练满十格后,可以无限加第一格和第二格的武功属性。当然同时引入了关于医毒的一点小bug


    即这个判断修复了原版洗野球后无限刷第一格武功属性的BUG. 而在苍炎中,还多了一个第二格。

    后来看到原来这就是曾经的水镜云体bug的由来,真的很有意思!



    【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
    可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
    发表于 2012-7-17 11:07 | 显示全部楼层
    受教了,编程真的需要严谨的思考。
    【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
    可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
    发表于 2012-7-17 12:35 | 显示全部楼层
    ivansz 发表于 2012-7-17 11:07
    受教了,编程真的需要严谨的思考。

    (⊙o⊙)哦 好大一只粉小猪吖
    【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
    可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
    发表于 2012-7-17 13:13 | 显示全部楼层
    一年前的帖子都挖出来了...

    点评

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

    本版积分规则

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

    GMT+8, 2024-12-24 03:19

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

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