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

или

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

Внимание! От этого момента тема предназначена ещё и для заказов скриптов и миссий. Я это сделал по одной причине - пользователи постоянно путают/или не ищут темы и приводят заказ здесь. Теперь этой путаницы не будет. Здесь можно проводить заказы, но Вы должны указать в начале поста текст "НА ЗАКАЗ". Постарайтесь как можно детальнее объяснить суть скрипта.
Прикрепления: 0248203.png(1Kb) · 9085525.png(0Kb)

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@ в этом случае будет дробным числом, а не целым.

Dyabda
Пользователи
17.09.17 13:50
Offline
Цитата wmysterio ()
Без записи в память весь Ваш код будет бесполезен.

Но как их записывать?
И почему в данном случае число будет дробным? Я ведь прибавляю целые числа, а начальное значение вроде бы как 200.

wmysterio
Администраторы
Скриптер
17.09.17 14:17
Offline
Цитата Dyabda ()
И почему в данном случае число будет дробным?
Так указано в мануалах. Я посмотрел статические адреса памяти GTA SA, и там оно тоже числится как "float"
Цитата Dyabda ()
начальное значение вроде бы как 200
Изначально где? В оригинальном мейне в статистике указано тоже как float.
Цитата Dyabda ()
Но как их записывать?
Вот так:
Код
0A8C: write_memory 0xB793D4 size 4 value 0@ virtual_protect 0

Dyabda
Пользователи
17.09.17 14:28
Offline
Бесполезно.
Я уже не могу понять, почему ничего не происходит.
Код

:FAT
thread 'FAT'
wait 0
0A8C: write_memory 0xB793D4 size 4 value 0@ virtual_protect 0

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

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

wmysterio
Администраторы
Скриптер
17.09.17 14:40
Offline
Цитата Dyabda ()
Бесполезно.
Вот мой вариант:
Код
{$CLEO}
thread 'FAT'

while true
wait 0
    if or
    0AB0:   key_pressed 39 // R Arrow
    0AB0:   key_pressed 68 // D
    then
    1@ = 100.0
    gosub @FAT_CHANGE
    wait 1500
    end
    if or               
    0AB0:   key_pressed 37 // L Arrow
    0AB0:   key_pressed 65 // A
    then        
    1@ = -100.0
    gosub @FAT_CHANGE
    wait 1500
end
end

:FAT_CHANGE
0A8D: 0@ = read_memory 0xB793D4 size 4 virtual_protect 0
005B: 0@ += 1@  // (float)  
0A8C: write_memory 0xB793D4 size 4 value 0@ virtual_protect 0
Player.Build($PLAYER_CHAR) // чтобы были заметны изменения, но ценой небольшого подвисания игры
return

Dyabda
Пользователи
17.09.17 14:55
Offline
Работает!
Спасибо Вам большое, буду разбираться.

wmysterio
Администраторы
Скриптер
17.09.17 15:10
Offline
Цитата Dyabda ()
Спасибо Вам большое, буду разбираться.
Незачто wink Интересно, почему Вы решили провернуть такое через игровую память, когда под рукой есть специальные опкоды для изменения статистики:
Код
{$CLEO}
thread 'FAT'

while true
wait 0
    if or
    0AB0:   key_pressed 39 // R Arrow
    0AB0:   key_pressed 68 // D
    then
    0A1F: increase_float_stat 21 by 100.0
    Player.Build($PLAYER_CHAR)
    wait 1500
    end
    if or               
    0AB0:   key_pressed 37 // L Arrow
    0AB0:   key_pressed 65 // A
    then            
    0626: decrease_float_stat 21 by 100.0
    Player.Build($PLAYER_CHAR)
    wait 1500
    end
end

Dyabda
Пользователи
18.09.17 06:30
Offline
Цитата wmysterio ()
Интересно, почему Вы решили провернуть такое через игровую память

Это я взял как пример, ведь скорость ветра, тяжёлые облака и т.д. через это провернуть не получится (Наверное, я точно не знаю.)

Добавлено (18.09.17, 06:30)
---------------------------------------------
Здравствуйте.
Решил по примеру выше, сделать скрипт, который будет менять скорость ветра по оси Х.

Код

while true
wait 0
    if or
    0AB0:   key_pressed 39 // R Arrow
    0AB0:   key_pressed 68 // D
    then
    1@ = 10.0
    gosub @Veter_1
    wait 1500
    end
    if or
    0AB0:   key_pressed 37 // L Arrow
    0AB0:   key_pressed 65 // A
    then
    1@ = -10.0
    gosub @Veter_1
    wait 1500
end
end

:Veter_1
0A8D: 0@ = read_memory 0xC813E0  size 4 virtual_protect 0
005B: 0@ += 1@
0A8C: write_memory 0xC813E0  size 4 value 0@ virtual_protect 0
return


Но вместо этого, ветер резко появляется и резко пропадает. Как можно сделать, чтобы он изменился навсегда (До входа в другой интерьер)?
Отредактировал Dyabda - Понедельник, 18.09.17, 10:49

wmysterio
Администраторы
Скриптер
20.09.17 09:22
Offline
Цитата Dyabda ()
Как можно сделать, чтобы он изменился навсегда
Можете попробовать так сделать:
Код
{$CLEO}
0A8D: 0@ = read_memory 0xC813E0  size 4 virtual_protect 0

while true
wait 0
    0A8C: write_memory 0xC813E0  size 4 value 0@ virtual_protect 0
    if or
    0AB0:   key_pressed 39 // R Arrow
    0AB0:   key_pressed 68 // D
    then
    1@ += 10.0    
    0087: 0@ = 1@ // (float)
    wait 1500
    end
    if or
    0AB0:   key_pressed 37 // L Arrow
    0AB0:   key_pressed 65 // A
    then
    1@ -= 10.0  
    0087: 0@ = 1@ // (float)
    wait 1500
    end
end

Dyabda
Пользователи
21.09.17 15:48
Offline
Большое Вам спасибо.
Появился ещё вопрос.
Проходил Ваш урок по поводу маркеров и решил его совместить с материалом из прошлых уроков.

Код

:MODEL
thread 'MODEL'
wait 0
if
0AB0:   key_pressed 115
then
gosub @MODEL_1
wait 1000
$IVKA = actor.Create(6, #SWAT, 2500.5637, -1669.097, 13.3541)
actor.Angle($IVKA) = 90.0
model.Destroy(#SWAT)
$IFA = car.Create(#INFERNUS, 2483.2671, -1654.4117, 13.304)
car.Angle($IFA) = 90.0
model.Destroy(#INFERNUS)
$OBJECT = object.Create(#AD_JUMP, 2473.2708, -1707.38, 12.5209)
object.Angle($OBJECT) = 180.0
object.SetImmunities($OBJECT, 1, 1, 1, 1, 1)
object.Indestructibility($OBJECT) = false
object.RemoveFromMissionCleanupList($OBJECT)
0213: 0@ = create_pickup #BAT type 15 at 2472.8599 -1687.4352 13.5078
02E1: 1@ = create_cash_pickup 500 at 2469.7446 -1679.8409 13.5078 permanence_flag 1
0213: 2@ = create_pickup #BODYARMOUR type 15 at 2472.8599 -1687.4352 13.5078
032B: 3@ = create_weapon_pickup #MINIGUN group 15 ammo 6000000000000 at 2469.7446 -1679.8409 13.5078
0187: 4@ = create_marker_above_actor $IVKA
0188: 5@ = create_marker_above_object $OBJECT
0186: 6@ = create_marker_above_car $IFA
03DC: 7@ = create_marker_above_pickup $PICKUP_0001
end
jump @MODEL

:MARKER
wait 0
if and
075C:   marker 4@ enabled
actor.Dead($IVKA)
jf @MARKER
wait 100
0164: disable_marker 4@
0164: disable_marker 5@
0164: disable_marker 6@
0164: disable_marker 7@
jump @MODEL_END

:MODEL_END
wait 0
jump @MODEL

:MODEL_1
wait 0
model.Load(#SWAT)
model.Load(#INFERNUS)
038B: load_requested_models

:MODEL_2
wait 0
if and
model.Available(#SWAT)
model.Available(#INFERNUS)
jf @MODEL_1
return

В условии написано, что если актёр погибнет, то все маркеры исчезнут, но они почему-то до сих пор стоят. В чём причина?
Отредактировал Dyabda - Четверг, 21.09.17, 15:58

wmysterio
Администраторы
Скриптер
21.09.17 16:06
Offline
Цитата Dyabda ()
но они почему-то до сих пор стоят
А как они должны исчезнуть, если нет прыжка на метку, где идёт проверка? smile Вот:
Код
:MODEL
thread 'MODEL'
wait 0
if
0AB0:   key_pressed 115
jf @MODEL
gosub @MODEL_1
$IVKA = actor.Create(6, #SWAT, 2500.5637, -1669.097, 13.3541)
actor.Angle($IVKA) = 90.0
model.Destroy(#SWAT)
$IFA = car.Create(#INFERNUS, 2483.2671, -1654.4117, 13.304)
car.Angle($IFA) = 90.0
model.Destroy(#INFERNUS)
$OBJECT = object.Create(#AD_JUMP, 2473.2708, -1707.38, 12.5209)
object.Angle($OBJECT) = 180.0
object.SetImmunities($OBJECT, 1, 1, 1, 1, 1)
object.Indestructibility($OBJECT) = false
object.RemoveFromMissionCleanupList($OBJECT)
0213: 0@ = create_pickup #BAT type 15 at 2472.8599 -1687.4352 13.5078
02E1: 1@ = create_cash_pickup 500 at 2469.7446 -1679.8409 13.5078 permanence_flag 1
0213: 2@ = create_pickup #BODYARMOUR type 15 at 2472.8599 -1687.4352 13.5078
032B: 3@ = create_weapon_pickup #MINIGUN group 15 ammo 6000000000000 at 2469.7446 -1679.8409 13.5078
0187: 4@ = create_marker_above_actor $IVKA
0188: 5@ = create_marker_above_object $OBJECT
0186: 6@ = create_marker_above_car $IFA
03DC: 7@ = create_marker_above_pickup $PICKUP_0001
gosub @MODEL_3

:MARKER
wait 0
if and
075C:   marker 4@ enabled
actor.Dead($IVKA)
jf @MARKER
wait 100
0164: disable_marker 4@
0164: disable_marker 5@
0164: disable_marker 6@
0164: disable_marker 7@
jump @MODEL

:MODEL_1
model.Load(#SWAT)
model.Load(#INFERNUS)
038B: load_requested_models

:MODEL_2
wait 0
if and
model.Available(#SWAT)
model.Available(#INFERNUS)
jf @MODEL_2
return

:MODEL_3
model.Destroy(#SWAT)
model.Destroy(#INFERNUS)
return

Dyabda
Пользователи
22.09.17 08:25
Offline
Как же я не внимателен. Спасибо, что нашли ошибку.
Но тут у меня вновь возникла проблема:

Код

:MARKER
wait 0
if
actor.Dead($IVKA)
jf @MARKER_1
0164: disable_marker 4@
jump @MODEL_END

:MARKER_1
wait 0
if
0119: car $IFA wrecked
jf @MARKER_2
0164: disable_marker 6@
jump @MODEL_END

:MARKER_2
wait 0
if
0214:  pickup 2@ picked_up
jf @MARKER_3
0164: disable_marker 7@
jump @MODEL_END

:MARKER_3
wait 0
if
023B:   actor $PLAYER_ACTOR colliding_with_object $OBJECT
jf @MARKER_4
0164: disable_marker 5@
jump @MODEL_END

:MARKER_4
wait 0
if
075C:   marker 8@ enabled
jf @MARKER_4
wait 20000
0164: disable_marker 8@
jump @MODEL_END

:MODEL_END
wait 0
jump @MODEL


Я всё не могу понять, как сделать, чтобы проверялся каждый маркер, а не по одному. К примеру, чтобы
если вначале умер актёр, то убирался маркер актёра, а остальные не трогались, или же если я вначале уничтожу авто, то убирался маркер авто, а так же чтобы проверка из метки :MARKER_4 работала не смотря на то, уничтожено ли авто, или нет, в общем, чтобы все эти проверки работали одновременно.

Добавлено (22.09.17, 08:25)
---------------------------------------------
И ещё один вопрос про условия:

Код

:MARKER
wait 0
if and
car.Wrecked($IFA)
actor.Dead($IVKA)
075C: marker 7@ enabled
075C: marker 8@ enabled
023B:   actor $PLAYER_ACTOR colliding_with_object $OBJECT
jf @MARKER
0164: disable_marker 4@
0164: disable_marker 5@
0164: disable_marker 6@
0164: disable_marker 7@
0164: disable_marker 8@

:MODEL_END
wait 0
jump @MODEL


Как видно, маркеры будут удаляться, если: актёр мёртв, авто уничтожено, до объекта коснулись и маркеры существуют для пикапов. Но дело в том, что если эти операции не завершатся, новую порцию актёров и авто я заспавнить не смогу.
Можно ли сделать так, чтобы работали условия и одновременно можно было спавнить актёров? (Метка MODEL_END)

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