schon wieder ein Patcher? Gibt es nicht schon genung davon? Warum schon wieder einer?
Ganz einfach: Ich wollte einen Patcher erstellen der nicht mit Grafiken und .NET Orgien nur so überschüttet ist und weil ich lust und laune dran hatte
Er hat knapp 100 Zeilen, prüft die Dateien mit MD5 Hashes und ladet sie dann mit Anzeige runter. Zudem kann er auch deine News anzeigen und das alles in einer sehr simplen INI Datei.
Zudem stelle ich euch den Source code zur verfügung da ich denke das sich niemand mehr die Mühe machen sollte und das Rad neu erfinden muss. Wir sind eine Community und statt alles zu kommerziellisieren sollten wir teilen, weils dann eh wieder ein paar sehr besondere Menschen gibt die dann wieder daraus Profit machen wollen und es zu den "Zwangs-Release-Ich-Will-Aufmerksamkeit-und-den-anderen-schlecht-machen"
Mir ist es latte wie hose ob ihr mich darin erwähnt oder nicht. Ich habe es aus Spaß gemacht
Dazu gibt es auch ein mini Tool was die MD5 Summen erstellt und ihr diese nur noch an die patcher.ini anfügen müsst.
Patcher Source:
Code:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Comment=made by
#AutoIt3Wrapper_Res_Description=made by
#AutoIt3Wrapper_Res_Fileversion=1.0.0.1
#AutoIt3Wrapper_Res_LegalCopyright=made by
#AutoIt3Wrapper_Res_Language=1031
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <GUIListView.au3>
#include <MsgBoxConstants.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <InetConstants.au3>
#include <File.au3>
#include <Array.au3>
#include <Crypt.au3>
Global $serverhttp = "http://localhost/"
Global $patcherini = (@TempDir & "\patcher.ini")
Global $patcherurl = ($serverhttp & "patcher.ini")
Global $homepage = "http://localhost/"
Global $execute = "metin2.exe"
If FileExists($patcherini) Then
FileDelete($patcherini)
EndIf
If InetGetSize($patcherurl) = 0 Then
MsgBox(0, "Error", "Patcherini konnte nicht geladen werden. Patchserver konnte nicht erreicht werden.")
Exit
Else
InetGet($patcherurl, $patcherini, $INET_FORCERELOAD)
EndIf
GUICreate("Patcher Server", 377, 313, 192, 124)
GUICtrlCreateLabel("Fortschritt:", 8, 80, 56, 17)
GUICtrlCreateLabel("News:", 8, 144, 37, 17)
GUICtrlCreateLabel("Datei Download:", 8, 16, 83, 17)
$progr_fortschritt = GUICtrlCreateProgress(8, 104, 249, 25)
$progr_dateidown = GUICtrlCreateProgress(8, 40, 249, 17)
$label_dateidown = GUICtrlCreateLabel("", 96, 16, 68, 17)
$button_start = GUICtrlCreateButton("Start", 280, 112, 89, 49)
$button_patch = GUICtrlCreateButton("Patch", 280, 8, 89, 33)
$button_cc = GUICtrlCreateButton("Config Client", 280, 80, 89, 25)
$button_homepage = GUICtrlCreateButton("Homepage", 280, 48, 89, 25)
$list_news = GUICtrlCreateListView("Datum|Nachricht", 8, 168, 361, 136)
_GUICtrlListView_SetColumnWidth($list_news, 1, 290)
GUISetState(@SW_SHOW)
GUICtrlSetState($button_start, $GUI_DISABLE)
Local $val1
$val1 = IniReadSection($patcherini, "News")
If Not IsArray($val1) Then
MsgBox(0, "Error", "1002. Array Defekt.")
Exit
EndIf
For $i = 1 To UBound($val1) -1
GUICtrlCreateListViewItem($val1[$i][1], $list_news)
Next
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $button_cc
Run( "config.exe", @WorkingDir)
Case $button_patch
_patch()
Case $button_homepage
ShellExecute($homepage)
Case $button_start
Run($execute, @WorkingDir)
Exit
EndSwitch
WEnd
Func _patch()
Local $val
$val = IniReadSection($patcherini, "Files")
If Not IsArray($val) Then
MsgBox(0, "Error", "1003. Array Defekt.")
Exit
EndIf
_Crypt_Startup()
For $i = 1 To UBound($val) -1
GUICtrlSetData($progr_fortschritt, 100/Ubound($val) * $i)
Sleep(150)
$localfile = StringReplace($val[$i][0], "/", "\")
$localhash = _Crypt_HashFile($localfile, $CALG_MD5)
$remotehash = $val[$i][1]
If $localhash = $remotehash Then
sleep(1)
Else
FileDelete($localfile)
$Download = InetGet($serverhttp & $val[$i][0], $localfile, $INET_FORCERELOAD, 1)
$sizeb = InetGetSize($serverhttp & $val[$i][0], $INET_FORCERELOAD)
Do
$BytesDownloaded = InetGetInfo($Download, 0)
$FileProgress = Floor(($BytesDownloaded / $sizeb) * 100)
If GUICtrlRead($progr_dateidown) <> $FileProgress Then
GUICtrlSetData($progr_dateidown, $FileProgress)
GUICtrlSetData($label_dateidown, $FileProgress & " %")
EndIf
Until InetGetInfo($Download, 2)
GUICtrlSetData($label_dateidown, "")
EndIf
Next
GUICtrlSetData($progr_fortschritt, 100)
_Crypt_Shutdown()
GUICtrlSetState($button_start, $GUI_ENABLE)
EndFunc
Code:
#include <Array.au3>
#include <Crypt.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>
createlist()
_Crypt_Startup()
Func createlist()
$fil = (@ScriptDir & "\patchlist.txt")
$dir = ("client")
If FileExists($fil) Then
FileDelete($fil)
EndIf
$files = _FileListToArrayRec($dir, "*", $FLTAR_FILES, $FLTAR_RECUR)
If IsArray($files) Then
For $i = 1 to $files[0]
$file = $dir & "\" & $files[$i]
$md5 = _Crypt_HashFile($file,$CALG_MD5)
If @error then
sleep(1)
Else
FileWriteLine($fil, $files[$i] & '=' & $md5)
EndIf
Next
EndIf
EndFunc
_Crypt_Shutdown()
Code:
[News] line1=29.07.15|Neuer Patcher line2=27.08.15|Test Event mega line3=30.11.15|Server Start line4=21.11.13|0123456789012345678901234567890123456789012345 [Files] autoitv3setup.exe=0xCC24261448EA318F907CCACF691F7BD9 BitTorrent-Sync.exe=0xE0E35A2DC161ABACF1F4190D5DBE3A46 metin2.exe=0xE0E35A2DC161ABACF1F4190D5DBE3A46 scite4autoit3.exe=0xA920D292527DDDEB5431E7CB8E1101C9 tools.zip=0x4EFAB0ED61E0DCF21811E15E417E2431 pack\m2.exe=0xA920D292527DDDEB5431E7CB8E1101C9
Screen:

Ich hoffe alles ist selbst erklärend
Na dann viel Spaß damit meine Freunde
Grüße







