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

SR_team

like pancake
BH Team
4,722
6,380
Это понятно, я это показал так, чтобы было понятно что я хочу. Как мне сделать, чтобы 1 команда работала под 2 потока?
передавать инфу через глобальные переменные 0ab3, 0ab4 или переменные SF, 2 одинаковые команды зарегистрировать нельзя
 
  • Нравится
Реакции: RedBoxWhite

ShadowBroker

Известный
110
27
Со временем крашит:
CLEO:
{$CLEO}

0000:

alloc 3@ 64

while true
wait 0
    if
    key_down 36
    then
        if 0AB1: call_scm_func @id 0 0@
        then
        format 3@ "%d" 0@
        0B79: samp set_chat_input_enabled 1
        0B76: samp set_chat_input_text 3@
        wait 250
        else
        0AF8: "Оффлайн" 0xFFFFFF
        wait 250
        end
    end
end
      
:id      
for 0@ = 0 to 999
    if 0B23: samp is_player_connected 0@
    then
    0B36: samp 1@ = get_player_nickname 0@
        if 0C18: 2@ = strstr string1 1@ string2 "Nick"
        then
        break
        end
    end
end

if not 0@ == 1000
then
0485: return_true
else
059A: return_false
end
0AB2: ret 1 0@
Я бля полагаю дело в памяти

_______UPD
Попробовал выделить и освободить память в цикле, теперь вместо краша единичная ошибка вылазит, игра продолжает работать
 
Последнее редактирование:

RedBoxWhite

Известный
337
27
Со временем крашит:
CLEO:
{$CLEO}

0000:

alloc 3@ 64

while true
wait 0
    if
    key_down 36
    then
        if 0AB1: call_scm_func @id 0 0@
        then
        format 3@ "%d" 0@
        0B79: samp set_chat_input_enabled 1
        0B76: samp set_chat_input_text 3@
        wait 250
        else
        0AF8: "Оффлайн" 0xFFFFFF
        wait 250
        end
    end
end
     
:id     
for 0@ = 0 to 999
    if 0B23: samp is_player_connected 0@
    then
    0B36: samp 1@ = get_player_nickname 0@
        if 0C18: 2@ = strstr string1 1@ string2 "Nick"
        then
        break
        end
    end
end

if not 0@ == 1000
then
0485: return_true
else
059A: return_false
end
0AB2: ret 1 0@
Я бля полагаю дело в памяти

_______UPD
Попробовал выделить и освободить память в цикле, теперь вместо краша единичная ошибка вылазит, игра продолжает работать
Зачем это?
CLEO:
ifnot0@ == 1000
then
0485: return_true
else
059A: return_false
end
И это? format 3@ "%d" 0@

Как проверить, свернута ли игра?
 
Последнее редактирование модератором:

ShadowBroker

Известный
110
27
Зачем это?
CLEO:
ifnot0@ == 1000
then
0485: return_true
else
059A: return_false
end
И это? format 3@ "%d" 0@
Первое: Если цикл for не находит нужного игрока то в переменную 0@ записывается 1000 (число пройденных итераций) и в ret ничего не возвращается, соответственно в цикле while срабатывает else - "Оффлайн"
Второе: форматирую строку что бы после вставить её в открытое окно чата
 

Medvedko

Новичок
19
0
CLEO:
if 2@ == 1
 then 
  2@ = 0
  0B35: samp 29@ = get_last_command_params
  0AD4: 28@ = scan_string 29@ format " %i %i" 27@ 23@
    if 28@ == 2
      then
       0AFF: samp 26@ = car_handle_by_samp_vehicle_id 27@
       0AFF: samp 22@ = car_handle_by_samp_vehicle_id 23@  
       else
       0AF8: samp add_message_to_chat "{32CD32}{FFFFFF}Ââåäèòå ID ìàøèíû." color 0xFFFFFF
    end
Actor.StorePos($PLAYER_ACTOR, 11@, 12@, 13@)
gosub @sitcar4
0407: store_coords_to 14@ 15@ 16@ from_car 26@ with_offset 0.0 0.0 -10.0
Car.PutAt(22@, 14@, 15@, 16@)
Car.Angle(22@) = 95.0
0731: set_car 22@ y_angle_to 90.0
099A: set_car 22@ collision_detection 0
wait 150
Car.SetSpeedInstantly(22@, 500.0)
wait 75
099A: set_car 22@ collision_detection 1
0362: remove_actor $PLAYER_ACTOR from_car_and_place_at 11@ 12@ 13@
end

Хелло. Этот кусок скрипта отправляет машину под землю, ниже другой, да бы вылететь с огромной скоростью, но проблема в одном, если подрубать коллизию, то машина улетает только на клиенте, на сервере же она просто падает под землю. Если же забить на коллизию и отправлять машину в машину да стартовать с огромной скоростью, образуется вторая проблема, что у машин разные габариты и временами, она застревает намертво. SRP
 

hnnssy

Известный
Друг
2,684
2,753
Первое: Если цикл for не находит нужного игрока то в переменную 0@ записывается 1000 (число пройденных итераций) и в ret ничего не возвращается, соответственно в цикле while срабатывает else - "Оффлайн"
Второе: форматирую строку что бы после вставить её в открытое окно чата
там 1000 чёт не будет, если что, цикл до 999
 

RedBoxWhite

Известный
337
27
Как это работает? Почему ничего не выводит после 2 диалога?
CLEO:
0AC6: 0@ = label @Main offset

while true
wait 0
    if 0ADC: "0"
    then
    0B3B: samp show_dialog id 17 caption "alo" text 0@ button_1 "Âûáðàòü" button_2 "Çàêðûòü" style 2
    end
        if 0B3C:  samp is_dialog_responded id 17 button 1@ list_item 2@ input_text 0
        then
            if 1@ == 1
            then
                if 2@ == 0
                then
                0B3B: samp show_dialog id 18 caption "l" text "Ãî?" button_1 "Ãî" button_2 "Çàêðûòü" style 0
                    if 0B3C:  samp is_dialog_responded id 18 button 3@ list_item 0 input_text 0
                    then
                        if 3@ == 1
                        then
                            0AF8: "eeee" -1
                        end
                        if 3@ == 2
                        then
                            0AF8: "pizdec" -1
                        end
                    end
                end
              
                if 2@ == 1
                then
                    0AF8: "bleeeet" -1
                end
            end
        end
end
:1
hex
    "1" A
    "2" 0
end
 

Coghweel

Новичок
76
0
Опкод 0C6E обнуляет выделенную память под переменные в удаляемом потоке?

И еще кое-что, есть опкод:

07DA: set_car 1@ rotation_velocity_XYZ 0.0 0.1 0.0 through_center_of_body

Как можно вычислить угол поворота машины?
 
Последнее редактирование:

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,966
Массив с никами и циклом проверяешь ники подключенных игроков, потом просто проверяешь совпадает ли ник из массива. Массивом может выступать файл с никами.
 
  • Нравится
Реакции: RedBoxWhite

hnnssy

Известный
Друг
2,684
2,753
Как это работает? Почему ничего не выводит после 2 диалога?
CLEO:
0AC6: 0@ = label @Main offset

while true
wait 0
    if 0ADC: "0"
    then
    0B3B: samp show_dialog id 17 caption "alo" text 0@ button_1 "Âûáðàòü" button_2 "Çàêðûòü" style 2
    end
        if 0B3C:  samp is_dialog_responded id 17 button 1@ list_item 2@ input_text 0
        then
            if 1@ == 1
            then
                if 2@ == 0
                then
                0B3B: samp show_dialog id 18 caption "l" text "Ãî?" button_1 "Ãî" button_2 "Çàêðûòü" style 0
                    if 0B3C:  samp is_dialog_responded id 18 button 3@ list_item 0 input_text 0
                    then
                        if 3@ == 1
                        then
                            0AF8: "eeee" -1
                        end
                        if 3@ == 2
                        then
                            0AF8: "pizdec" -1
                        end
                    end
                end
             
                if 2@ == 1
                then
                    0AF8: "bleeeet" -1
                end
            end
        end
end
:1
hex
    "1" A
    "2" 0
end
потому что 0b3c второго диалога не зациклен
 
  • Нравится
Реакции: RedBoxWhite

RedBoxWhite

Известный
337
27
Массив с никами и циклом проверяешь ники подключенных игроков, потом просто проверяешь совпадает ли ник из массива. Массивом может выступать файл с никами.
Так оно будет постоянно прибавлять 1. Походу, ты не как-то не так прочитал вопрос, ибо я здесь увидел обычный чекер, а мне надо узнать кол-во админов в сети.
 

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,966
Это ты тупишь. После окончания цикла нужно будет просто сбросить переменную.
 
  • Нравится
Реакции: RedBoxWhite