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

DarkColdBlood

Новичок
2
0
Ку, гайз✋✋✋ Вопрос таков. Нужно переписать прикрепленный ВХ с прорисовки ников на прорисовку всех 3д текстов в зоне прорисовки. Имею некоторый опыт программирования на разных языках, но со скриптингом для сампа сталкиваюсь впервые, поэтому за подсказки буду всей душой благодарен.

upd.
Ознакомился с такой темой как LUA скрипты. Написал то что нужно за 15 минут, но теперь новая проблема. При использовонии onCreate3Dtext появилась следующая проблема. Некоторые надписи отрисовываются издалека, а некоторые только в близи, при этом скрипт их тоже обрабатывает, но только когда они появляются на близком расстоянии. Можно ли как то это исправить, либо просканировать все 3д текста присутствующие на серве через цикл по id не приближаясь к ним?
Lua:
local sampev     = require 'lib.samp.events'

function sampev.onCreate3DText(idObject, color, position, distance, testLOS, attachedPlayerId, attachedVehicleId, text)
    testLOS = false
    distance=10000000
    sampAddChatMessage(text,color)
    return {idObject, color, position, distance, testLOS, attachedPlayerId, attachedVehicleId, text}
end
 
Последнее редактирование:

D3.Pheonix

🎹
Модератор
2,867
1,642
Ку, гайз✋✋✋ Вопрос таков. Нужно переписать прикрепленный ВХ с прорисовки ников на прорисовку всех 3д текстов в зоне прорисовки. Имею некоторый опыт программирования на разных языках, но со скриптингом для сампа сталкиваюсь впервые, поэтому за подсказки буду всей душой благодарен.
а что там паереписывать ? Новый скрипт нужен, пиши в другой раздел
 
  • Нравится
Реакции: DarkColdBlood

Skill707

Известный
7
2
Всем привет, мне надо получить углы поворота объекта. Среди опкодов нашёл такое 0176: 13@ = object 0@ Z_angle. Но для углов X, Y нету такого. Среди адресов памяти тоже не нашёл. Два часа искал на форуме решений, наткнулся на такое https://www.blast.hk/threads/897/post-17439 . Кватернион это что то связанное с углами, но пользоваться ими я не могу. Если кто сталкивался с такой проблемой, либо знает решение, пожалуйста помогите.
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,806
Всем привет, мне надо получить углы поворота объекта. Среди опкодов нашёл такое 0176: 13@ = object 0@ Z_angle. Но для углов X, Y нету такого. Среди адресов памяти тоже не нашёл. Два часа искал на форуме решений, наткнулся на такое https://www.blast.hk/threads/897/post-17439 . Кватернион это что то связанное с углами, но пользоваться ими я не могу. Если кто сталкивался с такой проблемой, либо знает решение, пожалуйста помогите.
Кватернион это есть поворот объекта
 
  • Нравится
Реакции: Skill707

ollydbg

Известный
163
115
someone has the memory address of these lights
у кого-то есть адрес памяти этих огней
RGB
sa-mp-134.png
 

D3.Pheonix

🎹
Модератор
2,867
1,642
Можете объяснить как этим пользоваться. Как получить из этого, X Y Z наклона объекта.
Там же написано. Функция возвращает x y z W. Тебе нужны 3@ 4@ 5@
Или ты не умеешь пользоваться scm func ?
CLEO:
0A98: 1@ = object 0@ struct
0C0C: 2@ = struct 1@ offset 20 size 4 //matrix pointer

0AB1: call_scm_func @Quaternion_get 1 matrix_pointer 2@ Quat_x 3@ Quat_y 4@ Quat_z 5@ Quat_w 6@

:Quaternion_get
 
  • Нравится
Реакции: Skill707

Skill707

Известный
7
2
Там же написано. Функция возвращает x y z W. Тебе нужны 3@ 4@ 5@
Или ты не умеешь пользоваться scm func ?
CLEO:
0A98: 1@ = object 0@ struct
0C0C: 2@ = struct 1@ offset 20 size 4 //matrix pointer

0AB1: call_scm_func @Quaternion_get 1 matrix_pointer 2@ Quat_x 3@ Quat_y 4@ Quat_z 5@ Quat_w 6@

:Quaternion_get
Большое спасибо за объяснение, я применил и получилось что это функция получает тоже самое что этот опкод:
07C3: get_object 281@ axis_angle_relation_to 332@ 333@ 334@ 335@
Мне нужно получить обычные углы разворота объекта в X Y Z (-333.1 224.4 844.4), а не Кватернион (0.555 1.234 -1.444 -1.0).
Можно ли как то кватернион перевести в обычные углы? Или мне звонить учителю по алгебре? :D
 

D3.Pheonix

🎹
Модератор
2,867
1,642
Большое спасибо за объяснение, я применил и получилось что это функция получает тоже самое что этот опкод:
07C3: get_object 281@ axis_angle_relation_to 332@ 333@ 334@ 335@
Мне нужно получить обычные углы разворота объекта в X Y Z (-333.1 224.4 844.4), а не Кватернион (0.555 1.234 -1.444 -1.0).
Можно ли как то кватернион перевести в обычные углы? Или мне звонить учителю по алгебре? :D
кажись всё это есть в функции, как раз углы поворота, получаемые из структуры объекта переводятся в кватернион. Видимо где то раньше нужно возвращать значения переменных, а не в конце, т.е сократить функцию. Но я нини вообще в этом. Жди когад шарящие ответят)
 
  • Нравится
Реакции: Skill707

Kaktyc007

Известный
166
11
Есть код флудера, как остановить флуд, если в чате появиться текст: Вы отправили объявление???

Код:
{$CLEO}

if not 0@ = SAMP.Base()
then 0A93: end_custom_thread
end
while not SAMP.Available()
        wait 100
end


0B34: samp register_client_command "ad" to_label @cmd

while true
wait 0

 if 10@ == 1 // Если мы активировали скрипт
 then
 0AF9: samp say_msg "/ad %s" 20@ //Флудим в /ad наш текст
 wait 400 //С интервалом в 1 секунду.
 end

end


:cmd
0B35: samp 20@ = get_last_command_params // Записываем в 20@ текст флуда.
0B12: 10@ = 10@ XOR 1 // Этот опкод будет записывать в 10@, если там 0, то будет 1, если 1, то будет 0.
//То есть, если мы введем команду, то флуд активируется. Если введем опять, то он выключится.
Samp.CmdRet()
 

ItzSmiLeOff

Известный
28
2
Как вывести в чат переменную при помощи команду say?
CLEO:
{$CLEO}
{$NOSOURCE}
0000:

:1
wait 0
if
0AFA:  is_samp_available
jump @1
0B34: samp register_client_command "fhome" to_label @fhome
0BDE: pause_thread 0

:fhome
samp.IsCommandTyped(0@)
if
0AD4: 1@ = scan_string 0@ format "%d" 2@
jf @error
say "/findhouse %d" 2@
0B43: samp cmd_ret

:error
0B43: samp cmd_ret
 

Skill707

Известный
7
2
Как вывести в чат переменную при помощи команду say?
CLEO:
{$CLEO}
{$NOSOURCE}
0000:

:1
wait 0
if
0AFA:  is_samp_available
jump @1
0B34: samp register_client_command "fhome" to_label @fhome
0BDE: pause_thread 0

:fhome
samp.IsCommandTyped(0@)
if
0AD4: 1@ = scan_string 0@ format "%d" 2@
jf @error
say "/findhouse %d" 2@
0B43: samp cmd_ret

:error
0B43: samp cmd_ret
Код:
0B34: samp register_client_command "fhome" to_label @fhome

:fhome
0B35: samp 0@ = get_last_command_params
0AD4: 1@ = scan_string 0@ format "%i" 2@
say "/findhouse %i" 2@  // на аризоне findihouse
SAMP.CmdRet()
 
  • Нравится
Реакции: ItzSmiLeOff

MAHEKEH

Известный
2,010
504
Есть код флудера, как остановить флуд, если в чате появиться текст: Вы отправили объявление???

Код:
{$CLEO}

if not 0@ = SAMP.Base()
then 0A93: end_custom_thread
end
while not SAMP.Available()
        wait 100
end


0B34: samp register_client_command "ad" to_label @cmd

while true
wait 0

if 10@ == 1 // Если мы активировали скрипт
then
0AF9: samp say_msg "/ad %s" 20@ //Флудим в /ad наш текст
wait 400 //С интервалом в 1 секунду.
end

end


:cmd
0B35: samp 20@ = get_last_command_params // Записываем в 20@ текст флуда.
0B12: 10@ = 10@ XOR 1 // Этот опкод будет записывать в 10@, если там 0, то будет 1, если 1, то будет 0.
//То есть, если мы введем команду, то флуд активируется. Если введем опять, то он выключится.
Samp.CmdRet()

поставить проверку на предложение мб самый простой вариант

CLEO:
if 10@ == 1 // Если мы активировали скрипт

then

0AF9: samp say_msg "/ad %s" 20@ //Флудим в /ad наш текст

wait 400 // С интервалом в 1 секунду. - kavo?

end

   if and // если скрипт включен и появился нужный текст

   10@ == 1

   SAMP.GetChatString(99, 31@, 0, 0, 0) // учитывай строку 99, последняя строчка в чате

   0C18: 30@ = strstr string1 31@ string2 "TEXT" // нужный текст

   then // тогда выключаем

10@ = 0

end

end


ну и не забыть перед этим всем выделить память под 31@
alloc 31@ 256 \\ ...
 
Последнее редактирование модератором:

Kaktyc007

Известный
166
11
поставить проверку на предложение мб самый простой вариант

if 10@ == 1 // Если мы активировали скрипт
then
0AF9: samp say_msg "/ad %s" 20@ //Флудим в /ad наш текст
wait 400 // С интервалом в 1 секунду. - kavo?
end
if and // если скрипт включен и появился нужный текст
10@ == 1
SAMP.GetChatString(99, 31@, 0, 0, 0) // учитывай строку 99, последняя строчка в чате
0C18: 30@ = strstr string1 31@ string2 "TEXT" // нужный текст
then // тогда выключаем
10@ = 0
end
end


ну и не забыть перед этим всем выделить память под 31@
alloc 31@ 256 \\ ...
Cпасибо
Как узнать что написано над верхней линией, т.е текст диалога?
sa-mp-002.png

Вопрос решил, может кому пригодиться
Код:
0AC8: 1@ = 260 // в самом начале выделить память

0BD7: samp get_dialog_text 1@
0AF8: samp add_message_to_chat "%s" color -1 1@ //вывести
 
Последнее редактирование: