铁血丹心

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

方便易用的自制菜单

  [复制链接]
发表于 2011-9-28 20:42 | 显示全部楼层 |阅读模式
本帖最后由 kutree 于 2011-9-28 20:41 编辑

DIY的补丁主要分为两种:剧情补丁,功能补丁。
剧情补丁就是类似“郭襄补丁”之类的,用于新增剧情或者修复原版的BUG。
而功能补丁呢就是增加一些方便的功能,用来节省时间或者增加便利性。

比如,经常大战之后队员们的状态都不是最佳的了,这时候一般都会选择回家睡觉,然后继续进行剧情。
这样无疑浪费了不少时间,如果能够在任意场景(当然是非战斗场景……)中都能随时提供休息的功能,不就方便多了么?
而且这也不影响游戏的平衡性,仅仅是节省一点时间罢了。
相同的情况还有不少,武功到了10级就要空挥到极,让它自动到极不就省了大把的时间了么。

这些零零碎碎的小功能补丁最好是要随时都能调用(当然还是非战斗场景了……),但如果每次都要 ESC》系统》我的代码 这样来运行的话,就太不方便了,而且这还涉及到函数重复定义的问题,降低了效率。
所以为解决这个问题,我们当然要制作一个随身的菜单,用来执行这些功能了。

831版中新增的一个功能就是更多的快捷键,战斗中和非战斗中的都有。
其中感觉F5,即全屏切换这个功能似乎基本没有人回去使用,那么我们就利用一下这个快捷键吧!

通过苍半的源码,我们基本可以得知全屏切换的函数为:Menu_FullScreen()
既然用不到这个功能了,我们就重载一下它吧:


  1. function Menu_FullScreen()
  2. instruct_0();
  3. local mainMenu = {
  4.       {"全员恢复状态",FullStatus,1},
  5.       {"人物等级最大化",MaxStatus,1},
  6.       {"人物武功升为极",SkillLevel,1},
  7.       {"补丁测试",DIY_Test,1},
  8.       };
  9. local x1=(CC.ScreenW-9*CC.DefaultFont-2*CC.MenuBorderPixel)/2;
  10. local y1=(CC.ScreenH-5*CC.DefaultFont-4*CC.RowPixel-2*CC.MenuBorderPixel)/2;
  11. local r=ShowMenu(mainMenu,4,0,x1,y1,0,0,1,1,CC.DefaultFont,C_ORANGE, C_WHITE);
  12. instruct_0();
  13. end
复制代码

这个就是我自己暂时使用的小菜单了,菜单出现的位置为屏幕中央,和商店显示物品的位置是一样的。
其中mainMenu这个table里面就可以定义你想要的功能以及相应的函数了,那些函数就自己去发挥吧。
DIY的时候,仅仅需要作相应的修改mainMenu的内容就大功告成了,当然不要忘了ShowMenu下面函数中的第二个参数,设定成菜单的项数就可以了!

实际使用的时候,我们只需在游戏开始的的时候运行一次“我的代码”,之后在大地图或场景内按F5,就能使用这个菜单了!是不是非常方便呢!

最后附上我自己现在用的菜单下载


里面整合了论坛里的搜刮补丁和BUG修正补丁,希望能对大家有所帮助!

本帖子中包含更多资源

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

x

评分

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

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-28 21:04 | 显示全部楼层
instruct_0();
這個函數是什麼作用的?

点评

清屏,函数里面的内容就是Cls()。当然这里直接用Cls()也完全可以。  发表于 2011-9-28 21:25
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-28 21:05 | 显示全部楼层
很不错,很实用!沙发
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-28 21:17 | 显示全部楼层
比如我想把慧慧MOD放在你得菜单里应该怎么做呢,能否举例说明
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2011-9-28 21:38 | 显示全部楼层
本帖最后由 kutree 于 2011-9-28 21:39 编辑

回复 杨少 的帖子

慧慧的MOD属于剧情类DIY,理论上来说就是仅需在载入游戏后执行一次就可以了,无需随时反复调用的。

这里提供两个解决方案:
方案一:仅在选择“我的代码”时执行一次
只需要把我提供的那段代码复制到DIY.lua里面就行了。

方案二:如果真想加到菜单里面
首先,修改一下这个重构函数

  1. function Menu_FullScreen()
  2. instruct_0();
  3. local mainMenu = {
  4.       {"全员恢复状态",FullStatus,1},
  5.       {"人物等级最大化",MaxStatus,1},
  6.       {"人物武功升为极",SkillLevel,1},
  7.       {"补丁测试",DIY_Test,1},
  8.       {"慧慧补丁",XZH,1},  --table里面加上一条
  9.       };
  10. local x1=(CC.ScreenW-9*CC.DefaultFont-2*CC.MenuBorderPixel)/2;
  11. local y1=(CC.ScreenH-5*CC.DefaultFont-4*CC.RowPixel-2*CC.MenuBorderPixel)/2;
  12. local r=ShowMenu(mainMenu,5,0,x1,y1,0,0,1,1,CC.DefaultFont,C_ORANGE, C_WHITE);  --菜单改为5项
  13. instruct_0();
  14. end
复制代码
然后定义一个新函数,用于调用慧慧补丁,名字就是上面新加的XZH了
  1. local function XZH()
  2. dofile ".\\script\\STAR\\XZH_OldEVENT.lua";
  3. dofile ".\\script\\STAR\\Star.lua";
  4. dofile ".\\script\\STAR\\Star1.lua";
  5. QZXS("增强补丁载入成功,祝游戏愉快!by Star")
  6. end
复制代码

函数的内容就是慧慧补丁的DIY.lua中的内容了,当然如果想用其他人的补丁,也可以用类似的方法,替换一下新函数的内容就行了!

点评

谢谢你得解答  发表于 2011-9-28 22:06
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-28 21:50 | 显示全部楼层
是把上面2个复制代码都放DIY.LUA里 还是分别创建?
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2011-9-28 22:05 | 显示全部楼层
回复 77113891 的帖子

放在哪里其实都是无所谓的,因为他们属于函数定义,只要这些代码在游戏载入后被执行过一次就可以了。

都放在DIY.lua里面是可以的。
如果觉得太乱,也可以将这些代码保存到某文件,例如My_DIY.lua里面,然后在DIY.lua里面用dofile命令运行就可以了。

详情可以看看附件里面的源程序。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-29 00:18 | 显示全部楼层
其实屏幕中央还有另一种方式,我写了一个我喜欢的方式,供你参考。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-29 00:30 | 显示全部楼层
不错,很有想法。
我自己都是直接调用休息函数,不做选项。呵呵
楼主对人物属性理解不错
不过武功到极,最后不要改999,因为这样改到极的加成就没有了,像石破天的50轻功。改成998就好,战斗挥一次升级。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-29 11:47 | 显示全部楼层
看不懂,人不再家得等回到家再試試了!
是能夠省時省力了!
話說這些代碼還真看不懂!= =''
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-29 14:48 | 显示全部楼层
恩,感谢,先用用……
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-29 18:18 | 显示全部楼层
语言都难以表达对你的感谢啊,剩了不少功夫啊。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-29 20:50 | 显示全部楼层
回复 kutree 的帖子

我將兩個函數

CORY到我的DIY執行檔裡面

但是覆蓋的這段

  1. function Menu_FullScreen()
  2.     instruct_0();
  3.     local mainMenu = {
  4.           {"全員恢復狀態",FullStatus,1},
  5.           {"人物等級最大化",MaxStatus,1},
  6.           {"人物武功升為極",SkillLevel,1},
  7.           {"補丁測試",DIY_Test,1},
  8.           {"秀外慧中補丁",XZH,1},  
  9.           };
  10.     local x1=(CC.ScreenW-9*CC.DefaultFont-2*CC.MenuBorderPixel)/2;
  11.     local y1=(CC.ScreenH-5*CC.DefaultFont-4*CC.RowPixel-2*CC.MenuBorderPixel)/2;
  12.     local r=ShowMenu(mainMenu,5,0,x1,y1,0,0,1,1,CC.DefaultFont,C_ORANGE, C_WHITE);
  13.     instruct_0();
  14.     end
复制代码
可以執行,但是只要按F5就會造成跳出

然後如果又添加這段
  1. local function XZH()
  2. dofile ".\\script\\STAR\\XZH_OldEVENT.lua";
  3. dofile ".\\script\\STAR\\Star.lua";
  4. dofile ".\\script\\STAR\\Star1.lua";
  5. QZXS("秀外慧中載入成功!")
复制代码
會導致整個DIY崩壞跳出

我嘗試把函數改成這樣

  1.      function Menu_FullScreen()
  2.     instruct_0();
  3.     local mainMenu = {
  4.           {"全員恢復狀態",FullStatus,1},
  5.           {"人物等級最大化",MaxStatus,1},
  6.           {"人物武功升為極",SkillLevel,1},
  7.           {"秀外慧中補丁",DIY_Test,1},
  8.           };
  9.     local x1=(CC.ScreenW-9*CC.DefaultFont-2*CC.MenuBorderPixel)/2;
  10.     local y1=(CC.ScreenH-5*CC.DefaultFont-4*CC.RowPixel-2*CC.MenuBorderPixel)/2;
  11.     local r=ShowMenu(mainMenu,4,0,x1,y1,0,0,1,1,CC.DefaultFont,C_ORANGE, C_WHITE);
  12.     instruct_0();
  13.     end

  14.     local function DIY_Test()
  15.     dofile ".\\script\\Star\\XZH_OldEVENT.lua";
  16.     dofile ".\\script\\Star\\Star.lua";
  17.     dofile ".\\script\\Star\\Star1.lua";
  18.     QZXS("秀外慧中載入成功!")
  19.     end
复制代码
但是打開菜單之後卻沒辦法執行

請問問題在哪?




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

回覆 895967 的帖子


如果用取代第四項的方法來做
可以打開菜單窗口 但是點選無作用

  1. --將全屏選項改為DIY菜單
  2.     function Menu_FullScreen()
  3.     instruct_0();
  4.     local mainMenu = {
  5.           {"全員恢復狀態",FullStatus,1},
  6.           {"人物等級最大化",MaxStatus,1},
  7.           {"人物武功升為極",SkillLevel,1},
  8.           {"秀外慧中補丁",DIY_Test,1},
  9.           };
  10.     local x1=(CC.ScreenW-9*CC.DefaultFont-2*CC.MenuBorderPixel)/2;
  11.     local y1=(CC.ScreenH-5*CC.DefaultFont-4*CC.RowPixel-2*CC.MenuBorderPixel)/2;
  12.     local r=ShowMenu(mainMenu,4,0,x1,y1,0,0,1,1,CC.DefaultFont,C_ORANGE, C_WHITE);
  13.     instruct_0();
  14.     end

  15. local function DIY_Test()
  16. dofile ".\\script\\Star\\XZH_OldEVENT.lua";
  17. dofile ".\\script\\Star\\Star.lua";
  18. dofile ".\\script\\Star\\Star1.lua";
  19. QZXS("秀外慧中載入成功!")
  20. end
复制代码




我的Star文件夾我確定在script資料夾內


假設我的檔案放在
H:\jy\jy0905\script\Star

改寫成函數應該就是
  1. dofile ".\\script\\Star\\XZH_OldEVENT.lua";
  2. dofile ".\\script\\STAR\\STAR.lua";
  3. dofile ".\\script\\STAR\\Star1.lua";
复制代码
還是說缺少了某些執行命令?


附上我現在使用的DIY執行文件檔


本帖子中包含更多资源

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

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

求助
我只想让队友等级满(全能力满,有点无聊了@@)
以下该如何修改?(直接透过一般执行代码即可)
local maxFlag = false;
for i = 1,6 do
local manaMax = 0;
local absorbFlag = false;

local pid = JY.Base["队伍"..i];

while JY.Person[pid]["等级"] ~= 30 do --先判断是否满级
JY.Person[pid]["经验"] = CC.Exp[JY.Person[pid]["等级"]];
War_AddPersonLVUP(pid);
end
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2011-9-30 21:11 | 显示全部楼层
回复 walter 的帖子

  1. for i = 1,6 do  
  2.   local pid = JY.Base["队伍"..i];
  3.   if pid >= 0 then
  4.    while JY.Person[pid]["等级"] ~= 30 do --判断是否满级
  5.     JY.Person[pid]["经验"] = CC.Exp[JY.Person[pid]["等级"]];
  6.     War_AddPersonLVUP(pid);
  7.    end
  8. end
  9. end
复制代码

点评

感谢喔,运行没问题  发表于 2011-9-30 21:21
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-30 22:19 | 显示全部楼层
AddPersonAttrib(pid, "内力最大值", 10000)
用这个,可以不用另外判定特殊人物&资质,不会超过上限

点评

太客气了,我看别人脚本发现的,刚接触很多代码都不懂意思,还请多帮忙  发表于 2011-9-30 23:23
哦,受教了,还是这个办法比较好  发表于 2011-9-30 22:57
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

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

GMT+8, 2024-12-22 20:46

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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