﻿﻿﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Ultima Forum - Tutoriale]]></title>
		<link>https://forum.ultimateam.pl/</link>
		<description><![CDATA[Ultima Forum - https://forum.ultimateam.pl]]></description>
		<pubDate>Tue, 28 Apr 2026 06:23:37 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Jaki RPG Maker?]]></title>
			<link>https://forum.ultimateam.pl/Thread-Dowolny-Jaki-RPG-Maker</link>
			<pubDate>Wed, 03 Jul 2019 13:42:30 +0200</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-Dowolny-Jaki-RPG-Maker</guid>
			<description><![CDATA[Witam, chciałbym się zapytać jaki RPG Maker jest najlepszy dla początkującego, który ma 0 wiedzy o robieniu gier. Coś łatwego i zrozumiałego w czym będzie się pracować przyjemnie :) Proszę o wyrozumiałość.]]></description>
			<content:encoded><![CDATA[Witam, chciałbym się zapytać jaki RPG Maker jest najlepszy dla początkującego, który ma 0 wiedzy o robieniu gier. Coś łatwego i zrozumiałego w czym będzie się pracować przyjemnie :) Proszę o wyrozumiałość.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Kalkulator walki]]></title>
			<link>https://forum.ultimateam.pl/Thread-VX-Kalkulator-walki</link>
			<pubDate>Sat, 10 Mar 2018 15:21:24 +0100</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-VX-Kalkulator-walki</guid>
			<description><![CDATA[Cześć wszystkim!<br />
<br />
Po dłuuugiej przerwie wróciłem do projektu gry. Po zrobieniu wersji beta 0.12 zacząłem rozbudowywać ją dalej i znowu wrócił problem, z którym borykałem się wcześniej. Mowa tutaj o balansie walki. Po wielu próbach udało mi się dopasować statystyki przeciwników, aby walka nie była ani zbyt łatwa, ani zbyt trudna.<br />
<br />
Problem w tym, że po zdobyciu 2-3 poziomów drużyna była niepokonana. Przeciwnicy byli ,,na jednego hita", podczas gdy nie zadawali oni żadnych obrażeń. Postanowiłem dokładniej się tym zająć.<br />
<br />
Cała mechanika została opisana <a href="http://www.ultimateam.pl/viewtopic.php?t=8486" target="_blank">TUTAJ</a> przez użytkownika przemusiek25, dlatego nie będę tego powielał. Zrobiłem za to prosty kalkulator. Za jego pomocą po wpisaniu statystyk postaci i przeciwnika pokaże on jakie obrażenia zada drużyna przeciwnikowi oraz jakie obrażenia otrzymają poszczególne osoby z drużyny. Obliczone jest też ile tur zajmie drużynie pokonanie przeciwnika.<br />
<br />
Dlatego chciałbym się z Wami podzielić tą ,,aplikacją": <a href="http://aron155.pl/que/stats.xlsx" target="_blank">KALKULATOR WALKI</a>.<br />
<br />
Oto krótki opis:<br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">
- plik został zablokowany hasłem, aby zablokować komórki, które nie powinny być edytowane (żeby przypadkiem nie skasować formuł/obliczeń);<br />
- do edycji służą ciemniejsze komórki;<br />
- w górnej części wyświetlane są postacie wraz z początkowym HP, pokazane zostało ile HP zostanie po 1 turze oraz ile tur zajmie drużynie pokonanie przeciwnika. Są tutaj pokazane najmniejsze, średnie oraz największe możliwe wartości;<br />
- w tabeli ,,Przeciwnik" podajemy statystyki przeciwnika, możemy też zmienić jego imię;<br />
- w dolnej części znajdują się statystyki 4 postaci z drużyny. Zaznaczając ptaszek przy imieniu aktywujemy obecność postaci w drużynie. Następnie wybieramy, czy ma być to atak fizyczny czy czar (z listy rozwijanej), oraz czy w przypadku czaru ma być ignorowana obrona czy nie (też z listy rozwijanej);<br />
- następnie podajemy statystyki postaci, czaru którego możemy użyć oraz zsumowane bonusy ekwipunku;<br />
- na samym dole wyświetlane są minimalne, średnie oraz maksymalne możliwe otrzymane i zadane obrażenia przez każdą z postaci z drużyny.<br />
</div></div>
Wersja te jest dostępna dla wszystkich. Dla siebie planuję przygotować wersję uwzględniającą rozwój postaci w zależności od poziomu, oraz dodać bazę dostępnego ekwipunku. Ale wiadomo - u każdego to wygląda inaczej ;) Nie uwzględniłem kilku przeciwników, ponieważ będzie tutaj bardzo dużo różnych wariantów.<br />
<br />
Mam nadzieję, że kalkulator Wam pomoże ;)]]></description>
			<content:encoded><![CDATA[Cześć wszystkim!<br />
<br />
Po dłuuugiej przerwie wróciłem do projektu gry. Po zrobieniu wersji beta 0.12 zacząłem rozbudowywać ją dalej i znowu wrócił problem, z którym borykałem się wcześniej. Mowa tutaj o balansie walki. Po wielu próbach udało mi się dopasować statystyki przeciwników, aby walka nie była ani zbyt łatwa, ani zbyt trudna.<br />
<br />
Problem w tym, że po zdobyciu 2-3 poziomów drużyna była niepokonana. Przeciwnicy byli ,,na jednego hita", podczas gdy nie zadawali oni żadnych obrażeń. Postanowiłem dokładniej się tym zająć.<br />
<br />
Cała mechanika została opisana <a href="http://www.ultimateam.pl/viewtopic.php?t=8486" target="_blank">TUTAJ</a> przez użytkownika przemusiek25, dlatego nie będę tego powielał. Zrobiłem za to prosty kalkulator. Za jego pomocą po wpisaniu statystyk postaci i przeciwnika pokaże on jakie obrażenia zada drużyna przeciwnikowi oraz jakie obrażenia otrzymają poszczególne osoby z drużyny. Obliczone jest też ile tur zajmie drużynie pokonanie przeciwnika.<br />
<br />
Dlatego chciałbym się z Wami podzielić tą ,,aplikacją": <a href="http://aron155.pl/que/stats.xlsx" target="_blank">KALKULATOR WALKI</a>.<br />
<br />
Oto krótki opis:<br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">
- plik został zablokowany hasłem, aby zablokować komórki, które nie powinny być edytowane (żeby przypadkiem nie skasować formuł/obliczeń);<br />
- do edycji służą ciemniejsze komórki;<br />
- w górnej części wyświetlane są postacie wraz z początkowym HP, pokazane zostało ile HP zostanie po 1 turze oraz ile tur zajmie drużynie pokonanie przeciwnika. Są tutaj pokazane najmniejsze, średnie oraz największe możliwe wartości;<br />
- w tabeli ,,Przeciwnik" podajemy statystyki przeciwnika, możemy też zmienić jego imię;<br />
- w dolnej części znajdują się statystyki 4 postaci z drużyny. Zaznaczając ptaszek przy imieniu aktywujemy obecność postaci w drużynie. Następnie wybieramy, czy ma być to atak fizyczny czy czar (z listy rozwijanej), oraz czy w przypadku czaru ma być ignorowana obrona czy nie (też z listy rozwijanej);<br />
- następnie podajemy statystyki postaci, czaru którego możemy użyć oraz zsumowane bonusy ekwipunku;<br />
- na samym dole wyświetlane są minimalne, średnie oraz maksymalne możliwe otrzymane i zadane obrażenia przez każdą z postaci z drużyny.<br />
</div></div>
Wersja te jest dostępna dla wszystkich. Dla siebie planuję przygotować wersję uwzględniającą rozwój postaci w zależności od poziomu, oraz dodać bazę dostępnego ekwipunku. Ale wiadomo - u każdego to wygląda inaczej ;) Nie uwzględniłem kilku przeciwników, ponieważ będzie tutaj bardzo dużo różnych wariantów.<br />
<br />
Mam nadzieję, że kalkulator Wam pomoże ;)]]></content:encoded>
		</item>
		<item>
			<title><![CDATA["Unexpected File Format"]]></title>
			<link>https://forum.ultimateam.pl/Thread-VX-Unexpected-File-Format</link>
			<pubDate>Thu, 10 Aug 2017 18:37:05 +0200</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-VX-Unexpected-File-Format</guid>
			<description><![CDATA[Czasem się może zdarzyć, że pracowaliście nad projektem przez bardzo długi czas i z jakiegoś powodu wysiadł wam prąd. <br />
Po uruchomieniu programu okazuje się, że projekt jest uszkodzony i można już tylko płakać. <img class="postimage" src="/images/smiles/icon_zmienny.gif" style="vertical-align: middle;" border="0" alt=":zmienny:" title=":zmienny:" /><br />
W razie gdyby ktoś jeszcze miał kiedyś taki problem, projekt można odzyskać.<br />
<br />
<span style="font-weight: bold;">1.</span> Tworzymy nowy, czysty projekt.<br />
<span style="font-weight: bold;">2.</span> W nowym projekcie tworzymy tyle map, ile ich było w naszym starym, uszkodzonym projekcie.<br />
<span style="font-weight: bold;">3.</span> Kopiujemy foldery z naszego starego projektu (Audio, Data, Graphics) do naszego nowego projektu i zastępujemy wszystkie pliki.<br />
<span style="font-weight: bold;">4.</span> Dla pewności, tworzymy czysty projekt i kopiujemy z niego plik "MapInfos" z folderu Data do naszego naprawionego projektu.<br />
<span style="font-weight: bold;">4.</span> Otwieramy nasz naprawiony projekt w RPG Makerze.<br />
<span style="font-weight: bold;">5.</span> Jeżeli wyskakuje nam błąd, taki jak "failed to load area data", musimy też przekopiować plik "Areas" z folderu Data do tego samego folderu w naszym naprawionym projekcie.<br />
<br />
U mnie osobiście to zadziałało i byłem w stanie otworzyć normalnie projekt. <img class="postimage" src="/images/smiles/icon_ahoy.gif" style="vertical-align: middle;" border="0" alt=":ahoy:" title=":ahoy:" /><br />
W moim wypadku było to w RPG Maker VX, ale powinno też działać z pozostałymi wersjami. <img class="postimage" src="/images/smiles/icon_ehe.gif" style="vertical-align: middle;" border="0" alt=":ehe:" title=":ehe:" />]]></description>
			<content:encoded><![CDATA[Czasem się może zdarzyć, że pracowaliście nad projektem przez bardzo długi czas i z jakiegoś powodu wysiadł wam prąd. <br />
Po uruchomieniu programu okazuje się, że projekt jest uszkodzony i można już tylko płakać. <img class="postimage" src="/images/smiles/icon_zmienny.gif" style="vertical-align: middle;" border="0" alt=":zmienny:" title=":zmienny:" /><br />
W razie gdyby ktoś jeszcze miał kiedyś taki problem, projekt można odzyskać.<br />
<br />
<span style="font-weight: bold;">1.</span> Tworzymy nowy, czysty projekt.<br />
<span style="font-weight: bold;">2.</span> W nowym projekcie tworzymy tyle map, ile ich było w naszym starym, uszkodzonym projekcie.<br />
<span style="font-weight: bold;">3.</span> Kopiujemy foldery z naszego starego projektu (Audio, Data, Graphics) do naszego nowego projektu i zastępujemy wszystkie pliki.<br />
<span style="font-weight: bold;">4.</span> Dla pewności, tworzymy czysty projekt i kopiujemy z niego plik "MapInfos" z folderu Data do naszego naprawionego projektu.<br />
<span style="font-weight: bold;">4.</span> Otwieramy nasz naprawiony projekt w RPG Makerze.<br />
<span style="font-weight: bold;">5.</span> Jeżeli wyskakuje nam błąd, taki jak "failed to load area data", musimy też przekopiować plik "Areas" z folderu Data do tego samego folderu w naszym naprawionym projekcie.<br />
<br />
U mnie osobiście to zadziałało i byłem w stanie otworzyć normalnie projekt. <img class="postimage" src="/images/smiles/icon_ahoy.gif" style="vertical-align: middle;" border="0" alt=":ahoy:" title=":ahoy:" /><br />
W moim wypadku było to w RPG Maker VX, ale powinno też działać z pozostałymi wersjami. <img class="postimage" src="/images/smiles/icon_ehe.gif" style="vertical-align: middle;" border="0" alt=":ehe:" title=":ehe:" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Wielopoziomowe skille]]></title>
			<link>https://forum.ultimateam.pl/Thread-XP-Wielopoziomowe-skille</link>
			<pubDate>Mon, 05 Sep 2016 15:32:07 +0200</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-XP-Wielopoziomowe-skille</guid>
			<description><![CDATA[Dzisiaj dowiecie się, jak zrobić w grze skille, mające wiele poziomów.Potrzebne nam do tego będą następujące rzeczy:<br />
1. Nadpisana klasa RPG::Actor<br />
2. Nadpisana klasa RPG::Class<br />
3. Nadpisana klasa RPG::Skill<br />
4. Definicja klasy RPG::Feature<br />
5. Definicja klasy RPG::Effect<br />
6. Definicja klasy RPG::Learning<br />
7. Przepisanie wszystkich skryptów w Edytorze na podobieństwo RPG Makera Vx Ace<br />
8. Definicja klasy RPG::Ability<br />
9. Definicja klasy RPG::ItemBase<br />
<br />
Po co aż tyle? Przekonacie się. Choć, jak się wkrótce domyślicie, potrzebne może być więcej.<br />
<br />
<br />
Na początek tworzymy skrypt "Clear" i tam wywołujemy dla modułu "RPG" polecenie usunięcia stałych "Actor", "Class" i "Skill".<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>RPG.send(:remove_const, :Actor) # kasuje oryginalną klasę RPG::Actor</code></div></div>
Następnie wchodzimy do modułu DataManager i definiujemy funkcję "load_script" odwołującą się bezpośrednio do pliku "filename".<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def self.load_script(filename)<br />
require File.expand_path('./') + '/root/' + filename + '.rb'<br />
end</code></div></div>
<br />
Teraz w głównym folderze naszej gry tworzymy folder "root", aw nim pliki skryptu Ruby o następujących nazwach:<br />
+classes<br />
+actor<br />
+class<br />
+ability<br />
+skill<br />
<br />
W pliku "classes" definiujemy na nowo wszystkie klasy modułu RPG, które wykasowaliśmy, plus te, których i tak nie było w naszej grze.<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>class RPG::Actor<br />
&nbsp;&nbsp;attr_reader :id, :features, :user_effects, :target_effects, :levels, :equip_items, :exp_curve, :learnings<br />
&nbsp;&nbsp;attr_accessor :name, :class_id, :description, :nickname, :character_name, :character_hue, :battler_name, :battler_hue, :face_name, :face_hue, :face_index, :exp_for_level<br />
&nbsp;&nbsp;def initialize(id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@id = id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@name = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@class_id = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;@description = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@nickname = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@levels = [1, 100]<br />
&nbsp;&nbsp;&nbsp;&nbsp;@exp_curve = [20,0,30,0]<br />
&nbsp;&nbsp;&nbsp;&nbsp;@exp_for_level = nil<br />
&nbsp;&nbsp;&nbsp;&nbsp;@features = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@user_effects = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@learnings = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@target_effects = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@character_name = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@character_hue = 0 # tylko XP<br />
&nbsp;&nbsp;&nbsp;&nbsp;@battler_name = '' #tylko XP<br />
&nbsp;&nbsp;&nbsp;&nbsp;@battler_hue = 0 #tylko XP<br />
&nbsp;&nbsp;&nbsp;&nbsp;@face_name = ''#standardowo tylko VXy<br />
&nbsp;&nbsp;&nbsp;&nbsp;@face_hue = 0 #tylko niestandardowo i XP<br />
&nbsp;&nbsp;&nbsp;&nbsp;@face_index = 0 #standardowo tylko VXy<br />
&nbsp;&nbsp;&nbsp;&nbsp;@equip_items = []<br />
&nbsp;&nbsp;end<br />
end<br />
class RPG::Class<br />
&nbsp;&nbsp;attr_reader :id, :features, :user_effects, :target_effects, :exp_curve, :learnings<br />
&nbsp;&nbsp;attr_accessor :name, :position, :exp_for_level<br />
&nbsp;&nbsp;def initialize(id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@id = id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@name = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@position = 0 #tylko XP<br />
&nbsp;&nbsp;&nbsp;&nbsp;@features = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@user_effects = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@target_effects = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@exp_curve = [0, 0, 0, 0]<br />
&nbsp;&nbsp;&nbsp;&nbsp;@exp_for_level = nil<br />
&nbsp;&nbsp;&nbsp;&nbsp;@learnings = []<br />
&nbsp;&nbsp;end<br />
end<br />
class RPG::ItemBase<br />
&nbsp;&nbsp;attr_reader :id, :user_effects, :target_effects<br />
&nbsp;&nbsp;attr_accessor :name, :icon_name<br />
&nbsp;&nbsp;def initialize(id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@id = id<br />
&nbsp;&nbsp;&nbsp;&nbsp;init_instances<br />
&nbsp;&nbsp;end<br />
&nbsp;&nbsp;def init_instances<br />
&nbsp;&nbsp;&nbsp;&nbsp;@name = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@icon_name = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@user_effects = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@target_effects = []<br />
&nbsp;&nbsp;end<br />
end<br />
class RPG::Ability<br />
&nbsp;&nbsp;attr_reader :features, :costs, :required_levels<br />
&nbsp;&nbsp;attr_accessor :self_learn_levels<br />
&nbsp;&nbsp;def init_instances<br />
&nbsp;&nbsp;&nbsp;&nbsp;super<br />
&nbsp;&nbsp;&nbsp;&nbsp;@features = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@self_learn_levels = nil<br />
&nbsp;&nbsp;&nbsp;&nbsp;@costs = {}<br />
&nbsp;&nbsp;&nbsp;&nbsp;@required_levels = {}<br />
&nbsp;&nbsp;end<br />
end<br />
class RPG::ActionItem &lt; RPG::ItemBase<br />
&nbsp;&nbsp;&nbsp;&nbsp;attr_reader :available<br />
&nbsp;&nbsp;&nbsp;&nbsp;attr_accessor :animation1_id, :animation2_id, :projectile_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;def init_instances<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@available = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@animation1_id = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@animation2_id = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@projectile_id = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
end<br />
class RPG::Skill &lt; RPG::ActionItem<br />
&nbsp;&nbsp;attr_accessor :target_list, :target_distance, :target_angle, :target_range, :trait, :projectile_id, :req, :hit, :eva, :ptk, :mtk, :str, :int, :rate<br />
&nbsp;&nbsp;def init_instances<br />
&nbsp;&nbsp;&nbsp;&nbsp;super<br />
&nbsp;&nbsp;&nbsp;&nbsp;@target_list = nil<br />
&nbsp;&nbsp;&nbsp;&nbsp;@target_distance = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;@target_angle = 22.5<br />
&nbsp;&nbsp;&nbsp;&nbsp;@target_range = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;@trait = false<br />
&nbsp;&nbsp;&nbsp;&nbsp;@req = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@projectile_id = 0#tylko, jeśli używasz pocisków<br />
&nbsp;&nbsp;&nbsp;&nbsp;@hit = '100'<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eva = '0'<br />
&nbsp;&nbsp;&nbsp;&nbsp;@ptk = '100'<br />
&nbsp;&nbsp;&nbsp;&nbsp;@mtk = '100'<br />
&nbsp;&nbsp;&nbsp;&nbsp;@str = '0'<br />
&nbsp;&nbsp;&nbsp;&nbsp;@int = '0'<br />
&nbsp;&nbsp;&nbsp;&nbsp;@rate = '(20) / 20' <br />
&nbsp;&nbsp;end<br />
end<br />
class RPG::Feature<br />
&nbsp;&nbsp;attr_reader :condition, :code, :id, :params<br />
&nbsp;&nbsp;def initialize(code, condition, id, *params)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@condition = condition<br />
&nbsp;&nbsp;&nbsp;&nbsp;@code = code<br />
&nbsp;&nbsp;&nbsp;&nbsp;@id = id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@params = params<br />
&nbsp;&nbsp;end<br />
end<br />
class RPG::Effect<br />
&nbsp;&nbsp;attr_reader :key, :code, :id, :params<br />
&nbsp;&nbsp;def initialize(key, code, id, *params)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@key = key<br />
&nbsp;&nbsp;&nbsp;&nbsp;@code = code<br />
&nbsp;&nbsp;&nbsp;&nbsp;@id = id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@params = params<br />
&nbsp;&nbsp;end<br />
end<br />
class RPG::Learning<br />
&nbsp;&nbsp;attr_reader :level, :type, :item_id, :ap, :tech, :req, :learn<br />
&nbsp;&nbsp;def initialize(level, type, item_id, ap, tech, req, learn)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@level = level<br />
&nbsp;&nbsp;&nbsp;&nbsp;@type = type #:ability to umiejętność, :skill to atak<br />
&nbsp;&nbsp;&nbsp;&nbsp;@item_id = item_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@ap = ap<br />
&nbsp;&nbsp;&nbsp;&nbsp;@tech = tech<br />
&nbsp;&nbsp;&nbsp;&nbsp;@req = req #jeśli ten skrypt nie jest pusty, postęp działa, jeśli ten skrypt zwróci "true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;@learn = learn #jeśli ten skrypt nie jest pusty, zostanie wywołany przy nauce<br />
&nbsp;&nbsp;end<br />
end</code></div></div>
<br />
Do pliku "actor" wprowadzamy następujący kod:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;data_actors = []<br />
size = 1<br />
if size &gt;= 1<br />
id = 1<br />
&#36;data_actors[id] = RPG::Actor.new(id)<br />
&#36;data_actors[id].name = 'Bohater 1'<br />
&#36;data_actors[id].class_id = 1<br />
&#36;data_actors[id].nickname= 'Twardziel'<br />
&#36;data_actors[id].description = 'Jakiś tam tekst'<br />
&#36;data_actors[id].levels[0..1] = [początkowy, końcowy]<br />
&#36;data_actors[id].exp_curve[0..n] = [...] #wprowadź,ile chcesz<br />
&#36;data_actors[id].exp_for_level = wartość #nil oznacza, że będzie z klasy<br />
&#36;data_actors[id].character_name = plik_charsetu<br />
&#36;data_actors[id].character_hue = odcień_charsetu<br />
&#36;data_actors[id].battler_name = plik_grafiki_do_walki<br />
&#36;data_actors[id].battler_hue = odcień_grafiki_do_walki<br />
&#36;data_actors[id].face_name = plik_twarzy<br />
&#36;data_actors[id].face_hue = odcień_twarzy<br />
&#36;data_actors[id].face_index = numer_twarzy<br />
&#36;data_actors[id].features.push(RPG::Feature.new(kod, warunek, id, parametr1, parametr2,...))#dla charakterystyki<br />
&#36;data_actors[id].user_effects.push(RPG::Effect.new(klucz, kod, id, parametr1, parametr2,...))#dla efektu wywołanego na tym bohaterze przez ruch określony kluczem.<br />
&#36;data_actors[id].target_effects.push(RPG::Effect.new(klucz,kod, id, parametr1, parametr2,...))#dla efektu wywołanego na tego, kogo ten bohater potraktował ruchem określonymprzez klucz.<br />
&#36;data_actors[id].learnings.push(RPG::Learning.new(poziom, typ, ID, ap, technika, wymagane, nauka))#dla postępu jednej umiejętności<br />
end</code></div></div>
<br />
Naszym następnym celem jest plik "class", gdzie wprowadzamy:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;data_classes = []<br />
size = 1<br />
if size &gt;= 1<br />
id = 1<br />
&#36;data_classes[id] = RPG::Class.new(id)<br />
&#36;data_classes[id].name = 'Złodziej'<br />
&#36;data_classes[id].position = 1<br />
&#36;data_classes[id].exp_for_level = wartość #nil oznacza, że będzie domyślne<br />
&#36;data_classes[id].features.push(RPG::Feature.new(kod, warunek, id, parametr1, parametr2,...))#jak przy bohaterze<br />
&#36;data_classes[id].user_effects.push(RPG::Effect.new(klucz, kod, id, parametr1, parametr2,...))#jak przy bohaterze<br />
&#36;data_classes[id].target_effects.push(RPG::Effect.new(klucz, kod, id, parametr1, parametr2,...))#jak przy bohaterze<br />
&#36;data_classes[id].learnings.push(RPG::Learning.new(poziom, typ, ID, ap, technika, wymagane, nauka))#dla postępu jednej umiejętności<br />
&#36;data_classes[id].exp_curve[0..n] = [...]#ustaw, ile chcesz<br />
end</code></div></div>
<br />
Zanim przejdziemy do ostatniej części, krótkie omówienie klasy "RPG::Effect"<br />
Klucz określa, kiedy efekt zostanie wywołany. Wartości są następujące:<br />
+nil - efekt wywołany zostaje zawsze i nie ma znaczenia, gdzie go walniesz.<br />
+symbol "skill" lub "unleash" - dla efektów skilla. Skill nie ma zastosowania przy unleashu i vice versa.<br />
+zbiór pięciu wartości - pierwsza z nich (true/false) określa, czy efekt wywołany jest zawsze (false), czy tylko, kiedy przedmiot został użyty (true). Druga (wzmianka o klasie "RPG::Skill" lub "RPG::Item") określa, czy efekt jest dla skilla, czy dla przedmiotu w plecaku. Trzecia (symbol "id", "kind", lub "type") to sposób weryfikacji, czy ten efekt jest dla tego działania, czy nie. Czwarta jest wartością, którą atak lub przedmiot musi mieć w zmiennej wskazanej przez trzecią wartość. Piąta i ostatnia wartość (tylko "nil" dla przedmiotów, symbole "skill" i "unleash" dla skilli) działają podobnie, jak solo dla efektów skilla.<br />
Funkcję od wyszukiwania efektów wywołanych przez działanie najlepiej napisaćw klasie "Game_Battler" lub "Game_BattlerBase".<br />
<br />
W pliku "skill" musimy wprowadzić następujący kod:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;data_skills = []<br />
size = 1<br />
if size &gt;= 1<br />
id = 1<br />
&#36;data_skills[id] = RPG::Skill.new(id)<br />
&#36;data_skills[id].name = 'Kamehameha LV'+"#{actor.ability_level(1)}"<br />
&#36;data_skills[id].icon_name = 'fireball'<br />
&#36;data_skills[id].target_list = :enemy<br />
&#36;data_skills[id].target_distance = 10<br />
&#36;data_skills[id].target_angle = 23<br />
&#36;data_skills[id].target_range = 2<br />
&#36;data_skills[id].trait = false<br />
&#36;data_skills[id].req = ''<br />
&#36;data_skills[id].projectile_id = 1<br />
&#36;data_skills[id].animation1_id = 2<br />
&#36;data_skills[id].animation2_id = 7<br />
&#36;data_skills[id].available.push(symbol_ekranu)<br />
&#36;data_skills[id].user_effects.push(RPG::Effect.new(:skill, 101, 1, 0, -50, 0, 0))<br />
&#36;data_skills[id].target_effects.push(RPG::Effect.new(nil, 101, 0, 0, -200, -1, -1))<br />
&#36;data_skills[id].hit = 'a.hit'<br />
&#36;data_skills[id].eva = 'b.eva'<br />
&#36;data_skills[id].ptk = '[0, a.ptk - b.pdf].max * 100 / [1, a.ptk].max'<br />
&#36;data_skills[id].mtk = '[0, a.mtk - b.mdf].max * 100 / [1, a.mtk].max'<br />
&#36;data_skills[id].str = 'a.str'<br />
&#36;data_skills[id].int = 'a.int'<br />
&#36;data_skills[id].rate = '(20) / 20'<br />
end</code></div></div>
<br />
Ostatnie, co musimy jeszcze zrobić, to zdefiniować jedną albo dwie umiejętności w pliku "ability"<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;data_abilities = []<br />
size = 1<br />
if size &gt;= 1<br />
id = 1<br />
&#36;data_abilities[id] = RPG::Ability.new(id)<br />
&#36;data_abilities[id].name = 'Skill: Kamehameha'<br />
&#36;data_abilities[id].icon_name = 'fireball'<br />
&#36;data_abilities[id].self_learn_levels = [1, 10]<br />
&#36;data_abilities[id].costs[1] = { :ap =&gt; 0, :tech =&gt; 500 } #dla poziomu umiejętności<br />
&#36;data_abilities[id].required_levels[1] = 1 #dla jednego poziomu umiejętności<br />
&#36;data_abilities[id].self_learn_levels[1].times { &#36;data_abilities[id].features.push([]) #przed tymi trzema linijkami musisz <br />
&#36;data_abilities[id].user_effects.push([]) #określić poziomy do samodzielnego rozwoju<br />
&#36;data_abilities[id].target_effects.push([]) } #tej umiejętności<br />
&#36;data_abilities[id].features[n].push(RPG::Feature.new(kod, '', 0, id_skilla_kamehameha)) #n oznacza poziom tej umiejętności. Dla nauki skilla<br />
&#36;data_abilities[id].user_effects[n].push(RPG::Effect.new([false, RPG::Skill, :id, 1, :skill], kod, id, p1, p2,...)) #po rozwinięciu tej<br />
&#36;data_abilities[id].target_effects[n].push(RPG::Effect.new([false, RPG::Skill, :id, 1, :skill], kod, id, p1, p2,...)) #umiejętności kod cechy ustal<br />
end</code></div></div>
<br />
Jeśli nie widziałeś kosztów w "RPG::Skill", to wiedz,że nie bez powodu zostały one stamtąd wywalone. Ich rolę przejęły efekty użytkownika.<br />
<br />
I w ten właśnie sposób powinieneś daćradę stworzyć skille.]]></description>
			<content:encoded><![CDATA[Dzisiaj dowiecie się, jak zrobić w grze skille, mające wiele poziomów.Potrzebne nam do tego będą następujące rzeczy:<br />
1. Nadpisana klasa RPG::Actor<br />
2. Nadpisana klasa RPG::Class<br />
3. Nadpisana klasa RPG::Skill<br />
4. Definicja klasy RPG::Feature<br />
5. Definicja klasy RPG::Effect<br />
6. Definicja klasy RPG::Learning<br />
7. Przepisanie wszystkich skryptów w Edytorze na podobieństwo RPG Makera Vx Ace<br />
8. Definicja klasy RPG::Ability<br />
9. Definicja klasy RPG::ItemBase<br />
<br />
Po co aż tyle? Przekonacie się. Choć, jak się wkrótce domyślicie, potrzebne może być więcej.<br />
<br />
<br />
Na początek tworzymy skrypt "Clear" i tam wywołujemy dla modułu "RPG" polecenie usunięcia stałych "Actor", "Class" i "Skill".<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>RPG.send(:remove_const, :Actor) # kasuje oryginalną klasę RPG::Actor</code></div></div>
Następnie wchodzimy do modułu DataManager i definiujemy funkcję "load_script" odwołującą się bezpośrednio do pliku "filename".<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def self.load_script(filename)<br />
require File.expand_path('./') + '/root/' + filename + '.rb'<br />
end</code></div></div>
<br />
Teraz w głównym folderze naszej gry tworzymy folder "root", aw nim pliki skryptu Ruby o następujących nazwach:<br />
+classes<br />
+actor<br />
+class<br />
+ability<br />
+skill<br />
<br />
W pliku "classes" definiujemy na nowo wszystkie klasy modułu RPG, które wykasowaliśmy, plus te, których i tak nie było w naszej grze.<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>class RPG::Actor<br />
&nbsp;&nbsp;attr_reader :id, :features, :user_effects, :target_effects, :levels, :equip_items, :exp_curve, :learnings<br />
&nbsp;&nbsp;attr_accessor :name, :class_id, :description, :nickname, :character_name, :character_hue, :battler_name, :battler_hue, :face_name, :face_hue, :face_index, :exp_for_level<br />
&nbsp;&nbsp;def initialize(id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@id = id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@name = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@class_id = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;@description = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@nickname = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@levels = [1, 100]<br />
&nbsp;&nbsp;&nbsp;&nbsp;@exp_curve = [20,0,30,0]<br />
&nbsp;&nbsp;&nbsp;&nbsp;@exp_for_level = nil<br />
&nbsp;&nbsp;&nbsp;&nbsp;@features = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@user_effects = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@learnings = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@target_effects = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@character_name = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@character_hue = 0 # tylko XP<br />
&nbsp;&nbsp;&nbsp;&nbsp;@battler_name = '' #tylko XP<br />
&nbsp;&nbsp;&nbsp;&nbsp;@battler_hue = 0 #tylko XP<br />
&nbsp;&nbsp;&nbsp;&nbsp;@face_name = ''#standardowo tylko VXy<br />
&nbsp;&nbsp;&nbsp;&nbsp;@face_hue = 0 #tylko niestandardowo i XP<br />
&nbsp;&nbsp;&nbsp;&nbsp;@face_index = 0 #standardowo tylko VXy<br />
&nbsp;&nbsp;&nbsp;&nbsp;@equip_items = []<br />
&nbsp;&nbsp;end<br />
end<br />
class RPG::Class<br />
&nbsp;&nbsp;attr_reader :id, :features, :user_effects, :target_effects, :exp_curve, :learnings<br />
&nbsp;&nbsp;attr_accessor :name, :position, :exp_for_level<br />
&nbsp;&nbsp;def initialize(id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@id = id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@name = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@position = 0 #tylko XP<br />
&nbsp;&nbsp;&nbsp;&nbsp;@features = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@user_effects = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@target_effects = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@exp_curve = [0, 0, 0, 0]<br />
&nbsp;&nbsp;&nbsp;&nbsp;@exp_for_level = nil<br />
&nbsp;&nbsp;&nbsp;&nbsp;@learnings = []<br />
&nbsp;&nbsp;end<br />
end<br />
class RPG::ItemBase<br />
&nbsp;&nbsp;attr_reader :id, :user_effects, :target_effects<br />
&nbsp;&nbsp;attr_accessor :name, :icon_name<br />
&nbsp;&nbsp;def initialize(id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@id = id<br />
&nbsp;&nbsp;&nbsp;&nbsp;init_instances<br />
&nbsp;&nbsp;end<br />
&nbsp;&nbsp;def init_instances<br />
&nbsp;&nbsp;&nbsp;&nbsp;@name = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@icon_name = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@user_effects = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@target_effects = []<br />
&nbsp;&nbsp;end<br />
end<br />
class RPG::Ability<br />
&nbsp;&nbsp;attr_reader :features, :costs, :required_levels<br />
&nbsp;&nbsp;attr_accessor :self_learn_levels<br />
&nbsp;&nbsp;def init_instances<br />
&nbsp;&nbsp;&nbsp;&nbsp;super<br />
&nbsp;&nbsp;&nbsp;&nbsp;@features = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;@self_learn_levels = nil<br />
&nbsp;&nbsp;&nbsp;&nbsp;@costs = {}<br />
&nbsp;&nbsp;&nbsp;&nbsp;@required_levels = {}<br />
&nbsp;&nbsp;end<br />
end<br />
class RPG::ActionItem &lt; RPG::ItemBase<br />
&nbsp;&nbsp;&nbsp;&nbsp;attr_reader :available<br />
&nbsp;&nbsp;&nbsp;&nbsp;attr_accessor :animation1_id, :animation2_id, :projectile_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;def init_instances<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@available = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@animation1_id = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@animation2_id = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@projectile_id = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
end<br />
class RPG::Skill &lt; RPG::ActionItem<br />
&nbsp;&nbsp;attr_accessor :target_list, :target_distance, :target_angle, :target_range, :trait, :projectile_id, :req, :hit, :eva, :ptk, :mtk, :str, :int, :rate<br />
&nbsp;&nbsp;def init_instances<br />
&nbsp;&nbsp;&nbsp;&nbsp;super<br />
&nbsp;&nbsp;&nbsp;&nbsp;@target_list = nil<br />
&nbsp;&nbsp;&nbsp;&nbsp;@target_distance = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;@target_angle = 22.5<br />
&nbsp;&nbsp;&nbsp;&nbsp;@target_range = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;@trait = false<br />
&nbsp;&nbsp;&nbsp;&nbsp;@req = ''<br />
&nbsp;&nbsp;&nbsp;&nbsp;@projectile_id = 0#tylko, jeśli używasz pocisków<br />
&nbsp;&nbsp;&nbsp;&nbsp;@hit = '100'<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eva = '0'<br />
&nbsp;&nbsp;&nbsp;&nbsp;@ptk = '100'<br />
&nbsp;&nbsp;&nbsp;&nbsp;@mtk = '100'<br />
&nbsp;&nbsp;&nbsp;&nbsp;@str = '0'<br />
&nbsp;&nbsp;&nbsp;&nbsp;@int = '0'<br />
&nbsp;&nbsp;&nbsp;&nbsp;@rate = '(20) / 20' <br />
&nbsp;&nbsp;end<br />
end<br />
class RPG::Feature<br />
&nbsp;&nbsp;attr_reader :condition, :code, :id, :params<br />
&nbsp;&nbsp;def initialize(code, condition, id, *params)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@condition = condition<br />
&nbsp;&nbsp;&nbsp;&nbsp;@code = code<br />
&nbsp;&nbsp;&nbsp;&nbsp;@id = id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@params = params<br />
&nbsp;&nbsp;end<br />
end<br />
class RPG::Effect<br />
&nbsp;&nbsp;attr_reader :key, :code, :id, :params<br />
&nbsp;&nbsp;def initialize(key, code, id, *params)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@key = key<br />
&nbsp;&nbsp;&nbsp;&nbsp;@code = code<br />
&nbsp;&nbsp;&nbsp;&nbsp;@id = id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@params = params<br />
&nbsp;&nbsp;end<br />
end<br />
class RPG::Learning<br />
&nbsp;&nbsp;attr_reader :level, :type, :item_id, :ap, :tech, :req, :learn<br />
&nbsp;&nbsp;def initialize(level, type, item_id, ap, tech, req, learn)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@level = level<br />
&nbsp;&nbsp;&nbsp;&nbsp;@type = type #:ability to umiejętność, :skill to atak<br />
&nbsp;&nbsp;&nbsp;&nbsp;@item_id = item_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;@ap = ap<br />
&nbsp;&nbsp;&nbsp;&nbsp;@tech = tech<br />
&nbsp;&nbsp;&nbsp;&nbsp;@req = req #jeśli ten skrypt nie jest pusty, postęp działa, jeśli ten skrypt zwróci "true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;@learn = learn #jeśli ten skrypt nie jest pusty, zostanie wywołany przy nauce<br />
&nbsp;&nbsp;end<br />
end</code></div></div>
<br />
Do pliku "actor" wprowadzamy następujący kod:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;data_actors = []<br />
size = 1<br />
if size &gt;= 1<br />
id = 1<br />
&#36;data_actors[id] = RPG::Actor.new(id)<br />
&#36;data_actors[id].name = 'Bohater 1'<br />
&#36;data_actors[id].class_id = 1<br />
&#36;data_actors[id].nickname= 'Twardziel'<br />
&#36;data_actors[id].description = 'Jakiś tam tekst'<br />
&#36;data_actors[id].levels[0..1] = [początkowy, końcowy]<br />
&#36;data_actors[id].exp_curve[0..n] = [...] #wprowadź,ile chcesz<br />
&#36;data_actors[id].exp_for_level = wartość #nil oznacza, że będzie z klasy<br />
&#36;data_actors[id].character_name = plik_charsetu<br />
&#36;data_actors[id].character_hue = odcień_charsetu<br />
&#36;data_actors[id].battler_name = plik_grafiki_do_walki<br />
&#36;data_actors[id].battler_hue = odcień_grafiki_do_walki<br />
&#36;data_actors[id].face_name = plik_twarzy<br />
&#36;data_actors[id].face_hue = odcień_twarzy<br />
&#36;data_actors[id].face_index = numer_twarzy<br />
&#36;data_actors[id].features.push(RPG::Feature.new(kod, warunek, id, parametr1, parametr2,...))#dla charakterystyki<br />
&#36;data_actors[id].user_effects.push(RPG::Effect.new(klucz, kod, id, parametr1, parametr2,...))#dla efektu wywołanego na tym bohaterze przez ruch określony kluczem.<br />
&#36;data_actors[id].target_effects.push(RPG::Effect.new(klucz,kod, id, parametr1, parametr2,...))#dla efektu wywołanego na tego, kogo ten bohater potraktował ruchem określonymprzez klucz.<br />
&#36;data_actors[id].learnings.push(RPG::Learning.new(poziom, typ, ID, ap, technika, wymagane, nauka))#dla postępu jednej umiejętności<br />
end</code></div></div>
<br />
Naszym następnym celem jest plik "class", gdzie wprowadzamy:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;data_classes = []<br />
size = 1<br />
if size &gt;= 1<br />
id = 1<br />
&#36;data_classes[id] = RPG::Class.new(id)<br />
&#36;data_classes[id].name = 'Złodziej'<br />
&#36;data_classes[id].position = 1<br />
&#36;data_classes[id].exp_for_level = wartość #nil oznacza, że będzie domyślne<br />
&#36;data_classes[id].features.push(RPG::Feature.new(kod, warunek, id, parametr1, parametr2,...))#jak przy bohaterze<br />
&#36;data_classes[id].user_effects.push(RPG::Effect.new(klucz, kod, id, parametr1, parametr2,...))#jak przy bohaterze<br />
&#36;data_classes[id].target_effects.push(RPG::Effect.new(klucz, kod, id, parametr1, parametr2,...))#jak przy bohaterze<br />
&#36;data_classes[id].learnings.push(RPG::Learning.new(poziom, typ, ID, ap, technika, wymagane, nauka))#dla postępu jednej umiejętności<br />
&#36;data_classes[id].exp_curve[0..n] = [...]#ustaw, ile chcesz<br />
end</code></div></div>
<br />
Zanim przejdziemy do ostatniej części, krótkie omówienie klasy "RPG::Effect"<br />
Klucz określa, kiedy efekt zostanie wywołany. Wartości są następujące:<br />
+nil - efekt wywołany zostaje zawsze i nie ma znaczenia, gdzie go walniesz.<br />
+symbol "skill" lub "unleash" - dla efektów skilla. Skill nie ma zastosowania przy unleashu i vice versa.<br />
+zbiór pięciu wartości - pierwsza z nich (true/false) określa, czy efekt wywołany jest zawsze (false), czy tylko, kiedy przedmiot został użyty (true). Druga (wzmianka o klasie "RPG::Skill" lub "RPG::Item") określa, czy efekt jest dla skilla, czy dla przedmiotu w plecaku. Trzecia (symbol "id", "kind", lub "type") to sposób weryfikacji, czy ten efekt jest dla tego działania, czy nie. Czwarta jest wartością, którą atak lub przedmiot musi mieć w zmiennej wskazanej przez trzecią wartość. Piąta i ostatnia wartość (tylko "nil" dla przedmiotów, symbole "skill" i "unleash" dla skilli) działają podobnie, jak solo dla efektów skilla.<br />
Funkcję od wyszukiwania efektów wywołanych przez działanie najlepiej napisaćw klasie "Game_Battler" lub "Game_BattlerBase".<br />
<br />
W pliku "skill" musimy wprowadzić następujący kod:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;data_skills = []<br />
size = 1<br />
if size &gt;= 1<br />
id = 1<br />
&#36;data_skills[id] = RPG::Skill.new(id)<br />
&#36;data_skills[id].name = 'Kamehameha LV'+"#{actor.ability_level(1)}"<br />
&#36;data_skills[id].icon_name = 'fireball'<br />
&#36;data_skills[id].target_list = :enemy<br />
&#36;data_skills[id].target_distance = 10<br />
&#36;data_skills[id].target_angle = 23<br />
&#36;data_skills[id].target_range = 2<br />
&#36;data_skills[id].trait = false<br />
&#36;data_skills[id].req = ''<br />
&#36;data_skills[id].projectile_id = 1<br />
&#36;data_skills[id].animation1_id = 2<br />
&#36;data_skills[id].animation2_id = 7<br />
&#36;data_skills[id].available.push(symbol_ekranu)<br />
&#36;data_skills[id].user_effects.push(RPG::Effect.new(:skill, 101, 1, 0, -50, 0, 0))<br />
&#36;data_skills[id].target_effects.push(RPG::Effect.new(nil, 101, 0, 0, -200, -1, -1))<br />
&#36;data_skills[id].hit = 'a.hit'<br />
&#36;data_skills[id].eva = 'b.eva'<br />
&#36;data_skills[id].ptk = '[0, a.ptk - b.pdf].max * 100 / [1, a.ptk].max'<br />
&#36;data_skills[id].mtk = '[0, a.mtk - b.mdf].max * 100 / [1, a.mtk].max'<br />
&#36;data_skills[id].str = 'a.str'<br />
&#36;data_skills[id].int = 'a.int'<br />
&#36;data_skills[id].rate = '(20) / 20'<br />
end</code></div></div>
<br />
Ostatnie, co musimy jeszcze zrobić, to zdefiniować jedną albo dwie umiejętności w pliku "ability"<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;data_abilities = []<br />
size = 1<br />
if size &gt;= 1<br />
id = 1<br />
&#36;data_abilities[id] = RPG::Ability.new(id)<br />
&#36;data_abilities[id].name = 'Skill: Kamehameha'<br />
&#36;data_abilities[id].icon_name = 'fireball'<br />
&#36;data_abilities[id].self_learn_levels = [1, 10]<br />
&#36;data_abilities[id].costs[1] = { :ap =&gt; 0, :tech =&gt; 500 } #dla poziomu umiejętności<br />
&#36;data_abilities[id].required_levels[1] = 1 #dla jednego poziomu umiejętności<br />
&#36;data_abilities[id].self_learn_levels[1].times { &#36;data_abilities[id].features.push([]) #przed tymi trzema linijkami musisz <br />
&#36;data_abilities[id].user_effects.push([]) #określić poziomy do samodzielnego rozwoju<br />
&#36;data_abilities[id].target_effects.push([]) } #tej umiejętności<br />
&#36;data_abilities[id].features[n].push(RPG::Feature.new(kod, '', 0, id_skilla_kamehameha)) #n oznacza poziom tej umiejętności. Dla nauki skilla<br />
&#36;data_abilities[id].user_effects[n].push(RPG::Effect.new([false, RPG::Skill, :id, 1, :skill], kod, id, p1, p2,...)) #po rozwinięciu tej<br />
&#36;data_abilities[id].target_effects[n].push(RPG::Effect.new([false, RPG::Skill, :id, 1, :skill], kod, id, p1, p2,...)) #umiejętności kod cechy ustal<br />
end</code></div></div>
<br />
Jeśli nie widziałeś kosztów w "RPG::Skill", to wiedz,że nie bez powodu zostały one stamtąd wywalone. Ich rolę przejęły efekty użytkownika.<br />
<br />
I w ten właśnie sposób powinieneś daćradę stworzyć skille.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Jak zmienić czcionkę?]]></title>
			<link>https://forum.ultimateam.pl/Thread-VXAce-Jak-zmieni%C4%87-czcionk%C4%99--2666</link>
			<pubDate>Mon, 27 Jun 2016 16:12:31 +0200</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-VXAce-Jak-zmieni%C4%87-czcionk%C4%99--2666</guid>
			<description><![CDATA[Żeby zmienić czcionkę musimy wkleić ten skrypt w do MAIN.<br />
<br />
Skrypt<br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">
Font.default_name = ["Arial"] # Zmienia czcionkę.<br />
Font.default_size = 22 # Zmienia rozmiar czcionki. </div></div>Dodatkowo możemy też dodać to:<br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">
Font.default_bold = false # Dodaje nam pogrubienie.<br />
Font.default_italic = false # Dodaje nam kursywę.<br />
Font.default_shadow = true # Dodaje cień<br />
Font.default_outline = true # Dodaje otoczke (tylko w ACE!)<br />
Font.default_color = (R, G, B)  # Zmienia kolor czcionki<br />
Font.default_out_color = (R, G, B) # Zmienia kolor otoczki (tylko w ACE!)<br />
</div></div>
<br />
Jeśli ci pomogłem to naciśnij pod moim postem przycisk <span style="color: #006400;"><span style="font-weight: bold;">POMÓGŁ.</span></span>]]></description>
			<content:encoded><![CDATA[Żeby zmienić czcionkę musimy wkleić ten skrypt w do MAIN.<br />
<br />
Skrypt<br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">
Font.default_name = ["Arial"] # Zmienia czcionkę.<br />
Font.default_size = 22 # Zmienia rozmiar czcionki. </div></div>Dodatkowo możemy też dodać to:<br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">
Font.default_bold = false # Dodaje nam pogrubienie.<br />
Font.default_italic = false # Dodaje nam kursywę.<br />
Font.default_shadow = true # Dodaje cień<br />
Font.default_outline = true # Dodaje otoczke (tylko w ACE!)<br />
Font.default_color = (R, G, B)  # Zmienia kolor czcionki<br />
Font.default_out_color = (R, G, B) # Zmienia kolor otoczki (tylko w ACE!)<br />
</div></div>
<br />
Jeśli ci pomogłem to naciśnij pod moim postem przycisk <span style="color: #006400;"><span style="font-weight: bold;">POMÓGŁ.</span></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Jak zmienić czcionkę w Universal Message System by Ccoa]]></title>
			<link>https://forum.ultimateam.pl/Thread-XP-Jak-zmieni%C4%87-czcionk%C4%99-w-Universal-Message-System-by-Ccoa</link>
			<pubDate>Mon, 06 Jun 2016 18:06:10 +0200</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-XP-Jak-zmieni%C4%87-czcionk%C4%99-w-Universal-Message-System-by-Ccoa</guid>
			<description><![CDATA[Otwieramy edytor skryptu zjeżdżamy na dół i nad Main tworzymy pustą stronę nazywamy ją jak chcemy i wklejamy tam to:<br />
Font.default_name = ["Nazwa czcionki"]<br />
później wchodzimy w <br />
Universal Message System by Ccoa i wyszukiwarką szukamy:<br />
 if &#36;game_system.font == "Nazwa czcionki"<br />
    @font = "Nazwa czcionki" (256 linijka)<br />
w Main   &#36;defaultfonttype = "Nazwa czcionki"<br />
<br />
Komendę: Font.default_name = ["Nazwa czcionki"] była skopiowana z:<br />
<a href="http://forum.ultimateam.pl/Thread-VXAce-Jak-zmieni%C4%87-czcionk%C4%99?highlight=Jak+zmieni%C4%87+czcionk%C4%99" target="_blank">http://forum.ultimateam.pl/Thread-VXAce-...ionk%C4%99</a>]]></description>
			<content:encoded><![CDATA[Otwieramy edytor skryptu zjeżdżamy na dół i nad Main tworzymy pustą stronę nazywamy ją jak chcemy i wklejamy tam to:<br />
Font.default_name = ["Nazwa czcionki"]<br />
później wchodzimy w <br />
Universal Message System by Ccoa i wyszukiwarką szukamy:<br />
 if &#36;game_system.font == "Nazwa czcionki"<br />
    @font = "Nazwa czcionki" (256 linijka)<br />
w Main   &#36;defaultfonttype = "Nazwa czcionki"<br />
<br />
Komendę: Font.default_name = ["Nazwa czcionki"] była skopiowana z:<br />
<a href="http://forum.ultimateam.pl/Thread-VXAce-Jak-zmieni%C4%87-czcionk%C4%99?highlight=Jak+zmieni%C4%87+czcionk%C4%99" target="_blank">http://forum.ultimateam.pl/Thread-VXAce-...ionk%C4%99</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[System głodu/pragnienia/wytrzymałości na zdarzeniach]]></title>
			<link>https://forum.ultimateam.pl/Thread-Dowolny-System-g%C5%82odu-pragnienia-wytrzyma%C5%82o%C5%9Bci-na-zdarzeniach</link>
			<pubDate>Sun, 30 Aug 2015 14:48:05 +0200</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-Dowolny-System-g%C5%82odu-pragnienia-wytrzyma%C5%82o%C5%9Bci-na-zdarzeniach</guid>
			<description><![CDATA[Udało mi się opracować bardzo prosty system, który będzie odpowiadał za wskaźnik potrzeb, takich jak np. głód czy pragnienie.<br />
Co prawda wszystko będzie działać bez dodatkowego skryptu, ale dla wygody polecam ten skrypt:<br />
<a href="http://www.ultimateam.pl/viewtopic.php?t=4057" target="_blank">http://www.ultimateam.pl/viewtopic.php?t=4057</a><br />
<br />
Zaczynamy!<br />
Będziemy potrzebować tylko jednej zmiennej i przełącznika, ja nazwę je "Głód", a ich ID to 1.<br />
<br />
<ol type="1">
<li>Zegar. <ul>
<li>Tworzymy równoległe zdarzenie, które będzie odpowiadało za prędkość dodawania głodu do paska. Można zrobić też aktywację poprzez naciśnięcie przycisku, jeśli chcemy dać dla gracza opcję rozpoczęcia w dowolnym czasie.</li>
<li>Tworzymy pętlę</li>
<li>W niej umieszczamy funkcję "Czekaj" i ustawiamy czas, co jaki ma być dodawany jeden punkt głodu. (wartość podajemy w klatkach, a więc 60 to jedna sekunda) Ja ustawię 600 aby jeden punkt głodu był dodawany co 10 sekund - 60*10.<br />
<img class="postimage" src="http://i.imgur.com/3ZpKV4X.png" border="0" alt="[Obrazek: 3ZpKV4X.png]" /></li>
<li>Następnie wybieramy "Zmień zmienną" (w moim przypadku "0001: Głód")<br />
i ustawiamy tak, aby dodawało do wartości zmiennej +1.<br />
<img class="postimage" src="http://i.imgur.com/Alo5XJa.png" border="0" alt="[Obrazek: Alo5XJa.png]" /><br />
Teraz co 10 sekund wartość zmiennej będzie podnosiła się o 1.<br />
</li></ul></li>
<li>Konfiguracja skryptu.<ul>
<li>Jeśli twoja zmienna odpowiadająca za głód ma te same ID, którą ustawiłem ja to wystarczy, że przepiszesz ustawienia stąd:<br />
<img class="postimage" src="http://i.imgur.com/iZxzlZh.png" border="0" alt="[Obrazek: iZxzlZh.png]" /><br />
Skrypt jest przetłumaczony więc myślę, że nikt nie będzie miał z nim problemów.<br />
Najważniejsze jest, aby zmienna wyświetlana w skrypcie odpowiadała zmiennej w zdarzeniu, a maksymalna wartość wyświetlana wynosiła 100 (co prawda może wynosić więcej, ale najlepiej jest ustawić "ładną" liczbę).</li>
<li>Aby wyświetlić pasek, należy włączyć przełącznik ustalony w konfiguracji skryptu, w moim przypadku jest to przełącznik 1.<br />
Tu też najlepiej ustawić równoległe zdarzenie.<br />
<img class="postimage" src="http://i.imgur.com/7MaW7wd.png" border="0" alt="[Obrazek: 7MaW7wd.png]" /><br />
<br />
</li></ul></li>
<li>Rezultat w grze<br />
<img class="postimage" src="http://i.imgur.com/dZKldux.png" border="0" alt="[Obrazek: dZKldux.png]" /><br />
Po 20 sekundach<br />
<img class="postimage" src="http://i.imgur.com/Hv3O9YP.png" border="0" alt="[Obrazek: Hv3O9YP.png]" /></li>
<li>Tworzenie jedzenia lub innych przedmiotów, które będą zmniejszały poziom głodu.<ul>
<li>Aby stworzyć przedmiot odpowiadający za zmniejszenie poziomu głodu otwieramy Bazę danych, przechodzimy do zakładki "Przedmioty" i tworzymy cokolwiek, ja dla realizmu stworzyłem szynkę. O ile nazwa i opis to dowolna kwestia, to reszta powinna być ustawiona tak jak na obrazku.<br />
<img class="postimage" src="http://i.imgur.com/byQsy6j.png" border="0" alt="[Obrazek: byQsy6j.png]" /><br />
Najważniejsze jest, aby ustawić statystyki na np. "Max HP" (inaczej przedmiot nie zadziała) i Typowe zdarzenie.</li>
<li>Aby ustawić typowe zdarzenie, musimy je najpierw stworzyć! W tym celu przechodzimy do zakładki "Typowe zdarzenia", tworzymy zdarzenie, które będzie zmieniało wartość zmiennej o -10. Wartość jest dowolna.<br />
<img class="postimage" src="http://i.imgur.com/jxkVryv.png" border="0" alt="[Obrazek: jxkVryv.png]" /><br />
<img class="postimage" src="http://i.imgur.com/soiTYYU.png" border="0" alt="[Obrazek: soiTYYU.png]" /><br />
Przed użyciem przedmiotu<br />
<img class="postimage" src="http://i.imgur.com/VdMmEkr.png" border="0" alt="[Obrazek: VdMmEkr.png]" /><br />
I po użyciu<br />
<img class="postimage" src="http://i.imgur.com/ml6tZhd.png" border="0" alt="[Obrazek: ml6tZhd.png]" /><br />
</li></ul>
<br />
<br />
<br />
</li></ol>
<br />
<br />
<br />
Mam nadzieję, że pomogłem i w jakiś sposób komuś się to przyda.<br />
Pozdrówka.]]></description>
			<content:encoded><![CDATA[Udało mi się opracować bardzo prosty system, który będzie odpowiadał za wskaźnik potrzeb, takich jak np. głód czy pragnienie.<br />
Co prawda wszystko będzie działać bez dodatkowego skryptu, ale dla wygody polecam ten skrypt:<br />
<a href="http://www.ultimateam.pl/viewtopic.php?t=4057" target="_blank">http://www.ultimateam.pl/viewtopic.php?t=4057</a><br />
<br />
Zaczynamy!<br />
Będziemy potrzebować tylko jednej zmiennej i przełącznika, ja nazwę je "Głód", a ich ID to 1.<br />
<br />
<ol type="1">
<li>Zegar. <ul>
<li>Tworzymy równoległe zdarzenie, które będzie odpowiadało za prędkość dodawania głodu do paska. Można zrobić też aktywację poprzez naciśnięcie przycisku, jeśli chcemy dać dla gracza opcję rozpoczęcia w dowolnym czasie.</li>
<li>Tworzymy pętlę</li>
<li>W niej umieszczamy funkcję "Czekaj" i ustawiamy czas, co jaki ma być dodawany jeden punkt głodu. (wartość podajemy w klatkach, a więc 60 to jedna sekunda) Ja ustawię 600 aby jeden punkt głodu był dodawany co 10 sekund - 60*10.<br />
<img class="postimage" src="http://i.imgur.com/3ZpKV4X.png" border="0" alt="[Obrazek: 3ZpKV4X.png]" /></li>
<li>Następnie wybieramy "Zmień zmienną" (w moim przypadku "0001: Głód")<br />
i ustawiamy tak, aby dodawało do wartości zmiennej +1.<br />
<img class="postimage" src="http://i.imgur.com/Alo5XJa.png" border="0" alt="[Obrazek: Alo5XJa.png]" /><br />
Teraz co 10 sekund wartość zmiennej będzie podnosiła się o 1.<br />
</li></ul></li>
<li>Konfiguracja skryptu.<ul>
<li>Jeśli twoja zmienna odpowiadająca za głód ma te same ID, którą ustawiłem ja to wystarczy, że przepiszesz ustawienia stąd:<br />
<img class="postimage" src="http://i.imgur.com/iZxzlZh.png" border="0" alt="[Obrazek: iZxzlZh.png]" /><br />
Skrypt jest przetłumaczony więc myślę, że nikt nie będzie miał z nim problemów.<br />
Najważniejsze jest, aby zmienna wyświetlana w skrypcie odpowiadała zmiennej w zdarzeniu, a maksymalna wartość wyświetlana wynosiła 100 (co prawda może wynosić więcej, ale najlepiej jest ustawić "ładną" liczbę).</li>
<li>Aby wyświetlić pasek, należy włączyć przełącznik ustalony w konfiguracji skryptu, w moim przypadku jest to przełącznik 1.<br />
Tu też najlepiej ustawić równoległe zdarzenie.<br />
<img class="postimage" src="http://i.imgur.com/7MaW7wd.png" border="0" alt="[Obrazek: 7MaW7wd.png]" /><br />
<br />
</li></ul></li>
<li>Rezultat w grze<br />
<img class="postimage" src="http://i.imgur.com/dZKldux.png" border="0" alt="[Obrazek: dZKldux.png]" /><br />
Po 20 sekundach<br />
<img class="postimage" src="http://i.imgur.com/Hv3O9YP.png" border="0" alt="[Obrazek: Hv3O9YP.png]" /></li>
<li>Tworzenie jedzenia lub innych przedmiotów, które będą zmniejszały poziom głodu.<ul>
<li>Aby stworzyć przedmiot odpowiadający za zmniejszenie poziomu głodu otwieramy Bazę danych, przechodzimy do zakładki "Przedmioty" i tworzymy cokolwiek, ja dla realizmu stworzyłem szynkę. O ile nazwa i opis to dowolna kwestia, to reszta powinna być ustawiona tak jak na obrazku.<br />
<img class="postimage" src="http://i.imgur.com/byQsy6j.png" border="0" alt="[Obrazek: byQsy6j.png]" /><br />
Najważniejsze jest, aby ustawić statystyki na np. "Max HP" (inaczej przedmiot nie zadziała) i Typowe zdarzenie.</li>
<li>Aby ustawić typowe zdarzenie, musimy je najpierw stworzyć! W tym celu przechodzimy do zakładki "Typowe zdarzenia", tworzymy zdarzenie, które będzie zmieniało wartość zmiennej o -10. Wartość jest dowolna.<br />
<img class="postimage" src="http://i.imgur.com/jxkVryv.png" border="0" alt="[Obrazek: jxkVryv.png]" /><br />
<img class="postimage" src="http://i.imgur.com/soiTYYU.png" border="0" alt="[Obrazek: soiTYYU.png]" /><br />
Przed użyciem przedmiotu<br />
<img class="postimage" src="http://i.imgur.com/VdMmEkr.png" border="0" alt="[Obrazek: VdMmEkr.png]" /><br />
I po użyciu<br />
<img class="postimage" src="http://i.imgur.com/ml6tZhd.png" border="0" alt="[Obrazek: ml6tZhd.png]" /><br />
</li></ul>
<br />
<br />
<br />
</li></ol>
<br />
<br />
<br />
Mam nadzieję, że pomogłem i w jakiś sposób komuś się to przyda.<br />
Pozdrówka.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Zasięg widzenia na zdarzeniach]]></title>
			<link>https://forum.ultimateam.pl/Thread-Zasi%C4%99g-widzenia-na-zdarzeniach</link>
			<pubDate>Sun, 30 Aug 2015 11:55:24 +0200</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-Zasi%C4%99g-widzenia-na-zdarzeniach</guid>
			<description><![CDATA[Witam,<br />
<br />
udało mi się stworzyć bardzo prostą zdarzeniówkę odpowiadającą za zasięg widzenia. Jednak może mieć ona również szersze zastosowanie. <br />
<br />
Będziemy potrzebować:<br />
<br />
-2 zmiennych dla gracza (zmienne stałe, wystarczy stworzyć tylko raz)<br />
-2 zmiennych dla eventu (próbowałem zrobić tak, że nie trzeba dla każdego nowego eventu dawać nowych zmiennych, ale nie chciało działać w ten sposób, więc musimy za każdym razem tworzyć nowe zmienne)<br />
<br />
W wytłumaczeniu działania skryptu pomocna będzie ta grafika, która jednocześnie będzie małą ściągawką :<br />
<br />
<a href="http://s6699.chomikuj.pl/ChomikImage.aspx?e=upWplMJ4CPjCarV1mvw5xlpQmaCvVQQcnApCtTWfGFcXJlJK6X0IxXPhTlQZN&#8203;IXGeXghQS45iUZa075f6iqK4HKOwRkJcfTvKXMbmoj-f-Y&amp;pv=2" target="_blank">http://s6699.chomikuj.pl/ChomikImage.asp...j-f-Y&pv=2</a><br />
<br />
Na czym to polega? Już tłumaczę:<br />
<br />
1. Tworzymy gdzieś na mapie zdarzenie równoległe w którym znajduje się:<br />
<br />
   a)Zmień zmienną[001]=współrzędna X gracza<br />
   b)Zmień zmienną[002]=współrzędna Y gracza<br />
   c)Zmień zmienną[003]=współrzędna X Eventu o danej nazwie np. :EV001<br />
   d)Zmień zmienną[004]=współrzędna Y Eventu o danej nazwie np. :EV001<br />
<br />
Jeżeli chcemy żeby więcej zdarzeń miało zasięg widzenia to tworzymy kolejne 2 zmienne dla nowego zdarzenia:<br />
<br />
   e)Zmień zmienną[005]=współrzędna X Eventu o danej nazwie np.: EV002<br />
   f)Zmień zmienną[005]=współrzędna Y Eventu o danej nazwie np.: EV002<br />
itd.<br />
<br />
2. Tworzymy na mapie zdarzenie równoległe w którym znajduje się:<br />
  a)Zmień zmienną[003]-Zmienna[001]   (Odejmujemy od Zmiennej X danego zdarzenia  Zmienną X gracz)<br />
  b)Zmień zmienną[004]-Zmienna[002]   (Odejmujemy od Zmiennej Y danego zdarzenia  Zmienną Y gracz)<br />
<br />
Dla kolejnych zdarzeń robimy to samo (o ile są inne zdarzenia):<br />
  c)Zmień zmienną[005]-Zmienna[001]   (Odejmujemy od Zmiennej X danego zdarzenia  Zmienną X gracz)<br />
   d)Zmień zmienną[006]-Zmienna[002]   (Odejmujemy od Zmiennej Y danego zdarzenia  Zmienną Y gracz)<br />
<br />
Jak widzicie zmienia się tylko numer zmiennej dla zdarzenia. Zmienne dla gracza są stałe.<br />
<br />
<br />
Dla każdego zdarzenia możemy ustawić INDYWIDUALNY oraz DOWOLNY zasięg widzenia. Jak to zrobić? To bardzo proste, pomoże nam w tym grafika którą zamieściłem wyżej:<br />
<br />
Na samym środku grafiki znajduje się pozycja danego zdarzenia, jeżeli chcemy żeby zdarzenie miało view range o zasięgu 1 kratki to w tym zdarzeniu robimy tak:<br />
<br />
Przykład dla zdarzenia EV001: (Trzeba ustawić zdarzenie równoległe w evencie)<br />
<br />
&gt;Ustaw warunek: Zmienna[003]=1<br />
&gt;&gt;Ustaw warunek: Zmienna[004]=0<br />
&gt;&gt;&gt;Ustawiamy jakąś akcje!!!<br />
<br />
W tym ustawieniu gracz wywoła akcję (Event zobaczy gracza) jeżeli będzie 1 kwadracik pod danym zdarzeniem. Jeżeli chcemy ustawić większy obszar to robimy analogicznie jak w powyższym przypadku. Pomocne będą wyniki z odejmowania dla X oraz Y z obrazka. <br />
<br />
Po prostu patrzymy na czerwony napis EVENT na środku. A wszystkie inne kwadraciki z x=ileś tam i y=ileś tam to wyniki jakie należy ustawić w Warunku działania zdarzenia. <br />
<br />
Podam przykład na viev range zdarzenia o zasięgu 1 kratki:<br />
<br />
&gt;Ustaw warunek: Zmienna[003]=0<br />
&gt;&gt;Ustaw warunek: Zmienna[004]=1<br />
&gt;&gt;&gt;Jakaś akcja<br />
_____<br />
&gt;Ustaw warunek: Zmienna[003]=1<br />
&gt;&gt;Ustaw warunek: Zmienna[004]=0<br />
&gt;&gt;&gt;Jakaś akcja<br />
_____<br />
&gt;Ustaw warunek: Zmienna[003]=-1<br />
&gt;&gt;Ustaw warunek: Zmienna[004]=0<br />
&gt;&gt;&gt;Jakaś akcja<br />
_____<br />
&gt;Ustaw warunek: Zmienna[003]=0<br />
&gt;&gt;Ustaw warunek: Zmienna[004]=-1<br />
&gt;&gt;&gt;Jakaś akcja<br />
<br />
A teraz porównajcie to z obrazkiem który wstawiłem. Proste prawda? <br />
<br />
Nie musimy ustawiać zasięgu widzenia po okręgu, możemy ustawić, że zdarzenia widzi tylko to co ma przed sobą. Wystarczy użyć odpowiednich wyników dla zmiennych.<br />
<br />
<br />
No dobrze, ale co jeśli zdarzenie nie stoi w miejscu tylko jest w ruchu? Wtedy musimy dodać, warunek, że jeżeli zdarzenie jest odwrócone twarzą w daną stronę to ma określony (inny) zasięg widzenia. Trochę jest przy tym roboty, ale daje to naprawdę dużą satysfakcję, ponieważ zrobiliśmy to sami, a nie za pomocą gotowego skryptu. Ponadto tutaj możemy ustawić dowolny zasięg widzenia i nie ogranicza nas nic. <br />
<br />
Dziękuje za uwagę i pozdrawiam! Życzę wszystkim powodzenia w tworzeniu i zachęcam do robienia wszystkiego samemu zamiast wyręczać się cudzym już gotowym skryptem którego nawet nie rozumiemy! Zdarzenia rulez!!!]]></description>
			<content:encoded><![CDATA[Witam,<br />
<br />
udało mi się stworzyć bardzo prostą zdarzeniówkę odpowiadającą za zasięg widzenia. Jednak może mieć ona również szersze zastosowanie. <br />
<br />
Będziemy potrzebować:<br />
<br />
-2 zmiennych dla gracza (zmienne stałe, wystarczy stworzyć tylko raz)<br />
-2 zmiennych dla eventu (próbowałem zrobić tak, że nie trzeba dla każdego nowego eventu dawać nowych zmiennych, ale nie chciało działać w ten sposób, więc musimy za każdym razem tworzyć nowe zmienne)<br />
<br />
W wytłumaczeniu działania skryptu pomocna będzie ta grafika, która jednocześnie będzie małą ściągawką :<br />
<br />
<a href="http://s6699.chomikuj.pl/ChomikImage.aspx?e=upWplMJ4CPjCarV1mvw5xlpQmaCvVQQcnApCtTWfGFcXJlJK6X0IxXPhTlQZN&#8203;IXGeXghQS45iUZa075f6iqK4HKOwRkJcfTvKXMbmoj-f-Y&amp;pv=2" target="_blank">http://s6699.chomikuj.pl/ChomikImage.asp...j-f-Y&pv=2</a><br />
<br />
Na czym to polega? Już tłumaczę:<br />
<br />
1. Tworzymy gdzieś na mapie zdarzenie równoległe w którym znajduje się:<br />
<br />
   a)Zmień zmienną[001]=współrzędna X gracza<br />
   b)Zmień zmienną[002]=współrzędna Y gracza<br />
   c)Zmień zmienną[003]=współrzędna X Eventu o danej nazwie np. :EV001<br />
   d)Zmień zmienną[004]=współrzędna Y Eventu o danej nazwie np. :EV001<br />
<br />
Jeżeli chcemy żeby więcej zdarzeń miało zasięg widzenia to tworzymy kolejne 2 zmienne dla nowego zdarzenia:<br />
<br />
   e)Zmień zmienną[005]=współrzędna X Eventu o danej nazwie np.: EV002<br />
   f)Zmień zmienną[005]=współrzędna Y Eventu o danej nazwie np.: EV002<br />
itd.<br />
<br />
2. Tworzymy na mapie zdarzenie równoległe w którym znajduje się:<br />
  a)Zmień zmienną[003]-Zmienna[001]   (Odejmujemy od Zmiennej X danego zdarzenia  Zmienną X gracz)<br />
  b)Zmień zmienną[004]-Zmienna[002]   (Odejmujemy od Zmiennej Y danego zdarzenia  Zmienną Y gracz)<br />
<br />
Dla kolejnych zdarzeń robimy to samo (o ile są inne zdarzenia):<br />
  c)Zmień zmienną[005]-Zmienna[001]   (Odejmujemy od Zmiennej X danego zdarzenia  Zmienną X gracz)<br />
   d)Zmień zmienną[006]-Zmienna[002]   (Odejmujemy od Zmiennej Y danego zdarzenia  Zmienną Y gracz)<br />
<br />
Jak widzicie zmienia się tylko numer zmiennej dla zdarzenia. Zmienne dla gracza są stałe.<br />
<br />
<br />
Dla każdego zdarzenia możemy ustawić INDYWIDUALNY oraz DOWOLNY zasięg widzenia. Jak to zrobić? To bardzo proste, pomoże nam w tym grafika którą zamieściłem wyżej:<br />
<br />
Na samym środku grafiki znajduje się pozycja danego zdarzenia, jeżeli chcemy żeby zdarzenie miało view range o zasięgu 1 kratki to w tym zdarzeniu robimy tak:<br />
<br />
Przykład dla zdarzenia EV001: (Trzeba ustawić zdarzenie równoległe w evencie)<br />
<br />
&gt;Ustaw warunek: Zmienna[003]=1<br />
&gt;&gt;Ustaw warunek: Zmienna[004]=0<br />
&gt;&gt;&gt;Ustawiamy jakąś akcje!!!<br />
<br />
W tym ustawieniu gracz wywoła akcję (Event zobaczy gracza) jeżeli będzie 1 kwadracik pod danym zdarzeniem. Jeżeli chcemy ustawić większy obszar to robimy analogicznie jak w powyższym przypadku. Pomocne będą wyniki z odejmowania dla X oraz Y z obrazka. <br />
<br />
Po prostu patrzymy na czerwony napis EVENT na środku. A wszystkie inne kwadraciki z x=ileś tam i y=ileś tam to wyniki jakie należy ustawić w Warunku działania zdarzenia. <br />
<br />
Podam przykład na viev range zdarzenia o zasięgu 1 kratki:<br />
<br />
&gt;Ustaw warunek: Zmienna[003]=0<br />
&gt;&gt;Ustaw warunek: Zmienna[004]=1<br />
&gt;&gt;&gt;Jakaś akcja<br />
_____<br />
&gt;Ustaw warunek: Zmienna[003]=1<br />
&gt;&gt;Ustaw warunek: Zmienna[004]=0<br />
&gt;&gt;&gt;Jakaś akcja<br />
_____<br />
&gt;Ustaw warunek: Zmienna[003]=-1<br />
&gt;&gt;Ustaw warunek: Zmienna[004]=0<br />
&gt;&gt;&gt;Jakaś akcja<br />
_____<br />
&gt;Ustaw warunek: Zmienna[003]=0<br />
&gt;&gt;Ustaw warunek: Zmienna[004]=-1<br />
&gt;&gt;&gt;Jakaś akcja<br />
<br />
A teraz porównajcie to z obrazkiem który wstawiłem. Proste prawda? <br />
<br />
Nie musimy ustawiać zasięgu widzenia po okręgu, możemy ustawić, że zdarzenia widzi tylko to co ma przed sobą. Wystarczy użyć odpowiednich wyników dla zmiennych.<br />
<br />
<br />
No dobrze, ale co jeśli zdarzenie nie stoi w miejscu tylko jest w ruchu? Wtedy musimy dodać, warunek, że jeżeli zdarzenie jest odwrócone twarzą w daną stronę to ma określony (inny) zasięg widzenia. Trochę jest przy tym roboty, ale daje to naprawdę dużą satysfakcję, ponieważ zrobiliśmy to sami, a nie za pomocą gotowego skryptu. Ponadto tutaj możemy ustawić dowolny zasięg widzenia i nie ogranicza nas nic. <br />
<br />
Dziękuje za uwagę i pozdrawiam! Życzę wszystkim powodzenia w tworzeniu i zachęcam do robienia wszystkiego samemu zamiast wyręczać się cudzym już gotowym skryptem którego nawet nie rozumiemy! Zdarzenia rulez!!!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Dziennik Misji]]></title>
			<link>https://forum.ultimateam.pl/Thread-VXAce-Dziennik-Misji--2292</link>
			<pubDate>Sun, 17 May 2015 17:56:29 +0200</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-VXAce-Dziennik-Misji--2292</guid>
			<description><![CDATA[<div style="text-align: center;"><span style="font-size: large;"><span style="color: #FF0000;">Witam. W tym poradniku napisze jak używać skryptu Quest Journal <a href="http://forum.ultimateam.pl/Thread-VXAce-Dziennik-Misji" target="_blank">(Dziennik)</a></span></span></div>
<span style="font-size: medium;">1<span style="color: #FFA500;">. Aby stworzyć nowy quest musicie przejść do linii 836 skryptu.<br />
Macie tam 3 przykładowe questy (Możecie je usunąć lub zostawić).<br />
Nieco wyżej musicie znaleźć takie coś</span><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when quest_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:name]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= "??????"<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:icon_index]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:level]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:description]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:banner]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:banner_hue]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:objectives][0]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:objectives][1]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:objectives][2]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:objectives][n]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:prime_objectives]&nbsp;&nbsp;= [0, 1, 2, n]<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:custom_categories] = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:client]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:location]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:rewards]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:common_event_id]&nbsp;&nbsp; = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:layout]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= false</code></div></div>
</div></div><span style="color: #FFA500;">Jest to podstawa pod zrobienie każdego questa, wpisujecie tu cele, nazwę misji,<br />
nagrody i tak dalej. Żeby stworzyć nowy quest kopiujecie ten kod i wklejacie go pod questami przykładowymi (chyba, że je usunęliście). Po wklejeniu usuwamy # i zaczynamy robić nasz quest. Całość ma wyglądać tak:</span><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when quest_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:name]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= "??????"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:icon_index]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:level]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:description]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:banner]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:banner_hue]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:objectives][0]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:objectives][1]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:objectives][2]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:objectives][n]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:prime_objectives]&nbsp;&nbsp;= [0, 1, 2, n]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:custom_categories] = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:client]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:location]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:rewards]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:common_event_id]&nbsp;&nbsp; = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:layout]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= false</code></div></div>
</div></div><span style="color: #FFA500;"><br />
Teraz pokrótce wszystko wytłumacze...<br />
1) when quest_id - po prostu id waszego questa, nie może się zdublować z innym questem, więc najlepiej robić po kolei, musi być to liczba np. when 4<br />
2) q:name = "???????" - nazwa naszego questa, np. q:name = Zbieranie owoców<br />
3) q[:icon_index] = 0 - ikonka przedmiotu wyświetlającego się obok nazwy naszego questa<br />
4) q[:level] = 0 - <br />
5) q[:banner] = "" - Wygląd naszego questa, nazwa pliku, który musimy umieścić w graphics, radzę nie zmieniać<br />
6) g[:banner_hue = 0 - lepiej nie zmieniać<br />
7) q[:objectives][0]     = "" - Cele naszej misji, będą wyświetlane w naszym menu. Krótki opis tego co jakaś osoba ma zrobić.<br />
8) q[:objectives][1]     = "" - Można ich zrobić ile się chce.<br />
9) q[:objectives][2]     = "" - Następny cel, można je usunąć, ale musi zostać przynajmniej jeden.<br />
10) q[:objectives][n]     = "" - to samo co wcześniej, to jest tylko wzór dla następnych celów, n musi być zastąpione liczbą.<br />
11) q[:prime_objectives]  = [0, 1, 2, n] - czyli główne cele misji, które muszą być ukończone, aby misja się powiodła. Można na przykład usunąć cel 1, wtedy będzie on tylko opcjonalny(będzie można go zrobić, ale nie trzeba by quest się powiódł)<br />
12) q[:custom_categories] = [] - Można tak zmienić kategorię zadanie, czyli to co się wyświetla w lewym górnym rogu. Podstawowe kategorie to "aktualne", "zakończone", "wszystkie" i nieudane. Można je zmienić lub dodać nowe w linijce 371<br />
13) q[:client] = "" - Inię zleceniodawcy (chyba nie trzeba bardziej tłumaczyć...)<br />
14) q[:location] = "" - Lokacja gdzie zostało to zlecone, lub gdzie ma zostać wykonana ta misja, twój wybór<br />
15) q[:rewards] = [] - czyli nagrody za misję...<br />
16) q[:common_event_id]   = 0 - Pozwala ci na wywołanie typowego zdarzenia po zakończeniu questa<br />
17) q[:layout] = false - Lepiej tego nie ruszać jeśli się na tym nie znasz<br />
U mnie quest wygląda tak:</span><br />
</span><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 4 # Quest 3 - Pierścień rodowy<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:name]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= "Pierścień rodowy"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:icon_index]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 144<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:level]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:description]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = "Młody chłopak poprosił cię o pomoc w znalezieniu pierścienia"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:banner]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:banner_hue]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:objectives][0]&nbsp;&nbsp;&nbsp;&nbsp; = "Znajdź pierścień z szmaragdem"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:objectives][1]&nbsp;&nbsp;&nbsp;&nbsp; = "Porozmawiaj z chłopcem"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:prime_objectives]&nbsp;&nbsp;= [0, 1,]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:custom_categories] = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:client]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= "Patryk"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:location]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= "Leśne Miasto"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:rewards]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = [<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:gold, 100],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:common_event_id]&nbsp;&nbsp; = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:layout]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= false</code></div></div>
</div></div><span style="color: #32CD32;"><span style="font-size: medium;">2. Misja w skrypcie już zrobiona, więc zabierzmy się za zrobienie jej na mapie w RPG Makerze...<br />
1) Najpierw dodajemy NPC'a lub jakiś list czy coś takiego, który będzie aktywował naszego questa. Zróbmy jakąś podstawową rozmowę, i gdy gracz wybierze, że chce rozpocząć tego questa robimy coś takiego. Klikamy nowe polecenie zdarzenia i przechodzimy do 3 zakładki i tam klikamy na skrypt, wpisujemy tam taką komendę:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>reveal_objective(4, 0)</code></div></div>
Te 4 w tym kodzie to id questa, a 0 to id celu, ta komenda ma za zadanie pokazać nam w menu zadanie 4, cel zerowy, wzór jest taki <br />
reveal_objective(id_questa, id_celu), <span style="color: #FF0000;">proszę pamiętać o tym aby po objective nie dać spacji!</span>, następnie dajemy przełącznik własny A na ON i tworzymy nową stronę, u mnie to wygląda tak: <div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><img class="postimage" src="https://imagizer.imageshack.us/v2/745x521q90/903/9pOK03.png" border="0" alt="[Obrazek: 9pOK03.png]" /></div></div>Teraz na ziemi gdzieś dajemy teksturę pierścienia (ja niestety nie miałem, więc dałem skrzynkę) i teraz znowu w poleceniu zdarzenia dajemy skrypt i wpisujemy: <div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>complete_objective(4, 0)</code></div></div>
 i drugie w następnym poleceniu <div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>reveal_objective(4, 1)</code></div></div>
 Pierwsza komenda uznaje nasz pierwszy cel za zakończony i dodaje drugi. Teraz tylko przełącznik własny i robimy nową stronę, gdzie dajemy albo otwartą skrzynkę, albo nic jeśli mieliśmy strukturę pierścienia. U mnie to wygląda tak: <div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><img class="postimage" src="https://imagizer.imageshack.us/v2/895x552q90/910/dUvScK.png" border="0" alt="[Obrazek: dUvScK.png]" /></div></div>Teraz znowu wracamy do naszego zleceniodawcy. Dodajemy u niego na drugiej stronie, warunek: Pierścień rodowy jest w posiadaniu, czy jak tam sobie wybierzecie, i wtedy dodajecie jakąś tam rozmowę i skrypt: <div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>complete_objective(4, 1)</code></div></div>
 U mnie to wygląda tak:<br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><img class="postimage" src="https://imagizer.imageshack.us/v2/1134x701q50/540/my69XN.png" border="0" alt="[Obrazek: my69XN.png]" /></div></div>Gratulację! Zrobiliście własnego questa :D Jeśli o czymś zapomniałem to dopiszę to jutro. Mogłem to zrobić w dużo krótszej wersji, ale jeśli ktoś to przeczyta dokładnie, nawet ktoś bardzo zielony powinien umieć to zrobić.<br />
</span></span><br />
<br />
Jeśli chcesz ten tutorial gdzieś udostępnić, musisz podać autora (czyli mnie) oraz stronę na której znajduje się orginał.]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;"><span style="font-size: large;"><span style="color: #FF0000;">Witam. W tym poradniku napisze jak używać skryptu Quest Journal <a href="http://forum.ultimateam.pl/Thread-VXAce-Dziennik-Misji" target="_blank">(Dziennik)</a></span></span></div>
<span style="font-size: medium;">1<span style="color: #FFA500;">. Aby stworzyć nowy quest musicie przejść do linii 836 skryptu.<br />
Macie tam 3 przykładowe questy (Możecie je usunąć lub zostawić).<br />
Nieco wyżej musicie znaleźć takie coś</span><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when quest_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:name]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= "??????"<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:icon_index]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:level]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:description]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:banner]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:banner_hue]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:objectives][0]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:objectives][1]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:objectives][2]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:objectives][n]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:prime_objectives]&nbsp;&nbsp;= [0, 1, 2, n]<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:custom_categories] = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:client]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:location]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:rewards]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:common_event_id]&nbsp;&nbsp; = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp; q[:layout]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= false</code></div></div>
</div></div><span style="color: #FFA500;">Jest to podstawa pod zrobienie każdego questa, wpisujecie tu cele, nazwę misji,<br />
nagrody i tak dalej. Żeby stworzyć nowy quest kopiujecie ten kod i wklejacie go pod questami przykładowymi (chyba, że je usunęliście). Po wklejeniu usuwamy # i zaczynamy robić nasz quest. Całość ma wyglądać tak:</span><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when quest_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:name]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= "??????"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:icon_index]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:level]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:description]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:banner]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:banner_hue]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:objectives][0]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:objectives][1]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:objectives][2]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:objectives][n]&nbsp;&nbsp;&nbsp;&nbsp; = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:prime_objectives]&nbsp;&nbsp;= [0, 1, 2, n]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:custom_categories] = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:client]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:location]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:rewards]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:common_event_id]&nbsp;&nbsp; = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[:layout]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= false</code></div></div>
</div></div><span style="color: #FFA500;"><br />
Teraz pokrótce wszystko wytłumacze...<br />
1) when quest_id - po prostu id waszego questa, nie może się zdublować z innym questem, więc najlepiej robić po kolei, musi być to liczba np. when 4<br />
2) q:name = "???????" - nazwa naszego questa, np. q:name = Zbieranie owoców<br />
3) q[:icon_index] = 0 - ikonka przedmiotu wyświetlającego się obok nazwy naszego questa<br />
4) q[:level] = 0 - <br />
5) q[:banner] = "" - Wygląd naszego questa, nazwa pliku, który musimy umieścić w graphics, radzę nie zmieniać<br />
6) g[:banner_hue = 0 - lepiej nie zmieniać<br />
7) q[:objectives][0]     = "" - Cele naszej misji, będą wyświetlane w naszym menu. Krótki opis tego co jakaś osoba ma zrobić.<br />
8) q[:objectives][1]     = "" - Można ich zrobić ile się chce.<br />
9) q[:objectives][2]     = "" - Następny cel, można je usunąć, ale musi zostać przynajmniej jeden.<br />
10) q[:objectives][n]     = "" - to samo co wcześniej, to jest tylko wzór dla następnych celów, n musi być zastąpione liczbą.<br />
11) q[:prime_objectives]  = [0, 1, 2, n] - czyli główne cele misji, które muszą być ukończone, aby misja się powiodła. Można na przykład usunąć cel 1, wtedy będzie on tylko opcjonalny(będzie można go zrobić, ale nie trzeba by quest się powiódł)<br />
12) q[:custom_categories] = [] - Można tak zmienić kategorię zadanie, czyli to co się wyświetla w lewym górnym rogu. Podstawowe kategorie to "aktualne", "zakończone", "wszystkie" i nieudane. Można je zmienić lub dodać nowe w linijce 371<br />
13) q[:client] = "" - Inię zleceniodawcy (chyba nie trzeba bardziej tłumaczyć...)<br />
14) q[:location] = "" - Lokacja gdzie zostało to zlecone, lub gdzie ma zostać wykonana ta misja, twój wybór<br />
15) q[:rewards] = [] - czyli nagrody za misję...<br />
16) q[:common_event_id]   = 0 - Pozwala ci na wywołanie typowego zdarzenia po zakończeniu questa<br />
17) q[:layout] = false - Lepiej tego nie ruszać jeśli się na tym nie znasz<br />
U mnie quest wygląda tak:</span><br />
</span><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 4 # Quest 3 - Pierścień rodowy<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:name]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= "Pierścień rodowy"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:icon_index]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 144<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:level]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:description]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = "Młody chłopak poprosił cię o pomoc w znalezieniu pierścienia"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:banner]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:banner_hue]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:objectives][0]&nbsp;&nbsp;&nbsp;&nbsp; = "Znajdź pierścień z szmaragdem"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:objectives][1]&nbsp;&nbsp;&nbsp;&nbsp; = "Porozmawiaj z chłopcem"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:prime_objectives]&nbsp;&nbsp;= [0, 1,]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:custom_categories] = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:client]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= "Patryk"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:location]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= "Leśne Miasto"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:rewards]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = [<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:gold, 100],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:common_event_id]&nbsp;&nbsp; = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q[:layout]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= false</code></div></div>
</div></div><span style="color: #32CD32;"><span style="font-size: medium;">2. Misja w skrypcie już zrobiona, więc zabierzmy się za zrobienie jej na mapie w RPG Makerze...<br />
1) Najpierw dodajemy NPC'a lub jakiś list czy coś takiego, który będzie aktywował naszego questa. Zróbmy jakąś podstawową rozmowę, i gdy gracz wybierze, że chce rozpocząć tego questa robimy coś takiego. Klikamy nowe polecenie zdarzenia i przechodzimy do 3 zakładki i tam klikamy na skrypt, wpisujemy tam taką komendę:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>reveal_objective(4, 0)</code></div></div>
Te 4 w tym kodzie to id questa, a 0 to id celu, ta komenda ma za zadanie pokazać nam w menu zadanie 4, cel zerowy, wzór jest taki <br />
reveal_objective(id_questa, id_celu), <span style="color: #FF0000;">proszę pamiętać o tym aby po objective nie dać spacji!</span>, następnie dajemy przełącznik własny A na ON i tworzymy nową stronę, u mnie to wygląda tak: <div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><img class="postimage" src="https://imagizer.imageshack.us/v2/745x521q90/903/9pOK03.png" border="0" alt="[Obrazek: 9pOK03.png]" /></div></div>Teraz na ziemi gdzieś dajemy teksturę pierścienia (ja niestety nie miałem, więc dałem skrzynkę) i teraz znowu w poleceniu zdarzenia dajemy skrypt i wpisujemy: <div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>complete_objective(4, 0)</code></div></div>
 i drugie w następnym poleceniu <div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>reveal_objective(4, 1)</code></div></div>
 Pierwsza komenda uznaje nasz pierwszy cel za zakończony i dodaje drugi. Teraz tylko przełącznik własny i robimy nową stronę, gdzie dajemy albo otwartą skrzynkę, albo nic jeśli mieliśmy strukturę pierścienia. U mnie to wygląda tak: <div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><img class="postimage" src="https://imagizer.imageshack.us/v2/895x552q90/910/dUvScK.png" border="0" alt="[Obrazek: dUvScK.png]" /></div></div>Teraz znowu wracamy do naszego zleceniodawcy. Dodajemy u niego na drugiej stronie, warunek: Pierścień rodowy jest w posiadaniu, czy jak tam sobie wybierzecie, i wtedy dodajecie jakąś tam rozmowę i skrypt: <div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>complete_objective(4, 1)</code></div></div>
 U mnie to wygląda tak:<br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><img class="postimage" src="https://imagizer.imageshack.us/v2/1134x701q50/540/my69XN.png" border="0" alt="[Obrazek: my69XN.png]" /></div></div>Gratulację! Zrobiliście własnego questa :D Jeśli o czymś zapomniałem to dopiszę to jutro. Mogłem to zrobić w dużo krótszej wersji, ale jeśli ktoś to przeczyta dokładnie, nawet ktoś bardzo zielony powinien umieć to zrobić.<br />
</span></span><br />
<br />
Jeśli chcesz ten tutorial gdzieś udostępnić, musisz podać autora (czyli mnie) oraz stronę na której znajduje się orginał.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Poradnik do RPG Makera XP]]></title>
			<link>https://forum.ultimateam.pl/Thread-XP-Poradnik-do-RPG-Makera-XP</link>
			<pubDate>Sun, 05 Apr 2015 21:36:43 +0200</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-XP-Poradnik-do-RPG-Makera-XP</guid>
			<description><![CDATA[Witam <img class="postimage" src="/images/smiles/icon_mrgreen.gif" style="vertical-align: middle;" border="0" alt="mrgreen" title="mrgreen" /><br />
Na wstępie chciał bym zaznaczyć że jestem tutaj nowy i proszę o wyrozumiałość przy drobnych błędach <img class="postimage" src="/images/smiles/icon_smile.gif" style="vertical-align: middle;" border="0" alt="smiles" title="smiles" /> ale nie zwalnia mnie to od otrzymywania kreatywnych uwag.<br />
A przechodząc do tematu wpadłem na pomysł zrealizowania poradnika do RPG Makera XP w formie wideo na moim kanale YT <a href="http://www.youtube.com/user/20Maras" target="_blank">"Kliknij tutaj jeśli chcesz zobaczyć"</a> gdzie będę się starał zrealizować własną grę. I oczywiście pomóc innym twórcą zrealizować swój projekt. Oczywiście jest jeszcze jeden cel dlaczego zdecydowałem się napisać na tym forum, jest nim otrzymywanie budującej krytyki i wytknięciu błędów jakie popełniłem oraz co mógłbym lepiej zrobić. Na razie mam do zaoferowania pierwszy film z ogólnych zasad program, ale szybko na drobie następne filmy które postaram się jak najszybciej dorzucać do tego postu żeby było wszystko jasno pokazane <img class="postimage" src="/images/smiles/icon_biggrin.gif" style="vertical-align: middle;" border="0" alt="biggrin" title="biggrin" /> Kolejny film już jest zaplanowany jako tworzenie własnej fabuły. Napiszcie mi czy temat wam się podoba co i jak mógłbym zrobić zmienić czy poprawić. Zapraszam do komentowania i oceniania moich prób wytłumaczenia innym tego programu Pozdrawiam.<br />
<br />
1.Zasady ogólne programu<br />
<!-- start: video_youtube_embed --><br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/QfejjNOlr6Q" frameborder="0" allowfullscreen></iframe><br />
<!-- end: video_youtube_embed --><br />
2.Tworzenie fabuły oraz pisane dialogów<br />
<!-- start: video_youtube_embed --><br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/FZvmaIKvtQ8" frameborder="0" allowfullscreen></iframe><br />
<!-- end: video_youtube_embed --><br />
3.Poprawiany poprzedni poradnik dotyczący fabuły (Mam nadzieje że ta forma jest bardziej przystępna)<br />
<!-- start: video_youtube_embed --><br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/fjuPo84wALA" frameborder="0" allowfullscreen></iframe><br />
<!-- end: video_youtube_embed --><br />
4.Edycja i przeróbka "titelsetów"<br />
<!-- start: video_youtube_embed --><br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/SNCY1tEX8JY" frameborder="0" allowfullscreen></iframe><br />
<!-- end: video_youtube_embed --><br />
5.Baza danych<br />
<!-- start: video_youtube_embed --><br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/mPw4fLXHGco" frameborder="0" allowfullscreen></iframe><br />
<!-- end: video_youtube_embed -->]]></description>
			<content:encoded><![CDATA[Witam <img class="postimage" src="/images/smiles/icon_mrgreen.gif" style="vertical-align: middle;" border="0" alt="mrgreen" title="mrgreen" /><br />
Na wstępie chciał bym zaznaczyć że jestem tutaj nowy i proszę o wyrozumiałość przy drobnych błędach <img class="postimage" src="/images/smiles/icon_smile.gif" style="vertical-align: middle;" border="0" alt="smiles" title="smiles" /> ale nie zwalnia mnie to od otrzymywania kreatywnych uwag.<br />
A przechodząc do tematu wpadłem na pomysł zrealizowania poradnika do RPG Makera XP w formie wideo na moim kanale YT <a href="http://www.youtube.com/user/20Maras" target="_blank">"Kliknij tutaj jeśli chcesz zobaczyć"</a> gdzie będę się starał zrealizować własną grę. I oczywiście pomóc innym twórcą zrealizować swój projekt. Oczywiście jest jeszcze jeden cel dlaczego zdecydowałem się napisać na tym forum, jest nim otrzymywanie budującej krytyki i wytknięciu błędów jakie popełniłem oraz co mógłbym lepiej zrobić. Na razie mam do zaoferowania pierwszy film z ogólnych zasad program, ale szybko na drobie następne filmy które postaram się jak najszybciej dorzucać do tego postu żeby było wszystko jasno pokazane <img class="postimage" src="/images/smiles/icon_biggrin.gif" style="vertical-align: middle;" border="0" alt="biggrin" title="biggrin" /> Kolejny film już jest zaplanowany jako tworzenie własnej fabuły. Napiszcie mi czy temat wam się podoba co i jak mógłbym zrobić zmienić czy poprawić. Zapraszam do komentowania i oceniania moich prób wytłumaczenia innym tego programu Pozdrawiam.<br />
<br />
1.Zasady ogólne programu<br />
<!-- start: video_youtube_embed --><br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/QfejjNOlr6Q" frameborder="0" allowfullscreen></iframe><br />
<!-- end: video_youtube_embed --><br />
2.Tworzenie fabuły oraz pisane dialogów<br />
<!-- start: video_youtube_embed --><br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/FZvmaIKvtQ8" frameborder="0" allowfullscreen></iframe><br />
<!-- end: video_youtube_embed --><br />
3.Poprawiany poprzedni poradnik dotyczący fabuły (Mam nadzieje że ta forma jest bardziej przystępna)<br />
<!-- start: video_youtube_embed --><br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/fjuPo84wALA" frameborder="0" allowfullscreen></iframe><br />
<!-- end: video_youtube_embed --><br />
4.Edycja i przeróbka "titelsetów"<br />
<!-- start: video_youtube_embed --><br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/SNCY1tEX8JY" frameborder="0" allowfullscreen></iframe><br />
<!-- end: video_youtube_embed --><br />
5.Baza danych<br />
<!-- start: video_youtube_embed --><br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/mPw4fLXHGco" frameborder="0" allowfullscreen></iframe><br />
<!-- end: video_youtube_embed -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Korzystanie z Blacksmith System by ForeverZer0]]></title>
			<link>https://forum.ultimateam.pl/Thread-XP-Korzystanie-z-Blacksmith-System-by-ForeverZer0</link>
			<pubDate>Sat, 04 Apr 2015 01:15:06 +0200</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-XP-Korzystanie-z-Blacksmith-System-by-ForeverZer0</guid>
			<description><![CDATA[W tym poradniku chciałem przedstawić system który pozwala na:<br />
- Wytwarzanie przedmiotów<br />
- Ekstraktowanie (rozkładanie na czynniki pierwsze)<br />
- Ulepszanie ekwipunku<br />
w poradniku zamieszczę informacje i instrukcje jak obsłużyć się konfiguratorem, skryptem i jak umieścić go w swoim projekcie.<br />
<br />
Wymagania:<br />
- Microsoft's .NET 2.0 Framework, lub nowszy<br />
- RPG Maker XP<br />
<br />
Przydatne strony:<br />
<a href="http://www.microsoft.com/pl-pl/download/details.aspx?id=30653" target="_blank">Microsoft .NET Framework 4.5</a><br />
<a href="http://dl.dropbox.com/u/20787370/Scripts/Blacksmith%202.0/Blacksmith%20System%202.0.zip" target="_blank">Demo</a><br />
<br />
<span style="color: #FFA500;"><span style="font-size: x-large;">1.Pobranie i umieszczenie skryptu w projekcie.</span></span><br />
<img class="postimage" src="http://dc390.4shared.com/img/2GCvU30Wba/s3/147feb8d5c0/hud.png" border="0" alt="[Obrazek: hud.png]" /><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">- Pierwszym krokiem jaki musimy wykonać to pobranie dema.<br />
- Następnie wypakowujemy je z archiwum <br />
Wygląd folderu:<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/folder.PNG?_subject_uid=407080461&amp;w=AAAUMVvCV2NCdyF8usQ_X070JwoIHn7hI0vyfe8DR24G9g" border="0" alt="[Obrazek: folder.PNG?_subject_uid=407080461&amp;am...fe8DR24G9g]" /><br />
- Kopiujemy nastepujące skrypty do swojego projektu<br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/skrypty.PNG?_subject_uid=407080461&amp;w=AAACkkiSglqnuyqX1iLrGGMmvFGO_KuCEnoxfkzRGuowNQ" border="0" alt="[Obrazek: skrypty.PNG?_subject_uid=407080461&amp;a...fkzRGuowNQ]" /><br />
- Kiedy skopiujemy skrypty możemy zabrać się za połączenie konfiguratora z naszą bazą danych w następujący sposób:<br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/call%201.PNG?_subject_uid=407080461&amp;w=AABr3PNDPRSHgVcxxGfHi07k65NrnndVIG4ISyJEL5POCw" border="0" alt="[Obrazek: call%201.PNG?_subject_uid=407080461&amp;...SyJEL5POCw]" /><br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/call%202.PNG?_subject_uid=407080461&amp;w=AADXbDSu7UzPpkn6FSwIlS6aFUvJxD5K3GPHHV-0OJCsNg" border="0" alt="[Obrazek: call%202.PNG?_subject_uid=407080461&amp;...HV-0OJCsNg]" /><br />
Wygenerowany kod kopiujemy i wklejamy nad "Blacksmith Windows", zapisujemy i uruchamiamy nasz projekt, wyświetli się nam komunikat <img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/komunikat%201.PNG?_subject_uid=407080461&amp;w=AACQGbquoRrxIOamBlGBbCWDukqwSO4uqODwdDUoT5AO7A" border="0" alt="[Obrazek: komunikat%201.PNG?_subject_uid=407080461...dDUoT5AO7A]" />, i utworzy się w naszym folderze plik o nazwie "BlacksmithCache".Utworzony plik przeciągamy na obrazek kowadła.</div></div>
<br />
<span style="color: #FFA500;"><span style="font-size: x-large;">2.Zakładka "Forges".</span></span><br />
<img class="postimage" src="http://dc390.4shared.com/img/2GCvU30Wba/s3/147feb8d5c0/hud.png" border="0" alt="[Obrazek: hud.png]" /><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><span style="font-weight: bold;">Zakładka Forges pozwala na skonfigurowanie naszej kuźni, w której będziemy wykuwać ekwipunek.</span><br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/forges.PNG?_subject_uid=407080461&amp;w=AAA140HPoBsCBM1A1HdQWSpuU_MjKxStjqABmO0gztMBCg" border="0" alt="[Obrazek: forges.PNG?_subject_uid=407080461&amp;am...mO0gztMBCg]" /><br />
[1]Bronie potrzebne do wykucia przedmiotu<br />
[2]Pancerze potrzebne do wykucia przedmiotu<br />
[3]itemy potrzebne do wykucia przedmiotu<br />
[4]Cena za wykucie przedmiotu<br />
[5]Lista<br />
[6]Wybór między broniami, pancerzami i przedmiotami</div></div>
<br />
<span style="color: #FFA500;"><span style="font-size: x-large;">3.Zakładka "Extractions"</span></span><br />
<img class="postimage" src="http://dc390.4shared.com/img/2GCvU30Wba/s3/147feb8d5c0/hud.png" border="0" alt="[Obrazek: hud.png]" /><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">
<span style="font-weight: bold;">Ta zakładka odpowiada za konfigurację rozkładania przedmiotów i ekwipunku</span><img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/extractions.PNG?_subject_uid=407080461&amp;w=AACRWNikbdsm_NByz2ltbOKKUP9g1MlzqkVwL5aQyrzP0Q" border="0" alt="[Obrazek: extractions.PNG?_subject_uid=407080461&a...L5aQyrzP0Q]" /><br />
[1]Bronie które otrzymamy po rozłożeniu przedmiotu<br />
[2]Pancerze jakie otrzymamy po rozłożeniu przedmiotu<br />
[3]Itemy które otrzymamy po rozłożeniu przedmiotu<br />
[4]Złoto jakie otrzymamy po rozłożeniu przedmiotu(zwrot)<br />
[5]Lista<br />
[6]Wybór między broniami, pancerzami i przedmiotami</div></div>
<br />
<span style="color: #FFA500;"><span style="font-size: x-large;">4.Zakładka "Enchantments"</span></span><br />
<img class="postimage" src="http://dc390.4shared.com/img/2GCvU30Wba/s3/147feb8d5c0/hud.png" border="0" alt="[Obrazek: hud.png]" /><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><span style="font-weight: bold;">W tej zakładce możemy ustawić magiczne przedmioty, które będą zwiększały lub zmniejszały statystyki, dodawały lub odejmowały stany i elementy.</span><br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/enchantments.PNG?_subject_uid=407080461&amp;w=AACpnsy2Hs5-UQFfbvpPu3qHWB18GcxNDP45D1twLi9eQA" border="0" alt="[Obrazek: enchantments.PNG?_subject_uid=407080461&...D1twLi9eQA]" /><br />
[1]Ustawienie ile ma odjąć lub dodać statystyk dany przedmiot, kiedy zaklniemy nim nasz ekwipunek.<br />
[2]Ustawienie stanów<br />
[3]Ustawienie elementów<br />
[4]Cena za ulepszenie ekwipunku danym przedmiotem<br />
[5]Lista przedmiotów z bazy danych<br />
</div></div>
<br />
<span style="color: #FFA500;"><span style="font-size: x-large;">5.Zakładka "Miscellaneous"</span></span><br />
<img class="postimage" src="http://dc390.4shared.com/img/2GCvU30Wba/s3/147feb8d5c0/hud.png" border="0" alt="[Obrazek: hud.png]" /><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><span style="font-weight: bold;">Ta zakładka odpowiedzialna jest za konfigurację audiowizualną i generowanie kodu.</span><br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/miscellaneous.PNG?_subject_uid=407080461&amp;w=AADLIa5_iGiFPuqXgRhLag5xT-C66vUwEVypfp1BlEZfcA" border="0" alt="[Obrazek: miscellaneous.PNG?_subject_uid=407080461...fp1BlEZfcA]" /><br />
[1]Ustawienia odgłosów wydawanych przy wytwarzaniu, zaklinaniu i ekstraktowaniu<br />
[2]"Enable Enchantments" włącz, wyłącz ulepszanie<br />
[3]Lista broni i pancerzy nie podlegających ulepszaniu<br />
[4]Guziki generujące kod:<br />
#Cache Script - odpowiada za wygenerowanie kodu potrzebnego do połączenia konfiguratora z bazą danych<br />
#Create Script Call:<br />
Odpowiedzialny jest za wygenerowanie Call scriptu dla zdarzenia w rpg makerze<br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/script%20call%202.PNG?_subject_uid=407080461&amp;w=AAABtdzjLNF8dt1ioIc2HRPt3AfcallwXQxjYRXvsvlp_w" border="0" alt="[Obrazek: script%20call%202.PNG?_subject_uid=40708...YRXvsvlp_w]" /><br />
{1}Lista broni<br />
{2}Lista Pancerzy<br />
{3}Lista przedmiotów<br />
{4}Ustawienie jakie opcje będzie posiadało nasze zdarzenie:<br />
- wytwarzanie<br />
- ekstraktowanie<br />
- ulepszanie<br />
kiedy ustawisz co ma oferować twój NPC, naciśnij guzik "generate"<br />
następnie skopiuj kod i wklej go w zdarzeniu (wywołaj skrypt)<br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/script%20call%203.PNG?_subject_uid=407080461&amp;w=AACSQPKoRW8hmc60SoAb7yrYBI2WLHiA82P-Oh463WYjWw" border="0" alt="[Obrazek: script%20call%203.PNG?_subject_uid=40708...Oh463WYjWw]" /><br />
#Demo - generuje demo</div></div>
<br />
<span style="color: #FFA500;"><span style="font-size: x-large;">6.Zrzuty ekranu</span></span><br />
<img class="postimage" src="http://dc390.4shared.com/img/2GCvU30Wba/s3/147feb8d5c0/hud.png" border="0" alt="[Obrazek: hud.png]" /><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><img class="postimage" src="https://dl.dropboxusercontent.com/u/20787370/Scripts/Blacksmith%202.0/Blacksmith2.png" border="0" alt="[Obrazek: Blacksmith2.png]" /><br />
<img class="postimage" src="https://dl.dropboxusercontent.com/u/20787370/Scripts/Blacksmith%202.0/Blacksmith3.png" border="0" alt="[Obrazek: Blacksmith3.png]" /><br />
<img class="postimage" src="https://dl.dropboxusercontent.com/u/20787370/Scripts/Blacksmith%202.0/Blacksmith1.png" border="0" alt="[Obrazek: Blacksmith1.png]" /><br />
</div></div>
<br />
<br />
<span style="color: #FFA500;"><span style="font-size: x-large;">7.Odpowiedzi na pytania</span></span><br />
<img class="postimage" src="http://dc390.4shared.com/img/2GCvU30Wba/s3/147feb8d5c0/hud.png" border="0" alt="[Obrazek: hud.png]" /><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">
- Jeżeli zakończymy konfigurowanie skryptu to w lewym dolnym rogu programu znajduje się guzik "generate", kopiujemy wygenerowaną zawartość i wklejamy ją nad "Blacksmith Windows", nadając jej przykładowo nazwę "Blacksmith Configuration"<br />
</div></div>
Dziękuję za przeczytanie mojego poradnika, mam nadzieję że udało mi się przekazać w przejrzysty sposób informacje potrzebne do obsługi tego systemu.<br />
W razie błędów, braków w poradniku lub pytań proszę pisać PW lub w temacie, wszystkie rozwiązania umieszczę w zakładce "Odpowiedzi na pytania", a brakujące informacje umieszczę w poradniku.<br />
<br />
#Autorem skryptu jest ForeverZer0, nie przypisuje sobie jego pracy jedynie tłumacze działanie systemu dla polskiej sceny.]]></description>
			<content:encoded><![CDATA[W tym poradniku chciałem przedstawić system który pozwala na:<br />
- Wytwarzanie przedmiotów<br />
- Ekstraktowanie (rozkładanie na czynniki pierwsze)<br />
- Ulepszanie ekwipunku<br />
w poradniku zamieszczę informacje i instrukcje jak obsłużyć się konfiguratorem, skryptem i jak umieścić go w swoim projekcie.<br />
<br />
Wymagania:<br />
- Microsoft's .NET 2.0 Framework, lub nowszy<br />
- RPG Maker XP<br />
<br />
Przydatne strony:<br />
<a href="http://www.microsoft.com/pl-pl/download/details.aspx?id=30653" target="_blank">Microsoft .NET Framework 4.5</a><br />
<a href="http://dl.dropbox.com/u/20787370/Scripts/Blacksmith%202.0/Blacksmith%20System%202.0.zip" target="_blank">Demo</a><br />
<br />
<span style="color: #FFA500;"><span style="font-size: x-large;">1.Pobranie i umieszczenie skryptu w projekcie.</span></span><br />
<img class="postimage" src="http://dc390.4shared.com/img/2GCvU30Wba/s3/147feb8d5c0/hud.png" border="0" alt="[Obrazek: hud.png]" /><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">- Pierwszym krokiem jaki musimy wykonać to pobranie dema.<br />
- Następnie wypakowujemy je z archiwum <br />
Wygląd folderu:<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/folder.PNG?_subject_uid=407080461&amp;w=AAAUMVvCV2NCdyF8usQ_X070JwoIHn7hI0vyfe8DR24G9g" border="0" alt="[Obrazek: folder.PNG?_subject_uid=407080461&amp;am...fe8DR24G9g]" /><br />
- Kopiujemy nastepujące skrypty do swojego projektu<br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/skrypty.PNG?_subject_uid=407080461&amp;w=AAACkkiSglqnuyqX1iLrGGMmvFGO_KuCEnoxfkzRGuowNQ" border="0" alt="[Obrazek: skrypty.PNG?_subject_uid=407080461&amp;a...fkzRGuowNQ]" /><br />
- Kiedy skopiujemy skrypty możemy zabrać się za połączenie konfiguratora z naszą bazą danych w następujący sposób:<br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/call%201.PNG?_subject_uid=407080461&amp;w=AABr3PNDPRSHgVcxxGfHi07k65NrnndVIG4ISyJEL5POCw" border="0" alt="[Obrazek: call%201.PNG?_subject_uid=407080461&amp;...SyJEL5POCw]" /><br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/call%202.PNG?_subject_uid=407080461&amp;w=AADXbDSu7UzPpkn6FSwIlS6aFUvJxD5K3GPHHV-0OJCsNg" border="0" alt="[Obrazek: call%202.PNG?_subject_uid=407080461&amp;...HV-0OJCsNg]" /><br />
Wygenerowany kod kopiujemy i wklejamy nad "Blacksmith Windows", zapisujemy i uruchamiamy nasz projekt, wyświetli się nam komunikat <img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/komunikat%201.PNG?_subject_uid=407080461&amp;w=AACQGbquoRrxIOamBlGBbCWDukqwSO4uqODwdDUoT5AO7A" border="0" alt="[Obrazek: komunikat%201.PNG?_subject_uid=407080461...dDUoT5AO7A]" />, i utworzy się w naszym folderze plik o nazwie "BlacksmithCache".Utworzony plik przeciągamy na obrazek kowadła.</div></div>
<br />
<span style="color: #FFA500;"><span style="font-size: x-large;">2.Zakładka "Forges".</span></span><br />
<img class="postimage" src="http://dc390.4shared.com/img/2GCvU30Wba/s3/147feb8d5c0/hud.png" border="0" alt="[Obrazek: hud.png]" /><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><span style="font-weight: bold;">Zakładka Forges pozwala na skonfigurowanie naszej kuźni, w której będziemy wykuwać ekwipunek.</span><br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/forges.PNG?_subject_uid=407080461&amp;w=AAA140HPoBsCBM1A1HdQWSpuU_MjKxStjqABmO0gztMBCg" border="0" alt="[Obrazek: forges.PNG?_subject_uid=407080461&amp;am...mO0gztMBCg]" /><br />
[1]Bronie potrzebne do wykucia przedmiotu<br />
[2]Pancerze potrzebne do wykucia przedmiotu<br />
[3]itemy potrzebne do wykucia przedmiotu<br />
[4]Cena za wykucie przedmiotu<br />
[5]Lista<br />
[6]Wybór między broniami, pancerzami i przedmiotami</div></div>
<br />
<span style="color: #FFA500;"><span style="font-size: x-large;">3.Zakładka "Extractions"</span></span><br />
<img class="postimage" src="http://dc390.4shared.com/img/2GCvU30Wba/s3/147feb8d5c0/hud.png" border="0" alt="[Obrazek: hud.png]" /><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">
<span style="font-weight: bold;">Ta zakładka odpowiada za konfigurację rozkładania przedmiotów i ekwipunku</span><img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/extractions.PNG?_subject_uid=407080461&amp;w=AACRWNikbdsm_NByz2ltbOKKUP9g1MlzqkVwL5aQyrzP0Q" border="0" alt="[Obrazek: extractions.PNG?_subject_uid=407080461&a...L5aQyrzP0Q]" /><br />
[1]Bronie które otrzymamy po rozłożeniu przedmiotu<br />
[2]Pancerze jakie otrzymamy po rozłożeniu przedmiotu<br />
[3]Itemy które otrzymamy po rozłożeniu przedmiotu<br />
[4]Złoto jakie otrzymamy po rozłożeniu przedmiotu(zwrot)<br />
[5]Lista<br />
[6]Wybór między broniami, pancerzami i przedmiotami</div></div>
<br />
<span style="color: #FFA500;"><span style="font-size: x-large;">4.Zakładka "Enchantments"</span></span><br />
<img class="postimage" src="http://dc390.4shared.com/img/2GCvU30Wba/s3/147feb8d5c0/hud.png" border="0" alt="[Obrazek: hud.png]" /><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><span style="font-weight: bold;">W tej zakładce możemy ustawić magiczne przedmioty, które będą zwiększały lub zmniejszały statystyki, dodawały lub odejmowały stany i elementy.</span><br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/enchantments.PNG?_subject_uid=407080461&amp;w=AACpnsy2Hs5-UQFfbvpPu3qHWB18GcxNDP45D1twLi9eQA" border="0" alt="[Obrazek: enchantments.PNG?_subject_uid=407080461&...D1twLi9eQA]" /><br />
[1]Ustawienie ile ma odjąć lub dodać statystyk dany przedmiot, kiedy zaklniemy nim nasz ekwipunek.<br />
[2]Ustawienie stanów<br />
[3]Ustawienie elementów<br />
[4]Cena za ulepszenie ekwipunku danym przedmiotem<br />
[5]Lista przedmiotów z bazy danych<br />
</div></div>
<br />
<span style="color: #FFA500;"><span style="font-size: x-large;">5.Zakładka "Miscellaneous"</span></span><br />
<img class="postimage" src="http://dc390.4shared.com/img/2GCvU30Wba/s3/147feb8d5c0/hud.png" border="0" alt="[Obrazek: hud.png]" /><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><span style="font-weight: bold;">Ta zakładka odpowiedzialna jest za konfigurację audiowizualną i generowanie kodu.</span><br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/miscellaneous.PNG?_subject_uid=407080461&amp;w=AADLIa5_iGiFPuqXgRhLag5xT-C66vUwEVypfp1BlEZfcA" border="0" alt="[Obrazek: miscellaneous.PNG?_subject_uid=407080461...fp1BlEZfcA]" /><br />
[1]Ustawienia odgłosów wydawanych przy wytwarzaniu, zaklinaniu i ekstraktowaniu<br />
[2]"Enable Enchantments" włącz, wyłącz ulepszanie<br />
[3]Lista broni i pancerzy nie podlegających ulepszaniu<br />
[4]Guziki generujące kod:<br />
#Cache Script - odpowiada za wygenerowanie kodu potrzebnego do połączenia konfiguratora z bazą danych<br />
#Create Script Call:<br />
Odpowiedzialny jest za wygenerowanie Call scriptu dla zdarzenia w rpg makerze<br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/script%20call%202.PNG?_subject_uid=407080461&amp;w=AAABtdzjLNF8dt1ioIc2HRPt3AfcallwXQxjYRXvsvlp_w" border="0" alt="[Obrazek: script%20call%202.PNG?_subject_uid=40708...YRXvsvlp_w]" /><br />
{1}Lista broni<br />
{2}Lista Pancerzy<br />
{3}Lista przedmiotów<br />
{4}Ustawienie jakie opcje będzie posiadało nasze zdarzenie:<br />
- wytwarzanie<br />
- ekstraktowanie<br />
- ulepszanie<br />
kiedy ustawisz co ma oferować twój NPC, naciśnij guzik "generate"<br />
następnie skopiuj kod i wklej go w zdarzeniu (wywołaj skrypt)<br />
<img class="postimage" src="https://dl-web.dropbox.com/get/Blacksmith%20Shop/script%20call%203.PNG?_subject_uid=407080461&amp;w=AACSQPKoRW8hmc60SoAb7yrYBI2WLHiA82P-Oh463WYjWw" border="0" alt="[Obrazek: script%20call%203.PNG?_subject_uid=40708...Oh463WYjWw]" /><br />
#Demo - generuje demo</div></div>
<br />
<span style="color: #FFA500;"><span style="font-size: x-large;">6.Zrzuty ekranu</span></span><br />
<img class="postimage" src="http://dc390.4shared.com/img/2GCvU30Wba/s3/147feb8d5c0/hud.png" border="0" alt="[Obrazek: hud.png]" /><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;"><img class="postimage" src="https://dl.dropboxusercontent.com/u/20787370/Scripts/Blacksmith%202.0/Blacksmith2.png" border="0" alt="[Obrazek: Blacksmith2.png]" /><br />
<img class="postimage" src="https://dl.dropboxusercontent.com/u/20787370/Scripts/Blacksmith%202.0/Blacksmith3.png" border="0" alt="[Obrazek: Blacksmith3.png]" /><br />
<img class="postimage" src="https://dl.dropboxusercontent.com/u/20787370/Scripts/Blacksmith%202.0/Blacksmith1.png" border="0" alt="[Obrazek: Blacksmith1.png]" /><br />
</div></div>
<br />
<br />
<span style="color: #FFA500;"><span style="font-size: x-large;">7.Odpowiedzi na pytania</span></span><br />
<img class="postimage" src="http://dc390.4shared.com/img/2GCvU30Wba/s3/147feb8d5c0/hud.png" border="0" alt="[Obrazek: hud.png]" /><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">
- Jeżeli zakończymy konfigurowanie skryptu to w lewym dolnym rogu programu znajduje się guzik "generate", kopiujemy wygenerowaną zawartość i wklejamy ją nad "Blacksmith Windows", nadając jej przykładowo nazwę "Blacksmith Configuration"<br />
</div></div>
Dziękuję za przeczytanie mojego poradnika, mam nadzieję że udało mi się przekazać w przejrzysty sposób informacje potrzebne do obsługi tego systemu.<br />
W razie błędów, braków w poradniku lub pytań proszę pisać PW lub w temacie, wszystkie rozwiązania umieszczę w zakładce "Odpowiedzi na pytania", a brakujące informacje umieszczę w poradniku.<br />
<br />
#Autorem skryptu jest ForeverZer0, nie przypisuje sobie jego pracy jedynie tłumacze działanie systemu dla polskiej sceny.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hosting na Screeny.]]></title>
			<link>https://forum.ultimateam.pl/Thread-Hosting-na-Screeny</link>
			<pubDate>Mon, 09 Feb 2015 00:51:02 +0100</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-Hosting-na-Screeny</guid>
			<description><![CDATA[Witam! Widzę, że wiele osób na forum korzysta z jakichś śmiesznych hostingów na których obrazki znikają po dość krótkim czasie.... <br />
Ubolewam nad tym, bo istnieje jeden, świetny i polski hosting. <br />
<a href="http://www.ifotos.pl" target="_blank">http://www.ifotos.pl</a> &lt;- korzystam z niego jeszcze od czasów modowania Gothica i grania w Minecrafta <img class="postimage" src="/images/smiles/icon_mrgreen.gif" style="vertical-align: middle;" border="0" alt="mrgreen" title="mrgreen" /><br />
i żaden obrazek nie wygasł, jeśli masz założone konto. Oto dowód: <img class="postimage" src="http://s10.ifotos.pl/img/ifotosPNG_wxeqhxr.png" border="0" alt="[Obrazek: ifotosPNG_wxeqhxr.png]" /><br />
tutaj link do obrazka z obrazka  ;-) <a href="http://ifotos.pl/zobacz/javaw-201_rhaewhx.png" target="_blank">http://ifotos.pl/zobacz/javaw-201_rhaewhx.png</a><br />
<br />
Więc apeluje do was drodzy Ultimowcy, abyście nie korzystali z syfiastych, zagranicznych hostingów pokroju Imgshacka czy TinyPic, tylko wspomogli polaków :P<br />
<br />
(Ten temat nie jest w żaden sposób reklamą, to tylko porada/sugestia<br />
Po prostu aż mi się smutno robi jak chcę wejść w jakąś zapowiedź i nie mogę obejrzeć screenów ;/ )]]></description>
			<content:encoded><![CDATA[Witam! Widzę, że wiele osób na forum korzysta z jakichś śmiesznych hostingów na których obrazki znikają po dość krótkim czasie.... <br />
Ubolewam nad tym, bo istnieje jeden, świetny i polski hosting. <br />
<a href="http://www.ifotos.pl" target="_blank">http://www.ifotos.pl</a> &lt;- korzystam z niego jeszcze od czasów modowania Gothica i grania w Minecrafta <img class="postimage" src="/images/smiles/icon_mrgreen.gif" style="vertical-align: middle;" border="0" alt="mrgreen" title="mrgreen" /><br />
i żaden obrazek nie wygasł, jeśli masz założone konto. Oto dowód: <img class="postimage" src="http://s10.ifotos.pl/img/ifotosPNG_wxeqhxr.png" border="0" alt="[Obrazek: ifotosPNG_wxeqhxr.png]" /><br />
tutaj link do obrazka z obrazka  ;-) <a href="http://ifotos.pl/zobacz/javaw-201_rhaewhx.png" target="_blank">http://ifotos.pl/zobacz/javaw-201_rhaewhx.png</a><br />
<br />
Więc apeluje do was drodzy Ultimowcy, abyście nie korzystali z syfiastych, zagranicznych hostingów pokroju Imgshacka czy TinyPic, tylko wspomogli polaków :P<br />
<br />
(Ten temat nie jest w żaden sposób reklamą, to tylko porada/sugestia<br />
Po prostu aż mi się smutno robi jak chcę wejść w jakąś zapowiedź i nie mogę obejrzeć screenów ;/ )]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nowa komenda w menu?]]></title>
			<link>https://forum.ultimateam.pl/Thread-XP-VX-VXAce-Nowa-komenda-w-menu</link>
			<pubDate>Fri, 06 Feb 2015 12:29:35 +0100</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-XP-VX-VXAce-Nowa-komenda-w-menu</guid>
			<description><![CDATA[Hello <img class="postimage" src="/images/smiles/icon_smile2.gif" style="vertical-align: middle;" border="0" alt="smiles" title="smiles" /> Przedstawiam Wam krótki tutorial dodawania nowej komendy w menu gry. <br />
<br />
Oczywiście tutorial odwołuje się do domyślnej klasy Scene_Menu, która może być modyfikowana przez inne używane przez Was skrypty. Dlatego w przypadku, gdy wprowadzone przez Was modyfikacje nie działają, oznacza to, że należy wyszukać w dodatkowych skryptach również odwołań do klasy Scene_Menu. <br />
<br />
<span style="color: red;"><span style="font-weight: bold;">Uwaga! </span></span><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">Zanim przystąpimy do modyfikowania warto skopiować całą klasę, w której mamy dokonać zmian i wkleić ją nad Main (nie przeszkadza to w niczym jak skrypt się dybluje). Uchroni to nasz projekt przed błędami. <span style="font-weight: bold;">W późniejszym etapie można usunąć te definicje, których nie zmieniamy, a zostawić tylko te z wprowadzonymi przez nas poprawkami</span>. Program sam powoła się na wcześniejsze definicje. Czemu tak się dzieje? Otóż nawet gdy w swoim projekcie użyjemy skryptów, które zmieniają tę samą klasę, to 'wygra' ten, który jest najbliżej Main. Szerzej na ten temat w innym tutorialu <img class="postimage" src="/images/smiles/icon_smile2.gif" style="vertical-align: middle;" border="0" alt="smiles" title="smiles" /></div></div>Co najważniejsze, poniżej zamieszczam instrukcję krok po kroku, jak dodać nowe polecenie w menu. <br />
<br />
<span style="font-weight: bold;"><span style="color: red;">Tutorial dla RMXP</span></span><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">1. Wchodzimy w Edytor skryptów i w lewym pasku wyszukujemy Scene_Menu. Zaimplementowana tam klasa odwołuje się do Menu - tylko do pierwszego okna, które pojawia się po wciśnięciu ESC na mapie.    <br />
<br />
2. Wyszukujemy definicję (linijka 18)<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def main</code></div></div>
Definicja odpowiada za najważniejsze procesy w klasie. Co jest jednak dla nas najważniejsze, znajdują się tu poszczególne zmienne: s1, s2, s3, s4 itd. <br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>s1 = &#36;data_system.words.item<br />
s2 = &#36;data_system.words.skill<br />
s3 = &#36;data_system.words.equip<br />
s4 = "Status" <br />
s5 = "Save" <br />
s6 = "End Game"</code></div></div>
Przyglądając się tym zmiennym łatwo zauważyć, że niektórym przyporządkowano jakieś zmienne globalne (te rozpoczynające się znakiem &#36;) oraz zwykłe słowa zamknięte w cudzysłów ("Status"). <br />
<br />
Ale skoro chcemy dodać swoją opcję w menu, to dodajemy na koniec nową zmienną, np. 's7' i odpowiednio ją nazywamy:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>s1 = &#36;data_system.words.item<br />
s2 = &#36;data_system.words.skill<br />
s3 = &#36;data_system.words.equip<br />
s4 = "Status" <br />
s5 = "Save" <br />
s6 = "End Game" <br />
s7 = "Nowa komenda"</code></div></div>
<br />
3. W tej samej definicji, tuż pod zmiennymi znajduje się linijka, która tworzy okno (odwołuje się do zaimplementowanej już klasy - Window_Command)<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])</code></div></div>
160 - to szerokość okna poleceń (można ją dowolnie zmieniać)<br />
[s1, s2, s3, s4, s5, s6] - to tablica, na której elementy składają się modyfikowane przez nas zmienne. Jak widać zmiennych jest o jedną za mało. Należy wpisać, po przecinku, dodaną wcześniej zmienną s7:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])</code></div></div>
<br />
4. W porządku. Mamy tyle poleceń, o ile nam chodziło. Gdy uruchomimy grę, zobaczymy jednak, że po wybraniu komendy nic się nie dzieje. Koniecznie musimy to naprawić. <br />
Wyszukujemy zatem definicji (linijka 106):<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def update_command</code></div></div>
W tej definicji znajduje się informacje, co się dzieje, gdy będąc w menu wciśniemy Enter (Input::C) lub ESC (Input::B). <br />
Nas interesuje tylko ten fragment:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>case @command_window.index<br />
when 0&nbsp;&nbsp;# item<br />
&nbsp;&nbsp;# Play decision SE<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se) <br />
&nbsp;&nbsp;# Switch to item screen<br />
&nbsp;&nbsp;&#36;scene = Scene_Item.new<br />
when 1&nbsp;&nbsp;# skill<br />
&nbsp;&nbsp;# Play decision SE<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se) <br />
&nbsp;&nbsp;# Make status window active<br />
&nbsp;&nbsp;@command_window.active = false<br />
&nbsp;&nbsp;@status_window.active = true<br />
&nbsp;&nbsp;@status_window.index = 0<br />
when 2&nbsp;&nbsp;# equipment<br />
&nbsp;&nbsp;# Play decision SE<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se) <br />
&nbsp;&nbsp;# Make status window active<br />
&nbsp;&nbsp;@command_window.active = false<br />
&nbsp;&nbsp;@status_window.active = true<br />
&nbsp;&nbsp;@status_window.index = 0<br />
when 3&nbsp;&nbsp;# status<br />
&nbsp;&nbsp;# Play decision SE<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se) <br />
&nbsp;&nbsp;# Make status window active<br />
&nbsp;&nbsp;@command_window.active = false<br />
&nbsp;&nbsp;@status_window.active = true<br />
&nbsp;&nbsp;@status_window.index = 0<br />
when 4&nbsp;&nbsp;# save<br />
&nbsp;&nbsp;# If saving is forbidden<br />
&nbsp;&nbsp;if &#36;game_system.save_disabled<br />
&nbsp;&nbsp;&nbsp;&nbsp;# Play buzzer SE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.buzzer_se) <br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
&nbsp;&nbsp;end<br />
&nbsp;&nbsp;# Play decision SE<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se) <br />
&nbsp;&nbsp;# Switch to save screen<br />
&nbsp;&nbsp;&#36;scene = Scene_Save.new<br />
when 5&nbsp;&nbsp;# end game<br />
&nbsp;&nbsp;# Play decision SE<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se) <br />
&nbsp;&nbsp;# Switch to end game screen<br />
&nbsp;&nbsp;&#36;scene = Scene_End.new<br />
end</code></div></div>
Kod ten można mniej więcej przetłumaczyć następująco: "w zależności od tego (case), jaki jest indeks okna poleceń (@command_window.index) to rób to i to". Indeks odpowiada kolejno :<br />
s1 = indeks 0<br />
s2 = indeks 1<br />
s3 = indeks 2<br />
Czyli pierwsza komenda w oknie zawsze będzie miała indeks 0.  <br />
W naszym przypadku indeks 0 ma polecenie Item / Przedmiot.<br />
Domyślnie zatem nasza nowa komenda (skoro jest siódma na liście) ma indeks 6. Zatem przyjrzyjmy się linijce:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 5&nbsp;&nbsp;# end game<br />
# Play decision SE<br />
&#36;game_system.se_play(&#36;data_system.decision_se) <br />
# Switch to end game screen<br />
&#36;scene = Scene_End.new</code></div></div>
W naszej nowej liście brakuje indeksu 6, zatem pod powyższym fragmentem dodajemy linijkę:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 6&nbsp;&nbsp;# nowa komenda</code></div></div>
To jednak nie wszystko. Nie wpisaliśmy, co ma się stać w chwili wybrania tego polecenia. Zgodnie ze wzorem powyżej powinniśmy wpisać:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;game_system.se_play(&#36;data_system.decision_se)</code></div></div>
co powoduje, że z chwilą wyboru odegra się muzyczka, oraz komendę, która przekieruje nas do następnej sceny:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;scene = NAZWA.new</code></div></div>
NAZWA powinna odpowiadać nazwą nowej sceny, najczęściej polecenie to podane je wraz z nowym skryptem, np. <br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;scene = MonsterBook.new<br />
&#36;scene = Dziennik.new</code></div></div>
<br />
5. Warto wspomnieć również o tym, że niektóre nowe klasy są włączane dopiero po uprzednim wybraniu bohatera, którego dane ona wyświetla. Na przykład, gdy chcemy wejść w ekwipunek wpierw podświetla się okno po prawej stronie z wyborem postaci (Window_MenuStatus). Jest to przydatne przy dodatkowych skryptach chociażby na rozdawanie statystyk. <br />
Zatem co należy zrobić? Powracamy do fragmentu, w którym deklarowaliśmy wybór sceny dla indeksu 6 i przyjrzyjmy się indeksowi 1:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 1&nbsp;&nbsp;# skill<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;@command_window.active = false<br />
&nbsp;&nbsp;@status_window.active = true<br />
&nbsp;&nbsp;@status_window.index = 0</code></div></div>
Jak widać przy indeksach 1, 2 i 3 następuje wyłączenie okna poleceń (@command_window) i aktywowanie okna statusu (@status_window). <br />
Umieśćmy podobny kod dla naszego indeksu 6 (patrz pkt 4 tutoriala)<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 6&nbsp;&nbsp;# nowa komenda<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;@command_window.active = false<br />
&nbsp;&nbsp;@status_window.active = true<br />
&nbsp;&nbsp;@status_window.index = 0</code></div></div>
Następnie przechodzimy do 'update_status' (linijka 173) i przyglądamy się fragmentowi:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>case @command_window.index<br />
when 1&nbsp;&nbsp;# skill<br />
&nbsp;&nbsp;if &#36;game_party.actors[@status_window.index].restriction &gt;= 2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.buzzer_se)<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;&#36;scene = Scene_Skill.new(@status_window.index)<br />
when 2&nbsp;&nbsp;# equipment<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;&#36;scene = Scene_Equip.new(@status_window.index)<br />
when 3&nbsp;&nbsp;# status<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;&#36;scene = Scene_Status.new(@status_window.index)<br />
end</code></div></div>
Po linijkach:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 3&nbsp;&nbsp;# status<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;&#36;scene = Scene_Status.new(@status_window.index)</code></div></div>
Dodajemy przed 'end', pamiętając o indeksie naszej komendy:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 6&nbsp;&nbsp;# komenda<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;&#36;scene = Scene_NAZWA.new(@status_window.index)</code></div></div>
Oczywiście należy zapamiętać, że aby nie pojawił się błąd, scena do której się odwołujemy musi mieć argument indeksu w definicji 'initialize'. Tłumacząc to łopatologicznie na przykładzie 'Scene_Equip', czyli klasie tworzącej okna ekwipunku - przyglądając się bowiem definicji 'initialize' w tej klasie można zobaczyć, że w nawiasach po jej nazwie podane są argumenty '(actor_index = 0, equip_index = 0)', co w tym przypadku oznacza, że odwołując się do tej klasy można podać w nawiasie indeks bohatera oraz indeks ekwipunku. Argumenty te mają przyporządkowane domyślne wartości.<br />
<br />
6. Testując naszą grę możemy zaobserwować, że nowa komenda nie mieści się w oknie. Najlepszym wyjściem za tej sytuacji jest wprowadzenie możliwości przewijania poleceń w oknie Menu. Aby to zrobić nad Main należy wkleić poniższy skrypcik:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>class Window_Command &lt; Window_Selectable&nbsp;&nbsp;<br />
&nbsp;&nbsp;def initialize(width, commands, height = commands.size * 32 + 32) <br />
&nbsp;&nbsp;&nbsp;&nbsp;super(0, 0, width, height)&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@item_max = commands.size<br />
&nbsp;&nbsp;&nbsp;&nbsp;@commands = commands<br />
&nbsp;&nbsp;&nbsp;&nbsp;self.contents = Bitmap.new(width - 32, @item_max * 32) <br />
&nbsp;&nbsp;&nbsp;&nbsp;refresh<br />
&nbsp;&nbsp;&nbsp;&nbsp;self.index = 0<br />
&nbsp;&nbsp;end&nbsp;&nbsp;<br />
end</code></div></div>
Wrócić do Scene_Menu, do naszej modyfikowanej wcześniej linijki z:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])</code></div></div>
i po tablicy z poleceniami dodać po przecinku liczbę 224, co daje:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7], 224)</code></div></div>
Tym samym nasze okno w menu będzie wyglądało podobnie do tego:<br />
<br />
<img class="postimage" src="http://www.ultimateam.pl/files/Tutorial_Okno.gif" border="0" alt="[Obrazek: Tutorial_Okno.gif]" /><br />
<br />
Oczywiście można zamiast skryptu usunąć jakieś domyślne polecenie na rzecz nowego. Można także zmniejszyć lub usunąć okna z Liczbą kroków, czasem lub złotem.</div></div>
<span style="font-weight: bold;"><span style="color: red;">Tutorial dla RMVX</span></span><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">1. Wchodzimy w Edytor skryptów i w lewym pasku wyszukujemy Scene_Menu. Zaimplementowana tam klasa odwołuje się do Menu - tylko do pierwszego okna, które pojawia się po wciśnięciu ESC na mapie.    <br />
<br />
2. Wyszukujemy definicję (linijka 53)<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def create_command_window</code></div></div>
Jak sama nazwa wskazuje definicja tworzy okno poleceń. Co jest jednak dla nas najważniejsze, znajdują się tu poszczególne zmienne: s1, s2, s3, s4 itd. <br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>s1 = Vocab::item<br />
s2 = Vocab::skill<br />
s3 = Vocab::equip<br />
s4 = Vocab::status<br />
s5 = Vocab::save<br />
s6 = Vocab::game_end</code></div></div>
Przyglądając się tym zmiennym łatwo zauważyć, że przyporządkowano im jakieś wartości - słowa ('vocab' to skrót od angielskiego 'vocabulary' - słownictwo), a ich tłumaczenie pobierane jest z Bazy Danych z zakładki Terms. <br />
<br />
Ale skoro chcemy dodać swoją opcję w menu, to dodajemy na koniec nową zmienną, np. 's7' i odpowiednio ją nazywamy:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>s1 = Vocab::item<br />
s2 = Vocab::skill<br />
s3 = Vocab::equip<br />
s4 = Vocab::status<br />
s5 = Vocab::save<br />
s6 = Vocab::game_end<br />
s7 = "Komenda"</code></div></div>
<br />
3. W tej samej definicji, tuż pod zmiennymi znajduje się linijka, która tworzy okno (odwołuje się do zaimplementowanej już klasy - Window_Command)<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])</code></div></div>
160 - to szerokość okna poleceń (można ją dowolnie zmieniać)<br />
[s1, s2, s3, s4, s5, s6] - to tablica, na której elementy składają się modyfikowane przez nas zmienne. Jak widać zmiennych jest o jedną za mało. Należy wpisać, po przecinku, dodaną wcześniej zmienną s7:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])</code></div></div>
<br />
4. W porządku. Mamy tyle poleceń, o ile nam chodziło. Gdy uruchomimy grę, zobaczymy jednak, że po wybraniu komendy nic się nie dzieje. Koniecznie musimy to naprawić. <br />
Wyszukujemy zatem definicji (linijka 106):<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>update_command_selection</code></div></div>
W tej definicji znajduje się informacje, co się dzieje, gdy będąc w menu wciśniemy Enter (Input::C) lub ESC (Input::B). <br />
Nas interesuje tylko ten fragment:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>case @command_window.index<br />
when 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Item<br />
&nbsp;&nbsp;&#36;scene = Scene_Item.new<br />
when 1,2,3&nbsp;&nbsp;# Skill, equipment, status<br />
&nbsp;&nbsp;start_actor_selection<br />
when 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Save<br />
&nbsp;&nbsp;&#36;scene = Scene_File.new(true, false, false) <br />
when 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# End Game<br />
&nbsp;&nbsp;&#36;scene = Scene_End.new<br />
end</code></div></div>
Kod ten można mniej więcej przetłumaczyć następująco: "w zależności od tego (case), jaki jest indeks okna poleceń (@command_window.index) to rób to i to". Indeks odpowiada kolejno :<br />
s1 = indeks 0<br />
s2 = indeks 1<br />
s3 = indeks 2<br />
Czyli pierwsza komenda w oknie zawsze będzie miała indeks 0.  <br />
W naszym przypadku indeks 0 ma polecenie Item / Przedmiot.<br />
Domyślnie zatem nasza nowa komenda (skoro jest siódma na liście) ma indeks 6. Zatem przyjrzyjmy się linijce:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# End Game<br />
&nbsp;&nbsp;&#36;scene = Scene_End.new</code></div></div>
W naszej nowej liście brakuje indeksu 6, zatem pod powyższym fragmentem dodajemy linijkę:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 6&nbsp;&nbsp;# nowa komenda</code></div></div>
To jednak nie wszystko. Nie wpisaliśmy, co ma się stać w chwili wybrania tego polecenia. Zgodnie ze wzorem powyżej powinniśmy wpisać komendę, która przekieruje nas do następnej sceny:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;scene = NAZWA.new</code></div></div>
NAZWA powinna odpowiadać nazwą nowej sceny, najczęściej polecenie to podane je wraz z nowym skryptem, np. <br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;scene = Scene_MonsterBook.new<br />
&#36;scene = Scene_Dziennik.new</code></div></div>
<br />
5. Warto wspomnieć również o tym, że niektóre nowe klasy są włączane dopiero po uprzednim wybraniu bohatera, którego dane ona wyświetla. Na przykład, gdy chcemy wejść w ekwipunek wpierw podświetla się okno po prawej stronie z wyborem postaci (Window_MenuStatus). Jest to przydatne przy dodatkowych skryptach chociażby na rozdawanie statystyk. <br />
Zatem co należy zrobić? Powracamy do fragmentu:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>case @command_window.index<br />
when 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Item<br />
&nbsp;&nbsp;&#36;scene = Scene_Item.new<br />
when 1,2,3&nbsp;&nbsp;# Skill, equipment, status<br />
&nbsp;&nbsp;start_actor_selection<br />
when 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Save<br />
&nbsp;&nbsp;&#36;scene = Scene_File.new(true, false, false) <br />
when 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# End Game<br />
&nbsp;&nbsp;&#36;scene = Scene_End.new<br />
end</code></div></div>
Jak widać przy indeksie 1, 2 i 3 następuje odwołanie do definicji 'start_actor_selection'. Dodajmy zatem po przecinku kolejny indeks, czyli 6:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>case @command_window.index<br />
when 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Item<br />
&nbsp;&nbsp;&#36;scene = Scene_Item.new<br />
when 1,2,3,6&nbsp;&nbsp;# Skill, equipment, status, komenda<br />
&nbsp;&nbsp;start_actor_selection<br />
when 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Save<br />
&nbsp;&nbsp;&#36;scene = Scene_File.new(true, false, false) <br />
when 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# End Game<br />
&nbsp;&nbsp;&#36;scene = Scene_End.new<br />
end</code></div></div>
Następnie przechodzimy do 'update_actor_selection' (linijka 124) i przyglądamy się fragmentowi:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>case @command_window.index<br />
when 1&nbsp;&nbsp;# skill<br />
&nbsp;&nbsp;&#36;scene = Scene_Skill.new(@status_window.index) <br />
when 2&nbsp;&nbsp;# equipment<br />
&nbsp;&nbsp;&#36;scene = Scene_Equip.new(@status_window.index) <br />
when 3&nbsp;&nbsp;# status<br />
&nbsp;&nbsp;&#36;scene = Scene_Status.new(@status_window.index) <br />
end</code></div></div>
Po linijkach:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 3&nbsp;&nbsp;# status<br />
&nbsp;&nbsp;&#36;scene = Scene_Status.new(@status_window.index)</code></div></div>
Dodajemy przed 'end', pamiętając o indeksie naszej komendy:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 6&nbsp;&nbsp;# komenda<br />
&nbsp;&nbsp;&#36;scene = Scene_NAZWA.new(@status_window.index)</code></div></div>
Oczywiście należy zapamiętać, że aby nie pojawił się błąd, scena do której się odwołujemy musi mieć argument indeksu w definicji 'initialize'. Tłumacząc to łopatologicznie na przykładzie 'Scene_Equip', czyli klasie tworzącej okna ekwipunku - przyglądając się bowiem definicji 'initialize' w tej klasie można zobaczyć, że w nawiasach po jej nazwie podane są argumenty '(actor_index = 0, equip_index = 0)', co w tym przypadku oznacza, że odwołując się do tej klasy można podać w nawiasie indeks bohatera oraz indeks ekwipunku. Argumenty te mają przyporządkowane domyślne wartości.</div></div>
<span style="font-weight: bold;"><span style="color: red;">Tutorial dla RMVXAce</span></span><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">1. Wchodzimy w Edytor skryptów i w lewym pasku wyszukujemy Window_MenuCommand. Zaimplementowana tam klasa odwołuje się do okna poleceń dla Menu.<br />
<br />
2. W pierwszej kolejności przyjrzyjmy się wywołaniem standardowych poleceń w oknie. Wyszukujemy definicję (linijka 46)<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def add_main_commands</code></div></div>
Definicja ta dodaje nazwy podstawowych poleceń, tj. przedmiotów, ekwipunku, umiejętności i statusu. <br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def add_main_commands <br />
&nbsp;&nbsp;add_command(Vocab::item,&nbsp;&nbsp; :item,&nbsp;&nbsp; main_commands_enabled)<br />
&nbsp;&nbsp;add_command(Vocab::skill,&nbsp;&nbsp;:skill,&nbsp;&nbsp;main_commands_enabled)<br />
&nbsp;&nbsp;add_command(Vocab::equip,&nbsp;&nbsp;:equip,&nbsp;&nbsp;main_commands_enabled)<br />
&nbsp;&nbsp;add_command(Vocab::status, :status, main_commands_enabled)</code></div></div>
Co istotne, oprócz zadeklarowanych w module Vocab nazw, przypisuje również tzw. symbole poleceń oraz określa przypadki aktywności komendy. Dzięki symbolom menu łączy polecenia z definicjami oraz kursor podświetla zawsze właściwą komendę (jest to korzystne zwłaszcza w przypadku powracania do menu z dowolnej sceny). <br />
<br />
3. Przy dodawaniu własnych poleceń warto jednak zwrócić uwagę na inną definicję:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def add_original_commands</code></div></div>
Umieśćmy w niej (jako że domyślnie jest pusta) nową nazwę, np. dodajmy dziennik misji:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>add_command("Dziennik Misji",&nbsp;&nbsp; :quest,&nbsp;&nbsp; quest_enabled)</code></div></div>
Pierwszy atrybut to nazwa polecenia.<br />
Drugi (:quest) to symbol, którego używać będziemy w dalszej części. Należy jedynie pamiętać, że musi on być unikatowy.<br />
Trzeci atrybut (quest_enabled) nie jest wymagany. Określa on warunki, w których komenda będzie aktywna. Jeśli nie potrzebujemy jej wyłączać, możemy pozostać przy pierwszych dwóch atrybutach.<br />
<br />
W przeciwnym wypadku, jeśli dostęp do komendy ma być tożsamy z dostępem do podstawowych poleceń, wystarczy zamiast tego atrybutu wpisać 'main_commands_enabled'.<br />
Jeżeli zaś dostęp ma być uwarunkowany specjalnie dla tego polecenia, należy dopisać nową definicję:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def quest_enabled <br />
<br />
end</code></div></div>
W jej treści możemy umieścić różne warunki. Mogą to być np. brak misji w dzienniku (kod często podawany we wprowadzeniu do skryptu), włączenie określonego przełącznika lub wartość danej zmiennej, itd.<br />
Warunki te kolejno wyglądałyby następująco:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;data_quest.empty? <br />
&#36;game_switches[ID] <br />
&#36;game_variables[ID] &gt;= VALUE</code></div></div>
Można je łączyć, dodając między nimi znak logicznej sumy (|| lub or) lub iloczynu (&amp;&amp; lub and).<br />
Jednocześnie przypominam, że logiczna suma przyjmuje wartość PRAWDA, gdy co najmniej jeden z warunków jest spełniony, zaś iloczyn, gdy wszystkie warunki są spełnione. <br />
<br />
Cdn.<br />
<br />
</div></div>Mam nadzieję, że się przyda <img class="postimage" src="/images/smiles/icon_aww.gif" style="vertical-align: middle;" border="0" alt=":aww:" title=":aww:" /> Piszcie w razie problemów <img class="postimage" src="/images/smiles/icon_smile2.gif" style="vertical-align: middle;" border="0" alt="smiles" title="smiles" />]]></description>
			<content:encoded><![CDATA[Hello <img class="postimage" src="/images/smiles/icon_smile2.gif" style="vertical-align: middle;" border="0" alt="smiles" title="smiles" /> Przedstawiam Wam krótki tutorial dodawania nowej komendy w menu gry. <br />
<br />
Oczywiście tutorial odwołuje się do domyślnej klasy Scene_Menu, która może być modyfikowana przez inne używane przez Was skrypty. Dlatego w przypadku, gdy wprowadzone przez Was modyfikacje nie działają, oznacza to, że należy wyszukać w dodatkowych skryptach również odwołań do klasy Scene_Menu. <br />
<br />
<span style="color: red;"><span style="font-weight: bold;">Uwaga! </span></span><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">Zanim przystąpimy do modyfikowania warto skopiować całą klasę, w której mamy dokonać zmian i wkleić ją nad Main (nie przeszkadza to w niczym jak skrypt się dybluje). Uchroni to nasz projekt przed błędami. <span style="font-weight: bold;">W późniejszym etapie można usunąć te definicje, których nie zmieniamy, a zostawić tylko te z wprowadzonymi przez nas poprawkami</span>. Program sam powoła się na wcześniejsze definicje. Czemu tak się dzieje? Otóż nawet gdy w swoim projekcie użyjemy skryptów, które zmieniają tę samą klasę, to 'wygra' ten, który jest najbliżej Main. Szerzej na ten temat w innym tutorialu <img class="postimage" src="/images/smiles/icon_smile2.gif" style="vertical-align: middle;" border="0" alt="smiles" title="smiles" /></div></div>Co najważniejsze, poniżej zamieszczam instrukcję krok po kroku, jak dodać nowe polecenie w menu. <br />
<br />
<span style="font-weight: bold;"><span style="color: red;">Tutorial dla RMXP</span></span><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">1. Wchodzimy w Edytor skryptów i w lewym pasku wyszukujemy Scene_Menu. Zaimplementowana tam klasa odwołuje się do Menu - tylko do pierwszego okna, które pojawia się po wciśnięciu ESC na mapie.    <br />
<br />
2. Wyszukujemy definicję (linijka 18)<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def main</code></div></div>
Definicja odpowiada za najważniejsze procesy w klasie. Co jest jednak dla nas najważniejsze, znajdują się tu poszczególne zmienne: s1, s2, s3, s4 itd. <br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>s1 = &#36;data_system.words.item<br />
s2 = &#36;data_system.words.skill<br />
s3 = &#36;data_system.words.equip<br />
s4 = "Status" <br />
s5 = "Save" <br />
s6 = "End Game"</code></div></div>
Przyglądając się tym zmiennym łatwo zauważyć, że niektórym przyporządkowano jakieś zmienne globalne (te rozpoczynające się znakiem &#36;) oraz zwykłe słowa zamknięte w cudzysłów ("Status"). <br />
<br />
Ale skoro chcemy dodać swoją opcję w menu, to dodajemy na koniec nową zmienną, np. 's7' i odpowiednio ją nazywamy:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>s1 = &#36;data_system.words.item<br />
s2 = &#36;data_system.words.skill<br />
s3 = &#36;data_system.words.equip<br />
s4 = "Status" <br />
s5 = "Save" <br />
s6 = "End Game" <br />
s7 = "Nowa komenda"</code></div></div>
<br />
3. W tej samej definicji, tuż pod zmiennymi znajduje się linijka, która tworzy okno (odwołuje się do zaimplementowanej już klasy - Window_Command)<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])</code></div></div>
160 - to szerokość okna poleceń (można ją dowolnie zmieniać)<br />
[s1, s2, s3, s4, s5, s6] - to tablica, na której elementy składają się modyfikowane przez nas zmienne. Jak widać zmiennych jest o jedną za mało. Należy wpisać, po przecinku, dodaną wcześniej zmienną s7:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])</code></div></div>
<br />
4. W porządku. Mamy tyle poleceń, o ile nam chodziło. Gdy uruchomimy grę, zobaczymy jednak, że po wybraniu komendy nic się nie dzieje. Koniecznie musimy to naprawić. <br />
Wyszukujemy zatem definicji (linijka 106):<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def update_command</code></div></div>
W tej definicji znajduje się informacje, co się dzieje, gdy będąc w menu wciśniemy Enter (Input::C) lub ESC (Input::B). <br />
Nas interesuje tylko ten fragment:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>case @command_window.index<br />
when 0&nbsp;&nbsp;# item<br />
&nbsp;&nbsp;# Play decision SE<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se) <br />
&nbsp;&nbsp;# Switch to item screen<br />
&nbsp;&nbsp;&#36;scene = Scene_Item.new<br />
when 1&nbsp;&nbsp;# skill<br />
&nbsp;&nbsp;# Play decision SE<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se) <br />
&nbsp;&nbsp;# Make status window active<br />
&nbsp;&nbsp;@command_window.active = false<br />
&nbsp;&nbsp;@status_window.active = true<br />
&nbsp;&nbsp;@status_window.index = 0<br />
when 2&nbsp;&nbsp;# equipment<br />
&nbsp;&nbsp;# Play decision SE<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se) <br />
&nbsp;&nbsp;# Make status window active<br />
&nbsp;&nbsp;@command_window.active = false<br />
&nbsp;&nbsp;@status_window.active = true<br />
&nbsp;&nbsp;@status_window.index = 0<br />
when 3&nbsp;&nbsp;# status<br />
&nbsp;&nbsp;# Play decision SE<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se) <br />
&nbsp;&nbsp;# Make status window active<br />
&nbsp;&nbsp;@command_window.active = false<br />
&nbsp;&nbsp;@status_window.active = true<br />
&nbsp;&nbsp;@status_window.index = 0<br />
when 4&nbsp;&nbsp;# save<br />
&nbsp;&nbsp;# If saving is forbidden<br />
&nbsp;&nbsp;if &#36;game_system.save_disabled<br />
&nbsp;&nbsp;&nbsp;&nbsp;# Play buzzer SE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.buzzer_se) <br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
&nbsp;&nbsp;end<br />
&nbsp;&nbsp;# Play decision SE<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se) <br />
&nbsp;&nbsp;# Switch to save screen<br />
&nbsp;&nbsp;&#36;scene = Scene_Save.new<br />
when 5&nbsp;&nbsp;# end game<br />
&nbsp;&nbsp;# Play decision SE<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se) <br />
&nbsp;&nbsp;# Switch to end game screen<br />
&nbsp;&nbsp;&#36;scene = Scene_End.new<br />
end</code></div></div>
Kod ten można mniej więcej przetłumaczyć następująco: "w zależności od tego (case), jaki jest indeks okna poleceń (@command_window.index) to rób to i to". Indeks odpowiada kolejno :<br />
s1 = indeks 0<br />
s2 = indeks 1<br />
s3 = indeks 2<br />
Czyli pierwsza komenda w oknie zawsze będzie miała indeks 0.  <br />
W naszym przypadku indeks 0 ma polecenie Item / Przedmiot.<br />
Domyślnie zatem nasza nowa komenda (skoro jest siódma na liście) ma indeks 6. Zatem przyjrzyjmy się linijce:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 5&nbsp;&nbsp;# end game<br />
# Play decision SE<br />
&#36;game_system.se_play(&#36;data_system.decision_se) <br />
# Switch to end game screen<br />
&#36;scene = Scene_End.new</code></div></div>
W naszej nowej liście brakuje indeksu 6, zatem pod powyższym fragmentem dodajemy linijkę:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 6&nbsp;&nbsp;# nowa komenda</code></div></div>
To jednak nie wszystko. Nie wpisaliśmy, co ma się stać w chwili wybrania tego polecenia. Zgodnie ze wzorem powyżej powinniśmy wpisać:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;game_system.se_play(&#36;data_system.decision_se)</code></div></div>
co powoduje, że z chwilą wyboru odegra się muzyczka, oraz komendę, która przekieruje nas do następnej sceny:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;scene = NAZWA.new</code></div></div>
NAZWA powinna odpowiadać nazwą nowej sceny, najczęściej polecenie to podane je wraz z nowym skryptem, np. <br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;scene = MonsterBook.new<br />
&#36;scene = Dziennik.new</code></div></div>
<br />
5. Warto wspomnieć również o tym, że niektóre nowe klasy są włączane dopiero po uprzednim wybraniu bohatera, którego dane ona wyświetla. Na przykład, gdy chcemy wejść w ekwipunek wpierw podświetla się okno po prawej stronie z wyborem postaci (Window_MenuStatus). Jest to przydatne przy dodatkowych skryptach chociażby na rozdawanie statystyk. <br />
Zatem co należy zrobić? Powracamy do fragmentu, w którym deklarowaliśmy wybór sceny dla indeksu 6 i przyjrzyjmy się indeksowi 1:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 1&nbsp;&nbsp;# skill<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;@command_window.active = false<br />
&nbsp;&nbsp;@status_window.active = true<br />
&nbsp;&nbsp;@status_window.index = 0</code></div></div>
Jak widać przy indeksach 1, 2 i 3 następuje wyłączenie okna poleceń (@command_window) i aktywowanie okna statusu (@status_window). <br />
Umieśćmy podobny kod dla naszego indeksu 6 (patrz pkt 4 tutoriala)<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 6&nbsp;&nbsp;# nowa komenda<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;@command_window.active = false<br />
&nbsp;&nbsp;@status_window.active = true<br />
&nbsp;&nbsp;@status_window.index = 0</code></div></div>
Następnie przechodzimy do 'update_status' (linijka 173) i przyglądamy się fragmentowi:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>case @command_window.index<br />
when 1&nbsp;&nbsp;# skill<br />
&nbsp;&nbsp;if &#36;game_party.actors[@status_window.index].restriction &gt;= 2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.buzzer_se)<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;&#36;scene = Scene_Skill.new(@status_window.index)<br />
when 2&nbsp;&nbsp;# equipment<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;&#36;scene = Scene_Equip.new(@status_window.index)<br />
when 3&nbsp;&nbsp;# status<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;&#36;scene = Scene_Status.new(@status_window.index)<br />
end</code></div></div>
Po linijkach:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 3&nbsp;&nbsp;# status<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;&#36;scene = Scene_Status.new(@status_window.index)</code></div></div>
Dodajemy przed 'end', pamiętając o indeksie naszej komendy:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 6&nbsp;&nbsp;# komenda<br />
&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;&#36;scene = Scene_NAZWA.new(@status_window.index)</code></div></div>
Oczywiście należy zapamiętać, że aby nie pojawił się błąd, scena do której się odwołujemy musi mieć argument indeksu w definicji 'initialize'. Tłumacząc to łopatologicznie na przykładzie 'Scene_Equip', czyli klasie tworzącej okna ekwipunku - przyglądając się bowiem definicji 'initialize' w tej klasie można zobaczyć, że w nawiasach po jej nazwie podane są argumenty '(actor_index = 0, equip_index = 0)', co w tym przypadku oznacza, że odwołując się do tej klasy można podać w nawiasie indeks bohatera oraz indeks ekwipunku. Argumenty te mają przyporządkowane domyślne wartości.<br />
<br />
6. Testując naszą grę możemy zaobserwować, że nowa komenda nie mieści się w oknie. Najlepszym wyjściem za tej sytuacji jest wprowadzenie możliwości przewijania poleceń w oknie Menu. Aby to zrobić nad Main należy wkleić poniższy skrypcik:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>class Window_Command &lt; Window_Selectable&nbsp;&nbsp;<br />
&nbsp;&nbsp;def initialize(width, commands, height = commands.size * 32 + 32) <br />
&nbsp;&nbsp;&nbsp;&nbsp;super(0, 0, width, height)&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@item_max = commands.size<br />
&nbsp;&nbsp;&nbsp;&nbsp;@commands = commands<br />
&nbsp;&nbsp;&nbsp;&nbsp;self.contents = Bitmap.new(width - 32, @item_max * 32) <br />
&nbsp;&nbsp;&nbsp;&nbsp;refresh<br />
&nbsp;&nbsp;&nbsp;&nbsp;self.index = 0<br />
&nbsp;&nbsp;end&nbsp;&nbsp;<br />
end</code></div></div>
Wrócić do Scene_Menu, do naszej modyfikowanej wcześniej linijki z:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])</code></div></div>
i po tablicy z poleceniami dodać po przecinku liczbę 224, co daje:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7], 224)</code></div></div>
Tym samym nasze okno w menu będzie wyglądało podobnie do tego:<br />
<br />
<img class="postimage" src="http://www.ultimateam.pl/files/Tutorial_Okno.gif" border="0" alt="[Obrazek: Tutorial_Okno.gif]" /><br />
<br />
Oczywiście można zamiast skryptu usunąć jakieś domyślne polecenie na rzecz nowego. Można także zmniejszyć lub usunąć okna z Liczbą kroków, czasem lub złotem.</div></div>
<span style="font-weight: bold;"><span style="color: red;">Tutorial dla RMVX</span></span><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">1. Wchodzimy w Edytor skryptów i w lewym pasku wyszukujemy Scene_Menu. Zaimplementowana tam klasa odwołuje się do Menu - tylko do pierwszego okna, które pojawia się po wciśnięciu ESC na mapie.    <br />
<br />
2. Wyszukujemy definicję (linijka 53)<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def create_command_window</code></div></div>
Jak sama nazwa wskazuje definicja tworzy okno poleceń. Co jest jednak dla nas najważniejsze, znajdują się tu poszczególne zmienne: s1, s2, s3, s4 itd. <br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>s1 = Vocab::item<br />
s2 = Vocab::skill<br />
s3 = Vocab::equip<br />
s4 = Vocab::status<br />
s5 = Vocab::save<br />
s6 = Vocab::game_end</code></div></div>
Przyglądając się tym zmiennym łatwo zauważyć, że przyporządkowano im jakieś wartości - słowa ('vocab' to skrót od angielskiego 'vocabulary' - słownictwo), a ich tłumaczenie pobierane jest z Bazy Danych z zakładki Terms. <br />
<br />
Ale skoro chcemy dodać swoją opcję w menu, to dodajemy na koniec nową zmienną, np. 's7' i odpowiednio ją nazywamy:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>s1 = Vocab::item<br />
s2 = Vocab::skill<br />
s3 = Vocab::equip<br />
s4 = Vocab::status<br />
s5 = Vocab::save<br />
s6 = Vocab::game_end<br />
s7 = "Komenda"</code></div></div>
<br />
3. W tej samej definicji, tuż pod zmiennymi znajduje się linijka, która tworzy okno (odwołuje się do zaimplementowanej już klasy - Window_Command)<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])</code></div></div>
160 - to szerokość okna poleceń (można ją dowolnie zmieniać)<br />
[s1, s2, s3, s4, s5, s6] - to tablica, na której elementy składają się modyfikowane przez nas zmienne. Jak widać zmiennych jest o jedną za mało. Należy wpisać, po przecinku, dodaną wcześniej zmienną s7:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])</code></div></div>
<br />
4. W porządku. Mamy tyle poleceń, o ile nam chodziło. Gdy uruchomimy grę, zobaczymy jednak, że po wybraniu komendy nic się nie dzieje. Koniecznie musimy to naprawić. <br />
Wyszukujemy zatem definicji (linijka 106):<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>update_command_selection</code></div></div>
W tej definicji znajduje się informacje, co się dzieje, gdy będąc w menu wciśniemy Enter (Input::C) lub ESC (Input::B). <br />
Nas interesuje tylko ten fragment:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>case @command_window.index<br />
when 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Item<br />
&nbsp;&nbsp;&#36;scene = Scene_Item.new<br />
when 1,2,3&nbsp;&nbsp;# Skill, equipment, status<br />
&nbsp;&nbsp;start_actor_selection<br />
when 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Save<br />
&nbsp;&nbsp;&#36;scene = Scene_File.new(true, false, false) <br />
when 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# End Game<br />
&nbsp;&nbsp;&#36;scene = Scene_End.new<br />
end</code></div></div>
Kod ten można mniej więcej przetłumaczyć następująco: "w zależności od tego (case), jaki jest indeks okna poleceń (@command_window.index) to rób to i to". Indeks odpowiada kolejno :<br />
s1 = indeks 0<br />
s2 = indeks 1<br />
s3 = indeks 2<br />
Czyli pierwsza komenda w oknie zawsze będzie miała indeks 0.  <br />
W naszym przypadku indeks 0 ma polecenie Item / Przedmiot.<br />
Domyślnie zatem nasza nowa komenda (skoro jest siódma na liście) ma indeks 6. Zatem przyjrzyjmy się linijce:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# End Game<br />
&nbsp;&nbsp;&#36;scene = Scene_End.new</code></div></div>
W naszej nowej liście brakuje indeksu 6, zatem pod powyższym fragmentem dodajemy linijkę:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 6&nbsp;&nbsp;# nowa komenda</code></div></div>
To jednak nie wszystko. Nie wpisaliśmy, co ma się stać w chwili wybrania tego polecenia. Zgodnie ze wzorem powyżej powinniśmy wpisać komendę, która przekieruje nas do następnej sceny:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;scene = NAZWA.new</code></div></div>
NAZWA powinna odpowiadać nazwą nowej sceny, najczęściej polecenie to podane je wraz z nowym skryptem, np. <br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;scene = Scene_MonsterBook.new<br />
&#36;scene = Scene_Dziennik.new</code></div></div>
<br />
5. Warto wspomnieć również o tym, że niektóre nowe klasy są włączane dopiero po uprzednim wybraniu bohatera, którego dane ona wyświetla. Na przykład, gdy chcemy wejść w ekwipunek wpierw podświetla się okno po prawej stronie z wyborem postaci (Window_MenuStatus). Jest to przydatne przy dodatkowych skryptach chociażby na rozdawanie statystyk. <br />
Zatem co należy zrobić? Powracamy do fragmentu:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>case @command_window.index<br />
when 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Item<br />
&nbsp;&nbsp;&#36;scene = Scene_Item.new<br />
when 1,2,3&nbsp;&nbsp;# Skill, equipment, status<br />
&nbsp;&nbsp;start_actor_selection<br />
when 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Save<br />
&nbsp;&nbsp;&#36;scene = Scene_File.new(true, false, false) <br />
when 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# End Game<br />
&nbsp;&nbsp;&#36;scene = Scene_End.new<br />
end</code></div></div>
Jak widać przy indeksie 1, 2 i 3 następuje odwołanie do definicji 'start_actor_selection'. Dodajmy zatem po przecinku kolejny indeks, czyli 6:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>case @command_window.index<br />
when 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Item<br />
&nbsp;&nbsp;&#36;scene = Scene_Item.new<br />
when 1,2,3,6&nbsp;&nbsp;# Skill, equipment, status, komenda<br />
&nbsp;&nbsp;start_actor_selection<br />
when 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Save<br />
&nbsp;&nbsp;&#36;scene = Scene_File.new(true, false, false) <br />
when 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# End Game<br />
&nbsp;&nbsp;&#36;scene = Scene_End.new<br />
end</code></div></div>
Następnie przechodzimy do 'update_actor_selection' (linijka 124) i przyglądamy się fragmentowi:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>case @command_window.index<br />
when 1&nbsp;&nbsp;# skill<br />
&nbsp;&nbsp;&#36;scene = Scene_Skill.new(@status_window.index) <br />
when 2&nbsp;&nbsp;# equipment<br />
&nbsp;&nbsp;&#36;scene = Scene_Equip.new(@status_window.index) <br />
when 3&nbsp;&nbsp;# status<br />
&nbsp;&nbsp;&#36;scene = Scene_Status.new(@status_window.index) <br />
end</code></div></div>
Po linijkach:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 3&nbsp;&nbsp;# status<br />
&nbsp;&nbsp;&#36;scene = Scene_Status.new(@status_window.index)</code></div></div>
Dodajemy przed 'end', pamiętając o indeksie naszej komendy:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>when 6&nbsp;&nbsp;# komenda<br />
&nbsp;&nbsp;&#36;scene = Scene_NAZWA.new(@status_window.index)</code></div></div>
Oczywiście należy zapamiętać, że aby nie pojawił się błąd, scena do której się odwołujemy musi mieć argument indeksu w definicji 'initialize'. Tłumacząc to łopatologicznie na przykładzie 'Scene_Equip', czyli klasie tworzącej okna ekwipunku - przyglądając się bowiem definicji 'initialize' w tej klasie można zobaczyć, że w nawiasach po jej nazwie podane są argumenty '(actor_index = 0, equip_index = 0)', co w tym przypadku oznacza, że odwołując się do tej klasy można podać w nawiasie indeks bohatera oraz indeks ekwipunku. Argumenty te mają przyporządkowane domyślne wartości.</div></div>
<span style="font-weight: bold;"><span style="color: red;">Tutorial dla RMVXAce</span></span><br />
<div class="spoiler"><div class="spoiler_header">Spoiler: <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Otwórz)';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Zamknij)';}"> (Otwórz) </a></div><div class="spoiler_body" style="display: none;">1. Wchodzimy w Edytor skryptów i w lewym pasku wyszukujemy Window_MenuCommand. Zaimplementowana tam klasa odwołuje się do okna poleceń dla Menu.<br />
<br />
2. W pierwszej kolejności przyjrzyjmy się wywołaniem standardowych poleceń w oknie. Wyszukujemy definicję (linijka 46)<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def add_main_commands</code></div></div>
Definicja ta dodaje nazwy podstawowych poleceń, tj. przedmiotów, ekwipunku, umiejętności i statusu. <br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def add_main_commands <br />
&nbsp;&nbsp;add_command(Vocab::item,&nbsp;&nbsp; :item,&nbsp;&nbsp; main_commands_enabled)<br />
&nbsp;&nbsp;add_command(Vocab::skill,&nbsp;&nbsp;:skill,&nbsp;&nbsp;main_commands_enabled)<br />
&nbsp;&nbsp;add_command(Vocab::equip,&nbsp;&nbsp;:equip,&nbsp;&nbsp;main_commands_enabled)<br />
&nbsp;&nbsp;add_command(Vocab::status, :status, main_commands_enabled)</code></div></div>
Co istotne, oprócz zadeklarowanych w module Vocab nazw, przypisuje również tzw. symbole poleceń oraz określa przypadki aktywności komendy. Dzięki symbolom menu łączy polecenia z definicjami oraz kursor podświetla zawsze właściwą komendę (jest to korzystne zwłaszcza w przypadku powracania do menu z dowolnej sceny). <br />
<br />
3. Przy dodawaniu własnych poleceń warto jednak zwrócić uwagę na inną definicję:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def add_original_commands</code></div></div>
Umieśćmy w niej (jako że domyślnie jest pusta) nową nazwę, np. dodajmy dziennik misji:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>add_command("Dziennik Misji",&nbsp;&nbsp; :quest,&nbsp;&nbsp; quest_enabled)</code></div></div>
Pierwszy atrybut to nazwa polecenia.<br />
Drugi (:quest) to symbol, którego używać będziemy w dalszej części. Należy jedynie pamiętać, że musi on być unikatowy.<br />
Trzeci atrybut (quest_enabled) nie jest wymagany. Określa on warunki, w których komenda będzie aktywna. Jeśli nie potrzebujemy jej wyłączać, możemy pozostać przy pierwszych dwóch atrybutach.<br />
<br />
W przeciwnym wypadku, jeśli dostęp do komendy ma być tożsamy z dostępem do podstawowych poleceń, wystarczy zamiast tego atrybutu wpisać 'main_commands_enabled'.<br />
Jeżeli zaś dostęp ma być uwarunkowany specjalnie dla tego polecenia, należy dopisać nową definicję:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>def quest_enabled <br />
<br />
end</code></div></div>
W jej treści możemy umieścić różne warunki. Mogą to być np. brak misji w dzienniku (kod często podawany we wprowadzeniu do skryptu), włączenie określonego przełącznika lub wartość danej zmiennej, itd.<br />
Warunki te kolejno wyglądałyby następująco:<br />
<div class="codeblock">
<div class="title">Kod:<br />
</div><div class="body" dir="ltr"><code>&#36;data_quest.empty? <br />
&#36;game_switches[ID] <br />
&#36;game_variables[ID] &gt;= VALUE</code></div></div>
Można je łączyć, dodając między nimi znak logicznej sumy (|| lub or) lub iloczynu (&amp;&amp; lub and).<br />
Jednocześnie przypominam, że logiczna suma przyjmuje wartość PRAWDA, gdy co najmniej jeden z warunków jest spełniony, zaś iloczyn, gdy wszystkie warunki są spełnione. <br />
<br />
Cdn.<br />
<br />
</div></div>Mam nadzieję, że się przyda <img class="postimage" src="/images/smiles/icon_aww.gif" style="vertical-align: middle;" border="0" alt=":aww:" title=":aww:" /> Piszcie w razie problemów <img class="postimage" src="/images/smiles/icon_smile2.gif" style="vertical-align: middle;" border="0" alt="smiles" title="smiles" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Mapa tawerny]]></title>
			<link>https://forum.ultimateam.pl/Thread-XP-Mapa-tawerny</link>
			<pubDate>Sun, 16 Nov 2014 22:51:44 +0100</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-XP-Mapa-tawerny</guid>
			<description><![CDATA[Witam,mam pytanie jaki titleset pasuje do tawerny i jak mogła by wyglądać <br />
taka tawerna?]]></description>
			<content:encoded><![CDATA[Witam,mam pytanie jaki titleset pasuje do tawerny i jak mogła by wyglądać <br />
taka tawerna?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Jak zrobić ABS'a?]]></title>
			<link>https://forum.ultimateam.pl/Thread-Jak-zrobi%C4%87-ABS-a</link>
			<pubDate>Fri, 31 Oct 2014 20:44:54 +0100</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-Jak-zrobi%C4%87-ABS-a</guid>
			<description><![CDATA[Jak zrobić ABS'a? proszę o pomoc.]]></description>
			<content:encoded><![CDATA[Jak zrobić ABS'a? proszę o pomoc.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[VX/VXace(?)] Mgła.]]></title>
			<link>https://forum.ultimateam.pl/Thread-VX-VXace-Mg%C5%82a</link>
			<pubDate>Wed, 29 Oct 2014 19:35:26 +0100</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-VX-VXace-Mg%C5%82a</guid>
			<description><![CDATA[Siemanko! Kiedyś spotkałem ten poradnik do VXa, zapamiętałem go i postanowiłem się z wami podzielić. Dzisiaj dowiecie się jak zrobić mgłę.<br />
<br />
Dlaczego prefix VX/VXace(?)? Testowałem na VXie, ale wydaje mi się, że na VXace też powinno śmigać.<br />
<br />
Okej, to zaczynamy.<br />
<br />
1. Potrzebny nam będzie obrazek mgły który już dla was zrobiłem, wystarczy że klikniecie <a href="http://i.imgur.com/3KvvUHM.png" target="_blank">tutaj</a>, następnie klikniecie prawym przyciskiem myszy -&gt; zapisz obraz jako -&gt; zapisujemy pod dowolną nazwą w folderze "Pictures" który znajduje się w folderze Graphics w folderze naszego projektu.<br />
<br />
2. Wchodzimy do VXa, oczywiście tworzymy na mapie nowe zdarzenie, nazywamy je przykładowo "mgła". Ustawiamy warunek startu na "Równoległe zdarzenie" (w ang. Parallel Process), następnie dajemy opcje "Pokaż obrazek" (display picture). Pojawia nam się okienko, w "numer obrazka" w moim przypadku będzie to 1, obok w "Grafika" wybieramy nasz obrazek mgły.<br />
Przechodzimy niżej. Zaznaczamy "Środek" (Center) oraz ustawiamy przeźroczystość (opacity) na 150. Klikamy okej.<br />
<div style="text-align: center;"><img class="postimage" src="http://i.imgur.com/HOwaoW5.png" border="0" alt="[Obrazek: HOwaoW5.png]" /></div>
<br />
3. następnie po "Pokaż obrazek" dajemy przełącznik własny A na ON, tworzymy nową strone i dajemy warunek "przełącznik własny A jest ON", warunek startu również dajemy na "równoległe zdarzenie".<br />
Klikamy i wybieramy opcje "Ruszaj obrazkiem" (move picture), wybieramy numer naszego obrazka (który wybraliśmy w poprzednim punkcie) znów zaznaczamy "środek" oraz zmieniamy przeźroczystość na 150, tam gdzie mamy X wpisujemy -100, a tam gdzie czas wpisujemy 600.<br />
<div style="text-align: center;"><img class="postimage" src="http://i.imgur.com/Cx4TANk.png" border="0" alt="[Obrazek: Cx4TANk.png]" /></div>
<span style="font-size: x-small;"><div style="text-align: center;">Tak powinno wyglądać polecenie "ruszaj obrazkiem"</div></span><br />
<br />
Gdy mamy już "Ruszaj obrazkiem" kopiujemy to (prawym na polecenie -&gt;kopiuj) i wklejamy niżej, następnie klikamy na naszą kopie prawym i zmieniamy "X" na "100", zapisujemy.<br />
Tak powinny wyglądać strony zdarzenia:<br />
1.<br />
<div style="text-align: center;"><img class="postimage" src="http://i.imgur.com/ur48SvC.png" border="0" alt="[Obrazek: ur48SvC.png]" /></div>
2.<br />
<div style="text-align: center;"><img class="postimage" src="http://i.imgur.com/241RQFe.png" border="0" alt="[Obrazek: 241RQFe.png]" /></div>
<br />
<br />
 Efekt końcowy:<br />
<div style="text-align: center;"><img class="postimage" src="http://i.imgur.com/NcDtbAJ.png" border="0" alt="[Obrazek: NcDtbAJ.png]" /></div>
<span style="font-size: x-small;"><div style="text-align: center;">Oczywiście mgła nie wygląda dokładnie tak, ekran został przyciemniony dla lepszego efektu, a do tego mgła się porusza.</div></span><br />
<br />
Myślę, ze może się komuś przydać, prosta i moim zdaniem całkiem fajnie wyglądająca mgła dodająca troche klimatu.]]></description>
			<content:encoded><![CDATA[Siemanko! Kiedyś spotkałem ten poradnik do VXa, zapamiętałem go i postanowiłem się z wami podzielić. Dzisiaj dowiecie się jak zrobić mgłę.<br />
<br />
Dlaczego prefix VX/VXace(?)? Testowałem na VXie, ale wydaje mi się, że na VXace też powinno śmigać.<br />
<br />
Okej, to zaczynamy.<br />
<br />
1. Potrzebny nam będzie obrazek mgły który już dla was zrobiłem, wystarczy że klikniecie <a href="http://i.imgur.com/3KvvUHM.png" target="_blank">tutaj</a>, następnie klikniecie prawym przyciskiem myszy -&gt; zapisz obraz jako -&gt; zapisujemy pod dowolną nazwą w folderze "Pictures" który znajduje się w folderze Graphics w folderze naszego projektu.<br />
<br />
2. Wchodzimy do VXa, oczywiście tworzymy na mapie nowe zdarzenie, nazywamy je przykładowo "mgła". Ustawiamy warunek startu na "Równoległe zdarzenie" (w ang. Parallel Process), następnie dajemy opcje "Pokaż obrazek" (display picture). Pojawia nam się okienko, w "numer obrazka" w moim przypadku będzie to 1, obok w "Grafika" wybieramy nasz obrazek mgły.<br />
Przechodzimy niżej. Zaznaczamy "Środek" (Center) oraz ustawiamy przeźroczystość (opacity) na 150. Klikamy okej.<br />
<div style="text-align: center;"><img class="postimage" src="http://i.imgur.com/HOwaoW5.png" border="0" alt="[Obrazek: HOwaoW5.png]" /></div>
<br />
3. następnie po "Pokaż obrazek" dajemy przełącznik własny A na ON, tworzymy nową strone i dajemy warunek "przełącznik własny A jest ON", warunek startu również dajemy na "równoległe zdarzenie".<br />
Klikamy i wybieramy opcje "Ruszaj obrazkiem" (move picture), wybieramy numer naszego obrazka (który wybraliśmy w poprzednim punkcie) znów zaznaczamy "środek" oraz zmieniamy przeźroczystość na 150, tam gdzie mamy X wpisujemy -100, a tam gdzie czas wpisujemy 600.<br />
<div style="text-align: center;"><img class="postimage" src="http://i.imgur.com/Cx4TANk.png" border="0" alt="[Obrazek: Cx4TANk.png]" /></div>
<span style="font-size: x-small;"><div style="text-align: center;">Tak powinno wyglądać polecenie "ruszaj obrazkiem"</div></span><br />
<br />
Gdy mamy już "Ruszaj obrazkiem" kopiujemy to (prawym na polecenie -&gt;kopiuj) i wklejamy niżej, następnie klikamy na naszą kopie prawym i zmieniamy "X" na "100", zapisujemy.<br />
Tak powinny wyglądać strony zdarzenia:<br />
1.<br />
<div style="text-align: center;"><img class="postimage" src="http://i.imgur.com/ur48SvC.png" border="0" alt="[Obrazek: ur48SvC.png]" /></div>
2.<br />
<div style="text-align: center;"><img class="postimage" src="http://i.imgur.com/241RQFe.png" border="0" alt="[Obrazek: 241RQFe.png]" /></div>
<br />
<br />
 Efekt końcowy:<br />
<div style="text-align: center;"><img class="postimage" src="http://i.imgur.com/NcDtbAJ.png" border="0" alt="[Obrazek: NcDtbAJ.png]" /></div>
<span style="font-size: x-small;"><div style="text-align: center;">Oczywiście mgła nie wygląda dokładnie tak, ekran został przyciemniony dla lepszego efektu, a do tego mgła się porusza.</div></span><br />
<br />
Myślę, ze może się komuś przydać, prosta i moim zdaniem całkiem fajnie wyglądająca mgła dodająca troche klimatu.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Dialog]]></title>
			<link>https://forum.ultimateam.pl/Thread-XP-Dialog</link>
			<pubDate>Fri, 24 Oct 2014 19:56:05 +0200</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-XP-Dialog</guid>
			<description><![CDATA[Witaj czy może mi ktoś napisać jak zrobić tak że bierzemy list w którym jest napisane ,,Tędy szli złodzieje powiadomię o tym straż'' i w opcji rozmowy pojawia się [Powiadom straż] proszę o pomoc.]]></description>
			<content:encoded><![CDATA[Witaj czy może mi ktoś napisać jak zrobić tak że bierzemy list w którym jest napisane ,,Tędy szli złodzieje powiadomię o tym straż'' i w opcji rozmowy pojawia się [Powiadom straż] proszę o pomoc.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Jak podejść do tworzenia gry szybko i sprawnie ?]]></title>
			<link>https://forum.ultimateam.pl/Thread-Dowolny-Jak-podej%C5%9B%C4%87-do-tworzenia-gry-szybko-i-sprawnie</link>
			<pubDate>Thu, 23 Oct 2014 22:01:49 +0200</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-Dowolny-Jak-podej%C5%9B%C4%87-do-tworzenia-gry-szybko-i-sprawnie</guid>
			<description><![CDATA[1 Grafa powinna być zbiórką rzeczy, które sami zrobimy lub znajdziemy w sieci. Taką grę robi się szybciej, bo nie trzeba za każdym krokiem grzebać po RTP i się w nim gubić wykorzystując swoje grafy w grze. Jeśli jednak robimy grę z RTP to można ominąć ten poradnik i robić szybko i sprawnie grę na RTP.<br />
<br />
<br />
Co to jest to całe RTP ? To cały zbiór grafik, dźwięków, utworów który jest dorzucany na siłę kiedy zaczynamy tworzyć nowy projekt w rpgmakerze. Chcecie tworzyć w kółko gry z zasobów RTP ? Olejcie je kompletnie.<br />
<br />
<br />
2 Najlepiej robić gry na startowych pustych projektach, aby nie tracić czasu na usuwanie śmieci z RTP, których gra nie używa. Te projekty są oczyszczone z RTP - grafik/muzyki/dźwięków, które są ustawiane zawsze na starcie nowego projektu w rm. Zaleta ? Gry mają już od początku kilkadziesiąt mb mniej (!)<br />
Nie używają niepotrzebnego syfu tylko tego co sobie w tych grach użyjecie.<br />
<br />
2K3/TSUKURU ME -  <a href="http://tsukuru.pl/index.php?link=programy/RM2003" target="_blank">http://tsukuru.pl/index.php?link=programy/RM2003</a><br />
<br />
VX ACE -  <a href="http://forum.ultimateam.pl/Thread-VXAce-Pusty-projekt-do-Rpgmakera-VX-ACE-ENG" target="_blank">http://forum.ultimateam.pl/Thread-VXAce-...VX-ACE-ENG</a><br />
<br />
3 Muzyka i dźwięki to powinny być rzeczy, które sami znajdziemy lub zrobimy. Bardzo dużo utworów tematycznie podzielonych midi jest np: na TWIERDZY RM:<br />
<a href="http://rpgmaker.pl/?co=download&amp;typ=music" target="_blank">http://rpgmaker.pl/?co=download&typ=music</a><br />
<br />
Tu są tysiące utworów z różnych gier w formacie midi. <br />
Najbardziej polecam zakładki NES/SNES/SEGA - Genialne utwory.<br />
<a href="http://www.vgmusic.com/" target="_blank">http://www.vgmusic.com/</a><br />
<br />
Tu jest dużo różnych dźwięków:<br />
<a href="http://rpgmaker.pl/?co=download&amp;typ=sound" target="_blank">http://rpgmaker.pl/?co=download&typ=sound</a><br />
<a href="https://www.freesound.org/" target="_blank">https://www.freesound.org/</a><br />
<br />
<br />
4 Animacje i Charsety i inne elementy znajdziemy w gigantycznych ilościach na polskich stronach o rmie. Bardzo dużo na twierdzy rpgmaker, oraz tsukuru.pl, oraz na stronach zagranicznych. Sporo w różnych grach, które używają ripów z gier na konsole i nie tylko.<br />
<br />
<a href="http://tsukuru.pl/index.php?link=zasoby" target="_blank">http://tsukuru.pl/index.php?link=zasoby</a><br />
<br />
<br />
Z grafik najbardziej można polecić ripy z różnych gier na konsole.<br />
<br />
<br />
Koniec (!)]]></description>
			<content:encoded><![CDATA[1 Grafa powinna być zbiórką rzeczy, które sami zrobimy lub znajdziemy w sieci. Taką grę robi się szybciej, bo nie trzeba za każdym krokiem grzebać po RTP i się w nim gubić wykorzystując swoje grafy w grze. Jeśli jednak robimy grę z RTP to można ominąć ten poradnik i robić szybko i sprawnie grę na RTP.<br />
<br />
<br />
Co to jest to całe RTP ? To cały zbiór grafik, dźwięków, utworów który jest dorzucany na siłę kiedy zaczynamy tworzyć nowy projekt w rpgmakerze. Chcecie tworzyć w kółko gry z zasobów RTP ? Olejcie je kompletnie.<br />
<br />
<br />
2 Najlepiej robić gry na startowych pustych projektach, aby nie tracić czasu na usuwanie śmieci z RTP, których gra nie używa. Te projekty są oczyszczone z RTP - grafik/muzyki/dźwięków, które są ustawiane zawsze na starcie nowego projektu w rm. Zaleta ? Gry mają już od początku kilkadziesiąt mb mniej (!)<br />
Nie używają niepotrzebnego syfu tylko tego co sobie w tych grach użyjecie.<br />
<br />
2K3/TSUKURU ME -  <a href="http://tsukuru.pl/index.php?link=programy/RM2003" target="_blank">http://tsukuru.pl/index.php?link=programy/RM2003</a><br />
<br />
VX ACE -  <a href="http://forum.ultimateam.pl/Thread-VXAce-Pusty-projekt-do-Rpgmakera-VX-ACE-ENG" target="_blank">http://forum.ultimateam.pl/Thread-VXAce-...VX-ACE-ENG</a><br />
<br />
3 Muzyka i dźwięki to powinny być rzeczy, które sami znajdziemy lub zrobimy. Bardzo dużo utworów tematycznie podzielonych midi jest np: na TWIERDZY RM:<br />
<a href="http://rpgmaker.pl/?co=download&amp;typ=music" target="_blank">http://rpgmaker.pl/?co=download&typ=music</a><br />
<br />
Tu są tysiące utworów z różnych gier w formacie midi. <br />
Najbardziej polecam zakładki NES/SNES/SEGA - Genialne utwory.<br />
<a href="http://www.vgmusic.com/" target="_blank">http://www.vgmusic.com/</a><br />
<br />
Tu jest dużo różnych dźwięków:<br />
<a href="http://rpgmaker.pl/?co=download&amp;typ=sound" target="_blank">http://rpgmaker.pl/?co=download&typ=sound</a><br />
<a href="https://www.freesound.org/" target="_blank">https://www.freesound.org/</a><br />
<br />
<br />
4 Animacje i Charsety i inne elementy znajdziemy w gigantycznych ilościach na polskich stronach o rmie. Bardzo dużo na twierdzy rpgmaker, oraz tsukuru.pl, oraz na stronach zagranicznych. Sporo w różnych grach, które używają ripów z gier na konsole i nie tylko.<br />
<br />
<a href="http://tsukuru.pl/index.php?link=zasoby" target="_blank">http://tsukuru.pl/index.php?link=zasoby</a><br />
<br />
<br />
Z grafik najbardziej można polecić ripy z różnych gier na konsole.<br />
<br />
<br />
Koniec (!)]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Lista Script Calls (!) Raj dla Zdarzeniowców i Maniaków Ruby]]></title>
			<link>https://forum.ultimateam.pl/Thread-VX-VXAce-Lista-Script-Calls-Raj-dla-Zdarzeniowc%C3%B3w-i-Maniak%C3%B3w-Ruby</link>
			<pubDate>Wed, 08 Oct 2014 05:15:23 +0200</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-VX-VXAce-Lista-Script-Calls-Raj-dla-Zdarzeniowc%C3%B3w-i-Maniak%C3%B3w-Ruby</guid>
			<description><![CDATA[W związku, że robię swój projekt w VX ACE w 100% sam od zera na zdarzeniach postanowiłem się podzielić szalonym bonusem.<br />
<br />
Oto lista script calls czyli możliwych użyć dodatkowych komend, które są zawarte w VX ACE (funkcji). <br />
Te funkcje to składowe RGSS, a więc korzystacie dosłownie z RGSS, ale co najlepsze przez zwykłe zdarzenia bez wchodzenia do edytora skryptów. Tu nie kujecie RUBY. Nie musicie. Nie kujecie RGSS.<br />
Te całe script calls to lista wywołań różnych szalonych i przydatnych  funkcji z RGSS za pomocą zwykłych zdarzeń (eventów) za pomocą zdarzenia script.<br />
 <br />
<br />
Co to są te całe SCRIPT CALLS ?<br />
To w większości większe możliwości na wykorzystanie zdarzeń, ale także znajomości języka Ruby (do wyboru do koloru - ja preferuję zdarzenia 10x szybciej jak dla mnie i prościej)- to, to co niektórzy zwą RGSS jest tutaj posegregowane w formie listy - Jest tu  większość nazw funkcji z RGSS, które wywołać można prosto za pomocą zdarzenia script i kopiując dany fragment i podstawiając za niego wartości (zmiennych i przełączników z gry bądź utworzonych w ruby)<br />
W tej całej liście script calls są opisy do każdego script callsa, żeby było wiadomo, który co robi.<br />
Podstawowe pozwalają na bardzo swobodne wywoływanie komend zdarzeniowych jakimi chcecie<br />
wartościami, a te dodatkowe Miscellanous TO JEST totalna jazda bez trzymanki i je polecam najbardziej.<br />
<br />
<br />
Jeśli chcecie korzystać ze zmiennych gry lub switchy gry jako argumenty stosujecie tutaj<br />
<br />
przykład:<br />
<br />
&#36;game_variables[10]                   dziesiąta zmienna gry<br />
&#36;game_switches[10]                    dziesiąty switch gry<br />
<br />
Ruby nie jest konieczne do korzystania z tych przywilejów RGSS i to jest tutaj piękne. Jeśli ktoś wam powie inaczej to wciska wam kity. To niesamowite, ale da się prosto korzystać z tych bajerów za pomocą zwykłych zmiennych i przełączników gry.  <br />
<br />
<br />
przykład:<br />
<br />
To gówienko sprawia, że bohater o id ileś tam może zwiększyć mp o ileś tam. Wstawiacie zdarzenie script i wklejacie to:<br />
<br />
&#36;game_actors[id].mp += value<br />
<br />
Teraz chcemy zwiększyć np: mp postaci która jest piątą na liście waszych stworzonych postaci o 20 mp. No to jazda robicie tak:<br />
<br />
<br />
&#36;game_actors[5].mp += 20<br />
<br />
lub chcecie to zrobić za pomocą waszych zmiennych z gry, które wcześniej już mają ustawioną przez was wartość. <br />
Zapis wygląda tak:<br />
<br />
<br />
&#36;game_actors[&#36;game_variables[10]].mp += &#36;game_variables[10]<br />
<br />
<br />
Co się tu dzieje ? Proste.Postać, która jest tą jaką ma wartość zmienna nr dziesięć dostanie tyle mp ile ma zmienna nr 10.  Proste ?<br />
<br />
Wyobraźcie sobie jak porąbane rzeczy możecie na tym zdziałać. <br />
Tych komend są CAŁE tony poniżej. Więc jeśli wam czegoś za mało na zdarzeniach no to tutaj będziecie mieć wszystkiego aż za dużo XD<br />
<br />
Ja korzystam z tych bajerów ewentualnie po prostu grzebiąc w tym całym labiryncie RGSS, ale z tą listą  jest 10 x szybciej wszystko znaleźć. Choć nie jest to potrzebne do robienia arcydzieł w rpgmaker, bo starczą same zdarzenia to i tak skrajnym maniakom i wariatom może się przydać. (m.innymi do pisania popapranych skryptów Ruby, ale i skryptów zdarzeniowych - ale jak napisałem to tylko taki bonus i bez tego można robić zaawansowane rzeczy na samych zdarzeniach)<br />
<br />
<br />
<br />
Najbardziej polecam zakładkę Miscellanous. W tej zakładce jest tona komend, których nie ma na liście zdarzeń, a dają wiele ciekawych informacji np: czy dany klocek tileseta jest blokujący i inne cuda. Polecam to bardzo ! <br />
<br />
<br />
Oto lista:<br />
<br />
<a href="http://forums.rpgmakerweb.com/index.php?/topic/25759-script-call-collection-for-vxace/" target="_blank">http://forums.rpgmakerweb.com/index.php?...for-vxace/</a>]]></description>
			<content:encoded><![CDATA[W związku, że robię swój projekt w VX ACE w 100% sam od zera na zdarzeniach postanowiłem się podzielić szalonym bonusem.<br />
<br />
Oto lista script calls czyli możliwych użyć dodatkowych komend, które są zawarte w VX ACE (funkcji). <br />
Te funkcje to składowe RGSS, a więc korzystacie dosłownie z RGSS, ale co najlepsze przez zwykłe zdarzenia bez wchodzenia do edytora skryptów. Tu nie kujecie RUBY. Nie musicie. Nie kujecie RGSS.<br />
Te całe script calls to lista wywołań różnych szalonych i przydatnych  funkcji z RGSS za pomocą zwykłych zdarzeń (eventów) za pomocą zdarzenia script.<br />
 <br />
<br />
Co to są te całe SCRIPT CALLS ?<br />
To w większości większe możliwości na wykorzystanie zdarzeń, ale także znajomości języka Ruby (do wyboru do koloru - ja preferuję zdarzenia 10x szybciej jak dla mnie i prościej)- to, to co niektórzy zwą RGSS jest tutaj posegregowane w formie listy - Jest tu  większość nazw funkcji z RGSS, które wywołać można prosto za pomocą zdarzenia script i kopiując dany fragment i podstawiając za niego wartości (zmiennych i przełączników z gry bądź utworzonych w ruby)<br />
W tej całej liście script calls są opisy do każdego script callsa, żeby było wiadomo, który co robi.<br />
Podstawowe pozwalają na bardzo swobodne wywoływanie komend zdarzeniowych jakimi chcecie<br />
wartościami, a te dodatkowe Miscellanous TO JEST totalna jazda bez trzymanki i je polecam najbardziej.<br />
<br />
<br />
Jeśli chcecie korzystać ze zmiennych gry lub switchy gry jako argumenty stosujecie tutaj<br />
<br />
przykład:<br />
<br />
&#36;game_variables[10]                   dziesiąta zmienna gry<br />
&#36;game_switches[10]                    dziesiąty switch gry<br />
<br />
Ruby nie jest konieczne do korzystania z tych przywilejów RGSS i to jest tutaj piękne. Jeśli ktoś wam powie inaczej to wciska wam kity. To niesamowite, ale da się prosto korzystać z tych bajerów za pomocą zwykłych zmiennych i przełączników gry.  <br />
<br />
<br />
przykład:<br />
<br />
To gówienko sprawia, że bohater o id ileś tam może zwiększyć mp o ileś tam. Wstawiacie zdarzenie script i wklejacie to:<br />
<br />
&#36;game_actors[id].mp += value<br />
<br />
Teraz chcemy zwiększyć np: mp postaci która jest piątą na liście waszych stworzonych postaci o 20 mp. No to jazda robicie tak:<br />
<br />
<br />
&#36;game_actors[5].mp += 20<br />
<br />
lub chcecie to zrobić za pomocą waszych zmiennych z gry, które wcześniej już mają ustawioną przez was wartość. <br />
Zapis wygląda tak:<br />
<br />
<br />
&#36;game_actors[&#36;game_variables[10]].mp += &#36;game_variables[10]<br />
<br />
<br />
Co się tu dzieje ? Proste.Postać, która jest tą jaką ma wartość zmienna nr dziesięć dostanie tyle mp ile ma zmienna nr 10.  Proste ?<br />
<br />
Wyobraźcie sobie jak porąbane rzeczy możecie na tym zdziałać. <br />
Tych komend są CAŁE tony poniżej. Więc jeśli wam czegoś za mało na zdarzeniach no to tutaj będziecie mieć wszystkiego aż za dużo XD<br />
<br />
Ja korzystam z tych bajerów ewentualnie po prostu grzebiąc w tym całym labiryncie RGSS, ale z tą listą  jest 10 x szybciej wszystko znaleźć. Choć nie jest to potrzebne do robienia arcydzieł w rpgmaker, bo starczą same zdarzenia to i tak skrajnym maniakom i wariatom może się przydać. (m.innymi do pisania popapranych skryptów Ruby, ale i skryptów zdarzeniowych - ale jak napisałem to tylko taki bonus i bez tego można robić zaawansowane rzeczy na samych zdarzeniach)<br />
<br />
<br />
<br />
Najbardziej polecam zakładkę Miscellanous. W tej zakładce jest tona komend, których nie ma na liście zdarzeń, a dają wiele ciekawych informacji np: czy dany klocek tileseta jest blokujący i inne cuda. Polecam to bardzo ! <br />
<br />
<br />
Oto lista:<br />
<br />
<a href="http://forums.rpgmakerweb.com/index.php?/topic/25759-script-call-collection-for-vxace/" target="_blank">http://forums.rpgmakerweb.com/index.php?...for-vxace/</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Błyskawiczny i kompletny Kurs Ruby dla zdarzeniowców]]></title>
			<link>https://forum.ultimateam.pl/Thread-VXAce-B%C5%82yskawiczny-i-kompletny-Kurs-Ruby-dla-zdarzeniowc%C3%B3w</link>
			<pubDate>Mon, 06 Oct 2014 18:54:14 +0200</pubDate>
			<guid isPermaLink="false">https://forum.ultimateam.pl/Thread-VXAce-B%C5%82yskawiczny-i-kompletny-Kurs-Ruby-dla-zdarzeniowc%C3%B3w</guid>
			<description><![CDATA[Oto mój kurs ruby dla zdarzeniowców. Jedyne co powinniście wiedzieć chcąc tworzyć rozbudowane i zaawansowane rzeczy na zdarzeniach do waszych  gier.<br />
<br />
Nic więcej z Ruby wiedzieć nie musicie (!)<br />
<br />
<br />
Geneza: W rpgmakerze 2k3 istnieje komenda, która pozwala mówić danej zmiennej, które zmienną ma zmieniać. To pozwala skakać po całej liście zmiennych rpgmakera i tworzyć nieprawdopodobne rzeczy jakie na tylko przyjdą do głowy np: odczytywać wartość zmiennych i podstawiać pod nie inne zmienne lub odczytywać różne wartości zmiennych po kolei do jednej z listy zmiennych ułożonych kolejno lub rozwalonych po całej liście od 0 - 9999 czy ile tam ich sobie ustawicie. To potężny mały gadżet, który sprawił, że 2k3 stało się potężną maszynką która pozwala bez Ruby i RGSS bardzo często robić potężne i rozbudowane rzeczy do własnych gier dużo szybciej (!)<br />
<br />
<br />
<br />
Od początku:<br />
<br />
<br />
Trochę Ruby:<br />
Wystarczy z listy zdarzeń w rpgmakerze VX ACE wybrać komendę <br />
Skrypt i w nowej stronie zdarzenia na mapie wpisać to co jest w cudzysłowach:<br />
<br />
<br />
-----------------------------------------------------------------------------<br />
<br />
"&#36;game_variables[40] = 60"  CO TO ROBI ?  ( Zmienia wartość zmiennej nr 40 na 60 )<br />
<br />
<br />
"&#36;game_variables[30] = &#36;game_variables[50]"   CO TO ROBI ? (zmienia wartość zmiennej nr 30 na wartość zmiennej nr 50)<br />
<br />
<br />
Zaznaczone fragmenty kodu to operacje na zmiennych z listy rpgmakera (zmiennych) zmiennej 40, 30. W pierwszym wypadku zmienna nr 40 dostanie wartość 60. W drugim zmienna nr 30 dostanie wartość zmiennej nr 50. Załapaliście to ? Myślę, że tak. Git. Jeśli chcecie się upewnić, że operacje działają <br />
wystarczy, że po wstawieniu komendy skrypt z tymi fragmentami "kodu" wstawicie okno wiadomości, a <br />
w nim wpiszecie \v[40]. Jeśli uruchomicie grę testową w oknie powinno się wyświetlić "60" czyli nowa wartość zmiennej. Tak właśnie sprawdza się w oknie wiadomości wartości zmiennych poprzez wpisanie w okno wiadomości \v[numer zmiennej] z czego numer zmiennej to liczba, którą tu wstawiacie, a jest nią numer zmiennej, której wartość was będzie interesować i chcecie ją wyświetlić w oknie wiadomości.<br />
<br />
<br />
<br />
Teraz do sedna. Jak wygląda układ znanej komendy z 2k3 przez Ruby. Rozwiązałem to tak:<br />
<br />
<br />
Piszecie całość w cudzysłowach tak jak w poprzednim przykładzie:<br />
<br />
<br />
"&#36;game_variables[[&#36;game_variables[10]] = &#36;game_variables[40]"<br />
<br />
<br />
<br />
Hardkorowe ? Nie. Proste.<br />
<br />
<br />
<br />
<br />
<br />
Co to robi ? To sprawia, że dziesiąta zmienna z listy zmiennych zdarzeń rpg maker wskazuje, którą zmienną ma zmienić zmienna nr 40. Czyli zmieniając wartość zmiennej nr 10 na np: 15  mówimy zmiennej 40, że ma zmienić zmienną nr ten, którym jest wartość zmiennej nr 10 czyli zmienną nr 15  na wartość zmiennej 40. Koniec. Nic więcej z ruby znać nie musicie do zaawansowanych rzeczy na zdarzeniach w VX ACE. Koniec i kropka. <br />
Wydaje się to zakręcone ? To bardzo proste. Przeczytajcie jeszcze raz moje wyjaśnienie.<br />
<br />
<br />
<br />
Kompletnie nic więcej z Ruby znać nie musicie do robienia zaawansowanych rzeczy na zdarzeniach w VX ACE (!) Osiągniecie te same efekty tworząc elementy rozgrywki do waszych gier co na ruby, ale 10x prościej bez kucia rgss i całego ruby. Jeśli macie smykałkę do algorytmów wykorzystacie potencjał tej komendy jest on niemal nieskończony. Każdy kto tworzył coś na zdarzeniach w 2k3 z  tą komendą poczuje się jak w domu. Koniec. <br />
<br />
<br />
<br />
Co to zastępuje z mojego doświadczenia i odkrycia przy odrobinie kombinowania:<br />
<br />
listy<br />
tablice<br />
szablony<br />
wzorce<br />
powtarzanie tych samych obliczeń przepisując je po raz kolejny itp. <br />
<br />
<br />
---------------------------------------------------------------------------------------------------------------<br />
<br />
<br />
Jeśli ktoś ma pytania. Odpowiem.]]></description>
			<content:encoded><![CDATA[Oto mój kurs ruby dla zdarzeniowców. Jedyne co powinniście wiedzieć chcąc tworzyć rozbudowane i zaawansowane rzeczy na zdarzeniach do waszych  gier.<br />
<br />
Nic więcej z Ruby wiedzieć nie musicie (!)<br />
<br />
<br />
Geneza: W rpgmakerze 2k3 istnieje komenda, która pozwala mówić danej zmiennej, które zmienną ma zmieniać. To pozwala skakać po całej liście zmiennych rpgmakera i tworzyć nieprawdopodobne rzeczy jakie na tylko przyjdą do głowy np: odczytywać wartość zmiennych i podstawiać pod nie inne zmienne lub odczytywać różne wartości zmiennych po kolei do jednej z listy zmiennych ułożonych kolejno lub rozwalonych po całej liście od 0 - 9999 czy ile tam ich sobie ustawicie. To potężny mały gadżet, który sprawił, że 2k3 stało się potężną maszynką która pozwala bez Ruby i RGSS bardzo często robić potężne i rozbudowane rzeczy do własnych gier dużo szybciej (!)<br />
<br />
<br />
<br />
Od początku:<br />
<br />
<br />
Trochę Ruby:<br />
Wystarczy z listy zdarzeń w rpgmakerze VX ACE wybrać komendę <br />
Skrypt i w nowej stronie zdarzenia na mapie wpisać to co jest w cudzysłowach:<br />
<br />
<br />
-----------------------------------------------------------------------------<br />
<br />
"&#36;game_variables[40] = 60"  CO TO ROBI ?  ( Zmienia wartość zmiennej nr 40 na 60 )<br />
<br />
<br />
"&#36;game_variables[30] = &#36;game_variables[50]"   CO TO ROBI ? (zmienia wartość zmiennej nr 30 na wartość zmiennej nr 50)<br />
<br />
<br />
Zaznaczone fragmenty kodu to operacje na zmiennych z listy rpgmakera (zmiennych) zmiennej 40, 30. W pierwszym wypadku zmienna nr 40 dostanie wartość 60. W drugim zmienna nr 30 dostanie wartość zmiennej nr 50. Załapaliście to ? Myślę, że tak. Git. Jeśli chcecie się upewnić, że operacje działają <br />
wystarczy, że po wstawieniu komendy skrypt z tymi fragmentami "kodu" wstawicie okno wiadomości, a <br />
w nim wpiszecie \v[40]. Jeśli uruchomicie grę testową w oknie powinno się wyświetlić "60" czyli nowa wartość zmiennej. Tak właśnie sprawdza się w oknie wiadomości wartości zmiennych poprzez wpisanie w okno wiadomości \v[numer zmiennej] z czego numer zmiennej to liczba, którą tu wstawiacie, a jest nią numer zmiennej, której wartość was będzie interesować i chcecie ją wyświetlić w oknie wiadomości.<br />
<br />
<br />
<br />
Teraz do sedna. Jak wygląda układ znanej komendy z 2k3 przez Ruby. Rozwiązałem to tak:<br />
<br />
<br />
Piszecie całość w cudzysłowach tak jak w poprzednim przykładzie:<br />
<br />
<br />
"&#36;game_variables[[&#36;game_variables[10]] = &#36;game_variables[40]"<br />
<br />
<br />
<br />
Hardkorowe ? Nie. Proste.<br />
<br />
<br />
<br />
<br />
<br />
Co to robi ? To sprawia, że dziesiąta zmienna z listy zmiennych zdarzeń rpg maker wskazuje, którą zmienną ma zmienić zmienna nr 40. Czyli zmieniając wartość zmiennej nr 10 na np: 15  mówimy zmiennej 40, że ma zmienić zmienną nr ten, którym jest wartość zmiennej nr 10 czyli zmienną nr 15  na wartość zmiennej 40. Koniec. Nic więcej z ruby znać nie musicie do zaawansowanych rzeczy na zdarzeniach w VX ACE. Koniec i kropka. <br />
Wydaje się to zakręcone ? To bardzo proste. Przeczytajcie jeszcze raz moje wyjaśnienie.<br />
<br />
<br />
<br />
Kompletnie nic więcej z Ruby znać nie musicie do robienia zaawansowanych rzeczy na zdarzeniach w VX ACE (!) Osiągniecie te same efekty tworząc elementy rozgrywki do waszych gier co na ruby, ale 10x prościej bez kucia rgss i całego ruby. Jeśli macie smykałkę do algorytmów wykorzystacie potencjał tej komendy jest on niemal nieskończony. Każdy kto tworzył coś na zdarzeniach w 2k3 z  tą komendą poczuje się jak w domu. Koniec. <br />
<br />
<br />
<br />
Co to zastępuje z mojego doświadczenia i odkrycia przy odrobinie kombinowania:<br />
<br />
listy<br />
tablice<br />
szablony<br />
wzorce<br />
powtarzanie tych samych obliczeń przepisując je po raz kolejny itp. <br />
<br />
<br />
---------------------------------------------------------------------------------------------------------------<br />
<br />
<br />
Jeśli ktoś ma pytania. Odpowiem.]]></content:encoded>
		</item>
	</channel>
</rss>