- WinterCatMensagens Nível 1
- Mensagens : 30
Reputação : 6
Desde : 19/10/2016
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?
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
- AguiaX2Scripter CLEO - Intermediário
- Mensagens : 653
Reputação : 38
Desde : 19/08/2015
Idade : 18
Localização : Em algum lugar do brasil
Link : https://www.youtube.com/watch?v=lMB18XPgEWA
eu achei que este era o melhor metodo 
edit: você já usou o 0AE2 ?

edit: você já usou o 0AE2 ?

______________________________


- WinterCatMensagens Nível 1
- Mensagens : 30
Reputação : 6
Desde : 19/10/2016
@AguiaX2 escreveu:eu achei que este era o melhor metodo
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

- Kevin PrestesScripter CLEO - Avançado
- Mensagens : 1955
Reputação : 26
Desde : 30/05/2013
Localização : Estância Velha - RS
Cara você precisa "otimiza" teus scripts... tu uso um for all dentro de um for all, isso dá uma grande perda de desempenho.
- WinterCatMensagens Nível 1
- Mensagens : 30
Reputação : 6
Desde : 19/10/2016
@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
- AguiaX2Scripter CLEO - Intermediário
- Mensagens : 653
Reputação : 38
Desde : 19/08/2015
Idade : 18
Localização : Em algum lugar do brasil
Link : https://www.youtube.com/watch?v=lMB18XPgEWA
@WinterCat escreveu:@AguiaX2 escreveu:eu achei que este era o melhor metodo
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

______________________________


- Kevin PrestesScripter CLEO - Avançado
- Mensagens : 1955
Reputação : 26
Desde : 30/05/2013
Localização : Estância Velha - RS
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
- WinterCatMensagens Nível 1
- Mensagens : 30
Reputação : 6
Desde : 19/10/2016
@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

- Kevin PrestesScripter CLEO - Avançado
- Mensagens : 1955
Reputação : 26
Desde : 30/05/2013
Localização : Estância Velha - RS
Conseguiu piorar... não tem lógica e é muito ruim de lê teu script, tu precisa organizar melhor teu script e otimiza ele.
- WinterCatMensagens Nível 1
- Mensagens : 30
Reputação : 6
Desde : 19/10/2016
Ok, vlw, vou tentar melhorar@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.
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum
|
|