anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Do 28 Mär, 2024 12:32

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Doppelte + Einfache Farbcodes
BeitragVerfasst: Mo 15 Nov, 2010 08:14 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 01 Sep, 2008 10:29
Beiträge: 118
Wohnort: Niedersachsen
Geschlecht: Männlich
LoGD: https://www.sotbd.de/about.php?op=source
Guten Morgen ^^

Wir stehen gerade vor einem kleinen Problem. Undzwar möchten wir unsere Farben gerne um ein "paar" aufstocken 100-200 was am Ende vielleicht was um die 250 Farben ergeben würde. Nun haben wir aber so ziemlich alle Sonderzeichen verbastelt die uns eingefallen sind und die die Datenbank geschluckt hat ... (benutzen den Mod für die Farben aus der DB von Eliwood)

Gäbe es eine Möglichkeit Farbcodes mit doppelten Zeichen einzubauen z.B. `?? ohne das die einfachen `? dabei beeinflusst werden würden ? Wir wollen unsere alten Farben eben gerne behalten und nur um die neuen erweitern und haben entsprechend auch nicht Lust alle Farbcodes abzuändern ^^

Ich hoffe es ist verständlich was ich meine. Es soll also einen Unterschied machen ob ich nun einen einfachen oder soppelten Farbcode habe. Nur wie sag ich dem System das es beides paralell geben soll und sich nicht noch zu den einfachen Farbcodes das Zeichen dahinter sucht ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Mo 15 Nov, 2010 08:30 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Vielleicht wäre ja das was für dich:
viewtopic.php?f=43&t=4877&hilit=Farben+Farbsystem
"Doppelte Farbtags" wäre mühsam, da man nicht unterscheiden kann, ob man nun beim zweiten Buchstaben den ersten Buchstaben eines Wortes meint oder den zweiten des Farbtags.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Mo 15 Nov, 2010 22:35 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 01 Sep, 2008 10:29
Beiträge: 118
Wohnort: Niedersachsen
Geschlecht: Männlich
LoGD: https://www.sotbd.de/about.php?op=source
Wäre es "nur" mühsam oder würde dir eine Lösung dafür einfallen ?
Das das System dann nicht unterscheiden kann ob der Farbcode noch weitergeht oder das folgende Zeichen nur eingefärbt werden soll ist mir auch klar ...

Das von dir angesprochene System klingt durchaus interessant wäre aber leider mit einem Komplettumbau verbunden, den wir ja eigentlich scheuen xD


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Di 16 Nov, 2010 08:18 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Nicht unbedingt - es ist durchaus vorstellbar, eine Funktion zu schreiben, die gewöhnliche Farbtags einfach umschreibt ;)

Zum Problem mit den doppelten Farbtags: Es gibt zwei Lösungen plus eine dritte, für die aber der programmtechnische Aufwand viel zu hoch ist. Lösung 1: Jeden zweiten Buchstaben, solange kein Leerzeichen, als dem Farbtag zugehörig interpretieren (`5machen hat also den Farbtag `5m, `5 machen aber den `5). Lösung 2: Jeden zweiten Buchstaben als nicht dem Farbtag zugehörig interpretieren, wenn nach dem zweiten Zeichen kein Leerzeichen kommt (`5machen hat den Farbtag `5, `5m machen hat den Farbtag `5m).
Die Lösung 2 hat am wenigsten Überschneidungen, aber gibt Probleme innerhalb vom Strings, die innerhalb des Wortes einen Farbwechsel haben sollen. Lösung 1 gibt für 1-Tag-Tags Probleme, Lösung 2 für 2-Tag-Tags...

Als einzige Lösung für das Problem, die es umschiffen kann, wäre die Interpretation der zweiten Stelle, wenn sie 0 ist, als Pseudo-Eintag-Tag, damit wäre Lösung 1 am besten: Für `5m heisst es `5mmachen, für `5 heisst es `50machen. Probleme gibts dann aber trotzdem noch mit alten Texten.

Wie du siehst, gibt alles Probleme ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Di 16 Nov, 2010 09:33 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 12 Mai, 2008 21:51
Beiträge: 137
Geschlecht: Weiblich
*hat geschafft* machbar ist es also, sage aber gleich, dass es ne heiden Arbeit wird, und manche Sachen dadurch nicht mehr funktionieren könnten!
Meine Jägerhütte mag z.b. nicht mehr mit den Farbcodes funzen.. aber naja. die wurde ohnehin ausgebaut ^^
Titel färben geht bei mir wo anders, wo die User auch ihren Namen gleich mit ändern können... *baut sich nen RP-Server da ist ihr das egal*
Habe aber Chatvorschau und alles andre hinbekommen
klappt im übrigen besser, wenn man gewisse Tags (bei mir z.B. * + und #) als Vorzeichen für zweistellige Farbcodes nimmt und diese dann aus der Liste der einstelligen entfernt (Ist auch DAU freundlicher)

Wenn du willst können wir uns per PM zusammensetzen. Werde das Ding hier nicht veröffentlichen, weil a) zu viel Arbeit drinnen steckt
und b) es durch solche Dinge eben nicht mit dem normalen Logd kompatibel wäre.. das müsste man dann halt gemeinsam lösen
*hat keine Lust sich von zisch Leuten anhören zu müssen, warum nun dieses und jenes nicht funktioniert, nur weil sie das Zeuch veröffentlicht hat*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Di 16 Nov, 2010 10:25 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Oder ganz einfach "`" als Vorzeichen für einstellige Tags verwenden, und "#" oder "~" oder irgend etwas anderes als Vorzeichen für zweistellige Tags?

Dadurch könnte man zumindest die Kompatibilität zum bisherigen System gewährleisten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Di 16 Nov, 2010 15:52 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
Du kannst die Appoencode Funktion auch ganz einfach (und ja, dass ist wirklich einfach) abändern. Hatte auch das Problem, dass ich zu viele Farben, allerdings zu wenig Zeichen hatte. Höhö. Letztendlich konnte ich später so viele Zeichen wie ich wollte für eine Farbe eintragen.

$this->bbcode_second_pass_code('', '[@] = Grün
[EinfachGanzVieleZeichenFürGelb] = Gelb.')

Ich schau mal ob ich die veränderte Funktion noch mal finde, da ich nicht weiß ob ich die auch die externe Festplatte kopiert habe. Sofern ich sie finde, schick ich sie Dir per PN. Notfalls kann ich dir die Funktion auch noch mal schreiben.

Wenn Du aber nicht sooo lange warten willst: Du musst genau genommen nur gucken wie sich die While-Abfrage aufbaut und daran ein paar Dinge verändern.

Viel Glück.

_________________
Never change a running system. Bullshit! ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Di 16 Nov, 2010 16:58 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
Da auf der Festplatte nicht mehr gefunden, eben noch mal. Es ist [!!!] generell nur die Appoencode-Funktion. Verändert, damit mehrere Tags zugänglich sind. Funktioniert so auch , würde diese Funktion trotzdem nur als 2. Funktion nutzen und nicht als Hauptfunktion. Wieso? Habe nur eben die Abfrage verändert, damit er mehrere Tags erkennt. Alles weitere müsstest Du selbst ändern. (Chat usw.)

$this->bbcode_second_pass_code('', 'function getColor($data) {

while( !(($x=strpos($data,"[")) === false) && !(($y=strpos($data,']')) === false)){

$countTags = $y-$x;
$tag=substr($data,$x+1,$countTags-1);
$append=substr($data,0,$x);
$output.=($priv?$append:HTMLEntities($append));
$data=substr($data,$x+$countTags+1);

switch($tag){
case "0":
if ($nestedtags[font]) $output.="</span>";
unset($nestedtags[font]);
break;
case "1":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colDkBlue'>";
break;
case "2":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colDkGreen'>";
break;
case "3":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colDkCyan'>";
break;
case "4":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colDkRed'>";
break;
case "5":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colDkMagenta'>";
break;
case "6":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colDkYellow'>";
break;
case "7":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colDkWhite'>";
break;
case "8":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colLime'>";
break;
case "9":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colBlue'>";
break;
case "!":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colLtBlue'>";
break;
case "@":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colLtGreen'>";
break;
case "#":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colLtCyan'>";
break;
case "$":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colLtRed'>";
break;
case "%":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colLtMagenta'>";
break;
case "^":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colLtYellow'>";
break;
case "&":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colLtWhite'>";
break;
case ")":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colLtBlack'>";
break;
case "~":
if (($session[user][dragonkills]>=5)||($session[user][superuser]>=2)){
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colBlack'>";
}
break;
case "Q":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colDkOrange'>";
break;
case "q":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colOrange'>";
break;
case "r":
case "R":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colRose'>";
break;
case "V":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colBlueViolet'>";
break;
case "v":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='coliceviolet'>";
break;
case "g":
case "G":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colXLtGreen'>";
break;
case "T":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colDkBrown'>";
break;
case "t":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colLtBrown'>";
break;
case "?":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colWhiteBlack'>";
break;
case "*":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colBack'>";
break;
case "A":
case "a":
if ($nestedtags[font]) $output.="</span>"; else $nestedtags[font]=true;
$output.="<span class='colAttention'>";
break;
case "c":
if ($nestedtags[div]) {
$output.="</div>";
unset($nestedtags[div]);
}else{
$nestedtags[div]=true;
$output.="<div align='center'>";
}
break;
case "H":
if ($nestedtags[div]) {
$output.="</span>";
unset($nestedtags[div]);
}else{
$nestedtags[div]=true;
$output.="<span class='navhi'>";
}
break;
case "b":
if ($nestedtags[b]){
$output.="</b>";
unset($nestedtags[b]);
}else{
$nestedtags[b]=true;
$output.="<b>";
}
break;
case "i":
if ($nestedtags[i]) {
$output.="</i>";
unset($nestedtags[i]);
}else{
$nestedtags[i]=true;
$output.="<i>";
}
break;
case "n":
$output.="<br>\n";
break;
case "w":
$output.=$session[user][weapon];
break;
case "`":
$output.="`";
break;
default:
$output.="[".$tag.']';
}
}
if ($priv){
$output.=$data;
}else{
$output.=HTMLEntities($data);
}
return $output;
}')

_________________
Never change a running system. Bullshit! ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Fr 19 Nov, 2010 20:49 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 01 Sep, 2008 10:29
Beiträge: 118
Wohnort: Niedersachsen
Geschlecht: Männlich
LoGD: https://www.sotbd.de/about.php?op=source
Danke schonmal für die hilfreichen Antworten. Werd das mal die Tage ausprobieren :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Sa 12 Feb, 2011 17:11 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 01 Sep, 2008 10:29
Beiträge: 118
Wohnort: Niedersachsen
Geschlecht: Männlich
LoGD: https://www.sotbd.de/about.php?op=source
Ich habe mich daran versucht die Sache mit den doppelten Farbcodes hinzubekommen, bis mir eine vermeintlich einfachere Lösung eingefallen ist. Statt doppelte Farbcodes soll es nu einfach ein weiteres Vorzeichen sein. Ich habe mich hier für ´ entschieden, weil es einfach nach naheliegenste ist, ber egal.

Habe die Tabelle um ein weiteres Attritbut "sign" erweitert, wo das dazugehörige Vorzeichen gespeichert wird. Entweder ` oder ´. Dann habe ich mich versucht die appoencode() umzuarbeiten, damit auch die neuen Codes angenommen werden. Dachte zuerst das es wohl nicht so schwierig werden könnte, aber inzwischen raucht mir die Birne und ich check gerade garnichts mehr ...

$this->bbcode_second_pass_code('', 'function appoencode($data,$priv=false) {
global $nestedtags,$session,$appoencode;
/* Überarbeitet und verkleinert von Eliwood =D */ /*
$output = "";
while( !(($x=strpos($data,"`")) === false) && !(($x=strpos($data,"´")) === false)) {
$sign = substr($data,$x,1);
$tag = substr($data,$x+1,1);
$append = substr($data,0,$x);
$output.=($priv?$append:HTMLSpecialChars($append));
$data = substr($data,$x+2);
if ($tag == "0") {
if ($nestedtags['color']) $output.="</span>";
unset($nestedtags['color']);
} else if ($tag == $sign) {
$output.=$sign;
} else {
if (isset($appoencode[$tag]) && $appoencode[$tag]['sign']==$sign) {
$tagrow = $appoencode[$tag];
if (empty($tagrow['color'])) {
if ($nestedtags[$tagrow['tag']] && strchr($tagrow['tag']," /")==false) {
$output.="</".$tagrow['tag'].">";
unset($nestedtags[$tagrow['tag']]);
} else if (strchr($tagrow['tag']," /")==true) {
$output.="<".$tagrow['tag'].">\n";
} else {
$output.="<".$tagrow['tag']." ".$tagrow['style'].">";
$nestedtags[$tagrow['tag']] = true; }
} else {
if ($nestedtags['color']) $output.="</span>"; else $nestedtags['color']=true;
$output.="<span style='color: #".$tagrow['color'].";'>"; }
} else {
$output.=$tag; }
}
}

if ($priv) {
$output.=$data;
} else {
$output.=HTMLSpecialChars($data); }
return $output; }')

Ich weiß, dass ich das im Prinzip für das andere Vorzeichen genauso machen müsste, aber irgendwie ist meine Birne grad hohl ... mit dem && geht es momentan ohnehin noch nicht, speziell weil er dann das $x überschreibt ... einzeln geht es natürlich xD Meine Frage ist halt nur wie ich die beiden nun vereinigen kann, bin für jeden Tipp dankbar ^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: So 13 Feb, 2011 18:00 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
Ohne mir den Snippet nun genau angesehen zu haben, würde ich folgendes vorschlagen:

$tag == $sign - Weg.

Alternativ:

$this->bbcode_second_pass_code('', 'switch( $sign ) {

case '´':
# Input.
break;

case '`':
#Input.
break;

}')

Oder alternativ mit einer If-Abfrage. Der Tag kann allerdings nicht "gleich" Sign sein. :P

_________________
Never change a running system. Bullshit! ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Mi 16 Feb, 2011 18:53 
Offline
Lehrling
Lehrling

Registriert: Mi 12 Mär, 2008 23:53
Beiträge: 42
dieser ansatz wird so nicht hinhauen

Zitat:
while( !(($x=strpos($data,"`")) === false) && !(($x=strpos($data,"´")) === false)) {


Den && wird nicht funktionieren weil er dann beides erwartet, selbst wenn immer beides da wäre wird der string in dem script immer gekürzt so das am ende nur noch eins da sein kann und er niemals alle farben ersetzen würde.
Die Lösung wäre da eigentich eher eine ODER abfrage. Das haut jedoch nicht hin weil er dann prüft ob $x einen wert hat und $y nicht besetzt... das führt dann auch zum gleichen problem, der string wird bei $x abgeschnitten und werte von $y die dazwischen liegen gehen einfach verloren und werden nicht in farben umgewandelt.

EDIT: kann auch gut sein das ich das falsch sehe XD


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Fr 18 Feb, 2011 16:00 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 01 Sep, 2008 10:29
Beiträge: 118
Wohnort: Niedersachsen
Geschlecht: Männlich
LoGD: https://www.sotbd.de/about.php?op=source
Hab da mal was zusammen gebastelt. Funktioniert zwar soweit, aber schön ist sicherlich was anderes ^^
Mein einziges Problem ist nun eigentlich nurnoch das Javascript für die Chatvorschau ... doof nur das ich von JS Mal garkeine Ahnung habe -.-

Function Appoencode
$this->bbcode_second_pass_code('', 'function appoencode($data,$priv=false) {
global $nestedtags,$appoencode;
if ($priv==false) {
$data = HTMLSpecialChars($data);
$data = str_replace('&amp;','&',$data); }
while( !(($x=strpos($data,"`")) === false)) {
$sign = substr($data,$x,1);
$tag = substr($data,$x+1,1);
$ende = substr($data,$x+2);
$data = substr($data,0,$x);

if ($tag == "0") {
if ($nestedtags['color']) $data.="</span>";
unset($nestedtags['color']);
} else if ($tag == $sign) {
$data.=$sign;
} else {
if (isset($appoencode[$sign.$tag]) && $appoencode[$sign.$tag]['sign']==$sign) {
$tagrow = $appoencode[$sign.$tag];
if (empty($tagrow['color'])) {
if ($nestedtags[$tagrow['tag']] && strchr($tagrow['tag']," /")==false) {
$data.="</".$tagrow['tag'].">";
unset($nestedtags[$tagrow['tag']]);
} else if (strchr($tagrow['tag']," /")==true) {
$data.="<".$tagrow['tag'].">\n";
} else {
$data.="<".$tagrow['tag']." ".$tagrow['style'].">";
$nestedtags[$tagrow['tag']] = true; }
} else {
if ($nestedtags['color']) $data.="</span>"; else $nestedtags['color']=true;
$data.="<span style='color: #".$tagrow['color'].";'>"; }
} else {
$data.=$tag; }
}
$data.=$ende; }

while( !(($x=strpos($data,"´")) === false)) {
$sign = substr($data,$x,1);
$tag = substr($data,$x+1,1);
$ende = substr($data,$x+2);
$data = substr($data,0,$x);

if ($tag == "0") {
if ($nestedtags['color']) $data.="</span>";
unset($nestedtags['color']);
} else if ($tag == $sign) {
$data.=$sign;
} else {
if (isset($appoencode[$sign.$tag]) && $appoencode[$sign.$tag]['sign']==$sign) {
$tagrow = $appoencode[$sign.$tag];
if (empty($tagrow['color'])) {
if ($nestedtags[$tagrow['tag']] && strchr($tagrow['tag']," /")==false) {
$data.="</".$tagrow['tag'].">";
unset($nestedtags[$tagrow['tag']]);
} else if (strchr($tagrow['tag']," /")==true) {
$data.="<".$tagrow['tag'].">\n";
} else {
$data.="<".$tagrow['tag']." ".$tagrow['style'].">";
$nestedtags[$tagrow['tag']] = true; }
} else {
if ($nestedtags['color']) $data.="</span>"; else $nestedtags['color']=true;
$data.="<span style='color: #".$tagrow['color'].";'>"; }
} else {
$data.=$tag; }
}
$data.=$ende; }

return $data; }')

Function LoadTags
$this->bbcode_second_pass_code('', 'function Load_Tags() {
global $db,$link;
/* (c) 2005 by Eliwood & Serra */
$result = DB_Query("SELECT SQL_CACHE * FROM appoencode",LINK);
$tags = array();
while($row = DB_Fetch_Assoc($result)) {
$tags[$row['sign'].$row['code']] = $row; }
return $tags; } ')

Was haltet ihr davon ? Gibt sicherlich einiges was man daran noch verbessern könnte.
Und für einen Tipp bezüglich dem JS wäre ich überaus dankbar ^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Sa 19 Feb, 2011 11:18 
Offline
Lehrling
Lehrling

Registriert: Mi 12 Mär, 2008 23:53
Beiträge: 42
Also die Lösung hat auch große macken weshalb ich sie nicht nehmen würde.

Das Problem ist das du jetzt 2 durchläufe hast für die Farbcodes, dabei entsteht folgedes

du hast z.B. an Position 10 ein `g drin und er setzt dort einen tag ein und speichert sich das er nen tag reingesetzt hat damit er weiß das er einen zu schließen hat beim nächsten. Beim zweiten durchlauf hast du dann z.B. ein ´g an 8 stelle... dann wird er dir einen tag schließen ohne das einer geöffnet wurde. Es wird früher oder später zu fehlern führen.

Bsp. bei einem text von
Zitat:
´gtest`gtest

wäre das bei rausgekommen:
Zitat:
</span><span style="">test<span style="">test</span>


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Sa 19 Feb, 2011 13:07 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 01 Sep, 2008 10:29
Beiträge: 118
Wohnort: Niedersachsen
Geschlecht: Männlich
LoGD: https://www.sotbd.de/about.php?op=source
Hast du das getestet ? Bei mir macht er das alles sauber und ordentlich, weil ich ja zuerst alle Codes mit ` durchgehe und dannach im Anschluss die mit ´.

Beispiel:

`gTe`@st`dte`jxt
$this->bbcode_second_pass_code('', '<span style="color: rgb(136, 255, 136);">Te</span><span style="color: rgb(0, 255, 0);">st</span><span style="color: rgb(0, 221, 0);">te</span><span style="color: rgb(0, 187, 0);">xt</span>')


`UTe´Nst`6te`Mxt`^2
$this->bbcode_second_pass_code('', '<span style="color: rgb(255, 187, 0);">Te<span style="color: rgb(255, 204, 0);">st</span><span style="color: rgb(255, 221, 0);">te</span><span style="color: rgb(255, 238, 0);">xt</span><span style="color: rgb(255, 255, 0);">2</span>')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Sa 19 Feb, 2011 13:57 
Offline
Lehrling
Lehrling

Registriert: Mi 12 Mär, 2008 23:53
Beiträge: 42
getestet nicht da ich kein logd server mehr habe, aber ich erinner mich an das script weil ich damals die gleiche idee hatte XD.

und ich hatte damals auch dieses problem.

Du hast natürlich recht aber dein script prüft eben erst nur die ` und dann die ´ das script speichert sich aber eben um die tags richtig schließen zu können ob was offen ist oder zu. und wenn bei dem ´ am ende des strings was geöffnet wird speichert er sich das er was schließen muss. Beim zweiten durchlauf mit ` setzt er dann wenn direkt am anfang schon was vorkommt einen close tag der da nicht hingehört. Das script geht aber davon aus das es dahin gehört weil ihm der letzte durchlauf gesagt hat er hat beim nächsten einsetzen nen tag zu schließen.

Wie gesagt es funktioniert, nur wird es eben früher oder später zu diesen fehlern führen, das hängt von der konstelation der farbcodes ab.

Aber ist auch möglich das ich das script falsch verstanden habe da ichs mir nicht im detail durchgelesen habe.

EDIT: ok hab mir deine ausgabe angesehen hatte recht, er macht genau das falsch
Zitat:
<span style="color: rgb(255, 187, 0);">Te<span style="color: rgb(255, 204, 0);">st</span><span style="color: rgb(255, 221, 0);">te</span><span style="color: rgb(255, 238, 0);">xt</span><span style="color: rgb(255, 255, 0);">2</span>


er eröffnet einen neuen spantag ohne den letzten geschlossen haben. das ist vllt in dem beispiel nichts weiter... aber es wird fälle geben wo das komplett zerschossen werden kann vor allem beim IE da er solche fehler gar nicht mag.


EDIT 2:
versuch das hier, ist ungetestet und nicht sonderlich schön aber sollte funktionieren
$this->bbcode_second_pass_code('', 'function appoencode($data,$priv=false) {
global $nestedtags,$appoencode;
if ($priv==false) {
$data = HTMLSpecialChars($data);
$data = str_replace('&amp;','&',$data); }
while(true){

$x = strpos($data, '`');
$y = strpos($data, '´');

if($x === false && $y===false){
break;
}elseif(($y !== false) && ($x > $y)){
$tag = substr($data, $y+1, 1);
$append = substr($data, 0, $y);
$output .= $append;
$data = substr($data, $y+2);
$sign = '´';
}else{
$tag = substr($data, $x+1, 1);
$append = substr($data, 0, $x);
$output .= $append;
$data = substr($data, $x+2);
$sign = '`';
}

if ($tag == "0") {
if ($nestedtags['color']) $data.="</span>";
unset($nestedtags['color']);
} else if ($tag == $sign) {
$data.=$sign;
} else {
if (isset($appoencode[$sign.$tag]) && $appoencode[$sign.$tag]['sign']==$sign) {
$tagrow = $appoencode[$sign.$tag];
if (empty($tagrow['color'])) {
if ($nestedtags[$tagrow['tag']] && strchr($tagrow['tag']," /")==false) {
$data.="</".$tagrow['tag'].">";
unset($nestedtags[$tagrow['tag']]);
} else if (strchr($tagrow['tag']," /")==true) {
$data.="<".$tagrow['tag'].">\n";
} else {
$data.="<".$tagrow['tag']." ".$tagrow['style'].">";
$nestedtags[$tagrow['tag']] = true; }
} else {
if ($nestedtags['color']) $data.="</span>"; else $nestedtags['color']=true;
$data.="<span style='color: #".$tagrow['color'].";'>"; }
} else {
$data.=$tag; }
}
$data.=$ende; }

return $data; }')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Sa 14 Mai, 2011 19:25 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 01 Sep, 2008 10:29
Beiträge: 118
Wohnort: Niedersachsen
Geschlecht: Männlich
LoGD: https://www.sotbd.de/about.php?op=source
Ich habe das ganze nun so umgesetzt und es mir noch und nochmal angeschaut. Es funktioniert wie es soll und er sollte nun auch die Tags korrekt schließen, da er diese nun nicht mehr nacheinander sondern nebeneinander abarbeitet:

$this->bbcode_second_pass_code('', 'function appoencode($data,$priv=false) {
global $nestedtags,$session,$appoencode;
// Neue Version- Funktion ok
$output = "";

while (true) {
$x = strpos($data,"`");
$y = strpos($data,"´");
if (($x===false) && ($y===false)) break;

if ($x!==false) {
$signx = substr($data,$x,1);
$tagx = substr($data,$x+1,1); }

if ($y!==false) {
$signy = substr($data,$y,1);
$tagy = substr($data,$y+1,1); }

if ($x!==false && $y!==false) {
if ($x < $y) {
$sign = $signx;
$tag = $tagx;
$z = $x;
} else {
$sign = $signy;
$tag = $tagy;
$z = $y; }

} else if ($x!==false) {
$sign = $signx;
$tag = $tagx;
$z = $x;

} else if ($y!==false) {
$sign = $signy;
$tag = $tagy;
$z = $y; }

$output .= substr($data,0,$z);
$data = substr($data,$z+2);
if ($tag == "0") {
if ($nestedtags['color']) $output .= "</span>";
unset($nestedtags['color']);
} else if ($tag == $sign) {
$output .= $sign;
} else {
if (isset($appoencode[$sign.$tag])) {
$tagrow = $appoencode[$sign.$tag];
if (empty($tagrow['color'])) {
if ($nestedtags[$tagrow['tag']] && strchr($tagrow['tag']," /")==false) {
$output .= "</".$tagrow['tag'].">";
unset($nestedtags[$tagrow['tag']]);
} else if(strchr($tagrow['tag']," /")==true) {
$output .= "<".$tagrow['tag'].">\n";
} else {
$output .= "<".$tagrow['tag']." ".$tagrow['style'].">";
$nestedtags[$tagrow['tag']] = true; }
} else {
if ($nestedtags['color']) $output .= "</span>"; else $nestedtags['color'] = true;
$output .= "<span style='color: #".$tagrow['color'].";'>"; }
} else {
$output .= $tag; }}}

if ($priv) {
$output .= $data;
} else {
$output .= HTMLSpecialChars($data); }
return $output; }')
$this->bbcode_second_pass_code('', 'function Load_Tags() {
global $db,$link;
/* (c) 2005 by Eliwood & Serra */
$result = DB_Query("SELECT SQL_CACHE * FROM appoencode",LINK);
$tags = array();
while($row = DB_Fetch_Assoc($result)) {
$tags[$row['sign'].$row['code']] = $row; }
return $tags; }')

