Rian_Tyler

Untitled

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