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

DarkP1xel

Сила воли наше всё.
BH Team
3,637
5,024
String/LongString бывает. Мне они и нужны, а ещё нужна переменная класса Actor.
Строки в переменных не хранятся, каждая переменная в CLEO - это четырёх байтовый участок памяти в котором могут храниться целые и дробные числа. Строки хранятся в переменных в форме указателей (*), т.е. адрес памяти где начинается первый символ и завершается терминирующим нулём.
 

SumJest

Известный
31
12
Строки в переменных не хранятся, каждая переменная в CLEO - это четырёх байтовый участок памяти в котором могут храниться целые и дробные числа. Строки хранятся в переменных в форме указателей (*), т.е. адрес памяти где начинается первый символ и завершается терминирующим нулём.
Это мне известно. Но как тогда получить значение этих переменных в байтах или хотя-бы адрес в памяти? Точнее, как тогда выйти из этой ситуации?
 

SumJest

Известный
31
12
А как ты собрался получать переменные из других потоков не имея указателей на них?

Хорошо. Видимо я что-то не правильно сказал. Есть label "2", к которому привязана команда /anim. В этом лэйбле берутся данные из аргументов. Потом начинается загрузка файла с анимации, который был указал как аргумент. Чтобы избежать ошибок, когда файл не загружен была сделана ещё одна метка(label) LoadedCheck2. Так вот, мне нужно из метки "2" получить значения переменных в метке "LoadedCheck2".

А как ты собрался получать переменные из других потоков не имея указателей на них?

Так что, как можно это реализовать?

Привет, у меня возникла проблема.

CLEO:
0B35: samp 0@ = get_last_command_param
0AD4: 20@ = scan_string 0@ format "%d %s %s" 1@ 22@ 23@
say "TESTCHAT %s %s" 22@s 23@s

Если я пишу /{команда} {число} INT_HOUSE wash_up, то в чате появляется это - "TESTCHAT INT_wash wash_up". Не знаете, в чём проблема?
 
Последнее редактирование модератором:

DarkP1xel

Сила воли наше всё.
BH Team
3,637
5,024
Привет, у меня возникла проблема.

CLEO:
0B35: samp 0@ = get_last_command_param
0AD4: 20@ = scan_string 0@ format "%d %s %s" 1@ 22@ 23@
say "TESTCHAT %s %s" 22@s 23@s

Если я пишу /{команда} {число} INT_HOUSE wash_up, то в чате появляется это - "TESTCHAT INT_wash wash_up". Не знаете, в чём проблема?
Нельзя строку на строку сканировать. sscanf используй.
 

LaRossa

Потрачен
429
117
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Подскажите как узнать время на сервере ?
 

SumJest

Известный
31
12
Я похоже задолбал тут всех. Но анимация не воспроизводится на игроке. Хотя ввожу всё верно (/anim {id} INT_HOUSE wash_up) и выводится на экран мне всё верно.
CLEO:
:2                                             
alloc 2@ 128
alloc 3@ 128
IF 0B35: samp 0@ = get_last_command_params
THEN
    0AA5: call 0x8220AD num_params 5 pop 5 params 3@ 2@ 1@v "%d %s %s" 0@
00D6: if and
0B23:  samp is_player_connected 1@
8B64:  not samp is_player 1@ npc
004D: jump_if_false @CMDError1
0B20: samp 4@ = actor_handle_by_samp_player_id 1@
056D:   actor 4@ defined
004D: jump_if_false @CMDError2
04ED: load_animation "%s" 2@
wait 1000   
chatmsg "[TESTCMD]: ID: %d FILE: %s ANIMATION: %s" -1 1@ 2@ 3@      
0A1A: actor 4@ perform_animation "%s" IFP "%s" framedelta 4.0 loop 1 lockX 0 lockY 0 lockF 0 time -1 3@ 2@
04EF: release_animation "%s" 2@
ELSE
0AF8: samp add_message_to_chat "{ffffff}Ââîäèòå /anim [id] [file] [animation]" color 0xFFFFFF
END
0AC9: free_allocated_memory 2@
0AC9: free_allocated_memory 3@
SAMP.CmdRet()
 

BlackKnigga

Известный
BH Team
922
447
Я похоже задолбал тут всех. Но анимация не воспроизводится на игроке. Хотя ввожу всё верно (/anim {id} INT_HOUSE wash_up) и выводится на экран мне всё верно.
CLEO:
:2                                           
alloc 2@ 128
alloc 3@ 128
IF 0B35: samp 0@ = get_last_command_params
THEN
    0AA5: call 0x8220AD num_params 5 pop 5 params 3@ 2@ 1@v "%d %s %s" 0@
00D6: if and
0B23:  samp is_player_connected 1@
8B64:  not samp is_player 1@ npc
004D: jump_if_false @CMDError1
0B20: samp 4@ = actor_handle_by_samp_player_id 1@
056D:   actor 4@ defined
004D: jump_if_false @CMDError2
04ED: load_animation "%s" 2@
wait 1000 
chatmsg "[TESTCMD]: ID: %d FILE: %s ANIMATION: %s" -1 1@ 2@ 3@    
0A1A: actor 4@ perform_animation "%s" IFP "%s" framedelta 4.0 loop 1 lockX 0 lockY 0 lockF 0 time -1 3@ 2@
04EF: release_animation "%s" 2@
ELSE
0AF8: samp add_message_to_chat "{ffffff}Ââîäèòå /anim [id] [file] [animation]" color 0xFFFFFF
END
0AC9: free_allocated_memory 2@
0AC9: free_allocated_memory 3@
SAMP.CmdRet()
0A1A не поддерживает форматирование.
Пробуй так:
CLEO:
04ED: load_animation 2@
0A1A: actor 4@ perform_animation 3@ IFP 2@ framedelta 4.0 loop 1 lockX 0 lockY 0 lockF 0 time -1
04EF: release_animation 2@
 

LaRossa

Потрачен
429
117
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Можно как то закрыть процесс gta_sa.exe ?
 

LaRossa

Потрачен
429
117
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Помогите что не так ?
Код:
0000: NOP

while not SAMP.Available()
    wait 100
end
0B34: samp register_client_command "teest" to_label @Xor

while true
wait 0
if 0@ == 1
then
03F0: enable_text_draw 1
0AC8: 10@ = allocate_memory_size 256
0AC8: 11@ = allocate_memory_size 256
0AC8: 12@ = allocate_memory_size 256
0AB1: call_scm_func @Main 0 1@ 2@ 
0AD3: 10@ = format "Äèàëîã: %d" 1@ 
0AD3: 11@ = format "Èíòåðååð: %d" 2@  
0AC9: free_allocated_memory 10@
0AC9: free_allocated_memory 11@
0AC9: free_allocated_memory 12@
0B6F: render font 0 draw_text 11@ pos 500 550 color 0xFFFFFFFF
    end
end

:Main
0B4E: samp 1@ = get_current_dialog_id
077E: get_active_interior_to 2@
0AB2: ret 2 1@ 2@

:Xor
0B12: 0@ = 0@ XOR 1
00D6: if
0039:   0@ == 1
0B43: samp cmd_ret
 
1,417
1,035
Помогите что не так ?
Код:
0000: NOP

while not SAMP.Available()
    wait 100
end
0B34: samp register_client_command "teest" to_label @Xor

while true
wait 0
if 0@ == 1
then
03F0: enable_text_draw 1
0AC8: 10@ = allocate_memory_size 256
0AC8: 11@ = allocate_memory_size 256
0AC8: 12@ = allocate_memory_size 256
0AB1: call_scm_func @Main 0 1@ 2@
0AD3: 10@ = format "Äèàëîã: %d" 1@
0AD3: 11@ = format "Èíòåðååð: %d" 2@ 
0AC9: free_allocated_memory 10@
0AC9: free_allocated_memory 11@
0AC9: free_allocated_memory 12@
0B6F: render font 0 draw_text 11@ pos 500 550 color 0xFFFFFFFF
    end
end

:Main
0B4E: samp 1@ = get_current_dialog_id
077E: get_active_interior_to 2@
0AB2: ret 2 1@ 2@

:Xor
0B12: 0@ = 0@ XOR 1
00D6: if
0039:   0@ == 1
0B43: samp cmd_ret
шрифт надо в начале регистрировать и ещё куча херни.
CLEO:
{$CLEO}
0000: NOP
0B6D: render 30@ = create_font "Tahoma" height 8 flags 0xD

while not SAMP.Available()
    wait 100
end
0B34: samp register_client_command "test" to_label @Xor

while true
wait 0
if 0@ == 1
then
03F0: enable_text_draw 1
0AC8: 10@ = allocate_memory_size 256
0AB1: call_scm_func @Main 0 1@ 2@
0AD3: 10@ = format "Èíòåðüåð: %d Äèàëîã: %d" 2@ 1@
0B6F: render font 30@ draw_text 10@ pos 500 550 color 0xFFFFFFFF
0AC9: free_allocated_memory 10@
    end                                                         
end

:Main
0B4E: samp 1@ = get_current_dialog_id
077E: get_active_interior_to 2@
0AB2: ret 2 1@ 2@

:Xor
0B12: 0@ = 0@ XOR 1
0B43: samp cmd_ret