htt0528 发表于 2015-7-8 07:31:22

【教程】【GC七段】 扩充你的GC函数库---获取GCD数值

本帖最后由 托托 于 2016-2-5 20:51 编辑

最近在做一个骑士方案 想完整重现SIMC的输出流程
BTW:
前面有个用OVALE加载SIMC脚本的帖子 初学者用是不错 最小投入最大回报 但是有2个问题
1.很多功能无法微调
2.SIMC流程做得很细,根据技能范围精确到怪物个数使用不同技能,对目标数量判断使用不同技能OVALE不行,只有简单粗暴的一个AOE

在制作过程中发现SIMC经常用到2个参数:gcd 和 gcd.max
两者区别就是gcd.max是常态的gcd时间,gcd是即时的gcd时间(比如触发了带急速的附魔饰品,或者开嗜血啦)
发现GC的函数库里好像没有类似功能 索性自己写
调用方法:(没有任何依赖,全部魔兽API,经测试数据准确没有任何浮动)
提供三个函数
1.MY_GetBaseGCD()返回本职业裸态GCD
2.MY_GetMaxGCD()返回常态GCD(刷新机制:非战斗状态放任意技能,就记录目前的GCD)
3.MY_GetNowGCD() 返回即时GCD(刷新机制:放任意技能,就记录当前的GCD)

使用方法:
1.用记事本打开Interface\AddOns\GC\wowamfunctions.lua
2.翻到最后另起一行
3.粘贴
--------------GCD Start--------------
local MY_BASE_GCD = {
    ["DEATHKNIGHT"]    = { 1.0 },
    ["DRUID"]      = { 1.5 },
    ["HUNTER"]      = { 1.0 },
    ["MAGE"]      = { 1.5 },
    ["MONK"]      = { 1.5 },
    ["PALADIN"]      = { 1.5 },
    ["PRIEST"]      = { 1.5 },
    ["ROGUE"]      = { 1.0 },
    ["SHAMAN"]      = { 1.5 },
    ["WARLOCK"]      = { 1.5 },
    ["WARRIOR"]      = { 1.5 },
}

local MY_MAX_GCD = nil
local MY_NOW_GCD = nil

function MY_GetBaseGCD()
    local gcd
    local baseGCD = MY_BASE_GCD[select(2, UnitClass("player"))
    ]
    if baseGCD then
      gcd = baseGCD
    else
      gcd = 1.5
    end
    return gcd
end

function MY_GetMaxGCD()
    if MY_MAX_GCD==nil
    then
      MY_RegGCD()
      return MY_GetBaseGCD()
    else
      return MY_MAX_GCD
    end
end


function MY_GetNowGCD()
    if MY_NOW_GCD==nil
    then
      MY_RegGCD()
      return MY_GetBaseGCD()
    else
      return MY_NOW_GCD
    end
end

function MY_RegGCD()   
    MY_GCD_EVENT=MY_GCD_EVENT or CreateFrame("frame")
    MY_GCD_EVENT:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
    MY_GCD_EVENT:SetScript("OnEvent",function(_,_,_,e,_,_,_,_,_,_,_,_,_,_)
            if(e=="SPELL_CAST_SUCCESS")
            then
                local _,x=GetSpellCooldown(61304)
                if (x>0)
                then
                  if UnitAffectingCombat("player")
                  then
                        MY_NOW_GCD=x
                        --print("NOW "..x.."")
                  else
                        MY_MAX_GCD=x
                        MY_NOW_GCD=x
                        --print("MAX "..x.."")
                  end
                end
            end
    end)
end

--------------GCD End--------------


堕落的天使* 发表于 2015-7-8 07:33:59

萨隆尼 发表于 2015-7-8 10:30:16

自己写函数什么的太给力了!

ggdove 发表于 2015-7-8 10:32:11

膜拜啊,一直也想自己写点函数丰富一下,但始终找不到头绪,希望能多交流

青山 发表于 2015-7-8 10:50:32

我是慕名而来,请收下我的膝盖

饼干 发表于 2015-8-4 02:30:05

我用GetSpellCooldown,必须是执行后,才可以读取。求教,请问是否有官方函数可以直接读取到技能的实时冷却周期?

htt0528 发表于 2015-8-17 04:10:11

ydh 发表于 2015-8-4 02:30
我用GetSpellCooldown,必须是执行后,才可以读取。求教,请问是否有官方函数可以直接读取到技能的实时冷却 ...

根据急速缩短CD的技能一般可以这样算 GetSpellBaseCooldown(spellName)/(1+GetMeleeHaste()/100)/1000

饼干 发表于 2015-8-17 19:17:31

htt0528 发表于 2015-8-17 04:10
根据急速缩短CD的技能一般可以这样算 GetSpellBaseCooldown(spellName)/(1+GetMeleeHaste()/100)/1000

谢谢提供获取GCD数值解决办法

2812059513 发表于 2017-1-23 13:59:03

谢谢大神。学习了。。

2812059513 发表于 2017-1-23 15:33:13

谢谢大神。学习了。。
页: [1]
查看完整版本: 【教程】【GC七段】 扩充你的GC函数库---获取GCD数值