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

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,262
1,754
Не помогает. Да что же это за фигня. Почему опкоды не работают, так как они должны работать ? Почему я должен шаманить и просить ультра кодеров придумать какой-то супер способ, чтоб объкты искались нормально или какоую-то хуйню нужно дописать ? Эхх.
Все еще ищу помощь.
Игнорирует некоторые объекты, хотя их ид равняется 1273. Такое ощущение, что скрипт, когда захотел тпшнуться, тогда и тпшнулся. Такое ощущение, что скрипт влюбляется в определенное местоположение объектов и тпшится только к ним, хотя должен к ближайшему. Что не так с этим долбанным кодом ?
CLEO:
{$CLEO}
0000:
0001: wait 0 ms

repeat
wait 0
until 0afa:

0@ = 0

0B34: samp register_client_command "housechecker" to_label @act

while true
wait 0
    if 0@ == 1
    then
    Actor.StorePos($PLAYER_ACTOR, 1@, 2@, 3@)
        if
        0AE3: 10@ = random_object_near_point 1@ 2@ 3@ in_radius 130.0 find_next 0
        then
        7@ = Object.Model(10@)
            if
            7@ == 1273
            then
            Object.StorePos(10@, 4@, 5@, 6@)
            wait 10
            Actor.PutAt($PLAYER_ACTOR, 4@, 5@, 6@)
            0@ = 0
            end
        end
    end
end

:act
if 0@ == 0
then
0@ = 1
0AF8: samp add_message_to_chat "Housechecker âêëþ÷¸í" color -1
else
0@ = 0
0af8: samp add_message_to_chat "Housechecker âûêëþ÷¸í" color -1
end
0b43:
выше
я пробовал писать этот опкод с 1 и 0, тогда вообще ничего не искалось.
CLEO:
while true
wait 0
....
      if
      0ae3: 10@ . . . find_next 0
      0ae3: 10@ . . . find_next 1
then
....
end
end

Пробовал писать в 2 потока в одном цикле(ну в смысле 2 разных if), но так тоже не искалось.
CLEO:
while true
wait 0
  if
0ae3: 10@ . . . find_next 0
then
  ....
  end
  if
  0ae3: 10@ . . . find_next 1
then
  ....
  end
end

Ты имеешь ввиду вызывать сначала с 0, а потом с 1 ? Может попробовать поискать сначала с 0, а потом если ничего не находило, то искать через 1 ? Т

последний твой вопрос - это то что я имел ввиду, вызываешь опкод с 0, затем начинаешь цикл с 1 (он продолжит поиск), но насколько я помню, этот опкод не работает в сампе (не точно), однако есть ручной перебор пула (не через опкод), тебе остается только его найти

я б скинул, однако давно клео хуетой не занимаюсь, так что хуй знает где валяется
 
Последнее редактирование:

DarkP1xel

Сила воли наше всё.
BH Team
3,637
5,024
CLEO:
{$CLEO}
0000:

WHILE TRUE
0001: WAIT 0 MS
00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@
    WHILE 0AE3: 3@ = random_object_near_point 0@ 1@ 2@ in_radius 300.0 find_next TRUE
    000A: 4@ += 1
    END
0AD1: show_formatted_text_highpriority "Objects in stream: %d" time 2000 {Total}4@
0006: 4@ = 0
END

Всё работает. Если у тебя не работает поставь другую библиотеку CLEO.
 

Скептик

Известный
15
0
Помогите пожалуйста :3
Не работает скрипт. Если убираю проверку в цикле, то опкоды выполняются, с проверкой нет. Что кто подскажет?
CLEO:
{$CLEO .cs}
thread "createdmadness"
if not 0@ = SAMP.Base()
then 0A93: end_custom_thread
end
while not SAMP.Available()
        wait 100
end

0@ = 0
0B34: samp register_client_command "cmd" to_label @cmd

while true
    wait 0 ms
    if 0@ == 1
    then
    wait 250 ms
    0B49: samp set_current_dialog_list_item 0
    SAMP.CloseDialog(1)
    wait 500 ms
    0B49: samp set_current_dialog_list_item 2
    SAMP.CloseDialog(1)
    wait 250 ms
    end
end

:cmd
0B12: 0@ = 0@ XOR 1
0B43: samp cmd_ret
 

DarkP1xel

Сила воли наше всё.
BH Team
3,637
5,024
CLEO:
{$CLEO}
0C63: register_console_command "CMD" to_label @CMD

WHILE TRUE
0001: WAIT 0 MS
    IF 0039:   0@ == TRUE
    THEN
    0B12: 0@ = 0@ XOR 1
    0001: WAIT 250 MS
    0B49: samp set_current_dialog_list_item 0
    0B47: samp close_current_dialog_with_button 1
    0001: WAIT 500 MS
    0B49: samp set_current_dialog_list_item 2
    0B47: samp close_current_dialog_with_button 1
    0001: WAIT 250 MS
    END
END

:CMD
0B12: 0@ = 0@ XOR 1
0B43: samp cmd_ret

Если не работает, то у тебя что то не так с игрой или компилятором.
 

01EG

Известный
Проверенный
639
365
1) Как по ID Игрока узнать серверный ID машины в которой он сидит(тот который пишется в /dl).
2) Как я могу использовать Type(гташовский ид машины) например нрг 522, кроме как создавать машину. Ну например, если я знаю, что нрг 522, то могу ли я узнать ид машины или хэндл машины, если она в прорисовке ?
Очень нужно знать.
 

Dark_Knight

Me, me and me.
Друг
4,085
2,114
Знаешь ид, узнаешь хендл игрока, проверяешь в машине ли он, получаешь хендл машины, получаешь ид машины.
 
  • Нравится
Реакции: 01EG

DarkP1xel

Сила воли наше всё.
BH Team
3,637
5,024
1) Как по ID Игрока узнать серверный ID машины в которой он сидит(тот который пишется в /dl).
CLEO:
0AB1: call_scm_func @GetPlayerVehicleID params 1 | {ID}420 | {VehicleID}0@ |

:GetPlayerVehicleID
IF 0B20: samp 25@ = actor_handle_by_samp_player_id 0@
THEN
    IF 00DF:   actor 25@ driving
    THEN
    03C0: 25@ = actor 25@ car
    0B2C: samp 25@ = get_vehicle_id_by_car_handle 25@
    END
END
0AB2: RET 1 | {VehicleID}25@ |


Ну например, если я знаю, что нрг 522, то могу ли я узнать ид машины или хэндл машины, если она в прорисовке ?
Да.
 
  • Нравится
Реакции: 01EG

01EG

Известный
Проверенный
639
365
CLEO:
0AB1: call_scm_func @GetPlayerVehicleID params 1 | {ID}420 | {VehicleID}0@ |

:GetPlayerVehicleID
IF 0B20: samp 25@ = actor_handle_by_samp_player_id 0@
THEN
    IF 00DF:   actor 25@ driving
    THEN
    03C0: 25@ = actor 25@ car
    0B2C: samp 25@ = get_vehicle_id_by_car_handle 25@
    END
END
0AB2: RET 1 | {VehicleID}25@ |
Да.
Крашит после ввода команды /takeveh (id)

CLEO:
0B34: samp register_client_command "takeveh" to_label @TakeVeh

while true
wait 0
end

:Takeveh
0B35: samp 1@ = get_last_command_params
0B20: samp 2@ = actor_handle_by_samp_player_id 1@
if
00DF:   actor 2@ driving
then
0AFF: samp 3@ = car_handle_by_samp_vehicle_id 2@
    if
    056E: car 3@ defined
    then
    036A: put_actor $PLAYER_ACTOR in_car 3@
    02EB: restore_camera_with_jumpcut
    end
end   
0B43: samp cmd_ret
 

DarkP1xel

Сила воли наше всё.
BH Team
3,637
5,024
В 1@ указатель на строку вообще-то, а не число которое ты ввёл.
 

01EG

Известный
Проверенный
639
365
Кстати, хэндл машины в итоге я получаю, но игрок просто не тпшится в нее.
Не проходит проверку на defined car. Хотя игрок, который в тачке. Точно в зоне стрима.
Пробую без проверки на defined car - крашит.
 

san0

Известный
Друг
411
268
Кстати, хэндл машины в итоге я получаю, но игрок просто не тпшится в нее.
Не проходит проверку на defined car. Хотя игрок, который в тачке. Точно в зоне стрима.
Пробую без проверки на defined car - крашит.
ну логика, если хендл существует - больше 0 значит
 

01EG

Известный
Проверенный
639
365
Все вроде решил. Решил найти ид машины по хендлу игрока, а потом нашел хэндл машины по иду игрока.
До этого искал без ида машины.
P.S. Начал тестить скрипт. Есть способ обойти кик в машини и при выкидывании игрока из машины ?
 
Последнее редактирование модератором: