#1 Re: Sanny Builder и CLEO » Вопросы и предложения по Sanny Builder » 04-07-2020 17:56

SanyaSFM wrote:
Seemann wrote:
SanyaSFM wrote:

Нет опкода для проверки: проденная ли такая-то такая-то миссия?
Можно и с номером миссии.
Обрыскал все опкоды связанные с миссиями, но ничего так и не нашёл.

это контролируется глобальными переменными. Обычно в конце миссии есть переменная типа $THIS_MISSION_PASSED = 1

Значит нету, думаю тут, что мне вы скинули, это типа: если 0 - не пройдена (наверное), если: 1 - то пройдена.
То есть не смысла подставлять номер миссии.
Когда там новая версия саньки билдера будет?
Жду не дождусь подсветки констант, я бы сам это сделал, да вроде не открытого кого исходного, да я и не программист, в дельфи только баловался, язык паскаля и остальные тоже - не знаю.

Почему же нету? Просто способ не самый удобный. Но вот я открыл main.scm, нашёл миссию “Big Smoke”, в конце неё обнаружил строчку:

$INTRO_TOTAL_PASSED_MISSIONS += 1

Далее в поиске этой переменной по файлу отыскал такое условие:

if 
  $INTRO_TOTAL_PASSED_MISSIONS == 1 
jf @INT_292 
$ONMISSION = 1 
00BA: show_text_styled GXT 'INTRO_2' time 1000 style 2  // Pa??ep
gosub @SUB_CJ_GOTO_RYDER_HOUSE 
start_mission 12  // Ryder

Из чего делаю вывод, что после прохождения миссии “Big Smoke” значение переменной должно равняться единице. Таким же образом эту же переменную я могу проверить и в своём скрипте, таким образом привязывая какие-то события или возможности к ходу сюжета.

#2 Re: Вопросы по скриптингу » 2 условия в while » 27-02-2017 22:24

Seemann wrote:

В этом варианте внутри Check не нужны 0485 и 059A, т.к. опкод jump_if_false (который используется в циклах) читает результат последней проверки, который обновляется после применения любого условного опкода.

Ого, этого не знал, спасибо! А это не может сработать в условном gosub не в цикле? У меня такая (гуманитарная) логика: если в цикле при условном gosub можно обойтись без return_true/false, то без них можно обойтись везде, так как высокоуровневые конструкции игрой "разбираются" на низкоуровневые конструкции с метками, то есть на "начальном" уровне они ничем не отличаются друг от друга. Если так, то зачем нужны 0485 и 059А?
Но скорее всего, я просто недопонимаю.

Ещё раз благодарю за этот нюанс!

#3 Re: Вопросы по скриптингу » 2 условия в while » 26-02-2017 21:51

В циклах (while, repeat) ещё можно использовать условный gosub.

while gosub @Check
wait 0
//действия
end 

:Check
if and //или if or
//условие 1
//условие 2
then
0485:  return_true
else
059A:  return_false
end
return

У меня работало, это удобно. Можно и внутрь while true вставить условия, как показал DK22Pac.

#4 Re: Вопросы по скриптингу » Один вопрос » 15-01-2017 20:47

d88 wrote:

Пара вопросов:
1. Как проверить, что актёру установлен иммунитет к выстрелам?
2. Можно ли проверить, что никакие кнопки не нажимались в течение определённого времени, к примеру, одной минуты?

Заранее спасибо.

1) думаю, вот это может помочь (из GTA Modding):

CPed +0x42 = [byte] Is the BP/EP/FP/DP (special flags) status of the player as follows:

    Bit 1 = makes ped soft (ie. can move through walls and everything) (noclip in other words)
    Bit 2 = freezes ped (ie. ped cannot walk)
    Bit 3 = bullet-proof
    Bit 4 = flame-proof
    Bit 5 = collision-proof
    Bit 6 = MP-proof (MP)
    Bit 7 = ?
    Bit 8 = explosion-proof

Тут понадобятся структура актёра (0A96) + указанное смещение, считывание из памяти (0A8D) и работа с битами переменной (08B7), поскольку именно в них записаны иммунитеты;

2) если речь об обычных игровых клавишах, то можно сделать так:
- обнулить таймер 32@
- создать флаг (не)нажатия //если есть решение получше, можно и без него, например, сделать условный gosub с циклом
- в цикле for проверять, нажата ли одна из клавиш (номер клавиши = счётчик цикла), если да, делаем провал условия.

#5 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 05-08-2015 17:33

Ура! Поздравляю с юбилеем программы! Без неё я бы никогда не сделал многого, прежде всего, не стал бы делать скрипты. smile

Seemann'у лично пожелаю дальнейших успехов, счастья и всего наилучшего! Пусть SB и далее развивается и совершенствуется, радуя скриптеров всех уровней!

#6 Вопросы по скриптингу » Радио в GTA VC » 02-07-2015 18:08

Vital
Replies: 1

Такая проблема. Делаю для GTA VC скрипт, дающий возможность управлять радиостанцией "MP3 Player": одна клавиша включает следующую композицию, другая - случайную. Ибо такой возможности в игре нету, в отличие от SA. И вроде бы всё ничего, работает, но есть одно важное "но". Чтобы услышать эффект переключения, нужно заново прокрутить все радиостанции до проигрывателя своей музыки или выйти из машины и сесть снова. В связи с этим вопрос звучит так: как перезагрузить радио "MP3 Player"?

Усугубляется всё тем, что опкод 041Е, который ставит радиостанцию, не может поставить станцию 9, то есть эту самую. Когда стоит параметр 9, опкод меняет его сразу на 10 - выключить радио. Я попробовал получить и поставить радиостанцию через память машины, но не вышло. Я попробовал сначала отключить радио опкодом 041Е, а потом через память насильно поставить этот проигрыватель, но тщетно.

Буду рад, если кто поможет. При публикации скрипта (и/или при создании видео про него) обязательно упомяну, это само собой разумеется. Тему создал потому, что вопрос не самый простой, на мой взгляд, но если всё проще, и новая тема зря создана, то прошу прощения.

Если нет никакой возможности как-то адекватно выбрать радиостанцию или перезагрузить её, то есть запасной, хотя и странноватый вариант: если имеется возможность как-то сымитировать нажатие клавиши "Следующая радиостанция", то можно поставить опкодом 041Е радио №8, а потом имитация этой самой клавиши переключит радио на проигрыватель.

Заранее спасибо всем откликнувшимся!

#7 Re: Справочная информация » Новые описания для опкодов » 09-06-2015 18:04

Seemann wrote:

https://sannybuilder.com/dev/sa_opnames.txt
оригинальные рокстаровские названия скриптовых команд, которые были опубликованы вместе с SA Mobile.
Спустя много лет интересно сравнить, насколько точны или наивны были наши предположения о смысле тех или иных опкодов.

Ух ты! Я, конечно, понимаю, какая это трудная работа, но планируется ли полная замена текста опкодов на новый? Или просто будут исправлены неточности и unknown'ы?

Как бы то ни было, это уже радует, информация крайне полезная. smile

#8 Re: Вопросы по скриптингу » Один вопрос » 20-01-2015 23:15

SHooZ wrote:

Как вариант прочесовать пулл снарядов (0xC891A8) ловить там те, что выпущинные твоим Rustler и выгружать их.

Спасибо, стоит попробовать!

#9 Re: Вопросы по скриптингу » Один вопрос » 16-01-2015 22:30

Снова я со своими вопросами smile
1) Можно ли отключить звук (оповещение в виде постоянного писка) приближения вражеской ракеты с теплонаведением, который проигрывается в транспорте?

2) Есть ли возможность отключить стрельбу ракетами у самолёта Rustler после применения опкода атаки игрока? То есть после опкода 08А2 самолёт, не имеющий ракет, стреляет как из пулемёта, так и ракетами, что нелогично. Пробовал другой опкод с аналогичным действием, но результат тот же.

Заранее спасибо!

#10 Re: Вопросы по скриптингу » Один вопрос » 03-01-2015 21:45

Спасибо! Помогло именно это, реакция 1022 на событие 36.  smile

#11 Re: Вопросы по скриптингу » Один вопрос » 03-01-2015 15:11

Всё работает прекрасно! Спасибо!
Теперь появился другой вопрос: есть скрипт, создающий машину, которая ездит за игроком, в ней два актёра, но тот, что на пассажирском сидении, не стреляет по ненавистным ему людям, хотя, по логике, 077А должен позволять это делать. Пробовал опкод 0713 без параметров объекта обстрела, но не помогает. Проблема как раз в том, чтобы заставить пассажира стрелять по усмотрению его ИИ, а не по опкоду. Заранее благодарю!
Прилагаю код:

//$PLAYER_ACTOR $PLAYER_GROUP
{$CLEO}
0000:
while true
wait 0
    if
    player.Defined(0)
    then
        if and
        not actor.Driving($PLAYER_ACTOR)
        0ADC:   test_cheat "CAR"
        then
        model.Load(#ALPHA)
        model.Load(#FAM1)
        model.Load(#FAM2)
        model.Load(#TEC9)
        038B: load_requested_models
        actor.StorePos($PLAYER_ACTOR,0@,1@,2@)
        02C1: store_to 0@ 1@ 2@ car_path_coords_closest_to 0@ 1@ 2@
        car.Create(3@,#ALPHA,0@,1@,2@)
        car.SetImmunities(3@,1,1,1,1,1)        
        0129: 4@ = create_actor_pedtype 8 model #FAM1 in_car 3@ driverseat
        01C8: 5@ = create_actor_pedtype 8 model #FAM2 in_car 3@ passenger_seat 0
        car.DoorStatus(3@,2)
        077A: set_actor 5@ acquaintance 1 to_actors_pedtype 0 // see ped.dat
        077A: set_actor 5@ acquaintance 4 to_actors_pedtype 6 // see ped.dat
        077A: set_actor 5@ acquaintance 4 to_actors_pedtype 7 // see ped.dat
        077A: set_actor 5@ acquaintance 4 to_actors_pedtype 9 // see ped.dat
        actor.GiveWeaponAndAmmo(4@,Tec9,99999)
        actor.GiveWeaponAndAmmo(5@,Tec9,99999)                
        model.Destroy(#ALPHA)
        model.Destroy(#FAM1)
        model.Destroy(#FAM2)  
        model.Destroy(#TEC9)                
        car.SetDriverBehaviour(3@,DriveToPlayer)                
        car.SetMaxSpeed(3@,50.0)
        marker.CreateAboveCar(6@,3@)
        marker.SetColor(6@,1)        
            while true
            wait 0
                if or
                not player.Defined(0)
                car.Wrecked(3@)
                not actor.InCar(4@,3@)
                not actor.InCar(5@,3@)
                actor.Dead(4@)
                actor.Dead(5@)
                then
                break            
                end
            end
        car.SetImmunities(3@,0,0,0,0,0)
        car.DoorStatus(3@,1)
        marker.Disable(6@)
        actor.RemoveReferences(4@)
        actor.RemoveReferences(5@)
        car.RemoveReferences(3@)
        end
    end
end

#12 Re: Вопросы по скриптингу » Один вопрос » 01-01-2015 16:26

Спасибо большое! Буду пробовать, если что будет не так, напишу. Ещё раз благодарю за помощь!

#13 Re: Вопросы по скриптингу » Один вопрос » 31-12-2014 18:11

Есть вопрос относительно textbox, если точнее, относительно опкода 0АСА. Можно ли вывести textbox без звука или как-то сразу выключить звук, чтобы его не было? Дело в том, что в моей модификации textbox появляться может довольно часто, чтобы звук надоел, хотя саму надпись можно и не заметить.

#14 Re: Вопросы по скриптингу » Опкод 03FE: » 18-12-2014 15:39

Опкод 03FE предназначен для всех актёров, кроме игрока.
Никто не мешает использовать простую математику для установления количества денег игрока:

0@ = player.Money(0)
0@ *= -1
player.Money(0) += 0@
player.Money(0) += 150
0A93: end_custom_thread

Всё просто: получаем кол-во денег игрока и записываем в переменную 0@; умножаем её на -1; прибавляем к текущим деньгам игрока ту же сумму со знаком "-", получается как в математике: x - x  = 0; прибавляем нужное количество денег. Всё, старая сумма полностью стирается, а её заменяет новая. То же самое с бронёй, а вот здоровье вроде можно ставить на любой уровень без этих вычитаний.

#15 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 22-01-2014 16:21

А можно ли в 3 и VC добавить cleo-переменные? Это был бы аналог массивов (хотя бы примитивный), потому что они идут в опкодах по номерам (0AB3: var 0 = 10). И таким образом можно было бы записать, к примеру, хендлы актёров в цикле for, где счётчик был бы и номером cleo-переменной.
Кстати, говорится, что такие переменные сохраняются в cleo сейвах. У каждого скрипта свой сейв, или могут быть конфликты скриптов при использовании одних и тех же номеров cleo-переменных? Скажем, один скрипт будет брать переменные 0-10, другой возьмёт те же, тогда будут конфликты, или каждый скрипт имеет свой запас cleo-переменных?

#16 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 19-01-2014 16:32

Я, конечно, много говорю по мелочам, так что на это обращайте меньше внимания, у многих есть идеи куда более приоритетные. Хотелось бы, чтобы не было глюков с поиском опкодов: там вместо фразы "Найдено (кол-во) опкодов" стоит только "Найде", а также нету полосы прокрутки, и последний в списке опкод частично скрыт. Это просто мелкие неудобства.
А вот идея относительно кода - здорово было бы добавить массивы в GTA 3 и VC, так как вряд ли разработчики обошлись без них при создании игр (в чём я могу ошибаться, конечно). DK22Pac показывал способ, который может заменить стандартные массивы, но было бы гораздо удобнее иметь и обычный вариант, тем более, если SB начинают изучать новички, совсем не понимающие работы с памятью (впрочем, я в этом тоже не самый понимающий, но тот алгоритм вполне хорош).

#17 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 07-08-2013 19:34

Мда, с поиском опкодов всё не очень хорошо. Мало того, что надпись на корявом языке (терпимо более-менее, скриншот приложил в предыдущем сообщении), но ещё есть проблемы:
- нету прокрутки, потому последние результаты остаются почти скрытыми границами окна поиска
- пропало отображение количества найденных опкодов

Есть ещё пожелание по поиску: хорошо бы сделать ссылку на GTAG прямо в строке поиска, чтобы пользователь мог нажать на неё и увидеть детальное описание. Или добавить ещё одну строку поиска для этой цели.
Не лишним было бы ещё разделение обычных опкодов от cleo для облегчения поиска (по выбору: все опкоды, только cleo или только стандартные).

Как всегда, генератор идей запустился smile
Если всё это нереализуемо или просто ненужно, то не сердитесь, это всего лишь мелкие предложения.

#18 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 28-07-2013 15:11

@Seemann - @Seemann - здорово, уже новая версия smile
Начинаем искать мелкие недочёты:
Картинка

Попутно хотелось бы предложить слегка расширить количество запоминаемых последних файлов (если возможно) и сделать запоминание макросов. Кстати, неплохо было бы сделать удаление макросов без необходимости менять сам файл macroes.
Если в дальнейшем будут какие-то идеи или находки, обязательно сообщу.

#19 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 25-07-2013 16:35

@Seemann - я бы сказал, что и к тому, и к другому, так как декомпиляция всё же иногда необходима, так что выбор в debug-настройках будет полезен.
Кстати, неужели невозможно сделать компиляцию таким образом, чтобы высокоуровневые конструкции и циклы всё-таки сохранялись, или это уже особенности внутри игры/программы? Немалое количество людей на форумах разных сайтов просят помощи со скриптами, исходников которых у них нету, потому людям приходится иметь дело с декомпилированным вариантом, который не так удобен для восприятия.
В общем, всё на усмотрение, ни к чему не хочу принуждать, а то, если учитывать все просьбы, даже малейшие, улучшение программы растянулось бы на века.

#20 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 25-07-2013 15:38

@Seemann - я никуда не спешу с этим, к тому же я имею в виду те опкоды, которые уже имеют в своём тексте отображение записей. К примеру, после 03Е5 следует стандартный текст про то, как игрок может поднять уровень уважения. То есть, когда-то эта идея начала работать, и содержимое текста записалось в opcodes.txt, что порой неприятно при переходе на другую строку, приходится жать End, только потом Enter. Но это, конечно, так, придирка больше, нежели что-то серьёзное, описание опкодов можно и подредактировать, как я и сделал, но при каждом обновлении эти комментарии будут возвращаться. Но это, как я уже сказал, в последнюю очередь, лучше обратить внимание на что-то более стоящее и важное пока что.

#21 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 25-07-2013 14:33

@Seemann - спасибо, удачи в улучшении!

#22 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 25-07-2013 14:14

@Seemann - сейчас перебрал все опкоды из opcodes.txt в SB, вот результаты:

00F1:   actor $PLAYER_ACTOR sphere 0 near_point 540.0 2000.0 stopped_in_car
072D:   unknown_check %1d% %2d% %3d% %4d% %5d% %6h%
072E:  unknown_check %1d% %2d% %3d% %4d% %5d% %6h% %7d% %8d%
0AF5: write_string "new string value" to_ini_file "cleo\config.ini" section "SectionName (незавершённая строка)

Вот всё, что я нашёл. Хорошо, что всё опкоды есть в файле .txt, иначе пришлось бы по одному копировать в SB crazy
@Den_spb - спасибо за совет, помогло.

А что насчёт отображения GXT записей в тексте опкодов? Они идут как комментарий, при этом иногда мешая восприятию, впрочем, это далеко не первостепенная проблема.

#23 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 23-07-2013 20:07

@Seemann - @Seemann - хотелось бы сообщить о небольшой проблеме, которая, впрочем, неприятная. Дело в том, что при поиске опкодов немногие из них не до конца написаны, например:

0B01: delete_directory

Совершенно без параметров, хотя их должно быть два.

Хотел бы ещё попросить даже, а не сообщить, убрать отображение содержания GXT записей в опкодах: это иногда мешает. Здорово было бы сделать отображение таких записей в виде подсказок при нажатии Ctrl+Пробел, если это возможно.

Как идея как можно больше опкодов (можно, например, только CLEO) в виде классов, как actor., к примеру. Было бы очень удобно, к тому же похоже на GTA IV (C#). Но это по усмотрению, конечно.

Также хотел спросить, с чем связано то, что cleo текст (0ACA и подобные) отображают текст лишь заглавными буквам, несмотря на то, как написан текст в программе? У меня стоит русификатор от SanLtd, он поддерживает как заглавные, так и строчные английские/русские символы.

Заранее спасибо за ответы и помощь!

#24 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 22-06-2013 15:52

Отличная версия, много полезных изменений, но хочу спросить, по плану ли пропали многие противоположные опкоды? К примеру, я теперь не могу использовать 80E1, его и многих других опкодов просто нету.

#25 Re: Вопросы по скриптингу » Один вопрос » 22-06-2013 15:50

@DK22Pac - да, многие стандартные опкоды поиска актёров (02DD, например) не удаляют актёра никогда, он так и будет оставаться в памяти, если взять много актёров, то они могут вообще перестать появляться. Но cleo опкоды не ставят этот флаг, что позволяет игре убирать актёров, которые были "пойманы". У меня лишь опасения по поводу того, что поиск может как-либо влиять на актёра. Так ли это, или всё же актёры никаким образом не смогут изменить своих свойств при действии на них опкодов поиска (который НЕ ставит флаг уникальности)?
Параллельно хотел бы задать вопрос относительно памяти. У каждого элемента игры есть свой адрес (структура + какие-либо смещения), которые, как я понимаю, хранятся независимо от флага уникальности, то есть имеются у всех. Если я найду актёра и установлю ему какое-либо значение в памяти, то он сохранит эти изменения после .removereferences? И есть ли пустые адреса памяти, которые не влияют на элементы игры? (я знаю лишь, что у машины можно поставить в адрес бомб поставить значение 3, которое не даст бомбы, то есть, оно пустое) Так как я с памятью пока что на низком уровне работаю, то мне здесь пока всё интересно.

Board footer

Powered by FluxBB