Compartilhe
avatar
Mensagens Nível 1
Mensagens Nível 1
Mensagens : 30
Reputação : 6
Desde : 19/10/2016
Ver perfil do usuário

Pegando todos os veículos próximos

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
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 612
Reputação : 37
Desde : 19/08/2015
Idade : 14
Localização : Em algum lugar do brasil
Link : https://www.youtube.com/watch?v=lMB18XPgEWA
Ver perfil do usuário

Re: Pegando todos os veículos próximos

em Sab 29 Out 2016, 17:19
eu achei que este era o melhor metodo :v:

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

______________________________


avatar
Mensagens Nível 1
Mensagens Nível 1
Mensagens : 30
Reputação : 6
Desde : 19/10/2016
Ver perfil do usuário

Re: Pegando todos os veículos próximos

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
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 1922
Reputação : 20
Desde : 30/05/2013
Localização : Estância Velha - RS
Ver perfil do usuário

Re: Pegando todos os veículos próximos

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
Mensagens Nível 1
Mensagens Nível 1
Mensagens : 30
Reputação : 6
Desde : 19/10/2016
Ver perfil do usuário

Re: Pegando todos os veículos próximos

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
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 612
Reputação : 37
Desde : 19/08/2015
Idade : 14
Localização : Em algum lugar do brasil
Link : https://www.youtube.com/watch?v=lMB18XPgEWA
Ver perfil do usuário

Re: Pegando todos os veículos próximos

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
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 1922
Reputação : 20
Desde : 30/05/2013
Localização : Estância Velha - RS
Ver perfil do usuário

Re: Pegando todos os veículos próximos

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
Mensagens Nível 1
Mensagens Nível 1
Mensagens : 30
Reputação : 6
Desde : 19/10/2016
Ver perfil do usuário

Re: Pegando todos os veículos próximos

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
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 1922
Reputação : 20
Desde : 30/05/2013
Localização : Estância Velha - RS
Ver perfil do usuário

Re: Pegando todos os veículos próximos

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
Mensagens Nível 1
Mensagens Nível 1
Mensagens : 30
Reputação : 6
Desde : 19/10/2016
Ver perfil do usuário

Re: Pegando todos os veículos próximos

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

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum