Laserian hat geschrieben:
Drazaar das Problem hab ich auch, und ich glaube ich weiß an was es liegt, aber nicht wie es zu beheben ist
$comment->ChangeDefaultColors($session['user']['prefs']['commenttalkcolor'], $session['user']['prefs']['commentemotecolor'], $session['user']['prefs']['commentemotecolor']);
ich schätze, dass du in der function viewcommentary in etwa so etwas stehen hast und das ist dafür verantwortlich, dass posts anderer spieler in deinen eigenen Farben angezeigt werden
Ich hab von oop aber nicht wirklich viel ahnung und weiß deshalb nicht ob ein ändern auf $row da was ändert und wenn obs auch funktioniert damit aber es müssten bei der funktion die standardfarben des postverfassers angegeben werden und nicht die des users der sie sich ansieht
Falls du damit mehr anfangen kannst und das entsprechend ändern kannst wär ich froh wenn du die Lösung hier posten könntest
Mfg
Laserian
Ja, das sehe ich auch so, aber warum funktionieren dann die die restlichen Emotes? Eigentlich müsste ich doch dann auch bei : und /X falsche Farben sehen, bzw. meine eigenen Standardfarben?
Ich peil den Sinn dieser Funktion eigentlich nicht, denn alles was sie tut ist die in der prefs hinterlegten Standardfarben in drei Variablen abzuspeichern. WArum nicht gleich $this->user['prefs']['commentemotecolor'] benutzen, statt $this->coloremote? Weil kürzer?^^
Andererseits, wo ist der doofe Schritt, der die richtigen Farben bei den restlichen Emotes herholt, denn eigentlich wird ja alles richtig angezeigt, außer bei $emote = 0.
Der Fehler ist eigentlich ganz einfach zu beheben. In der Funktion processComment wird $row mitgeliefert. Man sollte sichergehen, dass auch die prefs in der accounts ausgelesen wird und sich somit in $row befindet. Also entweder in der Funktion fetch() hinzufügen oder in der Funktion GuildPrefixes(), wenn man denn ein Gildensystem nutzt.
Dann noch den Code hier rein
ersetze:
$this->bbcode_second_pass_code('', '
case 0: {
$post = $this->playernamecolor.substr($row['name'], 0, -2).$this->coloremote." sagt: «".$this->colorspeak.trim($this->nl2paragraph($row['comment'])).$this->coloremote."»`0".endl;
')
durch
$this->bbcode_second_pass_code('', 'case 0: {
$prefs = unserialize($row['prefs']);
$color_speak = $prefs['commenttalkcolor'];
if($color_speak == '')
$color_speak = '`#';
$color_emote = $prefs['commentemotecolor'];
if($color_emote == '')
$color_emote = '`3';
$post = $this->playernamecolor.substr($row['name'], 0, -2).$color_emote." sagt: «".$color_speak.trim($this->nl2paragraph($row['comment'])).$this->coloremote."»`0".endl;
')
Die Sache ist nur, dass das halt den Fehler übertüncht. Ich würde ihn aber gerne verstehen...
Auch wenn das etwas alt ist. Falls ich einen Post dazu überlesen haben sollte der das erklärt. Ich habe eine Theorie. Kann es aber zur Zeit nicht testen, da ich das logd gerade für private Zwecke wieder aufbaue und es noch nicht läuft. Ich aber gerade dabei bin alles zu installieren was ich will bin ich hier drüber gestolpert
Die Standardfarbe für die direkte Rede (emote = 0) wird NICHT mit in die Datenbank übergeben. Sobald du ein Emote nutzt (emote > 0) wird in der public function Add() die Funktion interpretQuotationMarks($commentary) aufgerufen. Diese fügt die Farbcodes dem Kommentar selbst hinzu und dadurch werden diese in der Datenbank selbst gespeichert. Man kann es so lösen wie du es getan hast.. Was aber vermutlich auch hilft ist
$this->bbcode_second_pass_code('', '# Anführungszeichen interpretieren, sofern nicht direkte Rede
$commentary = $this->colorspeak . $commentary;
sollte das auch schon helfen. Denn jetzt wird an den Anfang des Kommentars der Farbcode der Sprache eingefügt und dieser wird dann auch in der Datenbank gespeichert. (wie oben erwähnt ist ungetestet, da es lokal noch nicht läuft und falls ich eine Antwort überlesen habe die das erklärt und meine sogar total falsch ist. Sorry)
Edit: Gegeben den Umständen, dass man vorher über die ChangeDefaultColor() die entsprechenden Farben anpasst aus den prefs falls du die dort für die User zwischenspeicherst