Вопросы по CLEO-скриптингу

Wa3riX

Новичок
53
0
Код который я тебе предоставил полностью рабочий, ты прсто не понимаешь что делаешь, клео скриптинг это не ctrl+C - Ctrl+V
Подймай что необходимо сделать.

Что мне непонятного:
1. Что такое while true и как пользоватся?
2. Зачем так много end ???
3.
Actor.StorePos(2@, 3@, 4@, 5@)
Actor.StorePos($PLAYER_ACTOR, 6@, 7@, 8@)
ЗАААЧЕМ!?!?
4.
2@ = SAMP.GetActorHandleByPlayerID(1@)
ЗаЧЕМ МНЕ хендл?

5. Где ты берешь не обьявленные метки!?
 

SeJIya

Новичок
45
2
Что мне непонятного:
1. Что такое while true и как пользоватся?
Бесконечный цикл "пока" - подробности Sanny Builder 3 -> Справка -> Помощь -> Коддинг -> Циклы
Что мне непонятного:
2. Зачем так много end ???
В конце каждого цикла, условия необходим оперетор завершения - end
Что мне непонятного:
4.
ЗаЧЕМ МНЕ хендл?
По хендлу находится игрок и сохраняются его координаты XYZ в переменные 3@, 4@, 5@
а происходит это с помощью
Код:
Actor.StorePos(2@, 3@, 4@, 5@)
так же сохраняются твои координаты
Код:
Actor.StorePos($PLAYER_ACTOR, 6@, 7@, 8@)
5. Где ты берешь не обьявленные метки!?
ЧТО ?
 

Wa3riX

Новичок
53
0
Бесконечный цикл "пока" - подробности Sanny Builder 3 -> Справка -> Помощь -> Коддинг -> Циклы

В конце каждого цикла, условия необходим оперетор завершения - end

По хендлу находится игрок и сохраняются его координаты XYZ в переменные 3@, 4@, 5@
а происходит это с помощью
Код:
Actor.StorePos(2@, 3@, 4@, 5@)
так же сохраняются твои координаты
Код:
Actor.StorePos($PLAYER_ACTOR, 6@, 7@, 8@)

ЧТО ?

Ну тогда просто скажи, как записать ид игрока в радиусе 10м в переменную?
Чтоб если новый игрок приближался, то его ид перезаписывался в ту же переменную
 

Dark_Knight

Me, me and me.
Друг
4,083
2,110
Метки в основном используют для вызова функций(0ab1: call @label) или принудительных переходов(gosub @label)
Код:
var
5@ : int
0@ : int
end
for 0@ = 0 to 999
    1@ = SAMP.GetActorHandleByPlayerID(0@)
    if 056D: actor 1@ defined
    then
        Actor.StorePos(1@, 2@, 3@, 4@)
        Actor.StorePos($PLAYER_ACTOR, 5@, 6@, 7@)
        050A: 9@ = distance_between_XYZ 6@ 7@ 8@ and_XYZ 3@ 4@ 5@
        if 9@ <= 10.0
        then
        5@ = 0@
        end
    end
end
 

Wa3riX

Новичок
53
0
Бесконечный цикл "пока" - подробности Sanny Builder 3 -> Справка -> Помощь -> Коддинг -> Циклы

В конце каждого цикла, условия необходим оперетор завершения - end

По хендлу находится игрок и сохраняются его координаты XYZ в переменные 3@, 4@, 5@
а происходит это с помощью
Код:
Actor.StorePos(2@, 3@, 4@, 5@)
так же сохраняются твои координаты
Код:
Actor.StorePos($PLAYER_ACTOR, 6@, 7@, 8@)

ЧТО ?

Зачем мне сохранять мои координаты, и его??????????
 

Wa3riX

Новичок
53
0
Метки в основном используют для вызова функций(0ab1: call @label) или принудительных переходов(gosub @label)
Код:
var
5@ : int
0@ : int
end
for 0@ = 0 to 999
    1@ = SAMP.GetActorHandleByPlayerID(0@)
    if 056D: actor 1@ defined
    then
        Actor.StorePos(1@, 2@, 3@, 4@)
        Actor.StorePos($PLAYER_ACTOR, 5@, 6@, 7@)
        050A: 9@ = distance_between_XYZ 6@ 7@ 8@ and_XYZ 3@ 4@ 5@
        if 9@ <= 10.0
        then
        5@ = 0@
        end
    end
end

Не помогло ;(. Теперь крашит при загрузке сампа, даже антикрашер не помогает
 

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,262
1,754
функ. гонщика не робит, можешь скомпилировать проверить, пишет "не найдено"
Код:
{$CLEO}
0000: NOP
alloc 0@ 128
alloc 1@ 128
 
:n_1
wait 1000
 
:n_2
wait 0
if
0ab0: 53
jf @n_2
wait 100
06D2: 0@v = "kto ne skachet tot moskal" // @v = string
0AD3: 0@ = format "%s" 0@v
wait 100
06D2: 1@v = "skachet" // @v = string
0AD3: 1@ = format "%s" 1@v
if
call @search_text_in_the_text 2 0@ 1@ // 0@ - текст, 1@ - слово
jf @n_3
0AF8: samp add_message_to_chat "найдено" 0xBA0FFF
wait 500
jump @n_2
 
:n_3
wait 0
0AF8: samp add_message_to_chat "не найдено" 0xBA0FFF
wait 500
jump @n_2
 
:search_text_in_the_text
var
    2@:int
    3@:int
    4@:int
    5@:int
    7@:int
    8@:int
end
7@ = 0
0C17: 4@ = strlen 0@
0C17: 8@ = strlen 1@
if or
8@ > 4@
8@ <= 0
then
    059A: return_false
    ret 0
end
0AC8: 6@ = 1024
0C11: memset destination 6@ value 0 size 1024
0C10: memcpy destination 6@ source 1@ size 8@
for 5@ = 0 to 4@
0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0
0A8D: 3@ = read_memory 1@ size 1 virtual_protect 0
    if 2@ == 3@
    then
        inc(1@)
        inc(7@)
    else
        7@ = 0
        0C10: memcpy destination 1@ source 6@ size 8@
    end
    if 7@ == 8@
    then
        0485: return_true
        ret 0
    end
inc(0@)
end
059A: return_false
0AC9: 6@
ret 0

а с диалогом, твой скрипт скомпилировал - не работает, попробовал свой переделать, и вот что узнал. "проверка 1" в чат пишется, а проверка 2 нихуя. т.е. никак не работает этот опкод. если без первого пункта еще обойдусь, то текст из диалога пиздец как нужен для создания моего мегаскрипта. помогите кто может.
Код:
{$CLEO .cs}
0000: NOP
alloc 4@ 128
 
:n_1
wait 1000
0B4E: samp 1@ = get_current_dialog_id
if
1@ == 24 // диалог репорта на самп-рп
jf @n_1
0AF8: samp add_message_to_chat "проверка 1" 0xBA0FFF //это пишет
 
:n_3
wait 0
if
0B3C:  samp is_dialog_responded id 24 button 2@ list_item 3@ input_text 4@
jf @n_3
0AF8: samp add_message_to_chat "проверка 2" 0xBA0FFF // до этой строки не доходит скрипт
if
2@ == 1
jf @n_1
0AF8: samp add_message_to_chat "dialog closed %s" 0xBA0FFF 4@
0A93: end_custom_thread
функция прекрасно работает, научись нормально текст записывать,без всяких 0@v

я тебе объясню, почему у тебя нихуя не работает, ты выделил иамять в 0@, 1@, в них записались адреса на выделенную часть памяти, и ты сразу же их стираешь своей записью текста, адреса теряются и в итоге в переменной хуета творится

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

Wa3riX

Новичок
53
0

Вот версия SeJlya :
Код:
{$CLEO .cs}
 
//-------------MAIN---------------
0000:
 
while true
wait 0
    for 1@ = 0 to 999
        2@ = SAMP.GetActorHandleByPlayerID(1@)
        if 056D: actor 2@ defined
        then
            Actor.StorePos(2@, 3@, 4@, 5@)
            Actor.StorePos($PLAYER_ACTOR, 6@, 7@, 8@)
            050A: 9@ = distance_between_XYZ 6@ 7@ 8@ and_XYZ 3@ 4@ 5@
            10@ = 10.0
            if 0035: 10@ >= 9@
            then
                0AF9: samp say_msg "/sellpizza %d 999" 1@
            end
        end
    end
end
Вот твоя версия :


Код:
{$CLEO .cs}
 
//-------------MAIN---------------
0000:
var
5@ : int
0@ : int
end
for 0@ = 0 to 999
1@ = SAMP.GetActorHandleByPlayerID(0@)
if 056D: actor 1@ defined
then
Actor.StorePos(1@, 2@, 3@, 4@)
Actor.StorePos($PLAYER_ACTOR, 5@, 6@, 7@)
050A: 9@ = distance_between_XYZ 6@ 7@ 8@ and_XYZ 3@ 4@ 5@
if 9@ <= 10.0
then
5@ = 0@
end
end
end
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Тебе походу вообще похрен, что просто берешь и вставляешь код. На:
Код:
{$CLEO}
 
wait 0
 
while not SAMP.Available()
    wait 400
end
 
while true
    wait 0
    0A8D: 29@ = read_memory 0xB74490 size 4 virtual_protect 0
    000A: 29@ += 0x4
    0A8D: 29@ = read_memory 29@ size 4 virtual_protect 0
    for 30@ = 0 to 35584 step 0x100
        0A8D: 31@ = read_memory 29@ size 1 virtual_protect 0
        000A: 29@ += 0x1
        if and
            0029: 31@ >= 0x00
            001B: 0x80 > 31@
        then
            005A: 31@ += 30@
            if 056D: actor 31@ defined
            then
                if 0ab1: call @checkDistBetweenPlayers 3 players $PLAYER_ACTOR 31@ max_dist 10.0
                then
                    0@ = SAMP.GetSAMPPlayerIDByActorHandle(31@)
                    0af9: say "/sellpizza %d 999" 0@
                end
            end
        end
    end
end
 
:checkDistBetweenPlayers                                     
// call @checkDistBetweenPlayers 3 players 0@ 1@ max_dist 2@
var
    2@ : float
    9@ : float
end
Actor.StorePos(0@, 3@, 4@, 5@)
Actor.StorePos(1@, 6@, 7@, 8@)
0509: 9@ = distance_between_XY 3@ 4@ and_XY 6@ 7@
if 9@ <= 2@
then 0ab2: ret 0 1
end
0ab2: ret 0
 
  • Нравится
Реакции: SeJIya

Wa3riX

Новичок
53
0
Тебе походу вообще похрен, что просто берешь и вставляешь код. На:
Код:
{$CLEO}
 
wait 0
 
while not SAMP.Available()
    wait 400
end
 
while true
    wait 0
    0A8D: 29@ = read_memory 0xB74490 size 4 virtual_protect 0
    000A: 29@ += 0x4
    0A8D: 29@ = read_memory 29@ size 4 virtual_protect 0
    for 30@ = 0 to 35584 step 0x100
        0A8D: 31@ = read_memory 29@ size 1 virtual_protect 0
        000A: 29@ += 0x1
        if and
            0029: 31@ >= 0x00
            001B: 0x80 > 31@
        then
            005A: 31@ += 30@
            if 056D: actor 31@ defined
            then
                if 0ab1: call @checkDistBetweenPlayers 3 players $PLAYER_ACTOR 31@ max_dist 10.0
                then
                    0@ = SAMP.GetSAMPPlayerIDByActorHandle(31@)
                    0af9: say "/sellpizza %d 999" 0@
                end
            end
        end
    end
end
 
:checkDistBetweenPlayers                                   
// call @checkDistBetweenPlayers 3 players 0@ 1@ max_dist 2@
var
    2@ : float
    9@ : float
end
Actor.StorePos(0@, 3@, 4@, 5@)
Actor.StorePos(1@, 6@, 7@, 8@)
0509: 9@ = distance_between_XY 3@ 4@ and_XY 6@ 7@
if 9@ <= 2@
then 0ab2: ret 0 1
end
0ab2: ret 0

Можно пж с активацией/деактивацией. Не могу зайти на серв, пишет you have banned... Когда удаляю, заходит норм. (Серв калека)
 

Wa3riX

Новичок
53
0
Тебе походу вообще похрен, что просто берешь и вставляешь код. На:
Код:
{$CLEO}
 
wait 0
 
while not SAMP.Available()
    wait 400
end
 
while true
    wait 0
    0A8D: 29@ = read_memory 0xB74490 size 4 virtual_protect 0
    000A: 29@ += 0x4
    0A8D: 29@ = read_memory 29@ size 4 virtual_protect 0
    for 30@ = 0 to 35584 step 0x100
        0A8D: 31@ = read_memory 29@ size 1 virtual_protect 0
        000A: 29@ += 0x1
        if and
            0029: 31@ >= 0x00
            001B: 0x80 > 31@
        then
            005A: 31@ += 30@
            if 056D: actor 31@ defined
            then
                if 0ab1: call @checkDistBetweenPlayers 3 players $PLAYER_ACTOR 31@ max_dist 10.0
                then
                    0@ = SAMP.GetSAMPPlayerIDByActorHandle(31@)
                    0af9: say "/sellpizza %d 999" 0@
                end
            end
        end
    end
end
 
:checkDistBetweenPlayers                                   
// call @checkDistBetweenPlayers 3 players 0@ 1@ max_dist 2@
var
    2@ : float
    9@ : float
end
Actor.StorePos(0@, 3@, 4@, 5@)
Actor.StorePos(1@, 6@, 7@, 8@)
0509: 9@ = distance_between_XY 3@ 4@ and_XY 6@ 7@
if 9@ <= 2@
then 0ab2: ret 0 1
end
0ab2: ret 0

Спс, проста шидевр..:boss:
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Можно пж с активацией/деактивацией. Не могу зайти на серв, пишет you have banned... Когда удаляю, заходит норм. (Серв калека)

Нельзя
Код:
{$CLEO}
 
wait 0
 
while not SAMP.Available()
    wait 400
end
 
while true
    wait 0
    0A8D: 29@ = read_memory 0xB74490 size 4 virtual_protect 0
    000A: 29@ += 0x4
    0A8D: 29@ = read_memory 29@ size 4 virtual_protect 0
    for 30@ = 0 to 35584 step 0x100
        0A8D: 31@ = read_memory 29@ size 1 virtual_protect 0
        000A: 29@ += 0x1
        if and
            0029: 31@ >= 0x00
            001B: 0x80 > 31@
        then
            005A: 31@ += 30@
            if and
                056D: actor 31@ defined
                803C: $PLAYER_ACTOR <> 31@
            then
                if 0ab1: call @checkDistBetweenPlayers 3 players $PLAYER_ACTOR 31@ max_dist 10.0
                then
                    0@ = SAMP.GetSAMPPlayerIDByActorHandle(31@)
                    0af9: say "/sellpizza %d 999" 0@
                end
            end
        end
    end
end
 
:checkDistBetweenPlayers                                   
// call @checkDistBetweenPlayers 3 players 0@ 1@ max_dist 2@
var
    2@ : float
    9@ : float
end
Actor.StorePos(0@, 3@, 4@, 5@)
Actor.StorePos(1@, 6@, 7@, 8@)
0509: 9@ = distance_between_XY 3@ 4@ and_XY 6@ 7@
if 9@ <= 2@
then 0ab2: ret 0 1
end
0ab2: ret 0
 
  • Нравится
Реакции: SR_team