hermanronk / clickfarm Goto Github PK
View Code? Open in Web Editor NEWClickfarm webgame
License: MIT License
Clickfarm webgame
License: MIT License
Situatie: 1100 kernreactoren. Elke seconde wordt er 100 bij mijn waste pellets opgeteld, en 1 bij mijn waste staven. Het lijkt er op dat er per tick maar 1 staaf van de waste pallets naar de afvalopslag verplaatst kan worden.
Zoals omschreven op https://gathering.tweakers.net/forum/list_message/55892211#55892211 verspringen de aantallen in de bovenbalk en daarmee dus ook de opmaak.
Die balk met waardes zou sowieso wel even opnieuw bekeken kunnen worden en eventueel worden aangevuld met de missende waardes. Hier is dan wel wat extra logica nodig voor het bepalen welke grondstoffen er in opgenomen moeten worden.
Er moet een controle worden opgenomen om te kijken of er wel pasta is om te verkopen..
De voorraadweergave van pasta klopt niet (wordt niet bijgewerkt bij verkoop)
Bron: https://gathering.tweakers.net/forum/list_message/55307227#55307227
"Sinds ik oliepomp v2 kan kopen maar nog niet heb gedaan is mijn olieverbruik van 161 naar 1630 gegaan, net zo hoog als mijn energie. Hoe komt dat?"
Zelf zie ik dat ook. 250 standaard energiecentrales brengen mijn olieverbruik naar 2500 in plaats van 250.
Line 4018 in bee1d7e
Volgens mij zorgt die lijn ervoor dat je elke seconden een request maakt naar "https://clickfarm.nl/back/resources.php" .. denk dat dat niet te bedoeling is.
Als je idd. AJAX achtige calls gaat maken met JavaScript, moet je er goed op letten dat je er niet overmatig & onnodig gebruik van maakt. Is ook helemaal niet nodig om deze call te maken als de gebruiker nog niet eens level 12 is en de market-row nog niet zichtbaar is.
Voor olie, bloem, en pasta wordt de prijs waarbij automatisch verkocht word wel onthouden tijdens een reload, voor kunststof niet.
Situatie:
10.000 kunststoffabrieken
5.000 kunststofhelpers
Na een refresh is de "Maak kunststof" knop greyed-out. Een kunststofhelper aannemen en ontslaan (of in omgekeerde volgorde) lost dit probleem op tot de volgende reload.
Aangezien de code voor kunststof gekopieerd is van pasta, is dit dezelfde bug. Dit heeft te maken met de verkooproutine die alleen opties kent voor handmatige verkoop, en overschot verkoop. De code voor handmatige verkoop wordt aangeroepen bij een automatische verkoop.
Op het moment er een pop up melding is blijft deze staan. Mogelijk om dit max 5 seconde te laten staan en dan te verdwijnen.
https://gathering.tweakers.net/forum/list_message/55867017#55867017
Er lijkt sinds de nieuwe level verwerking wat verkeerd te gaan. Bijvoorbeeld steenkool en de opmaak van het kernenergie blok werken niet meer naar behoren. @Marcade80 zie je kans om hier even naar te kijken? Dit heeft dus vermoedelijk te maken met #1
Zowel de farms als de farmrobot gebruiken nu nog eigen timers,
Het zou netter zijn om dit onder te brengen in de centrale timer. Dit voorkomt timing issue's
Het betreft onder andere deze code:
work: function () {
if (objFarmRobot.amount == 0) {
return 0;
};
var tempEnergy = +objEnergy.available;
objFarmRobot.activeRobots = Math.floor(+tempEnergy / +objFarmRobot.robotEnergy);
if (+objFarmRobot.activeRobots > +objFarmRobot.robots) {
objFarmRobot.activeRobots = +objFarmRobot.robots;
};
var robotEnergyUsage = +objFarmRobot.activeRobots * +objFarmRobot.robotEnergy;
objEnergy.use(+robotEnergyUsage, "Farmrobot");
if ((+objFarmRobot.activeRobots * +objFarmRobot.robotCap) > +objFarmland.amount) {
var activeFields = +objFarmland.amount;
} else {
var activeFields = +objFarmRobot.activeRobots * +objFarmRobot.robotCap;
}
var robotLoop = setInterval(
function () {
objFarmRobot.robotTimer--;
objFarmRobot.timerCountdown();
if (objFarmRobot.robotTimer < 1) {
clearInterval(robotLoop);
//nog rekening houden met max aan de hand van aanwezige velden.
var production = (+activeFields * +objFarmland.harvest);
objGrainSilo.fill(production);
objGrainSilo.show();
objFarmRobot.robotTimer = 10;
objFarmRobot.work();
}
}, 1000)
},
Momenteel wordt er middels een switch statement bepaald welke blokken er wel en niet zichtbaar zijn. Hiervoor worden naast het swtich statement een paar functies gebruikt, maar dat kan efficiënter gemaakt worden zodat het eenvoudiger wordt om toekomstige uitbreidingen te vereenvoudigen.
Het betreft (onder andere) deze code:
// Player object
var objPlayerInfo = {
level: localStorage.getItem('PlayerLevel') || 1,
nextlevel: 3000,
show: function () {
document.getElementById('currentlevel').innerHTML = "Huidig level is: " + objPlayerInfo.level;
document.getElementById('nextlevel').innerHTML = "Drempel voor volgend level: " + FixMoney(objPlayerInfo.nextlevel);
},
proceslevel: function (reason) {
var c = "none";
var d = "";
if (+objPlayerInfo.level == 1) {
if (reason == "levelup") {
objPlayerInfo.nextlevel = +objPlayerInfo.nextlevel * 5;
}
objPlayerInfo.levelFunction(d, c, c, c, c, c, c, c, c, c, c);
}
if (+objPlayerInfo.level == 2) {
if (reason == "levelup") {
objPlayerInfo.nextlevel = +objPlayerInfo.nextlevel * 5;
}
objPlayerInfo.levelFunction(d, d, c, c, c, c, c, c, c, c, c);
}
if (+objPlayerInfo.level == 3) {
if (reason == "levelup") {
objPlayerInfo.nextlevel = +objPlayerInfo.nextlevel * 5;
}
objPlayerInfo.levelFunction(d, d, d, c, c, c, c, c, c, c, c);
}
if (+objPlayerInfo.level == 4) {
if (reason == "levelup") {
objPlayerInfo.nextlevel = +objPlayerInfo.nextlevel * 5;
}
objPlayerInfo.levelFunction(d, d, d, d, c, c, c, c, c, c, c);
}
if (+objPlayerInfo.level == 5) {
if (reason == "levelup") {
objPlayerInfo.nextlevel = +objPlayerInfo.nextlevel * 4;
}
objPlayerInfo.levelFunction(d, d, d, d, d, c, c, c, c, c, c);
}
if (+objPlayerInfo.level == 6) {
if (reason == "levelup") {
objPlayerInfo.nextlevel = +objPlayerInfo.nextlevel * 3;
}
objPlayerInfo.levelFunction(d, d, d, d, d, d, d, c, c, c, c);
}
if (+objPlayerInfo.level == 7) {
if (reason == "levelup") {
objPlayerInfo.nextlevel = +objPlayerInfo.nextlevel * 4;
}
objPlayerInfo.levelFunction(d, d, d, d, d, d, d, d, c, c, c);
}
if (+objPlayerInfo.level == 8) {
if (reason == "levelup") {
objPlayerInfo.nextlevel = +objPlayerInfo.nextlevel * 5;
}
objPlayerInfo.levelFunction(d, d, d, d, d, d, d, d, d, c, c);
objResearch.show();
}
if (+objPlayerInfo.level == 9) {
if (reason == "levelup") {
objPlayerInfo.nextlevel = +objPlayerInfo.nextlevel * 5;
}
objPlayerInfo.levelFunction(d, d, d, d, d, d, d, d, d, c, c);
objResearch.show();
}
if (+objPlayerInfo.level == 10) {
if (reason == "levelup") {
objPlayerInfo.nextlevel = +objPlayerInfo.nextlevel * 5;
}
objPlayerInfo.levelFunction(d, d, d, d, d, d, d, d, d, d, c);
objResearch.show();
}
if (+objPlayerInfo.level > 10) {
if (reason == "levelup") {
objPlayerInfo.nextlevel = +objPlayerInfo.nextlevel * 5;
}
objPlayerInfo.levelFunction(d, d, d, d, d, d, d, d, d, d, d);
objResearch.show();
}
localStorage.setItem('NextLevel', objPlayerInfo.nextlevel);
},
levelup: function () {
if (+objMoney.amount > +objPlayerInfo.nextlevel) {
+objPlayerInfo.level++;
localStorage.setItem('PlayerLevel', objPlayerInfo.level);
objPlayerInfo.proceslevel("levelup");
notificationOverlay("Levelup! je bent nu level: " + objPlayerInfo.level, "Level", "fa-arrow-circle-up");
}
objPlayerInfo.show();
},
levelFunction: function (a, b, c, d, e, f, g, h, i, j, k) {
document.getElementById("landbouw-col").style.display = a;
document.getElementById("grain-col").style.display = a;
document.getElementById("flour-col").style.display = b;
document.getElementById("windmills").style.display = b;
document.getElementById("Flourstock").style.display = b;
document.getElementById("graanopbrengst-col").style.display = c;
document.getElementById("olie-col").style.display = c;
document.getElementById("Oilstock").style.display = c;
// /document.getElementById("research-menu").style.display = d;
document.getElementById("pomp-col").style.display = d;
document.getElementById("energieproductie-col").style.display = d;
document.getElementById("EnergyStatsLevel").style.disabled = d;
document.getElementById("energy-col").style.display = d;
document.getElementById("farmland-automation").style.display = e;
document.getElementById("WindmillController").style.display = f;
document.getElementById("chicken-col").style.display = g;
document.getElementById("pasta-col").style.display = h;
document.getElementById("AutoSell-col").style.display = h;
document.getElementById("plastic-row").style.display = g
document.getElementById("MiningResearch-col").style.display = i;
document.getElementById("mijnbouw-row").style.display = i;
document.getElementById("mijnen-row").style.display = i;
document.getElementById("mijnen-row2").style.display = i;
document.getElementById("Uranium-col").style.display = j;
document.getElementById("nuclearFuel-row").style.display = k;
},
init: function () {
objPlayerInfo.level = localStorage.getItem('PlayerLevel') || 1;
objPlayerInfo.nextlevel = localStorage.getItem('NextLevel') || 3000;
objPlayerInfo.proceslevel("init");
objPlayerInfo.show();
}
};
Browsers houden ervan om web bestanden lokaal op te slaan en alleen te verversen als ze nieuw zijn. Specifiek de CSS/JavaScript files. Dat kan nog wel is vreemd gedrag opleveren bij mensen.
Een mogelijke oplossing is om de index.html -> index.php te veranderen, zodat we PHP kunnen gebruiken en een 'modified' timestamp achter elke CSS/Javascript kunnen plaatsen. Doordat er een timestamp toegevoegd word; word het bestand lokaal ververst door web browsers als de timestamp niet matched met het lokaal opgeslagen bestand. Klinkt ingewikkelder dan het eigenlijk is.
Voorbeeld in index.html (wat PHP word):
<link rel="stylesheet" href="./css/style.css">
naar
<link rel="stylesheet" href="./css/style.css?<?php echo filemtime('./css/style.css')?>">
Wat door PHP vertaald word naar:
<link rel="stylesheet" href="./css/style.css?1531493874">
PHP functie filemtime() geeft de 'last modified' tijd/datum van het bestand terug in epoch seconden. Dus zodra iemand het bestand update; verandert het nummer automatisch en weet je zeker dat pagina bezoekers het laatste bestand zullen downloaden.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.