Advertisement
Guest User

DayZ Standalone Loot Map Viewer

a guest
Dec 19th, 2013
1,068
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 11.08 KB | None | 0 0
  1. #include <Array.au3>
  2. #include <File.au3>
  3. #include <GDIPlus.au3>
  4. #include <WindowsConstants.au3>
  5. #include <Misc.au3>
  6.  
  7. #region Renderer_Variables
  8. Global $Renderer_hWnd = ""
  9. Global $LootDetail_hWnd, $LootDetail_BuildingName, $LootDetail_Edit
  10. Global $hGraphic
  11. Global $hCanvas, $hCanvasBuffer
  12. Global $hMap, $hMapBuffer
  13. Global $hLootSpots, $hLootSpotsBuffer
  14. Global $hUI, $hUIBuffer
  15. Global $hDebugBrush, $hDebugPen
  16. #endregion
  17.  
  18. #region Renderer_Settings
  19. Global $Renderer_WindowWidth = 1200
  20. Global $Renderer_WindowHeight = 720
  21. #endregion
  22.  
  23. #region Camera
  24. Global $iCameraX, $iCameraY, $iCameraZoom
  25. Global $iCameraOffsetX, $iCameraOffsetY
  26. Global $iMapLeftX, $iMapLeftY, $iMapRightX, $iMapRightY
  27. #endregion
  28.  
  29. #region InputHandler
  30. Global $Mouse_LBUTTONTRIGGER = False
  31. Global $Mouse_LBUTTONDOWN = False
  32. Global $Mouse_LBUTTONCameraPosTrigger[2]
  33. Global $Mouse_LBUTTONCursorInfoTrigger[5]
  34. Global $Mouse_LBUTTONCursorInfoCurrent[5]
  35. Global $hUser32DLL = DllOpen("user32.dll")
  36.  
  37. Global $MouseOverEvents = ObjCreate("System.Collections.ArrayList")
  38. #endregion
  39.  
  40. #region DayZ_Map
  41. Global $DayZMap_TileSize = 256
  42. Global $iMapSizeX = 30
  43. Global $iMapSizeY = 30
  44. Global $aMapTiles[$iMapSizeX][$iMapSizeY]
  45. #endregion
  46.  
  47. #region DayZ_LootSpots
  48. Global $DayZLootSpots[$iMapSizeX][$iMapSizeY]
  49. Global $DayZLootSpot_SizeModificator = 0
  50. Global $DayZLootSpots_Count = 0
  51. #endregion
  52.  
  53. Renderer_Start()
  54. _Camera(0, 0)
  55. _LoadDayZMapTiles()
  56. _LoadDayZLootSpots()
  57.  
  58. WinSetTitle($Renderer_hWnd, "", "v0.01 Alpha | DayZ Standalone Map")
  59.  
  60. While 1
  61.     InputHandler()
  62.     Render()
  63.     Sleep(10)
  64. WEnd
  65.  
  66. #region DayZ_Map
  67. Func _LoadDayZMapTiles()
  68.     For $i = 0 To $iMapSizeX - 1
  69.         For $s = 0 To $iMapSizeY - 1
  70.             $aMapTiles[$i][$s] = _GDIPlus_ImageLoadFromFile(@ScriptDir&"\data\map\"&$i&"_"&$s&".png")
  71.         Next
  72.     Next
  73. EndFunc
  74.  
  75. Func _Render_DayZMap()
  76.     _GDIPlus_GraphicsClear($hMapBuffer, 0xFF000000)
  77.  
  78.     For $iX = $iMapLeftX To $iMapRightX
  79.         For $iY = $iMapLeftY To $iMapRightY
  80.             If $iX < 0 Or $iY < 0 Or $iX > $iMapSizeX - 1 Or $iY > $iMapSizeY - 1 Then ContinueLoop
  81.  
  82.             ;ConsoleWrite("Render "&$iX&":"&$iY&@CRLF)
  83.  
  84.             $iFieldX = ($iX * $DayZMap_TileSize) + $iCameraOffsetX - $iCameraX
  85.             $iFieldY = ($iY * $DayZMap_TileSize) + $iCameraOffsetY - $iCameraY
  86.  
  87.             _GDIPlus_GraphicsDrawImage($hMapBuffer, $aMapTiles[$iX][$iY], $iFieldX, $iFieldY)
  88.  
  89.             ;ConsoleWrite("_GDIPlus_GraphicsDrawImage($hMapBuffer, $aMapTiles["&$iX&"]["&$iY&"], "&$iFieldX&", "&$iFieldY&")")
  90.  
  91.         Next
  92.     Next
  93. EndFunc
  94. #endregion
  95.  
  96. #region DayZ_LootSpots
  97. Func _LoadDayZLootSpots()
  98.     $DayZLootSpot_SizeModificator = $iMapSizeX * $DayZMap_TileSize / 15360
  99.     $DayZLootSpots_Count = IniRead(@ScriptDir&"\data\output\world\coordinates.ini", "general", "objectCount", 0)
  100.     Local $DayZLootSpotsTemp[$DayZLootSpots_Count][5]
  101.     For $i = 0 To $DayZLootSpots_Count - 1
  102.         $aTemp = IniReadSection(@ScriptDir&"\data\output\world\coordinates.ini", $i)
  103.         For $s = 1 To 5
  104.             $DayZLootSpotsTemp[$i][$s-1] = $aTemp[$s][1]
  105.         Next
  106.         $DayZLootSpotsTemp[$i][1] *= $DayZLootSpot_SizeModificator
  107.         $DayZLootSpotsTemp[$i][2] = 15360 - $DayZLootSpotsTemp[$i][2]
  108.         $DayZLootSpotsTemp[$i][2] *= $DayZLootSpot_SizeModificator
  109.         $DayZLootSpotsTemp[$i][3] *= $DayZLootSpot_SizeModificator
  110.     Next
  111.  
  112.     For $i = 0 To $iMapSizeX - 1
  113.         For $s = 0 To $iMapSizeY - 1
  114.             $DayZLootSpots[$i][$s] = ObjCreate("System.Collections.ArrayList")
  115.         Next
  116.     Next
  117.  
  118.     Local $aTemp[5]
  119.     For $i = 0 To $DayZLootSpots_Count - 1
  120.         $iX = Floor($DayZLootSpotsTemp[$i][1]/256)
  121.         $iY = Floor($DayZLootSpotsTemp[$i][2]/256)
  122.         For $s = 0 To 4
  123.             $aTemp[$s] = $DayZLootSpotsTemp[$i][$s]
  124.         Next
  125.         $DayZLootSpots[$iX][$iY].Add($aTemp)
  126.     Next
  127. EndFunc
  128.  
  129. Func _Render_DayZLootSpots()
  130.     _GDIPlus_GraphicsClear($hLootSpotsBuffer, 0x00000000)
  131.  
  132.     $MouseOverEvents.clear
  133.  
  134.     Local $aTemp[3]
  135.     For $iX = $iMapLeftX To $iMapRightX
  136.         For $iY = $iMapLeftY To $iMapRightY
  137.             If $iX < 0 Or $iY < 0 Or $iX > $iMapSizeX - 1 Or $iY > $iMapSizeY - 1 Then ContinueLoop
  138.  
  139.             ;ConsoleWrite("Render "&$iX&":"&$iY&@CRLF)
  140.  
  141.             For $Element in $DayZLootSpots[$iX][$iY]
  142. ;~              _ArrayDisplay($Element)
  143.                 $iFieldX = $Element[1] + $iCameraOffsetX - $iCameraX
  144.                 $iFieldY = $Element[2] + $iCameraOffsetY - $iCameraY
  145.  
  146.                 $aTemp[0] = $Element[0]
  147.                 $aTemp[1] = $iFieldX
  148.                 $aTemp[2] = $iFieldY
  149.  
  150.                 $MouseOverEvents.add($aTemp)
  151.  
  152.                 $iSize = _DayZLoot_GetLootSpotValue($Element[0])
  153.  
  154.                 _GDIPlus_GraphicsFillEllipse($hLootSpotsBuffer, $iFieldX - $iSize/2, $iFieldY - $iSize/2, $iSize, $iSize, $hDebugBrush)
  155.                 _GDIPlus_GraphicsDrawEllipse($hLootSpotsBuffer, $iFieldX - $iSize/2, $iFieldY - $iSize/2, $iSize, $iSize, $hDebugPen)
  156.             Next
  157.             ;ConsoleWrite("_GDIPlus_GraphicsDrawImage($hMapBuffer, $aMapTiles["&$iX&"]["&$iY&"], "&$iFieldX&", "&$iFieldY&")")
  158.         Next
  159.     Next
  160. EndFunc
  161.  
  162. Func _DayZLoot_GetLootSpotValue($sBuildingName)
  163.     $iTemp = FileGetSize(@ScriptDir&"\data\output\"&$sBuildingName&".ini")/1024
  164.     If $iTemp < 8 Then
  165.         Return 4
  166.     ElseIf $iTemp < 20 Then
  167.         Return 6
  168.     ElseIf $iTemp < 30 Then
  169.         Return 8
  170.     Else
  171.         Return 10
  172.     EndIf
  173. EndFunc
  174. #endregion
  175.  
  176. #region LootDetailGUI
  177. Func _LootDetailUpdate($sBuildingName)
  178.     GUICtrlSetData($LootDetail_BuildingName, $sBuildingName)
  179.     Local $aTemp = IniReadSectionNames(@ScriptDir&"\data\output\"&$sBuildingName&".ini")
  180.     Local $aTemp2, $sTemp
  181.     For $i = 1 To $aTemp[0]
  182.         $aTemp2 = IniReadSection(@ScriptDir&"\data\output\"&$sBuildingName&".ini", $aTemp[$i])
  183.         $sTemp &= $aTemp[$i] & ":"& @CRLF
  184.         For $s = 1 To $aTemp2[0][0]
  185.             $sTemp &= $aTemp2[$s][0] & ": "&StringReplace($aTemp2[$s][1], ",", " - ")&" %" & @CRLF
  186.         Next
  187.         $sTemp &= @CRLF
  188.     Next
  189.     GUICtrlSetData($LootDetail_Edit, $sTemp)
  190. EndFunc
  191. #endregion
  192.  
  193. #region Windows & Renderer
  194. Func Renderer_Start()
  195.     _CreateWindow($Renderer_WindowWidth, $Renderer_WindowHeight)
  196.     _InitializeGDI()
  197. EndFunc
  198.  
  199. Func _CreateWindow($iWidth, $iHeight)
  200.     Opt("GUIOnEventMode", 1)
  201.     $Renderer_hWnd = GUICreate("v0.01 Alpha | DayZ Standalone Map - Loading...", $iWidth, $iHeight)
  202.     GUISetOnEvent(-3, "OnAutoItExit")
  203.     GUISetState()
  204.  
  205.     GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")
  206.     GUIRegisterMsg($WM_LBUTTONUP, "_WM_LBUTTONUP")
  207.  
  208.     Local $aTemp = WinGetPos($Renderer_hWnd)
  209.  
  210.     $LootDetail_hWnd = GUICreate("Loot Detail", 250, 454, $aTemp[0]+$aTemp[2]+25, $aTemp[1], -1, BitOR($WS_EX_TOOLWINDOW,$WS_EX_WINDOWEDGE))
  211.     $LootDetail_BuildingName = GUICtrlCreateLabel("Building Name", 8, 8, 234, 17)
  212.     GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
  213.     $LootDetail_Edit = GUICtrlCreateEdit("", 8, 40, 233, 401)
  214.     GUISetState(@SW_SHOW)
  215. EndFunc
  216.  
  217. Func _InitializeGDI()
  218.     _GDIPlus_Startup()
  219.     $hGraphic = _GDIPlus_GraphicsCreateFromHWND($Renderer_hWnd)
  220.  
  221.     $hCanvas = _GDIPlus_BitmapCreateFromGraphics($Renderer_WindowWidth, $Renderer_WindowWidth, $hGraphic)
  222.     $hCanvasBuffer = _GDIPlus_ImageGetGraphicsContext($hCanvas)
  223.  
  224.     $hMap = _GDIPlus_BitmapCreateFromGraphics($Renderer_WindowWidth, $Renderer_WindowWidth, $hGraphic)
  225.     $hMapBuffer = _GDIPlus_ImageGetGraphicsContext($hMap)
  226.  
  227.     $hLootSpots = _GDIPlus_BitmapCreateFromGraphics($Renderer_WindowWidth, $Renderer_WindowWidth, $hGraphic)
  228.     $hLootSpotsBuffer = _GDIPlus_ImageGetGraphicsContext($hLootSpots)
  229.  
  230.     $hUI = _GDIPlus_BitmapCreateFromGraphics($Renderer_WindowWidth, $Renderer_WindowWidth, $hGraphic)
  231.     $hUIBuffer = _GDIPlus_ImageGetGraphicsContext($hUI)
  232.  
  233.     $hDebugBrush = _GDIPlus_BrushCreateSolid(0xFFFF4D4D)
  234.     $hDebugPen = _GDIPlus_PenCreate(0xFF000000)
  235. EndFunc   ;==>_DemoInitializeGDI
  236.  
  237. Func Render()
  238.     _GDIPlus_GraphicsClear($hCanvasBuffer, 0xFF000000)
  239.  
  240.     _Camera_UpdateRenderData()
  241.  
  242.     _Render_DayZMap()
  243.     _Render_DayZLootSpots()
  244.  
  245.     _GDIPlus_GraphicsDrawImageRect($hCanvasBuffer, $hMap, 0, 0, $Renderer_WindowWidth, $Renderer_WindowWidth)
  246.     _GDIPlus_GraphicsDrawImageRect($hCanvasBuffer, $hLootSpots, 0, 0, $Renderer_WindowWidth, $Renderer_WindowWidth)
  247.  
  248.     _GDIPlus_GraphicsDrawImageRect($hGraphic, $hCanvas, 0, 0, $Renderer_WindowWidth, $Renderer_WindowWidth)
  249. EndFunc
  250. #endregion
  251.  
  252. #region Renderer_Camera
  253.     ; #FUNCTION# ====================================================================================================================
  254.     ; Name...........:  _Camera
  255.     ; Description ...:  Setzt die Kamera an die gegebene Position.  (Zoom wird noch nicht verwendet)
  256.     ;                   Pixelgenaue Angabe, keine Felder!
  257.     ; Syntax.........:  _Camera($iX, $iY, $iZoom = 1)
  258.     ; Parameters ....:  $iX         - X Coord in Pixel
  259.     ;                   $iY         - Y Coord in Pixel
  260.     ; Return values .:
  261.     ; Author ........:
  262.     ; Modified.......:
  263.     ; Remarks .......:
  264.     ; Related .......:
  265.     ; Link ..........:
  266.     ; Example .......:
  267.     ; ===============================================================================================================================
  268.  
  269.     Func _Camera_UpdateRenderData()
  270.         $iCameraOffsetX = ($Renderer_WindowWidth / 2)
  271.         $iCameraOffsetY = ($Renderer_WindowHeight / 2)
  272.  
  273.         $iMapLeftX = Floor(($iCameraX - $iCameraOffsetX) / $DayZMap_TileSize)
  274.         $iMapLeftY = Floor(($iCameraY - $iCameraOffsetY) / $DayZMap_TileSize)
  275.         $iMapRightX = Floor(($iCameraX + $iCameraOffsetX) / $DayZMap_TileSize)
  276.         $iMapRightY = Floor(($iCameraY + $iCameraOffsetY) / $DayZMap_TileSize)
  277.     EndFunc
  278.  
  279.     Func _Camera($iX, $iY, $iZoom = 1)
  280.         $iCameraX = $iX
  281.         $iCameraY = $iY
  282.         $iCameraZoom = $iZoom
  283.     EndFunc
  284.  
  285.     Func _Camera_GetPos()
  286.         Local $aRet[2] = [$iCameraX, $iCameraY]
  287.         Return $aRet
  288.     EndFunc
  289.  
  290.     Func _Camera_SetX($iX)
  291.         $iCameraX = $iX
  292.     EndFunc
  293.  
  294.     Func _Camera_SetY($iY)
  295.         $iCameraY = $iY
  296.     EndFunc
  297. #endregion
  298.  
  299. #region Renderer_InputHandler
  300.     ; #FUNCTION# ====================================================================================================================
  301.     ; Name...........:  InputHandler
  302.     ; Description ...:  Verarbeitet Benutzereingabe.
  303.     ; ===============================================================================================================================
  304.     Func InputHandler()
  305.         If $Mouse_LBUTTONTRIGGER = True Then
  306.             $Mouse_LBUTTONCameraPosTrigger = _Camera_GetPos()
  307.             $Mouse_LBUTTONCursorInfoTrigger = GUIGetCursorInfo($Renderer_hWnd)
  308.             $Mouse_LBUTTONTRIGGER = False
  309.             $Mouse_LBUTTONDOWN = True
  310.         EndIf
  311.         If $Mouse_LBUTTONDOWN Then
  312.             $Mouse_LBUTTONCursorInfoCurrent = GUIGetCursorInfo($Renderer_hWnd)
  313.  
  314. ;~          ConsoleWrite("_Camera_SetX("&$Mouse_LBUTTONCameraPosTrigger[0]&" - ("&$Mouse_LBUTTONCursorInfoCurrent[0]&" - "&$Mouse_LBUTTONCursorInfoTrigger[0]&"))")
  315.  
  316.             _Camera_SetX($Mouse_LBUTTONCameraPosTrigger[0] - ($Mouse_LBUTTONCursorInfoCurrent[0] - $Mouse_LBUTTONCursorInfoTrigger[0]))
  317.             _Camera_SetY($Mouse_LBUTTONCameraPosTrigger[1] - ($Mouse_LBUTTONCursorInfoCurrent[1] - $Mouse_LBUTTONCursorInfoTrigger[1]))
  318.         EndIf
  319.  
  320.         Local $Mouse_MOVER = GUIGetCursorInfo($Renderer_hWnd)
  321.         For $element In $MouseOverEvents
  322.             If _IsNear($Mouse_MOVER[0], $element[1], _DayZLoot_GetLootSpotValue($element[0])) And _IsNear($Mouse_MOVER[1], $element[2], _DayZLoot_GetLootSpotValue($element[0])) Then
  323.                 _LootDetailUpdate($element[0])
  324.             EndIf
  325.         Next
  326.  
  327.     EndFunc
  328.  
  329.     Func _IsNear($i1, $i2, $iTolerance = 2)
  330.         $iTolerance = $iTolerance/2
  331.         If ($i1 - $iTolerance <= $i2) And ($i1 + $iTolerance >= $i2) Then Return True
  332.     EndFunc
  333. #endregion
  334.  
  335. Func OnAutoItExit()
  336.     Exit
  337. EndFunc
  338.  
  339. Func _WM_LBUTTONDOWN()
  340.     $Mouse_LBUTTONTRIGGER = True
  341. EndFunc
  342.  
  343. Func _WM_LBUTTONUP()
  344.     $Mouse_LBUTTONDOWN = False
  345. EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement