Beitrag von Kaliber ()
Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
Schönes Include, aufjedenfall sehr nützlich.
Sieht gut aus!
Wie sieht es denn mit dem Speedtest aus?
Das anzeigen verzögert sich um max 18ms...und die Funktion ReShow zeigt den Dialog in ~1ms an.
Außerdem hat man die Verarbeitung von Dialogen immernoch im public "OnDialogResponse".
und? Darum geht es ja nicht, nur um den erneuten Funktionsaufruf.
man hat mit deinem nur das Problem bei Dynamischen Sachen.
Was meinst du damit?
Das anzeigen verzögert sich um max 18ms...und die Funktion ReShow zeigt den Dialog in ~1ms an.
Also von der Geschwindigkeit passt es ja, hatte eigentlich mehr auf 200ms getippt.
und? Darum geht es ja nicht, nur um den erneuten Funktionsaufruf.
War nur eine Anmerkung, da ich selber es deutlich besser finde, wenn die Auswertung von Dialogen in einer Include geschied.
Was meinst du damit?
Nemen wir ein Einfaches Beispiel
new string[128];
for(new i=0; i<MAX_FRAK; i++)
{
if(fInfo[i][factive] == false) continue;
format(string,128,"Fraktion: %d, Name: %s",i,fInfo[i][fname]);
ShowPlayerDialog(...);
}
Also was ich meine ist halt, wenn man Dynamische Inhalte in ein Dialog anzeigen möchte.
War nur eine Anmerkung, da ich selber es deutlich besser finde, wenn die Auswertung von Dialogen in einer Include geschied.
Dann kannst du das ja trotzdem machen...und wer nicht will, muss es nicht machen...
Also was ich meine ist halt, wenn man Dynamische Inhalte in ein Dialog anzeigen möchte.
Dein Code macht so keinen Sinn...
Da dem Spieler hier nur das letzte Ergebnis wo der Dialog angezeigt wird gezeigt wird.
Aber ja mit meiner Funktion kannst du ihm nur das letzte Ergebnis von dem ShowPlayerDialog anzeigen.
Mehr soll meine Funktion ja auch nicht machen
Dein Code macht so keinen Sinn...
ist mir gerade auch aufgefallen, jedoch hab ich den Code kurz hier im Editor geschrieben.
Außerdem hab ich mich schon paar Wochen nicht mehr richtig mit dem Scripting beschäftigt.
Jedoch finde ich deine Include nützlich für Leute, die keine Dynamischen Inhalte in Dialogen brauchen.
Klasse idee
gefällt mir echt gut
die keine Dynamischen Inhalte in Dialogen brauchen.
Inhalte die du "dynamisch" generierst können logischerweise nicht "konstant" gespeichert werden.
Somit muss der Algorithmus immer wieder aufgerufen werden um den Inhalt zu generieren.
Das ist nun mal so, da kann ich nichts dran ändern und das hat auch eigentlich nichts mit der Funktionalität meiner Include zu tun.
mfg.
Inhalte die du "dynamisch" generierst können logischerweise nicht "konstant" gespeichert werden.
Somit muss der Algorithmus immer wieder aufgerufen werden um den Inhalt zu generieren.
Das ist nun mal so, da kann ich nichts dran ändern und das hat auch eigentlich nichts mit der Funktionalität meiner Include zu tun.
Das meine ich ja.
Ich hab EasyDialog dafür erstellt, dass man zb. ein Dynamisches Fraktionssystem verwalten kann ohne dass man ShowPlayerDialog jedesmal schreiben muss.
und deine Include ist mehr für Scripter, die ein Statisches Script haben.
So haben beide Systeme Vor und Nachteile.
Ich hab EasyDialog dafür erstellt, dass man zb. ein Dynamisches Fraktionssystem verwalten kann ohne dass man ShowPlayerDialog jedesmal schreiben muss.
und deine Include ist mehr für Scripter, die ein Statisches Script haben.
So haben beide Systeme Vor und Nachteile.
Was redest du da?
Unsere "Systeme" haben gar nichts miteinander zu tun...
Du kapselst den kompletten Inhalt von OnDialogResponse in eine Funktion...und ich sage einfach, dass man einen Dialog anhand seiner ID aufrufen kann.
Und wenn ein Dialog "dynamisch" generiert wird und öfters brauch, packt man das eh in eine Funktion...
Unsere "Systeme" haben gar nichts miteinander zu tun...
Nicht ganz, beide Systeme Lassen ein Dialog per Funktion anzeigen.
Wäre es nicht sinniger, die Dialoge, die man häufiger benötigt, einfach komplett in einen Array zu schmeißen ?
1. Man hätte den Überblick über alle wiederholenden Dialoge
2. Man spart es sich, das in Funktionen "auszugliedern"
3. Man kann schnell Sachen ändern und auch hinzufügen.
Wäre es nicht sinniger, die Dialoge, die man häufiger benötigt, einfach komplett in einen Array zu schmeißen ?
1. Man hätte den Überblick über alle wiederholenden Dialoge
2. Man spart es sich, das in Funktionen "auszugliedern"
3. Man kann schnell Sachen ändern und auch hinzufügen.
...kann man machen, aber dann ist die Include für was völlig anderes...
Ich hatte lediglich das Ziel für einfache abfragen, einen simplen Dialog wiederholen zu lassen.
Natürlich kann man direkt daraus einen riesen "Dialog-Prozessor" schreiben, wie y_dialog...aber darum ging es mir nicht...
PS: Ich weiß nicht genau wie du dir das vorstellst mach mal ein Beispiel..
Ich weiß nicht genau wie du dir das vorstellst mach mal ein Beispiel..
Es ist defintiv nicht ganz ausgearbeitet, funktioniert aber wunderbar.
Problem bei "meiner" Variante, man müsste die Größe der Arrays anpassen.
Aber auch dafür sollte es im Grunde eine Lösung geben
enum
{
DIALOG_BSP
};
enum d_strc
{
ID,
Style,
Header[50],
Body[500],
Button1[10],
Button2[10]
};
new Dialog[][d_strc] =
{
{DIALOG_BSP, DIALOG_STYLE_MSGBOX, "Hallo Kaliber", "Ich bin der Body dieses Dialogs", "Knop", "Knop 2"}
};
ShowDialog(playerid, dialogid)
{
return ShowPlayerDialog(playerid, Dialog[dialogid][ID], Dialog[dialogid][Style], Dialog[dialogid][Header], Dialog[dialogid][Body], Dialog[dialogid][Button1], Dialog[dialogid][Button2]);
}
Anzeigen lassen kann man die dann so
ShowDialog(playerid, DIALOG_BSP);
Ja...
Ding ist nur, dass ich das in einer Datenbank speichere und halt keinen Speicherplatz verschwende...
Zudem kann man meine Dialoge auch updaten, wenn man einfach einen mit der selben dialogid nochmal anzeigen lässt aber anders.
Also im Endeffekt kann man mit beiden Methoden das selbe machen...nur das man bei meinem nicht sein ganzes Skript umschreiben muss xD
Du meinst ja, dass du für die MySQL Datenbank gegen eine ungewollte Injection die " ' " entfernst. Könntest du sie nicht auch mit einem
Phrase statt Leerzeichen ersetzen (replace)? zB mit einer Kette, die man nicht normal schreibt und diese nach der MySQL Abfrage wieder zurücksetzen bzw den ersetzten Phrase wieder mit einem " ' " ersetzen? Habe ich so gemacht, zB " ' " -> #Apostroph -> " ' "
zB mit einer Kette
Ich sag mal so, das wäre schon machbar, aber wofür der Aufwand?
Wer nutzt schon einen ' in einem Dialogtext? Da kann man auch auf die Alternative mit " zurückgreifen
Kaliber: Ich meinte ja nicht wirklich ne Kette und es ist auch kein großer Aufwand, nur damit es schön ist und man auf nichts verzichten muss, halt professionell Du müsstest halt wie im Beispiel einfach das Apostroph mit dem Phrase #Apostroph ersetzen und beim bekommen des MySQL Inhalts vor der Ausgabe wieder den Phrase #Apostroph mit einem Apostroph ersetzen. Würde man glaube in 2 Zeilen schaffen, jedenfalls in Java :p