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

D

deleted-user-399997

Гость
1582206336393.png
 

Kristyan

Известный
165
16
Установи опкоды SAMPFUNCS.

Жру, не могу)

SAMP.Available() и не надо там ничего ставить в цикле когда ждёшь загрузку SAMP'а, то будет краш.
 
D

deleted-user-399997

Гость
Обычное клео на скрол оружия на цифры, не работает. Помогите, хочу через ини файл все это сделать (смену активации)
CLEO:
[/B]
{$CLEO}
thread "FastScrollWeap | Legko9uh"[/B]
0AF1: write_int 49 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Pistol"
0AF2: 0@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Pistol"
0AF1: write_int 50 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Main"
0AF2: 1@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Main"
0AF1: write_int 51 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "ShotGun"
0AF2: 2@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "ShotGun"
0AF1: write_int 52 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"
0AF2: 3@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"

[B]:Pistol_1
wait 0
if
Player.Defined($PLAYER_CHAR)
jf @Pistol_1
if
key_down 0@
jf @Main_1
if
Actor.HasWeapon($PLAYER_ACTOR, 22)
jf @Pistol_2
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 22

:Pistol_2
if
Actor.HasWeapon($PLAYER_ACTOR, 23)
jf @Pistol_3
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 23

:Pistol_3
if
Actor.HasWeapon($PLAYER_ACTOR, 24)
jf @Main_1
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 24

:Main_1
if
key_down 1@
jf @Shotgun_1
if
Actor.HasWeapon($PLAYER_ACTOR, 30)
jf @Main_2
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 30

:Main_2
if
Actor.HasWeapon($PLAYER_ACTOR, 31)
jf @Shotgun_1
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 31

:Shotgun_1
if
key_down 2@
jf @Rifle_1
if
Actor.HasWeapon($PLAYER_ACTOR, 25)
jf @Shotgun_2
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 25

:Shotgun_2
if
Actor.HasWeapon($PLAYER_ACTOR, 26)
jf @Shotgun_3
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 26

:Shotgun_3
if
Actor.HasWeapon($PLAYER_ACTOR, 27)
jf @Rifle_1
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 27

:Rifle_1
if
key_down 3@
jf @Pistol_1
if
Actor.HasWeapon($PLAYER_ACTOR, 33)
jf @Rifle_2
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 33

:Rifle_2
if
Actor.HasWeapon($PLAYER_ACTOR, 34)
jf @goto
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 34

:goto
goto @Pistol_1
[B]
 
Последнее редактирование модератором:

hnnssy

Известный
Друг
2,684
2,748
Обычное клео на скрол оружия на цифры, не работает. Помогите, хочу через ини файл все это сделать (смену активации)
CLEO:
[/B]
{$CLEO}
thread "FastScrollWeap | Legko9uh"[/B]
0AF1: write_int 49 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Pistol"
0AF2: 0@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Pistol"
0AF1: write_int 50 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Main"
0AF2: 1@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Main"
0AF1: write_int 51 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "ShotGun"
0AF2: 2@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "ShotGun"
0AF1: write_int 52 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"
0AF2: 3@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"

[B]:Pistol_1
wait 0
if
Player.Defined($PLAYER_CHAR)
jf @Pistol_1
if
key_down 0@
jf @Main_1
if
Actor.HasWeapon($PLAYER_ACTOR, 22)
jf @Pistol_2
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 22

:Pistol_2
if
Actor.HasWeapon($PLAYER_ACTOR, 23)
jf @Pistol_3
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 23

:Pistol_3
if
Actor.HasWeapon($PLAYER_ACTOR, 24)
jf @Main_1
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 24

:Main_1
if
key_down 1@
jf @Shotgun_1
if
Actor.HasWeapon($PLAYER_ACTOR, 30)
jf @Main_2
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 30

:Main_2
if
Actor.HasWeapon($PLAYER_ACTOR, 31)
jf @Shotgun_1
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 31

:Shotgun_1
if
key_down 2@
jf @Rifle_1
if
Actor.HasWeapon($PLAYER_ACTOR, 25)
jf @Shotgun_2
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 25

:Shotgun_2
if
Actor.HasWeapon($PLAYER_ACTOR, 26)
jf @Shotgun_3
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 26

:Shotgun_3
if
Actor.HasWeapon($PLAYER_ACTOR, 27)
jf @Rifle_1
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 27

:Rifle_1
if
key_down 3@
jf @Pistol_1
if
Actor.HasWeapon($PLAYER_ACTOR, 33)
jf @Rifle_2
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 33

:Rifle_2
if
Actor.HasWeapon($PLAYER_ACTOR, 34)
jf @goto
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 34

:goto
goto @Pistol_1
[B]
так может для кодов клавиш ты будешь использовать опкод для считывания целых чисел с ини, а не дробных? вдруг именно в этом причина)
 
D

deleted-user-399997

Гость
так может для кодов клавиш ты будешь использовать опкод для считывания целых чисел с ини, а не дробных? вдруг именно в этом причина)
Ты имеешь введу поставить "test cheat" вместо key_down? кст key_down = key pressed, в этом может быть ошибка?
 
  • Ха-ха
Реакции: MAHEKEH

hnnssy

Известный
Друг
2,684
2,748
Ты имеешь введу поставить "test cheat" вместо key_down? кст key_down = key pressed, в этом может быть ошибка?
блэт
0AF1: write_int 52 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"
0AF2: 3@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"
у тебя в INI целые числа, целые, INTEGER которые, типа 1, 2, 3, 53, а считываешь ты дробные, с плавающей точкой, FLOAT которые, типа 0.002, 3.006, 14.88 и тд., но у тебя там нет таких, ты же туда целые записал. Фирштейн?
а, и ещё: в чём профит считывать из ini, если ты тупо прям перед считыванием записываешь туда свои данные? не так делается
ебашишь проверку на существование этого ini-ка, если его нет в природе, тогда создаёшь путём записывания этих циферок и потом читаешь; если же он всё-таки существует уже, то есть скрипт раньше запускался, то тогда делаешь просто считывание данных
надеюсь доходчиво объяснил, я на таком уровне давно ни с кем не общался, пардон, в моём королевстве все умные
 

MAHEKEH

Известный
1,990
494
наверно один из часто задаваемых вопросов..
В общем, забил скрипт всеми доступными переменными и понадобились еще, поскольку я не не знаю как создавать
( и вообще в принципе что такое ) массивы, я побежал их изучать в интернете, ниче не понял толком и пришел сюда.

Предположим я хочу забить экран текстом, я создаю кучу разного рендер текста по экрану и мне нехватает переменных для того что бы создать еще. ( просто как пример, я где то вычитывал что переменные можно использовать по нескольку раз, но сейчас меня интересует как создать новые переменные или что то подобное )

Код:
{$CLEO .cs}
0000: NOP

:0
wait 0
   SAMP.Available
else_jump @0
0@ = Render.CreateFont("Tahoma", 34, 4)

:1
wait 0
0B60: convert_game_screen_coords 315.0 315.0 to_window_screen_coords 30@ 31@
free 1@
alloc 1@ 64
format 1@ "TEXT2"
Render.DrawText(0@, 1@, 30@, 31@, 0xFFFFFFFF)
free 1@
alloc 2@ 64
format 2@ "TEXT3"
Render.DrawText(0@, 2@, 30@, 31@, 0xFFFFFFFF)
free 2@
alloc 3@ 64
format 3@ "TEXT4"
Render.DrawText(0@, 3@, 30@, 31@, 0xFFFFFFFF)
free 3@
alloc 4@ 64
format 4@ "TEXT5"
Render.DrawText(0@, 4@, 30@, 31@, 0xFFFFFFFF)
free 4@
alloc 5@ 64
format 5@ "TEXT6"
Render.DrawText(0@, 5@, 30@, 31@, 0xFFFFFFFF)
free 5@
alloc 6@ 64
format 6@ "TEXT7"
Render.DrawText(0@, 6@, 30@, 31@, 0xFFFFFFFF)
free 6@
alloc 7@ 64
format 7@ "TEXT8"
Render.DrawText(0@, 7@, 30@, 31@, 0xFFFFFFFF)
free 7@
alloc 8@ 64
format 8@ "TEXT9"
Render.DrawText(0@, 8@, 30@, 31@, 0xFFFFFFFF)
free 8@
alloc 9@ 64
format 9@ "TEXT10"
Render.DrawText(0@, 9@, 30@, 31@, 0xFFFFFFFF)
free 9@
alloc 10@ 64
format 10@ "TEXT11"
Render.DrawText(0@, 10@, 30@, 31@, 0xFFFFFFFF)
free 10@
alloc 11@ 64
format 11@ "TEXT12"
Render.DrawText(0@, 11@, 30@, 31@, 0xFFFFFFFF)
free 11@
alloc 12@ 64
format 12@ "TEXT13"
Render.DrawText(0@, 12@, 30@, 31@, 0xFFFFFFFF)
free 12@
alloc 13@ 64
format 13@ "TEXT14"
Render.DrawText(0@, 13@, 30@, 31@, 0xFFFFFFFF)
free 13@
alloc 14@ 64
format 14@ "TEXT15"
Render.DrawText(0@, 14@, 30@, 31@, 0xFFFFFFFF)
free 14@
alloc 15@ 64
format 15@ "TEXT16"
Render.DrawText(0@, 15@, 30@, 31@, 0xFFFFFFFF)
free 15@
alloc 16@ 64
format 16@ "TEXT17"
Render.DrawText(0@, 16@, 30@, 31@, 0xFFFFFFFF)
free 16@
alloc 17@ 64
format 17@ "TEXT18"
Render.DrawText(0@, 17@, 30@, 31@, 0xFFFFFFFF)
free 17@
alloc 18@ 64
format 18@ "TEXT19"
Render.DrawText(0@, 18@, 30@, 31@, 0xFFFFFFFF)
free 19@
alloc 19@ 64
format 19@ "TEXT20"
Render.DrawText(0@, 19@, 30@, 31@, 0xFFFFFFFF)
free 19@
alloc 20@ 64
format 20@ "TEXT21"
Render.DrawText(0@, 20@, 30@, 31@, 0xFFFFFFFF)
free 20@
alloc 21@ 64
format 21@ "TEXT22"
Render.DrawText(0@, 21@, 30@, 31@, 0xFFFFFFFF)
free 21@
alloc 22@ 64
format 22@ "TEXT23"
Render.DrawText(0@, 22@, 30@, 31@, 0xFFFFFFFF)
free 22@
alloc 23@ 64
format 23@ "TEXT24"
Render.DrawText(0@, 23@, 30@, 31@, 0xFFFFFFFF)
free 23@
alloc 24@ 64
format 24@ "TEXT25"
Render.DrawText(0@, 24@, 30@, 31@, 0xFFFFFFFF)
free 24@
alloc 25@ 64
format 25@ "TEXT26"
Render.DrawText(0@, 25@, 30@, 31@, 0xFFFFFFFF)
free 25@
alloc 26@ 64
format 26@ "TEXT27"
Render.DrawText(0@, 26@, 30@, 31@, 0xFFFFFFFF)
free 26@
alloc 27@ 64
format 27@ "TEXT28"
Render.DrawText(0@, 27@, 30@, 31@, 0xFFFFFFFF)
free 27@
alloc 28@ 64
format 28@ "TEXT29"
Render.DrawText(0@, 28@, 30@, 31@, 0xFFFFFFFF)
free 28@
alloc 29@ 64
format 29@ "TEXT29"
Render.DrawText(0@, 29@, 30@, 31@, 0xFFFFFFFF)
free 29@
jump @1

в говнокод можете не всматриваться, черканул просто как пример)
 

san0

Известный
Друг
411
267
xd
CLEO:
{$CLEO}

:entry_point
    03A4: -$set_thread_name "FastScrollWeap | Legko9uh"
    jump @main_thread

:_config_manager_get_names_holder
    ret 1 0x00872CEC

:_config_manager_get_names_iterator
    call @_config_manager_get_names_holder 0 0@
    ret 1 0@
    
:_config_manager_iterator_next
    const
        _config_manager_iterator_MAX_PTR_SHIFT 0x1A8
    end
    
    call @_config_manager_get_names_holder 0 1@
    while true
        0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0
        if 8039: not 2@ == 0
        then
            0A8F: 2@ = 0@ - 1@
            if 0029: 2@ >= _config_manager_iterator_MAX_PTR_SHIFT
            then
                059A:  return_false
                ret 2 0@ 0@
            end
            0085: 3@ = 0@
            0C17: 2@ = strlen 0@
            000A: 0@ += 2@
            0485: return_true
            ret 2 0@ 3@
        end
        inc(0@)
    end
    
:_config_manager_check_integrity
    call @_config_manager_get_names_iterator 0 1@
    2@ = 1
    while call @_config_manager_iterator_next 1 1@ 1@ 3@
        0af8: "[%2i]: Weapon %s" -1 2@ 3@
        inc(2@) 
    end
    
    0af8: "Found %d weapons" -1 2@
    
    ret 1 2@
    
:config_manager_find_name_by_index
    call @_config_manager_get_names_iterator 0 1@
    2@ = 1
    while call @_config_manager_iterator_next 1 1@ 1@ 3@
        if 003B: 2@ == 0@
        then
            return_true
            ret 1 3@
        end
        inc(2@) 
    end
    
    return_false
    ret 1 3@
    
:config_manager_init
    call @_config_manager_check_integrity 0 1@
    0012: 1@ *= 4
    0AC8: 2@ = allocate_memory_size 1@
    0C11: memset destination 2@ value 0x0 size 1@   
    ret 2 2@ 1@
    
:config_manager_update
    0012: 1@ *= 4   
    005A: 0@ += 1@
    
    0A8C: write_memory 0@ size 4 value 2@ virtual_protect 0

    ret 0
    
:config_manager_get
    000E: 2@ -= 4
    for 4@ = 0 to 2@ step 4
        0A8E: 3@ = 4@ + 0@
        0A8D: 3@ = read_memory 3@ size 4 virtual_protect 0
        if 003B: 3@ == 1@
        then   
            0016: 4@ /= 4
            return_true
            ret 1 4@
        end
    end
    return_false
    ret 1 4@

:virtual_protect
    const
        PAGE_EXECUTE_READWRITE = 0x40
    end
    0AA2: 3@ = load_library "kernel32.dll"
    0AA4: 4@ = get_proc_address "VirtualProtect" library 3@
    0AA7: call_function 4@ num_params 4 pop 0 5@v 2@ 1@ 0@ 10@
    ret 1 5@
    
:_config_manager_inject_opcode_bytecode
    const
        __config_manager_INJECTPOINT1 "12345678901234567890" // tbh, 16 is enough
        __config_manager_INJECTPOINT1_LEN = 20
        _config_manager_inject_opcode_bytecode_MAXSCANAREA = 255
    end
    0AC6: 2@ = label @__config_manager_key_inject_point offset
              
    if 0039: 0@ == 0
    then
        for 3@ = 0 to _config_manager_inject_opcode_bytecode_MAXSCANAREA
            0A8E: 4@ = 2@ + 3@
            if 0C25: strncmp string1 4@ string2 __config_manager_INJECTPOINT1 size __config_manager_INJECTPOINT1_LEN
            then
                0085: 0@ = 4@
                jump @_config_manager_inject_opcode_bytecode_setter
            end
        end
        return_false
        ret 1 0@
    end
    
    :_config_manager_inject_opcode_bytecode_setter
        0C17: 2@ = strlen 1@
        call @virtual_protect 3 0@ __config_manager_INJECTPOINT1_LEN PAGE_EXECUTE_READWRITE 10@
        0C13: strcpy destination 0@ source 1@   
        call @virtual_protect 3 0@ __config_manager_INJECTPOINT1_LEN 10@ 10@
        return_true
        ret 1 0@


