<?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>project-2501.net &#187; games</title>
	<atom:link href="http://project-2501.net/index.php/category/games/feed/" rel="self" type="application/rss+xml" />
	<link>http://project-2501.net</link>
	<description>The net is vast and infinite.</description>
	<lastBuildDate>Mon, 14 May 2012 07:10:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Guildwars 2 BWE Impressions</title>
		<link>http://project-2501.net/index.php/2012/04/guildwars-2-bwe-impressions/</link>
		<comments>http://project-2501.net/index.php/2012/04/guildwars-2-bwe-impressions/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 11:44:53 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[games]]></category>

		<guid isPermaLink="false">http://project-2501.net/?p=426</guid>
		<description><![CDATA[The BWE is now over. I thought I&#8217;d record some of my thoughts (good and bad) from my play through this weekend. Overall I played ~25 hours split over two characters, a level 14 char Elementalist and a level 21 Norn Guardian. Note: I&#8217;ve been following GW2 for a while now, and while getting hyped [...]]]></description>
			<content:encoded><![CDATA[<p>The BWE is now over.  I thought I&#8217;d record some of my thoughts (good and bad) from my play through this weekend.  Overall I played ~25 hours split over two characters, a level 14 char Elementalist and a level 21 Norn Guardian.</p>
<p>Note:  I&#8217;ve been following GW2 for a while now, and while getting hyped up, I still knew what to expect for the most part..  With that, I had high hopes and I think they were almost all met. </p>
<p>Being in Australia the latency wasn&#8217;t great.  Not horrible, but there was a delay on using all my abilities that made the game feel a little sluggish.  I got used to it in PvE, but it might affect PvP a lot more.</p>
<p><a href="http://project-2501.net/gallery/guildwars2/20120429_gw001.jpg"><img src="http://project-2501.net/gallery/guildwars2/thumb/20120429_gw001.jpg"></a></p>
<p>Graphical the game looked great, and for a GW player getting to see familiar places was pretty awesome  (e.g. Temple of Ages, and the Wizards tower off the coast of the Kessex Hills).</p>
<p>Performance was pretty poor on my system  (laptop with a GTX-485), but this is widely reported and being worked on.</p>
<p>I&#8217;m still not 100% sold on skills being tied to weapons.  Some combinations seem very situational and others seem very balanced with no real need to weapon swap at all  (e.g. Greatsword with the Guardian).  I wonder if getting rid of the auto-attack for another skill would help even out some of the weapon sets (while moving the auto-attack to an innate ability).  The  Elementalist however was great with it&#8217;s wide selection of skills regardless of weapon.</p>
<p><a href="http://project-2501.net/gallery/guildwars2/20120429_gw002.jpg"><img src="http://project-2501.net/gallery/guildwars2/thumb/20120429_gw002.jpg"></a></p>
<p>I was surprised at the personal stories, I was expecting a separate story for each race will little flavour quests based on your character questions, but while levelling with another Norn we had completely different stories through out the BWE (last quest was level 18).</p>
<p>However, the pacing of the personal stories seemed a little odd, it was very hard to keep up in level if you just stayed in your races zones  (even if you did ever heart/event/POI/etc).  Going to another zone for a while was a simple solution but not really intuitive.  I wonder if it would be better if their personal quests made you explore (or at least travel) to other zones?</p>
<p><a href="http://project-2501.net/gallery/guildwars2/20120429_gw003.jpg"><img src="http://project-2501.net/gallery/guildwars2/thumb/20120429_gw003.jpg"></a></p>
<p>I enjoyed most hearts and events (the swamp event was pretty damn awesome).  Though with many people they turned into zergs, I think 3-6 people was the most enjoyable.</p>
<p>Overflow&#8230; Overflow and parties&#8230; I&#8217;m told it will be fixed by release.  I certainly hope so.</p>
<p>In general I thought the UI was OK.  It wasn&#8217;t very intuitive but it was functional.  I would like to see a better skill selection system, an explanation to exactly what the core stats do, and a guild panel that makes sense  (I&#8217;m still not sure if you invite a character or an account).</p>
<p><a href="http://project-2501.net/gallery/guildwars2/20120429_gw005.jpg"><img src="http://project-2501.net/gallery/guildwars2/thumb/20120429_gw005.jpg"></a></p>
<p>Not sold on the Gem store either.  Most things in there I didn&#8217;t mind, but some of the boosts and things like bag slots irked me a little.  Maybe with the Gold → Gem conversion is won&#8217;t be that bad.</p>
<p>Crafting was way too complicated, I can see what they were going for, but there&#8217;s just too many intermediate items and crafting materials.</p>
<p>That&#8217;s it for now, I&#8217;m sure I&#8217;ll update as more things come to mind.</p>
]]></content:encoded>
			<wfw:commentRss>http://project-2501.net/index.php/2012/04/guildwars-2-bwe-impressions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guild Wars: E/Me Vaettir Farm</title>
		<link>http://project-2501.net/index.php/2011/10/guild-wars-eme-vaettir-farm/</link>
		<comments>http://project-2501.net/index.php/2011/10/guild-wars-eme-vaettir-farm/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 03:14:28 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://project-2501.net/?p=397</guid>
		<description><![CDATA[E/Me Obsidian Flesh Vaettir Farm (HM) Skills OgVFI7QIlMPkLo0n2wXlBgMwSgWF Elemental Lord (Optional) Glyph of Swiftness Obsidian Flesh Stoneflesh Aura Mantra of Earth Wastrel&#8217;s Worry Arcane Echo Storm Djinn&#8217;s Haste (Optional) Attributes 12 + 3 + 1 Earth Magic 3 + 1 Energy Storage 4 Air Magic 4 Inspiration Magic 11 Domination Weapon +20% Enchantment length Armor [...]]]></description>
			<content:encoded><![CDATA[<p><object width="560" height="315"><param name="movie" value="http://www.youtube.com/v/ygLy1Ebh-7s?version=3&#038;feature=oembed"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ygLy1Ebh-7s?version=3&#038;feature=oembed" type="application/x-shockwave-flash" width="560" height="315" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<blockquote><p>
E/Me Obsidian Flesh Vaettir Farm (HM)</p>
<p><strong>Skills</strong></p>
<p>OgVFI7QIlMPkLo0n2wXlBgMwSgWF</p>
<p>Elemental Lord (Optional)<br />
Glyph of Swiftness<br />
Obsidian Flesh<br />
Stoneflesh Aura<br />
Mantra of Earth<br />
Wastrel&#8217;s Worry<br />
Arcane Echo<br />
Storm Djinn&#8217;s Haste (Optional)</p>
<p><strong>Attributes</strong></p>
<p>12 + 3 + 1 Earth Magic<br />
3 + 1 Energy Storage<br />
4 Air Magic<br />
4 Inspiration Magic<br />
11 Domination</p>
<p><strong>Weapon</strong></p>
<p>+20% Enchantment length</p>
<p><strong>Armor</strong></p>
<p>5x Geomancer Runes (I think you can get away with a +10 earth shield instead)<br />
Sup Earth Magic<br />
Minor Energy Storage</p>
<p><strong>Notes</strong></p>
<ul>
<li>If you get attacked by the Wurm in Bjora Marches, just put up Obsidian Flesh right away and you&#8217;ll be fine</li>
<li>When you have all 60 mobs drag them in between the building + wall to stop them scattering</li>
<li>Be careful not to let them body block you</li>
<li>Elemental Lord isn&#8217;t required, and only gives you an extra 1s on Obsidian flesh.</li>
<li>A faster, nicer A/Me run can be found here: <a href="http://www.youtube.com/watch?v=zZ1h2GoOpag">http://www.youtube.com/watch?v=zZ1h2GoOpag</a></li>
</ul>
<p>Recorded 2011-10-12
</p></blockquote>
<p>In other news, currently at <a href="http://hom.guildwars2.com/en/#page=main&#038;details=kMEAA8%2F%2F%2F%2FDAgQAAAgHAAAAAAAIAAAAAYGEQAAAAAAA&#038;todo=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA">29/50 points in the Hall of Monuments</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://project-2501.net/index.php/2011/10/guild-wars-eme-vaettir-farm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Guild Wars: Capturing a Black Widow spider</title>
		<link>http://project-2501.net/index.php/2011/09/guild-wars-capturing-a-black-widow-spider/</link>
		<comments>http://project-2501.net/index.php/2011/09/guild-wars-capturing-a-black-widow-spider/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 12:18:37 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://project-2501.net/?p=392</guid>
		<description><![CDATA[Some more random Fraps footage this time from Guild Wars. Been busy getting points in the Hall of Monuments. Nothing impressive, but I had never done much end-game content, and maybe it will help save someone else some gold after seeing how easy it is. I took 6 heros: Three Discordway Necros, Prot Monk, Panic [...]]]></description>
			<content:encoded><![CDATA[<p>Some more random Fraps footage this time from Guild Wars.  Been busy getting points in the <a href="http://hom.guildwars2.com/en/#page=main&#038;details=AIEAA8%2F%2F%2F%2FDAgQAAAgHAAAAAAAIAAAAAOGEQAAAAAAA&#038;todo=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA">Hall of Monuments.</a></p>
<p><object width="560" height="315"><param name="movie" value="http://www.youtube.com/v/fWgBXKqAp84?version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/fWgBXKqAp84?version=3" type="application/x-shockwave-flash" width="560" height="315" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<blockquote>
<p>
Nothing impressive, but I had never done much end-game content, and maybe it will help save someone else some gold after seeing how easy it is.
</p>
<p>
I took 6 heros: Three Discordway Necros, Prot Monk, Panic Mesmer and a SoS Ritulist. Ump came with me on his Barrage Ranger, and I had some stupid Ele/R spec (with unspent points&#8230;).
</p>
<p>
The entire run took less than 30 minutes and I&#8217;m sure if you had a real build and knew where you were going, it would be very fast.
</p>
<p><strong>Walk-through:</strong></p>
<ul>
<li>Clear out the spawn area without accepting any quests</li>
<li>Take the Clear the Chamber quest from the spawn area and clear out the new mobs</li>
<li>Head north/west and take out all the mobs on the way</li>
<li>Talk to the Reaper of the Labyrinth and take the quest Restoring Grenth&#8217;s Monuments</li>
<li>Head south until you reach the Reaper of the Forgotten Vale </li>
<li>Clear out any nearby Coldfire Nights to the north</li>
<li>Take the quest Wrathful Spirits and kill all the Wrathful Spirits (Making sure not to let the Mayor die)</li>
<li>Hand in the quest and capture your spider (remember to flag the Heros well away from you, or they&#8217;ll kill the spider as you start to charm it)</li>
</ul>
<p>
Recorded 2011-09-20
</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://project-2501.net/index.php/2011/09/guild-wars-capturing-a-black-widow-spider/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Diablo 2 Fun</title>
		<link>http://project-2501.net/index.php/2011/08/diablo-2-fun/</link>
		<comments>http://project-2501.net/index.php/2011/08/diablo-2-fun/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 14:40:06 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://project-2501.net/?p=380</guid>
		<description><![CDATA[Just some fraps footage I had on my HDD taking up space I follow Umpa around as he kills Lilith, Uber Izual, Uber Duriel, Uber Mephisto, Uber Baal and finally Pandemonium Diablo. Recorded 2nd July 2011 US West Ladder My Character]]></description>
			<content:encoded><![CDATA[<p>Just some fraps footage I had on my HDD taking up space <img src='http://project-2501.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/N0xCwZpN45Q?version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/N0xCwZpN45Q?version=3" type="application/x-shockwave-flash" width="560" height="340" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<blockquote><p>I follow Umpa around as he kills Lilith, Uber Izual, Uber Duriel, Uber Mephisto, Uber Baal and finally Pandemonium Diablo.</p>
<p>Recorded 2nd July 2011</p>
<p>US West Ladder</p>
<p><a href="http://project-2501.net/gallery/games/diablo2%20hammerdin%2020110827.png">My Character</a></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://project-2501.net/index.php/2011/08/diablo-2-fun/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sources of Holy Power Generation</title>
		<link>http://project-2501.net/index.php/2011/04/sources-of-holy-power-generation/</link>
		<comments>http://project-2501.net/index.php/2011/04/sources-of-holy-power-generation/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 08:32:17 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://project-2501.net/?p=266</guid>
		<description><![CDATA[Note: The information present in this post is a couple of months out of date. I&#8217;ve not had the time to re-update WoL data and create new graphs, but thought it might be interesting share the data/code anyway When choosing a Holy Paladin spec for 10 mans I was never completely sure about benefits of [...]]]></description>
			<content:encoded><![CDATA[<p><em>Note: The information present in this post is a couple of months out of date.  I&#8217;ve not had the time to re-update WoL data and create new graphs, but thought it might be interesting share the data/code anyway</em></p>
<p>When choosing a Holy Paladin spec for 10 mans I was never completely sure about benefits of Tower of Radiance or Blessed Life.  ToR seems like a safe choice, though the frequency that you DL/FoL your beacon seemed low.  Blessed Life on the other hand was obviously a PvP talent, but it would generate free HP from some raid damage.</p>
<p>I set out to scrape the top 200 Paladins for each 10-N boss fights from <a href="http://www.­worldoflogs.­com">World of Logs</a> and record their source of HP generation.  I created two graphs; one that looks at all 200 parses in general, and a second that only counts when the ability is present.  e.g.  Only 10 or so Paladins used CS on Cho&#8217;gall, and they generated very little HP overall, but if you just look at lose 10 parses, the average is 8.  This is used as a crude way to see when certain talents are taken.</p>
<h3>Overall</h3>
<p><a href="http://project-2501.net/gallery/wow/holy-power-gen-overall.png"><img src="http://project-2501.net/gallery/.thumbs/gallery_wow_holy-power-gen-overall.png.jpeg"></a></p>
<h3>Only when abilities are present</h3>
<p><a href="http://project-2501.net/gallery/wow/holy-power-gen-only-when-present.png"><img src="http://project-2501.net/gallery/.thumbs/gallery_wow_holy-power-gen-only-when-present.png.jpeg"></a></p>
<p>I&#8217;ve included the python code used to generate the data for these graphs below.  My general disclaimer applies (i.e. be afraid)</p>
<h3>grab-details.py</h3>
<div class="codecolorer-container python default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">urllib2</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span><br />
<br />
pages <span style="color: #66cc66;">=</span> <span style="color: black;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">'magmaw-10-n'</span>: <span style="color: black;">&#91;</span><span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Magmaw/10N/Holy_Paladin/'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Magmaw/10N/Holy_Paladin/?page=2'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Magmaw/10N/Holy_Paladin/?page=3'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Magmaw/10N/Holy_Paladin/?page=4'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Magmaw/10N/Holy_Paladin/?page=5'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #483d8b;">'omnitron-10-n'</span>: <span style="color: black;">&#91;</span><span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Omnitron_Defense_System/10N/Holy_Paladin/'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Omnitron_Defense_System/10N/Holy_Paladin/?page=2'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Omnitron_Defense_System/10N/Holy_Paladin/?page=3'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Omnitron_Defense_System/10N/Holy_Paladin/?page=4'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Omnitron_Defense_System/10N/Holy_Paladin/?page=5'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #483d8b;">'chimaeron-10-n'</span>: <span style="color: black;">&#91;</span><span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Chimaeron/10N/Holy_Paladin/'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Chimaeron/10N/Holy_Paladin/?page=2'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Chimaeron/10N/Holy_Paladin/?page=3'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Chimaeron/10N/Holy_Paladin/?page=4'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Chimaeron/10N/Holy_Paladin/?page=5'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #483d8b;">'atramedes-10-n'</span>: <span style="color: black;">&#91;</span><span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Atramedes/10N/Holy_Paladin/'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Atramedes/10N/Holy_Paladin/?page=2'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Atramedes/10N/Holy_Paladin/?page=3'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Atramedes/10N/Holy_Paladin/?page=4'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Atramedes/10N/Holy_Paladin/?page=5'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #483d8b;">'maloriak-10-n'</span>: <span style="color: black;">&#91;</span><span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Maloriak/10N/Holy_Paladin/'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Maloriak/10N/Holy_Paladin/?page=2'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Maloriak/10N/Holy_Paladin/?page=3'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Maloriak/10N/Holy_Paladin/?page=4'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Maloriak/10N/Holy_Paladin/?page=5'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #483d8b;">'nefarian-10-n'</span>: <span style="color: black;">&#91;</span><span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Nefarian/10N/Holy_Paladin/'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Nefarian/10N/Holy_Paladin/?page=2'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Nefarian/10N/Holy_Paladin/?page=3'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Nefarian/10N/Holy_Paladin/?page=4'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Blackwing_Descent/Nefarian/10N/Holy_Paladin/?page=5'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #483d8b;">'halfus-10-n'</span>: <span style="color: black;">&#91;</span><span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Halfus_Wyrmbreaker/10N/Holy_Paladin/'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Halfus_Wyrmbreaker/10N/Holy_Paladin/?page=2'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Halfus_Wyrmbreaker/10N/Holy_Paladin/?page=3'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Halfus_Wyrmbreaker/10N/Holy_Paladin/?page=4'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Halfus_Wyrmbreaker/10N/Holy_Paladin/?page=5'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #483d8b;">'valiona-10-n'</span>: <span style="color: black;">&#91;</span><span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Valiona_&amp;_Theralion/10N/Holy_Paladin/'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Valiona_&amp;_Theralion/10N/Holy_Paladin/?page=2'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Valiona_&amp;_Theralion/10N/Holy_Paladin/?page=3'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Valiona_&amp;_Theralion/10N/Holy_Paladin/?page=4'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Valiona_&amp;_Theralion/10N/Holy_Paladin/?page=5'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #483d8b;">'twilight-10-n'</span>: <span style="color: black;">&#91;</span><span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Twilight_Ascendant_Council/10N/Holy_Paladin/'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Twilight_Ascendant_Council/10N/Holy_Paladin/?page=2'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Twilight_Ascendant_Council/10N/Holy_Paladin/?page=3'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Twilight_Ascendant_Council/10N/Holy_Paladin/?page=4'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Twilight_Ascendant_Council/10N/Holy_Paladin/?page=5'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span><br />
<br />
&nbsp; &nbsp; <span style="color: #483d8b;">'chogall-10-n'</span>: <span style="color: black;">&#91;</span><span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Cho<span style="color: #000099; font-weight: bold;">\'</span>gall/10N/Holy_Paladin/'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Cho<span style="color: #000099; font-weight: bold;">\'</span>gall/10N/Holy_Paladin/?page=2'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Cho<span style="color: #000099; font-weight: bold;">\'</span>gall/10N/Holy_Paladin/?page=3'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Cho<span style="color: #000099; font-weight: bold;">\'</span>gall/10N/Holy_Paladin/?page=4'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Bastion_of_Twilight/Cho<span style="color: #000099; font-weight: bold;">\'</span>gall/10N/Holy_Paladin/?page=5'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #483d8b;">'conclave-10-n'</span>: <span style="color: black;">&#91;</span><span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Throne_of_the_4_Winds/Conclave_of_Wind/10N/Holy_Paladin/'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Throne_of_the_4_Winds/Conclave_of_Wind/10N/Holy_Paladin/?page=2'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Throne_of_the_4_Winds/Conclave_of_Wind/10N/Holy_Paladin/?page=3'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Throne_of_the_4_Winds/Conclave_of_Wind/10N/Holy_Paladin/?page=4'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Throne_of_the_4_Winds/Conclave_of_Wind/10N/Holy_Paladin/?page=5'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #483d8b;">'alakir-10-n'</span>: <span style="color: black;">&#91;</span><span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Throne_of_the_4_Winds/Al<span style="color: #000099; font-weight: bold;">\'</span>Akir/10N/Holy_Paladin/'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Throne_of_the_4_Winds/Al<span style="color: #000099; font-weight: bold;">\'</span>Akir/10N/Holy_Paladin/?page=2'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Throne_of_the_4_Winds/Al<span style="color: #000099; font-weight: bold;">\'</span>Akir/10N/Holy_Paladin/?page=3'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Throne_of_the_4_Winds/Al<span style="color: #000099; font-weight: bold;">\'</span>Akir/10N/Holy_Paladin/?page=4'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #483d8b;">'http://worldoflogs.com/rankings/players/Throne_of_the_4_Winds/Al<span style="color: #000099; font-weight: bold;">\'</span>Akir/10N/Holy_Paladin/?page=5'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <br />
<span style="color: black;">&#125;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> extract_player_pages<span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; regex &nbsp; <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;&lt;td&gt;&lt;a href='(/reports/[^']+)'&gt;([^&lt;]+)&lt;/a&gt;&lt;/td&gt;&quot;</span><br />
&nbsp; &nbsp; html &nbsp; &nbsp;<span style="color: #66cc66;">=</span> <span style="color: #dc143c;">urllib2</span>.<span style="color: black;">urlopen</span><span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span>.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; matches <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">re</span>.<span style="color: black;">findall</span><span style="color: black;">&#40;</span>regex<span style="color: #66cc66;">,</span> html<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> matches<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> extract_player_details<span style="color: black;">&#40;</span>report_url<span style="color: #66cc66;">,</span> player_name<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># First load the healing summary page</span><br />
&nbsp; &nbsp; url &nbsp; <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">'http://worldoflogs.com'</span> + report_url<br />
&nbsp; &nbsp; html &nbsp;<span style="color: #66cc66;">=</span> <span style="color: #dc143c;">urllib2</span>.<span style="color: black;">urlopen</span><span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span>.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; match <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">re</span>.<span style="color: black;">search</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;&lt;a href='(/reports/[^']+)'&gt;&quot;</span> + player_name + <span style="color: #483d8b;">&quot;&lt;/a&gt;&quot;</span><span style="color: #66cc66;">,</span> html<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># now load the players healing detail page</span><br />
&nbsp; &nbsp; url &nbsp; <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">'http://worldoflogs.com'</span> + match.<span style="color: black;">group</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; html &nbsp;<span style="color: #66cc66;">=</span> <span style="color: #dc143c;">urllib2</span>.<span style="color: black;">urlopen</span><span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span>.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> html<br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">for</span> boss <span style="color: #ff7700;font-weight:bold;">in</span> pages:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> boss<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> url <span style="color: #ff7700;font-weight:bold;">in</span> pages<span style="color: black;">&#91;</span>boss<span style="color: black;">&#93;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; reports <span style="color: #66cc66;">=</span> extract_player_pages<span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> report_details <span style="color: #ff7700;font-weight:bold;">in</span> reports:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; report_url &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">=</span> report_details<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; report_player_name <span style="color: #66cc66;">=</span> report_details<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Extracting'</span><span style="color: #66cc66;">,</span> report_player_name<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; html <span style="color: #66cc66;">=</span> extract_player_details<span style="color: black;">&#40;</span>report_url<span style="color: #66cc66;">,</span> report_player_name<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f &nbsp; &nbsp;<span style="color: #66cc66;">=</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'data/'</span> + boss + <span style="color: #483d8b;">'/'</span> + report_player_name<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'w+'</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f.<span style="color: black;">write</span><span style="color: black;">&#40;</span>html<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Done'</span></div></div>
<h3>generate-report.py</h3>
<div class="codecolorer-container python default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">glob</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span><br />
<br />
<span style="color: #808080; font-style: italic;"># Spell IDs</span><br />
HOLY_SHOCK &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">20473</span><br />
ETERNAL_GLORY &nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">=</span> <span style="color: #ff4500;">88676</span><br />
TOWER_OF_RADIANCE &nbsp;<span style="color: #66cc66;">=</span> <span style="color: #ff4500;">88852</span><br />
BLESSED_LIFE &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">89023</span><br />
PURSUIT_OF_JUSTICE <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">89024</span><br />
CRUSADER_STRIKE &nbsp; &nbsp;<span style="color: #66cc66;">=</span> <span style="color: #ff4500;">35395</span><br />
<br />
bosses <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">'alakir-10-n'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">'atramedes-10-n'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">'chimaeron-10-n'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">'chogall-10-n'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">'conclave-10-n'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">'halfus-10-n'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">'magmaw-10-n'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">'maloriak-10-n'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">'nefarian-10-n'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">'omnitron-10-n'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">'twilight-10-n'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">'valiona-10-n'</span><span style="color: #66cc66;">,</span><br />
<span style="color: black;">&#93;</span><br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> extract_holy_power<span style="color: black;">&#40;</span>html<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; regex &nbsp; <span style="color: #66cc66;">=</span> r<span style="color: #483d8b;">&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td class='name'&gt;&lt;a href='/reports/[^']+' rel='spell=(<span style="color: #000099; font-weight: bold;">\d</span>+)' class='spell'&gt;&lt;span [^&gt;]+&gt;([^&lt;]+)&lt;/span&gt;&lt;/a&gt;<span style="color: #000099; font-weight: bold;">\S</span>+<span style="color: #000099; font-weight: bold;">\n</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td&gt;(<span style="color: #000099; font-weight: bold;">\d</span>+) holy power&lt;/td&gt;&quot;</span><br />
&nbsp; &nbsp; matches <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">re</span>.<span style="color: black;">findall</span><span style="color: black;">&#40;</span>regex<span style="color: #66cc66;">,</span> html<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; results <span style="color: #66cc66;">=</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> match <span style="color: #ff7700;font-weight:bold;">in</span> matches:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#40;</span>spell_id<span style="color: #66cc66;">,</span> spell_name<span style="color: #66cc66;">,</span> count<span style="color: black;">&#41;</span> <span style="color: #66cc66;">=</span> match<br />
&nbsp; &nbsp; &nbsp; &nbsp; results<span style="color: black;">&#91;</span><span style="color: #008000;">int</span><span style="color: black;">&#40;</span>spell_id<span style="color: black;">&#41;</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>count<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> results<br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> generate_holy_power_summary<span style="color: black;">&#40;</span>boss<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; summary <span style="color: #66cc66;">=</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; files <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">glob</span>.<span style="color: #dc143c;">glob</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'data/'</span> + boss + <span style="color: #483d8b;">'/*'</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> <span style="color: #008000;">file</span> <span style="color: #ff7700;font-weight:bold;">in</span> files:<br />
&nbsp; &nbsp; &nbsp; &nbsp; html <span style="color: #66cc66;">=</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #008000;">file</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'r'</span><span style="color: black;">&#41;</span>.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; results <span style="color: #66cc66;">=</span> extract_holy_power<span style="color: black;">&#40;</span>html<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> spell_id <span style="color: #ff7700;font-weight:bold;">in</span> results:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; count <span style="color: #66cc66;">=</span> results<span style="color: black;">&#91;</span>spell_id<span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> summary.<span style="color: black;">has_key</span><span style="color: black;">&#40;</span>spell_id<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; summary<span style="color: black;">&#91;</span>spell_id<span style="color: black;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; summary<span style="color: black;">&#91;</span>spell_id<span style="color: black;">&#93;</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span>count<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> summary<br />
<br />
<br />
report_on <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><br />
&nbsp; &nbsp; <span style="color: black;">&#123;</span><span style="color: #483d8b;">'spell_name'</span>: <span style="color: #483d8b;">'HOLY_SHOCK'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'spell_id'</span>: HOLY_SHOCK<span style="color: black;">&#125;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: black;">&#123;</span><span style="color: #483d8b;">'spell_name'</span>: <span style="color: #483d8b;">'ETERNAL_GLORY'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'spell_id'</span>: ETERNAL_GLORY<span style="color: black;">&#125;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: black;">&#123;</span><span style="color: #483d8b;">'spell_name'</span>: <span style="color: #483d8b;">'TOWER_OF_RADIANCE'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'spell_id'</span>: TOWER_OF_RADIANCE<span style="color: black;">&#125;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: black;">&#123;</span><span style="color: #483d8b;">'spell_name'</span>: <span style="color: #483d8b;">'BLESSED_LIFE'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'spell_id'</span>: BLESSED_LIFE<span style="color: black;">&#125;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: black;">&#123;</span><span style="color: #483d8b;">'spell_name'</span>: <span style="color: #483d8b;">'PURSUIT_OF_JUSTICE'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'spell_id'</span>: PURSUIT_OF_JUSTICE<span style="color: black;">&#125;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: black;">&#123;</span><span style="color: #483d8b;">'spell_name'</span>: <span style="color: #483d8b;">'CRUSADER_STRIKE'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'spell_id'</span>: CRUSADER_STRIKE<span style="color: black;">&#125;</span><span style="color: #66cc66;">,</span><br />
<span style="color: black;">&#93;</span><br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">for</span> boss <span style="color: #ff7700;font-weight:bold;">in</span> bosses:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> boss<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; summary <span style="color: #66cc66;">=</span> generate_holy_power_summary<span style="color: black;">&#40;</span>boss<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> summary.<span style="color: black;">has_key</span><span style="color: black;">&#40;</span>HOLY_SHOCK<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Skipping, no data'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">continue</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; total_count <span style="color: #66cc66;">=</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>summary<span style="color: black;">&#91;</span>HOLY_SHOCK<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Total reports'</span><span style="color: #66cc66;">,</span> total_count<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> total_count <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">0</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">continue</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> report_details <span style="color: #ff7700;font-weight:bold;">in</span> report_on:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> summary.<span style="color: black;">has_key</span><span style="color: black;">&#40;</span>report_details<span style="color: black;">&#91;</span><span style="color: #483d8b;">'spell_id'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> report_details<span style="color: black;">&#91;</span><span style="color: #483d8b;">'spell_name'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">continue</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; spell_count &nbsp; <span style="color: #66cc66;">=</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>summary<span style="color: black;">&#91;</span>report_details<span style="color: black;">&#91;</span><span style="color: #483d8b;">'spell_id'</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; total_average <span style="color: #66cc66;">=</span> <span style="color: #008000;">sum</span><span style="color: black;">&#40;</span>summary<span style="color: black;">&#91;</span>report_details<span style="color: black;">&#91;</span><span style="color: #483d8b;">'spell_id'</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span> / total_count<br />
&nbsp; &nbsp; &nbsp; &nbsp; spell_average <span style="color: #66cc66;">=</span> <span style="color: #008000;">sum</span><span style="color: black;">&#40;</span>summary<span style="color: black;">&#91;</span>report_details<span style="color: black;">&#91;</span><span style="color: #483d8b;">'spell_id'</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span> / spell_count<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> report_details<span style="color: black;">&#91;</span><span style="color: #483d8b;">'spell_name'</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> total_average</div></div>
]]></content:encoded>
			<wfw:commentRss>http://project-2501.net/index.php/2011/04/sources-of-holy-power-generation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Text Twist Bot</title>
		<link>http://project-2501.net/index.php/2011/03/text-twist-bot/</link>
		<comments>http://project-2501.net/index.php/2011/03/text-twist-bot/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 06:29:28 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://project-2501.net/?p=254</guid>
		<description><![CDATA[Yesterday I watched someone play a bit of the browser based game Text Twist. Upon trying myself I found that I was awful, so I did what any programmer would do; cheated. Results of a few hours hacking: Features: Scan for game area and crash and burn if it&#8217;s not detected (Crudely) detect what letters [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I watched <a href="http://day9.tv">someone</a> play a bit of the browser based game <a href="http://games.yahoo.com/game/text-twist">Text Twist</a>.  Upon trying myself I found that I was awful, so I did what any programmer would do;  cheated.</p>
<p>Results of a few hours hacking:<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/E3HANgwLPf0?hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/E3HANgwLPf0?hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<h3>Features:</h3>
<ul>
<li>Scan for game area and crash and burn if it&#8217;s not detected</li>
<li>(Crudely) detect what letters are shown</li>
<li>Find all 3, 4, 5 and 6 letter combinations, and then throw them against a basic word list + simple anagram lookup table</li>
<li>Send key presses to the window to (try and) solve all possible words (and overwrite any work you were doing when the window loses focus)</li>
<li>Reliably gets all but one or two words for each puzzle, leaving you plenty of time to go crazy trying to finish it </li>
</ul>
<p>Horrible source for the curious  (it should at least help anyone wondering how to send key presses, or capture the current screen in python)</p>
<h3>TextTwistBot.py</h3>
<div class="codecolorer-container python default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;"># Text Twist Bot</span><br />
<span style="color: #808080; font-style: italic;"># http://games.yahoo.com/game/text-twist</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">import</span> win32com.<span style="color: black;">client</span> <span style="color: #ff7700;font-weight:bold;">as</span> comclt<br />
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">time</span> <span style="color: #ff7700;font-weight:bold;">import</span> sleep<br />
<br />
<span style="color: #ff7700;font-weight:bold;">from</span> PIL <span style="color: #ff7700;font-weight:bold;">import</span> ImageGrab<br />
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">itertools</span> <span style="color: #ff7700;font-weight:bold;">import</span> combinations<br />
<br />
<span style="color: #ff7700;font-weight:bold;">from</span> Board <span style="color: #ff7700;font-weight:bold;">import</span> Board<br />
<span style="color: #ff7700;font-weight:bold;">from</span> Pixels <span style="color: #ff7700;font-weight:bold;">import</span> Pixels<br />
<span style="color: #ff7700;font-weight:bold;">from</span> Anagrams <span style="color: #ff7700;font-weight:bold;">import</span> Anagrams<br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> sorted_unique_character_groups<span style="color: black;">&#40;</span>letters<span style="color: #66cc66;">,</span> length<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; c <span style="color: #66cc66;">=</span> <span style="color: #008000;">list</span><span style="color: black;">&#40;</span>combinations<span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>letters<span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> length<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; c <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: #483d8b;">''</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>e<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> e <span style="color: #ff7700;font-weight:bold;">in</span> c<span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; c <span style="color: #66cc66;">=</span> <span style="color: #008000;">list</span><span style="color: black;">&#40;</span><span style="color: #008000;">set</span><span style="color: black;">&#40;</span>c<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; c.<span style="color: black;">sort</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> c<br />
<br />
<br />
anagrams <span style="color: #66cc66;">=</span> Anagrams<span style="color: black;">&#40;</span><span style="color: #483d8b;">'ispell-enwl-3.1.20/english.all'</span><span style="color: black;">&#41;</span><br />
pixels &nbsp; <span style="color: #66cc66;">=</span> Pixels<span style="color: black;">&#40;</span>ImageGrab.<span style="color: black;">grab</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
board &nbsp; &nbsp;<span style="color: #66cc66;">=</span> Board<span style="color: black;">&#40;</span>pixels<span style="color: black;">&#41;</span><br />
letters &nbsp;<span style="color: #66cc66;">=</span> board.<span style="color: black;">get_letters</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #808080; font-style: italic;"># letters = ['d', 'e', 'l', 'a', 'p', 'd']</span><br />
possible_answers <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><br />
lengths <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: #ff4500;">3</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">4</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">5</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">6</span><span style="color: black;">&#93;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">for</span> length <span style="color: #ff7700;font-weight:bold;">in</span> lengths:<br />
&nbsp; &nbsp; words <span style="color: #66cc66;">=</span> sorted_unique_character_groups<span style="color: black;">&#40;</span>letters<span style="color: #66cc66;">,</span> length<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> word <span style="color: #ff7700;font-weight:bold;">in</span> words:<br />
&nbsp; &nbsp; &nbsp; &nbsp; possible_answers.<span style="color: black;">extend</span><span style="color: black;">&#40;</span>anagrams.<span style="color: black;">find</span><span style="color: black;">&#40;</span>word<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
<br />
possible_answers <span style="color: #66cc66;">=</span> <span style="color: #008000;">list</span><span style="color: black;">&#40;</span><span style="color: #008000;">set</span><span style="color: black;">&#40;</span>possible_answers<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">print</span> possible_answers<br />
<br />
<br />
wsh <span style="color: #66cc66;">=</span> comclt.<span style="color: black;">Dispatch</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;WScript.Shell&quot;</span><span style="color: black;">&#41;</span><br />
wsh.<span style="color: black;">AppActivate</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Windows Internet Explorer&quot;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">for</span> word <span style="color: #ff7700;font-weight:bold;">in</span> possible_answers:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> letter <span style="color: #ff7700;font-weight:bold;">in</span> word:<br />
&nbsp; &nbsp; &nbsp; &nbsp; wsh.<span style="color: black;">SendKeys</span><span style="color: black;">&#40;</span>letter<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; sleep<span style="color: black;">&#40;</span><span style="color: #ff4500;">0.05</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; wsh.<span style="color: black;">SendKeys</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Done'</span></div></div>
<h3>Pixels.py</h3>
<div class="codecolorer-container python default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">class</span> Pixels:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> img<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">img</span> <span style="color: #66cc66;">=</span> img<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">data</span> <span style="color: #66cc66;">=</span> <span style="color: #008000;">list</span><span style="color: black;">&#40;</span>img.<span style="color: black;">getdata</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">width</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">height</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">=</span> img.<span style="color: black;">size</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> at<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> x<span style="color: #66cc66;">,</span> y<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; offset <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span>y * <span style="color: #008000;">self</span>.<span style="color: black;">width</span><span style="color: black;">&#41;</span> + x<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.<span style="color: black;">data</span><span style="color: black;">&#91;</span>offset<span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> grab_area<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> x1<span style="color: #66cc66;">,</span> y1<span style="color: #66cc66;">,</span> x2<span style="color: #66cc66;">,</span> y2<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; raw <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> y <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>y1<span style="color: #66cc66;">,</span> y2<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>x1<span style="color: #66cc66;">,</span> x2<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raw.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">at</span><span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span> y<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> raw</div></div>
<h3>Anagrams.py</h3>
<div class="codecolorer-container python default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">class</span> Anagrams:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> word_list<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>._load_word_list<span style="color: black;">&#40;</span>word_list<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> _load_word_list<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> filename<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Loading word list...'</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; lines <span style="color: #66cc66;">=</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>filename<span style="color: black;">&#41;</span>.<span style="color: black;">readlines</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; words <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>line.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">lower</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> lines<span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">lookup</span> <span style="color: #66cc66;">=</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> word <span style="color: #ff7700;font-weight:bold;">in</span> words:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; key <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>._sort_letters<span style="color: black;">&#40;</span>word<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> key <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">self</span>.<span style="color: black;">lookup</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">lookup</span><span style="color: black;">&#91;</span>key<span style="color: black;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> word <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">self</span>.<span style="color: black;">lookup</span><span style="color: black;">&#91;</span>key<span style="color: black;">&#93;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">lookup</span><span style="color: black;">&#91;</span>key<span style="color: black;">&#93;</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span>word<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Done'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> _sort_letters<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> word<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; letters <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>l <span style="color: #ff7700;font-weight:bold;">for</span> l <span style="color: #ff7700;font-weight:bold;">in</span> word<span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; letters.<span style="color: black;">sort</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">''</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>letters<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> find<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> word<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; key <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>._sort_letters<span style="color: black;">&#40;</span>word<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> key <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">self</span>.<span style="color: black;">lookup</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; results <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">lookup</span><span style="color: black;">&#91;</span>key<span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">#if word in results:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># &nbsp; &nbsp;results.remove(word)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> results</div></div>
<h3>Board.py (be afraid)</h3>
<div class="codecolorer-container python default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">class</span> Board:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> pixels<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># Color of the outside border, used to find the edges of the game</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">border_green</span> <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span><span style="color: #ff4500;">204</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">255</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># Bounding boxes for each letter (including the circle and background)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># Each letter is 45x45</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># I've chopped off 8pixels from each side to remove any background</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">letter_coords</span> <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">161</span>+<span style="color: #ff4500;">8</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">178</span>+<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: black;">&#40;</span><span style="color: #ff4500;">161</span>+<span style="color: #ff4500;">45</span>-<span style="color: #ff4500;">8</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">178</span>+<span style="color: #ff4500;">45</span>-<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">215</span>+<span style="color: #ff4500;">8</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">178</span>+<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: black;">&#40;</span><span style="color: #ff4500;">215</span>+<span style="color: #ff4500;">45</span>-<span style="color: #ff4500;">8</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">178</span>+<span style="color: #ff4500;">45</span>-<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">269</span>+<span style="color: #ff4500;">8</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">178</span>+<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: black;">&#40;</span><span style="color: #ff4500;">269</span>+<span style="color: #ff4500;">45</span>-<span style="color: #ff4500;">8</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">178</span>+<span style="color: #ff4500;">45</span>-<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">323</span>+<span style="color: #ff4500;">8</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">178</span>+<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: black;">&#40;</span><span style="color: #ff4500;">323</span>+<span style="color: #ff4500;">45</span>-<span style="color: #ff4500;">8</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">178</span>+<span style="color: #ff4500;">45</span>-<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">377</span>+<span style="color: #ff4500;">8</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">178</span>+<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: black;">&#40;</span><span style="color: #ff4500;">377</span>+<span style="color: #ff4500;">45</span>-<span style="color: #ff4500;">8</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">178</span>+<span style="color: #ff4500;">45</span>-<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">431</span>+<span style="color: #ff4500;">8</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">178</span>+<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: black;">&#40;</span><span style="color: #ff4500;">431</span>+<span style="color: #ff4500;">45</span>-<span style="color: #ff4500;">8</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">178</span>+<span style="color: #ff4500;">45</span>-<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># Pixel data for each letter</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">letter_data</span> <span style="color: #66cc66;">=</span> <span style="color: black;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># Snipped 300Kb of data</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># Yikes, didn't realize it was so big</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># If anyone actually cares for the letter data, you </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># can reconstruct it from error messages.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># Format is:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># 'a': [(r, g, b), (r, g, b)....],</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># 'b': [(r, g, b), (r, g, b)....],</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">pixels</span> <span style="color: #66cc66;">=</span> pixels<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>._get_edges<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> _get_edges<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; horz <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>._find_pixels<span style="color: black;">&#40;</span><span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">pixels</span>.<span style="color: black;">width</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> &nbsp; &nbsp; &nbsp;<span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">pixels</span>.<span style="color: black;">height</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">100</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">border_green</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; vert <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>._find_pixels<span style="color: black;">&#40;</span><span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">pixels</span>.<span style="color: black;">width</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">100</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">pixels</span>.<span style="color: black;">height</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> &nbsp; &nbsp; &nbsp;<span style="color: #008000;">self</span>.<span style="color: black;">border_green</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; left &nbsp; <span style="color: #66cc66;">=</span> <span style="color: #008000;">min</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>x <span style="color: #ff7700;font-weight:bold;">for</span> <span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span>y<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">in</span> horz<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; right &nbsp;<span style="color: #66cc66;">=</span> <span style="color: #008000;">max</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>x <span style="color: #ff7700;font-weight:bold;">for</span> <span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span>y<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">in</span> horz<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; top &nbsp; &nbsp;<span style="color: #66cc66;">=</span> <span style="color: #008000;">min</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>y <span style="color: #ff7700;font-weight:bold;">for</span> <span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span>y<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">in</span> vert<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; bottom <span style="color: #66cc66;">=</span> <span style="color: #008000;">max</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>y <span style="color: #ff7700;font-weight:bold;">for</span> <span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span>y<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">in</span> vert<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">left</span> &nbsp; <span style="color: #66cc66;">=</span> left<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">right</span> &nbsp;<span style="color: #66cc66;">=</span> right<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">top</span> &nbsp; &nbsp;<span style="color: #66cc66;">=</span> top<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">bottom</span> <span style="color: #66cc66;">=</span> bottom<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> _find_pixels<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> x_range<span style="color: #66cc66;">,</span> y_range<span style="color: #66cc66;">,</span> color<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; edges <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> y <span style="color: #ff7700;font-weight:bold;">in</span> y_range:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> x_range:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">pixels</span>.<span style="color: black;">at</span><span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span> y<span style="color: black;">&#41;</span> <span style="color: #66cc66;">==</span> color:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; edges.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span> y<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> edges<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> get_letters<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; letters <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> coords <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">self</span>.<span style="color: black;">letter_coords</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x1 <span style="color: #66cc66;">=</span> coords<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> + <span style="color: #008000;">self</span>.<span style="color: black;">left</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x2 <span style="color: #66cc66;">=</span> coords<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> + <span style="color: #008000;">self</span>.<span style="color: black;">left</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y1 <span style="color: #66cc66;">=</span> coords<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> + <span style="color: #008000;">self</span>.<span style="color: black;">top</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y2 <span style="color: #66cc66;">=</span> coords<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> + <span style="color: #008000;">self</span>.<span style="color: black;">top</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">pixels</span>.<span style="color: black;">grab_area</span><span style="color: black;">&#40;</span>x1<span style="color: #66cc66;">,</span> y1<span style="color: #66cc66;">,</span> x2<span style="color: #66cc66;">,</span> y2<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># print 'Got data for pos', coords</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; found <span style="color: #66cc66;">=</span> <span style="color: #008000;">False</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> key <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">self</span>.<span style="color: black;">letter_data</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">letter_data</span><span style="color: black;">&#91;</span>key<span style="color: black;">&#93;</span> <span style="color: #66cc66;">==</span> data:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; letters.<span style="color: black;">append</span><span style="color: black;">&#40;</span>key<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; found <span style="color: #66cc66;">=</span> <span style="color: #008000;">True</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">break</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> found <span style="color: #66cc66;">==</span> <span style="color: #008000;">False</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\'</span>?<span style="color: #000099; font-weight: bold;">\'</span>:'</span><span style="color: #66cc66;">,</span> data<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">','</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> letters</div></div>
]]></content:encoded>
			<wfw:commentRss>http://project-2501.net/index.php/2011/03/text-twist-bot/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tyrande&#8217;s Doll and Power Auras</title>
		<link>http://project-2501.net/index.php/2011/01/tyrandes-doll-and-power-auras/</link>
		<comments>http://project-2501.net/index.php/2011/01/tyrandes-doll-and-power-auras/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 11:15:52 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[games]]></category>

		<guid isPermaLink="false">http://project-2501.net/?p=245</guid>
		<description><![CDATA[Quickstart guide for setting up a reminder for Tyrande&#8217;s Favorite Doll using Power Auras. Create the first effect to track the mana gained buff. There is no need to adjust any of the aura visuals here as you won&#8217;t see this effect. The effect should be activated by Buff with the name Recaptured Mana, and [...]]]></description>
			<content:encoded><![CDATA[<p>Quickstart guide for setting up a reminder for <a href="http://www.wowhead.com/item=64645">Tyrande&#8217;s Favorite Doll</a> using Power Auras.</p>
<ol>
<li>Create the first effect to track the mana gained buff.  There is no need to adjust any of the aura visuals here as you won&#8217;t see this effect.</li>
<li>The effect should be activated by <strong>Buff</strong> with the name <strong>Recaptured Mana</strong>, and the tooltip should contain the string <strong>4200</strong></li>
<li>Close the effect window and disable the newly created effect (shift + click).  Also made a note of its ID by mousing over it.</li>
<li>Create a second effect.  This will track the cooldown on the trinket (1min) as well as reference the first effect.</li>
<li>Chose <strong>Action Usable</strong> and enter the name <strong>Tyrande&#8217;s Favorite Doll</strong> and finally enter the ID of the first effect into the next textbox (in the example the ID is 9.</li>
<li>Customize the visuals to suite, optionally add a sound effect, and you&#8217;re done.</li>
</ol>
<p><a href="http://project-2501.net/gallery/wow/tyrande_doll_powerauras_1.jpg"><img src="http://project-2501.net/gallery/.thumbs/gallery_wow_tyrande_doll_powerauras_1.jpg.jpeg"><br />Example of Effect 1<br />
</a></p>
<p><a href="http://project-2501.net/gallery/wow/tyrande_doll_powerauras_2.jpg"><img src="http://project-2501.net/gallery/.thumbs/gallery_wow_tyrande_doll_powerauras_2.jpg.jpeg"><br />Example of Effect 2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://project-2501.net/index.php/2011/01/tyrandes-doll-and-power-auras/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intial Divine Guardian Tests</title>
		<link>http://project-2501.net/index.php/2010/02/intial-divine-guardian-tests/</link>
		<comments>http://project-2501.net/index.php/2010/02/intial-divine-guardian-tests/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 08:51:50 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://project-2501.net/?p=233</guid>
		<description><![CDATA[I been wanting to look in the effectiveness of the 20% raid wall granted by Divine Guardian (4th tier talent in a Paladin&#8217;s protection tree). To do this I wrote a very simple Python program to read the combat log, detect with DG goes up and then record all the damage that was taken while [...]]]></description>
			<content:encoded><![CDATA[<p>I been wanting to look in the effectiveness of the 20% raid wall granted by Divine Guardian (4th tier talent in a Paladin&#8217;s protection tree).  To do this I wrote a very simple Python program to read the combat log, detect with DG goes up and then record all the damage that was taken while it was present on a unit, and work out how much was mitigated.  Of course, as the script was hacked up, it has all sorts of limitations:</p>
<ul>
<li>Ignores Divine Sacrifice</li>
<li>Ignores any other mitigation effects (Talents / Sanc / Inspiration / etc)</li>
<li>Ignores overkills</li>
<li>Undefined behavior when used by two Paladins</li>
</ul>
<p>Below is the results for a two nights in ICC 25, while I&#8217;m sure it&#8217;s not 100% it should be a reasonable ballpark figure.</p>
<p><!-- Horrible CCS hacks to add padding back to my poor tables --></p>
<style>
.mytable_233 td, .mytable_233 th
{
padding: 0.3em;
}
</style>
<table class='mytable_233' cellspacing="0" cellpadding="2" cols="1" border="1" style="border: 1px solid #ccc; border-collapse: collapse;">
<tr>
<th>Fight</th>
<th>Damage Mitigated via DG</th>
</tr>
<tr>
<td>Gaseous Blight</td>
<td>37057</td>
</tr>
<tr>
<td>Gaseous Blight</td>
<td>32664</td>
</tr>
<tr>
<td>Ooze Explosion/Melee</td>
<td>39923</td>
</tr>
<tr>
<td>Trash before Blood Queen</td>
<td>21145</td>
</tr>
<tr>
<td>Blood Queen (Fear/Bloodbolt)</td>
<td>42212</td>
</tr>
<tr>
<td>Blood Queen (Fear/Bloodbolt)</td>
<td>54410</td>
</tr>
<tr>
<td>Blood Queen (Fear/Bloodbolt)</td>
<td>17679</td>
</tr>
<tr>
<td>Blood Queen (Fear/Bloodbolt)</td>
<td>29315</td>
</tr>
<tr>
<td>Blood Queen (Fear/Bloodbolt)</td>
<td>32029</td>
</tr>
<tr>
<td>Blood Queen (Fear/Bloodbolt)</td>
<td>51281</td>
</tr>
<tr>
<td>Blood Queen (Fear/Bloodbolt)</td>
<td>34494</td>
</tr>
<tr>
<td>Blood Queen (Fear/Bloodbolt)</td>
<td>14201</td>
</tr>
<tr>
<td>Blood Queen (Fear/Bloodbolt)</td>
<td>41417</td>
</tr>
<tr>
<td>Blood Queen (Fear/Bloodbolt)</td>
<td>18817</td>
</tr>
<tr>
<td>Blood Queen (Fear/Bloodbolt)</td>
<td>35641</td>
</tr>
<tr>
<td>Blood Queen (Fear/Bloodbolt)</td>
<td>49571</td>
</tr>
<tr>
<td>Blood Queen (Fear/Bloodbolt)</td>
<td>26427</td>
</tr>
<tr>
<td>Average</td>
<td>34017</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://project-2501.net/index.php/2010/02/intial-divine-guardian-tests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How win friends and pad meters</title>
		<link>http://project-2501.net/index.php/2009/12/how-win-friends-and-pad-meters/</link>
		<comments>http://project-2501.net/index.php/2009/12/how-win-friends-and-pad-meters/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 15:37:30 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[games]]></category>

		<guid isPermaLink="false">http://project-2501.net/?p=222</guid>
		<description><![CDATA[Introduction to Holy Paladin Healing in 3.2/3.3 Spec Base Holy tree looks something like this talent tree Points in Imp Wis and Bless Hands can be moved about if you&#8217;d prefer Then either go 17 points into Prot for Divine Guardian, or 20 points into Ret for Crit + Run Speed Glyphs Glyph of Holy [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Introduction to Holy Paladin Healing in 3.2/3.3</strong></p>
<h3>Spec</h3>
<ul>
<li>
        Base Holy tree looks something like this <a href="http://www.wowhead.com/?talent#sxAzxMosVu0tgd">talent tree</a></p>
<ul>
<li>Points in Imp Wis and Bless Hands can be moved about if you&#8217;d prefer</li>
</ul>
</li>
<li>
        Then either go 17 points into Prot for Divine Guardian, or 20 points into Ret for Crit + Run Speed
    </li>
</ul>
<h3>Glyphs</h3>
<ul>
<li>Glyph of Holy Light</li>
<li>Glyph of Wisdom</li>
<li>Glyph of Beacon of Light  (My preference)</li>
</ul>
<h3>Addons</h3>
<ul>
<li>Grid + Clique / Healbot / Fail Bindings + Blizzard frames.  Just make sure you can see every-ones health, and debuffs (preferable with time + stacks)</li>
<li><a href="http://wow.curse.com/downloads/wow-addons/details/clcbpt.aspx">Paladin Beacon of Light, Sacred Shield Tracker</a></li>
<li><a href="http://wow.curse.com/downloads/wow-addons/details/jaraxxus_debuffhealingmonitor.aspx">Jaraxxus_DebuffHealingMonitor</a></li>
</ul>
<h3>Gear</h3>
<ul>
<li>Int > *</li>
<li>Use a Insightful Earthsiege Diamond Meta. Always</li>
<li>Socket +20 Int in everything, use a single Nightmare Tear (+10 all stats) to activate the meta</li>
<li>Haste is a great throughput stat, 500-650 is a nice area to aim for</li>
<li>Don&#8217;t worry too much about your crit / mp5.  Keep them balance, it will come naturally on your gear</li>
</ul>
<h3>Healing</h3>
<ul>
<li>Assuming a non trivial fight (else do what ever the hell you want, it&#8217;s not important)</li>
<li>Your job will be to keep the tanks up, and help out on the raid when safe</li>
<li>Make sure you can see debuffs.  If you use Grid either add the debuffs for each encounter  yourself, or install a Grid addon that does it for you</li>
<li>
        Pick the player that will take most damage during the fight, this will normally be the MT</p>
<ul>
<li>Put Beacon on them.  Keep it up.  Don&#8217;t let it drop.</li>
<li>Beacon has a 60yard range, use this to your advantage (e.g. If phase 2 of beasts you can spread out more than other healers and still heal both tanks)</li>
<li>
                Note:  With Multiple Paladins, if may be wise to split the Beacons depending on the fight. For example:</p>
<ul>
<li>Beasts doesn&#8217;t matter, you&#8217;ll be healing the two tanks almost all the time (phase 1 + 2)</li>
<li>Jaraxxus split between OT and MT (the OT will take similar amounts of damage, that can be more spikey [Asmuing your interupters don't suck])</li>
<li>Twins split, raid healing is very high compared to tank damage</li>
</ul>
</li>
</ul>
</li>
<li>
        Keep JotP up.  Always.  It&#8217;s one GCD every 60s for 15% Haste.</p>
<ul>
<li>Judge Light to pad meters, judge Wisdom to keep hunters from QQ&#8217;ing</li>
<li>Don&#8217;t wait till 5s before refreshing the buff, do it when the tank isn&#8217;t taking much damage and the raid is nice and high</li>
<li>Judge = Melee attack = Change of Seal of Wisdom proc</li>
</ul>
</li>
<li>If you&#8217;re Holy/Prot; keep SS up, like judgements, refresh early when it&#8217;s safe</li>
<li>Spam HL on Target taking damage that you haven&#8217;t placed Beacon on (OT, or Raid members)</li>
<li>Be Awesome</li>
</ul>
<h3>Dealing with Mana</h3>
<ul>
<li>FoL isn&#8217;t useless, use it to save mana when you know the there is little damage (First 2-3 impales on beasts).  Just don&#8217;t let anyone die.</li>
<li>Time Divine Plea with natural breaks in the fight (phase change, or little damage) don&#8217;t leave it till you&#8217;re out of mana</li>
<li>Use Divine Illumination early so you can use it several times during en encounter</li>
<li>
        Abuse Seal of Wisdom when it&#8217;s safe. e.g.</p>
<ul>
<li>Icehowl, after a stun (make sure you leave melee range before the stun wears off to avoid the knock back)</li>
<li>Jarraxus when no adds are up (you need to pay very close attention to what&#8217;s going on)</li>
<li>Twins, when there aren&#8217;t too many orbs about</li>
<li>Anub&#8217;Arak, on phase change whack the Scarabs and even Anub himself in between Holy Lights</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://project-2501.net/index.php/2009/12/how-win-friends-and-pad-meters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WoW Combat Log Splitter</title>
		<link>http://project-2501.net/index.php/2009/09/wow-combat-log-splitter/</link>
		<comments>http://project-2501.net/index.php/2009/09/wow-combat-log-splitter/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 07:55:11 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://project-2501.net/?p=199</guid>
		<description><![CDATA[Something quick I whipped up last night, after noticing that after my log file was > 4GB the WorldOfLogs parser will no longer do real time logging. Edit: Turns out that the WoW client itself stopped logging, even though the log file was a little over expected limit (4,334,806,196 bytes) Note: The code is just [...]]]></description>
			<content:encoded><![CDATA[<p>Something quick I whipped up last night, after noticing that after my log file was > 4GB the <a href="http://www.worldoflogs.com/">WorldOfLogs</a> parser will no longer do real time logging.</p>
<p><strong>Edit:</strong> Turns out that the WoW client itself stopped logging, even though the log file was a little over expected limit (4,334,806,196 bytes)</p>
<p><em>Note: The code is just a one off script; things are hard coded, and it&#8217;s pretty slow (100MB a minute)</em></p>
<div class="codecolorer-container python default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">datetime</span><br />
<br />
GAP_SIZE_IN_SECONDS <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">60</span> * <span style="color: #ff4500;">60</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">class</span> CombatLog:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> filename<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">filename</span> <span style="color: #66cc66;">=</span> filename<br />
<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> process<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; last_timestamp <span style="color: #66cc66;">=</span> <span style="color: #008000;">None</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; line_count <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; split_log <span style="color: #66cc66;">=</span> <span style="color: #008000;">None</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">filename</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; line_count +<span style="color: #66cc66;">=</span> <span style="color: #ff4500;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; timestamp <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">parse_timestamp</span><span style="color: black;">&#40;</span>line<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> timestamp <span style="color: #66cc66;">==</span> <span style="color: #008000;">None</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Unparsable data on line %d&quot;</span> % <span style="color: black;">&#40;</span>line_count<span style="color: #66cc66;">,</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #dc143c;">repr</span><span style="color: black;">&#40;</span>line<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">continue</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># To handle the first line</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> last_timestamp <span style="color: #66cc66;">==</span> <span style="color: #008000;">None</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last_timestamp <span style="color: #66cc66;">=</span> timestamp<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; split_log <span style="color: #66cc66;">=</span> Appender<span style="color: black;">&#40;</span>timestamp<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Starting new file&quot;</span><span style="color: #66cc66;">,</span> split_log.<span style="color: black;">filename</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; difference <span style="color: #66cc66;">=</span> timestamp - last_timestamp<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> difference.<span style="color: black;">seconds</span> <span style="color: #66cc66;">&gt;</span> GAP_SIZE_IN_SECONDS:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># Close the old log file, and start a new one</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; split_log.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; split_log <span style="color: #66cc66;">=</span> Appender<span style="color: black;">&#40;</span>timestamp<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Starting new file&quot;</span><span style="color: #66cc66;">,</span> split_log.<span style="color: black;">filename</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; split_log.<span style="color: black;">append</span><span style="color: black;">&#40;</span>line<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last_timestamp <span style="color: #66cc66;">=</span> timestamp<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> line_count % <span style="color: #ff4500;">100000</span> <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">0</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Processed %d lines&quot;</span> % <span style="color: black;">&#40;</span>line_count<span style="color: #66cc66;">,</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
<br />
<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> parse_timestamp<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> line<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># m/d hh:mm:ss.msec</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># 6/6 21:04:29.435</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; regex <span style="color: #66cc66;">=</span> r<span style="color: #483d8b;">&quot;^(<span style="color: #000099; font-weight: bold;">\d</span>+)/(<span style="color: #000099; font-weight: bold;">\d</span>+) (<span style="color: #000099; font-weight: bold;">\d</span>+):(<span style="color: #000099; font-weight: bold;">\d</span>+):(<span style="color: #000099; font-weight: bold;">\d</span>+).(<span style="color: #000099; font-weight: bold;">\d</span>+) &quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; matches <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">re</span>.<span style="color: black;">search</span><span style="color: black;">&#40;</span>regex<span style="color: #66cc66;">,</span> line<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> matches <span style="color: #66cc66;">==</span> <span style="color: #008000;">None</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">None</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; timestamp <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">datetime</span>.<span style="color: #dc143c;">datetime</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2009</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>matches.<span style="color: black;">group</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>matches.<span style="color: black;">group</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>matches.<span style="color: black;">group</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>matches.<span style="color: black;">group</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>matches.<span style="color: black;">group</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>matches.<span style="color: black;">group</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>*<span style="color: #ff4500;">1000</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> timestamp<br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">class</span> Appender:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> timestamp<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">filename</span> <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;WoWCombatLog_&quot;</span> + timestamp.<span style="color: black;">strftime</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%Y%m%d_%H%M%S&quot;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;.txt&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">handle</span> <span style="color: #66cc66;">=</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">filename</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'a'</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> append<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> line<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">handle</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span>line<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> close<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">handle</span>.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<br />
splitter <span style="color: #66cc66;">=</span> CombatLog<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;../WoWCombatLog.20090904.txt&quot;</span><span style="color: black;">&#41;</span><br />
splitter.<span style="color: black;">process</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Done&quot;</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://project-2501.net/index.php/2009/09/wow-combat-log-splitter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk (Requested URI is rejected)
Database Caching 4/34 queries in 0.014 seconds using disk
Object Caching 902/968 objects using disk

Served from: project-2501.net @ 2012-05-20 07:49:46 -->
