铁血丹心

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

[不负责任的教程]新手DIY源码应用教程2.4 - 暴击的实现和lua的"表"功能

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

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

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

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

返回教程索引

2.4
那些曾经的加暴和高暴 - 论连击的兄弟暴击和lua的坑爹表

前面说了一堆关于连击的代码,这次轮到暴击了。其实暴击和连击差不多,所以我长话短说。搜索关键词:计算暴击
  1. local BJ1 = math.modf(JY.Person[pid]["攻击力"] / 18)
  2. local BJ2 = math.modf((JY.Person[pid]["内力最大值"] + JY.Person[pid]["内力"]) / 1000)
  3. local BJ3 = math.modf(JY.Person[pid]["体力"] / 10)
  4. local BJ = 0
  5. BJ = BJ1 + BJ2 + BJ3
复制代码
一开始我们就看到了一堆定义和变量,你可以看到暴击得基础几率跟人物的攻击力,内力,体力有关。基础几率是存放在BJ这个变量里面的。连击的代码里也有类似的定义。这一段不难理解,我们继续往下看。
  1. --加暴击的武功(我简化了一下,原来有个local up,那是多余的不用管它)
  2. local bjup = {18, 22, 39, 40, 56, 65, 71, 78, 74, 61}
  3. for i = 1, 10 do
  4.   if JY.Person[pid]["武功" .. i] > 0 then
  5.         for ii = 1, #bjup do  --这里我改了一下,貌似原来的代码少数了一个?
  6.           if JY.Person[pid]["武功" .. i] == bjup[ii] then
  7.                 BJ = BJ + 5
  8.           end
  9.         end
  10.   end
  11. end
复制代码
新东西来了,还记得天翔之前的版本里面有些武功会加连加暴么?这里就是加暴的武功发挥作用的地方。如果你回头看看连击的代码也能看到类似的东西,那加连的武功。我们照例分解动作:

1)bjup - 这是一个临时定义的。据说lua中最强大的也是最复杂的就是这个表,而我们面前的这个是一个最简单的例子。注意它两边是大括号{}而不是我们平常用的小括号(),里面共有10个值,用逗号分开。这些数字你拿UPedit查一下就会发现这些就是加暴击的武功的编号。使用的时候我们要用中括号[]来得到表里面的数据。以上面的表为例,
bjup[1]的值为18,bjup[8]的值为78,bjup[11]的值为nil,也就是没有值,因为里面就只有10个数字没有第11个。最后讲的是#的使用,把#加在表的名字前面就会返回表里面有多少个值,比如#bjup就等于10(因为里面有10个值)。看吧虽然这是最简单的表其实理解起来真的有点难度....

2)重点的两个for循环,我其实一直想避免讲解这个东西但该来的还是要来...所谓的循环就是把某一个代码重复做n次,每一次可能稍微做些改变。

外面的那个循环是定义一个i(这是任意的名字,你也可以把它改成f, u, c, k, u, k,结果是一样的。这个i会从1一直增加到10,每增加一次就会运行一次循环里面的代码(也就是运行10次),里面的代码的意思就是检查人物的10个武功JY.Person[pid]["武功" .. i],看看每个武功是不是属于能加暴击率的武功。怎样检验呢?那就是看里面的那个循环了。

里面的循环是定义一个ii(也是很随便的名字),数值是从1到#bjup(也是10),作用就是把bjup这个表里面的数字一个一个扫描过去,如果突然发现表里面的数字对上了人物现在拥有的武功,就说明人物练了加暴击的武功,BJ这个变量就加5。这个代码会一直执行下去,直到表里面所有的数字都被扫描完毕。

总结一下,这两个循环,每检查人物的一个武功就会扫描bjup表里面的10个数字一次,最多检查10个武功,也就是里面的代码最多会被运行10*10=100次。每检查出人物拥有一个加暴击的武功,BJ这个变量就会加5。

这就是家暴,不,加暴的实现....看懂了么?没看懂请再看一次.-_-...还是不懂记得要提问,代码里很多效果都是靠表实现的,比如加连的武功也是这样。

继续看下去
  1. local jl = math.random(200)
  2. if jl > 60 and jl < 60 + BJ then
  3.   WAR.BJ = 1
  4. end
复制代码
这里就是具体的暴击判断了,实现方法是先产生一个1-200之间的随机数值,然后如果这个数字大于60而且小于60+BJ,则判定成功。具体的几率应该是BJ除以200。
判定成功的时候会把WAR.BJ设置为1,WAR.BJ也是个变量,等于1的时候说明人物此次攻击会出现暴击。

如果判定没有成功怎么办?不用担心,下面还有一堆二次判定等着你。
  1. --高暴击武功
  2. local gbj = {11, 13, 28, 33, 58, 59, 72, 75}
  3. for i = 1, 8 do
  4.   if JY.Person[pid]["武功" .. wugongnum] == gbj[i] and JLSD(20, 75, pid) then
  5.         WAR.BJ = 1
  6.   end
  7. end
复制代码
又见一个表。这次代表着高暴武功,一共有8个。用一个for循环扫描过去,如果人物此次攻击使用的武功属于表里面的某一个武功的话,有一次75-20=50的判定几率,成功的话WAR.BJ设置为1。这就是高暴武功的实现方法,高连武功也是差不多的。

再举一个二次判定暴击的例子,玄铁剑
  1. if JY.Person[pid]["武器"] == 36 then
  2.         if wugong == 45 then
  3.                 WAR.BJ = 1
  4.         elseif (wugong==114 or wugong==110 or (wugong>=27 and wugong<=49)) and JLSD(35, 75, pid) then
  5.                 WAR.BJ = 1
  6.         end
  7. end
复制代码
如果人物装备的武器等于36(玄铁剑)的话,出现两个选项:
1)如果wugong等于45,直接暴击。这里要解释一下wugong这个变量,搜索一下关键词wugong = JY.Person[pid]["武功" .. wugongnum],你就会发现,wugong被设置成JY.Person[pid]["武功" .. wugongnum]了,也就是说后者基本上可以直接拿wugong这个短小精悍变量来代替。
2)如果wugong不等于45,则进行下一个判断(elseif)。这次如果wugong是任意剑法的编号的话,有40%的几率出现暴击

作业:如果我想用表和循环实现以下效果,怎样做:人物装备上任意剑类装备,配上松风剑法,有50%几率暴击

在此表扬cbws童鞋和fujs童鞋的勤奋好学准时交作业,各奉上小红花一朵银两100以示鼓励

答案:
  1. local xxx = {36, 37, 38, 39, 40, 41, 42, 55, 236}
  2. for i = 1, 9 do --这里的9可以改成#xxx
  3.   if JY.Person[pid]["武器"] == xxx[i] and wugong == 134 and JLSD(0, 50, pid) then
  4.         WAR.BJ = 1
  5.   end
  6. end
复制代码

返回教程索引

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-8-17 08:39 | 显示全部楼层
二宫童鞋辛苦了= =,打了这么多资料,竟然被封了
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

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

GMT+8, 2024-11-23 16:35

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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