铁血丹心

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

[不负责任的教程]新手DIY源码应用教程2.1 - 判定的基础讲解和简单极意的制作

[复制链接]
发表于 2012-8-17 06:49 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 二宫和也 于 2012-8-17 12:03 编辑

返回教程索引

2.1 丐帮的那些事儿 - 从降龙和打狗说起,
判定的基础讲解和简单极意的制作
鉴于这是基础篇,先跟大家讲讲代码里的必需品 - 判定。很多童鞋发帖问乔峰的天赋如何实现,所以我们先从这一点着手:

2.1.1 什么是判定?
搜索关键词:乔峰必出极意,可以看到以下的代码
  1. if pid == 50 or (pid == 55 and math.random(10) < 5) or ((pid == 69 or
  2. (pid == 0 and GetS(4, 5, 5, 5) == 1 and JY.Person[pid]["武功等级" ..
  3. wugongnum] == 999)) and JLSD(30, 70, pid)) then
复制代码
这句代码似乎很长,但其实它只是几个语句用or连接起来的:
1)pid == 50
2)pid == 55 and math.random(10) < 5
3)(pid == 69 or (pid == 0 and GetS(4, 5, 5, 5) == 1 and JY.Person[pid]["武功等级" .. wugongnum] == 999) <-- 注意这里也是由几个句子连接起来的,等下详说
4)JLSD(30, 70, pid)

这里先说明一下,这段话是一个判定语句,所以开头是if,判定成功的话就执行接下来的代码,判定不成功的话就直接跳过。不知道啥叫判定的去打两盘三国杀或者玩一个月dnd。判定语句里面的or代表着or前后的两个条件只要实现其中之一就算判定成功;里面的and代表着and前后的两个条件必须都实现才能判定成功。混合判定的话需要括号来分辨优先权,这就跟咱们学加减乘除一个道理,先做括号里面的,再作括号外面的。

继续解说前面的几个语句,每个字的意思如下:
1)pid - 现在正在行动的人物的人物编号。这个可以用UPedit查看到,比如你一查,50是乔峰,55是郭靖,69是洪7,0是主角,这就对上了。这个变量很重要,请记住它
2)math.random(10) - 这是lua的随机数公式,括号里面的10说明了这个公式会生成1-10的随机数。后面的<5也是判定条件,也就是需要这个随机数字小于5,所以这个部分的几率是4/10=40%
3)GetS(4, 5, 5, 5) == 1 - 这个是灵犀真拳主角的判定,现在不需要管它,知道是什么就好
4)wugongnum - 这个有点难解释,暂时就把它理解为现在所用的是人物的第几个武功好了。比如你用的是第1个武功,wugongnum就等于1
5)JY.Person[pid]["武功等级" .. wugongnum]-联系上文,你应该可以猜出来这个代表着,编号为pid的人物,所用的第“wugongnum”个武功的武功等级(啊好拗口...),这个武功等级必须为999(999代表着极)才能发出降龙极意
6)JLSD(30, 70, pid) - 这个是很重要的函数。基本上大部分特效如果是有几率的话就会调用到这个函数。各位不需要知道这个函数是怎么实现的,只需要知道,括号里面的两个数字的差就是编号为pid的人物的成功几率。所以现在这个人物的成功几率为70-30=40%。另外npc享有10%的加成,所以如果这位人物是npc的话,成功率为70-30+10=50%

在绕了这么一大圈把我自己都搞头晕之后,我总结一下,这个判定语句的整个意思就是
1)如果pid/人物编号为50(乔峰),则必判定成功发出极意
2)如果pid为55(郭靖),则有math.random(10)<5也就是40%几率发出极意
3)如果pid为69(洪7),则有JLSD(30, 70, pid)也就是40%几率(记得npc要多加10%)
4)如果pid为0(主角),而且天赋为真拳,而且降龙的等级为999(极),则有JLSD(30, 70, pid)也就是40%几率。主角的这一段判定有几个括号,而且用or和洪7连起来了,请多看几遍熟悉一下判定的顺序。

最后要注意的是,所有这一切是在以用降龙攻击的前提条件下才能达到的,看关键词上面的那一句代码
  1. if JY.Person[pid]["武功" .. wugongnum] == 26 then         
