Для начала скачиваем программу она есть в шапке.
Устанавливаем программу.
Запускаем программу и создаём новый пустой проект.
Открываем в меню
Quote
Инструменты>Проводник сценария
В Global Functions пишем следуещее
Code
Application.LoadScript("DelimitedStringFunctions.lua");
Тут же раскрываем Page1 и пишем туда следающий код
Code
function GetIdValues(strVehicleID)
tblResult = {};
local tblID = TextFile.ReadToTable(strPATH);
if (tblID) then
for i, strID in tblID do
tblPart = DelimitedStringToTable(strID, " ");
if (tblPart) then
if (tblPart[1] == strVehicleID) then
for n = 1, Table.Count(tblPart) do
tblResult[Table.Count(tblResult) + 1] = tblPart[n];
end
end
end
end
end
r e turn tblResult;
end
function GetIdName()
if File.DoesExist(strPATH) then
tblResult_1 = {}; --tblResult_2 = {};
tblLines = TextFile.ReadToTable(strPATH);
if (tblLines) then
for i, strLine in tblLines do
if (String.Mid(strLine, 1, 1) ~= "%") and (String.Mid(strLine, 1, 1) ~= "!") and (String.Mid(strLine, 1, 1) ~= "$") and (String.Mid(strLine, 1, 1) ~= "^") then
tblPart = DelimitedStringToTable(strLine, " ");
if (tblPart) then
tblResult_1[Table.Count(tblResult_1) + 1] = tblPart[1];
--else
--tblResult_2[Table.Count(tblResult_2) + 1] = strID;
end
end
end
--for n = Table.Count(tblResult_1) + 1, Table.Count(tblID) do
-- tblResult_2[Table.Count(tblResult_2) + 1] = tblID[n];
--end
end
end
return tblResult_1, tblLines;
end
Далее нажимаем кнопочку закрыть.
Делаем 2й клик около окна проекта выставляем нужный размер окна, в моём случае это 500х600.
далее делаем 2й клик по окну и там меняем цвет фона окна если конечно хотим его поменять, также фоном можно сделать любую картинку, вот скриншот что у нас получилось.
Далее добавляем объекты
Quote
ComboBox1-Это выпадающий список
Input1-Это поле ввода текста их нам надо будет очень много
Button1-Это кнопка нужно 3-4 кнопки
Объекты добовляем кликом правой кнопки мишки на окне проекта.
Так как значений очень много делать всё придётся очень плотно чтобы получить компактную программу. Получаем примерно сдуещие
Я решил отказатся от фоновой картинки так как она мешает немного. Раставляем объекты примерно таким образом.
Далее кликаем 2 раза по элементу раскрывающигося списка и во вкладке скрипт прописываем следующие в раздео он селект
Code
if (e_Selection) then
if (strPATH) then
tblValues = GetIdValues(ComboBox.GetItemText("ComboBox1", e_Selection));
end
end
if tblValues then
for i = 2, 37 do
Input.SetText("Input"..i, tblValues[i]);
end
end
--[[Input.SetText("Input2", tblValues[2]);
Input.SetText("Input2", tblValues[3]);
Input.SetText("Input3", tblValues[5]);
Input.SetText("Input4", tblValues[6]);
Input.SetText("Input5", tblValues[7]);
Input.SetText("Input6", tblValues[8]);
Input.SetText("Input7", tblValues[9]);
Input.SetText("Input8", tblValues[10]);
Input.SetText("Input9", tblValues[11]);
Input.SetText("Input10", tblValues[12]);
Input.SetText("Input11", tblValues[22]);
Input.SetText("Input12", tblValues[23]);
Input.SetText("Input13", tblValues[24]);
Input.SetText("Input14", tblValues[25]);
Input.SetText("Input15", tblValues[26]);
Input.SetText("Input16", tblValues[27]);
Input.SetText("Input17", tblValues[28]);
Input.SetText("Input18", tblValues[13]);
Input.SetText("Input19", tblValues[14]);
Input.SetText("Input20", tblValues[16]);
Input.SetText("Input21", tblValues[17]);
Input.SetText("Input22", tblValues[18]);
Input.SetText("Input23", tblValues[19]);
Input.SetText("Input24", tblValues[20]);
Input.SetText("Input25", tblValues[21]);
Input.SetText("Input26", tblValues[29]);
Input.SetText("Input27", tblValues[30]);
Input.SetText("Input28", tblValues[31]);
Input.SetText("Input29", tblValues[32]);
Input.SetText("Input30", tblValues[4]);
Input.SetText("Input31", tblValues[15]);
Input.SetText("Input32", tblValues[33]);
Input.SetText("Input33", tblValues[34]);
Input.SetText("Input34", tblValues[35]);
Input.SetText("Input35", tblValues[36]);
Input.SetText("Input36", tblValues[37]);]]
Кликаем 2 раза по кнопке открыть и открываем вкладку скрипт, пишем следующий код в он клицк.
Code
local strREGPATH = Registry.GetValue(HKEY_LOCAL_MACHINE, "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\GameUX\\GamesToFindOnWindowsUpgrade\\{41AD5594-259E-4DA5-8420-4050E73BC67E}", "GameInstallPath", true);
if (strREGPATH ~= "") then
strPATH = strREGPATH.."\\common\\data\\handling.dat";
else
strPATH = nil;
local tblFiles = Dialog.FileBrowse(true, "Locate File", _DesktopFolder, "DAT Files (*.dat)|*.dat|", "", "dat", false, false);
if (tblFiles ~= nil) and (tblFiles[1] ~= "CANCEL") then
strPATH = tblFiles[1];
end
end
if (strPATH ~= nil) then
tblIDs, tblLines = GetIdName();
if (tblIDs) then
for i, strIDName in tblIDs do
result = ComboBox.AddItem("ComboBox1", strIDName, "");
end
ComboBox.SetSelected("ComboBox1", 1);
end
end
Далее такоеже действие с кнопкой сохранить как только прописываем туда следуещий код
i
Code
f (ComboBox.GetSelected("ComboBox1") ~= -1) then
strOut = ComboBox.GetItemText("ComboBox1", ComboBox.GetSelected("ComboBox1"));
for i = 2, 37 do
strOut = strOut.." "..Input.GetText("Input"..i);
end
if (tblLines) then
Table.Remove(tblLines, ComboBox.GetSelected("ComboBox1"));
Table.Insert(tblLines, ComboBox.GetSelected("ComboBox1"), strOut);
local tblFiles = Dialog.FileBrowse(false, "Locate File", _DesktopFolder, "DAT Files (*.dat)|*.dat|", "handling", "dat", false, false);
if (tblFiles[1] ~= "CANCEL") then
TextFile.WriteFromTable(tblFiles[1], tblLines, false);
end
end
end
Остальные кнопки пока не создаем, ато будет слижком сложно, делаем всё по минимуму.
Инпут текст будут номероватся согласно таблице, когда мы открывает хандинг блокнотом видем следующие:
Code
; mass in Kg
; velocity in Km/h
; acceleration/deceleration in ms-2
; multipliers x1.0 is default
; angles in degrees
; Levels :- (L)ow, (M)edium, (H)igh
; buoyancy = percent submerged (> 100% vehicle sinks)
; engine type :- (P)etrol, (D)iesel, (E)lectric
; engine drive :- (F)ront, (r)ear, (4)-wheel drive
;
; > FIELD DESCRIPTIONS <
; ----------------------
; (A) vehicle identifier [14 characters max]
; (B) fMass
; (c) fDragMult
; (D) nPercentSubmerged [10 to 120]
; (E) CentreOfMass.x [-10.0 > x > 10.0]
; (F) CentreOfMass.y [-10.0 > x > 10.0]
; (G) CentreOfMass.z [-10.0 > x > 10.0]
;
; TRANSMISSION
; (Tt) m_nDriveBias 1.0 = front wheel drive, 0.0 = rear wheel drive
; (Tg) m_nDriveGears
; (Tf) m_fDriveForce
; (Ti) m_fDriveInertia
; (Tv) m_fV
; (Tb) m_fBrakeForce
; (Tbb) m_fBrakeBias
; (Ts) m_fSteeringLock
;
; WHEEL TRACTION
; (Wc+) m_fTractionCurveMax (formerly fTractionMult)
; (Wc-) m_fTractionCurveMin (formerly fTractionLoss)
; (Wc-) m_fTractionCurveLateral (shape of lateral traction curve (peak traction position in degrees)
; (Wc|) m_fTractionCurveLongitudinal (shape of longituduinal traction curve (peak traction position in degrees)
; (Ws+) m_fTractionSpringDeltaMax (max dist for traction spring)
; (Wh) m_fTractionBias
;
; SUSPENSION
; (Sf) m_fSuspensionForce (1 / (Force * NumWheels) = Lower limit for zero force at full extension
; (Scd) m_fSuspensionCompDamp
; (Srd) m_fSuspensionReboundDamp
; (Su) m_fSuspensionUpperLimit
; (Sl) m_fSuspensionLowerLimit
; (Sr) m_fSuspensionRaise
; (Sb) m_fSuspensionBias
;
; DAMAGE
; (Dc) m_fCollisionDamageMult
; (Dw) m_fWeaponDamageMult
; (Dd) m_fDeformationDamageMult
; (De) m_fEngineDamageMult
;
; MISC
; (Ms) m_fSeatOffsetDist
; (Mv) m_nMonetaryValue
; (Mmf) mFlags (model flags - see below)
; (Mhf) hFlags (handling flags - see below)
; (Ma) m_nAnimGroup (anim group type - see below below)
;
; MODEL FLAGS - written HEX for easier reading of flags
; 1st digit 1: IS_VAN 2: IS_BUS 4: IS_LOW 8: IS_BIG
; 2nd digit 1: ABS_STD 2: ABS_OPTION 4: ABS_ALT_STD 8: ABS_ALT_OPTION
; 3rd digit 1: NO_DOORS 2: TANDEM_SEATS 4: SIT_IN_BOAT 8: N/A
; 4th digit 1: NO_EXHAUST 2: DOUBLE_EXHAUST 4: NO1FPS_LOOK_BEHIND 8: CAN_ENTER_IF_NO_DOOR
; 5th digit 1: AXLE_F_NOTILT 2: AXLE_F_SOLID 4: AXLE_F_MCPHERSON 8: AXLE_F_REVERSE
; 6th digit 1: AXLE_R_NOTILT 2: AXLE_R_SOLID 4: AXLE_R_MCPHERSON 8: AXLE_R_REVERSE
; 7th digit 1: IS_BIKE 2: IS_HELI 4: IS_PLANE 8: IS_BOAT
; 8th digit 1: BOUNCE_PANELS 2: DOUBLE_RWHEELS 4: FORCE_GROUND_CLEARANCE 8: IS_HATCHBACK
;
; HANDLING FLAGS - written HEX for easier reading of flags
; 1st digit 1: SMOOTH_COMPRESN 2: N/A 4: NPC_ANTI_ROLL 8: NPC_NEUTRAL_HANDL
; 2nd digit 1: NO_HANDBRAKE 2: STEER_REARWHEELS 4: HB_REARWHEEL_STEER 8: ALT_STEER_OPT
; 3rd digit 1: WHEEL_F_NARROW2 2: WHEEL_F_NARROW 4: WHEEL_F_WIDE 8: WHEEL_F_WIDE2
; 4th digit 1: WHEEL_R_NARROW2 2: WHEEL_R_NARROW 4: WHEEL_R_WIDE 8: WHEEL_R_WIDE2
; 5th digit 1: HYDRAULIC_GEOM 2: HYDRAULIC_INST 4: HYDRAULIC_NONE 8: NOS_INST
; 6th digit 1: OFFROAD_ABILITY 2: OFFROAD_ABILITY2 4: HALOGEN_LIGHTS 8: PROC_REARWHEEL_1ST
; 7th digit 1: USE_MAXSP_LIMIT 2: LOW_RIDER 4: STREET_RACER
; 8th digit 1: SWINGING_CHASSIS 2: OLD_PHYSICS
;
; > THE DATA <
; name mass drag boy centreofmass transmission brakes steer wheel-traction suspension damage seat val mflags hflags anim
; A B C D E F G Tt Tg Tf Ti Tv Tb Tbb Thb Ts Wc+ Wc- Wc- Ws+ Wbias Sf Scd Srd Su Sl Sr Sb Dc Dw Dd De Ms Mv Mmf Mhf Ma
;
ADMIRAL 1700.0 6.0 85 0.0 0.0 -0.2 0.0 5 0.17 1.0 140.0 0.22 0.65 0.7 35.0 1.2 0.95 14.0 0.13 0.47 1.6 1.0 1.0 0.15 -0.16 0.0 0.5 1.0 1.0 0.7 1.5 0.0 25000 440080 0 0
AIRTUG 1400.0 20.0 85 0.0 0.0 -0.2 0.0 5 0.10 1.0 140.0 0.4 0.50 0.7 35.0 1.15 0.95 11.0 0.10 0.5 4.0 1.5 1.5 0.10 -0.10 0.0 0.5 1.0 1.0 0.8 1.5 0.0 15000 440000 0 0
На это надо смотреть в блокноте тут есть перенос строки и не много не понятно, ну ладно щас попробую объяснить.
видим примерно следуещие:
A B C D E F G Tt Tg Tf Ti Tv Tb Tbb
ADMIRAL 1700.0 6.0 85 0.0 0.0 -0.2 0.0 5 0.17 1.0 140.0 0.22
столбик A эту у нас значение 1 равное первому столбику тоесть выводит название так: ADMIRAL
столбик B у нас имеет зеачение 1700.0 это значение 2, тоесть инпут2 будет иметь значение 2, почему не значение 1 ? да потомучто в раскрывающимся списке выводится название машины, тоест весь стольбик A остальные начиная со 2го значения будут выводится в инпут2 инпут3 и так далее..
как нам узначь что означет значение 1 2 3 4 итп ?
смотрим фаил хондинг выше там есть следующие
; (A) vehicle identifier [14 characters max]
; (B) fMass
; © fDragMult
A это у нас модель
B это масса
C Это множитель столкновения и так далее все колонки..
A это значение 1 выводится в раскрывающийся список, B значение 2 выводится в инпут2, C значение 3 будет выводится в инпут3 итак далее все значения в инпут прописываем тоесть ставим нужную цифру столбика и на против его пишем что будет редактировать данный инпут.
Скрины уже работающий программы вот:
Удачи в написании своей программы, сли чо пишите на форум подскажу чо смогу