You are not logged in.
Заметил, что в поисковике опкодов в режиме III и VC первая строка пустая.
Давно хотел спросить, а почему нет ключевых слов "continue" и "break" в файле "keywords.ini"?
у меня серьезные опасения, что с современными редакторами SB уже не потягаться и будет потенциально проще рассмотреть перенос дизассемблера и компилятора под капот готового редактора вроде VS Code.
Чем мне нравится SB, так это его независимость от сторонних редакторов, всё уже на месте и лёгкий вес установщика. Я лишь предложил немного упростить работу с макросами.
Не знаю стоит ли гнать компилятор по пути VS Code. И вес большой и тормозной он какой-то. Да и напоминает ситуацию с MoonLoader, где новичок вот так сразу не разберётся что там и где настраивать. А в SB всё уже в коробке, два клика и всё готово, бери и пользуйся.
Догадывался, что нужно как-то так делать. Догадки подтвердились.
Как насчёт добавления панели/окна макросов, чтобы было как в "Панель элементов" в Visual Studio?

Удобно, когда они под рукой и одним кликом можно было вставить участок кода в нужное место. Как-то лень каждый раз нажимать CTRL+J и потом ещё искать нужный макрос стрелками в маленьком окошке, которое ещё и автоматически скрывается. Такое должно быть вообще раз плюнуть сделать. Сделать возможность прятать/показывать панель в меню.
и он выполняется до тех пор, пока не встретит команду return
Для условий как определяется "true" и "false"?
Мне быстрее перебрать всю базу вручную, чем изучать языки программирования
Пожалуй, ты прав. Почему-то подумал, что если я программист, то и все остальные здесь тоже программисты
Всё же перебор больших объёмов данными вручную та ещё работёнка.
А можешь проверить те INI, на которые я дал ссылки, как у них с этим?
По параметрам и последовательностью было всё в порядке. По крайней мере я не нашел ничего подозрительного. С описанием нужно более подробно посмотреть.
нервов хватило
Ты чё вручную всё делал?
А как же языки программирования, которые подобную рутину отлично выполняют?
Потом перейти по полученному адресу в сам код
К какому адресу? Всё у меня открывалось без ошибок...
Ну сам список всех опкодов вроде бы есть
Он не точный. Есть опкоды, которые для SA и VC(III) выполняют совершенно разные вещи и имеют разные параметры, но в списке в них одно и тоже имя. Да и INI-файлы взяты с генератора на gtagmodding.
Sanny Builder выдаёт какую-то чушь в адресе неправильного/неизвестного опкода
Ни разу не сталкивался с этой "чушью" при открытии "main.scm" о_0.
почему-то такую базу сделали только под СА
А ты помоги ему с этим вопросом. Он ведь не робот, чтобы всё самому делать.
Did this have problems? Create a local profile and play.
В чём может быть дело?
SB стал кривой или ОС Windows стала кривая. Игра с папки хоть запускается после нажатия F8? У меня - нет. Только если переименовать exe запускается. Не пользуйтесь F8 и запускайте с папки.
04EF: release_animation "PED"
Это ни в кoeм cлyчae нельзя делать с анимацией "PED"
0AD2: 1@ = player $PLAYER_CHAR targeted_actor //IF and SET if and 0184: actor 1@ health <= 100
перед использованием актёра 1@ нужно проверить его существование, или использовать как проверку:
if
0AD2: 1@ = player $PLAYER_CHAR targeted_actor //IF and SET
then
if
0184: actor 1@ health <= 100
then
// ...
end
endНу и это собственно
10@ = 1
Это НЕ проверка, используйте == если нужно проверить, а не задать
Там дело в том, что игра прицеп удаляет рано, гораздо раньше автомобиля игрока
Если Вы думаете, что
0@ = Actor.CurrentCar($PLAYER_ACTOR) 29@ = Actor.CurrentCar($PLAYER_ACTOR)
захватывает прицеп и машину игрока, то это не так. Никакого прицепа там не запишется, а будет только машина игрока. Следовательно все проверки и действия с 29@ можно попросту убрать и использовать только 0@. Чем Вам не стирание лишних строк. Я не видел весь код, но тот что указан здесь можно сократить.
Меня чуток не поняли видимо
Я лично вообще не понял что нужно сделать
Слишком мало подробностей, чтобы понять.
весь скрипт на 10кб поджал
Это ради чего? У меня мини-игра на 700+ строчек занимала 22 Кб. Не так у ж много. На быстродействие как-то не оказывает давления при грамотном подходе. Если это Cleo-скрипты, то можете добавить директиву {$NOSOURCE}, тогда ещё меньше получится. Для Cleo-миссий он вообще бесценен.
можно ли одну и ту-же машину определить сразу в 2 переменные?
Можно хоть во все доступные 
0@ = Actor.CurrentCar($PLAYER_ACTOR) 0085: 1@ = 0@ // (int) <---- переменная 1@ будет указывать на машину 0@ 0085: 2@ = 0@ // (int) <---- переменная 2@ будет указывать на машину 0@ 0085: 3@ = 0@ // (int) <---- переменная 3@ будет указывать на машину 0@ ... 0085: N = 0@ // (int) <---- переменная N будет указывать на машину 0@
Если машина 0@ была удалена, то остальные переменные будут указывать "в никуда" и будут содержать только числа.
В общем будет ли оно такое работать?
Я не знаю, как Вы это себе представляете. В SB есть опкод, которые используются для прицепов. Можно это использовать, чтобы не танцевать с бубном:
// ...
0@ = Car.Create( #LINERUN, 0.0, 0.0, 0.0 )
1@ = Car.Create( #ARTICT1, 10.0, 0.0, 0.0 )
:LOOP
wait 0
if or
856E: not car 0@ defined
856E: not car 1@ defined
then
jump @CAR_NOT_FOUND
end
if
07AB: car 0@ has_attached_trailer 1@
then
0AD1: show_formatted_text_highpriority "Trailer attached!" time 1
else
0AD1: show_formatted_text_highpriority "Trailer NOT attached!" time 1
end
jump @LOOP
:CAR_NOT_FOUND
// ...компилятор пишет недостаточно параметров, ожидалось 4
Массив неправильно написан, уберите пробелы между скобок:
17@(15@,15i)
А тут вообще игра вылетает
Пишите комментарии того, что Вы делаете )
1) Что в было в массиве до вызова цикла?
2) Компоненты действительно можно прицепить к машине? Не на все тачки можно ставить компоненты.
3) Ещё заметил, что вы изменяете порядок счётчика 15@. Этого лучше избегать - может игра зависнуть, если цикл будет слишком долго выполнятся.
I need help to generate auto parked with components like nitro or hydraulic
There is no such possibility. You must do this programmatically. Example:
{$CLEO}
0A95: enable_thread_saving // save car 0@ if need
014B: 0@ = init_parked_car_generator #SABRE color 86 0 1 alarm 0 door_lock 0 0 10000 at 2491.5752 -1680.6293 12.9457 angle 9093.2475
014C: set_parked_car_generator 0@ cars_to_generate_to 101
1@ = 0 // check for added component
while true
wait 0
if
056E: car 0@ defined
then
if and
8119: not car 0@ wrecked
1@ == 0
then
09E9: car 0@ add_single_nitro
07FF: set_car 0@ hydraulics 1
01C3: remove_references_to_car 0@ // if need
1@ = 1
end
else
1@ = 0
end
end
С твоей помощью получился рабочий скрипт, теперь все как надо
Что немного странно, так как gosub должен обязательно заканчиваться return-ом, а у тебя там прыжок стоит.
О, у тебя есть сайт, пойдука там пошарюсь...
Шарься, там есть полно информации. Только там акцент больше на MAIN.SCM, хотя сам скриптинг там ничем не отличается от CLEO, кроме некоторых моментов.
хотя логически в нем все правильно
Это тот случай, когда знание побеждает логику. Переменная 32@ используется для таймеров и она постоянно изменяет своё значение. Классическая ошибка. Можно и так написать скрипт:
{$CLEO}
03BC: 0@ = create_sphere_at 2067.9 -1831.3 13.5 radius 7.0
03BC: 1@ = create_sphere_at 1025.0 -1026.4 32.1 radius 7.0
03BC: 2@ = create_sphere_at 487.6 -1738.1 11.1 radius 7.0
03BC: 3@ = create_sphere_at -1904.3 280.7 41.0 radius 7.0
03BC: 4@ = create_sphere_at -2425.6 1025.3 50.3 radius 7.0
03BC: 5@ = create_sphere_at 1971.7 2162.4 11.0 radius 7.0
03BC: 6@ = create_sphere_at -100.0 1114.2 19.7 radius 7.0
03BC: 7@ = create_sphere_at -1420.6 2587.9 55.8 radius 7.0
03BC: 8@ = create_sphere_at 720.1 -460.6 16.3 radius 7.0
while true
wait 250
if
8256: not player $PLAYER_CHAR defined
then
continue
end
01C0: 10@ = player $PLAYER_CHAR wanted_level
if
10@ == 0
then
continue
end
if or
0100: actor $PLAYER_ACTOR in_sphere 2067.9 -1831.3 13.5 radius 7.0 7.0 7.0 sphere 1 in_car
0100: actor $PLAYER_ACTOR in_sphere 1025.0 -1026.4 32.1 radius 7.0 7.0 7.0 sphere 1 in_car
0100: actor $PLAYER_ACTOR in_sphere 487.6 -1738.1 11.1 radius 7.0 7.0 7.0 sphere 1 in_car
0100: actor $PLAYER_ACTOR in_sphere -1904.3 280.7 41.0 radius 7.0 7.0 7.0 sphere 1 in_car
0100: actor $PLAYER_ACTOR in_sphere -2425.6 1025.3 50.3 radius 7.0 7.0 7.0 sphere 1 in_car
then
gosub @WANTED_CLEAR
end
if or
0100: actor $PLAYER_ACTOR in_sphere 1971.7 2162.4 11.0 radius 7.0 7.0 7.0 sphere 1 in_car
0100: actor $PLAYER_ACTOR in_sphere -100.0 1114.2 19.7 radius 7.0 7.0 7.0 sphere 1 in_car
0100: actor $PLAYER_ACTOR in_sphere -1420.6 2587.9 55.8 radius 7.0 7.0 7.0 sphere 1 in_car
0100: actor $PLAYER_ACTOR in_sphere 720.1 -460.6 16.3 radius 7.0 7.0 7.0 sphere 1 in_car
then
gosub @WANTED_CLEAR
end
/* пишем другие проверки */
end
:WANTED_CLEAR
10@ *= 1000
0085: 9@ = 10@ // (int)
9@ -= 1
if
010A: player $PLAYER_CHAR money > 9@
then
10@ *= -1
0110: clear_player $PLAYER_CHAR wanted_level
0109: player $PLAYER_CHAR money += 10@
end
return
Жаль только, что, как я понял, капельки не работают, когда гг в машине.
Да. Во всяком случае я не смог повлиять на вид. Возможно, через игровую память можно это исправить, но это уже нужно более опытных спрашивать.
Как сделать маркеры на радаре такие же, как в миссии Madd Dogg's Rhymes, где противники отмечаются так же, как и игрок?
Это типа в виде капелек? Вот статья, где указано как сделать маркеры в виде капелек.
This is set up the relationship between two pedestrians types.
1 - it is relationship. The argument variants:
0 - respect
1 - like
2 - neutral
3 - dislike
4 - hate
8 and 0: pedestrian types. See Sanny Builder manual.
Briefly: Grove Street Families like the player (CJ).
Еще раз помощь нужна, пишу вот так: 4@ = Actor.Create(24,#SFR1,-2443.4973, 501.8636, 30.0928). При этом создается два актера сразу.
Сам по себе он не создаёт несколько актёров. Скорее всего дубликат скрипта есть. По коду легче будет понять где что пошло не так. Покажите этот код, будем разгребать проблему 
как написать скрипт на смену скина при загрузке?
Что-то типа этого:
:CJ_MODL thread 'JC_MODL' Model.Load(#WMYDRUG) 038B: load_requested_models 09C7: change_player $PLAYER_CHAR model_to #WMYDRUG Model.Destroy(#WMYDRUG) :CJ_MODL_CKECK wait 0 if 82F2: not actor $PLAYER_ACTOR model == #WMYDRUG jf @CJ_MODL_CKECK jump @CJ_MODL
Если пишется в MAIN.SCM, то не забываем запустить поток.
После сохранения скин остается, а после загрузки - нет.
Игрок создаётся при загрузке/новой игры со моделью #NULL. Вы можете сменить скин, но не можете его сохранить. Нужно отдельный поток/внешний скрипт, который делал бы автоматическое изменения скина на нужный.
При запуске новой игры он идет сначала, а если загрузить игру через сохранение, то откуда будет начинаться скрипт?
Вас это не должно беспокоить
Там реализована своя система сохранения. Просто пишите код так, как будто скрипты будут выполняться за один подход.
Можно подробнее как так сделать?
Можете почитать статью RRR-файлы в GTA SA на моём сайте. Там я более-менее рассказал как делать RRR-файлы. Маршрут будет гарантировать, что транспорт будет ехать строго по указанному маршруту.
Как-то так для всех водителей:
{$CLEO}
0000: NOP
while true
wait 0
if
0AE2: 0@ = random_vehicle_near_point 0.0 0.0 0.0 in_radius 10000.0 find_next 0
then
repeat
wait 0
if
056E: car 0@ defined
then
046C: 1@ = car 0@ driver
if
056D: actor 1@ defined
then
if
0118: actor 1@ dead
then
gosub @action_driver
end
end
end
until 8AE2: not 0@ = random_vehicle_near_point 0.0 0.0 0.0 in_radius 10000.0 find_next 1
end
end
:action_driver
// что-делаем с мёртвым водилой
return
Есть проверка на существование взрывов в неком кубе. Это можно использовать для написания кода реакции педов на взрыв:
{$CLEO}
0000: NOP
while true
wait 0
if
8256: not player $PLAYER_CHAR defined
then
continue
end
00A0: store_actor $PLAYER_ACTOR position_to 1@ 2@ 3@
0087: 4@ = 1@ // (float)
0087: 5@ = 2@ // (float)
0087: 6@ = 3@ // (float)
1@ -= 30.0
2@ -= 30.0
3@ -= 10.0
4@ += 30.0
5@ += 30.0
6@ += 10.0
if
8356: not explosion_type -1 in_cube_cornerA 1@ 2@ 3@ cornerB 4@ 5@ 6@
then
continue
end
// далее ищем всех педов в нужном радиусе и даём им команду подбежать к машине и т.п.
endС типами взрывов нужно ещё поиграться, а то так проверка сработает, если будет любой взрыв возле игрока.