#1 30-09-2009 18:41

BritishColonist
Registered: 30-09-2009
Posts: 72

SB in SAMP

Здравствуйте скриптеры! Для начала хотел выразить свою благодарность 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

#2 30-09-2009 18:58

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: SB in SAMP

Во-первых, в клео применяется опкод 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

#3 30-09-2009 19:06

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: SB in SAMP

Мм... Здорово, спасибо.
Заметил вещь, мне абсолютно не понятную.
Что есть $PLAYER_CHAR и $PLAYER_ACTOR и в чем разница между ними?

Offline

#4 30-09-2009 19:19

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: SB in SAMP

Это переменные, обозначающие ГГ (CJ). Какую из этих переменных надо использовать в конкретном случае - зависит от опкода. $PLAYER_ACTOR - используется в опкодах, со словом actor, $PLAYER_CHAR - со словом player.

Offline

#5 30-09-2009 19:28

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: SB in SAMP

Den_spb, а вот код также не пашет, как и мой - 0 эффекта, как в SA, так и в MP.

Offline

#6 30-09-2009 20:32

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: SB in SAMP

вы забыли самое главное - в МП нету $PLAYER_ACTOR
надо перед Actor.Health($PLAYER_ACTOR) = 100
поставить 01F5: $PLAYER_ACTOR = get_player_actor $PLAYER_CHAR

я не спец в МП, но все скрипты под него так пишутся))


GIMS developer

Offline

#7 30-09-2009 21:59

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: SB in SAMP

dragonforce wrote:

Den_spb, а вот код также не пашет, как и мой - 0 эффекта, как в SA, так и в MP.

С МП я не работаю. А в СА код не действовал потому, что были введены ошибочные номера кнопок в опкодах 0AB0. Список номеров кнопок для данного опкода можно взять в СБ справке: КЛЕО 3 - Список значений кнопок (столбик decimal)

Last edited by Den_spb (30-09-2009 22:07)

Offline

#8 01-10-2009 07:18

GTASA
Registered: 13-09-2008
Posts: 476

Re: SB in SAMP

в МП нету $PLAYER_ACTOR

\
Есть. Я пишу скрипты для мультиплеера и точно знаю. Только лишь там не CJ, а какой-нибудь прохожий. И я никгда не пользовался 01F5.

Offline

#9 01-10-2009 09:07

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: SB in SAMP

тогда мне не понятно, зачем некоторые его юзают....................ппц


GIMS developer

Offline

#10 01-10-2009 09:42

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: SB in SAMP

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

#11 01-10-2009 09:49

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: SB in SAMP

этот опкод устарел, и он немного иначе работает.
им нельзя проверить любую кнопку, а только те, что есть в настройках управления.

а 0AB0 позволяет обработать нажатие любой кнопки клавиатуры или мыши


GIMS developer

Offline

#12 01-10-2009 10:36

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: SB in SAMP

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

#13 01-10-2009 11:17

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: SB in SAMP

у меня этот опкод только иногда работал...


GIMS developer

Offline

#14 01-10-2009 12:25

PIT
Registered: 08-09-2008
Posts: 224

Re: SB in SAMP

этот опкод вообще помойму не работает rolleyes кто-то там разбирал, ах да, Листенер, ну и вот там чото про то что опкод ничо не делает, имя ему - NOP smile


100 постов - 27 августа;

Offline

#15 01-10-2009 14:05

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: SB in SAMP

кстати насчёт таймера.
Если мне надо, чтобы работало что-то одно, а потом стало что-то другое через 10 секунд, то можно использовать wait 10000 или есть какой-то более "приспособленный" вариант?

Offline

#16 01-10-2009 14:57

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: SB in SAMP

вайт как раз лучше всего, если нужно просто подождать


GIMS developer

Offline

#17 01-10-2009 17:51

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: SB in SAMP

dragonforce wrote:

кстати насчёт таймера.
Если мне надо, чтобы работало что-то одно, а потом стало что-то другое через 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

#18 02-10-2009 01:12

GTASA
Registered: 13-09-2008
Posts: 476

Re: SB in SAMP

Для чего в САМП защищаться от иммунитетов? Это не МТА. И синхронизация там такая, что если будешь стрелять в голову или в ногу - разницы ноль. В сампе бесполезно.

Offline

#19 02-10-2009 14:55

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: SB in SAMP

Den_spb, "С начала запуска игры"?
Когда игра начинается точно? При появлении игрового мира?

Last edited by dragonforce (02-10-2009 14:56)

Offline

#20 02-10-2009 17:24

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: SB in SAMP

когда твой перс появляется...


GIMS developer

Offline

#21 02-10-2009 17:35

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: SB in SAMP

И в MP тоже?

Offline

#22 02-10-2009 17:54

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: SB in SAMP

никакие скрипты не имеют смысла, пока твой игрок не создан....примени мозг блин)


GIMS developer

Offline

#23 02-10-2009 18:07

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: SB in SAMP

Я понимаю, что не имеют смысла, но таймер мог быть запущен и так. Вот я убедился в этом) Спасибо-спасибо.

Offline

#24 02-10-2009 22:07

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: SB in SAMP

3Doomer wrote:

когда твой перс появляется...

Разве? Вообще-то скрипты включаются в работу еще до создания CJ (неслучайно многие коды начинаются с проверки существования игрока), а вместе с ними должны включаться и таймеры.

Offline

#25 02-10-2009 22:25

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: SB in SAMP

И правда. Вот только вопрос тогда: разве можно сделать что-то не с игроком в мультиплеере?
Хотя программа наверное была изначально предназначена для сингла, и там можно делать тачки, пикапы оружия, ботов...

Так. Видел опкоды типа "убрать текущее оружие", "проверить патроны текущего оружия", а опкод определения ID текущего оружия есть?

Last edited by dragonforce (02-10-2009 22:43)

Offline

Board footer

Powered by FluxBB