Portál AbcLinuxu, 21. května 2025 19:22

wesnoth wml - zprávy, dialogy jednotek a výběrové dotazy

13.9.2007 15:49 | Přečteno: 935× | wesnoth | poslední úprava: 28.9.2007 07:42

Pomocí skriptu lze s uživatelem komunikovat. Lze mu zobrazit zprávu nebo dotaz s výběrem. Zpráva se může tvářit jako informační dialog nebo jako řeč některé jednotky. Nejčastěji se tak simuluje rozhovor několika jednotek mezi sebou, čímž se uživatel nenápadně uvede do příběhu a poskytnou se mu potřebné informace. Všechny dialogy a dotazy se dělají pomocí elementu [message].

Zpráva

Zadaný text se objeví jako zpráva pro uživatele.

    [message]
        speaker=narrator
        message = "This is example of message box."
    [/message]

Dialog jednotky

Zadaný text se zobrazí jako text, který pronáší určená jednotka. Jednotka se určuje pomocí její vlastnosti description (jméno jednotky, které se nepřekládá).

    [message]
        speaker=unit-description
        message = "This is example of unit dialog."
    [/message]

Dialog leadera v multiplayeru

U leadera v multiplayeru je ten problém, že jeho description není předem znám, závisí na tom, kdo za stranu hraje. Lze si ale vypomoci malý trikem, který není nikde popsaný, ale vypozoroval jsem ho studiem cizích scénářů. Řeší se to uvedením strany, kterou leader vede a vlastností canrecruit, která je pravdivá právě jen u leadera.

    [message]
        side=1
        canrecruit=1
        message = "This is example of leader dialog."
    [/message]

Dotaz s výběrem

Chvíli jsem pátral jak ve WML udělat dotaz s výběrem, nikde jsem nenašel příklad tak jeden poskytuji. Jedná se o výběr jedné jednotky ze dvou, která se má vytvořit. Tak je např. možno do hry dostat jednu mimořádnou jednotku na vysoké úrovni (dle preferencí hráče), kterou není možno rekrutovat.

    [message]
        speaker=narrator
        message = "Select your friend."
        [option]
            message = "Paladin"
            [command]
                [unit]
                    side=1
                    type=Paladin
                    x,y=10,10
                [/unit]
            [/command]
        [/option]
        [option]
            message = "Elvish Sylph"
            [command]
                [unit]
                    side=1
                    type=Elvish Sylph
                    x,y=10,10
                [/unit]
            [/command]
        [/option]
    [/message]

Pozor: Toto nelze jednoduše použít v multiplayeru. Při hře přes síť na tom často spadnou připojení spoluhráči s chybovou hláškou The file you have tried to load is corrupt. Žádné řešení jsem nenalezl, v multiplayeru pravděpodobně není možno dát hráči něco na výběr.

Aby se tak nestalo, je potřeba splnit nějaké podmínky. Ty nejsou nikde přesně uvedené, takže jen co jsem vypozoroval ve vývojové verzi (1.3.8) bez nároku na přesnost:

Formátování textu

Mezery se zachovávají, tedy kolik jich uděláte, tolik jich vidíte, neslučují se v jednu jako je tomu v HTML.

Zalomení řádku lze provést fyzickým zalomením řádku ve zdrojáku. Žádný zástupný znak neexistuje. Vzhledem k zachovávání mezer to značně znepřehledňuje odsazený zdrojový kód. Řeším tak, že si v eventu prestart vytvořím proměnnou $BR která obsahuje jen znak zalomení a tu pak používám jako zástupný znak.

Prázdný řádek nejde udělat dvěma zalomeními řádku za sebou, sloučí se v jedno zalomení. Stačí ale vložit mezeru mezi dvě zalomení.

Na začátku řetězce nesmí být parametr makra, to končí s chybou. Opět si lze vypomoci mezerou, která se vloží před parametr. Text se sice trochu odsadí, ale je to lepší než nic.

"{PARAMETR} nelze, končí chybou"
" {PARAMETR} lze"

Pomocí speciálních sekvencí lze zvýraznit řádek textu. Tyto sekvence musí být na začátku řádku a řádek je obarvený až do konce. Tyto sekvence jsou:

       

Hodnocení: 22 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

David Heidelberg avatar 13.9.2007 15:52 David Heidelberg | skóre: 46 | blog: blog_
Rozbalit Rozbalit vše Re: wesnoth wml - select message
Odpovědět | Sbalit | Link | Blokovat | Admin
Přemýšlel si někdy o tom, že by si to všechno napsal do jednoho zápisku?

0K!AS
Mobilní telefony a tablety s GNU/Linuxem v roce 2020. Proč byste se měli zajímat?
13.9.2007 15:54 Petr Mach | skóre: 9 | blog: Hláska
Rozbalit Rozbalit vše Re: wesnoth wml - select message
Jo a rozhodl jsem se, že to tak nechci. Důvody viz. první wesnoth zápis.
14.9.2007 00:57 qk | skóre: 15 | blog: qk_develop
Rozbalit Rozbalit vše Re: wesnoth wml - zprávy, dialogy jednotek a výběrové dotazy
Odpovědět | Sbalit | Link | Blokovat | Admin
Nemuzu si pomoct, ale nic svetobornyho o wesnothu si nenapsal, wiki ma vse podstatne o wml v sobe a musim rict,ze rozhodne uzitecnejsi by bylo kdyby sis prosel standardni makra poskytovany utils.cfg a treba je to popsal co ktery strucne dela a tim ukazal jak je wml mocnej nastroj pro tvorbu map a kampani.(uff, byl to boj vtesnat to do jedny vety :)
14.9.2007 02:18 Petr Mach | skóre: 9 | blog: Hláska
Rozbalit Rozbalit vše Re: wesnoth wml - zprávy, dialogy jednotek a výběrové dotazy
Az opustis plane teoretizovani a zkusis neco praktickeho udelat, zjistis, ze budes kazdou chvili znacne tapat, protoze pro prakticke pouziti tam spousta informaci jaksi chybi a budes je hledat kde se da. Cast chybejicich informace, priklady a prakticka reseni (toho co jsem potreboval a resil) najdes zde. Jenze tohle pochopis teprve potom, co zkusis neco poradneho udelat a nespokojis se jenom s demonstracnim hello word.

Standardni makra jsou jednoducha a zrejma na prvni pohled, zadny popis nepotrebuji, naopak mi slouzi jako inspirace pro prakticka reseni.
14.9.2007 10:17 qk | skóre: 15 | blog: qk_develop
Rozbalit Rozbalit vše Re: wesnoth wml - zprávy, dialogy jednotek a výběrové dotazy
plane teoretizovani? :) Rekl bych ze sem udelal vic praktickeho do wesnothu nez ty. Akorat spis se hrabu primo v kodu, ale pro testovani si pisu i scenare a vzdycky my wiki stacila.
Pokud myslis ze chybi nejake informace nebo priklady, tak je pis primo do wiki, rozhodne budou uzitecnejsi nez tady.
14.9.2007 11:15 Petr Mach | skóre: 9 | blog: Hláska
Rozbalit Rozbalit vše Re: wesnoth wml - zprávy, dialogy jednotek a výběrové dotazy
Kdo toho udelal vic nemohu posoudit, do kodu se nehrabu. Jestli se do nej hrabes, prosim o opravu letiteho problemu, tj. nefungujici pravdepodobnosti. Preci jen je ostuda, kdyz se jednotky s pravdepodobnosti zasahu 70 % s celkovym poctem utoku 12 trefi jen jednou, coz je zhruba 10% uspesnost.

Wiki je referencni a chybi v ni mnoho praktickych informaci. Delat z referencni prirucky wml tutorial si netroufam, radsi si hraju na vlastnim pisecku. Je zajimave, kolik je tu lidi, kteri mi prikazuji co mam delat, to bude nejaka kolektivni nemoc na abclinuxu, ne? :-)
14.9.2007 16:49 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: wesnoth wml - zprávy, dialogy jednotek a výběrové dotazy
nebude to tym, ze tam vplyvaju aj ine faktory ? napr. ak utocnik ma sancu zasahu 70% a obet ma zase sancu uhnut sa 85%, tak konecna sanca zasahu bude 10,5% (ak pocitam spravne ;) )
14.9.2007 16:58 qk | skóre: 15 | blog: qk_develop
Rozbalit Rozbalit vše Re: wesnoth wml - zprávy, dialogy jednotek a výběrové dotazy
ne, tak to ve wesnothu nefunguje, obet ma pouze protekci, ktera snizuje zpusobene zraneni.
Jinak ale delaly se dokonce nejaky testy na tu pravdepodobnest a je to jen emocialni dojem, cisla jsou rozlozeny rovnomerne.
14.9.2007 17:44 Petr Mach | skóre: 9 | blog: Hláska
Rozbalit Rozbalit vše Re: wesnoth wml - zprávy, dialogy jednotek a výběrové dotazy
Dojem to rozhodne neni. Za jak dlouho se ty statistiky delaly? Mozna ze dlouhodobe to vychazi, ale kratkodobe, treba behem ofenzivy to selhava. Kdyz 4 magove 3x zautoci na polomrtveho trpaslika, kazdy s pravdepodobnosti zasahu 70 % a trpaslik prezije (jeden zasah), prestoze by ho mel teoreticky skolit jeden mag dvema zasahy, tak to v poradku neni a ve wesnothu se to stava neprijemne casto. Generator nahodnych cisel v nem nefunguje pro potreby wesnothu dobre, mel by davat odpovidajici vysledky nejen dlouhodobe, ale i kratkodobe.
14.9.2007 11:49 Petr Mach | skóre: 9 | blog: Hláska
Rozbalit Rozbalit vše Re: wesnoth wml - zprávy, dialogy jednotek a výběrové dotazy
Jenom pro příklad, zkus mi na té wiki třeba najít najít to co jsem řešil včera. Takovou zdánlivě obyčejnou věc. Jak spustit událost v určitém kole u určité strany. Nikde to napsané není a vyzkoušel jsem si několik slepých nefunkčních cest (typu vnořený event "side turn" v eventu "turn") a ztratil spoustu času (metoda pokus omyl je velmi zdlouhavá, při každé změně skriptu je nutné restartovat celou hru, a spuštění trvá velmi dlouho, proč?), než jsem došel na funkční řešení.

Člověku který se hrabe uvnitř to možná přijde jasné, já se také občas divím, jak uživatelé mých programů mohou nechápat jak to nebo ono funguje, ale pro člověka neznalého wesnothu zevnitř jsou informace příliš stručné a správné postupy si musí hledat sám.
14.9.2007 16:44 qk | skóre: 15 | blog: qk_develop
Rozbalit Rozbalit vše Re: wesnoth wml - zprávy, dialogy jednotek a výběrové dotazy
Kdyby sis to dobre precetl, tak vys ze si napsal pekne prasacky WML, protoze by si se docetl ve wiki u eventWML, ze existuje u eventu i udalost turn X (kde X je cislo kola) -
#  turn X' this event triggers at the start of turn X. X cannot be 1. 

restartovat celou hru? :) zkus si precist parametry u spousteni wesnothu a zvlast --nocache by ti mohlo dost pomoci, pak staci jen upravit scenar za behu a jen ho znovu pustit (pouze scenar, aby se nacetl novy).
A navic si treba tim blokem o zpravach jen prebasnil wiki a nerekl ani vsechno. Proste pokud mas pocit ze neco chybi zkus se nejdrive zeptat na wesnotim foru forum.wesnoth.org v sekci wml workshop kde ti urcite poradi.
14.9.2007 17:23 Petr Mach | skóre: 9 | blog: Hláska
Rozbalit Rozbalit vše Re: wesnoth wml - zprávy, dialogy jednotek a výběrové dotazy
No to vim, turn X jsem prave pouzil jako nadrazeny pro side turn (jen jsem ti to zde nedostatecne uvedl, promin), ale neuspesne. Proto jsem to nakonec vyresil uplne jinak, viz prilusny zapisek.

Jestli bude fungovat ten parametr, tak dik za super radu.

Wiki jsem imho neprebasnil, protoze radu jak vest hovor za leadra s promenlivym description (tyka se multiplayeru, v kampani ten problem neni) tam nenajdes a chvili trvalo, nez jsem to v nejakem scenari obkoukal. Rovnez ve wiky nenajdes priklad dotazu a z sucheho vyctu parametru je pouziti nejasne. To je jako by ses chtel ucit se delat html stranky jen podle DTD.

Do workshopu v pripade nouze nejvyssi chodim, uz jsem tak odhalil jeden wml bug :-). Ale a) odpoved nedostanu hned, obvykle az za nekolik hodin nebo dalsi den (cas mam vetsinou az po nocich), coz pri mnozstvi nejasnosti neni mozne, misto dvou dnu bych na tom stravil tak dva tydny, sam na to prijdu driv a b) neni imho zadouci, aby se tam opakovane pokladaly stejne dotazy. Imho je lepsi typicke problemy sepsat, coz prave delam a tudiz mi to zbytecne neprijde.

Pocit ze neco chybi mam furt. Treba kde je popsano jake interni promenne a kdy (treba v kterem eventu) jsou k dispozici? Zrejme nikde a clovek to musi pracne vydobavat po ruznych mistech wiki a predevsim studiem ruznych scenaru. Nakonec, sami vyvojarit tvrdi, ze learning curve je mizerna. Imho je to hlavne podivnym jazykem a nedostatecnou dokumentaci.
14.9.2007 08:53 vlasta neubauer
Rozbalit Rozbalit vše Re: wesnoth wml - zprávy, dialogy jednotek a výběrové dotazy
Odpovědět | Sbalit | Link | Blokovat | Admin
myslím, že tahle bezpochyby skvělá hra má nějaky vlastní web a vlastní blog nebo fórum kde by jste mohl přispívat na dané téma do aleluja a ještě by vás za to pochválili

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.