请教个数组的问题
[quote]local buffs = {};table.insert(buffs, { BuffIndex = buffIndex, Name = name, TimeLeft = timeLeft, MaxTime = maxtime, OwnOrder = buffSettings.DisplayOrder, Settings = buffSettings});[/quote]
RoguePowerBars中定义了这么一个数组,后面有调用是
[quote]rogePowerBarFrame.id = buff.BuffIndex;
rogePowerBarFrame.timeleft = buff.TimeLeft;
rogePowerBarFrame.maxtime = buff.MaxTime;[/quote]
我又在其中新定义了个数组
[quote]local debuffs = {};
table.insert(debuffs, { BuffIndex = buffIndex, Name = name, TimeLeft = timeLeft, MaxTime = maxtime, OwnOrder = buffSettings.DisplayOrder, Settings = buffSettings});[/quote]
调用照葫芦画瓢是
[quote]rogePowerBarFrame.id = debuff.BuffIndex;
rogePowerBarFrame.timeleft = debuff.TimeLeft;
rogePowerBarFrame.maxtime = debuff.MaxTime;[/quote]
怎么就报错了attempt to index global 'debuff' (a nil value),出错行就是rogePowerBarFrame.id = debuff.BuffIndex;
还有,插件原本定义的数组明明是buffs, 怎么后面就变成buff.BuffIndex之类的呢?
不是应该buffs.BuffIndex才对么
如果buff.BuffIndex不是代表buffs这个数组的话我真找不出这个是什么意思了 相关的完整代码应该就是这两端
[quote]function UpdateBuffs()
local maxtimes = {};
local buffs = {};
local debuffs = {};
for i = 1, _numBuffsShown do
local bar = getglobal(ROGUEPOWERBAR_NAME..i)
if not maxtimes[bar.name] or maxtimes[bar.name] < bar.maxtime then
maxtimes[bar.name] = bar.maxtime;
end
end
local numBuffs = 0;
local buffIndex, untilCancelled;
local i = 1;
for i = 1, 16 do
buffIndex = i;
local name, rank = GetPlayerBuffNameImp(buffIndex)
if name then
local buffSettings = GetBuffInSettings(name);
if buffSettings ~= nil then
local timeLeft = GetPlayerBuffTimeLeftImp(buffIndex)
local maxtime = timeLeft
if name then
if maxtimes[name] and maxtime and maxtime < maxtimes[name] then
maxtime = maxtimes[name];
end
end
table.insert(buffs, { BuffIndex = buffIndex, Name = name, TimeLeft = timeLeft, MaxTime = maxtime, OwnOrder = buffSettings.DisplayOrder, Settings = buffSettings});
end
end
end
local i = 1;
for i = 1, 40 do
buffIndex = i;
local name, rank = GetPlayerDeBuffNameImp(buffIndex)
if name then
local buffSettings = GetBuffInSettings(name);
if buffSettings ~= nil then
local timeLeft = GetPlayerDeBuffTimeLeftImp(buffIndex)
local maxtime = timeLeft
if name then
if maxtimes[name] and maxtime and maxtime < maxtimes[name] then
maxtime = maxtimes[name];
end
end
table.insert(debuffs, { BuffIndex = buffIndex, Name = name, TimeLeft = timeLeft, MaxTime = maxtime, OwnOrder = buffSettings.DisplayOrder, Settings = buffSettings});
end
end
end
mos_buffIndex_returned = false;
pre_buffIndex_returned = false;
rip_buffIndex_returned = false;
for x = 1, #debuffs do
numBuffs = numBuffs + 1
SetStatusBarBuff(numBuffs, debuffs[x], "debuff");
end
local numBuffs = #debuffs;
for x = 1, #buffs do
numBuffs = numBuffs + 1
SetStatusBarBuff(numBuffs, buffs[x], "buff");
end
CleanUp(numBuffs);
_numBuffsShown = numBuffs;
UpdateRoguePowerBarPositions();
end[/quote]
[quote]function SetStatusBarBuff(buffId, buff, type)
if type=="buff" then
CreateStatusBar(buffId);
local rogePowerBarFrame = getglobal(ROGUEPOWERBAR_NAME..buffId);
local bar = getglobal(ROGUEPOWERBAR_NAME..buffId.."_StatusBar");
local icon = getglobal(ROGUEPOWERBAR_NAME..buffId.."_Icon");
local name = getglobal(ROGUEPOWERBAR_NAME..buffId.."_DescribeText");
local duration = getglobal(ROGUEPOWERBAR_NAME..buffId.."_DurationText");
rogePowerBarFrame.id = buff.BuffIndex;
rogePowerBarFrame.timeleft = buff.TimeLeft;
rogePowerBarFrame.maxtime = buff.MaxTime;
rogePowerBarFrame.name = buff.Name or "Uknown "..buff.BuffIndex;
rogePowerBarFrame.type = "buff";
local backDropColor = buff.Settings.BackDropColor;
local statusBarColor = buff.Settings.StatusBarColor;
local backGround = getglobal(ROGUEPOWERBAR_NAME..buffId.."_BarBackGround");
bar:SetStatusBarTexture(RoguePowerBarsOptions.barTexture);
local backDropTable = backGround:GetBackdrop();
backDropTable.bgFile = RoguePowerBarsOptions.barTexture;
backGround:SetBackdrop(backDropTable);
backGround:SetBackdropColor(backDropColor.r, backDropColor.g, backDropColor.b, backDropColor.a);
bar:SetStatusBarColor(statusBarColor.r, statusBarColor.g, statusBarColor.b, statusBarColor.a);
bar:SetMinMaxValues(0, rogePowerBarFrame.maxtime);
icon:SetTexture(GetPlayerBuffTextureImp(buff.BuffIndex))
if RoguePowerBarsOptions.showtext then
name:SetText(rogePowerBarFrame.name);
end
rogePowerBarFrame:SetAlpha(RoguePowerBarsOptions.alpha);
rogePowerBarFrame:Show();
if RoguePowerBarsOptions.fade and rogePowerBarFrame.timeleft >= rogePowerBarFrame.maxtime then
UIFrameFadeOut(rogePowerBarFrame, 0.5, 0, RoguePowerBarsOptions.alpha);
end
elseif type=="debuff" then
CreateStatusBar(buffId);
local rogePowerBarFrame = getglobal(ROGUEPOWERBAR_NAME..buffId);
local bar = getglobal(ROGUEPOWERBAR_NAME..buffId.."_StatusBar");
local icon = getglobal(ROGUEPOWERBAR_NAME..buffId.."_Icon");
local name = getglobal(ROGUEPOWERBAR_NAME..buffId.."_DescribeText");
local duration = getglobal(ROGUEPOWERBAR_NAME..buffId.."_DurationText");
rogePowerBarFrame.id = debuff.BuffIndex;
rogePowerBarFrame.timeleft = debuff.TimeLeft;
rogePowerBarFrame.maxtime = debuff.MaxTime;
rogePowerBarFrame.name = debuff.Name or "Uknown "..debuff.BuffIndex;
rogePowerBarFrame.type = "debuff";
local backDropColor = debuff.Settings.BackDropColor;
local statusBarColor = debuff.Settings.StatusBarColor;
local backGround = getglobal(ROGUEPOWERBAR_NAME..buffId.."_BarBackGround");
bar:SetStatusBarTexture(RoguePowerBarsOptions.barTexture);
local backDropTable = backGround:GetBackdrop();
backDropTable.bgFile = RoguePowerBarsOptions.barTexture;
backGround:SetBackdrop(backDropTable);
backGround:SetBackdropColor(backDropColor.r, backDropColor.g, backDropColor.b, backDropColor.a);
bar:SetStatusBarColor(statusBarColor.r, statusBarColor.g, statusBarColor.b, statusBarColor.a);
bar:SetMinMaxValues(0, rogePowerBarFrame.maxtime);
icon:SetTexture(GetPlayerDeBuffTextureImp(debuff.BuffIndex))
if RoguePowerBarsOptions.showtext then
name:SetText(rogePowerBarFrame.name);
end
rogePowerBarFrame:SetAlpha(RoguePowerBarsOptions.alpha);
rogePowerBarFrame:Show();
if RoguePowerBarsOptions.fade and rogePowerBarFrame.timeleft >= rogePowerBarFrame.maxtime then
UIFrameFadeOut(rogePowerBarFrame, 0.5, 0, RoguePowerBarsOptions.alpha);
end
end
end[/quote] 我错了,看来buff.BuffIndex和先前定义的buffs的确没关系
那么请问buff.BuffIndex到底是代表什么呢?
是不是wow自带函数? 拼写错误
你前面写了
local debuffs = {}
后面引用 怎么成debuff了... 但是这个插件原本定义的就是local buffs = {}
后面也只见得到buff.BuffIndex之类的
仔细看了下,后面的buff.BuffIndex应该是别的东西
但全部查找了下也没看到对buff的定义
所以搞不明吧了
后来我把我的debuff.BuffIndex也改成buff.BuffIndex
终于生效可以监视debuff了
但还是应该有些错误,有些时候计时条会不刷新或者卡住,我实在想不出来该怎么改了
月大能不能帮忙改改
目的就是为了使RoguePowerBars能显示目标debuff计时条
这个是原版的
[attach]7203[/attach]
这个是我修改过的,在RoguePowerBars_Settings.lua里面加上了割裂和致命毒药的选项
RoguePowerBars.lua文件改了function UpdateBuffs(), function SetStatusBarBuff, function UpadateRoguePowerBars()
[attach]7204[/attach] [quote]function UpdateBuffs()
local buffs = {};
local numBuffs = 0;
table.insert(buffs, { BuffIndex = buffIndex, Name = name, TimeLeft = timeLeft, MaxTime = maxtime, OwnOrder = buffSettings.DisplayOrder, Settings = buffSettings});
for x = 1, #buffs do
numBuffs = numBuffs + 1
SetStatusBarBuff(numBuffs, buffs[x]);
end
end
function SetStatusBarBuff(buffId, buff)
rogePowerBarFrame.id = buff.BuffIndex;
rogePowerBarFrame.timeleft = buff.TimeLeft;
rogePowerBarFrame.maxtime = buff.MaxTime;
end[/quote]
哦,我明白了, buffs是个2维数组,buff.BuffIndex就是buffs这个数组中buffId行的BuffIndex列,是这样吧?
另再请教下UNIT_AURA这个事件如何使用
[quote]
function RoguePowerBar_OnEvent(event)
RoguePowerBar_EventHandler[event](arg1, arg2, arg3, arg4, arg5);
end
RoguePowerBar_EventHandler = {};
RoguePowerBar_EventHandler["UNIT_AURA"] = function()
UpdateBuffs();
end
[/quote]
这样有问题么?或者直接给我个资料链接也行
页:
[1]