Weblog

8. November 2006: Lokalisierung: EqDKP-Raid Progression

So ein DKP-System ist schon was feines: Je nachdem an wievielen Raids man teilgenommen hat, hat man auch bessere/schlechtere Chancen an ein begehrtes Item zu gelangen. Die Implementation beim Kreis der Macht ist, nicht zuletzt durch einen sehr vernarrten Gildenleiter, auch entsprechend aufgebohrt – schließlich ist es die Statistik-Seite Nummer Eins der Gilde.

Eine der neuesten Erweiterungen, die eingebunden werden sollte, war das PlugIn Raid Progression zur Verfolgung des Fortschritts in Instanzen. Leider Gottes kam es jedoch nicht mit unserer Art des Eintragens von Raids zurecht. Ein Problem, das scheinbar auch andere Leute haben:

looks nice.
is there a change to modify the plugin, so ite can handel with other Raidnotes like this http://www.seniorenraid.de/set/listraids.php

Nun, die Lösung soll niemandem vorbehalten bleiben:

PHP:
// Extension start

if(empty($row['raid_note']))   continue;

$elements = explode(" ", str_replace(", ", " ", $row['raid_note']));
foreach($elements as $killed_mob)
   foreach($instance as $event => $mobs)
      foreach($mobs as $mob => $count)
         if(@strstr($mob, $killed_mob))
            $instance[$event][$mob] = $row['raid_id'] . ':' . $row['event_id'];

/* Old code
   if ( in_array_multi_key($row['raid_note'], $instance) )
   {

      $instance[$row['raid_name']][$row['raid_note']] = $row['raid_id'] . ':' . $row['event_id'];
   }
*/

// Extension end

Einzubauen ist das ganze in die Datei /dkp/plugins/rp/index.php. Die Stelle sollte sich dem geneigten Leser aus dem auskommentierten Code von selbst erschließen.

7. November 2006: Serialisierte Instanzen

Abwärtskompatibilität ist eine tolle Sache. Sie verspricht, dass man die Entwicklungen auf der momentanen Version auch in Zukunft noch nutzen kann und dadurch nicht laufend mit der Wartung seiner alten Programme beschäftigt ist.

Was ich jedoch gestern erfahren musste, hat immer noch einen faden Beigeschmack. Es ging darum, dass eine Webseite mit komplexen adhoc-Berechnungen die zugrunde liegenden Instanzen eines Objektes in einer Datenbank-Tabelle zwischenspeichern sollte. Nichts leichter als das:

$so = serialize($o);

Das Zurückholen in den Applikationskontext zu einem späteren Zeitpunkt ging ebenso leicht:

$o = unserialize($so);

In meiner Test-Umgebung (PHP 4.3.3) hat das alles wunderbar funktioniert. Toll, dachte ich, dass das so einfach geht. Doch zu früh gefreut. In der Produktiv-Umgebung (PHP 4.4.4) fehlten den so wieder ins Leben zurück gerufenen Instanzen auf einmal die Methoden, was neben unschönen Fehlermeldungen auch zu einem Ausfall der Anwendung geführt hat. Laut PHP-Dokumentation soll man, um genau dies zu vermeiden, eine kleine Korrektur vornehmen:

$so = unserialize(implode("", $so));

Leider führte auch das nicht zum gewünschten Ergebnis. Blieb also nur der Biss in den sauren Apfel und ein entsprechend ausschweifender Work-Around (die Daten werden jetzt in einer eigenen Cache-Tabelle zwischengespeichert).