Advertisement
Guest User

Untitled

a guest
Jan 10th, 2016
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 94.25 KB | None | 0 0
  1. UrlDownloadToVar(URL, ByRef Result, UserAgent = "", Proxy = "", ProxyBypass = "")
  2. {
  3. hModule := DllCall("LoadLibrary", "Str", "wininet.dll")
  4. AccessType := Proxy != "" ? 3 : 1
  5. io := DllCall("wininet\InternetOpenA"
  6. , "Str", UserAgent
  7. , "UInt", AccessType
  8. , "Str", Proxy
  9. , "Str", ProxyBypass
  10. , "UInt", 0)
  11. iou := DllCall("wininet\InternetOpenUrlA"
  12. , "UInt", io
  13. , "Str", url
  14. , "Str", ""
  15. , "UInt", 0
  16. , "UInt", 0x80000000
  17. , "UInt", 0)
  18. If (ErrorLevel != 0 or iou = 0) {
  19. DllCall("FreeLibrary", "UInt", hModule)
  20. return 0
  21. }
  22. VarSetCapacity(buffer, 10240, 0)
  23. VarSetCapacity(BytesRead, 4, 0)
  24. Loop
  25. {
  26. irf := DllCall("wininet\InternetReadFile", "UInt", iou, "UInt", &buffer, "UInt", 10240, "UInt", &BytesRead)
  27. VarSetCapacity(buffer, -1)
  28. BytesRead_ = 0
  29. Loop, 4
  30. BytesRead_ += *(&BytesRead + A_Index-1) << 8*(A_Index-1)
  31. If (irf = 1 and BytesRead_ = 0)
  32. break
  33. Else
  34. Result .= SubStr(buffer, 1, BytesRead_)
  35. }
  36. DllCall("wininet\InternetCloseHandle", "UInt", iou)
  37. DllCall("wininet\InternetCloseHandle", "UInt", io)
  38. DllCall("FreeLibrary", "UInt", hModule)
  39. }
  40. PlayerInput(text){
  41. s := A_IsSuspended
  42. Suspend On
  43. KeyWait Enter
  44. SendInput t^a{backspace}%text%
  45. Input, var, v, {enter}
  46. SendInput ^a{backspace 100}{enter}
  47. Sleep, 20
  48. if(!s)
  49. Suspend Off
  50. return var
  51. }
  52.  
  53. prefix = {FFFFFF}[{FFCC00}Keybinder{FFFFFF}]
  54.  
  55.  
  56. ; ErrorLevels
  57. global ERROR_OK := 0
  58. global ERROR_PROCESS_NOT_FOUND := 1
  59. global ERROR_OPEN_PROCESS := 2
  60. global ERROR_INVALID_HANDLE := 3
  61. global ERROR_MODULE_NOT_FOUND := 4
  62. global ERROR_ENUM_PROCESS_MODULES := 5
  63. global ERROR_ZONE_NOT_FOUND := 6
  64. global ERROR_CITY_NOT_FOUND := 7
  65. global ERROR_READ_MEMORY := 8
  66. global ERROR_WRITE_MEMORY := 9
  67. global ERROR_ALLOC_MEMORY := 10
  68. global ERROR_FREE_MEMORY := 11
  69. global ERROR_WAIT_FOR_OBJECT := 12
  70. global ERROR_CREATE_THREAD := 13
  71. ; GTA Addresses
  72. global ADDR_ZONECODE := 0xA49AD4
  73. global ADDR_POSITION_X := 0xB6F2E4
  74. global ADDR_POSITION_Y := 0xB6F2E8
  75. global ADDR_POSITION_Z := 0xB6F2EC
  76. global ADDR_CPED_PTR := 0xB6F5F0
  77. global ADDR_CPED_HPOFF := 0x540
  78. global ADDR_CPED_ARMOROFF := 0x548
  79. global ADDR_VEHICLE_PTR := 0xBA18FC
  80. global ADDR_VEHICLE_HPOFF := 0x4C0
  81. global ADDR_CPED_MONEY := 0x0B7CE54
  82. global ADDR_CPED_INTID := 0xA4ACE8
  83. global ADDR_VEHICLE_DOORSTATE := 0x4F8
  84. global ADDR_VEHICLE_ENGINESTATE := 0x428
  85. global ADDR_VEHICLE_LIGHTSTATE := 0x584
  86. global ADDR_VEHICLE_MODEL := 0x22
  87. global ADDR_VEHICLE_TYPE := 0x590
  88. global ADDR_VEHICLE_DRIVER := 0x460
  89.  
  90. global ADDR_VEHICLE_CVEH := 0xB6F980
  91. global ADDR_VEHICLE_SPEED_X := 0x44
  92. global ADDR_VEHICLE_SPEED_Y := 0x48
  93. global ADDR_VEHICLE_SPEED_Z := 0x4C
  94.  
  95. global oAirplaneModels := [417, 425, 447, 460, 469, 476, 487, 488, 497, 511, 512, 513, 519, 520, 548, 553, 563, 577, 592, 593]
  96. global oBikeModels := [481,509,510]
  97. 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"]
  98. ; SAMP Addresses
  99. global ADDR_SAMP_INCHAT_PTR := 0x21a10c
  100. global ADDR_SAMP_INCHAT_PTR_OFF := 0x55
  101. global ADDR_SAMP_USERNAME := 0x219A6F
  102. global ADDR_SAMP_CHATMSG_PTR := 0x21A0E4
  103. global ADDR_SAMP_SHOWDLG_PTR := 0x21A0B8
  104. global FUNC_SAMP_SENDCMD := 0x65c60
  105. global FUNC_SAMP_SENDSAY := 0x57f0
  106. global FUNC_SAMP_ADDTOCHATWND := 0x64520
  107. global FUNC_SAMP_SHOWGAMETEXT := 0x9C2C0
  108. global FUNC_SAMP_PLAYAUDIOSTR := 0x62dA0
  109. global FUNC_SAMP_STOPAUDIOSTR := 0x629A0
  110. global FUNC_SAMP_SHOWDIALOG := 0x6B9C0
  111. global FUNC_UPDATESCOREBOARD := 0x8A10
  112.  
  113. global SAMP_INFO_OFFSET := 0x21A0F8
  114. global SAMP_PPOOLS_OFFSET := 0x3CD
  115. global SAMP_PPOOL_PLAYER_OFFSET := 0x18
  116. global SAMP_SLOCALPLAYERID_OFFSET := 0x4
  117. global SAMP_ISTRLEN_LOCALPLAYERNAME_OFFSET := 0x1A
  118. global SAMP_SZLOCALPLAYERNAME_OFFSET := 0xA
  119. global SAMP_PSZLOCALPLAYERNAME_OFFSET := 0xA
  120. global SAMP_PREMOTEPLAYER_OFFSET := 0x2E
  121. global SAMP_ISTRLENNAME___OFFSET := 0x1C
  122. global SAMP_SZPLAYERNAME_OFFSET := 0xC
  123. global SAMP_PSZPLAYERNAME_OFFSET := 0xC
  124. global SAMP_ILOCALPLAYERPING_OFFSET := 0x26
  125. global SAMP_ILOCALPLAYERSCORE_OFFSET := 0x2A
  126. global SAMP_IPING_OFFSET := 0x28
  127. global SAMP_ISCORE_OFFSET := 0x24
  128. global SAMP_ISNPC_OFFSET := 0x4
  129. global SAMP_SZIP_OFFSET := 0x20
  130. global SAMP_SZHOSTNAME_OFFSET := 0x121
  131.  
  132. global SAMP_PLAYER_MAX := 1004
  133.  
  134. ; Sizes
  135. global SIZE_SAMP_CHATMSG := 0xFC
  136. ; Internal
  137. global hGTA := 0x0
  138. global dwGTAPID := 0x0
  139. global dwSAMP := 0x0
  140. global pMemory := 0x0
  141. global pParam1 := 0x0
  142. global pParam2 := 0x0
  143. global pParam3 := 0x0
  144. global pParam4 := 0x0
  145. global pParam5 := 0x0
  146. global pInjectFunc := 0x0
  147. global nZone := 1
  148. global nCity := 1
  149. global bInitZaC := 0
  150. global iRefreshScoreboard := 0
  151. global oScoreboardData := ""
  152. global iRefreshHandles := 0
  153. global iUpdateTick := 2500 ;time in ms, used for getPlayerNameById etc. to refresh data
  154.  
  155.  
  156. ; #####################################################################################################################
  157. ; # SAMP-Funktionen: #
  158. ; # - isInChat() Prüft, ob der Spieler gerade chattet oder in einem Dialog ist #
  159. ; # - getUsername() Liest den Namen des Spielers aus #
  160. ; # - SendChat(wText) Sendet eine Nachricht od. einen Befehl direkt an den Server #
  161. ; # - addChatMessage(wText) Fügt eine Zeile in den Chat ein (nur für den Spieler sichtbar) #
  162. ; # - showGameText(wText, dwTime, dwTextsize) Zeigt einen Text inmitten des Bildschirmes an #
  163. ; # - showDialog(dwStyle, wCaption, wInfo, wButton1) Zeigt einen Dialog an #
  164. ; # - playAudioStream(wUrl) Spielt einen "Audio Stream" ab #
  165. ; # - stopAudioStream() Stoppt den aktuellen Audio Stream #
  166. ; # - GetChatLine(Line, Output) Liest die eingestellte Zeile aus, #
  167. ; # Optionale Parameter (timestamp=0, color=0) #
  168. ; # - blockChatInput() Eine Funktion um Messages zum Server zu blockieren #
  169. ; # - unBlockChatInput() Eine Funktion um Messages zum Server zu entblockieren #
  170. ; # ----------------------------------------------------------------------------------------------------------------- #
  171. ; # - patchRadio() (interner stuff) #
  172. ; # - unPatchRadio() (interner stuff) #
  173. ; #####################################################################################################################
  174. ; # #
  175. ; # - getPlayerScoreById(dwId) Zeigt den Score zu der Id #
  176. ; # - getPlayerPingById(dwId) Zeigt den Ping zu der Id #
  177. ; # - getPlayerNameById(dwId) Zeigt den Namen zu der Id #
  178. ; # - getPlayerIdByName(wName) Zeigt die Id zu dem Namen #
  179. ; # - updateScoreboardDataEx() Aktualisiert Scoreboard Inhalte (wird implizit aufgerufen) #
  180. ; # - updateOScoreboardData() Aktualisiert Scoreboard Inhalte (wird implizit aufgerufen) #
  181. ; # - isNPCById(dwId) Zeigt an ob die ID ein NPC #
  182. ; # - getIP() Zeigt die Server IP #
  183. ; # - getHostname() Zeigt den Servernamen #
  184. ; # - restart() Restartet das Game #
  185. ; # - CountOnlinePlayers() Gibt die Spieleranzahl zurück #
  186. ; #####################################################################################################################
  187. ; # Spielerfunktionen: #
  188. ; # - getPlayerHealth() Ermittelt die HP des Spielers #
  189. ; # - getPlayerArmor() Ermittelt den Rüstungswert des Spielers #
  190. ; # - getPlayerInteriorId() Ermittelt die Interior ID wo der Spieler ist #
  191. ; # - getPlayerMoney() Ermittelt den Kontostand des Spielers (nur GTA Intern) #
  192. ; # - getPlayerWanteds() Ermittelt die Wantedanzahl des Spielers(nur bis 6 Wanteds) #
  193. ; #####################################################################################################################
  194. ; # Fahrzeugfunktionen: #
  195. ; # - isPlayerInAnyVehicle() Ermittelt, ob sich der Spieler in einem Fahrzeug befindet #
  196. ; # - getVehicleHealth() Ermittelt die HP des Fahrzeugs, in dem der Spieler sitzt #
  197. ; # - isPlayerDriver() Ermittelt ob der Spieler Fahrer des Auto's ist #
  198. ; # - getVehicleType() Ermittelt den FahrzeugTyp(Auto,LKW etc) #
  199. ; # - getVehicleModelId() Ermittelt die Fahrzeugmodell ID #
  200. ; # - getVehicleModelName() Ermittelt den FahrzeugModell Namen #
  201. ; # - getVehicleLightState() Ermittelt den Lichtzustand vom Auto #
  202. ; # - getVehicleEngineState() Ermittelt den Motorzustand vom Auto #
  203. ; # - getVehicleLockState() Ermittelt ob das Auto auf oder zu ist #
  204. ; # - GetVehicleSpeed() Ermittelt die Geschwindigkeit des Autos
  205. ; #####################################################################################################################
  206. ; # Standpunktbestimmung: #
  207. ; # - getCoordinates() Ermittelt die aktuelle Position (Koordinaten) #
  208. ; # - GetPlayerPos(X,Y,Z) siehe oben drüber #
  209. ; # ----------------------------------------------------------------------------------------------------------------- #
  210. ; # - initZonesAndCities() Initialisiert eine Liste aller Standartgebiete #
  211. ; # (Voraussetzung für die folgenden Funktionen dieser Kategorie) #
  212. ; # - calculateZone(X, Y, Z) Bestimmt die Zone (= Stadtteil) aus den geg. Koordinaten #
  213. ; # - calculateCity(X, Y, Z) Bestimmt die Stadt aus den geg. Koordinaten #
  214. ; # - getCurrentZonecode() Ermittelt die aktulle Zone in Kurzform #
  215. ; # - AddZone(Name, X1, Y1, Z1, X2, Y2, Z2) Fügt eine Zone zum Index hinzu #
  216. ; # - AddCity(Name, X1, Y1, Z1, X2, Y2, Z2) Fügt eine Stadt zum Index hinzu #
  217. ; # - IsPlayerInRangeOfPoint(X, Y, Z, Radius) Bestimmt ob der Spieler in der Nähe der Koordinaten ist #
  218. ; # - IsIsPlayerInRangeOfPoint2D(X, Y, Radius) Bestimmt ob der Spieler in der Nähe der Koordinaten ist #
  219. ; # - getPlayerZone() - #
  220. ; # - getPlayerCity() - #
  221. ; #####################################################################################################################
  222. ; # Sonstiges: #
  223. ; # - checkHandles() #
  224. ; #####################################################################################################################
  225. ; # Speicherfunktionen (intern genutzt): #
  226. ; # Memory Functions: #
  227. ; # - checkHandles() #
  228. ; # - refreshGTA() #
  229. ; # - refreshSAMP() #
  230. ; # - refreshMemory() #
  231. ; # - getPID(szWindow) #
  232. ; # - openProcess(dwPID, dwRights) #
  233. ; # - closeProcess(hProcess) #
  234. ; # - getModuleBaseAddress(sModule, dwPID) #
  235. ; # - readString(hProcess, dwAddress, dwLen) #
  236. ; # - readFloat(hProcess, dwAddress) #
  237. ; # - readDWORD(hProcess, dwAddress) #
  238. ; # - readMem(hProcess, dwAddress, dwLen=4, type="UInt") #
  239. ; # - writeString(hProcess, dwAddress, wString) #
  240. ; # - writeRaw(hProcess, dwAddress, data, dwLen) #
  241. ; # - callWithParams(hProcess, dwFunc, aParams, bCleanupStack = true) #
  242. ; # - virtualAllocEx(hProcess, dwSize, flAllocationType, flProtect) #
  243. ; # - virtualFreeEx(hProcess, lpAddress, dwSize, dwFreeType) #
  244. ; # - createRemoteThread(hProcess, lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, #
  245. ; # dwCreationFlags, lpThreadId) #
  246. ; # - waitForSingleObject(hThread, dwMilliseconds) #
  247. ; # - __ansiToUnicode(sString, nLen = 0) #
  248. ; # - __unicodeToAnsi(wString, nLen = 0) #
  249. ; #####################################################################################################################
  250.  
  251. ; ##### SAMP-Funktionen #####
  252.  
  253. isInChat() {
  254. if(!checkHandles())
  255. return -1
  256.  
  257. dwPtr := dwSAMP + ADDR_SAMP_INCHAT_PTR
  258. dwAddress := readDWORD(hGTA, dwPtr) + ADDR_SAMP_INCHAT_PTR_OFF
  259. if(ErrorLevel) {
  260. ErrorLevel := ERROR_READ_MEMORY
  261. return -1
  262. }
  263.  
  264. dwInChat := readDWORD(hGTA, dwAddress)
  265. if(ErrorLevel) {
  266. ErrorLevel := ERROR_READ_MEMORY
  267. return -1
  268. }
  269.  
  270. ErrorLevel := ERROR_OK
  271. if(dwInChat > 0) {
  272. return true
  273. } else {
  274. return false
  275. }
  276. }
  277.  
  278. test() {
  279. return readString(hGTA, 0x4719720, 32)
  280. }
  281.  
  282. getUsername() {
  283. if(!checkHandles())
  284. return ""
  285.  
  286. dwAddress := dwSAMP + ADDR_SAMP_USERNAME
  287. sUsername := readString(hGTA, dwAddress, 25)
  288. if(ErrorLevel) {
  289. ErrorLevel := ERROR_READ_MEMORY
  290. return ""
  291. }
  292.  
  293. ErrorLevel := ERROR_OK
  294. return sUsername
  295. }
  296.  
  297. getId() {
  298. s:=getUsername()
  299. return getPlayerIdByName(s)
  300. }
  301.  
  302.  
  303. SendChat(wText) {
  304. wText := "" wText
  305.  
  306. if(!checkHandles())
  307. return false
  308.  
  309. dwFunc:=0
  310. if(SubStr(wText, 1, 1) == "/") {
  311. dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  312. } else {
  313. dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  314. }
  315.  
  316. callWithParams(hGTA, dwFunc, [["s", wText]], false)
  317.  
  318. ErrorLevel := ERROR_OK
  319. return true
  320. }
  321.  
  322. addChatMessage(wText) {
  323. wText := "" wText
  324.  
  325. if(!checkHandles())
  326. return false
  327.  
  328. dwFunc := dwSAMP + FUNC_SAMP_ADDTOCHATWND
  329. dwChatInfo := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  330. if(ErrorLevel) {
  331. ErrorLevel := ERROR_READ_MEMORY
  332. return false
  333. }
  334.  
  335. callWithParams(hGTA, dwFunc, [["p", dwChatInfo], ["s", wText]], true)
  336.  
  337. ErrorLevel := ERROR_OK
  338. return true
  339. }
  340. showGameText(wText, dwTime, dwSize) {
  341. wText := "" wText
  342. dwTime += 0
  343. dwTime := Floor(dwTime)
  344. dwSize += 0
  345. dwSize := Floor(dwSize)
  346.  
  347. if(!checkHandles())
  348. return false
  349.  
  350. dwFunc := dwSAMP + FUNC_SAMP_SHOWGAMETEXT
  351.  
  352. callWithParams(hGTA, dwFunc, [["s", wText], ["i", dwTime], ["i", dwSize]], false)
  353.  
  354. ErrorLevel := ERROR_OK
  355. return true
  356. }
  357.  
  358. showDialog(dwStyle, wCaption, wInfo, wButton1 ) {
  359. dwStyle += 0
  360. dwStyle := Floor(dwStyle)
  361. wCaption := "" wCaption
  362. wInfo := "" wInfo
  363. wButton1 := "" wButton1
  364.  
  365. if(dwStyle<0 || dwStyle>5 || StrLen(wCaption)>=64 || StrLen(wInfo)>=4096 || StrLen(wButton1)>10)
  366. return false
  367.  
  368. if(!checkHandles())
  369. return false
  370.  
  371.  
  372. dwFunc := dwSAMP + FUNC_SAMP_SHOWDIALOG
  373.  
  374. dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_SHOWDLG_PTR)
  375. if(ErrorLevel || dwAddress==0) {
  376. ErrorLevel := ERROR_READ_MEMORY
  377. return false
  378. }
  379.  
  380. writeString(hGTA, pParam5, wCaption)
  381. if(ErrorLevel)
  382. return false
  383. writeString(hGTA, pParam1, wInfo)
  384. if(ErrorLevel)
  385. return false
  386. writeString(hGTA, pParam5+512, wButton1)
  387. if(ErrorLevel)
  388. return false
  389.  
  390. ;mov + 7*push + call + retn
  391. dwLen := 5 + 7*5 + 5 + 1
  392.  
  393.  
  394. VarSetCapacity(injectData, dwLen, 0)
  395.  
  396. NumPut(0xB9, injectData, 0, "UChar") ;0 + 1 ;mov ecx
  397. NumPut(dwAddress, injectData, 1, "UInt") ;1 + 4
  398. NumPut(0x68, injectData, 5, "UChar") ;5 + 1 ;push 0
  399. NumPut(0, injectData, 6, "UInt") ;6 + 4
  400. NumPut(0x68, injectData, 10, "UChar") ;10 + 1 ;push 0
  401. NumPut(pParam5+StrLen(wCaption), injectData, 11, "UInt") ;11 + 4
  402. NumPut(0x68, injectData, 15, "UChar") ;15 + 1 ;push button1
  403. NumPut(pParam5+512, injectData, 16, "UInt") ;16 + 4
  404. NumPut(0x68, injectData, 20, "UChar") ;20 + 1 ;push info
  405. NumPut(pParam1, injectData, 21, "UInt") ;21 + 4
  406. NumPut(0x68, injectData, 25, "UChar") ;25 + 1 ;push caption
  407. NumPut(pParam5, injectData, 26, "UInt") ;26 + 4
  408. NumPut(0x68, injectData, 30, "UChar") ;30 + 1 ;push style
  409. NumPut(dwStyle, injectData, 31, "UInt") ;31 + 4
  410. NumPut(0x68, injectData, 35, "UChar") ;35 + 1 ;push 1
  411. NumPut(1, injectData, 36, "UInt") ;36 + 4
  412.  
  413. NumPut(0xE8, injectData, 40, "UChar") ;40 + 1 ;call
  414. offset := dwFunc - (pInjectFunc + 45)
  415. NumPut(offset, injectData, 41, "Int") ;41 + 4
  416. NumPut(0xC3, injectData, 45, "UChar") ;45 + 1 ;retn
  417.  
  418. writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
  419. if(ErrorLevel)
  420. return false
  421.  
  422. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  423. if(ErrorLevel)
  424. return false
  425.  
  426. waitForSingleObject(hThread, 0xFFFFFFFF)
  427.  
  428. closeProcess(hThread)
  429.  
  430. return true
  431. }
  432.  
  433. playAudioStream(wUrl) {
  434. wUrl := "" wUrl
  435.  
  436. if(!checkHandles())
  437. return false
  438.  
  439. dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
  440.  
  441. patchRadio()
  442.  
  443. callWithParams(hGTA, dwFunc, [["s", wUrl], ["i", 0], ["i", 0], ["i", 0], ["i", 0], ["i", 0]], false)
  444.  
  445. unPatchRadio()
  446.  
  447. ErrorLevel := ERROR_OK
  448. return true
  449. }
  450.  
  451. stopAudioStream() {
  452. if(!checkHandles())
  453. return false
  454.  
  455. dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
  456.  
  457. patchRadio()
  458.  
  459. callWithParams(hGTA, dwFunc, [["i", 1]], false)
  460.  
  461. unPatchRadio()
  462.  
  463. ErrorLevel := ERROR_OK
  464. return true
  465. }
  466.  
  467. patchRadio()
  468. {
  469. if(!checkHandles())
  470. return false
  471.  
  472. VarSetCapacity(nop, 4, 0)
  473. NumPut(0x90909090,nop,0,"UInt")
  474.  
  475. dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
  476. writeRaw(hGTA, dwFunc, &nop, 4)
  477. writeRaw(hGTA, dwFunc+4, &nop, 1)
  478.  
  479. dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
  480. writeRaw(hGTA, dwFunc, &nop, 4)
  481. writeRaw(hGTA, dwFunc+4, &nop, 1)
  482. return true
  483. }
  484.  
  485. unPatchRadio()
  486. {
  487. if(!checkHandles())
  488. return false
  489.  
  490. VarSetCapacity(old, 4, 0)
  491.  
  492. dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
  493. NumPut(0x74003980,old,0,"UInt")
  494. writeRaw(hGTA, dwFunc, &old, 4)
  495. NumPut(0x39,old,0,"UChar")
  496. writeRaw(hGTA, dwFunc+4, &old, 1)
  497.  
  498. dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
  499. NumPut(0x74003980,old,0,"UInt")
  500. writeRaw(hGTA, dwFunc, &old, 4)
  501. NumPut(0x09,old,0,"UChar")
  502. writeRaw(hGTA, dwFunc+4, &old, 1)
  503. return true
  504. }
  505.  
  506. blockChatInput() {
  507. if(!checkHandles())
  508. return false
  509.  
  510. VarSetCapacity(nop, 2, 0)
  511.  
  512. dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  513. NumPut(0x04C2,nop,0,"Short")
  514. writeRaw(hGTA, dwFunc, &nop, 2)
  515.  
  516. dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  517. writeRaw(hGTA, dwFunc, &nop, 2)
  518.  
  519. return true
  520. }
  521.  
  522.  
  523. unBlockChatInput() {
  524. if(!checkHandles())
  525. return false
  526.  
  527. VarSetCapacity(nop, 2, 0)
  528.  
  529. dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  530. NumPut(0xA164,nop,0,"Short")
  531. writeRaw(hGTA, dwFunc, &nop, 2)
  532.  
  533. dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  534. writeRaw(hGTA, dwFunc, &nop, 2)
  535.  
  536. return true
  537. }
  538.  
  539. getPlayerNameById(dwId) {
  540. dwId += 0
  541. dwId := Floor(dwId)
  542. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  543. return ""
  544.  
  545. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  546. {
  547. if(oScoreboardData[dwId])
  548. return oScoreboardData[dwId].NAME
  549. return ""
  550. }
  551.  
  552. if(!updateOScoreboardData())
  553. return ""
  554.  
  555. if(oScoreboardData[dwId])
  556. return oScoreboardData[dwId].NAME
  557. return ""
  558. }
  559.  
  560. getPlayerIdByName(wName) {
  561. wName := "" wName
  562. if(StrLen(wName) < 1 || StrLen(wName) > 20)
  563. return -1
  564.  
  565. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  566. {
  567. For i, o in oScoreboardData
  568. {
  569. if(InStr(o.NAME,wName)==1)
  570. return i
  571. }
  572. return -1
  573. }
  574.  
  575. if(!updateOScoreboardData())
  576. return -1
  577.  
  578. For i, o in oScoreboardData
  579. {
  580. if(InStr(o.NAME,wName)==1)
  581. return i
  582. }
  583. return -1
  584. }
  585.  
  586. getPlayerScoreById(dwId) {
  587. dwId += 0
  588. dwId := Floor(dwId)
  589. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  590. return ""
  591.  
  592. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  593. {
  594. if(oScoreboardData[dwId])
  595. return oScoreboardData[dwId].SCORE
  596. return ""
  597. }
  598.  
  599. if(!updateOScoreboardData())
  600. return ""
  601.  
  602. if(oScoreboardData[dwId])
  603. return oScoreboardData[dwId].SCORE
  604. return ""
  605. }
  606.  
  607. getPlayerPingById(dwId) {
  608. dwId += 0
  609. dwId := Floor(dwId)
  610. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  611. return -1
  612.  
  613. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  614. {
  615. if(oScoreboardData[dwId])
  616. return oScoreboardData[dwId].PING
  617. return -1
  618. }
  619.  
  620. if(!updateOScoreboardData())
  621. return -1
  622.  
  623. if(oScoreboardData[dwId])
  624. return oScoreboardData[dwId].PING
  625. return -1
  626. }
  627.  
  628. isNPCById(dwId) {
  629. dwId += 0
  630. dwId := Floor(dwId)
  631. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  632. return -1
  633.  
  634. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  635. {
  636. if(oScoreboardData[dwId])
  637. return oScoreboardData[dwId].ISNPC
  638. return -1
  639. }
  640.  
  641. if(!updateOScoreboardData())
  642. return -1
  643.  
  644. if(oScoreboardData[dwId])
  645. return oScoreboardData[dwId].ISNPC
  646. return -1
  647. }
  648.  
  649. getIP() {
  650. if(!checkHandles())
  651. return ""
  652.  
  653. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  654. if(ErrorLevel || dwAddress==0) {
  655. ErrorLevel := ERROR_READ_MEMORY
  656. return ""
  657. }
  658.  
  659. ipaddr := readString(hGTA, dwAddress+SAMP_SZIP_OFFSET, 257)
  660. if(ErrorLevel) {
  661. ErrorLevel := ERROR_READ_MEMORY
  662. return ""
  663. }
  664.  
  665. return ipaddr
  666. }
  667.  
  668. getHostname() {
  669. if(!checkHandles())
  670. return ""
  671.  
  672. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  673. if(ErrorLevel || dwAddress==0) {
  674. ErrorLevel := ERROR_READ_MEMORY
  675. return ""
  676. }
  677.  
  678. hostname := readString(hGTA, dwAddress+SAMP_SZHOSTNAME_OFFSET, 259)
  679. if(ErrorLevel) {
  680. ErrorLevel := ERROR_READ_MEMORY
  681. return ""
  682. }
  683.  
  684. return hostname
  685. }
  686.  
  687. CountOnlinePlayers() {
  688. if(!checkHandles())
  689. return -1
  690.  
  691. dwOnline := readDWORD(hGTA, dwSAMP + 0x21A0B4)
  692. if(ErrorLevel) {
  693. ErrorLevel := ERROR_READ_MEMORY
  694. return -1
  695. }
  696.  
  697. dwAddr := dwOnline + 0x4
  698. OnlinePlayers := readDWORD(hGTA, dwAddr)
  699. if(ErrorLevel) {
  700. ErrorLevel := ERROR_READ_MEMORY
  701. return -1
  702. }
  703.  
  704. ErrorLevel := ERROR_OK
  705. return OnlinePlayers
  706. }
  707.  
  708. ; internal stuff
  709. updateScoreboardDataEx() {
  710.  
  711. if(!checkHandles())
  712. return false
  713.  
  714. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) ;g_SAMP
  715. if(ErrorLevel || dwAddress==0) {
  716. ErrorLevel := ERROR_READ_MEMORY
  717. return false
  718. }
  719.  
  720. dwFunc := dwSAMP + FUNC_UPDATESCOREBOARD
  721.  
  722. VarSetCapacity(injectData, 11, 0) ;mov + call + retn
  723.  
  724. NumPut(0xB9, injectData, 0, "UChar")
  725. NumPut(dwAddress, injectData, 1, "UInt")
  726.  
  727. NumPut(0xE8, injectData, 5, "UChar")
  728. offset := dwFunc - (pInjectFunc + 10)
  729. NumPut(offset, injectData, 6, "Int")
  730. NumPut(0xC3, injectData, 10, "UChar")
  731.  
  732. writeRaw(hGTA, pInjectFunc, &injectData, 11)
  733. if(ErrorLevel)
  734. return false
  735.  
  736. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  737. if(ErrorLevel)
  738. return false
  739.  
  740. waitForSingleObject(hThread, 0xFFFFFFFF)
  741.  
  742. closeProcess(hThread)
  743.  
  744. return true
  745.  
  746. }
  747.  
  748. ; internal stuff
  749. updateOScoreboardData() {
  750. if(!checkHandles())
  751. return 0
  752.  
  753. oScoreboardData := []
  754.  
  755. if(!updateScoreboardDataEx())
  756. return 0
  757.  
  758. iRefreshScoreboard := A_TickCount
  759.  
  760. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  761. if(ErrorLevel || dwAddress==0) {
  762. ErrorLevel := ERROR_READ_MEMORY
  763. return 0
  764. }
  765.  
  766. dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  767. if(ErrorLevel || dwAddress==0) {
  768. ErrorLevel := ERROR_READ_MEMORY
  769. return 0
  770. }
  771.  
  772. dwPlayers := readDWORD(hGTA, dwAddress + SAMP_PPOOL_PLAYER_OFFSET)
  773. if(ErrorLevel || dwPlayers==0) {
  774. ErrorLevel := ERROR_READ_MEMORY
  775. return 0
  776. }
  777.  
  778. wID := readMem(hGTA, dwPlayers + SAMP_SLOCALPLAYERID_OFFSET, 2, "Short") ;sLocalPlayerID
  779. if(ErrorLevel) {
  780. ErrorLevel := ERROR_READ_MEMORY
  781. return 0
  782. }
  783.  
  784. dwPing := readMem(hGTA, dwPlayers + SAMP_ILOCALPLAYERPING_OFFSET, 4, "Int")
  785. if(ErrorLevel) {
  786. ErrorLevel := ERROR_READ_MEMORY
  787. return 0
  788. }
  789.  
  790. dwScore := readMem(hGTA, dwPlayers + SAMP_ILOCALPLAYERSCORE_OFFSET, 4, "Int")
  791. if(ErrorLevel) {
  792. ErrorLevel := ERROR_READ_MEMORY
  793. return 0
  794. }
  795.  
  796. dwTemp := readMem(hGTA, dwPlayers + SAMP_ISTRLEN_LOCALPLAYERNAME_OFFSET, 4, "Int") ;iStrlen_LocalPlayerName
  797. if(ErrorLevel) {
  798. ErrorLevel := ERROR_READ_MEMORY
  799. return 0
  800. }
  801.  
  802. sUsername := ""
  803. if(dwTemp <= 0xf) {
  804. sUsername := readString(hGTA, dwPlayers + SAMP_SZLOCALPLAYERNAME_OFFSET, 16) ;szLocalPlayerName
  805. if(ErrorLevel) {
  806. ErrorLevel := ERROR_READ_MEMORY
  807. return 0
  808. }
  809. }
  810. else {
  811. dwAddress := readDWORD(hGTA, dwPlayers + SAMP_PSZLOCALPLAYERNAME_OFFSET) ;pszLocalPlayerName
  812. if(ErrorLevel) {
  813. ErrorLevel := ERROR_READ_MEMORY
  814. return 0
  815. }
  816. sUsername := readString(hGTA, dwAddress, 25)
  817. if(ErrorLevel) {
  818. ErrorLevel := ERROR_READ_MEMORY
  819. return 0
  820. }
  821. }
  822. oScoreboardData[wID] := Object("NAME", sUsername, "ID", wID, "PING", dwPing, "SCORE", dwScore, "ISNPC", 0)
  823.  
  824. Loop, % SAMP_PLAYER_MAX
  825. {
  826. i := A_Index-1
  827.  
  828. dwRemoteplayer := readDWORD(hGTA, dwPlayers+SAMP_PREMOTEPLAYER_OFFSET+i*4) ;pRemotePlayer
  829. if(ErrorLevel) {
  830. ErrorLevel := ERROR_READ_MEMORY
  831. return 0
  832. }
  833.  
  834. if(dwRemoteplayer==0)
  835. continue
  836.  
  837. dwPing := readMem(hGTA, dwRemoteplayer + SAMP_IPING_OFFSET, 4, "Int")
  838. if(ErrorLevel) {
  839. ErrorLevel := ERROR_READ_MEMORY
  840. return 0
  841. }
  842.  
  843. dwScore := readMem(hGTA, dwRemoteplayer + SAMP_ISCORE_OFFSET, 4, "Int")
  844. if(ErrorLevel) {
  845. ErrorLevel := ERROR_READ_MEMORY
  846. return 0
  847. }
  848.  
  849. dwIsNPC := readMem(hGTA, dwRemoteplayer + SAMP_ISNPC_OFFSET, 4, "Int")
  850. if(ErrorLevel) {
  851. ErrorLevel := ERROR_READ_MEMORY
  852. return 0
  853. }
  854.  
  855. dwTemp := readMem(hGTA, dwRemoteplayer + SAMP_ISTRLENNAME___OFFSET, 4, "Int")
  856. if(ErrorLevel) {
  857. ErrorLevel := ERROR_READ_MEMORY
  858. return 0
  859. }
  860. sUsername := ""
  861. if(dwTemp <= 0xf)
  862. {
  863. sUsername := readString(hGTA, dwRemoteplayer+SAMP_SZPLAYERNAME_OFFSET, 16)
  864. if(ErrorLevel) {
  865. ErrorLevel := ERROR_READ_MEMORY
  866. return 0
  867. }
  868. }
  869. else {
  870. dwAddress := readDWORD(hGTA, dwRemoteplayer + SAMP_PSZPLAYERNAME_OFFSET)
  871. if(ErrorLevel || dwAddress==0) {
  872. ErrorLevel := ERROR_READ_MEMORY
  873. return 0
  874. }
  875. sUsername := readString(hGTA, dwAddress, 25)
  876. if(ErrorLevel) {
  877. ErrorLevel := ERROR_READ_MEMORY
  878. return 0
  879. }
  880. }
  881. o := Object("NAME", sUsername, "ID", i, "PING", dwPing, "SCORE", dwScore, "ISNPC", dwIsNPC)
  882. oScoreboardData[i] := o
  883. }
  884. ErrorLevel := ERROR_OK
  885. return 1
  886. }
  887.  
  888. ; ##### Sonstiges #####
  889. GetChatLine(Line, ByRef Output, timestamp=0, color=0){
  890. chatindex := 0
  891. FileRead, file, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
  892. loop, Parse, file, `n, `r
  893. {
  894. if(A_LoopField)
  895. chatindex := A_Index
  896. }
  897. loop, Parse, file, `n, `r
  898. {
  899. if(A_Index = chatindex - line){
  900. output := A_LoopField
  901. break
  902. }
  903. }
  904. file := ""
  905. if(!timestamp)
  906. output := RegExReplace(output, "U)^\[\d{2}:\d{2}:\d{2}\]")
  907. if(!color)
  908. output := RegExReplace(output, "Ui)\{[a-f0-9]{6}\}")
  909. return
  910. }
  911.  
  912. ; ##### Spielerfunktionen #####
  913. getPlayerHealth() {
  914. if(!checkHandles())
  915. return -1
  916.  
  917. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  918. if(ErrorLevel) {
  919. ErrorLevel := ERROR_READ_MEMORY
  920. return -1
  921. }
  922.  
  923. dwAddr := dwCPedPtr + ADDR_CPED_HPOFF
  924. fHealth := readFloat(hGTA, dwAddr)
  925. if(ErrorLevel) {
  926. ErrorLevel := ERROR_READ_MEMORY
  927. return -1
  928. }
  929.  
  930. ErrorLevel := ERROR_OK
  931. return Round(fHealth)
  932. }
  933.  
  934. getPlayerArmor() {
  935. if(!checkHandles())
  936. return -1
  937.  
  938. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  939. if(ErrorLevel) {
  940. ErrorLevel := ERROR_READ_MEMORY
  941. return -1
  942. }
  943.  
  944. dwAddr := dwCPedPtr + ADDR_CPED_ARMOROFF
  945. fHealth := readFloat(hGTA, dwAddr)
  946. if(ErrorLevel) {
  947. ErrorLevel := ERROR_READ_MEMORY
  948. return -1
  949. }
  950.  
  951. ErrorLevel := ERROR_OK
  952. return Round(fHealth)
  953. }
  954.  
  955. getPlayerInteriorId() {
  956. if(!checkHandles())
  957. return -1
  958.  
  959. iid := readMem(hGTA, ADDR_CPED_INTID, 4, "Int")
  960. if(ErrorLevel) {
  961. ErrorLevel := ERROR_READ_MEMORY
  962. return -1
  963. }
  964.  
  965. ErrorLevel := ERROR_OK
  966. return iid
  967. }
  968.  
  969. getPlayerMoney() {
  970. if(!checkHandles())
  971. return ""
  972.  
  973. money := readMem(hGTA, ADDR_CPED_MONEY, 4, "Int")
  974. if(ErrorLevel) {
  975. ErrorLevel := ERROR_READ_MEMORY
  976. return ""
  977. }
  978.  
  979. ErrorLevel := ERROR_OK
  980. return money
  981. }
  982.  
  983. getPlayerWanteds() {
  984. if(!checkHandles())
  985. return -1
  986.  
  987. dwPtr := 0xB7CD9C
  988. dwPtr := readDWORD(hGTA, dwPtr)
  989. if(ErrorLevel) {
  990. ErrorLevel := ERROR_READ_MEMORY
  991. return -1
  992. }
  993.  
  994. Wanteds := readDWORD(hGTA, dwPtr)
  995. if(ErrorLevel) {
  996. ErrorLevel := ERROR_READ_MEMORY
  997. return -1
  998. }
  999.  
  1000. ErrorLevel := ERROR_OK
  1001. return Wanteds
  1002. }
  1003.  
  1004. ; ##### Fahrzeugfunktionen #####
  1005.  
  1006. isPlayerInAnyVehicle()
  1007. {
  1008. if(!checkHandles())
  1009. return -1
  1010.  
  1011. dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1012. if(ErrorLevel) {
  1013. ErrorLevel := ERROR_READ_MEMORY
  1014. return -1
  1015. }
  1016.  
  1017. return (dwVehPtr > 0)
  1018. }
  1019.  
  1020.  
  1021. isPlayerDriver() {
  1022. if(!checkHandles())
  1023. return -1
  1024.  
  1025. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1026. if(ErrorLevel) {
  1027. ErrorLevel := ERROR_READ_MEMORY
  1028. return -1
  1029. }
  1030.  
  1031. if(!dwAddr)
  1032. return -1
  1033.  
  1034. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  1035. if(ErrorLevel) {
  1036. ErrorLevel := ERROR_READ_MEMORY
  1037. return -1
  1038. }
  1039.  
  1040. dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DRIVER)
  1041. if(ErrorLevel) {
  1042. ErrorLevel := ERROR_READ_MEMORY
  1043. return -1
  1044. }
  1045.  
  1046. ErrorLevel := ERROR_OK
  1047. return (dwVal==dwCPedPtr)
  1048. }
  1049.  
  1050. getVehicleHealth() {
  1051. if(!checkHandles())
  1052. return -1
  1053.  
  1054. dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1055. if(ErrorLevel) {
  1056. ErrorLevel := ERROR_READ_MEMORY
  1057. return -1
  1058. }
  1059.  
  1060. dwAddr := dwVehPtr + ADDR_VEHICLE_HPOFF
  1061. fHealth := readFloat(hGTA, dwAddr)
  1062. if(ErrorLevel) {
  1063. ErrorLevel := ERROR_READ_MEMORY
  1064. return -1
  1065. }
  1066.  
  1067. ErrorLevel := ERROR_OK
  1068. return Round(fHealth)
  1069. }
  1070.  
  1071. ; 1=car, 2=boat, 3=train, 4=motorbike, 5=plane, 6=bike
  1072. ; 0 on error
  1073. getVehicleType() {
  1074. if(!checkHandles())
  1075. return 0
  1076.  
  1077. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1078. if(ErrorLevel) {
  1079. ErrorLevel := ERROR_READ_MEMORY
  1080. return 0
  1081. }
  1082.  
  1083. if(!dwAddr)
  1084. return 0
  1085.  
  1086. cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_TYPE, 1, "Char")
  1087. if(ErrorLevel) {
  1088. ErrorLevel := ERROR_READ_MEMORY
  1089. return 0
  1090. }
  1091.  
  1092. ErrorLevel := ERROR_OK
  1093. if(!cVal)
  1094. {
  1095. mid := getVehicleModelId()
  1096. Loop % oAirplaneModels.MaxIndex()
  1097. {
  1098. if(oAirplaneModels[A_Index]==mid)
  1099. return 5
  1100. }
  1101. return 1
  1102. }
  1103. else if(cVal==5)
  1104. return 2
  1105. else if(cVal==6)
  1106. return 3
  1107. else if(cVal==9)
  1108. {
  1109. mid := getVehicleModelId()
  1110. Loop % oBikeModels.MaxIndex()
  1111. {
  1112. if(oBikeModels[A_Index]==mid)
  1113. return 6
  1114. }
  1115. return 4
  1116. }
  1117. return 0
  1118. }
  1119.  
  1120. getVehicleModelId() {
  1121. if(!checkHandles())
  1122. return 0
  1123.  
  1124. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1125. if(ErrorLevel) {
  1126. ErrorLevel := ERROR_READ_MEMORY
  1127. return 0
  1128. }
  1129.  
  1130. if(!dwAddr)
  1131. return 0
  1132.  
  1133. sVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_MODEL, 2, "Short")
  1134. if(ErrorLevel) {
  1135. ErrorLevel := ERROR_READ_MEMORY
  1136. return 0
  1137. }
  1138.  
  1139. ErrorLevel := ERROR_OK
  1140. return sVal
  1141. }
  1142.  
  1143. getVehicleModelName() {
  1144. id:=getVehicleModelId()
  1145. if(id>400 && id <611)
  1146. {
  1147. return ovehicleNames[id-399]
  1148. }
  1149. return ""
  1150. }
  1151.  
  1152. getVehicleLightState() {
  1153. if(!checkHandles())
  1154. return -1
  1155.  
  1156. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1157. if(ErrorLevel) {
  1158. ErrorLevel := ERROR_READ_MEMORY
  1159. return -1
  1160. }
  1161.  
  1162. if(!dwAddr)
  1163. return -1
  1164.  
  1165. dwVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_LIGHTSTATE, 4, "Int")
  1166. if(ErrorLevel) {
  1167. ErrorLevel := ERROR_READ_MEMORY
  1168. return -1
  1169. }
  1170.  
  1171. ErrorLevel := ERROR_OK
  1172. return (dwVal>0)
  1173. }
  1174.  
  1175.  
  1176. getVehicleEngineState() {
  1177. if(!checkHandles())
  1178. return -1
  1179.  
  1180. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1181. if(ErrorLevel) {
  1182. ErrorLevel := ERROR_READ_MEMORY
  1183. return -1
  1184. }
  1185.  
  1186. if(!dwAddr)
  1187. return -1
  1188.  
  1189. cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_ENGINESTATE, 1, "Char")
  1190. if(ErrorLevel) {
  1191. ErrorLevel := ERROR_READ_MEMORY
  1192. return -1
  1193. }
  1194.  
  1195. ErrorLevel := ERROR_OK
  1196. return (cVal==24 || cVal==56 || cVal==88 || cVal==120)
  1197. }
  1198.  
  1199.  
  1200. getVehicleLockState() {
  1201. if(!checkHandles())
  1202. return -1
  1203.  
  1204. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1205. if(ErrorLevel) {
  1206. ErrorLevel := ERROR_READ_MEMORY
  1207. return -1
  1208. }
  1209.  
  1210. if(!dwAddr)
  1211. return -1
  1212.  
  1213. dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DOORSTATE)
  1214. if(ErrorLevel) {
  1215. ErrorLevel := ERROR_READ_MEMORY
  1216. return -1
  1217. }
  1218.  
  1219. ErrorLevel := ERROR_OK
  1220. return (dwVal==2)
  1221. }
  1222.  
  1223. GetVehicleSpeed()
  1224. {
  1225. if(!checkHandles())
  1226. return -1
  1227.  
  1228. dwAddr := readDWORD(hGTA,ADDR_VEHICLE_CVEH)
  1229. if(ErrorLevel) {
  1230. ErrorLevel := ERROR_READ_MEMORY
  1231. return -1
  1232. }
  1233. SpeedX := readFloat(hGTA, dwAddr+ADDR_VEHICLE_SPEED_X)
  1234. if(ErrorLevel) {
  1235. ErrorLevel := ERROR_READ_MEMORY
  1236. return -1
  1237. }
  1238. SpeedY := readFloat(hGTA, dwAddr+ADDR_VEHICLE_SPEED_Y)
  1239. if(ErrorLevel) {
  1240. ErrorLevel := ERROR_READ_MEMORY
  1241. return -1
  1242. }
  1243. SpeedZ := readFloat(hGTA, dwAddr+ADDR_VEHICLE_SPEED_Z)
  1244. if(ErrorLevel) {
  1245. ErrorLevel := ERROR_READ_MEMORY
  1246. return -1
  1247. }
  1248. SpeedX := (SpeedX*145)**2
  1249. SpeedY := (SpeedY*145)**2
  1250. SpeedZ := (SpeedZ*145)**2
  1251. Speed := Sqrt(SpeedX+SpeedY+SpeedZ)
  1252. Speed := Round(Speed)
  1253. Speed *= 0.958
  1254. return Speed
  1255. }
  1256.  
  1257. ; ##### Positionsbestimmung #####
  1258. getCoordinates() {
  1259. if(!checkHandles())
  1260. return ""
  1261.  
  1262. fX := readFloat(hGTA, ADDR_POSITION_X)
  1263. if(ErrorLevel) {
  1264. ErrorLevel := ERROR_READ_MEMORY
  1265. return ""
  1266. }
  1267.  
  1268. fY := readFloat(hGTA, ADDR_POSITION_Y)
  1269. if(ErrorLevel) {
  1270. ErrorLevel := ERROR_READ_MEMORY
  1271. return ""
  1272. }
  1273.  
  1274. fZ := readFloat(hGTA, ADDR_POSITION_Z)
  1275. if(ErrorLevel) {
  1276. ErrorLevel := ERROR_READ_MEMORY
  1277. return ""
  1278. }
  1279.  
  1280. ErrorLevel := ERROR_OK
  1281. return [fX, fY, fZ]
  1282. }
  1283.  
  1284. GetPlayerPos(ByRef fX,ByRef fY,ByRef fZ) {
  1285. if(!checkHandles())
  1286. return 0
  1287.  
  1288. fX := readFloat(hGTA, ADDR_POSITION_X)
  1289. if(ErrorLevel) {
  1290. ErrorLevel := ERROR_READ_MEMORY
  1291. return 0
  1292. }
  1293.  
  1294. fY := readFloat(hGTA, ADDR_POSITION_Y)
  1295. if(ErrorLevel) {
  1296. ErrorLevel := ERROR_READ_MEMORY
  1297. return 0
  1298. }
  1299.  
  1300. fZ := readFloat(hGTA, ADDR_POSITION_Z)
  1301. if(ErrorLevel) {
  1302. ErrorLevel := ERROR_READ_MEMORY
  1303. return 0
  1304. }
  1305.  
  1306. ErrorLevel := ERROR_OK
  1307. }
  1308.  
  1309. initZonesAndCities() {
  1310. AddCity("Las Venturas", 685.0, 476.093, -500.0, 3000.0, 3000.0, 500.0)
  1311. AddCity("San Fierro", -3000.0, -742.306, -500.0, -1270.53, 1530.24, 500.0)
  1312. AddCity("San Fierro", -1270.53, -402.481, -500.0, -1038.45, 832.495, 500.0)
  1313. AddCity("San Fierro", -1038.45, -145.539, -500.0, -897.546, 376.632, 500.0)
  1314. AddCity("Los Santos", 480.0, -3000.0, -500.0, 3000.0, -850.0, 500.0)
  1315. AddCity("Los Santos", 80.0, -2101.61, -500.0, 1075.0, -1239.61, 500.0)
  1316. AddCity("Tierra Robada", -1213.91, 596.349, -242.99, -480.539, 1659.68, 900.0)
  1317. AddCity("Red County", -1213.91, -768.027, -242.99, 2997.06, 596.349, 900.0)
  1318. AddCity("Flint County", -1213.91, -2892.97, -242.99, 44.6147, -768.027, 900.0)
  1319. AddCity("Whetstone", -2997.47, -2892.97, -242.99, -1213.91, -1115.58, 900.0)
  1320.  
  1321. AddZone("Avispa Country Club", -2667.810, -302.135, -28.831, -2646.400, -262.320, 71.169)
  1322. AddZone("Easter Bay Airport", -1315.420, -405.388, 15.406, -1264.400, -209.543, 25.406)
  1323. AddZone("Avispa Country Club", -2550.040, -355.493, 0.000, -2470.040, -318.493, 39.700)
  1324. AddZone("Easter Bay Airport", -1490.330, -209.543, 15.406, -1264.400, -148.388, 25.406)
  1325. AddZone("Garcia", -2395.140, -222.589, -5.3, -2354.090, -204.792, 200.000)
  1326. AddZone("Shady Cabin", -1632.830, -2263.440, -3.0, -1601.330, -2231.790, 200.000)
  1327. AddZone("East Los Santos", 2381.680, -1494.030, -89.084, 2421.030, -1454.350, 110.916)
  1328. AddZone("LVA Freight Depot", 1236.630, 1163.410, -89.084, 1277.050, 1203.280, 110.916)
  1329. AddZone("Blackfield Intersection", 1277.050, 1044.690, -89.084, 1315.350, 1087.630, 110.916)
  1330. AddZone("Avispa Country Club", -2470.040, -355.493, 0.000, -2270.040, -318.493, 46.100)
  1331. AddZone("Temple", 1252.330, -926.999, -89.084, 1357.000, -910.170, 110.916)
  1332. AddZone("Unity Station", 1692.620, -1971.800, -20.492, 1812.620, -1932.800, 79.508)
  1333. AddZone("LVA Freight Depot", 1315.350, 1044.690, -89.084, 1375.600, 1087.630, 110.916)
  1334. AddZone("Los Flores", 2581.730, -1454.350, -89.084, 2632.830, -1393.420, 110.916)
  1335. AddZone("Starfish Casino", 2437.390, 1858.100, -39.084, 2495.090, 1970.850, 60.916)
  1336. AddZone("Easter Bay Chemicals", -1132.820, -787.391, 0.000, -956.476, -768.027, 200.000)
  1337. AddZone("Downtown Los Santos", 1370.850, -1170.870, -89.084, 1463.900, -1130.850, 110.916)
  1338. AddZone("Esplanade East", -1620.300, 1176.520, -4.5, -1580.010, 1274.260, 200.000)
  1339. AddZone("Market Station", 787.461, -1410.930, -34.126, 866.009, -1310.210, 65.874)
  1340. AddZone("Linden Station", 2811.250, 1229.590, -39.594, 2861.250, 1407.590, 60.406)
  1341. AddZone("Montgomery Intersection", 1582.440, 347.457, 0.000, 1664.620, 401.750, 200.000)
  1342. AddZone("Frederick Bridge", 2759.250, 296.501, 0.000, 2774.250, 594.757, 200.000)
  1343. AddZone("Yellow Bell Station", 1377.480, 2600.430, -21.926, 1492.450, 2687.360, 78.074)
  1344. AddZone("Downtown Los Santos", 1507.510, -1385.210, 110.916, 1582.550, -1325.310, 335.916)
  1345. AddZone("Jefferson", 2185.330, -1210.740, -89.084, 2281.450, -1154.590, 110.916)
  1346. AddZone("Mulholland", 1318.130, -910.170, -89.084, 1357.000, -768.027, 110.916)
  1347. AddZone("Avispa Country Club", -2361.510, -417.199, 0.000, -2270.040, -355.493, 200.000)
  1348. AddZone("Jefferson", 1996.910, -1449.670, -89.084, 2056.860, -1350.720, 110.916)
  1349. AddZone("Julius Thruway West", 1236.630, 2142.860, -89.084, 1297.470, 2243.230, 110.916)
  1350. AddZone("Jefferson", 2124.660, -1494.030, -89.084, 2266.210, -1449.670, 110.916)
  1351. AddZone("Julius Thruway North", 1848.400, 2478.490, -89.084, 1938.800, 2553.490, 110.916)
  1352. AddZone("Rodeo", 422.680, -1570.200, -89.084, 466.223, -1406.050, 110.916)
  1353. AddZone("Cranberry Station", -2007.830, 56.306, 0.000, -1922.000, 224.782, 100.000)
  1354. AddZone("Downtown Los Santos", 1391.050, -1026.330, -89.084, 1463.900, -926.999, 110.916)
  1355. AddZone("Redsands West", 1704.590, 2243.230, -89.084, 1777.390, 2342.830, 110.916)
  1356. AddZone("Little Mexico", 1758.900, -1722.260, -89.084, 1812.620, -1577.590, 110.916)
  1357. AddZone("Blackfield Intersection", 1375.600, 823.228, -89.084, 1457.390, 919.447, 110.916)
  1358. AddZone("Los Santos International", 1974.630, -2394.330, -39.084, 2089.000, -2256.590, 60.916)
  1359. AddZone("Beacon Hill", -399.633, -1075.520, -1.489, -319.033, -977.516, 198.511)
  1360. AddZone("Rodeo", 334.503, -1501.950, -89.084, 422.680, -1406.050, 110.916)
  1361. AddZone("Richman", 225.165, -1369.620, -89.084, 334.503, -1292.070, 110.916)
  1362. AddZone("Downtown Los Santos", 1724.760, -1250.900, -89.084, 1812.620, -1150.870, 110.916)
  1363. AddZone("The Strip", 2027.400, 1703.230, -89.084, 2137.400, 1783.230, 110.916)
  1364. AddZone("Downtown Los Santos", 1378.330, -1130.850, -89.084, 1463.900, -1026.330, 110.916)
  1365. AddZone("Blackfield Intersection", 1197.390, 1044.690, -89.084, 1277.050, 1163.390, 110.916)
  1366. AddZone("Conference Center", 1073.220, -1842.270, -89.084, 1323.900, -1804.210, 110.916)
  1367. AddZone("Montgomery", 1451.400, 347.457, -6.1, 1582.440, 420.802, 200.000)
  1368. AddZone("Foster Valley", -2270.040, -430.276, -1.2, -2178.690, -324.114, 200.000)
  1369. AddZone("Blackfield Chapel", 1325.600, 596.349, -89.084, 1375.600, 795.010, 110.916)
  1370. AddZone("Los Santos International", 2051.630, -2597.260, -39.084, 2152.450, -2394.330, 60.916)
  1371. AddZone("Mulholland", 1096.470, -910.170, -89.084, 1169.130, -768.027, 110.916)
  1372. AddZone("Yellow Bell Gol Course", 1457.460, 2723.230, -89.084, 1534.560, 2863.230, 110.916)
  1373. AddZone("The Strip", 2027.400, 1783.230, -89.084, 2162.390, 1863.230, 110.916)
  1374. AddZone("Jefferson", 2056.860, -1210.740, -89.084, 2185.330, -1126.320, 110.916)
  1375. AddZone("Mulholland", 952.604, -937.184, -89.084, 1096.470, -860.619, 110.916)
  1376. AddZone("Aldea Malvada", -1372.140, 2498.520, 0.000, -1277.590, 2615.350, 200.000)
  1377. AddZone("Las Colinas", 2126.860, -1126.320, -89.084, 2185.330, -934.489, 110.916)
  1378. AddZone("Las Colinas", 1994.330, -1100.820, -89.084, 2056.860, -920.815, 110.916)
  1379. AddZone("Richman", 647.557, -954.662, -89.084, 768.694, -860.619, 110.916)
  1380. AddZone("LVA Freight Depot", 1277.050, 1087.630, -89.084, 1375.600, 1203.280, 110.916)
  1381. AddZone("Julius Thruway North", 1377.390, 2433.230, -89.084, 1534.560, 2507.230, 110.916)
  1382. AddZone("Willowfield", 2201.820, -2095.000, -89.084, 2324.000, -1989.900, 110.916)
  1383. AddZone("Julius Thruway North", 1704.590, 2342.830, -89.084, 1848.400, 2433.230, 110.916)
  1384. AddZone("Temple", 1252.330, -1130.850, -89.084, 1378.330, -1026.330, 110.916)
  1385. AddZone("Little Mexico", 1701.900, -1842.270, -89.084, 1812.620, -1722.260, 110.916)
  1386. AddZone("Queens", -2411.220, 373.539, 0.000, -2253.540, 458.411, 200.000)
  1387. AddZone("Las Venturas Airport", 1515.810, 1586.400, -12.500, 1729.950, 1714.560, 87.500)
  1388. AddZone("Richman", 225.165, -1292.070, -89.084, 466.223, -1235.070, 110.916)
  1389. AddZone("Temple", 1252.330, -1026.330, -89.084, 1391.050, -926.999, 110.916)
  1390. AddZone("East Los Santos", 2266.260, -1494.030, -89.084, 2381.680, -1372.040, 110.916)
  1391. AddZone("Julius Thruway East", 2623.180, 943.235, -89.084, 2749.900, 1055.960, 110.916)
  1392. AddZone("Willowfield", 2541.700, -1941.400, -89.084, 2703.580, -1852.870, 110.916)
  1393. AddZone("Las Colinas", 2056.860, -1126.320, -89.084, 2126.860, -920.815, 110.916)
  1394. AddZone("Julius Thruway East", 2625.160, 2202.760, -89.084, 2685.160, 2442.550, 110.916)
  1395. AddZone("Rodeo", 225.165, -1501.950, -89.084, 334.503, -1369.620, 110.916)
  1396. AddZone("Las Brujas", -365.167, 2123.010, -3.0, -208.570, 2217.680, 200.000)
  1397. AddZone("Julius Thruway East", 2536.430, 2442.550, -89.084, 2685.160, 2542.550, 110.916)
  1398. AddZone("Rodeo", 334.503, -1406.050, -89.084, 466.223, -1292.070, 110.916)
  1399. AddZone("Vinewood", 647.557, -1227.280, -89.084, 787.461, -1118.280, 110.916)
  1400. AddZone("Rodeo", 422.680, -1684.650, -89.084, 558.099, -1570.200, 110.916)
  1401. AddZone("Julius Thruway North", 2498.210, 2542.550, -89.084, 2685.160, 2626.550, 110.916)
  1402. AddZone("Downtown Los Santos", 1724.760, -1430.870, -89.084, 1812.620, -1250.900, 110.916)
  1403. AddZone("Rodeo", 225.165, -1684.650, -89.084, 312.803, -1501.950, 110.916)
  1404. AddZone("Jefferson", 2056.860, -1449.670, -89.084, 2266.210, -1372.040, 110.916)
  1405. AddZone("Hampton Barns", 603.035, 264.312, 0.000, 761.994, 366.572, 200.000)
  1406. AddZone("Temple", 1096.470, -1130.840, -89.084, 1252.330, -1026.330, 110.916)
  1407. AddZone("Kincaid Bridge", -1087.930, 855.370, -89.084, -961.950, 986.281, 110.916)
  1408. AddZone("Verona Beach", 1046.150, -1722.260, -89.084, 1161.520, -1577.590, 110.916)
  1409. AddZone("Commerce", 1323.900, -1722.260, -89.084, 1440.900, -1577.590, 110.916)
  1410. AddZone("Mulholland", 1357.000, -926.999, -89.084, 1463.900, -768.027, 110.916)
  1411. AddZone("Rodeo", 466.223, -1570.200, -89.084, 558.099, -1385.070, 110.916)
  1412. AddZone("Mulholland", 911.802, -860.619, -89.084, 1096.470, -768.027, 110.916)
  1413. AddZone("Mulholland", 768.694, -954.662, -89.084, 952.604, -860.619, 110.916)
  1414. AddZone("Julius Thruway South", 2377.390, 788.894, -89.084, 2537.390, 897.901, 110.916)
  1415. AddZone("Idlewood", 1812.620, -1852.870, -89.084, 1971.660, -1742.310, 110.916)
  1416. AddZone("Ocean Docks", 2089.000, -2394.330, -89.084, 2201.820, -2235.840, 110.916)
  1417. AddZone("Commerce", 1370.850, -1577.590, -89.084, 1463.900, -1384.950, 110.916)
  1418. AddZone("Julius Thruway North", 2121.400, 2508.230, -89.084, 2237.400, 2663.170, 110.916)
  1419. AddZone("Temple", 1096.470, -1026.330, -89.084, 1252.330, -910.170, 110.916)
  1420. AddZone("Glen Park", 1812.620, -1449.670, -89.084, 1996.910, -1350.720, 110.916)
  1421. AddZone("Easter Bay Airport", -1242.980, -50.096, 0.000, -1213.910, 578.396, 200.000)
  1422. AddZone("Martin Bridge", -222.179, 293.324, 0.000, -122.126, 476.465, 200.000)
  1423. AddZone("The Strip", 2106.700, 1863.230, -89.084, 2162.390, 2202.760, 110.916)
  1424. AddZone("Willowfield", 2541.700, -2059.230, -89.084, 2703.580, -1941.400, 110.916)
  1425. AddZone("Marina", 807.922, -1577.590, -89.084, 926.922, -1416.250, 110.916)
  1426. AddZone("Las Venturas Airport", 1457.370, 1143.210, -89.084, 1777.400, 1203.280, 110.916)
  1427. AddZone("Idlewood", 1812.620, -1742.310, -89.084, 1951.660, -1602.310, 110.916)
  1428. AddZone("Esplanade East", -1580.010, 1025.980, -6.1, -1499.890, 1274.260, 200.000)
  1429. AddZone("Downtown Los Santos", 1370.850, -1384.950, -89.084, 1463.900, -1170.870, 110.916)
  1430. AddZone("The Mako Span", 1664.620, 401.750, 0.000, 1785.140, 567.203, 200.000)
  1431. AddZone("Rodeo", 312.803, -1684.650, -89.084, 422.680, -1501.950, 110.916)
  1432. AddZone("Pershing Square", 1440.900, -1722.260, -89.084, 1583.500, -1577.590, 110.916)
  1433. AddZone("Mulholland", 687.802, -860.619, -89.084, 911.802, -768.027, 110.916)
  1434. AddZone("Gant Bridge", -2741.070, 1490.470, -6.1, -2616.400, 1659.680, 200.000)
  1435. AddZone("Las Colinas", 2185.330, -1154.590, -89.084, 2281.450, -934.489, 110.916)
  1436. AddZone("Mulholland", 1169.130, -910.170, -89.084, 1318.130, -768.027, 110.916)
  1437. AddZone("Julius Thruway North", 1938.800, 2508.230, -89.084, 2121.400, 2624.230, 110.916)
  1438. AddZone("Commerce", 1667.960, -1577.590, -89.084, 1812.620, -1430.870, 110.916)
  1439. AddZone("Rodeo", 72.648, -1544.170, -89.084, 225.165, -1404.970, 110.916)
  1440. AddZone("Roca Escalante", 2536.430, 2202.760, -89.084, 2625.160, 2442.550, 110.916)
  1441. AddZone("Rodeo", 72.648, -1684.650, -89.084, 225.165, -1544.170, 110.916)
  1442. AddZone("Market", 952.663, -1310.210, -89.084, 1072.660, -1130.850, 110.916)
  1443. AddZone("Las Colinas", 2632.740, -1135.040, -89.084, 2747.740, -945.035, 110.916)
  1444. AddZone("Mulholland", 861.085, -674.885, -89.084, 1156.550, -600.896, 110.916)
  1445. AddZone("King's", -2253.540, 373.539, -9.1, -1993.280, 458.411, 200.000)
  1446. AddZone("Redsands East", 1848.400, 2342.830, -89.084, 2011.940, 2478.490, 110.916)
  1447. AddZone("Downtown", -1580.010, 744.267, -6.1, -1499.890, 1025.980, 200.000)
  1448. AddZone("Conference Center", 1046.150, -1804.210, -89.084, 1323.900, -1722.260, 110.916)
  1449. AddZone("Richman", 647.557, -1118.280, -89.084, 787.461, -954.662, 110.916)
  1450. AddZone("Ocean Flats", -2994.490, 277.411, -9.1, -2867.850, 458.411, 200.000)
  1451. AddZone("Greenglass College", 964.391, 930.890, -89.084, 1166.530, 1044.690, 110.916)
  1452. AddZone("Glen Park", 1812.620, -1100.820, -89.084, 1994.330, -973.380, 110.916)
  1453. AddZone("LVA Freight Depot", 1375.600, 919.447, -89.084, 1457.370, 1203.280, 110.916)
  1454. AddZone("Regular Tom", -405.770, 1712.860, -3.0, -276.719, 1892.750, 200.000)
  1455. AddZone("Verona Beach", 1161.520, -1722.260, -89.084, 1323.900, -1577.590, 110.916)
  1456. AddZone("East Los Santos", 2281.450, -1372.040, -89.084, 2381.680, -1135.040, 110.916)
  1457. AddZone("Caligula's Palace", 2137.400, 1703.230, -89.084, 2437.390, 1783.230, 110.916)
  1458. AddZone("Idlewood", 1951.660, -1742.310, -89.084, 2124.660, -1602.310, 110.916)
  1459. AddZone("Pilgrim", 2624.400, 1383.230, -89.084, 2685.160, 1783.230, 110.916)
  1460. AddZone("Idlewood", 2124.660, -1742.310, -89.084, 2222.560, -1494.030, 110.916)
  1461. AddZone("Queens", -2533.040, 458.411, 0.000, -2329.310, 578.396, 200.000)
  1462. AddZone("Downtown", -1871.720, 1176.420, -4.5, -1620.300, 1274.260, 200.000)
  1463. AddZone("Commerce", 1583.500, -1722.260, -89.084, 1758.900, -1577.590, 110.916)
  1464. AddZone("East Los Santos", 2381.680, -1454.350, -89.084, 2462.130, -1135.040, 110.916)
  1465. AddZone("Marina", 647.712, -1577.590, -89.084, 807.922, -1416.250, 110.916)
  1466. AddZone("Richman", 72.648, -1404.970, -89.084, 225.165, -1235.070, 110.916)
  1467. AddZone("Vinewood", 647.712, -1416.250, -89.084, 787.461, -1227.280, 110.916)
  1468. AddZone("East Los Santos", 2222.560, -1628.530, -89.084, 2421.030, -1494.030, 110.916)
  1469. AddZone("Rodeo", 558.099, -1684.650, -89.084, 647.522, -1384.930, 110.916)
  1470. AddZone("Easter Tunnel", -1709.710, -833.034, -1.5, -1446.010, -730.118, 200.000)
  1471. AddZone("Rodeo", 466.223, -1385.070, -89.084, 647.522, -1235.070, 110.916)
  1472. AddZone("Redsands East", 1817.390, 2202.760, -89.084, 2011.940, 2342.830, 110.916)
  1473. AddZone("The Clown's Pocket", 2162.390, 1783.230, -89.084, 2437.390, 1883.230, 110.916)
  1474. AddZone("Idlewood", 1971.660, -1852.870, -89.084, 2222.560, -1742.310, 110.916)
  1475. AddZone("Montgomery Intersection", 1546.650, 208.164, 0.000, 1745.830, 347.457, 200.000)
  1476. AddZone("Willowfield", 2089.000, -2235.840, -89.084, 2201.820, -1989.900, 110.916)
  1477. AddZone("Temple", 952.663, -1130.840, -89.084, 1096.470, -937.184, 110.916)
  1478. AddZone("Prickle Pine", 1848.400, 2553.490, -89.084, 1938.800, 2863.230, 110.916)
  1479. AddZone("Los Santos International", 1400.970, -2669.260, -39.084, 2189.820, -2597.260, 60.916)
  1480. AddZone("Garver Bridge", -1213.910, 950.022, -89.084, -1087.930, 1178.930, 110.916)
  1481. AddZone("Garver Bridge", -1339.890, 828.129, -89.084, -1213.910, 1057.040, 110.916)
  1482. AddZone("Kincaid Bridge", -1339.890, 599.218, -89.084, -1213.910, 828.129, 110.916)
  1483. AddZone("Kincaid Bridge", -1213.910, 721.111, -89.084, -1087.930, 950.022, 110.916)
  1484. AddZone("Verona Beach", 930.221, -2006.780, -89.084, 1073.220, -1804.210, 110.916)
  1485. AddZone("Verdant Bluffs", 1073.220, -2006.780, -89.084, 1249.620, -1842.270, 110.916)
  1486. AddZone("Vinewood", 787.461, -1130.840, -89.084, 952.604, -954.662, 110.916)
  1487. AddZone("Vinewood", 787.461, -1310.210, -89.084, 952.663, -1130.840, 110.916)
  1488. AddZone("Commerce", 1463.900, -1577.590, -89.084, 1667.960, -1430.870, 110.916)
  1489. AddZone("Market", 787.461, -1416.250, -89.084, 1072.660, -1310.210, 110.916)
  1490. AddZone("Rockshore West", 2377.390, 596.349, -89.084, 2537.390, 788.894, 110.916)
  1491. AddZone("Julius Thruway North", 2237.400, 2542.550, -89.084, 2498.210, 2663.170, 110.916)
  1492. AddZone("East Beach", 2632.830, -1668.130, -89.084, 2747.740, -1393.420, 110.916)
  1493. AddZone("Fallow Bridge", 434.341, 366.572, 0.000, 603.035, 555.680, 200.000)
  1494. AddZone("Willowfield", 2089.000, -1989.900, -89.084, 2324.000, -1852.870, 110.916)
  1495. AddZone("Chinatown", -2274.170, 578.396, -7.6, -2078.670, 744.170, 200.000)
  1496. AddZone("El Castillo del Diablo", -208.570, 2337.180, 0.000, 8.430, 2487.180, 200.000)
  1497. AddZone("Ocean Docks", 2324.000, -2145.100, -89.084, 2703.580, -2059.230, 110.916)
  1498. AddZone("Easter Bay Chemicals", -1132.820, -768.027, 0.000, -956.476, -578.118, 200.000)
  1499. AddZone("The Visage", 1817.390, 1703.230, -89.084, 2027.400, 1863.230, 110.916)
  1500. AddZone("Ocean Flats", -2994.490, -430.276, -1.2, -2831.890, -222.589, 200.000)
  1501. AddZone("Richman", 321.356, -860.619, -89.084, 687.802, -768.027, 110.916)
  1502. AddZone("Green Palms", 176.581, 1305.450, -3.0, 338.658, 1520.720, 200.000)
  1503. AddZone("Richman", 321.356, -768.027, -89.084, 700.794, -674.885, 110.916)
  1504. AddZone("Starfish Casino", 2162.390, 1883.230, -89.084, 2437.390, 2012.180, 110.916)
  1505. AddZone("East Beach", 2747.740, -1668.130, -89.084, 2959.350, -1498.620, 110.916)
  1506. AddZone("Jefferson", 2056.860, -1372.040, -89.084, 2281.450, -1210.740, 110.916)
  1507. AddZone("Downtown Los Santos", 1463.900, -1290.870, -89.084, 1724.760, -1150.870, 110.916)
  1508. AddZone("Downtown Los Santos", 1463.900, -1430.870, -89.084, 1724.760, -1290.870, 110.916)
  1509. AddZone("Garver Bridge", -1499.890, 696.442, -179.615, -1339.890, 925.353, 20.385)
  1510. AddZone("Julius Thruway South", 1457.390, 823.228, -89.084, 2377.390, 863.229, 110.916)
  1511. AddZone("East Los Santos", 2421.030, -1628.530, -89.084, 2632.830, -1454.350, 110.916)
  1512. AddZone("Greenglass College", 964.391, 1044.690, -89.084, 1197.390, 1203.220, 110.916)
  1513. AddZone("Las Colinas", 2747.740, -1120.040, -89.084, 2959.350, -945.035, 110.916)
  1514. AddZone("Mulholland", 737.573, -768.027, -89.084, 1142.290, -674.885, 110.916)
  1515. AddZone("Ocean Docks", 2201.820, -2730.880, -89.084, 2324.000, -2418.330, 110.916)
  1516. AddZone("East Los Santos", 2462.130, -1454.350, -89.084, 2581.730, -1135.040, 110.916)
  1517. AddZone("Ganton", 2222.560, -1722.330, -89.084, 2632.830, -1628.530, 110.916)
  1518. AddZone("Avispa Country Club", -2831.890, -430.276, -6.1, -2646.400, -222.589, 200.000)
  1519. AddZone("Willowfield", 1970.620, -2179.250, -89.084, 2089.000, -1852.870, 110.916)
  1520. AddZone("Esplanade North", -1982.320, 1274.260, -4.5, -1524.240, 1358.900, 200.000)
  1521. AddZone("The High Roller", 1817.390, 1283.230, -89.084, 2027.390, 1469.230, 110.916)
  1522. AddZone("Ocean Docks", 2201.820, -2418.330, -89.084, 2324.000, -2095.000, 110.916)
  1523. AddZone("Last Dime Motel", 1823.080, 596.349, -89.084, 1997.220, 823.228, 110.916)
  1524. AddZone("Bayside Marina", -2353.170, 2275.790, 0.000, -2153.170, 2475.790, 200.000)
  1525. AddZone("King's", -2329.310, 458.411, -7.6, -1993.280, 578.396, 200.000)
  1526. AddZone("El Corona", 1692.620, -2179.250, -89.084, 1812.620, -1842.270, 110.916)
  1527. AddZone("Blackfield Chapel", 1375.600, 596.349, -89.084, 1558.090, 823.228, 110.916)
  1528. AddZone("The Pink Swan", 1817.390, 1083.230, -89.084, 2027.390, 1283.230, 110.916)
  1529. AddZone("Julius Thruway West", 1197.390, 1163.390, -89.084, 1236.630, 2243.230, 110.916)
  1530. AddZone("Los Flores", 2581.730, -1393.420, -89.084, 2747.740, -1135.040, 110.916)
  1531. AddZone("The Visage", 1817.390, 1863.230, -89.084, 2106.700, 2011.830, 110.916)
  1532. AddZone("Prickle Pine", 1938.800, 2624.230, -89.084, 2121.400, 2861.550, 110.916)
  1533. AddZone("Verona Beach", 851.449, -1804.210, -89.084, 1046.150, -1577.590, 110.916)
  1534. AddZone("Robada Intersection", -1119.010, 1178.930, -89.084, -862.025, 1351.450, 110.916)
  1535. AddZone("Linden Side", 2749.900, 943.235, -89.084, 2923.390, 1198.990, 110.916)
  1536. AddZone("Ocean Docks", 2703.580, -2302.330, -89.084, 2959.350, -2126.900, 110.916)
  1537. AddZone("Willowfield", 2324.000, -2059.230, -89.084, 2541.700, -1852.870, 110.916)
  1538. AddZone("King's", -2411.220, 265.243, -9.1, -1993.280, 373.539, 200.000)
  1539. AddZone("Commerce", 1323.900, -1842.270, -89.084, 1701.900, -1722.260, 110.916)
  1540. AddZone("Mulholland", 1269.130, -768.027, -89.084, 1414.070, -452.425, 110.916)
  1541. AddZone("Marina", 647.712, -1804.210, -89.084, 851.449, -1577.590, 110.916)
  1542. AddZone("Battery Point", -2741.070, 1268.410, -4.5, -2533.040, 1490.470, 200.000)
  1543. AddZone("The Four Dragons Casino", 1817.390, 863.232, -89.084, 2027.390, 1083.230, 110.916)
  1544. AddZone("Blackfield", 964.391, 1203.220, -89.084, 1197.390, 1403.220, 110.916)
  1545. AddZone("Julius Thruway North", 1534.560, 2433.230, -89.084, 1848.400, 2583.230, 110.916)
  1546. AddZone("Yellow Bell Gol Course", 1117.400, 2723.230, -89.084, 1457.460, 2863.230, 110.916)
  1547. AddZone("Idlewood", 1812.620, -1602.310, -89.084, 2124.660, -1449.670, 110.916)
  1548. AddZone("Redsands West", 1297.470, 2142.860, -89.084, 1777.390, 2243.230, 110.916)
  1549. AddZone("Doherty", -2270.040, -324.114, -1.2, -1794.920, -222.589, 200.000)
  1550. AddZone("Hilltop Farm", 967.383, -450.390, -3.0, 1176.780, -217.900, 200.000)
  1551. AddZone("Las Barrancas", -926.130, 1398.730, -3.0, -719.234, 1634.690, 200.000)
  1552. AddZone("Pirates in Men's Pants", 1817.390, 1469.230, -89.084, 2027.400, 1703.230, 110.916)
  1553. AddZone("City Hall", -2867.850, 277.411, -9.1, -2593.440, 458.411, 200.000)
  1554. AddZone("Avispa Country Club", -2646.400, -355.493, 0.000, -2270.040, -222.589, 200.000)
  1555. AddZone("The Strip", 2027.400, 863.229, -89.084, 2087.390, 1703.230, 110.916)
  1556. AddZone("Hashbury", -2593.440, -222.589, -1.0, -2411.220, 54.722, 200.000)
  1557. AddZone("Los Santos International", 1852.000, -2394.330, -89.084, 2089.000, -2179.250, 110.916)
  1558. AddZone("Whitewood Estates", 1098.310, 1726.220, -89.084, 1197.390, 2243.230, 110.916)
  1559. AddZone("Sherman Reservoir", -789.737, 1659.680, -89.084, -599.505, 1929.410, 110.916)
  1560. AddZone("El Corona", 1812.620, -2179.250, -89.084, 1970.620, -1852.870, 110.916)
  1561. AddZone("Downtown", -1700.010, 744.267, -6.1, -1580.010, 1176.520, 200.000)
  1562. AddZone("Foster Valley", -2178.690, -1250.970, 0.000, -1794.920, -1115.580, 200.000)
  1563. AddZone("Las Payasadas", -354.332, 2580.360, 2.0, -133.625, 2816.820, 200.000)
  1564. AddZone("Valle Ocultado", -936.668, 2611.440, 2.0, -715.961, 2847.900, 200.000)
  1565. AddZone("Blackfield Intersection", 1166.530, 795.010, -89.084, 1375.600, 1044.690, 110.916)
  1566. AddZone("Ganton", 2222.560, -1852.870, -89.084, 2632.830, -1722.330, 110.916)
  1567. AddZone("Easter Bay Airport", -1213.910, -730.118, 0.000, -1132.820, -50.096, 200.000)
  1568. AddZone("Redsands East", 1817.390, 2011.830, -89.084, 2106.700, 2202.760, 110.916)
  1569. AddZone("Esplanade East", -1499.890, 578.396, -79.615, -1339.890, 1274.260, 20.385)
  1570. AddZone("Caligula's Palace", 2087.390, 1543.230, -89.084, 2437.390, 1703.230, 110.916)
  1571. AddZone("Royal Casino", 2087.390, 1383.230, -89.084, 2437.390, 1543.230, 110.916)
  1572. AddZone("Richman", 72.648, -1235.070, -89.084, 321.356, -1008.150, 110.916)
  1573. AddZone("Starfish Casino", 2437.390, 1783.230, -89.084, 2685.160, 2012.180, 110.916)
  1574. AddZone("Mulholland", 1281.130, -452.425, -89.084, 1641.130, -290.913, 110.916)
  1575. AddZone("Downtown", -1982.320, 744.170, -6.1, -1871.720, 1274.260, 200.000)
  1576. AddZone("Hankypanky Point", 2576.920, 62.158, 0.000, 2759.250, 385.503, 200.000)
  1577. AddZone("K.A.C.C. Military Fuels", 2498.210, 2626.550, -89.084, 2749.900, 2861.550, 110.916)
  1578. AddZone("Harry Gold Parkway", 1777.390, 863.232, -89.084, 1817.390, 2342.830, 110.916)
  1579. AddZone("Bayside Tunnel", -2290.190, 2548.290, -89.084, -1950.190, 2723.290, 110.916)
  1580. AddZone("Ocean Docks", 2324.000, -2302.330, -89.084, 2703.580, -2145.100, 110.916)
  1581. AddZone("Richman", 321.356, -1044.070, -89.084, 647.557, -860.619, 110.916)
  1582. AddZone("Randolph Industrial Estate", 1558.090, 596.349, -89.084, 1823.080, 823.235, 110.916)
  1583. AddZone("East Beach", 2632.830, -1852.870, -89.084, 2959.350, -1668.130, 110.916)
  1584. AddZone("Flint Water", -314.426, -753.874, -89.084, -106.339, -463.073, 110.916)
  1585. AddZone("Blueberry", 19.607, -404.136, 3.8, 349.607, -220.137, 200.000)
  1586. AddZone("Linden Station", 2749.900, 1198.990, -89.084, 2923.390, 1548.990, 110.916)
  1587. AddZone("Glen Park", 1812.620, -1350.720, -89.084, 2056.860, -1100.820, 110.916)
  1588. AddZone("Downtown", -1993.280, 265.243, -9.1, -1794.920, 578.396, 200.000)
  1589. AddZone("Redsands West", 1377.390, 2243.230, -89.084, 1704.590, 2433.230, 110.916)
  1590. AddZone("Richman", 321.356, -1235.070, -89.084, 647.522, -1044.070, 110.916)
  1591. AddZone("Gant Bridge", -2741.450, 1659.680, -6.1, -2616.400, 2175.150, 200.000)
  1592. AddZone("Lil' Probe Inn", -90.218, 1286.850, -3.0, 153.859, 1554.120, 200.000)
  1593. AddZone("Flint Intersection", -187.700, -1596.760, -89.084, 17.063, -1276.600, 110.916)
  1594. AddZone("Las Colinas", 2281.450, -1135.040, -89.084, 2632.740, -945.035, 110.916)
  1595. AddZone("Sobell Rail Yards", 2749.900, 1548.990, -89.084, 2923.390, 1937.250, 110.916)
  1596. AddZone("The Emerald Isle", 2011.940, 2202.760, -89.084, 2237.400, 2508.230, 110.916)
  1597. AddZone("El Castillo del Diablo", -208.570, 2123.010, -7.6, 114.033, 2337.180, 200.000)
  1598. AddZone("Santa Flora", -2741.070, 458.411, -7.6, -2533.040, 793.411, 200.000)
  1599. AddZone("Playa del Seville", 2703.580, -2126.900, -89.084, 2959.350, -1852.870, 110.916)
  1600. AddZone("Market", 926.922, -1577.590, -89.084, 1370.850, -1416.250, 110.916)
  1601. AddZone("Queens", -2593.440, 54.722, 0.000, -2411.220, 458.411, 200.000)
  1602. AddZone("Pilson Intersection", 1098.390, 2243.230, -89.084, 1377.390, 2507.230, 110.916)
  1603. AddZone("Spinybed", 2121.400, 2663.170, -89.084, 2498.210, 2861.550, 110.916)
  1604. AddZone("Pilgrim", 2437.390, 1383.230, -89.084, 2624.400, 1783.230, 110.916)
  1605. AddZone("Blackfield", 964.391, 1403.220, -89.084, 1197.390, 1726.220, 110.916)
  1606. AddZone("'The Big Ear'", -410.020, 1403.340, -3.0, -137.969, 1681.230, 200.000)
  1607. AddZone("Dillimore", 580.794, -674.885, -9.5, 861.085, -404.790, 200.000)
  1608. AddZone("El Quebrados", -1645.230, 2498.520, 0.000, -1372.140, 2777.850, 200.000)
  1609. AddZone("Esplanade North", -2533.040, 1358.900, -4.5, -1996.660, 1501.210, 200.000)
  1610. AddZone("Easter Bay Airport", -1499.890, -50.096, -1.0, -1242.980, 249.904, 200.000)
  1611. AddZone("Fisher's Lagoon", 1916.990, -233.323, -100.000, 2131.720, 13.800, 200.000)
  1612. AddZone("Mulholland", 1414.070, -768.027, -89.084, 1667.610, -452.425, 110.916)
  1613. AddZone("East Beach", 2747.740, -1498.620, -89.084, 2959.350, -1120.040, 110.916)
  1614. AddZone("San Andreas Sound", 2450.390, 385.503, -100.000, 2759.250, 562.349, 200.000)
  1615. AddZone("Shady Creeks", -2030.120, -2174.890, -6.1, -1820.640, -1771.660, 200.000)
  1616. AddZone("Market", 1072.660, -1416.250, -89.084, 1370.850, -1130.850, 110.916)
  1617. AddZone("Rockshore West", 1997.220, 596.349, -89.084, 2377.390, 823.228, 110.916)
  1618. AddZone("Prickle Pine", 1534.560, 2583.230, -89.084, 1848.400, 2863.230, 110.916)
  1619. AddZone("Easter Basin", -1794.920, -50.096, -1.04, -1499.890, 249.904, 200.000)
  1620. AddZone("Leafy Hollow", -1166.970, -1856.030, 0.000, -815.624, -1602.070, 200.000)
  1621. AddZone("LVA Freight Depot", 1457.390, 863.229, -89.084, 1777.400, 1143.210, 110.916)
  1622. AddZone("Prickle Pine", 1117.400, 2507.230, -89.084, 1534.560, 2723.230, 110.916)
  1623. AddZone("Blueberry", 104.534, -220.137, 2.3, 349.607, 152.236, 200.000)
  1624. AddZone("El Castillo del Diablo", -464.515, 2217.680, 0.000, -208.570, 2580.360, 200.000)
  1625. AddZone("Downtown", -2078.670, 578.396, -7.6, -1499.890, 744.267, 200.000)
  1626. AddZone("Rockshore East", 2537.390, 676.549, -89.084, 2902.350, 943.235, 110.916)
  1627. AddZone("San Fierro Bay", -2616.400, 1501.210, -3.0, -1996.660, 1659.680, 200.000)
  1628. AddZone("Paradiso", -2741.070, 793.411, -6.1, -2533.040, 1268.410, 200.000)
  1629. AddZone("The Camel's Toe", 2087.390, 1203.230, -89.084, 2640.400, 1383.230, 110.916)
  1630. AddZone("Old Venturas Strip", 2162.390, 2012.180, -89.084, 2685.160, 2202.760, 110.916)
  1631. AddZone("Juniper Hill", -2533.040, 578.396, -7.6, -2274.170, 968.369, 200.000)
  1632. AddZone("Juniper Hollow", -2533.040, 968.369, -6.1, -2274.170, 1358.900, 200.000)
  1633. AddZone("Roca Escalante", 2237.400, 2202.760, -89.084, 2536.430, 2542.550, 110.916)
  1634. AddZone("Julius Thruway East", 2685.160, 1055.960, -89.084, 2749.900, 2626.550, 110.916)
  1635. AddZone("Verona Beach", 647.712, -2173.290, -89.084, 930.221, -1804.210, 110.916)
  1636. AddZone("Foster Valley", -2178.690, -599.884, -1.2, -1794.920, -324.114, 200.000)
  1637. AddZone("Arco del Oeste", -901.129, 2221.860, 0.000, -592.090, 2571.970, 200.000)
  1638. AddZone("Fallen Tree", -792.254, -698.555, -5.3, -452.404, -380.043, 200.000)
  1639. AddZone("The Farm", -1209.670, -1317.100, 114.981, -908.161, -787.391, 251.981)
  1640. AddZone("The Sherman Dam", -968.772, 1929.410, -3.0, -481.126, 2155.260, 200.000)
  1641. AddZone("Esplanade North", -1996.660, 1358.900, -4.5, -1524.240, 1592.510, 200.000)
  1642. AddZone("Financial", -1871.720, 744.170, -6.1, -1701.300, 1176.420, 300.000)
  1643. AddZone("Garcia", -2411.220, -222.589, -1.14, -2173.040, 265.243, 200.000)
  1644. AddZone("Montgomery", 1119.510, 119.526, -3.0, 1451.400, 493.323, 200.000)
  1645. AddZone("Creek", 2749.900, 1937.250, -89.084, 2921.620, 2669.790, 110.916)
  1646. AddZone("Los Santos International", 1249.620, -2394.330, -89.084, 1852.000, -2179.250, 110.916)
  1647. AddZone("Santa Maria Beach", 72.648, -2173.290, -89.084, 342.648, -1684.650, 110.916)
  1648. AddZone("Mulholland Intersection", 1463.900, -1150.870, -89.084, 1812.620, -768.027, 110.916)
  1649. AddZone("Angel Pine", -2324.940, -2584.290, -6.1, -1964.220, -2212.110, 200.000)
  1650. AddZone("Verdant Meadows", 37.032, 2337.180, -3.0, 435.988, 2677.900, 200.000)
  1651. AddZone("Octane Springs", 338.658, 1228.510, 0.000, 664.308, 1655.050, 200.000)
  1652. AddZone("Come-A-Lot", 2087.390, 943.235, -89.084, 2623.180, 1203.230, 110.916)
  1653. AddZone("Redsands West", 1236.630, 1883.110, -89.084, 1777.390, 2142.860, 110.916)
  1654. AddZone("Santa Maria Beach", 342.648, -2173.290, -89.084, 647.712, -1684.650, 110.916)
  1655. AddZone("Verdant Bluffs", 1249.620, -2179.250, -89.084, 1692.620, -1842.270, 110.916)
  1656. AddZone("Las Venturas Airport", 1236.630, 1203.280, -89.084, 1457.370, 1883.110, 110.916)
  1657. AddZone("Flint Range", -594.191, -1648.550, 0.000, -187.700, -1276.600, 200.000)
  1658. AddZone("Verdant Bluffs", 930.221, -2488.420, -89.084, 1249.620, -2006.780, 110.916)
  1659. AddZone("Palomino Creek", 2160.220, -149.004, 0.000, 2576.920, 228.322, 200.000)
  1660. AddZone("Ocean Docks", 2373.770, -2697.090, -89.084, 2809.220, -2330.460, 110.916)
  1661. AddZone("Easter Bay Airport", -1213.910, -50.096, -4.5, -947.980, 578.396, 200.000)
  1662. AddZone("Whitewood Estates", 883.308, 1726.220, -89.084, 1098.310, 2507.230, 110.916)
  1663. AddZone("Calton Heights", -2274.170, 744.170, -6.1, -1982.320, 1358.900, 200.000)
  1664. AddZone("Easter Basin", -1794.920, 249.904, -9.1, -1242.980, 578.396, 200.000)
  1665. AddZone("Los Santos Inlet", -321.744, -2224.430, -89.084, 44.615, -1724.430, 110.916)
  1666. AddZone("Doherty", -2173.040, -222.589, -1.0, -1794.920, 265.243, 200.000)
  1667. AddZone("Mount Chiliad", -2178.690, -2189.910, -47.917, -2030.120, -1771.660, 576.083)
  1668. AddZone("Fort Carson", -376.233, 826.326, -3.0, 123.717, 1220.440, 200.000)
  1669. AddZone("Foster Valley", -2178.690, -1115.580, 0.000, -1794.920, -599.884, 200.000)
  1670. AddZone("Ocean Flats", -2994.490, -222.589, -1.0, -2593.440, 277.411, 200.000)
  1671. AddZone("Fern Ridge", 508.189, -139.259, 0.000, 1306.660, 119.526, 200.000)
  1672. AddZone("Bayside", -2741.070, 2175.150, 0.000, -2353.170, 2722.790, 200.000)
  1673. AddZone("Las Venturas Airport", 1457.370, 1203.280, -89.084, 1777.390, 1883.110, 110.916)
  1674. AddZone("Blueberry Acres", -319.676, -220.137, 0.000, 104.534, 293.324, 200.000)
  1675. AddZone("Palisades", -2994.490, 458.411, -6.1, -2741.070, 1339.610, 200.000)
  1676. AddZone("North Rock", 2285.370, -768.027, 0.000, 2770.590, -269.740, 200.000)
  1677. AddZone("Hunter Quarry", 337.244, 710.840, -115.239, 860.554, 1031.710, 203.761)
  1678. AddZone("Los Santos International", 1382.730, -2730.880, -89.084, 2201.820, -2394.330, 110.916)
  1679. AddZone("Missionary Hill", -2994.490, -811.276, 0.000, -2178.690, -430.276, 200.000)
  1680. AddZone("San Fierro Bay", -2616.400, 1659.680, -3.0, -1996.660, 2175.150, 200.000)
  1681. AddZone("Restricted Area", -91.586, 1655.050, -50.000, 421.234, 2123.010, 250.000)
  1682. AddZone("Mount Chiliad", -2997.470, -1115.580, -47.917, -2178.690, -971.913, 576.083)
  1683. AddZone("Mount Chiliad", -2178.690, -1771.660, -47.917, -1936.120, -1250.970, 576.083)
  1684. AddZone("Easter Bay Airport", -1794.920, -730.118, -3.0, -1213.910, -50.096, 200.000)
  1685. AddZone("The Panopticon", -947.980, -304.320, -1.1, -319.676, 327.071, 200.000)
  1686. AddZone("Shady Creeks", -1820.640, -2643.680, -8.0, -1226.780, -1771.660, 200.000)
  1687. AddZone("Back o Beyond", -1166.970, -2641.190, 0.000, -321.744, -1856.030, 200.000)
  1688. AddZone("Mount Chiliad", -2994.490, -2189.910, -47.917, -2178.690, -1115.580, 576.083)
  1689. AddZone("Tierra Robada", -1213.910, 596.349, -242.990, -480.539, 1659.680, 900.000)
  1690. AddZone("Flint County", -1213.910, -2892.970, -242.990, 44.615, -768.027, 900.000)
  1691. AddZone("Whetstone", -2997.470, -2892.970, -242.990, -1213.910, -1115.580, 900.000)
  1692. AddZone("Bone County", -480.539, 596.349, -242.990, 869.461, 2993.870, 900.000)
  1693. AddZone("Tierra Robada", -2997.470, 1659.680, -242.990, -480.539, 2993.870, 900.000)
  1694. AddZone("San Fierro", -2997.470, -1115.580, -242.990, -1213.910, 1659.680, 900.000)
  1695. AddZone("Las Venturas", 869.461, 596.349, -242.990, 2997.060, 2993.870, 900.000)
  1696. AddZone("Red County", -1213.910, -768.027, -242.990, 2997.060, 596.349, 900.000)
  1697. AddZone("Los Santos", 44.615, -2892.970, -242.990, 2997.060, -768.027, 900.000)
  1698. }
  1699.  
  1700. calculateZone(posX, posY, posZ) {
  1701.  
  1702. if ( bInitZaC == 0 )
  1703. {
  1704. initZonesAndCities()
  1705. bInitZaC := 1
  1706. }
  1707.  
  1708. Loop % nZone-1
  1709. {
  1710. 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)
  1711. {
  1712. ErrorLevel := ERROR_OK
  1713. return zone%A_Index%_name
  1714. }
  1715. }
  1716.  
  1717. ErrorLevel := ERROR_ZONE_NOT_FOUND
  1718. return "Unbekannt"
  1719. }
  1720.  
  1721. calculateCity(posX, posY, posZ) {
  1722.  
  1723. if ( bInitZaC == 0 )
  1724. {
  1725. initZonesAndCities()
  1726. bInitZaC := 1
  1727. }
  1728. smallestCity := "Unbekannt"
  1729. currentCitySize := 0
  1730. smallestCitySize := 0
  1731.  
  1732. Loop % nCity-1
  1733. {
  1734. 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)
  1735. {
  1736. 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))
  1737. if (smallestCity == "Unbekannt") || (currentCitySize < smallestCitySize)
  1738. {
  1739. smallestCity := city%A_Index%_name
  1740. smallestCitySize := currentCitySize
  1741. }
  1742. }
  1743. }
  1744.  
  1745. if(smallestCity == "Unbekannt") {
  1746. ErrorLevel := ERROR_CITY_NOT_FOUND
  1747. } else {
  1748. ErrorLevel := ERROR_OK
  1749. }
  1750. return smallestCity
  1751. }
  1752.  
  1753. /*
  1754. ;do not work?
  1755. getCurrentZonecode() {
  1756. if(!checkHandles())
  1757. return ""
  1758.  
  1759. return readString(hGTA, ADDR_ZONECODE, 5)
  1760. }
  1761. */
  1762.  
  1763. AddZone(sName, x1, y1, z1, x2, y2, z2) {
  1764. global
  1765. zone%nZone%_name := sName
  1766. zone%nZone%_x1 := x1
  1767. zone%nZone%_y1 := y1
  1768. zone%nZone%_z1 := z1
  1769. zone%nZone%_x2 := x2
  1770. zone%nZone%_y2 := y2
  1771. zone%nZone%_z2 := z2
  1772. nZone := nZone + 1
  1773. }
  1774.  
  1775. AddCity(sName, x1, y1, z1, x2, y2, z2) {
  1776. global
  1777. city%nCity%_name := sName
  1778. city%nCity%_x1 := x1
  1779. city%nCity%_y1 := y1
  1780. city%nCity%_z1 := z1
  1781. city%nCity%_x2 := x2
  1782. city%nCity%_y2 := y2
  1783. city%nCity%_z2 := z2
  1784. nCity := nCity + 1
  1785. }
  1786.  
  1787. IsPlayerInRangeOfPoint(_posX, _posY, _posZ, _posRadius)
  1788. {
  1789. GetPlayerPos(posX, posY, posZ)
  1790. X := posX -_posX
  1791. Y := posY -_posY
  1792. Z := posZ -_posZ
  1793. if(((X < _posRadius) && (X > -_posRadius)) && ((Y < _posRadius) && (Y > -_posRadius)) && ((Z < _posRadius) && (Z > -_posRadius)))
  1794. return TRUE
  1795. return FALSE
  1796. }
  1797.  
  1798. IsPlayerInRangeOfPoint2D(_posX, _posY, _posRadius)
  1799. {
  1800.  
  1801. GetPlayerPos(posX, posY, posZ)
  1802. X := posX - _posX
  1803. Y := posY - _posY
  1804. if(((X < _posRadius) && (X > -_posRadius)) && ((Y < _posRadius) && (Y > -_posRadius)))
  1805. return TRUE
  1806. return FALSE
  1807. }
  1808.  
  1809. getPlayerZone()
  1810. {
  1811. aktPos := getCoordinates()
  1812. return calculateZone(aktPos[1], aktPos[2], aktPos[3])
  1813. }
  1814.  
  1815. getPlayerCity()
  1816. {
  1817. aktPos := getCoordinates()
  1818. return calculateCity(aktPos[1], aktPos[2], aktPos[3])
  1819. }
  1820.  
  1821. ; ##### Sonstiges #####
  1822. checkHandles() {
  1823. if(iRefreshHandles+500>A_TickCount)
  1824. return true
  1825. iRefreshHandles:=A_TickCount
  1826. if(!refreshGTA() || !refreshSAMP() || !refreshMemory()) {
  1827. return false
  1828. } else {
  1829. return true
  1830. }
  1831.  
  1832. return true
  1833. }
  1834.  
  1835. ; internal stuff
  1836. refreshGTA() {
  1837. newPID := getPID("GTA:SA:MP")
  1838. if(!newPID) { ; GTA not found
  1839. if(hGTA) { ; open handle
  1840. virtualFreeEx(hGTA, pMemory, 0, 0x8000)
  1841. closeProcess(hGTA)
  1842. hGTA := 0x0
  1843. }
  1844. dwGTAPID := 0
  1845. hGTA := 0x0
  1846. dwSAMP := 0x0
  1847. pMemory := 0x0
  1848. return false
  1849. }
  1850.  
  1851. if(!hGTA || (dwGTAPID != newPID)) { ; changed PID, closed handle
  1852. hGTA := openProcess(newPID)
  1853. if(ErrorLevel) { ; openProcess fail
  1854. dwGTAPID := 0
  1855. hGTA := 0x0
  1856. dwSAMP := 0x0
  1857. pMemory := 0x0
  1858. return false
  1859. }
  1860. dwGTAPID := newPID
  1861. dwSAMP := 0x0
  1862. pMemory := 0x0
  1863. return true
  1864. }
  1865. return true
  1866. }
  1867.  
  1868. ; internal stuff
  1869. refreshSAMP() {
  1870. if(dwSAMP)
  1871. return true
  1872.  
  1873. dwSAMP := getModuleBaseAddress("samp.dll", hGTA)
  1874. if(!dwSAMP)
  1875. return false
  1876.  
  1877. return true
  1878. }
  1879.  
  1880. ; internal stuff
  1881. refreshMemory() {
  1882. if(!pMemory) {
  1883. pMemory := virtualAllocEx(hGTA, 6144, 0x1000 | 0x2000, 0x40)
  1884. if(ErrorLevel) {
  1885. pMemory := 0x0
  1886. return false
  1887. }
  1888. pParam1 := pMemory
  1889. pParam2 := pMemory + 1024
  1890. pParam3 := pMemory + 2048
  1891. pParam4 := pMemory + 3072
  1892. pParam5 := pMemory + 4096
  1893. pInjectFunc := pMemory + 5120
  1894. }
  1895. return true
  1896. }
  1897.  
  1898. ; internal stuff
  1899. getPID(szWindow) {
  1900. local dwPID := 0
  1901. WinGet, dwPID, PID, %szWindow%
  1902. return dwPID
  1903. }
  1904.  
  1905. ; internal stuff
  1906. openProcess(dwPID, dwRights = 0x1F0FFF) {
  1907. hProcess := DllCall("OpenProcess"
  1908. , "UInt", dwRights
  1909. , "int", 0
  1910. , "UInt", dwPID
  1911. , "Uint")
  1912. if(hProcess == 0) {
  1913. ErrorLevel := ERROR_OPEN_PROCESS
  1914. return 0
  1915. }
  1916.  
  1917. ErrorLevel := ERROR_OK
  1918. return hProcess
  1919. }
  1920.  
  1921. ; internal stuff
  1922. closeProcess(hProcess) {
  1923. if(hProcess == 0) {
  1924. ErrorLevel := ERROR_INVALID_HANDLE
  1925. return 0
  1926. }
  1927.  
  1928. dwRet := DllCall( "CloseHandle"
  1929. , "Uint", hProcess
  1930. , "UInt")
  1931. ErrorLevel := ERROR_OK
  1932. }
  1933.  
  1934. ; internal stuff
  1935. getModuleBaseAddress(sModule, hProcess) {
  1936. if(!sModule) {
  1937. ErrorLevel := ERROR_MODULE_NOT_FOUND
  1938. return 0
  1939. }
  1940.  
  1941. if(!hProcess) {
  1942. ErrorLevel := ERROR_INVALID_HANDLE
  1943. return 0
  1944. }
  1945.  
  1946. dwSize = 1024*4 ; 1024 * sizeof(HMODULE = 4)
  1947. VarSetCapacity(hMods, dwSize)
  1948. VarSetCapacity(cbNeeded, 4) ; DWORD = 4
  1949. dwRet := DllCall( "Psapi.dll\EnumProcessModules"
  1950. , "UInt", hProcess
  1951. , "UInt", &hMods
  1952. , "UInt", dwSize
  1953. , "UInt*", cbNeeded
  1954. , "UInt")
  1955. if(dwRet == 0) {
  1956. ErrorLevel := ERROR_ENUM_PROCESS_MODULES
  1957. return 0
  1958. }
  1959.  
  1960. dwMods := cbNeeded / 4 ; cbNeeded / sizeof(HMDOULE = 4)
  1961. i := 0
  1962. VarSetCapacity(hModule, 4) ; HMODULE = 4
  1963. VarSetCapacity(sCurModule, 260) ; MAX_PATH = 260
  1964. while(i < dwMods) {
  1965. hModule := NumGet(hMods, i*4)
  1966. DllCall("Psapi.dll\GetModuleFileNameEx"
  1967. , "UInt", hProcess
  1968. , "UInt", hModule
  1969. , "Str", sCurModule
  1970. , "UInt", 260)
  1971. SplitPath, sCurModule, sFilename
  1972. if(sModule == sFilename) {
  1973. ErrorLevel := ERROR_OK
  1974. return hModule
  1975. }
  1976. i := i + 1
  1977. }
  1978.  
  1979. ErrorLevel := ERROR_MODULE_NOT_FOUND
  1980. return 0
  1981. }
  1982.  
  1983. ; internal stuff
  1984. readString(hProcess, dwAddress, dwLen) {
  1985. if(!hProcess) {
  1986. ErrorLevel := ERROR_INVALID_HANDLE
  1987. return 0
  1988. }
  1989.  
  1990. VarSetCapacity(sRead, dwLen)
  1991. dwRet := DllCall( "ReadProcessMemory"
  1992. , "UInt", hProcess
  1993. , "UInt", dwAddress
  1994. , "Str", sRead
  1995. , "UInt", dwLen
  1996. , "UInt*", 0
  1997. , "UInt")
  1998. if(dwRet == 0) {
  1999. ErrorLevel := ERROR_READ_MEMORY
  2000. return 0
  2001. }
  2002.  
  2003. ErrorLevel := ERROR_OK
  2004. if A_IsUnicode
  2005. return __ansiToUnicode(sRead)
  2006. return sRead
  2007. }
  2008.  
  2009. ; internal stuff
  2010. readFloat(hProcess, dwAddress) {
  2011. if(!hProcess) {
  2012. ErrorLevel := ERROR_INVALID_HANDLE
  2013. return 0
  2014. }
  2015.  
  2016. VarSetCapacity(dwRead, 4) ; float = 4
  2017. dwRet := DllCall( "ReadProcessMemory"
  2018. , "UInt", hProcess
  2019. , "UInt", dwAddress
  2020. , "Str", dwRead
  2021. , "UInt", 4
  2022. , "UInt*", 0
  2023. , "UInt")
  2024. if(dwRet == 0) {
  2025. ErrorLevel := ERROR_READ_MEMORY
  2026. return 0
  2027. }
  2028.  
  2029. ErrorLevel := ERROR_OK
  2030. return NumGet(dwRead, 0, "Float")
  2031. }
  2032.  
  2033. ; internal stuff
  2034. readDWORD(hProcess, dwAddress) {
  2035. if(!hProcess) {
  2036. ErrorLevel := ERROR_INVALID_HANDLE
  2037. return 0
  2038. }
  2039.  
  2040. VarSetCapacity(dwRead, 4) ; DWORD = 4
  2041. dwRet := DllCall( "ReadProcessMemory"
  2042. , "UInt", hProcess
  2043. , "UInt", dwAddress
  2044. , "Str", dwRead
  2045. , "UInt", 4
  2046. , "UInt*", 0)
  2047. if(dwRet == 0) {
  2048. ErrorLevel := ERROR_READ_MEMORY
  2049. return 0
  2050. }
  2051.  
  2052. ErrorLevel := ERROR_OK
  2053. return NumGet(dwRead, 0, "UInt")
  2054. }
  2055.  
  2056. ; internal stuff
  2057. readMem(hProcess, dwAddress, dwLen=4, type="UInt") {
  2058. if(!hProcess) {
  2059. ErrorLevel := ERROR_INVALID_HANDLE
  2060. return 0
  2061. }
  2062.  
  2063. VarSetCapacity(dwRead, dwLen)
  2064. dwRet := DllCall( "ReadProcessMemory"
  2065. , "UInt", hProcess
  2066. , "UInt", dwAddress
  2067. , "Str", dwRead
  2068. , "UInt", dwLen
  2069. , "UInt*", 0)
  2070. if(dwRet == 0) {
  2071. ErrorLevel := ERROR_READ_MEMORY
  2072. return 0
  2073. }
  2074.  
  2075. ErrorLevel := ERROR_OK
  2076. return NumGet(dwRead, 0, type)
  2077. }
  2078.  
  2079. ; internal stuff
  2080. writeString(hProcess, dwAddress, wString) {
  2081. if(!hProcess) {
  2082. ErrorLevel := ERROR_INVALID_HANDLE
  2083. return false
  2084. }
  2085.  
  2086. sString := wString
  2087. if A_IsUnicode
  2088. sString := __unicodeToAnsi(wString)
  2089.  
  2090. dwRet := DllCall( "WriteProcessMemory"
  2091. , "UInt", hProcess
  2092. , "UInt", dwAddress
  2093. , "Str", sString
  2094. , "UInt", StrLen(wString) + 1
  2095. , "UInt", 0
  2096. , "UInt")
  2097. if(dwRet == 0) {
  2098. ErrorLEvel := ERROR_WRITE_MEMORY
  2099. return false
  2100. }
  2101.  
  2102. ErrorLevel := ERROR_OK
  2103. return true
  2104. }
  2105.  
  2106. ; internal stuff
  2107. writeRaw(hProcess, dwAddress, pBuffer, dwLen) {
  2108. if(!hProcess) {
  2109. ErrorLevel := ERROR_INVALID_HANDLE
  2110. return false
  2111. }
  2112.  
  2113. dwRet := DllCall( "WriteProcessMemory"
  2114. , "UInt", hProcess
  2115. , "UInt", dwAddress
  2116. , "UInt", pBuffer
  2117. , "UInt", dwLen
  2118. , "UInt", 0
  2119. , "UInt")
  2120. if(dwRet == 0) {
  2121. ErrorLEvel := ERROR_WRITE_MEMORY
  2122. return false
  2123. }
  2124.  
  2125. ErrorLevel := ERROR_OK
  2126. return true
  2127. }
  2128.  
  2129. ; internal stuff
  2130. callWithParams(hProcess, dwFunc, aParams, bCleanupStack = true) {
  2131. if(!hProcess) {
  2132. ErrorLevel := ERROR_INVALID_HANDLE
  2133. return false
  2134. }
  2135. validParams := 0
  2136.  
  2137. i := aParams.MaxIndex()
  2138.  
  2139. ; i * PUSH + CALL + RETN
  2140. dwLen := i * 5 + 5 + 1
  2141. if(bCleanupStack)
  2142. dwLen += 3
  2143. VarSetCapacity(injectData, i * 5 + 5 + 3 + 1, 0)
  2144.  
  2145. i_ := 1
  2146. while(i > 0) {
  2147. if(aParams[i][1] != "") {
  2148. dwMemAddress := 0x0
  2149. if(aParams[i][1] == "p") {
  2150. dwMemAddress := aParams[i][2]
  2151. } else if(aParams[i][1] == "s") {
  2152. if(i_>3)
  2153. return false
  2154. dwMemAddress := pParam%i_%
  2155. writeString(hProcess, dwMemAddress, aParams[i][2])
  2156. if(ErrorLevel)
  2157. return false
  2158. i_ += 1
  2159. } else if(aParams[i][1] == "i") {
  2160. dwMemAddress := aParams[i][2]
  2161. } else {
  2162. return false
  2163. }
  2164. NumPut(0x68, injectData, validParams * 5, "UChar")
  2165. NumPut(dwMemAddress, injectData, validParams * 5 + 1, "UInt")
  2166. validParams += 1
  2167. }
  2168. i -= 1
  2169. }
  2170.  
  2171. offset := dwFunc - ( pInjectFunc + validParams * 5 + 5 )
  2172. NumPut(0xE8, injectData, validParams * 5, "UChar")
  2173. NumPut(offset, injectData, validParams * 5 + 1, "Int")
  2174.  
  2175. if(bCleanupStack) {
  2176. NumPut(0xC483, injectData, validParams * 5 + 5, "UShort")
  2177. NumPut(validParams*4, injectData, validParams * 5 + 7, "UChar")
  2178.  
  2179. NumPut(0xC3, injectData, validParams * 5 + 8, "UChar")
  2180. } else {
  2181. NumPut(0xC3, injectData, validParams * 5 + 5, "UChar")
  2182. }
  2183.  
  2184. writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
  2185. if(ErrorLevel)
  2186. return false
  2187.  
  2188. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  2189. if(ErrorLevel)
  2190. return false
  2191.  
  2192. waitForSingleObject(hThread, 0xFFFFFFFF)
  2193.  
  2194. closeProcess(hThread)
  2195.  
  2196. return true
  2197. }
  2198.  
  2199. ; internal stuff
  2200. virtualAllocEx(hProcess, dwSize, flAllocationType, flProtect) {
  2201. if(!hProcess) {
  2202. ErrorLevel := ERROR_INVALID_HANDLE
  2203. return 0
  2204. }
  2205.  
  2206. dwRet := DllCall( "VirtualAllocEx"
  2207. , "UInt", hProcess
  2208. , "UInt", 0
  2209. , "UInt", dwSize
  2210. , "UInt", flAllocationType
  2211. , "UInt", flProtect
  2212. , "UInt")
  2213. if(dwRet == 0) {
  2214. ErrorLEvel := ERROR_ALLOC_MEMORY
  2215. return 0
  2216. }
  2217.  
  2218. ErrorLevel := ERROR_OK
  2219. return dwRet
  2220. }
  2221.  
  2222. ; internal stuff
  2223. virtualFreeEx(hProcess, lpAddress, dwSize, dwFreeType) {
  2224. if(!hProcess) {
  2225. ErrorLevel := ERROR_INVALID_HANDLE
  2226. return 0
  2227. }
  2228.  
  2229. dwRet := DllCall( "VirtualFreeEx"
  2230. , "UInt", hProcess
  2231. , "UInt", lpAddress
  2232. , "UInt", dwSize
  2233. , "UInt", dwFreeType
  2234. , "UInt")
  2235. if(dwRet == 0) {
  2236. ErrorLEvel := ERROR_FREE_MEMORY
  2237. return 0
  2238. }
  2239.  
  2240. ErrorLevel := ERROR_OK
  2241. return dwRet
  2242. }
  2243.  
  2244. ; internal stuff
  2245. createRemoteThread(hProcess, lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags, lpThreadId) {
  2246. if(!hProcess) {
  2247. ErrorLevel := ERROR_INVALID_HANDLE
  2248. return 0
  2249. }
  2250.  
  2251. dwRet := DllCall( "CreateRemoteThread"
  2252. , "UInt", hProcess
  2253. , "UInt", lpThreadAttributes
  2254. , "UInt", dwStackSize
  2255. , "UInt", lpStartAddress
  2256. , "UInt", lpParameter
  2257. , "UInt", dwCreationFlags
  2258. , "UInt", lpThreadId
  2259. , "UInt")
  2260. if(dwRet == 0) {
  2261. ErrorLEvel := ERROR_ALLOC_MEMORY
  2262. return 0
  2263. }
  2264.  
  2265. ErrorLevel := ERROR_OK
  2266. return dwRet
  2267. }
  2268.  
  2269. ; internal stuff
  2270. waitForSingleObject(hThread, dwMilliseconds) {
  2271. if(!hThread) {
  2272. ErrorLevel := ERROR_INVALID_HANDLE
  2273. return 0
  2274. }
  2275.  
  2276. dwRet := DllCall( "WaitForSingleObject"
  2277. , "UInt", hThread
  2278. , "UInt", dwMilliseconds
  2279. , "UInt")
  2280. if(dwRet == 0xFFFFFFFF) {
  2281. ErrorLEvel := ERROR_WAIT_FOR_OBJECT
  2282. return 0
  2283. }
  2284.  
  2285. ErrorLevel := ERROR_OK
  2286. return dwRet
  2287. }
  2288.  
  2289. ; internal stuff
  2290. __ansiToUnicode(sString, nLen = 0) {
  2291. If !nLen
  2292. {
  2293. nLen := DllCall("MultiByteToWideChar"
  2294. , "Uint", 0
  2295. , "Uint", 0
  2296. , "Uint", &sString
  2297. , "int", -1
  2298. , "Uint", 0
  2299. , "int", 0)
  2300. }
  2301.  
  2302. VarSetCapacity(wString, nLen * 2)
  2303.  
  2304. DllCall("MultiByteToWideChar"
  2305. , "Uint", 0
  2306. , "Uint", 0
  2307. , "Uint", &sString
  2308. , "int", -1
  2309. , "Uint", &wString
  2310. , "int", nLen)
  2311.  
  2312. return wString
  2313. }
  2314.  
  2315. ; internal stuff
  2316. __unicodeToAnsi(wString, nLen = 0) {
  2317. pString := wString + 1 > 65536 ? wString : &wString
  2318.  
  2319. If !nLen
  2320. {
  2321. nLen := DllCall("WideCharToMultiByte"
  2322. , "Uint", 0
  2323. , "Uint", 0
  2324. , "Uint", pString
  2325. , "int", -1
  2326. , "Uint", 0
  2327. , "int", 0
  2328. , "Uint", 0
  2329. , "Uint", 0)
  2330. }
  2331.  
  2332. VarSetCapacity(sString, nLen)
  2333.  
  2334. DllCall("WideCharToMultiByte"
  2335. , "Uint", 0
  2336. , "Uint", 0
  2337. , "Uint", pString
  2338. , "int", -1
  2339. , "str", sString
  2340. , "int", nLen
  2341. , "Uint", 0
  2342. , "Uint", 0)
  2343. return sString
  2344. }
  2345.  
  2346.  
  2347. restartGameEx() {
  2348.  
  2349. if(!checkHandles())
  2350. return -1
  2351.  
  2352. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) ;g_SAMP
  2353. if(ErrorLevel || dwAddress==0) {
  2354. ErrorLevel := ERROR_READ_MEMORY
  2355. return -1
  2356. }
  2357.  
  2358. dwFunc := dwSAMP + 0xA060
  2359.  
  2360. VarSetCapacity(injectData, 11, 0) ;mov, call, retn
  2361.  
  2362. NumPut(0xB9, injectData, 0, "UChar") ;mov ecx 0+1
  2363. NumPut(dwAddress, injectData, 1, "UInt") ;1+4
  2364. NumPut(0xE8, injectData, 5, "UChar") ;call 5+1
  2365. offset := dwFunc - (pInjectFunc + 10)
  2366. NumPut(offset, injectData, 6, "Int") ; 6+4
  2367. NumPut(0xC3, injectData, 10, "UChar") ; 10+1
  2368.  
  2369. writeRaw(hGTA, pInjectFunc, &injectData, 11)
  2370. if(ErrorLevel)
  2371. return false
  2372.  
  2373. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  2374. if(ErrorLevel)
  2375. return false
  2376.  
  2377. waitForSingleObject(hThread, 0xFFFFFFFF)
  2378.  
  2379. return true
  2380.  
  2381. }
  2382.  
  2383. disconnectEx() {
  2384.  
  2385. if(!checkHandles())
  2386. return 0
  2387.  
  2388. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) ;g_SAMP
  2389. if(ErrorLevel || dwAddress==0) {
  2390. ErrorLevel := ERROR_READ_MEMORY
  2391. return 0
  2392. }
  2393.  
  2394. dwAddress := readDWORD(hGTA, dwAddress + 0x3c9) ;pRakClientInterface
  2395. if(ErrorLevel || dwAddress==0) {
  2396. ErrorLevel := ERROR_READ_MEMORY
  2397. return 0
  2398. }
  2399.  
  2400. ecx := dwAddress ;this
  2401.  
  2402. dwAddress := readDWORD(hGTA, dwAddress) ;vtable
  2403. if(ErrorLevel || dwAddress==0) {
  2404. ErrorLevel := ERROR_READ_MEMORY
  2405. return 0
  2406. }
  2407.  
  2408.  
  2409.  
  2410. VarSetCapacity(injectData, 24, 0) ;mov, call, retn
  2411.  
  2412. NumPut(0xB9, injectData, 0, "UChar") ;mov ecx 0+1
  2413. NumPut(ecx, injectData, 1, "UInt") ;1+4
  2414.  
  2415. NumPut(0xB8, injectData, 5, "UChar") ;mov eax 5+1
  2416. NumPut(dwAddress, injectData, 6, "UInt") ;6+4
  2417.  
  2418. ;NumPut(0x006A006A, injectData, 10, "UInt") ; 2x push 10+4
  2419.  
  2420. NumPut(0x68, injectData, 10, "UChar") ;10 + 1 ;push style
  2421. NumPut(0, injectData, 11, "UInt") ;11 + 4
  2422.  
  2423. NumPut(0x68, injectData, 15, "UChar") ;15 + 1 ;push style
  2424. NumPut(500, injectData, 16, "UInt") ;16 + 4
  2425.  
  2426. ;---
  2427.  
  2428. NumPut(0x50FF, injectData, 20, "UShort") ;20 + 2
  2429. NumPut(0x08, injectData, 22, "UChar") ;22 + 1
  2430.  
  2431. NumPut(0xC3, injectData, 23, "UChar") ;retn 23+1
  2432.  
  2433. writeRaw(hGTA, pInjectFunc, &injectData, 24)
  2434. if(ErrorLevel)
  2435. return false
  2436.  
  2437. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  2438. if(ErrorLevel)
  2439. return false
  2440.  
  2441. waitForSingleObject(hThread, 0xFFFFFFFF)
  2442.  
  2443. return true
  2444.  
  2445. }
  2446.  
  2447. setrestart()
  2448. {
  2449. VarSetCapacity(old, 4, 0)
  2450. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) ;g_SAMP
  2451. if(ErrorLevel || dwAddress==0) {
  2452. ErrorLevel := ERROR_READ_MEMORY
  2453. return 0
  2454. }
  2455.  
  2456. NumPut(9,old,0,"Int")
  2457. writeRaw(hGTA, dwAddress + 957, &old, 4)
  2458. }
  2459.  
  2460. restart()
  2461. {
  2462. restartGameEx()
  2463. disconnectEx()
  2464. addChatMessage("{FFFFFF}Rejoining..")
  2465. Sleep 1000
  2466. setrestart()
  2467. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement