Página 1 de 2

[SA][Lua] Downforce Mod V2.5 / Mod de aerodinâmica

Enviado: 15 Nov 2018, 15:15
por plasma
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.
Basicamente esse script adiciona efeitos de sustentação negativa/positiva dependendo do carro (você pode configurar abrindo o arquivo .lua em um editor de texto qualquer, inclusive recomendo muito ler os comentários que adicionei no arquivo), que esses efeitos fazem? A grosso modo sustentação negativa (ou downforce) aumenta a estabilidade e aderência do veiculo a medida que a velocidade do mesmo aumenta, e sustentação positiva (ou lift) diminui a estabilidade e aderência a medida que a velocidade aumenta.

Talvez seja compatível com carros adicionados (eu não cheguei a testar), mas uma coisa que provavelmente você vai precisar é do indievehhandlings.cs, pois o script altera valores de memoria da handling do modelo do veiculo que você está usando.
Recomendo usar um arquivo handling.dat modificado para carros mais rápidos, pois os efeitos aerodinâmicos são mais perceptíveis em velocidades altas.






Imagem
Efeito de downforce alta na suspensão.

Requer MoonAdditions e indievehhandlings.cs

UPDATE V2.5
-Adicionada interface gráfica para mudar as configurações de veículos ingame, digite "wdit" para abri-la ou fecha-la (feita por Um_Geek).
-Adicionado novo modo (mode 4) onde uma força é literalmente aplicada no veículo fazendo com que o mesmo "cole" no chão (caso tenha downforce o suficiente), diferentemente dos outros modos onde apenas é multiplicado certos valores da handling. Esse modo é tecnicamente mais realista pois, como sugerido em seu nome, a downforce é literalmente isso: uma força para baixo, mas fique atento, esse modo pode causar problemas para a suspensão do veículo caso ela seja muito macia. Além do mais, a informação sobre o grip relativo perde precisão, pois agora é apenas a física do jogo que irá mudar o comportamento do veículo.
downforce_V2.5.zip
(7.59 KiB) Baixado 25 vezes
downforce_V2.5.zip
(7.59 KiB) Baixado 25 vezes


Versão antiga:
downforce_mod_V2.0_release.rar
(5.86 KiB) Baixado 61 vezes
downforce_mod_V2.0_release.rar
(5.86 KiB) Baixado 61 vezes

Pretendo adicionar mais algumas coisas sugeridas como o draft (vácuo gerado por um veículo a sua frente e possibilitando seu veículo ir mais rápido) e centro de pressão, porém essas coisas provavelmente vão demorar.

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

// [email protected] = rwframe

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

// [email protected] = pointer to name

if 0AB1: call_scm_func @GetChild 1 [email protected] -> [email protected]
then 0AB1: call_scm_func @SearchParts_Recursion 1 [email protected]
end
if 0AB1: call_scm_func @GetNext 1 [email protected] -> [email protected]
then 0AB1: call_scm_func @SearchParts_Recursion 1 [email protected]
end
0AB2: ret 0

Código: Selecionar tudo

:GetNext
[email protected] += 0x9C
0A8D: [email protected] = read_memory [email protected] size 4 vp 0
if [email protected] > 0
then
    0AB2: ret 1 [email protected]
else
    0AB2: ret 1 0
end

:GetChild
[email protected] += 0x98
0A8D: [email protected] = read_memory [email protected] size 4 vp 0
if [email protected] > 0
then
    0AB2: ret 1 [email protected]
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: [email protected] = car [email protected] struct // CVehicle
[email protected] += 0x18 // m_rpClump
0A8D: [email protected] = read_memory [email protected] size 4 vp 0 // RpClump
0A8E: [email protected] = [email protected] + 0x4 // m_pstParent
0A8D: [email protected] = read_memory [email protected] size 4 vp 0 // RwFrame
0AB1: call_scm_func @SearchParts_Recursion 1 [email protected]
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, 11:57
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?