Alex

Стандарт цен

236 сообщений в этой теме

Тебе неинтересно, а мне интересно. Я люблю долгие затяжные игры на хороших картах с развитием. Так что это уже дело вкуса. Согласен, что "вшивать" такое изменение в мод не нужно. Но можно сделать дополнительный мод или сказать где и что поменять.

Нужно скачать http://www.cimexchange.com/files/file/143-time-slow-down-mod/ а затем в файле engine.script

with (MAIN.$mainClock = $mainClock = clock($time, $date)) {

.speed = 10000.0;

.paused = true;

Если нужно увеличить игровой день, значение надо уменьшать.

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Честно говоря, меня за время игры ни разу не напрягала частота поломок. И в Роттенбурге, и в Мюнхене при обслуживании 95% транспорт ломался вполне себе сносно и чинился достаточно быстро. Конечно, там транспорт был немецкий с соответствующей надёжностью, однако это лишний раз доказывает необходимость прямого влияния вероятность поломки на вероятность поломки (пардон за каламбур).

По этим двум причинам я очень сомневаюсь в необходимости добавления этого мода в ЕСЦ

Вот только у меня почему-то транспортные средства ломаются одинаково часто, что новые, что старые. Поэтому я считаю что данная модификация обязательно должна быть в ЕСЦ, так как совершенно ему не мешает, и более того - делает его реалистичнее. Так как транспорт с 35% всё равно будет ломаться чаще, чем с 5%. Но при этом общее состояние ТС теперь тоже важно.

Мой файлик.

$viewport = MAIN.$viewport;

$desktop = MAIN.$desktop;

$grid = MAIN.$grid;

$camera = MAIN.$camera;

$strings = MAIN.$strings;

MAIN.$playerData = this;

MAIN.$gameData = $data = load "/"+MAIN.$dataFileName;

checkExtraVehicles();

checkExtraBanks();

$tramBuildCount = 0;

$tramEndCount = 0;

if (MAIN.$scenario : false) {

$scenarioData = MAIN.$scenario.$scenario;

MAIN.$scenario.initEngineData();

if ($data.$defaultValues : false) {

$data.$lastYearCompanyValue = MAIN.$scenario.$scenario.$money;

MAIN.$scenario.initGameData();

$data.$defaultValues = false;

}

} else {

$scenarioData = null;

}

with (MAIN.$player = $player = new_gridPlayer($desktop)) {

.setRect(0, 0, $desktop.width, $desktop.height);

.visible = true;

.active = true;

.grid = $grid;

.camera = $camera;

.viewport = $viewport;

}

// Create hud layers

with (MAIN.$hud = $hud = new_control($player)) {

.setRect(0, 0, $viewport.width, $viewport.height);

.canActivate = false;

.clickThroughSelf = true;

.visible = true;//!(MAIN.$settings.$videoCaptureMode : false);

.audible = true;

}

with (MAIN.$backHud = $backHud = new_control($hud)) {

.setRect(0, 0, $viewport.width, $viewport.height);

.canActivate = false;

.clickThroughSelf = true;

.visible = true;

.audible = true;

}

with (MAIN.$frontHud = $frontHud = new_tracerOrganizer($hud)) {

.setRect(0, 0, $viewport.width, $viewport.height);

.canActivate = false;

.clickThroughSelf = true;

.visible = true;

.audible = true;

}

function checkExtraVehicles() {

$vehicles = MAIN.$level.getPlayerVehicles();

foreach (keys $vehicles) {

if (!(defined MAIN.$gameData.$availableVehicles[current])) {

MAIN.$gameData.$availableVehicles[current] = $vehicles[current];

}

}

}

function checkExtraBanks() {

$banks = MAIN.$level.getAvailableBanks();

foreach (keys $banks) {

if (!(defined MAIN.$gameData.$availableBanks[current])) {

MAIN.$gameData.$availableBanks[current] = $banks[current];

}

}

}

function spendMoney($amount, $purchase = true) {

if ($amount == 0) return true;

if ($scenarioData == null) return true;

if ($scenarioData.$money < $amount) return false;

if ($scenarioData.$money != 2000000000) $scenarioData.$money -= $amount;

if ($purchase) $data.$currentPurchases -= $amount;

return true;

}

function earnMoney($amount, $sale = true) {

if ($scenarioData == null) return;

$wasMoney = $scenarioData.$money;

if ($scenarioData.$money - 2000000000 + $amount >= 0) $scenarioData.$money = 2000000000;

else $scenarioData.$money += $amount;

if ($sale) $data.$currentSales += $amount;

MAIN.$score.$maxPlayerMoney = max(MAIN.$score.$maxPlayerMoney, $scenarioData.$money);

if ($wasMoney < 1500000 && $scenarioData.$money >= 1500000) MAIN.$achievement.unlock(16);

if ($wasMoney < 10000000 && $scenarioData.$money >= 10000000) MAIN.$achievement.unlock(17);

}

function saveData($dataFileName) {

$data.exportVariablesTo($dataFileName, "defaultValues", "fuelPrice", "electricityPrice", "customerHappiness", "employeeHappiness", "companyReputation", "currentProfit",

"monthlyTicketProfit", "currentPenalties", "monthlyPenalties", "monthlyProfit", "currentPurchases", "vMaintenanceExpenses", "sMaintenanceExpenses", "energyExpenses",

"loanExpenses", "wageExpenses", "purchaseExpenses", "monthlyExpenses", "totalMonthlyProfit", "serviceCoverage", "serviceCoverageHistory", "serviceUsage",

"serviceUsageHistory", "availableVehicles", "vehiclePurchaseCount", "ownVehicles", "loanPayments", "lastLineIndex", "lines", "ticketPrices", "availableBanks",

"totalMonthlyProfitHistory", "customerProfiles", "economyHistory", "economyTarget", "activeIcons", "maintenanceLevel", "wageLevel", "companyReputationHistory",

"electricityPriceHistory", "fuelPriceHistory", "populationHistory", "companyDebtHistory", "passengersCarried", "lastIconID", "unemploymentHistory", "totalReputation",

"carUsageHistory", "serviceUsages", "extraHappiness", "vehiclePriceMultiplier", "companyValue", "salesIncome", "currentSales", "companyValueHistory",

"availableCampaigns", "advertisingCampaigns", "tickerItems", "maintenanceLevel2", "lastYearCompanyValue", "yearlyCustomerHappiness", "boardRating", "customerRating",

"mostProfitableVehicle", "leastProfitableVehicle", "yearlyTasksCompleted", "lastYearTasksCompleted", "yearlyPassengersCarried", "lastYearPassengersCarried",

"yearlyVehiclesSold", "lastYearVehiclesSold", "lastYearCoverage", "yearlyFires", "lastYearFires", "yearlyCollisions", "lastYearCollisions", "passengersCarriedHistory",

"vehicleSpeedMultiplier", "vehicleEnergyMultiplier", "subventionCount", "transportedToMall", "maxYearlyVehicles", "baseCompanyValue");

$data.scriptFilename = $dataFileName;

}

function updateEmployeeHappiness() {

$baseWages = [1650, 1800, 1850, 2100];

for ($i = 0; $i < 4; ++$i) {

$data.$employeeHappiness[$i] = clamp(0.5 + ($data.$wageLevel[$i] - MAIN.$economy.getWage($baseWages[$i])) * ($i + 2) * 0.00025, 0.0, 1.0);

}

}

function updateReputation() {

$reputationMultipliers = [0.10, 0.09, 0.12, 0.15];

$baseHappiness = 0.0;

for ($i = 0; $i < 4; ++$i) {

$baseHappiness += ($data.$employeeHappiness[$i] - 0.5) * $reputationMultipliers[$i];

}

$oldReputation = $data.$totalReputation;

$data.$totalReputation = 0.0;

for ($i = 0; $i < 7; ++$i) {

$oldReputation2 = $data.$companyReputation[$i];

$data.$companyReputation[$i] = clamp($baseHappiness + $data.$customerHappiness[$i] + $data.$extraHappiness[$i], 0.0, 1.0);

$data.$totalReputation += $data.$companyReputation[$i] * 0.14285;

if ($oldReputation2 < 0.890 && $data.$companyReputation[$i] >= 0.890) {

MAIN.$petitionbar.addTickerText(1, escapePattern(expandPattern($strings.$newsticker_highReputations_text[$i], MAIN.$scenario.getCityName())));

} else if ($oldReputation2 > 0.510 && $data.$companyReputation[$i] <= 0.510) {

MAIN.$petitionbar.addTickerText(0, escapePattern(expandPattern($strings.$newsticker_lowReputations_text[$i], MAIN.$scenario.getCityName())));

}

}

foreach ($grid.lines.children()) {

.attractiveness = $data.$totalReputation;

}

MAIN.$score.$minReputation = min(MAIN.$score.$minReputation, $data.$totalReputation);

MAIN.$score.$maxReputation = max(MAIN.$score.$maxReputation, $data.$totalReputation);

if ($oldReputation < 0.700 && $data.$totalReputation >= 0.700) MAIN.$achievement.unlock(6);

if ($oldReputation < 0.995 && $data.$totalReputation >= 0.995) MAIN.$achievement.unlock(7);

if ($oldReputation > 0.004 && $data.$totalReputation <= 0.004) MAIN.$achievement.unlock(8);

if ($oldReputation < 0.890 && $data.$totalReputation >= 0.890) {

MAIN.$petitionbar.addTickerText(1, escapePattern(expandPattern($strings.$newsticker_reputation2_text, MAIN.$campaign.$campaign.$companyName)));

} else if ($oldReputation < 0.730 && $data.$totalReputation >= 0.730) {

$citizen = MAIN.$grid.citizens.getRandomCitizen();

if ($citizen) {

MAIN.$petitionbar.addTickerText(1, escapePattern(expandPattern($strings.$newsticker_reputation1_text, MAIN.$secondaryView.getCitizenName($citizen))), MAIN.$secondaryView.getCitizenPosition($citizen));

}

}

}

function updateCompanyValue() {

if ($scenarioData == null) return;

$data.$companyValue = $scenarioData.$money + $data.$baseCompanyValue;

foreach (keys $data.$ownVehicles) {

$vehicleData = $data.$ownVehicles[current];

$object = MAIN.$grid.getGridObject($vehicleData["name"]);

$data.$companyValue += int($object.$price * $vehicleData["condition"]);

}

/*$count = MAIN.$grid.lines.getStopCount();

for ($i = 0; $i < $count; ++$i) {

$stop = MAIN.$grid.lines.getStop($i);

if (($stop.getFlags() & GRID_ITEM_TEMP) == 0) {

$model = $stop.getModel();

if (defined $model.$price) {

$data.$companyValue += $model.$price;

}

}

}*/

foreach ($data.$advertisingCampaigns) {

$data.$companyValue += current["months"] * int($data.$availableCampaigns[current["type"]][1] * MAIN.$grid.citizens.count);

}

foreach ($data.$loanPayments) {

$data.$companyValue -= current["amount"];

}

$data.$companyValue = max(0, $data.$companyValue);

}

event MAIN.$grid.citizens.onCitizenArrive::($citizen) {

if ($citizen.getState() == GRID_CITIZEN_TRAVEL) {

++$data.$passengersCarried;

++MAIN.$score.$passengersTransported[$citizen.getClass()];

if (++MAIN.$score.$totalTransported == 10000) MAIN.$achievement.unlock(1);

$transportsUsed = $citizen.usedTransport();

MAIN.$score.$maxTransportsUsed = max(MAIN.$score.$maxTransportsUsed, $transportsUsed);

if ($transportsUsed >= 5) MAIN.$achievement.unlock(24);

$source = $citizen.getStart();

$target = $citizen.getTarget();

if ($source == null || $target == null) return;

if ($citizen.usedTransport(TRANSPORTLINE_HELICOPTER)) {

if ($target.getModel().idName == "shoppingcenter") {

$num = ++$data.$transportedToMall;

MAIN.$score.$maxTransportedToMall = max(MAIN.$score.$maxTransportedToMall, $num);

if ($num == 500) MAIN.$achievement.unlock(36);

}

}

foreach (values MAIN.$scenario.$scenario.$objectives) {

if (defined current["arrived"]) {

if (defined current["total"]) current["total"]++;

if (defined current["transportType"]) {

if (!$citizen.usedTransport(current["transportType"])) continue;

}

if (defined current["citizenType"]) {

if ($citizen.getClass() != current["citizenType"]) continue;

}

$radius = 10.0;

if (defined current["radius"]) $radius = current["radius"];

$posIndex = 0;

while (defined current["sourcePos"+$posIndex]) {

if (vector_length($source.position - current["sourcePos"+$posIndex]) <= $radius) {

$posIndex = 0;

break;

}

++$posIndex;

}

if ($posIndex > 0) continue;

$posIndex = 0;

while (defined current["targetPos"+$posIndex]) {

if (vector_length($target.position - current["targetPos"+$posIndex]) <= $radius) {

$posIndex = 0;

break;

}

++$posIndex;

}

if ($posIndex > 0) continue;

if (defined current["visitType"]) {

if (current["visitType"] == GRID_VISIT_WORK) {

if ($target != $citizen.getWorkplace()) continue;

}

}

current["arrived"]++;

}

}

}

}

function updateMonthlyProfit() {

$data.$energyExpenses = 0;

//--------------------------ЕСЦ---------------------------------//

$data.$vMaintenanceExpenses = 0;

$numVehicles = 0;

foreach ($grid.lines.children()) {

foreach (.getVehicles()) {

$transportVehicle = current;

$vehicleData = $data.$ownVehicles[.$id];

$vehicle = MAIN.$grid.getGridObject($vehicleData["name"]);

$vehicleData["fuelExpenses"] = -int(int($vehicle.$fuelConsumption * $data.$vehicleEnergyMultiplier[$vehicle.$type]) * $data.$fuelPrice) - int(int($vehicle.$electricityConsumption * $data.$vehicleEnergyMultiplier[$vehicle.$type]) * $data.$electricityPrice);

$data.$energyExpenses += $vehicleData["fuelExpenses"];

//----------vehicle releability class--------ЕСЦ

if ($vehicle.$reliability < 0.31) {

$vehicle.$reliabilityClass = 1.75;

} else if ($vehicle.$reliability < 0.61) {

$vehicle.$reliabilityClass = 1.5;

} else if ($vehicle.$reliability < 0.91) {

$vehicle.$reliabilityClass = 1.25;

} else if ($vehicle.$reliability <= 1.00) {

$vehicle.$reliabilityClass = 1;

}

//echo "Vehicle rebclass "+$vehicle.$reliabilityClass;

if ($vehicle.capacity < 50) {

$vehicle.$capClass = 1;

} else {

$vehicle.$capClass = 0;

}

//echo "Vehicle capclass "+$vehicle.$capClass;

$vehicleTotalCapacity = $vehicle.capacity;

if (defined $vehicle.$trailers) {

foreach ($vehicle.$trailers) {

$vehicleTotalCapacity += $grid.getGridObject(current[0]).capacity;

}

}

//echo "Vehicle Total Capacity "+$vehicleTotalCapacity;

$vehicleElConsumption = $vehicle.$electricityConsumption;

//echo "Electricity Consumption "+$vehicleElConsumption;

if ($vehicleTotalCapacity < 50) {

$vehicle.$totalCapClass = 1;

} else {

$vehicle.$totalCapClass = 0;

}

//echo "Vehicle totalCapclass "+$vehicle.$totalCapClass;

//----------trolley system----------------ЕСЦ

/*if (!$vehicle.$subtype) {

$vehicle.$subtype = 0;

}

//echo "Vehicle Subtipe Player.script "+$vehicle.$subtype;

*/

if ($vehicle.$type == 1 && $vehicle.$subtype == 7) {$trolleyControlFactor = $vehicleTotalCapacity / ($vehicleElConsumption - 0.001);} else {$trolleyControlFactor = 1;}

//echo "Vehicle Control Factor "+$trolleyControlFactor;

if ($trolleyControlFactor < 1.38) {

$trolleyControlSystem = 1;

} else if ($trolleyControlFactor = 1.38 && $trolleyControlFactor > 1.38 && $trolleyControlFactor < 1.74) {

$trolleyControlSystem = 0.8;

} else {

$trolleyControlSystem = 0.6;

}

//echo "Trolley Control System "+$trolleyControlSystem;

//-------------tram system--------------------ЕСЦ

if ($vehicle.$type == 1 && $vehicle.$subtype == 0 && $vehicle.$speed < 65) {

$tramControlSystem = 1;

} else if ($vehicle.$type == 1 && $vehicle.$subtype == 0 && $vehicle.$speed == 65) {

$tramControlFactor = $vehicleTotalCapacity / ($vehicleElConsumption - 0.001);

} else if ($vehicle.$type == 1 && $vehicle.$subtype == 0 && $vehicle.$speed == 70) {

$tramControlFactor = $vehicleTotalCapacity / ($vehicleElConsumption - 0.001);

} else if ($vehicle.$type == 1 && $vehicle.$subtype == 0 && $vehicle.$speed == 75) {

$tramControlFactor = $vehicleTotalCapacity / ($vehicleElConsumption - 0.001);

} else if ($vehicle.$type == 1 && $vehicle.$subtype == 0 && $vehicle.$speed > 75) {

$tramControlFactor = 0.3;

} else {$tramControlFactor = 1;}

//echo "Tram Control Factor "+$tramControlFactor;

if ($vehicle.$type == 1 && $vehicle.$subtype == 0 && $vehicle.$speed < 65) {

$tramControlSystem = 1;

} else if ($vehicle.$type == 1 && $vehicle.$subtype == 0 && $vehicle.$speed == 65) {

if ($tramControlFactor < 1.7) {

$tramControlSystem = 1;

} else if ($tramControlFactor = 1.7 && $tramControlFactor > 1.7 && $tramControlFactor < 2.25) {

$tramControlSystem = 0.7;

} else {

$tramControlSystem = 0.5;

}

} else if ($vehicle.$type == 1 && $vehicle.$subtype == 0 && $vehicle.$speed == 70) {

if ($tramControlFactor < 1.85) {

$tramControlSystem = 1;

} else if ($tramControlFactor = 1.85 && $tramControlFactor > 1.85 && $tramControlFactor < 2.3) {

$tramControlSystem = 0.7;

} else {

$tramControlSystem = 0.5;

}

} else if ($vehicle.$type == 1 && $vehicle.$subtype == 0 && $vehicle.$speed == 75) {

if ($tramControlFactor < 1.35) {

$tramControlSystem = 1;

} else if ($tramControlFactor = 1.35 && $tramControlFactor > 1.35 && $tramControlFactor < 1.85) {

$tramControlSystem = 0.7;

} else {

$tramControlSystem = 0.5;

}

} else {$tramControlSystem = 0.5;}

if ($vehicle.$type == 1 && $vehicle.$subtype == 0 && $vehicle.$price > 1500000) {

$tramPriceFactor = 0.5;

} else {

$tramPriceFactor = 1;

}

//----------Metro control system------------------

if ($vehicle.$type == 2) {

$metroControlFactor = $vehicleTotalCapacity / ($vehicleElConsumption - 0.001);

} else {$metroControlFactor = 1;}

if ($vehicle.$type == 2 && $vehicle.$speed < 60) {

$metroControlSystem = 1;

} else if ($vehicle.$type == 2 && $vehicle.$speed == 60) {

if ($metroControlFactor < 1.6) {

$metroControlSystem = 1;

} else {

$metroControlSystem = 0.6;

}

} else if ($vehicle.$type == 2 && $vehicle.$speed == 70) {

if ($metroControlFactor < 1.2) {

$metroControlSystem = 1;

} else {

$metroControlSystem = 0.6;

}

} else if ($vehicle.$type == 2 && $vehicle.$speed == 80) {

if ($metroControlFactor < 1.03) {

$metroControlSystem = 1;

} else {

$metroControlSystem = 0.6;

}

} else if ($vehicle.$type == 2 && $vehicle.$speed == 90) {

if ($metroControlFactor < 0.75) {

$metroControlSystem = 1;

} else {

$metroControlSystem = 0.6;

}

} else {$metroControlSystem = 0.6;}

// ----------vehicle maintenance cost---------- policy.script

if ($vehicle.$type == 0) {$data.$vMaintenanceExpenses -= int($data.$maintenanceLevel[$vehicle.$type] * $vehicle.$price * $vehicle.$reliabilityClass * 0.00027 * (2 - $vehicle.$reliability));}

if ($vehicle.$type == 1 && $vehicle.$subtype == 0) {$data.$vMaintenanceExpenses -= int($data.$maintenanceLevel[$vehicle.$type] * $vehicle.$price * $vehicle.$reliabilityClass * 0.00015 * (2 - $vehicle.$reliability) * $tramControlSystem * $tramPriceFactor);} else if ($vehicle.$subtype == 7) {$data.$vMaintenanceExpenses -= int($data.$maintenanceLevel[$vehicle.$type] * $vehicle.$price * $vehicle.$reliabilityClass * 0.00020 * (2 - $vehicle.$reliability) * $trolleyControlSystem);}

if ($vehicle.$type == 2) {$data.$vMaintenanceExpenses -= int($data.$maintenanceLevel[$vehicle.$type] * $vehicle.$price * $vehicle.$reliabilityClass * 0.00015 * (2 - $vehicle.$reliability)) * $metroControlSystem;}

if ($vehicle.$type == 3) {$data.$vMaintenanceExpenses -= int($data.$maintenanceLevel[$vehicle.$type] * $vehicle.$price * $vehicle.$reliabilityClass * 0.00027 * (2 - $vehicle.$reliability));}

if ($vehicle.$type == 4) {$data.$vMaintenanceExpenses -= int($data.$maintenanceLevel[$vehicle.$type] * $vehicle.$price * $vehicle.$reliabilityClass * 0.00027 * (2 - $vehicle.$reliability));}

//$data.$vMaintenanceExpenses -= int($data.$maintenanceLevel[$vehicle.$type] * $vehicle.$price * 0.0005); //-----ЦЕНА НА РАСХОДЫ МНОЖИТЕЛЬ-----//

++$numVehicles;

if ($vehicle.$type == 2) ++$numVehicles;

}

}

//-----------------------------------------------------------------//

$data.$wageExpenses = -$numVehicles * $data.$wageLevel[0] - (($numVehicles+4)/5) * $data.$wageLevel[1] - (($numVehicles+2)/3) * $data.$wageLevel[2] - (($numVehicles+3)/4) * $data.$wageLevel[3];

$data.$sMaintenanceExpenses = 0;

$stopCount = $grid.lines.getStopCount();

for ($i = 0; $i < $stopCount; ++$i) {

$stop = $grid.lines.getStop($i);

if (($stop.getFlags() & GRID_ITEM_TEMP) == 0) {

$data.$sMaintenanceExpenses -= int($data.$maintenanceLevel2[$stop.type] * $stop.getModel().$maintenanceCost * 0.01);

}

}

$data.$loanExpenses = 0;

for ($i = #$data.$loanPayments-1; $i >= 0; --$i) {

$loan = $data.$loanPayments[$i];

$payment = int(MAIN.$hqpanel.calculateMonthlyPayment($loan["amount"], $loan["interest"], $loan["months"]));

$data.$loanExpenses -= $payment;

}

$data.$purchaseExpenses = $data.$currentPurchases;

$data.$salesIncome = $data.$currentSales;

$data.$monthlyExpenses = $data.$vMaintenanceExpenses + $data.$sMaintenanceExpenses + $data.$energyExpenses + $data.$loanExpenses + $data.$wageExpenses + $data.$purchaseExpenses + $data.$advertisingExpenses;

$data.$monthlyProfit = $data.$salesIncome + $data.$monthlyPenalties;

for ($i = 0; $i < 5; ++$i) {

$data.$monthlyProfit += $data.$monthlyTicketProfit[$i];

}

$data.$totalMonthlyProfit = $data.$monthlyProfit + $data.$monthlyExpenses;

}

event MAIN.$mainClock.onMonth::() {

if ($scenarioData == null) return;

foreach ($grid.lines.children()) {

foreach (.getVehicles()) {

$transportVehicle = current;

$vehicleData = MAIN.$gameData.$ownVehicles[.$id];

$vehicle = MAIN.$grid.getGridObject($vehicleData["name"]);

$maintenanceLevel = MAIN.$gameData.$maintenanceLevel[$vehicle.$type];

$targetCondition = 1.0 / (1.0 + $transportVehicle.travelDistance / (200000.0 * (0.1 + $vehicle.$reliability * 0.9) * (0.1 + $maintenanceLevel * 0.1)));

$vehicleData["condition"] = $vehicleData["condition"] * 0.8 + $targetCondition * 0.2;

if ($vehicleData["condition"] >= 0.6) {

// 0% to 40% chance

// 0.999 or 1.0

if (random(0.0, 1.0) <= 1.0 - $vehicleData["condition"]) {

// Small chance of breakdown

$transportVehicle.condition = 0.999;

}

else {

// No chance of breakdown

$transportVehicle.condition = 1.0;

}

}

else if ($vehicleData["condition"] >= 0.4) {

// 0.4 to 1.0

$transportVehicle.condition = (($vehicleData["condition"] - 0.4) / 0.2) * 0.5 + 0.4;

}

else {

// 0.0 to 0.4

$transportVehicle.condition = $vehicleData["condition"];

}

$vehicleData["monthlyInCome"] = $vehicleData["moneyEarned"];

$vehicleData["moneyEarned"] = 0;

$transportVehicle.attractiveness = $vehicle.$attractiveness * $vehicleData["condition"];

$vehicleData["travelDistance"] = $transportVehicle.travelDistance;

$vehicleData["passengersTransported"] = $transportVehicle.passengersTransported;

$vehicleData["yearlyProfit"] += $vehicleData["monthlyInCome"] + $vehicleData["fuelExpenses"] - int($data.$maintenanceLevel[$vehicle.$type] * $vehicle.$price * 0.0005);

}

}

updateMonthlyProfit();

$data.$currentPurchases = 0;

$data.$currentSales = 0;

$data.$advertisingExpenses = 0;

$wasDebtPaid = MAIN.$score.$debtPaid;

$totalDebt = 0;

for ($i = #$data.$loanPayments-1; $i >= 0; --$i) {

$loan = $data.$loanPayments[$i];

$payment = int(MAIN.$hqpanel.calculateMonthlyPayment($loan["amount"], $loan["interest"], $loan["months"]));

$loan["amount"] -= $payment - int($loan["amount"] * ($loan["interest"] / 1200.0));

if (--$loan["months"] == 0) {

array_splice($data.$loanPayments, $i, 1);

} else {

$totalDebt += $loan["amount"];

}

MAIN.$score.$debtPaid += $payment;

}

for ($i = #$data.$advertisingCampaigns-1; $i >= 0; --$i) {

$campaign = $data.$advertisingCampaigns[$i];

for ($j = 0; $j < 7; ++$j) {

$data.$extraHappiness[$j] += $data.$availableCampaigns[$campaign["type"]][2][$j] * 0.1;

}

if (--$campaign["months"] == 0) {

array_splice($data.$advertisingCampaigns, $i, 1);

}

}

$stopCount = $grid.lines.getStopCount();

for ($i = 0; $i < $stopCount; ++$i) {

$stop = $grid.lines.getStop($i);

if (($stop.getFlags() & GRID_ITEM_TEMP) == 0) {

$stop.attractiveness = $stop.getModel().$attractiveness * (1.167 - 0.2 / (MAIN.$gameData.$maintenanceLevel2[$stop.type] * 0.01 + 0.2));

}

}

$scenarioData.$money += $data.$monthlyExpenses - $data.$purchaseExpenses - $data.$advertisingExpenses;

for ($i = 0; $i < 5; ++$i) {

$data.$monthlyTicketProfit[$i] = $data.$currentProfit[$i];

$data.$currentProfit[$i] = 0;

}

$data.$monthlyPenalties = $data.$currentPenalties;

$data.$currentPenalties = 0;

$oldCoverage = $data.$serviceCoverage;

$data.$totalMonthlyProfitHistory[] = $data.$totalMonthlyProfit;

$data.$serviceCoverage = $grid.citizens.getCanTravelCount(-1) * 100.0 / max(1, $grid.citizens.getTravelCount(-1) + $grid.citizens.getDriveCount(-1) + $grid.citizens.getWalkCount(-1));

$data.$serviceCoverageHistory[] = $data.$serviceCoverage;

$data.$serviceUsage = $grid.citizens.getTravelCount(-1) * 100.0 / max(1, $grid.citizens.getCanTravelCount(-1));

$data.$serviceUsageHistory[] = $data.$serviceUsage;

for ($i = 0; $i < 7; ++$i) {

$data.$serviceUsages[$i] = $grid.citizens.getTravelCount($i) * 100.0 / max(1, $grid.citizens.getCanTravelCount($i));

if ($data.$extraHappiness[$i] > 0.0) $data.$extraHappiness[$i] = max(0.0, $data.$extraHappiness[$i] - 0.02);

else $data.$extraHappiness[$i] = min(0.0, $data.$extraHappiness[$i] + 0.02);

$data.$yearlyCustomerHappiness += $data.$customerHappiness[$i] * 0.0119047619;

}

$data.$carUsageHistory[] = $grid.citizens.getDriveCount(-1) * 100.0 / max(1, $grid.citizens.getTravelCount(-1) + $grid.citizens.getDriveCount(-1) + $grid.citizens.getWalkCount(-1));

$data.$companyReputationHistory[] = $data.$totalReputation * 100.0;

$data.$companyDebtHistory[] = $totalDebt;

if ($grid.citizens.getPriceTooHighCount(-1) * 100.0 / max(1, $grid.citizens.getCanTravelCount(-1)) > 20.0) {

MAIN.$petitionbar.addTickerText(0, $strings.$newsticker_priceTooHigh_text);

}

if (MAIN.$economy : false) {

MAIN.$economy.updateEconomy();

}

$data.$passengersCarriedHistory[] = $data.$passengersCarried;

$data.$yearlyPassengersCarried += $data.$passengersCarried;

$data.$passengersCarried = 0;

updateEmployeeHappiness();

updateReputation();

updateCompanyValue();

$data.$companyValueHistory[] = $data.$companyValue;

$grid.citizens.resetTripCounts();

if (MAIN.$hqpanel : false) {

MAIN.$hqpanel.updatePanel();

}

if (MAIN.$graphspanel : false) {

MAIN.$graphspanel.updateGraphs();

}

if (#$data.$totalMonthlyProfitHistory >= 3) {

$num = 0;

for (; $num < 3; ++$num) {

if ($data.$totalMonthlyProfitHistory[#$data.$totalMonthlyProfitHistory-1-$num] < 50000) break;

}

MAIN.$score.$maxProfitMonths = max(MAIN.$score.$maxProfitMonths, $num);

if ($num >= 3) MAIN.$achievement.unlock(9);

}

MAIN.$score.$maxMonthlyProfit = max(MAIN.$score.$maxMonthlyProfit, $data.$totalMonthlyProfit);

if ($data.$totalMonthlyProfit >= 150000) MAIN.$achievement.unlock(10);

MAIN.$score.$maxCoverage = max(MAIN.$score.$maxCoverage, $data.$serviceCoverage);

if ($data.$serviceCoverage >= 10.0) MAIN.$achievement.unlock(11);

if ($data.$serviceCoverage >= 99.9) MAIN.$achievement.unlock(12);

//for ($i = 0; $i < 7; ++$i) {

//if ($data.$serviceUsages[$i] >= 50.0) MAIN.$achievement.unlock(55 + $i*2);

//if ($data.$serviceUsages[$i] >= 80.0) MAIN.$achievement.unlock(56 + $i*2);

//}

if ($wasDebtPaid < 1000000 && MAIN.$score.$debtPaid >= 1000000) MAIN.$achievement.unlock(14);

if ($wasDebtPaid < 2000000 && MAIN.$score.$debtPaid >= 2000000) MAIN.$achievement.unlock(15);

if ($oldCoverage < 84.0 && $data.$serviceCoverage >= 84.0) {

MAIN.$petitionbar.addTickerText(1, $strings.$newsticker_coverage_text);

}

$h = $data.$economyHistory;

if ($h[#$h-1] > 0.0 && $h[#$h-2] <= 0.0) {

if ($h[#$h-1] > $h[#$h-2] && $h[#$h-1] > $h[#$h-3] && $h[#$h-1] > $h[#$h-4] && $h[#$h-1] > $h[#$h-5]) {

MAIN.$petitionbar.addTickerText(1, escapePattern(expandPattern(MAIN.$strings.$newsticker_economicBoom_text, MAIN.$scenario.getCityName())));

}

} else if ($h[#$h-1] < 0.0 && $h[#$h-2] >= 0.0) {

if ($h[#$h-1] < $h[#$h-2] && $h[#$h-1] < $h[#$h-3] && $h[#$h-1] < $h[#$h-4] && $h[#$h-1] < $h[#$h-5]) {

MAIN.$petitionbar.addTickerText(0, escapePattern(expandPattern(MAIN.$strings.$newsticker_economicDrop_text, MAIN.$scenario.getCityName())));

}

}

$h = $data.$unemploymentHistory;

if ($h[#$h-1] >= 12.0 && $h[#$h-2] < 12.0) {

MAIN.$petitionbar.addTickerText(0, escapePattern(expandPattern(MAIN.$strings.$newsticker_unemploymentIncrease_text, MAIN.$scenario.getCityName(), $h[#$h-1])));

} else if ($h[#$h-1] <= 9.0 && $h[#$h-2] > 9.0) {

MAIN.$petitionbar.addTickerText(1, escapePattern(expandPattern(MAIN.$strings.$newsticker_unemploymentDecrease_text, MAIN.$scenario.getCityName(), $h[#$h-1])));

}

}

event this.onDestroy::() {

delete $player;

delete $data;

MAIN.$player = null;

MAIN.$playerData = null;

MAIN.$gamedata = null;

}

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Так как транспорт с 35% всё равно будет ломаться чаще, чем с 5%.

Но как он будет ломаться чаще, если по скрипту того мода до определённого состояния транспорт вообще не ломается? Реализма по-моему здесь не очень много, причины этого описаны здесь в первом абзаце. Нужно бы найти дефолтный скрипт, отвечающий за поломку транспорта, да посмтреть как там это работает...

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пардон, что может не по теме, но зачем обслуживать остановки? На что то влияет?

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На их привлекательность.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тебе неинтересно, а мне интересно. Я люблю долгие затяжные игры на хороших картах с развитием. Так что это уже дело вкуса. Согласен, что "вшивать" такое изменение в мод не нужно. Но можно сделать дополнительный мод или сказать где и что поменять.

Поддерживаю, так как тоже люблю долгие и для большинства унылые игры. Поэтому тоже хотел бы знать, как регулировать длину суток.

P.S. Так, инструкцию нашел выше :)

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нужно скачать http://www.cimexchange.com/files/file/143-time-slow-down-mod/ а затем в файле engine.script

Если нужно увеличить игровой день, значение надо уменьшать.

О,спасибо. ;) А для 12-ти секундного дня какое значение нужно поставить?

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

О,спасибо. ;) А для 12-ти секундного дня какое значение нужно поставить?

Около 8000, т.к. 6000 - это 15 секунд

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Итак-с, продолжим.

Напомню, что дефолтная формула расчёта состояния выглядит так:

$targetCondition = 1.0 / (1.0 + $transportVehicle.travelDistance / (200000.0 * (0.1 + $vehicle.$reliability * 0.9) * (0.1 + $maintenanceLevel * 0.009)));
     $vehicleData["condition"] = $transportVehicle.condition = $vehicleData["condition"] * 0.8 + $targetCondition * 0.2;

При ней весь транспорт изнашивается одинаково, и основную роль в износе играет пробег.

Рассмотрим несколько примеров. Основные вводные условия: пробег - 1280 метров в месяц (15,3км в год), начальное состояние 100%, данные состояния отображаются за 5, 10 и 25 лет эксплуатации.

1.1 Т\с с надёжностью 98%, обслуживание - 95%.

Состояние: 72,3%; 55,8%; 33,1%.

1.2 Т\с с надёжнстью 98%, обслуживание 50%.

Состояние: 60,1%; 42,1%; 22,1%.

2.1 Т\с с надёжностью 90%, обслуживание - 95%.

Состояние: 70,8%; 53,9%; 31,4%.

2.2 Т\с с надёжностью 90%, обслуживание - 50%.

Состояние: 58,3%; 40,2%; 20,9%.

3.1 Т\с с надёжностью 80%, обслуживание - 95%.

Состояние: 68,6%; 51,3%; 29,2%.

3.2 Т\с с надёжностью 80%, обслуживание - 50%.

Состояние: 55,7%, 37,8%; 19,2%.

4.1. Т\с с надёжностью 50%, обслуживание - 95%.

Состояние: 59,5%, 41,5%, 21,7%.

4.2 Т\с с надёжностью 50%, обслуживание - 50%.

Состояние: 45,8%, 28,9%, 13,7%.

Так оно всё по дефолту. Как видно, мало того, что формула одинакова для всех видов транспорта, так ещё и надёжность т\с влияет на его состояние совсем немного.

На данный момент эксперименты привели меня к следующей формуле:

$targetCondition = 1.0 / (1.0 + $transportVehicle.travelDistance / (200000.0 * (0.1 + $vehicle.$reliability * 0.9) * (0.1 + $maintenanceLevel * 0.009)));

$vehicleData["condition"] = $transportVehicle.condition = $vehicleData["condition"] * 0.8 + ($targetCondition * 0.2 * $vehicle.$reliability );

В ней вместо значения 200000.0 устанавливается разное для каждого вида транспорта. Например: автобус - 250000, троллейбус - 350000, трамвай - 500000, метропоезд - 800000, речной трамвай - 1000000.

Кроме того, по этой формуле значение надёжности имеет куда большее значение.

Вот что получается (пробег берётся такой же, как выше):

Автобус, надёжность 98%, обслуживание 95%.

Состояние: 75%; 60%, 37,4%

Такой же троллейбус:

Состяние: 80,4%; 67,4%; 45%

Такой же трамвай:

Состояние: 85%; 74,4%; 54,2%

Такой же метропоезд:

Состояние: 89,4%; 81,8%; 65,1%

Такой же речной трамвай:

Состояние: 91%, 84,6%, 69,8%.

То же самое при обслуживании 50%:

Автобус: 64%, 46,6%, 25,7%

Троллейбус: 71%, 54,9%, 32,6%

Трамвай: 77,4%, 63,2%, 40,7%

Метропоезд: 84%, 72,9%, 52,2%.

Речной трамвай: 86,5%, 76,8%, 57,5%.

То же для среднестатистических т\с с надёжностью 80%, обслуживание - 95%.

Автобус: 58,5%, 45,5%, 27,2%

Троллейбус: 63,4%, 51,8%, 33,5%

Трамвай: 67,6%, 58%, 40,6%

Метропоезд: 71,7%, 64,6%, 49,8%

Речной трамвай: 73,2%, 67,2%, 53,9%

То же, обслуживание - 50%.

Автобус: 48,9%, 34,5%, 18,3%

Троллейбус: 55%, 41,2%, 23,5%

Трамвай: 60,7%, 48,2%, 29,8%

Метропоезд: 66,7%, 56,6%, 39%

Речной трамвай: 69%, 60%, 43,4%.

Фух. Надеюсь, никого не утомил этим так же, как себя. :D

В общем, тут вопрос только в том, до какого состояния вы готовы использовать т\с на линии. Если брать состояние "кондиции" 40%, то при обслуживании 95% среднестатистический автобус с надёжностью 80% будет служить примерно 9 лет, троллейбус - 12, трамвай - 25, метропоезд - 30-35, речной трамвай - и больше 50 наверное. При половинчатом обслуживании всё это ушатается заметно быстрее.

Конечно, понимаю, что есть в реальности и исключения и вообще практически неубиваемый транспорт, но их игра увы вряд ли как-нибудь сможет опознавать. Поэтому предлагаю вот такое дело, по-моему - смотрится неплохо.

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так-с, для всех, у кого будет время и желание испытать эту систему:

player.rar

Файл положите в metro/scripts.

Отличие от того, что описано вверху - убрана переменная надёжности из второй части формулы, а то с ней что-то багалось. В остальном по-моему очень неплохо, сейчас испытваю это на карте Солымский край.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

9 лет для автобуса как-то маловато, 12 - как у тролла более похоже на правду, но не более 15.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
9 лет для автобуса как-то маловато
Смотря какой автобус.
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

добавьте в стандарт стоимость многоуровневых станций метро

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Давно уже в стандарте.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Давно уже в стандарте.

и цена 4,600.00

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что-то у тебя не так, проверь, правильно ли устанавливаешь. Я сейчас посмотрел - скрипты все есть, 100к она должна стоить.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так-с, понемногу пришло время обсудить стоимость инфраструктуры и п\с (да и характеристики) будущего подвесного монорельса. В варианте для дефолтной игры авторы сами прикинут это всё, а вот для ЕСЦ нужно будет хорошо подумать.

1. Инфраструктура.

Отталкиваться тут, я так понимаю, нужно от эстакадных линий метро. Строительство монорельса, если я правильно понимаю, должно быть несколько дешевле, чем эстакад метро: если последние стоят 340 за сегмент, то один сегмент монорельсового пути можно сделать, скажем, 250 (наземные пути метро стоят 200 за сегмент).

Однако на вики указано, что содержание линии монорельса обходится значительно дороже, чем любого другого ОТ (включая метро?). Относится ли это к и Вуппертальской системе? Если да - нам придётся делать довольно высокую стоимость обслуживания станций, чтобы как-то отразить это дело.

2. Подвижной состав.

Максимальная скорость вагонов Вуппертальской системы - 60 км\ч, вряд ли нам стоит тут выдумывать что-то ещё. Вопрос вместимости, надёжности и привлекательности адресуем авторам: мне нужно знать реальную номинальную вместимость всех игровых вагонов, чтобы посчитать игровую. Все характеристики можно залить в ЛС, если не хотите тут всё палить.)

3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Отталкиваться тут, я так понимаю, нужно от эстакадных линий метро. Строительство монорельса, если я правильно понимаю, должно быть несколько дешевле, чем эстакад метро: если последние стоят 340 за сегмент, то один сегмент монорельсового пути можно сделать, скажем, 250 (наземные пути метро стоят 200 за сегмент).

Однако на вики указано, что содержание линии монорельса обходится значительно дороже, чем любого другого ОТ (включая метро?). Относится ли это к и Вуппертальской системе? Если да - нам придётся делать довольно высокую стоимость обслуживания станций, чтобы как-то отразить это дело.

Основная проблема, что в мире было всего 1,5 землекопа дороги: в Вуппертале ещё действует "маленький вариант" (2 коротких вагона), в Берлине заброшен и разобран ещё на стадии создания "полноценный вариант" (6 длинных вагонов). Поэтому крайне трудно говорить о стоимости в рамках такого опыта. В начале ХХ века стоимость была почти как у линии эстакадного метро. Сегодня она бы сравнялась с секцией тоннеля. Потому что сделано всё из металла. Опоры, есть у меня такое подозрение, что из чугуна, так как сталь плохо работает на сжатие.

В общем, закончу лирическое отступление и вернусь к инженерной стороне вопроса. Принципиальных отличий от эстакадной линии метро я не вижу. Во-первых, мы имеет те же мощные опоры, во-вторых, те же мостовые пролёты в виде ферм. Единственное различие связано с размещением электро-подвижного состава относительно своей точки опоры в пространстве, что меняет тип закрепления направляющей. В случае швебебана отсутствуют мелкие поперечные кирпичные арки между двутаврами для создания поверхности эстакады и нет щебёночного баласта для рельсо-шпальной решётки.

Исходя из всего вышесказанного, стоимость 1 клетки я бы назначил в 300. Попробую проштудировать один немецкий архив с текстами про швебебан на наличие информации по стоимости (но, честно, сомневаюсь в её наличии).

В связи с тем, что швебебан основан на принципах железной дороги (стандартный рельс, тележки с ж\д колёсами с двумя ребордами (как на портовых кранах), контактный рельс и так далее), то, полагаю, обслуживание такой дороги будет аналогично старой линии эстакадного метро.

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ArtMetro, супер, спасибо, значит пока что рассчитываем на 300 за сегмент. :) Давно что-то тебя тут не видел, уж думал, бросил нас... :D

Значится идём дальше, станции. Учитывая, что в отличие от эстакадных станций метро, тут у нас шедевры архитектурной мысли (особенно две ранние станции), то, думаю, их строительство должно стоить ого-го сколько. Кстати, по длине они ведь немного меньше, чем станции метро? В любом случае, думаю, ориентироваться нужно на 25-30 тысяч за первые станции и на 20-25 за последующие, которые простые металлические.

Остаётся вопрос по п\с: Slavatrainz, Arhitect, пожалуйста, как будет время - закиньте мне примерные реальные данные вагонов (массу и вместимость) и примерные показатели надёжности и привлекательности.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ArtMetro, супер, спасибо, значит пока что рассчитываем на 300 за сегмент. :) Давно что-то тебя тут не видел, уж думал, бросил нас... :D

Значится идём дальше, станции. Учитывая, что в отличие от эстакадных станций метро, тут у нас шедевры архитектурной мысли (особенно две ранние станции), то, думаю, их строительство должно стоить ого-го сколько. Кстати, по длине они ведь немного меньше, чем станции метро? В любом случае, думаю, ориентироваться нужно на 25-30 тысяч за первые станции и на 20-25 за последующие, которые простые металлические.

Остаётся вопрос по п\с: Slavatrainz, Arhitect, пожалуйста, как будет время - закиньте мне примерные реальные данные вагонов (массу и вместимость) и примерные показатели надёжности и привлекательности.

Да, комп сломался, вот и не было меня. :D

Исходя из изображений, длина станций - 4 большие клетки, то есть они в два раза короче станций метро. Получается, что стоимость самой новой (1971 года) выйдет порядка 10 тысяч, следовательно станция образца 1946 года - 12 тысяч. Для старой, которая попроще, я бы дал 20 тысяч, а для той, что с башенкой - 22 тысячи. Пока мысли такие... :unsure:

P.S.: тут бы ещё не плохо сделать, чтобы эстакадные станции метро были в арсенале с самого начала игры, а не только после войны. Чтобы у игрока был выбор, что ему целесообразнее строить.

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хотел уточнить по поводу функции "платы за пересадку". В той версии которая выложена на сайте - http://citiesinmotion.ru/download/mods/price-and-char-standard есть ли она или нет? Если есть, то как узнать, а то что-то у меня те линии на которых много "пересаживающихся" все никак не получается сделать прибыльными.

И еще вопрос, в архиве есть файл Cities In Motion/addons/lineStatisticsPlus/scripts/lineStatisticsPlus.script. При его установке ModManager говорит что установлено, но горячая кнопка (6) никак не выдает окошко и нет иконки. Все появляется при добавлении lineStatisticsPlus.gs файла в папку addons, правильно ли это?

Заранее спасибо за ответы,

Александр.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Платы за пересадку, вроде, нет.

Но есть такая фича на СимX. Помню куда-то ссыль кидал.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
И еще вопрос, в архиве есть файл Cities In Motion/addons/lineStatisticsPlus/scripts/lineStatisticsPlus.script. При его установке ModManager говорит что установлено, но горячая кнопка (6) никак не выдает окошко и нет иконки. Все появляется при добавлении lineStatisticsPlus.gs файла в папку addons, правильно ли это?

Всё верно, Статистика линий будет работать только при установленном моде LineStat, а файл lineStatisticsPlus.script в ЕСЦХ нужен для того, чтобы LineStat правильно считал доходы\расходы.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всё верно, Статистика линий будет работать только при установленном моде LineStat, а файл lineStatisticsPlus.script в ЕСЦХ нужен для того, чтобы LineStat правильно считал доходы\расходы.

Аlex, а как по поводу "платежа за пересадки", есть эта фича в УСЦХ, или прав Corupt и такой функции нет, хоть и было обсуждение добавления оной на форуме?

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу