Jump to content

Tworzenie kwestu z losowymi nagrodami


trurl3
 Share

Recommended Posts

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.

Edited by 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".
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.

Comunity