Seite 1 von 1

WoW-Addon: Erste Versuche

Verfasst: Mittwoch 21. Juli 2010, 22:30
von Edrimar
Hey, ich versuch grade ein kleines MiniAddon für WoW zu schreiben.

Ist primär für Jan gedacht hier, damit er mal drüber schauen kann, um mir zu helfen. Hab nämlich noch gar keine Lua/xml-Erfahrung.


Hier der Inhalt der xml-File:

Code: Alles auswählen

<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ 
 ..\..\FrameXML\UI.xsd">
<Frame name="DisciHelperFrame" parent="UIParent" movable="true" hidden="false" enableMouse="true">
	<Size x="66" y="32" />
	<Anchors>
		<Anchor point="CENTER"/>
	</Anchors>
	<Frames>
		
		<Frame name="PoMFrame" hidden="false" >
			<Size x="32" y="32" />
			<Anchors>
				<Anchor point="LEFT"/>
			</Anchors>
			<Backdrop bgFile="Interface\Icons\Spell_Holy_PrayerOfMendingtga"/>
			<Frames>
				<Button name="Suehne" inherits="SecureActionButtonTemplate" >
					<Scripts>
						<OnClick> DisciHelper(); </OnClick>
					</Scripts>
				</Button>
			</Frames>
		</Frame>
		

 		<Button name="SuehneButton" inherits="SecureActionButtonTemplate" parent="DisciHelperFrame">
 			<Attributes>
   				<Attribute name="type" type="string" value="spell"/>
   				<Attribute name="spell" type="string" value="Penance"/>
   				<Attribute name="unit" type="string" value="player"/>
  			</Attributes>
  			<Size x="32" y="32"/>
  			<Layers>
				<Layer level="OVERLAY">
   					<Texture name="PenanceIcon" file="Interface\Icons\Spell_Holy_Penance" setAllPoints="true" />
  				</Layer>
			</Layers>
			<Anchors>
				<Anchor point="RIGHT"/>
			</Anchors>		
 		</Button>

	</Frames>
	<Scripts>
        	<OnMouseDown>
        		self:StartMoving();
      		</OnMouseDown>
      		<OnMouseUp>
         		self:StopMovingOrSizing();
      		</OnMouseUp>
   	</Scripts>
</Frame>
</Ui> 


Die Lua enthält bisher lediglich:

Code: Alles auswählen

function DisciHelper()
print("ping");


end




Grüße, Immo

Re: WoW-Addon: Erste Versuche

Verfasst: Mittwoch 21. Juli 2010, 22:36
von Behemoth
Zwei Sachen auf den ersten Blick:

Willst wirklich bei jedem MouseDown, dass man den Knopf verschieben kann?

Irgendwo nach dem Laden könntest du versuchen SuehneButton:RegisterForClicks("AnyUp") oder sowas in der Art aufzurufen.

Um was anderes zu finden bin ich gerade zu müde.

Kann morgen nochmal schauen.

Re: WoW-Addon: Erste Versuche

Verfasst: Samstag 24. Juli 2010, 14:11
von Edrimar
Ich hab natürlich weitergebastelt und nun auch rausgefunden, wie das mit den Cooldowns funktioniert:

Zunächst dachte ich, dass ich einen Button des Spells brauche, um darauf den Cooldown anzeigen zu können. Allerdings kann man in WoW einfach über jeden beliebigen Frame einen weiteren Childframe legen, welcher als Cooldown deklariert wird. Dann einfach mit GetSpellCooldown("SPELLID") den aktuellen Cooldown ermitteln und den Cooldown starten. (dh man kann jeden beliebigen Cooldown auf jedem beliebigen Frame anzeigen und mit jeder beliebigen Textur versehen.. cool!)

Das ist nun die neue Lua:

Code: Alles auswählen

function DisciHelper()

-- prayer of mending
local start, duration, enabled = GetSpellCooldown("48113");



CreateFrame("Cooldown","PoMCooldown",PoMFrame)
PoMCooldown:SetAllPoints(PoMFrame)
PoMCooldown:SetCooldown(start, duration)

-- penance
local start2, duration2, enabled2 = GetSpellCooldown("53006");

CreateFrame("Cooldown","PenanceCooldown",PenanceFrame)
PenanceCooldown:SetAllPoints(PenanceFrame)
PenanceCooldown:SetCooldown(start2, duration2)
	

end
Und die xml, welche nur noch 2 Frames und keine Buttons mehr enthält:

Code: Alles auswählen

<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ 
 ..\..\FrameXML\UI.xsd">
<Frame name="DisciHelperFrame" parent="UIParent" movable="true" hidden="false" enableMouse="true">
	<Size x="66" y="32" />
	<Anchors>
		<Anchor point="CENTER"/>
	</Anchors>
	<Frames>
		
		<Frame name="PoMFrame" hidden="false" >
			<Size x="32" y="32" />
			<Anchors>
				<Anchor point="LEFT"/>
			</Anchors>
			<Backdrop bgFile="Interface\Icons\Spell_Holy_PrayerOfMendingtga"/>
		</Frame>
				
		<Frame name="PenanceFrame" hidden="false" >
			<Size x="32" y="32" />
			<Anchors>
				<Anchor point="RIGHT"/>
			</Anchors>
			<Backdrop bgFile="Interface\Icons\Spell_Holy_Penance"/>
		</Frame>

		

	</Frames>
	<Scripts>
		<OnUpdate> 
			DisciHelper(); 
		</OnUpdate>
        	<OnMouseDown>
        		self:StartMoving();
      		</OnMouseDown>
      		<OnMouseUp>
         		self:StopMovingOrSizing();
      		</OnMouseUp>
   	</Scripts>
</Frame>
</Ui> 


Wie man Buttons baut, weiß ich aber leider immernoch nicht. Sämtliche Beispiele aus dem Netz funktionieren nicht. Nichtmal das Beispiel von Blizzard direkt^^

Re: WoW-Addon: Erste Versuche

Verfasst: Samstag 24. Juli 2010, 14:25
von Behemoth
Das mit dem RegisterForClicks hast auch eingebaut schon?

Re: WoW-Addon: Erste Versuche

Verfasst: Samstag 24. Juli 2010, 14:51
von Edrimar

Code: Alles auswählen

<Button name="SuehneButton" inherits="SecureActionButtonTemplate" parent="UIParent" enableMouse="true">
	<Attributes>
		<Attribute name="type" type="string" value="spell"/>
		<Attribute name="spell" type="string" value="Penance"/>
		<Attribute name="unit" type="string" value="player"/>
	</Attributes>
	<Size x="32" y="32"/>
	<Layers>
		<Layer level="OVERLAY">
			<Texture name="PenanceIcon" file="Interface\Icons\Spell_Holy_Penance" setAllPoints="true" />
		</Layer>
	</Layers>
	<Anchors>
		<Anchor point="CENTER"/>
	</Anchors>  
	<Scripts>
		<OnLoad> SuehneButton:RegisterForClicks("AnyUp") </OnLoad>
	</Scripts>    
</Button>

Diesen Button habe ich mal eingefügt. Direkt ins <UI> </UI> Tag, also ohne ummantelnden Frame. Ich hab dann zwar ein Penance-Symbol in der Mitte des Bildschirms, aber es passiert nischt

Hab grad überlegt, ob der vielleicht den englischen Spellname nicht mag in dieser Zeile: <Attribute name="spell" type="string" value="Penance"/> .. mal testen



Edit:

OH MAN! Also wenn ich bisher eins gelernt habe, dann niemals ein AddON auf Basis einer lokalisierten Clientversion zu programmieren :lol:

Er hat nämlich echt ein Problem mit dem englischen spellnamen. Das hatte ich nicht erwartet, denn value="Sühne" mag er vermutlich aufgrund des Umlauts nicht (das ganze AddOn wird GAR NICHT geladen) und value="Suehne" kennt er nicht.
Als ich allerdings value="Gebet der Besserung" eingetragen habe, ging der Button plötzlich und hat das Gebet gezaubert.....

Re: WoW-Addon: Erste Versuche

Verfasst: Samstag 24. Juli 2010, 15:11
von Behemoth
Wenn du Umlaute im Quelltext deines Addons verwenden willst, dann besorg dir einen gescheiten Texteditor (ich empfehle Notepad++, einer der wenigen Editoren, der das wirklich kann und nicht nur so tut) und speicher das Ding im UTF8 Format ab statt ANSI/Ascii.