复制代码
26就是降龙的武功编号,也能用UPedit查到。只有用降龙攻击时才能引发接下来的人物判定等等,才能发出极意。

那么接下来的就是应用。比如如果我们想让虚竹也能以40%几率打出降龙极意的话,先用UPedit查到他的人物编号是49,然后把判定语句插入原本的判定语句中:
  1. if (pid == 49 and JLSD(0, 40, pid)) or pid == 50 or (pid == 55 and
  2. math.random(10) < 5) or ((pid == 69 or (pid == 0 and GetS(4, 5, 5,
  3. 5) == 1 and JY.Person[pid]["武功等级" .. wugongnum] == 999)) and JLSD(30,
  4. 70, pid)) then
复制代码
看到我在开头插了一句(pid == 49 and JLSD(0, 40, pid))没有?这个就是虚竹的判定语句,记得后面要用or连接起来。进游戏里面试试,就可以发现虚竹用降龙也能出极意了。

另外也可以改几率,比如你想要郭靖100%出极意,就把math.random(10) < 5改成math.random(10)<11。主角的几率也可以改,不过这里注意了,因为主角的几率判定JLSD是和洪7连接在一起的,所以改JLSD的话洪7也会受益。这个时候就需要用括号把洪7和主角分开了,相关语句如下
  1. (pid == 69 and JLSD(30, 70, pid)) or (pid == 0 and GetS(4, 5, 5, 5) == 1
  2. and JY.Person[pid]["武功等级" .. wugongnum] == 999 and JLSD(0, 100, pid))
复制代码
这里要注意括号的使用,新手请试多几遍。基本上你能把if语句掌握的话,对DIY的了解就已经入门了。如果发现游戏一开始就直接跳出说明你括号的格式错了,八成是缺了某个边。另外注意在判定语句里面需要用"=="来代表等于,而不是用一般的"=",其余的还有">" "<" ">=" "<="的符号。


2.1.2 扩大极意范围的方法
说到极意的范围,我们先把降龙丢开(因为有点复杂),看看打狗棒法。搜索词打狗棒法 特效,我稍微简化了一下。
  1. --打狗棒法 特效  
  2. if JY.Person[pid]["武功" .. wugongnum] == 80 and JY.Person[pid]["武功等级" ..
  3. wugongnum] == 999 and (JLSD(30, 70, pid) or (pid == 0 and GetS(4, 5, 5,
  4. 5) == 4 and JLSD(30, 75, pid))) then
  5.   WAR.Person[id][CC.TXWZ3] = CC.WARS61   --打狗棒法绝学--天下无狗
  6.   WAR.Person[id][CC.TXDH] = 89
  7.   ng = ng + 1500
  8.   WAR.WS = 1
  9.   for i = 1, 6 do
  10.         for j = 1, 6 do
  11.           SetWarMap(x + i - 1, y + j - 1, 4, 1)
  12.           SetWarMap(x - i + 1, y + j - 1, 4, 1)
  13.           SetWarMap(x + i - 1, y - j + 1, 4, 1)
  14.           SetWarMap(x - i + 1, y - j + 1, 4, 1)
  15.         end
  16.   end
  17. end
复制代码
这又是一大段看得吐血的代码。但是经过前面一节的历练,我相信你一定至少能把第一句的判定看懂吧?这个判定是说,如果使用的武功为打狗(编号80),而且等级为999,则有40%几率出现天下无狗。

注意:这里多了一个判定pid == 0 and GetS(4, 5, 5, 5) == 4 and JLSD(30, 75, pid),聪明如你应该能猜到,GetS(4, 5, 5, 5) == 4就是特系主角的判定,也就是说,特系的主角能够享有45%几率的二次判定。最终的成功率有67%(喜欢统计学的可以算一下,讨厌的可以无视)。所以特系主角出天下无狗的几率大大提升,而平常我们说的xx人物能享有二次判定就是这样子来的。

