SaveText.Ru

UDF
  1. #SingleInstance force
  2. ; ######################
  3. ; #### CRMP UDF R1 #####
  4. ; # CRMP Version: 0.3e #
  5. ; ######################
  6. ; Переводил: Revalto
  7. ; SAMPUDF -> CRMPUDF
  8. ; ####################
  9. ; Samp-udf-addon
  10. global ADDR_SET_POSITION := 0xB7CD98
  11. global ADDR_SET_POSITION_CAR := 0xBA18FC
  12. global ADDR_SET_POSITION_OFFSET := 0x14
  13. global ADDR_SET_POSITION_X_OFFSET := 0x30
  14. global ADDR_SET_POSITION_Y_OFFSET := 0x34
  15. global ADDR_SET_POSITION_Z_OFFSET := 0x38
  16. global ADDR_SET_INTERIOR_OFFSET := 0xB72914
  17. global SAMP_SZIP_OFFSET := 0x20
  18. global SAMP_SZHOSTNAME_OFFSET := 0x121
  19. global SAMP_INFO_SETTINGS_OFFSET := 0x3C5
  20.  
  21. ; ErrorLevels
  22. global ERROR_OK                     := 0
  23. global ERROR_PROCESS_NOT_FOUND      := 1
  24. global ERROR_OPEN_PROCESS           := 2
  25. global ERROR_INVALID_HANDLE         := 3
  26. global ERROR_MODULE_NOT_FOUND       := 4
  27. global ERROR_ENUM_PROCESS_MODULES   := 5
  28. global ERROR_ZONE_NOT_FOUND         := 6
  29. global ERROR_CITY_NOT_FOUND         := 7
  30. global ERROR_READ_MEMORY            := 8
  31. global ERROR_WRITE_MEMORY           := 9
  32. global ERROR_ALLOC_MEMORY           := 10
  33. global ERROR_FREE_MEMORY            := 11
  34. global ERROR_WAIT_FOR_OBJECT        := 12
  35. global ERROR_CREATE_THREAD          := 13
  36.  
  37. ; GTA Addresses
  38. global ADDR_ZONECODE                := 0xA49AD4      ;Player Zone
  39. global ADDR_POSITION_X              := 0xB6F2E4      ;Player X Position
  40. global ADDR_POSITION_Y              := 0xB6F2E8      ;Player Y Position
  41. global ADDR_POSITION_Z              := 0xB6F2EC      ;Player Z Position
  42. global ADDR_CPED_PTR                := 0xB6F5F0      ;Player CPED Pointer
  43. global ADDR_CPED_HPOFF              := 0x540         ;Player Health
  44. global ADDR_CPED_ARMOROFF           := 0x548         ;Player Armour
  45. global ADDR_CPED_MONEY              := 0x0B7CE54     ;Player Money
  46. global ADDR_CPED_INTID              := 0xA4ACE8      ;Player Interior-ID
  47. global ADDR_CPED_SKINIDOFF          := 0x22          ;Player Skin-ID
  48. ;
  49. global ADDR_VEHICLE_PTR             := 0xBA18FC      ;Vehicle CPED Pointer
  50. global ADDR_VEHICLE_HPOFF           := 0x4C0         ;Vehicle Health
  51. global ADDR_VEHICLE_DOORSTATE       := 0x4F8         ;Vehicle Door Status
  52. global ADDR_VEHICLE_ENGINESTATE     := 0x428         ;Vehicle Engine Status
  53. global ADDR_VEHICLE_SIRENSTATE := 0x1069
  54. global ADDR_VEHICLE_SIRENSTATE2 := 0x1300
  55. global ADDR_VEHICLE_LIGHTSTATE      := 0x584         ;Vehicle Light Status
  56. global ADDR_VEHICLE_MODEL           := 0x22          ;Vehicle Car-ID & Car-Name
  57. global ADDR_VEHICLE_TYPE            := 0x590         ;Vehicle Typ-ID (1 = Car)
  58. global ADDR_VEHICLE_DRIVER          := 0x460         ;Vehicle Driver
  59. global ADDR_VEHICLE_X               := 0x44          ;Vehicle Speed X
  60. global ADDR_VEHICLE_Y               := 0x48          ;Vehicle Speed Y
  61. global ADDR_VEHICLE_Z               := 0x4C          ;Vehicle Speed Z
  62. global oAirplaneModels := [417, 425, 447, 460, 469, 476, 487, 488, 497, 511, 512, 513, 519, 520, 548, 553, 563, 577, 592, 593]
  63. global oBikeModels := [481,509,510]
  64. 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"]
  65. global oweaponNames := ["Кулак","Кастет","Клюшку для гольфа","Полицейскую дубинку","Нож","Бейсбольную биту","Лопату","Кий","Мачете","Бензопилу","Двухсторонний дилдо","Дилдо","Вибратор","Серебряный вибратор","Цветы","Трость","Гранату","Дымовую шашку","Коктейль Молотова", "", "", "", "Пистолет","Пистолет с глушителем","Пистолет Макарова","Помповое ружьё","Обрез","Многозарядное ружьё","Узи","MP5","AK-47","M4","Tec-9","Охотничье ружье","Снайперскую винтовку","РПГ-7","HS Rocket","Flamethrower","Minigun","Satchel Charge","Detonator","Баллончик с краской","Огнетушитель","Фотоаппарат","Night Vis Goggles","Thermal Goggles","Parachute"]
  66. 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"]
  67. 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"]
  68.  
  69. ; SAMP Addresses
  70. global ADDR_SAMP_INCHAT_PTR             := 0x21a10c
  71. global ADDR_SAMP_INCHAT_PTR_OFF         := 0x55
  72. global ADDR_SAMP_USERNAME               := 0x219A6F
  73. global FUNC_SAMP_SENDCMD                := 0x62070 ;0x60910
  74. global FUNC_SAMP_SENDSAY                := 0x4A10 ;0x49F0
  75. global FUNC_SAMP_SHOWGAMETEXT           := 0x91A40
  76. global FUNC_SAMP_PLAYAUDIOSTR           := 0x62da0
  77. global FUNC_SAMP_STOPAUDIOSTR           := 0x629a0
  78. global FUNC_SAMP_ADDTOCHATWND           := 0x60C50 ; CR:MP 0.3e | Работает
  79. global ADDR_SAMP_CHATMSG_PTR            := 0x20DFD8 ; CR:MP 0.3e | Работает
  80. ; ########################## Dialog Styles ##########################
  81. global DIALOG_STYLE_MSGBOX                      := 0
  82. global DIALOG_STYLE_INPUT                       := 1
  83. global DIALOG_STYLE_LIST                        := 2
  84. global DIALOG_STYLE_PASSWORD            := 3
  85. global DIALOG_STYLE_TABLIST                     := 4
  86. global DIALOG_STYLE_TABLIST_HEADERS     := 5
  87.  
  88.  
  89. ; ######################### Dialog Structure #########################
  90. global SAMP_DIALOG_LINENUMBER_OFFSET        := 0x140
  91. global SAMP_DIALOG_STRUCT_PTR                           := 0x20DFAC ; | Работает
  92. global SAMP_DIALOG_PTR1_OFFSET                          := 0x1C ; | Работает
  93. global SAMP_DIALOG_LINES_OFFSET                         := 0x44C ; | Работает
  94. global SAMP_DIALOG_INDEX_OFFSET                         := 0x443 ; | Работает
  95. global SAMP_DIALOG_BUTTON_HOVERING_OFFSET       := 0x465 ; | Работает
  96. global SAMP_DIALOG_BUTTON_CLICKED_OFFSET        := 0x466 ; | Работает
  97. global SAMP_DIALOG_PTR2_OFFSET                          := 0x20 ; | Работает
  98. global SAMP_DIALOG_LINECOUNT_OFFSET                     := 0x150 ; | Работает
  99. global SAMP_DIALOG_OPEN_OFFSET                          := 0x28 ; | Работает
  100. global SAMP_DIALOG_STYLE_OFFSET                         := 0x2C ; | Работает
  101. global SAMP_DIALOG_ID_OFFSET                            := 0x30 ; | Работает
  102. global SAMP_DIALOG_TEXT                     := 0x12D8F8
  103. global SAMP_DIALOG_TEXT_PTR_OFFSET                      := 0x34
  104. global SAMP_DIALOG_CAPTION_OFFSET                       := 0x40
  105. global FUNC_SAMP_SHOWDIALOG                                     := 0x6B9C0 ;0x13A270 ;
  106. global FUNC_SAMP_CLOSEDIALOG                            := 0x6C040
  107. global SAMP_CHAT_SHOW                       := 0x21A0E8
  108. global FUNC_UPDATESCOREBOARD                := 0x8A10
  109. global SAMP_INFO_OFFSET                     := 0x21A0F8
  110. global ADDR_SAMP_CRASHREPORT                            := 0x5CF2C
  111. global SAMP_PPOOLS_OFFSET                   := 0x3CD
  112. global SAMP_PPOOL_PLAYER_OFFSET             := 0x18
  113. global SAMP_SLOCALPLAYERID_OFFSET           := 0x4
  114. global SAMP_ISTRLEN_LOCALPLAYERNAME_OFFSET  := 0x1A
  115. global SAMP_SZLOCALPLAYERNAME_OFFSET        := 0xA
  116. global SAMP_PSZLOCALPLAYERNAME_OFFSET       := 0xA
  117. global SAMP_PREMOTEPLAYER_OFFSET            := 0x2E
  118. global SAMP_ISTRLENNAME___OFFSET            := 0x1C
  119. global SAMP_SZPLAYERNAME_OFFSET             := 0xC
  120. global SAMP_PSZPLAYERNAME_OFFSET            := 0xC
  121. global SAMP_ILOCALPLAYERPING_OFFSET         := 0x26
  122. global SAMP_ILOCALPLAYERSCORE_OFFSET        := 0x2A
  123. global SAMP_IPING_OFFSET                    := 0x28
  124. global SAMP_ISCORE_OFFSET                   := 0x24
  125. global SAMP_ISNPC_OFFSET                    := 0x4
  126. global SAMP_PLAYER_MAX                      := 1004
  127. global CheckpointCheck                                          := 0xC7DEEA
  128. global rmaddrs                                                          := [0xC7DEC8, 0xC7DECC, 0xC7DED0]
  129.  
  130. ; Sizes
  131. global SIZE_SAMP_CHATMSG := 0xFC
  132. ; Internal
  133. global hGTA := 0x0
  134. global dwGTAPID := 0x0
  135. global dwSAMP := 0x0
  136. global pMemory := 0x0
  137. global pParam1 := 0x0
  138. global pParam2 := 0x0
  139. global pParam3 := 0x0
  140. global pParam4                         := 0x0
  141. global pParam5                         := 0x0
  142. global pInjectFunc := 0x0
  143. global nZone := 1
  144. global nCity := 1
  145. global nPost := 1
  146. global bInitZaC := 0
  147. global iRefreshScoreboard := 0
  148. global oScoreboardData := ""
  149. global iRefreshHandles := 0
  150. global iUpdateTick := 2500 ;time in ms, used for getPlayerNameById etc. to refresh data
  151.  
  152. ; #########################################################################################################################################################
  153. ; #                                                                                                                                                                                                                                          
  154. ; #     - IsSAMPAvailable()                                         - Состояние SAMP (0 - Запущен, 1 - Выключен) ; Не работает
  155. ; #     - isInChat()                                                - Открыт ли чат (0 - нет, 1 - да) ; Не работает
  156. ; #     - getUsername()                                             - Выводит твой ник
  157. ; #     - getId()                                                   - Выводит твой ид
  158. ; #     - SendChat(wText)                                           - Отправка сообщения в чат не открывая его(через память) ; Работает
  159. ; #     - addChatMessage(wText)                                     - Отправить фейк сообщение в чат ; Работает
  160. ; #     - showGameText(wText, dwTime, dwTextsize)                   - Показать GUI текст (не работает с русским языком) ; Не проверял
  161. ; #     - playAudioStream(wUrl)                                     - Проигрывает песню по url ; Не проверял
  162. ; #     - stopAudioStream()                                         - Останавливает проигрывание ; Не проверял
  163. ; #         - GetChatLine(Line, Output)                                 - Вывод строки из чат лога (Line=0 - Это последняя строка) (Output - вывод текста) ; Не проверял
  164. ; #
  165. ; #     - blockChatInput()                                              - Заблокировать писать в чат ; Работает
  166. ; #     - unBlockChatInput()                                        - Разрешить писать в чат (обратное предыдущему) ; Работает
  167. ; ###############################################################################################################################
  168. ; #                                                                                                                                                                                
  169. ; #     - getServerName()                                           - Название сервера ; Не работает
  170. ; #     - getServerIP()                                             - IP сервера ; Не работает
  171. ; #     - getServerPort()                                           - Порт сервера ; Не работает
  172. ; #     - CountOnlinePlayers()                                      - Кол-во человек на сервере ; Не работает
  173. ; #                                                                                                                                                                                
  174. ; ###############################################################################################################################
  175. ; #                                                                                    
  176. ; #         - getWeatherID()                                                    -  ИД погоды ; Не проверял
  177. ; #         - getWeatherName()                                          -  Название погоды ; Не проверял
  178. ; #                                                                                                                                                          
  179. ; ###############################################################################################################################
  180. ; #                                                                                                                                                          
  181. ; #     - patchRadio() (interner stuff) ; Не проверял                                                                                                  
  182. ; #     - unPatchRadio() (interner stuff)               ; Не проверял                                                                                      
  183. ; #                                                                                                                                                          
  184. ; ###############################################################################################################################
  185. ; #                                                    
  186. ; #     - setDialogState(0)                                         - Скрыть диалог ; | Работает
  187. ; #     - setDialogState(1)                                         - Отобразить скрытый диалог ; | Работает
  188. ; #         - isDialogOpen()                                            - Если открыт диалог 1, если не открыт 0 ; | Работает
  189. ; #         - getDialogStyle()                                          - Стиль диалога 0-5 ; | Работает                                          
  190. ; #         - getDialogID()                                             - Ид диалога ; | Работает                              
  191. ; #     - setDialogID(id)                                           - Установить ид диалогу ; | Не тестировал
  192. ; #     - getDialogIndex()                                          - Вывод выбраной линии (число) ; | Для чего она?)    
  193. ; #     - getDialogLineNumber()                                     - Вывод выбраной линии (число) Замена getDialogIndex() ; | Работает        
  194. ; #         - getDialogCaption()                                        - Вывод названия диалога   ; | Работает                     
  195. ; #         - getDialogText()                                           - Вывод текста из диалога; | Работает
  196. ; #         - getDialogLineCount()                                      - Всего строк в диалоге  ; | Не коректно                
  197. ; #     - getDialogLine(index)                                      - Выводит текст из строки ; | Работает
  198. ; #     - getDialogLines()                                          - Возвращает массив строк с диалога   ; | Не тестировал                              
  199. ; #     - isDialogButton1Selected()                                 - PrГјft, ob Button1 des Dialogs ausgewГ¤hlt ist  ; | Не тестировал
  200. ; #     - getDialogStructPtr()                                      - Liest den Base Pointer zur Dialogstruktur aus (intern genutzt) ; | Работает
  201. ; #     - showDialog(style, caption, text, button1, button2, id)    - Показывает визуальный диалог  ; | Не работает
  202. ; #
  203. ; ###############################################################################################################################
  204. ; #                                                                                                                                                                                                                                  
  205. ; #         - getTargetPed(dwPED)                                               - Возвращает PED ID, по таргету                                  
  206. ; #     - getPedById(dwId)                                          - Возвращает PED ID по id игрока  
  207. ; #     - getIdByPed(dwId)                                          - Ид по таргету (getIdByPed(getTargetPed()))
  208. ; #     - getStreamedInPlayersInfo()                                - Получить информацию об игроках в радиусе стрима
  209. ; #     - callFuncForAllStreamedInPlayers()                         - Получить всю информацию об игроках в радиусе стрима
  210. ; #         - getDist(pos1,pos2)                                                    - Получить дистанцию между двумя координатами
  211. ; #     - getClosestPlayerPed()                                     - Возвращает PED ID ближайшего игрока                                      
  212. ; #     - getClosestPlayerId()                                      - Возвращает id ближайшего игрока                                          
  213. ; #         - getPedCoordinates(dwPED)                                              - Возвращает кординаты (в зоне стрима) по PED ID                          
  214. ; #     - getPlayerPosById(dwId)                                    - Возвращает позицию игрока по id                                          
  215. ; #     - getTargetPlayerSkinIdByPed(dwPED)                         - Возвращает id скина по PED ID                                            
  216. ; #     - getTargetPlayerSkinIdById(dwId)                           - Возвращает id скина по id игрока                                          
  217. ; #     - calcScreenCoors(fX,fY,fZ)                                 - Возвращает массив координат [fX,fY,fZ] относительно экрана                  
  218. ; #                                                                                                                                                                                                                                          
  219. ; #         - getVehiclePointerByPed(dwPED)                                     - Возвращает указатель на транспорт по PED ID                              
  220. ; #         - getVehiclePointerById(dwId)                                       - Возвращает указатель на транспорт по id игрока                            
  221. ; #     - isTargetInAnyVehicleByPed(dwPED)                          - Проверяет находится ли игрок в транспорте по PED ID                      
  222. ; #     - isTargetInAnyVehicleById(dwId)                            - Проверяет находится ли игрок в транспорте по id игрока                    
  223. ; #     - getTargetVehicleHealthByPed(dwPED)                        - Возвращает hp транспорта по PED ID                                        
  224. ; #     - getTargetVehicleHealthById(dwId)                          - Возвращает hp транспорта по id игрока                                    
  225. ; #     - getTargetVehicleTypeByPed(dwPED)                          - Возвращает тип транспорта по PED ID (возвращает число, а не название)    
  226. ; #     - getTargetVehicleTypeById(dwId)                            - Возвращает тип транспорта по id игрока (возвращает число, а не название)  
  227. ; #     - getTargetVehicleModelIdByPed(dwPED)                       - Возвращает номер модели транспорта по PED ID                              
  228. ; #     - getTargetVehicleModelIdById(dwId)                         - Возвращает номер модели транспорта по id игрока                          
  229. ; #     - getTargetVehicleModelNameByPed(dwPED)                     - Возвращает название модели транспорта по PED ID                                          
  230. ; #     - getTargetVehicleModelNameById(dwId)                       - Возвращает название модели транспорта по id игрока                                     
  231. ; #     - getTargetVehicleLightStateByPed(dwPED)                    - Возвращает состояние света транспорта по PED ID (вкл./выкл.)                      
  232. ; #     - getTargetVehicleLightStateById(dwId)                      - Возвращает состояние света транспорта по id игрока (вкл./выкл.)             
  233. ; #     - getTargetVehicleEngineStateByPed(dwPED)                   - Возвращает состояние мотора транспорта по PED ID (вкл./выкл.)                    
  234. ; #     - getTargetVehicleEngineStateById(dwId)                     - Возвращает состояние мотора транспорта по id игрока (вкл./выкл.)                       
  235. ; #     - getTargetVehicleLockStateByPed(dwPED)                     - Возвращает состояние дверей транспорта по PED ID (закрыты/открыты)        
  236. ; #     - getTargetVehicleLockStateById(dwId)                       - Возвращает состояние дверей транспорта по id игрока (закрыты/открыты)    
  237. ; #     - getTargetVehicleColor1ByPed(dwPED)                        - Возвращает 1-й цвет транспорта по PED ID                                              
  238. ; #     - getTargetVehicleColor1ById(dwId)                          - Возвращает 1-й цвет транспорта по id игрока                                         
  239. ; #     - getTargetVehicleColor2ByPed(dwPED)                        - Возвращает 2-й цвет транспорта по PED ID                                              
  240. ; #     - getTargetVehicleColor2ById(dwId)                          - Возвращает 2-й цвет транспорта по id игрока                                         
  241. ; #     - getTargetVehicleSpeedByPed(dwPED)                         - Возвращает текущую скорость транспорта по PED ID                                    
  242. ; #     - getTargetVehicleSpeedById(dwId)                           - Возвращает текущую скорость транспорта по id игрока                           
  243. ; #                                                                                                                                                          
  244. ; ############################################################################################################################################ ;
  245. ; #                                                                                                                                          # ;
  246. ; #     - getPlayerScoreById(dwId)                 - Уровень игрока по ID
  247. ; #     - getPlayerPingById(dwId)                  - Пинг по ID
  248. ; #     - getPlayerNameById(dwId)                  - Ник по ID
  249. ; #     - getPlayerIdByName(wName)                 - ID по Нику
  250. ; #     - updateScoreboardDataEx()                 - Обновить информацию в табе        
  251. ; #     - updateOScoreboardData()                  - Обновить информацию в табе      
  252. ; #         - isNPCById(dwId)                                  - Являеться ли данный ид NPC или нет
  253. ; #                                                                                                                                          # ;
  254. ; ############################################################################################################################################ ;
  255. ; #                                                                                                                                          # ;
  256. ; #     - getWeaponAmmo()                          -    1) Ammo - возвращает в переменную общее количество патрон.
  257. ; #                                                     2) Clip - возвращает в переменную количество патрон в магазине
  258. ; #     - isPlayerCrouch()                         -    Состояние персонажа (1 - сидит, 0 - стоит, -1 - не заспанен)
  259. ; #     - setHP(hp)                                -    Изменить себе ХП
  260. ; #     - getPlayerHealth()                        -    Показывает кол-во хп
  261. ; #     - getPlayerArmor()                         -    Показывает кол-во брони
  262. ; #     - getPlayerInteriorId()                            -    ID интерьера в котором вы находитесь
  263. ; #     - getPlayerSkinId()                                    -    Показывает ID вашего скина
  264. ; #     - getPlayerMoney()                                     -    Показывает кол-во денег
  265. ; #         - getPlayerWanteds()                                   -    Показывает кол-во звезд
  266. ; #         - getPlayerWeaponId()                                  -    Показывает ID оружия в руках
  267. ; #         - getPlayerWeaponName()                                -    Показывает название оружия в руках
  268. ; #         - getPlayerState()                                 -    Возвращает состояние локального игрока (возвращает число)    
  269. ; #     - getPlayerMapPosX()                               -    Позиция персонажа по координате X
  270. ; #     - getPlayerMapPosY()                               -    Позиция персонажа по координате Y        
  271. ; #     - getPlayerMapZoom()                               -    Определяет масштаб на карте в меню          
  272. ; #     - IsPlayerFreezed()                                    -    Определеяет заморожен ли игрок (0-Не заморожен, 1-Заморожен)            
  273. ; #                                                                                                                                          # ;
  274. ; ############################################################################################################################################ ;
  275. ; #                                                                                                                                          # ;
  276. ; #     - isPlayerInAnyVehicle()                   -    Находитесь ли вы в автомобиле (0-Нет, 1-Да)        
  277. ; #     - getVehicleHealth()                       -    Кол-во HP у машины в которой вы находитесь
  278. ; #     - isPlayerDriver()                                     -    (-1 Вы не в автомобиле, 0 - Вы на посажирском сиденье, 1 - Вы водитель)               
  279. ; #     - getVehicleType()                                     -    Тип автомобиля в котором вы находитесь
  280. ; #     - getVehicleModelId()                              -    ID машины в которой находитесь
  281. ; #     - getVehicleModelName()                            -    Название машины
  282. ; #     - getVehicleLightState()                           -    Включены ли фары машины в которой находитесь
  283. ; #     - getVehicleEngineState()                          -    Заведен ли двигатель
  284. ; #     - getVehicleLockState()                            -    Закрыт ли автомобиль
  285. ; #     - getVehicleColor1()                           -    Цвет 1 машины
  286. ; #     - getVehicleColor2()                           -    Цвет 2 машины
  287. ; #     - getVehicleSpeed()                            -    Скорость автомобиля
  288. ; #     - getPlayerRadiostationID()                    -    Ид радиостанции в автомобиле                
  289. ; #     - getPlayerRadiostationName()                  -    Название радиостанции в автомобиле                                    
  290. ; #                                                                                                                                          # ;
  291. ; ############################################################################################################################################ ;
  292. ; #                                                                                                                                          # ;
  293. ; #     - getCoordinates()                          -   Вывод координат на которых находитесь                                                # ;
  294. ; #         - getPlayerPos(X,Y,Z)                                   -   Вывод координат на которых вы находитесь в переменные                                # ;
  295. ; #                                                                                                                                          # ;
  296. ; ############################################################################################################################################ ;
  297. ; #                                                                                                                                          # ;
  298. ; #     - initZonesAndCities()                      - Инициализация районов и городов карты                                    
  299. ; #     - calculateZone(X, Y, Z)                    - Возвращает название района по координатам                                
  300. ; #     - calculateCity(X, Y, Z)                    - Возвращает название города по координатам                                
  301. ; #     - getCurrentZonecode()                      - ..:: НЕ РАБОТАЕТ ::..                                                    
  302. ; #     - AddZone(Name, X1, Y1, Z1, X2, Y2, Z2)     - Добавление нового района                                                  
  303. ; #     - AddCity(Name, X1, Y1, Z1, X2, Y2, Z2)     - Добавление нового города                                                  
  304. ; #         - IsPlayerInRangeOfPoint(X, Y, Z, Radius)   - Проверяет находится ли локальный игрок в радиусе 3D координат            
  305. ; #         - IsPlayerInRangeOfPoint2D(X, Y, Radius)  - Проверяет находится ли локальный игрок в радиусе 2D координат            
  306. ; #         - getPlayerZone()                               - Возвращает название района локального игрока                                     
  307. ; #         - getPlayerCity()                               - Возвращает название города локального игрока                                                                                               
  308. ; #                                                                                                                                          # ;
  309. ; ############################################################################################################################################ ;
  310. ; #                                                                                                                                          # ;
  311. ; #     - checkHandles()                                                                                                                     # ;
  312. ; #     - AntiCrash()                                                                                                                                    # ;
  313. ; #                                                                                                                                          # ;
  314. ; ############################################################################################################################################ ;                                            
  315. ; # Функции для работы с памятью                                                                                                             # ;
  316. ; #                                                                                                                                          # ;
  317. ; #     - checkHandles()                                                                                                                     # ;
  318. ; #     - refreshGTA()                                                                                                                       # ;
  319. ; #     - refreshSAMP()                                                                                                                      # ;
  320. ; #     - refreshMemory()                                                                                                                    # ;
  321. ; #     - getPID(szWindow)                                                                                                                   # ;
  322. ; #     - openProcess(dwPID, dwRights)                                                                                                       # ;
  323. ; #     - closeProcess(hProcess)                                                                                                             # ;
  324. ; #     - getModuleBaseAddress(sModule, dwPID)                                                                                               # ;
  325. ; #     - readString(hProcess, dwAddress, dwLen)                                                                                             # ;
  326. ; #     - readFloat(hProcess, dwAddress)                                                                                                     # ;
  327. ; #     - readDWORD(hProcess, dwAddress)                                                                                                     # ;
  328. ; #     - readMem(hProcess, dwAddress, dwLen=4, type="UInt")                                                                                 # ;
  329. ; #     - writeString(hProcess, dwAddress, wString)                                                                                          # ;
  330. ; #     - writeRaw(hProcess, dwAddress, data, dwLen)                                                                                         # ;
  331. ; #     - Memory_ReadByte(process_handle, address)                                                                                           # ;
  332. ; #     - callWithParams(hProcess, dwFunc, aParams, bCleanupStack = true)                                                                    # ;
  333. ; #     - virtualAllocEx(hProcess, dwSize, flAllocationType, flProtect)                                                                      # ;
  334. ; #     - virtualFreeEx(hProcess, lpAddress, dwSize, dwFreeType)                                                                             # ;
  335. ; #     - createRemoteThread(hProcess, lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter,                                         # ;
  336. ; #     - dwCreationFlags, lpThreadId)                                                                                                       # ;
  337. ; #     - waitForSingleObject(hThread, dwMilliseconds)                                                                                       # ;
  338. ; #     - __ansiToUnicode(sString, nLen = 0)                                                                                                 # ;
  339. ; #     - __unicodeToAnsi(wString, nLen = 0)                                                                                                 # ;
  340. ; ############################################################################################################################################ ;
  341. ; #                                                                                                                                          # ;
  342. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  343. ; # by MurKotik                                                                                                                              # ;
  344. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  345. ; #     - setCoordinates(x, y, z, Interior)         - Телепорт персонажа                                                                     # ;
  346. ; #     - getIP()                                   - Выдаёт IP Адрес сервера                                                                # ;
  347. ; #     - setIP(IP)                                 - Меняет IP Адрес Сервера       (Не доработан)                                           # ;
  348. ; #     - getHostname()                             - Выдаёт Имя сервера                                                                     # ;
  349. ; #     - setUsername(Username)                     - Установить новый Ник          (Не доработан)                                           # ;
  350. ; #     - colorhud(Цвет)                            - Меняет зелёный цвет в игре на указаный                                                 # ;
  351. ; #         - setTime(hour)                                 - Устанавливает время на сервере                                                         # ;
  352. ; #         - getSkinID()                               - Выдаёт ID Скина вашего персоажа                                                        # ;
  353. ; #         - getDialogTitle()                          - Выдаёт Заголовок последнего диалога                                                    # ;
  354. ; #         - getPlayerColor(id)                        - Выдаёт ID Цвета ника игрока по ID                                                      # ;
  355. ; #         - setPlayerColor(id,color)                  - Устанавливает цвет ника игроку по его ID                                               # ;
  356. ; #         - colorToStr(color)                         - Конвертация цвета из десятичной в шестнадцатиричную                                    # ;
  357. ; #         - getWeaponId()                             - Выдаёт ID оружия вашего персонаха                                                      # ;
  358. ; #     - restartGameEx()                           - Рестарт игры (Не отключает от сервера)                                                 # ;
  359. ; #     - setrestart()                              - Установить рестартинг (применить)                                                      # ;
  360. ; #     - disconnectEx()                            - Отключение от сервера                                                                  # ;
  361. ; #     - WriteProcessMemory(title,addresse,wert,size) - Работа с пресетам                                                                   # ;
  362. ; #     - writeFloat(hProcess, dwAddress, wFloat)   - Работа с памятью процесса                                                              # ;
  363. ; #     - writeByte(hProcess, dwAddress, wInt)      - Работа с памятью процесса                                                              # ;
  364. ; #     - FloatToHex(value)                         - Перевот из Float в Hex                                                                 # ;
  365. ; #     - IntToHex(int)                             - Выдаёт интерьер персонажа                                                              # ;
  366. ; #     - addChatMessageEx(Color, wText)            - Фэйк сообщение с покраской timstamp                                                    # ;
  367. ; #     - connect(IP)                               - Подключение к серверу по его IP (Пока что без смены Порта)                             # ;
  368. ; #     - HexToDec(str)                             - Перевод из Hex в Dec (Строковых значений)                                              # ;
  369. ; #     - setWeather(id)                            - Установить погоду                                                                      # ;
  370. ; #                                                                                                                                          # ;
  371. ; ############################################################################################################################################ ;
  372. ; #                                                                                                                                          # ;
  373. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;                                    
  374. ; # by McFree                                                                                                                                # ;
  375. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  376. ; #    - getPlayerPosById(dwId)                                         - Вычисляет позицию персонажа                                        # ;
  377. ; #    - HexToDecOne(Hex)                                               - Перевод из Hex в Dec                                               # ;
  378. ; #    - HexToDecTwo(Hex)                                               - Перевод шестнадцатиричного числа в десятичное                      # ;
  379. ; #    - hex2rgb(CR)                                                    - Перевод шестнадцатиричного цвета в rgb строку (255,255,255)        # ;
  380. ; #    - rgb2hex(R, G, B)                                               - Перевод RGB цвета в шестнадцатиричное значение (FFFFFF)            # ;
  381. ; #    - ProcessWriteMemory(Str ,addresse, process, Str, byte)          - Работа с памятью                                                   # ;
  382. ; #    - ProcessReadMemory(address, processIDorName, type, numBytes)    - Работа с памятью                                                   # ;
  383. ; #    - GetCoordsSamp(ByRef ResX, ByRef ResY)                          - Перевод кординат монитора на кординаты SA-MP                       # ;
  384. ; #                                                                                                                                          # ;
  385. ; ############################################################################################################################################ ;
  386. ; #                                                                                                                                          # ;
  387. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;    
  388. ; # by Godarck                                                                                                                               # ;
  389. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  390. ; #     - GetInterior()                                          - True or False. Находится ли персонаж в интерьере или нет.  
  391. ; #     - getVehicleSirenState()                                 - True or False. Включена ли сирена в полицейской машине или нет.
  392. ; #     - CoordsFromRedmarker()                                  - Считывает координаты метки с карты.                
  393. ; #     - NearPlayerInCar(dist)                                  - Определяет игрок в автомобиле рядом                
  394. ; #     - isTargetDriverbyId(dwId)                               - Является ли игрок данного ID водителем т/с        
  395. ; #     - ConvertCarColor(Color)                                 - Конвертация цвета в RGB для getVehicleColor1() и getVehicleColor2()
  396. ; #                                                                                                                                          # ;
  397. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  398. ; # By Unknown                                                                                                                               # ;
  399. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  400. ; #     - disableCheckpoint()                                - Отключает маркер на карте. Disabled REd Marker on map      
  401. ; #     - setCheckpoint(xpos,ypos,zpos,Radius)               - Устанавливает маркер на карте. Рекомендуемое значение радиуса  
  402. ; #                                                                                                                                          # ;
  403. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  404. ; # By MrGPro                                                                                                                                # ;
  405. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  406. ; #     - getServerHour()                                    - Получаем игровых часы минут (Только серверах где это отображается  
  407. ; #     - getServerMinute()                                  - Получаем игровых минуты минут (Только серверах где это отображается
  408. ; #     - getVehicleIdServer()                               - id транспорта на сервере в который вы сели        
  409. ; #                                                                                                                                          # ;
  410. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  411. ; # By Слюнявчик                                                                                                                             # ;
  412. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  413. ; #     - IsInAFK()                                         - Проверка на АФК (1 - в АФК 0 - не АФК -1 - Игра закрыта)
  414. ; #                                                                                                                                          # ;
  415. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  416. ; # By Dworkin                                                                                                                               # ;
  417. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  418. ; #     - getCameraCoordinates()                            - Получение координаты вашей камеры                                              # ;
  419. ; #                                                                                                                                          # ;
  420. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  421. ; # By Phoenixxx_Czar                                                                                                                        # ;
  422. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  423. ; #     - isPlayerInStreamById(player_id [, dist])                                                                                           # ;
  424. ; #             Функция для определения находиться ли игрок (игроки) в зоне стрима                                                           # ;
  425. ; #             player_id - ид игрока или массив идов игроков                                                                                # ;
  426. ; #             radius - радиус поиска игроков относительно основного персонажа                                                              # ;
  427. ; #     - getIdsInAnyVehicle()                              - Выдает кто с вами в автомобиле                                                 # ;
  428. ; #     - setPlayerName(playerid, newnick)                  - Визуальная смена Ник Нэйма любого игрока                                       # ;
  429. ; #     - getDialogLineNumber()                             - Определяет выбраную строку в диалоге                                           # ;
  430. ; #     - getsexbyskin(skin)                                - Определяет пол по иду скина (0 - Ошибка, 1 - Мужской, 2 - Женский)             # ;
  431. ; #     - save(var)                                         - Сохраняет по датам в                                                           # ;
  432. ; #                                                           "Мои Документы -> GTA San Andreas User Files -> SAMP -> ChatLogs"              # ;
  433. ; #     - copy(text)                                        - Копирует в буфер                                                               # ;
  434. ; #     - GetText(array [, min, max, button])               - Из массив в текст с переносами с ограничением                                  # ;
  435. ; #     - Get(url)                                          - Get запрос на указанный url, выдает текст с сайта                              # ;
  436. ; #     - Post(url, send)                                   - Post запрос на сайт (0 - Все хорошо  1 - Ошибка)                              # ;
  437. ; #                                                                                                                                          # ;
  438. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  439. ; # By Revalto                                                                                                                               # ;
  440. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  441. ; #     - setCoordinatesCar(x, y, z)         - Телепорт персонажа с Транспортом                                                              # ;
  442. ; #                                                                                                                                          # ;
  443. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  444. ; # ЧИТЫ                                                                                                                                     # ;
  445. ; #------------------------------------------------------------------------------------------------------------------------------------------# ;
  446. ; #     - toggleUnlimitedAmmo()                             - бесконечные патроны
  447. ; #     - toggleNoReload()                                  - стрельба без перезарядки
  448. ; #     - toggleNoRecoil()                                  - стрельба без отдачи
  449. ; #     - toggleAntiBikeFall()                              - не падать с байка
  450. ; #     - toggleAntiCarEject()                              - вас не могут выкинуть из машины
  451. ; #     - toggleNoAnimations()                              - анимации не отображаются
  452. ; #     - toggleObjectDrawMode()                            - курсор для отображения информации о streamer объектах на сервере
  453. ; #     - toggleMotionBlur()                                - размытость при движении на большой скорости как в сингле
  454. ; #     - writeBytes(hProcess, dwAddress, bytes)            - записать несколько байтов по адресу (служебная функция)
  455. ; #     - setFireImmunity(state)                            - Имунитет от огня (0-выкл, 1-вкл)
  456. ; #     - setInfiniteRun(state)                             - Беск бег (0-выкл, 1-вкл)
  457. ; #     - isMarkerSetup()                                   - Стоит ли маркер на крате (-1 ошибка, 0 нет, 1 да)
  458. ; #                  
  459. ; ############################################################################################################################################ ;
  460.  
  461. isInteger(num)
  462. {
  463.         return num^0 == num
  464. }
  465.  
  466. setPlayerFreeze(status) {
  467.     if(!checkHandles())
  468.     return -1
  469.     dwCPed := readDWORD(hGTA, 0xB6F5F0)
  470.     if(ErrorLevel) {
  471.         ErrorLevel := ERROR_READ_MEMORY
  472.         return -1
  473.     }
  474.     dwAddr := dwCPed + 0x42
  475.     writeString(hGTA, dwAddr, status)
  476.     if(ErrorLevel) {
  477.         ErrorLevel := ERROR_WRITE_MEMORY
  478.         return -1
  479.     }
  480.     ErrorLevel := ERROR_OK
  481.     return true
  482. }
  483.  
  484. GetText(name, min := 1, max := 45, button := 0)
  485. {
  486.         text := ""
  487.         for key, val in name
  488.     {
  489.         if (A_Index >= min && A_Index <= max)
  490.             text .= val "`n"
  491.                 temp_A_Index := A_Index
  492.     }
  493.     text := Trim(text, "`n")
  494.     if  (button)
  495.     {
  496.         if (min > 45)
  497.             text .= " `nНазад"
  498.         if (temp_A_Index > max)
  499.             text .= "`nВперед"
  500.     }
  501.     text := Trim(text, "`n")
  502.         return Array(text, min, max, temp_A_Index)
  503. }
  504.  
  505.  
  506. get(url)
  507. {
  508.     loop 5
  509.     {
  510.         ComObjError(false)
  511.         whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
  512.         whr.Open("GET", url)
  513.         whr.WaitForResponse(5)
  514.         whr.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
  515.         whr.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 YaBrowser/17.6.1.744 Yowser/2.5 Safari/537.36")
  516.         whr.Send()
  517.         if(!strlen(whr.ResponseText))
  518.             continue
  519.         return whr.ResponseText
  520.     }
  521. }
  522. post(url, send, result := 0)
  523. {
  524.     try
  525.     {
  526.         hObject := ComObjCreate("WinHttp.WinHttpRequest.5.1")
  527.         hObject.Open("POST", url)
  528.         hObject.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
  529.         hObject.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 YaBrowser/17.6.1.744 Yowser/2.5 Safari/537.36")
  530.         hObject.Send(send)
  531.         hObject.WaitForResponse(5)
  532.     }
  533.     catch ex
  534.         return 0
  535.     if (!result)
  536.         return 1
  537.     else if (result)
  538.         return hObject.ResponseText
  539. }
  540. IsChatActive() {
  541.     if(!checkHandles())
  542.         return -1
  543.  
  544.     dwInputInfo := readDWORD(hGTA, dwSAMP + SAMP_CHAT_SHOW)
  545.     dwInputBox := readDWORD(hGTA, dwInputInfo + 8)
  546.     byteChatActive := readMem(hGTA, dwInputBox + 4, 1)
  547.  
  548.     if(ErrorLevel) {
  549.         ErrorLevel := ERROR_READ_MEMORY
  550.         return -1
  551.     }
  552.  
  553.     return byteChatActive
  554. }
  555. ClearTextDialog() {
  556.     if(!checkHandles())
  557.     return ""
  558.    
  559.     dwAddress := dwSAMP + SAMP_DIALOG_TEXT
  560.     sUsername := writeString(hGTA, dwAddress, "")
  561.     if(ErrorLevel) {
  562.         ErrorLevel := ERROR_READ_MEMORY
  563.         return ""
  564.     }
  565.    
  566.     ErrorLevel := ERROR_OK
  567.     return sUsername
  568. }
  569.  
  570. GetChatText() {
  571.     if(!checkHandles())
  572.                 return -1
  573.    
  574.     dwAddress := dwSAMP + SAMP_DIALOG_TEXT
  575.     sUsername := readString(hGTA, dwAddress, 256)
  576.     if(ErrorLevel) {
  577.         ErrorLevel := ERROR_READ_MEMORY
  578.         return -2
  579.     }
  580.    
  581.     ErrorLevel := ERROR_OK
  582.     return sUsername
  583. }
  584.  
  585. setimg(InData) {    
  586.     DllCall( "Crypt32.dllCryptStringToBinary" ( A_IsUnicode ? "W" : "A" ), UInt,&InData
  587.         , UInt,StrLen(InData), UInt,1, UInt,0, UIntP,Bytes, Int,0, Int,0, "CDECL Int" )
  588.     VarSetCapacity( OutData, Req := Bytes * ( A_IsUnicode ? 2 : 1 ) )
  589.     DllCall( "Crypt32.dllCryptStringToBinary" ( A_IsUnicode ? "W" : "A" ), UInt,&InData
  590.         , UInt,StrLen(InData), UInt,1, Str,OutData, UIntP,Req, Int,0, Int,0, "CDECL Int" )  
  591.     File := FileOpen(A_Temp "Pic.png", "w"), File.length := 0, File.RawWrite(OutData, Bytes)
  592.     File.Close(), VarSetcapacity( OutData, 0)
  593.     Return A_Temp "Pic.png"
  594. }
  595. WM_LBUTTONDOWN()
  596. {
  597.    WM_NCLBUTTONDOWN := 0xA1, HTCAPTION := 2
  598.    PostMessage, WM_NCLBUTTONDOWN, HTCAPTION
  599. }
  600.  
  601. rus() {
  602.         SendMessage, 0x50,, 0x4190419,, A
  603.         return
  604. }
  605. eng() {
  606.         SendMessage, 0x50,, 0x4090409,, A
  607.         return
  608. }
  609. save(chatlog)
  610. {
  611.         static logschat := A_MyDocuments "GTA San Andreas User FilesSAMPChatLogs"
  612.         static chat     := A_MyDocuments "GTA San Andreas User FilesSAMPchatlog.txt"
  613.         FileCreateDir   , % logschat A_MM "-" A_YYYY
  614.         FileAppend      , % chatlog, % logschat A_MM "-" A_YYYY "" A_DD "." A_MM "." A_YYYY ".txt"
  615.         FileDelete      , % chat
  616. }
  617.  
  618. Copy(Text, LocaleID=0x419)
  619. {
  620.     CF_TEXT:=1, CF_LOCALE:=16, GMEM_MOVEABLE:=2
  621.     TextLen :=StrLen(Text)
  622.     HmemText :=DllCall("GlobalAlloc", "UInt", GMEM_MOVEABLE, "UInt", TextLen+1) ; Запрос перемещаемой
  623.     HmemLocale:=DllCall("GlobalAlloc", "UInt", GMEM_MOVEABLE, "UInt", 4) ; памяти, возвращаются хэндлы.
  624.     If(!HmemText || !HmemLocale)
  625.         Return
  626.     PtrText :=DllCall("GlobalLock", "UInt", HmemText) ; Фиксация памяти, хэндлы конвертируются
  627.     PtrLocale :=DllCall("GlobalLock", "UInt", HmemLocale) ; в указатели (адреса).
  628.     DllCall("msvcrtmemcpy", "UInt", PtrText, "Str", Text, "UInt", TextLen+1, "Cdecl") ; Копирование текста.
  629.     NumPut(LocaleID, PtrLocale+0) ; Запись идентификатора локали.
  630.     DllCall("GlobalUnlock", "UInt", HmemText) ; Расфиксация памяти.
  631.     DllCall("GlobalUnlock", "UInt", HmemLocale)
  632.     If not DllCall("OpenClipboard", "UInt", 0) ; Открытие буфера обмена.
  633.     {
  634.         DllCall("GlobalFree", "UInt", HmemText) ; Освобождение памяти,
  635.         DllCall("GlobalFree", "UInt", HmemLocale) ; если открыть не удалось.
  636.         Return
  637.     }
  638.     DllCall("EmptyClipboard") ; Очистка.
  639.     DllCall("SetClipboardData", "UInt", CF_TEXT, "UInt", HmemText) ; Помещение данных.
  640.     DllCall("SetClipboardData", "UInt", CF_LOCALE, "UInt", HmemLocale)
  641.     DllCall("CloseClipboard") ; Закрытие.
  642. }
  643.  
  644.  
  645. ClipGetText(CodePage=1251)
  646. {
  647.     CF_TEXT:=1, CF_UNICODETEXT:=13, Format:=0
  648.     If not DllCall("OpenClipboard", "UInt", 0) ; Открытие буфера обмена.
  649.         Return
  650.     Loop
  651.     {
  652.         Format:=DllCall("EnumClipboardFormats", "UInt", Format) ; Перебор форматов.
  653.         If(Format=0 || Format=CF_TEXT || Format=CF_UNICODETEXT)
  654.             Break
  655.     }
  656.     If(Format=0) { ; Текста не найдено.
  657.         DllCall("CloseClipboard")
  658.         Return
  659.     }
  660.     If(Format=CF_TEXT)
  661.     {
  662.         HmemText:=DllCall("GetClipboardData", "UInt", CF_TEXT) ; Получение хэндла данных.
  663.         PtrText :=DllCall("GlobalLock", "UInt", HmemText) ; Конвертация хэндла в указатель.
  664.         TextLen :=DllCall("msvcrtstrlen", "UInt", PtrText, "Cdecl") ; Измерение длины найденного текста.
  665.         VarSetCapacity(Text, TextLen+1) ; Переменная под этот текст.
  666.         DllCall("msvcrtmemcpy", "Str", Text, "UInt", PtrText, "UInt", TextLen+1, "Cdecl") ; Текст в переменную.
  667.         DllCall("GlobalUnlock", "UInt", HmemText) ; Расфиксация памяти.
  668.     }
  669.     Else If(Format=CF_UNICODETEXT)
  670.     {
  671.         HmemTextW:=DllCall("GetClipboardData", "UInt", CF_UNICODETEXT)
  672.         PtrTextW :=DllCall("GlobalLock", "UInt", HmemTextW)
  673.         TextLen :=DllCall("msvcrtwcslen", "UInt", PtrTextW, "Cdecl")
  674.         VarSetCapacity(Text, TextLen+1)
  675.         DllCall("WideCharToMultiByte", "UInt", CodePage, "UInt", 0, "UInt", PtrTextW
  676.         , "Int", TextLen+1, "Str", Text, "Int", TextLen+1
  677.         , "UInt", 0, "Int", 0) ; Конвертация из Unicode в ANSI.
  678.         DllCall("GlobalUnlock", "UInt", HmemTextW)
  679.     }
  680.     DllCall("CloseClipboard") ; Закрытие.
  681.     Return Text
  682. }
  683.  
  684. getLastDamagePed(ByRef Ped := "", ByRef Weapon := "")
  685. {
  686.         if(!checkHandles())
  687.                 return -1
  688.         if(!CPed := readDWORD(hGTA, ADDR_CPED_PTR))
  689.                 return -1
  690.         if(!dwPed := readDWORD(hGTA, CPed + 0x764))
  691.                 return -1
  692.         Ped := getIdByPed(dwPed)
  693.         Weapon := readMem(hGTA, CPed + 0x760, 4, "int")
  694.         return Ped
  695. }
  696.  
  697. setFireImmunity(state)
  698. {
  699.     if(!checkHandles())
  700.         return
  701.     writeMemory(hGTA, 0xB7CEE6, (state ? 1 : 0), 1, "byte")
  702. }
  703.  
  704. setInfiniteRun(state)
  705. {
  706.     if(!checkHandles())
  707.         return
  708.     writeMemory(hGTA, 0xB7CEE4, (state ? 1 : 0), 1, "byte")
  709. }
  710.  
  711. isMarkerSetup()
  712. {
  713.     if(!checkHandles())
  714.         return -1
  715.     return readMem(hGTA, 0xBA6774, 1, "byte")
  716. }
  717. getWeaponAmmo(ByRef Ammo := "", ByRef Clip := "", slot := -1)
  718. {
  719.     if(!checkHandles())
  720.         return -1
  721.     if(!CPed := readDWORD(hGTA, ADDR_CPED_PTR))
  722.         return -1
  723.     if slot not between 0 and 12
  724.     {
  725.         VarSetCapacity(slot, 1)
  726.         DllCall("ReadProcessMemory", "UInt", hGTA, "UInt", CPed + 0x718, "Str", slot, "UInt", 1, "UInt*", 0)
  727.         slot := NumGet(slot, 0, "short")
  728.         if slot >= 12544
  729.             slot -= 12544
  730.     }
  731.     struct := CPed + 0x5AC
  732.     VarSetCapacity(Ammo, 4)
  733.     VarSetCapacity(Clip, 4)
  734.     DllCall("ReadProcessMemory", "UInt", hGTA, "UInt", struct + (0x1C * slot), "Str", Ammo, "UInt", 4, "UInt*", 0)
  735.     DllCall("ReadProcessMemory", "UInt", hGTA, "UInt", struct + (0x1C * slot) - 0x4, "Str", Clip, "UInt", 4, "UInt*", 0)
  736.     Ammo := NumGet(Ammo, 0, "int")
  737.     Clip := NumGet(Clip, 0, "int")
  738.     return Ammo
  739. }
  740.  
  741. getWeaponSlotById(id)
  742. {
  743.     if id between 2 and 9
  744.         slot := 1
  745.     if id between 10 and 15
  746.         slot := 10
  747.     if id in 16,17,18,39
  748.         slot := 8
  749.     if id between 22 and 24
  750.         slot := 2
  751.     if id between 25 and 27
  752.         slot := 3
  753.     if id in 28,29,32
  754.         slot := 4
  755.     if id in 30,31
  756.         slot := 5
  757.     if id in 33,34
  758.         slot := 6
  759.     if id between 35 and 38
  760.         slot := 7
  761.     if id == 40
  762.         slot := 12
  763.     if id between 41 and 43
  764.         slot := 9
  765.     if id between 44 and 46
  766.         slot := 11
  767. }
  768. isPlayerCrouch()
  769. {
  770.     if(!checkHandles())
  771.         return -1
  772.     if(!CPed := readDWORD(hGTA, ADDR_CPED_PTR))
  773.         return -1
  774.     state := readMem(hGTA, CPed + 0x46F, 1, "byte")
  775.     if(state == 132)
  776.         return 1
  777.     if(state == 128)
  778.         return 0
  779.     return -1
  780. }
  781.  
  782. setDialogState(tog)
  783. {
  784.     if(!checkHandles())
  785.         return false
  786.    
  787.     dwPointer := getDialogStructPtr()
  788.     if(ErrorLevel || !dwPointer)
  789.         return false
  790.    
  791.     writeMemory(hGTA, dwPointer + 0x28, (tog ? 1 : 0), 1, "byte")
  792.     if(!tog)
  793.         Send {f6}{esc}
  794.     return true
  795. }
  796. toggleUnlimitedAmmo(tog := -1)
  797. {
  798.     if(!checkHandles())
  799.         return -1
  800.     byte := readMem(hGTA, 0x7428E6, 1, "byte")
  801.     if((tog == -1 && byte == 255) || tog == true || tog == 1)
  802.     {
  803.         writeBytes(hGTA, 0x7428E6, "909090")
  804.         return true
  805.     } else if((tog == -1 && byte == 144) || !tog)
  806.     {
  807.         writeBytes(hGTA, 0x7428E6, "FF4E0C")
  808.         return false
  809.     }
  810.     return -1
  811. }
  812.  
  813. toggleNoReload(tog := -1)
  814. {
  815.     if(!checkHandles())
  816.         return -1
  817.     byte := readMem(hGTA, 0x7428B0, 1, "byte")
  818.     if((tog == -1 && byte == 137) || tog == true || tog == 1)
  819.     {
  820.         writeBytes(hGTA, 0x7428B0, "909090")
  821.         return true
  822.     } else if((tog == -1 && byte == 144) || !tog)
  823.     {
  824.         writeBytes(hGTA, 0x7428B0, "894608")
  825.         return false
  826.     }
  827.     return -1
  828. }
  829.  
  830. toggleNoRecoil(tog := -1)
  831. {
  832.     if(!checkHandles())
  833.         return -1
  834.     byte := readMem(hGTA, 0x740450, 1, "byte")
  835.     if((tog == -1 && byte == 216) || tog == true || tog == 1)
  836.     {
  837.         writeBytes(hGTA, 0x740450, "90909090909090909090")
  838.         return true
  839.     } else if((tog == -1 && byte == 144) || !tog)
  840.     {
  841.         writeBytes(hGTA, 0x740450, "D80D3C8B8500D84C241C")
  842.         return false
  843.     }
  844.     return -1
  845. }
  846.  
  847. toggleAntiBikeFall(tog := -1)
  848. {
  849.     if(!checkHandles())
  850.         return -1
  851.     byte := readMem(hGTA, 0x4BA3B9, 1, "byte")
  852.     if((tog == -1 && byte == 15) || tog == true || tog == 1)
  853.     {
  854.         writeBytes(hGTA, 0x4BA3B9, "E9A703000090")
  855.         return true
  856.     } else if((tog == -1 && byte == 233) || !tog)
  857.     {
  858.         writeBytes(hGTA, 0x4BA3B9, "0F84A6030000")
  859.         return false
  860.     }
  861.     return -1
  862. }
  863.  
  864. toggleAntiCarEject(tog := -1)
  865. {
  866.     if(!checkHandles())
  867.         return -1
  868.     byte := readMem(hGTA, dwSAMP + 0x146E0, 1, "byte")
  869.     if((tog == -1 && byte == 233) || tog == true || tog == 1)
  870.     {
  871.         writeBytes(hGTA, dwSAMP + 0x146E0, "C390909090")
  872.         return true
  873.     } else if((tog == -1 && byte == 195) || !tog)
  874.     {
  875.         writeBytes(hGTA, dwSAMP + 0x146E0, "E9D7722700")
  876.         return false
  877.     }
  878.     return -1
  879. }
  880.  
  881. toggleNoAnimations(tog := -1)
  882. {
  883.     if(!checkHandles())
  884.         return -1
  885.     byte := readMem(hGTA, dwSAMP + 0x16FA0, 1, "byte")
  886.     if((tog == -1 && byte == 85) || tog == true || tog == 1)
  887.     {
  888.         writeMemory(hGTA, dwSAMP + 0x16FA0, 0xC3, 1, "byte")
  889.         return true
  890.     } else if((tog == -1 && byte == 195) || !tog)
  891.     {
  892.         writeMemory(hGTA, dwSAMP + 0x16FA0, 0x55, 1, "byte")
  893.         return false
  894.     }
  895.     return -1
  896. }
  897.  
  898. toggleObjectDrawMode(tog := -1)
  899. {
  900.     if(!checkHandles())
  901.         return -1
  902.     byte := readMem(hGTA, dwSAMP + 0x69529, 1, "byte")
  903.     if((tog == -1 && byte == 15) || tog == true || tog == 1)
  904.     {
  905.         writeBytes(hGTA, dwSAMP + 0x69529, "909090909090")
  906.         return true
  907.     } else if((tog == -1 && byte == 144) || !tog)
  908.     {
  909.         writeBytes(hGTA, dwSAMP + 0x69529, "0F84AE000000")
  910.         return false
  911.     }
  912.     return -1
  913. }
  914.  
  915. toggleMotionBlur(tog := -1)
  916. {
  917.     if(!checkHandles())
  918.         return -1
  919.     byte := readMem(hGTA, 0x704E8A, 1, "byte")
  920.     if((tog == -1 && byte == 144) || tog == true || tog == 1)
  921.     {
  922.         writeBytes(hGTA, 0x704E8A, "E811E2FFFF")
  923.         return true
  924.     } else if((tog == -1 && byte == 232) || !tog)
  925.     {
  926.         writeBytes(hGTA, 0x704E8A, "9090909090")
  927.         return false
  928.     }
  929.     return -1
  930. }
  931.  
  932. writeBytes(handle, address, bytes)
  933. {
  934.     length := strlen(bytes) / 2
  935.     VarSetCapacity(toInject, length, 0)
  936.     Loop %length%
  937.     {
  938.         byte := "0x" substr(bytes, ((A_Index - 1) * 2) + 1, 2)
  939.         NumPut(byte, toInject, A_Index - 1, "uchar")
  940.     }
  941.     return writeRaw(handle, address, &toInject, length)
  942. }
  943. setHP(hp) {
  944.     if(!checkHandles())
  945.         return -1
  946.    
  947.     dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  948.     if(ErrorLevel) {
  949.         ErrorLevel := ERROR_READ_MEMORY
  950.         return -1
  951.     }
  952.    
  953.     dwAddr := dwCPedPtr + ADDR_CPED_HPOFF
  954.     writeFloat(hGTA, dwAddr, hp)
  955.     if(ErrorLevel) {
  956.         ErrorLevel := ERROR_READ_MEMORY
  957.         return -1
  958.     }
  959.    
  960.     ErrorLevel := ERROR_OK
  961.     return true
  962. }
  963. getsexbyskin(skin)
  964. {
  965. if skin in 1,2,3,4,5,6,7,8,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,42,43,44,45,46,47,48,49,50,51,52,57,58,59,60,61,62,66,67,68,70,71,72,73,79,80,81,82,83,84,86,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,132,133,134,135,136,137,142,143,144,146,147,149,153,154,155,156,158,159,160,161,162,163,164,165,166,167,168,170,171,173,174,175,176,177,179,180,181,182,183,184,185,186,187,188,189,200,202,203,204,206,208,209,210,212,213,217,220,221,222,223,227,228,229,230,234,235,236,239,240,241,242,247,248,249,250,252,253,254,255,258,259,260,261,262,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,299,300,301,302,303,304,305,310,311
  966.     return 1
  967. if skin in 9,10,11,12,13,31,38,39,40,41,53,54,55,56,63,64,65,69,75,76,77,85,87,88,89,90,91,92,93,129,130,131,138,139,140,141,143,144,145,148,150,151,152,157,169,172,178,190,191,192,193,194,195,196,197,198,199,201,205,207,211,214,215,216,218,219,224,225,226,231,232,233,237,238,243,244,245,246,251,256,257,263,298,306,307,308,309
  968.     return 2
  969. else
  970.     return 0
  971. }
  972. getDialogLineNumber() {
  973.     dwPointer := getDialogStructPtr()
  974.     if (ErrorLevel || !dwPointer)
  975.         return 0
  976.  
  977.     dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR2_OFFSET)
  978.     if (ErrorLevel) {
  979.         ErrorLevel := ERROR_READ_MEMORY
  980.         return 0
  981.     }
  982.     count := readMem(hGTA, dwPointer + SAMP_DIALOG_LINENUMBER_OFFSET, 4, "UInt")
  983.     if (ErrorLevel) {
  984.         ErrorLevel := ERROR_READ_MEMORY
  985.         return 0
  986.     }
  987.     return count//16777216+1
  988. }
  989. getServerHour() {
  990.     if(!checkHandles())
  991.         return -1
  992.    
  993.     dwGTA := getModuleBaseAddress("grand_theft_auto_san_andreas.dll", hGTA)
  994.     Hour := readMem(hGTA, 0xB70153, 1, "Int")
  995.     if (Hour <= 9) {
  996.         FixHour = 0%Hour%
  997.         return FixHour
  998.     }
  999.     if(ErrorLevel) {
  1000.         ErrorLevel := ERROR_READ_MEMORY
  1001.         return -1
  1002.     }
  1003.    
  1004.     ErrorLevel := ERROR_OK    
  1005.     return Hour
  1006. }
  1007.  
  1008. getServerMinute() {
  1009.     if(!checkHandles())
  1010.         return -1
  1011.    
  1012.     dwGTA := getModuleBaseAddress("grand_theft_auto_san_andreas.dll", hGTA)
  1013.     Minute := readMem(hGTA, 0xB70152, 1, "Int")
  1014.     if (Minute <= 9) {
  1015.         FixMinute = 0%Minute%
  1016.         return FixMinute
  1017.     }
  1018.     if(ErrorLevel) {
  1019.         ErrorLevel := ERROR_READ_MEMORY
  1020.         return -1
  1021.     }
  1022.    
  1023.     ErrorLevel := ERROR_OK    
  1024.     return Minute
  1025. }
  1026. getCameraCoordinates() {
  1027.     if(!checkHandles())
  1028.         return false
  1029.  
  1030.     fX := readFloat(hGTA, 0xB6F9CC)
  1031.     if(ErrorLevel) {
  1032.         ErrorLevel := ERROR_READ_MEMORY
  1033.         return ""
  1034.     }
  1035.    
  1036.     fY := readFloat(hGTA, 0xB6F9D0)
  1037.     if(ErrorLevel) {
  1038.         ErrorLevel := ERROR_READ_MEMORY
  1039.         return ""
  1040.     }
  1041.    
  1042.     fZ := readFloat(hGTA, 0xB6F9D4)
  1043.     if(ErrorLevel) {
  1044.         ErrorLevel := ERROR_READ_MEMORY
  1045.         return ""
  1046.     }
  1047.    
  1048.     ErrorLevel := ERROR_OK
  1049.     return [fX, fY, fZ]
  1050. }
  1051. getPlayerPosById(dwId) {
  1052.     dwId += 0
  1053.     dwId := Floor(dwId)
  1054.     if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  1055.         return ""
  1056.    
  1057.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  1058.     {
  1059.         if(oScoreboardData[dwId])
  1060.         {
  1061.    if(oScoreboardData[dwId].HasKey("PED"))
  1062.     return getPedCoordinates(oScoreboardData[dwId].PED)
  1063.    if(oScoreboardData[dwId].HasKey("MPOS"))
  1064.     return oScoreboardData[dwId].MPOS
  1065.   }
  1066.         return ""
  1067.     }
  1068.    
  1069.     if(!updateOScoreboardData())
  1070.         return ""
  1071.    
  1072.     if(oScoreboardData[dwId])
  1073.     {
  1074.   if(oScoreboardData[dwId].HasKey("PED"))
  1075.    return getPedCoordinates(oScoreboardData[dwId].PED)
  1076.   if(oScoreboardData[dwId].HasKey("MPOS"))
  1077.    return oScoreboardData[dwId].MPOS
  1078.     }
  1079.     return ""
  1080. }
  1081. HexToDecOne(Hex)
  1082. {
  1083.     if (InStr(Hex, "0x") != 1)
  1084.     Hex := "0x" Hex
  1085.     return, Hex + 0
  1086. }
  1087. HexToDecTwo(hex)
  1088. {
  1089.     VarSetCapacity(dec, 66, 0)
  1090.     , val := DllCall("msvcrt.dll_wcstoui64", "Str", hex, "UInt", 0, "UInt", 16, "CDECL Int64")
  1091.     , DllCall("msvcrt.dll_i64tow", "Int64", val, "Str", dec, "UInt", 10, "CDECL")
  1092.     return dec
  1093. }
  1094. hex2rgb(CR)
  1095. {
  1096.     NumPut((InStr(CR, "#") ? "0x" SubStr(CR, 2) : "0x") SubStr(CR, -5), (V := "000000"))
  1097.     return NumGet(V, 2, "UChar") "," NumGet(V, 1, "UChar") "," NumGet(V, 0, "UChar")
  1098. }
  1099. rgb2hex(R, G, B, H := 1)
  1100. {
  1101.     static U := A_IsUnicode ? "_wcstoui64" : "_strtoui64"
  1102.     static V := A_IsUnicode ? "_i64tow"    : "_i64toa"
  1103.     rgb := ((R << 16) + (G << 8) + B)
  1104.     H := ((H = 1) ? "#" : ((H = 2) ? "0x" : ""))
  1105.     VarSetCapacity(S, 66, 0)
  1106.     value := DllCall("msvcrt.dll" U, "Str", rgb , "UInt", 0, "UInt", 10, "CDECL Int64")
  1107.     DllCall("msvcrt.dll" V, "Int64", value, "Str", S, "UInt", 16, "CDECL")
  1108.     return H S
  1109. }
  1110. GetCoordsSamp(ByRef ResX, ByRef ResY)
  1111. {
  1112.     MouseGetPos, PosX, PosY
  1113.     PosXProc := (PosX*100)/A_ScreenWidth
  1114.     PosYProc := (PosY*100)/A_ScreenHeight
  1115.     ResX := PosXProc*8
  1116.     ResY := PosYProc*6
  1117. }
  1118. getVehicleIdServer(address=0x13C298, datatype="int", length=4, offset=0)
  1119. {
  1120.     if (isPlayerDriver() != "-1" or isPlayerInAnyVehicle() != "0")
  1121.     {
  1122.         Process, Exist, grand_theft_auto_san_andreas.dll
  1123.         PID_GTA := ErrorLevel
  1124.         VarSetCapacity(me32, 548, 0)
  1125.         NumPut(548, me32)
  1126.         snapMod := DllCall("CreateToolhelp32Snapshot", "Uint", 0x00000008, "Uint", PID_GTA)
  1127.         If (snapMod = -1)
  1128.             Return 0
  1129.         If (DllCall("Module32First", "Uint", snapMod, "Uint", &me32))
  1130.         {
  1131.             Loop
  1132.             {
  1133.                 If (!DllCall("lstrcmpi", "Str", "samp.dll", "UInt", &me32 + 32)) {
  1134.                     DllCall("CloseHandle", "UInt", snapMod)
  1135.                     key:= NumGet(&me32 + 20)
  1136.                     WinGet, PID_SAMP, PID, Criminal Russia Multiplayer Ревизия G
  1137.                     hwnd_samp := DllCall("OpenProcess","Uint",0x1F0FFF,"int",0,"int", PID_SAMP)
  1138.                     VarSetCapacity(readvalue,length, 0)
  1139.                     DllCall("ReadProcessMemory","Uint",hwnd_samp,"Uint",key+address+offset,"Str",readvalue,"Uint",length,"Uint *",0)
  1140.                     finalvalue := NumGet(readvalue,0,datatype)
  1141.                     DllCall("CloseHandle", "int", hwnd_samp)
  1142.                     return finalvalue
  1143.                 }
  1144.             }
  1145.             Until !DllCall("Module32Next", "Uint", snapMod, "UInt", &me32)
  1146.         }
  1147.         DllCall("CloseHandle", "Uint", snapMod)
  1148.     }
  1149.     else
  1150.         Return 0
  1151. }
  1152. ; Визуально меняет ник любого игрока
  1153. setPlayerName(playerid, newnick) {
  1154.     if(!checkHandles() || !strlen(newnick))
  1155.         return 0
  1156.  
  1157.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  1158.     if(ErrorLevel || dwAddress==0) {
  1159.         ErrorLevel := ERROR_READ_MEMORY
  1160.         return 0
  1161.     }
  1162.    
  1163.     dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  1164.     if(ErrorLevel || dwAddress==0) {
  1165.         ErrorLevel := ERROR_READ_MEMORY
  1166.         return 0
  1167.     }
  1168.    
  1169.     dwPlayers := readDWORD(hGTA, dwAddress + SAMP_PPOOL_PLAYER_OFFSET)
  1170.     if(ErrorLevel || dwPlayers==0) {
  1171.         ErrorLevel := ERROR_READ_MEMORY
  1172.         return 0
  1173.     }
  1174.  
  1175.     dwRemoteplayer := readDWORD(hGTA, dwPlayers+SAMP_PREMOTEPLAYER_OFFSET+playerid*4)      ;pRemotePlayer
  1176.     if(ErrorLevel) {
  1177.         ErrorLevel := ERROR_READ_MEMORY
  1178.         return 0
  1179.     }
  1180.        
  1181.     if(dwRemoteplayer==0)
  1182.         return 0
  1183.        
  1184.     dwTemp := readMem(hGTA, dwRemoteplayer + SAMP_ISTRLENNAME___OFFSET, 4, "Int")
  1185.     if(ErrorLevel) {
  1186.         ErrorLevel := ERROR_READ_MEMORY
  1187.         return 0
  1188.     }
  1189.     sUsername := ""
  1190.     if(dwTemp <= 0xf)
  1191.     {
  1192.         sUsername := readString(hGTA, dwRemoteplayer+SAMP_SZPLAYERNAME_OFFSET, 16)
  1193.         if(ErrorLevel) {
  1194.             ErrorLevel := ERROR_READ_MEMORY
  1195.             return 0
  1196.         }
  1197.         writeString(hGTA, dwRemoteplayer+SAMP_SZPLAYERNAME_OFFSET, newnick)
  1198.     }
  1199.     else {
  1200.         dwAddress := readDWORD(hGTA, dwRemoteplayer + SAMP_PSZPLAYERNAME_OFFSET)
  1201.         if(ErrorLevel || dwAddress==0) {
  1202.             ErrorLevel := ERROR_READ_MEMORY
  1203.             return 0
  1204.         }
  1205.         sUsername := readString(hGTA, dwAddress, 25)
  1206.         if(ErrorLevel) {
  1207.             ErrorLevel := ERROR_READ_MEMORY
  1208.             return 0
  1209.         }
  1210.         writeString(hGTA, dwAddress, newnick)
  1211.     }
  1212.    
  1213.     ErrorLevel := ERROR_OK
  1214.     return 1
  1215. }
  1216. initZonesAndCities() {
  1217.    
  1218.     AddCity("Лас-Вентурас", 685.0, 476.093, -500.0, 3000.0, 3000.0, 500.0)
  1219.     AddCity("Сан-Фиерро", -3000.0, -742.306, -500.0, -1270.53, 1530.24, 500.0)
  1220.     AddCity("Сан-Фиерро", -1270.53, -402.481, -500.0, -1038.45, 832.495, 500.0)
  1221.     AddCity("Сан-Фиерро", -1038.45, -145.539, -500.0, -897.546, 376.632, 500.0)
  1222.     AddCity("Лос-Сантос", 480.0, -3000.0, -500.0, 3000.0, -850.0, 500.0)
  1223.     AddCity("Лос-Сантос", 80.0, -2101.61, -500.0, 1075.0, -1239.61, 500.0)
  1224.     AddCity("Тьерра-Робада", -1213.91, 596.349, -242.99, -480.539, 1659.68, 900.0)
  1225.     AddCity("Ред-Коунти", -1213.91, -768.027, -242.99, 2997.06, 596.349, 900.0)
  1226.     AddCity("Флинт-Коунти", -1213.91, -2892.97, -242.99, 44.6147, -768.027, 900.0)
  1227.     AddCity("Уэтстоун", -2997.47, -2892.97, -242.99, -1213.91, -1115.58, 900.0)
  1228.    
  1229.     AddZone("Ganton", 2222.560, -1852.870, -89.084, 2632.830, -1722.330, 110.916)
  1230. }
  1231. HexToDec(str)
  1232. {  
  1233.    local newStr := ""
  1234.    static comp := {0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9, "a":10, "b":11, "c":12, "d":13, "e":14, "f":15}
  1235.    StringLower, str, str
  1236.    str := RegExReplace(str, "^0x|[^a-f0-9]+", "")
  1237.    Loop, % StrLen(str)
  1238.        newStr .= SubStr(str, (StrLen(str)-A_Index)+1, 1)
  1239.    newStr := StrSplit(newStr, "")
  1240.    local ret := 0
  1241.    for i,char in newStr
  1242.        ret += comp[char]*(16**(i-1))
  1243.    return ret
  1244. }
  1245.  
  1246. addChatMessageEx(Color, wText) {
  1247.    wText := "" wText
  1248.  
  1249.    if(!checkHandles())
  1250.        return false
  1251.    
  1252.     VarSetCapacity(data2, 4, 0)
  1253.    NumPut(HexToDec(Color),data2,0,"Int")
  1254.    
  1255.    Addrr := readDWORD(hGTA, dwSAMP+ADDR_SAMP_CHATMSG_PTR)
  1256.    
  1257.    VarSetCapacity(data1, 4, 0)
  1258.    NumPut(readDWORD(hGTA, Addrr + 0x4), data1,0,"Int")
  1259.    
  1260.    WriteRaw(hGTA, Addrr + 0x4, &data2, 4)
  1261.    
  1262.    dwFunc := dwSAMP + FUNC_SAMP_ADDTOCHATWND
  1263.    dwChatInfo := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  1264.    if(ErrorLevel) {
  1265.        ErrorLevel := ERROR_READ_MEMORY
  1266.        return false
  1267.    }
  1268.    
  1269.    callWithParams(hGTA, dwFunc, [["p", dwChatInfo], ["s", wText]], true)
  1270.    WriteRaw(hGTA, Addrr + 0x4, &data1, 4)
  1271.    
  1272.    ErrorLevel := ERROR_OK
  1273.    
  1274.    return true
  1275. }
  1276. connect(IP) {
  1277.     setIP(IP)
  1278.     restartGameEx()
  1279.     disconnectEx()
  1280.     Sleep 1000
  1281.     setrestart()
  1282.     Return
  1283. }    
  1284. WriteProcessMemory(title,addresse,wert,size)  
  1285. {
  1286.         VarSetCapacity(idvar,32,0)
  1287.         VarSetCapacity(processhandle,32,0)
  1288.         VarSetCapacity(value, 32, 0)
  1289.         NumPut(wert,value,0,Uint)
  1290.         address=%addresse%      
  1291.         WinGet ,idvar,PID,%title%
  1292.         processhandle:=DllCall("OpenProcess","Uint",0x38,"int",0,"int",idvar)
  1293.         Bvar:=DllCall("WriteProcessMemory","Uint",processhandle,"Uint",address+0,"Uint",&value,"Uint",size,"Uint",0)
  1294. }
  1295.  
  1296. setCoordinates(x, y, z, Interior) {
  1297.     if(!checkHandles())
  1298.         return False
  1299.  
  1300.     dwAddress := readMem(hGTA, ADDR_SET_POSITION)
  1301.     if(ErrorLevel) {
  1302.         ErrorLevel := ERROR_READ_MEMORY
  1303.         Return False
  1304.     }
  1305.  
  1306.     dwAddress := readMem(hGTA, dwAddress + ADDR_SET_POSITION_OFFSET)
  1307.     if(ErrorLevel) {
  1308.         ErrorLevel := ERROR_READ_MEMORY
  1309.         Return False
  1310.     }
  1311.  
  1312.     Sleep 100
  1313.  
  1314.     writeByte(hGTA, ADDR_SET_INTERIOR_OFFSET, Interior)
  1315.     if(ErrorLevel) {
  1316.         ErrorLevel := ERROR_WRITE_MEMORY
  1317.         Return False
  1318.     }
  1319.  
  1320.     writeFloat(hGTA, dwAddress + ADDR_SET_POSITION_X_OFFSET, x)
  1321.     if(ErrorLevel) {
  1322.         ErrorLevel := ERROR_WRITE_MEMORY
  1323.         Return False
  1324.     }
  1325.  
  1326.     writeFloat(hGTA, dwAddress + ADDR_SET_POSITION_Y_OFFSET, y)
  1327.     if(ErrorLevel) {
  1328.         ErrorLevel := ERROR_WRITE_MEMORY
  1329.         Return False
  1330.     }
  1331.  
  1332.     writeFloat(hGTA, dwAddress + ADDR_SET_POSITION_Z_OFFSET, z)
  1333.     if(ErrorLevel) {
  1334.         ErrorLevel := ERROR_WRITE_MEMORY
  1335.         Return False
  1336.     }
  1337.  
  1338.     Return True
  1339. }
  1340.  
  1341. setCoordinatesCar(x, y, z) {
  1342.     if(!checkHandles())
  1343.         return False
  1344.  
  1345.     dwAddress := readMem(hGTA, ADDR_SET_POSITION_CAR)
  1346.     if(ErrorLevel) {
  1347.         ErrorLevel := ERROR_READ_MEMORY
  1348.         Return False
  1349.     }
  1350.  
  1351.     dwAddress := readMem(hGTA, dwAddress + ADDR_SET_POSITION_OFFSET)
  1352.     if(ErrorLevel) {
  1353.         ErrorLevel := ERROR_READ_MEMORY
  1354.         Return False
  1355.     }
  1356.  
  1357.     Sleep 100
  1358.  
  1359.     writeFloat(hGTA, dwAddress + ADDR_SET_POSITION_X_OFFSET, x)
  1360.     if(ErrorLevel) {
  1361.         ErrorLevel := ERROR_WRITE_MEMORY
  1362.         Return False
  1363.     }
  1364.  
  1365.     writeFloat(hGTA, dwAddress + ADDR_SET_POSITION_Y_OFFSET, y)
  1366.     if(ErrorLevel) {
  1367.         ErrorLevel := ERROR_WRITE_MEMORY
  1368.         Return False
  1369.     }
  1370.  
  1371.     writeFloat(hGTA, dwAddress + ADDR_SET_POSITION_Z_OFFSET, z)
  1372.     if(ErrorLevel) {
  1373.         ErrorLevel := ERROR_WRITE_MEMORY
  1374.         Return False
  1375.     }
  1376.  
  1377.     Return True
  1378. }
  1379.  
  1380. colorhud(colorhud)
  1381. {
  1382.     VarSetCapacity(idvar,32,0)
  1383.     VarSetCapacity(processhandle,32,0)
  1384.     VarSetCapacity(value, 32, 0)
  1385.     NumPut(colorhud,value,0,Uint)
  1386.     address=0xBAB230
  1387.     WinGet ,idvar,PID,Criminal Russia Multiplayer Ревизия G
  1388.     processhandle:=DllCall("OpenProcess","Uint",0x38,"int",0,"int",idvar)
  1389.     Bvar:=DllCall("WriteProcessMemory","Uint",processhandle,"Uint",address+0,"Uint",&value,"Uint","4","Uint",0)
  1390. }
  1391. getIP() {
  1392.     if(!checkHandles())
  1393.         return ""
  1394.  
  1395.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  1396.     if(ErrorLevel || dwAddress==0) {
  1397.         ErrorLevel := ERROR_READ_MEMORY
  1398.         return ""
  1399.     }
  1400.  
  1401.     ipAddr := readString(hGTA, dwAddress + SAMP_SZIP_OFFSET, 257)
  1402.     if(ErrorLevel) {
  1403.         ErrorLevel := ERROR_READ_MEMORY
  1404.         return ""
  1405.     }
  1406.  
  1407.     return ipAddr
  1408. }
  1409.  
  1410. ; Смена Ip Сервера
  1411. setIP(IP) {
  1412.     if(!checkHandles())
  1413.         return False
  1414.  
  1415.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  1416.     if(ErrorLevel || dwAddress==0) {
  1417.         ErrorLevel := ERROR_READ_MEMORY
  1418.         return False
  1419.     }
  1420.  
  1421.     writeString(hGTA, dwAddress + SAMP_SZIP_OFFSET, IP)
  1422.     if(ErrorLevel) {
  1423.         ErrorLevel := ERROR_WRITE_MEMORY
  1424.         return False
  1425.     }
  1426.  
  1427.     return True
  1428. }
  1429.  
  1430. ; returns server hostname or empty string on error
  1431. getHostname() {
  1432.     if(!checkHandles())
  1433.         return ""
  1434.  
  1435.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  1436.     if(ErrorLevel || dwAddress==0) {
  1437.         ErrorLevel := ERROR_READ_MEMORY
  1438.         return ""
  1439.     }
  1440.  
  1441.     hostname := readString(hGTA, dwAddress + SAMP_SZHOSTNAME_OFFSET, 259)
  1442.     if(ErrorLevel) {
  1443.         ErrorLevel := ERROR_READ_MEMORY
  1444.         return ""
  1445.     }
  1446.  
  1447.     return hostname
  1448. }
  1449.  
  1450. ; set nickname
  1451. setUsername(Username) {
  1452.     if(!checkHandles())
  1453.         return False
  1454.  
  1455.     dwAddress := dwSAMP + ADDR_SAMP_USERNAME
  1456.     writeString(hGTA, dwAddress, Username)
  1457.     if(ErrorLevel) {
  1458.         ErrorLevel := ERROR_WRITE_MEMORY
  1459.         return False
  1460.     }
  1461.  
  1462.     ErrorLevel := ERROR_OK
  1463.     return True
  1464. }
  1465. setChatLine(line, msg) {
  1466.         if(!checkHandles())
  1467.                 return -1
  1468.  
  1469.         dwPtr := dwSAMP + ADDR_SAMP_CHATMSG_PTR
  1470.         dwAddress := readDWORD(hGTA,dwPtr)
  1471.         if(ErrorLevel) {
  1472.                 ErrorLevel := ERROR_READ_MEMORY
  1473.                 return -1
  1474.   }
  1475.  
  1476.         ; 0x152, offset for first msg
  1477.         ; 0xFC, size of a msg
  1478.         ; 99, max msg
  1479.         writeString(hGTA, dwAddress + 0x152 + ( (99-line) * 0xFC), msg)
  1480.         if(ErrorLevel) {
  1481.                 ErrorLevel := ERROR_WRITE_MEMORY
  1482.                 return -1
  1483.   }
  1484.  
  1485.         ErrorLevel := ERROR_OK
  1486.         return True
  1487. }
  1488.  
  1489. getTagNameDistance() {
  1490.         if(!checkHandles())
  1491.                 return -1
  1492.  
  1493.         dwSAMPInfo := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  1494.         if(ErrorLevel) {
  1495.                 ErrorLevel := ERROR_READ_MEMORY
  1496.                 return -1
  1497.   }
  1498.  
  1499.         dwSAMPInfoSettings := readDWORD(hGTA, dwSAMPInfo + SAMP_INFO_SETTINGS_OFFSET)
  1500.         if(ErrorLevel) {
  1501.                 ErrorLevel := ERROR_READ_MEMORY
  1502.                 return -1
  1503.   }
  1504.  
  1505.   distance := readFloat(hGTA, dwSAMPInfoSettings + 0x27)
  1506.         if(ErrorLevel) {
  1507.                 ErrorLevel := ERROR_READ_MEMORY
  1508.                 return -1
  1509.   }
  1510.  
  1511.         ErrorLevel := ERROR_OK
  1512.         return distance
  1513. }
  1514.  
  1515. setTagNameDistance(status, distance) {
  1516.         if(!checkHandles())
  1517.                 return -1
  1518.  
  1519.         status := status ? 1 : 0
  1520.  
  1521.         dwSAMPInfo := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  1522.         if(ErrorLevel) {
  1523.                 ErrorLevel := ERROR_READ_MEMORY
  1524.                 return -1
  1525.   }
  1526.  
  1527.         dwSAMPInfoSettings := readDWORD(hGTA, dwSAMPInfo + SAMP_INFO_SETTINGS_OFFSET)
  1528.         if(ErrorLevel) {
  1529.                 ErrorLevel := ERROR_READ_MEMORY
  1530.                 return -1
  1531.   }
  1532.  
  1533.         writeByte(hGTA, dwSAMPInfoSettings + 0x38, 1)
  1534.         if(ErrorLevel) {
  1535.                 ErrorLevel := ERROR_WRITE_MEMORY
  1536.                 return -1
  1537.   }
  1538.  
  1539.         writeByte(hGTA, dwSAMPInfoSettings + 0x2F, status)
  1540.         if(ErrorLevel) {
  1541.                 ErrorLevel := ERROR_WRITE_MEMORY
  1542.                 return -1
  1543.   }
  1544.  
  1545.         writeFloat(hGTA, dwSAMPInfoSettings + 0x27, distance)
  1546.         if(ErrorLevel) {
  1547.                 ErrorLevel := ERROR_WRITE_MEMORY
  1548.                 return -1
  1549.   }
  1550.  
  1551.         ErrorLevel := ERROR_OK
  1552.         return
  1553. }
  1554.  
  1555. ; sets the ingame hour (day/night)
  1556. setTime(hour)
  1557. {
  1558.         if(!checkHandles())
  1559.                 return
  1560.         ; disable gta setTime function
  1561.         VarSetCapacity(nop, 6, 0)
  1562.         Loop 6 {
  1563.                 NumPut(0x90, nop, A_INDEX-1, "UChar")
  1564.         }
  1565.         writeRaw(hGTA, 0x52D168, &nop, 6)
  1566.  
  1567.         ; set our own weather
  1568.         VarSetCapacity(time, 1, 0)
  1569.         NumPut(hour, time, 0, "Int")
  1570.         writeRaw(hGTA, 0xB70153, &time, 1)
  1571. }
  1572.  
  1573. ; sets the weather
  1574. ; @param weather id
  1575. setWeather(id)
  1576. {
  1577.         if(!checkHandles())
  1578.                 return
  1579.         VarSetCapacity(weather, 1, 0)
  1580.         NumPut(id, weather, 0, "Int")
  1581.         writeRaw(hGTA, 0xC81320, &weather, 1)
  1582.         if(ErrorLevel)
  1583.                 return false
  1584.  
  1585.  
  1586.         return true
  1587. }
  1588.  
  1589. ; get the id of your skin
  1590. getSkinID() {
  1591.         if(!checkHandles())
  1592.                 return -1
  1593.  
  1594.         dwAddress := readDWORD(hGTA, 0xB6F3B8)
  1595.  
  1596.         if(ErrorLevel || dwAddress==0) {
  1597.                 ErrorLevel := ERROR_READ_MEMORY
  1598.                 return -1
  1599.         }
  1600.  
  1601.         id := readMem(hGTA, dwAddress + 0x22, 2, "UShort")
  1602.         if(ErrorLevel) {
  1603.                 ErrorLevel := ERROR_READ_MEMORY
  1604.                 return -1
  1605.         }
  1606.         ErrorLevel := ERROR_OK
  1607.         return id
  1608. }
  1609.  
  1610. ; get the title of dialog
  1611. getDialogTitle()
  1612. {
  1613.         if(!checkHandles())
  1614.                 return ""
  1615.         dwAddress := readDWORD(hGTA, dwSAMP + 0x21A0B8)
  1616.         if(ErrorLevel) {
  1617.                 ErrorLevel := ERROR_READ_MEMORY
  1618.                 return ""
  1619.         }
  1620.         text := readString(hGTA, dwAddress + 0x40, 128)
  1621.         if(ErrorLevel) {
  1622.                 ErrorLevel := ERROR_READ_MEMORY
  1623.                 return ""
  1624.         }
  1625.  
  1626.         ErrorLevel := ERROR_OK
  1627.         return text
  1628. }
  1629. ; get the color of player
  1630. ; @author democrazy
  1631. getPlayerColor(id)
  1632. {
  1633.     id += 0
  1634.  
  1635.     if(!checkHandles())
  1636.         return -1
  1637.  
  1638.     color := readDWORD(hGTA, dwSAMP + 0x216378 + 4*id)
  1639.     if(ErrorLevel) {
  1640.         ErrorLevel := ERROR_READ_MEMORY
  1641.         return -1
  1642.     }
  1643.     return color
  1644. }
  1645.  
  1646. ; set the color of player
  1647. ; @author democrazy
  1648. setPlayerColor(id,color)
  1649. {
  1650.     id += 0
  1651.     color +=0
  1652.  
  1653.     if(!checkHandles())
  1654.         return
  1655.  
  1656.     VarSetCapacity(bla, 4, 0)
  1657.     NumPut(color,bla,0,"UInt")
  1658.  
  1659.     writeRaw(hGTA, dwSAMP + 0x216378 + 4*id, &bla, 4)
  1660. }
  1661. ; convert color from decimal into hex
  1662. ; @author democrazy
  1663. colorToStr(color)
  1664. {
  1665.     color += 0
  1666.     color >>= 8
  1667.     color &= 0xffffff
  1668.     SetFormat, IntegerFast, hex
  1669.     color += 0
  1670.     color .= ""
  1671.     StringTrimLeft, color, color, 2
  1672.     SetFormat, IntegerFast, d
  1673.     if (StrLen(color) == 5)
  1674.        color := "0"color
  1675.     return "{" color "}"
  1676. }
  1677.  
  1678. ; Get Interior param.
  1679. ;;@autor Godarck
  1680.  
  1681. GetInterior()
  1682. {
  1683.     dwAddress := readDWORD(hGTA, ADDR_SET_INTERIOR_OFFSET)
  1684.     if(ErrorLevel || dwAddress==0) {
  1685.         ErrorLevel := ERROR_READ_MEMORY
  1686.         return False
  1687.     }    
  1688.   return True
  1689. }
  1690.  
  1691. ; get current weapon id
  1692. ; @author AnalFatal
  1693. getWeaponId()
  1694. {
  1695.     If(!checkHandles())
  1696.     return 0
  1697.  
  1698.    c := readDWORD(hGTA, ADDR_CPED_PTR)
  1699.    If(ErrorLevel) {
  1700.                 ErrorLevel := ERROR_READ_MEMORY
  1701.                 return 0
  1702.    }
  1703.    id := readMem(hGTA, c + 0x740)
  1704.    If(ErrorLevel) {
  1705.                 ErrorLevel := ERROR_READ_MEMORY
  1706.                 return 0
  1707.    }
  1708.  
  1709.    return id
  1710. }
  1711. writeFloat(hProcess, dwAddress, wFloat) {
  1712.     if(!hProcess) {
  1713.         ErrorLevel := ERROR_INVALID_HANDLE
  1714.         return false
  1715.     }
  1716.  
  1717.     wFloat := FloatToHex(wFloat)
  1718.  
  1719.     dwRet := DllCall(   "WriteProcessMemory"
  1720.                         , "UInt", hProcess
  1721.                         , "UInt", dwAddress
  1722.                         , "UInt *", wFloat
  1723.                         , "UInt", 4
  1724.                         , "UInt *", 0)
  1725.  
  1726.     ErrorLevel := ERROR_OK
  1727.     return true
  1728. }
  1729.  
  1730. writeByte(hProcess, dwAddress, wInt) {
  1731.   if(!hProcess) {
  1732.       ErrorLevel := ERROR_INVALID_HANDLE
  1733.       return false
  1734.   }
  1735.  
  1736.   wInt := IntToHex(wInt)
  1737.  
  1738.         dwRet := DllCall(     "WriteProcessMemory"
  1739.                               , "UInt", hProcess
  1740.                               , "UInt", dwAddress
  1741.                               , "UInt *", wInt
  1742.                               , "UInt", 1
  1743.                               , "UInt *", 0)
  1744. }
  1745.  
  1746. FloatToHex(value) {
  1747.    format := A_FormatInteger
  1748.    SetFormat, Integer, H
  1749.    result := DllCall("MulDiv", Float, value, Int, 1, Int, 1, UInt)
  1750.    SetFormat, Integer, %format%
  1751.    return, result
  1752. }
  1753.  
  1754. IntToHex(int)
  1755. {
  1756.         CurrentFormat := A_FormatInteger
  1757.         SetFormat, integer, hex
  1758.         int += 0
  1759.         SetFormat, integer, %CurrentFormat%
  1760.         return int
  1761. }
  1762.  
  1763. disconnectEx() {
  1764.        
  1765.         if(!checkHandles())
  1766.                 return 0
  1767.        
  1768.         dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)                 ;g_SAMP
  1769.         if(ErrorLevel || dwAddress==0) {
  1770.                 ErrorLevel := ERROR_READ_MEMORY
  1771.                 return 0
  1772.         }
  1773.        
  1774.         dwAddress := readDWORD(hGTA, dwAddress + 0x3c9)                 ;pRakClientInterface
  1775.         if(ErrorLevel || dwAddress==0) {
  1776.                 ErrorLevel := ERROR_READ_MEMORY
  1777.                 return 0
  1778.         }
  1779.    
  1780.     ecx := dwAddress        ;this
  1781.        
  1782.         dwAddress := readDWORD(hGTA, dwAddress)         ;vtable
  1783.         if(ErrorLevel || dwAddress==0) {
  1784.                 ErrorLevel := ERROR_READ_MEMORY
  1785.                 return 0
  1786.         }
  1787.        
  1788.        
  1789.        
  1790.         VarSetCapacity(injectData, 24, 0) ;mov, call, retn
  1791.        
  1792.     NumPut(0xB9, injectData, 0, "UChar")        ;mov ecx        0+1
  1793.         NumPut(ecx, injectData, 1, "UInt")                      ;1+4
  1794.    
  1795.         NumPut(0xB8, injectData, 5, "UChar")    ;mov eax        5+1
  1796.         NumPut(dwAddress, injectData, 6, "UInt")                        ;6+4
  1797.        
  1798.         ;NumPut(0x006A006A, injectData, 10, "UInt")  ; 2x push                  10+4
  1799.    
  1800.     NumPut(0x68, injectData, 10, "UChar")               ;10 + 1         ;push style
  1801.         NumPut(0, injectData, 11, "UInt")               ;11 + 4
  1802.    
  1803.     NumPut(0x68, injectData, 15, "UChar")               ;15 + 1         ;push style
  1804.         NumPut(500, injectData, 16, "UInt")             ;16 + 4
  1805.    
  1806.     ;---
  1807.        
  1808.         NumPut(0x50FF, injectData, 20, "UShort")                        ;20 + 2
  1809.         NumPut(0x08, injectData, 22, "UChar")                   ;22 + 1
  1810.        
  1811.         NumPut(0xC3, injectData, 23, "UChar")   ;retn           23+1
  1812.        
  1813.         writeRaw(hGTA, pInjectFunc, &injectData, 24)
  1814.         if(ErrorLevel)
  1815.                 return false
  1816.        
  1817.         hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  1818.         if(ErrorLevel)
  1819.                 return false
  1820.        
  1821.         waitForSingleObject(hThread, 0xFFFFFFFF)
  1822.  
  1823.   closeProcess(hThread)
  1824.  
  1825.         return true
  1826. }
  1827. setrestart()
  1828. {
  1829.   VarSetCapacity(old, 4, 0)
  1830.   dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)                       ;g_SAMP
  1831.     if(ErrorLevel || dwAddress==0) {
  1832.       ErrorLevel := ERROR_READ_MEMORY
  1833.       return 0
  1834.   }
  1835.  
  1836.   NumPut(9,old,0,"Int")
  1837.   writeRaw(hGTA, dwAddress + 957, &old, 4)
  1838. }
  1839. restartGameEx() {
  1840.        
  1841.         if(!checkHandles())
  1842.                 return -1
  1843.        
  1844.         dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)                 ;g_SAMP
  1845.         if(ErrorLevel || dwAddress==0) {
  1846.                 ErrorLevel := ERROR_READ_MEMORY
  1847.                 return -1
  1848.         }
  1849.        
  1850.         dwFunc := dwSAMP + 0xA060
  1851.        
  1852.         VarSetCapacity(injectData, 11, 0) ;mov, call, retn
  1853.        
  1854.         NumPut(0xB9, injectData, 0, "UChar")    ;mov ecx        0+1
  1855.         NumPut(dwAddress, injectData, 1, "UInt")                        ;1+4
  1856.         NumPut(0xE8, injectData, 5, "UChar")    ;call           5+1
  1857.         offset := dwFunc - (pInjectFunc + 10)
  1858.         NumPut(offset, injectData, 6, "Int")    ;                       6+4
  1859.     NumPut(0xC3, injectData, 10, "UChar")       ;               10+1
  1860.        
  1861.         writeRaw(hGTA, pInjectFunc, &injectData, 11)
  1862.         if(ErrorLevel)
  1863.                 return false
  1864.  
  1865.         hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  1866.         if(ErrorLevel)
  1867.                 return false
  1868.  
  1869.         waitForSingleObject(hThread, 0xFFFFFFFF)
  1870.  
  1871.   closeProcess(hThread)
  1872.  
  1873.         return true
  1874. }
  1875. ; ##### SAMP-Funktionen #####
  1876. ; Функция для определения всех идов в автомобиле
  1877. getIdsInAnyVehicle()
  1878. {
  1879.         if (isPlayerInAnyVehicle())
  1880.         {
  1881.                 cVeh := readDWORD(hGTA, 0xB79530)
  1882.                 playerCount := 0
  1883.                 ids := []
  1884.        
  1885.                 Loop, 8
  1886.                 {
  1887.                         playerId := getIdByPed(readDWORD(hGTA, cVeh + (1116 + 4 * A_Index)))
  1888.                         if (playerId != -1)
  1889.                         {
  1890.                                 playerCount++
  1891.                                 ids.Push(playerId)
  1892.                         }
  1893.                 }
  1894.                
  1895.                 if (!playerCount)
  1896.                         return 0
  1897.                 return ids
  1898.         }
  1899.         return -1
  1900. }
  1901.  
  1902. ; Функция для определения находиться ли игрок (игроки) в зоне стрима
  1903. ; player_id - ид игрока или массив идов игроков
  1904. ; radius - радиус поиска игроков относительно основного персонажа
  1905. isPlayerInStreamById(player_id, radius := 150)
  1906. {
  1907.        
  1908.         NAME := ""
  1909.         check := []
  1910.  
  1911.         p := getStreamedInPlayersInfo()
  1912.        
  1913.         if (!p)
  1914.                 return 0
  1915.  
  1916.         For i, o in p ; берет игроков из стрима в переменную NAME
  1917.         {
  1918.                 if (Floor(getDist(getCoordinates(), o.POS)) <= radius)
  1919.                 {
  1920.                         NAME .= o.NAME ", "
  1921.                 }
  1922.         }
  1923.        
  1924.         if (IsObject(player_id)) ; Если получен массив
  1925.         {
  1926.                
  1927.                 for k, v in player_id ; Проверяет находиться ли ид из массива в зоне стрима
  1928.                 {
  1929.                         i := 0
  1930.                         Loop, Parse, % NAME, % ",", % " ,.`n`r"
  1931.                         {
  1932.                                 if (A_LoopField == getPlayerNameById(v))
  1933.                                 {
  1934.                                         i := 1
  1935.                                         break
  1936.                                 }
  1937.                         }
  1938.                        
  1939.                         check[v] := i
  1940.                 }
  1941.                
  1942.                 return check
  1943.         }
  1944.         else if (!IsObject(player_id)) ; если передан ид
  1945.         {
  1946.                
  1947.                 if (!getPlayerNameById(player_id))
  1948.                         return 0
  1949.                
  1950.                 i := 0
  1951.                 Loop, Parse, % NAME, % ",", % " ,.`n`r"
  1952.                 {
  1953.                         if (A_LoopField == getPlayerNameById(player_id))
  1954.                         {
  1955.                                 return 1
  1956.                         }
  1957.                 }
  1958.                
  1959.                 return 0
  1960.         }
  1961. }
  1962. IsSAMPAvailable() {
  1963.     if(!checkHandles())
  1964.         return false
  1965.        
  1966.         dwChatInfo := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  1967.        
  1968.         if(dwChatInfo == 0 || dwChatInfo == "ERROR")
  1969.         {
  1970.                 return false
  1971.         }
  1972.         else
  1973.         {
  1974.                 return true
  1975.         }
  1976. }
  1977. isInChat() {
  1978.     if(!checkHandles())
  1979.         return -1
  1980.    
  1981.     dwPtr := dwSAMP + ADDR_SAMP_INCHAT_PTR
  1982.     dwAddress := readDWORD(hGTA, dwPtr) + ADDR_SAMP_INCHAT_PTR_OFF
  1983.     if(ErrorLevel) {
  1984.         ErrorLevel := ERROR_READ_MEMORY
  1985.         return -1
  1986.     }
  1987.    
  1988.     dwInChat := readDWORD(hGTA, dwAddress)
  1989.     if(ErrorLevel) {
  1990.         ErrorLevel := ERROR_READ_MEMORY
  1991.         return -1
  1992.     }
  1993.    
  1994.     ErrorLevel := ERROR_OK
  1995.     if(dwInChat > 0) {
  1996.         return true
  1997.     } else {
  1998.         return false
  1999.     }
  2000. }
  2001.  
  2002. getUsername() {
  2003.     if(!checkHandles())
  2004.         return ""
  2005.    
  2006.     dwAddress := dwSAMP + ADDR_SAMP_USERNAME
  2007.     sUsername := readString(hGTA, dwAddress, 25)
  2008.     if(ErrorLevel) {
  2009.         ErrorLevel := ERROR_READ_MEMORY
  2010.         return ""
  2011.     }
  2012.    
  2013.     ErrorLevel := ERROR_OK
  2014.     return sUsername
  2015. }
  2016.  
  2017. getId() {
  2018.     s:=getUsername()
  2019.     return getPlayerIdByName(s)
  2020. }
  2021.  
  2022.  
  2023. SendChat(wText) {
  2024.      wText := "" wText
  2025.    
  2026.     if(!checkHandles())
  2027.         return false
  2028.    
  2029.     dwFunc:=0
  2030.     if(SubStr(wText, 1, 1) == "/") {
  2031.         dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  2032.     } else {
  2033.         dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  2034.     }
  2035.    
  2036.     callWithParams(hGTA, dwFunc, [["s", wText]], false)
  2037.    
  2038.     ErrorLevel := ERROR_OK
  2039.     return true
  2040. }
  2041. ;=================================================[Работа с памятью]===================================================================================
  2042. ; Источник - http://dumpz.org/2345353/
  2043. ProcessReadMemory(address, processIDorName, type := "Int", numBytes := 4) {
  2044.     VarSetCapacity(buf, numBytes, 0)
  2045.     Process Exist, %processIDorName%
  2046.     if !processID := ErrorLevel
  2047.         return -1
  2048.         ;throw Exception("Invalid process name or process ID:`n`n""" . processIDorName . """")
  2049.     if !processHandle := DllCall("OpenProcess", "Int", 24, "UInt", 0, "UInt", processID, "Ptr")
  2050.         throw Exception("Failed to open process.`n`nError code:`t" . A_LastError)
  2051.     result := DllCall("ReadProcessMemory", "Ptr", processHandle, "Ptr", address, "Ptr", &buf, "Ptr", numBytes, "PtrP", numBytesRead, "UInt")
  2052.     if !DllCall("CloseHandle", "Ptr", processHandle, "UInt") && !result
  2053.         throw Exception("Failed to close process handle.`n`nError code:`t" . A_LastError)
  2054.     if !result
  2055.         throw Exception("Failed to read process memory.`n`nError code:`t" . A_LastError)
  2056.     if !numBytesRead
  2057.         throw Exception("Read 0 bytes from the`n`nprocess:`t" . processIDorName . "`naddress:`t" . address)
  2058.     return (type = "Str") ? StrGet(&buf, numBytes) : NumGet(buf, type)
  2059. }
  2060. ProcessWriteMemory(data, address, processIDorName, type := "Int", numBytes := 4) {
  2061.     VarSetCapacity(buf, numBytes, 0)
  2062.     (type = "Str") ? StrPut(data, &buf, numBytes) : NumPut(data, buf, type)
  2063.     Process Exist, %processIDorName%
  2064.     if !processID := ErrorLevel
  2065.         ;throw Exception("Invalid process name or process ID:`n`n""" . processIDorName . """")
  2066.         return
  2067.     if !processHandle := DllCall("OpenProcess", "Int", 40, "UInt", 0, "UInt", processID, "Ptr")
  2068.         throw Exception("Failed to open process.`n`nError code:`t" . A_LastError)
  2069.         result := DllCall("WriteProcessMemory", "Ptr", processHandle, "Ptr", address, "Ptr", &buf, "Ptr", numBytes, "UInt", 0, "UInt")
  2070.     if !DllCall("CloseHandle", "Ptr", processHandle, "UInt") && !result
  2071.         throw Exception("Failed to close process handle.`n`nError code:`t" . A_LastError)
  2072.     if !result
  2073.         ;throw Exception("Failed to write process memory.`n`nError code:`t" . A_LastError)
  2074.         return
  2075.     return result
  2076. }
  2077. ;==================================================[Работа с памятью]==================================================================================
  2078. addChatMessage(wText) {
  2079.     wText := "" wText
  2080.  
  2081.     if(!checkHandles())
  2082.         return false
  2083.    
  2084.     dwFunc := dwSAMP + FUNC_SAMP_ADDTOCHATWND
  2085.     dwChatInfo := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  2086.     if(ErrorLevel) {
  2087.         ErrorLevel := ERROR_READ_MEMORY
  2088.         return false
  2089.     }
  2090.    
  2091.     callWithParams(hGTA, dwFunc, [["p", dwChatInfo], ["s", wText]], true)
  2092.    
  2093.     ErrorLevel := ERROR_OK
  2094.     return true
  2095. }
  2096.  
  2097. showGameText(wText, dwTime, dwSize) {
  2098.     wText := "" wText
  2099.     dwTime += 0
  2100.     dwTime := Floor(dwTime)
  2101.     dwSize += 0
  2102.     dwSize := Floor(dwSize)
  2103.  
  2104.     if(!checkHandles())
  2105.         return false
  2106.    
  2107.     dwFunc := dwSAMP + FUNC_SAMP_SHOWGAMETEXT
  2108.    
  2109.     callWithParams(hGTA, dwFunc, [["s", wText], ["i", dwTime], ["i", dwSize]], false)
  2110.    
  2111.     ErrorLevel := ERROR_OK
  2112.     return true
  2113. }
  2114.  
  2115. playAudioStream(wUrl) {
  2116.     wUrl := "" wUrl
  2117.    
  2118.     if(!checkHandles())
  2119.         return false
  2120.    
  2121.     dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
  2122.    
  2123.     patchRadio()
  2124.    
  2125.     callWithParams(hGTA, dwFunc, [["s", wUrl], ["i", 0], ["i", 0], ["i", 0], ["i", 0], ["i", 0]], false)
  2126.    
  2127.     unPatchRadio()
  2128.    
  2129.     ErrorLevel := ERROR_OK
  2130.     return true
  2131. }
  2132.  
  2133. stopAudioStream() {
  2134.     if(!checkHandles())
  2135.         return false
  2136.    
  2137.     dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
  2138.    
  2139.     patchRadio()
  2140.    
  2141.     callWithParams(hGTA, dwFunc, [["i", 1]], false)
  2142.    
  2143.     unPatchRadio()
  2144.    
  2145.     ErrorLevel := ERROR_OK
  2146.     return true
  2147. }
  2148.  
  2149. patchRadio()
  2150. {
  2151.     if(!checkHandles())
  2152.         return false
  2153.    
  2154.     VarSetCapacity(nop, 4, 0)
  2155.     NumPut(0x90909090,nop,0,"UInt")
  2156.    
  2157.     dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
  2158.     writeRaw(hGTA, dwFunc, &nop, 4)
  2159.     writeRaw(hGTA, dwFunc+4, &nop, 1)
  2160.    
  2161.     dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
  2162.     writeRaw(hGTA, dwFunc, &nop, 4)
  2163.     writeRaw(hGTA, dwFunc+4, &nop, 1)
  2164.     return true
  2165. }
  2166.  
  2167. unPatchRadio()
  2168. {
  2169.     if(!checkHandles())
  2170.         return false
  2171.    
  2172.     VarSetCapacity(old, 4, 0)
  2173.    
  2174.     dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
  2175.     NumPut(0x74003980,old,0,"UInt")
  2176.     writeRaw(hGTA, dwFunc, &old, 4)
  2177.     NumPut(0x39,old,0,"UChar")
  2178.     writeRaw(hGTA, dwFunc+4, &old, 1)
  2179.    
  2180.     dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
  2181.     NumPut(0x74003980,old,0,"UInt")
  2182.     writeRaw(hGTA, dwFunc, &old, 4)
  2183.     NumPut(0x09,old,0,"UChar")
  2184.     writeRaw(hGTA, dwFunc+4, &old, 1)
  2185.     return true
  2186. }
  2187.  
  2188. blockChatInput() {
  2189.     if(!checkHandles())
  2190.         return false
  2191.    
  2192.     VarSetCapacity(nop, 2, 0)
  2193.    
  2194.     dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  2195.     NumPut(0x04C2,nop,0,"Short")
  2196.     writeRaw(hGTA, dwFunc, &nop, 2)
  2197.    
  2198.     dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  2199.     writeRaw(hGTA, dwFunc, &nop, 2)
  2200.    
  2201.     return true
  2202. }
  2203.  
  2204. unBlockChatInput() {
  2205.     if(!checkHandles())
  2206.         return false
  2207.    
  2208.     VarSetCapacity(nop, 2, 0)
  2209.    
  2210.     dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  2211.     NumPut(0xA164,nop,0,"Short")
  2212.     writeRaw(hGTA, dwFunc, &nop, 2)
  2213.    
  2214.     dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  2215.     writeRaw(hGTA, dwFunc, &nop, 2)
  2216.    
  2217.     return true
  2218. }
  2219.  
  2220. getServerName() {
  2221.     if(!checkHandles())
  2222.         return -1
  2223.    
  2224.     dwAdress := readMem(hGTA, dwSAMP + 0x21A0F8, 4, "int")
  2225.     if(ErrorLevel) {
  2226.         ErrorLevel := ERROR_READ_MEMORY
  2227.         return -1
  2228.     }
  2229.    
  2230.     if(!dwAdress)
  2231.         return -1
  2232.    
  2233.     ServerName := readString(hGTA, dwAdress + 0x121, 200)
  2234.    
  2235.     if(ErrorLevel) {
  2236.         ErrorLevel := ERROR_READ_MEMORY
  2237.         return -1
  2238.     }
  2239.    
  2240.     ErrorLevel := ERROR_OK
  2241.     return ServerName
  2242. }
  2243.  
  2244. getServerIP() {
  2245.     if(!checkHandles())
  2246.         return -1
  2247.    
  2248.     dwAdress := readMem(hGTA, dwSAMP + 0x21A0F8, 4, "int")
  2249.     if(ErrorLevel) {
  2250.         ErrorLevel := ERROR_READ_MEMORY
  2251.         return -1
  2252.     }
  2253.    
  2254.     if(!dwAdress)
  2255.         return -1
  2256.    
  2257.     ServerIP := readString(hGTA, dwAdress + 0x20, 100)
  2258.     if(ErrorLevel) {
  2259.         ErrorLevel := ERROR_READ_MEMORY
  2260.         return -1
  2261.     }
  2262.    
  2263.     ErrorLevel := ERROR_OK
  2264.     return ServerIP
  2265. }
  2266.  
  2267. getServerPort() {
  2268.     if(!checkHandles())
  2269.         return -1
  2270.    
  2271.     dwAdress := readMem(hGTA, dwSAMP + 0x21A0F8, 4, "int")
  2272.     if(ErrorLevel) {
  2273.         ErrorLevel := ERROR_READ_MEMORY
  2274.         return -1
  2275.     }
  2276.    
  2277.     if(!dwAdress)
  2278.         return -1
  2279.    
  2280.     ServerPort := readMem(hGTA, dwAdress + 0x225, 4, "int")
  2281.     if(ErrorLevel) {
  2282.         ErrorLevel := ERROR_READ_MEMORY
  2283.         return -1
  2284.     }
  2285.    
  2286.     ErrorLevel := ERROR_OK
  2287.     return ServerPort
  2288. }
  2289.  
  2290. getWeatherID() {
  2291.     if(!checkHandles())
  2292.         return -1
  2293.    
  2294.     dwGTA := getModuleBaseAddress("grand_theft_auto_san_andreas.dll", hGTA)
  2295.     WeatherID := readMem(hGTA, dwGTA + 0xC81320, 2, "byte")
  2296.     if(ErrorLevel) {
  2297.         ErrorLevel := ERROR_READ_MEMORY
  2298.         return -1
  2299.     }
  2300.    
  2301.     ErrorLevel := ERROR_OK    
  2302.     return WeatherID
  2303. }
  2304.  
  2305. getWeatherName() {
  2306.     if(isPlayerInAnyVehicle() == 0)
  2307.         return -1
  2308.    
  2309.     if(id >= 0 && id < 23)
  2310.     {
  2311.         return oweatherNames[id-1]
  2312.     }
  2313.     return ""
  2314. }
  2315.  
  2316. ; ##### Extra-Player-Funktionen #####
  2317. ; by Godarck
  2318. isTargetDriverbyId(dwId)
  2319. {
  2320.     if(!checkHandles())
  2321.     return -1
  2322.     dwPedPointer := getPedById(dwId)
  2323.     dwAddrVPtr := getVehiclePointerByPed(dwPedPointer)
  2324.     if(ErrorLevel) {
  2325.     ErrorLevel := ERROR_READ_MEMORY
  2326.     return -1
  2327.     }
  2328.     dwVal := readDWORD(hGTA, dwAddrVPtr + ADDR_VEHICLE_DRIVER)
  2329.     if(ErrorLevel) {
  2330.     ErrorLevel := ERROR_READ_MEMORY
  2331.     return -1
  2332.     }
  2333.     ErrorLevel := ERROR_OK
  2334.     return (dwVal == dwPedPointer)
  2335. }
  2336. getTargetPed() {
  2337.         if(!checkHandles())
  2338.         return 0
  2339.        
  2340.         dwAddress := readDWORD(hGTA, 0xB6F3B8)
  2341.     if(ErrorLevel) {
  2342.         ErrorLevel := ERROR_READ_MEMORY
  2343.         return 0
  2344.     }
  2345.         if(!dwAddress)
  2346.                 return 0
  2347.                
  2348.         dwAddress := readDWORD(hGTA, dwAddress+0x79C)
  2349.     if(ErrorLevel) {
  2350.         ErrorLevel := ERROR_READ_MEMORY
  2351.         return 0
  2352.     }
  2353.        
  2354.         ErrorLevel := ERROR_OK
  2355.         return dwAddress
  2356. }
  2357.  
  2358. calcScreenCoors(fX,fY,fZ)
  2359. {
  2360.         if(!checkHandles())
  2361.                 return false
  2362.        
  2363.         dwM := 0xB6FA2C
  2364.        
  2365.         m_11 := readFloat(hGTA, dwM + 0*4)
  2366.         if(ErrorLevel) {
  2367.                 ErrorLevel := ERROR_READ_MEMORY
  2368.                 return false
  2369.         }
  2370.        
  2371.         m_12 := readFloat(hGTA, dwM + 1*4)
  2372.         m_13 := readFloat(hGTA, dwM + 2*4)
  2373.         m_21 := readFloat(hGTA, dwM + 4*4)
  2374.         m_22 := readFloat(hGTA, dwM + 5*4)
  2375.         m_23 := readFloat(hGTA, dwM + 6*4)
  2376.         m_31 := readFloat(hGTA, dwM + 8*4)
  2377.         m_32 := readFloat(hGTA, dwM + 9*4)
  2378.         m_33 := readFloat(hGTA, dwM + 10*4)
  2379.         m_41 := readFloat(hGTA, dwM + 12*4)
  2380.         m_42 := readFloat(hGTA, dwM + 13*4)
  2381.         m_43 := readFloat(hGTA, dwM + 14*4)
  2382.        
  2383.         dwLenX := readDWORD(hGTA, 0xC17044)
  2384.         if(ErrorLevel) {
  2385.                 ErrorLevel := ERROR_READ_MEMORY
  2386.                 return false
  2387.         }
  2388.         dwLenY := readDWORD(hGTA, 0xC17048)
  2389.        
  2390.         frX := fZ * m_31 + fY * m_21 + fX * m_11 + m_41
  2391.         frY := fZ * m_32 + fY * m_22 + fX * m_12 + m_42
  2392.         frZ := fZ * m_33 + fY * m_23 + fX * m_13 + m_43
  2393.        
  2394.         fRecip := 1.0/frZ
  2395.         frX *= fRecip * dwLenX
  2396.         frY *= fRecip * dwLenY
  2397.    
  2398.     if(frX<=dwLenX && frY<=dwLenY && frZ>1)
  2399.         return [frX,frY,frZ]
  2400. }
  2401. ConvertCarColor(Color)
  2402. {
  2403.     ArrayRGB := ["0xF5F5F5FF", "0x2A77A1FF", "0x840410FF", "0x263739FF", "0x86446EFF", "0xD78E10FF", "0x4C75B7FF", "0xBDBEC6FF", "0x5E7072FF", "0x46597AFF", "0x656A79FF", "0x5D7E8DFF", "0x58595AFF", "0xD6DAD6FF", "0x9CA1A3FF", "0x335F3FFF", "0x730E1AFF", "0x7B0A2AFF", "0x9F9D94FF", "0x3B4E78FF", "0x732E3EFF", "0x691E3BFF", "0x96918CFF", "0x515459FF", "0x3F3E45FF", "0xA5A9A7FF", "0x635C5AFF", "0x3D4A68FF", "0x979592FF", "0x421F21FF", "0x5F272BFF", "0x8494ABFF", "0x767B7CFF", "0x646464FF", "0x5A5752FF", "0x252527FF", "0x2D3A35FF", "0x93A396FF", "0x6D7A88FF", "0x221918FF", "0x6F675FFF", "0x7C1C2AFF", "0x5F0A15FF", "0x193826FF", "0x5D1B20FF", "0x9D9872FF", "0x7A7560FF", "0x989586FF", "0xADB0B0FF", "0x848988FF", "0x304F45FF", "0x4D6268FF", "0x162248FF", "0x272F4BFF", "0x7D6256FF", "0x9EA4ABFF", "0x9C8D71FF", "0x6D1822FF", "0x4E6881FF", "0x9C9C98FF", "0x917347FF", "0x661C26FF", "0x949D9FFF", "0xA4A7A5FF", "0x8E8C46FF", "0x341A1EFF", "0x6A7A8CFF", "0xAAAD8EFF", "0xAB988FFF", "0x851F2EFF", "0x6F8297FF", "0x585853FF", "0x9AA790FF", "0x601A23FF", "0x20202CFF", "0xA4A096FF", "0xAA9D84FF", "0x78222BFF", "0x0E316DFF", "0x722A3FFF", "0x7B715EFF", "0x741D28FF", "0x1E2E32FF", "0x4D322FFF", "0x7C1B44FF", "0x2E5B20FF", "0x395A83FF", "0x6D2837FF", "0xA7A28FFF", "0xAFB1B1FF", "0x364155FF", "0x6D6C6EFF", "0x0F6A89FF", "0x204B6BFF", "0x2B3E57FF", "0x9B9F9DFF", "0x6C8495FF", "0x4D8495FF", "0xAE9B7FFF", "0x406C8FFF", "0x1F253BFF", "0xAB9276FF", "0x134573FF", "0x96816CFF", "0x64686AFF", "0x105082FF", "0xA19983FF", "0x385694FF", "0x525661FF", "0x7F6956FF", "0x8C929AFF", "0x596E87FF", "0x473532FF", "0x44624FFF", "0x730A27FF", "0x223457FF", "0x640D1BFF", "0xA3ADC6FF", "0x695853FF", "0x9B8B80FF", "0x620B1CFF", "0x5B5D5EFF", "0x624428FF", "0x731827FF", "0x1B376DFF", "0xEC6AAEFF", "0x000000FF"]
  2404.     ArrayRGBNew := ["0x177517FF", "0x210606FF", "0x125478FF", "0x452A0DFF", "0x571E1EFF", "0x010701FF", "0x25225AFF", "0x2C89AAFF", "0x8A4DBDFF", "0x35963AFF", "0xB7B7B7FF", "0x464C8DFF", "0x84888CFF", "0x817867FF", "0x817A26FF", "0x6A506FFF", "0x583E6FFF", "0x8CB972FF", "0x824F78FF", "0x6D276AFF", "0x1E1D13FF", "0x1E1306FF", "0x1F2518FF", "0x2C4531FF", "0x1E4C99FF", "0x2E5F43FF", "0x1E9948FF", "0x1E9999FF", "0x999976FF", "0x7C8499FF", "0x992E1EFF", "0x2C1E08FF", "0x142407FF", "0x993E4DFF", "0x1E4C99FF", "0x198181FF", "0x1A292AFF", "0x16616FFF", "0x1B6687FF", "0x6C3F99FF", "0x481A0EFF", "0x7A7399FF", "0x746D99FF", "0x53387EFF", "0x222407FF", "0x3E190CFF", "0x46210EFF", "0x991E1EFF", "0x8D4C8DFF", "0x805B80FF", "0x7B3E7EFF", "0x3C1737FF", "0x733517FF", "0x781818FF", "0x83341AFF", "0x8E2F1CFF", "0x7E3E53FF", "0x7C6D7CFF", "0x020C02FF", "0x072407FF", "0x163012FF", "0x16301BFF", "0x642B4FFF", "0x368452FF", "0x999590FF", "0x818D96FF", "0x99991EFF", "0x7F994CFF", "0x839292FF", "0x788222FF", "0x2B3C99FF", "0x3A3A0BFF", "0x8A794EFF", "0x0E1F49FF", "0x15371CFF", "0x15273AFF", "0x375775FF", "0x060820FF", "0x071326FF", "0x20394BFF", "0x2C5089FF", "0x15426CFF", "0x103250FF", "0x241663FF", "0x692015FF", "0x8C8D94FF", "0x516013FF", "0x090F02FF", "0x8C573AFF", "0x52888EFF", "0x995C52FF", "0x99581EFF", "0x993A63FF", "0x998F4EFF", "0x99311EFF", "0x0D1842FF", "0x521E1EFF", "0x42420DFF", "0x4C991EFF", "0x082A1DFF", "0x96821DFF", "0x197F19FF", "0x3B141FFF", "0x745217FF", "0x893F8DFF", "0x7E1A6CFF", "0x0B370BFF", "0x27450DFF", "0x071F24FF", "0x784573FF", "0x8A653AFF", "0x732617FF", "0x319490FF", "0x56941DFF", "0x59163DFF", "0x1B8A2FFF", "0x38160BFF", "0x041804FF", "0x355D8EFF", "0x2E3F5BFF", "0x561A28FF", "0x4E0E27FF", "0x706C67FF", "0x3B3E42FF", "0x2E2D33FF", "0x7B7E7DFF", "0x4A4442FF", "0x28344EFF"]
  2405. if (Color > 0) and (Color < 128)
  2406.   RGB := ArrayRGB[Color]
  2407. if (Color > 127) and (Color < 256)
  2408. {
  2409.   RGB := ArrayRGBNew[Color + 127]
  2410. }
  2411. StringLeft, RGBTemp, RGB, 8
  2412. StringRight, RGB, RGBTemp, 6
  2413. if Color = 0
  2414.    RGB := "000000"
  2415. return RGB
  2416. }
  2417. ;--
  2418. getPedById(dwId) {
  2419.     dwId += 0
  2420.     dwId := Floor(dwId)
  2421.     if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  2422.         return 0
  2423.    
  2424.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  2425.     {
  2426.         if(oScoreboardData[dwId])
  2427.         {
  2428.             if(oScoreboardData[dwId].HasKey("PED"))
  2429.                 return oScoreboardData[dwId].PED
  2430.         }
  2431.         return 0
  2432.     }
  2433.    
  2434.     if(!updateOScoreboardData())
  2435.         return 0
  2436.    
  2437.     if(oScoreboardData[dwId])
  2438.     {
  2439.         if(oScoreboardData[dwId].HasKey("PED"))
  2440.             return oScoreboardData[dwId].PED
  2441.     }
  2442.     return 0
  2443. }
  2444.  
  2445. getIdByPed(dwPed) {
  2446.     dwPed += 0
  2447.     dwPed := Floor(dwPed)
  2448.         if(!dwPed)
  2449.                 return -1
  2450.        
  2451.         if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  2452.     {
  2453.                 For i, o in oScoreboardData
  2454.         {
  2455.             if(o.HasKey("PED"))
  2456.             {
  2457.                                 if(o.PED==dwPed)
  2458.                                         return i
  2459.             }
  2460.         }
  2461.         return -1
  2462.     }
  2463.    
  2464.     if(!updateOScoreboardData())
  2465.         return -1
  2466.    
  2467.         For i, o in oScoreboardData
  2468.     {
  2469.         if(o.HasKey("PED"))
  2470.         {
  2471.                         if(o.PED==dwPed)
  2472.                                 return i
  2473.         }
  2474.     }
  2475.     return -1
  2476. }
  2477. IsInAFK() {
  2478.     res := ProcessReadMemory(0xBA6748 + 0x5C, "grand_theft_auto_san_andreas.dll")
  2479.     if (res==-1)
  2480.         return -1
  2481.     WinGet, win, MinMax, Criminal Russia Multiplayer Ревизия G
  2482.     if ((res=0) and (win=-1)) or res=1
  2483.         return 1
  2484.     return 0
  2485. }
  2486. getStreamedInPlayersInfo() {
  2487.     r:=[]
  2488.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  2489.     {
  2490.         For i, o in oScoreboardData
  2491.         {
  2492.             if(o.HasKey("PED"))
  2493.             {
  2494.                 p := getPedCoordinates(o.PED)
  2495.                 if(p)
  2496.                 {
  2497.                     o.POS := p
  2498.                     r[i] := o
  2499.                 }
  2500.             }
  2501.         }
  2502.         return r
  2503.     }
  2504.    
  2505.     if(!updateOScoreboardData())
  2506.         return ""
  2507.    
  2508.     For i, o in oScoreboardData
  2509.     {
  2510.         if(o.HasKey("PED"))
  2511.         {
  2512.             p := getPedCoordinates(o.PED)
  2513.             if(p)
  2514.             {
  2515.                 o.POS := p
  2516.                 r[i] := o
  2517.             }
  2518.         }
  2519.     }
  2520.     return r
  2521. }
  2522.  
  2523. callFuncForAllStreamedInPlayers(cfunc,dist=0x7fffffff) {
  2524.     cfunc := "" cfunc
  2525.     dist += 0
  2526.     if(!IsFunc(cfunc))
  2527.         return false
  2528.     p := getStreamedInPlayersInfo()
  2529.     if(!p)
  2530.         return false
  2531.     if(dist<0x7fffffff)
  2532.     {
  2533.         lpos := getCoordinates()
  2534.         if(!lpos)
  2535.             return false
  2536.         For i, o in p
  2537.         {
  2538.             if(dist>getDist(lpos,o.POS))
  2539.                 %cfunc%(o)
  2540.         }
  2541.     }
  2542.     else
  2543.     {
  2544.         For i, o in p
  2545.             %cfunc%(o)
  2546.     }
  2547.     return true
  2548. }
  2549.  
  2550. getDist(pos1,pos2)
  2551. {
  2552.         if(!pos1 || !pos2)
  2553.                 return 0
  2554.     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]))
  2555. }
  2556. getDist2D(pos1, pos2)
  2557. {
  2558.         if(!pos1 || !pos2)
  2559.                 return 0
  2560.     return Sqrt((pos1[1]-pos2[1])*(pos1[1]-pos2[1])+(pos1[2]-pos2[2])*(pos1[2]-pos2[2]))
  2561. }
  2562. getClosestPlayerPed() {
  2563.     dist := 0x7fffffff              ;max int32
  2564.     p := getStreamedInPlayersInfo()
  2565.         if(!p)
  2566.                 return -1
  2567.     lpos := getCoordinates()
  2568.     if(!lpos)
  2569.         return -1
  2570.         id := -1
  2571.     For i, o in p
  2572.     {
  2573.         t:=getDist(lpos,o.POS)
  2574.         if(t<dist)
  2575.         {
  2576.             dist := t
  2577.             id := i
  2578.         }
  2579.     }
  2580.     PED := getPedById(id)
  2581.     return PED
  2582. }
  2583.  
  2584. getClosestPlayerId() {
  2585.     dist := 0x7fffffff              ;max int32
  2586.     p := getStreamedInPlayersInfo()
  2587.         if(!p)
  2588.                 return -1
  2589.     lpos := getCoordinates()
  2590.     if(!lpos)
  2591.         return -1
  2592.         id := -1
  2593.     For i, o in p
  2594.     {
  2595.         t:=getDist(lpos,o.POS)
  2596.         if(t<dist)
  2597.         {
  2598.             dist := t
  2599.             id := i
  2600.         }
  2601.     }
  2602.     return id
  2603. }
  2604.  
  2605. CountOnlinePlayers()
  2606. {
  2607.     if(!checkHandles())
  2608.         return -1
  2609.     dwOnline := readDWORD(hGTA, dwSAMP + 0x21A0B4)
  2610.     if(ErrorLevel)
  2611.     {
  2612.         ErrorLevel := ERROR_READ_MEMORY
  2613.         return -1
  2614.     }
  2615.     dwAddr := dwOnline + 0x4
  2616.     OnlinePlayers := readDWORD(hGTA, dwAddr)
  2617.     if(ErrorLevel)
  2618.     {
  2619.         ErrorLevel := ERROR_READ_MEMORY
  2620.         return -1
  2621.     }
  2622.     ErrorLevel := ERROR_OK
  2623.     return OnlinePlayers
  2624. }
  2625.  
  2626. getPedCoordinates(dwPED) {
  2627.     dwPED += 0
  2628.     dwPED := Floor(dwPED)
  2629.     if(!dwPED)
  2630.         return ""
  2631.    
  2632.     if(!checkHandles())
  2633.         return ""
  2634.  
  2635.     dwAddress := readDWORD(hGTA, dwPED + 0x14)
  2636.     if(ErrorLevel || dwAddress==0) {
  2637.         ErrorLevel := ERROR_READ_MEMORY
  2638.         return ""
  2639.     }
  2640.    
  2641.     fX := readFloat(hGTA, dwAddress + 0x30)
  2642.     if(ErrorLevel) {
  2643.         ErrorLevel := ERROR_READ_MEMORY
  2644.         return ""
  2645.     }
  2646.    
  2647.     fY := readFloat(hGTA, dwAddress + 0x34)
  2648.     if(ErrorLevel) {
  2649.         ErrorLevel := ERROR_READ_MEMORY
  2650.         return ""
  2651.     }
  2652.    
  2653.     fZ := readFloat(hGTA, dwAddress + 0x38)
  2654.     if(ErrorLevel) {
  2655.         ErrorLevel := ERROR_READ_MEMORY
  2656.         return ""
  2657.     }
  2658.    
  2659.     ErrorLevel := ERROR_OK
  2660.     return [fX, fY, fZ]
  2661. }
  2662.  
  2663. getTargetPos(dwId) {
  2664.     dwId += 0
  2665.     dwId := Floor(dwId)
  2666.     if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  2667.         return ""
  2668.    
  2669.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  2670.     {
  2671.         if(oScoreboardData[dwId])
  2672.         {
  2673.                         if(oScoreboardData[dwId].HasKey("PED"))
  2674.                                 return getPedCoordinates(oScoreboardData[dwId].PED)
  2675.                         if(oScoreboardData[dwId].HasKey("MPOS"))
  2676.                                 return oScoreboardData[dwId].MPOS
  2677.                 }
  2678.         return ""
  2679.     }
  2680.    
  2681.     if(!updateOScoreboardData())
  2682.         return ""
  2683.    
  2684.     if(oScoreboardData[dwId])
  2685.     {
  2686.                 if(oScoreboardData[dwId].HasKey("PED"))
  2687.                         return getPedCoordinates(oScoreboardData[dwId].PED)
  2688.                 if(oScoreboardData[dwId].HasKey("MPOS"))
  2689.                         return oScoreboardData[dwId].MPOS
  2690.         }
  2691.     return ""
  2692. }
  2693.  
  2694. getTargetPlayerSkinIdByPed(dwPED) {
  2695.     if(!checkHandles())
  2696.         return -1
  2697.    
  2698.     dwAddr := dwPED + ADDR_CPED_SKINIDOFF
  2699.     SkinID := readMem(hGTA, dwAddr, 2, "byte")
  2700.     if(ErrorLevel) {
  2701.         ErrorLevel := ERROR_READ_MEMORY
  2702.         return -1
  2703.     }
  2704.    
  2705.     ErrorLevel := ERROR_OK
  2706.     return SkinID
  2707. }
  2708.  
  2709. getTargetPlayerSkinIdById(dwId) {
  2710.     if(!checkHandles())
  2711.         return -1
  2712.    
  2713.     dwPED := getPedById(dwId)
  2714.     dwAddr := dwPED + ADDR_CPED_SKINIDOFF
  2715.    
  2716.     SkinID := readMem(hGTA, dwAddr, 2, "byte")
  2717.     if(ErrorLevel) {
  2718.         ErrorLevel := ERROR_READ_MEMORY
  2719.         return -1
  2720.     }
  2721.    
  2722.     ErrorLevel := ERROR_OK
  2723.     return SkinID
  2724. }
  2725.  
  2726. ; ##### Extra-Player-Fahrzeug-Funktionenn #####
  2727.  
  2728. NearPlayerInCar(dist)
  2729. {
  2730.   TempDist := 100
  2731.   if not dist dist := TempDist
  2732. p := getStreamedInPlayersInfo()  ; streamedinplayers array
  2733. if(!p)
  2734.   return
  2735. lpos := getCoordinates() ; your position
  2736. if(!lpos)
  2737.   return
  2738. For i, o in p
  2739. {
  2740.   t:=getDist(lpos,o.POS)
  2741.   if(t<=dist)
  2742.   {
  2743.        
  2744.           if (t < TempDist) and ( t > 5 ) and getTargetVehicleModelNameById(i)      
  2745.           {
  2746.             TempId := i
  2747.             TempDist := t
  2748.           }
  2749.         }
  2750.       }        
  2751. return TempId
  2752. }
  2753.  
  2754. getVehiclePointerByPed(dwPED) {
  2755.     dwPED += 0
  2756.     dwPED := Floor(dwPED)
  2757.     if(!dwPED)
  2758.         return 0
  2759.         if(!checkHandles())
  2760.         return 0
  2761.         dwAddress := readDWORD(hGTA, dwPED + 0x58C)
  2762.     if(ErrorLevel) {
  2763.         ErrorLevel := ERROR_READ_MEMORY
  2764.         return 0
  2765.     }
  2766.         ErrorLevel := ERROR_OK
  2767.         return dwAddress
  2768. }
  2769.  
  2770. getVehiclePointerById(dwId) {
  2771.     if(!dwId)
  2772.         return 0
  2773.         if(!checkHandles())
  2774.         return 0
  2775.    
  2776.     dwPed_By_Id := getPedById(dwId)
  2777.    
  2778.         dwAddress := readDWORD(hGTA, dwPed_By_Id + 0x58C)
  2779.     if(ErrorLevel) {
  2780.         ErrorLevel := ERROR_READ_MEMORY
  2781.         return 0
  2782.     }
  2783.         ErrorLevel := ERROR_OK
  2784.         return dwAddress
  2785. }
  2786.  
  2787. isTargetInAnyVehicleByPed(dwPED)
  2788. {
  2789.     if(!checkHandles())
  2790.         return -1
  2791.    
  2792.     dwVehiclePointer := getVehiclePointerByPed(dwPedPointer)
  2793.    
  2794.     if(dwVehiclePointer > 0)
  2795.     {
  2796.         return 1
  2797.     }
  2798.     else if(dwVehiclePointer <= 0)
  2799.     {
  2800.         return 0
  2801.     }
  2802.     else
  2803.     {
  2804.         return -1
  2805.     }
  2806. }
  2807.  
  2808. isTargetInAnyVehiclebyId(dwId)
  2809. {
  2810.     if(!checkHandles())
  2811.         return -1
  2812.    
  2813.     dwPedPointer := getPedById(dwId)
  2814.     dwVehiclePointer := getVehiclePointerByPed(dwPedPointer)
  2815.    
  2816.     if(dwVehiclePointer > 0)
  2817.     {
  2818.         return 1
  2819.     }
  2820.     else if(dwVehiclePointer <= 0)
  2821.     {
  2822.         return 0
  2823.     }
  2824.     else
  2825.     {
  2826.         return -1
  2827.     }
  2828. }
  2829.  
  2830. getTargetVehicleHealthByPed(dwPed) {
  2831.     if(!checkHandles())
  2832.         return -1
  2833.    
  2834.     dwVehPtr := getVehiclePointerByPed(dwPed)    
  2835.     dwAddr := dwVehPtr + ADDR_VEHICLE_HPOFF
  2836.     fHealth := readFloat(hGTA, dwAddr)
  2837.     if(ErrorLevel) {
  2838.         ErrorLevel := ERROR_READ_MEMORY
  2839.         return -1
  2840.     }
  2841.    
  2842.     ErrorLevel := ERROR_OK
  2843.     return Round(fHealth)
  2844. }
  2845.  
  2846. getTargetVehicleHealthById(dwId) {
  2847.     if(!checkHandles())
  2848.         return -1
  2849.    
  2850.     dwVehPtr := getVehiclePointerById(dwId)    
  2851.     dwAddr := dwVehPtr + ADDR_VEHICLE_HPOFF
  2852.     fHealth := readFloat(hGTA, dwAddr)
  2853.     if(ErrorLevel) {
  2854.         ErrorLevel := ERROR_READ_MEMORY
  2855.         return -1
  2856.     }
  2857.    
  2858.     ErrorLevel := ERROR_OK
  2859.     return Round(fHealth)
  2860. }
  2861.  
  2862. getTargetVehicleTypeByPed(dwPED) {
  2863.     if(!checkHandles())
  2864.         return 0
  2865.    
  2866.     dwAddr := getVehiclePointerByPed(dwPED)
  2867.    
  2868.     if(!dwAddr)
  2869.         return 0
  2870.    
  2871.     cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_TYPE, 1, "Char")
  2872.     if(ErrorLevel) {
  2873.         ErrorLevel := ERROR_READ_MEMORY
  2874.         return 0
  2875.     }
  2876.    
  2877.     ErrorLevel := ERROR_OK
  2878.     if(!cVal)
  2879.     {
  2880.         mid := getVehicleModelId()
  2881.         Loop % oAirplaneModels.MaxIndex()
  2882.         {
  2883.             if(oAirplaneModels[A_Index]==mid)
  2884.                 return 5
  2885.         }
  2886.         return 1
  2887.     }
  2888.     else if(cVal==5)
  2889.         return 2
  2890.     else if(cVal==6)
  2891.         return 3
  2892.     else if(cVal==9)
  2893.     {
  2894.         mid := getVehicleModelId()
  2895.         Loop % oBikeModels.MaxIndex()
  2896.         {
  2897.             if(oBikeModels[A_Index]==mid)
  2898.                 return 6
  2899.         }
  2900.         return 4
  2901.     }
  2902.     return 0
  2903. }
  2904.  
  2905. getTargetVehicleTypeById(dwId) {
  2906.     if(!checkHandles())
  2907.         return 0
  2908.    
  2909.     dwAddr := getVehiclePointerById(dwId)
  2910.    
  2911.     if(!dwAddr)
  2912.         return 0
  2913.    
  2914.     cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_TYPE, 1, "Char")
  2915.     if(ErrorLevel) {
  2916.         ErrorLevel := ERROR_READ_MEMORY
  2917.         return 0
  2918.     }
  2919.    
  2920.     ErrorLevel := ERROR_OK
  2921.     if(!cVal)
  2922.     {
  2923.         mid := getVehicleModelId()
  2924.         Loop % oAirplaneModels.MaxIndex()
  2925.         {
  2926.             if(oAirplaneModels[A_Index]==mid)
  2927.                 return 5
  2928.         }
  2929.         return 1
  2930.     }
  2931.     else if(cVal==5)
  2932.         return 2
  2933.     else if(cVal==6)
  2934.         return 3
  2935.     else if(cVal==9)
  2936.     {
  2937.         mid := getVehicleModelId()
  2938.         Loop % oBikeModels.MaxIndex()
  2939.         {
  2940.             if(oBikeModels[A_Index]==mid)
  2941.                 return 6
  2942.         }
  2943.         return 4
  2944.     }
  2945.     return 0
  2946. }
  2947.  
  2948. getTargetVehicleModelIdByPed(dwPED) {
  2949.     if(!checkHandles())
  2950.         return 0
  2951.    
  2952.     dwAddr := getVehiclePointerByPed(dwPED)
  2953.    
  2954.     if(!dwAddr)
  2955.         return 0
  2956.    
  2957.     sVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_MODEL, 2, "Short")
  2958.     if(ErrorLevel) {
  2959.         ErrorLevel := ERROR_READ_MEMORY
  2960.         return 0
  2961.     }
  2962.    
  2963.     ErrorLevel := ERROR_OK
  2964.     return sVal
  2965. }
  2966.  
  2967. getTargetVehicleModelIdById(dwId) {
  2968.     if(!checkHandles())
  2969.         return 0
  2970.    
  2971.     dwAddr := getVehiclePointerById(dwId)
  2972.    
  2973.     if(!dwAddr)
  2974.         return 0
  2975.    
  2976.     sVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_MODEL, 2, "Short")
  2977.     if(ErrorLevel) {
  2978.         ErrorLevel := ERROR_READ_MEMORY
  2979.         return 0
  2980.     }
  2981.    
  2982.     ErrorLevel := ERROR_OK
  2983.     return sVal
  2984. }
  2985.  
  2986. getTargetVehicleModelNameByPed(dwPED) {
  2987.     id := getTargetVehicleModelIdByPed(dwPED)
  2988.     if(id > 400 && id < 611)
  2989.     {
  2990.         return ovehicleNames[id-399]
  2991.     }
  2992.     return ""
  2993. }
  2994.  
  2995. getTargetVehicleModelNameById(dwId) {
  2996.     id := getTargetVehicleModelIdById(dwId)
  2997.     if(id > 400 && id < 611)
  2998.     {
  2999.         return ovehicleNames[id-399]
  3000.     }
  3001.     return ""
  3002. }
  3003.  
  3004. getTargetVehicleLightStateByPed(dwPED) {
  3005.     if(!checkHandles())
  3006.         return -1
  3007.    
  3008.     dwAddr := getVehiclePointerByPed(dwPED)
  3009.    
  3010.     if(!dwAddr)
  3011.         return -1
  3012.    
  3013.     dwVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_LIGHTSTATE, 4, "Int")
  3014.     if(ErrorLevel) {
  3015.         ErrorLevel := ERROR_READ_MEMORY
  3016.         return -1
  3017.     }
  3018.    
  3019.     ErrorLevel := ERROR_OK
  3020.     return (dwVal>0)
  3021. }
  3022.  
  3023. getTargetVehicleLightStateById(dwId) {
  3024.     if(!checkHandles())
  3025.         return -1
  3026.    
  3027.     dwAddr := getVehiclePointerById(dwId)
  3028.    
  3029.     if(!dwAddr)
  3030.         return -1
  3031.    
  3032.     dwVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_LIGHTSTATE, 4, "Int")
  3033.     if(ErrorLevel) {
  3034.         ErrorLevel := ERROR_READ_MEMORY
  3035.         return -1
  3036.     }
  3037.    
  3038.     ErrorLevel := ERROR_OK
  3039.     return (dwVal>0)
  3040. }
  3041.  
  3042. getTargetVehicleLockStateByPed(dwPED) {
  3043.     if(!checkHandles())
  3044.         return -1
  3045.    
  3046.     dwAddr := getVehiclePointerByPed(dwPED)
  3047.    
  3048.     if(!dwAddr)
  3049.         return -1
  3050.    
  3051.     dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DOORSTATE)
  3052.     if(ErrorLevel) {
  3053.         ErrorLevel := ERROR_READ_MEMORY
  3054.         return -1
  3055.     }
  3056.    
  3057.     ErrorLevel := ERROR_OK
  3058.     return (dwVal==2)
  3059. }
  3060.  
  3061. getTargetVehicleLockStateById(dwId) {
  3062.     if(!checkHandles())
  3063.         return -1
  3064.    
  3065.     dwAddr := getVehiclePointerById(dwId)
  3066.    
  3067.     if(!dwAddr)
  3068.         return -1
  3069.    
  3070.     dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DOORSTATE)
  3071.     if(ErrorLevel) {
  3072.         ErrorLevel := ERROR_READ_MEMORY
  3073.         return -1
  3074.     }
  3075.    
  3076.     ErrorLevel := ERROR_OK
  3077.     return (dwVal==2)
  3078. }
  3079.  
  3080. getTargetVehicleColor1byPed(dwPED) {
  3081.     if(!checkHandles())
  3082.         return 0
  3083.    
  3084.     dwAddr := getVehiclePointerByPed(dwPED)
  3085.    
  3086.     if(!dwAddr)
  3087.         return 0
  3088.        
  3089.     sVal := readMem(hGTA, dwAddr + 1076, 1, "byte")
  3090.        
  3091.     if(ErrorLevel) {
  3092.         ErrorLevel := ERROR_READ_MEMORY
  3093.         return 0
  3094.     }
  3095.    
  3096.     ErrorLevel := ERROR_OK
  3097.     return sVal
  3098. }
  3099.  
  3100. getTargetVehicleColor1byId(dwId) {
  3101.     if(!checkHandles())
  3102.         return 0
  3103.    
  3104.     dwAddr := getVehiclePointerById(dwId)
  3105.    
  3106.     if(!dwAddr)
  3107.         return 0
  3108.        
  3109.     sVal := readMem(hGTA, dwAddr + 1076, 1, "byte")
  3110.        
  3111.     if(ErrorLevel) {
  3112.         ErrorLevel := ERROR_READ_MEMORY
  3113.         return 0
  3114.     }
  3115.    
  3116.     ErrorLevel := ERROR_OK
  3117.     return sVal
  3118. }
  3119.  
  3120. getTargetVehicleColor2byPed(dwPED) {
  3121.     if(!checkHandles())
  3122.         return 0
  3123.    
  3124.     dwAddr := getVehiclePointerByPed(dwPED)
  3125.    
  3126.     if(!dwAddr)
  3127.         return 0
  3128.        
  3129.     sVal := readMem(hGTA, dwAddr + 1077, 1, "byte")
  3130.        
  3131.     if(ErrorLevel) {
  3132.         ErrorLevel := ERROR_READ_MEMORY
  3133.         return 0
  3134.     }
  3135.    
  3136.     ErrorLevel := ERROR_OK
  3137.     return sVal
  3138. }
  3139.  
  3140. getTargetVehicleColor2byId(dwId) {
  3141.     if(!checkHandles())
  3142.         return 0
  3143.    
  3144.     dwAddr := getVehiclePointerById(dwId)
  3145.    
  3146.     if(!dwAddr)
  3147.         return 0
  3148.        
  3149.     sVal := readMem(hGTA, dwAddr + 1077, 1, "byte")
  3150.        
  3151.     if(ErrorLevel) {
  3152.         ErrorLevel := ERROR_READ_MEMORY
  3153.         return 0
  3154.     }
  3155.    
  3156.     ErrorLevel := ERROR_OK
  3157.     return sVal
  3158. }
  3159.  
  3160. getTargetVehicleSpeedByPed(dwPED) {
  3161.     if(!checkHandles())
  3162.         return -1
  3163.  
  3164.     dwAddr := getVehiclePointerByPed(dwPED)
  3165.    
  3166.     fSpeedX := readMem(hGTA, dwAddr + ADDR_VEHICLE_X, 4, "float")
  3167.     fSpeedY := readMem(hGTA, dwAddr + ADDR_VEHICLE_Y, 4, "float")
  3168.     fSpeedZ := readMem(hGTA, dwAddr + ADDR_VEHICLE_Z, 4, "float")
  3169.    
  3170.     fVehicleSpeed :=  sqrt((fSpeedX * fSpeedX) + (fSpeedY * fSpeedY) + (fSpeedZ * fSpeedZ))
  3171.     fVehicleSpeed := (fVehicleSpeed * 100) * 1.43           ;Der Wert "1.43" ist meistens auf jedem Server anders. Die Geschwindigkeit wird somit erhГѓВ¶ht bzw. verringert
  3172.  
  3173.         return fVehicleSpeed
  3174. }
  3175.  
  3176. getTargetVehicleSpeedById(dwId) {
  3177.     if(!checkHandles())
  3178.         return -1
  3179.  
  3180.     dwAddr := getVehiclePointerById(dwId)
  3181.    
  3182.     fSpeedX := readMem(hGTA, dwAddr + ADDR_VEHICLE_X, 4, "float")
  3183.     fSpeedY := readMem(hGTA, dwAddr + ADDR_VEHICLE_Y, 4, "float")
  3184.     fSpeedZ := readMem(hGTA, dwAddr + ADDR_VEHICLE_Z, 4, "float")
  3185.    
  3186.     fVehicleSpeed :=  sqrt((fSpeedX * fSpeedX) + (fSpeedY * fSpeedY) + (fSpeedZ * fSpeedZ))
  3187.     fVehicleSpeed := (fVehicleSpeed * 100) * 1.43           ;Der Wert "1.43" ist meistens auf jedem Server anders. Die Geschwindigkeit wird somit erhГѓВ¶ht bzw. verringert
  3188.  
  3189.         return fVehicleSpeed
  3190. }
  3191. ; ##### Scoreboard-Funktionen #####
  3192.  
  3193. getPlayerNameById(dwId) {
  3194.     dwId += 0
  3195.     dwId := Floor(dwId)
  3196.     if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  3197.         return ""
  3198.    
  3199.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  3200.     {
  3201.         if(oScoreboardData[dwId])
  3202.             return oScoreboardData[dwId].NAME
  3203.         return ""
  3204.     }
  3205.    
  3206.     if(!updateOScoreboardData())
  3207.         return ""
  3208.    
  3209.     if(oScoreboardData[dwId])
  3210.         return oScoreboardData[dwId].NAME
  3211.     return ""
  3212. }
  3213.  
  3214. getPlayerIdByName(wName) {
  3215.     wName := "" wName
  3216.     if(StrLen(wName) < 1 || StrLen(wName) > 24)
  3217.         return -1
  3218.    
  3219.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  3220.     {
  3221.         For i, o in oScoreboardData
  3222.         {
  3223.             if(InStr(o.NAME,wName)==1)
  3224.                 return i
  3225.         }
  3226.         return -1
  3227.     }
  3228.    
  3229.     if(!updateOScoreboardData())
  3230.         return -1
  3231.    
  3232.     For i, o in oScoreboardData
  3233.     {
  3234.         if(InStr(o.NAME,wName)==1)
  3235.             return i
  3236.     }
  3237.     return -1
  3238. }
  3239.  
  3240. getPlayerScoreById(dwId) {
  3241.     dwId += 0
  3242.     dwId := Floor(dwId)
  3243.     if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  3244.         return ""
  3245.    
  3246.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  3247.     {
  3248.         if(oScoreboardData[dwId])
  3249.             return oScoreboardData[dwId].SCORE
  3250.         return ""
  3251.     }
  3252.    
  3253.     if(!updateOScoreboardData())
  3254.         return ""
  3255.    
  3256.     if(oScoreboardData[dwId])
  3257.         return oScoreboardData[dwId].SCORE
  3258.     return ""
  3259. }
  3260.  
  3261. getPlayerPingById(dwId) {
  3262.     dwId += 0
  3263.     dwId := Floor(dwId)
  3264.     if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  3265.         return -1
  3266.        
  3267.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  3268.     {
  3269.         if(oScoreboardData[dwId])
  3270.             return oScoreboardData[dwId].PING
  3271.         return -1
  3272.     }
  3273.    
  3274.     if(!updateOScoreboardData())
  3275.         return -1
  3276.    
  3277.     if(oScoreboardData[dwId])
  3278.         return oScoreboardData[dwId].PING
  3279.     return -1
  3280. }
  3281.  
  3282. isNPCById(dwId) {
  3283.     dwId += 0
  3284.     dwId := Floor(dwId)
  3285.     if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  3286.         return -1
  3287.    
  3288.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  3289.     {
  3290.         if(oScoreboardData[dwId])
  3291.             return oScoreboardData[dwId].ISNPC
  3292.         return -1
  3293.     }
  3294.    
  3295.     if(!updateOScoreboardData())
  3296.         return -1
  3297.    
  3298.     if(oScoreboardData[dwId])
  3299.         return oScoreboardData[dwId].ISNPC
  3300.     return -1
  3301. }
  3302.  
  3303. ; internal stuff
  3304. updateScoreboardDataEx() {
  3305.    
  3306.     if(!checkHandles())
  3307.         return false
  3308.    
  3309.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)            ;g_SAMP
  3310.     if(ErrorLevel || dwAddress==0) {
  3311.         ErrorLevel := ERROR_READ_MEMORY
  3312.         return false
  3313.     }
  3314.    
  3315.     dwFunc := dwSAMP + FUNC_UPDATESCOREBOARD
  3316.    
  3317.     VarSetCapacity(injectData, 11, 0) ;mov + call + retn
  3318.    
  3319.     NumPut(0xB9, injectData, 0, "UChar")
  3320.     NumPut(dwAddress, injectData, 1, "UInt")
  3321.    
  3322.     NumPut(0xE8, injectData, 5, "UChar")
  3323.     offset := dwFunc - (pInjectFunc + 10)
  3324.     NumPut(offset, injectData, 6, "Int")
  3325.     NumPut(0xC3, injectData, 10, "UChar")
  3326.    
  3327.     writeRaw(hGTA, pInjectFunc, &injectData, 11)
  3328.     if(ErrorLevel)
  3329.         return false
  3330.    
  3331.     hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  3332.     if(ErrorLevel)
  3333.         return false
  3334.    
  3335.     waitForSingleObject(hThread, 0xFFFFFFFF)
  3336.    
  3337.     closeProcess(hThread)
  3338.    
  3339.     return true
  3340.    
  3341. }
  3342.  
  3343. ; internal stuff
  3344. updateOScoreboardData() {
  3345.     if(!checkHandles())
  3346.         return 0
  3347.    
  3348.     oScoreboardData := []
  3349.    
  3350.     if(!updateScoreboardDataEx())
  3351.         return 0
  3352.    
  3353.     iRefreshScoreboard := A_TickCount
  3354.    
  3355.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  3356.     if(ErrorLevel || dwAddress==0) {
  3357.         ErrorLevel := ERROR_READ_MEMORY
  3358.         return 0
  3359.     }
  3360.    
  3361.     dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  3362.     if(ErrorLevel || dwAddress==0) {
  3363.         ErrorLevel := ERROR_READ_MEMORY
  3364.         return 0
  3365.     }
  3366.    
  3367.     dwPlayers := readDWORD(hGTA, dwAddress + SAMP_PPOOL_PLAYER_OFFSET)
  3368.     if(ErrorLevel || dwPlayers==0) {
  3369.         ErrorLevel := ERROR_READ_MEMORY
  3370.         return 0
  3371.     }
  3372.    
  3373.     wID := readMem(hGTA, dwPlayers + SAMP_SLOCALPLAYERID_OFFSET, 2, "Short")    ;sLocalPlayerID
  3374.     if(ErrorLevel) {
  3375.         ErrorLevel := ERROR_READ_MEMORY
  3376.         return 0
  3377.     }
  3378.    
  3379.     dwPing := readMem(hGTA, dwPlayers + SAMP_ILOCALPLAYERPING_OFFSET, 4, "Int")
  3380.     if(ErrorLevel) {
  3381.         ErrorLevel := ERROR_READ_MEMORY
  3382.         return 0
  3383.     }
  3384.    
  3385.     dwScore := readMem(hGTA, dwPlayers + SAMP_ILOCALPLAYERSCORE_OFFSET, 4, "Int")
  3386.     if(ErrorLevel) {
  3387.         ErrorLevel := ERROR_READ_MEMORY
  3388.         return 0
  3389.     }
  3390.    
  3391.     dwTemp := readMem(hGTA, dwPlayers + SAMP_ISTRLEN_LOCALPLAYERNAME_OFFSET, 4, "Int")    ;iStrlen_LocalPlayerName
  3392.     if(ErrorLevel) {
  3393.         ErrorLevel := ERROR_READ_MEMORY
  3394.         return 0
  3395.     }
  3396.    
  3397.     sUsername := ""
  3398.     if(dwTemp <= 0xf) {
  3399.         sUsername := readString(hGTA, dwPlayers + SAMP_SZLOCALPLAYERNAME_OFFSET, 16)       ;szLocalPlayerName
  3400.         if(ErrorLevel) {
  3401.             ErrorLevel := ERROR_READ_MEMORY
  3402.             return 0
  3403.         }
  3404.     }
  3405.     else {
  3406.         dwAddress := readDWORD(hGTA, dwPlayers + SAMP_PSZLOCALPLAYERNAME_OFFSET)        ;pszLocalPlayerName
  3407.         if(ErrorLevel) {
  3408.             ErrorLevel := ERROR_READ_MEMORY
  3409.             return 0
  3410.         }
  3411.         sUsername := readString(hGTA, dwAddress, 25)
  3412.         if(ErrorLevel) {
  3413.             ErrorLevel := ERROR_READ_MEMORY
  3414.             return 0
  3415.         }
  3416.     }
  3417.     oScoreboardData[wID] := Object("NAME", sUsername, "ID", wID, "PING", dwPing, "SCORE", dwScore, "ISNPC", 0)
  3418.    
  3419.     Loop, % SAMP_PLAYER_MAX
  3420.     {
  3421.         i := A_Index-1
  3422.        
  3423.         dwRemoteplayer := readDWORD(hGTA, dwPlayers+SAMP_PREMOTEPLAYER_OFFSET+i*4)      ;pRemotePlayer
  3424.         if(ErrorLevel) {
  3425.             ErrorLevel := ERROR_READ_MEMORY
  3426.             return 0
  3427.         }
  3428.        
  3429.         if(dwRemoteplayer==0)
  3430.             continue
  3431.        
  3432.         dwPing := readMem(hGTA, dwRemoteplayer + SAMP_IPING_OFFSET, 4, "Int")
  3433.         if(ErrorLevel) {
  3434.             ErrorLevel := ERROR_READ_MEMORY
  3435.             return 0
  3436.         }
  3437.        
  3438.         dwScore := readMem(hGTA, dwRemoteplayer + SAMP_ISCORE_OFFSET, 4, "Int")
  3439.         if(ErrorLevel) {
  3440.             ErrorLevel := ERROR_READ_MEMORY
  3441.             return 0
  3442.         }
  3443.        
  3444.         dwIsNPC := readMem(hGTA, dwRemoteplayer + SAMP_ISNPC_OFFSET, 4, "Int")
  3445.         if(ErrorLevel) {
  3446.             ErrorLevel := ERROR_READ_MEMORY
  3447.             return 0
  3448.         }
  3449.        
  3450.         dwTemp := readMem(hGTA, dwRemoteplayer + SAMP_ISTRLENNAME___OFFSET, 4, "Int")
  3451.         if(ErrorLevel) {
  3452.             ErrorLevel := ERROR_READ_MEMORY
  3453.             return 0
  3454.         }
  3455.         sUsername := ""
  3456.         if(dwTemp <= 0xf)
  3457.         {
  3458.             sUsername := readString(hGTA, dwRemoteplayer+SAMP_SZPLAYERNAME_OFFSET, 16)
  3459.             if(ErrorLevel) {
  3460.                 ErrorLevel := ERROR_READ_MEMORY
  3461.                 return 0
  3462.             }
  3463.         }
  3464.         else {
  3465.             dwAddress := readDWORD(hGTA, dwRemoteplayer + SAMP_PSZPLAYERNAME_OFFSET)
  3466.             if(ErrorLevel || dwAddress==0) {
  3467.                 ErrorLevel := ERROR_READ_MEMORY
  3468.                 return 0
  3469.             }
  3470.             sUsername := readString(hGTA, dwAddress, 25)
  3471.             if(ErrorLevel) {
  3472.                 ErrorLevel := ERROR_READ_MEMORY
  3473.                 return 0
  3474.             }
  3475.         }
  3476.         o := Object("NAME", sUsername, "ID", i, "PING", dwPing, "SCORE", dwScore, "ISNPC", dwIsNPC)
  3477.         oScoreboardData[i] := o
  3478.        
  3479.         dwRemoteplayerData := readDWORD(hGTA, dwRemoteplayer + 0x0)                ;pPlayerData
  3480.         if(ErrorLevel) {
  3481.             ErrorLevel := ERROR_READ_MEMORY
  3482.             return 0
  3483.         }
  3484.         if(dwRemoteplayerData==0)               ;this ever happen?
  3485.             continue
  3486.                
  3487.                 dwAddress := readDWORD(hGTA, dwRemoteplayerData + 489)        ;iGlobalMarkerLoaded
  3488.         if(ErrorLevel) {
  3489.             ErrorLevel := ERROR_READ_MEMORY
  3490.             return 0
  3491.         }
  3492.                 if(dwAddress)
  3493.                 {
  3494.                         ix := readMem(hGTA, dwRemoteplayerData + 493, 4, "Int")        ;x map
  3495.                         if(ErrorLevel) {
  3496.                                 ErrorLevel := ERROR_READ_MEMORY
  3497.                                 return 0
  3498.                         }
  3499.                         iy := readMem(hGTA, dwRemoteplayerData + 497, 4, "Int")        ;y map
  3500.                         if(ErrorLevel) {
  3501.                                 ErrorLevel := ERROR_READ_MEMORY
  3502.                                 return 0
  3503.                         }
  3504.                         iz := readMem(hGTA, dwRemoteplayerData + 501, 4, "Int")        ;z map
  3505.                         if(ErrorLevel) {
  3506.                                 ErrorLevel := ERROR_READ_MEMORY
  3507.                                 return 0
  3508.                         }
  3509.                         o.MPOS := [ix, iy, iz]
  3510.                 }
  3511.        
  3512.         dwpSAMP_Actor := readDWORD(hGTA, dwRemoteplayerData + 0x0)                ;pSAMP_Actor
  3513.         if(ErrorLevel) {
  3514.             ErrorLevel := ERROR_READ_MEMORY
  3515.             return 0
  3516.         }
  3517.         if(dwpSAMP_Actor==0)               ;not streamed in
  3518.             continue
  3519.  
  3520.         dwPed := readDWORD(hGTA, dwpSAMP_Actor + 676)                ;pGTA_Ped_
  3521.         if(ErrorLevel) {
  3522.             ErrorLevel := ERROR_READ_MEMORY
  3523.             return 0
  3524.         }
  3525.         if(dwPed==0)
  3526.             continue
  3527.         o.PED := dwPed
  3528.                
  3529.                 fHP := readFloat(hGTA, dwRemoteplayerData + 444)
  3530.                 if(ErrorLevel) {
  3531.             ErrorLevel := ERROR_READ_MEMORY
  3532.             return 0
  3533.         }
  3534.                 fARMOR := readFloat(hGTA, dwRemoteplayerData + 440)
  3535.                 if(ErrorLevel) {
  3536.             ErrorLevel := ERROR_READ_MEMORY
  3537.             return 0
  3538.         }
  3539.                 o.HP := fHP
  3540.                 o.ARMOR := fARMOR
  3541.     }
  3542.     ErrorLevel := ERROR_OK
  3543.     return 1
  3544. }
  3545.  
  3546.  
  3547. ; ##### Sonstiges #####
  3548. ; written by David_Luchs %
  3549. ; returns nth message of chatlog (beggining from bottom)
  3550. ; -1 = error
  3551. GetChatLine(Line, ByRef Output, timestamp=0, color=0){
  3552.         chatindex := 0
  3553.         FileRead, file, %A_MyDocuments%GTA San Andreas User FilesCR-MPGenerationCchatlog.txt
  3554.         loop, Parse, file, `n, `r
  3555.         {
  3556.                 if(A_LoopField)
  3557.                         chatindex := A_Index
  3558.         }
  3559.         loop, Parse, file, `n, `r
  3560.         {
  3561.                 if(A_Index = chatindex - line){
  3562.                         output := A_LoopField
  3563.                         break
  3564.                 }
  3565.         }
  3566.         file := ""
  3567.         if(!timestamp)
  3568.                 output := RegExReplace(output, "U)^[d{2}:d{2}:d{2}]")
  3569.         if(!color)
  3570.                 output := RegExReplace(output, "Ui){[a-f0-9]{6}}")
  3571.         return
  3572. }
  3573.  
  3574. ; ##### Spielerfunktionen #####
  3575. getPlayerHealth() {
  3576.     if(!checkHandles())
  3577.         return -1
  3578.    
  3579.     dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  3580.     if(ErrorLevel) {
  3581.         ErrorLevel := ERROR_READ_MEMORY
  3582.         return -1
  3583.     }
  3584.    
  3585.     dwAddr := dwCPedPtr + ADDR_CPED_HPOFF
  3586.     fHealth := readFloat(hGTA, dwAddr)
  3587.     if(ErrorLevel) {
  3588.         ErrorLevel := ERROR_READ_MEMORY
  3589.         return -1
  3590.     }
  3591.    
  3592.     ErrorLevel := ERROR_OK
  3593.     return Round(fHealth)
  3594. }
  3595.  
  3596. getPlayerArmor() {
  3597.     if(!checkHandles())
  3598.         return -1
  3599.    
  3600.     dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  3601.     if(ErrorLevel) {
  3602.         ErrorLevel := ERROR_READ_MEMORY
  3603.         return -1
  3604.     }
  3605.    
  3606.     dwAddr := dwCPedPtr + ADDR_CPED_ARMOROFF
  3607.     fHealth := readFloat(hGTA, dwAddr)
  3608.     if(ErrorLevel) {
  3609.         ErrorLevel := ERROR_READ_MEMORY
  3610.         return -1
  3611.     }
  3612.    
  3613.     ErrorLevel := ERROR_OK
  3614.     return Round(fHealth)
  3615. }
  3616.  
  3617. getPlayerInteriorId() {
  3618.     if(!checkHandles())
  3619.         return -1
  3620.    
  3621.     iid := readMem(hGTA, ADDR_CPED_INTID, 4, "Int")
  3622.     if(ErrorLevel) {
  3623.         ErrorLevel := ERROR_READ_MEMORY
  3624.         return -1
  3625.     }
  3626.    
  3627.     ErrorLevel := ERROR_OK
  3628.     return iid
  3629. }
  3630.  
  3631. getPlayerSkinID() {
  3632.     if(!checkHandles())
  3633.         return -1
  3634.    
  3635.     dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  3636.     if(ErrorLevel) {
  3637.         ErrorLevel := ERROR_READ_MEMORY
  3638.         return -1
  3639.     }
  3640.    
  3641.     dwAddr := dwCPedPtr + ADDR_CPED_SKINIDOFF
  3642.     SkinID := readMem(hGTA, dwAddr, 2, "byte")
  3643.     if(ErrorLevel) {
  3644.         ErrorLevel := ERROR_READ_MEMORY
  3645.         return -1
  3646.     }
  3647.    
  3648.     ErrorLevel := ERROR_OK
  3649.     return SkinID
  3650. }
  3651.  
  3652. getPlayerMoney() {
  3653.     if(!checkHandles())
  3654.         return ""
  3655.    
  3656.     money := readMem(hGTA, ADDR_CPED_MONEY, 4, "Int")
  3657.     if(ErrorLevel) {
  3658.         ErrorLevel := ERROR_READ_MEMORY
  3659.         return ""
  3660.     }
  3661.    
  3662.     ErrorLevel := ERROR_OK
  3663.     return money
  3664. }
  3665.  
  3666. getPlayerWanteds() {
  3667.     if(!checkHandles())
  3668.         return -1
  3669.  
  3670.     dwPtr := 0xB7CD9C
  3671.     dwPtr := readDWORD(hGTA, dwPtr)
  3672.     if(ErrorLevel) {
  3673.         ErrorLevel := ERROR_READ_MEMORY
  3674.         return -1
  3675.     }
  3676.  
  3677.     Wanteds := readDWORD(hGTA, dwPtr)
  3678.     if(ErrorLevel) {
  3679.         ErrorLevel := ERROR_READ_MEMORY
  3680.         return -1
  3681.     }
  3682.  
  3683.     ErrorLevel := ERROR_OK
  3684.     return Wanteds
  3685. }
  3686.  
  3687. getPlayerWeaponId() {
  3688.     if(!checkHandles())
  3689.         return 0
  3690.    
  3691.     WaffenId := readMem(hGTA, 0xBAA410, 4, "byte")
  3692.     if(ErrorLevel) {
  3693.         ErrorLevel := ERROR_READ_MEMORY
  3694.         return -1
  3695.     }
  3696.  
  3697.    return WaffenId
  3698. }
  3699.  
  3700. getPlayerWeaponName() {
  3701.     id := getPlayerWeaponId()
  3702.     if(id >= 0 && id < 44)
  3703.     {
  3704.         return oweaponNames[id+1]
  3705.     }
  3706.     return ""
  3707. }
  3708.  
  3709. getPlayerState() {
  3710.     if(!checkHandles())
  3711.         return -1
  3712.    
  3713.     dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  3714.     if(ErrorLevel) {
  3715.         ErrorLevel := ERROR_READ_MEMORY
  3716.         return -1
  3717.     }
  3718.    
  3719.     State := readDWORD(hGTA, dwCPedPtr + 0x530)
  3720.     if(ErrorLevel) {
  3721.         ErrorLevel := ERROR_READ_MEMORY
  3722.         return -1
  3723.     }
  3724.    
  3725.     ErrorLevel := ERROR_OK
  3726.     return State
  3727. }
  3728.  
  3729. IsPlayerInMenu() {
  3730.     if(!checkHandles())
  3731.         return -1
  3732.    
  3733.     IsInMenu := readMem(hGTA, 0xBA67A4, 4, "byte")
  3734.     if(ErrorLevel) {
  3735.         ErrorLevel := ERROR_READ_MEMORY
  3736.         return -1
  3737.     }
  3738.    
  3739.     ErrorLevel := ERROR_OK
  3740.     return IsInMenu
  3741. }
  3742.  
  3743. getPlayerMapPosX() {
  3744.     if(!checkHandles())
  3745.         return -1
  3746.    
  3747.     MapPosX := readFloat(hGTA, 0xBA67B8)
  3748.     if(ErrorLevel) {
  3749.         ErrorLevel := ERROR_READ_MEMORY
  3750.         return -1
  3751.     }
  3752.    
  3753.     ErrorLevel := ERROR_OK
  3754.     return MapPosX
  3755. }
  3756.  
  3757. getPlayerMapPosY() {
  3758.     if(!checkHandles())
  3759.         return -1
  3760.    
  3761.     MapPosY := readFloat(hGTA, 0xBA67BC)
  3762.     if(ErrorLevel) {
  3763.         ErrorLevel := ERROR_READ_MEMORY
  3764.         return -1
  3765.     }
  3766.    
  3767.     ErrorLevel := ERROR_OK
  3768.     return MapPosY
  3769. }
  3770.  
  3771. getPlayerMapZoom() {
  3772.     if(!checkHandles())
  3773.         return -1
  3774.    
  3775.     MapZoom := readFloat(hGTA, 0xBA67AC)
  3776.     if(ErrorLevel) {
  3777.         ErrorLevel := ERROR_READ_MEMORY
  3778.         return -1
  3779.     }
  3780.    
  3781.     ErrorLevel := ERROR_OK
  3782.     return MapZoom
  3783. }
  3784.  
  3785. IsPlayerFreezed() {
  3786.     if(!checkHandles())
  3787.         return -1
  3788.    
  3789.     dwGTA := getModuleBaseAddress("grand_theft_auto_san_andreas.dll", hGTA)
  3790.     IPF := readMem(hGTA, dwGTA + 0x690495, 2, "byte")    
  3791.     if(ErrorLevel) {
  3792.         ErrorLevel := ERROR_READ_MEMORY
  3793.         return -1
  3794.     }
  3795.    
  3796.     ErrorLevel := ERROR_OK    
  3797.     return IPF
  3798. }
  3799.  
  3800. ; ##### Fahrzeugfunktionen #####
  3801.  
  3802. isPlayerInAnyVehicle()
  3803. {
  3804.     if(!checkHandles())
  3805.         return -1
  3806.    
  3807.     dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  3808.     if(ErrorLevel) {
  3809.         ErrorLevel := ERROR_READ_MEMORY
  3810.         return -1
  3811.     }
  3812.    
  3813.     return (dwVehPtr > 0)
  3814. }
  3815.  
  3816. isPlayerDriver() {
  3817.     if(!checkHandles())
  3818.         return -1
  3819.    
  3820.     dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  3821.     if(ErrorLevel) {
  3822.         ErrorLevel := ERROR_READ_MEMORY
  3823.         return -1
  3824.     }
  3825.    
  3826.     if(!dwAddr)
  3827.         return -1
  3828.    
  3829.     dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  3830.     if(ErrorLevel) {
  3831.         ErrorLevel := ERROR_READ_MEMORY
  3832.         return -1
  3833.     }
  3834.    
  3835.     dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DRIVER)
  3836.     if(ErrorLevel) {
  3837.         ErrorLevel := ERROR_READ_MEMORY
  3838.         return -1
  3839.     }
  3840.    
  3841.     ErrorLevel := ERROR_OK
  3842.     return (dwVal==dwCPedPtr)
  3843. }
  3844.  
  3845. getVehicleHealth() {
  3846.     if(!checkHandles())
  3847.         return -1
  3848.    
  3849.     dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  3850.     if(ErrorLevel) {
  3851.         ErrorLevel := ERROR_READ_MEMORY
  3852.         return -1
  3853.     }
  3854.    
  3855.     dwAddr := dwVehPtr + ADDR_VEHICLE_HPOFF
  3856.     fHealth := readFloat(hGTA, dwAddr)
  3857.     if(ErrorLevel) {
  3858.         ErrorLevel := ERROR_READ_MEMORY
  3859.         return -1
  3860.     }
  3861.    
  3862.     ErrorLevel := ERROR_OK
  3863.     return Round(fHealth)
  3864. }
  3865.  
  3866. getVehicleType() {
  3867.     if(!checkHandles())
  3868.         return 0
  3869.    
  3870.     dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  3871.     if(ErrorLevel) {
  3872.         ErrorLevel := ERROR_READ_MEMORY
  3873.         return 0
  3874.     }
  3875.    
  3876.     if(!dwAddr)
  3877.         return 0
  3878.    
  3879.     cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_TYPE, 1, "Char")
  3880.     if(ErrorLevel) {
  3881.         ErrorLevel := ERROR_READ_MEMORY
  3882.         return 0
  3883.     }
  3884.    
  3885.     ErrorLevel := ERROR_OK
  3886.     if(!cVal)
  3887.     {
  3888.         mid := getVehicleModelId()
  3889.         Loop % oAirplaneModels.MaxIndex()
  3890.         {
  3891.             if(oAirplaneModels[A_Index]==mid)
  3892.                 return 5
  3893.         }
  3894.         return 1
  3895.     }
  3896.     else if(cVal==5)
  3897.         return 2
  3898.     else if(cVal==6)
  3899.         return 3
  3900.     else if(cVal==9)
  3901.     {
  3902.         mid := getVehicleModelId()
  3903.         Loop % oBikeModels.MaxIndex()
  3904.         {
  3905.             if(oBikeModels[A_Index]==mid)
  3906.                 return 6
  3907.         }
  3908.         return 4
  3909.     }
  3910.     return 0
  3911. }
  3912.  
  3913. getVehicleModelId() {
  3914.     if(!checkHandles())
  3915.         return 0
  3916.    
  3917.     dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  3918.     if(ErrorLevel) {
  3919.         ErrorLevel := ERROR_READ_MEMORY
  3920.         return 0
  3921.     }
  3922.    
  3923.     if(!dwAddr)
  3924.         return 0
  3925.    
  3926.     sVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_MODEL, 2, "Short")
  3927.     if(ErrorLevel) {
  3928.         ErrorLevel := ERROR_READ_MEMORY
  3929.         return 0
  3930.     }
  3931.    
  3932.     ErrorLevel := ERROR_OK
  3933.     return sVal
  3934. }
  3935.  
  3936. getVehicleModelName() {
  3937.     id:=getVehicleModelId()
  3938.     if(id > 400 && id < 611)
  3939.     {
  3940.         return ovehicleNames[id-399]
  3941.     }
  3942.     return ""
  3943. }
  3944.  
  3945. getVehicleLightState() {
  3946.     if(!checkHandles())
  3947.         return -1
  3948.    
  3949.     dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  3950.     if(ErrorLevel) {
  3951.         ErrorLevel := ERROR_READ_MEMORY
  3952.         return -1
  3953.     }
  3954.    
  3955.     if(!dwAddr)
  3956.         return -1
  3957.    
  3958.     dwVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_LIGHTSTATE, 4, "Int")
  3959.     if(ErrorLevel) {
  3960.         ErrorLevel := ERROR_READ_MEMORY
  3961.         return -1
  3962.     }
  3963.    
  3964.     ErrorLevel := ERROR_OK
  3965.     return (dwVal>0)
  3966. }
  3967.  
  3968.  
  3969. getVehicleEngineState() {
  3970.     if(!checkHandles())
  3971.         return -1
  3972.    
  3973.     dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  3974.     if(ErrorLevel) {
  3975.         ErrorLevel := ERROR_READ_MEMORY
  3976.         return -1
  3977.     }
  3978.    
  3979.     if(!dwAddr)
  3980.         return -1
  3981.    
  3982.     cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_ENGINESTATE, 1, "Char")
  3983.     if(ErrorLevel) {
  3984.         ErrorLevel := ERROR_READ_MEMORY
  3985.         return -1
  3986.     }
  3987.    
  3988.     ErrorLevel := ERROR_OK
  3989.     return (cVal==24 || cVal==56 || cVal==88 || cVal==120)
  3990. }
  3991.  
  3992.  
  3993. getVehicleSirenState() {
  3994.     if(!checkHandles())
  3995.         return -1
  3996.    
  3997.     dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  3998.     if(ErrorLevel) {
  3999.         ErrorLevel := ERROR_READ_MEMORY
  4000.         return -1
  4001.     }
  4002.    
  4003.     if(!dwAddr)
  4004.         return -1
  4005.  
  4006.     cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_SIRENSTATE, 1, "Char")
  4007.     if(ErrorLevel) {
  4008.         ErrorLevel := ERROR_READ_MEMORY
  4009.         return -1
  4010.     }
  4011.    
  4012.     ErrorLevel := ERROR_OK
  4013.     return (cVal==-48)
  4014. }
  4015.  
  4016. getVehicleLockState() {
  4017.     if(!checkHandles())
  4018.         return -1
  4019.    
  4020.     dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
  4021.     if(ErrorLevel) {
  4022.         ErrorLevel := ERROR_READ_MEMORY
  4023.         return -1
  4024.     }
  4025.    
  4026.     if(!dwAddr)
  4027.         return -1
  4028.    
  4029.     dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DOORSTATE)
  4030.   &n