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

Woofing Giraffe

Активный
402
49
Как правильно работать с функцией strtok?
Например мне надо разделить строку на лексемы по разделителю "/"
B35: samp 1@ = get_last_command_params
0C16: 2@ = strtok string1 1@ string2 "/"
После этого в 2@ записывается первая лексема, но мне нужно продолжить поиск лексем в строке @1.
 

0pc0d3R

Потрачен
550
269
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
При выводе сообщения в чат, начинает все лагать, а и да , выводит ток первые 2 строки, остальные 2 не выводит. Что не так в коде?

Код:
{$CLEO .cs}
{$INCLUDE SF}
0000:

const
EVENT_BUTTON_CLICKED  = 257
EVENT_EDITBOX_CHANGE  = 1538
end

repeat
wait 150
until 0afa:
0B34: samp register_client_command "fstats" to_label @fake
alloc 12@ 128
alloc 13@ 128
alloc 14@ 128
alloc 15@ 128
alloc 16@ 128
alloc 17@ 128
alloc 18@ 128
alloc 19@ 128
alloc 20@ 128
alloc 21@ 128
alloc 22@ 128
alloc 23@ 128
alloc 24@ 128
alloc 25@ 128
alloc 26@ 128
alloc 27@ 128
alloc 28@ 128
alloc 29@ 128
alloc 30@ 128
alloc 31@ 128
alloc 32@ 128
alloc 11@ 1200
while true
wait 0
if 22@ == 1
then
0ab1: call @DialogMove 2 dialogID 0@ keyMoveID 2
0B8D: samp set_cursor_mode 2
if 0B81: dialog 0@ pop_event_to 1@ control_id_to 2@
then
  //0
  if 1@ == EVENT_BUTTON_CLICKED
  then
  if 2@ == 1
  then
  chatmsg "Ник: %s | Уровень: %s | Exp: %s | Деньги: %s | Варнов: %s" color 0xFF0000 12@ 13@ 14@ 15@ 16@
  chatmsg "Закон: %s | Преступ: %s | Арест: %s | Смертей: %s | Розыск: %s" color 0xFF0000 17@ 18@ 19@ 20@ 21@
  chatmsg "Дата регистр: %s | Завис: %s | Наркот: %s | Маты: %s | Рыба: %s" color 0xFF0000 22@ 23@ 24@ 25@ 26@
  chatmsg "Орг: %s | Ранг: %s | Работа: %s | Статус: %s | Жена муж: %s | Пол: %s" color 0xFF0000 27@ 28@ 29@ 30@ 31@ 32@
  0B86: dialog 0@ set_visible 0
  0B8D: samp set_cursor_mode 0
  end
  end

  // 1
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 25
  then
  0B89: dialog 0@ get_control 25 text_to 12@
  end
  end

  //2
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 2
  then
  0B89: dialog 0@ get_control 2 text_to 13@
  end
  end

  //3
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 3
  then
  0B89: dialog 0@ get_control 3 text_to 14@
  end
  end

  //4
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 26
  then
  0B89: dialog 0@ get_control 26 text_to 15@
  end
  end

  //5
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 27
  then
  0B89: dialog 0@ get_control 27 text_to 16@
  end
  end

  //6
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 28
  then
  0B89: dialog 0@ get_control 28 text_to 17@
  end
  end
  //7
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 29
  then
  0B89: dialog 0@ get_control 29 text_to 18@
  end
  end

  //8
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 30
  then
  0B89: dialog 0@ get_control 30 text_to 19@
  end
  end

  //9
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 31
  then
  0B89: dialog 0@ get_control 31 text_to 20@
  end
  end

  // 10
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 32
  then
  0B89: dialog 0@ get_control 32 text_to 21@
  end
  end

  //11
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 33
  then
  0B89: dialog 0@ get_control 33 text_to 22@
  end
  end

  //12
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 34
  then
  0B89: dialog 0@ get_control 34 text_to 23@
  end
  end

  //13
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 35
  then
  0B89: dialog 0@ get_control 35 text_to 24@
  end
  end

  //14
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 5
  then
  0B89: dialog 0@ get_control 5 text_to 25@
  end
  end

  //15
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 6
  then
  0B89: dialog 0@ get_control 6 text_to 26@
  end
  end

  //16
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 7
  then
  0B89: dialog 0@ get_control 7 text_to 27@
  end
  end

  //17
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 8
  then
  0B89: dialog 0@ get_control 8 text_to 28@
  end
  end

  //18
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 9
  then
  0B89: dialog 0@ get_control 9 text_to 29@
  end
  end

  //19
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 10
  then
  0B89: dialog 0@ get_control 10 text_to 30@
  end
  end

  //20
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 11
  then
  0B89: dialog 0@ get_control 11 text_to 31@
  end
  end

  //21
  if 1@ == EVENT_EDITBOX_CHANGE
  then
  if 2@ == 12
  then
  0B89: dialog 0@ get_control 12 text_to 32@
  end
  end

end
end
end

:fake
0B80: dialog 0@ = create "Настройки"
0B84: dialog 0@ set_pos_XY 300 50 size 400 700
0B91: dialog 0@ add_static id 4 text "Ник" pos_XY 2 10 size 100 20
0B91: dialog 0@ add_static id 4 text "Уровень" pos_XY 2 40 size 100 20
0B91: dialog 0@ add_static id 4 text "Exp" pos_XY 2 70 size 100 20
0B91: dialog 0@ add_static id 4 text "Деньги" pos_XY 2 100 size 100 20
0B91: dialog 0@ add_static id 4 text "Варнов" pos_XY 2 130 size 100 20
0B91: dialog 0@ add_static id 4 text "Законопослушность" pos_XY 2 160 size 150 20
0B91: dialog 0@ add_static id 4 text "Преступлений" pos_XY 2 190 size 150 20
0B91: dialog 0@ add_static id 4 text "Арестов" pos_XY 2 220 size 150 20
0B91: dialog 0@ add_static id 4 text "Смертей в розыске" pos_XY 2 250 size 150 20
0B91: dialog 0@ add_static id 4 text "Уровень розыска" pos_XY 2 280 size 150 20
0B91: dialog 0@ add_static id 4 text "Дата регистрации" pos_XY 2 310 size 150 20
0B91: dialog 0@ add_static id 4 text "Зависимость" pos_XY 2 340 size 150 20
0B91: dialog 0@ add_static id 4 text "Наркотики" pos_XY 2 370 size 150 20
0B91: dialog 0@ add_static id 4 text "Материалы" pos_XY 2 400 size 150 20
0B91: dialog 0@ add_static id 4 text "Рыб поймано" pos_XY 2 430 size 150 20
0B91: dialog 0@ add_static id 4 text "Организация" pos_XY 2 460 size 150 20
0B91: dialog 0@ add_static id 4 text "Ранг" pos_XY 2 490 size 150 20
0B91: dialog 0@ add_static id 4 text "Работа" pos_XY 2 520 size 150 20
0B91: dialog 0@ add_static id 4 text "Статус" pos_XY 2 550 size 150 20
0B91: dialog 0@ add_static id 4 text "Жена/Муж" pos_XY 2 580 size 150 20
0B91: dialog 0@ add_static id 4 text "Пол" pos_XY 2 610 size 150 20
0B88: dialog 0@ add_editbox id 25 text "" pos_XY 50 0 size 200 35
0B82: dialog 0@ add_button id 1 text "Далее" pos_XY 150 650 size 100 30
0B88: dialog 0@ add_editbox id 2 text "" pos_XY 70 35 size 50 33
0B88: dialog 0@ add_editbox id 3 text "" pos_XY 70 65 size 100 33
0B88: dialog 0@ add_editbox id 26 text "" pos_XY 70 95 size 100 33
0B88: dialog 0@ add_editbox id 27 text "" pos_XY 70 125 size 50 33
0B88: dialog 0@ add_editbox id 28 text "" pos_XY 160 155 size 50 33
0B88: dialog 0@ add_editbox id 29 text "" pos_XY 160 185 size 50 33
0B88: dialog 0@ add_editbox id 30 text "" pos_XY 160 215 size 50 33
0B88: dialog 0@ add_editbox id 31 text "" pos_XY 160 245 size 50 33
0B88: dialog 0@ add_editbox id 32 text "" pos_XY 160 275 size 50 33
0B88: dialog 0@ add_editbox id 33 text "" pos_XY 160 305 size 150 33
0B88: dialog 0@ add_editbox id 34 text "" pos_XY 160 335 size 150 33
0B88: dialog 0@ add_editbox id 35 text "" pos_XY 160 365 size 150 33
0B88: dialog 0@ add_editbox id 5 text "" pos_XY 160 395 size 150 33
0B88: dialog 0@ add_editbox id 6 text "" pos_XY 160 425 size 150 33
0B88: dialog 0@ add_editbox id 7 text "" pos_XY 160 455 size 150 33
0B88: dialog 0@ add_editbox id 8 text "" pos_XY 160 485 size 150 33
0B88: dialog 0@ add_editbox id 9 text "" pos_XY 160 515 size 200 33
0B88: dialog 0@ add_editbox id 10 text "" pos_XY 160 545 size 150 33
0B88: dialog 0@ add_editbox id 11 text "" pos_XY 160 575 size 200 35
0B88: dialog 0@ add_editbox id 12 text "" pos_XY 160 610 size 150 33
22@ = 1
SAMP.CmdRet()

:DialogMove
0085: 9@ = 1@
0B85: dialog 0@ get_position_to 1@ 2@ size_to 3@ 4@
if 0ab1: call @TaskDialog 4 1@ 2@ 3@ 9@ ret_offset 7@ 8@
  then
  repeat
  wait 0
  0B5E: get_cursor_pos 5@ 6@
  0062: 5@ -= 7@
  0062: 6@ -= 8@
  0B84: dialog 0@ set_pos_XY 5@ 6@ size 3@ 4@
  until 8ab0: 9@
  0BA1: dialog 0@ set_minimized 0
  end
ret 0
:TaskDialog
0085: 6@ = 3@
0085: 4@ = 0@
0085: 5@ = 1@
005A: 4@ += 2@
5@ += 15
0B5E: get_cursor_pos 2@ 3@
if and
0ab0: 6@
002D: 2@ >= 0@
801D: 2@ <= 4@
002D: 3@ >= 1@
801D: 3@ <= 5@
  then
  0485:  return_true
  0062: 2@ -= 0@
  0062: 3@ -= 1@
  else
  059A:  return_false
  2@ = -1
  3@ = -1
  end
ret 2 2@ 3@
конешно лагать будет как ты на каждый стрин по 128 ячеек выделяешь и таких у тебя дохуя, а память ты не освобождаешь то! где free?
 

Unknown13

Новичок
19
0
Как можно сделать постоянную проверку в чате какого-нибудь словосочетания?
И можно ли потом создать стринг со значением равным слову, которое стоит после этого словосочетания?

Например в чате строка: Ааа Ббб Вв_вв
И когда этот скрипт находит в строке " Ааа Ббб "
То он пишет в чат " Какие-то_слова Вв_вв "
 
Последнее редактирование:

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Как правильно работать с функцией strtok?
Например мне надо разделить строку на лексемы по разделителю "/"
B35: samp 1@ = get_last_command_params
0C16: 2@ = strtok string1 1@ string2 "/"
После этого в 2@ записывается первая лексема, но мне нужно продолжить поиск лексем в строке @1.
Код:
0C16: 2@ = strtok string1 1@ string2 "/"
while 2@ <> 0
   wait 0
   if <>
   then
      <>
   end
   0C16: 2@ = strtok string1 0 string2 "/"
end
 

Unknown13

Новичок
19
0
Как сделать, чтобы когда я добавил команду, чтобы скрипт считывал еще число после команды в игре
например команда /qq
И когда введу /qq 10
то к какой-нибудь переменной присваивается значение 10?
 

Woofing Giraffe

Активный
402
49
Как сделать, чтобы когда я добавил команду, чтобы скрипт считывал еще число после команды в игре
например команда /qq
И когда введу /qq 10
то к какой-нибудь переменной присваивается значение 10?
Код:
{$CLEO}
0000:

:1
wait 0
    SAMP.Available()
jf @1
0B34: "cmd" @cmd

while true
wait 0
end

:cmd
SAMP.IsCommandTyped(0@)
0AD4: 1@ = scan_string 0@ format "%d" 2@
cmdret
2@ - число после команды.
 

Unknown13

Новичок
19
0
Код:
{$CLEO}
0000:

:1
wait 0
    SAMP.Available()
jf @1
0B34: "cmd" @cmd

while true
wait 0
end

:cmd
SAMP.IsCommandTyped(0@)
0AD4: 1@ = scan_string 0@ format "%d" 2@
cmdret
2@ - число после команды.
Можешь объяснить? я не понимаю как это использовать в скрипте, скрипт с возможностью включить/выключить скрипт
 

Vadim.dll

Известный
168
80
Помогите ребят, мне надо, чтобы цикл заполнял кординаты не один раз, чтобы в ини было не такое
Код:
x-c=1804.06
y-c=-1914.88
z-c=13.3951
А вот такое
Код:
x-c=1804.06
y-c=-1914.88
z-c=13.3951
x-c=1804.06
y-c=-1914.88
z-c=13.3951
x-c=1804.06
y-c=-1914.88
z-c=13.3951
x-c=1804.06
y-c=-1914.88
z-c=13.3951
x-c=1804.06
y-c=-1914.88
z-c=13.3951
Чтобы кординаты постоянно записывались по новом, но не знаю как сделать это, ведь оно не поддерживает форматирование
Код:
Actor.StorePos($Player_Actor, 2@, 3@, 4@)
0AF3: write_float 2@ to_ini_file "cleo\botg.ini" section "MAIN" key "x-c"  
0AF3: write_float 3@ to_ini_file "cleo\botg.ini" section "MAIN" key "y-c"
0AF3: write_float 4@ to_ini_file "cleo\botg.ini" section "MAIN" key "z-c"
 

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,957
юзай этот опкод
0AD9: write_formatted_text "CLEO version: %d.%d.%d.%d" in_file $hFile 4 0 0 1
 

Woofing Giraffe

Активный
402
49
Код:
2@ += 1
format 3@ = "\"%d"" 2@
0AF5: write_string 2@ to_ini_file "cleo\kek.ini" section "kek" key 3@
Почему не работает и как реализовать по другому?