Difference between revisions of "Macro"

From NetHackWiki
Jump to navigation Jump to search
(copy from other wiki. Only contributor: Kamil Pawełkiewicz)
 
m (replace wikia links)
Line 21: Line 21:
 
  {
 
  {
 
  MsgBox 16, Error, Icon is missing! Make sure if any file with .ico extension is present in Nethack directory.
 
  MsgBox 16, Error, Icon is missing! Make sure if any file with .ico extension is present in Nethack directory.
  Run http://nethack.wikia.com/wiki/Macro#icon
+
  Run http://nethackwiki.com/wiki/Macro#icon
 
  ExitApp
 
  ExitApp
 
  }
 
  }
Line 34: Line 34:
 
  {
 
  {
 
  MsgBox 16, Error, trigger.ahk not exist! You will be redirected to trigger.ahk source code.
 
  MsgBox 16, Error, trigger.ahk not exist! You will be redirected to trigger.ahk source code.
  Run http://nethack.wikia.com/wiki/Macro#trigger
+
  Run http://nethackwiki.com/wiki/Macro#trigger
 
  ExitApp
 
  ExitApp
 
  }
 
  }
Line 72: Line 72:
 
   
 
   
 
  ^w::
 
  ^w::
  { ;WikiHack Search Engine
+
  { ;NetHackWiki Search Engine
  InputBox, sWiki, Search on WikiHack, , , , 100
+
  InputBox, sWiki, Search on NetHackWiki, , , , 100
 
  if sWiki !=
 
  if sWiki !=
  Run http://nethack.wikia.com/index.php?search=%sWiki%&fulltext=0
+
  Run http://nethackwiki.com/index.php?search=%sWiki%&fulltext=0
 
  return
 
  return
 
  }
 
  }
Line 209: Line 209:
 
*To view a full list of created macro triggers and actions press <tt>CTRL+M</tt> then <tt>ENTER</tt>
 
*To view a full list of created macro triggers and actions press <tt>CTRL+M</tt> then <tt>ENTER</tt>
 
*To delete a macro press <tt>CTRL+M</tt> next input it's trigger key and leave macro action empty. You will be asked to remove it.
 
*To delete a macro press <tt>CTRL+M</tt> next input it's trigger key and leave macro action empty. You will be asked to remove it.
*Press <tt>CTRL+W</tt> and input a keyword. You will be redirected to appropriate WikiHack article.
+
*Press <tt>CTRL+W</tt> and input a keyword. You will be redirected to appropriate NetHackWiki article.
  
 
== Sample macros ==
 
== Sample macros ==

Revision as of 07:50, 29 May 2011

This is how the macro system looks like

This page contains help on making a simple and powerful macro system in NetHack.

Installation

This was tested on: WinXP SP3 + nethack-343-win (NetHackW.exe)

  • Download AutoHotkey Basic installer http://www.autohotkey.com/download/
  • Install AutoHotkey Basic
  • Create runmeonce.ahk AutoHotkey script containing following code in your NetHack directory:
;This is NethackW macro system script
;DO NOT edit unless you know what you're doing
#SingleInstance ignore

if A_IsCompiled <> 1
{ ;Create launcher file
	#NoTrayIcon
	Loop *.ico { ;Search for icon
		sIcon = %FileList%%A_LoopFileName%
		Break
	}
	if sIcon = 
	{
		MsgBox 16, Error, Icon is missing! Make sure if any file with .ico extension is present in Nethack directory.
		Run http://nethackwiki.com/wiki/Macro#icon
		ExitApp
	}
	RunWait Ahk2exe.exe /in "%A_ScriptFullPath%" /out "NHLauncher.exe" /icon "%sIcon%" /pass "nethack",Hide
	MsgBox 64, Information, Run NHLauncher.exe to start NetHack. Have fun!
	FileDelete %A_ScriptFullPath%
	FileDelete %sIcon%
	ExitApp
}

IfNotExist trigger.ahk
{
	MsgBox 16, Error, trigger.ahk not exist! You will be redirected to trigger.ahk source code.
	Run http://nethackwiki.com/wiki/Macro#trigger
	ExitApp
}
Process, Exist, NethackW.exe
NewPID = %ErrorLevel% 
if NewPID = 0
{ ;Start Nethack
	GoSub RunTrigger
	RunWait NethackW.exe
	GoSub KillTrigger	
	ExitApp
} else {
	MsgBox 16, Error, Nethack is already running. 
	ExitApp
}
return

KillTrigger:
	SetTitleMatchMode, 2
	DetectHiddenWindows, on
	SendMessage, 0x44, 0x405, 0, , trigger.ahk - AutoHotkey v
	RunWait TaskKill /pid %ErrorLevel% /fi "STATUS ne RUNNING",,Hide
return

RunTrigger:
	Run trigger.ahk
return

#ifWinActive ahk_class MSNHMainWndClass
!^r::
{ ;Reset triggers manually
	Gosub KillTrigger
	Gosub RunTrigger
	MsgBox 0, Information, Triggers script restarted
	return
}

^w::
{ ;NetHackWiki Search Engine
	InputBox, sWiki, Search on NetHackWiki, , , , 100
	if sWiki !=
		Run http://nethackwiki.com/index.php?search=%sWiki%&fulltext=0
	return
}

