铁血丹心

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

【极意的实现方法】选好攻击武功以后,选攻击位置,这时候坐标参数是如何传递的

[复制链接]
发表于 2011-12-26 02:55 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 gtfish 于 2011-12-26 14:39 编辑

首先要感谢wklee3大大的指导
极意具体实现的方法见3楼
我的问题还没搞定,不过实现极意的目的倒是用wklee3大大提供的思路(见二楼)解决了
在这之前只能实现伪极意,就是极意方阵的中心点只能是当前人物,不能跟随武功攻击位置移动
这也是很多朋友的做mod碰到的问题





我的思路是找到源码里选好武功之后选攻击地点的函数,然后重构这个函数,把坐标复制到全局变量里,出极意的时候以这个坐标为中心画矩形
于是碰到一个问题:
找不到选择攻击地点的函数

游泳的鱼lua复刻版和半即时版我都看了,从jymain里我知道:
选攻击菜单是War_FightMenu
之后给出武功列表
之后调用War_Fight_Sub(WAR.CurID,r)

但是这里War_Fight_Sub只有2个参数,之后的War_Fight_Sub定义有4个参数,后两个就是攻击点的坐标
DIY里测试,调用两个参数的War_Fight_Sub(WAR.CurID,r)会要求先选择攻击地点,再在该地点处执行CURID的武功r(这个原理可以实现斗转可控制)
调用四个参数的War_Fight_Sub(WAR.CurID,r,x,y)直接出在(x,y)点执行CURID的武功r
我觉得这是一个函数重载,但是找不到2个参数的War_Fight_Sub定义啊

PS:测试方法是重新定义War_RestMenu() 即休息菜单函数,在末尾分别加上War_Fight_Sub(WAR.CurID,r),War_Fight_Sub(WAR.CurID,r,x,y)


看到有朋友说用War_SelectMove()实现,我试验过不行,这个函数执行过以后是进入选攻击地点的步骤,如果加在DIY_Fight中就会要求选攻击地点两次,其中第二次才是这个函数返回的x,y,和游戏里不一致
另外游戏里攻击地点不是用War_SelectMove()这个函数,但是移动,医疗什么的用的是这个,我在diy里重新定义War_SelectMove(),中间加入QZXS("1")
在移动,医疗,解毒时都有显示,但是选过武功以后没有




求大神指条明路吧~~~




【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-12-26 04:08 | 显示全部楼层
1. 應是在        War_Fight_Sub 中用以下一段代碼完成的
        local m1,m2,a1,a2,a3,a4,a5= refw(wugong,level)
        local movefanwei={m1,m2}--{Rnd(4),Rnd(8)}
        local atkfanwei={a1,a2,a3,a4,a5}--{Rnd(13),Rnd(8),Rnd(8),Rnd(8),Rnd(8)}
        x,y=War_FightSelectType(movefanwei,atkfanwei,x,y)
        if x==nil then
                return 0

    但其中的 War_FightSelectType 及 refw 則找不到定義

2. 做降龙极意, 要找之前定的攻击位置
war map 的 level 4 不是有一个用1做成的點陣圖嗎?  利用這點陣圖不是能尋回之前定的攻击位置選點嗎? 當然這方法是有點麻煩

点评

求教wklee3怎么拿取war map对应level的点阵图。我尝试过 GetWarMap 结果发现功能完全不对应啊。一用就跳出。  发表于 2011-12-26 10:33
wklee3早~~加个好友吧  发表于 2011-12-26 09:23
做极意的話, 最好不要做降龙, 做黯然或七傷等吧; 我剛試過,降龙的攻击範圍最後仍會被改掉  发表于 2011-12-26 09:18
wklee3大大真的太牛逼了,看你的帖子收益良多啊,用SetS保存数据也是看你的回帖想到的  发表于 2011-12-26 09:09
昨晚看代码看到3点,眼都花了~~  发表于 2011-12-26 08:25
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2011-12-26 11:29 | 显示全部楼层
本帖最后由 gtfish 于 2011-12-26 11:36 编辑

极意我是这样写的,已通过测试,需要的朋友可以参考一下
  1.   local xmax,xmin,ymax,ymin
  2.   
  3.   



  4.                
  5.         xmax,xmin,ymax,ymin = -1,64,-1,64                               --战斗地图坐标0~63
  6.         for i = 0, 63 do                                                                 --遍历战斗地图第四层(武功生效则值为1),取生效范围横纵坐标最值
  7.                 for j = 0,63 do
  8.                         if GetWarMap(i,j,4) == 1 then
  9.                                 if xmax < i then
  10.                                         xmax = i;
  11.                                 end
  12.                                 if xmin > i then
  13.                                         xmin = i;
  14.                                 end
  15.                                 if ymax < j then
  16.                                         ymax = j;
  17.                                 end
  18.                                 if ymin > j then
  19.                                         ymin = j;
  20.                                 end
  21.                         end
  22.                 end
  23.         end


  24.         for i = xmin,xmax do                                                          --用横纵坐标最值重绘战斗地图第四层
  25.                 for j = ymin,ymax  do
  26.                         SetWarMap(i,j,4,1)
  27.                 end
  28.         end
复制代码

点评

开始的初值max很小,min很大,保证赋值不会跳过 你运行一下 中间加点QZXS看看就行了  发表于 2011-12-26 17:54
第一个二重循环找level 4里值为1的坐标的最大最小值,得到xmax,xmin,ymax,ymin 第二个循环是用这4个值画方框 这样是为了通用性,任何武功触发极意范围都会变成矩形,若是只要拳系,按照wklee3大大的写法就行了  发表于 2011-12-26 17:51
你这实现的是全屏攻击还是全屏定点攻击啊?我没看懂,不知道是什么效果,用来干嘛的  发表于 2011-12-26 17:41
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-12-26 14:51 | 显示全部楼层
我的方法如下,應也和楼上差不多

1. 假設武功是黯然,且已練至極, 故點陣應是"米"字
2. 找"米"字的一角(即 GetWarMap(i,j,4)~=0 )
3.  x1=i+3; y1=j+3 ( x1, y1 便是"米"字中心)


  1. if wugong==25 then
  2.   local i,j,x1,y1=0,0
  3.    while GetWarMap(i,j,4)==0 do
  4.     j=j+1;
  5.     if j>63 then j=0; i=i+1 end
  6.   end
  7.   x1=i+3; y1=j+3


  8.   CleanWarMap(4,0)                    --清除原來 level 4 的值

  9.   for i=x1-5,x1+5 do
  10.   for j=y1-5,y1+5 do
  11.             SetWarMap(i,j,4,1) end end    --以 x1, y1 為中心  設定11*11 的攻擊範圍
  12. end
复制代码



点评

您好, 最近你幾个作品都很給力啊  发表于 2011-12-27 05:17
大侠,您好!  发表于 2011-12-26 17:42
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2011-12-26 14:55 | 显示全部楼层
呵呵,我正在做的mod有所有武功的极意,所以做的通用一点~~

点评

期待啊,我就不去研究了,毕竟资质比较差,很多看不懂、等你做出来爽爽  发表于 2011-12-27 16:01
那樣是更好了  发表于 2011-12-26 15:03
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-12-26 15:34 | 显示全部楼层
受益匪浅啊~看代码看的头都大了~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2011-12-26 23:43 | 显示全部楼层
本帖最后由 gtfish 于 2011-12-26 23:44 编辑
wklee3 发表于 2011-12-26 04:08
1. 應是在        War_Fight_Sub 中用以下一段代碼完成的
        local m1,m2,a1,a2,a3,a4,a5= refw(wugong,level)
        lo ...

wklee3大大,War_FightSelectType我已经找到了,不在苍半里,是在以前回合制lua版的源码中

以后有什么函数在苍半里没找到定义就可以在这里面找找,至于为什么在这里面找看一下苍半的历史就知道了
我在这个帖子里有提到:http://www.txdx.net/thread-529143-1-1.html
达摩堂的置顶帖也有


源码附上,作者为游泳的鱼

本帖子中包含更多资源

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

x

点评

謝謝  发表于 2011-12-27 05:15
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-12-27 00:43 | 显示全部楼层
学习了学习了,楼主和wklee3大都很厉害!
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

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

GMT+8, 2024-12-23 22:58

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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