Witaj Wesnothańczyku
Zobacz temat
 Drukuj temat
WML- pytania i odpowiedzi
AxeFighter
Całkowicie zapomniałem o tym tagu, dzięki. jednak jak go wsadzić, by działał? Przeszukiwałem ReferenceWML pół godziny i sposobu nie znalazłem.
Ja zaczynałem jako zwykły, napalony user, pisałem często newsy. Bach! Redaktor! Więc niebywale uradowany, pisałem jeszcze więcej, dodatkowo artykuły. Nie ma co, byłem nadpobudliwy wtedy... A jak zostałem mianowany adminem, to z początku w ogóle nie chciałem nim być! Byłem przestraszony odpowiedzialnością. Bo mnie nie kręciły tytuły, tylko Wesnoth. - Sagez

https://www.youtu...QuObfTx6Cg - link zaktualizowany!
 
http://wesnoth.com.pl
Jarom
Sprawdziłem, niestety nie da się tego zrobić bo #ifdefy są wykonywane na początku. Natomiast jest to:
Pobierz kod źródłowy  Kod źródłowy
[unit_type]
    id=Ancient Lich a
    [base_unit]
        id=Ancient Lich
    [/base_unit]
    [advancefrom]
        unit=Lich
    [/advancefrom]
[/unit_type]



i działa.
Edytowane przez Jarom dnia 22-04-2015 08:52
 
Warlord
Jak rozumiem tutaj mogę was zapytać o pomoc dotyczącą niedziałającego kodu i czekać na odpowiedź?
A co jeśli poproszę was o stworzenie kodu? Chciałem stworzyć zdolność, która sprawi, że po zabiciu jednostki wroga, nasza jednostka uleczy sobie kilka punktów życia. Tak na chłopski rozum to wziąłbym tag regeneracji plus kilka filtrów, ale właśnie na filtrowaniu się specjalnie nie znam.
Konkretnie co ma robić zdolność:
Po zabiciu żywej, wrogiej jednostki, postać z tą umiejętnością wyleczy (jeśli jest co leczyć) 2 punkty życia razy poziom pokonanej jednostki (czyli zero za zerowy, dwa za pierwszy, 4 za drugi etc., chociaż zastanawiam się czy za zerowy nie dać dwa albo chociaż jeden).
Generalnie różnica w ilości wyleczonych punktów załatwiłbym tak jak dowodzenie na wyższym poziomie czyli spięte w klamrę kilka zdolności osobno przefiltrowanych dla konkretnych poziomów, tylko właśnie nie mam pojęcia jak stworzyć filter zabitej jednostki wroga oraz filter poziomu tego zabitego wroga. No i filter "żywego" a nie nieumarłego/mechanicznego/itd przeciwnika.
Pomożecie? Wink
Edytowane przez Warlord dnia 14-05-2015 14:25
 
Piko
Działanie tagu regeneracji obejmuje jedynie rozpoczęcie tury, więc nie pomoże ci on w osiągnięciu zamierzonego efektu. Zamiast tego odnajdź umiejętność żerowania, ją już łatwo ci będzie przerobić.
 
ForPeace
Spoko
Pobierz kod źródłowy  Kod źródłowy
#define ABILITY_FEEDING_ADVANCED
[dummy]
    id=feedadv
    name=_"nazwa"
    description=_"opis"
[/dummy]
[/abilities]
[event]
    name=die
    first_time_only=no
    [if]
        [variable]
            name=unit.race
            not_equals=undead
        [/variable]
        [and]
            [variable]
                name=unit.race
                not_equals=mechanical
            [/variable]
        [/and]
        [then]
            [switch]
                variable=unit.level
                [case]
                    value=0
                    {VARIABLE amountofhitpoints 0}
                [/case]
                [case]
                    value=1
                    {VARIABLE amountofhitpoints 2}
                [/case]
                [case]
                    value=2
                    {VARIABLE amountofhitpoints 4}
                [/case]
                [case]
                    value=3
                    {VARIABLE amountofhitpoints 8}
                [/case]
                [case]
                    value=4
                    {VARIABLE amountofhitpoints 16}
                [/case]
                [else]
                    {VARIABLE amountofhitpoints 32}
                [/else]                 
            [/switch]
            [heal_unit]
                [filter]
                    x,y=$x2,$y2
                [/filter]
                amount=$amountofhitpoints
            [/heal_unit]
        [/then]
    [/if]
[/event]
[+abilities]




Mam nadzieję, że zadziała.
Edytowane przez ForPeace dnia 14-05-2015 17:22
Mój ladderowy profil

"10 lat mówisz? Jak ja mówię że gram 10 lat to przychodzą ludzie i mówią że grali 15 i nic się nie znam na tej grze bo nie grałem jak PRAWDZIWI prosi grali. xD" ~Hejnewar
 
Warlord
Dzięki pe_em jesteś super Grin Ale sprawdzę czy działa dopiero jak wrócę do domu.

Edit:
W formie w jakiej mi to podałeś, nie działało. Najpierw próbowałem to jednak zrobić samemu ale poległem na filtrowaniu poziomu, niby dawałem filter_oponent ale nie działało. Później wziąłem się za przeróbkę twojego kodu, właściwie to pousuwałem tylko te tagi abilities, zamknąłem zdolność, otworzyłem event osobno i dodałem tag eventu do pliku jednostki i zadziałało. Także i tak dzięki Grin
 
ForPeace
Warlord napisał/a:
Później wziąłem się za przeróbkę twojego kodu, właściwie to pousuwałem tylko te tagi abilities, zamknąłem zdolność, otworzyłem event osobno i dodałem tag eventu do pliku jednostki i zadziałało.


Serio? Shock nie wierzę, że to była przyczyna Pfft Możesz pokazać kod zdolności oraz event?

Nie mam pojęcia, gdzie chciałeś użyć [filter_opponent]. Można go użyć tylko przy specjalnych broniach.

Jak masz event jak kill to używasz (w zależności od tego co chcesz sprawdzić i od nazwy eventu) unit.costam lub second_unit.costam w instrukcji warunkowej typu [if] albo [switch] (Kostrukcja switch-case jest bardzo fajna i nie trzeba przy niej robić if/else/if/else/if/else, tylko case/case/case/case/else. Dużo czytelniejsza i łatwiejsza.) - jeżeli chcesz wybrać różne akcje dla różnych wyników.

- albo [filter] lub [filter_second] dla jednego działania eventu tylko przy spełnionych warunkach filtra.
Edytowane przez ForPeace dnia 14-05-2015 22:20
Mój ladderowy profil

"10 lat mówisz? Jak ja mówię że gram 10 lat to przychodzą ludzie i mówią że grali 15 i nic się nie znam na tej grze bo nie grałem jak PRAWDZIWI prosi grali. xD" ~Hejnewar
 
Warlord
Myślałem że filter_opponent to filter dotyczący przeciwnika a nie broni Grin I też dla mnie jest dziwne że twoja pierwotna wersja nie działała, gdy dokładnie tak samo jest określony event feeding właśnie... a najśmieszniejsze jest to, że w moim folderze zdolności, feeding w naturalnej postaci też nie działał!
+Dzięki za tego switcha, może teraz samemu uda mi się coś zrobić Pfft I tak się zastanawiałem, skąd wiedziałeś np. że taka rzecz jak amountofhitpoints zadziała akurat tak, a nie np. zwiększy na stałe całkowitą liczbę punktów życia? Normalnie jest chyba increase przy apply_to=hitpoints...
Edytowane przez Warlord dnia 14-05-2015 22:39
 
Piko
Bo amountofhitpoints to w tym przypadku nazwa zmiennej wybranej przez gracza. Asfaifsduighsdkgsdfgdh też by działało.
Pobierz kod źródłowy  Kod źródłowy
[heal_unit]
    amount=$amountofhitpoints
[/heal_unit]




Można też zapisać tak:
Pobierz kod źródłowy  Kod źródłowy
[modify_unit]
    hitpoints=$($unit.hitpoints+$amountofhitpoints) #jak co to nie sprawdzałem w grze więc nie wiem czy zadziała
[/modify_unit]



lub
Pobierz kod źródłowy  Kod źródłowy
[object]
    [filter]
        x,y=$x2,$y2
    [/filter]
    [effect]
        apply_to=hitpoints
        increase=$amountofhitpoints
    [/effect]
[/object]



Edytowane przez Piko dnia 14-05-2015 23:32
 
ForPeace
Z tym, że tylko przy heal_unit pojawią się zielone cyfry Smile
Mój ladderowy profil

"10 lat mówisz? Jak ja mówię że gram 10 lat to przychodzą ludzie i mówią że grali 15 i nic się nie znam na tej grze bo nie grałem jak PRAWDZIWI prosi grali. xD" ~Hejnewar
 
jurijuice
Próbowałem rozgryźć problem, ale albo nie rozumiem składni WMLa albo jestem cienki jak polsilver Cool a oto i zadanie:

Jednostka posiadająca rasę IIWW_Tank posiada atak do którego doklejony jest specjal TANKRAM. Specjal ma działać wyłącznie przeciwko rasie IIWW_Tank, natomiast ma nie działać przeciwko żadnej innej (np. IIWW_Infantry, IIWW_Air).

A poniżej kod wraz z komentarzami w liniach gdzie dokonywałem prób - która linia działa a która nie działa.


#define WEAPON_SPECIAL_TANKRAM
[disable]
name=_"Tank Ram"
description=_"Can be used only vs tanks"
id=WW2_tankram
apply_to=self
[filter_opponent]
[filter_wml]
#race=IIWW_Infantry #działa

#race=(IIWW_Air || IIWW_Infantry) #nie działa

#race=!(IIWW_Tank) #nie działa

#race=!IIWW_Tank #nie działa

[/filter_wml]
[/filter_opponent]
[/disable]
#enddef




Działa mi tylko jeden przykład - ten w którym mogę wyłączyć pojedynczą rasę z dostawania obrażeń (w powyższym przypadku piechota), natomiast operatory logiczne (jednak są w internetach) zachowują się jakby ich nie było, albo to problem składni której nie ogarniam.

Proszę o pomoc bo skończyły mi się pomysły, jak ogarnąć składnię aby działało jak trzeba Sad
 
ForPeace
Nie wiem, czy operatory AND i OR działają w takiej formie (widocznie nie), natomiast z pewnością działają jako tagi [and], [or]. https://wiki.wesn...ition_Tags

Ale jeżeli już upieramy się przy prostym zapisie, możemy wypisać rasy po przecinku.
Pobierz kod źródłowy  Kod źródłowy
race= ork, goblin, troll



Oczywiście to nie rozwiązuje sprawy z negacją, zatem:
Pobierz kod źródłowy  Kod źródłowy
[filter_wml]
[not]
race=IIWW_Tank
[/not]
[/filter_wml]



Tak to powinno działać.
Edytowane przez ForPeace dnia 18-11-2016 21:58
Mój ladderowy profil

"10 lat mówisz? Jak ja mówię że gram 10 lat to przychodzą ludzie i mówią że grali 15 i nic się nie znam na tej grze bo nie grałem jak PRAWDZIWI prosi grali. xD" ~Hejnewar
 
Piko
Tak jak pe_em napisał. Tylko zamiast [filter_wml] używaj zwykłego [filter]. Jest szybsze i sprawniejsze, a działa w większości podstawowych akcji. [filter_wml] używa się dopiero wtedy, gdy wszystko inne zawiedzie.

Zarówno wypisanie race=IIWW_Infantry,IIWW_Air po przecinku, jak i powyższe z [not]em, będzie działało.
 
jurijuice
Ogromne dzięki! Działa ale wyłącznie na [filter_wml], a [filter] niestety się nie łapie.

Nie zmienia to faktu, że WML jest dla mnie nieco dziwaczny (pewnie przyzwyczajenia z C# robią swoje... no to mam prawie kompletny update, jeżeli nie dziś to jutro można się go spodziewać na serwerze Smile
 
Piko
Źle przekazałem.
W tym miejscu nie musisz pisać podwójnego filtra. [Filter_opponent] zastępuje zwykłe [filter]. Tak samo [filter_wml] chyba nie działa samo od siebie, trzeba je otoczyć zwykłym [filter]em.

WML jest najbardziej podobny do XMLa i HTMLa, do C# niekoniecznie. Ale jako ktoś kto nie jest programistą, sądzę że jest o wiele łatwiejszy do nauczenia się niż większość mainstreamowych języków. Więc choć musisz porzucić dawne przyzwyczajenia, to sądzę że nie powinno ci to sprawić problemu. Wink
 
glonstons
Jak sprawic aby w mojej erze rekrutujac np. Qwerty
Losowo wybierana byla jednostka:a, b ,c lub d.
Z gory dzieki za pomoc i przepraszam za ortografie- brak polskich znakow
 
Smok
Stwórz sobie jednostkę Qwerty. Wystarczą jej nazwa, opis, obrazek i cena. W kodzie jednostki Qwerty dodaj:
Pobierz kod źródłowy  Kod źródłowy
[event]
      name = prerecruit
      first_time_only = no
      [filter]
         type = Qwerty
      [/filter]
      [kill]
         x,y = $x1,$y1
         animate = no
         fire_event = no
      [/kill]
      {RANDOM "a,b,c,d"}
      [unit]
         x,y = $x1,$y1
         side = $side_number
         attacks_left = 0
         moves = 0
         type = $random
      [/unit]
   [/event]


 
glonstons
Dzieki wielkie za pomoc..
Edytowane przez glonstons dnia 31-12-2016 19:53
 
kasim
Jak zrobić własny obrazek do frakcji w erze? Mam w folderze dodatku obrazek, ale nie chce mi go wczytać i nie wyświetla mi go w grze.
Ta linijka wygląda tak:
image = "add-ons/Era_of_Warnwgard/textures/Flag1.png"

wcześniej próbowałem tak:
image = "textures/Flag1.png"

ale też nie działało. W folderze dodatku mam folder textures i plik Flag1.png. Jak zrobic by ścierzka do tego pliku była poprawna/żeby była ustawiona względem folderu z dodatkiem?
 
Smok
Poczytaj o tagu binarypath. Oprócz niego potrzebujesz folderu images zamiast textures. Wtedy wystarczy ci image = "Flag1.png"
 
Przejdź do forum:
Wygenerowano w sekund: 0.25
10,903,053 unikalne wizyty