Advertisement
Guest User

Untitled

a guest
Aug 7th, 2017
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 83.90 KB | None | 0 0
  1. ; <COMPILER: v1.1.24.00>
  2. InputBox, server, Адрес хоста, Введите адрес хоста`, куда залиты серверные файлы`n[Пример: host.ru]`n[Данные Вам предоставит лидер семьи]:
  3. script_version := "1.0.1"
  4. build_version := 2
  5. global ERROR_OK := 0
  6. global ERROR_PROCESS_NOT_FOUND := 1
  7. global ERROR_OPEN_PROCESS := 2
  8. global ERROR_INVALID_HANDLE := 3
  9. global ERROR_MODULE_NOT_FOUND := 4
  10. global ERROR_ENUM_PROCESS_MODULES := 5
  11. global ERROR_ZONE_NOT_FOUND := 6
  12. global ERROR_CITY_NOT_FOUND := 7
  13. global ERROR_READ_MEMORY := 8
  14. global ERROR_WRITE_MEMORY := 9
  15. global ERROR_ALLOC_MEMORY := 10
  16. global ERROR_FREE_MEMORY := 11
  17. global ERROR_WAIT_FOR_OBJECT := 12
  18. global ERROR_CREATE_THREAD := 13
  19. global ADDR_ZONECODE := 0xA49AD4
  20. global ADDR_POSITION_X := 0xB6F2E4
  21. global ADDR_POSITION_Y := 0xB6F2E8
  22. global ADDR_POSITION_Z := 0xB6F2EC
  23. global ADDR_CPED_PTR := 0xB6F5F0
  24. global ADDR_CPED_HPOFF := 0x540
  25. global ADDR_CPED_ARMOROFF := 0x548
  26. global ADDR_VEHICLE_PTR := 0xBA18FC
  27. global ADDR_VEHICLE_HPOFF := 0x4C0
  28. global ADDR_CPED_MONEY := 0xB7CE50
  29. global ADDR_CPED_INTID := 0xA4ACE8
  30. global ADDR_VEHICLE_DOORSTATE := 0x4F8
  31. global ADDR_VEHICLE_ENGINESTATE := 0x428
  32. global ADDR_VEHICLE_LIGHTSTATE := 0x428
  33. global ADDR_VEHICLE_MODEL := 0x22
  34. global ADDR_VEHICLE_TYPE := 0x590
  35. global ADDR_VEHICLE_DRIVER := 0x460
  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 ADDR_SAMP_INCHAT_PTR := 0x21A10C
  40. global ADDR_SAMP_INCHAT_PTR_OFF := 0x55
  41. global ADDR_SAMP_USERNAME := 0x219A6F
  42. global ADDR_SAMP_CHATMSG_PTR := 0x21A0E4
  43. global ADDR_SAMP_SHOWDLG_PTR := 0x21A0B8
  44. global FUNC_SAMP_SENDCMD := 0x65C60
  45. global FUNC_SAMP_SENDSAY := 0x57F0
  46. global FUNC_SAMP_ADDTOCHATWND := 0x64520
  47. global FUNC_SAMP_SHOWGAMETEXT := 0x9C2C0
  48. global FUNC_SAMP_PLAYAUDIOSTR := 0x62DA0
  49. global FUNC_SAMP_STOPAUDIOSTR := 0x629A0
  50. global FUNC_SAMP_SHOWDIALOG := 0x6B9C0
  51. global FUNC_UPDATESCOREBOARD := 0x8A10
  52. global SAMP_INFO_OFFSET := 0x21A0F8
  53. global SAMP_PPOOLS_OFFSET := 0x3CD
  54. global SAMP_PPOOL_PLAYER_OFFSET := 0x18
  55. global SAMP_SLOCALPLAYERID_OFFSET := 0x4
  56. global SAMP_ISTRLEN_LOCALPLAYERNAME_OFFSET := 0x1A
  57. global SAMP_SZLOCALPLAYERNAME_OFFSET := 0xA
  58. global SAMP_PSZLOCALPLAYERNAME_OFFSET := 0xA
  59. global SAMP_PREMOTEPLAYER_OFFSET := 0x2E
  60. global SAMP_ISTRLENNAME___OFFSET := 0x1C
  61. global SAMP_SZPLAYERNAME_OFFSET := 0xC
  62. global SAMP_PSZPLAYERNAME_OFFSET := 0xC
  63. global SAMP_ILOCALPLAYERPING_OFFSET := 0x26
  64. global SAMP_ILOCALPLAYERSCORE_OFFSET := 0x2A
  65. global SAMP_IPING_OFFSET := 0x28
  66. global SAMP_ISCORE_OFFSET := 0x24
  67. global SAMP_ISNPC_OFFSET := 0x4
  68. global SAMP_PLAYER_MAX := 1004
  69. global SIZE_SAMP_CHATMSG := 0xFC
  70. global hGTA := 0x0
  71. global dwGTAPID := 0x0
  72. global dwSAMP := 0x0
  73. global pMemory := 0x0
  74. global pParam1 := 0x0
  75. global pParam2 := 0x0
  76. global pParam3 := 0x0
  77. global pInjectFunc := 0x0
  78. global nZone := 1
  79. global nCity := 1
  80. global bInitZaC := 0
  81. global iRefreshScoreboard := 0
  82. global oScoreboardData := ""
  83. global iRefreshHandles := 0
  84. global iUpdateTick := 2500
  85. isInChat() {
  86. if(!checkHandles())
  87. return -1
  88. dwPtr := dwSAMP + ADDR_SAMP_INCHAT_PTR
  89. dwAddress := readDWORD(hGTA, dwPtr) + ADDR_SAMP_INCHAT_PTR_OFF
  90. if(ErrorLevel) {
  91. ErrorLevel := ERROR_READ_MEMORY
  92. return -1
  93. }
  94. dwInChat := readDWORD(hGTA, dwAddress)
  95. if(ErrorLevel) {
  96. ErrorLevel := ERROR_READ_MEMORY
  97. return -1
  98. }
  99. ErrorLevel := ERROR_OK
  100. if(dwInChat > 0) {
  101. return true
  102. } else {
  103. return false
  104. }
  105. }
  106. getUsername() {
  107. if(!checkHandles())
  108. return ""
  109. dwAddress := dwSAMP + ADDR_SAMP_USERNAME
  110. sUsername := readString(hGTA, dwAddress, 25)
  111. if(ErrorLevel) {
  112. ErrorLevel := ERROR_READ_MEMORY
  113. return ""
  114. }
  115. ErrorLevel := ERROR_OK
  116. return sUsername
  117. }
  118. getId() {
  119. s:=getUsername()
  120. return getPlayerIdByName(s)
  121. }
  122. sendChatMessage(wText) {
  123. wText := "" wText
  124. if(!checkHandles())
  125. return false
  126. dwFunc:=0
  127. if(SubStr(wText, 1, 1) == "/") {
  128. dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  129. } else {
  130. dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  131. }
  132. callWithParams(hGTA, dwFunc, [["s", wText]], false)
  133. ErrorLevel := ERROR_OK
  134. return true
  135. }
  136. addMessageToChatWindow(wText) {
  137. wText := "" wText
  138. if(!checkHandles())
  139. return false
  140. dwFunc := dwSAMP + FUNC_SAMP_ADDTOCHATWND
  141. dwChatInfo := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  142. if(ErrorLevel) {
  143. ErrorLevel := ERROR_READ_MEMORY
  144. return false
  145. }
  146. callWithParams(hGTA, dwFunc, [["p", dwChatInfo], ["s", wText]], true)
  147. ErrorLevel := ERROR_OK
  148. return true
  149. }
  150. showGameText(wText, dwTime, dwSize) {
  151. wText := "" wText
  152. dwTime += 0
  153. dwTime := Floor(dwTime)
  154. dwSize += 0
  155. dwSize := Floor(dwSize)
  156. if(!checkHandles())
  157. return false
  158. dwFunc := dwSAMP + FUNC_SAMP_SHOWGAMETEXT
  159. callWithParams(hGTA, dwFunc, [["s", wText], ["i", dwTime], ["i", dwSize]], false)
  160. ErrorLevel := ERROR_OK
  161. return true
  162. }
  163. showDialog(dwStyle, wCaption, wInfo, wButton1 ) {
  164. dwStyle += 0
  165. dwStyle := Floor(dwStyle)
  166. wCaption := "" wCaption
  167. wInfo := "" wInfo
  168. wButton1 := "" wButton1
  169. if(!checkHandles())
  170. return false
  171. dwFunc := dwSAMP + FUNC_SAMP_SHOWDIALOG
  172. dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_SHOWDLG_PTR)
  173. if(ErrorLevel || dwAddress==0) {
  174. ErrorLevel := ERROR_READ_MEMORY
  175. return false
  176. }
  177. writeString(hGTA, pParam1, wCaption)
  178. if(ErrorLevel)
  179. return false
  180. writeString(hGTA, pParam2, wInfo)
  181. if(ErrorLevel)
  182. return false
  183. writeString(hGTA, pParam3, wButton1)
  184. if(ErrorLevel)
  185. return false
  186. dwLen := 5 + 7*5 + 5 + 1
  187. VarSetCapacity(injectData, dwLen, 0)
  188. NumPut(0xB9, injectData, 0, "UChar")
  189. NumPut(dwAddress, injectData, 1, "UInt")
  190. NumPut(0x68, injectData, 5, "UChar")
  191. NumPut(0, injectData, 6, "UInt")
  192. NumPut(0x68, injectData, 10, "UChar")
  193. NumPut(pParam1+StrLen(wCaption), injectData, 11, "UInt")
  194. NumPut(0x68, injectData, 15, "UChar")
  195. NumPut(pParam3, injectData, 16, "UInt")
  196. NumPut(0x68, injectData, 20, "UChar")
  197. NumPut(pParam2, injectData, 21, "UInt")
  198. NumPut(0x68, injectData, 25, "UChar")
  199. NumPut(pParam1, injectData, 26, "UInt")
  200. NumPut(0x68, injectData, 30, "UChar")
  201. NumPut(dwStyle, injectData, 31, "UInt")
  202. NumPut(0x68, injectData, 35, "UChar")
  203. NumPut(1, injectData, 36, "UInt")
  204. NumPut(0xE8, injectData, 40, "UChar")
  205. offset := dwFunc - (pInjectFunc + 45)
  206. NumPut(offset, injectData, 41, "Int")
  207. NumPut(0xC3, injectData, 45, "UChar")
  208. writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
  209. if(ErrorLevel)
  210. return false
  211. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  212. if(ErrorLevel)
  213. return false
  214. waitForSingleObject(hThread, 0xFFFFFFFF)
  215. closeProcess(hThread)
  216. return true
  217. }
  218. playAudioStream(wUrl) {
  219. wUrl := "" wUrl
  220. if(!checkHandles())
  221. return false
  222. dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
  223. patchRadio()
  224. callWithParams(hGTA, dwFunc, [["s", wUrl], ["i", 0], ["i", 0], ["i", 0], ["i", 0], ["i", 0]], false)
  225. unPatchRadio()
  226. ErrorLevel := ERROR_OK
  227. return true
  228. }
  229. stopAudioStream() {
  230. if(!checkHandles())
  231. return false
  232. dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
  233. patchRadio()
  234. callWithParams(hGTA, dwFunc, [["i", 1]], false)
  235. unPatchRadio()
  236. ErrorLevel := ERROR_OK
  237. return true
  238. }
  239. blockChatInput() {
  240. if(!checkHandles())
  241. return false
  242. VarSetCapacity(nop, 2, 0)
  243. dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  244. NumPut(0x04C2,nop,0,"Short")
  245. writeRaw(hGTA, dwFunc, &nop, 2)
  246. dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  247. writeRaw(hGTA, dwFunc, &nop, 2)
  248. return true
  249. }
  250. unBlockChatInput() {
  251. if(!checkHandles())
  252. return false
  253. VarSetCapacity(nop, 2, 0)
  254. dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  255. NumPut(0xA164,nop,0,"Short")
  256. writeRaw(hGTA, dwFunc, &nop, 2)
  257. dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  258. writeRaw(hGTA, dwFunc, &nop, 2)
  259. return true
  260. }
  261. patchRadio() {
  262. if(!checkHandles())
  263. return false
  264. VarSetCapacity(nop, 4, 0)
  265. NumPut(0x90909090,nop,0,"UInt")
  266. dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
  267. writeRaw(hGTA, dwFunc, &nop, 4)
  268. writeRaw(hGTA, dwFunc+4, &nop, 1)
  269. dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
  270. writeRaw(hGTA, dwFunc, &nop, 4)
  271. writeRaw(hGTA, dwFunc+4, &nop, 1)
  272. return true
  273. }
  274. unPatchRadio() {
  275. if(!checkHandles())
  276. return false
  277. VarSetCapacity(old, 4, 0)
  278. dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
  279. NumPut(0x74003980,old,0,"UInt")
  280. writeRaw(hGTA, dwFunc, &old, 4)
  281. NumPut(0x39,old,0,"UChar")
  282. writeRaw(hGTA, dwFunc+4, &old, 1)
  283. dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
  284. NumPut(0x74003980,old,0,"UInt")
  285. writeRaw(hGTA, dwFunc, &old, 4)
  286. NumPut(0x09,old,0,"UChar")
  287. writeRaw(hGTA, dwFunc+4, &old, 1)
  288. return true
  289. }
  290. getPlayerNameById(dwId) {
  291. dwId += 0
  292. dwId := Floor(dwId)
  293. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  294. return ""
  295. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  296. {
  297. if(oScoreboardData[dwId])
  298. return oScoreboardData[dwId].NAME
  299. return ""
  300. }
  301. if(!updateOScoreboardData())
  302. return ""
  303. if(oScoreboardData[dwId])
  304. return oScoreboardData[dwId].NAME
  305. return ""
  306. }
  307. getPlayerIdByName(wName) {
  308. wName := "" wName
  309. if(StrLen(wName) < 1 || StrLen(wName) > 20)
  310. return -1
  311. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  312. {
  313. For i, o in oScoreboardData
  314. {
  315. if(InStr(o.NAME,wName)==1)
  316. return i
  317. }
  318. return -1
  319. }
  320. if(!updateOScoreboardData())
  321. return -1
  322. For i, o in oScoreboardData
  323. {
  324. if(InStr(o.NAME,wName)==1)
  325. return i
  326. }
  327. return -1
  328. }
  329. getPlayerScoreById(dwId) {
  330. dwId += 0
  331. dwId := Floor(dwId)
  332. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  333. return ""
  334. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  335. {
  336. if(oScoreboardData[dwId])
  337. return oScoreboardData[dwId].SCORE
  338. return ""
  339. }
  340. if(!updateOScoreboardData())
  341. return ""
  342. if(oScoreboardData[dwId])
  343. return oScoreboardData[dwId].SCORE
  344. return ""
  345. }
  346. getPlayerPingById(dwId) {
  347. dwId += 0
  348. dwId := Floor(dwId)
  349. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  350. return -1
  351. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  352. {
  353. if(oScoreboardData[dwId])
  354. return oScoreboardData[dwId].PING
  355. return -1
  356. }
  357. if(!updateOScoreboardData())
  358. return -1
  359. if(oScoreboardData[dwId])
  360. return oScoreboardData[dwId].PING
  361. return -1
  362. }
  363. isNPCById(dwId) {
  364. dwId += 0
  365. dwId := Floor(dwId)
  366. if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  367. return -1
  368. if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  369. {
  370. if(oScoreboardData[dwId])
  371. return oScoreboardData[dwId].ISNPC
  372. return -1
  373. }
  374. if(!updateOScoreboardData())
  375. return -1
  376. if(oScoreboardData[dwId])
  377. return oScoreboardData[dwId].ISNPC
  378. return -1
  379. }
  380. updateScoreboardDataEx() {
  381. if(!checkHandles())
  382. return false
  383. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  384. if(ErrorLevel || dwAddress==0) {
  385. ErrorLevel := ERROR_READ_MEMORY
  386. return false
  387. }
  388. dwFunc := dwSAMP + FUNC_UPDATESCOREBOARD
  389. VarSetCapacity(injectData, 11, 0)
  390. NumPut(0xB9, injectData, 0, "UChar")
  391. NumPut(dwAddress, injectData, 1, "UInt")
  392. NumPut(0xE8, injectData, 5, "UChar")
  393. offset := dwFunc - (pInjectFunc + 10)
  394. NumPut(offset, injectData, 6, "Int")
  395. NumPut(0xC3, injectData, 10, "UChar")
  396. writeRaw(hGTA, pInjectFunc, &injectData, 11)
  397. if(ErrorLevel)
  398. return false
  399. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  400. if(ErrorLevel)
  401. return false
  402. waitForSingleObject(hThread, 0xFFFFFFFF)
  403. closeProcess(hThread)
  404. return true
  405. }
  406. updateOScoreboardData() {
  407. if(!checkHandles())
  408. return 0
  409. oScoreboardData := []
  410. if(!updateScoreboardDataEx())
  411. return 0
  412. iRefreshScoreboard := A_TickCount
  413. dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  414. if(ErrorLevel || dwAddress==0) {
  415. ErrorLevel := ERROR_READ_MEMORY
  416. return 0
  417. }
  418. dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  419. if(ErrorLevel || dwAddress==0) {
  420. ErrorLevel := ERROR_READ_MEMORY
  421. return 0
  422. }
  423. dwPlayers := readDWORD(hGTA, dwAddress + SAMP_PPOOL_PLAYER_OFFSET)
  424. if(ErrorLevel || dwPlayers==0) {
  425. ErrorLevel := ERROR_READ_MEMORY
  426. return 0
  427. }
  428. wID := readMem(hGTA, dwPlayers + SAMP_SLOCALPLAYERID_OFFSET, 2, "Short")
  429. if(ErrorLevel) {
  430. ErrorLevel := ERROR_READ_MEMORY
  431. return 0
  432. }
  433. dwPing := readMem(hGTA, dwPlayers + SAMP_ILOCALPLAYERPING_OFFSET, 4, "Int")
  434. if(ErrorLevel) {
  435. ErrorLevel := ERROR_READ_MEMORY
  436. return 0
  437. }
  438. dwScore := readMem(hGTA, dwPlayers + SAMP_ILOCALPLAYERSCORE_OFFSET, 4, "Int")
  439. if(ErrorLevel) {
  440. ErrorLevel := ERROR_READ_MEMORY
  441. return 0
  442. }
  443. dwTemp := readMem(hGTA, dwPlayers + SAMP_ISTRLEN_LOCALPLAYERNAME_OFFSET, 4, "Int")
  444. if(ErrorLevel) {
  445. ErrorLevel := ERROR_READ_MEMORY
  446. return 0
  447. }
  448. sUsername := ""
  449. if(dwTemp <= 0xf) {
  450. sUsername := readString(hGTA, dwPlayers + SAMP_SZLOCALPLAYERNAME_OFFSET, 16)
  451. if(ErrorLevel) {
  452. ErrorLevel := ERROR_READ_MEMORY
  453. return 0
  454. }
  455. }
  456. else {
  457. dwAddress := readDWORD(hGTA, dwPlayers + SAMP_PSZLOCALPLAYERNAME_OFFSET)
  458. if(ErrorLevel) {
  459. ErrorLevel := ERROR_READ_MEMORY
  460. return 0
  461. }
  462. sUsername := readString(hGTA, dwAddress, 25)
  463. if(ErrorLevel) {
  464. ErrorLevel := ERROR_READ_MEMORY
  465. return 0
  466. }
  467. }
  468. oScoreboardData[wID] := Object("NAME", sUsername, "ID", wID, "PING", dwPing, "SCORE", dwScore, "ISNPC", 0)
  469. Loop, % SAMP_PLAYER_MAX
  470. {
  471. i := A_Index-1
  472. dwRemoteplayer := readDWORD(hGTA, dwPlayers+SAMP_PREMOTEPLAYER_OFFSET+i*4)
  473. if(ErrorLevel) {
  474. ErrorLevel := ERROR_READ_MEMORY
  475. return 0
  476. }
  477. if(dwRemoteplayer==0)
  478. continue
  479. dwPing := readMem(hGTA, dwRemoteplayer + SAMP_IPING_OFFSET, 4, "Int")
  480. if(ErrorLevel) {
  481. ErrorLevel := ERROR_READ_MEMORY
  482. return 0
  483. }
  484. dwScore := readMem(hGTA, dwRemoteplayer + SAMP_ISCORE_OFFSET, 4, "Int")
  485. if(ErrorLevel) {
  486. ErrorLevel := ERROR_READ_MEMORY
  487. return 0
  488. }
  489. dwIsNPC := readMem(hGTA, dwRemoteplayer + SAMP_ISNPC_OFFSET, 4, "Int")
  490. if(ErrorLevel) {
  491. ErrorLevel := ERROR_READ_MEMORY
  492. return 0
  493. }
  494. dwTemp := readMem(hGTA, dwRemoteplayer + SAMP_ISTRLENNAME___OFFSET, 4, "Int")
  495. if(ErrorLevel) {
  496. ErrorLevel := ERROR_READ_MEMORY
  497. return 0
  498. }
  499. sUsername := ""
  500. if(dwTemp <= 0xf)
  501. {
  502. sUsername := readString(hGTA, dwRemoteplayer+SAMP_SZPLAYERNAME_OFFSET, 16)
  503. if(ErrorLevel) {
  504. ErrorLevel := ERROR_READ_MEMORY
  505. return 0
  506. }
  507. }
  508. else {
  509. dwAddress := readDWORD(hGTA, dwRemoteplayer + SAMP_PSZPLAYERNAME_OFFSET)
  510. if(ErrorLevel || dwAddress==0) {
  511. ErrorLevel := ERROR_READ_MEMORY
  512. return 0
  513. }
  514. sUsername := readString(hGTA, dwAddress, 25)
  515. if(ErrorLevel) {
  516. ErrorLevel := ERROR_READ_MEMORY
  517. return 0
  518. }
  519. }
  520. o := Object("NAME", sUsername, "ID", i, "PING", dwPing, "SCORE", dwScore, "ISNPC", dwIsNPC)
  521. oScoreboardData[i] := o
  522. }
  523. ErrorLevel := ERROR_OK
  524. return 1
  525. }
  526. getPlayerHealth() {
  527. if(!checkHandles())
  528. return -1
  529. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  530. if(ErrorLevel) {
  531. ErrorLevel := ERROR_READ_MEMORY
  532. return -1
  533. }
  534. dwAddr := dwCPedPtr + ADDR_CPED_HPOFF
  535. fHealth := readFloat(hGTA, dwAddr)
  536. if(ErrorLevel) {
  537. ErrorLevel := ERROR_READ_MEMORY
  538. return -1
  539. }
  540. ErrorLevel := ERROR_OK
  541. return Round(fHealth)
  542. }
  543. getPlayerArmor() {
  544. if(!checkHandles())
  545. return -1
  546. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  547. if(ErrorLevel) {
  548. ErrorLevel := ERROR_READ_MEMORY
  549. return -1
  550. }
  551. dwAddr := dwCPedPtr + ADDR_CPED_ARMOROFF
  552. fHealth := readFloat(hGTA, dwAddr)
  553. if(ErrorLevel) {
  554. ErrorLevel := ERROR_READ_MEMORY
  555. return -1
  556. }
  557. ErrorLevel := ERROR_OK
  558. return Round(fHealth)
  559. }
  560. getPlayerInteriorId() {
  561. if(!checkHandles())
  562. return -1
  563. iid := readMem(hGTA, ADDR_CPED_INTID, 4, "Int")
  564. if(ErrorLevel) {
  565. ErrorLevel := ERROR_READ_MEMORY
  566. return -1
  567. }
  568. ErrorLevel := ERROR_OK
  569. return iid
  570. }
  571. getPlayerMoney() {
  572. if(!checkHandles())
  573. return ""
  574. money := readMem(hGTA, ADDR_CPED_MONEY, 4, "Int")
  575. if(ErrorLevel) {
  576. ErrorLevel := ERROR_READ_MEMORY
  577. return ""
  578. }
  579. ErrorLevel := ERROR_OK
  580. return money
  581. }
  582. isPlayerInAnyVehicle()
  583. {
  584. if(!checkHandles())
  585. return -1
  586. dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  587. if(ErrorLevel) {
  588. ErrorLevel := ERROR_READ_MEMORY
  589. return -1
  590. }
  591. return (dwVehPtr > 0)
  592. }
  593. isPlayerDriver() {
  594. if(!checkHandles())
  595. return -1
  596. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  597. if(ErrorLevel) {
  598. ErrorLevel := ERROR_READ_MEMORY
  599. return -1
  600. }
  601. if(!dwAddr)
  602. return -1
  603. dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  604. if(ErrorLevel) {
  605. ErrorLevel := ERROR_READ_MEMORY
  606. return -1
  607. }
  608. dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DRIVER)
  609. if(ErrorLevel) {
  610. ErrorLevel := ERROR_READ_MEMORY
  611. return -1
  612. }
  613. ErrorLevel := ERROR_OK
  614. return (dwVal==dwCPedPtr)
  615. }
  616. getVehicleHealth() {
  617. if(!checkHandles())
  618. return -1
  619. dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  620. if(ErrorLevel) {
  621. ErrorLevel := ERROR_READ_MEMORY
  622. return -1
  623. }
  624. dwAddr := dwVehPtr + ADDR_VEHICLE_HPOFF
  625. fHealth := readFloat(hGTA, dwAddr)
  626. if(ErrorLevel) {
  627. ErrorLevel := ERROR_READ_MEMORY
  628. return -1
  629. }
  630. ErrorLevel := ERROR_OK
  631. return Round(fHealth)
  632. }
  633. getVehicleType() {
  634. if(!checkHandles())
  635. return 0
  636. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  637. if(ErrorLevel) {
  638. ErrorLevel := ERROR_READ_MEMORY
  639. return 0
  640. }
  641. if(!dwAddr)
  642. return 0
  643. cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_TYPE, 1, "Char")
  644. if(ErrorLevel) {
  645. ErrorLevel := ERROR_READ_MEMORY
  646. return 0
  647. }
  648. ErrorLevel := ERROR_OK
  649. if(!cVal)
  650. {
  651. mid := getVehicleModelId()
  652. Loop % oAirplaneModels.MaxIndex()
  653. {
  654. if(oAirplaneModels[A_Index]==mid)
  655. return 5
  656. }
  657. return 1
  658. }
  659. else if(cVal==5)
  660. return 2
  661. else if(cVal==6)
  662. return 3
  663. else if(cVal==9)
  664. {
  665. mid := getVehicleModelId()
  666. Loop % oBikeModels.MaxIndex()
  667. {
  668. if(oBikeModels[A_Index]==mid)
  669. return 6
  670. }
  671. return 4
  672. }
  673. return 0
  674. }
  675. getVehicleModelId() {
  676. if(!checkHandles())
  677. return 0
  678. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  679. if(ErrorLevel) {
  680. ErrorLevel := ERROR_READ_MEMORY
  681. return 0
  682. }
  683. if(!dwAddr)
  684. return 0
  685. sVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_MODEL, 2, "Short")
  686. if(ErrorLevel) {
  687. ErrorLevel := ERROR_READ_MEMORY
  688. return 0
  689. }
  690. ErrorLevel := ERROR_OK
  691. return sVal
  692. }
  693. getVehicleModelName() {
  694. id:=getVehicleModelId()
  695. if(id>400 && id <611)
  696. {
  697. return ovehicleNames[id-399]
  698. }
  699. return ""
  700. }
  701. getVehicleLightState() {
  702. if(!checkHandles())
  703. return -1
  704. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  705. if(ErrorLevel) {
  706. ErrorLevel := ERROR_READ_MEMORY
  707. return -1
  708. }
  709. if(!dwAddr)
  710. return -1
  711. dwVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_LIGHTSTATE, 4, "Int")
  712. if(ErrorLevel) {
  713. ErrorLevel := ERROR_READ_MEMORY
  714. return -1
  715. }
  716. ErrorLevel := ERROR_OK
  717. return (dwVal>0)
  718. }
  719. getVehicleEngineState() {
  720. if(!checkHandles())
  721. return -1
  722. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  723. if(ErrorLevel) {
  724. ErrorLevel := ERROR_READ_MEMORY
  725. return -1
  726. }
  727. if(!dwAddr)
  728. return -1
  729. cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_ENGINESTATE, 1, "Char")
  730. if(ErrorLevel) {
  731. ErrorLevel := ERROR_READ_MEMORY
  732. return -1
  733. }
  734. ErrorLevel := ERROR_OK
  735. return (cVal==24 || cVal==56 || cVal==88 || cVal==120)
  736. }
  737. getVehicleLockState() {
  738. if(!checkHandles())
  739. return -1
  740. dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  741. if(ErrorLevel) {
  742. ErrorLevel := ERROR_READ_MEMORY
  743. return -1
  744. }
  745. if(!dwAddr)
  746. return -1
  747. dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DOORSTATE)
  748. if(ErrorLevel) {
  749. ErrorLevel := ERROR_READ_MEMORY
  750. return -1
  751. }
  752. ErrorLevel := ERROR_OK
  753. return (dwVal==2)
  754. }
  755. getCoordinates() {
  756. if(!checkHandles())
  757. return ""
  758. fX := readFloat(hGTA, ADDR_POSITION_X)
  759. if(ErrorLevel) {
  760. ErrorLevel := ERROR_READ_MEMORY
  761. return ""
  762. }
  763. fY := readFloat(hGTA, ADDR_POSITION_Y)
  764. if(ErrorLevel) {
  765. ErrorLevel := ERROR_READ_MEMORY
  766. return ""
  767. }
  768. fZ := readFloat(hGTA, ADDR_POSITION_Z)
  769. if(ErrorLevel) {
  770. ErrorLevel := ERROR_READ_MEMORY
  771. return ""
  772. }
  773. ErrorLevel := ERROR_OK
  774. return [fX, fY, fZ]
  775. }
  776. calculateZone(posX, posY, posZ) {
  777. posX += 0
  778. posY += 0
  779. posZ += 0
  780. if ( !bInitZaC )
  781. {
  782. initZonesAndCities()
  783. bInitZaC := 1
  784. }
  785. Loop % nZone-1
  786. {
  787. 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)
  788. {
  789. ErrorLevel := ERROR_OK
  790. return zone%A_Index%_name
  791. }
  792. }
  793. ErrorLevel := ERROR_ZONE_NOT_FOUND
  794. return ""
  795. }
  796. calculateCity(posX, posY, posZ) {
  797. posX += 0
  798. posY += 0
  799. posZ += 0
  800. if ( !bInitZaC )
  801. {
  802. initZonesAndCities()
  803. bInitZaC := 1
  804. }
  805. smallestCity := ""
  806. currentCitySize := 0
  807. smallestCitySize := 0
  808. Loop % nCity-1
  809. {
  810. 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)
  811. {
  812. 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))
  813. if (!smallestCity) || (currentCitySize < smallestCitySize)
  814. {
  815. smallestCity := city%A_Index%_name
  816. smallestCitySize := currentCitySize
  817. }
  818. }
  819. }
  820. if(!smallestCity) {
  821. ErrorLevel := ERROR_CITY_NOT_FOUND
  822. } else {
  823. ErrorLevel := ERROR_OK
  824. }
  825. return smallestCity
  826. }
  827. initZonesAndCities() {
  828. if(bInitZaC)
  829. return
  830. AddCity("Las Venturas", 685.0, 476.093, -500.0, 3000.0, 3000.0, 500.0)
  831. AddCity("San Fierro", -3000.0, -742.306, -500.0, -1270.53, 1530.24, 500.0)
  832. AddCity("San Fierro", -1270.53, -402.481, -500.0, -1038.45, 832.495, 500.0)
  833. AddCity("San Fierro", -1038.45, -145.539, -500.0, -897.546, 376.632, 500.0)
  834. AddCity("Los Santos", 480.0, -3000.0, -500.0, 3000.0, -850.0, 500.0)
  835. AddCity("Los Santos", 80.0, -2101.61, -500.0, 1075.0, -1239.61, 500.0)
  836. AddCity("Tierra Robada", -1213.91, 596.349, -242.99, -480.539, 1659.68, 900.0)
  837. AddCity("Red County", -1213.91, -768.027, -242.99, 2997.06, 596.349, 900.0)
  838. AddCity("Flint County", -1213.91, -2892.97, -242.99, 44.6147, -768.027, 900.0)
  839. AddCity("Whetstone", -2997.47, -2892.97, -242.99, -1213.91, -1115.58, 900.0)
  840. AddZone("Avispa Country Club", -2667.810, -302.135, -28.831, -2646.400, -262.320, 71.169)
  841. AddZone("Easter Bay Airport", -1315.420, -405.388, 15.406, -1264.400, -209.543, 25.406)
  842. AddZone("Avispa Country Club", -2550.040, -355.493, 0.000, -2470.040, -318.493, 39.700)
  843. AddZone("Easter Bay Airport", -1490.330, -209.543, 15.406, -1264.400, -148.388, 25.406)
  844. AddZone("Garcia", -2395.140, -222.589, -5.3, -2354.090, -204.792, 200.000)
  845. AddZone("Shady Cabin", -1632.830, -2263.440, -3.0, -1601.330, -2231.790, 200.000)
  846. AddZone("East Los Santos", 2381.680, -1494.030, -89.084, 2421.030, -1454.350, 110.916)
  847. AddZone("LVA Freight Depot", 1236.630, 1163.410, -89.084, 1277.050, 1203.280, 110.916)
  848. AddZone("Blackfield Intersection", 1277.050, 1044.690, -89.084, 1315.350, 1087.630, 110.916)
  849. AddZone("Avispa Country Club", -2470.040, -355.493, 0.000, -2270.040, -318.493, 46.100)
  850. AddZone("Temple", 1252.330, -926.999, -89.084, 1357.000, -910.170, 110.916)
  851. AddZone("Unity Station", 1692.620, -1971.800, -20.492, 1812.620, -1932.800, 79.508)
  852. AddZone("LVA Freight Depot", 1315.350, 1044.690, -89.084, 1375.600, 1087.630, 110.916)
  853. AddZone("Los Flores", 2581.730, -1454.350, -89.084, 2632.830, -1393.420, 110.916)
  854. AddZone("Starfish Casino", 2437.390, 1858.100, -39.084, 2495.090, 1970.850, 60.916)
  855. AddZone("Easter Bay Chemicals", -1132.820, -787.391, 0.000, -956.476, -768.027, 200.000)
  856. AddZone("Downtown Los Santos", 1370.850, -1170.870, -89.084, 1463.900, -1130.850, 110.916)
  857. AddZone("Esplanade East", -1620.300, 1176.520, -4.5, -1580.010, 1274.260, 200.000)
  858. AddZone("Market Station", 787.461, -1410.930, -34.126, 866.009, -1310.210, 65.874)
  859. AddZone("Linden Station", 2811.250, 1229.590, -39.594, 2861.250, 1407.590, 60.406)
  860. AddZone("Montgomery Intersection", 1582.440, 347.457, 0.000, 1664.620, 401.750, 200.000)
  861. AddZone("Frederick Bridge", 2759.250, 296.501, 0.000, 2774.250, 594.757, 200.000)
  862. AddZone("Yellow Bell Station", 1377.480, 2600.430, -21.926, 1492.450, 2687.360, 78.074)
  863. AddZone("Downtown Los Santos", 1507.510, -1385.210, 110.916, 1582.550, -1325.310, 335.916)
  864. AddZone("Jefferson", 2185.330, -1210.740, -89.084, 2281.450, -1154.590, 110.916)
  865. AddZone("Mulholland", 1318.130, -910.170, -89.084, 1357.000, -768.027, 110.916)
  866. AddZone("Avispa Country Club", -2361.510, -417.199, 0.000, -2270.040, -355.493, 200.000)
  867. AddZone("Jefferson", 1996.910, -1449.670, -89.084, 2056.860, -1350.720, 110.916)
  868. AddZone("Julius Thruway West", 1236.630, 2142.860, -89.084, 1297.470, 2243.230, 110.916)
  869. AddZone("Jefferson", 2124.660, -1494.030, -89.084, 2266.210, -1449.670, 110.916)
  870. AddZone("Julius Thruway North", 1848.400, 2478.490, -89.084, 1938.800, 2553.490, 110.916)
  871. AddZone("Rodeo", 422.680, -1570.200, -89.084, 466.223, -1406.050, 110.916)
  872. AddZone("Cranberry Station", -2007.830, 56.306, 0.000, -1922.000, 224.782, 100.000)
  873. AddZone("Downtown Los Santos", 1391.050, -1026.330, -89.084, 1463.900, -926.999, 110.916)
  874. AddZone("Redsands West", 1704.590, 2243.230, -89.084, 1777.390, 2342.830, 110.916)
  875. AddZone("Little Mexico", 1758.900, -1722.260, -89.084, 1812.620, -1577.590, 110.916)
  876. AddZone("Blackfield Intersection", 1375.600, 823.228, -89.084, 1457.390, 919.447, 110.916)
  877. AddZone("Los Santos International", 1974.630, -2394.330, -39.084, 2089.000, -2256.590, 60.916)
  878. AddZone("Beacon Hill", -399.633, -1075.520, -1.489, -319.033, -977.516, 198.511)
  879. AddZone("Rodeo", 334.503, -1501.950, -89.084, 422.680, -1406.050, 110.916)
  880. AddZone("Richman", 225.165, -1369.620, -89.084, 334.503, -1292.070, 110.916)
  881. AddZone("Downtown Los Santos", 1724.760, -1250.900, -89.084, 1812.620, -1150.870, 110.916)
  882. AddZone("The Strip", 2027.400, 1703.230, -89.084, 2137.400, 1783.230, 110.916)
  883. AddZone("Downtown Los Santos", 1378.330, -1130.850, -89.084, 1463.900, -1026.330, 110.916)
  884. AddZone("Blackfield Intersection", 1197.390, 1044.690, -89.084, 1277.050, 1163.390, 110.916)
  885. AddZone("Conference Center", 1073.220, -1842.270, -89.084, 1323.900, -1804.210, 110.916)
  886. AddZone("Montgomery", 1451.400, 347.457, -6.1, 1582.440, 420.802, 200.000)
  887. AddZone("Foster Valley", -2270.040, -430.276, -1.2, -2178.690, -324.114, 200.000)
  888. AddZone("Blackfield Chapel", 1325.600, 596.349, -89.084, 1375.600, 795.010, 110.916)
  889. AddZone("Los Santos International", 2051.630, -2597.260, -39.084, 2152.450, -2394.330, 60.916)
  890. AddZone("Mulholland", 1096.470, -910.170, -89.084, 1169.130, -768.027, 110.916)
  891. AddZone("Yellow Bell Gol Course", 1457.460, 2723.230, -89.084, 1534.560, 2863.230, 110.916)
  892. AddZone("The Strip", 2027.400, 1783.230, -89.084, 2162.390, 1863.230, 110.916)
  893. AddZone("Jefferson", 2056.860, -1210.740, -89.084, 2185.330, -1126.320, 110.916)
  894. AddZone("Mulholland", 952.604, -937.184, -89.084, 1096.470, -860.619, 110.916)
  895. AddZone("Aldea Malvada", -1372.140, 2498.520, 0.000, -1277.590, 2615.350, 200.000)
  896. AddZone("Las Colinas", 2126.860, -1126.320, -89.084, 2185.330, -934.489, 110.916)
  897. AddZone("Las Colinas", 1994.330, -1100.820, -89.084, 2056.860, -920.815, 110.916)
  898. AddZone("Richman", 647.557, -954.662, -89.084, 768.694, -860.619, 110.916)
  899. AddZone("LVA Freight Depot", 1277.050, 1087.630, -89.084, 1375.600, 1203.280, 110.916)
  900. AddZone("Julius Thruway North", 1377.390, 2433.230, -89.084, 1534.560, 2507.230, 110.916)
  901. AddZone("Willowfield", 2201.820, -2095.000, -89.084, 2324.000, -1989.900, 110.916)
  902. AddZone("Julius Thruway North", 1704.590, 2342.830, -89.084, 1848.400, 2433.230, 110.916)
  903. AddZone("Temple", 1252.330, -1130.850, -89.084, 1378.330, -1026.330, 110.916)
  904. AddZone("Little Mexico", 1701.900, -1842.270, -89.084, 1812.620, -1722.260, 110.916)
  905. AddZone("Queens", -2411.220, 373.539, 0.000, -2253.540, 458.411, 200.000)
  906. AddZone("Las Venturas Airport", 1515.810, 1586.400, -12.500, 1729.950, 1714.560, 87.500)
  907. AddZone("Richman", 225.165, -1292.070, -89.084, 466.223, -1235.070, 110.916)
  908. AddZone("Temple", 1252.330, -1026.330, -89.084, 1391.050, -926.999, 110.916)
  909. AddZone("East Los Santos", 2266.260, -1494.030, -89.084, 2381.680, -1372.040, 110.916)
  910. AddZone("Julius Thruway East", 2623.180, 943.235, -89.084, 2749.900, 1055.960, 110.916)
  911. AddZone("Willowfield", 2541.700, -1941.400, -89.084, 2703.580, -1852.870, 110.916)
  912. AddZone("Las Colinas", 2056.860, -1126.320, -89.084, 2126.860, -920.815, 110.916)
  913. AddZone("Julius Thruway East", 2625.160, 2202.760, -89.084, 2685.160, 2442.550, 110.916)
  914. AddZone("Rodeo", 225.165, -1501.950, -89.084, 334.503, -1369.620, 110.916)
  915. AddZone("Las Brujas", -365.167, 2123.010, -3.0, -208.570, 2217.680, 200.000)
  916. AddZone("Julius Thruway East", 2536.430, 2442.550, -89.084, 2685.160, 2542.550, 110.916)
  917. AddZone("Rodeo", 334.503, -1406.050, -89.084, 466.223, -1292.070, 110.916)
  918. AddZone("Vinewood", 647.557, -1227.280, -89.084, 787.461, -1118.280, 110.916)
  919. AddZone("Rodeo", 422.680, -1684.650, -89.084, 558.099, -1570.200, 110.916)
  920. AddZone("Julius Thruway North", 2498.210, 2542.550, -89.084, 2685.160, 2626.550, 110.916)
  921. AddZone("Downtown Los Santos", 1724.760, -1430.870, -89.084, 1812.620, -1250.900, 110.916)
  922. AddZone("Rodeo", 225.165, -1684.650, -89.084, 312.803, -1501.950, 110.916)
  923. AddZone("Jefferson", 2056.860, -1449.670, -89.084, 2266.210, -1372.040, 110.916)
  924. AddZone("Hampton Barns", 603.035, 264.312, 0.000, 761.994, 366.572, 200.000)
  925. AddZone("Temple", 1096.470, -1130.840, -89.084, 1252.330, -1026.330, 110.916)
  926. AddZone("Kincaid Bridge", -1087.930, 855.370, -89.084, -961.950, 986.281, 110.916)
  927. AddZone("Verona Beach", 1046.150, -1722.260, -89.084, 1161.520, -1577.590, 110.916)
  928. AddZone("Commerce", 1323.900, -1722.260, -89.084, 1440.900, -1577.590, 110.916)
  929. AddZone("Mulholland", 1357.000, -926.999, -89.084, 1463.900, -768.027, 110.916)
  930. AddZone("Rodeo", 466.223, -1570.200, -89.084, 558.099, -1385.070, 110.916)
  931. AddZone("Mulholland", 911.802, -860.619, -89.084, 1096.470, -768.027, 110.916)
  932. AddZone("Mulholland", 768.694, -954.662, -89.084, 952.604, -860.619, 110.916)
  933. AddZone("Julius Thruway South", 2377.390, 788.894, -89.084, 2537.390, 897.901, 110.916)
  934. AddZone("Idlewood", 1812.620, -1852.870, -89.084, 1971.660, -1742.310, 110.916)
  935. AddZone("Ocean Docks", 2089.000, -2394.330, -89.084, 2201.820, -2235.840, 110.916)
  936. AddZone("Commerce", 1370.850, -1577.590, -89.084, 1463.900, -1384.950, 110.916)
  937. AddZone("Julius Thruway North", 2121.400, 2508.230, -89.084, 2237.400, 2663.170, 110.916)
  938. AddZone("Temple", 1096.470, -1026.330, -89.084, 1252.330, -910.170, 110.916)
  939. AddZone("Glen Park", 1812.620, -1449.670, -89.084, 1996.910, -1350.720, 110.916)
  940. AddZone("Easter Bay Airport", -1242.980, -50.096, 0.000, -1213.910, 578.396, 200.000)
  941. AddZone("Martin Bridge", -222.179, 293.324, 0.000, -122.126, 476.465, 200.000)
  942. AddZone("The Strip", 2106.700, 1863.230, -89.084, 2162.390, 2202.760, 110.916)
  943. AddZone("Willowfield", 2541.700, -2059.230, -89.084, 2703.580, -1941.400, 110.916)
  944. AddZone("Marina", 807.922, -1577.590, -89.084, 926.922, -1416.250, 110.916)
  945. AddZone("Las Venturas Airport", 1457.370, 1143.210, -89.084, 1777.400, 1203.280, 110.916)
  946. AddZone("Idlewood", 1812.620, -1742.310, -89.084, 1951.660, -1602.310, 110.916)
  947. AddZone("Esplanade East", -1580.010, 1025.980, -6.1, -1499.890, 1274.260, 200.000)
  948. AddZone("Downtown Los Santos", 1370.850, -1384.950, -89.084, 1463.900, -1170.870, 110.916)
  949. AddZone("The Mako Span", 1664.620, 401.750, 0.000, 1785.140, 567.203, 200.000)
  950. AddZone("Rodeo", 312.803, -1684.650, -89.084, 422.680, -1501.950, 110.916)
  951. AddZone("Pershing Square", 1440.900, -1722.260, -89.084, 1583.500, -1577.590, 110.916)
  952. AddZone("Mulholland", 687.802, -860.619, -89.084, 911.802, -768.027, 110.916)
  953. AddZone("Gant Bridge", -2741.070, 1490.470, -6.1, -2616.400, 1659.680, 200.000)
  954. AddZone("Las Colinas", 2185.330, -1154.590, -89.084, 2281.450, -934.489, 110.916)
  955. AddZone("Mulholland", 1169.130, -910.170, -89.084, 1318.130, -768.027, 110.916)
  956. AddZone("Julius Thruway North", 1938.800, 2508.230, -89.084, 2121.400, 2624.230, 110.916)
  957. AddZone("Commerce", 1667.960, -1577.590, -89.084, 1812.620, -1430.870, 110.916)
  958. AddZone("Rodeo", 72.648, -1544.170, -89.084, 225.165, -1404.970, 110.916)
  959. AddZone("Roca Escalante", 2536.430, 2202.760, -89.084, 2625.160, 2442.550, 110.916)
  960. AddZone("Rodeo", 72.648, -1684.650, -89.084, 225.165, -1544.170, 110.916)
  961. AddZone("Market", 952.663, -1310.210, -89.084, 1072.660, -1130.850, 110.916)
  962. AddZone("Las Colinas", 2632.740, -1135.040, -89.084, 2747.740, -945.035, 110.916)
  963. AddZone("Mulholland", 861.085, -674.885, -89.084, 1156.550, -600.896, 110.916)
  964. AddZone("King's", -2253.540, 373.539, -9.1, -1993.280, 458.411, 200.000)
  965. AddZone("Redsands East", 1848.400, 2342.830, -89.084, 2011.940, 2478.490, 110.916)
  966. AddZone("Downtown", -1580.010, 744.267, -6.1, -1499.890, 1025.980, 200.000)
  967. AddZone("Conference Center", 1046.150, -1804.210, -89.084, 1323.900, -1722.260, 110.916)
  968. AddZone("Richman", 647.557, -1118.280, -89.084, 787.461, -954.662, 110.916)
  969. AddZone("Ocean Flats", -2994.490, 277.411, -9.1, -2867.850, 458.411, 200.000)
  970. AddZone("Greenglass College", 964.391, 930.890, -89.084, 1166.530, 1044.690, 110.916)
  971. AddZone("Glen Park", 1812.620, -1100.820, -89.084, 1994.330, -973.380, 110.916)
  972. AddZone("LVA Freight Depot", 1375.600, 919.447, -89.084, 1457.370, 1203.280, 110.916)
  973. AddZone("Regular Tom", -405.770, 1712.860, -3.0, -276.719, 1892.750, 200.000)
  974. AddZone("Verona Beach", 1161.520, -1722.260, -89.084, 1323.900, -1577.590, 110.916)
  975. AddZone("East Los Santos", 2281.450, -1372.040, -89.084, 2381.680, -1135.040, 110.916)
  976. AddZone("Caligula's Palace", 2137.400, 1703.230, -89.084, 2437.390, 1783.230, 110.916)
  977. AddZone("Idlewood", 1951.660, -1742.310, -89.084, 2124.660, -1602.310, 110.916)
  978. AddZone("Pilgrim", 2624.400, 1383.230, -89.084, 2685.160, 1783.230, 110.916)
  979. AddZone("Idlewood", 2124.660, -1742.310, -89.084, 2222.560, -1494.030, 110.916)
  980. AddZone("Queens", -2533.040, 458.411, 0.000, -2329.310, 578.396, 200.000)
  981. AddZone("Downtown", -1871.720, 1176.420, -4.5, -1620.300, 1274.260, 200.000)
  982. AddZone("Commerce", 1583.500, -1722.260, -89.084, 1758.900, -1577.590, 110.916)
  983. AddZone("East Los Santos", 2381.680, -1454.350, -89.084, 2462.130, -1135.040, 110.916)
  984. AddZone("Marina", 647.712, -1577.590, -89.084, 807.922, -1416.250, 110.916)
  985. AddZone("Richman", 72.648, -1404.970, -89.084, 225.165, -1235.070, 110.916)
  986. AddZone("Vinewood", 647.712, -1416.250, -89.084, 787.461, -1227.280, 110.916)
  987. AddZone("East Los Santos", 2222.560, -1628.530, -89.084, 2421.030, -1494.030, 110.916)
  988. AddZone("Rodeo", 558.099, -1684.650, -89.084, 647.522, -1384.930, 110.916)
  989. AddZone("Easter Tunnel", -1709.710, -833.034, -1.5, -1446.010, -730.118, 200.000)
  990. AddZone("Rodeo", 466.223, -1385.070, -89.084, 647.522, -1235.070, 110.916)
  991. AddZone("Redsands East", 1817.390, 2202.760, -89.084, 2011.940, 2342.830, 110.916)
  992. AddZone("The Clown's Pocket", 2162.390, 1783.230, -89.084, 2437.390, 1883.230, 110.916)
  993. AddZone("Idlewood", 1971.660, -1852.870, -89.084, 2222.560, -1742.310, 110.916)
  994. AddZone("Montgomery Intersection", 1546.650, 208.164, 0.000, 1745.830, 347.457, 200.000)
  995. AddZone("Willowfield", 2089.000, -2235.840, -89.084, 2201.820, -1989.900, 110.916)
  996. AddZone("Temple", 952.663, -1130.840, -89.084, 1096.470, -937.184, 110.916)
  997. AddZone("Prickle Pine", 1848.400, 2553.490, -89.084, 1938.800, 2863.230, 110.916)
  998. AddZone("Los Santos International", 1400.970, -2669.260, -39.084, 2189.820, -2597.260, 60.916)
  999. AddZone("Garver Bridge", -1213.910, 950.022, -89.084, -1087.930, 1178.930, 110.916)
  1000. AddZone("Garver Bridge", -1339.890, 828.129, -89.084, -1213.910, 1057.040, 110.916)
  1001. AddZone("Kincaid Bridge", -1339.890, 599.218, -89.084, -1213.910, 828.129, 110.916)
  1002. AddZone("Kincaid Bridge", -1213.910, 721.111, -89.084, -1087.930, 950.022, 110.916)
  1003. AddZone("Verona Beach", 930.221, -2006.780, -89.084, 1073.220, -1804.210, 110.916)
  1004. AddZone("Verdant Bluffs", 1073.220, -2006.780, -89.084, 1249.620, -1842.270, 110.916)
  1005. AddZone("Vinewood", 787.461, -1130.840, -89.084, 952.604, -954.662, 110.916)
  1006. AddZone("Vinewood", 787.461, -1310.210, -89.084, 952.663, -1130.840, 110.916)
  1007. AddZone("Commerce", 1463.900, -1577.590, -89.084, 1667.960, -1430.870, 110.916)
  1008. AddZone("Market", 787.461, -1416.250, -89.084, 1072.660, -1310.210, 110.916)
  1009. AddZone("Rockshore West", 2377.390, 596.349, -89.084, 2537.390, 788.894, 110.916)
  1010. AddZone("Julius Thruway North", 2237.400, 2542.550, -89.084, 2498.210, 2663.170, 110.916)
  1011. AddZone("East Beach", 2632.830, -1668.130, -89.084, 2747.740, -1393.420, 110.916)
  1012. AddZone("Fallow Bridge", 434.341, 366.572, 0.000, 603.035, 555.680, 200.000)
  1013. AddZone("Willowfield", 2089.000, -1989.900, -89.084, 2324.000, -1852.870, 110.916)
  1014. AddZone("Chinatown", -2274.170, 578.396, -7.6, -2078.670, 744.170, 200.000)
  1015. AddZone("El Castillo del Diablo", -208.570, 2337.180, 0.000, 8.430, 2487.180, 200.000)
  1016. AddZone("Ocean Docks", 2324.000, -2145.100, -89.084, 2703.580, -2059.230, 110.916)
  1017. AddZone("Easter Bay Chemicals", -1132.820, -768.027, 0.000, -956.476, -578.118, 200.000)
  1018. AddZone("The Visage", 1817.390, 1703.230, -89.084, 2027.400, 1863.230, 110.916)
  1019. AddZone("Ocean Flats", -2994.490, -430.276, -1.2, -2831.890, -222.589, 200.000)
  1020. AddZone("Richman", 321.356, -860.619, -89.084, 687.802, -768.027, 110.916)
  1021. AddZone("Green Palms", 176.581, 1305.450, -3.0, 338.658, 1520.720, 200.000)
  1022. AddZone("Richman", 321.356, -768.027, -89.084, 700.794, -674.885, 110.916)
  1023. AddZone("Starfish Casino", 2162.390, 1883.230, -89.084, 2437.390, 2012.180, 110.916)
  1024. AddZone("East Beach", 2747.740, -1668.130, -89.084, 2959.350, -1498.620, 110.916)
  1025. AddZone("Jefferson", 2056.860, -1372.040, -89.084, 2281.450, -1210.740, 110.916)
  1026. AddZone("Downtown Los Santos", 1463.900, -1290.870, -89.084, 1724.760, -1150.870, 110.916)
  1027. AddZone("Downtown Los Santos", 1463.900, -1430.870, -89.084, 1724.760, -1290.870, 110.916)
  1028. AddZone("Garver Bridge", -1499.890, 696.442, -179.615, -1339.890, 925.353, 20.385)
  1029. AddZone("Julius Thruway South", 1457.390, 823.228, -89.084, 2377.390, 863.229, 110.916)
  1030. AddZone("East Los Santos", 2421.030, -1628.530, -89.084, 2632.830, -1454.350, 110.916)
  1031. AddZone("Greenglass College", 964.391, 1044.690, -89.084, 1197.390, 1203.220, 110.916)
  1032. AddZone("Las Colinas", 2747.740, -1120.040, -89.084, 2959.350, -945.035, 110.916)
  1033. AddZone("Mulholland", 737.573, -768.027, -89.084, 1142.290, -674.885, 110.916)
  1034. AddZone("Ocean Docks", 2201.820, -2730.880, -89.084, 2324.000, -2418.330, 110.916)
  1035. AddZone("East Los Santos", 2462.130, -1454.350, -89.084, 2581.730, -1135.040, 110.916)
  1036. AddZone("Ganton", 2222.560, -1722.330, -89.084, 2632.830, -1628.530, 110.916)
  1037. AddZone("Avispa Country Club", -2831.890, -430.276, -6.1, -2646.400, -222.589, 200.000)
  1038. AddZone("Willowfield", 1970.620, -2179.250, -89.084, 2089.000, -1852.870, 110.916)
  1039. AddZone("Esplanade North", -1982.320, 1274.260, -4.5, -1524.240, 1358.900, 200.000)
  1040. AddZone("The High Roller", 1817.390, 1283.230, -89.084, 2027.390, 1469.230, 110.916)
  1041. AddZone("Ocean Docks", 2201.820, -2418.330, -89.084, 2324.000, -2095.000, 110.916)
  1042. AddZone("Last Dime Motel", 1823.080, 596.349, -89.084, 1997.220, 823.228, 110.916)
  1043. AddZone("Bayside Marina", -2353.170, 2275.790, 0.000, -2153.170, 2475.790, 200.000)
  1044. AddZone("King's", -2329.310, 458.411, -7.6, -1993.280, 578.396, 200.000)
  1045. AddZone("El Corona", 1692.620, -2179.250, -89.084, 1812.620, -1842.270, 110.916)
  1046. AddZone("Blackfield Chapel", 1375.600, 596.349, -89.084, 1558.090, 823.228, 110.916)
  1047. AddZone("The Pink Swan", 1817.390, 1083.230, -89.084, 2027.390, 1283.230, 110.916)
  1048. AddZone("Julius Thruway West", 1197.390, 1163.390, -89.084, 1236.630, 2243.230, 110.916)
  1049. AddZone("Los Flores", 2581.730, -1393.420, -89.084, 2747.740, -1135.040, 110.916)
  1050. AddZone("The Visage", 1817.390, 1863.230, -89.084, 2106.700, 2011.830, 110.916)
  1051. AddZone("Prickle Pine", 1938.800, 2624.230, -89.084, 2121.400, 2861.550, 110.916)
  1052. AddZone("Verona Beach", 851.449, -1804.210, -89.084, 1046.150, -1577.590, 110.916)
  1053. AddZone("Robada Intersection", -1119.010, 1178.930, -89.084, -862.025, 1351.450, 110.916)
  1054. AddZone("Linden Side", 2749.900, 943.235, -89.084, 2923.390, 1198.990, 110.916)
  1055. AddZone("Ocean Docks", 2703.580, -2302.330, -89.084, 2959.350, -2126.900, 110.916)
  1056. AddZone("Willowfield", 2324.000, -2059.230, -89.084, 2541.700, -1852.870, 110.916)
  1057. AddZone("King's", -2411.220, 265.243, -9.1, -1993.280, 373.539, 200.000)
  1058. AddZone("Commerce", 1323.900, -1842.270, -89.084, 1701.900, -1722.260, 110.916)
  1059. AddZone("Mulholland", 1269.130, -768.027, -89.084, 1414.070, -452.425, 110.916)
  1060. AddZone("Marina", 647.712, -1804.210, -89.084, 851.449, -1577.590, 110.916)
  1061. AddZone("Battery Point", -2741.070, 1268.410, -4.5, -2533.040, 1490.470, 200.000)
  1062. AddZone("The Four Dragons Casino", 1817.390, 863.232, -89.084, 2027.390, 1083.230, 110.916)
  1063. AddZone("Blackfield", 964.391, 1203.220, -89.084, 1197.390, 1403.220, 110.916)
  1064. AddZone("Julius Thruway North", 1534.560, 2433.230, -89.084, 1848.400, 2583.230, 110.916)
  1065. AddZone("Yellow Bell Gol Course", 1117.400, 2723.230, -89.084, 1457.460, 2863.230, 110.916)
  1066. AddZone("Idlewood", 1812.620, -1602.310, -89.084, 2124.660, -1449.670, 110.916)
  1067. AddZone("Redsands West", 1297.470, 2142.860, -89.084, 1777.390, 2243.230, 110.916)
  1068. AddZone("Doherty", -2270.040, -324.114, -1.2, -1794.920, -222.589, 200.000)
  1069. AddZone("Hilltop Farm", 967.383, -450.390, -3.0, 1176.780, -217.900, 200.000)
  1070. AddZone("Las Barrancas", -926.130, 1398.730, -3.0, -719.234, 1634.690, 200.000)
  1071. AddZone("Pirates in Men's Pants", 1817.390, 1469.230, -89.084, 2027.400, 1703.230, 110.916)
  1072. AddZone("City Hall", -2867.850, 277.411, -9.1, -2593.440, 458.411, 200.000)
  1073. AddZone("Avispa Country Club", -2646.400, -355.493, 0.000, -2270.040, -222.589, 200.000)
  1074. AddZone("The Strip", 2027.400, 863.229, -89.084, 2087.390, 1703.230, 110.916)
  1075. AddZone("Hashbury", -2593.440, -222.589, -1.0, -2411.220, 54.722, 200.000)
  1076. AddZone("Los Santos International", 1852.000, -2394.330, -89.084, 2089.000, -2179.250, 110.916)
  1077. AddZone("Whitewood Estates", 1098.310, 1726.220, -89.084, 1197.390, 2243.230, 110.916)
  1078. AddZone("Sherman Reservoir", -789.737, 1659.680, -89.084, -599.505, 1929.410, 110.916)
  1079. AddZone("El Corona", 1812.620, -2179.250, -89.084, 1970.620, -1852.870, 110.916)
  1080. AddZone("Downtown", -1700.010, 744.267, -6.1, -1580.010, 1176.520, 200.000)
  1081. AddZone("Foster Valley", -2178.690, -1250.970, 0.000, -1794.920, -1115.580, 200.000)
  1082. AddZone("Las Payasadas", -354.332, 2580.360, 2.0, -133.625, 2816.820, 200.000)
  1083. AddZone("Valle Ocultado", -936.668, 2611.440, 2.0, -715.961, 2847.900, 200.000)
  1084. AddZone("Blackfield Intersection", 1166.530, 795.010, -89.084, 1375.600, 1044.690, 110.916)
  1085. AddZone("Ganton", 2222.560, -1852.870, -89.084, 2632.830, -1722.330, 110.916)
  1086. AddZone("Easter Bay Airport", -1213.910, -730.118, 0.000, -1132.820, -50.096, 200.000)
  1087. AddZone("Redsands East", 1817.390, 2011.830, -89.084, 2106.700, 2202.760, 110.916)
  1088. AddZone("Esplanade East", -1499.890, 578.396, -79.615, -1339.890, 1274.260, 20.385)
  1089. AddZone("Caligula's Palace", 2087.390, 1543.230, -89.084, 2437.390, 1703.230, 110.916)
  1090. AddZone("Royal Casino", 2087.390, 1383.230, -89.084, 2437.390, 1543.230, 110.916)
  1091. AddZone("Richman", 72.648, -1235.070, -89.084, 321.356, -1008.150, 110.916)
  1092. AddZone("Starfish Casino", 2437.390, 1783.230, -89.084, 2685.160, 2012.180, 110.916)
  1093. AddZone("Mulholland", 1281.130, -452.425, -89.084, 1641.130, -290.913, 110.916)
  1094. AddZone("Downtown", -1982.320, 744.170, -6.1, -1871.720, 1274.260, 200.000)
  1095. AddZone("Hankypanky Point", 2576.920, 62.158, 0.000, 2759.250, 385.503, 200.000)
  1096. AddZone("K.A.C.C. Military Fuels", 2498.210, 2626.550, -89.084, 2749.900, 2861.550, 110.916)
  1097. AddZone("Harry Gold Parkway", 1777.390, 863.232, -89.084, 1817.390, 2342.830, 110.916)
  1098. AddZone("Bayside Tunnel", -2290.190, 2548.290, -89.084, -1950.190, 2723.290, 110.916)
  1099. AddZone("Ocean Docks", 2324.000, -2302.330, -89.084, 2703.580, -2145.100, 110.916)
  1100. AddZone("Richman", 321.356, -1044.070, -89.084, 647.557, -860.619, 110.916)
  1101. AddZone("Randolph Industrial Estate", 1558.090, 596.349, -89.084, 1823.080, 823.235, 110.916)
  1102. AddZone("East Beach", 2632.830, -1852.870, -89.084, 2959.350, -1668.130, 110.916)
  1103. AddZone("Flint Water", -314.426, -753.874, -89.084, -106.339, -463.073, 110.916)
  1104. AddZone("Blueberry", 19.607, -404.136, 3.8, 349.607, -220.137, 200.000)
  1105. AddZone("Linden Station", 2749.900, 1198.990, -89.084, 2923.390, 1548.990, 110.916)
  1106. AddZone("Glen Park", 1812.620, -1350.720, -89.084, 2056.860, -1100.820, 110.916)
  1107. AddZone("Downtown", -1993.280, 265.243, -9.1, -1794.920, 578.396, 200.000)
  1108. AddZone("Redsands West", 1377.390, 2243.230, -89.084, 1704.590, 2433.230, 110.916)
  1109. AddZone("Richman", 321.356, -1235.070, -89.084, 647.522, -1044.070, 110.916)
  1110. AddZone("Gant Bridge", -2741.450, 1659.680, -6.1, -2616.400, 2175.150, 200.000)
  1111. AddZone("Lil' Probe Inn", -90.218, 1286.850, -3.0, 153.859, 1554.120, 200.000)
  1112. AddZone("Flint Intersection", -187.700, -1596.760, -89.084, 17.063, -1276.600, 110.916)
  1113. AddZone("Las Colinas", 2281.450, -1135.040, -89.084, 2632.740, -945.035, 110.916)
  1114. AddZone("Sobell Rail Yards", 2749.900, 1548.990, -89.084, 2923.390, 1937.250, 110.916)
  1115. AddZone("The Emerald Isle", 2011.940, 2202.760, -89.084, 2237.400, 2508.230, 110.916)
  1116. AddZone("El Castillo del Diablo", -208.570, 2123.010, -7.6, 114.033, 2337.180, 200.000)
  1117. AddZone("Santa Flora", -2741.070, 458.411, -7.6, -2533.040, 793.411, 200.000)
  1118. AddZone("Playa del Seville", 2703.580, -2126.900, -89.084, 2959.350, -1852.870, 110.916)
  1119. AddZone("Market", 926.922, -1577.590, -89.084, 1370.850, -1416.250, 110.916)
  1120. AddZone("Queens", -2593.440, 54.722, 0.000, -2411.220, 458.411, 200.000)
  1121. AddZone("Pilson Intersection", 1098.390, 2243.230, -89.084, 1377.390, 2507.230, 110.916)
  1122. AddZone("Spinybed", 2121.400, 2663.170, -89.084, 2498.210, 2861.550, 110.916)
  1123. AddZone("Pilgrim", 2437.390, 1383.230, -89.084, 2624.400, 1783.230, 110.916)
  1124. AddZone("Blackfield", 964.391, 1403.220, -89.084, 1197.390, 1726.220, 110.916)
  1125. AddZone("'The Big Ear'", -410.020, 1403.340, -3.0, -137.969, 1681.230, 200.000)
  1126. AddZone("Dillimore", 580.794, -674.885, -9.5, 861.085, -404.790, 200.000)
  1127. AddZone("El Quebrados", -1645.230, 2498.520, 0.000, -1372.140, 2777.850, 200.000)
  1128. AddZone("Esplanade North", -2533.040, 1358.900, -4.5, -1996.660, 1501.210, 200.000)
  1129. AddZone("Easter Bay Airport", -1499.890, -50.096, -1.0, -1242.980, 249.904, 200.000)
  1130. AddZone("Fisher's Lagoon", 1916.990, -233.323, -100.000, 2131.720, 13.800, 200.000)
  1131. AddZone("Mulholland", 1414.070, -768.027, -89.084, 1667.610, -452.425, 110.916)
  1132. AddZone("East Beach", 2747.740, -1498.620, -89.084, 2959.350, -1120.040, 110.916)
  1133. AddZone("San Andreas Sound", 2450.390, 385.503, -100.000, 2759.250, 562.349, 200.000)
  1134. AddZone("Shady Creeks", -2030.120, -2174.890, -6.1, -1820.640, -1771.660, 200.000)
  1135. AddZone("Market", 1072.660, -1416.250, -89.084, 1370.850, -1130.850, 110.916)
  1136. AddZone("Rockshore West", 1997.220, 596.349, -89.084, 2377.390, 823.228, 110.916)
  1137. AddZone("Prickle Pine", 1534.560, 2583.230, -89.084, 1848.400, 2863.230, 110.916)
  1138. AddZone("Easter Basin", -1794.920, -50.096, -1.04, -1499.890, 249.904, 200.000)
  1139. AddZone("Leafy Hollow", -1166.970, -1856.030, 0.000, -815.624, -1602.070, 200.000)
  1140. AddZone("LVA Freight Depot", 1457.390, 863.229, -89.084, 1777.400, 1143.210, 110.916)
  1141. AddZone("Prickle Pine", 1117.400, 2507.230, -89.084, 1534.560, 2723.230, 110.916)
  1142. AddZone("Blueberry", 104.534, -220.137, 2.3, 349.607, 152.236, 200.000)
  1143. AddZone("El Castillo del Diablo", -464.515, 2217.680, 0.000, -208.570, 2580.360, 200.000)
  1144. AddZone("Downtown", -2078.670, 578.396, -7.6, -1499.890, 744.267, 200.000)
  1145. AddZone("Rockshore East", 2537.390, 676.549, -89.084, 2902.350, 943.235, 110.916)
  1146. AddZone("San Fierro Bay", -2616.400, 1501.210, -3.0, -1996.660, 1659.680, 200.000)
  1147. AddZone("Paradiso", -2741.070, 793.411, -6.1, -2533.040, 1268.410, 200.000)
  1148. AddZone("The Camel's Toe", 2087.390, 1203.230, -89.084, 2640.400, 1383.230, 110.916)
  1149. AddZone("Old Venturas Strip", 2162.390, 2012.180, -89.084, 2685.160, 2202.760, 110.916)
  1150. AddZone("Juniper Hill", -2533.040, 578.396, -7.6, -2274.170, 968.369, 200.000)
  1151. AddZone("Juniper Hollow", -2533.040, 968.369, -6.1, -2274.170, 1358.900, 200.000)
  1152. AddZone("Roca Escalante", 2237.400, 2202.760, -89.084, 2536.430, 2542.550, 110.916)
  1153. AddZone("Julius Thruway East", 2685.160, 1055.960, -89.084, 2749.900, 2626.550, 110.916)
  1154. AddZone("Verona Beach", 647.712, -2173.290, -89.084, 930.221, -1804.210, 110.916)
  1155. AddZone("Foster Valley", -2178.690, -599.884, -1.2, -1794.920, -324.114, 200.000)
  1156. AddZone("Arco del Oeste", -901.129, 2221.860, 0.000, -592.090, 2571.970, 200.000)
  1157. AddZone("Fallen Tree", -792.254, -698.555, -5.3, -452.404, -380.043, 200.000)
  1158. AddZone("The Farm", -1209.670, -1317.100, 114.981, -908.161, -787.391, 251.981)
  1159. AddZone("The Sherman Dam", -968.772, 1929.410, -3.0, -481.126, 2155.260, 200.000)
  1160. AddZone("Esplanade North", -1996.660, 1358.900, -4.5, -1524.240, 1592.510, 200.000)
  1161. AddZone("Financial", -1871.720, 744.170, -6.1, -1701.300, 1176.420, 300.000)
  1162. AddZone("Garcia", -2411.220, -222.589, -1.14, -2173.040, 265.243, 200.000)
  1163. AddZone("Montgomery", 1119.510, 119.526, -3.0, 1451.400, 493.323, 200.000)
  1164. AddZone("Creek", 2749.900, 1937.250, -89.084, 2921.620, 2669.790, 110.916)
  1165. AddZone("Los Santos International", 1249.620, -2394.330, -89.084, 1852.000, -2179.250, 110.916)
  1166. AddZone("Santa Maria Beach", 72.648, -2173.290, -89.084, 342.648, -1684.650, 110.916)
  1167. AddZone("Mulholland Intersection", 1463.900, -1150.870, -89.084, 1812.620, -768.027, 110.916)
  1168. AddZone("Angel Pine", -2324.940, -2584.290, -6.1, -1964.220, -2212.110, 200.000)
  1169. AddZone("Verdant Meadows", 37.032, 2337.180, -3.0, 435.988, 2677.900, 200.000)
  1170. AddZone("Octane Springs", 338.658, 1228.510, 0.000, 664.308, 1655.050, 200.000)
  1171. AddZone("Come-A-Lot", 2087.390, 943.235, -89.084, 2623.180, 1203.230, 110.916)
  1172. AddZone("Redsands West", 1236.630, 1883.110, -89.084, 1777.390, 2142.860, 110.916)
  1173. AddZone("Santa Maria Beach", 342.648, -2173.290, -89.084, 647.712, -1684.650, 110.916)
  1174. AddZone("Verdant Bluffs", 1249.620, -2179.250, -89.084, 1692.620, -1842.270, 110.916)
  1175. AddZone("Las Venturas Airport", 1236.630, 1203.280, -89.084, 1457.370, 1883.110, 110.916)
  1176. AddZone("Flint Range", -594.191, -1648.550, 0.000, -187.700, -1276.600, 200.000)
  1177. AddZone("Verdant Bluffs", 930.221, -2488.420, -89.084, 1249.620, -2006.780, 110.916)
  1178. AddZone("Palomino Creek", 2160.220, -149.004, 0.000, 2576.920, 228.322, 200.000)
  1179. AddZone("Ocean Docks", 2373.770, -2697.090, -89.084, 2809.220, -2330.460, 110.916)
  1180. AddZone("Easter Bay Airport", -1213.910, -50.096, -4.5, -947.980, 578.396, 200.000)
  1181. AddZone("Whitewood Estates", 883.308, 1726.220, -89.084, 1098.310, 2507.230, 110.916)
  1182. AddZone("Calton Heights", -2274.170, 744.170, -6.1, -1982.320, 1358.900, 200.000)
  1183. AddZone("Easter Basin", -1794.920, 249.904, -9.1, -1242.980, 578.396, 200.000)
  1184. AddZone("Los Santos Inlet", -321.744, -2224.430, -89.084, 44.615, -1724.430, 110.916)
  1185. AddZone("Doherty", -2173.040, -222.589, -1.0, -1794.920, 265.243, 200.000)
  1186. AddZone("Mount Chiliad", -2178.690, -2189.910, -47.917, -2030.120, -1771.660, 576.083)
  1187. AddZone("Fort Carson", -376.233, 826.326, -3.0, 123.717, 1220.440, 200.000)
  1188. AddZone("Foster Valley", -2178.690, -1115.580, 0.000, -1794.920, -599.884, 200.000)
  1189. AddZone("Ocean Flats", -2994.490, -222.589, -1.0, -2593.440, 277.411, 200.000)
  1190. AddZone("Fern Ridge", 508.189, -139.259, 0.000, 1306.660, 119.526, 200.000)
  1191. AddZone("Bayside", -2741.070, 2175.150, 0.000, -2353.170, 2722.790, 200.000)
  1192. AddZone("Las Venturas Airport", 1457.370, 1203.280, -89.084, 1777.390, 1883.110, 110.916)
  1193. AddZone("Blueberry Acres", -319.676, -220.137, 0.000, 104.534, 293.324, 200.000)
  1194. AddZone("Palisades", -2994.490, 458.411, -6.1, -2741.070, 1339.610, 200.000)
  1195. AddZone("North Rock", 2285.370, -768.027, 0.000, 2770.590, -269.740, 200.000)
  1196. AddZone("Hunter Quarry", 337.244, 710.840, -115.239, 860.554, 1031.710, 203.761)
  1197. AddZone("Los Santos International", 1382.730, -2730.880, -89.084, 2201.820, -2394.330, 110.916)
  1198. AddZone("Missionary Hill", -2994.490, -811.276, 0.000, -2178.690, -430.276, 200.000)
  1199. AddZone("San Fierro Bay", -2616.400, 1659.680, -3.0, -1996.660, 2175.150, 200.000)
  1200. AddZone("Restricted Area", -91.586, 1655.050, -50.000, 421.234, 2123.010, 250.000)
  1201. AddZone("Mount Chiliad", -2997.470, -1115.580, -47.917, -2178.690, -971.913, 576.083)
  1202. AddZone("Mount Chiliad", -2178.690, -1771.660, -47.917, -1936.120, -1250.970, 576.083)
  1203. AddZone("Easter Bay Airport", -1794.920, -730.118, -3.0, -1213.910, -50.096, 200.000)
  1204. AddZone("The Panopticon", -947.980, -304.320, -1.1, -319.676, 327.071, 200.000)
  1205. AddZone("Shady Creeks", -1820.640, -2643.680, -8.0, -1226.780, -1771.660, 200.000)
  1206. AddZone("Back o Beyond", -1166.970, -2641.190, 0.000, -321.744, -1856.030, 200.000)
  1207. AddZone("Mount Chiliad", -2994.490, -2189.910, -47.917, -2178.690, -1115.580, 576.083)
  1208. AddZone("Tierra Robada", -1213.910, 596.349, -242.990, -480.539, 1659.680, 900.000)
  1209. AddZone("Flint County", -1213.910, -2892.970, -242.990, 44.615, -768.027, 900.000)
  1210. AddZone("Whetstone", -2997.470, -2892.970, -242.990, -1213.910, -1115.580, 900.000)
  1211. AddZone("Bone County", -480.539, 596.349, -242.990, 869.461, 2993.870, 900.000)
  1212. AddZone("Tierra Robada", -2997.470, 1659.680, -242.990, -480.539, 2993.870, 900.000)
  1213. AddZone("San Fierro", -2997.470, -1115.580, -242.990, -1213.910, 1659.680, 900.000)
  1214. AddZone("Las Venturas", 869.461, 596.349, -242.990, 2997.060, 2993.870, 900.000)
  1215. AddZone("Red County", -1213.910, -768.027, -242.990, 2997.060, 596.349, 900.000)
  1216. AddZone("Los Santos", 44.615, -2892.970, -242.990, 2997.060, -768.027, 900.000)
  1217. }
  1218. AddZone(sName, x1, y1, z1, x2, y2, z2) {
  1219. global
  1220. zone%nZone%_name := sName
  1221. zone%nZone%_x1 := x1
  1222. zone%nZone%_y1 := y1
  1223. zone%nZone%_z1 := z1
  1224. zone%nZone%_x2 := x2
  1225. zone%nZone%_y2 := y2
  1226. zone%nZone%_z2 := z2
  1227. nZone := nZone + 1
  1228. }
  1229. AddCity(sName, x1, y1, z1, x2, y2, z2) {
  1230. global
  1231. city%nCity%_name := sName
  1232. city%nCity%_x1 := x1
  1233. city%nCity%_y1 := y1
  1234. city%nCity%_z1 := z1
  1235. city%nCity%_x2 := x2
  1236. city%nCity%_y2 := y2
  1237. city%nCity%_z2 := z2
  1238. nCity := nCity + 1
  1239. }
  1240. checkHandles() {
  1241. if(iRefreshHandles+500>A_TickCount)
  1242. return true
  1243. iRefreshHandles:=A_TickCount
  1244. if(!refreshGTA() || !refreshSAMP() || !refreshMemory()) {
  1245. return false
  1246. } else {
  1247. return true
  1248. }
  1249. return true
  1250. }
  1251. refreshGTA() {
  1252. newPID := getPID("GTA:SA:MP")
  1253. if(!newPID) {
  1254. if(hGTA) {
  1255. virtualFreeEx(hGTA, pMemory, 0, 0x8000)
  1256. closeProcess(hGTA)
  1257. hGTA := 0x0
  1258. }
  1259. dwGTAPID := 0
  1260. hGTA := 0x0
  1261. dwSAMP := 0x0
  1262. pMemory := 0x0
  1263. return false
  1264. }
  1265. if(!hGTA || (dwGTAPID != newPID)) {
  1266. hGTA := openProcess(newPID)
  1267. if(ErrorLevel) {
  1268. dwGTAPID := 0
  1269. hGTA := 0x0
  1270. dwSAMP := 0x0
  1271. pMemory := 0x0
  1272. return false
  1273. }
  1274. dwGTAPID := newPID
  1275. dwSAMP := 0x0
  1276. pMemory := 0x0
  1277. return true
  1278. }
  1279. return true
  1280. }
  1281. refreshSAMP() {
  1282. if(dwSAMP)
  1283. return true
  1284. dwSAMP := getModuleBaseAddress("samp.dll", hGTA)
  1285. if(!dwSAMP)
  1286. return false
  1287. return true
  1288. }
  1289. refreshMemory() {
  1290. if(!pMemory) {
  1291. pMemory := virtualAllocEx(hGTA, 4096, 0x1000 | 0x2000, 0x40)
  1292. if(ErrorLevel) {
  1293. pMemory := 0x0
  1294. return false
  1295. }
  1296. pParam1 := pMemory
  1297. pParam2 := pMemory + 1024
  1298. pParam3 := pMemory + 2048
  1299. pInjectFunc := pMemory + 3072
  1300. }
  1301. return true
  1302. }
  1303. getPID(szWindow) {
  1304. local dwPID := 0
  1305. WinGet, dwPID, PID, %szWindow%
  1306. return dwPID
  1307. }
  1308. openProcess(dwPID, dwRights = 0x1F0FFF) {
  1309. hProcess := DllCall("OpenProcess"
  1310. , "UInt", dwRights
  1311. , "int", 0
  1312. , "UInt", dwPID
  1313. , "Uint")
  1314. if(hProcess == 0) {
  1315. ErrorLevel := ERROR_OPEN_PROCESS
  1316. return 0
  1317. }
  1318. ErrorLevel := ERROR_OK
  1319. return hProcess
  1320. }
  1321. closeProcess(hProcess) {
  1322. if(hProcess == 0) {
  1323. ErrorLevel := ERROR_INVALID_HANDLE
  1324. return 0
  1325. }
  1326. dwRet := DllCall( "CloseHandle"
  1327. , "Uint", hProcess
  1328. , "UInt")
  1329. ErrorLevel := ERROR_OK
  1330. }
  1331. getModuleBaseAddress(sModule, hProcess) {
  1332. if(!sModule) {
  1333. ErrorLevel := ERROR_MODULE_NOT_FOUND
  1334. return 0
  1335. }
  1336. if(!hProcess) {
  1337. ErrorLevel := ERROR_INVALID_HANDLE
  1338. return 0
  1339. }
  1340. dwSize = 1024*4
  1341. VarSetCapacity(hMods, dwSize)
  1342. VarSetCapacity(cbNeeded, 4)
  1343. dwRet := DllCall( "Psapi.dll\EnumProcessModules"
  1344. , "UInt", hProcess
  1345. , "UInt", &hMods
  1346. , "UInt", dwSize
  1347. , "UInt*", cbNeeded
  1348. , "UInt")
  1349. if(dwRet == 0) {
  1350. ErrorLevel := ERROR_ENUM_PROCESS_MODULES
  1351. return 0
  1352. }
  1353. dwMods := cbNeeded / 4
  1354. i := 0
  1355. VarSetCapacity(hModule, 4)
  1356. VarSetCapacity(sCurModule, 260)
  1357. while(i < dwMods) {
  1358. hModule := NumGet(hMods, i*4)
  1359. DllCall("Psapi.dll\GetModuleFileNameEx"
  1360. , "UInt", hProcess
  1361. , "UInt", hModule
  1362. , "Str", sCurModule
  1363. , "UInt", 260)
  1364. SplitPath, sCurModule, sFilename
  1365. if(sModule == sFilename) {
  1366. ErrorLevel := ERROR_OK
  1367. return hModule
  1368. }
  1369. i := i + 1
  1370. }
  1371. ErrorLevel := ERROR_MODULE_NOT_FOUND
  1372. return 0
  1373. }
  1374. readString(hProcess, dwAddress, dwLen) {
  1375. if(!hProcess) {
  1376. ErrorLevel := ERROR_INVALID_HANDLE
  1377. return 0
  1378. }
  1379. VarSetCapacity(sRead, dwLen)
  1380. dwRet := DllCall( "ReadProcessMemory"
  1381. , "UInt", hProcess
  1382. , "UInt", dwAddress
  1383. , "Str", sRead
  1384. , "UInt", dwLen
  1385. , "UInt*", 0
  1386. , "UInt")
  1387. if(dwRet == 0) {
  1388. ErrorLevel := ERROR_READ_MEMORY
  1389. return 0
  1390. }
  1391. ErrorLevel := ERROR_OK
  1392. if A_IsUnicode
  1393. return __ansiToUnicode(sRead)
  1394. return sRead
  1395. }
  1396. readFloat(hProcess, dwAddress) {
  1397. if(!hProcess) {
  1398. ErrorLevel := ERROR_INVALID_HANDLE
  1399. return 0
  1400. }
  1401. VarSetCapacity(dwRead, 4)
  1402. dwRet := DllCall( "ReadProcessMemory"
  1403. , "UInt", hProcess
  1404. , "UInt", dwAddress
  1405. , "Str", dwRead
  1406. , "UInt", 4
  1407. , "UInt*", 0
  1408. , "UInt")
  1409. if(dwRet == 0) {
  1410. ErrorLevel := ERROR_READ_MEMORY
  1411. return 0
  1412. }
  1413. ErrorLevel := ERROR_OK
  1414. return NumGet(dwRead, 0, "Float")
  1415. }
  1416. readDWORD(hProcess, dwAddress) {
  1417. if(!hProcess) {
  1418. ErrorLevel := ERROR_INVALID_HANDLE
  1419. return 0
  1420. }
  1421. VarSetCapacity(dwRead, 4)
  1422. dwRet := DllCall( "ReadProcessMemory"
  1423. , "UInt", hProcess
  1424. , "UInt", dwAddress
  1425. , "Str", dwRead
  1426. , "UInt", 4
  1427. , "UInt*", 0)
  1428. if(dwRet == 0) {
  1429. ErrorLevel := ERROR_READ_MEMORY
  1430. return 0
  1431. }
  1432. ErrorLevel := ERROR_OK
  1433. return NumGet(dwRead, 0, "UInt")
  1434. }
  1435. readMem(hProcess, dwAddress, dwLen=4, type="UInt") {
  1436. if(!hProcess) {
  1437. ErrorLevel := ERROR_INVALID_HANDLE
  1438. return 0
  1439. }
  1440. VarSetCapacity(dwRead, dwLen)
  1441. dwRet := DllCall( "ReadProcessMemory"
  1442. , "UInt", hProcess
  1443. , "UInt", dwAddress
  1444. , "Str", dwRead
  1445. , "UInt", dwLen
  1446. , "UInt*", 0)
  1447. if(dwRet == 0) {
  1448. ErrorLevel := ERROR_READ_MEMORY
  1449. return 0
  1450. }
  1451. ErrorLevel := ERROR_OK
  1452. return NumGet(dwRead, 0, type)
  1453. }
  1454. writeString(hProcess, dwAddress, wString) {
  1455. if(!hProcess) {
  1456. ErrorLevel := ERROR_INVALID_HANDLE
  1457. return false
  1458. }
  1459. sString := wString
  1460. if A_IsUnicode
  1461. sString := __unicodeToAnsi(wString)
  1462. dwRet := DllCall( "WriteProcessMemory"
  1463. , "UInt", hProcess
  1464. , "UInt", dwAddress
  1465. , "Str", sString
  1466. , "UInt", StrLen(wString) + 1
  1467. , "UInt", 0
  1468. , "UInt")
  1469. if(dwRet == 0) {
  1470. ErrorLEvel := ERROR_WRITE_MEMORY
  1471. return false
  1472. }
  1473. ErrorLevel := ERROR_OK
  1474. return true
  1475. }
  1476. writeRaw(hProcess, dwAddress, pBuffer, dwLen) {
  1477. if(!hProcess) {
  1478. ErrorLevel := ERROR_INVALID_HANDLE
  1479. return false
  1480. }
  1481. dwRet := DllCall( "WriteProcessMemory"
  1482. , "UInt", hProcess
  1483. , "UInt", dwAddress
  1484. , "UInt", pBuffer
  1485. , "UInt", dwLen
  1486. , "UInt", 0
  1487. , "UInt")
  1488. if(dwRet == 0) {
  1489. ErrorLEvel := ERROR_WRITE_MEMORY
  1490. return false
  1491. }
  1492. ErrorLevel := ERROR_OK
  1493. return true
  1494. }
  1495. callWithParams(hProcess, dwFunc, aParams, bCleanupStack = true) {
  1496. if(!hProcess) {
  1497. ErrorLevel := ERROR_INVALID_HANDLE
  1498. return false
  1499. }
  1500. validParams := 0
  1501. i := aParams.MaxIndex()
  1502. dwLen := i * 5 + 5 + 1
  1503. if(bCleanupStack)
  1504. dwLen += 3
  1505. VarSetCapacity(injectData, i * 5 + 5 + 3 + 1, 0)
  1506. i_ := 1
  1507. while(i > 0) {
  1508. if(aParams[i][1] != "") {
  1509. dwMemAddress := 0x0
  1510. if(aParams[i][1] == "p") {
  1511. dwMemAddress := aParams[i][2]
  1512. } else if(aParams[i][1] == "s") {
  1513. if(i_>3)
  1514. return false
  1515. dwMemAddress := pParam%i_%
  1516. writeString(hProcess, dwMemAddress, aParams[i][2])
  1517. if(ErrorLevel)
  1518. return false
  1519. i_ += 1
  1520. } else if(aParams[i][1] == "i") {
  1521. dwMemAddress := aParams[i][2]
  1522. } else {
  1523. return false
  1524. }
  1525. NumPut(0x68, injectData, validParams * 5, "UChar")
  1526. NumPut(dwMemAddress, injectData, validParams * 5 + 1, "UInt")
  1527. validParams += 1
  1528. }
  1529. i -= 1
  1530. }
  1531. offset := dwFunc - ( pInjectFunc + validParams * 5 + 5 )
  1532. NumPut(0xE8, injectData, validParams * 5, "UChar")
  1533. NumPut(offset, injectData, validParams * 5 + 1, "Int")
  1534. if(bCleanupStack) {
  1535. NumPut(0xC483, injectData, validParams * 5 + 5, "UShort")
  1536. NumPut(validParams*4, injectData, validParams * 5 + 7, "UChar")
  1537. NumPut(0xC3, injectData, validParams * 5 + 8, "UChar")
  1538. } else {
  1539. NumPut(0xC3, injectData, validParams * 5 + 5, "UChar")
  1540. }
  1541. writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
  1542. if(ErrorLevel)
  1543. return false
  1544. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  1545. if(ErrorLevel)
  1546. return false
  1547. waitForSingleObject(hThread, 0xFFFFFFFF)
  1548. closeProcess(hThread)
  1549. return true
  1550. }
  1551. virtualAllocEx(hProcess, dwSize, flAllocationType, flProtect) {
  1552. if(!hProcess) {
  1553. ErrorLevel := ERROR_INVALID_HANDLE
  1554. return 0
  1555. }
  1556. dwRet := DllCall( "VirtualAllocEx"
  1557. , "UInt", hProcess
  1558. , "UInt", 0
  1559. , "UInt", dwSize
  1560. , "UInt", flAllocationType
  1561. , "UInt", flProtect
  1562. , "UInt")
  1563. if(dwRet == 0) {
  1564. ErrorLEvel := ERROR_ALLOC_MEMORY
  1565. return 0
  1566. }
  1567. ErrorLevel := ERROR_OK
  1568. return dwRet
  1569. }
  1570. virtualFreeEx(hProcess, lpAddress, dwSize, dwFreeType) {
  1571. if(!hProcess) {
  1572. ErrorLevel := ERROR_INVALID_HANDLE
  1573. return 0
  1574. }
  1575. dwRet := DllCall( "VirtualFreeEx"
  1576. , "UInt", hProcess
  1577. , "UInt", lpAddress
  1578. , "UInt", dwSize
  1579. , "UInt", dwFreeType
  1580. , "UInt")
  1581. if(dwRet == 0) {
  1582. ErrorLEvel := ERROR_FREE_MEMORY
  1583. return 0
  1584. }
  1585. ErrorLevel := ERROR_OK
  1586. return dwRet
  1587. }
  1588. createRemoteThread(hProcess, lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags, lpThreadId) {
  1589. if(!hProcess) {
  1590. ErrorLevel := ERROR_INVALID_HANDLE
  1591. return 0
  1592. }
  1593. dwRet := DllCall( "CreateRemoteThread"
  1594. , "UInt", hProcess
  1595. , "UInt", lpThreadAttributes
  1596. , "UInt", dwStackSize
  1597. , "UInt", lpStartAddress
  1598. , "UInt", lpParameter
  1599. , "UInt", dwCreationFlags
  1600. , "UInt", lpThreadId
  1601. , "UInt")
  1602. if(dwRet == 0) {
  1603. ErrorLEvel := ERROR_ALLOC_MEMORY
  1604. return 0
  1605. }
  1606. ErrorLevel := ERROR_OK
  1607. return dwRet
  1608. }
  1609. waitForSingleObject(hThread, dwMilliseconds) {
  1610. if(!hThread) {
  1611. ErrorLevel := ERROR_INVALID_HANDLE
  1612. return 0
  1613. }
  1614. dwRet := DllCall( "WaitForSingleObject"
  1615. , "UInt", hThread
  1616. , "UInt", dwMilliseconds
  1617. , "UInt")
  1618. if(dwRet == 0xFFFFFFFF) {
  1619. ErrorLEvel := ERROR_WAIT_FOR_OBJECT
  1620. return 0
  1621. }
  1622. ErrorLevel := ERROR_OK
  1623. return dwRet
  1624. }
  1625. __ansiToUnicode(sString, nLen = 0) {
  1626. If !nLen
  1627. {
  1628. nLen := DllCall("MultiByteToWideChar"
  1629. , "Uint", 0
  1630. , "Uint", 0
  1631. , "Uint", &sString
  1632. , "int", -1
  1633. , "Uint", 0
  1634. , "int", 0)
  1635. }
  1636. VarSetCapacity(wString, nLen * 2)
  1637. DllCall("MultiByteToWideChar"
  1638. , "Uint", 0
  1639. , "Uint", 0
  1640. , "Uint", &sString
  1641. , "int", -1
  1642. , "Uint", &wString
  1643. , "int", nLen)
  1644. return wString
  1645. }
  1646. __unicodeToAnsi(wString, nLen = 0) {
  1647. pString := wString + 1 > 65536 ? wString : &wString
  1648. If !nLen
  1649. {
  1650. nLen := DllCall("WideCharToMultiByte"
  1651. , "Uint", 0
  1652. , "Uint", 0
  1653. , "Uint", pString
  1654. , "int", -1
  1655. , "Uint", 0
  1656. , "int", 0
  1657. , "Uint", 0
  1658. , "Uint", 0)
  1659. }
  1660. VarSetCapacity(sString, nLen)
  1661. DllCall("WideCharToMultiByte"
  1662. , "Uint", 0
  1663. , "Uint", 0
  1664. , "Uint", pString
  1665. , "int", -1
  1666. , "str", sString
  1667. , "int", nLen
  1668. , "Uint", 0
  1669. , "Uint", 0)
  1670. return sString
  1671. }
  1672. Ping(strHost)
  1673. {
  1674. Loop 4
  1675. bRet := ComObjGet("winmgmts:").Get("Win32_PingStatus.address='" . strHost . "'").StatusCode = 0
  1676. until bRet
  1677. return bRet
  1678. }
  1679. #NoEnv
  1680. #Persistent
  1681. url_script := "http://" . server . "/"
  1682. url_version := "http://" . server . "/version.txt"
  1683. last_version := GetInternetFile(url_version)
  1684. URLDownloadToFile, http://%server%/tag.ini, %a_temp%/tag.ini
  1685. IniRead, tag, %a_temp%/tag.ini, tag, tag
  1686. IniRead, warn, %a_temp%/tag.ini, tag, warn
  1687. RegRead, auload, HKEY_CURRENT_USER, SoftWare\SAMP, FAMchatAuto
  1688. RegRead, firc, HKEY_CURRENT_USER, SoftWare\SAMP, FAMchatUse
  1689. if auload = 1
  1690. {
  1691. #NoTrayIcon
  1692. if firc != 1
  1693. {
  1694. Text := "{A52A2A}[95 процентов] {F0FFF0}Просим Вас не переносить скрипт из директории, в которой он сейчас."
  1695. addMessageToChatWindow(text)
  1696. Text := "{A52A2A}[100 процентов] {F0FFF0}Ура! Автозагрузка установлена :)"
  1697. addMessageToChatWindow(text)
  1698. RegWrite, REG_SZ, HKEY_CURRENT_USER, Software\SAMP ,FAMchatUse , 1
  1699. }
  1700. }
  1701. RegRead, firc, HKEY_CURRENT_USER, SoftWare\SAMP, FAMchatUse
  1702. if firc != 1
  1703. {
  1704. RegWrite, REG_SZ, HKEY_CURRENT_USER, Software\SAMP ,FAMchatUse , 1
  1705. RegWrite, REG_SZ, HKEY_CURRENT_USER, Software\SAMP ,FAMchatColor,{F0FFF0}
  1706. }
  1707. RegRead, colour, HKEY_CURRENT_USER, SoftWare\SAMP, FAMchatColor
  1708. tag = %tag% %colour%
  1709. warn = %warn% %colour%
  1710. sleep, 200
  1711. if !Ping(server)
  1712. {
  1713. Text := "{A52A2A}[FAMChat] {F0FFF0}Ошибка подключения к серверу! Отключение скрипта."
  1714. addMessageToChatWindow(text)
  1715. exitapp
  1716. }
  1717. else
  1718. {
  1719. if (build_version < last_version)
  1720. {
  1721. Text := "{A52A2A}[FAMChat] {F0FFF0}Обнаружена новая версия скрипта! Переадресация на скачивание..."
  1722. addMessageToChatWindow(text)
  1723. sleep, 3000
  1724. Run, %url_script%
  1725. ExitApp
  1726. }
  1727. Text := "" . tag . "Скрипт успешно подключен к серверу. FAMchat v" . script_version . " by ZeusGang."
  1728. addMessageToChatWindow(text)
  1729. sleep, 1000
  1730. ID := getID()
  1731. Name := getUsername()
  1732. if (ID = -1)
  1733. {
  1734. RegRead, Name, HKEY_CURRENT_USER, SoftWare\SAMP, PlayerName
  1735. ID := "X"
  1736. }
  1737. strComputer := "."
  1738. objWMIService := ComObjGet("winmgmts:{impersonationLevel=impersonate}!\\" . strComputer . "\root\cimv2")
  1739. colSettings := objWMIService.ExecQuery("Select * from Win32_OperatingSystem")._NewEnum
  1740. While colSettings[objOSItem]
  1741. {
  1742. Key := objOSItem.SerialNumber
  1743. }
  1744. URLDownloadToFile, http://%server%/key.txt, %a_temp%/key.txt
  1745. fileread, read, %a_temp%/key.txt
  1746. if read contains %Key%
  1747. {
  1748. On := 1
  1749. afkuser := 0
  1750. FormatTime, TimeString, R
  1751. URLDownloadToFile, http://%server%/ahk.php?Text=%name%[%ID%] вошел в чат семьи,%a_temp%/s.php
  1752. URLDownloadToFile, http://%server%/getonline.php?Text=%name%[%ID%][%TimeString%],%a_temp%/3s.php
  1753. goto, update
  1754. UrlDownloadToFile, http://%server%/file.txt, %a_temp%/file.txt
  1755. Loop, read, %a_temp%/file.txt
  1756. time := A_LoopReadLine
  1757. }
  1758. else
  1759. {
  1760. Text := "" . warn . "Вам не выдан доступ в семью. Свяжитесь с лидером!"
  1761. addMessageToChatWindow(text)
  1762. On := 0
  1763. }
  1764. }
  1765. Return
  1766. update:
  1767. if klav != F6
  1768. {
  1769. if (isInChat()) = 0
  1770. {
  1771. dwAddress := dwSAMP + 0x12D8F8
  1772. chatInput := readString(hGTA, dwAddress, 256)
  1773. if ChatInput != Chatik
  1774. {
  1775. if RegExMatch(chatInput, "i)/x (.*)", p)
  1776. {
  1777. Chatik := % ChatInput
  1778. NAME := GetUserName()
  1779. ID := getID()
  1780. message := "" . NAME . "[" . ID . "]: " . p1 . ""
  1781. if message != % time
  1782. {
  1783. URLDownloadToFile, http://%server%/ahk.php?Text=%message%,%a_temp%/s.php
  1784. }
  1785. klav = F6
  1786. }
  1787. }
  1788. }
  1789. }
  1790. UrlDownloadToFile, http://%server%/file.txt, %a_temp%/file.txt
  1791. Loop, read, %a_temp%/file.txt
  1792. last_line := A_LoopReadLine
  1793. if (last_line != time)
  1794. {
  1795. Loop, read, %a_temp%/file.txt
  1796. time := % A_LoopReadLine
  1797. Text23 := "" . tag . "" . last_line . ""
  1798. addMessageToChatWindow(text23)
  1799. }
  1800. if afkuser = 0
  1801. {
  1802. IfWinNotActive, GTA:SA:MP
  1803. {
  1804. NAME := GetUserName()
  1805. ID := getID()
  1806. URLDownloadToFile, http://%server%/afk.php?Text=%NAME%[%ID%] | В AFK,%a_temp%/33s.php
  1807. afkuser := 1
  1808. }
  1809. }
  1810. else
  1811. {
  1812. IfWinActive, GTA:SA:MP
  1813. {
  1814. NAME := GetUserName()
  1815. ID := getID()
  1816. URLDownloadToFile, http://%server%/afk.php?Text=%NAME%[%ID%] | ИЗ AFK,%a_temp%/33s.php
  1817. afkuser := 0
  1818. }
  1819. }
  1820. goto, update
  1821. $~F6::
  1822. Klav = F6
  1823. Return
  1824. test:
  1825. showDialog("1", "{FFFAFA}Выберите пункт", "{FFFAFA}Напишите в окошко номер пункта и нажмите Enter:`n1. Информация о семье`n2. Список членов семьи(only leaders)`n3. Онлайн семьи`n4. Приостановить чат семьи`n5. Выключить скрипт`n6. Отмена`n7. AFK-лист", "Нажмите на Enter")
  1826. input, text2, V, {enter}
  1827. if text2 = 1
  1828. {
  1829. famelist := GetInternetFile("http://" . server . "/allfam.php")
  1830. showDialog("0", "{FFFAFA}Информация о семье", "{FFFAFA}`n`nСемья " . tag . "{FFFAFA}`n`nСостав семьи: " . famelist . "`nОнлайн семьи: -`nВерсия скрипта: " . script_version . "`n`n`nСкрипт разработан: ZeusGang`nСпасибо за использование!", "Закрыть")
  1831. }
  1832. else if text2 = 2
  1833. {
  1834. famlist := GetInternetFile("http://" . server . "/key.txt")
  1835. showDialog("2", "{FFFAFA}Список ключей", "{FFFAFA}" . famlist . "", "Закрыть")
  1836. }
  1837. else if text2 = 3
  1838. {
  1839. famonllist := GetInternetFile("http://" . server . "/getonlineu.php")
  1840. showDialog("2", "{FFFAFA}Онлайн семьи", "{FFEBCD}Никнейм пользователя[ID][Время пользователя] | Время по МСК`n{FFFAFA}" . famonllist . "", "Закрыть")
  1841. }
  1842. else if text2 = 4
  1843. {
  1844. NAME := GetUserName()
  1845. ID := getID()
  1846. URLDownloadToFile, http://%server%/ahk.php?Text=%name%[%ID%] выключил чат. Он не видит ваши сообщения.,%a_temp%/s5.php
  1847. Text := "" . tag . "Чат выключен. Для включения нажмите F2."
  1848. addMessageToChatWindow(Text)
  1849. pass := "1"
  1850. pause
  1851. }
  1852. else if text2 = 5
  1853. {
  1854. Text := "" . tag . "Скрипт отключен."
  1855. addMessageToChatWindow(Text)
  1856. ExitApp
  1857. }
  1858. else if text2 = 6
  1859. {
  1860. Text := "" . tag . "Действие отменено!"
  1861. addMessageToChatWindow(Text)
  1862. }
  1863. else if text2 = 7
  1864. {
  1865. afklist := GetInternetFile("http://" . server . "/afku.php")
  1866. showDialog("2", "{FFFAFA}AFK-list", "{FFEBCD}Никнейм пользователя[ID] | Статус | Время по МСК`n{FFFAFA}" . afklist . "", "Закрыть")
  1867. }
  1868. else
  1869. {
  1870. Text := "" . warn . "Такого пункта не существует."
  1871. addMessageToChatWindow(Text)
  1872. }
  1873. return
  1874. F2::
  1875. if pass = 1
  1876. {
  1877. NAME := GetUserName()
  1878. ID := getID()
  1879. URLDownloadToFile, http://%server%/ahk.php?Text=%name%[%ID%] вернулся в чат. Он снова видит ваши сообщения.,%a_temp%/s5.php
  1880. Pause
  1881. pass := "0"
  1882. Text := "" . tag . "Чат включен."
  1883. addMessageToChatWindow(Text)
  1884. }
  1885. Return
  1886. $~Enter::
  1887. {
  1888. if (isInChat()) != 0
  1889. {
  1890. Klav = Enter
  1891. }
  1892. sleep, 30
  1893. if (isInChat())
  1894. {
  1895. sleep 170
  1896. dwAddress := dwSAMP + 0x12D8F8
  1897. chatInput := readString(hGTA, dwAddress, 256)
  1898. if chatInput contains /famlead
  1899. {
  1900. if (On = 1)
  1901. {
  1902. URLDownloadToFile, http://%server%/keyforlead.txt, %a_temp%/lead.txt
  1903. fileread, read, %a_temp%/lead.txt
  1904. if read contains %Key%
  1905. {
  1906. RegExMatch(chatInput, "/famlead (.*)", p)
  1907. if InStr(p1, "mq")
  1908. {
  1909. Text := "" . warn . "Сообщение отправлено не будет!"
  1910. addMessageToChatWindow(text)
  1911. }
  1912. else
  1913. {
  1914. ID := getID()
  1915. URLDownloadToFile, http://%server%/ahk.php?Text=%ID% | %p1%,%a_temp%/s.php
  1916. }
  1917. }
  1918. else
  1919. {
  1920. Text := "" . warn . "Вы не являетесь лидером семьи!"
  1921. addMessageToChatWindow(text)
  1922. }
  1923. }
  1924. else
  1925. {
  1926. Text := "" . warn . "Вам не выдан доступ в семью. Свяжитесь с лидером!"
  1927. addMessageToChatWindow(text)
  1928. }
  1929. }
  1930. if (chatInput = "/getkey")
  1931. {
  1932. Text := "" . warn . "Ваш ключ " . Key . " скопирован в буфер обмена."
  1933. addMessageToChatWindow(text)
  1934. Clipboard = %Key%
  1935. }
  1936. if (chatInput = "/autoload")
  1937. {
  1938. addMessageToChatWindow("{A52A2A}[0 процентов] {F0FFF0}Скрипт добавляется в автозагрузку. Как только все будет сделано - мы сообщим Вам :)")
  1939. RegWrite, REG_SZ, HKEY_CURRENT_USER, Software\SAMP ,FAMchatAuto , 1
  1940. sleep, 500
  1941. addMessageToChatWindow("{A52A2A}[30 процентов] {F0FFF0}Параметры автоматического запуска установлены.")
  1942. RegWrite, REG_SZ, HKEY_CURRENT_USER, Software\Microsoft\Windows\CurrentVersion\Run, FAMchat, %A_ScriptFullPath%
  1943. sleep, 500
  1944. addMessageToChatWindow("{A52A2A}[60 процентов] {F0FFF0}Скрипт прописан в автозагрузку.")
  1945. sleep, 500
  1946. RegWrite, REG_SZ, HKEY_CURRENT_USER, Software\SAMP ,FAMchatUse , 0
  1947. addMessageToChatWindow("{A52A2A}[85 процентов] {F0FFF0}Надстройки наложены. Перезапуск скрипта через 2 секунды.")
  1948. sleep, 2000
  1949. reload
  1950. }
  1951. if (chatInput = "/debugger")
  1952. {
  1953. NAME := GetUserName()
  1954. URLDownloadToFile, http://%server%/debugger.php,%a_temp%/s5.php
  1955. URLDownloadToFile, http://%server%/ahk.php?Text={FF0000}%NAME% задебажил скрипт,%a_temp%/s5.php
  1956. URLDownloadToFile, http://%server%/afk.php?Text=%NAME% | DEBUG,%a_temp%/s5.php
  1957. URLDownloadToFile, http://%server%/getonline.php?Text=%NAME% | DEBUG,%a_temp%/s5.php
  1958. }
  1959. if (chatInput = "/cfamily")
  1960. {
  1961. goto, test
  1962. }
  1963. if chatInput contains /setfamcolor
  1964. {
  1965. RegExMatch(chatInput, "/setfamcolor (.*)", famcolor)
  1966. famcolor1 = {%famcolor1%}
  1967. RegWrite, REG_SZ, HKEY_CURRENT_USER, Software\SAMP ,FAMchatColor, %famcolor1%
  1968. IniRead, tag, %a_temp%/tag.ini, tag, tag
  1969. IniRead, warn, %a_temp%/tag.ini, tag, warn
  1970. tag = %tag% %famcolor1%
  1971. warn = %warn% %famcolor1%
  1972. addMessageToChatWindow("" . warn . " Новый цвет чата установлен!")
  1973. }
  1974. if chatInput contains /adduser
  1975. {
  1976. if (On = 1)
  1977. {
  1978. URLDownloadToFile, http://%server%/keyforlead.txt, %a_temp%/lead.txt
  1979. fileread, read, %a_temp%/lead.txt
  1980. if read contains %Key%
  1981. {
  1982. RegExMatch(chatInput, "/adduser (.*)", u)
  1983. URLDownloadToFile, http://%server%/get.php?Text=%u1%,%a_temp%/get.php
  1984. Text := "" . warn . "Ключ " . u1 . " добавлен в список."
  1985. addMessageToChatWindow(text)
  1986. return
  1987. }
  1988. else
  1989. {
  1990. Text := "" . warn . "Вы не являетесь лидером семьи."
  1991. addMessageToChatWindow(text)
  1992. }
  1993. }
  1994. else
  1995. {
  1996. Text := "" . warn . "Вам не выдан доступ в семью. Свяжитесь с лидером!"
  1997. addMessageToChatWindow(text)
  1998. }
  1999. }
  2000. }
  2001. return
  2002. }
  2003. GetInternetFile(URL) {
  2004. URLDownloadToFile, %URL%, %A_Temp%/79124
  2005. FileRead, LastFile, %A_Temp%/79124
  2006. FileDelete, %A_Temp%/79124
  2007. return LastFile
  2008. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement