|
WML- pytania i odpowiedzi
|
| AxeFighter |
Dodany dnia 21-04-2015 22:23
|

Zarządca

Postów: 1024
Data rejestracji: 31/01/2012 21:33
|
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
|
| |
|
|
| Jarom |
Dodany dnia 22-04-2015 08:51
|

Awanturnik

Postów: 584
Data rejestracji: 28/03/2014 16:24
|
Sprawdziłem, niestety nie da się tego zrobić bo #ifdefy są wykonywane na początku. Natomiast jest to:
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 |
Dodany dnia 14-05-2015 14:25
|

Przybysz

Postów: 23
Data rejestracji: 25/04/2015 17:25
|
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?
Edytowane przez Warlord dnia 14-05-2015 14:25
|
| |
|
|
| Piko |
Dodany dnia 14-05-2015 15:58
|

Opiekun

Postów: 1608
Data rejestracji: 26/07/2012 20:00
|
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 |
Dodany dnia 14-05-2015 16:01
|

Awanturnik

Postów: 604
Data rejestracji: 07/12/2014 12:26
|
Spoko
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 |
Dodany dnia 14-05-2015 21:47
|

Przybysz

Postów: 23
Data rejestracji: 25/04/2015 17:25
|
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  |
| |
|
|
| ForPeace |
Dodany dnia 14-05-2015 22:19
|

Awanturnik

Postów: 604
Data rejestracji: 07/12/2014 12:26
|
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? nie wierzę, że to była przyczyna 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 |
Dodany dnia 14-05-2015 22:38
|

Przybysz

Postów: 23
Data rejestracji: 25/04/2015 17:25
|
Myślałem że filter_opponent to filter dotyczący przeciwnika a nie broni 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ć 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 |
Dodany dnia 14-05-2015 23:29
|

Opiekun

Postów: 1608
Data rejestracji: 26/07/2012 20:00
|
Bo amountofhitpoints to w tym przypadku nazwa zmiennej wybranej przez gracza. Asfaifsduighsdkgsdfgdh też by działało.
Kod źródłowy[heal_unit]
amount=$amountofhitpoints
[/heal_unit]
Można też zapisać tak:
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
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 |
Dodany dnia 15-05-2015 16:44
|

Awanturnik

Postów: 604
Data rejestracji: 07/12/2014 12:26
|
Z tym, że tylko przy heal_unit pojawią się zielone cyfry
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 |
Dodany dnia 18-11-2016 20:05
|

Czeladnik

Postów: 82
Data rejestracji: 10/02/2011 09:58
|
Próbowałem rozgryźć problem, ale albo nie rozumiem składni WMLa albo jestem cienki jak polsilver 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  |
| |
|
|
| ForPeace |
Dodany dnia 18-11-2016 21:58
|

Awanturnik

Postów: 604
Data rejestracji: 07/12/2014 12:26
|
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.
Kod źródłowyrace= ork, goblin, troll
Oczywiście to nie rozwiązuje sprawy z negacją, zatem:
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 |
Dodany dnia 18-11-2016 22:39
|

Opiekun

Postów: 1608
Data rejestracji: 26/07/2012 20:00
|
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 |
Dodany dnia 19-11-2016 17:06
|

Czeladnik

Postów: 82
Data rejestracji: 10/02/2011 09:58
|
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  |
| |
|
|
| Piko |
Dodany dnia 19-11-2016 20:27
|

Opiekun

Postów: 1608
Data rejestracji: 26/07/2012 20:00
|
Ź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.  |
| |
|
|
| glonstons |
Dodany dnia 31-12-2016 01:53
|

Początkujący

Postów: 33
Data rejestracji: 27/10/2015 20:20
|
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 |
Dodany dnia 31-12-2016 11:38
|

Czeladnik

Postów: 50
Data rejestracji: 05/08/2015 02:01
|
Stwórz sobie jednostkę Qwerty. Wystarczą jej nazwa, opis, obrazek i cena. W kodzie jednostki Qwerty dodaj:
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 |
Dodany dnia 31-12-2016 14:38
|

Początkujący

Postów: 33
Data rejestracji: 27/10/2015 20:20
|
Dzieki wielkie za pomoc..
Edytowane przez glonstons dnia 31-12-2016 19:53
|
| |
|
|
| kasim |
Dodany dnia 25-04-2017 18:33
|

Czeladnik

Postów: 60
Data rejestracji: 04/02/2016 15:49
|
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 |
Dodany dnia 25-04-2017 18:42
|

Czeladnik

Postów: 50
Data rejestracji: 05/08/2015 02:01
|
Poczytaj o tagu binarypath. Oprócz niego potrzebujesz folderu images zamiast textures. Wtedy wystarczy ci image = "Flag1.png" |
| |
|