WoW-Addon: Erste Versuche

Themen zum Programmieren, Skripten, etc.

Moderator: LiMuBei

Antworten
Edrimar
40 % Vol.
Beiträge: 420
Registriert: Sonntag 20. Februar 2005, 23:07
Wohnort: Berlin

WoW-Addon: Erste Versuche

Beitrag von Edrimar » Mittwoch 21. Juli 2010, 22:30

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
Zuletzt geändert von LiMuBei am Mittwoch 21. Juli 2010, 23:50, insgesamt 1-mal geändert.
Grund: Code besser lesbar formatiert (d. Admin)

Benutzeravatar
Behemoth
Initiative Big Boss
Beiträge: 1827
Registriert: Donnerstag 10. Februar 2005, 14:48
Wohnort: Karlsruhe

Re: WoW-Addon: Erste Versuche

Beitrag von Behemoth » Mittwoch 21. Juli 2010, 22:36

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.
Look at me, I'm invisible!

Edrimar
40 % Vol.
Beiträge: 420
Registriert: Sonntag 20. Februar 2005, 23:07
Wohnort: Berlin

Re: WoW-Addon: Erste Versuche

Beitrag von Edrimar » Samstag 24. Juli 2010, 14:11

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^^

Benutzeravatar
Behemoth
Initiative Big Boss
Beiträge: 1827
Registriert: Donnerstag 10. Februar 2005, 14:48
Wohnort: Karlsruhe

Re: WoW-Addon: Erste Versuche

Beitrag von Behemoth » Samstag 24. Juli 2010, 14:25

Das mit dem RegisterForClicks hast auch eingebaut schon?
Look at me, I'm invisible!

Edrimar
40 % Vol.
Beiträge: 420
Registriert: Sonntag 20. Februar 2005, 23:07
Wohnort: Berlin

Re: WoW-Addon: Erste Versuche

Beitrag von Edrimar » Samstag 24. Juli 2010, 14:51

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.....

Benutzeravatar
Behemoth
Initiative Big Boss
Beiträge: 1827
Registriert: Donnerstag 10. Februar 2005, 14:48
Wohnort: Karlsruhe

Re: WoW-Addon: Erste Versuche

Beitrag von Behemoth » Samstag 24. Juli 2010, 15:11

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.
Look at me, I'm invisible!

Antworten