Compartilhe
avatar
Mensagens Nível 2
Mensagens Nível 2
Mensagens : 97
Reputação : 12
Desde : 18/10/2015
Idade : 24
Localização : São Paulo - SP
Ver perfil do usuário

AI para peds e Sistema Stealth

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
Mensagens Nível 2
Mensagens Nível 2
Mensagens : 97
Reputação : 12
Desde : 18/10/2015
Idade : 24
Localização : São Paulo - SP
Ver perfil do usuário
  • Reputação da mensagem: 100% (1 votos)

Re: AI para peds e Sistema Stealth

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
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum