Начнем пожалуй новую тему про яву. Со временем я буду пополнять этот пост. Некоторые строки я буду удалять, т.к. это займет слишком много места. (через пару минут будет готово)
Разумеется многие строки повторяются, поэтому рассматривать я буду их только 1 раз, пользуйтесь поиском.
Я не буду использовать code, т.к. в нем недоступны цвета текста
Разумеется я знаю далеко не все и могу ошибатся, также я оставляю строки без комментария, если они мне не понятны, дополняйте, критикуйте, все это приветствуется. Начнем с двигателя. (на примере einvagen 110 gt)
Блок:
************************************************************************
package java.game.parts.engines.Einvagen_Duhen_Ishima_Focer; //собственно адрес нашего двигателя с точностью до папки, если хотим сделать свой движок, меняем адрес на свой.
import java.util.*; //импортируемые явы-родители и не только.
...
public class Einvagen_110_GT_block extends Block_Inline_OHC // Einvagen_110_GT_block - уникальное имя нашей детали, точно таким же должно быть имя этой явы, т.е. Einvagen__110_GT_block.java //Block_Inline_OHC - ява-родитель, т.е. чтобы не прописывать каждой детали все ее свойства, это делается в явах-родителях, Block_Inline_OHC тоже ссылается на другого родителя и в конце концов это сводится обычно к part.java в котором прописаны универсальные свойства деталей. В принципе в обычном моддинге это неважно.
{
public Einvagen_110_GT_block( int id ) // не забываем и эту строку изменить, если делаем свою деталь на основе этой.
{
super( id );
name = "Einvagen 110 GT/GTK block"; // имя нашей детали в игре.
description = "";// описание детали в игре, правда где - не понятно.
brand_new_prestige_value = 55.70; // престиж детали, прибавляется к престижу машины, при установке детали в машину
value = tHUF2USD(60); // цена детали, чтобы узнать истинную цену в игре, умножте это значение примерно на 5
setMaxWear(kmToMaxWear(210000.0)); // ресурс детали
bore = 80.0; // по-моему объем двигателя, но он зависит не только от значения в блоке..
crankshaft_slot_ID = 40; // слоты для деталей блока, Raxat сказал не трогать их, чтож я ему верю.
crankshaft_bearing_slot_ID = 97;
transmission_slot_ID = 1;
oil_pan_slot_ID = 37;
cylinder_head_slot_ID = 47;
rpm_idle = 850.0; // холостые обороты двигателя, также могут быть заданы в яве модели автомобиля.
time_spark_min = sparkAngleTo4cycleTime(315.0); // понятия не имею
time_spark_inc = sparkAngleTo4cycleTime(355.0)-time_spark_min;
time_spark_RPM0 = 2250;
time_spark_RPM1 = 5500;
RPM_limit = 6500; // красная линия, она же отсечка оборотов двигателя.
cylinders = 4; // кол-во цилиндров в двигателе, это и самый простой читерский способ увеличить мощность.
check4warnings();
}
public void updatevariables()
{
super.updatevariables();
getCar_LocalVersion();
if (the_car)
{
SfxTable tab;
if (tab = the_car.getSfxTable(0))
{
tab.clear();
tab.addItem(new ResourceRef(parts.engines.Einvagen_Duhen_Ishima_Focer:0x000000A2r), 1500.0, 500.0, 6500.0, 0.42, 0.52); // звук двигателя и его соответсвие оборотам, т.е. как я понял данный звук (по адресу 0x000000A2 в рпк двигателя) соответствует оборотам 1500, 500 и 6000 , значения 0.42 и 0.52 не понятны .. вероятно громкость или еще чего, я не проверял.
tab.addItem(new ResourceRef(parts.engines.Einvagen_Duhen_Ishima_Focer:0x000000A9r), 5000.0, 3000.0,18000.0, 0.62, 1.00);
}
....
}
}
}
public void addStockParts( Descriptor desc ) // собственно здесь мы прописываем адреса для деталей, которые будут установлены в машине при покупке, здесь - в блоке двигателя, соответсвенно, если на деталь ставятся другие детали, то она тоже будет содержать эти строки
{
super.addStockParts( desc );
getCar_LocalVersion();
if (the_car.make == the_car.MAKE_EINVAGEN) //если машина einvagen
{
if (the_car.model == Einvagen_models.MODEL_110_GT) //если модель 110 GT
{
addPart( parts.engines.Einvagen_Duhen_Ishima_Focer:0x000000D3r, "Einvagen_110_GT_crankshaft", desc ); // то добавляем деталь 0x000000D3 т.е. Einvagen_110_GT_crankshaft
....
}
}
}
public String isDynoable() // здесь написано условие, при котором машина может завестись.
{
Part p; // наш блок назовем p
p = partOnSlot( 14 );// ..находящаяся в 14 слоте
if (!p) // если ее нету в 14 слоте
return "the engine is missing the alternator."; // то создаем окошко с надписью the engine is missing the alternator.
return super.isDynoable(); // в противном случае все нормально.
}
}
************************************************************************
распредвалы на примере exhaust camshaft, он же выпускной распредвал
************************************************************************
public class Einvagen_110_GT_exhaust_camshaft extends DOHC_Camshaft
{
public Einvagen_110_GT_exhaust_camshaft( int id )
{
...
static_input_lobe_separation = 265.0; // пока не знаю, за что отвечает, но влияет на крутящий момент.
static_input_lift_in_open = 0.0; // =13.5 в intake camshaf t - отвечает за высоту подъема впускного клапана, увеличивая это значение можно повысить мощность.
static_input_lift_in_close = 0.0; // вероятно высота закрытого впускного клапана.
static_input_lift_out_open = 13.5; // отвечает за высоту подъема выпускного клапана, увеличивая это значение можно повысить мощность.
static_input_lift_out_close = 0.0; // вероятно высота закрытого выпускного клапана.
static_input_time_in_duration = 0.0;
static_input_time_out_duration = 195.0;
advance_positive_peak = +15.0;// настройки вала в тюнинг меню, максимальное и ..
advance_negative_peak = -15.0; //.. минимальное значение
advance_minimum_step = 1.0; // шаг ползунка в тюнинг меню
advance = 0.0; // значение по умолчанию (после покупки)
...
maxRPM = 10000.0;// максимальные обороты двигателя, при которых работает эта деталь.
inertia = kgToInertia(4.0); // инерция детали, соответственно уменьшая инерцию, можно добиться более чувствительного двигателя, увеличивая - комфортность, например при трогании с места или переключении передач.
}
}
************************************************************************
intake manifold он же грубо говоря инжектор
public class Einvagen_110_GT_intake_manifold extends IntakeManifold
{
public Einvagen_110_GT_intake_manifold( int id )
{
...
efficiency = 0.80;// эффективность детали, изменяя это значение можно изменить мощность/момент двигателя, в этой детали не делайте это значение выше 0.99, т.к. появятся глюки.
}
public void updatevariables()
{
mixture_ratio = 1.0;
max_fuel_consumption = 0.0; // потребление топлива, да да .. инвиктус хотели много чего интересного сделать, но .. значение естественно ни на что не влияет.
max_air_consumption = 0.150; // расход воздуха
mixture_H = 1.0;
time_burn = 0.1;
....
************************************************************************
transmission она же коробка передач.
************************************************************************
public class Faktun_Group_Tran6_transmission extends Transmission
{
public Faktun_Group_Tran6_transmission( int id )
{
...
gears = 6;// количество передач
ratio[0] = 0; // видимо передаточное число нейтралки )))
ratio[1] = 3.550; // передаточные числа других передач
ratio[2] = 2.510;
ratio[3] = 1.760;
ratio[4] = 1.210;
ratio[5] = 0.930;
ratio[6] = 0.750;
ratio[7] =-4.000; // передаточное число заднего хода
end_ratio = 4.087; // главное передаточное число
starter_torque = 60.0; // крутящий момент стартера
adjustable_gears = 1+2+4; // forward gears, reversing gear, end ratio // изменяемые в тюнинг меню передаточные числа, т.е. все.
amount_of_oil_needed = 0.0;// internally lubricated // бугага, инвиктус хотели сделать масло в коробке, но ...
best_lubrication_sliction=0.99; // видимо тоже тема с маслом, отсутствие трения при максимальном кол-ве масла ...
worst_lubrication_sliction=0.85; // и довольно напряжное, если масла нету.
drive_type = DT_FWD; // DT_FWD - переднеприводная коробка, DT_RWD - заднеприводная коробка, а еще есть вроде DT_CWD - cross wheel drive, уж не знаю что инвиктус имели в виду .. не похоже на полный привод.
drive_front_min = 0.25; // минимальный привод на передние колеса (можно установить 0, чтобы коробка работала полностью как заднеприводная) все ниженаписанное, можно регулировать в тюнинг-меню.
drive_front_max = 0.75; // максимальный передний привод (можно установить 1, чтобы коробка была полностью переднеприводной)
def_drive_front = 0.50; // по умолчанию крутящий момент идет поровну на обе оси, т.е. полноприводная машина
drive_front = def_drive_front;
diff_lock_min = 0.10; // минимальное значение блокировки дифференциала (можно установить 0, чтобы блокировка дифференциала отсутствовала)
diff_lock_max = 0.75; // максимальное значение блокировки дифференциала (можно установить 1, чтобы полностью заблокировать дифференциал в тюнинг меню)
def_diff_lock = 0.25; // значение по умолчанию
diff_lock = def_diff_lock;
}
************************************************************************
fuel rail она же топливная рельса с форсунками
************************************************************************
public class Einvagen_PerPro_GTA_fuel_rail extends FuelInjectorSystem
{
public Einvagen_PerPro_GTA_fuel_rail( int id )
{
...
max_fuel_consumption = 0.02; // максимальное потребление топлива, т.к. бензин неограничен, ни на что не влияет.
default_mixture_ratio = 14.5; // смесь воздуха к топливу по умолчанию (14.5 частей воздуха на 1 часть топлива.)
default_fuel_type = FT_GAS_95; // тип топлива, возможные значения: FT_GAS_95, FT_GAS_98, FT_GAS_100, FT_METHANOL, FT_DIESEL.
mixture_ratio = default_mixture_ratio;
fuel_type = default_fuel_type;
calcStuffs();
check4warnings();
}
}
************************************************************************
turbocharger он же турбонаддув
************************************************************************
public class Shimutshibu_RC_MWFCR22W12_turbocharger extends TurboCharger
{
public Shimutshibu_RC_MWFCR22W12_turbocharger( int id )
{
...
calculateOptandRange (4500.0, 8750.0); // диапазон оборотов двигателя, на которых работает эта турбина, завязано со значением ...
P_turbo_max = 4.00; // вот с этим значением, т.е. если вы устанавливаете большой диапазон (например от 100 до 10000 rpm, то вам понадобится увеличить значение p_turbo_max, в противном случае особого эффекта не будет, или же если диапазон оборотов будет не очень высок, например от 5500 до 7000, то это значение лучше уменьшить, т.к. будет резкий скачок мощности в этом диапазоне, что затруднит управление автомобилем)
default_P_turbo_waste = 1.25;
P_turbo_waste = default_P_turbo_waste;
max_waste = 2.0; // максимальное давление турбины в тюнинг меню, также завязано с p_turbo_max
min_waste = 0.75; // минимальное давление турбины в тюнинг меню
}
Продолжение завтра