藏宝湾网游单机站

 找回密码
 注册

QQ登录

只需一步,快速开始

★69 元包站 Gm 手游平台★

★69 元包站 Gm 手游平台★

★Gm 游戏平台【无限资源包站平台,真正体验gm和土豪感觉】★

★白嫖放置传奇 玩通关算你赢★

★白嫖放置传奇 玩通关算你赢★

★白嫖长久耐玩型 放置类挂机传奇游戏 充值可打 安全挂机 可交易 无PK★

★@梦幻长久耐玩全新大唐九黎★

★@!!——梦幻长久耐玩全新大唐九黎——!!★

★★新增全新门派九黎城, ★侵烛系统 ★静脉系统 ★赐福系统 ★战斗动作声效系统 ★全场景NPC、召唤兽迭代最新 ★17个副本,完全还原 ★独家PK系统,享受极致免费PK★★

承接推广
★承接推广★

★承接推广★

☆ 六一活动开放-放置传奇☆

★ 六一活动开放-放置传奇★

★可白嫖 上班摸鱼类 放置文字传奇游戏(放置休闲)qq群756025698★

★三职业复古★开局送神装★爆率100%★零氪首选★

★三职业复古★开局送神装★爆率100%★零氪首选★

★〖双线〗〖无忧传奇〗〖每日新区〗〖开局送神装 100%高爆率 装备元宝打怪爆〗★

承接推广

★承接推广★

★承接推广★

承接推广

★承接推广★

★承接推广★

★DNF★全职业平衡★公益服★
★DNF★全职业平衡★公益服★

【dnf86版本】【怀旧服】【全职业平衡】【非变态服】【非商业服】【774031300】

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

查看: 544|回复: 6

[求助] 请分享我一份“刀剑2单人进副本的文件”

[复制链接]
 楼主| 发表于 2026-3-20 23:10:48 | 显示全部楼层 |阅读模式
回复

使用道具 举报

发表于 2026-3-21 14:57:47 | 显示全部楼层
没有收藏,帮顶一下了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-3-22 15:07:10 | 显示全部楼层
liyicheng556 发表于 2026-3-21 14:57
没有收藏,帮顶一下了

谢谢帮顶.
回复 支持 反对

使用道具 举报

发表于 2026-3-22 17:33:05 | 显示全部楼层
把下面代码  替换   服务端的  data\script\scene\special_script\mojiawuguan\wuguan_cmn_trans.lua  里面的内容,看行不行吧,不行不用追问,我只是个抄作业的
-------------------------------------------------------
wuguan_table = sys.load_table("$mb/wuguan_trans/wuguan_trans.xml")
wuguan_for_invite_table = {}
function check_wuguan_same_invite(player, inviter)
  local t = wuguan_for_invite_table[player.only_id]
  if t == nil then
    return true
  end
  local may = true
  for i, v in pairs(t) do
    may = cmn_invite.on_check_the_same_invite(v, inviter, player)
    if may == false then
      return false
    end
  end
  return may
end
function find_and_remove_wuguan_invite(invite_id, playerid)
  local t = wuguan_for_invite_table[playerid]
  if t == nil then
    return
  end
  for i, v in pairs(t) do
    if v == invite_id then
      t[i] = nil
      break
    end
  end
  if #t == 0 then
    t = nil
    wuguan_for_invite_table[playerid] = nil
  end
end
function get_level_state(player, line)
  local level = line.level
  local size = level.size
  if size == 0 then
    return true
  elseif size ~= 2 then
    print("wuguan_trans|level|error!")
    return false
  else
    local minlevel = level[0]
    local maxlevel = level[1]
    local mylevel = player:GetAtb(bo2.eAtb_Level)
    if minlevel == 0 and maxlevel >= mylevel then
      return true
    elseif maxlevel == 0 and minlevel <= mylevel then
      return true
    else
      if minlevel <= mylevel and maxlevel >= mylevel then
        return true
      end
      return false
    end
  end
end
function get_quest_state(player, line)
  local quest = line.quest
  local size = quest.size
  if size == 0 then
    return true
  end
  if size % 3 ~= 0 then
    print("wuguan_trans|quest|error!")
    return
  end
  local quest_state = false
  for i = 0, size - 1, 3 do
    local questID = quest[i]
    local msID = quest[i + 1]
    local state = quest[i + 2]
    local mystate = player:GetQuestState(questID, msID)
    if mystate == state and not quest_state then
      quest_state = true
    end
  end
  return quest_state
