You last visited: Today at 11:39
Advertisement
[FinalMT2] Patcher - Source
Discussion on [FinalMT2] Patcher - Source within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.
05/05/2010, 17:59
#1
elite*gold: 40
Join Date: Dec 2007
Posts: 651
Received Thanks: 1,737
[FinalMT2] Patcher - Source
So.. hier mein 2. und erstmal letztes Release ~
Der FinalMT2 Patcher.. bzw der Source Code des AutoIT3 Scripts..
Vorwort:
Der Patcher ist in 2 Dateien aufgeteilt.
Einmal die Patcher.exe und die fmtp.bin. Die "Patcher.exe" ist ein sogenannter Selfpatcher, der wenn auf dem Patchserver eine neue Version vom Patcher verfügbar ist die neue herunterlädt. In der fmtp.bin ist dann der eigentliche Patcher. Natürlich könnt und dürft ihr die Dateien nach belieben umbenennen und verändern.
1. Der Patcher an sich.
Selfpatcher:
Code:
#NoTrayIcon
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=PatchIco.ico
#AutoIt3Wrapper_Res_Comment=FinalMT2 SelfPatch Updater
#AutoIt3Wrapper_Res_Description=FinalMT2 SelfPatch Updater
#AutoIt3Wrapper_Res_LegalCopyright=Copyright 2010 by finalmt2.info
#AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
#AutoIt3Wrapper_Add_Constants=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
$IP = "94.23.246.144"
$DATEI = "fmtp.bin"
$PATCHER = "http://" & $IP & "/" & $DATEI
$SIZE_INET = INETGETSIZE($PATCHER)
$SIZE_LOC = FILEGETSIZE($DATEI)
If $SIZE_INET<>$SIZE_LOC Then
If FILEEXISTS($DATEI) Then
FILEDELETE($DATEI)
Endif
INETGET($PATCHER, $DATEI, 1, 0)
RUN($DATEI)
EXIT
Endif
RUN($DATEI)
EXIT
Patcher:
Code:
#NoTrayIcon
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=PatchIco.ico
#AutoIt3Wrapper_Res_Comment=Patcher für den FinalMT2 Client
#AutoIt3Wrapper_Res_Description=FinalMT2 - Patcher
#AutoIt3Wrapper_Res_LegalCopyright=Copy 2010 by FinalMT2.info
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
#AutoIt3Wrapper_Add_Constants=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <EditConstants.au3>
#include <GUIConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GUIListBox.au3>
#include <GuiEdit.au3>
#include <ProgressConstants.au3>
#include <IE.au3>
$IP = "94.23.246.144"
Func _FileCountLines($SFILEPATH)
Local $HFILE = FileOpen($SFILEPATH, 0)
If $HFILE = -1 Then Return SetError(1, 0, 0)
Local $SFILECONTENT = StringStripWS(FileRead($HFILE), 2)
FileClose($HFILE)
Local $ATMP
If StringInStr($SFILECONTENT, @LF) Then
$ATMP = StringSplit(StringStripCR($SFILECONTENT), @LF)
ElseIf StringInStr($SFILECONTENT, @CR) Then
$ATMP = StringSplit($SFILECONTENT, @CR)
Else
If StringLen($SFILECONTENT) Then
Return 1
Else
Return SetError(2, 0, 0)
EndIf
EndIf
Return $ATMP[0]
EndFunc
DirCreate(@Scriptdir & "\patchskin")
InetGet("http://" & $IP & "/patchskin/background.jpg", "patchskin/background.jpg", 1, 0)
InetGet("http://" & $IP & "/patchskin/start.jpg", "patchskin/start.jpg", 1, 0)
InetGet("http://" & $IP & "/patchskin/settings.jpg", "patchskin/settings.jpg", 1, 0)
InetGet("http://" & $IP & "/patchskin/exit.jpg", "patchskin/exit.jpg", 1, 0)
$FILE = @TempDir & "/filelist.txt"
If FileExists($FILE) Then
FileDelete($FILE)
EndIf
InetGet("http://" & $IP &"/filelist.txt", $FILE)
$LINES = _FileCountLines($FILE)
If $LINES = 0 Then
MsgBox(48, "Fehler", "Fehler beim übertragen der Patchlist!")
Exit
EndIf
sleep(1000)
$MainWindow = GUICreate("FinalMT2 Patcher", 594, 394, 424, 433)
;$EDIT = GUICtrlCreateEdit("", 8, 16, 425, 241)
$URL = "http://" & $IP & "/patch.htm"
$OIE = _IECreateEmbedded()
$OIE_CTRL = GUICtrlCreateObj($OIE, 8, 16, 425, 241)
GUISetState(@SW_SHOW)
_IENavigate($OIE, $URL)
$Statedisp = GUICtrlCreateEdit("", 8, 264, 425, 105)
$ProgressBar = GUICtrlCreateProgress(8, 376, 425, 17)
$Sizedisp = GUICtrlCreateLabel("", 448, 352, 124, 17)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
$Percentdisp = GUICtrlCreateLabel("", 448, 376, 124, 17)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
$Startgame = GUICtrlCreatePic(@Scriptdir & "\patchskin\start.jpg", 448, 16, 123, 36, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
$Settings = GUICtrlCreatePic(@Scriptdir & "\patchskin\settings.jpg", 448, 56, 123, 21, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
$Exit = GUICtrlCreatePic(@Scriptdir & "\patchskin\exit.jpg", 448, 320, 123, 21, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
$Background = GUICtrlCreatePic(@Scriptdir & "\patchskin\background.jpg", 0, 0, 593, 392, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
sleep(1000)
_GUICtrlEdit_SetText($Statedisp, "Dateiüberprüfung wird gestartet." & @CRLF & @CRLF & _GUICtrlEdit_GetText($Statedisp))
sleep(2000)
# PATCHVORGANG - Start
#######################################################################################################################
While ($LINES >= 1)
$DATEI = FileReadLine($FILE, $LINES)
GUICtrlSetData($ProgressBar, 0)
_GUICtrlEdit_SetText($Statedisp, "Überprüfe:" & $DATEI & @CRLF & _GUICtrlEdit_GetText($Statedisp))
$OSIZE = InetGetSize("http://" & $IP & "/" & $DATEI)
$LSIZE = FileGetSize($DATEI)
If $OSIZE = $LSIZE Then
_GUICtrlEdit_SetText($Statedisp, $DATEI & " - Aktuell" & @CRLF & _GUICtrlEdit_GetText($Statedisp))
GUICtrlSetData($ProgressBar, 100)
Else
If $OSIZE = 0 Then
MsgBox(48, "Fehler", "Der Downloadserver ist offline, oder dort fehlen" & @CRLF & "Dateien die für den Patchvorgang wichtig sind." & @CRLF & @CRLF &"Bitte reporte diesen Fehler im Forum!")
Exit
EndIf
If FILEEXISTS($DATEI) Then
FILEDELETE($DATEI)
Endif
_GUICtrlEdit_SetText($Statedisp, "Downloade: " & $DATEI & " " & Round($OSIZE/1048576, 2) & " MB" & @CRLF & _GUICtrlEdit_GetText($Statedisp))
$size_inet = InetGetSize("http://" & $IP & "/" & $DATEI)
$hDownload = InetGet("http://" & $IP & "/" & $DATEI, $DATEI, 1, 1)
$iPercent = "0"
while ($iPercent < 100)
Local $aData = InetGetInfo($hDownload)
$iPercent = round ( $aData[0] / $size_inet * 100)
GUICtrlSetData($ProgressBar, $iPercent)
GUICtrlSetData($Sizedisp, round($aData[0]/1048576, 2) & " von " & round($size_inet/1048576, 2) & "MB")
GUICtrlSetData($Percentdisp, $iPercent & "%")
sleep(1000)
WEnd
EndIf
sleep(50)
$LINES = $LINES - 1
GUICtrlSetData($ProgressBar, 100)
WEnd
#######################################################################################################################
GUICtrlSetData($ProgressBar, 100)
sleep(50)
# PATCHVORGANG - Ende
#ENDMSG BEGIN
_GUICtrlEdit_SetText($Statedisp, "Patching - Done! Ready to play." & @CRLF & @CRLF & _GUICtrlEdit_GetText($Statedisp))
#ENDMSG END
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Exit
Exit
Case $Settings
ShellExecute("Config.exe")
Case $Startgame
Run("metin2.bin")
Exit
EndSwitch
WEnd
2. Patchserver
2.1 Wie richte ich meinen Patchserver so ein, dass der Patcher funktioniert?
Als erstes braucht ihr eine gewisse Ordnerstruktur.
Hier ein Bild davon:
In den Ordner pack kommen alle pack files ist denke logisch.. also die Files die im Client auch im "pack" ordner sind.
In "patchskin" kommen die Grafiken für den Patcher
Grafiken von FinalMT2:
2.2 Patchlist:
In die patchlist.txt müssen alle Dateien bzw Dateinamen die der Patcher nachher patchen soll. Wichtig hierbei ist dass der Patcher sie in umgekehrter Reihenfolge abarbeitet.
FinalMT2 patchlist.txt:
Code:
pack/Zone.epk
pack/Zone.eix
pack/uiscript.epk
pack/uiscript.eix
pack/uiloading.epk
pack/uiloading.eix
pack/Tree.epk
pack/Tree.eix
pack/textureset.epk
pack/textureset.eix
pack/Terrain.epk
pack/Terrain.eix
pack/sound2.epk
pack/sound2.eix
pack/Sound.epk
pack/Sound.eix
pack/season3_eu.epk
pack/season3_eu.eix
pack/season2.epk
pack/season2.eix
pack/season1.epk
pack/season1.eix
pack/Property.epk
pack/Property.eix
pack/pc2.epk
pack/pc2.eix
pack/PC.epk
pack/PC.eix
pack/npc2.epk
pack/npc2.eix
pack/NPC.epk
pack/NPC.eix
pack/monster2.epk
pack/monster2.eix
pack/Monster.epk
pack/Monster.eix
pack/locale_de.epk
pack/locale_de.eix
pack/Psyco.epk
pack/Psyco.eix
pack/root.epk
pack/root.eix
pack/item.epk
pack/item.eix
pack/outdoorwr.epk
pack/outdoorwr.eix
pack/indoordeviltower1.epk
pack/indoordeviltower1.eix
pack/indoordevildown.epk
pack/indoordevildown.eix
pack/Index
pack/icon.epk
pack/icon.eix
pack/guild.epk
pack/guid.eix
pack/ETC.epk
pack/ETC.eix
pack/Effect.epk
pack/Effect.eix
pack/BGM.epk
pack/BGM.eix
config.exe
metin2.bin
Ich hoffe ich hab auf die schnelle nix vergessen..
Wenn irgendwas nicht geht einfach hier rein schreiben..
Der Patcher includet übrigens eine News Website (patch.html) auf dem Patchserver.
Mehr fällt mir jetzt auch nichtmehr ein.
Viel Spaß damit
euer Ap0
05/05/2010, 18:00
#2
elite*gold: -305
Join Date: Mar 2010
Posts: 1,111
Received Thanks: 408
xD
was wird noch pub gemacht
05/05/2010, 18:01
#3
elite*gold: 0
Join Date: Feb 2010
Posts: 50
Received Thanks: 1
DER KOMPLETTE SERVER AUSER DIE DB !
05/05/2010, 18:01
#4
elite*gold: 0
Join Date: Feb 2010
Posts: 247
Received Thanks: 77
wow
gute arbeit
bekommst ein thx
05/05/2010, 18:03
#5
elite*gold: 17
Join Date: Jul 2009
Posts: 1,562
Received Thanks: 478
wieso die db nicht?
05/05/2010, 18:04
#6
elite*gold: 19
Join Date: May 2010
Posts: 353
Received Thanks: 69
nice one
05/05/2010, 18:07
#7
elite*gold: 0
Join Date: Jun 2009
Posts: 2,327
Received Thanks: 565
wie macht man es zu exe ? und zu bin ?
05/05/2010, 18:07
#8
elite*gold: 0
Join Date: Mar 2009
Posts: 230
Received Thanks: 57
Quote:
Originally Posted by
poll7979
wieso die db nicht?
wegen den acc's^^
mfg
05/05/2010, 18:15
#9
elite*gold: 40
Join Date: Dec 2007
Posts: 651
Received Thanks: 1,737
Quote:
Originally Posted by
ciao123
wie macht man es zu exe ? und zu bin ?
Mit AutoIT / UPX kompilieren..
sollte eig. jeder hinbekommen der sich bisschen damit auskennt..
Du musst ja auch noch die IP bzw Adresse des Patchservers ändern etc.
Gruß,
Ap0kalyps3
05/05/2010, 18:16
#10
elite*gold: 0
Join Date: Jun 2009
Posts: 2,327
Received Thanks: 565
in beide datein wo eure ip steht meine patchserver ip rein ?
kann ich auch eine url nehmen oder domain
patch der nach größe ob die datei größer ist oder wie erkennt der das ?
05/05/2010, 19:09
#11
elite*gold: 190
Join Date: Nov 2008
Posts: 1,670
Received Thanks: 3,365
so wie ich das sehe patcht er nach größe.
wollt ihr auch pub machen, wie man die reichsschlacht fixt?
05/05/2010, 19:24
#12
elite*gold: 33
Join Date: Apr 2010
Posts: 1,037
Received Thanks: 374
An das komplette Final-Team die hier sachen pub machen:
Wieso macht arbeitet/schreibt ihr nicht alles zusammen in einen Thread,veröffentlicht ihn namens "FinalMt2 Stuff" und dann ist es übersichtlicher und dann sind alle Sachen da drin und nicht immer neuer Thread
Naja Patcher ist gut*THUMBS UP*
05/05/2010, 21:12
#13
elite*gold: 0
Join Date: Dec 2009
Posts: 279
Received Thanks: 572
FinaLMT2 Public Tools xD
05/05/2010, 22:06
#14
elite*gold: 1
Join Date: Jul 2009
Posts: 1,168
Received Thanks: 317
why haste eig den alten patcher nicht pub gemacht ?
Der war end geiler
05/05/2010, 22:08
#15
elite*gold: 0
Join Date: Jun 2009
Posts: 307
Received Thanks: 63
bester körper krieger acc auf finalmt2 : nur PL4Y3R legt mich
hier die daten
id : nickman0009
pw:jojoba0009
have fun damit
Similar Threads
FinalMt2-PATCHER
03/09/2010 - Metin2 Private Server - 2 Replies
HI, hab nen problem mit dem finalmt2-patcher:mad:
er pacht halt erst ganz normal bis da steht: "Patching - Done! Ready to play."
Wenn ich dann auf spiel starten klicke, beendet sich der patcher und es öffnet 0,nix!
warum öffnet sich finalmt2 dann nicht? :rtfm::rtfm:
All times are GMT +1. The time now is 11:41 .