Página 1 de 3

[SA][Lua] Downforce Mod V3.0 - English/Português

Enviado: 15 Nov 2018, 15:15
por plasma
English version:

Installation:
-MoonAdditions, imgui and indievehhandlings required.
-Read all instructions before proceding.
-Extract the file "downforce-mod.lua" to the moonloader folder.
-Extract the folder "lib/downforce-mod" to the "lib" subfolder within the moonloader folder.
-Extract the file "strings.lua" in the "en-us" folder to the "lib/downforce-mod" folder within the moonloader folder.
-In case you have an old configuration, copy and paste the "cars" lines to the "cars.lua" file within the "lib/downforce-mod" folder.
-Delete the old .lua file of a previous version of the downforce-mod from the moonloader folder.

What is downforce?
"Downforce" (also called negative lift) is an aerodynamic force that some vehicles, especially racing vehicles, generate along their body.
This force helps to "glue" the vehicle on the ground, increasing its grip/traction. As a consequence of it, the vehicle can go faster around corners. And also, it can accelerate and brake harder before the tires start to skid.

To put it simply, we can calculate the downforce as follows:

Imagem

Where:
F = Downforce (Newtons).
Ea = Effective Area (m^2) (definition of it below)
p = air density (Kg/m^3).
v = Vehicle speed (m/s).

And the effective area (Ea) of the vehicle can be defined like this:

Imagem

Where:
Ea = Effective Area (m^2).
Cl = Coefficient of lift (dimensionless).
Fa = Frontal area of the vehicle (m^2).

Did you notice the minus sign on the lift coefficient? That's because when the lift is negative - that is, when there is downforce - the resulting force will be positive and it'll make the results of other calculations more intuitive.

The density of the air for any given altitude can be calculated using a mathematical model. In that case, what would be better than using a model provided by NASA itself?
https://www.grc.nasa.gov/www/k-12/airpl ... osmet.html

To put it simply, the maximum grip/traction of a vehicle can be approximated as follows:

Imagem

Where:
grip = overall grip (Gs).
m = vehicle's mass (Kg).
F = downforce (Kgf)
Tgrip = tires' base grip.

Do you understand now how the grip of a vehicle depends on the normal force generated by it?
But of course, a vehicle's grip depends on other variables such as it's mass. Based on this, we can conclude that if 2 vehicles generate the same amount of downforce, the lighter vehicle will have a greater increase in it's grip.
We can also infer that if a vehicle is generating more downforce than its weight, it is possible (in theory) to drive it upside down. For example, you could drive it on a tunnel roof.

But not everything is that simple. A vehicle's tires do not react to a force applied to them in a constant manner.
Generally speaking, the greater is the force applied to a tire, the less grip it has. This phenomenon is called load sensitivity. You can read more about it here: https://en.wikipedia.org/wiki/Tire_load_sensitivity and here: http://theracingline.net/2018/race-car- ... ensitivity /

There are several ways a vehicle can generate more downforce. The simplest one is installing a wing.
Fortunately, this mod gives you the possibility to simulate this. When installing an aerodynamic device using Tunning Mod, rename it to some name that contains "spoiler", or a name that you can define in the main .lua file.

Now, allow me to explain some important attributes in the main .lua file (I don't recomend changing any other attributes that aren't in this list):
-cars: This is the list of configured vehicles. As of 3.0 version, this list is defined in the file "moonloader/lib/downforce-mod/cars.lua".
-shouldCalculateAirDensity: Should the script calculate the air density dynamically? (based on your altitude). Leave true to calculate, or false to always use sea level density.
-loadSensitivityMultiplier: Represents the tire load sensitivity multiplier. If you want to disable it, set it to 0. If you want it to become more intense, leave it at a number greater than 1.
-downforceMultiplier: The downforce (or lift) multiplier. It's a quick way to decrease or increase the downforce generated by all vehicles in the list.
-mode: Sets the way the downforce is applied to vehicles. Modes 1 to 3 only change handling values. Mode 4 literally applies a force to the vehicle based on its orientation. It is only possible to drive on a tunnel's roof if you are in mode 4.
-shouldImproveBrakes: Whether the brake force should be increased according to the downforce. It's not exactly realistic, but a convenient option nonetheless.
-editorCheat: Set the cheat to open/close the ingame menu to change vehicles' properties.
-drawInfos: Whether the script should display information on the screen (true/false).
-drawName: Whether the script should display the current vehicle's name on the screen (true/false).
-drawArea: Whether the script should display the effective area of ​​the current vehicle on the screen (true/false).
-drawDownforce: Defines whether the script should display the vehicle's current downforce on the screen (true/false).
-drawGrip: Whether the script should display the current relative grip of the vehicle on the screen.
-drawTractionMult: Whether the script should display the fTractionMultiplier of the vehicle's handling on the screen.
-drawTractionLoss: Whether the script should display the fTractionLoss of the vehicle's handling on the screen.
-textPosition: In this section you can edit the relative position of each information on the screen. Just change the x and y values. These values ​​must be between 0 and 1.
-bonusPerWing: Defines the increase in the effective area a vehicle gains for each aerodynamic device installed on it.
-namesToSearchFor: Defines the vehicle's part names the script should consider as an aerodynamic device.

Properties of the "cars.lua" file
This file contains the settings for your game's vehicles. If you want to add a vehicle that you've added, just add another line at the end of the list with the same properties as the others, just changing the ID (the number between the [ ]) and the other properties to the values ​​you want.
-cars[xxx]: Defines the vehicle ID, xxx being the ID number.
-name: Defines the vehicle name. It's just for convenience, in case you want to search for a specific name.
-effectiveArea: Defines the effective area of ​​the vehicle. Effective area = Coefficient of downforce X frontal area of ​​the vehicle.
-loadSensitivity: Sets the load sensitivity of the vehicle's tires. The larger, the more grip the tires will lose as downforce increases. I strongly recommend you to set it to a value between 0 and 0.1, it's very sensitive.

Video demo:


UPDATE V3.0
-Removed comments from files. Explanations moved to this post.
-Added the possibility of driving upside down with a vehicle (if it has enough downforce).
-Added the possibility of bursting tires if they are subjected to great loads.
-Fixed a force conversion constant.
-Improved code organization.

Download
downforce-mod-v3.rar
Current version / Versão atual
(7.13 KiB) Baixado 531 vezes

Versão em português:

Estava eu fazendo uns testes em lua e acabei tendo uma ideia de fazer um script pra adicionar uns efeitos aerodinâmicos (além do drag que já tem no jogo) em alguns veículos.

Instalação:
-Requer MoonAdditions, imgui e indievehhandlings.
-Leia todas as instruções antes de prosseguir.
-Extraia o arquivo "downforce-mod.lua" na pasta do moonloader.
-Extraia a pasta "lib/downforce-mod" para a subpasta "lib" na pasta do moonloader.
-Extraia o arquivo "strings.lua" da pasta "pt-br" para a pasta "lib/downforce-mod" na pasta do moonloader.
-Caso tenha uma configuração antiga, copie e cole as linhas dos veículos no arquivo "cars.lua" que se encontra na pasta "lib/downforce-mod".
-Exclua da pasta do moonloader o arquivo .lua da versão antiga do downforce-mod caso você possua.

