Spenden: der Glanz wird nach RANG verteilt, nicht nach Betrag
Nachtrag zum Umbau von vorhin -- gefunden, als ich nach dem Ausliefern
in die echte Datenbank gesehen habe:
100 Danke 5
500 Starke Runde 15
2000 Starke Runde 45
5000 Rudel-Legende 0 <- die hoechste, und als Einzige aus
Die erste Nachruestung fuellte `glanz_minuten` nur dort, wo noch die
WERKSGRENZE steht (100/500/2000 Cent). Das war vorsichtig gemeint: Wer
seine Leiter umgebaut hat, soll nicht ploetzlich einen Glanz bekommen,
den er nie eingestellt hat. Auf dem echten Server war es die falsche
Vorsicht -- dort stehen vier Stufen, und die oberste bekam nichts.
Ein Glanz, der mit der Hoehe waechst und ausgerechnet bei der
hoechsten Stufe aufhoert, sieht nicht nach Vorsicht aus, sondern nach
einem Fehler.
Also nach RANG statt nach Betrag: unterste Stufe 5 Minuten, oberste
45, dazwischen verteilt und auf Fuenferschritte gerundet. Dieselbe
Idee wie bei den Muenzen -- nicht die Zahl abschreiben, sondern die
Reihenfolge lesen. Eine Leiter mit sechs Stufen rechnet damit genauso
richtig wie eine mit drei.
ES PASSIERT GENAU EINMAL und nur bei Stufen, die noch auf 0 stehen.
Wer spaeter bewusst eine Null einstellt, behaelt sie -- der Merker ist
dann laengst gesetzt.
Geprueft an einer frischen Datenbank mit genau dieser Leiter (vier
Stufen, oberste bei 5000): 5 / 20 / 30 / 45. Und mit Gegenprobe, dass
eine bewusst gesetzte Null stehen bleibt -- ohne sie bewiese der Lauf
nur, dass irgendetwas gefuellt wird.
pruef-spenden 215 -> 218 (0 Fehler), pruef-reaktion 478 (0).
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -390,6 +390,11 @@ export const GLANZ_MAX_MINUTEN = 180;
|
||||
einen Wert, den jemand verschieben kann. Was zu einer Stufe
|
||||
gehört, steht an der Stufe. */
|
||||
|
||||
/** Unter welchem Namen steht, dass der Glanz einmal an die ganze
|
||||
* Leiter verteilt wurde. Die Begründung steht bei der Verteilung
|
||||
* selbst. */
|
||||
export const GLANZ_VERTEILT = "spenden_glanz_verteilt";
|
||||
|
||||
/** Wo die Spendenkarte im Bild steht. */
|
||||
export const PLATZ_NAME = "spenden_platz";
|
||||
export const PLAETZE = ["mitte", "rand"];
|
||||
@@ -627,4 +632,67 @@ export function spendenTabellen(d) {
|
||||
console.error("[spenden] Muenzen verteilen:", fehler?.message);
|
||||
}
|
||||
|
||||
/* ==== DEN GLANZ EINMAL AN DIE GANZE LEITER VERTEILEN ===========
|
||||
(08.10.2026, noch am selben Abend nachgetragen)
|
||||
|
||||
Die Nachruestung darueber fuellt `glanz_minuten` nur dort, wo
|
||||
noch die WERKSGRENZE steht (100, 500, 2000 Cent). Das war
|
||||
vorsichtig gemeint: Wer seine Leiter umgebaut hat, soll nicht
|
||||
ploetzlich einen Glanz bekommen, den er nie eingestellt hat.
|
||||
|
||||
AUF DEM ECHTEN SERVER WAR DAS DIE FALSCHE VORSICHT. Dort stehen
|
||||
vier Stufen, und die OBERSTE liegt bei 5000 Cent -- sie bekam
|
||||
also nichts, waehrend eine mittlere 45 Minuten bekam. Gemessen
|
||||
nach dem Ausliefern:
|
||||
|
||||
100 Danke 5
|
||||
500 Starke Runde 15
|
||||
2000 Starke Runde 45
|
||||
5000 Rudel-Legende 0 <- die hoechste, und als Einzige aus
|
||||
|
||||
Ein Glanz, der mit der Hoehe waechst und bei der hoechsten
|
||||
Stufe aufhoert, sieht nicht nach Vorsicht aus, sondern nach
|
||||
einem Fehler.
|
||||
|
||||
ALSO NACH RANG STATT NACH BETRAG. Die unterste Stufe bekommt 5
|
||||
Minuten, die oberste 45, dazwischen wird verteilt und auf
|
||||
Fuenferschritte gerundet. Das ist dieselbe Idee wie bei den
|
||||
Muenzen: nicht die Zahl abschreiben, sondern die REIHENFOLGE
|
||||
lesen -- eine Leiter mit sechs Stufen rechnet damit genauso
|
||||
richtig wie eine mit drei.
|
||||
|
||||
ES PASSIERT GENAU EINMAL, und nur bei Stufen, die noch auf 0
|
||||
stehen. Wer spaeter bewusst eine Null einstellt, behaelt sie:
|
||||
Der Merker ist dann laengst gesetzt. Eine Einstellung, die sich
|
||||
gegen den Benutzer durchsetzt, wird abgeschafft -- und dann ist
|
||||
auch die gute Absicht dahinter weg. */
|
||||
try {
|
||||
const schon = d.prepare("SELECT wert FROM einstellungen WHERE schluessel = ?")
|
||||
.get(GLANZ_VERTEILT);
|
||||
if (!schon) {
|
||||
const leiter = d.prepare("SELECT id, glanz_minuten FROM spenden_stufen"
|
||||
+ " ORDER BY ab_cent").all();
|
||||
const n = leiter.length;
|
||||
let gesetzt = 0;
|
||||
if (n > 0) {
|
||||
const setz = d.prepare("UPDATE spenden_stufen SET glanz_minuten = ? WHERE id = ?");
|
||||
leiter.forEach((s, i) => {
|
||||
if (Number(s.glanz_minuten) > 0) return;
|
||||
/* Bei genau einer Stufe gibt es kein Oben und Unten --
|
||||
dann die Mitte. */
|
||||
const roh = n === 1 ? 15 : 5 + ((45 - 5) * i) / (n - 1);
|
||||
setz.run(Math.round(roh / 5) * 5, s.id);
|
||||
gesetzt += 1;
|
||||
});
|
||||
}
|
||||
d.prepare(`INSERT OR REPLACE INTO einstellungen (schluessel, wert, geaendert)
|
||||
VALUES (?,?,?)`).run(GLANZ_VERTEILT, "ja", new Date().toISOString());
|
||||
if (gesetzt) console.log(`[spenden] Glanz an ${gesetzt} Stufen verteilt.`);
|
||||
}
|
||||
} catch (fehler) {
|
||||
/* Ein fehlender Glanz ist ein Schoenheitsfehler, kein Grund, den
|
||||
Start abzubrechen. */
|
||||
console.error("[spenden] Glanz verteilen:", fehler?.message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user