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

Dark_Knight

Me, me and me.
Друг
4,083
2,110
хз что тебе надо, но вот как надо сделать, чтоб при нажатии кнопки появлялся диалог, в который вводишь ид, а потом пишется /find id
Код:
:xyi
if
0ab0: 90
jf @xyi
0AC8: 3@ = allocate_memory_size 128
0B3B: samp show_dialog id 1 caption "Example" text "Message box example." button_1 "Ok" button_2 "" style 1
 
:xyi_2
if
0B3C: samp dialog_respond 0@ button 1@ list_item 2@ input_text 3@ // проверим, был ли закрыт любой диалог, созданный этим CLEO
jf @xyi_2
0AD4: 5@ 3@ format "%d" 4@
0AF9: samp say_msg "/find %d" 4@
jump @xyi
Фигня это.
Код:
{$CLEO}

if
not 29@ = samp.Base()
then
end_thread
else
repeat
wait 400
until samp.Available()
end

const
MENU = 2@ //Вместо 2@ будем писать MENU. Пишем чисто для себя, чтобы было удобно читать.
DIALOG_STYLE_MSGBOX = 0 // Диалог с сообщением. 
DIALOG_STYLE_INPUT = 1 // Диалог с вводом цифр/букв 
DIALOG_STYLE_LIST = 2 // Диалог с выбором функции. 
DIALOG_STYLE_PASSWORD = 3 // Не отличается от 1-ого стиля,но тут цифры/буквы заменяются *.
end

while true
wait 0
if
key_down 0x24 //Home
then
:menu
0AC6: MENU = label @ItemsMenu offset
0B3B: samp show_dialog id 1337 caption "[CLEO] kpk by Shiroganes" text MENU button_1 "Ok" button_2 "Закрыть" style DIALOG_STYLE_LIST 
repeat
wait 0
until samp.DialogRespond(1337, 0@, 1@, 0)
if 0@ == 1//Если нажата клавиша "Ок"
then
if 0@ == 0 //Если выбран пункт 1, то бла бла бла. Список начинается с 0.
then
0AF9: say "/kpk"
end
if 0@ == 1
then
0AF9: say "/player"
end
if 0@ == 2
then
0B3B: samp show_dialog id 1338 caption "Поиск" text "Введите ид" button_1 "Ok" button_2 "Назад" style DIALOG_STYLE_INPUT
repeat
wait 0
until samp.DialogRespond(1338, 0@, 0, 28@v)
if 0@ == 2
then goto @menu
end
if 0@ == 1
then
if
0AD4: 4@ = scan_string 28@v format "%d" 5@
then
0AF9: say "/find %d" 5@
end
end 
end
if 0@ == 3
then
0AF9: say "/help"
end
end
end
end

:ItemsMenu
hex
7B "00BFFF" 7D "KpK" A
7B "00BFFF" 7D "Плеер" A
7B "00BFFF" 7D "Поиск" A
7B "00BFFF" 7D "Help" 00
end
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Можно ли получить, сколько игроков на сервере, на котом я нахожусь?
 

Избранный

Новичок
198
30
Можно ли получить, сколько игроков на сервере, на котом я нахожусь?
хз, попробуй так
Код:
1@ = 0 // id
2@ = 0 // кол-во игроков
 
:samp
wait 0
if
0B23: samp is_player_connected 1@
jf @samp_2
1@ += 1
2@ += 1
jump @samp
 
:samp_2
wait 0
1@ += 1
if or
1@ > 1000
2@ > 1000
jf @samp
0AD1: show_formatted_text_highpriority "%d players connected" time 2000 2@
0A93: end_custom_thread
 
  • Нравится
Реакции: itsLegend

OWSLA

Новичок
32
0
Как сделать, чтобы искало ближайший маркер и ТПшнилось на него?
Попробовал сделать подобное - улетел на совсем другой маркер, плюс, написало кучу варнингов.
 

alfazlo

Потрачен
128
36
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
НУжно телепортироваться но что бы анимация которая была до телепортации сохранялась. обычными опкодами она сбивается.
 

alfazlo

Потрачен
128
36
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
О какой анимации идет речь?
Хотелось бы увидеть пример скрипта, если не сложно.
Ну например я бегу и после телепртации анимация бега была сразу же и в том же кадре что и в момент телепортации.
 

alfazlo

Потрачен
128
36
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Решил вопрос наконец-то
Если кому интересно про координаты игрока в памяти то:

Код:
CPlaceable (Перемещаемые обьекты)
0x0000 | DWORD    __vmt  // Указатель на виртуальную таблицу методов для этого объекта
0x0004 | RwV3D    pos    // Позиция RwV3D
0x0010 | float    angle  // Угол по оси Z
0x0014 | RwMatrix *matrix // Указатель на матрицу позиции и вращения //Матрица содержит все координаты, углы поворота и т.д.

Что бы узнать или измениеть координаты игрока через память:
Код:
0A96: 1@ = actor $PLAYER_ACTOR struct //Узнаем начальный адрес структуры
1@ += 20 // Указатель на матрица RwMatrix
0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0 //Адрес матрицы
2@ += 48 //Смещение по которому находятся координаты в матрице
0A8D: 3@ = read_memory 2@ size 4 virtual_protect 0 //x
0AF8: samp add_message_to_chat "%f" color 0xF7FF00 3@
2@ += 4
0A8D: 3@ = read_memory 2@ size 4 virtual_protect 0 //y
0AF8: samp add_message_to_chat "%f" color 0xF7FF00 3@
2@ += 4
0A8D: 3@ = read_memory 2@ size 4 virtual_protect 0 //z
0AF8: samp add_message_to_chat "%f" color 0xF7FF00 3@

Ну и структура матрицы
Код:
struct RwMatrix {
  {RwV3D x;
  DWORD flags;
  RwV3D y;
  DWORD pad1;
  RwV3D z;
  DWORD pad2;
  RwV3D pos;
  DWORD pad3; }

Хотя может это только для меня оказалось не так просто сделать телепорт как в собе :D
 
  • Нравится
Реакции: OWSLA

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Подобен автобусным маркерам на самп-рп.
Попробуй так:
PHP:
{$CLEO}
 
const
    CHECKPOINT = 6@
    CP_X_POS = 7@
    CP_Y_POS = 8@
    CP_Z_POS = 9@
    TYPE_CP = 10@
 
    DISTANCE_CP = 11@
 
    CP_X_POS = 12@
    CP_Y_POS = 13@
    CP_Z_POS = 14@
end
 
0000:
 
if
    8AF7: get_samp_base_to 29@
then
    0A93: end_custom_thread
end
repeat
    wait 400
until 0AFA: is_samp_structures_available
 
:1
wait 0
if and
    not SAMP.ChatInputOpened
    Actor.Driving($PLAYER_ACTOR)
    0ADC: test_cheat "CPM"
else_jump @1
jump @ENABLE
 
:ENABLE
wait 0
0@ = 13
0@ *= 56
0@ += 0xC7F158
0@ += 16
0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0
 
for 0@ = 0 to 2
    CHECKPOINT = -1
    DISTANCE_CP = 1000.00
 
    0085: 1@ = 0@
    1@ *= 56
    1@ += 0xC7F158
    0A8E: 2@ = 1@ + 4
    0A8D: 3@ = read_memory 2@ size 4 virtual_protect 0
 
    Actor.StorePos($PLAYER_ACTOR, ACTOR_X_POS, ACTOR_Y_POS, ACTOR_Z_POS)
    0A8E: 2@ = 1@ + 16
    0A8D: CP_X_POS = read_memory 2@ size 4 virtual_protect 0 // X     
    0A8E: 2@ = 1@ + 20
    0A8D: CP_Y_POS = read_memory 2@ size 4 virtual_protect 0 // Y
    0509: DISTANCE_CP = distance_between_XY ACTOR_X_POS ACTOR_Y_POS and_XY CP_X_POS CP_Y_POS
 
     
    if and
        3@ > 0
        8031: not DISTANCE_CP >= 999.00
    then
        0085: CHECKPOINT = 0@
    end
     
    if
        CHECKPOINT > -1
    then
        0085: 1@ = CHECKPOINT
        1@ *= 56
        1@ += 0xC7F158
             
        0A8E: 2@ = 1@ + 16
        0A8D: CP_X_POS = read_memory 2@ size 4 virtual_protect 0 // X
         
        0A8E: 2@ = 1@ + 20
        0A8D: CP_Y_POS = read_memory 2@ size 4 virtual_protect 0 // Y
         
        0A8E: 2@ = 1@ + 24
        0A8D: CP_Z_POS = read_memory 2@ size 4 virtual_protect 0 // Z
 
        0A8D: TYPE_CP = read_memory 1@ size 1 virtual_protect 0 // Type
 
        Actor.StorePos($PLAYER_ACTOR, ACTOR_X_POS, ACTOR_Y_POS, ACTOR_Z_POS)
        0509: DISTANCE_CP = distance_between_XY ACTOR_X_POS ACTOR_Y_POS and_XY CP_X_POS CP_Y_POS
    end
end
jump @ENABLE
 
  • Нравится
Реакции: OWSLA

OWSLA

Новичок
32
0
Попробуй так:
PHP:
{$CLEO}
 
const
    CHECKPOINT = 6@
    CP_X_POS = 7@
    CP_Y_POS = 8@
    CP_Z_POS = 9@
    TYPE_CP = 10@
 
    DISTANCE_CP = 11@
 
    CP_X_POS = 12@
    CP_Y_POS = 13@
    CP_Z_POS = 14@
end
 
0000:
 
if
    8AF7: get_samp_base_to 29@
then
    0A93: end_custom_thread
end
repeat
    wait 400
until 0AFA: is_samp_structures_available
 
:1
wait 0
if and
    not SAMP.ChatInputOpened
    Actor.Driving($PLAYER_ACTOR)
    0ADC: test_cheat "CPM"
else_jump @1
jump @ENABLE
 
:ENABLE
wait 0
0@ = 13
0@ *= 56
0@ += 0xC7F158
0@ += 16
0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0
 
for 0@ = 0 to 2
    CHECKPOINT = -1
    DISTANCE_CP = 1000.00
 
    0085: 1@ = 0@
    1@ *= 56
    1@ += 0xC7F158
    0A8E: 2@ = 1@ + 4
    0A8D: 3@ = read_memory 2@ size 4 virtual_protect 0
 
    Actor.StorePos($PLAYER_ACTOR, ACTOR_X_POS, ACTOR_Y_POS, ACTOR_Z_POS)
    0A8E: 2@ = 1@ + 16
    0A8D: CP_X_POS = read_memory 2@ size 4 virtual_protect 0 // X 
    0A8E: 2@ = 1@ + 20
    0A8D: CP_Y_POS = read_memory 2@ size 4 virtual_protect 0 // Y
    0509: DISTANCE_CP = distance_between_XY ACTOR_X_POS ACTOR_Y_POS and_XY CP_X_POS CP_Y_POS
 
 
    if and
        3@ > 0
        8031: not DISTANCE_CP >= 999.00
    then
        0085: CHECKPOINT = 0@
    end
 
    if
        CHECKPOINT > -1
    then
        0085: 1@ = CHECKPOINT
        1@ *= 56
        1@ += 0xC7F158
         
        0A8E: 2@ = 1@ + 16
        0A8D: CP_X_POS = read_memory 2@ size 4 virtual_protect 0 // X
     
        0A8E: 2@ = 1@ + 20
        0A8D: CP_Y_POS = read_memory 2@ size 4 virtual_protect 0 // Y
     
        0A8E: 2@ = 1@ + 24
        0A8D: CP_Z_POS = read_memory 2@ size 4 virtual_protect 0 // Z
 
        0A8D: TYPE_CP = read_memory 1@ size 1 virtual_protect 0 // Type
 
        Actor.StorePos($PLAYER_ACTOR, ACTOR_X_POS, ACTOR_Y_POS, ACTOR_Z_POS)
        0509: DISTANCE_CP = distance_between_XY ACTOR_X_POS ACTOR_Y_POS and_XY CP_X_POS CP_Y_POS
    end
end
jump @ENABLE
7aiWD6p7.jpg




Вылезает ошибка в 31 строке.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Редактировал classes.db?
А вообще устанавливал "данные" для санни от сампфункс?
http://blasthack.net/threads/cleo-plugin-sampfuncs.17/
* Для разработчиков:
Скопировать все файлы из папки "SB data", нахоящейся в архиве, в каталог по пути ".../Sanny Builder 3/data/sa" и папку "CLEO" из архива в корневую папку игры.