Beiträge von dewey
-
-
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:Code
Alles anzeigenSetParam("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
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
-
Code
Alles 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) } return
Habs 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):
Code
Alles anzeigenIsSAMPAvailable() { if(!checkHandles()) return false dwChatInfo := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR) if(dwChatInfo == 0 || dwChatInfo == "ERROR") { return false } else { return true } }
So einsetzen:
C
Alles anzeigen#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
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
-
Code
Alles anzeigen:?:/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
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
-
Abend,
ich möchte die DirectX SDK in ein C++ Projekt einbinden.
Für meine Zwecke benötige ich vorerst nur die "d3dx9.h" und die "d3dx9.lib".
Allem Anschein nach, macht es aber gar keinen Unterschied, ob ich die Include- und Bibliotheksverzeichnisse auf die DirectX SDK ändere, sowie die d3dx9.lib in den zusätzlichen Abhängigkeiten einfüge.
Installiert habe ich Visual Studio 2015 und die Microsoft DirectX SDK (June 2010).Wenn ich mein Hallo Welt Projekt kompiliere bekomme ich folgendes Ausgegeben:
Die VC++ Include- und Bibliotheksverzeichnisse:
Die zusätzlichen Abhängigkeiten:
Hat jemand eine Lösung für das Problem?
MfG
-
-
da wird nur "unknown command" angezeigt.
Ich spiele auf RGN falls das was ändert.
C
Alles anzeigenSendMode, Input #Warn #UseHook #NoEnv #SingleInstance, force SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. #include api.ahk :?:/overlayoff:: Suspend Permit DestroyAllVisual() ;Schalltet alle Overlays ab SetTimer, Alles, off SetTimer, hpoverlay, off return Numpad0:: Suspend Permit ;;;;;;;;;;;;;;;;;;;;;;Orts anzeige;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; zone := TextCreate("Arial", 15, false, false, 650, 430, 0xFFFFFFFF, "", true, true) ;Schrifftart ;;;;;;;;;;;;;;;;;;;;;HP Overlay;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; hp := TextCreate("Arial", 9, false, false, 713, 90, 0xFFFFFFFF, "", true, true) ;Das selbe, nur andere Posi und Variable Settimer, Alles, 150 ;Die Zeit der Abfragen SetTimer, hpoverlay, 20 return hpoverlay: #IfWinActive, GTA:SA:MP { TextSetString(hp, GetPlayerHealth()) } return Alles: #IfWinActive, GTA:SA:MP { GetZoneName(Zone) TextSetString(zone, Zone) } return
Statt dem Command ist es jetzt Numpad0 zum aktivieren des Overlays
MfG
-
Hab das alles mal etwas vereinfachter umgeschrieben. Das was du mit TextSetPos und TextSetColor machst, wäre nur nötig, wenn du bei einem bereits bestehenden TextCreate-String etwas ändern würdest. Da du aber ein paar Zeilen weiter oben die Funktion TextCreate aufrufst und dort alles definieren kannst, ist das eigentlich nur verschwendeter Platz und unnötig das doppelt zu definieren.
C
Alles anzeigenSendMode, Input #Warn #UseHook #NoEnv #SingleInstance, force SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. #include api.ahk :?:/overlayoff:: Suspend Permit DestroyAllVisual() ;Schalltet alle Overlays ab SetTimer, Alles, off SetTimer, hpoverlay, off return :?:/overlay:: Suspend Permit ;;;;;;;;;;;;;;;;;;;;;;Orts anzeige;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; zone := TextCreate("Arial", 15, false, false, 650, 430, 0xFFFFFFFF, "", true, true) ;Schrifftart ;;;;;;;;;;;;;;;;;;;;;HP Overlay;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; hp := TextCreate("Arial", 9, false, false, 713, 90, 0xFFFFFFFF, "", true, true) ;Das selbe, nur andere Posi und Variable Settimer, Alles, 150 ;Die Zeit der Abfragen SetTimer, hpoverlay, 20 return hpoverlay: #IfWinActive, GTA:SA:MP { TextSetString(hp, GetPlayerHealth()) } return Alles: #IfWinActive, GTA:SA:MP { GetZoneName(Zone) TextSetString(zone, Zone) } return
Wenn du das Script jetzt startest und im Chat /overlay eingibst, sollte das Overlay in der Theorie angezeigt werden.
MfG
-
Danke,
Jetzt findet er die api.dll nicht^^
Dann einmal die API.dll, die API.ahk und die Datei, die dein Script beinhaltet, in einen Ordner packen.
Probier das mal aus.
Wenn das nicht funktionieren sollte, bitte den kompletten Quellcode der API.ahk hier posten.MfG
-
zu
Um eine Zeile mit einem Kommentar zu versehen musst du ein Semikolon davor setzen.
Ein Bereich über mehrere Zeilen musst du am Anfang mit "/*" und am Ende mit "*/" Kennzeichnen.
(ohne die Anführungszeichen)MfG
-
Text Show gibt es nicht mehr
Richtig und Falsch, die Funktion heißt einfach nur TextSetShown().
EDIT:
Beispiel um ein Text zu erstellen:CodeNumpad0:: TextString := TextCreate("Arial", 6, false, false, 720, 91, 0xFFFFFFFF, "100", true, true) TextSetString(TextString, "Hallo Welt") return
Was du bei der Funktion TextCreate() für einen Text einsetzt ist relativ egal, da du diesen noch einmal in der Funktion TextSetString() definieren musst.
MfG
-
Ja, das wäre unsicher, du musst es so schreiben:
C
Alles anzeigenvoid PingUpdateLabel() { while (true) { ping = Convert.ToString(PingTimeAverage("google.de", 4)); if (this.label1.InvokeRequired) { SetTextCallback d = new SetTextCallback(setPing); this.Invoke(d, new object[] { ping }); } else { this.label1.Text = ping; } Thread.Sleep(500); } } private void setPing(string ping) { this.label1.Text = ping; }
Danke, funktioniert einwandfrei!
Hatte die Funktion SetTextCallback noch nicht definiert gehabt, musste mir da was aus dem Internet rausziehen:Habe keine Fragen mehr zu dem Thema, der Thread kann geschlossen werden!
MfG
-
Habe mir auf YT ein Tutorial rausgesucht:
Externer Inhalt www.youtube.comInhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.Dabei ist folgendes zustande gekommen:
C#
Alles anzeigenusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Diagnostics; using System.Net.NetworkInformation; using System.Threading; namespace CSharp_BAWS { public partial class Form1 : Form { string ping; Thread t; public static double PingTimeAverage(string host, int echoNum) { long totalTime = 0; int timeout = 120; Ping pingSender = new Ping(); for (int i = 0; i < echoNum; i++) { PingReply reply = pingSender.Send(host, timeout); if (reply.Status == IPStatus.Success) { totalTime += reply.RoundtripTime; } } return totalTime / echoNum; } public Form1() { InitializeComponent(); //PingUpdateLabel(); t = new Thread(PingUpdateLabel); t.Start(); } void PingUpdateLabel() { while (true) { ping = Convert.ToString(PingTimeAverage("google.de", 4)); label1.Text = ping; Thread.Sleep(500); } } } }
Jetzt kommt folgender Fehler: -
Guten Abend,
Das Problem ist relativ selbsterklärend. Ich habe eine Funktion, die Aufgerufen wird, wenn das Ganze startet.
Wenn dies mache, sagt Visual Studio, dass die Anwendung zwar läuft, aber man sieht das Form-Fenster nicht.
Ich vermute mal, dass es an der while Schleife liegt, weiß aber nicht genau, wie ich das Problem lösen kann.Hier mein Code:
Code
Alles anzeigenpublic Form1() { InitializeComponent(); PingUpdateLabel(); } public void PingUpdateLabel() { while (true) { ping = Convert.ToString(PingTimeAverage("google.de", 4)); label1.Text = ping; Thread.Sleep(500); } }
Hoffe jemand würde mir hierbei helfen
MfG
-
Hallo,
leider komme nicht nicht mehr auf meinen teamspeak server drauf, da immer wenn ich mich mit dem Server verbinde, die Nachricht:
"Von Server getrennt (convert error)" kommt.
Ich konnte ergoogeln, dass ich die Hostnachrichten-Modus ändern muss, was ich auch getan habe. Er steht jetzt auf "in popup anzeigen".
Der Fehler bleibt weiterhin bestehen. Worin könnte das Problem liegen?MfG
-
Shadooow!! Krass mal was von dir zu hören, nach so einer langen Zeit.
War damals auf dem in der Vorgeschichte erwähnten Server der Spieler "LEZIK".Hoffe man sieht, dass ihr auch mit der Server-Werbung, die User erreicht, die sich wirklich für so eine Art von Server interessieren.
Ich kann nur sagen, dass Shadow mit einer der neutralsten Personen ist und sich nicht von anderen beeinflussen lässt.
Mit seiner neutralen Art hat er so gut wie es eben möglich war einen Kompromiss zwischen der Community und dem "korrupten Serverleiter" gefunden.Auch wenn es vielleicht noch nicht den Eindruck macht, sollte man dem Projekt eine Chance geben.
MfG