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

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,468
Как узнать сколько параметров в строке?

0AD4: 0@ = scan_string 1format "%i %i %i %i %i " | Не работает так как нельзя сканировать стринг на стринг.

P.S. Ответы на прошлын вопросы нашёл.
Тебе именно 0AD4 нужно использовать или функцию по адресу 0x8220AD(sscanf)?
 

AWRage

Активный
642
141
Как удалить часть строки? Например в строке есть два ненужных пробела. Как их убрать?
 

woksonal

Известный
Проверенный
268
154
помогите плз с sscanf. на че память надо выделять?
CLEO:
{$CLEO}
{$CLEO}
{$INCLUDE SF}


while not SAMP.Available()
    wait 400
end

0b34: samp register_client_command "cnick" to_label @CHANGE

0BDE: pause_thread 0



:CHANGE
0B35: samp 0@ = get_last_command_params
call 0x8220AD num_params 4 pop 4 params 2@v 1@ "%s %d" 0@
0C17: 3@ = strlen 1@
0AB1: call_scm_func @RPC_SETNICK 4 1@ 2@ 3@ 1
0B43: samp cmd_ret

:RPC_SETNICK
0B3D: raknet 15@ = new_bit_stream
0B40: raknet bit_stream 15@ write 1@ type BS_TYPE_INT size 2
0B40: raknet bit_stream 15@ write 0@ type BS_TYPE_ARRAY size 2@
0B40: raknet bit_stream 15@ write 3@ type BS_TYPE_BYTE size 1
0BF6: raknet emul_rpc_receive RPC_ScrSetPlayerName bit_stream 15@
0B3E: raknet delete_bit_stream 15@
0AB2: ret 0
 

Evgeniy13

Новичок
40
1
Всем привет. В общем у меня есть 1 скрипт, я долго думал почему после 15-20 минут он крашит и вот наконец нашел. Вот сам код:
Код:
{$CLEO .cs}
{$INCLUDE SF}
0000:

repeat
wait 300
until 0AFA:  is_samp_available


//:test
alloc 5@ 256
alloc 1@ 256
alloc 0@ 128

0B34: samp register_client_command "bot" to_label @test

while true
wait 100
if 9@ == true
then

0B75: samp get_chat_string 99 text_to 5@ prefix_to 6@ color_to 7@ prefix_color_to 8@
0C28: strlwr in 5@ out 1@ //переводим нашу строку в нижний регистр
if 0C18: 2@ = strstr string1 1@ string2 "привет" //ищем подстроку в строке 1@
then
0AF8: samp add_message_to_chat "Условие выполнилось" color 0xff0000
//---Выделяем строку заключенную между [ ] из строки-----
0C2D: strrev in 5@ out 1@
0C16: 2@ = strtok string1 1@ string2 "["
0C2D: strrev in 2@ out 1@
0C16: 2@ = strtok string1 1@ string2 "]"
//---Выделяем строку заключенную между [ ] из строки-----  
wait 3000
0AD3: 0@ = format "/sms %s привет" 2@
0AF9: samp say_msg 0@
end

end
end
 :test
if 9@ == false
then
  9@ = true
  0AF8: samp add_message_to_chat color "Бот активирован" 0xff0000
else
  9@ = false
  0AF8: samp add_message_to_chat color "Бот деактивирован" 0xff0000
end
SAMP.CmdRet()

Но ошибка именно в этой части:
Код:
0C2D: strrev in 5@ out 1@
0C16: 2@ = strtok string1 1@ string2 "["
0C2D: strrev in 2@ out 1@
0C16: 2@ = strtok string1 1@ string2 "]"
Не подскажите как можно заменить эту часть кода, чтобы смысл был тот же или понять в чем ошибка тут...
 

hnnssy

Известный
Друг
2,684
2,760
помогите плз с sscanf. на че память надо выделять?
CLEO:
{$CLEO}
{$CLEO}
{$INCLUDE SF}


while not SAMP.Available()
    wait 400
end

