#SingleInstance force
; ######################
; #### CRMP UDF R1 #####
; # CRMP Version: 0.3e #
; ######################
; Переводил: Revalto
; SAMPUDF -> CRMPUDF
; ####################
; Samp-udf-addon
global ADDR_SET_POSITION := 0xB7CD98
global ADDR_SET_POSITION_CAR := 0xBA18FC
global ADDR_SET_POSITION_OFFSET := 0x14
global ADDR_SET_POSITION_X_OFFSET := 0x30
global ADDR_SET_POSITION_Y_OFFSET := 0x34
global ADDR_SET_POSITION_Z_OFFSET := 0x38
global ADDR_SET_INTERIOR_OFFSET := 0xB72914
global SAMP_SZIP_OFFSET := 0x20
global SAMP_SZHOSTNAME_OFFSET := 0x121
global SAMP_INFO_SETTINGS_OFFSET := 0x3C5
; ErrorLevels
global ERROR_OK := 0
global ERROR_PROCESS_NOT_FOUND := 1
global ERROR_OPEN_PROCESS := 2
global ERROR_INVALID_HANDLE := 3
global ERROR_MODULE_NOT_FOUND := 4
global ERROR_ENUM_PROCESS_MODULES := 5
global ERROR_ZONE_NOT_FOUND := 6
global ERROR_CITY_NOT_FOUND := 7
global ERROR_READ_MEMORY := 8
global ERROR_WRITE_MEMORY := 9
global ERROR_ALLOC_MEMORY := 10
global ERROR_FREE_MEMORY := 11
global ERROR_WAIT_FOR_OBJECT := 12
global ERROR_CREATE_THREAD := 13
; GTA Addresses
global ADDR_ZONECODE := 0xA49AD4 ;Player Zone
global ADDR_POSITION_X := 0xB6F2E4 ;Player X Position
global ADDR_POSITION_Y := 0xB6F2E8 ;Player Y Position
global ADDR_POSITION_Z := 0xB6F2EC ;Player Z Position
global ADDR_CPED_PTR := 0xB6F5F0 ;Player CPED Pointer
global ADDR_CPED_HPOFF := 0x540 ;Player Health
global ADDR_CPED_ARMOROFF := 0x548 ;Player Armour
global ADDR_CPED_MONEY := 0x0B7CE54 ;Player Money
global ADDR_CPED_INTID := 0xA4ACE8 ;Player Interior-ID
global ADDR_CPED_SKINIDOFF := 0x22 ;Player Skin-ID
;
global ADDR_VEHICLE_PTR := 0xBA18FC ;Vehicle CPED Pointer
global ADDR_VEHICLE_HPOFF := 0x4C0 ;Vehicle Health
global ADDR_VEHICLE_DOORSTATE := 0x4F8 ;Vehicle Door Status
global ADDR_VEHICLE_ENGINESTATE := 0x428 ;Vehicle Engine Status
global ADDR_VEHICLE_SIRENSTATE := 0x1069
global ADDR_VEHICLE_SIRENSTATE2 := 0x1300
global ADDR_VEHICLE_LIGHTSTATE := 0x584 ;Vehicle Light Status
global ADDR_VEHICLE_MODEL := 0x22 ;Vehicle Car-ID & Car-Name
global ADDR_VEHICLE_TYPE := 0x590 ;Vehicle Typ-ID (1 = Car)
global ADDR_VEHICLE_DRIVER := 0x460 ;Vehicle Driver
global ADDR_VEHICLE_X := 0x44 ;Vehicle Speed X
global ADDR_VEHICLE_Y := 0x48 ;Vehicle Speed Y
global ADDR_VEHICLE_Z := 0x4C ;Vehicle Speed Z
global oAirplaneModels := [417, 425, 447, 460, 469, 476, 487, 488, 497, 511, 512, 513, 519, 520, 548, 553, 563, 577, 592, 593]
global oBikeModels := [481,509,510]
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"]
global oweaponNames := ["Кулак","Кастет","Клюшку для гольфа","Полицейскую дубинку","Нож","Бейсбольную биту","Лопату","Кий","Мачете","Бензопилу","Двухсторонний дилдо","Дилдо","Вибратор","Серебряный вибратор","Цветы","Трость","Гранату","Дымовую шашку","Коктейль Молотова", "", "", "", "Пистолет","Пистолет с глушителем","Пистолет Макарова","Помповое ружьё","Обрез","Многозарядное ружьё","Узи","MP5","AK-47","M4","Tec-9","Охотничье ружье","Снайперскую винтовку","РПГ-7","HS Rocket","Flamethrower","Minigun","Satchel Charge","Detonator","Баллончик с краской","Огнетушитель","Фотоаппарат","Night Vis Goggles","Thermal Goggles","Parachute"]
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"]
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"]
; SAMP Addresses
global ADDR_SAMP_INCHAT_PTR := 0x21a10c
global ADDR_SAMP_INCHAT_PTR_OFF := 0x55
global ADDR_SAMP_USERNAME := 0x219A6F
global FUNC_SAMP_SENDCMD := 0x62070 ;0x60910
global FUNC_SAMP_SENDSAY := 0x4A10 ;0x49F0
global FUNC_SAMP_SHOWGAMETEXT := 0x91A40
global FUNC_SAMP_PLAYAUDIOSTR := 0x62da0
global FUNC_SAMP_STOPAUDIOSTR := 0x629a0
global FUNC_SAMP_ADDTOCHATWND := 0x60C50 ; CR:MP 0.3e | Работает
global ADDR_SAMP_CHATMSG_PTR := 0x20DFD8 ; CR:MP 0.3e | Работает
; ########################## Dialog Styles ##########################
global DIALOG_STYLE_MSGBOX := 0
global DIALOG_STYLE_INPUT := 1
global DIALOG_STYLE_LIST := 2
global DIALOG_STYLE_PASSWORD := 3
global DIALOG_STYLE_TABLIST := 4
global DIALOG_STYLE_TABLIST_HEADERS := 5
; ######################### Dialog Structure #########################
global SAMP_DIALOG_LINENUMBER_OFFSET := 0x140
global SAMP_DIALOG_STRUCT_PTR := 0x20DFAC ; | Работает
global SAMP_DIALOG_PTR1_OFFSET := 0x1C ; | Работает
global SAMP_DIALOG_LINES_OFFSET := 0x44C ; | Работает
global SAMP_DIALOG_INDEX_OFFSET := 0x443 ; | Работает
global SAMP_DIALOG_BUTTON_HOVERING_OFFSET := 0x465 ; | Работает
global SAMP_DIALOG_BUTTON_CLICKED_OFFSET := 0x466 ; | Работает
global SAMP_DIALOG_PTR2_OFFSET := 0x20 ; | Работает
global SAMP_DIALOG_LINECOUNT_OFFSET := 0x150 ; | Работает
global SAMP_DIALOG_OPEN_OFFSET := 0x28 ; | Работает
global SAMP_DIALOG_STYLE_OFFSET := 0x2C ; | Работает
global SAMP_DIALOG_ID_OFFSET := 0x30 ; | Работает
global SAMP_DIALOG_TEXT := 0x12D8F8
global SAMP_DIALOG_TEXT_PTR_OFFSET := 0x34
global SAMP_DIALOG_CAPTION_OFFSET := 0x40
global FUNC_SAMP_SHOWDIALOG := 0x6B9C0 ;0x13A270 ;
global FUNC_SAMP_CLOSEDIALOG := 0x6C040
global SAMP_CHAT_SHOW := 0x21A0E8
global FUNC_UPDATESCOREBOARD := 0x8A10
global SAMP_INFO_OFFSET := 0x21A0F8
global ADDR_SAMP_CRASHREPORT := 0x5CF2C
global SAMP_PPOOLS_OFFSET := 0x3CD
global SAMP_PPOOL_PLAYER_OFFSET := 0x18
global SAMP_SLOCALPLAYERID_OFFSET := 0x4
global SAMP_ISTRLEN_LOCALPLAYERNAME_OFFSET := 0x1A
global SAMP_SZLOCALPLAYERNAME_OFFSET := 0xA
global SAMP_PSZLOCALPLAYERNAME_OFFSET := 0xA
global SAMP_PREMOTEPLAYER_OFFSET := 0x2E
global SAMP_ISTRLENNAME___OFFSET := 0x1C
global SAMP_SZPLAYERNAME_OFFSET := 0xC
global SAMP_PSZPLAYERNAME_OFFSET := 0xC
global SAMP_ILOCALPLAYERPING_OFFSET := 0x26
global SAMP_ILOCALPLAYERSCORE_OFFSET := 0x2A
global SAMP_IPING_OFFSET := 0x28
global SAMP_ISCORE_OFFSET := 0x24
global SAMP_ISNPC_OFFSET := 0x4
global SAMP_PLAYER_MAX := 1004
global CheckpointCheck := 0xC7DEEA
global rmaddrs := [0xC7DEC8, 0xC7DECC, 0xC7DED0]
; Sizes
global SIZE_SAMP_CHATMSG := 0xFC
; Internal
global hGTA := 0x0
global dwGTAPID := 0x0
global dwSAMP := 0x0
global pMemory := 0x0
global pParam1 := 0x0
global pParam2 := 0x0
global pParam3 := 0x0
global pParam4 := 0x0
global pParam5 := 0x0
global pInjectFunc := 0x0
global nZone := 1
global nCity := 1
global nPost := 1
global bInitZaC := 0
global iRefreshScoreboard := 0
global oScoreboardData := ""
global iRefreshHandles := 0
global iUpdateTick := 2500 ;time in ms, used for getPlayerNameById etc. to refresh data
; #########################################################################################################################################################
; #
; # - IsSAMPAvailable() - Состояние SAMP (0 - Запущен, 1 - Выключен) ; Не работает
; # - isInChat() - Открыт ли чат (0 - нет, 1 - да) ; Не работает
; # - getUsername() - Выводит твой ник
; # - getId() - Выводит твой ид
; # - SendChat(wText) - Отправка сообщения в чат не открывая его(через память) ; Работает
; # - addChatMessage(wText) - Отправить фейк сообщение в чат ; Работает
; # - showGameText(wText, dwTime, dwTextsize) - Показать GUI текст (не работает с русским языком) ; Не проверял
; # - playAudioStream(wUrl) - Проигрывает песню по url ; Не проверял
; # - stopAudioStream() - Останавливает проигрывание ; Не проверял
; # - GetChatLine(Line, Output) - Вывод строки из чат лога (Line=0 - Это последняя строка) (Output - вывод текста) ; Не проверял
; #
; # - blockChatInput() - Заблокировать писать в чат ; Работает
; # - unBlockChatInput() - Разрешить писать в чат (обратное предыдущему) ; Работает
; ###############################################################################################################################
; #
; # - getServerName() - Название сервера ; Не работает
; # - getServerIP() - IP сервера ; Не работает
; # - getServerPort() - Порт сервера ; Не работает
; # - CountOnlinePlayers() - Кол-во человек на сервере ; Не работает
; #
; ###############################################################################################################################
; #
; # - getWeatherID() - ИД погоды ; Не проверял
; # - getWeatherName() - Название погоды ; Не проверял
; #
; ###############################################################################################################################
; #
; # - patchRadio() (interner stuff) ; Не проверял
; # - unPatchRadio() (interner stuff) ; Не проверял
; #
; ###############################################################################################################################
; #
; # - setDialogState(0) - Скрыть диалог ; | Работает
; # - setDialogState(1) - Отобразить скрытый диалог ; | Работает
; # - isDialogOpen() - Если открыт диалог 1, если не открыт 0 ; | Работает
; # - getDialogStyle() - Стиль диалога 0-5 ; | Работает
; # - getDialogID() - Ид диалога ; | Работает
; # - setDialogID(id) - Установить ид диалогу ; | Не тестировал
; # - getDialogIndex() - Вывод выбраной линии (число) ; | Для чего она?)
; # - getDialogLineNumber() - Вывод выбраной линии (число) Замена getDialogIndex() ; | Работает
; # - getDialogCaption() - Вывод названия диалога ; | Работает
; # - getDialogText() - Вывод текста из диалога; | Работает
; # - getDialogLineCount() - Всего строк в диалоге ; | Не коректно
; # - getDialogLine(index) - Выводит текст из строки ; | Работает
; # - getDialogLines() - Возвращает массив строк с диалога ; | Не тестировал
; # - isDialogButton1Selected() - PrГјft, ob Button1 des Dialogs ausgewГ¤hlt ist ; | Не тестировал
; # - getDialogStructPtr() - Liest den Base Pointer zur Dialogstruktur aus (intern genutzt) ; | Работает
; # - showDialog(style, caption, text, button1, button2, id) - Показывает визуальный диалог ; | Не работает
; #
; ###############################################################################################################################
; #
; # - getTargetPed(dwPED) - Возвращает PED ID, по таргету
; # - getPedById(dwId) - Возвращает PED ID по id игрока
; # - getIdByPed(dwId) - Ид по таргету (getIdByPed(getTargetPed()))
; # - getStreamedInPlayersInfo() - Получить информацию об игроках в радиусе стрима
; # - callFuncForAllStreamedInPlayers() - Получить всю информацию об игроках в радиусе стрима
; # - getDist(pos1,pos2) - Получить дистанцию между двумя координатами
; # - getClosestPlayerPed() - Возвращает PED ID ближайшего игрока
; # - getClosestPlayerId() - Возвращает id ближайшего игрока
; # - getPedCoordinates(dwPED) - Возвращает кординаты (в зоне стрима) по PED ID
; # - getPlayerPosById(dwId) - Возвращает позицию игрока по id
; # - getTargetPlayerSkinIdByPed(dwPED) - Возвращает id скина по PED ID
; # - getTargetPlayerSkinIdById(dwId) - Возвращает id скина по id игрока
; # - calcScreenCoors(fX,fY,fZ) - Возвращает массив координат [fX,fY,fZ] относительно экрана
; #
; # - getVehiclePointerByPed(dwPED) - Возвращает указатель на транспорт по PED ID
; # - getVehiclePointerById(dwId) - Возвращает указатель на транспорт по id игрока
; # - isTargetInAnyVehicleByPed(dwPED) - Проверяет находится ли игрок в транспорте по PED ID
; # - isTargetInAnyVehicleById(dwId) - Проверяет находится ли игрок в транспорте по id игрока
; # - getTargetVehicleHealthByPed(dwPED) - Возвращает hp транспорта по PED ID
; # - getTargetVehicleHealthById(dwId) - Возвращает hp транспорта по id игрока
; # - getTargetVehicleTypeByPed(dwPED) - Возвращает тип транспорта по PED ID (возвращает число, а не название)
; # - getTargetVehicleTypeById(dwId) - Возвращает тип транспорта по id игрока (возвращает число, а не название)
; # - getTargetVehicleModelIdByPed(dwPED) - Возвращает номер модели транспорта по PED ID
; # - getTargetVehicleModelIdById(dwId) - Возвращает номер модели транспорта по id игрока
; # - getTargetVehicleModelNameByPed(dwPED) - Возвращает название модели транспорта по PED ID
; # - getTargetVehicleModelNameById(dwId) - Возвращает название модели транспорта по id игрока
; # - getTargetVehicleLightStateByPed(dwPED) - Возвращает состояние света транспорта по PED ID (вкл./выкл.)
; # - getTargetVehicleLightStateById(dwId) - Возвращает состояние света транспорта по id игрока (вкл./выкл.)
; # - getTargetVehicleEngineStateByPed(dwPED) - Возвращает состояние мотора транспорта по PED ID (вкл./выкл.)
; # - getTargetVehicleEngineStateById(dwId) - Возвращает состояние мотора транспорта по id игрока (вкл./выкл.)
; # - getTargetVehicleLockStateByPed(dwPED) - Возвращает состояние дверей транспорта по PED ID (закрыты/открыты)
; # - getTargetVehicleLockStateById(dwId) - Возвращает состояние дверей транспорта по id игрока (закрыты/открыты)
; # - getTargetVehicleColor1ByPed(dwPED) - Возвращает 1-й цвет транспорта по PED ID
; # - getTargetVehicleColor1ById(dwId) - Возвращает 1-й цвет транспорта по id игрока
; # - getTargetVehicleColor2ByPed(dwPED) - Возвращает 2-й цвет транспорта по PED ID
; # - getTargetVehicleColor2ById(dwId) - Возвращает 2-й цвет транспорта по id игрока
; # - getTargetVehicleSpeedByPed(dwPED) - Возвращает текущую скорость транспорта по PED ID
; # - getTargetVehicleSpeedById(dwId) - Возвращает текущую скорость транспорта по id игрока
; #
; ############################################################################################################################################ ;
; # # ;
; # - getPlayerScoreById(dwId) - Уровень игрока по ID
; # - getPlayerPingById(dwId) - Пинг по ID
; # - getPlayerNameById(dwId) - Ник по ID
; # - getPlayerIdByName(wName) - ID по Нику
; # - updateScoreboardDataEx() - Обновить информацию в табе
; # - updateOScoreboardData() - Обновить информацию в табе
; # - isNPCById(dwId) - Являеться ли данный ид NPC или нет
; # # ;
; ############################################################################################################################################ ;
; # # ;
; # - getWeaponAmmo() - 1) Ammo - возвращает в переменную общее количество патрон.
; # 2) Clip - возвращает в переменную количество патрон в магазине
; # - isPlayerCrouch() - Состояние персонажа (1 - сидит, 0 - стоит, -1 - не заспанен)
; # - setHP(hp) - Изменить себе ХП
; # - getPlayerHealth() - Показывает кол-во хп
; # - getPlayerArmor() - Показывает кол-во брони
; # - getPlayerInteriorId() - ID интерьера в котором вы находитесь
; # - getPlayerSkinId() - Показывает ID вашего скина
; # - getPlayerMoney() - Показывает кол-во денег
; # - getPlayerWanteds() - Показывает кол-во звезд
; # - getPlayerWeaponId() - Показывает ID оружия в руках
; # - getPlayerWeaponName() - Показывает название оружия в руках
; # - getPlayerState() - Возвращает состояние локального игрока (возвращает число)
; # - getPlayerMapPosX() - Позиция персонажа по координате X
; # - getPlayerMapPosY() - Позиция персонажа по координате Y
; # - getPlayerMapZoom() - Определяет масштаб на карте в меню
; # - IsPlayerFreezed() - Определеяет заморожен ли игрок (0-Не заморожен, 1-Заморожен)
; # # ;
; ############################################################################################################################################ ;
; # # ;
; # - isPlayerInAnyVehicle() - Находитесь ли вы в автомобиле (0-Нет, 1-Да)
; # - getVehicleHealth() - Кол-во HP у машины в которой вы находитесь
; # - isPlayerDriver() - (-1 Вы не в автомобиле, 0 - Вы на посажирском сиденье, 1 - Вы водитель)
; # - getVehicleType() - Тип автомобиля в котором вы находитесь
; # - getVehicleModelId() - ID машины в которой находитесь
; # - getVehicleModelName() - Название машины
; # - getVehicleLightState() - Включены ли фары машины в которой находитесь
; # - getVehicleEngineState() - Заведен ли двигатель
; # - getVehicleLockState() - Закрыт ли автомобиль
; # - getVehicleColor1() - Цвет 1 машины
; # - getVehicleColor2() - Цвет 2 машины
; # - getVehicleSpeed() - Скорость автомобиля
; # - getPlayerRadiostationID() - Ид радиостанции в автомобиле
; # - getPlayerRadiostationName() - Название радиостанции в автомобиле
; # # ;
; ############################################################################################################################################ ;
; # # ;
; # - getCoordinates() - Вывод координат на которых находитесь # ;
; # - getPlayerPos(X,Y,Z) - Вывод координат на которых вы находитесь в переменные # ;
; # # ;
; ############################################################################################################################################ ;
; # # ;
; # - initZonesAndCities() - Инициализация районов и городов карты
; # - calculateZone(X, Y, Z) - Возвращает название района по координатам
; # - calculateCity(X, Y, Z) - Возвращает название города по координатам
; # - getCurrentZonecode() - ..:: НЕ РАБОТАЕТ ::..
; # - AddZone(Name, X1, Y1, Z1, X2, Y2, Z2) - Добавление нового района
; # - AddCity(Name, X1, Y1, Z1, X2, Y2, Z2) - Добавление нового города
; # - IsPlayerInRangeOfPoint(X, Y, Z, Radius) - Проверяет находится ли локальный игрок в радиусе 3D координат
; # - IsPlayerInRangeOfPoint2D(X, Y, Radius) - Проверяет находится ли локальный игрок в радиусе 2D координат
; # - getPlayerZone() - Возвращает название района локального игрока
; # - getPlayerCity() - Возвращает название города локального игрока
; # # ;
; ############################################################################################################################################ ;
; # # ;
; # - checkHandles() # ;
; # - AntiCrash() # ;
; # # ;
; ############################################################################################################################################ ;
; # Функции для работы с памятью # ;
; # # ;
; # - checkHandles() # ;
; # - refreshGTA() # ;
; # - refreshSAMP() # ;
; # - refreshMemory() # ;
; # - getPID(szWindow) # ;
; # - openProcess(dwPID, dwRights) # ;
; # - closeProcess(hProcess) # ;
; # - getModuleBaseAddress(sModule, dwPID) # ;
; # - readString(hProcess, dwAddress, dwLen) # ;
; # - readFloat(hProcess, dwAddress) # ;
; # - readDWORD(hProcess, dwAddress) # ;
; # - readMem(hProcess, dwAddress, dwLen=4, type="UInt") # ;
; # - writeString(hProcess, dwAddress, wString) # ;
; # - writeRaw(hProcess, dwAddress, data, dwLen) # ;
; # - Memory_ReadByte(process_handle, address) # ;
; # - callWithParams(hProcess, dwFunc, aParams, bCleanupStack = true) # ;
; # - virtualAllocEx(hProcess, dwSize, flAllocationType, flProtect) # ;
; # - virtualFreeEx(hProcess, lpAddress, dwSize, dwFreeType) # ;
; # - createRemoteThread(hProcess, lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, # ;
; # - dwCreationFlags, lpThreadId) # ;
; # - waitForSingleObject(hThread, dwMilliseconds) # ;
; # - __ansiToUnicode(sString, nLen = 0) # ;
; # - __unicodeToAnsi(wString, nLen = 0) # ;
; ############################################################################################################################################ ;
; # # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # by MurKotik # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # - setCoordinates(x, y, z, Interior) - Телепорт персонажа # ;
; # - getIP() - Выдаёт IP Адрес сервера # ;
; # - setIP(IP) - Меняет IP Адрес Сервера (Не доработан) # ;
; # - getHostname() - Выдаёт Имя сервера # ;
; # - setUsername(Username) - Установить новый Ник (Не доработан) # ;
; # - colorhud(Цвет) - Меняет зелёный цвет в игре на указаный # ;
; # - setTime(hour) - Устанавливает время на сервере # ;
; # - getSkinID() - Выдаёт ID Скина вашего персоажа # ;
; # - getDialogTitle() - Выдаёт Заголовок последнего диалога # ;
; # - getPlayerColor(id) - Выдаёт ID Цвета ника игрока по ID # ;
; # - setPlayerColor(id,color) - Устанавливает цвет ника игроку по его ID # ;
; # - colorToStr(color) - Конвертация цвета из десятичной в шестнадцатиричную # ;
; # - getWeaponId() - Выдаёт ID оружия вашего персонаха # ;
; # - restartGameEx() - Рестарт игры (Не отключает от сервера) # ;
; # - setrestart() - Установить рестартинг (применить) # ;
; # - disconnectEx() - Отключение от сервера # ;
; # - WriteProcessMemory(title,addresse,wert,size) - Работа с пресетам # ;
; # - writeFloat(hProcess, dwAddress, wFloat) - Работа с памятью процесса # ;
; # - writeByte(hProcess, dwAddress, wInt) - Работа с памятью процесса # ;
; # - FloatToHex(value) - Перевот из Float в Hex # ;
; # - IntToHex(int) - Выдаёт интерьер персонажа # ;
; # - addChatMessageEx(Color, wText) - Фэйк сообщение с покраской timstamp # ;
; # - connect(IP) - Подключение к серверу по его IP (Пока что без смены Порта) # ;
; # - HexToDec(str) - Перевод из Hex в Dec (Строковых значений) # ;
; # - setWeather(id) - Установить погоду # ;
; # # ;
; ############################################################################################################################################ ;
; # # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # by McFree # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # - getPlayerPosById(dwId) - Вычисляет позицию персонажа # ;
; # - HexToDecOne(Hex) - Перевод из Hex в Dec # ;
; # - HexToDecTwo(Hex) - Перевод шестнадцатиричного числа в десятичное # ;
; # - hex2rgb(CR) - Перевод шестнадцатиричного цвета в rgb строку (255,255,255) # ;
; # - rgb2hex(R, G, B) - Перевод RGB цвета в шестнадцатиричное значение (FFFFFF) # ;
; # - ProcessWriteMemory(Str ,addresse, process, Str, byte) - Работа с памятью # ;
; # - ProcessReadMemory(address, processIDorName, type, numBytes) - Работа с памятью # ;
; # - GetCoordsSamp(ByRef ResX, ByRef ResY) - Перевод кординат монитора на кординаты SA-MP # ;
; # # ;
; ############################################################################################################################################ ;
; # # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # by Godarck # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # - GetInterior() - True or False. Находится ли персонаж в интерьере или нет.
; # - getVehicleSirenState() - True or False. Включена ли сирена в полицейской машине или нет.
; # - CoordsFromRedmarker() - Считывает координаты метки с карты.
; # - NearPlayerInCar(dist) - Определяет игрок в автомобиле рядом
; # - isTargetDriverbyId(dwId) - Является ли игрок данного ID водителем т/с
; # - ConvertCarColor(Color) - Конвертация цвета в RGB для getVehicleColor1() и getVehicleColor2()
; # # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # By Unknown # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # - disableCheckpoint() - Отключает маркер на карте. Disabled REd Marker on map
; # - setCheckpoint(xpos,ypos,zpos,Radius) - Устанавливает маркер на карте. Рекомендуемое значение радиуса
; # # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # By MrGPro # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # - getServerHour() - Получаем игровых часы минут (Только серверах где это отображается
; # - getServerMinute() - Получаем игровых минуты минут (Только серверах где это отображается
; # - getVehicleIdServer() - id транспорта на сервере в который вы сели
; # # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # By Слюнявчик # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # - IsInAFK() - Проверка на АФК (1 - в АФК 0 - не АФК -1 - Игра закрыта)
; # # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # By Dworkin # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # - getCameraCoordinates() - Получение координаты вашей камеры # ;
; # # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # By Phoenixxx_Czar # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # - isPlayerInStreamById(player_id [, dist]) # ;
; # Функция для определения находиться ли игрок (игроки) в зоне стрима # ;
; # player_id - ид игрока или массив идов игроков # ;
; # radius - радиус поиска игроков относительно основного персонажа # ;
; # - getIdsInAnyVehicle() - Выдает кто с вами в автомобиле # ;
; # - setPlayerName(playerid, newnick) - Визуальная смена Ник Нэйма любого игрока # ;
; # - getDialogLineNumber() - Определяет выбраную строку в диалоге # ;
; # - getsexbyskin(skin) - Определяет пол по иду скина (0 - Ошибка, 1 - Мужской, 2 - Женский) # ;
; # - save(var) - Сохраняет по датам в # ;
; # "Мои Документы -> GTA San Andreas User Files -> SAMP -> ChatLogs" # ;
; # - copy(text) - Копирует в буфер # ;
; # - GetText(array [, min, max, button]) - Из массив в текст с переносами с ограничением # ;
; # - Get(url) - Get запрос на указанный url, выдает текст с сайта # ;
; # - Post(url, send) - Post запрос на сайт (0 - Все хорошо 1 - Ошибка) # ;
; # # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # By Revalto # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # - setCoordinatesCar(x, y, z) - Телепорт персонажа с Транспортом # ;
; # # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # ЧИТЫ # ;
; #------------------------------------------------------------------------------------------------------------------------------------------# ;
; # - toggleUnlimitedAmmo() - бесконечные патроны
; # - toggleNoReload() - стрельба без перезарядки
; # - toggleNoRecoil() - стрельба без отдачи
; # - toggleAntiBikeFall() - не падать с байка
; # - toggleAntiCarEject() - вас не могут выкинуть из машины
; # - toggleNoAnimations() - анимации не отображаются
; # - toggleObjectDrawMode() - курсор для отображения информации о streamer объектах на сервере
; # - toggleMotionBlur() - размытость при движении на большой скорости как в сингле
; # - writeBytes(hProcess, dwAddress, bytes) - записать несколько байтов по адресу (служебная функция)
; # - setFireImmunity(state) - Имунитет от огня (0-выкл, 1-вкл)
; # - setInfiniteRun(state) - Беск бег (0-выкл, 1-вкл)
; # - isMarkerSetup() - Стоит ли маркер на крате (-1 ошибка, 0 нет, 1 да)
; #
; ############################################################################################################################################ ;
isInteger(num)
{
return num^0 == num
}
setPlayerFreeze(status) {
if(!checkHandles())
return -1
dwCPed := readDWORD(hGTA, 0xB6F5F0)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
dwAddr := dwCPed + 0x42
writeString(hGTA, dwAddr, status)
if(ErrorLevel) {
ErrorLevel := ERROR_WRITE_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return true
}
GetText(name, min := 1, max := 45, button := 0)
{
text := ""
for key, val in name
{
if (A_Index >= min && A_Index <= max)
text .= val "`n"
temp_A_Index := A_Index
}
text := Trim(text, "`n")
if (button)
{
if (min > 45)
text .= " `nНазад"
if (temp_A_Index > max)
text .= "`nВперед"
}
text := Trim(text, "`n")
return Array(text, min, max, temp_A_Index)
}
get(url)
{
loop 5
{
ComObjError(false)
whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
whr.Open("GET", url)
whr.WaitForResponse(5)
whr.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
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")
whr.Send()
if(!strlen(whr.ResponseText))
continue
return whr.ResponseText
}
}
post(url, send, result := 0)
{
try
{
hObject := ComObjCreate("WinHttp.WinHttpRequest.5.1")
hObject.Open("POST", url)
hObject.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
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")
hObject.Send(send)
hObject.WaitForResponse(5)
}
catch ex
return 0
if (!result)
return 1
else if (result)
return hObject.ResponseText
}
IsChatActive() {
if(!checkHandles())
return -1
dwInputInfo := readDWORD(hGTA, dwSAMP + SAMP_CHAT_SHOW)
dwInputBox := readDWORD(hGTA, dwInputInfo + 8)
byteChatActive := readMem(hGTA, dwInputBox + 4, 1)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
return byteChatActive
}
ClearTextDialog() {
if(!checkHandles())
return ""
dwAddress := dwSAMP + SAMP_DIALOG_TEXT
sUsername := writeString(hGTA, dwAddress, "")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
ErrorLevel := ERROR_OK
return sUsername
}
GetChatText() {
if(!checkHandles())
return -1
dwAddress := dwSAMP + SAMP_DIALOG_TEXT
sUsername := readString(hGTA, dwAddress, 256)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -2
}
ErrorLevel := ERROR_OK
return sUsername
}
setimg(InData) {
DllCall( "Crypt32.dllCryptStringToBinary" ( A_IsUnicode ? "W" : "A" ), UInt,&InData
, UInt,StrLen(InData), UInt,1, UInt,0, UIntP,Bytes, Int,0, Int,0, "CDECL Int" )
VarSetCapacity( OutData, Req := Bytes * ( A_IsUnicode ? 2 : 1 ) )
DllCall( "Crypt32.dllCryptStringToBinary" ( A_IsUnicode ? "W" : "A" ), UInt,&InData
, UInt,StrLen(InData), UInt,1, Str,OutData, UIntP,Req, Int,0, Int,0, "CDECL Int" )
File := FileOpen(A_Temp "Pic.png", "w"), File.length := 0, File.RawWrite(OutData, Bytes)
File.Close(), VarSetcapacity( OutData, 0)
Return A_Temp "Pic.png"
}
WM_LBUTTONDOWN()
{
WM_NCLBUTTONDOWN := 0xA1, HTCAPTION := 2
PostMessage, WM_NCLBUTTONDOWN, HTCAPTION
}
rus() {
SendMessage, 0x50,, 0x4190419,, A
return
}
eng() {
SendMessage, 0x50,, 0x4090409,, A
return
}
save(chatlog)
{
static logschat := A_MyDocuments "GTA San Andreas User FilesSAMPChatLogs"
static chat := A_MyDocuments "GTA San Andreas User FilesSAMPchatlog.txt"
FileCreateDir , % logschat A_MM "-" A_YYYY
FileAppend , % chatlog, % logschat A_MM "-" A_YYYY "" A_DD "." A_MM "." A_YYYY ".txt"
FileDelete , % chat
}
Copy(Text, LocaleID=0x419)
{
CF_TEXT:=1, CF_LOCALE:=16, GMEM_MOVEABLE:=2
TextLen :=StrLen(Text)
HmemText :=DllCall("GlobalAlloc", "UInt", GMEM_MOVEABLE, "UInt", TextLen+1) ; Запрос перемещаемой
HmemLocale:=DllCall("GlobalAlloc", "UInt", GMEM_MOVEABLE, "UInt", 4) ; памяти, возвращаются хэндлы.
If(!HmemText || !HmemLocale)
Return
PtrText :=DllCall("GlobalLock", "UInt", HmemText) ; Фиксация памяти, хэндлы конвертируются
PtrLocale :=DllCall("GlobalLock", "UInt", HmemLocale) ; в указатели (адреса).
DllCall("msvcrtmemcpy", "UInt", PtrText, "Str", Text, "UInt", TextLen+1, "Cdecl") ; Копирование текста.
NumPut(LocaleID, PtrLocale+0) ; Запись идентификатора локали.
DllCall("GlobalUnlock", "UInt", HmemText) ; Расфиксация памяти.
DllCall("GlobalUnlock", "UInt", HmemLocale)
If not DllCall("OpenClipboard", "UInt", 0) ; Открытие буфера обмена.
{
DllCall("GlobalFree", "UInt", HmemText) ; Освобождение памяти,
DllCall("GlobalFree", "UInt", HmemLocale) ; если открыть не удалось.
Return
}
DllCall("EmptyClipboard") ; Очистка.
DllCall("SetClipboardData", "UInt", CF_TEXT, "UInt", HmemText) ; Помещение данных.
DllCall("SetClipboardData", "UInt", CF_LOCALE, "UInt", HmemLocale)
DllCall("CloseClipboard") ; Закрытие.
}
ClipGetText(CodePage=1251)
{
CF_TEXT:=1, CF_UNICODETEXT:=13, Format:=0
If not DllCall("OpenClipboard", "UInt", 0) ; Открытие буфера обмена.
Return
Loop
{
Format:=DllCall("EnumClipboardFormats", "UInt", Format) ; Перебор форматов.
If(Format=0 || Format=CF_TEXT || Format=CF_UNICODETEXT)
Break
}
If(Format=0) { ; Текста не найдено.
DllCall("CloseClipboard")
Return
}
If(Format=CF_TEXT)
{
HmemText:=DllCall("GetClipboardData", "UInt", CF_TEXT) ; Получение хэндла данных.
PtrText :=DllCall("GlobalLock", "UInt", HmemText) ; Конвертация хэндла в указатель.
TextLen :=DllCall("msvcrtstrlen", "UInt", PtrText, "Cdecl") ; Измерение длины найденного текста.
VarSetCapacity(Text, TextLen+1) ; Переменная под этот текст.
DllCall("msvcrtmemcpy", "Str", Text, "UInt", PtrText, "UInt", TextLen+1, "Cdecl") ; Текст в переменную.
DllCall("GlobalUnlock", "UInt", HmemText) ; Расфиксация памяти.
}
Else If(Format=CF_UNICODETEXT)
{
HmemTextW:=DllCall("GetClipboardData", "UInt", CF_UNICODETEXT)
PtrTextW :=DllCall("GlobalLock", "UInt", HmemTextW)
TextLen :=DllCall("msvcrtwcslen", "UInt", PtrTextW, "Cdecl")
VarSetCapacity(Text, TextLen+1)
DllCall("WideCharToMultiByte", "UInt", CodePage, "UInt", 0, "UInt", PtrTextW
, "Int", TextLen+1, "Str", Text, "Int", TextLen+1
, "UInt", 0, "Int", 0) ; Конвертация из Unicode в ANSI.
DllCall("GlobalUnlock", "UInt", HmemTextW)
}
DllCall("CloseClipboard") ; Закрытие.
Return Text
}
getLastDamagePed(ByRef Ped := "", ByRef Weapon := "")
{
if(!checkHandles())
return -1
if(!CPed := readDWORD(hGTA, ADDR_CPED_PTR))
return -1
if(!dwPed := readDWORD(hGTA, CPed + 0x764))
return -1
Ped := getIdByPed(dwPed)
Weapon := readMem(hGTA, CPed + 0x760, 4, "int")
return Ped
}
setFireImmunity(state)
{
if(!checkHandles())
return
writeMemory(hGTA, 0xB7CEE6, (state ? 1 : 0), 1, "byte")
}
setInfiniteRun(state)
{
if(!checkHandles())
return
writeMemory(hGTA, 0xB7CEE4, (state ? 1 : 0), 1, "byte")
}
isMarkerSetup()
{
if(!checkHandles())
return -1
return readMem(hGTA, 0xBA6774, 1, "byte")
}
getWeaponAmmo(ByRef Ammo := "", ByRef Clip := "", slot := -1)
{
if(!checkHandles())
return -1
if(!CPed := readDWORD(hGTA, ADDR_CPED_PTR))
return -1
if slot not between 0 and 12
{
VarSetCapacity(slot, 1)
DllCall("ReadProcessMemory", "UInt", hGTA, "UInt", CPed + 0x718, "Str", slot, "UInt", 1, "UInt*", 0)
slot := NumGet(slot, 0, "short")
if slot >= 12544
slot -= 12544
}
struct := CPed + 0x5AC
VarSetCapacity(Ammo, 4)
VarSetCapacity(Clip, 4)
DllCall("ReadProcessMemory", "UInt", hGTA, "UInt", struct + (0x1C * slot), "Str", Ammo, "UInt", 4, "UInt*", 0)
DllCall("ReadProcessMemory", "UInt", hGTA, "UInt", struct + (0x1C * slot) - 0x4, "Str", Clip, "UInt", 4, "UInt*", 0)
Ammo := NumGet(Ammo, 0, "int")
Clip := NumGet(Clip, 0, "int")
return Ammo
}
getWeaponSlotById(id)
{
if id between 2 and 9
slot := 1
if id between 10 and 15
slot := 10
if id in 16,17,18,39
slot := 8
if id between 22 and 24
slot := 2
if id between 25 and 27
slot := 3
if id in 28,29,32
slot := 4
if id in 30,31
slot := 5
if id in 33,34
slot := 6
if id between 35 and 38
slot := 7
if id == 40
slot := 12
if id between 41 and 43
slot := 9
if id between 44 and 46
slot := 11
}
isPlayerCrouch()
{
if(!checkHandles())
return -1
if(!CPed := readDWORD(hGTA, ADDR_CPED_PTR))
return -1
state := readMem(hGTA, CPed + 0x46F, 1, "byte")
if(state == 132)
return 1
if(state == 128)
return 0
return -1
}
setDialogState(tog)
{
if(!checkHandles())
return false
dwPointer := getDialogStructPtr()
if(ErrorLevel || !dwPointer)
return false
writeMemory(hGTA, dwPointer + 0x28, (tog ? 1 : 0), 1, "byte")
if(!tog)
Send {f6}{esc}
return true
}
toggleUnlimitedAmmo(tog := -1)
{
if(!checkHandles())
return -1
byte := readMem(hGTA, 0x7428E6, 1, "byte")
if((tog == -1 && byte == 255) || tog == true || tog == 1)
{
writeBytes(hGTA, 0x7428E6, "909090")
return true
} else if((tog == -1 && byte == 144) || !tog)
{
writeBytes(hGTA, 0x7428E6, "FF4E0C")
return false
}
return -1
}
toggleNoReload(tog := -1)
{
if(!checkHandles())
return -1
byte := readMem(hGTA, 0x7428B0, 1, "byte")
if((tog == -1 && byte == 137) || tog == true || tog == 1)
{
writeBytes(hGTA, 0x7428B0, "909090")
return true
} else if((tog == -1 && byte == 144) || !tog)
{
writeBytes(hGTA, 0x7428B0, "894608")
return false
}
return -1
}
toggleNoRecoil(tog := -1)
{
if(!checkHandles())
return -1
byte := readMem(hGTA, 0x740450, 1, "byte")
if((tog == -1 && byte == 216) || tog == true || tog == 1)
{
writeBytes(hGTA, 0x740450, "90909090909090909090")
return true
} else if((tog == -1 && byte == 144) || !tog)
{
writeBytes(hGTA, 0x740450, "D80D3C8B8500D84C241C")
return false
}
return -1
}
toggleAntiBikeFall(tog := -1)
{
if(!checkHandles())
return -1
byte := readMem(hGTA, 0x4BA3B9, 1, "byte")
if((tog == -1 && byte == 15) || tog == true || tog == 1)
{
writeBytes(hGTA, 0x4BA3B9, "E9A703000090")
return true
} else if((tog == -1 && byte == 233) || !tog)
{
writeBytes(hGTA, 0x4BA3B9, "0F84A6030000")
return false
}
return -1
}
toggleAntiCarEject(tog := -1)
{
if(!checkHandles())
return -1
byte := readMem(hGTA, dwSAMP + 0x146E0, 1, "byte")
if((tog == -1 && byte == 233) || tog == true || tog == 1)
{
writeBytes(hGTA, dwSAMP + 0x146E0, "C390909090")
return true
} else if((tog == -1 && byte == 195) || !tog)
{
writeBytes(hGTA, dwSAMP + 0x146E0, "E9D7722700")
return false
}
return -1
}
toggleNoAnimations(tog := -1)
{
if(!checkHandles())
return -1
byte := readMem(hGTA, dwSAMP + 0x16FA0, 1, "byte")
if((tog == -1 && byte == 85) || tog == true || tog == 1)
{
writeMemory(hGTA, dwSAMP + 0x16FA0, 0xC3, 1, "byte")
return true
} else if((tog == -1 && byte == 195) || !tog)
{
writeMemory(hGTA, dwSAMP + 0x16FA0, 0x55, 1, "byte")
return false
}
return -1
}
toggleObjectDrawMode(tog := -1)
{
if(!checkHandles())
return -1
byte := readMem(hGTA, dwSAMP + 0x69529, 1, "byte")
if((tog == -1 && byte == 15) || tog == true || tog == 1)
{
writeBytes(hGTA, dwSAMP + 0x69529, "909090909090")
return true
} else if((tog == -1 && byte == 144) || !tog)
{
writeBytes(hGTA, dwSAMP + 0x69529, "0F84AE000000")
return false
}
return -1
}
toggleMotionBlur(tog := -1)
{
if(!checkHandles())
return -1
byte := readMem(hGTA, 0x704E8A, 1, "byte")
if((tog == -1 && byte == 144) || tog == true || tog == 1)
{
writeBytes(hGTA, 0x704E8A, "E811E2FFFF")
return true
} else if((tog == -1 && byte == 232) || !tog)
{
writeBytes(hGTA, 0x704E8A, "9090909090")
return false
}
return -1
}
writeBytes(handle, address, bytes)
{
length := strlen(bytes) / 2
VarSetCapacity(toInject, length, 0)
Loop %length%
{
byte := "0x" substr(bytes, ((A_Index - 1) * 2) + 1, 2)
NumPut(byte, toInject, A_Index - 1, "uchar")
}
return writeRaw(handle, address, &toInject, length)
}
setHP(hp) {
if(!checkHandles())
return -1
dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
dwAddr := dwCPedPtr + ADDR_CPED_HPOFF
writeFloat(hGTA, dwAddr, hp)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return true
}
getsexbyskin(skin)
{
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
return 1
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
return 2
else
return 0
}
getDialogLineNumber() {
dwPointer := getDialogStructPtr()
if (ErrorLevel || !dwPointer)
return 0
dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR2_OFFSET)
if (ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
count := readMem(hGTA, dwPointer + SAMP_DIALOG_LINENUMBER_OFFSET, 4, "UInt")
if (ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
return count//16777216+1
}
getServerHour() {
if(!checkHandles())
return -1
dwGTA := getModuleBaseAddress("grand_theft_auto_san_andreas.dll", hGTA)
Hour := readMem(hGTA, 0xB70153, 1, "Int")
if (Hour <= 9) {
FixHour = 0%Hour%
return FixHour
}
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return Hour
}
getServerMinute() {
if(!checkHandles())
return -1
dwGTA := getModuleBaseAddress("grand_theft_auto_san_andreas.dll", hGTA)
Minute := readMem(hGTA, 0xB70152, 1, "Int")
if (Minute <= 9) {
FixMinute = 0%Minute%
return FixMinute
}
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return Minute
}
getCameraCoordinates() {
if(!checkHandles())
return false
fX := readFloat(hGTA, 0xB6F9CC)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
fY := readFloat(hGTA, 0xB6F9D0)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
fZ := readFloat(hGTA, 0xB6F9D4)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
ErrorLevel := ERROR_OK
return [fX, fY, fZ]
}
getPlayerPosById(dwId) {
dwId += 0
dwId := Floor(dwId)
if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
return ""
if(iRefreshScoreboard+iUpdateTick > A_TickCount)
{
if(oScoreboardData[dwId])
{
if(oScoreboardData[dwId].HasKey("PED"))
return getPedCoordinates(oScoreboardData[dwId].PED)
if(oScoreboardData[dwId].HasKey("MPOS"))
return oScoreboardData[dwId].MPOS
}
return ""
}
if(!updateOScoreboardData())
return ""
if(oScoreboardData[dwId])
{
if(oScoreboardData[dwId].HasKey("PED"))
return getPedCoordinates(oScoreboardData[dwId].PED)
if(oScoreboardData[dwId].HasKey("MPOS"))
return oScoreboardData[dwId].MPOS
}
return ""
}
HexToDecOne(Hex)
{
if (InStr(Hex, "0x") != 1)
Hex := "0x" Hex
return, Hex + 0
}
HexToDecTwo(hex)
{
VarSetCapacity(dec, 66, 0)
, val := DllCall("msvcrt.dll_wcstoui64", "Str", hex, "UInt", 0, "UInt", 16, "CDECL Int64")
, DllCall("msvcrt.dll_i64tow", "Int64", val, "Str", dec, "UInt", 10, "CDECL")
return dec
}
hex2rgb(CR)
{
NumPut((InStr(CR, "#") ? "0x" SubStr(CR, 2) : "0x") SubStr(CR, -5), (V := "000000"))
return NumGet(V, 2, "UChar") "," NumGet(V, 1, "UChar") "," NumGet(V, 0, "UChar")
}
rgb2hex(R, G, B, H := 1)
{
static U := A_IsUnicode ? "_wcstoui64" : "_strtoui64"
static V := A_IsUnicode ? "_i64tow" : "_i64toa"
rgb := ((R << 16) + (G << 8) + B)
H := ((H = 1) ? "#" : ((H = 2) ? "0x" : ""))
VarSetCapacity(S, 66, 0)
value := DllCall("msvcrt.dll" U, "Str", rgb , "UInt", 0, "UInt", 10, "CDECL Int64")
DllCall("msvcrt.dll" V, "Int64", value, "Str", S, "UInt", 16, "CDECL")
return H S
}
GetCoordsSamp(ByRef ResX, ByRef ResY)
{
MouseGetPos, PosX, PosY
PosXProc := (PosX*100)/A_ScreenWidth
PosYProc := (PosY*100)/A_ScreenHeight
ResX := PosXProc*8
ResY := PosYProc*6
}
getVehicleIdServer(address=0x13C298, datatype="int", length=4, offset=0)
{
if (isPlayerDriver() != "-1" or isPlayerInAnyVehicle() != "0")
{
Process, Exist, grand_theft_auto_san_andreas.dll
PID_GTA := ErrorLevel
VarSetCapacity(me32, 548, 0)
NumPut(548, me32)
snapMod := DllCall("CreateToolhelp32Snapshot", "Uint", 0x00000008, "Uint", PID_GTA)
If (snapMod = -1)
Return 0
If (DllCall("Module32First", "Uint", snapMod, "Uint", &me32))
{
Loop
{
If (!DllCall("lstrcmpi", "Str", "samp.dll", "UInt", &me32 + 32)) {
DllCall("CloseHandle", "UInt", snapMod)
key:= NumGet(&me32 + 20)
WinGet, PID_SAMP, PID, Criminal Russia Multiplayer Ревизия G
hwnd_samp := DllCall("OpenProcess","Uint",0x1F0FFF,"int",0,"int", PID_SAMP)
VarSetCapacity(readvalue,length, 0)
DllCall("ReadProcessMemory","Uint",hwnd_samp,"Uint",key+address+offset,"Str",readvalue,"Uint",length,"Uint *",0)
finalvalue := NumGet(readvalue,0,datatype)
DllCall("CloseHandle", "int", hwnd_samp)
return finalvalue
}
}
Until !DllCall("Module32Next", "Uint", snapMod, "UInt", &me32)
}
DllCall("CloseHandle", "Uint", snapMod)
}
else
Return 0
}
; Визуально меняет ник любого игрока
setPlayerName(playerid, newnick) {
if(!checkHandles() || !strlen(newnick))
return 0
dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
dwPlayers := readDWORD(hGTA, dwAddress + SAMP_PPOOL_PLAYER_OFFSET)
if(ErrorLevel || dwPlayers==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
dwRemoteplayer := readDWORD(hGTA, dwPlayers+SAMP_PREMOTEPLAYER_OFFSET+playerid*4) ;pRemotePlayer
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
if(dwRemoteplayer==0)
return 0
dwTemp := readMem(hGTA, dwRemoteplayer + SAMP_ISTRLENNAME___OFFSET, 4, "Int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
sUsername := ""
if(dwTemp <= 0xf)
{
sUsername := readString(hGTA, dwRemoteplayer+SAMP_SZPLAYERNAME_OFFSET, 16)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
writeString(hGTA, dwRemoteplayer+SAMP_SZPLAYERNAME_OFFSET, newnick)
}
else {
dwAddress := readDWORD(hGTA, dwRemoteplayer + SAMP_PSZPLAYERNAME_OFFSET)
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
sUsername := readString(hGTA, dwAddress, 25)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
writeString(hGTA, dwAddress, newnick)
}
ErrorLevel := ERROR_OK
return 1
}
initZonesAndCities() {
AddCity("Лас-Вентурас", 685.0, 476.093, -500.0, 3000.0, 3000.0, 500.0)
AddCity("Сан-Фиерро", -3000.0, -742.306, -500.0, -1270.53, 1530.24, 500.0)
AddCity("Сан-Фиерро", -1270.53, -402.481, -500.0, -1038.45, 832.495, 500.0)
AddCity("Сан-Фиерро", -1038.45, -145.539, -500.0, -897.546, 376.632, 500.0)
AddCity("Лос-Сантос", 480.0, -3000.0, -500.0, 3000.0, -850.0, 500.0)
AddCity("Лос-Сантос", 80.0, -2101.61, -500.0, 1075.0, -1239.61, 500.0)
AddCity("Тьерра-Робада", -1213.91, 596.349, -242.99, -480.539, 1659.68, 900.0)
AddCity("Ред-Коунти", -1213.91, -768.027, -242.99, 2997.06, 596.349, 900.0)
AddCity("Флинт-Коунти", -1213.91, -2892.97, -242.99, 44.6147, -768.027, 900.0)
AddCity("Уэтстоун", -2997.47, -2892.97, -242.99, -1213.91, -1115.58, 900.0)
AddZone("Ganton", 2222.560, -1852.870, -89.084, 2632.830, -1722.330, 110.916)
}
HexToDec(str)
{
local newStr := ""
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}
StringLower, str, str
str := RegExReplace(str, "^0x|[^a-f0-9]+", "")
Loop, % StrLen(str)
newStr .= SubStr(str, (StrLen(str)-A_Index)+1, 1)
newStr := StrSplit(newStr, "")
local ret := 0
for i,char in newStr
ret += comp[char]*(16**(i-1))
return ret
}
addChatMessageEx(Color, wText) {
wText := "" wText
if(!checkHandles())
return false
VarSetCapacity(data2, 4, 0)
NumPut(HexToDec(Color),data2,0,"Int")
Addrr := readDWORD(hGTA, dwSAMP+ADDR_SAMP_CHATMSG_PTR)
VarSetCapacity(data1, 4, 0)
NumPut(readDWORD(hGTA, Addrr + 0x4), data1,0,"Int")
WriteRaw(hGTA, Addrr + 0x4, &data2, 4)
dwFunc := dwSAMP + FUNC_SAMP_ADDTOCHATWND
dwChatInfo := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return false
}
callWithParams(hGTA, dwFunc, [["p", dwChatInfo], ["s", wText]], true)
WriteRaw(hGTA, Addrr + 0x4, &data1, 4)
ErrorLevel := ERROR_OK
return true
}
connect(IP) {
setIP(IP)
restartGameEx()
disconnectEx()
Sleep 1000
setrestart()
Return
}
WriteProcessMemory(title,addresse,wert,size)
{
VarSetCapacity(idvar,32,0)
VarSetCapacity(processhandle,32,0)
VarSetCapacity(value, 32, 0)
NumPut(wert,value,0,Uint)
address=%addresse%
WinGet ,idvar,PID,%title%
processhandle:=DllCall("OpenProcess","Uint",0x38,"int",0,"int",idvar)
Bvar:=DllCall("WriteProcessMemory","Uint",processhandle,"Uint",address+0,"Uint",&value,"Uint",size,"Uint",0)
}
setCoordinates(x, y, z, Interior) {
if(!checkHandles())
return False
dwAddress := readMem(hGTA, ADDR_SET_POSITION)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
Return False
}
dwAddress := readMem(hGTA, dwAddress + ADDR_SET_POSITION_OFFSET)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
Return False
}
Sleep 100
writeByte(hGTA, ADDR_SET_INTERIOR_OFFSET, Interior)
if(ErrorLevel) {
ErrorLevel := ERROR_WRITE_MEMORY
Return False
}
writeFloat(hGTA, dwAddress + ADDR_SET_POSITION_X_OFFSET, x)
if(ErrorLevel) {
ErrorLevel := ERROR_WRITE_MEMORY
Return False
}
writeFloat(hGTA, dwAddress + ADDR_SET_POSITION_Y_OFFSET, y)
if(ErrorLevel) {
ErrorLevel := ERROR_WRITE_MEMORY
Return False
}
writeFloat(hGTA, dwAddress + ADDR_SET_POSITION_Z_OFFSET, z)
if(ErrorLevel) {
ErrorLevel := ERROR_WRITE_MEMORY
Return False
}
Return True
}
setCoordinatesCar(x, y, z) {
if(!checkHandles())
return False
dwAddress := readMem(hGTA, ADDR_SET_POSITION_CAR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
Return False
}
dwAddress := readMem(hGTA, dwAddress + ADDR_SET_POSITION_OFFSET)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
Return False
}
Sleep 100
writeFloat(hGTA, dwAddress + ADDR_SET_POSITION_X_OFFSET, x)
if(ErrorLevel) {
ErrorLevel := ERROR_WRITE_MEMORY
Return False
}
writeFloat(hGTA, dwAddress + ADDR_SET_POSITION_Y_OFFSET, y)
if(ErrorLevel) {
ErrorLevel := ERROR_WRITE_MEMORY
Return False
}
writeFloat(hGTA, dwAddress + ADDR_SET_POSITION_Z_OFFSET, z)
if(ErrorLevel) {
ErrorLevel := ERROR_WRITE_MEMORY
Return False
}
Return True
}
colorhud(colorhud)
{
VarSetCapacity(idvar,32,0)
VarSetCapacity(processhandle,32,0)
VarSetCapacity(value, 32, 0)
NumPut(colorhud,value,0,Uint)
address=0xBAB230
WinGet ,idvar,PID,Criminal Russia Multiplayer Ревизия G
processhandle:=DllCall("OpenProcess","Uint",0x38,"int",0,"int",idvar)
Bvar:=DllCall("WriteProcessMemory","Uint",processhandle,"Uint",address+0,"Uint",&value,"Uint","4","Uint",0)
}
getIP() {
if(!checkHandles())
return ""
dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
ipAddr := readString(hGTA, dwAddress + SAMP_SZIP_OFFSET, 257)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
return ipAddr
}
; Смена Ip Сервера
setIP(IP) {
if(!checkHandles())
return False
dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return False
}
writeString(hGTA, dwAddress + SAMP_SZIP_OFFSET, IP)
if(ErrorLevel) {
ErrorLevel := ERROR_WRITE_MEMORY
return False
}
return True
}
; returns server hostname or empty string on error
getHostname() {
if(!checkHandles())
return ""
dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
hostname := readString(hGTA, dwAddress + SAMP_SZHOSTNAME_OFFSET, 259)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
return hostname
}
; set nickname
setUsername(Username) {
if(!checkHandles())
return False
dwAddress := dwSAMP + ADDR_SAMP_USERNAME
writeString(hGTA, dwAddress, Username)
if(ErrorLevel) {
ErrorLevel := ERROR_WRITE_MEMORY
return False
}
ErrorLevel := ERROR_OK
return True
}
setChatLine(line, msg) {
if(!checkHandles())
return -1
dwPtr := dwSAMP + ADDR_SAMP_CHATMSG_PTR
dwAddress := readDWORD(hGTA,dwPtr)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
; 0x152, offset for first msg
; 0xFC, size of a msg
; 99, max msg
writeString(hGTA, dwAddress + 0x152 + ( (99-line) * 0xFC), msg)
if(ErrorLevel) {
ErrorLevel := ERROR_WRITE_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return True
}
getTagNameDistance() {
if(!checkHandles())
return -1
dwSAMPInfo := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
dwSAMPInfoSettings := readDWORD(hGTA, dwSAMPInfo + SAMP_INFO_SETTINGS_OFFSET)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
distance := readFloat(hGTA, dwSAMPInfoSettings + 0x27)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return distance
}
setTagNameDistance(status, distance) {
if(!checkHandles())
return -1
status := status ? 1 : 0
dwSAMPInfo := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
dwSAMPInfoSettings := readDWORD(hGTA, dwSAMPInfo + SAMP_INFO_SETTINGS_OFFSET)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
writeByte(hGTA, dwSAMPInfoSettings + 0x38, 1)
if(ErrorLevel) {
ErrorLevel := ERROR_WRITE_MEMORY
return -1
}
writeByte(hGTA, dwSAMPInfoSettings + 0x2F, status)
if(ErrorLevel) {
ErrorLevel := ERROR_WRITE_MEMORY
return -1
}
writeFloat(hGTA, dwSAMPInfoSettings + 0x27, distance)
if(ErrorLevel) {
ErrorLevel := ERROR_WRITE_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return
}
; sets the ingame hour (day/night)
setTime(hour)
{
if(!checkHandles())
return
; disable gta setTime function
VarSetCapacity(nop, 6, 0)
Loop 6 {
NumPut(0x90, nop, A_INDEX-1, "UChar")
}
writeRaw(hGTA, 0x52D168, &nop, 6)
; set our own weather
VarSetCapacity(time, 1, 0)
NumPut(hour, time, 0, "Int")
writeRaw(hGTA, 0xB70153, &time, 1)
}
; sets the weather
; @param weather id
setWeather(id)
{
if(!checkHandles())
return
VarSetCapacity(weather, 1, 0)
NumPut(id, weather, 0, "Int")
writeRaw(hGTA, 0xC81320, &weather, 1)
if(ErrorLevel)
return false
return true
}
; get the id of your skin
getSkinID() {
if(!checkHandles())
return -1
dwAddress := readDWORD(hGTA, 0xB6F3B8)
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
id := readMem(hGTA, dwAddress + 0x22, 2, "UShort")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return id
}
; get the title of dialog
getDialogTitle()
{
if(!checkHandles())
return ""
dwAddress := readDWORD(hGTA, dwSAMP + 0x21A0B8)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
text := readString(hGTA, dwAddress + 0x40, 128)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
ErrorLevel := ERROR_OK
return text
}
; get the color of player
; @author democrazy
getPlayerColor(id)
{
id += 0
if(!checkHandles())
return -1
color := readDWORD(hGTA, dwSAMP + 0x216378 + 4*id)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
return color
}
; set the color of player
; @author democrazy
setPlayerColor(id,color)
{
id += 0
color +=0
if(!checkHandles())
return
VarSetCapacity(bla, 4, 0)
NumPut(color,bla,0,"UInt")
writeRaw(hGTA, dwSAMP + 0x216378 + 4*id, &bla, 4)
}
; convert color from decimal into hex
; @author democrazy
colorToStr(color)
{
color += 0
color >>= 8
color &= 0xffffff
SetFormat, IntegerFast, hex
color += 0
color .= ""
StringTrimLeft, color, color, 2
SetFormat, IntegerFast, d
if (StrLen(color) == 5)
color := "0"color
return "{" color "}"
}
; Get Interior param.
;;@autor Godarck
GetInterior()
{
dwAddress := readDWORD(hGTA, ADDR_SET_INTERIOR_OFFSET)
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return False
}
return True
}
; get current weapon id
; @author AnalFatal
getWeaponId()
{
If(!checkHandles())
return 0
c := readDWORD(hGTA, ADDR_CPED_PTR)
If(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
id := readMem(hGTA, c + 0x740)
If(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
return id
}
writeFloat(hProcess, dwAddress, wFloat) {
if(!hProcess) {
ErrorLevel := ERROR_INVALID_HANDLE
return false
}
wFloat := FloatToHex(wFloat)
dwRet := DllCall( "WriteProcessMemory"
, "UInt", hProcess
, "UInt", dwAddress
, "UInt *", wFloat
, "UInt", 4
, "UInt *", 0)
ErrorLevel := ERROR_OK
return true
}
writeByte(hProcess, dwAddress, wInt) {
if(!hProcess) {
ErrorLevel := ERROR_INVALID_HANDLE
return false
}
wInt := IntToHex(wInt)
dwRet := DllCall( "WriteProcessMemory"
, "UInt", hProcess
, "UInt", dwAddress
, "UInt *", wInt
, "UInt", 1
, "UInt *", 0)
}
FloatToHex(value) {
format := A_FormatInteger
SetFormat, Integer, H
result := DllCall("MulDiv", Float, value, Int, 1, Int, 1, UInt)
SetFormat, Integer, %format%
return, result
}
IntToHex(int)
{
CurrentFormat := A_FormatInteger
SetFormat, integer, hex
int += 0
SetFormat, integer, %CurrentFormat%
return int
}
disconnectEx() {
if(!checkHandles())
return 0
dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) ;g_SAMP
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
dwAddress := readDWORD(hGTA, dwAddress + 0x3c9) ;pRakClientInterface
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
ecx := dwAddress ;this
dwAddress := readDWORD(hGTA, dwAddress) ;vtable
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
VarSetCapacity(injectData, 24, 0) ;mov, call, retn
NumPut(0xB9, injectData, 0, "UChar") ;mov ecx 0+1
NumPut(ecx, injectData, 1, "UInt") ;1+4
NumPut(0xB8, injectData, 5, "UChar") ;mov eax 5+1
NumPut(dwAddress, injectData, 6, "UInt") ;6+4
;NumPut(0x006A006A, injectData, 10, "UInt") ; 2x push 10+4
NumPut(0x68, injectData, 10, "UChar") ;10 + 1 ;push style
NumPut(0, injectData, 11, "UInt") ;11 + 4
NumPut(0x68, injectData, 15, "UChar") ;15 + 1 ;push style
NumPut(500, injectData, 16, "UInt") ;16 + 4
;---
NumPut(0x50FF, injectData, 20, "UShort") ;20 + 2
NumPut(0x08, injectData, 22, "UChar") ;22 + 1
NumPut(0xC3, injectData, 23, "UChar") ;retn 23+1
writeRaw(hGTA, pInjectFunc, &injectData, 24)
if(ErrorLevel)
return false
hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
if(ErrorLevel)
return false
waitForSingleObject(hThread, 0xFFFFFFFF)
closeProcess(hThread)
return true
}
setrestart()
{
VarSetCapacity(old, 4, 0)
dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) ;g_SAMP
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
NumPut(9,old,0,"Int")
writeRaw(hGTA, dwAddress + 957, &old, 4)
}
restartGameEx() {
if(!checkHandles())
return -1
dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) ;g_SAMP
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
dwFunc := dwSAMP + 0xA060
VarSetCapacity(injectData, 11, 0) ;mov, call, retn
NumPut(0xB9, injectData, 0, "UChar") ;mov ecx 0+1
NumPut(dwAddress, injectData, 1, "UInt") ;1+4
NumPut(0xE8, injectData, 5, "UChar") ;call 5+1
offset := dwFunc - (pInjectFunc + 10)
NumPut(offset, injectData, 6, "Int") ; 6+4
NumPut(0xC3, injectData, 10, "UChar") ; 10+1
writeRaw(hGTA, pInjectFunc, &injectData, 11)
if(ErrorLevel)
return false
hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
if(ErrorLevel)
return false
waitForSingleObject(hThread, 0xFFFFFFFF)
closeProcess(hThread)
return true
}
; ##### SAMP-Funktionen #####
; Функция для определения всех идов в автомобиле
getIdsInAnyVehicle()
{
if (isPlayerInAnyVehicle())
{
cVeh := readDWORD(hGTA, 0xB79530)
playerCount := 0
ids := []
Loop, 8
{
playerId := getIdByPed(readDWORD(hGTA, cVeh + (1116 + 4 * A_Index)))
if (playerId != -1)
{
playerCount++
ids.Push(playerId)
}
}
if (!playerCount)
return 0
return ids
}
return -1
}
; Функция для определения находиться ли игрок (игроки) в зоне стрима
; player_id - ид игрока или массив идов игроков
; radius - радиус поиска игроков относительно основного персонажа
isPlayerInStreamById(player_id, radius := 150)
{
NAME := ""
check := []
p := getStreamedInPlayersInfo()
if (!p)
return 0
For i, o in p ; берет игроков из стрима в переменную NAME
{
if (Floor(getDist(getCoordinates(), o.POS)) <= radius)
{
NAME .= o.NAME ", "
}
}
if (IsObject(player_id)) ; Если получен массив
{
for k, v in player_id ; Проверяет находиться ли ид из массива в зоне стрима
{
i := 0
Loop, Parse, % NAME, % ",", % " ,.`n`r"
{
if (A_LoopField == getPlayerNameById(v))
{
i := 1
break
}
}
check[v] := i
}
return check
}
else if (!IsObject(player_id)) ; если передан ид
{
if (!getPlayerNameById(player_id))
return 0
i := 0
Loop, Parse, % NAME, % ",", % " ,.`n`r"
{
if (A_LoopField == getPlayerNameById(player_id))
{
return 1
}
}
return 0
}
}
IsSAMPAvailable() {
if(!checkHandles())
return false
dwChatInfo := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
if(dwChatInfo == 0 || dwChatInfo == "ERROR")
{
return false
}
else
{
return true
}
}
isInChat() {
if(!checkHandles())
return -1
dwPtr := dwSAMP + ADDR_SAMP_INCHAT_PTR
dwAddress := readDWORD(hGTA, dwPtr) + ADDR_SAMP_INCHAT_PTR_OFF
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
dwInChat := readDWORD(hGTA, dwAddress)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
if(dwInChat > 0) {
return true
} else {
return false
}
}
getUsername() {
if(!checkHandles())
return ""
dwAddress := dwSAMP + ADDR_SAMP_USERNAME
sUsername := readString(hGTA, dwAddress, 25)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
ErrorLevel := ERROR_OK
return sUsername
}
getId() {
s:=getUsername()
return getPlayerIdByName(s)
}
SendChat(wText) {
wText := "" wText
if(!checkHandles())
return false
dwFunc:=0
if(SubStr(wText, 1, 1) == "/") {
dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
} else {
dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
}
callWithParams(hGTA, dwFunc, [["s", wText]], false)
ErrorLevel := ERROR_OK
return true
}
;=================================================[Работа с памятью]===================================================================================
; Источник - http://dumpz.org/2345353/
ProcessReadMemory(address, processIDorName, type := "Int", numBytes := 4) {
VarSetCapacity(buf, numBytes, 0)
Process Exist, %processIDorName%
if !processID := ErrorLevel
return -1
;throw Exception("Invalid process name or process ID:`n`n""" . processIDorName . """")
if !processHandle := DllCall("OpenProcess", "Int", 24, "UInt", 0, "UInt", processID, "Ptr")
throw Exception("Failed to open process.`n`nError code:`t" . A_LastError)
result := DllCall("ReadProcessMemory", "Ptr", processHandle, "Ptr", address, "Ptr", &buf, "Ptr", numBytes, "PtrP", numBytesRead, "UInt")
if !DllCall("CloseHandle", "Ptr", processHandle, "UInt") && !result
throw Exception("Failed to close process handle.`n`nError code:`t" . A_LastError)
if !result
throw Exception("Failed to read process memory.`n`nError code:`t" . A_LastError)
if !numBytesRead
throw Exception("Read 0 bytes from the`n`nprocess:`t" . processIDorName . "`naddress:`t" . address)
return (type = "Str") ? StrGet(&buf, numBytes) : NumGet(buf, type)
}
ProcessWriteMemory(data, address, processIDorName, type := "Int", numBytes := 4) {
VarSetCapacity(buf, numBytes, 0)
(type = "Str") ? StrPut(data, &buf, numBytes) : NumPut(data, buf, type)
Process Exist, %processIDorName%
if !processID := ErrorLevel
;throw Exception("Invalid process name or process ID:`n`n""" . processIDorName . """")
return
if !processHandle := DllCall("OpenProcess", "Int", 40, "UInt", 0, "UInt", processID, "Ptr")
throw Exception("Failed to open process.`n`nError code:`t" . A_LastError)
result := DllCall("WriteProcessMemory", "Ptr", processHandle, "Ptr", address, "Ptr", &buf, "Ptr", numBytes, "UInt", 0, "UInt")
if !DllCall("CloseHandle", "Ptr", processHandle, "UInt") && !result
throw Exception("Failed to close process handle.`n`nError code:`t" . A_LastError)
if !result
;throw Exception("Failed to write process memory.`n`nError code:`t" . A_LastError)
return
return result
}
;==================================================[Работа с памятью]==================================================================================
addChatMessage(wText) {
wText := "" wText
if(!checkHandles())
return false
dwFunc := dwSAMP + FUNC_SAMP_ADDTOCHATWND
dwChatInfo := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return false
}
callWithParams(hGTA, dwFunc, [["p", dwChatInfo], ["s", wText]], true)
ErrorLevel := ERROR_OK
return true
}
showGameText(wText, dwTime, dwSize) {
wText := "" wText
dwTime += 0
dwTime := Floor(dwTime)
dwSize += 0
dwSize := Floor(dwSize)
if(!checkHandles())
return false
dwFunc := dwSAMP + FUNC_SAMP_SHOWGAMETEXT
callWithParams(hGTA, dwFunc, [["s", wText], ["i", dwTime], ["i", dwSize]], false)
ErrorLevel := ERROR_OK
return true
}
playAudioStream(wUrl) {
wUrl := "" wUrl
if(!checkHandles())
return false
dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
patchRadio()
callWithParams(hGTA, dwFunc, [["s", wUrl], ["i", 0], ["i", 0], ["i", 0], ["i", 0], ["i", 0]], false)
unPatchRadio()
ErrorLevel := ERROR_OK
return true
}
stopAudioStream() {
if(!checkHandles())
return false
dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
patchRadio()
callWithParams(hGTA, dwFunc, [["i", 1]], false)
unPatchRadio()
ErrorLevel := ERROR_OK
return true
}
patchRadio()
{
if(!checkHandles())
return false
VarSetCapacity(nop, 4, 0)
NumPut(0x90909090,nop,0,"UInt")
dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
writeRaw(hGTA, dwFunc, &nop, 4)
writeRaw(hGTA, dwFunc+4, &nop, 1)
dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
writeRaw(hGTA, dwFunc, &nop, 4)
writeRaw(hGTA, dwFunc+4, &nop, 1)
return true
}
unPatchRadio()
{
if(!checkHandles())
return false
VarSetCapacity(old, 4, 0)
dwFunc := dwSAMP + FUNC_SAMP_PLAYAUDIOSTR
NumPut(0x74003980,old,0,"UInt")
writeRaw(hGTA, dwFunc, &old, 4)
NumPut(0x39,old,0,"UChar")
writeRaw(hGTA, dwFunc+4, &old, 1)
dwFunc := dwSAMP + FUNC_SAMP_STOPAUDIOSTR
NumPut(0x74003980,old,0,"UInt")
writeRaw(hGTA, dwFunc, &old, 4)
NumPut(0x09,old,0,"UChar")
writeRaw(hGTA, dwFunc+4, &old, 1)
return true
}
blockChatInput() {
if(!checkHandles())
return false
VarSetCapacity(nop, 2, 0)
dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
NumPut(0x04C2,nop,0,"Short")
writeRaw(hGTA, dwFunc, &nop, 2)
dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
writeRaw(hGTA, dwFunc, &nop, 2)
return true
}
unBlockChatInput() {
if(!checkHandles())
return false
VarSetCapacity(nop, 2, 0)
dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
NumPut(0xA164,nop,0,"Short")
writeRaw(hGTA, dwFunc, &nop, 2)
dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
writeRaw(hGTA, dwFunc, &nop, 2)
return true
}
getServerName() {
if(!checkHandles())
return -1
dwAdress := readMem(hGTA, dwSAMP + 0x21A0F8, 4, "int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
if(!dwAdress)
return -1
ServerName := readString(hGTA, dwAdress + 0x121, 200)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return ServerName
}
getServerIP() {
if(!checkHandles())
return -1
dwAdress := readMem(hGTA, dwSAMP + 0x21A0F8, 4, "int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
if(!dwAdress)
return -1
ServerIP := readString(hGTA, dwAdress + 0x20, 100)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return ServerIP
}
getServerPort() {
if(!checkHandles())
return -1
dwAdress := readMem(hGTA, dwSAMP + 0x21A0F8, 4, "int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
if(!dwAdress)
return -1
ServerPort := readMem(hGTA, dwAdress + 0x225, 4, "int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return ServerPort
}
getWeatherID() {
if(!checkHandles())
return -1
dwGTA := getModuleBaseAddress("grand_theft_auto_san_andreas.dll", hGTA)
WeatherID := readMem(hGTA, dwGTA + 0xC81320, 2, "byte")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return WeatherID
}
getWeatherName() {
if(isPlayerInAnyVehicle() == 0)
return -1
if(id >= 0 && id < 23)
{
return oweatherNames[id-1]
}
return ""
}
; ##### Extra-Player-Funktionen #####
; by Godarck
isTargetDriverbyId(dwId)
{
if(!checkHandles())
return -1
dwPedPointer := getPedById(dwId)
dwAddrVPtr := getVehiclePointerByPed(dwPedPointer)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
dwVal := readDWORD(hGTA, dwAddrVPtr + ADDR_VEHICLE_DRIVER)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return (dwVal == dwPedPointer)
}
getTargetPed() {
if(!checkHandles())
return 0
dwAddress := readDWORD(hGTA, 0xB6F3B8)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
if(!dwAddress)
return 0
dwAddress := readDWORD(hGTA, dwAddress+0x79C)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
ErrorLevel := ERROR_OK
return dwAddress
}
calcScreenCoors(fX,fY,fZ)
{
if(!checkHandles())
return false
dwM := 0xB6FA2C
m_11 := readFloat(hGTA, dwM + 0*4)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return false
}
m_12 := readFloat(hGTA, dwM + 1*4)
m_13 := readFloat(hGTA, dwM + 2*4)
m_21 := readFloat(hGTA, dwM + 4*4)
m_22 := readFloat(hGTA, dwM + 5*4)
m_23 := readFloat(hGTA, dwM + 6*4)
m_31 := readFloat(hGTA, dwM + 8*4)
m_32 := readFloat(hGTA, dwM + 9*4)
m_33 := readFloat(hGTA, dwM + 10*4)
m_41 := readFloat(hGTA, dwM + 12*4)
m_42 := readFloat(hGTA, dwM + 13*4)
m_43 := readFloat(hGTA, dwM + 14*4)
dwLenX := readDWORD(hGTA, 0xC17044)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return false
}
dwLenY := readDWORD(hGTA, 0xC17048)
frX := fZ * m_31 + fY * m_21 + fX * m_11 + m_41
frY := fZ * m_32 + fY * m_22 + fX * m_12 + m_42
frZ := fZ * m_33 + fY * m_23 + fX * m_13 + m_43
fRecip := 1.0/frZ
frX *= fRecip * dwLenX
frY *= fRecip * dwLenY
if(frX<=dwLenX && frY<=dwLenY && frZ>1)
return [frX,frY,frZ]
}
ConvertCarColor(Color)
{
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"]
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"]
if (Color > 0) and (Color < 128)
RGB := ArrayRGB[Color]
if (Color > 127) and (Color < 256)
{
RGB := ArrayRGBNew[Color + 127]
}
StringLeft, RGBTemp, RGB, 8
StringRight, RGB, RGBTemp, 6
if Color = 0
RGB := "000000"
return RGB
}
;--
getPedById(dwId) {
dwId += 0
dwId := Floor(dwId)
if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
return 0
if(iRefreshScoreboard+iUpdateTick > A_TickCount)
{
if(oScoreboardData[dwId])
{
if(oScoreboardData[dwId].HasKey("PED"))
return oScoreboardData[dwId].PED
}
return 0
}
if(!updateOScoreboardData())
return 0
if(oScoreboardData[dwId])
{
if(oScoreboardData[dwId].HasKey("PED"))
return oScoreboardData[dwId].PED
}
return 0
}
getIdByPed(dwPed) {
dwPed += 0
dwPed := Floor(dwPed)
if(!dwPed)
return -1
if(iRefreshScoreboard+iUpdateTick > A_TickCount)
{
For i, o in oScoreboardData
{
if(o.HasKey("PED"))
{
if(o.PED==dwPed)
return i
}
}
return -1
}
if(!updateOScoreboardData())
return -1
For i, o in oScoreboardData
{
if(o.HasKey("PED"))
{
if(o.PED==dwPed)
return i
}
}
return -1
}
IsInAFK() {
res := ProcessReadMemory(0xBA6748 + 0x5C, "grand_theft_auto_san_andreas.dll")
if (res==-1)
return -1
WinGet, win, MinMax, Criminal Russia Multiplayer Ревизия G
if ((res=0) and (win=-1)) or res=1
return 1
return 0
}
getStreamedInPlayersInfo() {
r:=[]
if(iRefreshScoreboard+iUpdateTick > A_TickCount)
{
For i, o in oScoreboardData
{
if(o.HasKey("PED"))
{
p := getPedCoordinates(o.PED)
if(p)
{
o.POS := p
r[i] := o
}
}
}
return r
}
if(!updateOScoreboardData())
return ""
For i, o in oScoreboardData
{
if(o.HasKey("PED"))
{
p := getPedCoordinates(o.PED)
if(p)
{
o.POS := p
r[i] := o
}
}
}
return r
}
callFuncForAllStreamedInPlayers(cfunc,dist=0x7fffffff) {
cfunc := "" cfunc
dist += 0
if(!IsFunc(cfunc))
return false
p := getStreamedInPlayersInfo()
if(!p)
return false
if(dist<0x7fffffff)
{
lpos := getCoordinates()
if(!lpos)
return false
For i, o in p
{
if(dist>getDist(lpos,o.POS))
%cfunc%(o)
}
}
else
{
For i, o in p
%cfunc%(o)
}
return true
}
getDist(pos1,pos2)
{
if(!pos1 || !pos2)
return 0
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]))
}
getDist2D(pos1, pos2)
{
if(!pos1 || !pos2)
return 0
return Sqrt((pos1[1]-pos2[1])*(pos1[1]-pos2[1])+(pos1[2]-pos2[2])*(pos1[2]-pos2[2]))
}
getClosestPlayerPed() {
dist := 0x7fffffff ;max int32
p := getStreamedInPlayersInfo()
if(!p)
return -1
lpos := getCoordinates()
if(!lpos)
return -1
id := -1
For i, o in p
{
t:=getDist(lpos,o.POS)
if(t<dist)
{
dist := t
id := i
}
}
PED := getPedById(id)
return PED
}
getClosestPlayerId() {
dist := 0x7fffffff ;max int32
p := getStreamedInPlayersInfo()
if(!p)
return -1
lpos := getCoordinates()
if(!lpos)
return -1
id := -1
For i, o in p
{
t:=getDist(lpos,o.POS)
if(t<dist)
{
dist := t
id := i
}
}
return id
}
CountOnlinePlayers()
{
if(!checkHandles())
return -1
dwOnline := readDWORD(hGTA, dwSAMP + 0x21A0B4)
if(ErrorLevel)
{
ErrorLevel := ERROR_READ_MEMORY
return -1
}
dwAddr := dwOnline + 0x4
OnlinePlayers := readDWORD(hGTA, dwAddr)
if(ErrorLevel)
{
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return OnlinePlayers
}
getPedCoordinates(dwPED) {
dwPED += 0
dwPED := Floor(dwPED)
if(!dwPED)
return ""
if(!checkHandles())
return ""
dwAddress := readDWORD(hGTA, dwPED + 0x14)
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
fX := readFloat(hGTA, dwAddress + 0x30)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
fY := readFloat(hGTA, dwAddress + 0x34)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
fZ := readFloat(hGTA, dwAddress + 0x38)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
ErrorLevel := ERROR_OK
return [fX, fY, fZ]
}
getTargetPos(dwId) {
dwId += 0
dwId := Floor(dwId)
if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
return ""
if(iRefreshScoreboard+iUpdateTick > A_TickCount)
{
if(oScoreboardData[dwId])
{
if(oScoreboardData[dwId].HasKey("PED"))
return getPedCoordinates(oScoreboardData[dwId].PED)
if(oScoreboardData[dwId].HasKey("MPOS"))
return oScoreboardData[dwId].MPOS
}
return ""
}
if(!updateOScoreboardData())
return ""
if(oScoreboardData[dwId])
{
if(oScoreboardData[dwId].HasKey("PED"))
return getPedCoordinates(oScoreboardData[dwId].PED)
if(oScoreboardData[dwId].HasKey("MPOS"))
return oScoreboardData[dwId].MPOS
}
return ""
}
getTargetPlayerSkinIdByPed(dwPED) {
if(!checkHandles())
return -1
dwAddr := dwPED + ADDR_CPED_SKINIDOFF
SkinID := readMem(hGTA, dwAddr, 2, "byte")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return SkinID
}
getTargetPlayerSkinIdById(dwId) {
if(!checkHandles())
return -1
dwPED := getPedById(dwId)
dwAddr := dwPED + ADDR_CPED_SKINIDOFF
SkinID := readMem(hGTA, dwAddr, 2, "byte")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return SkinID
}
; ##### Extra-Player-Fahrzeug-Funktionenn #####
NearPlayerInCar(dist)
{
TempDist := 100
if not dist dist := TempDist
p := getStreamedInPlayersInfo() ; streamedinplayers array
if(!p)
return
lpos := getCoordinates() ; your position
if(!lpos)
return
For i, o in p
{
t:=getDist(lpos,o.POS)
if(t<=dist)
{
if (t < TempDist) and ( t > 5 ) and getTargetVehicleModelNameById(i)
{
TempId := i
TempDist := t
}
}
}
return TempId
}
getVehiclePointerByPed(dwPED) {
dwPED += 0
dwPED := Floor(dwPED)
if(!dwPED)
return 0
if(!checkHandles())
return 0
dwAddress := readDWORD(hGTA, dwPED + 0x58C)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
ErrorLevel := ERROR_OK
return dwAddress
}
getVehiclePointerById(dwId) {
if(!dwId)
return 0
if(!checkHandles())
return 0
dwPed_By_Id := getPedById(dwId)
dwAddress := readDWORD(hGTA, dwPed_By_Id + 0x58C)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
ErrorLevel := ERROR_OK
return dwAddress
}
isTargetInAnyVehicleByPed(dwPED)
{
if(!checkHandles())
return -1
dwVehiclePointer := getVehiclePointerByPed(dwPedPointer)
if(dwVehiclePointer > 0)
{
return 1
}
else if(dwVehiclePointer <= 0)
{
return 0
}
else
{
return -1
}
}
isTargetInAnyVehiclebyId(dwId)
{
if(!checkHandles())
return -1
dwPedPointer := getPedById(dwId)
dwVehiclePointer := getVehiclePointerByPed(dwPedPointer)
if(dwVehiclePointer > 0)
{
return 1
}
else if(dwVehiclePointer <= 0)
{
return 0
}
else
{
return -1
}
}
getTargetVehicleHealthByPed(dwPed) {
if(!checkHandles())
return -1
dwVehPtr := getVehiclePointerByPed(dwPed)
dwAddr := dwVehPtr + ADDR_VEHICLE_HPOFF
fHealth := readFloat(hGTA, dwAddr)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return Round(fHealth)
}
getTargetVehicleHealthById(dwId) {
if(!checkHandles())
return -1
dwVehPtr := getVehiclePointerById(dwId)
dwAddr := dwVehPtr + ADDR_VEHICLE_HPOFF
fHealth := readFloat(hGTA, dwAddr)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return Round(fHealth)
}
getTargetVehicleTypeByPed(dwPED) {
if(!checkHandles())
return 0
dwAddr := getVehiclePointerByPed(dwPED)
if(!dwAddr)
return 0
cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_TYPE, 1, "Char")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
ErrorLevel := ERROR_OK
if(!cVal)
{
mid := getVehicleModelId()
Loop % oAirplaneModels.MaxIndex()
{
if(oAirplaneModels[A_Index]==mid)
return 5
}
return 1
}
else if(cVal==5)
return 2
else if(cVal==6)
return 3
else if(cVal==9)
{
mid := getVehicleModelId()
Loop % oBikeModels.MaxIndex()
{
if(oBikeModels[A_Index]==mid)
return 6
}
return 4
}
return 0
}
getTargetVehicleTypeById(dwId) {
if(!checkHandles())
return 0
dwAddr := getVehiclePointerById(dwId)
if(!dwAddr)
return 0
cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_TYPE, 1, "Char")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
ErrorLevel := ERROR_OK
if(!cVal)
{
mid := getVehicleModelId()
Loop % oAirplaneModels.MaxIndex()
{
if(oAirplaneModels[A_Index]==mid)
return 5
}
return 1
}
else if(cVal==5)
return 2
else if(cVal==6)
return 3
else if(cVal==9)
{
mid := getVehicleModelId()
Loop % oBikeModels.MaxIndex()
{
if(oBikeModels[A_Index]==mid)
return 6
}
return 4
}
return 0
}
getTargetVehicleModelIdByPed(dwPED) {
if(!checkHandles())
return 0
dwAddr := getVehiclePointerByPed(dwPED)
if(!dwAddr)
return 0
sVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_MODEL, 2, "Short")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
ErrorLevel := ERROR_OK
return sVal
}
getTargetVehicleModelIdById(dwId) {
if(!checkHandles())
return 0
dwAddr := getVehiclePointerById(dwId)
if(!dwAddr)
return 0
sVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_MODEL, 2, "Short")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
ErrorLevel := ERROR_OK
return sVal
}
getTargetVehicleModelNameByPed(dwPED) {
id := getTargetVehicleModelIdByPed(dwPED)
if(id > 400 && id < 611)
{
return ovehicleNames[id-399]
}
return ""
}
getTargetVehicleModelNameById(dwId) {
id := getTargetVehicleModelIdById(dwId)
if(id > 400 && id < 611)
{
return ovehicleNames[id-399]
}
return ""
}
getTargetVehicleLightStateByPed(dwPED) {
if(!checkHandles())
return -1
dwAddr := getVehiclePointerByPed(dwPED)
if(!dwAddr)
return -1
dwVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_LIGHTSTATE, 4, "Int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return (dwVal>0)
}
getTargetVehicleLightStateById(dwId) {
if(!checkHandles())
return -1
dwAddr := getVehiclePointerById(dwId)
if(!dwAddr)
return -1
dwVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_LIGHTSTATE, 4, "Int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return (dwVal>0)
}
getTargetVehicleLockStateByPed(dwPED) {
if(!checkHandles())
return -1
dwAddr := getVehiclePointerByPed(dwPED)
if(!dwAddr)
return -1
dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DOORSTATE)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return (dwVal==2)
}
getTargetVehicleLockStateById(dwId) {
if(!checkHandles())
return -1
dwAddr := getVehiclePointerById(dwId)
if(!dwAddr)
return -1
dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DOORSTATE)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return (dwVal==2)
}
getTargetVehicleColor1byPed(dwPED) {
if(!checkHandles())
return 0
dwAddr := getVehiclePointerByPed(dwPED)
if(!dwAddr)
return 0
sVal := readMem(hGTA, dwAddr + 1076, 1, "byte")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
ErrorLevel := ERROR_OK
return sVal
}
getTargetVehicleColor1byId(dwId) {
if(!checkHandles())
return 0
dwAddr := getVehiclePointerById(dwId)
if(!dwAddr)
return 0
sVal := readMem(hGTA, dwAddr + 1076, 1, "byte")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
ErrorLevel := ERROR_OK
return sVal
}
getTargetVehicleColor2byPed(dwPED) {
if(!checkHandles())
return 0
dwAddr := getVehiclePointerByPed(dwPED)
if(!dwAddr)
return 0
sVal := readMem(hGTA, dwAddr + 1077, 1, "byte")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
ErrorLevel := ERROR_OK
return sVal
}
getTargetVehicleColor2byId(dwId) {
if(!checkHandles())
return 0
dwAddr := getVehiclePointerById(dwId)
if(!dwAddr)
return 0
sVal := readMem(hGTA, dwAddr + 1077, 1, "byte")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
ErrorLevel := ERROR_OK
return sVal
}
getTargetVehicleSpeedByPed(dwPED) {
if(!checkHandles())
return -1
dwAddr := getVehiclePointerByPed(dwPED)
fSpeedX := readMem(hGTA, dwAddr + ADDR_VEHICLE_X, 4, "float")
fSpeedY := readMem(hGTA, dwAddr + ADDR_VEHICLE_Y, 4, "float")
fSpeedZ := readMem(hGTA, dwAddr + ADDR_VEHICLE_Z, 4, "float")
fVehicleSpeed := sqrt((fSpeedX * fSpeedX) + (fSpeedY * fSpeedY) + (fSpeedZ * fSpeedZ))
fVehicleSpeed := (fVehicleSpeed * 100) * 1.43 ;Der Wert "1.43" ist meistens auf jedem Server anders. Die Geschwindigkeit wird somit erhГѓВ¶ht bzw. verringert
return fVehicleSpeed
}
getTargetVehicleSpeedById(dwId) {
if(!checkHandles())
return -1
dwAddr := getVehiclePointerById(dwId)
fSpeedX := readMem(hGTA, dwAddr + ADDR_VEHICLE_X, 4, "float")
fSpeedY := readMem(hGTA, dwAddr + ADDR_VEHICLE_Y, 4, "float")
fSpeedZ := readMem(hGTA, dwAddr + ADDR_VEHICLE_Z, 4, "float")
fVehicleSpeed := sqrt((fSpeedX * fSpeedX) + (fSpeedY * fSpeedY) + (fSpeedZ * fSpeedZ))
fVehicleSpeed := (fVehicleSpeed * 100) * 1.43 ;Der Wert "1.43" ist meistens auf jedem Server anders. Die Geschwindigkeit wird somit erhГѓВ¶ht bzw. verringert
return fVehicleSpeed
}
; ##### Scoreboard-Funktionen #####
getPlayerNameById(dwId) {
dwId += 0
dwId := Floor(dwId)
if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
return ""
if(iRefreshScoreboard+iUpdateTick > A_TickCount)
{
if(oScoreboardData[dwId])
return oScoreboardData[dwId].NAME
return ""
}
if(!updateOScoreboardData())
return ""
if(oScoreboardData[dwId])
return oScoreboardData[dwId].NAME
return ""
}
getPlayerIdByName(wName) {
wName := "" wName
if(StrLen(wName) < 1 || StrLen(wName) > 24)
return -1
if(iRefreshScoreboard+iUpdateTick > A_TickCount)
{
For i, o in oScoreboardData
{
if(InStr(o.NAME,wName)==1)
return i
}
return -1
}
if(!updateOScoreboardData())
return -1
For i, o in oScoreboardData
{
if(InStr(o.NAME,wName)==1)
return i
}
return -1
}
getPlayerScoreById(dwId) {
dwId += 0
dwId := Floor(dwId)
if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
return ""
if(iRefreshScoreboard+iUpdateTick > A_TickCount)
{
if(oScoreboardData[dwId])
return oScoreboardData[dwId].SCORE
return ""
}
if(!updateOScoreboardData())
return ""
if(oScoreboardData[dwId])
return oScoreboardData[dwId].SCORE
return ""
}
getPlayerPingById(dwId) {
dwId += 0
dwId := Floor(dwId)
if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
return -1
if(iRefreshScoreboard+iUpdateTick > A_TickCount)
{
if(oScoreboardData[dwId])
return oScoreboardData[dwId].PING
return -1
}
if(!updateOScoreboardData())
return -1
if(oScoreboardData[dwId])
return oScoreboardData[dwId].PING
return -1
}
isNPCById(dwId) {
dwId += 0
dwId := Floor(dwId)
if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
return -1
if(iRefreshScoreboard+iUpdateTick > A_TickCount)
{
if(oScoreboardData[dwId])
return oScoreboardData[dwId].ISNPC
return -1
}
if(!updateOScoreboardData())
return -1
if(oScoreboardData[dwId])
return oScoreboardData[dwId].ISNPC
return -1
}
; internal stuff
updateScoreboardDataEx() {
if(!checkHandles())
return false
dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) ;g_SAMP
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return false
}
dwFunc := dwSAMP + FUNC_UPDATESCOREBOARD
VarSetCapacity(injectData, 11, 0) ;mov + call + retn
NumPut(0xB9, injectData, 0, "UChar")
NumPut(dwAddress, injectData, 1, "UInt")
NumPut(0xE8, injectData, 5, "UChar")
offset := dwFunc - (pInjectFunc + 10)
NumPut(offset, injectData, 6, "Int")
NumPut(0xC3, injectData, 10, "UChar")
writeRaw(hGTA, pInjectFunc, &injectData, 11)
if(ErrorLevel)
return false
hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
if(ErrorLevel)
return false
waitForSingleObject(hThread, 0xFFFFFFFF)
closeProcess(hThread)
return true
}
; internal stuff
updateOScoreboardData() {
if(!checkHandles())
return 0
oScoreboardData := []
if(!updateScoreboardDataEx())
return 0
iRefreshScoreboard := A_TickCount
dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
dwPlayers := readDWORD(hGTA, dwAddress + SAMP_PPOOL_PLAYER_OFFSET)
if(ErrorLevel || dwPlayers==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
wID := readMem(hGTA, dwPlayers + SAMP_SLOCALPLAYERID_OFFSET, 2, "Short") ;sLocalPlayerID
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
dwPing := readMem(hGTA, dwPlayers + SAMP_ILOCALPLAYERPING_OFFSET, 4, "Int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
dwScore := readMem(hGTA, dwPlayers + SAMP_ILOCALPLAYERSCORE_OFFSET, 4, "Int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
dwTemp := readMem(hGTA, dwPlayers + SAMP_ISTRLEN_LOCALPLAYERNAME_OFFSET, 4, "Int") ;iStrlen_LocalPlayerName
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
sUsername := ""
if(dwTemp <= 0xf) {
sUsername := readString(hGTA, dwPlayers + SAMP_SZLOCALPLAYERNAME_OFFSET, 16) ;szLocalPlayerName
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
}
else {
dwAddress := readDWORD(hGTA, dwPlayers + SAMP_PSZLOCALPLAYERNAME_OFFSET) ;pszLocalPlayerName
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
sUsername := readString(hGTA, dwAddress, 25)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
}
oScoreboardData[wID] := Object("NAME", sUsername, "ID", wID, "PING", dwPing, "SCORE", dwScore, "ISNPC", 0)
Loop, % SAMP_PLAYER_MAX
{
i := A_Index-1
dwRemoteplayer := readDWORD(hGTA, dwPlayers+SAMP_PREMOTEPLAYER_OFFSET+i*4) ;pRemotePlayer
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
if(dwRemoteplayer==0)
continue
dwPing := readMem(hGTA, dwRemoteplayer + SAMP_IPING_OFFSET, 4, "Int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
dwScore := readMem(hGTA, dwRemoteplayer + SAMP_ISCORE_OFFSET, 4, "Int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
dwIsNPC := readMem(hGTA, dwRemoteplayer + SAMP_ISNPC_OFFSET, 4, "Int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
dwTemp := readMem(hGTA, dwRemoteplayer + SAMP_ISTRLENNAME___OFFSET, 4, "Int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
sUsername := ""
if(dwTemp <= 0xf)
{
sUsername := readString(hGTA, dwRemoteplayer+SAMP_SZPLAYERNAME_OFFSET, 16)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
}
else {
dwAddress := readDWORD(hGTA, dwRemoteplayer + SAMP_PSZPLAYERNAME_OFFSET)
if(ErrorLevel || dwAddress==0) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
sUsername := readString(hGTA, dwAddress, 25)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
}
o := Object("NAME", sUsername, "ID", i, "PING", dwPing, "SCORE", dwScore, "ISNPC", dwIsNPC)
oScoreboardData[i] := o
dwRemoteplayerData := readDWORD(hGTA, dwRemoteplayer + 0x0) ;pPlayerData
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
if(dwRemoteplayerData==0) ;this ever happen?
continue
dwAddress := readDWORD(hGTA, dwRemoteplayerData + 489) ;iGlobalMarkerLoaded
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
if(dwAddress)
{
ix := readMem(hGTA, dwRemoteplayerData + 493, 4, "Int") ;x map
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
iy := readMem(hGTA, dwRemoteplayerData + 497, 4, "Int") ;y map
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
iz := readMem(hGTA, dwRemoteplayerData + 501, 4, "Int") ;z map
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
o.MPOS := [ix, iy, iz]
}
dwpSAMP_Actor := readDWORD(hGTA, dwRemoteplayerData + 0x0) ;pSAMP_Actor
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
if(dwpSAMP_Actor==0) ;not streamed in
continue
dwPed := readDWORD(hGTA, dwpSAMP_Actor + 676) ;pGTA_Ped_
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
if(dwPed==0)
continue
o.PED := dwPed
fHP := readFloat(hGTA, dwRemoteplayerData + 444)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
fARMOR := readFloat(hGTA, dwRemoteplayerData + 440)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
o.HP := fHP
o.ARMOR := fARMOR
}
ErrorLevel := ERROR_OK
return 1
}
; ##### Sonstiges #####
; written by David_Luchs %
; returns nth message of chatlog (beggining from bottom)
; -1 = error
GetChatLine(Line, ByRef Output, timestamp=0, color=0){
chatindex := 0
FileRead, file, %A_MyDocuments%GTA San Andreas User FilesCR-MPGenerationCchatlog.txt
loop, Parse, file, `n, `r
{
if(A_LoopField)
chatindex := A_Index
}
loop, Parse, file, `n, `r
{
if(A_Index = chatindex - line){
output := A_LoopField
break
}
}
file := ""
if(!timestamp)
output := RegExReplace(output, "U)^[d{2}:d{2}:d{2}]")
if(!color)
output := RegExReplace(output, "Ui){[a-f0-9]{6}}")
return
}
; ##### Spielerfunktionen #####
getPlayerHealth() {
if(!checkHandles())
return -1
dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
dwAddr := dwCPedPtr + ADDR_CPED_HPOFF
fHealth := readFloat(hGTA, dwAddr)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return Round(fHealth)
}
getPlayerArmor() {
if(!checkHandles())
return -1
dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
dwAddr := dwCPedPtr + ADDR_CPED_ARMOROFF
fHealth := readFloat(hGTA, dwAddr)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return Round(fHealth)
}
getPlayerInteriorId() {
if(!checkHandles())
return -1
iid := readMem(hGTA, ADDR_CPED_INTID, 4, "Int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return iid
}
getPlayerSkinID() {
if(!checkHandles())
return -1
dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
dwAddr := dwCPedPtr + ADDR_CPED_SKINIDOFF
SkinID := readMem(hGTA, dwAddr, 2, "byte")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return SkinID
}
getPlayerMoney() {
if(!checkHandles())
return ""
money := readMem(hGTA, ADDR_CPED_MONEY, 4, "Int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
ErrorLevel := ERROR_OK
return money
}
getPlayerWanteds() {
if(!checkHandles())
return -1
dwPtr := 0xB7CD9C
dwPtr := readDWORD(hGTA, dwPtr)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
Wanteds := readDWORD(hGTA, dwPtr)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return Wanteds
}
getPlayerWeaponId() {
if(!checkHandles())
return 0
WaffenId := readMem(hGTA, 0xBAA410, 4, "byte")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
return WaffenId
}
getPlayerWeaponName() {
id := getPlayerWeaponId()
if(id >= 0 && id < 44)
{
return oweaponNames[id+1]
}
return ""
}
getPlayerState() {
if(!checkHandles())
return -1
dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
State := readDWORD(hGTA, dwCPedPtr + 0x530)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return State
}
IsPlayerInMenu() {
if(!checkHandles())
return -1
IsInMenu := readMem(hGTA, 0xBA67A4, 4, "byte")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return IsInMenu
}
getPlayerMapPosX() {
if(!checkHandles())
return -1
MapPosX := readFloat(hGTA, 0xBA67B8)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return MapPosX
}
getPlayerMapPosY() {
if(!checkHandles())
return -1
MapPosY := readFloat(hGTA, 0xBA67BC)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return MapPosY
}
getPlayerMapZoom() {
if(!checkHandles())
return -1
MapZoom := readFloat(hGTA, 0xBA67AC)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return MapZoom
}
IsPlayerFreezed() {
if(!checkHandles())
return -1
dwGTA := getModuleBaseAddress("grand_theft_auto_san_andreas.dll", hGTA)
IPF := readMem(hGTA, dwGTA + 0x690495, 2, "byte")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return IPF
}
; ##### Fahrzeugfunktionen #####
isPlayerInAnyVehicle()
{
if(!checkHandles())
return -1
dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
return (dwVehPtr > 0)
}
isPlayerDriver() {
if(!checkHandles())
return -1
dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
if(!dwAddr)
return -1
dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
dwVal := readDWORD(hGTA, dwAddr + ADDR_VEHICLE_DRIVER)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return (dwVal==dwCPedPtr)
}
getVehicleHealth() {
if(!checkHandles())
return -1
dwVehPtr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
dwAddr := dwVehPtr + ADDR_VEHICLE_HPOFF
fHealth := readFloat(hGTA, dwAddr)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return Round(fHealth)
}
getVehicleType() {
if(!checkHandles())
return 0
dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
if(!dwAddr)
return 0
cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_TYPE, 1, "Char")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
ErrorLevel := ERROR_OK
if(!cVal)
{
mid := getVehicleModelId()
Loop % oAirplaneModels.MaxIndex()
{
if(oAirplaneModels[A_Index]==mid)
return 5
}
return 1
}
else if(cVal==5)
return 2
else if(cVal==6)
return 3
else if(cVal==9)
{
mid := getVehicleModelId()
Loop % oBikeModels.MaxIndex()
{
if(oBikeModels[A_Index]==mid)
return 6
}
return 4
}
return 0
}
getVehicleModelId() {
if(!checkHandles())
return 0
dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
if(!dwAddr)
return 0
sVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_MODEL, 2, "Short")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return 0
}
ErrorLevel := ERROR_OK
return sVal
}
getVehicleModelName() {
id:=getVehicleModelId()
if(id > 400 && id < 611)
{
return ovehicleNames[id-399]
}
return ""
}
getVehicleLightState() {
if(!checkHandles())
return -1
dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
if(!dwAddr)
return -1
dwVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_LIGHTSTATE, 4, "Int")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return (dwVal>0)
}
getVehicleEngineState() {
if(!checkHandles())
return -1
dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
if(!dwAddr)
return -1
cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_ENGINESTATE, 1, "Char")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return (cVal==24 || cVal==56 || cVal==88 || cVal==120)
}
getVehicleSirenState() {
if(!checkHandles())
return -1
dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
if(!dwAddr)
return -1
cVal := readMem(hGTA, dwAddr + ADDR_VEHICLE_SIRENSTATE, 1, "Char")
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
ErrorLevel := ERROR_OK
return (cVal==-48)
}
getVehicleLockState() {
if(!checkHandles())
return -1
dwAddr := readDWORD(hGTA, ADDR_VEHICLE_PTR)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return -1
}
if(!dwAddr)
return -1