You are not logged in.
Здравствуйте скриптеры! Для начала хотел выразить свою благодарность 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). Только не пашет =\
Last edited by dragonforce (30-09-2009 18:41)
Offline
Во-первых, в клео применяется опкод 0A93: вместо end_thread. Но если скрипт зациклен (код выполняется бесконечно), то команда завершения кода не нужна. Во-вторых, проверку существования ГГ всегда пишем отдельно. В-третьих, допускается менять только параметры опкодов (касается 0109, где + был заменен на -).
{$CLEO} wait 0 while true wait 1000 repeat wait 0 until player.Defined($PLAYER_CHAR) while true wait 0 if and 0AB0: key_pressed 8 // "Backspace" 0AB0: key_pressed 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
Если пока непривычны конструкции WHILE..END, IF..THEN..END, то скомпилируй и декомпилируй код - конструкции будут заменены метками. Код переделан из одноразового в бесконечный - функцией можно воспользоваться много раз за игру.
Last edited by Den_spb (30-09-2009 22:06)
Offline
Мм... Здорово, спасибо.
Заметил вещь, мне абсолютно не понятную.
Что есть $PLAYER_CHAR и $PLAYER_ACTOR и в чем разница между ними?
Offline
Offline
Den_spb, а вот код также не пашет, как и мой - 0 эффекта, как в SA, так и в MP.
Offline
вы забыли самое главное - в МП нету $PLAYER_ACTOR
надо перед Actor.Health($PLAYER_ACTOR) = 100
поставить 01F5: $PLAYER_ACTOR = get_player_actor $PLAYER_CHAR
я не спец в МП, но все скрипты под него так пишутся))
GIMS developer
Offline
Den_spb, а вот код также не пашет, как и мой - 0 эффекта, как в SA, так и в MP.
С МП я не работаю. А в СА код не действовал потому, что были введены ошибочные номера кнопок в опкодах 0AB0. Список номеров кнопок для данного опкода можно взять в СБ справке: КЛЕО 3 - Список значений кнопок (столбик decimal)
Last edited by Den_spb (30-09-2009 22:07)
Offline
в МП нету $PLAYER_ACTOR
\
Есть. Я пишу скрипты для мультиплеера и точно знаю. Только лишь там не CJ, а какой-нибудь прохожий. И я никгда не пользовался 01F5.
Offline
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
Last edited by dragonforce (01-10-2009 09:43)
Offline
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 секунд его можно будет убить только в голову из огнестрельного оружия или взорвать.
Я не прошу чистый код, я хочу понять сам, так что пожалуйста давайте как можно больше пояснений.
Offline
этот опкод вообще помойму не работает кто-то там разбирал, ах да, Листенер, ну и вот там чото про то что опкод ничо не делает, имя ему - NOP
100 постов - 27 августа;
Offline
кстати насчёт таймера.
Если мне надо, чтобы работало что-то одно, а потом стало что-то другое через 10 секунд, то можно использовать wait 10000 или есть какой-то более "приспособленный" вариант?
Offline
кстати насчёт таймера.
Если мне надо, чтобы работало что-то одно, а потом стало что-то другое через 10 секунд, то можно использовать wait 10000 или есть какой-то более "приспособленный" вариант?
При использовании wait приостанавливается выполнение всего кода. В тех случаях, когда это не приемлемо, можно использовать таймеры. В одном клео-скрипте можно использовать 2 таймера - это переменные 32@ и 33@. С начала запуска игры, значение, записанное в эти переменные увеличивается с каждой миллисекундой на единицу. Если таймер обнулить, то значение всё равно будет продолжать увеличиваться. Приведу пример: действие 1 выполняется постоянно, действие 2 выполняется через каждые 10 секунд в течение 5 секунд
{$CLEO} wait 0 while true wait 0 // действие 1 if 32@ > 15000 then 32@ = 0 end if 32@ > 10000 then // действие 2 end end
Last edited by Den_spb (01-10-2009 18:06)
Offline
Для чего в САМП защищаться от иммунитетов? Это не МТА. И синхронизация там такая, что если будешь стрелять в голову или в ногу - разницы ноль. В сампе бесполезно.
Offline
Den_spb, "С начала запуска игры"?
Когда игра начинается точно? При появлении игрового мира?
Last edited by dragonforce (02-10-2009 14:56)
Offline
И в MP тоже?
Offline
Я понимаю, что не имеют смысла, но таймер мог быть запущен и так. Вот я убедился в этом) Спасибо-спасибо.
Offline
когда твой перс появляется...
Разве? Вообще-то скрипты включаются в работу еще до создания CJ (неслучайно многие коды начинаются с проверки существования игрока), а вместе с ними должны включаться и таймеры.
Offline
И правда. Вот только вопрос тогда: разве можно сделать что-то не с игроком в мультиплеере?
Хотя программа наверное была изначально предназначена для сингла, и там можно делать тачки, пикапы оружия, ботов...
Так. Видел опкоды типа "убрать текущее оружие", "проверить патроны текущего оружия", а опкод определения ID текущего оружия есть?
Last edited by dragonforce (02-10-2009 22:43)
Offline