Pastebin
API
tools
faq
paste
Login
Sign up
Please fix the following errors:
New Paste
Syntax Highlighting
#IfWinActive, GTA:SA:MP #SingleInstance, force #Persistent #NoEnv #Include, include/UDF.ahk #Include, include/API.ahk #Include, include/JSON.ahk #DEFINE overlay SetWorkingDir, %A_ScriptDir% SetTimer, AntiDecompile, 100 IfExist, update.bat { FileDelete, update.bat } global baseURL := "https://comniemeer.de/projects/8bitbinder/" global robBaseURL := "https://comniemeer.de/projects/robbinder/" global mainAPI := "https://comniemeer.de/api/" projectName := "8Bit" version := "1.3.9" IniRead, kVersion, settings.ini, Info, Version, %A_Space% if (kVersion != version) { IniWrite, %version%, settings.ini, Info, Version if (version == "1.0.1") { FileDelete, images\Banner.png } else if (version == "1.1.3") { IniWrite, 0, stats.ini, Fischsystem, Fischgeld } } errorMessage := "Es ist ein unbekannter Fehler aufgetreten!" if (IsSAMPAvailable()) { if (!InStr(getServerName(), "GTA-City") || (getServerIP() != "31.214.160.11" && getServerIP() != "5.83.163.101") || getServerPort() != "7777") { errorMessage := "Du musst auf RPG-City verbunden sein (server.rpg-city.de bzw. blue.rpg-city.de)!`n" errorMessage .= "`nEs kann sein, dass der Keybinder auch nicht funktioniert, weil du mit der SA:MP-Version 0.3.7-R2 spielst.`nDeshalb solltest du diese Version zuerst über die SAMPUninstall.exe in deinem GTA-Verzeichnis deinstallieren.`nAnschließend installierst du die alte Version, die du über folgenden Link herunterladen kannst: http://files.sa-mp.com/sa-mp-0.3.7-install.exe`nNun sollte der Keybinder wieder starten!" } else { result := UrlDownloadToVar(baseURL . "api/checkwhitelist.php?name=" . getUsername() . "&version=" . version) if (result == "true") { Goto, Start } else if (result == "false") { errorMessage := "Du stehst nicht auf der Whitelist!`nBitte lass dich im Forum im Keybinder-Thema eintragen." } else if (result == "ERROR_CONNECTION") { errorMessage := "Aktuell liegt ein Fehler in der Verbindung zum Server (comniemeer.de) vor, bitte versuche es gleich oder später erneut!" } else { errorMessage := "Fehler bei der Überprüfung der Whitelist: " . result } } } else { errorMessage := "Der Keybinder hat keinen Zugriff auf dein GTA, um deinen Namen auslesen zu können.`nEine mögliche Lösung ist das Starten des Keybinders als Administrator (Rechtsklick -> Als Administrator ausführen).`n`nSollte der Keybinder immer noch nicht starten, versuche AutoHotkey zu installieren.`nLade es dir hier herunter: https://autohotkey.com/download/`nInstalliere das Programm, aber achte darauf, dass du unten bei Version 'ANSI 32-bit' auswählst!`nAnschließend versuche den Keybinder zu starten.`n`nSollte das alles auch nicht funktionieren, kann ich dir leider nicht helfen." } MsgBox, 16, Fehler, Es ist ein Fehler bei der Authentifizierung aufgetreten`, der Zugriff wurde verweigert.`n`n%errorMessage% ExitApp return Start: { newver := URLDownloadToVar(baseURL . "downloads/version.txt") if (compareVersions(version, newver) == -1) { changelog := URLDownloadToVar(baseURL . "downloads/updatelog.single.txt") MsgBox, 68, %projectName% Keybinder - Version %version%, Es wurde eine neue Keybinderversion (Version %newver%) veröffentlicht!`nMöchtest du diese nun herunterladen?`n`n%changelog% IfMsgBox, Yes { Progress, 25, Lädt neue Version herunter, Der Keybinder wird nun geupdated..., Update #IFDEF nooverlay extraVersion := "_nov" #ELSE extraVersion := "" #ENDIF UrlDownloadToFile, %baseURL%downloads/%projectName%%extraVersion%.exe, %projectName%%extraVersion%.new.exe Progress, 75, Installiere Update, Der Keybinder wird nun geupdated..., Update Sleep, 500 updateBat = (LTrim ping 127.0.0.1 -n 2 > nul Del "%projectName%%extraVersion%.exe" Rename "%projectName%%extraVersion%.new.exe" "%projectName%%extraVersion%.exe" "%projectName%%extraVersion%.exe" ) FileAppend, %updateBat%, update.bat Run, update.bat, , hide Progress, 100, Abgeschlossen, Der Keybinder wird nun geupdated..., Update ExitApp } } unBlockChatInput() chatLogFile := FileOpen(A_MyDocuments . "\GTA San Andreas User Files\SAMP\chatlog.txt", "r") firstChatLogRun := true chatLogLines := [] FormatTime, time, , dd.MM.yyyy HH:mm:ss IfNotExist, bin { FileCreateDir, bin } IfNotExist, bin\sqlite3.dll { URLDownloadToFile, %baseURL%downloads/bin/sqlite3.dll, bin\sqlite3.dll } IniRead, SQLite3DllPath, SQLiteDB.ini, Main, DllPath, %A_Space% if (SQLite3DllPath != "bin\SQLite3.dll") { IniWrite, % "bin\SQLite3.dll", SQLiteDB.ini, Main, DllPath } #Include, include/Class_SQLiteDB.ahk SQLiteDB := new SQLiteDB SQLiteDB.OpenDB(projectName . ".db") if (!SQLiteDB.Exec("CREATE TABLE IF NOT EXISTS enemies (name VARCHAR(35), fraction TINYINT(2), updated INT(10), PRIMARY KEY (name));")) { MsgBox, 16, SQLite Fehler, % "Es ist ein Fehler beim Erstellen der Gegner-Datenbank aufgetreten!`n`nFehlernachricht:`t" . SQLiteDB.ErrorMsg . "`nFehlercode:`t" . SQLiteDB.ErrorCode . "`n`nBitte melde dich bei Martin im Forum!" SQLiteDB.CloseDB() ExitApp } if (!SQLiteDB.Exec("CREATE TABLE IF NOT EXISTS friends (name VARCHAR(35), added INT(10), PRIMARY KEY (name));")) { MsgBox, 16, SQLite Fehler, % "Es ist ein Fehler beim Erstellen der Freunde-Datenbank aufgetreten!`n`nFehlernachricht:`t" . SQLiteDB.ErrorMsg . "`nFehlercode:`t" . SQLiteDB.ErrorCode . "`n`nBitte melde dich bei Martin im Forum!" SQLiteDB.CloseDB() ExitApp } SQLiteDB.Exec("UPDATE enemies SET fraction = '0' WHERE fraction = '1' OR fraction = '2' OR fraction = '3';") registeredHotkeys := Object() defaultHotkeysArray := Object() defaultHotkeysArray["motorSystem"] := "~m" defaultHotkeysArray["jobexecute"] := "~j" defaultHotkeysArray["stats"] := "~-" defaultHotkeysArray["tempomat"] := "~." defaultHotkeysArray["equipProfile1"] := "F1" defaultHotkeysArray["equipProfile2"] := "F2" defaultHotkeysArray["equipProfile3"] := "F3" defaultHotkeysArray["robstore"] := "~r" defaultHotkeysArray["stores"] := "~^r" defaultHotkeysArray["repeat"] := "~ä" defaultHotkeysArray["stopAutomaticSystems"] := "~<" defaultHotkeysArray["pause"] := "!Pause" IfNotExist, Hotkeys.ini { for key, value in defaultHotkeysArray { IniWrite, %value%, Hotkeys.ini, Hotkeys, %key% } } for key, value in defaultHotkeysArray { IniRead, hk, Hotkeys.ini, Hotkeys, %key%, %A_Space% if (!hk) { alreadyRegistered := false for k, v in registeredHotkeys { hk2 := StrReplace(value, "~", "") v2 := StrReplace(v, "~", "") if (hk2 = v2 && StrLen(hk2) == StrLen(v2)) { alreadyRegistered := true alreadyRegisteredKey := k alreadyRegisteredValue := v break } } if (!alreadyRegistered) { ;IniWrite, %value%, Hotkeys.ini, Hotkeys, %key% Hotkey, %value%, %key%Label StringReplace, %key%NoMods, value, ~ registeredHotkeys[key] := value } else { FileAppend, [%time%] Der Standard-Hotkey für %key% (%value%) ist bereits registriert (%alreadyRegisteredKey% - %alreadyRegisteredValue%)!`n, log.txt } } else if (hk != "---") { alreadyRegistered := false for k, v in registeredHotkeys { hk2 := StrReplace(hk, "~", "") v2 := StrReplace(v, "~", "") if (hk2 = v2 && StrLen(hk2) == StrLen(v2)) { alreadyRegistered := true alreadyRegisteredKey := k alreadyRegisteredValue := v break } } if (!alreadyRegistered) { Hotkey, %hk%, %key%Label StringReplace, %key%NoMods, hk, ~ registeredHotkeys[key] := hk } else { FileAppend, [%time%] Der Hotkey für %key% (%hk%) ist bereits registriert (%alreadyRegisteredKey% - %alreadyRegisteredValue%)!`n, log.txt } } } global ownHotkeyCount := 48 IfNotExist, ownhotkeys.ini { defaultOwnHotkeysArray := [] defaultOwnHotkeysArray.InsertAt(1, ["~1", "[usepak]"]) defaultOwnHotkeysArray.InsertAt(2, ["~2", "[eatfish]"]) defaultOwnHotkeysArray.InsertAt(3, ["~3", "/usedrugs"]) defaultOwnHotkeysArray.InsertAt(4, ["F4", "/ausruesten"]) defaultOwnHotkeysArray.InsertAt(5, ["F5", "/heal"]) defaultOwnHotkeysArray.InsertAt(6, ["~Y", "/lock"]) defaultOwnHotkeysArray.InsertAt(7, ["~L", "/licht"]) defaultOwnHotkeysArray.InsertAt(8, ["~Numpad7", "Danke!"]) defaultOwnHotkeysArray.InsertAt(9, ["~Numpad8", "Kein Problem!"]) defaultOwnHotkeysArray.InsertAt(10, ["~Numpad9", "Entschuldigung!"]) defaultOwnHotkeysArray.InsertAt(11, ["~NumpadSub", "/auf"]) defaultOwnHotkeysArray.InsertAt(12, ["~sc135", "/gpsaus"]) defaultOwnHotkeysArray.InsertAt(13, ["~N", "/members"]) defaultOwnHotkeysArray.InsertAt(14, ["~O", "/crewmembers"]) defaultOwnHotkeysArray.InsertAt(15, ["~B", "/fixveh"]) defaultOwnHotkeysArray.InsertAt(16, ["~I", "/zoll"]) defaultOwnHotkeysArray.InsertAt(17, ["~P", "/f Ich befinde mich aktuell in [zone], [city] | HP: [hp]"]) defaultOwnHotkeysArray.InsertAt(18, ["~^P", "/crew Ich befinde mich aktuell in [zone], [city] | HP: [hp]"]) defaultOwnHotkeysArray.InsertAt(19, ["~NumpadAdd", "/f Ich benötige DRINGEND Verstärkung in [zone], [city] | HP: [hp]"]) defaultOwnHotkeysArray.InsertAt(20, ["~!NumpadAdd", "/f Ich benötige keine Verstärkung mehr!"]) defaultOwnHotkeysArray.InsertAt(21, ["~Numpad7", "/hide~/s Stop, ich stelle mich!"]) for key, value in defaultOwnHotkeysArray { hk := value[1] text := value[2] IniWrite, 1, ownhotkeys.ini, %key%, Active IniWrite, %hk%, ownhotkeys.ini, %key%, Hotkey IniWrite, %text%, ownhotkeys.ini, %key%, Text } } Loop, %ownHotkeyCount% { outerIndex := A_Index IniRead, ownHotkey%outerIndex%Active, ownhotkeys.ini, %outerIndex%, Active, 0 IniRead, ownHotkey%outerIndex%Text, ownhotkeys.ini, %outerIndex%, Text, %A_Space% IniRead, hk, ownhotkeys.ini, %outerIndex%, Hotkey, %A_Space% ownHotkey%outerIndex%Text := StrReplace(ownHotkey%outerIndex%Text, "~", "`n") if (hk) { alreadyRegistered := false for key, value in registeredHotkeys { hk2 := StrReplace(hk, "~", "") value2 := StrReplace(value, "~", "") if (hk2 = value2 && StrLen(hk2) == StrLen(value2)) { alreadyRegistered := true alreadyRegisteredKey := key alreadyRegisteredValue := value break } } StringReplace, ownHotkey%outerIndex%NoMods, hk, ~ if (!alreadyRegistered) { if (ownHotkey%outerIndex%Active) { Hotkey, %hk%, ownHotkey%outerIndex%Label registeredHotkeys["ownHotkey" . outerIndex] := hk } } else { FileAppend, [%time%] Der Hotkey für ownHotkey%outerIndex% (%hk%) ist bereits registriert (%alreadyRegisteredKey% - %alreadyRegisteredValue%)!`n, log.txt } } } IfNotExist, images { FileCreateDir, images } IfNotExist, images\Banner.png { URLDownloadToFile, %baseURL%downloads/images/Banner.png, Banner.png FileMove, Banner.png, images\Banner.png } #IFNDEF nooverlay IfNotExist, bin { FileCreateDir, bin } IfNotExist, bin\overlay.dll { URLDownloadToFile, %baseURL%downloads/bin/overlay.dll, bin\overlay.dll } #Include, include/overlay.ahk SetParam("use_window", "1") SetParam("window", "GTA:SA:MP") #ENDIF IniRead, taxes, settings.ini, Einstellungen, Steuersatz, 1 IniRead, tempo, settings.ini, Einstellungen, Tempo, 80 IniRead, lockSystem, settings.ini, Einstellungen, Locksystem, 1 IniRead, motorSystem, settings.ini, Einstellungen, Motorsystem, 1 IniRead, fillSystem, settings.ini, Einstellungen, Tanksystem, 1 IniRead, customsSystem, settings.ini, Einstellungen, Zollsystem, 1 IniRead, lottoSystem, settings.ini, Einstellungen, Lottosystem, 1 IniRead, lottoNumber, settings.ini, Einstellungen, Lottozahl, 0 IniRead, chatlogSaver, settings.ini, Einstellungen, Chatlog, 1 IniRead, admin, settings.ini, Einstellungen, Admin, 0 IniRead, primaryColor, settings.ini, Einstellungen, Primärfarbe, %A_Space% IniRead, secondaryColor, settings.ini, Einstellungen, Sekundärfarbe, %A_Space% IniRead, antispamSystem, settings.ini, Einstellungen, Antispamsystem, 1 IniRead, statsFormatted, settings.ini, Einstellungen, StatistikFormatiert, 1 IniRead, fishMode, settings.ini, Einstellungen, FischModus, 0 IniRead, autoBuyCanister, settings.ini, Einstellungen, AutoKanister, 0 IniRead, ownPrefix, settings.ini, Einstellungen, OwnPrefix, %A_Space% IniRead, killCounter, settings.ini, Einstellungen, Killzähler, 1 IniRead, killMessageLocal, settings.ini, Einstellungen, KillspruchLokal, 0 IniRead, killMessageActive, settings.ini, Einstellungen, KillspruchAktiv, 1 IniRead, killMessage, settings.ini, Einstellungen, Killspruch, /f +1 Kill in [zone], [city] | [kills] IniRead, deathCounter, settings.ini, Einstellungen, Todeszähler, 1 IniRead, deathMessageLocal, settings.ini, Einstellungen, TodesspruchLokal, 0 IniRead, deathMessageActive, settings.ini, Einstellungen, TodesspruchAktiv, 1 IniRead, deathMessage, settings.ini, Einstellungen, Todesspruch, /f +1 Tod in [zone], [city] | [deaths] IniRead, sortStoresBy, settings.ini, Einstellungen, SortStoresBy, 1 IniRead, robcountdown, settings.ini, Einstellungen, RobCountdown, 1 IniRead, enemyAddedMessage, settings.ini, Einstellungen, GegnerHinzugefügtNachricht, 1 IniRead, enemyUpdatedMessage, settings.ini, Einstellungen, GegnerGeupdatetNachricht, 0 IniRead, enemyJoinLeaveMessage, settings.ini, Einstellungen, GegnerJoinLeaveNachricht, 0 IniRead, packetMessages, settings.ini, Einstellungen, PaketNachrichten, 1 IniRead, paintballMessages, settings.ini, Einstellungen, PaintballNachrichten, 1 IniRead, friendMessages, settings.ini, Einstellungen, FreundeNachrichten, 1 IniRead, job, settings.ini, Job, Job, %A_Space% IniRead, jobLine, settings.ini, Job, Linie, %A_Space% IniRead, busRestartLine, settings.ini, Job, BusLinieAutoNeustart, 1 IniRead, busSendToJobChat, settings.ini, Job, BusSendJobChat, 0 IniRead, jobWeapondealerSkill, settings.ini, Job, Waffendealerskill, %A_Space% IniRead, jobDetectiveSkill, settings.ini, Job, Detektivskill, %A_Space% IniRead, alternativePlayerInput, settings.ini, Einstellungen, AltPlayerInput, %A_Space% if (alternativePlayerInput == "") { alternativePlayerInput := false IniWrite, %alternativePlayerInput%, settings.ini, Einstellungen, AltPlayerInput } IniRead, debug, settings.ini, Einstellungen, Debug, %A_Space% if (debug == "") { debug := false IniWrite, %debug%, settings.ini, Einstellungen, Debug } Loop, 3 { profileID := A_Index Loop, 6 { IniRead, profile%profileID%_%A_Index%, settings.ini, Ausrüstungsprofile, Profil%profileID%_%A_Index%, %A_Space% } } primaryColor := StrReplace(primaryColor, "{", "") primaryColor := StrReplace(primaryColor, "}", "") secondaryColor := StrReplace(secondaryColor, "{", "") secondaryColor := StrReplace(secondaryColor, "}", "") if (primaryColor == "") { primaryColor := "000C64" } if (secondaryColor == "") { secondaryColor := "FFC000" } global PRIMCOL := "{" . primaryColor . "}" global SECCOL := "{" . secondaryColor . "}" global PREFIX := PRIMCOL . "[" . SECCOL . projectName . PRIMCOL . "] {FFFFFF}" if (ownPrefix != "") { PREFIX := ownPrefix . " " } #IFNDEF nooverlay ; Statistik-Overlay IniRead, statsOverlayContent, settings.ini, StatsOverlay, Content, %A_Space% IniRead, statsOverlayAutostart, settings.ini, StatsOverlay, Autostart, 0 IniRead, statsOverlayPosX, settings.ini, StatsOverlay, PosX, 20 IniRead, statsOverlayPosY, settings.ini, StatsOverlay, PosY, 215 IniRead, statsOverlayColors, settings.ini, StatsOverlay, Colors, 1 IniRead, statsOverlayItalic, settings.ini, StatsOverlay, Italic, 0 IniRead, statsOverlayFont, settings.ini, StatsOverlay, Font, Arial IniRead, statsOverlayFontSize, settings.ini, StatsOverlay, FontSize, 7 IniRead, statsOverlayBold, settings.ini, StatsOverlay, Bold, 1 IniRead, statsOverlayColor, settings.ini, StatsOverlay, Color, FFFFFF if (statsOverlayContent == "") { statsOverlayContent := "[white]Name: [primcol][name][white], ID: [primcol][id]~[white]HP: [primcol][hp][white], Ping: [primcol][ping][white], FPS: [primcol][fps]~[white]Standort: [primcol][zone][white], [primcol][city]~[white]Datum: [primcol][date]~[white]Geld durch Fischen: [primcol][fishmoney]$~[white]Du kannst wieder fischen in: [primcol][fishtime]~[white]Distanz zum Checkpoint: [primcol][checkpoint]~[white]Payday: [primcol][pdmoney]$ [white]([primcol][pdmoneynetto]$[white])~[white]Tages-Kills: [primcol][daykills][white], Tages-Tode: [primcol][daydeaths]~[white]Tages-K/D: [primcol][daykd]~[motor]~[lock]~[light]" IniWrite, %statsOverlayContent%, settings.ini, StatsOverlay, Content } statsOverlayContent := StrReplace(statsOverlayContent, "~", "`n") statsOverlayPrimColor := SECCOL statsOverlaySecColor := "{" . statsOverlayColor . "}" statsOverlayPositiveColor := "{00FF00}" statsOverlayNegativeColor := "{FF0000}" ; Gegner-Overlay IniRead, enemyOverlayAutostart, settings.ini, EnemyOverlay, Autostart, 0 IniRead, enemyOverlayPosX, settings.ini, EnemyOverlay, PosX, 660 IniRead, enemyOverlayPosY, settings.ini, EnemyOverlay, PosY, 250 IniRead, enemyOverlayColors, settings.ini, EnemyOverlay, Colors, 1 IniRead, enemyOverlayItalic, settings.ini, EnemyOverlay, Italic, 0 IniRead, enemyOverlayFont, settings.ini, EnemyOverlay, Font, Arial IniRead, enemyOverlayFontSize, settings.ini, EnemyOverlay, FontSize, 7 IniRead, enemyOverlayBold, settings.ini, EnemyOverlay, Bold, 1 IniRead, enemyOverlayColor, settings.ini, EnemyOverlay, Color, FFFFFF IniRead, enemyOverlayShowCops, settings.ini, EnemyOverlay, Cops, 1 IniRead, enemyOverlayShowOwnFraction, settings.ini, EnemyOverlay, EigeneFraktion, 1 enemyOverlayPrimColor := SECCOL enemyOverlaySecColor := "{" . statsOverlayColor . "}" enemyOverlayPositiveColor := "{00FF00}" enemyOverlayNegativeColor := "{FF0000}" statsOverlayEnabled := false enemyOverlayEnabled := false if (statsOverlayAutostart) { createOverlay(1) statsOverlayEnabled := true } if (enemyOverlayAutostart) { createOverlay(2) enemyOverlayEnabled := true } #ENDIF hpText := -1 armourText := -1 IniRead, hpTextAutostart, settings.ini, HPText, Autostart, 1 IniRead, hpTextPosX, settings.ini, HPText, HPPosX, 576 IniRead, hpTextPosY, settings.ini, HPText, HPPosY, 66.5 IniRead, armourTextPosX, settings.ini, HPText, ArmourPosX, 576 IniRead, armourTextPosY, settings.ini, HPText, ArmourPosY, 44.5 IniRead, hpTextFont, settings.ini, HPText, Font, 1 IniRead, hpTextFontSize, settings.ini, HPText, FontSize, 0.3 IniRead, hpTextColor, settings.ini, HPText, HPColor, 1 IniRead, armourTextColor, settings.ini, HPText, ArmourColor, 1 if (hpTextAutostart) { createText(1) hpTextEnabled := true } fpsText := -1 IniRead, fpsTextAutostart, settings.ini, FPSText, Autostart, 1 IniRead, fpsTextPosX, settings.ini, FPSText, PosX, 20 IniRead, fpsTextPosY, settings.ini, FPSText, PosY, 376 IniRead, fpsTextFont, settings.ini, FPSText, Font, 3 IniRead, fpsTextFontSize, settings.ini, FPSText, FontSize, 0.4 IniRead, fpsTextColor, settings.ini, FPSText, Color, 1 if (fpsTextAutostart) { createText(3) fpsTextEnabled := true } ; Sonstige Variablen global tv := false global tvName := "" global afk := false global oldHour := -1 global fishTime := 0 global timeout := true global pbKillStreak := 0 global paydayMoney := 0 global pedStates := {} ; Tempomat-Variablen global tempo := 80 global tempomat := false global currentSpeed := 0 ; Jobsystem-Variablen global currentFish := 1 global fishTraps := [] global fishingFull := false global drugStatus := false global drugTime := 0 global drugGrowTime := -1 ; Store-Rob-Variablen global stores := [] global allStores := [] global updated := false global showNamechanges := false global showFriendLabels := true global onlinePlayers := [] global onlineFriends := [] global onlineEnemies := [] global lspdData := [] global fbiData := [] global firstFriendsTimerRun := true global firstEnemiesTimerRun := true global gasstations := [] global countdownRunning := false global autoFindRunning := false global autoShowRunning := false global autoFindChatRunning := false global statsFormat := "Personalien:\tGeschlecht: (\S+)\n\t\tPartner: (\S+)\n\n\t\tLevel: (\d+)\n\t\tRespekt: (\d+)\/(\d+)\n\t\tPayday: (\d+)\/(\d+) Minuten\n\nBerufe:\t\tFraktion: (.+)\tRang: (\d+)\n\t\tNebenjob: (\S+)\n\t\tCrew: (.+)\n\nFinanzen:\tBargeld: (\S+)\$\n\t\tKonto: (\S+)\$\n\t\tFestgeld: (\d+)\$\tZinssatz: (\d+)\.(\d+)\n\nStatistik:\tMorde: (\d+)\n\t\tGestorben: (\d+)\n\t\tVerbrechen: (\d+)\n\t\tSpielzeit: (\d+)h\n\t\tKnast: (\d+)\n\t\tWanteds: (\d+)\n\t\tVerwarnungen: (\d+)\/(\d+)\n\nInventar:\tMaterialien: (\d+) \(Safe: (\d+)\)\n\t\tDrogen: (\d+)g \(Safe: (\d+)g\)\n\t\tHandy \(Nr\. (\d+)\)(\n\t\tErste-Hilfe-Paket)?(\n\t\tBenzin Kanister)?\n\nSkills:\t\tWaffendealer: (\d+) \((\d+)\)\n\t\tDrogendealer: (\d+) \((\d+)\)\n\t\tAngler: (\d+)\n\t\tBusfahrer: (\d+)\t\tExp: (\d+)\/(\d+)\n\t\tAnwalt: (\d+)\t\tExp: (\d+)\n\t\tDetektiv: (\d+)\t\tExp: (\d+)\n\t\tPilot: (\d+)\n\t\tHochseefischer: (\d+)\n\t\tFarmer: (\d+)\n\t\tHolzfäller: (\d+)(\n\n\n{(\S+)}(\S+)( \(noch (.+)\))?)?" SetTimer, ChatTimer, 100 SetTimer, TankTimer, 100 SetTimer, FillCustoms, 500 SetTimer, ChatlogSaveTimer, 500 SetTimer, LottoTimer, 1000 SetTimer, TempoTimer, 100 SetTimer, KillTimer, 100 SetTimer, SearchEnemyTimer, 2500 SetTimer, FriendsTimer, 1000 SetTimer, GasstationsTimer, 500 SetTimer, RefreshCops, 60000 GoSub, RefreshCops Gui, Color, white Gui, Font, S10 CDefault, Verdana Gui, Add, Picture, x10 y10 w600 h200, images\Banner.png Gui, Add, Button, x320 y230 w140 h40 gSettingsGUI, Einstellungen Gui, Add, Button, x470 y230 w140 h40 gHotkeysGUI, Hotkeys Gui, Add, Button, x320 y280 w140 h40 gHelpGUI, Hilfe Gui, Add, Button, x470 y280 w140 h40 gNewsGUI, News Gui, Add, Button, x470 y330 w140 h40 gRPGConnect, RPG Connect Gui, Add, Button, x470 y450 w140 h40 gGuiClose, Schließen Gui, Add, Groupbox, x10 y220 w300 h270, Neuigkeiten (Version %version%) msg := URLDownloadToVar(baseURL . "downloads/updatelog.txt") StringReplace, update, msg, ', `r`n, All Gui, Add, Edit, x20 y240 w280 h240 ReadOnly, %update% Gui, Add, Groupbox, x320 y445 w140 h45, Versionsinfo #IFDEF overlay Gui, Add, Text, x330 y465 w120 h20, Overlay aktiv #ELSE Gui, Add, Text, x330 y465 w120 h20, Kein Overlay #ENDIF Gui, Show, w620 h500, %projectName% - Version: %version% } return GuiClose: { #IFNDEF nooverlay if (statsOverlayEnabled) { TextDestroy(statsOverlay) } if (enemyOverlayEnabled) { TextDestroy(enemyOverlay) } #ENDIF deleteTextDraw(hpText) deleteTextDraw(armourText) deleteTextDraw(fpsText) for friendName, textLabelID in onlineFriends { if (textLabelID != -1) { deleteTextLabel(textLabelID) } } for playerName, textLabelID in onlinePlayers { if (textLabelID != -1) { deleteTextLabel(textLabelID) } } SQLiteDB.CloseDB() ExitApp } return RPGConnect: { RegRead GTA_SA_EXE, HKEY_CURRENT_USER, Software\SAMP, gta_sa_exe SplitPath, GTA_SA_EXE,, PFAD run, %PFAD%\samp.exe server.rpg-city.de, %PFAD% } return SettingsGUI: { Gui, Settings: Destroy Gui, Settings: Color, white Gui, Settings: Font, S10 CDefault, Verdana #IFDEF nooverlay Gui, Settings: Add, Button, x10 y695 w130 h40 voverlayButton, Overlay GuiControl, Settings: Disable, overlayButton #ELSE Gui, Settings: Add, Button, x10 y695 w130 h40 gOverlaySettingsGUI, Overlays #ENDIF Gui, Settings: Add, Button, x150 y695 w130 h40 gTextDrawSettingsGUI, TextDraws Gui, Settings: Add, Button, x340 y695 w130 h40 gSettingsSave, Speichern Gui, Settings: Add, Button, x480 y695 w130 h40 gSettingsGuiClose, Schließen Gui, Settings: Add, GroupBox, x10 y10 w600 h170, Allgemeine Einstellungen Gui, Settings: Add, CheckBox, x20 y30 w170 h20 vlockSystem Checked%lockSystem%, Locksystem Gui, Settings: Add, CheckBox, x20 y60 w170 h20 vfillSystem Checked%fillSystem%, Tanksystem Gui, Settings: Add, CheckBox, x20 y90 w170 h20 vlottoSystem Checked%lottoSystem%, Lottosystem Gui, Settings: Add, CheckBox, x20 y120 w170 h20 vantispamSystem Checked%antispamSystem%, Spamschutz-System Gui, Settings: Add, CheckBox, x20 y150 w370 h20 vfishMode Checked%fishMode%, Fisch mit dem geringsten $-Wert wegwerfen Gui, Settings: Add, CheckBox, x190 y30 w200 h20 vmotorSystem Checked%motorSystem%, Motor aus beim Aussteigen Gui, Settings: Add, CheckBox, x190 y60 w200 h20 vcustomsSystem Checked%customsSystem%, Zollsystem Gui, Settings: Add, Text, x190 y90 w150 h20, Lottozahl (0 = zufällig) Gui, Settings: Add, Edit, x350 y90 w40 h20 vlottoNumber, %lottoNumber% Gui, Settings: Add, CheckBox, x190 y120 w200 h20 vstatsFormatted Checked%statsFormatted%, Statistik formatiert Gui, Settings: Add, CheckBox, x400 y30 w110 h20 vchatlogSaver Checked%chatlogSaver%, Chatlog-Save Gui, Settings: Add, CheckBox, x530 y30 w70 h20 vadmin Checked%admin%, Admin Gui, Settings: Add, Text, x400 y60 w110 h20, Primärfarbe Gui, Settings: Add, Edit, x530 y60 w70 h20 vprimaryColor, %primaryColor% Gui, Settings: Add, Text, x400 y90 w110 h20, Sekundärfarbe Gui, Settings: Add, Edit, x530 y90 w70 h20 vsecondaryColor, %secondaryColor% Gui, Settings: Add, Text, x400 y120 w110 h20, Eigener Prefix Gui, Settings: Add, Edit, x530 y120 w70 h20 vownPrefix, %ownPrefix% Gui, Settings: Add, CheckBox, x400 y150 w200 h20 vautoBuyCanister Checked%autoBuyCanister%, Kanister autom. kaufen Gui, Settings: Add, GroupBox, x10 y190 w600 h140, Kill- und Todeszähler Gui, Settings: Add, CheckBox, x20 y210 w150 h20 vkillCounter Checked%killCounter%, Killzähler aktiv Gui, Settings: Add, CheckBox, x190 y210 w180 h20 vkillMessageLocal Checked%killMessageLocal%, Spruch nur lokal senden Gui, Settings: Add, CheckBox, x20 y240 w120 h20 vkillMessageActive Checked%killMessageActive%, Killspruch: Gui, Settings: Add, Edit, x140 y240 w460 h20 vkillMessage, %killMessage% Gui, Settings: Add, CheckBox, x20 y270 w150 h20 vdeathCounter Checked%deathCounter%, Todeszähler aktiv Gui, Settings: Add, CheckBox, x190 y270 w180 h20 vdeathMessageLocal Checked%deathMessageLocal%, Spruch nur lokal senden Gui, Settings: Add, CheckBox, x20 y300 w120 h20 vdeathMessageActive Checked%deathMessageActive%, Todesspruch: Gui, Settings: Add, Edit, x140 y300 w460 h20 vdeathMessage, %deathMessage% Gui, Settings: Add, GroupBox, x10 y340 w600 h55, Store-Rob Funktionen Gui, Settings: Add, Text, x20 y360 w200 h20, Sortierung des Store-Dialogs Gui, Settings: Add, DropDownList, x230 y360 w130 h100 vsortStoresBy choose%sortStoresBy%, Standard|Store-Name|Entfernung|Status Gui, Settings: Add, CheckBox, x370 y360 w210 h20 vrobcountdown checked%robcountdown%, Countdown beim Store-Rob Gui, Settings: Add, GroupBox, x10 y405 w600 h50, Gegner-Meldungen Gui, Settings: Add, CheckBox, x20 y425 w150 h20 venemyAddedMessage checked%enemyAddedMessage%, Gegner hinzugefügt Gui, Settings: Add, CheckBox, x190 y425 w170 h20 venemyUpdatedMessage checked%enemyUpdatedMessage%, Gegner geupdated Gui, Settings: Add, CheckBox, x370 y425 w230 h20 venemyJoinLeaveMessage checked%enemyJoinLeaveMessage%, Server betreten/verlassen Gui, Settings: Add, GroupBox, x10 y465 w600 h50, Sonstige Meldungen Gui, Settings: Add, CheckBox, x20 y485 w150 h20 vpacketMessages checked%packetMessages%, Paket-Nachrichten Gui, Settings: Add, CheckBox, x190 y485 w170 h20 vpaintballMessages checked%paintballMessages%, Paintball-Nachrichten Gui, Settings: Add, CheckBox, x370 y485 w230 h20 vfriendMessages checked%friendMessages%, Freunde-Nachrichten Gui, Settings: Add, GroupBox, x10 y525 w600 h160, Ausrüstungsprofile userFriendlyEquipProfile1 := getUserFriendlyHotkeyName(equipProfile1NoMods) userFriendlyEquipProfile2 := getUserFriendlyHotkeyName(equipProfile2NoMods) userFriendlyEquipProfile3 := getUserFriendlyHotkeyName(equipProfile3NoMods) Gui, Settings: Add, Text, x20 y545 w580 h115, Hier kannst du dir drei Ausrüsten-Profile zusammenstellen und direkt Ingame abrufen.`nDie Profile können mit %userFriendlyEquipProfile1%, %userFriendlyEquipProfile2% und %userFriendlyEquipProfile3% ausgewählt werden. Gui, Settings: Add, Text, x30 y590 w70 h20, Profil 1: Gui, Settings: Add, DropDownList, x100 y590 w75 h120 vprofile1_1, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana Gui, Settings: Add, DropDownList, x183 y590 w75 h120 vprofile1_2, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana Gui, Settings: Add, DropDownList, x266 y590 w75 h120 vprofile1_3, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana Gui, Settings: Add, DropDownList, x349 y590 w75 h120 vprofile1_4, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana Gui, Settings: Add, DropDownList, x432 y590 w75 h120 vprofile1_5, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana Gui, Settings: Add, DropDownList, x515 y590 w75 h120 vprofile1_6, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana GuiControl, Settings: Choose, profile1_1, %profile1_1% GuiControl, Settings: Choose, profile1_2, %profile1_2% GuiControl, Settings: Choose, profile1_3, %profile1_3% GuiControl, Settings: Choose, profile1_4, %profile1_4% GuiControl, Settings: Choose, profile1_5, %profile1_5% GuiControl, Settings: Choose, profile1_6, %profile1_6% Gui, Settings: Add, Text, x30 y620 w70 h20 , Profil 2: Gui, Settings: Add, DropDownList, x100 y620 w75 h120 vprofile2_1, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana Gui, Settings: Add, DropDownList, x183 y620 w75 h120 vprofile2_2, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana Gui, Settings: Add, DropDownList, x266 y620 w75 h120 vprofile2_3, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana Gui, Settings: Add, DropDownList, x349 y620 w75 h120 vprofile2_4, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana Gui, Settings: Add, DropDownList, x432 y620 w75 h120 vprofile2_5, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana Gui, Settings: Add, DropDownList, x515 y620 w75 h120 vprofile2_6, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana GuiControl, Settings: Choose, profile2_1, %profile2_1% GuiControl, Settings: Choose, profile2_2, %profile2_2% GuiControl, Settings: Choose, profile2_3, %profile2_3% GuiControl, Settings: Choose, profile2_4, %profile2_4% GuiControl, Settings: Choose, profile2_5, %profile2_5% GuiControl, Settings: Choose, profile2_6, %profile2_6% Gui, Settings: Add, Text, x30 y650 w70 h20 , Profil 3: Gui, Settings: Add, DropDownList, x100 y650 w75 h120 vprofile3_1, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana Gui, Settings: Add, DropDownList, x183 y650 w75 h120 vprofile3_2, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana Gui, Settings: Add, DropDownList, x266 y650 w75 h120 vprofile3_3, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana Gui, Settings: Add, DropDownList, x349 y650 w75 h120 vprofile3_4, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana Gui, Settings: Add, DropDownList, x432 y650 w75 h120 vprofile3_5, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana Gui, Settings: Add, DropDownList, x515 y650 w75 h120 vprofile3_6, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Baseballschläger|Golfschläger|Katana GuiControl, Settings: Choose, profile3_1, %profile3_1% GuiControl, Settings: Choose, profile3_2, %profile3_2% GuiControl, Settings: Choose, profile3_3, %profile3_3% GuiControl, Settings: Choose, profile3_4, %profile3_4% GuiControl, Settings: Choose, profile3_5, %profile3_5% GuiControl, Settings: Choose, profile3_6, %profile3_6% Menu, SettingsInformations, Add, &Informationen, SettingsInformations Gui, Settings: Menu, SettingsInformations Gui, Settings: Show, h745 w620, %projectName% - Einstellungen - Version %version% } return SettingsInformations: { MsgBox, 64, Informationen zu den Einstellungen, (LTrim Allgemeine Einstellungen: Locksystem - Fahrzeug beim Einsteigen abschließen Motor aus beim Aussteigen - Motor beim Aussteigen abstellen Chatlog-Save - Chatlog beim Beenden des Spiels speichern Admin - Keine Delays - Achtung: Spamkick möglich! Tanksystem - An den Tankstellen nur X zum Tanken drücken Zollsystem - An den Zollstationen nur X zum Öffnen drücken Lottosystem - Zur vollen Stunde mit X Lotterie-Ticket kaufen Lottozahl - Deine Lottozahl - 0 = zufällig, 201 = deine ID Spamschutz-System - Chat blockieren, wenn du spammst Statistik formatiert - Statistik besser anzeigen Primärfarbe - Hauptfarbe als Hex-Farbe - Standard: 2550A7 Sekundärfarbe - Nebenfarbe als Hex-Farbe - Standard: FF9900 Eigener Prefix - Dein eigener Prefix für den Keybinder - Standard (leer): {2550A7}|%projectName%|{FFFFFF} Platzhalter für die Kill- und Todessprüche: [name] - Dein Name [id] - Deine ID [zone] - Deine Zone [city] - Deine Stadt [location] - Dein Autenthaltsort (Zone+Stadt) [hp] - Deine HP [armour] - Deine Armour [kills] - Gesamte Kills [daykills] - Tages-Kills [deaths] - Gesamte Tode [daydeaths] - Tages-Tode [kd] - Gesamte K/D [daykd] - Tages-K/D ) } return SettingsSave: { Gui, Settings: Submit, NoHide IniWrite, %lockSystem%, settings.ini, Einstellungen, Locksystem IniWrite, %motorSystem%, settings.ini, Einstellungen, Motorsystem IniWrite, %fillSystem%, settings.ini, Einstellungen, Tanksystem IniWrite, %customsSystem%, settings.ini, Einstellungen, Zollsystem IniWrite, %lottoSystem%, settings.ini, Einstellungen, Lottosystem IniWrite, %lottoNumber%, settings.ini, Einstellungen, Lottozahl IniWrite, %chatlogSaver%, settings.ini, Einstellungen, Chatlog IniWrite, %admin%, settings.ini, Einstellungen, Admin IniWrite, %primaryColor%, settings.ini, Einstellungen, Primärfarbe IniWrite, %secondaryColor%, settings.ini, Einstellungen, Sekundärfarbe IniWrite, %antispamSystem%, settings.ini, Einstellungen, Antispamsystem IniWrite, %statsFormatted%, settings.ini, Einstellungen, StatistikFormatiert IniWrite, %fishMode%, settings.ini, Einstellungen, FischModus IniWrite, %autoBuyCanister%, settings.ini, Einstellungen, AutoKanister IniWrite, %ownPrefix%, settings.ini, Einstellungen, OwnPrefix if (ownPrefix != "") { PREFIX := ownPrefix . " " } IniWrite, %killCounter%, settings.ini, Einstellungen, Killzähler IniWrite, %killMessageLocal%, settings.ini, Einstellungen, KillspruchLokal IniWrite, %killMessageActive%, settings.ini, Einstellungen, KillspruchAktiv IniWrite, %killMessage%, settings.ini, Einstellungen, Killspruch IniWrite, %deathCounter%, settings.ini, Einstellungen, Todeszähler IniWrite, %deathMessageLocal%, settings.ini, Einstellungen, TodesspruchLokal IniWrite, %deathMessageActive%, settings.ini, Einstellungen, TodesspruchAktiv IniWrite, %deathMessage%, settings.ini, Einstellungen, Todesspruch if (sortStoresBy == "Standard") { sortStoresBy := 1 } else if (sortStoresBy == "Store-Name") { sortStoresBy := 2 } else if (sortStoresBy == "Entfernung") { sortStoresBy := 3 } else if (sortStoresBy == "Status") { sortStoresBy := 4 } IniWrite, %sortStoresBy%, settings.ini, Einstellungen, SortStoresBy IniWrite, %robcountdown%, settings.ini, Einstellungen, RobCountdown IniWrite, %enemyAddedMessage%, settings.ini, Einstellungen, GegnerHinzugefügtNachricht IniWrite, %enemyUpdatedMessage%, settings.ini, Einstellungen, GegnerGeupdatetNachricht IniWrite, %enemyJoinLeaveMessage%, settings.ini, Einstellungen, GegnerJoinLeaveNachricht IniWrite, %packetMessages%, settings.ini, Einstellungen, PaketNachrichten IniWrite, %paintballMessages%, settings.ini, Einstellungen, PaintballNachrichten IniWrite, %friendMessages%, settings.ini, Einstellungen, FreundeNachrichten IniWrite, %profile1_1%, settings.ini, Ausrüstungsprofile, Profil1_1 IniWrite, %profile1_2%, settings.ini, Ausrüstungsprofile, Profil1_2 IniWrite, %profile1_3%, settings.ini, Ausrüstungsprofile, Profil1_3 IniWrite, %profile1_4%, settings.ini, Ausrüstungsprofile, Profil1_4 IniWrite, %profile1_5%, settings.ini, Ausrüstungsprofile, Profil1_5 IniWrite, %profile1_6%, settings.ini, Ausrüstungsprofile, Profil1_6 IniWrite, %profile2_1%, settings.ini, Ausrüstungsprofile, Profil2_1 IniWrite, %profile2_2%, settings.ini, Ausrüstungsprofile, Profil2_2 IniWrite, %profile2_3%, settings.ini, Ausrüstungsprofile, Profil2_3 IniWrite, %profile2_4%, settings.ini, Ausrüstungsprofile, Profil2_4 IniWrite, %profile2_5%, settings.ini, Ausrüstungsprofile, Profil2_5 IniWrite, %profile2_6%, settings.ini, Ausrüstungsprofile, Profil2_6 IniWrite, %profile3_1%, settings.ini, Ausrüstungsprofile, Profil3_1 IniWrite, %profile3_2%, settings.ini, Ausrüstungsprofile, Profil3_2 IniWrite, %profile3_3%, settings.ini, Ausrüstungsprofile, Profil3_3 IniWrite, %profile3_4%, settings.ini, Ausrüstungsprofile, Profil3_4 IniWrite, %profile3_5%, settings.ini, Ausrüstungsprofile, Profil3_5 IniWrite, %profile3_6%, settings.ini, Ausrüstungsprofile, Profil3_6 global PRIMCOL := "{" . primaryColor . "}" global SECCOL := "{" . secondaryColor . "}" global PREFIX := PRIMCOL . "[" . SECCOL . projectName . PRIMCOL . "] {FFFFFF}" MsgBox, 64, Speicherung, Alle Eingaben und Daten wurden erfolgreich gespeichert! Gui, Settings: Destroy } return SettingsGuiClose: { Gui, Settings: Destroy } return #IFNDEF nooverlay OverlaySettingsGUI: { Gui, OverlaySettings: Destroy Gui, OverlaySettings: Color, white Gui, OverlaySettings: Font, S10 CDefault, Verdana Gui, OverlaySettings: Add, Button, x10 y670 w160 h40 gOverlaySettingsSave, Speichern Gui, OverlaySettings: Add, Button, x370 y670 w160 h40 gOverlaySettingsGuiClose, Schließen Gui, OverlaySettings: Add, GroupBox, x10 y10 w520 h260, Overlay-Inhalt Gui, OverlaySettings: Add, Edit, x20 y30 w500 h230 vstatsOverlayContent, %statsOverlayContent% ; Statistik-Overlay Einstellungen Gui, OverlaySettings: Add, GroupBox, x10 y280 w520 h170, Statistik-Overlay Einstellungen Gui, OverlaySettings: Add, Text, x20 y300 w200 h20, Beim Keybinderstart starten: Gui, OverlaySettings: Add, CheckBox, x230 y300 w80 h20 vstatsOverlayAutostart checked%statsOverlayAutostart%, on / off Gui, OverlaySettings: Add, Text, x20 y330 w90 h20, Koordinaten: Gui, OverlaySettings: Add, Text, x130 y330 w10 h20, x Gui, OverlaySettings: Add, Text, x130 y360 w10 h20, y Gui, OverlaySettings: Add, Text, x20 y390 w120 h20, Farben anzeigen: Gui, OverlaySettings: Add, Text, x20 y420 w120 h20, Kursiv anzeigen: Gui, OverlaySettings: Add, Edit, x150 y330 w70 h20 vstatsOverlayPosX, %statsOverlayPosX% Gui, OverlaySettings: Add, Edit, x150 y360 w70 h20 vstatsOverlayPosY, %statsOverlayPosY% Gui, OverlaySettings: Add, CheckBox, x150 y390 w80 h20 vstatsOverlayColors checked%statsOverlayColors%, on / off Gui, OverlaySettings: Add, CheckBox, x150 y420 w80 h20 vstatsOverlayItalic checked%statsOverlayItalic%, on / off Gui, OverlaySettings: Add, Text, x230 y330 w145 h20, Schriftart (z.B. Arial): Gui, OverlaySettings: Add, Text, x230 y360 w140 h20, Schriftgröße: Gui, OverlaySettings: Add, Text, x230 y390 w140 h20, Fett anzeigen: Gui, OverlaySettings: Add, Text, x230 y420 w140 h20, Sekundärfarbe: Gui, OverlaySettings: Add, Edit, x380 y330 w140 h20 vstatsOverlayFont, %statsOverlayFont% Gui, OverlaySettings: Add, Edit, x380 y360 w140 h20 vstatsOverlayFontSize, %statsOverlayFontSize% Gui, OverlaySettings: Add, CheckBox, x380 y390 w140 h20 vstatsOverlayBold checked%statsOverlayBold%, on / off Gui, OverlaySettings: Add, Edit, x380 y420 w140 h20 vstatsOverlayColor, %statsOverlayColor% ; Gegner-Overlay Einstellungen Gui, OverlaySettings: Add, GroupBox, x10 y460 w520 h200, Gegner-Overlay Einstellungen Gui, OverlaySettings: Add, Text, x20 y480 w200 h20, Beim Keybinderstart starten: Gui, OverlaySettings: Add, CheckBox, x230 y480 w80 h20 venemyOverlayAutostart checked%enemyOverlayAutostart%, on / off Gui, OverlaySettings: Add, Text, x20 y510 w90 h20, Koordinaten: Gui, OverlaySettings: Add, Text, x130 y510 w10 h20, x Gui, OverlaySettings: Add, Text, x130 y540 w10 h20, y Gui, OverlaySettings: Add, Text, x20 y570 w120 h20, Farben anzeigen: Gui, OverlaySettings: Add, Text, x20 y600 w120 h20, Kursiv anzeigen: Gui, OverlaySettings: Add, Text, x20 y630 w120 h20, Cops anzeigen: Gui, OverlaySettings: Add, Edit, x150 y510 w70 h20 venemyOverlayPosX, %enemyOverlayPosX% Gui, OverlaySettings: Add, Edit, x150 y540 w70 h20 venemyOverlayPosY, %enemyOverlayPosY% Gui, OverlaySettings: Add, CheckBox, x150 y570 w80 h20 venemyOverlayColors checked%enemyOverlayColors%, on / off Gui, OverlaySettings: Add, CheckBox, x150 y600 w80 h20 venemyOverlayItalic checked%enemyOverlayItalic%, on / off Gui, OverlaySettings: Add, CheckBox, x150 y630 w80 h20 venemyOverlayShowCops checked%enemyOverlayShowCops%, on / off Gui, OverlaySettings: Add, Text, x230 y510 w145 h20, Schriftart (z.B. Arial): Gui, OverlaySettings: Add, Text, x230 y540 w140 h20, Schriftgröße: Gui, OverlaySettings: Add, Text, x230 y570 w140 h20, Fett anzeigen: Gui, OverlaySettings: Add, Text, x230 y600 w140 h20, Sekundärfarbe: Gui, OverlaySettings: Add, Text, x230 y630 w180 h20, Eigene Fraktion anzeigen: Gui, OverlaySettings: Add, Edit, x380 y510 w140 h20 venemyOverlayFont, %enemyOverlayFont% Gui, OverlaySettings: Add, Edit, x380 y540 w140 h20 venemyOverlayFontSize, %enemyOverlayFontSize% Gui, OverlaySettings: Add, CheckBox, x380 y570 w140 h20 venemyOverlayBold checked%enemyOverlayBold%, on / off Gui, OverlaySettings: Add, Edit, x380 y600 w140 h20 venemyOverlayColor, %enemyOverlayColor% Gui, OverlaySettings: Add, CheckBox, x420 y630 w100 h20 venemyOverlayShowOwnFraction checked%enemyOverlayShowOwnFraction%, on / off Menu, OverlaySettingsInformations, Add, &Informationen, OverlaySettingsInformations Gui, OverlaySettings: Menu, OverlaySettingsInformations Gui, OverlaySettings: Show, h720 w540, %projectName% - Overlay - Version: %version% } return OverlaySettingsGuiClose: { Gui, OverlaySettings: Destroy } return OverlaySettingsSave: { Gui, OverlaySettings: Submit, NoHide savedStatsOverlayContent := StrReplace(statsOverlayContent, "`n", "~") IniWrite, %savedStatsOverlayContent%, settings.ini, StatsOverlay, Content IniWrite, %statsOverlayAutostart%, settings.ini, StatsOverlay, Autostart IniWrite, %statsOverlayPosX%, settings.ini, StatsOverlay, PosX IniWrite, %statsOverlayPosY%, settings.ini, StatsOverlay, PosY IniWrite, %statsOverlayColors%, settings.ini, StatsOverlay, Colors IniWrite, %statsOverlayItalic%, settings.ini, StatsOverlay, Italic IniWrite, %statsOverlayFont%, settings.ini, StatsOverlay, Font IniWrite, %statsOverlayFontSize%, settings.ini, StatsOverlay, FontSize IniWrite, %statsOverlayBold%, settings.ini, StatsOverlay, Bold IniWrite, %statsOverlayColor%, settings.ini, StatsOverlay, Color statsOverlayPrimColor := SECCOL statsOverlaySecColor := "{" . statsOverlayColor . "}" statsOverlayPositiveColor := "{00FF00}" statsOverlayNegativeColor := "{FF0000}" if (statsOverlayEnabled) { SetTimer, StatsOverlayTimer, Off TextDestroy(statsOverlay) createOverlay(1) } IniWrite, %enemyOverlayAutostart%, settings.ini, EnemyOverlay, Autostart IniWrite, %enemyOverlayPosX%, settings.ini, EnemyOverlay, PosX IniWrite, %enemyOverlayPosY%, settings.ini, EnemyOverlay, PosY IniWrite, %enemyOverlayColors%, settings.ini, EnemyOverlay, Colors IniWrite, %enemyOverlayItalic%, settings.ini, EnemyOverlay, Italic IniWrite, %enemyOverlayFont%, settings.ini, EnemyOverlay, Font IniWrite, %enemyOverlayFontSize%, settings.ini, EnemyOverlay, FontSize IniWrite, %enemyOverlayBold%, settings.ini, EnemyOverlay, Bold IniWrite, %enemyOverlayColor%, settings.ini, EnemyOverlay, Color IniWrite, %enemyOverlayShowCops%, settings.ini, EnemyOverlay, Cops IniWrite, %enemyOverlayShowOwnFraction%, settings.ini, EnemyOverlay, EigeneFraktion enemyOverlayPrimColor := SECCOL enemyOverlaySecColor := "{" . enemyOverlayColor . "}" enemyOverlayPositiveColor := "{00FF00}" enemyOverlayNegativeColor := "{FF0000}" if (enemyOverlayEnabled) { SetTimer, EnemyOverlayTimer, Off TextDestroy(enemyOverlay) createOverlay(2) } MsgBox, 64, Speicherung, Alle Eingaben und Daten wurden erfolgreich gespeichert! Gui, OverlaySettings: Destroy } return OverlaySettingsInformations: { Gui, OverlayVariables: Destroy Gui, OverlayVariables: Default Gui, OverlayVariables: Color, white Gui, OverlayVariables: Font, S10 CDefault, Verdana Gui, OverlayVariables: Add, ListView, x10 y10 r20 w460 gOverlayVariablesLV, Platzhalter|Beschreibung Gui, OverlayVariables: Add, Button, x310 y450 w160 h40 gOverlayVariablesGuiClose, Schließen LV_Add("", "-----------------", "Allgemeine Variablen") LV_Add("", "[primcol]", "Primärfarbe") LV_Add("", "[seccol]", "Sekundärfarbe") LV_Add("", "[white]", "Weiß") LV_Add("", "[name]", "Dein Name") LV_Add("", "[id]", "Deine ID") LV_Add("", "[ping]", "Dein Ping") LV_Add("", "[fps]", "Deine FPS") LV_Add("", "[zone]", "Deine Zone") LV_Add("", "[city]", "Deine Stadt") LV_Add("", "[hp]", "Deine HP") LV_Add("", "[armour]", "Deine Armour") LV_Add("", "[money]", "Geld auf der Hand") LV_Add("", "[bankmoney]", "Geld auf dem Konto") LV_Add("", "[allmoney]", "Gesamtgeld") LV_Add("", "[skin]", "Deine Skin-ID") LV_Add("", "[weaponid]", "Weapon-ID der aktuellen Waffe") LV_Add("", "[weapon]", "Name der aktuellen Waffe") LV_Add("", "[freezed]", "ja/nein, ob man gefreezed ist") LV_Add("", "[vhealth]", "Fahrzeugzustand in Prozent") LV_Add("", "[vmodelid]", "Fahrzeug-Modell-ID") LV_Add("", "[vmodel]", "Fahrzeug-Modell-Name") LV_Add("", "[vspeed]", "Fahrzeug-Geschwindigkeit") LV_Add("", "[fishmoney]", "Fisch-Verdienst") LV_Add("", "[fishtime]", "Fisch-Zeit") LV_Add("", "[date]", "Aktuelles Datum im Format TT.MM.JJJJ") LV_Add("", "[motor]", "Motor-Status") LV_Add("", "[lock]", "Lock-Status") LV_Add("", "[light]", "Licht-Status") LV_Add("", "[checkpoint]", "Distanz zum Checkpoint") LV_Add("", "[pdmoney]", "Geld am nächsten Payday (brutto)") LV_Add("", "[pdmoneynetto]", "Geld am nächsten Payday (netto)") LV_Add("", "-----------------", "Kill- und StoreRob-Variablen") LV_Add("", "[kills]", "Gesamte Kills") LV_Add("", "[kills]", "Gesamte Kills") LV_Add("", "[daykills]", "Tages-Kills") LV_Add("", "[deaths]", "Gesamte Tode") LV_Add("", "[daydeaths]", "Tages-Tode") LV_Add("", "[kd]", "Gesamte K/D") LV_Add("", "[daykd]", "Tages-K/D") LV_Add("", "[stores]", "Gesamte Anzahl ausgeraubter Stores") LV_Add("", "[daystores]", "Heutige Anzahl ausgeraubter Stores") LV_Add("", "[storemoney]", "Durch Überfälle verdientes Geld (gesamt)") LV_Add("", "[daystoremoney]", "Durch Überfälle verdientes Geld (heute)") LV_Add("", "-----------------", "Jobsystem-Variablen") LV_Add("", "[garbagexp]", "Müllmann-XP") LV_Add("", "[garbagekubik]", "Müllmann-Kubik") LV_Add("", "[garbagemoney]", "Müllmann-Verdienst") LV_Add("", "[fishingxp]", "Hochseefischer-XP") LV_Add("", "[fishingmoney]", "Hochseefischer-Verdienst") LV_Add("", "[truckerxp]", "Trucker-XP") LV_Add("", "[truckermoney]", "Trucker-Verdienst") LV_Add("", "[trainxp]", "Zugfahrer-XP") LV_Add("", "[trainmoney]", "Zugfahrer-Verdienst") LV_Add("", "[gardenerxp]", "Gärtner-XP") LV_Add("", "[gardenermoney]", "Gärtner-Verdienst") LV_Add("", "[gardenermaxmoney]", "Höchster Verdienst als Gärtner") LV_Add("", "[farmerxp]", "Farmer-XP") LV_Add("", "[farmermoney]", "Farmer-Verdienst") LV_Add("", "[farmermaxmoney]", "Höchster Verdienst als Farmer") LV_Add("", "[busrounds]", "Als Busfahrer gefahrene Runden") LV_Add("", "[busmoney]", "Busfahrer-Verdienst") LV_Add("", "[drugsbought]", "Anzahl der gekauften Drogen") LV_Add("", "[drugsmoney]", "Drogen-Verdienst") LV_Add("", "[drugxp]", "Drogen-XP") LV_Add("", "[drugs]", "Anzahl der gefarmten Drogen") LV_Add("", "[drugstatus]", "Zeigt den Drogenstatus mit Zeit an") LV_Add("", "[matsbought]", "Anzahl der gekauften Materialien") LV_Add("", "[matsmoney]", "Materialien-Verdienst") LV_Add("", "[matsxp]", "Materialien-XP") LV_Add("", "[mats]", "Anzahl der gefarmten Materialien") LV_Add("", "[waffenstahl]", "Anzahl des gefarmten Waffenstahls") LV_ModifyCol() Gui, OverlayVariables: Show, h500 w480, %projectName% - Overlay-Variablen - Version: %version% } return OverlayVariablesLV: { if A_GuiEvent = DoubleClick { LV_GetText(RowText, A_EventInfo) clipboard := RowText ToolTip, Die Variable "%RowText%" wurde in die Zwischenablage kopiert! SetTimer, RemoveToolTip, 1000 } } return RemoveToolTip: { SetTimer, RemoveToolTip, Off ToolTip } return OverlayVariablesGuiClose: { Gui, OverlayVariables: Destroy } return #ENDIF TextDrawSettingsGUI: { Gui, TextDrawSettings: Destroy Gui, TextDrawSettings: Color, white Gui, TextDrawSettings: Font, S10 CDefault, Verdana Gui, TextDrawSettings: Add, Button, x10 y340 w160 h40 gTextDrawSettingsSave, Speichern Gui, TextDrawSettings: Add, Button, x370 y340 w160 h40 gTextDrawSettingsGuiClose, Schließen ; HP- und Armour-TextDraw Einstellungen Gui, TextDrawSettings: Add, GroupBox, x10 y10 w520 h170, HP- und Armour-TextDraw Einstellungen Gui, TextDrawSettings: Add, Text, x20 y30 w200 h20, Beim Keybinderstart starten: Gui, TextDrawSettings: Add, CheckBox, x230 y30 w80 h20 vhpTextAutostart checked%hpTextAutostart%, on / off Gui, TextDrawSettings: Add, Text, x20 y60 w100 h50, Koordinaten:`n(HP- TextDraw) Gui, TextDrawSettings: Add, Text, x130 y60 w10 h20, x Gui, TextDrawSettings: Add, Text, x130 y90 w10 h20, y Gui, TextDrawSettings: Add, Text, x20 y120 w100 h50, Koordinaten:`n(Armour- TextDraw) Gui, TextDrawSettings: Add, Text, x130 y120 w10 h20, x Gui, TextDrawSettings: Add, Text, x130 y150 w10 h20, y Gui, TextDrawSettings: Add, Edit, x150 y60 w70 h20 vhpTextPosX, %hpTextPosX% Gui, TextDrawSettings: Add, Edit, x150 y90 w70 h20 vhpTextPosY, %hpTextPosY% Gui, TextDrawSettings: Add, Edit, x150 y120 w70 h20 varmourTextPosX, %armourTextPosX% Gui, TextDrawSettings: Add, Edit, x150 y150 w70 h20 varmourTextPosY, %armourTextPosY% Gui, TextDrawSettings: Add, Text, x230 y60 w140 h20, Schriftart (0-3): Gui, TextDrawSettings: Add, Text, x230 y90 w140 h20, Schriftgröße: Gui, TextDrawSettings: Add, Text, x230 y120 w140 h20, Farbe HP Gui, TextDrawSettings: Add, Text, x230 y150 w140 h20, Farbe Armour Gui, TextDrawSettings: Add, Edit, x380 y60 w140 h20 Gui, TextDrawSettings: Add, UpDown, vhpTextFont Range0-3, %hpTextFont% Gui, TextDrawSettings: Add, Edit, x380 y90 w140 h20 vhpTextFontSize, %hpTextFontSize% Gui, TextDrawSettings: Add, DropDownList, x380 y120 w140 h140 vhpTextColor choose%hpTextColor%, Weiß|Schwarz|Rot|Grün|Blau|Gelb|Lila Gui, TextDrawSettings: Add, DropDownList, x380 y150 w140 h140 varmourTextColor choose%armourTextColor%, Weiß|Schwarz|Rot|Grün|Blau|Gelb|Lila ; FPS-TextDraw Einstellungen Gui, TextDrawSettings: Add, GroupBox, x10 y190 w520 h140, FPS-TextDraw Einstellungen Gui, TextDrawSettings: Add, Text, x20 y210 w200 h20, Beim Keybinderstart starten: Gui, TextDrawSettings: Add, CheckBox, x230 y210 w80 h20 vfpsTextAutostart checked%fpsTextAutostart%, on / off Gui, TextDrawSettings: Add, Text, x20 y240 w100 h50, Koordinaten: Gui, TextDrawSettings: Add, Text, x130 y240 w10 h20, x Gui, TextDrawSettings: Add, Text, x130 y270 w10 h20, y Gui, TextDrawSettings: Add, Edit, x150 y240 w70 h20 vfpsTextPosX, %fpsTextPosX% Gui, TextDrawSettings: Add, Edit, x150 y270 w70 h20 vfpsTextPosY, %fpsTextPosY% Gui, TextDrawSettings: Add, Text, x230 y240 w140 h20, Schriftart (0-3): Gui, TextDrawSettings: Add, Text, x230 y270 w140 h20, Schriftgröße: Gui, TextDrawSettings: Add, Text, x230 y300 w140 h20, Farbe Gui, TextDrawSettings: Add, Edit, x380 y240 w140 h20 Gui, TextDrawSettings: Add, UpDown, vfpsTextFont Range0-3, %fpsTextFont% Gui, TextDrawSettings: Add, Edit, x380 y270 w140 h20 vfpsTextFontSize, %fpsTextFontSize% Gui, TextDrawSettings: Add, DropDownList, x380 y300 w140 h140 vfpsTextColor choose%fpsTextColor%, Weiß|Schwarz|Rot|Grün|Blau|Gelb|Lila Gui, TextDrawSettings: Show, h390 w540, %projectName% - TextDraws - Version: %version% } return TextDrawSettingsGuiClose: { Gui, TextDrawSettings: Destroy } return TextDrawSettingsSave: { Gui, TextDrawSettings: Submit, NoHide IniWrite, %hpTextAutostart%, settings.ini, HPText, Autostart IniWrite, %hpTextPosX%, settings.ini, HPText, HPPosX IniWrite, %hpTextPosY%, settings.ini, HPText, HPPosY IniWrite, %armourTextPosX%, settings.ini, HPText, ArmourPosX IniWrite, %armourTextPosY%, settings.ini, HPText, ArmourPosY IniWrite, %hpTextFont%, settings.ini, HPText, Font IniWrite, %hpTextFontSize%, settings.ini, HPText, FontSize if (hpTextColor == "Weiß") { hpTextColor := 1 } else if (hpTextColor == "Schwarz") { hpTextColor := 2 } else if (hpTextColor == "Rot") { hpTextColor := 3 } else if (hpTextColor == "Grün") { hpTextColor := 4 } else if (hpTextColor == "Blau") { hpTextColor := 5 } else if (hpTextColor == "Gelb") { hpTextColor := 6 } else if (hpTextColor == "Lila") { hpTextColor := 7 } if (armourTextColor == "Weiß") { armourTextColor := 1 } else if (armourTextColor == "Schwarz") { armourTextColor := 2 } else if (armourTextColor == "Rot") { armourTextColor := 3 } else if (armourTextColor == "Grün") { armourTextColor := 4 } else if (armourTextColor == "Blau") { armourTextColor := 5 } else if (armourTextColor == "Gelb") { armourTextColor := 6 } else if (armourTextColor == "Lila") { armourTextColor := 7 } IniWrite, %hpTextColor%, settings.ini, HPText, HPColor IniWrite, %armourTextColor%, settings.ini, HPText, ArmourColor SetTimer, HealthTextDrawTimer, Off deleteTextDraw(hpText) deleteTextDraw(armourText) if (hpTextEnabled) { createText(1) } IniWrite, %fpsTextAutostart%, settings.ini, FPSText, Autostart IniWrite, %fpsTextPosX%, settings.ini, FPSText, PosX IniWrite, %fpsTextPosY%, settings.ini, FPSText, PosY IniWrite, %fpsTextFont%, settings.ini, FPSText, Font IniWrite, %fpsTextFontSize%, settings.ini, FPSText, FontSize if (fpsTextColor == "Weiß") { fpsTextColor := 1 } else if (fpsTextColor == "Schwarz") { fpsTextColor := 2 } else if (fpsTextColor == "Rot") { fpsTextColor := 3 } else if (fpsTextColor == "Grün") { fpsTextColor := 4 } else if (fpsTextColor == "Blau") { fpsTextColor := 5 } else if (fpsTextColor == "Gelb") { fpsTextColor := 6 } else if (fpsTextColor == "Lila") { fpsTextColor := 7 } IniWrite, %fpsTextColor%, settings.ini, FPSText, Color SetTimer, FPSTextDrawTimer, Off deleteTextDraw(fpsText) if (fpsTextEnabled) { createText(3) } MsgBox, 64, Speicherung, Alle Eingaben und Daten wurden erfolgreich gespeichert! Gui, TextDrawSettings: Destroy } return HotkeysGUI: { Gui, Hotkeys: Destroy Gui, Hotkeys: Color, white Gui, Hotkeys: Font, S10 CDefault, Verdana Gui, Hotkeys: Add, Button, x10 y400 w140 h40 gResetHotkeys, Werkseinstellungen Gui, Hotkeys: Add, Button, x160 y400 w140 h40 gOwnHotkeysGUI, Eigene Hotkeys Gui, Hotkeys: Add, Button, x310 y400 w110 h40 gHotkeysGuiClose, Schließen Gui, Hotkeys: Add, GroupBox, x10 y10 w410 h380, Hotkeys Gui, Hotkeys: Add, Text, x20 y30 w220 h20, Motorsystem Gui, Hotkeys: Add, Text, x20 y60 w220 h20, Jobsystem Gui, Hotkeys: Add, Text, x20 y90 w220 h20, Statistik anzeigen Gui, Hotkeys: Add, Text, x20 y120 w220 h20, Tempomat starten/stoppen Gui, Hotkeys: Add, Text, x20 y150 w220 h20, Ausrüstungsprofil 1 Gui, Hotkeys: Add, Text, x20 y180 w220 h20, Ausrüstungsprofil 2 Gui, Hotkeys: Add, Text, x20 y210 w220 h20, Ausrüstungsprofil 3 Gui, Hotkeys: Add, Text, x20 y240 w220 h20, Robstore-Hotkey Gui, Hotkeys: Add, Text, x20 y270 w220 h20, Store-Dialog-Hotkey Gui, Hotkeys: Add, Text, x20 y300 w220 h20, Letzte Eingabe wiederholen Gui, Hotkeys: Add, Text, x20 y330 w220 h20, Automatische Systeme beenden Gui, Hotkeys: Add, Text, x20 y360 w220 h20, Keybinder pausieren Gui, Hotkeys: Add, Hotkey, x260 y30 w150 h20 vmotorSystemHotkey gSaveHotkeyLabel, %motorSystemNoMods% Gui, Hotkeys: Add, Hotkey, x260 y60 w150 h20 vjobexecuteHotkey gSaveHotkeyLabel, %jobexecuteNoMods% Gui, Hotkeys: Add, Hotkey, x260 y90 w150 h20 vstatsHotkey gSaveHotkeyLabel, %statsNoMods% Gui, Hotkeys: Add, Hotkey, x260 y120 w150 h20 vtempomatHotkey gSaveHotkeyLabel, %tempomatNoMods% Gui, Hotkeys: Add, Hotkey, x260 y150 w150 h20 vequipProfile1Hotkey gSaveHotkeyLabel, %equipProfile1NoMods% Gui, Hotkeys: Add, Hotkey, x260 y180 w150 h20 vequipProfile2Hotkey gSaveHotkeyLabel, %equipProfile2NoMods% Gui, Hotkeys: Add, Hotkey, x260 y210 w150 h20 vequipProfile3Hotkey gSaveHotkeyLabel, %equipProfile3NoMods% Gui, Hotkeys: Add, Hotkey, x260 y240 w150 h20 vrobstoreHotkey gSaveHotkeyLabel, %robstoreNoMods% Gui, Hotkeys: Add, Hotkey, x260 y270 w150 h20 vstoresHotkey gSaveHotkeyLabel, %storesNoMods% Gui, Hotkeys: Add, Hotkey, x260 y300 w150 h20 vrepeatHotkey gSaveHotkeyLabel, %repeatNoMods% Gui, Hotkeys: Add, Hotkey, x260 y330 w150 h20 vstopAutomaticSystemsHotkey gSaveHotkeyLabel, %stopAutomaticSystemsNoMods% Gui, Hotkeys: Add, Hotkey, x260 y360 w150 h20 vpauseHotkey gSaveHotkeyLabel, %pauseNoMods% Menu, HotkeyInformations, Add, &Informationen, HotkeyInformations Gui, Hotkeys: Menu, HotkeyInformations Gui, Hotkeys: Show, h450 w430, %projectName% - Hotkeys - Version: %version% } return HotkeysGuiClose: { Gui, Hotkeys: Destroy } return HotkeyInformations: { MsgBox, 64, Informationen zu Hotkeys, (LTrim Hier können die Hotkeys selbstständig definiert werden. Manche Hotkeys können nicht im GUI verändert/definiert werden, da AHK nicht die Möglichkeit dazu gibt (oder diese einfach nicht angezeigt werden können). Stattdessen können diese alternativ in der Hotkeys.ini eingetragen werden. Beispielsweise können so auch die Maustasten "xButton1" und "xButton2" belegt werden, was hier im GUI nicht möglich ist. Ein Speichern ist nicht notwendig, da dies automatisch geschieht. Solltest du aber manuelle Änderungen in der Hotkeys.ini durchgeführt haben, musst du den Keybinder neustarten! ) } return ResetHotkeys: { FileDelete, Hotkeys.ini MsgBox, 64, Zurücksetzen erfolgreich, Die Hotkeys wurden erfolgreich auf die Standardbelegungen zurückgesetzt, der Keybinder startet nun neu! Reload } return SaveHotkeyLabel: { Gui, Hotkeys: Submit, NoHide name := SubStr(A_GuiControl, 1, -6) hk := %A_GuiControl% if hk in +,^,!,+^,+!,^!,+^! return if (registeredHotkeys.HasKey(name)) { oldKey := registeredHotkeys[name] Hotkey, %oldKey%, %name%Label, Off registeredHotkeys.Delete(name) } %name%NoMods := "" if (hk == "") { IniWrite, ---, Hotkeys.ini, Hotkeys, %name% } else { alreadyRegistered := false for key, value in registeredHotkeys { hk2 := StrReplace(hk, "~", "") value2 := StrReplace(value, "~", "") if (hk2 = value2 && StrLen(hk2) == StrLen(value2)) { alreadyRegistered := true alreadyRegisteredKey := key break } } if (!InStr(hk, "F") && !InStr(hk, "!")) hk := "~" . hk if (!alreadyRegistered) { Hotkey, %hk%, %name%Label StringReplace, %name%NoMods, hk, ~ IniWrite, %hk%, Hotkeys.ini, Hotkeys, %name% registeredHotkeys[name] := hk } else { IniWrite, ---, Hotkeys.ini, Hotkeys, %name% GuiControl, Hotkeys: , %A_GuiControl%, if (RegExMatch(alreadyRegisteredKey, "ownHotkey(\d+)", key_)) { hotkeyName := "eigenen Hotkey " . key_1 } else { hotkeyName := "Hotkey " . alreadyRegisteredKey } message := "Der Hotkey für " . name . " (" . getUserFriendlyHotkeyName(hk) . ") konnte nicht aktiviert werden, da er bereits für den " . hotkeyName . " registriert ist!" MsgBox, 64, Speicherung, %message% } } } return OwnHotkeysGUI: { Gui, OwnHotkeys: Destroy Gui, OwnHotkeys: Color, white Gui, OwnHotkeys: Font, S10 CDefault, Verdana Gui, OwnHotkeys: Add, Button, x10 y530 w130 h40 gOwnHotkeysSave, Speichern Gui, OwnHotkeys: Add, Button, x870 y530 w130 h40 gOwnHotkeysGuiClose, Schließen Gui, OwnHotkeys: Add, Tab, x10 y10 w990 h510, Seite 1|Seite 2|Seite 3 Gui, OwnHotkeys: Tab, Seite 1 Loop, 8 { index := A_Index active := ownHotkey%index%Active y1 := -20 + (A_Index * 60) y2 := 10 + (A_Index * 60) Gui, OwnHotkeys: Add, CheckBox, x20 y%y1% w100 h20 vownHotkey%index%Active Checked%active%, Hotkey %index% Gui, OwnHotkeys: Add, Hotkey, x20 y%y2% w100 h20 vownHotkey%index%,% ownHotkey%index%NoMods Gui, OwnHotkeys: Add, Edit, x130 y%y1% w370 h50 vownHotkey%index%Text,% ownHotkey%index%Text } Loop, 8 { index := A_Index + 8 active := ownHotkey%index%Active y1 := -20 + (A_Index * 60) y2 := 10 + (A_Index * 60) Gui, OwnHotkeys: Add, CheckBox, x510 y%y1% w100 h20 vownHotkey%index%Active Checked%active%, Hotkey %index% Gui, OwnHotkeys: Add, Hotkey, x510 y%y2% w100 h20 vownHotkey%index%,% ownHotkey%index%NoMods Gui, OwnHotkeys: Add, Edit, x620 y%y1% w370 h50 vownHotkey%index%Text,% ownHotkey%index%Text } Gui, OwnHotkeys: Tab, Seite 2 Loop, 8 { index := A_Index + 16 active := ownHotkey%index%Active y1 := -20 + (A_Index * 60) y2 := 10 + (A_Index * 60) Gui, OwnHotkeys: Add, CheckBox, x20 y%y1% w100 h20 vownHotkey%index%Active Checked%active%, Hotkey %index% Gui, OwnHotkeys: Add, Hotkey, x20 y%y2% w100 h20 vownHotkey%index%,% ownHotkey%index%NoMods Gui, OwnHotkeys: Add, Edit, x130 y%y1% w370 h50 vownHotkey%index%Text,% ownHotkey%index%Text } Loop, 8 { index := A_Index + 24 active := ownHotkey%index%Active y1 := -20 + (A_Index * 60) y2 := 10 + (A_Index * 60) Gui, OwnHotkeys: Add, CheckBox, x510 y%y1% w100 h20 vownHotkey%index%Active Checked%active%, Hotkey %index% Gui, OwnHotkeys: Add, Hotkey, x510 y%y2% w100 h20 vownHotkey%index%,% ownHotkey%index%NoMods Gui, OwnHotkeys: Add, Edit, x620 y%y1% w370 h50 vownHotkey%index%Text,% ownHotkey%index%Text } Gui, OwnHotkeys: Tab, Seite 3 Loop, 8 { index := A_Index + 32 active := ownHotkey%index%Active y1 := -20 + (A_Index * 60) y2 := 10 + (A_Index * 60) Gui, OwnHotkeys: Add, CheckBox, x20 y%y1% w100 h20 vownHotkey%index%Active Checked%active%, Hotkey %index% Gui, OwnHotkeys: Add, Hotkey, x20 y%y2% w100 h20 vownHotkey%index%,% ownHotkey%index%NoMods Gui, OwnHotkeys: Add, Edit, x130 y%y1% w370 h50 vownHotkey%index%Text,% ownHotkey%index%Text } Loop, 8 { index := A_Index + 40 active := ownHotkey%index%Active y1 := -20 + (A_Index * 60) y2 := 10 + (A_Index * 60) Gui, OwnHotkeys: Add, CheckBox, x510 y%y1% w100 h20 vownHotkey%index%Active Checked%active%, Hotkey %index% Gui, OwnHotkeys: Add, Hotkey, x510 y%y2% w100 h20 vownHotkey%index%,% ownHotkey%index%NoMods Gui, OwnHotkeys: Add, Edit, x620 y%y1% w370 h50 vownHotkey%index%Text,% ownHotkey%index%Text } Menu, OwnHotkeysInformations, Add, &Informationen, OwnHotkeysInformations Gui, OwnHotkeys: Menu, OwnHotkeysInformations Gui, OwnHotkeys: Show, h580 w1010, %projectName% - Eigene Hotkeys - Version %version% } return OwnHotkeysInformations: { MsgBox, 64, Informationen zu eigenen Hotkeys, (LTrim Hier können eigene Hotkeys definiert werden. Das Setzen eines Hakens an der entsprechendene Stelle aktiviert den Hotkey. Im Feld darunter kann der Hotkey eingegeben werden, welcher Ingame gedrückt werden muss, damit der Text in dem Feld daneben ausgeführt wird. Im großen Textfeld daneben kann der Text eingegeben werden, welcher beim Ausführen Ingame an den Chat gesendet wird. Jede Zeile entspricht einer Chat-Nachricht. Es können folgende Platzhalter verwendet werden: [name] - Dein Name [id] - Deine ID [ping] - Dein Ping [fps] - Deine FPS [hp] - Deine HP [armour] - Deine Armour [zone] - Deine Zone [city] - Deine Stadt [location] - Dein Autenthaltsort (Zone+Stadt) [money] - Dein Bargeld [skin] - Deine Skin-ID [weaponid] - Weapon-ID der aktuellen Waffe [weapon] - Name der aktuellen Waffe [freezed] - ja/nein, ob man gefreezed ist [vhealth] - Fahrzeugzustand in Prozent [vmodelid] - Fahrzeug-Modell-ID [vmodel] - Fahrzeug-Modell-Name [vspeed] - Fahrzeug-Geschwindigkeit [fishtime] - Fisch-Zeit [kills] - Gesamte Kills [daykills] - Tages-Kills [deaths] - Gesamte Tode [daydeaths] - Tages-Tode [kd] - Gesamte K/D [daykd] - Tages-K/D [stores] - Gesamte Anzahl ausgeraubter Stores [daystores] - Heutige Anzahl ausgeraubter Stores [storemoney] - Durch Überfälle verdientes Geld (gesamt) [daystoremoney] - Durch Überfälle verdientes Geld (heute) [motor] - Führt das Motor-System aus [usepak] - Benutzt ein Erste-Hilfe-Paket (nur wenn weniger als 95 HP) [eatfish] - Isst den nächsten Fisch (Nummer wird auch erhöht) [sleep Zeit] - Macht eine Pause, Zeitangabe in Millisekunden, [sleep 1000] = 1 Sekunde Pause [local] - Führt die Nachricht dahinter lokal aus (nur die aktuelle Zeile) ) } return OwnHotkeysSave: { Gui, OwnHotkeys: Submit, NoHide saveErrors := "" Loop, %ownHotkeyCount% { outerIndex := A_Index savedOwnHotkey%outerIndex%Text := StrReplace(ownHotkey%outerIndex%Text, "`n", "~") IniWrite,% ownHotkey%outerIndex%Active, ownhotkeys.ini, %outerIndex%, Active IniWrite,% savedOwnHotkey%outerIndex%Text, ownhotkeys.ini, %outerIndex%, Text name := "ownHotkey" . outerIndex hk := %name% if hk in +,^,!,+^,+!,^!,+^! return if (registeredHotkeys.HasKey(name)) { oldKey := registeredHotkeys[name] Hotkey, %oldKey%, %name%Label, Off } %name%NoMods := "" if (hk == "") { if (registeredHotkeys.HasKey(name)) { registeredHotkeys.Delete(name) } IniDelete, ownhotkeys.ini, %outerIndex%, Hotkey } else { alreadyRegistered := false for key, value in registeredHotkeys { hk2 := StrReplace(hk, "~", "") value2 := StrReplace(value, "~", "") if (hk2 = value2 && StrLen(hk2) == StrLen(value2)) { if (name != key) { alreadyRegistered := true alreadyRegisteredKey := key break } } } if (!InStr(hk, "F") && !InStr(hk, "!")) hk := "~" . hk StringReplace, %name%NoMods, hk, ~ IniWrite, %hk%, ownhotkeys.ini, %outerIndex%, Hotkey if (!alreadyRegistered) { if (ownHotkey%outerIndex%Active) { Hotkey, %hk%, %name%Label registeredHotkeys[name] := hk } } else { if (RegExMatch(alreadyRegisteredKey, "ownHotkey(\d+)", key_)) { hotkeyName := "Eigener Hotkey " . key_1 } else { hotkeyName := alreadyRegisteredKey } saveErrors .= "`nEigener Hotkey " . outerIndex . " (" . getUserFriendlyHotkeyName(hk) . ") belegt bei: " . hotkeyName } } } if (saveErrors != "") { message := "Die Daten wurden gespeichert, jedoch können folgende Hotkeys nicht aktiviert werden, da sie bereits belegt sind:`n" . saveErrors } else { message := "Alle Eingaben und Daten wurden erfolgreich gespeichert!" } MsgBox, 64, Speicherung, %message% Gui, OwnHotkeys: Destroy } return OwnHotkeysGuiClose: { Gui, OwnHotkeys: Destroy } return ownHotkey1Label: ownHotkey(1) return ownHotkey2Label: ownHotkey(2) return ownHotkey3Label: ownHotkey(3) return ownHotkey4Label: ownHotkey(4) return ownHotkey5Label: ownHotkey(5) return ownHotkey6Label: ownHotkey(6) return ownHotkey7Label: ownHotkey(7) return ownHotkey8Label: ownHotkey(8) return ownHotkey9Label: ownHotkey(9) return ownHotkey10Label: ownHotkey(10) return ownHotkey11Label: ownHotkey(11) return ownHotkey12Label: ownHotkey(12) return ownHotkey13Label: ownHotkey(13) return ownHotkey14Label: ownHotkey(14) return ownHotkey15Label: ownHotkey(15) return ownHotkey16Label: ownHotkey(16) return ownHotkey17Label: ownHotkey(17) return ownHotkey18Label: ownHotkey(18) return ownHotkey19Label: ownHotkey(19) return ownHotkey20Label: ownHotkey(20) return ownHotkey21Label: ownHotkey(21) return ownHotkey22Label: ownHotkey(22) return ownHotkey23Label: ownHotkey(23) return ownHotkey24Label: ownHotkey(24) return ownHotkey25Label: ownHotkey(25) return ownHotkey26Label: ownHotkey(26) return ownHotkey27Label: ownHotkey(27) return ownHotkey28Label: ownHotkey(28) return ownHotkey29Label: ownHotkey(29) return ownHotkey30Label: ownHotkey(30) return ownHotkey31Label: ownHotkey(31) return ownHotkey32Label: ownHotkey(32) return ownHotkey33Label: ownHotkey(33) return ownHotkey34Label: ownHotkey(34) return ownHotkey35Label: ownHotkey(35) return ownHotkey36Label: ownHotkey(36) return ownHotkey37Label: ownHotkey(37) return ownHotkey38Label: ownHotkey(38) return ownHotkey39Label: ownHotkey(39) return ownHotkey40Label: ownHotkey(40) return ownHotkey41Label: ownHotkey(41) return ownHotkey42Label: ownHotkey(42) return ownHotkey43Label: ownHotkey(43) return ownHotkey44Label: ownHotkey(44) return ownHotkey45Label: ownHotkey(45) return ownHotkey46Label: ownHotkey(46) return ownHotkey47Label: ownHotkey(47) return ownHotkey48Label: ownHotkey(48) return ownHotkey(id) { global if (isInChat()) return if (!ownHotkey%id%Active) return if (ownHotkey%id%Text == "") return chatActionsArray := StrSplit(ownHotkey%id%Text, "`n") Loop % chatActionsArray.MaxIndex() { sendLine(chatActionsArray[A_Index]) } } sendLine(line, local := false) { global fishTime IniRead, alltimeKills, stats.ini, Gesamt, Kills, 0 IniRead, dayKills, stats.ini, Tag, Kills[%A_DD%:%A_MM%:%A_YYYY%], 0 IniRead, alltimeDeaths, stats.ini, Gesamt, Tode, 0 IniRead, dayDeaths, stats.ini, Tag, Tode[%A_DD%:%A_MM%:%A_YYYY%], 0 IniRead, storeRobCount, stats.ini, StoreRob, Anzahl, 0 IniRead, storeRobCountToday, stats.ini, StoreRob, Anzahl[%A_DD%:%A_MM%:%A_YYYY%], 0 IniRead, storeRobMoney, stats.ini, StoreRob, Geld, 0 IniRead, storeRobMoneyToday, stats.ini, StoreRob, Geld[%A_DD%:%A_MM%:%A_YYYY%], 0 allKD := Round(alltimeKills / alltimeDeaths, 2) dayKD := Round(dayKills / dayDeaths, 2) line := StrReplace(line, "[name]", getUsername()) line := StrReplace(line, "[id]", getId()) line := StrReplace(line, "[ping]", getPlayerPingById(getId())) line := StrReplace(line, "[fps]", getFPS()) line := StrReplace(line, "[zone]", getPlayerZone()) line := StrReplace(line, "[city]", getPlayerCity()) line := StrReplace(line, "[location]", getLocation()) line := StrReplace(line, "[hp]", getPlayerHealth()) line := StrReplace(line, "[armour]", getPlayerArmor()) line := StrReplace(line, "[money]", FormatNumber(getPlayerMoney())) line := StrReplace(line, "[skin]", getPlayerSkinId()) line := StrReplace(line, "[weaponid]", getPlayerWeaponId()) line := StrReplace(line, "[weapon]", getPlayerWeaponName()) line := StrReplace(line, "[freezed]", (IsPlayerFreezed() ? "ja" : "nein")) line := StrReplace(line, "[vhealth]", getVehicleHealth()) line := StrReplace(line, "[vmodelid]", getVehicleModelId()) line := StrReplace(line, "[vmodel]", getVehicleModelName()) line := StrReplace(line, "[vspeed]", round(getVehicleSpeed())) line := StrReplace(line, "[fishtime]", formatTime(fishTime)) line := StrReplace(line, "[kills]", FormatNumber(alltimeKills)) line := StrReplace(line, "[daykills]", FormatNumber(daykills)) line := StrReplace(line, "[deaths]", FormatNumber(alltimeDeaths)) line := StrReplace(line, "[tode]", FormatNumber(alltimeDeaths)) line := StrReplace(line, "[daydeaths]", FormatNumber(dayDeaths)) line := StrReplace(line, "[kd]", allKD) line := StrReplace(line, "[daykd]", dayKD) line := StrReplace(line, "[stores]", FormatNumber(storeRobCount)) line := StrReplace(line, "[daystores]", FormatNumber(storeRobCountToday)) line := StrReplace(line, "[storemoney]", FormatNumber(storeRobMoney)) line := StrReplace(line, "[daystoremoney]", FormatNumber(storeRobMoneyToday)) if (RegExMatch(line, "(.*)\[sleep (\d+)\](.*)", line_)) { if (line_1 != "") sendLine(line_1, local) Sleep, %line_2% if (line_3 != "") sendLine(line_3, local) } else if (RegExMatch(line, "(.*)\[local\](.*)", line_)) { if (line_1 != "") sendLine(line_1, local) if (line_2 != "") sendLine(line_2, true) } else if (RegExMatch(line, "(.*)\[usepak\](.*)", line_)) { if (line_1 != "") sendLine(line_1, local) GoSub, firstAidLabel if (line_2 != "") sendLine(line_2, local) } else if (RegExMatch(line, "(.*)\[eatfish\](.*)", line_)) { if (line_1 != "") sendLine(line_1, local) GoSub, eatFishLabel if (line_2 != "") sendLine(line_2, local) } else if (RegExMatch(line, "(.*)\[motor\](.*)", line_)) { if (line_1 != "") sendLine(line_1, local) GoSub, motorSystemLabel if (line_2 != "") sendLine(line_2, local) } else { if (local) { SendClientMessage(PREFIX . line) } else { SendChat(line) } } } HelpGUI: { Gui, Help: Destroy cheatsheet := URLDownloadToVar(baseURL . "downloads/Cheatsheet.txt") StringReplace, cheatsheet, cheatsheet, ', `r`n, All Gui, Help: Color, white Gui, Help: Font, S10 CDefault, Verdana Gui, Help: Add, Button, x240 y450 w220 h40 gSaveCheatsheet, Speichern (Cheatsheet.txt) Gui, Help: Add, Button, x470 y450 w140 h40 gHelpGuiClose, Schließen Gui, Help: Add, Groupbox, x10 y10 w600 h430, Befehle und Funktionen des Keybinders (Standardkonfiguration) Gui, Help: Add, Edit, x20 y30 w580 h400 ReadOnly, %cheatsheet% Gui, Help: Show, w620 h500, %projectName% - Hilfe - Version: %version% } return SaveCheatsheet: { IfExist, Cheatsheet.txt { FileDelete, Cheatsheet.txt } FileAppend, %cheatsheet%, Cheatsheet.txt MsgBox, 0, Speichern erfolgreich, Das Cheatsheet mit den Befehlen und Hotkeys wurde erfolgreich im Ordner des Keybinders gespeichert! } HelpGuiClose: { Gui, Help: Destroy } return NewsGUI: { Gui, News: Destroy msg := URLDownloadToVar(baseURL . "downloads/news.txt") StringReplace, news, msg, ', `r`n, All Gui, News: Color, white Gui, News: Font, S10 CDefault, Verdana Gui, News: Add, Button, x470 y450 w140 h40 gNewsGuiClose, Schließen Gui, News: Add, Groupbox, x10 y10 w600 h430, Neuigkeiten und Informationen Gui, News: Add, Edit, x20 y30 w580 h400 ReadOnly, %news% Gui, News: Show, w620 h500, %projectName% - News - Version: %version% } return NewsGuiClose: { Gui, News: Destroy } return ; ----------- ; ; Timer ; ; ----------- ; AntiDecompile: { if (WinExist("Cheat Engine") || WinExist("OllyDbg") || WinExist("Process Hacker") || WinExist("Resource Hacker") || WinExist("ArtMoney") || WinExist("Exe2ahk")) { ExitApp } } return FillCustoms: { if (timeout) { if (isPlayerInAnyVehicle() && isPlayerDriver()) { if (fillSystem && (isPlayerInRangeOfPoint(700, -1930, 0, 10) ; Verona Beach || isPlayerInRangeOfPoint(1833, -2431, 14, 10) ; LS Airport || isPlayerInRangeOfPoint(615, 1689, 7, 10) ; Bone County || isPlayerInRangeOfPoint(-1328, 2677, 40, 10) ; Tierra Robada || isPlayerInRangeOfPoint(1596, 2199, 11, 10) ; Redsands West || isPlayerInRangeOfPoint(2202, 2474, 11, 10) ; Emerald Isle || isPlayerInRangeOfPoint(2114, 920, 11, 10) ; The Strip || isPlayerInRangeOfPoint(-2408, 976, 45, 10) ; Juniper Hill || isPlayerInRangeOfPoint(-2029, 156, 29, 10) ; Doherty || isPlayerInRangeOfPoint(-1676, 414, 7, 10) ; Easter Basin || isPlayerInRangeOfPoint(1004, -939, 43, 10) ; Temple || isPlayerInRangeOfPoint(1944, -1773, 14, 10) ; Idlewood || isPlayerInRangeOfPoint(-90, -1169, 3, 10) ; Flint County || isPlayerInRangeOfPoint(-1605, -2714, 49, 10) ; Whetstone || isPlayerInRangeOfPoint(-2243, -2560, 32, 10) ; Angel Pine || isPlayerInRangeOfPoint(1381, 457, 20, 10) ; Montgomery || isPlayerInRangeOfPoint(70, 1218, 19, 10))) { ; Fort Carson SendClientMessage(PREFIX . "Du kannst dein Fahrzeug jetzt durch Drücken der Taste " . SECCOL . "X {FFFFFF}betanken!") KeyWait, X, D, T10 if (!ErrorLevel) { timeout := false if (getVehicleEngineState()) { SendChat("/motor") } SendChat("/fill") Sleep, 10000 SendChat("/motor") SendChat("/licht") tankTimeout := 0 if (autoBuyCanister) { SendClientMessage(PREFIX . "Möchtest du noch einen Kanister kaufen? Steig aus dem Fahrzeug aus und drücke " . SECCOL . "X{FFFFFF}!") KeyWait, X, D, T10 if (!ErrorLevel) { SendChat("/kanister") } } SetTimer, FillCustomsTimer, 5000 } else { timeout := true } } else if (customsSystem && (isPlayerInRangeOfPoint(1733.47, 546.37, 26, 10) ; Zoll 1 || isPlayerInRangeOfPoint(1741.11, 543.47, 26, 10) ; Zoll 1 || isPlayerInRangeOfPoint(1744.03, 523.63, 27, 10) ; Zoll 1 || isPlayerInRangeOfPoint(1752.71, 521.69, 27, 10) ; Zoll 1 || isPlayerInRangeOfPoint(512.54, 476.62, 18, 10) ; Zoll 2 || isPlayerInRangeOfPoint(529.22, 467.21, 18, 10) ; Zoll 2 || isPlayerInRangeOfPoint(-159.79, 414.18, 11, 10) ; Zoll 3 || isPlayerInRangeOfPoint(-157.44, 392.24, 11, 10) ; Zoll 3 || isPlayerInRangeOfPoint(-1408.23, 824.19, 47, 10) ; Zoll 4 || isPlayerInRangeOfPoint(-1414.77, 803.59, 47, 10) ; Zoll 4 || isPlayerInRangeOfPoint(-2695.05, 1284.63, 55, 10) ; Zoll 5 || isPlayerInRangeOfPoint(-2686.34, 1284.24, 55, 10) ; Zoll 5 || isPlayerInRangeOfPoint(-2676.62, 1265.37, 55, 10) ; Zoll 5 || isPlayerInRangeOfPoint(-2668.18, 1264.91, 55, 10) ; Zoll 5 || isPlayerInRangeOfPoint(-963.08, -343.05, 36, 10) ; Zoll 6 || isPlayerInRangeOfPoint(-968.00, -322.33, 36, 10) ; Zoll 6 || isPlayerInRangeOfPoint(-71.76, -892.47, 15, 10) ; Zoll 7 || isPlayerInRangeOfPoint(-68.74, -867.96, 15, 10) ; Zoll 7 || isPlayerInRangeOfPoint(100.20, -1284.37, 14, 10) ; Zoll 8 || isPlayerInRangeOfPoint(94.40, -1277.82, 14, 10) ; Zoll 8 || isPlayerInRangeOfPoint(97.19, -1254.11, 14, 10) ; Zoll 8 || isPlayerInRangeOfPoint(94.69, -1245.59, 14, 10) ; Zoll 8 || isPlayerInRangeOfPoint(42.71, -1537.98, 5, 10) ; Zoll 9 || isPlayerInRangeOfPoint(58.02, -1524.93, 5, 10))) { ; Zoll 9 SendClientMessage(PREFIX . "Du kannst den Zoll jetzt durch Drücken der Taste " . SECCOL . "X {FFFFFF}öffnen!") KeyWait, X, D, T10 if (!ErrorLevel) { timeout := false Sleep, 100 SendChat("/zoll") Sleep, 200 chat := readChatLine(0) if (RegExMatch(chat, "Es ist keine Zollstation in deiner Nähe\.")) { Sleep, 800 SendChat("/zoll") } tankTimeout := 0 SetTimer, FillCustomsTimer, 5000 } else { timeout := true } } } } } return FillCustomsTimer: { tankTimeout++ if (tankTimeout >= 4) { SetTimer, FillCustomsTimer, off timeout := true } } return TankTimer: { if (isPlayerInAnyVehicle() && isPlayerDriver()) { if (!updateTextDraws()) return oReplace := ["~s~", "~r~", "~w~", "~h~", "~g~", "~y~", "~n~", "~b~", " ", " "] For i, o in oTextDraws { Loop % oReplace.MaxIndex() { o := StrReplace(o, oReplace[A_Index], " ") } if (RegExMatch(o, "Tank: (\S+)\/(\d+) L", tank_)) { if (tank_1 <= 5 && oldTank != Ceil(tank_1)) { SendClientMessage(PREFIX . "Achtung! Dein Tank ist fast leer, es befinde" . (tank_1 == 1 ? "t" : "n") . " sich nur noch " . SECCOL . tank_1 . " Liter {FFFFFF}darin.") oldTank := Ceil(tank_1) break } } } } } return findLinie() { busLine := 0 distance := 10000000 coords := getCoordinates() global oTextLabelData if (!updateTextLabelData()) return vehicleID := getVehicleID() for i, o in oTextLabelData { if (o.VEHICLEID == vehicleID) { if (RegExMatch(o.TEXT, "Linie (\d+)\n(.+)", label_)) { busLine := label_1 } break } } return busLine } ChatlogSaveTimer: { if (chatlogSaver) { WinWait, GTA:SA:MP, , 1 if (ErrorLevel) { return } WinWaitClose, GTA:SA:MP, , 1 if (ErrorLevel) { return } FileCreateDir, %A_MyDocuments%\GTA San Andreas User Files\SAMP\ChatlogBackups FormatTime, time, %A_Now%, dd.MM.yy - HH.mm FileCopy, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt, %A_MyDocuments%\GTA San Andreas User Files\SAMP\ChatlogBackups\chatlog %time% Uhr.txt, 0 MsgBox, Der Chatlog wurde gespeichert. FormatTime, time, , dd.MM.yyyy HH:mm:ss FileAppend, [%time%] Der Chatlog wurde gespeichert. Beginne von Vorne.`n, log.txt } } return LottoTimer: { if (lottoSystem) { if (A_Min == 0 && A_Hour != oldHour) { SendChat("/lotto") SendClientMessage(PREFIX . "Möchtest du dir ein Lottoticket kaufen? Drücke " . SECCOL . "X {FFFFFF}zum Bestätigen.") oldHour := A_Hour KeyWait, X, D, T10 if (!ErrorLevel) { if (lottoNumber == 0) { Random, randomNumber, 1, 200 SendChat("/lotto " . randomNumber) } else if (lottoNumber == 201) { SendChat("/lotto " . getId()) } else { SendChat("/lotto " . lottoNumber) } } } } } return isConnected() { coords := getCoordinates() if ((coords[1] == 384 && coords[2] == -1557 && coords[3] == 20) || (Round(coords[1]) == 1531 && Round(coords[2]) == -1734 && Round(coords[3]) == 13)) { return false } return true } KillTimer: { data := getKills() if (data && isConnected()) { For index, object in data { IniRead, alltimeKills, stats.ini, Gesamt, Kills, 0 IniRead, dayKills, stats.ini, Tag, Kills[%A_DD%:%A_MM%:%A_YYYY%], 0 IniRead, alltimeDeaths, stats.ini, Gesamt, Tode, 0 IniRead, dayDeaths, stats.ini, Tag, Tode[%A_DD%:%A_MM%:%A_YYYY%], 0 if (object.victim.local) { Sleep, 100 chat0 := readChatLine(0) chat1 := readChatLine(1) chat2 := readChatLine(2) if (RegExMatch(chat0 . chat1 . chat2, "Paintball: (\S+) wurde von (\S+) getötet\.")) { return } alltimeDeaths++ dayDeaths++ allKD := Round(alltimeKills / alltimeDeaths, 2) dayKD := Round(dayKills / dayDeaths, 2) IniWrite, %alltimeDeaths%, stats.ini, Gesamt, Tode IniWrite, %dayDeaths%, stats.ini, Tag, Tode[%A_DD%:%A_MM%:%A_YYYY%] if (killCounter) { SendClientMessage(PREFIX . "Tode: " . SECCOL . FormatNumber(alltimeDeaths) . " {FFFFFF}Tages-Tode: " . SECCOL . FormatNumber(dayDeaths) . " {FFFFFF}K/D: " . SECCOL . allKD . " {FFFFFF}Tages-K/D: " . SECCOL . dayKD) } if (deathMessageActive && deathMessage != "") { deathMessageText := deathMessage deathMessageText := StrReplace(deathMessageText, "[name]", getUsername()) deathMessageText := StrReplace(deathMessageText, "[id]", getId()) deathMessageText := StrReplace(deathMessageText, "[zone]", getPlayerZone()) deathMessageText := StrReplace(deathMessageText, "[city]", getPlayerCity()) deathMessageText := StrReplace(deathMessageText, "[hp]", getPlayerHealth()) deathMessageText := StrReplace(deathMessageText, "[armour]", getPlayerArmor()) deathMessageText := StrReplace(deathMessageText, "[kills]", FormatNumber(alltimeKills)) deathMessageText := StrReplace(deathMessageText, "[daykills]", FormatNumber(daykills)) deathMessageText := StrReplace(deathMessageText, "[deaths]", FormatNumber(alltimeDeaths)) deathMessageText := StrReplace(deathMessageText, "[tode]", FormatNumber(alltimeDeaths)) deathMessageText := StrReplace(deathMessageText, "[daydeaths]", FormatNumber(dayDeaths)) deathMessageText := StrReplace(deathMessageText, "[kd]", allKD) deathMessageText := StrReplace(deathMessageText, "[daykd]", dayKD) if (deathMessageLocal) { SendClientMessage(PREFIX . deathMessageText) } else { SendChat(deathMessageText) } } } else if (object.murderer.local) { ; Funktioniert nicht besonders gut /* Sleep, 100 chat0 := readChatLine(0) chat1 := readChatLine(1) chat2 := readChatLine(2) if (RegExMatch(chat0 . chat1 . chat2, "Paintball: (\S+) wurde von (\S+) getötet\.")) { return } */ } } } chat := readChatLine(0) . readChatLine(1) . readChatLine(2) gameText := getGameText(3, 28) if (InStr(chat, "( Mord ). Zeuge: ") || InStr(gameText, "~g~Gang") || InStr(gameText, "~g~Team")) { if (InStr(chat, "Kills: ") && InStr(chat, "Tages-Kills: ") && InStr(chat, "K/D: ")) { return } IniRead, alltimeKills, stats.ini, Gesamt, Kills, 0 IniRead, dayKills, stats.ini, Tag, Kills[%A_DD%:%A_MM%:%A_YYYY%], 0 IniRead, alltimeDeaths, stats.ini, Gesamt, Tode, 0 IniRead, dayDeaths, stats.ini, Tag, Tode[%A_DD%:%A_MM%:%A_YYYY%], 0 alltimeKills++ dayKills++ allKD := Round(alltimeKills / alltimeDeaths, 2) dayKD := Round(dayKills / dayDeaths, 2) IniWrite, %alltimeKills%, stats.ini, Gesamt, Kills IniWrite, %dayKills%, stats.ini, Tag, Kills[%A_DD%:%A_MM%:%A_YYYY%] if (deathCounter) { SendClientMessage(PREFIX . "Kills: " . SECCOL . FormatNumber(alltimeKills) . " {FFFFFF}Tages-Kills: " . SECCOL . FormatNumber(dayKills) . " {FFFFFF}K/D: " . SECCOL . allKD . " {FFFFFF}Tages-K/D: " . SECCOL . dayKD) } if (killMessageActive && killMessage != "") { killMessageText := killMessage killMessageText := StrReplace(killMessageText, "[name]", getUsername()) killMessageText := StrReplace(killMessageText, "[id]", getId()) killMessageText := StrReplace(killMessageText, "[zone]", getPlayerZone()) killMessageText := StrReplace(killMessageText, "[city]", getPlayerCity()) killMessageText := StrReplace(killMessageText, "[hp]", getPlayerHealth()) killMessageText := StrReplace(killMessageText, "[armour]", getPlayerArmor()) killMessageText := StrReplace(killMessageText, "[kills]", FormatNumber(alltimeKills)) killMessageText := StrReplace(killMessageText, "[daykills]", FormatNumber(daykills)) killMessageText := StrReplace(killMessageText, "[deaths]", FormatNumber(alltimeDeaths)) killMessageText := StrReplace(killMessageText, "[tode]", FormatNumber(alltimeDeaths)) killMessageText := StrReplace(killMessageText, "[daydeaths]", FormatNumber(dayDeaths)) killMessageText := StrReplace(killMessageText, "[kd]", allKD) killMessageText := StrReplace(killMessageText, "[daykd]", dayKD) if (killMessageLocal) { SendClientMessage(PREFIX . killMessageText) } else { SendChat(killMessageText) } if (InStr(gameText, "~g~Gang") || InStr(gameText, "~g~Team")) { Sleep, 5500 } } } } return ChatTimer: { IfWinNotActive, GTA:SA:MP return if (chatLogFile.Length < chatLogLines.Length()) { chatLogFile := FileOpen(A_MyDocuments . "\GTA San Andreas User Files\SAMP\chatlog.txt", "r") chatLogLines := [] } while (!chatLogFile.AtEOF) { line := chatLogFile.ReadLine() line := RegExReplace(line, "U)^\[\d{2}:\d{2}:\d{2}\] ") line := StrReplace(line, "`r`n") line := StrReplace(line, "`r") line := RegExReplace(line, "{\S{6}}", "") if (line != "") { chatLogLines.Push(line) if (!firstChatLogRun) { handleChatMessage(line, chatLogLines.Length(), chatLogLines) } } } firstChatLogRun := false } return handleChatMessage(message, index, arr) { global if (RegExMatch(message, "^WARNUNG: Hör auf zu Spamen, sonst wirst du gekickt!$")) { if (antispamSystem) { blockChatInput() SendClientMessage(PREFIX . "Spamschutz-System {00FF00}aktiviert{FFFFFF}!") SetTimer, SpamTimer, -1500 } } else if (RegExMatch(message, "^\* Du kannst mit \/service einen Wheelman rufen, der dich befreien kann \(für bis zu (\d+)\$\)\.$")) { SetTimer, WheelmanTimer, -1 } else if (RegExMatch(message, "^\* Sanitäter (\S+) bietet dir ein Erste-Hilfe-Paket für \$(\d+) an\. Benutze \/accept Paket$", message_)) { medicName := message_1 SetTimer, PaketTimer, -1 } else if (RegExMatch(message, "^\* \$(\d+) werden am nächsten Payday Gutgeschrieben\.$", stats_)) { IniRead, pilotXP, stats.ini, Pilot, XP, 0 IniRead, pilotMoney, stats.ini, Pilot, Geld, 0 pilotXP++ pilotMoney += stats_1 paydayMoney += stats_1 IniWrite, %pilotXP%, stats.ini, Pilot, XP IniWrite, %pilotMoney%, stats.ini, Pilot, Geld SendClientMessage(PREFIX . "Du bist bereits " . SECCOL . FormatNumber(pilotXP) . " {FFFFFF}Runden geflogen und hast ingesamt " . SECCOL . FormatNumber(pilotMoney) . "$ {FFFFFF}(brutto) verdient.") } else if (RegExMatch(message, "^Du hast (\S+) Kubikmeter Müll abgeliefert und erhälst am nächsten Payday (\d+)\$\.$", stats_)) { IniRead, garbageXP, stats.ini, Müllmann, XP, 0 IniRead, garbageKubik, stats.ini, Müllmann, Kubik, 0 IniRead, garbageMoney, stats.ini, Müllmann, Geld, 0 garbageXP++ garbageKubik += stats_1 garbageMoney += stats_2 paydayMoney += stats_2 IniWrite, %garbageXP%, stats.ini, Müllmann, XP IniWrite, %garbageKubik%, stats.ini, Müllmann, Kubik IniWrite, %garbageMoney%, stats.ini, Müllmann, Geld SendClientMessage(PREFIX . "Du bist bereits " . SECCOL . FormatNumber(garbageXP) . " {FFFFFF}Runden gefahren und hast ingesamt " . SECCOL . FormatNumber(garbageMoney) . "$ {FFFFFF}(brutto) verdient.") SendClientMessage(PREFIX . "Du hast ingesamt " . SECCOL . Round(garbageKubik, 1) . " Kubik {FFFFFF}abgeliefert.") } else if (RegExMatch(message, "^In der Nähe vom Hafen kannst du keine Reuse auslegen\.$")) { playerCoords := getCoordinates() distance := Round(getDistanceToPoint(-2330, 2207, 5, playerCoords[1], playerCoords[2], playerCoords[3])) SendClientMessage(PREFIX . "Du bist noch zu nah am Hafen. Fahre noch " . SECCOL . (500 - distance) . "m") } else if (RegExMatch(message, "^Du legst Reuse (\d+) an dieser Position aus\.$", message_)) { fishTraps[message_1] := getCoordinates() SendClientMessage(PREFIX . "Reuse " . message_1 . " wurde hier erfolgreich ausgelegt. Fahre 400m um die nächste Reuse auslegen zu können.") } else if (RegExMatch(message, "^Du hast bereits in der Nähe eine Reuse ausgelegt\.$")) { playerCoords := getCoordinates() nearest := false nearestDistance := 10000000 for index, entry in fishTraps { if (entry) { distance := getDistanceToPoint(playerCoords[1], playerCoords[2], playerCoords[3], entry[1], entry[2], entry[3]) if (distance < nearestDistance) { nearest := entry nearestDistance := distance } } } if (nearest) { SendClientMessage(PREFIX . "Du bist noch zu nah an der letzten Reuse. Fahre noch " . SECCOL . (400 - Round(nearestDistance)) . "m") } } else if (RegExMatch(message, "^(\S+): (\d+) \((\d+)\$\)$", message_)) { IniRead, fishStats, stats.ini, Hochseefischer, %message_1%, 0 fishStats += message_2 IniWrite, %fishStats%, stats.ini, Hochseefischer, %message_1% } else if (RegExMatch(message, "^Du hast deine Fische am Hafen verkauft und erhälst am nächsten Payday (\d+)\$\.$", message_)) { IniRead, fishingMoney, stats.ini, Hochseefischer, Geld, 0 IniRead, fishingXP, stats.ini, Hochseefischer, XP, 0 fishingMoney += message_1 paydayMoney += message_1 IniWrite, %fishingMoney%, stats.ini, Hochseefischer, Geld SendClientMessage(PREFIX . "Du hast bereits " . SECCOL . FormatNumber(fishingXP) . " {FFFFFF}Reusen eingeholt und ingesamt " . SECCOL . FormatNumber(fishingMoney) . "$ {FFFFFF}(brutto) verdient.") fishingFull := false } else if (RegExMatch(message, "^Du hast Reuse (\d) aus dem Wasser gezogen und folgende Fische gefunden:$", message_)) { IniRead, fishingXP, stats.ini, Hochseefischer, XP, 0 fishingXP++ IniWrite, %fishingXP%, stats.ini, Hochseefischer, XP } else if (RegExMatch(message, "^Du ziehst nun Reuse (\d+) aus dem Wasser\.$", message_)) { fishTraps[message_1] := false } else if (RegExMatch(message, "^Es passen keine Fische mehr in das Boot, die restlichen Fische in der Reuse wurden freigelassen\.$")) { fishingFull := true } else if (RegExMatch(message, "^Du hast den Auftrag (\d+) \((.+)\) abgeschlossen und erhälst am nächsten Payday (\d+)\$\.$", stats_)) { IniRead, truckerXP, stats.ini, Trucker, XP, 0 IniRead, truckerMoney, stats.ini, Trucker, Geld, 0 truckerXP++ truckerMoney += stats_3 paydayMoney += stats_3 IniWrite, %truckerXP%, stats.ini, Trucker, XP IniWrite, %truckerMoney%, stats.ini, Trucker, Geld SendClientMessage(PREFIX . "Du bist bereits " . SECCOL . FormatNumber(truckerXP) . " {FFFFFF}Runden gefahren und hast ingesamt " . SECCOL . FormatNumber(truckerMoney) . "$ {FFFFFF}(brutto) verdient.") } else if (RegExMatch(message, "^\* Du hast die Fahrt Beendet\. \$(\d+) werden am nächsten Payday Gutgeschrieben!$", stats_)) { IniRead, trainXP, stats.ini, Zugfahrer, XP, 0 IniRead, trainMoney, stats.ini, Zugfahrer, Geld, 0 trainXP++ trainMoney += stats_1 paydayMoney += stats_1 IniWrite, %trainXP%, stats.ini, Zugfahrer, XP IniWrite, %trainMoney%, stats.ini, Zugfahrer, Geld SendClientMessage(PREFIX . "Du bist bereits " . SECCOL . FormatNumber(trainXP) . " {FFFFFF}Runden gefahren und hast ingesamt " . SECCOL . FormatNumber(trainMoney) . "$ {FFFFFF}(brutto) verdient.") } else if (RegExMatch(message, "^Total: (\d+)\$$", stats_)) { Loop, 10 { gardener := arr[index - A_Index] if (RegExMatch(gardener, "^--------------- Gärtner: Gehaltscheck ---------------$")) { IniRead, gardenerXP, stats.ini, Gärtner, XP, 0 IniRead, gardenerMoney, stats.ini, Gärtner, Geld, 0 IniRead, gardenerMaxMoney, stats.ini, Gärtner, Höchstverdienst, 0 if (stats_1 > gardenerMaxMoney) { SendClientMessage(PREFIX . "Das war bisher deine beste Tour! Neuer Höchstverdienst: " . SECCOL . FormatNumber(stats_1) . "$") IniWrite, %stats_1%, stats.ini, Gärtner, Höchstverdienst } gardenerXP++ gardenerMoney += stats_1 paydayMoney += stats_1 IniWrite, %gardenerXP%, stats.ini, Gärtner, XP IniWrite, %gardenerMoney%, stats.ini, Gärtner, Geld SendClientMessage(PREFIX . "Du bist bereits " . SECCOL . FormatNumber(gardenerXP) . " {FFFFFF}Runden gefahren und hast ingesamt " . SECCOL . FormatNumber(gardenerMoney) . "$ {FFFFFF}(brutto) verdient.") break } } } else if (RegExMatch(message, "^\[Gärtner\]: Die Runde wurde beendet und du erhältst (.+) deines Fortschrittes \((\d+)\$\) am nächsten Payday ausgezahlt\.$", message_)) { if (message_2 > 0) { IniRead, gardenerXP, stats.ini, Gärtner, XP, 0 IniRead, gardenerMoney, stats.ini, Gärtner, Geld, 0 IniRead, gardenerMaxMoney, stats.ini, Gärtner, Höchstverdienst, 0 if (message_2 > gardenerMaxMoney) { SendClientMessage(PREFIX . "Das war bisher deine beste Tour! Neuer Höchstverdienst: " . SECCOL . FormatNumber(message_2) . "$") IniWrite, %message_2%, stats.ini, Gärtner, Höchstverdienst } gardenerXP++ gardenerMoney += message_2 paydayMoney += message_2 IniWrite, %gardenerXP%, stats.ini, Gärtner, XP IniWrite, %gardenerMoney%, stats.ini, Gärtner, Geld SendClientMessage(PREFIX . "Du bist bereits " . SECCOL . FormatNumber(gardenerXP) . " {FFFFFF}Runden gefahren und hast ingesamt " . SECCOL . FormatNumber(gardenerMoney) . "$ {FFFFFF}(brutto) verdient.") } } else if (RegExMatch(message, "^Gesamte XP: (\d+) \(\+(\d+) XP\)$", message_)) { IniWrite, %stats_1%, stats.ini, Farmer, XP farmer := arr[index - 1] if (RegExMatch(farmer, "^Total: (\d+)\$\.$", farmer_)) { IniRead, farmerMoney, stats.ini, Farmer, Geld, 0 IniRead, farmerMaxMoney, stats.ini, Farmer, Höchstverdienst, 0 if (farmer_1 > farmerMaxMoney) { SendClientMessage(PREFIX . "Das war bisher deine beste Tour! Neuer Höchstverdienst: " . SECCOL . FormatNumber(farmer_1) . "$") IniWrite, %farmer_1%, stats.ini, Farmer, Höchstverdienst } farmerMoney += farmer_1 paydayMoney += farmer_1 IniWrite, %farmerMoney%, stats.ini, Farmer, Geld SendClientMessage(PREFIX . "Du bist bereits " . SECCOL . FormatNumber(message_1) . " {FFFFFF}Touren gefahren und hast ingesamt " . SECCOL . FormatNumber(farmerMoney) . "$ {FFFFFF}(brutto) verdient.") } } else if (RegExMatch(message, "^Du hast (\d+)g Marihuana im Crew Lager abgeliefert \(\+(\d+) XP\)\.$", message_)) { IniRead, drugXP, stats.ini, Drogen, XP, 0 IniRead, drugs, stats.ini, Drogen, Gramm, 0 drugXP += message_2 drugs += message_1 IniWrite, %drugXP%, stats.ini, Drogen, XP IniWrite, %drugs%, stats.ini, Drogen, Gramm SendClientMessage(PREFIX . "Du hast bereits " . SECCOL . FormatNumber(drugXP) . " EXP {FFFFFF}gesammelt und " . SECCOL . FormatNumber(drugs) . "g {FFFFFF}Drogen am Crewlager abgeliefert.") } else if (RegExMatch(message, "^Du hast (\d+) Samen für (\d+)\$ gekauft\.$", message_)) { IniRead, drugsBought, stats.ini, Drogen, AnzahlGekauft, 0 IniRead, moneySpent, stats.ini, Drogen, Ausgaben, 0 drugsBought += message_1 moneySpent += message_2 IniWrite, %drugsBought%, stats.ini, Drogen, AnzahlGekauft IniWrite, %moneySpent%, stats.ini, Drogen, Ausgaben drugStatus := false SendClientMessage(PREFIX . "Du hast erfolgreich " . SECCOL . FormatNumber(message_1) . " {FFFFFF}Samen für " . SECCOL . FormatNumber(message_2) . "$ {FFFFFF}gekauft.") SendClientMessage(PREFIX . "Gesamte Anzahl gekaufter Samen: " . SECCOL . FormatNumber(drugsBought) . " {FFFFFF}Gesamtausgaben: " . SECCOL . FormatNumber(moneySpent) . "$") } else if (RegExMatch(message, "^Inklusive Zeitbonus in Höhe von (\d+)g hast du insgesamt (\d+)g Marihuana aus deinen (\d+) Samen geerntet\.$", message_)) { IniRead, drugsHarvested, stats.ini, Drogen, AnzahlGeerntet, 0 drugsHarvested += message_2 IniWrite, %drugsHarvested%, stats.ini, Drogen, AnzahlGeerntet SendClientMessage(PREFIX . "Du hast deine Drogen nach " . SECCOL . formatTime(drugGrowTime) . " {FFFFFF}geerntet.") SendClientMessage(PREFIX . "Du hast bereits " . SECCOL . FormatNumber(drugsHarvested) . "g {FFFFFF}Drogen geerntet. Du kannst nun wieder neue Drogen kaufen.") drugStatus := false drugGrowTime := -1 drugTime := 0 SetTimer, DrugTimer, Off } else if (RegExMatch(message, "^Der Mindestertrag an Drogen ist abhängig von der Zeit, mindestens jedoch werden (\d+) Minuten benötigt\.$", message_)) { drugStatus := true SendClientMessage(PREFIX . "Du hast deine Samen hier gepflanzt. Du wirst in " . SECCOL . message_1 . " Minuten {FFFFFF}informiert, dass du ernten kannst.") drugGrowTime := 0 drugTime := message_1 * 60 SetTimer, DrugTimer, 1000 } else if (RegExMatch(message, "^Du besitzt keine Samen\.$")) { SendChat("/seed buy") } else if (RegExMatch(message, "^Du hast (\d+)g Waffenstahl für deine (\d+) Pakete erhalten\.$", chatLine0_)) { IniRead, matsFarmed, stats.ini, Materialien, Waffenstahl, 0 matsFarmed += chatLine0_1 IniWrite, %matsFarmed%, stats.ini, Materialien, Waffenstahl SendClientMessage(PREFIX . "Du hast bereits " . SECCOL . FormatNumber(matsFarmed) . "g {FFFFFF}Waffenstahl gefarmt. Du musst diese nun am Lagerhaus abliefern.") } else if (RegExMatch(message, "^Fehler: Du hast keine Pakete bei dir\. Kaufe Pakete mit \/materials get\.$")) { SendChat("/materials get") } else if (RegExMatch(message, "^Fehler: Du transportierst keine Pakete im Fahrzeug\.$")) { SendChat("/materials get") } else if (RegExMatch(message, "^Du hast (\d+) Materialien-Pakete für (\d+)\$ erworben\. Du (\S+) nun (\d+) Pakete (.+)\.$", message_)) { IniRead, matsBought, stats.ini, Materialien, AnzahlGekauft, 0 IniRead, moneySpent, stats.ini, Materialien, Ausgaben, 0 matsBought += message_1 moneySpent += message_2 IniWrite, %matsBought%, stats.ini, Materialien, AnzahlGekauft IniWrite, %moneySpent%, stats.ini, Materialien, Ausgaben SendClientMessage(PREFIX . "Du hast erfolgreich " . SECCOL . FormatNumber(message_1) . " {FFFFFF}Materialpakete für " . SECCOL . FormatNumber(message_2) . "$ {FFFFFF}gekauft.") SendClientMessage(PREFIX . "Gesamte Anzahl gekaufter Materialpakete: " . SECCOL . FormatNumber(matsBought) . " {FFFFFF}Gesamtausgaben: " . SECCOL . FormatNumber(moneySpent) . "$") } else if (RegExMatch(message, "^Du hast (\d+)g Waffenstahl im Crew Lager abgeliefert \(\+(\d+) XP\)\.$", message_)) { IniRead, matsXP, stats.ini, Materialien, XP, 0 IniRead, mats, stats.ini, Materialien, Anzahl, 0 matsXP += message_2 mats += message_1 IniWrite, %matsXP%, stats.ini, Materialien, XP IniWrite, %mats%, stats.ini, Materialien, Anzahl SendClientMessage(PREFIX . "Du hast bereits " . SECCOL . FormatNumber(matsXP) . " EXP {FFFFFF}gesammelt und " . SECCOL . FormatNumber(mats) . "g {FFFFFF}Materialien am Crewlager abgeliefert.") } else if (RegExMatch(message, "^Du hast (\d+) Produkte für (\d+)\$ gekauft\.$", message_)) { IniRead, prodBought, stats.ini, Produkte, Gekauft, 0 IniRead, moneySpent, stats.ini, Produkte, Ausgaben, 0 prodBought += message_1 moneySpent += message_2 IniWrite, %prodBought%, stats.ini, Produkte, Gekauft IniWrite, %moneySpent%, stats.ini, Produkte, Ausgaben SendClientMessage(PREFIX . "Du hast erfolgreich " . SECCOL . FormatNumber(message_1) . " {FFFFFF}Produkte für " . SECCOL . FormatNumber(message_2) . "$ {FFFFFF}gekauft.") SendClientMessage(PREFIX . "Gesamte Anzahl gekaufter Produkte: " . SECCOL . FormatNumber(prodBought) . " {FFFFFF}Gesamtausgaben: " . SECCOL . FormatNumber(moneySpent) . "$") } else if (RegExMatch(message, "^Du hast (\d+) Produkte im Crew Lager abgeliefert\.$", message_)) { IniRead, prods, stats.ini, Produkte, Anzahl, 0 prods += message_1 IniWrite, %prods%, stats.ini, Produkte, Anzahl SendClientMessage(PREFIX . "Du hast bereits " . SECCOL . FormatNumber(prods) . " {FFFFFF}Produkte am Crewlager abgeliefert.") } else if (RegExMatch(message, "^Du hast (\d+) L Rohöl für (\d+)\$ gekauft\.$", message_)) { IniRead, oilBought, stats.ini, Oil, Gekauft, 0 IniRead, moneySpent, stats.ini, Oil, Ausgaben, 0 oilBought += message_1 moneySpent += message_2 IniWrite, %oilBought%, stats.ini, Oil, Gekauft IniWrite, %moneySpent%, stats.ini, Oil, Ausgaben SendClientMessage(PREFIX . "Du hast erfolgreich " . SECCOL . FormatNumber(message_1) . " Liter {FFFFFF}Rohöl für " . SECCOL . FormatNumber(message_2) . "$ {FFFFFF}gekauft.") SendClientMessage(PREFIX . "Gesamte Anzahl gekauftes Rohöl: " . SECCOL . FormatNumber(oilBought) . " Liter {FFFFFF}Gesamtausgaben: " . SECCOL . FormatNumber(moneySpent) . "$") } else if (RegExMatch(message, "^Du hast (\d+) L Rohöl im Crew Lager abgeliefert\.$", stats_)) { IniRead, oil, stats.ini, Oil, Liter, 0 oil += stats_1 IniWrite, %oil%, stats.ini, Oil, Liter SendClientMessage(PREFIX . "Du hast bereits " . SECCOL . FormatNumber(oil) . " Liter {FFFFFF}Rohöl am Crewlager abgeliefert.") } else if (RegExMatch(message, "^Du hast diesen Store erfolgreich überfallen, die Hälfte der Beute wurde der Crew Kasse gutgeschrieben\.$")) { store := arr[index - 1] if (RegExMatch(store, "^\*\* (.+) " . getUsername() . " hat ein Store im GK (\S+) erfolgreich überfallen\. Beute: (\d+)\$$", store_)) { IniRead, storeRobCount, stats.ini, StoreRob, Anzahl, 0 IniRead, storeRobCountToday, stats.ini, StoreRob, Anzahl[%A_DD%:%A_MM%:%A_YYYY%], 0 IniRead, storeRobMoney, stats.ini, StoreRob, Geld, 0 IniRead, storeRobMoneyToday, stats.ini, StoreRob, Geld[%A_DD%:%A_MM%:%A_YYYY%], 0 storeRobCount++ storeRobCountToday++ storeRobMoney += store_3 storeRobMoneyToday += store_3 IniWrite, %storeRobCount%, stats.ini, StoreRob, Anzahl IniWrite, %storeRobCountToday%, stats.ini, StoreRob, Anzahl[%A_DD%:%A_MM%:%A_YYYY%] IniWrite, %storeRobMoney%, stats.ini, StoreRob, Geld IniWrite, %storeRobMoneyToday%, stats.ini, StoreRob, Geld[%A_DD%:%A_MM%:%A_YYYY%] Sleep, 250 SendClientMessage(PREFIX . "Du hast bereits " . SECCOL . FormatNumber(storeRobCount) . " Läden {FFFFFF}und " . SECCOL . FormatNumber(storeRobMoney) . "$ {FFFFFF}ausgeraubt (gesamt).") SendClientMessage(PREFIX . "Heute: " . SECCOL . FormatNumber(storeRobCountToday) . " Läden{FFFFFF}, " . SECCOL . FormatNumber(storeRobMoneyToday) . "$") } } else if (RegExMatch(message, "^Paintball: (\S+) wurde von (\S+) getötet\.$", message_)) { if (message_1 == getUsername()) { IniRead, pbDeaths, stats.ini, Paintball, Tode, 0 pbDeaths++ IniWrite, %pbDeaths%, stats.ini, Paintball, Tode SendClientMessage(PREFIX . "Du bist bereits " . SECCOL . FormatNumber(pbDeaths) . "{FFFFFF}-mal im Paintball gestorben.") if (pbKillStreak > 0 && paintballMessages) SendChat("/l Meine Killstreak war: " . pbKillStreak) pbKillStreak := 0 } else if (message_2 == getUsername()) { IniRead, pbKills, stats.ini, Paintball, Kills, 0 pbKills++ IniWrite, %pbKills%, stats.ini, Paintball, Kills SendClientMessage(PREFIX . "Du hast bereits " . SECCOL . FormatNumber(pbKills) . " {FFFFFF}Spieler im Paintball getötet.") pbKillStreak++ if (paintballMessages) { IniRead, pbHighestKillStreak, stats.ini, Paintball, Killstreak, 0 if (pbKillStreak > pbHighestKillStreak) { IniWrite, %pbKillStreak%, stats.ini, Paintball, Killstreak SendChat("/l Meine neue beste Killstreak: " . pbKillStreak) } else { SendChat("/l Meine Killstreak: " . pbKillStreak) } } } } else if (RegExMatch(message, "^\|=================\|\|============\|\|=================\|$")) { Loop { chat := arr[index - A_Index] if (InStr(chat, "KFZ Steuer:")) { RegExMatch(chat, "KFZ Steuer: -(\d*)\$", car) } if (InStr(chat, "Lohn: ")) { RegExMatch(chat, "Lohn: (\d*)\$ \(davon (\d+\$) Bonus durch Upgrade\) Miete: -(\d*)\$ Lohnsteuer: -(\d*)\$", general) } if (InStr(chat, "Stromrechnung: ")) { RegExMatch(chat, "Stromrechnung: -(.*)\$", electricity) } if (InStr(chat, "|================| Gehalts-Check |================|")) { break } } money := general1 money -= general3 money -= general4 money -= car1 money -= electricity1 SendClientMessage(PREFIX . "Errechneter Payday: " . SECCOL . FormatNumber(paydayMoney) . "$ {FFFFFF}(Brutto) " . SECCOL . FormatNumber(Round(paydayMoney * taxes)) . "$ {FFFFFF}(Netto)") SendClientMessage(PREFIX . "Gehaltsscheck: " . SECCOL . FormatNumber(money) . "$") paydayMoney := 0 } else if (RegExMatch(message, "^ > " . getUsername() . " beobachtet (\S+)\.$", message_)) { tv := true tvName := message_1 SendClientMessage(PREFIX . "Beobachtungsmodus aktiviert") } else if (RegExMatch(message, "^ > " . getUsername() . " hat die Beobachtung beendet\.$")) { tv := false SendClientMessage(PREFIX . "Beobachtungsmodus deaktiviert") } else if (RegExMatch(message, "^Leerfahrt$")) { start := -1 busLine := -1 SendClientMessage(PREFIX . "Du hast deine Linie abgebrochen!") } else if (RegExMatch(message, "^Nächste Haltestelle: (.+)$", chat_)) { if (chat_1 == "Busbahnhof Süd" || chat_1 == "Busbahnhof Ost" || chat_1 == "San Fierro Hauptbahnhof" || chat_1 == "Las Venturas Busbahnhof" || chat_1 == "Foster Valley FZ A" || chat_1 == "Foster Valley FZ B") { if (start == -1) { Sleep, 1000 start := getUnixTimestamp(A_Now) tempLine := findLinie() if (tempLine != 0) { busLine := tempLine SendClientMessage(PREFIX . "Du beginnst Linie " . busLine . "!") } else { busLine := -1 SendClientMessage(PREFIX . "Deine Linie konnte nicht korrekt erkannt werden, sie wird vorerst ignoriert!") } } } else { if (start != -1 && busLine == -1) { tempLine := findLinie() if (tempLine != 0) { busLine := tempLine SendClientMessage(PREFIX . "Deine Linie wurde soeben erkannt: Linie " . busLine) } } } } else if (RegExMatch(message, "^\* Du erhälst am nächsten Payday (\d+)\$ gutgeschrieben\. Erhaltene Exp: (\d+)$", chat_)) { if (start != -1) { IniRead, busRounds, stats.ini, Busfahrer, Runden, 0 IniRead, busMoney, stats.ini, Busfahrer, Geld, 0 busRounds++ busMoney += chat_1 paydayMoney += chat_1 IniWrite, %busRounds%, stats.ini, Busfahrer, Runden IniWrite, %busMoney%, stats.ini, Busfahrer, Geld end := getUnixTimestamp(A_Now) diff := end - start SendClientMessage(PREFIX . "Du hast Linie " . busLine . " für " . SECCOL . FormatNumber(chat_1) . "$ {FFFFFF}beendet und " . SECCOL . chat_2 . " EXP {FFFFFF}erhalten. Zeit: " . SECCOL . formatTime(diff)) SendClientMessage(PREFIX . "Du bist bereits " . SECCOL . FormatNumber(busRounds) . " Runden {FFFFFF}gefahren und hast " . SECCOL . FormatNumber(busMoney) . "$ {FFFFFF}verdient.") if (busSendToJobChat) { SendChat("/j Ich habe Linie " . busLine . " für " . FormatNumber(chat_1) . "$ beendet und " . chat_2 . " EXP erhalten. Zeit: " . formatTime(diff)) } start := -1 if (busRestartLine) { if (busLine == 4) { busLine := 5 } else if (busLine == 5) { busLine := 4 } else if (busLine == 8) { busLine := 9 } else if (busLine == 9) { busLine := 8 } else if (busLine == 13) { busLine := 14 } else if (busLine == 14) { busLine := 13 } else if (busLine == 16) { busLine := 17 } else if (busLine == 17) { busLine := 16 } else if (busLine == 19) { busLine := 20 } else if (busLine == 20) { busLine := 19 } selectLine(busLine) } } } else if (RegExMatch(message, "^\*\* (.+) " . getUsername() . " hat ein Überfall im GK (\d+)\.(\d+) \((\S+)\) gestartet\.$", message_)) { storerobTime := 89 if (robcountdown) { SetTimer, RobTimer, 1000 } data := [] data["username"] := getUsername() data["store"] := message_4 data["gk"] := message_2 . "." . message_3 jsonData := JSON.Dump(data) result := URLDownloadToVar(robBaseURL . "api/updatestore.php?data=" . jsonData) SendClientMessage(PREFIX . result) } else if (RegExMatch(message, "Gestartet von der Rebellen Crew (.+), Beute: (\d+)\$", chat0_)) { chat1 := arr[index - 1] if (RegExMatch(chat1, "Dieser Store wurde bereits ausgeraubt \(noch (.+) gesperrt\)\.", chat1_)) { if (RegExMatch(chat1_1, "(\d+) Stunden und (\d+) Minuten", time)) { robtime := time1 * 60 + time2 } else if (RegExMatch(chat1_1, "(\d+) Minuten", time)) { robtime := time1 } else { return } SendChat("/crewmembers") Sleep, 200 Loop { if (A_Index > 100) break chat := readChatLine(A_Index - 1) if (RegExMatch(chat, getUsername() . ", (.+) \((.+)\), GK (\d+).(\d+)", chat_)) { store := "" if (chat_3 == "10") { if (IsPlayerInRangeOfPoint(0, -17, 1003, 20)) { store := "SM" } else if (IsPlayerInRangeOfPoint(372.5, -66, 1001, 20)) { store := "BS" } } else if (chat_3 == "15") { store := "CS" } else if (chat_3 == "9") { store := "CB" } else if (chat_3 == "5") { store := "PS" } if (store == "") { SendClientMessage(PREFIX . "Der Store konnte nicht ermittelt werden!") return } data := [] data["username"] := getUsername() data["store"] := store data["gk"] := chat_3 . "." . chat_4 data["robtime"] := robtime jsonData := JSON.Dump(data) result := URLDownloadToVar(robBaseURL . "api/updatestore.php?data=" . jsonData) SendClientMessage(PREFIX . result) break } if (InStr(chat, "\*\*Members online\*\*")) { break } } } } else if (RegExMatch(message, "^\*\* Der Überfall von " . getUsername() . " ist gescheitert \((.+)\)\.$")) { SetTimer, RobTimer, Off } } SpamTimer: { unBlockChatInput() SendClientMessage(PREFIX . "Spamschutz-System {FF0000}deaktiviert{FFFFFF}!") } return WheelmanTimer: { SendClientMessage(PREFIX . "Möchtest du einen Wheelman anfordern? Drücke " . SECCOL . "X {FFFFFF}zum Bestätigen.") KeyWait, X, D T10 if (!ErrorLevel) { SendChat("/service") Sleep, 200 SendInput, {down 6}{enter} } } return PaketTimer: { SendClientMessage(PREFIX . SECCOL . medicName . " {FFFFFF}bietet dir ein Paket an, drücke " . SECCOL . "X {FFFFFF}zum Annehmen.") KeyWait, X, D, T10 if (!ErrorLevel) { SendChat("/accept paket") Sleep, 200 chat := readChatLine(0) . readChatLine(1) . readChatLine(2) if (RegExMatch(chat, "Du hast bereits ein Erste-Hilfe-Paket\. Verwende \/erstehilfe")) { if (packetMessages) { SendChat("/l Vielen Dank " . medicName . ", doch ich habe bereits ein Paket!") } } else if (RegExMatch(chat, "\* Du hast für \$(\d+) ein Erste-Hilfe-Paket von (\S+) gekauft\.", chat_)) { if (packetMessages) { SendChat("/l Vielen Dank " . chat_2 . " für das Paket!") } } } } return ; ---------- ; ; Timer Ende ; ; ---------- ; :?:/tempo:: { tempoInput := PlayerInput("Tempo: ") if (tempoInput == "") return if tempoInput is not number return tempo := tempoInput IniWrite, %tempo%, settings.ini, Einstellungen, Tempo SendClientMessage(PREFIX . "Du hast das Tempo auf " . SECCOL . tempo . " km/h {FFFFFF}gesetzt. Starte den Tempomat mit " . SECCOL . tempomatNoMods) } return tempomatLabel: { if (isInChat()) return if (tempomat) { SendInput, {W up} tempomat := false SendClientMessage(PREFIX . "Du hast den Tempomat {FF0000}deaktiviert{FFFFFF}.") } else { tempomat := true SendClientMessage(PREFIX . "Du hast den Tempomat {00FF00}aktiviert{FFFFFF} (Tempo: " . SECCOL . tempo . " km/h{FFFFFF}).") } } TempoTimer: { IfWinNotActive, GTA:SA:MP return if (!tempomat || tempo <= 0) return if (isInChat()) return if (isPlayerInAnyVehicle() && isPlayerDriver()) { currentSpeed := getVehicleSpeed() if (currentSpeed < tempo) { SendInput, {W down} } else { SendInput, {W up} } } } return #IFNDEF nooverlay StatsOverlayTimer: { IfWinNotActive, GTA:SA:MP return IniRead, accountMoney, stats.ini, Vermögen, Bank, 0 IniRead, depositMoney, stats.ini, Vermögen, Festgeld, 0 allMoney := accountMoney + depositMoney + getPlayerMoney() IniRead, fishMoney, stats.ini, Fischsystem, Fischgeld, 0 IniRead, alltimeKills, stats.ini, Gesamt, Kills, 0 IniRead, dayKills, stats.ini, Tag, Kills[%A_DD%:%A_MM%:%A_YYYY%], 0 IniRead, alltimeDeaths, stats.ini, Gesamt, Tode, 0 IniRead, dayDeaths, stats.ini, Tag, Tode[%A_DD%:%A_MM%:%A_YYYY%], 0 allKD := Round(alltimeKills / alltimeDeaths, 2) dayKD := Round(dayKills / dayDeaths, 2) IniRead, storeRobCount, stats.ini, StoreRob, Anzahl, 0 IniRead, storeRobCountToday, stats.ini, StoreRob, Anzahl[%A_DD%:%A_MM%:%A_YYYY%], 0 IniRead, storeRobMoney, stats.ini, StoreRob, Geld, 0 IniRead, storeRobMoneyToday, stats.ini, StoreRob, Geld[%A_DD%:%A_MM%:%A_YYYY%], 0 IniRead, garbageXP, stats.ini, Müllmann, XP, 0 IniRead, garbageKubik, stats.ini, Müllmann, Kubik, 0 IniRead, garbageMoney, stats.ini, Müllmann, Geld, 0 IniRead, fishingXP, stats.ini, Hochseefischer, XP, 0 IniRead, fishingMoney, stats.ini, Hochseefischer, Geld, 0 IniRead, truckerXP, stats.ini, Trucker, XP, 0 IniRead, truckerMoney, stats.ini, Trucker, Geld, 0 IniRead, trainXP, stats.ini, Zugfahrer, XP, 0 IniRead, trainMoney, stats.ini, Zugfahrer, Geld, 0 IniRead, gardenerXP, stats.ini, Gärtner, XP, 0 IniRead, gardenerMoney, stats.ini, Gärtner, Geld, 0 IniRead, gardenerMaxMoney, stats.ini, Gärtner, Höchstverdienst, 0 IniRead, farmerXP, stats.ini, Farmer, XP, 0 IniRead, farmerMoney, stats.ini, Farmer, Geld, 0 IniRead, farmerMaxMoney, stats.ini, Farmer, Höchstverdienst, 0 IniRead, busRounds, stats.ini, Busfahrer, Runden, 0 IniRead, busMoney, stats.ini, Busfahrer, Geld, 0 IniRead, drugsBought, stats.ini, Drogen, AnzahlGekauft, 0 IniRead, drugsMoney, stats.ini, Drogen, Ausgaben, 0 IniRead, drugXP, stats.ini, Drogen, XP, 0 IniRead, drugs, stats.ini, Drogen, Gramm, 0 IniRead, matsBought, stats.ini, Materialien, AnzahlGekauft, 0 IniRead, matsMoney, stats.ini, Materialien, Ausgaben, 0 IniRead, matsXP, stats.ini, Materialien, XP, 0 IniRead, mats, stats.ini, Materialien, Anzahl, 0 IniRead, waffenstahl, stats.ini, Materialien, Waffenstahl, 0 motorStatus := "" lockStatus := "" lightStatus := "" checkpointDistance := "-" drugOverlayStatus := "" if (isPlayerInAnyVehicle()) { if (getVehicleEngineState()) { motorStatus := statsOverlayPositiveColor . "Motor an{FFFFFF}" } else { motorStatus := statsOverlayNegativeColor . "Motor aus{FFFFFF}" } } if (isPlayerInAnyVehicle()) { if (getVehicleLockState()) { lockStatus := statsOverlayNegativeColor . "Fahrzeug abgeschlossen{FFFFFF}" } else { lockStatus := statsOverlayPositiveColor . "Fahrzeug aufgeschlossen{FFFFFF}" } } if (isPlayerInAnyVehicle()) { if (getVehicleLightState()) { lightStatus := statsOverlayPositiveColor . "Licht angeschalten{FFFFFF}" } else { lightStatus := statsOverlayNegativeColor . "Licht abgeschalten{FFFFFF}" } } if (IsMarkerCreated()) { coordsFromRedmarker := CoordsFromRedmarker() playerCoords := getCoordinates() distance := getDistanceToPoint(coordsFromRedmarker[1], coordsFromRedmarker[2], coordsFromRedmarker[3], playerCoords[1], playerCoords[2], playerCoords[3]) checkpointDistance := FormatNumber(Floor(distance)) . "m" } if (drugGrowTime == -1) { drugOverlayStatus := "[white]Keine Drogen gepflanzt" } else { if (drugTime >= 0) { drugOverlayStatus := "[white]Drogenzeit: [primcol]" . formatTime(drugTime) } else { drugOverlayStatus := "[white]Drogen reif seit: [primcol]" . formatTime(drugTime * -1) } } statsOverlayText := statsOverlayContent statsOverlayText := StrReplace(statsOverlayText, "[name]", getUsername()) statsOverlayText := StrReplace(statsOverlayText, "[id]", getId()) statsOverlayText := StrReplace(statsOverlayText, "[ping]", getPlayerPingById(getId())) statsOverlayText := StrReplace(statsOverlayText, "[fps]", getFPS()) statsOverlayText := StrReplace(statsOverlayText, "[zone]", getPlayerZone()) statsOverlayText := StrReplace(statsOverlayText, "[city]", getPlayerCity()) statsOverlayText := StrReplace(statsOverlayText, "[hp]", getPlayerHealth()) statsOverlayText := StrReplace(statsOverlayText, "[armour]", getPlayerArmor()) statsOverlayText := StrReplace(statsOverlayText, "[money]", FormatNumber(getPlayerMoney())) statsOverlayText := StrReplace(statsOverlayText, "[bankmoney]", FormatNumber(accountMoney)) statsOverlayText := StrReplace(statsOverlayText, "[allmoney]", FormatNumber(allMoney)) statsOverlayText := StrReplace(statsOverlayText, "[skin]", getPlayerSkinId()) statsOverlayText := StrReplace(statsOverlayText, "[weaponid]", getPlayerWeaponId()) statsOverlayText := StrReplace(statsOverlayText, "[weapon]", getPlayerWeaponName()) statsOverlayText := StrReplace(statsOverlayText, "[freezed]", (IsPlayerFreezed() ? "ja" : "nein")) statsOverlayText := StrReplace(statsOverlayText, "[vhealth]", getVehicleHealth()) statsOverlayText := StrReplace(statsOverlayText, "[vmodelid]", getVehicleModelId()) statsOverlayText := StrReplace(statsOverlayText, "[vmodel]", getVehicleModelName()) statsOverlayText := StrReplace(statsOverlayText, "[vspeed]", round(getVehicleSpeed())) statsOverlayText := StrReplace(statsOverlayText, "[fishmoney]", FormatNumber(fishMoney)) statsOverlayText := StrReplace(statsOverlayText, "[fishtime]", formatTime(fishTime)) statsOverlayText := StrReplace(statsOverlayText, "[date]", A_DD . "." . A_MM . "." . A_Year) statsOverlayText := StrReplace(statsOverlayText, "[motor]", motorStatus) statsOverlayText := StrReplace(statsOverlayText, "[lock]", lockStatus) statsOverlayText := StrReplace(statsOverlayText, "[light]", lightStatus) statsOverlayText := StrReplace(statsOverlayText, "[checkpoint]", checkpointDistance) statsOverlayText := StrReplace(statsOverlayText, "[kills]", FormatNumber(alltimeKills)) statsOverlayText := StrReplace(statsOverlayText, "[daykills]", FormatNumber(daykills)) statsOverlayText := StrReplace(statsOverlayText, "[deaths]", FormatNumber(alltimeDeaths)) statsOverlayText := StrReplace(statsOverlayText, "[tode]", FormatNumber(alltimeDeaths)) statsOverlayText := StrReplace(statsOverlayText, "[daydeaths]", FormatNumber(dayDeaths)) statsOverlayText := StrReplace(statsOverlayText, "[kd]", allKD) statsOverlayText := StrReplace(statsOverlayText, "[daykd]", dayKD) statsOverlayText := StrReplace(statsOverlayText, "[pdmoney]", FormatNumber(paydayMoney)) statsOverlayText := StrReplace(statsOverlayText, "[pdmoneynetto]", FormatNumber(Round(paydayMoney * taxes))) statsOverlayText := StrReplace(statsOverlayText, "[stores]", FormatNumber(storeRobCount)) statsOverlayText := StrReplace(statsOverlayText, "[daystores]", FormatNumber(storeRobCountToday)) statsOverlayText := StrReplace(statsOverlayText, "[storemoney]", FormatNumber(storeRobMoney)) statsOverlayText := StrReplace(statsOverlayText, "[daystoremoney]", FormatNumber(storeRobMoneyToday)) statsOverlayText := StrReplace(statsOverlayText, "[garbagexp]", FormatNumber(garbageXP)) statsOverlayText := StrReplace(statsOverlayText, "[garbagekubik]", FormatNumber(garbageKubik)) statsOverlayText := StrReplace(statsOverlayText, "[garbagemoney]", FormatNumber(garbageMoney)) statsOverlayText := StrReplace(statsOverlayText, "[fishingxp]", FormatNumber(fishingXP)) statsOverlayText := StrReplace(statsOverlayText, "[fishingmoney]", FormatNumber(fishingMoney)) statsOverlayText := StrReplace(statsOverlayText, "[truckerxp]", FormatNumber(truckerXP)) statsOverlayText := StrReplace(statsOverlayText, "[truckermoney]", FormatNumber(truckerMoney)) statsOverlayText := StrReplace(statsOverlayText, "[trainxp]", FormatNumber(trainXP)) statsOverlayText := StrReplace(statsOverlayText, "[trainmoney]", FormatNumber(trainMoney)) statsOverlayText := StrReplace(statsOverlayText, "[gardenerxp]", FormatNumber(gardenerXP)) statsOverlayText := StrReplace(statsOverlayText, "[gardenermoney]", FormatNumber(gardenerMoney)) statsOverlayText := StrReplace(statsOverlayText, "[gardenermaxmoney]", FormatNumber(gardenerMaxMoney)) statsOverlayText := StrReplace(statsOverlayText, "[farmerxp]", FormatNumber(farmerXP)) statsOverlayText := StrReplace(statsOverlayText, "[farmermoney]", FormatNumber(farmerMoney)) statsOverlayText := StrReplace(statsOverlayText, "[farmermaxmoney]", FormatNumber(farmerMaxMoney)) statsOverlayText := StrReplace(statsOverlayText, "[busrounds]", FormatNumber(busRounds)) statsOverlayText := StrReplace(statsOverlayText, "[busmoney]", FormatNumber(busMoney)) statsOverlayText := StrReplace(statsOverlayText, "[drugsbought]", FormatNumber(drugsBought)) statsOverlayText := StrReplace(statsOverlayText, "[drugsmoney]", FormatNumber(drugsMoney)) statsOverlayText := StrReplace(statsOverlayText, "[drugxp]", FormatNumber(drugXP)) statsOverlayText := StrReplace(statsOverlayText, "[drugs]", FormatNumber(drugs)) statsOverlayText := StrReplace(statsOverlayText, "[drugstatus]", drugOverlayStatus) statsOverlayText := StrReplace(statsOverlayText, "[matsbought]", FormatNumber(matsBought)) statsOverlayText := StrReplace(statsOverlayText, "[matsmoney]", FormatNumber(matsMoney)) statsOverlayText := StrReplace(statsOverlayText, "[matsxp]", FormatNumber(matsXP)) statsOverlayText := StrReplace(statsOverlayText, "[mats]", FormatNumber(mats)) statsOverlayText := StrReplace(statsOverlayText, "[waffenstahl]", FormatNumber(waffenstahl)) statsOverlayText := StrReplace(statsOverlayText, "[primcol]", statsOverlayPrimColor) statsOverlayText := StrReplace(statsOverlayText, "[seccol]", statsOverlaySecColor) statsOverlayText := StrReplace(statsOverlayText, "[white]", "{FFFFFF}") if (!statsOverlayColors) { statsOverlayText := RegExReplace(statsOverlayText, "{\S{6}}", "") } TextSetString(statsOverlay, statsOverlayText) } return :?:/ov:: :?:/overlay:: { SendClientMessage(PREFIX . SECCOL . "1{FFFFFF}: Statistik-Overlay " . SECCOL . "2{FFFFFF}: Gegner-Overlay") overlayInput := PlayerInput("Overlay de-/aktivieren: ") if (overlayInput == "1") { if (statsOverlayEnabled) { TextDestroy(statsOverlay) statsOverlayEnabled := false if (ovMoveMode == 1) { ovMoveMode := 0 } SetTimer, StatsOverlayTimer, Off SendClientMessage(PREFIX . "Statistik-Overlay {FF0000}deaktiviert{FFFFFF}.") } else { createOverlay(1) statsOverlayEnabled := true SendClientMessage(PREFIX . "Statistik-Overlay {00FF00}aktiviert{FFFFFF}.") } } else if (overlayInput == "2") { if (enemyOverlayEnabled) { TextDestroy(enemyOverlay) enemyOverlayEnabled := false if (ovMoveMode == 2) { ovMoveMode := 0 } SetTimer, EnemyOverlayTimer, Off SendClientMessage(PREFIX . "Gegner-Overlay {FF0000}deaktiviert{FFFFFF}.") } else { createOverlay(2) enemyOverlayEnabled := true SendClientMessage(PREFIX . "Gegner-Overlay {00FF00}aktiviert{FFFFFF}.") } } } return createOverlay(id) { global if (id == 1) { statsOverlay := TextCreate(statsOverlayFont, statsOverlayFontSize, statsOverlayBold, statsOverlayItalic, statsOverlayPosX, statsOverlayPosY, 0xFFFFFFFF, "", true, true) SetTimer, StatsOverlayTimer, 1000 } else if (id == 2) { enemyOverlay := TextCreate(enemyOverlayFont, enemyOverlayFontSize, enemyOverlayBold, enemyOverlayItalic, enemyOverlayPosX, enemyOverlayPosY, 0xFFFFFFFF, "", true, true) SetTimer, EnemyOverlayTimer, 1000 } } updateOverlay(id) { global if (id == 1) { if (statsOverlayEnabled) { TextSetPos(statsOverlay, statsOverlayPosX, statsOverlayPosY) } } else if (id == 2) { if (enemyOverlayEnabled) { TextSetPos(enemyOverlay, enemyOverlayPosX, enemyOverlayPosY) } } } :?:/ovmove:: { if (ovMoveMode) { ovMoveMode := 0 SendClientMessage(PREFIX . "Der Overlay-Bearbeitungsmodus wurde {FF0000}deaktiviert{FFFFFF}!") } else { SendClientMessage(PREFIX . SECCOL . "1{FFFFFF}: Statistik-Overlay " . SECCOL . "2{FFFFFF}: Gegner-Overlay") overlayInput := PlayerInput("Overlay verschieben: ") if (overlayInput == "1") { if (statsOverlayEnabled) { ovMoveMode := 1 SendClientMessage(PREFIX . "Der Overlay-Bearbeitungsmodus wurde {00FF00}aktiviert{FFFFFF}!") SendClientMessage(PREFIX . "Das Overlay kann nun mit den Pfeiltasten verschoben werden!") SendClientMessage(PREFIX . "Wenn du fertig bist, tippe " . SECCOL . "/ovsave {FFFFFF}ein, um die Einstellung zu speichern!") } else { SendClientMessage(PREFIX . "Das Statistik-Overlay muss aktiviert sein, um es zu verschieben!") } } else if (overlayInput == "2") { if (enemyOverlayEnabled) { ovMoveMode := 2 SendClientMessage(PREFIX . "Der Overlay-Bearbeitungsmodus wurde {00FF00}aktiviert{FFFFFF}!") SendClientMessage(PREFIX . "Das Overlay kann nun mit den Pfeiltasten verschoben werden!") SendClientMessage(PREFIX . "Wenn du fertig bist, tippe " . SECCOL . "/ovsave {FFFFFF}ein, um die Einstellung zu speichern!") } else { SendClientMessage(PREFIX . "Das Gegner-Overlay muss aktiviert sein, um es zu verschieben!") } } } } return :?:/ovsave:: { if (ovMoveMode == 1) { IniWrite, %statsOverlayPosX%, settings.ini, StatsOverlay, PosX IniWrite, %statsOverlayPosY%, settings.ini, StatsOverlay, PosY ovMoveMode := 0 SendClientMessage(PREFIX . "Die Overlay-Position wurde {00FF00}gespeichert {FFFFFF}und der Bearbeitungsmodus {FF0000}deaktiviert{FFFFFF}!") } else if (ovMoveMode == 2) { IniWrite, %enemyOverlayPosX%, settings.ini, EnemyOverlay, PosX IniWrite, %enemyOverlayPosY%, settings.ini, EnemyOverlay, PosY ovMoveMode := 0 SendClientMessage(PREFIX . "Die Overlay-Position wurde {00FF00}gespeichert {FFFFFF}und der Bearbeitungsmodus {FF0000}deaktiviert{FFFFFF}!") } else { SendClientMessage(PREFIX . "Der Overlay-Bearbeitungsmodus ist nicht aktiviert!") } } return #ENDIF ~Up:: { #IFNDEF nooverlay if (ovMoveMode) { if (ovMoveMode == 1) { statsOverlayPosY -= 3 } else if (ovMoveMode == 2) { enemyOverlayPosY -= 3 } updateOverlay(ovMoveMode) } #ENDIF if (textMoveMode) { if (textMoveMode == 1) { hpTextPosY -= 1 } else if (textMoveMode == 2) { armourTextPosY -= 1 } else if (textMoveMode == 3) { fpsTextPosY -= 1 } updateText(textMoveMode) } } return ~Down:: { #IFNDEF nooverlay if (ovMoveMode) { if (ovMoveMode == 1) { statsOverlayPosY += 3 } else if (ovMoveMode == 2) { enemyOverlayPosY += 3 } updateOverlay(ovMoveMode) } #ENDIF if (textMoveMode) { if (textMoveMode == 1) { hpTextPosY += 1 } else if (textMoveMode == 2) { armourTextPosY += 1 } else if (textMoveMode == 3) { fpsTextPosY += 1 } updateText(textMoveMode) } } return ~Left:: { #IFNDEF nooverlay if (ovMoveMode) { if (ovMoveMode == 1) { statsOverlayPosX -= 3 } else if (ovMoveMode == 2) { enemyOverlayPosX -= 3 } updateOverlay(ovMoveMode) } #ENDIF if (textMoveMode) { if (textMoveMode == 1) { hpTextPosX -= 1 } else if (textMoveMode == 2) { armourTextPosX -= 1 } else if (textMoveMode == 3) { fpsTextPosX -= 1 } updateText(textMoveMode) } } return ~Right:: { #IFNDEF nooverlay if (ovMoveMode) { if (ovMoveMode == 1) { statsOverlayPosX += 3 } else if (ovMoveMode == 2) { enemyOverlayPosX += 3 } updateOverlay(ovMoveMode) } #ENDIF if (textMoveMode) { if (textMoveMode == 1) { hpTextPosX += 1 } else if (textMoveMode == 2) { armourTextPosX += 1 } else if (textMoveMode == 3) { fpsTextPosX += 1 } updateText(textMoveMode) } } return ; ---------------- ; ; Job-System ; ; ---------------- ; :?:/setjob:: { jobInput := PlayerInput("Job: ") if (InStr(jobInput, "Dro")) { job := 2 SendClientMessage(PREFIX . "Du hast deinen Job auf " . SECCOL . "Drogendealer {FFFFFF}gesetzt!") } else if (InStr(jobInput, "Waf")) { job := 3 SendClientMessage(PREFIX . "Du hast deinen Job auf " . SECCOL . "Waffendealer {FFFFFF}gesetzt!") } else if (InStr(jobInput, "Bus")) { job := 4 SendClientMessage(PREFIX . "Du hast deinen Job auf " . SECCOL . "Busfahrer {FFFFFF}gesetzt!") } else if (InStr(jobInput, "Pil")) { job := 5 SendClientMessage(PREFIX . "Du hast deinen Job auf " . SECCOL . "Pilot {FFFFFF}gesetzt!") } else if (InStr(jobInput, "Fis") || InStr(jobInput, "Hoch")) { job := 6 SendClientMessage(PREFIX . "Du hast deinen Job auf " . SECCOL . "Hochseefischer {FFFFFF}gesetzt!") } else if (InStr(jobInput, "Anw")) { job := 7 SendClientMessage(PREFIX . "Du hast deinen Job auf " . SECCOL . "Anwalt {FFFFFF}gesetzt!") } else if (InStr(jobInput, "Det")) { job := 8 SendClientMessage(PREFIX . "Du hast deinen Job auf " . SECCOL . "Detektiv {FFFFFF}gesetzt!") } else if (InStr(jobInput, "Tru")) { job := 9 SendClientMessage(PREFIX . "Du hast deinen Job auf " . SECCOL . "Trucker {FFFFFF}gesetzt!") } else if (InStr(jobInput, "Far")) { job := 10 SendClientMessage(PREFIX . "Du hast deinen Job auf " . SECCOL . "Farmer {FFFFFF}gesetzt!") } else if (InStr(jobInput, "Zug")) { job := 11 SendClientMessage(PREFIX . "Du hast deinen Job auf " . SECCOL . "Zugfahrer {FFFFFF}gesetzt!") } else if (InStr(jobInput, "Gär") || InStr(jobInput, "Gar")) { job := 12 SendClientMessage(PREFIX . "Du hast deinen Job auf " . SECCOL . "Gärtner {FFFFFF}gesetzt!") } else { SendClientMessage(PREFIX . "Unbekannter Job!") return } IniWrite, %job%, settings.ini, Job, Job } return :?:/setline:: :?:/setlinie:: { lineInput := PlayerInput("Linie: ") if lineInput is number { if (lineInput < 1 || lineInput > 21) { SendClientMessage(PREFIX . "Du musst eine Linie zwischen 1 und 21 eingeben.") } else { jobLine := lineInput + 1 IniWrite, %jobLine%, settings.ini, Job, Linie SendClientMessage(PREFIX . "Du hast deine Linie auf " . SECCOL . lineInput . " {FFFFFF}gesetzt!") } } else { SendClientMessage(PREFIX . "Bitte eine Zahl als Linie eingeben!") } } return :?:/wskill:: :?:/wdskill:: { skillInput := PlayerInput("Waffendealer-Skill: ") if skillInput is number { if (skillInput < 1 || skillInput > 5) { SendClientMessage(PREFIX . "Du musst einen Skill zwischen 1 und 5 eingeben.") } else { jobWeapondealerSkill := skillInput + 1 IniWrite, %jobWeapondealerSkill%, settings.ini, Job, Waffendealerskill SendClientMessage(PREFIX . "Du hast deinen Waffendealer-Skill auf " . SECCOL . skillInput . " {FFFFFF}gesetzt!") } } else { SendClientMessage(PREFIX . "Bitte eine Zahl als Skill eingeben!") } } return :?:/dskill:: { skillInput := PlayerInput("Detektiv-Skill: ") if skillInput is number { if (skillInput < 1 || skillInput > 5) { SendClientMessage(PREFIX . "Du musst einen Skill zwischen 1 und 5 eingeben.") } else { jobDetectiveSkill := skillInput + 1 IniWrite, %jobDetectiveSkill%, settings.ini, Job, Detektivskill SendClientMessage(PREFIX . "Du hast deinen Detektiv-Skill auf " . SECCOL . skillInput . " {FFFFFF}gesetzt!") } } else { SendClientMessage(PREFIX . "Bitte eine Zahl als Skill eingeben!") } } return :?:/drugstatus:: { drugStatus := !drugStatus if (drugStatus) { SendClientMessage(PREFIX . "Du hast den Drogenstatus auf " . SECCOL . "Ernten {FFFFFF}gesetzt.") } else { SendClientMessage(PREFIX . "Du hast den Drogenstatus auf " . SECCOL . "Pflanzen {FFFFFF}gesetzt.") } } return jobexecuteLabel: { if (isInChat()) return if ((job == "") || (job <= 1)) { SendClientMessage(PREFIX . "Du hast keinen Job angegeben! Benutze /setjob.") } else if (job == 2) { if (isPlayerInRangeOfPoint(330, -41, 1, 15)) { SendChat("/seed buy") } else if (isPlayerInRangeOfPoint(834, -1853, 7, 5) || isPlayerInRangeOfPoint(-1479, 324, 7, 5) || isPlayerInRangeOfPoint(1098, 1686, 6, 5) || isPlayerInRangeOfPoint(1297, -984, 32, 5) || isPlayerInRangeOfPoint(2743, -2453, 13, 5) || isPlayerInRangeOfPoint(1230, -807, 1084, 5)) { SendChat("/put drugs") Sleep, 200 chatLine0 := readChatLine(0) if (RegExMatch(chatLine0, "Befehl: \/put \[Drugs\] \[Menge\] \(Du hast (\d+)g\)", chatLine0_)) { SendChat("/put drugs " . chatLine0_1) } } else if (isPlayerInRangeOfPoint(2737, -2466, 14, 10)) { SendChat("/seed warehouse") } else { if (drugStatus) { SendChat("/seed harvest") } else { SendChat("/seed plant") } } } else if (job == 3) { if ((jobWeapondealerSkill == "") || (jobWeapondealerSkill <= 1)) { SendClientMessage(PREFIX . "Du hast keinen Waffendealerskill angegeben! Benutze /wdskill.") return } else if (isPlayerInRangeOfPoint(597.0953, -1248.6184, 18.2718, 10) || isPlayerInRangeOfPoint(2789.554, -2494.1433, 14.2481, 10)) { if (jobWeapondealerSkill == 2) { packets := 5 } else if (jobWeapondealerSkill == 3) { packets := 10 } else if (jobWeapondealerSkill == 4) { packets := 15 } else if (jobWeapondealerSkill == 5) { packets := 20 } else if (jobWeapondealerSkill == 6) { packets := 25 } if (GetVehicleModelId() == 482) { packets := 50 } SendChat("/materials get " . packets) } else if (isPlayerInRangeOfPoint(2737, -2466, 14, 10)) { SendChat("/materials warehouse") Sleep, 300 SendChat("/prod warehouse") Sleep, 300 SendChat("/oil warehouse") } else if (isPlayerInRangeOfPoint(834, -1853, 7, 5) || isPlayerInRangeOfPoint(-1479, 324, 7, 5) || isPlayerInRangeOfPoint(1098, 1686, 6, 5) || isPlayerInRangeOfPoint(1297, -984, 32, 5) || isPlayerInRangeOfPoint(2743, -2453, 13, 5) || isPlayerInRangeOfPoint(1230, -807, 1084, 5)) { SendChat("/put mats") Sleep, 200 chatLine0 := readChatLine(0) if (RegExMatch(chatLine0, "Befehl: \/put \[Mats\] \[Menge\] \(Du hast (\d+) Mats\)", chatLine0_)) { SendChat("/put mats " . chatLine0_1) } } else if (isPlayerInRangeOfPoint(274, 1411, 11, 5)) { SendChat("/oil buy") } else if (isPlayerInRangeOfPoint(-1548, 124, 4, 5)) { SendChat("/prod buy") } else { SendChat("/materials deliver") } } else if (job == 4) { if ((jobLine == "") || (jobLine <= 1)) { SendClientMessage(PREFIX . "Du hast keine Linie eingegeben! Benutze /setline.") SendChat("/linie") } else { busLine := jobLine - 1 selectLine(busLine) } } else if (job == 5) { if ((GetVehicleModelId() == 511) || (GetVehicleModelId() == 553) || (GetVehicleModelId() == 577)) { SendChat("/duty") } else { SendClientMessage(PREFIX . "Du befindest dich in keinem Flugzeug!") } } else if (job == 6) { if (GetVehicleModelId() == 453 || GetVehicleModelId() == 484) { SendChat("/fishing") Sleep, 200 if (getDialogCaption() == "Hochseefischer") { if (fishingFull) { SendInput, {down 7}{Enter} } else { freeTrap := false highestTimeTrap := false highestTime := 0 for index, line in getDialogLines() { if (RegExMatch(line, "Reuse (\d+): Auslegen", line_)) { if (!freeTrap) { freeTrap := line_1 } } else if (RegExMatch(line, "Reuse (\d+): Ausgelegt vor (\d+) Minuten", line_)) { if (line_2 > highestTime) { highestTimeTrap := line_1 highestTime := line_2 } } } if (highestTimeTrap && highestTime >= 5) { downCount := highestTimeTrap - 1 SendInput, {down %downCount%}{Enter} SendClientMessage(PREFIX . "Du fährst nun zu Reuse " . highestTimeTrap . ", welche seit " . (highestTime - 5) . " Minute(n) eingeholt werden kann.") } else if (freeTrap) { downCount := freeTrap - 1 SendInput, {down %downCount%}{Enter} } else { SendClientMessage(PREFIX . "Es ist noch keine Reuse bereit zum Einholen.") } } } } else { SendClientMessage(PREFIX . "Du befindest dich auf keinem Boot!") } } else if (job == 7) { if (isPlayerInRangeOfPoint(253.7230, 68.9150, 1003.6406, 3)) { SendChat("/freeinfo") } else { freeName := PlayerInput("Spielername: ") freeKaution := PlayerInput("Kaution: ") SendChat("/free " . freeName . " " . freeKaution) } } else if (job == 8) { if (jobDetectiveSkill == "" || jobDetectiveSkill <= 1 || jobDetectiveSkill > 6) { SendClientMessage(PREFIX . "Du hast keinen oder einen ungültigen Detektivskill angegeben! Benutze /dskill.") return } playerToFindInput := PlayerInput("Spieler-ID: ") if (playerToFindInput == "") return playerToFind := playerToFindInput SendClientMessage(PREFIX . "Das automatische Suchen kann mit der Taste {FF0000}" . stopAutomaticSystemsNoMods . " {FFFFFF}deaktiviert werden.") if (autoShowRunning) { SetTimer, AutoShowPosTimer, Off autoShowRunning := false } GoSub, AutoFindTimer if (jobDetectiveSkill == 2) { SetTimer, AutoFindTimer, 120500 } else if (jobDetectiveSkill == 3) { SetTimer, AutoFindTimer, 90500 } else if (jobDetectiveSkill == 4) { SetTimer, AutoFindTimer, 60500 } else if (jobDetectiveSkill == 5) { SetTimer, AutoFindTimer, 30500 } else if (jobDetectiveSkill == 6) { SetTimer, AutoFindTimer, 5500 } else { return } autoFindRunning := true } else if (job == 9) { if (GetVehicleModelId() == 455) { blockDialog() SendChat("/delivery") Sleep, 200 dialog := getDialogText() newDialog := "ID`tAuftrag und Gehalt`tStrecke`tZeit" unblockDialog() deliveries := [] if (RegExMatch(dialog, "s)Du kannst einen Auftrag mit \/delivery \[Auftrag\] annehmen\.\n\nVerfügbare Aufträge:\n\n(.+)", dialog_)) { Loop, parse, dialog_1, `n { if (RegExMatch(A_LoopField, "^Auftrag (\d+): (.+) \(von (.+) nach (.+)\), Gehalt: (\d+)\$, noch (\d+) Minuten verfügbar\.$", delivery_)) { inserted := false newDelivery := Object() newDelivery["id"] := delivery_1 newDelivery["delivery"] := delivery_2 newDelivery["money"] := delivery_5 newDelivery["location"] := "von " . delivery_3 . " nach " . delivery_4 newDelivery["time"] := delivery_6 for index, delivery in deliveries { money := delivery["money"] if (delivery_5 > money) { deliveries.InsertAt(index, newDelivery) inserted := true break } } if (!inserted) { deliveries.Push(newDelivery) } } } } for, index, delivery in deliveries { money := delivery["money"] if (money > 3000) { money := "{00FF00}" . money . "${FFFFFF}" } else if (money > 2000) { money := "{FF9900}" . money . "${FFFFFF}" } else { money := "{FF0000}" . money . "${FFFFFF}" } time := delivery["time"] if (time > 30) { time := "{00FF00}" . time . " Minuten" } else if (time > 10) { time := "{FF9900}" . time . " Minuten" } else { time := "{FF0000}" . time . " Minuten" } newDialog .= "`n" . delivery["id"] . "`t" . delivery["delivery"] . " (" . money . ")`t" . delivery["location"] . "`t" . time } ShowDialog(DIALOG_STYLE_TABLIST_HEADERS, "Verfügbare Aufträge", newDialog, "OK") } else { SendClientMessage(PREFIX . "Du befindest dich nicht im Truck!") } } else if (job == 10) { SendChat("/farmer start") } else if (job == 11) { SendChat("/duty") } else if (job == 12) { if (isPlayerInRangeOfPoint(1449, -2287, 14, 5)) { SendChat("/gardener start") } else { if (GetVehicleModelId() == 543) { if (isPlayerInRangeOfPoint(1751, -2054, 14, 10)) { SendChat("/gardener sell") } else { SendChat("/gardener show") } } else { SendChat("/gardener park") } } } } return :?:/l1:: selectLine(1) return :?:/l2:: selectLine(2) return :?:/l3:: selectLine(3) return :?:/l4:: selectLine(4) return :?:/l5:: selectLine(5) return :?:/l6:: selectLine(6) return :?:/l7:: selectLine(7) return :?:/l8:: selectLine(8) return :?:/l9:: selectLine(9) return :?:/l10:: selectLine(10) return :?:/l11:: selectLine(11) return :?:/l12:: selectLine(12) return :?:/l13:: selectLine(13) return :?:/l14:: selectLine(14) return :?:/l15:: selectLine(15) return :?:/l16:: selectLine(16) return :?:/l17:: selectLine(17) return :?:/l18:: selectLine(18) return :?:/l19:: selectLine(19) return :?:/l20:: selectLine(20) return :?:/l21:: selectLine(21) return selectLine(busLine) { line := busLine - 1 BlockInput, On SendChat("/linie") Sleep, 200 SendInput, {down %line%}{enter} BlockInput, Off } DrugTimer: { if (drugTime == 60) { SendClientMessage(PREFIX . "Du kannst deine Drogen in " . SECCOL . "1 Minute {FFFFFF}ernten!") } else if (drugTime == 0) { SendClientMessage(PREFIX . "Du kannst deine Drogen " . SECCOL . "jetzt {FFFFFF}ernten!") } drugTime-- drugGrowTime++ } return ; --------------- ; ; Job-System Ende ; ; --------------- ; ; --------------- ; ; Ausrüsten ; ; --------------- ; equipProfile1Label: { if (IsInChat()) return equipment := "" Loop, 6 { if (profile1_%A_Index% != "") { equipment .= " " . profile1_%A_Index% } } SendChat("/ausruesten" . equipment) Sleep, 200 chat := readChatLine(0) . readChatLine(1) if (RegExMatch(chat, "Du hast dich ausgerüstet, es wurden (\d+) Materialien benötigt\. \(Verbleibend: (\d+) Materialien\)", chat_)) { SendClientMessage(PREFIX . "Ausrüstungsprofil " . SECCOL . "1 {FFFFFF}genutzt, es wurden " . chat_1 . " Materialien verbraucht.") } SendChat("/heal") } return equipProfile2Label: { if (IsInChat()) return equipment := "" Loop, 6 { if (profile2_%A_Index% != "") { equipment .= " " . profile2_%A_Index% } } SendChat("/ausruesten" . equipment) Sleep, 200 chat := readChatLine(0) . readChatLine(1) if (RegExMatch(chat, "Du hast dich ausgerüstet, es wurden (\d+) Materialien benötigt\. \(Verbleibend: (\d+) Materialien\)", chat_)) { SendClientMessage(PREFIX . "Ausrüstungsprofil " . SECCOL . "2 {FFFFFF}genutzt, es wurden " . chat_1 . " Materialien verbraucht.") } SendChat("/heal") } return equipProfile3Label: { if (IsInChat()) return equipment := "" Loop, 6 { if (profile3_%A_Index% != "") { equipment .= " " . profile3_%A_Index% } } SendChat("/ausruesten" . equipment) Sleep, 200 chat := readChatLine(0) . readChatLine(1) if (RegExMatch(chat, "Du hast dich ausgerüstet, es wurden (\d+) Materialien benötigt\. \(Verbleibend: (\d+) Materialien\)", chat_)) { SendClientMessage(PREFIX . "Ausrüstungsprofil " . SECCOL . "3 {FFFFFF} genutzt, es wurden " . chat_1 . " Materialien verbraucht.") } SendChat("/heal") } return ; ---------------- ; ; Fahrzeug-Systeme ; ; ---------------- ; motorSystemLabel: { if (IsInChat()) return if (IsPlayerInAnyVehicle()) { if (IsPlayerDriver()) { if (getVehicleEngineState()) { SendChat("/motor") } else { if (lockSystem) { if (!getVehicleLockState()) { SendChat("/lock") } } SendChat("/motor") Sleep, 200 SendChat("/licht") } } else { SendClientMessage(PREFIX . "Du bist nicht der Fahrer eines Fahrzeuges.") } } else { SendClientMessage(PREFIX . "Du bist in keinem Fahrzeug.") } } return ~F:: { if (IsInChat()) return if (IsPlayerInAnyVehicle()) { if (motorSystem) { if (IsPlayerDriver() && getVehicleEngineState()) { SendChat("/motor") Sleep, 500 } else { if (debug) { SendClientMessage(PREFIX . "Spieler ist kein Fahrer oder der Motor ist aus: " . IsPlayerDriver() . ":" . getVehicleEngineState()) } } } else { if (debug) { SendClientMessage(PREFIX . "Motorsystem ist nicht aktiv") } } } else { if (lockSystem) { Loop { if (IsPlayerDriver() && !getVehicleLockState()) { Sleep, 200 if (!getVehicleLockState()) SendChat("/lock") return } } if (debug) { SendClientMessage(PREFIX . "Spieler ist in keinem Fahrzeug") } } } } return ; -------------------- ; ; Automatische Systeme ; ; -------------------- ; :?:/cd:: { if (countdownRunning) { SetTimer, CountdownTimer, Off countdownRunning := false SendChat("/" . cdChat . " Der Countdown wurde gestoppt!") } else { countdownTime := PlayerInput("Sekunden: ") if (countdownTime == "") countdownTime := 3 if countdownTime is not number return cdChat := PlayerInput("Chat: ") if (cdChat == "") cdChat := "l" SendChat("/" . cdChat . " Countdown:") SetTimer, CountdownTimer, 1000 countdownRunning := true } } return CountdownTimer: { if (countdownTime == 0) { SendChat("/" . cdChat . " Go Go Go!") SetTimer, CountdownTimer, Off countdownRunning := false return } SendChat("/" . cdChat . " >>> " . countdownTime . " <<<") countdownTime-- } return stopAutomaticSystemsLabel: { if (IsInChat()) return if (countdownRunning) { SetTimer, CountdownTimer, Off countdownRunning := false SendChat("/" . cdChat . " Der Countdown wurde abgebrochen!") } if (autoFindRunning) { SetTimer, AutoFindTimer, Off autoFindRunning := false SendClientMessage(PREFIX . "Das automatische Suchen wurde deaktiviert.") } if (autoShowRunning) { SetTimer, AutoShowPosTimer, Off autoShowRunning := false SendChat("/l Das automatische Zeigen wurde deaktiviert.") } if (autoFindChatRunning) { SetTimer, AutoFindChat, Off autoFindChatRunning := false SendChat("/" . autoFindChat . " Das automatische Suchen von " . playerToFindInChat . " wurde deaktiviert.") } } return :?:/af:: :?:/afind:: { playerToFind := PlayerInput("Spieler: ") if (playerToFind == "") return GoSub, AutoFindTimer SetTimer, AutoFindTimer, 5500 autoFindRunning := true SendClientMessage(PREFIX . "Das automatische Suchen wird mit der Taste " . SECCOL . stopAutomaticSystemsNoMods . "{FFFFFF} beendet.") } return AutoFindTimer: { IfWinNotActive, GTA:SA:MP return SendChat("/find " . playerToFind) Sleep, 200 adrGTA2 := getModuleBaseAddress("gta_sa.exe", hGTA) cText := readString(hGTA, adrGTA2 + 0x7AAD43, 512) if (InStr(cText, "Handy aus")) return if (getDistanceBetween(CoordsFromRedmarker()[1], CoordsFromRedmarker()[2], CoordsFromRedmarker()[3], 1163.2358, -1323.2552, 15.3945, 5)) { SendClientMessage(PREFIX . "Der Spieler befindet sich im Krankenhaus!") } } return :?:/as:: :?:/asp:: { playerToShowTo := PlayerInput("Spieler, dem gezeigt werden soll: ") if (playerToShowTo == "") return playerToShow := PlayerInput("Gesuchter Spieler: ") if (playerToShow == "") return GoSub, AutoShowPosTimer SetTimer, AutoShowPosTimer, 5500 autoShowRunning := true SendClientMessage(PREFIX . "Das automatische Zeigen wird mit der Taste " . SECCOL . stopAutomaticSystemsNoMods . "{FFFFFF} beendet.") } return AutoShowPosTimer: { IfWinNotActive, GTA:SA:MP return SendChat("/showpos " . playerToShowTo . " " . playerToShow) Sleep, 200 adrGTA2 := getModuleBaseAddress("gta_sa.exe", hGTA) cText := readString(hGTA, adrGTA2 + 0x7AAD43, 512) if (InStr(cText, "Handy aus")) return if (getDistanceBetween(CoordsFromRedmarker()[1], CoordsFromRedmarker()[2], CoordsFromRedmarker()[3], 1163.2358, -1323.2552, 15.3945, 5)) { SendChat("/l Der Spieler befindet sich im Krankenhaus!") } } return :?:/cfind:: :?:/ffind:: { playerToFindInChat := PlayerInput("Spieler: ") playerToFindInChat := getFullName(playerToFindInChat) if (playerToFindInChat == "") return autoFindChat := PlayerInput("Chat: ") if (autoFindChat == "") return GoSub, AutoFindChat SetTimer, AutoFindChat, 5500 autoFindChatRunning := true SendClientMessage(PREFIX . "Das automatische Suchen wird mit der Taste " . SECCOL . stopAutomaticSystemsNoMods . "{FFFFFF} beendet.") } return AutoFindChat: { IfWinNotActive, GTA:SA:MP return SendChat("/find " . playerToFindInChat) Sleep, 200 adrGTA2 := getModuleBaseAddress("gta_sa.exe", hGTA) cText := readString(hGTA, adrGTA2 + 0x7AAD43, 512) if (!InStr(cText, "Handy aus")) { if (getDistanceBetween(CoordsFromRedmarker()[1], CoordsFromRedmarker()[2], CoordsFromRedmarker()[3], 1163.2358, -1323.2552, 15.3945, 5)) { SendChat("/" . autoFindChat . " Der Spieler " . playerToFindInChat . " befindet sich im Krankenhaus!") return } } findChat0 := readChatLine(0) if (RegExMatch(findChat0, "^Der Spieler befindet sich in einem (.+)\.$", findChat0_)) { findChat1 := readChatLine(1) if (RegExMatch(findChat1, "^Der Spieler befindet sich in (.+)$", findChat1_)) { SendChat("/" . autoFindChat . " Der Spieler " . playerToFindInChat . " befindet sich in " . findChat1_1 . " in einem " . findChat0_1 . "!") } } else if (RegExMatch(findChat0, "^Der Spieler befindet sich in (.+)$", findChat0_)) { SendChat("/" . autoFindChat . " Der Spieler " . playerToFindInChat . " befindet sich in " . findChat0_1 . "!") } } return ; ---------------------------- ; ; Einsatz-Funktionen ; ; ---------------------------- ; :?:/wo:: { SendChat("/f Wo befindet ihr euch und was ist das Problem?") } return :?:/cwo:: { SendChat("/crew Wo befindet ihr euch und was ist das Problem?") } return :?:/ver:: { SendChat("/f Verstanden und bestätigt!") } return :?:/cver:: { SendChat("/crew Verstanden und bestätigt!") } return :?:/needbk:: { SendChat("/f Wird Verstärkung weiterhin benötigt?") } return :?:/cneedbk:: { SendChat("/crew Wird Verstärkung weiterhin benötigt?") } return :?:/go:: { SendChat("/f Einsatzleiter erlaubt Zugriff, GOGOGO!") } return :?:/cgo:: { SendChat("/crew Einsatzleiter erlaubt Zugriff, GOGOGO!") } return :?:/abholung:: { zone := getPlayerZone() city := getPlayerCity() if (city == "" || city == "Unbekannt") { SendChat("/f Erbitte Abholung in " . zone . "!") } else { SendChat("/f Erbitte Abholung in " . zone . ", " . city . "!") } } return :?:/cabholung:: { zone := getPlayerZone() city := getPlayerCity() if (city == "" || city == "Unbekannt") { SendChat("/crew Erbitte Abholung in " . zone . "!") } else { SendChat("/crew Erbitte Abholung in " . zone . ", " . city . "!") } } return :?:/kabholung:: { SendChat("/f Eine Abholung wird nicht mehr benötigt.") } return :?:/ckabholung:: { SendChat("/crew Eine Abholung wird nicht mehr benötigt.") } return :?:/verf:: :?:/verfolgung:: { name := PlayerInput("Spieler: ") name := getFullName(name) if (name == "") return id := getPlayerIdByName(name, true) SendChat("/f Erbitte Unterstützung bei der Verfolgung von " . name . " (ID: " . id . ")!") } return :?:/cverf:: :?:/cverfolgung:: { name := PlayerInput("Spieler: ") name := getFullName(name) if (name == "") return id := getPlayerIdByName(name, true) SendChat("/crew Erbitte Unterstützung bei der Verfolgung von " . name . " (ID: " . id . ")!") } return :?:/ort:: { position := PlayerInput("Letzter bekannter Aufenthaltsort: ") if (position == "") return SendChat("/f Letzter bekannter Aufenthaltsort: " . position . ".") } return :?:/cort:: { position := PlayerInput("Letzter bekannter Aufenthaltsort: ") if (position == "") return SendChat("/crew Letzter bekannter Aufenthaltsort: " . position . ".") } return repeatLabel: { if (IsInChat()) return SendInput, t{up}{enter} } return stopwatchLabel: { if (IsInChat()) return SendChat("/l Stoppuhr gestartet!") SendClientMessage(PREFIX . "Um die Stoppuhr zu beenden, drücke " . SECCOL . "Punkt (.){FFFFFF}!") stopwatch := 0 Loop { stopwatch++ KeyWait, ., D T1 if (!ErrorLevel) { minutes := Floor(stopwatch / 60) seconds := stopwatch - (minutes * 60) SendChat("/l Stoppuhr gestoppt: " . minutes . " Minuten, " . seconds . " Sekunden") SendChat("/l Gesamt: " . stopwatch . " Sekunden") break } } } return ; -------------------- ; ; Fisch-System ; ; -------------------- ; eatFishLabel: { if (IsInChat()) return SendChat("/eat " . currentFish) currentFish++ if (currentFish == 6) { currentFish := 1 } } return :?:/fischtyp:: :?:/fishtype:: :?:/fishtyp:: { SendClientMessage(PREFIX . SECCOL . "1: {FFFFFF}geringste LBS/HP - " . SECCOL . "2: {FFFFFF}geringster Geldwert") fishType := PlayerInput("Typ: ") if (fishType == "1") { fishMode := 0 SendClientMessage(PREFIX . "Du wirfst nun den Fisch mit dem geringsten " . SECCOL . "LBS/HP-Wert {FFFFFF}weg.") IniWrite, %fishMode%, settings.ini, Einstellungen, FischModus } else if (fishType == "2") { fishMode := 1 SendClientMessage(PREFIX . "Du wirfst nun den Fisch mit dem geringsten " . SECCOL . "Geldwert {FFFFFF}weg.") IniWrite, %fishMode%, settings.ini, Einstellungen, FischModus } } return :?:/afish:: { fishNumber := 0 aFishMoney := 0 aFishHP := 0 cheapestFish := -1 cheapestFishName := "" cheapestFishValue := 100000 cheapestFishMoney := 100000 cheapestFishHP := 100000 thrownAway := false attempt := 1 Loop { SendChat("/fish") Sleep, 200 fishing := readChatLine(0) if (RegExMatch(fishing, "Du hast ein\/e (.+) mit (\d+) LBS gefangen.", fishing_)) { fishNumber++ currentFishMoney := getFishValue(fishing_1, fishing_2) if (fishMode) { fishValue := currentFishMoney } else { fishValue := fishing_2 } setChatLine(0, PREFIX . "Fisch Nr. " . fishNumber . ": " . SECCOL . fishing_1 . "{FFFFFF} mit " . SECCOL . fishing_2 . " LBS{FFFFFF} - Wert: " . SECCOL . FormatNumber(currentFishMoney) . "$") aFishMoney += currentFishMoney aFishHP += fishing_2 if (cheapestFishValue > fishValue) { cheapestFish := fishNumber cheapestFishName := fishing_1 cheapestFishValue := fishValue cheapestFishMoney := currentFishMoney cheapestFishHP := fishing_2 } } else if (RegExMatch(fishing, "Du kannst nur 5 Fische bei dir tragen.")) { if (cheapestFish == -1) { SendClientMessage(PREFIX . "Du musst deine Fische erst verkaufen!") break } if (thrownAway) break aFishMoney -= cheapestFishMoney aFishHP -= cheapestFishHP SendChat("/releasefish " . cheapestFish) Sleep, 200 if (fishMode) { setChatLine(0, PREFIX . "Fisch Nr. " . cheapestFish . ": " . SECCOL . cheapestFishName . " {FFFFFF}mit einem Wert von " . SECCOL . FormatNumber(cheapestFishValue) . "$ {FFFFFF}wurde weggeworfen!") } else { setChatLine(0, PREFIX . "Fisch Nr. " . cheapestFish . ": " . SECCOL . cheapestFishName . " {FFFFFF}mit " . SECCOL . FormatNumber(cheapestFishValue) . " LBS {FFFFFF}wurde weggeworfen!") } thrownAway := true } else if (RegExMatch(fishing, "Du bist an keinem Angelplatz \(Big Wheel Rods\) oder an einem Fischerboot!")) { if (attempt == 3) { SendClientMessage(PREFIX . "Du kannst hier nicht angeln!") break } attempt++ } else if (RegExMatch(fishing, "Du kannst erst in (\d+) (\S+) wieder angeln\.")) { if (aFishMoney + aFishHP > 0) { SendClientMessage(PREFIX . "Gesamtwert: " . SECCOL . FormatNumber(aFishMoney) . "$ {FFFFFF}- " . SECCOL . FormatNumber(aFishHP) . " LBS {FFFFFF}- " . SECCOL . Floor(aFishHP / 3) . " HP") fishTime := 900 SetTimer, FishTimer, 1000 break } else { SendClientMessage(PREFIX . "Du kannst noch nicht angeln!") break } } if (!admin) Sleep, 650 } } return FishTimer: { if (fishTime == 60) { SendClientMessage(PREFIX . "Du kannst in einer Minute wieder zum Angeln gehen!") } else if (fishTime <= 0) { SendClientMessage(PREFIX . "Du kannst nun wieder zum Angeln gehen!") SetTimer, FishTimer, Off fishTime := 0 return } fishTime-- } return :?:/asell:: { if (IsPlayerInRangeOfPoint(2.3247, -28.8923, 1003.5494, 10)) { SendClientMessage(PREFIX . "Deine Fische werden nun verkauft!") sellFishMoney := 0 Loop, 5 { SendChat("/sell fish " . A_Index) Sleep, 200 chat := readChatLine(0) if (RegExMatch(chat, "Du hast deinen (.+) \((\d+) LBS\) für (\d+)\$ verkauft\.", chat_)) { sellFishMoney += chat_3 } if (!admin) Sleep, 550 } IniRead, totalFishMoney, stats.ini, Fischsystem, Fischgeld, 0 totalFishMoney += sellFishMoney IniWrite, %totalFishMoney%, stats.ini, Fischsystem, Fischgeld SendClientMessage(PREFIX . "Verdienst: " . SECCOL . FormatNumber(sellFishMoney) . "$ {FFFFFF}Gesamter Verdienst: " . SECCOL . FormatNumber(totalFishMoney) . "$") } else { IniRead, totalFishMoney, stats.ini, Fischsystem, Fischgeld, 0 SendClientMessage(PREFIX . "Du kannst deine Fische hier nicht verkaufen! (Gesamter Verdienst: " . SECCOL . FormatNumber(totalFishMoney) . "${FFFFFF})") } } return :?:/acook:: { Loop, 5 { SendChat("/cook fish " . A_Index) if (!admin) Sleep, 750 } } return :?:/fische:: { SendChat("/fishes") Sleep, 250 fishNumber := 5 fishMoney := 0 totalHP := 0 Loop, 5 { fish := readChatLine(fishNumber) RegExMatch(fish, "\*\* \((\d)\) Fisch: (.+) \((\d+) LBS\)", fish_) fishValue := getFishValue(fish_2, fish_3) fishMoney += fishValue hp := Floor(fish_3 / 3) totalHP += hp message%A_Index% := PREFIX . "(" . fish_1 . ") " . fish_2 . " (" . fish_3 . " LBS) - " . SECCOL . fishValue . "$ {FFFFFF}- " . SECCOL . hp . " HP" fishNumber -= 1 } fishNumber := 5 Loop, 5 { setChatLine(fishNumber, message%A_Index%) fishNumber -= 1 } SendClientMessage(PREFIX . "Gesamt: " . SECCOL . FormatNumber(fishMoney) . "$ {FFFFFF}- " . SECCOL . FormatNumber(totalHP) . " HP") } return :?:/hp:: { SendChat("/cooked") Sleep, 250 fishNumber := 5 totalHP := 0 Loop, 5 { fish := readChatLine(fishNumber) if (RegExMatch(fish, "\*\* \((\d)\) Hergestellt: gekochten (.+) \((\d+) LBS\)", fish_)) { HP := Floor(fish_3 / 3) totalHP += HP message%A_Index% := PREFIX . "(" . fish_1 . ") " . fish_2 . " (" . fish_3 . " LBS) - " . SECCOL . HP . " HP" } else if (RegExMatch(fish, "\*\* \((\d)\) Hergestellt: Nichts \(0 LBS\)", fish_)) { message%A_Index% := PREFIX . "(" . fish_1 . ") Nichts" } fishNumber -= 1 } fishNumber := 5 Loop, 5 { setChatLine(fishNumber, message%A_Index%) fishNumber -= 1 } SendClientMessage(PREFIX . "Gesamt: " . SECCOL . FormatNumber(totalHP) . " HP") } return getFishValue(fishName, fishWeight) { if (fishName == "Bernfisch") { value := fishWeight * 1 } else if (fishName == "Blauer Fächerfisch") { value := fishWeight * 1 } else if (fishName == "Roter Schnapper") { value := fishWeight * 2 } else if (fishName == "Schwertfisch") { value := fishWeight * 2 } else if (fishName == "Zackenbarsch") { value := fishWeight * 2 } else if (fishName == "Katzenfisch") { value := fishWeight * 3 } else if (fishName == "Forelle") { value := fishWeight * 3 } else if (fishName == "Delphin") { value := fishWeight * 4 } else if (fishName == "Hai") { value := fishWeight * 4 } else if (fishName == "Segelfisch") { value := fishWeight * 4 } else if (fishName == "Makrele") { value := fishWeight * 5 } else if (fishName == "Aal") { value := fishWeight * 6 } else if (fishName == "Hecht") { value := fishWeight * 6 } else if (fishName == "Schildkröte") { value := fishWeight * 8 } else if (fishName == "Thunfisch") { value := fishWeight * 8 } else if (fishName == "Wolfbarsch") { value := fishWeight * 8 } else { value := 0 } return value } ; ------------------- ; ; Sonstige Funktionen ; ; ------------------- ; :?:/kills:: :?:/tode:: :?:/deaths:: :?:/kd:: { IniRead, alltimeKills, stats.ini, Gesamt, Kills, 0 IniRead, dayKills, stats.ini, Tag, Kills[%A_DD%:%A_MM%:%A_YYYY%], 0 IniRead, alltimeDeaths, stats.ini, Gesamt, Tode, 0 IniRead, dayDeaths, stats.ini, Tag, Tode[%A_DD%:%A_MM%:%A_YYYY%], 0 allKD := Round(alltimeKills / alltimeDeaths, 2) dayKD := Round(dayKills / dayDeaths, 2) SendClientMessage(PREFIX . "Kills: " . SECCOL . FormatNumber(alltimeKills) . " {FFFFFF}Tages-Kills: " . SECCOL . FormatNumber(dayKills)) SendClientMessage(PREFIX . "Tode: " . SECCOL . FormatNumber(alltimeDeaths) . " {FFFFFF}Tages-Tode: " . SECCOL . FormatNumber(dayDeaths)) SendClientMessage(PREFIX . "K/D: " . SECCOL . allKD . " {FFFFFF}Tages-K/D: " . SECCOL . dayKD) } return :?:/fkd:: :?:/crewkd:: { if (RegExMatch(A_ThisHotkey, "i)^:\?:\/(\S+)kd$", hstring_)) { IniRead, alltimeKills, stats.ini, Gesamt, Kills, 0 IniRead, dayKills, stats.ini, Tag, Kills[%A_DD%:%A_MM%:%A_YYYY%], 0 IniRead, alltimeDeaths, stats.ini, Gesamt, Tode, 0 IniRead, dayDeaths, stats.ini, Tag, Tode[%A_DD%:%A_MM%:%A_YYYY%], 0 allKD := Round(alltimeKills / alltimeDeaths, 2) dayKD := Round(dayKills / dayDeaths, 2) SendChat("/" . hstring_1 . " K/D: " . allKD . " (" . alltimeKills . " Kills/" . alltimeDeaths . " Tode) - Tages-K/D: " . dayKD . " (" . dayKills . " Kills/" . dayDeaths . " Tode)") } } return :?:/setkills:: :?:/settode:: :?:/setdeaths:: { blockDialog() SendChat("/stats") Sleep, 100 title := getDialogCaption() dialog := getDialogText() unblockDialog() if (RegExMatch(dialog, statsFormat, dialog_)) { kills := dialog_17 deaths := dialog_18 IniWrite, %deaths%, stats.ini, Gesamt, Tode IniWrite, %kills%, stats.ini, Gesamt, Kills } else { SendClientMessage(PREFIX . "Beim automatischen Auslesen der Kills und Tode ist ein Fehler aufgetreten.") SendClientMessage(PREFIX . "Du kannst deine Statistiken nun manuell eintragen.") kills := PlayerInput("Kills: ") if kills is not number return deaths := PlayerInput("Tode: ") if deaths is not number return IniWrite, %deaths%, stats.ini, Gesamt, Tode IniWrite, %kills%, stats.ini, Gesamt, Kills } SendClientMessage(PREFIX . "Deine Kills wurden auf " . SECCOL . FormatNumber(kills) . " {FFFFFF}und deine Tode auf " . SECCOL . FormatNumber(deaths) . " {FFFFFF}gesetzt.") } return statsLabel: if (isInChat()) return :?:/stats:: { if (statsFormatted) { showStats() } else { if (tv) { SendChat("/check " . tvName) } else { SendChat("/stats") } } } return showStats() { blockDialog() if (tv) { SendChat("/check " . tvName) } else { SendChat("/stats") } Sleep, 100 title := getDialogCaption() dialog := getDialogText() unblockDialog() if (RegExMatch(dialog, statsFormat, dialog_)) { gender := dialog_1 partner := dialog_2 level := dialog_3 rp := dialog_4 levelRP := dialog_5 timeToPayday := dialog_6 maxTimePayday := dialog_7 fraction := dialog_8 fractionRank := dialog_9 job := dialog_10 crew := dialog_11 cashMoney := dialog_12 accountMoney := dialog_13 depositMoney := dialog_14 depositMoneyInterest := dialog_15 . "." . dialog_16 kills := dialog_17 deaths := dialog_18 crimes := FormatNumber(dialog_19) playingTime := FormatNumber(dialog_20) jail := FormatNumber(dialog_21) wanteds := dialog_22 warns := dialog_23 maxWarns := dialog_24 mats := FormatNumber(dialog_25) matsSafe := FormatNumber(dialog_26) drugs := FormatNumber(dialog_27) drugsSafe := FormatNumber(dialog_28) number := dialog_29 packet := dialog_30 canister := dialog_31 wdSkill := dialog_32 wdExp := dialog_33 ddSkill := dialog_34 ddExp := dialog_35 anglerSkill := dialog_36 busSkill := dialog_37 busExp := dialog_38 busMaxExp := dialog_39 lawyerSkill := dialog_40 lawerExp := dialog_41 detectiveSkill := dialog_42 detectiveExp := dialog_43 pilotExp := dialog_44 fisherExp := dialog_45 farmerExp := dialog_46 woodExp := dialog_47 rank := dialog_48 if (partner != "Niemand") { partnerID := getPlayerIdByName(partner, true) if (partnerID != -1) { partner .= " [ID: " . partnerID . "]" } } level .= " (" . Round(rp / levelRP * 100) . "%)" respect := rp . "/" . levelRP . " (noch " . (levelRP - rp) . " Punkte)" payday := timeToPayday . "/" . maxTimePayday . " Minuten (noch " . (maxTimePayday - timeToPayday) . " Minuten)" crewInfos := "" if (RegExMatch(crew, "(.+)`tRang: (\d+)`n`t`tCrew-Motto: (\S+)", crew_)) { crewInfos := crew_1 . "`t{FFFF00}Rang: {FFFFFF}" . crew_2 . "`n`t`t{FFFF00}Crew-Motto: {FFFFFF}" . crew_3 } else if (RegExMatch(crew, "(.+)`tRang: (\d+)", crew_)) { crewInfos := crew_1 . "`t{FFFF00}Rang: {FFFFFF}" . crew_2 } else { crewInfos := crew } if (!tv) { IniWrite, %accountMoney%, stats.ini, Vermögen, Bank IniWrite, %depositMoney%, stats.ini, Vermögen, Festgeld } allMoney := FormatNumber(cashMoney + accountMoney + depositMoney) cashMoney := FormatNumber(cashMoney) accountMoney := FormatNumber(accountMoney) depositMoney := FormatNumber(depositMoney) kd := Round(kills / deaths, 2) if (!tv) { IniWrite, %deaths%, stats.ini, Gesamt, Tode IniWrite, %kills%, stats.ini, Gesamt, Kills } kills := FormatNumber(kills) deaths := FormatNumber(deaths) if (wdSkill <= 1) { wdMaxExp := 50 } else if (wdSkill == 2) { wdMaxExp := 50 } else if (wdSkill == 3) { wdMaxExp := 100 } else if (wdSkill >= 4) { wdMaxExp := 200 } if (wdSkill == 1) { wdLevelExp := wdExp } else { wdLevelExp := wdExp - wdMaxExp } if (ddSkill <= 1) { ddMaxExp := 50 } else if (ddSkill == 2) { ddMaxExp := 50 } else if (ddSkill == 3) { ddMaxExp := 100 } else if (ddSkill >= 4) { ddMaxExp := 200 } if (ddSkill == 1) { ddLevelExp := ddExp } else { ddLevelExp := ddExp - ddMaxExp } lawyerMaxExp := lawyerSkill * 50 if (detectiveSkill <= 1) { detectiveMaxExp := 50 } else if (detectiveSkill == 2) { detectiveMaxExp := 100 } else if (detectiveSkill == 3) { detectiveMaxExp := 200 } else if (detectiveSkill >= 4) { detectiveMaxExp := 400 } if (!tv) { IniWrite, %fisherExp%, stats.ini, Hochseefischer, XP IniWrite, %farmerExp%, stats.ini, Farmer, XP IniWrite, %ddExp%, stats.ini, Drogen, XP IniWrite, %wdExp%, stats.ini, Materialien, XP jobWeapondealerSkill := wdSkill + 1 jobDetectiveSkill := detectiveSkill + 1 IniWrite, %jobWeapondealerSkill%, settings.ini, Job, Waffendealerskill IniWrite, %jobDetectiveSkill%, settings.ini, Job, Detektivskill } statistik = (LTrim {FFFFFF}Personalien:`t{FFFF00}Geschlecht: {FFFFFF}%gender% `t`t{FFFF00}Partner: {FFFFFF}%partner% `t`t{FFFF00}Level: {FFFFFF}%level% `t`t{FFFF00}Respekt: {FFFFFF}%respect% `t`t{FFFF00}Payday: {FFFFFF}%payday% Berufe:`t`t{FFFF00}Fraktion: {FFFFFF}%fraction% {FFFF00}Rang: {FFFFFF}%fractionRank% `t`t{FFFF00}Nebenjob: {FFFFFF}%job% `t`t{FFFF00}Crew: {FFFFFF}%crewInfos% Finanzen:`t{FFFF00}Bargeld: {FFFFFF}%cashMoney%$ `t`t{FFFF00}Konto: {FFFFFF}%accountMoney%$ `t`t{FFFF00}Festgeld: {FFFFFF}%depositMoney%$ {FFFF00}Zinssatz: {FFFFFF}%depositMoneyInterest% `t`t{FFFF00}Gesamtgeld: {FFFFFF}%allMoney%$ Statistik:`t{FFFF00}Morde: {FFFFFF}%kills% `t`t{FFFF00}Gestorben: {FFFFFF}%deaths% `t`t{FFFF00}K/D: {FFFFFF}%kd% `t`t{FFFF00}Verbrechen: {FFFFFF}%crimes% `t`t{FFFF00}Spielzeit: {FFFFFF}%playingTime%h `t`t{FFFF00}Knast: {FFFFFF}%jail% `t`t{FFFF00}Wanteds: {FFFFFF}%wanteds% `t`t{FFFF00}Verwarnungen: {FFFFFF}%warns%/%maxWarns% Inventar:`t{FFFF00}Materialien: {FFFFFF}%mats% ({FFFF00}Safe: {FFFFFF}%matsSafe%) `t`t{FFFF00}Drogen: {FFFFFF}%drugs%g ({FFFF00}Safe: {FFFFFF}%drugsSafe%g) `t`t{FFFF00}Handy {FFFFFF}({FFFF00}Nr. {FFFFFF}%number%)%packet%%canister% Skills:`t`t{FFFF00}Waffendealer: {FFFFFF}%wdSkill% (%wdExp%)`t{FFFF00}Exp: {FFFFFF}%wdLevelExp%/%wdMaxExp% `t`t{FFFF00}Drogendealer: {FFFFFF}%ddSkill% (%ddExp%)`t{FFFF00}Exp: {FFFFFF}%ddLevelExp%/%ddMaxExp% `t`t{FFFF00}Busfahrer: {FFFFFF}%busSkill%`t`t{FFFF00}Exp: {FFFFFF}%busExp%/%busMaxExp% `t`t{FFFF00}Anwalt: {FFFFFF}%lawyerSkill%`t`t{FFFF00}Exp: {FFFFFF}%lawerExp%/%lawyerMaxExp% `t`t{FFFF00}Detektiv: {FFFFFF}%detectiveSkill%`t`t{FFFF00}Exp: {FFFFFF}%detectiveExp%/%detectiveMaxExp% `t`t{FFFF00}Pilot: {FFFFFF}%pilotExp% `t`t{FFFF00}Angler: {FFFFFF}%anglerSkill% `t`t{FFFF00}Hochseefischer: {FFFFFF}%fisherExp% `t`t{FFFF00}Farmer: {FFFFFF}%farmerExp% `t`t{FFFF00}Holzfäller: {FFFFFF}%woodExp%%rank%`n ) Sleep, 100 ShowDialog(0, title, statistik, "Schließen") } } firstAidLabel: { if (!tv) { if (IsInChat()) return hp := getPlayerHealth() if (hp > 95) { SendClientMessage(PREFIX . "Du kannst aktuell kein Erste-Hilfe-Paket benutzen, da du mehr als " . SECCOL . "95 HP {FFFFFF}hast!") } else { SendChat("/erstehilfe") } } } return :?:/pd:: :?:/payday:: { if (taxes == 1) { SendClientMessage(PREFIX . "Es wurde noch kein Steuersatz eingetragen, gib bitte " . SECCOL . "/settax {FFFFFF}ein!") } SendClientMessage(PREFIX . "Geld am nächsten Payday: " . SECCOL . FormatNumber(paydayMoney) . "$ {FFFFFF}(Brutto) " . SECCOL . FormatNumber(Round(paydayMoney * taxes)) . "$ {FFFFFF}(Netto)") blockDialog() SendChat("/stats") Sleep, 200 unBlockDialog() if (RegExMatch(getDialogText(), statsFormat, dialog_)) { paydayTime := dialog_7 - dialog_6 SendClientMessage(PREFIX . "Du hast in " . SECCOL . paydayTime . " Minute" . (paydayTime == 1 ? "" : "n") . " {FFFFFF}Payday.") } } return :?:/resetpd:: :?:/resetpayday:: { SendClientMessage(PREFIX . "Geld am nächsten Payday: " . SECCOL . FormatNumber(paydayMoney) . "$ {FFFFFF}(Brutto) " . SECCOL . FormatNumber(Round(paydayMoney * taxes)) . "$ {FFFFFF}(Netto)") paydayMoney := 0 SendClientMessage(PREFIX . "Du hast das Geld für den nächsten Payday auf 0$ zurückgesetzt!") } return :?:/settax:: { taxClass := PlayerInput("Steuerklasse: ") if (taxClass == "") return if taxClass is not number { SendClientMessage(PREFIX . "Gib bitte eine gültige Steuerklasse (1-4) ein!") return } if (taxClass < 1 || taxClass > 4) { SendClientMessage(PREFIX . "Gib bitte eine gültige Steuerklasse (1-4) ein!") return } SendChat("/tax") Sleep, 250 chat := readChatLine(4 - taxClass) RegExMatch(chat, "Steuerklasse " . taxClass . ": (\d*) Prozent", chat_) taxes := (100 - chat_1) / 100 IniWrite, %taxes%, settings.ini, Einstellungen, Steuersatz SendClientMessage(PREFIX . "Der Steuersatz (Steuerklasse " . SECCOL . taxClass . "{FFFFFF}) wurde auf " . SECCOL . chat_1 . " {FFFFFF}Prozent gesetzt.") } return :?:/gf:: :?:/gfs:: { SendChat("/gangfights") result := URLDownloadToVar(mainAPI . "gangfights.php") try { data := JSON.Load(result) } catch { SendClientMessage(PREFIX . "{FF0000}Es ist ein unbekannter Fehler aufgetreten!") FormatTime, time, , dd.MM.yyyy HH:mm:ss FileAppend, [%time%] Beim Laden der Gangfightgebiete ist ein Fehler aufgetreten: %result%`n, log.txt return } dialog_header := "Gebiet`tBesitzer`tStatus" dialog := "" for index, entry in data["entries"] { name := entry["name"] owner := entry["owner"] status := (entry["status"] == "frei" ? "{00FF00}" . entry["status"] . "{FFFFFF}" : "{FFFF00}" . entry["status"] . "{FFFFFF}") if (owner == "Yakuza") { owner := "{FFFFFF}Yakuza{FFFFFF}" } else if (owner == "Grove Street") { owner := "{078C09}Grove Street{FFFFFF}" } else if (owner == "Los Chickos Malos") { owner := "{0046FF}Los Chickos Malos{FFFFFF}" } else if (owner == "Triaden") { owner := "{FF8000}Triaden Mafia{FFFFFF}" } else if (owner == "Russenmafia") { owner := "{85847F}Russen Mafia{FFFFFF}" } else if (owner == "San Fierro Rifa") { owner := "{00DCFF}San Fierro Rifa{FFFFFF}" } else if (owner == "Vagos") { owner := "{FFFF00}Los Santos Vagos{FFFFFF}" } else if (owner == "Ballas") { owner := "{9300FF}Ballas{FFFFFF}" } if (entry["running"]) { dialog_header := "Gebiet`tBesitzer`tStatus`tFlaggen" status := "Angreifer: " . getFraktionColorByName(entry["attacker"]) . getFraktionNameShort(entry["attacker"]) . " {FFFFFF}Punktestand: " . getFraktionColorByName(entry["owner"]) . entry["pointsA"] . "{FFFFFF}:" . getFraktionColorByName(entry["attacker"]) . entry["pointsB"] . "`tA: " . getFraktionColorByName(entry["flagA"]) . getFraktionNameShort(entry["flagA"]) . " {FFFFFF}B: " . getFraktionColorByName(entry["flagB"]) . getFraktionNameShort(entry["flagB"]) . " {FFFFFF}C: " . getFraktionColorByName(entry["flagB"]) . getFraktionNameShort(entry["flagC"]) } dialog .= "`n{FFFFFF}" . name . "`t" . owner . "`t" . status } ShowDialog(DIALOG_STYLE_TABLIST_HEADERS, "Gangfightgebiete", dialog_header . dialog, "OK") } return :?:/hdf:: :?:/ruhe:: { SendChat("/l Sein Sie bitte still.") } return :?:/afk:: { if (afk) { afk := false SendChat("/f Ich bin nun nicht mehr AFK und melde mich zurück!") SendChat("/crew Ich bin nun nicht mehr AFK und melde mich zurück!") } else { afkTime := PlayerInput("Zeit: ") if (afkTime != "") { if afkTime is number { afk := true SendChat("/f Ich melde mich AFK, Zeit: " . afkTime . " Minuten") SendChat("/crew Ich melde mich AFK, Zeit: " . afkTime . " Minuten") } else { SendClientMessage(PREFIX . "{FF0000}Du musst eine Zeit angeben!") } } } } return :?:/time:: { SendChat("/time") Sleep, 100 adrGTA2 := getModuleBaseAddress("gta_sa.exe", hGTA) cText := readString(hGTA, adrGTA2 + 0x7AAD43, 512) if (RegExMatch(cText, "(.+)In Behandlung: (\d+)", cText_)) { time := formatTime(cText_2) writeString(hGTA, adrGTA2 + 0x7AAD43, cText_1 . "Noch " . time . " im KH") SendClientMessage(PREFIX . "Du bist noch " . SECCOL . time . " {FFFFFF}im Krankenhaus.") } else if (RegExMatch(cText, "(.+)Knastzeit: (\d+)", cText_)) { time := formatTime(cText_2) if (getPlayerInteriorId() == 1) { writeString(hGTA, adrGTA2 + 0x7AAD43, cText_1 . "Noch " . time . " im Prison") SendClientMessage(PREFIX . "Du bist noch " . SECCOL . time . " {FFFFFF}im Prison.") } else { writeString(hGTA, adrGTA2 + 0x7AAD43, cText_1 . "Noch " . time . " im Knast") SendClientMessage(PREFIX . "Du bist noch " . SECCOL . time . " {FFFFFF}im Knast, die Kaution beträgt " . SECCOL . FormatNumber(Floor(cText_2 / 60) * 500) . "${FFFFFF}.") } } } return :?:/anwalt:: { SendChat("/time") Sleep, 100 adrGTA2 := getModuleBaseAddress("gta_sa.exe", hGTA) cText := readString(hGTA, adrGTA2 + 0x7AAD43, 512) if (RegExMatch(cText, "(.+)Knastzeit: (\d+)", cText_)) { if (getPlayerInteriorId() != 1) { time := formatTime(cText_2) min := Floor(cText_2 / 60) writeString(hGTA, adrGTA2 + 0x7AAD43, cText_1 . "Noch " . time . " im Knast") SendClientMessage(PREFIX . "Du bist noch " . SECCOL . time . " {FFFFFF}im Knast, die Kaution beträgt " . SECCOL . FormatNumber(min * 500) . "${FFFFFF}.") SendClientMessage(PREFIX . "Möchtest du nun einen Anwalt rufen? Drücke " . SECCOL . "X {FFFFFF}zum Bestätigen.") KeyWait, X, D, T10 if (!ErrorLevel) { if (getPlayerInteriorId() == 6) { SendChat("/ad Anwalt LSPD! Kaution: " . FormatNumber(min * 500) . "$, /call") } else if (getPlayerInteriorId() == 10) { SendChat("/ad Anwalt FBI! Kaution: " . FormatNumber(min * 500) . "$, /call") } else if (getPlayerInteriorId() == 3) { SendChat("/ad Anwalt LVPD! Kaution: " . FormatNumber(min * 500) . "$, /call") } } } else { SendClientMessage(PREFIX . "Du bist im Prison, somit kannst du leider keinen Anwalt rufen.") } } } return :?:/alotto:: { if (lottoNumber == 0) { Random, randomNumber, 1, 200 SendChat("/lotto " . randomNumber) } else if (lottoNumber == 201) { SendChat("/lotto " . getId()) } else { SendChat("/lotto " . lottoNumber) } } return :?:/re:: :?:/resms:: { distanceSMS := 0 Loop, Read, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt { if (RegExMatch(A_LoopReadLine, "SMS: (.+), Sender: (\S+) \((\d+)\)", preSMS_)) { if (preSMS_2 != getUsername()) { RegExMatch(A_LoopReadLine, "SMS: (.+), Sender: (\S+) \((\d+)\)", sms_) } } else if (RegExMatch(A_LoopReadLine, "SMS: (.+)\.\.\.", preSMS_1_)) { distanceSMS := 0 RegExMatch(A_LoopReadLine, "SMS: (.+)\.\.\.", sms_) } else if (RegExMatch(A_LoopReadLine, "\.\.\.(.*), Sender: (\S+) \((\d+)\)", preSMS_2_)) { if (distanceSMS == 2) { if (preSMS_2_2 != getUsername()) { sms_2 := preSMS_2_2 sms_3 := preSMS_2_3 } } } distanceSMS++ } if (sms_2 != "") { SendClientMessage(PREFIX . "Letzte SMS (von " . SECCOL . sms_2 . "{FFFFFF}):") SendClientMessage(PREFIX . SECCOL . sms_1) SendInput, /sms %sms_3%{space} } else { SendClientMessage(PREFIX . "Keiner hat dich angeschrieben!") } } return :?:/readv:: { Loop, Read, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt { if (RegExMatch(A_LoopReadLine, "\[Werbung\] (.+), (\S+) \((\d+)\)")) { RegExMatch(A_LoopReadLine, "\[Werbung\] (.+), (\S+) \((\d+)\)", ad_) } } if (ad_2 != "") { SendClientMessage(PREFIX . "Letzte Werbung (von " . ad_2 . "):") SendClientMessage(PREFIX . ad_1) SendInput, /sms %ad_3%{space} } else { SendClientMessage(PREFIX . "Keine letzte Werbung gefunden!") } } return :?:/fan:: { name := PlayerInput("Fan: ") name := getFullName(name) if (name != "") { SendChat("/me gibt " . name . " ein Autogramm.") } } return :?:/pb:: :?:/paintball:: { SendChat("/paintball") Sleep, 200 players := 0 Loop, 100 { chat := readChatLine(players) if (InStr(chat, "Punkte")) { players++ } else { SendClientMessage(PREFIX . "Spieler im Paintball: " . SECCOL . players) return } } } return :?:/savestats:: { FormatTime, time,, dd.MM.yyyy HH:mm SendClientMessage(PREFIX . "Statistiken werden gespeichert! Datum: " . SECCOL . time) SendChat("/time") SendChat("/stats") Sleep, 250 SendInput, {F8} Sleep, 250 SendInput, {ESC} } return :?:/ja:: :?:/jas:: :?:/jam:: { SendChat("Ja, was kann ich für dich tun?") } return :?:/kcall:: { name := PlayerInput("Name: ") if (name != "") { SendChat("/number " . name) Sleep, 200 chat := readChatLine(0) if (RegExMatch(chat, "Name: (\S*), Ph: (\d*)", number_)) { SendChat("/call " . number_2) } else { SendClientMessage(PREFIX . "Anruf fehlgeschlagen!") } } } return :?:/ksms:: { name := PlayerInput("Name: ") if (name != "") { SendChat("/number " . name) Sleep, 200 chat := readChatLine(0) if (RegExMatch(chat, "Name: (\S*), Ph: (\d*)", number_)) { SendInput, t/sms %number_2%{space} } else { SendClientMessage(PREFIX . "Senden der SMS fehlgeschlagen!") } } } return :?:/p:: { called := false Loop, Read, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt { if (RegExMatch(A_LoopReadLine, "Dein Handy klingelt. Tippe /pickup. Anrufer-ID: (\S+)")) { RegExMatch(A_LoopReadLine, "Dein Handy klingelt. Tippe /pickup. Anrufer-ID: (\S+)", caller_) called := true } else if (RegExMatch(A_LoopReadLine, "Der Gesprächspartner hat aufgelegt\.") || RegExMatch(A_LoopReadLine, "Du hast aufgelegt\.") || RegExMatch(A_LoopReadLine, "Die Verbindung zu deinem Gesprächspartner wurde unterbrochen\.")) { called := false } } if (called && caller_1 != "") { name := getUsername() FormatTime, time,, HH SendChat("/pickup") if (time >= 12 && time < 18) { SendChat("Guten Tag " . caller_1 . ", du sprichst mit " . name . ".") } else if (time >= 18 || time == 0) { SendChat("Guten Abend " . caller_1 . ", du sprichst mit " . name . ".") } else if (time >= 1 && time < 12) { SendChat("Guten Morgen " . caller_1 . ", du sprichst mit " . name . ".") } SendChat("Wie kann ich dir helfen?") } else { SendClientMessage(PREFIX . "Niemand hat dich angerufen!") } } return :?:/h:: { called := false pickedup := false Loop, Read, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt { if (RegExMatch(A_LoopReadLine, "Dein Handy klingelt. Tippe /pickup. Anrufer-ID: (\S+)") || RegExMatch(A_LoopReadLine, "Der Spieler hat abgehoben\.")) { RegExMatch(A_LoopReadLine, "Dein Handy klingelt. Tippe /pickup. Anrufer-ID: (\S+)", caller_) called := true pickedup := true } else if (RegExMatch(A_LoopReadLine, "Bitte Warte bis der Spieler annimmt\.")) { called := true pickedup := false } else if (RegExMatch(A_LoopReadLine, "Der Gesprächspartner hat aufgelegt\.") || RegExMatch(A_LoopReadLine, "Du hast aufgelegt\.") || RegExMatch(A_LoopReadLine, "Die Verbindung zu deinem Gesprächspartner wurde unterbrochen\.")) { called := false pickedup := false } } if (called) { if (pickedup) { if (caller_1 != "") { SendChat("Vielen Dank für deinen Anruf, " . caller_1 . ".") } else { SendChat("Vielen Dank für deinen Anruf.") } FormatTime, time,, HH if (time >= 12 && time < 18) { SendChat("Ich wünsche dir noch einen schönen Tag.") } else if (time >= 18 || time == 0) { SendChat("Ich wünsche dir noch einen schönen Abend.") } else if (time >= 1 && time < 12) { SendChat("Ich wünsche dir noch einen schönen Morgen.") } } SendChat("/hangup") } else { SendClientMessage(PREFIX . "Niemand hat dich angerufen!") } } return :?:/ab:: { called := false Loop, Read, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt { if (RegExMatch(A_LoopReadLine, "Dein Handy klingelt. Tippe /pickup. Anrufer-ID: (\S+)")) { RegExMatch(A_LoopReadLine, "Dein Handy klingelt. Tippe /pickup. Anrufer-ID: (\S+)", caller_) called := true } else if (RegExMatch(A_LoopReadLine, "Der Gesprächspartner hat aufgelegt\.") || RegExMatch(A_LoopReadLine, "Du hast aufgelegt\.") || RegExMatch(A_LoopReadLine, "Die Verbindung zu deinem Gesprächspartner wurde unterbrochen\.")) { called := false } } if (called) { FormatTime, time,, HH SendChat("/pickup") if (time >= 12 && time < 18) { SendChat("Guten Tag " . caller_1 . ",") } else if (time >= 18 || time == 0) { SendChat("Guten Abend " . caller_1 . ",") } else if (time >= 1 && time < 12) { SendChat("Guten Morgen " . caller_1 . ",") } SendChat("Sie sind verbunden mit dem Anrufbeantworter von " . getUsername() . ":") SendChat("Ich bin leider beschäftigt, bitte rufe mich später erneut an!") SendChat("/hangup") } else { SendClientMessage(PREFIX . "Niemand hat dich angerufen!") } } return :?:/tag:: { FormatTime, time,, HH if (time >= 12 && time < 20) { SendChat("Guten Tag, wie kann ich dir helfen?") } else if (time >= 20 || time == 0) { SendChat("Guten Abend, wie kann ich dir helfen?") } else if (time >= 1 && time < 12) { SendChat("Guten Morgen, wie kann ich dir helfen?") } } return :?:/bye:: { FormatTime, time,, HH if (time >= 12 && time < 20) { SendChat("Ich wünsche dir noch einen schönen Tag. Auf Wiedersehen!") } else if (time >= 20 || time == 0) { SendChat("Ich wünsche dir noch einen schönen Abend. Auf Wiedersehen!") } else if (time >= 1 && time < 12) { SendChat("Ich wünsche dir noch einen schönen Tag. Auf Wiedersehen!") } } return :?:/fg:: { blockDialog() SendChat("/stats") Sleep, 200 unBlockDialog() if (RegExMatch(getDialogText(), statsFormat, dialog_)) { deposit := dialog_14 account := dialog_13 if (deposit == 0) { if (getPlayerInteriorId() == 20) { if (IsPlayerInRangeOfPoint(1429.6781, -997.2040, 1639.7843, 5)) { if (account >= 1250000) { SendChat("/festgeld 1250000") } else if (account >= 50000 && account < 1250000) { SendClientMessage(PREFIX . "Du hast aktuell nur " . SECCOL . formatNumber(account) . "$ {FFFFFF}auf dem Konto.") SendClientMessage(PREFIX . "Möchtest du diesen Betrag als Festgeld anlegen? Drücke " . SECCOL . "X {FFFFFF}zum Bestätigen.") KeyWait, X, D, T10 if (!ErrorLevel) { SendChat("/festgeld " . account) } } else { SendClientMessage(PREFIX . "Du hast nicht genügend Geld auf deinem Konto, um Festgeld anzulegen.") } } else { SendClientMessage(PREFIX . "Du befindest dich nicht am Bankschalter.") } } else { SendClientMessage(PREFIX . "Du hast derzeit kein Festgeld angelegt.") SendClientMessage(PREFIX . "Begebe dich in die Bank, um Festgeld anzulegen.") } } else { if (getPlayerInteriorId() == 20) { if (IsPlayerInRangeOfPoint(1429.6781, -997.2040, 1639.7843, 5)) { SendClientMessage(PREFIX . "Du hast bereits " . SECCOL . formatNumber(deposit) . "$ {FFFFFF}Festgeld angelegt. Möchtest du es abbrechen? Drücke " . SECCOL . "X {FFFFFF}zum Bestätigen.") KeyWait, X, D, T10 if (!ErrorLevel) { SendChat("/cancelfestgeld") } } else { if (account >= 1) { SendChat("/festgeld 1") } else { SendClientMessage(PREFIX . "Du hast aktuell " . SECCOL . formatNumber(deposit) . "$ {FFFFFF}Festgeld angelegt. Um zu sehen, wie lange es noch dauert, brauchst du mind. 1$ auf deinem Konto.") } } } else { if (account >= 1) { SendChat("/festgeld 1") } else { SendClientMessage(PREFIX . "Du hast aktuell " . SECCOL . formatNumber(deposit) . "$ {FFFFFF}Festgeld angelegt. Um zu sehen, wie lange es noch dauert, brauchst du mind. 1$ auf deinem Konto.") } } } } } return :?:/ap:: { SendChat("/accept paket") } return :?:/tanken:: { if (isPlayerInAnyVehicle()) { if (getVehicleEngineState()) { SendChat("/motor") } SendChat("/fill") Sleep, 10000 SendChat("/motor") SendChat("/licht") if (autoBuyCanister) { SendClientMessage(PREFIX . "Möchtest du noch einen Kanister kaufen? Steig aus dem Fahrzeug aus und drücke " . SECCOL . "X{FFFFFF}!") KeyWait, X, D, T10 if (!ErrorLevel) { SendChat("/kanister") } } } else { SendClientMessage(PREFIX . "Du bist in keinem Fahrzeug!") } } return :?:/minuten:: { seconds := PlayerInput("Sekunden: ") if (seconds != "") { minutes := Floor(seconds / 60) SendClientMessage(PREFIX . SECCOL . FormatNumber(seconds) . " {FFFFFF}Sekunden sind " . SECCOL . FormatNumber(minutes) " {FFFFFF}Minuten.") } } return :?:/link:: { Loop, Read, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt { if (RegExMatch(A_LoopReadLine, "(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})(\S*)")) { RegExMatch(A_LoopReadLine, "(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})(\S*)", url_) } if (RegExMatch(A_LoopReadLine, "http:\/\/(\S+)")) { RegExMatch(A_LoopReadLine, "http\:\/\/(\S+)", url_) url := "http://" . url_1 } else if (RegExMatch(A_LoopReadLine, "https:\/\/(\S+)")) { RegExMatch(A_LoopReadLine, "https\:\/\/(\S+)", url_) url := "https://" . url_1 } else if (RegExMatch(A_LoopReadLine, "www.(\S+)")) { RegExMatch(A_LoopReadLine, "www.(\S+)", url_) url := "www." . url_1 } } clipboard := url SendClientMessage(PREFIX . "Der folgende Link wurde in die Zwischenablage kopiert:") SendClientMessage(PREFIX . SECCOL . url) } return :?:/savechat:: { FileCreateDir, %A_MyDocuments%\GTA San Andreas User Files\SAMP\ChatlogBackups FormatTime, zeit, %A_Now%,dd.MM.yy - HH.mm FileCopy, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt, %A_MyDocuments%\GTA San Andreas User Files\SAMP\ChatlogBackups\chatlog %zeit% Uhr.txt, 0 SendClientMessage(PREFIX . "Es wurde ein Backup des aktuellen Chatlogs erstellt!") } return :?:/cc:: :?:/chatclear:: { Loop, 100 { AddChatMessage("") } SendClientMessage(PREFIX . "Der Chat wurde erfolgreich geleert!") } return :?:/sani:: { zone := getPlayerZone() SendChat("/service") Sleep, 250 SendInput, {enter} if (!admin) Sleep, 250 SendChat("/f Ich habe einen Sanitäter in " . zone . " gerufen!") SendChat("/crew Ich habe einen Sanitäter in " . zone . " gerufen!") } return :?:/gk:: { id := PlayerInput("Gebäudekomplex: ") if (id == "") return if (RegExMatch(id, "^(\d+)\.(\d+)$")) { gk(id) } } return gk(id, showGK := false) { result := URLDownloadToVar(mainAPI . "gk.php?gk=" . id) if (result == "ERROR_CONNECTION") { SendClientMessage(PREFIX . "{FF0000}Fehler bei der Verbindung zum Server!") } else if (result == "ERROR_BAD_LINK") { SendClientMessage(PREFIX . "{FF0000}Fehlerhafte Parameterübergabe!") } else if (result == "ERROR_ACCESS_DENIED") { SendClientMessage(PREFIX . "{FF0000}Zugriff verweigert, das Passwort ist falsch!") } else if (result == "ERROR_WRONG_FORMAT") { SendClientMessage(PREFIX . "{FF0000}Fehlerhaftes Format!") } else if (result == "ERROR_NOT_FOUND") { SendClientMessage(PREFIX . "{FF0000}Der Komplex wurde nicht in der Datenbank gefunden!") } else { SendClientMessage(PREFIX . "Gebäudekomplex {FF0000}" . id . "{FFFFFF}:") try { data := JSON.Load(result) } catch { SendClientMessage(PREFIX . "{FF0000}Es ist ein unbekannter Fehler aufgetreten!") FormatTime, time, , dd.MM.yyyy HH:mm:ss FileAppend, [%time%] Beim Laden des GK ist ein Fehler aufgetreten: %result%`n, log.txt return } for index, entry in data { name := entry["name"] location := "" if (entry["type"] == "public") { color := "{00FF00}" location := " (" . calculateZone(entry["x"], entry["y"], 0.0) . ", " . calculateCity(entry["x"], entry["y"], 0.0) . ")" } else if (entry["type"] == "house") { color := "{00FFFF}" if (name == "Nobody") { name := "Haus (frei)" } else if (name == "Auktion im CP") { name := "Haus (" . name . ")" } else { name := "Haus von " . name } location := " (" . calculateZone(entry["x"], entry["y"], 0.0) . ", " . calculateCity(entry["x"], entry["y"], 0.0) . ")" } else if (entry["type"] == "faction") { color := "{7F00FF}" location := " (" . calculateZone(entry["x"], entry["y"], 0.0) . ", " . calculateCity(entry["x"], entry["y"], 0.0) . ")" } else if (entry["type"] == "vehicle") { color := "{FF00FF}" } if (entry["x"] == -5000 || entry["y"] == -5000) { location := "" } SendClientMessage(PREFIX . SECCOL . "[GK] " . color . "[ID: " . entry["type"] . "." . entry["id"] . "] " . name . location) } } } :?:/showgk:: { id := PlayerInput("Gebäudekomplex-ID: ") showGK(id) } return showGK(gk, ignoreExisting := false) { if (RegExMatch(gk, "^(public|house|faction)\.(\d+)$", regex_)) { result := UrlDownloadToVar(mainAPI . "gk.php?id=" . gk) if (result == "ERROR_CONNECTION") { SendClientMessage(PREFIX . "{FF0000}Fehler bei der Verbindung zum Server!") } else if (result == "ERROR_BAD_LINK") { SendClientMessage(PREFIX . "{FF0000}Fehlerhafte Parameterübergabe!") } else if (result == "ERROR_ACCESS_DENIED") { SendClientMessage(PREFIX . "{FF0000}Zugriff verweigert, das Passwort ist falsch!") } else if (result == "ERROR_WRONG_FORMAT") { SendClientMessage(PREFIX . "{FF0000}Fehlerhaftes Format!") } else if (result == "ERROR_NOT_FOUND") { SendClientMessage(PREFIX . "{FF0000}Der Komplex wurde nicht in der Datenbank gefunden!") } else { try { data := JSON.Load(result) } catch { SendClientMessage(PREFIX . "{FF0000}Es ist ein unbekannter Fehler aufgetreten!") FormatTime, time, , dd.MM.yyyy HH:mm:ss FileAppend, [%time%] Beim Laden des showGK ist ein Fehler aufgetreten: %result%`n, log.txt return } if (IsMarkerCreated() && !ignoreExisting) { SendClientMessage(PREFIX . "Es ist bereits ein Checkpoint gesetzt, wenn du diesen überschreiben willst, drücke " . SECCOL . "X{FFFFFF}!") KeyWait, X, D, T10 if (ErrorLevel) { return } } zPos := data["z"] if (zPos == -1) zPos := 20 if (setCheckpoint(data["x"], data["y"], zPos, 5)) { SendClientMessage(PREFIX . "Der Checkpoint zum GK mit der ID " . SECCOL . gk . " {FFFFFF}wurde erfolgreich gesetzt!") } else { SendClientMessage(PREFIX . "Beim Setzen des Checkpoints ist ein Fehler aufgetreten!") } } } else { SendClientMessage(PREFIX . SECCOL . "[GK] {FF0000}Fehler: Die ID wurde falsch formatiert. " . SECCOL . "Beispiel: public.12") } } :?:/checkpoint:: { x := PlayerInput("x: ") y := PlayerInput("y: ") z := PlayerInput("z: ") if (x != "" && y != "" && z != "") { if (IsMarkerCreated()) { SendClientMessage(PREFIX . "Es ist bereits ein Checkpoint gesetzt, wenn du diesen überschreiben willst, drücke " . SECCOL . "X{FFFFFF}!") KeyWait, X, D, T10 if (ErrorLevel) { return } } if (setCheckpoint(x, y, z, 0.5)) { SendClientMessage(PREFIX . "ERFOLG!") } else { SendClientMessage(PREFIX . "FEHLER!") } } } return :?:/sanis:: { result := UrlDownloadToVar(mainAPI . "fractionmembers.php?id=4") sanis := "Name`tRang`tID" Loop, Parse, result, ~ { if (RegExMatch(A_LoopField, "(\S+),(\d+)", member_)) { id := getPlayerIdByName(member_1, true) if (id != -1) { sanis .= "`n{00FF00}" . member_1 . "`t{FF8000}" . member_2 . "`t" . id } else { sanis .= "`n{FF0000}" . member_1 . "`t{FF8000}" . member_2 . "`t-" } } } ShowDialog(DIALOG_STYLE_TABLIST_HEADERS, "LSMD Mitgliederliste", sanis, "OK") } return :?:/onsanis:: { result := UrlDownloadToVar(mainAPI . "fractionmembers.php?id=4") SendClientMessage(PREFIX . "Es werden nur Mitglieder des LSMD angezeigt, die online sind.") Loop, Parse, result, ~ { RegExMatch(A_LoopField, "(\S+),(\d+)", member) id := getPlayerIdByName(member1, true) if (member1 != "") { if (id != -1) { SendClientMessage(PREFIX . member1 . " " . SECCOL . "[ID: " . id "] {FFFFFF}Rang: " . SECCOL . member2) } } } } return :?:/coords:: { GetPlayerPos(posX, posY, posZ) SendClientMessage(PREFIX . "x: " . SECCOL . posX . " {FFFFFF}y: " . SECCOL . posY . " {FFFFFF}z: " . SECCOL . posZ) } return :?:/fpslock:: { if (fpsLock()) { SendClientMessage(PREFIX . "Deine FPS wurden wieder beschränkt.") } else { SendClientMessage(PREFIX . "Beim Beschränken deiner FPS ist ein Fehler aufgetreten.") } } return :?:/fpsunlock:: { if (fpsUnlock()) { SendClientMessage(PREFIX . "Die Beschränkung deiner FPS wurde aufgehoben.") } else { SendClientMessage(PREFIX . "Beim Aufheben der Beschränkung deiner FPS ist ein Fehler aufgetreten.") } } return :?:/relog:: { SendClientMessage(PREFIX . "Du verbindest nun neu...") restart() } return ; ------------- ; ; Gegner-System ; ; ------------- ; SearchEnemyTimer: { IfWinNotActive, GTA:SA:MP return players := getStreamedInPlayersInfo() for i, o in players { updatePlayerFraction(o.ID) } if (enemyJoinLeaveMessage) { if (!SQLiteDB.Query("SELECT name, fraction FROM enemies WHERE fraction != '0' ORDER BY fraction ASC, name ASC;", recordSet)) { FileAppend, % "SQLite Error: Query - Msg: '" . recordSet.ErrorMsg . "' - Code: " . recordSet.ErrorCode, log.txt return } if (recordSet.HasRows) { while (recordSet.Next(row) >= 1) { enemyName := row[1] enemyFraction := row[2] showEnemyMessage(enemyName, enemyFraction) } } recordSet.Free() for index, entry in lspdData { showEnemyMessage(entry, 1) } for index, entry in fbiData { showEnemyMessage(entry, 2) } if (firstEnemiesTimerRun) { firstEnemiesTimerRun := false } } } return showEnemyMessage(name, fraction) { global debug playerID := getPlayerIdByName(name, true) if (ErrorLevel || playerID == -2) { if (debug) { SendClientMessage(PREFIX . "Fehler beim Auslesen der ID von " . name . " (" . playerID . "): " . ErrorLevel) } return } if (playerID != -1) { if (!onlineEnemies.HasKey(name)) { onlineEnemies[name] := fraction if (!firstEnemiesTimerRun) { SendClientMessage(PREFIX . SECCOL . name . " {FFFFFF}aus der Fraktion " . SECCOL . getFraktionByID(fraction) . " {FFFFFF}ist {00FF00}online {FFFFFF}gekommen.") } } } else { if (onlineEnemies.HasKey(name)) { onlineEnemies.Delete(name) if (!firstEnemiesTimerRun) { SendClientMessage(PREFIX . SECCOL . name . " {FFFFFF}aus der Fraktion " . SECCOL . getFraktionByID(fraction) . " {FFFFFF}ist {FF0000}offline {FFFFFF}gegangen.") } } } } RefreshCops: { lspdResult := UrlDownloadToVar("https://lspd.comniemeer.de/api/members") fbiResult := UrlDownloadToVar("https://fbi.comniemeer.de/api/members") try { lspdData := JSON.Load(lspdResult) fbiData := JSON.Load(fbiResult) } catch { FormatTime, time, , dd.MM.yyyy HH:mm:ss FileAppend, [%time%] Beim Laden der Cops ist ein Fehler aufgetreten:`nLSPD: %lspdResult%`nFBI: %fbiResult%`n, log.txt return } } return ~RButton:: { while GetKeyState("RButton", "P") { playerPed := getTargetPed() playerID := getIdByPed(playerPed) if (updatePlayerFraction(playerID)) { Sleep, 1500 } } } return updatePlayerFraction(playerID) { global SQLiteDB playerName := getPlayerNameByID(playerID) playerSkin := getTargetPlayerSkinIdById(playerID) playerFraction := getFraktionBySkinID(playerSkin) if (playerName != "" && playerID != -1 && playerSkin != -1 && !ErrorLevel) { if (!SQLiteDB.Query("SELECT fraction FROM enemies WHERE name LIKE '" . playerName . "';", recordSet)) { FileAppend, % "SQLite Error: Query - Msg: '" . recordSet.ErrorMsg . "' - Code: " . recordSet.ErrorCode, log.txt return false } if (!recordSet.HasRows) { if (SQLiteDB.exec("INSERT INTO enemies (name, fraction, updated) VALUES ('" . playerName . "', '" . playerFraction . "', '" . getUnixTimestamp(A_Now) . "');")) { if (playerFraction != 0 && enemyAddedMessage) { SendClientMessage(PREFIX . SECCOL . playerName . " {FFFFFF}(" . SECCOL . getFraktionByID(playerFraction) . "{FFFFFF}) wurde in die Gegnerliste aufgenommen!") } } } else { if (recordSet.Next(row)) { oldFraction := row[1] if (oldFraction != playerFraction) { if (SQLiteDB.exec("UPDATE enemies SET name = '" . playerName . "', fraction = '" . playerFraction . "', updated = '" . getUnixTimestamp(A_Now) . "' WHERE name = '" . playerName . "';")) { if (enemyUpdatedMessage) { if (playerFraction != 0) { SendClientMessage(PREFIX . SECCOL . playerName . " {FFFFFF}(" . SECCOL . getFraktionByID(playerFraction) . "{FFFFFF}) wurde in der Gegnerliste aktualisiert (Alte Fraktion: " . getFraktionByID(oldFraction) . ")!") } else { SendClientMessage(PREFIX . SECCOL . playerName . " {FFFFFF}wurde aus der Gegnerliste entfernt (Alte Fraktion: " . getFraktionByID(oldFraction) . ")!") } } } } } } recordSet.Free() return true } return false } :?:/remgegner:: :?:/delgegner:: :?:/remenemy:: :?:/delenemy:: { enemyName := PlayerInput("Gegner: ") if (enemyName == "") return if (!SQLiteDB.Query("SELECT fraction, name FROM enemies WHERE name LIKE '" . enemyName . "';", recordSet)) { SendClientMessage(PREFIX . "Es ist ein SQLite-Fehler aufgetreten! Sieh' bitte in der log.txt nach und informiere Martin im Forum.") FileAppend, % "SQLite Error: Query - Msg: '" . recordSet.ErrorMsg . "' - Code: " . recordSet.ErrorCode, log.txt return } if (recordSet.HasRows) { if (recordSet.Next(row)) { enemyFraction := row[1] enemyName := row[2] if (SQLiteDB.exec("UPDATE enemies SET fraction = '0', updated = '" . getUnixTimestamp(A_Now) . "' WHERE name = '" . enemyName . "';")) { SendClientMessage(PREFIX . SECCOL . enemyName . " {FFFFFF}wurde aus der Gegnerliste entfernt (Alte Fraktion: " . getFraktionByID(enemyFraction) . ")!") return } } } SendClientMessage(PREFIX . "Der Spieler " . SECCOL . enemyName . " {FFFFFF}wurde nicht in der Gegnerliste gefunden!") } return :?:/gegner:: :?:/enemies:: :?:/enemys:: { if (!SQLiteDB.Query("SELECT fraction, name FROM enemies WHERE fraction != '0' ORDER BY fraction ASC, name ASC;", recordSet)) { SendClientMessage(PREFIX . "Es ist ein SQLite-Fehler aufgetreten! Sieh' bitte in der log.txt nach und informiere Martin im Forum.") FileAppend, % "SQLite Error: Query - Msg: '" . recordSet.ErrorMsg . "' - Code: " . recordSet.ErrorCode, log.txt return } dialog := "Fraktion`tName`tID" playerCount := 0 for index, entry in lspdData { playerFraction := 1 playerName := entry playerID := getPlayerIdByName(playerName, true) if (playerID != -1) { playerCount++ dialog .= "`n" . getFraktionColorByID(playerFraction) . getFraktionByID(playerFraction) . "`t" . playerName . "`t" . playerID } } for index, entry in fbiData { playerFraction := 2 playerName := entry playerID := getPlayerIdByName(playerName, true) if (playerID != -1) { playerCount++ dialog .= "`n" . getFraktionColorByID(playerFraction) . getFraktionByID(playerFraction) . "`t" . playerName . "`t" . playerID } } if (recordSet.HasRows) { while (recordSet.Next(row) >= 1) { playerFraction := getFraktionByID(row[1]) playerName := row[2] playerID := getPlayerIdByName(playerName, true) if (playerID != -1) { playerCount++ dialog .= "`n" . getFraktionColorByID(row[1]) . playerFraction . "`t" . playerName . "`t" . playerID } } Sleep, 100 ShowDialog(DIALOG_STYLE_TABLIST_HEADERS, "{FFFFFF}Gegner online: " . SECCOL . playerCount, dialog, "OK") } else { SendClientMessage(PREFIX . "Es wurden noch keine Gegner gefunden! Begebe dich in die Nähe von potentiellen Gegnern, um sie hinzuzufügen.") } recordSet.Free() } return :?:/lspd:: :?:/fbi:: :?:/cops:: { RegExMatch(A_ThisHotkey, "^:\?:\/(\S+)$", hstring_) dialog := "Fraktion`tName`tID`tStatus" playerCount := 0 if (hstring_1 = "cops" || hstring_1 = "lspd") { for index, entry in lspdData { playerID := getPlayerIdByName(entry, true) dialog .= "`n" . getFraktionColorByID(1) . getFraktionByID(1) . "`t" . entry . "`t" . (playerID == -1 ? "-" : playerID) . "`t" . (playerID == -1 ? "{FF0000}offline" : "{00FF00}online") if (playerID != -1) { playerCount++ } } } if (hstring_1 = "cops" || hstring_1 = "fbi") { for index, entry in fbiData { playerID := getPlayerIdByName(entry, true) dialog .= "`n" . getFraktionColorByID(2) . getFraktionByID(2) . "`t" . entry . "`t" . (playerID == -1 ? "-" : playerID) . "`t" . (playerID == -1 ? "{FF0000}offline" : "{00FF00}online") if (playerID != -1) { playerCount++ } } } Sleep, 100 ShowDialog(DIALOG_STYLE_TABLIST_HEADERS, SECCOL . "Copliste {FFFFFF}(" . SECCOL . playerCount . " {FFFFFF}online)", dialog, "OK") } return :?:/oncops:: { dialog := "Fraktion`tName`tID`tStatus" playerCount := 0 for index, entry in lspdData { playerID := getPlayerIdByName(entry, true) if (playerID != -1) { dialog .= "`n" . getFraktionColorByID(1) . getFraktionByID(1) . "`t" . entry . "`t" . (playerID == -1 ? "-" : playerID) . "`t" . (playerID == -1 ? "{FF0000}offline" : "{00FF00}online") playerCount++ } } for index, entry in fbiData { playerID := getPlayerIdByName(entry, true) if (playerID != -1) { dialog .= "`n" . getFraktionColorByID(2) . getFraktionByID(2) . "`t" . entry . "`t" . (playerID == -1 ? "-" : playerID) . "`t" . (playerID == -1 ? "{FF0000}offline" : "{00FF00}online") playerCount++ } } Sleep, 100 ShowDialog(DIALOG_STYLE_TABLIST_HEADERS, SECCOL . "Copliste {FFFFFF}(" . SECCOL . playerCount . " {FFFFFF}online)", dialog, "OK") } return :?:/lvpd:: :?:/russen:: :?:/yakuza:: :?:/grove:: :?:/ballas:: :?:/lcm:: :?:/rifa:: :?:/vagos:: :?:/triaden:: { if (RegExMatch(A_ThisHotkey, "^:\?:\/(\S+)$", hstring_)) { fraction := fractions[hstring_1][1] if (!SQLiteDB.Query("SELECT name FROM enemies WHERE fraction = '" . fraction . "' ORDER BY name ASC;", recordSet)) { SendClientMessage(PREFIX . "Es ist ein SQLite-Fehler aufgetreten! Sieh' bitte in der log.txt nach und informiere Martin im Forum.") FileAppend, % "SQLite Error: Query - Msg: '" . recordSet.ErrorMsg . "' - Code: " . recordSet.ErrorCode, log.txt return } if (recordSet.HasRows) { dialog := "Name`tID`tStatus" playerCount := 0 while (recordSet.Next(row) >= 1) { playerName := row[1] playerID := getPlayerIdByName(playerName, true) dialog .= "`n" . playerName . "`t" . (playerID == -1 ? "-" : playerID) . "`t" . (playerID == -1 ? "{FF0000}offline" : "{00FF00}online") if (playerID != -1) { playerCount++ } } Sleep, 100 ShowDialog(DIALOG_STYLE_TABLIST_HEADERS, SECCOL . getFraktionByID(fraction) . " {FFFFFF}(" . SECCOL . playerCount . " {FFFFFF}online)", dialog, "OK") } else { SendClientMessage(PREFIX . "Es wurden noch keine Gegner der angegebenen Fraktion gefunden! Begebe dich in die Nähe von potentiellen Gegnern, um sie hinzuzufügen.") } recordSet.Free() } } return #IFNDEF nooverlay EnemyOverlayTimer: { IfWinNotActive, GTA:SA:MP return enemyOverlayText := "" playerCount := 0 if (enemyOverlayShowCops) { for index, entry in lspdData { playerName := entry playerFraction := 1 playerID := getPlayerIdByName(playerName, true) if (playerID != -1) { enemyOverlayText .= "`n" . getFraktionColorByID(playerFraction) . getFraktionByID(playerFraction) . " {FFFFFF}- " . enemyOverlayPrimColor . playerName . enemyOverlaySecColor " (" . enemyOverlayPrimColor . playerID . enemyOverlaySecColor . ")" playerCount++ } } for index, entry in fbiData { playerName := entry playerFraction := 2 playerID := getPlayerIdByName(playerName, true) if (playerID != -1) { enemyOverlayText .= "`n" . getFraktionColorByID(playerFraction) . getFraktionByID(playerFraction) . " {FFFFFF}- " . enemyOverlayPrimColor . playerName . enemyOverlaySecColor " (" . enemyOverlayPrimColor . playerID . enemyOverlaySecColor . ")" playerCount++ } } } if (!SQLiteDB.Query("SELECT name, fraction FROM enemies WHERE fraction != 0 ORDER BY fraction ASC, name ASC;", recordSet)) { FileAppend, % "SQLite Error: Query - Msg: '" . recordSet.ErrorMsg . "' - Code: " . recordSet.ErrorCode, log.txt return } if (recordSet.HasRows) { while (recordSet.Next(row) >= 1) { if ((row[2] >= 1 && row[2] <= 3) && !enemyOverlayShowCops) { continue } skin := getPlayerSkinId() if (skin != -1) { fraction := getFraktionBySkinID(skin) if (fraction == row[2] && !enemyOverlayShowOwnFraction) { continue } } playerName := row[1] playerFraction := getFraktionByID(row[2]) playerID := getPlayerIdByName(playerName, true) if (playerID != -1) { enemyOverlayText .= "`n" . getFraktionColorByID(row[2]) . playerFraction . " {FFFFFF}- " . enemyOverlayPrimColor . playerName . enemyOverlaySecColor " (" . enemyOverlayPrimColor . playerID . enemyOverlaySecColor . ")" playerCount++ } } } recordSet.Free() enemyOverlayText := enemyOverlayPrimColor . playerCount . enemyOverlaySecColor . " Gegner online:" . enemyOverlayText if (!enemyOverlayColors) { enemyOverlayText := RegExReplace(enemyOverlayText, "{\S{6}}", "") } TextSetString(enemyOverlay, enemyOverlayText) } return #ENDIF ; ------------- ; ; TextDraws ; ; ------------- ; :?:/hptd:: :?:/hptext:: { if (hpTextEnabled) { SetTimer, HealthTextDrawTimer, Off hpTextEnabled := false if (textMoveMode == 1 || textMoveMode == 2) { textMoveMode := 0 } deleteTextDraw(hpText) deleteTextDraw(armourText) SendClientMessage(PREFIX . "Das HP-TextDraw wurde deaktiviert!") } else { createText(1) hpTextEnabled := true SendClientMessage(PREFIX . "Das HP-TextDraw wurde aktiviert!") } } return :?:/fps:: :?:/fpstd:: :?:/fpstext:: { if (fpsTextEnabled) { SetTimer, FPSTextDrawTimer, Off fpsTextEnabled := false if (textMoveMode == 3) { textMoveMode := 0 } deleteTextDraw(fpsText) SendClientMessage(PREFIX . "Das FPS-TextDraw wurde deaktiviert!") } else { createText(3) fpsTextEnabled := true SendClientMessage(PREFIX . "Das FPS-TextDraw wurde aktiviert!") } } return :?:/tdmove:: :?:/textmove:: { if (textMoveMode) { textMoveMode := 0 SendClientMessage(PREFIX . "Der TextDraw-Bearbeitungsmodus wurde {FF0000}deaktiviert{FFFFFF}!") } else { SendClientMessage(PREFIX . SECCOL . "1{FFFFFF}: HP-TextDraw " . SECCOL . "2{FFFFFF}: Armour-TextDraw " . SECCOL . "3{FFFFFF}: FPS-TextDraw") textInput := PlayerInput("Text verschieben: ") if (textInput == "1") { if (hpText != -1) { textMoveMode := 1 SendClientMessage(PREFIX . "Der TextDraw-Bearbeitungsmodus wurde {00FF00}aktiviert{FFFFFF}!") SendClientMessage(PREFIX . "Das HP-TextDraw kann nun mit den Pfeiltasten verschoben werden.") SendClientMessage(PREFIX . "Wenn du fertig bist, tippe " . SECCOL . "/textsave {FFFFFF}ein, um die Einstellung zu speichern!") } else { SendClientMessage(PREFIX . "Das HP-TextDraw muss aktiviert sein, um ihn zu verschieben!") } } else if (textInput == "2") { if (armourText != -1) { textMoveMode := 2 SendClientMessage(PREFIX . "Der TextDraw-Bearbeitungsmodus wurde {00FF00}aktiviert{FFFFFF}!") SendClientMessage(PREFIX . "Das Armour-TextDraw kann nun mit den Pfeiltasten verschoben werden.") SendClientMessage(PREFIX . "Wenn du fertig bist, tippe " . SECCOL . "/textsave {FFFFFF}ein, um die Einstellung zu speichern!") } else { SendClientMessage(PREFIX . "Das Armour-TextDraw muss aktiviert sein, um ihn zu verschieben! (Du musst Armour haben)") } } else if (textInput == "3") { if (fpsText != -1) { textMoveMode := 3 SendClientMessage(PREFIX . "Der TextDraw-Bearbeitungsmodus wurde {00FF00}aktiviert{FFFFFF}!") SendClientMessage(PREFIX . "Das FPS-TextDraw kann nun mit den Pfeiltasten verschoben werden.") SendClientMessage(PREFIX . "Wenn du fertig bist, tippe " . SECCOL . "/textsave {FFFFFF}ein, um die Einstellung zu speichern!") } else { SendClientMessage(PREFIX . "Das FPS-TextDraw muss aktiviert sein, um ihn zu verschieben!") } } } } return :?:/tdsave:: :?:/textsave:: { if (textMoveMode == 1) { IniWrite, %hpTextPosX%, settings.ini, HPText, HPPosX IniWrite, %hpTextPosY%, settings.ini, HPText, HPPosY textMoveMode := 0 SendClientMessage(PREFIX . "Die HP-TextDraw-Position wurde {00FF00}gespeichert{FFFFFF}!") } else if (textMoveMode == 2) { IniWrite, %armourTextPosX%, settings.ini, HPText, ArmourPosX IniWrite, %armourTextPosY%, settings.ini, HPText, ArmourPosY textMoveMode := 0 SendClientMessage(PREFIX . "Die Armour-TextDraw-Position wurde {00FF00}gespeichert{FFFFFF}!") } else if (textMoveMode == 3) { IniWrite, %fpsTextPosX%, settings.ini, FPSText, PosX IniWrite, %fpsTextPosY%, settings.ini, FPSText, PosY textMoveMode := 0 SendClientMessage(PREFIX . "Die FPS-TextDraw-Position wurde {00FF00}gespeichert{FFFFFF}!") } else { SendClientMessage(PREFIX . "Der TextDraw-Bearbeitungsmodus ist nicht aktiviert!") } } return createText(id) { global if (id == 1) { hpText := createTextDraw(getTextDrawColor(hpTextColor) . getPlayerHealth(), hpTextPosX, hpTextPosY, 0xFFFFFFFF, hpTextFont, hpTextFontSize, hpTextFontSize * 3) armourText := -1 SetTimer, HealthTextDrawTimer, 500 } else if (id == 3) { fpsText := createTextDraw(getTextDrawColor(fpsTextColor) . getFPS(), fpsTextPosX, fpsTextPosY, 0xFFFFFFFF, fpsTextFont, fpsTextFontSize, fpsTextFontSize * 3) SetTimer, FPSTextDrawTimer, 500 } } updateText(id) { global if (id == 1) { if (hpText != -1) { moveTextDraw(hpText, hpTextPosX, hpTextPosY) } } else if (id == 2) { if (armourText != -1) { moveTextDraw(armourText, armourTextPosX, armourTextPosY) } } else if (id == 3) { if (fpsText != -1) { moveTextDraw(fpsText, fpsTextPosX, fpsTextPosY) } } } getTextDrawColor(id) { color := "" if (id == 1) { color := "~w~" } else if (id == 2) { color := "~l~" } else if (id == 3) { color := "~r~" } else if (id == 4) { color := "~g~" } else if (id == 5) { color := "~b~" } else if (id == 6) { color := "~y~" } else if (id == 7) { color := "~p~" } return color } HealthTextDrawTimer: { if (hpText != -1) { updateTextDraw(hpText, getTextDrawColor(hpTextColor) . getPlayerHealth()) } armour := getPlayerArmor() if (armour > 1) { if (armourText != -1) { updateTextDraw(armourText, getTextDrawColor(armourTextColor) . armour) } else { armourText := createTextDraw(getTextDrawColor(armourTextColor) . TextColor . armour, armourTextPosX, armourTextPosY, 0xFFFFFFFF, hpTextFont, hpTextFontSize, hpTextFontSize * 3) } } else { if (armourText != -1) { deleteTextDraw(armourText) } } } return FPSTextDrawTimer: { if (fpsText != -1) { updateTextDraw(fpsText, getTextDrawColor(fpsTextColor) . getFPS()) } } return ; -------------- ; ; Freunde-System ; ; -------------- ; :?:/addfreund:: :?:/addfriend:: { friendNameInput := PlayerInput("Name/ID des Freundes: ") if (friendNameInput == "") return friendName := getFullName(friendNameInput) if (friendName == "") { friendName := friendNameInput } if (!SQLiteDB.Query("SELECT name FROM friends WHERE name LIKE '" . friendName . "';", recordSet)) { FileAppend, % "SQLite Error: Query - Msg: '" . recordSet.ErrorMsg . "' - Code: " . recordSet.ErrorCode, log.txt SendClientMessage(PREFIX . "Es ist ein Fehler aufgetreten! Schau bitte in die log.txt und melde den Fehler bei Martin!") } if (!recordSet.HasRows) { if (SQLiteDB.exec("INSERT INTO friends (name, added) VALUES ('" . friendName . "', '" . getUnixTimestamp(A_Now) . "');")) { SendClientMessage(PREFIX . SECCOL . friendName . " {FFFFFF}wurde in die Freundesliste aufgenommen!") } else { FileAppend, % "SQLite Error: Query - Msg: '" . SQLiteDB.ErrorMsg . "' - Code: " . SQLiteDB.ErrorCode, log.txt SendClientMessage(PREFIX . "Es ist ein Fehler aufgetreten! Schau bitte in die log.txt und melde den Fehler bei Martin!") } } else { if (recordSet.Next(row)) { if (SQLiteDB.exec("UPDATE friends SET name = '" . friendName . "', updated = '" . getUnixTimestamp(A_Now) . "' WHERE name = '" . friendName . "';")) { SendClientMessage(PREFIX . SECCOL . friendName . " {FFFFFF}wurde in der Freundesliste aktualisiert!") } else { FileAppend, % "SQLite Error: Query - Msg: '" . SQLiteDB.ErrorMsg . "' - Code: " . SQLiteDB.ErrorCode, log.txt SendClientMessage(PREFIX . "Es ist ein Fehler aufgetreten! Schau bitte in die log.txt und melde den Fehler bei Martin!") } } } recordSet.Free() } return :?:/remfreund:: :?:/delfreund:: :?:/remfriend:: :?:/delfriend:: { friendNameInput := PlayerInput("Name/ID des Freundes: ") if (friendNameInput == "") return friendName := getFullName(friendNameInput) if (friendName == "") { friendName := friendNameInput } if (SQLiteDB.exec("DELETE FROM friends WHERE name = '" . friendName . "';")) { SendClientMessage(PREFIX . SECCOL . friendName . " {FFFFFF}wurde aus der Freundesliste entfernt!") if (onlineFriends.HasKey(friendName)) { textLabelID := onlineFriends.Delete(friendName) if (textLabelID != -1) { deleteTextLabel(textLabelID) } } } } return :?:/dall:: { Loop, 2048 { deleteTextLabel(A_Index - 1) } SendClientMessage(PREFIX . "Es wurden ALLE TextLabel gelöscht (auch serverseitige).") } return :?:/freunde:: :?:/friends:: { if (!SQLiteDB.Query("SELECT name FROM friends ORDER BY name ASC;", recordSet)) { SendClientMessage(PREFIX . "Es ist ein SQLite-Fehler aufgetreten! Sieh' bitte in der log.txt nach und informiere Martin im Forum.") FileAppend, % "SQLite Error: Query - Msg: '" . recordSet.ErrorMsg . "' - Code: " . recordSet.ErrorCode, log.txt return } if (recordSet.HasRows) { dialog := "Name`tID`tStatus" playerCount := 0 while (recordSet.Next(row) >= 1) { playerName := row[1] playerID := getPlayerIdByName(playerName, true) dialog .= "`n" . playerName . "`t" . (playerID == -1 ? "-" : playerID) . "`t" . (playerID == -1 ? "{FF0000}offline" : "{00FF00}online") if (playerID != -1) { playerCount++ } } Sleep, 100 ShowDialog(DIALOG_STYLE_TABLIST_HEADERS, "{FFFFFF}Freunde online: " . SECCOL . playerCount, dialog, "OK") } else { SendClientMessage(PREFIX . "Du hast noch keine Freunde eingespeichert! Benutze " . SECCOL . "/addfriend") } recordSet.Free() } return :?:/freundelabel:: :?:/friendslabel:: :?:/friendlabels:: :?:/friendslabels:: :?:/freundlabels:: :?:/freundelabels:: { if (showFriendLabels) { showFriendLabels := false for friendName, textLabelID in onlineFriends { if (textLabelID != -1) { deleteTextLabel(textLabelID) onlineFriends[friendName] := -1 } } SendClientMessage(PREFIX . "TextLabel über den Köpfen von Freunden {FF0000}deaktiviert{FFFFFF}.") } else { showFriendLabels := true for friendName, textLabelID in onlineFriends { if (textLabelID == -1) { playerID := getPlayerIdByName(friendName) if (playerID != -1) { textLabelID := createTextLabel("[Freund]", 0xFF0000FF, 0, 0, 0.5, 20.0, 1, playerID) onlineFriends[friendName] := textLabelID } } } SendClientMessage(PREFIX . "TextLabel über den Köpfen von Freunden {00FF00}aktiviert{FFFFFF}.") } } return FriendsTimer: { IfWinNotActive, GTA:SA:MP return if (!SQLiteDB.Query("SELECT name FROM friends ORDER BY name ASC;", recordSet)) { FileAppend, % "SQLite Error: Query - Msg: '" . recordSet.ErrorMsg . "' - Code: " . recordSet.ErrorCode, log.txt return } if (recordSet.HasRows) { while (recordSet.Next(row) >= 1) { friendName := row[1] playerID := getPlayerIdByName(friendName, true) if (ErrorLevel || playerID == -2) { if (debug) { SendClientMessage(PREFIX . "Fehler beim Auslesen der ID von " . friendName . " (" . playerID . "): " . ErrorLevel) } continue } if (playerID != -1) { if (!onlineFriends.HasKey(friendName)) { textLabelID := -1 if (showFriendLabels) { textLabelID := createTextLabel("[Freund]", 0xFF0000FF, 0, 0, 0.5, 20.0, 1, playerID) } onlineFriends[friendName] := textLabelID if (!firstFriendsTimerRun && friendMessages) { SendClientMessage(PREFIX . "Dein Freund " . SECCOL . friendName . " {FFFFFF}ist {00FF00}online {FFFFFF}gekommen.") } } } else { if (onlineFriends.HasKey(friendName)) { textLabelID := onlineFriends.Delete(friendName) if (textLabelID != -1) { deleteTextLabel(textLabelID) } if (!firstFriendsTimerRun && friendMessages) { SendClientMessage(PREFIX . "Dein Freund " . SECCOL . friendName . " {FFFFFF}ist {FF0000}offline {FFFFFF}gegangen.") } } } } } recordSet.Free() if (firstFriendsTimerRun) { firstFriendsTimerRun := false } } return ; ------------------ ; ; Namechange-Systeme ; ; ------------------ ; :?:/whois:: { newName := PlayerInput("Name: ") newNameFull := getFullName(newName) if (newNameFull != "") newName := newNameFull result := UrlDownloadToVar(mainAPI . "namechange.php?name=" . newName, true) if (result == "ERROR_CONNECTION") return try { data := JSON.Load(result) } catch { SendClientMessage(PREFIX . "{FF0000}Es ist ein unbekannter Fehler aufgetreten!") FormatTime, time, , dd.MM.yyyy HH:mm:ss FileAppend, [%time%] Beim Laden des alten Namen ist ein Fehler aufgetreten: %result%`n, log.txt return } if (data["error"] != "") { SendClientMessage(PREFIX . "{FF0000}" . data["error"]) return } if (data["namechanges"].Length() == 0) { SendClientMessage(PREFIX . "Es wurden keine Namensänderungen zu dem angegebenen Spieler gefunden!") return } for i, namechange in data["namechanges"] { if (InStr(newName, namechange["old_name"])) { newName := namechange["old_name"] break } else if (InStr(newName, namechange["new_name"])) { newName := namechange["new_name"] break } } SendClientMessage(PREFIX . "Namechange-Verlauf von " . SECCOL . newName . "{FFFFFF}:") for i, namechange in data["namechanges"] { SendClientMessage(PREFIX . SECCOL . namechange["old_name"] . " {FFFFFF}-> " . SECCOL . namechange["new_name"] . " {FFFFFF}(" . namechange["date"] . ")") } } return :?:/namechanges:: { if (showNamechanges) { SetTimer, NamechangeTimer, Off showNamechanges := false toRemove := [] for playerName, textLabelID in onlinePlayers { if (textLabelID != -1) { deleteTextLabel(textLabelID) toRemove.Push(playerName) } } for i, playerName in toRemove { onlinePlayers.Delete(playerName) } SendClientMessage(PREFIX . "Namechange-Informationen über den Köpfen der Spieler {FF0000}deaktiviert{FFFFFF}.") } else { GoSub, NamechangeTimer SetTimer, NamechangeTimer, 5000 showNamechanges := true SendClientMessage(PREFIX . "Namechange-Informationen über den Köpfen der Spieler {00FF00}aktiviert{FFFFFF}.") } } return NamechangeTimer: { IfWinNotActive, GTA:SA:MP return toRemove := [] for playerName, textLabelID in onlinePlayers { playerID := getPlayerIdByName(playerName, true) if (playerID == -1) { if (textLabelID != -1) { deleteTextLabel(textLabelID) } toRemove.Push(playerName) } } for i, playerName in toRemove { onlinePlayers.Delete(playerName) } players := getStreamedInPlayersInfo() for i, o in players { playerID := o.ID playerName := getPlayerNameByID(playerID) if (playerName != "") { if (!onlinePlayers.HasKey(playerName)) { result := UrlDownloadToVar(mainAPI . "namechange.php?name=" . playerName) if (result == "ERROR_CONNECTION") continue try { data := JSON.Load(result) } catch { FormatTime, time, , dd.MM.yyyy HH:mm:ss FileAppend, [%time%] Beim Laden der Namechange-History ist ein Fehler aufgetreten: %result%`n, log.txt continue } if (data["error"] != "") { continue } textLabelID := -1 if (data["namechanges"].Length() == 0) { onlinePlayers[playerName] := textLabelID continue } namechanges := "" nLines := 0 for i, namechange in data["namechanges"] { namechanges .= SECCOL . namechange["old_name"] . " {FFFFFF}-> " . SECCOL . namechange["new_name"] . "`n" nLines++ } textLabelID := -1 if (namechanges != "") { textLabelID := createTextLabel(namechanges, 0xFFFFFFFF, 0, 0, 0.65 + (nLines * 0.05), 20.0, 1, playerID) } onlinePlayers[playerName] := textLabelID } } } } return ; ----------------------- ; ; Ende Namechange-Systeme ; ; ----------------------- ; :?:/tankstelle:: :?:/tankstellen:: { coords := getCoordinates() result := URLDownloadToVar(mainAPI . "tankstellen.php?x=" . coords[1] . "&y=" . coords[2] . "&z=" . coords[3]) try { data := JSON.Load(result) } catch { SendClientMessage(PREFIX . "{FF0000}Es ist ein unbekannter Fehler aufgetreten!") FormatTime, time, , dd.MM.yyyy HH:mm:ss FileAppend, [%time%] Beim Laden der Tankstellen ist ein Fehler aufgetreten: %result%`n, log.txt return } if (data["error"]) { SendClientMessage(PREFIX . "{FF0000}" . data["error"]) } else { gasstations := data["gasstations"] dialog := "Tankstelle`tBesitzer`tTankpreis & Entfernung`tZuletzt geupdated" for i, entry in gasstations { name := entry["name"] owner := entry["owner"] price := entry["price"] x := entry["x"] y := entry["y"] z := entry["z"] distance := entry["distance"] lastupdated := entry["lastupdated"] updatedby := entry["updatedby"] if (price <= 20) { price := "{00FF00}" . price } else if (price >= 50) { price := "{FF0000}" . price } else { price := "{FFFF00}" . price } dialog .= "`n" . SECCOL . name . "`t" . owner . "`t" . price . "$ {FFFFFF}- " . FormatNumber(distance) . " m`t" . SECCOL . lastupdated . " {FFFFFF}(" . updatedby . ")" } showDialog(DIALOG_STYLE_TABLIST_HEADERS, "{FFFFFF}Übersicht der Tankstellen", dialog, "Schließen") } } return GasstationsTimer: { IfWinNotActive, GTA:SA:MP return if (!updateTextLabelData()) { return } coords := getCoordinates() data := [] data["name"] := getUsername() data["gasstations"] := [] for i, o in oTextLabelData { if (o.PLAYERID == 65535 && o.VEHICLEID == 65535) { if (RegExMatch(o.TEXT, "(.+)\n\nBesitzer: (.+)\nTeilhaber: (\S+)\nLiterpreis: (\d+)\$\nBenötigte Liter: (\d+)\nBezugspreis: (\d+)\$\n\nFahrzeug mit \/fill betanken", label_)) { gasstation := [] gasstation["owner"] := StrReplace(StrReplace(label_2, "]", "%5D"), "[", "%5B") gasstation["partner"] := StrReplace(StrReplace(label_3, "]", "%5D"), "[", "%5B") gasstation["description"] := StrReplace(StrReplace(StrReplace(label_1, "&", "%26"), "]", "%5D"), "[", "%5B") gasstation["price"] := label_4 gasstation["x"] := o.XPOS gasstation["y"] := o.YPOS gasstation["z"] := o.ZPOS data["gasstations"].Push(gasstation) } } } if (data["gasstations"].Length() > 0) { jsonData := JSON.Dump(data) result := URLDownloadToVar(mainAPI . "updatetankstelle.php?data=" . jsonData) Sleep, 30000 } } return ; -------------------- ; ; Store-Rob Funktionen ; ; -------------------- ; RobTimer: { if (storerobTime == 0) { SetTimer, RobTimer, Off } else if ((Mod(storerobTime, 30) == 0) || (storerobTime <= 15 && Mod(storerobTime, 5) == 0)) { SendClientMessage(PREFIX . "Der Store-Rob dauert noch " . SECCOL . storerobTime . " Sekunden{FFFFFF}!") } storerobTime-- } return robstoreLabel: { if (IsInChat()) return if (getPlayerInteriorId() == 0) { loadStores() showNearestStore() } else { SendChat("/robstore") } } return storesLabel: { if (IsInChat()) return sortByString := "" if (sortStoresBy == 1) { sortByString := "" } else if (sortStoresBy == 2) { sortByString := "type" } else if (sortStoresBy == 3) { sortByString := "distance" } else if (sortStoresBy == 4) { sortByString := "status" } else { SendClientMessage(PREFIX . "Ungültige Sortierung! Verwende Standardsortierung.") } coords := getCoordinates() result := URLDownloadToVar(robBaseURL . "api/loadallstores.php?x=" . coords[1] . "&y=" . coords[2] . "&z=" . coords[3] . "&sort=" . sortByString) allStores := JSON.Load(result) if (allStores["error"]) { SendClientMessage(PREFIX . "Beim Laden der Stores ist ein Fehler aufgetreten!") } else { dialog := "Typ`tGK`tOrt und Entfernung`tStatus`n" for i, entry in allStores["stores"] { store := entry["store"] gk := entry["gk"] x := entry["x"] y := entry["y"] z := entry["z"] status := entry["status"] distance := entry["distance"] dialog .= store . "`t" . gk . "`t" . calculateZone(x, y, z) . " (" . distance . "m)`t" . status if (i < allStores["stores"].Length()) dialog .= "`n" } showDialog(DIALOG_STYLE_TABLIST_HEADERS, "Übersicht der Stores", dialog, "Schließen") } } return ~LButton:: { Sleep, 200 if (isDialogOpen()) { caption := getDialogCaption() if (RegExMatch(caption, "Übersicht der Stores")) { line := getDialogLine(getDialogIndex()) if (RegExMatch(line, "(\S+)`t(\S+)`t(.+)`t(.+)", line_)) { type := line_1 gk := line_2 for index, entry in allStores["stores"] { if (entry["store"] == type && entry["gk"] == gk) { if (RegExMatch(type, "{(\S+)}(\S+)", type_)) { type := type_2 } x := entry["x"] y := entry["y"] z := entry["z"] playerCoords := getCoordinates() distance := Round(getDistanceToPoint(x, y, z, playerCoords[1], playerCoords[2], playerCoords[3])) setCheckpoint(x, y, z, 3) SendClientMessage(PREFIX . "Store " . SECCOL . gk . " {FFFFFF}(" . type . ") in " . SECCOL . calculateZone(x, y, z) . " {FFFFFF}(" . SECCOL . distance . "m {FFFFFF}entfernt)") } } } } else if (RegExMatch(caption, "Verfügbare Aufträge")) { line := getDialogLine(getDialogIndex()) if (RegExMatch(line, "(\d+)`t(.+) \((\S+)\)`t(.+)`t(.+)", line_)) { SendChat("/delivery " . line_1) } } else if (RegExMatch(caption, "Übersicht der Tankstellen")) { line := getDialogLine(getDialogIndex()) if (RegExMatch(line, "{\S+}(.+)`t(.+)`t{\S+}(\d+)\$ {\S+}- \S+ m`t{\S+}.+ {\S+}\(\S+\)", line_)) { name := line_1 owner := line_2 for index, entry in gasstations { if (entry["name"] == name && entry["owner"] == owner) { x := entry["x"] y := entry["y"] z := entry["z"] playerCoords := getCoordinates() distance := Round(getDistanceToPoint(x, y, z, playerCoords[1], playerCoords[2], playerCoords[3])) setCheckpoint(x, y, z, 3) SendClientMessage(PREFIX . "Tankstelle " . SECCOL . name . " {FFFFFF}(" . SECCOL . entry["price"] . "${FFFFFF}) in " . SECCOL . FormatNumber(distance) . " m {FFFFFF}Entfernung.") } } } } } } return :?:/showstores:: { loadStores() showStores() } return loadStores() { coords := getCoordinates() result := URLDownloadToVar(robBaseURL . "api/loadstores.php?x=" . coords[1] . "&y=" . coords[2] . "&z=" . coords[3]) try { stores := JSON.Load(result) } catch { SendClientMessage(PREFIX . "{FF0000}Es ist ein unbekannter Fehler aufgetreten!") FormatTime, time, , dd.MM.yyyy HH:mm:ss FileAppend, [%time%] Beim Laden des showGK ist ein Fehler aufgetreten: %result%`n, log.txt return } updated := true } showStores() { if (!updated) { SendClientMessage(PREFIX . "Stores müssen erst geladen werden!") } else { if (stores["error"]) { SendClientMessage(PREFIX . "Beim Laden der Stores ist ein Fehler aufgetreten!") } else { storesCount := stores["stores"].Length() if (storesCount == 0) { SendClientMessage(PREFIX . "Es sind keine Stores zum Ausrauben vorhanden!") } else { page := 1 pages := Ceil(storesCount / 10) if (storesCount > 10) { pageInput := PlayerInput("Seite (Standard 1, max. " . pages . "): ") if (pageInput != "") { if pageInput is not number { SendClientMessage(PREFIX . "Bitte eine Zahl eingeben!") return } if (pageInput > pages) { SendClientMessage(PREFIX . "Maximale Seitenzahl: " . SECCOL . pages) return } else { page := pageInput } } } for i, entry in stores["stores"] { x := entry["x"] y := entry["y"] z := entry["z"] distance := entry["distance"] if (i > page * 10 - 10 && i <= page * 10) { SendClientMessage(PREFIX . "ID: " . SECCOL . i . " {FFFFFF}- In: " . SECCOL . calculateZone(x, y, z) . ", " . calculateCity(x, y, z) . " {FFFFFF}- " . SECCOL . distance . "m {FFFFFF}entfernt") } } } } } } showNearestStore() { if (!updated) { SendClientMessage(PREFIX . "Stores müssen erst geladen werden!") return } if (stores["stores"].Length() != 0) { store := stores["stores"][1] type := store["store"] gk := store["gk"] x := store["x"] y := store["y"] z := store["z"] distance := store["distance"] setCheckpoint(x, y, z, 3) SendClientMessage(PREFIX . "Store " . SECCOL . gk . " {FFFFFF}(" . type . ") in " . SECCOL . calculateZone(x, y, z) . " {FFFFFF}(" . SECCOL . distance . "m {FFFFFF}entfernt) verfügbar.") } else { SendClientMessage(PREFIX . "Keine freien Stores zum Ausrauben verfügbar!") } } ; ------------------------- ; ; Ende Store-Rob Funktionen ; ; ------------------------- ; pauseLabel: Suspend, permit Suspend if (A_IsSuspended) { SendClientMessage(PREFIX . "Keybinder & Timer {FF0000}pausiert{FFFFFF}.") SetTimer, ChatTimer, Off SetTimer, TankTimer, Off SetTimer, FillCustoms, Off SetTimer, LottoTimer, Off SetTimer, TempoTimer, Off SetTimer, KillTimer, Off SetTimer, SearchEnemyTimer, Off SetTimer, FriendsTimer, Off SetTimer, GasstationsTimer, Off } else { SendClientMessage(PREFIX . "Keybinder & Timer {00FF00}aktiviert{FFFFFF}.") SetTimer, ChatTimer, 100 SetTimer, TankTimer, 100 SetTimer, FillCustoms, 500 SetTimer, LottoTimer, 1000 SetTimer, TempoTimer, 100 SetTimer, KillTimer, 100 SetTimer, SearchEnemyTimer, 2500 SetTimer, FriendsTimer, 1000 SetTimer, GasstationsTimer, 500 } return
Optional Paste Settings
Category:
None
Cryptocurrency
Cybersecurity
Fixit
Food
Gaming
Haiku
Help
History
Housing
Jokes
Legal
Money
Movies
Music
Pets
Photo
Science
Software
Source Code
Spirit
Sports
Travel
TV
Writing
Tags:
Syntax Highlighting:
None
Bash
C
C#
C++
CSS
HTML
JSON
Java
JavaScript
Lua
Markdown (PRO members only)
Objective C
PHP
Perl
Python
Ruby
Swift
4CS
6502 ACME Cross Assembler
6502 Kick Assembler
6502 TASM/64TASS
ABAP
AIMMS
ALGOL 68
APT Sources
ARM
ASM (NASM)
ASP
ActionScript
ActionScript 3
Ada
Apache Log
AppleScript
Arduino
Asymptote
AutoIt
Autohotkey
Avisynth
Awk
BASCOM AVR
BNF
BOO
Bash
Basic4GL
Batch
BibTeX
Blitz Basic
Blitz3D
BlitzMax
BrainFuck
C
C (WinAPI)
C Intermediate Language
C for Macs
C#
C++
C++ (WinAPI)
C++ (with Qt extensions)
C: Loadrunner
CAD DCL
CAD Lisp
CFDG
CMake
COBOL
CSS
Ceylon
ChaiScript
Chapel
Clojure
Clone C
Clone C++
CoffeeScript
ColdFusion
Cuesheet
D
DCL
DCPU-16
DCS
DIV
DOT
Dart
Delphi
Delphi Prism (Oxygene)
Diff
E
ECMAScript
EPC
Easytrieve
Eiffel
Email
Erlang
Euphoria
F#
FO Language
Falcon
Filemaker
Formula One
Fortran
FreeBasic
FreeSWITCH
GAMBAS
GDB
GDScript
Game Maker
Genero
Genie
GetText
Go
Godot GLSL
Groovy
GwBasic
HQ9 Plus
HTML
HTML 5
Haskell
Haxe
HicEst
IDL
INI file
INTERCAL
IO
ISPF Panel Definition
Icon
Inno Script
J
JCL
JSON
Java
Java 5
JavaScript
Julia
KSP (Kontakt Script)
KiXtart
Kotlin
LDIF
LLVM
LOL Code
LScript
Latex
Liberty BASIC
Linden Scripting
Lisp
Loco Basic
Logtalk
Lotus Formulas
Lotus Script
Lua
M68000 Assembler
MIX Assembler
MK-61/52
MPASM
MXML
MagikSF
Make
MapBasic
Markdown (PRO members only)
MatLab
Mercury
MetaPost
Modula 2
Modula 3
Motorola 68000 HiSoft Dev
MySQL
Nagios
NetRexx
Nginx
Nim
NullSoft Installer
OCaml
OCaml Brief
Oberon 2
Objeck Programming Langua
Objective C
Octave
Open Object Rexx
OpenBSD PACKET FILTER
OpenGL Shading
Openoffice BASIC
Oracle 11
Oracle 8
Oz
PARI/GP
PCRE
PHP
PHP Brief
PL/I
PL/SQL
POV-Ray
ParaSail
Pascal
Pawn
Per
Perl
Perl 6
Phix
Pic 16
Pike
Pixel Bender
PostScript
PostgreSQL
PowerBuilder
PowerShell
ProFTPd
Progress
Prolog
Properties
ProvideX
Puppet
PureBasic
PyCon
Python
Python for S60
QBasic
QML
R
RBScript
REBOL
REG
RPM Spec
Racket
Rails
Rexx
Robots
Roff Manpage
Ruby
Ruby Gnuplot
Rust
SAS
SCL
SPARK
SPARQL
SQF
SQL
SSH Config
Scala
Scheme
Scilab
SdlBasic
Smalltalk
Smarty
StandardML
StoneScript
SuperCollider
Swift
SystemVerilog
T-SQL
TCL
TeXgraph
Tera Term
TypeScript
TypoScript
UPC
Unicon
UnrealScript
Urbi
VB.NET
VBScript
VHDL
VIM
Vala
Vedit
VeriLog
Visual Pro Log
VisualBasic
VisualFoxPro
WHOIS
WhiteSpace
Winbatch
XBasic
XML
XPP
Xojo
Xorg Config
YAML
YARA
Z80 Assembler
ZXBasic
autoconf
jQuery
mIRC
newLISP
q/kdb+
thinBasic
Paste Expiration:
Never
Burn after read
10 Minutes
1 Hour
1 Day
1 Week
2 Weeks
1 Month
6 Months
1 Year
Paste Exposure:
Public
Unlisted
Private
Folder:
(members only)
Password
NEW
Enabled
Disabled
Burn after read
NEW
Paste Name / Title:
Create New Paste
Hello
Guest
Sign Up
or
Login
Sign in with Facebook
Sign in with Twitter
Sign in with Google
You are currently not logged in, this means you can not edit or delete anything you paste.
Sign Up
or
Login
Public Pastes
Swapzone Glitch ⭐Working⭐
JavaScript | 10 sec ago | 0.32 KB
✅ Make $1500 in 20 minutes
JavaScript | 21 sec ago | 0.32 KB
⭐⭐⭐if you really want more bring up the fire⭐...
Java | 29 sec ago | 0.09 KB
⭐⭐⭐Crypto Accounts⭐⭐⭐
Java | 40 sec ago | 0.09 KB
ChangeNOW Bug (Get more on BTC swaps)
JavaScript | 47 sec ago | 0.32 KB
⭐⭐⭐MAKE $900 INSTANTLY⭐⭐⭐
Java | 51 sec ago | 0.06 KB
✅ Exploit 500$ in 15 Minutes
JavaScript | 59 sec ago | 0.32 KB
⭐⭐⭐Exchange Exploit⭐⭐⭐
Java | 1 min ago | 0.06 KB
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the
Cookies Policy
.
OK, I Understand
Not a member of Pastebin yet?
Sign Up
, it unlocks many cool features!