0b34: samp register_client_command "cnick" to_label @CHANGE

0BDE: pause_thread 0



:CHANGE
0B35: samp 0@ = get_last_command_params
call 0x8220AD num_params 4 pop 4 params 2@v 1@ "%s %d" 0@
0C17: 3@ = strlen 1@
0AB1: call_scm_func @RPC_SETNICK 4 1@ 2@ 3@ 1
0B43: samp cmd_ret

:RPC_SETNICK
0B3D: raknet 15@ = new_bit_stream
0B40: raknet bit_stream 15@ write 1@ type BS_TYPE_INT size 2
0B40: raknet bit_stream 15@ write 0@ type BS_TYPE_ARRAY size 2@
0B40: raknet bit_stream 15@ write 3@ type BS_TYPE_BYTE size 1
0BF6: raknet emul_rpc_receive RPC_ScrSetPlayerName bit_stream 15@
0B3E: raknet delete_bit_stream 15@
0AB2: ret 0
Под ник, то есть 1@.
 

AWRage

Активный
642
141
Как можно заменить такую конструкцию на более компактную?
Пробовал через массив, но не получилось.
CLEO:
if or
0C18: 0 = strstr string1 10@ string2 "Привет"
0C18: 0 = strstr string1 10@ string2 "qq"
0C18: 0 = strstr string1 10@ string2 "йй"
0C18: 0 = strstr string1 10@ string2 "Здравствуйте"
0C18: 0 = strstr string1 10@ string2 "Доброе утро"
0C18: 0 = strstr string1 10@ string2 "Добрый вечер"
0C18: 0 = strstr string1 10@ string2 "Доброй ночи"
0C18: 0 = strstr string1 10@ string2 "Доброго дня"
then
    0AF8: "Доброго времени суток!" color -1
end

if or
0C18: 0 = strstr string1 10@ string2 "Ку"
0C18: 0 = strstr string1 10@ string2 "Ку-ку"
0C18: 0 = strstr string1 10@ string2 "Hello"
0C18: 0 = strstr string1 10@ string2 "Hi"
0C18: 0 = strstr string1 10@ string2 "Здрасте"
0C18: 0 = strstr string1 10@ string2 "Драсте"
0C18: 0 = strstr string1 10@ string2 "Ола"
0C18: 0 = strstr string1 10@ string2 "Хола"
then
    0AF8: "Доброго времени суток!" color -1
end
 
  • Нравится
Реакции: Mustang228

Dark_Knight

Me, me and me.
Друг
4,078
2,094
Как можно заменить такую конструкцию на более компактную?
Пробовал через массив, но не получилось.
CLEO:
if or
0C18: 0 = strstr string1 10@ string2 "Привет"
0C18: 0 = strstr string1 10@ string2 "qq"
0C18: 0 = strstr string1 10@ string2 "йй"
0C18: 0 = strstr string1 10@ string2 "Здравствуйте"
0C18: 0 = strstr string1 10@ string2 "Доброе утро"
0C18: 0 = strstr string1 10@ string2 "Добрый вечер"
0C18: 0 = strstr string1 10@ string2 "Доброй ночи"
0C18: 0 = strstr string1 10@ string2 "Доброго дня"
then
    0AF8: "Доброго времени суток!" color -1
end

if or
0C18: 0 = strstr string1 10@ string2 "Ку"
0C18: 0 = strstr string1 10@ string2 "Ку-ку"
0C18: 0 = strstr string1 10@ string2 "Hello"
0C18: 0 = strstr string1 10@ string2 "Hi"
0C18: 0 = strstr string1 10@ string2 "Здрасте"
0C18: 0 = strstr string1 10@ string2 "Драсте"
0C18: 0 = strstr string1 10@ string2 "Ола"
0C18: 0 = strstr string1 10@ string2 "Хола"
then
    0AF8: "Доброго времени суток!" color -1
end
Стринговый массив и цикл фор с принудительной остановкой.
 
  • Нравится
Реакции: AWRage