台服dnf吧 关注:123,613贴子:2,049,035
  • 3回复贴,共1

dp插件增加通关时间提示

取消只看楼主收藏回复

用补丁大合集或者其他内辅跳过翻牌的话会看不到通关时间,可以通过dp插件来增加通关时间的提示,不过副本时长和地图时长的两个函数get不到正确数值(也许是姿势不对),所以改用系统时间差和来计算。该方法计算的通关时间是点击进入副本到击杀boss的实际时间,而游戏系统内的通关时间貌似是不计算加载副本以及过图的短暂加载时间,因此该方法获取的通关时间会比游戏系统计算的大。


IP属地:广东1楼2022-08-21 03:26回复
    ---@type DP
    local dp = _DP
    ---@type DPXGame
    local dpx = _DPX
    local game = require("df.game")
    local logger = require("df.logger")
    local luv = require("luv")
    local world = require("df.game.mgr.world")
    logger.info("opt: %s", dpx.opt())
    -- see dp2/lua/df/doc for document !
    local item_handler = { }
    player_01 = 0
    local function playerlogin(_user)
    player_01 = game.fac.user(_user)
    player_01:SendNotiPacketMessage(string.format("dp插件已开启功能 : [地下城通关时间提示]"))
    end
    dpx.hook(game.HookType.Reach_GameWord, playerlogin)
    local function EndDungeonTime(fnext, type, _party, param)
    if type == game.GameEventType.PARTY_DUNGEON_START then
    Joinmaptime = dp.mstime()
    player_01:SendNotiPacketMessage(string.format("进入地下城······"))
    end
    if type == game.GameEventType.PARTY_DUNGEON_CLEAR then
    local Clearmaptimemms = 0
    local party = game.fac.party(_party)
    local dungeon = party:GetDungeon()
    local dungeonname = dungeon:GetName()
    local Endmaptime = dp.mstime()
    local Clearmaptime = Endmaptime - Joinmaptime
    local Clearmaptimemin = math.modf(Clearmaptime/1000/60)
    local Clearmaptimes = math.modf(Clearmaptime/1000)
    for i = 1,Clearmaptimemin do
    if Clearmaptimes >= 60 then
    Clearmaptimes = Clearmaptimes - 60
    end
    end
    local Clearmaptimemmsf = Clearmaptime/1000
    while Clearmaptimemmsf >= 1 do
    Clearmaptimemmsf = Clearmaptimemmsf -1
    end
    if Clearmaptimemmsf < 1 then
    Clearmaptimemms = math.modf(Clearmaptimemmsf*100)
    end
    logger.info("通关副本: %s,通关时长: %d", dungeonname,Clearmaptime)
    player_01:SendNotiPacketMessage(string.format(" [%s]地下城通关时长 : %d分%d秒%d", dungeonname,Clearmaptimemin,Clearmaptimes,Clearmaptimemms))
    end
    return fnext()
    end
    dpx.hook(game.HookType.GameEvent, EndDungeonTime)


    IP属地:广东3楼2022-08-21 03:27
    回复
      2025-12-25 18:23:18
      广告
      不感兴趣
      开通SVIP免广告
      /s/16删除n6k_PgiO删除xNBHoSbL删除bK6rQ
      3ax8


      IP属地:广东4楼2022-08-21 03:28
      收起回复
        local function playerlogin(_user)
        player_01 = game.fac.user(_user)
        player_01_name = game.fac.user(_user):GetCharacName()
        play_01_id = player_01:GetCharacNo()
        player_01:SendNotiPacketMessage(string.format("dp插件已开启, 输入//dp查看功能。"))
        player_01:SendNotiPacketMessage(string.format("欢迎您[%s],角色ID[%d]",player_01_name,play_01_id), 14)
        end
        dpx.hook(game.HookType.Reach_GameWord, playerlogin)
        local function EndDungeonTime(fnext, type, _party, param)
        if type == game.GameEventType.PARTY_DUNGEON_START then
        Joinmaptime = dp.mstime()
        player_01:SendNotiPacketMessage(string.format("进入地下城······"))
        end
        if type == game.GameEventType.PARTY_DUNGEON_CLEAR then
        local Clearmaptimemms = 0
        local party = game.fac.party(_party)
        local dungeon = party:GetDungeon()
        local dungeonname = dungeon:GetName()
        local Endmaptime = dp.mstime()
        local Clearmaptime = Endmaptime - Joinmaptime
        local Clearmaptimemin = math.modf(Clearmaptime/1000/60)
        local Clearmaptimes = math.modf(Clearmaptime/1000)
        for i = 1,Clearmaptimemin do
        if Clearmaptimes >= 60 then
        Clearmaptimes = Clearmaptimes - 60
        end
        end
        local Clearmaptimemmsf = Clearmaptime/1000
        while Clearmaptimemmsf >= 1 do
        Clearmaptimemmsf = Clearmaptimemmsf -1
        end
        if Clearmaptimemmsf < 1 then
        Clearmaptimemms = math.modf(Clearmaptimemmsf*100)
        end
        logger.info("通关副本: %s,通关时长: %d", dungeonname,Clearmaptime)
        player_01:SendNotiPacketMessage(string.format(" [%s]已通关[%s]地下城 : %d分%d秒%d",player_01_name, dungeonname,Clearmaptimemin,Clearmaptimes,Clearmaptimemms), 14)
        end
        return fnext()
        end
        dpx.hook(game.HookType.GameEvent, EndDungeonTime)


        IP属地:广东15楼2022-09-09 00:31
        收起回复