Прошу поправить

Статус
В этой теме нельзя размещать новые ответы.

Hardov

Новичок
Автор темы
23
1
Доброго времени суток.
Прошу помощи.. изучаю потихоньку SB и столкнулся с проблемой. Не могу найти ошибку. Код компилится без проблем, но при активации самп начинает жутко тупить.
Код:
{$CLEO .cs}

//-------------MAIN---------------
0050: gosub @Noname_7
:Noname_7
0001: wait 10 ms
00D6: if
0AB0:   key_pressed 187
004D: jump_if_false @Noname_7
0001: wait 100 ms
0004: $xxxpron1 = 77
0004: $xxxpron2 = 33
0004: $xxxpron3 = 11
0004: $xxxpron4 = 66
0004: $xxxpron5 = 99
0004: $xxxpron6 = 39
0AF8: samp add_message_to_chat "[%d] [%d]" color 16711935 $xxxpron3 $xxxpron6
0001: wait 10 ms
0AF8: samp add_message_to_chat "[%d] [%d]" color 16711935 $xxxpron2 $xxxpron5
0001: wait 10 ms
0AF8: samp add_message_to_chat "[%d] [%d]" color 16711935 $xxxpron1 $xxxpron4
0001: wait 10 ms

Заранее спасибо за помощь!
 

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,982
1) в клео нельзя юзать глобальные переменные
2) у gosub должен быть return
3) нельзя делать бесконечные циклы в callback функциях
4) У скрипта нет конца или продолжительного цикла
 
  • Нравится
Реакции: Hardov

Hardov

Новичок
Автор темы
23
1
1) в клео нельзя юзать глобальные переменные
2) у gosub должен быть return
3) нельзя делать бесконечные циклы в callback функциях
4) У скрипта нет конца или продолжительного цикла

Спасибо, но на что заменить глобальные переменные? Больше 33 локальных переменных не дает сделать SB. А очень нужно.

В чем хранить информацию?
 

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,982
Больше 33 локальных переменных не дает сделать SB.
31, последние две - таймеры. Можешь хранить переменные в выделенном буфере данных:


CLEO:
0AC8: 0@ = allocate_memory_size 512
0C11: memset destination 0@ value 0x0 size 512

0AB1: call_scm_func @CallBuffer Params 4 {ID Ячейки}0 {Указатель на Buffer}0@ {Тип функции}1 {Число}420 || {Result}1@

:CallBuffer
// 0@ - ID Ячейки.
// 1@ - Указатель на Buffer .
// 2@ - Тип функции {1 - Write, Other - Read}.
// 3@ - Число для записи.
0012: 0@ *= 4 // Получаем смещение на указанную ячейку.
005A: 0@ += 1@ // Получаем указатель на ячейку.
IF 0039:   2@ == 1 // Проверяем тип вызова.
THEN 0A8C: write_memory 0@ size 4 value 3@ virtual_protect TRUE // Запись данных в ячейку.
ELSE 0A8D: 25@ = read_memory 0@ size 4 virtual_protect TRUE // Считывание данных.
END
0AB2: RET_ 1 {Result}25@
 
  • Нравится
Реакции: Hardov

Hardov

Новичок
Автор темы
23
1
31, последние две - таймеры. Можешь хранить переменные в выделенном буфере данных:


CLEO:
0AC8: 0@ = allocate_memory_size 512
0C11: memset destination 0@ value 0x0 size 512

0AB1: call_scm_func @CallBuffer Params 4 {ID Ячейки}0 {Указатель на Buffer}0@ {Тип функции}1 {Число}420 || {Result}1@

:CallBuffer
// 0@ - ID Ячейки.
// 1@ - Указатель на Buffer .
// 2@ - Тип функции {1 - Write, Other - Read}.
// 3@ - Число для записи.
0012: 0@ *= 4 // Получаем смещение на указанную ячейку.
005A: 0@ += 1@ // Получаем указатель на ячейку.
IF 0039:   2@ == 1 // Проверяем тип вызова.
THEN 0A8C: write_memory 0@ size 4 value 3@ virtual_protect TRUE // Запись данных в ячейку.
ELSE 0A8D: 25@ = read_memory 0@ size 4 virtual_protect TRUE // Считывание данных.
END
0AB2: RET_ 1 {Result}25@

Код все-таки скомпилировался, но крашит samp.
b0faa021a491.png
 

Hardov

Новичок
Автор темы
23
1
Код:
{$CLEO .cs}

//-------------MAIN---------------
0AC8: 0@ = allocate_memory_size 512
0C11: memset destination 0@ value 0x0 size 512

0AB1: call_scm_func @CallBuffer Params 4 0 0@ 1 420 || 1@

:CallBuffer
0012: 0@ *= 4
005A: 0@ += 1@
IF 0039:   2@ == 1
THEN 0A8C: write_memory 0@ size 4 value 3@ virtual_protect TRUE
ELSE 0A8D: 25@ = read_memory 0@ size 4 virtual_protect TRUE
END
0AB2: RET_ 1 25@

Смотрел щас про опкод 0AB2 - тут написано, что использование RET_ без нижнего подчеркивания?
Код:
0AB2: ret 1 300

А как или куда возвращает опкод 0АВ2?
 

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,982
Смотрел щас про опкод 0AB2 - тут написано, что использование RET_ без нижнего подчеркивания?
разницы нет

у тебя в скрипте нет конца, вызываешь scm функцию без опкода.


CLEO:
{$CLEO}
0AC8: 0@ = allocate_memory_size 512
0C11: memset destination 0@ value 0x0 size 512
0AB1: call_scm_func @CallBuffer Params 4 | {ID Ячейки}0 {Указатель на Buffer}0@ {Тип функции}1 {Число}420 || {Result}1@ |
0AB1: call_scm_func @CallBuffer Params 4 | {ID Ячейки}0 {Указатель на Buffer}0@ {Тип функции}0 {Число}0 || {Result}1@ |
0AD1: show_formatted_text_highpriority "Writed: %d" time 5000 {Result}1@
0AC9: free_allocated_memory 0@
0A93:

:CallBuffer
// 0@ - ID Ячейки.
// 1@ - Указатель на Buffer .
// 2@ - Тип функции {1 - Write, Other - Read}.
// 3@ - Число для записи.
0012: 0@ *= 4 // Получаем смещение на указанную ячейку.
005A: 0@ += 1@ // Получаем указатель на ячейку.
IF 0039:   2@ == 1 // Проверяем тип вызова.
THEN 0A8C: write_memory 0@ size 4 value 3@ virtual_protect TRUE // Запись данных в ячейку.
ELSE 0A8D: 25@ = read_memory 0@ size 4 virtual_protect TRUE // Считывание данных.
END
0AB2: RET_ 1 {Result}25@

чтобы разбираться в клео смотри мой канал: http://vk.cc/42Qqy4
 
  • Нравится
Реакции: Hardov

Hardov

Новичок
Автор темы
23
1
разницы нет

у тебя в скрипте нет конца, вызываешь scm функцию без опкода.


CLEO:
{$CLEO}
0AC8: 0@ = allocate_memory_size 512
0C11: memset destination 0@ value 0x0 size 512
0AB1: call_scm_func @CallBuffer Params 4 | {ID Ячейки}0 {Указатель на Buffer}0@ {Тип функции}1 {Число}420 || {Result}1@ |
0AB1: call_scm_func @CallBuffer Params 4 | {ID Ячейки}0 {Указатель на Buffer}0@ {Тип функции}0 {Число}0 || {Result}1@ |
0AD1: show_formatted_text_highpriority "Writed: %d" time 5000 {Result}1@
0AC9: free_allocated_memory 0@
0A93:

:CallBuffer
// 0@ - ID Ячейки.
// 1@ - Указатель на Buffer .
// 2@ - Тип функции {1 - Write, Other - Read}.
// 3@ - Число для записи.
0012: 0@ *= 4 // Получаем смещение на указанную ячейку.
005A: 0@ += 1@ // Получаем указатель на ячейку.
IF 0039:   2@ == 1 // Проверяем тип вызова.
THEN 0A8C: write_memory 0@ size 4 value 3@ virtual_protect TRUE // Запись данных в ячейку.
ELSE 0A8D: 25@ = read_memory 0@ size 4 virtual_protect TRUE // Считывание данных.
END
0AB2: RET_ 1 {Result}25@

чтобы разбираться в клео смотри мой канал: http://vk.cc/42Qqy4

Огромное спасибо!
Подписончик кинул.
 
Статус
В этой теме нельзя размещать новые ответы.