Exclusive to you and your tribe.
-
π Server Setup: Mirrors main cluster (PVP, breeding, rates). 50 slots, password-secured.
+
π 3 Server Setup: Mirrors main cluster (PVP, breeding, rates). 30 slots, password-secured.
βοΈ Tools & Perks: Creature Management Tool + 10Γ Mutation Potions per tier.
π Starting Bonus: 300,000 points at the start of each wipe.
β³ Setup: Usually β€ 2 business days. Never wipes while subscribed.
@@ -469,7 +469,7 @@
server1: "price_1SELDJDv9LGVOP85Tmvl29iG",
server2: "price_1SELEGDv9LGVOP85f22Gldvc",
server3: "price_1SELLTDv9LGVOP85tgk0E7a8",
- slot30: "price_1SELM0Dv9LGVOP85vvEWN8XA",
+ slot30: "price_1SPrq0Dv9LGVOP85TWi8As7L",
mutants: "price_1SELMXDv9LGVOP85iEACTDNB",
starter: "price_1SELMzDv9LGVOP851QbLAPv9",
supporter1: "price_1SELNPDv9LGVOP85AbSjJjsq",
@@ -483,9 +483,21 @@
"map-large": "price_1SELQZDv9LGVOP85GNbTyOHH"
};
- // Which SKUs count against the 12-unit capacity
- const CAPACITY_IDS = new Set(['server1', 'server2', 'server3']);
- const CAPACITY_TOTAL = 12;
+ // No capacity limits β all servers unlimited
+ // Unlimited servers: no capacity accounting at all
+ const SERVER_CAPACITY = {};
+ const CAPACITY_IDS = new Set(); // no IDs are capacity-limited
+ const CAPACITY_TOTAL = Infinity;
+
+ function capacityUsed() { return 0; }
+ function canAddServers() { return true; }
+
+ // isServer will always be false with an empty set, which is fine
+ const isServer = id => CAPACITY_IDS.has(id);
+
+
+
+
// ===== products (unchanged from your file) =====
const products = [
@@ -493,7 +505,7 @@
{ id: 'server2', name: 'Server Class 2', price: 50.00, category: 'servers', tag: 'Server monthly', img: 'img/PrivateServerCLASS02.png' },
{ id: 'server3', name: 'Server Class 3', price: 75.00, category: 'servers', tag: 'Server monthly', img: 'img/PrivateServerCLASS03.png' },
- { id: 'slot30', name: 'ASA Server Slot x30 days', price: 5.00, category: 'perks', tag: 'Server Perk monthly', img: 'img/ServerSlotX30.png' },
+ { id: 'slot30', name: 'ASA Server Slot x30 days', price: 2.50, category: 'perks', tag: 'Server Perk monthly', img: 'img/ServerSlotX30.png' },
{ id: 'mutants', name: 'Mutated Creatures', price: 1.50, category: 'bundles', tag: 'Dino Pack One Time Payment 10 non-breedable', img: 'img/MutatedCretures.png' },
{ id: 'starter', name: 'Starter Pack', price: 1.50, category: 'bundles', tag: 'Starter Pack One Time Payment', img: 'img/StarterPack.png' },
@@ -517,15 +529,11 @@
function loadCart() { try { return JSON.parse(localStorage.getItem('obli.cart') || '{}'); } catch { return {}; } }
function cartCount() { return Object.values(state.cart).reduce((a, b) => a + b, 0); }
function cartTotal() { return Object.entries(state.cart).reduce((s, [id, q]) => { const p = products.find(p => p.id === id); return s + (p ? p.price * q : 0) }, 0); }
- const isServer = id => CAPACITY_IDS.has(id);
- const serversInCart = () => Object.entries(state.cart).reduce((n, [id, qty]) => n + (CAPACITY_IDS.has(id) ? Number(qty || 0) : 0), 0);
- const canAddServers = (qty) => serversInCart() + qty <= CAPACITY_TOTAL;
+
function cardHtml(p) {
const inCart = state.cart[p.id] || 0;
- const capRow = isServer(p.id)
- ? `
Remaining: ${Math.max(0, CAPACITY_TOTAL - serversInCart())}/${CAPACITY_TOTAL}
`
- : `
Unlimited
`;
+ const capRow = `
Unlimited
`;
let infoBtn = '';
if (p.id === 'server1') infoBtn = `
`;
@@ -541,7 +549,9 @@
${p.category}
${capRow}
-
+
${infoBtn}
@@ -583,7 +593,8 @@
document.querySelectorAll('[data-rem-for]').forEach(el => {
const id = el.dataset.remFor;
if (isServer(id)) {
- const left = Math.max(0, CAPACITY_TOTAL - serversInCart());
+ const left = Math.max(0, CAPACITY_TOTAL - capacityUsed());
+
el.textContent = left;
const card = el.closest('[data-product]');
const btn = card?.querySelector(`[data-add="${id}"]`);
@@ -606,12 +617,16 @@
const dec = e.target.closest('[data-dec]');
if (add) {
const id = add.getAttribute('data-add');
- if (isServer(id) && !canAddServers(1)) return alert(`Sold out or limit reached. Remaining: ${Math.max(0, CAPACITY_TOTAL - serversInCart())}`);
+ if (isServer(id) && !canAddServers(1))
+ return alert(`Sold out or limit reached. Remaining: ${Math.max(0, CAPACITY_TOTAL - capacityUsed())}`);
+
state.cart[id] = (state.cart[id] || 0) + 1; saveCart(); render();
}
if (inc) {
const id = inc.getAttribute('data-inc');
- if (isServer(id) && !canAddServers(1)) return alert(`Sold out or limit reached. Remaining: ${Math.max(0, CAPACITY_TOTAL - serversInCart())}`);
+ if (isServer(id) && !canAddServers(1))
+ return alert(`Sold out or limit reached. Remaining: ${Math.max(0, CAPACITY_TOTAL - capacityUsed())}`);
+
state.cart[id] = (state.cart[id] || 0) + 1; saveCart(); updateCartUi();
}
if (dec) {
diff --git a/roadmap.html b/roadmap.html
index cb241ac..125fdd2 100644
--- a/roadmap.html
+++ b/roadmap.html
@@ -510,7 +510,7 @@