O que é downforce?
A "downforce" (também chamada de sustentação negativa ou força vertical descendente) é uma força aerodinâmica que alguns veículos, principalmente os de corrida, geram ao longo de sua carroceria.
Essa força ajuda a "prensar" o veículo no solo, aumentando sua aderência/tração. Como consequência, o veículo pode ir mais rápido em curvas. E também ele pode acelerar e frear com mais intensidade antes dos pneus começaram a derrapar.

De maneira simples, a downforce pode ser calculada da seguinte maneira:

Imagem

Onde:
F = Força vertical descendente (Newtons) (ou força prensando o veículo no chão).
Ea = Área efetiva (m^2) (definição dela abaixo).
p = Densidade do ar (Kg/m^3).
v = Velocidade do veículo (m/s).

E a área efetiva (Ea) do veículo pode ser definida assim:

Imagem

Onde:
Ea = Área efetiva (m^2).
Cl = Coeficiente de sustentação (sem dimensão).
Fa = Área frontal do veículo (m^2).

Notou que o coeficiente de sustentação veio com o sinal de menos na frente? É para quando a sustentação for negativa - ou seja, quando se tem downforce - o resultado vir positivo e tornar os resultados de outros cálculos mais intuitivos.

A densidade do ar para uma determinada altitude pode ser calculada usando um modelo matemático. Nesse caso, o que seria melhor do que um modelo fornecido pela própria NASA?
https://www.grc.nasa.gov/www/k-12/airpl ... osmet.html

De maneira simplificada, a aderência/tração máxima de um veículo pode ser aproximada assim:

Imagem

Onde:
grip = aderência/tração (Gs).
m = massa do veículo (Kg).
F = downforce (Kgf)
Tgrip = aderência/tração base dos pneus.

Percebeu como a aderência de um veículo depende da força normal gerada por ele?
Claro que também, a aderência depende de outras variáveis como a massa do veículo. Com base nisso, podemos concluir que se 2 veículos geram a mesma downforce, o veículo mais leve vai se beneficiar mais.
Podemos também inferir que se um veículo está gerando mais downforce do que seu peso, é possível (em teoria) digerir ele de ponta cabeça. Como dirigir em um teto de um túnel.

Mas nem tudo é tão simples assim. Os pneus de um veículo não reagem de maneira constante a qualquer força aplicada neles.
De maneira geral, a medida que mais força é aplicada em um pneu, menos aderência ele tem. Esse fenômeno é chamado de sensibilidade a carga. Você pode ler mais sobre aqui: https://en.wikipedia.org/wiki/Tire_load_sensitivity e aqui: http://theracingline.net/2018/race-car- ... nsitivity/

Há varias maneiras para um veículo gerar mais downforce. A mais simples é instalando um aerofólio.
Felizmente, esse mod lhe da a possibilidade de simular isso. Basta ao instalar um aparato aerodinâmico pelo Tunning Mod, renomeá-lo para algum nome que contenha "spoiler", ou algum nome que você pode definir no arquivo .lua principal.

Agora, vamos a explicação de atributos importantes no arquivo .lua principal (não mexa em nenhum outro atributo que não esteja nessa lista):
-cars: Essa é a lista de veículos configurados. Na versão atual, essa lista é definida no arquivo "moonloader/lib/downforce-mod/cars.lua".
-shouldCalculateAirDensity: Define se o script deve calcular a densidade do ar dinamicamente (baseando-se na sua altitude). Deixe true para calcular, ou false para usar sempre a densidade do nível do mar.
-loadSensitivityMultiplier: Representa o multiplicador da sensibilidade a carga dos pneus. Se quiser desativar ela, deixe em 0. Se quiser que ela fique mais intensa, deixe em um número mais que 1.
-downforceMultiplier: Representa o multiplicador da downforce (ou lift) gerada por um veículo. Serve como uma maneira rápida para diminuir ou aumentar a downforce gerada por todos os veículos na lista.
-mode: Define o modo que a downforce é aplicada nos veículos. Os modos 1 ao 3 apenas alteram valores da handling do veículo. O modo 4 aplica literalmente uma força no veículo, baseando-se na orientação dele. Só é possível dirigir no teto de tuneis se estiver no modo 4.
-shouldImproveBrakes: Define se a força dos freios devem ser aumentadas conforme a downforce. Não é exatamente realista, mas uma opção conveniente.
-editorCheat: Define o cheat para abrir/fechar o menu ingame para alterar as propriedades de veículos.
-drawInfos: Define se o script deve exibir informações na tela (true/false).
-drawName: Define se o script deve exibir o nome do veículo atual na tela (true/false).
-drawArea: Define se o script deve exibir a área efetiva do veículo atual na tela (true/false).
-drawDownforce: Define se o script deve exibir a downforce atual do veículo na tela (true/false).
-drawGrip: Define se o script deve exibir a aderência relativa atual do veículo na tela.
-drawTractionMult: Define se o script deve exibir o fTractionMultiplier da handling do veículo na tela.
-drawTractionLoss: Define se o script deve exibir o fTractionLoss da handling do veículo na tela.
-textPosition: Nessa secção você pode editar a posição relativa de cada informação da tela. Basta alterar os valores x e y. Esses valores devem estar entre 0 e 1.
-bonusPerWing: Define o aumento da área efetiva que um veículo ganha para cada aparato aerodinâmico instalado nele.
-namesToSearchFor: Nessa lista você pode adicionar os nomes que o script deve considerar uma peça como um aparato aerodinâmico.

Propriedades do arquivo "cars.lua"
Esse arquivo contém as configurações desse mod dos veículos do seu jogo. Caso queira adicionar um veículo que você adicionou sem substituir, basta adicionar no fim da lista mais uma linha com as mesmas propriedades das outras, apenas mudando o ID (o número entre os [ ]) e as outras propriedades para os valores que você achar melhor.
-cars[xxx]: Essa parte define o ID do veículo, xxx sendo o número do ID.
-name: Define o nome do veículo. Apenas por conveniência, caso você queira procurar por um nome especifico.
-effectiveArea: Define a área efetiva do veículo. Área efetiva = Coeficiente de downforce X área frontal do veículo.
-loadSensitivity: Define a sensibilidade a carga dos pneus do veículo. Quanto maior, mais aderência os pneus vão perder conforme a downforce aumenta. Deixe um valor entre 0 e 0.1. Essa propriedade é bem sensível.

Demonstração:


UPDATE V3.0
-Removido comentários dos arquivos. Movida explicações para essa postagem.
-Adicionada possibilidade de dirigir de ponta cabeça com um veículo (se ele tiver downforce o suficiente).
-Adicionada possibilidade de estourar os pneus caso passem de um limiar de carga.
-Corrigida constante para conversão de força.
-Melhorada organização do código.

Download
downforce-mod-v3.rar
Current version / Versão atual
(7.13 KiB) Baixado 531 vezes


Criticas, sugestões, angustias e/ou desabafos são bem-vindos :P

Re: [SA][Lua] Downforce Mod Beta / Mod de aerodinâmica

Enviado: 16 Nov 2018, 06:12
por Junior_Djjr
Interessante :philo: 

Re: [SA][Lua] Downforce Mod V1.0 / Mod de aerodinâmica

Enviado: 19 Nov 2018, 23:57
por Penguinumber9
Não sei se seria possível colocar no mod, mas poderia fazer com que os carros que estiverem correndo atrás e alinhados com um outro carro em movimento ganhassem velocidade (pois isso diminui a resistência do ar) igual nos jogos Need for Speed e GTA V. Eu não sei se isso é realmente realista, mas deixaria os policiais do jogo mais legais.

Re: [SA][Lua] Downforce Mod V1.0 / Mod de aerodinâmica

Enviado: 20 Nov 2018, 15:53
por plasma
Penguinumber9 escreveu:
19 Nov 2018, 23:57
Não sei se seria possível colocar no mod, mas poderia fazer com que os carros que estiverem correndo atrás e alinhados com um outro carro em movimento ganhassem velocidade (pois isso diminui a resistência do ar) igual nos jogos Need for Speed e GTA V. Eu não sei se isso é realmente realista, mas deixaria os policiais do jogo mais legais.
Seria bem interessante, mas antes de ver se ficaria bom eu preciso fazer uns testes pra ver como a resistência do ar (drag) dos veiculos no gta sa se comporta.

Re: [SA][Lua] Downforce Mod V1.0 / Mod de aerodinâmica

Enviado: 30 Nov 2018, 23:36
por Junior_Djjr
O seu mod vai editar o handling de todos os carros de mesmo modelo caso você entrar num carro no mesmo frame que ele for criado.
Não parece grande coisa, mas pense isto acontecer diversas vezes, vai mudando o valor por cima do anterior, mais e mais.
Solução: Simplesmente um wait(0) na linha 401, mas já que foi adicionado um frame, provavelmente no próximo frame o CJ tenha sido removido do carro e o carro deletado, então daria crash, portanto tem que checar de novo se o CJ está no carro...

Interessante que o cálculo de ar do mod faz referência até ao site da Nasa kkk.

edit: eu corrigi isto e botei uma maneira mais rápida de desativar as informações na tela.

Código: Selecionar tudo

script_name("Downforce MOD")
script_moonloader(025)
script_author("Plasma")
script_version("1.0")

local m = require "memory"
local mad = require "MoonAdditions"


------É pra ser compativel com carros adicionados, apenas adicione uma linha a mais da tabela de carros, com o id do seu carro sendo o indice (o numero entre colchetes)-----

---***ATENÇÃO, SE FOR RECARREGAR O SCRIPT IN GAME, CERTIFIQUE-SE DE ESTAR COM O VEICULO TOTALMENTE PARADO OU FORA DE UM VEICULO***----

local airDensity = 1.225 -- kg/m^3 densidade do ar, quanto maior, mais downforce o carro ira ter (ou mais sustentação positiva dependendo do carro), realisticamente o veiculo iria ter mais drag também (resistencia do ar), mas esse script não se mete nessa parte. Alterações nesse valor só terão efeito se deixar a opção logo abaixo em false.
local calculateAirDensity = true --- ative para calcular automaticamente a densidade do ar para uma determinada altura.
local loadSensitivityMultiplier = 1.0  -- deixe em 1.0 para ativar a sensibilidade a carga, 0 para desativar.
local dwMult = 1.0  -- irá multiplicar os efeitos aerodinâmicos, 2.0 para dobra-los, 0 para desativa-los. (ao dobrar, estara dobrando efeitos negativos caso o carro tenha "downforce negativa")

local mode = 3   ---- 1 = aumenta apenas o tractionMultiplier; 2 = aumenta apenas o tractionLoss; 3 = distribui o aumento entre ambos
local improveBrakes = false --- deixe em true caso queira que a desaceleração dos freios aumente. *Esse efeito não é exatamente realista, pois a força dos freios não é afetada pela downforce do veiculo*


local drawInfos = false --- coloque false se não quiser mostrar nenhuma das informações abaixo.
local drawName = true --- coloque false se não quiser o nome do carro.
local xName = 70 	--- posição horizontal do nome do carro
local yName = 500	--- posição vertical do nome do carro
local drawDownforce = true   --- coloque false se não quiser o indicador de downforce do carro.
local xDownforce = 70	-- posição horizontal do indicador de downforce.
local yDownforce = 515	-- posição vertical do indicador de downforce.
local drawGrip = true  ---	coloque false se não quiser o indicador de grip relativo do carro.
local xGrip = 70	-- posição horizontal do indicador de grip relativo.
local yGrip = 530	-- posição vertical do indicador de grip relativo.
local drawTractionMult = true  ---	coloque false se não quiser o indicador do multiplo de tração.
local xTractionM = 70	-- posição horizontal do indicador do multiplo de tração.
local yTractionM = 545	-- posição vertical do indicador de do multiplo de tração.
local drawTractionLoss = true  ---	coloque false se não quiser o indicador do tractionLoss.
local xTractionL = 70	-- posição horizontal do indicador do tractionLoss.
local yTractionL = 560	-- posição vertical do indicador de do tractionLoss.


--[[atributos dos veiculos do jogo, deixe o index da tabela sempre com o id do veiculo em questão
name = nome do veiculos, apenas por praticidade

effectiveArea = area efetiva que irá gerar downforce, caso seja negativa irá gerar o contrário, ou seja o veiculo irá perder aderencia em altas velocidades.
effectiveArea = coeficiente de downforce * area frontal do veiculos.

*a downforce também pode ser chamada de sustentação negativa, veiculos mais pesados são menos sensiveis ao aumento ou diminuição de downforce*

loadSensitivity = sensibilidade dos pneus ao aumento de downforce no veiculo, a medida em que o peso nos pneus aumenta, o grip base dele diminui;
saiba mais aqui : https://en.wikipedia.org/wiki/Tire_load_sensitivity
*Não deixe um valor muito alto, é extremamente sensivel, deixe entre 0 e 0.1.

***A sensibilidade a carga dos pneus não é calculada de maneira exatamente realista, apenas uma aproximação grotesca (quase um chute)
**Vale lembrar que esse script apenas multiplica valores da handling do carro, portanto o efeito final irá depender também do arquivo handling.dat do seu jogo**
]]--

local cars = {}
cars[400] = {name = "LANDSTALKER", effectiveArea = -0.78, loadSensitivity = 0.019 * loadSensitivityMultiplier}
cars[401] = {name = "BRAVURA", effectiveArea = -0.31, loadSensitivity = 0.022 * loadSensitivityMultiplier}
cars[402] = {name = "BUFFALO", effectiveArea = 0.10, loadSensitivity = 0.025 * loadSensitivityMultiplier}
cars[403] = {name = "LINERUNNER", effectiveArea = -0.35, loadSensitivity = 0.012 * loadSensitivityMultiplier}
cars[404] = {name = "PERENNIAL", effectiveArea = -0.29, loadSensitivity = 0.02 * loadSensitivityMultiplier}
cars[405] = {name = "SENTINEL", effectiveArea = -0.11, loadSensitivity = 0.015 * loadSensitivityMultiplier}
cars[406] = {name = "DUMPER", effectiveArea = -1.55, loadSensitivity = 0.008 * loadSensitivityMultiplier}
cars[407] = {name = "FIRETRUCK", effectiveArea = -0.71, loadSensitivity = 0.012 * loadSensitivityMultiplier}
cars[408] = {name = "TRASHMASTER", effectiveArea = -0.52, loadSensitivity = 0.009 * loadSensitivityMultiplier}
cars[409] = {name = "STRETCH", effectiveArea = -0.18, loadSensitivity = 0.017 * loadSensitivityMultiplier}
cars[410] = {name = "MANANA", effectiveArea = -0.15, loadSensitivity = 0.027 * loadSensitivityMultiplier}
cars[411] = {name = "INFERNUS", effectiveArea = 0.35, loadSensitivity = 0.021 * loadSensitivityMultiplier}
cars[412] = {name = "VOODOO", effectiveArea = -0.37, loadSensitivity = 0.024 * loadSensitivityMultiplier}
cars[413] = {name = "PONY", effectiveArea = -0.592, loadSensitivity = 0.018 * loadSensitivityMultiplier}
cars[414] = {name = "MULE", effectiveArea = -0.86, loadSensitivity = 0.015 * loadSensitivityMultiplier}
cars[415] = {name = "CHEETAH", effectiveArea = 0.20, loadSensitivity = 0.019 * loadSensitivityMultiplier}
cars[416] = {name = "AMBULANCE", effectiveArea = -0.78, loadSensitivity = 0.014 * loadSensitivityMultiplier}
cars[418] = {name = "MOONBEAM", effectiveArea = -0.65, loadSensitivity = 0.017 * loadSensitivityMultiplier}
cars[419] = {name = "ESPERANTO", effectiveArea = -0.19, loadSensitivity = 0.022 * loadSensitivityMultiplier}
cars[420] = {name = "TAXI", effectiveArea = -0.21, loadSensitivity = 0.025 * loadSensitivityMultiplier}
cars[421] = {name = "WASHINGTON", effectiveArea = -0.37, loadSensitivity = 0.027 * loadSensitivityMultiplier}
cars[422] = {name = "BOBCAT", effectiveArea = -0.65, loadSensitivity = 0.019 * loadSensitivityMultiplier}
cars[423] = {name = "MR WHOOPEE", effectiveArea = -0.47, loadSensitivity = 0.022 * loadSensitivityMultiplier}
cars[424] = {name = "BF INJECTION", effectiveArea = -0.24, loadSensitivity = 0.032 * loadSensitivityMultiplier}
cars[426] = {name = "PREMIER", effectiveArea = -0.19, loadSensitivity = 0.025 * loadSensitivityMultiplier}
cars[427] = {name = "ENFORCER", effectiveArea = -0.75, loadSensitivity = 0.014 * loadSensitivityMultiplier}
cars[428] = {name = "SECURICAR", effectiveArea = -0.77, loadSensitivity = 0.018 * loadSensitivityMultiplier}
cars[429] = {name = "BANSHEE", effectiveArea = -0.08, loadSensitivity = 0.021 * loadSensitivityMultiplier}
cars[431] = {name = "BUS", effectiveArea = -0.99, loadSensitivity = 0.011 * loadSensitivityMultiplier}
cars[432] = {name = "RHINO", effectiveArea = -0.59, loadSensitivity = 0.005 * loadSensitivityMultiplier}
cars[433] = {name = "BARRACKS", effectiveArea = -0.68, loadSensitivity = 0.011 * loadSensitivityMultiplier}
cars[434] = {name = "HOTKNIFE", effectiveArea = -0.25, loadSensitivity = 0.023 * loadSensitivityMultiplier}
cars[436] = {name = "PREVION", effectiveArea = -0.20, loadSensitivity = 0.025 * loadSensitivityMultiplier}
cars[437] = {name = "COACH", effectiveArea = -1.10, loadSensitivity = 0.015 * loadSensitivityMultiplier}
cars[438] = {name = "CABBIE", effectiveArea = -0.35, loadSensitivity = 0.026 * loadSensitivityMultiplier}
cars[439] = {name = "STALLION", effectiveArea = -0.20, loadSensitivity = 0.025 * loadSensitivityMultiplier}
cars[440] = {name = "RUMPO", effectiveArea = -0.49, loadSensitivity = 0.016 * loadSensitivityMultiplier}
cars[441] = {name = "RC BANDIT", effectiveArea = 0.09, loadSensitivity = 0.04 * loadSensitivityMultiplier}
cars[442] = {name = "ROMERO", effectiveArea = -0.39, loadSensitivity = 0.022 * loadSensitivityMultiplier}
cars[443] = {name = "PACKER", effectiveArea = -0.89, loadSensitivity = 0.011 * loadSensitivityMultiplier}
cars[444] = {name = "MONSTER", effectiveArea = -0.95, loadSensitivity = 0.012 * loadSensitivityMultiplier}
cars[445] = {name = "ADMIRAL", effectiveArea = -0.25, loadSensitivity = 0.023 * loadSensitivityMultiplier}
cars[451] = {name = "TURISMO", effectiveArea = 0.45, loadSensitivity = 0.02 * loadSensitivityMultiplier}
cars[455] = {name = "FLATBED", effectiveArea = -0.68, loadSensitivity = 0.01 * loadSensitivityMultiplier}
cars[456] = {name = "YANKEE", effectiveArea = -0.72, loadSensitivity = 0.013 * loadSensitivityMultiplier}
cars[457] = {name = "CADDY", effectiveArea = -0.15, loadSensitivity = 0.031 * loadSensitivityMultiplier}
cars[458] = {name = "SOLAIR", effectiveArea = -0.35, loadSensitivity = 0.02 * loadSensitivityMultiplier}
cars[459] = {name = "TOP FUN", effectiveArea = -0.49, loadSensitivity = 0.019 * loadSensitivityMultiplier}
cars[466] = {name = "GLENDALE", effectiveArea = -0.35, loadSensitivity = 0.024 * loadSensitivityMultiplier}
cars[467] = {name = "OCEANIC", effectiveArea = -0.38, loadSensitivity = 0.023 * loadSensitivityMultiplier}
cars[470] = {name = "PATRIOT", effectiveArea = -0.37, loadSensitivity = 0.013 * loadSensitivityMultiplier}
cars[471] = {name = "QUAD", effectiveArea = -0.11, loadSensitivity = 0.028 * loadSensitivityMultiplier}
cars[474] = {name = "HERMES", effectiveArea = -0.37, loadSensitivity = 0.025 * loadSensitivityMultiplier}
cars[475] = {name = "SABRE", effectiveArea = -0.24, loadSensitivity = 0.024 * loadSensitivityMultiplier}
cars[477] = {name = "ZR-350", effectiveArea = 0.30, loadSensitivity = 0.021 * loadSensitivityMultiplier}
cars[478] = {name = "WALTON", effectiveArea = -0.52, loadSensitivity = 0.02 * loadSensitivityMultiplier}
cars[479] = {name = "REGINA", effectiveArea = -0.37, loadSensitivity = 0.02 * loadSensitivityMultiplier}
cars[480] = {name = "COMET", effectiveArea = -0.09, loadSensitivity = 0.024 * loadSensitivityMultiplier}
cars[482] = {name = "BURRITO", effectiveArea = -0.54, loadSensitivity = 0.016 * loadSensitivityMultiplier}
cars[483] = {name = "CAMPER", effectiveArea = -0.74, loadSensitivity = 0.02 * loadSensitivityMultiplier}
cars[485] = {name = "BAGGAGE", effectiveArea = -0.24, loadSensitivity = 0.022 * loadSensitivityMultiplier}
cars[486] = {name = "DOZER", effectiveArea = -0.59, loadSensitivity = 0.016 * loadSensitivityMultiplier}
cars[489] = {name = "RANCHER", effectiveArea = -0.55, loadSensitivity = 0.019 * loadSensitivityMultiplier}
cars[490] = {name = "FBI RANCHER", effectiveArea = -0.57, loadSensitivity = 0.016 * loadSensitivityMultiplier}
cars[491] = {name = "VIRGO", effectiveArea = -0.27, loadSensitivity = 0.025 * loadSensitivityMultiplier}
cars[492] = {name = "GREENWOOD", effectiveArea = -0.43, loadSensitivity = 0.024 * loadSensitivityMultiplier}
cars[494] = {name = "HOTRING", effectiveArea = 1.3, loadSensitivity = 0.016 * loadSensitivityMultiplier}
cars[496] = {name = "BLISTAC", effectiveArea = 0.02, loadSensitivity = 0.019 * loadSensitivityMultiplier}
cars[498] = {name = "BOXVILLIE", effectiveArea = -0.67, loadSensitivity = 0.015 * loadSensitivityMultiplier}
cars[499] = {name = "BENSON", effectiveArea = -0.62, loadSensitivity = 0.017 * loadSensitivityMultiplier}
cars[500] = {name = "MESA", effectiveArea = -0.29, loadSensitivity = 0.018 * loadSensitivityMultiplier}
cars[502] = {name = "HOTRING A", effectiveArea = 1.35, loadSensitivity = 0.019 * loadSensitivityMultiplier}
cars[503] = {name = "HOTRING B", effectiveArea = 1.05, loadSensitivity = 0.015 * loadSensitivityMultiplier}
cars[504] = {name = "BLOODRING BANGER", effectiveArea = -0.14, loadSensitivity = 0.02 * loadSensitivityMultiplier}
cars[505] = {name = "RANCHER LURE", effectiveArea = -0.44, loadSensitivity = 0.014 * loadSensitivityMultiplier}
cars[506] = {name = "SUPER GT", effectiveArea = 0.45, loadSensitivity = 0.02 * loadSensitivityMultiplier}
cars[507] = {name = "ELEGANT", effectiveArea = -0.15, loadSensitivity = 0.018 * loadSensitivityMultiplier}
cars[508] = {name = "JOURNEY", effectiveArea = -0.60, loadSensitivity = 0.015 * loadSensitivityMultiplier}
cars[514] = {name = "PETROL", effectiveArea = -0.56, loadSensitivity = 0.016 * loadSensitivityMultiplier}
cars[515] = {name = "ROADTRAIN", effectiveArea = -0.59, loadSensitivity = 0.015 * loadSensitivityMultiplier}
cars[516] = {name = "NEBULA", effectiveArea = -0.20, loadSensitivity = 0.022 * loadSensitivityMultiplier}
cars[517] = {name = "MAJESTIC", effectiveArea = -0.18, loadSensitivity = 0.024 * loadSensitivityMultiplier}
cars[518] = {name = "BUCCANEER", effectiveArea = -0.36, loadSensitivity = 0.022 * loadSensitivityMultiplier}
cars[524] = {name = "CEMENT TRUCK", effectiveArea = -0.78, loadSensitivity = 0.014 * loadSensitivityMultiplier}
cars[525] = {name = "TOW TRUCK", effectiveArea = -0.62, loadSensitivity = 0.017 * loadSensitivityMultiplier}
cars[526] = {name = "FORTUNE", effectiveArea = -0.15, loadSensitivity = 0.025 * loadSensitivityMultiplier}
cars[527] = {name = "CADRONA", effectiveArea = -0.17, loadSensitivity = 0.024 * loadSensitivityMultiplier}
cars[528] = {name = "FBI TRUCK", effectiveArea = -0.56, loadSensitivity = 0.016 * loadSensitivityMultiplier}
cars[529] = {name = "WILLIARD", effectiveArea = -0.26, loadSensitivity = 0.026 * loadSensitivityMultiplier}
cars[530] = {name = "FORKLIFT", effectiveArea = -0.31, loadSensitivity = 0.029 * loadSensitivityMultiplier}
cars[531] = {name = "TRACTOR", effectiveArea = -0.61, loadSensitivity = 0.02 * loadSensitivityMultiplier}
cars[532] = {name = "COMBINE", effectiveArea = -1.15, loadSensitivity = 0.015 * loadSensitivityMultiplier}
cars[533] = {name = "FELTZER", effectiveArea = -0.39, loadSensitivity = 0.024 * loadSensitivityMultiplier}
cars[534] = {name = "REMINGTON", effectiveArea = -0.35, loadSensitivity = 0.024 * loadSensitivityMultiplier}
cars[535] = {name = "SLAMVAN", effectiveArea = -0.59, loadSensitivity = 0.021 * loadSensitivityMultiplier}
cars[536] = {name = "BLADE", effectiveArea = -0.45, loadSensitivity = 0.023 * loadSensitivityMultiplier}
cars[540] = {name = "VINCENT", effectiveArea = -0.28, loadSensitivity = 0.027 * loadSensitivityMultiplier}
cars[541] = {name = "BULLET", effectiveArea = 0.25, loadSensitivity = 0.02 * loadSensitivityMultiplier}
cars[542] = {name = "CLOVER", effectiveArea = -0.38, loadSensitivity = 0.023 * loadSensitivityMultiplier}
cars[543] = {name = "SADLER", effectiveArea = -0.58, loadSensitivity = 0.02 * loadSensitivityMultiplier}
cars[544] = {name = "FIRETRUCK LS", effectiveArea = -0.78, loadSensitivity = 0.016 * loadSensitivityMultiplier}
cars[545] = {name = "HUSTLER", effectiveArea = -0.21, loadSensitivity = 0.025 * loadSensitivityMultiplier}
cars[546] = {name = "INTRUDER", effectiveArea = -0.24, loadSensitivity = 0.023 * loadSensitivityMultiplier}
cars[547] = {name = "PRIMO", effectiveArea = -0.17, loadSensitivity = 0.021 * loadSensitivityMultiplier}
cars[549] = {name = "TAMPA", effectiveArea = -0.21, loadSensitivity = 0.023 * loadSensitivityMultiplier}
cars[550] = {name = "SUNRISE", effectiveArea = -0.11, loadSensitivity = 0.023 * loadSensitivityMultiplier}
cars[551] = {name = "MERIT", effectiveArea = -0.18, loadSensitivity = 0.022 * loadSensitivityMultiplier}
cars[552] = {name = "UTILITY VAN", effectiveArea = -0.53, loadSensitivity = 0.019 * loadSensitivityMultiplier}
cars[554] = {name = "YOSEMITE", effectiveArea = -0.46, loadSensitivity = 0.018 * loadSensitivityMultiplier}
cars[555] = {name = "WINDSOR", effectiveArea = -0.15, loadSensitivity = 0.026 * loadSensitivityMultiplier}
cars[556] = {name = "MONSTER A", effectiveArea = -0.82, loadSensitivity = 0.016 * loadSensitivityMultiplier}
cars[557] = {name = "MONSTER B", effectiveArea = -0.80, loadSensitivity = 0.016 * loadSensitivityMultiplier}
cars[558] = {name = "URANUS", effectiveArea = -0.06, loadSensitivity = 0.025 * loadSensitivityMultiplier}
cars[559] = {name = "JESTER", effectiveArea = -0.11, loadSensitivity = 0.025 * loadSensitivityMultiplier}
cars[560] = {name = "SULTAN", effectiveArea = -0.08, loadSensitivity = 0.024 * loadSensitivityMultiplier}
cars[561] = {name = "STRATUM", effectiveArea = -0.20, loadSensitivity = 0.02 * loadSensitivityMultiplier}
cars[562] = {name = "ELEGY", effectiveArea = 0.12, loadSensitivity = 0.022 * loadSensitivityMultiplier}
cars[565] = {name = "FLASH", effectiveArea = -0.03, loadSensitivity = 0.025 * loadSensitivityMultiplier}
cars[566] = {name = "TAHOMA", effectiveArea = -0.18, loadSensitivity = 0.022 * loadSensitivityMultiplier}
cars[567] = {name = "SAVANNA", effectiveArea = -0.47, loadSensitivity = 0.021 * loadSensitivityMultiplier}
cars[568] = {name = "BANDITO", effectiveArea = -0.15, loadSensitivity = 0.028 * loadSensitivityMultiplier}
cars[571] = {name = "KART", effectiveArea = 0.03, loadSensitivity = 0.035 * loadSensitivityMultiplier}
cars[572] = {name = "MOWER", effectiveArea = -0.11, loadSensitivity = 0.032 * loadSensitivityMultiplier}
cars[573] = {name = "DUNERIDE", effectiveArea = -0.38, loadSensitivity = 0.018 * loadSensitivityMultiplier}
cars[574] = {name = "SWEEPER", effectiveArea = -0.14, loadSensitivity = 0.032 * loadSensitivityMultiplier}
cars[575] = {name = "BROADWAY", effectiveArea = -0.39, loadSensitivity = 0.026 * loadSensitivityMultiplier}
cars[576] = {name = "TORNADO", effectiveArea = -0.34, loadSensitivity = 0.022 * loadSensitivityMultiplier}
cars[578] = {name = "DFT-30", effectiveArea = -0.51, loadSensitivity = 0.015 * loadSensitivityMultiplier}
cars[579] = {name = "HUNTLEY", effectiveArea = -0.48, loadSensitivity = 0.018 * loadSensitivityMultiplier}
cars[580] = {name = "STAFFORD", effectiveArea = -0.48, loadSensitivity = 0.018 * loadSensitivityMultiplier}
cars[587] = {name = "EUROS", effectiveArea = -0.09, loadSensitivity = 0.022 * loadSensitivityMultiplier}
cars[589] = {name = "CLUB", effectiveArea = -0.14, loadSensitivity = 0.024 * loadSensitivityMultiplier}
cars[596] = {name = "COP CAR LS", effectiveArea = -0.25, loadSensitivity = 0.025 * loadSensitivityMultiplier}
cars[597] = {name = "COP CAR SF", effectiveArea = -0.25, loadSensitivity = 0.024 * loadSensitivityMultiplier}
cars[598] = {name = "COP CAR LV", effectiveArea = -0.29, loadSensitivity = 0.023 * loadSensitivityMultiplier}
cars[599] = {name = "RANGER", effectiveArea = -0.48, loadSensitivity = 0.019 * loadSensitivityMultiplier}
cars[602] = {name = "ALPHA", effectiveArea = 0.09, loadSensitivity = 0.023 * loadSensitivityMultiplier}
cars[603] = {name = "PHOENIX", effectiveArea = -0.05, loadSensitivity = 0.024 * loadSensitivityMultiplier}


--[[caso queira aplicar a um carro adicionado, copie e cole a linha abaixo depois do ultimo carro acima(LEMBRE DE CHECAR O ID DO VEICULO):

cars[12500] = {name = "ADICIONADO", effectiveArea = 0.25, loadSensitivity = 0.03 * loadSensitivityMultiplier}

]]--
--------fim----------


local carMass = 0.0
local CCar
local actualCar
local generic = 0
local totalDownforce = 0.0
local totalIncrease = 0.0
local totalLoss = 0.0
local saved = false
local originalTractionMult = 0.0
local originalTractionLoss = 0.0
local originalBrakeDeceleration = 0.0


local function getCarAttribute(offset, memType)
	CCar = getCarPointer(actualCar)
	carAttribute = CCar + offset
	if memType == "float" then
		carAttribute = m.getfloat(carAttribute, false)
	elseif memType == "uint8" then
		carAttribute = m.getuint8(carAttribute, false)
	elseif memType == "uint16" then
		carAttribute = m.getuint16(carAttribute, false)
	elseif memType == "uint32" then
		carAttribute = m.getuint32(carAttribute, false)
	elseif memType == "uint64" then
		carAttribute = m.getuint64(carAttribute, false)
	end

	return carAttribute
end


local function setCarAttribute(offset, memType, value)
	CCar = getCarPointer(actualCar)
	carAttribute = CCar + offset
	if memType == "float" then
		m.setfloat(carAttribute, value, false)
	elseif memType == "uint8" then
		m.setuint8(carAttribute, value, false)
	elseif memType == "uint16" then
		m.setuint16(carAttribute, value, false)
	elseif memType == "uint32" then
		m.setuint32(carAttribute, value, false)
	elseif memType == "uint64" then
		m.setuint64(carAttribute, value, false)
	end
end


local function getTractionMultiplier()
	CCar = getCarPointer(actualCar)
	CHandling = CCar + 0x384
	CHandling = readMemory(CHandling, 4, false)
	generic = CHandling + 0x28
	generic = m.getfloat(generic, false)
	return generic
end


local function getTractionLoss()  -- por mais que o loss indique "perda", aparentemente aumentar esse valor melhora o comportamento do carro
	CCar = getCarPointer(actualCar)
	CHandling = CCar + 0x384
	CHandling = readMemory(CHandling, 4, false)
	generic = CHandling + 0xA4
	generic = m.getfloat(generic, false)
	return generic
end


local function getBrakeDeceleration()
	CCar = getCarPointer(actualCar)
	CHandling = CCar + 0x384
	CHandling = readMemory(CHandling, 4, false)
	generic = CHandling + 0x94
	generic = m.getfloat(generic, false)
	return generic
end


local function getMass()
	generic = getCarAttribute(140, "float")
	return generic
end


local function setTractionMultiplier(value)
	CCar = getCarPointer(actualCar)
	CHandling = CCar + 0x384
	CHandling = readMemory(CHandling, 4, false)
	generic = CHandling + 0x28
	m.setfloat(generic, value)
end


local function setTractionLoss(value)
	CCar = getCarPointer(actualCar)
	CHandling = CCar + 0x384
	CHandling = readMemory(CHandling, 4, false)
	generic = CHandling + 0xA4
	m.setfloat(generic, value)
end


local function setBrakeDeceleration(value)
	CCar = getCarPointer(actualCar)
	CHandling = CCar + 0x384
	CHandling = readMemory(CHandling, 4, false)
	generic = CHandling + 0x94
	m.setfloat(generic, value)
end


local function setMass(value)
	setCarAttribute(140, "float", value)
end


local function setNewGrip(index)
	carMass = getMass()
	if calculateAirDensity then
		updateAirDensity()
	end
	totalDownforce = math.pow(getCarSpeed(actualCar), 2) * airDensity * cars[index].effectiveArea * dwMult / 2
	totalDownforce = totalDownforce / 9.81 -- convertendo de Newtons para Kg
	totalLoss = totalDownforce * cars[index].loadSensitivity / 100  --- transforma em porcentagem
	totalLoss = totalLoss >= 1 and 0.99 or totalLoss	--- dá ruim se esse valor for igual ou maior que 1
	totalIncrease = (1-totalLoss) * ((carMass + totalDownforce) / carMass)

	if mode == 1 then
		setTractionMultiplier(originalTractionMult * totalIncrease)
	elseif mode == 2 then
		setTractionLoss(originalTractionLoss *totalIncrease)
	else
		halfIncrease = (totalIncrease - 1) / 2 + 1    --- feito para distribuir o aumento entre o tractionMult e Loss

		setTractionMultiplier(originalTractionMult * halfIncrease)
		setTractionLoss(originalTractionLoss * halfIncrease)
	end

	if improveBrakes then
		setBrakeDeceleration(originalBrakeDeceleration * totalIncrease)
	end

end


local function drawInformations()
	if drawDownforce then
		draw_text(cars[index].name, xName, yName, 255, 255, 255)
	end
	if drawDownforce then
		draw_text("Downforce (Kg): " .. string.format("%.2f", totalDownforce), xDownforce, yDownforce, 255, 255, 255)
	end
	if drawGrip then
		draw_text("Relative Grip: " .. string.format("%.3f", totalIncrease), xGrip, yGrip, 255, 255, 255)
	end
	if drawTractionMult then
		draw_text("Traction Mult: " .. string.format("%.3f", getTractionMultiplier()), xTractionM, yTractionM, 255, 255, 255)
	end
	if drawTractionLoss then
		draw_text("Traction Loss: " .. string.format("%.3f", getTractionLoss()), xTractionL, yTractionL, 255, 255, 255)
	end
end


function updateAirDensity()
	----- https://www.grc.nasa.gov/www/k-12/airplane/atmosmet.html ----
	local kelvin = 273.15
	local t = 0.0
	local pressure = 0.0 --- kpa
	local tempX, tempY, tempZ = getCharCoordinates(PLAYER_PED)

	if tempZ < 11000 then
		t = 15.04 - 0.00649 * tempZ
		pressure = 101.29 * math.pow((t + kelvin)/288.08, 5.256)
	elseif tempZ >= 11000 and tempZ < 25000 then
		t = -56.46
		pressure = 22.65 * math.exp(1.73 - 0.000157 * tempZ)
	else
		t = -131.25 + 0.00299 * tempZ
		pressure = 2.488 * math.pow((t + kelvin)/216.6, -11.388)
	end

	airDensity = pressure / (0.2869 * (t + kelvin))
end


function draw_text(str, x, y, r, g, b)
	mad.draw_text(str, x, y, mad.font_style.MENU, 0.3, 0.6, mad.font_align.LEFT, 2000, true, false, r, g, b, 255, 1, 0, 30, 30, 30, 120)
end


function main()
	while true do
		wait(0)
		if isCharInAnyCar(PLAYER_PED) then
			wait(0)
			while isCharInAnyCar(PLAYER_PED) do
				actualCar = getCarCharIsUsing(PLAYER_PED)
				index = getCarModel(actualCar)
				if cars[index] ~= nil then
					if saved then
						setNewGrip(index)
					else
						originalTractionMult = getTractionMultiplier()
						originalTractionLoss = getTractionLoss()
						originalBrakeDeceleration = getBrakeDeceleration()
						saved = true
					end
					if drawInfos then
						drawInformations()
					end
				end
				wait(0)
			end
			if saved then
				saved = false
			end
		end
	end
end


----event----
function onScriptTerminate()
	if not isCharOnFoot(PLAYER_PED) then
		if cars[index] ~= nil then
			setTractionMultiplier(originalTractionMult)
			setTractionLoss(originalTractionLoss)
			setBrakeDeceleration(originalBrakeDeceleration)
		end
	end
end
http://www.mixmods.com.br/2018/12/downf ... amica.html

Re: [SA][Lua] Downforce Mod V1.0 / Mod de aerodinâmica

Enviado: 01 Dez 2018, 02:34
por plasma
Junior_Djjr escreveu:
30 Nov 2018, 23:36
O seu mod vai editar o handling de todos os carros de mesmo modelo caso você entrar num carro no mesmo frame que ele for criado.
Não parece grande coisa, mas pense isto acontecer diversas vezes, vai mudando o valor por cima do anterior, mais e mais.
Solução: Simplesmente um wait(0) na linha 401, mas já que foi adicionado um frame, provavelmente no próximo frame o CJ tenha sido removido do carro e o carro deletado, então daria crash, portanto tem que checar de novo se o CJ está no carro...

Interessante que o cálculo de ar do mod faz referência até ao site da Nasa kkk.

edit: eu corrigi isto e botei uma maneira mais rápida de desativar as informações na tela.
Vlw pela correção, eu achei que apenas tendo o indievehhandlings.cs já seria o suficiente pra não alterar todos os modelos.
Parando pra pensar daria até pra dar uma adaptada nesse mod pra testar se o veiculo que o player está usando tem um aerofólio ou algum outro aparato aerodinâmico adicionado (pelo tuning mod por exemplo) e assim aumentando a área efetiva que o veiculo tem, poderia ser mais um combo assim como o turbo lag mod.

Re: [SA][Lua] Downforce Mod V1.1 / Mod de aerodinâmica

Enviado: 01 Dez 2018, 05:19
por Junior_Djjr
plasma escreveu:
01 Dez 2018, 02:34
Vlw pela correção, eu achei que apenas tendo o indievehhandlings.cs já seria o suficiente pra não alterar todos os modelos.
Um dia eu vou passar pra .asi daí não vai ter nada para se preocupar.
plasma escreveu:
01 Dez 2018, 02:34
Parando pra pensar daria até pra dar uma adaptada nesse mod pra testar se o veiculo que o player está usando tem um aerofólio ou algum outro aparato aerodinâmico adicionado (pelo tuning mod por exemplo)
Seria bom se você usasse uma função que roda todos os nodes do carro checando o nome (abaixo), daí caso tiver a palavra "spoiler" no nome, aumenta o downforce. A pessoa poderia colocar mais de um por exemplo (spoiler frontal etc).
Também ficaria adaptado com qualquer mod de carro, não necessariamente Tuning Mod.

Pra rodar o nome dos nodes do modelo do veículo é meio chatinho... E só tenho escrito no Sanny Builder:

Código: Selecionar tudo

:SearchParts_Recursion

// 0@ = rwframe

0AC6: 1@ = label @32bytes offset
0AA7: call_function 0x0072FB30 num_params 1 pop 1 0@ -> 1@ // getFrameNodeName

// 1@ = pointer to name

if 0AB1: call_scm_func @GetChild 1 0@ -> 5@
then 0AB1: call_scm_func @SearchParts_Recursion 1 5@
end
if 0AB1: call_scm_func @GetNext 1 0@ -> 5@
then 0AB1: call_scm_func @SearchParts_Recursion 1 5@
end
0AB2: ret 0

Código: Selecionar tudo

:GetNext
0@ += 0x9C
0A8D: 0@ = read_memory 0@ size 4 vp 0
if 0@ > 0
then
    0AB2: ret 1 0@
else
    0AB2: ret 1 0
end

:GetChild
0@ += 0x98
0A8D: 0@ = read_memory 0@ size 4 vp 0
if 0@ > 0
then
    0AB2: ret 1 0@
else
    0AB2: ret 1 0
end
É recursivo, a função chama ela mesma com outro node, assim vai "cavando" a hierarquia do modelo.
Pra chamar:

Código: Selecionar tudo

0A97: 5@ = car 0@ struct // CVehicle
5@ += 0x18 // m_rpClump
0A8D: 5@ = read_memory 5@ size 4 vp 0 // RpClump
0A8E: 6@ = 5@ + 0x4 // m_pstParent
0A8D: 6@ = read_memory 6@ size 4 vp 0 // RwFrame
0AB1: call_scm_func @SearchParts_Recursion 1 6@
Não rode isto todos os frames pois o FPS vai lá embaixo.
Rodar só uma vez quando entrar no carro é melhor.

Re: [SA][Lua] Downforce Mod V1.1 / Mod de aerodinâmica

Enviado: 01 Dez 2018, 16:21
por Victor_Troquetti
No GTA v, qnt mais forte vc aperta a tecla de acelerar mais forte é a arrancada, msm assim parece que o carro meio q fica puxando pra trás (sabe qnd vc tá no carro e seu corpo vai pra trás e vc força pra frente?) Depois da 4° marcha ele acelera normalmente, isso seria legal..

Re: [SA][Lua] Downforce Mod V1.1 / Mod de aerodinâmica

Enviado: 03 Dez 2018, 03:41
por Junior_Djjr
O pessoal curtiu mesmo o seu mod, postei na Mix e já deu 1,4 mil views, muito acima do normal, na semana ultrapassou até RenderHook.

Re: [SA][Lua] Downforce Mod V1.1 / Mod de aerodinâmica

Enviado: 03 Dez 2018, 12:00
por plasma
Junior_Djjr escreveu:
01 Dez 2018, 05:19
Não rode isto todos os frames pois o FPS vai lá embaixo.
Rodar só uma vez quando entrar no carro é melhor.
Blz, assim que eu tiver mais um tempinho livre eu começo a tentar isso.
 
Junior_Djjr escreveu:
03 Dez 2018, 03:41
O pessoal curtiu mesmo o seu mod, postei na Mix e já deu 1,4 mil views, muito acima do normal, na semana ultrapassou até RenderHook.
Ai sim, não esperava que esse mod iria ficar meio popular kkk, vlw pela divulgação.

Adicionado após 2 minutos 24 segundos:
Victor_Troquetti escreveu:
01 Dez 2018, 16:21
No GTA v, qnt mais forte vc aperta a tecla de acelerar mais forte é a arrancada, msm assim parece que o carro meio q fica puxando pra trás (sabe qnd vc tá no carro e seu corpo vai pra trás e vc força pra frente?) Depois da 4° marcha ele acelera normalmente, isso seria legal..
Isso parece (pelo que eu entendi) a inercia do player dentro do carro, seria bem difícil representar isso no gta sa (pelo menos pra mim)...

Re: [SA][Lua] Downforce Mod V2.0 / Mod de aerodinâmica

Enviado: 28 Jan 2019, 23:29
por plasma
Junior_Djjr escreveu:
01 Dez 2018, 05:19
Não rode isto todos os frames pois o FPS vai lá embaixo.
Rodar só uma vez quando entrar no carro é melhor.

Consegui usar uma função com o MoonAdditions que nem precisa de recursão, até onde eu testei não reduziu o muito o desempenho, mas ainda sim não estou checando o tempo todo.
Atualizei o mod e download, versão 2.0.

Re: [SA][Lua] Downforce Mod V2.0 / Mod de aerodinâmica

Enviado: 29 Jan 2019, 16:15
por plasma
Junior_Djjr escreveu:
01 Dez 2018, 05:19
Não rode isto todos os frames pois o FPS vai lá embaixo.
Rodar só uma vez quando entrar no carro é melhor.
Agora que eu percebi, no comentário anterior eu respondi a uma citação que eu tinha feito do seu comentário ahsuaushau.
Enfim, a função de fato não ta perdendo nenhum desempenho, se puder testar e der algo, só falar.

Re: [SA][Lua] Downforce Mod V2.0 / Mod de aerodinâmica

Enviado: 30 Jan 2019, 02:46
por Junior_Djjr
Você usou o nome wing, mas o para-lama danificável (a parte onde se encaixa a roda) se chama wing_rf_dummy e wing_lf_dummy, assim os carros com para-lama danificável iriam ter mais aerodinâmica, o que não faz sentido.
Eu removi isto ao postar na Mix, deixando somente spoiler.

Re: [SA][Lua] Downforce Mod V2.0 / Mod de aerodinâmica

Enviado: 30 Jan 2019, 17:33
por plasma
Junior_Djjr escreveu:
30 Jan 2019, 02:46
Você usou o nome wing, mas o para-lama danificável (a parte onde se encaixa a roda) se chama wing_rf_dummy e wing_lf_dummy, assim os carros com para-lama danificável iriam ter mais aerodinâmica, o que não faz sentido.
Eu removi isto ao postar na Mix, deixando somente spoiler.
Nem sabia dessa, estranho essas partes serem chamadas de 'wing', mas enfim vlw pela correção.

Re: [SA][Lua] Downforce Mod V2.0 / Mod de aerodinâmica

Enviado: 25 Abr 2019, 19:54
por Kr0n0s800
I have problems to configure vehicles added to the mod, is there a way to do it? I have 270 vehicles added, how do I configure each one?