[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Игры серии GTA » GTA San Andreas » Вопросы по скриптингу Sanny Builder (Вы можете получить ответы на вопросы по SB)
Вопросы по скриптингу Sanny Builder
wmysterio
Администраторы
Скриптер
22.11.11 21:52
Offline
Если у вас возник вопрос по скриптингу Sanny Builder, обращайтесь! Мы постараемся решить вашу проблему wink Это ещё не значит, что все прям бросятся решать во чтобы то не стало, но ответ вы сможете вы получить как вариант решения или как невозможность или сложность решения.
УВАЖАЕМЫЕ ПОЛЬЗОВАТЕЛИ! ПРОСЬБА КОД СКРИПТОВ ПОМЕЩАТЬ В КОНСТРУКЦИЮ КОДА:

или

Также указывайте полный код скрипта, иначе причина ошибок может быть и не выявлена.
Прикрепления: 0248203.png(0.9 Kb) · 9085525.png(0.2 Kb)

vlad_slobodchikov_2002
Пользователи
05.08.17 01:53
Offline
Хочу создать миссию в Sanny Builder, но в main.scm вместо DEFINE MISSIONS 0 написано DEFINE MISSIONS 135. То есть если я начну писать миссии, то они буду доступны только после прохождения всех 134 миссий, а мне надо, чтобы в отдельном MPACK'е они были

wmysterio
Администраторы
Скриптер
05.08.17 22:23
Offline
Цитата Dyabda ()
Насколько я знаю, тут как раз нужно редактировать Main.scm.
В том скрипте используется опкоды 075F, 078C и 0761, которые читаются с файла "shopping.dat". Редактировать скомпилированный скрипт - это то ещё приключение. Других способов я не знаю.
Цитата vlad_slobodchikov_2002 ()
Хочу создать миссию в Sanny Builder, но в main.scm вместо DEFINE MISSIONS 0 написано DEFINE MISSIONS 135. То есть если я начну писать миссии, то они буду доступны только после прохождения всех 134 миссий, а мне надо, чтобы в отдельном MPACK'е они были
Если пишете миссии с нуля, то здесь несколько вариантов - использовать чистый, оригинальный или очищенный от стандартных миссий мейн. Во всех вариантах нужно написать миссию и добавить её в "DEFINE MISSION {NUMBER} AT {LABEL}" и увеличить значение "DEFINE MISSIONS" на 1. Нужно больше информации, так сходу не скажешь как решить проблему.

Dyabda
Пользователи
07.08.17 12:49
Offline
Как можно добавить машину в список машин, на которых выполняются миссии?
Например:
Как добавить cheetah в список такси машин, чтобы на cheetah`е можно было выполнять миссию такси?
И как добавить к примеру infernus в список полицейских машин?

wmysterio
Администраторы
Скриптер
07.08.17 14:25
Offline
Цитата Dyabda ()
Как можно добавить машину в список машин, на которых выполняются миссии?
В стартерах миссий заменить:
Код
056C:   actor $PLAYER_ACTOR driving_police_car
// и
0602:   actor $PLAYER_ACTOR driving_taxi

На
Код
00DD:   actor $PLAYER_ACTOR driving_car_with_model #CHEETAH
00DD:   actor $PLAYER_ACTOR driving_car_with_model #INFERNUS
Соответсвтенно.

В стартете миссии кода осуществляется дополнительная проверка на то, какой транспорт водит игрок. Нужно добавить или заменить модель транспорта на нужный.

Dyabda
Пользователи
07.08.17 22:44
Offline
Появился новый вопрос:
Как можно сделать, чтобы CHEETAH имел другой звук мигалки, можно ли сделать путь к этому звуку?
Например: GTA SA\AUDIO\MYMOD\SOUND.MP3
И ещё, я хочу добавить данные авто в список, а не заменять весь список, т.е. чтобы мисси можно было выполнять и на старых авто и на новых. Такси я добавить смог, а вот с полицейским авто проблемы.

------------------------------------------------------------------------------------------------------------------------------------------------
UPDATE.
Отредактировал Dyabda - Вторник, 08.08.17, 02:03

wmysterio
Администраторы
Скриптер
08.08.17 00:58
Offline
Цитата Dyabda ()
Искал данный код, так и не смог найти.
Я не буду Вам каждый раз искать такие мелочи. Запуск миссий находится в потоку "R3". Дальше уже сами.
Цитата Dyabda ()
Как можно сделать, чтобы CHEETAH имел другой звук мигалки, можно ли сделать путь к этому звуку?
Например: GTA SA\AUDIO\MYMOD\SOUND.MP3
Кажется через "Mod loader" можно менять звуки, не копаясь в архивах.

Dyabda
Пользователи
09.08.17 03:39
Offline
Здравствуйте, появился вопрос:
Как сделать, чтобы банда Грув имела 3-ий навык владения пистолетами?
И как осуществляется проверка условия, что определённая банда владеет определённым районом?
И ещё, как назначить полицейским другое оружие?
Отредактировал Dyabda - Среда, 09.08.17, 04:27

wmysterio
Администраторы
Скриптер
09.08.17 19:01
Offline
Цитата Dyabda ()
И как осуществляется проверка условия, что определённая банда владеет определённым районом?
Точно не знаю, но можете получить значения из опкодов ниже и проверить их:
Код
076D: get_zone 'GAN1' gang 1 density_to 35@
08D3: get_present_zone_popcycle_group_for_peds_and_cars_to 26@

Цитата Dyabda ()
И ещё, как назначить полицейским другое оружие?
Такого опкода нет. Возможно можно изменить как-то через память игры или панисать скрипт, де будет осуществлятся поиск копа и прозиводится замена/добавление нужного оружия
Цитата Dyabda ()
Как сделать, чтобы банда Грув имела 3-ий навык владения пистолетами?
Через память скорее всего. Хотя я не знаю есть ли способ вообще изменить этот навык.

Dyabda
Пользователи
10.08.17 03:41
Offline
Здравствуйте, уважаемый wmysterio.
Решил изменить один скрипт, он добавляет в пустынную местность своего шерифа (Т.е. в пустыне будет свой шериф, а в сельской местности свой.) Решил заменить строки с надписью #CSHER на ID нового педа 6013, но игра вылетает, что не так?
Вот код:
Код
{$CLEO}

0000:
goto @notdesert

:desertcop
wait 0
if
Model.Available(#DSHER) // Desert
then
0A8C: write_memory 0x8A5AA0 size 1 value 288 virtual_protect 0 //????? dsher
else
goto @loadcop
end

:notdesert
wait 0
if and // Country
8154: not actor $PLAYER_ACTOR in_zone 'RED' // red country
8154: not actor $PLAYER_ACTOR in_zone 'FLINTC' // flint country
8154: not actor $PLAYER_ACTOR in_zone 'ANGPI' // Angel Pine
8154: not actor $PLAYER_ACTOR in_zone 'SHACA' // Shady Cabin
jf @countrycop
if and
8154: not actor $PLAYER_ACTOR in_zone 'BEACO' // Beacon Hill
8154: not actor $PLAYER_ACTOR in_zone 'BACKO'
8154: not actor $PLAYER_ACTOR in_zone 'FARM'
8154: not actor $PLAYER_ACTOR in_zone 'PALO'
jf @countrycop
if and
8154: not actor $PLAYER_ACTOR in_zone 'MONT'
8154: not actor $PLAYER_ACTOR in_zone 'MONT1'
8154: not actor $PLAYER_ACTOR in_zone 'HBARNS'
8154: not actor $PLAYER_ACTOR in_zone 'DILLI'
jf @countrycop
if and
8154: not actor $PLAYER_ACTOR in_zone 'TOPFA'
8154: not actor $PLAYER_ACTOR in_zone 'BLUEB'
8154: not actor $PLAYER_ACTOR in_zone 'BLUEB1'
8154: not actor $PLAYER_ACTOR in_zone 'PANOP'
jf @countrycop
if and
8154: not actor $PLAYER_ACTOR in_zone 'BLUAC'
8154: not actor $PLAYER_ACTOR in_zone 'CREEK'
8154: not actor $PLAYER_ACTOR in_zone 'CREEK1'
8154: not actor $PLAYER_ACTOR in_zone 'FERN'
jf @countrycop
if and
8154: not actor $PLAYER_ACTOR in_zone 'NROCK'
8154: not actor $PLAYER_ACTOR in_zone 'HANKY'
8154: not actor $PLAYER_ACTOR in_zone 'LEAFY'
8154: not actor $PLAYER_ACTOR in_zone 'WHET'
jf @countrycop
if and
8154: not actor $PLAYER_ACTOR in_zone 'FLINTI'
8154: not actor $PLAYER_ACTOR in_zone 'MONINT'
8154: not actor $PLAYER_ACTOR in_zone 'HAUL'
8154: not actor $PLAYER_ACTOR in_zone 'EBAY'
8154: not actor $PLAYER_ACTOR in_zone 'EBAY2'
jf @countrycop
if and // Desert
8154: not actor $PLAYER_ACTOR in_zone 'BONE' // bone country
8154: not actor $PLAYER_ACTOR in_zone 'SUNMA'
8154: not actor $PLAYER_ACTOR in_zone 'SUNNN'
8154: not actor $PLAYER_ACTOR in_zone 'BIGE'
jf @desertcop
if and
8154: not actor $PLAYER_ACTOR in_zone 'ELQUE'
8154: not actor $PLAYER_ACTOR in_zone 'BARRA'
8154: not actor $PLAYER_ACTOR in_zone 'CARSO'
8154: not actor $PLAYER_ACTOR in_zone 'PAYAS'
jf @desertcop
if and
8154: not actor $PLAYER_ACTOR in_zone 'PROBE'
8154: not actor $PLAYER_ACTOR in_zone 'ELCA'
8154: not actor $PLAYER_ACTOR in_zone 'ARCO'
8154: not actor $PLAYER_ACTOR in_zone 'VALLE'
jf @desertcop
if and
8154: not actor $PLAYER_ACTOR in_zone 'ROBINT'
8154: not actor $PLAYER_ACTOR in_zone 'TOM'
8154: not actor $PLAYER_ACTOR in_zone 'ALDEA'
8154: not actor $PLAYER_ACTOR in_zone 'BRUJA'
jf @desertcop
if and
8154: not actor $PLAYER_ACTOR in_zone 'ROBAD'
8154: not actor $PLAYER_ACTOR in_zone 'QUARY'
8154: not actor $PLAYER_ACTOR in_zone 'OCTAN'
8154: not actor $PLAYER_ACTOR in_zone 'PALMS'
8154: not actor $PLAYER_ACTOR in_zone 'DAM'
jf @desertcop        
0249: release_model #DSHER
0249: release_model 6013
goto @desertcop

:countrycop
wait 0
if
Model.Available(6013) // Country
then
0A8C: write_memory 0x8A5AA0 size 1 value 6013 virtual_protect 0 //????? dsher
goto @notdesert
else
goto @loadcopcont
end

:loadcopcont
wait 0
Model.Load(6013)
038B: load_requested_models

:loadcopcont2
wait 0
if
Model.Available(6013)
jf @loadcopcont2
goto @countrycop

:loadcop
wait 0
Model.Load(#DSHER)
038B: load_requested_models

:loadcop2
wait 0
if
Model.Available(#DSHER)
jf @loadcop2
goto @desertcop     

Добавлено (10.08.17, 03:41)
---------------------------------------------
Здравствуйте, уважаемый wmysterio.
Решил изменить один скрипт, он добавляет в пустынную местность своего шерифа (Т.е. в пустыне будет свой шериф, а в сельской местности свой.) Решил заменить строки с надписью #CSHER на ID нового педа 6013, но игра вылетает, что не так?
Вот код:

Код
{$CLEO}

0000:
goto @notdesert

:desertcop
wait 0
if
Model.Available(#DSHER) // Desert
then
0A8C: write_memory 0x8A5AA0 size 1 value 288 virtual_protect 0 //????? dsher
else
goto @loadcop
end

:notdesert
wait 0
if and // Country
8154: not actor $PLAYER_ACTOR in_zone 'RED' // red country
8154: not actor $PLAYER_ACTOR in_zone 'FLINTC' // flint country
8154: not actor $PLAYER_ACTOR in_zone 'ANGPI' // Angel Pine
8154: not actor $PLAYER_ACTOR in_zone 'SHACA' // Shady Cabin
jf @countrycop
if and
8154: not actor $PLAYER_ACTOR in_zone 'BEACO' // Beacon Hill
8154: not actor $PLAYER_ACTOR in_zone 'BACKO'
8154: not actor $PLAYER_ACTOR in_zone 'FARM'
8154: not actor $PLAYER_ACTOR in_zone 'PALO'
jf @countrycop
if and
8154: not actor $PLAYER_ACTOR in_zone 'MONT'
8154: not actor $PLAYER_ACTOR in_zone 'MONT1'
8154: not actor $PLAYER_ACTOR in_zone 'HBARNS'
8154: not actor $PLAYER_ACTOR in_zone 'DILLI'
jf @countrycop
if and
8154: not actor $PLAYER_ACTOR in_zone 'TOPFA'
8154: not actor $PLAYER_ACTOR in_zone 'BLUEB'
8154: not actor $PLAYER_ACTOR in_zone 'BLUEB1'
8154: not actor $PLAYER_ACTOR in_zone 'PANOP'
jf @countrycop
if and
8154: not actor $PLAYER_ACTOR in_zone 'BLUAC'
8154: not actor $PLAYER_ACTOR in_zone 'CREEK'
8154: not actor $PLAYER_ACTOR in_zone 'CREEK1'
8154: not actor $PLAYER_ACTOR in_zone 'FERN'
jf @countrycop
if and
8154: not actor $PLAYER_ACTOR in_zone 'NROCK'
8154: not actor $PLAYER_ACTOR in_zone 'HANKY'
8154: not actor $PLAYER_ACTOR in_zone 'LEAFY'
8154: not actor $PLAYER_ACTOR in_zone 'WHET'
jf @countrycop
if and
8154: not actor $PLAYER_ACTOR in_zone 'FLINTI'
8154: not actor $PLAYER_ACTOR in_zone 'MONINT'
8154: not actor $PLAYER_ACTOR in_zone 'HAUL'
8154: not actor $PLAYER_ACTOR in_zone 'EBAY'
8154: not actor $PLAYER_ACTOR in_zone 'EBAY2'
jf @countrycop
if and // Desert
8154: not actor $PLAYER_ACTOR in_zone 'BONE' // bone country
8154: not actor $PLAYER_ACTOR in_zone 'SUNMA'
8154: not actor $PLAYER_ACTOR in_zone 'SUNNN'
8154: not actor $PLAYER_ACTOR in_zone 'BIGE'
jf @desertcop
if and
8154: not actor $PLAYER_ACTOR in_zone 'ELQUE'
8154: not actor $PLAYER_ACTOR in_zone 'BARRA'
8154: not actor $PLAYER_ACTOR in_zone 'CARSO'
8154: not actor $PLAYER_ACTOR in_zone 'PAYAS'
jf @desertcop
if and
8154: not actor $PLAYER_ACTOR in_zone 'PROBE'
8154: not actor $PLAYER_ACTOR in_zone 'ELCA'
8154: not actor $PLAYER_ACTOR in_zone 'ARCO'
8154: not actor $PLAYER_ACTOR in_zone 'VALLE'
jf @desertcop
if and
8154: not actor $PLAYER_ACTOR in_zone 'ROBINT'
8154: not actor $PLAYER_ACTOR in_zone 'TOM'
8154: not actor $PLAYER_ACTOR in_zone 'ALDEA'
8154: not actor $PLAYER_ACTOR in_zone 'BRUJA'
jf @desertcop
if and
8154: not actor $PLAYER_ACTOR in_zone 'ROBAD'
8154: not actor $PLAYER_ACTOR in_zone 'QUARY'
8154: not actor $PLAYER_ACTOR in_zone 'OCTAN'
8154: not actor $PLAYER_ACTOR in_zone 'PALMS'
8154: not actor $PLAYER_ACTOR in_zone 'DAM'
jf @desertcop        
0249: release_model #DSHER
0249: release_model 6013
goto @desertcop

:countrycop
wait 0
if
Model.Available(6013) // Country
then
0A8C: write_memory 0x8A5AA0 size 1 value 6013 virtual_protect 0 //????? dsher
goto @notdesert
else
goto @loadcopcont
end

:loadcopcont
wait 0
Model.Load(6013)
038B: load_requested_models

:loadcopcont2
wait 0
if
Model.Available(6013)
jf @loadcopcont2
goto @countrycop

:loadcop
wait 0
Model.Load(#DSHER)
038B: load_requested_models

:loadcop2
wait 0
if
Model.Available(#DSHER)
jf @loadcop2
goto @desertcop     

wmysterio
Администраторы
Скриптер
10.08.17 05:36
Offline
Цитата Dyabda ()
нового педа 6013
Этот ID скорее всего закреплён за объеком.

Dyabda
Пользователи
10.08.17 15:02
Offline
Использовал ID 399, всё заработало.
Но всё же не хотелось бы нарушать свой список в Peds.ide.
Можно ли как-нибудь сделать, чтобы он всё же работал?
К примеру, данный ID (6013) я могу спокойно использовать в скрипте от Silent`а, "Cop Bikes Overhaul". Там это реализовано через HEX - коды. Можно ли так же сделать в данном скрипте? И как это реализовать?

wmysterio
Администраторы
Скриптер
10.08.17 20:28
Offline
Цитата Dyabda ()
Можно ли как-нибудь сделать, чтобы он всё же работал?
Вы сами только что ответили, что можно
Цитата Dyabda ()
К примеру, данный ID (6013) я могу спокойно использовать в скрипте от Silent`а, "Cop Bikes Overhaul"

Цитата Dyabda ()
Можно ли так же сделать в данном скрипте? И как это реализовать?
Спрашивайте в Silent`а, я не на столько крут, чтобы ответить на такой вопрос.

Dyabda
Пользователи
13.08.17 03:40
Offline
Здравствуйте, появился вопрос:
А можно ли сделать скрипт, который бы нажимал клавиши при нажатии?
Например:
Код
:TEST
thread 'TEST'
wait 0
if
00E1: player 0 pressed_key 35
then
Нажимается клавиша
Нажимается клавиша
Нажимается клавиша
Всё идёт по порядку.
end
jump @TEST
Отредактировал Dyabda - Воскресенье, 13.08.17, 03:40

wmysterio
Администраторы
Скриптер
06.09.17 21:16
Offline
Цитата Dyabda ()
А можно ли сделать скрипт, который бы нажимал клавиши при нажатии?
Я делал такое только с помощью DLL-ки, написанной на C++. Хз можно ли програмно вызвать требуемую клавишу.

Dyabda
Пользователи
17.09.17 05:32
Offline
Здравствуйте, появился вопрос:

Решил создать панели с несколькими панелями внутри (т.е. выбрал первый пункт, открывается новая панель ит т.д.)

Код

:PANEL_1_1
wait 100
08D4: $PANELWTS = create_panel_with_title 'WEATIM' position 29.0 170.0 width 180.0 columns 1 interactive 1 background 1 alignment 0  
08DB: set_panel $PANELWTS column 0 header 'DUMMY' data 'WWSCT' 'TTSCT' 'DDSCT' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY'  

:PANEL_2
wait 10
if
00E1: player 0 pressed_key 0x10
jf @PANEL_9_2
08D7: $WEATP = panel $PANELWTS active_row
jump @PANEL_2_1

:PANEL_2_1
wait 10
if
$WEATP == 0
jf @PANEL_3
if
00E1: player 0 pressed_key 0x10
jf @PANEL_9_2
wait 100
08DA: remove_panel $PANELWTS
jump @WEATHER_1

:PANEL_3
wait 10
if
$WEATP == 1
jf @PANEL_4
if
00E1:   player 0 pressed_key 0x10
jf @PANEL_9_2
wait 100  
08DA: remove_panel $PANELWTS  
jump @TIME

:PANEL_4
wait 10
if and
$WEATP == 2
00E1:   player 0 pressed_key 0x10
jf @PANEL_9_2                    
wait 100  
08DA: remove_panel $PANELWTS  
jump @DAY

:PANEL_9_2
wait 0
if
00E1:   player 0 pressed_key 0xF
jf @PANEL_2  
0581: enable_radar 1
08DA: remove_panel $PANELWTS
01B4: set_player $PLAYER_CHAR can_move  1  
jump @PANEL

:DAY_8 // Конечная остановка 3-ей панели, WEATP = 3
wait 0
if
00E1:   player 0 pressed_key 0xF
jf @DAY_0  
wait 100
08DA: remove_panel $DAYPANEL
$WEATP = 2
jump @PANEL_1


Как видно, в конце метки ":DAY_8" я прописал, что переменная $WEATP = 2, т.е. нажимая enter выбор должен быть на строке 3, но он на 1-ой строке. Как это исправить?

Вот скриншот, чтобы было более понятно:

Отредактировал Dyabda - Воскресенье, 17.09.17, 08:15

wmysterio
Администраторы
Скриптер
17.09.17 09:11
Offline
Цитата Dyabda ()
т.е. нажимая enter выбор должен быть на строке 3, но он на 1-ой строке. Как это исправить?
Чтобы установить текущую активную строку используется опкод:
Код
090E: set_panel $PANELWTS active_row $WEATP

Dyabda
Пользователи
17.09.17 10:06
Offline
Спасибо за ответ, всё отлично работает.
Есть ещё вопрос:
Что делает данный опкод, для чего он предназначен?
Код

01B7: release_weather

wmysterio
Администраторы
Скриптер
17.09.17 10:32
Offline
Цитата Dyabda ()
Что делает данный опкод, для чего он предназначен?
Возвращает погоду в обычный режим, т.е. она будет изменяться согласно настройкам.

Dyabda
Пользователи
17.09.17 12:03
Offline
Появился ещё вопрос:

Код

:FAT
thread 'FAT'
wait 0
0A8D: 0@ = read_memory 0xB793D4 size 4 virtual_protect 0

:FAT_1
wait 0
if or
0AB0:   key_pressed 0x27
0AB0:   key_pressed 0x44
jf @FAT_2
0@ += 100

jump @FAT_1

:FAT_2
wait 0
if or
0AB0:   key_pressed 0x41
0AB0:   key_pressed 0x25
jf @FAT_1
0@ -= 1
jump @FAT_2

По идее, при нажатии определённых клавиш СиДжей может толстеть или худеть, но ничего не происходит, что не так?

wmysterio
Администраторы
Скриптер
17.09.17 12:26
Offline
Цитата Dyabda ()
По идее, при нажатии определённых клавиш СиДжей может толстеть или худеть, но ничего не происходит, что не так?
Обычно, чтобы увидеть изменения нужно изменить интерьер. Как сделать это без смены интерьера я не знаю. К тому же, Вы читаете данные с памяти, но нигде не записуете изменения. Без записи в память весь Ваш код будет бесполезен. И 0@ в этом случае будет дробным числом, а не целым.

Форум » Игры серии GTA » GTA San Andreas » Вопросы по скриптингу Sanny Builder (Вы можете получить ответы на вопросы по SB)
Поиск: