<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog.skyfighter.net - world of warcraft blog &#187; WoW/Programmierung</title>
	<atom:link href="http://blog.skyfighter.net/category/wowprogrammierung/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.skyfighter.net</link>
	<description>world of warcraft blog</description>
	<lastBuildDate>Mon, 31 Aug 2009 14:04:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>WoW am Macintosh &#8211; ein Bericht</title>
		<link>http://blog.skyfighter.net/2009/08/wow-am-macintosh-ein-bericht/</link>
		<comments>http://blog.skyfighter.net/2009/08/wow-am-macintosh-ein-bericht/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 08:07:57 +0000</pubDate>
		<dc:creator>Jan</dc:creator>
				<category><![CDATA[WoW/Programmierung]]></category>
		<category><![CDATA[Client]]></category>
		<category><![CDATA[iTunes]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Movie Recorder]]></category>
		<category><![CDATA[Musik]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[WoW]]></category>

		<guid isPermaLink="false">http://blog.skyfighter.net/?p=451</guid>
		<description><![CDATA[Installation &#038; Addons
World of Warcraft wird mit der gleichen Ordnerstruktur die auch Windows beherbergt auf dem Mac installiert. Wahlweise von DVD oder wie ich es vorgezogen habe mit Download von der WoW-Europe Seite. Umsteiger von Win auf Mac werden keine Probleme haben sich zurecht zu finden. Alles bleibt beim Alten. Das Gesamtpaket erreicht wieder seine [...]]]></description>
			<content:encoded><![CDATA[<h3>Installation &#038; Addons</h3>
<p>World of Warcraft wird mit der gleichen Ordnerstruktur die auch Windows beherbergt auf dem Mac installiert. Wahlweise von DVD oder wie ich es vorgezogen habe mit Download von der <a href="http://www.wow-europe.com/de/downloads/client/index.html">WoW-Europe</a> Seite. Umsteiger von Win auf Mac werden keine Probleme haben sich zurecht zu finden. Alles bleibt beim Alten. Das Gesamtpaket erreicht wieder seine 20 Gigabyte Größe und auch alle Addons für Interface, Bars oder dergleichen funktionieren ohne Probleme. </p>
<div class="cimg"><img src="http://blog.skyfighter.net/wp-content/upload/wow-mac.jpg" alt="WoW am Macintosh" /></div>
<h3>iTunes Remote</h3>
<p>Dem Mac wurde ein weiterer Leckerbissen spendiert. Eine Fernbedienung von iTunes direkt aus dem Spiel heraus. So ist es möglich zwischen Titeln zu wechseln, Lautstärke zu regeln und das aktuelle Lied wird beim Wechsel kurz eingeblendet.</p>
<div class="cimg"><img src="http://blog.skyfighter.net/wp-content/upload/wow-mac-itunes.jpg" alt="iTunes WoW Remote" /></div>
<p>Die Tastaturbelegung der Fernbedienung wird wie eine normale Fähigkeit an eine Taste gebunden. Nun ist es nur noch nötig iTunes offen zu haben und schon kann aus dem Spiel heraus in dem eigenen Musikdatenbank gestöbert werden. Spart das aus dem Spiel heraustabben um ein nerviges Lied zu überspringen. Leider ist keine Möglichkeit im Spiel vorhanden um zwischen Wiedergabelisten und Interpretenstruktur zu blättern.</p>
<div class="cimg"><img src="http://blog.skyfighter.net/wp-content/upload/wow-mac-itunes-2.jpg" alt="iTunes WoW Remote" /></div>
<h3>Movie Recorder</h3>
<p>Die größte Errungenschaft des World of Warcraft Mac Clients ist wohl der von Haus aus eingebaute Movie Recorder um ohne zusätzliche Tools wie Fraps oder Gamecam das Spielgeschehen aufzeichnen zu können. Bisher dachte ich auch die Windows Clients hätten diese Funktion inzwischen bekommen. Nichts da. Blizzard liebt eben auch die Freunde am Macintosh! Die Qualität überzeugt mich und was viel wichtiger ist: keine bzw. kaum merkliche Einbrüche an FPS. Werde das sobald wie möglich mal im Raid an einem Bossencounter testen und das Video danach präsentieren.</p>
<div class="cimg"><img src="http://blog.skyfighter.net/wp-content/upload/wow-mac-movie-recorder.jpg" alt="Mac WoW Movie Recorder" /></div>
<h3>Spielperformance</h3>
<p>Ich selbst spiele an einem <a href="http://www.apple.com/de/macbookpro/">MacBook Pro</a> 15&#8243; und habe zusätlich noch einen zweiten Monitor angeschlossen. 50 FPS in Dalaran, 30 bei aktivem Raidgeschehen. Überlege gerade die FPS auf 30 mit Konsolenbefehl zu begrenzen um die Wärmeentwicklung einzugrenzen. Probleme macht dies aber bisher nicht. Allgemein läuft WoW seit meinem Umstieg auf Mac wesentlich stabiler. Das mag an meiner alten Windows Klapperkiste liegen, oder weil Macintosh einfach das bessere Betriebssystem ist! Garantiert ist es einfach besser.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.skyfighter.net/2009/08/wow-am-macintosh-ein-bericht/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ArmoryCheatSheet</title>
		<link>http://blog.skyfighter.net/2009/08/armorycheatsheet-alle-variablen-des-wowarmory/</link>
		<comments>http://blog.skyfighter.net/2009/08/armorycheatsheet-alle-variablen-des-wowarmory/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 14:12:37 +0000</pubDate>
		<dc:creator>Jan</dc:creator>
				<category><![CDATA[WoW/Programmierung]]></category>
		<category><![CDATA[Armory]]></category>
		<category><![CDATA[armoryscript]]></category>
		<category><![CDATA[auslesen]]></category>
		<category><![CDATA[cheat]]></category>
		<category><![CDATA[cheatsheet]]></category>
		<category><![CDATA[daten]]></category>
		<category><![CDATA[grabber]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[sheet]]></category>
		<category><![CDATA[wowarmory]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://blog.skyfighter.net/?p=393</guid>
		<description><![CDATA[Der ArmoryCheatSheet ist eine Auflistung aller Variablen die im Armory gespeichert sind.  Vor einer Weile habe ich mir die Mühe gemacht alle Daten zu listen, damit ich eine schnelle Übersicht habe, wo ich welche Information finde. Das ganze geht davon aus, dass man die gesamte XML-Datei einliest und danach als Array zur Verfügung stellt.
Erklärung [...]]]></description>
			<content:encoded><![CDATA[<p>Der ArmoryCheatSheet ist eine Auflistung aller Variablen die im <a href="http://armory.wow-europe.com/">Armory</a> gespeichert sind.  Vor einer Weile habe ich mir die Mühe gemacht alle Daten zu listen, damit ich eine schnelle Übersicht habe, wo ich welche Information finde. Das ganze geht davon aus, dass man die gesamte XML-Datei einliest und danach als Array zur Verfügung stellt.</p>
<h2>Erklärung der Zeichensetzung</h2>
<h4>Ebenen</h4>
<p>Das Zeichen <strong>&#62;</strong> kennzeichnet die Ebene in der sich die Variable befindet. Umso mehr Zeichen hintereinander stehen, umso tiefer ist es gestaffelt.</p>
<blockquote><p><u>Beispiel:</u><br />
<em>&#8220;battleGroup&#8221;</em> innerhalb CharacterInfo und Character hat folgende Wertigkeit:<br />
&#62; CharacterInfo &#62;&#62; Character = battleGroup</p>
<p>Das PHP-Array auf diese Position würde wie folgt aussehen:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$Array</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;CharacterInfo&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;Character&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;battleGroup&quot;</span><span style="color: #009900;">&#93;</span></pre></div></div>

</blockquote>
<h4>In sich geschlossene Ebene</h4>
<p>Ein Datensatz, welcher im XML sich selbst abschließt, beispielsweiße <em>&#60;xml value=&#8221;1&#8243; /&#62;</em> wird im CheatSheet extra gekennzeichnet, indem die Ebene sich selbst endet:</p>
<blockquote><p><u>Beispiel:</u><br />
&#62;&#62;&#62;&#62; talentSpec /&#60;&#60;&#60;&#60;</p></blockquote>
<h4>Schleifen</h4>
<p>Schleifen werden mit geschweiften Klammern gekennzeichnet. In eckigen Klammern wird entweder eine spezifische Zahl angegeben, oder auf eine Vielzahl von Variablen hingewiesen. Hier kann ich empfehlen auch mit einer <a href="http://us2.php.net/manual/en/control-structures.foreach.php">PHP Schleife</a> zu arbeiten.</p>
<h2>ArmoryCheatSheet</h2>
<pre>
> TabInfo /<
= subTab
= tab
= tabGroup
= tabUrl

> CharacterInfo 

	>> Character /<<
		>> = battleGroup
		>> = charUrl
		>> = class
		>> = classId
		>> = classUrl
		>> = faction
		>> = factionId
		>> = gender
		>> = genderId
		>> = guildName
		>> = guildUrl
		>> = lastModified
		>> = level
		>> = name
		>> = points
		>> = prefix
		>> = race
		>> = raceId
		>> = realm
		>> = suffix
		>> = titleId

	>> CharacterTab

		>>> talentSpecs

			>>>> talentSpec /<<<<
			{ [2]
				>>>> = active
				>>>> = group
				>>>> = icon
				>>>> = prim
				>>>> = treeOne
				>>>> = treeTwo
				>>>> = treeThree
			}

		<<< talentSpecs

		>>> buffs /<<<

		>>> debuffs /<<<

		>>> pvp

			>>>> lifetimehonorablekills /<<<<
				>>>> = value

			>>>> arenacurrency /<<<<
				>>>> = value

		<<< (pvp)

		>>> professions

			>>>> skill /<<<<
			{ [2]
				>>>> = id
				>>>> = key
				>>>> = max
				>>>> = name
				>>>> = value
			}

		<<< professions

		>>> characterBars

			>>>> health
				>>>> = effective
			/<<<<

			>>>> secondBar
				>>>> = casting
				>>>> = effective
				>>>> = notCasting
				>>>> = type
			/<<<<

		<<< (characterBars)

		>>> baseStats

			>>>> strength /<<<<
				>>>> = attack
				>>>> = base
				>>>> = block
				>>>> = effective

			>>>> agility /<<<<
				>>>> = armor
				>>>> = attack
				>>>> = base
				>>>> = critHitPercent
				>>>> = effective

			>>>> stamina /<<<<
				>>>> = base
				>>>> = effective
				>>>> = health
				>>>> = petBonus

			>>>> intellect /<<<<
				>>>> = base
				>>>> = critHitPercent
				>>>> = effective
				>>>> = mana
				>>>> = petBonus

			>>>> spirit /<<<<
				>>>> = base
				>>>> = effective
				>>>> = healthRegen
				>>>> = manaRegen

			>>>> armor /<<<<
				>>>> = base
				>>>> = effective
				>>>> = percent
				>>>> = petBonus

		<<< (baseStats)

		>>> resistances

			>>>> arcane /<<<<
				>>>> = petBonus
				>>>> = value

			>>>> fire /<<<<
				>>>> = petBonus
				>>>> = value

			>>>> frost /<<<<
				>>>> = petBonus
				>>>> = value

			>>>> holy /<<<<
				>>>> = petBonus
				>>>> = value

			>>>> nature /<<<<
				>>>> = petBonus
				>>>> = value

			>>>> shadow /<<<<
				>>>> = petBonus
				>>>> = value

		<<< (resistances)

		>>> melee

			>>>> mainHandDamage /<<<<
				>>>> = dps
				>>>> = max
				>>>> = min
				>>>> = percent
				>>>> = speed

			>>>> offHandDamage /<<<<
				>>>> = dps
				>>>> = max
				>>>> = min
				>>>> = percent
				>>>> = speed

			>>>> mainHandSpeed /<<<<
				>>>> = hastePercent
				>>>> = hasteRating
				>>>> = value

			>>>> offHandSpeed /<<<<
				>>>> = hastePercent
				>>>> = hasteRating
				>>>> = value

			>>>> power /<<<<
				>>>> = base
				>>>> = effective
				>>>> = increasedDps

			>>>> hitRating /<<<<
				>>>> = increasedHitPercent
				>>>> = penetration
				>>>> = reducedArmorPercent
				>>>> = value

			>>>> critChance /<<<<
				>>>> = percent
				>>>> = plusPercent
				>>>> = rating

			>>>> expertise /<<<<
				>>>> = additional
				>>>> = percent
				>>>> = rating
				>>>> = value

		<<< (melee>

		>>> ranged

			>>>> weaponskill /<<<<
				>>>> = rating
				>>>> = value

			>>>> damage /<<<<
				>>>> = dps
				>>>> = max
				>>>> = min
				>>>> = percent
				>>>> = speed

			>>>> speed /<<<<
				>>>> = hastePercent
				>>>> = hasteRating
				>>>> = value

			>>>> power /<<<<
				>>>> = base
				>>>> = effective
				>>>> = increasedDps
				>>>> = petAttack
				>>>> = petSpell

			>>>> hitRating /<<<<
				>>>> = increasedHitPercent
				>>>> = penetration
				>>>> = reducedArmorPercent
				>>>> = value

			>>>> critChance /<<<<
				>>>> = percent
				>>>> = plusPercent
				>>>> = rating

		<<< (ranged)

		>>> spell

			>>>> bonusDamage

				>>>>> arcane /<<<<<
					>>>>> = value

				>>>>> fire /<<<<<
					>>>>> = value

				>>>>> frost /<<<<<
					>>>>> = value

				>>>>> holy /<<<<<
					>>>>> = value

				>>>>> nature /<<<<<
					>>>>> = value

				>>>>> shadow /<<<<<
					>>>>> = value

				>>>>> petBonus /<<<<<
					>>>>> = attack
					>>>>> = damage
					>>>>> = fromType

			<<<< bonusDamage

			>>>> bonusHealing /<<<<
				>>>> = value

			>>>> hitRating /<<<<
				>>>> = increasedHitPercent
				>>>> = penetration
				>>>> = reducedResist
				>>>> = value

			>>>> critChance /<<<<
				>>>> = rating

				>>>>> arcane /<<<<<
					>>>>> = percent

				>>>>> fire /<<<<<
					>>>>> = percent

				>>>>> frost /<<<<<
					>>>>> = percent

				>>>>> holy /<<<<<
					>>>>> = percent

				>>>>> nature /<<<<<
					>>>>> = percent

				>>>>> shadow /<<<<<
					>>>>> = percent

			<<<< (critChance)

			>>>> penetration /<<<<
				>>>> = value

			>>>> manaRegen /<<<<
				>>>> = casting
				>>>> = notCasting

			>>>> hasteRating /<<<<
				>>>> = hastePercent
				>>>> = hasteRating

		<<< (spell)

		>>> defenses

			>>>> armor /<<<<
				>>>> = base
				>>>> = effective
				>>>> = percent
				>>>> = petBonus

			>>>> defense /<<<<
				>>>> = decreasePercent
				>>>> = increasePercent
				>>>> = plusDefense
				>>>> = rating
				>>>> = value

			>>>> dodge /<<<<
				>>>> = increasePercent
				>>>> = percent
				>>>> = rating

			>>>> parry /<<<<
				>>>> = increasePercent
				>>>> = percent
				>>>> = rating

			>>>> block /<<<<
				>>>> = increasePercent
				>>>> = percent
				>>>> = rating

			>>>> resilience /<<<<
				>>>> = damagePercent
				>>>> = hitPercent
				>>>> = value

		<<< (defenses)

		>>> items

			>>>> item /<<<<
			{ [*]
				>>>> = durability
				>>>> = gem0Id
				>>>> = gem1Id
				>>>> = gem2Id
				>>>> = icon
				>>>> = id
				>>>> = maxDurability
				>>>> = permanentenchant
				>>>> = pickUp
				>>>> = putDown
				>>>> = randomPropertiesId
				>>>> = seed
				>>>> = slot
			}

		<<< (items)

		>>> glyphs

			>>>> glyph /<<<<
			{ [*]
				>>>> = effect
				>>>> = icon
				>>>> = id
				>>>> = name
				>>>> = type
			}

		<<< (glyphs)

		>>> summary

			>>>> c /<<<<
				>>>> = earned
				>>>> = points
				>>>> = total
				>>>> = totalPoints

			{ [*]
				>>>> category /<<<<
					>>>> = id
					>>>> = name

				>>>> c /<<<<
					>>>> = earned
					>>>> = earnedPoints
					>>>> = total
					>>>> = totalPoints
			}

		<<< (summary)

	<< (CharacterTab)

< (CharacterInfo)
</pre>
<h2>Fragen?</h2>
<p>Für Fragen, Probleme und Verbesserungsvorschläge sind die Kommentare natürlich wieder da. Ich versuche so gut es geht zu helfen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.skyfighter.net/2009/08/armorycheatsheet-alle-variablen-des-wowarmory/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Raidheiler &#8211; Und worauf glotzt du?</title>
		<link>http://blog.skyfighter.net/2008/07/raidheiler-und-worauf-glotzt-du/</link>
		<comments>http://blog.skyfighter.net/2008/07/raidheiler-und-worauf-glotzt-du/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 07:09:43 +0000</pubDate>
		<dc:creator>Jan</dc:creator>
				<category><![CDATA[Instanzen & Raids]]></category>
		<category><![CDATA[WoW/Programmierung]]></category>
		<category><![CDATA[Bildschirme]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Heiler]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Mount Hyial]]></category>
		<category><![CDATA[Paladin]]></category>
		<category><![CDATA[Raid]]></category>
		<category><![CDATA[Stargate]]></category>

		<guid isPermaLink="false">http://blog.skyfighter.net/?p=145</guid>
		<description><![CDATA[In einem Gespräch mit Björn nach meinem letzten Blogeintrag stellten wir fest, dass folgendes Zitat zuzutreffen scheint:
Heiler sind Klassen die über Stunden mit animalischer Begeisterung auf kleine farbige Kästchen in ihrem Interface schauen!
Da die Kekse gestern wieder im Mount Hyial unterwegs waren, konnte ich mit der DigiCam meinen Arbeitsplatz und Desktop fotografieren.

Wie man erkennen kann, [...]]]></description>
			<content:encoded><![CDATA[<p>In einem Gespräch mit <a href="http://eu.wowarmory.com/character-sheet.xml?r=Echsenkessel&#038;n=Elenore">Björn</a> nach meinem <a href="http://eu.wowarmory.com/character-sheet.xml?r=Echsenkessel&#038;n=Elenore">letzten Blogeintrag</a> stellten wir fest, dass folgendes Zitat zuzutreffen scheint:</p>
<blockquote><p>Heiler sind Klassen die über Stunden mit animalischer Begeisterung auf kleine farbige Kästchen in ihrem Interface schauen!</p></blockquote>
<p>Da die <a href="http://wtbek.de/">Kekse</a> gestern wieder im Mount Hyial unterwegs waren, konnte ich mit der DigiCam meinen Arbeitsplatz und Desktop fotografieren.<br />
<center><a href="http://blog.skyfighter.net/wp-content/upload/Desk_1.jpg" rel="lightbox[raid]"><img src="http://blog.skyfighter.net/wp-content/upload/Desk_1_tb.jpg" title="" /></a></center></p>
<p>Wie man erkennen kann, geht es lustig her auf meinem Schreibtisch während eines Raids. Ich bin froh 2 Bildschirme zu haben, denn mit nur einem wäre mir viel zu langweilig.</p>
<ul>
<li><strong>Hauptbildschirm:</strong> WoW läuft hier mit einem üblichen Raidinterface. Das lustigste am Heilerdasein ist aber der kleine Bereich auf den man Stunden schaut. Im Screenshot weiter unten habe ich diesen markiert. <strong>PallyPower</strong> beobachte ich alle 30 Minuten bzw. nachdem einzelne Raidmitglieder gestorben sind. Mein Hauptaugenmerk liegt aber auf <strong>Grid</strong>. <a href="http://blog.skyfighter.net/2008/02/die-jagd-nach-passenden-addons/">Früher</a> bereits erwähnt kann es zusammen mit Click2Cast oder <strong>Clique</strong> der einfachste Weg der Raidheilung werden. Die dunklen Bereiche auf meinem Interfacescreenshot schaue ich mir über Stunden hinweg kaum an. Im Mount Hyial drehe ich oft sogar meine Kamera nach oben um ein paar weitere FPS zu gewinnen. Einzig und allein bei Archimonde schaue ich genauer hin.</li>
</ul>
<ul>
<li><strong>Zweitbildschirm:</strong> Der Lichtblick meines Raidabends ist der 2. Bildschirm. Auf diesem schaue ich eigentlich ständig Videos, Filme oder Fernsehen. Wenn nur das Teamspeak dudelt bleibt genug Zeit rüberzuschauen. Die letzte Woche konnte ich <a href="http://stargate.mgm.com/">Stargate</a> bis weit in die 5. Staffel schauen. Außerdem kann man ICQ Kontakte pflegen oder das IRC Netzwerk durchstöbern. Nicht das jemand denkt, dass ich nicht anständig heile, wenn ich soviel nebenbei mache. Laut Heilmeter steh ich meist unter den ersten 3 Heilern und das ist ein guter Schnitt.</li>
</ul>
<p><center><img src="http://blog.skyfighter.net/wp-content/upload/Desk_2.jpg" title="" /></center></p>
<p>Mich würde interessieren auf was andere Klassen so achten. Schauen die DDs wenigstens über den gesamten Bildschirm? Macht ihr ähnliche Sachen nebenbei? Müsst ihr euch voll auf den Raid konzentrieren?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.skyfighter.net/2008/07/raidheiler-und-worauf-glotzt-du/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Armory + PHP &#8211; Teil 1: XML einlesen, Onlinestatus, einfache Ausgabe</title>
		<link>http://blog.skyfighter.net/2008/04/armory-php-teil-1-xml-einlesen-onlinestatus-einfache-ausgabe/</link>
		<comments>http://blog.skyfighter.net/2008/04/armory-php-teil-1-xml-einlesen-onlinestatus-einfache-ausgabe/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 15:45:04 +0000</pubDate>
		<dc:creator>Jan</dc:creator>
				<category><![CDATA[WoW/Programmierung]]></category>
		<category><![CDATA[Armory]]></category>
		<category><![CDATA[CURL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[SimpleXML]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://blog.skyfighter.net/?p=107</guid>
		<description><![CDATA[Die Informationsvielfalt im Armory ist recht gigantisch und wird auch grafisch hochwertig präsentiert. Leider fehlt jegliche direkte Entwicklerschnittstelle und nicht jeder kann sich mit derart übertriebenen Darstellungen anfreunden. Der Vorteil im Armory liegt in seinem Datenhintergrund. Es generiert sich aus XML-Dateien, welche mit relativ wenig Mühe in PHP eingelesen werden können.
Der UserAgent und das Täuschungsmanöver
Blizzard [...]]]></description>
			<content:encoded><![CDATA[<p>Die Informationsvielfalt im Armory ist recht gigantisch und wird auch grafisch hochwertig präsentiert. Leider fehlt jegliche direkte Entwicklerschnittstelle und nicht jeder kann sich mit derart übertriebenen Darstellungen anfreunden. Der Vorteil im Armory liegt in seinem Datenhintergrund. Es generiert sich aus XML-Dateien, welche mit relativ wenig Mühe in PHP eingelesen werden können.</p>
<h3>Der UserAgent und das Täuschungsmanöver</h3>
<p>Blizzard rückt seine Daten nicht sofort heraus, sondern man muss die Scriptabfrage als Benutzeranfrage verschleiern um die XML-Datei im Hintergrund laden zu können. In PHP wird die ini-Funktion &#8220;user_agent&#8221; dafür verwendet und die Ausgabe nach UTF-8 formatiert.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># UserAgent setzen
</span><span style="color: #000088;">$useragent</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Mozilla/5.0 (Windows; U; Windows NT 5.0; de-DE; rv:1.6)
Gecko/20040206 Firefox/1.0.1&quot;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">ini_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'user_agent'</span><span style="color: #339933;">,</span><span style="color: #000088;">$useragent</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-Type: text/html; charset=utf-8'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>XML-Datei einlesen</h3>
<p>Der nächste Schritt besteht darin, die Daten der XML-Datei erstmal als Variable in die PHP-Andwendung zu bekommen, bevor wir irgendwelche Algorithmen zur Auswertung starten können.<br />
Innerhalb meiner Armory Klasse habe ich mich für eine Variante mit <a href="http://de.php.net/curl">CURL</a> entschieden. Dies setzt die <a href="http://curl.haxx.se/libcurl/">libcurl</a> voraus. Der Useragent wird auch hier bei der Anfrage übergeben. Ein einfacher Weg ist auch die XML-Datei mittels <a href="http://www.php.net/file_get_contents">file_get_contents()</a> in eine Stringvariable zu laden.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># URL vorbereiten
</span><span style="color: #000088;">$URL</span>
<span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://eu.wowarmory.com/character-sheet.xml?r=Echsenkessel&amp;n=Ariliao&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># CURL initialisieren und XML-Datei laden
</span><span style="color: #000088;">$curl</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">curl_setopt</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #000088;">$URL</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl</span><span style="color: #339933;">,</span> CURLOPT_USERAGENT<span style="color: #339933;">,</span> <span style="color: #000088;">$useragent</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl</span><span style="color: #339933;">,</span> CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$load</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Armory online oder offline?</h3>
<p>Aufgrund der extrem starken Auslastungen kann es vorkommen, dass das Armory nicht erreichbar ist. Meist wird eine Standardnachricht angezeigt und man erhält keinen Einblick auf Daten.</p>
<p>Nach einiger Tüftelei kann die <a href="http://de.php.net/strlen">Länge des eingelesenen Strings</a> (im Onlinefall die XML-Datei) dazu benutzt werden einen Status relativ zielsicher zu ermitteln. Die Übersicht eines Charakters ist bis zu 15.000 Zeichen lang und im Gegensatz zur Fehlermeldung wesentlich größer. Eine Überprüfung auf 5000 Zeichen Mindestlänge kann einige Probleme lösen. Wird keine Onlineabfrage durchgeführt, erhält man im Offlinefall nur wirre Datenausgaben bzw. Fehlermeldungen. Kein Benutzer des Scripts sieht so etwas gern.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Laenge des eingelesenen Strings ermitteln
</span><span style="color: #000088;">$sleng</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$load</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Pruefen ob online / offline mittels Laenge
</span><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sleng</span> <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">5000</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
     <span style="color: #666666; font-style: italic;"># Armory online =&gt; Datenverarbeitung beginnen
</span><span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
&nbsp;
     <span style="color: #666666; font-style: italic;"># Armory offline =&gt; Fehlermeldung anzeigen
</span><span style="color: #009900;">&#125;</span></pre></div></div>

<h3>XML-Daten nutzen => SimpleXML</h3>
<p>PHP liefert die Möglichkeit XML-Dateien mit <a href="http://php.net/simplexml">SimpleXML</a> zu verarbeiten. Dabei wird der eingelesene String zu verwaltbaren XML-Elementen welche im Programmcode genutzt werden können.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># eingelesenen String zu SimpleXMLElement umformen
</span><span style="color: #000088;">$xml</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SimpleXMLElement<span style="color: #009900;">&#40;</span><span style="color: #000088;">$load</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>XML-Struktur und der Zugriff auf Felder und Attribute</h3>
<p>Eine weitere Hürde für die Nutzung der Armorydaten ist die Struktur, welche im momentanen Programmcode vorliegt. Die Variable <strong>$xml</strong> enthält alle verfügbaren Charakterdaten und müssen nur noch verarbeitet werden. Eine größere Liste über die Objekte und die Form des XML-Objekts wird es in einem späteren Teil geben.</p>
<p>Für die momentane Ausgabe, soll nur der Name und das Level eines Charakters per <em>echo</em> verkündet werden. Beides befindet sich unter <em>$xml->characterInfo->character</em> mit dem Attribut <em>&#8216;name&#8217;</em> bzw. <em>&#8216;level&#8217;</em>.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Namen und Level des eingelesenen Charakters ausgeben
</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$xml</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">characterInfo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">character</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; hat das
Level &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$xml</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">characterInfo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">character</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'level'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Probleme bei der Zuweisung in Variablen / Arrays</h3>
<p>Die Variable <strong>$xml</strong> enthält Objekte und bei diesen kann es innerhalb von PHP zu Problemen kommen, wenn man sie einfach in neue Arrays sortieren möchte.<br />
Ein kleiner und sicher nicht sehr eleganter Workaround ist die Zuweisung als Ergänzung zum String im Array. Bei einer Neuzuweisung ist das Ergebnis dieser <em>&#8216;Ergänzung&#8217;</em> gleich der normalen Zuweisung, da neue Arrayfelder immer Leer sind.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Charakternamen in neues Array bringen: ' .= ' ist die Ergaenzung
</span>
<span style="color: #000088;">$Char</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;Info&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$xml</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">characterInfo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">character</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Der gesamte Quellcode des Beispiels</h3>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># UserAgent setzen
</span><span style="color: #000088;">$useragent</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Mozilla/5.0 (Windows; U; Windows NT 5.0; de-DE; rv:1.6)
Gecko/20040206 Firefox/1.0.1&quot;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">ini_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'user_agent'</span><span style="color: #339933;">,</span><span style="color: #000088;">$useragent</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-Type: text/html; charset=utf-8'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #666666; font-style: italic;"># URL vorbereiten
</span><span style="color: #000088;">$URL</span>
<span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://eu.wowarmory.com/character-sheet.xml?r=Echsenkessel&amp;n=Ariliao&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># CURL initialisieren und XML-Datei laden
</span><span style="color: #000088;">$curl</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">curl_setopt</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #000088;">$URL</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl</span><span style="color: #339933;">,</span> CURLOPT_USERAGENT<span style="color: #339933;">,</span> <span style="color: #000088;">$useragent</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl</span><span style="color: #339933;">,</span> CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$load</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">curl_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$curl</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># eingelesenen String zu SimpleXMLElement umformen
</span><span style="color: #000088;">$xml</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SimpleXMLElement<span style="color: #009900;">&#40;</span><span style="color: #000088;">$load</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Namen und Level des eingelesenen Charakters ausgeben
</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$xml</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">characterInfo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">character</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; hat das
Level &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$xml</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">characterInfo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">character</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'level'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Wird es noch mehr Entwicklerinfos zum Armory von dir geben?</h3>
<p>Ja wird es. Ich plane eine Übersicht über die Datenstrukturen als Hilfe für mich wie für andere Entwickler zu veröffentlichen. Eventuell kann ich sogar Teile meiner Armory Klasse, welche auf <a href="http://wow.skyfighter.net">wow.skyfighter.net</a> zum Einsatz kommt zur Verfügung stellen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.skyfighter.net/2008/04/armory-php-teil-1-xml-einlesen-onlinestatus-einfache-ausgabe/feed/</wfw:commentRss>
		<slash:comments>48</slash:comments>
		</item>
		<item>
		<title>WoW Instant Messenger</title>
		<link>http://blog.skyfighter.net/2007/05/wow-instant-messenger/</link>
		<comments>http://blog.skyfighter.net/2007/05/wow-instant-messenger/#comments</comments>
		<pubDate>Fri, 04 May 2007 16:35:03 +0000</pubDate>
		<dc:creator>Jan</dc:creator>
				<category><![CDATA[WoW/Programmierung]]></category>

		<guid isPermaLink="false">http://blog.skyfighter.net/index.php/2007/05/04/wow-instant-messenger/</guid>
		<description><![CDATA[




Durch einen kleinen Beitrag in unserem Gildenforum bin ich vor einiger Zeit auf WIM aufmerksam geworden. Die meisten Spieler kennen das Problem von zuvielen Fl�sternachrichten auf einmal. Sei es nun in Raids bei DKP-Geboten, Verkaufs- oder Ankaufsangeboten dem gem�tlichen Mitgliederchat oder Gruppensuche: In vielen F�llen fl�stert man mit mehr als einer Person und wieviele hunderte [...]]]></description>
			<content:encoded><![CDATA[<div class="ipib">
<a href="http://blog.skyfighter.net/wp-content/upload/wim/wim.jpg" rel="lightbox[wim]" ><img src="http://blog.skyfighter.net/wp-content/upload/wim/wim_k.jpg" title="WIM Chatfenster" /></a><br />
<a href="http://blog.skyfighter.net/wp-content/upload/wim/wimoptions.jpg" rel="lightbox[wim]" ><img src="http://blog.skyfighter.net/wp-content/upload/wim/wimoptions_k.jpg" title="WIM Einstellungsm�glichkeiten" /></a><br />
<a href="http://blog.skyfighter.net/wp-content/upload/wim/wimhistoryviewer.jpg" rel="lightbox[wim]" ><img src="http://blog.skyfighter.net/wp-content/upload/wim/wimhistoryviewer_k.jpg" title="WIM Gespr�chshistory" /></a>
</div>
<p>Durch einen kleinen Beitrag in unserem <a href="http://www.council-of-elders.de">Gildenforum</a> bin ich vor einiger Zeit auf <a href="http://www.wimaddon.com/">WIM</a> aufmerksam geworden. Die meisten Spieler kennen das Problem von zuvielen Fl�sternachrichten auf einmal. Sei es nun in Raids bei DKP-Geboten, Verkaufs- oder Ankaufsangeboten dem gem�tlichen Mitgliederchat oder Gruppensuche: In vielen F�llen fl�stert man mit mehr als einer Person und wieviele hunderte Male haben wir schon <em>&#8220;sry fc&#8221;</em> geschrieben, denn das herumtabben zwischen Fl�sterpartnern ist oft nicht sehr effizient.<br />
Diesem Problem schafft <strong>WIM</strong> sofortige Abhilfe. Nach gewohnt einfacher Installation werden erhaltene und gesendete Fl�sternachrichten ab sofort in sch�nen Chatfenstern dargestellt. Benutzer von ICQ, MSN oder anderen Instant Messengern werden sich sicher heimisch f�hlen und schnell den nutzen dieses kleinen Tools erkennen. Neben der Darstellung bringt <strong>WIM</strong> gleich viele weitere Einstellungsm�glichkeiten mit sich. Es ignoriert von Haus aus einige Raidstandardnachrichten wie &#8220;Du bist die Bombe&#8221; und zeigt diese nur im normalen Chatfenster an. Farben, Gr��en und Charakterinformationen des Gegen�bers lassen sich einfach ein- oder ausschalten und ver�ndern. Neben diesen Dingen ist <strong>WIM</strong> aber noch zu mehr zu gebrauchen. Vorallem in den letzten Wochen scheinen sich Goldspamfl�sterer wie die Heuschrecken zu vermehren. Mit genauerem hinsehen erkennt man, dass diese oft Standardtextteile verwenden. Wer diese k�nftig nicht mehr empfangen m�chte, kann <strong>WIM</strong> so einstellen, dass das Addon Nachrichten welche diese Textbl�cke enthalten einfach blockt. Ihr bleibt verschont vom Goldspam und dies ohne viel Aufwand. Der letzte Vorteil den ich hier anf�hren m�chte liegt im umfangreichen <em>History</em>-Teil von <strong>WIM</strong>. Alle Fl�sternachrichten werden protokolliert und sind noch Tage sp�ter abrufbar. Beim AFK-sein ausgeloggt worden? Auch kein Problem! Denn schlie�lich kann auch hier die <em>History</em> mit einem kurzen Blick wieder zum letzten Gespr�chsstand zur�ckf�hren.</p>
<p>WIM &#8211; Ein Tool das die Spielkommunikation erheblich erleichtert!<br />
Weitere Informationen, die <a href="http://www.wimaddon.com/wiki/WIM:Screenshots">Originiale</a> der hier gezeigten Bilder und <a href="http://www.wimaddon.com/wiki/WIM:Downloads">Downloadm�glichkeiten</a> findet ihr im <a href="http://www.wimaddon.com/">Wiki des WIM-Projektes</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.skyfighter.net/2007/05/wow-instant-messenger/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
