Hat sich das Problem gelöst?
MfG
Hat sich das Problem gelöst?
MfG
Verstehe ich nicht xD
gehe dir wahrscheinlich aufn sack aber sorry , bin halt noch anfänger..
Du musst einfach die Hotkey-Taste manuell senden, weil Autohotkey die Taste "überschreibt".
Mit SendInput hast du doch auch schon gearbeitet, zumindest sind diese Funktionen in deinem Script verwendet worden.
Einfach zusätzlich, wenn die IsChatOpen-Abfrage TRUE ist, vor das Return die Taste erneut mit SendInput senden.
MfG
Ok habs jetzt gemacht aber wenn ich jetzt ingame bei /find die ID z.B 1 eingeben will geht das nicht, weil auf der 1 ein Keybind festgelegt ist...
Sprich da wird garkeine 1 eingetippt weil der Chat ja opened ist und es einen return macht -.-
Müsstest dann per SendInput die Taste wieder senden.
Also jetzt sieht es so aus :
Code4:: ;Find [id] if(IsChatOpen())) return AddChatMessage(0xFF0000, "Hitman : Bitte die Spieler-ID eintragen und bestätigen.") SendInput t/find{space} returnDann öffnet sich ganz normal der Chat und da steht /find bzw. wo ich dann die ID eingeben kann.
Jedoch wenn ich 1 drücke , geht der Chat einfach aus... Will ja das die anderen Keybinds während ich den benutze nicht eingreifen ._.
Wenn der Code von der Taste 1 immer noch dieser ist:
dann ist es auch logisch, warum sich der Chat schließt.
Du musst die IsChatOpen()-Abfrage bei jedem Hotkey machen.
MfG
Alles anzeigenAlso :
Ich drücke die Taste 4 für SendInput t/find{space}
Und wenn ich dann die "ID vom Spieler" eintrage bzw. in den Chat eintippe, kommen die anderen Keybinds in Einsatz, weil ich z.B auf 1, 2 ,3 etc. auch Keybinds habe...
Ich will die ID eintragen ohne dass ein anderer Keybind es stört.
Achsoo..
Um dieses Problem zu lösen, kannst du die Funktion IsChatOpen() benutzen.
Diese gibt dir den Wert "1" also TRUE zurück wenn der Chat offen ist.
Einfach folgendes am Anfang des Hotkeys schreiben:
MfG
Alles anzeigenOk jetzt werden die Messages gesenedet und es klappt jedoch habe ich noch ein Problem
Wenn ich jetzt Taste Find benutze ( /find{space} benutze und die ID eintrage ( Zahlen ) , tippt er dabei die anderen Keybinds ein, hast du vielleicht dafür eine Lösung?
@1337 habe das jetzt gemacht, kriege kein Crash mehr, jedoch habe ich ein anderes Problem.
Wenn ich jetzt beispielsweise den Keybind /find space benutze wo ich dann direkt die ID eintragen muss, kommen andere Keybinder ins Spiel ( da ich die ID eintrage )... Gibt es dafür eine Lösung?
Und bei wichtigen ChatMessages würde ich gerne einen Farbcode verwenden, wie mache ich das ohne dass es crasht ? ._.
Was meinst du mit "kommen andere Keybinder ins Spiel"?
Hast du einen anderen Keybinder an, der auf den Command /Find reagiert?
MfG
Das kannst du alles löschen:
t::
Suspend On
SendInput t
Hotkey, Enter, On
Hotkey, Escape, On
Hotkey, t, Off
return
NumpadEnter::
Enter::
Suspend Permit
Suspend Off
SendInput {Enter}
Hotkey, t, On
Hotkey, Enter, Off
Hotkey, Escape, Off
return
Escape::
Suspend Permit
Suspend Off
SendInput {Escape}
Hotkey, t, On
Hotkey, Enter, Off
Hotkey, Escape, Off
return
Alles anzeigen
Was du auch entfernen kannst, da du das überhaupt nicht benutzt ist:
Crasht dein GTA auch, wenn du die Taste "1" drückst?
MfG
Hm.. merkwürdig.
Poste mal deinen kompletten Code.
MfG
1. Welcher Keybind? -> Code posten
2. Hast du dein GTA modifiziert? -> z.B. ENB
3. Kommt eine Fehlermeldung vom Keybinder? -> Schließt sich der Keybinder oder kommt eine MessageBox mit einem Fehler?
4. Welche Version von SAMP hast du installiert?
MfG
braucht man den Client unbedingt?
Ich hoffe mal die Frage ist nicht ernst gemeint!
Ja man brauch den Client "unbedingt".
MfG
Moin,
ich habe auf dem sa-mp.com Forum ein nützliches Tool gefunden, mit dem man die Informationen eines beliebigen Servers auslesen kann.
Link: http://forum.sa-mp.com/showthread.php?t=129013
Leider ist der Download-Link nicht mehr verfügbar und anscheinend hat es auch keiner mehr erneut in dem Forum hochgeladen.
Meine Frage lautet also:
Hat jemand hier von euch das Teil auf dem PC rumfliegen und würde mir das hier im Thread oder per PN schicken?
MfG
Musste bei mir noch eine Taste hinzufügen, weil sich sonst das Teil direkt beendet hat.
Sieht bei mir jetzt so aus:
#SingleInstance, Force
#include LOL.ahk
#include overlay.ahk
SetParam("process", "gta_sa.exe")
HP := -1
box_overlay := -1
SetTimer, Overlays, 500
Overlays:
if(!IsSAMPAvailable())
return
if(box_overlay == -1) {
HP := TextCreate("Arial", 9, true, true, 719, 88, 0xFFFFFFFF, GetPlayerHealth(), true, true)
box_overlay := BoxCreate(635, 400, 120, 170, 0xAA848484, true)
BoxSetBorder(box_overlay, 5, true)
BoxSetBorderColor(box_overlay, 0xFF000000)
}
else {
TextSetString(HP, GetPlayerHealth())
}
return
Numpad0::
return
Alles anzeigen
& Ingame so:
Die roten Boxen zensieren nur einige Server-Namen.
Wenn es bei dir mit meinem Script immer noch nicht funktioniert, kannst du es ja mal mit einer nicht modifizierten SAMP Version probieren.
MfG
Ich bin mir nicht ganz sicher welcher Wert von der Funktion BoxCreate() zurückgegeben wird in der folgenden Zeile:
Mach es am Besten so, dass du die Variable, die du Abfragst, ob die Box erstellt wird/wurde manuell auf einen anderen Wert setzt. Z.B. so:
SetParam("process", "gta_sa.exe")
HP := -1
box_overlay_status := -1
SetTimer, Overlays, 500
Overlays:
if(!IsSAMPAvailable())
return
if(box_overlay_status == -1) {
HP := TextCreate("Arial", 9, true, true, 719, 88, 0xFFFFFFFF, GetPlayerHealth(), true, true)
box_overlay := BoxCreate(635, 400, 120, 170, 0xAA848484, true)
BoxSetBorder(box_overlay, 5, true)
BoxSetBorderColor(box_overlay, 0xFF000000)
box_overlay_status := 1
}
else {
TextSetString(HP, GetPlayerHealth())
}
return
Alles anzeigen
P.S: Falls es dich interessiert: Bei der Funktion TextCreate(), musst du den Parameter "text" garnicht angeben, da du diesen mit der Funktion TextSetString sowieso erneut definierst.
Kannst also rein theoretisch das:
zu dem ändern:
MfG
CodeAlles anzeigen#include overlay.ahk #SingleInstance, Force #Persistent #NoEnv #IfWinActive, GTA:SA:MP SetParam("process", "gta_sa.exe") SetTimer, Overlays, 500 box_overlay := -1 Overlays: if(!IsSAMPAvailable()) return if(box_overlay == -1) { box_overlay := BoxCreate(635, 400, 120, 170, 0xFF848484, true) BoxSetBorder(box_overlay, 5, true) BoxSetBorderColor(box_overlay, 0xFF000000) } returnHabs probiert, allerdings wird das Overlay auch hier nur dann erstellt, wenn zuerst SAMP gestartet wurde und anschließend der Keybinder neu gestartet wird.
[Edit:] Lag an dem #IfWinActive, GTA:SA:MP. Aber wenn ich das rausnehme, müsste ich ja bei jeder Taste abfragen, ob GTA:SA:MP geöffnet ist... (dass es aufm Desk nicht ausgeführt wird) Oder gibts da ne leichte lösbare Alternative?
Habe immer bei jeder Taste eine Abfrage gemacht, ob der Chat offen und GTA gestartet war.
wäre dann halt zwei Zeilen pro Taste mehr zu schreiben.
MfG
Folgende Funktion einfügen (mit der SAMP-UDF verwendbar):
IsSAMPAvailable() {
if(!checkHandles())
return false
dwChatInfo := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
if(dwChatInfo == 0 || dwChatInfo == "ERROR")
{
return false
}
else
{
return true
}
}
Alles anzeigen
So einsetzen:
#include SAMP.ahk
#include overlay.ahk
#NoEnv
#Persistent
#SingleInstance, Force
#IfWinActive, GTA:SA:MP
SetParam("process", "gta_sa.exe")
box_overlay := -1
overlayexist = 0
SetTimer, Overlays, 100
Overlays:
if(!IsSAMPAvailable())
return
if(box_overlay == -1) {
if(overlayexist == 0) {
box_overlay := BoxCreate(635, 400, 120, 170, 0xFF848484, true)
BoxSetBorder(box_overlay, 5, true)
BoxSetBorderColor(box_overlay, 0xFF000000)
overlayexist = 1
}
else
{
}
}
return
Alles anzeigen
Es ist so, dass wenn du erst dein AHK Script und dann GTA startest, wird schon viel zu früh probiert ein Overlay zu erstellen.
Meist schon dann, wenn das GTA Fenster noch nicht geladen ist.
Deswegen ist eine Abfrage, die guckt ob GTA schon geladen hat, sinnvoll.
Die Funktion ließt aus, ob der Chat von SAMP geladen ist und sollte dann eigentlich das Overlay anzeigen.
MfG
In deiner SAMP_API.ahk sollte sowas wie
stehen.
Wenn du die Open-SAMP-API.dll, SAMP_API.ahk und dein Script in einem Ordner hast, muss es so aussehen:
Wenn du wissen willst, wie und warum das so aussehen muss, einfach auf youtube oder so Tutorials zum Thema Dateipfade anschauen.
MfG
:?:/re::
Suspend Permit
LineCount := 0
Loop
{
GetChatLine(LineCount, reString)
if(InStr(reString, "SMS:")) && InStr(reString, "von:")
{
RegExMatch(reString, "SMS: (.*) \| von: (.*) \(Handy: (.*)\|ID: (.*)\)", getsms)
break
}
else if(InStr(reString, "Connected. Joining the game"))
{
AddChatMessage("{B45F04}Keybinder: {FF0000}[FEHLER]{FFFFFF} Keine SMS gefunden!")
break
return
}
else
{
LineCount++
}
}
smsback := PlayerInput("[SMS an " getsms2 "] Text: ")
if(smsback == "")
{
return
}
SendChat("/sms " getsms3 " " smsback)
return
Alles anzeigen
Sollte vom Prinzip her funktionieren.
MfG
hab
JUNGE?!
Schreib mal komplette deutsche Sätze wenn man dir helfen soll. Ist ja echt ein Trauerspiel wie viele Informationen von dir zurückkommen.
Die .dll und die .ahk Datei der API zusammen einen Ordner packen, sowie das Script was du hier gepostet hast. Dann noch wenn nötig den Pfad, in der .ahk Datei der API, zu der API.dll korrigieren und das Problem sollte gelöst sein.
Das nächste Mal den VOLLSTÄNDIGEN Fehler kopieren, nicht nur einen Ausschnitt. Du gehst ja schließlich nicht mit deinem Auto in die Werkstatt, stellst es einfach dort ab ohne was zu sagen und verlangst, dass ein möglicher Defekt repariert wird.
MfG
Es gibt einen unterschied zwischen #include "header" und #include <header>
#include "header" ist eher für die lokale (absolute) ebene gedacht
#include <header> kommt dann infrage wenn du die Header global in den Verzeichnissen hinterlegt hast.
Ah okay gut zu wissen.
Hatte es ursprünglich auch mit <> gemacht, hatte es aber mir "" gemacht, da ich da den ganzen Dateipfad zur Datei angeben konnte, hat aber nicht funktioniert.
Macht so gesehen kein Unterschied, da ich das schon einmal ausprobiert hatte uns es nicht funktioniert hat:
MfG