{"id":91,"date":"2018-03-06T16:03:55","date_gmt":"2018-03-06T15:03:55","guid":{"rendered":"http:\/\/www.kompikownia.pl\/?p=91"},"modified":"2019-03-07T23:33:00","modified_gmt":"2019-03-07T22:33:00","slug":"kurs-erm-cz-ii-zmienne","status":"publish","type":"post","link":"https:\/\/www.kompikownia.pl\/index.php\/2018\/03\/06\/kurs-erm-cz-ii-zmienne\/","title":{"rendered":"Kurs ERM &#8211; cz. II &#8211; zmienne"},"content":{"rendered":"<span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Czas czytania:<\/span> <span class=\"rt-time\">5<\/span> <span class=\"rt-label rt-postfix\">minut<\/span><\/span>\n<p>Witaj. Ciesz\u0119 si\u0119, \u017ce dalej jeste\u015b zainteresowany pisaniem skrypt\u00f3w pod WoGa i nie przerazi\u0142a ci\u0119 jego fatalna sk\u0142adnia J. Plan na dzisiejszy dzie\u0144 jest dosy\u0107 rozbudowany, wi\u0119c zarezerwuj sobie co najmniej godzin\u0119 wolnego czasu. Zrozumienie tej cz\u0119\u015bci poradnika jest nieodzowne, je\u015bli b\u0119dziesz chcia\u0142 stworzy\u0107 bardziej skomplikowane skrypty ni\u017c zmiana statystyk czy przyrostu ch\u0142opa.<\/p>\n\n\n\n<p>A wi\u0119c, czego si\u0119 dzisiaj nauczymy?<\/p>\n\n\n\n<ul><li>Czym s\u0105 zmienne, jak ich u\u017cywa\u0107 i do czego s\u0142u\u017c\u0105<\/li><li>Jak wy\u015bwietla\u0107 zawarto\u015b\u0107 zmiennych w oknach dialogowych<\/li><li>Czym s\u0105 flagi, jak ich u\u017cywa\u0107 i do czego s\u0142u\u017c\u0105<\/li><li>Jak wykona\u0107 jak\u0105\u015b rzecz \u201epod warunkiem\u201d<\/li><li>Jak mo\u017cna \u0142atwo \u015bledzi\u0107 zawarto\u015b\u0107 zmiennych<\/li><\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">A wi\u0119c, czym s\u0105 zmienne?<\/h1>\n\n\n\n<p>Czasem istnieje konieczno\u015b\u0107 zapami\u0119tania czego\u015b. Np.: wsp\u00f3\u0142rz\u0119dne miejsca, w&nbsp;kt\u00f3rym toczy\u0142a si\u0119 ostatnia bitwa. Do tego w\u0142a\u015bnie s\u0142u\u017c\u0105 zmienne. Zmienne s\u0105 \u201ekom\u00f3rkami\u201d w pami\u0119ci komputera, kt\u00f3re s\u0105 zarezerwowane do przechowywania informacji. W ka\u017cdej chwili mo\u017cesz co\u015b zapisa\u0107 do zmiennej, lub co\u015b z niej odczyta\u0107. Mo\u017cesz dokonywa\u0107 tak\u017ce na nich wszystkich operacji arytmetycznych (dodawanie, odejmowanie, mno\u017cenie, dzielenie).<\/p>\n\n\n\n<p>W tradycyjnym j\u0119zyku programowania mo\u017cemy utworzy\u0107 praktycznie niesko\u0144czenie wielk\u0105 liczb\u0119 zmiennych. Niestety, tw\u00f3rcy WoGa operowali na kodzie maszynowym i&nbsp;nie mieli zbyt wielu mo\u017cliwo\u015bci. Wobec tego ilo\u015b\u0107 zmiennych w ERM jest ograniczona. Zajmijmy si\u0119 teraz rodzajami zmiennych, kt\u00f3rych b\u0119dziemy u\u017cywali najcz\u0119\u015bciej:<\/p>\n\n\n\n<ul><li>v1 \u2013 v1000 \u2013 standardowe zmienne, globalne, przechowuj\u0105ce liczby ca\u0142kowite<\/li><li>w1 \u2013 w200 \u2013 zmienne bohatera (ka\u017cdy bohater posiada w\u0142asne)<\/li><li>z1 \u2013 z1000 \u2013 zmienne przechowuj\u0105ce tekst<\/li><li>y-1 \u2013 y-100 \u2013 zmienne lokalne (tylko w wyzwalaczach)<\/li><\/ul>\n\n\n\n<p>Istnieje tak\u017ce zmienna specjalna <strong>c<\/strong>, w kt\u00f3rej przechowywany jest numer aktualnej tury.<\/p>\n\n\n\n<p>Powy\u017cej pad\u0142y dwa poj\u0119cia \u2013 zmienna globalna i zmienna lokalna. Co one oznaczaj\u0105? Ot\u00f3\u017c, zmienna globalna jest widoczna w obr\u0119bie ca\u0142ego skryptu. Mo\u017cemy odczytac jej warto\u015b\u0107 w dowolnym momencie. Podobnie w dowolnym momencie mo\u017cemy j\u0105 nada\u0107. Warto\u015b\u0107 zmiennej globalnej mog\u0105 modyfikowa\u0107 tak\u017ce inne skrypty dzia\u0142aj\u0105ce r\u00f3wnolegle (np.: je\u015bli mamy w\u0142\u0105czon\u0105 Woglifikacj\u0119). Zmienna lokalna natomiast \u201eistnieje\u201d tylko w obr\u0119bie danego wyzwalacza. Nie mo\u017cemy jej odczyta\u0107 poza wyzwalaczem. S\u0105 one tak\u017ce bezpieczniejsze. Zawsze, kiedy tylko mo\u017cemy, powinni\u015bmy u\u017cywa\u0107 zmiennych lokalnych.<\/p>\n\n\n\n<p>Istnieje oczywi\u015bcie wi\u0119cej typ\u00f3w zmiennych ni\u017c te, kt\u00f3re zosta\u0142y wypisane powy\u017cej. Zostan\u0105 one om\u00f3wione w odpowiednim czasie. Teraz nie s\u0105 nam do niczego potrzebne.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zapis, odczyt ze zmiennych<\/h2>\n\n\n\n<p>Do operacji na zmiennych wykorzystujemy receiver !!VR. Sp\u00f3jrz na poni\u017csz\u0105 linijk\u0119:<br>!!VRv10:S20;<\/p>\n\n\n\n<p>Przypisuje ona do zmiennej v10 liczb\u0119 20. Je\u015bli chcieliby\u015bmy teraz doda\u0107 10 do tej zmiennej ,napiszemy:<br>!!VRv10:Sd10;<\/p>\n\n\n\n<p>Literka d oznacza, \u017ce chcemy doda\u0107 warto\u015b\u0107 do aktualnej warto\u015bci zmiennej. Ten sam efekt osi\u0105gneliby\u015bmy, gdyby\u015bmy napisali:<\/p>\n\n\n\n<p>!!VRv10:Sv10+10;<\/p>\n\n\n\n<p>Podobnie, jak wy\u017cej, mo\u017cemy wykonywa\u0107 inne dzia\u0142ania arytmetyczne:<\/p>\n\n\n\n<p>!!VRv10:Sv10-10; odejmowanie<br>!!VRv10:Sv10*10; mno\u017cenie<br>!!VRv10:Sv10:10; dzielenie<\/p>\n\n\n\n<p>Co zrobi\u0107, je\u015bli do zmiennej v10 chcemy zapisa\u0107 wynik dodawania v20 i v30? Po prostu dodajemy te dwie zmienne:<br>!!VRv10:Sv20+v30;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wy\u015bwietlanie zawarto\u015bci zmiennych w oknach dialogowych<\/h2>\n\n\n\n<p>W poprzedniej cz\u0119\u015bci napisali\u015bmy prosty skrypt Hello World. Jak on dzia\u0142a\u0142? Gdy bohater wejdzie w lokalne zdarzenie, wy\u015bwietli si\u0119 komunikat \u201eHello World\u201d. Do wy\u015bwietlenia tekstu u\u017cyli\u015bmy tam receivera: !!IF z komend\u0105 M. (!!IF:M). Przypomnijmy sobie, jak wygl\u0105da\u0142a linijka wy\u015bwietlaj\u0105ca komunikat:<\/p>\n\n\n\n<p>!!IF:M^Hello world^;<\/p>\n\n\n\n<p>Je\u015bli chcemy wy\u015bwietli\u0107 zawarto\u015b\u0107 jakiej\u015b zmiennej, musimy u\u017cy\u0107 znaku procenta % i&nbsp;napisa\u0107 symbol zmiennej z du\u017cej litery (np.: %V10). Spr\u00f3bujmy.U\u017cyj mapy z&nbsp;poprzedniego przyk\u0142adu. Naszym celem b\u0119dzie przypisanie zmiennej V10 warto\u015bci 100 przy uruchomieniu gry. Po ka\u017cdym wej\u015bciu na pole ze zdarzeniem b\u0119dziemy odejmowali 5 od warto\u015bci zmiennej. Aktualn\u0105 warto\u015b\u0107 zmiennej b\u0119dziemy wy\u015bwietlali.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"489\" height=\"379\" src=\"https:\/\/www.kompikownia.pl\/wp-content\/uploads\/2018\/02\/zd1.png\" alt=\"\" class=\"wp-image-94\"\/><\/figure><\/div>\n\n\n\n<p>Je\u015bli tw\u00f3j skrypt dzia\u0142a, tak jak na screenach powy\u017cej, mo\u017cesz sobie pogratulowa\u0107. W\u0142a\u015bnie zrobi\u0142e\u015b kolejny krok na drodze do stania si\u0119 prawdziwym znawc\u0105 ERM.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.kompikownia.pl\/wp-content\/uploads\/2018\/02\/zd2-1.png\" alt=\"\" class=\"wp-image-95\" width=\"632\" height=\"383\"\/><\/figure><\/div>\n\n\n\n<h1 class=\"wp-block-heading\">Flagi \u2013 co to za tajemniczy tw\u00f3r?<\/h1>\n\n\n\n<p>W swoim zachowaniu flagi s\u0105 nieco podobne do zmiennych. Te\u017c przechowuj\u0105 warto\u015b\u0107. Jednak\u017ce w przeciwie\u0144stwie do zmiennych, flagi znaj\u0105 tylko dwie liczby, 1 i&nbsp;0. Wydaje si\u0119 wi\u0119c, \u017ce ich wykorzystanie mo\u017ce by\u0107 bardzo ograniczone. Po co nam co\u015b, co mo\u017ce przechowywa\u0107 tylko jedn\u0105 z dw\u00f3ch warto\u015bci? Ot\u00f3\u017c, flagi pozwalaj\u0105 nam na dwie rzeczy:<\/p>\n\n\n\n<ul><li>konstrukcj\u0119 zaawansowanych warunk\u00f3w (co to jest, dowiesz si\u0119 w nast\u0119pnym rozdziale)<\/li><li>Sprawdzenie stanu obiektu<\/li><\/ul>\n\n\n\n<p>Ciekawe zastosowanie ma flaga 1000. Odczytuj\u0105c jej warto\u015b\u0107, mo\u017cemy dowiedzie\u0107 si\u0119, czy aktualnym graczem jest komputer czy cz\u0142owiek. Jakie to ma zastosowanie? Mo\u017cemy np.: pomin\u0105\u0107 wy\u015bwietlanie okien dialogowych w wypadku, gdy skrypt wywo\u0142a gracz komputerowy. Dzi\u0119ki temu mo\u017cemy te\u017c graczowi komputerowemu da\u0107 jak\u0105\u015b premi\u0119, co by nie by\u0142o za \u0142atwo.<\/p>\n\n\n\n<p>Aby przypisa\u0107 warto\u015b\u0107 fladze, u\u017cywamy receivera IF z komend\u0105 V.<\/p>\n\n\n\n<p>!!IF:Vx\/y;<\/p>\n\n\n\n<p>x \u2013 numer flagi<\/p>\n\n\n\n<p>y \u2013 warto\u015b\u0107 (0 lub 1)<\/p>\n\n\n\n<p>Warto\u015b\u0107 flagi wy\u015bwietlamy podobnie jak warto\u015b\u0107 zmiennej. Po znaku % u\u017cywamy Fx, gdzie x to numer flagi.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Warunki<\/h1>\n\n\n\n<p>Cz\u0119sto jest tak, \u017ce jak\u0105\u015b mo\u017cemy wykona\u0107 tylko wtedy, gdy zaistniej\u0105 odpowiednie okoliczno\u015bci. Na przyk\u0142ad mo\u017cesz co\u015b kupi\u0107 w sklepie, ale tylko wtedy, gdy masz odpowiedni\u0105 ilo\u015b\u0107 got\u00f3wki przy sobie. Podobne efekty mo\u017cemy osi\u0105gn\u0105\u0107 w ERM. Za\u0142\u00f3\u017cmy, \u017ce naszym celem b\u0119dzie danie 5000 punkt\u00f3w do\u015bwiadczenia co dziesi\u0105temu bohaterowi aktywuj\u0105cemu zdarzenie.<\/p>\n\n\n\n<p>Aby sprawi\u0107, by dana komenda by\u0142a wykonywana tylko wtedy, gdy dana zmienna b\u0119dzie mia\u0142a okre\u015blon\u0105 warto\u015b\u0107, tu\u017c po receiverze dajemy znak &amp;, nast\u0119pnie nazw\u0119 zmiennej i warunek. Np.:<\/p>\n\n\n\n<p>!!IF&amp;v10&lt;10:M^Ta wiadomo\u015b\u0107 zostanie wy\u015bwietlona tylko wtedy, gdy zmienna v10 jest mniejsza od 10^;<\/p>\n\n\n\n<p>W naszym przyk\u0142adzie u\u017cyjemy zmiennej lokalnej y1, do przechowywania liczby odwiedzin.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"609\" height=\"297\" src=\"https:\/\/www.kompikownia.pl\/wp-content\/uploads\/2018\/02\/zd5.png\" alt=\"\" class=\"wp-image-98\"\/><\/figure><\/div>\n\n\n\n<p>Co si\u0119 dzieje w tym skrypcie? (numeracja linijek w opisie b\u0119dzie taka jak w&nbsp;programie)<\/p>\n\n\n\n<p>W sz\u00f3stej linijce przypisujemy zmiennej y1 warto\u015bc 1, kiedy zmienna ta ma warto\u015b\u0107 0. Musimy tak zrobi\u0107, gdy\u017c domy\u015blnie wszystkie zmienne lokalne maj\u0105 warto\u015b\u0107 zmienn\u0105. Bez tej linijki nasze wizyty by\u0142yby numerowane od zera, a nie od jedynki.<\/p>\n\n\n\n<p>Si\u00f3dma i \u00f3sma linijka to wy\u015bwietlenie odpowiedniego komunikatu w zale\u017cno\u015bci od liczby wizyt.<\/p>\n\n\n\n<p>Dziewi\u0105ta linijka przyznaje 5000 pkt do\u015bwiadczenia bohaterowi, je\u015bli jest to pi\u0105ta wizyta.<\/p>\n\n\n\n<p>Dziesi\u0105ta i jedenasta linijka zarz\u0105dzaj\u0105 warto\u015bci\u0105 zmiennej y1. Je\u015bli zmienna y1 jest wi\u0119ksza lub r\u00f3wna 5, to przypisujemy jej warto\u015b\u0107 1 (linijka 10). Je\u015bli warto\u015b\u0107 y1 jest mniejsza od 5, to zwi\u0119kszamy jej warto\u015b\u0107 o 1 (linijka 11).<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">&nbsp;ERM Vars Memory Editor<\/h1>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"609\" height=\"205\" src=\"https:\/\/www.kompikownia.pl\/wp-content\/uploads\/2018\/02\/zd4-1.png\" alt=\"\" class=\"wp-image-97\"\/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"609\" height=\"379\" src=\"https:\/\/www.kompikownia.pl\/wp-content\/uploads\/2018\/02\/zd3-1.png\" alt=\"\" class=\"wp-image-96\"\/><\/figure><\/div>\n\n\n\n<p>ERM Vars Memory Editor jest bardzo fajnym programem, kt\u00f3ry pozwala podejrze\u0107 zawarto\u015b\u0107 zmiennych w Wog. ERM Vars Memory Editor obs\u0142uguje zar\u00f3wno starszego WoGa 3.58f jak i Er\u0119. Gdy wybierzemy wersj\u0119 swojej gry, musimy troch\u0119 poczeka\u0107, a\u017c program znajdzie nasz\u0105 gr\u0119.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Zadanie domowe<\/h1>\n\n\n\n<p>Spr\u00f3buj napisa\u0107 skrypt, kt\u00f3ry:<\/p>\n\n\n\n<ul><li>Przy pierwszym odwiedzeniu zdarzenia czasowego daje bohaterowi 100 pkt do\u015bwiadczenia<\/li><li>Przy ka\u017cdym nast\u0119pnym odwiedzeniu zdarzenia czasowego daje n razy wi\u0119cej punkt\u00f3w do\u015bwiadczenia (gdzie n to liczba dotychczasowych odwiedze\u0144).<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Czas czytania:<\/span> <span class=\"rt-time\">5<\/span> <span class=\"rt-label rt-postfix\">minut<\/span><\/span> Witaj. Ciesz\u0119 si\u0119, \u017ce dalej jeste\u015b zainteresowany pisaniem skrypt\u00f3w pod WoGa i nie przerazi\u0142a ci\u0119 jego fatalna sk\u0142adnia J. Plan na dzisiejszy dzie\u0144 jest dosy\u0107 rozbudowany, wi\u0119c zarezerwuj sobie co &#8230;<\/p>\n","protected":false},"author":1,"featured_media":102,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[20],"tags":[],"_links":{"self":[{"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/posts\/91"}],"collection":[{"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/comments?post=91"}],"version-history":[{"count":4,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/posts\/91\/revisions"}],"predecessor-version":[{"id":1176,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/posts\/91\/revisions\/1176"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/media\/102"}],"wp:attachment":[{"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/media?parent=91"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/categories?post=91"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/tags?post=91"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}