end
function get_payitem_state(player, line)
  local payid = line.pay_id
  if payid == 0 then
    return true
  end
  local payline = bo2.gv_payment_in_scn:find(payid)
  if payline == nil then
    return
  end
  local pay_item = payline.pay_item
  if pay_item == 1 then
    local item_ids = payline.item_type
    local item_nums = payline.item_num
    local idsize = item_ids.size
    local canpay = true
    local itemtext = ""
    if idsize == item_nums.size and idsize > 0 then
      for i = 0, idsize - 1 do
        local item_id = item_ids[i]
        local item_num = item_nums[i]
        if item_id > 0 then
          local mycount = player:GetItemCount(item_id, nil, true)
          if item_num <= mycount then
            if i < idsize - 1 then
              itemtext = itemtext .. item_id .. "*" .. item_num .. "*"
            else
              itemtext = itemtext .. item_id .. "*" .. item_num
            end
          else
            canpay = false
            local v = sys.variant()
            v:set(L("item"), item_id)
            v:set(L("num"), item_num)
            player:ShowUIText(bo2.eSendModeFlag_Self, 86526, v)
            break
          end
        end
        return canpay, itemtext
      end
    end
  end
end
function judge_team_num(player, num)
  local allnum = player:GetAllMember()
  local state = false
  if num == 1 then
    if allnum == 0 or allnum == num then
      state = true
    else
      player:ShowUIText(bo2.eSendModeFlag_Self, 80273)
    end
  elseif num == 2 then
    local cur_Teammate = player:GetTeammateAmount(-1)
    if allnum >= 1 then
      state = true
    else
      player:ShowUIText(bo2.eSendModeFlag_Self, 80348)
    end
  end
  return state
end
function judge_live_state(player, num, member)
  if player ~= nil then
    local state = player:IsDead()
    if state == true then
      player:ShowUIText(bo2.eSendMode_Self, 83028)
      return false
    end
  end
  if member ~= nil then
    local state = member:IsDead()
    if state == true then
      player:ShowUIText(bo2.eSendMode_Self, 83029)
      member:ShowUIText(bo2.eSendMode_Self, 83028)
      return false
    end
  end
  return true
end
function judge_CD(player, num, member, scn_excel_id)
  if player ~= nil and player:IsEnterMaxCD(scn_excel_id) ~= true then
    return false
  end
  if member ~= nil and member:IsEnterMaxCD(scn_excel_id) ~= true then
    player:ShowUIText(bo2.eSendModeFlag_Self, 81112)
    return false
  end
  return true
end
function judge_level_match(player, num, member, scn_excel_id)
  local flag = true
  local scn_line = bo2.gv_scn_list:find(scn_excel_id)
  if scn_line == nil then
    return false
  end
  local my_level = player:GetAtb(bo2.eAtb_Level)
  local member_level
  if member ~= nil then
    member_level = member:GetAtb(bo2.eAtb_Level)
  end
  local level_min = scn_line.min_level
  local level_max = scn_line.max_level
  local v = sys.variant()
  if level_min > 0 then
    v:set(L("min_level"), level_min)
    if my_level < level_min then
      flag = false
      player:ShowUIText(bo2.eSendMode_Self, 83013, v)
      if member ~= nil then
        member:ShowUIText(bo2.eSendMode_Self, 83014, v)
      end
    elseif member_level ~= nil and member_level < level_min then
      flag = false
      member:ShowUIText(bo2.eSendMode_Self, 83013, v)
      player:ShowUIText(bo2.eSendMode_Self, 83014, v)
    end
    if flag ~= true then
      return flag
    end
  end
  if level_max > 0 then
    v:set(L("max_level"), level_max)
    if my_level > level_max then
      flag = false
      player:ShowUIText(bo2.eSendMode_Self, 83015, v)
      if member ~= nil then
        member:ShowUIText(bo2.eSendMode_Self, 83016, v)
      end
    elseif member_level ~= nil and member_level > level_max then
      flag = false
      member:ShowUIText(bo2.eSendMode_Self, 83015, v)
      player:ShowUIText(bo2.eSendMode_Self, 83016, v)
    end
    if flag ~= true then
      return flag
    end
  end
  return flag
end
function wuguan_need_log(scn, player, npc, line, num, event_id, npc_info)
  local log_flag = line.wuguan_log
  if log_flag ~= 1 then
    return
  end
  local wuguan_name = line.wuguan_name
  if wuguan_name == L("") then
    print("wuguan name is nil!")
    return
  end
  local scn_id
  if num == 1 then
    scn_id = line.Event1_scn
  elseif num == 2 then
    scn_id = line.Event2_scn
  end
  if scn_id == nil then
    print("scn_id is nil!")
    return
  end
  local scn_line = bo2.gv_scn_list:find(scn_id)
  local min_level = scn_line.min_level
  local max_level = scn_line.max_level
  local wuguan_info = "," .. 5000 + scn_id .. "," .. tostring(wuguan_name)
  local extend = "," .. min_level .. "," .. max_level
  wuguan_log.WuguanLogStart(player, wuguan_info, npc_info, transMoney, strGetItem, strLostItem, extend, event_id)
end
local fn_tb = {
  judge_team_num,
  judge_live_state,
  judge_CD,
  judge_level_match
}
function on_select_1(player, npc, line)
  local event_stream = line.Event1
  local event_func = line.Event1_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 trans_premise = line.Event1_pre
    local scn_id = line.Event1_scn
    local pre_state = true
    for i = 0, trans_premise.size - 1 do
      local ifvalue = trans_premise[i]
      if ifvalue == 1 then
        local fn = fn_tb[i + 1]
        if fn then
          pre_state = pre_state and fn(player, 1, nil, scn_id)
          if pre_state == false then
            return
          end
        end
      end
    end
    local cd_id = line.scn1_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)
    if cd_id ~= 0 then
      local line = bo2.gv_define:find(cd_id)
      if line ~= nil and line.value.v_int ~= 0 then
        local id = line.value.v_int
        player:AddCooldown(id)
      end
    end
    local event_id, npc_info
    if line.wuguan_log == 1 then
      event_id = bo2.CreateGlobalOnlyID()
      npc_info = "," .. npc.excel_id .. "," .. npc.alias
    end
    wuguan_need_log(scn, player, npc, line, 1, event_id, npc_info)
  end
end
function get_share_cd_state(player, member, cd_id)
  local line = bo2.gv_define:find(cd_id)
  if line ~= nil and line.value.v_int == 0 then
    return true
  end
  local id = line.value.v_int
  if player ~= nil and player:MayAddCooldown(id) ~= true then
    local cdline = bo2.gv_cooldown_list:find(id)
    if cdline == nil then
      return
    end
    local cd_max = cdline.token
    local v = sys.variant()
    v:set(L("max"), cd_max)
    player:ShowUIText(bo2.eSendModeFlag_Self, 73166, v)
    return false
  end
  if member ~= nil and member:MayAddCooldown(id) ~= true then
    local cdline = bo2.gv_cooldown_list:find(id)
    if cdline == nil then
      return
    end
    local cd_max = cdline.token
    local v1 = sys.variant()
    v1:set(L("max"), cd_max)
    member:ShowUIText(bo2.eSendModeFlag_Self, 73166, v1)
    player:ShowUIText(bo2.eSendModeFlag_Self, 73167, v1)
    return false
  end
  return true
end
function check_cmn_all_state(player, excelID, isPayNow, isCheckInviteid)
  local line = wuguan_table:find(excelID)
  if line == nil then
    return false
  end
  local trans_premise = line.Event2_pre
  local scn_id = line.Event2_scn
  local pre_state = true
  if trans_premise[0] == 1 then
    local fn = fn_tb[1]
    pre_state = pre_state and fn(player, 2)
    if pre_state == false then
      return false
    end
  end
  local member
  local function get_mem(mem)
    if player.scn_unit == mem.scn_unit then
      member = mem
    end
  end
  player:ForEachTeammate(get_mem)
  local cur_num = player:GetAllMember()
  if member == nil then
    if cur_num > 1 then
      return false
    end
    member = player
  end
  if isCheckInviteid == true then
    local may1 = check_wuguan_same_invite(player, member)
    if may1 == false then
      player:ShowUIText(bo2.eSendModeFlag_Self, 73151)
      return false
    end
    local may2 = check_wuguan_same_invite(member, player)
    if may2 == false then
      player:ShowUIText(bo2.eSendModeFlag_Self, 73150)
      return false
    end
  end
  for i = 1, trans_premise.size - 1 do
    local ifvalue = trans_premise[i]
    if ifvalue == 1 then
      local fn = fn_tb[i + 1]
      if fn then
        pre_state = pre_state and fn(player, 1, member, scn_id)
        if pre_state == false then
          return false
        end
      end
    end
  end
  if line.scn2_cd ~= 0 and get_share_cd_state(player, member, line.scn2_cd) == false then
    return false
  end
  if line.quest_2 ~= 1 then
    local quest_state = get_quest_state(member, line)
    if quest_state == false then
      player:ShowUIText(bo2.eSendMode_Self, 85119)
      member:ShowUIText(bo2.eSendMode_Self, 85120)
      return false
    end
  end
  if line.level_2 ~= 1 then
    local levelstate = get_level_state(member, line)
    if levelstate == false then
      local v = sys.variant()
      v:set(L("name"), member.name)
      player:ShowUIText(bo2.eSendMode_Self, 86525, v)
      member:ShowUIText(bo2.eSendMode_Self, 86525)
      return false
    end
  end
  if line.pay_id ~= 0 then
    local paystate, itemtext = get_payitem_state(player, line)
    if paystate == true then
      if isPayNow == true then
        local v = sys.variant()
        v:set(packet.key.multi_item, itemtext)
        player:SafeAward(v, nil, nil, 2151)
      end
    else
      return false
    end
  end
  return true, member
end
function on_ack(player, m, datatable, ack_index)
  local jiaoben_popo_data = datatable.add_data
  if jiaoben_popo_data == nil then
    return
  end
  local invitor_name = jiaoben_popo_data:get(packet.key.cha_name).v_string
  local member = bo2.FindPlayer_n(invitor_name)
  find_and_remove_wuguan_invite(datatable.invite_id, datatable.targetid)
  if ack_index == 0 then
    if member ~= nil then
      local v = sys.variant()
      v:set(L("cha_name"), player.name)
      member:ShowUIText(bo2.eSendModeFlag_Self, 80653, v)
    end
    return
  elseif ack_index == 1 then
    if member == nil then
      player:ShowUIText(bo2.eSendModeFlag_Self, 80348)
      return
    end
    local cur_num = player:GetAllMember()
    if cur_num == 2 then
      do
        local issame = true
        local function get_mem(mem)
          if mem.name ~= invitor_name then
            player:ShowUIText(bo2.eSendModeFlag_Self, 73126)
            issame = false
          end
        end
        player:ForEachTeammate(get_mem)
        if issame == false then
          return
        end
      end
    --else
          --player:ShowUIText(bo2.eSendModeFlag_Self, 73126)
          --return
    end
    local excelID = jiaoben_popo_data:get(packet.key.scn_excel_id).v_int
    local state_now = wuguan_cmn_trans.check_cmn_all_state(member, excelID, true, false)
    if state_now ~= false then
      local wuguan_table = wuguan_cmn_trans.wuguan_table
      local wuguan_line = wuguan_table:find(excelID)
      local scn_id = datatable.target_scn_id
      member:GroupChgScn(2, wuguan_line.Event2_scn, "playerbegin", 0)
      local cd_id = wuguan_line.scn2_cd
      if cd_id ~= 0 then
        local line = bo2.gv_define:find(cd_id)
        if line ~= nil and line.value.v_int ~= 0 then
          local id = line.value.v_int
          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
        end
      end
      if wuguan_line.wuguan_log == 1 then
        local event_id = jiaoben_popo_data:get(packet.key.wuguan_log_onlyid).v_string
        local npc_info = jiaoben_popo_data:get(packet.key.cmn_name).v_string
        wuguan_cmn_trans.wuguan_need_log(scn, member, npc, wuguan_line, 2, event_id, npc_info)
        wuguan_cmn_trans.wuguan_need_log(scn, player, npc, wuguan_line, 2, event_id, npc_info)
      end
    end
  end
end
function on_invite_timeout(target, inviter, data_table)
  find_and_remove_wuguan_invite(data_table.invite_id, data_table.targetid)
  if sys.check(target) and sys.check(inviter) then
    local v = sys.variant()
    v:set("cha_name", target.name)
    inviter:ShowUIText(bo2.eSendMode_Self, 73138, v)
  end
end
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 state, member = check_cmn_all_state(player, line.id, false, true)
    if state == false then
      return
    end
    local function send_popo(member, event_id, npc_info)
      local popo_param = sys.variant()
      popo_param:set("cha_name", player.name)
      local popo_fmt = bo2.gv_text:find(81076).text
      local popo_str = sys.mtf_merge(popo_param, popo_fmt)
      local v_data = sys.variant()
      v_data:set(packet.key.scn_excel_id, line.id)
      v_data:set(packet.key.cha_name, player.name)
      if event_id ~= nil then
        v_data:set(packet.key.wuguan_log_onlyid, event_id)
        v_data:set(packet.key.cmn_name, npc_info)
      end
      local flag_id = line.wuguan_flag
      local data = {
        on_ask = on_ack,
        ui_text = popo_str,
        add_data = v_data,
        on_timeout = on_invite_timeout,
        targetid = member.only_id
      }
      local invite_id = cmn_invite.create_invite(player, member, data)
      if wuguan_for_invite_table[member.only_id] == nil then
        wuguan_for_invite_table[member.only_id] = {}
      end
      table.insert(wuguan_for_invite_table[member.only_id], invite_id)
      cmn_invite.exec_invite(invite_id)
    end
    local event_id, npc_info
    if line.wuguan_log == 1 then
      event_id = bo2.CreateGlobalOnlyID()
      npc_info = "," .. npc.excel_id .. "," .. npc.alias
    end
    send_popo(member, event_id, npc_info)
  end
