Witaj Wesnothańczyku
Zobacz temat
 Drukuj temat
WML- pytania i odpowiedzi
kasim
Mam pytanie. Jak zrobić żeby atak był dostępny tylko w obronie? Skleciłem coś takiego i nie działa, i chyba nie może działać, pomógłby ktoś?
Pobierz kod źródłowy  Kod źródłowy
#define WEAPON_SPECIAL_DEFENDONLY
      [dummy]
         id=defendonly
         name= _ "defend only"
         description= _ "This attack can only be used defensively."
            name_inactive= _ "defend only"
         description_inactive= _ "This attack can only be used defensively."
         #value=0
         #cumulative=no
         #active_on=defend
         #apply_to=self
      [/dummy]
#enddef


 
Smok
Nie widzę powodu, dla którego ten kod miałby nie działać. Nie wiem też jaki ma on związek z twoim pytaniem.
https://wiki.wesn...nittypewml
Nie widzę sposobu, aby zablokować użycie ataku w ofensywie, ale możesz zrobić event, który na czas ruchu właściciela jednostki np. mocno obniży celność ataku.
 
Jarom
Cały kod blokujący atak w ofensywie wygląda tak:
Pobierz kod źródłowy  Kod źródłowy
attack_weight=0



i wrzuca się go bezpośrednio do [attack]. To co ty napisałeś daje tylko nic nie robiącą zdolność. Tag [dummy] nie robi nic poza pokazywaniem, że jednostka ma zdolność o jakiejśtam nazwie i opisie.
Edytowane przez Jarom dnia 08-06-2017 16:17
 
Smok
Jarom napisał(a):
Cały kod blokujący atak w ofensywie wygląda tak:
Pobierz kod źródłowy  Kod źródłowy
attack_weight=0



i wrzuca się go bezpośrednio do [attack]. To co ty napisałeś daje tylko nic nie robiącą zdolność. Tag [dummy] nie robi nic poza pokazywaniem, że jednostka ma zdolność o jakiejśtam nazwie i opisie.

Twoja metoda zadziała tylko w przypadku gdy jednostką steruje ai.
 
Jarom
Nieprawda. Sprawdzałem. Atak w ogóle nie pokaże się w oknie walki.
 
kasim
Dzięki za pomoc, już działa.
 
kasim
ten efekt nie działa:
Pobierz kod źródłowy  Kod źródłowy
[effect]
apply_to=defense
replace=yes
frozen=45
[/effect]



wie ktoś co zrąbałem? jakby co ten efekt ma zamieniać jednostce obronę w terenie zamarzniętym z jej własnej an 45.
 
Piko
A wsadziłeś to w tag [object]? Bo effect sam od siebie nie wywołuje żadnego efektu.
Nie wiem też czy [modify_unit] zadziała w ten sposób. Zadziała za to store, {VARIABLE stored_unit.defense.frozen 45}, unstore.
 
kasim
wsadziłem to w tag [advancement],
a to:
store, {VARIABLE stored_unit.defense.frozen 45}, unstore
wsadzić zamiast tego efektu?
 
Jarom
frozen=45 powinno być wewnątrz tagu [defense]. Przeczytaj sobie jeszcze raz EffectWML. Poza tym frozen=45 oznacza w tym przypadku 55% obrony terenowej na lodzie.
 
kasim
dzięki Jarom, teraz działa.
 
kasim
Wie ktoś jak zrobić event który dodawał by graczowi w zależności od tego jakiego przywódce wybrał, jednostki do rekrutacji?
 
Smok
Pobierz kod źródłowy  Kod źródłowy
[event]
   name = start
   #zbiera wszystkich liderów do zmiennej
   [store_unit]
      [filter]
         canrecruit = yes
      [/filter]
      variable = leaders
   [/store_unit]
   #pętla po wszystkich liderach
   [foreach]
      array = leaders
      [do]
         #szuka w case jaki bonus ma dostać lider danego typu
         [switch]
            variable = this_item.type
            [case]
               #lider typu Deathblade...
               value = Deathblade
               #...dostaje listę dodatkowych jednostek do rekrutacji
               [allow_extra_recruit]
                  id = $this_item.id
                  extra_recruit = Spearman, Yeti
               [/allow_extra_recruit]
            [/case]
            [case]
               value = Dark Sorcerer
               [allow_extra_recruit]
                  id = $this_item.id
                  extra_recruit = Giant Spider
               [/allow_extra_recruit]
            [/case]
         [/switch]
      [/do]
   [/foreach]
[/event]


 
kasim
niestety nie działa, wyskakuje że brakuje variable= attribute
 
Smok
kasim napisał(a):
niestety nie działa, wyskakuje że brakuje variable= attribute


Działa, bo testowałem na czystym scenariuszu, tylko w wersji bez komentarzy. Tak poza tym, skoro gra ci powiedziała gdzie masz błąd, to sobie go po prostu popraw. Wink

Jeszcze jedno. Ten kod działa tylko w wersji Dev.
Edytowane przez Smok dnia 09-07-2017 19:07
 
kasim
Dobra już teraz działa, dzięki. I jeszcze pytanie czy da się usunąć z czatu wiadomość o jakimś lua error który wyskakuje przez ten event?
 
Smok
kasim napisał(a):
Dobra już teraz działa, dzięki. I jeszcze pytanie czy da się usunąć z czatu wiadomość o jakimś lua error który wyskakuje przez ten event?


Da się. Musisz naprawić błąd, który go powoduje, ale raczej żaden z tych błędów nie jest związany z moim kodem.

Tu masz cały kod scenariusza:
Pobierz kod źródłowy  Kod źródłowy
[multiplayer]
id = TEST
name = _ "TEST"
description = _ "Opis"
map_data = "{multiplayer/maps/2p_Aethermaw.map}"

{DEFAULT_SCHEDULE}
{DEFAULT_MUSIC_PLAYLIST}
random_start_time=yes

[event]
   name = start
   #zbiera wszystkich liderów do zmiennej
   [store_unit]
      [filter]
         canrecruit = yes
      [/filter]
      variable = leaders
   [/store_unit]
   #pętla po wszystkich liderach
   [foreach]
      array = leaders
      [do]
         #szuka w case jaki bonus ma dostać lider danego typu
         [switch]
            variable = this_item.type
            [case]
               #lider typu Deathblade...
               value = Deathblade
               #...dostaje listę dodatkowych jednostek do rekrutacji
               [allow_extra_recruit]
                  id = $this_item.id
                  extra_recruit = Spearman, Yeti
               [/allow_extra_recruit]
            [/case]
            [case]
               value = Dark Sorcerer
               [allow_extra_recruit]
                  id = $this_item.id
                  extra_recruit = Giant Spider
               [/allow_extra_recruit]
            [/case]
         [/switch]
      [/do]
   [/foreach]
[/event]

[side][/side]
[side][/side]

[/multiplayer]



Testowany na 1.13.7.
 
kasim
Możliwe że ten błąd wyskakuje bo ja tego eventu w erze używam, a nie w mapie. Czy to nie ma znaczenia?
 
Jarom
Umiejscowienie kodu eventu raczej nie to jest problemem, event to event, ale podejrzewam, że błąd pojawia się, kiedy którakolwiek ze stron ma lidera, którego nie ma na liście. Dodaj tag [else] do [switch] i może zniknie.
 
kasim
pomysł z [else] niestety nie podziałał, ale przeczytałem treść błędu i wynika z tego (przynajmniej ja tak zrozumiałem) że argument funkcji 'set_variable' powinien być jako string. Spróbowałem dać przy każdym variable to co jest po = dać do nawiasu ale także nie podziałało. Chyba se lepiej dać z tym siana, lub jakoś czyścić czat(jak się da)na początku rozgrywki.
 
Przejdź do forum:
Wygenerowano w sekund: 0.18
10,882,057 unikalne wizyty