AI para peds e Sistema Stealth

    Compartilhe
    avatar
    RafaQN
    Mensagens Nível 2
    Mensagens Nível 2

    Mensagens : 97
    Reputação : 12
    Desde : 18/10/2015
    Idade : 23
    Localização : São Paulo - SP

    AI para peds e Sistema Stealth

    Mensagem por RafaQN em Seg 01 Fev 2016, 02:18

    Olá galera da BMS,
    alguns sabem que estou trabalhando no mod Real Área 69 (ver: http://brmodstudio.forumeiros.com/t5037-realarea69-v0-6). No momento, estou trabalhando com a inserção de soldados na área 69, de um jeito que haja sistema Stealth no jogo.
    O jeito que fiz até agora foi esse:

    Código:
    00A0: store_actor $PLAYER_ACTOR position_to 1@ 2@ 3@
    0855: get_actor $PLAYER_ACTOR noise_level_at 1@ 2@ 3@ store_to 4@
    0017:   4@ /= 4.5
    if or
        09ED:   actor 31@ is_within_field_of_view_actor $PLAYER_ACTOR
        8104:   not actor $PLAYER_ACTOR near_actor 31@ radius 4@ 4@ 4@ sphere 0
    then    

    Poderia utilizar esse:

    Código:
    0364:   actor 0@ spotted_actor $PLAYER_ACTOR

    É semelhante ao opcode 09ED, só que a esse cabe quando o actor ver o outro (no caso o player) só de frente (acredito que quando demonstrar muita indiscrição quando se está por perto). Além do que o 0364 não é usado nas missões Stealth do GTA, mas o 09ED foi usada ao menos na missão 'Vertical Bird'.

    Em outras missões Stealth, não verifiquei nenhum desses opcodes sendo usados (acho que nenhum fora a missão 'Vertical Bird'). Vi que usaram esses em algumas missões:

    Código:
    0648: unknown_actor 37@ task_set 2.0

    Código:
    074E: unknown_set_actor_threat_scanner_flags 40@ radius 10.0 peds_to_scan 1

    Sabem pra que que serve esses ai?

    Outras perguntas:

    - Sabem como verificar se um ator quer matar o outro ou o player?
    - Como mudar a reação de um ator para uma espécie estado de alerta?

    Acho que só. Agradeço quem contribuir...


    Última edição por RafaQN em Sab 06 Fev 2016, 17:22, editado 2 vez(es)
    avatar
    RafaQN
    Mensagens Nível 2
    Mensagens Nível 2

    Mensagens : 97
    Reputação : 12
    Desde : 18/10/2015
    Idade : 23
    Localização : São Paulo - SP

    Re: AI para peds e Sistema Stealth

    Mensagem por RafaQN em Sab 06 Fev 2016, 17:00

    Esse é o sistema Stealth usado no RealArea69 v0.6, ainda vai ser melhorias e correções, mas só para verem:

    Código:
       For 31@ = 0 to 33
            0012: 31@ *= 12
            0AC6: 29@ = label @SOLDIERS69 offset
            005A: 29@ += 31@  // (int)
            0016: 31@ /= 12
            0A8D: 1@ = read_memory 29@ size 4 virtual_protect 0     //Lendo o handle do ator do soldado
            000A: 29@ += 8
            0A8D: 3@ = read_memory 29@ size 4 virtual_protect 0     //Lendo o se ele está atacando o player (é usado para evitar que o ator sempre receba o opcode 05E2: , que pode gerar bugs como baixo dano e imortalidade)
            0AC6: 30@ = label @VALUES69 offset
            0A8D: 0@ = read_memory 30@ size 4 virtual_protect 0     //Pegando código da área 69 (nulo (0), azul (1) ou vermelho (2), originais da missão 'Black Project')
            if  056D:   actor 1@ defined
            then
                if and
                    8118:   not actor 1@ dead
                    0039:   3@ == 0
                then
                    //Colocando inteligência de invasão de acordo com a código do player na área 69
                    if  0039:  0@ == 2
                    then    //código vermelho
                        00A0: store_actor $PLAYER_ACTOR position_to 5@ 6@ 7@
                        0855: get_actor $PLAYER_ACTOR noise_level_at 5@ 6@ 7@ store_to 8@
                        000F:   8@ -= 20.0
                        0017:   8@ /= 2.5
                        if or
                            09ED:   actor 1@ is_within_field_of_view_actor $PLAYER_ACTOR
                            0104:   actor $PLAYER_ACTOR near_actor 1@ radius 8@ 8@ 8@ sphere 0
                        then
                            077A: set_actor 1@ acquaintance 4 to_actors_pedtype 0
                            05E2: AS_actor 1@ kill_actor $PLAYER_ACTOR
                            0A8C: write_memory 29@ size 4 value 1 virtual_protect 0     //Colocando que está atacando o player
                            break
                        end
                    else
                        if  0039:  0@ == 0
                        then    //código neutra
                            0AC6: 28@ = label @VALUES69 offset
                            000A: 28@ += 4
                            0A8D: 2@ = read_memory 28@ size 4 virtual_protect 0     //Pegando o valor de onde player pode estar, original do meu mod
                            //Infrações que o player pode cometer na área 69 que podem ser percebíveis por soldados
                            if or       //Verificar se algum soldado não está sendo ameaçado ou atingido, nesse não haverá código vermelho pois isso dificultaria o Stealth (acho)
                                051A:   actor 1@ damaged_by_actor $PLAYER_ACTOR
                                0457:   player $PLAYER_CHAR aiming_at_actor 1@
                            then
                                00A0: store_actor $PLAYER_ACTOR position_to 5@ 6@ 7@
                                0855: get_actor $PLAYER_ACTOR noise_level_at 5@ 6@ 7@ store_to 8@
                                000F:   8@ -= 20.0
                                0017:   8@ /= 3.5
                                if or      
                                    09ED:   actor 1@ is_within_field_of_view_actor $PLAYER_ACTOR
                                    0104:   actor $PLAYER_ACTOR near_actor 1@ radius 8@ 8@ 8@ sphere 0
                                then
                                    077A: set_actor 1@ acquaintance 4 to_actors_pedtype 0
                                    05E2: AS_actor 1@ kill_actor $PLAYER_ACTOR
                                    0A8C: write_memory 29@ size 4 value 1 virtual_protect 0
                                    break
                                end
                            end
                            //Verificar se o player está atirando na área 69 indevidamente
                            if or      
                            02D6:   actor $PLAYER_ACTOR fires_weapon 0 in_rectangle_cornerA 96.0869 1942.2247 cornerB 361.2887 1778.5763
                            02D6:   actor $PLAYER_ACTOR fires_weapon 0 in_rectangle_cornerA 165.7858 2106.521 cornerB 393.01 1868.0754
                            then
                                00A0: store_actor $PLAYER_ACTOR position_to 5@ 6@ 7@
                                0855: get_actor $PLAYER_ACTOR noise_level_at 5@ 6@ 7@ store_to 8@
                                000F:   8@ -= 20.0
                                0017:   8@ /= 3.5
                                if or      
                                    09ED:   actor 1@ is_within_field_of_view_actor $PLAYER_ACTOR
                                    0104:   actor $PLAYER_ACTOR near_actor 1@ radius 8@ 8@ 8@ sphere 0
                                then
                                    077A: set_actor 1@ acquaintance 4 to_actors_pedtype 0
                                    05E2: AS_actor 1@ kill_actor $PLAYER_ACTOR
                                    0A8C: write_memory 29@ size 4 value 1 virtual_protect 0
                                    0A8C: write_memory 30@ size 4 value 2 virtual_protect 0
                                    break
                                end
                            end
                            //Verificando se o player é pego
                            if and
                                0019:   2@ > 0      //Está dentro da área 69
                                8500:   not player $PLAYER_CHAR skin == "POLICETR" on_bodypart 17
                                856C:   not actor $PLAYER_ACTOR driving_police_car
                                80DD:   not actor $PLAYER_ACTOR driving_car_with_model #PATRIOT
                            then
                                00A0: store_actor $PLAYER_ACTOR position_to 5@ 6@ 7@
                                0855: get_actor $PLAYER_ACTOR noise_level_at 5@ 6@ 7@ store_to 8@
                                000F:   8@ -= 20.0
                                0017:   8@ /= 3.5
                                if or
                                    09ED:   actor 1@ is_within_field_of_view_actor $PLAYER_ACTOR
                                    0104:   actor $PLAYER_ACTOR near_actor 1@ radius 8@ 8@ 8@ sphere 0
                                then
                                    077A: set_actor 1@ acquaintance 4 to_actors_pedtype 0
                                    05E2: AS_actor 1@ kill_actor $PLAYER_ACTOR
                                    0A8C: write_memory 29@ size 4 value 1 virtual_protect 0
                                    0A8C: write_memory 30@ size 4 value 2 virtual_protect 0
                                    break
                                end  
                            end
                        else    //código azul
                            00A0: store_actor $PLAYER_ACTOR position_to 5@ 6@ 7@
                            0855: get_actor $PLAYER_ACTOR noise_level_at 5@ 6@ 7@ store_to 8@
                            000F:   8@ -= 20.0
                            0017:   8@ /= 3.0
                            if or
                                0364:   actor 1@ spotted_actor $PLAYER_ACTOR
                                0104:   actor $PLAYER_ACTOR near_actor 1@ radius 8@ 8@ 8@ sphere 0
                            then                            
                                077A: set_actor 1@ acquaintance 4 to_actors_pedtype 0
                                05E2: AS_actor 1@ kill_actor $PLAYER_ACTOR
                                0A8C: write_memory 29@ size 4 value 1 virtual_protect 0     //Colocando que está atacando o player
                                0A8C: write_memory 30@ size 4 value 2 virtual_protect 0
                                break
                            end
                        end
                    end
                end
            end
        end

      Data/hora atual: Ter 27 Jun 2017, 21:22