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

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,459
5@ будет заполняться числом, а не указателем("переполнения" не будет, участок из 4 байтов будет просто перезаписываться), а при чтении строки из чата, возможно, выйдет за границы этой переменной и переменные, которые больше 5, будут заполнены половинками текста.

При втором круге 5@, которая содержала до этого указатель на выделенную память, уже заполнена цифрой(не указателем), а при чтении и сканировании - уже не строка, а какое-то 4 байтовое число, оно даже сканироваться не будет.

Насчет "Нельзя будет очистить":
как я писал выше, в 5@ хранится какое-то число, а 0af9 очищает выделенную память. Тебе придется либо восстанавливать в 5@ указатель, либо не поступать так, используя одну переменную и для хранения строки, и для чтения кол-во параметров.

Код:
0ac8 0@
//5@ = указатель на буфер(после 0ac8). К примеру, 5@ = 0xCCFF0010
5@ = scan_string 5@
// 5@ = кол-во прочтенных параметров
free 5@ // очищается просто ничто, 4 байта переменной, которые были выделены для хранения только чисел(указатель = число), либо вообще ничего
Куда противно объяснил, лучше не объясню.
 
Последнее редактирование:
  • Нравится
Реакции: Enjoy

Dikson777

Новичок
45
0
Парни, где есть полноценный учебник по CLEO? Что бы можно было написать самому, своим мозгом CLEO Script для SAMP'a. На Blast Hack'e мало уроков по CLEO, только по сложным темам..
 

san0

Известный
Друг
411
267
Можно ли как то удалить серверный текстдрав?
И хочу научиться рисовать UseBox на экране, прощу помощи и если можно развернутый ответ)
Заранее спасибо!

Код:
0C48: samp textdraw 85 create "usebox" pos 575.0 199.9
0C49: samp textdraw 85 set_box 1 color 0x99000000 size 56.6 55.9
0C4C: samp textdraw 85 set_style 5
0C4F: samp textdraw 85 set_model 1247 rotation 347.0 0.0 40.0 zoom 1.0 veh_color 6 7

sa-mp-021.png
 

Enjoy

Новичок
Проверенный
164
11
Хелпаните короч, хотел попробовать сделать, как Легенд сказал, чтобы не было перезаписей и всякой хуйни.
Ну вот и теперь не хочет вообще ничего делать, не реагирует на строку, в чем дело?
С помощью Легенда решить проблему пока что не удалось(((

Код:
while true
wait 0
    
       alloc 2@ 64
       0B75: samp get_chat_string 98 text_to 2@ prefix_to 3@ color_to 4@ prefix_color_to 5@
       0AD4: 1@ = scan_string 2@ format "(( Здоровье пополнено до: %d ))" 6@
       free 2@
       if 1@ > 0
       then
              0AF8: samp add_message_to_chat "text" color -1
       end
end
 

Piratekapitan

Известный
59
17
Хелпаните короч, хотел попробовать сделать, как Легенд сказал, чтобы не было перезаписей и всякой хуйни.
Ну вот и теперь не хочет вообще ничего делать, не реагирует на строку, в чем дело?
С помощью Легенда решить проблему пока что не удалось(((

Код:
while true
wait 0
   
       alloc 2@ 64
       0B75: samp get_chat_string 98 text_to 2@ prefix_to 3@ color_to 4@ prefix_color_to 5@
       0AD4: 1@ = scan_string 2@ format "(( Здоровье пополнено до: %d ))" 6@
       free 2@
       if 1@ > 0
       then
              0AF8: samp add_message_to_chat "text" color -1
       end
end
А что он тут перезаписывает? Там необходимо по идей это. Ведь он считает один раз и удалит. И снова начинает искать, а потом записывает в освободившуюся ячейку.
 

Enjoy

Новичок
Проверенный
164
11
И как быть тогда?
Переменную указателя поменять, я думаю.
Код:
if 0AD4: 23@ = scan_string 5@ format "Отправил %s" 12@

И вообще, что ты хотел добиться, сделав этот цикл?
Он же у тебя будет бесконечный.
Код:
while 11@ > 94
// 
end
 

Dikson777

Новичок
45
0
Skywalker, если я правильно понял, для чего тебе скрипт, то..
• Есть немного другой алгоритм:

1) Записываешь в переменную свой текст, к примеру по команде - "/sad Продам кар" текст записывается в переменную.
2) Активируешь скрипт на кнопку F1.
3) Скрипт флудит командой "/ad".
4) Если в чате появится текст "/ad (текст)" (вроде такой текст), то скрипт прописывает команду "/ad Продам кар".
5) Скрипт выключается.

Способ более эффективнее, т.к если скрипт быстро среагирует, то объяву подать успеешь. Почти таким же способом можно написать тащерский скрипт для News.
 
Последнее редактирование модератором:

Enjoy

Новичок
Проверенный
164
11
Не, он для АРП, а ты сейчас для СРП мне описал.
Попробуй так короче, хз будет работать или нет.
(Если я тебя правильно понял)
Там задержку при отправке поставь ещё, чтобы не кикало за флуд.
Код:
{$CLEO .cs}

0000:
Thread "TopScript"

repeat
wait 400
until 0AFA:

alloc 1@ 64
alloc 2@ 28
alloc 5@ 64

0B34: samp register_client_command "topad" to_label @cmd

while true
wait 0

    if 0AAB:  file_exists "CLEO\topad.ini"
    then
        0AF4: 6@ = read_string_from_ini_file "CLEO\topad.ini" section "ini" key "ad"
        0AF4: 7@ = read_string_from_ini_file "CLEO\topad.ini" section "ini" key "nick"
    else
        0AF5: write_string "TEXT" to_ini_file "CLEO\topad.ini" section "ini" key "ad"
        0AF5: write_string "Nick_Name" to_ini_file "CLEO\topad.ini" section "ini" key "nick"
        0AF4: 6@ = read_string_from_ini_file "CLEO\topad.ini" section "ini" key "ad"
        0AF4: 7@ = read_string_from_ini_file "CLEO\topad.ini" section "ini" key "nick"
    end
    if 30@ == 1
    then
        repeat
        0AF9: samp say_msg "/ad %s" 6@
        0B75: samp get_chat_string 99 text_to 1@ prefix_to 2@ color_to 3@ prefix_color_to 4@ 
        0AD3: 5@ = format "Отправил %s" 7@ 
        if 0C18: 8@ = strstr string1 1@ string2 5@
        then
            30@ = 0
        end
        until 30@ == 0
    end   
end 

:cmd
wait 0
0B12: 30@ = 30@ XOR 1
if 30@ == 1
then
    0AF8: samp add_message_to_chat "Edem" color -1
else
    0AF8: samp add_message_to_chat "Stop" color -1
end
Samp.CmdRet()
 

nelebuli

Новичок
3
0
Возможно ли забабахать такое смещени координат. Типа у себя ты стоишь на 1 месте а у других чуть в боку?