Hier ein Vorschlag, um das Spendenaufkommen etwas auf Trab zu bringen. Ich gehe auch auf die Implementationsseite ein um zu zeigen, dass es recht einfach umsetzbar ist, das ist beim Lesen leider etwas ermüdend.
Der typische Fall:
Auf einer Insel befinden sich 8 Giganten Stufe 20 und darüber, dazwischen aber auch 5 arme Schlucker Stufe 10 und darunter. Die Giganten wollen die Mine ausbauen und bitten auch die Kleinen etwas zu tun. Doch was können die leisten, was haben die davon? Die Minen sind auf Stufe 17, mehr als die Kleinen brauchen!
Natürlich reagieren die Großen verschnupft, da die Miesen Kleinen nix beisteuern. Aber für die Kleinen lohnt es sich nicht. Was die Großen in 1h abbauen, dafür brauchen die Kleinen 1 Tag, außerdem brauchen sie das Holz dringend um ihre Deff aufzubauen - die den Großen nicht einmal ein müdes Lächeln entlockt. Wenn die Kleinen später größer werden ist noch lange genug Zeit, beim Minenaufbau mitzuhelfen. Ergo, beide Seiten haben Recht und trotzdem herrscht Unzufriedenheit.
Außerdem gibt es welche, die regelmäßig spenden, oder andere die unregelmäßig, aber viel spenden. Die Statistik zeigt nur den Gesamtwert, nicht den Spendenverlauf. Aber wayn interessiert der Spendenverlauf? Außerdem wären das mal wieder irgendwelche mehr oder weniger unsinnigen historische Informationen in der Datenbank.
Mein Vorschlag ist nun, das Spenden auch für die interessanter zu gestalten, und eben nicht nur "noch einen neuen doofen Highscore" zu erschaffen, in dem jemand, der gerade anfängt, sowieso vorerst niemals auftauchen wird. Und wie geht das?
Zuerst einmal die bKronen/b:
Jeder, der die letzte Spende abgibt, also die, durch die die Mine ausgebaut wird, bekommt eine Krone. Die Anzahl der Kronen sieht man dann in der Spendenliste bei der Mine. Die Krone bringt einem nix, außer eben, eine Krone. Das ist so wie mit den Glitzerstreifen und Sternchen in der Grundschule, eigentlich für nix gut, macht aber was her.
Ist lediglich eine zusätzliche Spalte in der Datenbank, dort wo schon die Spendeninformation gesammelt wird, und gelegentlich ein Update, sollte also wirklich kein Problem darstellen.
Nachteil der Lösung: Wer spendet jetzt noch? Jeder würde hergehen, und so lange Holz horten, bis er diese letzte Spende abgeben kann. Also ganz schlechter Plan? Nein, das lässt sich reparieren.
Um das Spendenaufkommen anzuheizen gibt es die bHalbkronen/b. Halbkronen sind halbe Kronen. Es gibt eine linke und eine rechte Hälfte, wir haben schließlich zwei Minen auf jeder Insel.
Wie bekommt man die Halbkronen? Ganz einfach: Die zwei letzten Spender vor demjenigen, der die Krone bekommt, bekommen je eine Halbkrone. Haben sie zwei zusammenpassende Halbkronen, so werden diese zu einer ganzen Krone, und zwar auf bbeiden/b Minen. Zusätzlich bekommt noch der Spieler, der das meiste Holz gespendet hat, ebenfalls eine Halbkrone.
Mit anderen Worten: Pro Minenausbau fallen 4 Kronen an, eine für den Spieler, der die Mine ausbaut (1. Platz), und jeweils Halbkronen für die zwei letzten Spender vor dem Ausbauer (2. und 3. Platz) sowie dem, der am meisten gespendet hat (4. Platz). Die Halbkronen können zu vollen Kronen werden.
Das mit den Halbkronen ist etwas komplizierter zu implementieren, denn die Datenbank muss hier die Spender tracken. Prinzipiell aber reichen drei weitere Spalten. Die erste zählt die Halbkronen, die zweite trägt die Gesamtspendensumme in der Runde, und die dritte einen Zeitstempel der letzten Spende. Das geht ganz ohne Transaktionen oder Trigger.
Sinnvollerweise braucht man pro Mine auch noch ein Feld, das des letzten Spenders. Implementieren lässt sich das mit einem Trigger in der Datenbank.
Die Details beschreibe ich weiter unten. Wichtig ist jetzt nur folgendes kleines fieses Detail:
Es wird in der Mine nur der letzte Spender angezeigt, nicht aber der vorletzte. Sobald man also spendet erscheint der Name als "letzter Spender". Spendet jemand anderes, dann erscheint der. Bekommt man jetzt noch eine Halbkrone oder nicht? Tja, das wird nicht verraten! Also muss man, um diesen 2. Platz kämpfen, da man den 3. Platz nicht sieht. Der 4. Platz ist ja nur zur Wahrung der Fairness da, ich finde, der Hauptspender muss einfach ebenfalls bedacht werden.
Noch ist die Sache aber nicht ganz rund. Die Leute würden nur immer 1 Holz spenden, damit sie stetig der letzte Spender sind. Kleinvieh macht zwar auch Mist, aber datenbanktechnisch ist es doof, wenn die Leute dauernd in Mikroschritten snipen. Deshalb muss man diese ständigen Kleinstspenden verhindern.
Da kommt der bSpendendurchschnitt/b ins Spiel:
Bei jeder Spende wird ein Spendendurchschnitt errechnet, z. B. nach der Iterationsformel Durchschnitt:=(Durchschnitt*9+Spende)/10. Ich nenne die Formel mal 90%-Dämpfungsformel (d. h. der bisherige Durchschnitt geht zu 90% in die Rechnung ein). Dieser Spendendurchschnitt wird bei der Spende (gerundet!) angezeigt.
Liegt die Spende unter dem Durchschnitt (es ist übrigens mathematisch egal ob man vor oder nach der Neuberechnung des Durchschnitts die Bedingung prüft), dann zählt diese Spende nicht! Sie verdrängt also weder denjenigen auf dem 2. Platz noch den auf dem 3. Platz. Für den 1. Platz und 4. Platz wird sie aber gezählt. (Datenbanktechnisch bedeutet das, dass der Timestamp in diesem Fall nicht geupdatet wird, eine einfache WHERE-Klausel im Update-Befehl.)
Ein fieses Detail gibt es auch hier: Aufgrund der Rundung muss der Spieler, um sicher zu gehen dass seine Spende zählt, 1 Holz mehr spenden als dasteht.
So, das löst die Sache schon mal teilweise, aber noch nicht ganz. Was hindert den Spieler daran, 10 Mal hintereinander 1 Holz zu spenden um den Durchschnitt stark abzusenken?
Durch einen Trick löst sich auch das. In die Dämpfungsformel geht die Spende mit min(Spende,max(Durchschnitt, Gesamtspende_Des_Spielers)) ein (also statt dem wo vorher Spende stand), wobei letzteres das gesamte vom Spieler gespendete Holz in dieser Ausbaurunde ist. Sprich, wenn der Spieler 1 Holz spendet, dann geht stattdessen sein Gesamtspendenaufkommen in die Berechnung ein (man kann es ggf. dritteln oder so, aber das sind Details). Liegt dieses über dem Durchschnitt, dann verändert sich der Durchschnitt nicht mehr!
Das momentane Gesamtspendenaufkommen (bzw. die in den Durchschnitt eingehende Mindesspende, also dieses min(max())) des Spielers in der Runde kann ggf. ebenfalls anzeigen. Evtl. als Plus-Feature.
Das Verfahren gibt kleinen Spielern die Chance, doch beizutragen, indem sie zum richtigen Zeitpunkt einmal kurz über dem Durchschnitt spenden. Spieler die wenig Holz haben, können den Durchschnitt mit der richtigen Taktik auch einmal ordentlich dämpfen, um trotzdem eine Halbkrone zu ergattern. Aber das geht nur einmal, nämlich wenn der Spieler in die Bietrunde einsteigt, die Belastung der Datenbank wird so in Grenzen gehalten.
Seufz, hört sich total kompliziert an, ist es aber nur wegen all der technischen Details.
Aus Spielersicht reicht an sich zu wissen, wie das mit Platz 1 bis 4 ist. Die Details interessieren nur "Optimierer", also die Leute, die voll auf Halbkronen abfahren. Das sind dann aber weniger die Großen, sondern eher die Kleinen, denn die Großen kriegen oft Platz 1 und 4 sowieso.
So, und nun noch einige bDetails/b:
Steht hier nur, weil ich keine Zeit habe, die 50 Zeichen die dieser Text zu lang ist noch zu kürzen. Und wenn ich ihn nicht speichere geht er evtl. verloren.
- Wer alleine auf der Insel ist, also die Mine selber ausbaut, bekommt alle 4 Plätze. Ebenso, wenn man der alleinige Spender ist.
- Spenden, die aufgrund des Durchschnitts nicht zählen, fallen aus den Plätzen raus. Sprich, wenn einer 9999 spendet, dann einer 1 und dann ein dritter 3000 und die Mine wird ausgebaut, dann werden die Kronen nur auf 2 Leute verteilt, den ersten (2., 3. und 4. Platz) und dem dritten (1. Platz).
- Nur wie sich Platz 1 errechnet ist klar.
- Für Platz 2 und 3 werden die Timestamps sortiert (sicherheitshalber auch das Gesamtspendenaufkommen) und die ersten 2 bekommen die Halbkrone.
- Gibt es keinen Platz 3 bekommt Platz 2 noch eine Halbkrone.
- Gibt es weder Platz 2 noch 3 bekommt Platz 1 die 2 Halbkronen.
- Platz 4 bekommt der Meistbietende mit dem neuesten Timestamp. Ob die letzte Spende dabei eingeht oder nicht ist eine Detailfrage, die aber nicht unerheblich ist (ich bin ansich dafür, dass die letzte Spende, also die Platz 1 bekommt, nicht mitgezählt wird). Für Große ist es so leicht, Platz 1 und 4 zu bekommen. Platz 2 und 3 fällt dann aber ggf. an Kleinere. Ein Großer gegen einen Kleinen bedeutet für den Kleinen mindestens 1 Halbkrone. Die Großen haben also massiv Vorteile, aber die Kleinen wenigstens eine Chance auch etwas zu ergattern!
- Nach der Berechnung der Kronen werden die Zähler für die nächste Runde zurückgesetzt.
- Der Durchschnitt kann dabei verschieden initialisiert werden. Auch das ist eine nicht unwesentliche Detailfrage. Man kann den Durchschnitt z. B. auf 1% der Kosten von der nächsten Ausbaustufe setzen, oder auf 0, oder einfach da belassen wo er war. 0 hat einiges für sich, 1% aber ebenfalls, da der erste Spender nach einem Ausbau noch einen unverfälschten Durchschnitt bekommt (d. h. Ganz Kleine bekommen da zumindest einen Timesstamp weil sie es noch über den Durchschnitt schaffen).
- Auch eine Detailfrage ist, ob es einen Kronenhighscore geben muss. Klar, natürlich werden viele wieder nach so etwas gieren, ich sehe das aber eher als Mittel, um den Wettstreit um den Ausbau der Minen auf den jeweiligen Inseln anzuheizen.
- Man kann das Spendenaufkommen für die Berechnung auch durchaus durch die Stufe teilen, um die Kleinen zu bevorzugen. Somit entspricht 1 Holz auf Stufe 1 soviel wie 10 Holz auf Stufe 10 bzw. 20 Holz auf Stufe 20. Damit man nicht toll optimieren kann können ja die Stufen aller Städte des Spielers zusammengezählt werden. Aber egal, das sind nur mögliche Varianten.