Der Interface-Basteleien-Thread!

Danke das funktioniert und jetzt habe ich das denke ich auch verstanden mit dem DropDown-Menu
 
Hi,

Brauche mal ein wenig Hilfe.
Ich bin grad dabei mir für meinen pvp char ein Addon zu basteln, welches mir meine Kills und meine Tode im spiel anzeigt. Habe dabei aber 2 kleine probleme. Hier erstmal der code bis jetzt.

Code:
local _, killingBlows, _, deaths, _, _, _, _, _, _, _, _ = GetBattlefieldScore(1)

local frame = CreateFrame("Frame", "KDTrackerFrame", UIParent)
    frame:SetPoint("BOTTOM",-268,0)
    frame:SetSize(80,130)
	frame.text = frame:CreateFontString(nil, "ARTWORK")
	frame.text:SetFont("Fonts\\FRIZQT__.ttf", 12, "OUTLINE")
	frame.text:SetPoint("CENTER",frame,-10,25)
	frame.text:SetText("Kills: "..killingBlows)
	frame.text2 = frame:CreateFontString(nil, "ARTWORK")
	frame.text2:SetFont("Fonts\\FRIZQT__.ttf", 12, "OUTLINE")
	frame.text2:SetPoint("CENTER",frame,-8,-25)
	frame.text2:SetText("Tode: "..deaths)
	frame = CreateBackdropFrame(KDTrackerFrame, 80, 130, "CENTER", 0, 0)
	
KDTrackerFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
KDTrackerFrame:SetScript("OnEvent", function(self, event)
	if event == "PLAYER_ENTERING_WORLD" then 
		if select(2, IsInInstance()) == "pvp" then
			self:Show()
	    else
			self:Hide()
	    end
	end
end)

Also mein erstes Problem ist das jetzt zwar die Kills/Tode angezeigt werden, aber nur von der ersten person im bg menü (Das was man mit shift+leertaste öffnet) und ich weiss nicht was ich in den klammern von "GetBattlefieldScore()" einsetzten muss damit die Kills/Tode von mir angezeigt werden.
Mein zweites problem ist, dass die richtige Zahl von den Kills/Toden nicht sofort sondern erst nach einem reload oder ladescreen zum geistheiler angezeigt bekomme.
Hier denke ich muss ich OnUpdate ( http://www.wowpedia.org/Using_OnUpdate_correctly ) benutzen, scheitere aber im moment daran, so etwas in mein addon einzubauen.
 
Code:
local PlayerIndex = 0;
local lName, lKillingBlows, _, lDeaths = GetBattlefieldScore(PlayerIndex);
local UpdateDelay = 5;
local UpdateCount = 0;
function OnUpdate(self, ...)
	UpdateCount = UpdateCount + 1;
	if UpdateCount == UpdateDelay then
		local lNumScores = GetNumBattlefieldScores()
		local lName = GetBattlefieldScore(PlayerIndex);
		if not lName == UnitName('player') then
			for i = 1, lNumScores do
				local lName = GetBattlefieldScore(i);
				if lName == UnitName('player') then
					PlayerIndex = i;
					break;
				end;
			end;
		end;
		local lName, lKillingBlows, _, lDeaths = GetBattlefieldScore(PlayerIndex);
		frame.text:SetText("Kills: "..lKillingBlows)
		frame.text2:SetText("Tode: "..lDeaths)
		UpdateCount = 0;
	end;
end;

local frame = CreateFrame("Frame", "KDTrackerFrame", UIParent)
frame:SetPoint("BOTTOM",-268,0)
frame:SetSize(80,130)
frame:SetScript("OnUpdate", OnUpdate);
frame = CreateBackdropFrame(KDTrackerFrame, 80, 130, "CENTER", 0, 0)

frame.text = frame:CreateFontString(nil, "ARTWORK")
frame.text:SetFont("Fonts\\FRIZQT__.ttf", 12, "OUTLINE")
frame.text:SetPoint("CENTER",frame,-10,25)
frame.text:SetText("Kills: "..lKillingBlows)

frame.text2 = frame:CreateFontString(nil, "ARTWORK")
frame.text2:SetFont("Fonts\\FRIZQT__.ttf", 12, "OUTLINE")
frame.text2:SetPoint("CENTER",frame,-8,-25)
frame.text2:SetText("Tode: "..lDeaths)
        
KDTrackerFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
KDTrackerFrame:SetScript("OnEvent", function(self, event)
	if event == "PLAYER_ENTERING_WORLD" then 
		if select(2, IsInInstance()) == "pvp" then
			self:Show()
		else
			self:Hide()
		end
	end
end)


Sollte funktionieren, aber ohne gewähr (alles nur aus dem Kopf heraus)
 
Zuletzt bearbeitet von einem Moderator:
Habs grad ausprobiert, scheint so leider nicht zu funktionieren.
bekomme folgenden lua fehler andauernd:
Code:
Message: Interface\AddOns\Test\BackgroundArt.lua:74: 'then' expected near '='
Time: 05/17/12 00:37:38
Count: 1
Stack: 
Locals:
 
Zuletzt bearbeitet von einem Moderator:
Ich weiss nicht wo Zeile 74 ist, aber ich nehme mal an, das es dies hier ist:
Code:
if UpdateCount = UpdateDelay then
Ändern zu:
Code:
if UpdateCount == UpdateDelay then
 
Zuletzt bearbeitet von einem Moderator:
Ok jetzt kommt kein lua fehler mehr, mir wird aber immernoch nix im bg angezeigt da steht immer 0, egal wie viele kills/tode ich hab.

edit: habs jetzt glaube ich hinbekommen mit:

Code:
local NumScores = GetNumBattlefieldScores()
local total = 0

KDTrackerFrame:SetScript("OnUpdate", function(self, elapsed)
    total = total + elapsed
	if total > 1 then
	    for i = 1, NumScores do
		local name, killingBlows, _, deaths = GetBattlefieldScore(i)
		    if ( name == UnitName("player") ) then
                KDTrackerFrame.text:SetText("Kills: "..killingBlows)
                KDTrackerFrame.text2:SetText("Tode: "..deaths)
		        total = 0
			end
		end
	end
end)

KDTrackerFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
KDTrackerFrame:SetScript("OnEvent", function(self, event)
	if event == "PLAYER_ENTERING_WORLD" then 
		if select(2, IsInInstance()) == "pvp" then
			self:Show()
	    else
			self:Hide()
	    end
	end
end)

Bin mir diesesmal auch fast sicher das meine Kills/Tode angezeigt werden und nicht die von anderen.
Aber trotzdem danke für die Hilfe, wäre sonst wahrscheinlich kein stück weiter
 
Zuletzt bearbeitet von einem Moderator:
kann nicht funktionieren....

local NumScores = GetNumBattlefieldScores()

Du nimmst das aus der OnUpdate raus, sobald du dich nicht in einem Bg einloggst wird dein programm nicht funktionieren.

Warum nimmst du


if not lName == UnitName('player') then for i = 1, lNumScores do local lName = GetBattlefieldScore(i); if lName == UnitName('player') then PlayerIndex = i; break; end; end; end;


Das raus? Das verhindert das du suchst während du schon weisst wer du bist.
 
Zuletzt bearbeitet von einem Moderator:
Ok, das mit:

local NumScores = GetNumBattlefieldScores()

hab ich vorhin auch schon gemerkt, hatte da immer reload gemacht dann, habs aber grad wieder in die OnUpdate reingenommen und jetzt wird es auch am anfang des BGs direkt angezeigt.(weiss auch nich so genau warum ich das einfach rausgenommen hab)

und das zweite hat mich anfangs ziemlich durcheinander gebracht und als es dann funktionierte obwohl ich das nicht mit reingenommen hatte, dachte ich mir das alles okay sei.
Wüsste jetzt allerdings nicht so genau wie ich das wieder mit reinbringen soll, bei meinen versuchen gerade eben hat dannach wieder garnichts funktioniert.
 
Ich lad mir kurz den Clienten runter und mach hamachi an. melde mich wieder wenns fertig ist

e: leider geht meine Sandbox nicht mehr, mal schauen was ich tun kann
 
Zuletzt bearbeitet von einem Moderator:
Hey leute,
Ich komme mal mit ner ganz blöden frage an
Undzwar hab ich mir heute wieder einen Monat WoW gekauft und hab festgestellt das mein Filger rumspackt
Der Befehl: local configmode = True; funzt nicht mehr ... weiß da jmd weiter?
Ich weiß selber das das addon schon ein paar jahre auf dem buckel hat und mir ist keine neuere version bekannt (hab meine aus dem Itchy UI "geklaut")
Falls man das nicht mehr hinbekommt kennt jmd ein ähnliches addon, dass womöglich genauso leicht zu bedienen ist? (bin kein LUA könner, filger geht grade noch so ^^)
Danke euch
 
Servus,

hab da mal nen Problem...
Und zwar habe ich mit meinem Rogue Legendarys und die Tier2 PVP Offhand.
Auf den Legendarys habe ich Landslide enchantet, auf der T2 Offhand Pyriumchain.

Nun möchte ich in der Arena checken, ob ein Warri, Shadow oder Rogue mein Gegner darstellt und im Optimalfall automatisch die Waffe wechseln.

Wie ich die Waffe, bzw. das Set, wechsel weiß ich (EquipmentManager_EquipSet("T2")), aber kann ich überprüfen, ob einer meiner Gegner eben Warri/Shadow/Rogue ist?
Konnte diesbezüglich noch keine wirkliche Antwort in den WoWAPI finden -.-

Bin über jede Hilfe dankbar.

Grüße
 
Die Waffe aber. Und dadrum gehts mir ja
 
Schon immer Sonst könnten z.B. Arms Warris kein Schildwall ziehen.

Gerade gesehen, dass UnitID auch arena1,2,3,4,5 unterstützt Sollte also mit UnitClass gehen, danke Shantalya
 
hm ... spielte pala und dudu, deshalb nie benutzt
 
Zurück