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

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

  1. MISTER_GONWIK

    Регистрация:
    09.03.13
    Сообщения:
    898
    Лайки:
    960
    Репутация:
    621
    Код (Text):
    [b]Описание:
    Использование:
    Код:[/b] [code]
    Пример:
    Код (Text):
     
     
    Последние данные очков репутации:
    DrumKee: 1 Очко (Помощь)) 19 апр 2014
    #1
    Последнее редактирование: 5 сен 2016
    4el0ve4ik, [CG]Norman, Romelo и 4 другим нравится это.
  2. spiceman

    spiceman GOWNIK <3
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    107
    Лайки:
    35
    Репутация:
    62
    Описание: получает ID игрока по ник-нейму.
    Использование: 0ab1: @get_playerid_by_name 1 nickname 0@ ID 1@
    Код:
    Код (Text):
    :get_playerid_by_name
    for 1@ = 0 to 1000
        if SAMP.IsPlayerConnected(1@)
        then
            2@ = SAMP.GetPlayerNickname(1@)
            if 0C14: strcmp string1 0@ string2 2@
            then break
            end
        end
    end
    0ab2: 1 1@
    Пример:
    Код (Text):
    {$CLEO}
    0000:
     
    if 0@ = SAMP.Base()
    then
        while not SAMP.Available()
            wait 500
        end
        0B34: samp register_client_command "getid" to_label @cmd
    else end_thread
    end
     
    while true
        wait 0
    end
     
    :cmd
    0B35: samp 0@ = get_last_command_params
    0C17: 1@ = strlen 0@
    if not 1@ == 0
    then
        0ab1: @get_playerid_by_name 1 0@ 1@
        SAMP.AddChatMessage(" *PlayerID: %d", 0xFFFFFF, 1@)
    else SAMP.AddChatMessage(" *Используйте: /getid [nickname]", 0xFFFFFF)
    end
    0B43: samp cmd_ret
     
    :get_playerid_by_name
    for 1@ = 0 to 1000
        if SAMP.IsPlayerConnected(1@)
        then
            2@ = SAMP.GetPlayerNickname(1@)
            if 0C14: strcmp string1 0@ string2 2@
            then break
            end
        end
    end
    0ab2: 1 1@
     
    #2
  3. mgmoldova

    mgmoldova Товарищ mgmoldova
    Проверенный

    Регистрация:
    18.03.13
    Сообщения:
    262
    Лайки:
    168
    Репутация:
    144
    Описание: получает Score игрока по ID.
    Использование: 0AB1: call @get_player_scores 1 id 0@ to 1@
    Код:
    Код (Text):
    :get_player_scores
    {
    Params:
      In: 0@ - playerID
      Out: 1@ - scores
    }
    0B24: samp 1@ = get_remote_player_ptr 0@
    1@ += 32
    0A8D: 1@ = read_memory 1@ size 4 virtual_protect 1
    0AB2: ret 1 1@
    _________________________________________________________________
    Описание: получает Ping игрока по ID.
    Использование: 0AB1: call @get_player_ping 1 id 0@ to 1@
    Код:
    Код (Text):
    :get_player_ping
    {
    Params:
      In: 0@ - playerID
      Out: 1@ - ping
    }
    0B24: samp 1@ = get_remote_player_ptr 0@
    1@ += 40
    0A8D: 1@ = read_memory 1@ size 4 virtual_protect 1
    0AB2: ret 1 1@

    _________________________________________________________________
    Описание: Переводит трехмерные координаты пространства в двумерные координаты экрана.
    Использование: 0AB1: call_scm_func @getScreenXYFrom3DCoords 3 3D_coords_X 0@ Y 1@ Z 2@ store_screen_X_to 3@ Y_to 4@
    Код:
    Код (Text):
    :getScreenXYFrom3DCoords
    0AA7: call_function 0x70CE30 num_params 6 pop 6 clipNear 1 clipFar 1 yMult 7@s xMult 6@s outVector 2@s inVector 0@s result 29@
    0073: 2@ /= 6@
    0073: 2@ /= 4@
    0073: 3@ /= 7@
    0073: 3@ /= 4@
    2@ *= 640.0
    3@ *= 448.0
    0AB2: ret 2 2@ 3@
    Пример:

    Код (Text):
    {$CLEO}
    0000:
    while true
          wait 0
          04C4: store_coords_to 0@ 1@ 2@ from_actor $PLAYER_ACTOR with_offset 0 1.0 0
          03F0: enable_text_draw 1
          for 9@ = 0 to 3
              for 8@ = 0 to 3
                  for 7@ = 0 to 3
                      0AB1: call_scm_func @getScreenXYFrom3DCoords 3 3D_coords_X 0@ Y 1@ Z 2@ store_screen_X_to 3@ Y_to 4@
                      0342: set_text_draw_centered 1
                      081C: draw_text_outline 1 RGBA 0 0 0 255
                      033F: set_text_draw_letter_size 0.3 1.1
                      045A: draw_text_1number 3@ 4@ GXT 'NUMBER' number 7@
                      0@ += 0.1
                  end
                  0@ -= 0.4
                  1@ += 0.1
              end
              1@ -= 0.4
              2@ += 0.1
          end
    end

    :getScreenXYFrom3DCoords
    0AA7: call_function 0x70CE30 num_params 6 pop 6 clipNear 1 clipFar 1 yMult 7@s xMult 6@s outVector 2@s inVector 0@s result 29@
    0073: 2@ /= 6@
    0073: 2@ /= 4@
    0073: 3@ /= 7@
    0073: 3@ /= 4@
    2@ *= 640.0
    3@ *= 448.0
    0AB2: ret 2 2@ 3@
     
    Последние данные очков репутации:
    fonarik: 1 Очко (йцу) 5 июн 2013
    #3
    fonarik нравится это.
  4. MISTER_GONWIK

    Регистрация:
    09.03.13
    Сообщения:
    898
    Лайки:
    960
    Репутация:
    621
    Описание: сравнивает две строки и возвращает результат сравнения: 0/1
    Использование: (как условие) 0AB1: call @cmpString1andString2 2 1@ 2@
    Код:
    Код (Text):
    :cmpString1andString2
    {
        Example: 0AB1: call @cmpString1andString2 2 1@ 2@
        In: 0@, 1@ - strings
        Out: result 0/1
    }
        for 7@ = 0 to 1024
        0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0    
        0A8D: 3@ = read_memory 1@ size 1 virtual_protect 0
        0@ += 1
        1@ += 1
        if 003B: 2@ == 3@
        jf break
        if and
        2@ == 0
        3@ == 0
        then
            0485: return_true
      ret 0
        end
        end
    059A: return_false
    ret 0
    Пример:
    Код (Text):
    {$CLEO .cs}
    wait 0
     
    :load_samp_base
    if not 0@ = SAMP.Base()
    then 0A93: end_custom_thread
    end
    while not SAMP.Available()
        wait 100
    end
     
    while true
    wait 0
        0AC8: 1@ = 32
        0AC8: 2@ = 32
        if 0AB0: 49
        then
            0AD3: string 1@ format "Вышел немец из тумана"
            0AD3: string 2@ format "Пум пурум пум пум"
            if 0AB1: call @cmpString1andString2 2 1@ 2@
            then 0AF8: samp add_message_to_chat "Совпало" color 0x00FF00
            else 0AF8: samp add_message_to_chat "Не совпало" color 0xFF0000
            end
        else if 0AB0: 50
        then
            0AD3: string 1@ format "Вышел немец из тумана"
            0AD3: string 2@ format "Вышел немец из тумана"
            if 0AB1: call @cmpString1andString2 2 1@ 2@
            then 0AF8: samp add_message_to_chat "Совпало" color 0x00FF00
            else 0AF8: samp add_message_to_chat "Не совпало" color 0xFF0000
            end
        end
        end
        0AC9: 1@
        0AC9: 2@
    end
     
    :cmpString1andString2
    {
        Example: 0AB1: call @cmpString1andString2 2 1@ 2@
        In: 0@, 1@ - strings
        Out: result 0/1
    }
        for 7@ = 0 to 1024
        0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0    
        0A8D: 3@ = read_memory 1@ size 1 virtual_protect 0
        0@ += 1
        1@ += 1
        if 003B: 2@ == 3@
        jf break
        if and
        2@ == 0
        3@ == 0
        then
            0485: return_true
       ret 0
        end
        end
    059A: return_false
    ret 0
     
    Последние данные очков репутации:
    legend2360: 1 Очко 8 июн 2013
    gcode: 1 Очко (Спасибо!) 3 июл 2013
    Gonwik_ARMY: 1 Очко 8 янв 2014
    #4
    gcode нравится это.
  5. Dark_Knight

    Dark_Knight Фипа не обижать. Я його "кохаю".
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    1.989
    Лайки:
    518
    Репутация:
    176
    Описание: Получение названия оружия с ида его.
    Использование: 0AB1 call @get_weapon_name_by_id 1 id 0@ to 1@
    Код (Text):
    :get_weapon_name_by_id
    {
    Params:
    In: 0@ - WeaponID
    Out: 1@ - weaponName
     
    Example: call @get_weapon_name_by_id 1 id 0@ to 1@
    }
    0AC6: 1@ = label @weapons offset
    0@ *= 19
    005A: 1@ += 0@ // (int)
    ret 1 1@
     
    :weapons
    hex
    "Duke" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 0 }
    "Brass Knuckles" 00 00 00 00 00 { 1 }
    "Golf Club" 00 00 00 00 00 00 00 00 00 00 { 2 }
    "Nite Stick" 00 00 00 00 00 00 00 00 00 { 3 }
    "Knife" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 4 }
    "Baseball" 00 00 00 00 00 00 00 00 00 00 00 { 5 }
    "Shovel" 00 00 00 00 00 00 00 00 00 00 00 00 00 { 6 }
    "Pool Cue" 00 00 00 00 00 00 00 00 00 00 00 { 7 }
    "Katana" 00 00 00 00 00 00 00 00 00 00 00 00 00 { 8 }
    "Chainsaw" 00 00 00 00 00 00 00 00 00 00 00 { 9 }
    "Dildo" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 10 }
    "Dildo" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 11 }
    "Dildo" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 12 }
    "Dildo" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 13 }
    "Flowers" 00 00 00 00 00 00 00 00 00 00 00 00 { 14 }
    "Cane" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 15 }
    "Grenade" 00 00 00 00 00 00 00 00 00 00 00 00 { 16 }
    "Tear Gas" 00 00 00 00 00 00 00 00 00 00 00 { 17 }
    "Molotov" 00 00 00 00 00 00 00 00 00 00 00 00 { 18 }
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 19 }
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 20 }
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 21 }
    "Pistol" 00 00 00 00 00 00 00 00 00 00 00 00 00 { 22 }
    "Silencer" 00 00 00 00 00 00 00 00 00 00 00 { 23 }
    "Deagle" 00 00 00 00 00 00 00 00 00 00 00 00 00 { 24 }
    "Shotgun" 00 00 00 00 00 00 00 00 00 00 00 00 { 25 }
    "SawnOff" 00 00 00 00 00 00 00 00 00 00 00 00 { 26 }
    "Spas12" 00 00 00 00 00 00 00 00 00 00 00 00 00 { 27 }
    "Tec9" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 28 }
    "MP5" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 29 }
    "AK47" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 30 }
    "M4" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 31 }
    "Mac10" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 32 }
    "Rifle" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 33 }
    "Sniper" 00 00 00 00 00 00 00 00 00 00 00 00 00 { 34 }
    "Rocket Launcher" 00 00 00 00 { 35 }
    "HS Rocket Launcher" 00 { 36 }
    "Flamethrower" 00 00 00 00 00 00 00 { 37 }
    "Minigun" 00 00 00 00 00 00 00 00 00 00 00 00 { 38 }
    "C4" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 39 }
    "Detonator" 00 00 00 00 00 00 00 00 00 00 { 40 }
    "Spray" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 { 41 }
    "Fire Extinguisher" 00 00 { 42 }
    "Camera" 00 00 00 00 00 00 00 00 00 00 00 00 00 { 43 }
    "Nightvision" 00 00 00 00 00 00 00 00 { 44 }
    "Infrared Vision" 00 00 00 00 { 45 }
    "Parachute" 00 00 00 00 00 00 00 00 00 00 { 46 }
    end
    Пример:
    Код (Text):
    0470: 0@ = actor $PLAYER_ACTOR current_weapon
    call @get_weapon_name_by_id 1 id 0@ to 1@
    0AA8: call_function_method 0x6A0050 0xC1B340 num_params 1 pop 0 'CRED400' 2@
    0AA5: call 0x718600 2 pop 2 2@ 1@
    033E: set_draw_text_position 360.0 240.0 GXT 'CRED400'
    Описание: Перезапись GXT записей.
    Использование:
    Код (Text):
    0AA8: call_function_method 0x6A0050 0xC1B340 num_params 1 pop 0 'CRED400' 2@
    0AA5: call 0x718600 2 pop 2 2@ "Damage"  
    Пример:
    Код (Text):
    Const
    PING = 1@
    end
     
    0AC8: PING = allocate_memory_size 64
    0B2B: samp 23@ = get_player_id_by_actor_handle $PLAYER_ACTOR
    0B2A: samp 23@ = get_player_ping 23@
    0AD3: string PING format "Ping: %d" 23@
    0AA8: call_function_method 0x6A0050 0xC1B340 num_params 1 pop 0 'CRED002' 2@ // Get gxt text address by gxt name
    0AA5: call 0x718600 2 pop 2 2@ PING
    033E: set_draw_text_position 360.0 240.0 GXT 'CRED002'
    0AC9: PING
     
    Последние данные очков репутации:
    legend2360: 1 Очко (Понадобилось :)) 14 июн 2013
    #hnnssy: 1 Очко (благодарствую)) 13 июл 2013
    #5
    p1cador, Dragar и legend2360 нравится это.
  6. MISTER_GONWIK

    Регистрация:
    09.03.13
    Сообщения:
    898
    Лайки:
    960
    Репутация:
    621
    Описание: получение размера строки
    Использование: 0AB1: call @strlen 1 string 1@ return: 3@
    Код:
    Код (Text):
    :strlen
    {
        Example: 0AB1: call @strlen 1 string 1@ return: 3@
        In: 0@ - text;
        Out: 1@ - size;
    }
    for 1@ = 0 to 1024
        0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0
        if not 2@ == 0
        jf break
        0@ += 1
    end
    0AB2: ret 1 1@
    Пример:
    Код (Text):
    {$CLEO .cs}
    wait 0
     
    :load_samp_base
    if not 0@ = SAMP.Base()
    then 0A93: end_custom_thread
    end
    while not SAMP.Available()
        wait 100
    end
     
    while true
    wait 0
        if 0ADC: "her"
        then
            0AC8: 1@ = 32
            0AD3: string 1@ format "Вышел немец из тумана"
            0AB1: call @strlen 1 1@ return: 2@
            0AF8: samp add_message_to_chat "String: %s Size: %d" color 0xFF61BB 1@ 2@
            0AC9: 1@
        end
    end
     
    :strlen
    {
        Example: 0AB1: call @strlen 1 string 1@ return: 3@
        In: 0@ - text;
        Out: 1@ - size;
    }
    for 1@ = 0 to 1024
        0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0
        if not 2@ == 0
        jf break
        0@ += 1
    end
    0AB2: ret 1 1@
     
    #6
  7. MogAika

    Друг

    Регистрация:
    18.03.13
    Сообщения:
    244
    Лайки:
    268
    Репутация:
    202
    Код (Text):
    const
    SAMP_DIALOG_CHAT = 0x212AC4
    //Окно чата - элементы в нем всегда видны (Но нажимать можно только если открыть чат
    SAMP_DIALOG_SCOREBOARD = 0x212AC8
    //Таблица игроков, элементы видны на TAB
    SAMP_DIALOG_CLASSELECTOR = 0x212ACC
    //Выбор скина/класса
    SAMP_DIALOG_CLIENTDIALOG = 0x212AD0
    //Диалог, к которому мы все привыкли
    SAMP_DIALOG_UNK = 0x212AD4
    //Хз (мб выбор модели (фишка 0.3х))
    end
     
    //example
    //0AB1: call_scm_func @CDXUTControl__SetVisible 2 0@ visible true
    :CDXUTControl__SetVisible
    0A8D: 2@ = read_memory 0@ size 4 virtual_protect 1
    2@ += 64
    0A8D: 3@ = read_memory 2@ size 4 virtual_protect 1
    0AA6: call_method 3@ struct 0@ num_params 1 pop 0 1@
    0AB2: ret 0
     
    //example
    //0AB1: call_scm_func @CDXUTControl__SetEnabled 2 2@ visible true
    :CDXUTControl__SetEnabled
    0A8D: 2@ = read_memory 0@ size 4 virtual_protect 1
    2@ += 56
    0A8D: 3@ = read_memory 2@ size 4 virtual_protect 1
    0AA6: call_method 3@ struct 0@ num_params 1 pop 0 1@
    0AB2: ret 0
     
    //example
    //0AB1: call_scm_func @CDXUTDialog__GetControl 3 struct 1@ samp_base 0@ id 0x44 to 2@
    :CDXUTDialog__GetControl
    0A8E: 3@ = 1@ + 0x971C0
    0AA8: call_function_method 3@ struct 0@ num_params 1 pop 0 id 2@ to 4@
    0AB2: ret 1 4@
     
    //example
    //0AB1: call_scm_func @CDXUTDialog__AddButton 8 struct 1@ samp_base 0@ id 0x44 text "Button" x 240 y 32 width 400 height 16
    :CDXUTDialog__AddButton
    0A8E: 20@ = 1@ + 0x0A0B20
    0AA6: call_method 20@ struct 0@ 9 0 params 0 0 0 height 7@ width 6@ y 5@ x 4@ strText 3@ id 2@
    0AB2: ret 0
     
    //example
    //0AB1: call_scm_func @CDXUTDialog__AddComboBox 7 struct 1@ samp_base 0@ id 0x44 x 240 y 32 width 400 height 16
    :CDXUTDialog__AddComboBox
    0A8E: 20@ = 1@ + 0x0A1260
    0AA6: call_method 20@ struct 0@ 8 params 0 0 0 0 height 6@ width 5@ y 4@ x 3@ id 2@
    0AB2: ret 0
     
    //example
    //0AB1: call_scm_func @CDXUTDialog__AddCheckBox 9 struct 1@ samp_base 0@ id 0x44 textpointer 10@ x 240 y 32 width 400 height 16 checked 1
    :CDXUTDialog__AddCheckBox
    0A8E: 20@ = 1@ + 0x0A0BC0
    0AA6: call_method 20@ struct 0@ 10 0 0 0 0 checked 8@ height 7@ width 6@ y 5@ x 4@ text 3@ id 2@
    0AB2: ret 0
     
    //example
    //0AB1: call_scm_func @CDXUTComboBox__AddItem 4 struct 0@ samp_base 1@ textpointer 2@ datapointer 3@
    :CDXUTComboBox__AddItem
    0A8E: 10@ = 1@ + 0x9A5C0
    0AA6: call_method 10@ struct 0@ num_params 2 pop 0 3@ 2@
    0AB2: ret 0
     
    //example
    //0AB1: call_scm_func @CDXUTControl__UpdateRects 2 struct 1@ samp_base 0@
    :CDXUTControl__UpdateRects
    0A8E: 3@ = 1@ + 0x94DA0
    0AA6: call_method 3@ struct 0@ num_params 0 pop 0
    0AB2: ret 0
     
    //example
    //0AB1: call_scm_func @CDXUTCheckBox__UpdateRects 2 struct 1@ samp_base 0@
    :CDXUTCheckBox__UpdateRects
    0A8E: 3@ = 1@ + 0x95090
    0AA6: call_method 3@ struct 0@ num_params 0 pop 0
    0AB2: ret 0
    Пример:
    Код (Text):
    0AA2: 31@ = load_library "kernel32.dll" // IF and SET
    0AA4: 30@ = get_proc_address "GetModuleHandleA" library 31@ // IF and SET
    0AA7: call_function 30@ num_params 1 pop 0 "samp.dll" 0@
    0A8E: 1@ = 0@ + SAMP_DIALOG_CHAT
    0A8D: 2@ = read_memory 1@ size 4 virtual_protect 1
    0AC6: 10@ = label @string offset
    0AB1: call_scm_func @CDXUTDialog__AddButton 8 struct 2@ samp_base 0@ id 0x44 text 10@ x 240 y 32 width 400 height 16
    0AB1: call_scm_func @CDXUTDialog__AddCheckBox 9 struct 2@ samp_base 0@ id 0x43 textpointer 10@ x 240 y 32 width 400 height 16 checked 1
    0AB1: call_scm_func @CDXUTDialog__AddCheckBox 9 struct 2@ samp_base 0@ id 0x42 textpointer 10@ x 240 y 56 width 400 height 16 checked 1
    0AB1: call_scm_func @CDXUTDialog__AddCheckBox 9 struct 2@ samp_base 0@ id 0x41 textpointer 10@ x 240 y 80 width 400 height 16 checked 1
    0A93: end_custom_thread
    :string
    hex
    "STRING" 00
    end
    Создает кнопку и три чекбокса в окне чата
     
    Последние данные очков репутации:
    mgmoldova: 1 Очко (+) 18 май 2013
    #7
    mgmoldova нравится это.
  8. MISTER_GONWIK

    Регистрация:
    09.03.13
    Сообщения:
    898
    Лайки:
    960
    Репутация:
    621
    Описание: показывает текущий текст текстдрава сервера
    Использование: 0AB1: call @getText 2 0@ 28@ return: 27@
    Код:
    Код (Text):
    :getText
    {
        Example: 0AB1: call @getText 2 0@ 28@ return: 27@
        In: 0@ - SAMP BASE; 1@ - TextDraw ID;
        Out: 4@ - text
    }
        0085: 2@ = 0@
        2@ += 2173496
        0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
        2@ += 979
        0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
        2@ -= 9224
        3@ = 4
        006A: 3@ *= 1@
        005A: 2@ += 3@
        0A8D: 4@ = read_memory 2@ size 4 virtual_protect 0
    0AB2: ret 1 4@
    Пример:
    Код (Text):
    :load_samp_base
    if not 0@ = SAMP.Base()
    then 0A93: end_custom_thread
    end
    while not SAMP.Available()
        wait 100
    end

    0B34: samp register_client_command "getText" to_label @Test

    while true
    wait 0
       
    end

    :Test
    0B35: samp 30@ = get_last_command_params
    if 0AD4: 29@ = scan_string 30@ format "%d" 28@
    then
        if 29@ == 1
        then
            0AB1: call @getText 2 0@ 28@ return: 27@
            0AF8: samp add_message_to_chat "TextDraw ID: %d Text: %s" color 0xFF61BB 28@ 27@
        end  
    end
    cmd_ret

    :getText
    {
        Example: 0AB1: call @getText 2 0@ 28@ return: 27@
        In: 0@ - SAMP BASE; 1@ - TextDraw ID;
        Out: 4@ - text
    }
        0085: 2@ = 0@
        2@ += 2173496
        0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
        2@ += 979
        0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
        2@ -= 9224
        3@ = 4
        006A: 3@ *= 1@
        005A: 2@ += 3@
        0A8D: 4@ = read_memory 2@ size 4 virtual_protect 0
    0AB2: ret 1 4@
     
    #8
    legend2360 и mgmoldova нравится это.
  9. mgmoldova

    mgmoldova Товарищ mgmoldova
    Проверенный

    Регистрация:
    18.03.13
    Сообщения:
    262
    Лайки:
    168
    Репутация:
    144
    Описание: копирует строку чата сервера в переменную
    Использование: 0AB1: call @getChatEntryText 1 id 0@ to 1@
    Код:
    Код (Text):
    :getChatEntryText
    // 0AB1: call @getChatEntryText 1 id 0@ to 1@
    { In 0@ - номер строки чата. Всего 99.
    Out 1@ - переменная с строкой чата }
    1@ = samp.Base()
    1@ += 0x212A24 // SAMP_CHAT_INFO_OFFSET  03x
    0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
    1@ += 0x136
    0@ *= 252 // size of stChatEntry
    005A: 1@ += 0@ // (int)
    1@ += 28
    0AB2: ret 1 1@
    Пример:
    Код (Text):
    :reply
    0AC8: 1@ = allocate_memory_size 260
    0AB1: call @getChatEntryText 1 id 99 to 1@
    0AF9: samp say_msg "%s" 1@
    0AC9: free_allocated_memory 1@
    0B43: cmd_ret

    :getChatEntryText
    // 0AB1: call @getChatEntryText 1 id 0@ to 1@
    1@ = samp.Base()
    1@ += 0x212A24 // SAMP_CHAT_INFO_OFFSET  03x
    0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
    1@ += 0x136
    0@ *= 252 // size of stChatEntry
    005A: 1@ += 0@ // (int)
    1@ += 28
    0AB2: ret 1 1@
     
    Последние данные очков репутации:
    legend2360: 1 Очко (+) 19 май 2013
    gcode: 1 Очко (Спасибо!) 3 июл 2013
    #9
    1337coder, gcode и legend2360 нравится это.
  10. MISTER_GONWIK

    Регистрация:
    09.03.13
    Сообщения:
    898
    Лайки:
    960
    Репутация:
    621
    Описание: возвращает структуру пикапа
    Использование: 0AB1: call @getPickUpStructure 2 0@ 28@ return: 23@ 24@ 25@ 26@ 27@
    Код:
    Код (Text):
    :getPickUpStructure
    //
    //    Example: 0AB1: call @getPickUpStructure 2 0@ 28@ return: 23@ 24@ 25@ 26@ 27@
    //    In: 0@ - SAMP BASE; 1@ - PickUp ID;
    //    Out: 4@ - model; 5@ - type; 6@,7@,8@ - X Y Z pos;
    //
        0085: 2@ = 0@ // (int)
        2@ += 0x212A38
        0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
        2@ += 0x3D3
        0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
        2@ += 0x1BF08
        2@ += 0x7000
        3@ = 20
        006A: 3@ *= 1@
        005A: 2@ += 3@
        0A8D: 4@ = read_memory 2@ size 4 virtual_protect 0  //model
        2@ += 4
        0A8D: 5@ = read_memory 2@ size 4 virtual_protect 0  //type
        2@ += 4
        0A8D: 6@ = read_memory 2@ size 4 virtual_protect 0  //X
        2@ += 4
        0A8D: 7@ = read_memory 2@ size 4 virtual_protect 0  //Y
        2@ += 4
        0A8D: 8@ = read_memory 2@ size 4 virtual_protect 0  //Z
    0AB2: ret 5 4@ 5@ 6@ 7@ 8@
    Пример:
    Код (Text):
    {$CLEO .cs}
    wait 0

    :load_samp_base
    if not 0@ = SAMP.Base()
    then 0A93: end_custom_thread
    end
    while not SAMP.Available()
        wait 100
    end

    0B34: samp register_client_command "pickupinfo" to_label @Test

    while true
    wait 0
     
    end

    :Test
    0B35: samp 30@ = get_last_command_params
    if 0AD4: 29@ = scan_string 30@ format "%d" 28@
    then
        if 29@ == 1
        then
            0AB1: call @getPickUpStructure 2 0@ 28@ return: 23@ 24@ 25@ 26@ 27@
            0AF8: samp add_message_to_chat "PickUp: %d Model: %d Type: %d Position: %.2f %.2f %.2f" color 0xFF61BB 28@ 23@ 24@ 25@ 26@ 27@
        end
    end
    cmd_ret

    :getPickUpStructure
    //
    //    Example: 0AB1: call @getPickUpStructure 2 0@ 28@ return: 23@ 24@ 25@ 26@ 27@
    //    In: 0@ - SAMP BASE; 1@ - PickUp ID;
    //    Out: 4@ - model; 5@ - type; 6@,7@,8@ - X Y Z pos;
    //
        0085: 2@ = 0@ // (int)
        2@ += 0x212A38
        0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
        2@ += 0x3D3
        0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
        2@ += 0x1BF08
        2@ += 0x7000
        3@ = 20
        006A: 3@ *= 1@
        005A: 2@ += 3@
        0A8D: 4@ = read_memory 2@ size 4 virtual_protect 0  //model
        2@ += 4
        0A8D: 5@ = read_memory 2@ size 4 virtual_protect 0  //type
        2@ += 4
        0A8D: 6@ = read_memory 2@ size 4 virtual_protect 0  //X
        2@ += 4
        0A8D: 7@ = read_memory 2@ size 4 virtual_protect 0  //Y
        2@ += 4
        0A8D: 8@ = read_memory 2@ size 4 virtual_protect 0  //Z
    0AB2: ret 5 4@ 5@ 6@ 7@ 8@
     
    Последние данные очков репутации:
    legend2360: 1 Очко 16 июл 2013
    #10
    Последнее редактирование модератором: 24 дек 2014
  11. Dark_Knight

    Dark_Knight Фипа не обижать. Я його "кохаю".
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    1.989
    Лайки:
    518
    Репутация:
    176
    Описание: получает цвет ника игрока в палитре RGB
    Использование: 0AB1: call @get_player_color 1 id 0@ to 1@ 2@ 3@
    Код:
    Код (Text):
    :get_player_color
    {
    Params:
    In: 0@ - playerID
    Out: 1@, 2@, 3@ - RGB Player Color
    }
    0AF7: get_samp_base_to 3@ // IF and SET
    3@ += 0x1FA348// SAMP_COLOR_OFFSET
    0@ *= 4
    005A: 3@ += 0@ // (int)
    3@ += 3
    0A8D: 1@ = read_memory 3@ size 1 virtual_protect 1 // Red
    3@ -= 1
    0A8D: 2@ = read_memory 3@ size 1 virtual_protect 1 // Green
    3@ -= 1
    0A8D: 3@ = read_memory 3@ size 1 virtual_protect 1 // Blue
    0AB2: ret 3 1@ 2@ 3@
    Пример:
    Код (Text):
    {$CLEO}

    if
    not 29@ = samp.Base()
    then
    end_thread
    end

    repeat
    wait 400
    until samp.Available()

    call @CheckDirectory 0
    call @CheckFile 0

    03F0: enable_text_draw 1

    while true
    wait 0
    0@ = samp.GetSAMPPlayerIDByActorHandle($player_actor)
    call @get_player_color 1 0@ 1@ 2@ 3@
    call @getDrawBoxSetting 0 4@ 5@ 6@ 7@ 8@
    038E: draw_box_position 4@ 5@ size 6@ 7@ RGBA 1@ 2@ 3@ 8@
    end

    :get_player_color
    {
    Params:
    In: 0@ - playerID
    Out: 1@, 2@, 3@ - RGB Player Color

    Example: call @get_player_color 1 id 0@ to 1@ 2@ 3@
    }
    0AF7: get_samp_base_to 3@ // IF and SET
    3@ += 0x1FA348// SAMP_COLOR_OFFSET
    0@ *= 4
    005A: 3@ += 0@ // (int)
    3@ += 3
    0A8D: 1@ = read_memory 3@ size 1 virtual_protect 1 // Red
    3@ -= 1
    0A8D: 2@ = read_memory 3@ size 1 virtual_protect 1 // Green
    3@ -= 1
    0A8D: 3@ = read_memory 3@ size 1 virtual_protect 1 // Blue
    0AB2: ret 3 1@ 2@ 3@

    :getDrawBoxSetting
    0AF2: 0@ = get_float_from_ini_file "cleo\ini\PlayerColor.ini" section "DrawBox" key "PositionX"
    0AF2: 1@ = get_float_from_ini_file "cleo\ini\PlayerColor.ini" section "DrawBox" key "PositionY"
    0AF2: 2@ = get_float_from_ini_file "cleo\ini\PlayerColor.ini" section "DrawBox" key "SizeX"
    0AF2: 3@ = get_float_from_ini_file "cleo\ini\PlayerColor.ini" section "DrawBox" key "SizeY"
    0AF0: 4@ = get_int_from_ini_file "cleo\ini\PlayerColor.ini" section "DrawBox" key "Transparency"
    ret 5 0@ 1@ 2@ 3@ 4@

    :CheckDirectory
    if
    8AE4: directory_exist "Cleo\ini"
    then
    0AE5: create_directory "Cleo\ini"
    end
    ret 0

    :CheckFile
    if
    8AAB: file_exists "cleo\ini\PlayerColor.ini"
    then
    file.Open(0@, "cleo\ini\PlayerColor.ini", "at")
    0AF3: write_float 580.0 to_ini_file "cleo\ini\PlayerColor.ini" section "DrawBox" key "PositionX"
    0AF3: write_float 360.0 to_ini_file "cleo\ini\PlayerColor.ini" section "DrawBox" key "PositionY"
    0AF3: write_float 16.0 to_ini_file "cleo\ini\PlayerColor.ini" section "DrawBox" key "SizeX"
    0AF3: write_float 16.0 to_ini_file "cleo\ini\PlayerColor.ini" section "DrawBox" key "SizeY"
    0AF1: write_int 255 to_ini_file "cleo\ini\PlayerColor.ini" section "DrawBox" key "Transparency"
    file.close(0@)
    end
    ret 0
     
    Последние данные очков репутации:
    SR_team: 4 Очки (Ну ахуеть. Оно мне пригодилось :D) 12 ноя 2014
    #11
    Nevrouz нравится это.
  12. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    684
    Лайки:
    1.460
    Репутация:
    628
    Код (CLEO):
    var
    0@ : float
    1@ : float
    2@ : float
    3@ : float
    4@ : float
    5@ : float
    6@ : float
    7@ : float
    8@ : float
    end

    :scfpaawo
    :store_coords_from_point_and_angle_with_offset
    //
    // 0AB1: @scfpaawo 7 point 0@ 1@ 2@ angle 3@ offsets 10.0 10.0 0.0 store_to 7@ 8@ 9@
    //
    //3@ *= -1.0
    02F7: 7@ = cosine 3@ // (float)
    02F6: 8@ = sine 3@ // (float)
    7@ *= 4@
    8@ *= 4@
    0@ += 7@ // (float)
    1@ += 8@ // (float)
    3@ *= -1.0
    02F6: 7@ = sine 3@ // (float)
    02F7: 8@ = cosine 3@ // (float)
    7@ *= 5@
    8@ *= 5@
    0@ += 7@ // (float)
    1@ += 8@ // (float)
    2@ += 6@
    0AB2: ret 3 0@ 1@ 2@
    Код (Text):
    :store_camera_angle
    //
    // 0AB1: @store_camera_angle 0 angle_to 7@
    //
    068D: get_camera_position_to 2@ 3@ 4@
    068E: get_camera_target_point_to 5@ 6@ 7@
    0063: 5@ -= 2@ // (float)
    0063: 6@ -= 3@ // (float)
    0604: get_Z_angle_for_point 5@ 6@ store_to 7@
    0AB2: ret 1 7@
    Код (Text):
    :readStringFromList
    // call @readStringFromList 2 list @patcheslist string_number 1@ to 3@
    var
    1@ : int
    2@ : int
    end

    0AC6: 0@ = label 0@ offset
    0@ += 4
    2@ = 0
    while 2@ < 1@
        3@ = 1
        while 3@ <> 0
            0A8D: 3@ = read_memory 0@ size 1 virtual_protect 0
            inc(0@)
        end
        0@ += 3
        inc(2@)
    end

    ret 1 0@
    Пример:
    Код (Text):
    {$CLEO}

    wait 0

    if not 0@ = samp.Base()
    then 0a93:
    end
    while not samp.Available()
    wait 100
    end
    0AC8: 0@ = allocate_memory_size 260
    0AC8: 5@ = allocate_memory_size 260
    10@ = 0
    while true
        wait 0
        if key_pressed 0x31
        then
            call @readStringFromList 2 list @patcheslist string_number 0 to 3@
            0AD3: string 0@ format "%s" 3@
            for 1@ = 1 to 3
                call @readStringFromList 2 list @patcheslist string_number 1@ to 3@
                0AD3: string 5@ format "%s%c%cFF0000%c%s" 0@ 10 0x7B 0x7D 3@
                0AD3: string 0@ format "%s" 5@
            end
            0B3B: samp show_dialog id 2 caption "Example" text 5@ button_1 "Ok" button_2 "" style 2
            wait 1000
            10@ += 1
        end
    end

    :patcheslist
    0900: "Watafak"
    0900: "OMFG"
    0900: "Dafuq"
    0900: "Trololo"
    0000:
    Примечание: необходимо использовать в цикле с нулевой задержкой.
    Код (Text):
    const
    TIMER_OFFSET = 0xB7CB84
    end

    :FPS
    // in: 0@ - frameCounter, 1@, 2@, 3@, 4@ - fpsBuf, 5@ - fpsTime, 6@ - fpsDisplay. out: 0@ - frameCounter, 1@, 2@, 3@, 4@ - fpsBuf, 5@ - fpsTime, 6@ - fpsDisplay
    0@ += 1.0 // fpsFrameCounter++;
    0A8D: 7@ = read_memory TIMER_OFFSET size 4 virtual_protect 0 // GetTickCount
    0085: 8@ = 7@ // (int)
    0062: 7@ -= 5@ // (int)
    if 7@ > 240 // if ( (GetTickCount() - 240) > fps_time )
    then
    0087: 4@ = 3@ // fpsBuf4 = fpsBuf3;
    0087: 3@ = 2@ // fpsBuf3 = fpsBuf2;
    0087: 2@ = 1@ // fpsBuf2 = fpsBuf1;

    // fpsBuf1 = ( fpsFrameCounter * 4 );
    0087: 1@ = 0@
    1@ *= 4.0

    // fpsDisplay = ( fpsBuf1 + fpsBuf2 + fpsBuf3 + fpsBuf4 ) / 4.0;
    0087: 6@ = 1@
    005B: 6@ += 2@ // (float)
    005B: 6@ += 3@ // (float)
    005B: 6@ += 4@ // (float)
    6@ /= 4.0

    // fpsFrameCounter = 0;
    0@ = 0.0

    // fps_time = GetTickCount();
    0085: 5@ = 8@
    end
    ret 7 0@ 1@ 2@ 3@ 4@ 5@ 6@
    Пример:
    Код (Text):
    03F0: enable_text_draw 1
    0@ = 0.0
    1@ = 0.0
    2@ = 0.0
    3@ = 0.0
    4@ = 0.0
    5@ = 0
    6@ = 0.0

    while true

        wait 0
        if player.Defined(0)
        jf continue
     
        call @FPS 7 in 0@ 1@ 2@ 3@ 4@ 5@ 6@ out 0@ 1@ 2@ 3@ 4@ 5@ 6@
        0092: 8@ = float 6@ to_integer
        045A: draw_text_1number 85.0 425.0 GXT 'NUMBER' number 8@
     
    end
    Код (Text):
    :cheat_actor_teleport
    0A96: 4@ = actor 0@ struct
    4@ += 20
    0A8D: 4@ = read_memory 4@ size 4 virtual_protect 0
    4@ += 48 // X
    0A8C: write_memory 4@ size 4 value 1@ virtual_protect 0 // X
    4@ += 4 // Y
    0A8C: write_memory 4@ size 4 value 2@ virtual_protect 0 // Y
    4@ += 4 // Z
    0A8C: write_memory 4@ size 4 value 3@ virtual_protect 0 // Z
    ret 0
     
    Последние данные очков репутации:
    includelow: 2 Очки (+) 27 май 2013
    mauvais_ton: 1 Очко (+++) 28 сен 2013
    AW_Rage: 1 Очко (Люблю.) 2 фев 2016
    #12
    Последнее редактирование: 20 авг 2015
    Шелди, 4el0ve4ik, Smile и 8 другим нравится это.
  13. MogAika

    Друг

    Регистрация:
    18.03.13
    Сообщения:
    244
    Лайки:
    268
    Репутация:
    202
    Код (Text):
    //0AB1: @asm_call_hook 3 offset 1@ function 2@ virtual_protect 1
    :asm_call_hook
    0A8C: write_memory 0@ size 1 value 0xE8 virtual_protect 2@
    0062: 1@ -= 0@ // (int)
    000E: 1@ -= 5
    0@ += 1
    0A8C: write_memory 0@ size 4 value 1@ virtual_protect 2@
    0AB2: ret 0
    Код (Text):
    //0AB1: @asm_call_hook_module 4 module 0@ offset 1@ function 2@ virtual_protect 1
    :asm_call_hook_module
    005A: 1@ += 0@ // (int)
    0A8C: write_memory 1@ size 1 value 0xE8 virtual_protect 3@
    0062: 2@ -= 1@ // (int)
    000E: 2@ -= 5
    1@ += 1
    0A8C: write_memory 1@ size 4 value 2@ virtual_protect 3@
    0AB2: ret 0
    Код (Text):
    //0AB1: @asm_jmp_hook 3 offset 1@ function 2@ virtual_protect 1
    :asm_jmp_hook
    0A8C: write_memory 0@ size 1 value 0xE9 virtual_protect 2@
    0062: 1@ -= 0@ // (int)
    000E: 1@ -= 5
    0@ += 1
    0A8C: write_memory 0@ size 4 value 1@ virtual_protect 2@
    0AB2: ret 0
    Код (Text):
    //0AB1: @asm_jmp_hook_module 4 module 0@ offset 1@ function 2@ virtual_protect 1
    :asm_jmp_hook_module
    005A: 1@ += 0@ // (int)
    0A8C: write_memory 1@ size 1 value 0xE9 virtual_protect 3@
    0062: 2@ -= 1@ // (int)
    000E: 2@ -= 5
    1@ += 1
    0A8C: write_memory 1@ size 4 value 2@ virtual_protect 3@
    0AB2: ret 0
     
    Последние данные очков репутации:
    povargek: 1 Очко (ЧУВАК ТИ ТАЩИР ЙА НИХИРА НИПОНЯТЬ.) 12 июн 2013
    Stas07: 1 Очко (Мозг лопнул, но я понял.) 27 июн 2013
    SR_team: 3 Очки (Вот и мне пригодилось. Ахахаха) 13 янв 2016
    #13
    Шелди, Niko., spiceman и 5 другим нравится это.
  14. Dark_Knight

    Dark_Knight Фипа не обижать. Я його "кохаю".
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    1.989
    Лайки:
    518
    Репутация:
    176
    Функция получение системного времени компьютера
    Код (Text):
    :GetSystemTime
    /*
        Params:
            In: None
            Out: wYear 4@ wMonth 5@ wDayOfWeek 6@ wDay 7@ wHour 8@ wMinute 9@ wSeconds 10@ wMiliseconds 11@

        Example:
            0AB1: Call @GetLocalTime 0 wYear 4@ wMonth 5@ wDayOfWeek 6@ wDay 7@ wHour 8@ wMinute 9@ wSeconds 10@ wMiliseconds 11@
    */
    0AA2: 0@ = load_library "kernel32.dll"
    0AA4: 1@ = get_proc_address "GetSystemTime" library 0@
    0AC8: 2@ = alloc mem 16
    0AA5: call 1@ params 1 pop 0 2@
    0085: 3@ = 2@

    0A8D: 4@ = read mem 3@ size 2 vp 0 // wYear
    3@ += 2

    0A8D: 5@ = read mem 3@ size 2 vp 0 // wMonth
    3@ += 2

    0A8D: 6@ = read mem 3@ size 2 vp 0 // wDayOfWeek
    3@ += 2

    0A8D: 7@ = read mem 3@ size 2 vp 0 // wDay
    3@ += 2

    0A8D: 8@ = read mem 3@ size 2 vp 0 // wHour
    3@ += 2

    0A8D: 9@ = read mem 3@ size 2 vp 0 // wMinute
    3@ += 2

    0A8D: 10@ = read mem 3@ size 2 vp 0 // wSecond
    3@ += 2

    0A8D: 11@ = read mem 3@ size 2 vp 0 // wMilliseconds

    0AC9: free_allocated_memory 2@
    ret 8 4@ 5@ 6@ 7@ 8@ 9@ 10@ 11@
    Функция получение локального времени компьютера
    Код (Text):
    :GetLocalTime
    /*
        Params:
            In: None
            Out: wYear 4@ wMonth 5@ wDayOfWeek 6@ wDay 7@ wHour 8@ wMinute 9@ wSeconds 10@ wMiliseconds 11@

        Example:
            0AB1: Call @GetLocalTime 0 wYear 4@ wMonth 5@ wDayOfWeek 6@ wDay 7@ wHour 8@ wMinute 9@ wSeconds 10@ wMiliseconds 11@
    */
    0AA2: 0@ = load_library "kernel32.dll"
    0AA4: 1@ = get_proc_address "GetLocalTime" library 0@
    0AC8: 2@ = alloc mem 16
    0AA5: call 1@ params 1 pop 0 2@
    0085: 3@ = 2@

    0A8D: 4@ = read mem 3@ size 2 vp 0 // wYear
    3@ += 2

    0A8D: 5@ = read mem 3@ size 2 vp 0 // wMonth
    3@ += 2

    0A8D: 6@ = read mem 3@ size 2 vp 0 // wDayOfWeek
    3@ += 2

    0A8D: 7@ = read mem 3@ size 2 vp 0 // wDay
    3@ += 2

    0A8D: 8@ = read mem 3@ size 2 vp 0 // wHour
    3@ += 2

    0A8D: 9@ = read mem 3@ size 2 vp 0 // wMinute
    3@ += 2

    0A8D: 10@ = read mem 3@ size 2 vp 0 // wSecond
    3@ += 2

    0A8D: 11@ = read mem 3@ size 2 vp 0 // wMilliseconds

    0AC9: free_allocated_memory 2@
    ret 8 4@ 5@ 6@ 7@ 8@ 9@ 10@ 11@
     
    Последние данные очков репутации:
    legend2360: 1 Очко (wow! Замечательно! Закидал бы плюсами очками :D) 28 июн 2013
    AW_Rage: 1 Очко (+rep) 10 янв 2016
    RedBoxWhite: 1 Очко (Годно) 14 авг 2016
    #14
    RedBoxWhite, AWRage и _Jerry_ нравится это.
  15. MISTER_GONWIK

    Регистрация:
    09.03.13
    Сообщения:
    898
    Лайки:
    960
    Репутация:
    621
    Описание: копирует строку от символа до символа
    Использование: call @copy_string 4 text 0@ start 0 end 9 to_buffer 1@
    Код:
    Код (Text):
    :copy_string
    var
        1@: int
        2@: int
        4@: int
        5@: int
    end
    if 1@ < 0
    then
        059A: return_false
        ret 0
    end
    0C17: 5@ = strlen 0@
    if 2@ > 5@
    then
        2@ = 5@
    end
    if 5@ <= 0
    then
        059A: return_false
        ret 0
    end
    if 2@ < 1@
    then
        059A: return_false
        ret 0
    end
    if 1@ >= 1
    then
        for 4@ = 0 to 1@
        inc(0@)
        end
    end
    2@ -= 1@
    inc(2@)
    0C10: memcpy destination 3@ source 0@ size 2@
    0485: return_true
    ret 0
     
    Последние данные очков репутации:
    gcode: 1 Очко (Спасибо!) 3 июл 2013
    #15
    BUSHIDO32, mgmoldova, gcode и ещё 1-му нравится это.
  16. MISTER_GONWIK

    Регистрация:
    09.03.13
    Сообщения:
    898
    Лайки:
    960
    Репутация:
    621
    Описание: ищет нужное вам слово в строке и возвращает результат (работает как условие)
    Использование: call @search_text_in_the_text 2 0@ 1@ // 0@ - текст, 1@ - слово
    Код:
    Код (Text):
    :search_text_in_the_text
    var
        2@:int
        3@:int
        4@:int
        5@:int
        7@:int
        8@:int
    end
    7@ = 0
    0C17: 4@ = strlen 0@
    0C17: 8@ = strlen 1@
    if or
    8@ > 4@
    8@ <= 0
    then
        059A: return_false
        ret 0
    end
    0AC8: 6@ = 1024
    0C11: memset destination 6@ value 0 size 1024
    0C10: memcpy destination 6@ source 1@ size 8@
    for 5@ = 0 to 4@
    0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0
    0A8D: 3@ = read_memory 1@ size 1 virtual_protect 0
        if 2@ == 3@
        then
            inc(1@)
            inc(7@)
        else
            7@ = 0
            0C10: memcpy destination 1@ source 6@ size 8@    
        end
        if 7@ == 8@
        then
            0485: return_true
            ret 0    
        end
    inc(0@)
    end
    059A: return_false
    0AC9: 6@
    ret 0
     
    Последние данные очков репутации:
    gcode: 1 Очко 4 июл 2013
    Charlatan: 2 Очки (Nice) 4 июл 2013
    legend2360: 1 Очко 12 июл 2013
    #16
    legend2360, Z0DY и gcode нравится это.
  17. alfazlo

    alfazlo Известный пользователь

    Регистрация:
    15.04.13
    Сообщения:
    129
    Лайки:
    36
    Репутация:
    61
    Описание: Рассчитывает кватернион(quaternion) из матрицы.
    Использование: 0AB1: call_scm_func @Quaternion_get 1 matrix_pointer 0@ Quat_w 1@ Quat_x 2@ Quat_y 3@ Quat_z 4@
    Код:
    Код (Text):
    :Quaternion_get
    wait 0
    {
    0A96: @ = actor $PLAYER_ACTOR struct
    0A97: @ = car @ struct
    0A98: @ = object @ struct
    0C0C: @ = struct @ offset 20 size 4 //matrix pointer
    0AB1: call_scm_func @Quaternion_get 1 matrix_pointer @ Quat_x @ Quat_y @ Quat_z @ Quat_w @
    }
    0C0C: 1@ = struct 0@ offset 0 size 4
    0C0C: 2@ = struct 0@ offset 4 size 4
    0C0C: 3@ = struct 0@ offset 8 size 4
    0C0C: 4@ = struct 0@ offset 16 size 4
    0C0C: 5@ = struct 0@ offset 20 size 4
    0C0C: 6@ = struct 0@ offset 24 size 4
    0C0C: 7@ = struct 0@ offset 32 size 4
    0C0C: 8@ = struct 0@ offset 36 size 4
    0C0C: 9@ = struct 0@ offset 40 size 4
     
    005B: 10@ = 1@
    005B: 10@ += 5@
    005B: 10@ += 9@
     
    if 0021: 10@ > 0.0
    then
    0007: 0@ = 0.5
    000B: 10@ += 1.0
    01FB: sqrt 10@ store_to 10@
    0073: 0@ /= 10@  //s
    0007: 15@ = 0.25
    0073: 15@ /= 0@ //w
    005B: 16@ = 8@  //x
    0063: 16@ -= 6@
    006B: 16@ *= 0@
    005B: 17@ = 3@  //y
    0063: 17@ -= 7@
    006B: 17@ *= 0@
    005B: 18@ = 4@  //z
    0063: 18@ -= 2@
    006B: 18@ *= 0@
    else if and
        0025: 1@ > 5@
        0025: 1@ > 9@
        then
        0007: 0@ = 2.0
        0007: 10@ = 1.0
        005B: 10@ += 1@
        0063: 10@ -= 5@
        0063: 10@ -= 9@
        01FB: sqrt 10@ store_to 10@
        006B: 0@ *= 10@ //s
        005B: 15@ = 8@ //w
        0063: 15@ -= 6@
        0073: 15@ /= 0@
        0007: 16@ = 0.25 //x
        006B: 16@ *= 0@
        005B: 17@ = 2@
        005B: 17@ += 4@
        0073: 17@ /= 0@
        005B: 18@ = 3@
        005B: 18@ += 7@
        0073: 18@ /= 0@
        else if 0025: 5@ > 9@
              then
            0007: 0@ = 2.0
            0007: 10@ = 1.0
            005B: 10@ += 5@
            0063: 10@ -= 1@
            0063: 10@ -= 9@
            01FB: sqrt 10@ store_to 10@
            006B: 0@ *= 10@ //s
            005B: 15@ = 3@ //w
            0063: 15@ -= 7@
            0073: 15@ /= 0@
            005B: 16@ = 2@ //x
            005B: 16@ += 4@
            0073: 16@ /= 0@
            0007: 17@ = 0.25 //y
            006B: 17@ *= 0@
            005B: 18@ = 6@  //z
            005B: 18@ += 8@
            0073: 18@ /= 0@
              else
            0007: 0@ = 2.0
            0007: 10@ = 1.0
            005B: 10@ += 9@
            0063: 10@ -= 1@
            0063: 10@ -= 5@
            01FB: sqrt 10@ store_to 10@
            006B: 0@ *= 10@ //s
            005B: 15@ = 4@ //w
            0063: 15@ -= 2@
            0073: 15@ /= 0@
            005B: 16@ = 3@ //x
            005B: 16@ += 7@
            0073: 16@ /= 0@
            005B: 17@ = 6@  //y
            005B: 17@ += 8@
            0073: 17@ /= 0@
            0007: 18@ = 0.25 //z
            006B: 18@ *= 0@
            end
        end
    end          
    0AB2: ret 4 15@ 16@ 17@ 18@
     
    Последние данные очков репутации:
    mgmoldova: 1 Очко (Да ты про.) 8 июл 2013
    gcode: 1 Очко (уау) 8 июл 2013
    legend2360: 1 Очко 10 июл 2013
    #17
    woksonal, DarkP1xel и gcode нравится это.
  18. MISTER_GONWIK

    Регистрация:
    09.03.13
    Сообщения:
    898
    Лайки:
    960
    Репутация:
    621
    Код (Text):
    //call @convert_string 1 1@
    :convert_string
    var
        1@: int
        2@: int
        3@: int
        4@: int
        5@: int
    end
    0C17: 1@ = strlen 0@
    dec(1@)
    for 2@ = 0 to 1@
        0A8D: 3@ = read_memory 0@ size 1 virtual_protect 0
        if and
        3@ > 191
        3@ < 256
        then
            3@ -= 192
            0AC6: 5@ = label @chars offset
            0C0C: 4@ = struct 5@ offset 3@ size 1
            0A8C: write_memory 0@ size 1 value 4@ virtual_protect 0
        else if 3@ == 168
        then 0A8C: write_memory 0@ size 1 value 69 virtual_protect 0
        else if 3@ == 184
        then 0A8C: write_memory 0@ size 1 value 101 virtual_protect 0
        else if 3@ == 97
        then 0A8C: write_memory 0@ size 1 value 97 virtual_protect 0                  
        end                                          
        end  
        end
        end
        inc(0@)
    end
    ret 0
     
    :chars                              
    hex
        41 80 8B 82 83 45 84 88 85 86 4B 87 4D AD 4F 8C 50 43 8F 59 81 58 89 8D 8E 8A 90 91 92 93 94 95 61 97 A2 99 9A 65 9B 9F 9C 9D 6B 9E AF AE 6F A3 70 63 A6 79 98 78 A0 A4 A5 A1 A7 A8 A9 AA AB AC 00
    end
     
    Последние данные очков репутации:
    alfazlo: 1 Очко 4 авг 2013
    Enjoy$$: 1 Очко (!) 4 авг 2013
    legend2360: 1 Очко 4 авг 2013
    #18
    legend2360, Enjoy$$, Charlatan и ещё 1-му нравится это.
  19. legend2360

    legend2360 Ух как люблю скобочки

    Регистрация:
    23.03.13
    Сообщения:
    1.989
    Лайки:
    644
    Репутация:
    412
    Получение цвета строки:
    Код (Text):
    :getChatEntryColor
    // 0AB1: @getChatEntryColor 1 id 0@ to 1@
    1@ = SAMP.Base() // SAMP Base
    1@ += 0x212A6C // stChatInfo
    0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
    1@ += 310 // stChatEntry
    0@ *= 252 // sizeof stChatEntry
    005A: 1@ += 0@ //
    1@ += 240 // Color
    0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 // HEX Color
    0AB2: ret 1 1@
    Код (Text):
    {$CLEO}
     
    0000:
     
    wait 2000
    while true
        wait 0
        0AB1: @getChatEntryColor 1 id 99 to 1@
        0AF8: samp add_message_to_chat "Color ARGB: 0x%X" color 1@ 1@
        wait 1500
    end
     
    :getChatEntryColor
    // 0AB1: @getChatEntryColor 1 id 0@ to 1@
    1@ = SAMP.Base() // SAMP Base
    1@ += 0x212A24 // stChatInfo
    0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
    1@ += 306 // stChatEntry
    0@ *= 252 // sizeof stChatEntry
    005A: 1@ += 0@ //
    1@ += 244 // Color
    0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 // HEX Color
    0AB2: ret 1 1@
     
    Последние данные очков репутации:
    MISTER_GONWIK: 3 Очки 11 авг 2013
    gcode: 2 Очки 12 авг 2013
    Dark_Knight: 2 Очки (Молодец.) 12 авг 2013
    #19
    Recovery, Dark_Knight, gcode и ещё 1-му нравится это.
  20. legend2360

    legend2360 Ух как люблю скобочки

    Регистрация:
    23.03.13
    Сообщения:
    1.989
    Лайки:
    644
    Репутация:
    412
    Проверяет игрока(локального, т.е. Вас) на активность(заспавнились ли Вы или ещё "застряли" на авторизации):
    Код (Text):
    :IsActive
    0@ = SAMP.GetSAMPPlayerIDByActorHandle($PLAYER_ACTOR)
    0@ = SAMP.GetPlayerStruct(0@)
    0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
    if 0@ == 1
    then 0485:  return_true
    else 059A:  return_false
    end
    0AB2: 0
    Возвращает 1(true), если Вы заспавнились, иначе 0(false).
    Работает как условие.

    Код (Text):
    {$CLEO}
     
    0000:
     
    while true
        wait 0
        if 0AB1: call @IsActive 0
        then
            0ACD: show_text_highpriority "You are spawned!" time 2000
            wait 2001
            0A93: end_custom_thread
        end
    end

    P.S. Что-то типо Player.Defined :D
    P.S.S. Узнал, что является ещё и проверкой на то, мертвы Вы или нет.
     
    Последние данные очков репутации:
    MogAika: 4 Очки 30 ноя 2013
    luckyFOX: 2 Очки 3 дек 2015
    #20
    luckyFOX и MogAika нравится это.
  21. gcode

    gcode нестандартное звание звание звание звание звани...
    Проверенный

    Регистрация:
    09.06.13
    Сообщения:
    793
    Лайки:
    387
    Репутация:
    359
    Код (PHP):
    :msToTime
    /*
    Параметры:
      Вход: 0@ - количество миллисекунд
      Выход: 1@ - строка формата HH:MM:SS
    Использование:
      0AB1: call @msToTime 1 ms 0@ to 1@
     
      За оптимизацию спасибо M_G
    */

    0@ /= 1000
    2@ = 0@
    2@ /= 3600 // H
    3@ = 2@
    3@ *= 60
    4@ = 0@
    4@ /= 60
    3@ *= -1
    3@ += 4@ // M
    4@ = 3@
    4@ *= 60
    5@ = 2@
    5@ *= 3600
    4@ += 5@
    5@ = 0@
    4@ *= -1
    4@ += 5@ // S
    0AC8: 1@ = allocate_memory_size 9
    0AD3: 1@ = format "%02d:%02d:%02d" 5@ 6@ 7@
    0AB2: ret 1 1@
     
    #21
    AWRage, Tawer_2014 и legend2360 нравится это.
  22. MISTER_GONWIK

    Регистрация:
    09.03.13
    Сообщения:
    898
    Лайки:
    960
    Репутация:
    621
    должно быть вот так
    Код (PHP):
    :msToTime
    0@ /= 1000
    0085: 2@ = 0@
    2@ /= 3600      // H
    0085: 3@ = 2@
    3@ *= 60
    0085: 4@ = 0@
    4@ /= 60
    3@ *= -1
    005A: 3@ += 4@  // M
    0085: 4@ = 3@
    4@ *= 60
    0085: 5@ = 2@
    5@ *= 3600
    005A: 4@ += 5@
    0085: 5@ = 0@
    4@ *= -1
    005A: 4@ += 5@  // S
    0AC8: 1@ = allocate_memory_size 9
    0AD3: 1@ = format "%02d:%02d:%02d" 2@ 3@ 4@
    0AB2: ret 1 1@
     
    #22
  23. legend2360

    legend2360 Ух как люблю скобочки

    Регистрация:
    23.03.13
    Сообщения:
    1.989
    Лайки:
    644
    Репутация:
    412
    Так даже лучше :D :
    Код (PHP):
    :msToTime
    0A91: 1@ = 0@ DIV 3600000 // H
     
    0B14: 20@ = 0@ MOD 3600000
    0A91: 2@ = 20@ DIV 60000 // M
     
    0B14: 20@ = 0@ MOD 60000
    0A91: 3@ = 20@ DIV 1000 // S
    0AB2: ret 3 1@ 2@ 3@  
     
    Последние данные очков репутации:
    MISTER_GONWIK: 3 Очки 1 дек 2013
    #23
    Arkember, Enjoy и MISTER_GONWIK нравится это.
  24. MISTER_GONWIK

    Регистрация:
    09.03.13
    Сообщения:
    898
    Лайки:
    960
    Репутация:
    621
    Код (PHP):
    2@ = 7
    //создание нового текстдрава (если изначально не создан)
    call @new_td 1 2@

    //изменение/получение активности TextDraw'а
    call @get_td_status 1 2@ // IF
    call @set_td_status 2@ 1/0

    //скопировать структуру TextDraw'a #1 в #2
    call @copy_td_to_td 2 _id 2 _id 2@

    //получить текст из текстдрава
    call @get_td_text 1 1@ return: 2@ //возвращает указатель либо 0

    //параметры текстдрава
    call @set_td_text 2 _id 2@ _text 1@
    call @set_td_status 2 _id 2@ _status 1
    call @set_td_pos 3 _id 2@ _fx 250.0 _fy 250.0
    call @set_td_usebox 2 _id 2@ _status 1
    call @set_td_fontstyle 2 _id 2@ _style 3
    call @set_td_lettersize 3 _id 2@ _flx 2.0 _fly 3.0
    call @set_td_color 2 _id 2@ _color 0xFFFFFFFF
    call @set_td_boxcolor 2 _id 2@ _color 0x6000FF60
    call @set_td_shadowcolor 2 _id 2@ _color 0xFF000000
    Код (PHP):
    //////////////////////////////////  GET/SET PARAMS FUNCS  ///////////////////////////////
    :new_td
    var
        0@: int // id
    end
        call @_get_td_ptr 1 0@ return: 1@
        0AC8: 2@ = 3189
        0A8C: write_memory 1@ size 4 value 2@ virtual_protect 0
    ret 0

    :get_td_text
    var
        0@: int // id
    end
        call @_get_td_struct 1 0@ return: 1@
        0A8D: 2@ = read_memory 1@ size 1 virtual_protect 0
        if 2@ > 0
        then ret 1 1@  
        end
    ret 1 0

    :set_td_color
    var
        0@: int //id
        1@: int //color
    end
        call @_get_td_struct 1 0@ return 2@
        0C0D: struct 2@ offset 3083 size 4 = 1@
    ret 0

    :set_td_boxcolor
    var
        0@: int //id
        1@: int //color
    end
        call @_get_td_struct 1 0@ return 2@
        0C0D: struct 2@ offset 3098 size 4 = 1@
    ret 0

    :set_td_shadowcolor
    var
        0@: int //id
        1@: int //color
    end
        call @_get_td_struct 1 0@ return 2@
        0C0D: struct 2@ offset 3103 size 4 = 1@
    ret 0

    :set_td_text
    var
        0@: int //id
        1@: int //text
    end
        call @_get_td_struct 1 0@ return 2@
        0C13: strcpy destination 2@ source 1@
    ret 0

    :set_td_lettersize
    var
        0@: int    //id
        1@: float  //X
        2@: float  //Y
    end
        call @_get_td_struct 1 0@ return 3@
        0C0D: struct 3@ offset 3075 size 4 = 1@
        0C0D: struct 3@ offset 3079 size 4 = 2@
    ret 0

    :set_td_usebox
    var
        0@: int //id
        1@: int //status
    end
        call @_get_td_struct 1 0@ return 3@
        0C0D: struct 3@ offset 3089 size 1 = 1@
    ret 0

    :set_td_pos
    var
        0@: int    //id
        1@: float  //X
        2@: float  //Y
    end
        call @_get_td_struct 1 0@ return 3@
        0C0D: struct 3@ offset 3115 size 4 = 1@
        0C0D: struct 3@ offset 3119 size 4 = 2@
    ret 0

    :set_td_fontstyle
    var
        0@: int //id
        1@: int //style
    end
        call @_get_td_struct 1 0@ return 2@
        0C0D: struct 2@ offset 3111 size 1 = 1@
    ret 0

    //////////////////////////////  GET/SET STATUS FUNCS  ///////////////////////////////
    :get_td_status
    var
        0@: int
    end
        1@ = SAMP.Base()
        1@ += 2173496
        0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
        1@ += 979
        0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
        1@ -= 18440
        call @_add_offset 2 1@ 0@ return: 2@
        0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
        if 2@ == 0
        then ret_false
        else ret_true
        end
    ret 0

    :set_td_status
    var
        0@: int // id
        1@: int // status
    end
        2@ = SAMP.Base()
        2@ += 2173496
        0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
        2@ += 979
        0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
        2@ -= 18440
        call @_add_offset 2 2@ 0@ return: 3@
        0A8C: write_memory 3@ size 4 value 1@ virtual_protect 1
    ret 0

    //////////////////////////////  COPY STRUCT #1 to #2  ///////////////////////////////
    :copy_td_to_td
    var
        0@: int // id - in
        1@: int // id - out
    end
        call @_get_td_struct 1 0@ return: 2@
        call @_get_td_struct 1 1@ return: 3@
        0C10: memcpy destination 3@ source 2@ size 3189
    ret 0

    //////////////////////////////////OTHER///////////////////////////////
    :_get_td_struct
    var
        0@: int // id
    end
        1@ = SAMP.Base()
        1@ += 2173496
        0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
        1@ += 979
        0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
        1@ -= 9224
        call @_add_offset 2 1@ 0@ return: 2@
        0A8D: 3@ = read_memory 2@ size 4 virtual_protect 0
    ret 1 3@

    :_get_td_ptr
    var
        0@: int // id
    end
        1@ = SAMP.Base()
        1@ += 2173496
        0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
        1@ += 979
        0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
        1@ -= 9224
        call @_add_offset 2 1@ 0@ return: 2@
    ret 1 2@

    :_add_offset
    var
        0@: int // start pool
        1@: int // id
    end
        2@ = 4
        006A: 2@ *= 1@
        005A: 0@ += 2@
    ret 1 0@

    //////////////////////////////////////////////////////////////////////////////////////////////
     
    Последние данные очков репутации:
    gcode: 3 Очки 2 дек 2013
    Даниил: -3 Очки 3 дек 2013
    #24
    hnnssy нравится это.
  25. _DK

    _DK Пользователь

    Регистрация:
    05.09.13
    Сообщения:
    6
    Лайки:
    5
    Репутация:
    9
    Так нельзя делать. Память ты выделяешь, а где удаление?
    Для записи числа здесь ("%d") надо выделить 4 байта на число. Если нужно получить указатль на 4 байта, можно обойтись
    Код (Text):
    0AC7: 1@ = var 0@ offset
    Чую, щас пойдут оправдания "Шо ты хочешь, и так всё работёт!"...
     
    #25
  26. Dark_Knight

    Dark_Knight Фипа не обижать. Я його "кохаю".
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    1.989
    Лайки:
    518
    Репутация:
    176
    Если мы очистили память, то инфа с переменной не удалится?
     
    #26
  27. _DK

    _DK Пользователь

    Регистрация:
    05.09.13
    Сообщения:
    6
    Лайки:
    5
    Репутация:
    9
    Не совсем правильно поставлен вопрос, но суть понятна. Да, сразу после удаления к строке уже лучше не обращаться.
    В данной ситуации лучше передавать в функцию указатель уже на выделенную память:
    Код (Text):
    :msToTime // 0AB1: call_scm_func @msToTime 1 _src 0@
     
    0085: 31@ = 0@
    // ...
    0AD3: 31@ = format "%02d:%02d:%02d" 2@ 3@ 4@
    0AB2: ret 0
    Или использовать для записи строки буфер:
    Код (Text):
    :msToTime
    // ...
    0AC6: 31@ = label @msToTime_data offset
    0AD3: 31@ = format "%02d:%02d:%02d" 2@ 3@ 4@
    goto @msToTime_retn
    :msToTime_data
    hex
    00000000 00000000 00000000 00000000
    end
    :msToTime_retn
    0AB2: ret 1 31@
     
    #27
  28. MISTER_GONWIK

    Регистрация:
    09.03.13
    Сообщения:
    898
    Лайки:
    960
    Репутация:
    621
    я ничего не имею против, в некоторых моих scm функциях именно так и делается, выделяется память и передаётся указатель на выделенную память, но видишь ли, это в клео так неудобно использовать, так и выделяется там совсем немного, ну в цикле конечно будет не очень умно использовать, верю, так что пару кб за время игры сильно не повлияют (ну я так думаю, что уйдёт пару кб)
     
    #28
  29. gcode

    gcode нестандартное звание звание звание звание звани...
    Проверенный

    Регистрация:
    09.06.13
    Сообщения:
    793
    Лайки:
    387
    Репутация:
    359
    В скрипте же потом можно обнулить, независимо от функции. Нет?
     
    #29
  30. gcode

    gcode нестандартное звание звание звание звание звани...
    Проверенный

    Регистрация:
    09.06.13
    Сообщения:
    793
    Лайки:
    387
    Репутация:
    359
    Не тестил, должно работать по идее :)
    Код (PHP):
    :get_target_car
    /*
    Параметры:
      Выход: 0@ - Если нацелен на машину, то вернёт хэндл. Если машины по цели нет, то -1
    Использование:
      0AB1: call @get_target_car 0 store_to 0@
    */

    0@ = -1
    4@ = 1.0
    Actor.StorePos($PLAYER_ACTOR, 1@, 2@, 3@)
    3@ += 2.0
    repeat
        wait 0
        0AA6: call_method 0x514970 0xB6F028 num_params 6 pop 0 0xA49994 0xA499A0 3@ 2@ 1@ 4@
        if
            86BD:  not no_obstacles_between 1@ 2@ 3@ and $13 $14 $15 solid 0 car 1 actor 0 object 0 particle 0
        then
            0@ = 0
            Break
        end
        4@ += 1.0
    until 4@ > 800.0
    if
        0@ == 0
    then
        if
            0AE2: 0@ = random_vehicle_near_point $13 $14 $15 in_radius 1.5 find_next 0 pass_wrecked 0
        then
            wait 0
        else
            0@ = -1
        end
    end
    0AB2: ret 1 0@
     
    #30
  31. gcode

    gcode нестандартное звание звание звание звание звани...
    Проверенный

    Регистрация:
    09.06.13
    Сообщения:
    793
    Лайки:
    387
    Репутация:
    359
    Код (PHP):
    :get_serial
    /*
    Спасибо Даниилу за функцию
    Параметры:
      Выход: 0@ - Возвращает серийный номер жёсткого диска, который операционная система присваивает при форматировании.
    Использование:
    if
      0AB1: call @get_serial 0 store_to 0@
    then
      wait 0
    end
    */

    if
          0AA2: 1@ = load_library "kernel32.dll"
    then
        0485:  return_true
        if
            0AA4: 2@ = get_proc_address "GetVolumeInformationA" library 1@
        then
            0AC7: 0@ = var 0@ offset
            0AA5: call 2@ num_params 8 pop 0 0 0 0 0 0@ 0 0 0
        end
    else
        059A:  return_false  
    end
    0AA3: free_library 1@
    0AB2: ret 1 0@
     
    Последние данные очков репутации:
    Даниил: 3 Очки (return_false можно не писать, по-умолчанию вернет это.) 15 дек 2013
    #31
  32. MISTER_GONWIK

    Регистрация:
    09.03.13
    Сообщения:
    898
    Лайки:
    960
    Репутация:
    621
    Код (Text):
    //call @get_my_score 0 return: 0@
    :get_my_score
        0@ = SAMP.Base()
        0@ += 2173496
        0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
        0@ += 983
        0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
        0@ += 32
        0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
    ret 1 0@
     
    Последние данные очков репутации:
    hnnssy: 1 Очко 21 янв 2014
    SR_team: 1 Очко 21 янв 2014
    #32
    1337coder и DubStep_ нравится это.
  33. Opcode.eXe

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

    Регистрация:
    11.04.13
    Сообщения:
    86
    Лайки:
    89
    Репутация:
    51
    You always wanted to run 2 CLEO in one .cs file?
    Its possible! Thanks to Delj?

    FUNCTION:
    Код (Text):
    {
        START NEW THREAD WITHOUT INTERRUPTING MAIN THREAD
        0AB1: call_scm_func @RUN_CLEO_MOD 1 AT LINE @CLEO
    }
     
    :RUN_CLEO_MOD
    0A9F: 32@ = current_thread_pointer
    000A: 32@ += 0x10
    0A8D: 32@ = read_memory 32@ size 4 virtual_protect 0
    0062: 32@ -= 0@
    0AA7: call_function 0x464C20 num_params 1 pop 1 32@ 33@
    005A: 32@ += 0@
    000A: 33@ += 0x10
    0A8C: write_memory 33@ size 4 value 32@ virtual_protect 0
    000A: 33@ += 0x2C
    for 32@ = 0 to 30
        0A8C: write_memory 33@ size 4 value 1@(32@,30i) virtual_protect 0
        000A: 33@ += 4
    end
    0AB2: ret 0
    Howto use this? EXAMPLE:


    Код (Text):
    {$CLEO .cs}
    0000:
    0662: NOP "#########################"
    0662: NOP "___Made by Opcode.eXe___"  { BASIC THREAD }
    0662: NOP "Www.Youtube.Com/OpcodeXe"
    0662: NOP "#########################"
     
    0AB1: call_scm_func @RUN_CLEO_MOD 1 AT LINE @CLEO
     
     
    WHILE TRUE
        wait 0
        if
        0AB0: 49 // X
        then
            0AD1: show_formatted_text_highpriority "CLEO THREAD_1 IS RUNNING! %d" time 1 33@
        end
    END
     
     
    :CLEO
    0000:
    WHILE TRUE
        wait 0
        if
        0AB0: 50 // X
        then
            0AD1: show_formatted_text_highpriority "CLEO THREAD_2 IS RUNNING! %d" time 1 33@
        end
    END
     
     
    :RUN_CLEO
    0A9F: 32@ = current_thread_pointer
    000A: 32@ += 0x10
    0A8D: 32@ = read_memory 32@ size 4 virtual_protect 0
    0062: 32@ -= 0@
    0AA7: call_function 0x464C20 num_params 1 pop 1 32@ 33@
    005A: 32@ += 0@
    000A: 33@ += 0x10
    0A8C: write_memory 33@ size 4 value 32@ virtual_protect 0
    000A: 33@ += 0x2C
    for 32@ = 0 to 30
        0A8C: write_memory 33@ size 4 value 1@(32@,30i) virtual_protect 0
        000A: 33@ += 4
    end
    0AB2: ret 0
     
    Последние данные очков репутации:
    Dark_Knight: 2 Очки (Thanks) 31 янв 2014
    MelomanCool: 1 Очко 16 июн 2016
    #33
    MelomanCool, Quned, SR_team и 2 другим нравится это.
  34. gcode

    gcode нестандартное звание звание звание звание звани...
    Проверенный

    Регистрация:
    09.06.13
    Сообщения:
    793
    Лайки:
    387
    Репутация:
    359
    Получаем позиции ближайших маркеров
    Код (PHP):
    0AB1: call @StoreClosestMarkerPos 0 X 30@ Y 29@ Z 28@
    0AB1: call @StoreClosestRaceMarkerPos 0 X 30@ Y 29@ Z 28@
     
    :storeclosestmarkerpos
    12@ = 9999.0
    for 0@ = 0 to 31
        0085: 1@ = 0@
        1@ *= 160
        1@ += 0xC7DD58
        1@ += 48
        0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0
        1@ += 4
        0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0
        1@ += 4
        0A8D: 4@ = read_memory 1@ size 4 virtual_protect 0
        00A0: store_actor $PLAYER_ACTOR position_to 5@ 6@ 7@
        050A: 8@ = distance_between_XYZ 2@ 3@ 4@ and_XYZ 5@ 6@ 7@
        if
            0025: 12@ > 8@
        then
            0087: 12@ = 8@
            0087: 9@ = 2@
            0087: 10@ = 3@
            0087: 11@ = 4@
        end
    end
    0AB2: ret 3 9@ 10@ 11@
     
    :storeclosestracemarkerpos
    12@ = 9999.0
    for 0@ = 0 to 31
        0085: 1@ = 0@
        1@ *= 56
        1@ += 0xC7F158
        1@ += 16
        0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0
        1@ += 4
        0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0
        1@ += 4
        0A8D: 4@ = read_memory 1@ size 4 virtual_protect 0
        00A0: store_actor $PLAYER_ACTOR position_to 5@ 6@ 7@
        050A: 8@ = distance_between_XYZ 2@ 3@ 4@ and_XYZ 5@ 6@ 7@
        if
            0025: 12@ > 8@
        then
            0087: 12@ = 8@
            0087: 9@ = 2@
            0087: 10@ = 3@
            0087: 11@ = 4@
        end
    end
    0AB2: ret 3 9@ 10@ 11@
     
    Последние данные очков репутации:
    SR_team: 2 Очки (Зачет зачетный!!! Давно я это искал) 2 фев 2014
    DubStep_: 1 Очко (Напиши пример я нуб жи) 6 фев 2014
    fiendshadow: 1 Очко (спасяб) 14 июл 2014
    #34
    #SIZZURP, Dragar и fiendshadow нравится это.
  35. Opcode.eXe

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

    Регистрация:
    11.04.13
    Сообщения:
    86
    Лайки:
    89
    Репутация:
    51
    0AB1: @WEAPON_DAT 4 | -> Change Weapon 24 DAT 0x20 VALUE_TO 45 SIZE_OF_DAT 4

    Код (Text):
    {
    Change's the Weapon.dat value of Weapon ID to your custom one.
    0AB1: @WEAPON_DAT 4 | -> Change Weapon 24 DAT 0x20 VALUE_TO 45 SIZE_OF_DAT 4 // MaxAmmo in Clip
    Get DAT'S from http://hotmist.ddo.jp/struct.html
    }
     
    :WEAPON_DAT
    0@ += 0x24 // UNKNOWN
    0@ *= 0x70 // BLOCK SIZE
    0@ += 0xC8AAB8 // BASE
    005A: 0@ += 1@  // (int)
    0A8C: write_memory 0@ size 3@ value 2@ virtual_protect 0
    0AB2: ret 0
     
    Последние данные очков репутации:
    fonarik: 1 Очко (+) 11 фев 2014
    #35
    Smile, fonarik и aleks_2324 нравится это.
  36. MogAika

    Друг

    Регистрация:
    18.03.13
    Сообщения:
    244
    Лайки:
    268
    Репутация:
    202
    Добавление cleo команды на 0.3z, для работы нужен mgf 3.3 и старше:
    Код (Text):
    :GetCallParam //0AB1: call @GetCallParam 2 params_pntr 1@ param_num 2 to 3@
    0012: 1@ *= 4
    005A: 0@ += 1@
    0A8D: 2@ = read_memory 0@ size 4 virtual_protect 1
    0AB2: ret 1 2@
               
    :RegisterCommand //0AB1: call @RegisterCommand 3 command "Ololoshka" to_label @on_command var_to_set_hook 0
    0AC8: 2@ = allocate_memory_size 5
    0DB6: 3@ = create_hook from_addr 2@ to_label 1@ pop_count 0 var_to_set_hook 3@
    0DB7: plant_hook 3@
    0AA2: 31@ = load_library "kernel32.dll" // IF and SET
    0AA4: 30@ = get_proc_address "GetModuleHandleA" library 31@ // IF and SET
    0AA7: call_function 30@ num_params 1 pop 0 "samp.dll" 3@
     
    0A8E: 4@ = 3@ + 0x212A70
    0A8D: 5@ = read_memory 4@ size 4 virtual_protect 1
     
    0A8E: 4@ = 3@ + 0x7BC40
    0AA6: call_method 4@ struct 5@ num_params 2 pop 0 params 2@ 0@
     
    0AB2: ret 0
    Перед вызовом данного опкода надо прождать некоторое время, иначе будет вылет
    Пример скрипта: Если ввести в чат /test <любойтекст>, то на экран выведет <любойтекст>
    Код (Text):
    0000:
    wait 1000 //ждем, чтобы не вылететь
    0AC6: 0@ = label @command offset //т.к. в scm функу текст хер передаш, то юзаем смещение на текст
    0AB1: call @RegisterCommand 3 command 0@ to_label @on_command var_to_set_hook 0 //var_set_hook смотрим у опкода 0DB6 из mfg
    while true
        wait 0 //уходим в бесконечный цикл
    end
     
    :command
    hex
    "test" 00
    end
     
    :on_command
    0DB9: get_hook 0@ last_param_pntr_to 1@
    0AB1: call @GetCallParam 2 params_pntr 1@ param_num 1 to 2@ //получаем текст
    0ACD: show_text_highpriority 2@ time 1000 //показываем его на экран
    0D98: callback_retn
     
    #36
    legend2360, [Nexus] и SR_team нравится это.
  37. gcode

    gcode нестандартное звание звание звание звание звани...
    Проверенный

    Регистрация:
    09.06.13
    Сообщения:
    793
    Лайки:
    387
    Репутация:
    359
    Уже работает :) Кстати при переводе bottera понадобилась такая хрень (взрослым дядькам не смеяться :) ):

    Код (PHP):
    Массив (array) — набор однотипных элементов, расположенных в памяти
    непосредственно друг за другом, доступ к которым осуществляется по номеру элемента.
     
    0AC8: 15@ = allocate_memory_size 512 // Выделяем память под массив
    0AB1: call @get_array 2 15@ element 10 value_to 13@ // Получаем значение элемента номер 10 в переменную 13@
    0AB1: call @put_into_array 3 15@ element 48 value 13@ // Устанавливаем элементу 48 значение из переменной 13@
     
    :put_into_array
    1@ *= 4
    005A: 0@ += 1@
    0A8C: write_memory 0@ size 4 value 2@ virtual_protect 1
    0AB2: ret 0
     
    :get_array
    1@ *= 4
    005A: 0@ += 1@
    0A8D: 1@ = read_memory 0@ size 4 virtual_protect 1
    0AB2: ret 1 1@

    Код (PHP):
    Массив (array) — набор однотипных элементов, расположенных в памяти
    непосредственно друг за другом, доступ к которым осуществляется по номеру элемента.
     
    const
          INT = 2
          LONG = 4
          FLOAT = 4
          BOOL = 1
          SHORTINT = 1
          STRING = 256
          CHAR = 2
    end
     
    0AB1: call @create_array 2 element_count 60 size FLOAT result_to 15@ // Создаём массив с количеством элементов 60 по 4 байта каждый и записываем адрес на него в переменную 15@
    0AB1: call @get_array 2 15@ element 10 value_to 13@ // Получаем значение элемента номер 10 в переменную 13@
    0AB1: call @put_into_array 3 15@ element 48 value 13@ // Устанавливаем элементу 48 значение из переменной 13@
    0AC9: free_array 15@ // Удаляем массив
     
    :create_array
    006A: 0@ *= 1@
    0@ += 4
    0AC8: 2@ = allocate_memory_size 0@
    0A8C: write_memory 2@ size 4 value 1@ virtual_protect 1
    0AB2: ret 1 2@
     
    :put_into_array
    0A8D: 3@ = read_memory 0@ size 4 virtual_protect 1
    0@ += 4
    006A: 1@ *= 3@
    005A: 0@ += 1@
    0C11: memset destination 0@ value 2@ size 3@
    0AB2: ret 0
     
    :get_array
    0A8D: 2@ = read_memory 0@ size 4 virtual_protect 1
    0@ += 4
    006A: 1@ *= 2@
    005A: 0@ += 1@
    if
        2@ < 5
    then
        0AC7: 1@ = var 1@ offset
    end
    0C10: memcpy destination 1@ source 0@ size 2@
    0AB2: ret 1 1@
     
    Последние данные очков репутации:
    Даниил: 3 Очки (хех )) добавь еще размер, но чтобы был необязательным параметром, по умолчанию будет 4 байта.) 20 фев 2014
    #37
  38. MogAika

    Друг

    Регистрация:
    18.03.13
    Сообщения:
    244
    Лайки:
    268
    Репутация:
    202
    Написать текст в чат 0.3z
    Код (Text):
    :write_text_in_chat
    0AA2: 31@ = load_library "kernel32.dll" // IF and SET
    0AA4: 30@ = get_proc_address "GetModuleHandleA" library 31@ // IF and SET
    0AA7: call_function 30@ num_params 1 pop 0 "samp.dll" 3@
    0A8E: 2@ = 3@ + 0x212A6C
    0A8D: 1@ = read_memory 2@ size 4 virtual_protect 1
    0A8E: 2@ = 3@ + 0x7A4F0
    0AA6: call_method 2@ struct 1@ num_params 5 pop 0 params 0 0xFFFFFFFF 0 0@ 8
    0AB2: ret 0
    Пример скрипта:
    Код (Text):
    {$CLEO .cs}
    0000:
    wait 1000 //ждем пока структуры инициализируются
    while true
        0AC6: 0@ = label @text offset
        0AB1: call @write_text_in_chat 1 text 0@
        wait 500
    end
    :text
    hex
    "test" 20 "test," 20 "Motherfucer" 00
    end
     
    #38
  39. Opcode.eXe

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

    Регистрация:
    11.04.13
    Сообщения:
    86
    Лайки:
    89
    Репутация:
    51
    Код (Text):
    0AB1: @FAKE_KEYPRESS 1 _OFFSET_KEY_ 0x3 {W}
    { W= 0x3, A= 0x1, S= 0x2, D=0x0, AIM=0xC, SHOT=0x8(0x22), JUMP=0x1C, SPRINT: 0x20, C=0x24}
    { Calculate offset by yourself: KEYPRESS_NUMBER * 2 = Offset }
    :FAKE_KEYPRESS
    1@ = 0xB73458
    005A: 1@ += 0@  // (int)
    0A8C: write_memory 1@ size 1 value 255 virtual_protect 0
    0AB2: ret 0
     
    Последние данные очков репутации:
    gcode: 4 Очки (super) 3 мар 2014
    #39
    Niko. и gcode нравится это.
  40. gcode

    gcode нестандартное звание звание звание звание звани...
    Проверенный

    Регистрация:
    09.06.13
    Сообщения:
    793
    Лайки:
    387
    Репутация:
    359
    Very good, man. I was recently looking for this. but may be?:
    Код (PHP):
    0AB1: @FAKE_KEYPRESS 1 _OFFSET_KEY_ 0x3 PRESSED true
    { W= 0x3, A= 0x1, S= 0x2, D=0x0, AIM=0xC, SHOT=0x8(0x22), JUMP=0x1C, SPRINT: 0x20, C=0x24}
    { Calculate offset by yourself: KEYPRESS_NUMBER * 2 = Offset }
    :FAKE_KEYPRESS
    2@ = 0xB73458
    005A: 2@ += 0@  // (int)
    1@ *= 255
    0A8C: write_memory 2@ size 1 value 1@ virtual_protect 0
    0AB2: ret 0
     
    #40