<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.atitd.org/wiki/t4w/index.php?action=history&amp;feed=atom&amp;title=Guilds%2FDolphine%2FCrematoryMacro</id>
	<title>Guilds/Dolphine/CrematoryMacro - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://www.atitd.org/wiki/t4w/index.php?action=history&amp;feed=atom&amp;title=Guilds%2FDolphine%2FCrematoryMacro"/>
	<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t4w/index.php?title=Guilds/Dolphine/CrematoryMacro&amp;action=history"/>
	<updated>2026-06-01T14:45:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>http://www.atitd.org/wiki/t4w/index.php?title=Guilds/Dolphine/CrematoryMacro&amp;diff=131638&amp;oldid=prev</id>
		<title>Chrido: New page: = Crematory macro =  Copy this macro into notepad and save as &quot;crematory.au3&quot;.  &lt;pre&gt; ; ; Crematory macro by Chrido. Tuned for the crematory in my workshop. ; HotKeySet(&quot;^z&quot;, &quot;SetPoint&quot;) H...</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t4w/index.php?title=Guilds/Dolphine/CrematoryMacro&amp;diff=131638&amp;oldid=prev"/>
		<updated>2009-08-20T20:57:05Z</updated>

		<summary type="html">&lt;p&gt;New page: = Crematory macro =  Copy this macro into notepad and save as &amp;quot;crematory.au3&amp;quot;.  &amp;lt;pre&amp;gt; ; ; Crematory macro by Chrido. Tuned for the crematory in my workshop. ; HotKeySet(&amp;quot;^z&amp;quot;, &amp;quot;SetPoint&amp;quot;) H...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Crematory macro =&lt;br /&gt;
&lt;br /&gt;
Copy this macro into notepad and save as &amp;quot;crematory.au3&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;&lt;br /&gt;
; Crematory macro by Chrido. Tuned for the crematory in my workshop.&lt;br /&gt;
;&lt;br /&gt;
HotKeySet(&amp;quot;^z&amp;quot;, &amp;quot;SetPoint&amp;quot;)&lt;br /&gt;
HotKeySet(&amp;quot;^q&amp;quot;, &amp;quot;Terminate&amp;quot;)&lt;br /&gt;
HotKeySet(&amp;quot;{PAUSE}&amp;quot;, &amp;quot;TogglePause&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Global $Paused&lt;br /&gt;
Global $HOLD = 1&lt;br /&gt;
&lt;br /&gt;
WinActivate(&amp;quot;eGenesis Client&amp;quot;)&lt;br /&gt;
WinWaitActive(&amp;quot;eGenesis Client&amp;quot;)&lt;br /&gt;
$size = WinGetClientSize(&amp;quot;[active]&amp;quot;)&lt;br /&gt;
$SCREEN_WIDTH = $size[0]&lt;br /&gt;
$SCREEN_HEIGHT = $size[1]&lt;br /&gt;
&lt;br /&gt;
Opt(&amp;quot;MouseCoordMode&amp;quot;, 2);&lt;br /&gt;
Opt(&amp;quot;PixelCoordMode&amp;quot;, 2);&lt;br /&gt;
Opt(&amp;quot;MouseClickDelay&amp;quot;, 100)&lt;br /&gt;
Opt(&amp;quot;MouseClickDragDelay&amp;quot;, 500)&lt;br /&gt;
Opt(&amp;quot;MouseClickDownDelay&amp;quot;, 100)&lt;br /&gt;
Opt(&amp;quot;SendKeyDownDelay&amp;quot;, 100)&lt;br /&gt;
&lt;br /&gt;
MouseMove($SCREEN_WIDTH / 2, $SCREEN_HEIGHT / 2);&lt;br /&gt;
&lt;br /&gt;
ToolTip(&amp;quot;Crematory - Hoover over the central button and hit Ctrl+Z&amp;quot;, 300, 8);&lt;br /&gt;
&lt;br /&gt;
While $HOLD = 1&lt;br /&gt;
    Sleep(100)&lt;br /&gt;
WEnd&lt;br /&gt;
&lt;br /&gt;
$pos = MouseGetPos()&lt;br /&gt;
&lt;br /&gt;
$central_x = $pos[0]&lt;br /&gt;
$central_y = $pos[1]&lt;br /&gt;
&lt;br /&gt;
ToolTip(&amp;quot;Crematory - Press Ctrl+q to QUIT&amp;quot;, 300, 8);&lt;br /&gt;
&lt;br /&gt;
; Slider lines 0x92918F&lt;br /&gt;
; Slider cross 0x7b7567&lt;br /&gt;
; Slider dot 0x000000&lt;br /&gt;
; Background all RGB values above 160, red above 200&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
; Find left-most slider&lt;br /&gt;
$coord = PixelSearch($central_x - 140, $central_y - 60, $central_x - 80, $central_y - 60, 0x92918F, 0x10)&lt;br /&gt;
If @error Then&lt;br /&gt;
	$coord = PixelSearch($central_x - 140, $central_y - 50, $central_x - 80, $central_y - 50, 0x92918F, 0x10)&lt;br /&gt;
EndIf&lt;br /&gt;
&lt;br /&gt;
If @error Then&lt;br /&gt;
	MsgBox(0, &amp;quot;Crematory&amp;quot;, &amp;quot;Failed to find first slider&amp;quot;)&lt;br /&gt;
	Exit&lt;br /&gt;
EndIf&lt;br /&gt;
&lt;br /&gt;
$slider_x = $coord[0]&lt;br /&gt;
&lt;br /&gt;
; Find slider mid point&lt;br /&gt;
$coord = PixelSearch($slider_x - 3, $central_y - 120, $slider_x - 3, $central_y - 40, 0x7b7567, 0x10)&lt;br /&gt;
&lt;br /&gt;
If @error Then&lt;br /&gt;
	MsgBox(0, &amp;quot;Crematory&amp;quot;, &amp;quot;Failed to find slider mid point&amp;quot;)&lt;br /&gt;
	Exit&lt;br /&gt;
EndIf&lt;br /&gt;
&lt;br /&gt;
$slider_y = $coord[1]&lt;br /&gt;
&lt;br /&gt;
; When all are black:&lt;br /&gt;
; 1d 2d 3d 4d 5u 6d 7u&lt;br /&gt;
;&lt;br /&gt;
; Buttons:&lt;br /&gt;
; 1=3u 2=2u 3=5d 4=1u,7d 5=4u,6u&lt;br /&gt;
;&lt;br /&gt;
Dim $crematory_sliders[8]&lt;br /&gt;
$crematory_sliders[1] = -4   ; Slider 1 goes DOWN when button 4 is black&lt;br /&gt;
$crematory_sliders[2] = -2   ; Slider 2 goes DOWN when button 2 is black&lt;br /&gt;
$crematory_sliders[3] = -1   ; Slider 3 goes DOWN when button 1 is black&lt;br /&gt;
$crematory_sliders[4] = -5   ; Slider 4 goes DOWN when button 5 is black&lt;br /&gt;
$crematory_sliders[5] = 3    ; Slider 5 goes UP when button 3 is black&lt;br /&gt;
$crematory_sliders[6] = -5   ; Slider 6 goes DOWN when button 6 is black&lt;br /&gt;
$crematory_sliders[7] = 4    ; Slider 7 goes UP when button 7 is black&lt;br /&gt;
&lt;br /&gt;
; Which slider to always keep above the line&lt;br /&gt;
$keep_positive = 3&lt;br /&gt;
; Which slider to always keep below the line&lt;br /&gt;
$keep_negative = 2&lt;br /&gt;
&lt;br /&gt;
;&lt;br /&gt;
; We are ready to go&lt;br /&gt;
;&lt;br /&gt;
; Algorithm is: Find the most extreme value and try to correct it&lt;br /&gt;
;&lt;br /&gt;
Dim $slider_values[8]&lt;br /&gt;
Dim $wanted_button_states[6]&lt;br /&gt;
&lt;br /&gt;
; Wanted button states&lt;br /&gt;
$WHITE = -1&lt;br /&gt;
$DONTCARE = 0&lt;br /&gt;
$BLACK = 1&lt;br /&gt;
&lt;br /&gt;
While True&lt;br /&gt;
	For $i = 1 to 5&lt;br /&gt;
		$wanted_button_states[$i] = $DONTCARE&lt;br /&gt;
	Next&lt;br /&gt;
&lt;br /&gt;
	; Store current slider values&lt;br /&gt;
	For $slider = 1 To 7&lt;br /&gt;
		$slider_values[$slider] = GetSlider($slider)&lt;br /&gt;
	Next&lt;br /&gt;
&lt;br /&gt;
	; Keep fetching the worst value until it is 0&lt;br /&gt;
	$worst_slider = AbsMaxIndexOfArray($slider_values)&lt;br /&gt;
	$worst_value = $slider_values[$worst_slider]&lt;br /&gt;
	&lt;br /&gt;
	While $worst_value &amp;lt;&amp;gt; 0&lt;br /&gt;
		; Clear this value&lt;br /&gt;
		$slider_values[$worst_slider] = 0&lt;br /&gt;
		&lt;br /&gt;
		; Fetch the button belonging to this slider&lt;br /&gt;
		$button = $crematory_sliders[$worst_slider]&lt;br /&gt;
		&lt;br /&gt;
		; Check if the slider goes down or up when button is pressed&lt;br /&gt;
		Dim $down_when_black = False&lt;br /&gt;
		If $button &amp;lt; 0 Then&lt;br /&gt;
			$down_when_black = true&lt;br /&gt;
			$button = abs($button)&lt;br /&gt;
		EndIf&lt;br /&gt;
		&lt;br /&gt;
		; Only change this button if it was not changed before by an even worse value&lt;br /&gt;
		If $wanted_button_states[$button] = $DONTCARE Then&lt;br /&gt;
			Dim $slider_should_go_down = False&lt;br /&gt;
			If $worst_value &amp;gt; 0 Then&lt;br /&gt;
				$slider_should_go_down = True&lt;br /&gt;
			EndIf&lt;br /&gt;
			&lt;br /&gt;
			If $worst_slider = $keep_positive and $worst_value &amp;lt; 3 Then&lt;br /&gt;
				$slider_should_go_down = False&lt;br /&gt;
			EndIf&lt;br /&gt;
			&lt;br /&gt;
			If $worst_slider = $keep_negative and $worst_value &amp;gt; -3  Then&lt;br /&gt;
				$slider_should_go_down = True&lt;br /&gt;
			EndIf&lt;br /&gt;
&lt;br /&gt;
			If $slider_should_go_down Then&lt;br /&gt;
				If $down_when_black Then&lt;br /&gt;
					$wanted_button_states[$button] = $BLACK&lt;br /&gt;
				Else&lt;br /&gt;
					$wanted_button_states[$button] = $WHITE&lt;br /&gt;
				EndIf&lt;br /&gt;
			Else&lt;br /&gt;
				If $down_when_black Then&lt;br /&gt;
					$wanted_button_states[$button] = $WHITE&lt;br /&gt;
				Else&lt;br /&gt;
					$wanted_button_states[$button] = $BLACK&lt;br /&gt;
				EndIf&lt;br /&gt;
			EndIf&lt;br /&gt;
		EndIf&lt;br /&gt;
		&lt;br /&gt;
		; Fetch the worst value of whats left&lt;br /&gt;
		$worst_slider = AbsMaxIndexOfArray($slider_values)&lt;br /&gt;
		$worst_value = $slider_values[$worst_slider]&lt;br /&gt;
	WEnd&lt;br /&gt;
&lt;br /&gt;
	; We now have a list of wanted button values&lt;br /&gt;
&lt;br /&gt;
	; DEBUG: MsgBox(0, &amp;quot;Crematory&amp;quot;, &amp;quot;Buttons: 1=&amp;quot; &amp;amp; $wanted_button_states[1] &amp;amp; &amp;quot;  2=&amp;quot; &amp;amp; $wanted_button_states[2] &amp;amp; &amp;quot;  3=&amp;quot; &amp;amp; $wanted_button_states[3] &amp;amp; &amp;quot;  4=&amp;quot; &amp;amp; $wanted_button_states[4] &amp;amp; &amp;quot;  5=&amp;quot; &amp;amp; $wanted_button_states[5]))&lt;br /&gt;
	&lt;br /&gt;
	; NOTE Its very important that there are sliders on both sides of the line. Otherwise ash will be 0&lt;br /&gt;
&lt;br /&gt;
	; Set all buttons to their wanted states&lt;br /&gt;
	For $button = 1 to 5&lt;br /&gt;
		If $wanted_button_states[$button] &amp;lt;&amp;gt; $DONTCARE Then&lt;br /&gt;
			Dim $button_is_black = ButtonIsBlack($button)&lt;br /&gt;
&lt;br /&gt;
			If $wanted_button_states[$button] = $BLACK Then&lt;br /&gt;
				If Not ButtonIsBlack($button) Then&lt;br /&gt;
					ClickButton($button)&lt;br /&gt;
				EndIf&lt;br /&gt;
			Else&lt;br /&gt;
				If ButtonIsBlack($button) Then&lt;br /&gt;
					ClickButton($button)&lt;br /&gt;
				EndIf&lt;br /&gt;
			EndIf&lt;br /&gt;
				&lt;br /&gt;
		EndIf&lt;br /&gt;
	Next&lt;br /&gt;
&lt;br /&gt;
	Sleep(50)&lt;br /&gt;
WEnd&lt;br /&gt;
&lt;br /&gt;
Exit 0&lt;br /&gt;
&lt;br /&gt;
;&lt;br /&gt;
; Fetch slider position&lt;br /&gt;
;&lt;br /&gt;
Func AbsMaxIndexOfArray($values)&lt;br /&gt;
	Dim $max_index = 1&lt;br /&gt;
	Dim $max_value = 0&lt;br /&gt;
	Dim $value&lt;br /&gt;
&lt;br /&gt;
	For $index = 1 To 7&lt;br /&gt;
		$value = $values[$index]&lt;br /&gt;
		If Abs($value) &amp;gt; Abs($max_value) Then&lt;br /&gt;
			$max_value = $value&lt;br /&gt;
			$max_index = $index&lt;br /&gt;
		EndIf&lt;br /&gt;
	Next&lt;br /&gt;
	&lt;br /&gt;
	return $max_index&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
;&lt;br /&gt;
; Fetch slider position&lt;br /&gt;
;&lt;br /&gt;
Func GetSlider($number)&lt;br /&gt;
	Dim $x = $slider_x + (($number - 1) * 36)&lt;br /&gt;
	$coord = PixelSearch($x, $slider_y - 62, $x, $slider_y + 62, 0x000000, 0x05)&lt;br /&gt;
	If @error Then&lt;br /&gt;
		MsgBox(0, &amp;quot;Crematory&amp;quot;, &amp;quot;Failed to read slider position&amp;quot;)&lt;br /&gt;
		Exit&lt;br /&gt;
	EndIf&lt;br /&gt;
	Dim $pos = -1 * ($coord[1] + 2 - $slider_y)&lt;br /&gt;
	return $pos&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
;&lt;br /&gt;
; Click button 1 to 5&lt;br /&gt;
;&lt;br /&gt;
Func ClickButton($number)&lt;br /&gt;
	Dim $x = $central_x + (($number - 3) * 40)&lt;br /&gt;
	MouseClick(&amp;quot;left&amp;quot;, $x, $central_y, 1, 1)&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
;&lt;br /&gt;
; Returns True if black, otherwise false&lt;br /&gt;
;&lt;br /&gt;
Func ButtonIsBlack($number)&lt;br /&gt;
	Dim $x = $central_x + (($number - 3) * 40)&lt;br /&gt;
	$color = PixelGetColor($x, $central_y)&lt;br /&gt;
	If $color = 0 Then&lt;br /&gt;
		Return True&lt;br /&gt;
	Else&lt;br /&gt;
		return False&lt;br /&gt;
	EndIf&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
;&lt;br /&gt;
; Returns the RGB components of a colour&lt;br /&gt;
;&lt;br /&gt;
Func GetRGB($color)&lt;br /&gt;
	Dim $red = Int($color / 65536)&lt;br /&gt;
	$color = $color - ($red * 65536)&lt;br /&gt;
	Dim $green = Int($color / 256)&lt;br /&gt;
	Dim $blue = Int($color - ($green * 256))&lt;br /&gt;
	&lt;br /&gt;
	Dim $colors[3]&lt;br /&gt;
	$colors[0] = $red&lt;br /&gt;
	$colors[1] = $green&lt;br /&gt;
	$colors[2] = $blue&lt;br /&gt;
	&lt;br /&gt;
	return $colors&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func SetPoint()&lt;br /&gt;
	$HOLD = 0&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func Terminate()&lt;br /&gt;
    Exit 0&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func TogglePause()&lt;br /&gt;
    $Paused = NOT $Paused&lt;br /&gt;
    While $Paused&lt;br /&gt;
        sleep(100)&lt;br /&gt;
        ToolTip($RESOURCE &amp;amp; &amp;quot; mining - PAUSED&amp;quot;, 300, 8)&lt;br /&gt;
    WEnd&lt;br /&gt;
    ToolTip($RESOURCE &amp;amp; &amp;quot; mining&amp;quot;, 300, 8)&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chrido</name></author>
	</entry>
</feed>