end
function wuguan_trans_show(player, npc, line)
  local DlgID = line.DlgID
  if DlgID ~= 0 then
    player:ClearDlgTalkUI(npc)
    player:SetDlgContent(DlgID)
  end
  local function on_begin_item1()
    on_select_1(player, npc, line)
  end
  local function on_begin_item2()
    on_select_2(player, npc, line)
  end
  local DlgItemID1 = line.DlgItemID1
  if DlgItemID1 ~= 0 then
    player:AddDlgItem(DlgItemID1, on_begin_item1)
  end
  local DlgItemID2 = line.DlgItemID2
  if DlgItemID2 ~= 0 then
    player:AddDlgItem(DlgItemID2, on_begin_item2)
  end
  player:ShowDlgTalkUI(npc)
end
local trans_line_tb = {}
function wuguan_show(player, npc, line, lastID)
  local state = get_quest_state(player, line)
  if state == false or get_level_state(player, line) == false then
    local lastid = lastID
    if lastid == 0 then
      return
    end
    local lastline = wuguan_table:find(lastid)
    wuguan_show(player, npc, lastline, trans_line_tb[lastid].lastpre)
  else
    wuguan_trans_show(player, npc, line)
    for i, v in pairs(trans_line_tb) do
      trans_line_tb[i] = nil
    end
  end
end
function wuguan_trans(player, npc, excelID, lastID)
  trans_line_tb[excelID] = {}
  local line = wuguan_table:find(excelID)
  if line == nil then
    return
  end
  local premise = line.premise
  trans_line_tb[excelID].lastpre = lastID
  if premise ~= 0 then
    wuguan_trans(player, npc, premise, excelID)
  else
    wuguan_show(player, npc, line, trans_line_tb[excelID].lastpre)
  end
end
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-3-23 10:30:07 | 显示全部楼层
拾夕 发表于 2026-3-22 17:33
把下面代码  替换   服务端的  data\script\scene\special_script\mojiawuguan\wuguan_cmn_trans.lua  里面 ...

那个123的解包工具点了没反应,data.spk解包不成,并不是我死懒当升手党,而且也怕代码不止作者列车来的,他列出的只是要修改的,怕自己改整疏漏了,还有就是一个格式缩进搞错就要出错。
回复 支持 反对

使用道具 举报

发表于 2026-3-23 18:55:11 | 显示全部楼层
本帖最后由 拾夕 于 2026-3-23 18:57 编辑

ynylnjc 发表于 2026-3-23 10:30
那个123的解包工具点了没反应,data.spk解包不成,并不是我死懒当升手党,而且也怕代码不止作者列车来的 ...

通过网盘分享的文件:自己改好的双本单人进的lua文件.zip
链接: https://pan.baidu.com/s/1IrUoAI-6qHW6JNEeu_9yzQ?pwd=1111 提取码: 1111
[发帖际遇]: 拾夕 在网吧通宵,花了 4 枚 金币. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-3-24 12:51:11 | 显示全部楼层
本帖最后由 ynylnjc 于 2026-3-24 12:52 编辑
拾夕 发表于 2026-3-23 18:55
ynylnjc 发表于 2026-3-23 10:30
那个123的解包工具点了没反应,data.spk解包不成,并不是我死懒当升手党 ...

谢谢了,原来客服端不需要动啊。真的谢谢拾夕老哥了
[发帖际遇]: ynylnjc 发帖时在路边捡到 2 枚 金币,偷偷放进了口袋. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

本站内容如若侵犯到您的权益,请来电来函告知,我们会尽快处理!
联系QQ:1953150286,2251387361,123784736,免责申明

排行榜|联系我们|小黑屋|手机版|Archiver|游戏藏宝湾 |

GMT+8, 2026-6-4 18:05 , Processed in 0.174092 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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