铁血丹心

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

武功特效学习(基本战斗变量)

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

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

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

x
本帖最后由 蓝烟清 于 2011-9-28 23:27 编辑

战斗招式之前已经说明了,接着准备说战斗特效,但是在说特效之前,有一些战斗的变量必须得先了解,否则战斗特效就很难明白
WAR={}; 全局变量,所有的战斗数据都保存在这个数组中

下面是战斗中人物的属性数组,WAR.Person是不分敌我的,需要使用 if WAR.Person[id]["我方"] then 判断是已方,另外也可以使用 if WAR.Person[id]["我方"]==false then 来判断敌方
  1. WAR.Person[i]={};                        --声明数组结构
  2. WAR.Person[i]["人物编号"]=-1;                --人物的编号
  3. WAR.Person[i]["我方"]=true;            --true 我方,false敌人
  4. WAR.Person[i]["坐标X"]=-1;                --人物当前所站位置的X坐标
  5. WAR.Person[i]["坐标Y"]=-1;                --人物当前所站位置的Y坐标
  6. WAR.Person[i]["死亡"]=true;                --true已经死亡,false未死亡
  7. WAR.Person[i]["人方向"]=-1;                --人物面对的方向
  8. WAR.Person[i]["贴图"]=-1;                        --人物的贴图
  9. WAR.Person[i]["贴图类型"]=0;        --0 wmap中贴图,1 fight***中贴图
  10. WAR.Person[i]["轻功"]=0;                        --人物轻功
  11. WAR.Person[i]["移动步数"]=0;        --可移动的步数
  12. WAR.Person[i]["点数"]=0;                        --修练点数
  13. WAR.Person[i]["经验"]=0;                        --人物经验值
  14. WAR.Person[i]["自动选择对手"]=-1;     --自动战斗中每个人选择的战斗对手
  15. WAR.Person[i]["Status"]=0;                --状态,作用未知,似乎没在使用
  16. WAR.Person[i]["Move"]={};                --可移动的范围,在War_MovePerson函数计算
  17. WAR.Person[i]["Action"]={};        --人物行为,似乎也没在使用了,在即时制版攻击行为被注释起来
  18. WAR.Person[i]["Time"]=0;                --人物集气值
  19. WAR.Person[i]["TimeAdd"]=0;        --集气的增加量,如果为负,则减集气
  20. WAR.Person[i]["SpdAdd"]=0;        --速度加成,似乎没见在用,应该是换成了TimeAdd
  21. WAR.Person[i]["Point"]=0;                --作用未知
  22. WAR.Person[i]["特效动画"]=-1;                --内功加力或者护体等出现的人物上的圈
  23. WAR.Person[i]["反击武功"]=-1;                --斗转专用的了
  24. WAR.Person[i]["特效文字1"]=nil;        --最上层,默认红色,暴气会心一击,你懂的
  25. WAR.Person[i]["特效文字2"]=nil;        --中间层,各种内功加力使用的
  26. WAR.Person[i]["特效文字3"]=nil;        --最低层,默认白色,招式默认使用的
复制代码
还有几个变量
WAR.PersonNum                        --战场上的总人数,包括敌人
WAR.CurID                                --当前满集气人在战场上的ID
WAR.LifeNum                        --当前战场上剩余的总人数

暂时这么多吧,还有一些以后不过没有了解得好,特别是WAR.tmp,蛤蟆蓄力、人物不同资质平滑升级等都用到它

利用上面的变量,咱们就可以做一些简单的特效,不过目前只用通过修改drawname函数来实现了(悲剧的绘画名字的函数,只能将就着了)
做一个主角攻击出个蛤蟆功动画的特效吧(只是有动画,没有实际效果)
  1. function drawname(x,y,name,size)
  2.         x=x-math.modf(size/2)
  3.         local namelen=string.len(name)/2
  4.         local zi={}
  5.           for i = 1, namelen do
  6.             zi[i] = string.sub(name, i * 2 - 1, i * 2)
  7.             DrawString(x, y, zi[i], C_WHITE, size)
  8.             y = y + size
  9.           end
  10.         
  11.         -------上面部分是drawname函数的源码,保留不管----------
  12.         
  13.         
  14.         if WAR.Person[WAR.CurID]["我方"] == false then                --如果是敌人,直接返回
  15.                 do return;end
  16.         end
  17.         
  18.         
  19.         local pid=WAR.Person[WAR.CurID]['人物编号'];                --获取当前行动人物的编号
  20.         if pid == 0 then                --如果是主角,主角编号为0嘛
  21.                 WAR.Person[WAR.CurID]["特效动画"]=math.fmod(95,10)+85;                --蛤蟆功的动画
  22.                 WAR.Person[WAR.CurID]["特效文字1"]="自创·主角特效";                --红色的,看起来舒服
  23.         end
  24.         
  25.         --[[
  26.         --上面是比较简单的了,主角攻击必出,但是呢连击的时候没有效果 - -。 没清楚S大的连击机制,还有待研究啊
  27.         --下面来个更复杂点的,为了不冲突,下面的代码全部先注释,想用的时候自己去掉注释哦
  28.         --我们接着的目标是针对武功才出动画特效。 学了易筋经必出特效吧
  29.         if pid == 0 then                --还是主角
  30.                 for i=1,10 do
  31.                         local kfid=JY.Person[pid]["武功"..i];
  32.                         if kfid == 108 then                        --易筋经的武功编号是108
  33.                                 WAR.Person[WAR.CurID]["特效动画"]=math.fmod(95,10)+108;                --易筋经的动画
  34.                                 WAR.Person[WAR.CurID]["特效文字1"]="自创·易筋经特效";                --红色的
  35.                                 --WAR.Person[WAR.CurID]["特效文字2"]="自创·易筋经加力";                --经测试,特效文字2不能改,不清楚什么情况
  36.                                 break;
  37.                         end
  38.                 end
  39.         end
  40.         --]]
  41. end
复制代码
把drawname函数的代码复制到新文件drawname.lua,再用DIY.lua加载就可以了。 如果一点基础都没有,估计不懂怎么回事。。。

评分

参与人数 1声望 +5 收起 理由
tsmdsyp + 5 好帖奖励

查看全部评分

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

WAR.tmp[200+人物编号]
数值滿 100, 下次攻擊出蟾震九天

WAR.tmp[2000+人物编号]
数值為 1 則此人已經神照復活
数值為 nil 則此人未神照復活

点评

嗯,肯定是全局的变量。 猜不到,只能等S大进一步公布了  发表于 2011-9-29 12:40
你那个用file io 找 kfname 的方法給我很大啟發; 另我覺得集气的改變應在 function GetJiqi, 各人的 TimeAdd 是在此定義的, 東方不敗的高速集气也在這定義, 故感覺徐如林的特效也在此, 計算主角 TimeAdd 時实行的  发表于 2011-9-29 09:38
嗯,这两个有。 还有一个平滑升级的,也用到了。 S大估计也用了一些,我猜平一指杀人增加集气,其徐如林的效果都会用到。 以后一起交流啊  发表于 2011-9-28 23:24
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-28 18:41 | 显示全部楼层
本帖最后由 tsmdsyp 于 2011-9-28 18:41 编辑

有个错误:

if WAR.Person[WAR.CurID]["敌方"] == true then                --如果是敌人,直接返回
                do return;end
       end


WAR.Person[WAR.CurID]["敌方"]
这个值实际为空--nil
不可能等于true
所以这实际是一个无效的判定

        

点评

哦。这样子啊。 理解了。 应该是WAR.Person数组里没有["敌方"]这个下标吧  发表于 2011-9-28 23:25
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-28 18:54 | 显示全部楼层
本帖最后由 kutree 于 2011-9-28 18:56 编辑

已经学习过其他朋友提供的各色战斗特效补丁了,有了这些具体解说就更容易理解了。
所以非常感谢分享研究成果!

PS:另外想问下,怎么才能在发帖的时候启用LZ那种代码框的效果啊?

点评

找到了,原来要打开“高级”才能看到,多谢了!  发表于 2011-9-28 22:15
发帖时有个“代码”的按钮 在那里输入即可  发表于 2011-9-28 22:07
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-29 12:26 | 显示全部楼层
蓝烟清  嗯,这两个有。 还有一个平滑升级的,也用到了。
S大估计也用了一些,我猜平一指杀人增加集气,
其徐如林的效果都会用到。 以后一起交流啊  发表于 2011-9-28 23:24

哈哈,那个是27大的懒人定义法
把几个特效写在一个表中,多加两个表都懒得加


苍炎里,在WarSetGlobal() 中增加了大量的全局变量
用来实现各种战斗特效和人物特效


点评

那个是在战斗时用来判定人物是否走火(逆运)了的,如果走火了,就不算是队友了  发表于 2011-9-29 12:40
呵呵,这样子啊。感谢S大的支持。 在判断队友是否在队里的函数中,也用了WAR.tmp。。。。  发表于 2011-9-29 12:35
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-28 17:57 | 显示全部楼层
谢谢楼主的分享
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-28 17:57 | 显示全部楼层
嗯,对新手很有帮助,学习学习~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-12-28 10:54 | 显示全部楼层
怎么有这个,都没加到帖子里,晕死
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-12-28 11:08 | 显示全部楼层
说实话,这一讲的内容用处很小很小。。。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-12-28 10:13 | 显示全部楼层
本帖最后由 gtfish 于 2011-12-28 10:17 编辑

顶楼上,我说这篇我怎么没看过呢还有第十三讲也要加到教程目录里去啊
顶蓝大

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

蓝大啊,把这个添加进教程里吧,好难找- -
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

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

GMT+8, 2024-11-23 12:57

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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