<?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>Tue, 08 Nov 2011 10:38:06 +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>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>1</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>
		<item>
		<title>that just happened</title>
		<link>http://project-2501.net/index.php/2009/07/that-just-happened/</link>
		<comments>http://project-2501.net/index.php/2009/07/that-just-happened/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 10:44:41 +0000</pubDate>
		<dc:creator>Matthew</dc:creator>
				<category><![CDATA[games]]></category>

		<guid isPermaLink="false">http://project-2501.net/?p=187</guid>
		<description><![CDATA[That Just Happened is a simple bu very useful WoW addon that allows you report when certain events happen, like Guardian Spirit on someone, or when a Polymorph breaks. Below are the rules I currently use: event;source;target;spellname;affiliation;channel;spam SPELL_AURA_APPLIED;;;Hand of Salvation;;RAID;Hand of Salvation on *target (*source) SPELL_AURA_APPLIED;;;Hand of Sacrifice;;RW;Hand of Sacrifice on *target (*source) SPELL_AURA_APPLIED;;;Guardian Spirit;;RW;Guardian [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wow.curse.com/downloads/details/12715/">That Just Happened</a> is a simple bu very useful WoW addon that allows you report when certain events happen, like Guardian Spirit on someone, or when a Polymorph breaks.</p>
<p>Below are the rules I currently use:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">event;source;target;spellname;affiliation;channel;spam<br />
SPELL_AURA_APPLIED;;;Hand of Salvation;;RAID;Hand of Salvation on *target (*source)<br />
SPELL_AURA_APPLIED;;;Hand of Sacrifice;;RW;Hand of Sacrifice on *target (*source)<br />
SPELL_AURA_APPLIED;;;Guardian Spirit;;RW;Guardian Spirit on *target (*source)<br />
SPELL_AURA_APPLIED;;;Shield Wall;;RW;Shield Wall on *source<br />
SPELL_AURA_APPLIED;;;Divine Protection;;RW;Divine Protection on *source<br />
SPELL_INTERRUPT;;;;;RAID;*source interrupted *target<br />
SPELL_AURA_APPLIED;;;Pain Suppression;;RW;Pain Suppression on *target (*source)<br />
SPELL_CAST_SUCCESS;;;Divine Sacrifice;;RW;Divine Sacrifice (*source)<br />
SPELL_AURA_APPLIED;Soran;;Holy Mending;;SELF;<br />
SPELL_AURA_APPLIED;;;Hand of Protection;;RW;Hand of Protection on *target (*source)</div></div>
<p><em>(We&#8217;ve not had a DK tank for a long time, so no CDs listed for them)</em></p>
<p>Maintankadin has a great <a href="http://maintankadin.failsafedesign.com/viewtopic.php?f=9&#038;t=10819">overview with many more examples</a></p>
]]></content:encoded>
			<wfw:commentRss>http://project-2501.net/index.php/2009/07/that-just-happened/feed/</wfw:commentRss>
		<slash:comments>0</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 1/49 queries in 0.024 seconds using disk
Object Caching 939/1040 objects using disk

Served from: project-2501.net @ 2012-02-07 22:18:51 -->
