铁血丹心

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

[不负责任的教程]新手DIY源码应用教程2.2 - 连击的实现

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

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

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

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

返回教程索引

2.2 那一碗黯然销魂饭 -
连击连击连击的实现方法

龙人版的杨过邪线后用黯然会几率出现3连击,这个是如何实现的呢?先看一下代码,搜索词杨过黯然销魂掌
  1. if pid == 58 and JY.Person[pid]["武功" .. wugongnum] == 25 and
  2. JY.Person[pid]["武功等级" .. wugongnum] == 999 and GetS(86,11,11,5) == 2
  3. then
  4.         local jl = 10 --默认发动机率为10%
  5.         if JY.Person[58]["受伤程度"] > 50 then --内伤大于50时, 每增加10点极意增加10%
  6.                 jl = jl + (JY.Person[58]["受伤程度"]-50);                                 
  7.         end   
  8.         if JY.Person[58]["生命"] < JY.Person[58]["生命最大值"]/2 then
  9.                 jl = jl + math.ceil((JY.Person[58]["生命最大值"]/2 - JY.Person[58]["生命"])/10);                            end
  10.         if jl > Rnd(100) then --判断极意触发 三连
  11.                 fightnum = 3;
  12.         end        
  13. end
复制代码
照例,if语句里面你可以看出判定条件为1)人物是杨过(58),2)用的是黯然,3)黯然需要极,4)GetS(86,11,11,5) == 2,这个是判定神雕走的是邪线,你知道就好

以上条件都满足的话,进入几率的判定,这一次并没有直接运用到JLSD,因为作者的想法是,受伤越重或者生命越小则几率越高。我们一步步看下去:
1)local jl = 10:前面我说到了“定义”这个概念,这里就是一个定义的例子,我们在这里定义了一个名字为"jl"的变量(其实就是几率的拼音缩写),并把它的初始数值设成了10。local的意思是,这个jl只能在这一段代码里面使用,就像你中国的户口到美帝那边就不好使了,一个道理。
2)接下来就容易了,你一看就知道,杨过内伤如果大于50,则每加一点内伤jl这个变量增加1点;生命值也是同理,越少则jl越大
3)最后进行判定,Rnd(100)这个函数会随机产生0-100的数(修正:应该是0-99),这个有点类似math.random,不过前者是自己写的函数,后者是lua预设的公式。只有jl这个变量大于Rnd(100)产生的随机数时,才能产生效果。所以如果杨过是满状态的话,几率只有初始的10%,如果杨过内伤100的话,几率增加到了60%(自己算算对不对?)
4)最后是这个极意的效果:fightnum = 3。这个fightnum也是一个变量,掌管着攻击次数。现在就是说,如果特效判定成功,杨过的攻击变成3连击。你想把它变成100连击就把fightnum改成100...

如果顺着这段代码继续往上面看,你会看到一堆判定fightnum值的语句,都有注释,可以自己慢慢研究某些特殊的连击效果是怎样产生的,搜索关键词:判断连击

以下是应用篇。问题:如果主角用玄冥时有70%的几率出现4连击,自身中毒每高10点几率多1点,怎样写?

答案:
  1. if pid == 0 and JY.Person[pid]["武功" .. wugongnum] == 21 then
  2.         local jl = 70
  3.         jl = jl + math.modf(JY.Person[pid]["中毒程度"] / 10)
  4.         if jl > Rnd(100) then               
  5.                 fightnum = 4
  6.         end        
  7. end
复制代码

返回教程索引
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-8-17 09:28 | 显示全部楼层
提个小剑意~~~每个分贴给一个回目录贴的链接
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-8-24 16:58 | 显示全部楼层
二宫:
在你的本节讲义中,发现一个线索:讲到暗然三连的条件时,有一句“GetS(86,11,11,5) == 2”,说是神雕邪线条件。确实,正邪做为一个可引用的分界条件,很有用途,我想利用一下。能否说明,86,11,11,5的含义?另外,其它天书剧情也有正邪之分,在引用时,是否都采用这样的表述,如何查到?
务请回答一下。谢谢。

点评

啊来晚了,生意被抢了= =...正邪之分都可以用这种方法判定的,我自己也常用,不过小心用之前要确认那个全局变量有没有被其他事件用过,不然会起冲突  发表于 2012-8-25 09:00
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-8-24 17:20 | 显示全部楼层
本帖最后由 ivansz 于 2012-8-24 17:22 编辑

回复 fujs 的帖子

86,11,11,5 没有规律可言 ,他只是程序员记录数据的一个地址而已,因为苍炎里所有的变量在打开游戏时都会被重置,所以把游戏数据存储到地图层可以方便很多。86,11,11,5 是程序员自定义的,
86是地图编号 11 ,11 是坐标 5 是地图层
具体用法可以看蓝大的教学贴:
第十三讲 SetS和GetS
http://www.txdx.net/forum.php?mod=viewthread&tid=525594&fromuid=486738


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

ivansz:
    我看了有关讲义,也看了原事件的代码,实在看不出所以然。请问,如何理解电脑执行该语句?从什么资料处查到类似86这样的地图编号?
务请指教。谢谢。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-8-24 17:54 | 显示全部楼层
本帖最后由 ivansz 于 2012-8-24 17:55 编辑

回复 fujs 的帖子

地图编号就是我们坐马车时输入的那个编号。70就是小村
假如现在我要存储一个数据 记录主角重生了几次

你就可以在神照重生的代码里加入一条语句

if eid == 0 then
  local tmp = Get(70,1,1,5)
  tmp = tmp + 1
  Set(70,1,1,5,tmp)
end

这样小村的1,1位置就存储了主角重生次数的数据

以后要取这个数据只要用  Get(70,1,1,5) 就行了

其实熟练的话就可以直接简写为
if eid == 0 then
  Set(70,1,1,5, Get(70,1,1,5) +1)
end
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-8-24 17:56 | 显示全部楼层
谢谢详解。我下来理解下。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-7-14 10:30 | 显示全部楼层
这段代码放到什么位置去 ???
是不是放到LDCR.lua 里面 随便哪个位置都行是么???

点评

原来,掉了个then  发表于 2013-7-19 19:12
不行啊,放进去之后,游戏无法启动!要放在什么位置呢???  发表于 2013-7-17 14:37
放在war_fight_sub函数里,塞在那些连击判断语句中间就好,参照顶楼的第一句话  发表于 2013-7-14 12:58
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-8-15 22:18 | 显示全部楼层
啊,大神,我按照你说的弄了,但还是不能实现玄冥4连,放在war_fight_sub函数里我也试了,可还是不行。。是我放的位置有误?我试了下白夏和超山寨2个版本,都不行啊

点评

超山寨应该可以吧...白夏我加密了,你可以试试放在patch.lua里面的war_fight_sub里  发表于 2013-8-15 23:36
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-8-16 13:29 | 显示全部楼层
tod135 发表于 2013-8-15 22:18
啊,大神,我按照你说的弄了,但还是不能实现玄冥4连,放在war_fight_sub函数里我也试了,可还是不行。。是 ...

成功了,多谢大神指点
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-8-20 18:05 | 显示全部楼层
成功了,多谢大神指点
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

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

GMT+8, 2024-6-2 15:28

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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