继续往下看,又有一堆没见过的东西,我在这里解释一下:
1)WAR.Person[id][CC.TXWZ3]:这是人物攻击时的文字显示,CC.WARS61是一个定量,设置为"打狗棒法绝学--天下无狗"。你把这句代码改成 WAR.Person[id][CC.TXWZ3] = "小二万岁" 然后出招试试就知道文字显示是啥东西了
2)WAR.Person[id][CC.TXDH]:这是人物的动画显示,也就是罩在人物头上的那堆红红绿绿的特效,后面的数字是动画的编号,可以用某软件查到,具体的我就不详解了
3)这里要解释一下id这个变量,咋看上去跟pid长得差不多,但实际上他们完全是两码事。id是人物在战场上的编号,是按照轻功来排序的,每场战斗都可能改变。pid是人物在数据文件中的编号,用UPedit可以查的,不会改变。写代码的时候有时候用到id有时候用到pid这点确实会让人头昏,但是因为用法不同所以必须这样,请慢慢适应。现在请先记住至少攻击时的文字显示和动画显示调用的是id。
4)ng:这个好懂,就是附加的气攻值。出无狗的时候气攻值加1500
5)WAR.WS:这个是变量,掌管误伤。如果把它设置为1则该次攻击不会误伤。
6)下面的是重头戏,两个for循环。有编程基础的人可以无视这一段。我只是对新手说一下,以后搞极意的时候照抄就好了!= =....只需要注意那个6,这个数字越大极意的攻击范围就越大,具体的范围是这个数字减1,也就是5x5格。

看懂这段了没有?看懂了之后你回头看看降龙的那段代码,应该至少也能弄懂个70%了吧....

以下是应用篇。问题:如果我要让虚竹使用5级以上的罗汉拳的时候有30%几率打出天马流星拳,效果为9x9大方块,气攻加3000,怎么做?

答案如下,注意武功等级0-99的时候实际上是1级,所以400以上是5级
  1. if JY.Person[pid]["武功" .. wugongnum] == 1 and JY.Person[pid]["武功等级" ..
  2. wugongnum] >= 400 and pid == 49 and JLSD(0, 30, pid) then
  3.   WAR.Person[id][CC.TXWZ3] = "天马流星拳"  
  4.   ng = ng + 3000
  5.   for i = 1, 10 do
  6.         for j = 1, 10 do
  7.           SetWarMap(x + i - 1, y + j - 1, 4, 1)
  8.           SetWarMap(x - i + 1, y + j - 1, 4, 1)
  9.           SetWarMap(x + i - 1, y - j + 1, 4, 1)
  10.           SetWarMap(x - i + 1, y - j + 1, 4, 1)
  11.         end
  12.   end
  13. end
复制代码
看懂了这一步之后,你就可以用任意人物组合任意武功打造你自己的极意了(虽然现在的极意只限于大范围攻击,总比没有的强)

返回教程索引
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-8-17 10:00 | 显示全部楼层
二宫大,那个红色讲解“=”号部分还是给大家补充下吧,diy文件里面不少语句都用到这个赋值,我记得有伤害,杀气等等

点评

是的,代码里使用的武功编号和upedit里面查到的武功编号是一样的  发表于 2012-8-17 11:59
那例如我加一个武功,想为这个武功加特效,那么代号是upedit里面的武功代号么?  发表于 2012-8-17 11:42
游戏开始的时候LDCR.lua会先读取数据文件,也就是用upedit改过的都会在游戏里反映出来,lua文件里面本身并没有“数据”,都是靠读取的。像cc.xxx那些只是代码里的定量,并不是真的游戏数据  发表于 2012-8-17 10:35
不是啊,没学过编程的人是不懂=号是赋值的意思...还有那个UPedit我怎么打不开,另外哪些东西要用到这个修改,哪些用lua修改,我知道的加头像什么的好像会用到  发表于 2012-8-17 10:12
你要怎么样的补充= =...红色的那部分只是在解释lua判定的语法而已啊,"=="就是等于,">"就是大于,以此类推?  发表于 2012-8-17 10:03
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2012-8-17 10:18 | 显示全部楼层
回复 wang0378 的帖子

我这几天不敢再编辑帖子了,等风头过了再说= =

