----------------------------- -- Variables ----------------------------- local A, L = ... local slotNames = { "HeadSlot", "NeckSlot", "ShoulderSlot", "BackSlot", "ChestSlot", "ShirtSlot", "TabardSlot", "WristSlot", "HandsSlot", "WaistSlot", "LegsSlot", "FeetSlot", "Finger0Slot", "Finger1Slot", "Trinket0Slot", "Trinket1Slot", "MainHandSlot", "SecondaryHandSlot", "AmmoSlot" } -- 本地化专精 local function Talent() local Spec = GetSpecialization() local SpecName = Spec and select(2, GetSpecializationInfo(Spec)) or "无" return SpecName end -- 格式化血量 local function HealText() local HP = UnitHealthMax("player") if HP > 1e4 then return format("%.2f万", HP / 1e4) else return HP end end -- 神器等级 local function ArtifactLevel() local currentLevel = " " local azeriteItemLocation = C_AzeriteItem.FindActiveAzeriteItem() if azeriteItemLocation then currentLevel = C_AzeriteItem.GetPowerLevel(azeriteItemLocation) end return currentLevel end -- 特质装等级 local function AzeriteItemLevel(slotNum) local currentLevel = "0" local slotId = GetInventorySlotInfo(slotNames[slotNum]) local itemLink = GetInventoryItemLink("player", slotId) if itemLink then local itemLoc if ItemLocation then itemLoc = ItemLocation:CreateFromEquipmentSlot(slotId) end if C_AzeriteEmpoweredItem.IsAzeriteEmpoweredItem(itemLoc) then return select(4, GetItemInfo(itemLink)) end end return currentLevel end local function GetItemLevel(slotNum) local slotId = GetInventorySlotInfo(slotNames[slotNum]) local itemLink = GetInventoryItemLink("player", slotId) if itemLink then local _ ,_ ,_ , ilvl ,_ ,_, iSubType = GetItemInfo(itemLink) return iSubType .. "-" .. ilvl end return "0" end -- 基础属性 local function BaseInfo() local BaseStat = "" BaseStat = BaseStat .. ("[%s] "):format(UnitClass("player")) BaseStat = BaseStat .. ("[%s] "):format(Talent()) BaseStat = BaseStat .. ("最高装等:%.1f 当前:%.1f "):format(GetAverageItemLevel()) local mainHand = GetItemLevel(17) if mainHand ~= "0" then BaseStat = BaseStat .. ("主手:%s "):format(mainHand) end local offHand = GetItemLevel(18) if offHand ~= "0" then BaseStat = BaseStat .. ("副手:%s "):format(offHand) end BaseStat = BaseStat .. ("血量:%s "):format(HealText()) -- BaseStat = BaseStat .. ("神器:%s "):format(ArtifactLevel())-- 项链等级 -- BaseStat = BaseStat .. ("头部:%s "):format(AzeriteItemLevel(1))-- 头部特质装等级 -- BaseStat = BaseStat .. ("肩部:%s "):format(AzeriteItemLevel(3))-- 肩部特质装等级 -- BaseStat = BaseStat .. ("胸部:%s "):format(AzeriteItemLevel(5))-- 胸部特质装等级 return BaseStat end -- 输出属性(9 = 暴击 12 = 溅射 17 = 吸血 18 = 急速 21 = 闪避 26 = 精通 29 = 装备+自身全能 31 = 装备全能) -- by图图 local function DpsInfo() local DpsStat = {"", "", ""} local specAttr = { --纯力敏智属性职业 WARRIOR = {1, 1, 1}, DEATHKNIGHT = {1, 1, 1}, ROGUE = {2, 2, 2}, HUNTER = {2, 2, 2}, DEMONHUNTER = {2, 2}, MAGE = {3, 3, 3}, WARLOCK = {3, 3, 3}, PRIEST = {3, 3, 3}, --混合力敏智属性职业 SHAMAN = {3, 2, 3}, MONK = {2, 3, 2}, DRUID = {3, 2, 2, 3}, PALADIN = {3, 1, 1} } local specId = GetSpecialization() -- print("specId = "..specId) local classCN, classEnName = UnitClass("player") local classSpecArr = specAttr[classEnName] DpsStat[1] = ("力量:%s "):format(UnitStat("player", 1)) DpsStat[2] = ("敏捷:%s "):format(UnitStat("player", 2)) DpsStat[3] = ("智力:%s "):format(UnitStat("player", 4)) return DpsStat[classSpecArr[specId]] end -- 坦克属性 local function TankInfo() local TankStat = "" TankStat = TankStat .. ("耐力:%s "):format(UnitStat("player", 3)) TankStat = TankStat .. ("护甲:%s "):format(select(3, UnitArmor("player"))) TankStat = TankStat .. ("躲闪:%.0f%% "):format(GetDodgeChance()) TankStat = TankStat .. ("招架:%.0f%% "):format(GetParryChance()) TankStat = TankStat .. ("格挡:%.0f%% "):format(GetBlockChance()) return TankStat end -- 治疗属性 local function HealInfo() local HealStat = "" -- HealStat = HealStat..("精神:%s "):format(UnitStat("player", 5)) -- HealStat = HealStat .. ("法力回复:%d "):format(GetManaRegen() * 5) return HealStat end -- 增强属性 local function MoreInfo() local MoreStat = "" MoreStat = MoreStat .. ("爆击:%.0f%% "):format(GetCritChance()) MoreStat = MoreStat .. ("急速:%.0f%% "):format(GetMeleeHaste()) MoreStat = MoreStat .. ("精通:%.0f%% "):format(GetMasteryEffect()) MoreStat = MoreStat .. ("全能:%.0f%% "):format( GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) + GetVersatilityBonus(CR_VERSATILITY_DAMAGE_DONE) ) -- MoreStat = MoreStat .. ("吸血:%.0f%% "):format(GetCombatRating(17) / 230) -- MoreStat = MoreStat .. ("闪避:%.0f%% "):format(GetCombatRating(21) / 110) return MoreStat end -- 属性收集 function rChat:StatReport() if UnitLevel("player") < 10 then return BaseInfo() end local StatInfo = "" local Role = GetSpecializationRole(GetSpecialization()) if Role == "HEALER" then StatInfo = StatInfo .. BaseInfo() .. DpsInfo() .. HealInfo() .. MoreInfo() elseif Role == "TANK" then StatInfo = StatInfo .. BaseInfo() .. DpsInfo() .. TankInfo() .. MoreInfo() else StatInfo = StatInfo .. BaseInfo() .. DpsInfo() .. MoreInfo() end return StatInfo end