Перейти к содержанию

Constantines

Members
  • Постов

    107
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Весь контент Constantines

  1. Сам аджастер просит пересобрать архив. И неплохой пример добавления транспортного средства.
  2. Всем привет, если есть кто живой. Нужна помощь. А то чет и так и этак. но не выходит нихрена. Есть код, записывающий текущую скорость авто в файл: [spoiler=Код] {$CLEO .cs} 0000: :100kmh wait 1000 if and 056D: actor $PLAYER_ACTOR defined Actor.Driving($PLAYER_ACTOR) jf @100kmh 0811: 3@ = actor $PLAYER_ACTOR used_car 02E3: 1@ = car 3@ speed 1@ *= 3.6 0092: 2@ = float 1@ to_integer if 2@ > 100 then 0AF1: write_int 2@ to_ini_file "cleo\test.ini" section "SPEED" key "curent" end jump @100kmh Есть код таймера (отдельно уже нету). По отдельности они работают. Сам по себе таймер (секундомер) и чет типа спидометра (при чем пишет реальную скорость, в отличие от многих спидометров, думаю потом даже какой нибудь подправить). Но когда совмещаю оба кода, что-то не клеится, то вылетает игра, после посадки авто, то таймер на работает. [spoiler=Последнее совмещение] {$CLEO .cs} 0000: :100KMH2 wait 1000 if and 056D: actor $PLAYER_ACTOR defined Actor.Driving($PLAYER_ACTOR) jf @100KMH2 0811: 3@ = actor $PLAYER_ACTOR used_car 02E3: 1@ = car 3@ speed 1@ *= 3.6 0092: 2@ = float 1@ to_integer :100KMH2_2 wait 0 if 00E1: player 0 pressed_key 1 // Move forvard jf @100KMH2 :100KMH3 while true 0A8F: 0@ = 0 + 32@ // int 03F0: enable_text_draw 1 045A: draw_text_1number 200.0 200.0 GXT 'NUMBER' number 0@ // ~1~ if 0@ == 1740 then continue 0AF1: write_int 2@ to_ini_file "cleo\test.ini" section "SPEED" key "curent" else jump @100KMH2 end end Суть скрипта в том, чтобы он записал ту скорость автомобиля, которую он достиг с момента нажатия на педаль газа и прохождения 1740 мс. Т.е. чтобы таймер всегда ввел отсчет с 0 и начинал работу после нажатия клавиши, отвечающую за разгон автомобиля, и прерывался в двух случаях: 1) когда вышеупомянутая клавиша отпущена; 2) когда прошло 1740 мс. Или наоборот, чтобы в файл записывалось время в мс, которое прошло со старта автомобиля до достижения скорости в 100 км/ч. В обоих вариантах можно сделать не только для одного промежутка времени или скорости, а для двух, трех. Например, для скорости 200 и 300 км/ч (подойдет для всех) или для времени 5340 и 14970 (в моем случае). В общем буду рад любой помощи. Спасибо за внимание. ЗЫ. Не знаю кому пригодиться данный скрипт, но мне нужен для конкретной настройки ускорения транспорта.
  3. за положение рук на руле отвечает флаг IS_LOW в хандлинге модели (в конце строки хандлинга, где много цифр), для редактирования рекомендую Handling Editor for GTA SA v.2.3 by Saeid kholdi. если флаг включен, то две руки на руле, если выключен, то одна.
  4. ответ кроется в вопросе) либо дамми, что проще и удобнее. либо руль, но там уже придется немного поработать с моделью.
  5. от настроек хандлинга модели. 2 варианта посадки.
  6. Настраивать хандлинг автомобилей. По поводу вертолета с магнитом, нашел опкод, с которым не надо будет работь с игровой памятью. 088B: set_car 1@ form_drag_multiplier_to 0.1 (Установить машине 1@ притяжение: значением 0.1 чем меньше притяжение, тем легче ее будет поднять вертолету)
  7. Хм... а никто не хочет сделать дино-стенд, на подобие NFS U2?
  8. Доброго времени суток.Кто-нибудь пользовался Game Handling Editor v1.0 от Chel555. Чет он у меня нихрена значения не вбивает и не меняет. Даже с выбором id транспорта проблемы. Когда удаляю 400, то сразу вылет. Выбор сидя из транспорта работает. Как выставить в lower limit "-0.2" вообще не понятно. Т.к. минус сразу убирается, при редактировании и запятую тоже выставить не получается. Разобрался. Забыл отредактировать. В общем "минус" можно приписать после того написал число, а чтобы перейти за запятую там есть кнопка "/10". Не все изменения меняются сразу. Иногда приходится респавнить авто. Но зато хандлинг намного удобнее настраивать, чем постоянно выходить из игры.
  9. Значит надо додумать скрипт, чтобы настройки менялись у той машины которая прицеплена к магниту. Но у меня и этот работает)) На днях наткнулся на скрипт от DenSpb, где дают звезду за проезд на красный, но подумал как то не совсем логично. В жизни вас в розыск никто подавать за такое не будет. И вот для тех, кому некуда девать бабло в игре, чуток изменил код, и теперь за проезд на красный с вас будут снимать 490$ (именно такой ценник за данное нарушение в сша нашел на просторах интернета), как бы автофиксация нарушений. [spoiler=штраф 490$] //Проехал на красный - плати штраф 490$ (клео-скрипт для гта са, автор: DenSPB, доработка: L_S) {$CLEO} var 17@ : Integer 18@ : Integer 6@ : Integer 8@ : Integer 29@ : Integer 30@ : Integer 25@ : Integer end const Player_WAS_in_front_of_red_traffic_light = 17@ Traffic_light_type = 18@ // 1 or 2 Type_of_red_traffic_light = 6@ // 0,1,2,3 0 - both not red 3 - both red Player_IS_in_front_of_red_traffic_light = 8@ Traffic_light_model = 25@ end 19@ = 30000.0 20@ = 30000.0 //---------------------------------------------------------------------------------------------------- while true wait 0 if player.Defined($PLAYER_CHAR) then if and actor.Driving($PLAYER_ACTOR) 84A7: not actor $PLAYER_ACTOR driving_boat 84C8: not actor $PLAYER_ACTOR driving_flying_vehicle then if or 89AE: not actor $PLAYER_ACTOR driving_train actor.DrivingVehicleType($PLAYER_ACTOR, #TRAM) then 03C0: 28@ = actor $PLAYER_ACTOR car if 8ABD: not vehicle 28@ siren_on then //--------------------------------------------------------------------------Определяем ближайший светофор actor.StorePos($PLAYER_ACTOR 0@ 1@ 2@) 0509: 14@ = distance_between_XY 0@ 1@ and_XY 19@ 20@ if gosub @GET_RANDOM_OBJECT then 23@ = 0 0085: Traffic_light_model = 31@ // (int) 0087: 19@ = 12@ // (float) 0087: 20@ = 13@ // (float) 0087: 27@ = 26@ // (float) 27@ += 1.0 0509: 14@ = distance_between_XY 0@ 1@ and_XY 19@ 20@ 0176: 24@ = object 9@ Z_angle 02F6: 10@ = cosine 24@ // (float) синус 02F7: 22@ = sine 24@ // (float) косинус 0073: 10@ /= 22@ // (float) тангенс //----------------------------------Определяем тип светофора if and 24@ >= 60.0 24@ <= 150.0 then Traffic_light_type = 2 else if and 24@ >= 240.0 24@ <= 330.0 then Traffic_light_type = 2 else Traffic_light_type = 1 end end end //-----------------------------------------------------------------Производим проверки от незаслуженных звезд actor.StorePos($player_actor 0@ 1@ 2@) if and 14@ < 30.0 // если ближайший светофор достаточно близко 06BD: no_obstacles_between 0@ 1@ 2@ and 19@ 20@ 27@ solid 1 car 0 actor 0 object 0 particle 0 // и нет препятствий между светофором и игроком then // иначе интереса светофор не представляют else 23@ = 0 continue end //------------------------Определяем позицию игрока относительно светофора 0087: 22@ = 0@ // (float) 0063: 22@ -= 19@ // (float) 006B: 22@ *= 10@ // (float) 005B: 22@ += 20@ // (float) if or 24@ < 90.0 24@ > 270.0 then if 0025: 22@ > 1@ // (float) Y_act < tg_Z_tl*(X_act-X_tl)+Y_tl then Player_IS_in_front_of_red_traffic_light = True else Player_IS_in_front_of_red_traffic_light = False end else if 24@ == 90.0 then if 0025: 0@ > 19@ // (float) X_act > X_tl then Player_IS_in_front_of_red_traffic_light = True else Player_IS_in_front_of_red_traffic_light = False end else if 24@ == 270.0 then if 0025: 19@ > 0@ // (float) X_act < X_tl then Player_IS_in_front_of_red_traffic_light = True else Player_IS_in_front_of_red_traffic_light = False end else // Z > 90 AND Z < 270 if 0025: 1@ > 22@ // (float) Y_act > tg_Z_tl*(X_act-X_tl)+Y_tl then Player_IS_in_front_of_red_traffic_light = True else Player_IS_in_front_of_red_traffic_light = False end end end end //------------------------------------------------------------------------ if 23@ == 0 then if or // Список светофоров, запрещённых к пересечению только спереди (при красном сигнале) Traffic_light_model == 3855 Traffic_light_model == 1315 Traffic_light_model == 1352 Traffic_light_model == 1350 Traffic_light_model == 1351 Traffic_light_model == 3516 then if Player_IS_in_front_of_red_traffic_light == True then 23@ = 1 end else if or // Список светофоров, запрещённых к пересечению и спереди, и сзади Traffic_light_model == 1283 Traffic_light_model == 1284 then 23@ = 1 end end else if 23@ == 2 then if Player_IS_in_front_of_red_traffic_light <> Player_WAS_in_front_of_red_traffic_light then 23@ = 3 end end end Player_WAS_in_front_of_red_traffic_light = Player_IS_in_front_of_red_traffic_light //---------------------------Определяем текущие цвета светофоров типов 1 и 2 0AA7: call_function 0x49D3A0 num_params 0 pop 0 29@ // Направление 2 (запад-восток) 0AA7: call_function 0x49D350 num_params 0 pop 0 30@ // Направление 1 (север-юг) for 16@ = 8 to 31 08C3: clear 29@ bit 16@ 08C3: clear 30@ bit 16@ end // значения функций: 0 - зелёный, 1 - желтый, 2 - красный if 30@ == 2 then if 29@ == 2 then Type_of_red_traffic_light = 3 // both are red else Type_of_red_traffic_light = 1 end else if 29@ == 2 then Type_of_red_traffic_light = 2 else Type_of_red_traffic_light = 0 end end //-------------------------------------------------------------------------- if or Type_of_red_traffic_light == 3 Type_of_red_traffic_light == Traffic_light_type then if 23@ == 1 then 23@ = 2 else if 23@ == 3 then if player.Defined($PLAYER_CHAR) then Player.Money($PLAYER_CHAR) += -490 end 23@ = 0 end end else 23@ = 0 end // type == type else 23@ = 0 end // siren on else 23@ = 0 end else 23@ = 0 end else 23@ = 0 end // player defined end // while main //----------------------------------------------------------------------------------------- :GET_RANDOM_OBJECT if 0AE3: 9@ = random_object_near_point 0@ 1@ 2@ in_radius 30.0 find_next 0 then repeat 0984: 31@ = object 9@ model if and 31@ <> 3855 // GAY_TRAFFIC_LIGHT + 31@ <> 1315 // TRAFFICLIGHT1 + 31@ <> 1352 // CJ_TRAFFIC_LIGHT3 + 31@ <> 1350 // CJ_TRAFFIC_LIGHT4 + 31@ <> 1351 // CJ_TRAFFIC_LIGHT5 + 31@ <> 3516 // VGSSTRIPTLIGHTS1 + 31@ <> 1283 // MTRAFFIC1 + then if 31@ <> 1284 // MTRAFFIC2 + then 31@ = 0 end end if 31@ <> 0 then object.StorePos(9@ 12@ 13@ 26@) 0509: 14@ = distance_between_XY 0@ 1@ and_XY 19@ 20@ 0509: 3@ = distance_between_XY 0@ 1@ and_XY 12@ 13@ if 0025: 14@ > 3@ // (float) then 0485: return_true return end end until 8AE3: 9@ = random_object_near_point 0@ 1@ 2@ in_radius 30.0 find_next 1 end 8485: return_false return
  10. Не, это не то что бы хотелось видеть. Там были расписаны конкретно по разделам для записи в переменную, для проверок, для присвоения переменной какого-либо значения. Разделы опкодов для транспорта, объекта, актеров и тд. Короче очень удобный сайт был.
  11. ID вертолета поменял? Модлоадер у меня стоит. Фла, там где скрипты тестю, нету. Но с ним тоже не должно быть проблем. Так как просто вертолет будет на добавочной id. Мое мнение. И еще данный скрипт меняет лишь параметры handling'a у FIRETRUK (у моделей firela и firetruk). ЗЫ. Никто не подскажет сайт похожий на http://gtascript.ru. Список опкодов был нормально раскидан по разделам и плюс обозначения для каждого опкода, но похоже сайт закрылся.
  12. Всем привет, решил сделать продолжение скриптов про иконки. С подковами проблем не возникло, а вот с фотографиями есть вопрос. Как сделать проверку на то, что объект сфотографирован? pickup.Picked_up($2967) и 0833: object $2967 photographed не проходят. Иконка с карты не удаляется. Даже когда в опкоде 0833 вместо переменной прописываю ID объекта. Есть вариант написать проверку, мол когда игрок пешком в указанной точке в указанном радиусе сделал снимок, тогда удаляем маркер. Но так как то замудренно. Есть ли варианты попроще? Второй вариант. При условии, что существует пикап, будет создаваться объект рядом с пикапом, и тогда, думаю, будет работать опкод 0833. Но это будет хорошо выглядеть лишь с прозрачным объектом, который не будет виден глазу игрока и не будет мешать игровому процессу. Например объект с ID 3074, именуемый как "d9_runway", он прозрачный (что даже не знаю зачем он вообще в игре) и не имеет коллизии. Жду еще варианты. Как оказалось не совсем он и прозрачный. Но проверка в таком случае работает, иконка удаляется и объект тоже. И как работает опкод 04C5: actor $PLAYER_ACTOR photographed // как проверка "актер фотографирует?" не прошло, значит скорее всего проверяет сфотографирован ли игрок? (но кто его фотографирует?). [spoiler=3074]http://www.imageup.ru/img12/thumb/gallery163306091.jpghttp://www.imageup.ru/img12/thumb/obekt3306092.jpg
  13. Чтоб тема не совсем утухла буду выкладывать примеры работы с адресами памяти. Пока что простые, так как и сам еще учусь. [spoiler=цвета авто] {$CLEO .cs} 0000: :CARSTRUCT wait 0 if Actor.Driving($PLAYER_ACTOR) then 03C0: 0@ = actor $PLAYER_ACTOR car // присваиваем переменной 0 модель авто, в которой находится игрок 0A97: 1@ = car 0@ struct // присваиваем 1@ структуру авто 0@ // 0x0434 BYTE colorPrimary // 0x0435 BYTE colorSecondary // 0x0436 BYTE colorTertiary // 0x0437 BYTE colorQuaternary 0A8E: 2@ = 1@ + 0x0434 // смещение к первому цвету, тот что [prim] в dff 0A8D: 3@ = read_memory 2@ size 1 virtual_protect 0 // 1 - потому что 0x0434 - BYTE else jump @CARSTRUCT end if 0AB0: key_pressed 48 // проверка на нажатие кнопки "0" then 3@ = 0 // id цвета из carcolors.dat - красим в черный цвет 0A8C: write_memory 2@ size 1 value 3@ virtual_protect 0 //записываем новое значение в память end if 0AB0: key_pressed 49 // проверка на нажатие кнопки "1" then 3@ = 126 // id цвета из carcolors.dat - красим в розовый цвет 0A8C: write_memory 2@ size 1 value 3@ virtual_protect 0 //записываем новое значение в память end jump @CARSTRUCT [spoiler=статус дверей] {$CLEO .cs} 0000: :CARSTRUCT wait 0 if Actor.Driving($PLAYER_ACTOR) then 03C0: 0@ = actor $PLAYER_ACTOR car // присваиваем переменной 0 модель авто, в которой находится игрок 0A97: 1@ = car 0@ struct // присваиваем 1@ структуру авто 0@ 0A8E: 2@ = 1@ + 0x4F8 // смещение к нужному адресу 0A8D: 3@ = read_memory 2@ size 4 virtual_protect 0 // 4 - потому что 0x4F8 - dword else jump @CARSTRUCT end if 0AB0: key_pressed 57 // проверка на нажатие кнопки "9" then 3@ = 1 // двери открыты 0A8C: write_memory 2@ size 4 value 3@ virtual_protect 0 //записываем новое значение в память end if 0AB0: key_pressed 48 // проверка на нажатие кнопки "0" then 3@ = 2 // двери закрыты 0A8C: write_memory 2@ size 4 value 3@ virtual_protect 0 //записываем новое значение в память end jump @CARSTRUCT [spoiler=статус бомбы] {$CLEO .cs} 0000: :CARSTRUCT wait 0 if Actor.Driving($PLAYER_ACTOR) then 03C0: 0@ = actor $PLAYER_ACTOR car // присваиваем переменной 0 модель авто, в которой находится игрок 0A97: 1@ = car 0@ struct // присваиваем 1@ структуру авто 0@ 0A8E: 2@ = 1@ + 0x4A8 // смещение к нужному адресу 0A8D: 3@ = read_memory 2@ size 1 virtual_protect 0 // 1 - потому что 0x4A8 - byte else jump @CARSTRUCT end if 0AB0: key_pressed 48 // проверка на нажатие кнопки "0" then 3@ = 0 // нет бомбы 0A8C: write_memory 2@ size 1 value 3@ virtual_protect 0 //записываем новое значение в память end if 0AB0: key_pressed 49 // проверка на нажатие кнопки "1" then 3@ = 1 // бомба с таймером, активация ЛКМ 0A8C: write_memory 2@ size 1 value 3@ virtual_protect 0 //записываем новое значение в память end jump @CARSTRUCT
  14. Готово. Проверяй. Только ID вертолета поменяй на свое. Если еще подумать, то можно написать так, чтобы у любого транспорта вес менялся на 100.0, когда игрок в вертолете. Для проверки работы (меняются ли параметры авто?) можешь после записи параметров в память добавить строчки: 0AF3: write_int 14@ = get_int_from_ini_file "cleo\test.ini" section "MAIN" key "Mass" 0AF3: write_int 16@ to_ini_file "cleo\test.ini" section "MAIN" key "TurnMass" [spoiler=Skylift magnet] {$CLEO .cs} 0000: NOP :NONAME_2 wait 0 if not Actor.Driving($PLAYER_ACTOR) else_jump @NONAME_2 0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 5@ closest_ped_to 7@ if not Car.Wrecked(5@) else_jump @NONAME_2 00D6: if Car.Model(5@) == 548 004D: jump_if_false @NONAME_2 else_jump @NONAME_2 if or 0206: actor $PLAYER_ACTOR near_car 5@ radius 500.0 500.0 500.0 sphere 0 on_foot 0207: actor $PLAYER_ACTOR near_car 5@ radius 500.0 500.0 500.0 sphere 0 in_car else_jump @NONAME_2 wait 0 0788: enable_heli 5@ magnet 1 Actor.RemoveReferences(7@) if 00DD: actor $PLAYER_ACTOR driving_car_with_model 548 then 30@ = 1 end while 30@ = 1 wait 0 0AA7: call_function 0x00403DA0{_getModelPtr} num_params 1 pop 1 iId 544 pclInfo 12@ // 544 Id транспорта, у которого надо изменить параметры 12@ += 0x4A 0A8D: 11@ = read_memory 12@ size 2 virtual_protect 0 11@ *= 0xE0 11@ += 0xC2B9DC 0A8E: 13@ = 11@ + 0x4 // int 0A8D: 14@ = read_memory 13@ size 4 virtual_protect 0 // Mass 14@ = 100.0 0A8C: write_memory 13@ size 4 value 14@ virtual_protect 0 0A8E: 15@ = 11@ + 0xC // int 0A8D: 16@ = read_memory 15@ size 4 virtual_protect 0 // TurnMass 16@ = 200.0 0A8C: write_memory 15@ size 4 value 16@ virtual_protect 0 end jump @NONAME_2 [spoiler=Скрин]http://www.imageup.ru/img264/thumb/gallery73304907.jpg
  15. Ну да настройки меняются. Тоже потестил(код ниже). Тебе надо привязку к id авто сделать, т.е. пока игрок в вертолете тогда вес нужных нам моделей меняется на указанное значение. Это без проверки на то что авто прицеплено куда то. 0441: 1@ = car 2@ model - записать в переменую id машины, а уже потом получать структуру авто и адрес и менять параметры. Но пока у меня только вылеты. [spoiler=Код] {$CLEO .cs} 0000: NOP :TEST_1 wait 100 if and Player.Defined($PLAYER_CHAR) Actor.Driving($PLAYER_ACTOR) jf @TEST_1 :TEST_2 wait 50 0@ = Actor.CurrentCar($PLAYER_ACTOR) if 0AB0: key_pressed 48 // 0 then 0A97: 1@ = car 0@ struct 1@ += 0x384 0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0 0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0 0A8D: 9@ = read_memory 1@ size 4 virtual_protect 0 2@ += 0x4 3@ += 0xC 9@ += 0x28 0A8D: 4@ = read_memory 2@ size 4 virtual_protect 0 0A8D: 5@ = read_memory 3@ size 4 virtual_protect 0 0A8D: 8@ = read_memory 9@ size 4 virtual_protect 0 0AF3: write_int 4@ to_ini_file "cleo\test.ini" section "test" key "car_mass" 0AF3: write_int 5@ to_ini_file "cleo\test.ini" section "test" key "car_turn_mass" 0AF3: write_int 8@ to_ini_file "cleo\test.ini" section "test" key "car_Traction_Multiplier" end if 0AB0: key_pressed 49 // 1 then 0A97: 1@ = car 0@ struct 1@ += 0x384 0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0 0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0 0A8D: 9@ = read_memory 1@ size 4 virtual_protect 0 2@ += 0x4 3@ += 0xC 9@ += 0x28 0A8D: 4@ = read_memory 2@ size 4 virtual_protect 0 0A8D: 5@ = read_memory 3@ size 4 virtual_protect 0 0A8D: 8@ = read_memory 9@ size 4 virtual_protect 0 4@ = 13000.0 5@ = 39000.0 8@ = 0.25 0A8C: write_memory 2@ size 4 value 4@ virtual_protect 0 0A8C: write_memory 3@ size 4 value 5@ virtual_protect 0 0A8C: write_memory 9@ size 4 value 8@ virtual_protect 0 end jump @TEST_1 А вот при таком порядке считывает данные у авто конкретной модели, в моем случае Elegy: [spoiler=Код] {$CLEO .cs} 0000: :CARSTRUCT wait 0 1@ = 562 if 0AB0: key_pressed 57 // ïðîâåðêà íà íàæàòèå êíîïêè "9" then 0AA7: call_function 0x00403DA0{_getModelPtr} num_params 1 pop 1 iId 1@ pclInfo 12@ 12@ += 0x4A 0A8D: 11@ = read_memory 12@ size 2 virtual_protect 0 // 0085: 11@ = 10@ // // 11@ *= 0xE0 11@ += 0xC2B9DC 0A8E: 13@ = 11@ + 0x4 // int 0A8D: 14@ = read_memory 13@ size 4 virtual_protect 0 0AF3: write_int 14@ = get_int_from_ini_file "cleo\test.ini" section "MAIN" key "Mass" 0A8E: 15@ = 11@ + 0xC // int 0A8D: 16@ = read_memory 15@ size 4 virtual_protect 0 0AF3: write_int 16@ to_ini_file "cleo\test.ini" section "MAIN" key "TurnMass" 0A8E: 17@ = 11@ + 0xB8 // int 0A8D: 18@ = read_memory 17@ size 4 virtual_protect 0 0AF3: write_int 18@ to_ini_file "cleo\test.ini" section "MAIN" key "UpperLimit" 0A8E: 19@ = 11@ + 0xBC // int 0A8D: 20@ = read_memory 19@ size 4 virtual_protect 0 0AF3: write_int 20@ to_ini_file "cleo\test.ini" section "MAIN" key "LowerLimit" end jump @CARSTRUCT Поэкспериментирую с изменением характеристик. Значит для изменения после последнего end дописываем это: if 0AB0: key_pressed 48 // 0 then 14@ = 100.0 0A8C: write_memory 13@ size 4 value 14@ virtual_protect 0 end Меняется маса транспортного средства на 100.0. Позже попробую сунуть эту конструкцию в скрипт с вертолетом, и засунуть в цикл, мол пока СЖ летит в вертолете (у меня ID 548), вес указанного транспортного средства будет 100.0. Ну и TurnMass допишу.
  16. В данном случае изменения будут касаться той машины, в которой находится игрок - 8@ = Actor.CurrentCar($PLAYER_ACTOR). А тебе надо, чтобы менялась масса у той машины которая примагничена. Да и вообще по логике тут ничего не меняется. Ты жмешь кнопку, скрипт записывает инфу (если игрок за рулем авто) и оттуда же считывает инфу, т.е. ничего не происходит. И еще. Зачем две проверки Player.Defined($PLAYER_CHAR)? И вначале не нужна строка {$CLEO .cs}? Поправка не заметил, то что меняются переменные 22 и 32, но все равно все как-то странно выглядит для меня) Можно. Есть же скрипты где прицеп, а на прицепе еще авто и прицеп цепляется еще.
  17. Массу той машины меняешь, которую поднять хочешь? Поменял в настройках FIRETRUK первые 2 параметра (fMass и fTurnMass), выставил 500 и 2000. А с изменением хандлинга в реальном времени пока какие-то проблемы. Как пытаюсь выставить настройки из файла по нажатию кнопки получаю вылет игры. Но без проблем записывает в файл текущие настройки fMass и fTurnMass. [spoiler=Скрины]http://www.imageup.ru/img264/3303984/gallery3.jpg http://www.imageup.ru/img264/3303985/gallery4.jpg http://www.imageup.ru/img264/3303986/gallery5.jpg
  18. Я на firetruck'e проверял. Пока масса у него стандартная - я не мог его от земли оторвать. Как поменял на значения какого-то байка - поднял с легкостью. И еще менял не один параметр, а два: fMass и fTurnMass. Скрин удалил походу. И еще можно попробовать опкод: 07BB: set_heli 1@ horizontal_thrust_power 10 (подобие нитро для вертолетов), но думаю тоже не поднимет, мои эксперименты с ускорением ни к чему ни привели. 0685: object 1@ attached - Объект прикреплен?; 01F3: Car 1@ airborne - Машина 1@ в воздухе; 09CB: vehicle 1@ colliding_with_vehicle 2@ - Машина 1@ прикасается к машине 2@ 0686: car 1@ attached - Машина 1@ присоединена к чему-то (думаю самый подходящий, т.к. магнит это что-то )
  19. По поводу вертушки. В общем покопался в хандлинге и попробовал увеличить ускорение через скрипт, но безрезультатно. А сам код, который в архиве, всего лишь добавляет магнит на вертолет. Но, думаю, возможно написать скрипт, который будет уменьшать вес автомобиля, который в данный момент прицеплен к вертолету, т.е. временное изменение handling.cfg. Кстати доделал каток. Не пришлось изобретать велосипед) Как оказалось самый простой вариант адаптировать под АПП v.3.2. Правда туториалов на такую тему не встретил, но методом тыка и экспериментов все получилось как надо.
  20. И еще вопрос, как находить смещение в адресе для интересующей детали. Если, к примеру, 0@ += 0x678 это у нас bump_front_dummy (Инфа тоже где найдена среди груды перечитанных форумов), то как найти для остальных деталей, при чем даже для тех, что вне дамми. В качестве примера для себя взял скрипт Kenking'a "руль". Значит берётся структура авто и находится деталь по смещению 2@ = 1@ + 0x18 (Указатель на RwObject (RpClump)), и с помощью функции памяти 0x4C5400 (CClumpModelInfo::GetFrameFromName(RpClump *,char *)) вызывается эта деталь для дальнейшей работы с ней. Это одна деталь, а как оформить на две детали? Так же через 0х18? Только с другой переменной? И заставить вторую деталь поворачиваться с первой, но чтобы она еще вертелась вокруг своей оси. Такое вообще возможно? Т.е. сейчас на основе скрипта "руль" вместе с поворотом колес - поворачивается первая деталь также по оси-Y (не стал менять адрес, повернул дами в дфф модели и угол в самом скрипте, короче, поворачивает как надо). Вторую деталь вращаться вокруг своей оси заставил, при замене на misc от комбайна, соответственно и модель заменил на сам комбайн. Но тут уже пошло все не так. После переименования поворачивающейся детали в misc_a, а второй в misc_b - первая перестала поворачиваться вместе с поворотом колес. Ну и: [spoiler=Адреса функций (поворот по оси)]Только по X (float) 0x59AFA0 Только по Y (float) 0x59AFE0 Только по Z (float) 0x59B020 Вызываются опкодом 0AA6
  21. скинь вертушку и скрипт на магнит. поглядим И ни кто не подскажет где искать исходник кода на работу стандартного комбайна? Интересуют именно детали misc а и b, и координата точки, откуда мясо вываливается, в том случае, когда давим людей.
  22. ART Tour, цитирую справку SB [spoiler=исходник] {$CLEO} // this opcodes is used to make this thread to be executed once 0A95: enable_thread_saving // calculates absolute address of the text (opcode 0900) in game memory 0A9F: 0@ = current_thread_pointer 0@ += 0x10 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 0@ -= @TEXT_PTR // as all offsets are local (with negative values) // skips 0900 and datatype bytes, 0@ points directly to the text 0@ += 4 // call ShowTextBox script 0A92: "ShowTextBox.s" 0@ 0A93: end_custom_thread // custom text :TEXT_PTR 0900: "if you see this message, CLEO 3 works normally!" // just a null-terminator 0000: NOP
  23. Предлагаю в этой теме решать вопросы, связанные с адресами памяти. Только вчера добрался до программы IDA (позволяет открывать базу данных адресов gta_sa.exe), так что есть куча вопросов. И так первый вопрос как найти нужный мне адрес. Скачал IDB database by fastman92 для gta_sa 1.0 Hoodlum от 2015 года, открыл базу и все, далее мол иди учи ассемблер, а хотелось бы без этого. Тем более большинство адресов и функций уже найдено. И как узнать адрес функции, расположенной ниже? [spoiler=Пример] .text:007F0DC0 ; RwFrame *__cdecl RwFrameForAllChildren(RwFrame *frame, int callback, void *data) .text:007F0DC0 frame = dword ptr 0Ch .text:007F0DC0 callback = dword ptr 10h .text:007F0DC0 data = dword ptr 14h
  24. А может просто поправить handling.cfg и увеличить мощность двигателя вертушки?
  25. Возможно ли сделать так, чтобы колесо помимо своей оси еще и поворачивалось вместе с деталью? На скрине повернуто и колесо и деталь, но каждое по своей оси.
×
×
  • Создать...