Skocz do zawartości

Tworzenie kwestu z losowymi nagrodami


Rekomendowane odpowiedzi

Tworzenie kwestu z losowymi nagrodami.

Tutorial ze strony AMK - link - autor posta(nr. 26): danDołączona grafika z dn. 02 06 2008 - 07:54

 

Tak w ogóle to ten sposób nie jest mój, wziąłem go od banderosa(a on znowu wziął od Linspiro)

Jak stworzyć kwest z losowymi nagrodami?

Bierzemy dowolnego handlarza lub jakiegokolwiek innego unikalnego NPC-a i dodajemy mu dialog. Na przykład Wilk. Stworzymy kwest, że jeśli przyniesiemy 3 ogony albo 3 kopyta Wilkowi, to on da nam w zamian losową (tzn. przypadkową) nagrodę.

1) W character_desc_escape.xml [gamedataconfiggameplay], do już przypisanych Wilkowi dialogów dodajemy swój unikatowy.

<actor_dialog>prinesi_hvost</actor_dialog><start_dialog>escape_lager_volk_talk</start_dialog><start_dialog>dm_hello_dialog</start_dialog><actor_dialog>dm_cool_info_dialog</actor_dialog><actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog><actor_dialog>tm_wolf_dialog</actor_dialog><actor_dialog>tm_wolf_reward</actor_dialog><actor_dialog>escape_lager_volk_story</actor_dialog><actor_dialog>escape_lager_volk_story2</actor_dialog>

Mój nowy dialog nosi identyfikator:

<actor_dialog>prinesi_hvost</actor_dialog>

2) Otwieramy plik stable_dialogs_escape.xml [gamedataconfigtextpol] i na końcu dopisujemy następujący dialog:

<string id="prinesi_hvost_0"><text>Cześć, co robisz?</text></string><string id="prinesi_hvost_1"><text>Cześć Naznaczony, właśnie biznes rozkręcam. Posłuchaj, ty się kręcisz po Zonie, odstrzeliwujesz rożne mutanty, przyniósłbyś mi 3 ogony ślepych psów albo 3 kopyta miejscowych dzików. Pojawił się chętny na wszelkiego rodzaju części mutantów, podobno robi z nich lekarstwa. Bo na miejscowych nowicjuszy nie bardzo można liczyć. Na widok dzika sami mogą kopyta wyciągnąć. Jeśli przyniesiesz, odwdzięczę się jak zwykle, krzywdy mieć nie będziesz.</text></string><string id="prinesi_hvost_2"><text>No Wilk, przyniosłem kopyta, zabieraj.</text></string><string id="prinesi_hvost_3"><text>No Wilk, przyniosłem ogony, zabieraj.</text></string><string id="prinesi_hvost_4"><text>Przyniosłeś kopyta, dobrze - weź zapłatę.</text></string><string id="prinesi_hvost_5"><text>Przyniosłeś ogony, no dobra, też nieźle, może i one na-coś się przydadzą.</text></string><string id="prinesi_hvost_6"><text>Dziś nic nie mam, tylko pogadać zaszedłem.</text></string>

3) Następnie otwieramy plik dialogs_escape.xml [gamedataconfiggameplay], w zasadzie lepiej stworzyć swój własny plik dialogowy typu "dialogs_new.xml" potem łatwiej dogrywać z innymi modami, najważniejsze - nie zapomnieć dopisać swojego pliku do pliku system.ltx [gamedataconfig] i na końcu dopisujemy dialog:
to jest id dialogu który dodaliśmy Wilkowi w jego sekcji:

<game_dialogs><dialog id="prinesi_hvost"><phrase_list><phrase id="0"><text>prinesi_hvost_0</text><next>1</next></phrase><phrase id="1"><text>prinesi_hvost_1</text><next>2</next><next>3</next><next>6</next></phrase><phrase id="2"><precondition>new_dialog.prines_kopyto</precondition><text>prinesi_hvost_2</text><next>4</next></phrase><phrase id="3"><precondition>new_dialog.prines_hvost</precondition><text>prinesi_hvost_3</text><next>5</next></phrase><phrase id="4"><action>new_dialog.otdal_kopyto</action><text>prinesi_hvost_4</text></phrase><phrase id="5"><action>new_dialog.otdal_hvost</action><text>prinesi_hvost_5</text></phrase><phrase id="6"><text>prinesi_hvost_6</text><action>dialogs.break_dialog</action></phrase></phrase_list></dialog>

gdzie poszczególne wpisy oznaczają:

<dialog id="prinesi_hvost"> jest identyfikatorem dialogu wprowadzonym w pkt. 1 - patrz powyżej!

<precondition>new_dialog.prines_kopyto</precondition> jest warunkiem aktywacji funkcji prines_kopyto, zdefiniowanej w pliku new_dialog.script

<text>prinesi_hvost_2</text> jest odniesieniem do tekstu spolszczenia w naszym przykładzie - patrz pkt. 2
<next>4</next> następna faza tekstu dialogowego, która wykorzystuje funkcję prines_kopyto zawartą w pliku new_dialog.script
<precondition>new_dialog.prines_hvost</precondition> warunek sprawdzający przyniesienie przedmiotu oparty o funkcję prines_hvost zawartą w pliku new_dialog.script
<text>prinesi_hvost_3</text> tutaj znajdziemy odniesienie dot. ogonów, tekst spolszczony w pkt. 2
<action>new_dialog.otdal_kopyto</action> tutaj włącza się funkcja przekazania kopyt i otrzymania nagrody
<text>prinesi_hvost_4</text> dotyczy losowo otrzymanej nagrody

<action>new_dialog.otdal_hvost</action> funkcja analogiczna j/w, dotycząca oddania ogonów (otdal_hvost).

4) Teraz trzeba stworzyć nasz plik skryptowy i dopisać nasze funkcje. Tworzymy plik new_dialog.script (plik wykorzystują utworzone powyżej funkcje: prines_kopyto, otdal_kopyto, prines_hvost, otdal_hvost) a w nim piszemy co następuje:

local nagrad = {level_1 = {"ammo_9x39_sp5","ammo_7.62x54_7h14","ammo_5.45x39_ap","ammo_5.56x45_ap","ammo_11.43x23_hydro", "bread","kolbasa","ammo_5.56x45_ss190"},level_2 = {"af_armor_1","af_babka_1","af_cry_1","af_dik_1","af_kol_1","af_pudd_1","af_spirit_1","bread","kolbasa","af_night_star","af_gold_fish","af_electra_moonlight","af_rusty_sea-urchin","af_dummy_glassbeads"}}function prines_kopyto(first_speaker, second_speaker)local actor, traderif db.actor and db.actor:id() == first_speaker:id() thenactor = first_speakertrader = second_speakerelseactor = second_speakertrader = first_speakerendlocal mutant_boar_leg = 0actor:iterate_inventory(function (dummy, item) if item:section()=="mutant_boar_leg" thenmutant_boar_leg = mutant_boar_leg+1 end end, nil)if mutant_boar_leg>=3 thenreturn trueelsereturn falseendendfunction otdal_kopyto(first_speaker, second_speaker)local item = ""local actor, traderif db.actor and db.actor:id() == first_speaker:id() thenactor = first_speakertrader = second_speakerelseactor = second_speakertrader = first_speakerenditem = nagrad.level_2[math.random(table.getn(nagrad.level_2))]flamethrower.relocate_n_items_section(trader, "mutant_boar_leg", "out", 3)dialogs.relocate_item_section(second_speaker, item , "in")endfunction prines_hvost(first_speaker, second_speaker)local actor, traderif db.actor and db.actor:id() == first_speaker:id() thenactor = first_speakertrader = second_speakerelseactor = second_speakertrader = first_speakerendlocal mutant_dog_tail = 0actor:iterate_inventory(function (dummy, item) if item:section()=="mutant_dog_tail" then mutant_dog_tail=mutant_dog_tail+1 end end, nil)if mutant_dog_tail>=3 thenreturn trueelsereturn falseendendfunction otdal_hvost(first_speaker, second_speaker)local item = ""local actor, traderif db.actor and db.actor:id() == first_speaker:id() thenactor = first_speakertrader = second_speakerelseactor = second_speakertrader = first_speakerenditem = nagrad.level_1[math.random(table.getn(nagrad.level_1))]flamethrower.relocate_n_items_section(trader, "mutant_dog_tail", "out", 3)flamethrower.relocate_n_items_section(actor, item , "in", count)end

 

Niektóre z przedmiotów są unikatowe, pochodzą bowiem z Solijanki, więc implementacja skryptu w innym modzie powiedzie się w sytuacji uwzględnienia przedmiotów występujących w rozgrywce. Generalnie skrypt umożliwia losowy przydział nagród zawartych w zdefiniowanej puli przedmiotów wśród których znajdziemy: amunicję, artefakty, chleb, kiełbasę. Zaskoczeniem dla nas może być fakt otrzymania kiełbasy za ciężkie zadanie.

Funkcje prines_kopyto i prines_hvost sprawdzają obecność u nas w inwentarzu 3 ogonów albo 3 kopyt i odpowiednio dopuszczają nas do fraz (new_dialog.prines_kopyto) w których u nas zachodzi wymiana kopyt i ogonów na losową nagrodę. Funkcje otdal_hvost i otdal_kopyto zabierają od nas kopyta i ogony i wydaja nagrody z odpowiedniego spisu. To wszystko.

Edytowane przez The Emperor
Poprawiono kod plików zgodnie z oryginałem, uzupełniając brakujące frazy. Kod również został otagowany zgodnie z pkt. 8 Regulaminu "Warsztat Modera".
  • Dodatnia 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • Meta zablokował(a) ten temat
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Korzystając z tej strony, zgadzasz się na nasze Warunki użytkowania.