Hosszú szöveg a párbeszédpanelbe Mivel sokan teszik fel ezt a kérdést, és megtaláltam a muködoképes és tesztelt megoldást, gondolom megosztom veletek.
A titok nyitja egy nagyon parasztos, de hatékony megoldásban rejlik. Akkor lássuk is: new DialogIDString[][]={
\"Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt\\n\", // Sor 1 (Az \\n kell a végére!)
\"Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt,Teszt\"
};
Ezzel létrehoztuk a késobb megjeleno karakterláncot... new DialogString[1600]; // Az 1600 helyett a karakterek számát írd..
format(DialogString,sizeof DialogString,\"%s%s\",DialogIDString[0],DialogIDString[1]); // Szépen beágyazzuk a sorokat, ezzel átvertük a PAWN-t és nem veszi hoszúnak:D
Innentol magáért beszél a dolog szerintem...gyengébbek kedvéért:
A dialógus megjelenésénél a DialogString karakterláncot használjuk szövegnek...: ShowPlayerDialog(playerid,dialogid,style,caption,DialogString,button1[],button2[]);
Ugye nem is nehéz? Ha mégis bátran írj...Ennyi, Enjoy!
Ezt jó ötlet volt leírni, sok embernek hasznára válhat. A DialogString vektor mérete nekem kicsit furcsa, nem hiszem hogy \'ennyire\' hosszú szöveget akarnának leírni. De ki tudja? :) Jó lett, ez a lényeg.
ZeRo
A cellák méretét a karakterlánc méretére állítsd.
Ez egy jó hülye kérdés lesz: hogy állapítod meg, hogy hány karakter ?
Megszámolod pl ;D
strlen( string[ ] );
És mondjuk kiíratod a konzolba a print függvénnyel, így nem is kell megszámolnod, csak leolvasnod.
ZeRo
strlen( string[ ] );
És mondjuk kiíratod a konzolba a print függvénnyel, így nem is kell megszámolnod, csak leolvasnod.
ZeRo
Vagy new hosszusag = strlen(string);, igaz? :P
strlen( string[ ] );
És mondjuk kiíratod a konzolba a print függvénnyel, így nem is kell megszámolnod, csak leolvasnod.
ZeRo
Vagy new hosszusag = strlen(string);, igaz? :P
[/quote]
Még mindíg jobb, mint megszámolni. ;)
ZeRo
Én ezt nemértem, írd le pls h hogyan goldolod azt a stringeset XD
De nekem már az is hosszú.....
Sortöréssel csináld. \\ jel és új sorban folytatod. Példa:
\"Ez most a teszt\\
karakterlánc\"
Na megy xD Amúgy ha DialogIDString-et használsz naggyából 20 darab után má problémázik a pawno h hosszú a format :D Ezért én csak így használom DS.
Ez ugyanolyan kis \'small but smart\' fixek mint pl az IsNull függvény, vagy az IsNAN. Nagyon ötletes!
Lenne egy kérdésem; ezt, h lehet úgy megcsinálni, h ne kellljen minden sort beágyazni ?
és hogy csinjem meg parancsra nem értem
Ezt mondjuk inkább a kérdésekhez kellett volna, fõleg úgy hogy több mint 1 éve nem írtak a témába..
Ez a leírás nem a Dialogok használatát mutatja be, hanem hogy hogyan lehet nagyobb karakterláncokat használni, szóval ez még off is volt.
Öreg téma, de ennyit hozzátennék:
Ez a legjobb és a legegyszerûbb megoldás:
// Én ezt globálisan szoktam létrehozni
new const
MCHawer_1[][] =
{
!\"Bye-Bye Lány\",
!\"Száz Forintnak\",
!\"Piros Bicikli\",
!\"Lidi Néni\",
!\"Piros Volt A Paradicsom\",
!\"Eladom A Lovamat\",
!\"Lakodalom Van A Mi Utcánkban\",
!\"Végleg A Szívügyem Maradtál\",
!\"Vörösbort Ittam Az Este\",
!\"Kislány Vigyázz\",
!\"Egy Szép Nyári Este\",
!\"Mulatós Egyveleg\"
};
new
szFormatLine[4096 + 1]; // Létrehozunk globálisan 4096 cellát, amiben majd formázzuk a szöveget a dialógba. A 4096 a maximum hosszúság.
// Aztán valahova ezt belarakod a kódba, mondjuk egy parancsba.
CMD:mchawer(playerid, params[])
{
szFormatLine[0] = EOS; // Kiûrítjük
for(new i; i < sizeof(MCHawer_1); i ++)
{
strcat(szFormatLine, MCHawer_1); // Belerakjuk az strcat függvénnyel az kiválaszott sort
strcat(szFormatLine, \"\\n\"); // Utánarakjuk az \"\\n\" karaktert. Azaz új sort kezdünk.
}
ShowPlayerDialog(playerid, DIALOG_MCHAWER, DIALOG_STYLE_LIST, \"Bye-Bye Lány.\", szFormatLine, \"Play\", \"Mégse\"); // Felmutatjuk a dialógot
return 1;
}