Forum Tawerny Four Ways

Mount&Blade - Modyfikacje => Modding => Wątek zaczęty przez: Garedyr w Lipca 17, 2014, 19:48:03

Tytuł: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Lipca 17, 2014, 19:48:03
Kompilacja skryptów by Garedyr

Aktualne skrypty

- Bank (http://www.mountblade.info/forum/index.php?topic=14970.msg356149#msg356149)
- Wydarzenie losowe (atak bandytów na wioskę) (http://www.mountblade.info/forum/index.php?topic=14970.msg356012#msg356012)
- Blokowanie pocisków (http://www.mountblade.info/forum/index.php?topic=14970.msg320175#msg320175)
- Wojskowi trenerzy (http://www.mountblade.info/forum/index.php?topic=14970.msg289133#msg289133)
- Rekrutacja chłopek w wioskach (http://www.mountblade.info/forum/index.php?topic=14970.msg288469#msg288469)


Stare skrypty, używaj na własne ryzyko (działać działają)

- Prosty skrypt dodający rekrutanta w tawernach (http://www.mountblade.info/forum/index.php?topic=14970.msg288566#msg288566)
- Picie piwa w karczmach (http://www.mountblade.info/forum/index.php?topic=14970.msg288442#msg288442)
- Nagrody za dołączanie do frakcji jak w Nowej Ojczyźnie (nie musisz dawać mi creditsa, nie nazwałbym tego skryptem :P) (http://www.mountblade.info/forum/index.php?topic=14970.msg283050#msg283050)
- Kanibalizm (http://forums.taleworlds.com/index.php/topic,306883.0.html)


W razie sugestii, problemów ze skryptami, pomysłów na nowe należy pisać w tym temacie, albo na PW.

Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Mati44 w Lipca 17, 2014, 19:52:31
Taka mała rada daj cały module system żeby ludzie mieli łatwiej z instalacją.
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Bruce Campbell w Lipca 17, 2014, 20:32:27
Cytat: Mati44
Taka mała rada daj cały module system żeby ludzie mieli łatwiej z instalacją.
A co gdyby ktoś chciał wykorzystać to do moda? W końcu taka jest istota OSP. To nie mod, tylko zrobione przez nas rzeczy, udostępniane z myślą o modderach. Co do samego skryptu: jeśli doda się inne "prace" (ale ja się tego nie podejmę :P), można stworzyć fajny role-playowy mod, zamiast standardowego, Native'owego przejmowania całego świata.
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Lipca 17, 2014, 22:28:02
Taka mała rada daj cały module system żeby ludzie mieli łatwiej z instalacją.

Dodałem.


Nagrody za dołączenie do frakcji (jak w Nowej Ojczyźnie) napisany przeze mnie


Skrypt dodaje nam nagrody za dołączenie do frakcji. Jest to zbroja.

W module_dialogs odnajdź ten kod:
(click to show/hide)

Zamień go na ten:
(click to show/hide)

Na zielono zaznaczyłem itemy, które dostajemy za dołączenie do konkretnej frakcji. U was ich nie ma, więc musicie wpisać jakieś z waszego moda.
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Lipca 18, 2014, 07:38:00
A co gdyby ktoś chciał wykorzystać to do moda? W końcu taka jest istota OSP. To nie mod, tylko zrobione przez nas rzeczy, udostępniane z myślą o modderach. Co do samego skryptu: jeśli doda się inne "prace" (ale ja się tego nie podejmę :P), można stworzyć fajny role-playowy mod, zamiast standardowego, Native'owego przejmowania całego świata.

Zasady używania zostały dodane.

Blokowanie pocisków (i nie tylko!), czyli garda by Garedyr, czyli ja

Skrypt ten pozwoli nam na zablokowanie każdego ataku z każdej strony (włącznie z pociskami). Aktualnie na blok jest 35% szansy. Dodam, że kod jest już dość stary więc pomógł mi trochę Daedalus, gdyż wtedy nie byłem jeszcze tak zaawansowanym w moddingu jak teraz ;P Mimo wszystko chciałbym podziękować mu za pomoc.

UWAGA! Skrypt zawiera polskie znaki

Przechodzimy do module_mission_templates i szukamy tego kodu:

pilgrim_disguise = [itm_pilgrim_hood,itm_pilgrim_disguise,itm_practice_staff, itm_throwing_daggers]
af_castle_lord = af_override_horse | af_override_weapons| af_require_civilian

Pod nim wklejamy ten:

(click to show/hide)

Teraz wklejamy linijkę common_blokowanie_pociskow, do dowolnych misji w module_mission_templates. Przykładem będzie lead_charge. Uwaga! Pamiętaj, że jeśli wkleisz linijkę tylko do lead_charge, to skrypt będzie działał tylko podczas bitwy na otwartym polu (nie będzie działał na oblężeniach, w tawernach, w pierwszej walce, w walce w kryjówce bandytów itp.).

Przykład (wklej pogrubiony kod w wyznaczonym miejscu):

(click to show/hide)
LINK DO NOWEGO SKRYPTU: http://www.mountblade.info/forum/index.php?topic=14970.msg320175#msg320175
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Haazheel w Sierpnia 09, 2014, 15:08:54
Bardzo ciekawe, a czy jest możliwość rozwinięcia tego pomysłu?
No moglibyśmy pracować ewentualnie w stajni, u kowala albo jako ochroniarz magazynu kupca.
A czy u Ciebie w tej modyfikacji jest taka opcja że jak w nocy się zauwarzy że okradają kogoś lub się włamują to mogło by dać potencjalną walkę z bandytami i ewentualnie poprawiać twoją opinię w danym mieście?
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Bruce Campbell w Sierpnia 09, 2014, 15:26:02
A czy u Ciebie w tej modyfikacji jest taka opcja że jak w nocy się zauwarzy że okradają kogoś lub się włamują to mogło by dać potencjalną walkę z bandytami i ewentualnie poprawiać twoją opinię w danym mieście?
To nie jest mod, tylko skrypt OSP, który może wykorzystać każdy robiący moda. A opcji walki z bandytami nie ma, wystarczy spojrzeć na kod. Przelatuje ci po prostu ten czas. No ale tak naprawdę to jest pomysł bardzo mało rozwinięty (chociaż jak widzisz "wydarzenia losowe" są przewidziane do dodania).
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Haazheel w Sierpnia 09, 2014, 16:30:08
No dobra, trochę przegiąłem nazywając to modem, ale przyznasz że te usprawnienia które wymieniłem były by idealne do tego skryptu.
Oczywiście to wola twórcy, czy chce się męczyć nad tymi możliwościami które wymieniłem.
Na dzień dzisiejszy skrypt ma u mnie 8/10, jak będzie możliwość zostania strażnikiem jeszcze w innych królestwach to będzie równe 10 :)
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Września 11, 2014, 19:09:47
Skrypt na kanibalizm (identyczny jak w Nowej Ojczyźnie) napisany przeze mnie

Otwieramy module_dialogs.py i szukamy "prisoner_chat". Powinno nam się ukazać coś takiego:
(click to show/hide)

Usuń ten kod i w jego miejsce wklej ten:
(click to show/hide)
Krótki i zwięzły dialog. Od teraz możemy pozyskiwać mięso z więźniów, lecz to skutkuje grzechem xD

Życzę miłej zabawy! :D

Zaktualizowałem skrypt i wszystko opisałem na Taleworlds, a że mój angielski ssie, to nawet nieuk mnie zrozumie :D

Link do tematu na TW: http://forums.taleworlds.com/index.php/topic,306883.0.html (http://forums.taleworlds.com/index.php/topic,306883.0.html)
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Września 21, 2014, 08:53:17
Skrypt pozwalający na picie piwa w karczmach napisany przeze mnie

Pierwszym krokiem będzie ściągnięcie mesha kufla i animacji picia. Propsy dla Daedalusa za jego animacje i kufel :D
Link http://www.mediafire.com/download/3j1tdmn34cdkfmj/DAEDALUS+ANIMATIONS+AND+MESHES.zip (http://www.mediafire.com/download/3j1tdmn34cdkfmj/DAEDALUS+ANIMATIONS+AND+MESHES.zip)

Następnie przechodzimy do module_items.py i dodajemy ten kod:
(click to show/hide)

Teraz otwieramy module_animations.py i szukamy: ["unused_human_anim_44", 0, 0, [1.0, "anim_human", 0, 1, 0]],
Stawiamy przed tą linią #, by ją "wykomentować", a następnie pod nią wklejamy ten kod:
(click to show/hide)

Przyszedł czas na właściwy dialog z karczmarzami. W tym celu przechodzimy do module_dialogs.py i wyszukujemy:
(click to show/hide)

Pod tym kodem wklejamy ten:
(click to show/hide)


Pozostało tylko dodać  ten kod na koniec pliku module_scripts (przed ostatnim nawiasem kwadratowym!):

(click to show/hide)

To już wszystko. Nie zapomnij do module.ini w folderze z twoim modem dodać linijki: load_mod_resource = animacje_dedala

EDIT
Zapomniałem o jednej bardzo ważnej rzeczy. Wybaczcie mi proszę, bo skleroza to siostra moja rodzona :D
Otwórz module_skills.py i znajdź: ("reserved_7","Reserved Skill 7",sf_base_att_int|sf_inactive,10,"This is a reserved skill."),
Wyłącz tą linię stawiając przed nią #, a następnie dodaj ten kod pod nią:
(click to show/hide)

Jeszcze raz was przepraszam! 

Uwaga na polskie znaki!
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Września 21, 2014, 16:39:19
Skrypt pozwalający na rekrutację chłopek napisany przeze mnie

W module_game_menus znajdź to:
(click to show/hide)

Pod tym wklej to:
(click to show/hide)

Na koniec otwórz module_scripts i na koniec pliku przed ostatnim ] dodaj to:
(click to show/hide)
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Września 22, 2014, 12:55:08
Prosty skrypt dodający rekrutanta w tawernach napisany przeze mnie (specjalnie dla Relkov98)

UWAGA!
Tekst zawiera polskie znaki.

Module_dialogs (po pierwszym [ ):

(click to show/hide)

Zielony- ilość złota za jednostkę
Fioletowy- jednostka
Niebieski- ilość jednostek

Module_troops [po minstrelach (chyba)]:

(click to show/hide)
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Września 28, 2014, 21:12:13
Wojskowi trenerzy prawie jak w Nowej Ojczyźnie napisany przeze mnie ( z małą pomocą Waldziosa dotyczącą bugu)

Module dialogs:

(click to show/hide)

Module troops:

(click to show/hide)
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Marca 02, 2015, 18:28:09
Skrypt dodający bank podobny do tego w Nowej Ojczyźnie

UWAGA! SKRYPT ZAWIERA POLSKIE ZNAKI!

Creditsy:

(click to show/hide)

Skrypt dodaje nam bank podobny do tego, który jest w Nowej Ojczyźnie. Konto w banku można założyć u każdego mistrza gildii w mieście. Aby założyć konto potrzeba 1000 denarów. Nie można pożyczyć pieniędzy, ani zamknąć konta, a jedynie wpłacać i wypłacać pieniądze, gdyż gdyby te opcje były, to było by zbyt dużo oszustw. Środki na koncie są powiększane o 10% co każdy tydzień (w grze).

Zaczynamy od module_constants. Wklej ten kod w dowolnym miejscu w module_constants (w granicach rozsądku):

(click to show/hide)

Teraz kolej na module_scripts. Odnajdź ten kod:

(click to show/hide)

Pod nim wklej ten:

(click to show/hide)

Przyszła kolej na najdłuższą część kodu. Otwieramy module_dialogs i szukamy tego kodu:

(click to show/hide)

Pod nim wklej ten:

(click to show/hide)

Ostatnim krokiem będzie dodanie tego kodu na koniec pliku module_simple_triggers (lecz przed ostatnim ]):

(click to show/hide)
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Bruce Campbell w Marca 04, 2015, 10:13:59
Pięknie, jednak teraz umieszczamy w Bazie Skryptów tylko skrypty z TW. Jeśli ktoś jest autorem swojego skryptu, a chce go udostępnić, to powinien sobie założyć temat ze swoim pierwszym skryptem i otagować go [OSP], a ja go wówczas dodaję do listy w wątku OSP. Ponieważ ty już swój masz Garedyr, to przeniosę Ci go tam.
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Haazheel w Listopada 06, 2015, 14:51:18
Wiem że długo nikt tu nie pisał, bo nie widzę sensu tworzenia nowego wątku w którym mam pytanie do tych skryptów. Czy jest możliwość bezpiecznej modyfikacji skryptu dodający rekrutanta w tawernach? Chodzi mi o to by zrobić tak ze jeden rekrutant zapewnia jeden lub kilka jednostek, a następny miałby coś innego do z rekrutowania.
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Listopada 06, 2015, 17:26:16
Wiem że długo nikt tu nie pisał, bo nie widzę sensu tworzenia nowego wątku w którym mam pytanie do tych skryptów. Czy jest możliwość bezpiecznej modyfikacji skryptu dodający rekrutanta w tawernach? Chodzi mi o to by zrobić tak ze jeden rekrutant zapewnia jeden lub kilka jednostek, a następny miałby coś innego do z rekrutowania.

Bezpiecznej w sensie pozwolenia? Jeśli o to ci chodziło, to pamiętaj, że to jest OSP. Możesz robić z tym co chcesz, byle byś dodał mnie do creditsów ;) Biorąc jednak pod uwagę to, że te skrypty są zwyczajnie stare, to proszę o zwracania się z takimi problemami na PW, a ja wtedy postaram się rozwiązać wasze problemy.
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Listopada 29, 2015, 14:38:14
Nowa wersja skryptu blokowania pocisków (2.1)

Jest to nowa wersja odbijania pocisków. Stara zawierała trochę niedociągnięć i innych pierdół. Aby zablokować pocisk należy posiadać broń dwuręczną (drzewcowa się nie liczy) oraz trzymać prawy przycisk myszy. W tej wersji można blokować pociski siedząc na koniu, co nie było możliwe w starej wersji skryptu.

Co jest pociskiem:

- strzała
- bełt

Skrypt wrzucamy module_mission_templates, pod tymi linijkami
(click to show/hide)

Skrypt:

(click to show/hide)

Teraz wystarczy wkleić commona do dowolnej misji, w której chcemy mieć możliwość blokowania pocisków.

Przykład użycia w lead_charge:

(click to show/hide)

EDIT

Uwzględniłem uwagi Daedalusa. Dziękuję mu za opinię oraz podanie nowych rzeczy, które zostały olane przez Taleworlds ;)


Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Bruce Campbell w Listopada 29, 2015, 19:23:43
Miło, że apdejtujesz swoje stare skrypty i dzielisz się nimi z innymi userami :)
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Daedalus w Listopada 30, 2015, 18:13:29
Garedyr, kilka uwag:

1. Niepotrzebnie sprawdzasz atakującego. Wystarczy bowiem, aby atakujący zginął zaraz po strzale i już pocisku nie będzie się dało zablokować. Atakujący nie jest tu do niczego potrzebny, więc śmiało można go wywalić.

2. Zamiast z niepewnego reg0 lepiej po prostu skorzystać z parametru 4 (broń) lub 6 (pocisk) i tutaj sprawdzać typ przedmiotu.

3. Używanie połączenia "this_or_next" z "agent_set_animation" jest zupełnie bezcelowe, bo "agent_set_animation" to nie jest operacja warunkowa. W Twoim wypadku uruchomi się więc zawsze pierwsza linijka. Jeśli chcesz aby losowo odtwarzała się któraś z wybranych animacji (a podejrzewam, że taki był zamiar), to musisz to zrobić nieco inaczej. ;)

4. Dla bezpieczeństwa nie używałbym też (set_trigger_result, ":damage"), o ile nie modyfikujesz obrażeń poprzez skrypt. Używa się tej operacji tylko po to, by nadpisać domyślną wartość, a tutaj zostaje ona taka sama. Zatem zmienna ":damage" jest w tym skrypcie zupełnie niepotrzebna i śmiało obie linijki z nią możesz wywalić.

5. Do skryptu dodałbym jeszcze sprawdzanie pozycji, bo pewnie trochę to głupio wygląda, gdy ktoś dostaje w plecy, a mimo to odbija pocisk mieczem. ;)
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Listopada 30, 2015, 18:38:16
Garedyr, kilka uwag:

1. Niepotrzebnie sprawdzasz atakującego. Wystarczy bowiem, aby atakujący zginął zaraz po strzale i już pocisku nie będzie się dało zablokować. Atakujący nie jest tu do niczego potrzebny, więc śmiało można go wywalić.

2. Zamiast z niepewnego reg0 lepiej po prostu skorzystać z parametru 4 (broń) lub 6 (pocisk) i tutaj sprawdzać typ przedmiotu.

3. Używanie połączenia "this_or_next" z "agent_set_animation" jest zupełnie bezcelowe, bo "agent_set_animation" to nie jest operacja warunkowa. W Twoim wypadku uruchomi się więc zawsze pierwsza linijka. Jeśli chcesz aby losowo odtwarzała się któraś z wybranych animacji (a podejrzewam, że taki był zamiar), to musisz to zrobić nieco inaczej. ;)

4. Dla bezpieczeństwa nie używałbym też (set_trigger_result, ":damage"), o ile nie modyfikujesz obrażeń poprzez skrypt. Używa się tej operacji tylko po to, by nadpisać domyślną wartość, a tutaj zostaje ona taka sama. Zatem zmienna ":damage" jest w tym skrypcie zupełnie niepotrzebna i śmiało obie linijki z nią możesz wywalić.

5. Do skryptu dodałbym jeszcze sprawdzanie pozycji, bo pewnie trochę to głupio wygląda, gdy ktoś dostaje w plecy, a mimo to odbija pocisk mieczem. ;)

Dziękuję za uwagi, oczywiście dostosuję się do nich ;) Nie daje mi spokoju tylko 1 rzecz:

[...]lepiej po prostu skorzystać z parametru 4 (broń) lub 6 (pocisk) i tutaj sprawdzać typ przedmiotu.[...]

W moim pliku header_triggers nie ma wzmianki o parametrach 4 i 6. Czy ja mam nieaktualną wersję pliku header_triggers w moim MS 1.166, czy to ty masz jakąś pre-wersje nowego MS?

Cytuj
ti_on_agent_hit          = -28.0 #can only be used in module_mission_templates triggers
# Trigger Param 1: damage inflicted agent_id
# Trigger Param 2: damage dealer agent_id
# Trigger Param 3: inflicted damage
# Register 0: damage dealer item_id
# Position Register 0: position of the blow
#                      rotation gives the direction of the blow
# Trigger result: if returned result is greater than or equal to zero, inflicted damage is set to the value specified by the module.


Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Daedalus w Listopada 30, 2015, 19:02:22
Wraz z wydaniem VC doszło trochę zmian i trochę nowych operacji. Nie śledziłem angielskiego forum zbyt intensywnie przez ostatni rok, ale byłem pewien, że poinformowali ludzi o tych zmianach i nowych rzeczach. Widocznie to olali. :D

Jak będę miał chwilkę to zerknę do starego MS i porównam co dam doszło. Na razie łap ten trigger (jednak pomyliłem się z tym reg0 i parametrami 4 i 6, patrzyłem na trigger "ti_on_scene_prop_hit"):

ti_on_agent_hit          = -28.0 #can only be used in module_mission_templates triggers
# Trigger Param 1: damage inflicted agent_id
# Trigger Param 2: damage dealer agent_id
# Trigger Param 3: inflicted damage
# Trigger Param 4: hit bone
# Trigger Param 5: missile item kind no
# Register 0: damage dealer item_id
# Position Register 0: position of the blow
#                      rotation gives the direction of the blow
# Trigger result: if returned result is greater than or equal to zero, inflicted damage is set to the value specified by the module.
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Listopada 30, 2015, 19:43:29
Wraz z wydaniem VC doszło trochę zmian i trochę nowych operacji. Nie śledziłem angielskiego forum zbyt intensywnie przez ostatni rok, ale byłem pewien, że poinformowali ludzi o tych zmianach i nowych rzeczach. Widocznie to olali. :D

Jak będę miał chwilkę to zerknę do starego MS i porównam co dam doszło. Na razie łap ten trigger (jednak pomyliłem się z tym reg0 i parametrami 4 i 6, patrzyłem na trigger "ti_on_scene_prop_hit"):

ti_on_agent_hit          = -28.0 #can only be used in module_mission_templates triggers
# Trigger Param 1: damage inflicted agent_id
# Trigger Param 2: damage dealer agent_id
# Trigger Param 3: inflicted damage
# Trigger Param 4: hit bone
# Trigger Param 5: missile item kind no
# Register 0: damage dealer item_id
# Position Register 0: position of the blow
#                      rotation gives the direction of the blow
# Trigger result: if returned result is greater than or equal to zero, inflicted damage is set to the value specified by the module.

Jest jeszcze druga sprawa, czyli kości. Domyślnie nie są one zdefiniowane w plikach MS, a jedynie znajdują się gdzieś w folderze Data. Wystarczy zdefiniować je w header_common?
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Daedalus w Listopada 30, 2015, 21:10:55
Tak, wystarczy wkleić do header_common:
#Human bones
hb_abdomen = 0
hb_thigh_l = 1
hb_calf_l = 2
hb_foot_l = 3
hb_thigh_r = 4
hb_calf_r = 5
hb_foot_r = 6
hb_spine = 7
hb_thorax = 8
hb_head = 9
hb_shoulder_l = 10
hb_upperarm_l = 11
hb_forearm_l = 12
hb_hand_l = 13
hb_item_l = 14
hb_shoulder_r = 15
hb_upperarm_r = 16
hb_forearm_r = 17
hb_hand_r = 18
hb_item_r = 19

#Horse bones
hrsb_pelvis = 0
hrsb_spine_1 = 1
hrsb_spine_2 = 2
hrsb_spine_3 = 3
hrsb_neck_1 = 4
hrsb_neck_2 = 5
hrsb_neck_3 = 6
hrsb_head = 7
hrsb_l_clavicle = 8
hrsb_l_upper_arm = 9
hrsb_l_forearm = 10
hrsb_l_hand = 11
hrsb_l_front_hoof = 12
hrsb_r_clavicle = 13
hrsb_r_upper_arm = 14
hrsb_r_forearm = 15
hrsb_r_hand = 16
hrsb_r_front_hoof = 17
hrsb_l_thigh = 18
hrsb_l_calf = 19
hrsb_l_foot = 20
hrsb_l_back_hoof = 21
hrsb_r_thigh = 22
hrsb_r_calf = 23
hrsb_r_foot = 24
hrsb_r_back_hoof = 25
hrsb_tail_1 = 26
hrsb_tail_2 = 27
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: MadGuarang w Stycznia 12, 2016, 14:51:35
Cytuj
Nagrody za dołączenie do frakcji (jak w Nowej Ojczyźnie) napisany przeze mnie

Hej,

bardzo fajny skrypt. Mam do tego wątku pytanie. Popełniam zapewne jakiś błąd totalnego nowicjusza... Otóż skrypt działa wyśmienicie, tak długo, jak odwołuję się do przedmiotów istniejących w podstawce np.

Cytuj
(troop_add_item, "trp_player", "itm_sword_viking_1", 0),

natomiast postanowiłem rozwinąć pomysł tworząc unikatowy przedmiot. W module_items.py utworzyłem (na próbę) idealną kopię kuszy, zmieniając jedynie jej "pierwszą" nazwę na special:

Cytuj
["hunting_crossbow", "Hunting Crossbow", [("crossbow_a",0)], itp_type_crossbow |itp_merchandise|itp_primary|itp_two_handed ,itcf_shoot_crossbow|itcf_carry_crossbow_back,22 , weight(2.25)|difficulty(0)|spd_rtng(47) | shoot_speed(50) | thrust_damage(37 ,  pierce)|max_ammo(1),imodbits_crossbow ],
["special_crossbow", "Special Crossbow", [("crossbow_a",0)], itp_type_crossbow |itp_merchandise|itp_primary|itp_two_handed ,itcf_shoot_crossbow|itcf_carry_crossbow_back,22 , weight(2.25)|difficulty(0)|spd_rtng(47) | shoot_speed(50) | thrust_damage(37 ,  pierce)|max_ammo(1),imodbits_crossbow ],

potem w module_dialogs.py umieściłem jej nazwę:

Cytuj
(eq, ":fac", "fac_kingdom_2"),
   (troop_add_item, "trp_player", "special_crossbow", 0),
         (try_end),

Niestety, przy kompilacji wyskakuje błąd:
Cytuj
ERROR: unrecognized tag:specialin object: special_crossbow
ERROR: illegal identifier:special crossbow

powtarza się to przy każdej próbie dodania stworzonego przedmiotu przeze mnie, jeśli wybieram jakiś przedmiot z nativa problemu nie ma.

Podejrzewam (może źle), że nowy stworzony przeze mnie przedmiot trzeba wpisać na jakąś dodatkową listę (?), gdzieś zadeklarować, ale w żadnym tutorialu o dodawaniu przedmiotów (przynajmniej w ang i pl, które czytałem) nikt nic o takiej konieczności nie wspominał.

Będę wdzięczny za pomoc :)
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Bruce Campbell w Stycznia 12, 2016, 15:01:25
Umieść z przodu itm. Czyli jak dodajesz to do kodu musisz dodać to tak: itm_special_crossbow
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: MadGuarang w Stycznia 12, 2016, 15:13:46
Wielkie dzięki za prędką i właściwą odpowiedź. Wszystko zadziałało!
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: MadGuarang w Stycznia 12, 2016, 18:59:24
Po pozytywnym rozpatrzeniu skryptu na prezenty za wejście do frakcji przez kompilator zabrałem się za skrypt kanibalizmu. Zadziałałem wg wskazówek na Talewords ( http://forums.taleworlds.com/index.php/topic,306883.0.html ) i wszystko świetnie działa. Gratulacje za super pomysł.

Jedynie kod w module_game_menus:
 
Cytuj
[(assign, "$temp", "itm_ludzkie_mieso"),
      (try_begin),
      (troop_remove_item,"trp_player","itm_ludzkie_mieso"),
       (troop_add_item,"trp_player","itm_pieczone_ludzkie_mieso"),
       (display_message,"@You roasted some human flesh on fire.", 0x00FF00),
       (rest_for_hours, 3, 5, 1),

zamieniłem na:

Cytuj
[(assign, "$temp", "itm_ludzkie_mieso"),
      (try_begin),
     (call_script, "script_change_troop_renown", "trp_player", 2),
     (add_xp_to_troop, 250, "trp_player"),
     (assign, reg7, "$player_honor"),
         (val_add, reg7, -1),
         (display_message, "@Player honor is decreased by 1 and it is now {reg7}."),
         (val_add, "$player_honor", 1),
      (troop_remove_item,"trp_player","itm_ludzkie_mieso"),
       (troop_add_item,"trp_player","itm_pieczone_ludzkie_mieso"),
       (display_message,"@You roasted some human flesh on fire. This horrific action decreased your honour by 1 point, increased renown by 2 and made you more experienced (+250 exp).", 0x00FF00),
       (rest_for_hours, 3, 5, 1),

czyli dodałem opcję, by za każde mięso pc dostawał 250exp, +2 renomy a tracił punkt honoru - i to także zadziałało. Co bardzo mnie cieszy bo bardzo powoli, ale tą metodą małych dodatków baaaardzo powoli zaczynam coś ledwo kojarzyć ze skryptami.

Z tego też powodu - ale i dla rozbudowy tego motywu w ogóle działania z więźniami na różne sposoby - postanowiłem dodać jeszcze dwie/trzy opcje, ale wyraźnie znów brak podstawowej wiedzy daje się we znaki, także byłbym wdzięczny za pomoc.

Najpierw, co chcę osiągnąć:
 
Do rozmowy z więźniem, znajdującej się w module_dialogs chciałem dodać opcję "szybkiego okupu". Linijka PC "Dawaj ile masz kasy i spadaj" prowadzi do odpowiedzi więźnia: "Dzięki i niech Ci bogowie blablabla...", teraz losowanie liczby od 10 do 50, dodanie wylosowanej liczby do ogólnej kasy PC.

Szukałem po forum instrukcji losowania i natknałem się na coś takiego (https://forums.taleworlds.com/index.php?topic=59574.0):
Cytuj
  (store_random_in_range,reg1,0,5),
  (store_random_in_range,reg2,0,5),
  (store_random_in_range,reg3,0,5),
  (store_random_in_range,reg4,0,5),
  (store_random_in_range,reg5,0,5),
  (store_random_in_range,reg6,0,5),
  (store_random_in_range,reg7,0,5),
  (store_random_in_range,reg8,0,5),
  (store_random_in_range,reg9,0,5),
  (store_random_in_range,reg10,0,5),
  (store_random_in_range,reg11,0,5),
  (store_random_in_range,reg12,0,5),
 
  (display_message,"@ {reg1} {reg2} {reg3} {reg4} {reg5} {reg6} {reg7} {reg8} {reg9} {reg10} {reg11} {reg12}"),

czyli losowanie szybkiego okupu powinno wygladać mniej więcej tak:
Cytuj
(store_random_in_range,reg1,10,50),

oryginalna linijka "kanibalizmu" gdzie PC dostaje za zabicie więźnia sztukę mięsa wygląda tak:
Cytuj
[anyone|plyr,"prisoner_chat_6", [], "Hey, team, we have a lot of good meet here. Go get me a knife for filleting!", "close_window",[(troop_add_item, "trp_player", "itm_ludzkie_mieso", 0),(store_conversation_troop,reg(1)), (remove_troops_from_prisoners,reg(1),1),]],

czyli została w niej wykorzystana zmienna(?) reg(1) - nie wiem, czy ta sama, czy nie co w losowaniu.

Także moją wersję zapisałem pod zmienną din1 i moja linijka wygląda tak:
Cytuj
[anyone,"prisoner_chat_7", [], "Thank you! This is all I have, please take it and let the gods be with you!", "close_window",[(store_random_in_range,din1,10,50),(call_script, "script_troop_add_gold", "trp_player", {din1}),(store_conversation_troop,reg(1)), (remove_troops_from_prisoners,reg(1),1),]],

zakładam, że nie jest to właściwy sposób losowania i dodawania, bo w kompilacji wyskakuje błąd:

http://imageshack.com/a/img903/4815/ku86oh.jpg

Zmienną din1 dodałem, żeby zobaczyć czy to pozwoli mi na losowanie.

Z góry dzięki za pomoc.


Od razu zaznaczę drugi problem, a może bardziej pytanie:
idąc tym samym tropem co linijka wyżej chciałem sprawić, by za zabicie więźnia PC dostawał, powiedzmy 250exp, wkleiłem coś takiego:
Cytuj
[anyone|plyr,"prisoner_chat_8", [], "You have to die", "close_window",[(add_xp_to_troop, 250, "trp_player"),(store_conversation_troop,reg(1)), (remove_troops_from_prisoners,reg(1),1),]],

poskutkowało to tylko całą listą błędów w kompilacji. Co robię źle? Czy po prostu w module_dialogs nie powinno się umieszczać takich kodów, czy po prostu coś źle wklepałem?

i jakby ktoś miał jeszcze troszkę cierpliwości: :)

a gdybym chciał za zabicie więźnia dodać jeden losowo wybrany przedmiot z jego ekwipunku do ekwipunku PC... jakieś rady jak w ogóle się za to zabrać?

Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Stycznia 12, 2016, 20:54:58
Także moją wersję zapisałem pod zmienną din1 i moja linijka wygląda tak:

[anyone,"prisoner_chat_7", [], "Thank you! This is all I have, please take it and let the gods be with you!", "close_window",[(store_random_in_range,din1,10,50),(call_script, "script_troop_add_gold", "trp_player", {din1}),(store_conversation_troop,reg(1)), (remove_troops_from_prisoners,reg(1),1),]],

Zacznijmy od podstaw. Istnieją dwa rodzaje zmiennych - lokalne i globalne. Lokalne zmienne są używane jedynie w pojedynczych blokach kodu, oddzielonych kwadratowymi nawiasami. Zmienne globalne są używane i rozpoznawane przez każdy plik, a nie tylko pojedynczy blok kodu.

Przykład zmiennej lokalnej:

":zmienna"
Przykład zmiennej globalnej:

"$zmienna"
Cudzysłowy są konieczne. Jak można zauważyć, zmienne globalne są poprzedzane dolarem, a nie dwukropkiem tak jak to jest w zmiennych lokalnych.

Istnieją jeszcze reguły. Są one używane jeśli chcemy gdzieś "wyświetlić" wartość reguły.

Reguły wyglądają tak:

reg1
Przy regułach nie używamy cudzysłowów. Jeśli chcemy wyświetlić wartość reguły w jakimś menu, dialogu, to musimy umieścić tam {reg1}.

Twoja zmienna din1 w tym przypadku jest lokalna, więc powinna wyglądać tak:

":din1"
czyli została w niej wykorzystana zmienna(?) reg(1) - nie wiem, czy ta sama, czy nie co w losowaniu.

reg(1) jest przykładem starych, przestarzałych reguł z podstawowego M&B. Można dalej tego używać, aczkolwiek nie jest to wskazane.

Najlepiej by było gdybyś zamienił swoją linijkę uwalniającą więźnia na tę:

[anyone,"prisoner_chat_7", [], "Thank you! This is all I have, please take it and let the gods be with you!", "close_window",[(store_random_in_range, ":din1", 10, 50),(troop_add_gold, "trp_player", ":din1"),(store_conversation_troop, ":jednostka"), (remove_troops_from_prisoners, ":jednostka", 1)]],
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Mat Berserker w Stycznia 13, 2016, 00:47:24
Garedyr ogólnie dobrze gada ale chcę doprecyzować. Reg1 to nie skrót od reguły tylko od rejestru(liczbowego). I nie jest ona per se przestarzała w warbandzie co raczej ma ograniczone zastosowanie. Rejestry są w gruncie rzeczy zmiennymi globalnymi ale nie są identyfikowane poprzez nazwę("$zmienna") a poprzez numer(reg12). Można ich używać wszędzie ale nie ma gwarancji na niemodyfikowanie ich poprzez inne skrypty(zarówno wywołane jawnie poprzez call_script jak i niejawnie poprzez grę po zadaniu jednostce obrażeń itd). Aktualnie rejestry znajdują głównie zastosowanie jako dodatkowe argumenty w niektórych wyzwalaczach(triggers) oraz jako wartość zwracana przez  niektóre skrypty-funkcje. Dodatkową własnością rejestrów jest to że silnik gry umie podstawiać je pod markery w napisach. Gdy wypisujesz gdzieś wiadomość o treści "@Wynik to: {reg10} i bardzo mnie to cieszy" to wartość liczbowa zawarta w rejestrze reg10 zostanie automatycznie umieszczona w napisie. Gdy zawartość rejestru wynosi 123 wo wynikowy napis będzie brzmiał "Wynik to: 123 i bardzo mnie to cieszy".
Przykład takiego działania wysłałeś tutaj:
  (store_random_in_range,reg1,0,5),
  (store_random_in_range,reg2,0,5),
  (store_random_in_range,reg3,0,5),
  (store_random_in_range,reg4,0,5),
  (store_random_in_range,reg5,0,5),
  (store_random_in_range,reg6,0,5),
  (store_random_in_range,reg7,0,5),
  (store_random_in_range,reg8,0,5),
  (store_random_in_range,reg9,0,5),
  (store_random_in_range,reg10,0,5),
  (store_random_in_range,reg11,0,5),
  (store_random_in_range,reg12,0,5),
 
  (display_message,"@ {reg1} {reg2} {reg3} {reg4} {reg5} {reg6} {reg7} {reg8} {reg9} {reg10} {reg11} {reg12}"),

Aby poszerzyć temat dodam że oprócz rejestrów liczbowych(reg0,reg1,...,reg12,...) istnieją też rejestry napisowe(str0,str1,...,str12,...) jak i pozycyjne(pos0,pos1,...,pos12,...) co do których stosują się te same ograniczenia i wady. Jednak w ich przypadku nie ma alternatywy w postaci nazywanych zmiennych co może powodować wiele bugów.
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: MadGuarang w Stycznia 13, 2016, 01:27:26
Wielkie dzięki za wyjaśnienia.

Obydwa wasze teksty przeczytałem wielokrotnie, ale zaczynam jarzyć.

Gdy Garedyr poprawił mi kod na
Cytuj
[anyone,"prisoner_chat_7", [], "Thank you! This is all I have, please take it and let the gods be with you!", "close_window",[(store_random_in_range, ":din1", 10, 50),(troop_add_gold, "trp_player", ":din1"),(store_conversation_troop, ":jednostka"), (remove_troops_from_prisoners, ":jednostka", 1)]],


to teraz mam pytanie - Reg to rejestr liczbowy, a jak jest w wypadku zmiennej lokalnej?

Czyli w poleceniu (store_conversation_troop, ":jednostka"), zmienna ":jednostka" uzyskała wartość liczbową czy nazwę?

Teraz widzę, że niesłusznie próbowałem użyć reg1 do sprawdzenia tej kwestii, wyprodukowałem sobie takie coś:
Cytuj
(assign, reg4, ":jednostka",),
 (display_message, "@{!}Gained freedom: {reg4}"),

mając nadzieję, że w ten sposób w wiadomościach zobaczę nazwę jednostki, (która zyskała wolność). Zamiast tego wyrzucało info, że wypuściłem więźnia 113 :) (a nie "Looter")

Czy gdybym wpisał str4 zamiast reg4, to uzyskałbym nazwę więźnia z którym prowadziłem rozmowę?

Nie wiem, czy dobrze rozumiem Twoje ostatnie zdanie Mat Berseker,
Cytuj
Jednak w ich przypadku nie ma alternatywy w postaci nazywanych zmiennych co może powodować wiele bugów.
- Chodzi o to, że zamiast rejestru reg mogę używać zmiennych lokalnych, czyli np. ":jednostka", ale w wypadku rejestrów str0, str1 itd nie ma takiej opcji?

Tak, czy inaczej, dzięki za wyjaśnienia!
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Mat Berserker w Stycznia 13, 2016, 02:35:16
Warband ma dość śmieszną architekturę. Wszystkie operacje odbywają się na liczbach, napisach lub pozycjach. Z czego najpopularniejsze są liczby i tylko one mają takie ułatwienie składniowe jakim jest zmienna lokalna i globalna. W związku z czym w większości operacji używane są liczby, i tylko od rodzaju operacji zależna jest jej interpretacja. Dlatego takie ważne jest żeby pamiętać i jakiego typu indeks przechowujemy w danej zmiennej. Przekazanie do operacji oczekującej jednostki numeru indeksu miasta nie zgłosi żadnego błędu w trakcie budowania moda a podczas działania gry błąd może się pojawić ale nie musi. Jedyne co jest pewne to to że kod nie będzie działał w zamierzony sposób, ale znalezienie konkretnego błędu może być już trudniejsze. Przechodząc do podanego przez ciebie kodu:
(store_conversation_troop, ":jednostka"),
(assign, reg4, ":jednostka",),
(display_message, "@{!}Gained freedom: {reg4}"),
W zmiennej ":jednostka" przechowana zostaje zmienna liczbowa. Ta sama zmienna zostaje przekazana potem do rejestru nr 4 i podstawiona pod napis. Otrzymałeś całkowicie poprawną informacje o wypuszczeniu więźnia o jednostce 113. Każda jednostka, przedmiot, scene_prop itd ma swój własny numer indeksu. Zaczynają się one od zera i zwiększają się o jeden. W warbandzie pierwszą jednostką jest trp_player(jednostka gracza) i ma numer 0, następnie znajduje się tam trp_multiplayer_profile_troop_male o numerze indeksu 1 itd. Aż do 113 który jest przyporządkowany do trp_looter. Wszystkie przypisania możesz sprawdzić w ID_troops.py, plik ten generuje się automatycznie przy buildowaniu moda.
Tak więc jakbyś chciał uzyskać nazwę jednostki musisz skorzystać ze specjalnej operacji:
(str_store_troop_name, <string_register>, <troop_id>),Jako pierwszy argument podajesz rejestr napisów(np s12) a jako drugi zmienną(lub rejestr liczbowy) zawierającą indeks jednostki. Następnie wynik możesz wyświetlić jako:
(display_message, "@{!}Gained freedom: {s12}"),
Nie wiem, czy dobrze rozumiem Twoje ostatnie zdanie Mat Berseker,  - Chodzi o to, że zamiast rejestru reg mogę używać zmiennych lokalnych, czyli np. ":jednostka", ale w wypadku rejestrów str0, str1 itd nie ma takiej opcji?
Dokładnie.
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: MadGuarang w Stycznia 15, 2016, 07:19:14
Ok, gdyby, ktoś równie niedoświadczony w kodowaniu śledził ten wątek kanibalizmu i chciał to powtórzyć to rada:
- nigdy nie trzymaj jednocześnie otwartych pliku oryginalnego i backupa dłużej niż to absolutnie konieczne, bo po godzinie zorientujesz się, że wpisujesz komendy do nie tego pliku co trzeba ;)

- na poważniej: dla kogoś, kto zaczyna nie jest oczywiste, że wklejane w module_items.py jedzenie, itm_pieczona_ludzkie_mieso i pozostałe muszą znajdować się w dziale jedzenia. U mnie w kolejności wypada to po maśle, czyli ["butter","Butter", [("butter_pot",0)]. W przeciwnym wypadku przedmioty nie będą miały bonusu do morale ( u mnie nie pojawiał się w ogóle, albo +0).

Udało mi się, bardzo pokracznie, ale jakoś rozwinąć też niektóre aspekty skryptu (do celów samoszkoleniowych):
Rozmawiając z więźniem mamy do wyboru:
- zutylizować go na jedzenie (po wybraniu tej opcji więzień zajęczy przedśmiertnie :) )
to z kolei wywoła zmiany w renomie, honorze oraz xp i zostanie oznaczone odpowiednią wiadomością

- wypuścić na wolność za drobne, które ma przy sobie (losowa wartość 10-50 denarów) (plus dźwięk wpadających do naszej kieszeni dinarów)
- darować wolność bezwarunkowo = wiadomość: zmiany w renomie, xp oraz dźwięk quest_completed.

ostatecznie wygląda to tak (w module_dialogs):
(click to show/hide)

W menu pieczenia także dokonałem drobnych zmian:
- w pliku module_game_menus przesunałem całe menu, tak, żeby uruchamiało się w grze po campie oraz wybraniu opcji "Take an action", tuż pod "recruit some prisoners"
(click to show/hide)

W samym menu pieczenia dokonałem także drobnej wymiany (zaznaczam na czerwono):
(click to show/hide)

oprócz zmian w honorze, renomie xp i wiadomości o tym na ekranie, podniosłem wyżej "(change screen return)" i na koniec dodałem
Cytuj
   (play_sound,"snd_fire_baking", 0),

także do module_sounds wkleiłem jedną linijkę:
Cytuj
("fire_baking", sf_2d|sf_priority_9|sf_vol_12, ["Fire_Torch_Loop3.ogg"]),
czyli odgłos palącej się pochodni, który udaje płonące ognisko.


Od razu powiem, że zdaję sobie sprawę, że nie posłuchałem się porad i pewnie zbyt chętnie odnosiłem się do reg w skryptach i wszystko można było zrobić prościej, ale inaczej nie umiałem. Wszystko sprawdzone i bez błędów, więźniowie teraz wrzeszczą jak zarzynane świnie przed przerobieniem na mięso, a ognisko wesoło skwierczy. Jedyne czego jeszcze brakuje to funkcji  (set_slot_troop, player$_nos,[(player_has_item, "itm_zapach_palonego_miesa"), 0] :)))




Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: MadGuarang w Stycznia 15, 2016, 08:29:59
Mam nadzieję, że nie zaśmiecam wątku. W kontekście rozmowy o zmiennych mam pytanie.

Otóż w modzie, który zaczynam konstruować wymyśliłem "Doomsday Clock" - (nazwa zerżnięta ze "Strażników", ale idealnie oddaje intencję). Miałaby być to zmienna, która wpływałaby na niemal każdy aspekt gry: poczynając od ilości spawnów różnej maści minor parties, przez ich liczebność, ilość rekrutów w  wioskach, pojemność armii lordów - ogólnie rzecz biorąc zwiększałaby trudność gry. Niezależnie od tego chciałbym, żeby upływający czas również (np. co tydzień) dodawał jakąś wartość. Z drugiej strony wiele akcji gracza również ma mieć wpływ na DC, dobre i złe uczynki (np. kanibalizm) udział w ("dobrej" czy "złej" frakcji, mordowanie niewinnych albo pomaganie jelonkom, które zwichnęły nóżkę. Chiałbym za pomocą tej zmiennej móc dodawać, odejmować od innych zmiennych, no i oczywiście chciałbym też żeby można ją było wykorzystywać od mapy świata po sceny np. w tawernie. No i najważniejsze, chciałbym żeby się zapisywała w save.

Ogarnąłem już ze 45 z 87 stron pytań i odpowiedzi na tym forum, oraz czytałem co się dało na TW forum, ale wolałbym w tym wypadku skorzystać z Waszego doświadczenia, bo wiadomo nie chciałbym żeby w połowie roboty odkryć, że nie mogę zrobić, czegoś z wymienionych akcji, bo wybrałem zła zmienną itd.

Dzięki z góry za odpowiedź.
Tytuł: [OSP] Wydarzenie losowe - atak bandytów na wioskę
Wiadomość wysłana przez: Garedyr w Kwietnia 03, 2017, 19:37:42
Witam, dawno mnie tu nie było :D

W ostatnim czasie zacząłem znowu trochę dłubać w MS. Postanowiłem zająć się pierdołami, które mogłyby urozmaicić trochę tę grę.
Przedstawiam wam mój pierwszy skrypt z serii - 'Wydarzenia losowe' - atak bandytów na wioskę.

Zacznijmy od tego jak owy skrypt działa.

(click to show/hide)


Jak dodać skrypt do gry:

Zaczynamy od module_scripts:

W skrypcie game_start (pierwszy skrypt w pliku) znajdź tę linijkę
(click to show/hide)
i wklej pod nią ten kod:

(click to show/hide)


Teraz pora na module constants.
Znajdź tę linijkę
(click to show/hide)
i wklej pod nią tę:

(click to show/hide)


Teraz module_mission_templates.

Na górze pliku powinny najdować się importy z innych plików (na pewno je rozpoznasz).
Dodaj pod nimi nowy import:

(click to show/hide)

Następnie nadal w tym samym pliku wyszukaj "village_center" i odnajdź ten kod:

(click to show/hide)

Zamień go na ten:

(click to show/hide)

Teraz najważniejsza część skryptu. Nadal w pliku mission_templates, pod triggerem który wkleiłeś przed chwilą w miejsce starego wklej ten:

(click to show/hide)

Teraz w module_game_menus, na końcu pliku (lecz przed ostatnim nawiasem kwadratowym) wklej to:

(click to show/hide)

Ostatnim krokiem będzie dodanie tego triggera do module_simple_triggers (przed ostatnim nawiasem kwadratowym, tak jak robiliśmy to w module_game_menus):

(click to show/hide)


No i to by było na tyle. Piszcie swoje pomysły jakie jeszcze wydarzenia losowe byście chcieli, rozważę wasze propozycje.
Wszelkie zauważone błędy, niedopatrzenia i sugestie należy zgłaszać w tym temacie.
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Bruce Campbell w Kwietnia 03, 2017, 19:47:43
Kiedy możemy się spodziewać zaktualizowanego skryptu na bank (przynajmniej na TW, bo tutaj go chyba w ogóle nie ma)?
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Kwietnia 03, 2017, 19:49:03
Kiedy możemy się spodziewać zaktualizowanego skryptu na bank (przynajmniej na TW, bo tutaj go chyba w ogóle nie ma)?

Polska wersja jest właściwie już dawno ukończona, więc jak nie zapomnę, to na dniach powinna wlecieć :D
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Kwietnia 06, 2017, 18:34:12
Garedyr/Masterancza's Bank Kit (Reforged edition)


No, miał być, to jest. Wyrafinowany skrypt dodający do gry banki.
Wystarczy porozmawiać z mistrzem gildii w dowolnym mieście, on wszystko nam wytłumaczy po wybraniu opcji dialogowej "Chciałbym/Chciałabym porozmawiać o banku.".

Ponieważ uważam opcję pożyczki za zbyt łatwą drogę do bogactwa i nie potrafię wymyślić odpowiednich konsekwencji dla gracza po niespłaceniu jej, w obecnej wersji zabrakło tej opcji.
Jeśli jednak masz jakiś dobry pomysł i pragniesz się nim podzielić, to zapraszam. Jestem otwarty na sugestie.

No, to teraz niestety musimy przejść do instalacji owego skryptu.
Zaczynamy od module_dialogs. Kiedy tylko odpalisz plik, powinna ukazać ci się ta linijka:
(click to show/hide)

Pod nią wciśnij wklej ten kod:

(click to show/hide)


Teraz kolej na module_scripts. W skrypcie game_start (pierwszy skrypt w pliku) odnajdź tę linijkę:

(click to show/hide)

Pod nią wklej ten kod:

(click to show/hide)

Teraz w module triggers na końcu pliku (przed ostatnim "]") wklej to:

(click to show/hide)


W module_constants pod tą linijką
(click to show/hide)
wklej tę:

(click to show/hide)


Ostatnim krokiem będzie dodanie tego kodu w module_simple_triggers, identycznie jak robiliśmy to w przypadku module_triggers:

(click to show/hide)


Zaktualizowałem pierwszy post. Zawiera on teraz odnośniki do wszystkich skryptów znajdujących się w tym temacie.
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Kradus w Kwietnia 06, 2017, 18:57:49
Widzę, że ten temat jest nie tylko do publikacji Twoich materiałów ale również luźnych dywagacji, także piszę tutaj.

Ponieważ uważam opcję pożyczki za zbyt łatwą drogę do bogactwa i nie potrafię wymyślić odpowiednich konsekwencji dla gracza po niespłaceniu jej, w obecnej wersji zabrakło tej opcji.
Jeśli jednak masz jakiś dobry pomysł i pragniesz się nim podzielić, to zapraszam. Jestem otwarty na sugestie.

Nie wiem jak to jest możliwe do wykonania ze strony praktycznej (możliwości silnika), ale może wykonaj kilka "faz odzyskiwania wierzytelności".

Załóżmy w pierwszej, już po kilku tygodniach "zwłoki z oddaniem długu", podbija do nas smutny Pan (np kilkunastoosobowy oddział, z dużym speedem tak, że nas zawsze dogoni), który żąda takowego zwrotu - każe Ci jechać do miasta X [w którym były pożyczone pieniądze] i oddać należność wraz z odsetkami. Masz do wyboru albo "zgłoszenie chęci udania się do miasta", albo "spuszczenie wpierniczu smutnemu Panu", po czym następuje walka z jego oddziałem [tylko trochę dziwne by było, gdyby to miało charakter normalnej bitwy - no bo co, wszyscy rozeszli by się w pokoju i honorowo ustawili na polu po czym dali znak do gotowości do walki, wtf?], np w zrobionej scence obozu czy innego miejsca postoju Twoich wojsk.

Przy czym w zależności od wyboru w/w drogi [i w sumie wyniku ewentualnej walki], następuje kolejna faza [przy pierwszym wyborze po tygodniu, dwóch - przy drugim po kilku dniach, gdyż jego kumple skapnęli się, że "smutny Pan" nie wrócił do miasta], gdzie przybywa do nas już dużo liczniejszy oddział, i tutaj walka będzie miała miejsce na normalnych warunkach bitwy. Przy czym oczywiście można ustalić zasięg działania takich "Panów do odzyskiwania wierzytelności", tylko w określonej okolicy konkretnego miasta.

Jednocześnie, załóżmy, można ustalić tego Pana bankiera jako NPC i przy spłatach długów rosną z Nim stosunki, które pozwalają na kolejne kredyty na lepszych warunkach, a ujemne nie pozwalają na takie kroki. Ew "połączyć" Pana bankiera (który za pewne ma duże wpływy w mieści) ze szlachcicem władającym miastem, bądź samym miastem [w m&b w osobie mistrza gildii, co za pewne wiesz] i wtedy bylibyśmy "spaleni" w danym mieście, bądź nielubiani po prostu przez tego szlachcica.

No i można tutaj dać trzecią fazę "niespłacania długu", który zmuszałby owego szlachcica władającego miastem do ścigania nas [również w jakimś sensownym obszarze, nie całej Calradii] i wydania nam bitwy.

Szczerze mówiąc, tak bym to widział, by było w miarę zgodne z ówczesnymi realiami :)
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Garedyr w Kwietnia 06, 2017, 19:08:40
Widzę, że ten temat jest nie tylko do publikacji Twoich materiałów ale również luźnych dywagacji, także piszę tutaj.

Nie wiem jak to jest możliwe do wykonania ze strony praktycznej (możliwości silnika), ale może wykonaj kilka "faz odzyskiwania wierzytelności".

Załóżmy w pierwszej, już po kilku tygodniach "zwłoki z oddaniem długu", podbija do nas smutny Pan (np kilkunastoosobowy oddział, z dużym speedem tak, że nas zawsze dogoni), który żąda takowego zwrotu - każe Ci jechać do miasta X [w którym były pożyczone pieniądze] i oddać należność wraz z odsetkami. Masz do wyboru albo "zgłoszenie chęci udania się do miasta", albo "spuszczenie wpierniczu smutnemu Panu", po czym następuje walka z jego oddziałem [tylko trochę dziwne by było, gdyby to miało charakter normalnej bitwy - no bo co, wszyscy rozeszli by się w pokoju i honorowo ustawili na polu po czym dali znak do gotowości do walki, wtf?], np w zrobionej scence obozu czy innego miejsca postoju Twoich wojsk.

Przy czym w zależności od wyboru w/w drogi [i w sumie wyniku ewentualnej walki], następuje kolejna faza [przy pierwszym wyborze po tygodniu, dwóch - przy drugim po kilku dniach, gdyż jego kumple skapnęli się, że "smutny Pan" nie wrócił do miasta], gdzie przybywa do nas już dużo liczniejszy oddział, i tutaj walka będzie miała miejsce na normalnych warunkach bitwy. Przy czym oczywiście można ustalić zasięg działania takich "Panów do odzyskiwania wierzytelności", tylko w określonej okolicy konkretnego miasta.

Jednocześnie, załóżmy, można ustalić tego Pana bankiera jako NPC i przy spłatach długów rosną z Nim stosunki, które pozwalają na kolejne kredyty na lepszych warunkach, a ujemne nie pozwalają na takie kroki. Ew "połączyć" Pana bankiera (który za pewne ma duże wpływy w mieści) ze szlachcicem władającym miastem, bądź samym miastem [w m&b w osobie mistrza gildii, co za pewne wiesz] i wtedy bylibyśmy "spaleni" w danym mieście, bądź nielubiani po prostu przez tego szlachcica.

No i można tutaj dać trzecią fazę "niespłacania długu", który zmuszałby owego szlachcica władającego miastem do ścigania nas [również w jakimś sensownym obszarze, nie całej Calradii] i wydania nam bitwy.

Szczerze mówiąc, tak bym to widział, by było w miarę zgodne z ówczesnymi realiami :)

Dziękuję za opinię. Z pewnością wezmę ją pod uwagę podczas dodawania nowych opcji do skryptu.
Miej jednak na uwadze pewną rzecz - nie ma 'konkretnego miasta'. Jest to sieć bankowa działająca na terenie całej Calradii. Jeśli jednak tawerniani bywalcy uznają, że każde miasto powinno posiadać skarbiec bankowy oddzielny od pozostałych, to oczywiście sprawię, iż będą usatysfakcjonowani.

Co do bycia spalonym w danym mieście - co konkretnie przez to rozumiesz? Duży spadek relacji z miastem (np -20) nie byłby wystarczającą 'karą'.
Tytuł: Odp: [OSP] Skrypty by Garedyr
Wiadomość wysłana przez: Kradus w Kwietnia 06, 2017, 19:22:31
Dziękuję za opinię. Z pewnością wezmę ją pod uwagę podczas dodawania nowych opcji do skryptu.
Miej jednak na uwadze pewną rzecz - nie ma 'konkretnego miasta'. Jest to sieć bankowa działająca na terenie całej Calradii. Jeśli jednak tawerniani bywalcy uznają, że każde miasto powinno posiadać skarbiec bankowy oddzielny od pozostałych, to oczywiście sprawię, iż będą usatysfakcjonowani.

Co do bycia spalonym w danym mieście - co konkretnie przez to rozumiesz? Duży spadek relacji z miastem (np -20) nie byłby wystarczającą 'karą'.

Tzn wydaje mi się, że bardziej realistyczne jest danie każdemu miastu innego bankiera... Ew. zrobienie kondominium (spółki) kilku miast, załóżmy wg konkretnej frakcji władającej konkretnym miastem - tylko wtedy należy sobie zadać pytanie, czy bankierzy przechodzą nowi przy zmianie właściciela, czy po prostu "składają hołd" nowemu i zostają na miejscu (wg mnie druga opcja właściwsza, a przy tym robiąca mniej problemów w skryptach jak mniemam). Po prostu słabo widzę jeden wspólny bank Calradii, no bo to byłby trochę kiepski rynek i zarobek dla takich bankierów, kiedy wszyscy pracują "wspólnie" ;)

A co do "bycia spalonym" - np zakaz wjazdu do miasta (jedyną opcją próba przebrania w mnisze ciuszki, jak przy okresie wojny z frakcją władającą miastem), bądź zmienienie skryptu nocnego ataku bandytów w mieście, na atak wynajętych przez bankiera oprychów (najemników) - którzy powinni być stosunkowo dobrze wyekwipowani i posiadać duże lvl, żeby odpowiadało to "powadze sytuacji". No i oczywiście z dużym procentem występowania przy wejściu do lokacji/wyjściu z konkretnego budynku w mieście i możliwością bycia zaatakowanym w dzień (w sensie jakie zmiany względem skryptu nocnego ataku bandytów). I załóżmy wtedy nie byłoby "na mieście" strażników, gdyż byliby opłaceni przez bankiera i "udawali że ich nie ma", bądź pomagaliby tym najemnikom. Wtedy przy przegranej tracilibyśmy sporo gotówki, bądź może nawet część z ekwipunku którą byśmy mogli (najlepiej bezterminowo) odkupić u owego bankiera, za oczywiście sporą gotówką.