铁血丹心

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

ESC回到武功的选单效果 ?

[复制链接]
发表于 2013-7-23 14:57 | 显示全部楼层 |阅读模式

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

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

x

请问是否有办法做出武功选择后在决定攻击地点时若按ESC则回到武功选单这种效果呢 ?
查了一些DIY相关的部份,有提到选单跳回上一层的做法
可是好像没有办法在非选单的部分(武功选择攻击地点)做出回到上一层的效果
我参照LDCR文件中的一些方式试写了如下语法
在 function War_Fight_Sub 函数里加上

local keypress = lib.GetKey()
if keypress == VK_ESCAPE then
   DIY_War_FightMenu()
End

可是却没有用,反而会造成游戏跳出
请问该怎样做才可以按ESC后跳回上一层的武功选单呢 ?
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-7-23 17:05 | 显示全部楼层
按ESC是可以返回, 不过貌似回到的是主选界面
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-7-23 17:13 | 显示全部楼层
写一个循环,结束条件是成功选择攻击点。
其余情况均返回武功菜单。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-7-23 17:15 | 显示全部楼层
为什么要想法这么奇怪在想怎么跳回上一层

应该在武功选单本身留有判定参数,如果取消的话返回失败,会继续显示选单~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2013-7-23 17:51 | 显示全部楼层
winson7891 发表于 2013-7-23 17:15
为什么要想法这么奇怪在想怎么跳回上一层

应该在武功选单本身留有判定参数,如果取消的话返回失败,会继 ...


先謝謝各位大大提供的意見,小弟我再嘗試看看
而winson大您的問題請稍等我將整個系統改完再跟您說明
目前因為完成度還不高,先不敢說大話....=.=a

点评

hmm...了解,我會試試看,因為在下程序功力不是很強,所以到目前為止的修改都是 try and error ...花很多時間...Orz  发表于 2013-7-24 02:32
可能我没说清楚,我的意思是,游戏其实就是一个大的循环,你要想跳到上一级菜单,那就着重从上一级的循环里面修改,不要从下一层去跳  发表于 2013-7-23 17:53
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-7-24 19:07 | 显示全部楼层
很简单,LDCR.LUA里搜索local r2 = War_Fight_Sub(WAR.CurID, r)    应该有两处

然后再下面一行添加下面的代码就行了:
  1. if r2<=0 then
  2. War_FightMenu()
  3. end
复制代码
这样,使用武功之前,按ESC可以回到武功选择菜单,再按一次则回到一级菜单。



【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2013-7-25 12:19 | 显示全部楼层
慕容老恭 发表于 2013-7-24 19:07
很简单,LDCR.LUA里搜索local r2 = War_Fight_Sub(WAR.CurID, r)    应该有两处

然后再下面一行添加下面 ...

感谢老恭大的帮忙,这代码确实可用
不过有几个问题想请教

1. r = War_Fight_Sub 类似的代码我搜寻到的共有三处
    第一个 local r = War_Fight_Sub(WAR.CurID, canuse[k]) 是在 DIY_War_FightMenu 函数下
    第二个 local r2 = War_Fight_Sub(WAR.CurID, r) 一样是在 DIY_War_FightMenu 函数下,但是挂在 else 后面
    此处的 else 我看不太懂是什么状况的 else ??
    第三个 local r2 = War_Fight_Sub(WAR.CurID, r) 则是挂在 War_FightMenu 函数下

    因此想请问,DIY_War_Fightmenu 跟 War_Fightmenu 到底有什么不同呢 ?
    因为我看 warmenu 里呼叫的是 DIY_War_Fightmenu 而不是 War_Fightmenu
    所以后来我的修改都是以 DIY_War_Fightmenu 来调整

2. 照老恭的方式,我是把代码添加在三处的 r 后面,而前两处的 War_Fightmenu 已改成 DIY_War_FightMenu()
    添加后确实在武功选择攻击点时按 esc 可跳回武功选单,但有状况如下

    一般流程应该是 1. warmenu 战斗主选单 -> 2. DIY_War_Fightmenu 武功列表 -> 3. War_Fight_Sub 选择武功攻击点
    但如果今天我在 3 的地方按 esc 跳回 DIY_War_Fightmenu 后再选一次武功然后执行攻击后
    却会再跳出一次 warmenu 主选单,变成可以动作两次,而如果再照上面的做法按一次 esc 则又可以再动作,变成无限动作
    而如果不在选择攻击点时 esc 跳回武功选单就可顺利结束回合动作
    请问是为什么会再呼叫一次 warmenu 呢 ? DIY_War_Fightmenu 不是已经在 warmenu 的下一层了
    即使重新 esc 呼叫 DIY_War_Fightmenu 也应该不会重新呼叫父选单 warmenu 啊 ??

3. 看了老恭大大的代码想请问,所以其实在 War_Fight_Sub 里不需要去做 lib.getkey 的动作吗 ?
    原本 esc 就回传回值 0 了 ? 即使不做 lib.getkey 的动作也可以抓到键盘的值吗 ?

以上问题有点多,不好意思
因为以前只学过一点 C 语言的皮毛
为了修改 LDCR 又上网去找了 lua 文件语法的数据来参考
但还是很多不明白的地方
因此才想请教各位MOD高手,还请见谅
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-7-25 19:22 | 显示全部楼层
本帖最后由 慕容老恭 于 2013-7-25 19:40 编辑

1。没深研究过超山寨的代码,估计DIY_War_Fightmenu 可以让十个武功对应1~10的快捷键吧(在一级菜单可直接按1~10使用武功)

2。如上,那个else是区分是否使用了10个武功的快捷键。 在local r=.....  下面添加
  1. if r<=0 then
  2.   War_FightMenu()
  3.   end
复制代码
即可(当然如果你不用快捷键那就可以不改动)

其他两个 local r2 = War_Fight_Sub(WAR.CurID, r) 下面加六楼那个代码。

3。 lib.getkey在菜单函数里已经定义了,这里只定义选择菜单是第几项,如果是0(ESC键、鼠标右键)则返回。

点评

謝謝老恭大大的幫忙,不過我找到問題了,下面再解釋~~  发表于 2013-7-31 10:51
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2013-7-31 11:13 | 显示全部楼层
本帖最后由 fina 于 2013-7-31 11:17 编辑
慕容老恭 发表于 2013-7-25 19:22
1。没深研究过超山寨的代码,估计DIY_War_Fightmenu 可以让十个武功对应1~10的快捷键吧(在一级菜单可直接 ...



先谢谢各位板友的帮忙,尤其是老恭大大的耐心指导,感谢

另外,关于若在 DIY_War_Fightmenu() 中加上
if r <= 0 then
  DIY_War_Fightmenu()
End

会在War_Fight_Sub选武功攻击点时按esc重新呼叫DIY_War_Fightmenu()
导致该回合攻击完后War_Manual_Sub的warmenu重新被呼叫
进而产生该回合可无限动作的情况

原因在War_Manual_Sub下进行武功选择动作时
是使用showmenu函数去呼叫warmenu数组来执行DIY_War_Fightmenu()
因此原本在War_Fight_Sub选择武功攻击点时传回的值会回到showmenu函数来判定

但加了if r <= 2 then的判断式后,
当选择武功攻击点时按esc会变成直接由DIY_War_Fightmenu()呼叫自己
因此值回传不到showmenu来进行判定
但动作又一定会透过War_Manual_Sub来呼叫showmenu
所以变成无限动作
我的解决方式是

1.
新增一个整体变量WAR.TEST = 0在WarSetGlobal下一堆WAR.XXX变数那里

2.
在上面的
if r <= 0 then
  WAR.TEST = 1 &#61663;新增此行
  DIY_War_Fightmenu()
End

3.
搜寻if JY.Status == GAME_WMAP and numItem == 14 and menuItem[14][1] == "自动" then
在此判断式下加上

--新增当值未正确传回War_Manual_Sub时使用全体变量判断来中断showmenu的显示
if WAR.TEST == 1 then
  returnValue = -2
  break;               --中断40458行的while循环
end

4.
搜寻
if WAR.ZYHB == 2 then
  WAR.ZYHB = 0
end
此处附近为回合结束的判断式
在回合结束的地方加上
WAR.TEST = 0

如此就不会重复呼叫warmenu

话说….这问题找了我好几天,找到我快疯掉
还上网去翻lua键值的定义….Orz

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

本版积分规则

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

GMT+8, 2024-11-25 11:20

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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