Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

SAMP Keybinder mit Patchserver


  • Please log in to reply
23 replies to this topic
GYJohn
  • Members
  • 20 posts
  • Last active: Oct 01 2016 11:53 AM
  • Joined: 28 Sep 2014

Guten Abend,

ich finde im www keine Anleitung wie man einen SAMP Keybinder mit Patchserver erstellen kann.

Sprich einen Server auf den man seine Keybinder.exe läd und beim Start von Keybinder wird geprüft ob Änderungen im Quellcode sind, wenn ja wird die Keybinder.exe durch die neue ersetzt.

Ich weiß dass es so etwas gibt, da es dies auf größeren SAMP Servern gibt.

 

Kann mir da jemand eine Anleitung schicken, schreiben, oder mirs erklären?

 

Wäre echt klasse.

 

 

Liebe Grüße

 

GYJohn



Bruttosozialprodukt
  • Members
  • 457 posts
  • Last active: Oct 18 2015 08:47 AM
  • Joined: 20 Oct 2012

Ich weiß leider nicht was SAMP ist, ich vermute mal ein Spiel?
Was du auf jeden Fall erst einmal brauchst ist:
-Webspace auf welchen du php scripts laden kannst
-Eine Domain
(sowas bekommst du zB bei Strato, einfach googlen)

Via FTP lädst du dann dieses php script in deinen Webspace:
(das machst du zB mit FileZilla)
patchcheck.php

<?php
    $latestVersion = "1.1"; //aktuell neuste version
    $clientsVersion = htmlspecialchars($HTTP_RAW_POST_DATA); //empfange die versionsnummer vom ahk script
    if ($latestVersion != $clientsVersion) //wenn die ahk scrpt version nicht der neusten version entspricht
        echo "KeyBinder1.1.exe"; //dann schicke dem script den dateinamen zur neusten version
?>

Die neueste Version deines kompilieten Scripts musst du natürlich auch immer in den Webspace laden.
In das php script musst du dann natürlich noch die neuste version eintragen (latestVersion) und unten muss immer der dateiname der neusten version stehen.
Wir tun hier mal so als ob die neuste version 1.1 wäre und der neuste keybinder KeyBinder1.1.exe heißt.

Sagen wir mal deine domain heißt gyjohn.net. Deine ahk scripts sollten dann in etwa so aussehen:

myVersion := "1.0" ;die version dieses scripts
If %1%
    FileDelete, %1% ;Lösche die alte version, wenn gerade geupdated wurde
Update(myVersion) ;versionsprüfung und ggf updaten

TrayTip,, Du hast jetzt die neuste version.
Sleep, 4000

;hier dann code für die keybindings und dein restlicher code
;...

Update(myVersion) {
    HttpObj := ComObjCreate("WinHttp.WinHttpRequest.5.1")
    url := "http://gyjohn.net/patchcheck.php"
    HttpObj.Open("POST", url)
    HttpObj.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0")
    
    HttpObj.Send(myVersion)
    newFile := HttpObj.ResponseText ;der dateiname der neuen version, falls es eie neue gibt
    If InStr(newFile,".exe") { ;wenn wir den namen einer exe datei bekommen haben
        TrayTip,, Updating...
        HttpObj.Open("GET", "http://gyjohn.net/" newFile) ;neue version in den ram laden:
        HttpObj.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0")
        HttpObj.Send()
        ADODBObj := ComObjCreate("ADODB.Stream") ;neue version aus dem ram aud die festplatte laden:
        ADODBObj.Type := 1
        ADODBObj.Open()
        ADODBObj.Write(HttpObj.ResponseBody)
        ADODBObj.SaveToFile(A_ScriptDir "\" newFile, 2)
        ADODBObj.Close()
        Run, %newFile% "%A_ScriptFullPath%" ;neue version starten und den pfad zur alter übergeben, sodass die alte gelöscht werden kann
        ExitApp ;alte version beenden
    }
}

Das script wird jetzt am anfang immer gucken ob es ein update braucht und falls ja, so wird die neue version runtergeladen, die alte version von der neuen gelöscht und die neue version wird automatisch gestartet.

Wenn du eine neue Version geschrieben hast, dann musst du diese halt immer in deinen Webspace laden und das php script entsprechend ändern.



GYJohn
  • Members
  • 20 posts
  • Last active: Oct 01 2016 11:53 AM
  • Joined: 28 Sep 2014
Okey also das obere Script aufen Wevserver und das undere Script ist praktisch mein Keybinder der lokal aufem Pc ist und die neuste Version aufem Webspace.
Muss mal heute Abend schauen ob ich dass hinbekomm.
Wird die neue Keybinder Exe dann am selben Punkt gespeichert? Also die neue?
Und aufen Webserver muss ja nich dass Keybinderscript sondern die compilierte exe stimmts?

Vielen Dank für deine Mühe! Und wenns klappt dann 1000x mehr danke haha

Liebe Grüsse
John

Bruttosozialprodukt
  • Members
  • 457 posts
  • Last active: Oct 18 2015 08:47 AM
  • Joined: 20 Oct 2012

Genau, das erste Script als patchcheck.php auf den Webserver laden und das zweite script ist dann dein Keybinder (oder ein anderes beliebiges AHK Script) mit Auto-Update-Funktion. Vor dem hochladen natürlich kompilieren und am besten auch nur die kompilierte version ausführen, sonst würde das script bei erfolgreichem Update ja gelöscht werden.



GYJohn
  • Members
  • 20 posts
  • Last active: Oct 01 2016 11:53 AM
  • Joined: 28 Sep 2014
Oke ich versuch dass mal heute Abend hast du Skype? Falls ich was nich hinbekomm oder noch was wissen mag?
Hier ists so umständlich :3

GYJohn
  • Members
  • 20 posts
  • Last active: Oct 01 2016 11:53 AM
  • Joined: 28 Sep 2014

lgj186a586n.jpg



Bruttosozialprodukt
  • Members
  • 457 posts
  • Last active: Oct 18 2015 08:47 AM
  • Joined: 20 Oct 2012
Kann es sein, dass die alte und die neue Datei den selben Namen haben? So wäre das nämlich nicht möglich, dann müsste die Datei sich ja löschen bevor sie die neue runterladen kann...
 
Falls es dann immer noch nicht gehen sollte, könntest du auch versuchen statt diesem Codebereich hier:
HttpObj.Open("GET", "http://gyjohn.net/" newFile) ;neue version in den ram laden:
HttpObj.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0")
HttpObj.Send()
ADODBObj := ComObjCreate("ADODB.Stream") ;neue version aus dem ram aud die festplatte laden:
ADODBObj.Type := 1
ADODBObj.Open()
ADODBObj.Write(HttpObj.ResponseBody)
ADODBObj.SaveToFile(A_ScriptDir "\" newFile, 2)
ADODBObj.Close()
einfach nur das hier zu schreiben:
FileDelete, % newFile
UrlDownloadToFile, % "http://gyjohn.net/" newFile, % newFile
Funktioniert aber leider nicht bei jedem Webspace-Anbieter.

GYJohn
  • Members
  • 20 posts
  • Last active: Oct 01 2016 11:53 AM
  • Joined: 28 Sep 2014

Mh also hab den Namen der Exe aufem Webspace jz mal geändert.

Hat nichts gebracht.

 

Den Quellcode ersetzen hat auch nichts gebracht.

Hoste bei Nitrado wenn man das hier sagen darf?!

 

Also er läd schon den neuen runter aber iwie nur 1/4 und bricht dann ab..

Kommen viele Fehlermeldungen.

 

 

Kannste dir das nich mal anschauen?

Wär echt klasse.



Bruttosozialprodukt
  • Members
  • 457 posts
  • Last active: Oct 18 2015 08:47 AM
  • Joined: 20 Oct 2012

Öffne die runtergeladene exe Datei mal mit einem Texteditor und sag uns ob du einen HTML Quellcode siehst oder oder ob da nur komische Zeichen zu sehen sind.

Wenn du mir die url zum php script gibst guck ich mir das gerne mal an.

 

Hast du den Dateinamen von der exe eigentlich auch unten im php script entsprechend eingetragen?



Bruttosozialprodukt
  • Members
  • 457 posts
  • Last active: Oct 18 2015 08:47 AM
  • Joined: 20 Oct 2012

oops, hab aus versehen 2 fach gepostet...



GYJohn
  • Members
  • 20 posts
  • Last active: Oct 01 2016 11:53 AM
  • Joined: 28 Sep 2014

gaming-yolution.com/dl/patchcheck.php

 

Kann leider nicht schauen obs Codiert oder HTML Code ist.

Ich editier das so um 17:30Uhr hier rein.

 

Kannst du vllt per Teamviewer ma drüber schauen?

 

 

Sou moinsen^^ :D

Hier der HTML Code von der angefangen runtergeladenen EXE

 

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /AdminKeybinder1.exe was not found on this server.</p>
</body></html>


Bruttosozialprodukt
  • Members
  • 457 posts
  • Last active: Oct 18 2015 08:47 AM
  • Joined: 20 Oct 2012

Okay, das habe ich mir schon gedacht. Die Datei wurde auf dem Server nicht gefunden.

Also entweder hast du die Domain nicht richtig ins AHK script eingetragen oder die Datei DeineDomain.com/AdminKeybinder1.exe existiert einfach niht auf dem Server.

 

Hast du mal geschaut was passiert, wenn du DeineDomain.com/AdminKeybinder1.exe im Browser eingibst?



GYJohn
  • Members
  • 20 posts
  • Last active: Oct 01 2016 11:53 AM
  • Joined: 28 Sep 2014

Ehm oke nice.. 

http://gaming-yoluti...nKeybinder1.exe

Funktioniert wirklich nicht.

Aber die ist oben in dem Ordner und heißt auch so.



GYJohn
  • Members
  • 20 posts
  • Last active: Oct 01 2016 11:53 AM
  • Joined: 28 Sep 2014

So habs aufem vServer noch getestet. Genau dass selbe. 

Aber wenn ich jz http://5.45.98.152/d...eybinder1.1.exe eingeb gehts..

Nur der Patcher geht immer noch nicht.

 

Haste nich Teamviewer? Bitte



Bruttosozialprodukt
  • Members
  • 457 posts
  • Last active: Oct 18 2015 08:47 AM
  • Joined: 20 Oct 2012

So, das problem wird wohl sein, dass die Datei nicht im "Root" Verzeichnis auf dem Server liegt, sondern im Unterordner "dl".

Ich habe den Code mal entsprechend für dich abgeändert:

myVersion := "1.0" ;die version dieses scripts
If %1%
    FileDelete, %1% ;Lösche die alte version, wenn gerade geupdated wurde
Update(myVersion) ;versionsprüfung und ggf updaten

TrayTip,, Du hast jetzt die neuste version.
Sleep, 4000

;hier dann code für die keybindings und dein restlicher code
;...

Update(myVersion) {
    Static patchHost := "http://gaming-yolution.com/dl/"
    HttpObj := ComObjCreate("WinHttp.WinHttpRequest.5.1")
    url := patchHost "patchcheck.php"
    HttpObj.Open("POST", url)
    HttpObj.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0")
    
    HttpObj.Send(myVersion)
    newFile := HttpObj.ResponseText ;der dateiname der neuen version, falls es eie neue gibt
    If InStr(newFile,".exe") { ;wenn wir den namen einer exe datei bekommen haben
        TrayTip,, Updating...
        HttpObj.Open("GET", patchHost newFile) ;neue version in den ram laden:
        HttpObj.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0")
        HttpObj.Send()
        ADODBObj := ComObjCreate("ADODB.Stream") ;neue version aus dem ram aud die festplatte laden:
        ADODBObj.Type := 1
        ADODBObj.Open()
        ADODBObj.Write(HttpObj.ResponseBody)
        ADODBObj.SaveToFile(A_ScriptDir "\" newFile, 2)
        ADODBObj.Close()
        Run, %newFile% "%A_ScriptFullPath%" ;neue version starten und den pfad zur alter übergeben, sodass die alte gelöscht werden kann
        ExitApp ;alte version beenden
    }
}

Ja ich hab sonst auch TeamViewer..