Пример можно? Не очень понятно на вики написано.
CLEO:
0B35: samp 0@ = get_last_command_params
chatmsg "Текст: %s" 0@ -1
Пример можно? Не очень понятно на вики написано.
0B35: samp 0@ = get_last_command_params
chatmsg "Текст: %s" 0@ -1
{$CLEO .cs}
0000: NOP
while not Samp.Available()
wait 100
end
0B34: samp register_client_command "text" to_label @text
alloc 0@ = 256
while true
wait 0
if
1@ == 1
then
0B35: samp 0@ = get_last_command_params
chatmsg "Текст: %s" -1 0@
000E: 0@ -= 1
if
0@ == 0
then
1@ = 0
end
end
end
:text
1@ = 1
Samp.CmdRet()
В 0@ указатель а не число, из него нельзя что либо вычитать. Хотя даже если бы там было число, все равно ничего бы не получилось - ты постоянно берешь начальное значение опкодом 0b34.В чём ошибка? При вводе команды /text 5 должно в чат вывестись сообщение:
Текст: 5
Текст: 4
Текст: 3
Текст: 2
Текст: 1
Но заместо этого постоянно флудит Текст: 5. Вот код:
CLEO:{$CLEO .cs} 0000: NOP while not Samp.Available() wait 100 end 0B34: samp register_client_command "text" to_label @text alloc 0@ = 256 while true wait 0 if 1@ == 1 then 0B35: samp 0@ = get_last_command_params chatmsg "Текст: %s" -1 0@ 000E: 0@ -= 1 if 0@ == 0 then 1@ = 0 end end end :text 1@ = 1 Samp.CmdRet()
А можно не указатель сделать?В 0@ указатель а не число
0C1A: 1@ = atoi 0@А можно не указатель сделать?
0B34: samp register_client_command "text" to_label @text
alloc 0@ = 64
alloc 3@ = 256
while true
wait 0
if
1@ == 1
then
0B35: samp 0@ = get_last_command_params
1@ = 0
5@ = 1
end
if
5@ == 1
then
0C1A: 3@ = atoi 0@
chatmsg "Текст: %d" -1 3@
000E: 3@ -= 1
end
if
3@ == 0
then
5@ = 0
end
end
:text
1@ = 1
Samp.CmdRet()
в коде у тебя всё вроде нормально, но я вот думаю, что проблема в преобразовании, что-то с числом происходит, и оно уходит в отрицательное значение. Попробуй вывести значение переменной во время работы скриптаХм... попробовал юзать опкод 0C1A, но в чат всё-равно флудит, значение не отнимается. Более того если прописать /text 0, в чат будет флудить Текст: 0, хотя по идее при нуле он должен останавливаться:
CLEO:0B34: samp register_client_command "text" to_label @text alloc 0@ = 64 alloc 3@ = 256 while true wait 0 if 1@ == 1 then 0B35: samp 0@ = get_last_command_params 1@ = 0 5@ = 1 end if 5@ == 1 then 0C1A: 3@ = atoi 0@ chatmsg "Текст: %d" -1 3@ 000E: 3@ -= 1 end if 3@ == 0 then 5@ = 0 end end :text 1@ = 1 Samp.CmdRet()
Хм.... Вот что я сделал:в коде у тебя всё вроде нормально, но я вот думаю, что проблема в преобразовании, что-то с числом происходит, и оно уходит в отрицательное значение. Попробуй вывести значение переменной во время работы скрипта
alloc 0@ = 256
alloc 3@ = 256
while true
wait 0
if
1@ == 1
then
0B35: samp 0@ = get_last_command_params
chatmsg "Я запомнил число: %d" -1 0@
1@ = 0
5@ = 1
end
if
5@ == 1
then
0C1A: 3@ = atoi 0@
chatmsg "Я преобразовал число в: %d" -1 3@
000E: 3@ -= 1
5@ = 0
end
end
Число воспринимается как есть? Что ты вводил?Хм.... Вот что я сделал:
И вот что получилось при вводе команды /text 5:CLEO:alloc 0@ = 256 alloc 3@ = 256 while true wait 0 if 1@ == 1 then 0B35: samp 0@ = get_last_command_params chatmsg "Я запомнил число: %d" -1 0@ 1@ = 0 5@ = 1 end if 5@ == 1 then 0C1A: 3@ = atoi 0@ chatmsg "Я преобразовал число в: %d" -1 3@ 000E: 3@ -= 1 5@ = 0 end end
![]()
Я сделаю обработку ошибок, восприниматься будут только числа в некотором диапазоне, так что пока это не так важно.ты запоминаешь вообще любой параметр при вводе
Вводил я команду /text 5, запомнил он число 28094904, но опкодом 0C1A преобразовал в нормальное число (5). Похоже скрипт воспринимает это не как число, а как строку, поэтому скорее всего не получается убавлять от него значения и делать проверку на ноль. Исправить как-то можно без scan string?Число воспринимается как есть? Что ты вводил?
я вот что подумал, ты попробуй вместо 000e использовать 0062. Возможно косячный опкод000E: 3@ -= 1
Попробовал, похоже этот опкод не подойдет к моему скрипту, 000Е отлично работает. Чтож, буду ждать хеноси :help:я вот что подумал, ты попробуй вместо 000e использовать 0062. Возможно косячный опкод
Я тебе просто посоветую свой способ поиска косяков: выводи значения всех переменных на экран, попутно со значениями и /или описанием, шо с ними должно происходить. В абсолютном большинстве случаев именно так я находил косяки в работе с переменными (за исключением, естессна, случаев, когда игра крашилась)Попробовал, похоже этот опкод не подойдет к моему скрипту, 000Е отлично работает. Чтож, буду ждать хеноси :help:
Хм... попробовал юзать опкод 0C1A, но в чат всё-равно флудит, значение не отнимается. Более того если прописать /text 0, в чат будет флудить Текст: 0, хотя по идее при нуле он должен останавливаться:
CLEO:0B34: samp register_client_command "text" to_label @text alloc 0@ = 64 alloc 3@ = 256 while true wait 0 if 1@ == 1 then 0B35: samp 0@ = get_last_command_params 1@ = 0 5@ = 1 end if 5@ == 1 then 0C1A: 3@ = atoi 0@ chatmsg "Текст: %d" -1 3@ 000E: 3@ -= 1 end if 3@ == 0 then 5@ = 0 end end :text 1@ = 1 Samp.CmdRet()
О какой проверке ты говоришь?Ты либо проверку числа 3@ добавляй до операции отрицания, либо меняй условие.