upedit需要下载主程序,然后下载相应的upedit.ini设置文件,最后设置游戏的路径。可以用upedit修改的是数据文件,包括人物/物品/武功/战斗/场景/事件/对话等等。另外可以添加贴图,头像之类的。

大部分数据其实也可以直接在lua文件里面修改,看个人需要了。

点评

我如果用up这个东西改,那么lua文件里面数据也会改么?  发表于 2012-8-17 10:30
好的,谢了  发表于 2012-8-17 10:28
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-8-17 10:35 | 显示全部楼层
回复 二宫和也 的帖子

二宫:大可不必把这事当回事,继续可也。期待中……

点评

二进宫只能怪你起错了名 = =  发表于 2012-8-17 10:55
口胡,我刚才编辑了一下帖子就二进宫了,我才不要三进宫 = =  发表于 2012-8-17 10:40
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-8-17 11:53 | 显示全部楼层
提一个小小滴剑意~~希望每一个分支教程底部 放一个回目录教程的链接

点评

= = 不帮  发表于 2012-8-17 14:02
我刚刚就是在满足你的要求的时候入宫的大哥...我现在很好奇怎样的活动频率才不会被封,你要帮我测试一下么= =  发表于 2012-8-17 11:59
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-8-18 11:41 | 显示全部楼层
setwarmap 里面的4 1 是做什么的。。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2012-8-18 11:50 | 显示全部楼层
回复 baimabo 的帖子

作用是把坐标设为攻击命中,具体的可以参考以下两个帖子

http://www.txdx.net/forum.php?mod=viewthread&tid=556026

http://www.txdx.net/thread-556041-1-1.html
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-9-6 02:02 | 显示全部楼层
为什么我把最后天马流星拳的代码复制进去了,一点都没有呢??
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-9-6 02:09 | 显示全部楼层
复制到最底下是没作用,复制在最上面是直接弹出游戏。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-9-6 02:43 | 显示全部楼层
回复 jy02381074 的帖子

这个不是上面或者下面的问提..你要把他放到正确的位置,天马流星拳的代码是修改攻击范围的,你就先找到同样修改攻击范围的代码,例如 胡家刀法,极意 搜索红色字,找到胡刀极意的代码,把天马流星拳的代码查到他上方就可以了,注意不要和其他的代码混在一起。

点评

哦,原来如此,谢谢!  发表于 2012-9-6 11:25
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2014-1-18 14:32 | 显示全部楼层
感谢二大的教程,看的有点懂了
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2014-2-2 23:49 | 显示全部楼层
我想要使医生主角有百分百降龙极意,不知下面代码正确否
if pid == 50 or (pid == 55 and math.random(10) < 5) or ((pid == 69 and JLSD(30, 70, pid)) or (pid == 0 and GetS(4, 5, 5, 5) == 1
and JY.Person[pid]["武功等级" .. wugongnum] == 999 and JLSD(0, 100, pid) or (pid == 0 and GetS(4, 5, 5, 5) == 7
and JY.Person[pid]["武功等级" .. wugongnum] == 999 and JLSD(0, 100, pid))

点评

括号看得眼花,你自己进入游戏试试就知道了...跳出的话就看一下括号是不是少了,没用的话就看看括号用得对不对,跟加减乘除一个道理  发表于 2014-2-3 09:35
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2014-9-10 21:36 | 显示全部楼层
月毁星沉 发表于 2014-2-2 23:49
我想要使医生主角有百分百降龙极意,不知下面代码正确否
if pid == 50 or (pid == 55 and math.random(10)  ...

我是刚看的帖子第一次学习,你的代码翻译成汉字灵犀真拳也100%?,我认为是
if pid == 50 or (pid == 55 and math.random(10) < 5) or ((pid == 69 or(pid == 0 and GetS(4, 5, 5, 5) == 1 and JY.Person[pid]["武功等级" ..wugongnum] == 999)) and JLSD(30, 70, pid)) or (pid == 0 and GetS(4, 5, 5, 5) == 7 and JY.Person[pid]["武功等级" ..wugongnum] == 999)) and JLSD(0, 100, pid))
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

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

GMT+8, 2024-5-25 22:39

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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