User prompt
Change the scrolling to be for the container not for the pagetab1.
User prompt
Set the limit of scrolling for the scrollbutton is the edge lines of bottom and top of the scrollbar so it can't scroll more than that.
User prompt
Make the scrollbar and its button for the container of pagetab1
Code edit (4 edits merged)
Please save this source code
User prompt
Define the container asset in the code
User prompt
Add container asset to the game to be in same position of Pagetab1
User prompt
Add the container to the game in same position of Pagetab1
User prompt
Add container asset for Pagetab1 With same size of Pagetab1 and make the scroll for it not for the pagetab1.
User prompt
Set the Buttonscroll and its scrollbar for this Pagetab1 to scroll the anything inside it.
Code edit (1 edits merged)
Please save this source code
User prompt
Move the scrollbutton and the scrollbar a bit more to the right
Code edit (8 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'x')' in or related to this line: 'var scrollbutton = self.attachAsset('Scrollbutton', {' Line Number: 282
User prompt
Make the Scrollbutton in the middle of the Scrollbar
Code edit (1 edits merged)
Please save this source code
Code edit (3 edits merged)
Please save this source code
User prompt
change there position to be on the left from inside of pagetab1
User prompt
Add scrollbutton and scrollbar assets for Pagetab1 on its right
Code edit (1 edits merged)
Please save this source code
User prompt
Check the code if anything about page7 change it to page1 and background7 to background1.
User prompt
Make Pagetab1 visible
Code edit (3 edits merged)
Please save this source code
User prompt
Center the pagetab1
User prompt
Add Pagetab1
User prompt
Rename Tab1 as Pagetab1 and do the same for Tab2 and Tab3
/**** 
* Plugins
****/ 
var storage = LK.import("@upit/storage.v1", {
	lastScores: {
		silver: 0,
		stone: 0,
		gold: 0,
		bronze: 0,
		crystal: 0,
		wood: 0
	}
});
/**** 
* Classes
****/ 
var Page1 = Container.expand(function () {
	var self = Container.call(this);
	// Add map asset to Page1 below the pause button
	var background1 = self.attachAsset('background1', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 2048 / 2,
		y: 2732 / 2,
		scaleX: 2050 / 2048,
		// Match width of background1
		scaleY: 2420 / 2732 // Match height of background1
	});
	// Add drag functionality to the background1 image
	self.lastX = background1.x;
	self.lastY = background1.y;
	self.down = function (x, y, obj) {
		self.dragging = true;
		self.data = obj.data;
		self.initialClick = {
			x: x,
			y: y
		};
		self.offset = {
			x: background1.x - x,
			y: background1.y - y
		};
	};
	self.up = function () {
		self.dragging = false;
		self.data = null;
	};
	self.move = function (x, y, obj) {
		if (self.dragging) {
			var dx = x - self.initialClick.x;
			var dy = y - self.initialClick.y;
			background1.x = x + self.offset.x;
			background1.y = y + self.offset.y;
			self.initialClick = {
				x: x,
				y: y
			};
			self.lastX = background1.x;
			self.lastY = background1.y;
		}
	};
	var wall1 = self.attachAsset('wall1', {
		anchorX: 0.5,
		anchorY: 1.0,
		x: 1024,
		// Center horizontally
		y: 2732 // Position at the bottom
	});
	self.addChild(wall1);
	// Add Build asset to Page1 below the map
	var build = self.attachAsset('Build', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 110,
		// Position on the left side below the pause button
		y: 400 // Position directly below the pause button
	});
	self.addChild(build);
	var buildText = new Text2('BUILD', {
		size: 80,
		fill: 0xFFA500 // Orange color
	});
	buildText.anchor.set(0.5, 0);
	buildText.x = build.x;
	buildText.y = build.y + build.height / 2 + 2; // Position directly below and closer to the build asset
	self.addChild(buildText);
	// Add Buttontab1 asset beside the pause button from the right
	var buttontab1 = self.attachAsset('Buttontab1', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 450,
		// Position on the right side beside the pause button
		y: 100
	});
	self.addChild(buttontab1);
	// Add Buttontab2 asset beside Buttontab1 from the right
	var buttontab2 = self.attachAsset('Buttontab2', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: buttontab1.x + buttontab1.width,
		// Position Buttontab2 edge to edge with Buttontab1
		// Position Buttontab2 close to Buttontab1
		// Constrain to the right edge of Buttontab1
		y: 100
	});
	self.addChild(buttontab2);
	// Add Buttontab3 asset beside Buttontab2 from the right
	var buttontab3 = self.attachAsset('Buttontab3', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: buttontab2.x + buttontab2.width,
		// Position Buttontab3 edge to edge with Buttontab2
		y: 100
	});
	self.addChild(buttontab3);
	// Add resources and score similar to Page1
	var wood = self.attachAsset('wood', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 1902,
		y: 2510
	});
	self.addChild(wood);
	var woodScoreText = new Text2('0', {
		size: 70,
		fill: 0x471e00
	});
	woodScoreText.anchor.set(1, 0.5);
	woodScoreText.x = 1800;
	woodScoreText.y = 2510;
	self.addChild(woodScoreText);
	var silver = self.attachAsset('silver', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 1902,
		y: 2660
	});
	self.addChild(silver);
	var silverScoreText = new Text2('0', {
		size: 70,
		fill: 0xc0c0c0
	});
	silverScoreText.anchor.set(1, 0.5);
	silverScoreText.x = silver.x - 90;
	silverScoreText.y = silver.y;
	self.addChild(silverScoreText);
	var stone = self.attachAsset('stone', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 1220,
		y: 2510
	});
	self.addChild(stone);
	var stoneScoreText = new Text2('0', {
		size: 70,
		fill: 0x00ff00
	});
	stoneScoreText.anchor.set(1, 0.5);
	stoneScoreText.x = stone.x - 90;
	stoneScoreText.y = stone.y;
	self.addChild(stoneScoreText);
	var gold = self.attachAsset('gold', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 1220,
		y: 2660
	});
	self.addChild(gold);
	var goldScoreText = new Text2('0', {
		size: 70,
		fill: 0xffd700
	});
	goldScoreText.anchor.set(1, 0.5);
	goldScoreText.x = gold.x - 90;
	goldScoreText.y = gold.y;
	self.addChild(goldScoreText);
	var bronze = self.attachAsset('bronze', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 595,
		y: 2510
	});
	self.addChild(bronze);
	var bronzeScoreText = new Text2('0', {
		size: 70,
		fill: 0xcd7f32
	});
	bronzeScoreText.anchor.set(1, 0.5);
	bronzeScoreText.x = bronze.x - 90;
	bronzeScoreText.y = bronze.y;
	self.addChild(bronzeScoreText);
	var crystal = self.attachAsset('crystal', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 595,
		y: 2660
	});
	self.addChild(crystal);
	var crystalScoreText = new Text2('0', {
		size: 70,
		fill: 0x00ffff
	});
	crystalScoreText.anchor.set(1, 0.5);
	crystalScoreText.x = crystal.x - 90;
	crystalScoreText.y = crystal.y;
	self.addChild(crystalScoreText);
	map.down = function (x, y, obj) {
		// Navigate to Page0
		game.removeChild(page);
		page = game.addChild(new Page0());
	};
});
var Pagetab1 = Container.expand(function () {
	var self = Container.call(this);
	// Attach Pagetab1 asset
	var pagetab1Asset = self.attachAsset('Pagetab1', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 2250 / 2,
		y: 2550 / 2
	});
	self.addChild(pagetab1Asset);
	// Attach Scrollbar asset to the left of Scrollbutton
	var scrollbar = self.attachAsset('Scrollbar', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 2000,
		// Position to the left of Scrollbutton
		y: 2550 / 2
	});
	self.addChild(scrollbar);
	// Attach Scrollbutton asset to the left of Pagetab1
	var scrollbutton = self.attachAsset('Scrollbutton', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: scrollbar.x,
		// Center Scrollbutton within Scrollbar
		y: scrollbar.y // Align vertically with Scrollbar
	});
	self.addChild(scrollbutton);
	// Add scrolling functionality
	scrollbutton.down = function (x, y, obj) {
		self.dragging = true;
		self.data = obj.data;
		self.initialClick = {
			x: x,
			y: y
		};
		self.offset = {
			y: scrollbutton.y - y
		};
	};
	scrollbutton.up = function () {
		self.dragging = false;
		self.data = null;
	};
	scrollbutton.move = function (x, y, obj) {
		if (self.dragging) {
			var dy = y - self.initialClick.y;
			scrollbutton.y = y + self.offset.y;
			// Ensure the scrollbutton stays within the scrollbar's top and bottom edges
			if (scrollbutton.y < scrollbar.y - scrollbar.height / 2 + scrollbutton.height / 2) {
				scrollbutton.y = scrollbar.y - scrollbar.height / 2 + scrollbutton.height / 2;
			} else if (scrollbutton.y > scrollbar.y + scrollbar.height / 2 - scrollbutton.height / 2) {
				scrollbutton.y = scrollbar.y + scrollbar.height / 2 - scrollbutton.height / 2;
			}
			container.y -= dy; // Scroll the content inside Container
			// Ensure the scrollbutton stays within the scrollbar
			if (scrollbutton.y < scrollbar.y - scrollbar.height / 2) {
				scrollbutton.y = scrollbar.y - scrollbar.height / 2;
			} else if (scrollbutton.y > scrollbar.y + scrollbar.height / 2) {
				scrollbutton.y = scrollbar.y + scrollbar.height / 2;
			}
			// Ensure the pagetab1Asset stays within its bounds
			if (pagetab1Asset.y > 2550 / 2) {
				pagetab1Asset.y = 2550 / 2;
			} else if (pagetab1Asset.y < 2550 / 2 - (pagetab1Asset.height - 2000)) {
				pagetab1Asset.y = 2550 / 2 - (pagetab1Asset.height - 2000);
			}
			self.initialClick = {
				x: x,
				y: y
			};
		}
	};
	// Attach Scrollbar asset to the left of Scrollbutton
	var scrollbar = self.attachAsset('Scrollbar', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: scrollbutton.x - scrollbutton.width / 2 + 2000,
		// Position to the left of Scrollbutton
		y: scrollbutton.y
	});
	self.addChild(scrollbar);
	return self;
});
var Tree = Container.expand(function (assetId, x, y) {
	var self = Container.call(this);
	var tree = self.attachAsset(assetId, {
		anchorX: -1.1,
		anchorY: 3,
		x: x,
		y: y
	});
	tree.clickCount = 0;
	self.addChild(tree);
	self.getClickCount = function () {
		return tree.clickCount;
	};
	self.incrementClickCount = function () {
		tree.clickCount += 1;
	};
	self.hide = function () {
		tree.visible = false;
	};
	return self;
});
var WoodScoreText = Container.expand(function () {
	var self = Container.call(this);
	var woodScoreText = new Text2('0', {
		size: 70,
		fill: 0x471e00
	});
	woodScoreText.anchor.set(1, 0.5);
	self.addChild(woodScoreText);
	self.setText = function (text) {
		woodScoreText.setText(text);
	};
	self.getText = function () {
		return woodScoreText.text;
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000
});
/**** 
* Game Code
****/ 
var map = {}; // Initialize map variable as an empty object for global use
var lastScores = storage.lastScores || {};
var lastSilverScore = lastScores.silver || 0;
var lastStoneScore = lastScores.stone || 0;
var lastGoldScore = lastScores.gold || 0;
var lastBronzeScore = lastScores.bronze || 0;
var lastCrystalScore = lastScores.crystal || 0;
var lastWoodScore = lastScores.wood || 0;
var wood = {
	clickCount: 0
}; // Define wood object for global use
wood.clickCount = lastWoodScore;
var silver = {
	clickCount: 0
}; // Define silver object for global use
silver.clickCount = lastSilverScore;
var stone = {
	clickCount: 0
}; // Define stone object
stone.clickCount = lastStoneScore;
var gold = {
	clickCount: 0
}; // Define gold object
gold.clickCount = lastGoldScore;
var bronze = {
	clickCount: 0
}; // Define bronze object
bronze.clickCount = lastBronzeScore;
var crystal = {
	clickCount: 0
}; // Define crystal object
crystal.clickCount = lastCrystalScore;
function _slicedToArray2(r, e) {
	return _arrayWithHoles2(r) || _iterableToArrayLimit2(r, e) || _unsupportedIterableToArray2(r, e) || _nonIterableRest2();
}
function _nonIterableRest2() {
	throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _unsupportedIterableToArray2(r, a) {
	if (r) {
		if ("string" == typeof r) {
			return _arrayLikeToArray2(r, a);
		}
		var t = {}.toString.call(r).slice(8, -1);
		return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray2(r, a) : void 0;
	}
}
function _arrayLikeToArray2(r, a) {
	(null == a || a > r.length) && (a = r.length);
	for (var e = 0, n = Array(a); e < a; e++) {
		n[e] = r[e];
	}
	return n;
}
function _iterableToArrayLimit2(r, l) {
	var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
	if (null != t) {
		var e,
			n,
			i,
			u,
			a = [],
			f = !0,
			o = !1;
		try {
			if (i = (t = t.call(r)).next, 0 === l) {
				if (Object(t) !== t) {
					return;
				}
				f = !1;
			} else {
				for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0) {
					;
				}
			}
		} catch (r) {
			o = !0, n = r;
		} finally {
			try {
				if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) {
					return;
				}
			} finally {
				if (o) {
					throw n;
				}
			}
		}
		return a;
	}
}
function _arrayWithHoles2(r) {
	if (Array.isArray(r)) {
		return r;
	}
}
function saveStoneCooldowns() {
	var stoneCooldowns = [];
	for (var i = 1; i <= 10; i++) {
		var stone = window["stone" + i];
		if (stone && stone.timetext && stone.timetext.visible) {
			stoneCooldowns.push({
				id: i,
				cooldown: stone.timetext.getText()
			});
		}
	}
	if (typeof localStorage !== 'undefined') {
		localStorage.setItem('stoneCooldowns', JSON.stringify(stoneCooldowns));
	}
}
function restoreStoneCooldowns() {
	var storedStoneCooldowns = typeof localStorage !== 'undefined' ? localStorage.getItem('stoneCooldowns') : null;
	var stoneCooldowns = storedStoneCooldowns ? JSON.parse(storedStoneCooldowns) : [];
	stoneCooldowns.forEach(function (stoneData) {
		var stone = window["stone" + stoneData.id];
		var _stoneData$cooldown$s = stoneData.cooldown.split(':').map(Number),
			_stoneData$cooldown$s2 = _slicedToArray2(_stoneData$cooldown$s, 2),
			minutes = _stoneData$cooldown$s2[0],
			seconds = _stoneData$cooldown$s2[1];
		var totalSeconds = minutes * 60 + seconds;
		stone.clickCount = 3;
		stone.visible = false;
		stone.timetext.visible = true;
		stone.timetext.setText(stoneData.cooldown);
		var cooldown = totalSeconds;
		var interval = LK.setInterval(function () {
			cooldown--;
			var minutes = Math.floor(cooldown / 60);
			var seconds = cooldown % 60;
			stone.timetext.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds);
			if (cooldown <= 0) {
				LK.clearInterval(interval);
				stone.clickCount = 0;
				stone.visible = true;
				stone.timetext.visible = false;
			}
		}, 1000);
	});
}
function handleTreeClick(tree) {
	if (tree.clickCount < 3) {
		tree.clickCount++;
		if (tree.clickCount === 3) {
			tree.visible = false; // Use the visible property to hide the tree
			tree.timetext.visible = true; // Show timetext when tree is hidden
			var cooldown = 180; // 3 minutes in seconds
			var _interval = function interval() {
				if (cooldown > 0) {
					cooldown--;
					var minutes = Math.floor(cooldown / 60);
					var seconds = cooldown % 60;
					tree.timetext.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds);
					LK.setTimeout(_interval, 1000);
				} else {
					tree.clickCount = 0; // Reset click count after 3 minutes
					tree.visible = true; // Make the tree visible again
					tree.timetext.visible = false; // Hide timetext when tree becomes visible
				}
			};
			LK.setTimeout(_interval, 1000);
		}
		updateLastScores(); // Update last known scores for all resources
		var currentPage = page.constructor.name;
		if (!pageScores[currentPage]) {
			pageScores[currentPage] = {
				wood: {
					clickCount: 0
				},
				silver: {
					clickCount: 0
				},
				stone: {
					clickCount: 0
				},
				gold: {
					clickCount: 0
				},
				bronze: {
					clickCount: 0
				},
				crystal: {
					clickCount: 0
				}
			};
		}
		pageScores[currentPage].wood.clickCount = wood.clickCount;
		// Update score text for each resource
		woodScoreText.setText(wood.clickCount);
		silverScoreText.setText(silver.clickCount);
		stoneScoreText.setText(stone.clickCount);
		goldScoreText.setText(gold.clickCount);
		bronzeScoreText.setText(bronze.clickCount);
		crystalScoreText.setText(crystal.clickCount);
		// Log the click count for the tree
		console.log("Tree clicked ".concat(tree.clickCount, " times."));
	}
}
var wood = {
	clickCount: 0
}; // Define wood object for global use
var pageScores = {
	Page1: {
		wood: {
			clickCount: 0
		},
		silver: {
			clickCount: 0
		},
		stone: {
			clickCount: 0
		},
		gold: {
			clickCount: 0
		},
		bronze: {
			clickCount: 0
		},
		crystal: {
			clickCount: 0
		}
	}
};
// Initialize pageScores for each page
var woodScoreText = new WoodScoreText();
woodScoreText.setText(lastWoodScore); // Set woodScoreText to last known score
var silverScoreText = new Text2('0', {
	size: 70,
	fill: 0xc0c0c0
}); // Define silverScoreText in the global scope
silverScoreText.anchor.set(1, 0.5);
silverScoreText.setText(lastSilverScore); // Set silverScoreText to last known score
var stoneScoreText = new Text2('0', {
	size: 70,
	fill: 0x00ff00
}); // Define stoneScoreText in the global scope
stoneScoreText.anchor.set(1, 0.5);
stoneScoreText.setText(lastStoneScore); // Set stoneScoreText to last known score
var goldScoreText = new Text2('0', {
	size: 70,
	fill: 0xffd700
}); // Define goldScoreText in the global scope
goldScoreText.anchor.set(1, 0.5);
goldScoreText.setText(lastGoldScore); // Set goldScoreText to last known score
var bronzeScoreText = new Text2('0', {
	size: 70,
	fill: 0xcd7f32
}); // Define bronzeScoreText in the global scope
bronzeScoreText.anchor.set(1, 0.5);
bronzeScoreText.setText(lastBronzeScore); // Set bronzeScoreText to last known score
var crystalScoreText = new Text2('0', {
	size: 70,
	fill: 0x00ffff
}); // Define crystalScoreText in the global scope
crystalScoreText.anchor.set(1, 0.5);
crystalScoreText.setText(lastCrystalScore); // Set crystalScoreText to last known score
// Initialize storage time if not already set
if (!storage.time) {
	storage.time = new Date().getTime();
}
// Calculate time elapsed since last visit
var currentTime = new Date().getTime();
var timeElapsed = currentTime - storage.time;
console.log('Time Elapsed:', timeElapsed);
// Update storage time to current time
storage.time = currentTime;
// Function to update tree cooldowns based on time elapsed
function updateTreeCooldowns(timeElapsed) {
	var secondsElapsed = Math.floor(timeElapsed / 1000);
	for (var i = 1; i <= 16; i++) {
		var tree = window["tree" + i];
		if (tree && tree.timetext && tree.timetext.visible) {
			var _tree$timetext$getTe = tree.timetext.getText().split(':').map(Number),
				_tree$timetext$getTe2 = _slicedToArray(_tree$timetext$getTe, 2),
				minutes = _tree$timetext$getTe2[0],
				seconds = _tree$timetext$getTe2[1];
			var totalSeconds = minutes * 60 + seconds;
			totalSeconds = Math.max(0, totalSeconds - secondsElapsed);
			minutes = Math.floor(totalSeconds / 60);
			seconds = totalSeconds % 60;
			tree.timetext.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds);
			if (totalSeconds <= 0) {
				tree.clickCount = 0;
				tree.visible = true;
				tree.timetext.visible = false;
			}
		}
	}
}
// Update tree cooldowns based on time elapsed
updateTreeCooldowns(timeElapsed);
function _slicedToArray(r, e) {
	return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
}
function _nonIterableRest() {
	throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _unsupportedIterableToArray(r, a) {
	if (r) {
		if ("string" == typeof r) {
			return _arrayLikeToArray(r, a);
		}
		var t = {}.toString.call(r).slice(8, -1);
		return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
	}
}
function _arrayLikeToArray(r, a) {
	(null == a || a > r.length) && (a = r.length);
	for (var e = 0, n = Array(a); e < a; e++) {
		n[e] = r[e];
	}
	return n;
}
function _iterableToArrayLimit(r, l) {
	var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
	if (null != t) {
		var e,
			n,
			i,
			u,
			a = [],
			f = !0,
			o = !1;
		try {
			if (i = (t = t.call(r)).next, 0 === l) {
				if (Object(t) !== t) {
					return;
				}
				f = !1;
			} else {
				for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0) {
					;
				}
			}
		} catch (r) {
			o = !0, n = r;
		} finally {
			try {
				if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) {
					return;
				}
			} finally {
				if (o) {
					throw n;
				}
			}
		}
		return a;
	}
}
function _arrayWithHoles(r) {
	if (Array.isArray(r)) {
		return r;
	}
}
var pageScores = {
	Page1: {
		wood: {
			clickCount: 0
		},
		silver: {
			clickCount: 0
		},
		stone: {
			clickCount: 0
		},
		gold: {
			clickCount: 0
		},
		bronze: {
			clickCount: 0
		},
		crystal: {
			clickCount: 0
		}
	}
};
var stoneScoreText = new Text2('0', {
	size: 70,
	fill: 0x00ff00
});
stoneScoreText.anchor.set(1, 0.5);
var lastWoodScore = 0; // Initialize lastWoodScore to store the last known wood score
var silver = {
	clickCount: 0
}; // Define silver object
var silverScoreText = new Text2('0', {
	size: 70,
	fill: 0xc0c0c0
}); // Define silverScoreText in the global scope
var lastSilverScore = 0; // Initialize lastSilverScore to store the last known silver score
var stone = {
	clickCount: 0
}; // Define stone object
var lastStoneScore = 0; // Initialize lastStoneScore to store the last known stone score
var gold = {
	clickCount: 0
}; // Define gold object
var goldScoreText = new Text2('0', {
	size: 70,
	fill: 0xffd700
}); // Define goldScoreText in the global scope
var lastGoldScore = 0; // Initialize lastGoldScore to store the last known gold score
var bronze = {
	clickCount: 0
}; // Define bronze object
var bronzeScoreText = new Text2('0', {
	size: 70,
	fill: 0xcd7f32
}); // Define bronzeScoreText in the global scope
var lastBronzeScore = 0; // Initialize lastBronzeScore to store the last known bronze score
var crystal = {
	clickCount: 0
}; // Define crystal object
var crystalScoreText = new Text2('0', {
	size: 70,
	fill: 0x00ffff
}); // Define crystalScoreText in the global scope
var lastCrystalScore = 0; // Initialize lastCrystalScore to store the last known crystal score
// Function to update last known scores
function updateLastScores() {
	lastSilverScore = silver.clickCount;
	lastStoneScore = stone.clickCount;
	lastGoldScore = gold.clickCount;
	lastBronzeScore = bronze.clickCount;
	lastCrystalScore = crystal.clickCount;
	lastWoodScore = wood.clickCount; // Update woodScore
}
var page = game.addChild(new Page1()); //{0.b}
var pagetab1 = game.addChild(new Pagetab1());
var container = LK.getAsset('Container', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 2220 / 2,
	y: 2550 / 2
});
game.addChild(container);
// Function to synchronize scores across all pages
function synchronizeScores() {
	// Update score texts for all pages
	woodScoreText.setText(wood.clickCount);
	silverScoreText.setText(silver.clickCount);
	stoneScoreText.setText(stone.clickCount);
	goldScoreText.setText(gold.clickCount);
	bronzeScoreText.setText(bronze.clickCount);
	crystalScoreText.setText(crystal.clickCount);
}
// Call synchronizeScores when the game starts
synchronizeScores();
// Define tree variables to fix 'not defined' error
for (var i = 1; i <= 16; i++) {
	window["tree" + i] = {
		timetext: new Text2('3:00', {
			size: 80,
			fill: 0x8B4513
		}),
		clickCount: 0,
		visible: true
	};
	window["tree" + i].timetext.anchor.set(0.5, 0.5);
	window["tree" + i].timetext.visible = false; // Initially hidden
}
LK.setTimeout(function () {
	// Function to save tree cooldowns to local storage
	function saveTreeCooldowns() {
		var treeCooldowns = [];
		for (var i = 1; i <= 16; i++) {
			var tree = window["tree" + i];
			if (tree.timetext.visible) {
				treeCooldowns.push({
					id: i,
					cooldown: tree.timetext.getText()
				});
			}
		}
		localStorage.setItem('treeCooldowns', JSON.stringify(treeCooldowns));
	}
	// Function to restore tree cooldowns from local storage
	function restoreTreeCooldowns() {
		var storedTreeCooldowns = typeof localStorage !== 'undefined' ? localStorage.getItem('treeCooldowns') : null;
		var treeCooldowns = storedTreeCooldowns ? JSON.parse(storedTreeCooldowns) : [];
		treeCooldowns.forEach(function (treeData) {
			var tree = window["tree" + treeData.id];
			var _treeData$cooldown$sp = treeData.cooldown.split(':').map(Number),
				_treeData$cooldown$sp2 = _slicedToArray(_treeData$cooldown$sp, 2),
				minutes = _treeData$cooldown$sp2[0],
				seconds = _treeData$cooldown$sp2[1];
			var totalSeconds = minutes * 60 + seconds;
			tree.clickCount = 3;
			tree.visible = false;
			tree.timetext.visible = true;
			tree.timetext.setText(treeData.cooldown);
			var cooldown = totalSeconds;
			var interval = LK.setInterval(function () {
				cooldown--;
				var minutes = Math.floor(cooldown / 60);
				var seconds = cooldown % 60;
				tree.timetext.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds);
				if (cooldown <= 0) {
					LK.clearInterval(interval);
					tree.clickCount = 0;
					tree.visible = true;
					tree.timetext.visible = false;
				}
			}, 1000);
		});
	}
	// Call restoreTreeCooldowns when the game starts
	function restoreTreeCooldowns() {
		var storedTreeCooldowns = typeof localStorage !== 'undefined' ? localStorage.getItem('treeCooldowns') : null;
		var treeCooldowns = storedTreeCooldowns ? JSON.parse(storedTreeCooldowns) : [];
		treeCooldowns.forEach(function (treeData) {
			var tree = window["tree" + treeData.id];
			var _treeData$cooldown$sp = treeData.cooldown.split(':').map(Number),
				_treeData$cooldown$sp2 = _slicedToArray(_treeData$cooldown$sp, 2),
				minutes = _treeData$cooldown$sp2[0],
				seconds = _treeData$cooldown$sp2[1];
			var totalSeconds = minutes * 60 + seconds;
			tree.clickCount = 3;
			tree.visible = false;
			tree.timetext.visible = true;
			tree.timetext.setText(treeData.cooldown);
			var cooldown = totalSeconds;
			var interval = LK.setInterval(function () {
				cooldown--;
				var minutes = Math.floor(cooldown / 60);
				var seconds = cooldown % 60;
				tree.timetext.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds);
				if (cooldown <= 0) {
					LK.clearInterval(interval);
					tree.clickCount = 0;
					tree.visible = true;
					tree.timetext.visible = false;
				}
			}, 1000);
		});
	}
	restoreTreeCooldowns(); // Restore tree cooldowns from persisted data
	woodScoreText.setText(wood.clickCount); // Set woodScoreText to restored value
	var lastScores = storage.lastScores || {};
	lastStatueScore = lastScores.statue || 0;
	lastSilverScore = lastScores.silver || 0;
	lastStoneScore = lastScores.stone || 0;
	lastGoldScore = lastScores.gold || 0;
	lastBronzeScore = lastScores.bronze || 0;
	lastCrystalScore = lastScores.crystal || 0;
	silverScoreText.setText(lastSilverScore);
	stoneScoreText.setText(lastStoneScore);
	goldScoreText.setText(lastGoldScore);
	bronzeScoreText.setText(lastBronzeScore);
	crystalScoreText.setText(lastCrystalScore);
	woodScoreText.setText(lastWoodScore);
	// Save tree cooldowns before navigating away from the page
	LK.on('beforeunload', function () {
		saveTreeCooldowns();
		storage.woodClickCount = wood.clickCount;
		storage.lastScores = {
			silver: silver.clickCount,
			stone: stone.clickCount,
			gold: gold.clickCount,
			bronze: bronze.clickCount,
			crystal: crystal.clickCount,
			wood: wood.clickCount
		};
	}); //{0.b};
}, 30000); // 30 seconds delay
; //{0.b};
; //{0.b}
if (typeof map !== 'undefined') {
	map.down = function (x, y, obj) {
		// Navigate to Page1
		game.removeChild(page);
		page = game.addChild(new Page1());
	};
}
map.down = function (x, y, obj) {
	// Navigate to Page0
	game.removeChild(page);
	page = game.addChild(new Page0());
}; ===================================================================
--- original.js
+++ change.js
@@ -264,9 +264,9 @@
 				scrollbutton.y = scrollbar.y - scrollbar.height / 2 + scrollbutton.height / 2;
 			} else if (scrollbutton.y > scrollbar.y + scrollbar.height / 2 - scrollbutton.height / 2) {
 				scrollbutton.y = scrollbar.y + scrollbar.height / 2 - scrollbutton.height / 2;
 			}
-			pagetab1Asset.y -= dy; // Scroll the content inside Pagetab1
+			container.y -= dy; // Scroll the content inside Container
 			// Ensure the scrollbutton stays within the scrollbar
 			if (scrollbutton.y < scrollbar.y - scrollbar.height / 2) {
 				scrollbutton.y = scrollbar.y - scrollbar.height / 2;
 			} else if (scrollbutton.y > scrollbar.y + scrollbar.height / 2) {
:quality(85)/https://cdn.frvr.ai/67c144c0310f4513cc0488ae.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/67c86e45b201e1e482307bf3.png%3F3) 
 2D wreckage of wood, square, HD colors. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/67d9f7ccf23af70acf976d39.png%3F3) 
 House from the front facing the screen with big sign above it have description "SHOP", Hd colors
:quality(85)/https://cdn.frvr.ai/67ea3374a35b1b526c09ee9a.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/67ea3872a6cee3f813bae2c4.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/67eb560b1ec93ed14f2e8261.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/680e64beab85e831f2b10126.png%3F3) 
 coin with colors, have "DA", hd colors. have black circles and black line for the "DA", between the 2 circles do small black lines all around. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/6810f1a471168f2d5711d673.png%3F3) 
 Modern App Store icon, square with rounded corners, HD colors for a 2d game titled "The Collector" and with the description "about building houses and trees and decorations on a map to make it look like city, which then generate "DA" coins after a countdown timer expires. Players can collect these coins to increase their score, which they can then use to purchase more houses and trees and decorations from the shop button on the middle left side of the screen". with text on the middle top of the banner "the collector"!
:quality(85)/https://cdn.frvr.ai/68110ad271168f2d5711d742.png%3F3)