Полезные сниппеты и SCM-функции

Тема в разделе "CLEO", создана пользователем MISTER_GONWIK, 17 май 2013.

  1. Opcode.eXe

    Opcode.eXe Известный пользователь

    Регистрация:
    11.04.13
    Сообщения:
    86
    Лайки:
    91
    Репутация:
    51
    Input:
    TargetPosition *@ *@ *@
    TargetAimbotAnglesRadian X *@ Y *@
    Output: float DynamicFieldOfView

    used for gta sa aimbot to get fieldofview including distance fix.


    0AB1: @GET_REAL_FOV 5 POSITION 29@ 28@ 27@ TARGETXY 23@ 24@ _TO 0@
    :GET_REAL_FOV
    068D: get_camera_position_to 9@ 10@ 11@
    050A: 12@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 9@ 10@ 11@
    0AB1: @GetYXCameraAngle 0 X 26@ Y 25@ // >Snippet also posted in this thread<
    0063: 3@ -= 26@  // (float)
    0063: 4@ -= 25@  // (float)
    0C03: math 3@ = sine 3@ // (float)
    0C03: math 4@ = sine 4@ // (float)
    006B: 3@ *= 12@  // (float)
    006B: 4@ *= 12@  // (float)
    0C09: math 3@ = power_1337 3@ 2.0
    0C09: math 4@ = power_1337 4@ 2.0
    005B: 3@ += 4@  // (float)
    01FB: 3@ = square_root 3@
    0AB2: 1 3@
     
    #121
    orJIenoK_iT нравится это.
  2. MelomanCool

    Проверенный

    Регистрация:
    19.03.13
    Сообщения:
    66
    Лайки:
    40
    Репутация:
    20
    Описание: оператор стрелка "->"
    Использование: см. пример
    Последним параметром обязательно должен быть "-1"!

    Код:
    
    :Arrow
    {
      Example: 0AB1: @Arrow 5 0@ -> stSAMPPools -> stPlayerPool -> szLocalPlayerName -1 ret 1@
      In: 0@ .. 30@ - params (0@ - structure pointer)
      Out: 0@ - structure field address
    }
    var
    1@: array 30 of Integer
    end
    
    for 31@ = 0 to 29
      if 1@[31@] <> -1
      jf break
      0A8D: 0@ = read_memory 0@ size 4 virtual_protect 1
      005A: 0@ += 1@[31@]
    end
    0AB2: ret 1 0@
    
    Пример:
    
    {$CLEO .cs}
    0000:
    
    while not Player.Defined($PLAYER_ACTOR)
      wait 1000
    end
    
    // single-player check
    0AA2: 30@ = load_library "kernel32.dll"
    0AA4: 31@ = get_proc_address "GetModuleHandleA" library 30@
    0AA7: call_function 31@ num_params 1 pop 0 "samp.dll" 31@
    0AA3: free_library 30@
    if 31@ == 0
    then
      0A93: end_custom_thread
    end
    
    while not Samp.Available()
      wait 150
    end
    
    const
      stSAMPInfo = 0x21A0F8
    
      // stSAMPInfo
      stSAMPPools = 0x3CD
    
      // stSAMPPools
      stPlayerPool = 0x18
    
      // PlayerPool
      szLocalPlayerName = 0xA
    end
    
    while true
      wait 0
      0AA2: 0@ = "samp.dll" offset
      0@ += stSAMPInfo
      0AB1: @Arrow 5 0@ -> stSAMPPools -> stPlayerPool -> szLocalPlayerName -1 ret 1@
      0AD1: show_formatted_text_highpriority "%s" time 0 1@
    end
    
    :Arrow
    {
      Example: 0AB1: @Arrow 5 0@ -> stSAMPPools -> stPlayerPool -> szLocalPlayerName -1 ret 1@
      In: 0@ .. 30@ - params (0@ - structure pointer)
      Out: 0@ - structure field address
    }
    var
    1@: array 30 of Integer
    end
    
    for 31@ = 0 to 29
      if 1@[31@] <> -1
      jf break
      0A8D: 0@ = read_memory 0@ size 4 virtual_protect 1
      005A: 0@ += 1@[31@]
    end
    0AB2: ret 1 0@
    
     
    Последние данные очков репутации:
    Dark_Knight: 3 Очки (Вполне, вполне) 25 июн 2016
    woksonal: 2 Очки (+) 28 июн 2016
    #122
    Последнее редактирование: 25 июн 2016
    SR_team и FYP нравится это.
  3. DarkP1xel

    DarkP1xel Δ9
    BH Team

    Регистрация:
    17.06.13
    Сообщения:
    2.019
    Лайки:
    1.217
    Репутация:
    320
    Описание: Проверка на SA:MP без SAMPFuncs. Сначала проверяет, запущен SA:MP или Single Player. Если был запущен SA:MP, то проверяет, что структуры SA:MP'a были загружены и готовы к использованию. Иначе скрипт отключается.
    Использование: -

    Код/Пример:
    
    {$CLEO}
    IF 0050: _gosub @getSAMPBase // Получаем: HMODULE::SAMPBase (0@) и проверяем, что SA:MP запущен.
    THEN
    
        REPEAT
        0001: 0
        UNTIL 0AB1: _call_scm_func @getStSAMP params 1 | {HMODULE::SAMPBase}0@ | {stSAMP}1@ | // Получаем структуру: stSAMP, а так же проверяем, что SA:MP загружен.
    
        // Тут код который должен будет выполниться после того как SA:MP полностью загрузится.
        /*
    
        ...
        0B78: _log "{%X}SAMPBase: %X | stSAMP: %X" {CLR}0xFFA500 {HMODULE::SAMPBase}0@ {stSAMP}1@
        ...
    
        */
    
        WHILE TRUE
        0001: 0
        0ACD: "~G~SAMP LOADED!" {MS}1
        END
    
    END
    0A93:
    
    :getSAMPBase
    0AA7: call_function {HMODULE::__stdcall::GetModuleHandleA}0x81E406 num_params 1 pop 0 | {LPCSTR::lpModuleName}"SAMP.DLL" | {HMODULE::SAMPBase}0@ |
    0019:   {HMODULE::SAMPBase}0@ > {nullptr}0x0 // Записываем в текущий поток скрипта значение condResult для установки условия.
    0051: _return
    
    :getStSAMP
    000A: {HMODULE::SAMPBase}0@ += {SAMP_INFO_OFFSET}0x21A0F8 // Смещение на SAMP_INFO_OFFSET.
    0A8D: {stSAMP}0@ = read_memory 0@ size {PTR}4 virtual_protect TRUE // При считывание смещения на SAMP_INFO_OFFSET получаем структуру: stSAMP.
    0019:   {stSAMP}0@ > {nullptr}0x0 // Записываем в текущий поток скрипта значение condResult для установки условия.
    0AB2: _RET 1 | {stSAMP}0@ |
    
     
    #123
    romacaddy нравится это.
  4. DarkP1xel

    DarkP1xel Δ9
    BH Team

    Регистрация:
    17.06.13
    Сообщения:
    2.019
    Лайки:
    1.217
    Репутация:
    320
    Описание: Очистка всех переменных в текущем потоке без SAMPFuncs.
    Использование: 0050: _gosub @cleanThreadVars

    Код/Пример:
    :cleanThreadVars
    0A9F: {CScriptThread *}33@ = current_thread_pointer
    000A: {CScriptThread *}33@ += { offsetof(CScriptThread, tls) }0x3C
    0AA7: call_function {void *::__cdecl::_memset}0x82D4C0 num_params 3 pop 3 | {size_t::num}0x88 {int::value}0x0 {void *::ptr}33@ | {void *::ptr}33@ |
    0051: _return
     
    #124
    romacaddy и p1cador нравится это.