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

RedBoxWhite

Известный
337
27
Можно ли проверить то, что игрок в АФК на 5 секунд? Если да, то как.

Код:
for 0@ = 0 to 1000
0AF4: 15@ = read_string_from_ini_file "CLEO\setting.ini" section "Name" key "NamePlayer"
0B20: samp 1@ = actor_handle_by_samp_player_id 0@
00A0: store_actor $PLAYER_ACTOR position_to 10@ 11@ 12@
00A0: store_actor 1@ position_to 13@ 14@ 15@
0509: 17@ = distance_between_XY 10@ 11@ and_XY 13@ 14@
  if 17@ < 150.0
  then
  0B36: samp 2@ = get_player_nickname 1@
    if 0C29: not 20@ = stristr string1 2@ string2 15@  // F0 EF EB
    then
    chatmsg "Nick: %s | ID: %d" -1 2@ 0@
    end
  end
end
А если нужен большой список игроков? Прост 0af4 записывает в 1 строку.

Где можно найти все анимации?
 
Последнее редактирование модератором:

kennex

Известный
69
25
А если нужен большой список игроков? Прост 0af4 записывает в 1 строку.

Через цикл FOR

CLEO:
for 21@ = 0 to 100
0AD3: string_format 4@v format "%d" 21@
alloc 15@ 128
  if 0AF4: 15@ = read_string_from_ini_file "cleo\setting.ini" section "Name" key 4@v
  then
  for 0@ = 0 to 1000
  0B20: samp 1@ = actor_handle_by_samp_player_id 0@
  00A0: store_actor $PLAYER_ACTOR position_to 10@ 11@ 12@
  00A0: store_actor 1@ position_to 13@ 14@ 15@
  0509: 17@ = distance_between_XY 10@ 11@ and_XY 13@ 14@
  if 17@ < 150.0
  then
  0B36: samp 2@ = get_player_nickname 1@
  if 0C29: not 20@ = stristr string1 2@ string2 15@  // F0 EF EB
  then
  chatmsg "Nick: %s | ID: %d" -1 2@ 0@
  end
  end
end

В setting.ini
Код:
[Name]
0=Name
1=Name2
2=Name3
 
  • Нравится
Реакции: RedBoxWhite

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
Вы чо, угараете? Парсить ники в ini файле? Для чего опкоды работы с файлами?
 
  • Нравится
Реакции: MelomanCool

MelomanCool

Новичок
Проверенный
65
41
А если нужен большой список игроков? Прост 0af4 записывает в 1 строку.
Делаешь буфер из строк длиной 26 байт на каждый ник. Например, если у тебя 10 игроков - то буфер будет длиной 260. Потом загружаешь в буфер строки из иника и работаешь уже с буфером. Так будет гораздо быстрее, чем каждый кадр читать с харда.

Был у меня скрипт, запоминавший координаты статуэток для одного сервера.
CLEO:
{$CLEO}
0000:

while not Player.Defined($PLAYER_ACTOR)
    wait 1000
end

0AC8: 11@ = allocate_memory_size 4320 // float - 4 байта, у нас 360 точек, каждая - 3 координаты
if 8AAB: not file_exists "cleo\pickups.ini"
then
    0AF1: write_int 1 to_ini_file "cleo\pickups.ini" section "Main" key "Counter"
    9@ = 0
else // загрузка координат из файла в память
    0AF0: 9@ = get_int_from_ini_file "cleo\pickups.ini" section "Main" key "Counter"
    0085: 12@ = 11@
    for 8@ = 1 to 9@
        0AD3: 20@s = format "%d" 8@
        0AF2: 3@ = get_float_from_ini_file "cleo\pickups.ini" section 20@s key "X"
        0AF2: 4@ = get_float_from_ini_file "cleo\pickups.ini" section 20@s key "Y"
        0AF2: 5@ = get_float_from_ini_file "cleo\pickups.ini" section 20@s key "Z"
        0A8C: write_memory 12@ size 4 value 3@ virtual_protect 0
        12@ += 4
        0A8C: write_memory 12@ size 4 value 4@ virtual_protect 0
        12@ += 4
        0A8C: write_memory 12@ size 4 value 5@ virtual_protect 0
        12@ += 4
    end
end

while true
    wait 0
    gosub @check
    if 0AB0: key_pressed 0x6A // num *
    then
        gosub @save
        while 0AB0: key_pressed 0x6A // num *
            wait 0
        end
    end
end

:check
00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@
0085: 12@ = 11@ // копируем начало буфера
for 8@ = 1 to 9@ // проходимся по всему буферу
    0A8D: 3@ = read_memory 12@ size 4 virtual_protect 0
    12@ += 4
    0A8D: 4@ = read_memory 12@ size 4 virtual_protect 0
    12@ += 4
    0A8D: 5@ = read_memory 12@ size 4 virtual_protect 0
    12@ += 4 // следующий элемент буфера
    050A: 6@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 3@ 4@ 5@
    if and
        6@ < 200.0
        6@ > 5.0
    then gosub @draw
    end
end
return

:save
0085: 12@ = 9@
// смещаемся на первую свободную позицию в буфере
12@ *= 3 // координаты
12@ *= 4 // длина каждой
005A: 12@ += 11@
0A8C: write_memory 12@ size 4 value 0@ virtual_protect 0
12@ += 4
0A8C: write_memory 12@ size 4 value 1@ virtual_protect 0
12@ += 4
0A8C: write_memory 12@ size 4 value 2@ virtual_protect 0
12@ += 4
9@ += 1
0AF1: write_int 9@ to_ini_file "cleo\pickups.ini" section "Main" key "Counter"
0AD3: 20@s = format "%d" 9@
0AF3: write_float 0@ to_ini_file "cleo\pickups.ini" section 20@s key "X"
0AF3: write_float 1@ to_ini_file "cleo\pickups.ini" section 20@s key "Y"
0AF3: write_float 2@ to_ini_file "cleo\pickups.ini" section 20@s key "Z"
return

:draw
28@ = 0.6
29@ = 2.2
0073: 28@ /= 6@
0073: 29@ /= 6@
28@ *= 40.0
29@ *= 40.0
0092: 6@ = float 6@ to_integer
if 6@ < 40
then
    10@ = 40
    0072: 10@ /= 6@
else 10@ = 1
end
0AB1: call_scm_func @getScreenXYFrom3DCoords 3 3D_coords_X 3@ Y 4@ Z 5@ store_screen_X_to 3@ Y_to 4@
03F0: enable_text_draw 1
0342: set_text_draw_centered 1
081C: draw_text_outline 10@ RGBA 0 0 0 255
033F: set_text_draw_letter_size 28@ 29@
045B: draw_text_2numbers 3@ 4@ GXT 'TIME' numbers 8@ 6@
return

:getScreenXYFrom3DCoords
0AA7: call_function 0x70CE30 num_params 6 pop 6 clipNear 1 clipFar 1 yMult 7@s xMult 6@s outVector 2@s inVector 0@s result 29@
0073: 2@ /= 6@
0073: 2@ /= 4@
0073: 3@ /= 7@
0073: 3@ /= 4@
2@ *= 640.0
3@ *= 448.0
0AB2: ret 2 2@ 3@
 
Последнее редактирование:

4el0ve4ik

Известный
Всефорумный модератор
1,548
1,339
Есть ли возможность занести в переменную ид игрока в которого я последний раз целился?
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
Есть ли возможность занести в переменную ид игрока в которого я последний раз целился?
CLEO:
if 0AD2: 0@ = player $PLAYER_CHAR targeted_actor //IF and SET
then
    0B2B: samp 1@ = get_player_id_by_actor_handle 0@
end

Как можно уменьшать себе определенное кол-во хп, например по -46?
Получить текущее хп, уменьшить, установить хп
 
  • Нравится
Реакции: Danijr97

DarkExorcist

Новичок
77
3
можно ли как-то синхронизировать анимацию в полете, чтобы находясь в воздухе мою анимацию видел не только я?
 

4el0ve4ik

Известный
Всефорумный модератор
1,548
1,339
в общем в таком виде это говно не работает, перестает работать гташка
CLEO:
{$CLEO}
0000:

0B34: samp register_client_command "HP" to_label @CMD                      // hp&ar info
0BDE: pause_thread 0
0B34: samp register_client_command "ch" to_label @Noname_15        // hud disable
0BDE: pause_thread 0
wait 0
:CMD
wait 0
0B35: samp 0@ = get_last_command_params
0C1A: 0@ = atoi 0@
IF 0B23:  samp is_player_connected 0@
THEN
    IF 0B20: samp 1@ = actor_handle_by_samp_player_id 0@
    THEN
    0B25: samp 1@ = get_player_health 0@
    0B26: samp 2@ = get_player_armor 0@
    0470: 3@ = actor 0@ current_weapon
    0AF8: samp add_message_to_chat "У игрока ID %d %d HP è %d AR Weap %d" color 0xFFFFFF {ID}0@ {HP}1@ {AR}2@
    END
END
0B43: samp cmd_ret


:Noname_15
0826: enable_hud 0
0B43: samp cmd_ret



А в таком виде это говно работает, в чем прикол помогите разобраться)
CLEO:
{$CLEO}
0000:

0B34: samp register_client_command "HP" to_label @CMD                      // hp&ar info
0BDE: pause_thread 0
0B34: samp register_client_command "ch" to_label @Noname_15        // hud disable
0BDE: pause_thread 0
wait 0
:CMD
wait 0
0B35: samp 0@ = get_last_command_params
0C1A: 0@ = atoi 0@
IF 0B23:  samp is_player_connected 0@
THEN
    IF 0B20: samp 1@ = actor_handle_by_samp_player_id 0@
    THEN
    0B25: samp 1@ = get_player_health 0@
    0B26: samp 2@ = get_player_armor 0@
    0AF8: samp add_message_to_chat "У игрока ID %d %d HP è %d AR" color 0xFFFFFF {ID}0@ {HP}1@ {AR}2@
    END
END
0B43: samp cmd_ret


:Noname_15
0826: enable_hud 0
0B43: samp cmd_ret
разница только в том что убираеться проверка оружи в руках, знаю что где то я накосячил, но что то не могу найти:с
 

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,962
1) Зачем ставить поток на паузу два раза после регистрации команды если после паузы скрипт останавливается?
2) В теле команды нельзя использовать задержки.
3) Зачем задержка после команды и 0000: ?
4) 0470 требует handle, а не ID .
 
  • Нравится
Реакции: 4el0ve4ik

4el0ve4ik

Известный
Всефорумный модератор
1,548
1,339
1) Зачем ставить поток на паузу два раза после регистрации команды если после паузы скрипт останавливается?
2) В теле команды нельзя использовать задержки.
3) Зачем задержка после команды и 0000: ?
4) 0470 требует handle, а не ID .
Как и говорил, я накосячил а найти не могу, спасибо)

Теперь такой вопрос я с помощью 0470: 0@ = actor $PLAYER_ACTOR current_weapon выявляю ид оружия которое у игрока, как перевести что бы допустим он выводит 24 (это дигл) а что бы он выводил Deagle т.е. название а не его ид?
 
Последнее редактирование модератором:

DarkExorcist

Новичок
77
3
Теперь такой вопрос я с помощью 0470: 0@ = actor $PLAYER_ACTOR current_weapon выявляю ид оружия которое у игрока, как перевести что бы допустим он выводит 24 (это дигл) а что бы он выводил Deagle т.е. название а не его ид?
Код:
// 0AB1: call @get_weapon_name_by_id 1 id 0@ to 1@

:get_weapon_name_by_id
{
Params:
In: 0@ - WeaponID
Out: 1@ - weaponName
Example: call @get_weapon_name_by_id 1 id 0@ to 1@
}
0AC6: 1@ = label @weapons offset
0@ *= 19
005A: 1@ += 0@ // (int)
ret 1 1@
:weapons
hex
"Duke" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 0 }
"Brass Knuckles" 00 00 00 00 00 { 1 }
"Golf Club" 00 00 00 00 00 00 00 00 00 00 { 2 }
"Nite Stick" 00 00 00 00 00 00 00 00 00 { 3 }
"Knife" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 4 }
"Baseball" 00 00 00 00 00 00 00 00 00 00 00 { 5 }
"Shovel" 00 00 00 00 00 00 00 00 00 00 00 00 00 { 6 }
"Pool Cue" 00 00 00 00 00 00 00 00 00 00 00 { 7 }
"Katana" 00 00 00 00 00 00 00 00 00 00 00 00 00 { 8 }
"Chainsaw" 00 00 00 00 00 00 00 00 00 00 00 { 9 }
"Dildo" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 10 }
"Dildo" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 11 }
"Dildo" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 12 }
"Dildo" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 13 }
"Flowers" 00 00 00 00 00 00 00 00 00 00 00 00 { 14 }
"Cane" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 15 }
"Grenade" 00 00 00 00 00 00 00 00 00 00 00 00 { 16 }
"Tear Gas" 00 00 00 00 00 00 00 00 00 00 00 { 17 }
"Molotov" 00 00 00 00 00 00 00 00 00 00 00 00 { 18 }
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 19 }
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 20 }
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 21 }
"Pistol" 00 00 00 00 00 00 00 00 00 00 00 00 00 { 22 }
"Silencer" 00 00 00 00 00 00 00 00 00 00 00 { 23 }
"Deagle" 00 00 00 00 00 00 00 00 00 00 00 00 00 { 24 }
"Shotgun" 00 00 00 00 00 00 00 00 00 00 00 00 { 25 }
"SawnOff" 00 00 00 00 00 00 00 00 00 00 00 00 { 26 }
"Spas12" 00 00 00 00 00 00 00 00 00 00 00 00 00 { 27 }
"Tec9" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 28 }
"MP5" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 29 }
"AK47" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 30 }
"M4" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 31 }
"Mac10" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 32 }
"Rifle" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 33 }
"Sniper" 00 00 00 00 00 00 00 00 00 00 00 00 00 { 34 }
"Rocket Launcher" 00 00 00 00 { 35 }
"HS Rocket Launcher" 00 { 36 }
"Flamethrower" 00 00 00 00 00 00 00 { 37 }
"Minigun" 00 00 00 00 00 00 00 00 00 00 00 00 { 38 }
"C4" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 39 }
"Detonator" 00 00 00 00 00 00 00 00 00 00 { 40 }
"Spray" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 41 }
"Fire Extinguisher" 00 00 { 42 }
"Camera" 00 00 00 00 00 00 00 00 00 00 00 00 00 { 43 }
"Nightvision" 00 00 00 00 00 00 00 00 { 44 }
"Infrared Vision" 00 00 00 00 { 45 }
"Parachute" 00 00 00 00 00 00 00 00 00 00 { 46 }
end
 
  • Нравится
Реакции: 4el0ve4ik