You are not logged in.
А может причина в другом моде/плагине? Думаю если дело в клео, то я бы смог воспроизвести.
Offline
Есть ли возможность "восстановить" следующие опкоды для VC и III:
0681: attach_object 71@ to_car 60@ with_offset 0.5 0.3 0.3 rotation 0.0 0.0 0.0 0682: detach_object 38@(119@,4i) 0.0 0.0 0.0 collision_detection 0 0683: attach_car 208@ to_car 188@ with_offset 0.0 -4.6 0.65 rotation 15.0 0.0 0.0 0684: detach_car 208@ 20.0 180.0 0.0 collision_detection 0 0893: put_trailer 37@ on_cab 34@ 07AC: detach_trailer 37@ from_cab 34@
и для III:
0464: put_actor 99@ into_turret_on_car 68@ at_car_offset 266@ 267@ 268@ position 0 shooting_angle_limit 0.0 with_weapon 0 0465: remove_actor $PLAYER_ACTOR from_turret_mode
Offline
Offline
Ну если без клео работает все, тогда дело точно в клео, правда я не понимаю в чем тут дело, да и логи какие-то странные.
Offline
Собственно, выкладываю обновленные версии:
III.CLEObeta.zip
VC.CLEObeta.zip
opcodes.zip
В opcodes.zip просто взяты все опкоды клео 4, плюс добавлены новые(0601-0609), я там немного поменял кое что. Это я в ближайшее время исправлю, чтобы не было путаницы. Новых опкодов из клео4 по сравнению с предыдущей версией не добавилось, за исключением тех, что идут в плагинах. Опкоды из плагинов я тоже сделал через плагины. Также нашел в исходниках опкоды 0B17-0B1D, которых раньше ни в одном ini не видел. Добавил их тоже.
Last edited by Sergey81 (02-07-2015 14:16)
Offline
Выложил версию 2.0 на гитхаб.
https://github.com/ThirteenAG/III.VC.CLEO/releases
Опкоды, файлы для SB, сдк и тестовый скрипт можно найти там же на гитхабе или здесь: http://gtaforums.com/topic/807185-iiivcrel-cleo-20/
Отличий от прошлой беты немного, мелкие правки и добавлен опкод получения значения брони в гта3.
Offline
А новые опкоды только для exe 1.0 или 1.1 тоже поддерживается?
Offline
А новые опкоды только для exe 1.0 или 1.1 тоже поддерживается?
Supported executables: GTA 3 and VC: v1.0, v1.1, Steam. Note that some(and probably most) scripts aren't compatible with all versions of exe and they'll likely work only on v1.0
Offline
А новые опкоды только для exe 1.0 или 1.1 тоже поддерживается?
Ну да, опкоды доступны для всех версий, Но в скриптах надо не забывать менять какие-то конкретные адреса если есть желание поддерживать несколько версий.
В опкоде game_version возвращаемое значение не поменялось, для стим версии будет 2.
Last edited by Sergey81 (13-07-2015 08:57)
Offline
Sergey81> 2 срочных вопроса(хотел на форумсах задать, но, боюсь, мой английский не позволит это сделать нормально):
1) В CLEO для SA была возможность задавать глобальные CLEO-переменные:
0AB3: var 0 = 10
, таких было максимум 1000 и можно было задать значение в одном скрипте, а прочесть - в другом.
Планируется ли нечто подобное в CLEO 2.0 для вайса/трехи?
Если нет, то не мог бы ты подсказать пару пустых адресов для записи байтовых значений? Прост планирую на днях опубликовать большой тематический пак скриптов для Вайса спецом под CLEO 2.0, и там позарез необходимо организовать связь между работой нескольких скриптов.
2) Некоторые опкоды в CLEO 2.0 дублируют CLEO 1.1. Ты писал, что, помимо новых, старые опкоды CLEO 1.1 тоже работают. Для чего тогда дублирование? Или есть отличия?
P.S. Ну, и, разумеется - огромное спасибо за CLEO 2.0))
Last edited by Shag (21-07-2015 03:30)
Offline
mfisto это слишком сложно и неудобно для меня: постоянно перелопачиваю скрипты вверх ногами, и переменные меняются местами, плюс и так не хватает переменных для работы, а тут еще придется выделять переменные в скриптах. Если же создать отдельный скрипт для переменных, то это даже геморнее, чем просто пустые незанятые адреса использовать. Поэтому я про них и спрашивал
Offline
Не вижу смысла в этих опкодах, поэтому их и не добавлял. Как вариант можно выделить память(через hex...end) или опкод в одном скрипте, адрес этого буфера записать куда-нибудь(в неиспользуемую память или же получать как выше было отмечено через переменную), а потом этот адрес использовать из любого скрипта.
Некоторые опкоды в CLEO 2.0 дублируют CLEO 1.1. Ты писал, что, помимо новых, старые опкоды CLEO 1.1 тоже работают. Для чего тогда дублирование? Или есть отличия?
Отличий нет, я только хотел чтобы во всех трех играх были одинаковые номера опкодов. Иначе не удобно, когда пишешь скрипт сразу под 3 игры, перебивать номера опкодов.
Offline
@Shag, можно попробовать запись значения переменной одного скрипта в ini файл и чтение этого значения другим скриптом, вот только, как это сопоставится с очерёдностью выполнения скриптов.
А, кстати, вот и вопрос: в каком порядке загружаются и выполняются скрипты при, допустим, одном wait 0 в каждом скрипте?
Offline
@Shag, можно попробовать запись значения переменной одного скрипта в ini файл и чтение этого значения другим скриптом, вот только, как это сопоставится с очерёдностью выполнения скриптов.
Я бы не рекомендовал так делать.
А, кстати, вот и вопрос: в каком порядке загружаются и выполняются скрипты при, допустим, одном wait 0 в каждом скрипте?
Ну загружаются они по алфавиту, можно в логе посмотреть, выполняются наверно в том же порядке.
Сегодня обновил обе версии клео, добавлен опкод 0673 отсюда - http://www.gtagarage.com/mods/show.php?id=2508
Исправленный плагин(убрана реализация опкода) с исходником можно скачать тут - https://www.sendspace.com/file/rerz5r
Offline
Не вижу смысла в этих опкодах, поэтому их и не добавлял. Как вариант можно выделить память(через hex...end) или опкод в одном скрипте, адрес этого буфера записать куда-нибудь(в неиспользуемую память или же получать как выше было отмечено через переменную), а потом этот адрес использовать из любого скрипта.
Вот мне и хотелось бы узнать парочку адресов из неиспользуемой памяти.
Я вижу, всё же придется пойти сложным способом, но проблема в том, что я не понимаю, как это сделать(я нуб в работе с памятью). Мне нужно 5 адресов для записи integer значений, может кто-то помочь с реализацией этого?
@Shag, можно попробовать запись значения переменной одного скрипта в ini файл и чтение этого значения другим скриптом, вот только, как это сопоставится с очерёдностью выполнения скриптов.
Увы, в моём случае это будет такая большая нагрузка на игру(постоянные чтение/запись), что всё будет тормозить и/или неправильно работать. Поэтому нужно реализовать в памяти игры...
Сегодня обновил обе версии клео, добавлен опкод 0673 отсюда
За это - отдельное огромное спасибо(давно просил тут и еще на паре форумах это сделать)!!! Наконец появилась возможность нормально добавлять новые анимы, а не как это делал я(загружая новые анимы в старых ifp под новыми названиями, чтобы не заменять старые ifp физически)
Last edited by Shag (22-07-2015 14:46)
Offline
Вот мне и хотелось бы узнать парочку адресов из неиспользуемой памяти.
Я вижу, всё же придется пойти сложным способом, но проблема в том, что я не понимаю, как это сделать(я нуб в работе с памятью). Мне нужно 5 адресов для записи integer значений, может кто-то помочь с реализацией этого?
Открой базу или экзешник в IDA, найди к примеру строчку "align 10h" в любом месте, вот здесь и будет нужный тебе адрес. Но все равно я не пойму в чем проблема сделать через переменную? К примеру как-нибудь так:
{$CLEO} //scr1.cs 0000: 0AC8: 0@ = allocate_memory_size 260 0A8C: write_memory 0@ size 4 value 123 virtual_protect 0 while true wait 0 /// end {$CLEO} //scr2.cs 0000: while true wait 0 0AB1: call_scm_func @__VarToOffset 1 varnumber 0 result 0@ 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 03F0: enable_text_draw 1 0609: show_formatted_text_position 50.0 50.0 text "%d" 0@ end :__VarToOffset { 0AB1: call_scm_func @__VarToOffset 1 varnumber 6 result 0@ } 0AAA: 13@ = thread 'scr1.cs' pointer if 13@ <> 0 then 13@ += 0x30 0@ *= 4 005A: 13@ += 0@ // address of the local variable 0AB2: ret 1 13@ else 0AB2: ret 1 0 end
Offline
Sergey81 wrote:в чем проблема сделать через переменную? К примеру как-нибудь так:
Хорошо, а как в этом коде сделать 2 переменных? Или придется для каждой переменной создавать новый скрипт?
0AC8: 0@ = allocate_memory_size 260 0A8C: write_memory 0@ size 4 value 123 virtual_protect 0 //1 0A8E: 1@ = 0@ += 0x4 // int 0A8C: write_memory 1@ size 4 value 345 virtual_protect 0 //2 0A8E: 1@ = 0@ += 0x8 // int 0A8C: write_memory 1@ size 4 value 567 virtual_protect 0 //3 ....
Чтение аналогично.
Offline
0AC8: 0@ = allocate_memory_size 260 0A8C: write_memory 0@ size 4 value 123 virtual_protect 0 //1 0A8E: 1@ = 0@ += 0x4 // int 0A8C: write_memory 1@ size 4 value 345 virtual_protect 0 //2 0A8E: 1@ = 0@ += 0x8 // int 0A8C: write_memory 1@ size 4 value 567 virtual_protect 0 //3 ....Чтение аналогично.
Т.е. чтение этих трех значений будет выглядеть так?
{$CLEO} //scr2.cs 0000: while true wait 0 0AB1: call_scm_func @__VarToOffset 1 varnumber 0 result 0@ 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 03F0: enable_text_draw 1 0609: show_formatted_text_position 50.0 50.0 text "%d" 0@ //1 1@ = 0x4 0AB1: call_scm_func @__VarToOffset 1 varnumber 1 1@ result 0@ 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 03F0: enable_text_draw 1 0609: show_formatted_text_position 50.0 50.0 text "%d" 0@ //2 1@ = 0x8 0AB1: call_scm_func @__VarToOffset 1 varnumber 1 1@ result 0@ 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 03F0: enable_text_draw 1 0609: show_formatted_text_position 50.0 50.0 text "%d" 0@ //3 end :__VarToOffset { 0AB1: call_scm_func @__VarToOffset 1 varnumber 6 result 0@ } 0AAA: 13@ = thread 'scr1.cs' pointer if 13@ <> 0 then 13@ += 0x30 0@ *= 4 005A: 13@ += 0@ // address of the local variable 0AB2: ret 1 13@ else 0AB2: ret 1 0 end
Я просто не понимаю, откуда берется
0AC8: 0@ = allocate_memory_size 260
, а также
13@ += 0x30 0@ *= 4 005A: 13@ += 0@ // address of the local variable
, ведь в "__VarToOffset" не задается 0@, но операции с ним идут
Last edited by Shag (23-07-2015 15:29)
Offline