Szerző Téma: DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)  (Megtekintve 1658 alkalommal)

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)
« Dátum: 2013. Október 28. - 11:15:16 »
+1 Show voters
Sziasztok!
Két kérdésem lenne hozzátok.
1. kérdés - MEGOLDVA
A DIALOG_STYLE_LIST-be írható soroknak mi a limitje? Tehát a dialogban hány darab sort írhatok le egymás alá, pl.
 
ShowPlayerDialog(playerid, ID, DIALOG_STYLE_LIST, \"Cím\", \"Sor1\\nSor2\\nSor3 ... Ebbõl hány lehet?*, \"Kiválaszt\", \"Mégsem\");

 
* A forráskódban nyilván akármennyit odaírhatok (igaz, több sorban, mert maximum 512 karakterbõl állhat egy sor), de ezekbõl mennyit fog mutatni a szerver? Van limit? Ha igen, akkor mennyi? Remélem érhetõ a kérdésem :D
Spoiler for Sorry:
Ha ez kisebb kérdésnek számít, sorry, de nem akartam beleszerkeszteni a hozzászólásomba a kisebb kérdéseknél, amelyben éppen segítek, mert úgy nem veszik észre, hogy kérdeztem + azt a témát alig nézi valaki... :( Mindegy, majd egy moderátor eldönti, hogy lezárja e ezt a témát, avagy sem. Mindegy is, csak valahogyan megkapjam a választ ^-^


De most kiegészítettem egy újabb kérdésemmel, ami azért kifejtésre és megvitatásra vár, szóval egy saját téma a dolognak talán nem nagy probléma. :P :D


Idõ közben ebbõl egy bõven nem kis kérdés lett, de hát ez van :P


2. kérdés - MEGOLDVA
Van több karakterláncom, amelyeket különbözõ néven szeretnék elnevezni, és eltárolni. Eddig valami ilyesmire jutottam, de ez úgy ahogy van fuck logic.
 
while(mysql_fetch_row(mysql_line))
{
i++;
format(string, sizeof(string), \"T%d\", i); // A stringet mindig máshogy írom át, T1, T2, T3, stb. Na most ezeket a T1, T2, stb.ket szeretném használni több stringhez.
format(string, sizeof(string), \"{0000FF}%s\", mysql_line); // Itt a string helyén a  T1, T2, T3, T4, stb.nek kéne szerepelnie, mindig annak, ami éppen jön. Így az éppen következõ adatot mindig külön karakterláncként el tudnám tárolni, és ez is lenne a cél. Csak ugye ez, amit itt leírtam, a lekérdezés eredményét rakja bele a \"string\" nevezetû karakterláncba, átszínezve. De én azt szeretném, hogy a soron következõ TX (X = pl. 3) nevezetû karakterláncba pakolja bele a dolgot.
SendClientMessage(playerid, 0xFFFFFFFF, T1); // A példa kedvéért
SendClientMessage(playerid, 0xFFFFFFFF, T2); // A példa kedvéért
}

 
Remélem érhetõ a dolog. Amit én itt most leírogattam, eléggé fuck logic dolog, talán nem is így kéne megoldani. Próbálkoztam ilyesmivel is:
 

new T[50];
while(mysql_fetch_row(mysql_line))
{
i++;
format(T, sizeof(T), \"{0000FF}%s\", mysql_line);
SendClientMessage(playerid, 0xFFFFFFFF, T1); // A példa kedvéért
SendClientMessage(playerid, 0xFFFFFFFF, T2); // A példa kedvéért
}

 
de sajnos nem nagyon vált be. Habár ez egy fokkal logikusabb út, talán ezen is kéne elindulnom. A példában említett SendClientMessage függvényekrõl pedig tudom, hogy igen, mysql-os lekérdezésnél bõven elég ezt a sok sz*rságot hátrahagyni, egyszer egy
 
SendClientMessage(playerid, 0xFFFFFFFF, mysql_line);

 
-t írni, és akkor minden kiíródik. Csakhogy itt nekem minden adatra a késõbbiekben szükségem lenne, és külön szeretném kezelni õket. És nem is SendClientMessage függvénnyel szeretném kiíratni õket, hisz azok csak a példában szerepelnek. Szóval ezt szeretném valahogyan megoldani, számítok a segítségetekre! (OFF-okat mellõzzük, köszönöm.)


Ehhez a Bútorrendszerhez kellettek a dolgok. Videó:
 

 
« Utoljára szerkesztve: 2013. Október 31. - 21:35:25 írta Dfoglalo »

DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)
« Válasz #1 Dátum: 2013. Október 28. - 11:31:06 »
0 Show voters
Nekem 44 darabot engedett, a Nemzetiség scriptemnél, tehát 44. :)

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)
« Válasz #2 Dátum: 2013. Október 28. - 11:34:21 »
0 Show voters

Nekem 44 darabot engedett, a Nemzetiség scriptemnél, tehát 44. :)
 
[/quote]
Attól még, hogy nálad annyit engedett, nem biztos, hogy annyi a határ, ha van határ. Függ a karakterlánc hosszúságától is szerintem. 44, mint limit? Kizárt... Nem limitnek való szám... 44, mint limit, pedig szinte biztosan nem limit sehol sem, egyik programnyelvben sem.

DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)
« Válasz #3 Dátum: 2013. Október 28. - 11:37:08 »
0 Show voters
Értelmezned kéne a válaszomat -.-
\"Nálam\" szó benne volt a kommentben. Hogyne függne a karakterlánc hosszúságától! Pontosan nem tudom megmondani, de utána nézek! :)

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)
« Válasz #4 Dátum: 2013. Október 28. - 11:46:19 »
+1 Show voters
http://wiki.sa-mp.com/wiki/Limits
2048 karaktert engedélyez maximum.

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)
« Válasz #5 Dátum: 2013. Október 28. - 11:59:46 »
0 Show voters

Értelmezned kéne a válaszomat -.-
\"Nálam\" szó benne volt a kommentben. Hogyne függne a karakterlánc hosszúságától! Pontosan nem tudom megmondani, de utána nézek! :)
 
[/quote]
Spoiler for ...:
Jajj de szeretem az offolókat... :facepalm:


Téma bõvítve egy új kérdéssel, amely a dologhoz kapcsolódik.


Rupert, azt már néztem (azzal kezdtem), és nem találtam meg rajta. Én viszont külön arra vonatkozóan kerestem adatot (legyen szó sorról, vagy karakterszámról), de nem találtam sajnos. De már megvan, csak azért nem láttam, mert az összes dialogra vonatkozik a dolog. Köszi. Akkor viszont hogyan oldhatom meg, hogy annál is többet írjak ki? Nyilván sehogy sem, igaz? Mert akkor sajnos marad a több oldalas megoldás, amelyet igyekeznék elkerülni...

DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)
« Válasz #6 Dátum: 2013. Október 28. - 19:37:34 »
+1 Show voters
Szerintem csak a több oldalas megoldás a jó. Máshogy szerintem nem lehet megoldani.  ;)

DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)
« Válasz #7 Dátum: 2013. Október 28. - 19:49:58 »
0 Show voters
Jó felé kapizsgálnak egyesek.
A dialog stringben (karakterláncban) lévõ karakterek számától függ a megjeleníthetõ sorok száma.
Ugye a következõ sor jelzés is már kettõ darab karaktert foglal így ha egy pontot jelenítenél meg soronként akkor 3 karakternyi hely szükséges hozzá.
Én úgy emlékszek, ellentétben a wiki-n lévõ adatnál hogy 4096 karakternél van ez a határ.
Tehát egy kis matekkal számolva 4096/3-al 1365 sor jeleníthetõ maximálisan abban az esetben ha csak egyetlen egy karakter szerepel soronként, akik meg észrevették hogy 1 kimarad (1365*3 = 4095) és oda még elférne egy karakter (1366. sornak) azoknak mondom hogy az a NULL karakter helye és az nem jelenik meg. :D
De ha tévedek, akkor ez van.  :angel:

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)
« Válasz #8 Dátum: 2013. Október 28. - 20:00:14 »
0 Show voters
Zsolesszka, köszönjük az elmélkedést, és az új információkat :D Az új adat, miszerint 2x annyi karakter fér el egy dialogban, eléggé jó hír a számomra. Engedd meg, hogy én is matekozzak egy kicsit. Számoljunk 22 karakterrel soronként (benne a \\n-el). Akkor 22*100 = 2200. Akkor ha igaz amit mondasz, és valóban 4096 a határ, el fog férni a dolog egy dialogban is. Imádkozzunk, hogy igazad legyen! :thumbsup: ^-^ Igaz, 100 sor csak néhány esetben lesz létrehozva, de ha mégis, az utolsó sorok egyikében sem szeretnék bugot. Azt hiszem, holnap utánajárok a dolognak, és egy kis teszt kóddal (ha addig nem elõz meg senki) leellenõrzöm az állítást, és kiíratok annyi sort, amennyit csak tudok. Habár majd számításba kell vennem azt is, hogy 10-nél, majd 100-nál +1 karaktert kapunk, ugyanis - hogy ne kelljen manuálisan számolgatnom - a dialogba a számot írnám le. Na mindegy, holnap úgyis minden kiderül - ha valóban lesz idõm és kedvem letesztelni a dolgot :angel: Azonban itt van még a 2. kérdés is, amelyet nehéz egy jelzõvel illetni, inkább nézzétek meg a példáimat, és a magyarázataimat, hátha megértitek, hogy mit szeretnék megvalósítani - és talán még megoldást is adtok rá :D Van egy olyan érzésem, hogy egy strcat függvény is lesz a dologban. Igaz, akkor a kapott eredményt nem tudom eltárolni stringekbe, de legalább ki tudom íratni õket, valamint a kiíráskor egy újabb változónak megadok egy értéket, ami a lekérdezett sor ID-je lenne. És akkor utólag vissza tudom keresni az ID alapján a sor bármely adatát. Lehet, hogy megvan a megoldás? De nem szeretnék lekérdezgetni állandóan, szóval ha a különbözõ stringekbe való eltárolásra tudnátok megoldást adni, akkor annak nagyon örülnék. Igaz, amit az elõbb a hozzászólásom írása közben kielmélkedtem, lehet, hogy megoldás lesz... Na majd kiderül.
« Utoljára szerkesztve: 2013. Október 28. - 20:14:05 írta Dfoglalo »

DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)
« Válasz #9 Dátum: 2013. Október 28. - 20:14:13 »
+1 Show voters
Azt ne feledd ha jól emlékszek akkor az inputtext vissza adja neked annak a sornak a tartalmát amelyikre kattintasz DIALOG_STYLE_LIST-nél. :D
« Utoljára szerkesztve: 2013. Október 28. - 20:34:28 írta ɐʞzssǝlosz »

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)
« Válasz #10 Dátum: 2013. Október 28. - 20:22:24 »
0 Show voters
An*@d de szeretlek Zsolesszka, te mindig meglepsz :D Na de komolyra fordítva a szót, ha ez tényleg így van, akkor ez az egész hercehurca elmehet melegebb éghajlatra, mert akkor ott lesz minden adat, ami csak kell a számomra, és nincs semmiféle plusz változó, ezer meg ezer lekérdezgetés, stb. Csak ki kell írni a dolgot. Na majd holnap ezzel kapcsolatban is munkálkodom. De ma már csak mapolok, és fórumozok, ha nem baj :P Azonban kérdéses még a max karakterek száma... Ha esetleg több lenne mint 2048 (ha jól számoltam), akkor meg lenne oldva a dolog. Így viszont túl lógok a 2048-on a 2200-ammal, és abból a 22 karakterbõl nem nagyon szeretnék engedni - inkább csak növelni. Ha viszont két karakter csökkentésére kényszerülök, hát legyen... 21 karakter kiesik ugye, mert az 2100, marad a 20, ami 2000. És akkor maga a szöveg maximum 18 karakter lehet, de én 20-at szerettem volna. De majd még eldöntöm. Esetleg 2 oldal legyen e, stb. Valkai mondhatna már egy biztos adatot a limitrõl :rolleyes: :shurg: Habár a wiki eléggé megbízható, lehet hogy valami csoda folytán még Zsolesszkának lesz igaza :D :angel:


Edit: nem ide tartozik, de akkor ezek szerint az MSGBOX-nál a kiírt szöveg az inputtext?
« Utoljára szerkesztve: 2013. Október 28. - 20:30:32 írta Dfoglalo »

DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)
« Válasz #11 Dátum: 2013. Október 28. - 20:34:43 »
+1 Show voters

Edit: nem ide tartozik, de akkor ezek szerint az MSGBOX-nál a kiírt szöveg az inputtext?
 
[/quote]Nem.
Átolvastam az egészet, és eléggé meglepõ hogy egy ilyen kis apróságon fennakadsz.
Karakterláncok összefûzésére valóban az strcat használata a célszerû de mivel új adatokat is be kell illeszteni, és elgondolkodtató hogy egy darab illetve két darab változót szeretne az ember használni így kétféle lehetõség marad:
 

new
    bigstr[4096];
bigstr = \"{0000FF}\"; // színkód elhelyezése a karakterlánc legelejére ha az egész szöveget egy színben akarod megjeleníteni.
while(mysql_fetch_row(mysql_line))
{
       format(bigstr, sizeof bigstr, \"%s%s\\n\", bigstr, mysql_line);
}
ShowPlayerDialog(playerid, 342, DIALOG_STYLE_LIST, \"teszt\", bigstr, \"Select\", \"\"); // A SendClientMessage lehet crashel ekkora karakterláncnál meg megse tudja jeleníteni.

 
Persze ebben az új adatra arra gondoltam ha netalán szeretnéd megszámozni a sorokat.  (persze ezt lehet mysql lekérdezéssel is be lehetne illeszteni de csak a példa kedvéért írtam ezt) :D



new
    bigstr[4096],
    temp[128],
    i;
bigstr = \"{0000FF}\"; // színkód elhelyezése a karakterlánc legelejére ha az egész szöveget egy színben akarod megjeleníteni.
while(mysql_fetch_row(mysql_line))
{
   format(temp, sizeof temp, \"(%d)%s\\n\", i, mysql_line);
   strcat(bigstr, temp);
   i++;
}
ShowPlayerDialog(playerid, 342, DIALOG_STYLE_LIST, \"teszt\", bigstr, \"Select\", \"\");
« Utoljára szerkesztve: 2013. Október 28. - 20:43:39 írta ɐʞzssǝlosz »

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)
« Válasz #12 Dátum: 2013. Október 28. - 20:43:09 »
0 Show voters
Talán meglepõ, de igen, én pont az apróságokon akadok fent. Egy házrendszer, meg bútorrendszer, vagy esetleg valami kis függvény mennek mint a karikacsapás, az ilyen kis apróságok viszont sokszor nem mennek. :P
 

while(mysql_fetch_row(mysql_line))
{
       format(bigstr, sizeof bigstr, \"%s%s\\n\", bigstr, mysql_line);
}

 
[/quote]
Itt mintha a lekérdezett adat mindig a soron következõ %s helyére kerülne. Ez így is történik? Csak mert erre gondoltam már párszor, de még mindig nem látom a logikáját, hogy miért ne az elsõ helyre kerülne a karakterlánc minden alkalommal. Valahogy sosem próbáltam meg e miatt... Ezek szerint hagyjam a fenébe azt a sok változót, amelyet késõbb egy stingbe tennék vagy format(bigstr, sizeof bigstr...-al, vagy pedig strcat-al?


Upsz, rosszul értelmeztem, már látom benne a logikát. Akkor amirõl én az elõbb beszéltem, kicsit másról szólt. Na mindegy is, akkor ezt most már értem. Eleinte az lesz a bigstr, hogy {00FF00}Valami\\n, aztán már {00FF00}Valami\\nSonkaaa\\n, majd {00FF00}Valami\\nSonkaaa\\nSaaajt\\n, stb., és így tovább.


A második \"megoldás\" már nem is igazán megoldás, hiszen a lényeg nem az, hogy különbözõ számot adjak neki, hanem az, hogy kiírjam a dolgokat egy dialogba, majd azokat késõbb még fel is tudjam használni, az adott adat újbóli lekérdezések nélkül. Viszont az elsõ megoldásod abszolúte tökéletes. A végén még ma megvalósítom a dolgot, habár nemsokára lépni készülõdök.


Spoiler for SendClientMessage:

// A SendClientMessage lehet crashel ekkora karakterláncnál meg megse tudja jeleníteni.

 
[/quote]
Amúgy a SendClientMessage csak egy példa volt, természetesen nem ahhoz kell, hanem dialoghoz. Igazából írhattam volna azt is a SendClientMessage helyett, csakhogy nem tudtam hogyan kéne azt leírni, hisz errõl is szól a 2. kérdésem. Meg persze a SendClientMessage rövidebb is, mint egy dialog, szóval miért ne írtam volna le azt, amelyikkel gyorsabban megvagyok? :P
« Utoljára szerkesztve: 2013. Október 28. - 20:55:05 írta Dfoglalo »

DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)
« Válasz #13 Dátum: 2013. Október 28. - 20:51:08 »
0 Show voters
Teljesen mindegy melyik verziót használod, ha sikerül mûködésre bírni.
A format függvénynél ha újra beilleszted argumentumként pont azt a változót amelyiket szeretnéd úgymond formázni, az mindaddig megtartja tartalmát amíg el nem tárolja saját magának így újra betudja illeszteni ugyanabba a változóba.
Tehát egy semmire nem való pawn kóddal szemléltetve:
 

new
   str[128];
str = \"teszt\";
for(new i; i < 100; i++)
{
   format(str, sizeof str, \"%s\", str);
   print(str);
}

 
Végig megtartja a \"teszt\" karakterláncot az str változóban.
A sorrend amirõl te beszélsz az csak annyi hogy milyen sorrendben helyezed el az argumentumokat a format függvény legvégén:
 
 bigstr, mysql_line);
mysql_line, bigstr);

 
Edit:
Sajnos arra nem emlékszek hogy valóban elég csak egyetlen egy színkódot elhelyezni a legelsõ sorban és valóban az összes sor olyan színû lesz DIALOG_STYLE_LIST -nél a ShowPlayerDialogban, ezt le kell tesztelni mivel kopnak az emlékek sajna ahogy egyre kevesebbet foglalkozok samp-al.  :(
« Utoljára szerkesztve: 2013. Október 28. - 21:00:54 írta ɐʞzssǝlosz »

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
DIALOG_STYLE_LIST Limit & Változó nevének megváltoztatása (?)
« Válasz #14 Dátum: 2013. Október 28. - 21:01:21 »
0 Show voters
Köszi ezt a plusz példát, de már leesett a dolog az elsõ alapján is - végül. :P De még a plusz példád elõtt :D Nos, akkor
 
while(mysql_fetch_row(mysql_line))
{
       format(bigstr, sizeof bigstr, \"%s%s\\n\", bigstr, mysql_line);
}

 
ilyesmit fogok használni. Gyorsan beteszem ezt a pár mapot meg kocsit a módba, aztán ha még lesz idõm, nekilátok a dolognak. Ha mégsem, akkor majd holnap. :P Amint sikerült megcsinálnom a dolgot, értesítem róla a kedves fórumozókat egy csodálatos hozzászólás keretein belül. A maradék dolog pedig csak a maxium karakterek száma... Valaki egy pontos, alátámasztott adatot nem tudna közölni végre? :D :hmmm:

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal