{"id":82,"date":"2018-02-24T15:28:24","date_gmt":"2018-02-24T14:28:24","guid":{"rendered":"http:\/\/www.kompikownia.pl\/?p=82"},"modified":"2019-03-07T23:25:48","modified_gmt":"2019-03-07T22:25:48","slug":"kurs-erm-cz-i-wstep","status":"publish","type":"post","link":"https:\/\/www.kompikownia.pl\/index.php\/2018\/02\/24\/kurs-erm-cz-i-wstep\/","title":{"rendered":"Kurs ERM &#8211; cz I &#8211; wst\u0119p"},"content":{"rendered":"<span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Czas czytania:<\/span> <span class=\"rt-time\">4<\/span> <span class=\"rt-label rt-postfix\">minut<\/span><\/span>\n<p>Zaczynamy pierwszy wpis z serii \u201eKurs ERM\u201d. ERM jest bardzo fajnym j\u0119zykiem skryptowym, kt\u00f3ry pozwala w niezwykle du\u017cym stopniu modyfikowa\u0107 mechanik\u0119 kultowej gry Heroes of Might and Magic III. Jest to rzecz, kt\u00f3ra odr\u00f3\u017cnia WoGa od swojego konkurenta \u2013 Horn of the Abyss.<\/p>\n\n\n\n<p>ERM dosy\u0107 mocno r\u00f3\u017cni si\u0119 od tradycyjnych j\u0119zyk\u00f3w programowania. Wynika to z&nbsp;pewno\u015bci\u0105 z tego, \u017ce jego obs\u0142uga by\u0142a wprowadzana poprzez modyfikacj\u0119 kodu binarnego. Nie by\u0142o to z pewno\u015bci\u0105 proste zadanie. Niemniej, tw\u00f3rcom WoGa wysz\u0142o to znakomicie.<\/p>\n\n\n\n<p>Ten poradnik pokazuje, jak tworzy\u0107 skrypty pod WoG 3.58F. Er\u0105 i om\u00f3wieniem r\u00f3\u017cnic mi\u0119dzy WoG i Er\u0105 zajmiemy si\u0119 w jednej z ostatnich cz\u0119\u015bci.<\/p>\n\n\n\n<p>Czego dowiesz si\u0119 z tej cz\u0119\u015bci poradnika? Nauczysz si\u0119:<\/p>\n\n\n\n<ul><li>Z jakich narz\u0119dzi korzysta\u0107 przy pisaniu skrypt\u00f3w ERM<\/li><li>W jaki spos\u00f3b mo\u017cna do\u0142\u0105cza\u0107 skrypty ERM do gry w Heroes III<\/li><li>Jakie s\u0105 rodzaje polece\u0144 w ERM<\/li><li>Jak napisa\u0107 \u201eHello World\u201d w ERM<\/li><\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Przygotowanie \u015brodowiska<\/h1>\n\n\n\n<p>Proponuj\u0119, aby\u015b zainstalowa\u0142 gr\u0119 w innym folderze ni\u017c C:\\Program Files, np.: C:\\Games\\WoG. Dlaczego? Je\u015bli nie uruchomimy ERM Scriptera czy edytora map jako administrator, mimo zapisania wynik\u00f3w naszych prac do folderu maps mo\u017cemy ich tam nie znale\u017a\u0107. Dzieje si\u0119 tak, gdy\u017c Windows \u201echroni\u201d zawarto\u015b\u0107 oryginalnego C:\\Program Files przed modyfikacj\u0105 przez zwyk\u0142ego u\u017cytkownika. Te pliki s\u0105 zapisywane w specjalnym katalogu, do kt\u00f3rego \u015bcie\u017cka jest dosy\u0107 skomplikowana: C:\\Users\\[twoja nazwa]\\AppData\\Local\\VirtualStore. My nie chcemy takiej komplikacji, dlatego najlepiej zainstaluj gr\u0119 w g\u0142\u00f3wnym katalogu dysku (C:\\Games\\WoG).<\/p>\n\n\n\n<p>Narz\u0119dzia, kt\u00f3rych b\u0119dziemy u\u017cywa\u0107, mo\u017cesz \u015bci\u0105gn\u0105\u0107<a href=\"https:\/\/studenttukielcepl-my.sharepoint.com\/:u:\/g\/personal\/s087512_student_tu_kielce_pl\/EX7pDCqvdjJKv5Ha-ZJudlIBDqOr6PP31DN77aGwzfZ8MQ?e=To5Z1H\"> st\u0105d:<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Jak do\u0142\u0105czy\u0107 skrypt ERM?<\/h1>\n\n\n\n<p>Jest to podstawowe zagadnienie. W WoGu skrypt mo\u017ce by\u0107 do\u0142\u0105czony na jeden z&nbsp;trzech sposob\u00f3w:<\/p>\n\n\n\n<ul><li>Jako plik o nazwie takiej samej jak mapa, tyle \u017ce z rozszerzeniem ERM (np.: je\u015bli nasza mapa nazywa si\u0119 wyzwolenie.h3m to skrypt erm b\u0119dzie znajdowa\u0142 si\u0119 w pliku wyzwolenie.erm)<\/li><li>W zdarzeniu czasowym mapy<\/li><li>W folderze Data\/s (tam znajduj\u0105 si\u0119 skrypty Woglifikacji)<\/li><\/ul>\n\n\n\n<p>ERA (nast\u0119pca WoGa) nie obs\u0142uguje umieszczania skrypt\u00f3w w pliku zewn\u0119trznym. My si\u0119 w chwili obecnej uczymy pisania skrypt\u00f3w pod starszego WoGa 3.58F, wi\u0119c nie musimy si\u0119 przejmowa\u0107 tym ograniczeniem.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Edytory skrypt\u00f3w ERM<\/h1>\n\n\n\n<p>Skrypt mo\u017cesz pisa\u0107 w czym tylko zechcesz. Mo\u017ce to by\u0107 edytor map WoGa, czy nawet zwyk\u0142y notatnik. Jednak\u017ce wi\u0105\u017ce si\u0119 z tym brak kolorowania sk\u0142adni. Przez to znalezienie ewentualnych b\u0142\u0119d\u00f3w jest o wiele ci\u0119\u017csze.<\/p>\n\n\n\n<p>My b\u0119dziemy korzystali z edytora Erm Scripter znajduj\u0105cego si\u0119 w pakiecie ERM Tools. Link do paczki znajduje si\u0119 we wcze\u015bniejszej cz\u0119\u015bci wpisu. Jest to bardzo przyjemne w obs\u0142udze \u015brodowisko, kt\u00f3re koloruje sk\u0142adni\u0119 polece\u0144 ERM. W pakiecie znajduje si\u0119 tak\u017ce ERM Help, z kt\u00f3rego b\u0119dziemy cz\u0119sto korzystali przy pisaniu skrypt\u00f3w.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Jakie s\u0105 rodzaje polece\u0144 ERM?<\/h1>\n\n\n\n<p>Je\u015bli kiedykolwiek programowa\u0142e\u015b w \u201eprawdziwych\u201d j\u0119zykach programowania (takich jak C,C++,Java) to odrzu\u0107 ca\u0142\u0105 t\u0105 wiedz\u0119, jak\u0105 do tej pory przyswoi\u0142e\u015b! Sk\u0142adnia ERM nie ma nic wsp\u00f3lnego z tymi j\u0119zykami. Podejd\u017a do tego tak, jakby\u015b nigdy nie programowa\u0142 (je\u015bli tak jest \u2013 masz \u0142atwiej J).<\/p>\n\n\n\n<p>W ERM wyst\u0119puj\u0105 trzy g\u0142\u00f3wne rodzaje polece\u0144:<\/p>\n\n\n\n<ul><li><strong>Triggery<\/strong> (wyzwalacze) \u2013 rozpoczynaj\u0105 si\u0119 znakami !? lub !$. Wyzwalacze m\u00f3wi\u0105 o tym, kiedy dany kod ERM ma si\u0119 wykona\u0107. Wyzwalaczem mo\u017ce by\u0107 np.: wej\u015bcie do obiektu o okre\u015blonych wsp\u00f3\u0142rz\u0119dnych, aktywacja danego zdarzenia czasowego czy rozpocz\u0119cie bitwy. Wi\u0119kszo\u015b\u0107 wyzwalaczy zaczyna si\u0119 znakami !?. Oznacza to, \u017ce skrypt obs\u0142uguj\u0105cy ten wyzwalacz jest wykonywany tu\u017c po zaistnieniu zdarzenia. Np.: obs\u0142uga !?LE30\/40\/50 zostanie wykonana tu\u017c po wej\u015bciu bohatera na zdarzenie czasowe zlokalizowane na tych wsp\u00f3\u0142rz\u0119dnych. Natomiast kod obs\u0142uguj\u0105cy !$LE\/30\/40\/50 jest wykonywany na samym ko\u0144cu (po wykonaniu !?LE30\/40\/50 oraz po \u201enormalnym\u201d zachowaniu obiektu).<\/li><li><strong>Receivery<\/strong> (odbiorcy?) \u2013 rozpoczynaj\u0105 si\u0119 znakami !!. Receivery wykonuj\u0105 w\u0142a\u015bciwe dzia\u0142ania na artefaktach, bohaterach, obiektach itd. Ca\u0142y kod obs\u0142ugi Trigger\u00f3w sk\u0142ada si\u0119 z Receiver\u00f3w.<\/li><li><strong>Receivery<\/strong>, uruchamiane przy starcie scenariusza \u2013 rozpoczynaj\u0105 si\u0119 znakami !#. Tym sposobem mo\u017cemy np.: nada\u0107 nazwy w\u0142asnym obiektom, ustawi\u0107 statystyki stworze\u0144 czy zainicjowa\u0107 wst\u0119pne warto\u015bci zmiennych (zmiennym b\u0119dzie po\u015bwi\u0119cony kolejny odcinek). Receivery !# s\u0105 uruchamiane tylko wtedy, gdy uruchamiamy now\u0105 gr\u0119. Komendy te nie s\u0105 wykonywane, kiedy wczytujemy gr\u0119 z zapisu.<\/li><\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Napiszmy Hello World w ERM<\/h1>\n\n\n\n<p>Poznali\u015bmy podstawowe za\u0142o\u017cenia j\u0119zyka ERM. Pora na praktyk\u0119.<\/p>\n\n\n\n<p>Utw\u00f3rz map\u0119, tak\u0105 jak na screenie poni\u017cej. (Je\u015bli pobra\u0142e\u015b paczk\u0119 z narz\u0119dziami, do kt\u00f3rej link znajduje si\u0119 na pocz\u0105tku wpisu, to znajdziesz tam plik lekcja1.h3m, zawieraj\u0105cy t\u0105 map\u0119. Wtedy przekopiuj j\u0105 po prostu do katalogu z mapami WoG). .Zwr\u00f3\u0107 uwage na po\u0142o\u017cenie zdarzenia czasowego, kt\u00f3re powinno znajdowa\u0107 si\u0119 na wsp\u00f3\u0142rz\u0119dnych 31\/5\/0.<\/p>\n\n\n\n<p>We w\u0142a\u015bciwo\u015bciach zdarzenia czasowego usu\u0144 ptaszek przy polu: \u201eUsu\u0144 zdarzenie po pierwszej wizycie\u201d.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1040\" src=\"https:\/\/www.kompikownia.pl\/\/wp-content\/uploads\/2018\/02\/zd2.png\" alt=\"\" class=\"wp-image-84\"\/><\/figure><\/div>\n\n\n\n<p>Ustaw jaki\u015b warunek zwyci\u0119stwa. (Jest to oboj\u0119tne, jaki. Nie chcemy po prostu, aby mapa zako\u0144czy\u0142a si\u0119 od razu naszym zwyci\u0119stwem). Zapisz map\u0119 pod nazw\u0105: lekcja1.h3m.<\/p>\n\n\n\n<p>Odczytaj wsp\u00f3\u0142rz\u0119dne zdarzenia. Na screenie powy\u017cej jest to: 31\/5\/0. Pierwsza cyfra oznacza po\u0142o\u017cenie w kierunku \u201epoziomym\u201d (g\u00f3rna belka edytora). Druga cyfra natomiast: po\u0142o\u017cenie w kierunku \u201epionowym\u201d (lewa belka edytora). Ostatnia cyfra m\u00f3wi nam o tym, czy zdarzenie znajduje si\u0119 na powierzchni (0) czy w podziemiach (1).<\/p>\n\n\n\n<p>Otw\u00f3rz teraz Erm Scripter. Powinien znajdowa\u0107 si\u0119 w folderze erm_s w katalogu, w&nbsp;kt\u00f3rym znajduje si\u0119 WoG. Kliknij File-&gt;New i wybierz Erm Document.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"775\" height=\"375\" src=\"https:\/\/www.kompikownia.pl\/\/wp-content\/uploads\/2018\/02\/zd3.png\" alt=\"\" class=\"wp-image-87\"\/><\/figure><\/div>\n\n\n\n<p>Powy\u017cej znajduje si\u0119 nasz skrypt ERM. Nie zapomnij o tym, \u017ce zawsze na pocz\u0105tku pliku ERM powinno znajdowa\u0107 si\u0119 s\u0142\u00f3wko ZVSE. Informuje ono interpreter o tym, \u017ce nast\u0119pne linijki to b\u0119dzie w\u0142a\u015bnie kod ERM.<\/p>\n\n\n\n<p>W skrypcie mamy dwie linijki. Pierwsza z nich to trigger: Zdarzenie o wsp\u00f3\u0142rz\u0119dnych 31\/5\/0. W obs\u0142udze tego triggera znajduje si\u0119 receiver !!IF:M. !!IF:M Wy\u015bwietla okno tekstowe, w kt\u00f3rym znajduje si\u0119 tekst wpisany pomi\u0119dzy znakami ^^. Zapisz skrypt pod nazw\u0105 lekcja1.erm. w folderze z mapami. Uruchom gr\u0119.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"609\" height=\"366\" src=\"https:\/\/www.kompikownia.pl\/\/wp-content\/\/uploads\/2018\/02\/zd4.png\" alt=\"\" class=\"wp-image-88\"\/><\/figure><\/div>\n\n\n\n<p>Je\u015bli po wej\u015bciu na zdarzenie czasowe o wsp\u00f3\u0142rz\u0119dnych 31\/5\/0 wyskoczy\u0142 ci komunikat: \u201eHello World\u201d \u2013 jeste\u015b zwyci\u0119zc\u0105! W\u0142a\u015bnie uda\u0142o ci si\u0119 napisa\u0107 sw\u00f3j pierwszy skrypt ERM. Je\u015bli nie, przeanalizuj jeszcze raz zawarto\u015b\u0107 tej cz\u0119\u015bci poradnika. Ta pierwsza cz\u0119\u015b\u0107 jest podstaw\u0105 do tego, aby\u015b rozumia\u0142 dalsze skrypty i&nbsp;rozwa\u017cania.<\/p>\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\">4<\/span> <span class=\"rt-label rt-postfix\">minut<\/span><\/span> Zaczynamy pierwszy wpis z serii \u201eKurs ERM\u201d. ERM jest bardzo fajnym j\u0119zykiem skryptowym, kt\u00f3ry pozwala w niezwykle du\u017cym stopniu modyfikowa\u0107 mechanik\u0119 kultowej gry Heroes of Might and Magic III. Jest &#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\/82"}],"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=82"}],"version-history":[{"count":12,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/posts\/82\/revisions"}],"predecessor-version":[{"id":1166,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/posts\/82\/revisions\/1166"}],"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=82"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/categories?post=82"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kompikownia.pl\/index.php\/wp-json\/wp\/v2\/tags?post=82"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}