Pegando todos os veículos próximos

    Compartilhe
    avatar
    WinterCat
    Mensagens Nível 1
    Mensagens Nível 1

    Mensagens : 22
    Reputação : 4
    Desde : 19/10/2016

    Pegando todos os veículos próximos

    Mensagem por WinterCat em Sab 29 Out 2016, 17:09

    A minha dúvida é basicamente qual o melhor método de pegar todos os veículos próximos a um ponto/entidade.

    Por exemplo, eu queria fazer um fix para que os outros carros abrissem caminho para veículos que estão com a sirene ligada, porque originalmente os carros apenas deviam quando o jogador está com a sirene ligada, então eu fiz o script abaixo usando o "for all cars" do DK22Pac, usei o "for all" para pegar os veículos de emergência que estão com a sirene ligada e depois outro "for all" para pegar os carros próximos a este, porém, as vezes os carros mais próximos não abrem caminho, mas os que estão mais longe sim, oque não faz muito sentido, alguém sabe um método melhor para pegar todos os veículos próximos?

    Código:
    {$cleo}
    0000:

    const
    EMERGENCY_VEH       = 31@
    MAKE_WAY_VEH        = 28@  
    VEH_SPEED           = 0@    
    VEH_STRUCT          = 0@    
    VEH_DB              = 0@    
    VEH_TB              = 1@
    trafficBehavior     = 0x3B9  //CVehicle +0x3B9
    driverBehavior      = 0x1    //CVehicle +0x3BA
    FUNC_CCarCtrl__MakeWayForCarWithSiren = 0x41D660
    end

    while true
        wait 0
        0A8D: 29@ = read_memory 0xB74494 size 4 virtual_protect 0
        29@ += 0x4
        0A8D: 29@ = read_memory 29@ size 4 virtual_protect 0
        for 30@ = 0 to 27904 step 0x100
            0A8D: EMERGENCY_VEH = read_memory 29@ size 1 virtual_protect 0
            000A: 29@ += 0x1
            if and
            0029: EMERGENCY_VEH >= 0x00
            001B: 0x80 > EMERGENCY_VEH
            then
                005A: EMERGENCY_VEH += 30@
                
                02E3: VEH_SPEED = car EMERGENCY_VEH speed
                if and
                VEH_SPEED > 0.0
                0975:   car EMERGENCY_VEH emergency_vehicle
                0ABD:   vehicle EMERGENCY_VEH siren_on
                80DB:   not actor $3 in_car EMERGENCY_VEH
                then
                    wait 0
                    if 056E:   car EMERGENCY_VEH defined
                    then
                        car.StorePos(EMERGENCY_VEH,2@,3@,4@)
                        0A8D: 26@ = read_memory 0xB74494 size 4 virtual_protect 0
                        26@ += 0x4
                        0A8D: 26@ = read_memory 26@ size 4 virtual_protect 0
                        for 27@ = 0 to 27904 step 0x100
                            0A8D: MAKE_WAY_VEH = read_memory 26@ size 1 virtual_protect 0
                            000A: 26@ += 0x1
                            if and
                            0029: MAKE_WAY_VEH >= 0x00
                            001B: 0x80 > MAKE_WAY_VEH
                            then
                                005A: MAKE_WAY_VEH += 27@
                                
                                0A97: VEH_STRUCT = car MAKE_WAY_VEH struct
                                VEH_STRUCT += trafficBehavior
                                0A8D: VEH_TB = read_memory VEH_STRUCT size 1 virtual_protect 0
                                VEH_STRUCT += driverBehavior
                                0A8D: VEH_DB = read_memory VEH_STRUCT size 1 virtual_protect 0
                                if and
                                VEH_TB <> 2
                                VEH_DB < 2
                                8975:   not car MAKE_WAY_VEH emergency_vehicle
                                80DB:   not actor $3 in_car MAKE_WAY_VEH
                                803B:   not MAKE_WAY_VEH == EMERGENCY_VEH  // (int)
                                01AD:   car MAKE_WAY_VEH sphere 0 near_point 2@ 3@ radius 40.0 40.0
                                then
                                    0A97: VEH_STRUCT = car MAKE_WAY_VEH struct
                                    0AA7: call_function FUNC_CCarCtrl__MakeWayForCarWithSiren num_params 1 pop 1 VEH_STRUCT 0@ 1@ 2@ 3@ 4@
                                end
                            end
                        end
                    end
                end
            end
        end
    end
    avatar
    AguiaX2
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Mensagens : 609
    Reputação : 37
    Desde : 19/08/2015
    Idade : 14
    Localização : Em algum lugar do brasil
    Link : https://www.youtube.com/watch?v=lMB18XPgEWA

    Re: Pegando todos os veículos próximos

    Mensagem por AguiaX2 em Sab 29 Out 2016, 17:19

    eu achei que este era o melhor metodo :v:

    edit: você já usou o 0AE2 ? :)


    ____________________


    avatar
    WinterCat
    Mensagens Nível 1
    Mensagens Nível 1

    Mensagens : 22
    Reputação : 4
    Desde : 19/10/2016

    Re: Pegando todos os veículos próximos

    Mensagem por WinterCat em Sab 29 Out 2016, 17:24

    @AguiaX2 escreveu:eu achei que este era o melhor metodo :v:

    Não tem outro método? Eu teitei usar o opcode junto com uma array mas chegava um ponto que começava a repetir os mesmos veículos :)
    avatar
    Kevin Prestes
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Mensagens : 1892
    Reputação : 18
    Desde : 30/05/2013
    Localização : Estância Velha - RS

    Re: Pegando todos os veículos próximos

    Mensagem por Kevin Prestes em Sab 29 Out 2016, 17:33

    Cara você precisa "otimiza" teus scripts... tu uso um for all dentro de um for all, isso dá uma grande perda de desempenho.
    avatar
    WinterCat
    Mensagens Nível 1
    Mensagens Nível 1

    Mensagens : 22
    Reputação : 4
    Desde : 19/10/2016

    Re: Pegando todos os veículos próximos

    Mensagem por WinterCat em Sab 29 Out 2016, 17:34

    @Kevin Prestes escreveu:Cara você precisa "otimiza" teus scripts... tu uso um for all dentro de um for all, isso dá uma grande perda de desempenho.

    Por isso que eu queria outro método de fazer isso
    avatar
    AguiaX2
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Mensagens : 609
    Reputação : 37
    Desde : 19/08/2015
    Idade : 14
    Localização : Em algum lugar do brasil
    Link : https://www.youtube.com/watch?v=lMB18XPgEWA

    Re: Pegando todos os veículos próximos

    Mensagem por AguiaX2 em Sab 29 Out 2016, 17:36

    @WinterCat escreveu:
    @AguiaX2 escreveu:eu achei que este era o melhor metodo :v:

    Não tem outro método? Eu teitei usar o opcode junto com uma array mas chegava um ponto que começava a repetir os mesmos veículos :)

    Não conheço mas tem 1 opcode que faz isso o 0AE2 (eu creio que seja melhor usar o 0AE2 so acho :))


    ____________________


    avatar
    Kevin Prestes
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Mensagens : 1892
    Reputação : 18
    Desde : 30/05/2013
    Localização : Estância Velha - RS

    Re: Pegando todos os veículos próximos

    Mensagem por Kevin Prestes em Sab 29 Out 2016, 17:50

    Cria uma thread memory e vai salvando os carros que já desviaram, e quando tu pega outro carro tu lê toda a thread memory e vê se ele já desviou ou não, se sim, pula pro próximo carro. Pegando os carros com o 0AE2
    avatar
    WinterCat
    Mensagens Nível 1
    Mensagens Nível 1

    Mensagens : 22
    Reputação : 4
    Desde : 19/10/2016

    Re: Pegando todos os veículos próximos

    Mensagem por WinterCat em Sab 29 Out 2016, 19:01

    @Kevin Prestes escreveu:Cria uma thread memory e vai salvando os carros que já desviaram, e quando tu pega outro carro tu lê toda a thread memory e vê se ele já desviou ou não, se sim, pula pro próximo carro. Pegando os carros com o 0AE2

    Eu fiz assim agora:

    Código:
    {$cleo}
    0000:

    const
    EMERGENCY_VEH      = 31@
    MAKE_WAY_VEH        = 27@
    CARS_MEMORY        = 26@
    TEMP_CAR_VAR        = 25@ 
    VEH_SPEED          = 0@   
    VEH_STRUCT          = 0@   
    VEH_DB              = 0@   
    VEH_TB              = 1@
    trafficBehavior    = 0x3B9  //CVehicle +0x3B9
    driverBehavior      = 0x1    //CVehicle +0x3BA
    FUNC_CCarCtrl__MakeWayForCarWithSiren = 0x41D660
    end

    while true
        wait 0
        0A8D: 29@ = read_memory 0xB74494 size 4 virtual_protect 0
        29@ += 0x4
        0A8D: 29@ = read_memory 29@ size 4 virtual_protect 0
        for 30@ = 0 to 27904 step 0x100
            0A8D: EMERGENCY_VEH = read_memory 29@ size 1 virtual_protect 0
            000A: 29@ += 0x1
            if and
            0029: EMERGENCY_VEH >= 0x00
            001B: 0x80 > EMERGENCY_VEH
            then
                005A: EMERGENCY_VEH += 30@
               
                02E3: VEH_SPEED = car EMERGENCY_VEH speed
                if and
                VEH_SPEED > 0.0
                0975:  car EMERGENCY_VEH emergency_vehicle
                0ABD:  vehicle EMERGENCY_VEH siren_on
                80DB:  not actor $3 in_car EMERGENCY_VEH
                then
                    while true
                        wait 0
                        0AC6: CARS_MEMORY = label @Cars offset
                        if 056E:  car EMERGENCY_VEH defined
                        then
                            car.StorePos(EMERGENCY_VEH,2@,3@,4@)
                            if 0AE2: MAKE_WAY_VEH = random_vehicle_near_point 2@ 3@ 4@ in_radius 25.0 find_next 1 pass_wrecked 1
                            then
                                for 24@ = 0 to 9    // checking if this car already make way for emergengy vehicle
                                    0A8D: TEMP_CAR_VAR = read_memory CARS_MEMORY size 4 virtual_protect 0
                                    if 003B:  TEMP_CAR_VAR == MAKE_WAY_VEH  // (int)
                                    then continue
                                    else CARS_MEMORY += 4
                                    end
                                end   
                                0A97: VEH_STRUCT = car MAKE_WAY_VEH struct
                                VEH_STRUCT += trafficBehavior
                                0A8D: VEH_TB = read_memory VEH_STRUCT size 1 virtual_protect 0
                                VEH_STRUCT += driverBehavior
                                0A8D: VEH_DB = read_memory VEH_STRUCT size 1 virtual_protect 0
                                if and
                                VEH_TB <> 2
                                VEH_DB < 2
                                8975:  not car MAKE_WAY_VEH emergency_vehicle
                                80DB:  not actor $3 in_car MAKE_WAY_VEH
                                803B:  not MAKE_WAY_VEH == EMERGENCY_VEH  // (int)
                                then
                                    0A97: VEH_STRUCT = car MAKE_WAY_VEH struct
                                    0AA7: call_function FUNC_CCarCtrl__MakeWayForCarWithSiren num_params 1 pop 1 VEH_STRUCT 0@ 1@ 2@ 3@ 4@
                                    for 24@ = 0 to 9 // storing the car to don't repeat it again
                                        0A8D: TEMP_CAR_VAR = read_memory CARS_MEMORY size 4 virtual_protect 0
                                        if TEMP_CAR_VAR > 0
                                        then 0A8C: write_memory CARS_MEMORY size 4 value MAKE_WAY_VEH virtual_protect 0
                                        else
                                            if CARS_MEMORY >= 40
                                            then break
                                            end
                                            CARS_MEMORY += 4
                                        end
                                    end
                                end
                            end
                        else break
                        end
                    end
                    0AC6: CARS_MEMORY = label @Cars offset
                    0A8C: write_memory CARS_MEMORY size 40 value 0 virtual_protect 0
                end
            end
        end
    end

    :Cars
    hex
    00 00 00 00
    00 00 00 00
    00 00 00 00
    00 00 00 00
    00 00 00 00
    00 00 00 00
    00 00 00 00
    00 00 00 00
    00 00 00 00
    00 00 00 00
    00
    end

    Tá melhor ou eu consegui piorar?

    Edit: lol demorei 2hrs pra fazer isso :)
    avatar
    Kevin Prestes
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Mensagens : 1892
    Reputação : 18
    Desde : 30/05/2013
    Localização : Estância Velha - RS

    Re: Pegando todos os veículos próximos

    Mensagem por Kevin Prestes em Dom 30 Out 2016, 15:35

    Conseguiu piorar... não tem lógica e é muito ruim de lê teu script, tu precisa organizar melhor teu script e otimiza ele.
    avatar
    WinterCat
    Mensagens Nível 1
    Mensagens Nível 1

    Mensagens : 22
    Reputação : 4
    Desde : 19/10/2016

    Re: Pegando todos os veículos próximos

    Mensagem por WinterCat em Dom 30 Out 2016, 16:08

    @Kevin Prestes escreveu:Conseguiu piorar... não tem lógica e é muito ruim de lê teu script, tu precisa organizar melhor teu script e otimiza ele.
    Ok, vlw, vou tentar melhorar

    Conteúdo patrocinado

    Re: Pegando todos os veículos próximos

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Qui 29 Jun 2017, 02:36