Das nur zum Verständnis, denn ich nun komme meine eigentliche Frage oder mein Problem ...
Wir nutzen ja das Kommentarsystem von Eliwood. Dieses wollte ich nun noch an die neuen Farbcodes anpassen, doch leider tut sich nun nichts mehr. Ich habe nicht ganz soviel Ahnung davon und habe entsprechend keinen Fehler gefunden, vielleicht kann mir ja Jemand weiterhelfen - wäre echt super.

$this->bbcode_second_pass_code('', '
case 'chatpreview.withfarbhack':
global $appoencode;
# Chatvorschau, Orignal von Chaosmaker, modifziziert von blackfin. Danke an Rikka für das rausrücken vom Code *g*
# Weitere, kleine Modifikationen von Basilius Sauter.

$my_name = $this->user['name'] ;
$clearname = str_replace("`0","",$this->striptag($my_name));
$my_lastchar = substr($clearname,strlen($clearname)-1,0) ;
// $myemoteuse = $this->user['emoteuse'] ;

$includinscript = '';
reset($appoencode);
while (list($key,$val) = each($appoencode)) {
$includinscript .= '
case "'.$key.'":
if(openspan) output = output + "</span>"; else openspan = true;
output = output + "<span style=\"color: #'.$val['color'].';\">";
break;'; }

$script .= <<<JS
<script type="text/javascript">
<!--
function appoencode(data,talkline,thismycolor,thisemotecolor, thisthirdpersonemote) {
var Fundstelle = -1;
var x = -1;
var tagx = '';
var signx = '';
var y = -1;
var tagy = '';
var signy = '';
var tag = '';
var sign = '';
var suche = '';
var append = '';
var output = '';
var openspan = false;
var myname = '$my_name';
var mylchar = '$my_lastchar' ;
var mecheck = '' ;
var doppelcheck = '' ;
var xcheck = '';
var mesearch = 0 ;

if(thisemotecolor == '') thisemotecolor = '&' ;
if(thismycolor == '') thismycolor = '#' ;
if(thisthirdpersonemote == '') thisthirdpersonemote = '&';

data = data.replace('/mE','/me');
data = data.replace('/ME','/me');
data = data.replace('/Me','/me');

data = data.replace('/Em','/em');
data = data.replace('/eM','/em');
data = data.replace('/EM','/em');

data = data.replace('/mS','/ms');
data = data.replace('/MS','/ms');
data = data.replace('/Ms','/ms');

data = data.replace('/X', '/x');

var clname = myname.replace('`0','');

mecheck = data.substr(0,3).toLowerCase() ;

if(mecheck == '/me') {
data = data.replace('/me',''+myname+' `'+thisemotecolor+'');
mesearch = 1 ;
}


if(mecheck == '/ms') {

if(mylchar == 's') {
alert(mylchar) ;
data = data.replace('/ms',''+clname+'\'`'+thisemotecolor+' ');
}else {
data = data.replace('/ms',''+clname+'s`'+thisemotecolor+' ');
}
mesearch = 1 ;
}

if(mecheck == '/em') { // && myadmin == 1) {
data = data.replace('/em','`^NSC: `'+thisthirdpersonemote+' ');
data = '`&'+data+'' ;
mesearch = 1 ;
}

doppelcheck = data.substr(0,1).toLowerCase();
if(doppelcheck == ':') {
data = data.replace(':',''+myname+' `'+thisemotecolor+'');
mesearch = 1 ;
}

xcheck = data.substr(0,2).toLowerCase();
if(xcheck == '/x') {
data = data.replace('/x',''+myname+' `'+thisemotecolor+'');
mesearch = 1 ;
}


if(mesearch == 0 && data.length != 0) {
data = ''+myname+' `3' +talkline+' : `'+thismycolor+'"'+data+'`'+thismycolor+'"' ;
}

while (true) {
x = data.search(/`/);
y = data.search(/´/);
if ((x == -1) && (y == -1)) break;

if (x != -1) {
signx = data.substr(x, 1);
tagx = data.substr(x+1, 1); }

if (y != -1) {
signy = data.substr(y, 1);
tagy = data.substr(y+1, 1); }

if (x != -1 && y != -1) {
if (x < y) {
sign = signx;
tag = tagx;
Funstelle = x;
} else {
sign = signy;
tag = tagy;
Funstelle = y; }

} else if (x != -1) {
sign = signx;
tag = tagx;
Funstelle = x;

} else if (y != -1) {
sign = signy;
tag = tagy;
Funstelle = y; }

append = data.substr(0,Fundstelle);
append = append.replace(/</,'&lt;');
append = append.replace(/>/,'&gt;');
suche = sign + tag;
output = output + append;
data = data.substring(Fundstelle+2,data.length);

if (tag == '0') {
if (openspan) output = output + "</span>";
openspan = false;
} else if (tag == 'n') {
if (openspan) output = output + "</br>";
} else if (tag == sign) {
output = output + sign;
} else {
switch (suche) {
$includinscript

default:
output = output + sign + tag;
}
}
}

output += data;
if (openspan) output += '</span>';

output = output.replace(/\\n/g, '<br />');
output = output.replace(/\\\\n/gi, '<br />');

return output;
}
//-->
</script>
JS;')

Edit:
Okay, habe die Fehler nun doch noch selbst gefunden, funktioniert nun alles wie's soll -freu-


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Mo 13 Jun, 2011 15:45 
Offline
Newbie

Registriert: So 23 Jan, 2011 14:43
Beiträge: 3
Halli hallo !

Ich habe schon seit einer ganzen Weile nach einem Weg gesucht, wie man genau sowas umsetzen kann, weil ich ein absoluter Farbennarr bin und mir so langsam die Zeichen ausgehen! Ich würde die Farben vermutlich einfach ein wenig umändern, wenn ich dadurch nicht ein riesen Chaos stiften und etliche Spieler verärgern würde.. deshalb ist diese Umsetzung, wie sie hier aufgeführt wird wohl die optimalste für mich..

Hast du in den oben angegebenen Skripten deine Fehler ausgebessert ?

Wenn nicht, würdest du mich zum glücklichsten Menschen der Welt machen, wenn du sie vielleicht hier posten, oder mir per PN übersenden könntest! Ich würde glatt dafür sterben.. oder töten :,D nein, Spaß beiseite, aber das wäre wirklich eine Wucht!

Grüßelchen
:)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Di 29 Nov, 2011 20:41 
Offline
Lehrling
Lehrling

Registriert: Mi 17 Aug, 2011 20:42
Beiträge: 37
Geschlecht: Männlich
LoGD: http://noch.nicht.online.de
hiho... nutze die standard funktion ohne DB
function appoencode($data,$priv=false){
.....

hab dort unten
PHP:
case "w":
$output.=$session[user][weapon];
break;

gefunden und
PHP:
case "a":
$output.=$session[user][armor];
break;

angehangen.
jetzt zu meinem problem:
kann `w und `a in addnav(); und in output(); problemlos nutzen, es wird der richtige waffen/rüstungsname in texten und links wiedergegeben, doch wenn ich in der chatleiste ":: nimmt seine `w und putzt sie fein säuberlich" o.ä. schreibe erscheint nur ein Leerzeichen.

wo muss ich was ändern, um es auch im chat nutzen zu können?

_________________
ERROR!!!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte + Einfache Farbcodes
BeitragVerfasst: Di 29 Nov, 2011 22:14 
Offline
Eingeweihter
Eingeweihter

Registriert: Mi 12 Aug, 2009 18:11
Beiträge: 65
Geschlecht: Männlich
LoGD: http://www.plueschdrache.de
Hallo,
in der Funktion viewcommentary() findest du eine Zeile die etwa so aussieht:
$row['comment']=preg_replace("'[`][^123456789!@#$%&Qqr~^VvgTtKfFGklLRmMpPjJsSdDib]'","",$row['comment']);
Alle dort nicht eingetragenen Codes werden im Chat herausgefiltert.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 32 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
cron
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum