Ich bin dann mal wieder den Spielverderber, aber diese Include ist (und das ist leider ungelogen so) die sinnfreieste Include die ich in letzter Zeit gesehen habe. Verwenden sollte das niemand, weil der einzige Zweck dahinter ist der, dass mehr Ressourcen verwendet werden als ohne (was anscheinend nur 123marvin123: wirklich verstanden hat).
Warum?
Es wird ein String (bzw. gleich mehrere) in einer Datenbank gespeichert, die man 1:1 so im Code stehen hat. Wo ist denn da der Sinn? Theoretisch kann man jeden String und jeden sonstigen Wert den man im Code stehen hat in eine Datenbank schreiben lassen, wenn der Code ausgeführt wird, aber wo ist der praktische Sinn dahinter, außer dass man am Ende 1000 Includes hat? Der einzig für mich erkennbare Sinn ist der, dass man der CPU unnötig Arbeit macht und dass man die Festplatte zumüllt.
Somit wird also genau das gespeichert was ohnehin schon im Code steht. Warum sollte ich das (nochmal!) speichern wollen? Dafür gibt es keinen Grund.
An sich zeigt der Code ja nur das an, was bereits angezeigt wurde. Das kann man aber ohne solche Umstände mit einem einzigen Funktionsaufruf realisieren, der zudem so gut wie keine Ressourcen benötigt.
Ich zeige kurz und knapp auf wie das geht (sollte ich eigentlich nicht müssen, denn das sind wirklich Basics). Ich nenne die Funktion zur Verdeutlichung ebenfalls ReShow, auch wenn es da nicht wirklich passt.
forward ReShow(playerid, dialogid);
public ReShow(playerid, dialogid)
{
switch(dialogid)
{
case 1: ShowPlayerDialog(playerid,dialogid,DIALOG_STYLE_MSGBOX,"Caption","Text","Ok","Close");
case 2: ShowPlayerDialog(playerid,dialogid,DIALOG_STYLE_MSGBOX,"Bla","Blub","Ok","Close");
case 3:
{
new Float:a;
GetPlayerFacingAngle(playerid, a);
new str[32];
format(str, sizeof(str), "Angle: %f", a);
ShowPlayerDialog(playerid,dialogid,DIALOG_STYLE_MSGBOX,"Angle-Info",str,"Ok","Close");
}
}
return 1;
}
Prinzip dahinter?
Man schreibt einfach alle seine Dialoge in eine Funktion, die per switch über die dialogid den Dialog anzeigt. So kann man, wie in case 3 auch formatierte Texte anzeigen. Im Endeffekt kann diese Funktion sogar mehr als die ganze Include, und das bei so gut wie keiner Belastung der Ressourcen.
Zu der Ersetzung des '-Zeichens:
Das kann man wesentlich geschickter lösen, indem man beim speichern nicht das ' mit einem Leerzeichen ersetzt, sondern einfach ein zweites ' anfügt, sprich:
' wird zu '' im Query und wird als ' gespeichert.
Das ist heutzutage eigentlich Standard.
Zu den Limits, die angesprochen worden sind:
Die Include umgeht kein Dialog-Limit, da die dialogid 1:1 verwendet wird.
Ich denke zum Rest muss man nichts mehr sagen, dass die Plug&Play Lösung nicht wirklich toll ist, ist da schon Nebensache.