Advertisement
Guest User

EasyBinder 1.4.4 | DM | SAMPCAC | by Marschl

a guest
Dec 27th, 2023
309
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Autohotkey 270.84 KB | Source Code | 0 0
  1. ; <COMPILER: v1.1.37.01>
  2. #SingleInstance, force
  3. #UseHook
  4. #NoEnv
  5. #Persistent
  6. #NoTrayIcon
  7. #MaxHotkeysPerInterval, 99999999999999
  8. Process, Priority, , High
  9. if(!A_IsAdmin) {
  10. Run *RunAs "%A_ScriptFullPath%",, UseErrorLevel
  11. if(ErrorLevel) {
  12. MsgBox, 21, Fehler!, Der EasyBinder muss als Administrator gestartet werden`, damit er komplett funktionsfähig ist!
  13. IfMsgBox, Retry
  14. Reload
  15. else
  16. ExitApp
  17. }
  18. return
  19. }
  20. global projectname :=       "EasyBinder"
  21. global version :=           "1.4.4"
  22. global baseURL :=           "https://easybinder.marschl.io/"
  23. IfExist update.bat
  24. {
  25. FileDelete update.bat
  26. }
  27. UrlDownloadToFile %baseURL%version/version.txt, newversion.txt
  28. FileRead, NewestVersion, newversion.txt
  29. FileDelete newversion.txt
  30. if(NewestVersion > version)
  31. {
  32. MsgBox, 0, Update - %projectname%, Eine neue Version ( %NewestVersion% ) ist verfügbar! `nDer Keybinder aktualisiert sich von selbst
  33. IfMsgBox, Ok
  34. {
  35. SplashTextOn, 200, 50, %projectname% , %projectname% wird geupdated! Bitte warten...
  36. UrlDownloadToFile %baseURL%version/%NewestVersion%/%projectname%.exe, %A_ScriptName%.new
  37. UpdateBat=
  38.         (
  39.                             Ping 127.0.0.1
  40.                             Del "%A_ScriptName%"
  41.                             Rename "%A_ScriptName%.new" "%A_ScriptName%"
  42.                             cd "%A_ScriptFullPath%"
  43.                             "%A_ScriptName%"
  44. )
  45. FileAppend, %UpdateBat%, update.bat
  46. Run, update.bat,, hide
  47. ExitApp
  48. IfExist update.bat
  49. {
  50. FileDelete update.bat
  51. }
  52. SplashTextOff
  53. }
  54. }
  55. IfNotExist, dll
  56. {
  57. FileCreateDir, dll
  58. }
  59. IfNotExist, dll/sampcac-loader.dll
  60. {
  61. URLDownloadToFile, %baseURL%sources/dll/sampcac-loader.dll, dll/sampcac-loader.dll
  62. }
  63. IfNotExist, dll/sampcac-loader.exe
  64. {
  65. URLDownloadToFile, %baseURL%sources/dll/sampcac-loader.exe, dll/sampcac-loader.exe
  66. }
  67. IfNotExist, src
  68. {
  69. FileCreateDir, src
  70. }
  71. IfNotExist, src/images
  72. {
  73. FileCreateDir, src/images
  74. }
  75. IfNotExist, src/sounds
  76. {
  77. FileCreateDir, src/sounds
  78. }
  79. IfNotExist, src/images/logo.png
  80. {
  81. URLDownloadToFile, %baseURL%sources/images/logo.png, src/images/logo.png
  82. }
  83. IfNotExist, src/images/favicon.ico
  84. {
  85. URLDownloadToFile, %baseURL%sources/images/favicon.ico, src/images/favicon.ico
  86. }
  87. IfNotExist, src/sounds/damage.mp3
  88. {
  89. URLDownloadToFile, %baseURL%sources/sounds/damage.mp3, src/sounds/damage.mp3
  90. }
  91. IfNotExist, ini
  92. {
  93. FileCreateDir, ini
  94. }
  95. IfNotExist, ini/stats
  96. {
  97. FileCreateDir, ini/stats
  98. }
  99. global sampcac_mode := false
  100. global sampdll_base_address := 0
  101. WinGetTitle, gta_title, ahk_exe gta_sa.exe
  102. global gta_title
  103. WinGet, gta_process, ProcessName, %gta_title%
  104. WinGet, gta_path, ProcessPath, %gta_title%
  105. WinGet, gta_pid, PID, %gta_title%
  106. gta_folder := StrReplace(gta_path, gta_process, "", "Off")
  107. Loop, Files, %gta_folder%*, F
  108. {
  109. if (RegExMatch(A_LoopFileName, "sampcac") && A_LoopFileExt == "asi") {
  110. init_sampcac()
  111. }
  112. }
  113. init_sampcac() {
  114. global
  115. sampcac_mode := true
  116. Run *RunAs %A_ScriptDir%/dll/sampcac-loader.exe
  117. sleep 5000
  118. FileReadLine, sampdll_base_address, %gta_folder%\samp.dat, 1
  119. }
  120. global ERROR_OK                     := 0
  121. global ERROR_PROCESS_NOT_FOUND      := 1
  122. global ERROR_OPEN_PROCESS           := 2
  123. global ERROR_INVALID_HANDLE         := 3
  124. global ERROR_MODULE_NOT_FOUND       := 4
  125. global ERROR_ENUM_PROCESS_MODULES   := 5
  126. global ERROR_ZONE_NOT_FOUND         := 6
  127. global ERROR_CITY_NOT_FOUND         := 7
  128. global ERROR_READ_MEMORY            := 8
  129. global ERROR_WRITE_MEMORY           := 9
  130. global ERROR_ALLOC_MEMORY           := 10
  131. global ERROR_FREE_MEMORY            := 11
  132. global ERROR_WAIT_FOR_OBJECT        := 12
  133. global ERROR_CREATE_THREAD          := 13
  134. global ADDR_ZONECODE                := 0xA49AD4
  135. global ADDR_POSITION_X              := 0xB6F2E4
  136. global ADDR_POSITION_Y              := 0xB6F2E8
  137. global ADDR_POSITION_Z              := 0xB6F2EC
  138. global ADDR_CPED_PTR                := 0xB6F5F0
  139. global ADDR_CPED_HPOFF              := 0x540
  140. global ADDR_CPED_ARMOROFF           := 0x548
  141. global ADDR_CPED_MONEY              := 0x0B7CE54
  142. global ADDR_CPED_INTID              := 0xA4ACE8
  143. global ADDR_CPED_SKINIDOFF          := 0x22
  144. global ADDR_VEHICLE_PTR             := 0xBA18FC
  145. global ADDR_VEHICLE_HPOFF           := 0x4C0
  146. global ADDR_VEHICLE_DOORSTATE       := 0x4F8
  147. global ADDR_VEHICLE_ENGINESTATE     := 0x428
  148. global ADDR_VEHICLE_LIGHTSTATE      := 0x584
  149. global ADDR_VEHICLE_MODEL           := 0x22
  150. global ADDR_VEHICLE_TYPE            := 0x590
  151. global ADDR_VEHICLE_DRIVER          := 0x460
  152. global ADDR_VEHICLE_X               := 0x44
  153. global ADDR_VEHICLE_Y               := 0x48
  154. global ADDR_VEHICLE_Z               := 0x4C
  155. global oAirplaneModels := [417, 425, 447, 460, 469, 476, 487, 488, 497, 511, 512, 513, 519, 520, 548, 553, 563, 577, 592, 593]
  156. global oBikeModels := [481,509,510]
  157. global ovehicleNames := ["Landstalker","Bravura","Buffalo","Linerunner","Perrenial","Sentinel","Dumper","Firetruck","Trashmaster","Stretch","Manana","Infernus","Voodoo","Pony","Mule","Cheetah","Ambulance","Leviathan","Moonbeam","Esperanto","Taxi","Washington","Bobcat","Whoopee","BFInjection","Hunter","Premier","Enforcer","Securicar","Banshee","Predator","Bus","Rhino","Barracks","Hotknife","Trailer","Previon","Coach","Cabbie","Stallion","Rumpo","RCBandit","Romero","Packer","Monster","Admiral","Squalo","Seasparrow","Pizzaboy","Tram","Trailer","Turismo","Speeder","Reefer","Tropic","Flatbed","Yankee","Caddy","Solair","Berkley'sRCVan","Skimmer","PCJ-600","Faggio","Freeway","RCBaron","RCRaider","Glendale","Oceanic","Sanchez","Sparrow","Patriot","Quad","Coastguard","Dinghy","Hermes","Sabre","Rustler","ZR-350","Walton","Regina","Comet","BMX","Burrito","Camper","Marquis","Baggage","Dozer","Maverick","NewsChopper","Rancher","FBIRancher","Virgo","Greenwood","Jetmax","Hotring","Sandking","BlistaCompact","PoliceMaverick","Boxvillde","Benson","Mesa","RCGoblin","HotringRacerA","HotringRacerB","BloodringBanger","Rancher","SuperGT","Elegant","Journey","Bike","MountainBike","Beagle","Cropduster","Stunt","Tanker","Roadtrain","Nebula","Majestic","Buccaneer","Shamal","hydra","FCR-900","NRG-500","HPV1000","CementTruck","TowTruck","Fortune","Cadrona","FBITruck","Willard","Forklift","Tractor","Combine","Feltzer","Remington","Slamvan","Blade","Freight","Streak","Vortex","Vincent","Bullet","Clover","Sadler","Firetruck","Hustler","Intruder","Primo","Cargobob","Tampa","Sunrise","Merit","Utility","Nevada","Yosemite","Windsor","Monster","Monster","Uranus","Jester","Sultan","Stratum","Elegy","Raindance","RCTiger","Flash","Tahoma","Savanna","Bandito","FreightFlat","StreakCarriage","Kart","Mower","Dune","Sweeper","Broadway","Tornado","AT-400","DFT-30","Huntley","Stafford","BF-400","NewsVan","Tug","Trailer","Emperor","Wayfarer","Euros","Hotdog","Club","FreightBox","Trailer","Andromada","Dodo","RCCam","Launch","PoliceCar","PoliceCar","PoliceCar","PoliceRanger","Picador","S.W.A.T","Alpha","Phoenix","GlendaleShit","SadlerShit","Luggage","Luggage","Stairs","Boxville","Tiller","UtilityTrailer"]
  158. global oweaponNames := ["Fist","Brass Knuckles","Golf Club","Nightstick","Knife","Baseball Bat","Shovel","Pool Cue","Katana","Chainsaw","Purple " "Dil" "do" "","" "Dil" "do" "","Vibrator","Silver Vibrator","Flowers","Cane","Grenade","Tear Gas","Molotov Cocktail", "", "", "", "9mm","Silenced 9mm","Desert Eagle","Shotgun","Sawnoff Shotgun","Combat Shotgun","Micro SMG/" "U" "zi" "","MP5","AK-47","M4","Tec-9","Country Rifle","Sniper Rifle","RPG","HS Rocket","Flamethrower","Minigun","Satchel Charge","Detonator","Spraycan","Fire Extinguisher","Camera","Night Vis Goggles","Thermal Goggles","Parachute"]
  159. global oradiostationNames := ["Playback FM", "K Rose", "K-DST", "Bounce FM", "SF-UR", "Radio Los Santos", "Radio X", "CSR 103.9", "K-JAH West", "Master Sounds 98.3", "WCTR Talk Radio", "User Track Player", "Radio Off"]
  160. global oweatherNames := ["EXTRASUNNY_LA", "SUNNY_LA", "EXTRASUNNY_SMOG_LA", "SUNNY_SMOG_LA", "CLOUDY_LA", "SUNNY_SF", "EXTRASUNNY_SF", "CLOUDY_SF", "RAINY_SF", "FOGGY_SF", "SUNNY_VEGAS", "EXTRASUNNY_VEGAS", "CLOUDY_VEGAS", "EXTRASUNNY_COUNTRYSIDE", "SUNNY_COUNTRYSIDE", "CLOUDY_COUNTRYSIDE", "RAINY_COUNTRYSIDE", "EXTRASUNNY_DESERT", "SUNNY_DESERT", "SANDSTORM_DESERT", "UNDERWATER", "EXTRACOLOURS_1", "EXTRACOLOURS_2"]
  161. global ADDR_SAMP_INCHAT_PTR             := 0x21a10c
  162. global ADDR_SAMP_INCHAT_PTR_OFF         := 0x55
  163. global ADDR_SAMP_USERNAME               := 0x219A6F
  164. global FUNC_SAMP_SENDCMD                := 0x65c60
  165. global FUNC_SAMP_SENDSAY                := 0x57f0
  166. global FUNC_SAMP_ADDTOCHATWND           := 0x64520
  167. global ADDR_SAMP_CHATMSG_PTR            := 0x21a0e4
  168. global FUNC_SAMP_SHOWGAMETEXT           := 0x9c2c0
  169. global FUNC_SAMP_PLAYAUDIOSTR           := 0x62da0
  170. global FUNC_SAMP_STOPAUDIOSTR           := 0x629a0
  171. global DIALOG_STYLE_MSGBOX          := 0
  172. global DIALOG_STYLE_INPUT           := 1
  173. global DIALOG_STYLE_LIST            := 2
  174. global DIALOG_STYLE_PASSWORD        := 3
  175. global DIALOG_STYLE_TABLIST         := 4
  176. global DIALOG_STYLE_TABLIST_HEADERS := 5
  177. global SAMP_DIALOG_STRUCT_PTR                   := 0x21A0B8
  178. global SAMP_DIALOG_PTR1_OFFSET              := 0x1C
  179. global SAMP_DIALOG_LINES_OFFSET             := 0x44C
  180. global SAMP_DIALOG_INDEX_OFFSET             := 0x443
  181. global SAMP_DIALOG_BUTTON_HOVERING_OFFSET   := 0x465
  182. global SAMP_DIALOG_BUTTON_CLICKED_OFFSET    := 0x466
  183. global SAMP_DIALOG_PTR2_OFFSET              := 0x20
  184. global SAMP_DIALOG_LINECOUNT_OFFSET         := 0x150
  185. global SAMP_DIALOG_OPEN_OFFSET              := 0x28
  186. global SAMP_DIALOG_STYLE_OFFSET             := 0x2C
  187. global SAMP_DIALOG_ID_OFFSET                := 0x30
  188. global SAMP_DIALOG_TEXT_PTR_OFFSET          := 0x34
  189. global SAMP_DIALOG_CAPTION_OFFSET           := 0x40
  190. global FUNC_SAMP_SHOWDIALOG                 := 0x6B9C0
  191. global FUNC_SAMP_CLOSEDIALOG                := 0x6C040
  192. global FUNC_UPDATESCOREBOARD                := 0x8A10
  193. global SAMP_INFO_OFFSET                     := 0x21A0F8
  194. global ADDR_SAMP_CRASHREPORT                := 0x5CF2C
  195. global SAMP_PPOOLS_OFFSET                   := 0x3CD
  196. global SAMP_PPOOL_PLAYER_OFFSET             := 0x18
  197. global SAMP_SLOCALPLAYERID_OFFSET           := 0x4
  198. global SAMP_ISTRLEN_LOCALPLAYERNAME_OFFSET  := 0x1A
  199. global SAMP_SZLOCALPLAYERNAME_OFFSET        := 0xA
  200. global SAMP_PSZLOCALPLAYERNAME_OFFSET       := 0xA
  201. global SAMP_PREMOTEPLAYER_OFFSET            := 0x2E
  202. global SAMP_ISTRLENNAME___OFFSET            := 0x1C
  203. global SAMP_SZPLAYERNAME_OFFSET             := 0xC
  204. global SAMP_PSZPLAYERNAME_OFFSET            := 0xC
  205. global SAMP_ILOCALPLAYERPING_OFFSET         := 0x26
  206. global SAMP_ILOCALPLAYERSCORE_OFFSET        := 0x2A
  207. global SAMP_IPING_OFFSET                    := 0x28
  208. global SAMP_ISCORE_OFFSET                   := 0x24
  209. global SAMP_ISNPC_OFFSET                    := 0x4
  210. global SAMP_PLAYER_MAX                      := 1004
  211. global CheckpointCheck                      := 0xC7DEEA
  212. global rmaddrs                              := [0xC7DEC8, 0xC7DECC, 0xC7DED0]
  213. global SIZE_SAMP_CHATMSG := 0xFC
  214. global hGTA := 0x0
  215. global dwGTAPID := 0x0
  216. global dwSAMP := 0x0
  217. global pMemory := 0x0
  218. global pParam1 := 0x0
  219. global pParam2 := 0x0
  220. global pParam3 := 0x0
  221. global pParam4                         := 0x0
  222. global pParam5                         := 0x0
  223. global pInjectFunc := 0x0
  224. global nZone := 1
  225. global nCity := 1
  226. global bInitZaC := 0
  227. global iRefreshScoreboard := 0
  228. global oScoreboardData := ""
  229. global iRefreshHandles := 0
  230. global iUpdateTick := 2500
  231. IsSAMPAvailable() {
  232. if(!checkHandles())
  233. return false
  234. dwChatInfo := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  235. if(dwChatInfo == 0 || dwChatInfo == "ERROR")
  236. {
  237. return false
  238. }
  239. else
  240. {
  241. return true
  242. }
  243. }
  244. isInChat() {
  245. if(!checkHandles())
  246. return -1
  247. dwPtr := dwSAMP + ADDR_SAMP_INCHAT_PTR
  248. dwAddress := readDWORD(hGTA, dwPtr) + ADDR_SAMP_INCHAT_PTR_OFF
  249. if(ErrorLevel) {
  250. ErrorLevel := ERROR_READ_MEMORY
  251. return -1
  252. }
  253. dwInChat := readDWORD(hGTA, dwAddress)
  254. if(ErrorLevel) {
  255. ErrorLevel := ERROR_READ_MEMORY
  256. return -1
  257. }
  258. ErrorLevel := ERROR_OK
  259. if(dwInChat > 0) {
  260. return true
  261. } else {
  262. return false
  263. }
  264. }
  265. getUsername() {
  266. if(!checkHandles())
  267. return ""
  268. dwAddress := dwSAMP + ADDR_SAMP_USERNAME
  269. sUsername := readString(hGTA, dwAddress, 25)
  270. if(ErrorLevel) {
  271. ErrorLevel := ERROR_READ_MEMORY
  272. return ""
  273. }
  274. ErrorLevel := ERROR_OK
  275. return sUsername
  276. }
  277. getId() {
  278. s:=getUsername()
  279. return getPlayerIdByName(s)
  280. }
  281. SendChat(wText) {
  282. wText := "" wText
  283. if(!checkHandles())
  284. return false
  285. dwFunc:=0
  286. if(SubStr(wText, 1, 1) == "/") {
  287. dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  288. } else {
  289. dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  290. }
  291. callWithParams(hGTA, dwFunc, [["s", wText]], false)
  292. ErrorLevel := ERROR_OK
  293. return true
  294. }
  295. addChatMessage(wText) {
  296. wText := "" wText
  297. if(!checkHandles())
  298. return false
  299. dwFunc := dwSAMP + FUNC_SAMP_ADDTOCHATWND
  300. dwChatInfo := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  301. if(ErrorLevel) {
  302. ErrorLevel := ERROR_READ_MEMORY
  303. return false
  304. }
  305. callWithParams(hGTA, dwFunc, [["p", dwChatInfo], ["s", wText]], true)
  306. ErrorLevel := ERROR_OK
  307. return true
  308. }
  309. showGameText(wText, dwTime, dwSize) {
  310. wText := "" wText
  311. dwTime += 0
  312. dwTime := Floor(dwTime)
  313. dwSize += 0
  314. dwSize := Floor(dwSize)
  315. if(!checkHandles())
  316. return false
  317. dwFunc := dwSAMP + FUNC_SAMP_SHOWGAMETEXT
  318. callWithParams(hGTA, dwFunc, [["s", wText], ["i", dwTime], ["i", dwSize]], false)
  319. ErrorLevel := ERROR_OK
  320. return true
  321. }
  322. playAudioStream(wUrl) {
  323. wUrl := "" wUrl
  324. if(!checkHandles())
  325. return false
  326. dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
  327. patchRadio()
  328. callWithParams(hGTA, dwFunc, [["s", wUrl], ["i", 0], ["i", 0], ["i", 0], ["i", 0], ["i", 0]], false)
  329. unPatchRadio()
  330. ErrorLevel := ERROR_OK
  331. return true
  332. }
  333. stopAudioStream() {
  334. if(!checkHandles())
  335. return false
  336. dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
  337. patchRadio()
  338. callWithParams(hGTA, dwFunc, [["i", 1]], false)
  339. unPatchRadio()
  340. ErrorLevel := ERROR_OK
  341. return true
  342. }
  343. patchRadio()
  344. {
  345. if(!checkHandles())
  346. return false
  347. VarSetCapacity(nop, 4, 0)
  348. NumPut(0x90909090,nop,0,"UInt")
  349. dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
  350. writeRaw(hGTA, dwFunc, &nop, 4)
  351. writeRaw(hGTA, dwFunc+4, &nop, 1)
  352. dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
  353. writeRaw(hGTA, dwFunc, &nop, 4)
  354. writeRaw(hGTA, dwFunc+4, &nop, 1)
  355. return true
  356. }
  357. unPatchRadio()
  358. {
  359. if(!checkHandles())
  360. return false
  361. VarSetCapacity(old, 4, 0)
  362. dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
  363. NumPut(0x74003980,old,0,"UInt")
  364. writeRaw(hGTA, dwFunc, &old, 4)
  365. NumPut(0x39,old,0,"UChar")
  366. writeRaw(hGTA, dwFunc+4, &old, 1)
  367. dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
  368. NumPut(0x74003980,old,0,"UInt")
  369. writeRaw(hGTA, dwFunc, &old, 4)
  370. NumPut(0x09,old,0,"UChar")
  371. writeRaw(hGTA, dwFunc+4, &old, 1)
  372. return true
  373. }
  374. blockChatInput() {
  375. if(!checkHandles())
  376. return false
  377. VarSetCapacity(nop, 2, 0)
  378. dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  379. NumPut(0x04C2,nop,0,"Short")
  380. writeRaw(hGTA, dwFunc, &nop, 2)
  381. dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  382. writeRaw(hGTA, dwFunc, &nop, 2)
  383. return true
  384. }
  385. unBlockChatInput() {
  386. if(!checkHandles())
  387. return false
  388. VarSetCapacity(nop, 2, 0)
  389. dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  390. NumPut(0xA164,nop,0,"Short")
  391. writeRaw(hGTA, dwFunc, &nop, 2)
  392. dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  393. writeRaw(hGTA, dwFunc, &nop, 2)
  394. return true
  395. }
  396. getServerName() {
  397. if(!checkHandles())
  398. return -1
  399. dwAdress := readMem(hGTA, dwSAMP + SAMP_INFO_OFFSET, 4, "int")
  400. if(ErrorLevel) {
  401. ErrorLevel := ERROR_READ_MEMORY
  402. return -1
  403. }
  404. if(!dwAdress)
  405. return -1
  406. ServerName := readString(hGTA, dwAdress + 0x121, 200)
  407. if(ErrorLevel) {
  408. ErrorLevel := ERROR_READ_MEMORY
  409. return -1
  410. }
  411. ErrorLevel := ERROR_OK
  412. return ServerName
  413. }
  414. getServerIP() {
  415. if(!checkHandles())
  416. return -1
  417. dwAdress := readMem(hGTA, dwSAMP + SAMP_INFO_OFFSET, 4, "int")
  418. if(ErrorLevel) {
  419. ErrorLevel := ERROR_READ_MEMORY
  420. return -1
  421. }
  422. if(!dwAdress)
  423. return -1
  424. ServerIP := readString(hGTA, dwAdress + 0x20, 100)
  425. if(ErrorLevel) {
  426. ErrorLevel := ERROR_READ_MEMORY
  427. return -1
  428. }
  429. ErrorLevel := ERROR_OK
  430. return ServerIP
  431. }
  432. getServerPort() {
  433. if(!checkHandles())
  434. return -1
  435. dwAdress := readMem(hGTA, dwSAMP + SAMP_INFO_OFFSET, 4, "int")
  436. if(ErrorLevel) {
  437. ErrorLevel := ERROR_READ_MEMORY
  438. return -1
  439. }
  440. if(!dwAdress)
  441. return -1
  442. ServerPort := readMem(hGTA, dwAdress + 0x225, 4, "int")
  443. if(ErrorLevel) {
  444. ErrorLevel := ERROR_READ_MEMORY
  445. return -1
  446. }
  447. ErrorLevel := ERROR_OK
  448. return ServerPort
  449. }
  450. getWeatherID() {
  451. if(!checkHandles())
  452. return -1
  453. dwGTA := getModuleBaseAddress("gta_sa.exe", hGTA)
  454. WeatherID := readMem(hGTA, dwGTA + 0xC81320, 2, "byte")
  455. if(ErrorLevel) {
  456. ErrorLevel := ERROR_READ_MEMORY
  457. return -1
  458. }
  459. ErrorLevel := ERROR_OK
  460. return WeatherID
  461. }
  462. getWeatherName() {
  463. if(isPlayerInAnyVehicle() == 0)
  464. return -1
  465. if(id >= 0 && id < 23)
  466. {
  467. return oweatherNames[id-1]
  468. }
  469. return ""
  470. }
  471. getTargetPed() {
  472. if(!checkHandles())
  473. return 0
  474. dwAddress := readDWORD(hGTA, 0xB6F3B8)
  475. if(ErrorLevel) {
  476. ErrorLevel := ERROR_READ_MEMORY
  477. return 0
  478. }
  479. if(!dwAddress)
  480. return 0
  481. dwAddress := readDWORD(hGTA, dwAddress+0x79C)
  482. if(ErrorLevel) {
  483. ErrorLevel := ERROR_READ_MEMORY
  484. return 0
  485. }
  486. ErrorLevel := ERROR_OK
  487. return dwAddress
  488. }
  489. calcScreenCoors(fX,fY,fZ)
  490. {
  491. if(!checkHandles())
  492. return false
  493. dwM := 0xB6FA2C
  494. m_11 := readFloat(hGTA, dwM + 0*4)
  495. if(ErrorLevel) {
  496. ErrorLevel := ERROR_READ_MEMORY
  497. return false
  498. }
  499. m_12 := readFloat(hGTA, dwM + 1*4)
  500. m_13 := readFloat(hGTA, dwM + 2*4)
  501. m_21 := readFloat(hGTA, dwM + 4*4)
  502. m_22 := readFloat(hGTA, dwM + 5*4)
  503. m_23 := readFloat(hGTA, dwM + 6*4)
  504. m_31 := readFloat(hGTA, dwM + 8*4)
  505. m_32 := readFloat(hGTA, dwM + 9*4)
  506. m_33 := readFloat(hGTA, dwM + 10*4)
  507. m_41 := readFloat(hGTA, dwM + 12*4)
  508. m_42 := readFloat(hGTA, dwM + 13*4)
  509. m_43 := readFloat(hGTA, dwM + 14*4)
  510. dwLenX := readDWORD(hGTA, 0xC17044)
  511. if(ErrorLevel) {
  512. ErrorLevel := ERROR_READ_MEMORY
  513. return false
  514. }
  515. dwLenY := readDWORD(hGTA, 0xC17048)
  516. frX := fZ * m_31 + fY * m_21 + fX * m_11 + m_41
  517. frY := fZ * m_32 + fY * m_22 + fX * m_12 + m_42
  518. frZ := fZ * m_33 + fY * m_23 + fX * m_13 + m_43
  519. fRecip := 1.0/frZ
  520. frX *= fRecip * dwLenX
  521. frY *= fRecip * dwLenY
  522. if(frX<=dwLenX && frY<=dwLenY && frZ>1)
  523. return [frX,frY,frZ]
  524. }
  525. getPedById(dwId) {
  526. dwId += 0
  527. dwId := Floor(dwId)
  528. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  529. return 0
  530. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  531. {
  532. if(oScoreboardData[dwId])
  533. {
  534. if(oScoreboardData[dwId].HasKey("PED"))
  535. return oScoreboardData[dwId].PED
  536. }
  537. return 0
  538. }
  539. if(!updateOScoreboardData())
  540. return 0
  541. if(oScoreboardData[dwId])
  542. {
  543. if(oScoreboardData[dwId].HasKey("PED"))
  544. return oScoreboardData[dwId].PED
  545. }
  546. return 0
  547. }
  548. getIdByPed(dwPed) {
  549. dwPed += 0
  550. dwPed := Floor(dwPed)
  551. if(!dwPed)
  552. return -1
  553. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  554. {
  555. For i, o in oScoreboardData
  556. {
  557. if(o.HasKey("PED"))
  558. {
  559. if(o.PED==dwPed)
  560. return i
  561. }
  562. }
  563. return -1
  564. }
  565. if(!updateOScoreboardData())
  566. return -1
  567. For i, o in oScoreboardData
  568. {
  569. if(o.HasKey("PED"))
  570. {
  571. if(o.PED==dwPed)
  572. return i
  573. }
  574. }
  575. return -1
  576. }
  577. getStreamedInPlayersInfo() {
  578. r:=[]
  579. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  580. {
  581. For i, o in oScoreboardData
  582. {
  583. if(o.HasKey("PED"))
  584. {
  585. p := getPedCoordinates(o.PED)
  586. if(p)
  587. {
  588. o.POS := p
  589. r[i] := o
  590. }
  591. }
  592. }
  593. return r
  594. }
  595. if(!updateOScoreboardData())
  596. return ""
  597. For i, o in oScoreboardData
  598. {
  599. if(o.HasKey("PED"))
  600. {
  601. p := getPedCoordinates(o.PED)
  602. if(p)
  603. {
  604. o.POS := p
  605. r[i] := o
  606. }
  607. }
  608. }
  609. return r
  610. }
  611. callFuncForAllStreamedInPlayers(cfunc,dist=0x7fffffff) {
  612. cfunc := "" cfunc
  613. dist += 0
  614. if(!IsFunc(cfunc))
  615. return false
  616. p := getStreamedInPlayersInfo()
  617. if(!p)
  618. return false
  619. if(dist<0x7fffffff)
  620. {
  621. lpos := getCoordinates()
  622. if(!lpos)
  623. return false
  624. For i, o in p
  625. {
  626. if(dist>getDist(lpos,o.POS))
  627. %cfunc%(o)
  628. }
  629. }
  630. else
  631. {
  632. For i, o in p
  633. %cfunc%(o)
  634. }
  635. return true
  636. }
  637. getDist(pos1,pos2) {
  638. if(!pos1 || !pos2)
  639. return 0
  640. return Sqrt((pos1[1]-pos2[1])*(pos1[1]-pos2[1])+(pos1[2]-pos2[2])*(pos1[2]-pos2[2])+(pos1[3]-pos2[3])*(pos1[3]-pos2[3]))
  641. }
  642. getClosestPlayerPed() {
  643. dist := 0x7fffffff
  644. p := getStreamedInPlayersInfo()
  645. if(!p)
  646. return -1
  647. lpos := getCoordinates()
  648. if(!lpos)
  649. return -1
  650. id := -1
  651. For i, o in p
  652. {
  653. t:=getDist(lpos,o.POS)
  654. if(t<dist)
  655. {
  656. dist := t
  657. id := i
  658. }
  659. }
  660. PED := getPedById(id)
  661. return PED
  662. }
  663. getClosestPlayerId() {
  664. dist := 0x7fffffff
  665. p := getStreamedInPlayersInfo()
  666. if(!p)
  667. return -1
  668. lpos := getCoordinates()
  669. if(!lpos)
  670. return -1
  671. id := -1
  672. For i, o in p
  673. {
  674. t:=getDist(lpos,o.POS)
  675. if(t<dist)
  676. {
  677. dist := t
  678. id := i
  679. }
  680. }
  681. return id
  682. }
  683. CountOnlinePlayers() {
  684. if(!checkHandles())
  685. return -1
  686. dwOnline := readDWORD(hGTA, dwSAMP + 0x21A0B4)
  687. if(ErrorLevel) {
  688. ErrorLevel := ERROR_READ_MEMORY
  689. return -1
  690. }
  691. dwAddr := dwOnline + 0x4
  692. OnlinePlayers := readDWORD(hGTA, dwAddr)
  693. if(ErrorLevel) {
  694. ErrorLevel := ERROR_READ_MEMORY
  695. return -1
  696. }
  697. ErrorLevel := ERROR_OK
  698. return OnlinePlayers
  699. }
  700. getPedCoordinates(dwPED) {
  701. dwPED += 0
  702. dwPED := Floor(dwPED)
  703. if(!dwPED)
  704. return ""
  705. if(!checkHandles())
  706. return ""
  707. dwAddress := readDWORD(hGTA, dwPED + 0x14)
  708. if(ErrorLevel || dwAddress==0) {
  709. ErrorLevel := ERROR_READ_MEMORY
  710. return ""
  711. }
  712. fX := readFloat(hGTA, dwAddress + 0x30)
  713. if(ErrorLevel) {
  714. ErrorLevel := ERROR_READ_MEMORY
  715. return ""
  716. }
  717. fY := readFloat(hGTA, dwAddress + 0x34)
  718. if(ErrorLevel) {
  719. ErrorLevel := ERROR_READ_MEMORY
  720. return ""
  721. }
  722. fZ := readFloat(hGTA, dwAddress + 0x38)
  723. if(ErrorLevel) {
  724. ErrorLevel := ERROR_READ_MEMORY
  725. return ""
  726. }
  727. ErrorLevel := ERROR_OK
  728. return [fX, fY, fZ]
  729. }
  730. getTargetPos(dwId) {
  731. dwId += 0
  732. dwId := Floor(dwId)
  733. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  734. return ""
  735. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  736. {
  737. if(oScoreboardData[dwId])
  738. {
  739. if(oScoreboardData[dwId].HasKey("PED"))
  740. return getPedCoordinates(oScoreboardData[dwId].PED)
  741. if(oScoreboardData[dwId].HasKey("MPOS"))
  742. return oScoreboardData[dwId].MPOS
  743. }
  744. return ""
  745. }
  746. if(!updateOScoreboardData())
  747. return ""
  748. if(oScoreboardData[dwId])
  749. {
  750. if(oScoreboardData[dwId].HasKey("PED"))
  751. return getPedCoordinates(oScoreboardData[dwId].PED)
  752. if(oScoreboardData[dwId].HasKey("MPOS"))
  753. return oScoreboardData[dwId].MPOS
  754. }
  755. return ""
  756. }
  757. getTargetPlayerSkinIdByPed(dwPED) {
  758. if(!checkHandles())
  759. return -1
  760. dwAddr := dwPED + ADDR_CPED_SKINIDOFF
  761. SkinID := readMem(hGTA, dwAddr, 2, "byte")
  762. if(ErrorLevel) {
  763. ErrorLevel := ERROR_READ_MEMORY
  764. return -1
  765. }
  766. ErrorLevel := ERROR_OK
  767. return SkinID
  768. }
  769. getTargetPlayerSkinIdById(dwId) {
  770. if(!checkHandles())
  771. return -1
  772. dwPED := getPedById(dwId)
  773. dwAddr := dwPED + ADDR_CPED_SKINIDOFF
  774. SkinID := readMem(hGTA, dwAddr, 2, "byte")
  775. if(ErrorLevel) {
  776. ErrorLevel := ERROR_READ_MEMORY
  777. return -1
  778. }
  779. ErrorLevel := ERROR_OK
  780. return SkinID
  781. }
  782. getVehiclePointerByPed(dwPED) {
  783. dwPED += 0
  784. dwPED := Floor(dwPED)
  785. if(!dwPED)
  786. return 0
  787. if(!checkHandles())
  788. return 0
  789. dwAddress := readDWORD(hGTA, dwPED + 0x58C)
  790. if(ErrorLevel) {
  791. ErrorLevel := ERROR_READ_MEMORY
  792. return 0
  793. }
  794. ErrorLevel := ERROR_OK
  795. return dwAddress
  796. }
  797. getVehiclePointerById(dwId) {
  798. if(!dwId)
  799. return 0
  800. if(!checkHandles())
  801. return 0
  802. dwPed_By_Id := getPedById(dwId)
  803. dwAddress := readDWORD(hGTA, dwPed_By_Id + 0x58C)
  804. if(ErrorLevel) {
  805. ErrorLevel := ERROR_READ_MEMORY
  806. return 0
  807. }
  808. ErrorLevel := ERROR_OK
  809. return dwAddress
  810. }
  811. isTargetInAnyVehicleByPed(dwPED)
  812. {
  813. if(!checkHandles())
  814. return -1
  815. dwVehiclePointer := getVehiclePointerByPed(dwPedPointer)
  816. if(dwVehiclePointer > 0)
  817. {
  818. return 1
  819. }
  820. else if(dwVehiclePointer <= 0)
  821. {
  822. return 0
  823. }
  824. else
  825. {
  826. return -1
  827. }
  828. }
  829. isTargetInAnyVehiclebyId(dwId)
  830. {
  831. if(!checkHandles())
  832. return -1
  833. dwPedPointer := getPedById(dwId)
  834. dwVehiclePointer := getVehiclePointerByPed(dwPedPointer)
  835. if(dwVehiclePointer > 0)
  836. {
  837. return 1
  838. }
  839. else if(dwVehiclePointer <= 0)
  840. {
  841. return 0
  842. }
  843. else
  844. {
  845. return -1
  846. }
  847. }
  848. getTargetVehicleHealthByPed(dwPed) {
  849. if(!checkHandles())
  850. return -1
  851. dwVehPtr := getVehiclePointerByPed(dwPed)
  852. dwAddr := dwVehPtr + ADDR_VEHICLE_HPOFF
  853. fHealth := readFloat(hGTA, dwAddr)
  854. if(ErrorLevel) {
  855. ErrorLevel := ERROR_READ_MEMORY
  856. return -1
  857. }
  858. ErrorLevel := ERROR_OK
  859. return Round(fHealth)
  860. }
  861. getTargetVehicleHealthById(dwId) {
  862. if(!checkHandles())
  863. return -1
  864. dwVehPtr := getVehiclePointerById(dwId)
  865. dwAddr := dwVehPtr + ADDR_VEHICLE_HPOFF
  866. fHealth := readFloat(hGTA, dwAddr)
  867. if(ErrorLevel) {
  868. ErrorLevel := ERROR_READ_MEMORY
  869. return -1
  870. }
  871. ErrorLevel := ERROR_OK
  872. return Round(fHealth)
  873. }
  874. getTargetVehicleTypeByPed(dwPED) {
  875. if(!checkHandles())
  876. return 0
  877. dwAddr := getVehiclePointerByPed(dwPED)
  878. if(!dwAddr)
  879. return 0
  880. cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_TYPE, 1, "Char")
  881. if(ErrorLevel) {
  882. ErrorLevel := ERROR_READ_MEMORY
  883. return 0
  884. }
  885. ErrorLevel := ERROR_OK
  886. if(!cVal)
  887. {
  888. mid := getVehicleModelId()
  889. Loop % oAirplaneModels.MaxIndex()
  890. {
  891. if(oAirplaneModels[A_Index]==mid)
  892. return 5
  893. }
  894. return 1
  895. }
  896. else if(cVal==5)
  897. return 2
  898. else if(cVal==6)
  899. return 3
  900. else if(cVal==9)
  901. {
  902. mid := getVehicleModelId()
  903. Loop % oBikeModels.MaxIndex()
  904. {
  905. if(oBikeModels[A_Index]==mid)
  906. return 6
  907. }
  908. return 4
  909. }
  910. return 0
  911. }
  912. getTargetVehicleTypeById(dwId) {
  913. if(!checkHandles())
  914. return 0
  915. dwAddr := getVehiclePointerById(dwId)
  916. if(!dwAddr)
  917. return 0
  918. cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_TYPE, 1, "Char")
  919. if(ErrorLevel) {
  920. ErrorLevel := ERROR_READ_MEMORY
  921. return 0
  922. }
  923. ErrorLevel := ERROR_OK
  924. if(!cVal)
  925. {
  926. mid := getVehicleModelId()
  927. Loop % oAirplaneModels.MaxIndex()
  928. {
  929. if(oAirplaneModels[A_Index]==mid)
  930. return 5
  931. }
  932. return 1
  933. }
  934. else if(cVal==5)
  935. return 2
  936. else if(cVal==6)
  937. return 3
  938. else if(cVal==9)
  939. {
  940. mid := getVehicleModelId()
  941. Loop % oBikeModels.MaxIndex()
  942. {
  943. if(oBikeModels[A_Index]==mid)
  944. return 6
  945. }
  946. return 4
  947. }
  948. return 0
  949. }
  950. getTargetVehicleModelIdByPed(dwPED) {
  951. if(!checkHandles())
  952. return 0
  953. dwAddr := getVehiclePointerByPed(dwPED)
  954. if(!dwAddr)
  955. return 0
  956. sVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_MODEL, 2, "Short")
  957. if(ErrorLevel) {
  958. ErrorLevel := ERROR_READ_MEMORY
  959. return 0
  960. }
  961. ErrorLevel := ERROR_OK
  962. return sVal
  963. }
  964. getTargetVehicleModelIdById(dwId) {
  965. if(!checkHandles())
  966. return 0
  967. dwAddr := getVehiclePointerById(dwId)
  968. if(!dwAddr)
  969. return 0
  970. sVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_MODEL, 2, "Short")
  971. if(ErrorLevel) {
  972. ErrorLevel := ERROR_READ_MEMORY
  973. return 0
  974. }
  975. ErrorLevel := ERROR_OK
  976. return sVal
  977. }
  978. getTargetVehicleModelNameByPed(dwPED) {
  979. id := getTargetVehicleModelIdByPed(dwPED)
  980. if(id > 400 && id < 611)
  981. {
  982. return ovehicleNames[id-399]
  983. }
  984. return ""
  985. }
  986. getTargetVehicleModelNameById(dwId) {
  987. id := getTargetVehicleModelIdById(dwId)
  988. if(id > 400 && id < 611)
  989. {
  990. return ovehicleNames[id-399]
  991. }
  992. return ""
  993. }
  994. getTargetVehicleLightStateByPed(dwPED) {
  995. if(!checkHandles())
  996. return -1
  997. dwAddr := getVehiclePointerByPed(dwPED)
  998. if(!dwAddr)
  999. return -1
  1000. dwVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_LIGHTSTATE, 4, "Int")
  1001. if(ErrorLevel) {
  1002. ErrorLevel := ERROR_READ_MEMORY
  1003. return -1
  1004. }
  1005. ErrorLevel := ERROR_OK
  1006. return (dwVal>0)
  1007. }
  1008. getTargetVehicleLightStateById(dwId) {
  1009. if(!checkHandles())
  1010. return -1
  1011. dwAddr := getVehiclePointerById(dwId)
  1012. if(!dwAddr)
  1013. return -1
  1014. dwVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_LIGHTSTATE, 4, "Int")
  1015. if(ErrorLevel) {
  1016. ErrorLevel := ERROR_READ_MEMORY
  1017. return -1
  1018. }
  1019. ErrorLevel := ERROR_OK
  1020. return (dwVal>0)
  1021. }
  1022. getTargetVehicleLockStateByPed(dwPED) {
  1023. if(!checkHandles())
  1024. return -1
  1025. dwAddr := getVehiclePointerByPed(dwPED)
  1026. if(!dwAddr)
  1027. return -1
  1028. dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DOORSTATE)
  1029. if(ErrorLevel) {
  1030. ErrorLevel := ERROR_READ_MEMORY
  1031. return -1
  1032. }
  1033. ErrorLevel := ERROR_OK
  1034. return (dwVal==2)
  1035. }
  1036. getTargetVehicleLockStateById(dwId) {
  1037. if(!checkHandles())
  1038. return -1
  1039. dwAddr := getVehiclePointerById(dwId)
  1040. if(!dwAddr)
  1041. return -1
  1042. dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DOORSTATE)
  1043. if(ErrorLevel) {
  1044. ErrorLevel := ERROR_READ_MEMORY
  1045. return -1
  1046. }
  1047. ErrorLevel := ERROR_OK
  1048. return (dwVal==2)
  1049. }
  1050. getTargetVehicleColor1byPed(dwPED) {
  1051. if(!checkHandles())
  1052. return 0
  1053. dwAddr := getVehiclePointerByPed(dwPED)
  1054. if(!dwAddr)
  1055. return 0
  1056. sVal := readMem(hGTA, dwAddr + 1076, 1, "byte")
  1057. if(ErrorLevel) {
  1058. ErrorLevel := ERROR_READ_MEMORY
  1059. return 0
  1060. }
  1061. ErrorLevel := ERROR_OK
  1062. return sVal
  1063. }
  1064. getTargetVehicleColor1byId(dwId) {
  1065. if(!checkHandles())
  1066. return 0
  1067. dwAddr := getVehiclePointerById(dwId)
  1068. if(!dwAddr)
  1069. return 0
  1070. sVal := readMem(hGTA, dwAddr + 1076, 1, "byte")
  1071. if(ErrorLevel) {
  1072. ErrorLevel := ERROR_READ_MEMORY
  1073. return 0
  1074. }
  1075. ErrorLevel := ERROR_OK
  1076. return sVal
  1077. }
  1078. getTargetVehicleColor2byPed(dwPED) {
  1079. if(!checkHandles())
  1080. return 0
  1081. dwAddr := getVehiclePointerByPed(dwPED)
  1082. if(!dwAddr)
  1083. return 0
  1084. sVal := readMem(hGTA, dwAddr + 1077, 1, "byte")
  1085. if(ErrorLevel) {
  1086. ErrorLevel := ERROR_READ_MEMORY
  1087. return 0
  1088. }
  1089. ErrorLevel := ERROR_OK
  1090. return sVal
  1091. }
  1092. getTargetVehicleColor2byId(dwId) {
  1093. if(!checkHandles())
  1094. return 0
  1095. dwAddr := getVehiclePointerById(dwId)
  1096. if(!dwAddr)
  1097. return 0
  1098. sVal := readMem(hGTA, dwAddr + 1077, 1, "byte")
  1099. if(ErrorLevel) {
  1100. ErrorLevel := ERROR_READ_MEMORY
  1101. return 0
  1102. }
  1103. ErrorLevel := ERROR_OK
  1104. return sVal
  1105. }
  1106. getTargetVehicleSpeedByPed(dwPED) {
  1107. if(!checkHandles())
  1108. return -1
  1109. dwAddr := getVehiclePointerByPed(dwPED)
  1110. fSpeedX := readMem(hGTA, dwAddr + ADDR_VEHICLE_X, 4, "float")
  1111. fSpeedY := readMem(hGTA, dwAddr + ADDR_VEHICLE_Y, 4, "float")
  1112. fSpeedZ := readMem(hGTA, dwAddr + ADDR_VEHICLE_Z, 4, "float")
  1113. fVehicleSpeed :=  sqrt((fSpeedX * fSpeedX) + (fSpeedY * fSpeedY) + (fSpeedZ * fSpeedZ))
  1114. fVehicleSpeed := (fVehicleSpeed * 100) * 1.43
  1115. return fVehicleSpeed
  1116. }
  1117. getTargetVehicleSpeedById(dwId) {
  1118. if(!checkHandles())
  1119. return -1
  1120. dwAddr := getVehiclePointerById(dwId)
  1121. fSpeedX := readMem(hGTA, dwAddr + ADDR_VEHICLE_X, 4, "float")
  1122. fSpeedY := readMem(hGTA, dwAddr + ADDR_VEHICLE_Y, 4, "float")
  1123. fSpeedZ := readMem(hGTA, dwAddr + ADDR_VEHICLE_Z, 4, "float")
  1124. fVehicleSpeed :=  sqrt((fSpeedX * fSpeedX) + (fSpeedY * fSpeedY) + (fSpeedZ * fSpeedZ))
  1125. fVehicleSpeed := (fVehicleSpeed * 100) * 1.43
  1126. return fVehicleSpeed
  1127. }
  1128. getPlayerNameById(dwId) {
  1129. dwId += 0
  1130. dwId := Floor(dwId)
  1131. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  1132. return ""
  1133. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  1134. {
  1135. if(oScoreboardData[dwId])
  1136. return oScoreboardData[dwId].NAME
  1137. return ""
  1138. }
  1139. if(!updateOScoreboardData())
  1140. return ""
  1141. if(oScoreboardData[dwId])
  1142. return oScoreboardData[dwId].NAME
  1143. return ""
  1144. }
  1145. getPlayerIdByName(wName, exact := false) {
  1146. wName := "" wName
  1147. if(StrLen(wName) < 1 || StrLen(wName) > 24)
  1148. return -1
  1149. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  1150. {
  1151. For i, o in oScoreboardData
  1152. {
  1153. if (o.NAME = wName)
  1154. return i
  1155. }
  1156. For i, o in oScoreboardData
  1157. {
  1158. if (!exact && InStr(o.NAME,wName)==1)
  1159. return i
  1160. else if (exact && o.NAME = wName)
  1161. return i
  1162. }
  1163. return -1
  1164. }
  1165. if(!updateOScoreboardData())
  1166. return -2
  1167. For i, o in oScoreboardData
  1168. {
  1169. if (o.NAME = wName)
  1170. return i
  1171. }
  1172. For i, o in oScoreboardData
  1173. {
  1174. if (!exact && InStr(o.NAME,wName)==1)
  1175. return i
  1176. else if (exact && o.NAME = wName)
  1177. return i
  1178. }
  1179. return -1
  1180. }
  1181. getPlayerScoreById(dwId) {
  1182. dwId += 0
  1183. dwId := Floor(dwId)
  1184. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  1185. return ""
  1186. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  1187. {
  1188. if(oScoreboardData[dwId])
  1189. return oScoreboardData[dwId].SCORE
  1190. return ""
  1191. }
  1192. if(!updateOScoreboardData())
  1193. return ""
  1194. if(oScoreboardData[dwId])
  1195. return oScoreboardData[dwId].SCORE
  1196. return ""
  1197. }
  1198. getPlayerPingById(dwId) {
  1199. dwId += 0
  1200. dwId := Floor(dwId)
  1201. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  1202. return -1
  1203. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  1204. {
  1205. if(oScoreboardData[dwId])
  1206. return oScoreboardData[dwId].PING
  1207. return -1
  1208. }
  1209. if(!updateOScoreboardData())
  1210. return -1
  1211. if(oScoreboardData[dwId])
  1212. return oScoreboardData[dwId].PING
  1213. return -1
  1214. }
  1215. isNPCById(dwId) {
  1216. dwId += 0
  1217. dwId := Floor(dwId)
  1218. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  1219. return -1
  1220. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  1221. {
  1222. if(oScoreboardData[dwId])
  1223. return oScoreboardData[dwId].ISNPC
  1224. return -1
  1225. }
  1226. if(!updateOScoreboardData())
  1227. return -1
  1228. if(oScoreboardData[dwId])
  1229. return oScoreboardData[dwId].ISNPC
  1230. return -1
  1231. }
  1232. updateScoreboardDataEx() {
  1233. if(!checkHandles())
  1234. return false
  1235. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  1236. if(ErrorLevel || dwAddress==0) {
  1237. ErrorLevel := ERROR_READ_MEMORY
  1238. return false
  1239. }
  1240. dwFunc := dwSAMP + FUNC_UPDATESCOREBOARD
  1241. VarSetCapacity(injectData, 11, 0)
  1242. NumPut(0xB9, injectData, 0, "UChar")
  1243. NumPut(dwAddress, injectData, 1, "UInt")
  1244. NumPut(0xE8, injectData, 5, "UChar")
  1245. offset := dwFunc - (pInjectFunc + 10)
  1246. NumPut(offset, injectData, 6, "Int")
  1247. NumPut(0xC3, injectData, 10, "UChar")
  1248. writeRaw(hGTA, pInjectFunc, &injectData, 11)
  1249. if(ErrorLevel)
  1250. return false
  1251. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  1252. if(ErrorLevel)
  1253. return false
  1254. waitForSingleObject(hThread, 0xFFFFFFFF)
  1255. closeProcess(hThread)
  1256. return true
  1257. }
  1258. updateOScoreboardData() {
  1259. if(!checkHandles())
  1260. return 0
  1261. oScoreboardData := []
  1262. if(!updateScoreboardDataEx())
  1263. return 0
  1264. iRefreshScoreboard := A_TickCount
  1265. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  1266. if(ErrorLevel || dwAddress==0) {
  1267. ErrorLevel := ERROR_READ_MEMORY
  1268. return 0
  1269. }
  1270. dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  1271. if(ErrorLevel || dwAddress==0) {
  1272. ErrorLevel := ERROR_READ_MEMORY
  1273. return 0
  1274. }
  1275. dwPlayers := readDWORD(hGTA, dwAddress + SAMP_PPOOL_PLAYER_OFFSET)
  1276. if(ErrorLevel || dwPlayers==0) {
  1277. ErrorLevel := ERROR_READ_MEMORY
  1278. return 0
  1279. }
  1280. wID := readMem(hGTA, dwPlayers + SAMP_SLOCALPLAYERID_OFFSET, 2, "Short")
  1281. if(ErrorLevel) {
  1282. ErrorLevel := ERROR_READ_MEMORY
  1283. return 0
  1284. }
  1285. dwPing := readMem(hGTA, dwPlayers + SAMP_ILOCALPLAYERPING_OFFSET, 4, "Int")
  1286. if(ErrorLevel) {
  1287. ErrorLevel := ERROR_READ_MEMORY
  1288. return 0
  1289. }
  1290. dwScore := readMem(hGTA, dwPlayers + SAMP_ILOCALPLAYERSCORE_OFFSET, 4, "Int")
  1291. if(ErrorLevel) {
  1292. ErrorLevel := ERROR_READ_MEMORY
  1293. return 0
  1294. }
  1295. dwTemp := readMem(hGTA, dwPlayers + SAMP_ISTRLEN_LOCALPLAYERNAME_OFFSET, 4, "Int")
  1296. if(ErrorLevel) {
  1297. ErrorLevel := ERROR_READ_MEMORY
  1298. return 0
  1299. }
  1300. sUsername := ""
  1301. if(dwTemp <= 0xf) {
  1302. sUsername := readString(hGTA, dwPlayers + SAMP_SZLOCALPLAYERNAME_OFFSET, 16)
  1303. if(ErrorLevel) {
  1304. ErrorLevel := ERROR_READ_MEMORY
  1305. return 0
  1306. }
  1307. }
  1308. else {
  1309. dwAddress := readDWORD(hGTA, dwPlayers + SAMP_PSZLOCALPLAYERNAME_OFFSET)
  1310. if(ErrorLevel) {
  1311. ErrorLevel := ERROR_READ_MEMORY
  1312. return 0
  1313. }
  1314. sUsername := readString(hGTA, dwAddress, 25)
  1315. if(ErrorLevel) {
  1316. ErrorLevel := ERROR_READ_MEMORY
  1317. return 0
  1318. }
  1319. }
  1320. oScoreboardData[wID] := Object("NAME", sUsername, "ID", wID, "PING", dwPing, "SCORE", dwScore, "ISNPC", 0)
  1321. Loop, % SAMP_PLAYER_MAX
  1322. {
  1323. i := A_Index-1
  1324. dwRemoteplayer := readDWORD(hGTA, dwPlayers+SAMP_PREMOTEPLAYER_OFFSET+i*4)
  1325. if(ErrorLevel) {
  1326. ErrorLevel := ERROR_READ_MEMORY
  1327. return 0
  1328. }
  1329. if(dwRemoteplayer==0)
  1330. continue
  1331. dwPing := readMem(hGTA, dwRemoteplayer + SAMP_IPING_OFFSET, 4, "Int")
  1332. if(ErrorLevel) {
  1333. ErrorLevel := ERROR_READ_MEMORY
  1334. return 0
  1335. }
  1336. dwScore := readMem(hGTA, dwRemoteplayer + SAMP_ISCORE_OFFSET, 4, "Int")
  1337. if(ErrorLevel) {
  1338. ErrorLevel := ERROR_READ_MEMORY
  1339. return 0
  1340. }
  1341. dwIsNPC := readMem(hGTA, dwRemoteplayer + SAMP_ISNPC_OFFSET, 4, "Int")
  1342. if(ErrorLevel) {
  1343. ErrorLevel := ERROR_READ_MEMORY
  1344. return 0
  1345. }
  1346. dwTemp := readMem(hGTA, dwRemoteplayer + SAMP_ISTRLENNAME___OFFSET, 4, "Int")
  1347. if(ErrorLevel) {
  1348. ErrorLevel := ERROR_READ_MEMORY
  1349. return 0
  1350. }
  1351. sUsername := ""
  1352. if(dwTemp <= 0xf)
  1353. {
  1354. sUsername := readString(hGTA, dwRemoteplayer+SAMP_SZPLAYERNAME_OFFSET, 16)
  1355. if(ErrorLevel) {
  1356. ErrorLevel := ERROR_READ_MEMORY
  1357. return 0
  1358. }
  1359. }
  1360. else {
  1361. dwAddress := readDWORD(hGTA, dwRemoteplayer + SAMP_PSZPLAYERNAME_OFFSET)
  1362. if(ErrorLevel || dwAddress==0) {
  1363. ErrorLevel := ERROR_READ_MEMORY
  1364. return 0
  1365. }
  1366. sUsername := readString(hGTA, dwAddress, 25)
  1367. if(ErrorLevel) {
  1368. ErrorLevel := ERROR_READ_MEMORY
  1369. return 0
  1370. }
  1371. }
  1372. o := Object("NAME", sUsername, "ID", i, "PING", dwPing, "SCORE", dwScore, "ISNPC", dwIsNPC)
  1373. oScoreboardData[i] := o
  1374. dwRemoteplayerData := readDWORD(hGTA, dwRemoteplayer + 0x0)
  1375. if(ErrorLevel) {
  1376. ErrorLevel := ERROR_READ_MEMORY
  1377. return 0
  1378. }
  1379. if(dwRemoteplayerData==0)
  1380. continue
  1381. dwAddress := readDWORD(hGTA, dwRemoteplayerData + 489)
  1382. if(ErrorLevel) {
  1383. ErrorLevel := ERROR_READ_MEMORY
  1384. return 0
  1385. }
  1386. if(dwAddress)
  1387. {
  1388. ix := readMem(hGTA, dwRemoteplayerData + 493, 4, "Int")
  1389. if(ErrorLevel) {
  1390. ErrorLevel := ERROR_READ_MEMORY
  1391. return 0
  1392. }
  1393. iy := readMem(hGTA, dwRemoteplayerData + 497, 4, "Int")
  1394. if(ErrorLevel) {
  1395. ErrorLevel := ERROR_READ_MEMORY
  1396. return 0
  1397. }
  1398. iz := readMem(hGTA, dwRemoteplayerData + 501, 4, "Int")
  1399. if(ErrorLevel) {
  1400. ErrorLevel := ERROR_READ_MEMORY
  1401. return 0
  1402. }
  1403. o.MPOS := [ix, iy, iz]
  1404. }
  1405. dwpSAMP_Actor := readDWORD(hGTA, dwRemoteplayerData + 0x0)
  1406. if(ErrorLevel) {
  1407. ErrorLevel := ERROR_READ_MEMORY
  1408. return 0
  1409. }
  1410. if(dwpSAMP_Actor==0)
  1411. continue
  1412. dwPed := readDWORD(hGTA, dwpSAMP_Actor + 676)
  1413. if(ErrorLevel) {
  1414. ErrorLevel := ERROR_READ_MEMORY
  1415. return 0
  1416. }
  1417. if(dwPed==0)
  1418. continue
  1419. o.PED := dwPed
  1420. fHP := readFloat(hGTA, dwRemoteplayerData + 444)
  1421. if(ErrorLevel) {
  1422. ErrorLevel := ERROR_READ_MEMORY
  1423. return 0
  1424. }
  1425. fARMOR := readFloat(hGTA, dwRemoteplayerData + 440)
  1426. if(ErrorLevel) {
  1427. ErrorLevel := ERROR_READ_MEMORY
  1428. return 0
  1429. }
  1430. o.HP := fHP
  1431. o.ARMOR := fARMOR
  1432. }
  1433. ErrorLevel := ERROR_OK
  1434. return 1
  1435. }
  1436. GetChatLine(Line, ByRef Output, timestamp=0, color=0){
  1437. chatindex := 0
  1438. FileRead, file, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
  1439. loop, Parse, file, `n, `r
  1440. {
  1441. if(A_LoopField)
  1442. chatindex := A_Index
  1443. }
  1444. loop, Parse, file, `n, `r
  1445. {
  1446. if(A_Index = chatindex - line){
  1447. output := A_LoopField
  1448. break
  1449. }
  1450. }
  1451. file := ""
  1452. if(!timestamp)
  1453. output := RegExReplace(output, "U)^\[\d{2}:\d{2}:\d{2}\]")
  1454. if(!color)
  1455. output := RegExReplace(output, "Ui)\{[a-f0-9]{6}\}")
  1456. return
  1457. }
  1458. getPlayerHealth() {
  1459. if(!checkHandles())
  1460. return -1
  1461. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  1462. if(ErrorLevel) {
  1463. ErrorLevel := ERROR_READ_MEMORY
  1464. return -1
  1465. }
  1466. dwAddr := dwCPedPtr + ADDR_CPED_HPOFF
  1467. fHealth := readFloat(hGTA, dwAddr)
  1468. if(ErrorLevel) {
  1469. ErrorLevel := ERROR_READ_MEMORY
  1470. return -1
  1471. }
  1472. ErrorLevel := ERROR_OK
  1473. return Round(fHealth)
  1474. }
  1475. getPlayerArmor() {
  1476. if(!checkHandles())
  1477. return -1
  1478. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  1479. if(ErrorLevel) {
  1480. ErrorLevel := ERROR_READ_MEMORY
  1481. return -1
  1482. }
  1483. dwAddr := dwCPedPtr + ADDR_CPED_ARMOROFF
  1484. fHealth := readFloat(hGTA, dwAddr)
  1485. if(ErrorLevel) {
  1486. ErrorLevel := ERROR_READ_MEMORY
  1487. return -1
  1488. }
  1489. ErrorLevel := ERROR_OK
  1490. return Round(fHealth)
  1491. }
  1492. getPlayerInteriorId() {
  1493. if(!checkHandles())
  1494. return -1
  1495. iid := readMem(hGTA, ADDR_CPED_INTID, 4, "Int")
  1496. if(ErrorLevel) {
  1497. ErrorLevel := ERROR_READ_MEMORY
  1498. return -1
  1499. }
  1500. ErrorLevel := ERROR_OK
  1501. return iid
  1502. }
  1503. getPlayerSkinID() {
  1504. if(!checkHandles())
  1505. return -1
  1506. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  1507. if(ErrorLevel) {
  1508. ErrorLevel := ERROR_READ_MEMORY
  1509. return -1
  1510. }
  1511. dwAddr := dwCPedPtr + ADDR_CPED_SKINIDOFF
  1512. SkinID := readMem(hGTA, dwAddr, 2, "byte")
  1513. if(ErrorLevel) {
  1514. ErrorLevel := ERROR_READ_MEMORY
  1515. return -1
  1516. }
  1517. ErrorLevel := ERROR_OK
  1518. return SkinID
  1519. }
  1520. getPlayerMoney() {
  1521. if(!checkHandles())
  1522. return ""
  1523. money := readMem(hGTA, ADDR_CPED_MONEY, 4, "Int")
  1524. if(ErrorLevel) {
  1525. ErrorLevel := ERROR_READ_MEMORY
  1526. return ""
  1527. }
  1528. ErrorLevel := ERROR_OK
  1529. return money
  1530. }
  1531. getPlayerWanteds() {
  1532. if(!checkHandles())
  1533. return -1
  1534. dwPtr := 0xB7CD9C
  1535. dwPtr := readDWORD(hGTA, dwPtr)
  1536. if(ErrorLevel) {
  1537. ErrorLevel := ERROR_READ_MEMORY
  1538. return -1
  1539. }
  1540. Wanteds := readDWORD(hGTA, dwPtr)
  1541. if(ErrorLevel) {
  1542. ErrorLevel := ERROR_READ_MEMORY
  1543. return -1
  1544. }
  1545. ErrorLevel := ERROR_OK
  1546. return Wanteds
  1547. }
  1548. getPlayerWeaponId() {
  1549. if(!checkHandles())
  1550. return 0
  1551. WaffenId := readMem(hGTA, 0xBAA410, 4, "byte")
  1552. if(ErrorLevel) {
  1553. ErrorLevel := ERROR_READ_MEMORY
  1554. return -1
  1555. }
  1556. return WaffenId
  1557. }
  1558. getPlayerWeaponName() {
  1559. id := getPlayerWeaponId()
  1560. if(id >= 0 && id < 44)
  1561. {
  1562. return oweaponNames[id+1]
  1563. }
  1564. return ""
  1565. }
  1566. getPlayerState() {
  1567. if(!checkHandles())
  1568. return -1
  1569. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  1570. if(ErrorLevel) {
  1571. ErrorLevel := ERROR_READ_MEMORY
  1572. return -1
  1573. }
  1574. State := readDWORD(hGTA, dwCPedPtr + 0x530)
  1575. if(ErrorLevel) {
  1576. ErrorLevel := ERROR_READ_MEMORY
  1577. return -1
  1578. }
  1579. ErrorLevel := ERROR_OK
  1580. return State
  1581. }
  1582. IsPlayerInMenu() {
  1583. if(!checkHandles())
  1584. return -1
  1585. IsInMenu := readMem(hGTA, 0xBA67A4, 4, "byte")
  1586. if(ErrorLevel) {
  1587. ErrorLevel := ERROR_READ_MEMORY
  1588. return -1
  1589. }
  1590. ErrorLevel := ERROR_OK
  1591. return IsInMenu
  1592. }
  1593. getPlayerMapPosX() {
  1594. if(!checkHandles())
  1595. return -1
  1596. MapPosX := readFloat(hGTA, 0xBA67B8)
  1597. if(ErrorLevel) {
  1598. ErrorLevel := ERROR_READ_MEMORY
  1599. return -1
  1600. }
  1601. ErrorLevel := ERROR_OK
  1602. return MapPosX
  1603. }
  1604. getPlayerMapPosY() {
  1605. if(!checkHandles())
  1606. return -1
  1607. MapPosY := readFloat(hGTA, 0xBA67BC)
  1608. if(ErrorLevel) {
  1609. ErrorLevel := ERROR_READ_MEMORY
  1610. return -1
  1611. }
  1612. ErrorLevel := ERROR_OK
  1613. return MapPosY
  1614. }
  1615. getPlayerMapZoom() {
  1616. if(!checkHandles())
  1617. return -1
  1618. MapZoom := readFloat(hGTA, 0xBA67AC)
  1619. if(ErrorLevel) {
  1620. ErrorLevel := ERROR_READ_MEMORY
  1621. return -1
  1622. }
  1623. ErrorLevel := ERROR_OK
  1624. return MapZoom
  1625. }
  1626. IsPlayerFreezed() {
  1627. if(!checkHandles())
  1628. return -1
  1629. dwGTA := getModuleBaseAddress("gta_sa.exe", hGTA)
  1630. IPF := readMem(hGTA, dwGTA + 0x690495, 2, "byte")
  1631. if(ErrorLevel) {
  1632. ErrorLevel := ERROR_READ_MEMORY
  1633. return -1
  1634. }
  1635. ErrorLevel := ERROR_OK
  1636. return IPF
  1637. }
  1638. isPlayerInAnyVehicle()
  1639. {
  1640. if(!checkHandles())
  1641. return -1
  1642. dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1643. if(ErrorLevel) {
  1644. ErrorLevel := ERROR_READ_MEMORY
  1645. return -1
  1646. }
  1647. return (dwVehPtr > 0)
  1648. }
  1649. isPlayerDriver() {
  1650. if(!checkHandles())
  1651. return -1
  1652. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1653. if(ErrorLevel) {
  1654. ErrorLevel := ERROR_READ_MEMORY
  1655. return -1
  1656. }
  1657. if(!dwAddr)
  1658. return -1
  1659. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  1660. if(ErrorLevel) {
  1661. ErrorLevel := ERROR_READ_MEMORY
  1662. return -1
  1663. }
  1664. dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DRIVER)
  1665. if(ErrorLevel) {
  1666. ErrorLevel := ERROR_READ_MEMORY
  1667. return -1
  1668. }
  1669. ErrorLevel := ERROR_OK
  1670. return (dwVal==dwCPedPtr)
  1671. }
  1672. getVehicleHealth() {
  1673. if(!checkHandles())
  1674. return -1
  1675. dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1676. if(ErrorLevel) {
  1677. ErrorLevel := ERROR_READ_MEMORY
  1678. return -1
  1679. }
  1680. dwAddr := dwVehPtr + ADDR_VEHICLE_HPOFF
  1681. fHealth := readFloat(hGTA, dwAddr)
  1682. if(ErrorLevel) {
  1683. ErrorLevel := ERROR_READ_MEMORY
  1684. return -1
  1685. }
  1686. ErrorLevel := ERROR_OK
  1687. return Round(fHealth)
  1688. }
  1689. getVehicleType() {
  1690. if(!checkHandles())
  1691. return 0
  1692. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1693. if(ErrorLevel) {
  1694. ErrorLevel := ERROR_READ_MEMORY
  1695. return 0
  1696. }
  1697. if(!dwAddr)
  1698. return 0
  1699. cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_TYPE, 1, "Char")
  1700. if(ErrorLevel) {
  1701. ErrorLevel := ERROR_READ_MEMORY
  1702. return 0
  1703. }
  1704. ErrorLevel := ERROR_OK
  1705. if(!cVal)
  1706. {
  1707. mid := getVehicleModelId()
  1708. Loop % oAirplaneModels.MaxIndex()
  1709. {
  1710. if(oAirplaneModels[A_Index]==mid)
  1711. return 5
  1712. }
  1713. return 1
  1714. }
  1715. else if(cVal==5)
  1716. return 2
  1717. else if(cVal==6)
  1718. return 3
  1719. else if(cVal==9)
  1720. {
  1721. mid := getVehicleModelId()
  1722. Loop % oBikeModels.MaxIndex()
  1723. {
  1724. if(oBikeModels[A_Index]==mid)
  1725. return 6
  1726. }
  1727. return 4
  1728. }
  1729. return 0
  1730. }
  1731. getVehicleModelId() {
  1732. if(!checkHandles())
  1733. return 0
  1734. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1735. if(ErrorLevel) {
  1736. ErrorLevel := ERROR_READ_MEMORY
  1737. return 0
  1738. }
  1739. if(!dwAddr)
  1740. return 0
  1741. sVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_MODEL, 2, "Short")
  1742. if(ErrorLevel) {
  1743. ErrorLevel := ERROR_READ_MEMORY
  1744. return 0
  1745. }
  1746. ErrorLevel := ERROR_OK
  1747. return sVal
  1748. }
  1749. getVehicleModelName() {
  1750. id:=getVehicleModelId()
  1751. if(id > 400 && id < 611)
  1752. {
  1753. return ovehicleNames[id-399]
  1754. }
  1755. return ""
  1756. }
  1757. getVehicleLightState() {
  1758. if(!checkHandles())
  1759. return -1
  1760. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1761. if(ErrorLevel) {
  1762. ErrorLevel := ERROR_READ_MEMORY
  1763. return -1
  1764. }
  1765. if(!dwAddr)
  1766. return -1
  1767. dwVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_LIGHTSTATE, 4, "Int")
  1768. if(ErrorLevel) {
  1769. ErrorLevel := ERROR_READ_MEMORY
  1770. return -1
  1771. }
  1772. ErrorLevel := ERROR_OK
  1773. return (dwVal>0)
  1774. }
  1775. getVehicleEngineState() {
  1776. if(!checkHandles())
  1777. return -1
  1778. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1779. if(ErrorLevel) {
  1780. ErrorLevel := ERROR_READ_MEMORY
  1781. return -1
  1782. }
  1783. if(!dwAddr)
  1784. return -1
  1785. cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_ENGINESTATE, 1, "Char")
  1786. if(ErrorLevel) {
  1787. ErrorLevel := ERROR_READ_MEMORY
  1788. return -1
  1789. }
  1790. ErrorLevel := ERROR_OK
  1791. return (cVal==24 || cVal==56 || cVal==88 || cVal==120)
  1792. }
  1793. getVehicleLockState() {
  1794. if(!checkHandles())
  1795. return -1
  1796. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1797. if(ErrorLevel) {
  1798. ErrorLevel := ERROR_READ_MEMORY
  1799. return -1
  1800. }
  1801. if(!dwAddr)
  1802. return -1
  1803. dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DOORSTATE)
  1804. if(ErrorLevel) {
  1805. ErrorLevel := ERROR_READ_MEMORY
  1806. return -1
  1807. }
  1808. ErrorLevel := ERROR_OK
  1809. return (dwVal==2)
  1810. }
  1811. getVehicleColor1() {
  1812. if(!checkHandles())
  1813. return 0
  1814. dwAddr := readDWORD(hGTA, 0xBA18FC)
  1815. if(ErrorLevel) {
  1816. ErrorLevel := ERROR_READ_MEMORY
  1817. return 0
  1818. }
  1819. if(!dwAddr)
  1820. return 0
  1821. sVal := readMem(hGTA, dwAddr + 1076, 1, "byte")
  1822. if(ErrorLevel) {
  1823. ErrorLevel := ERROR_READ_MEMORY
  1824. return 0
  1825. }
  1826. ErrorLevel := ERROR_OK
  1827. return sVal
  1828. }
  1829. getVehicleColor2() {
  1830. if(!checkHandles())
  1831. return 0
  1832. dwAddr := readDWORD(hGTA, 0xBA18FC)
  1833. if(ErrorLevel) {
  1834. ErrorLevel := ERROR_READ_MEMORY
  1835. return 0
  1836. }
  1837. if(!dwAddr)
  1838. return 0
  1839. sVal := readMem(hGTA, dwAddr + 1077, 1, "byte")
  1840. if(ErrorLevel) {
  1841. ErrorLevel := ERROR_READ_MEMORY
  1842. return 0
  1843. }
  1844. ErrorLevel := ERROR_OK
  1845. return sVal
  1846. }
  1847. getVehicleSpeed() {
  1848. if(!checkHandles())
  1849. return -1
  1850. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1851. if(ErrorLevel) {
  1852. ErrorLevel := ERROR_READ_MEMORY
  1853. return ""
  1854. }
  1855. fSpeedX := readMem(hGTA, dwAddr + ADDR_VEHICLE_X, 4, "float")
  1856. fSpeedY := readMem(hGTA, dwAddr + ADDR_VEHICLE_Y, 4, "float")
  1857. fSpeedZ := readMem(hGTA, dwAddr + ADDR_VEHICLE_Z, 4, "float")
  1858. fVehicleSpeed :=  sqrt((fSpeedX * fSpeedX) + (fSpeedY * fSpeedY) + (fSpeedZ * fSpeedZ))
  1859. fVehicleSpeed := (fVehicleSpeed * 100) * 1.43
  1860. return fVehicleSpeed
  1861. }
  1862. getPlayerRadiostationID() {
  1863. if(!checkHandles())
  1864. return -1
  1865. if(isPlayerInAnyVehicle() == 0)
  1866. return -1
  1867. dwGTA := getModuleBaseAddress("gta_sa.exe", hGTA)
  1868. RadioStationID := readMem(hGTA, dwGTA + 0x4CB7E1, 1, "byte")
  1869. if(ErrorLevel) {
  1870. ErrorLevel := ERROR_READ_MEMORY
  1871. return -1
  1872. }
  1873. return RadioStationID
  1874. }
  1875. getPlayerRadiostationName() {
  1876. if(isPlayerInAnyVehicle() == 0)
  1877. return -1
  1878. id := getPlayerRadiostationID()
  1879. if(id == 0)
  1880. return -1
  1881. if(id >= 0 && id < 14)
  1882. {
  1883. return oradiostationNames[id]
  1884. }
  1885. return ""
  1886. }
  1887. setCheckpoint(fX, fY, fZ, fSize := 7) {
  1888. if(!checkHandles())
  1889. return false
  1890. dwFunc := dwSAMP + 0x9D340
  1891. dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_INCHAT_PTR)
  1892. if(ErrorLevel || dwAddress==0) {
  1893. ErrorLevel := ERROR_READ_MEMORY
  1894. return false
  1895. }
  1896. VarSetCapacity(buf, 16, 0)
  1897. NumPut(fX, buf, 0, "Float")
  1898. NumPut(fY, buf, 4, "Float")
  1899. NumPut(fZ, buf, 8, "Float")
  1900. NumPut(fSize, buf, 12, "Float")
  1901. writeRaw(hGTA, pParam1, &buf, 16)
  1902. dwLen := 31
  1903. VarSetCapacity(injectData, dwLen, 0)
  1904. NumPut(0xB9, injectData, 0, "UChar")
  1905. NumPut(dwAddress, injectData, 1, "UInt")
  1906. NumPut(0x68, injectData, 5, "UChar")
  1907. NumPut(pParam1+12, injectData, 6, "UInt")
  1908. NumPut(0x68, injectData, 10, "UChar")
  1909. NumPut(pParam1, injectData, 11, "UInt")
  1910. NumPut(0xE8, injectData, 15, "UChar")
  1911. offset := dwFunc - (pInjectFunc + 20)
  1912. NumPut(offset, injectData, 16, "Int")
  1913. NumPut(0x05C7, injectData, 20, "UShort")
  1914. NumPut(dwAddress+0x24, injectData, 22, "UInt")
  1915. NumPut(1, injectData, 26, "UInt")
  1916. NumPut(0xC3, injectData, 30, "UChar")
  1917. writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
  1918. if(ErrorLevel)
  1919. return false
  1920. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  1921. if(ErrorLevel)
  1922. return false
  1923. waitForSingleObject(hThread, 0xFFFFFFFF)
  1924. closeProcess(hThread)
  1925. dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_INCHAT_PTR)
  1926. writeMemory(hGTA, dwAddress + 0xC, fX, 4, "Float")
  1927. writeMemory(hGTA, dwAddress + 0x10, fY, 4, "Float")
  1928. writeMemory(hGTA, dwAddress + 0x14, fZ, 4, "Float")
  1929. writeMemory(hGTA, dwAddress + 0x18, fSize, 4, "Float")
  1930. ErrorLevel := ERROR_OK
  1931. return true
  1932. }
  1933. disableCheckpoint()
  1934. {
  1935. if(!checkHandles())
  1936. return false
  1937. dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_INCHAT_PTR)
  1938. if(ErrorLevel || dwAddress==0) {
  1939. ErrorLevel := ERROR_READ_MEMORY
  1940. return false
  1941. }
  1942. VarSetCapacity(enablecp, 4, 0)
  1943. NumPut(0,enablecp,0,"Int")
  1944. writeRaw(hGTA, dwAddress+0x24, &enablecp, 4)
  1945. ErrorLevel := ERROR_OK
  1946. return true
  1947. }
  1948. IsMarkerCreated(){
  1949. If(!checkHandles())
  1950. return false
  1951. active := readMem(hGTA, CheckpointCheck, 1, "byte")
  1952. If(!active)
  1953. return 0
  1954. else return 1
  1955. }
  1956. CoordsFromRedmarker(){
  1957. if(!checkhandles())
  1958. return false
  1959. for i, v in rmaddrs
  1960. f%i% := readFloat(hGTA, v)
  1961. return [f1, f2, f3]
  1962. }
  1963. getCoordinates() {
  1964. if(!checkHandles())
  1965. return ""
  1966. fX := readFloat(hGTA, ADDR_POSITION_X)
  1967. if(ErrorLevel) {
  1968. ErrorLevel := ERROR_READ_MEMORY
  1969. return ""
  1970. }
  1971. fY := readFloat(hGTA, ADDR_POSITION_Y)
  1972. if(ErrorLevel) {
  1973. ErrorLevel := ERROR_READ_MEMORY
  1974. return ""
  1975. }
  1976. fZ := readFloat(hGTA, ADDR_POSITION_Z)
  1977. if(ErrorLevel) {
  1978. ErrorLevel := ERROR_READ_MEMORY
  1979. return ""
  1980. }
  1981. ErrorLevel := ERROR_OK
  1982. return [fX, fY, fZ]
  1983. }
  1984. GetPlayerPos(ByRef fX,ByRef fY,ByRef fZ) {
  1985. if(!checkHandles())
  1986. return 0
  1987. fX := readFloat(hGTA, ADDR_POSITION_X)
  1988. if(ErrorLevel) {
  1989. ErrorLevel := ERROR_READ_MEMORY
  1990. return 0
  1991. }
  1992. fY := readFloat(hGTA, ADDR_POSITION_Y)
  1993. if(ErrorLevel) {
  1994. ErrorLevel := ERROR_READ_MEMORY
  1995. return 0
  1996. }
  1997. fZ := readFloat(hGTA, ADDR_POSITION_Z)
  1998. if(ErrorLevel) {
  1999. ErrorLevel := ERROR_READ_MEMORY
  2000. return 0
  2001. }
  2002. ErrorLevel := ERROR_OK
  2003. }
  2004. getDialogStructPtr() {
  2005. if (!checkHandles()) {
  2006. ErrorLevel := ERROR_INVALID_HANDLE
  2007. return false
  2008. }
  2009. dwPointer := readDWORD(hGTA, dwSAMP + SAMP_DIALOG_STRUCT_PTR)
  2010. if (ErrorLevel) {
  2011. ErrorLevel := ERROR_READ_MEMORY
  2012. return false
  2013. }
  2014. ErrorLevel := ERROR_OK
  2015. return dwPointer
  2016. }
  2017. isDialogOpen() {
  2018. dwPointer := getDialogStructPtr()
  2019. if (ErrorLevel || !dwPointer)
  2020. return false
  2021. dwIsOpen := readMem(hGTA, dwPointer + SAMP_DIALOG_OPEN_OFFSET, 4, "UInt")
  2022. if (ErrorLevel) {
  2023. ErrorLevel := ERROR_READ_MEMORY
  2024. return false
  2025. }
  2026. ErrorLevel := ERROR_OK
  2027. return dwIsOpen ? true : false
  2028. }
  2029. getDialogStyle() {
  2030. dwPointer := getDialogStructPtr()
  2031. if (ErrorLevel || !dwPointer)
  2032. return -1
  2033. style := readMem(hGTA, dwPointer + SAMP_DIALOG_STYLE_OFFSET, 4, "UInt")
  2034. if (ErrorLevel) {
  2035. ErrorLevel := ERROR_READ_MEMORY
  2036. return -1
  2037. }
  2038. ErrorLevel := ERROR_OK
  2039. return style
  2040. }
  2041. getDialogID() {
  2042. dwPointer := getDialogStructPtr()
  2043. if (ErrorLevel || !dwPointer)
  2044. return -1
  2045. id := readMem(hGTA, dwPointer + SAMP_DIALOG_ID_OFFSET, 4, "UInt")
  2046. if (ErrorLevel) {
  2047. ErrorLevel := ERROR_READ_MEMORY
  2048. return -1
  2049. }
  2050. ErrorLevel := ERROR_OK
  2051. return id
  2052. }
  2053. setDialogID(id) {
  2054. dwPointer := getDialogStructPtr()
  2055. if (ErrorLevel || !dwPointer)
  2056. return false
  2057. writeMemory(hGTA, dwPointer + SAMP_DIALOG_ID_OFFSET, id, "UInt", 4)
  2058. if (ErrorLevel) {
  2059. ErrorLevel := ERROR_WRITE_MEMORY
  2060. return false
  2061. }
  2062. ErrorLevel := ERROR_OK
  2063. return true
  2064. }
  2065. getDialogIndex() {
  2066. dwPointer := getDialogStructPtr()
  2067. if (ErrorLevel || !dwPointer)
  2068. return 0
  2069. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR1_OFFSET)
  2070. if (ErrorLevel) {
  2071. ErrorLevel := ERROR_READ_MEMORY
  2072. return 0
  2073. }
  2074. index := readMem(hGTA, dwPointer + SAMP_DIALOG_INDEX_OFFSET, 1, "Byte")
  2075. if (ErrorLevel) {
  2076. ErrorLevel := ERROR_READ_MEMORY
  2077. return 0
  2078. }
  2079. ErrorLevel := ERROR_OK
  2080. return index + 1
  2081. }
  2082. getDialogCaption() {
  2083. dwPointer := getDialogStructPtr()
  2084. if (ErrorLevel || !dwPointer)
  2085. return ""
  2086. text := readString(hGTA, dwPointer + SAMP_DIALOG_CAPTION_OFFSET, 64)
  2087. if (ErrorLevel) {
  2088. ErrorLevel := ERROR_READ_MEMORY
  2089. return ""
  2090. }
  2091. ErrorLevel := ERROR_OK
  2092. return text
  2093. }
  2094. getDialogTextSize(dwAddress) {
  2095. i := 0
  2096. Loop, 4096 {
  2097. i := A_Index - 1
  2098. byte := Memory_ReadByte(hGTA, dwAddress + i)
  2099. if (!byte)
  2100. break
  2101. }
  2102. return i
  2103. }
  2104. getDialogText() {
  2105. dwPointer := getDialogStructPtr()
  2106. if (ErrorLevel || !dwPointer)
  2107. return ""
  2108. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_TEXT_PTR_OFFSET)
  2109. if (ErrorLevel) {
  2110. ErrorLevel := ERROR_READ_MEMORY
  2111. return ""
  2112. }
  2113. text := readString(hGTA, dwPointer, 4096)
  2114. if (ErrorLevel) {
  2115. text := readString(hGTA, dwPointer, getDialogTextSize(dwPointer))
  2116. if (ErrorLevel) {
  2117. ErrorLevel := ERROR_READ_MEMORY
  2118. return ""
  2119. }
  2120. }
  2121. ErrorLevel := ERROR_OK
  2122. return text
  2123. }
  2124. getDialogLineCount() {
  2125. dwPointer := getDialogStructPtr()
  2126. if (ErrorLevel || !dwPointer)
  2127. return 0
  2128. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR2_OFFSET)
  2129. if (ErrorLevel) {
  2130. ErrorLevel := ERROR_READ_MEMORY
  2131. return 0
  2132. }
  2133. count := readMem(hGTA, dwPointer + SAMP_DIALOG_LINECOUNT_OFFSET, 4, "UInt")
  2134. if (ErrorLevel) {
  2135. ErrorLevel := ERROR_READ_MEMORY
  2136. return 0
  2137. }
  2138. ErrorLevel := ERROR_OK
  2139. return count
  2140. }
  2141. getDialogLine__(index) {
  2142. if (getDialogLineCount > index)
  2143. return ""
  2144. dwPointer := getDialogStructPtr()
  2145. if (ErrorLevel || !dwPointer)
  2146. return ""
  2147. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR1_OFFSET)
  2148. if (ErrorLevel) {
  2149. ErrorLevel := ERROR_READ_MEMORY
  2150. return ""
  2151. }
  2152. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_LINES_OFFSET)
  2153. if (ErrorLevel) {
  2154. ErrorLevel := ERROR_READ_MEMORY
  2155. return ""
  2156. }
  2157. dwLineAddress := readDWORD(hGTA, dwPointer + (index - 1) * 0x4)
  2158. line := readString(hGTA, dwLineAddress, 128)
  2159. ErrorLevel := ERROR_OK
  2160. return line
  2161. }
  2162. getDialogLine(index) {
  2163. lines := getDialogLines()
  2164. if (index > lines.Length())
  2165. return ""
  2166. if (getDialogStyle() == DIALOG_STYLE_TABLIST_HEADERS)
  2167. index++
  2168. return lines[index]
  2169. }
  2170. getDialogLines() {
  2171. text := getDialogText()
  2172. if (text == "")
  2173. return -1
  2174. lines := StrSplit(text, "`n")
  2175. return lines
  2176. }
  2177. isDialogButton1Selected() {
  2178. dwPointer := getDialogStructPtr()
  2179. if (ErrorLevel || !dwPointer)
  2180. return false
  2181. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR1_OFFSET)
  2182. if (ErrorLevel) {
  2183. ErrorLevel := ERROR_READ_MEMORY
  2184. return false
  2185. }
  2186. selected := readMem(hGTA, dwPointer + SAMP_DIALOG_BUTTON_HOVERING_OFFSET, 1, "Byte")
  2187. if (ErrorLevel) {
  2188. ErrorLevel := ERROR_READ_MEMORY
  2189. return false
  2190. }
  2191. ErrorLevel := ERROR_OK
  2192. return selected
  2193. }
  2194. getDialogLines__() {
  2195. count := getDialogLineCount()
  2196. dwPointer := getDialogStructPtr()
  2197. if (ErrorLevel || !dwPointer)
  2198. return -1
  2199. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR1_OFFSET)
  2200. if (ErrorLevel) {
  2201. ErrorLevel := ERROR_READ_MEMORY
  2202. return -1
  2203. }
  2204. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_LINES_OFFSET)
  2205. if (ErrorLevel) {
  2206. ErrorLevel := ERROR_READ_MEMORY
  2207. return -1
  2208. }
  2209. lines := []
  2210. Loop %count% {
  2211. dwLineAddress := readDWORD(hGTA, dwPointer + (A_Index - 1) * 0x4)
  2212. lines[A_Index] := readString(hGTA, dwLineAddress, 128)
  2213. }
  2214. ErrorLevel := ERROR_OK
  2215. return lines
  2216. }
  2217. showDialog(style, caption, text, button1, button2 := "", id := 1) {
  2218. style += 0
  2219. style := Floor(style)
  2220. id += 0
  2221. id := Floor(id)
  2222. caption := "" caption
  2223. text := "" text
  2224. button1 := "" button1
  2225. button2 := "" button2
  2226. if (id < 0 || id > 32767 || style < 0 || style > 5 || StrLen(caption) > 128 || StrLen(text) > 4096 || StrLen(button1) > 10 || StrLen(button2) > 10)
  2227. return false
  2228. if (!checkHandles())
  2229. return false
  2230. dwFunc := dwSAMP + FUNC_SAMP_SHOWDIALOG
  2231. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_DIALOG_STRUCT_PTR)
  2232. if (ErrorLevel || !dwAddress) {
  2233. ErrorLevel := ERROR_READ_MEMORY
  2234. return false
  2235. }
  2236. writeString(hGTA, pParam5, caption)
  2237. if (ErrorLevel)
  2238. return false
  2239. writeString(hGTA, pParam1, text)
  2240. if (ErrorLevel)
  2241. return false
  2242. writeString(hGTA, pParam5 + 512, button1)
  2243. if (ErrorLevel)
  2244. return false
  2245. writeString(hGTA, pParam5+StrLen(caption) + 1, button2)
  2246. if (ErrorLevel)
  2247. return false
  2248. dwLen := 5 + 7 * 5 + 5 + 1
  2249. VarSetCapacity(injectData, dwLen, 0)
  2250. NumPut(0xB9, injectData, 0, "UChar")
  2251. NumPut(dwAddress, injectData, 1, "UInt")
  2252. NumPut(0x68, injectData, 5, "UChar")
  2253. NumPut(1, injectData, 6, "UInt")
  2254. NumPut(0x68, injectData, 10, "UChar")
  2255. NumPut(pParam5 + StrLen(caption) + 1, injectData, 11, "UInt")
  2256. NumPut(0x68, injectData, 15, "UChar")
  2257. NumPut(pParam5 + 512, injectData, 16, "UInt")
  2258. NumPut(0x68, injectData, 20, "UChar")
  2259. NumPut(pParam1, injectData, 21, "UInt")
  2260. NumPut(0x68, injectData, 25, "UChar")
  2261. NumPut(pParam5, injectData, 26, "UInt")
  2262. NumPut(0x68, injectData, 30, "UChar")
  2263. NumPut(style, injectData, 31, "UInt")
  2264. NumPut(0x68, injectData, 35, "UChar")
  2265. NumPut(id, injectData, 36, "UInt")
  2266. NumPut(0xE8, injectData, 40, "UChar")
  2267. offset := dwFunc - (pInjectFunc + 45)
  2268. NumPut(offset, injectData, 41, "Int")
  2269. NumPut(0xC3, injectData, 45, "UChar")
  2270. writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
  2271. if (ErrorLevel)
  2272. return false
  2273. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  2274. if (ErrorLevel)
  2275. return false
  2276. waitForSingleObject(hThread, 0xFFFFFFFF)
  2277. closeProcess(hThread)
  2278. return true
  2279. }
  2280. initZonesAndCities() {
  2281. AddCity("Las Venturas", 685.0, 476.093, -500.0, 3000.0, 3000.0, 500.0)
  2282. AddCity("San Fierro", -3000.0, -742.306, -500.0, -1270.53, 1530.24, 500.0)
  2283. AddCity("San Fierro", -1270.53, -402.481, -500.0, -1038.45, 832.495, 500.0)
  2284. AddCity("San Fierro", -1038.45, -145.539, -500.0, -897.546, 376.632, 500.0)
  2285. AddCity("Los Santos", 480.0, -3000.0, -500.0, 3000.0, -850.0, 500.0)
  2286. AddCity("Los Santos", 80.0, -2101.61, -500.0, 1075.0, -1239.61, 500.0)
  2287. AddCity("Tierra Robada", -1213.91, 596.349, -242.99, -480.539, 1659.68, 900.0)
  2288. AddCity("Red County", -1213.91, -768.027, -242.99, 2997.06, 596.349, 900.0)
  2289. AddCity("Flint County", -1213.91, -2892.97, -242.99, 44.6147, -768.027, 900.0)
  2290. AddCity("Whetstone", -2997.47, -2892.97, -242.99, -1213.91, -1115.58, 900.0)
  2291. AddZone("Avispa Country Club", -2667.810, -302.135, -28.831, -2646.400, -262.320, 71.169)
  2292. AddZone("Easter Bay Airport", -1315.420, -405.388, 15.406, -1264.400, -209.543, 25.406)
  2293. AddZone("Avispa Country Club", -2550.040, -355.493, 0.000, -2470.040, -318.493, 39.700)
  2294. AddZone("Easter Bay Airport", -1490.330, -209.543, 15.406, -1264.400, -148.388, 25.406)
  2295. AddZone("Garcia", -2395.140, -222.589, -5.3, -2354.090, -204.792, 200.000)
  2296. AddZone("Shady Cabin", -1632.830, -2263.440, -3.0, -1601.330, -2231.790, 200.000)
  2297. AddZone("East Los Santos", 2381.680, -1494.030, -89.084, 2421.030, -1454.350, 110.916)
  2298. AddZone("LVA Freight Depot", 1236.630, 1163.410, -89.084, 1277.050, 1203.280, 110.916)
  2299. AddZone("Blackfield Intersection", 1277.050, 1044.690, -89.084, 1315.350, 1087.630, 110.916)
  2300. AddZone("Avispa Country Club", -2470.040, -355.493, 0.000, -2270.040, -318.493, 46.100)
  2301. AddZone("Temple", 1252.330, -926.999, -89.084, 1357.000, -910.170, 110.916)
  2302. AddZone("Unity Station", 1692.620, -1971.800, -20.492, 1812.620, -1932.800, 79.508)
  2303. AddZone("LVA Freight Depot", 1315.350, 1044.690, -89.084, 1375.600, 1087.630, 110.916)
  2304. AddZone("Los Flores", 2581.730, -1454.350, -89.084, 2632.830, -1393.420, 110.916)
  2305. AddZone("Starfish Casino", 2437.390, 1858.100, -39.084, 2495.090, 1970.850, 60.916)
  2306. AddZone("Easter Bay Chemicals", -1132.820, -787.391, 0.000, -956.476, -768.027, 200.000)
  2307. AddZone("Downtown Los Santos", 1370.850, -1170.870, -89.084, 1463.900, -1130.850, 110.916)
  2308. AddZone("Esplanade East", -1620.300, 1176.520, -4.5, -1580.010, 1274.260, 200.000)
  2309. AddZone("Market Station", 787.461, -1410.930, -34.126, 866.009, -1310.210, 65.874)
  2310. AddZone("Linden Station", 2811.250, 1229.590, -39.594, 2861.250, 1407.590, 60.406)
  2311. AddZone("Montgomery Intersection", 1582.440, 347.457, 0.000, 1664.620, 401.750, 200.000)
  2312. AddZone("Frederick Bridge", 2759.250, 296.501, 0.000, 2774.250, 594.757, 200.000)
  2313. AddZone("Yellow Bell Station", 1377.480, 2600.430, -21.926, 1492.450, 2687.360, 78.074)
  2314. AddZone("Downtown Los Santos", 1507.510, -1385.210, 110.916, 1582.550, -1325.310, 335.916)
  2315. AddZone("Jefferson", 2185.330, -1210.740, -89.084, 2281.450, -1154.590, 110.916)
  2316. AddZone("Mulholland", 1318.130, -910.170, -89.084, 1357.000, -768.027, 110.916)
  2317. AddZone("Avispa Country Club", -2361.510, -417.199, 0.000, -2270.040, -355.493, 200.000)
  2318. AddZone("Jefferson", 1996.910, -1449.670, -89.084, 2056.860, -1350.720, 110.916)
  2319. AddZone("Julius Thruway West", 1236.630, 2142.860, -89.084, 1297.470, 2243.230, 110.916)
  2320. AddZone("Jefferson", 2124.660, -1494.030, -89.084, 2266.210, -1449.670, 110.916)
  2321. AddZone("Julius Thruway North", 1848.400, 2478.490, -89.084, 1938.800, 2553.490, 110.916)
  2322. AddZone("Rodeo", 422.680, -1570.200, -89.084, 466.223, -1406.050, 110.916)
  2323. AddZone("Cranberry Station", -2007.830, 56.306, 0.000, -1922.000, 224.782, 100.000)
  2324. AddZone("Downtown Los Santos", 1391.050, -1026.330, -89.084, 1463.900, -926.999, 110.916)
  2325. AddZone("Redsands West", 1704.590, 2243.230, -89.084, 1777.390, 2342.830, 110.916)
  2326. AddZone("Little Mexico", 1758.900, -1722.260, -89.084, 1812.620, -1577.590, 110.916)
  2327. AddZone("Blackfield Intersection", 1375.600, 823.228, -89.084, 1457.390, 919.447, 110.916)
  2328. AddZone("Los Santos International", 1974.630, -2394.330, -39.084, 2089.000, -2256.590, 60.916)
  2329. AddZone("Beacon Hill", -399.633, -1075.520, -1.489, -319.033, -977.516, 198.511)
  2330. AddZone("Rodeo", 334.503, -1501.950, -89.084, 422.680, -1406.050, 110.916)
  2331. AddZone("Richman", 225.165, -1369.620, -89.084, 334.503, -1292.070, 110.916)
  2332. AddZone("Downtown Los Santos", 1724.760, -1250.900, -89.084, 1812.620, -1150.870, 110.916)
  2333. AddZone("The Strip", 2027.400, 1703.230, -89.084, 2137.400, 1783.230, 110.916)
  2334. AddZone("Downtown Los Santos", 1378.330, -1130.850, -89.084, 1463.900, -1026.330, 110.916)
  2335. AddZone("Blackfield Intersection", 1197.390, 1044.690, -89.084, 1277.050, 1163.390, 110.916)
  2336. AddZone("Conference Center", 1073.220, -1842.270, -89.084, 1323.900, -1804.210, 110.916)
  2337. AddZone("Montgomery", 1451.400, 347.457, -6.1, 1582.440, 420.802, 200.000)
  2338. AddZone("Foster Valley", -2270.040, -430.276, -1.2, -2178.690, -324.114, 200.000)
  2339. AddZone("Blackfield Chapel", 1325.600, 596.349, -89.084, 1375.600, 795.010, 110.916)
  2340. AddZone("Los Santos International", 2051.630, -2597.260, -39.084, 2152.450, -2394.330, 60.916)
  2341. AddZone("Mulholland", 1096.470, -910.170, -89.084, 1169.130, -768.027, 110.916)
  2342. AddZone("Yellow Bell Gol Course", 1457.460, 2723.230, -89.084, 1534.560, 2863.230, 110.916)
  2343. AddZone("The Strip", 2027.400, 1783.230, -89.084, 2162.390, 1863.230, 110.916)
  2344. AddZone("Jefferson", 2056.860, -1210.740, -89.084, 2185.330, -1126.320, 110.916)
  2345. AddZone("Mulholland", 952.604, -937.184, -89.084, 1096.470, -860.619, 110.916)
  2346. AddZone("Aldea Malvada", -1372.140, 2498.520, 0.000, -1277.590, 2615.350, 200.000)
  2347. AddZone("Las Colinas", 2126.860, -1126.320, -89.084, 2185.330, -934.489, 110.916)
  2348. AddZone("Las Colinas", 1994.330, -1100.820, -89.084, 2056.860, -920.815, 110.916)
  2349. AddZone("Richman", 647.557, -954.662, -89.084, 768.694, -860.619, 110.916)
  2350. AddZone("LVA Freight Depot", 1277.050, 1087.630, -89.084, 1375.600, 1203.280, 110.916)
  2351. AddZone("Julius Thruway North", 1377.390, 2433.230, -89.084, 1534.560, 2507.230, 110.916)
  2352. AddZone("Willowfield", 2201.820, -2095.000, -89.084, 2324.000, -1989.900, 110.916)
  2353. AddZone("Julius Thruway North", 1704.590, 2342.830, -89.084, 1848.400, 2433.230, 110.916)
  2354. AddZone("Temple", 1252.330, -1130.850, -89.084, 1378.330, -1026.330, 110.916)
  2355. AddZone("Little Mexico", 1701.900, -1842.270, -89.084, 1812.620, -1722.260, 110.916)
  2356. AddZone("Queens", -2411.220, 373.539, 0.000, -2253.540, 458.411, 200.000)
  2357. AddZone("Las Venturas Airport", 1515.810, 1586.400, -12.500, 1729.950, 1714.560, 87.500)
  2358. AddZone("Richman", 225.165, -1292.070, -89.084, 466.223, -1235.070, 110.916)
  2359. AddZone("Temple", 1252.330, -1026.330, -89.084, 1391.050, -926.999, 110.916)
  2360. AddZone("East Los Santos", 2266.260, -1494.030, -89.084, 2381.680, -1372.040, 110.916)
  2361. AddZone("Julius Thruway East", 2623.180, 943.235, -89.084, 2749.900, 1055.960, 110.916)
  2362. AddZone("Willowfield", 2541.700, -1941.400, -89.084, 2703.580, -1852.870, 110.916)
  2363. AddZone("Las Colinas", 2056.860, -1126.320, -89.084, 2126.860, -920.815, 110.916)
  2364. AddZone("Julius Thruway East", 2625.160, 2202.760, -89.084, 2685.160, 2442.550, 110.916)
  2365. AddZone("Rodeo", 225.165, -1501.950, -89.084, 334.503, -1369.620, 110.916)
  2366. AddZone("Las Brujas", -365.167, 2123.010, -3.0, -208.570, 2217.680, 200.000)
  2367. AddZone("Julius Thruway East", 2536.430, 2442.550, -89.084, 2685.160, 2542.550, 110.916)
  2368. AddZone("Rodeo", 334.503, -1406.050, -89.084, 466.223, -1292.070, 110.916)
  2369. AddZone("Vinewood", 647.557, -1227.280, -89.084, 787.461, -1118.280, 110.916)
  2370. AddZone("Rodeo", 422.680, -1684.650, -89.084, 558.099, -1570.200, 110.916)
  2371. AddZone("Julius Thruway North", 2498.210, 2542.550, -89.084, 2685.160, 2626.550, 110.916)
  2372. AddZone("Downtown Los Santos", 1724.760, -1430.870, -89.084, 1812.620, -1250.900, 110.916)
  2373. AddZone("Rodeo", 225.165, -1684.650, -89.084, 312.803, -1501.950, 110.916)
  2374. AddZone("Jefferson", 2056.860, -1449.670, -89.084, 2266.210, -1372.040, 110.916)
  2375. AddZone("Hampton Barns", 603.035, 264.312, 0.000, 761.994, 366.572, 200.000)
  2376. AddZone("Temple", 1096.470, -1130.840, -89.084, 1252.330, -1026.330, 110.916)
  2377. AddZone("Kincaid Bridge", -1087.930, 855.370, -89.084, -961.950, 986.281, 110.916)
  2378. AddZone("Verona Beach", 1046.150, -1722.260, -89.084, 1161.520, -1577.590, 110.916)
  2379. AddZone("Commerce", 1323.900, -1722.260, -89.084, 1440.900, -1577.590, 110.916)
  2380. AddZone("Mulholland", 1357.000, -926.999, -89.084, 1463.900, -768.027, 110.916)
  2381. AddZone("Rodeo", 466.223, -1570.200, -89.084, 558.099, -1385.070, 110.916)
  2382. AddZone("Mulholland", 911.802, -860.619, -89.084, 1096.470, -768.027, 110.916)
  2383. AddZone("Mulholland", 768.694, -954.662, -89.084, 952.604, -860.619, 110.916)
  2384. AddZone("Julius Thruway South", 2377.390, 788.894, -89.084, 2537.390, 897.901, 110.916)
  2385. AddZone("Idlewood", 1812.620, -1852.870, -89.084, 1971.660, -1742.310, 110.916)
  2386. AddZone("Ocean Docks", 2089.000, -2394.330, -89.084, 2201.820, -2235.840, 110.916)
  2387. AddZone("Commerce", 1370.850, -1577.590, -89.084, 1463.900, -1384.950, 110.916)
  2388. AddZone("Julius Thruway North", 2121.400, 2508.230, -89.084, 2237.400, 2663.170, 110.916)
  2389. AddZone("Temple", 1096.470, -1026.330, -89.084, 1252.330, -910.170, 110.916)
  2390. AddZone("Glen Park", 1812.620, -1449.670, -89.084, 1996.910, -1350.720, 110.916)
  2391. AddZone("Easter Bay Airport", -1242.980, -50.096, 0.000, -1213.910, 578.396, 200.000)
  2392. AddZone("Martin Bridge", -222.179, 293.324, 0.000, -122.126, 476.465, 200.000)
  2393. AddZone("The Strip", 2106.700, 1863.230, -89.084, 2162.390, 2202.760, 110.916)
  2394. AddZone("Willowfield", 2541.700, -2059.230, -89.084, 2703.580, -1941.400, 110.916)
  2395. AddZone("Marina", 807.922, -1577.590, -89.084, 926.922, -1416.250, 110.916)
  2396. AddZone("Las Venturas Airport", 1457.370, 1143.210, -89.084, 1777.400, 1203.280, 110.916)
  2397. AddZone("Idlewood", 1812.620, -1742.310, -89.084, 1951.660, -1602.310, 110.916)
  2398. AddZone("Esplanade East", -1580.010, 1025.980, -6.1, -1499.890, 1274.260, 200.000)
  2399. AddZone("Downtown Los Santos", 1370.850, -1384.950, -89.084, 1463.900, -1170.870, 110.916)
  2400. AddZone("The Mako Span", 1664.620, 401.750, 0.000, 1785.140, 567.203, 200.000)
  2401. AddZone("Rodeo", 312.803, -1684.650, -89.084, 422.680, -1501.950, 110.916)
  2402. AddZone("Pershing Square", 1440.900, -1722.260, -89.084, 1583.500, -1577.590, 110.916)
  2403. AddZone("Mulholland", 687.802, -860.619, -89.084, 911.802, -768.027, 110.916)
  2404. AddZone("Gant Bridge", -2741.070, 1490.470, -6.1, -2616.400, 1659.680, 200.000)
  2405. AddZone("Las Colinas", 2185.330, -1154.590, -89.084, 2281.450, -934.489, 110.916)
  2406. AddZone("Mulholland", 1169.130, -910.170, -89.084, 1318.130, -768.027, 110.916)
  2407. AddZone("Julius Thruway North", 1938.800, 2508.230, -89.084, 2121.400, 2624.230, 110.916)
  2408. AddZone("Commerce", 1667.960, -1577.590, -89.084, 1812.620, -1430.870, 110.916)
  2409. AddZone("Rodeo", 72.648, -1544.170, -89.084, 225.165, -1404.970, 110.916)
  2410. AddZone("Roca Escalante", 2536.430, 2202.760, -89.084, 2625.160, 2442.550, 110.916)
  2411. AddZone("Rodeo", 72.648, -1684.650, -89.084, 225.165, -1544.170, 110.916)
  2412. AddZone("Market", 952.663, -1310.210, -89.084, 1072.660, -1130.850, 110.916)
  2413. AddZone("Las Colinas", 2632.740, -1135.040, -89.084, 2747.740, -945.035, 110.916)
  2414. AddZone("Mulholland", 861.085, -674.885, -89.084, 1156.550, -600.896, 110.916)
  2415. AddZone("King's", -2253.540, 373.539, -9.1, -1993.280, 458.411, 200.000)
  2416. AddZone("Redsands East", 1848.400, 2342.830, -89.084, 2011.940, 2478.490, 110.916)
  2417. AddZone("Downtown", -1580.010, 744.267, -6.1, -1499.890, 1025.980, 200.000)
  2418. AddZone("Conference Center", 1046.150, -1804.210, -89.084, 1323.900, -1722.260, 110.916)
  2419. AddZone("Richman", 647.557, -1118.280, -89.084, 787.461, -954.662, 110.916)
  2420. AddZone("Ocean Flats", -2994.490, 277.411, -9.1, -2867.850, 458.411, 200.000)
  2421. AddZone("Greenglass College", 964.391, 930.890, -89.084, 1166.530, 1044.690, 110.916)
  2422. AddZone("Glen Park", 1812.620, -1100.820, -89.084, 1994.330, -973.380, 110.916)
  2423. AddZone("LVA Freight Depot", 1375.600, 919.447, -89.084, 1457.370, 1203.280, 110.916)
  2424. AddZone("Regular Tom", -405.770, 1712.860, -3.0, -276.719, 1892.750, 200.000)
  2425. AddZone("Verona Beach", 1161.520, -1722.260, -89.084, 1323.900, -1577.590, 110.916)
  2426. AddZone("East Los Santos", 2281.450, -1372.040, -89.084, 2381.680, -1135.040, 110.916)
  2427. AddZone("Caligula's Palace", 2137.400, 1703.230, -89.084, 2437.390, 1783.230, 110.916)
  2428. AddZone("Idlewood", 1951.660, -1742.310, -89.084, 2124.660, -1602.310, 110.916)
  2429. AddZone("Pilgrim", 2624.400, 1383.230, -89.084, 2685.160, 1783.230, 110.916)
  2430. AddZone("Idlewood", 2124.660, -1742.310, -89.084, 2222.560, -1494.030, 110.916)
  2431. AddZone("Queens", -2533.040, 458.411, 0.000, -2329.310, 578.396, 200.000)
  2432. AddZone("Downtown", -1871.720, 1176.420, -4.5, -1620.300, 1274.260, 200.000)
  2433. AddZone("Commerce", 1583.500, -1722.260, -89.084, 1758.900, -1577.590, 110.916)
  2434. AddZone("East Los Santos", 2381.680, -1454.350, -89.084, 2462.130, -1135.040, 110.916)
  2435. AddZone("Marina", 647.712, -1577.590, -89.084, 807.922, -1416.250, 110.916)
  2436. AddZone("Richman", 72.648, -1404.970, -89.084, 225.165, -1235.070, 110.916)
  2437. AddZone("Vinewood", 647.712, -1416.250, -89.084, 787.461, -1227.280, 110.916)
  2438. AddZone("East Los Santos", 2222.560, -1628.530, -89.084, 2421.030, -1494.030, 110.916)
  2439. AddZone("Rodeo", 558.099, -1684.650, -89.084, 647.522, -1384.930, 110.916)
  2440. AddZone("Easter Tunnel", -1709.710, -833.034, -1.5, -1446.010, -730.118, 200.000)
  2441. AddZone("Rodeo", 466.223, -1385.070, -89.084, 647.522, -1235.070, 110.916)
  2442. AddZone("Redsands East", 1817.390, 2202.760, -89.084, 2011.940, 2342.830, 110.916)
  2443. AddZone("The Clown's Pocket", 2162.390, 1783.230, -89.084, 2437.390, 1883.230, 110.916)
  2444. AddZone("Idlewood", 1971.660, -1852.870, -89.084, 2222.560, -1742.310, 110.916)
  2445. AddZone("Montgomery Intersection", 1546.650, 208.164, 0.000, 1745.830, 347.457, 200.000)
  2446. AddZone("Willowfield", 2089.000, -2235.840, -89.084, 2201.820, -1989.900, 110.916)
  2447. AddZone("Temple", 952.663, -1130.840, -89.084, 1096.470, -937.184, 110.916)
  2448. AddZone("Prickle Pine", 1848.400, 2553.490, -89.084, 1938.800, 2863.230, 110.916)
  2449. AddZone("Los Santos International", 1400.970, -2669.260, -39.084, 2189.820, -2597.260, 60.916)
  2450. AddZone("Garver Bridge", -1213.910, 950.022, -89.084, -1087.930, 1178.930, 110.916)
  2451. AddZone("Garver Bridge", -1339.890, 828.129, -89.084, -1213.910, 1057.040, 110.916)
  2452. AddZone("Kincaid Bridge", -1339.890, 599.218, -89.084, -1213.910, 828.129, 110.916)
  2453. AddZone("Kincaid Bridge", -1213.910, 721.111, -89.084, -1087.930, 950.022, 110.916)
  2454. AddZone("Verona Beach", 930.221, -2006.780, -89.084, 1073.220, -1804.210, 110.916)
  2455. AddZone("Verdant Bluffs", 1073.220, -2006.780, -89.084, 1249.620, -1842.270, 110.916)
  2456. AddZone("Vinewood", 787.461, -1130.840, -89.084, 952.604, -954.662, 110.916)
  2457. AddZone("Vinewood", 787.461, -1310.210, -89.084, 952.663, -1130.840, 110.916)
  2458. AddZone("Commerce", 1463.900, -1577.590, -89.084, 1667.960, -1430.870, 110.916)
  2459. AddZone("Market", 787.461, -1416.250, -89.084, 1072.660, -1310.210, 110.916)
  2460. AddZone("Rockshore West", 2377.390, 596.349, -89.084, 2537.390, 788.894, 110.916)
  2461. AddZone("Julius Thruway North", 2237.400, 2542.550, -89.084, 2498.210, 2663.170, 110.916)
  2462. AddZone("East Beach", 2632.830, -1668.130, -89.084, 2747.740, -1393.420, 110.916)
  2463. AddZone("Fallow Bridge", 434.341, 366.572, 0.000, 603.035, 555.680, 200.000)
  2464. AddZone("Willowfield", 2089.000, -1989.900, -89.084, 2324.000, -1852.870, 110.916)
  2465. AddZone("Chinatown", -2274.170, 578.396, -7.6, -2078.670, 744.170, 200.000)
  2466. AddZone("El Castillo del Diablo", -208.570, 2337.180, 0.000, 8.430, 2487.180, 200.000)
  2467. AddZone("Ocean Docks", 2324.000, -2145.100, -89.084, 2703.580, -2059.230, 110.916)
  2468. AddZone("Easter Bay Chemicals", -1132.820, -768.027, 0.000, -956.476, -578.118, 200.000)
  2469. AddZone("The Visage", 1817.390, 1703.230, -89.084, 2027.400, 1863.230, 110.916)
  2470. AddZone("Ocean Flats", -2994.490, -430.276, -1.2, -2831.890, -222.589, 200.000)
  2471. AddZone("Richman", 321.356, -860.619, -89.084, 687.802, -768.027, 110.916)
  2472. AddZone("Green Palms", 176.581, 1305.450, -3.0, 338.658, 1520.720, 200.000)
  2473. AddZone("Richman", 321.356, -768.027, -89.084, 700.794, -674.885, 110.916)
  2474. AddZone("Starfish Casino", 2162.390, 1883.230, -89.084, 2437.390, 2012.180, 110.916)
  2475. AddZone("East Beach", 2747.740, -1668.130, -89.084, 2959.350, -1498.620, 110.916)
  2476. AddZone("Jefferson", 2056.860, -1372.040, -89.084, 2281.450, -1210.740, 110.916)
  2477. AddZone("Downtown Los Santos", 1463.900, -1290.870, -89.084, 1724.760, -1150.870, 110.916)
  2478. AddZone("Downtown Los Santos", 1463.900, -1430.870, -89.084, 1724.760, -1290.870, 110.916)
  2479. AddZone("Garver Bridge", -1499.890, 696.442, -179.615, -1339.890, 925.353, 20.385)
  2480. AddZone("Julius Thruway South", 1457.390, 823.228, -89.084, 2377.390, 863.229, 110.916)
  2481. AddZone("East Los Santos", 2421.030, -1628.530, -89.084, 2632.830, -1454.350, 110.916)
  2482. AddZone("Greenglass College", 964.391, 1044.690, -89.084, 1197.390, 1203.220, 110.916)
  2483. AddZone("Las Colinas", 2747.740, -1120.040, -89.084, 2959.350, -945.035, 110.916)
  2484. AddZone("Mulholland", 737.573, -768.027, -89.084, 1142.290, -674.885, 110.916)
  2485. AddZone("Ocean Docks", 2201.820, -2730.880, -89.084, 2324.000, -2418.330, 110.916)
  2486. AddZone("East Los Santos", 2462.130, -1454.350, -89.084, 2581.730, -1135.040, 110.916)
  2487. AddZone("Ganton", 2222.560, -1722.330, -89.084, 2632.830, -1628.530, 110.916)
  2488. AddZone("Avispa Country Club", -2831.890, -430.276, -6.1, -2646.400, -222.589, 200.000)
  2489. AddZone("Willowfield", 1970.620, -2179.250, -89.084, 2089.000, -1852.870, 110.916)
  2490. AddZone("Esplanade North", -1982.320, 1274.260, -4.5, -1524.240, 1358.900, 200.000)
  2491. AddZone("The High Roller", 1817.390, 1283.230, -89.084, 2027.390, 1469.230, 110.916)
  2492. AddZone("Ocean Docks", 2201.820, -2418.330, -89.084, 2324.000, -2095.000, 110.916)
  2493. AddZone("Last Dime Motel", 1823.080, 596.349, -89.084, 1997.220, 823.228, 110.916)
  2494. AddZone("Bayside Marina", -2353.170, 2275.790, 0.000, -2153.170, 2475.790, 200.000)
  2495. AddZone("King's", -2329.310, 458.411, -7.6, -1993.280, 578.396, 200.000)
  2496. AddZone("El Corona", 1692.620, -2179.250, -89.084, 1812.620, -1842.270, 110.916)
  2497. AddZone("Blackfield Chapel", 1375.600, 596.349, -89.084, 1558.090, 823.228, 110.916)
  2498. AddZone("The Pink Swan", 1817.390, 1083.230, -89.084, 2027.390, 1283.230, 110.916)
  2499. AddZone("Julius Thruway West", 1197.390, 1163.390, -89.084, 1236.630, 2243.230, 110.916)
  2500. AddZone("Los Flores", 2581.730, -1393.420, -89.084, 2747.740, -1135.040, 110.916)
  2501. AddZone("The Visage", 1817.390, 1863.230, -89.084, 2106.700, 2011.830, 110.916)
  2502. AddZone("Prickle Pine", 1938.800, 2624.230, -89.084, 2121.400, 2861.550, 110.916)
  2503. AddZone("Verona Beach", 851.449, -1804.210, -89.084, 1046.150, -1577.590, 110.916)
  2504. AddZone("Robada Intersection", -1119.010, 1178.930, -89.084, -862.025, 1351.450, 110.916)
  2505. AddZone("Linden Side", 2749.900, 943.235, -89.084, 2923.390, 1198.990, 110.916)
  2506. AddZone("Ocean Docks", 2703.580, -2302.330, -89.084, 2959.350, -2126.900, 110.916)
  2507. AddZone("Willowfield", 2324.000, -2059.230, -89.084, 2541.700, -1852.870, 110.916)
  2508. AddZone("King's", -2411.220, 265.243, -9.1, -1993.280, 373.539, 200.000)
  2509. AddZone("Commerce", 1323.900, -1842.270, -89.084, 1701.900, -1722.260, 110.916)
  2510. AddZone("Mulholland", 1269.130, -768.027, -89.084, 1414.070, -452.425, 110.916)
  2511. AddZone("Marina", 647.712, -1804.210, -89.084, 851.449, -1577.590, 110.916)
  2512. AddZone("Battery Point", -2741.070, 1268.410, -4.5, -2533.040, 1490.470, 200.000)
  2513. AddZone("The Four Dragons Casino", 1817.390, 863.232, -89.084, 2027.390, 1083.230, 110.916)
  2514. AddZone("Blackfield", 964.391, 1203.220, -89.084, 1197.390, 1403.220, 110.916)
  2515. AddZone("Julius Thruway North", 1534.560, 2433.230, -89.084, 1848.400, 2583.230, 110.916)
  2516. AddZone("Yellow Bell Gol Course", 1117.400, 2723.230, -89.084, 1457.460, 2863.230, 110.916)
  2517. AddZone("Idlewood", 1812.620, -1602.310, -89.084, 2124.660, -1449.670, 110.916)
  2518. AddZone("Redsands West", 1297.470, 2142.860, -89.084, 1777.390, 2243.230, 110.916)
  2519. AddZone("Doherty", -2270.040, -324.114, -1.2, -1794.920, -222.589, 200.000)
  2520. AddZone("Hilltop Farm", 967.383, -450.390, -3.0, 1176.780, -217.900, 200.000)
  2521. AddZone("Las Barrancas", -926.130, 1398.730, -3.0, -719.234, 1634.690, 200.000)
  2522. AddZone("Pirates in Men's Pants", 1817.390, 1469.230, -89.084, 2027.400, 1703.230, 110.916)
  2523. AddZone("City Hall", -2867.850, 277.411, -9.1, -2593.440, 458.411, 200.000)
  2524. AddZone("Avispa Country Club", -2646.400, -355.493, 0.000, -2270.040, -222.589, 200.000)
  2525. AddZone("The Strip", 2027.400, 863.229, -89.084, 2087.390, 1703.230, 110.916)
  2526. AddZone("Hashbury", -2593.440, -222.589, -1.0, -2411.220, 54.722, 200.000)
  2527. AddZone("Los Santos International", 1852.000, -2394.330, -89.084, 2089.000, -2179.250, 110.916)
  2528. AddZone("Whitewood Estates", 1098.310, 1726.220, -89.084, 1197.390, 2243.230, 110.916)
  2529. AddZone("Sherman Reservoir", -789.737, 1659.680, -89.084, -599.505, 1929.410, 110.916)
  2530. AddZone("El Corona", 1812.620, -2179.250, -89.084, 1970.620, -1852.870, 110.916)
  2531. AddZone("Downtown", -1700.010, 744.267, -6.1, -1580.010, 1176.520, 200.000)
  2532. AddZone("Foster Valley", -2178.690, -1250.970, 0.000, -1794.920, -1115.580, 200.000)
  2533. AddZone("Las Payasadas", -354.332, 2580.360, 2.0, -133.625, 2816.820, 200.000)
  2534. AddZone("Valle Ocultado", -936.668, 2611.440, 2.0, -715.961, 2847.900, 200.000)
  2535. AddZone("Blackfield Intersection", 1166.530, 795.010, -89.084, 1375.600, 1044.690, 110.916)
  2536. AddZone("Ganton", 2222.560, -1852.870, -89.084, 2632.830, -1722.330, 110.916)
  2537. AddZone("Easter Bay Airport", -1213.910, -730.118, 0.000, -1132.820, -50.096, 200.000)
  2538. AddZone("Redsands East", 1817.390, 2011.830, -89.084, 2106.700, 2202.760, 110.916)
  2539. AddZone("Esplanade East", -1499.890, 578.396, -79.615, -1339.890, 1274.260, 20.385)
  2540. AddZone("Caligula's Palace", 2087.390, 1543.230, -89.084, 2437.390, 1703.230, 110.916)
  2541. AddZone("Royal Casino", 2087.390, 1383.230, -89.084, 2437.390, 1543.230, 110.916)
  2542. AddZone("Richman", 72.648, -1235.070, -89.084, 321.356, -1008.150, 110.916)
  2543. AddZone("Starfish Casino", 2437.390, 1783.230, -89.084, 2685.160, 2012.180, 110.916)
  2544. AddZone("Mulholland", 1281.130, -452.425, -89.084, 1641.130, -290.913, 110.916)
  2545. AddZone("Downtown", -1982.320, 744.170, -6.1, -1871.720, 1274.260, 200.000)
  2546. AddZone("Hankypanky Point", 2576.920, 62.158, 0.000, 2759.250, 385.503, 200.000)
  2547. AddZone("K.A.C.C. Military Fuels", 2498.210, 2626.550, -89.084, 2749.900, 2861.550, 110.916)
  2548. AddZone("Harry Gold Parkway", 1777.390, 863.232, -89.084, 1817.390, 2342.830, 110.916)
  2549. AddZone("Bayside Tunnel", -2290.190, 2548.290, -89.084, -1950.190, 2723.290, 110.916)
  2550. AddZone("Ocean Docks", 2324.000, -2302.330, -89.084, 2703.580, -2145.100, 110.916)
  2551. AddZone("Richman", 321.356, -1044.070, -89.084, 647.557, -860.619, 110.916)
  2552. AddZone("Randolph Industrial Estate", 1558.090, 596.349, -89.084, 1823.080, 823.235, 110.916)
  2553. AddZone("East Beach", 2632.830, -1852.870, -89.084, 2959.350, -1668.130, 110.916)
  2554. AddZone("Flint Water", -314.426, -753.874, -89.084, -106.339, -463.073, 110.916)
  2555. AddZone("Blueberry", 19.607, -404.136, 3.8, 349.607, -220.137, 200.000)
  2556. AddZone("Linden Station", 2749.900, 1198.990, -89.084, 2923.390, 1548.990, 110.916)
  2557. AddZone("Glen Park", 1812.620, -1350.720, -89.084, 2056.860, -1100.820, 110.916)
  2558. AddZone("Downtown", -1993.280, 265.243, -9.1, -1794.920, 578.396, 200.000)
  2559. AddZone("Redsands West", 1377.390, 2243.230, -89.084, 1704.590, 2433.230, 110.916)
  2560. AddZone("Richman", 321.356, -1235.070, -89.084, 647.522, -1044.070, 110.916)
  2561. AddZone("Gant Bridge", -2741.450, 1659.680, -6.1, -2616.400, 2175.150, 200.000)
  2562. AddZone("Lil' Probe Inn", -90.218, 1286.850, -3.0, 153.859, 1554.120, 200.000)
  2563. AddZone("Flint Intersection", -187.700, -1596.760, -89.084, 17.063, -1276.600, 110.916)
  2564. AddZone("Las Colinas", 2281.450, -1135.040, -89.084, 2632.740, -945.035, 110.916)
  2565. AddZone("Sobell Rail Yards", 2749.900, 1548.990, -89.084, 2923.390, 1937.250, 110.916)
  2566. AddZone("The Emerald Isle", 2011.940, 2202.760, -89.084, 2237.400, 2508.230, 110.916)
  2567. AddZone("El Castillo del Diablo", -208.570, 2123.010, -7.6, 114.033, 2337.180, 200.000)
  2568. AddZone("Santa Flora", -2741.070, 458.411, -7.6, -2533.040, 793.411, 200.000)
  2569. AddZone("Playa del Seville", 2703.580, -2126.900, -89.084, 2959.350, -1852.870, 110.916)
  2570. AddZone("Market", 926.922, -1577.590, -89.084, 1370.850, -1416.250, 110.916)
  2571. AddZone("Queens", -2593.440, 54.722, 0.000, -2411.220, 458.411, 200.000)
  2572. AddZone("Pilson Intersection", 1098.390, 2243.230, -89.084, 1377.390, 2507.230, 110.916)
  2573. AddZone("Spinybed", 2121.400, 2663.170, -89.084, 2498.210, 2861.550, 110.916)
  2574. AddZone("Pilgrim", 2437.390, 1383.230, -89.084, 2624.400, 1783.230, 110.916)
  2575. AddZone("Blackfield", 964.391, 1403.220, -89.084, 1197.390, 1726.220, 110.916)
  2576. AddZone("'The Big Ear'", -410.020, 1403.340, -3.0, -137.969, 1681.230, 200.000)
  2577. AddZone("Dillimore", 580.794, -674.885, -9.5, 861.085, -404.790, 200.000)
  2578. AddZone("El Quebrados", -1645.230, 2498.520, 0.000, -1372.140, 2777.850, 200.000)
  2579. AddZone("Esplanade North", -2533.040, 1358.900, -4.5, -1996.660, 1501.210, 200.000)
  2580. AddZone("Easter Bay Airport", -1499.890, -50.096, -1.0, -1242.980, 249.904, 200.000)
  2581. AddZone("Fisher's Lagoon", 1916.990, -233.323, -100.000, 2131.720, 13.800, 200.000)
  2582. AddZone("Mulholland", 1414.070, -768.027, -89.084, 1667.610, -452.425, 110.916)
  2583. AddZone("East Beach", 2747.740, -1498.620, -89.084, 2959.350, -1120.040, 110.916)
  2584. AddZone("San Andreas Sound", 2450.390, 385.503, -100.000, 2759.250, 562.349, 200.000)
  2585. AddZone("Shady Creeks", -2030.120, -2174.890, -6.1, -1820.640, -1771.660, 200.000)
  2586. AddZone("Market", 1072.660, -1416.250, -89.084, 1370.850, -1130.850, 110.916)
  2587. AddZone("Rockshore West", 1997.220, 596.349, -89.084, 2377.390, 823.228, 110.916)
  2588. AddZone("Prickle Pine", 1534.560, 2583.230, -89.084, 1848.400, 2863.230, 110.916)
  2589. AddZone("Easter Basin", -1794.920, -50.096, -1.04, -1499.890, 249.904, 200.000)
  2590. AddZone("Leafy Hollow", -1166.970, -1856.030, 0.000, -815.624, -1602.070, 200.000)
  2591. AddZone("LVA Freight Depot", 1457.390, 863.229, -89.084, 1777.400, 1143.210, 110.916)
  2592. AddZone("Prickle Pine", 1117.400, 2507.230, -89.084, 1534.560, 2723.230, 110.916)
  2593. AddZone("Blueberry", 104.534, -220.137, 2.3, 349.607, 152.236, 200.000)
  2594. AddZone("El Castillo del Diablo", -464.515, 2217.680, 0.000, -208.570, 2580.360, 200.000)
  2595. AddZone("Downtown", -2078.670, 578.396, -7.6, -1499.890, 744.267, 200.000)
  2596. AddZone("Rockshore East", 2537.390, 676.549, -89.084, 2902.350, 943.235, 110.916)
  2597. AddZone("San Fierro Bay", -2616.400, 1501.210, -3.0, -1996.660, 1659.680, 200.000)
  2598. AddZone("Paradiso", -2741.070, 793.411, -6.1, -2533.040, 1268.410, 200.000)
  2599. AddZone("The Camel's Toe", 2087.390, 1203.230, -89.084, 2640.400, 1383.230, 110.916)
  2600. AddZone("Old Venturas Strip", 2162.390, 2012.180, -89.084, 2685.160, 2202.760, 110.916)
  2601. AddZone("Juniper Hill", -2533.040, 578.396, -7.6, -2274.170, 968.369, 200.000)
  2602. AddZone("Juniper Hollow", -2533.040, 968.369, -6.1, -2274.170, 1358.900, 200.000)
  2603. AddZone("Roca Escalante", 2237.400, 2202.760, -89.084, 2536.430, 2542.550, 110.916)
  2604. AddZone("Julius Thruway East", 2685.160, 1055.960, -89.084, 2749.900, 2626.550, 110.916)
  2605. AddZone("Verona Beach", 647.712, -2173.290, -89.084, 930.221, -1804.210, 110.916)
  2606. AddZone("Foster Valley", -2178.690, -599.884, -1.2, -1794.920, -324.114, 200.000)
  2607. AddZone("Arco del Oeste", -901.129, 2221.860, 0.000, -592.090, 2571.970, 200.000)
  2608. AddZone("Fallen Tree", -792.254, -698.555, -5.3, -452.404, -380.043, 200.000)
  2609. AddZone("The Farm", -1209.670, -1317.100, 114.981, -908.161, -787.391, 251.981)
  2610. AddZone("The Sherman Dam", -968.772, 1929.410, -3.0, -481.126, 2155.260, 200.000)
  2611. AddZone("Esplanade North", -1996.660, 1358.900, -4.5, -1524.240, 1592.510, 200.000)
  2612. AddZone("Financial", -1871.720, 744.170, -6.1, -1701.300, 1176.420, 300.000)
  2613. AddZone("Garcia", -2411.220, -222.589, -1.14, -2173.040, 265.243, 200.000)
  2614. AddZone("Montgomery", 1119.510, 119.526, -3.0, 1451.400, 493.323, 200.000)
  2615. AddZone("Creek", 2749.900, 1937.250, -89.084, 2921.620, 2669.790, 110.916)
  2616. AddZone("Los Santos International", 1249.620, -2394.330, -89.084, 1852.000, -2179.250, 110.916)
  2617. AddZone("Santa Maria Beach", 72.648, -2173.290, -89.084, 342.648, -1684.650, 110.916)
  2618. AddZone("Mulholland Intersection", 1463.900, -1150.870, -89.084, 1812.620, -768.027, 110.916)
  2619. AddZone("Angel Pine", -2324.940, -2584.290, -6.1, -1964.220, -2212.110, 200.000)
  2620. AddZone("Verdant Meadows", 37.032, 2337.180, -3.0, 435.988, 2677.900, 200.000)
  2621. AddZone("Octane Springs", 338.658, 1228.510, 0.000, 664.308, 1655.050, 200.000)
  2622. AddZone("Come-A-Lot", 2087.390, 943.235, -89.084, 2623.180, 1203.230, 110.916)
  2623. AddZone("Redsands West", 1236.630, 1883.110, -89.084, 1777.390, 2142.860, 110.916)
  2624. AddZone("Santa Maria Beach", 342.648, -2173.290, -89.084, 647.712, -1684.650, 110.916)
  2625. AddZone("Verdant Bluffs", 1249.620, -2179.250, -89.084, 1692.620, -1842.270, 110.916)
  2626. AddZone("Las Venturas Airport", 1236.630, 1203.280, -89.084, 1457.370, 1883.110, 110.916)
  2627. AddZone("Flint Range", -594.191, -1648.550, 0.000, -187.700, -1276.600, 200.000)
  2628. AddZone("Verdant Bluffs", 930.221, -2488.420, -89.084, 1249.620, -2006.780, 110.916)
  2629. AddZone("Palomino Creek", 2160.220, -149.004, 0.000, 2576.920, 228.322, 200.000)
  2630. AddZone("Ocean Docks", 2373.770, -2697.090, -89.084, 2809.220, -2330.460, 110.916)
  2631. AddZone("Easter Bay Airport", -1213.910, -50.096, -4.5, -947.980, 578.396, 200.000)
  2632. AddZone("Whitewood Estates", 883.308, 1726.220, -89.084, 1098.310, 2507.230, 110.916)
  2633. AddZone("Calton Heights", -2274.170, 744.170, -6.1, -1982.320, 1358.900, 200.000)
  2634. AddZone("Easter Basin", -1794.920, 249.904, -9.1, -1242.980, 578.396, 200.000)
  2635. AddZone("Los Santos Inlet", -321.744, -2224.430, -89.084, 44.615, -1724.430, 110.916)
  2636. AddZone("Doherty", -2173.040, -222.589, -1.0, -1794.920, 265.243, 200.000)
  2637. AddZone("Mount Chiliad", -2178.690, -2189.910, -47.917, -2030.120, -1771.660, 576.083)
  2638. AddZone("Fort Carson", -376.233, 826.326, -3.0, 123.717, 1220.440, 200.000)
  2639. AddZone("Foster Valley", -2178.690, -1115.580, 0.000, -1794.920, -599.884, 200.000)
  2640. AddZone("Ocean Flats", -2994.490, -222.589, -1.0, -2593.440, 277.411, 200.000)
  2641. AddZone("Fern Ridge", 508.189, -139.259, 0.000, 1306.660, 119.526, 200.000)
  2642. AddZone("Bayside", -2741.070, 2175.150, 0.000, -2353.170, 2722.790, 200.000)
  2643. AddZone("Las Venturas Airport", 1457.370, 1203.280, -89.084, 1777.390, 1883.110, 110.916)
  2644. AddZone("Blueberry Acres", -319.676, -220.137, 0.000, 104.534, 293.324, 200.000)
  2645. AddZone("Palisades", -2994.490, 458.411, -6.1, -2741.070, 1339.610, 200.000)
  2646. AddZone("North Rock", 2285.370, -768.027, 0.000, 2770.590, -269.740, 200.000)
  2647. AddZone("Hunter Quarry", 337.244, 710.840, -115.239, 860.554, 1031.710, 203.761)
  2648. AddZone("Los Santos International", 1382.730, -2730.880, -89.084, 2201.820, -2394.330, 110.916)
  2649. AddZone("Missionary Hill", -2994.490, -811.276, 0.000, -2178.690, -430.276, 200.000)
  2650. AddZone("San Fierro Bay", -2616.400, 1659.680, -3.0, -1996.660, 2175.150, 200.000)
  2651. AddZone("Restricted Area", -91.586, 1655.050, -50.000, 421.234, 2123.010, 250.000)
  2652. AddZone("Mount Chiliad", -2997.470, -1115.580, -47.917, -2178.690, -971.913, 576.083)
  2653. AddZone("Mount Chiliad", -2178.690, -1771.660, -47.917, -1936.120, -1250.970, 576.083)
  2654. AddZone("Easter Bay Airport", -1794.920, -730.118, -3.0, -1213.910, -50.096, 200.000)
  2655. AddZone("The Panopticon", -947.980, -304.320, -1.1, -319.676, 327.071, 200.000)
  2656. AddZone("Shady Creeks", -1820.640, -2643.680, -8.0, -1226.780, -1771.660, 200.000)
  2657. AddZone("Back o Beyond", -1166.970, -2641.190, 0.000, -321.744, -1856.030, 200.000)
  2658. AddZone("Mount Chiliad", -2994.490, -2189.910, -47.917, -2178.690, -1115.580, 576.083)
  2659. AddZone("Tierra Robada", -1213.910, 596.349, -242.990, -480.539, 1659.680, 900.000)
  2660. AddZone("Flint County", -1213.910, -2892.970, -242.990, 44.615, -768.027, 900.000)
  2661. AddZone("Whetstone", -2997.470, -2892.970, -242.990, -1213.910, -1115.580, 900.000)
  2662. AddZone("Bone County", -480.539, 596.349, -242.990, 869.461, 2993.870, 900.000)
  2663. AddZone("Tierra Robada", -2997.470, 1659.680, -242.990, -480.539, 2993.870, 900.000)
  2664. AddZone("San Fierro", -2997.470, -1115.580, -242.990, -1213.910, 1659.680, 900.000)
  2665. AddZone("Las Venturas", 869.461, 596.349, -242.990, 2997.060, 2993.870, 900.000)
  2666. AddZone("Red County", -1213.910, -768.027, -242.990, 2997.060, 596.349, 900.000)
  2667. AddZone("Los Santos", 44.615, -2892.970, -242.990, 2997.060, -768.027, 900.000)
  2668. }
  2669. calculateZone(posX, posY, posZ) {
  2670. if ( bInitZaC == 0 )
  2671. {
  2672. initZonesAndCities()
  2673. bInitZaC := 1
  2674. }
  2675. Loop % nZone-1
  2676. {
  2677. if (posX >= zone%A_Index%_x1) && (posY >= zone%A_Index%_y1) && (posZ >= zone%A_Index%_z1) && (posX <= zone%A_Index%_x2) && (posY <= zone%A_Index%_y2) && (posZ <= zone%A_Index%_z2)
  2678. {
  2679. ErrorLevel := ERROR_OK
  2680. return zone%A_Index%_name
  2681. }
  2682. }
  2683. ErrorLevel := ERROR_ZONE_NOT_FOUND
  2684. return "Unbekannt"
  2685. }
  2686. calculateCity(posX, posY, posZ) {
  2687. if ( bInitZaC == 0 )
  2688. {
  2689. initZonesAndCities()
  2690. bInitZaC := 1
  2691. }
  2692. smallestCity := "Unbekannt"
  2693. currentCitySize := 0
  2694. smallestCitySize := 0
  2695. Loop % nCity-1
  2696. {
  2697. if (posX >= city%A_Index%_x1) && (posY >= city%A_Index%_y1) && (posZ >= city%A_Index%_z1) && (posX <= city%A_Index%_x2) && (posY <= city%A_Index%_y2) && (posZ <= city%A_Index%_z2)
  2698. {
  2699. currentCitySize := ((city%A_Index%_x2 - city%A_Index%_x1) * (city%A_Index%_y2 - city%A_Index%_y1) * (city%A_Index%_z2 - city%A_Index%_z1))
  2700. if (smallestCity == "Unbekannt") || (currentCitySize < smallestCitySize)
  2701. {
  2702. smallestCity := city%A_Index%_name
  2703. smallestCitySize := currentCitySize
  2704. }
  2705. }
  2706. }
  2707. if(smallestCity == "Unbekannt") {
  2708. ErrorLevel := ERROR_CITY_NOT_FOUND
  2709. } else {
  2710. ErrorLevel := ERROR_OK
  2711. }
  2712. return smallestCity
  2713. }
  2714. AddZone(sName, x1, y1, z1, x2, y2, z2) {
  2715. global
  2716. zone%nZone%_name := sName
  2717. zone%nZone%_x1 := x1
  2718. zone%nZone%_y1 := y1
  2719. zone%nZone%_z1 := z1
  2720. zone%nZone%_x2 := x2
  2721. zone%nZone%_y2 := y2
  2722. zone%nZone%_z2 := z2
  2723. nZone := nZone + 1
  2724. }
  2725. AddCity(sName, x1, y1, z1, x2, y2, z2) {
  2726. global
  2727. city%nCity%_name := sName
  2728. city%nCity%_x1 := x1
  2729. city%nCity%_y1 := y1
  2730. city%nCity%_z1 := z1
  2731. city%nCity%_x2 := x2
  2732. city%nCity%_y2 := y2
  2733. city%nCity%_z2 := z2
  2734. nCity := nCity + 1
  2735. }
  2736. IsPlayerInRangeOfPoint(_posX, _posY, _posZ, _posRadius)
  2737. {
  2738. GetPlayerPos(posX, posY, posZ)
  2739. X := posX -_posX
  2740. Y := posY -_posY
  2741. Z := posZ -_posZ
  2742. if(((X < _posRadius) && (X > -_posRadius)) && ((Y < _posRadius) && (Y > -_posRadius)) && ((Z < _posRadius) && (Z > -_posRadius)))
  2743. return TRUE
  2744. return FALSE
  2745. }
  2746. IsPlayerInRangeOfPoint2D(_posX, _posY, _posRadius)
  2747. {
  2748. GetPlayerPos(posX, posY, posZ)
  2749. X := posX - _posX
  2750. Y := posY - _posY
  2751. if(((X < _posRadius) && (X > -_posRadius)) && ((Y < _posRadius) && (Y > -_posRadius)))
  2752. return TRUE
  2753. return FALSE
  2754. }
  2755. getPlayerZone()
  2756. {
  2757. aktPos := getCoordinates()
  2758. return calculateZone(aktPos[1], aktPos[2], aktPos[3])
  2759. }
  2760. getPlayerCity()
  2761. {
  2762. aktPos := getCoordinates()
  2763. return calculateCity(aktPos[1], aktPos[2], aktPos[3])
  2764. }
  2765. AntiCrash(){
  2766. If(!checkHandles())
  2767. return false
  2768. cReport := ADDR_SAMP_CRASHREPORT
  2769. writeMemory(hGTA, dwSAMP + cReport, 0x90909090, 4)
  2770. cReport += 0x4
  2771. writeMemory(hGTA, dwSAMP + cReport, 0x90, 1)
  2772. cReport += 0x9
  2773. writeMemory(hGTA, dwSAMP + cReport, 0x90909090, 4)
  2774. cReport += 0x4
  2775. writeMemory(hGTA, dwSAMP + cReport, 0x90, 1)
  2776. }
  2777. writeMemory(hProcess,address,writevalue,length=4, datatype="int") {
  2778. if(!hProcess) {
  2779. ErrorLevel := ERROR_INVALID_HANDLE
  2780. return false
  2781. }
  2782. VarSetCapacity(finalvalue,length, 0)
  2783. NumPut(writevalue,finalvalue,0,datatype)
  2784. dwRet :=  DllCall(  "WriteProcessMemory"
  2785. ,"Uint",hProcess
  2786. ,"Uint",address
  2787. ,"Uint",&finalvalue
  2788. ,"Uint",length
  2789. ,"Uint",0)
  2790. if(dwRet == 0) {
  2791. ErrorLevel := ERROR_WRITE_MEMORY
  2792. return false
  2793. }
  2794. ErrorLevel := ERROR_OK
  2795. return true
  2796. }
  2797. checkHandles() {
  2798. if(iRefreshHandles+500>A_TickCount)
  2799. return true
  2800. iRefreshHandles:=A_TickCount
  2801. if(!refreshGTA() || !refreshSAMP() || !refreshMemory()) {
  2802. return false
  2803. } else {
  2804. return true
  2805. }
  2806. return true
  2807. }
  2808. refreshGTA() {
  2809. newPID := getPID(gta_title)
  2810. if(!newPID) {
  2811. if(hGTA) {
  2812. virtualFreeEx(hGTA, pMemory, 0, 0x8000)
  2813. closeProcess(hGTA)
  2814. hGTA := 0x0
  2815. }
  2816. dwGTAPID := 0
  2817. hGTA := 0x0
  2818. dwSAMP := 0x0
  2819. pMemory := 0x0
  2820. return false
  2821. }
  2822. if(!hGTA || (dwGTAPID != newPID)) {
  2823. hGTA := openProcess(newPID)
  2824. if(ErrorLevel) {
  2825. dwGTAPID := 0
  2826. hGTA := 0x0
  2827. dwSAMP := 0x0
  2828. pMemory := 0x0
  2829. return false
  2830. }
  2831. dwGTAPID := newPID
  2832. dwSAMP := 0x0
  2833. pMemory := 0x0
  2834. return true
  2835. }
  2836. return true
  2837. }
  2838. refreshSAMP() {
  2839. if(dwSAMP)
  2840. return true
  2841. dwSAMP := sampcac_mode ? "0x" + sampdll_base_address : getModuleBaseAddress("samp.dll", hGTA)
  2842. if(!dwSAMP)
  2843. return false
  2844. return true
  2845. }
  2846. refreshMemory() {
  2847. if(!pMemory) {
  2848. pMemory     := virtualAllocEx(hGTA, 6144, 0x1000 | 0x2000, 0x40)
  2849. if(ErrorLevel) {
  2850. pMemory := 0x0
  2851. return false
  2852. }
  2853. pParam1     := pMemory
  2854. pParam2     := pMemory + 1024
  2855. pParam3     := pMemory + 2048
  2856. pParam4     := pMemory + 3072
  2857. pParam5     := pMemory + 4096
  2858. pInjectFunc := pMemory + 5120
  2859. }
  2860. return true
  2861. }
  2862. getPID(szWindow) {
  2863. local dwPID := 0
  2864. WinGet, dwPID, PID, %szWindow%
  2865. return dwPID
  2866. }
  2867. openProcess(dwPID, dwRights = 0x1F0FFF) {
  2868. hProcess := DllCall("OpenProcess"
  2869. , "UInt", dwRights
  2870. , "int",  0
  2871. , "UInt", dwPID
  2872. , "Uint")
  2873. if(hProcess == 0) {
  2874. ErrorLevel := ERROR_OPEN_PROCESS
  2875. return 0
  2876. }
  2877. ErrorLevel := ERROR_OK
  2878. return hProcess
  2879. }
  2880. closeProcess(hProcess) {
  2881. if(hProcess == 0) {
  2882. ErrorLevel := ERROR_INVALID_HANDLE
  2883. return 0
  2884. }
  2885. dwRet := DllCall(    "CloseHandle"
  2886. , "Uint", hProcess
  2887. , "UInt")
  2888. ErrorLevel := ERROR_OK
  2889. }
  2890. getModuleBaseAddress(sModule, hProcess) {
  2891. if(!sModule) {
  2892. ErrorLevel := ERROR_MODULE_NOT_FOUND
  2893. return 0
  2894. }
  2895. if(!hProcess) {
  2896. ErrorLevel := ERROR_INVALID_HANDLE
  2897. return 0
  2898. }
  2899. dwSize = 1024*4
  2900. VarSetCapacity(hMods, dwSize)
  2901. VarSetCapacity(cbNeeded, 4)
  2902. dwRet := DllCall(    "Psapi.dll\EnumProcessModules"
  2903. , "UInt", hProcess
  2904. , "UInt", &hMods
  2905. , "UInt", dwSize
  2906. , "UInt*", cbNeeded
  2907. , "UInt")
  2908. if(dwRet == 0) {
  2909. ErrorLevel := ERROR_ENUM_PROCESS_MODULES
  2910. return 0
  2911. }
  2912. dwMods := cbNeeded / 4
  2913. i := 0
  2914. VarSetCapacity(hModule, 4)
  2915. VarSetCapacity(sCurModule, 260)
  2916. while(i < dwMods) {
  2917. hModule := NumGet(hMods, i*4)
  2918. DllCall("Psapi.dll\GetModuleFileNameEx"
  2919. , "UInt", hProcess
  2920. , "UInt", hModule
  2921. , "Str", sCurModule
  2922. , "UInt", 260)
  2923. SplitPath, sCurModule, sFilename
  2924. if(sModule == sFilename) {
  2925. ErrorLevel := ERROR_OK
  2926. return hModule
  2927. }
  2928. i := i + 1
  2929. }
  2930. ErrorLevel := ERROR_MODULE_NOT_FOUND
  2931. return 0
  2932. }
  2933. readString(hProcess, dwAddress, dwLen) {
  2934. if(!hProcess) {
  2935. ErrorLevel := ERROR_INVALID_HANDLE
  2936. return 0
  2937. }
  2938. VarSetCapacity(sRead, dwLen)
  2939. dwRet := DllCall(    "ReadProcessMemory"
  2940. , "UInt", hProcess
  2941. , "UInt", dwAddress
  2942. , "Str", sRead
  2943. , "UInt", dwLen
  2944. , "UInt*", 0
  2945. , "UInt")
  2946. if(dwRet == 0) {
  2947. ErrorLevel := ERROR_READ_MEMORY
  2948. return 0
  2949. }
  2950. ErrorLevel := ERROR_OK
  2951. if A_IsUnicode
  2952. return __ansiToUnicode(sRead)
  2953. return sRead
  2954. }
  2955. readFloat(hProcess, dwAddress) {
  2956. if(!hProcess) {
  2957. ErrorLevel := ERROR_INVALID_HANDLE
  2958. return 0
  2959. }
  2960. VarSetCapacity(dwRead, 4)
  2961. dwRet := DllCall(    "ReadProcessMemory"
  2962. , "UInt",  hProcess
  2963. , "UInt",  dwAddress
  2964. , "Str",   dwRead
  2965. , "UInt",  4
  2966. , "UInt*", 0
  2967. , "UInt")
  2968. if(dwRet == 0) {
  2969. ErrorLevel := ERROR_READ_MEMORY
  2970. return 0
  2971. }
  2972. ErrorLevel := ERROR_OK
  2973. return NumGet(dwRead, 0, "Float")
  2974. }
  2975. readDWORD(hProcess, dwAddress) {
  2976. if(!hProcess) {
  2977. ErrorLevel := ERROR_INVALID_HANDLE
  2978. return 0
  2979. }
  2980. VarSetCapacity(dwRead, 4)
  2981. dwRet := DllCall(    "ReadProcessMemory"
  2982. , "UInt",  hProcess
  2983. , "UInt",  dwAddress
  2984. , "Str",   dwRead
  2985. , "UInt",  4
  2986. , "UInt*", 0)
  2987. if(dwRet == 0) {
  2988. ErrorLevel := ERROR_READ_MEMORY
  2989. return 0
  2990. }
  2991. ErrorLevel := ERROR_OK
  2992. return NumGet(dwRead, 0, "UInt")
  2993. }
  2994. readMem(hProcess, dwAddress, dwLen=4, type="UInt") {
  2995. if(!hProcess) {
  2996. ErrorLevel := ERROR_INVALID_HANDLE
  2997. return 0
  2998. }
  2999. VarSetCapacity(dwRead, dwLen)
  3000. dwRet := DllCall(    "ReadProcessMemory"
  3001. , "UInt",  hProcess
  3002. , "UInt",  dwAddress
  3003. , "Str",   dwRead
  3004. , "UInt",  dwLen
  3005. , "UInt*", 0)
  3006. if(dwRet == 0) {
  3007. ErrorLevel := ERROR_READ_MEMORY
  3008. return 0
  3009. }
  3010. ErrorLevel := ERROR_OK
  3011. return NumGet(dwRead, 0, type)
  3012. }
  3013. writeString(hProcess, dwAddress, wString) {
  3014. if(!hProcess) {
  3015. ErrorLevel := ERROR_INVALID_HANDLE
  3016. return false
  3017. }
  3018. sString := wString
  3019. if A_IsUnicode
  3020. sString := __unicodeToAnsi(wString)
  3021. dwRet := DllCall(    "WriteProcessMemory"
  3022. , "UInt", hProcess
  3023. , "UInt", dwAddress
  3024. , "Str", sString
  3025. , "UInt", StrLen(wString) + 1
  3026. , "UInt", 0
  3027. , "UInt")
  3028. if(dwRet == 0) {
  3029. ErrorLEvel := ERROR_WRITE_MEMORY
  3030. return false
  3031. }
  3032. ErrorLevel := ERROR_OK
  3033. return true
  3034. }
  3035. writeRaw(hProcess, dwAddress, pBuffer, dwLen) {
  3036. if(!hProcess) {
  3037. ErrorLevel := ERROR_INVALID_HANDLE
  3038. return false
  3039. }
  3040. dwRet := DllCall(    "WriteProcessMemory"
  3041. , "UInt", hProcess
  3042. , "UInt", dwAddress
  3043. , "UInt", pBuffer
  3044. , "UInt", dwLen
  3045. , "UInt", 0
  3046. , "UInt")
  3047. if(dwRet == 0) {
  3048. ErrorLEvel := ERROR_WRITE_MEMORY
  3049. return false
  3050. }
  3051. ErrorLevel := ERROR_OK
  3052. return true
  3053. }
  3054. Memory_ReadByte(process_handle, address) {
  3055. VarSetCapacity(value, 1, 0)
  3056. DllCall("ReadProcessMemory", "UInt", process_handle, "UInt", address, "Str", value, "UInt", 1, "UInt *", 0)
  3057. return, NumGet(value, 0, "Byte")
  3058. }
  3059. callWithParams(hProcess, dwFunc, aParams, bCleanupStack = true) {
  3060. if(!hProcess) {
  3061. ErrorLevel := ERROR_INVALID_HANDLE
  3062. return false
  3063. }
  3064. validParams := 0
  3065. i := aParams.MaxIndex()
  3066. dwLen := i * 5    + 5    + 1
  3067. if(bCleanupStack)
  3068. dwLen += 3
  3069. VarSetCapacity(injectData, i * 5    + 5       + 3       + 1, 0)
  3070. i_ := 1
  3071. while(i > 0) {
  3072. if(aParams[i][1] != "") {
  3073. dwMemAddress := 0x0
  3074. if(aParams[i][1] == "p") {
  3075. dwMemAddress := aParams[i][2]
  3076. } else if(aParams[i][1] == "s") {
  3077. if(i_>3)
  3078. return false
  3079. dwMemAddress := pParam%i_%
  3080. writeString(hProcess, dwMemAddress, aParams[i][2])
  3081. if(ErrorLevel)
  3082. return false
  3083. i_ += 1
  3084. } else if(aParams[i][1] == "i") {
  3085. dwMemAddress := aParams[i][2]
  3086. } else {
  3087. return false
  3088. }
  3089. NumPut(0x68, injectData, validParams * 5, "UChar")
  3090. NumPut(dwMemAddress, injectData, validParams * 5 + 1, "UInt")
  3091. validParams += 1
  3092. }
  3093. i -= 1
  3094. }
  3095. offset := dwFunc - ( pInjectFunc + validParams * 5 + 5 )
  3096. NumPut(0xE8, injectData, validParams * 5, "UChar")
  3097. NumPut(offset, injectData, validParams * 5 + 1, "Int")
  3098. if(bCleanupStack) {
  3099. NumPut(0xC483, injectData, validParams * 5 + 5, "UShort")
  3100. NumPut(validParams*4, injectData, validParams * 5 + 7, "UChar")
  3101. NumPut(0xC3, injectData, validParams * 5 + 8, "UChar")
  3102. } else {
  3103. NumPut(0xC3, injectData, validParams * 5 + 5, "UChar")
  3104. }
  3105. writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
  3106. if(ErrorLevel)
  3107. return false
  3108. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  3109. if(ErrorLevel)
  3110. return false
  3111. waitForSingleObject(hThread, 0xFFFFFFFF)
  3112. closeProcess(hThread)
  3113. return true
  3114. }
  3115. virtualAllocEx(hProcess, dwSize, flAllocationType, flProtect) {
  3116. if(!hProcess) {
  3117. ErrorLevel := ERROR_INVALID_HANDLE
  3118. return 0
  3119. }
  3120. dwRet := DllCall(    "VirtualAllocEx"
  3121. , "UInt", hProcess
  3122. , "UInt", 0
  3123. , "UInt", dwSize
  3124. , "UInt", flAllocationType
  3125. , "UInt", flProtect
  3126. , "UInt")
  3127. if(dwRet == 0) {
  3128. ErrorLEvel := ERROR_ALLOC_MEMORY
  3129. return 0
  3130. }
  3131. ErrorLevel := ERROR_OK
  3132. return dwRet
  3133. }
  3134. virtualFreeEx(hProcess, lpAddress, dwSize, dwFreeType) {
  3135. if(!hProcess) {
  3136. ErrorLevel := ERROR_INVALID_HANDLE
  3137. return 0
  3138. }
  3139. dwRet := DllCall(    "VirtualFreeEx"
  3140. , "UInt", hProcess
  3141. , "UInt", lpAddress
  3142. , "UInt", dwSize
  3143. , "UInt", dwFreeType
  3144. , "UInt")
  3145. if(dwRet == 0) {
  3146. ErrorLEvel := ERROR_FREE_MEMORY
  3147. return 0
  3148. }
  3149. ErrorLevel := ERROR_OK
  3150. return dwRet
  3151. }
  3152. createRemoteThread(hProcess, lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags, lpThreadId) {
  3153. if(!hProcess) {
  3154. ErrorLevel := ERROR_INVALID_HANDLE
  3155. return 0
  3156. }
  3157. dwRet := DllCall(    "CreateRemoteThread"
  3158. , "UInt", hProcess
  3159. , "UInt", lpThreadAttributes
  3160. , "UInt", dwStackSize
  3161. , "UInt", lpStartAddress
  3162. , "UInt", lpParameter
  3163. , "UInt", dwCreationFlags
  3164. , "UInt", lpThreadId
  3165. , "UInt")
  3166. if(dwRet == 0) {
  3167. ErrorLEvel := ERROR_ALLOC_MEMORY
  3168. return 0
  3169. }
  3170. ErrorLevel := ERROR_OK
  3171. return dwRet
  3172. }
  3173. waitForSingleObject(hThread, dwMilliseconds) {
  3174. if(!hThread) {
  3175. ErrorLevel := ERROR_INVALID_HANDLE
  3176. return 0
  3177. }
  3178. dwRet := DllCall(    "WaitForSingleObject"
  3179. , "UInt", hThread
  3180. , "UInt", dwMilliseconds
  3181. , "UInt")
  3182. if(dwRet == 0xFFFFFFFF) {
  3183. ErrorLEvel := ERROR_WAIT_FOR_OBJECT
  3184. return 0
  3185. }
  3186. ErrorLevel := ERROR_OK
  3187. return dwRet
  3188. }
  3189. __ansiToUnicode(sString, nLen = 0) {
  3190. If !nLen
  3191. {
  3192. nLen := DllCall("MultiByteToWideChar"
  3193. , "Uint", 0
  3194. , "Uint", 0
  3195. , "Uint", &sString
  3196. , "int",  -1
  3197. , "Uint", 0
  3198. , "int",  0)
  3199. }
  3200. VarSetCapacity(wString, nLen * 2)
  3201. DllCall("MultiByteToWideChar"
  3202. , "Uint", 0
  3203. , "Uint", 0
  3204. , "Uint", &sString
  3205. , "int",  -1
  3206. , "Uint", &wString
  3207. , "int",  nLen)
  3208. return wString
  3209. }
  3210. __unicodeToAnsi(wString, nLen = 0) {
  3211. pString := wString + 1 > 65536 ? wString : &wString
  3212. If !nLen
  3213. {
  3214. nLen := DllCall("WideCharToMultiByte"
  3215. , "Uint", 0
  3216. , "Uint", 0
  3217. , "Uint", pString
  3218. , "int",  -1
  3219. , "Uint", 0
  3220. , "int",  0
  3221. , "Uint", 0
  3222. , "Uint", 0)
  3223. }
  3224. VarSetCapacity(sString, nLen)
  3225. DllCall("WideCharToMultiByte"
  3226. , "Uint", 0
  3227. , "Uint", 0
  3228. , "Uint", pString
  3229. , "int",  -1
  3230. , "str",  sString
  3231. , "int",  nLen
  3232. , "Uint", 0
  3233. , "Uint", 0)
  3234. return sString
  3235. }
  3236. global SAMP_MAX_VEHICLES            := 2000
  3237. global SAMP_PPOOL_VEHICLE_OFFSET    := 0x1C
  3238. global VEHPOOL_iVehicleCount        := 0x0
  3239. global VEHPOOL_iIsListed            := 0x3074
  3240. global VEHPOOL_pGTA_Vehicle         := 0x4FB4
  3241. global iRefreshVeh                  := 0
  3242. global oVehiclePoolData             := []
  3243. global iUpdateTickVeh               := 1000
  3244. global oweaponNames := {0: "Faust", 1: "Schlagring", 2: "Golfschläger", 3: "Schlagstock", 4: "Messer", 5: "Baseballschläger", 6: "Schaufel", 7: "Billiardstock", 8: "Katana", 9: "Kettensäge", 10: "Lila " "Dil" "do" "", 11: "" "Dil" "do" "", 12: "Vibrator", 13: "Silber Vibrator", 14: "Blumen", 15: "Gehstock", 16: "Granate", 17: "Tränengas", 18: "Molotov Cocktail", 22: "Pistole", 23: "Schallgedämpfte Pistole", 24: "Desert Eagle", 25: "Shotgun", 26: "Abgesägte Shotgun", 27: "SPAZ", 28: "" "U" "ZI" "", 29: "MP5", 30: "AK-47", 31: "M4", 32: "Tec-9", 33: "Rifle", 34: "Sniper", 35: "RPG", 36: "HS Rocket", 37: "Flammenwerfer", 38: "Minigun", 39: "Rucksackbombe", 40: "Zünmder", 41: "Spraycan", 42: "Feuerlöscher", 43: "Kamera", 44: "Nachtsichtgerät", 45: "Thermalsichtgerät", 46: "Fallschirm", 47: "Fake Pistol", 49: "Fahrzeug", 50: "Rotorblätter", 51: "Explosion", 53: "Ertrunken", 54: "Fallschaden", 255: "Selbstmord"}
  3245. getVehicleID() {
  3246. if (!checkHandles())
  3247. return -1
  3248. vID := readMem(hGTA, readDWORD(hGTA, dwSAMP + 0x13C848) + 0x14, 2, "Short")
  3249. if (ErrorLevel || !vID || vID > 2000)
  3250. return -1
  3251. return vID
  3252. }
  3253. GetVehicleModelIDByVPed(dwvPed) {
  3254. checkHandles()
  3255. id := readMem(hGTA, dwvPed + 0x22, 2, "Short")
  3256. return id
  3257. }
  3258. getStreamedVehicles() {
  3259. if (!checkHandles())
  3260. return false
  3261. if (iRefreshVeh + iUpdateTickVeh > A_TickCount)
  3262. return true
  3263. oVehiclePoolData := []
  3264. iRefreshVeh := A_TickCount
  3265. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  3266. dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  3267. stVehiclePool := readDWORD(hGTA, dwAddress + 0x1C)
  3268. vehicleoffset := 0
  3269. Loop, % SAMP_MAX_VEHICLES
  3270. {
  3271. index := A_Index - 1, vehicleoffset += 4
  3272. iIsListed := readDWORD(hGTA, stVehiclePool + VEHPOOL_iIsListed + index * 0x4)
  3273. if (iIsListed == 0)
  3274. continue
  3275. ptrGTAVeh  := readDWORD(hGTA, stVehiclePool + VEHPOOL_pGTA_Vehicle + index * 0x4)
  3276. if (ptrGTAVeh == 0)
  3277. continue
  3278. dwDriver := readDWORD(hGTA, ptrGTAVeh + 1120)
  3279. occupied := dwDriver != 0 ? 1 : 0
  3280. GTACARid := GetVehicleModelIDByVPed(ptrGTAVeh)
  3281. sVehId := Round((vehicleoffset / 4) - 1)
  3282. if (GTACARid > 400 && GTACARid < 611)
  3283. oVehiclePoolData[index] := Object("PTR",  ptrGTAVeh, "SAMPID", sVehId, "CARNAME", ovehicleNames[GTACARid - 399], "OCCUPIED", occupied)
  3284. }
  3285. return true
  3286. }
  3287. getVehiclePointer(wID) {
  3288. if (wID < 1 || wID > SAMP_MAX_VEHICLES || !checkHandles())
  3289. return false
  3290. var1 := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  3291. var2 := readDWORD(hGTA, var1 + SAMP_PPOOLS_OFFSET)
  3292. stVehiclePool := readDWORD(hGTA, var2 + SAMP_PPOOL_VEHICLE_OFFSET)
  3293. if (stVehiclePool) {
  3294. var3 := readDWORD(hGTA, stVehiclePool + 0x4FB4 + wID * 0x4)
  3295. return var3
  3296. } else {
  3297. return false
  3298. }
  3299. }
  3300. getVehicleNumberPlate() {
  3301. if (!checkHandles())
  3302. return ""
  3303. dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  3304. if (ErrorLevel || dwVehPtr==0) {
  3305. ErrorLevel := ERROR_READ_MEMORY
  3306. return ""
  3307. }
  3308. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  3309. if (ErrorLevel || dwAddress==0) {
  3310. ErrorLevel := ERROR_READ_MEMORY
  3311. return ""
  3312. }
  3313. dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  3314. if (ErrorLevel || dwAddress==0) {
  3315. ErrorLevel := ERROR_READ_MEMORY
  3316. return ""
  3317. }
  3318. vehpool := readDWORD(hGTA, dwAddress + 0x1C)
  3319. if (ErrorLevel || vehpool==0) {
  3320. ErrorLevel := ERROR_READ_MEMORY
  3321. return ""
  3322. }
  3323. Loop, 2000
  3324. {
  3325. i := A_Index-1
  3326. listed := readDWORD(hGTA, vehpool + 0x3074 + i*4)
  3327. if (ErrorLevel) {
  3328. ErrorLevel := ERROR_READ_MEMORY
  3329. return ""
  3330. }
  3331. if (listed==0)
  3332. continue
  3333. svehptr := readDWORD(hGTA, vehpool + 0x4FB4 + i*4)
  3334. if (ErrorLevel) {
  3335. ErrorLevel := ERROR_READ_MEMORY
  3336. return ""
  3337. }
  3338. if (svehptr==dwVehPtr) {
  3339. sampveh := readDWORD(hGTA, vehpool + 0x1134 + i*4)
  3340. if (ErrorLevel || sampveh==0) {
  3341. ErrorLevel := ERROR_READ_MEMORY
  3342. return ""
  3343. }
  3344. plate := readString(hGTA, sampveh + 0x93, 32)
  3345. if (ErrorLevel) {
  3346. ErrorLevel := ERROR_READ_MEMORY
  3347. return ""
  3348. }
  3349. ErrorLevel := ERROR_OK
  3350. return plate
  3351. }
  3352. }
  3353. ErrorLevel := ERROR_OK
  3354. return ""
  3355. }
  3356. getVehicleNumberPlateById(wID) {
  3357. if (!checkHandles())
  3358. return ""
  3359. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  3360. if (ErrorLevel || dwAddress==0) {
  3361. ErrorLevel := ERROR_READ_MEMORY
  3362. return ""
  3363. }
  3364. dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  3365. if (ErrorLevel || dwAddress==0) {
  3366. ErrorLevel := ERROR_READ_MEMORY
  3367. return ""
  3368. }
  3369. vehpool := readDWORD(hGTA, dwAddress + 0x1C)
  3370. if (ErrorLevel || vehpool==0) {
  3371. ErrorLevel := ERROR_READ_MEMORY
  3372. return ""
  3373. }
  3374. listed := readDWORD(hGTA, vehpool + 0x3074 + wID*4)
  3375. if (ErrorLevel || listed==0) {
  3376. ErrorLevel := ERROR_READ_MEMORY
  3377. return ""
  3378. }
  3379. svehptr := readDWORD(hGTA, vehpool + 0x4FB4 + wID*4)
  3380. if (ErrorLevel) {
  3381. ErrorLevel := ERROR_READ_MEMORY
  3382. return ""
  3383. }
  3384. sampveh := readDWORD(hGTA, vehpool + 0x1134 + wID*4)
  3385. if (ErrorLevel || sampveh==0) {
  3386. ErrorLevel := ERROR_READ_MEMORY
  3387. return ""
  3388. }
  3389. plate := readString(hGTA, sampveh + 0x93, 32)
  3390. if (ErrorLevel) {
  3391. ErrorLevel := ERROR_READ_MEMORY
  3392. return ""
  3393. }
  3394. ErrorLevel := ERROR_OK
  3395. return plate
  3396. }
  3397. getVehiclePos(dwVehPtr = 0xBA18FC) {
  3398. if (!checkHandles())
  3399. return false
  3400. if (dwVehPtr = ADDR_VEHICLE_PTR)
  3401. dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  3402. dwAddress := readDWORD(hGTA, dwVehPtr + 0x14)
  3403. if (!dwAddress)
  3404. return false
  3405. fX := readFloat(hGTA, dwAddress + 0x30)
  3406. fY := readFloat(hGTA, dwAddress + 0x34)
  3407. fZ := readFloat(hGTA, dwAddress + 0x38)
  3408. vehicleID := readDWORD(hGTA, dwVehPtr + 0x22)
  3409. return [fX, fY, fZ, vehicleID]
  3410. }
  3411. getVehicleRot(dwVehPtr = 0xBA18FC) {
  3412. if (!checkHandles())
  3413. return false
  3414. if (dwVehPtr = ADDR_VEHICLE_PTR)
  3415. dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  3416. dwAddress := readDWORD(hGTA, dwVehPtr + 0x14)
  3417. if (!dwAddress)
  3418. return false
  3419. rotX := readFloat(hGTA, dwAddress + 0x0)
  3420. rotY := readFloat(hGTA, dwAddress + 0x4)
  3421. rotZ := readFloat(hGTA, dwAddress + 0x8)
  3422. vehicleID := readDWORD(hGTA, dwVehPtr + 0x22)
  3423. return [rotX, rotY, rotZ, vehicleID]
  3424. }
  3425. getSeatIDs(errorMessage := true) {
  3426. if (!checkHandles())
  3427. return -1
  3428. dw := readDWORD(hGTA, 0xBA18FC)
  3429. if (dw) {
  3430. driver := readDWORD(hGTA, dw + 0x460)
  3431. psg1 := readDWORD(hGTA, dw + 0x464)
  3432. psg2 := readDWORD(hGTA, dw + 0x468)
  3433. psg3 := readDWORD(hGTA, dw + 0x46C)
  3434. psg4 := readDWORD(hGTA, dw + 0x470)
  3435. psg5 := readDWORD(hGTA, dw + 0x474)
  3436. psg6 := readDWORD(hGTA, dw + 0x478)
  3437. psg7 := readDWORD(hGTA, dw + 0x47C)
  3438. psg8 := readDWORD(hGTA, dw + 0x480)
  3439. psg9 := readDWORD(hGTA, dw + 0x484)
  3440. return [getIdByPed(driver), getIdByPed(psg1), getIdByPed(psg2), getIdByPed(psg3), getIdByPed(psg4), getIdByPed(psg5), getIdByPed(psg6), getIdByPed(psg7), getIdByPed(psg8), getIdByPed(psg9)]
  3441. } else if (errorMessage) {
  3442. addChatMessage2(PREFIX . "Du befindest dich nicht in einem Fahrzeug!")
  3443. }
  3444. return false
  3445. }
  3446. GetVehicleColor_func := DllCall("GetProcAddress", UInt, hModule, Str, "API_GetVehicleColor")
  3447. GetVehicleColor(ByRef int_ColorFirst, ByRef int_ColorSecond) {
  3448. global GetVehicleColor_func
  3449. res := DllCall(GetVehicleColor_func, IntP, int_ColorFirst, IntP, int_ColorSecond)
  3450. return res
  3451. }
  3452. createTextLabel(sText, dwColor, fX, fY, fZ, fDrawDistance := 50.0, bTestLOS := 0, wPlayerID := 0xFFFF, wVehicleID := 0xFFFF) {
  3453. if (!checkHandles())
  3454. return -1
  3455. dwAddress := readDWORD(hGTA, readDWORD(hGTA, readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) + SAMP_PPOOLS_OFFSET) + 0xC)
  3456. Loop, 2048 {
  3457. wID := A_Index - 1
  3458. if (!readDWORD(hGTA, dwAddress + 0xE800 + wID * 4)) {
  3459. return callWithParams2(hGTA, dwSAMP + 0x11C0, [["i", dwAddress], ["i", wID], ["s", sText], ["i", dwColor], ["f", fX], ["f", fY], ["f", fZ]
  3460. , ["f", fDrawDistance], ["i", bTestLOS], ["i", wPlayerID], ["i", wVehicleID]], false, true) ? wID : -1
  3461. }
  3462. }
  3463. return -1
  3464. }
  3465. updateTextLabel(wID, sText, dwColor) {
  3466. if (wID < 0 || wID > 2047 || !checkHandles())
  3467. return false
  3468. dwAddress := readDWORD(hGTA, readDWORD(hGTA, readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) + SAMP_PPOOLS_OFFSET) + 0xC)
  3469. fX := readFloat(hGTA, dwAddress + wID * 0x1D + 0x8)
  3470. fY := readFloat(hGTA, dwAddress + wID * 0x1D + 0xC)
  3471. fZ := readFloat(hGTA, dwAddress + wID * 0x1D + 0x10)
  3472. fDrawDistance := readFloat(hGTA, dwAddress + wID * 0x1D + 0x14)
  3473. bTestLOS := readMem(hGTA, dwAddress + wID * 0x1D + 0x18, 1, "Byte")
  3474. wPlayerID := readMem(hGTA, dwAddress + wID * 0x1D + 0x19, 2, "UShort")
  3475. wVehicleID := readMem(hGTA, dwAddress + wID * 0x1D + 0x1B, 2, "UShort")
  3476. return callWithParams2(hGTA, dwSAMP + 0x11C0, [["i", dwAddress], ["i", wID], ["s", sText], ["i", dwColor], ["f", fX], ["f", fY], ["f", fZ], ["f", fDrawDistance]
  3477. , ["i", bTestLOS], ["i", wPlayerID], ["i", wVehicleID]], false, true)
  3478. }
  3479. deleteTextLabel(ByRef wID) {
  3480. if (!checkHandles())
  3481. return false
  3482. dwAddress := readDWORD(hGTA, readDWORD(hGTA, readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) + SAMP_PPOOLS_OFFSET) + 0xC)
  3483. if (callWithParams2(hGTA, dwSAMP + 0x12D0, [["i", dwAddress], ["i", wID]], false, true)) {
  3484. wID := -1
  3485. return true
  3486. }
  3487. return false
  3488. }
  3489. global SAMP_3DTEXT                  := 0x12C7BC
  3490. getLabelText() {
  3491. if (!checkHandles())
  3492. return -1
  3493. ADDR_3DText := readDWORD(hGTA, dwSAMP + SAMP_3DTEXT)
  3494. TEXT_3DTEXT := readString(hGTA, ADDR_3DText, 512)
  3495. return TEXT_3DTEXT
  3496. }
  3497. global iRefreshTL := 0
  3498. global oTextLabelData := ""
  3499. global iUpdateTickTL := 1000
  3500. updateTextLabelData() {
  3501. if (!checkHandles())
  3502. return 0
  3503. if (iRefreshTL+iUpdateTickTL > A_TickCount)
  3504. return 1
  3505. oTextLabelData := []
  3506. iRefreshTL := A_TickCount
  3507. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  3508. if (ErrorLevel || dwAddress==0) {
  3509. ErrorLevel := ERROR_READ_MEMORY
  3510. return 0
  3511. }
  3512. dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  3513. if (ErrorLevel || dwAddress==0) {
  3514. ErrorLevel := ERROR_READ_MEMORY
  3515. return 0
  3516. }
  3517. dwTextLabels := readDWORD(hGTA, dwAddress + 12)
  3518. if (ErrorLevel || dwTextDraws==0) {
  3519. ErrorLevel := ERROR_READ_MEMORY
  3520. return 0
  3521. }
  3522. Loop, % 2048
  3523. {
  3524. i := A_Index-1
  3525. dwIsActive := readDWORD(hGTA, dwTextLabels + 59392 + i*4)
  3526. if (ErrorLevel) {
  3527. ErrorLevel := ERROR_READ_MEMORY
  3528. return 0
  3529. }
  3530. if (dwIsActive==0)
  3531. continue
  3532. dwAddr := readDWORD(hGTA, dwTextLabels + i*29)
  3533. if (ErrorLevel) {
  3534. ErrorLevel := ERROR_READ_MEMORY
  3535. return 0
  3536. }
  3537. if (dwAddr==0)
  3538. continue
  3539. sText := readString(hGTA, dwAddr, 256)
  3540. if (ErrorLevel) {
  3541. ErrorLevel := ERROR_READ_MEMORY
  3542. return 0
  3543. }
  3544. fX := readFloat(hGTA, dwTextLabels + i*29 +8)
  3545. if (ErrorLevel) {
  3546. ErrorLevel := ERROR_READ_MEMORY
  3547. return 0
  3548. }
  3549. fY := readFloat(hGTA, dwTextLabels + i*29 +12)
  3550. if (ErrorLevel) {
  3551. ErrorLevel := ERROR_READ_MEMORY
  3552. return 0
  3553. }
  3554. fZ := readFloat(hGTA, dwTextLabels + i*29 +16)
  3555. if (ErrorLevel) {
  3556. ErrorLevel := ERROR_READ_MEMORY
  3557. return 0
  3558. }
  3559. wPlayerID := readMem(hGTA, dwTextLabels + i * 0x1D + 0x19, 2, "UShort")
  3560. wVehicleID := readMem(hGTA, dwTextLabels + i * 0x1D + 0x1B, 2, "UShort")
  3561. oTextLabelData[i] := Object("TEXT", sText, "XPOS", fX , "YPOS", fY , "ZPOS", fZ, "PLAYERID", wPlayerID, "VEHICLEID", wVehicleID)
  3562. }
  3563. ErrorLevel := ERROR_OK
  3564. return 1
  3565. }
  3566. countLabels() {
  3567. if (!updateTextLabelData())
  3568. return -1
  3569. j := 0
  3570. For i, o in oTextLabelData
  3571. {
  3572. j += 1
  3573. }
  3574. return j
  3575. }
  3576. printLabels() {
  3577. if (!updateTextLabelData())
  3578. return
  3579. For i, o in oTextLabelData
  3580. {
  3581. addChatMessage2("ID: " . i . ", x:" . o.XPOS . ", y:" . o.YPOS . ", z:" . o.ZPOS . ", player: " . o.PLAYERID . ", vehicle: " . o.VEHICLEID)
  3582. addChatMessage2("{FFFFFF}" . o.TEXT)
  3583. }
  3584. }
  3585. createTextDraw(sString, fX, fY, dwLetterColor := 0xFFFFFFFF, bFont := 3, fLetterWidth := 0.4, fLetterHeight := 1, bShadowSize := 0, bOutline := 1
  3586. , dwShadowColor := 0xFF000000, bBox := 0, dwBoxColor := 0xFFFFFFFF, fBoxSizeX := 0.0, fBoxSizeY := 0.0, bLeft := 0, bRight := 0, bCenter := 1
  3587. , bProportional := 1, wModel := 0, fXRot := 0.0, fYRot := 0.0, fZRot := 0.0, fZoom := 1.0, wColor1 := 0xFFFF, wColor2 := 0xFFFF) {
  3588. if (StrLen(sString) > 800 || bFont > 5 || !checkHandles())
  3589. return -1
  3590. dwAddress := readDWORD(hGTA, readDWORD(hGTA, readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) + SAMP_PPOOLS_OFFSET) + 0x10)
  3591. Loop, 2048 {
  3592. wID := A_Index - 1
  3593. if (!readDWORD(hGTA, dwAddress + wID * 4)) {
  3594. VarSetCapacity(struct, 63, 0)
  3595. NumPut((bBox ? 1 : 0) + (bLeft ? 2 : 0) + (bRight ? 4 : 0) + (bCenter ? 8 : 0) + (bProportional ? 16 : 0), &struct, 0, "Byte")
  3596. NumPut(fLetterWidth, &struct, 1, "Float")
  3597. NumPut(fLetterHeight, &struct, 5, "Float")
  3598. NumPut(dwLetterColor, &struct, 9, "Int")
  3599. NumPut(fBoxSizeX, &struct, 0xD, "Float")
  3600. NumPut(fBoxSizeY, &struct, 0x11, "Float")
  3601. NumPut(dwBoxColor, &struct, 0x15, "Int")
  3602. NumPut(bShadowSize, &struct, 0x19, "Byte")
  3603. NumPut(bOutline, &struct, 0x1A, "Byte")
  3604. NumPut(dwShadowColor, &struct, 0x1B, "Int")
  3605. NumPut(bFont, &struct, 0x1F, "Byte")
  3606. NumPut(1, &struct, 0x20, "Byte")
  3607. NumPut(fX, &struct, 0x21, "Float")
  3608. NumPut(fY, &struct, 0x25, "Float")
  3609. NumPut(wModel, &struct, 0x29, "Short")
  3610. NumPut(fXRot, &struct, 0x2B, "Float")
  3611. NumPut(fYRot, &struct, 0x2F, "Float")
  3612. NumPut(fZRot, &struct, 0x33, "Float")
  3613. NumPut(fZoom, &struct, 0x37, "Float")
  3614. NumPut(wColor1, &struct, 0x3B, "Short")
  3615. NumPut(wColor2, &struct, 0x3D, "Short")
  3616. writeRaw(hGTA, pParam5, &struct, 63)
  3617. if (ErrorLevel)
  3618. return -1
  3619. return callWithParams2(hGTA, dwSAMP + 0x1AE20, [["i", dwAddress], ["i", wID], ["i", pParam5], ["s", sString]], false, true) ? wID : -1
  3620. }
  3621. }
  3622. return -1
  3623. }
  3624. moveTextDraw(wID, xPos, yPos) {
  3625. if (wID < 0 || wID > 2047 || !checkHandles())
  3626. return false
  3627. dwAddress := readDWORD(hGTA, readDWORD(hGTA, readDWORD(hGTA, readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) + SAMP_PPOOLS_OFFSET) + 0x10) + wID * 4 + (4 * (SAMP_MAX_PLAYERTEXTDRAWS + SAMP_MAX_TEXTDRAWS)))
  3628. return writeMemory(hGTA, dwAddress + 0x98B, xPos, 4, "Float") && writeMemory(hGTA, dwAddress + 0x98F, yPos, 4, "Float")
  3629. }
  3630. updateTextDraw(wID, sString) {
  3631. if (wID < 0 || wID > 2047 || StrLen(sString) > 800 || !checkHandles())
  3632. return false
  3633. dwAddress := readDWORD(hGTA, readDWORD(hGTA, readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) + SAMP_PPOOLS_OFFSET) + 0x10)
  3634. return writeString(hGTA, readDWORD(hGTA, dwAddress + wID * 4 + (4 * (SAMP_MAX_PLAYERTEXTDRAWS + SAMP_MAX_TEXTDRAWS))), sString)
  3635. }
  3636. deleteTextDraw(ByRef wID) {
  3637. if (wID < 0 || wID > 2047 || !checkHandles())
  3638. return false
  3639. dwAddress := readDWORD(hGTA, readDWORD(hGTA, readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) + SAMP_PPOOLS_OFFSET) + 0x10)
  3640. if (callWithParams2(hGTA, dwSAMP + 0x1AD00, [["i", dwAddress], ["i", wID]], false, true)) {
  3641. wID := -1
  3642. return true
  3643. }
  3644. return false
  3645. }
  3646. global TEXT_DRAW_POOL_OFFSET                := 0x10
  3647. global SAMP_MAX_PLAYERTEXTDRAWS             := 256
  3648. global SAMP_MAX_TEXTDRAWS                   := 2048
  3649. global iRefreshTD := 0
  3650. global iUpdateTickTD := 1000
  3651. global oTextDraws := []
  3652. updateTextDraws() {
  3653. if (!checkHandles())
  3654. return 0
  3655. if (iRefreshTD + iUpdateTickTD > A_TickCount)
  3656. return 1
  3657. oTextDraws := []
  3658. iRefreshTD := A_TickCount
  3659. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  3660. if (ErrorLevel || !dwAddress) {
  3661. ErrorLevel := ERROR_READ_MEMORY
  3662. return 0
  3663. }
  3664. dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  3665. if (ErrorLevel || !dwAddress) {
  3666. ErrorLevel := ERROR_READ_MEMORY
  3667. return 0
  3668. }
  3669. dwTextDraw := readDWORD(hGTA, dwAddress + TEXT_DRAW_POOL_OFFSET)
  3670. if (ErrorLevel || !dwTextDraw) {
  3671. ErrorLevel := ERROR_READ_MEMORY
  3672. return 0
  3673. }
  3674. Loop, % SAMP_MAX_TEXTDRAWS
  3675. {
  3676. i := A_Index - 1
  3677. dwIsActive := readDWORD(hGTA, dwTextDraw + i * 4)
  3678. if (ErrorLevel) {
  3679. ErrorLevel := ERROR_READ_MEMORY
  3680. return 0
  3681. }
  3682. if (!dwIsActive)
  3683. continue
  3684. dwAddr := readDWORD(hGTA, dwTextDraw + i * 4 + (4 * (SAMP_MAX_PLAYERTEXTDRAWS + SAMP_MAX_TEXTDRAWS)))
  3685. if (ErrorLevel) {
  3686. ErrorLevel := ERROR_READ_MEMORY
  3687. return 0
  3688. }
  3689. if (!dwAddr)
  3690. continue
  3691. sText := readString(hGTA, dwAddr, 800)
  3692. if (ErrorLevel) {
  3693. ErrorLevel := ERROR_READ_MEMORY
  3694. return 0
  3695. }
  3696. oTextDraws[i] := sText
  3697. }
  3698. ErrorLevel := ERROR_OK
  3699. return 1
  3700. }
  3701. printTextDraws() {
  3702. if (!updateTextDraws())
  3703. return
  3704. oReplace := ["~s~", "~r~", "~w~", "~h~", "~g~", "~y~", "~n~", "~b~", "  ", "   "]
  3705. For i, o in oTextDraws
  3706. {
  3707. Loop % oReplace.MaxIndex() {
  3708. o := StrReplace(o, oReplace[A_Index], " ")
  3709. }
  3710. addChatMessage2(o)
  3711. }
  3712. return
  3713. }
  3714. getTextDrawBySubstring(substring) {
  3715. if (!updateTextDraws())
  3716. return
  3717. oReplace := ["~s~", "~r~", "~w~", "~h~", "~g~", "~y~", "~n~", "~b~", "  ", "   "]
  3718. For i, o in oTextDraws
  3719. {
  3720. if (!InStr(o, substring))
  3721. continue
  3722. Loop % oReplace.MaxIndex()
  3723. o := StrReplace(o, oReplace[A_Index], " ")
  3724. return o
  3725. }
  3726. }
  3727. restartGameEx() {
  3728. if (!checkHandles())
  3729. return -1
  3730. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  3731. if (ErrorLevel || dwAddress==0) {
  3732. ErrorLevel := ERROR_READ_MEMORY
  3733. return -1
  3734. }
  3735. dwFunc := dwSAMP + 0xA060
  3736. VarSetCapacity(injectData, 11, 0)
  3737. NumPut(0xB9, injectData, 0, "UChar")
  3738. NumPut(dwAddress, injectData, 1, "UInt")
  3739. NumPut(0xE8, injectData, 5, "UChar")
  3740. offset := dwFunc - (pInjectFunc + 10)
  3741. NumPut(offset, injectData, 6, "Int")
  3742. NumPut(0xC3, injectData, 10, "UChar")
  3743. writeRaw(hGTA, pInjectFunc, &injectData, 11)
  3744. if (ErrorLevel)
  3745. return false
  3746. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  3747. if (ErrorLevel)
  3748. return false
  3749. waitForSingleObject(hThread, 0xFFFFFFFF)
  3750. return true
  3751. }
  3752. disconnectEx() {
  3753. if (!checkHandles())
  3754. return 0
  3755. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  3756. if (ErrorLevel || dwAddress==0) {
  3757. ErrorLevel := ERROR_READ_MEMORY
  3758. return 0
  3759. }
  3760. dwAddress := readDWORD(hGTA, dwAddress + 0x3c9)
  3761. if (ErrorLevel || dwAddress==0) {
  3762. ErrorLevel := ERROR_READ_MEMORY
  3763. return 0
  3764. }
  3765. ecx := dwAddress
  3766. dwAddress := readDWORD(hGTA, dwAddress)
  3767. if (ErrorLevel || dwAddress==0) {
  3768. ErrorLevel := ERROR_READ_MEMORY
  3769. return 0
  3770. }
  3771. VarSetCapacity(injectData, 24, 0)
  3772. NumPut(0xB9, injectData, 0, "UChar")
  3773. NumPut(ecx, injectData, 1, "UInt")
  3774. NumPut(0xB8, injectData, 5, "UChar")
  3775. NumPut(dwAddress, injectData, 6, "UInt")
  3776. NumPut(0x68, injectData, 10, "UChar")
  3777. NumPut(0, injectData, 11, "UInt")
  3778. NumPut(0x68, injectData, 15, "UChar")
  3779. NumPut(500, injectData, 16, "UInt")
  3780. NumPut(0x50FF, injectData, 20, "UShort")
  3781. NumPut(0x08, injectData, 22, "UChar")
  3782. NumPut(0xC3, injectData, 23, "UChar")
  3783. writeRaw(hGTA, pInjectFunc, &injectData, 24)
  3784. if (ErrorLevel)
  3785. return false
  3786. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  3787. if (ErrorLevel)
  3788. return false
  3789. waitForSingleObject(hThread, 0xFFFFFFFF)
  3790. return true
  3791. }
  3792. setRestart() {
  3793. VarSetCapacity(old, 4, 0)
  3794. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  3795. if (ErrorLevel || dwAddress==0) {
  3796. ErrorLevel := ERROR_READ_MEMORY
  3797. return 0
  3798. }
  3799. NumPut(9,old,0,"Int")
  3800. writeRaw(hGTA, dwAddress + 957, &old, 4)
  3801. }
  3802. restart() {
  3803. restartGameEx()
  3804. disconnectEx()
  3805. Sleep, 1000
  3806. setRestart()
  3807. }
  3808. addChatMessage2(text, color := 0xFFFFFFFF, timestamp := true) {
  3809. return !checkHandles() ? false : callWithParams2(hGTA, dwSAMP + 0x64010, [["i", readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)], ["i", timestamp ? 4 : 2]
  3810. , ["s", text], ["i", 0], ["i", color], ["i", 0]], false, true)
  3811. }
  3812. global SAMP_CHAT_OFF            := 0x0152
  3813. global SAMP_CHAT_SIZE           := 144
  3814. readChatLine(line, color = 0) {
  3815. if (!checkHandles())
  3816. return 0
  3817. dwPTR := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  3818. chat := readString(hGTA, dwPTR + SAMP_CHAT_OFF + SIZE_SAMP_CHATMSG * (99 - line), SAMP_CHAT_SIZE)
  3819. if (!color)
  3820. chat := RegExReplace(chat, "\{[a-fA-F0-9]{6}\}")
  3821. return chat
  3822. }
  3823. setChatLine(line, text) {
  3824. if (!checkHandles())
  3825. return 0
  3826. dwPTR := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  3827. result := writeString(hGTA, dwPTR + SAMP_CHAT_OFF + SIZE_SAMP_CHATMSG * (99 - line), text)
  3828. return result
  3829. }
  3830. getKills() {
  3831. if (!checkHandles()) {
  3832. return false
  3833. }
  3834. pedLocal := readDWORD(hGTA, 0xB6F5F0)
  3835. if (!pedLocal) {
  3836. return false
  3837. }
  3838. peds := getPeds()
  3839. if (!peds) {
  3840. return false
  3841. }
  3842. data := []
  3843. For index, object in peds {
  3844. state := readMem(hGTA, object.PED + 0x530, 4, "UInt")
  3845. if ((pedStates[object.PED] == 55 || pedStates[object.PED] == 54) == (state == 55 || state == 54)) {
  3846. Continue
  3847. }
  3848. pedStates[object.PED] := state
  3849. if (object.PED && !object.ISNPC && (state == 55 || state == 54)) {
  3850. pedMurderer := readDWORD(hGTA, object.PED + 0x764)
  3851. murderer := false
  3852. For index2, object2 in peds
  3853. {
  3854. if (object2.PED == pedMurderer) {
  3855. murderer := object2
  3856. Break
  3857. }
  3858. }
  3859. weapon := readMem(hGTA, object.PED + 0x760, 4, "UInt")
  3860. skin := readMem(hGTA, object.PED + 0x22, 2, "UShort")
  3861. if (!murderer)
  3862. data.Push({victim: object, weapon: weapon, skin: skin})
  3863. else
  3864. data.Push({victim: object, murderer: murderer, weapon: weapon, skin: skin})
  3865. }
  3866. }
  3867. return data
  3868. }
  3869. getPeds() {
  3870. if (!checkHandles()) {
  3871. return false
  3872. }
  3873. if (!updateScoreboardDataEx()) {
  3874. return false
  3875. }
  3876. dwAddress := readDWORD(hGTA, dwSAMP + 0x21A0F8)
  3877. dwAddress := readDWORD(hGTA, dwAddress + 0x3CD)
  3878. dwAddress := readDWORD(hGTA, dwAddress + 0x18)
  3879. data := []
  3880. wID := readMem(hGTA, dwAddress + 0x4, 2, "UShort")
  3881. dwPed := readDWORD(hGTA, 0xB6F5F0)
  3882. if (readDWORD(hGTA, dwAddress + 0x1A) <= 16) {
  3883. sName := readString(hGTA, dwAddress + 0xA, 16)
  3884. } else {
  3885. sName := readString(hGTA, readDWORD(hGTA, dwAddress + 0xA), 20)
  3886. }
  3887. data.Push({LOCAL: true, ID: wID, PED: dwPed, ISNPC: false, NAME: sName})
  3888. Loop % 1000
  3889. {
  3890. i := A_Index - 1
  3891. dwRemotePlayer := readDWORD(hGTA, dwAddress + 0x2E + i*4)
  3892. if (!dwRemotePlayer) {
  3893. Continue
  3894. }
  3895. dwRemotePlayerData := readDWORD(hGTA, dwRemotePlayer)
  3896. dwRemotePlayerData := readDWORD(hGTA, dwRemotePlayerData)
  3897. dwPed := readDWORD(hGTA, dwRemotePlayerData + 0x2A4)
  3898. if (!dwPed) {
  3899. Continue
  3900. }
  3901. dwIsNPC := readDWORD(hGTA, dwRemotePlayer + 0x4)
  3902. if (readMem(hGTA, dwRemotePlayer + 0x1C, 4, "Int") <= 16) {
  3903. sName := readString(hGTA, dwRemotePlayer + 0xC, 16)
  3904. } else {
  3905. sName := readString(hGTA, readDWORD(hGTA, dwRemotePlayer + 0xC), 20)
  3906. }
  3907. data.Push({LOCAL: false, ID: i, PED: dwPed, ISNPC: dwIsNPC, NAME: sName})
  3908. }
  3909. return data
  3910. }
  3911. global GAMETEXT_1                   := 0xBAAD40
  3912. global GAMETEXT_2                   := 0xBAADC0
  3913. global GAMETEXT_3                   := 0xBAAE40
  3914. global GAMETEXT_4                   := 0xBAAEC0
  3915. global GAMETEXT_5                   := 0xBAABC0
  3916. getGameText(type = 1, length = 12) {
  3917. if (!checkHandles())
  3918. return ""
  3919. if (type == 1) {
  3920. text := readString(hGTA, GAMETEXT_1, length)
  3921. } else if (type == 2) {
  3922. text := readString(hGTA, GAMETEXT_2, length)
  3923. } else if (type == 3) {
  3924. text := readString(hGTA, GAMETEXT_3, length)
  3925. } else if (type == 4) {
  3926. text := readString(hGTA, GAMETEXT_4, length)
  3927. } else if (type == 5) {
  3928. text := readString(hGTA, GAMETEXT_5, length)
  3929. }
  3930. return text
  3931. }
  3932. getPlayerFPS() {
  3933. if (!checkHandles())
  3934. return -1
  3935. fFPS := readFloat(hGTA, 0xB7CB50)
  3936. if (ErrorLevel) {
  3937. ErrorLevel := ERROR_READ_MEMORY
  3938. return -1
  3939. }
  3940. ErrorLevel := ERROR_OK
  3941. return Round(fFPS)
  3942. }
  3943. getFPS() {
  3944. if (!checkHandles())
  3945. return 0
  3946. static timev := A_TickCount
  3947. static val   := readDWORD(hGTA, 0xB7CB4C)
  3948. temp := readDWORD(hGTA, 0xB7CB4C)
  3949. ret := (temp-val)/(A_TickCount-timev)*1000
  3950. timev := A_TickCount
  3951. val := temp
  3952. return Round(ret)
  3953. }
  3954. instruction := 0
  3955. fpsUnlock() {
  3956. if (!checkHandles())
  3957. return 0
  3958. global instruction
  3959. instruction := readMem(hGTA, dwSAMP + 0x9D9D0, 4, "UInt")
  3960. return writeMemory(hGTA, dwSAMP + 0x9D9D0, 0x5051FF15, 4, "UChar")
  3961. }
  3962. fpsLock() {
  3963. if (!checkHandles())
  3964. return 0
  3965. global instruction
  3966. if (instruction) {
  3967. return writeMemory(hGTA, dwSAMP + 0x9D9D0, instruction, 4, "UInt")
  3968. } else {
  3969. return false
  3970. }
  3971. }
  3972. blockDialog() {
  3973. if (!checkHandles()) {
  3974. ErrorLevel := ERROR_INVALID_HANDLE
  3975. return false
  3976. }
  3977. VarSetCapacity(injectBytecode, 7, 0)
  3978. Loop, 7 {
  3979. NumPut(0x90, injectBytecode, A_Index - 1, "UChar")
  3980. }
  3981. return writeRaw(hGTA, dwSAMP + 0x6C014, &injectBytecode, 7)
  3982. }
  3983. unblockDialog() {
  3984. if (!checkHandles()) {
  3985. ErrorLevel := ERROR_INVALID_HANDLE
  3986. return false
  3987. }
  3988. bytecodes := [0xC7, 0x46, 0x28, 0x1, 0x0, 0x0, 0x0]
  3989. VarSetCapacity(injectBytecode, 7, 0)
  3990. for i, o in bytecodes
  3991. NumPut(o, injectBytecode, i - 1, "UChar")
  3992. return writeRaw(hGTA, dwSAMP + 0x6C014, &injectBytecode, 7)
  3993. }
  3994. DownloadBin(url, byref buf) {
  3995. if (!DllCall("LoadLibrary", "str", "wininet") || !(h := DllCall("wininet\InternetOpen", "str", a, "uint", 1, "ptr", 0, "ptr", 0, "uint", 0, "ptr")))
  3996. return 0
  3997. c := s := 0
  3998. if (f := DllCall("wininet\InternetOpenUrl", "ptr", h, "str", url, "ptr", 0, "uint", 0, "uint", 0x80003000, "ptr", 0, "ptr")) {
  3999. while (DllCall("wininet\InternetQueryDataAvailable", "ptr", f, "uint*", s, "uint", 0, "ptr", 0) && s>0) {
  4000. VarSetCapacity(b, c+s, 0)
  4001. if (c>0)
  4002. DllCall("RtlMoveMemory", "ptr", &b, "ptr", &buf, "ptr", c)
  4003. DllCall("wininet\InternetReadFile", "ptr", f, "ptr", &b+c, "uint", s, "uint*", r)
  4004. c += r
  4005. VarSetCapacity(buf, c, 0)
  4006. if (c>0)
  4007. DllCall("RtlMoveMemory", "ptr", &buf, "ptr", &b, "ptr", c)
  4008. }
  4009. DllCall("wininet\InternetCloseHandle", "ptr", f)
  4010. }
  4011. DllCall("wininet\InternetCloseHandle", "ptr", h)
  4012. return c
  4013. }
  4014. DownloadToString(url, head, encoding = "utf-8") {
  4015. static a := "AutoHotkey/" A_AhkVersion
  4016. if (!DllCall("LoadLibrary", "str", "wininet") || !(h := DllCall("wininet\InternetOpen", "str", a, "uint", 1, "ptr", 0, "ptr", 0, "uint", 0, "ptr")))
  4017. return 0
  4018. c := s := 0, o := ""
  4019. if (f := DllCall("wininet\InternetOpenUrl", "ptr", h, "str", url, "str", head, "int", -1, "uint", 0x80083000, "ptr", 0, "ptr")) {
  4020. while (DllCall("wininet\InternetQueryDataAvailable", "ptr", f, "uint*", s, "uint", 0, "ptr", 0) && s > 0) {
  4021. VarSetCapacity(b, s, 0)
  4022. DllCall("wininet\InternetReadFile", "ptr", f, "ptr", &b, "uint", s, "uint*", r)
  4023. o .= StrGet(&b, r >> (encoding = "utf-16" || encoding = "cp1200"), encoding)
  4024. }
  4025. DllCall("wininet\InternetCloseHandle", "ptr", f)
  4026. }
  4027. DllCall("wininet\InternetCloseHandle", "ptr", h)
  4028. return o
  4029. }
  4030. URLDownloadToVar(url, showerror := false) {
  4031. hObject := ComObjCreate("WinHttp.WinHttpRequest.5.1")
  4032. try {
  4033. hObject.Open("GET", url)
  4034. hObject.SetTimeouts(0, 2000, 2000, 2000)
  4035. hObject.Send()
  4036. data := hObject.ResponseText
  4037. } catch e {
  4038. if (showerror == true) {
  4039. addChatMessage2(PREFIX . "Aktuell liegt ein Fehler in der Verbindung zum Server vor!")
  4040. }
  4041. return "ERROR_CONNECTION"
  4042. }
  4043. return data
  4044. }
  4045. Unzip(sZip, sUnz) {
  4046. fso := ComObjCreate("Scripting.FileSystemObject")
  4047. psh := ComObjCreate("Shell.Application")
  4048. zippedItems := psh.Namespace( sZip ).items().count
  4049. psh.Namespace( sUnz ).CopyHere( psh.Namespace( sZip ).items, 4|16 )
  4050. Loop {
  4051. Sleep, 50
  4052. unzippedItems := psh.Namespace( sUnz ).items().count
  4053. IfEqual, zippedItems, %unzippedItems%
  4054. break
  4055. }
  4056. }
  4057. PlayerInput(text) {
  4058. global alternativePlayerInput
  4059. if (alternativePlayerInput) {
  4060. Sleep, 100
  4061. Suspend, On
  4062. SendInput, t^a{backspace}%text%
  4063. Input, var, V, {Enter}{Esc}{LButton}
  4064. SendInput, {End}+{Home}{Del}{Esc}
  4065. Suspend, Off
  4066. } else {
  4067. KeyWait, Enter
  4068. SendInput, t^a{backspace}%text%
  4069. Input, var, V, {Enter}{Esc}{LButton}
  4070. SendInput, {End}+{Home}{Del}{Esc}
  4071. KeyWait, Enter
  4072. }
  4073. return var
  4074. }
  4075. getFullName(name, showerror := false) {
  4076. if name is number
  4077. {
  4078. name := getPlayerNameById(name)
  4079. if (name == "") {
  4080. if (showerror)
  4081. addChatMessage2(PREFIX . "Der Spieler mit der ID " . SECCOL . name . " {FFFFFF}ist nicht auf dem Server!")
  4082. return ""
  4083. } else {
  4084. return name
  4085. }
  4086. } else {
  4087. name := getPlayerIdByName(name)
  4088. if (name == -1) {
  4089. if (showerror)
  4090. addChatMessage2(PREFIX . "Der Spieler " . SECCOL . name . " {FFFFFF}ist nicht auf dem Server!")
  4091. return ""
  4092. } else {
  4093. return getPlayerNameById(name)
  4094. }
  4095. }
  4096. }
  4097. sendClientMessage(message) {
  4098. if (StrLen(message) > 144) {
  4099. subMessage := SubStr(message, 1, 141)
  4100. if (RegExMatch(subMessage, "(.+)({\S{6}})(\s*)$", message_)) {
  4101. addChatMessage2(message_1 . "...")
  4102. sendClientMessage(message_2 . "..." . message_3 . SubStr(message, 142))
  4103. } else if (RegExMatch(subMessage, "(.+)({\S{0,6})$", message_)) {
  4104. addChatMessage2(message_1 . "...")
  4105. subMessage2 := SubStr(message, 142)
  4106. if (RegExMatch(subMessage2, "^(\S{0,6}})(.+)", message2_)) {
  4107. sendClientMessage(message_2 . message2_1 . "..." . message2_2)
  4108. } else {
  4109. sendClientMessage("..." . subMessage2)
  4110. }
  4111. } else {
  4112. addChatMessage2(subMessage . "...")
  4113. color := ""
  4114. if (RegExMatch(subMessage, "(.*)({\S{6}})(.*)", message_)) {
  4115. color := message_2
  4116. }
  4117. sendClientMessage(color . "..." . SubStr(message, 142))
  4118. }
  4119. } else {
  4120. addChatMessage2(message)
  4121. }
  4122. }
  4123. getWeaponName(id) {
  4124. weapons := {0: "Fist", 1: "Brass Knuckles", 2: "Golf Club", 3: "Nightstick", 4: "Knife", 5: "Baseball Bat", 6: "Shovel", 7: "Pool Cue", 8: "Katana", 9: "Chainsaw", 10: "Purple " "Dil" "do" "", 11: "" "Dil" "do" "", 12: "Vibrator", 13: "Silver Vibrator", 14: "Flowers", 15: "Cane", 16: "Grenade", 17: "Tear Gas", 18: "Molotov Cocktail", 22: "9mm", 23: "Silenced 9mm", 24: "Desert Eagle", 25: "Shotgun", 26: "Sawnoff Shotgun", 27: "Combat Shotgun", 28: "Micro SMG/" "U" "zi" "", 29: "MP5", 30: "AK-47", 31: "M4", 32: "Tec-9", 33: "Country Rifle", 34: "Sniper Rifle", 35: "RPG", 36: "HS Rocket", 37: "Flamethrower", 38: "Minigun", 39: "Satchel Charge", 40: "Detonator", 41: "Spraycan", 42: "Fire Extinguisher", 43: "Camera", 44: "Night Vis Goggles", 45: "Thermal Goggles", 46: "Parachute", 47: "Fake Pistol", 49: "Vehicle", 50: "Helicopter Blades", 51: "Explosion", 53: "Drowned", 54: "Splat", 255: "Suicide"}
  4125. if (weapons[id]) {
  4126. return weapons[id]
  4127. }
  4128. return "Unknown"
  4129. }
  4130. getLocation() {
  4131. zone := getPlayerZone()
  4132. city := getPlayerCity()
  4133. if (city == "" || city == "Unbekannt") {
  4134. return zone
  4135. } else {
  4136. return zone . ", " . city
  4137. }
  4138. }
  4139. formatNumber(_number) {
  4140. StringReplace, _number, _number, -
  4141. IfEqual, ErrorLevel, 0, SetEnv Sign, -
  4142. Loop, Parse, _number, .
  4143. if (A_Index = 1) {
  4144. len := StrLen(A_LoopField)
  4145. Loop, Parse, A_LoopField
  4146. if (Mod(len-A_Index,3) = 0 and A_Index != len) {
  4147. x .= A_LoopField "."
  4148. } else {
  4149. x .= A_LoopField
  4150. }
  4151. } else {
  4152. Return Sign x "." A_LoopField
  4153. }
  4154. Return Sign x
  4155. }
  4156. formatTime(time) {
  4157. hours := Floor(time / 60 / 60)
  4158. minutes := Floor(time / 60) - hours * 60
  4159. seconds := time - minutes * 60 - hours * 60 * 60
  4160. time := ""
  4161. if (hours > 0) {
  4162. time .= hours . "h"
  4163. if (minutes > 0) {
  4164. time .= ", "
  4165. } else if (seconds > 0) {
  4166. time .= ", "
  4167. }
  4168. }
  4169. if (minutes > 0) {
  4170. time .= minutes . "min"
  4171. if (seconds > 0) {
  4172. time .= ", "
  4173. }
  4174. }
  4175. if (seconds > 0 || (minutes == 0 && hours == 0)) {
  4176. time .= seconds . "s"
  4177. }
  4178. return time
  4179. }
  4180. getDayTime() {
  4181. FormatTime, time,, HH
  4182. if (time >= 11 && time < 18) {
  4183. return "Tag"
  4184. } else if (time >= 18) {
  4185. return "Abend"
  4186. } else if (time >= 0 && time < 11) {
  4187. return "Morgen"
  4188. }
  4189. return ""
  4190. }
  4191. getUnixTimestamp(time_orig) {
  4192. StringLeft, now_year, time_orig, 4
  4193. StringMid, now_month, time_orig, 5, 2
  4194. StringMid, now_day, time_orig, 7, 2
  4195. StringMid, now_hour, time_orig, 9, 2
  4196. StringMid, now_min, time_orig, 11, 2
  4197. StringRight, now_sec, time_orig, 2
  4198. year_sec := 31536000 * (now_year - 1970)
  4199. leap_days := (now_year - 1972) / 4 + 1
  4200. Transform, leap_days, Floor, %leap_days%
  4201. this_leap := now_year/4
  4202. Transform, this_leap_round, Floor, %this_leap%
  4203. if (this_leap = this_leap_round) {
  4204. if (now_month <= 2) {
  4205. leap_days--
  4206. }
  4207. }
  4208. leap_sec := leap_days * 86400
  4209. if (now_month == 01)
  4210. month_sec = 0
  4211. if (now_month == 02)
  4212. month_sec = 2678400
  4213. if (now_month == 03)
  4214. month_sec = 5097600
  4215. if (now_month == 04)
  4216. month_sec = 7776000
  4217. if (now_month == 05)
  4218. month_sec = 10368000
  4219. if (now_month == 06)
  4220. month_sec = 13046400
  4221. if (now_month == 07)
  4222. month_sec = 15638400
  4223. if (now_month == 08)
  4224. month_sec = 18316800
  4225. if (now_month == 09)
  4226. month_sec = 20995200
  4227. if (now_month == 10)
  4228. month_sec = 23587200
  4229. if (now_month == 11)
  4230. month_sec = 26265600
  4231. if (now_month == 12)
  4232. month_sec = 28857600
  4233. day_sec := (now_day - 1) * 86400
  4234. hour_sec := now_hour * 3600
  4235. min_sec := now_min * 60
  4236. date_sec := year_sec + month_sec + day_sec + leap_sec + hour_sec + min_sec + now_sec
  4237. return date_sec
  4238. }
  4239. getDistanceBetween(posX, posY, posZ, _posX, _posY, _posZ, _posRadius) {
  4240. X := posX -_posX
  4241. Y := posY -_posY
  4242. Z := posZ -_posZ
  4243. if (((X < _posRadius) && (X > -_posRadius)) && ((Y < _posRadius) && (Y > -_posRadius)) && ((Z < _posRadius) && (Z > -_posRadius)))
  4244. return TRUE
  4245. return FALSE
  4246. }
  4247. getDistanceBetweenTwoPoints(pos1, pos2) {
  4248. if (!pos1 || !pos2) {
  4249. return 0
  4250. }
  4251. return Sqrt((pos1[1]-pos2[1]) * (pos1[1]-pos2[1]) + (pos1[2]-pos2[2]) * (pos1[2] - pos2[2]) + (pos1[3] - pos2[3]) * (pos1[3]-pos2[3]))
  4252. }
  4253. getDistanceToPoint(posX, posY, posZ, _posX, _posY, _posZ) {
  4254. return Sqrt((posX - _posX) ** 2 + (posY - _posY) ** 2 + (posZ - _posZ) ** 2)
  4255. }
  4256. IniRead(fileName, section, key, default := 0) {
  4257. IniRead, var, %fileName%, %section%, %key%, %default%
  4258. return var
  4259. }
  4260. getUserFriendlyHotkeyName(hk) {
  4261. StringUpper, hk, hk
  4262. hk := StrReplace(hk, "~", "")
  4263. hk := StrReplace(hk, "+", "UMSCHALT+")
  4264. hk := StrReplace(hk, "^", "STRG+")
  4265. hk := StrReplace(hk, "!", "ALT+")
  4266. return hk
  4267. }
  4268. min(var1, var2) {
  4269. return var1 < var2 ? var1 : var2
  4270. }
  4271. max(var1, var2) {
  4272. return var1 > var2 ? var1 : var2
  4273. }
  4274. compareVersions(v1, v2) {
  4275. v1Parts := StrSplit(v1, ".")
  4276. v2Parts := StrSplit(v2, ".")
  4277. i := 0
  4278. length := max(v1Parts.Length(), v2Parts.Length())
  4279. Loop, %length%
  4280. {
  4281. v1Part := i < v1Parts.Length() ? v1Parts[A_Index] : 0
  4282. v2Part := i < v2Parts.Length() ? v2Parts[A_Index] : 0
  4283. if (v1Part < v2Part)
  4284. return -1
  4285. if (v1Part > v2Part)
  4286. return 1
  4287. i++
  4288. }
  4289. return 0
  4290. }
  4291. global fractions := {"": [0, "Zivilist"], "lspd": [1, "LSPD"], "fbi": [2, "FBI"], "lvpd": [3, "LVPD"], "lsmd": [4, "LSMD"], "russen": [5, "Russen Mafia"], "yakuza": [6, "Yakuza"], "regierung": [7, "Regierung"], "agency": [8, "Agency"], "news": [9, "San News"], "grove": [10, "Grove Street"], "ballas": [11, "Ballas"], "lcm": [12, "LCM"], "oamt": [13, "Ordnungsamt"], "gmbh": [14, "Transport GmbH"], "rifa": [15, "S.F. Rifa"], "vagos": [16, "Vagos"], "triaden": [17, "Triaden"], "safd": [19, "SAFD"]}
  4292. getFraktionByID(id) {
  4293. fraction := ""
  4294. for index, entry in fractions {
  4295. if (entry[1] == id) {
  4296. fraction := entry[2]
  4297. break
  4298. }
  4299. }
  4300. return fraction
  4301. }
  4302. getFraktionColorByID(id) {
  4303. fractionColor := ""
  4304. if (id == 1) {
  4305. fractionColor := "{217BFF}"
  4306. } else if (id == 2) {
  4307. fractionColor := "{0E00DC}"
  4308. } else if (id == 4) {
  4309. fractionColor := "{AA3333}"
  4310. } else if (id == 5) {
  4311. fractionColor := "{85847F}"
  4312. } else if (id == 6) {
  4313. fractionColor := "{FFFFFF}"
  4314. } else if (id == 10) {
  4315. fractionColor := "{078C09}"
  4316. } else if (id == 11) {
  4317. fractionColor := "{9300FF}"
  4318. } else if (id == 12) {
  4319. fractionColor := "{0046FF}"
  4320. } else if (id == 15) {
  4321. fractionColor := "{00DCFF}"
  4322. } else if (id == 16) {
  4323. fractionColor := "{FFFF00}"
  4324. } else if (id == 17) {
  4325. fractionColor := "{FF8000}"
  4326. }
  4327. return fractionColor
  4328. }
  4329. getFraktionColorByName(name) {
  4330. fractionColor := ""
  4331. if (InStr(name, "LSPD")) {
  4332. fractionColor := "{217BFF}"
  4333. } else if (InStr(name, "FBI")) {
  4334. fractionColor := "{0E00DC}"
  4335. } else if (InStr(name, "LVPD")) {
  4336. fractionColor := "{AA3333}"
  4337. } else if (InStr(name, "Russen")) {
  4338. fractionColor := "{85847F}"
  4339. } else if (InStr(name, "Yakuza")) {
  4340. fractionColor := "{FFFFFF}"
  4341. } else if (InStr(name, "Grove")) {
  4342. fractionColor := "{078C09}"
  4343. } else if (InStr(name, "Ballas")) {
  4344. fractionColor := "{9300FF}"
  4345. } else if (InStr(name, "Chickos")) {
  4346. fractionColor := "{0046FF}"
  4347. } else if (InStr(name, "Rifa")) {
  4348. fractionColor := "{00DCFF}"
  4349. } else if (InStr(name, "Vagos")) {
  4350. fractionColor := "{FFFF00}"
  4351. } else if (InStr(name, "Triaden")) {
  4352. fractionColor := "{FF8000}"
  4353. }
  4354. return fractionColor
  4355. }
  4356. getFraktionNameShort(name) {
  4357. nameShort := ""
  4358. if (InStr(name, "Russen")) {
  4359. nameShort := "Russen"
  4360. } else if (InStr(name, "Yakuza")) {
  4361. nameShort := "Yaku"
  4362. } else if (InStr(name, "Grove")) {
  4363. nameShort := "GS"
  4364. } else if (InStr(name, "Ballas")) {
  4365. nameShort := "Ballas"
  4366. } else if (InStr(name, "Chickos")) {
  4367. nameShort := "LCM"
  4368. } else if (InStr(name, "Rifa")) {
  4369. nameShort := "Rifa"
  4370. } else if (InStr(name, "Vagos")) {
  4371. nameShort := "Vagos"
  4372. } else if (InStr(name, "Triaden")) {
  4373. nameShort := "Triaden"
  4374. }
  4375. return nameShort
  4376. }
  4377. getFraktionBySkinID(id) {
  4378. fraction := 0
  4379. skins := {5: [43, 111, 112, 113, 124, 125, 126, 127, 258, 272, 40], 6: [121, 122, 123, 186, 203, 204, 228, 169, 224], 10: [105, 106, 107, 269, 271, 65, 270], 11: [102, 103, 104, 293, 13], 12: [46, 47, 48, 98, 185, 223, 249, 214], 15: [114, 115, 116, 173, 174, 175, 184, 273, 195, 298], 16: [108, 109, 110, 292, 91], 17: [49, 117, 118, 120, 208, 263]}
  4380. for fname, fskins in skins
  4381. {
  4382. for index, fskin in fskins
  4383. {
  4384. if (fskin == id) {
  4385. fraction := fname
  4386. break, 2
  4387. }
  4388. }
  4389. }
  4390. return fraction
  4391. }
  4392. callWithParams2(hProcess, dwFunc, aParams, bCleanupStack = true, bThisCall = false, bReturn = false, sDatatype = "Char") {
  4393. if (!hProcess || !dwFunc)
  4394. return false
  4395. dataOffset := 0
  4396. i := aParams.MaxIndex()
  4397. bytesUsed := 0
  4398. bytesMax := 5120
  4399. dwLen := i * 5 + bCleanupStack * 3 + bReturn * 5 + 6
  4400. VarSetCapacity(injectData, dwLen, 0)
  4401. while (i > 0) {
  4402. if (aParams[i][1] == "i" || aParams[i][1] == "p" || aParams[i][1] == "f")
  4403. value := aParams[i][2]
  4404. else if (aParams[i][1] == "s") {
  4405. if (bytesMax - bytesUsed < StrLen(aParams[i][2]))
  4406. return false
  4407. value := pMemory + bytesUsed
  4408. writeString(hProcess, value, aParams[i][2])
  4409. bytesUsed += StrLen(aParams[i][2]) + 1
  4410. if (ErrorLevel)
  4411. return false
  4412. }
  4413. else
  4414. return false
  4415. NumPut((bThisCall && i == 1 ? 0xB9 : 0x68), injectData, dataOffset, "UChar")
  4416. NumPut(value, injectData, ++dataOffset, aParams[i][1] == "f" ? "Float" : "Int")
  4417. dataOffset += 4
  4418. i--
  4419. }
  4420. offset := dwFunc - (pInjectFunc + dataOffset + 5)
  4421. NumPut(0xE8, injectData, dataOffset, "UChar")
  4422. NumPut(offset, injectData, ++dataOffset, "Int")
  4423. dataOffset += 4
  4424. if (bReturn) {
  4425. NumPut(sDatatype = "Char" ? 0xA2 : 0xA3, injectData, dataOffset, "UChar")
  4426. NumPut(pParam1, injectData, ++dataOffset, "UInt")
  4427. dataOffset += 4
  4428. }
  4429. if (bCleanupStack) {
  4430. NumPut(0xC483, injectData, dataOffset, "UShort")
  4431. dataOffset += 2
  4432. NumPut((aParams.MaxIndex() - bThisCall) * 4, injectData, dataOffset, "UChar")
  4433. dataOffset++
  4434. }
  4435. NumPut(0xC3, injectData, dataOffset, "UChar")
  4436. writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
  4437. if (ErrorLevel)
  4438. return false
  4439. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  4440. if (ErrorLevel)
  4441. return false
  4442. waitForSingleObject(hThread, 0xFFFFFFFF)
  4443. closeProcess(hThread)
  4444. if (bReturn)
  4445. return readMem(hGTA, pParam1, 4, sDatatype)
  4446. return true
  4447. }
  4448. getWeaponByID(id)
  4449. {
  4450. if (oweaponNames[id])
  4451. return oweaponNames[id]
  4452. else
  4453. return "Unbekannt"
  4454. }
  4455. getAttackerWeapon()
  4456. {
  4457. if(!checkHandles())
  4458. return 0
  4459. dwLocalPED := readDWORD(hGTA, 0xB6F5F0)
  4460. dwAttackerWeapon := readDWORD(hGTA, dwLocalPED + 0x760)
  4461. return getWeaponByID(dwAttackerWeapon)
  4462. }
  4463. IsNumeric(str) {
  4464. cleanedStr := RegExReplace(str, "[^0-9]")
  4465. return (cleanedStr = str)
  4466. }
  4467. ShuffleWord(word) {
  4468. letters := StrSplit(word, "")
  4469. ShuffleArray(letters)
  4470. shuffledWord := ""
  4471. Loop, % letters.MaxIndex()
  4472. {
  4473. shuffledWord := shuffledWord . letters[A_Index]
  4474. }
  4475. return shuffledWord
  4476. }
  4477. ShuffleArray(ByRef arr) {
  4478. Random, seed, 0, 999999
  4479. Loop, % arr.MaxIndex() {
  4480. Random, index1, 1, arr.MaxIndex()
  4481. Random, index2, 1, arr.MaxIndex()
  4482. temp := arr[index1]
  4483. arr[index1] := arr[index2]
  4484. arr[index2] := temp
  4485. }
  4486. }
  4487. Evaluate(string) {
  4488. static sc := ComObjCreate("ScriptControl")
  4489. sc.Language := "JScript"
  4490. string := "a = " string ";"
  4491. sc.ExecuteStatement(string)
  4492. new := sc.Eval("a")
  4493. return new
  4494. }
  4495. isConnectedToRPG() {
  4496. if (isSAMPAvailable()) {
  4497. servername := getServerName()
  4498. if (inStr(servername, "GTA-City") && inStr(servername, "Reallife")) {
  4499. if (getServerIP() == "162.55.237.232" && getServerPort() == "7777") {
  4500. return true
  4501. }
  4502. }
  4503. }
  4504. return true
  4505. }
  4506. class JSON
  4507. {
  4508. class Load extends JSON.Functor
  4509. {
  4510. Call(self, ByRef text, reviver:="")
  4511. {
  4512. this.rev := IsObject(reviver) ? reviver : false
  4513. this.keys := this.rev ? {} : false
  4514. static quot := Chr(34), bashq := "\" . quot
  4515. , json_value := quot . "{[01234567890-tfn"
  4516. , json_value_or_array_closing := quot . "{[]01234567890-tfn"
  4517. , object_key_or_object_closing := quot . "}"
  4518. key := ""
  4519. is_key := false
  4520. root := {}
  4521. stack := [root]
  4522. next := json_value
  4523. pos := 0
  4524. while ((ch := SubStr(text, ++pos, 1)) != "") {
  4525. if InStr(" `t`r`n", ch)
  4526. continue
  4527. if !InStr(next, ch, 1)
  4528. this.ParseError(next, text, pos)
  4529. holder := stack[1]
  4530. is_array := holder.IsArray
  4531. if InStr(",:", ch) {
  4532. next := (is_key := !is_array && ch == ",") ? quot : json_value
  4533. } else if InStr("}]", ch) {
  4534. ObjRemoveAt(stack, 1)
  4535. next := stack[1]==root ? "" : stack[1].IsArray ? ",]" : ",}"
  4536. } else {
  4537. if InStr("{[", ch) {
  4538. static json_array := Func("Array").IsBuiltIn || ![].IsArray ? {IsArray: true} : 0
  4539. (ch == "{")
  4540. ? ( is_key := true
  4541. , value := {}
  4542. , next := object_key_or_object_closing )
  4543. : ( value := json_array ? new json_array : []
  4544. , next := json_value_or_array_closing )
  4545. ObjInsertAt(stack, 1, value)
  4546. if (this.keys)
  4547. this.keys[value] := []
  4548. } else {
  4549. if (ch == quot) {
  4550. i := pos
  4551. while (i := InStr(text, quot,, i+1)) {
  4552. value := StrReplace(SubStr(text, pos+1, i-pos-1), "\\", "\u005c")
  4553. static tail := A_AhkVersion<"2" ? 0 : -1
  4554. if (SubStr(value, tail) != "\")
  4555. break
  4556. }
  4557. if (!i)
  4558. this.ParseError("'", text, pos)
  4559. value := StrReplace(value,  "\/",  "/")
  4560. , value := StrReplace(value, bashq, quot)
  4561. , value := StrReplace(value,  "\b", "`b")
  4562. , value := StrReplace(value,  "\f", "`f")
  4563. , value := StrReplace(value,  "\n", "`n")
  4564. , value := StrReplace(value,  "\r", "`r")
  4565. , value := StrReplace(value,  "\t", "`t")
  4566. pos := i
  4567. i := 0
  4568. while (i := InStr(value, "\",, i+1)) {
  4569. if !(SubStr(value, i+1, 1) == "u")
  4570. this.ParseError("\", text, pos - StrLen(SubStr(value, i+1)))
  4571. uffff := Abs("0x" . SubStr(value, i+2, 4))
  4572. if (A_IsUnicode || uffff < 0x100)
  4573. value := SubStr(value, 1, i-1) . Chr(uffff) . SubStr(value, i+6)
  4574. }
  4575. if (is_key) {
  4576. key := value, next := ":"
  4577. continue
  4578. }
  4579. } else {
  4580. value := SubStr(text, pos, i := RegExMatch(text, "[\]\},\s]|$",, pos)-pos)
  4581. static number := "number", integer :="integer"
  4582. if value is %number%
  4583. {
  4584. if value is %integer%
  4585. value += 0
  4586. }
  4587. else if (value == "true" || value == "false")
  4588. value := %value% + 0
  4589. else if (value == "null")
  4590. value := ""
  4591. else
  4592. this.ParseError(next, text, pos, i)
  4593. pos += i-1
  4594. }
  4595. next := holder==root ? "" : is_array ? ",]" : ",}"
  4596. }
  4597. is_array? key := ObjPush(holder, value) : holder[key] := value
  4598. if (this.keys && this.keys.HasKey(holder))
  4599. this.keys[holder].Push(key)
  4600. }
  4601. }
  4602. return this.rev ? this.Walk(root, "") : root[""]
  4603. }
  4604. ParseError(expect, ByRef text, pos, len:=1)
  4605. {
  4606. static quot := Chr(34), qurly := quot . "}"
  4607. line := StrSplit(SubStr(text, 1, pos), "`n", "`r").Length()
  4608. col := pos - InStr(text, "`n",, -(StrLen(text)-pos+1))
  4609. msg := Format("{1}`n`nLine:`t{2}`nCol:`t{3}`nChar:`t{4}"
  4610. ,     (expect == "")     ? "Extra data"
  4611. : (expect == "'")    ? "Unterminated string starting at"
  4612. : (expect == "\")    ? "Invalid \escape"
  4613. : (expect == ":")    ? "Expecting ':' delimiter"
  4614. : (expect == quot)   ? "Expecting object key enclosed in double quotes"
  4615. : (expect == qurly)  ? "Expecting object key enclosed in double quotes or object closing '}'"
  4616. : (expect == ",}")   ? "Expecting ',' delimiter or object closing '}'"
  4617. : (expect == ",]")   ? "Expecting ',' delimiter or array closing ']'"
  4618. : InStr(expect, "]") ? "Expecting JSON value or array closing ']'"
  4619. :                      "Expecting JSON value(string, number, true, false, null, object or array)"
  4620. , line, col, pos)
  4621. static offset := A_AhkVersion<"2" ? -3 : -4
  4622. throw Exception(msg, offset, SubStr(text, pos, len))
  4623. }
  4624. Walk(holder, key)
  4625. {
  4626. value := holder[key]
  4627. if IsObject(value) {
  4628. for i, k in this.keys[value] {
  4629. v := this.Walk(value, k)
  4630. if (v != JSON.Undefined)
  4631. value[k] := v
  4632. else
  4633. ObjDelete(value, k)
  4634. }
  4635. }
  4636. return this.rev.Call(holder, key, value)
  4637. }
  4638. }
  4639. class Dump extends JSON.Functor
  4640. {
  4641. Call(self, value, replacer:="", space:="")
  4642. {
  4643. this.rep := IsObject(replacer) ? replacer : ""
  4644. this.gap := ""
  4645. if (space) {
  4646. static integer := "integer"
  4647. if space is %integer%
  4648. Loop, % ((n := Abs(space))>10 ? 10 : n)
  4649. this.gap .= " "
  4650. else
  4651. this.gap := SubStr(space, 1, 10)
  4652. this.indent := "`n"
  4653. }
  4654. return this.Str({"": value}, "")
  4655. }
  4656. Str(holder, key)
  4657. {
  4658. value := holder[key]
  4659. if (this.rep)
  4660. value := this.rep.Call(holder, key, ObjHasKey(holder, key) ? value : JSON.Undefined)
  4661. if IsObject(value) {
  4662. static type := A_AhkVersion<"2" ? "" : Func("Type")
  4663. if (type ? type.Call(value) == "Object" : ObjGetCapacity(value) != "") {
  4664. if (this.gap) {
  4665. stepback := this.indent
  4666. this.indent .= this.gap
  4667. }
  4668. is_array := value.IsArray
  4669. if (!is_array) {
  4670. for i in value
  4671. is_array := i == A_Index
  4672. until !is_array
  4673. }
  4674. str := ""
  4675. if (is_array) {
  4676. Loop, % value.Length() {
  4677. if (this.gap)
  4678. str .= this.indent
  4679. v := this.Str(value, A_Index)
  4680. str .= (v != "") ? v . "," : "null,"
  4681. }
  4682. } else {
  4683. colon := this.gap ? ": " : ":"
  4684. for k in value {
  4685. v := this.Str(value, k)
  4686. if (v != "") {
  4687. if (this.gap)
  4688. str .= this.indent
  4689. str .= this.Quote(k) . colon . v . ","
  4690. }
  4691. }
  4692. }
  4693. if (str != "") {
  4694. str := RTrim(str, ",")
  4695. if (this.gap)
  4696. str .= stepback
  4697. }
  4698. if (this.gap)
  4699. this.indent := stepback
  4700. return is_array ? "[" . str . "]" : "{" . str . "}"
  4701. }
  4702. } else
  4703. return ObjGetCapacity([value], 1)=="" ? value : this.Quote(value)
  4704. }
  4705. Quote(string)
  4706. {
  4707. static quot := Chr(34), bashq := "\" . quot
  4708. if (string != "") {
  4709. string := StrReplace(string,  "\",  "\\")
  4710. , string := StrReplace(string, quot, bashq)
  4711. , string := StrReplace(string, "`b",  "\b")
  4712. , string := StrReplace(string, "`f",  "\f")
  4713. , string := StrReplace(string, "`n",  "\n")
  4714. , string := StrReplace(string, "`r",  "\r")
  4715. , string := StrReplace(string, "`t",  "\t")
  4716. static rx_escapable := A_AhkVersion<"2" ? "O)[^\x20-\x7e]" : "[^\x20-\x7e]"
  4717. while RegExMatch(string, rx_escapable, m)
  4718. string := StrReplace(string, m.Value, Format("\u{1:04x}", Ord(m.Value)))
  4719. }
  4720. return quot . string . quot
  4721. }
  4722. }
  4723. Undefined[]
  4724. {
  4725. get {
  4726. static empty := {}, vt_empty := ComObject(0, &empty, 1)
  4727. return vt_empty
  4728. }
  4729. }
  4730. class Functor
  4731. {
  4732. __Call(method, ByRef arg, args*)
  4733. {
  4734. if IsObject(method)
  4735. return (new this).Call(method, arg, args*)
  4736. else if (method == "")
  4737. return (new this).Call(arg, args*)
  4738. }
  4739. }
  4740. }
  4741. icon = src\images\favicon.ico
  4742. IfExist, %icon%
  4743. Menu, Tray, Icon, %icon%
  4744. global cWhite               := "{FFFFFF}"
  4745. global cBlue                := "{2090B3}"
  4746. global cGrey                := "{BDBDBD}"
  4747. global cRed                 := "{FF0000}"
  4748. global cGreen               := "{00962B}"
  4749. global cYellow              := "{FFEE00}"
  4750. global cOrange              := "{FF8100}"
  4751. global cPrimar              := "{E700FF}"
  4752. global cSecond              := "{5E5E5E}"
  4753. Gui, Color, 212121
  4754. Gui, -Caption
  4755. Gui, Font, S14 CDefault, Verdana
  4756. Gui, Add, Text, x0 y15 w300 h75 +Center cFFFFFF, Der Keybinder wird startet ... `nHabe ein wenig Geduld!
  4757. Gui, Show, w300 h75, Start - %projectName% | Version: %version%
  4758. global firstStart := false
  4759. global firstSync := false
  4760. global keybinderStart := 0
  4761. keybinderStart := A_Hour . ":" . A_Min . ":" . A_Sec
  4762. global bk := false
  4763. global reuse1time := -1
  4764. global reuse2time := -1
  4765. global reuse3time := -1
  4766. global reuse4time := -1
  4767. global reuse5time := -1
  4768. global reusenFishCount := 0
  4769. global reusenFishMoney := 0
  4770. global bonusgehalt_timer := -1
  4771. global bonusgehalt := 0
  4772. global storeRobCounter := -1
  4773. global drug_timer := -1
  4774. global pak_timer := -1
  4775. global autoUseToggle := false
  4776. global isPaintball := false
  4777. global killstreakPaintball := 0
  4778. global findActive := false
  4779. global findPlayer := -1
  4780. global findCounter := 0
  4781. global findShowActive := false
  4782. global findShowPlayer := -1
  4783. global findShowFindPlayer := -1
  4784. global findShowCounter := 0
  4785. global countdownActive := false
  4786. global countdownChat := ""
  4787. global countdownTime := 0
  4788. global autosyncCounter := 0
  4789. global tempomatActive := false
  4790. global currentSpeed := 0
  4791. global sellFishTimeout_ = true
  4792. global towersTimeout_ := true
  4793. global array_Towers := []
  4794. array_Towers[1] := [339.979,-1843.14,3.5331]
  4795. array_Towers[2] := [890.485,-1256.74,14.971]
  4796. array_Towers[3] := [1917.59,-1408.28,13.5703]
  4797. array_Towers[4] := [2086.42,-2214.92,13.5469]
  4798. array_Towers[5] := [2796.84,-1453.18,40.0446]
  4799. array_Towers[6] := [2857.51,920.292,10.75]
  4800. array_Towers[7] := [1626.29,994.515,10.8203]
  4801. array_Towers[8] := [2184.78,2041.66,16.322]
  4802. array_Towers[9] := [1363.84,1253.2,10.8203]
  4803. array_Towers[10] := [49.977,1168.43,18.6641]
  4804. array_Towers[11] := [2496.15,2508.32,18.5881]
  4805. array_Towers[12] := [-2505.01,767.441,35.1719]
  4806. array_Towers[13] := [-1898,428.438,35.1719]
  4807. array_Towers[14] := [-1582.94,-663.128,14.1484]
  4808. array_Towers[15] := [-2397.48,-575.508,132.117]
  4809. array_Towers[16] := [-998.939,-1128.46,129.213]
  4810. array_Towers[17] := [1370.25,329.518,19.4534]
  4811. global trashDialog := false
  4812. global gateDialog := false
  4813. global gateTimeout_ := true
  4814. global array_Gates := []
  4815. loadGates()
  4816. global sprayTimeout_ := true
  4817. global array_Sprays := []
  4818. loadSprays()
  4819. global array_Trashcan := []
  4820. loadTrashcans()
  4821. global cookTimeout_ := false
  4822. global array_Cook := []
  4823. array_Cook[1] := [376.3651, -61.0868, 1001.5078]
  4824. array_Cook[2] := [377.7927, -57.4440, 1001.5078]
  4825. array_Cook[3] := [369.5478, -6.0176, 1001.8589]
  4826. array_Cook[4] := [374.0126, -113.5144, 1001.4922]
  4827. global kettenTimeout_ := false
  4828. global array_Ketten := []
  4829. array_Ketten[1] := [1211.8478, -905.8502,42.9267, 3.1]
  4830. array_Ketten[2] := [1026.3337, -1350.5065, 13.7266, 3.1]
  4831. array_Ketten[3] := [2411.7668, -1490.4229, 24.0000, 3.1]
  4832. array_Ketten[4] := [2113.8560, -1788.3135, 13.5608, 3.1]
  4833. global zollTimeout_ := true
  4834. global array_Zoll   := []
  4835. array_Zoll[1] := [1733.4700, 546.3700, 26.00]
  4836. array_Zoll[2] := [1741.1100, 543.4700, 26.00]
  4837. array_Zoll[3] := [1744.0300, 523.6300, 27.00]
  4838. array_Zoll[4] := [1752.7100, 521.6900, 27.00]
  4839. array_Zoll[5] := [512.5400, 476.6200, 18.00]
  4840. array_Zoll[6] := [529.2200, 467.2100, 18.00]
  4841. array_Zoll[7] := [-159.7900, 414.1800, 11.00]
  4842. array_Zoll[8] := [-157.4400, 392.2400, 11.00]
  4843. array_Zoll[9] := [-1408.2300, 824.1900, 47.00]
  4844. array_Zoll[10] := [-1414.7700, 803.5900, 47.00]
  4845. array_Zoll[11] := [-2695.0500, 1284.6300, 55.00]
  4846. array_Zoll[12] := [-2686.3400, 1284.2400, 55.00]
  4847. array_Zoll[13] := [-2676.6200, 1265.3700, 55.00]
  4848. array_Zoll[14] := [-2668.1800, 1264.9100, 55.00]
  4849. array_Zoll[15] := [-963.0800, -343.0500, 36.00]
  4850. array_Zoll[16] := [-968.0000, -322.3300, 36.00]
  4851. array_Zoll[17] := [-71.7600, -892.4700, 15.00]
  4852. array_Zoll[18] := [-68.7400, -867.9600, 15.00]
  4853. array_Zoll[19] := [100.2000, -1284.3700, 14.00]
  4854. array_Zoll[20] := [94.4000, -1277.8200, 14.00]
  4855. array_Zoll[21] := [97.1900, -1254.1100, 14.00]
  4856. array_Zoll[22] := [94.6900, -1245.5900, 14.00]
  4857. array_Zoll[23] := [42.7100, -1537.9800, 5.00]
  4858. array_Zoll[24] := [58.0200, -1524.9300, 5.00]
  4859. global gasTimeout_ := true
  4860. global array_Gas := []
  4861. array_Gas[1] := [700.0000, -1930.0000, 0.0000]
  4862. array_Gas[2] := [1833.0000, -2431.0000, 14.0000]
  4863. array_Gas[3] := [1555.0000, -1605.0000, 14.0000]
  4864. array_Gas[4] := [615.0000, 1689.0000, 7.0000]
  4865. array_Gas[5] := [-1328.0000, 2677.0000, 40.0000]
  4866. array_Gas[6] := [1596.0000, 2199.0000, 11.0000]
  4867. array_Gas[7] := [2202.0000, 2474.0000, 11.0000]
  4868. array_Gas[8] := [2114.0000, 920.0000, 11.0000]
  4869. array_Gas[9] := [-2408.0000, 976.0000, 45.0000]
  4870. array_Gas[10] := [-2029.0000, 156.0000, 29.0000]
  4871. array_Gas[11] := [-1676.0000, 414.0000, 7.0000]
  4872. array_Gas[12] := [1004.0000, -939.0000, 43.0000]
  4873. array_Gas[13] := [1944.0000, -1773.0000, 14.0000]
  4874. array_Gas[14] := [-90.0000, -1169.0000, 3.0000]
  4875. array_Gas[15] := [-1605.0000, -2714.0000, 49.0000]
  4876. array_Gas[16] := [-2243.0000, -2560.0000, 32.0000]
  4877. array_Gas[17] := [1381.0000, 457.0000, 20.0000]
  4878. array_Gas[18] := [70.0000, 1218.0000, 19.0000]
  4879. global fishTimeout_ := true
  4880. global array_Fish := []
  4881. array_Fish[1] := [1610.3545, 599.4703, 7.7813]
  4882. array_Fish[2] := [1606.8572, 599.4689, 7.7802]
  4883. array_Fish[3] := [1603.3273, 599.4689, 7.7802]
  4884. array_Fish[4] := [1599.8569, 599.8057, 7.7802]
  4885. array_Fish[5] := [1596.3372, 599.7783, 7.7813]
  4886. array_Fish[6] := [1592.8359, 599.4689, 7.7813]
  4887. array_Fish[7] := [1589.3557, 599.4712, 7.7813]
  4888. array_Fish[8] := [1585.8787, 599.4683, 7.7802]
  4889. array_Fish[9] := [403.8053, -2088.7981, 7.8359]
  4890. array_Fish[10] := [398.7274, -2088.7927, 7.8359]
  4891. array_Fish[11] := [396.1470, -2088.7983, 7.8359]
  4892. array_Fish[12] := [391.0635, -2088.7979, 7.8359]
  4893. array_Fish[13] := [383.3910, -2088.6040, 7.8359]
  4894. array_Fish[14] := [374.9511, -2088.6829, 7.8359]
  4895. array_Fish[15] := [369.8314, -2088.7937, 7.8359]
  4896. array_Fish[16] := [367.2829, -2088.7981, 7.8359]
  4897. array_Fish[17] := [362.2083, -2088.7891, 7.8359]
  4898. array_Fish[18] := [354.5507, -2088.7954, 7.8359]
  4899. array_Fish[19] := [-2091.2231, 1436.5226, 7.1016]
  4900. array_Fish[20] := [-2086.6912, 1436.4066, 7.1016]
  4901. array_Fish[21] := [-2082.6958, 1436.1895, 7.1016]
  4902. array_Fish[22] := [-2078.2371, 1436.4476, 7.1016]
  4903. array_Fish[23] := [-2073.6873, 1436.2191, 7.1016]
  4904. array_Fish[24] := [-2069.6814, 1436.1677, 7.1007]
  4905. array_Fish[25] := [-2065.1917, 1436.3531, 7.1007]
  4906. array_Fish[26] := [1971.0696,-1179.2335,20.0234]
  4907. array_Fish[27] := [1975.8022,-1220.2288,20.0234]
  4908. global dietrichTimeout_ := false
  4909. Loop, 5 {
  4910. fishName_%A_Index% := "nichts"
  4911. fishLBS_%A_Index% := 0
  4912. fishHP_%A_Index% := 0
  4913. }
  4914. Loop, 5 {
  4915. fishName%A_Index% := "nichts"
  4916. fishHP%A_Index% := 0
  4917. fishPrice%A_Index% := 0
  4918. }
  4919. SetTimer, MainTimer, 100
  4920. SetTimer, KillDeathTimer, 100
  4921. SetTimer, ChatTimer, 100
  4922. SetTimer, XTimer, 500
  4923. SetTimer, XTimerTimeout, 500
  4924. SetTimer, SekundenTimer, 1000
  4925. SetTimer, TempoTimer, 25
  4926. array_ini_settings    := []
  4927. array_ini_settings[1] := ["Allgemein", "Prefix", "prefix", "EasyBinder"]
  4928. array_ini_settings[2] := ["Allgemein", "MotorSystem", "motorsystem", 0]
  4929. array_ini_settings[3] := ["Allgemein", "LockSystem", "locksystem", 0]
  4930. array_ini_settings[4] := ["Allgemein", "ZollSystem", "zollsystem", 0]
  4931. array_ini_settings[5] := ["Allgemein", "TankSystem", "tanksystem", 0]
  4932. array_ini_settings[6] := ["Allgemein", "LottoSystem", "lottosystem", 0]
  4933. array_ini_settings[7] := ["Allgemein", "LottoZahl", "lottozahl", 0]
  4934. array_ini_settings[8] := ["Allgemein", "ReusenSystem", "reusensystem", 0]
  4935. array_ini_settings[9] := ["Allgemein", "TorSystem", "torsystem", 0]
  4936. array_ini_settings[10] := ["Allgemein", "TowerSystem", "towersystem", 0]
  4937. array_ini_settings[11] := ["Allgemein", "FishSystem", "fishsystem", 0]
  4938. array_ini_settings[12] := ["Allgemein", "SpraySystem", "spraysystem", 0]
  4939. array_ini_settings[13] := ["Allgemein", "KettenSystem", "kettensystem", 0]
  4940. array_ini_settings[14] := ["Allgemein", "DamageInfo", "damageinfo", 0]
  4941. array_ini_settings[15] := ["Allgemein", "DamageSound", "damagesound", 0]
  4942. array_ini_settings[16] := ["Allgemein", "AutoSync", "autosync", 0]
  4943. array_ini_settings[17] := ["Allgemein", "HelloFrak", "hellofrak", 0]
  4944. array_ini_settings[18] := ["Allgemein", "HelloCrew", "hellocrew", 0]
  4945. array_ini_settings[19] := ["Allgemein", "ThankPak", "thankpak", 0]
  4946. array_ini_settings[20] := ["Allgemein", "Admin", "admin", 0]
  4947. array_ini_settings[21] := ["Werbung", "Werbetext1", "werbetext1", 0]
  4948. array_ini_settings[22] := ["Werbung", "Werbetext2", "werbetext2", 0]
  4949. array_ini_settings[23] := ["Werbung", "Werbetext3", "werbetext3", 0]
  4950. array_ini_settings[24] := ["Kill", "KillActive", "killactive", 0]
  4951. array_ini_settings[25] := ["Kill", "KillText", "killtext", "+1 Kill | #[KILLS]"]
  4952. array_ini_settings[26] := ["Death", "DeathActive", "deathactive", 0]
  4953. array_ini_settings[27] := ["Death", "DeathText", "deathtext", "/f +1 Tod in [ZONE] [CITY] | #[DEATHS]"]
  4954. array_ini_settings[28] := ["ItemUse", "DrugUse", "druguse", 0]
  4955. array_ini_settings[29] := ["ItemUse", "PakUse", "pakuse", 0]
  4956. array_ini_settings[30] := ["ItemUse", "FishUse", "fishuse", 0]
  4957. array_ini_settings[31] := ["Ausrüstungsprofile", "Profil1_1", "profile1_1", ""]
  4958. array_ini_settings[32] := ["Ausrüstungsprofile", "Profil1_2", "profile1_2", ""]
  4959. array_ini_settings[33] := ["Ausrüstungsprofile", "Profil1_3", "profile1_3", ""]
  4960. array_ini_settings[34] := ["Ausrüstungsprofile", "Profil1_4", "profile1_4", ""]
  4961. array_ini_settings[35] := ["Ausrüstungsprofile", "Profil1_5", "profile1_5", ""]
  4962. array_ini_settings[36] := ["Ausrüstungsprofile", "Profil1_6", "profile1_6", ""]
  4963. array_ini_settings[37] := ["Ausrüstungsprofile", "Profil2_1", "profile2_1", ""]
  4964. array_ini_settings[38] := ["Ausrüstungsprofile", "Profil2_2", "profile2_2", ""]
  4965. array_ini_settings[39] := ["Ausrüstungsprofile", "Profil2_3", "profile2_3", ""]
  4966. array_ini_settings[40] := ["Ausrüstungsprofile", "Profil2_4", "profile2_4", ""]
  4967. array_ini_settings[41] := ["Ausrüstungsprofile", "Profil2_5", "profile2_5", ""]
  4968. array_ini_settings[42] := ["Ausrüstungsprofile", "Profil2_6", "profile2_6", ""]
  4969. array_ini_settings[43] := ["Ausrüstungsprofile", "Profil3_1", "profile3_1", ""]
  4970. array_ini_settings[44] := ["Ausrüstungsprofile", "Profil3_2", "profile3_2", ""]
  4971. array_ini_settings[45] := ["Ausrüstungsprofile", "Profil3_3", "profile3_3", ""]
  4972. array_ini_settings[46] := ["Ausrüstungsprofile", "Profil3_4", "profile3_4", ""]
  4973. array_ini_settings[47] := ["Ausrüstungsprofile", "Profil3_5", "profile3_5", ""]
  4974. array_ini_settings[48] := ["Ausrüstungsprofile", "Profil3_6", "profile3_6", ""]
  4975. array_ini_settings[49] := ["Fischen", "FishMode", "fishmode", 0]
  4976. array_ini_settings[50] := ["ItemUse", "DrugUseCountdown", "drugusecountdown", 0]
  4977. array_ini_settings[51] := ["Tempomat", "Tempomat", "tempomat", 0]
  4978. array_ini_settings[52] := ["Reusen", "ReusenTimer", "reusentimer", 15]
  4979. settings = ini\settings.ini
  4980. if (!FileExist(settings))
  4981. {
  4982. Loop % array_ini_settings.MaxIndex() {
  4983. value := array_ini_settings[A_Index][4]
  4984. key := array_ini_settings[A_Index][2]
  4985. head := array_ini_settings[A_Index][1]
  4986. IniWrite, %value%, %settings%, %head%, %key%
  4987. }
  4988. } else {
  4989. Loop % array_ini_settings.MaxIndex() {
  4990. value := array_ini_settings[A_Index][3]
  4991. value2 := array_ini_settings[A_Index][4]
  4992. key := array_ini_settings[A_Index][2]
  4993. head := array_ini_settings[A_Index][1]
  4994. IniRead, settings_%value%, %settings%, %head%, %key%
  4995. if(settings_%value% == "ERROR") {
  4996. IniWrite, %value2%, %settings%, %head%, %key%
  4997. }
  4998. }
  4999. }
  5000. Loop % array_ini_settings.MaxIndex() {
  5001. value := array_ini_settings[A_Index][3]
  5002. key := array_ini_settings[A_Index][2]
  5003. head := array_ini_settings[A_Index][1]
  5004. IniRead, settings_%value%, %settings%, %head%, %key%
  5005. }
  5006. global prefix := cPrimar . settings_prefix . " • " . cSecond
  5007. array_ini_stats    := []
  5008. array_ini_stats[1] := ["Kills", "kills", 0]
  5009. array_ini_stats[2] := ["Deaths", "deaths", 0]
  5010. array_ini_stats[3] := ["TankLiter", "tankliter", 0]
  5011. array_ini_stats[4] := ["TankGeld", "tankgeld", 0]
  5012. array_ini_stats[5] := ["StoreRobs", "storerobs", 0]
  5013. array_ini_stats[6] := ["StoreRobsGeld", "storerobsgeld", 0]
  5014. array_ini_stats[7] := ["ATMRobs", "atmrob", 0]
  5015. array_ini_stats[8] := ["ATMRobsGeld", "atmrobgeld", 0]
  5016. array_ini_stats[9] := ["EquipMats", "equipmats", 0]
  5017. array_ini_stats[10] := ["EquipGeld", "equipgeld", 0]
  5018. array_ini_stats[11] := ["Muelltonnen", "trashs", 0]
  5019. array_ini_stats[12] := ["CrewEisen", "crew_eisen", 0]
  5020. array_ini_stats[13] := ["CrewAlu", "crew_alu", 0]
  5021. array_ini_stats[14] := ["CrewPseudo", "crew_pseudo", 0]
  5022. array_ini_stats[15] := ["CrewPakete", "crew_pakete", 0]
  5023. array_ini_stats[16] := ["CrewGeld", "crew_money", 0]
  5024. array_ini_stats[17] := ["SprayTags", "spraytags", 0]
  5025. array_ini_stats[18] := ["FishGeld", "fishgeld", 0]
  5026. stats = ini\stats\stats.ini
  5027. if (!FileExist(stats))
  5028. {
  5029. Loop % array_ini_stats.MaxIndex() {
  5030. value := array_ini_stats[A_Index][3]
  5031. key := array_ini_stats[A_Index][1]
  5032. IniWrite, %value%, %stats%, Statistik, %key%
  5033. }
  5034. } else {
  5035. Loop % array_ini_stats.MaxIndex() {
  5036. value := array_ini_stats[A_Index][2]
  5037. value2 := array_ini_stats[A_Index][3]
  5038. key := array_ini_stats[A_Index][1]
  5039. IniRead, stats_%value%, %stats%, Statistik, %key%
  5040. if(stats_%value% == "ERROR") {
  5041. IniWrite, %value2%, %stats%, Statistik, %key%
  5042. }
  5043. }
  5044. }
  5045. Loop % array_ini_stats.MaxIndex() {
  5046. value := array_ini_stats[A_Index][2]
  5047. key := array_ini_stats[A_Index][1]
  5048. IniRead, stats_%value%, %stats%, Statistik, %key%
  5049. }
  5050. array_ini_dstats    := []
  5051. array_ini_dstats[1] := ["Kills[" . A_DD . ":" . A_MM . ":" . A_YYYY . "]", "kills", 0]
  5052. array_ini_dstats[2] := ["Deaths[" . A_DD . ":" . A_MM . ":" . A_YYYY . "]", "deaths", 0]
  5053. dstats = ini\stats\daystats.ini
  5054. if (!FileExist(dstats))
  5055. {
  5056. Loop % array_ini_dstats.MaxIndex() {
  5057. value := array_ini_dstats[A_Index][3]
  5058. key := array_ini_dstats[A_Index][1]
  5059. IniWrite, %value%, %dstats%, Statistik, %key%
  5060. }
  5061. } else {
  5062. Loop % array_ini_dstats.MaxIndex() {
  5063. value := array_ini_dstats[A_Index][2]
  5064. value2 := array_ini_dstats[A_Index][3]
  5065. key := array_ini_dstats[A_Index][1]
  5066. IniRead, daystats_%value%, %dstats%, Statistik, %key%
  5067. if(daystats_%value% == "ERROR") {
  5068. IniWrite, %value2%, %dstats%, Statistik, %key%
  5069. }
  5070. }
  5071. }
  5072. Loop % array_ini_dstats.MaxIndex() {
  5073. value := array_ini_dstats[A_Index][2]
  5074. key := array_ini_dstats[A_Index][1]
  5075. IniRead, daystats_%value%, %dstats%, Statistik, %key%
  5076. }
  5077. array_ini_mstats    := []
  5078. array_ini_mstats[1] := ["Kills[" . A_MM . ":" . A_YYYY . "]", "kills", 0]
  5079. array_ini_mstats[2] := ["Deaths[" . A_MM . ":" . A_YYYY . "]", "deaths", 0]
  5080. mstats = ini\stats\monthstats.ini
  5081. if (!FileExist(mstats))
  5082. {
  5083. Loop % array_ini_mstats.MaxIndex() {
  5084. value := array_ini_mstats[A_Index][3]
  5085. key := array_ini_mstats[A_Index][1]
  5086. IniWrite, %value%, %mstats%, Statistik, %key%
  5087. }
  5088. } else {
  5089. Loop % array_ini_mstats.MaxIndex() {
  5090. value := array_ini_mstats[A_Index][2]
  5091. value2 := array_ini_mstats[A_Index][3]
  5092. key := array_ini_mstats[A_Index][1]
  5093. IniRead, monthstats_%value%, %mstats%, Statistik, %key%
  5094. if(monthstats_%value% == "ERROR") {
  5095. IniWrite, %value2%, %mstats%, Statistik, %key%
  5096. }
  5097. }
  5098. }
  5099. Loop % array_ini_mstats.MaxIndex() {
  5100. value := array_ini_mstats[A_Index][2]
  5101. key := array_ini_mstats[A_Index][1]
  5102. IniRead, monthstats_%value%, %mstats%, Statistik, %key%
  5103. }
  5104. array_ini_items := []
  5105. array_ini_items[1] := ["Drogen", "drogen", 0]
  5106. array_ini_items[2] := ["ErsteHilfe", "erstehilfe", 0]
  5107. array_ini_items[3] := ["Lagerfeuer", "lagerfeuer", 0]
  5108. array_ini_items[4] := ["Kanister", "kanister", 0]
  5109. items = ini\items.ini
  5110. if (!FileExist(items))
  5111. {
  5112. Loop % array_ini_items.MaxIndex() {
  5113. value := array_ini_items[A_Index][3]
  5114. key := array_ini_items[A_Index][1]
  5115. IniWrite, %value%, %items%, Items, %key%
  5116. }
  5117. } else {
  5118. Loop % array_ini_items.MaxIndex() {
  5119. value := array_ini_items[A_Index][2]
  5120. value2 := array_ini_items[A_Index][3]
  5121. key := array_ini_items[A_Index][1]
  5122. IniRead, items_%value%, %items%, Items, %key%
  5123. if(items_%value% == "ERROR") {
  5124. IniWrite, %value2%, %items%, Items, %key%
  5125. }
  5126. }
  5127. }
  5128. Loop % array_ini_items.MaxIndex() {
  5129. value := array_ini_items[A_Index][2]
  5130. key := array_ini_items[A_Index][1]
  5131. IniRead, items_%value%, %items%, Items, %key%
  5132. }
  5133. registeredHotkeys := Object()
  5134. defaultHotkeysArray := Object()
  5135. defaultHotkeysArray["motorSystem"] := "~1"
  5136. defaultHotkeysArray["lockSystem"] := "~y"
  5137. defaultHotkeysArray["lichtSystem"] := "~l"
  5138. defaultHotkeysArray["stats"] := "~-"
  5139. defaultHotkeysArray["tempomat"] := "~^t"
  5140. defaultHotkeysArray["equipProfile1"] := "F1"
  5141. defaultHotkeysArray["equipProfile2"] := "F2"
  5142. defaultHotkeysArray["equipProfile3"] := "F3"
  5143. defaultHotkeysArray["equip"] := "F4"
  5144. defaultHotkeysArray["showFrakMember"] := "~m"
  5145. defaultHotkeysArray["showCrewMember"] := "~o"
  5146. defaultHotkeysArray["useDrugs"] := "~2"
  5147. defaultHotkeysArray["usePak"] := "~3"
  5148. defaultHotkeysArray["useFish"] := "~4"
  5149. defaultHotkeysArray["countdown"] := "END"
  5150. defaultHotkeysArray["togPhone"] := "F5"
  5151. defaultHotkeysArray["thanks"] := "~ü"
  5152. defaultHotkeysArray["sorry"] := "~ö"
  5153. defaultHotkeysArray["repeat"] := "~ä"
  5154. defaultHotkeysArray["heal"] := "~^h"
  5155. defaultHotkeysArray["showPosC"] := "~^p"
  5156. defaultHotkeysArray["showPosF"] := "~p"
  5157. defaultHotkeysArray["stopAutomaticSystem"] := "~<"
  5158. defaultHotkeysArray["pause"] := "F12"
  5159. defaultHotkeysArray["gate"] := "~NumpadSub"
  5160. hotkeys = ini\hotkeys.ini
  5161. IfNotExist, %hotkeys%
  5162. {
  5163. for key, value in defaultHotkeysArray {
  5164. IniWrite, %value%, %hotkeys%, Hotkeys, %key%
  5165. }
  5166. }
  5167. for key, value in defaultHotkeysArray {
  5168. IniRead, hk, %hotkeys%, Hotkeys, %key%, %A_Space%
  5169. if (!hk) {
  5170. alreadyRegistered := false
  5171. for k, v in registeredHotkeys {
  5172. hk2 := StrReplace(value, "~", "")
  5173. v2 := StrReplace(v, "~", "")
  5174. if (hk2 = v2 && StrLen(hk2) == StrLen(v2)) {
  5175. alreadyRegistered := true
  5176. alreadyRegisteredKey := k
  5177. alreadyRegisteredValue := v
  5178. break
  5179. }
  5180. }
  5181. if (!alreadyRegistered) {
  5182. Hotkey, %value%, %key%Label
  5183. StringReplace, %key%NoMods, value, ~
  5184. registeredHotkeys[key] := value
  5185. } else {
  5186. MsgBox, 0, Hotkey Fehler | %projectname% , Der Standard-Hotkey für %key% (%value%) ist bereits registriert (%alreadyRegisteredKey% - %alreadyRegisteredValue%)! `nLösche die hotkeys.ini Datei aus dem INI Ordner um den Fehler zu beheben!
  5187. ExitApp
  5188. }
  5189. } else if (hk != "---") {
  5190. alreadyRegistered := false
  5191. for k, v in registeredHotkeys {
  5192. hk2 := StrReplace(hk, "~", "")
  5193. v2 := StrReplace(v, "~", "")
  5194. if (hk2 = v2 && StrLen(hk2) == StrLen(v2)) {
  5195. alreadyRegistered := true
  5196. alreadyRegisteredKey := k
  5197. alreadyRegisteredValue := v
  5198. break
  5199. }
  5200. }
  5201. if (!alreadyRegistered) {
  5202. Hotkey, %hk%, %key%Label
  5203. StringReplace, %key%NoMods, hk, ~
  5204. registeredHotkeys[key] := hk
  5205. } else {
  5206. MsgBox, 0, Hotkey Fehler | %projectname% , Der Standard-Hotkey für %key% (%hk%) ist bereits registriert (%alreadyRegisteredKey% - %alreadyRegisteredValue%)! `nLösche die hotkeys.ini Datei aus dem INI Ordner um den Fehler zu beheben!
  5207. ExitApp
  5208. }
  5209. }
  5210. }
  5211. global ownHotkeyCount := 48
  5212. ownhotkeys = ini\hotkeys.ini
  5213. IfNotExist, %ownhotkeys%
  5214. {
  5215. defaultOwnHotkeysArray := []
  5216. for key, value in defaultOwnHotkeysArray {
  5217. hk := value[1]
  5218. text := value[2]
  5219. IniWrite, 1, %ownhotkeys%, %key%, Active
  5220. IniWrite, %hk%, %ownhotkeys%, %key%, Hotkey
  5221. IniWrite, %text%, %ownhotkeys%, %key%, Text
  5222. }
  5223. }
  5224. Loop, %ownHotkeyCount% {
  5225. outerIndex := A_Index
  5226. IniRead, ownHotkey%outerIndex%Active, %ownhotkeys%, %outerIndex%, Active, 0
  5227. IniRead, ownHotkey%outerIndex%Text, %ownhotkeys%, %outerIndex%, Text, %A_Space%
  5228. IniRead, hk, %ownhotkeys%, %outerIndex%, Hotkey, %A_Space%
  5229. ownHotkey%outerIndex%Text := StrReplace(ownHotkey%outerIndex%Text, "~", "`n")
  5230. if (hk) {
  5231. alreadyRegistered := false
  5232. for key, value in registeredHotkeys {
  5233. hk2 := StrReplace(hk, "~", "")
  5234. value2 := StrReplace(value, "~", "")
  5235. if (hk2 = value2 && StrLen(hk2) == StrLen(value2)) {
  5236. alreadyRegistered := true
  5237. alreadyRegisteredKey := key
  5238. alreadyRegisteredValue := value
  5239. break
  5240. }
  5241. }
  5242. StringReplace, ownHotkey%outerIndex%NoMods, hk, ~
  5243. if (!alreadyRegistered) {
  5244. if (ownHotkey%outerIndex%Active) {
  5245. Hotkey, %hk%, ownHotkey%outerIndex%Label
  5246. registeredHotkeys["ownHotkey" . outerIndex] := hk
  5247. }
  5248. } else {
  5249. MsgBox, 0, Hotkey Fehler | %projectname% , Der Hotkey für ownHotkey%outerIndex% (%hk%) ist bereits registriert (%alreadyRegisteredKey% - %alreadyRegisteredValue%)! `nLösche die ownhotkeys.ini Datei aus dem INI Ordner um den Fehler zu beheben!
  5250. ExitApp
  5251. }
  5252. }
  5253. }
  5254. if(IsSAMPAvailable()) {
  5255. blacklist := URLDownloadToVar(baseURL . "api/blacklist.php?username=" getUsername())
  5256. blacklist := StrReplace(result, "?", "")
  5257. if(blacklist == "USER_BLACKLISTED") {
  5258. MsgBox, 0, Blacklist | %projectname% , Du stehst auf der Blacklist, wende dich an Marschl um das Problem zu lösen!
  5259. ExitApp
  5260. }
  5261. }
  5262. Gui, Destroy
  5263. GoTo, Main
  5264. return
  5265. GuiClose:
  5266. ExitApp
  5267. return
  5268. Main:
  5269. Gui, Main: Color, FF00FF
  5270. Gui, Main: Font, S10 CDefault, Verdana
  5271. Gui, Main: Add, GroupBox, x5 y5 w220 h315 ,
  5272. Gui, Main: Add, Button, x15 y20 w200 h40 gSettings, Einstellungen
  5273. Gui, Main: Add, Button, x15 y70 w200 h40 gHotkeys, Hotkeys
  5274. Gui, Main: Add, Button, x15 y120 w200 h40 gCommands, Befehle
  5275. Gui, Main: Add, Button, x15 y170 w200 h40 gConnectRPG, Mit RPG verbinden
  5276. Gui, Main: Add, Button, x15 y220 w95 h40 gVorschlag, Vorschlag machen
  5277. Gui, Main: Add, Button, x120 y220 w95 h40 gReportBug, Fehler melden
  5278. Gui, Main: Add, Button, x15 y270 w200 h40 gRestart, Keybinder neustarten
  5279. Gui, Main: Add, Picture, x230 y10 w450 h40 , src\images\logo.png
  5280. Gui, Main: Add, GroupBox, x240 y60 w430 h180 cFFFFFF ,Changelog (Version: %version%)
  5281. changelog := URLDownloadToVar(baseURL . "api/changelog.php?version=" version)
  5282. changelog := StrReplace(changelog, "?", "")
  5283. Gui, Main: Add, Edit, x250 y80 w410 h150 ReadOnly cFFFFFF, %changelog%
  5284. Gui, Main: Add, GroupBox, x240 y240 w430 h80 cFFFFFF,Informationen
  5285. if(IsSAMPAvailable()) {
  5286. message := "Name: " getUsername() " ( ID: " getId() " )"
  5287. } else {
  5288. message := "Nicht mit RPG-City verbunden!"
  5289. }
  5290. info =
  5291. (LTrim
  5292. %message%
  5293.  
  5294. Keybinder aktiv seit: %keybinderStart% Uhr
  5295. )
  5296. Gui, Main: Add, Text, x250 y260 w410 h50 cFFFFFF, %info%
  5297. Gui, Main: Color, 212121
  5298. Gui, Main: Show, w690 h330, %projectname% | %version% | by Marschl
  5299. return
  5300. Restart:
  5301. Reload
  5302. return
  5303. MainGuiClose:
  5304. ExitApp
  5305. return
  5306. ConnectRPG:
  5307. RegRead GTA_SA_EXE, HKEY_CURRENT_USER, Software\SAMP, gta_sa_exe
  5308. SplitPath, GTA_SA_EXE,, PFAD
  5309. Run %Pfad%\samp.exe samp.rpg-city.de:7777, %PFAD%
  5310. return
  5311. ReportBug:
  5312. Run, https://cloud.marschl.io/index.php/apps/forms/s/fL8SDax95L27ioziGJmgr3xp
  5313. return
  5314. Vorschlag:
  5315. Run, https://cloud.marschl.io/index.php/apps/forms/s/4ZwAoWNfXDN5cd2n3mKPqTdc
  5316. return
  5317. Settings:
  5318. Gui, Settings: Color, 212121
  5319. Gui, Settings: Font, S10 CDefault, Verdana
  5320. Gui, Settings: Add, GroupBox, x10 y10 w680 h140 cFFFFFF, Allgemeine Einstellungen
  5321. Gui, Settings: Add, CheckBox, x20 y30 w150 h20 cFFFFFF vmotorsystem checked%settings_motorsystem%, Motor System
  5322. Gui, Settings: Add, CheckBox, x300 y30 w150 h20 cFFFFFF vlocksystem checked%settings_locksystem%, Lock System
  5323. Gui, Settings: Add, CheckBox, x550 y30 w135 h20 cFFFFFF vzollsystem checked%settings_zollsystem%, Zoll System
  5324. Gui, Settings: Add, CheckBox, x20 y60 w150 h20 cFFFFFF vtanksystem checked%settings_tanksystem%, Tank System
  5325. Gui, Settings: Add, CheckBox, x300 y60 w110 h20 cFFFFFF vlottosystem checked%settings_lottosystem%, Lotto System
  5326. Gui, Settings: Add, Text, x410 y62 w135 h20 cFFFFFF, Nummer (0 = Zufall)
  5327. Gui, Settings: Add, Edit, x550 y60 w50 h20 vlottonummer, %settings_lottozahl%
  5328. Gui, Settings: Add, CheckBox, x20 y90 w150 h20 cFFFFFF vspraysystem checked%settings_spraysystem%, Spray System
  5329. Gui, Settings: Add, CheckBox, x300 y90 w150 h20 cFFFFFF vkettensystem checked%settings_kettensystem%, Ketten System
  5330. Gui, Settings: Add, CheckBox, x550 y90 w135 h20 cFFFFFF vtowersystem checked%settings_towersystem%, Tower System
  5331. Gui, Settings: Add, CheckBox, x20 y120 w150 h20 cFFFFFF vreusensystem checked%settings_reusensystem%, Reusen System
  5332. Gui, Settings: Add, CheckBox, x300 y120 w150 h20 cFFFFFF vtorsystem checked%settings_torsystem%, Tor System
  5333. Gui, Settings: Add, CheckBox, x550 y120 w135 h20 cFFFFFF vfishsystem checked%settings_fishsystem%, Fisch System
  5334. Gui, Settings: Add, GroupBox, x10 y150 w680 h80 cFFFFFF , Kill- und Todeszähler
  5335. Gui, Settings: Add, CheckBox, x20 y170 w120 h20 cFFFFFF vkillactive checked%settings_killactive%, Killspruch:
  5336. Gui, Settings: Add, Edit, x150 y170 w530 h20 vkilltext, %settings_killtext%
  5337. Gui, Settings: Add, CheckBox, x20 y200 w120 h20 cFFFFFF vdeathactive checked%settings_deathactive%, Deathspruch:
  5338. Gui, Settings: Add, Edit, x150 y200 w530 h20 vdeathtext, %settings_deathtext%
  5339. Gui, Settings: Add, GroupBox, x10 y230 w680 h80 cFFFFFF , Deathmatch
  5340. Gui, Settings: Add, CheckBox, x20 y250 w150 h20 cFFFFFF vdruguse checked%settings_druguse%, WASD Drogen usen
  5341. Gui, Settings: Add, CheckBox, x300 y250 w150 h20 cFFFFFF vpakuse checked%settings_pakuse%, WASD Paket usen
  5342. Gui, Settings: Add, CheckBox, x550 y250 w135 h20 cFFFFFF vfishuse checked%settings_fishuse%, WASD Fish usen
  5343. Gui, Settings: Add, CheckBox, x20 y280 w150 h20 cFFFFFF vdamageinfo checked%settings_damageinfo%, Damage Info
  5344. Gui, Settings: Add, CheckBox, x300 y280 w150 h20 cFFFFFF vdamagesound checked%settings_damagesound%, Damage Sound
  5345. Gui, Settings: Add, CheckBox, x550 y280 w135 h20 cFFFFFF vautosync checked%settings_autosync%, Auto Sync
  5346. Gui, Settings: Add, GroupBox, x10 y310 w680 h140 cFFFFFF , Ausrüsten
  5347. Gui, Settings: Add, Text, x20 y330 w70 h20 cFFFFFF, Profil 1:
  5348. Gui, Settings: Add, DropDownList, x80 y328 w90 h120 cFFFFFF vprofile1_1, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5349. Gui, Settings: Add, DropDownList, x180 y328 w90 h120 cFFFFFF vprofile1_2, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5350. Gui, Settings: Add, DropDownList, x280 y328 w90 h120 cFFFFFF vprofile1_3, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5351. Gui, Settings: Add, DropDownList, x380 y328 w90 h120 cFFFFFF vprofile1_4, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5352. Gui, Settings: Add, DropDownList, x480 y328 w90 h120 cFFFFFF vprofile1_5, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5353. Gui, Settings: Add, DropDownList, x580 y328 w90 h120 cFFFFFF vprofile1_6, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5354. GuiControl, Settings: Choose, profile1_1, %settings_profile1_1%
  5355. GuiControl, Settings: Choose, profile1_2, %settings_profile1_2%
  5356. GuiControl, Settings: Choose, profile1_3, %settings_profile1_3%
  5357. GuiControl, Settings: Choose, profile1_4, %settings_profile1_4%
  5358. GuiControl, Settings: Choose, profile1_5, %settings_profile1_5%
  5359. GuiControl, Settings: Choose, profile1_6, %settings_profile1_6%
  5360. Gui, Settings: Add, Text, x20 y370 w70 h20 cFFFFFF , Profil 2:
  5361. Gui, Settings: Add, DropDownList, x80 y368 w90 h120 cFFFFFF vprofile2_1, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5362. Gui, Settings: Add, DropDownList, x180 y368 w90 h120 cFFFFFF vprofile2_2, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5363. Gui, Settings: Add, DropDownList, x280 y368 w90 h120 cFFFFFF vprofile2_3, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5364. Gui, Settings: Add, DropDownList, x380 y368 w90 h120 cFFFFFF vprofile2_4, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5365. Gui, Settings: Add, DropDownList, x480 y368 w90 h120 cFFFFFF vprofile2_5, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5366. Gui, Settings: Add, DropDownList, x580 y368 w90 h120 cFFFFFF vprofile2_6, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5367. GuiControl, Settings: Choose, profile2_1, %settings_profile2_1%
  5368. GuiControl, Settings: Choose, profile2_2, %settings_profile2_2%
  5369. GuiControl, Settings: Choose, profile2_3, %settings_profile2_3%
  5370. GuiControl, Settings: Choose, profile2_4, %settings_profile2_4%
  5371. GuiControl, Settings: Choose, profile2_5, %settings_profile2_5%
  5372. GuiControl, Settings: Choose, profile2_6, %settings_profile2_6%
  5373. Gui, Settings: Add, Text, x20 y410 w70 h20 cFFFFFF , Profil 3:
  5374. Gui, Settings: Add, DropDownList, x80 y408 w90 h120 cFFFFFF vprofile3_1, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5375. Gui, Settings: Add, DropDownList, x180 y408 w90 h120 cFFFFFF vprofile3_2, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5376. Gui, Settings: Add, DropDownList, x280 y408 w90 h120 cFFFFFF vprofile3_3, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5377. Gui, Settings: Add, DropDownList, x380 y408 w90 h120 cFFFFFF vprofile3_4, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5378. Gui, Settings: Add, DropDownList, x480 y408 w90 h120 cFFFFFF vprofile3_5, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5379. Gui, Settings: Add, DropDownList, x580 y408 w90 h120 cFFFFFF vprofile3_6, ||Deagle|Shotgun|AK47|MP5|Rifle|M4|Sniper|Messer|Baseballschläger|Golfschläger|Katana
  5380. GuiControl, Settings: Choose, profile3_1, %settings_profile3_1%
  5381. GuiControl, Settings: Choose, profile3_2, %settings_profile3_2%
  5382. GuiControl, Settings: Choose, profile3_3, %settings_profile3_3%
  5383. GuiControl, Settings: Choose, profile3_4, %settings_profile3_4%
  5384. GuiControl, Settings: Choose, profile3_5, %settings_profile3_5%
  5385. GuiControl, Settings: Choose, profile3_6, %settings_profile3_6%
  5386. Gui, Settings: Add, GroupBox, x10 y450 w680 h140 cFFFFFF , Sonstiges
  5387. Gui, Settings: Add, CheckBox, x20 y470 w150 h20 cFFFFFF vhellofrak checked%settings_hellofrak%, Fraktion Begrüßung
  5388. Gui, Settings: Add, CheckBox, x300 y470 w150 h20 cFFFFFF vhellocrew checked%settings_hellocrew%, Crew Begrüßung
  5389. Gui, Settings: Add, CheckBox, x550 y470 w135 h20 cFFFFFF vthankpak checked%settings_thankpak%, Pak Danksagung
  5390. Gui, Settings: Add, CheckBox, x20 y500 w200 h20 cFFFFFF vfishMode checked%settings_fishmode%, Billigsten Fisch wegwerfen
  5391. Gui, Settings: Add, CheckBox, x300 y500 w200 h20 cFFFFFF vdrugusecd checked%settings_drugusecountdown%, Drogen Countdown 5 Sek
  5392. Gui, Settings: Add, Text, x20 y530 w150 h20 cFFFFFF, Prefix:
  5393. Gui, Settings: Add, Edit, x20 y550 w130 h20 vprefix, %settings_prefix%
  5394. Menu, PlatzhalterInformationen, Add, &Platzhalter, PlatzhalterInformationen
  5395. Gui, Settings: Menu, PlatzhalterInformationen
  5396. Gui, Settings: Show, w700 h600, Einstellungen - %projectname% | %version%
  5397. return
  5398. SettingsGuiClose:
  5399. Gui, Settings: Submit, NoHide
  5400. IniWrite, % motorsystem, %settings%, Allgemein, MotorSystem
  5401. IniWrite, % locksystem, %settings%, Allgemein, LockSystem
  5402. IniWrite, % zollsystem, %settings%, Allgemein, ZollSystem
  5403. IniWrite, % tanksystem, %settings%, Allgemein, TankSystem
  5404. IniWrite, % lottosystem, %settings%, Allgemein, LottoSystem
  5405. IniWrite, % lottonummer, %settings%, Allgemein, LottoZahl
  5406. IniWrite, % reusensystem, %settings%, Allgemein, ReusenSystem
  5407. IniWrite, % torsystem, %settings%, Allgemein, TorSystem
  5408. IniWrite, % towersystem, %settings%, Allgemein, TowerSystem
  5409. IniWrite, % fishsystem, %settings%, Allgemein, FishSystem
  5410. IniWrite, % spraysystem, %settings%, Allgemein, SpraySystem
  5411. IniWrite, % kettensystem, %settings%, Allgemein, KettenSystem
  5412. IniWrite, % killactive, %settings%, Kill, KillActive
  5413. IniWrite, % killtext, %settings%, Kill, KillText
  5414. IniWrite, % deathactive, %settings%, Death, DeathActive
  5415. IniWrite, % deathtext, %settings%, Death, DeathText
  5416. IniWrite, % druguse, %settings%, ItemUse, DrugUse
  5417. IniWrite, % pakuse, %settings%, ItemUse, PakUse
  5418. IniWrite, % fishuse, %settings%, ItemUse, FishUse
  5419. IniWrite, % damageinfo, %settings%, Allgemein, DamageInfo
  5420. IniWrite, % damagesound, %settings%, Allgemein, DamageSound
  5421. IniWrite, % autosync, %settings%, Allgemein, AutoSync
  5422. IniWrite, %profile1_1%, %settings%, Ausrüstungsprofile, Profil1_1
  5423. IniWrite, %profile1_2%, %settings%, Ausrüstungsprofile, Profil1_2
  5424. IniWrite, %profile1_3%, %settings%, Ausrüstungsprofile, Profil1_3
  5425. IniWrite, %profile1_4%, %settings%, Ausrüstungsprofile, Profil1_4
  5426. IniWrite, %profile1_5%, %settings%, Ausrüstungsprofile, Profil1_5
  5427. IniWrite, %profile1_6%, %settings%, Ausrüstungsprofile, Profil1_6
  5428. IniWrite, %profile2_1%, %settings%, Ausrüstungsprofile, Profil2_1
  5429. IniWrite, %profile2_2%, %settings%, Ausrüstungsprofile, Profil2_2
  5430. IniWrite, %profile2_3%, %settings%, Ausrüstungsprofile, Profil2_3
  5431. IniWrite, %profile2_4%, %settings%, Ausrüstungsprofile, Profil2_4
  5432. IniWrite, %profile2_5%, %settings%, Ausrüstungsprofile, Profil2_5
  5433. IniWrite, %profile2_6%, %settings%, Ausrüstungsprofile, Profil2_6
  5434. IniWrite, %profile3_1%, %settings%, Ausrüstungsprofile, Profil3_1
  5435. IniWrite, %profile3_2%, %settings%, Ausrüstungsprofile, Profil3_2
  5436. IniWrite, %profile3_3%, %settings%, Ausrüstungsprofile, Profil3_3
  5437. IniWrite, %profile3_4%, %settings%, Ausrüstungsprofile, Profil3_4
  5438. IniWrite, %profile3_5%, %settings%, Ausrüstungsprofile, Profil3_5
  5439. IniWrite, %profile3_6%, %settings%, Ausrüstungsprofile, Profil3_6
  5440. IniWrite, % hellofrak, %settings%, Allgemein, HelloFrak
  5441. IniWrite, % hellocrew, %settings%, Allgemein, HelloCrew
  5442. IniWrite, % thankpak, %settings%, Allgemein, ThankPak
  5443. IniWrite, % fishMode, %settings%, Fischen, FishMode
  5444. IniWrite, % drugusecd, %settings%, ItemUse, DrugUseCountdown
  5445. IniWrite, % prefix, %settings%, Allgemein, Prefix
  5446. Gui, Settings: Destroy
  5447. Reload
  5448. return
  5449. Commands:
  5450. Gui, Commands: Color, 212121
  5451. Gui, Commands: Font, S10 CDefault, Verdana
  5452. if(!settings_admin) {
  5453. Gui, Commands: Add, Tab, x10 y9 w580 h580 cFFFFFF , Allgemein|Deathmatch
  5454. } else {
  5455. Gui, Commands: Add, Tab, x10 y9 w580 h580 cFFFFFF , Allgemein|Deathmatch|Admin
  5456. }
  5457. Gui, Commands: Tab, Allgemein
  5458. text_allgemein := URLDownloadToVar(baseURL . "api/command.php?tab=1")
  5459. text_allgemein := StrReplace(text_allgemein, "?", "")
  5460. Gui, Commands: Add, Edit, x20 y45 w560 h530 cFFFFFF ReadOnly, %text_allgemein%
  5461. Gui, Commands: Tab, Deathmatch
  5462. text_deathmatch := URLDownloadToVar(baseURL . "api/command.php?tab=2")
  5463. text_deathmatch := StrReplace(text_deathmatch, "?", "")
  5464. Gui, Commands: Add, Edit, x20 y45 w560 h530 cFFFFFF ReadOnly, %text_deathmatch%
  5465. if(settings_admin) {
  5466. Gui, Commands: Tab, Admin
  5467. text_admin := URLDownloadToVar(baseURL . "api/command.php?tab=3")
  5468. text_admin := StrReplace(text_admin, "?", "")
  5469. Gui, Commands: Add, Edit, x20 y45 w560 h530 cFFFFFF ReadOnly, %text_admin%
  5470. }
  5471. Gui, Commands: Show, w600 h600, Befehle - %projectname% | %version%
  5472. return
  5473. CommandsGuiClose:
  5474. Gui, Commands: Destroy
  5475. return
  5476. Hotkeys:
  5477. {
  5478. Gui, Hotkeys: Destroy
  5479. Gui, Hotkeys: Color, 212121
  5480. Gui, Hotkeys: Font, S10 CDefault, Verdana
  5481. Gui, Hotkeys: Add, Button, x10 y400 w140 h40 gResetHotkeys, Werkseinstellungen
  5482. Gui, Hotkeys: Add, Button, x160 y400 w140 h40 gOwnHotkeys, Eigene Hotkeys
  5483. Gui, Hotkeys: Add, Button, x310 y400 w110 h40 gHotkeysGuiClose, Schließen
  5484. Gui, Hotkeys: Add, GroupBox, x10 y10 w810 h380 cFFFFFF, Hotkeys
  5485. Gui, Hotkeys: Add, Text, x20 y30 w220 h20 cFFFFFF, Motor System
  5486. Gui, Hotkeys: Add, Hotkey, x260 y30 w150 h20 vmotorSystemHotkey gSaveHotkeyLabel, %motorSystemNoMods%
  5487. Gui, Hotkeys: Add, Text, x20 y60 w220 h20 cFFFFFF, Lock System
  5488. Gui, Hotkeys: Add, Hotkey, x260 y60 w150 h20 vlockSystemHotkey gSaveHotkeyLabel, %lockSystemNoMods%
  5489. Gui, Hotkeys: Add, Text, x20 y90 w220 h20 cFFFFFF, Licht System
  5490. Gui, Hotkeys: Add, Hotkey, x260 y90 w150 h20 vlichtSystemHotkey gSaveHotkeyLabel, %lichtSystemNoMods%
  5491. Gui, Hotkeys: Add, Text, x20 y120 w220 h20 cFFFFFF, Stats anzeigen
  5492. Gui, Hotkeys: Add, Hotkey, x260 y120 w150 h20 vstatsHotkey gSaveHotkeyLabel, %statsNoMods%
  5493. Gui, Hotkeys: Add, Text, x20 y150 w220 h20 cFFFFFF, Tempomat de-/aktivieren
  5494. Gui, Hotkeys: Add, Hotkey, x260 y150 w150 h20 vtempomatHotkey gSaveHotkeyLabel, %tempomatNoMods%
  5495. Gui, Hotkeys: Add, Text, x20 y180 w220 h20 cFFFFFF, Countdown starten
  5496. Gui, Hotkeys: Add, Hotkey, x260 y180 w150 h20 vcountdownHotkey gSaveHotkeyLabel, %countdownNoMods%
  5497. Gui, Hotkeys: Add, Text, x20 y210 w220 h20 cFFFFFF, Handy an-/ausschalten
  5498. Gui, Hotkeys: Add, Hotkey, x260 y210 w150 h20 vtogPhoneHotkey gSaveHotkeyLabel, %togPhoneNoMods%
  5499. Gui, Hotkeys: Add, Text, x20 y240 w220 h20 cFFFFFF, Danksagung
  5500. Gui, Hotkeys: Add, Hotkey, x260 y240 w150 h20 vthanksHotkey gSaveHotkeyLabel, %thanksNoMods%
  5501. Gui, Hotkeys: Add, Text, x20 y270 w220 h20 cFFFFFF, Entschuldigung
  5502. Gui, Hotkeys: Add, Hotkey, x260 y270 w150 h20 vsorryHotkey gSaveHotkeyLabel, %sorryNoMods%
  5503. Gui, Hotkeys: Add, Text, x20 y300 w220 h20 cFFFFFF, Letzte Eingabe wiederholen
  5504. Gui, Hotkeys: Add, Hotkey, x260 y300 w150 h20 vrepeatHotkey gSaveHotkeyLabel, %repeatNoMods%
  5505. Gui, Hotkeys: Add, Text, x20 y330 w220 h20 cFFFFFF, Heilen
  5506. Gui, Hotkeys: Add, Hotkey, x260 y330 w150 h20 vhealHotkey gSaveHotkeyLabel, %healNoMods%
  5507. Gui, Hotkeys: Add, Text, x20 y360 w220 h20 cFFFFFF, Automatische Systeme beenden
  5508. Gui, Hotkeys: Add, Hotkey, x260 y360 w150 h20 vstopAutomaticSystemHotkey gSaveHotkeyLabel, %stopAutomaticSystemNoMods%
  5509. Gui, Hotkeys: Add, Text, x420 y30 w220 h20 cFFFFFF, Fraktion Position zeigen
  5510. Gui, Hotkeys: Add, Hotkey, x660 y30 w150 h20 vshowPosFHotkey gSaveHotkeyLabel, %showPosFNoMods%
  5511. Gui, Hotkeys: Add, Text, x420 y60 w220 h20 cFFFFFF, Crew Position Zeigen
  5512. Gui, Hotkeys: Add, Hotkey, x660 y60 w150 h20 vshowPosCHotkey gSaveHotkeyLabel, %showPosCNoMods%
  5513. Gui, Hotkeys: Add, Text, x420 y90 w220 h20 cFFFFFF, Ausrüstungsprofil 1
  5514. Gui, Hotkeys: Add, Hotkey, x660 y90 w150 h20 vequipProfile1Hotkey gSaveHotkeyLabel, %equipProfile1NoMods%
  5515. Gui, Hotkeys: Add, Text, x420 y120 w220 h20 cFFFFFF, Ausrüsrungsprofil 2
  5516. Gui, Hotkeys: Add, Hotkey, x660 y120 w150 h20 vequipProfile2Hotkey gSaveHotkeyLabel, %equipProfile2NoMods%
  5517. Gui, Hotkeys: Add, Text, x420 y150 w220 h20 cFFFFFF, Ausrüstungsprofil 3
  5518. Gui, Hotkeys: Add, Hotkey, x660 y150 w150 h20 vequipProfile3Hotkey gSaveHotkeyLabel, %equipProfile3NoMods%
  5519. Gui, Hotkeys: Add, Text, x420 y180 w220 h20 cFFFFFF, Ausrüsten
  5520. Gui, Hotkeys: Add, Hotkey, x660 y180 w150 h20 vequipHotkey gSaveHotkeyLabel, %equipNoMods%
  5521. Gui, Hotkeys: Add, Text, x420 y210 w220 h20 cFFFFFF, Drogen konsumieren
  5522. Gui, Hotkeys: Add, Hotkey, x660 y210 w150 h20 vuseDrugsHotkey gSaveHotkeyLabel, %useDrugsNoMods%
  5523. Gui, Hotkeys: Add, Text, x420 y240 w220 h20 cFFFFFF, Paket benutzen
  5524. Gui, Hotkeys: Add, Hotkey, x660 y240 w150 h20 vusePakHotkey gSaveHotkeyLabel, %usePakNoMods%
  5525. Gui, Hotkeys: Add, Text, x420 y270 w220 h20 cFFFFFF, Fische essen
  5526. Gui, Hotkeys: Add, Hotkey, x660 y270 w150 h20 vuseFishHotkey gSaveHotkeyLabel, %useFishNoMods%
  5527. Gui, Hotkeys: Add, Text, x420 y300 w220 h20 cFFFFFF, Fraktionsmitglieder anzeigen
  5528. Gui, Hotkeys: Add, Hotkey, x660 y300 w150 h20 vshowFrakMemberHotkey gSaveHotkeyLabel, %showFrakMemberNoMods%
  5529. Gui, Hotkeys: Add, Text, x420 y330 w220 h20 cFFFFFF, Crewmember anzeigen
  5530. Gui, Hotkeys: Add, Hotkey, x660 y330 w150 h20 vshowCrewMemberHotkey gSaveHotkeyLabel, %showCrewMemberNoMods%
  5531. Gui, Hotkeys: Add, Text, x420 y360 w220 h20 cFFFFFF, Tor öffnen
  5532. Gui, Hotkeys: Add, Hotkey, x660 y360 w150 h20 vopenGate gSaveHotkeyLabel, %gateNoMods%
  5533. Menu, HotkeyInformations, Add, &Informationen, HotkeyInformations
  5534. Gui, Hotkeys: Menu, HotkeyInformations
  5535. Gui, Hotkeys: Show, h450 w830, Hotkeys - %projectname% | %version%
  5536. }
  5537. return
  5538. HotkeysGuiClose:
  5539. {
  5540. Gui, Hotkeys: Destroy
  5541. }
  5542. return
  5543. HotkeyInformations:
  5544. {
  5545. MsgBox, 64, Informationen zu Hotkeys,
  5546.     (LTrim
  5547.         Hier können die Hotkeys selbstständig definiert werden.
  5548.  
  5549.         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).
  5550.         Stattdessen können diese alternativ in der %hotkeys% eingetragen werden.
  5551.         Beispielsweise können so auch die Maustasten "xButton1" und "xButton2" belegt werden, was hier im GUI nicht möglich ist.
  5552.  
  5553.         Ein Speichern ist nicht notwendig, da dies automatisch geschieht.
  5554.         Solltest du aber manuelle Änderungen in der %hotkeys% durchgeführt haben, musst du den Keybinder neustarten!
  5555. )
  5556. }
  5557. return
  5558. ResetHotkeys:
  5559. {
  5560. FileDelete, %hotkeys%
  5561. MsgBox, 64, Zurücksetzen erfolgreich, Die Hotkeys wurden erfolgreich auf die Standardbelegungen zurückgesetzt, der Keybinder startet nun neu!
  5562. Reload
  5563. }
  5564. return
  5565. SaveHotkeyLabel:
  5566. {
  5567. Gui, Hotkeys: Submit, NoHide
  5568. name := SubStr(A_GuiControl, 1, -6)
  5569. hk := %A_GuiControl%
  5570. if hk in +,^,!,+^,+!,^!,+^!
  5571. return
  5572. if (registeredHotkeys.HasKey(name)) {
  5573. oldKey := registeredHotkeys[name]
  5574. Hotkey, %oldKey%, %name%Label, Off
  5575. registeredHotkeys.Delete(name)
  5576. }
  5577. %name%NoMods := ""
  5578. if (hk == "") {
  5579. IniWrite, ---, %hotkeys%, Hotkeys, %name%
  5580. } else {
  5581. alreadyRegistered := false
  5582. for key, value in registeredHotkeys {
  5583. hk2 := StrReplace(hk, "~", "")
  5584. value2 := StrReplace(value, "~", "")
  5585. if (hk2 = value2 && StrLen(hk2) == StrLen(value2)) {
  5586. alreadyRegistered := true
  5587. alreadyRegisteredKey := key
  5588. break
  5589. }
  5590. }
  5591. if (!InStr(hk, "F") && !InStr(hk, "!"))
  5592. hk := "~" . hk
  5593. if (!alreadyRegistered) {
  5594. Hotkey, %hk%, %name%Label
  5595. StringReplace, %name%NoMods, hk, ~
  5596. IniWrite, %hk%, %hotkeys%, Hotkeys, %name%
  5597. registeredHotkeys[name] := hk
  5598. } else {
  5599. IniWrite, ---, %hotkeys%, Hotkeys, %name%
  5600. GuiControl, Hotkeys: , %A_GuiControl%,
  5601. if (RegExMatch(alreadyRegisteredKey, "ownHotkey(\d+)", key_)) {
  5602. hotkeyName := "eigenen Hotkey " . key_1
  5603. } else {
  5604. hotkeyName := "Hotkey " . alreadyRegisteredKey
  5605. }
  5606. message := "Der Hotkey für " . name . " (" . getUserFriendlyHotkeyName(hk) . ") konnte nicht aktiviert werden, da er bereits für den " . hotkeyName . " registriert ist!"
  5607. MsgBox, 64, Speicherung, %message%
  5608. }
  5609. }
  5610. }
  5611. return
  5612. OwnHotkeys:
  5613. {
  5614. Gui, OwnHotkeys: Destroy
  5615. Gui, OwnHotkeys: Color, 212121
  5616. Gui, OwnHotkeys: Font, S10 CDefault, Verdana
  5617. Gui, OwnHotkeys: Add, Button, x10 y530 w130 h40 gOwnHotkeysSave, Speichern
  5618. Gui, OwnHotkeys: Add, Button, x870 y530 w130 h40 gOwnHotkeysGuiClose, Schließen
  5619. Gui, OwnHotkeys: Add, Tab, x10 y10 w990 h510  cFFFFFF, Seite 1|Seite 2|Seite 3
  5620. Gui, OwnHotkeys: Tab, Seite 1
  5621. Loop, 8 {
  5622. index := A_Index
  5623. active := ownHotkey%index%Active
  5624. y1 := -20 + (A_Index * 60)
  5625. y2 := 10 + (A_Index * 60)
  5626. Gui, OwnHotkeys: Add, CheckBox, x20 y%y1% w100 h20 cFFFFFF vownHotkey%index%Active Checked%active%, Hotkey %index%
  5627. Gui, OwnHotkeys: Add, Hotkey, x20 y%y2% w100 h20 vownHotkey%index%,% ownHotkey%index%NoMods
  5628. Gui, OwnHotkeys: Add, Edit, x130 y%y1% w370 h50 vownHotkey%index%Text,% ownHotkey%index%Text
  5629. }
  5630. Loop, 8 {
  5631. index := A_Index + 8
  5632. active := ownHotkey%index%Active
  5633. y1 := -20 + (A_Index * 60)
  5634. y2 := 10 + (A_Index * 60)
  5635. Gui, OwnHotkeys: Add, CheckBox, x510 y%y1% w100 h20 cFFFFFF vownHotkey%index%Active Checked%active%, Hotkey %index%
  5636. Gui, OwnHotkeys: Add, Hotkey, x510 y%y2% w100 h20 vownHotkey%index%,% ownHotkey%index%NoMods
  5637. Gui, OwnHotkeys: Add, Edit, x620 y%y1% w370 h50 vownHotkey%index%Text,% ownHotkey%index%Text
  5638. }
  5639. Gui, OwnHotkeys: Tab, Seite 2
  5640. Loop, 8 {
  5641. index := A_Index + 16
  5642. active := ownHotkey%index%Active
  5643. y1 := -20 + (A_Index * 60)
  5644. y2 := 10 + (A_Index * 60)
  5645. Gui, OwnHotkeys: Add, CheckBox, x20 y%y1% w100 h20 cFFFFFF vownHotkey%index%Active Checked%active%, Hotkey %index%
  5646. Gui, OwnHotkeys: Add, Hotkey, x20 y%y2% w100 h20 vownHotkey%index%,% ownHotkey%index%NoMods
  5647. Gui, OwnHotkeys: Add, Edit, x130 y%y1% w370 h50 vownHotkey%index%Text,% ownHotkey%index%Text
  5648. }
  5649. Loop, 8 {
  5650. index := A_Index + 24
  5651. active := ownHotkey%index%Active
  5652. y1 := -20 + (A_Index * 60)
  5653. y2 := 10 + (A_Index * 60)
  5654. Gui, OwnHotkeys: Add, CheckBox, x510 y%y1% w100 h20 cFFFFFF vownHotkey%index%Active Checked%active%, Hotkey %index%
  5655. Gui, OwnHotkeys: Add, Hotkey, x510 y%y2% w100 h20 vownHotkey%index%,% ownHotkey%index%NoMods
  5656. Gui, OwnHotkeys: Add, Edit, x620 y%y1% w370 h50 vownHotkey%index%Text,% ownHotkey%index%Text
  5657. }
  5658. Gui, OwnHotkeys: Tab, Seite 3
  5659. Loop, 8 {
  5660. index := A_Index + 32
  5661. active := ownHotkey%index%Active
  5662. y1 := -20 + (A_Index * 60)
  5663. y2 := 10 + (A_Index * 60)
  5664. Gui, OwnHotkeys: Add, CheckBox, x20 y%y1% w100 h20 cFFFFFF vownHotkey%index%Active Checked%active%, Hotkey %index%
  5665. Gui, OwnHotkeys: Add, Hotkey, x20 y%y2% w100 h20 vownHotkey%index%,% ownHotkey%index%NoMods
  5666. Gui, OwnHotkeys: Add, Edit, x130 y%y1% w370 h50 vownHotkey%index%Text,% ownHotkey%index%Text
  5667. }
  5668. Loop, 8 {
  5669. index := A_Index + 40
  5670. active := ownHotkey%index%Active
  5671. y1 := -20 + (A_Index * 60)
  5672. y2 := 10 + (A_Index * 60)
  5673. Gui, OwnHotkeys: Add, CheckBox, x510 y%y1% w100 h20 cFFFFFF vownHotkey%index%Active Checked%active%, Hotkey %index%
  5674. Gui, OwnHotkeys: Add, Hotkey, x510 y%y2% w100 h20 vownHotkey%index%,% ownHotkey%index%NoMods
  5675. Gui, OwnHotkeys: Add, Edit, x620 y%y1% w370 h50 vownHotkey%index%Text,% ownHotkey%index%Text
  5676. }
  5677. Menu, PlatzhalterInformationen, Add, &Informationen, PlatzhalterInformationen
  5678. Gui, OwnHotkeys: Menu, PlatzhalterInformationen
  5679. Gui, OwnHotkeys: Show, h580 w1010, Eigene Hotkeys - %projectName% | %version%
  5680. }
  5681. return
  5682. PlatzhalterInformationen:
  5683. {
  5684. MsgBox, 64, Informationen zu den Platzhaltern,
  5685.     (LTrim
  5686.  
  5687.         Es können folgende Platzhalter verwendet werden:
  5688.         [name] - Dein Name
  5689.         [id] - Deine ID
  5690.         [ping] - Dein Ping
  5691.         [fps] - Deine FPS
  5692.         [hp] - Deine HP
  5693.         [armour] - Deine Armour
  5694.         [zone] - Deine Zone
  5695.         [city] - Deine Stadt
  5696.         [location] - Dein Autenthaltsort (Zone+Stadt)
  5697.         [money] - Dein Bargeld
  5698.         [skin] - Deine Skin-ID
  5699.         [weaponid] - Weapon-ID der aktuellen Waffe
  5700.         [weapon] - Name der aktuellen Waffe
  5701.         [freezed] - ja/nein, ob man gefreezed ist
  5702.         [vhealth] - Fahrzeugzustand in Prozent
  5703.         [vmodelid] - Fahrzeug-Modell-ID
  5704.         [vmodel] - Fahrzeug-Modell-Name
  5705.         [vspeed] - Fahrzeug-Geschwindigkeit
  5706.         [kills] - Gesamte Kills
  5707.         [deaths] - Gesamte Tode
  5708.         [daykills] - Tages Kills
  5709.         [daydeaths] - Tages Tode
  5710.         [monthkills] - Monats Kills
  5711.         [monthdeaths] - Monats Tode
  5712.         [tode] - Gesamte Tode
  5713.         [kd] - Gesamte K/D
  5714.         [dkd] - Tages K/D
  5715.         [mkd] - Monats K/D
  5716.  
  5717.         [motor] - Führt das Motor-System aus
  5718.         [usepak] - Benutzt ein Erste-Hilfe-Paket (nur wenn weniger als 92 HP)
  5719.         [eatfish] - Isst den nächsten Fisch (Nummer wird auch erhöht)
  5720.         [usedrugs] - Konsumiert Drogen (nur wenn weniger als 92 HP)
  5721.  
  5722.         [nexttrash] - Markiert die nächstgelegene freie Mülltonne
  5723.  
  5724.         [sleep Zeit] - Macht eine Pause, Zeitangabe in Millisekunden, [sleep 1000] = 1 Sekunde Pause
  5725.         [local] - Führt die Nachricht dahinter lokal aus (nur die aktuelle Zeile)
  5726. )
  5727. }
  5728. return
  5729. OwnHotkeysSave:
  5730. {
  5731. Gui, OwnHotkeys: Submit, NoHide
  5732. saveErrors := ""
  5733. Loop, %ownHotkeyCount% {
  5734. outerIndex := A_Index
  5735. savedOwnHotkey%outerIndex%Text := StrReplace(ownHotkey%outerIndex%Text, "`n", "~")
  5736. IniWrite,% ownHotkey%outerIndex%Active, %ownhotkeys%, %outerIndex%, Active
  5737. IniWrite,% savedOwnHotkey%outerIndex%Text, %ownhotkeys%, %outerIndex%, Text
  5738. name := "ownHotkey" . outerIndex
  5739. hk := %name%
  5740. if hk in +,^,!,+^,+!,^!,+^!
  5741. return
  5742. if (registeredHotkeys.HasKey(name)) {
  5743. oldKey := registeredHotkeys[name]
  5744. Hotkey, %oldKey%, %name%Label, Off
  5745. }
  5746. %name%NoMods := ""
  5747. if (hk == "") {
  5748. if (registeredHotkeys.HasKey(name)) {
  5749. registeredHotkeys.Delete(name)
  5750. }
  5751. IniDelete, %ownhotkeys%, %outerIndex%, Hotkey
  5752. } else {
  5753. alreadyRegistered := false
  5754. for key, value in registeredHotkeys {
  5755. hk2 := StrReplace(hk, "~", "")
  5756. value2 := StrReplace(value, "~", "")
  5757. if (hk2 = value2 && StrLen(hk2) == StrLen(value2)) {
  5758. if (name != key) {
  5759. alreadyRegistered := true
  5760. alreadyRegisteredKey := key
  5761. break
  5762. }
  5763. }
  5764. }
  5765. if (!InStr(hk, "F") && !InStr(hk, "!"))
  5766. hk := "~" . hk
  5767. StringReplace, %name%NoMods, hk, ~
  5768. IniWrite, %hk%, %ownhotkeys%, %outerIndex%, Hotkey
  5769. if (!alreadyRegistered) {
  5770. if (ownHotkey%outerIndex%Active) {
  5771. Hotkey, %hk%, %name%Label
  5772. registeredHotkeys[name] := hk
  5773. }
  5774. } else {
  5775. if (RegExMatch(alreadyRegisteredKey, "ownHotkey(\d+)", key_)) {
  5776. hotkeyName := "Eigener Hotkey " . key_1
  5777. } else {
  5778. hotkeyName := alreadyRegisteredKey
  5779. }
  5780. saveErrors .= "`nEigener Hotkey " . outerIndex . " (" . getUserFriendlyHotkeyName(hk) . ") belegt bei: " . hotkeyName
  5781. }
  5782. }
  5783. }
  5784. if (saveErrors != "") {
  5785. message := "Die Daten wurden gespeichert, jedoch können folgende Hotkeys nicht aktiviert werden, da sie bereits belegt sind:`n" . saveErrors
  5786. } else {
  5787. message := "Alle Eingaben und Daten wurden erfolgreich gespeichert!"
  5788. }
  5789. MsgBox, 64, Speicherung, %message%
  5790. Gui, OwnHotkeys: Destroy
  5791. }
  5792. return
  5793. OwnHotkeysGuiClose:
  5794. {
  5795. Gui, OwnHotkeys: Destroy
  5796. }
  5797. return
  5798. MainTimer:
  5799. if(!firstStart) {
  5800. sleep 100
  5801. firstStart := true
  5802. SendInfo("( Version " . cPrimar . version . cSecond . " ) wurde gestartet!")
  5803. SendInfo("Willkommen " . cPrimar . GetUsername() . cSecond . " ( ID: " . cPrimar . GetID() . cSecond . " )!")
  5804. if(isAdmin(getUsername())) {
  5805. SendInfo("Du hast " cPrimar "Adminrechte" cSecond " im Keybinder!")
  5806. }
  5807. }
  5808. if(!firstSync) {
  5809. if(!isBlocked()) {
  5810. firstSync := true
  5811. SetTimer, AutoSyncTimer, 1000
  5812. }
  5813. }
  5814. if(settings_damageinfo && !isPaintball) {
  5815. if(oldhealth > GetPlayerHealth() + GetPlayerArmor() && GetPlayerHealth() + GetPlayerArmor() > 0) {
  5816. damage := oldhealth - (GetPlayerHealth() + GetPlayerArmor())
  5817. weaponName := getAttackerWeapon()
  5818. SendInfo("Du hast ( " . cPrimar . "-" . damage . " HP" . cSecond .  " ) verloren ( " . cPrimar . weaponName . cSecond . " ), Aktuelle HP: " . cGreen . (getPlayerHealth() + getPlayerArmor()))
  5819. }
  5820. }
  5821. if(settings_damagesound && !isPaintball) {
  5822. if(oldhealth > GetPlayerHealth() + GetPlayerArmor() && GetPlayerHealth() + GetPlayerArmor() > 0) {
  5823. SoundPlay, src/sounds/damage.mp3
  5824. }
  5825. }
  5826. oldhealth := GetPlayerHealth() + GetPlayerArmor()
  5827. return
  5828. KillDeathTimer:
  5829. GetChatLine(0, chat)
  5830. GetChatLine(1, chat1)
  5831. gameText := getGameText(3, 28)
  5832. if (InStr(chat1, "( Mord ). Zeuge: ") || InStr(gameText, "~g~Gang") || InStr(gameText, "~g~Team")) {
  5833. IniRead, stats_kills, %stats%, Statistik, Kills
  5834. IniRead, daystats_kills, %dstats%, Statistik, Kills[%A_DD%:%A_MM%:%A_YYYY%]
  5835. IniRead, monthstats_kills, %mstats%, Statistik, Kills[%A_MM%:%A_YYYY%]
  5836. stats_kills++
  5837. daystats_kills++
  5838. monthstats_kills++
  5839. IniWrite, % stats_kills, %stats%, Statistik, Kills
  5840. IniWrite, % daystats_kills, %dstats%, Statistik, Kills[%A_DD%:%A_MM%:%A_YYYY%]
  5841. IniWrite, % monthstats_kills, %mstats%, Statistik, Kills[%A_MM%:%A_YYYY%]
  5842. SendInfo("Dies war dein " . cPrimar . stats_kills . cSecond . " Kill!")
  5843. if(settings_killactive == 1) {
  5844. SendChat(sendLine(settings_killtext))
  5845. }
  5846. if (InStr(gameText, "~g~Gang") || InStr(gameText, "~g~Team")) {
  5847. sleep, 5500
  5848. }
  5849. }
  5850. if(RegExMatch(chat, "Du bist nun für (\d+) Sekunden in Behandlung\.", deathtime_)) {
  5851. IniRead, stats_deaths, %stats%, Statistik, Deaths
  5852. IniRead, daystats_deaths, %dstats%, Statistik, Deaths[%A_DD%:%A_MM%:%A_YYYY%]
  5853. IniRead, monthstats_deaths, %mstats%, Statistik, Deaths[%A_MM%:%A_YYYY%]
  5854. stats_deaths++
  5855. daystats_deaths++
  5856. monthstats_deaths++
  5857. IniWrite, % stats_deaths, %stats%, Statistik, Deaths
  5858. IniWrite, % daystats_deaths, %dstats%, Statistik, Deaths[%A_DD%:%A_MM%:%A_YYYY%]
  5859. IniWrite, % monthstats_deaths, %mstats%, Statistik, Deaths[%A_MM%:%A_YYYY%]
  5860. SendInfo("Dies war dein " . cPrimar . stats_deaths . cSecond . " Tod!")
  5861. if(settings_deathactive == 1) {
  5862. SendChat(sendLine(settings_deathtext))
  5863. }
  5864. SetTimer, AutoSyncTimer, 5000
  5865. }
  5866. return
  5867. ChatTimer:
  5868. GetChatLine(0, chat)
  5869. GetChatLine(1, chat1)
  5870. GetChatLine(2, chat2)
  5871. GetChatLine(3, chat3)
  5872. atmrob_line := chat . chat1
  5873. storerob_line := chat . chat1
  5874. if(settings_reusensystem) {
  5875. if(RegExMatch(chat, "Du hast Reuse (\d+) hier ausgelegt und kannst sie in frühstens 5 Minuten einziehen.", reuse_)) {
  5876. IniRead, settings_reusentimer, %settings%, Reusen, ReusenTimer
  5877. if(reuse_1 == 1) {
  5878. reuse1time := 60*settings_reusentimer
  5879. SendInfo("Der Timer für die " cPrimar "Reuse 1" cSecond " wurde gestartet!")
  5880. } else if(reuse_1 == 2) {
  5881. reuse2time := 60*settings_reusentimer
  5882. SendInfo("Der Timer für die " cPrimar "Reuse 2" cSecond " wurde gestartet!")
  5883. } else if(reuse_1 == 3) {
  5884. reuse3time := 60*settings_reusentimer
  5885. SendInfo("Der Timer für die " cPrimar "Reuse 3" cSecond " wurde gestartet!")
  5886. } else if(reuse_1 == 4) {
  5887. reuse4time := 60*settings_reusentimer
  5888. SendInfo("Der Timer für die " cPrimar "Reuse 4" cSecond " wurde gestartet!")
  5889. } else if(reuse_1 == 5) {
  5890. reuse5time := 60*settings_reusentimer
  5891. SendInfo("Der Timer für die " cPrimar "Reuse 5" cSecond " wurde gestartet!")
  5892. }
  5893. } else if(RegExMatch(chat1, "Du ziehst nun Reuse (\d+) aus dem Wasser.", reuse_)) {
  5894. sleep 5100
  5895. CountReuse()
  5896. sleep 100
  5897. ReuseAuslegen(reuse_1)
  5898. } else if(InStr(chat, "Bitte warten..") && InStr(chat1, "Das Boot wird nun entladen.")) {
  5899. reusenFishCount := 0
  5900. reusenFishMoney := 0
  5901. SendInfo("Deine Fische werden entladen! Warte noch bis deine Fische abgegeben sind!")
  5902. }
  5903. }
  5904. if(RegExMatch(chat, "Du erhältst auf deine nächste Tour innerhalb 30 Minuten \+(\d+)% auf das Gehalt.", bonus_)) {
  5905. bonusgehalt_timer := 30*60
  5906. bonusgehalt := bonus_1
  5907. SendInfo("Der Timer für das" cPrimar " Bonusgehalt (+" bonus_1 " Prozent)" cSecond " wurde gestartet!")
  5908. }
  5909. if(InStr(chat, "Du benötigst mindestens 2g bei dir.")) {
  5910. IniWrite, 0, %items%, Items, Drogen
  5911. SendInfo("Du hast keine Drogen mehr dabei! Hole dir wieder welche!")
  5912. }
  5913. if(InStr(chat, "Du besitzt kein Erste-Hilfe-Paket")) {
  5914. IniWrite, 0, %items%, Items, ErsteHilfe
  5915. SendInfo("Du hast kein Erste-Hilfe-Paket mehr! Kaufe dir wieder eins!")
  5916. }
  5917. if(RegExMatch(chat, "Du hast (\d+)g aus der Safebox geholt.", drugs_)) {
  5918. IniRead, items_drogen, %items%, Items, Drogen
  5919. items_drogen := items_drogen + drugs_1
  5920. IniWrite, % items_drogen, %items%, Items, Drogen
  5921. SendInfo("Du hast " cPrimar drugs_1 cSecond " Gramm Drogen aus der Safebox geholt. Aktuell hast du " . cPrimar . items_drogen . cSecond . " Gramm dabei!")
  5922. }
  5923. if(RegExMatch(chat, "Du hast (\d+)g in die Safebox gelegt.", drugs_)) {
  5924. IniRead, items_drogen, %items%, Items, Drogen
  5925. items_drogen := items_drogen - drugs_1
  5926. IniWrite, % items_drogen, %items%, Items, Drogen
  5927. SendInfo("Du hast " cPrimar drugs_1 cSecond " Gramm Drogen in die Safebox gelegt. Aktuell hast du noch " . cPrimar . items_drogen . cSecond . " Gramm dabei!")
  5928. }
  5929. if(RegExMatch(chat, "Du hast (\d+) Liter getankt für (.*)\$.", tank_)) {
  5930. tank_2 := StrReplace(tank_2, ".", "")
  5931. SendChat("/motor")
  5932. IniRead, stats_tankliter, %stats%, Statistik, TankLiter
  5933. IniRead, stats_tankgeld, %stats%, Statistik, TankGeld
  5934. stats_tankliter := stats_tankliter + tank_1
  5935. stats_tankgeld := stats_tankgeld + tank_2
  5936. IniWrite, % stats_tankliter, %stats%, Statistik, TankLiter
  5937. IniWrite, % stats_tankgeld, %stats%, Statistik, TankGeld
  5938. SendInfo("Du hast bereits " cPrimar stats_tankliter cSecond " Liter getankt und dafür " cPrimar FormatNumber(stats_tankgeld) "$ " cSecond "bezahlt!")
  5939. gasTimeout_ := true
  5940. }
  5941. if(InStr(chat, "* " getUsername() " nimmt seinen kanister und füllt das Fahrzeug auf.")) {
  5942. SendInfo("Du hast einen Kanister benutzt. Kaufe wieder einen an der Tankstelle!")
  5943. IniWrite, 0, %items%, Items, Kanister
  5944. }
  5945. if(InStr(chat, "* Marschl schnüffelt in einer Mülltonne rum.")) {
  5946. IniRead, stats_trashs, %stats%, Statistik, Muelltonnen
  5947. stats_trashs++
  5948. IniWrite, % stats_trashs, %stats%, Statistik, Muelltonnen
  5949. SendInfo("Du hast bereits " cPrimar stats_trashs cSecond " Mülltonnen durchsucht!")
  5950. updateTrashcan(30*60)
  5951. }
  5952. if(InStr(chat, "Diese Mülltonne wurde bereits durchsucht")) {
  5953. if(RegExMatch(chat, "Versuche es erneut in (\d+) Minuten", trash_)) {
  5954. time := trash_1*60
  5955. updateTrashcan(time)
  5956. } else if(RegExMatch(chat, "Versuche es erneut in (\d+) Sekunden", trash_)) {
  5957. time := trash_1
  5958. updateTrashcan(time)
  5959. }
  5960. }
  5961. if(InStr(atmrob_line, "Du hast den Geldautomaten erfolgreich ausgeraubt")) {
  5962. if(RegExMatch(atmrob_line, "Beute\: \+(\d+\.\d+)\$", money_)) {
  5963. robMoney := StrReplace(money_1, ".", "")
  5964. IniRead, stats_atmrob, %stats%, Statistik, ATMRobs
  5965. IniRead, stats_atmrobgeld, %stats%, Statistik, ATMRobsGeld
  5966. stats_atmrob++
  5967. stats_atmrobgeld := stats_atmrobgeld + robMoney
  5968. IniWrite, % stats_atmrob, %stats%, Statistik, ATMRobs
  5969. IniWrite, % stats_atmrobgeld, %stats%, Statistik, ATMRobsGeld
  5970. SendInfo("Du hast " cPrimar FormatNumber(robMoney) "$" cSecond " an dem Automaten erbeutet!")
  5971. SendInfo("Du hast bereits " cPrimar stats_atmrob cSecond " Automaten ausgeraubt und dabei " cPrimar FormatNumber(stats_atmrobgeld) "$" cSecond " erbeutet!")
  5972. }
  5973. }
  5974. if(InStr(chat, "GPS: Du hast die Abgabezone erreicht. Nutze '/airdropdeliver'")) {
  5975. SendChat("/airdropdeliver")
  5976. }
  5977. if(InStr(chat, "Du raubst nun diesen Store aus, beim Verlassen des Stores bricht der Raubzug ab.")) {
  5978. if(RegExMatch(chat, "Dauer\: (\d+) Sekunden", timer_)) {
  5979. IniRead, stats_storerobs, %stats%, Statistik, StoreRobs
  5980. stats_storerobs++
  5981. IniWrite, % stats_storerobs, %stats%, Statistik, StoreRobs
  5982. SendInfo("Der Timer für den Ladenraub wurde gestartet! Du hast bereits " cPrimar stats_storerobs cSecond " Läden ausgeraubt.")
  5983. storeRobCounter := timer_1
  5984. }
  5985. }
  5986. if(InStr(chat, "Der Überfall von " getUsername() " ist gescheitert")) {
  5987. SendInfo("Der Timer für den Ladenraub wurde gestoppt!")
  5988. storeRobCounter := -1
  5989. }
  5990. if(RegExMatch(chat, "Du hast (.*)\$ für (.*) Eisen und (.*) Aluminium erhalten\.", crew_)) {
  5991. crewmoney := StrReplace(crew_1, ".", "")
  5992. creweisen := StrReplace(crew_2, ".", "")
  5993. crewalu := StrReplace(crew_3, ".", "")
  5994. IniRead, stats_crew_eisen, %stats%, Statistik, CrewEisen
  5995. IniRead, stats_crew_alu, %stats%, Statistik, CrewAlu
  5996. IniRead, stats_crew_money, %stats%, Statistik, CrewGeld
  5997. stats_crew_money := stats_crew_money + crewmoney
  5998. stats_crew_eisen := stats_crew_eisen + creweisen
  5999. stats_crew_alu := stats_crew_alu + crewalu
  6000. SendInfo("Du hast bereits " cPrimar FormatNumber(stats_crew_eisen) cSecond " Eisen und " cPrimar FormatNumber(stats_crew_alu) cSecond " Alu an die Crew geliefert!")
  6001. SendInfo("Die Crew hat dir dafür bisher " cPrimar FormatNumber(stats_crew_money) "$" cSecond " ausgezahlt!")
  6002. IniWrite, % stats_crew_eisen, %stats%, Statistik, CrewEisen
  6003. IniWrite, % stats_crew_alu, %stats%, Statistik, CrewAlu
  6004. IniWrite, % stats_crew_money, %stats%, Statistik, CrewGeld
  6005. }
  6006. if(RegExMatch(chat, "Du hast (.*)\$ für (.*) Zutatenpakete und (.*) Pseudoephedrin erhalten\.", crew_)) {
  6007. crewmoney := StrReplace(crew_1, ".", "")
  6008. crewpakete := StrReplace(crew_2, ".", "")
  6009. crewpseudo := StrReplace(crew_3, ".", "")
  6010. IniRead, stats_crew_pseudo, %stats%, Statistik, CrewPseudo
  6011. IniRead, stats_crew_pakete, %stats%, Statistik, CrewPakete
  6012. IniRead, stats_crew_money, %stats%, Statistik, CrewGeld
  6013. stats_crew_money := stats_crew_money + crewmoney
  6014. stats_crew_pakete := stats_crew_pakete + crewpakete
  6015. stats_crew_pseudo := stats_crew_pseudo + crewpseudo
  6016. SendInfo("Du hast bereits " cPrimar FormatNumber(stats_crew_pakete) cSecond " Pakete und " cPrimar FormatNumber(stats_crew_pseudo) cSecond " Pseudo an die Crew geliefert!")
  6017. SendInfo("Die Crew hat dir dafür bisher " cPrimar FormatNumber(stats_crew_money) "$" cSecond " ausgezahlt!")
  6018. IniWrite, % stats_crew_pseudo, %stats%, Statistik, CrewPseudo
  6019. IniWrite, % stats_crew_pakete, %stats%, Statistik, CrewPakete
  6020. IniWrite, % stats_crew_money, %stats%, Statistik, CrewGeld
  6021. }
  6022. if(InStr(storerob_line, "Du hast diesen Store erfolgreich überfallen")) {
  6023. storerob_line2 := ""
  6024. if(InStr(chat, "Du hast diesen Store erfolgreich überfallen")) {
  6025. if(InStr(chat2,"hat ein Store im") && InStr(chat2,"$")) {
  6026. storerob_line2 := chat2
  6027. } else storerob_line2 := chat1
  6028. } else if(InStr(chat1, "Du hast diesen Store erfolgreich überfallen")) {
  6029. if(InStr(chat3,"hat ein Store im") && InStr(chat3,"$")) {
  6030. storerob_line2 := chat3
  6031. } else storerob_line2 := chat2
  6032. }
  6033. if(RegExMatch(storerob_line2, "\: (\d+\.\d+)\$", money_)) {
  6034. robMoney := StrReplace(money_1, ".", "")
  6035. IniRead, stats_storerobs, %stats%, Statistik, StoreRobs
  6036. IniRead, stats_storerobsgeld, %stats%, Statistik, StoreRobsGeld
  6037. stats_storerobsgeld := stats_storerobsgeld + robMoney
  6038. IniWrite, % stats_storerobsgeld, %stats%, Statistik, StoreRobsGeld
  6039. SendInfo("Du hast " cPrimar FormatNumber(robMoney) "$" cSecond " aus dem Laden erbeutet!")
  6040. SendInfo("Du hast bereits " cPrimar stats_storerobs cSecond " Läden ausgeraubt und dabei " cPrimar FormatNumber(stats_storerobsgeld) "$" cSecond " erbeutet!")
  6041. ShowGameText("~b~Ladenraub~n~erfolgreich!", 3000, 6)
  6042. storeRobCounter := -1
  6043. }
  6044. }
  6045. if(InStr(chat, "Du erhälst am PayDay +700$ für das Zerstören des SprayTags.")) {
  6046. IniRead, stats_spraytags, %stats%, Statistik, SprayTags
  6047. stats_spraytags++
  6048. stats_spraytags_money := stats_spraytags*700
  6049. IniWrite, % stats_spraytags, %stats%, Statistik, SprayTags
  6050. SendChat("/f Ich habe ein SprayTag in " GetPlayerZone() ", " GetPlayerCity() " übersprüht! | SprayTag: " stats_spraytags " - " FormatNumber(stats_spraytags_money) "$!")
  6051. }
  6052. if (RegExMatch(chat, "\* (.+) (.*) bietet dir ein Erste-Hilfe-Paket für \$500 an\. Benutze \'\/accept paket\'", message_)) {
  6053. medicName := message_2
  6054. SetTimer, PaketTimer, 1
  6055. }
  6056. if (RegExMatch(chat, "Paintball\: (.*) hat die Arena betreten\.", message_)) {
  6057. if (message_1 == getUsername()) {
  6058. isPaintball := true
  6059. SendInfo("Der Paintball-Modus wurde " . cGreen . "aktiviert" . cSecond . ".")
  6060. }
  6061. }
  6062. if (RegExMatch(chat, "Paintball\: (.*) wurde von (.*) getötet\.", message_)) {
  6063. if (message_1 == getUsername()) {
  6064. if(killstreakPaintball != 0) {
  6065. SendChat("Meine Killstreak war: " killstreakPaintball)
  6066. killstreakPaintball := 0
  6067. }
  6068. } else if (message_2 == getUsername()) {
  6069. killstreakPaintball++
  6070. if(killstreakPaintball != 0) {
  6071. SendChat("Aktuelle Killstreak: " killstreakPaintball)
  6072. }
  6073. }
  6074. }
  6075. return
  6076. XTimer:
  6077. if(settings_hellofrak) {
  6078. GetChatLine(0, chat)
  6079. if(RegExMatch(chat, "\[Fraktion\]\: (.*) hat sich eingeloggt\.", frakname_)) {
  6080. SendInfo("Möchtest du " cPrimar frakname_1 cSecond " aus der Fraktion begrüßen? Du kannst mit '" . cPrimar . "X" . cSecond . "' bestätigen!")
  6081. KeyWait, X, D, T5
  6082. if (!ErrorLevel && !isBlocked()) {
  6083. Random, tmp, 1, 4
  6084. if(tmp == 1) {
  6085. SendChat("/f Hi " . frakname_1)
  6086. } else if(tmp == 2) {
  6087. SendChat("/f Hallo " . frakname_1)
  6088. } else if(tmp == 3) {
  6089. SendChat("/f Heyho " . frakname_1)
  6090. } else if(tmp == 4) {
  6091. SendChat("/f Moin " . frakname_1)
  6092. }
  6093. }
  6094. }
  6095. }
  6096. if(settings_hellocrew) {
  6097. GetChatLine(0, chat)
  6098. if(RegExMatch(chat, "\[Crew\]\: (.*) hat sich eingeloggt\.", frakname_)) {
  6099. SendInfo("Möchtest du " cPrimar frakname_1 cSecond " aus der Crew begrüßen? Du kannst mit '" . cPrimar . "X" . cSecond . "' bestätigen!")
  6100. KeyWait, X, D, T5
  6101. if (!ErrorLevel && !isBlocked()) {
  6102. Random, tmp, 1, 4
  6103. if(tmp == 1) {
  6104. SendChat("/c Hi " . frakname_1)
  6105. } else if(tmp == 2) {
  6106. SendChat("/c Hallo " . frakname_1)
  6107. } else if(tmp == 3) {
  6108. SendChat("/c Heyho " . frakname_1)
  6109. } else if(tmp == 4) {
  6110. SendChat("/c Moin " . frakname_1)
  6111. }
  6112. }
  6113. }
  6114. }
  6115. if(settings_hellocrew && settings_hellofrak) {
  6116. GetChatLine(0, chat)
  6117. if(RegExMatch(chat, "\[Fraktion \/ Crew\]: (.*) hat sich eingeloggt\.", frakname_)) {
  6118. SendInfo("Möchtest du " cPrimar frakname_1 cSecond " aus der Fraktion/Crew begrüßen? Du kannst mit '" . cPrimar . "X" . cSecond . "' bestätigen!")
  6119. KeyWait, X, D, T5
  6120. if (!ErrorLevel && !isBlocked()) {
  6121. Random, tmp, 1, 4
  6122. if(tmp == 1) {
  6123. SendChat("/c Hi " . frakname_1)
  6124. SendChat("/f Hi " . frakname_1)
  6125. } else if(tmp == 2) {
  6126. SendChat("/c Hallo " . frakname_1)
  6127. SendChat("/f Hallo " . frakname_1)
  6128. } else if(tmp == 3) {
  6129. SendChat("/c Heyho " . frakname_1)
  6130. SendChat("/f Heyho " . frakname_1)
  6131. } else if(tmp == 4) {
  6132. SendChat("/c Moin " . frakname_1)
  6133. SendChat("/f Moin " . frakname_1)
  6134. }
  6135. }
  6136. }
  6137. }
  6138. if (zollTimeout_ && isPlayerInAnyVehicle() && isPlayerAtZoll() && settings_zollsystem) {
  6139. SendInfo("Möchtest du den Zoll öffnen? Du kannst mit '" . cPrimar . "X" . cSecond . "' bestätigen!")
  6140. KeyWait, X, D, T3
  6141. if (!ErrorLevel && !isBlocked()) {
  6142. zollTimeout_ := false
  6143. zollTimeout := 0
  6144. openMaut()
  6145. } else {
  6146. zollTimeout_ := true
  6147. }
  6148. }
  6149. if (gasTimeout_ && isPlayerInAnyVehicle() && IsPlayerDriver() && isPlayerAtGas() && settings_tanksystem) {
  6150. SendInfo("Möchtest du dein Fahrzeug tanken? Du kannst mit '" . cPrimar . "X" . cSecond . "' bestätigen!")
  6151. KeyWait, X, D, T10
  6152. if (!ErrorLevel && !isBlocked()) {
  6153. gasTimeout_ := false
  6154. gasTimeout := 0
  6155. if(GetVehicleEngineState() == true) {
  6156. SendChat("/motor")
  6157. sleep 100
  6158. }
  6159. SendChat("/fill")
  6160. } else {
  6161. gasTimeout_ := true
  6162. }
  6163. }
  6164. if (gasTimeout_ && !isPlayerInAnyVehicle() && isPlayerAtGas() && settings_tanksystem) {
  6165. SendInfo("Möchtest du ein Kanister kaufen? Du kannst mit '" . cPrimar . "X" . cSecond . "' bestätigen!")
  6166. KeyWait, X, D, T10
  6167. if (!ErrorLevel && !isBlocked()) {
  6168. gasTimeout_ := false
  6169. gasTimeout := 0
  6170. SendChat("/kanister")
  6171. } else {
  6172. gasTimeout_ := true
  6173. }
  6174. }
  6175. if (towersTimeout_ && isPlayerAtTower() && settings_towersystem) {
  6176. SendInfo("Möchtest du den Tower einnehmen? Du kannst mit '" . cPrimar . "X" . cSecond . "' bestätigen!")
  6177. KeyWait, X, D, T5
  6178. if (!ErrorLevel && !isBlocked()) {
  6179. towersTimeout_ := false
  6180. towersTimeout := 0
  6181. SendChat("/robtower")
  6182. } else {
  6183. towersTimeout_ := true
  6184. }
  6185. }
  6186. if (gateTimeout_ && isPlayerAtGate() && settings_torsystem) {
  6187. SendInfo("Möchtest du das Tor öffnen? Du kannst mit '" . cPrimar . "X" . cSecond . "' bestätigen!")
  6188. KeyWait, X, D, T5
  6189. if (!ErrorLevel && !isBlocked()) {
  6190. gateTimeout_ := false
  6191. gateTimeout := 0
  6192. SendChat("/auf")
  6193. } else {
  6194. gateTimeout_ := true
  6195. }
  6196. }
  6197. if (fishTimeout_ && isPlayerAtFishPoint() && settings_fishsystem) {
  6198. SendInfo("Möchtest du Fischen? Du kannst mit '" . cPrimar . "X" . cSecond . "' bestätigen!")
  6199. KeyWait, X, D, T5
  6200. if (!ErrorLevel && !isBlocked()) {
  6201. fishTimeout_ := false
  6202. fishTimeout := 0
  6203. startFish()
  6204. } else {
  6205. fishTimeout_ := true
  6206. }
  6207. }
  6208. if (cookTimeout_ && isPlayerAtCookPoint() && settings_fishsystem) {
  6209. SendInfo("Möchtest du deine Fische kochen? Du kannst mit '" . cPrimar . "X" . cSecond . "' bestätigen!")
  6210. KeyWait, X, D, T5
  6211. if (!ErrorLevel && !isBlocked()) {
  6212. cookTimeout_ := false
  6213. cookTimeout := 0
  6214. cookFish()
  6215. } else {
  6216. cookTimeout_ := true
  6217. }
  6218. }
  6219. if (sprayTimeout_ && isPlayerAtSprayTag() && !IsPlayerInAnyVehicle() && settings_spraysystem) {
  6220. SendInfo("Möchtest du das Spraytag übersprühen? Du kannst mit '" . cPrimar . "X" . cSecond . "' bestätigen!")
  6221. KeyWait, X, D, T5
  6222. if (!ErrorLevel && !isBlocked()) {
  6223. sprayTimeout_ := false
  6224. sprayTimeout := 0
  6225. SendChat("/spray")
  6226. } else {
  6227. sprayTimeout_ := true
  6228. }
  6229. }
  6230. if (kettenTimeout_ && isPlayerAtKette() && !IsPlayerInAnyVehicle() && settings_kettensystem) {
  6231. SendInfo("Möchtest du die Kette übernehmen? Du kannst mit '" . cPrimar . "X" . cSecond . "' bestätigen!")
  6232. KeyWait, X, D, T5
  6233. if (!ErrorLevel && !isBlocked()) {
  6234. kettenTimeout_ := false
  6235. kettenTimeout := 0
  6236. SendChat("/robres")
  6237. } else {
  6238. kettenTimeout_ := true
  6239. }
  6240. }
  6241. if (dietrichTimeout_ && isPlayerAtDietrich()) {
  6242. SendInfo("Möchtest du das Tor aufbrechen? Du kannst mit '" . cPrimar . "X" . cSecond . "' bestätigen!")
  6243. KeyWait, X, D, T5
  6244. if (!ErrorLevel && !isBlocked()) {
  6245. dietrichTimeout_ := false
  6246. dietrichTimeout := 0
  6247. SendChat("/dietrich")
  6248. } else {
  6249. dietrichTimeout_ := true
  6250. }
  6251. }
  6252. if (sellFishTimeout_ && isPlayerInRangeOfPoint(6.0265, -30.8849, 1003.5494, 5.0)) {
  6253. SendInfo("Möchtest du deine Fische verkaufen? Du kannst mit '" . cPrimar . "X" . cSecond . "' bestätigen!")
  6254. KeyWait, X, D, T5
  6255. if (!ErrorLevel && !isBlocked()) {
  6256. sellFishTimeout_ := false
  6257. sellFishTimeout := 0
  6258. sellFish()
  6259. SendChat("/sell pfand")
  6260. } else {
  6261. sellFishTimeout_ := true
  6262. }
  6263. }
  6264. return
  6265. XTimerTimeout:
  6266. if (!zollTimeout_) {
  6267. zollTimeout ++
  6268. if (zollTimeout >= 3) {
  6269. zollTimeout_ := true
  6270. }
  6271. }
  6272. if (!gasTimeout_ && !isPlayerInAnyVehicle()) {
  6273. gasTimeout_ ++
  6274. if (gasTimeout_ >= 10) {
  6275. gasTimeout_ := true
  6276. }
  6277. }
  6278. if (!towersTimeout_) {
  6279. towersTimeout_ ++
  6280. if (towersTimeout >= 5) {
  6281. towersTimeout_ := true
  6282. }
  6283. }
  6284. if (!gateTimeout_) {
  6285. gateTimeout ++
  6286. if (gateTimeout >= 5) {
  6287. gateTimeout_ := true
  6288. }
  6289. }
  6290. if (!fishTimeout_) {
  6291. fishTimeout ++
  6292. if (fishTimeout >= 5) {
  6293. fishTimeout_ := true
  6294. }
  6295. }
  6296. if (!cookTimeout_) {
  6297. cookTimeout ++
  6298. if (cookTimeout >= 5) {
  6299. cookTimeout_ := true
  6300. }
  6301. }
  6302. if (!sprayTimeout_) {
  6303. sprayTimeout ++
  6304. if (sprayTimeout >= 5) {
  6305. sprayTimeout_ := true
  6306. }
  6307. }
  6308. if (!kettenTimeout_) {
  6309. kettenTimeout ++
  6310. if (kettenTimeout >= 5) {
  6311. kettenTimeout_ := true
  6312. }
  6313. }
  6314. if (!dietrichTimeout_) {
  6315. dietrichTimeout ++
  6316. if (dietrichTimeout >= 5) {
  6317. dietrichTimeout_ := true
  6318. }
  6319. }
  6320. if (!sellFishTimeout_) {
  6321. sellFishTimeout ++
  6322. if (sellFishTimeout >= 5) {
  6323. sellFishTimeout_ := true
  6324. }
  6325. }
  6326. return
  6327. SekundenTimer:
  6328. if(settings_lottosystem && A_Min == 0 && A_Sec == 0) {
  6329. if(GetPlayerMoney() >= 2000) {
  6330. if(settings_lottozahl == 0) {
  6331. Random, tmp, 1, 100
  6332. SendChat("/lotto " tmp)
  6333. } else SendChat("/lotto " settings_lottozahl)
  6334. } else SendError("Du hast zu wenig Geld auf der Hand für das automatische Lotto")
  6335. }
  6336. if(reuse1time != -1) {
  6337. if(reuse1time == 0) {
  6338. reuse1time := -1
  6339. SendInfo("Du kannst " cPrimar "Reuse 1" cSecond " nun einholen. " cPrimar settings_reusentimer " Minuten" cSecond " sind vorbei!")
  6340. } else if(reuse1time > 0) {
  6341. reuse1time--
  6342. }
  6343. }
  6344. if(reuse2time != -1) {
  6345. if(reuse2time == 0) {
  6346. reuse2time := -1
  6347. SendInfo("Du kannst " cPrimar "Reuse 2" cSecond " nun einholen. " cPrimar settings_reusentimer " Minuten" cSecond " sind vorbei!")
  6348. } else if(reuse2time > 0) {
  6349. reuse2time--
  6350. }
  6351. }
  6352. if(reuse3time != -1) {
  6353. if(reuse3time == 0) {
  6354. reuse3time := -1
  6355. SendInfo("Du kannst " cPrimar "Reuse 3" cSecond " nun einholen. " cPrimar settings_reusentimer " Minuten" cSecond " sind vorbei!")
  6356. } else if(reuse3time > 0) {
  6357. reuse3time--
  6358. }
  6359. }
  6360. if(reuse4time != -1) {
  6361. if(reuse4time == 0) {
  6362. reuse4time := -1
  6363. SendInfo("Du kannst " cPrimar "Reuse 4" cSecond " nun einholen. " cPrimar settings_reusentimer " Minuten" cSecond " sind vorbei!")
  6364. } else if(reuse4time > 0) {
  6365. reuse4time--
  6366. }
  6367. }
  6368. if(reuse5time != -1) {
  6369. if(reuse5time == 0) {
  6370. reuse5time := -1
  6371. SendInfo("Du kannst " cPrimar "Reuse 5" cSecond " nun einholen. " cPrimar settings_reusentimer " Minuten" cSecond " sind vorbei!")
  6372. } else if(reuse5time > 0) {
  6373. reuse5time--
  6374. }
  6375. }
  6376. if(bonusgehalt_timer != -1) {
  6377. if(bonusgehalt_timer == 0) {
  6378. bonusgehalt_timer := -1
  6379. bonusgehalt := 0
  6380. SendInfo("Dein Bonusgehalt von " cPrimar bonusgehalt " Prozent" cSecond " ist ausgelaufen!")
  6381. } else if (bonusgehalt_timer == 600) {
  6382. SendInfo("Dein Bonusgehalt von " cPrimar bonusgehalt " Prozent" cSecond " ist noch " cPrimar "10 Minuten" cSecond " gültig!")
  6383. bonusgehalt_timer--
  6384. } else if (bonusgehalt_timer == 300) {
  6385. SendInfo("Dein Bonusgehalt von " cPrimar bonusgehalt " Prozent" cSecond " ist noch " cPrimar "5 Minuten" cSecond " gültig!")
  6386. bonusgehalt_timer--
  6387. }else if(bonusgehalt_timer > 0) {
  6388. bonusgehalt_timer--
  6389. }
  6390. }
  6391. if(pak_timer != -1) {
  6392. if(pak_timer == 0) {
  6393. pak_timer := -1
  6394. SendInfo("Du kannst nun wieder ein Erste-Hilfe Paket nutzen!")
  6395. } else {
  6396. pak_timer--
  6397. }
  6398. }
  6399. if(drug_timer != -1) {
  6400. drug_timer--
  6401. if(drug_timer == 0) {
  6402. drug_timer := -1
  6403. SendInfo("Du kannst nun wieder Drogen nutzen!")
  6404. } else if(settings_drugusecountdown) {
  6405. if(drug_timer < 6 && drug_timer > 0) {
  6406. SendInfo("Du kannst in " cPrimar drug_timer " Sekunden" cSecond " wieder Drogen nehmen.")
  6407. }
  6408. }
  6409. }
  6410. if(findActive) {
  6411. if(findCounter == 0) {
  6412. SendChat("/find " findPlayer)
  6413. findCounter := 5
  6414. }
  6415. findCounter--
  6416. }
  6417. if(findShowActive) {
  6418. if(findShowCounter == 0) {
  6419. SendChat("/showpos " findShowPlayer " " findShowFindPlayer)
  6420. findShowCounter := 5
  6421. }
  6422. findShowCounter--
  6423. }
  6424. if(countdownActive) {
  6425. if(countdownTime > 0) {
  6426. if(countdownChat != "")  {
  6427. SendChat("/" countdownChat " > > > " countdownTime " < < <")
  6428. } else SendChat("> > > " countdownTime " < < <")
  6429. } else if(countdownTime == 0) {
  6430. if(countdownChat != "")  {
  6431. SendChat("/" countdownChat " > > > GO GO GO < < <")
  6432. } else SendChat("> > > GO GO GO < < <")
  6433. countdownActive := false
  6434. countdownChat := ""
  6435. countdownTime := 0
  6436. }
  6437. countdownTime--
  6438. }
  6439. if(settings_autosync) {
  6440. IfWinNotActive, %gta_title%
  6441. return
  6442. if(isBlocked())
  6443. return
  6444. if(autosyncCounter == 1200) {
  6445. SendInfo("Das automatische Synchronisieren beginnt in " cPrimar "2 Sekunden" cSecond ".")
  6446. SendInfo("Drücke in der Zeit am besten " cPrimar "keine Tasten" cSecond "!")
  6447. SetTimer, AutoSyncTimer, 2000
  6448. }
  6449. autosyncCounter++
  6450. }
  6451. if(storeRobCounter != -1) {
  6452. storeRobCounter--
  6453. gametext_storerbob := "~w~Store Rob:~n~~b~" storeRobCounter " Sekunden"
  6454. if(storeRobCounter == 0) {
  6455. storeRobCounter := -1
  6456. } else {
  6457. ShowGameText(gametext_storerbob, 999, 6)
  6458. }
  6459. }
  6460. return
  6461. TempoTimer:
  6462. if(isBlocked())
  6463. return
  6464. if (tempomatActive == false || tempo <= 0)
  6465. return
  6466. if (isPlayerInAnyVehicle() && isPlayerDriver()) {
  6467. currentSpeed := getVehicleSpeed()
  6468. if (currentSpeed < settings_tempo) {
  6469. SendInput, {W down}
  6470. } else {
  6471. SendInput, {W up}
  6472. }
  6473. }
  6474. return
  6475. AutoSyncTimer:
  6476. SetTimer, AutoSyncTimer, Off
  6477. syncPlayer()
  6478. return
  6479. PaketTimer:
  6480. {
  6481. if (!WinExist(gta_title) || !WinActive(gta_title) || !isConnectedToRPG()) {
  6482. return
  6483. }
  6484. SendInfo("Der Sanitäter " . cPrimar . medicName . cSecond . " bietet dir ein Paket an, drücke '" . cPrimar . "X" . cSecond . "' zum annehmen.")
  6485. KeyWait, X, D, T5
  6486. if (!ErrorLevel) {
  6487. SendChat("/accept paket")
  6488. sleep, 100
  6489. if (RegExMatch(readChatLine(0) . readChatLine(1) . readChatLine(2), "Du hast bereits ein Erste-Hilfe-Paket\. Verwende \/erstehilfe")) {
  6490. if (settings_thankpak) {
  6491. SendChat("Vielen Dank " . medicName . ", doch ich habe bereits ein MediKit!")
  6492. IniWrite, 1, ini\items.ini, Items, ErsteHilfe
  6493. items_erstehilfe := 1
  6494. }
  6495. } else if (RegExMatch(readChatLine(0) . readChatLine(1) . readChatLine(2), "Du hast bereits genug Erste-Hilfe-Pakete\. Verwende \/erstehilfe")) {
  6496. if (settings_thankpak) {
  6497. SendChat("Vielen Dank " . medicName . ", doch ich habe bereits ein MediKit!")
  6498. IniWrite, 1, ini\items.ini, Items, ErsteHilfe
  6499. items_erstehilfe := 1
  6500. }
  6501. } else if (RegExMatch(readChatLine(0) . readChatLine(1) . readChatLine(2), "\* Du hast für \$500 ein Erste-Hilfe-Paket von (\S+) gekauft\.")) {
  6502. if (settings_thankpak) {
  6503. SendChat("Vielen Dank " . medicName . " für das MediKit")
  6504. IniWrite, 1, ini\items.ini, Items, ErsteHilfe
  6505. items_erstehilfe := 1
  6506. }
  6507. }
  6508. }
  6509. medicName := -1
  6510. SetTimer, PaketTimer, off
  6511. }
  6512. return
  6513. equipProfile1Label:
  6514. {
  6515. if (isBlocked())
  6516. return
  6517. equipment := ""
  6518. Loop, 6 {
  6519. if (settings_profile1_%A_Index% != "") {
  6520. equipment .= " " . settings_profile1_%A_Index%
  6521. }
  6522. }
  6523. SendChat("/ausruesten" . equipment)
  6524. Sleep, 250
  6525. chat := readChatLine(0) . readChatLine(1) . readChatLine(2) . readChatLine(3)
  6526. if (RegExMatch(chat, "Du hast dich für (.*)\$ ausgerüstet, es wurden (.*) Materialien benötigt", chat_)) {
  6527. chat_1 := StrReplace(chat_1, ".", "")
  6528. chat_2 := StrReplace(chat_2, ".", "")
  6529. SendInfo("Ausrüstungsprofil" cPrimar " 1 " cSecond "genutzt, es wurden " . cPrimar . chat_2 . cSecond . " Materialien verbraucht.")
  6530. IniRead, stats_equipmats, %stats%, Statistik, EquipMats
  6531. IniRead, stats_equipgeld, %stats%, Statistik, EquipGeld
  6532. stats_equipmats := stats_equipmats + chat_2
  6533. stats_equipgeld := stats_equipgeld + numberFormat(chat_1)
  6534. IniWrite, % stats_equipmats, %stats%, Statistik, EquipMats
  6535. IniWrite, % stats_equipgeld, %stats%, Statistik, EquipGeld
  6536. SendInfo("Du hast dich insgesamt bereits für " . cPrimar . FormatNumber(stats_equipgeld) . cSecond . "$ ausgerüstet. (Verbrauchte Mats: " cPrimar stats_equipmats cSecond ")!")
  6537. }
  6538. SendChat("/heal")
  6539. }
  6540. return
  6541. equipProfile2Label:
  6542. {
  6543. if (isBlocked())
  6544. return
  6545. equipment := ""
  6546. Loop, 6 {
  6547. if (settings_profile2_%A_Index% != "") {
  6548. equipment .= " " . settings_profile2_%A_Index%
  6549. }
  6550. }
  6551. SendChat("/ausruesten" . equipment)
  6552. Sleep, 250
  6553. chat := readChatLine(0) . readChatLine(1) . readChatLine(2) . readChatLine(3)
  6554. if (RegExMatch(chat, "Du hast dich für (.*)\$ ausgerüstet, es wurden (.*) Materialien benötigt", chat_)) {
  6555. chat_1 := StrReplace(chat_1, ".", "")
  6556. chat_2 := StrReplace(chat_2, ".", "")
  6557. SendInfo("Ausrüstungsprofil" cPrimar " 2 " cSecond "genutzt, es wurden " . cPrimar . chat_2 . cSecond . " Materialien verbraucht.")
  6558. IniRead, stats_equipmats, %stats%, Statistik, EquipMats
  6559. IniRead, stats_equipgeld, %stats%, Statistik, EquipGeld
  6560. stats_equipmats := stats_equipmats + chat_2
  6561. stats_equipgeld := stats_equipgeld + numberFormat(chat_1)
  6562. IniWrite, % stats_equipmats, %stats%, Statistik, EquipMats
  6563. IniWrite, % stats_equipgeld, %stats%, Statistik, EquipGeld
  6564. SendInfo("Du hast dich insgesamt bereits für " . cPrimar . FormatNumber(stats_equipgeld) . cSecond . "$ ausgerüstet. (Verbrauchte Mats: " cPrimar stats_equipmats cSecond ")!")
  6565. }
  6566. SendChat("/heal")
  6567. }
  6568. return
  6569. equipProfile3Label:
  6570. {
  6571. if (isBlocked())
  6572. return
  6573. equipment := ""
  6574. Loop, 6 {
  6575. if (settings_profile3_%A_Index% != "") {
  6576. equipment .= " " . settings_profile3_%A_Index%
  6577. }
  6578. }
  6579. SendChat("/ausruesten" . equipment)
  6580. Sleep, 250
  6581. chat := readChatLine(0) . readChatLine(1) . readChatLine(2) . readChatLine(3)
  6582. if (RegExMatch(chat, "Du hast dich für (.*)\$ ausgerüstet, es wurden (.*) Materialien benötigt", chat_)) {
  6583. chat_1 := StrReplace(chat_1, ".", "")
  6584. chat_2 := StrReplace(chat_2, ".", "")
  6585. SendInfo("Ausrüstungsprofil" cPrimar " 3 " cSecond "genutzt, es wurden " . cPrimar . chat_2 . cSecond . " Materialien verbraucht.")
  6586. IniRead, stats_equipmats, %stats%, Statistik, EquipMats
  6587. IniRead, stats_equipgeld, %stats%, Statistik, EquipGeld
  6588. stats_equipmats := stats_equipmats + chat_2
  6589. stats_equipgeld := stats_equipgeld + numberFormat(chat_1)
  6590. IniWrite, % stats_equipmats, %stats%, Statistik, EquipMats
  6591. IniWrite, % stats_equipgeld, %stats%, Statistik, EquipGeld
  6592. SendInfo("Du hast dich insgesamt bereits für " . cPrimar . FormatNumber(stats_equipgeld) . cSecond . "$ ausgerüstet. (Verbrauchte Mats: " cPrimar FormatNumber(stats_equipmats) cSecond ")!")
  6593. }
  6594. SendChat("/heal")
  6595. }
  6596. return
  6597. equipLabel:
  6598. if(isBlocked())
  6599. return
  6600. SendChat("/ausruesten")
  6601. return
  6602. countdownLabel:
  6603. if(isBlocked())
  6604. return
  6605. configCountdown()
  6606. return
  6607. healLabel:
  6608. if(isBlocked())
  6609. return
  6610. SendChat("/heal")
  6611. return
  6612. lichtSystemLabel:
  6613. if(isBlocked())
  6614. return
  6615. if(IsPlayerInAnyVehicle() == true) {
  6616. if(IsPlayerDriver() == true) {
  6617. SendChat("/licht")
  6618. } else SendError("Du bist nicht der Fahrer des Vehicle")
  6619. } else SendError("Du bist in keinem Vehicle!")
  6620. return
  6621. lockSystemLabel:
  6622. if(isBlocked())
  6623. return
  6624. if(IsPlayerInAnyVehicle() == true) {
  6625. if(IsPlayerDriver() == true) {
  6626. SendChat("/lock")
  6627. } else SendError("Du bist nicht der Fahrer des Vehicle")
  6628. } else SendError("Du bist in keinem Vehicle!")
  6629. return
  6630. motorSystemLabel:
  6631. if(isBlocked())
  6632. return
  6633. if(IsPlayerInAnyVehicle() == true) {
  6634. if(IsPlayerDriver() == true) {
  6635. if(GetVehicleEngineState() == true) {
  6636. SendChat("/motor")
  6637. } else if(GetVehicleEngineState() == false) {
  6638. SendChat("/motor")
  6639. SendChat("/licht")
  6640. }
  6641. } else SendError("Du bist nicht der Fahrer des Vehicle")
  6642. } else SendError("Du bist in keinem Vehicle!")
  6643. return
  6644. repeatLabel:
  6645. if(isBlocked())
  6646. return
  6647. SendInput, t{Up}{Enter}
  6648. return
  6649. thanksLabel:
  6650. if(isBlocked())
  6651. return
  6652. Random, tmp, 1, 4
  6653. if(tmp == 1) {
  6654. SendChat("Vielen Dank!")
  6655. } else if(tmp == 2) {
  6656. SendChat("Dankeschön!")
  6657. } else if(tmp == 3) {
  6658. SendChat("Ich bedanke mich!")
  6659. } else if (rand == 4) {
  6660. SendChat("Merci!")
  6661. }
  6662. return
  6663. sorryLabel:
  6664. if(isBlocked())
  6665. return
  6666. Random, tmp, 1, 4
  6667. if (tmp == 1) {
  6668. SendChat("Entschuldigung!")
  6669. } else if (tmp == 2) {
  6670. SendChat("Sorry!")
  6671. } else if (tmp == 3) {
  6672. SendChat("Tut mir leid!")
  6673. } else if (tmp == 4) {
  6674. SendChat("Ich bitte um Verzeihung!")
  6675. }
  6676. return
  6677. showCrewMemberLabel:
  6678. if(isBlocked())
  6679. return
  6680. SendChat("/crewmembers")
  6681. return
  6682. showFrakMemberLabel:
  6683. if(isBlocked())
  6684. return
  6685. SendChat("/members")
  6686. return
  6687. showPosFLabel:
  6688. if(isBlocked())
  6689. return
  6690. if(IsPlayerInAnyVehicle()) {
  6691. SendChat("/f Ich befinde mich in " GetPlayerZone() ", " GetPlayerCity() " in einem " GetVehicleModelName() " | HP: " GetPlayerHealth())
  6692. } else SendChat("/f Ich befinde mich in " GetPlayerZone() ", " GetPlayerCity() " | HP: " GetPlayerHealth())
  6693. return
  6694. showPosCLabel:
  6695. if(isBlocked())
  6696. return
  6697. if(IsPlayerInAnyVehicle()) {
  6698. SendChat("/c Ich befinde mich in " GetPlayerZone() ", " GetPlayerCity() " in einem " GetVehicleModelName() " | HP: " GetPlayerHealth())
  6699. } else SendChat("/c Ich befinde mich in " GetPlayerZone() ", " GetPlayerCity() " | HP: " GetPlayerHealth())
  6700. return
  6701. statsLabel:
  6702. if(isBlocked())
  6703. return
  6704. SendChat("/stats")
  6705. return
  6706. tempomatLabel:
  6707. if(isBlocked())
  6708. return
  6709. if (tempomatActive) {
  6710. SendInput, {W up}
  6711. tempomatActive := false
  6712. SendInfo("Du hast den Tempomat " cRed "deaktiviert" cPrimar "!")
  6713. } else {
  6714. tempomatActive := true
  6715. IniRead, settings_tempomat, %settings%, Tempomat, Tempomat
  6716. SendInfo("Du hast den Tempomat " cGreen "aktiviert" cSecond " ( Tempo: " . cPrimar . settings_tempomat . " km/h" cSecond " )!")
  6717. }
  6718. return
  6719. togPhoneLabel:
  6720. if(isBlocked())
  6721. return
  6722. SendChat("/togphone")
  6723. return
  6724. useDrugsLabel:
  6725. if(isBlocked())
  6726. return
  6727. useDrugs()
  6728. return
  6729. usePakLabel:
  6730. if(isBlocked())
  6731. return
  6732. usePak()
  6733. return
  6734. useFishLabel:
  6735. if(isBlocked())
  6736. return
  6737. useFish()
  6738. return
  6739. stopAutomaticSystemLabel:
  6740. if(isBlocked())
  6741. return
  6742. if(findActive) {
  6743. SendInfo("Du hast die automatische Suche von " GetFullName(findPlayer) " beendet!")
  6744. findActive := false
  6745. findPlayer := -1
  6746. findCounter := 0
  6747. } else if(findShowActive) {
  6748. SendInfo("Du hast das automatische Zeigen an " GetFullName(findShowPlayer) " von " GetFullName(findShowFindPlayer) " beendet!")
  6749. findShowActive := false
  6750. findShowPlayer := -1
  6751. findShowFindPlayer := -1
  6752. findShowCounter := 0
  6753. } else if(countdownActive) {
  6754. SendInfo("Du hast hast den Countdown beendet!")
  6755. countdownActive := false
  6756. countdownChat := ""
  6757. countdownTime := 0
  6758. } else SendError("Es laufen keine aktiven automatischen Systeme!")
  6759. return
  6760. pauseLabel:
  6761. Suspend
  6762. if(isBlocked())
  6763. return
  6764. if(A_IsSuspended)
  6765. {
  6766. SendInfo("Du hast den Keybinder " cRed "deaktiviert" cSecond "!")
  6767. SetTimer, MainTimer, Off
  6768. SetTimer, KillDeathTimer, Off
  6769. SetTimer, ChatTimer, Off
  6770. SetTimer, XTimer, Off
  6771. SetTimer, XTimerTimeout, Off
  6772. SetTimer, SekundenTimer, Off
  6773. SetTimer, TempoTimer, Off
  6774. }
  6775. if(!A_IsSuspended)
  6776. {
  6777. SendInfo("Du hast den Keybinder " cGreen "aktiviert" cSecond "!")
  6778. SetTimer, MainTimer, 100
  6779. SetTimer, KillDeathTimer, 100
  6780. SetTimer, ChatTimer, 100
  6781. SetTimer, XTimer, 500
  6782. SetTimer, XTimerTimeout, 500
  6783. SetTimer, SekundenTimer, 1000
  6784. SetTimer, TempoTimer, 25
  6785. }
  6786. return
  6787. gateLabel:
  6788. if(isBlocked())
  6789. return
  6790. SendChat("/auf")
  6791. return
  6792. ownHotkey1Label:
  6793. ownHotkey(1)
  6794. return
  6795. ownHotkey2Label:
  6796. ownHotkey(2)
  6797. return
  6798. ownHotkey3Label:
  6799. ownHotkey(3)
  6800. return
  6801. ownHotkey4Label:
  6802. ownHotkey(4)
  6803. return
  6804. ownHotkey5Label:
  6805. ownHotkey(5)
  6806. return
  6807. ownHotkey6Label:
  6808. ownHotkey(6)
  6809. return
  6810. ownHotkey7Label:
  6811. ownHotkey(7)
  6812. return
  6813. ownHotkey8Label:
  6814. ownHotkey(8)
  6815. return
  6816. ownHotkey9Label:
  6817. ownHotkey(9)
  6818. return
  6819. ownHotkey10Label:
  6820. ownHotkey(10)
  6821. return
  6822. ownHotkey11Label:
  6823. ownHotkey(11)
  6824. return
  6825. ownHotkey12Label:
  6826. ownHotkey(12)
  6827. return
  6828. ownHotkey13Label:
  6829. ownHotkey(13)
  6830. return
  6831. ownHotkey14Label:
  6832. ownHotkey(14)
  6833. return
  6834. ownHotkey15Label:
  6835. ownHotkey(15)
  6836. return
  6837. ownHotkey16Label:
  6838. ownHotkey(16)
  6839. return
  6840. ownHotkey17Label:
  6841. ownHotkey(17)
  6842. return
  6843. ownHotkey18Label:
  6844. ownHotkey(18)
  6845. return
  6846. ownHotkey19Label:
  6847. ownHotkey(19)
  6848. return
  6849. ownHotkey20Label:
  6850. ownHotkey(20)
  6851. return
  6852. ownHotkey21Label:
  6853. ownHotkey(21)
  6854. return
  6855. ownHotkey22Label:
  6856. ownHotkey(22)
  6857. return
  6858. ownHotkey23Label:
  6859. ownHotkey(23)
  6860. return
  6861. ownHotkey24Label:
  6862. ownHotkey(24)
  6863. return
  6864. ownHotkey25Label:
  6865. ownHotkey(25)
  6866. return
  6867. ownHotkey26Label:
  6868. ownHotkey(26)
  6869. return
  6870. ownHotkey27Label:
  6871. ownHotkey(27)
  6872. return
  6873. ownHotkey28Label:
  6874. ownHotkey(28)
  6875. return
  6876. ownHotkey29Label:
  6877. ownHotkey(29)
  6878. return
  6879. ownHotkey30Label:
  6880. ownHotkey(30)
  6881. return
  6882. ownHotkey31Label:
  6883. ownHotkey(31)
  6884. return
  6885. ownHotkey32Label:
  6886. ownHotkey(32)
  6887. return
  6888. ownHotkey33Label:
  6889. ownHotkey(33)
  6890. return
  6891. ownHotkey34Label:
  6892. ownHotkey(34)
  6893. return
  6894. ownHotkey35Label:
  6895. ownHotkey(35)
  6896. return
  6897. ownHotkey36Label:
  6898. ownHotkey(36)
  6899. return
  6900. ownHotkey37Label:
  6901. ownHotkey(37)
  6902. return
  6903. ownHotkey38Label:
  6904. ownHotkey(38)
  6905. return
  6906. ownHotkey39Label:
  6907. ownHotkey(39)
  6908. return
  6909. ownHotkey40Label:
  6910. ownHotkey(40)
  6911. return
  6912. ownHotkey41Label:
  6913. ownHotkey(41)
  6914. return
  6915. ownHotkey42Label:
  6916. ownHotkey(42)
  6917. return
  6918. ownHotkey43Label:
  6919. ownHotkey(43)
  6920. return
  6921. ownHotkey44Label:
  6922. ownHotkey(44)
  6923. return
  6924. ownHotkey45Label:
  6925. ownHotkey(45)
  6926. return
  6927. ownHotkey46Label:
  6928. ownHotkey(46)
  6929. return
  6930. ownHotkey47Label:
  6931. ownHotkey(47)
  6932. return
  6933. ownHotkey48Label:
  6934. ownHotkey(48)
  6935. return
  6936. ~W::
  6937. ~A::
  6938. ~S::
  6939. ~D::
  6940. if(isBlocked())
  6941. return
  6942. if(GetPlayerHealth() < 82 && autoUseToggle == false && isPaintball == false) {
  6943. if(settings_druguse == 1 && drug_timer == -1 && items_drogen >= 2) {
  6944. useDrugs()
  6945. } else if(settings_pakuse == 1 && pak_timer == -1 && items_erstehilfe >= 1) {
  6946. usePak()
  6947. } else if(settings_fishuse == 1) {
  6948. useFish()
  6949. }
  6950. }
  6951. return
  6952. ~F::
  6953. {
  6954. if (isBlocked()) {
  6955. return
  6956. }
  6957. if(settings_motorsystem) {
  6958. if(IsPlayerInAnyVehicle() == 0) {
  6959. Loop,
  6960. if(IsPlayerDriver() == 1)
  6961. {
  6962. if(getVehicleLockState() == 0)
  6963. {
  6964. sleep 200
  6965. SendChat("/lock")
  6966. return
  6967. }
  6968. }
  6969. }
  6970. }
  6971. if(settings_locksystem) {
  6972. if(IsPlayerInAnyVehicle() == 1) {
  6973. if(IsPlayerDriver() == 1) {
  6974. if (getVehicleEngineState() == 1) {
  6975. SendChat("/motor")
  6976. return
  6977. }
  6978. }
  6979. }
  6980. }
  6981. }
  6982. return
  6983. ~LButton::
  6984. if (isDialogOpen() && GetDialogCaption() == "Übersicht der Mülltonnen" && isDialogButton1Selected()) {
  6985. trashDialog := true
  6986. OnDialogResponse()
  6987. } else if (isDialogOpen() && GetDialogCaption() == "Übersicht deiner Tore" && isDialogButton1Selected()) {
  6988. gateDialog := true
  6989. OnDialogResponse()
  6990. }
  6991. If (A_ThisHotkey = A_PriorHotkey and A_TimeSincePriorHotkey < 350)
  6992. ~Enter::
  6993. {
  6994. if (IsDialogOpen() && GetDialogCaption() == "Übersicht der Mülltonnen") {
  6995. trashDialog := true
  6996. OnDialogResponse()
  6997. } else if (IsDialogOpen() && GetDialogCaption() == "Übersicht deiner Tore") {
  6998. gateDialog := true
  6999. OnDialogResponse()
  7000. }
  7001. }
  7002. return
  7003. :?:/bk::
  7004. :?:/backup::
  7005. SendInput, {Enter}
  7006. {
  7007. SendChat("/bk")
  7008. if(bk == true) {
  7009. bk := false
  7010. SendChat("/f Ich benötige keine Verstärkung mehr!")
  7011. } else if(bk == false) {
  7012. bk := true
  7013. SendChat("/f Ich benötige dringend Verstärkung in " . getPlayerZone() . ", " . getPlayerCity . "! (HP: " . getPlayerHealth() . ")")
  7014. }
  7015. }
  7016. return
  7017. :?:/reusentimer::
  7018. SendInput, {Enter}
  7019. {
  7020. reusentimer := PlayerInput("Zeit in Minuten: ")
  7021. if (reusentimer != "" || reusentimer != " " || !IsNumeric(reusentimer)) {
  7022. settings_reusentimer := reusentimer
  7023. IniWrite, % settings_reusentimer, %settings%, Reusen, ReusenTimer
  7024. SendInfo("Du hast den Timer auf " cPrimar settings_reusentimer " Minuten" cSecond " eingestellt!")
  7025. } else SendError("Keine gültige Zeit!")
  7026. }
  7027. return
  7028. :?:/pbexit::
  7029. SendInput, {Enter}
  7030. {
  7031. cantExit := 0
  7032. SendChat("/pbexit")
  7033. Sleep, 200
  7034. Loop, 5 {
  7035. if (inStr(readChatLine(A_Index - 1), "Fehler: Nachdem du getroffen wurdest, musst du 5 Sekunde warten, um die Arena zu verlassen.")) {
  7036. cantExit := 1
  7037. }
  7038. }
  7039. if (!cantExit) {
  7040. isPaintball := false
  7041. }
  7042. }
  7043. return
  7044. :?:/pbenter::
  7045. SendInput, {Enter}
  7046. {
  7047. if (!isPlayerInAnyVehicle()) {
  7048. if (isPlayerInRangeOfPoint(901.2969, -1203.0950, 16.9832, 3)) {
  7049. SendChat("/pbenter")
  7050. } else SendError("Du bist nicht an der Paintball-Arena.")
  7051. } else SendError("Du darfst dich in keinem Fahrzeug befinden.")
  7052. }
  7053. return
  7054. :?:/pb::
  7055. :?:/paintball::
  7056. SendInput, {Enter}
  7057. {
  7058. SendChat("/paintball")
  7059. Sleep, 200
  7060. players := 0
  7061. Loop, 100 {
  7062. if (inStr(readChatLine(players), "Punkte")) {
  7063. players ++
  7064. } else {
  7065. SendInfo("Es sind Spieler im Paintball: " . cPrimar . players)
  7066. return
  7067. }
  7068. }
  7069. }
  7070. return
  7071. :?:/pbmodus::
  7072. SendInput, {Enter}
  7073. {
  7074. if(isPaintball) {
  7075. isPaintball := false
  7076. SendInfo("Der Paintball-Modus wurde " . cRed . "deaktiviert" . cSecond . ".")
  7077. } else {
  7078. isPaintball := true
  7079. SendInfo("Der Paintball-Modus wurde " . cGreen . "aktiviert" . cSecond . ".")
  7080. }
  7081. }
  7082. return
  7083. :?:/trash::
  7084. SendInput, {Enter}
  7085. {
  7086. showTrashcans()
  7087. }
  7088. return
  7089. :?:/tn::
  7090. :?:/tnext::
  7091. SendInput, {Enter}
  7092. {
  7093. showNextTrashcan()
  7094. }
  7095. return
  7096. :?:/af::
  7097. :?:/afind::
  7098. SendInput, {Enter}
  7099. {
  7100. if(!findActive) {
  7101. playerToFindInput := PlayerInput("Spieler: ")
  7102. if (playerToFindInput == "" || playerToFindInput == " ") {
  7103. SendError("Die Eingabe wurde abgebrochen.")
  7104. return
  7105. }
  7106. playerToFind := playerToFindInput
  7107. if (getFullName(playerToFind) == "") {
  7108. SendError("Der angegebene Spieler ist nicht online.")
  7109. return
  7110. }
  7111. if (getFullName(playerToFind) == getUsername()) {
  7112. SendError("Du kannst dich nicht selber finden.")
  7113. return
  7114. }
  7115. findActive := true
  7116. findPlayer := playerToFind
  7117. IniRead, stopHotkey, ini\hotkeys.ini, Hotkeys, stopAutomaticSystem
  7118. stopHotkey := StrReplace(stopHotkey, "~", "")
  7119. SendInfo("Du hast die automatische Suche auf " cPrimar getFullName(playerToFind) cSecond " eingestellt!")
  7120. SendInfo("Du kannst die Suche mit '" . cPrimar . stopHotkey . cSecond . "' stoppen!")
  7121. } else SendError("Du musst erst die Automatische Suche deaktivieren!")
  7122. }
  7123. return
  7124. :?:/as::
  7125. :?:/ashow::
  7126. SendInput, {Enter}
  7127. {
  7128. if(!findShowActive) {
  7129. playerToShowInput := PlayerInput("Spieler, dem gezeigt werden soll: ")
  7130. if (playerToShowInput == "" || playerToShowInput == " ") {
  7131. SendError("Die Eingabe wurde abgebrochen.")
  7132. return
  7133. }
  7134. playerToShow := playerToShowInput
  7135. if (getFullName(playerToShow) == "") {
  7136. SendError("Der angegebene Spieler ist nicht online.")
  7137. return
  7138. }
  7139. if (getFullName(playerToShow) == getUsername()) {
  7140. SendError("Du kannst dir die Position nicht selber zeigen.")
  7141. return
  7142. }
  7143. playerToFindInput := PlayerInput("Gesuchter Spieler (Username/ID): ")
  7144. if (playerToFindInput == "" || playerToFindInput == " ") {
  7145. SendError("Die Eingabe wurde abgebrochen.")
  7146. return
  7147. }
  7148. playerToFind := playerToFindInput
  7149. if (getFullName(playerToFind) == "") {
  7150. SendError("Der angegebene Spieler ist nicht online.")
  7151. return
  7152. }
  7153. if (getFullName(playerToFind) == getUsername()) {
  7154. SendError("Du kannst dich nicht selber finden.")
  7155. return
  7156. }
  7157. findShowActive := true
  7158. findShowPlayer := playerToShow
  7159. findShowFindPlayer := playerToFind
  7160. IniRead, stopHotkey, ini\hotkeys.ini, Hotkeys, stopAutomaticSystem
  7161. stopHotkey := StrReplace(stopHotkey, "~", "")
  7162. SendInfo("Du hast die automatische Suche auf " cPrimar getFullName(playerToFind) cSecond " eingestellt und du zeigst die Position " cPrimar getFullName(findShowPlayer) cSecond "!")
  7163. SendInfo("Du kannst die Suche mit '" . cPrimar . stopHotkey . cSecond . "' stoppen!")
  7164. } else SendError("Du musst erst die Automatische Suche deaktivieren!")
  7165. }
  7166. return
  7167. :?:/items::
  7168. SendInput, {Enter}
  7169. {
  7170. forceStats()
  7171. IniRead, items_drogen, %items%, Items, Drogen
  7172. IniRead, items_erstehilfe, %items%, Items, ErsteHilfe
  7173. IniRead, items_lagerfeuer, %items%, Items, Lagerfeuer
  7174. IniRead, items_kanister, %items%, Items, Kanister
  7175. SendInfo("|============| " cPrimar "Inventar" cSecond " |============|")
  7176. SendInfo("Drogen dabei: " cPrimar items_drogen cSecond "g")
  7177. SendInfo("Erste-Hilfe-Paket: " . cPrimar . items_erstehilfe)
  7178. SendInfo("Lagerfeuer: " . cPrimar . items_lagerfeuer)
  7179. SendInfo("Kanister: " . cPrimar . items_kanister)
  7180. SendInfo("|============| " cPrimar "Inventar" cSecond " |============|")
  7181. }
  7182. return
  7183. :?:/sync::
  7184. SendInput, {Enter}
  7185. {
  7186. syncPlayer()
  7187. }
  7188. return
  7189. :?:/autouse::
  7190. :?:/bossmode::
  7191. SendInput, {Enter}
  7192. {
  7193. if(autoUseToggle == false)
  7194. {
  7195. autoUseToggle := true
  7196. SendInfo("Du hast das AutoUse System " cRed "deaktiviert" cSecond "!")
  7197. } else if(autoUseToggle == true)
  7198. {
  7199. autoUseToggle := false
  7200. SendInfo("Du hast das AutoUse System " cGreen "aktiviert" cSecond "!")
  7201. }
  7202. }
  7203. return
  7204. :?:/afish::
  7205. SendInput, {Enter}
  7206. {
  7207. startFish()
  7208. }
  7209. return
  7210. :?:/cook::
  7211. :?:/cooked::
  7212. SendInput, {Enter}
  7213. {
  7214. checkCooked()
  7215. }
  7216. return
  7217. :?:/fishes::
  7218. :?:/fische::
  7219. SendInput, {Enter}
  7220. {
  7221. checkFish()
  7222. }
  7223. return
  7224. :?:/acook::
  7225. SendInput, {Enter}
  7226. {
  7227. cookFish()
  7228. }
  7229. return
  7230. :?:/asell::
  7231. SendInput, {Enter}
  7232. {
  7233. if (IsPlayerInRangeOfPoint(2.3247, -28.8923, 1003.5494, 10)) {
  7234. sellFish()
  7235. } else {
  7236. IniRead, stats_fishgeld, %stats%, Statistik, FishGeld
  7237. SendInfo("Du kannst deine Fische hier nicht verkaufen! (Gesamter Verdienst: " . cPrimar . formatNumber(stats_fishgeld) . "$" cSecond ")")
  7238. }
  7239. }
  7240. return
  7241. :?:/setad::
  7242. SendInput, {Enter}
  7243. {
  7244. adid := PlayerInput("WerbeID: ")
  7245. if(IsNumeric(adid) && adid > 0 && adid < 4) {
  7246. adtext := PlayerInput("Werbung: ")
  7247. if(adtext != "" || adtext != " ") {
  7248. settings_werbetext%adid% := adtext
  7249. IniWrite, % adtext, %settings%, Werbung, Werbetext%adid%
  7250. SendInfo("Du hast den " cPrimar "Werbetext " adid cSecond " auf folgendes eingestellt:")
  7251. SendInfo(cPrimar settings_werbetext%adid%)
  7252. }
  7253. } else SendError("Die WerbeID muss zwischen 1 und 3 liegen!")
  7254. }
  7255. return
  7256. :?:/readad::
  7257. SendInput, {Enter}
  7258. {
  7259. adid := PlayerInput("WerbeID: ")
  7260. if(IsNumeric(adid) && adid > 0 && adid < 4) {
  7261. IniRead, settings_werbetext%aid%, %settings%, Werbung, Werbetext%adid%
  7262. werbetext := settings_werbetext%aid%
  7263. if(werbetext) {
  7264. SendInfo("Eingesteller " cPrimar "Werbetext " adid cSecond ":")
  7265. SendInfo(cPrimar werbetext)
  7266. } else SendError("Du musst erst eine Werbung mit " cPrimar "/setad" cSecond " einstellen!")
  7267. } else SendError("Die WerbeID muss zwischen 1 und 3 liegen!")
  7268. }
  7269. return
  7270. :?:/postad::
  7271. SendInput, {Enter}
  7272. {
  7273. adid := PlayerInput("WerbeID: ")
  7274. if(IsNumeric(adid) && adid > 0 && adid < 4) {
  7275. IniRead, settings_werbetext%aid%, %settings%, Werbung, Werbetext%adid%
  7276. werbetext := settings_werbetext%aid%
  7277. if(werbetext) {
  7278. SendChat("/ad " werbetext)
  7279. } else SendError("Du musst erst eine Werbung mit " cPrimar "/setad" cSecond " einstellen!")
  7280. } else SendError("Die WerbeID muss zwischen 1 und 3 liegen!")
  7281. }
  7282. return
  7283. :?:/aab::
  7284. SendInput, {Enter}
  7285. {
  7286. SendChat("/pickup")
  7287. SendChat("Guten Tag, mein Name ist " getUsername() ". Wie kann ich Ihnen helfen?")
  7288. }
  7289. return
  7290. :?:/aauf::
  7291. SendInput, {Enter}
  7292. {
  7293. SendChat("Ich wünsche ihnen noch einen angenehmen Tag.")
  7294. SendChat("/hangup")
  7295. }
  7296. return
  7297. :?:/mailbox::
  7298. :?:/amb::
  7299. SendInput, {Enter}
  7300. {
  7301. SendChat("/pickup")
  7302. SendChat("Hallo, " getUsername() " ist gerade nicht erreichbar. Sie haben 15 Sekunden Zeit eine Nachricht zu hinterlassen.")
  7303. sleep 15000
  7304. SendChat("Die Nachricht wurde an " getUsername() " übermittelt.")
  7305. SendChat("/hangup")
  7306. }
  7307. return
  7308. :?:/setkd::
  7309. SendInput, {Enter}
  7310. {
  7311. SendChat("/stats")
  7312. sleep, 350
  7313. if (RegExMatch(getDialogText(), "(.*)Morde: (.*) (.*)", kills_)) {
  7314. kills_2 := StrReplace(kills_2, ".", "")
  7315. IniWrite, %kills_2%, %stats%, Statistik, Kills
  7316. }
  7317. if (RegExMatch(getDialogText(), "(.*)Gestorben: (.*) (.*)", deaths_)) {
  7318. deaths_2 := StrReplace(deaths_2, ".", "")
  7319. IniWrite, %deaths_2%, %stats%, Statistik, Deaths
  7320. }
  7321. SendInput, {Enter}
  7322. IniRead, stats_kills, %stats%, Statistik, Kills
  7323. IniRead, stats_deaths, %stats%, Statistik, Deaths
  7324. SendInfo("Du hast " . cPrimar . stats_kills . cSecond . " Kills und " . cPrimar . stats_deaths . cSecond . " Tode.")
  7325. }
  7326. return
  7327. :?:/kd::
  7328. SendInput, {Enter}
  7329. {
  7330. IniRead, stats_kills, %stats%, Statistik, Kills
  7331. IniRead, stats_deaths, %stats%, Statistik, Deaths
  7332. kd := stats_kills/stats_deaths
  7333. SendInfo("Du hast " cPrimar stats_kills cSecond " Kills und " cPrimar stats_deaths cSecond " Tode!")
  7334. SendInfo("Dies ist eine K/D von " cPrimar Round(kd, 2) cSecond "!")
  7335. }
  7336. return
  7337. :?:/dkd::
  7338. SendInput, {Enter}
  7339. {
  7340. IniRead, daystats_kills, %dstats%, Statistik, Kills[%A_DD%:%A_MM%:%A_YYYY%]
  7341. IniRead, daystats_deaths, %dstats%, Statistik, Deaths[%A_DD%:%A_MM%:%A_YYYY%]
  7342. dkd := daystats_kills/daystats_deaths
  7343. SendInfo("Du hast heute " cPrimar daystats_kills cSecond " Kills und " cPrimar daystats_deaths cSecond " Tode!")
  7344. SendInfo("Dies ist eine K/D von " cPrimar Round(dkd, 2) cSecond "!")
  7345. }
  7346. return
  7347. :?:/mkd::
  7348. SendInput, {Enter}
  7349. {
  7350. IniRead, monthstats_kills, %mstats%, Statistik, Kills[%A_MM%:%A_YYYY%]
  7351. IniRead, monthstats_deaths, %mstats%, Statistik, Deaths[%A_MM%:%A_YYYY%]
  7352. mkd := monthstats_kills/monthstats_deaths
  7353. SendInfo("Du hast diesen Monat " cPrimar monthstats_kills cSecond " Kills und " cPrimar monthstats_deaths cSecond " Tode!")
  7354. SendInfo("Dies ist eine K/D von " cPrimar Round(mkd, 2) cSecond "!")
  7355. }
  7356. return
  7357. :?:/fkd::
  7358. SendInput, {Enter}
  7359. {
  7360. IniRead, stats_kills, %stats%, Statistik, Kills
  7361. IniRead, stats_deaths, %stats%, Statistik, Deaths
  7362. kd := stats_kills/stats_deaths
  7363. SendChat("/f Ich habe " stats_kills " Kills und " stats_deaths " Tode! Meine K/D: " Round(kd, 2))
  7364. }
  7365. return
  7366. :?:/fdkd::
  7367. SendInput, {Enter}
  7368. {
  7369. IniRead, daystats_kills, %dstats%, Statistik, Kills[%A_DD%:%A_MM%:%A_YYYY%]
  7370. IniRead, daystats_deaths, %dstats%, Statistik, Deaths[%A_DD%:%A_MM%:%A_YYYY%]
  7371. dkd := daystats_kills/daystats_deaths
  7372. SendChat("/f Ich habe heute " daystats_kills " Kills und " daystats_deaths " Tode! Meine Tages K/D: " Round(dkd, 2))
  7373. }
  7374. return
  7375. :?:/fmkd::
  7376. SendInput, {Enter}
  7377. {
  7378. IniRead, monthstats_kills, %mstats%, Statistik, Kills[%A_MM%:%A_YYYY%]
  7379. IniRead, monthstats_deaths, %mstats%, Statistik, Deaths[%A_MM%:%A_YYYY%]
  7380. mkd := monthstats_kills/monthstats_deaths
  7381. SendChat("/f Ich habe diesen Monat " monthstats_kills " Kills und " monthstats_deaths " Tode! Meine Monats K/D: " Round(mkd, 2))
  7382. }
  7383. return
  7384. :?:/ckd::
  7385. SendInput, {Enter}
  7386. {
  7387. IniRead, stats_kills, %stats%, Statistik, Kills
  7388. IniRead, stats_deaths, %stats%, Statistik, Deaths
  7389. kd := stats_kills/stats_deaths
  7390. SendChat("/c Ich habe " stats_kills " Kills und " stats_deaths " Tode! Meine K/D: " Round(kd, 2))
  7391. }
  7392. return
  7393. :?:/cdkd::
  7394. SendInput, {Enter}
  7395. {
  7396. IniRead, daystats_kills, %dstats%, Statistik, Kills[%A_DD%:%A_MM%:%A_YYYY%]
  7397. IniRead, daystats_deaths, %dstats%, Statistik, Deaths[%A_DD%:%A_MM%:%A_YYYY%]
  7398. dkd := daystats_kills/daystats_deaths
  7399. SendChat("/c Ich habe heute " daystats_kills " Kills und " daystats_deaths " Tode! Meine Tages K/D: " Round(dkd, 2))
  7400. }
  7401. return
  7402. :?:/cmkd::
  7403. SendInput, {Enter}
  7404. {
  7405. IniRead, monthstats_kills, %mstats%, Statistik, Kills[%A_MM%:%A_YYYY%]
  7406. IniRead, monthstats_deaths, %mstats%, Statistik, Deaths[%A_MM%:%A_YYYY%]
  7407. mkd := monthstats_kills/monthstats_deaths
  7408. SendChat("/c Ich habe diesen Monat " monthstats_kills " Kills und " monthstats_deaths " Tode! Meine Monats K/D: " Round(mkd, 2))
  7409. }
  7410. return
  7411. :?:/resms::
  7412. {
  7413. distanceSMS := 0
  7414. Loop, Read, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
  7415. {
  7416. if (RegExMatch(A_LoopReadLine, "SMS: (.+), Sender: (\S+) \((\d+)\)", preSMS_)) {
  7417. if (preSMS_2 != getUsername()) {
  7418. RegExMatch(A_LoopReadLine, "SMS: (.+), Sender: (\S+) \((\d+)\)", sms_)
  7419. }
  7420. } else if (RegExMatch(A_LoopReadLine, "SMS: (.+)\.\.\.", preSMS_1_)) {
  7421. distanceSMS := 0
  7422. RegExMatch(A_LoopReadLine, "SMS: (.+)\.\.\.", sms_)
  7423. } else if (RegExMatch(A_LoopReadLine, "\.\.\.(.*), Sender: (\S+) \((\d+)\)", preSMS_2_)) {
  7424. if (distanceSMS == 2) {
  7425. if (preSMS_2_2 != getUsername()) {
  7426. sms_2 := preSMS_2_2
  7427. sms_3 := preSMS_2_3
  7428. }
  7429. }
  7430. }
  7431. distanceSMS ++
  7432. }
  7433. if (sms_2 != "") {
  7434. SendInfo("Letzte SMS (von " . cPrimar . sms_2 . cSecond . "):")
  7435. SendInfo("Inhalt: " cPrimar . sms_1)
  7436. SendInput, /sms %sms_3%{space}
  7437. } else {
  7438. SendError("Es wurde keine SMS gefunden.")
  7439. }
  7440. }
  7441. return
  7442. :?:/read::
  7443. {
  7444. Loop, Read, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
  7445. {
  7446. if (RegExMatch(A_LoopReadLine, "\[Werbung\] (.+), (\S+) \((\d+)\)")) {
  7447. RegExMatch(A_LoopReadLine, "\[Werbung\] (.+), (\S+) \((\d+)\)", ad_)
  7448. }
  7449. }
  7450. if (ad_2 != "" || ad_2 != getUsername()) {
  7451. SendInfo("Letzte Werbung (von " . cPrimar . ad_2 . cSecond . "):")
  7452. SendInfo("Inhalt: " cPrimar . ad_1)
  7453. SendInput, /sms %ad_3%{space}
  7454. } else {
  7455. SendError("Es wurde keine Werbung gefunden.")
  7456. }
  7457. }
  7458. return
  7459. :?:/tempo::
  7460. {
  7461. tempoInput := PlayerInput("Tempo: ")
  7462. if (tempoInput == "" && !IsNumeric(tempoInput))
  7463. return
  7464. IniRead, settings_tempomat, %settings%, Tempomat, Tempomat
  7465. settings_tempomat := tempoInput
  7466. SendInfo("Du hast das Tempo auf " . cPrimar . tempo . " km/h " cSecond "gesetzt. Starte den Tempomat mit " . cPrimar . %tempomatNoMods% . cSecond . "!")
  7467. }
  7468. return
  7469. :?:/gf::
  7470. :?:/gfs::
  7471. SendInput, {Enter}
  7472. {
  7473. SendChat("/gangfights")
  7474. }
  7475. return
  7476. :?:/ac::
  7477. SendInput, {Enter}
  7478. {
  7479. SendChat("/activity")
  7480. }
  7481. return
  7482. :?:/ga::
  7483. SendInput, {Enter}
  7484. {
  7485. DisableCheckpoint()
  7486. SendChat("/gpsaus")
  7487. SendInfo("Du hast den GPS Marker " cRed "deaktiviert" cSecond "!")
  7488. }
  7489. return
  7490. :?:/fg::
  7491. SendInput, {Enter}
  7492. {
  7493. if(IsPlayerInRangeOfPoint(1429.6649,-996.9980,1639.7843, 3)) {
  7494. SendChat("/festgeld 1250000")
  7495. } else SendError("Du befindest dich nicht in der Bank!")
  7496. }
  7497. return
  7498. :?:/hdf::
  7499. :?:/ruhe::
  7500. SendInput, {Enter}
  7501. {
  7502. random, tmp, 1, 3
  7503. if (tmp == 1) {
  7504. SendChat("Sein Sie bitte still.")
  7505. } else if (tmp == 2) {
  7506. SendChat("Können Sie bitte ruhig sein?")
  7507. } else if (tmp == 3) {
  7508. SendChat("Bitte sein Sie leise..")
  7509. }
  7510. }
  7511. return
  7512. :?:/rs::
  7513. SendInput, {Enter}
  7514. {
  7515. SendChat("/rucksack")
  7516. }
  7517. return
  7518. :?:/tr::
  7519. :?:/rechner::
  7520. SendInput, {Enter}
  7521. {
  7522. rechnung := PlayerInput("Rechner: ")
  7523. SendInfo("Rechnung: " cPrimar rechnung)
  7524. SendInfo("Das Ergebnis lautet: " cPrimar Evaluate(rechnung))
  7525. }
  7526. return
  7527. :?:/cd::
  7528. :?:/countdown::
  7529. SendInput, {Enter}
  7530. {
  7531. configCountdown()
  7532. }
  7533. return
  7534. :?:/at::
  7535. SendInput, {Enter}
  7536. {
  7537. SendChat("/accept ticket")
  7538. }
  7539. return
  7540. :?:/ap::
  7541. SendInput, {Enter}
  7542. {
  7543. SendChat("/accept paket")
  7544. }
  7545. return
  7546. :?:/messer::
  7547. SendInput, {Enter}
  7548. {
  7549. SendChat("/sellgun " . getUsername() . " messer 1")
  7550. }
  7551. return
  7552. :?:/deagle::
  7553. SendInput, {Enter}
  7554. {
  7555. SendChat("/sellgun " . getUsername() . " deagle 1")
  7556. }
  7557. return
  7558. :?:/mp5::
  7559. SendInput, {Enter}
  7560. {
  7561. SendChat("/sellgun " . getUsername() . " mp5 1")
  7562. }
  7563. return
  7564. :?:/tec9::
  7565. SendInput, {Enter}
  7566. {
  7567. SendChat("/sellgun " . getUsername() . " tec9 1")
  7568. }
  7569. return
  7570. :?:/shotgun::
  7571. SendInput, {Enter}
  7572. {
  7573. SendChat("/sellgun " . getUsername() . " shotgun 1")
  7574. }
  7575. return
  7576. :?:/rifle::
  7577. SendInput, {Enter}
  7578. {
  7579. SendChat("/sellgun " . getUsername() . " rifle 1")
  7580. }
  7581. return
  7582. :?:/ak47::
  7583. SendInput, {Enter}
  7584. {
  7585. SendChat("/sellgun " . getUsername() . " ak47 1")
  7586. }
  7587. return
  7588. :?:/gates::
  7589. if(array_Gates.MaxIndex() > 0) {
  7590. showGates()
  7591. SendInfo("In der Liste kannst du ein Tor suchen und es markieren.")
  7592. SendInfo("Wenn du an der Markierung angekommen bist kannst du das Gate mit " cPrimar "/delgate" cSecond " löschen.")
  7593. } else if(array_Gates.MaxIndex() == "") {
  7594. SendInfo("Du hast noch keine Tore im Keybinder eingetragen.")
  7595. SendInfo("Das kannst du mit " cPrimar "/addgate" cSecond " an dem jeweiligen Tor machen.")
  7596. }
  7597. return
  7598. :?:/addgate::
  7599. SendInput, {Enter}
  7600. {
  7601. if(getPlayerInteriorId() == 0) {
  7602. if(!IsPlayerInAnyVehicle()) {
  7603. if(!isPlayerAtGate()) {
  7604. GetPlayerPos(p_x, p_y, p_z)
  7605. result := URLDownloadToVar(baseURL . "api/addgate.php?username=" getUsername() "&posx=" p_x "&posy=" p_y "&posz=" p_z)
  7606. result := StrReplace(result, "?", "")
  7607. if(result == "GATE_ADD_SUCCESS") {
  7608. SendInfo("Du hast erfolgreich ein Tor hinzugefügt!")
  7609. loadGates()
  7610. } else SendError("Es ist ein Fehler beim hinzufügen des Tor aufgetreten!")
  7611. } else SendError("Du stehst zu nah ein einem anderen Tor!")
  7612. } else SendError("Du darfst nicht in einem Vehicle sein!")
  7613. } else SendError("Du darfst dich nicht in einem Interior befinden!")
  7614. }
  7615. return
  7616. :?:/delgate::
  7617. SendInput, {Enter}
  7618. {
  7619. if(isPlayerAtGate()) {
  7620. Loop % array_Gates.MaxIndex() {
  7621. if(isPlayerInRangeOfPoint(array_Gates[A_Index]["posX"], array_Gates[A_Index]["posY"], array_Gates[A_Index]["posZ"], 5)) {
  7622. SendInfo("Du bist an der GateID: " array_Gates[A_Index]["id"])
  7623. result := URLDownloadToVar(baseURL . "api/delgate.php?username=" getUsername() "&gateid=" array_Gates[A_Index]["id"])
  7624. result := StrReplace(result, "?", "")
  7625. if(result == "GATE_DEL_SUCCESS") {
  7626. SendInfo("Du hast erfolgreich das Tor (ID: " cPrimar array_Gates[A_Index]["id"] cSecond ") gelöscht!")
  7627. array_Gates := []
  7628. loadGates()
  7629. } else SendError("Es ist ein Fehler beim löschen des Tor aufgetreten!")
  7630. }
  7631. }
  7632. } else {
  7633. SendError("Du befindest nicht an einem eingetragenen Tor!")
  7634. SendError("Mit " cPrimar "/gates" cSecond " kannst du dir alle Tore anzeigen und markieren lassen.")
  7635. }
  7636. }
  7637. return
  7638. isAdmin(name)
  7639. {
  7640. result := URLDownloadToVar(baseURL . "api/admin.php?username=" name)
  7641. result := StrReplace(result, "?", "")
  7642. if(result == "USER_IS_ADMIN") {
  7643. return true
  7644. } else return false
  7645. }
  7646. return
  7647. SendInfo(message)
  7648. {
  7649. AddChatMessage(prefix . message)
  7650. }
  7651. return
  7652. SendError(message)
  7653. {
  7654. AddChatMessage(prefix . cRed . "[Fehler] " . cSecond . message)
  7655. }
  7656. return
  7657. isBlocked()
  7658. {
  7659. if (isInChat() || isDialogOpen() || isPlayerInMenu() || !WinActive(gta_title) || !IsSAMPAvailable()) {
  7660. return true
  7661. }
  7662. return false
  7663. }
  7664. return
  7665. isPlayerAtDietrich() {
  7666. if (isPlayerInRangeOfPoint(2292.0696,-2028.7617,13.5469, 3) || isPlayerInRangeOfPoint(2325.7764,-2009.7836,13.5469, 3)) {
  7667. return true
  7668. } else return false
  7669. }
  7670. return
  7671. isPlayerAtTrashcan() {
  7672. Loop % array_Trashcan.MaxIndex() {
  7673. if (isPlayerInRangeOfPoint(array_Trashcan[A_Index]["posX"], array_Trashcan[A_Index]["posY"], array_Trashcan[A_Index]["posZ"], 3)) {
  7674. return true
  7675. }
  7676. }
  7677. return false
  7678. }
  7679. return
  7680. isPlayerAtZoll() {
  7681. Loop % array_Zoll.MaxIndex() {
  7682. if (isPlayerInRangeOfPoint(array_Zoll[A_Index][1], array_Zoll[A_Index][2], array_Zoll[A_Index][3], 10)) {
  7683. return true
  7684. }
  7685. }
  7686. return false
  7687. }
  7688. return
  7689. isPlayerAtTower() {
  7690. Loop % array_Towers.MaxIndex() {
  7691. if (isPlayerInRangeOfPoint(array_Towers[A_Index][1], array_Towers[A_Index][2], array_Towers[A_Index][3], 5)) {
  7692. return true
  7693. }
  7694. }
  7695. return false
  7696. }
  7697. return
  7698. isPlayerAtGas() {
  7699. Loop % array_Gas.MaxIndex() {
  7700. if (isPlayerInRangeOfPoint(array_Gas[A_Index][1], array_Gas[A_Index][2], array_Gas[A_Index][3], 5)) {
  7701. return true
  7702. }
  7703. }
  7704. return false
  7705. }
  7706. return
  7707. isPlayerAtGate() {
  7708. Loop % array_Gates.MaxIndex() {
  7709. if (isPlayerInRangeOfPoint(array_Gates[A_Index]["posX"], array_Gates[A_Index]["posY"], array_Gates[A_Index]["posZ"], 5)) {
  7710. return true
  7711. }
  7712. }
  7713. return false
  7714. }
  7715. return
  7716. isPlayerAtFishPoint() {
  7717. Loop % array_Fish.MaxIndex() {
  7718. if (isPlayerInRangeOfPoint(array_Fish[A_Index][1], array_Fish[A_Index][2], array_Fish[A_Index][3], 2)) {
  7719. return true
  7720. }
  7721. }
  7722. return false
  7723. }
  7724. return
  7725. isPlayerAtCookPoint() {
  7726. Loop % array_Cook.MaxIndex() {
  7727. if (isPlayerInRangeOfPoint(array_Cook[A_Index][1], array_Cook[A_Index][2], array_Cook[A_Index][3], 3)) {
  7728. return true
  7729. }
  7730. }
  7731. return false
  7732. }
  7733. return
  7734. isPlayerAtSprayTag() {
  7735. Loop % array_Sprays.MaxIndex() {
  7736. if (isPlayerInRangeOfPoint(array_Sprays[A_Index]["posX"], array_Sprays[A_Index]["posY"], array_Sprays[A_Index]["posZ"], 2)) {
  7737. return true
  7738. }
  7739. }
  7740. return false
  7741. }
  7742. return
  7743. isPlayerAtKette() {
  7744. Loop % array_Ketten.MaxIndex() {
  7745. if (isPlayerInRangeOfPoint(array_Ketten[A_Index][1], array_Ketten[A_Index][2], array_Ketten[A_Index][3], 3)) {
  7746. return true
  7747. }
  7748. }
  7749. return false
  7750. }
  7751. return
  7752. ReuseAuslegen(currentReuse) {
  7753. if(currentReuse == 1) {
  7754. SendChat("/fishing")
  7755. sleep 150
  7756. SendInput, {Enter}
  7757. } else if(currentReuse == 2) {
  7758. SendChat("/fishing")
  7759. sleep 150
  7760. SendInput, {Down}{Enter}
  7761. } else if(currentReuse == 3) {
  7762. SendChat("/fishing")
  7763. sleep 150
  7764. SendInput, {Down}{Down}{Enter}
  7765. } else if(currentReuse == 4) {
  7766. SendChat("/fishing")
  7767. sleep 150
  7768. SendInput, {Down}{Down}{Down}{Enter}
  7769. } else if(currentReuse == 5) {
  7770. SendChat("/fishing")
  7771. sleep 150
  7772. SendInput, {Down}{Down}{Down}{Down}{Enter}
  7773. }
  7774. }
  7775. return
  7776. CountReuse() {
  7777. Loop,
  7778. {
  7779. resenFishMoneyOne := 0
  7780. chat := readChatLine(A_Index-1)
  7781. sleep 100
  7782. if(RegExMatch(chat, "Hering\: (\d+) Stück", hering_)) {
  7783. reusenFishCount := reusenFishCount + hering_1
  7784. resenFishMoneyOne := hering_1*6
  7785. reusenFishMoney := reusenFishMoney + resenFishMoneyOne
  7786. } else if(RegExMatch(chat, "Makrele\: (\d+) Stück", makrele_)) {
  7787. reusenFishCount := reusenFishCount + makrele_1
  7788. resenFishMoneyOne := makrele_1*7
  7789. reusenFishMoney := reusenFishMoney + resenFishMoneyOne
  7790. } else if(RegExMatch(chat, "Lachs\: (\d+) Stück", lachs_)) {
  7791. reusenFishCount := reusenFishCount + lachs_1
  7792. resenFishMoneyOne := lachs_1*8
  7793. reusenFishMoney := reusenFishMoney + resenFishMoneyOne
  7794. } else if(RegExMatch(chat, "Forelle\: (\d+) Stück", forelle_)) {
  7795. reusenFishCount := reusenFishCount + forelle_1
  7796. resenFishMoneyOne := forelle_1*9
  7797. reusenFishMoney := reusenFishMoney + resenFishMoneyOne
  7798. } else if(RegExMatch(chat, "Rotbarsch\: (\d+) Stück", rotbarsch_)) {
  7799. reusenFishCount := reusenFishCount + rotbarsch_1
  7800. resenFishMoneyOne := rotbarsch_1*10
  7801. reusenFishMoney := reusenFishMoney + resenFishMoneyOne
  7802. } else if(RegExMatch(chat, "Karpfen\: (\d+) Stück", karpfen_)) {
  7803. reusenFishCount := reusenFishCount + karpfen_1
  7804. resenFishMoneyOne := karpfen_1*18
  7805. reusenFishMoney := reusenFishMoney + resenFishMoneyOne
  7806. } else if(RegExMatch(chat, "Seeteufel\: (\d+) Stück", seeteufel_)) {
  7807. reusenFishCount := reusenFishCount + seeteufel_1
  7808. resenFishMoneyOne := seeteufel_1*30
  7809. reusenFishMoney := reusenFishMoney + resenFishMoneyOne
  7810. } else if(RegExMatch(chat, "Schildkröten\: (\d+) Stück", schildkroete_)) {
  7811. reusenFishCount := reusenFishCount + schildkroete_1
  7812. resenFishMoneyOne := schildkroete_1*48
  7813. reusenFishMoney := reusenFishMoney + resenFishMoneyOne
  7814. } else if(RegExMatch(chat, "Riesen Kalmar\: (\d+) Stück", riesenkalmar_)) {
  7815. reusenFishCount := reusenFishCount + riesenkalmar_1
  7816. resenFishMoneyOne := riesenkalmar_1*60
  7817. reusenFishMoney := reusenFishMoney + resenFishMoneyOne
  7818. } else if(InStr(chat, "Gefangene Fische:")) {
  7819. reusenFishMoney := reusenFishMoney/2
  7820. SendInfo("Du hast " cPrimar reusenFishCount cSecond " Fische aus der Reuse gezogen, mit einem Wert von " cPrimar FormatNumber(Round(reusenFishMoney)) "$" cSecond "!")
  7821. if(bonusgehalt != 0) {
  7822. pdmoney := (bonusgehalt/100) * reusenFishMoney
  7823. SendInfo("Mit Bonusgehalt erhältst du zusätzlich " cPrimar FormatNumber(Round(pdmoney)) "$" cSecond " (Gesamt: " cPrimar FormatNumber(Round(reusenFishMoney+pdmoney)) "$" cSecond ")!")
  7824. }
  7825. reusenFishCount := 0
  7826. reusenFishMoney := 0
  7827. break
  7828. }
  7829. }
  7830. }
  7831. return
  7832. openMaut() {
  7833. SendChat("/zoll")
  7834. Sleep, 200
  7835. Loop, 5 {
  7836. chat := readChatLine(A_Index - 1)
  7837. if (inStr(chat, "Es ist keine Zollstation in deiner Nähe.")) {
  7838. Sleep, 400
  7839. SendChat("/zoll")
  7840. break
  7841. }
  7842. }
  7843. }
  7844. return
  7845. syncPlayer()
  7846. {
  7847. forceStats()
  7848. sleep 100
  7849. checkCooked()
  7850. sleep 100
  7851. autosyncCounter := 0
  7852. SendInfo("Das automatische Synchronisieren ist " cGreen "abgeschlossen" cSecond "!")
  7853. }
  7854. return
  7855. forceStats()
  7856. {
  7857. SendChat("/stats")
  7858. sleep, 100
  7859. if (RegExMatch(GetDialogText(), "(.*)Drogen: (\d+)g(.*)", drugs_)) {
  7860. IniWrite, %drugs_2%, ini\items.ini, Items, Drogen
  7861. }
  7862. if (RegExMatch(getDialogText(), "(.*)Morde: (.*) (.*)", kills_)) {
  7863. kills_2 := StrReplace(kills_2, ".", "")
  7864. IniWrite, %kills_2%, ini\stats\stats.ini, Statistik, Kills
  7865. } else {
  7866. return -1
  7867. }
  7868. if (RegExMatch(getDialogText(), "(.*)Gestorben: (.*) (.*)", deaths_)) {
  7869. deaths_2 := StrReplace(deaths_2, ".", "")
  7870. IniWrite, %deaths_2%, ini\stats\stats.ini, Statistik, Deaths
  7871. } else {
  7872. return -1
  7873. }
  7874. SendInput, {Enter}
  7875. sleep, 100
  7876. SendChat("/inventory")
  7877. sleep, 100
  7878. if (inStr(getDialogText(), "Erste-Hilfe-Paket")) {
  7879. IniWrite, 1, ini\items.ini, Items, ErsteHilfe
  7880. } else {
  7881. IniWrite, 0, ini\items.ini, Items, ErsteHilfe
  7882. }
  7883. if (inStr(getDialogText(), "Benzin Kanister")) {
  7884. IniWrite, 1, ini\items.ini, Items, Kanister
  7885. } else {
  7886. IniWrite, 0, ini\items.ini, Items, Kanister
  7887. }
  7888. if (inStr(getDialogText(), "Lagerfeuer")) {
  7889. if (RegExMatch(getDialogText(), "(.*)Lagerfeuer(\s+)(\d+)(.*)", campfire_)) {
  7890. iniWrite, %campfire_3%, ini\items.ini, Items, Lagerfeuer
  7891. }
  7892. } else {
  7893. iniWrite, 0, ini\items.ini, Items, Lagerfeuer
  7894. }
  7895. SendInput, {Enter}
  7896. }
  7897. return
  7898. loadSprays()
  7899. {
  7900. sprayRes := URLDownloadToVar(baseURL . "api/sprays.php")
  7901. sprayRes := StrReplace(sprayRes, "?", "")
  7902. sprayResult := JSON.load(sprayRes)
  7903. for newIndex, newEntry in sprayResult{
  7904. contains := false
  7905. for index, entry in array_Sprays {
  7906. if (entry["id"] == newEntry["id"]) {
  7907. contains := true
  7908. }
  7909. }
  7910. if (!contains) {
  7911. array_Sprays.Push(newEntry)
  7912. }
  7913. }
  7914. }
  7915. return
  7916. loadTrashcans()
  7917. {
  7918. trashRes := URLDownloadToVar(baseURL . "api/trashs.php")
  7919. trashRes := StrReplace(trashRes, "?", "")
  7920. trashResult := JSON.load(trashRes)
  7921. for newIndex, newEntry in trashResult{
  7922. contains := false
  7923. for index, entry in array_Trashcan {
  7924. if (entry["id"] == newEntry["id"]) {
  7925. contains := true
  7926. }
  7927. }
  7928. if (!contains) {
  7929. array_Trashcan.Push(newEntry)
  7930. }
  7931. }
  7932. }
  7933. return
  7934. loadGates()
  7935. {
  7936. gateRes := URLDownloadToVar(baseURL . "api/gates.php?username=" getUsername())
  7937. gateRes := StrReplace(gateRes, "?", "")
  7938. IfNotInString, gateRes, NO_USER
  7939. {
  7940. IfNotInString, gateRes, ERROR_LOADING_GATES
  7941. {
  7942. gateResult := JSON.load(gateRes)
  7943. for newIndex, newEntry in gateResult{
  7944. contains := false
  7945. for index, entry in array_Gates {
  7946. if (entry["id"] == newEntry["id"]) {
  7947. contains := true
  7948. }
  7949. }
  7950. if (!contains) {
  7951. array_Gates.Push(newEntry)
  7952. }
  7953. }
  7954. }
  7955. }
  7956. }
  7957. return
  7958. getFishValue(fishName, fishWeight) {
  7959. if (fishName == "Bernfisch" || fishName == "Blauer Fächerfisch") {
  7960. value := fishWeight * 1
  7961. } else if (fishName == "Roter Schnapper" || fishName == "Schwertfisch" || fishName == "Zackenbarsch") {
  7962. value := fishWeight * 2
  7963. } else if (fishName == "Katzenfisch" || fishName == "Forelle" || fishName == "Strandkrabbe") {
  7964. value := fishWeight * 3
  7965. } else if (fishName == "Delphin" || fishName == "Hai" || fishName == "Segelfisch") {
  7966. value := fishWeight * 4
  7967. } else if (fishName == "Makrele" || fishName == "Kabeljau") {
  7968. value := fishWeight * 5
  7969. } else if (fishName == "Aal" || fishName == "Hecht" || fishName == "Scholle") {
  7970. value := fishWeight * 6
  7971. } else if (fishName == "Steinbutt") {
  7972. value := fishWeight * 7
  7973. } else if (fishName == "Schildkröte" || fishName == "Thunfisch" || fishName == "Wolfbarsch" || fishName == "Flunder") {
  7974. value := fishWeight * 8
  7975. } else {
  7976. value := 0
  7977. }
  7978. return value
  7979. }
  7980. return
  7981. startFish() {
  7982. if (isPlayerAtFishPoint()) {
  7983. IniRead, settings_fishmode, ini\settings.ini, Fischen, FishMode
  7984. fishNumber := 0
  7985. aFishMoney := 0
  7986. aFishHP := 0
  7987. cheapestFish := -1
  7988. cheapestFishName := ""
  7989. cheapestFishValue := 100000
  7990. cheapestFishMoney := 100000
  7991. cheapestFishHP := 100000
  7992. thrownAway := false
  7993. attempt := 1
  7994. Loop {
  7995. SendChat("/fish")
  7996. Sleep, 100
  7997. fishing := readChatLine(0)
  7998. if (RegExMatch(fishing, "Du hast ein\/e (.+) mit (\d+) LBS gefangen.", fishing_)) {
  7999. fishNumber ++
  8000. currentFishMoney := getFishValue(fishing_1, fishing_2)
  8001. currentFishHealth := Floor(fishing_2 * 0.3)
  8002. if (settings_fishmode) {
  8003. fishValue := currentFishMoney
  8004. } else {
  8005. fishValue := fishing_2
  8006. }
  8007. SendInfo(cPrimar . fishNumber . cSecond . ": " . fishing_1 . " | LBS: " . cPrimar . fishing_2 . cSecond . " | Preis: $" . cPrimar . formatNumber(currentFishMoney) . cSecond . " | HP: " . cPrimar . currentFishHealth)
  8008. aFishMoney += numberFormat(currentFishMoney)
  8009. aFishHP += fishing_2
  8010. if (cheapestFishValue > fishValue) {
  8011. cheapestFish := fishNumber
  8012. cheapestFishName := fishing_1
  8013. cheapestFishValue := fishValue
  8014. cheapestFishMoney := currentFishMoney
  8015. cheapestFishHP := fishing_2
  8016. }
  8017. } else if (RegExMatch(fishing, "Du kannst nur 5 Fische bei dir tragen.")) {
  8018. if (cheapestFish == -1) {
  8019. SendInfo("Du musst deine Fische erst verkaufen/kochen!")
  8020. break
  8021. }
  8022. if (thrownAway == true) {
  8023. break
  8024. }
  8025. aFishMoney -= cheapestFishMoney
  8026. aFishHP -= cheapestFishHP
  8027. SendChat("/releasefish " . cheapestFish)
  8028. sleep, 100
  8029. if (settings_fishmode)  {
  8030. SendInfo("Du hast den Fisch " cPrimar . cheapestFish . cSecond . ": " . cheapestFishName . " im Wert von " . cPrimar . formatNumber(cheapestFishValue) . "$" . cSecond . " weggeworfen")
  8031. } else {
  8032. SendInfo("Du hast den Fisch " cPrimar . cheapestFish . cSecond . ": " . cheapestFishName . " mit " . cPrimar . formatNumber(cheapestFishValue) . " LBS" . cSecond . " weggeworfen")
  8033. }
  8034. thrownAway := true
  8035. } else if (RegExMatch(fishing, "Du bist an keinem Angelplatz \(Big Wheel Rods\).")) {
  8036. if (attempt == 3) {
  8037. SendInfo("Du kannst hier nicht angeln!")
  8038. break
  8039. }
  8040. attempt ++
  8041. } else if (RegExMatch(fishing, "Du kannst erst in (\d+) (\S+) wieder angeln\.", ftime_)) {
  8042. if (aFishMoney + aFishHP > 0) {
  8043. Sleep, 100
  8044. checkFish()
  8045. break
  8046. } else {
  8047. SendInfo("Du kannst noch nicht angeln.")
  8048. break
  8049. }
  8050. }
  8051. }
  8052. }
  8053. }
  8054. return
  8055. sellFish() {
  8056. sellFishMoney := 0
  8057. Loop, 5 {
  8058. SendChat("/sell fish " . A_Index)
  8059. Sleep, 250
  8060. chat := readChatLine(0)
  8061. if (RegExMatch(chat, "Du hast deinen (.+) \((\d+) LBS\) für (\d+)\$ verkauft.", chat_)) {
  8062. sellFishMoney += numberFormat(chat_3)
  8063. }
  8064. }
  8065. IniRead, stats_fishgeld, ini\stats\stats.ini, Statistik, FishGeld
  8066. sellFishMoney := StrReplace(sellFishMoney, ".", "")
  8067. stats_fishgeld := stats_fishgeld + sellFishMoney
  8068. IniWrite, % stats_fishgeld, ini\stats\stats.ini, Statistik, FishGeld
  8069. SendInfo("Du hast für deine Fische " . cPrimar . formatNumber(sellFishMoney) . "$" cSecond " erhalten.")
  8070. SendInfo("Gesamt hast du " . cPrimar . formatNumber(stats_fishgeld) . "$" cSecond " durch Fische verdient.")
  8071. }
  8072. return
  8073. checkCooked() {
  8074. fishHP := 0
  8075. allHP := 0
  8076. SendChat("/cooked")
  8077. Sleep, 200
  8078. Loop, 15 {
  8079. GetChatLine(A_Index, cooked)
  8080. if (RegExMatch(cooked, "\*\* \((\d+)\) Hergestellt: (.+) \((\d+) LBS\)", fish_)) {
  8081. fishHP := floor(fish_3 / 3)
  8082. allHP += fishHP
  8083. fishName_%fish_1% := fish_2
  8084. fishLBS_%fish_1% := fish_3
  8085. fishHP_%fish_1% := fishHP
  8086. message%fish_1% := "(" . fish_1 . ") " . cPrimar . fishName_%fish_1% . cSecond . ": " . cPrimar . fishLBS_%fish_1% . cSecond . " LBS | " . cPrimar . fishHP_%fish_1% . cSecond . " HP"
  8087. }
  8088. }
  8089. fishes := 5
  8090. Loop, 5 {
  8091. setChatLine(fishes, message%A_Index%)
  8092. fishes -= 1
  8093. }
  8094. SendInfo("Gesamt HP: " . cPrimar . formatNumber(allHP) . cSecond . " HP.")
  8095. return allHP
  8096. }
  8097. return
  8098. checkFish() {
  8099. fishHP := 0
  8100. fishMoney := 0
  8101. allFishHP := 0
  8102. allFishMoney := 0
  8103. SendChat("/fishes")
  8104. Sleep, 200
  8105. Loop, 15 {
  8106. if (RegExMatch(readChatLine(A_Index), "^\*\* \((\d+)\) Fisch: (.+) \((\d+) LBS\)$", fish_)) {
  8107. fishMoney := getFishValue(fish_2, fish_3)
  8108. fishHP := Floor(fish_3 * 0.3)
  8109. allFishHP += fishHP
  8110. allFishMoney += fishMoney
  8111. fishName%fish_1% := fish_2
  8112. fishLBS%fish_1% := fish_3
  8113. fishHP%fish_1% := fishHP
  8114. fishPrice%fish_1% := fishMoney
  8115. message%fish_1% := prefix . "(" . fish_1 . ") " . cPrimar . fishName%fish_1% . cSecond . ": " . cPrimar . fishHP%fish_1% . cSecond . " HP | $" . cPrimar . fishPrice%fish_1% . cSecond . " | " . cPrimar . fishLBS%fish_1% . cSecond . " LBS"
  8116. }
  8117. }
  8118. fishes := 5
  8119. Loop, 5 {
  8120. setChatLine(fishes, message%A_Index%)
  8121. fishes -= 1
  8122. }
  8123. SendInfo("Gesamt HP: " . cPrimar . formatNumber(allFishHP) . cSecond . " HP | Gesamt Wert: $" . cPrimar . formatNumber(allFishMoney))
  8124. return allHP
  8125. }
  8126. return
  8127. cookFish() {
  8128. if (getPlayerInteriorId() == 0) {
  8129. IniRead, items_lagerfeuer, ini\items.ini, Items, Lagerfeuer
  8130. if (items_lagerfeuer) {
  8131. if (RegExMatch(chat, "^* (\S+) hat ein Lagerfeuer plaziert und es angezündet..", chat_)) {
  8132. return
  8133. } else
  8134. SendChat("/campfire")
  8135. IniWrite, 0, ini\items.ini, Items, Lagerfeuer
  8136. Sleep, 200
  8137. }
  8138. Loop, 5 {
  8139. SendChat("/cook fish " . A_Index)
  8140. }
  8141. } else {
  8142. if (isPlayerAtCookPoint()) {
  8143. Loop, 5 {
  8144. SendChat("/cook fish " . A_Index)
  8145. }
  8146. } else {
  8147. SendError("Du kannst hier nicht kochen.")
  8148. }
  8149. }
  8150. Sleep, 200
  8151. checkCooked()
  8152. }
  8153. return
  8154. numberFormat(input_var) {
  8155. StringReplace, output, input_var,.,,All
  8156. return output
  8157. }
  8158. return
  8159. configCountdown() {
  8160. cdChat := PlayerInput("Countdown Chat (nix/f/c/..): ")
  8161. countdownChat := cdChat
  8162. cdTime := PlayerInput("Countdown Zeit in Sekunden: ")
  8163. if(IsNumeric(cdTime)) {
  8164. IniRead, stopHotkey, ini\hotkeys.ini, Hotkeys, stopAutomaticSystem
  8165. stopHotkey := StrReplace(stopHotkey, "~", "")
  8166. countdownTime := cdTime
  8167. SendInfo("Du hast den Countdown mit " countdownTime " gestartet!")
  8168. SendInfo("Du kannst den Countdown mit '" cPrimar stopHotkey cSecond "' stoppen!")
  8169. countdownActive := true
  8170. } else SendError("Die Zeit muss in Sekunden angegeben werden!")
  8171. }
  8172. return
  8173. useDrugs() {
  8174. SendChat("/usedrugs")
  8175. IniRead, items_drogen, ini\items.ini, Items, Drogen
  8176. items_drogen := items_drogen-2
  8177. IniWrite, % items_drogen, ini\items.ini, Items, Drogen
  8178. drug_timer := 30
  8179. sleep 100
  8180. SendInfo("Du hast Drogen konsumiert. Noch " cPrimar items_drogen " Gramm" cSecond " übrig!")
  8181. }
  8182. return
  8183. usePak() {
  8184. SendChat("/erstehilfe")
  8185. items_erstehilfe := 0
  8186. IniWrite, 0, ini\items.ini, Items, ErsteHilfe
  8187. pak_timer := 10*60
  8188. sleep 100
  8189. SendInfo("Du hast ein Erste-Hilfe-Paket bentzt. Kaufe dir wieder eins!")
  8190. }
  8191. return
  8192. useFish() {
  8193. Loop, 5 {
  8194. fishLBS := fishLBS_%A_Index%
  8195. lostHP := getPlayerHealth()
  8196. lostHP += fishHP_%A_Index%
  8197. if (fishHP_%A_Index% > 0 && fishLBS_%A_Index% && fishName_%A_Index% != "nichts") {
  8198. SendChat("/eat " . A_Index)
  8199. fishName_%A_Index% := "nichts"
  8200. fishLBS_%A_Index% := 0
  8201. fishHP_%A_Index% := 0
  8202. return
  8203. }
  8204. }
  8205. }
  8206. return
  8207. ownHotkey(id) {
  8208. global
  8209. if (isBlocked())
  8210. return
  8211. if (!ownHotkey%id%Active)
  8212. return
  8213. if (ownHotkey%id%Text == "")
  8214. return
  8215. chatActionsArray := StrSplit(ownHotkey%id%Text, "`n")
  8216. Loop % chatActionsArray.MaxIndex()
  8217. {
  8218. sendLine(chatActionsArray[A_Index])
  8219. }
  8220. }
  8221. sendLine(line, local := false) {
  8222. IniRead, stats_kills, ini\stats\stats.ini, Statistik, Kills
  8223. IniRead, stats_deaths, ini\stats\stats.ini, Statistik, Deaths
  8224. IniRead, daystats_kills,  ini\stats\daystats.ini, Statistik, Kills[%A_DD%:%A_MM%:%A_YYYY%]
  8225. IniRead, daystats_deaths, ini\stats\daystats.ini, Statistik, Deaths[%A_DD%:%A_MM%:%A_YYYY%]
  8226. IniRead, monthstats_kills, ini\stats\monthstats.ini, Statistik, Kills[%A_MM%:%A_YYYY%]
  8227. IniRead, monthstats_deaths, ini\stats\monthstats.ini, Statistik, Deaths[%A_MM%:%A_YYYY%]
  8228. allKD := Round(stats_kills / stats_deaths, 2)
  8229. dKD := Round(daystats_kills / daystats_deaths, 2)
  8230. mKD := Round(monthstats_kills / monthstats_deaths, 2)
  8231. line := StrReplace(line, "[name]", getUsername())
  8232. line := StrReplace(line, "[id]", getId())
  8233. line := StrReplace(line, "[ping]", getPlayerPingById(getId()))
  8234. line := StrReplace(line, "[fps]", getFPS())
  8235. line := StrReplace(line, "[zone]", getPlayerZone())
  8236. line := StrReplace(line, "[city]", getPlayerCity())
  8237. line := StrReplace(line, "[location]", getLocation())
  8238. line := StrReplace(line, "[hp]", getPlayerHealth())
  8239. line := StrReplace(line, "[armour]", getPlayerArmor())
  8240. line := StrReplace(line, "[money]", FormatNumber(getPlayerMoney()))
  8241. line := StrReplace(line, "[skin]", getPlayerSkinId())
  8242. line := StrReplace(line, "[weaponid]", getPlayerWeaponId())
  8243. line := StrReplace(line, "[weapon]", getPlayerWeaponName())
  8244. line := StrReplace(line, "[freezed]", (IsPlayerFreezed() ? "ja" : "nein"))
  8245. line := StrReplace(line, "[vhealth]", getVehicleHealth())
  8246. line := StrReplace(line, "[vmodelid]", getVehicleModelId())
  8247. line := StrReplace(line, "[vmodel]", getVehicleModelName())
  8248. line := StrReplace(line, "[vspeed]", round(getVehicleSpeed()))
  8249. line := StrReplace(line, "[kills]", FormatNumber(stats_kills))
  8250. line := StrReplace(line, "[deaths]", FormatNumber(stats_deaths))
  8251. line := StrReplace(line, "[daykills]", FormatNumber(daystats_kills))
  8252. line := StrReplace(line, "[daydeaths]", FormatNumber(daystats_deaths))
  8253. line := StrReplace(line, "[monthkills]", FormatNumber(monthstats_kills))
  8254. line := StrReplace(line, "[monthdeaths]", FormatNumber(monthstats_deaths))
  8255. line := StrReplace(line, "[tode]", FormatNumber(stats_deaths))
  8256. line := StrReplace(line, "[kd]", allKD)
  8257. line := StrReplace(line, "[mkd]", mKD)
  8258. line := StrReplace(line, "[dkd]", dKD)
  8259. if (RegExMatch(line, "(.*)\[sleep (\d+)\](.*)", line_)) {
  8260. if (line_1 != "")
  8261. sendLine(line_1, local)
  8262. Sleep, %line_2%
  8263. if (line_3 != "")
  8264. sendLine(line_3, local)
  8265. } if (RegExMatch(line, "(.*)\[nexttrash\](.*)", line_)) {
  8266. if (line_1 != "")
  8267. sendLine(line_1, local)
  8268. showNextTrashcan()
  8269. if (line_3 != "")
  8270. sendLine(line_3, local)
  8271. } else if (RegExMatch(line, "(.*)\[local\](.*)", line_)) {
  8272. if (line_1 != "")
  8273. sendLine(line_1, local)
  8274. if (line_2 != "")
  8275. sendLine(line_2, true)
  8276. } else if (RegExMatch(line, "(.*)\[usepak\](.*)", line_)) {
  8277. if (line_1 != "")
  8278. sendLine(line_1, local)
  8279. GoSub, usePakLabel
  8280. if (line_2 != "")
  8281. sendLine(line_2, local)
  8282. } else if (RegExMatch(line, "(.*)\[eatfish\](.*)", line_)) {
  8283. if (line_1 != "")
  8284. sendLine(line_1, local)
  8285. GoSub, useFishLabel
  8286. if (line_2 != "")
  8287. sendLine(line_2, local)
  8288. } else if (RegExMatch(line, "(.*)\[usedrugs\](.*)", line_)) {
  8289. if (line_1 != "")
  8290. sendLine(line_1, local)
  8291. GoSub, useDrugsLabel
  8292. if (line_2 != "")
  8293. sendLine(line_2, local)
  8294. } else if (RegExMatch(line, "(.*)\[motor\](.*)", line_)) {
  8295. if (line_1 != "")
  8296. sendLine(line_1, local)
  8297. GoSub, motorSystemLabel
  8298. if (line_2 != "")
  8299. sendLine(line_2, local)
  8300. } else {
  8301. if (local) {
  8302. SendInfo(line)
  8303. } else {
  8304. SendChat(line)
  8305. }
  8306. }
  8307. }
  8308. showGates()
  8309. {
  8310. loadGates()
  8311. sleep 200
  8312. dialog := ""
  8313. coords := getCoordinates()
  8314. igates := array_Gates.MaxIndex()
  8315. jgates := 0
  8316. while (igates > 1) {
  8317. igates --
  8318. jgates := 0
  8319. while (jgates < igates) {
  8320. jgates := jgates + 1
  8321. coordsGate1 := [ array_Gates[jgates]["posX"],array_Gates[jgates]["posY"], array_Gates[jgates]["posZ"] ]
  8322. coordsGate2 := [ array_Gates[jgates+1]["posX"],array_Gates[jgates+1]["posY"], array_Gates[jgates+1]["posZ"] ]
  8323. if (Floor(getDistanceBetweenTwoPoints(coords, coordsGate1)) > Floor(getDistanceBetweenTwoPoints(coords, coordsGate2))) {
  8324. temp := array_Gates[jgates]
  8325. array_Gates[jgates] := array_Gates[jgates + 1]
  8326. array_Gates[jgates + 1] := temp
  8327. }
  8328. }
  8329. }
  8330. Loop % array_Gates.MaxIndex() {
  8331. coordsGate := [array_Gates[A_Index]["posX"],array_Gates[A_Index]["posY"], array_Gates[A_Index]["posZ"]]
  8332. zone := calculateZone(array_Gates[A_Index]["posX"], array_Gates[A_Index]["posY"], array_Gates[A_Index]["posZ"])
  8333. dialog .= array_Gates[A_Index]["id"] . "`t" . zone . "`t" . Floor(getDistanceBetweenTwoPoints(coords, coordsGate)) . " Meter`n"
  8334. }
  8335. ShowDialog(5, "Übersicht deiner Tore", "ID`tOrt`tEntfernung`n" dialog, "Markieren", "Abbrechen")
  8336. }
  8337. return
  8338. showTrashcans()
  8339. {
  8340. loadTrashcans()
  8341. sleep 200
  8342. dialog := ""
  8343. coords := getCoordinates()
  8344. itrash := array_Trashcan.MaxIndex()
  8345. jtrash := 0
  8346. while (itrash > 1) {
  8347. itrash --
  8348. jtrash := 0
  8349. while (jtrash < itrash) {
  8350. jtrash := jtrash + 1
  8351. coordsTrash1 := [ array_Trashcan[jtrash]["posX"],array_Trashcan[jtrash]["posY"], array_Trashcan[jtrash]["posZ"] ]
  8352. coordsTrash2 := [ array_Trashcan[jtrash+1]["posX"],array_Trashcan[jtrash+1]["posY"], array_Trashcan[jtrash+1]["posZ"] ]
  8353. if (Floor(getDistanceBetweenTwoPoints(coords, coordsTrash1)) > Floor(getDistanceBetweenTwoPoints(coords, coordsTrash2))) {
  8354. temp := array_Trashcan[jtrash]
  8355. array_Trashcan[jtrash] := array_Trashcan[jtrash + 1]
  8356. array_Trashcan[jtrash + 1] := temp
  8357. }
  8358. }
  8359. }
  8360. Loop % array_Trashcan.MaxIndex() {
  8361. coordsTrash := [array_Trashcan[A_Index]["posX"],array_Trashcan[A_Index]["posY"], array_Trashcan[A_Index]["posZ"]]
  8362. zone := calculateZone(array_Trashcan[A_Index]["posX"], array_Trashcan[A_Index]["posY"], array_Trashcan[A_Index]["posZ"])
  8363. blockedTime := array_Trashcan[A_Index]["blockedTime"]
  8364. currentTime := getUnixTimestamp(A_NowUTC)
  8365. timediff := currentTime - blockedTime
  8366. if (timediff >= 1800) {
  8367. dialog .= array_Trashcan[A_Index]["id"] . "`t" . zone . "`t{00FF00}Frei`t" . Floor(getDistanceBetweenTwoPoints(coords, coordsTrash)) . "m`n"
  8368. } else {
  8369. min := Floor(timediff / 60)
  8370. sec := mod(timediff, 60)
  8371. if (min == 0) {
  8372. dialog .= array_Trashcan[A_Index]["id"] . "`t" . zone . "`t{00FF00}Frei`t" . Floor(getDistanceBetweenTwoPoints(coords, coordsTrash)) . "m`n"
  8373. } else {
  8374. dialog .= array_Trashcan[A_Index]["id"] . "`t" . zone . "`t{CC0000}" . min . " Minuten, " . sec . " Sekunden`t" . Floor(getDistanceBetweenTwoPoints(coords, coordsTrash)) . "m`n"
  8375. }
  8376. }
  8377. }
  8378. ShowDialog(5, "Übersicht der Mülltonnen", "ID`tOrt`tStatus`tEntfernung`n" dialog, "Markieren", "Abbrechen")
  8379. }
  8380. return
  8381. showNextTrashcan()
  8382. {
  8383. loadTrashcans()
  8384. sleep 100
  8385. dialog := ""
  8386. coords := getCoordinates()
  8387. itrash := array_Trashcan.MaxIndex()
  8388. jtrash := 0
  8389. while (itrash > 1) {
  8390. itrash --
  8391. jtrash := 0
  8392. while (jtrash < itrash) {
  8393. jtrash := jtrash + 1
  8394. coordsTrash1 := [ array_Trashcan[jtrash]["posX"],array_Trashcan[jtrash]["posY"], array_Trashcan[jtrash]["posZ"] ]
  8395. coordsTrash2 := [ array_Trashcan[jtrash+1]["posX"],array_Trashcan[jtrash+1]["posY"], array_Trashcan[jtrash+1]["posZ"] ]
  8396. if (Floor(getDistanceBetweenTwoPoints(coords, coordsTrash1)) > Floor(getDistanceBetweenTwoPoints(coords, coordsTrash2))) {
  8397. temp := array_Trashcan[jtrash]
  8398. array_Trashcan[jtrash] := array_Trashcan[jtrash + 1]
  8399. array_Trashcan[jtrash + 1] := temp
  8400. }
  8401. }
  8402. }
  8403. Loop % array_Trashcan.MaxIndex() {
  8404. blockedTime := array_Trashcan[A_Index]["blockedTime"]
  8405. currentTime := getUnixTimestamp(A_NowUTC)
  8406. timediff := currentTime - blockedTime
  8407. if (timediff < 1800) {
  8408. continue
  8409. } else {
  8410. coordsTrash := [array_Trashcan[A_Index]["posX"],array_Trashcan[A_Index]["posY"], array_Trashcan[A_Index]["posZ"]]
  8411. zone := calculateZone(array_Trashcan[A_Index]["posX"], array_Trashcan[A_Index]["posY"], array_Trashcan[A_Index]["posZ"])
  8412. SetCheckPoint(array_Trashcan[A_Index]["posX"], array_Trashcan[A_Index]["posY"], array_Trashcan[A_Index]["posZ"], 3)
  8413. zone := calculateZone(array_Trashcan[A_Index]["posX"], array_Trashcan[A_Index]["posY"], array_Trashcan[A_Index]["posZ"])
  8414. city := calculateCity(array_Trashcan[A_Index]["posX"], array_Trashcan[A_Index]["posY"], array_Trashcan[A_Index]["posZ"])
  8415. zc := zone . ", " . city
  8416. SendInfo("Mülltonne " cPrimar array_Trashcan[A_Index]["id"] cSecond " in " cPrimar zc cSecond " wurde markiert.")
  8417. break
  8418. }
  8419. }
  8420. }
  8421. return
  8422. onDialogResponse()
  8423. {
  8424. if (GetDialogCaption() == "Übersicht der Mülltonnen") {
  8425. if (!trashDialog) {
  8426. return
  8427. }
  8428. index := GetDialogIndex()
  8429. sleep 100
  8430. SetCheckPoint(array_Trashcan[index]["posX"], array_Trashcan[index]["posY"], array_Trashcan[index]["posZ"], 5)
  8431. zone := calculateZone(array_Trashcan[index]["posX"], array_Trashcan[index]["posY"], array_Trashcan[index]["posZ"])
  8432. city := calculateCity(array_Trashcan[index]["posX"], array_Trashcan[index]["posY"], array_Trashcan[index]["posZ"])
  8433. zc := zone . ", " . city
  8434. SendInfo("Die Mülltonne (ID: " cPrimar array_Trashcan[index]["id"] cSecond ") in " cPrimar zc cSecond " wurde markiert.")
  8435. trashDialog := false
  8436. } else if (GetDialogCaption() == "Übersicht deiner Tore") {
  8437. if (!gateDialog) {
  8438. return
  8439. }
  8440. index := GetDialogIndex()
  8441. sleep 100
  8442. SetCheckPoint(array_Gates[index]["posX"], array_Gates[index]["posY"], array_Gates[index]["posZ"], 5)
  8443. zone := calculateZone(array_Gates[index]["posX"], array_Gates[index]["posY"], array_Gates[index]["posZ"])
  8444. city := calculateCity(array_Gates[index]["posX"], array_Gates[index]["posY"], array_Gates[index]["posZ"])
  8445. zc := zone . ", " . city
  8446. SendInfo("Das Tor (ID: " cPrimar array_Gates[index]["id"] cSecond ") in " cPrimar zc cSecond " wurde markiert.")
  8447. gateDialog := false
  8448. }
  8449. }
  8450. return
  8451. updateTrashcan(time)
  8452. {
  8453. Loop % array_Trashcan.MaxIndex() {
  8454. if(isPlayerInRangeOfPoint(array_Trashcan[A_Index]["posX"], array_Trashcan[A_Index]["posY"], array_Trashcan[A_Index]["posZ"], 15)) {
  8455. currentTime := getUnixTimestamp(A_NowUTC)
  8456. blockedTime := currentTime + (time-60)
  8457. array_Trashcan[A_Index]["blockedTime"] := blockedTime
  8458. diff := blockedTime - currentTime
  8459. if(diff > 59) {
  8460. SendInfo("Die Zeit von Mülltonne " . cPrimar . array_Trashcan[A_Index]["id"] . cSecond . " wurde auf " . cPrimar . round(time/60) " Minuten" . cSecond . " gesetzt!")
  8461. } else SendInfo("Die Zeit von Mülltonne " . cPrimar . array_Trashcan[A_Index]["id"] . cSecond . " wurde auf " . cPrimar . round(time) " Sekunden" . cSecond . " gesetzt!")
  8462. res := UrlDownloadToVar(baseURL . "api/updatetrash.php?trashid=" . array_Trashcan[A_Index]["id"] . "&username=" GetUsername() "&blockedtime=" blockedTime)
  8463. res := StrReplace(res, "?", "")
  8464. if (isMarkerCreated()) {
  8465. coordsMarker := coordsFromRedmarker()
  8466. coordsTrash := [array_Trashcan[A_Index]["posX"], array_Trashcan[A_Index]["posY"], array_Trashcan[A_Index]["posZ"]]
  8467. if( Floor(getDistanceBetweenTwoPoints(coords, coordsTrash) <= 15)) {
  8468. DisableCheckpoint()
  8469. SendChat("/gpsaus")
  8470. }
  8471. }
  8472. }
  8473. }
  8474. }
  8475. return
  8476. ~R::
  8477. if(isBlocked() || getUsername() != "Marschl") {
  8478. return
  8479. } else {
  8480. if(GetVehicleModelId() == 452 || GetVehicleModelId() == 453 || GetVehicleModelId() == 484){
  8481. SendChat("/fishing")
  8482. } else if(GetVehicleModelId() == 454){
  8483. SendChat("/drugs show")
  8484. } else if(GetVehicleModelId() == 499){
  8485. SendChat("/drugs start")
  8486. } else if(IsPlayerInRangeOfPoint(2696.8633,-2452.0420,13.6404, 3)) {
  8487. SendChat("/drugs deliver")
  8488. } else if(!IsPlayerInAnyVehicle()) {
  8489. SendChat("/hide")
  8490. }
  8491. }
  8492. return
  8493. ~NumpadMult::
  8494. if(isBlocked() || getUsername() != "Marschl") {
  8495. return
  8496. } else {
  8497. SendInput, t/dl{Enter}
  8498. }
  8499. return
  8500. :?:/ci::
  8501. SendInput, {Enter}
  8502. {
  8503. if(getUsername() != "Marschl") {
  8504. return
  8505. }
  8506. sleep 500
  8507. carid := PlayerInput("CarID: ")
  8508. if (carid != "" || carid != " " || !IsNumeric(carid)) {
  8509. SendChat("/carinfo " carid)
  8510. } else SendError("Falsche CarID")
  8511. }
  8512. return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement