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

The Spark

Известный
653
671
Как перенести в scm/gosub не только цифры, но и строчки. Например:
CLEO:
call @config 4 0@ "kak" "Vot" "tak"

:config
0AF0: 0@ = get_int_from_ini_file 1@ section 2@ key 3@
 

astap_

Известный
Всефорумный модератор
626
597
подскажите как отправлять рпс? мне надо отправлять рпс о спавне игрока
CLEO:
0B32: samp send_spawn
или
CLEO:
0B3D: raknet 0@ = new_bit_stream
0B8A: raknet send_rpc {129}RPC_REQUESTSPAWN bit_stream 0@
0B3E: raknet delete_bit_stream 0@
Как перенести в scm/gosub не только цифры, но и строчки. Например:
CLEO:
call @config 4 0@ "kak" "Vot" "tak"

:config
0AF0: 0@ = get_int_from_ini_file 1@ section 2@ key 3@
используй форматирование
CLEO:
alloc 1@ 24
format 1@ = "kek"
 
Последнее редактирование:
  • Нравится
Реакции: loganhackerdff

MeddLomed

Новичок
5
3
Ребят,виснут диалоговые окна в сампе не из-за какого-нибудь одного клео,а виснет из-за самой библиотеки,есть решение?
 

AXE_CAMERON

Участник
66
0
Я создаю диалоговое окно сампа. В цикле whilе клео ожидает распознания диалога, после распознания останавливает цикл while. Если на моё диалоговое окно вылезает другое, то цикл while не останавливается и бесконечно ждёт распознания диалога. Как решить эту проблему?
 

L_S

Новичок
1
0
Всем привет. Уже месяц мучась со скриптом. Идея такова, чтобы скрипт проверял существование пикапа и отрисовывал маркер на карте, а после взятия пикапа, маркер удалялся. В последнем варианте все работает, как и задумывалось, да и после загрузки сохранения маркеры на карте не отрисовываются по новой. Теперь у меня вопрос - как это все размножить на большее количество пикапов? Чтобы все было более компактно и культурно. В предыдущей версии было прописано около 32 пикапов и маркеров к ним, но была проблема с тем, что когда мы сохраняли игру и при последующей ее перезагрузке существующие маркеры отрисовывались по новой и соответственно не пропадали после удаления пикапа из игры (взятия его игроком).
CLEO:
{$CLEO .cs}
thread 'Oysters 1-32'
:OY_1
wait 0
if
048C: pickup_at 155.0 -1975.0 -8.0 available_to_be_picked_up
jf @OY_1
else_jump @END_THREAD
1@ = Marker.CreateIconWithoutSphere(21, 155.0, -1975.0, -8.0)

:DELOY_1
wait 0
if
pickup.Picked_up($2992)
jf @DELOY_1
Marker.Disable(1@)
1@ = 0

:END_THREAD
wait 0
if
1@ == 0
then
end_thread
else_jump @DELOY_1
end

CLEO:
{$CLEO .cs}
thread 'Oysters 1-32'
:Create_1
0A95: enable_thread_saving
if
056D: actor $Player_actor defined
jf @Create_1
if
048C: is_any_pickup_at_coords 979.0 -2210.0 -3.0
then
1@ = Marker.CreateIconWithoutSphere(64, 979.0, -2210.0, -3.0)
end

if
048C: is_any_pickup_at_coords 2750.0 -2584.0 -5.0
then
2@ = Marker.CreateIconWithoutSphere(64, 2750.0, -2584.0, -5.0)
end

if
048C: is_any_pickup_at_coords 1279.0 -806.0 85.0
then
3@ = Marker.CreateIconWithoutSphere(64, 1279.0, -806.0, 85.0)
end

if
048C: is_any_pickup_at_coords 2945.13 -2051.93 -3.0
then
4@ = Marker.CreateIconWithoutSphere(64, 2945.13, -2051.93, -3.0)
end

if
048C: is_any_pickup_at_coords 67.0 -1018.0 -5.0
then
5@ = Marker.CreateIconWithoutSphere(64, 67.0, -1018.0, -5.0)
end

if
048C: is_any_pickup_at_coords 2327.0 -2662.0 -5.0
then
6@ = Marker.CreateIconWithoutSphere(64, 2327.0, -2662.0, -5.0)
end

if
048C: is_any_pickup_at_coords 2621.0 -2506.0 -5.0
then
7@ = Marker.CreateIconWithoutSphere(64, 2621.0, -2506.0, -5.0)
end

if
048C: is_any_pickup_at_coords 1249.0 -2687.0 -1.0
then
8@ = Marker.CreateIconWithoutSphere(64, 1249.0, -2687.0, -1.0)
end
 
if
048C: is_any_pickup_at_coords 725.0 -1849.0 -5.0
then
9@ = Marker.CreateIconWithoutSphere(64, 725.0, -1849.0, -5.0)
end

if
048C: is_any_pickup_at_coords 723.0 -1586.0 -3.0
then
10@ = Marker.CreateIconWithoutSphere(64, 723.0, -1586.0, -3.0)
end

if
048C: is_any_pickup_at_coords 155.0 -1975.0 -8.0
then
11@ = Marker.CreateIconWithoutSphere(64, 155.0, -1975.0, -8.0)
end

if
048C: is_any_pickup_at_coords 1968.0 -1203.0 17.0
then
12@ = Marker.CreateIconWithoutSphere(64, 1968.0, -1203.0, 17.0)
end

if
048C: is_any_pickup_at_coords -2657.0 1564.0 -6.0
then
13@ = Marker.CreateIconWithoutSphere(64, -2657.0, 1564.0, -6.0)
end

if
048C: is_any_pickup_at_coords -1252.0 501.0 -8.0
then
14@ = Marker.CreateIconWithoutSphere(64, -1252.0, 501.0, -8.0)
end

if
048C: is_any_pickup_at_coords -1625.0 4.0 -10.0
then
15@ = Marker.CreateIconWithoutSphere(64, -1625.0, 4.0, -10.0)
end

if
048C: is_any_pickup_at_coords -1484.0 1489.0 -10.0
then
16@ = Marker.CreateIconWithoutSphere(64, -1484.0, 1489.0, -10.0)
end

if
048C: is_any_pickup_at_coords -2505.406 1543.724 -22.5553
then
17@ = Marker.CreateIconWithoutSphere(64, -2505.406, 1543.724, -22.5553)
end

if
048C: is_any_pickup_at_coords -2727.0 -469.0 -5.0
then
18@ = Marker.CreateIconWithoutSphere(64, -2727.0, -469.0, -5.0)
end

if
048C: is_any_pickup_at_coords -1266.0 966.0 -10.0
then
19@ = Marker.CreateIconWithoutSphere(64, -1266.0, 966.0, -10.0)
end

if
048C: is_any_pickup_at_coords -1013.0 478.0 -7.0
then
20@ = Marker.CreateIconWithoutSphere(64, -1013.0, 478.0, -7.0)
end

if
048C: is_any_pickup_at_coords -1364.0 390.0 -5.0
then
21@ = Marker.CreateIconWithoutSphere(64, -1364.0, 390.0, -5.0)
end

if
048C: is_any_pickup_at_coords 2578.0 2382.0 16.0
then
22@ = Marker.CreateIconWithoutSphere(64, 2578.0, 2382.0, 16.0)
end

if
048C: is_any_pickup_at_coords 2090.0 1898.0 8.0
then
23@ = Marker.CreateIconWithoutSphere(64, 2090.0, 1898.0, 8.0)
end

if
048C: is_any_pickup_at_coords 2130.0 1152.0 7.0
then
24@ = Marker.CreateIconWithoutSphere(64, 2130.0, 1152.0, 7.0)
end

if
048C: is_any_pickup_at_coords 2013.0 1670.0 7.0
then
25@ = Marker.CreateIconWithoutSphere(64, 2013.0, 1670.0, 7.0)
end

if
048C: is_any_pickup_at_coords 2531.0 1569.0 9.0
then
26@ = Marker.CreateIconWithoutSphere(64, 2531.0, 1569.0, 9.0)
end

if
048C: is_any_pickup_at_coords 2998.0 2998.0 -10.0
then
27@ = Marker.CreateIconWithoutSphere(64, 2998.0, 2998.0, -10.0)
end

if
048C: is_any_pickup_at_coords -832.0 925.0 -2.0
then
28@ = Marker.CreateIconWithoutSphere(64, -832.0, 925.0, -2.0)
end

if
048C: is_any_pickup_at_coords 486.0 -253.0 -4.0
then
29@ = Marker.CreateIconWithoutSphere(64, 486.0, -253.0, -4.0)
end

if
048C: is_any_pickup_at_coords -90.0 -910.0 -5.0
then
30@ = Marker.CreateIconWithoutSphere(64, -90.0, -910.0, -5.0)
end

if
048C: is_any_pickup_at_coords 26.43 -1320.94 -10.04
then
31@ = Marker.CreateIconWithoutSphere(64, 26.43, -1320.94, -10.04)
end

if
048C: is_any_pickup_at_coords -207.0 -1682.0 -8.0
then
32@ = Marker.CreateIconWithoutSphere(64, -207.0, -1682.0, -8.0)
end

:Delete_1
wait 0
if
pickup.Picked_up($2982)
then
Marker.Disable(1@)

1@ = 0
end

if
pickup.Picked_up($2983)
then
Marker.Disable(2@)

2@ = 0

end

if
pickup.Picked_up($2984)
then
Marker.Disable(3@)

3@ = 0

end

if
pickup.Picked_up($2985)
then
Marker.Disable(4@)

4@ = 0

end

if
pickup.Picked_up($2986)
then
Marker.Disable(5@)

5@ = 0

end

if
pickup.Picked_up($2987)
then
Marker.Disable(6@)

6@ = 0

end

if
pickup.Picked_up($2988)
then
Marker.Disable(7@)

7@ = 0

end

if
pickup.Picked_up($2989)
then
Marker.Disable(8@)

8@ = 0

end

if
pickup.Picked_up($2990)
then
Marker.Disable(9@)

9@ = 0

end

if
pickup.Picked_up($2991)
then
Marker.Disable(10@)

10@ = 0

end

if
pickup.Picked_up($2992)
then
Marker.Disable(11@)

11@ = 0

end

if
pickup.Picked_up($2993)
then
Marker.Disable(12@)

12@ = 0

end

if
pickup.Picked_up($2994)
then
Marker.Disable(13@)

13@ = 0

end

if
pickup.Picked_up($2995)
then
Marker.Disable(14@)

14@ = 0

end

if
pickup.Picked_up($2996)
then
Marker.Disable(15@)

15@ = 0

end

if
pickup.Picked_up($2997)
then
Marker.Disable(16@)

16@ = 0

end

if
pickup.Picked_up($2998)
then
Marker.Disable(17@)

17@ = 0

end

if
pickup.Picked_up($2999)
then
Marker.Disable(18@)

18@ = 0

end

if
pickup.Picked_up($3000)
then
Marker.Disable(19@)

19@ = 0

end

if
pickup.Picked_up($3001)
then
Marker.Disable(20@)

20@ = 0

end

if
pickup.Picked_up($3002)
then
Marker.Disable(21@)

21@ = 0

end

if
pickup.Picked_up($3003)
then
Marker.Disable(22@)

22@ = 0

end

if
pickup.Picked_up($3004)
then
Marker.Disable(23@)

23@ = 0

end

if
pickup.Picked_up($3005)
then
Marker.Disable(24@)

24@ = 0

end

if
pickup.Picked_up($3006)
then
Marker.Disable(25@)

25@ = 0

end

if
pickup.Picked_up($3007)
then
Marker.Disable(26@)

26@ = 0

end

if
pickup.Picked_up($3008)
then
Marker.Disable(27@)

27@ = 0

end

if
pickup.Picked_up($3009)
then
Marker.Disable(28@)

28@ = 0

end

if
pickup.Picked_up($3010)
then
Marker.Disable(29@)

29@ = 0

end

if
pickup.Picked_up($3011)
then
Marker.Disable(30@)

30@ = 0

end

if
pickup.Picked_up($3012)
then
Marker.Disable(31@)

31@ = 0

end

if
pickup.Picked_up($3013)
then
Marker.Disable(32@)

32@ = 0

end

if and
1@ == 0
2@ == 0
3@ == 0
4@ == 0
5@ == 0
6@ == 0
7@ == 0
8@ == 0
jf @Delete_1
9@ == 0      
10@ == 0     
11@ == 0     
12@ == 0     
13@ == 0     
14@ == 0     
15@ == 0     
16@ == 0
jf @Delete_1
17@ == 0      
18@ == 0     
19@ == 0     
20@ == 0     
21@ == 0     
22@ == 0     
23@ == 0     
24@ == 0
jf @Delete_1
25@ == 0      
26@ == 0     
27@ == 0    
28@ == 0     
29@ == 0     
30@ == 0     
31@ == 0    
32@ == 0
jf @Delete_1
0A93: end_thread
jump @Delete_1
 

astap_

Известный
Всефорумный модератор
626
597
Я создаю диалоговое окно сампа. В цикле whilе клео ожидает распознания диалога, после распознания останавливает цикл while. Если на моё диалоговое окно вылезает другое, то цикл while не останавливается и бесконечно ждёт распознания диалога. Как решить эту проблему?
добавь в цикл проверку на ид текущего диалога (к примеру). если он не равен нужному, то break (выход из цикла)
 

The Spark

Известный
653
671
CLEO:
0@ = Actor.Health($PLAYER_ACTOR)
04DD: 1@ = actor $PLAYER_ACTOR armour
Хочу чтобы если 0@ будет меньше 50, то она была красная, если больше то зелёная. Также с 1@.
Вот пример:

CLEO:
if 0019:   1@ > 50

then
        format 2@ "{00ff00}%d" 0@
else
        format 2@ "{ff0000}%d" 0@
end

if 0019:   1@ > 50
then
         format 2@ "{00ff00}%d" 1@
else
        format 2@ "{ff0000}%d" 1@
end
 

serhiyrubin

Известный
396
104
А в клео нельзя как в луа для замены текста делать?
Просто из большого текста нужно бывает заменить одно слово
Не понимаю как это в клео сделать
В луа это очень просто
text = text:gsub('text1', 'text2)

Есть у кого пример хука на PACKET_BULLET_SYNC
 

astap_

Известный
Всефорумный модератор
626
597
А в клео нельзя как в луа для замены текста делать?
Просто из большого текста нужно бывает заменить одно слово
Не понимаю как это в клео сделать
В луа это очень просто
text = text:gsub('text1', 'text2)

Есть у кого пример хука на PACKET_BULLET_SYNC
CLEO:
:bulletHook
0BE5: raknet 0@ = get_hook_param PARAM_PACKETID
IF 12@ == PACKET_BULLET_SYNC
THEN
    0BE5: raknet 0@ = get_hook_param PARAM_BITSTREAM
    0BEB: raknet bit_stream 0@ ignore_bits 8
  
    0BE7: raknet 1@ = bit_stream_read 0@ type BS_TYPE_SHORT // игрок, который послал нам пакет
    0BE7: raknet 2@ = bit_stream_read 0@ type BS_TYPE_BYTE // тип выстрела
    0BE7: raknet 3@ = bit_stream_read 0@ type BS_TYPE_SHORT // ИД таргета
    0BE7: raknet 4@ = bit_stream_read 0@ type BS_TYPE_FLOAT // xBullForm
    0BE7: raknet 5@ = bit_stream_read 0@ type BS_TYPE_FLOAT // yBullForm
    0BE7: raknet 6@ = bit_stream_read 0@ type BS_TYPE_FLOAT // zBullForm  
    0BE7: raknet 7@ = bit_stream_read 0@ type BS_TYPE_FLOAT // xBullTo
    0BE7: raknet 8@ = bit_stream_read 0@ type BS_TYPE_FLOAT // yBullTo
    0BE7: raknet 9@ = bit_stream_read 0@ type BS_TYPE_FLOAT // zBullTo
    0BE7: raknet 10@ = bit_stream_read 0@ type BS_TYPE_FLOAT // xBody
    0BE7: raknet 11@ = bit_stream_read 0@ type BS_TYPE_FLOAT // yBody
    0BE7: raknet 12@ = bit_stream_read 0@ type BS_TYPE_FLOAT // zBody
  
    chatmsg "PLAYER ID: %i | type: %i | hitID: %i" -1 1@ 2@ 3@
END  
0BE0: raknet hook_ret TRUE
Почему крашит при использовании опкода ?
0B4E: samp 1@ = get_current_dialog_id
фулл код
 
  • Нравится
Реакции: Parazitas и serhiyrubin

AXE_CAMERON

Участник
66
0
Код:
{$CLEO}
0000:

while not samp.Available()
wait 0
end

wait 200

while samp.Available()
wait 0
    if
    0C89:  key_just_pressed 106
    then
    0B4E: samp 1@ = get_current_dialog_id
    0AF8: samp add_message_to_chat 1@ color -1
    end
end