:config_manager_update_from_file
    const
        _config_manager_INI_SECTION "FastScrollWeap"
        _config_manager_INI_FILE_PATH "Cleo\FastScrollWeap.ini"
    end
    
    call @_config_manager_get_names_iterator 0 2@
    3@ = 1
    while call @_config_manager_iterator_next 1 2@ 2@ 5@
        if call @_config_manager_inject_opcode_bytecode 2 10@ 5@ 10@
        then
            :__config_manager_key_inject_point
            if 0AF0: 4@ = get_int_from_ini_file _config_manager_INI_FILE_PATH section _config_manager_INI_SECTION key __config_manager_INJECTPOINT1
            then
                call @config_manager_update 3 0@ 3@ 4@     
            end
        end
        inc(3@) 
    end
    
    ret 0
    
:config_manager_index_to_weapon_type
    0AA7: call_function 0x00743D10 num_params 1 pop 1 0@ 1@
    ret 1 1@
    
:config_manager_debug_print
    call @_config_manager_get_names_iterator 0 1@
    2@ = 1
    while call @_config_manager_iterator_next 1 1@ 1@ 3@
        0085: 4@ = 2@     
        0012: 4@ *= 4
        005A: 4@ += 0@
        0A8D: 4@ = read_memory 4@ size 4 virtual_protect 0
        0af8: "[%2i]: %s -> %d" -1 2@ 3@ 4@
        inc(2@)
    end
    ret 0
    
:config_manager_get_button_bind
    if and
    call @config_manager_get 3 0@ 2@ 1@ 3@   
    call @config_manager_find_name_by_index 1 3@ 5@
    then
        call @config_manager_index_to_weapon_type 1 5@ 7@
        
        return_true
        ret 1 7@
    end
    return_false
    ret 1 0
    
:utils_get_current_pressed_key
    0AA5: call_function_noreturn 0x00541490 num_params 1 pop 1 0@v
    ret 1 0@
    
:main_thread
    // due to shadow constants, main_thread has to always be last function

    while true
        wait 40
        if and
        0AFA: is_samp_available
        0256: player $PLAYER_CHAR defined
        then
            break
        end
    end         
                                                            
    call @config_manager_init 0 0@ 1@
    call @config_manager_update_from_file 1 0@
    call @config_manager_debug_print 1 0@
    
    while true
        wait 0
        call @utils_get_current_pressed_key 0 2@
        
        if and
        call @config_manager_get_button_bind 3 0@ 1@ 2@ 3@
        02D8: actor $PLAYER_ACTOR current_weapon == 3@
        then
            01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0
            wait 10
            01B9: set_actor $PLAYER_ACTOR armed_weapon_to 3@
        end
    end   
    
    free 0@
наверно один из часто задаваемых вопросов..
Зависит от конкретной задачи

В качестве хранилища данных можно использовать
либо hex end (аналог объектов со статистической длительностью хранения или глобальных объектов в C )
либо самостоятельно вызвать функцию аллоцирования памяти (аналог malloc в C, его тоже можно в cleo напрямую вызвать) 0AC8: 0@ = allocate_memory_size 260
либо локальные переменные

Если вы про саму структуру индексирования, то здесь либо вручную к блоку памяти массива добавлять смещения по формуле (индекс * размер каждого элемента массива), либо можно воспользоваться встроенными массивами самой игры по типу 0@(1@,20i), которые лимитированны локальными переменными, на самом деле довольно специфическое использование

На С было внимание сосредоточено, потому что там это проще понять будет (*(arr+i) == arr[i], когда на cleo это строк 10), да и понятие динамических массивов, выделения памяти и подобного там - одно из ключевых при использовании языка. Да и презентаций с красивыми рисунками того, как представляются данные в памяти компьютера тоже большое количество

По поводу примеров, можно посмотреть код выше, в нем создается массив клавиш-биндов. Еще по ссылкам ниже есть и использование hex end как статистического массива, так и использование массивов самого скриптового движка
По поводу создания динамических массивов
И какого-то рода похожий подход с статистическим буффером
 
  • Влюблен
  • Bug
Реакции: hnnssy и MAHEKEH
D

deleted-user-399997

Гость
блэт
0AF1: write_int 52 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"
0AF2: 3@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"
у тебя в INI целые числа, целые, INTEGER которые, типа 1, 2, 3, 53, а считываешь ты дробные, с плавающей точкой, FLOAT которые, типа 0.002, 3.006, 14.88 и тд., но у тебя там нет таких, ты же туда целые записал. Фирштейн?
а, и ещё: в чём профит считывать из ini, если ты тупо прям перед считыванием записываешь туда свои данные? не так делается
ебашишь проверку на существование этого ini-ка, если его нет в природе, тогда создаёшь путём записывания этих циферок и потом читаешь; если же он всё-таки существует уже, то есть скрипт раньше запускался, то тогда делаешь просто считывание данных
надеюсь доходчиво объяснил, я на таком уровне давно ни с кем не общался, пардон, в моём королевстве все умные
блэт
0AF1: write_int 52 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"
0AF2: 3@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"
у тебя в INI целые числа, целые, INTEGER которые, типа 1, 2, 3, 53, а считываешь ты дробные, с плавающей точкой, FLOAT которые, типа 0.002, 3.006, 14.88 и тд., но у тебя там нет таких, ты же туда целые записал. Фирштейн?
а, и ещё: в чём профит считывать из ini, если ты тупо прям перед считыванием записываешь туда свои данные? не так делается
ебашишь проверку на существование этого ini-ка, если его нет в природе, тогда создаёшь путём записывания этих циферок и потом читаешь; если же он всё-таки существует уже, то есть скрипт раньше запускался, то тогда делаешь просто считывание данных
надеюсь доходчиво объяснил, я на таком уровне давно ни с кем не общался, пардон, в моём королевстве все умные
Спасибо
 
Последнее редактирование модератором:

loganhackerdff

Известный
868
517
наверно один из часто задаваемых вопросов..
В общем, забил скрипт всеми доступными переменными и понадобились еще, поскольку я не не знаю как создавать
( и вообще в принципе что такое ) массивы, я побежал их изучать в интернете, ниче не понял толком и пришел сюда.

Предположим я хочу забить экран текстом, я создаю кучу разного рендер текста по экрану и мне нехватает переменных для того что бы создать еще. ( просто как пример, я где то вычитывал что переменные можно использовать по нескольку раз, но сейчас меня интересует как создать новые переменные или что то подобное )

Код:
{$CLEO .cs}
0000: NOP

:0
wait 0
   SAMP.Available
else_jump @0
0@ = Render.CreateFont("Tahoma", 34, 4)

:1
wait 0
0B60: convert_game_screen_coords 315.0 315.0 to_window_screen_coords 30@ 31@
free 1@
alloc 1@ 64
format 1@ "TEXT2"
Render.DrawText(0@, 1@, 30@, 31@, 0xFFFFFFFF)
free 1@
alloc 2@ 64
format 2@ "TEXT3"
Render.DrawText(0@, 2@, 30@, 31@, 0xFFFFFFFF)
free 2@
alloc 3@ 64
format 3@ "TEXT4"
Render.DrawText(0@, 3@, 30@, 31@, 0xFFFFFFFF)
free 3@
alloc 4@ 64
format 4@ "TEXT5"
Render.DrawText(0@, 4@, 30@, 31@, 0xFFFFFFFF)
free 4@
alloc 5@ 64
format 5@ "TEXT6"
Render.DrawText(0@, 5@, 30@, 31@, 0xFFFFFFFF)
free 5@
alloc 6@ 64
format 6@ "TEXT7"
Render.DrawText(0@, 6@, 30@, 31@, 0xFFFFFFFF)
free 6@
alloc 7@ 64
format 7@ "TEXT8"
Render.DrawText(0@, 7@, 30@, 31@, 0xFFFFFFFF)
free 7@
alloc 8@ 64
format 8@ "TEXT9"
Render.DrawText(0@, 8@, 30@, 31@, 0xFFFFFFFF)
free 8@
alloc 9@ 64
format 9@ "TEXT10"
Render.DrawText(0@, 9@, 30@, 31@, 0xFFFFFFFF)
free 9@
alloc 10@ 64
format 10@ "TEXT11"
Render.DrawText(0@, 10@, 30@, 31@, 0xFFFFFFFF)
free 10@
alloc 11@ 64
format 11@ "TEXT12"
Render.DrawText(0@, 11@, 30@, 31@, 0xFFFFFFFF)
free 11@
alloc 12@ 64
format 12@ "TEXT13"
Render.DrawText(0@, 12@, 30@, 31@, 0xFFFFFFFF)
free 12@
alloc 13@ 64
format 13@ "TEXT14"
Render.DrawText(0@, 13@, 30@, 31@, 0xFFFFFFFF)
free 13@
alloc 14@ 64
format 14@ "TEXT15"
Render.DrawText(0@, 14@, 30@, 31@, 0xFFFFFFFF)
free 14@
alloc 15@ 64
format 15@ "TEXT16"
Render.DrawText(0@, 15@, 30@, 31@, 0xFFFFFFFF)
free 15@
alloc 16@ 64
format 16@ "TEXT17"
Render.DrawText(0@, 16@, 30@, 31@, 0xFFFFFFFF)
free 16@
alloc 17@ 64
format 17@ "TEXT18"
Render.DrawText(0@, 17@, 30@, 31@, 0xFFFFFFFF)
free 17@
alloc 18@ 64
format 18@ "TEXT19"
Render.DrawText(0@, 18@, 30@, 31@, 0xFFFFFFFF)
free 19@
alloc 19@ 64
format 19@ "TEXT20"
Render.DrawText(0@, 19@, 30@, 31@, 0xFFFFFFFF)
free 19@
alloc 20@ 64
format 20@ "TEXT21"
Render.DrawText(0@, 20@, 30@, 31@, 0xFFFFFFFF)
free 20@
alloc 21@ 64
format 21@ "TEXT22"
Render.DrawText(0@, 21@, 30@, 31@, 0xFFFFFFFF)
free 21@
alloc 22@ 64
format 22@ "TEXT23"
Render.DrawText(0@, 22@, 30@, 31@, 0xFFFFFFFF)
free 22@
alloc 23@ 64
format 23@ "TEXT24"
Render.DrawText(0@, 23@, 30@, 31@, 0xFFFFFFFF)
free 23@
alloc 24@ 64
format 24@ "TEXT25"
Render.DrawText(0@, 24@, 30@, 31@, 0xFFFFFFFF)
free 24@
alloc 25@ 64
format 25@ "TEXT26"
Render.DrawText(0@, 25@, 30@, 31@, 0xFFFFFFFF)
free 25@
alloc 26@ 64
format 26@ "TEXT27"
Render.DrawText(0@, 26@, 30@, 31@, 0xFFFFFFFF)
free 26@
alloc 27@ 64
format 27@ "TEXT28"
Render.DrawText(0@, 27@, 30@, 31@, 0xFFFFFFFF)
free 27@
alloc 28@ 64
format 28@ "TEXT29"
Render.DrawText(0@, 28@, 30@, 31@, 0xFFFFFFFF)
free 28@
alloc 29@ 64
format 29@ "TEXT29"
Render.DrawText(0@, 29@, 30@, 31@, 0xFFFFFFFF)
free 29@
jump @1

в говнокод можете не всматриваться, черканул просто как пример)
Не знаю ответили ли тебе, но можешь создавать custom_thread и так ты за 1 переменную в основном потоке получаешь 30 в custom_thread , или не 30,и мне всегда хватает
 

Kristyan

Известный
165
16
наверно один из часто задаваемых вопросов..
В общем, забил скрипт всеми доступными переменными и понадобились еще, поскольку я не не знаю как создавать
( и вообще в принципе что такое ) массивы, я побежал их изучать в интернете, ниче не понял толком и пришел сюда.

Предположим я хочу забить экран текстом, я создаю кучу разного рендер текста по экрану и мне нехватает переменных для того что бы создать еще. ( просто как пример, я где то вычитывал что переменные можно использовать по нескольку раз, но сейчас меня интересует как создать новые переменные или что то подобное )

Код:
{$CLEO .cs}
0000: NOP

:0
wait 0
   SAMP.Available
else_jump @0
0@ = Render.CreateFont("Tahoma", 34, 4)

:1
wait 0
0B60: convert_game_screen_coords 315.0 315.0 to_window_screen_coords 30@ 31@
free 1@
alloc 1@ 64
format 1@ "TEXT2"
Render.DrawText(0@, 1@, 30@, 31@, 0xFFFFFFFF)
free 1@
alloc 2@ 64
format 2@ "TEXT3"
Render.DrawText(0@, 2@, 30@, 31@, 0xFFFFFFFF)
free 2@
alloc 3@ 64
format 3@ "TEXT4"
Render.DrawText(0@, 3@, 30@, 31@, 0xFFFFFFFF)
free 3@
alloc 4@ 64
format 4@ "TEXT5"
Render.DrawText(0@, 4@, 30@, 31@, 0xFFFFFFFF)
free 4@
alloc 5@ 64
format 5@ "TEXT6"
Render.DrawText(0@, 5@, 30@, 31@, 0xFFFFFFFF)
free 5@
alloc 6@ 64
format 6@ "TEXT7"
Render.DrawText(0@, 6@, 30@, 31@, 0xFFFFFFFF)
free 6@
alloc 7@ 64
format 7@ "TEXT8"
Render.DrawText(0@, 7@, 30@, 31@, 0xFFFFFFFF)
free 7@
alloc 8@ 64
format 8@ "TEXT9"
Render.DrawText(0@, 8@, 30@, 31@, 0xFFFFFFFF)
free 8@
alloc 9@ 64
format 9@ "TEXT10"
Render.DrawText(0@, 9@, 30@, 31@, 0xFFFFFFFF)
free 9@
alloc 10@ 64
format 10@ "TEXT11"
Render.DrawText(0@, 10@, 30@, 31@, 0xFFFFFFFF)
free 10@
alloc 11@ 64
format 11@ "TEXT12"
Render.DrawText(0@, 11@, 30@, 31@, 0xFFFFFFFF)
free 11@
alloc 12@ 64
format 12@ "TEXT13"
Render.DrawText(0@, 12@, 30@, 31@, 0xFFFFFFFF)
free 12@
alloc 13@ 64
format 13@ "TEXT14"
Render.DrawText(0@, 13@, 30@, 31@, 0xFFFFFFFF)
free 13@
alloc 14@ 64
format 14@ "TEXT15"
Render.DrawText(0@, 14@, 30@, 31@, 0xFFFFFFFF)
free 14@
alloc 15@ 64
format 15@ "TEXT16"
Render.DrawText(0@, 15@, 30@, 31@, 0xFFFFFFFF)
free 15@
alloc 16@ 64
format 16@ "TEXT17"
Render.DrawText(0@, 16@, 30@, 31@, 0xFFFFFFFF)
free 16@
alloc 17@ 64
format 17@ "TEXT18"
Render.DrawText(0@, 17@, 30@, 31@, 0xFFFFFFFF)
free 17@
alloc 18@ 64
format 18@ "TEXT19"
Render.DrawText(0@, 18@, 30@, 31@, 0xFFFFFFFF)
free 19@
alloc 19@ 64
format 19@ "TEXT20"
Render.DrawText(0@, 19@, 30@, 31@, 0xFFFFFFFF)
free 19@
alloc 20@ 64
format 20@ "TEXT21"
Render.DrawText(0@, 20@, 30@, 31@, 0xFFFFFFFF)
free 20@
alloc 21@ 64
format 21@ "TEXT22"
Render.DrawText(0@, 21@, 30@, 31@, 0xFFFFFFFF)
free 21@
alloc 22@ 64
format 22@ "TEXT23"
Render.DrawText(0@, 22@, 30@, 31@, 0xFFFFFFFF)
free 22@
alloc 23@ 64
format 23@ "TEXT24"
Render.DrawText(0@, 23@, 30@, 31@, 0xFFFFFFFF)
free 23@
alloc 24@ 64
format 24@ "TEXT25"
Render.DrawText(0@, 24@, 30@, 31@, 0xFFFFFFFF)
free 24@
alloc 25@ 64
format 25@ "TEXT26"
Render.DrawText(0@, 25@, 30@, 31@, 0xFFFFFFFF)
free 25@
alloc 26@ 64
format 26@ "TEXT27"
Render.DrawText(0@, 26@, 30@, 31@, 0xFFFFFFFF)
free 26@
alloc 27@ 64
format 27@ "TEXT28"
Render.DrawText(0@, 27@, 30@, 31@, 0xFFFFFFFF)
free 27@
alloc 28@ 64
format 28@ "TEXT29"
Render.DrawText(0@, 28@, 30@, 31@, 0xFFFFFFFF)
free 28@
alloc 29@ 64
format 29@ "TEXT29"
Render.DrawText(0@, 29@, 30@, 31@, 0xFFFFFFFF)
free 29@
jump @1

