User prompt
"Pay Tax" butonunu biraz daha sağa götür
User prompt
"Pay Tax" butonunu biraz sağa götür
User prompt
alt kısımdaki butonları birbirlerinden uzaklaştır
User prompt
game over olunduğunda çıkan play again butonuna bastığımda oyun yeniden başlamıyor
User prompt
game over olunduğunda çıkan play again butonuna bastığımda oyun yeniden başlamıyor
User prompt
vergi ücretleri biraz daha yükselsin ve eğer vergi borcu 14 gün içinde ödenmezse vergi borcu ücretinin %50 fazlası kadar para veya o değerdeki araçlara el konulsun ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
7 günde bir sahip olunan araçların toplam değerine ve sahip olunan toplam paraya göre belirli bir miktar vergi borcu gelsin. 2 gün boyunca borç ödenmezse her gün %15 faizle artsın ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
müşterinin aracının hasar durumu ve kilometresi hakkında gerçeği söyleyip söylemediğini öğrenebilmemiz için aracın fiyatıyla aynı orantıda bir fiyatta ekspertiz sistemi ekle ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
araçların fiyatlarına göre tamir ücretide yüksek veya az olsun ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
müşterilerin araçları hakkında söylediği kilometrenin yalan çıkıp daha yüksek olma ihtimalini ekle ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
oyuna birde kredi sistemi ekleyelim. kredi çektiğimiz zaman borcumuzu faizli şekilde geri ödememiz gereksin ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
müşterilerin bize aracının hasarsız olduğunu söyleyip hasarlı çıkması ihtimalini ekle ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
araçlar satıldığında çok kazanç sağlıyor ve sürekli para kazanıyorum. Bir şekilde zararda edeceğim bir sistem ekleyelim ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Bazı araçları aldığımda müşterilerin bizi kandırıp paramızı çalıp araçları vermediği ihtimalleri olsun ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
araçlar satıldığında çok kazanç sağlıyor ve sürekli para kazanıyorum. Bir şekilde zararda edeceğim bir sistem ekleyelim ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
şuanda herşey olması gerektiği gibi çalışıyor fakat müşterilerin bana araçları hakkında yalan söylüyor olma ihtimali ve ekspertiz yapma özelliğe ve sahip olduğum araçları satmak ya da tamir ettirme sistemi yok onları eklemeliyiz ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'storage.ownedVehicles = simplifiedOwnedVehicles;' Line Number: 499 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'storage.ownedVehicles = ownedVehicles;' Line Number: 482 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'storage.playerMoney = undefined;' Line Number: 443 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
oyuna birde reset butonu ekleyelim herşeyi başa döndürmek için ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
hala şuanda satın alma butonuna bastığımda hiçbir şey olmuyor araç satın alamıyorum
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'vehicleData')' in or related to this line: 'var vehicleData = obj.parent.vehicleData;' Line Number: 277
User prompt
satın alma butonuna bastığım zaman araçlar alınmıyor bunu düzeltmeliyiz. Satın al butonuna bastığımda araç benim envanterime geçmeli ve paramdan aracın fiyatı düşmeli
User prompt
araçların altına aracı satın alma butonu ekle
User prompt
butonları ve diğer bütün herşeyi biraz boyutunu büyüt
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Button = Container.expand(function (text, color, width, height) {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('buyButton', {
anchorX: 0.5,
anchorY: 0.5,
width: width || 300,
height: height || 120
});
buttonGraphics.tint = color || 0x27ae60;
var buttonText = new Text2(text, {
size: 32,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
buttonText.x = 0;
buttonText.y = 0;
self.addChild(buttonText);
self.down = function (x, y, obj) {
buttonGraphics.scaleX = 0.9;
buttonGraphics.scaleY = 0.9;
};
self.up = function (x, y, obj) {
buttonGraphics.scaleX = 1.0;
buttonGraphics.scaleY = 1.0;
};
return self;
});
var Vehicle = Container.expand(function (carData) {
var self = Container.call(this);
self.carData = carData;
self.inspected = false;
self.repaired = false;
var carGraphics = self.attachAsset(carData.condition === 'damaged' ? 'carDamaged' : 'carOffer', {
anchorX: 0.5,
anchorY: 0.5
});
var carText = new Text2(carData.make + ' ' + carData.model, {
size: 36,
fill: 0xFFFFFF
});
carText.anchor.set(0.5, 0.5);
carText.x = 0;
carText.y = -80;
self.addChild(carText);
var priceText = new Text2('$' + carData.price.toLocaleString(), {
size: 40,
fill: 0xFFFF00
});
priceText.anchor.set(0.5, 0.5);
priceText.x = 0;
priceText.y = -40;
self.addChild(priceText);
var conditionText = new Text2(carData.condition + ' - ' + carData.mileage + 'k miles', {
size: 28,
fill: 0xFFFFFF
});
conditionText.anchor.set(0.5, 0.5);
conditionText.x = 0;
conditionText.y = 10;
self.addChild(conditionText);
self.updateDisplay = function () {
carGraphics.visible = false;
self.removeChild(carGraphics);
var assetType = 'carOffer';
if (self.carData.condition === 'damaged') {
assetType = 'carDamaged';
} else if (self.repaired) {
assetType = 'carRepaired';
}
carGraphics = self.attachAsset(assetType, {
anchorX: 0.5,
anchorY: 0.5
});
priceText.setText('$' + self.carData.price.toLocaleString());
conditionText.setText(self.carData.condition + ' - ' + self.carData.mileage + 'k miles');
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x34495e
});
/****
* Game Code
****/
// Game state variables
var playerMoney = storage.playerMoney || 50000;
var currentDay = storage.currentDay || 1;
var playerDebt = storage.playerDebt || 0;
var dailyInterestRate = 0.05; // 5% daily interest
var taxDebt = storage.taxDebt || 0;
var taxDueDate = storage.taxDueDate || 0;
var taxOverdueDate = storage.taxOverdueDate || 0;
var lastTaxDay = storage.lastTaxDay || 0;
var ownedVehicles = [];
// Load owned vehicles from storage
if (storage.vehicleCount) {
for (var i = 0; i < storage.vehicleCount; i++) {
ownedVehicles.push({
make: storage.vehicleMakes[i],
model: storage.vehicleModels[i],
condition: storage.vehicleConditions[i],
actualCondition: storage.vehicleActualConditions[i],
mileage: storage.vehicleMileages[i],
actualMileage: storage.vehicleActualMileages[i] || storage.vehicleMileages[i],
price: storage.vehiclePrices[i],
marketValue: storage.vehicleMarketValues[i],
sellerLying: storage.vehicleSellerLying[i],
id: storage.vehicleIds[i],
repaired: storage.vehicleRepaired[i]
});
}
}
var dailyOffers = [];
var selectedVehicle = null;
var gameState = 'daily_offers'; // 'daily_offers', 'vehicle_selected', 'owned_vehicles'
// Car data arrays
var carMakes = ['Toyota', 'Honda', 'Ford', 'Chevrolet', 'BMW', 'Mercedes', 'Audi', 'Nissan', 'Volkswagen', 'Hyundai'];
var carModels = ['Sedan', 'SUV', 'Coupe', 'Hatchback', 'Wagon', 'Convertible', 'Truck', 'Compact'];
var conditions = ['excellent', 'good', 'fair', 'poor', 'damaged'];
// UI Elements
var moneyText = new Text2('Money: $' + playerMoney.toLocaleString(), {
size: 50,
fill: 0x2ECC71
});
moneyText.anchor.set(0, 0);
moneyText.x = 120;
moneyText.y = 50;
LK.gui.topLeft.addChild(moneyText);
var dayText = new Text2('Day ' + currentDay, {
size: 50,
fill: 0xFFFFFF
});
dayText.anchor.set(1, 0);
dayText.x = 0;
dayText.y = 50;
LK.gui.topRight.addChild(dayText);
var debtText = new Text2('Debt: $' + playerDebt.toLocaleString(), {
size: 40,
fill: 0xe74c3c
});
debtText.anchor.set(0, 0);
debtText.x = 120;
debtText.y = 110;
LK.gui.topLeft.addChild(debtText);
var taxText = new Text2('Tax: $' + taxDebt.toLocaleString(), {
size: 40,
fill: 0xe74c3c
});
taxText.anchor.set(0, 0);
taxText.x = 120;
taxText.y = 170;
LK.gui.topLeft.addChild(taxText);
var titleText = new Text2('Car Dealer Tycoon', {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
titleText.x = 2048 / 2;
titleText.y = 150;
game.addChild(titleText);
var stateText = new Text2('Daily Vehicle Offers', {
size: 50,
fill: 0xECF0F1
});
stateText.anchor.set(0.5, 0);
stateText.x = 2048 / 2;
stateText.y = 250;
game.addChild(stateText);
// Action buttons
var inspectButton = game.addChild(new Button('Inspect ($500)', 0xf39c12));
inspectButton.x = 2048 / 2 - 400;
inspectButton.y = 2200;
inspectButton.visible = false;
var buyButton = game.addChild(new Button('Buy Vehicle', 0x27ae60));
buyButton.x = 2048 / 2 - 150;
buyButton.y = 2200;
buyButton.visible = false;
var negotiateButton = game.addChild(new Button('Negotiate', 0x34495e));
negotiateButton.x = 2048 / 2 + 150;
negotiateButton.y = 2200;
negotiateButton.visible = false;
var repairButton = game.addChild(new Button('Repair (Dynamic)', 0xe67e22));
repairButton.x = 2048 / 2 - 150;
repairButton.y = 2200;
repairButton.visible = false;
var sellButton = game.addChild(new Button('Sell', 0x8e44ad));
sellButton.x = 2048 / 2 + 150;
sellButton.y = 2200;
sellButton.visible = false;
var nextDayButton = game.addChild(new Button('Next Day', 0x2c3e50, 400, 140));
nextDayButton.x = 2048 / 2;
nextDayButton.y = 2400;
var viewOwnedButton = game.addChild(new Button('View Owned Cars', 0x95a5a6));
viewOwnedButton.x = 2048 / 2;
viewOwnedButton.y = 2300;
var loanButton = game.addChild(new Button('Take Loan ($10,000)', 0x3498db));
loanButton.x = 2048 / 2 - 300;
loanButton.y = 2500;
var payDebtButton = game.addChild(new Button('Pay Debt', 0x27ae60));
payDebtButton.x = 2048 / 2 + 200;
payDebtButton.y = 2500;
var payTaxButton = game.addChild(new Button('Pay Tax', 0x27ae60));
payTaxButton.x = 2048 / 2 + 400;
payTaxButton.y = 2500;
var resetButton = game.addChild(new Button('Reset Game', 0xe74c3c));
resetButton.x = 2048 / 2;
resetButton.y = 2600;
// Vehicle display containers
var vehicleContainer = new Container();
vehicleContainer.x = 2048 / 2;
vehicleContainer.y = 800;
game.addChild(vehicleContainer);
var infoText = new Text2('', {
size: 32,
fill: 0xFFFFFF
});
infoText.anchor.set(0.5, 0.5);
infoText.x = 2048 / 2;
infoText.y = 1800;
game.addChild(infoText);
// Generate random vehicle data
function generateRandomVehicle() {
var make = carMakes[Math.floor(Math.random() * carMakes.length)];
var model = carModels[Math.floor(Math.random() * carModels.length)];
var condition = conditions[Math.floor(Math.random() * conditions.length)];
var mileage = Math.floor(Math.random() * 200) + 20;
var basePrice = Math.floor(Math.random() * 40000) + 10000;
// Sellers may lie about condition - both ways
var actualCondition = condition;
var actualMileage = mileage;
var sellerLying = Math.random() < 0.4; // 40% chance of lying
if (sellerLying) {
// 70% chance they claim better condition, 30% chance they hide damage
if (Math.random() < 0.7 && condition !== 'damaged') {
// Claim better condition than actual
var betterConditions = conditions.slice(0, conditions.indexOf(condition));
if (betterConditions.length > 0) {
condition = betterConditions[Math.floor(Math.random() * betterConditions.length)];
}
} else {
// Hide damage - claim undamaged when actually damaged
var worseConditions = conditions.slice(conditions.indexOf(condition) + 1);
if (worseConditions.length > 0) {
actualCondition = worseConditions[Math.floor(Math.random() * worseConditions.length)];
// If actual condition becomes damaged, they claim it's not
if (actualCondition === 'damaged') {
condition = 'poor'; // They claim it's just poor condition
}
}
}
}
// 30% chance they also lie about mileage
if (Math.random() < 0.3) {
// They claim lower mileage than actual
var mileageReduction = Math.floor(Math.random() * 50) + 10; // 10-60k miles less
actualMileage = mileage + mileageReduction;
// Cap at reasonable maximum
if (actualMileage > 300) {
actualMileage = 300;
}
}
// Adjust price based on condition
var priceMultiplier = 1;
switch (actualCondition) {
case 'excellent':
priceMultiplier = 1.2;
break;
case 'good':
priceMultiplier = 1.0;
break;
case 'fair':
priceMultiplier = 0.8;
break;
case 'poor':
priceMultiplier = 0.6;
break;
case 'damaged':
priceMultiplier = 0.4;
break;
}
var price = Math.floor(basePrice * priceMultiplier * (1 - mileage / 300));
// 15% chance that this seller is a scammer
var isScammer = Math.random() < 0.15;
return {
make: make,
model: model,
condition: condition,
actualCondition: actualCondition,
mileage: mileage,
actualMileage: actualMileage,
price: price,
marketValue: Math.floor(price * 1.5),
sellerLying: sellerLying,
isScammer: isScammer,
id: Math.random().toString(36).substr(2, 9)
};
}
// Generate daily offers
function generateDailyOffers() {
dailyOffers = [];
var numOffers = Math.floor(Math.random() * 3) + 2;
for (var i = 0; i < numOffers; i++) {
dailyOffers.push(generateRandomVehicle());
}
}
// Display vehicles
function displayVehicles(vehicles) {
vehicleContainer.removeChildren();
for (var i = 0; i < vehicles.length; i++) {
var vehicle = new Vehicle(vehicles[i]);
vehicle.x = i % 2 * 600 - 300;
vehicle.y = Math.floor(i / 2) * 380;
vehicleContainer.addChild(vehicle);
vehicle.vehicleData = vehicles[i];
vehicle.down = function (x, y, obj) {
selectedVehicle = obj.vehicleData;
updateUI();
};
// Add buy button for each vehicle
var vehicleBuyButton = new Button('Buy', 0x27ae60, 200, 80);
vehicleBuyButton.x = 0;
vehicleBuyButton.y = 150;
vehicle.addChild(vehicleBuyButton);
// Store vehicle data directly on the button using closure
(function (vehicleData) {
vehicleBuyButton.up = function (x, y, obj) {
if (vehicleData && playerMoney >= vehicleData.price) {
playerMoney -= vehicleData.price;
// Check if this seller is a scammer
if (vehicleData.isScammer) {
// Player loses money but gets no vehicle
infoText.setText('SCAMMED! The seller took your money and disappeared!\nYou lost $' + vehicleData.price.toLocaleString() + '!');
LK.effects.flashScreen(0xff0000, 1500); // Red flash for scam
} else {
// Normal purchase - Create a copy of the vehicle data for owned vehicles
var ownedVehicleData = {
make: vehicleData.make,
model: vehicleData.model,
condition: vehicleData.condition,
actualCondition: vehicleData.actualCondition,
mileage: vehicleData.mileage,
actualMileage: vehicleData.actualMileage,
price: vehicleData.price,
marketValue: vehicleData.marketValue,
sellerLying: vehicleData.sellerLying,
id: vehicleData.id,
repaired: false
};
ownedVehicles.push(ownedVehicleData);
LK.getSound('purchase').play();
}
// Remove from daily offers in both cases
for (var j = 0; j < dailyOffers.length; j++) {
if (dailyOffers[j].id === vehicleData.id) {
dailyOffers.splice(j, 1);
break;
}
}
selectedVehicle = null;
updateMoneyDisplay();
displayVehicles(dailyOffers);
updateUI();
saveGame();
}
};
})(vehicles[i]);
}
}
// Update UI based on game state
function updateUI() {
inspectButton.visible = false;
buyButton.visible = false;
negotiateButton.visible = false;
repairButton.visible = false;
sellButton.visible = false;
expertiseButton.visible = false;
if (gameState === 'daily_offers' && selectedVehicle) {
inspectButton.visible = true;
buyButton.visible = true;
negotiateButton.visible = true;
expertiseButton.visible = true;
// Calculate expertise cost based on vehicle price (15-20% of price)
var expertiseCost = Math.floor(selectedVehicle.price * (Math.random() * 0.05 + 0.15));
// Minimum expertise cost of $1000
if (expertiseCost < 1000) {
expertiseCost = 1000;
}
// Update expertise button text with dynamic cost
expertiseButton.children[0].setText('Expertise ($' + expertiseCost.toLocaleString() + ')');
infoText.setText('Selected: ' + selectedVehicle.make + ' ' + selectedVehicle.model + '\nCondition: ' + selectedVehicle.condition + '\nMileage: ' + selectedVehicle.mileage + 'k miles' + '\nPrice: $' + selectedVehicle.price.toLocaleString());
} else if (gameState === 'owned_vehicles' && selectedVehicle) {
if (selectedVehicle.actualCondition === 'damaged' && !selectedVehicle.repaired) {
repairButton.visible = true;
} else {
sellButton.visible = true;
}
infoText.setText('Owned: ' + selectedVehicle.make + ' ' + selectedVehicle.model + '\nCondition: ' + selectedVehicle.actualCondition + '\nMileage: ' + selectedVehicle.actualMileage + 'k miles' + '\nMarket Value: $' + selectedVehicle.marketValue.toLocaleString());
} else {
infoText.setText('Select a vehicle to view options');
}
}
// Add expertise button
var expertiseButton = game.addChild(new Button('Expertise (Dynamic)', 0x9b59b6));
expertiseButton.x = 2048 / 2 + 400;
expertiseButton.y = 2200;
expertiseButton.visible = false;
// Button event handlers
inspectButton.up = function (x, y, obj) {
if (selectedVehicle && playerMoney >= 500) {
playerMoney -= 500;
selectedVehicle.inspected = true;
selectedVehicle.condition = selectedVehicle.actualCondition;
LK.getSound('inspect').play();
updateMoneyDisplay();
displayVehicles(dailyOffers);
updateUI();
if (selectedVehicle.sellerLying || selectedVehicle.mileage !== selectedVehicle.actualMileage) {
var lieText = 'Inspection revealed the seller was lying!\n';
if (selectedVehicle.sellerLying) {
lieText += 'Actual condition: ' + selectedVehicle.actualCondition + '\n';
}
if (selectedVehicle.mileage !== selectedVehicle.actualMileage) {
lieText += 'Actual mileage: ' + selectedVehicle.actualMileage + 'k miles';
}
infoText.setText(lieText);
} else {
infoText.setText('Inspection confirmed seller was honest.');
}
}
};
expertiseButton.up = function (x, y, obj) {
if (selectedVehicle) {
// Calculate expertise cost based on vehicle price (15-20% of price)
var expertiseCost = Math.floor(selectedVehicle.price * (Math.random() * 0.05 + 0.15));
// Minimum expertise cost of $1000
if (expertiseCost < 1000) {
expertiseCost = 1000;
}
if (playerMoney >= expertiseCost) {
playerMoney -= expertiseCost;
selectedVehicle.inspected = true;
selectedVehicle.condition = selectedVehicle.actualCondition;
LK.getSound('inspect').play();
updateMoneyDisplay();
displayVehicles(dailyOffers);
updateUI();
var detailsText = 'EXPERTISE REPORT (Cost: $' + expertiseCost.toLocaleString() + '):\n';
detailsText += 'True Condition: ' + selectedVehicle.actualCondition + '\n';
detailsText += 'Claimed Mileage: ' + selectedVehicle.mileage + 'k miles\n';
detailsText += 'Actual Mileage: ' + selectedVehicle.actualMileage + 'k miles\n';
detailsText += 'Mileage Honest: ' + (selectedVehicle.mileage === selectedVehicle.actualMileage ? 'YES' : 'NO') + '\n';
detailsText += 'Seller Honest: ' + (selectedVehicle.sellerLying ? 'NO' : 'YES') + '\n';
detailsText += 'Market Value: $' + selectedVehicle.marketValue.toLocaleString() + '\n';
detailsText += 'Seller Trustworthy: ' + (selectedVehicle.isScammer ? 'SUSPICIOUS - POSSIBLE SCAMMER!' : 'YES') + '\n';
detailsText += 'Recommended Action: ';
if (selectedVehicle.isScammer) {
detailsText += 'AVOID - HIGH SCAM RISK!';
} else if (selectedVehicle.price < selectedVehicle.marketValue * 0.8) {
detailsText += 'BUY - Good Deal';
} else if (selectedVehicle.price > selectedVehicle.marketValue * 1.2) {
detailsText += 'AVOID - Overpriced';
} else {
detailsText += 'NEGOTIATE - Fair Price';
}
infoText.setText(detailsText);
} else {
infoText.setText('Not enough money! Expertise costs $' + expertiseCost.toLocaleString());
}
}
};
buyButton.up = function (x, y, obj) {
if (selectedVehicle && playerMoney >= selectedVehicle.price) {
playerMoney -= selectedVehicle.price;
// Check if this seller is a scammer
if (selectedVehicle.isScammer) {
// Player loses money but gets no vehicle
infoText.setText('SCAMMED! The seller took your money and disappeared!\nYou lost $' + selectedVehicle.price.toLocaleString() + '!');
LK.effects.flashScreen(0xff0000, 1500); // Red flash for scam
} else {
// Normal purchase
selectedVehicle.actualCondition = selectedVehicle.actualCondition;
ownedVehicles.push(selectedVehicle);
LK.getSound('purchase').play();
}
// Remove from daily offers in both cases
for (var i = 0; i < dailyOffers.length; i++) {
if (dailyOffers[i].id === selectedVehicle.id) {
dailyOffers.splice(i, 1);
break;
}
}
selectedVehicle = null;
updateMoneyDisplay();
displayVehicles(dailyOffers);
updateUI();
saveGame();
}
};
negotiateButton.up = function (x, y, obj) {
if (selectedVehicle) {
var reduction = Math.floor(selectedVehicle.price * (Math.random() * 0.2 + 0.05));
selectedVehicle.price -= reduction;
displayVehicles(dailyOffers);
updateUI();
infoText.setText('Negotiated $' + reduction.toLocaleString() + ' off the price!');
}
};
repairButton.up = function (x, y, obj) {
if (selectedVehicle) {
// Calculate repair cost based on vehicle price (10-25% of price)
var repairCost = Math.floor(selectedVehicle.price * (Math.random() * 0.15 + 0.10));
// Minimum repair cost of $1000
if (repairCost < 1000) {
repairCost = 1000;
}
if (playerMoney >= repairCost) {
playerMoney -= repairCost;
selectedVehicle.repaired = true;
selectedVehicle.actualCondition = 'good';
selectedVehicle.marketValue = Math.floor(selectedVehicle.marketValue * 1.5);
LK.getSound('repair').play();
updateMoneyDisplay();
displayOwnedVehicles();
updateUI();
saveGame();
infoText.setText('Repaired for $' + repairCost.toLocaleString() + '!');
} else {
infoText.setText('Not enough money! Repair costs $' + repairCost.toLocaleString());
}
}
};
sellButton.up = function (x, y, obj) {
if (selectedVehicle) {
var salePrice = Math.floor(selectedVehicle.marketValue * (Math.random() * 0.3 + 0.8));
playerMoney += salePrice;
// Remove from owned vehicles
for (var i = 0; i < ownedVehicles.length; i++) {
if (ownedVehicles[i].id === selectedVehicle.id) {
ownedVehicles.splice(i, 1);
break;
}
}
LK.getSound('sale').play();
selectedVehicle = null;
updateMoneyDisplay();
displayOwnedVehicles();
updateUI();
saveGame();
infoText.setText('Sold for $' + salePrice.toLocaleString() + '!');
}
};
nextDayButton.up = function (x, y, obj) {
currentDay++;
selectedVehicle = null;
generateDailyOffers();
gameState = 'daily_offers';
stateText.setText('Daily Vehicle Offers');
dayText.setText('Day ' + currentDay);
displayVehicles(dailyOffers);
updateUI();
// Add random daily expenses
var dailyExpenses = Math.floor(Math.random() * 5000) + 1000; // Between $1000-$6000
playerMoney -= dailyExpenses;
var expenseText = 'Daily expenses: $' + dailyExpenses.toLocaleString() + ' (rent, utilities, staff wages)';
// Add maintenance costs for owned vehicles
var maintenanceCosts = applyMaintenanceCosts();
if (maintenanceCosts > 0) {
expenseText += '\nVehicle maintenance: $' + maintenanceCosts.toLocaleString();
}
// Add insurance costs based on number of owned vehicles
var insuranceCost = ownedVehicles.length * 150;
if (insuranceCost > 0) {
playerMoney -= insuranceCost;
expenseText += '\nInsurance: $' + insuranceCost.toLocaleString();
}
// Random unexpected repairs (10% chance per owned vehicle)
var unexpectedRepairs = 0;
for (var i = 0; i < ownedVehicles.length; i++) {
if (Math.random() < 0.1) {
var repairCost = Math.floor(Math.random() * 2000) + 500;
unexpectedRepairs += repairCost;
}
}
if (unexpectedRepairs > 0) {
playerMoney -= unexpectedRepairs;
expenseText += '\nUnexpected repairs: $' + unexpectedRepairs.toLocaleString();
}
// Apply vehicle depreciation
applyVehicleDepreciation();
// Apply daily interest on debt
var interestCharge = 0;
if (playerDebt > 0) {
interestCharge = Math.floor(playerDebt * dailyInterestRate);
playerDebt += interestCharge;
expenseText += '\nDebt interest: $' + interestCharge.toLocaleString();
}
// Tax system - every 7 days
if (currentDay % 7 === 1 && currentDay > lastTaxDay) {
// Calculate total vehicle value
var totalVehicleValue = 0;
for (var i = 0; i < ownedVehicles.length; i++) {
totalVehicleValue += ownedVehicles[i].marketValue;
}
// Tax is 8% of total assets (money + vehicles)
var taxAmount = Math.floor((playerMoney + totalVehicleValue) * 0.08);
taxDebt += taxAmount;
taxDueDate = currentDay + 2; // 2 days to pay
taxOverdueDate = currentDay + 2; // Start charging interest after 2 days
lastTaxDay = currentDay;
expenseText += '\nTAX DUE: $' + taxAmount.toLocaleString() + ' (due in 2 days)';
LK.effects.flashScreen(0xffa500, 1000); // Orange flash for tax notice
}
// Apply tax interest if overdue (after 2 days)
if (taxDebt > 0 && currentDay > taxOverdueDate) {
var taxInterest = Math.floor(taxDebt * 0.15); // 15% daily interest
taxDebt += taxInterest;
expenseText += '\nTax interest: $' + taxInterest.toLocaleString() + ' (15% daily)';
}
// Tax seizure after 14 days of unpaid tax debt
if (taxDebt > 0 && currentDay > taxDueDate + 14) {
var seizureAmount = Math.floor(taxDebt * 1.5); // 50% more than tax debt
var actualSeizureAmount = 0;
// First seize money
if (playerMoney > 0) {
var moneySeized = Math.min(playerMoney, seizureAmount);
playerMoney -= moneySeized;
actualSeizureAmount += moneySeized;
seizureAmount -= moneySeized;
}
// Then seize vehicles if more seizure needed
if (seizureAmount > 0 && ownedVehicles.length > 0) {
var vehiclesSeized = [];
for (var i = ownedVehicles.length - 1; i >= 0 && seizureAmount > 0; i--) {
var vehicle = ownedVehicles[i];
if (vehicle.marketValue <= seizureAmount) {
vehiclesSeized.push(vehicle.make + ' ' + vehicle.model);
actualSeizureAmount += vehicle.marketValue;
seizureAmount -= vehicle.marketValue;
ownedVehicles.splice(i, 1);
}
}
}
// Clear tax debt after seizure
taxDebt = 0;
taxDueDate = 0;
taxOverdueDate = 0;
var seizureText = 'TAX SEIZURE! Assets worth $' + actualSeizureAmount.toLocaleString() + ' seized for unpaid taxes!';
if (vehiclesSeized.length > 0) {
seizureText += '\nVehicles seized: ' + vehiclesSeized.join(', ');
}
expenseText += '\n' + seizureText;
LK.effects.flashScreen(0xff0000, 2000); // Red flash for seizure
// Update displays after seizure
if (gameState === 'owned_vehicles') {
displayOwnedVehicles();
}
}
updateMoneyDisplay();
updateDebtDisplay();
updateTaxDisplay();
infoText.setText(expenseText);
saveGame();
};
viewOwnedButton.up = function (x, y, obj) {
if (gameState === 'daily_offers') {
gameState = 'owned_vehicles';
stateText.setText('Owned Vehicles');
displayOwnedVehicles();
} else {
gameState = 'daily_offers';
stateText.setText('Daily Vehicle Offers');
displayVehicles(dailyOffers);
}
selectedVehicle = null;
updateUI();
};
loanButton.up = function (x, y, obj) {
var loanAmount = 10000;
playerMoney += loanAmount;
playerDebt += loanAmount;
updateMoneyDisplay();
updateDebtDisplay();
saveGame();
infoText.setText('Loan approved! You received $' + loanAmount.toLocaleString() + '\nDaily interest: 5%');
};
payDebtButton.up = function (x, y, obj) {
if (playerDebt > 0 && playerMoney > 0) {
var paymentAmount = Math.min(playerMoney, playerDebt);
playerMoney -= paymentAmount;
playerDebt -= paymentAmount;
updateMoneyDisplay();
updateDebtDisplay();
saveGame();
infoText.setText('Paid $' + paymentAmount.toLocaleString() + ' towards debt!\nRemaining debt: $' + playerDebt.toLocaleString());
} else if (playerDebt <= 0) {
infoText.setText('You have no debt to pay!');
} else {
infoText.setText('You need money to pay your debt!');
}
};
payTaxButton.up = function (x, y, obj) {
if (taxDebt > 0 && playerMoney > 0) {
var paymentAmount = Math.min(playerMoney, taxDebt);
playerMoney -= paymentAmount;
taxDebt -= paymentAmount;
updateMoneyDisplay();
updateTaxDisplay();
saveGame();
infoText.setText('Paid $' + paymentAmount.toLocaleString() + ' towards tax!\nRemaining tax: $' + taxDebt.toLocaleString());
} else if (taxDebt <= 0) {
infoText.setText('You have no tax to pay!');
} else {
infoText.setText('You need money to pay your tax!');
}
};
resetButton.up = function (x, y, obj) {
// Clear all stored data
delete storage.playerMoney;
delete storage.currentDay;
delete storage.playerDebt;
delete storage.taxDebt;
delete storage.taxDueDate;
delete storage.taxOverdueDate;
delete storage.lastTaxDay;
delete storage.vehicleCount;
delete storage.vehicleMakes;
delete storage.vehicleModels;
delete storage.vehicleConditions;
delete storage.vehicleActualConditions;
delete storage.vehicleMileages;
delete storage.vehicleActualMileages;
delete storage.vehiclePrices;
delete storage.vehicleMarketValues;
delete storage.vehicleSellerLying;
delete storage.vehicleIds;
delete storage.vehicleRepaired;
// Reset game state to initial values
playerMoney = 50000;
currentDay = 1;
playerDebt = 0;
taxDebt = 0;
taxDueDate = 0;
taxOverdueDate = 0;
lastTaxDay = 0;
ownedVehicles = [];
selectedVehicle = null;
gameState = 'daily_offers';
// Update UI
stateText.setText('Daily Vehicle Offers');
dayText.setText('Day ' + currentDay);
updateMoneyDisplay();
updateDebtDisplay();
updateTaxDisplay();
generateDailyOffers();
displayVehicles(dailyOffers);
updateUI();
};
function displayOwnedVehicles() {
vehicleContainer.removeChildren();
for (var i = 0; i < ownedVehicles.length; i++) {
var vehicle = new Vehicle(ownedVehicles[i]);
if (ownedVehicles[i].repaired) {
vehicle.repaired = true;
vehicle.updateDisplay();
}
vehicle.x = i % 2 * 600 - 300;
vehicle.y = Math.floor(i / 2) * 380;
vehicleContainer.addChild(vehicle);
vehicle.vehicleData = ownedVehicles[i];
vehicle.down = function (x, y, obj) {
selectedVehicle = obj.vehicleData;
updateUI();
};
// Add action buttons for each owned vehicle
if (ownedVehicles[i].actualCondition === 'damaged' && !ownedVehicles[i].repaired) {
// Add repair button with dynamic cost
var repairCost = Math.floor(ownedVehicles[i].price * (Math.random() * 0.15 + 0.10));
if (repairCost < 1000) {
repairCost = 1000;
}
var vehicleRepairButton = new Button('Repair ($' + repairCost.toLocaleString() + ')', 0xe67e22, 200, 60);
vehicleRepairButton.x = -100;
vehicleRepairButton.y = 150;
vehicle.addChild(vehicleRepairButton);
(function (vehicleData) {
vehicleRepairButton.up = function (x, y, obj) {
// Calculate repair cost based on vehicle price (10-25% of price)
var repairCost = Math.floor(vehicleData.price * (Math.random() * 0.15 + 0.10));
// Minimum repair cost of $1000
if (repairCost < 1000) {
repairCost = 1000;
}
if (playerMoney >= repairCost) {
playerMoney -= repairCost;
vehicleData.repaired = true;
vehicleData.actualCondition = 'good';
vehicleData.marketValue = Math.floor(vehicleData.marketValue * 1.5);
LK.getSound('repair').play();
updateMoneyDisplay();
displayOwnedVehicles();
updateUI();
saveGame();
infoText.setText('Repaired for $' + repairCost.toLocaleString() + '!');
} else {
infoText.setText('Not enough money! Repair costs $' + repairCost.toLocaleString());
}
};
})(ownedVehicles[i]);
} else {
// Add sell button
var vehicleSellButton = new Button('Sell', 0x8e44ad, 200, 60);
vehicleSellButton.x = -100;
vehicleSellButton.y = 150;
vehicle.addChild(vehicleSellButton);
(function (vehicleData) {
vehicleSellButton.up = function (x, y, obj) {
var salePrice = Math.floor(vehicleData.marketValue * (Math.random() * 0.3 + 0.8));
playerMoney += salePrice;
// Remove from owned vehicles
for (var j = 0; j < ownedVehicles.length; j++) {
if (ownedVehicles[j].id === vehicleData.id) {
ownedVehicles.splice(j, 1);
break;
}
}
LK.getSound('sale').play();
selectedVehicle = null;
updateMoneyDisplay();
displayOwnedVehicles();
updateUI();
saveGame();
infoText.setText('Sold for $' + salePrice.toLocaleString() + '!');
};
})(ownedVehicles[i]);
}
}
}
function updateMoneyDisplay() {
moneyText.setText('Money: $' + playerMoney.toLocaleString());
}
function updateDebtDisplay() {
debtText.setText('Debt: $' + playerDebt.toLocaleString());
if (playerDebt > 0) {
debtText.tint = 0xe74c3c; // Red for debt
} else {
debtText.tint = 0x2ecc71; // Green for no debt
}
}
function updateTaxDisplay() {
taxText.setText('Tax: $' + taxDebt.toLocaleString());
if (taxDebt > 0) {
taxText.tint = 0xe74c3c; // Red for tax debt
} else {
taxText.tint = 0x2ecc71; // Green for no tax
}
}
function saveGame() {
storage.playerMoney = playerMoney;
storage.currentDay = currentDay;
storage.playerDebt = playerDebt;
storage.taxDebt = taxDebt;
storage.taxDueDate = taxDueDate;
storage.taxOverdueDate = taxOverdueDate;
storage.lastTaxDay = lastTaxDay;
// Store each vehicle property as separate arrays to avoid nested objects
var vehicleCount = ownedVehicles.length;
storage.vehicleCount = vehicleCount;
storage.vehicleMakes = [];
storage.vehicleModels = [];
storage.vehicleConditions = [];
storage.vehicleActualConditions = [];
storage.vehicleMileages = [];
storage.vehicleActualMileages = [];
storage.vehiclePrices = [];
storage.vehicleMarketValues = [];
storage.vehicleSellerLying = [];
storage.vehicleIds = [];
storage.vehicleRepaired = [];
for (var i = 0; i < ownedVehicles.length; i++) {
var vehicle = ownedVehicles[i];
storage.vehicleMakes.push(vehicle.make);
storage.vehicleModels.push(vehicle.model);
storage.vehicleConditions.push(vehicle.condition);
storage.vehicleActualConditions.push(vehicle.actualCondition);
storage.vehicleMileages.push(vehicle.mileage);
storage.vehicleActualMileages.push(vehicle.actualMileage);
storage.vehiclePrices.push(vehicle.price);
storage.vehicleMarketValues.push(vehicle.marketValue);
storage.vehicleSellerLying.push(vehicle.sellerLying);
storage.vehicleIds.push(vehicle.id);
storage.vehicleRepaired.push(vehicle.repaired || false);
}
}
// Add maintenance costs for owned vehicles
function applyMaintenanceCosts() {
var totalMaintenanceCost = 0;
for (var i = 0; i < ownedVehicles.length; i++) {
var vehicle = ownedVehicles[i];
// Higher maintenance cost for damaged vehicles
var baseCost = vehicle.actualCondition === 'damaged' ? 200 : 100;
var maintenanceCost = Math.floor(Math.random() * baseCost) + 50;
totalMaintenanceCost += maintenanceCost;
}
if (totalMaintenanceCost > 0) {
playerMoney -= totalMaintenanceCost;
return totalMaintenanceCost;
}
return 0;
}
// Apply vehicle depreciation
function applyVehicleDepreciation() {
for (var i = 0; i < ownedVehicles.length; i++) {
var vehicle = ownedVehicles[i];
// Vehicles lose 2-5% of their market value each day
var depreciationRate = Math.random() * 0.03 + 0.02;
vehicle.marketValue = Math.floor(vehicle.marketValue * (1 - depreciationRate));
// Minimum market value floor
if (vehicle.marketValue < 1000) {
vehicle.marketValue = 1000;
}
}
}
// Initialize game
updateDebtDisplay();
updateTaxDisplay();
generateDailyOffers();
displayVehicles(dailyOffers);
updateUI();
// Game update loop
game.update = function () {
// Check for game over condition
if (playerMoney < 0) {
LK.showGameOver();
}
// Check for winning condition
if (playerMoney >= 500000) {
LK.showYouWin();
}
}; ===================================================================
--- original.js
+++ change.js
@@ -614,10 +614,10 @@
var totalVehicleValue = 0;
for (var i = 0; i < ownedVehicles.length; i++) {
totalVehicleValue += ownedVehicles[i].marketValue;
}
- // Tax is 3% of total assets (money + vehicles)
- var taxAmount = Math.floor((playerMoney + totalVehicleValue) * 0.03);
+ // Tax is 8% of total assets (money + vehicles)
+ var taxAmount = Math.floor((playerMoney + totalVehicleValue) * 0.08);
taxDebt += taxAmount;
taxDueDate = currentDay + 2; // 2 days to pay
taxOverdueDate = currentDay + 2; // Start charging interest after 2 days
lastTaxDay = currentDay;
@@ -629,8 +629,47 @@
var taxInterest = Math.floor(taxDebt * 0.15); // 15% daily interest
taxDebt += taxInterest;
expenseText += '\nTax interest: $' + taxInterest.toLocaleString() + ' (15% daily)';
}
+ // Tax seizure after 14 days of unpaid tax debt
+ if (taxDebt > 0 && currentDay > taxDueDate + 14) {
+ var seizureAmount = Math.floor(taxDebt * 1.5); // 50% more than tax debt
+ var actualSeizureAmount = 0;
+ // First seize money
+ if (playerMoney > 0) {
+ var moneySeized = Math.min(playerMoney, seizureAmount);
+ playerMoney -= moneySeized;
+ actualSeizureAmount += moneySeized;
+ seizureAmount -= moneySeized;
+ }
+ // Then seize vehicles if more seizure needed
+ if (seizureAmount > 0 && ownedVehicles.length > 0) {
+ var vehiclesSeized = [];
+ for (var i = ownedVehicles.length - 1; i >= 0 && seizureAmount > 0; i--) {
+ var vehicle = ownedVehicles[i];
+ if (vehicle.marketValue <= seizureAmount) {
+ vehiclesSeized.push(vehicle.make + ' ' + vehicle.model);
+ actualSeizureAmount += vehicle.marketValue;
+ seizureAmount -= vehicle.marketValue;
+ ownedVehicles.splice(i, 1);
+ }
+ }
+ }
+ // Clear tax debt after seizure
+ taxDebt = 0;
+ taxDueDate = 0;
+ taxOverdueDate = 0;
+ var seizureText = 'TAX SEIZURE! Assets worth $' + actualSeizureAmount.toLocaleString() + ' seized for unpaid taxes!';
+ if (vehiclesSeized.length > 0) {
+ seizureText += '\nVehicles seized: ' + vehiclesSeized.join(', ');
+ }
+ expenseText += '\n' + seizureText;
+ LK.effects.flashScreen(0xff0000, 2000); // Red flash for seizure
+ // Update displays after seizure
+ if (gameState === 'owned_vehicles') {
+ displayOwnedVehicles();
+ }
+ }
updateMoneyDisplay();
updateDebtDisplay();
updateTaxDisplay();
infoText.setText(expenseText);