Advertisement
Guest User

Untitled

a guest
Mar 6th, 2017
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 120.20 KB | None | 0 0
  1. global ERROR_OPEN_PROCESS := 2
  2. global ERROR_INVALID_HANDLE := 3
  3. global ERROR_MODULE_NOT_FOUND := 4
  4. global ERROR_ENUM_PROCESS_MODULES := 5
  5. global ERROR_ZONE_NOT_FOUND := 6
  6. global ERROR_CITY_NOT_FOUND := 7
  7. global ERROR_READ_MEMORY := 8
  8. global ERROR_WRITE_MEMORY := 9
  9. global ERROR_ALLOC_MEMORY := 10
  10. global ERROR_FREE_MEMORY := 11
  11. global ERROR_WAIT_FOR_OBJECT := 12
  12. global ERROR_CREATE_THREAD := 13
  13.  
  14. global ADDR_ZONECODE := 0xA49AD4
  15. global ADDR_POSITION_X := 0xB6F2E4
  16. global ADDR_POSITION_Y := 0xB6F2E8
  17. global ADDR_POSITION_Z := 0xB6F2EC
  18. global ADDR_CPED_PTR := 0xB6F5F0
  19. global ADDR_CPED_HPOFF := 0x540
  20. global ADDR_CPED_ARMOROFF := 0x548
  21. global ADDR_CPED_MONEY := 0x0B7CE54
  22. global ADDR_CPED_INTID := 0xA4ACE8
  23. global ADDR_CPED_SKINIDOFF := 0x22
  24. global ADDR_VEHICLE_PTR := 0xBA18FC
  25. global ADDR_VEHICLE_HPOFF := 0x4C0
  26. global ADDR_VEHICLE_DOORSTATE := 0x4F8
  27. global ADDR_VEHICLE_ENGINESTATE := 0x428
  28. global ADDR_VEHICLE_LIGHTSTATE := 0x584
  29. global ADDR_VEHICLE_MODEL := 0x22
  30. global ADDR_VEHICLE_TYPE := 0x590
  31. global ADDR_VEHICLE_DRIVER := 0x460
  32. global ADDR_VEHICLE_X := 0x44
  33. global ADDR_VEHICLE_Y := 0x48
  34. global ADDR_VEHICLE_Z := 0x4C
  35.  
  36. global oAirplaneModels := [417, 425, 447, 460, 469, 476, 487, 488, 497, 511, 512, 513, 519, 520, 548, 553, 563, 577, 592, 593]
  37. global oBikeModels := [481,509,510]
  38. 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"]
  39. global oweaponNames := ["Fist","Brass Knuckles","Golf Club","Nightstick","Knife","Baseball Bat","Shovel","Pool Cue","Katana","Chainsaw","Purple Dildo","Dildo","Vibrator","Silver Vibrator","Flowers","Cane","Grenade","Tear Gas","Molotov Cocktail", "", "", "", "9mm","Silenced 9mm","21Desert Eagle","Shotgun","Sawnoff Shotgun","Combat Shotgun","Micro SMG/Uzi","MP5","AK-47","M4","Tec-9","Country Rifle","Sniper Rifle","RPG","HS Rocket","Flamethrower","Minigun","Satchel Charge","Detonator","Spraycan","Fire Extinguisher","Camera","Night Vis Goggles","Thermal Goggles","Parachute"]
  40. global oradiostationNames := ["Playback FM", "K Rose", "K-DST", "Bounce FM", "SF-UR", "Radio Los Santos", "Radio X", "CSR 103.9", "K-JAH West", "Master Sounds 98.3", "WCTR Talk Radio", "User Track Player", "Radio Off"]
  41. global oweatherNames := ["EXTRASUNNY_LA", "SUNNY_LA", "EXTRASUNNY_SMOG_LA", "SUNNY_SMOG_LA", "CLOUDY_LA", "SUNNY_SF", "EXTRASUNNY_SF", "CLOUDY_SF", "RAINY_SF", "FOGGY_SF", "SUNNY_VEGAS", "EXTRASUNNY_VEGAS", "CLOUDY_VEGAS", "EXTRASUNNY_COUNTRYSIDE", "SUNNY_COUNTRYSIDE", "CLOUDY_COUNTRYSIDE", "RAINY_COUNTRYSIDE", "EXTRASUNNY_DESERT", "SUNNY_DESERT", "SANDSTORM_DESERT", "UNDERWATER", "EXTRACOLOURS_1", "EXTRACOLOURS_2"]
  42.  
  43. global ADDR_SAMP_INCHAT_PTR := 0x21a10c
  44. global ADDR_SAMP_INCHAT_PTR_OFF := 0x55
  45. global ADDR_SAMP_USERNAME := 0x219A6F
  46. global FUNC_SAMP_SENDCMD := 0x65c60
  47. global FUNC_SAMP_SENDSAY := 0x57f0
  48. global FUNC_SAMP_ADDTOCHATWND := 0x64520
  49. global ADDR_SAMP_CHATMSG_PTR := 0x21a0e4
  50. global FUNC_SAMP_SHOWGAMETEXT := 0x9c2c0
  51. global FUNC_SAMP_PLAYAUDIOSTR := 0x62da0
  52. global FUNC_SAMP_STOPAUDIOSTR := 0x629a0
  53.  
  54. global DIALOG_STYLE_MSGBOX := 0
  55. global DIALOG_STYLE_INPUT := 1
  56. global DIALOG_STYLE_LIST := 2
  57. global DIALOG_STYLE_PASSWORD := 3
  58. global DIALOG_STYLE_TABLIST := 4
  59. global DIALOG_STYLE_TABLIST_HEADERS := 5
  60.  
  61. global SAMP_DIALOG_STRUCT_PTR := 0x21A0B8
  62. global SAMP_DIALOG_PTR1_OFFSET := 0x1C
  63. global SAMP_DIALOG_LINES_OFFSET := 0x44C
  64. global SAMP_DIALOG_INDEX_OFFSET := 0x443
  65. global SAMP_DIALOG_BUTTON_HOVERING_OFFSET := 0x465
  66. global SAMP_DIALOG_BUTTON_CLICKED_OFFSET := 0x466
  67. global SAMP_DIALOG_PTR2_OFFSET := 0x20
  68. global SAMP_DIALOG_LINECOUNT_OFFSET := 0x150
  69. global SAMP_DIALOG_OPEN_OFFSET := 0x28
  70. global SAMP_DIALOG_STYLE_OFFSET := 0x2C
  71. global SAMP_DIALOG_ID_OFFSET := 0x30
  72. global SAMP_DIALOG_TEXT_PTR_OFFSET := 0x34
  73. global SAMP_DIALOG_CAPTION_OFFSET := 0x40
  74. global FUNC_SAMP_SHOWDIALOG := 0x6B9C0
  75. global FUNC_SAMP_CLOSEDIALOG := 0x6C040
  76. global FUNC_UPDATESCOREBOARD := 0x8A10
  77. global SAMP_INFO_OFFSET := 0x21A0F8
  78. global ADDR_SAMP_CRASHREPORT := 0x5CF2C
  79. global SAMP_PPOOLS_OFFSET := 0x3CD
  80. global SAMP_PPOOL_PLAYER_OFFSET := 0x18
  81. global SAMP_SLOCALPLAYERID_OFFSET := 0x4
  82. global SAMP_ISTRLEN_LOCALPLAYERNAME_OFFSET := 0x1A
  83. global SAMP_SZLOCALPLAYERNAME_OFFSET := 0xA
  84. global SAMP_PSZLOCALPLAYERNAME_OFFSET := 0xA
  85. global SAMP_PREMOTEPLAYER_OFFSET := 0x2E
  86. global SAMP_ISTRLENNAME___OFFSET := 0x1C
  87. global SAMP_SZPLAYERNAME_OFFSET := 0xC
  88. global SAMP_PSZPLAYERNAME_OFFSET := 0xC
  89. global SAMP_ILOCALPLAYERPING_OFFSET := 0x26
  90. global SAMP_ILOCALPLAYERSCORE_OFFSET := 0x2A
  91. global SAMP_IPING_OFFSET := 0x28
  92. global SAMP_ISCORE_OFFSET := 0x24
  93. global SAMP_ISNPC_OFFSET := 0x4
  94. global SAMP_PLAYER_MAX := 1004
  95. global CheckpointCheck := 0xC7DEEA
  96. global rmaddrs := [0xC7DEC8, 0xC7DECC, 0xC7DED0]
  97.  
  98. global SIZE_SAMP_CHATMSG := 0xFC
  99. global hGTA := 0x0
  100. global dwGTAPID := 0x0
  101. global dwSAMP := 0x0
  102. global pMemory := 0x0
  103. global pParam1 := 0x0
  104. global pParam2 := 0x0
  105. global pParam3 := 0x0
  106. global pParam4 := 0x0
  107. global pParam5 := 0x0
  108. global pInjectFunc := 0x0
  109. global nZone := 1
  110. global nCity := 1
  111. global bInitZaC := 0
  112. global iRefreshScoreboard := 0
  113. global oScoreboardData := ""
  114. global iRefreshHandles := 0
  115. global iUpdateTick := 2500
  116.  
  117. global GAMETEXT_1 := 0xBAAD40
  118. global GAMETEXT_2 := 0xBAADC0
  119. global GAMETEXT_3 := 0xBAAE40
  120. global GAMETEXT_4 := 0xBAAEC0
  121. global GAMETEXT_5 := 0xBAABC0
  122.  
  123. IsSAMPAvailable() {
  124. if(!checkHandles())
  125. return false
  126.  
  127. dwChatInfo := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  128. if(dwChatInfo == 0 || dwChatInfo == "ERROR")
  129. return false
  130. else
  131. return true
  132. }
  133.  
  134. IsInChat() {
  135. if(!checkHandles())
  136. return -1
  137.  
  138. dwPtr := dwSAMP + ADDR_SAMP_INCHAT_PTR
  139. dwAddress := readDWORD(hGTA, dwPtr) + ADDR_SAMP_INCHAT_PTR_OFF
  140. if(ErrorLevel) {
  141. ErrorLevel := ERROR_READ_MEMORY
  142. return -1
  143. }
  144.  
  145. dwInChat := readDWORD(hGTA, dwAddress)
  146. if(ErrorLevel) {
  147. ErrorLevel := ERROR_READ_MEMORY
  148. return -1
  149. }
  150.  
  151. ErrorLevel := ERROR_OK
  152. if(dwInChat > 0)
  153. return true
  154. else
  155. return false
  156. }
  157.  
  158. GetPlayerName() {
  159. if(!checkHandles())
  160. return ""
  161.  
  162. dwAddress := dwSAMP + ADDR_SAMP_USERNAME
  163. sUsername := readString(hGTA, dwAddress, 25)
  164. if(ErrorLevel) {
  165. ErrorLevel := ERROR_READ_MEMORY
  166. return ""
  167. }
  168.  
  169. ErrorLevel := ERROR_OK
  170. return sUsername
  171. }
  172.  
  173. getPlayerFPS() {
  174. if (!checkHandles())
  175. return -1
  176.  
  177. fFPS := readFloat(hGTA, 0xB7CB50)
  178. if (ErrorLevel) {
  179. ErrorLevel := ERROR_READ_MEMORY
  180. return -1
  181. }
  182.  
  183. ErrorLevel := ERROR_OK
  184. return Round(fFPS)
  185. }
  186.  
  187. GetPlayerID() {
  188. s := getPlayerName()
  189. return getPlayerIdByName(s)
  190. }
  191.  
  192. GetPlayerScore() {
  193. s := getPlayerID()
  194. return getPlayerScoreById(s)
  195. }
  196.  
  197. GetPlayerPing() {
  198. s := getPlayerID()
  199. return getPlayerPingById(s)
  200. }
  201.  
  202. SendChat(wText) {
  203. wText := "" wText
  204. if(!checkHandles())
  205. return false
  206.  
  207. dwFunc:=0
  208. if(SubStr(wText, 1, 1) == "/")
  209. dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  210. else
  211. dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  212.  
  213. callWithParams(hGTA, dwFunc, [["s", wText]], false)
  214. ErrorLevel := ERROR_OK
  215. return true
  216. }
  217.  
  218. AddChatMessage(wText) {
  219. wText := "" wText
  220. if(!checkHandles())
  221. return false
  222.  
  223. dwFunc := dwSAMP + FUNC_SAMP_ADDTOCHATWND
  224. dwChatInfo := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  225. if(ErrorLevel) {
  226. ErrorLevel := ERROR_READ_MEMORY
  227. return false
  228. }
  229.  
  230. callWithParams(hGTA, dwFunc, [["p", dwChatInfo], ["s", wText]], true)
  231. ErrorLevel := ERROR_OK
  232. return true
  233. }
  234.  
  235. getGameText(type = 1, length = 12) {
  236. if(!checkHandles())
  237. return 0
  238.  
  239. if(type == 1){
  240. text := readString(hGTA, GAMETEXT_1, length)
  241. }else if(type == 2){
  242. text := readString(hGTA, GAMETEXT_2, length)
  243. }else if(type == 3){
  244. text := readString(hGTA, GAMETEXT_3, length)
  245. }else if(type == 4){
  246. text := readString(hGTA, GAMETEXT_4, length)
  247. }else if(type == 5){
  248. text := readString(hGTA, GAMETEXT_5, length)
  249. }
  250. return text
  251. }
  252.  
  253. ShowGameText(wText, dwTime, dwSize) {
  254. wText := "" wText
  255. dwTime += 0
  256. dwTime := Floor(dwTime)
  257. dwSize += 0
  258. dwSize := Floor(dwSize)
  259.  
  260. if(!checkHandles())
  261. return false
  262.  
  263. dwFunc := dwSAMP + FUNC_SAMP_SHOWGAMETEXT
  264. callWithParams(hGTA, dwFunc, [["s", wText], ["i", dwTime], ["i", dwSize]], false)
  265. ErrorLevel := ERROR_OK
  266. return true
  267. }
  268.  
  269. PlayAudioStream(wUrl) {
  270. wUrl := "" wUrl
  271. if(!checkHandles())
  272. return false
  273.  
  274. dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
  275. patchRadio()
  276. callWithParams(hGTA, dwFunc, [["s", wUrl], ["i", 0], ["i", 0], ["i", 0], ["i", 0], ["i", 0]], false)
  277. unPatchRadio()
  278. ErrorLevel := ERROR_OK
  279. return true
  280. }
  281.  
  282. StopAudioStream() {
  283. if(!checkHandles())
  284. return false
  285.  
  286. dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
  287. patchRadio()
  288. callWithParams(hGTA, dwFunc, [["i", 1]], false)
  289. unPatchRadio()
  290. ErrorLevel := ERROR_OK
  291. return true
  292. }
  293.  
  294. PatchRadio() {
  295. if(!checkHandles())
  296. return false
  297.  
  298. VarSetCapacity(nop, 4, 0)
  299. NumPut(0x90909090,nop,0,"UInt")
  300. dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
  301. writeRaw(hGTA, dwFunc, &nop, 4)
  302. writeRaw(hGTA, dwFunc+4, &nop, 1)
  303. dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
  304. writeRaw(hGTA, dwFunc, &nop, 4)
  305. writeRaw(hGTA, dwFunc+4, &nop, 1)
  306. return true
  307. }
  308.  
  309. UnPatchRadio() {
  310. if(!checkHandles())
  311. return false
  312.  
  313. VarSetCapacity(old, 4, 0)
  314. dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
  315. NumPut(0x74003980,old,0,"UInt")
  316. writeRaw(hGTA, dwFunc, &old, 4)
  317. NumPut(0x39,old,0,"UChar")
  318. writeRaw(hGTA, dwFunc+4, &old, 1)
  319. dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
  320. NumPut(0x74003980,old,0,"UInt")
  321. writeRaw(hGTA, dwFunc, &old, 4)
  322. NumPut(0x09,old,0,"UChar")
  323. writeRaw(hGTA, dwFunc+4, &old, 1)
  324. return true
  325. }
  326.  
  327. BlockChatInput() {
  328. if(!checkHandles())
  329. return false
  330.  
  331. VarSetCapacity(nop, 2, 0)
  332. dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  333. NumPut(0x04C2,nop,0,"Short")
  334. writeRaw(hGTA, dwFunc, &nop, 2)
  335. dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  336. writeRaw(hGTA, dwFunc, &nop, 2)
  337. return true
  338. }
  339.  
  340. UnBlockChatInput() {
  341. if(!checkHandles())
  342. return false
  343.  
  344. VarSetCapacity(nop, 2, 0)
  345. dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  346. NumPut(0xA164,nop,0,"Short")
  347. writeRaw(hGTA, dwFunc, &nop, 2)
  348. dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  349. writeRaw(hGTA, dwFunc, &nop, 2)
  350. return true
  351. }
  352.  
  353. GetServerName() {
  354. if(!checkHandles())
  355. return -1
  356.  
  357. dwAdress := readMem(hGTA, dwSAMP + 0x21A0F8, 4, "int")
  358. if(ErrorLevel) {
  359. ErrorLevel := ERROR_READ_MEMORY
  360. return -1
  361. }
  362.  
  363. if(!dwAdress)
  364. return -1
  365.  
  366. ServerName := readString(hGTA, dwAdress + 0x121, 200)
  367. if(ErrorLevel) {
  368. ErrorLevel := ERROR_READ_MEMORY
  369. return -1
  370. }
  371.  
  372. ErrorLevel := ERROR_OK
  373. return ServerName
  374. }
  375.  
  376. GetServerId() {
  377. if(!checkHandles())
  378. return -1
  379.  
  380. dwAdress := readMem(hGTA, dwSAMP + 0x21A0F8, 4, "int")
  381. if(ErrorLevel) {
  382. ErrorLevel := ERROR_READ_MEMORY
  383. return -1
  384. }
  385.  
  386. if(!dwAdress)
  387. return -1
  388.  
  389. ServerIP := readString(hGTA, dwAdress + 0x20, 100)
  390. if(ErrorLevel) {
  391. ErrorLevel := ERROR_READ_MEMORY
  392. return -1
  393. }
  394.  
  395. ErrorLevel := ERROR_OK
  396. return ServerIP
  397. }
  398.  
  399. GetServerPort() {
  400. if(!checkHandles())
  401. return -1
  402.  
  403. dwAdress := readMem(hGTA, dwSAMP + 0x21A0F8, 4, "int")
  404. if(ErrorLevel) {
  405. ErrorLevel := ERROR_READ_MEMORY
  406. return -1
  407. }
  408.  
  409. if(!dwAdress)
  410. return -1
  411.  
  412. ServerPort := readMem(hGTA, dwAdress + 0x225, 4, "int")
  413. if(ErrorLevel) {
  414. ErrorLevel := ERROR_READ_MEMORY
  415. return -1
  416. }
  417.  
  418. ErrorLevel := ERROR_OK
  419. return ServerPort
  420. }
  421.  
  422. GetWeatherId() {
  423. if(!checkHandles())
  424. return -1
  425.  
  426. dwGTA := getModuleBaseAddress("gta_sa.exe", hGTA)
  427. WeatherID := readMem(hGTA, dwGTA + 0xC81320, 2, "byte")
  428. if(ErrorLevel) {
  429. ErrorLevel := ERROR_READ_MEMORY
  430. return -1
  431. }
  432.  
  433. ErrorLevel := ERROR_OK
  434. return WeatherID
  435. }
  436.  
  437. GetWeatherName() {
  438. if(isPlayerInAnyVehicle() == 0)
  439. return -1
  440. if(id >= 0 && id < 23)
  441. return oweatherNames[id-1]
  442. return ""
  443. }
  444.  
  445. GetTargetPed() {
  446. if(!checkHandles())
  447. return 0
  448.  
  449. dwAddress := readDWORD(hGTA, 0xB6F3B8)
  450. if(ErrorLevel) {
  451. ErrorLevel := ERROR_READ_MEMORY
  452. return 0
  453. }
  454.  
  455. if(!dwAddress)
  456. return 0
  457.  
  458. dwAddress := readDWORD(hGTA, dwAddress+0x79C)
  459. if(ErrorLevel) {
  460. ErrorLevel := ERROR_READ_MEMORY
  461. return 0
  462. }
  463.  
  464. ErrorLevel := ERROR_OK
  465. return dwAddress
  466. }
  467.  
  468. CalcScreenCoors(fX,fY,fZ) {
  469. if(!checkHandles())
  470. return false
  471.  
  472. dwM := 0xB6FA2C
  473. m_11 := readFloat(hGTA, dwM + 0*4)
  474. if(ErrorLevel) {
  475. ErrorLevel := ERROR_READ_MEMORY
  476. return false
  477. }
  478.  
  479. m_12 := readFloat(hGTA, dwM + 1*4)
  480. m_13 := readFloat(hGTA, dwM + 2*4)
  481. m_21 := readFloat(hGTA, dwM + 4*4)
  482. m_22 := readFloat(hGTA, dwM + 5*4)
  483. m_23 := readFloat(hGTA, dwM + 6*4)
  484. m_31 := readFloat(hGTA, dwM + 8*4)
  485. m_32 := readFloat(hGTA, dwM + 9*4)
  486. m_33 := readFloat(hGTA, dwM + 10*4)
  487. m_41 := readFloat(hGTA, dwM + 12*4)
  488. m_42 := readFloat(hGTA, dwM + 13*4)
  489. m_43 := readFloat(hGTA, dwM + 14*4)
  490. dwLenX := readDWORD(hGTA, 0xC17044)
  491.  
  492. if(ErrorLevel) {
  493. ErrorLevel := ERROR_READ_MEMORY
  494. return false
  495. }
  496.  
  497. dwLenY := readDWORD(hGTA, 0xC17048)
  498. frX := fZ * m_31 + fY * m_21 + fX * m_11 + m_41
  499. frY := fZ * m_32 + fY * m_22 + fX * m_12 + m_42
  500. frZ := fZ * m_33 + fY * m_23 + fX * m_13 + m_43
  501. fRecip := 1.0/frZ
  502. frX *= fRecip * dwLenX
  503. frY *= fRecip * dwLenY
  504. if(frX<=dwLenX && frY<=dwLenY && frZ>1)
  505. return [frX,frY,frZ]
  506. }
  507.  
  508. GetPedById(dwId) {
  509. dwId += 0
  510. dwId := Floor(dwId)
  511. if (dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  512. return 0
  513. if (iRefreshScoreboard+iUpdateTick > A_TickCount) {
  514. if (oScoreboardData[dwId]) {
  515. if (oScoreboardData[dwId].HasKey("PED"))
  516. return oScoreboardData[dwId].PED
  517. }
  518. return 0
  519. }
  520.  
  521. if(!updateOScoreboardData())
  522. return 0
  523.  
  524. if(oScoreboardData[dwId]) {
  525. if(oScoreboardData[dwId].HasKey("PED"))
  526. return oScoreboardData[dwId].PED
  527. }
  528. return 0
  529. }
  530.  
  531. GetIdByPed(dwPed) {
  532. dwPed += 0
  533. dwPed := Floor(dwPed)
  534. if (!dwPed)
  535. return -1
  536.  
  537. if (iRefreshScoreboard+iUpdateTick > A_TickCount) {
  538. For i, o in oScoreboardData
  539. {
  540. if(o.HasKey("PED")) {
  541. if(o.PED==dwPed)
  542. return i
  543. }
  544. }
  545. return -1
  546. }
  547.  
  548. if (!updateOScoreboardData())
  549. return -1
  550. For i, o in oScoreboardData
  551. {
  552. if(o.HasKey("PED")) {
  553. if(o.PED==dwPed)
  554. return i
  555. }
  556. }
  557. return -1
  558. }
  559.  
  560. GetStreamedInPlayersInfo() {
  561. r:=[]
  562. if(iRefreshScoreboard+iUpdateTick > A_TickCount) {
  563. For i, o in oScoreboardData
  564. {
  565. if(o.HasKey("PED"))
  566. {
  567. p := getPedCoordinates(o.PED)
  568. if(p) {
  569. o.POS := p
  570. r[i] := o
  571. }
  572. }
  573. }
  574. return r
  575. }
  576.  
  577. if (!updateOScoreboardData())
  578. return ""
  579. For i, o in oScoreboardData
  580. {
  581. if(o.HasKey("PED")) {
  582. p := getPedCoordinates(o.PED)
  583. if(p) {
  584. o.POS := p
  585. r[i] := o
  586. }
  587. }
  588. }
  589. return r
  590. }
  591.  
  592. CallFuncForAllStreamedInPlayers(cfunc,dist=0x7fffffff) {
  593. cfunc := "" cfunc
  594. dist += 0
  595. if(!IsFunc(cfunc))
  596. return false
  597.  
  598. p := getStreamedInPlayersInfo()
  599. if(!p)
  600. return false
  601. if(dist<0x7fffffff) {
  602. lpos := getCoordinates()
  603. if(!lpos)
  604. return false
  605. For i, o in p
  606. {
  607. if(dist>getDist(lpos,o.POS))
  608. %cfunc%(o)
  609. }
  610. } else {
  611. For i, o in p
  612. %cfunc%(o)
  613. }
  614. return true
  615. }
  616.  
  617. GetDist(pos1,pos2) {
  618. if(!pos1 || !pos2)
  619. return 0
  620. return Sqrt((pos1[1]-pos2[1])*(pos1[1]-pos2[1])+(pos1[2]-pos2[2])*(pos1[2]-pos2[2])+(pos1[3]-pos2[3])*(pos1[3]-pos2[3]))
  621. }
  622.  
  623. GetClosestPlayerPed() {
  624. dist := 0x7fffffff
  625. p := getStreamedInPlayersInfo()
  626. if(!p)
  627. return -1
  628.  
  629. lpos := getCoordinates()
  630. if(!lpos)
  631. return -1
  632. id := -1
  633. For i, o in p
  634. {
  635. t:=getDist(lpos,o.POS)
  636. if(t<dist) {
  637. dist := t
  638. id := i
  639. }
  640. }
  641.  
  642. PED := getPedById(id)
  643. return PED
  644. }
  645.  
  646. GetClosestPlayerId() {
  647. dist := 0x7fffffff
  648. p := getStreamedInPlayersInfo()
  649. if(!p)
  650. return -1
  651.  
  652. lpos := getCoordinates()
  653. if(!lpos)
  654. return -1
  655.  
  656. id := -1
  657. For i, o in p
  658. {
  659. t:=getDist(lpos,o.POS)
  660. if(t<dist) {
  661. dist := t
  662. id := i
  663. }
  664. }
  665. return id
  666. }
  667.  
  668. CountOnlinePlayers() {
  669. if(!checkHandles())
  670. return -1
  671.  
  672. dwOnline := readDWORD(hGTA, dwSAMP + 0x21A0B4)
  673. if(ErrorLevel) {
  674. ErrorLevel := ERROR_READ_MEMORY
  675. return -1
  676. }
  677.  
  678. dwAddr := dwOnline + 0x4
  679. OnlinePlayers := readDWORD(hGTA, dwAddr)
  680. if(ErrorLevel) {
  681. ErrorLevel := ERROR_READ_MEMORY
  682. return -1
  683. }
  684.  
  685. ErrorLevel := ERROR_OK
  686. return OnlinePlayers
  687. }
  688.  
  689. getPedCoordinates(dwPED) {
  690. dwPED += 0
  691. dwPED := Floor(dwPED)
  692. if(!dwPED)
  693. return ""
  694.  
  695. if(!checkHandles())
  696. return ""
  697.  
  698. dwAddress := readDWORD(hGTA, dwPED + 0x14)
  699. if(ErrorLevel || dwAddress==0) {
  700. ErrorLevel := ERROR_READ_MEMORY
  701. return ""
  702. }
  703.  
  704. fX := readFloat(hGTA, dwAddress + 0x30)
  705. if(ErrorLevel) {
  706. ErrorLevel := ERROR_READ_MEMORY
  707. return ""
  708. }
  709.  
  710. fY := readFloat(hGTA, dwAddress + 0x34)
  711. if(ErrorLevel) {
  712. ErrorLevel := ERROR_READ_MEMORY
  713. return ""
  714. }
  715.  
  716. fZ := readFloat(hGTA, dwAddress + 0x38)
  717. if(ErrorLevel) {
  718. ErrorLevel := ERROR_READ_MEMORY
  719. return ""
  720. }
  721.  
  722. ErrorLevel := ERROR_OK
  723. return [fX, fY, fZ]
  724. }
  725.  
  726. GetTargetPos(dwId) {
  727. dwId += 0
  728. dwId := Floor(dwId)
  729. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  730. return ""
  731.  
  732. if(iRefreshScoreboard+iUpdateTick > A_TickCount) {
  733. if(oScoreboardData[dwId]) {
  734. if(oScoreboardData[dwId].HasKey("PED"))
  735. return getPedCoordinates(oScoreboardData[dwId].PED)
  736. if(oScoreboardData[dwId].HasKey("MPOS"))
  737. return oScoreboardData[dwId].MPOS
  738. }
  739. return ""
  740. }
  741.  
  742. if(!updateOScoreboardData())
  743. return ""
  744.  
  745. if(oScoreboardData[dwId]) {
  746. if(oScoreboardData[dwId].HasKey("PED"))
  747. return getPedCoordinates(oScoreboardData[dwId].PED)
  748. if(oScoreboardData[dwId].HasKey("MPOS"))
  749. return oScoreboardData[dwId].MPOS
  750. }
  751. return ""
  752. }
  753.  
  754. getFraktionBySkinID(id) {
  755. skins := {"LSPD": [163, 164, 265, 266, 267, 280, 281, 283, 284, 288], "LVPD": [282, 287], "FBI": [286, 294, 165, 166], "Russen": [43, 111, 112, 113, 124, 125, 126, 127, 258, 272, 40], "Yakuza": [121, 122, 123, 203, 204, 228, 169, 224, 186], "Grove": [105, 106, 107, 269, 271, 65, 270], "Ballas": [102, 103, 104, 293, 13], "LCM": [46, 47, 48, 98, 185, 223, 249, 214], "Rifa": [114, 115, 116, 173, 174, 175, 184, 273, 195, 298], "Triaden": [49, 117, 118, 120, 208, 263]}
  756.  
  757. fraction := ""
  758. For key, array in skins
  759. {
  760. For index2, value2 in array
  761. {
  762. if(value2 == id) {
  763. fraction := key
  764. Break, 2
  765. }
  766. }
  767. }
  768.  
  769. if(fraction) {
  770. return fraction
  771. }
  772.  
  773. return "Zivilist"
  774. }
  775.  
  776. getFracByID(s) {
  777. s := ["LSPD", "LVPD", "FBI", "Grove", "Ballas", "Rifa", "Russen", "Yakuza", "Triaden", "LCM"]
  778. return s
  779. }
  780.  
  781. GetTargetPlayerSkinIdByPed(dwPED) {
  782. if(!checkHandles())
  783. return -1
  784.  
  785. dwAddr := dwPED + ADDR_CPED_SKINIDOFF
  786. SkinID := readMem(hGTA, dwAddr, 2, "byte")
  787. if(ErrorLevel) {
  788. ErrorLevel := ERROR_READ_MEMORY
  789. return -1
  790. }
  791. ErrorLevel := ERROR_OK
  792. return SkinID
  793. }
  794.  
  795. GetTargetPlayerSkinIdById(dwId) {
  796. if(!checkHandles())
  797. return -1
  798.  
  799. dwPED := getPedById(dwId)
  800. dwAddr := dwPED + ADDR_CPED_SKINIDOFF
  801. SkinID := readMem(hGTA, dwAddr, 2, "byte")
  802. if(ErrorLevel) {
  803. ErrorLevel := ERROR_READ_MEMORY
  804. return -1
  805. }
  806. ErrorLevel := ERROR_OK
  807. return SkinID
  808. }
  809.  
  810. GetVehiclePointerByPed(dwPED) {
  811. dwPED += 0
  812. dwPED := Floor(dwPED)
  813. if(!dwPED)
  814. return 0
  815. if(!checkHandles())
  816. return 0
  817.  
  818. dwAddress := readDWORD(hGTA, dwPED + 0x58C)
  819. if(ErrorLevel) {
  820. ErrorLevel := ERROR_READ_MEMORY
  821. return 0
  822. }
  823. ErrorLevel := ERROR_OK
  824. return dwAddress
  825. }
  826.  
  827. GetVehiclePointerById(dwId) {
  828. if(!dwId)
  829. return 0
  830. if(!checkHandles())
  831. return 0
  832.  
  833. dwPed_By_Id := getPedById(dwId)
  834. dwAddress := readDWORD(hGTA, dwPed_By_Id + 0x58C)
  835. if(ErrorLevel) {
  836. ErrorLevel := ERROR_READ_MEMORY
  837. return 0
  838. }
  839. ErrorLevel := ERROR_OK
  840. return dwAddress
  841. }
  842.  
  843. IsTargetInAnyVehicleByPed(dwPED) {
  844. if(!checkHandles())
  845. return -1
  846.  
  847. dwVehiclePointer := getVehiclePointerByPed(dwPedPointer)
  848. if(dwVehiclePointer > 0)
  849. return 1
  850. else if(dwVehiclePointer <= 0)
  851. return 0
  852. else
  853. return -1
  854. }
  855.  
  856. IsTargetInAnyVehiclebyId(dwId) {
  857. if(!checkHandles())
  858. return -1
  859.  
  860. dwPedPointer := getPedById(dwId)
  861. dwVehiclePointer := getVehiclePointerByPed(dwPedPointer)
  862. if(dwVehiclePointer > 0)
  863. return 1
  864. else if(dwVehiclePointer <= 0)
  865. return 0
  866. else
  867. return -1
  868. }
  869.  
  870. GetTargetVehicleHealthByPed(dwPed) {
  871. if(!checkHandles())
  872. return -1
  873.  
  874. dwVehPtr := getVehiclePointerByPed(dwPed)
  875. dwAddr := dwVehPtr + ADDR_VEHICLE_HPOFF
  876. fHealth := readFloat(hGTA, dwAddr)
  877. if(ErrorLevel) {
  878. ErrorLevel := ERROR_READ_MEMORY
  879. return -1
  880. }
  881.  
  882. ErrorLevel := ERROR_OK
  883. return Round(fHealth)
  884. }
  885.  
  886. GetTargetVehicleHealthById(dwId) {
  887. if(!checkHandles())
  888. return -1
  889.  
  890. dwVehPtr := getVehiclePointerById(dwId)
  891. dwAddr := dwVehPtr + ADDR_VEHICLE_HPOFF
  892. fHealth := readFloat(hGTA, dwAddr)
  893. if(ErrorLevel) {
  894. ErrorLevel := ERROR_READ_MEMORY
  895. return -1
  896. }
  897. ErrorLevel := ERROR_OK
  898. return Round(fHealth)
  899. }
  900.  
  901. GetTargetVehicleTypeByPed(dwPED) {
  902. if(!checkHandles())
  903. return 0
  904. dwAddr := getVehiclePointerByPed(dwPED)
  905. if(!dwAddr)
  906. return 0
  907. cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_TYPE, 1, "Char")
  908. if(ErrorLevel) {
  909. ErrorLevel := ERROR_READ_MEMORY
  910. return 0
  911. }
  912. ErrorLevel := ERROR_OK
  913. if(!cVal) {
  914. mid := getVehicleModelId()
  915. Loop % oAirplaneModels.MaxIndex()
  916. {
  917. if(oAirplaneModels[A_Index]==mid)
  918. return 5
  919. }
  920. return 1
  921. }
  922. else if(cVal==5)
  923. return 2
  924. else if(cVal==6)
  925. return 3
  926. else if(cVal==9) {
  927. mid := getVehicleModelId()
  928. Loop % oBikeModels.MaxIndex()
  929. {
  930. if(oBikeModels[A_Index]==mid)
  931. return 6
  932. }
  933. return 4
  934. }
  935. return 0
  936. }
  937.  
  938. GetTargetVehicleTypeById(dwId) {
  939. if(!checkHandles())
  940. return 0
  941.  
  942. dwAddr := getVehiclePointerById(dwId)
  943. if(!dwAddr)
  944. return 0
  945.  
  946. cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_TYPE, 1, "Char")
  947. if(ErrorLevel) {
  948. ErrorLevel := ERROR_READ_MEMORY
  949. return 0
  950. }
  951.  
  952. ErrorLevel := ERROR_OK
  953. if(!cVal) {
  954. mid := getVehicleModelId()
  955. Loop % oAirplaneModels.MaxIndex()
  956. {
  957. if(oAirplaneModels[A_Index]==mid)
  958. return 5
  959. }
  960. return 1
  961. }
  962. else if(cVal==5)
  963. return 2
  964. else if(cVal==6)
  965. return 3
  966. else if(cVal==9) {
  967. mid := getVehicleModelId()
  968. Loop % oBikeModels.MaxIndex()
  969. {
  970. if(oBikeModels[A_Index]==mid)
  971. return 6
  972. }
  973. return 4
  974. }
  975. return 0
  976. }
  977.  
  978. GetTargetVehicleModelIdByPed(dwPED) {
  979. if(!checkHandles())
  980. return 0
  981. dwAddr := getVehiclePointerByPed(dwPED)
  982. if(!dwAddr)
  983. return 0
  984.  
  985. sVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_MODEL, 2, "Short")
  986. if(ErrorLevel) {
  987. ErrorLevel := ERROR_READ_MEMORY
  988. return 0
  989. }
  990. ErrorLevel := ERROR_OK
  991. return sVal
  992. }
  993.  
  994. GetTargetVehicleModelIdById(dwId) {
  995. if(!checkHandles())
  996. return 0
  997. dwAddr := getVehiclePointerById(dwId)
  998. if(!dwAddr)
  999. return 0
  1000.  
  1001. sVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_MODEL, 2, "Short")
  1002. if(ErrorLevel) {
  1003. ErrorLevel := ERROR_READ_MEMORY
  1004. return 0
  1005. }
  1006. ErrorLevel := ERROR_OK
  1007. return sVal
  1008. }
  1009.  
  1010. GetTargetVehicleModelNameByPed(dwPED) {
  1011. id := getTargetVehicleModelIdByPed(dwPED)
  1012.  
  1013. if(id > 400 && id < 611)
  1014. return ovehicleNames[id-399]
  1015. return ""
  1016. }
  1017.  
  1018. GetTargetVehicleModelNameById(dwId) {
  1019. id := getTargetVehicleModelIdById(dwId)
  1020.  
  1021. if(id > 400 && id < 611)
  1022. return ovehicleNames[id-399]
  1023. return ""
  1024. }
  1025.  
  1026. GetTargetVehicleLightStateByPed(dwPED) {
  1027. if(!checkHandles())
  1028. return -1
  1029.  
  1030. dwAddr := getVehiclePointerByPed(dwPED)
  1031. if(!dwAddr)
  1032. return -1
  1033. dwVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_LIGHTSTATE, 4, "Int")
  1034. if(ErrorLevel) {
  1035. ErrorLevel := ERROR_READ_MEMORY
  1036. return -1
  1037. }
  1038. ErrorLevel := ERROR_OK
  1039. return (dwVal>0)
  1040. }
  1041.  
  1042. GetTargetVehicleLightStateById(dwId) {
  1043. if(!checkHandles())
  1044. return -1
  1045.  
  1046. dwAddr := getVehiclePointerById(dwId)
  1047. if(!dwAddr)
  1048. return -1
  1049.  
  1050. dwVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_LIGHTSTATE, 4, "Int")
  1051. if(ErrorLevel) {
  1052. ErrorLevel := ERROR_READ_MEMORY
  1053. return -1
  1054. }
  1055. ErrorLevel := ERROR_OK
  1056. return (dwVal>0)
  1057. }
  1058.  
  1059. getTargetVehicleLockStateByPed(dwPED) {
  1060. if(!checkHandles())
  1061. return -1
  1062.  
  1063. dwAddr := getVehiclePointerByPed(dwPED)
  1064. if(!dwAddr)
  1065. return -1
  1066. dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DOORSTATE)
  1067. if(ErrorLevel) {
  1068. ErrorLevel := ERROR_READ_MEMORY
  1069. return -1
  1070. }
  1071. ErrorLevel := ERROR_OK
  1072. return (dwVal==2)
  1073. }
  1074.  
  1075. getTargetVehicleLockStateById(dwId) {
  1076. if(!checkHandles())
  1077. return -1
  1078.  
  1079. dwAddr := getVehiclePointerById(dwId)
  1080. if(!dwAddr)
  1081. return -1
  1082.  
  1083. dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DOORSTATE)
  1084. if(ErrorLevel) {
  1085. ErrorLevel := ERROR_READ_MEMORY
  1086. return -1
  1087. }
  1088. ErrorLevel := ERROR_OK
  1089. return (dwVal==2)
  1090. }
  1091.  
  1092. getTargetVehicleColor1byPed(dwPED) {
  1093. if(!checkHandles())
  1094. return 0
  1095.  
  1096. dwAddr := getVehiclePointerByPed(dwPED)
  1097. if(!dwAddr)
  1098. return 0
  1099.  
  1100. sVal := readMem(hGTA, dwAddr + 1076, 1, "byte")
  1101. if(ErrorLevel) {
  1102. ErrorLevel := ERROR_READ_MEMORY
  1103. return 0
  1104. }
  1105. ErrorLevel := ERROR_OK
  1106. return sVal
  1107. }
  1108.  
  1109. getTargetVehicleColor1byId(dwId) {
  1110. if(!checkHandles())
  1111. return 0
  1112.  
  1113. dwAddr := getVehiclePointerById(dwId)
  1114. if(!dwAddr)
  1115. return 0
  1116.  
  1117. sVal := readMem(hGTA, dwAddr + 1076, 1, "byte")
  1118. if(ErrorLevel) {
  1119. ErrorLevel := ERROR_READ_MEMORY
  1120. return 0
  1121. }
  1122. ErrorLevel := ERROR_OK
  1123. return sVal
  1124. }
  1125.  
  1126. getTargetVehicleColor2byPed(dwPED) {
  1127. if(!checkHandles())
  1128. return 0
  1129.  
  1130. dwAddr := getVehiclePointerByPed(dwPED)
  1131. if(!dwAddr)
  1132. return 0
  1133.  
  1134. sVal := readMem(hGTA, dwAddr + 1077, 1, "byte")
  1135. if(ErrorLevel) {
  1136. ErrorLevel := ERROR_READ_MEMORY
  1137. return 0
  1138. }
  1139. ErrorLevel := ERROR_OK
  1140. return sVal
  1141. }
  1142.  
  1143. getTargetVehicleColor2byId(dwId) {
  1144. if(!checkHandles())
  1145. return 0
  1146.  
  1147. dwAddr := getVehiclePointerById(dwId)
  1148. if(!dwAddr)
  1149. return 0
  1150.  
  1151. sVal := readMem(hGTA, dwAddr + 1077, 1, "byte")
  1152. if(ErrorLevel) {
  1153. ErrorLevel := ERROR_READ_MEMORY
  1154. return 0
  1155. }
  1156. ErrorLevel := ERROR_OK
  1157. return sVal
  1158. }
  1159.  
  1160. getTargetVehicleSpeedByPed(dwPED) {
  1161. if(!checkHandles())
  1162. return -1
  1163.  
  1164. dwAddr := getVehiclePointerByPed(dwPED)
  1165. fSpeedX := readMem(hGTA, dwAddr + ADDR_VEHICLE_X, 4, "float")
  1166. fSpeedY := readMem(hGTA, dwAddr + ADDR_VEHICLE_Y, 4, "float")
  1167. fSpeedZ := readMem(hGTA, dwAddr + ADDR_VEHICLE_Z, 4, "float")
  1168. fVehicleSpeed := sqrt((fSpeedX * fSpeedX) + (fSpeedY * fSpeedY) + (fSpeedZ * fSpeedZ))
  1169. fVehicleSpeed := (fVehicleSpeed * 100) * 1.43
  1170. return fVehicleSpeed
  1171. }
  1172.  
  1173. getTargetVehicleSpeedById(dwId) {
  1174. if(!checkHandles())
  1175. return -1
  1176. dwAddr := getVehiclePointerById(dwId)
  1177. fSpeedX := readMem(hGTA, dwAddr + ADDR_VEHICLE_X, 4, "float")
  1178. fSpeedY := readMem(hGTA, dwAddr + ADDR_VEHICLE_Y, 4, "float")
  1179. fSpeedZ := readMem(hGTA, dwAddr + ADDR_VEHICLE_Z, 4, "float")
  1180. fVehicleSpeed := sqrt((fSpeedX * fSpeedX) + (fSpeedY * fSpeedY) + (fSpeedZ * fSpeedZ))
  1181. fVehicleSpeed := (fVehicleSpeed * 100) * 1.43
  1182. return fVehicleSpeed
  1183. }
  1184.  
  1185. getPlayerNameById(dwId) {
  1186. dwId += 0
  1187. dwId := Floor(dwId)
  1188. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  1189. return ""
  1190.  
  1191. if(iRefreshScoreboard+iUpdateTick > A_TickCount) {
  1192. if(oScoreboardData[dwId])
  1193. return oScoreboardData[dwId].NAME
  1194. return ""
  1195. }
  1196.  
  1197. if(!updateOScoreboardData())
  1198. return ""
  1199.  
  1200. if(oScoreboardData[dwId])
  1201. return oScoreboardData[dwId].NAME
  1202. return ""
  1203. }
  1204.  
  1205. GetPlayerIdByName(wName) {
  1206. wName := "" wName
  1207. if(StrLen(wName) < 1 || StrLen(wName) > 24)
  1208. return -1
  1209.  
  1210. if(iRefreshScoreboard+iUpdateTick > A_TickCount) {
  1211. For i, o in oScoreboardData
  1212. {
  1213. if(InStr(o.NAME,wName)==1)
  1214. return i
  1215. }
  1216. return -1
  1217. }
  1218.  
  1219. if(!updateOScoreboardData())
  1220. return -1
  1221. For i, o in oScoreboardData
  1222. {
  1223. if(InStr(o.NAME,wName)==1)
  1224. return i
  1225. }
  1226. return -1
  1227. }
  1228.  
  1229. getPlayerScoreById(dwId) {
  1230. dwId += 0
  1231. dwId := Floor(dwId)
  1232. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  1233. return ""
  1234.  
  1235. if(iRefreshScoreboard+iUpdateTick > A_TickCount) {
  1236. if(oScoreboardData[dwId])
  1237. return oScoreboardData[dwId].SCORE
  1238. return ""
  1239. }
  1240.  
  1241. if(!updateOScoreboardData())
  1242. return ""
  1243.  
  1244. if(oScoreboardData[dwId])
  1245. return oScoreboardData[dwId].SCORE
  1246. return ""
  1247. }
  1248.  
  1249. getPlayerPingById(dwId) {
  1250. dwId += 0
  1251. dwId := Floor(dwId)
  1252. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  1253. return -1
  1254.  
  1255. if(iRefreshScoreboard+iUpdateTick > A_TickCount) {
  1256. if(oScoreboardData[dwId])
  1257. return oScoreboardData[dwId].PING
  1258. return -1
  1259. }
  1260.  
  1261. if(!updateOScoreboardData())
  1262. return -1
  1263. if(oScoreboardData[dwId])
  1264. return oScoreboardData[dwId].PING
  1265. return -1
  1266. }
  1267.  
  1268. isNPCById(dwId) {
  1269. dwId += 0
  1270. dwId := Floor(dwId)
  1271. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  1272. return -1
  1273.  
  1274. if(iRefreshScoreboard+iUpdateTick > A_TickCount) {
  1275. if(oScoreboardData[dwId])
  1276. return oScoreboardData[dwId].ISNPC
  1277. return -1
  1278. }
  1279.  
  1280. if(!updateOScoreboardData())
  1281. return -1
  1282. if(oScoreboardData[dwId])
  1283. return oScoreboardData[dwId].ISNPC
  1284. return -1
  1285. }
  1286.  
  1287. updateScoreboardDataEx() {
  1288. if(!checkHandles())
  1289. return false
  1290.  
  1291. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  1292. if(ErrorLevel || dwAddress==0) {
  1293. ErrorLevel := ERROR_READ_MEMORY
  1294. return false
  1295. }
  1296.  
  1297. dwFunc := dwSAMP + FUNC_UPDATESCOREBOARD
  1298. VarSetCapacity(injectData, 11, 0)
  1299. NumPut(0xB9, injectData, 0, "UChar")
  1300. NumPut(dwAddress, injectData, 1, "UInt")
  1301. NumPut(0xE8, injectData, 5, "UChar")
  1302. offset := dwFunc - (pInjectFunc + 10)
  1303. NumPut(offset, injectData, 6, "Int")
  1304. NumPut(0xC3, injectData, 10, "UChar")
  1305. writeRaw(hGTA, pInjectFunc, &injectData, 11)
  1306.  
  1307. if(ErrorLevel)
  1308. return false
  1309.  
  1310. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  1311. if(ErrorLevel)
  1312. return false
  1313.  
  1314. waitForSingleObject(hThread, 0xFFFFFFFF)
  1315. closeProcess(hThread)
  1316. return true
  1317. }
  1318.  
  1319. updateOScoreboardData() {
  1320. if(!checkHandles())
  1321. return 0
  1322.  
  1323. oScoreboardData := []
  1324. if(!updateScoreboardDataEx())
  1325. return 0
  1326.  
  1327. iRefreshScoreboard := A_TickCount
  1328. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  1329. if(ErrorLevel || dwAddress==0) {
  1330. ErrorLevel := ERROR_READ_MEMORY
  1331. return 0
  1332. }
  1333.  
  1334. dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  1335. if(ErrorLevel || dwAddress==0) {
  1336. ErrorLevel := ERROR_READ_MEMORY
  1337. return 0
  1338. }
  1339.  
  1340. dwPlayers := readDWORD(hGTA, dwAddress + SAMP_PPOOL_PLAYER_OFFSET)
  1341. if(ErrorLevel || dwPlayers==0) {
  1342. ErrorLevel := ERROR_READ_MEMORY
  1343. return 0
  1344. }
  1345.  
  1346. wID := readMem(hGTA, dwPlayers + SAMP_SLOCALPLAYERID_OFFSET, 2, "Short")
  1347. if(ErrorLevel) {
  1348. ErrorLevel := ERROR_READ_MEMORY
  1349. return 0
  1350. }
  1351.  
  1352. dwPing := readMem(hGTA, dwPlayers + SAMP_ILOCALPLAYERPING_OFFSET, 4, "Int")
  1353. if(ErrorLevel) {
  1354. ErrorLevel := ERROR_READ_MEMORY
  1355. return 0
  1356. }
  1357.  
  1358. dwScore := readMem(hGTA, dwPlayers + SAMP_ILOCALPLAYERSCORE_OFFSET, 4, "Int")
  1359. if(ErrorLevel) {
  1360. ErrorLevel := ERROR_READ_MEMORY
  1361. return 0
  1362. }
  1363.  
  1364. dwTemp := readMem(hGTA, dwPlayers + SAMP_ISTRLEN_LOCALPLAYERNAME_OFFSET, 4, "Int")
  1365. if(ErrorLevel) {
  1366. ErrorLevel := ERROR_READ_MEMORY
  1367. return 0
  1368. }
  1369.  
  1370. sUsername := ""
  1371. if(dwTemp <= 0xf) {
  1372. sUsername := readString(hGTA, dwPlayers + SAMP_SZLOCALPLAYERNAME_OFFSET, 16)
  1373. if(ErrorLevel) {
  1374. ErrorLevel := ERROR_READ_MEMORY
  1375. return 0
  1376. }
  1377. } else {
  1378. dwAddress := readDWORD(hGTA, dwPlayers + SAMP_PSZLOCALPLAYERNAME_OFFSET)
  1379. if(ErrorLevel) {
  1380. ErrorLevel := ERROR_READ_MEMORY
  1381. return 0
  1382. }
  1383.  
  1384. sUsername := readString(hGTA, dwAddress, 25)
  1385. if(ErrorLevel) {
  1386. ErrorLevel := ERROR_READ_MEMORY
  1387. return 0
  1388. }
  1389. }
  1390.  
  1391. oScoreboardData[wID] := Object("NAME", sUsername, "ID", wID, "PING", dwPing, "SCORE", dwScore, "ISNPC", 0)
  1392. Loop, % SAMP_PLAYER_MAX
  1393. {
  1394. i := A_Index-1
  1395. dwRemoteplayer := readDWORD(hGTA, dwPlayers+SAMP_PREMOTEPLAYER_OFFSET+i*4)
  1396. if(ErrorLevel) {
  1397. ErrorLevel := ERROR_READ_MEMORY
  1398. return 0
  1399. }
  1400. if(dwRemoteplayer==0)
  1401. continue
  1402.  
  1403. dwPing := readMem(hGTA, dwRemoteplayer + SAMP_IPING_OFFSET, 4, "Int")
  1404. if(ErrorLevel) {
  1405. ErrorLevel := ERROR_READ_MEMORY
  1406. return 0
  1407. }
  1408.  
  1409. dwScore := readMem(hGTA, dwRemoteplayer + SAMP_ISCORE_OFFSET, 4, "Int")
  1410. if(ErrorLevel) {
  1411. ErrorLevel := ERROR_READ_MEMORY
  1412. return 0
  1413. }
  1414.  
  1415. dwIsNPC := readMem(hGTA, dwRemoteplayer + SAMP_ISNPC_OFFSET, 4, "Int")
  1416. if(ErrorLevel) {
  1417. ErrorLevel := ERROR_READ_MEMORY
  1418. return 0
  1419. }
  1420.  
  1421. dwTemp := readMem(hGTA, dwRemoteplayer + SAMP_ISTRLENNAME___OFFSET, 4, "Int")
  1422. if(ErrorLevel) {
  1423. ErrorLevel := ERROR_READ_MEMORY
  1424. return 0
  1425. }
  1426.  
  1427. sUsername := ""
  1428. if(dwTemp <= 0xf) {
  1429. sUsername := readString(hGTA, dwRemoteplayer+SAMP_SZPLAYERNAME_OFFSET, 16)
  1430. if(ErrorLevel) {
  1431. ErrorLevel := ERROR_READ_MEMORY
  1432. return 0
  1433. }
  1434. } else {
  1435. dwAddress := readDWORD(hGTA, dwRemoteplayer + SAMP_PSZPLAYERNAME_OFFSET)
  1436. if(ErrorLevel || dwAddress==0) {
  1437. ErrorLevel := ERROR_READ_MEMORY
  1438. return 0
  1439. }
  1440. sUsername := readString(hGTA, dwAddress, 25)
  1441. if(ErrorLevel) {
  1442. ErrorLevel := ERROR_READ_MEMORY
  1443. return 0
  1444. }
  1445. }
  1446.  
  1447. o := Object("NAME", sUsername, "ID", i, "PING", dwPing, "SCORE", dwScore, "ISNPC", dwIsNPC)
  1448. oScoreboardData[i] := o
  1449. dwRemoteplayerData := readDWORD(hGTA, dwRemoteplayer + 0x0)
  1450. if(ErrorLevel) {
  1451. ErrorLevel := ERROR_READ_MEMORY
  1452. return 0
  1453. }
  1454.  
  1455. if(dwRemoteplayerData==0)
  1456. continue
  1457. dwAddress := readDWORD(hGTA, dwRemoteplayerData + 489)
  1458. if(ErrorLevel) {
  1459. ErrorLevel := ERROR_READ_MEMORY
  1460. return 0
  1461. }
  1462.  
  1463. if(dwAddress) {
  1464. ix := readMem(hGTA, dwRemoteplayerData + 493, 4, "Int")
  1465. if(ErrorLevel) {
  1466. ErrorLevel := ERROR_READ_MEMORY
  1467. return 0
  1468. }
  1469.  
  1470. iy := readMem(hGTA, dwRemoteplayerData + 497, 4, "Int")
  1471. if(ErrorLevel) {
  1472. ErrorLevel := ERROR_READ_MEMORY
  1473. return 0
  1474. }
  1475.  
  1476. iz := readMem(hGTA, dwRemoteplayerData + 501, 4, "Int")
  1477. if(ErrorLevel) {
  1478. ErrorLevel := ERROR_READ_MEMORY
  1479. return 0
  1480. }
  1481. o.MPOS := [ix, iy, iz]
  1482. }
  1483.  
  1484. dwpSAMP_Actor := readDWORD(hGTA, dwRemoteplayerData + 0x0)
  1485. if(ErrorLevel) {
  1486. ErrorLevel := ERROR_READ_MEMORY
  1487. return 0
  1488. }
  1489.  
  1490. if(dwpSAMP_Actor==0)
  1491. continue
  1492.  
  1493. dwPed := readDWORD(hGTA, dwpSAMP_Actor + 676)
  1494. if(ErrorLevel) {
  1495. ErrorLevel := ERROR_READ_MEMORY
  1496. return 0
  1497. }
  1498.  
  1499. if(dwPed==0)
  1500. continue
  1501.  
  1502. o.PED := dwPed
  1503. fHP := readFloat(hGTA, dwRemoteplayerData + 444)
  1504. if(ErrorLevel) {
  1505. ErrorLevel := ERROR_READ_MEMORY
  1506. return 0
  1507. }
  1508.  
  1509. fARMOR := readFloat(hGTA, dwRemoteplayerData + 440)
  1510. if(ErrorLevel) {
  1511. ErrorLevel := ERROR_READ_MEMORY
  1512. return 0
  1513. }
  1514.  
  1515. o.HP := fHP
  1516. o.ARMOR := fARMOR
  1517. }
  1518. ErrorLevel := ERROR_OK
  1519. return 1
  1520. }
  1521.  
  1522. GetChatLine(Line, ByRef Output, timestamp=0, color=0) {
  1523. chatindex := 0
  1524. FileRead, file, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
  1525.  
  1526. loop, Parse, file, `n, `r
  1527. {
  1528. if(A_LoopField)
  1529. chatindex := A_Index
  1530. }
  1531. loop, Parse, file, `n, `r
  1532. {
  1533. if(A_Index = chatindex - line){
  1534. output := A_LoopField
  1535. break
  1536. }
  1537. }
  1538.  
  1539. file := ""
  1540. if(!timestamp)
  1541. output := RegExReplace(output, "U)^\[\d{2}:\d{2}:\d{2}\]")
  1542. if(!color)
  1543. output := RegExReplace(output, "Ui)\{[a-f0-9]{6}\}")
  1544. return
  1545. }
  1546.  
  1547. getPlayerHealth() {
  1548. if(!checkHandles())
  1549. return -1
  1550.  
  1551. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  1552. if(ErrorLevel) {
  1553. ErrorLevel := ERROR_READ_MEMORY
  1554. return -1
  1555. }
  1556.  
  1557. dwAddr := dwCPedPtr + ADDR_CPED_HPOFF
  1558. fHealth := readFloat(hGTA, dwAddr)
  1559. if(ErrorLevel) {
  1560. ErrorLevel := ERROR_READ_MEMORY
  1561. return -1
  1562. }
  1563. ErrorLevel := ERROR_OK
  1564. return Round(fHealth)
  1565. }
  1566.  
  1567. getPlayerArmor() {
  1568. if(!checkHandles())
  1569. return -1
  1570.  
  1571. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  1572. if(ErrorLevel) {
  1573. ErrorLevel := ERROR_READ_MEMORY
  1574. return -1
  1575. }
  1576.  
  1577. dwAddr := dwCPedPtr + ADDR_CPED_ARMOROFF
  1578. fHealth := readFloat(hGTA, dwAddr)
  1579. if(ErrorLevel) {
  1580. ErrorLevel := ERROR_READ_MEMORY
  1581. return -1
  1582. }
  1583.  
  1584. ErrorLevel := ERROR_OK
  1585. return Round(fHealth)
  1586. }
  1587.  
  1588. GetPlayerInteriorId() {
  1589. if(!checkHandles())
  1590. return -1
  1591.  
  1592. iid := readMem(hGTA, ADDR_CPED_INTID, 4, "Int")
  1593. if(ErrorLevel) {
  1594. ErrorLevel := ERROR_READ_MEMORY
  1595. return -1
  1596. }
  1597.  
  1598. ErrorLevel := ERROR_OK
  1599. return iid
  1600. }
  1601.  
  1602. getPlayerSkinID() {
  1603. if(!checkHandles())
  1604. return -1
  1605.  
  1606. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  1607. if(ErrorLevel) {
  1608. ErrorLevel := ERROR_READ_MEMORY
  1609. return -1
  1610. }
  1611.  
  1612. dwAddr := dwCPedPtr + ADDR_CPED_SKINIDOFF
  1613. SkinID := readMem(hGTA, dwAddr, 2, "byte")
  1614. if(ErrorLevel) {
  1615. ErrorLevel := ERROR_READ_MEMORY
  1616. return -1
  1617. }
  1618.  
  1619. ErrorLevel := ERROR_OK
  1620. return SkinID
  1621. }
  1622.  
  1623. getPlayerMoney() {
  1624. if(!checkHandles())
  1625. return ""
  1626.  
  1627. money := readMem(hGTA, ADDR_CPED_MONEY, 4, "Int")
  1628. if(ErrorLevel) {
  1629. ErrorLevel := ERROR_READ_MEMORY
  1630. return ""
  1631. }
  1632.  
  1633. ErrorLevel := ERROR_OK
  1634. return money
  1635. }
  1636.  
  1637. getPlayerWanteds() {
  1638. if(!checkHandles())
  1639. return -1
  1640.  
  1641. dwPtr := 0xB7CD9C
  1642. dwPtr := readDWORD(hGTA, dwPtr)
  1643. if(ErrorLevel) {
  1644. ErrorLevel := ERROR_READ_MEMORY
  1645. return -1
  1646. }
  1647.  
  1648. Wanteds := readDWORD(hGTA, dwPtr)
  1649. if(ErrorLevel) {
  1650. ErrorLevel := ERROR_READ_MEMORY
  1651. return -1
  1652. }
  1653.  
  1654. ErrorLevel := ERROR_OK
  1655. return Wanteds
  1656. }
  1657.  
  1658. getPlayerWeaponId() {
  1659. if(!checkHandles())
  1660. return 0
  1661.  
  1662. WaffenId := readMem(hGTA, 0xBAA410, 4, "byte")
  1663. if(ErrorLevel) {
  1664. ErrorLevel := ERROR_READ_MEMORY
  1665. return -1
  1666. }
  1667. return WaffenId
  1668. }
  1669.  
  1670. getPlayerWeaponName() {
  1671. id := getPlayerWeaponId()
  1672.  
  1673. if(id >= 0 && id < 44) {
  1674. return oweaponNames[id+1]
  1675. }
  1676. return ""
  1677. }
  1678.  
  1679. getPlayerState() {
  1680. if(!checkHandles())
  1681. return -1
  1682.  
  1683. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  1684. if(ErrorLevel) {
  1685. ErrorLevel := ERROR_READ_MEMORY
  1686. return -1
  1687. }
  1688.  
  1689. State := readDWORD(hGTA, dwCPedPtr + 0x530)
  1690. if(ErrorLevel) {
  1691. ErrorLevel := ERROR_READ_MEMORY
  1692. return -1
  1693. }
  1694.  
  1695. ErrorLevel := ERROR_OK
  1696. return State
  1697. }
  1698.  
  1699. IsPlayerInMenu() {
  1700. if(!checkHandles())
  1701. return -1
  1702.  
  1703. IsInMenu := readMem(hGTA, 0xBA67A4, 4, "byte")
  1704. if(ErrorLevel) {
  1705. ErrorLevel := ERROR_READ_MEMORY
  1706. return -1
  1707. }
  1708.  
  1709. ErrorLevel := ERROR_OK
  1710. return IsInMenu
  1711. }
  1712.  
  1713. getPlayerMapPosX() {
  1714. if(!checkHandles())
  1715. return -1
  1716.  
  1717. MapPosX := readFloat(hGTA, 0xBA67B8)
  1718. if(ErrorLevel) {
  1719. ErrorLevel := ERROR_READ_MEMORY
  1720. return -1
  1721. }
  1722.  
  1723. ErrorLevel := ERROR_OK
  1724. return MapPosX
  1725. }
  1726.  
  1727. getPlayerMapPosY() {
  1728. if(!checkHandles())
  1729. return -1
  1730.  
  1731. MapPosY := readFloat(hGTA, 0xBA67BC)
  1732. if(ErrorLevel) {
  1733. ErrorLevel := ERROR_READ_MEMORY
  1734. return -1
  1735. }
  1736.  
  1737. ErrorLevel := ERROR_OK
  1738. return MapPosY
  1739. }
  1740.  
  1741. getPlayerMapZoom() {
  1742. if(!checkHandles())
  1743. return -1
  1744.  
  1745. MapZoom := readFloat(hGTA, 0xBA67AC)
  1746. if(ErrorLevel) {
  1747. ErrorLevel := ERROR_READ_MEMORY
  1748. return -1
  1749. }
  1750.  
  1751. ErrorLevel := ERROR_OK
  1752. return MapZoom
  1753. }
  1754.  
  1755. IsPlayerFreezed() {
  1756. if(!checkHandles())
  1757. return -1
  1758.  
  1759. dwGTA := getModuleBaseAddress("gta_sa.exe", hGTA)
  1760. IPF := readMem(hGTA, dwGTA + 0x690495, 2, "byte")
  1761. if(ErrorLevel) {
  1762. ErrorLevel := ERROR_READ_MEMORY
  1763. return -1
  1764. }
  1765.  
  1766. ErrorLevel := ERROR_OK
  1767. return IPF
  1768. }
  1769.  
  1770. isPlayerInAnyVehicle() {
  1771. if(!checkHandles())
  1772. return -1
  1773.  
  1774. dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1775. if(ErrorLevel) {
  1776. ErrorLevel := ERROR_READ_MEMORY
  1777. return -1
  1778. }
  1779.  
  1780. return (dwVehPtr > 0)
  1781. }
  1782.  
  1783. isPlayerDriver() {
  1784. if(!checkHandles())
  1785. return -1
  1786.  
  1787. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1788. if(ErrorLevel) {
  1789. ErrorLevel := ERROR_READ_MEMORY
  1790. return -1
  1791. }
  1792.  
  1793. if(!dwAddr)
  1794. return -1
  1795.  
  1796. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  1797. if(ErrorLevel) {
  1798. ErrorLevel := ERROR_READ_MEMORY
  1799. return -1
  1800. }
  1801.  
  1802. dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DRIVER)
  1803. if(ErrorLevel) {
  1804. ErrorLevel := ERROR_READ_MEMORY
  1805. return -1
  1806. }
  1807.  
  1808. ErrorLevel := ERROR_OK
  1809. return (dwVal==dwCPedPtr)
  1810. }
  1811.  
  1812. getVehicleHealth() {
  1813. if(!checkHandles())
  1814. return -1
  1815.  
  1816. dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1817. if(ErrorLevel) {
  1818. ErrorLevel := ERROR_READ_MEMORY
  1819. return -1
  1820. }
  1821.  
  1822. dwAddr := dwVehPtr + ADDR_VEHICLE_HPOFF
  1823. fHealth := readFloat(hGTA, dwAddr)
  1824. if(ErrorLevel) {
  1825. ErrorLevel := ERROR_READ_MEMORY
  1826. return -1
  1827. }
  1828.  
  1829. ErrorLevel := ERROR_OK
  1830. return Round(fHealth)
  1831. }
  1832.  
  1833. getVehicleType() {
  1834. if(!checkHandles())
  1835. return 0
  1836.  
  1837. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1838. if(ErrorLevel) {
  1839. ErrorLevel := ERROR_READ_MEMORY
  1840. return 0
  1841. }
  1842.  
  1843. if(!dwAddr)
  1844. return 0
  1845. cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_TYPE, 1, "Char")
  1846. if(ErrorLevel) {
  1847. ErrorLevel := ERROR_READ_MEMORY
  1848. return 0
  1849. }
  1850.  
  1851. ErrorLevel := ERROR_OK
  1852. if(!cVal) {
  1853. mid := getVehicleModelId()
  1854. Loop % oAirplaneModels.MaxIndex()
  1855. {
  1856. if(oAirplaneModels[A_Index]==mid)
  1857. return 5
  1858. }
  1859. return 1
  1860. }
  1861. else if(cVal==5)
  1862. return 2
  1863. else if(cVal==6)
  1864. return 3
  1865. else if(cVal==9) {
  1866. mid := getVehicleModelId()
  1867. Loop % oBikeModels.MaxIndex()
  1868. {
  1869. if(oBikeModels[A_Index]==mid)
  1870. return 6
  1871. }
  1872. return 4
  1873. }
  1874. return 0
  1875. }
  1876.  
  1877. getVehicleModelId() {
  1878. if(!checkHandles())
  1879. return 0
  1880.  
  1881. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1882. if(ErrorLevel) {
  1883. ErrorLevel := ERROR_READ_MEMORY
  1884. return 0
  1885. }
  1886.  
  1887. if(!dwAddr)
  1888. return 0
  1889. sVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_MODEL, 2, "Short")
  1890. if(ErrorLevel) {
  1891. ErrorLevel := ERROR_READ_MEMORY
  1892. return 0
  1893. }
  1894.  
  1895. ErrorLevel := ERROR_OK
  1896. return sVal
  1897. }
  1898.  
  1899. getVehicleModelName() {
  1900. id:=getVehicleModelId()
  1901. if(id > 400 && id < 611)
  1902. return ovehicleNames[id-399]
  1903. return ""
  1904. }
  1905.  
  1906. getVehicleLightState() {
  1907. if(!checkHandles())
  1908. return -1
  1909.  
  1910. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1911. if(ErrorLevel) {
  1912. ErrorLevel := ERROR_READ_MEMORY
  1913. return -1
  1914. }
  1915.  
  1916. if(!dwAddr)
  1917. return -1
  1918. dwVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_LIGHTSTATE, 4, "Int")
  1919. if(ErrorLevel) {
  1920. ErrorLevel := ERROR_READ_MEMORY
  1921. return -1
  1922. }
  1923.  
  1924. ErrorLevel := ERROR_OK
  1925. return (dwVal>0)
  1926. }
  1927.  
  1928. getVehicleEngineState() {
  1929. if(!checkHandles())
  1930. return -1
  1931.  
  1932. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1933. if(ErrorLevel) {
  1934. ErrorLevel := ERROR_READ_MEMORY
  1935. return -1
  1936. }
  1937.  
  1938. if(!dwAddr)
  1939. return -1
  1940. cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_ENGINESTATE, 1, "Char")
  1941. if(ErrorLevel) {
  1942. ErrorLevel := ERROR_READ_MEMORY
  1943. return -1
  1944. }
  1945.  
  1946. ErrorLevel := ERROR_OK
  1947. return (cVal==24 || cVal==56 || cVal==88 || cVal==120)
  1948. }
  1949.  
  1950. getVehicleLockState() {
  1951. if(!checkHandles())
  1952. return -1
  1953.  
  1954. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  1955. if(ErrorLevel) {
  1956. ErrorLevel := ERROR_READ_MEMORY
  1957. return -1
  1958. }
  1959.  
  1960. if(!dwAddr)
  1961. return -1
  1962. dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DOORSTATE)
  1963. if(ErrorLevel) {
  1964. ErrorLevel := ERROR_READ_MEMORY
  1965. return -1
  1966. }
  1967.  
  1968. ErrorLevel := ERROR_OK
  1969. return (dwVal==2)
  1970. }
  1971.  
  1972. getVehicleColor1() {
  1973. if(!checkHandles())
  1974. return 0
  1975. dwAddr := readDWORD(hGTA, 0xBA18FC)
  1976. if(ErrorLevel) {
  1977. ErrorLevel := ERROR_READ_MEMORY
  1978. return 0
  1979. }
  1980.  
  1981. if(!dwAddr)
  1982. return 0
  1983. sVal := readMem(hGTA, dwAddr + 1076, 1, "byte")
  1984. if(ErrorLevel) {
  1985. ErrorLevel := ERROR_READ_MEMORY
  1986. return 0
  1987. }
  1988.  
  1989. ErrorLevel := ERROR_OK
  1990. return sVal
  1991. }
  1992.  
  1993. getVehicleColor2() {
  1994. if(!checkHandles())
  1995. return 0
  1996.  
  1997. dwAddr := readDWORD(hGTA, 0xBA18FC)
  1998. if(ErrorLevel) {
  1999. ErrorLevel := ERROR_READ_MEMORY
  2000. return 0
  2001. }
  2002.  
  2003. if(!dwAddr)
  2004. return 0
  2005. sVal := readMem(hGTA, dwAddr + 1077, 1, "byte")
  2006. if(ErrorLevel) {
  2007. ErrorLevel := ERROR_READ_MEMORY
  2008. return 0
  2009. }
  2010.  
  2011. ErrorLevel := ERROR_OK
  2012. return sVal
  2013. }
  2014.  
  2015. getVehicleSpeed() {
  2016. if(!checkHandles())
  2017. return -1
  2018.  
  2019. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  2020. if(ErrorLevel) {
  2021. ErrorLevel := ERROR_READ_MEMORY
  2022. return ""
  2023. }
  2024.  
  2025. fSpeedX := readMem(hGTA, dwAddr + ADDR_VEHICLE_X, 4, "float")
  2026. fSpeedY := readMem(hGTA, dwAddr + ADDR_VEHICLE_Y, 4, "float")
  2027. fSpeedZ := readMem(hGTA, dwAddr + ADDR_VEHICLE_Z, 4, "float")
  2028. fVehicleSpeed := sqrt((fSpeedX * fSpeedX) + (fSpeedY * fSpeedY) + (fSpeedZ * fSpeedZ))
  2029. fVehicleSpeed := (fVehicleSpeed * 100) * 1.43
  2030. return fVehicleSpeed
  2031. }
  2032.  
  2033. getPlayerRadiostationID() {
  2034. if(!checkHandles())
  2035. return -1
  2036. if(isPlayerInAnyVehicle() == 0)
  2037. return -1
  2038.  
  2039. dwGTA := getModuleBaseAddress("gta_sa.exe", hGTA)
  2040. RadioStationID := readMem(hGTA, dwGTA + 0x4CB7E1, 1, "byte")
  2041. if(ErrorLevel) {
  2042. ErrorLevel := ERROR_READ_MEMORY
  2043. return -1
  2044. }
  2045. return RadioStationID
  2046. }
  2047.  
  2048. getPlayerRadiostationName() {
  2049. if(isPlayerInAnyVehicle() == 0)
  2050. return -1
  2051. id := getPlayerRadiostationID()
  2052. if(id == 0)
  2053. return -1
  2054. if(id >= 0 && id < 14)
  2055. return oradiostationNames[id]
  2056. return ""
  2057. }
  2058.  
  2059. setCheckpoint(fX, fY, fZ, fSize ) {
  2060. if(!checkHandles())
  2061. return false
  2062.  
  2063. dwFunc := dwSAMP + 0x9D340
  2064. dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_INCHAT_PTR)
  2065. if(ErrorLevel || dwAddress==0) {
  2066. ErrorLevel := ERROR_READ_MEMORY
  2067. return false
  2068. }
  2069.  
  2070. VarSetCapacity(buf, 16, 0)
  2071. NumPut(fX, buf, 0, "Float")
  2072. NumPut(fY, buf, 4, "Float")
  2073. NumPut(fZ, buf, 8, "Float")
  2074. NumPut(fSize, buf, 12, "Float")
  2075. writeRaw(hGTA, pParam1, &buf, 16)
  2076. dwLen := 31
  2077. VarSetCapacity(injectData, dwLen, 0)
  2078. NumPut(0xB9, injectData, 0, "UChar")
  2079. NumPut(dwAddress, injectData, 1, "UInt")
  2080. NumPut(0x68, injectData, 5, "UChar")
  2081. NumPut(pParam1+12, injectData, 6, "UInt")
  2082. NumPut(0x68, injectData, 10, "UChar")
  2083. NumPut(pParam1, injectData, 11, "UInt")
  2084. NumPut(0xE8, injectData, 15, "UChar")
  2085. offset := dwFunc - (pInjectFunc + 20)
  2086. NumPut(offset, injectData, 16, "Int")
  2087. NumPut(0x05C7, injectData, 20, "UShort")
  2088. NumPut(dwAddress+0x24, injectData, 22, "UInt")
  2089. NumPut(1, injectData, 26, "UInt")
  2090. NumPut(0xC3, injectData, 30, "UChar")
  2091. writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
  2092.  
  2093. if(ErrorLevel)
  2094. return false
  2095. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  2096. if(ErrorLevel)
  2097. return false
  2098. waitForSingleObject(hThread, 0xFFFFFFFF)
  2099. closeProcess(hThread)
  2100. ErrorLevel := ERROR_OK
  2101. return true
  2102. }
  2103.  
  2104. disableCheckpoint() {
  2105. if(!checkHandles())
  2106. return false
  2107.  
  2108. dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_INCHAT_PTR)
  2109. if(ErrorLevel || dwAddress==0) {
  2110. ErrorLevel := ERROR_READ_MEMORY
  2111. return false
  2112. }
  2113.  
  2114. VarSetCapacity(enablecp, 4, 0)
  2115. NumPut(0,enablecp,0,"Int")
  2116. writeRaw(hGTA, dwAddress+0x24, &enablecp, 4)
  2117. ErrorLevel := ERROR_OK
  2118. return true
  2119. }
  2120.  
  2121. IsMarkerCreated(){
  2122. If(!checkHandles())
  2123. return false
  2124. active := readMem(hGTA, CheckpointCheck, 1, "byte")
  2125. If(!active)
  2126. return 0
  2127. else return 1
  2128. }
  2129.  
  2130. CoordsFromRedmarker(){
  2131. if(!checkhandles())
  2132. return false
  2133.  
  2134. for i, v in rmaddrs
  2135. f%i% := readFloat(hGTA, v)
  2136. return [f1, f2, f3]
  2137. }
  2138.  
  2139. getCoordinates() {
  2140. if(!checkHandles())
  2141. return ""
  2142.  
  2143. fX := readFloat(hGTA, ADDR_POSITION_X)
  2144. if(ErrorLevel) {
  2145. ErrorLevel := ERROR_READ_MEMORY
  2146. return ""
  2147. }
  2148.  
  2149. fY := readFloat(hGTA, ADDR_POSITION_Y)
  2150. if(ErrorLevel) {
  2151. ErrorLevel := ERROR_READ_MEMORY
  2152. return ""
  2153. }
  2154.  
  2155. fZ := readFloat(hGTA, ADDR_POSITION_Z)
  2156. if(ErrorLevel) {
  2157. ErrorLevel := ERROR_READ_MEMORY
  2158. return ""
  2159. }
  2160.  
  2161. ErrorLevel := ERROR_OK
  2162. return [fX, fY, fZ]
  2163. }
  2164.  
  2165. GetPlayerPos(ByRef fX,ByRef fY,ByRef fZ) {
  2166. if(!checkHandles())
  2167. return 0
  2168.  
  2169. fX := readFloat(hGTA, ADDR_POSITION_X)
  2170. if(ErrorLevel) {
  2171. ErrorLevel := ERROR_READ_MEMORY
  2172. return 0
  2173. }
  2174.  
  2175. fY := readFloat(hGTA, ADDR_POSITION_Y)
  2176. if(ErrorLevel) {
  2177. ErrorLevel := ERROR_READ_MEMORY
  2178. return 0
  2179. }
  2180.  
  2181. fZ := readFloat(hGTA, ADDR_POSITION_Z)
  2182. if(ErrorLevel) {
  2183. ErrorLevel := ERROR_READ_MEMORY
  2184. return 0
  2185. }
  2186. ErrorLevel := ERROR_OK
  2187. }
  2188.  
  2189. getDialogStructPtr() {
  2190. if (!checkHandles()) {
  2191. ErrorLevel := ERROR_INVALID_HANDLE
  2192. return false
  2193. }
  2194.  
  2195. dwPointer := readDWORD(hGTA, dwSAMP + SAMP_DIALOG_STRUCT_PTR)
  2196. if (ErrorLevel) {
  2197. ErrorLevel := ERROR_READ_MEMORY
  2198. return false
  2199. }
  2200.  
  2201. ErrorLevel := ERROR_OK
  2202. return dwPointer
  2203. }
  2204.  
  2205. isDialogOpen() {
  2206. dwPointer := getDialogStructPtr()
  2207. if (ErrorLevel || !dwPointer)
  2208. return false
  2209.  
  2210. dwIsOpen := readMem(hGTA, dwPointer + SAMP_DIALOG_OPEN_OFFSET, 4, "UInt")
  2211. if (ErrorLevel) {
  2212. ErrorLevel := ERROR_READ_MEMORY
  2213. return false
  2214. }
  2215.  
  2216. ErrorLevel := ERROR_OK
  2217. return dwIsOpen ? true : false
  2218. }
  2219.  
  2220. getDialogStyle() {
  2221. dwPointer := getDialogStructPtr()
  2222. if (ErrorLevel || !dwPointer)
  2223. return -1
  2224.  
  2225. style := readMem(hGTA, dwPointer + SAMP_DIALOG_STYLE_OFFSET, 4, "UInt")
  2226. if (ErrorLevel) {
  2227. ErrorLevel := ERROR_READ_MEMORY
  2228. return -1
  2229. }
  2230. ErrorLevel := ERROR_OK
  2231. return style
  2232. }
  2233.  
  2234. getDialogID() {
  2235. dwPointer := getDialogStructPtr()
  2236. if (ErrorLevel || !dwPointer)
  2237. return -1
  2238.  
  2239. id := readMem(hGTA, dwPointer + SAMP_DIALOG_ID_OFFSET, 4, "UInt")
  2240. if (ErrorLevel) {
  2241. ErrorLevel := ERROR_READ_MEMORY
  2242. return -1
  2243. }
  2244. ErrorLevel := ERROR_OK
  2245. return id
  2246. }
  2247.  
  2248. SetDialogID(id) {
  2249. dwPointer := getDialogStructPtr()
  2250. if (ErrorLevel || !dwPointer)
  2251. return false
  2252.  
  2253. writeMemory(hGTA, dwPointer + SAMP_DIALOG_ID_OFFSET, id, "UInt", 4)
  2254. if (ErrorLevel) {
  2255. ErrorLevel := ERROR_WRITE_MEMORY
  2256. return false
  2257. }
  2258. ErrorLevel := ERROR_OK
  2259. return true
  2260. }
  2261.  
  2262. GetDialogIndex() {
  2263. dwPointer := getDialogStructPtr()
  2264. if (ErrorLevel || !dwPointer)
  2265. return 0
  2266.  
  2267. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR1_OFFSET)
  2268. if (ErrorLevel) {
  2269. ErrorLevel := ERROR_READ_MEMORY
  2270. return 0
  2271. }
  2272.  
  2273. index := readMem(hGTA, dwPointer + SAMP_DIALOG_INDEX_OFFSET, 1, "Byte")
  2274. if (ErrorLevel) {
  2275. ErrorLevel := ERROR_READ_MEMORY
  2276. return 0
  2277. }
  2278. ErrorLevel := ERROR_OK
  2279. return index + 1
  2280. }
  2281.  
  2282. getDialogCaption() {
  2283. dwPointer := getDialogStructPtr()
  2284. if (ErrorLevel || !dwPointer)
  2285. return ""
  2286.  
  2287. text := readString(hGTA, dwPointer + SAMP_DIALOG_CAPTION_OFFSET, 64)
  2288. if (ErrorLevel) {
  2289. ErrorLevel := ERROR_READ_MEMORY
  2290. return ""
  2291. }
  2292. ErrorLevel := ERROR_OK
  2293. return text
  2294. }
  2295.  
  2296. GetDialogTextSize(dwAddress) {
  2297. i := 0
  2298. Loop, 4096 {
  2299. i := A_Index - 1
  2300. byte := Memory_ReadByte(hGTA, dwAddress + i)
  2301. if (!byte)
  2302. break
  2303. }
  2304. return i
  2305. }
  2306.  
  2307. getDialogText() {
  2308. dwPointer := getDialogStructPtr()
  2309. if (ErrorLevel || !dwPointer)
  2310. return ""
  2311.  
  2312. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_TEXT_PTR_OFFSET)
  2313. if (ErrorLevel) {
  2314. ErrorLevel := ERROR_READ_MEMORY
  2315. return ""
  2316. }
  2317.  
  2318. text := readString(hGTA, dwPointer, 4096)
  2319. if (ErrorLevel) {
  2320. text := readString(hGTA, dwPointer, getDialogTextSize(dwPointer))
  2321. if (ErrorLevel) {
  2322. ErrorLevel := ERROR_READ_MEMORY
  2323. return ""
  2324. }
  2325. }
  2326. ErrorLevel := ERROR_OK
  2327. return text
  2328. }
  2329.  
  2330. getDialogLineCount() {
  2331. dwPointer := getDialogStructPtr()
  2332. if (ErrorLevel || !dwPointer)
  2333. return 0
  2334.  
  2335. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR2_OFFSET)
  2336. if (ErrorLevel) {
  2337. ErrorLevel := ERROR_READ_MEMORY
  2338. return 0
  2339. }
  2340.  
  2341. count := readMem(hGTA, dwPointer + SAMP_DIALOG_LINECOUNT_OFFSET, 4, "UInt")
  2342. if (ErrorLevel) {
  2343. ErrorLevel := ERROR_READ_MEMORY
  2344. return 0
  2345. }
  2346. ErrorLevel := ERROR_OK
  2347. return count
  2348. }
  2349.  
  2350. getDialogLine__(index) {
  2351. if (getDialogLineCount > index)
  2352. return ""
  2353.  
  2354. dwPointer := getDialogStructPtr()
  2355. if (ErrorLevel || !dwPointer)
  2356. return ""
  2357.  
  2358. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR1_OFFSET)
  2359. if (ErrorLevel) {
  2360. ErrorLevel := ERROR_READ_MEMORY
  2361. return ""
  2362. }
  2363.  
  2364. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_LINES_OFFSET)
  2365. if (ErrorLevel) {
  2366. ErrorLevel := ERROR_READ_MEMORY
  2367. return ""
  2368. }
  2369.  
  2370. dwLineAddress := readDWORD(hGTA, dwPointer + (index - 1) * 0x4)
  2371. line := readString(hGTA, dwLineAddress, 128)
  2372. ErrorLevel := ERROR_OK
  2373. return line
  2374. }
  2375.  
  2376. getDialogLine(index) {
  2377. lines := getDialogLines()
  2378. if (index > lines.Length())
  2379. return ""
  2380. if (getDialogStyle() == DIALOG_STYLE_TABLIST_HEADERS)
  2381. index++
  2382. return lines[index]
  2383. }
  2384.  
  2385. GetDialogLines() {
  2386. text := getDialogText()
  2387.  
  2388. if (text == "")
  2389. return -1
  2390. lines := StrSplit(text, "`n")
  2391. return lines
  2392. }
  2393.  
  2394. IsDialogButton1Selected() {
  2395. dwPointer := getDialogStructPtr()
  2396. if (ErrorLevel || !dwPointer)
  2397. return false
  2398.  
  2399. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR1_OFFSET)
  2400. if (ErrorLevel) {
  2401. ErrorLevel := ERROR_READ_MEMORY
  2402. return false
  2403. }
  2404. selected := readMem(hGTA, dwPointer + SAMP_DIALOG_BUTTON_HOVERING_OFFSET, 1, "Byte")
  2405. if (ErrorLevel) {
  2406. ErrorLevel := ERROR_READ_MEMORY
  2407. return false
  2408. }
  2409. ErrorLevel := ERROR_OK
  2410. return selected
  2411. }
  2412.  
  2413. GetDialogLines__() {
  2414. count := getDialogLineCount()
  2415. dwPointer := getDialogStructPtr()
  2416. if (ErrorLevel || !dwPointer)
  2417. return -1
  2418.  
  2419. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR1_OFFSET)
  2420. if (ErrorLevel) {
  2421. ErrorLevel := ERROR_READ_MEMORY
  2422. return -1
  2423. }
  2424.  
  2425. dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_LINES_OFFSET)
  2426. if (ErrorLevel) {
  2427. ErrorLevel := ERROR_READ_MEMORY
  2428. return -1
  2429. }
  2430.  
  2431. lines := []
  2432. Loop %count% {
  2433. dwLineAddress := readDWORD(hGTA, dwPointer + (A_Index - 1) * 0x4)
  2434. lines[A_Index] := readString(hGTA, dwLineAddress, 128)
  2435. }
  2436. ErrorLevel := ERROR_OK
  2437. return lines
  2438. }
  2439.  
  2440. ShowDialog(style, caption, text, button1, button2 := "", id := 1) {
  2441. style += 0
  2442. style := Floor(style)
  2443. id += 0
  2444. id := Floor(id)
  2445. caption := "" caption
  2446. text := "" text
  2447. button1 := "" button1
  2448. button2 := "" button2
  2449.  
  2450. if (id < 0 || id > 32767 || style < 0 || style > 5 || StrLen(caption) > 64 || StrLen(text) > 4096 || StrLen(button1) > 10 || StrLen(button2) > 10)
  2451. return false
  2452. if (!checkHandles())
  2453. return false
  2454.  
  2455. dwFunc := dwSAMP + FUNC_SAMP_SHOWDIALOG
  2456. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_DIALOG_STRUCT_PTR)
  2457. if (ErrorLevel || !dwAddress) {
  2458. ErrorLevel := ERROR_READ_MEMORY
  2459. return false
  2460. }
  2461.  
  2462. writeString(hGTA, pParam5, caption)
  2463. if (ErrorLevel)
  2464. return false
  2465. writeString(hGTA, pParam1, text)
  2466. if (ErrorLevel)
  2467. return false
  2468. writeString(hGTA, pParam5 + 512, button1)
  2469. if (ErrorLevel)
  2470. return false
  2471. writeString(hGTA, pParam5+StrLen(caption) + 1, button2)
  2472. if (ErrorLevel)
  2473. return false
  2474. dwLen := 5 + 7 * 5 + 5 + 1
  2475.  
  2476. VarSetCapacity(injectData, dwLen, 0)
  2477. NumPut(0xB9, injectData, 0, "UChar")
  2478. NumPut(dwAddress, injectData, 1, "UInt")
  2479. NumPut(0x68, injectData, 5, "UChar")
  2480. NumPut(1, injectData, 6, "UInt")
  2481. NumPut(0x68, injectData, 10, "UChar")
  2482. NumPut(pParam5 + StrLen(caption) + 1, injectData, 11, "UInt")
  2483. NumPut(0x68, injectData, 15, "UChar")
  2484. NumPut(pParam5 + 512, injectData, 16, "UInt")
  2485. NumPut(0x68, injectData, 20, "UChar")
  2486. NumPut(pParam1, injectData, 21, "UInt")
  2487. NumPut(0x68, injectData, 25, "UChar")
  2488. NumPut(pParam5, injectData, 26, "UInt")
  2489. NumPut(0x68, injectData, 30, "UChar")
  2490. NumPut(style, injectData, 31, "UInt")
  2491. NumPut(0x68, injectData, 35, "UChar")
  2492. NumPut(id, injectData, 36, "UInt")
  2493. NumPut(0xE8, injectData, 40, "UChar")
  2494. offset := dwFunc - (pInjectFunc + 45)
  2495. NumPut(offset, injectData, 41, "Int")
  2496. NumPut(0xC3, injectData, 45, "UChar")
  2497. writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
  2498. if (ErrorLevel)
  2499. return false
  2500. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  2501. if (ErrorLevel)
  2502. return false
  2503. waitForSingleObject(hThread, 0xFFFFFFFF)
  2504. closeProcess(hThread)
  2505. return true
  2506. }
  2507.  
  2508. initZonesAndCities() {
  2509. AddCity("Las Venturas", 685.0, 476.093, -500.0, 3000.0, 3000.0, 500.0)
  2510. AddCity("San Fierro", -3000.0, -742.306, -500.0, -1270.53, 1530.24, 500.0)
  2511. AddCity("San Fierro", -1270.53, -402.481, -500.0, -1038.45, 832.495, 500.0)
  2512. AddCity("San Fierro", -1038.45, -145.539, -500.0, -897.546, 376.632, 500.0)
  2513. AddCity("Los Santos", 480.0, -3000.0, -500.0, 3000.0, -850.0, 500.0)
  2514. AddCity("Los Santos", 80.0, -2101.61, -500.0, 1075.0, -1239.61, 500.0)
  2515. AddCity("Tierra Robada", -1213.91, 596.349, -242.99, -480.539, 1659.68, 900.0)
  2516. AddCity("Red County", -1213.91, -768.027, -242.99, 2997.06, 596.349, 900.0)
  2517. AddCity("Flint County", -1213.91, -2892.97, -242.99, 44.6147, -768.027, 900.0)
  2518. AddCity("Whetstone", -2997.47, -2892.97, -242.99, -1213.91, -1115.58, 900.0)
  2519. AddZone("Avispa Country Club", -2667.810, -302.135, -28.831, -2646.400, -262.320, 71.169)
  2520. AddZone("Easter Bay Airport", -1315.420, -405.388, 15.406, -1264.400, -209.543, 25.406)
  2521. AddZone("Avispa Country Club", -2550.040, -355.493, 0.000, -2470.040, -318.493, 39.700)
  2522. AddZone("Easter Bay Airport", -1490.330, -209.543, 15.406, -1264.400, -148.388, 25.406)
  2523. AddZone("Garcia", -2395.140, -222.589, -5.3, -2354.090, -204.792, 200.000)
  2524. AddZone("Shady Cabin", -1632.830, -2263.440, -3.0, -1601.330, -2231.790, 200.000)
  2525. AddZone("East Los Santos", 2381.680, -1494.030, -89.084, 2421.030, -1454.350, 110.916)
  2526. AddZone("LVA Freight Depot", 1236.630, 1163.410, -89.084, 1277.050, 1203.280, 110.916)
  2527. AddZone("Blackfield Intersection", 1277.050, 1044.690, -89.084, 1315.350, 1087.630, 110.916)
  2528. AddZone("Avispa Country Club", -2470.040, -355.493, 0.000, -2270.040, -318.493, 46.100)
  2529. AddZone("Temple", 1252.330, -926.999, -89.084, 1357.000, -910.170, 110.916)
  2530. AddZone("Unity Station", 1692.620, -1971.800, -20.492, 1812.620, -1932.800, 79.508)
  2531. AddZone("LVA Freight Depot", 1315.350, 1044.690, -89.084, 1375.600, 1087.630, 110.916)
  2532. AddZone("Los Flores", 2581.730, -1454.350, -89.084, 2632.830, -1393.420, 110.916)
  2533. AddZone("Starfish Casino", 2437.390, 1858.100, -39.084, 2495.090, 1970.850, 60.916)
  2534. AddZone("Easter Bay Chemicals", -1132.820, -787.391, 0.000, -956.476, -768.027, 200.000)
  2535. AddZone("Downtown Los Santos", 1370.850, -1170.870, -89.084, 1463.900, -1130.850, 110.916)
  2536. AddZone("Esplanade East", -1620.300, 1176.520, -4.5, -1580.010, 1274.260, 200.000)
  2537. AddZone("Market Station", 787.461, -1410.930, -34.126, 866.009, -1310.210, 65.874)
  2538. AddZone("Linden Station", 2811.250, 1229.590, -39.594, 2861.250, 1407.590, 60.406)
  2539. AddZone("Montgomery Intersection", 1582.440, 347.457, 0.000, 1664.620, 401.750, 200.000)
  2540. AddZone("Frederick Bridge", 2759.250, 296.501, 0.000, 2774.250, 594.757, 200.000)
  2541. AddZone("Yellow Bell Station", 1377.480, 2600.430, -21.926, 1492.450, 2687.360, 78.074)
  2542. AddZone("Downtown Los Santos", 1507.510, -1385.210, 110.916, 1582.550, -1325.310, 335.916)
  2543. AddZone("Jefferson", 2185.330, -1210.740, -89.084, 2281.450, -1154.590, 110.916)
  2544. AddZone("Mulholland", 1318.130, -910.170, -89.084, 1357.000, -768.027, 110.916)
  2545. AddZone("Avispa Country Club", -2361.510, -417.199, 0.000, -2270.040, -355.493, 200.000)
  2546. AddZone("Jefferson", 1996.910, -1449.670, -89.084, 2056.860, -1350.720, 110.916)
  2547. AddZone("Julius Thruway West", 1236.630, 2142.860, -89.084, 1297.470, 2243.230, 110.916)
  2548. AddZone("Jefferson", 2124.660, -1494.030, -89.084, 2266.210, -1449.670, 110.916)
  2549. AddZone("Julius Thruway North", 1848.400, 2478.490, -89.084, 1938.800, 2553.490, 110.916)
  2550. AddZone("Rodeo", 422.680, -1570.200, -89.084, 466.223, -1406.050, 110.916)
  2551. AddZone("Cranberry Station", -2007.830, 56.306, 0.000, -1922.000, 224.782, 100.000)
  2552. AddZone("Downtown Los Santos", 1391.050, -1026.330, -89.084, 1463.900, -926.999, 110.916)
  2553. AddZone("Redsands West", 1704.590, 2243.230, -89.084, 1777.390, 2342.830, 110.916)
  2554. AddZone("Little Mexico", 1758.900, -1722.260, -89.084, 1812.620, -1577.590, 110.916)
  2555. AddZone("Blackfield Intersection", 1375.600, 823.228, -89.084, 1457.390, 919.447, 110.916)
  2556. AddZone("Los Santos International", 1974.630, -2394.330, -39.084, 2089.000, -2256.590, 60.916)
  2557. AddZone("Beacon Hill", -399.633, -1075.520, -1.489, -319.033, -977.516, 198.511)
  2558. AddZone("Rodeo", 334.503, -1501.950, -89.084, 422.680, -1406.050, 110.916)
  2559. AddZone("Richman", 225.165, -1369.620, -89.084, 334.503, -1292.070, 110.916)
  2560. AddZone("Downtown Los Santos", 1724.760, -1250.900, -89.084, 1812.620, -1150.870, 110.916)
  2561. AddZone("The Strip", 2027.400, 1703.230, -89.084, 2137.400, 1783.230, 110.916)
  2562. AddZone("Downtown Los Santos", 1378.330, -1130.850, -89.084, 1463.900, -1026.330, 110.916)
  2563. AddZone("Blackfield Intersection", 1197.390, 1044.690, -89.084, 1277.050, 1163.390, 110.916)
  2564. AddZone("Conference Center", 1073.220, -1842.270, -89.084, 1323.900, -1804.210, 110.916)
  2565. AddZone("Montgomery", 1451.400, 347.457, -6.1, 1582.440, 420.802, 200.000)
  2566. AddZone("Foster Valley", -2270.040, -430.276, -1.2, -2178.690, -324.114, 200.000)
  2567. AddZone("Blackfield Chapel", 1325.600, 596.349, -89.084, 1375.600, 795.010, 110.916)
  2568. AddZone("Los Santos International", 2051.630, -2597.260, -39.084, 2152.450, -2394.330, 60.916)
  2569. AddZone("Mulholland", 1096.470, -910.170, -89.084, 1169.130, -768.027, 110.916)
  2570. AddZone("Yellow Bell Gol Course", 1457.460, 2723.230, -89.084, 1534.560, 2863.230, 110.916)
  2571. AddZone("The Strip", 2027.400, 1783.230, -89.084, 2162.390, 1863.230, 110.916)
  2572. AddZone("Jefferson", 2056.860, -1210.740, -89.084, 2185.330, -1126.320, 110.916)
  2573. AddZone("Mulholland", 952.604, -937.184, -89.084, 1096.470, -860.619, 110.916)
  2574. AddZone("Aldea Malvada", -1372.140, 2498.520, 0.000, -1277.590, 2615.350, 200.000)
  2575. AddZone("Las Colinas", 2126.860, -1126.320, -89.084, 2185.330, -934.489, 110.916)
  2576. AddZone("Las Colinas", 1994.330, -1100.820, -89.084, 2056.860, -920.815, 110.916)
  2577. AddZone("Richman", 647.557, -954.662, -89.084, 768.694, -860.619, 110.916)
  2578. AddZone("LVA Freight Depot", 1277.050, 1087.630, -89.084, 1375.600, 1203.280, 110.916)
  2579. AddZone("Julius Thruway North", 1377.390, 2433.230, -89.084, 1534.560, 2507.230, 110.916)
  2580. AddZone("Willowfield", 2201.820, -2095.000, -89.084, 2324.000, -1989.900, 110.916)
  2581. AddZone("Julius Thruway North", 1704.590, 2342.830, -89.084, 1848.400, 2433.230, 110.916)
  2582. AddZone("Temple", 1252.330, -1130.850, -89.084, 1378.330, -1026.330, 110.916)
  2583. AddZone("Little Mexico", 1701.900, -1842.270, -89.084, 1812.620, -1722.260, 110.916)
  2584. AddZone("Queens", -2411.220, 373.539, 0.000, -2253.540, 458.411, 200.000)
  2585. AddZone("Las Venturas Airport", 1515.810, 1586.400, -12.500, 1729.950, 1714.560, 87.500)
  2586. AddZone("Richman", 225.165, -1292.070, -89.084, 466.223, -1235.070, 110.916)
  2587. AddZone("Temple", 1252.330, -1026.330, -89.084, 1391.050, -926.999, 110.916)
  2588. AddZone("East Los Santos", 2266.260, -1494.030, -89.084, 2381.680, -1372.040, 110.916)
  2589. AddZone("Julius Thruway East", 2623.180, 943.235, -89.084, 2749.900, 1055.960, 110.916)
  2590. AddZone("Willowfield", 2541.700, -1941.400, -89.084, 2703.580, -1852.870, 110.916)
  2591. AddZone("Las Colinas", 2056.860, -1126.320, -89.084, 2126.860, -920.815, 110.916)
  2592. AddZone("Julius Thruway East", 2625.160, 2202.760, -89.084, 2685.160, 2442.550, 110.916)
  2593. AddZone("Rodeo", 225.165, -1501.950, -89.084, 334.503, -1369.620, 110.916)
  2594. AddZone("Las Brujas", -365.167, 2123.010, -3.0, -208.570, 2217.680, 200.000)
  2595. AddZone("Julius Thruway East", 2536.430, 2442.550, -89.084, 2685.160, 2542.550, 110.916)
  2596. AddZone("Rodeo", 334.503, -1406.050, -89.084, 466.223, -1292.070, 110.916)
  2597. AddZone("Vinewood", 647.557, -1227.280, -89.084, 787.461, -1118.280, 110.916)
  2598. AddZone("Rodeo", 422.680, -1684.650, -89.084, 558.099, -1570.200, 110.916)
  2599. AddZone("Julius Thruway North", 2498.210, 2542.550, -89.084, 2685.160, 2626.550, 110.916)
  2600. AddZone("Downtown Los Santos", 1724.760, -1430.870, -89.084, 1812.620, -1250.900, 110.916)
  2601. AddZone("Rodeo", 225.165, -1684.650, -89.084, 312.803, -1501.950, 110.916)
  2602. AddZone("Jefferson", 2056.860, -1449.670, -89.084, 2266.210, -1372.040, 110.916)
  2603. AddZone("Hampton Barns", 603.035, 264.312, 0.000, 761.994, 366.572, 200.000)
  2604. AddZone("Temple", 1096.470, -1130.840, -89.084, 1252.330, -1026.330, 110.916)
  2605. AddZone("Kincaid Bridge", -1087.930, 855.370, -89.084, -961.950, 986.281, 110.916)
  2606. AddZone("Verona Beach", 1046.150, -1722.260, -89.084, 1161.520, -1577.590, 110.916)
  2607. AddZone("Commerce", 1323.900, -1722.260, -89.084, 1440.900, -1577.590, 110.916)
  2608. AddZone("Mulholland", 1357.000, -926.999, -89.084, 1463.900, -768.027, 110.916)
  2609. AddZone("Rodeo", 466.223, -1570.200, -89.084, 558.099, -1385.070, 110.916)
  2610. AddZone("Mulholland", 911.802, -860.619, -89.084, 1096.470, -768.027, 110.916)
  2611. AddZone("Mulholland", 768.694, -954.662, -89.084, 952.604, -860.619, 110.916)
  2612. AddZone("Julius Thruway South", 2377.390, 788.894, -89.084, 2537.390, 897.901, 110.916)
  2613. AddZone("Idlewood", 1812.620, -1852.870, -89.084, 1971.660, -1742.310, 110.916)
  2614. AddZone("Ocean Docks", 2089.000, -2394.330, -89.084, 2201.820, -2235.840, 110.916)
  2615. AddZone("Commerce", 1370.850, -1577.590, -89.084, 1463.900, -1384.950, 110.916)
  2616. AddZone("Julius Thruway North", 2121.400, 2508.230, -89.084, 2237.400, 2663.170, 110.916)
  2617. AddZone("Temple", 1096.470, -1026.330, -89.084, 1252.330, -910.170, 110.916)
  2618. AddZone("Glen Park", 1812.620, -1449.670, -89.084, 1996.910, -1350.720, 110.916)
  2619. AddZone("Easter Bay Airport", -1242.980, -50.096, 0.000, -1213.910, 578.396, 200.000)
  2620. AddZone("Martin Bridge", -222.179, 293.324, 0.000, -122.126, 476.465, 200.000)
  2621. AddZone("The Strip", 2106.700, 1863.230, -89.084, 2162.390, 2202.760, 110.916)
  2622. AddZone("Willowfield", 2541.700, -2059.230, -89.084, 2703.580, -1941.400, 110.916)
  2623. AddZone("Marina", 807.922, -1577.590, -89.084, 926.922, -1416.250, 110.916)
  2624. AddZone("Las Venturas Airport", 1457.370, 1143.210, -89.084, 1777.400, 1203.280, 110.916)
  2625. AddZone("Idlewood", 1812.620, -1742.310, -89.084, 1951.660, -1602.310, 110.916)
  2626. AddZone("Esplanade East", -1580.010, 1025.980, -6.1, -1499.890, 1274.260, 200.000)
  2627. AddZone("Downtown Los Santos", 1370.850, -1384.950, -89.084, 1463.900, -1170.870, 110.916)
  2628. AddZone("The Mako Span", 1664.620, 401.750, 0.000, 1785.140, 567.203, 200.000)
  2629. AddZone("Rodeo", 312.803, -1684.650, -89.084, 422.680, -1501.950, 110.916)
  2630. AddZone("Pershing Square", 1440.900, -1722.260, -89.084, 1583.500, -1577.590, 110.916)
  2631. AddZone("Mulholland", 687.802, -860.619, -89.084, 911.802, -768.027, 110.916)
  2632. AddZone("Gant Bridge", -2741.070, 1490.470, -6.1, -2616.400, 1659.680, 200.000)
  2633. AddZone("Las Colinas", 2185.330, -1154.590, -89.084, 2281.450, -934.489, 110.916)
  2634. AddZone("Mulholland", 1169.130, -910.170, -89.084, 1318.130, -768.027, 110.916)
  2635. AddZone("Julius Thruway North", 1938.800, 2508.230, -89.084, 2121.400, 2624.230, 110.916)
  2636. AddZone("Commerce", 1667.960, -1577.590, -89.084, 1812.620, -1430.870, 110.916)
  2637. AddZone("Rodeo", 72.648, -1544.170, -89.084, 225.165, -1404.970, 110.916)
  2638. AddZone("Roca Escalante", 2536.430, 2202.760, -89.084, 2625.160, 2442.550, 110.916)
  2639. AddZone("Rodeo", 72.648, -1684.650, -89.084, 225.165, -1544.170, 110.916)
  2640. AddZone("Market", 952.663, -1310.210, -89.084, 1072.660, -1130.850, 110.916)
  2641. AddZone("Las Colinas", 2632.740, -1135.040, -89.084, 2747.740, -945.035, 110.916)
  2642. AddZone("Mulholland", 861.085, -674.885, -89.084, 1156.550, -600.896, 110.916)
  2643. AddZone("King's", -2253.540, 373.539, -9.1, -1993.280, 458.411, 200.000)
  2644. AddZone("Redsands East", 1848.400, 2342.830, -89.084, 2011.940, 2478.490, 110.916)
  2645. AddZone("Downtown", -1580.010, 744.267, -6.1, -1499.890, 1025.980, 200.000)
  2646. AddZone("Conference Center", 1046.150, -1804.210, -89.084, 1323.900, -1722.260, 110.916)
  2647. AddZone("Richman", 647.557, -1118.280, -89.084, 787.461, -954.662, 110.916)
  2648. AddZone("Ocean Flats", -2994.490, 277.411, -9.1, -2867.850, 458.411, 200.000)
  2649. AddZone("Greenglass College", 964.391, 930.890, -89.084, 1166.530, 1044.690, 110.916)
  2650. AddZone("Glen Park", 1812.620, -1100.820, -89.084, 1994.330, -973.380, 110.916)
  2651. AddZone("LVA Freight Depot", 1375.600, 919.447, -89.084, 1457.370, 1203.280, 110.916)
  2652. AddZone("Regular Tom", -405.770, 1712.860, -3.0, -276.719, 1892.750, 200.000)
  2653. AddZone("Verona Beach", 1161.520, -1722.260, -89.084, 1323.900, -1577.590, 110.916)
  2654. AddZone("East Los Santos", 2281.450, -1372.040, -89.084, 2381.680, -1135.040, 110.916)
  2655. AddZone("Caligula's Palace", 2137.400, 1703.230, -89.084, 2437.390, 1783.230, 110.916)
  2656. AddZone("Idlewood", 1951.660, -1742.310, -89.084, 2124.660, -1602.310, 110.916)
  2657. AddZone("Pilgrim", 2624.400, 1383.230, -89.084, 2685.160, 1783.230, 110.916)
  2658. AddZone("Idlewood", 2124.660, -1742.310, -89.084, 2222.560, -1494.030, 110.916)
  2659. AddZone("Queens", -2533.040, 458.411, 0.000, -2329.310, 578.396, 200.000)
  2660. AddZone("Downtown", -1871.720, 1176.420, -4.5, -1620.300, 1274.260, 200.000)
  2661. AddZone("Commerce", 1583.500, -1722.260, -89.084, 1758.900, -1577.590, 110.916)
  2662. AddZone("East Los Santos", 2381.680, -1454.350, -89.084, 2462.130, -1135.040, 110.916)
  2663. AddZone("Marina", 647.712, -1577.590, -89.084, 807.922, -1416.250, 110.916)
  2664. AddZone("Richman", 72.648, -1404.970, -89.084, 225.165, -1235.070, 110.916)
  2665. AddZone("Vinewood", 647.712, -1416.250, -89.084, 787.461, -1227.280, 110.916)
  2666. AddZone("East Los Santos", 2222.560, -1628.530, -89.084, 2421.030, -1494.030, 110.916)
  2667. AddZone("Rodeo", 558.099, -1684.650, -89.084, 647.522, -1384.930, 110.916)
  2668. AddZone("Easter Tunnel", -1709.710, -833.034, -1.5, -1446.010, -730.118, 200.000)
  2669. AddZone("Rodeo", 466.223, -1385.070, -89.084, 647.522, -1235.070, 110.916)
  2670. AddZone("Redsands East", 1817.390, 2202.760, -89.084, 2011.940, 2342.830, 110.916)
  2671. AddZone("The Clown's Pocket", 2162.390, 1783.230, -89.084, 2437.390, 1883.230, 110.916)
  2672. AddZone("Idlewood", 1971.660, -1852.870, -89.084, 2222.560, -1742.310, 110.916)
  2673. AddZone("Montgomery Intersection", 1546.650, 208.164, 0.000, 1745.830, 347.457, 200.000)
  2674. AddZone("Willowfield", 2089.000, -2235.840, -89.084, 2201.820, -1989.900, 110.916)
  2675. AddZone("Temple", 952.663, -1130.840, -89.084, 1096.470, -937.184, 110.916)
  2676. AddZone("Prickle Pine", 1848.400, 2553.490, -89.084, 1938.800, 2863.230, 110.916)
  2677. AddZone("Los Santos International", 1400.970, -2669.260, -39.084, 2189.820, -2597.260, 60.916)
  2678. AddZone("Garver Bridge", -1213.910, 950.022, -89.084, -1087.930, 1178.930, 110.916)
  2679. AddZone("Garver Bridge", -1339.890, 828.129, -89.084, -1213.910, 1057.040, 110.916)
  2680. AddZone("Kincaid Bridge", -1339.890, 599.218, -89.084, -1213.910, 828.129, 110.916)
  2681. AddZone("Kincaid Bridge", -1213.910, 721.111, -89.084, -1087.930, 950.022, 110.916)
  2682. AddZone("Verona Beach", 930.221, -2006.780, -89.084, 1073.220, -1804.210, 110.916)
  2683. AddZone("Verdant Bluffs", 1073.220, -2006.780, -89.084, 1249.620, -1842.270, 110.916)
  2684. AddZone("Vinewood", 787.461, -1130.840, -89.084, 952.604, -954.662, 110.916)
  2685. AddZone("Vinewood", 787.461, -1310.210, -89.084, 952.663, -1130.840, 110.916)
  2686. AddZone("Commerce", 1463.900, -1577.590, -89.084, 1667.960, -1430.870, 110.916)
  2687. AddZone("Market", 787.461, -1416.250, -89.084, 1072.660, -1310.210, 110.916)
  2688. AddZone("Rockshore West", 2377.390, 596.349, -89.084, 2537.390, 788.894, 110.916)
  2689. AddZone("Julius Thruway North", 2237.400, 2542.550, -89.084, 2498.210, 2663.170, 110.916)
  2690. AddZone("East Beach", 2632.830, -1668.130, -89.084, 2747.740, -1393.420, 110.916)
  2691. AddZone("Fallow Bridge", 434.341, 366.572, 0.000, 603.035, 555.680, 200.000)
  2692. AddZone("Willowfield", 2089.000, -1989.900, -89.084, 2324.000, -1852.870, 110.916)
  2693. AddZone("Chinatown", -2274.170, 578.396, -7.6, -2078.670, 744.170, 200.000)
  2694. AddZone("El Castillo del Diablo", -208.570, 2337.180, 0.000, 8.430, 2487.180, 200.000)
  2695. AddZone("Ocean Docks", 2324.000, -2145.100, -89.084, 2703.580, -2059.230, 110.916)
  2696. AddZone("Easter Bay Chemicals", -1132.820, -768.027, 0.000, -956.476, -578.118, 200.000)
  2697. AddZone("The Visage", 1817.390, 1703.230, -89.084, 2027.400, 1863.230, 110.916)
  2698. AddZone("Ocean Flats", -2994.490, -430.276, -1.2, -2831.890, -222.589, 200.000)
  2699. AddZone("Richman", 321.356, -860.619, -89.084, 687.802, -768.027, 110.916)
  2700. AddZone("Green Palms", 176.581, 1305.450, -3.0, 338.658, 1520.720, 200.000)
  2701. AddZone("Richman", 321.356, -768.027, -89.084, 700.794, -674.885, 110.916)
  2702. AddZone("Starfish Casino", 2162.390, 1883.230, -89.084, 2437.390, 2012.180, 110.916)
  2703. AddZone("East Beach", 2747.740, -1668.130, -89.084, 2959.350, -1498.620, 110.916)
  2704. AddZone("Jefferson", 2056.860, -1372.040, -89.084, 2281.450, -1210.740, 110.916)
  2705. AddZone("Downtown Los Santos", 1463.900, -1290.870, -89.084, 1724.760, -1150.870, 110.916)
  2706. AddZone("Downtown Los Santos", 1463.900, -1430.870, -89.084, 1724.760, -1290.870, 110.916)
  2707. AddZone("Garver Bridge", -1499.890, 696.442, -179.615, -1339.890, 925.353, 20.385)
  2708. AddZone("Julius Thruway South", 1457.390, 823.228, -89.084, 2377.390, 863.229, 110.916)
  2709. AddZone("East Los Santos", 2421.030, -1628.530, -89.084, 2632.830, -1454.350, 110.916)
  2710. AddZone("Greenglass College", 964.391, 1044.690, -89.084, 1197.390, 1203.220, 110.916)
  2711. AddZone("Las Colinas", 2747.740, -1120.040, -89.084, 2959.350, -945.035, 110.916)
  2712. AddZone("Mulholland", 737.573, -768.027, -89.084, 1142.290, -674.885, 110.916)
  2713. AddZone("Ocean Docks", 2201.820, -2730.880, -89.084, 2324.000, -2418.330, 110.916)
  2714. AddZone("East Los Santos", 2462.130, -1454.350, -89.084, 2581.730, -1135.040, 110.916)
  2715. AddZone("Ganton", 2222.560, -1722.330, -89.084, 2632.830, -1628.530, 110.916)
  2716. AddZone("Avispa Country Club", -2831.890, -430.276, -6.1, -2646.400, -222.589, 200.000)
  2717. AddZone("Willowfield", 1970.620, -2179.250, -89.084, 2089.000, -1852.870, 110.916)
  2718. AddZone("Esplanade North", -1982.320, 1274.260, -4.5, -1524.240, 1358.900, 200.000)
  2719. AddZone("The High Roller", 1817.390, 1283.230, -89.084, 2027.390, 1469.230, 110.916)
  2720. AddZone("Ocean Docks", 2201.820, -2418.330, -89.084, 2324.000, -2095.000, 110.916)
  2721. AddZone("Last Dime Motel", 1823.080, 596.349, -89.084, 1997.220, 823.228, 110.916)
  2722. AddZone("Bayside Marina", -2353.170, 2275.790, 0.000, -2153.170, 2475.790, 200.000)
  2723. AddZone("King's", -2329.310, 458.411, -7.6, -1993.280, 578.396, 200.000)
  2724. AddZone("El Corona", 1692.620, -2179.250, -89.084, 1812.620, -1842.270, 110.916)
  2725. AddZone("Blackfield Chapel", 1375.600, 596.349, -89.084, 1558.090, 823.228, 110.916)
  2726. AddZone("The Pink Swan", 1817.390, 1083.230, -89.084, 2027.390, 1283.230, 110.916)
  2727. AddZone("Julius Thruway West", 1197.390, 1163.390, -89.084, 1236.630, 2243.230, 110.916)
  2728. AddZone("Los Flores", 2581.730, -1393.420, -89.084, 2747.740, -1135.040, 110.916)
  2729. AddZone("The Visage", 1817.390, 1863.230, -89.084, 2106.700, 2011.830, 110.916)
  2730. AddZone("Prickle Pine", 1938.800, 2624.230, -89.084, 2121.400, 2861.550, 110.916)
  2731. AddZone("Verona Beach", 851.449, -1804.210, -89.084, 1046.150, -1577.590, 110.916)
  2732. AddZone("Robada Intersection", -1119.010, 1178.930, -89.084, -862.025, 1351.450, 110.916)
  2733. AddZone("Linden Side", 2749.900, 943.235, -89.084, 2923.390, 1198.990, 110.916)
  2734. AddZone("Ocean Docks", 2703.580, -2302.330, -89.084, 2959.350, -2126.900, 110.916)
  2735. AddZone("Willowfield", 2324.000, -2059.230, -89.084, 2541.700, -1852.870, 110.916)
  2736. AddZone("King's", -2411.220, 265.243, -9.1, -1993.280, 373.539, 200.000)
  2737. AddZone("Commerce", 1323.900, -1842.270, -89.084, 1701.900, -1722.260, 110.916)
  2738. AddZone("Mulholland", 1269.130, -768.027, -89.084, 1414.070, -452.425, 110.916)
  2739. AddZone("Marina", 647.712, -1804.210, -89.084, 851.449, -1577.590, 110.916)
  2740. AddZone("Battery Point", -2741.070, 1268.410, -4.5, -2533.040, 1490.470, 200.000)
  2741. AddZone("The Four Dragons Casino", 1817.390, 863.232, -89.084, 2027.390, 1083.230, 110.916)
  2742. AddZone("Blackfield", 964.391, 1203.220, -89.084, 1197.390, 1403.220, 110.916)
  2743. AddZone("Julius Thruway North", 1534.560, 2433.230, -89.084, 1848.400, 2583.230, 110.916)
  2744. AddZone("Yellow Bell Gol Course", 1117.400, 2723.230, -89.084, 1457.460, 2863.230, 110.916)
  2745. AddZone("Idlewood", 1812.620, -1602.310, -89.084, 2124.660, -1449.670, 110.916)
  2746. AddZone("Redsands West", 1297.470, 2142.860, -89.084, 1777.390, 2243.230, 110.916)
  2747. AddZone("Doherty", -2270.040, -324.114, -1.2, -1794.920, -222.589, 200.000)
  2748. AddZone("Hilltop Farm", 967.383, -450.390, -3.0, 1176.780, -217.900, 200.000)
  2749. AddZone("Las Barrancas", -926.130, 1398.730, -3.0, -719.234, 1634.690, 200.000)
  2750. AddZone("Pirates in Men's Pants", 1817.390, 1469.230, -89.084, 2027.400, 1703.230, 110.916)
  2751. AddZone("City Hall", -2867.850, 277.411, -9.1, -2593.440, 458.411, 200.000)
  2752. AddZone("Avispa Country Club", -2646.400, -355.493, 0.000, -2270.040, -222.589, 200.000)
  2753. AddZone("The Strip", 2027.400, 863.229, -89.084, 2087.390, 1703.230, 110.916)
  2754. AddZone("Hashbury", -2593.440, -222.589, -1.0, -2411.220, 54.722, 200.000)
  2755. AddZone("Los Santos International", 1852.000, -2394.330, -89.084, 2089.000, -2179.250, 110.916)
  2756. AddZone("Whitewood Estates", 1098.310, 1726.220, -89.084, 1197.390, 2243.230, 110.916)
  2757. AddZone("Sherman Reservoir", -789.737, 1659.680, -89.084, -599.505, 1929.410, 110.916)
  2758. AddZone("El Corona", 1812.620, -2179.250, -89.084, 1970.620, -1852.870, 110.916)
  2759. AddZone("Downtown", -1700.010, 744.267, -6.1, -1580.010, 1176.520, 200.000)
  2760. AddZone("Foster Valley", -2178.690, -1250.970, 0.000, -1794.920, -1115.580, 200.000)
  2761. AddZone("Las Payasadas", -354.332, 2580.360, 2.0, -133.625, 2816.820, 200.000)
  2762. AddZone("Valle Ocultado", -936.668, 2611.440, 2.0, -715.961, 2847.900, 200.000)
  2763. AddZone("Blackfield Intersection", 1166.530, 795.010, -89.084, 1375.600, 1044.690, 110.916)
  2764. AddZone("Ganton", 2222.560, -1852.870, -89.084, 2632.830, -1722.330, 110.916)
  2765. AddZone("Easter Bay Airport", -1213.910, -730.118, 0.000, -1132.820, -50.096, 200.000)
  2766. AddZone("Redsands East", 1817.390, 2011.830, -89.084, 2106.700, 2202.760, 110.916)
  2767. AddZone("Esplanade East", -1499.890, 578.396, -79.615, -1339.890, 1274.260, 20.385)
  2768. AddZone("Caligula's Palace", 2087.390, 1543.230, -89.084, 2437.390, 1703.230, 110.916)
  2769. AddZone("Royal Casino", 2087.390, 1383.230, -89.084, 2437.390, 1543.230, 110.916)
  2770. AddZone("Richman", 72.648, -1235.070, -89.084, 321.356, -1008.150, 110.916)
  2771. AddZone("Starfish Casino", 2437.390, 1783.230, -89.084, 2685.160, 2012.180, 110.916)
  2772. AddZone("Mulholland", 1281.130, -452.425, -89.084, 1641.130, -290.913, 110.916)
  2773. AddZone("Downtown", -1982.320, 744.170, -6.1, -1871.720, 1274.260, 200.000)
  2774. AddZone("Hankypanky Point", 2576.920, 62.158, 0.000, 2759.250, 385.503, 200.000)
  2775. AddZone("K.A.C.C. Military Fuels", 2498.210, 2626.550, -89.084, 2749.900, 2861.550, 110.916)
  2776. AddZone("Harry Gold Parkway", 1777.390, 863.232, -89.084, 1817.390, 2342.830, 110.916)
  2777. AddZone("Bayside Tunnel", -2290.190, 2548.290, -89.084, -1950.190, 2723.290, 110.916)
  2778. AddZone("Ocean Docks", 2324.000, -2302.330, -89.084, 2703.580, -2145.100, 110.916)
  2779. AddZone("Richman", 321.356, -1044.070, -89.084, 647.557, -860.619, 110.916)
  2780. AddZone("Randolph Industrial Estate", 1558.090, 596.349, -89.084, 1823.080, 823.235, 110.916)
  2781. AddZone("East Beach", 2632.830, -1852.870, -89.084, 2959.350, -1668.130, 110.916)
  2782. AddZone("Flint Water", -314.426, -753.874, -89.084, -106.339, -463.073, 110.916)
  2783. AddZone("Blueberry", 19.607, -404.136, 3.8, 349.607, -220.137, 200.000)
  2784. AddZone("Linden Station", 2749.900, 1198.990, -89.084, 2923.390, 1548.990, 110.916)
  2785. AddZone("Glen Park", 1812.620, -1350.720, -89.084, 2056.860, -1100.820, 110.916)
  2786. AddZone("Downtown", -1993.280, 265.243, -9.1, -1794.920, 578.396, 200.000)
  2787. AddZone("Redsands West", 1377.390, 2243.230, -89.084, 1704.590, 2433.230, 110.916)
  2788. AddZone("Richman", 321.356, -1235.070, -89.084, 647.522, -1044.070, 110.916)
  2789. AddZone("Gant Bridge", -2741.450, 1659.680, -6.1, -2616.400, 2175.150, 200.000)
  2790. AddZone("Lil' Probe Inn", -90.218, 1286.850, -3.0, 153.859, 1554.120, 200.000)
  2791. AddZone("Flint Intersection", -187.700, -1596.760, -89.084, 17.063, -1276.600, 110.916)
  2792. AddZone("Las Colinas", 2281.450, -1135.040, -89.084, 2632.740, -945.035, 110.916)
  2793. AddZone("Sobell Rail Yards", 2749.900, 1548.990, -89.084, 2923.390, 1937.250, 110.916)
  2794. AddZone("The Emerald Isle", 2011.940, 2202.760, -89.084, 2237.400, 2508.230, 110.916)
  2795. AddZone("El Castillo del Diablo", -208.570, 2123.010, -7.6, 114.033, 2337.180, 200.000)
  2796. AddZone("Santa Flora", -2741.070, 458.411, -7.6, -2533.040, 793.411, 200.000)
  2797. AddZone("Playa del Seville", 2703.580, -2126.900, -89.084, 2959.350, -1852.870, 110.916)
  2798. AddZone("Market", 926.922, -1577.590, -89.084, 1370.850, -1416.250, 110.916)
  2799. AddZone("Queens", -2593.440, 54.722, 0.000, -2411.220, 458.411, 200.000)
  2800. AddZone("Pilson Intersection", 1098.390, 2243.230, -89.084, 1377.390, 2507.230, 110.916)
  2801. AddZone("Spinybed", 2121.400, 2663.170, -89.084, 2498.210, 2861.550, 110.916)
  2802. AddZone("Pilgrim", 2437.390, 1383.230, -89.084, 2624.400, 1783.230, 110.916)
  2803. AddZone("Blackfield", 964.391, 1403.220, -89.084, 1197.390, 1726.220, 110.916)
  2804. AddZone("'The Big Ear'", -410.020, 1403.340, -3.0, -137.969, 1681.230, 200.000)
  2805. AddZone("Dillimore", 580.794, -674.885, -9.5, 861.085, -404.790, 200.000)
  2806. AddZone("El Quebrados", -1645.230, 2498.520, 0.000, -1372.140, 2777.850, 200.000)
  2807. AddZone("Esplanade North", -2533.040, 1358.900, -4.5, -1996.660, 1501.210, 200.000)
  2808. AddZone("Easter Bay Airport", -1499.890, -50.096, -1.0, -1242.980, 249.904, 200.000)
  2809. AddZone("Fisher's Lagoon", 1916.990, -233.323, -100.000, 2131.720, 13.800, 200.000)
  2810. AddZone("Mulholland", 1414.070, -768.027, -89.084, 1667.610, -452.425, 110.916)
  2811. AddZone("East Beach", 2747.740, -1498.620, -89.084, 2959.350, -1120.040, 110.916)
  2812. AddZone("San Andreas Sound", 2450.390, 385.503, -100.000, 2759.250, 562.349, 200.000)
  2813. AddZone("Shady Creeks", -2030.120, -2174.890, -6.1, -1820.640, -1771.660, 200.000)
  2814. AddZone("Market", 1072.660, -1416.250, -89.084, 1370.850, -1130.850, 110.916)
  2815. AddZone("Rockshore West", 1997.220, 596.349, -89.084, 2377.390, 823.228, 110.916)
  2816. AddZone("Prickle Pine", 1534.560, 2583.230, -89.084, 1848.400, 2863.230, 110.916)
  2817. AddZone("Easter Basin", -1794.920, -50.096, -1.04, -1499.890, 249.904, 200.000)
  2818. AddZone("Leafy Hollow", -1166.970, -1856.030, 0.000, -815.624, -1602.070, 200.000)
  2819. AddZone("LVA Freight Depot", 1457.390, 863.229, -89.084, 1777.400, 1143.210, 110.916)
  2820. AddZone("Prickle Pine", 1117.400, 2507.230, -89.084, 1534.560, 2723.230, 110.916)
  2821. AddZone("Blueberry", 104.534, -220.137, 2.3, 349.607, 152.236, 200.000)
  2822. AddZone("El Castillo del Diablo", -464.515, 2217.680, 0.000, -208.570, 2580.360, 200.000)
  2823. AddZone("Downtown", -2078.670, 578.396, -7.6, -1499.890, 744.267, 200.000)
  2824. AddZone("Rockshore East", 2537.390, 676.549, -89.084, 2902.350, 943.235, 110.916)
  2825. AddZone("San Fierro Bay", -2616.400, 1501.210, -3.0, -1996.660, 1659.680, 200.000)
  2826. AddZone("Paradiso", -2741.070, 793.411, -6.1, -2533.040, 1268.410, 200.000)
  2827. AddZone("The Camel's Toe", 2087.390, 1203.230, -89.084, 2640.400, 1383.230, 110.916)
  2828. AddZone("Old Venturas Strip", 2162.390, 2012.180, -89.084, 2685.160, 2202.760, 110.916)
  2829. AddZone("Juniper Hill", -2533.040, 578.396, -7.6, -2274.170, 968.369, 200.000)
  2830. AddZone("Juniper Hollow", -2533.040, 968.369, -6.1, -2274.170, 1358.900, 200.000)
  2831. AddZone("Roca Escalante", 2237.400, 2202.760, -89.084, 2536.430, 2542.550, 110.916)
  2832. AddZone("Julius Thruway East", 2685.160, 1055.960, -89.084, 2749.900, 2626.550, 110.916)
  2833. AddZone("Verona Beach", 647.712, -2173.290, -89.084, 930.221, -1804.210, 110.916)
  2834. AddZone("Foster Valley", -2178.690, -599.884, -1.2, -1794.920, -324.114, 200.000)
  2835. AddZone("Arco del Oeste", -901.129, 2221.860, 0.000, -592.090, 2571.970, 200.000)
  2836. AddZone("Fallen Tree", -792.254, -698.555, -5.3, -452.404, -380.043, 200.000)
  2837. AddZone("The Farm", -1209.670, -1317.100, 114.981, -908.161, -787.391, 251.981)
  2838. AddZone("The Sherman Dam", -968.772, 1929.410, -3.0, -481.126, 2155.260, 200.000)
  2839. AddZone("Esplanade North", -1996.660, 1358.900, -4.5, -1524.240, 1592.510, 200.000)
  2840. AddZone("Financial", -1871.720, 744.170, -6.1, -1701.300, 1176.420, 300.000)
  2841. AddZone("Garcia", -2411.220, -222.589, -1.14, -2173.040, 265.243, 200.000)
  2842. AddZone("Montgomery", 1119.510, 119.526, -3.0, 1451.400, 493.323, 200.000)
  2843. AddZone("Creek", 2749.900, 1937.250, -89.084, 2921.620, 2669.790, 110.916)
  2844. AddZone("Los Santos International", 1249.620, -2394.330, -89.084, 1852.000, -2179.250, 110.916)
  2845. AddZone("Santa Maria Beach", 72.648, -2173.290, -89.084, 342.648, -1684.650, 110.916)
  2846. AddZone("Mulholland Intersection", 1463.900, -1150.870, -89.084, 1812.620, -768.027, 110.916)
  2847. AddZone("Angel Pine", -2324.940, -2584.290, -6.1, -1964.220, -2212.110, 200.000)
  2848. AddZone("Verdant Meadows", 37.032, 2337.180, -3.0, 435.988, 2677.900, 200.000)
  2849. AddZone("Octane Springs", 338.658, 1228.510, 0.000, 664.308, 1655.050, 200.000)
  2850. AddZone("Come-A-Lot", 2087.390, 943.235, -89.084, 2623.180, 1203.230, 110.916)
  2851. AddZone("Redsands West", 1236.630, 1883.110, -89.084, 1777.390, 2142.860, 110.916)
  2852. AddZone("Santa Maria Beach", 342.648, -2173.290, -89.084, 647.712, -1684.650, 110.916)
  2853. AddZone("Verdant Bluffs", 1249.620, -2179.250, -89.084, 1692.620, -1842.270, 110.916)
  2854. AddZone("Las Venturas Airport", 1236.630, 1203.280, -89.084, 1457.370, 1883.110, 110.916)
  2855. AddZone("Flint Range", -594.191, -1648.550, 0.000, -187.700, -1276.600, 200.000)
  2856. AddZone("Verdant Bluffs", 930.221, -2488.420, -89.084, 1249.620, -2006.780, 110.916)
  2857. AddZone("Palomino Creek", 2160.220, -149.004, 0.000, 2576.920, 228.322, 200.000)
  2858. AddZone("Ocean Docks", 2373.770, -2697.090, -89.084, 2809.220, -2330.460, 110.916)
  2859. AddZone("Easter Bay Airport", -1213.910, -50.096, -4.5, -947.980, 578.396, 200.000)
  2860. AddZone("Whitewood Estates", 883.308, 1726.220, -89.084, 1098.310, 2507.230, 110.916)
  2861. AddZone("Calton Heights", -2274.170, 744.170, -6.1, -1982.320, 1358.900, 200.000)
  2862. AddZone("Easter Basin", -1794.920, 249.904, -9.1, -1242.980, 578.396, 200.000)
  2863. AddZone("Los Santos Inlet", -321.744, -2224.430, -89.084, 44.615, -1724.430, 110.916)
  2864. AddZone("Doherty", -2173.040, -222.589, -1.0, -1794.920, 265.243, 200.000)
  2865. AddZone("Mount Chiliad", -2178.690, -2189.910, -47.917, -2030.120, -1771.660, 576.083)
  2866. AddZone("Fort Carson", -376.233, 826.326, -3.0, 123.717, 1220.440, 200.000)
  2867. AddZone("Foster Valley", -2178.690, -1115.580, 0.000, -1794.920, -599.884, 200.000)
  2868. AddZone("Ocean Flats", -2994.490, -222.589, -1.0, -2593.440, 277.411, 200.000)
  2869. AddZone("Fern Ridge", 508.189, -139.259, 0.000, 1306.660, 119.526, 200.000)
  2870. AddZone("Bayside", -2741.070, 2175.150, 0.000, -2353.170, 2722.790, 200.000)
  2871. AddZone("Las Venturas Airport", 1457.370, 1203.280, -89.084, 1777.390, 1883.110, 110.916)
  2872. AddZone("Blueberry Acres", -319.676, -220.137, 0.000, 104.534, 293.324, 200.000)
  2873. AddZone("Palisades", -2994.490, 458.411, -6.1, -2741.070, 1339.610, 200.000)
  2874. AddZone("North Rock", 2285.370, -768.027, 0.000, 2770.590, -269.740, 200.000)
  2875. AddZone("Hunter Quarry", 337.244, 710.840, -115.239, 860.554, 1031.710, 203.761)
  2876. AddZone("Los Santos International", 1382.730, -2730.880, -89.084, 2201.820, -2394.330, 110.916)
  2877. AddZone("Missionary Hill", -2994.490, -811.276, 0.000, -2178.690, -430.276, 200.000)
  2878. AddZone("San Fierro Bay", -2616.400, 1659.680, -3.0, -1996.660, 2175.150, 200.000)
  2879. AddZone("Restricted Area", -91.586, 1655.050, -50.000, 421.234, 2123.010, 250.000)
  2880. AddZone("Mount Chiliad", -2997.470, -1115.580, -47.917, -2178.690, -971.913, 576.083)
  2881. AddZone("Mount Chiliad", -2178.690, -1771.660, -47.917, -1936.120, -1250.970, 576.083)
  2882. AddZone("Easter Bay Airport", -1794.920, -730.118, -3.0, -1213.910, -50.096, 200.000)
  2883. AddZone("The Panopticon", -947.980, -304.320, -1.1, -319.676, 327.071, 200.000)
  2884. AddZone("Shady Creeks", -1820.640, -2643.680, -8.0, -1226.780, -1771.660, 200.000)
  2885. AddZone("Back o Beyond", -1166.970, -2641.190, 0.000, -321.744, -1856.030, 200.000)
  2886. AddZone("Mount Chiliad", -2994.490, -2189.910, -47.917, -2178.690, -1115.580, 576.083)
  2887. AddZone("Tierra Robada", -1213.910, 596.349, -242.990, -480.539, 1659.680, 900.000)
  2888. AddZone("Flint County", -1213.910, -2892.970, -242.990, 44.615, -768.027, 900.000)
  2889. AddZone("Whetstone", -2997.470, -2892.970, -242.990, -1213.910, -1115.580, 900.000)
  2890. AddZone("Bone County", -480.539, 596.349, -242.990, 869.461, 2993.870, 900.000)
  2891. AddZone("Tierra Robada", -2997.470, 1659.680, -242.990, -480.539, 2993.870, 900.000)
  2892. AddZone("San Fierro", -2997.470, -1115.580, -242.990, -1213.910, 1659.680, 900.000)
  2893. AddZone("Las Venturas", 869.461, 596.349, -242.990, 2997.060, 2993.870, 900.000)
  2894. AddZone("Red County", -1213.910, -768.027, -242.990, 2997.060, 596.349, 900.000)
  2895. AddZone("Los Santos", 44.615, -2892.970, -242.990, 2997.060, -768.027, 900.000)
  2896. }
  2897.  
  2898. CalculateZone(posX, posY, posZ) {
  2899. if ( bInitZaC == 0 ) {
  2900. initZonesAndCities()
  2901. bInitZaC := 1
  2902. }
  2903.  
  2904. Loop % nZone-1
  2905. {
  2906. 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) {
  2907. ErrorLevel := ERROR_OK
  2908. return zone%A_Index%_name
  2909. }
  2910. }
  2911. ErrorLevel := ERROR_ZONE_NOT_FOUND
  2912. return "Unbekannt"
  2913. }
  2914.  
  2915. calculateCity(posX, posY, posZ) {
  2916. if ( bInitZaC == 0 ) {
  2917. initZonesAndCities()
  2918. bInitZaC := 1
  2919. }
  2920.  
  2921. smallestCity := "Unbekannt"
  2922. currentCitySize := 0
  2923. smallestCitySize := 0
  2924. Loop % nCity-1
  2925. {
  2926. 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) {
  2927. 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))
  2928. if (smallestCity == "Unbekannt") || (currentCitySize < smallestCitySize) {
  2929. smallestCity := city%A_Index%_name
  2930. smallestCitySize := currentCitySize
  2931. }
  2932. }
  2933. }
  2934.  
  2935. if(smallestCity == "Unbekannt")
  2936. ErrorLevel := ERROR_CITY_NOT_FOUND
  2937. else
  2938. ErrorLevel := ERROR_OK
  2939. return smallestCity
  2940. }
  2941.  
  2942. AddZone(sName, x1, y1, z1, x2, y2, z2) {
  2943. global
  2944. zone%nZone%_name := sName
  2945. zone%nZone%_x1 := x1
  2946. zone%nZone%_y1 := y1
  2947. zone%nZone%_z1 := z1
  2948. zone%nZone%_x2 := x2
  2949. zone%nZone%_y2 := y2
  2950. zone%nZone%_z2 := z2
  2951. nZone := nZone + 1
  2952. }
  2953.  
  2954. AddCity(sName, x1, y1, z1, x2, y2, z2) {
  2955. global
  2956. city%nCity%_name := sName
  2957. city%nCity%_x1 := x1
  2958. city%nCity%_y1 := y1
  2959. city%nCity%_z1 := z1
  2960. city%nCity%_x2 := x2
  2961. city%nCity%_y2 := y2
  2962. city%nCity%_z2 := z2
  2963. nCity := nCity + 1
  2964. }
  2965.  
  2966. IsPlayerInRangeOfPoint(_posX, _posY, _posZ, _posRadius) {
  2967. GetPlayerPos(posX, posY, posZ)
  2968. X := posX -_posX
  2969. Y := posY -_posY
  2970. Z := posZ -_posZ
  2971.  
  2972. if(((X < _posRadius) && (X > -_posRadius)) && ((Y < _posRadius) && (Y > -_posRadius)) && ((Z < _posRadius) && (Z > -_posRadius)))
  2973. return TRUE
  2974. return FALSE
  2975. }
  2976.  
  2977. IsPlayerInRangeOfPoint2D(_posX, _posY, _posRadius) {
  2978. GetPlayerPos(posX, posY, posZ)
  2979. X := posX - _posX
  2980. Y := posY - _posY
  2981.  
  2982. if(((X < _posRadius) && (X > -_posRadius)) && ((Y < _posRadius) && (Y > -_posRadius)))
  2983. return TRUE
  2984. return FALSE
  2985. }
  2986.  
  2987. getPlayerZone() {
  2988. aktPos := getCoordinates()
  2989. return calculateZone(aktPos[1], aktPos[2], aktPos[3])
  2990. }
  2991.  
  2992. getPlayerCity() {
  2993. aktPos := getCoordinates()
  2994. return calculateCity(aktPos[1], aktPos[2], aktPos[3])
  2995. }
  2996.  
  2997. getPos() {
  2998. if (getPlayerInteriorID() == 0) {
  2999. aktPos := getPlayerZone()", " getPlayerCity()
  3000. } else {
  3001. aktPos := "Interior [GK " getPlayerInteriorId() "]"
  3002. }
  3003. return aktPos
  3004. }
  3005.  
  3006. AntiCrash(){
  3007. If(!checkHandles())
  3008. return false
  3009.  
  3010. cReport := ADDR_SAMP_CRASHREPORT
  3011. writeMemory(hGTA, dwSAMP + cReport, 0x90909090, 4)
  3012. cReport += 0x4
  3013. writeMemory(hGTA, dwSAMP + cReport, 0x90, 1)
  3014. cReport += 0x9
  3015. writeMemory(hGTA, dwSAMP + cReport, 0x90909090, 4)
  3016. cReport += 0x4
  3017. writeMemory(hGTA, dwSAMP + cReport, 0x90, 1)
  3018. }
  3019.  
  3020. writeMemory(hProcess,address,writevalue,length=4, datatype="int") {
  3021. if(!hProcess) {
  3022. ErrorLevel := ERROR_INVALID_HANDLE
  3023. return false
  3024. }
  3025.  
  3026. VarSetCapacity(finalvalue,length, 0)
  3027. NumPut(writevalue,finalvalue,0,datatype)
  3028. dwRet := DllCall( "WriteProcessMemory"
  3029. ,"Uint",hProcess
  3030. ,"Uint",address
  3031. ,"Uint",&finalvalue
  3032. ,"Uint",length
  3033. ,"Uint",0)
  3034.  
  3035. if(dwRet == 0) {
  3036. ErrorLevel := ERROR_WRITE_MEMORY
  3037. return false
  3038. }
  3039. ErrorLevel := ERROR_OK
  3040. return true
  3041. }
  3042.  
  3043. CheckHandles() {
  3044. if(iRefreshHandles+500>A_TickCount)
  3045. return true
  3046.  
  3047. iRefreshHandles := A_TickCount
  3048. if(!refreshGTA() || !refreshSAMP() || !refreshMemory())
  3049. return false
  3050. else
  3051. return true
  3052. return true
  3053. }
  3054.  
  3055. RefreshGTA() {
  3056. newPID := getPID("GTA:SA:MP")
  3057. if(!newPID) {
  3058. if(hGTA) {
  3059. virtualFreeEx(hGTA, pMemory, 0, 0x8000)
  3060. closeProcess(hGTA)
  3061. hGTA := 0x0
  3062. }
  3063.  
  3064. dwGTAPID := 0
  3065. hGTA := 0x0
  3066. dwSAMP := 0x0
  3067. pMemory := 0x0
  3068. return false
  3069. }
  3070.  
  3071. if(!hGTA || (dwGTAPID != newPID)) {
  3072. hGTA := openProcess(newPID)
  3073. if(ErrorLevel) {
  3074. dwGTAPID := 0
  3075. hGTA := 0x0
  3076. dwSAMP := 0x0
  3077. pMemory := 0x0
  3078. return false
  3079. }
  3080. dwGTAPID := newPID
  3081. dwSAMP := 0x0
  3082. pMemory := 0x0
  3083. return true
  3084. }
  3085. return true
  3086. }
  3087.  
  3088. refreshSAMP() {
  3089. if(dwSAMP)
  3090. return true
  3091.  
  3092. dwSAMP := getModuleBaseAddress("samp.dll", hGTA)
  3093. if(!dwSAMP)
  3094. return false
  3095. return true
  3096. }
  3097.  
  3098. refreshMemory() {
  3099. if(!pMemory) {
  3100. pMemory := virtualAllocEx(hGTA, 6144, 0x1000 | 0x2000, 0x40)
  3101. if(ErrorLevel) {
  3102. pMemory := 0x0
  3103. return false
  3104. }
  3105.  
  3106. pParam1 := pMemory
  3107. pParam2 := pMemory + 1024
  3108. pParam3 := pMemory + 2048
  3109. pParam4 := pMemory + 3072
  3110. pParam5 := pMemory + 4096
  3111. pInjectFunc := pMemory + 5120
  3112. }
  3113. return true
  3114. }
  3115.  
  3116. GetPID(szWindow) {
  3117. local dwPID := 0
  3118. WinGet, dwPID, PID, %szWindow%
  3119. return dwPID
  3120. }
  3121.  
  3122. openProcess(dwPID, dwRights = 0x1F0FFF) {
  3123. hProcess := DllCall("OpenProcess"
  3124. , "UInt", dwRights
  3125. , "int", 0
  3126. , "UInt", dwPID
  3127. , "Uint")
  3128.  
  3129. if(hProcess == 0) {
  3130. ErrorLevel := ERROR_OPEN_PROCESS
  3131. return 0
  3132. }
  3133. ErrorLevel := ERROR_OK
  3134. return hProcess
  3135. }
  3136.  
  3137. closeProcess(hProcess) {
  3138. if(hProcess == 0) {
  3139. ErrorLevel := ERROR_INVALID_HANDLE
  3140. return 0
  3141. }
  3142.  
  3143. dwRet := DllCall( "CloseHandle"
  3144. , "Uint", hProcess
  3145. , "UInt")
  3146. ErrorLevel := ERROR_OK
  3147. }
  3148.  
  3149. getModuleBaseAddress(sModule, hProcess) {
  3150. if(!sModule) {
  3151. ErrorLevel := ERROR_MODULE_NOT_FOUND
  3152. return 0
  3153. }
  3154.  
  3155. if(!hProcess) {
  3156. ErrorLevel := ERROR_INVALID_HANDLE
  3157. return 0
  3158. }
  3159.  
  3160. dwSize = 1024*4
  3161. VarSetCapacity(hMods, dwSize)
  3162. VarSetCapacity(cbNeeded, 4)
  3163. dwRet := DllCall( "Psapi.dll\EnumProcessModules"
  3164. , "UInt", hProcess
  3165. , "UInt", &hMods
  3166. , "UInt", dwSize
  3167. , "UInt*", cbNeeded
  3168. , "UInt")
  3169.  
  3170. if(dwRet == 0) {
  3171. ErrorLevel := ERROR_ENUM_PROCESS_MODULES
  3172. return 0
  3173. }
  3174. dwMods := cbNeeded / 4
  3175. i := 0
  3176. VarSetCapacity(hModule, 4)
  3177. VarSetCapacity(sCurModule, 260)
  3178.  
  3179. while(i < dwMods) {
  3180. hModule := NumGet(hMods, i*4)
  3181. DllCall("Psapi.dll\GetModuleFileNameEx"
  3182. , "UInt", hProcess
  3183. , "UInt", hModule
  3184. , "Str", sCurModule
  3185. , "UInt", 260)
  3186. SplitPath, sCurModule, sFilename
  3187. if(sModule == sFilename) {
  3188. ErrorLevel := ERROR_OK
  3189. return hModule
  3190. }
  3191. i := i + 1
  3192. }
  3193.  
  3194. ErrorLevel := ERROR_MODULE_NOT_FOUND
  3195. return 0
  3196. }
  3197.  
  3198. readString(hProcess, dwAddress, dwLen) {
  3199. if(!hProcess) {
  3200. ErrorLevel := ERROR_INVALID_HANDLE
  3201. return 0
  3202. }
  3203.  
  3204. VarSetCapacity(sRead, dwLen)
  3205. dwRet := DllCall( "ReadProcessMemory"
  3206. , "UInt", hProcess
  3207. , "UInt", dwAddress
  3208. , "Str", sRead
  3209. , "UInt", dwLen
  3210. , "UInt*", 0
  3211. , "UInt")
  3212.  
  3213. if(dwRet == 0) {
  3214. ErrorLevel := ERROR_READ_MEMORY
  3215. return 0
  3216. }
  3217.  
  3218. ErrorLevel := ERROR_OK
  3219. if A_IsUnicode
  3220. return __ansiToUnicode(sRead)
  3221. return sRead
  3222. }
  3223.  
  3224. readFloat(hProcess, dwAddress) {
  3225. if(!hProcess) {
  3226. ErrorLevel := ERROR_INVALID_HANDLE
  3227. return 0
  3228. }
  3229.  
  3230. VarSetCapacity(dwRead, 4)
  3231. dwRet := DllCall( "ReadProcessMemory"
  3232. , "UInt", hProcess
  3233. , "UInt", dwAddress
  3234. , "Str", dwRead
  3235. , "UInt", 4
  3236. , "UInt*", 0
  3237. , "UInt")
  3238.  
  3239. if(dwRet == 0) {
  3240. ErrorLevel := ERROR_READ_MEMORY
  3241. return 0
  3242. }
  3243.  
  3244. ErrorLevel := ERROR_OK
  3245. return NumGet(dwRead, 0, "Float")
  3246. }
  3247.  
  3248. readDWORD(hProcess, dwAddress) {
  3249. if(!hProcess) {
  3250. ErrorLevel := ERROR_INVALID_HANDLE
  3251. return 0
  3252. }
  3253.  
  3254. VarSetCapacity(dwRead, 4)
  3255. dwRet := DllCall( "ReadProcessMemory"
  3256. , "UInt", hProcess
  3257. , "UInt", dwAddress
  3258. , "Str", dwRead
  3259. , "UInt", 4
  3260. , "UInt*", 0)
  3261. if(dwRet == 0) {
  3262. ErrorLevel := ERROR_READ_MEMORY
  3263. return 0
  3264. }
  3265.  
  3266. ErrorLevel := ERROR_OK
  3267. return NumGet(dwRead, 0, "UInt")
  3268. }
  3269.  
  3270. readMem(hProcess, dwAddress, dwLen=4, type="UInt") {
  3271. if(!hProcess) {
  3272. ErrorLevel := ERROR_INVALID_HANDLE
  3273. return 0
  3274. }
  3275.  
  3276. VarSetCapacity(dwRead, dwLen)
  3277. dwRet := DllCall( "ReadProcessMemory"
  3278. , "UInt", hProcess
  3279. , "UInt", dwAddress
  3280. , "Str", dwRead
  3281. , "UInt", dwLen
  3282. , "UInt*", 0)
  3283.  
  3284. if(dwRet == 0) {
  3285. ErrorLevel := ERROR_READ_MEMORY
  3286. return 0
  3287. }
  3288.  
  3289. ErrorLevel := ERROR_OK
  3290. return NumGet(dwRead, 0, type)
  3291. }
  3292.  
  3293. writeString(hProcess, dwAddress, wString) {
  3294. if(!hProcess) {
  3295. ErrorLevel := ERROR_INVALID_HANDLE
  3296. return false
  3297. }
  3298.  
  3299. sString := wString
  3300. if A_IsUnicode
  3301. sString := __unicodeToAnsi(wString)
  3302. dwRet := DllCall( "WriteProcessMemory"
  3303. , "UInt", hProcess
  3304. , "UInt", dwAddress
  3305. , "Str", sString
  3306. , "UInt", StrLen(wString) + 1
  3307. , "UInt", 0
  3308. , "UInt")
  3309.  
  3310. if(dwRet == 0) {
  3311. ErrorLEvel := ERROR_WRITE_MEMORY
  3312. return false
  3313. }
  3314.  
  3315. ErrorLevel := ERROR_OK
  3316. return true
  3317. }
  3318.  
  3319. writeRaw(hProcess, dwAddress, pBuffer, dwLen) {
  3320. if(!hProcess) {
  3321. ErrorLevel := ERROR_INVALID_HANDLE
  3322. return false
  3323. }
  3324.  
  3325. dwRet := DllCall( "WriteProcessMemory"
  3326. , "UInt", hProcess
  3327. , "UInt", dwAddress
  3328. , "UInt", pBuffer
  3329. , "UInt", dwLen
  3330. , "UInt", 0
  3331. , "UInt")
  3332.  
  3333. if(dwRet == 0) {
  3334. ErrorLEvel := ERROR_WRITE_MEMORY
  3335. return false
  3336. }
  3337.  
  3338. ErrorLevel := ERROR_OK
  3339. return true
  3340. }
  3341.  
  3342. Memory_ReadByte(process_handle, address) {
  3343. VarSetCapacity(value, 1, 0)
  3344. DllCall("ReadProcessMemory", "UInt", process_handle, "UInt", address, "Str", value, "UInt", 1, "UInt *", 0)
  3345. return, NumGet(value, 0, "Byte")
  3346. }
  3347.  
  3348. callWithParams(hProcess, dwFunc, aParams, bCleanupStack = true) {
  3349. if(!hProcess) {
  3350. ErrorLevel := ERROR_INVALID_HANDLE
  3351. return false
  3352. }
  3353.  
  3354. validParams := 0
  3355. i := aParams.MaxIndex()
  3356. dwLen := i * 5 + 5 + 1
  3357.  
  3358. if(bCleanupStack)
  3359. dwLen += 3
  3360. VarSetCapacity(injectData, i * 5 + 5 + 3 + 1, 0)
  3361. i_ := 1
  3362.  
  3363. while(i > 0) {
  3364. if(aParams[i][1] != "") {
  3365. dwMemAddress := 0x0
  3366. if(aParams[i][1] == "p") {
  3367. dwMemAddress := aParams[i][2]
  3368. } else if(aParams[i][1] == "s") {
  3369. if(i_>3)
  3370. return false
  3371. dwMemAddress := pParam%i_%
  3372. writeString(hProcess, dwMemAddress, aParams[i][2])
  3373. if(ErrorLevel)
  3374. return false
  3375. i_ += 1
  3376. } else if(aParams[i][1] == "i") {
  3377. dwMemAddress := aParams[i][2]
  3378. } else {
  3379. return false
  3380. }
  3381.  
  3382. NumPut(0x68, injectData, validParams * 5, "UChar")
  3383. NumPut(dwMemAddress, injectData, validParams * 5 + 1, "UInt")
  3384. validParams += 1
  3385. }
  3386. i -= 1
  3387. }
  3388.  
  3389. offset := dwFunc - ( pInjectFunc + validParams * 5 + 5 )
  3390. NumPut(0xE8, injectData, validParams * 5, "UChar")
  3391. NumPut(offset, injectData, validParams * 5 + 1, "Int")
  3392.  
  3393. if(bCleanupStack) {
  3394. NumPut(0xC483, injectData, validParams * 5 + 5, "UShort")
  3395. NumPut(validParams*4, injectData, validParams * 5 + 7, "UChar")
  3396. NumPut(0xC3, injectData, validParams * 5 + 8, "UChar")
  3397. } else {
  3398. NumPut(0xC3, injectData, validParams * 5 + 5, "UChar")
  3399. }
  3400.  
  3401. writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
  3402. if(ErrorLevel)
  3403. return false
  3404.  
  3405. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  3406. if(ErrorLevel)
  3407. return false
  3408.  
  3409. waitForSingleObject(hThread, 0xFFFFFFFF)
  3410. closeProcess(hThread)
  3411. return true
  3412. }
  3413.  
  3414. virtualAllocEx(hProcess, dwSize, flAllocationType, flProtect) {
  3415. if(!hProcess) {
  3416. ErrorLevel := ERROR_INVALID_HANDLE
  3417. return 0
  3418. }
  3419.  
  3420. dwRet := DllCall( "VirtualAllocEx"
  3421. , "UInt", hProcess
  3422. , "UInt", 0
  3423. , "UInt", dwSize
  3424. , "UInt", flAllocationType
  3425. , "UInt", flProtect
  3426. , "UInt")
  3427.  
  3428. if(dwRet == 0) {
  3429. ErrorLEvel := ERROR_ALLOC_MEMORY
  3430. return 0
  3431. }
  3432.  
  3433. ErrorLevel := ERROR_OK
  3434. return dwRet
  3435. }
  3436.  
  3437. virtualFreeEx(hProcess, lpAddress, dwSize, dwFreeType) {
  3438. if(!hProcess) {
  3439. ErrorLevel := ERROR_INVALID_HANDLE
  3440. return 0
  3441. }
  3442.  
  3443. dwRet := DllCall( "VirtualFreeEx"
  3444. , "UInt", hProcess
  3445. , "UInt", lpAddress
  3446. , "UInt", dwSize
  3447. , "UInt", dwFreeType
  3448. , "UInt")
  3449.  
  3450. if(dwRet == 0) {
  3451. ErrorLEvel := ERROR_FREE_MEMORY
  3452. return 0
  3453. }
  3454.  
  3455. ErrorLevel := ERROR_OK
  3456. return dwRet
  3457. }
  3458.  
  3459. createRemoteThread(hProcess, lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags, lpThreadId) {
  3460. if(!hProcess) {
  3461. ErrorLevel := ERROR_INVALID_HANDLE
  3462. return 0
  3463. }
  3464.  
  3465. dwRet := DllCall( "CreateRemoteThread"
  3466. , "UInt", hProcess
  3467. , "UInt", lpThreadAttributes
  3468. , "UInt", dwStackSize
  3469. , "UInt", lpStartAddress
  3470. , "UInt", lpParameter
  3471. , "UInt", dwCreationFlags
  3472. , "UInt", lpThreadId
  3473. , "UInt")
  3474.  
  3475. if(dwRet == 0) {
  3476. ErrorLEvel := ERROR_ALLOC_MEMORY
  3477. return 0
  3478. }
  3479. ErrorLevel := ERROR_OK
  3480. return dwRet
  3481. }
  3482.  
  3483. waitForSingleObject(hThread, dwMilliseconds) {
  3484. if(!hThread) {
  3485. ErrorLevel := ERROR_INVALID_HANDLE
  3486. return 0
  3487. }
  3488.  
  3489. dwRet := DllCall( "WaitForSingleObject"
  3490. , "UInt", hThread
  3491. , "UInt", dwMilliseconds
  3492. , "UInt")
  3493.  
  3494. if(dwRet == 0xFFFFFFFF) {
  3495. ErrorLEvel := ERROR_WAIT_FOR_OBJECT
  3496. return 0
  3497. }
  3498. ErrorLevel := ERROR_OK
  3499. return dwRet
  3500. }
  3501.  
  3502. __ansiToUnicode(sString, nLen = 0) {
  3503. If !nLen
  3504. {
  3505. nLen := DllCall("MultiByteToWideChar"
  3506. , "Uint", 0
  3507. , "Uint", 0
  3508. , "Uint", &sString
  3509. , "int", -1
  3510. , "Uint", 0
  3511. , "int", 0)
  3512. }
  3513. VarSetCapacity(wString, nLen * 2)
  3514. DllCall("MultiByteToWideChar"
  3515. , "Uint", 0
  3516. , "Uint", 0
  3517. , "Uint", &sString
  3518. , "int", -1
  3519. , "Uint", &wString
  3520. , "int", nLen)
  3521. return wString
  3522. }
  3523.  
  3524. __unicodeToAnsi(wString, nLen = 0) {
  3525. pString := wString + 1 > 65536 ? wString : &wString
  3526. If !nLen
  3527. {
  3528. nLen := DllCall("WideCharToMultiByte"
  3529. , "Uint", 0
  3530. , "Uint", 0
  3531. , "Uint", pString
  3532. , "int", -1
  3533. , "Uint", 0
  3534. , "int", 0
  3535. , "Uint", 0
  3536. , "Uint", 0)
  3537. }
  3538.  
  3539. VarSetCapacity(sString, nLen)
  3540. DllCall("WideCharToMultiByte"
  3541. , "Uint", 0
  3542. , "Uint", 0
  3543. , "Uint", pString
  3544. , "int", -1
  3545. , "str", sString
  3546. , "int", nLen
  3547. , "Uint", 0
  3548. , "Uint", 0)
  3549. return sString
  3550. }
  3551.  
  3552. RestartGameEx() {
  3553. if (!checkHandles())
  3554. return -1
  3555.  
  3556. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  3557. if (ErrorLevel || dwAddress==0) {
  3558. ErrorLevel := ERROR_READ_MEMORY
  3559. return -1
  3560. }
  3561.  
  3562. dwFunc := dwSAMP + 0xA060
  3563. VarSetCapacity(injectData, 11, 0)
  3564. NumPut(0xB9, injectData, 0, "UChar")
  3565. NumPut(dwAddress, injectData, 1, "UInt")
  3566. NumPut(0xE8, injectData, 5, "UChar")
  3567. offset := dwFunc - (pInjectFunc + 10)
  3568. NumPut(offset, injectData, 6, "Int")
  3569. NumPut(0xC3, injectData, 10, "UChar")
  3570. writeRaw(hGTA, pInjectFunc, &injectData, 11)
  3571.  
  3572. if (ErrorLevel)
  3573. return false
  3574.  
  3575. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  3576. if (ErrorLevel)
  3577. return false
  3578.  
  3579. waitForSingleObject(hThread, 0xFFFFFFFF)
  3580. return true
  3581. }
  3582.  
  3583. DisconnectEx() {
  3584. if (!checkHandles())
  3585. return 0
  3586.  
  3587. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  3588. if (ErrorLevel || dwAddress==0) {
  3589. ErrorLevel := ERROR_READ_MEMORY
  3590. return 0
  3591. }
  3592.  
  3593. dwAddress := readDWORD(hGTA, dwAddress + 0x3c9)
  3594. if (ErrorLevel || dwAddress==0) {
  3595. ErrorLevel := ERROR_READ_MEMORY
  3596. return 0
  3597. }
  3598.  
  3599. ecx := dwAddress
  3600. dwAddress := readDWORD(hGTA, dwAddress)
  3601. if (ErrorLevel || dwAddress==0) {
  3602. ErrorLevel := ERROR_READ_MEMORY
  3603. return 0
  3604. }
  3605.  
  3606. VarSetCapacity(injectData, 24, 0)
  3607. NumPut(0xB9, injectData, 0, "UChar")
  3608. NumPut(ecx, injectData, 1, "UInt")
  3609. NumPut(0xB8, injectData, 5, "UChar")
  3610. NumPut(dwAddress, injectData, 6, "UInt")
  3611. NumPut(0x68, injectData, 10, "UChar")
  3612. NumPut(0, injectData, 11, "UInt")
  3613. NumPut(0x68, injectData, 15, "UChar")
  3614. NumPut(500, injectData, 16, "UInt")
  3615. NumPut(0x50FF, injectData, 20, "UShort")
  3616. NumPut(0x08, injectData, 22, "UChar")
  3617. NumPut(0xC3, injectData, 23, "UChar")
  3618. writeRaw(hGTA, pInjectFunc, &injectData, 24)
  3619. if (ErrorLevel)
  3620. return false
  3621.  
  3622. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  3623. if (ErrorLevel)
  3624. return false
  3625.  
  3626. waitForSingleObject(hThread, 0xFFFFFFFF)
  3627. return true
  3628. }
  3629.  
  3630. SetRestart() {
  3631. VarSetCapacity(old, 4, 0)
  3632. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  3633.  
  3634. if (ErrorLevel || dwAddress==0) {
  3635. ErrorLevel := ERROR_READ_MEMORY
  3636. return 0
  3637. }
  3638. NumPut(9,old,0,"Int")
  3639. writeRaw(hGTA, dwAddress + 957, &old, 4)
  3640. }
  3641.  
  3642. Restart() {
  3643. restartGameEx()
  3644. disconnectEx()
  3645. setRestart()
  3646. }
  3647.  
  3648. global SAMP_3DTEXT := 0x12C7BC
  3649.  
  3650. GetLabelText() {
  3651. if (!checkHandles())
  3652. return -1
  3653.  
  3654. ADDR_3DText := readDWORD(hGTA, dwSAMP + SAMP_3DTEXT)
  3655. TEXT_3DTEXT := readString(hGTA, ADDR_3DText, 512)
  3656. return TEXT_3DTEXT
  3657. }
  3658.  
  3659. GetSeatIDs() {
  3660. if (!checkHandles())
  3661. return -1
  3662.  
  3663. dw := readDWORD(hGTA, 0xBA18FC)
  3664. if (dw) {
  3665. driver := readDWORD(hGTA, dw + 0x460)
  3666. psg1 := readDWORD(hGTA, dw + 0x464)
  3667. psg2 := readDWORD(hGTA, dw + 0x468)
  3668. psg3 := readDWORD(hGTA, dw + 0x46C)
  3669. return [getIdByPed(driver), getIdByPed(psg1), getIdByPed(psg2), getIdByPed(psg3)]
  3670. } else {
  3671. AddChatMessage("Du befindest dich nicht in einem Fahrzeug!")
  3672. }
  3673. }
  3674.  
  3675. playerInput(info) {
  3676. KeyWait, Enter
  3677.  
  3678. SendInput, t^a{backspace}/%info%:{space}
  3679. Input, value, V, {enter}{esc}
  3680. SendInput, ^a{backspace}{esc}
  3681.  
  3682. KeyWait, Enter
  3683. return value
  3684. }
  3685.  
  3686. DownloadBin(url, byref buf) {
  3687. if (!DllCall("LoadLibrary", "str", "wininet") || !(h := DllCall("wininet\InternetOpen", "str", a, "uint", 1, "ptr", 0, "ptr", 0, "uint", 0, "ptr")))
  3688. return 0
  3689.  
  3690. c := s := 0
  3691. if (f := DllCall("wininet\InternetOpenUrl", "ptr", h, "str", url, "ptr", 0, "uint", 0, "uint", 0x80003000, "ptr", 0, "ptr")) {
  3692. while (DllCall("wininet\InternetQueryDataAvailable", "ptr", f, "uint*", s, "uint", 0, "ptr", 0) && s>0) {
  3693. VarSetCapacity(b, c+s, 0)
  3694. if (c>0)
  3695. DllCall("RtlMoveMemory", "ptr", &b, "ptr", &buf, "ptr", c)
  3696. DllCall("wininet\InternetReadFile", "ptr", f, "ptr", &b+c, "uint", s, "uint*", r)
  3697. c += r
  3698. VarSetCapacity(buf, c, 0)
  3699.  
  3700. if (c>0)
  3701. DllCall("RtlMoveMemory", "ptr", &buf, "ptr", &b, "ptr", c)
  3702. }
  3703. DllCall("wininet\InternetCloseHandle", "ptr", f)
  3704. }
  3705.  
  3706. DllCall("wininet\InternetCloseHandle", "ptr", h)
  3707. return c
  3708. }
  3709.  
  3710. DownloadToString(url, headers="") {
  3711. encoding := "utf-8"
  3712. agent := ""
  3713. if (!DllCall("LoadLibrary", "str", "wininet") || !(h := DllCall("wininet\InternetOpen", "str", agent, "uint", 1, "ptr", 0, "ptr", 0, "uint", 0, "ptr")))
  3714. return 0
  3715.  
  3716. buf := 500
  3717. VarSetCapacity(buf, 4)
  3718. buf2 := 1
  3719. VarSetCapacity(buf2, 4)
  3720.  
  3721. if(!DllCall("wininet\InternetSetOption", "ptr", h, "uint", 2, "ptr", &buf, "uint", 4, "uint"))
  3722. return 0
  3723. if(!DllCall("wininet\InternetSetOption", "ptr", h, "uint", 5, "ptr", &buf, "uint", 4, "uint"))
  3724. return 0
  3725. if(!DllCall("wininet\InternetSetOption", "ptr", h, "uint", 6, "ptr", &buf, "uint", 4, "uint"))
  3726. return 0
  3727. if(!DllCall("wininet\InternetSetOption", "ptr", h, "uint", 7, "ptr", &buf, "uint", 4, "uint"))
  3728. return 0
  3729. if(!DllCall("wininet\InternetSetOption", "ptr", h, "uint", 8, "ptr", &buf, "uint", 4, "uint"))
  3730. return 0
  3731. if(!DllCall("wininet\InternetSetOption", "ptr", h, "uint", 3, "ptr", &buf2, "uint", 4, "uint"))
  3732. return 0
  3733.  
  3734. c := s := 0, o := ""
  3735. if (f := DllCall("wininet\InternetOpenUrl", "ptr", h, "str", url, "str", headers, "int", -1, "uint", 0x80083000, "ptr", 0, "ptr")) {
  3736. while (DllCall("wininet\InternetQueryDataAvailable", "ptr", f, "uint*", s, "uint", 0, "ptr", 0) && s>0) {
  3737. VarSetCapacity(b, s, 0)
  3738. DllCall("wininet\InternetReadFile", "ptr", f, "ptr", &b, "uint", s, "uint*", r)
  3739. o .= StrGet(&b, r>>(encoding="utf-16"||encoding="cp1200"), encoding)
  3740. }
  3741. DllCall("wininet\InternetCloseHandle", "ptr", f)
  3742. }
  3743. DllCall("wininet\InternetCloseHandle", "ptr", h)
  3744. return o
  3745. }
  3746.  
  3747. UrlDownloadToVar(URL, UserAgent = "", Proxy = "", ProxyBypass = "") {
  3748. pFix:=a_isunicode ? "W" : "A"
  3749. hModule2 := DllCall("LoadLibrary", "Str", "wininet.dll")
  3750. AccessType := Proxy != "" ? 3 : 1
  3751.  
  3752. io := DllCall("wininet\InternetOpen" . pFix, "Str", UserAgent, "UInt", AccessType, "Str", Proxy, "Str", ProxyBypass, "UInt", 0)
  3753. iou := DllCall("wininet\InternetOpenUrl" . pFix, "UInt", io, "Str", url, "Str", "", "UInt", 0, "UInt", 0x80000000, "UInt", 0)
  3754.  
  3755. if (ErrorLevel != 0 or iou = 0) {
  3756. DllCall("FreeLibrary", "UInt", hModule2)
  3757. return 0
  3758. }
  3759.  
  3760. VarSetCapacity(buffer, 10240, 0)
  3761. VarSetCapacity(BytesRead, 4, 0)
  3762. Loop {
  3763. irf := DllCall("wininet\InternetReadFile", "UInt", iou, "UInt", &buffer, "UInt", 10240, "UInt", &BytesRead)
  3764. VarSetCapacity(buffer, -1)
  3765. BytesRead_ = 0
  3766. Loop, 4
  3767. BytesRead_ += *(&BytesRead + A_Index-1) << 8*(A_Index-1)
  3768. if (irf = 1 and BytesRead_ = 0)
  3769. break
  3770. else
  3771. Result .= SubStr(buffer, 1, BytesRead_ * (a_isunicode ? 2 : 1))
  3772. }
  3773.  
  3774. DllCall("wininet\InternetCloseHandle", "UInt", iou)
  3775. DllCall("wininet\InternetCloseHandle", "UInt", io)
  3776. DllCall("FreeLibrary", "UInt", hModule2)
  3777. return % result
  3778. }
  3779.  
  3780. FormatNumber(number){
  3781. StringReplace, number, number, -
  3782. IfEQual ErrorLevel, 0, SetEnv Sign, -
  3783. {
  3784. Loop Parse, number, .
  3785. {
  3786. if(A_Index = 1){
  3787. len := StrLen(A_LoopField)
  3788. Loop Parse, A_LoopField
  3789. {
  3790. if(Mod(len-A_Index, 3) = 0 and A_Index != len){
  3791. x .= A_LoopField "."
  3792. }else{
  3793. x .= A_LoopField
  3794. }
  3795. }
  3796. }else{
  3797. return sign x "." A_LoopField
  3798. }
  3799. return sign x
  3800. }
  3801. }
  3802. }
  3803.  
  3804. Unzip(sZip, sUnz) {
  3805. fso := ComObjCreate("Scripting.FileSystemObject")
  3806. psh := ComObjCreate("Shell.Application")
  3807. zippedItems := psh.Namespace( sZip ).items().count
  3808. psh.Namespace( sUnz ).CopyHere( psh.Namespace( sZip ).items, 4|16 )
  3809.  
  3810. Loop {
  3811. Sleep, 50
  3812. unzippedItems := psh.Namespace( sUnz ).items().count
  3813. IfEqual, zippedItems, %unzippedItems%
  3814. break
  3815. }
  3816. }
  3817.  
  3818. getFullName(name) {
  3819. if name is number
  3820. {
  3821. name := getPlayerNameById(name)
  3822. if (name == "")
  3823. return ""
  3824. else
  3825. return name
  3826. } else {
  3827. name := getPlayerIdByName(name)
  3828. if (name == -1)
  3829. return ""
  3830. else
  3831. return getPlayerNameById(name)
  3832. }
  3833. }
  3834.  
  3835. getDistanceBetween(posX, posY, posZ, _posX, _posY, _posZ, _posRadius) {
  3836. X := posX -_posX
  3837. Y := posY -_posY
  3838. Z := posZ -_posZ
  3839. if (((X < _posRadius) && (X > -_posRadius)) && ((Y < _posRadius) && (Y > -_posRadius)) && ((Z < _posRadius) && (Z > -_posRadius)))
  3840. return TRUE
  3841. return FALSE
  3842. }
  3843.  
  3844. getDistanceToPoint(posX, posY, posZ, _posX, _posY, _posZ) {
  3845. return Sqrt((posX - _posX) ** 2 + (posY - _posY) ** 2 + (posZ - _posZ) ** 2)
  3846. }
  3847.  
  3848. global SAMP_CHAT_OFF := 0x0152
  3849. global SAMP_CHAT_SIZE := 144
  3850.  
  3851. readChatLine(line, color = 0) {
  3852. if (!checkHandles())
  3853. return 0
  3854.  
  3855. dwPTR := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  3856. chat := readString(hGTA, dwPTR + SAMP_CHAT_OFF + SIZE_SAMP_CHATMSG * (99 - line), SAMP_CHAT_SIZE)
  3857. if (!color)
  3858. chat := RegExReplace(chat, "\{[a-fA-F0-9]{6}\}")
  3859. return chat
  3860. }
  3861.  
  3862. setChatLine(line, text) {
  3863. if (!checkHandles())
  3864. return 0
  3865.  
  3866. dwPTR := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  3867. result := writeString(hGTA, dwPTR + SAMP_CHAT_OFF + SIZE_SAMP_CHATMSG * (99 - line), text)
  3868. return result
  3869. }
  3870.  
  3871. instruction := 0
  3872.  
  3873. fpsUnlock() {
  3874. if (!checkHandles())
  3875. return 0
  3876.  
  3877. global instruction
  3878. instruction := readMem(hGTA, dwSAMP + 0x9D9D0, 4, "UInt")
  3879. return writeMemory(hGTA, dwSAMP + 0x9D9D0, 0x5051FF15, 4, "UChar")
  3880. }
  3881.  
  3882. FpsLock() {
  3883. if (!checkHandles())
  3884. return 0
  3885.  
  3886. global instruction
  3887. if (instruction)
  3888. return writeMemory(hGTA, dwSAMP + 0x9D9D0, instruction, 4, "UInt")
  3889. else
  3890. return false
  3891. }
  3892.  
  3893. global SAMP_MAX_VEHICLES := 2000
  3894. global SAMP_PPOOL_VEHICLE_OFFSET := 0x1C
  3895.  
  3896. GetVehiclePointer(wID) {
  3897. if (wID < 1 || wID > SAMP_MAX_VEHICLES || !checkHandles())
  3898. return false
  3899.  
  3900. var1 := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  3901. var2 := readDWORD(hGTA, var1 + SAMP_PPOOLS_OFFSET)
  3902. stVehiclePool := readDWORD(hGTA, var2 + SAMP_PPOOL_VEHICLE_OFFSET)
  3903. if (stVehiclePool) {
  3904. var3 := readDWORD(hGTA, stVehiclePool + 0x4FB4 + wID * 0x4)
  3905. return var3
  3906. } else
  3907. return false
  3908. }
  3909.  
  3910. GetVehiclePos(dwVehPtr = 0xBA18FC) {
  3911. if (!checkHandles())
  3912. return false
  3913.  
  3914. if (dwVehPtr = ADDR_VEHICLE_PTR)
  3915. dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  3916. dwAddress := readDWORD(hGTA, dwVehPtr + 0x14)
  3917. if (!dwAddress)
  3918. return false
  3919. fX := readFloat(hGTA, dwAddress + 0x30)
  3920. fY := readFloat(hGTA, dwAddress + 0x34)
  3921. fZ := readFloat(hGTA, dwAddress + 0x38)
  3922. vehicleID := readDWORD(hGTA, dwVehPtr + 0x22)
  3923. return [fX, fY, fZ, vehicleID]
  3924. }
  3925.  
  3926. global TEXT_DRAW_POOL_OFFSET := 0x10
  3927. global SAMP_MAX_PLAYERTEXTDRAWS := 256
  3928. global SAMP_MAX_TEXTDRAWS := 2048
  3929. global iRefreshTD := 0
  3930. global iUpdateTickTD := 1000
  3931. global oTextDraws := []
  3932.  
  3933. UpdateTextDraws() {
  3934. if (!checkHandles())
  3935. return 0
  3936.  
  3937. if (iRefreshTD + iUpdateTickTD > A_TickCount)
  3938. return 1
  3939. oTextDraws := []
  3940. iRefreshTD := A_TickCount
  3941. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  3942. if (ErrorLevel || !dwAddress) {
  3943. ErrorLevel := ERROR_READ_MEMORY
  3944. return 0
  3945. }
  3946.  
  3947. dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  3948. if (ErrorLevel || !dwAddress) {
  3949. ErrorLevel := ERROR_READ_MEMORY
  3950. return 0
  3951. }
  3952.  
  3953. dwTextDraw := readDWORD(hGTA, dwAddress + TEXT_DRAW_POOL_OFFSET)
  3954. if (ErrorLevel || !dwTextDraw) {
  3955. ErrorLevel := ERROR_READ_MEMORY
  3956. return 0
  3957. }
  3958.  
  3959. Loop, % SAMP_MAX_TEXTDRAWS
  3960. {
  3961. i := A_Index - 1
  3962. dwIsActive := readDWORD(hGTA, dwTextDraw + i * 4)
  3963. if (ErrorLevel) {
  3964. ErrorLevel := ERROR_READ_MEMORY
  3965. return 0
  3966. }
  3967.  
  3968. if (!dwIsActive)
  3969. continue
  3970. dwAddr := readDWORD(hGTA, dwTextDraw + i * 4 + (4 * (SAMP_MAX_PLAYERTEXTDRAWS + SAMP_MAX_TEXTDRAWS)))
  3971. if (ErrorLevel) {
  3972. ErrorLevel := ERROR_READ_MEMORY
  3973. return 0
  3974. }
  3975.  
  3976. if (!dwAddr)
  3977. continue
  3978.  
  3979. sText := readString(hGTA, dwAddr, 800)
  3980. if (ErrorLevel) {
  3981. ErrorLevel := ERROR_READ_MEMORY
  3982. return 0
  3983. }
  3984. oTextDraws[i] := sText
  3985. }
  3986. ErrorLevel := ERROR_OK
  3987. return 1
  3988. }
  3989.  
  3990. PrintTextDraws() {
  3991. if (!updateTextDraws())
  3992. return
  3993. oReplace := ["~s~", "~r~", "~w~", "~h~", "~g~", "~y~", "~n~", "~b~", " ", " "]
  3994. For i, o in oTextDraws
  3995. {
  3996. Loop % oReplace.MaxIndex() {
  3997. o := StrReplace(o, oReplace[A_Index], " ")
  3998. }
  3999. AddChatMessage(o)
  4000. }
  4001. return
  4002. }
  4003.  
  4004. GetTextDrawBySubstring(substring) {
  4005. if (!updateTextDraws())
  4006. return
  4007. oReplace := ["~s~", "~r~", "~w~", "~h~", "~g~", "~y~", "~n~", "~b~", " ", " "]
  4008. For i, o in oTextDraws
  4009. {
  4010. if (!InStr(o, substring))
  4011. continue
  4012. Loop % oReplace.MaxIndex()
  4013. o := StrReplace(o, oReplace[A_Index], " ")
  4014. return o
  4015. }
  4016. }
  4017. global iRefreshTL := 0
  4018. global oTextLabelData := ""
  4019. global iUpdateTickTL := 1000
  4020.  
  4021. UpdateTextLabelData() {
  4022. if (!checkHandles())
  4023. return 0
  4024.  
  4025. if (iRefreshTL+iUpdateTickTL > A_TickCount)
  4026. return 1
  4027. oTextLabelData := []
  4028. iRefreshTL := A_TickCount
  4029. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  4030. if (ErrorLevel || dwAddress==0) {
  4031. ErrorLevel := ERROR_READ_MEMORY
  4032. return 0
  4033. }
  4034.  
  4035. dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  4036. if (ErrorLevel || dwAddress==0) {
  4037. ErrorLevel := ERROR_READ_MEMORY
  4038. return 0
  4039. }
  4040.  
  4041. dwTextLabels := readDWORD(hGTA, dwAddress + 12)
  4042. if (ErrorLevel || dwTextDraws==0) {
  4043. ErrorLevel := ERROR_READ_MEMORY
  4044. return 0
  4045. }
  4046.  
  4047. Loop, % 2048
  4048. {
  4049. i := A_Index-1
  4050. dwIsActive := readDWORD(hGTA, dwTextLabels + 59392 + i*4)
  4051. if (ErrorLevel) {
  4052. ErrorLevel := ERROR_READ_MEMORY
  4053. return 0
  4054. }
  4055.  
  4056. if (dwIsActive==0)
  4057. continue
  4058. dwAddr := readDWORD(hGTA, dwTextLabels + i*29)
  4059. if (ErrorLevel) {
  4060. ErrorLevel := ERROR_READ_MEMORY
  4061. return 0
  4062. }
  4063.  
  4064. if (dwAddr==0)
  4065. continue
  4066. sText := readString(hGTA, dwAddr, 256)
  4067. if (ErrorLevel) {
  4068. ErrorLevel := ERROR_READ_MEMORY
  4069. return 0
  4070. }
  4071.  
  4072. fX := readFloat(hGTA, dwTextLabels + i*29 +8)
  4073. if (ErrorLevel) {
  4074. ErrorLevel := ERROR_READ_MEMORY
  4075. return 0
  4076. }
  4077.  
  4078. fY := readFloat(hGTA, dwTextLabels + i*29 +12)
  4079. if (ErrorLevel) {
  4080. ErrorLevel := ERROR_READ_MEMORY
  4081. return 0
  4082. }
  4083.  
  4084. fZ := readFloat(hGTA, dwTextLabels + i*29 +16)
  4085. if (ErrorLevel) {
  4086. ErrorLevel := ERROR_READ_MEMORY
  4087. return 0
  4088. }
  4089.  
  4090. wPlayerID := readMem(hGTA, dwTextLabels + i * 0x1D + 0x19, 2, "UShort")
  4091. wVehicleID := readMem(hGTA, dwTextLabels + i * 0x1D + 0x1B, 2, "UShort")
  4092. oTextLabelData[i] := Object("TEXT", sText, "XPOS", fX , "YPOS", fY , "ZPOS", fZ, "PLAYERID", wPlayerID, "VEHICLEID", wVehicleID)
  4093. }
  4094. ErrorLevel := ERROR_OK
  4095. return 1
  4096. }
  4097.  
  4098. CountLabels() {
  4099. if (!updateTextLabelData())
  4100. return -1
  4101.  
  4102. j := 0
  4103. For i, o in oTextLabelData
  4104. {
  4105. j += 1
  4106. }
  4107. return j
  4108. }
  4109.  
  4110. PrintLabels() {
  4111. if (!updateTextLabelData())
  4112. return
  4113.  
  4114. For i, o in oTextLabelData
  4115. {
  4116. Addchatmessage("ID: " . i . ", x:" . o.XPOS . ", y:" . o.YPOS . ", z:" . o.ZPOS . ", player: " . o.PLAYERID . ", vehicle: " . o.VEHICLEID)
  4117. Addchatmessage("{FFFFFF}" . o.TEXT)
  4118. }
  4119. }
  4120.  
  4121. GetTextWidth(text) {
  4122. array := StrSplit(text)
  4123. width := 0
  4124. Loop % array.MaxIndex()
  4125. {
  4126. if (array[A_Index] == "a") {
  4127. width += 6
  4128. } else if (array[A_Index] == "b") {
  4129. width += 7
  4130. } else if (array[A_Index] == "c") {
  4131. width += 6
  4132. } else if (array[A_Index] == "d") {
  4133. width += 7
  4134. } else if (array[A_Index] == "e") {
  4135. width += 7
  4136. } else if (array[A_Index] == "f") {
  4137. width += 3
  4138. } else if (array[A_Index] == "g") {
  4139. width += 7
  4140. } else if (array[A_Index] == "h") {
  4141. width += 7
  4142. } else if (array[A_Index] == "i") {
  4143. width += 2
  4144. } else if (array[A_Index] == "j") {
  4145. width += 2
  4146. } else if (array[A_Index] == "k") {
  4147. width += 6
  4148. } else if (array[A_Index] == "l") {
  4149. width += 2
  4150. } else if (array[A_Index] == "m") {
  4151. width += 10
  4152. } else if (array[A_Index] == "n") {
  4153. width += 7
  4154. } else if (array[A_Index] == "o") {
  4155. width += 7
  4156. } else if (array[A_Index] == "p") {
  4157. width += 7
  4158. } else if (array[A_Index] == "q") {
  4159. width += 7
  4160. } else if (array[A_Index] == "r") {
  4161. width += 5
  4162. } else if (array[A_Index] == "s") {
  4163. width += 6
  4164. } else if (array[A_Index] == "t") {
  4165. width += 3
  4166. } else if (array[A_Index] == "u") {
  4167. width += 7
  4168. } else if (array[A_Index] == "v") {
  4169. width += 7
  4170. } else if (array[A_Index] == "w") {
  4171. width += 9
  4172. } else if (array[A_Index] == "x") {
  4173. width += 6
  4174. } else if (array[A_Index] == "y") {
  4175. width += 5
  4176. } else if (array[A_Index] == "z") {
  4177. width += 6
  4178. } else if (array[A_Index] == "A") {
  4179. width += 7
  4180. } else if (array[A_Index] == "B") {
  4181. width += 9
  4182. } else if (array[A_Index] == "C") {
  4183. width += 9
  4184. } else if (array[A_Index] == "D") {
  4185. width += 9
  4186. } else if (array[A_Index] == "E") {
  4187. width += 8
  4188. } else if (array[A_Index] == "F") {
  4189. width += 7
  4190. } else if (array[A_Index] == "G") {
  4191. width += 10
  4192. } else if (array[A_Index] == "H") {
  4193. width += 9
  4194. } else if (array[A_Index] == "I") {
  4195. width += 2
  4196. } else if (array[A_Index] == "J") {
  4197. width += 7
  4198. } else if (array[A_Index] == "K") {
  4199. width += 9
  4200. } else if (array[A_Index] == "L") {
  4201. width += 7
  4202. } else if (array[A_Index] == "M") {
  4203. width += 11
  4204. } else if (array[A_Index] == "N") {
  4205. width += 9
  4206. } else if (array[A_Index] == "O") {
  4207. width += 10
  4208. } else if (array[A_Index] == "P") {
  4209. width += 8
  4210. } else if (array[A_Index] == "Q") {
  4211. width += 10
  4212. } else if (array[A_Index] == "R") {
  4213. width += 9
  4214. } else if (array[A_Index] == "S") {
  4215. width += 8
  4216. } else if (array[A_Index] == "T") {
  4217. width += 8
  4218. } else if (array[A_Index] == "U") {
  4219. width += 9
  4220. } else if (array[A_Index] == "V") {
  4221. width += 7
  4222. } else if (array[A_Index] == "W") {
  4223. width += 11
  4224. } else if (array[A_Index] == "X") {
  4225. width += 8
  4226. } else if (array[A_Index] == "Y") {
  4227. width += 8
  4228. } else if (array[A_Index] == "Z") {
  4229. width += 8
  4230. } else if (array[A_Index] == ".") {
  4231. width += 2
  4232. } else if (array[A_Index] == "_") {
  4233. width += 6
  4234. } else if (array[A_Index] == "$") {
  4235. width += 7
  4236. } else if (array[A_Index] == "[") {
  4237. width += 3
  4238. } else if (array[A_Index] == "]") {
  4239. width += 3
  4240. }
  4241. }
  4242. return width
  4243. }
  4244.  
  4245. time() {
  4246. s := ""
  4247. FormatTime, time,, HH
  4248. if (time >= 12 && time < 20) {
  4249. s := "Tag"
  4250. } else if (time >= 20 || time == 0) {
  4251. s := "Abend"
  4252. } else if (time >= 1 && time < 12) {
  4253. s := "Morgen"
  4254. }
  4255. return s
  4256. }
  4257.  
  4258. currentPos() {
  4259. s := getPlayerZone() ", " getPlayerCity()
  4260. return s
  4261. }
  4262.  
  4263. getFishValue(name, weight = 1) {
  4264. fishes := {"Kugelfisch": 1, "Blauer Marlin": 2, "Schwertfisch": 3, "Roter Schnapper": 3, "Katzenfisch": 4, "Forelle": 5, "Hai": 7, "Segelfisch": 7, "Marekele": 8, "Aal": 9, "Drachenfisch": 9, "Schildkröte": 10, "Thunfisch": 12, "See Bass": 12}
  4265.  
  4266. if(fishes.HasKey(name)) {
  4267. return fishes[name]*weight
  4268. }
  4269.  
  4270. return 0
  4271. }
  4272.  
  4273. getSekMin(sek) {
  4274. min := floor(sek/60)
  4275. sek := mod(sek, 60)
  4276.  
  4277. if (min == 0) {
  4278. return sek " Sek"
  4279. } else {
  4280. return min " Min, " sek " Sek"
  4281. }
  4282. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement