; Mit diesem Programm kann man stoppen, wieviel Zeit man in Minecraft verbracht hat. ; Die Zeit wird solange aufaddiert, bis das Programm beendet wird. Bei Neustart beginnt die Uhr wieder bei 0. ; Um zu erkennen, ob Minecraft aktiv ist (und nicht im Pausenmode oder ähnlich (auch Ofen-Ansicht usw. wird nicht gezählt!), ; werden 4 verschiedene Pixel überprüft. Stimmen dort die Farben, dann läuft Minecraft. ; Damit das funktioniert, müssen bestimmte Voraussetzungen erfüllt sein: ; - CJB Mod mit Extrainfo links oben in klein ohne Icons ; - Docm77 Basic 2.0 -Texture Pack ; PROBLEM (deshalb ist das Programm noch nutzlos): ; ======== ; nach etwas mehr als 17 Minuten beendet sich das Programm zuverlässig immer von selbst, entweder als exe oder per Debugger, ; dann laut einer Windows-Fehlermeldung von PureBasic unerwartet. ; Warum??? EnableExplicit Define EventID.l ; für das Ereignis, z.B. Klicken auf das Schließsymbol Define Color1 ; Color 1-4 enthalten die Pixelfarben der 4 Testpixel Define Color2 Define Color3 Define Color4 Define punkte.b ; Übereinstimmungslevel. Nur wenn alle Pixel übereinstimmen, ist dieser Wert maximal Define mconalt.b ; Gamemodes; wenn Minecraft aktiv ist, ist dieser Wert auf 1. ; Trennung in neu und alt, um Änderungen zu erkennen Define mconneu.b ; siehe mconalt Global sek.b ; Sekunden-Zähler für Minecraft-Spieldauer Global min.b ; Minuten-Zähler für Minecraft-Spieldauer Global std.b ; Stunden-Zähler für Minecraft-Spieldauer Define s.b ; Kurzzeitspeicher für Sekunden für Vergleich mit Date Define hDC ; für den Zeiger auf die Desktop-Grafik? mconalt = 0 ; Spiel anfangs aus mconneu = 0 sek = 0 ; Zeit anfangs anfangs auf 0 min = 0 std = 0 s = 0 ; Vergleichsekunden auf 0, d.h. keine Timeraktivierung Procedure zeitaus() ; hier wird die Zeit ausgegeben mit der Formatierung hh:mm:ss SetGadgetText(1,Right("00" + Str(std), 2) + ":" + Right("00" + Str(min), 2) + ":" + Right ("00" + Str(sek), 2)) EndProcedure CreateImage(1,30,30,32) ; Fensterausgabe If OpenWindow(0,0,1007,80,12,"MC-Uhr",#PB_Window_SystemMenu) TextGadget(1,55,0,50,14,"",0) StickyWindow(0,1) zeitaus() ; Spielzeit wird erstmalig ausgeben. Ist jetzt natürlich noch auf 0 ; Hauptschleife: Repeat EventID=WaitWindowEvent(100) ; 10 mal pro Sekunde abfragen hDC = GetDC_(0) ; eine API-Abfrage, die ich aus irgendeinem Programm aus dem Internet habe ; holt vielleicht ein Handle auf die Desktop-Grafik oder so Color1 = GetPixel_(hDC,898, 868) ; alle 4 Pixel holen - hier die Rüstung ganz rechts hell (geht nicht mehr wenn man voll ; aufgerüstet ist (Diamant-Rüstung) Color2 = GetPixel_(hDC,912, 871) ; hier Rüstung ganz rechts dunkel (siehe drüber) Color3 = GetPixel_(hDC,598, 944) ; Erfahrungsleiste dunkel links Color4 = GetPixel_(hDC,4, 39) ; Weiß von Coords links oben von CJB-Mod StartDrawing(WindowOutput(0)) punkte = 0 ; für Pixeltest zunächst mal alle Zähler auf 0 ; hier werden die Pixelwerte mit den nötigen Werten verglichen und entweder ein rotes Quadrat (nicht identisch) oder ; ein grünes Quadrat (identisch) angezeigt If Red(Color1) = 61 And Green(Color1) = 61 And Blue(Color1) = 61 Box(5,1,10,10, RGB(0, 255, 0)) punkte + 1 Else Box(5,1,10,10, RGB(255, 0, 0)) EndIf If Red(Color2) = 0 And Green(Color2) = 0 And Blue(Color2) = 0 Box(17,1,10,10, RGB(0, 255, 0)) punkte + 1 Else Box(17,1,10,10, RGB(255, 0, 0)) EndIf If Red(Color3) = 8 And Green(Color3) = 28 And Blue(Color3) = 17 Box(29,1,10,10, RGB(0, 255, 0)) punkte + 1 Else Box(29,1,10,10, RGB(255, 0, 0)) EndIf If Red(Color4) = 255 And Green(Color4) = 255 And Blue(Color4) = 255 Box(41,1,10,10, RGB(0, 255, 0)) punkte + 1 Else Box(41,1,10,10, RGB(255, 0, 0)) EndIf StopDrawing() ; Timer aktivieren oder deaktivieren If punkte = 4 mconneu = 1 If mconalt = 0 mconalt = 1 s = Second(Date()) EndIf Else mconneu = 0 If mconalt = 1 mconalt = 0 s = 0 EndIf EndIf ; Timer entsprechend aktualisieren, wenn nötig If mconneu = 1 ; falls Timer aktiv If s <> Second(Date()) ;Wenn eine Sekunde vergangen sek + 1 ; Spielsekunden um eins höher If sek >= 60 ; falls eine Minute verstrichen min + 1 ; Minutenzähler um eins höher sek = 0 ; Sekunden zurück If min = 60 ; falls eine Stunde verstrichen std + 1 ; Stundenzähler um eins höher min = 0 ; Minuten zurück EndIf EndIf zeitaus() ; Spielzeit erneut ausgeben s = Second (Date()) ; und nächste Sekunde holen EndIf EndIf Until EventID = #PB_Event_CloseWindow ; bis das Schließsymbol geklickt wird EndIf ; IDE Options = PureBasic 4.60 (Windows - x86) ; CursorPosition = 138 ; Folding = - ; Executable = C:\Dokumente und Einstellungen\Ruediger\Desktop\minecraft-uhr 1.0.exe