в говнокод можете не всматриваться, черканул просто как пример)

CLEO:
{$CLEO}
0000:

repeat
wait 0
until SAMP.Available()

2@ = Render.CreateFont("Tahoma", 15, 4)
0b34: "blast" @restart

while true
wait 0

if 0B61:  samp is_local_player_spawned
then
    0B60: convert_game_screen_coords 315.0 315.0 to_window_screen_coords 30@ 31@
    for 0@ = 0 to 30
       alloc 1@ 128
       format 1@ "Text%d" 0@
       Render.DrawText(2@, 1@, 30@, 31@, -1)
       31@ -= 20
       free 1@
    end
end

END

:restart
0A92: create_custom_thread "blasthk.cs"
0A93: end_custom_thread
SAMP.CmdRet()

Не благодари.


1582265793726.png
 
Последнее редактирование:
  • Нравится
Реакции: MAHEKEH

purpledreed

Новичок
4
0
Шалом хочу чтобы актер не с одного выстрела умирал а с 7
Если не сложно конечно буду благодарен



Cleo:
// This file was decompiled using SASCM.ini published by GTAG (http://gtag.gtagaming.com/opcode-database) on 14.6.2013
{$CLEO .cs}

//-------------MAIN---------------
thread "p1cador"
0000: NOP

:p1cador_13
   not SAMP.Available
else_jump @p1cador_33
wait 100
jump @p1cador_13

:p1cador_33
if
14@ = Audiostream.Load("CLEO\headshot.mp3")
else_jump @p1cador_121
log "{ff0000}[p1cador] {00ff00}> headshot.mp3!"
jump @p1cador_169

:p1cador_121
log "{ff0000}[p1cador] {ff0000}> headshot.mp3 -1"

:p1cador_169
if
15@ = Audiostream.Load("CLEO\p1_bell.mp3")
else_jump @p1cador_255
log "{ff0000}[p1cador] {00ff00}> p1_bell.mp3!"
jump @p1cador_302

:p1cador_255
log "{ff0000}[p1cador] {ff0000}> p1_bell.mp3 -1"

:p1cador_302
31@ = -1
30@ = Render.CreateFont("Tahoma", 8, 13)
alloc 29@ 64
0B34: samp register_client_command "training" to_label @p1cador_579
0B34: samp register_client_command "troff" to_label @p1cador_610
call @p1cador_1400 0 12@ 13@

:p1cador_380
wait 0
if
   not 31@ == -1
else_jump @p1cador_572
call @p1cador_717 2 31@ 29@ 0@ 24@

:p1cador_424
   not 1@ == 1
else_jump @p1cador_553
wait 0
call @p1cador_935 3 0@ 10@ 14@ 1@ 10@
if
02E0:   actor $PLAYER_ACTOR firing_weapon
else_jump @p1cador_490
2@ += 1

:p1cador_490
if
051A:   actor 0@ damaged_by_actor $PLAYER_ACTOR
else_jump @p1cador_521
3@ += 1
054E: clear_actor 0@ damage

:p1cador_521
call @p1cador_1467 5 2@ 3@ 30@ 29@ 10@
jump @p1cador_424

:p1cador_553
1@ = 0
SAMP.Destroy3DText(24@)
Audiostream.PerformAction(15@, PLAY)

:p1cador_572
jump @p1cador_380

:p1cador_579
   SAMP.IsCommandTyped(31@)
0C1B: 31@ = atof 31@
call @p1cador_1029 1 31@ 31@
SAMP.CmdRet

:p1cador_610
31@ = -1
2@ = 0
3@ = 0
4@ = 0
10@ = 0
Actor.DestroyInstantly(0@)
SAMP.Destroy3DText(24@)
chatmsg "p1cador: {ffffff}тренировочный режим {ff0000}выкл." 16711680
SAMP.CmdRet

:p1cador_717
if
  0@ == 0
else_jump @p1cador_750
0208: 0@ = random_float_in_ranges 5.0 30.0

:p1cador_750
0087: 10@ = 0@ // (float)
0063: 11@ -= 0@ // (float)
10@ *= 0.74
11@ *= 0.74
0208: 12@ = random_float_in_ranges 10@ 11@
04C4: store_coords_to 13@ 14@ 15@ from_actor $PLAYER_ACTOR with_offset 12@ 0@ 20.3
02CE: 15@ = ground_z_at 13@ 14@ 15@
0376: 16@ = create_random_actor_at 13@ 14@ 15@
17@ = Actor.Angle($PLAYER_ACTOR)
17@ -= 180.0
Actor.Angle(16@) = 17@
format 1@ "%.1f" 0@
30@ = SAMP.Create3DText(1@, -5821910, 13@, 14@, 15@, 100.0, 1, -1, -1)
ret 2 16@ 30@

:p1cador_935
if
09A8:   actor 0@ headshoted
else_jump @p1cador_965
1@ += 1
Audiostream.PerformAction(2@, PLAY)

:p1cador_965
if
   Actor.Dead(0@)
else_jump @p1cador_1003
Actor.DestroyInstantly(0@)
ret 2 1 1@
jump @p1cador_1013

:p1cador_1003
ret 2 0 1@

:p1cador_1013
call @p1cador_935 1 0@ 1@

:p1cador_1029
if or
   not 0@ >= 0.0
  0@ > 100.0
else_jump @p1cador_1140
chatmsg "p1cador: {ffffff}введите расстояние {ff0000}(/training 1...100)" 16711680
ret 1 -1

:p1cador_1140
if and
  0@ >= 1.0
   not 0@ > 100.0
else_jump @p1cador_1274
chatmsg "p1cador: {ffffff}тренировочный режим {00ff00}вкл. {ffffff}дистанция = {00ff00}%.1f" 16711680 0@
ret 1 0@

:p1cador_1274
if
  0@ == 0
else_jump @p1cador_1393
chatmsg "p1cador: {ffffff}тренировочный режим {00ff00}вкл. {ffffff}дистанция = {00ff00}random" 16711680
ret 1 0

:p1cador_1393
ret 1 -1

:p1cador_1400
SAMP.GetScreenResolution(10@, 11@)
10@ /= 640
11@ /= 448
0085: 12@ = 10@ // (int)
0085: 13@ = 11@ // (int)
12@ *= 540
13@ *= 370
ret 2 12@ 13@

:p1cador_1467
call @p1cador_1400 0 11@ 12@
Render.DrawBorderedBox(11@, 12@, 180, 42, -1726211044, 1, -16777216)
if and
  0@ > 0
  1@ > 0
else_jump @p1cador_1932
11@ += 2
12@ += 20
0085: 13@ = 1@ // (int)
13@ *= 176
0072: 13@ /= 0@ // (int)
0085: 14@ = 4@ // (int)
006A: 14@ *= 13@ // (int)
0072: 14@ /= 1@ // (int)
Render.DrawBorderedBox(11@, 12@, 176, 20, 1437379479, 1, -16777216)
Render.DrawBorderedBox(11@, 12@, 13@, 20, -1090453730, 1, -16777216)
005A: 11@ += 13@ // (int)
0062: 11@ -= 14@ // (int)
Render.DrawBorderedBox(11@, 12@, 14@, 20, -1073807330, 1, -16777216)
005A: 11@ += 14@ // (int)
0062: 11@ -= 13@ // (int)
0087: 21@ = 1@ // (float)
0073: 21@ /= 0@ // (float)
21@ *= 100.0
format 3@ "%.0f%%" 21@
11@ += 3
Render.DrawText(2@, 3@, 11@, 12@, -1)
11@ -= 3
12@ -= 18
format 3@ "Shots: {ffffff}%d {00ff1e}Hits: {ffffff}%d {ff0000}HS: {ffffff}%d" 0@ 1@ 4@
23@ = Render.FontDrawLength(2@, 3@)
24@ = 176
0062: 24@ -= 23@ // (int)
24@ /= 2
005A: 11@ += 24@ // (int)
Render.DrawText(2@, 3@, 11@, 12@, -5461097)
jump @p1cador_2121

:p1cador_1932
11@ += 2
12@ += 20
Render.DrawBorderedBox(11@, 12@, 176, 20, 1437379479, 1, -16777216)
12@ -= 18
format 3@ "Shots: {ffffff}%d {00ff1e}Hits: {ffffff}%d {ff0000}HS: {ffffff}%d" 0@ 1@ 4@
23@ = Render.FontDrawLength(2@, 3@)
24@ = 176
0062: 24@ -= 23@ // (int)
24@ /= 2
005A: 11@ += 24@ // (int)
Render.DrawText(2@, 3@, 11@, 12@, -5461097)

:p1cador_2121
ret 0