You are not logged in.
Не очень понял, "разрешение экрана" 1920 - делить на 640 = 3 ?!
Offline
Как проверить, перевернулась ли машинf, так понимаю ключевое слово flipped, но есть два проверочных опкода 01f4 и 020d (чем отличаются?), а ещё есть опкод flipped_for_2_seconds - кто может занимался этим?
И чем отличается опкод wrecked?
_Щас попробую в трёшку впихнуть repair car
Last edited by reute70 (26-12-2011 08:50)
Offline
Спасиб за перевод(хотя кое-что и уточнено) !
__Вобщем, repair_car не удалось "внедрить" , 01f4 работает, а вот после замены его на опкод 020d уже при посадке ГГ в гараже скрипт стал срабатывать(смотрелось это - машина подпрыгивает и еле двигается), а garage $PORTLAND_PAYNSPRAY_GARAGE respray_done просто, как я понял - ставит "метку" покрашено!?
Offline
Так как repair в трёшке не работает, решил сделать, как один раз обсуждали - нажал две кнопки, удаляется машина, на её месте создаётся с тем же ID`ом, в неё помещается ГГ:
:UNFLIP_10
wait 250
if
Player.Defined($PLAYER_CHAR)
else_jump @UNFLIP_10
if
Actor.Driving($PLAYER_ACTOR)
else_jump @UNFLIP_10
03C0: 0@ = actor $PLAYER_ACTOR car
if and
05EE: key_pressed 17 // Ctrl
05EE: key_pressed 81 // Q
else_jump @UNFLIP_10
Car.StorePos(0@, 1@, 2@, 3@)
3@ += 2 // integer values
4@ = Car.Angle(0@)
Model.Destroy(0@)
Model.Load(0@)
038B: load_requested_models
while not Model.Available(0@) //8248: not model 6@ available
wait 10
end
00A5: 5@ = create_car 0@ at 1@ 2@ 3@
Car.Angle(5@) = 4@
0224: set_car 5@ health_to 900
Model.Destroy(0@)
01C3: remove_references_to_car 5@ // 0@
0369: put_player $PLAYER_CHAR in_car 0@
wait 200
jump @UNFLIP_10
но чё-то не то (зависает игра)?
Надо сначала ID машины взять, опкод помещения ГГ в машину не там поставил?
Offline
Попробуй это.
{$CLEO} wait 250 while true if 0256: player 0 defined then if 00E0: player 0 driving then if and 05EE: key_pressed 17 // Ctrl 05EE: key_pressed 81 // Q then 03C1: 0@ = player 0 car 05F5: call_scm_func @Car_Repair params_count 1 car 0@ end end end wait 0 end :Car_Repair 05E7: 0@ = car 0@ struct 0@ += 0x200 05DF: write_memory 0@ size 4 value 1000.0 virtual_protect 0 0@ += 0x88 05E3: call_method 0x545850 struct 0@ num_params 0 pop 0 05F6: ret 0
Last edited by DK22Pac (27-12-2011 01:02)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Спасибо большое, попробую!
Но ведь тут есть работа с памятью, значит, не на все ехе пойдёт?!
(я сначала пробую на Snow City, а уж потом на оригинальном
Offline
{$CLEO} wait 250 while true if 0256: player 0 defined then if 00E0: player 0 driving then if and 05EE: key_pressed 17 // Ctrl 05EE: key_pressed 81 // Q then 03C1: 0@ = player 0 car gosub @Car_Repair // 0@ - car handle end end end wait 0 end :Car_Repair 05E7: 0@ = car 0@ struct 05E5: 1@ = game_version if 1@ == 0 then 05E3: call_method 0x53C240 struct 0@ num_params 0 pop 0 else 05E3: call_method 0x53C480 struct 0@ num_params 0 pop 0 end 0@ += 0x200 05DF: write_memory 0@ size 4 value 1000.0 virtual_protect 0 return
SCM-функции в этой клео криво работют. Параметры не передаются.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Поправочка. SCM-функции работают на ура, просто были проблемы с .ini с Дежи-ного сайта. На радостях написал ещё парочку полезных SCM-функций.
//----------------------------------------------------------------------------------- :getCoordsFromActor { 05F5: call_scm_func @getCoordsFromActor 4 actor $PLAYER_ACTOR offset 0.0 2.0 0.0 store_to 0@ 1@ 2@ } 05E6: 0@ = actor 0@ struct 0@ += 4 05E5: 5@ = game_version 05EC: 6@ = current_thread_pointer 6@ += 0x34 if 5@ == 0 then 05E1: call 0x5A37D0 num_params 4 pop 4 0@ 1 6@ 6@ else 05E1: call 0x5A3A90 num_params 4 pop 4 0@ 1 6@ 6@ end 05F6: ret 3 1@ 2@ 3@ //----------------------------------------------------------------------------------- :getCoordsFromCar { 05F5: call_scm_func @getCoordsFromCar 4 car 3@ offset 0.0 2.0 0.0 store_to 0@ 1@ 2@ } 05E7: 0@ = car 0@ struct 0@ += 4 05E5: 5@ = game_version 05EC: 6@ = current_thread_pointer 6@ += 0x34 if 5@ == 0 then 05E1: call 0x5A37D0 num_params 4 pop 4 0@ 1 6@ 6@ else 05E1: call 0x5A3A90 num_params 4 pop 4 0@ 1 6@ 6@ end 05F6: ret 3 1@ 2@ 3@ //----------------------------------------------------------------------------------- :getCoordsFromObject { 05F5: call_scm_func @getCoordsFromObject 4 object 3@ offset 0.0 2.0 0.0 store_to 0@ 1@ 2@ } 05E8: 0@ = object 0@ struct 0@ += 4 05E5: 5@ = game_version 05EC: 6@ = current_thread_pointer 6@ += 0x34 if 5@ == 0 then 05E1: call 0x5A37D0 num_params 4 pop 4 0@ 1 6@ 6@ else 05E1: call 0x5A3A90 num_params 4 pop 4 0@ 1 6@ 6@ end 05F6: ret 3 1@ 2@ 3@ //----------------------------------------------------------------------------------- :getLocalVarOffset { 05F5: call_scm_func @getLocalVarOffset 1 var 0 store_to 1@ } 05EC: 1@ = current_thread_pointer 0@ *= 4 1@ += 0x30 005A: 1@ += 0@ 05F6: ret 1 1@ //----------------------------------------------------------------------------------- :getActorBodypartPosition { 05F5: call_scm_func @getActorBodypartPosition 2 actor $PLAYER_ACTOR bodypart SUPPERARML store_to 0@ 1@ 2@ } 05E6: 0@ = actor 0@ struct 0@ += 0x1A4 1@ *= 4 005A: 0@ += 1@ 05E0: 0@ = read_memory 0@ size 4 virtual_protect 0 0@ += 0x10 05E0: 0@ = read_memory 0@ size 4 virtual_protect 0 0@ += 0x80 05E0: 1@ = read_memory 0@ size 4 virtual_protect 0 0@ += 4 05E0: 2@ = read_memory 0@ size 4 virtual_protect 0 0@ += 4 05E0: 3@ = read_memory 0@ size 4 virtual_protect 0 05F6: ret 3 1@ 2@ 3@ //----------------------------------------------------------------------------------- :ActorRemoveBodypart { 05F5: call_scm_func @ActorRemoveBodypart 2 actor $PLAYER_ACTOR bodypart SUPPERARML } 05E6: 0@ = actor 0@ struct 05E5: 2@ = game_version if 2@ == 0 then 05E3: call_method 0x4EAEE0 struct 0@ num_params 2 pop 0 0 1@ else 05E3: call_method 0x4EAF90 struct 0@ num_params 2 pop 0 0 1@ end 05F6: ret 0
Номера
//----------------------------------------------------------------------------------- { eNums bodyparts } const SLOWERLEGL = 0 SMID = 1 SHEAD = 2 SUPPERARML = 3 SUPPERARMR = 4 SLHAND = 5 SRHAND = 6 SUPPERLEGL = 7 SUPPERLEGR = 8 SFOOTL = 9 SFOOTR = 10 SLOWERLEGR = 11 end
Last edited by DK22Pac (30-12-2011 19:13)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Э-э-э, а что такое ActorBodypart... с номерами ?
И чего там с ".ini с Дежи-ного сайта" ? - на всякий случай
Offline
Номера частей педа.
Сейчас у меня .ini от инсталлятора CLEO.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Да я перевёл, хоть и "немец" по образованию
Считывание координат частей тела... - трансформеры, подспорье в создании анимаций?!
Offline
to DK22Pac
На гтафорумс в ветке мода Хбокс автор говорил, что у тебя есть скрипт, чтоб фары светили пореалистичнее - можешь поделиться? А то в трёшке это один из самых стрёмных моментов...
Offline
@reute70
http://www.mediafire.com/?rdvvedn46oaz70d
Вот мой кар-спаунер)
{$CLEO} 05E5: 8@ = game_version while true wait 0 if player.Defined($PLAYER_CHAR) then for 0@ = 90 to 150 05F5: call_scm_func @getCarModelName 1 model 0@ get_string_offset_to 10@ 05F5: call_scm_func @getStringNumChars 2 string_offset 10@ include_null_terminator 0 get_num_chars_to 9@ if 9@ <> 0 then 05F5: call_scm_func @testCheat 2 string_offset 10@ num_chars 9@ get_result_to 3@ if 3@ == 1 then 0054: store_player $PLAYER_CHAR position_to 1@ 2@ 3@ 02C1: set 4@ 5@ 6@ to_car_path_coords_closest_to 1@ 2@ 3@ 05F5: call_scm_func @getDistanceBetweenPoints 6 XYZ 1@ 2@ 3@ and_XYZ 4@ 5@ 6@ to 7@ if 7@ > 15.0 then 05F5: call_scm_func @getCoordsFromActor 4 actor $PLAYER_ACTOR offset 0.0 3.0 0.0 store_to 4@ 5@ 6@ end 05F5: call_scm_func @spawnCar 4 model 0@ XYZ 4@ 5@ 6@ 9@ *= 2 if 8@ == 0 then 9@ += 0x95CCB6 else 9@ += 0x95CE6E end if 8@ == 0 then 13@ = 0x95CCB6 14@ = 0x5051E0 else 13@ = 0x95CE6E 14@ = 0x5052C0 end 0085: 7@ = 13@ 0085: 11@ = 10@ for 15@ = 0 to 19 05E0: 12@ = read_memory 11@ size 1 virtual_protect 0 05DF: write_memory 13@ size 2 value 12@ virtual_protect 0 inc(11@) 13@ += 2 end 05DF: write_memory 9@ size 2 value 0x20 virtual_protect 0 // 9@ += 2 05DF: write_memory 9@ size 2 value 0x73 virtual_protect 0 // s 9@ += 2 05DF: write_memory 9@ size 2 value 0x70 virtual_protect 0 // p 9@ += 2 05DF: write_memory 9@ size 2 value 0x61 virtual_protect 0 // a 9@ += 2 05DF: write_memory 9@ size 2 value 0x77 virtual_protect 0 // w 9@ += 2 05DF: write_memory 9@ size 2 value 0x6E virtual_protect 0 // n 9@ += 2 05DF: write_memory 9@ size 2 value 0x65 virtual_protect 0 // e 9@ += 2 05DF: write_memory 9@ size 2 value 0x64 virtual_protect 0 // d 05E1: call 14@ num_params 2 pop 2 0 7@ end end end end end {$I scmfuncs.txt}
SCM-ф-ции
//----------------------------------------------------------------------------------- :spawnCar { 05F5: call_scm_func @spawnCar 4 model 0@ XYZ 4@ 5@ 6@ } model.Load(0@) 038B: load_requested_models car.Create(4@, 0@, 1@, 2@, 3@) model.Destroy(0@) car.RemoveReferences(4@) 05F6: ret 0 //----------------------------------------------------------------------------------- :showTextBox { 05F5: call_scm_func @showTextBox 1 string_offset 0@ } 05E5: 1@ = game_version if 1@ == 0 then 3@ = 0x95CCB6 4@ = 0x5051E0 else 3@ = 0x95CE6E 4@ = 0x5052C0 end for 1@ = 0 to 19 05E0: 2@ = read_memory 0@ size 1 virtual_protect 0 05DF: write_memory 3@ size 2 value 2@ virtual_protect 0 inc(0@) 3@ += 2 end 05E1: call 4@ num_params 2 pop 2 0 3@ 05F6: ret 0 //----------------------------------------------------------------------------------- :getCoordsFromActor { 05F5: call_scm_func @getCoordsFromActor 4 actor $PLAYER_ACTOR offset 0.0 2.0 0.0 store_to 0@ 1@ 2@ } 05E6: 0@ = actor 0@ struct 0@ += 4 05E5: 5@ = game_version 05EC: 6@ = current_thread_pointer 6@ += 0x34 if 5@ == 0 then 05E1: call 0x5A37D0 num_params 4 pop 4 0@ 1 6@ 6@ else 05E1: call 0x5A3A90 num_params 4 pop 4 0@ 1 6@ 6@ end 05F6: ret 3 1@ 2@ 3@ //----------------------------------------------------------------------------------- :getDistanceBetweenPoints { 05F5: call_scm_func @getDistanceBetweenPoints XYZ 1@ 2@ 3@ and 4@ 5@ 6@ to 7@ } 0087: 6@ = 0@ 0087: 7@ = 1@ 0087: 8@ = 2@ 0063: 6@ -= 3@ 0063: 7@ -= 4@ 0063: 8@ -= 5@ 006B: 6@ *= 6@ 006B: 7@ *= 7@ 006B: 8@ *= 8@ 005B: 6@ += 7@ 005B: 6@ += 8@ 01FB: 6@ = square_root 6@ if 6@ < 0.0 then 0097: absf 6@ end 05F6: ret 1 6@ //----------------------------------------------------------------------------------- :getCarModelName { 05F5: call_scm_func @getCarModelName 1 model 90 get_string_offset_to 1@ } 0@ *= 4 0@ += 0x83D408 05E0: 0@ = read_memory 0@ size 4 virtual_protect 0 0@ += 0x4 05F6: ret 1 0@ //----------------------------------------------------------------------------------- :getStringNumChars { 05F5: call_scm_func @getStringNumChars 2 string_offset 1@ include_null_terminator 1 get_num_chars_to 2@ } for 2@ = 0 to 99 05E0: 3@ = read_memory 0@ size 1 virtual_protect 0 if 3@ == 0 then if 1@ == 1 then inc(2@) end 05F6: ret 1 2@ end inc(0@) end 05F6: ret 1 0 //----------------------------------------------------------------------------------- :stringReverse { 05F5: call_scm_func @stringReverse 4 string_offset 0x885B90 num_chars 1@ store_to 0x5F7650 skip_null_terminator 1 } if 3@ == 0 then 1@ -= 2 else dec(1@) end 005A: 2@ += 1@ 0085: 6@ = 2@ for 4@ = 0 to 1@ 05E0: 5@ = read_memory 0@ size 1 virtual_protect 0 05DF: write_memory 2@ size 1 value 5@ virtual_protect 0 dec(2@) inc(0@) end inc(6@) 05DF: write_memory 6@ size 1 value 0 virtual_protect 0 05F6: 0 //----------------------------------------------------------------------------------- :testCheat { 05F5: call_scm_func @testCheat 2 string_offset 1@ num_chars 2@ get_result_to 3@ } 05E5: 3@ = game_version if 3@ == 0 then 05F5: call_scm_func @stringReverse 4 string_offset 0x885B90 num_chars 1@ store_to 0x5F7650 skip_null_terminator 1 05E2: call_function 0x5A08B0 num_params 2 pop 2 0@ 0x5F7650 2@ else 05F5: call_scm_func @stringReverse 4 string_offset 0x885B40 num_chars 1@ store_to 0x5F7438 skip_null_terminator 1 05E2: call_function 0x5A0B70 num_params 2 pop 2 0@ 0x5F7438 2@ end if 2@ == 0 then if 3@ == 0 then 05DF: write_memory 0x885B90 size 1 value 0 virtual_protect 0 else 05DF: write_memory 0x885B40 size 1 value 0 virtual_protect 0 end 05F6: ret 1 1 else 05F6: ret 1 0 end
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Большое спасибо!
Насчёт карспаунера - scm_func вызываются из текстового файла, лежащего в папке Cleo ?!
Offline
Нет, эти функции куда-нибудь вниз скрипта кинуть.
Offline
Он у меня в папке CLEO.
Вот все нужные файлы. (в аттаче)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Насчёт headlight.asi - прямоугольник света у фары всё-таки немного виден и корона "слегка" просвечивает через крыло машины - это, наверно, вряд ли можно исправить(с таким движком)?
Offline
Поставил простенький код 041E: set_radio_station 9 0 (когда в машине), срабатывает, но мп3 начинает проигрываться, когда в меню выйдешь и обратно (поставил на клавишу Delete) - как сделать, шоб сразу, как при переборе станций?
И каждый раз, когда нажимаешь - проигрываться начинает с начала "списка" - можно сделать, чтоб случайный был трэк? (этакий рандомайзер
Offline
Как оживлённо на форуме!
Спрошу по-другому - есть опкод для вызова паузы в игре? - надо сымитировать нажатие кнопки Esc и обратно в игру.
Offline
Если в меню и можно, то обратно с помощью скриптов - нет.
Offline
Хотя б в меню, ещё раз стукнуть по эскейпу смогу - не в лом!
Offline
Поздно прочел заголовок темы "Cleo для GTA III". Например, для са адрес byte 0xBA677B - запись 1 или 0 вкл/выкл меню... Для III не знаю, но все можно найти в .idb Листенера.
Last edited by Jack Daniel's (13-02-2012 13:04)
Offline
Решил через Cleo сделать гараж, откуда в миссии Getaway выбегают мужики, чтоб ограбить банк
0219: $PORTLAND_MY_GARAGE = create_garage 18 from 1092.3 -234.1 8.5 1082.3 -242.5 13.5
03DA: set_garage $PORTLAND_MY_GARAGE camera_follows_player // достаточно только первого опкода
- дверь открывается, машина исчезает при закрытии "шторки" (изнутри можно наблюдать, если отойти), при открытии - ничего нет и так впихать тачек можно много...
Попробую конечно, и через main.scm(использовал и локальные переменные), но хотелось бы понять...
PS Извиняюсь, поставил задержку wait 1000 - всё нормально, видать, несколько раз активировался гараж при нажатии клавиши(вначале хотел сделать пикап, но для отладки сделал по-простому) !
PPS Вобщем при загрузке сохранений дверь гаража не открывается, хотя за ней машины есть и при отдалении от них они исчезают, а ещё хотел попробовать использовать при активировании гаража локальные переменные (маркеры остаются)!
Last edited by reute70 (29-02-2012 15:08)
Offline