刀剑2修改双人副本单人可进和赛马单人可进的方法
本帖最后由 q2430591974 于 2025-7-19 15:51 编辑一.双人副本单人可进
只修改服务端dpk目录下的data\script\scene\special_script\mojiawuguan\wuguan_cmn_trans.lua
(1) 修改函数function judge_team_num(player, num)
if allnum == num and cur_Teammate == 1 then
改成
if allnum >= 1 then
(2)修改函数function check_cmn_all_state(player, excelID, isPayNow, isCheckInviteid)
if member == nil then
return false
end
改成
local cur_num = player:GetAllMember()
if member == nil then
if cur_num > 1 then
return false
end
member = player
end
(3)修改函数function on_ack(player, m, datatable, ack_index)
第一处修改:
else
player:ShowUIText(bo2.eSendModeFlag_Self, 73126)
return
改成(直接注释)
--else
--player:ShowUIText(bo2.eSendModeFlag_Self, 73126)
--return
第二处修改:
player:AddCooldown(id)
member:AddCooldown(id)
player:GM_AddActivation(5)
member:GM_AddActivation(5)
改成
if member == player then
member:AddCooldown(id)
member:GM_AddActivation(5)
else
player:AddCooldown(id)
member:AddCooldown(id)
player:GM_AddActivation(5)
member:GM_AddActivation(5)
end
二.赛马单人可进
(1)修改战场配置文件data\mb\etc\battle_list.txt,服务端和客户端目录的这个文件都要修改
赛马 5 112*153 120 2 30 2 10 20 100 10 40 1 2
改成
赛马 5 112*153 1800 2 30 2 10 20 100 10 40 1 2
(2)只修改服务端dpk目录下的data\script\scene\activity\horse_racing\interface\horse_race_scn.lua
function OnStateChgWaiting(scn)
local function Broadcast_SoonBegin(player)
local v = sys.variant()
v:set(L("leave_time"), TimeTip)
player:ShowUIText(bo2.eSendMode_Self, 2046, v)
end
local function SendSoonBegin()
if scn == nil then
return
end
scn:ForEachScnPlayer(Broadcast_SoonBegin)
TimeTip = TimeTip - 30
end
TimeTip = 90
for i = 1, 3 do
bo2.AddTimeEvent(750 * i, SendSoonBegin)
end
end
改成
function OnStateChgWaiting(scn)
local function Broadcast_SoonBegin(player)
local v = sys.variant()
v:set(L("leave_time"), TimeTip)
player:ShowUIText(bo2.eSendMode_Self, 2046, v)
end
local function SendSoonBegin()
if scn == nil then
return
end
if TimeTip > 0 then
scn:ForEachScnPlayer(Broadcast_SoonBegin)
TimeTip = TimeTip - 30
else
BattleGroupStateChg(scn, bo2.eBattleGroupState_Begin)
end
end
TimeTip = 90
for i = 1, 4 do
bo2.AddTimeEvent(750 * i, SendSoonBegin)
end
end
(3)打包客户端和服务端的dpk并替换
说明:lua代码非常注重代码缩进,稍有不慎编译出错。有些端的lua文件是编译后的,需要对lua文件进行反编译后才能修改。不会修改DPK基础的,先在宝湾找基础修改教程再看这个。
自己修改的附件,可以参考:
感谢分享: 本帖最后由 qq5787256 于 2025-7-20 11:36 编辑
谢谢分享 大佬,请问lua脚本如何解密的?网上找的那种解密以后复制下来可以直接使用吗?如果有其他工具能否共享一下?另外有没有裙服玩? jy02512459 发表于 2025-7-21 08:55
大佬,请问lua脚本如何解密的?网上找的那种解密以后复制下来可以直接使用吗?如果有其他工具能否共享一下 ...
我用的unluac反编译的,是个java开发的程序,需要安装java运行环境,地址:https://sourceforge.net/projects/unluac/。
你可以用其它的反编译工具,注意用版本是5.1的lua反编译工具。反编译之后修改完成,不需要进行编译,直接源码替换就行。
哦对了,还有个网站可以在线反编译,但我不知道兼容5.1的lua不,地址:https://www.luatool.cn/ jy02512459 发表于 2025-7-21 08:55
大佬,请问lua脚本如何解密的?网上找的那种解密以后复制下来可以直接使用吗?如果有其他工具能否共享一下 ...
裙服没了,在玩单机了 学习 。。。。。。。 q2430591974 发表于 2025-7-21 09:25
我用的unluac反编译的,是个java开发的程序,需要安装java运行环境,地址:https://sourceforge.net/proj ...
谢谢指导。~ 感觉复杂了,直接在进入函数加个时间器,时间够了然后调用开门函数 本帖最后由 q2430591974 于 2025-7-21 22:23 编辑
tsangwinghou 发表于 2025-7-21 21:27
感觉复杂了,直接在进入函数加个时间器,时间够了然后调用开门函数
我这把if else end都算一行就多了四行代码,也不复杂吧,可以把你的发出来学习下吗? q2430591974 发表于 2025-7-21 22:08
我这把if else end都算一行就多了四行代码,也不复杂吧,可以把你的发出来学习下吗?
嗯,本身这东西也没啥复杂的,我的也差不多,在进入场景的函数那里添加一个局部函数运行开门的那个函数,然后再添加多一个定时器调用这个局部函数~~我这个可能简单点,不用直接删掉就行了,没改过原代码的结构,不过定时器得计算好时间,可能会和开门倒计时有一点时间误差~~大佬要是有兴趣研究刀剑2改端的话,不妨私一下Q加个群或者好友探讨下? tsangwinghou 发表于 2025-7-21 23:41
嗯,本身这东西也没啥复杂的,我的也差不多,在进入场景的函数那里添加一个局部函数运行开门的那个函数, ...
我不是大佬,也就这几天单机自己随便改改,你才是真正的大佬啊,B站UP大佬: 感谢大佬的无私分享,受教了 请问下,boss吃控制修改哪个,还有饱食度7500上限哪里修改呀 qq5787256 发表于 2025-7-23 10:27
请问下,boss吃控制修改哪个,还有饱食度7500上限哪里修改呀
不清楚,没研究过 大佬多来点教程,我们小白也能跟着一起修改研究一下。这才是藏宝湾该有的分享精神 关于单人进副本的第三个要改的函数function on_select_2(player, npc, line)
local event_stream = line.Event2
local event_func = line.Event2_Func
if event_stream ~= 0 and event_stream ~= nil then
local scn = player.scn_unit
quest_cmn.start(scn, player, npc, still, event_stream)
elseif event_func ~= L("") and event_func ~= nil then
local scn = player.scn_unit
bo2.RunScript(event_func, scn, player, npc, still)
else
-- 修改:直接进入,不进行双人检查
local scn_id = line.Event2_scn
local cd_id = line.scn2_cd
-- 检查CD
if cd_id ~= 0 and get_share_cd_state(player, nil, cd_id) ~= true then
return
end
-- 检查付费物品
if line.pay_id ~= 0 then
local paystate, itemtext = get_payitem_state(player, line)
if paystate == true then
local v = sys.variant()
v:set(packet.key.multi_item, itemtext)
player:SafeAward(v, nil, nil, 2151)
else
return
end
end
-- 直接传送
player:ChgScn(2, scn_id, "playerbegin", 0, 0, true)
-- 添加CD
if cd_id ~= 0 then
local cd_line = bo2.gv_define:find(cd_id)
if cd_line ~= nil and cd_line.value.v_int ~= 0 then
local id = cd_line.value.v_int
player:AddCooldown(id)
end
end
-- 日志记录
if line.wuguan_log == 1 then
local event_id = bo2.CreateGlobalOnlyID()
local npc_info = "," .. npc.excel_id .. "," .. npc.alias
wuguan_need_log(player.scn_unit, player, npc, line, 2, event_id, npc_info)
end
end
end修改原因:原本这个函数会发送组队邀请,现在改为直接单人进入副本。上述三个加上这个,89端就可以单人进副本了,不需要从控制台进入。
页:
[1]