Autor |
Wiadomość |
Nigi
Straż Miejska
Dołączył: 06 Mar 2006
Posty: 417
Przeczytał: 0 tematów
Pomógł: 62 razy
Ostrzeżeń: 0/3
Skąd: Internet
|
Wysłany:
Pią 17:44, 07 Maj 2010 |
|
Zdecydowanie ma znaczenie. Jak pisałem powyżej pojedynczy = przypisuje wartość, a podwójny porównuje. A więc warunek w stylu:
Kod: |
Wydarzenie && $zmienna=0 |
nie zadziała poprawnie. Ponieważ = ma najniższy priorytet (swoją drogą nie spodziewałem się, że taką kolejność priorytetów Tzar ma określoną, niezbyt to intuicyjne) to wykonany zostanie na końcu, czyli powyższy fragment równoważny jest takiemu:
Kod: |
(Wydarzenie && $zmienna)=0 |
A tego typu wyrażenie nie ma sensu, bo jest to próba przypisania wartości do wyrażenia, a nie do zmiennej, o czym zresztą Tzar poinformuje stosownym komunikatem.
Również wymuszenie innego priorytetowania nawiasami nie rozwiąże problemu i np wyrażenie
Kod: |
Wydarzenie && ($zmienna=0) |
także nie będzie działało poprawnie, bo $zmienna zawsze będzie miała wartość 0 (w końcu owa wartość jest ustawiana właśnie w tym warunku) i cały warunek nigdy nie będzie spełniony.
Podsumowując, konieczne jest użycie podwójnego znaku równości :>
|
Post został pochwalony 1 raz
|
|
|
|
|
|
Cyrek
Dołączył: 10 Kwi 2010
Posty: 178
Przeczytał: 0 tematów
Pomógł: 10 razy
Ostrzeżeń: 0/3
|
Wysłany:
Pią 18:03, 07 Maj 2010 |
|
Nigi napisał: |
Ze zdziwieniem zauważyłem brak tych dwóch zmiennych w instrukcji. Dopisałem je, ale póki co nie mogę wrzucić nowej wersji na breathtaken, więc update musi poczekać.
W każdym razie, jak sam zauwazyłeś, było to wyjaśniane na stronie 7 tego tematu... Co do "ruchomości" tego pola, to proponowałbym tego typu wyrażenie:
Kod: |
$health = (($x<xmin>$xmax) || ($y<ymin>$ymax))*$health |
Jeśli porównasz to z poprzednim z siódmej strony, to zauważysz, że jedynie dopisałem $ w odpowiednich miejscach - istotnie, jeśli zamiast stałych wartości xmin/xmax/ymin/ymax, wpiszesz nazwy zmiennych, to potem zależy tylko od ciebie jakie wartości tym zmiennym przypiszesz.
A jeśli chodzi o to "coś" co by ustawiało wartości tych zmiennych, to tu już zależy wszystko od ciebie i tego co chcesz zrealizować. |
Dałem wyrażenie dla obiektu jednostki
Kod: |
$health = (($x<a>$b) || ($y<c>$d))*$health |
Dałem wyrażenie dla obiektu mag
Kod: |
$a = $x+1 &&
$b = $x-1 &&
$c = $y+1 &&
$d = $y-1 && |
I obiekt w obszarze ustawiłem maga i odległość 1
Gdy coś podejdzie do maga wyjeb uje grę xd
1) dlaczego || (or) a nie && (and) to chyba wtedy jest cała mapa?
2) co określa w tym wyrażeniu ile życie odbiera jednostce?
@Edit
LOL ale te forum g łupie zmienia to co napisałem
[link widoczny dla zalogowanych]
Jak pisałem post zamiast && było ||
zmieniło na
Kod: |
$health = (($x<a>$b) || ($y<c>$d))*$health |
|
Post został pochwalony 0 razy
Ostatnio zmieniony przez Cyrek dnia Pią 18:19, 07 Maj 2010, w całości zmieniany 13 razy
|
|
|
|
Nigi
Straż Miejska
Dołączył: 06 Mar 2006
Posty: 417
Przeczytał: 0 tematów
Pomógł: 62 razy
Ostrzeżeń: 0/3
Skąd: Internet
|
Wysłany:
Pią 20:00, 07 Maj 2010 |
|
Cyrek napisał: |
Dałem wyrażenie dla obiektu jednostki
[link widoczny dla zalogowanych]
Dałem wyrażenie dla obiektu mag
Kod: |
$a = $x+1 &&
$b = $x-1 &&
$c = $y+1 &&
$d = $y-1 && |
|
Poszczególne wyrażenia oddziel średnikami, a nie &&.
Cyrek napisał: |
1) dlaczego || (or) a nie && (and) to chyba wtedy jest cała mapa? |
Zależy czy chcesz wydzielić prostokątny obszar czy wszystko poza nim. W przypadku || chodzi o sprawdzenie kiedy obiekt będzie poza tym obszarem, czyli kiedy przynajmniej jeden z warunków krańcowych obszaru będzie spełniony. W przypadku z && dokładnie odwrotnie (oczywiście gdy również wartości brzegowe z którymi współrzędne są porównywane zostaną dostosowane).
Cyrek napisał: |
2) co określa w tym wyrażeniu ile życie odbiera jednostce? |
Logika i równoważność danych różnych typów :)
Zauważ, że całe wyrażenie w nawiasie, gdzie porównywane są wartości współrzędnych z brzegami obszaru, jest wyrażeniem logicznym, które może przyjmować wartość true/prawda lub false/fałsz. Te wartości są równoważne z liczbami 1 (prawda) i 0 (fałsz). I właśnie z tej równoważności korzystam układając powyższe równanie; dzięki temu można całość uprościć do dwóch przypadków:
$health = 1*$health
lub
$health = 0*$health
W zależności od wartości jaką przyjmie wyrażenie logiczne zawarte w tym równaniu. Czyli jak łatwo zauważyć życie jednostki albo pozostanie bez zmian, albo przyjmie wartość 0.
Jeśli chcesz konkretną wartość życia zabierać za każdym wywołaniem tego wyrażenia, to zmodyfikuj całość tak, by po uproszczeniu przyjmowało dwa stany:
$health = $health - 1*x
lub
$health = $health - 0*x
gdzie x to ilość życia jaką ma tracić.
|
Post został pochwalony 0 razy
|
|
|
|
Quinn
Dołączył: 18 Kwi 2010
Posty: 69
Przeczytał: 0 tematów
Pomógł: 5 razy
Ostrzeżeń: 0/3
Płeć:
|
Wysłany:
Pią 20:01, 07 Maj 2010 |
|
Mashromallow napisał: |
Zrób coś takiego:
W regule, która sprawia, że przegrywasz wpisz dalej (po wydarzeniu, które ją aktywuje):
&& $zmienna=0
czyli jeśli wydarzenie było Obiekt zniszczony to musisz wpisać
Obiekt zniszczony && $zmienna=0
A gdy ujawniasz obiekt to w akcji daj Wyrażenie i wpisz
$zmienna=1
Czyli:
1 Akcja: ujawnij obiekt
2 Akcja: Wyrażenie $zmienna=1
Jeśli jeszcze nie zajarzyłeś:
Reguła, której warunkiem jest "Obiekt zniszczony" (ten, który ma przeżyć):
Warunek:
Kod: |
ObiektZniszczony && $zmienna=0 |
Akcja:
Zamiast ObiektZniszczony wpisz odpowiednią nazwę wydarzenia
Reguła, która ujawnia jednostkę.
Warunek: tego nie wiem, ty musisz wiedzieć
Akcje:
Ujawnij obiekt
Wyrażenie, w którym wpisz:
|
Jak możesz to zrób to na mojej mapce i mi wyślij ja to próbowałem robić ale mi coś dziwnego wyszło i wszystko mi sie pomieszało zrób to na mojej mapce to już bede wiedział jak to robić.
|
Post został pochwalony 0 razy
|
|
|
|
Mashromallow
Dołączył: 26 Kwi 2009
Posty: 26
Przeczytał: 0 tematów
Pomógł: 4 razy
Ostrzeżeń: 0/3
Skąd: nie pamiętam ;/ Płeć:
|
Wysłany:
Pią 20:33, 07 Maj 2010 |
|
Ekhm... w sumie mogę, ale wyślij mi twoją mapę ;]. I dzięki Nigi, już rozumiem o co chodzi .
PS. Ostatnio zmieniony przez Cyrek dnia Pią 18:19, 07 Maj 2010, w całości zmieniany 13 razy <-- LOL xD
|
Post został pochwalony 0 razy
Ostatnio zmieniony przez Mashromallow dnia Pią 20:36, 07 Maj 2010, w całości zmieniany 1 raz
|
|
|
|
Quinn
Dołączył: 18 Kwi 2010
Posty: 69
Przeczytał: 0 tematów
Pomógł: 5 razy
Ostrzeżeń: 0/3
Płeć:
|
Wysłany:
Pią 23:25, 07 Maj 2010 |
|
[link widoczny dla zalogowanych]
to ta mapka
|
Post został pochwalony 0 razy
|
|
|
|
Mashromallow
Dołączył: 26 Kwi 2009
Posty: 26
Przeczytał: 0 tematów
Pomógł: 4 razy
Ostrzeżeń: 0/3
Skąd: nie pamiętam ;/ Płeć:
|
Wysłany:
Nie 10:21, 09 Maj 2010 |
|
Faktycznie mogłeś mieć problemy, ponieważ jedna jednostka była ukryta a druga nie Zrobiłem dwa oddzielne wydarzenia i dwie oddzielne reguły i jest dobrze.
Kod: |
http://www.speedyshare.com/files/22342186/Age_of_Empires_by_Mashromallow.wmp |
|
Post został pochwalony 0 razy
|
|
|
|
Quinn
Dołączył: 18 Kwi 2010
Posty: 69
Przeczytał: 0 tematów
Pomógł: 5 razy
Ostrzeżeń: 0/3
Płeć:
|
Wysłany:
Nie 13:10, 09 Maj 2010 |
|
Wszystko gra dzięki wielkie
|
Post został pochwalony 0 razy
|
|
|
|
Cyrek
Dołączył: 10 Kwi 2010
Posty: 178
Przeczytał: 0 tematów
Pomógł: 10 razy
Ostrzeżeń: 0/3
|
Wysłany:
Śro 20:17, 12 Maj 2010 |
|
Witam mam nowy problem, dziękuje za wytłumaczenie poprzedniego nie domyślił bym się że równanie można w ten sposób odczytać(jako 1 i 0).
Moj nowy problem jest zapewne też banalny ale nie potrafię znaleźć rozwiązania.
Otóż jak włączyć skrypty si w odpowiednim momencie? @setai(x,y)? Jeżeli tak to jak wykorzystać bo coś mi nie wychodziło.
|
Post został pochwalony 0 razy
|
|
|
|
Mashromallow
Dołączył: 26 Kwi 2009
Posty: 26
Przeczytał: 0 tematów
Pomógł: 4 razy
Ostrzeżeń: 0/3
Skąd: nie pamiętam ;/ Płeć:
|
Wysłany:
Czw 9:55, 13 Maj 2010 |
|
Warunek: jaki potrzebujesz
Akcja: Wyrażenie:
jak pisałeś
jeśli o to chodzi ;]
|
Post został pochwalony 0 razy
|
|
|
|
Cyrek
Dołączył: 10 Kwi 2010
Posty: 178
Przeczytał: 0 tematów
Pomógł: 10 razy
Ostrzeżeń: 0/3
|
Wysłany:
Czw 12:48, 13 Maj 2010 |
|
Mashromallow napisał: |
Warunek: jaki potrzebujesz
Akcja: Wyrażenie:
jak pisałeś
jeśli o to chodzi ;] |
Najpierw chciałem sprawdzić czy to działa dałem warunek 1 wyrażenie @setai(3,10) i chuj nie działa... nie wyświetla się komunikat ze gracz włączył pełną pomoc si czy coś takiego i wieśniacy tez nie idą pracować. ani nic
|
Post został pochwalony 0 razy
|
|
|
|
Nigi
Straż Miejska
Dołączył: 06 Mar 2006
Posty: 417
Przeczytał: 0 tematów
Pomógł: 62 razy
Ostrzeżeń: 0/3
Skąd: Internet
|
Wysłany:
Czw 14:03, 13 Maj 2010 |
|
@setai nie służy do włączania/wyłączania pomocy SI dla gracza, tylko do wyboru skryptu dla komputera. Jak mnie pamięć nie myli, to drugi argument oznacza skrypt wg kolejności w jakiej są one umieszczone w edytorze w mapa->królestwa->SI.
|
Post został pochwalony 0 razy
|
|
|
|
Cyrek
Dołączył: 10 Kwi 2010
Posty: 178
Przeczytał: 0 tematów
Pomógł: 10 razy
Ostrzeżeń: 0/3
|
Wysłany:
Czw 16:54, 13 Maj 2010 |
|
Nigi napisał: |
@setai nie służy do włączania/wyłączania pomocy SI dla gracza, tylko do wyboru skryptu dla komputera. Jak mnie pamięć nie myli, to drugi argument oznacza skrypt wg kolejności w jakiej są one umieszczone w edytorze w mapa->królestwa->SI. |
Kod: |
odpowiednim momencie |
Czyli np w 30 minucie gry.
|
Post został pochwalony 0 razy
|
|
|
|
Nigi
Straż Miejska
Dołączył: 06 Mar 2006
Posty: 417
Przeczytał: 0 tematów
Pomógł: 62 razy
Ostrzeżeń: 0/3
Skąd: Internet
|
Wysłany:
Czw 19:20, 13 Maj 2010 |
|
=== Reguła 1 ===
Warunek: 1
Akcja: Ustaw zegar (wartość 0, odliczanie niezaznaczone, nazwa akcji: "Zegar")
=== Reguła 2 ===
Warunek: Zegar>=30*60*1000
Akcje: wg potrzeb
|
Post został pochwalony 0 razy
|
|
|
|
Cyrek
Dołączył: 10 Kwi 2010
Posty: 178
Przeczytał: 0 tematów
Pomógł: 10 razy
Ostrzeżeń: 0/3
|
Wysłany:
Czw 20:33, 13 Maj 2010 |
|
Nie kumasz mi chodzi żeby komp WŁĄCZYŁ SKRYPTY SI W ODPOWIEDNIM MOMENCIE to znaczy chodzi mi o AKCJE jaką trzeba zrobić. Wiem ze to możliwe bo wiedziałem w któreś kampanii.
|
Post został pochwalony 0 razy
Ostatnio zmieniony przez Cyrek dnia Czw 21:25, 13 Maj 2010, w całości zmieniany 1 raz
|
|
|
|
|