You are not logged in.
{$CLEO}
:TEST
wait 100
:EXISTS
repeat
wait 1
until Player.Defined($PLAYER_CHAR)
if and
00DF: actor $PLAYER_ACTOR driving
0AB0: key_pressed 16
then
00D9: 0@ = actor $PLAYER_ACTOR car
0423: set_car 0@ improved_handling_to 2.0 // (float)
015D: set_gamespeed 0.45
else 015D: set_gamespeed 1.0
Car.RemoveReferences(0@)
end
jump @EXISTSВот мой код. Тут я юзнул опкод 0423: set_car 0@ improved_handling_to 2.0.
Игра вылетает при нажатии нужной кнопки.
0423: set_car 0@ improved_handling_to 2.0 //2.0 - есть что? Эффективность?
Нужен опкод, который врубит идеальное вождение.
03FD: set_player $PLAYER_CHAR handling_responsiveness 1
- это не он? Вроде не пашет.
Ок.
Пусть мой текст "GAME SPEED: " + 0@
Как его вывести-то?) Вот мне что нужно. Нечто типа textdraw x y "GAME SPEED: "
Где можно надыбать коды шрифтов?
Вот такой текстдрав
045A: draw_text_1number 410.0 300.0 GXT 'NUMBER' number 2@
Только не для цифр, а для текста (текст обязательно любой, а не из стандартных игровых надписей).
Знаю, что на серверах SAMP текстдравы можно делать влёгкую с любым текстом. Но там способ проще.
@3Doomer, спасибо. То что нужно.
Остался вопрос:
Нужен опкод, который сможет написать текстдрав определённого стиля. Текст произвольный (свой).
Такой же есть? Я вот полазил GXT-Editor'ом в поисках стилей и что-то не вкурил там ничего)
Ок, спасибо. Вот только твой скрипт работает идентично моему 
Есть опкод прерывания игры? Аналог паскалевского halt.
Желательно выход, а не выбрасывание с ошибкой (мнгновенный).
@Sw[ee]t, твой опкод 0564: heli 34@ simulate_crash_landing у меня на сработал... Или я не так делаю?
{$VERSION 3.1.0027}
{$CLEO .cs}
//-------------MAIN---------------
wait 0
:NONAME_4
wait 10
:NONAME_8
wait 0
Player.Defined($PLAYER_CHAR) //Если игрок существует
jf @NONAME_8
:NONAME_11
wait 0
04A9: actor $PLAYER_ACTOR driving_heli //Если игрок пилотирует вертолёт
jf @NONAME_11
Player.SetDrunkVisuals($PLAYER_CHAR, 0) //Камера в нормальном положении
03F0: enable_text_draw 1 //Включение текстдрава
045A: draw_text_1number 410.0 300.0 GXT 'NUMBER' number 0 // ~1~ //Пишется 0
:NONAME_41
wait 0
0AB0: key_pressed 50 //Но если ещё нажата клавиша 2
jf @NONAME_41
:NONAME_50
wait 0
00D9: 0@ = actor $PLAYER_ACTOR car //запихать вертолёт игрока в переменную 0@ (правильно?)
Player.SetDrunkVisuals($PLAYER_CHAR, 100) //камера болтается (типа эффект "бухой пилот" :) )
wait 3000
0564: heli 0@ simulate_crash_landing //собственно опкод "крушение"
03F0: enable_text_draw 1 //Ещё раз надо активировать текстдрав? Вроде ошибок нет.
045A: draw_text_1number 410.0 300.0 GXT 'NUMBER' number 1 // ~1~ //написать 1 (чтобы было видно, что скрипт активирован)
0AB0: key_pressed 50 //делать это пока не нажмут 2
jf @NONAME_50
jump @NONAME_4Может проблема в зацикливании? Если вертолёт уже падает, я заставляю его падать ещё раз...
З.Ы. Извините за код после декомпилятора (оригинал потерял).
Нужен опкод, который сможет написать текстдрав определённого стиля. Текст произвольный (свой).
Такой же есть? Я вот полазил GXT-Editorom в поисках стилей и что-то не вкурил там ничего)
Хм. Ну хоть намекни. Мне нужен транспорт, находящийся рядом, на виду. Значит должен быть какой-то опкод определения ближнего транспорта? Проверка на наличие водителя? Есть что-то такое?
Просто в поиске берётся тачка и только по ней определяется водитель.
0205: actor $PLAYER_ACTOR near_car 73@ radius 25.0 25.0 25.0 flag 0
Я так понимаю, проверка на нахождение рядом с игроком машины 73@ (рядом = radius 25.0 25.0 25.0). flag 0 - без понятия, что это)
Можно заменить 73@ на переменную "любая машина"? Типа $ANY_CAR (как пример).
Хм. Мне для мультиплеера.
Как это можно сделать? Опкод есть?
Как можно определить транспорт другого игрока? Нужно, чтобы было "выделение цели". Можно как-нибудь отметить цель? Игрока. Маркером или лучше прицелом (как на гидре/Heat Seeker).
Думаю сделать, как в игре Blazing Angels. Будучи на самолёте, приметил себе цель, выделил цель (какой-нибудь кнопкой), нажал Shift, камера держится на цели (пока нажата клавиша Shift), в то же время игрок летит дальше, отпустил Shift - камеру кидает обратно на свой самолёт.
Знаю, есть такая тема:
00D9: 68@ = actor $PLAYER_ACTOR car
Запишет в переменную 68@ тачку игрока. А технику другого игрока можно залить в переменную?
Смотри. Сделал для теста.
wait 0 :NONAME_4 wait 10 :NONAME_8 wait 0 Player.Defined($PLAYER_CHAR) else_jump @NONAME_8 :NONAME_18 wait 0 if and 00E1: player 0 pressed_key 10 //если нажаты клавиши 00E1: player 0 pressed_key 11 //Y+N else_jump @NONAME_3A jump @NONAME_41 :NONAME_3A jump @NONAME_18 :NONAME_41 wait 10 0470: 0@ = actor $PLAYER_ACTOR current_weapon //пробить ид оружия (по идее) 03FE: set_actor $PLAYER_CHAR money 0@ //установить значение денег на значение переменной, в которой хранился ид пушки jump @NONAME_4
Вылетает из игры)
И правда. Вот только вопрос тогда: разве можно сделать что-то не с игроком в мультиплеере?
Хотя программа наверное была изначально предназначена для сингла, и там можно делать тачки, пикапы оружия, ботов...
Так. Видел опкоды типа "убрать текущее оружие", "проверить патроны текущего оружия", а опкод определения ID текущего оружия есть?
Я понимаю, что не имеют смысла, но таймер мог быть запущен и так. Вот я убедился в этом) Спасибо-спасибо.
И в MP тоже?
Den_spb, "С начала запуска игры"?
Когда игра начинается точно? При появлении игрового мира?
кстати насчёт таймера.
Если мне надо, чтобы работало что-то одно, а потом стало что-то другое через 10 секунд, то можно использовать wait 10000 или есть какой-то более "приспособленный" вариант?
3Doomer, здесь как раз то, что нужно.
Новый вопрос: 0446: set_actor $PLAYER_ACTOR immune_to_headshots 0 вообще прокатит? Для MP.
Я пробовал что-то писать, но не выходило. Immune_to_headshots надо присваивать один раз или постоянно, чтобы работало? То же касается 054A: set_actor $ACTOR_ACTOR immune_to_car_headshots 0 а также
02AB: set_actor $PLAYER_ACTOR immunities...
У меня такая идея: когда у игрока осталось 25 хп, в течение 15 секунд его можно будет убить только в голову из огнестрельного оружия или взорвать.
Я не прошу чистый код, я хочу понять сам, так что пожалуйста давайте как можно больше пояснений.
GTASA прав. Оказалось, в MP есть $PLAYER_ACTOR.
Den_spb, надо было в key_press юзать другой опкод - 00E1, а также перед клавишей надо было поставить 0 (всё это я узнал, посмотрев халп по SB ещё раз).
То есть код рабочего скрипта:
{$CLEO}
wait 0
while true
wait 1000
repeat
wait 0
until player.Defined($PLAYER_CHAR)
while true
wait 0
if and
00E1: key_pressed 0 8 // "Backspace"
00E1: key_pressed 0 9 // "Tab"
then
break
end
end
wait 1000
Actor.Health($PLAYER_ACTOR) = 100
Actor.Armour($PLAYER_ACTOR) = 100
0109: player $PLAYER_CHAR money += -10000
end
Den_spb, а вот код также не пашет, как и мой - 0 эффекта, как в SA, так и в MP.
Мм... Здорово, спасибо.
Заметил вещь, мне абсолютно не понятную.
Что есть $PLAYER_CHAR и $PLAYER_ACTOR и в чем разница между ними?
Здравствуйте скриптеры! Для начала хотел выразить свою благодарность Seemann'у за такой инструмент, как SB а также за такой форум, как этот. Спасибо.
Теперь собственно к делу.
Будучи администратором на одном из серверов SA-MP, задался вопросом чего-либо необычного на серверах, что должно привлечь посетителей, и вот увидел Sanny Builder. Я так понимаю, клео - способ получить "необычное".
Предположим, гл. админ выложит на сайте пак скриптов спицально для данного сервера, которые будут работать на данном сервере. Примеры скриптов: иммунитет к хедшотам(убрать иммунитет), взрыв тачки выстрелом в бак, уменьшение/увеличение дамага от оружия и прочее (по идее можно сколотить отличный рпг мод, где всё это будет в качестве бонусов/наказаний).
Собственно вопрос: возможно ли такое?
А также возникла куча вопросов непосредственно по написанию скрипта. Я в скриптинге шарю маловато (изучил весь хелп SB), при попытке создать что-либо, сплошные вылеты в игре.
{$VERSION 3.1.0027}
{$CLEO .cs}
//-------------MAIN---------------
0000: NOP
:NONAME_2
wait 0
if and
Player.Defined($PLAYER_ACTOR)
0AB0: key_pressed 6
0AB0: key_pressed 11
else_jump @NONAME_2
wait 1000
Actor.Health($PLAYER_ACTOR) = 100
Actor.Armour($PLAYER_ACTOR) = 100
0109: player $PLAYER_CHAR money -= 10000
end_threadПо идее (по идее), должно восстанавливать здоровье и броню игроку, который нажал прицел + Y (у игрока также отнимется $10000). Только не пашет =\