^m::
{ ;Add new macro
	fTemp = trigger.tmp1
	bFound = 0
	bDelete = 0
	bSuccess = 0

	InputBox, sHotkey, Input trigger key,,, 200, 100
	if sHotkey =
	{ ;View triggers.ahk	
		Loop
		{
			FileReadLine, sLine, trigger.ahk, %A_Index%
			if ErrorLevel 
				break
			FileAppend, %sLine%`n, %fTemp%
			if ((sLine) = (";In game triggers"))
				fTemp = trigger.tmp2
		}
		FileRead Contents, trigger.tmp2
		if Contents =
			MsgBox 0, Information, Macro list is empty.
		else MsgBox 0, Information, Macro file contains following entries:`n`n%Contents%
		FileDelete trigger.tmp*
		Contents =  ; Free the memory.
		return	
	}
	InputBox, sAction, Input macro action,,, 200, 100
	if sAction =
		bDelete = 1
		
	Loop
	{ ;Read analize and save file
		FileReadLine, sLine, trigger.ahk, %A_Index%
		if ErrorLevel 
			break
		IfInString, sLine, %sHotkey%:: Send
		{ ;Equal entry found!
			bFound = 1
			if (bDelete <> 1)
			{
				MsgBox, 36, Old entry found!, %sLine%`n`nReplace with Send %sAction%?
				IfMsgBox Yes
				{
					FileAppend, %sHotkey%:: Send %sAction%`n, %fTemp%
				} else FileAppend, %sLine%`n, %fTemp%
				bSuccess = 1
			} else { ;Entry deletion
				MsgBox, 292, Entry deletion , Delete entry %sLine%?	
				IfMsgBox No
					FileAppend, %sLine%`n, %fTemp%					
				bSuccess = 1
			}
		} else FileAppend, %sLine%`n, %fTemp%
		if ((sLine) = (";In game triggers"))
			fTemp = trigger.tmp2
	}
	if (bFound = 0)
	{
		if (bDelete <> 1)
		{
			bSuccess = 1
			FileAppend %sHotkey%:: Send %sAction%`n, %fTemp%
		}
	}
	if (bSuccess <> 1)
		MsgBox 0, Error, Macro action cannot be empty
	{ ;Merge files and clear up
		FileRead Contents, trigger.tmp2
		Sort, Contents
		FileAppend %Contents%, trigger.tmp1
		FileCopy trigger.tmp1, trigger.ahk, 1
		FileDelete trigger.tmp*
		Contents =  ; Free the memory.
	}
	GoSub KillTrigger
	GoSub RunTrigger
}
  • Create trigger.ahk AutoHotkey script containing following code in your NetHack directory:
#NoTrayIcon
#SingleInstance ignore

MapScrollSteps = 28

#IfWinActive ahk_class MSNHMainWndClass
/:: 
	Loop 5 {
		Send s 
	}
	return

;Diagonal movement remapping
^a:: Send {Home}
^s:: Send {Pgup}
^z:: Send {End}
^x:: Send {Pgdn}

;Map scrolling left
^Left:: 
	Loop %MapScrollSteps% {
		Send ^{Left}
	}
	return

;Map scrolling right
^Right:: 
	Loop %MapScrollSteps% {
		Send ^{Right}
	}
	return

;WARNING! Leave one empty line at the end of file
;In game triggers
!Down:: Send o{Down}
!Left:: Send o{Left}
!Right:: Send o{Right}
!Up:: Send o{Up}
F12:: Send Oi{Enter}Oi{Enter}
  • Download custom .ico file and save it in your NetHack directory (for example: http://findicons.com/icon/257701/d12_128x128) Script will automatically use first .ico file in alphabetical order.
  • Run runmeonce.ahk to compile a script

In-game usage

  • Run NHLauncher.exe to start NetHack.
  • Press CTRL+M during the game and follow the on screen instructions to add a new macro action

Example: If you want to make a macro for casting your first spell (for instance to cast Extra healing on yourself)

press CTRL+M
Input trigger key: F1
Input macro action: Za.

Macro has been created and can be used immediately.

  • To view a full list of created macro triggers and actions press CTRL+M then ENTER
  • To delete a macro press CTRL+M next input it's trigger key and leave macro action empty. You will be asked to remove it.
  • Press CTRL+W and input a keyword. You will be redirected to appropriate NetHackWiki article.

Sample macros

There are already few macros in standard trigger.ahk file. Seaching macro can be removed only by editing a file so, if you don't need it you'll have to edit it by yourself. Included macros:

  • Diagonal directions key mapping for laptops with uncomfortable position of [Home, End, Page Up, Page Down] keys changed to CTRL+[A, Z, S, X].
  • Searching for 5 turns by pressing / key.
  • F12 sorts inventory letters
  • ALT+[Direction] opens a door
  • CTRL+[Left, Right]Scrolls map smoothly. Change variable MapScrollSteps in trigger.ahk to adjust scroll range.

You can make your own macros during the game as well. Examples:

  • TAB key to apply an oil lamp.
  • F1,F2 to cast offensive spells.
  • F3,F4 to wear different sets of armor.
  • k for using a key/lockpick instead of kicking.

Links

List of special key aliases