|
WML- pytania i odpowiedzi
|
| Sylar |
Dodany dnia 12-06-2011 17:54
|

Poszukiwacz Przygód

Postów: 345
Data rejestracji: 26/06/2009 13:54
|
Czyli coś w stylu FAQ, ale mniej profesjonalnie. Umówmy się może tak: Jedna osoba zadaje pytanie w jednym poście i czeka na odpowiedź. Odpowiedź znajdować się będzie zaraz pod postem napisana przez któregoś admina albo kogoś, kto zna rozwiązanie (chyba, że wolicie edytować post z pytaniem, tylko wtedy nie będziemy wiedzieli, że jest coś nowego w tym temacie). Jeśli się to wam nie spodoba, to po prostu usuniecie ten temat, jednak wtedy liczę na to, że w zamian za jakiś czas przygotujecie coś lepszego. No to zacznę z pytaniami:
a) Dokładny opis funkcji attack i defense weight. Jak to dokładnie działa, czy jeśli ustawię to np. na 4 attack to jednostka w ataku zamiast normalnej ilości ciosów wymieni równe 4? I czy można to ustawić (i jak) jako widoczną zdolność?
b) Czy mogę ustawić oryginalny zestaw imion dla danej jednostki, a nie rasy? Czy mogę usunąć w ogóle funkcję imion dla pojedynczej, żywej jednostki?
Edytowane przez Sylar dnia 12-06-2011 17:54
|
| |
|
|
| Kanapka |
Dodany dnia 12-06-2011 23:53
|

Adept

Postów: 182
Data rejestracji: 04/06/2010 19:35
|
a ) attack_weight i defense_weight są brane pod uwagę, kiedy AI wybiera który z ataku użyć. Wieksza wartość parametru powoduje, że atak będzie cześciej używany (odpowiedni w ataku i podczas obrony), (pamiętaj, że podczas obrony to zawsze AI wybiera typ ataku, jeżeli jednostka ma atak A o wadze 100 i obrażeniach 1 oraz atak B o wadze 1 i obrażeniach 50, zostanie wybrany ten pierwszy). O ile dobrze pamiętam, wybierany jest ten atak, dla którego [potencjalne obrażenia] * [attack/defense_weight] są największe. Ten parametr nie jest widoczny, można go ustawić podczas tworzenia typu jednostki w tagu [attack] attack/defense_weight = foo ... [/attack] lub można modyfikować daną jednostkę przez [modify_unit].
b ) Nie widzę żadnego sposobu, aby ustalić unikalny zestaw imion dla jednostki. Możesz spróbować stworzyć rasę o innym id i takiej samej nazwie, (ta jednostka będzie tej rasy - dzięki temu może mieć inny zestaw imion), jednak może to prowadzić do problemów w sytuacji, kiedy chcesz wybrać wszystkie jednostki rasy X, a dany typ jednostki tak naprawdę jest rasy Y (mimo że nie widać tego na ekranie jednostki, nie wiem, czy będzie to widoczne w pomocy).
Edytowane przez Kanapka dnia 12-06-2011 23:54
|
| |
|
|
| Sylar |
Dodany dnia 13-06-2011 22:40
|

Poszukiwacz Przygód

Postów: 345
Data rejestracji: 26/06/2009 13:54
|
Kolejny problem: Przy tworzeniu pewnej mapki w edytorze bardzo zależy mi na tym, żeby gracz trzeci przebywający na środku mapy, zostawał automatycznie wybierany jako komputerowy gracz, a najlepiej żeby okna gracza trzeciego nie było w ogóle przy wyborze stron.
Wiadomo, wpisuję controller=ai. I nadal można wybierać między graczem a komputerem w oknie wyboru stron.
Z 3 misji kampanii o Dwóch Braciach podpatrzyłem pewną strukturę zastosowaną przy grupie statycznych orków.
Wygląda to tak:
[side]
no_leader=yes
side=3
team_name=evil
user_team_name=_"Enemies"
... (i tu są wymieniane jednostki z id, name, położeniem i ai-guardian
Oczywiście wiem, że do jednostki musi być podłączone ai_special=guardian
żeby aktywowała tryb "strażnika", ale nie w tym rzecz. Używam tamtego kodu, zmieniam nazwę drużyny i... nadal można wybrać stanowisko trzecie. Dopisuję controller=ai i to samo. Co powinienem dopisać, żeby poskutkowało?
PS: resztę pliku mam na ~99,9% sprawną.
Dziękuję wam obu za rady. Oczywiście pamiętajcie, że nie jest to jakiś mój osobisty temat, tylko zbiór pytań i odpowiedzi Dla Każdego (puki nie ma jeszcze prawdziwego FAQ). Jak widzicie, doświadczeni gracze znający odp. na wasze pytanie odpiszą, więc nie wahajcie się pisać pytań (oczywiście mówimy konkretnie o wml'u).
Edytowane przez Sylar dnia 14-06-2011 17:25
|
| |
|
|
| Poliuks |
Dodany dnia 14-06-2011 10:29
|

Poszukiwacz Przygód

Postów: 336
Data rejestracji: 28/07/2008 13:50
|
Spróbuj dodać linijkę allow_player=no. Nie jestem pewien, czy kolejność ma tu znaczenie, sam nie robię scenariuszy, w każdym razie umieść to pod linijką side. |
| |
|
|
| medalikarz |
Dodany dnia 17-06-2011 14:23
|

Adept

Postów: 155
Data rejestracji: 16/04/2010 11:06
|
2 - Atak zawsze musi kończyć turę dla jednostki? Nie da się tego jakoś zmienić?
Są skrypty które pozwalają odejść jednostce(umiejętność) oraz atakować raz jeszcze(umiejętność). Oba znajdziesz w erze inferno8 i Age.
|
| |
|
|
| Filar |
Dodany dnia 19-06-2011 15:26
|

Poszukiwacz Przygód

Postów: 246
Data rejestracji: 18/09/2010 23:02
|
ad. 1 http://wiki.wesno...5Blabel.5D Czyli w skórcie. Stawiasz znacznikiem [label] x,y to współrzędne text, to tekst etykiety, colour (od 1.9 color), to kolor visible_in_fog / visible_in_shroud - czy widać we mgle i całunie. Immutable - czy da się zmienić.
ad. 2 Po prostu stawiasz je znacznikiem [unit]. Nie widziałem możliwości automatycznego ustawianie. Nie bój się - ich poziom itp. nie zmieni się.
PS
Czytajcie trochę RefferenceWML, tam jest na prawdę dużo odpowiedzi na pytania związane z WML.
Edit:
Oto działający, sprawdzony kod.
Kod źródłowy[event]
name=moveto
first_time_only=no
[store_unit]
[filter]
id=silva
[/filter]
variable=silva
[/store_unit]
###########Tu następuje chwalebne rozpoznanie współrzędnych wokół dowódcy wroga. Przepraszam za brak zwięzłości kodu, inaczej nie potrafiłem. Zahaszowane poniżej linijki nie działają. Mają na celu przedstawienie działanie operacji na zmiennych.
{VARIABLE coord1x $silva.x}
{VARIABLE coord1y $silva.y}
########(VARIABLE coord2y $($silva.y+1)}
[set_variable]
name=coord2y
value=$silva.y
[/set_variable]
{VARIABLE_OP coord2y add 1}
#########{VARIABLE coord3y $($silva.y - 1)}
[set_variable]
name=coord3y
value=$silva.y
[/set_variable]
{VARIABLE_OP coord3y sub 1}
######{VARIABLE coord2x $($silva.x + 1)}
[set_variable]
name=coord2x
value=$silva.x
[/set_variable]
{VARIABLE_OP coord2x add 1}
########{VARIABLE coord3x ($silva.x - 1)}
[set_variable]
name=coord3x
value=$silva.x
[/set_variable]
{VARIABLE_OP coord3x sub 1}
[/event]
######Seria eventów mających na celu ustawienie silvy jako sojusznika po podejściu przez którąś z Twoich jednostek
#define PRZEJSCIE
[message]
speaker=silva
message="Wiesz, jestes tak piekny, ze sie do ciebie przylacze."
[/message]
[modify_side]
side=3
team_name=bat
[/modify_side]
#enddef
[event]
name=moveto
[filter]
side=1
x=$coord1x
y=$coord2y
[/filter]
{PRZEJSCIE}
[/event]
[event]
name=moveto
[filter]
side=1
x=$coord1x
y=$coord3y
[/filter]
{PRZEJSCIE}
[/event]
[event]
name=moveto
[filter]
side=1
x=$coord2x
y=$coord1y
[/filter]
{PRZEJSCIE}
[/event]
[event]
name=moveto
[filter]
side=1
x=$coord2x
y=$coord3y
[/filter]
{PRZEJSCIE}
[/event]
[event]
name=moveto
[filter]
side=1
x=$coord3x
y=$coord2y
[/filter]
{PRZEJSCIE}
[/event]
[event]
name=moveto
[filter]
side=1
x=$coord3x
y=$coord1y
[/filter]
{PRZEJSCIE}
[/event]
Jedyny haczyk: silva nie może się ruszyć (jeśli się ruszy, to nie przejdzie na twoją stronę), ale postaram się to naprawić.
Legenda:
silva - ID bohatera,k tóry ma się przyłączyć
bat - nazwa drużyny, do której ma się przyłączyć silva
Moje pytanie brzmi: Dlaczego przy użyciu tego makra: "{VARIABLE coord2x $($silva.x + 1)}" wesnoth wywala mi błąd o zbyt dużej liczbie argumentów w makrze?
EDIT: Haczyk naprawiony
Edytowane przez AxeFighter dnia 27-11-2014 16:11
|
| |
|
|
| Kanapka |
Dodany dnia 21-06-2011 20:23
|

Adept

Postów: 182
Data rejestracji: 04/06/2010 19:35
|
Domyślny poziom trudności oznacza sie gwiazdką: (kod z Dziedzica Tronu:)
Kod źródłowy difficulty_descriptions={MENU_IMG_TXT2 "units/elves-wood/fighter.png~RC(magenta>red)" _"Fighter" _"(Beginner)"} +
";*" + {MENU_IMG_TXT2 "units/elves-wood/hero.png~RC(magenta>red)" _"Hero" _"(Normal)"} +
";" + {MENU_IMG_TXT2 "units/elves-wood/champion.png~RC(magenta>red)" _"Champion" _"(Challenging)"}
Filar:
Mam wrażenie, że zastosowanie tego makra powinno wyglądać tak:
Kod źródłowy{VARIABLE coord2x ($silva.x + 1)}
Chodzi o to, że przedtem jako wartość zmiennej dawales zawartość ((zawartość silva.x) + 1), czyli zawartość (wspolrzedna numeryczna), co w sumie wygląda jak odwoływanie się do przypadkowego miejsca w pamięci.
Edytowane przez Kanapka dnia 21-06-2011 20:31
|
| |
|
|
| Filar |
Dodany dnia 21-06-2011 22:14
|

Poszukiwacz Przygód

Postów: 246
Data rejestracji: 18/09/2010 23:02
|
Dzięki, byłem pewien, że próbowałem tego zapisu, jednak teraz chciałem się upewnić i okazało się, że jest w porządku 
EDIT: Jednak miałem rację. Wartość tej tej sumy wynosi 4 1, przy czym 4 to wartość $silva.x
Edit:
Żeby dużo nie tłumaczyć: dadaj w pierwszym z moich eventów po name=moveto w nowej linijce "first_time_only=no", a następnie usuń tag "unstore_unit" wraz z jego zawartością. To wszystko jest już naprawione w kodzie u góry, tylko w Twoim scenariuszu nie. 
Typ jednostki powinieneś wpisywać taki, jaki miałeś w pierwszym scenariuszu, nawet jeśli jednostka awansowała. Nie bój się, nie zmniejszysz w ten sposób jej poziomu, pozostanie ten sam.
Edytowane przez AxeFighter dnia 27-11-2014 16:12
|
| |
|
|
| bs_grom |
Dodany dnia 29-06-2011 13:12
|

Adept

Postów: 198
Data rejestracji: 04/01/2011 13:07
|
mam pytanie.
chciałbym by jednostka mogła zaatakować inną dwa razy ale różnymi atakami. najpierw na odległość a potem wręcz (ważna jest kolejność)
np.
12-1 odległość
a potem 6-3 wręcz.
dałem jej attacks=2 by mogła atakować 2 razy
ale nie moge sprawić by jesli najpierw zaatakowal 12-1 wręcz stracił wszystkie punkty ataku.
komenda attacks_left=0 tu nie zadziałała.
bs_grom
|
| |
|
|
| Kanapka |
Dodany dnia 29-06-2011 15:58
|

Adept

Postów: 182
Data rejestracji: 04/06/2010 19:35
|
Możesz do ery dodać [event] name = attack_end, filtrować po typie jednostki i ataku meele, i w tym evencie ustawiać jednostce [attack] name = jakkolwiek_sie_on_nazywa attack_weight = 0 i następnie oddać jej punkty ruchu (jeżeli maja byc oddane) i możliwość atakowana - w ten sposób nie będzie mogła użyć ataku meele w tej turze. Następnie w [event] name = side_turn musisz wybrać wszystkie jednostki danego typu (prawdopodobnie trzeba je będzie zapakować do tablicy) i każdej ustawić z powrotem attack_weight taki, jak miał być.
Podobnie działa umiejętność Retreat któregoś goblina z EoMa (bez 'naprawiania' jednostki na początku rundy - połowę kodu znajdziesz tam.
Możliwe, że jest prostszy sposób na uzyskanie tego samego efektu (nie wiem, jak skomplikowane będzie 'naprawianie' , ale w tym momencie nie mam lepszego pomysłu. |
| |
|
|
| bs_grom |
Dodany dnia 30-06-2011 10:38
|

Adept

Postów: 198
Data rejestracji: 04/01/2011 13:07
|
dzięki zobaczę.
może dokładnie wytłumacze o co mi chodzi.
chce zrobić na użytek włany jednoskę kirasjera z atakami
12 - 3 wręcz (sieczna)
15 - 1 odleg (kłująca)
15 - 2 odleg (kłująca)
kirasjer powinien móc w ofensywie zaatakować najpierw 15 -1 a potem walka wręcz
atak 15 - 2 powinien zabierac 2 pkt ataku.
15 - 1 będzie działać tylko w ofensywie i raczej wogole dwa razy nie bedzie sie go opłacało stosować skoro jest 15 -2
Notka historyczna
kirasjerzy pózniejsi(po odrzuceniu karakolu tj walki ogniowej) przed atakiem oddawali pojedyńczą salwę z pistoletu następnie szarżowali na broń biała dlatego wolałbym gdyby atak 15 -1 był pierwszy.
nie chciałbym by kirasjer mogl zaatakowac 2x wrecz. sorry za brak polskich znakow korzystam z klawiatury ekranowej.
bs_grom
|
| |
|
|
| Kanapka |
Dodany dnia 05-07-2011 02:36
|

Adept

Postów: 182
Data rejestracji: 04/06/2010 19:35
|
a)
[event] name = moveto [filter] (nasza jednostka) (miejsce na mapie)[/filter] [unit] (to co ma się pojawić)[/unit] [message] [message] [modify_unit] [filter] (jednostka pojawiona) [/filter] side = nasza_strona [/modify_unit]
b)
Nie wiesz, czy zadziała? To sprawdź. Usuń recruit =, wpisz null, nie pisz nic. Zajmie Ci to pięć minut, a my nie będziemy musieli szukać po WMLReference. |
| |
|
|
| Sylar |
Dodany dnia 14-07-2011 13:04
|

Poszukiwacz Przygód

Postów: 345
Data rejestracji: 26/06/2009 13:54
|
Czy zdolność zapisana w ten sposób:
Kod źródłowy#define ABILITY_FENCING
[defense]
id=Sylar_fencing
multiply=2
max_value=70
name= _ "fencing"
female_name= _ "female^fencing"
description= _ "Fencing:
This unit is trained in fencing, so he have more chances to avoid enemy hits during the attack
affect_self=yes
active_on=offense
[/defense]
#enddef
Jest poprawna i będzie działać?
Chodzi w niej o to, że podczas ataku ta jednostka ma większe szanse na uniknięcie ciosu wroga (covery mnożą się razy dwa do max 70, czyli prawie wszystkie wzrosną do 70% podczas ataku, jeśli dobrze rozumiem)
Przy okazji: czy ten opis jest dobrze napisany?
Edytowane przez Sylar dnia 14-07-2011 13:04
|
| |
|
|
| Kanapka |
Dodany dnia 14-07-2011 14:02
|

Adept

Postów: 182
Data rejestracji: 04/06/2010 19:35
|
"... so it has a greater chance to avoid enemy hits while attacking" myślę że byłoby lepiej.
Wygląda, jakby miało zadziałać - przestestuj. |
| |
|
|
| Sylar |
Dodany dnia 14-07-2011 15:32
|

Poszukiwacz Przygód

Postów: 345
Data rejestracji: 26/06/2009 13:54
|
Zmodernizowałem to jeszcze tak:
Kod źródłowy#define ABILITY_FENCING
# Canned definition of the fencing ability to be included in an
# [abilities] clause.
[defense]
id=Sylar_fencing
multiply=2
max_value=70
# applies to any type if we leave it out
#apply_to=shallow_water,reef,swamp_water,flat,sand,hills,mountains,village,castle,cave,frozen,fungus
[filter_base_value]
greater_than=0
less_than=70
[/filter_base_value]
name= _ "fencing"
female_name= _ "female^fencing"
description= _ "Fencing:
This unit is trained in fencing, so it has a greater chance to avoid enemy hits while attacking"
affect_self=yes
active_on=offense
[/defense]
#enddef
Ale nadal zdolność ta nie pojawia się u jednostki, jakbym w ogóle kodu nie wpisał. Sprawdzałem kilka razy, czy na pewno dobrze wszystko wpisałem. |
| |
|
|
| Kanapka |
Dodany dnia 14-07-2011 21:45
|

Adept

Postów: 182
Data rejestracji: 04/06/2010 19:35
|
Przeglądnąłem ReferenceWML i ta umiejetność przestała wyglądać poprawnie: nie ma umiejętności takiej jak [defense] (chyba że znalazłeś w jakiejś jednostce) - mimo to powinna się wyświetlać i nic poza tym nie robić. Lista wszystkich umiejętności rozpoznawanych przez Wesnoth jest tutaj.
Tag [defense] występuje w [special]ach broni - możesz spróbować napisać specjale do wszystkich broni używanych przez tą jednostkę. Możesz też poczarować coś z dummy ability, [event] name = attack (poczatek ataku) oraz name = attack end (koniec ataku), filtrować po posiadaniu tej umiejetności i modyfikowaniu obrony jednostki w odpowiedni sposób - dzieki temu masz umiejetność zamiast weapon speciala, ale kalkulacje szans trafienia będą błędne. Moim zdaniem weapon special lepszy.
Wrzuć erę, albo przynajmniej config jednostki i plik z umiejetnościami - łatwiej szukać błędów jeżeli można załadować ere u siebie i pogrzebać w plikach, błędy czasami są spowodowane czymś dziwnym w dziwnym miejscu. |
| |
|
|
| Kanapka |
Dodany dnia 23-07-2011 16:33
|

Adept

Postów: 182
Data rejestracji: 04/06/2010 19:35
|
Kod źródłowy[filter_opponent]
[filter_weapon]
[special]
[not]
id=nocounter
[/not]
[/special]
[/filter_weapon]
[/filter_opponent]
ReferenceWml pomaga rozwiązać większość problemów tego typu. |
| |
|
|
| Heedal |
Dodany dnia 23-07-2011 16:36
|

Adept

Postów: 168
Data rejestracji: 02/05/2011 19:53
|
Kod źródłowy # terrain_liked=Ds,Ff,Hh,Uu,Rd
Po co ta linijka kodu?
Edytowane przez Heedal dnia 23-07-2011 16:36
Twórca Ery Po Upadku (Prace wstrzymane)
Twórca linii nanokombinezonu
Saurians forever!
Nick na Steam/Uplay/Origin: Heedal
|
| |
|
|
| Kuki1537 |
Dodany dnia 23-07-2011 16:46
|

Poszukiwacz Przygód

Postów: 365
Data rejestracji: 10/11/2010 21:46
|
Dla bota, żeby wchodził na bardziej korzystne dla niego tereny a nie atakował np. z bagna, a nie z wioski.
EDIT: Tak mi się przynajmniej wydaje.
EDIT2: Te literki to skróty dla każdego terenu.
Edytowane przez Kuki1537 dnia 23-07-2011 16:48
|
| |
|
|
| Filar |
Dodany dnia 23-07-2011 17:07
|

Poszukiwacz Przygód

Postów: 246
Data rejestracji: 18/09/2010 23:02
|
Ta linijka jest zahaszowana (#). Nie ma ona więc wpływu na grę. Mogła powstać np. dlatego, że autor rzeczywiście chciał wprowadzić ustawienia dla bota, ale potem zdecydował, że tymczasowo jej nie potrzebuje, ale w przyszłości może mu się przydać, dlatego nie usunął jej całkowicie. |
| |
|