Forum Tawerny Four Ways
Mount&Blade - Modyfikacje => Modding => Poradniki i tutoriale => Wątek zaczęty przez: Kolba w Sierpnia 15, 2007, 15:08:39
-
Tutorial by Manitas
"Skrypt jest to ciąg operacji rozdzielonych przecinkami, wykonywanych po kolei.
Kazda operacja wyglada nastepujaco:
(nazwa_operacji, argument1, arg2, arg3)
Przy czym kazda operacja ma wlasciwa dla niej liczbe adgumentow, od 0 do 3.
Wszystkie dostepne operacje mozna obejrzec w pliku header_operations.py
Na szczescie w wiekszosci wypadkow z nazwy operacji mozna wywnioskowac co dana operacja robi.
przykład:
(troop_add_gold, "trp_player", 100)
i stówka ląduje w kieszeni naszego bohatera.
Jako argumenty operacji mozna podawac liczby calkowite, lub zmienne.
Glupio mi pisac o zmiennych, ale napisze na wszelki wypadek gdyby ktos nie wiedzial.
Otoz zmienna jest jakby pojemnikiem ktory jest opatrzony nazwą, ktory moze przechowywac jakąs wartosc liczbową.
Są 2 głowne rodzaje zmiennych:
- zwykłe, np "$nazwa_zmiennej" (cudzyslowy i znak $ sa obowiazkowe)
- rejestry, np reg(numer), gdzie numer moze przybierac wartosci od 0 do 40.
Roznia sie one tym, ze jezeli ustawimy wartosc zmiennej zwyklej w jednym skrypcie, mozemy miec pewnosc ze jej wartosc bedzie taka sama w innym, co do rejestrow takiej pewnosci miec nie mozna.
Przy okazji zmiennych trzeba wymienic operacje assign, ktora przypisuje wartosc zmiennej.
Przyklad:
(assign, "$ile_kasy", 100),
(val_add, "$ile_kasy, 1),
(troop_add_gold, "trp_player", "$ile_kasy"),
Tym razem w kieszeni naszego hero wyląduje 101 dukatów.
Rodzaje operacji.
1. Jeden rodzaj juz poznalismy - troop_add_gold jest to tzw. konsekwencja, czyli operacja ktora zmienia stan rzeczy w grze (w tym wypadku stan posiadania bohatera).
2. Zapytania - operacje ktore nie zmieniaja stanu rzeczy w grze ale pozwalaja uzyskac pewne informacje np:
Założmy że nasz hero ma przy sobie 101 dukatów.
operacja (store_troop_gold, "$ile_on_ma", "trp_player") spowoduje ze od tej chwili w zmiennej "$ile_on_ma" pojawi sie wartosc 101. Jakakolwiek wartosc ktora mogla tam byc przed wykonaniem operacji zostanie stracona.
3. Warunki np:
eq - equal - równy
gt - greater than - wiekszy
lt - less than - mniejszy
ge - greater or equal - wiekszy lub rowny
le - zgadnijcie
(main_hero_fallen) - sprawdza czy hero poległ w boju
Warunki dzialaja w ten sposob, ze jezeli ktorys z nich jest falszywy dzialanie skryptu zostaje przerwane.
przyklad:
Zalozmy ze nasz hero ma 100 gold
(store_troop_gold, "$ile_on_ma", "trp_player"),
(gt, "$ile_on_ma", 100),
(troop_deduce_gold, "trp_player", 100),
Ostatnia operacja zabiera graczowi 100 gold.
Na szczescie w tym przypadku sie nie wykona, gdyz warunek (100 > 100) jest rzecz jasna falszywy i skrypt zakonczy dzialanie zaraz po operacji 'gt'.
4. Operacje grupujace
Sa to operacje blokowe. Blok zaczynaja sie od jednej z operacji (try_...) a konczy operacją (end_try)
Najprostszą operacja tego typu jest (try_begin). Sluzy ona do wydzielenia ciagu operacji w skrypcie, glownie do stosowania z operacjami warunkowymi.
przyklad:
Kod:
(try_begin),
(store_troop_gold, "$ile_on_ma", "trp_player"),
(gt, "$ile_on_ma", 100),
(troop_deduce_gold, "trp_player", 100),
(end_try),
(jakas_inna_operacja),W tym przypadku, jezeli warunek gt bedzie falszywy, nie spowoduje to zakonczenia dzialania calego skryptu, ale tylko jego czesci znajdujacej sie w bloku (try. Czyli w tym przykladzie operacja troop_deduce_gold sie nie wykona, ale jakas_inna_operacja zostanie wykonana bez przeszkod. Dla wtajemniczonych, dzialanie tej konstrukcji jest podobne do bloku 'if' z normalnych językow.
Kod:
(try_begin),
(store_troop_gold, "$ile_on_ma", "trp_player"),
(gt, "$ile_on_ma", 100),
(troop_deduce_gold, "trp_player", 100),
(else_try),
(jakas_inna_operacja),
(end_try),przyklad podobny, z tym ze dodatkowo zawiera operacje (else_try). W tym przypadku jakas_inna_operacja wykona sie tylko wtedy jezeli warunek gt jest falszywy. W przeciwnym wypadku wykona sie tylko deduce_gold.
Pozostale operacje grupujace to:
(try_for_range, "$zmienna", start, end) operacje zamkniete w takim bloku wykonaja sie start - end + 1 razy, za kazdym razem zmieniajac zawartosc zmiennej "$zmienna" od wartosci start do end co 1.
(try_for_agents, "$numer_agenta") - agent jest to kazda istota ozywiona ktora moze pojawic sie w bitwie, czyli agentem jest player, agentami sa jego zolnierze, wrogowie i konie.
Operacje zamkniete w takim bloku wykonaja sie tyle razy ile agentow jest obecnych na placu boju, za kazdym razem podstawiajac pod zmienna "$numer_agenta" numer kolejnego agenta na polu bitwy"
-
Wiem że teraz znoobie ale gdzie sie skrypty wkleja ??
-
MS - MODULE SYSTEM.
-
MS - MODULE SYSTEM.
Co ty nie powiesz ale w JAKIM PLIKU ??
W różnych, w zależności od skryptu. Wystarczy pokombinować.
EDIT: Ten skrypt
("exp",[],"Exp...",
[(add_xp_to_troop, 1000000, "trp_player"),
]),
-
MS - MODULE SYSTEM.
Co ty nie powiesz ale w JAKIM PLIKU ??
W różnych, w zależności od skryptu. Wystarczy pokombinować.
EDIT: Ten skrypt
("exp",[],"Exp...",
[(add_xp_to_troop, 1000000, "trp_player"),
]),
Ten akurat w module_game_menus w "menu" village. Ponieważ chciałeś, aby ta opcja była w każdej wiosce...
@DOWN: Pogrzeb w tym pliku i sam dojdź gdzie to wkleić... Nikt za Ciebie nie będzie wszystkiego robił.
-
To może jakiś mini tutorial :) Ja jestem amatorem :)
MS - MODULE SYSTEM.
Co ty nie powiesz ale w JAKIM PLIKU ??
W różnych, w zależności od skryptu. Wystarczy pokombinować.
EDIT: Ten skrypt
("exp",[],"Exp...",
[(add_xp_to_troop, 1000000, "trp_player"),
]),
Ten akurat w module_game_menus w "menu" village. Ponieważ chciałeś, aby ta opcja była w każdej wiosce...
Bo to mi bardzo dużo pomogło :)(sarkazm)
-
To potrzebujesz tutoriala czy tego, zeby ktos cie za reke prowadzil? Koledzy pokazali sposob, napisali gdzie i jak to wprowadzic. Czego jeszcze chcesz? Troche samodzielnego myslenia nie zaszkodzi...
-
Spoko już mam wszystko na 63 i po 10 skill - Nie można mieć więcej ?
-
Panowie skrypterzy, a jak np wysłać po przegranej bitwie naszego herosa do lochu?
Mam skrypt, w którym toczymy jakąś tam walkę. Po wygraniu tej walki pokazuje się komunikat z wygraną nagrodą, itd. Tu wszystko gra. A jak wysłać naszego dzielnego herosa do lochu, np Sarranidów po przegranej walce? Jest tego trochę w module_mission_templates, ale potrzebuję tylko fragmentu samego wysyłania do lochów, a nie mam pojęcia jak to ugryźć. Coś na wzór send_hero_to_prison (fac_faction_6) :P Nasz hero po wysłaniu odsiedzi jakąś tam karę z losową szansą na ucieczkę. Jego żołnierze przepadają.
Wie ktoś jak rozwiązać mój problem?
Jeśli komuś przyda się kod to http://www.wklej.org/id/341953/
-
Chciałbym sam przydzielać który lord ma mieć jaki banner.
Znalazłem ten skrypt w module_scripts
#normal_banner_begin
(gt, ":banner", 0),
#custom_banner_begin
# (ge, ":banner", 0),
(assign, ":comment", "str_comment_intro_noble_liege"),
(val_add, ":comment", ":reputation"),
(else_try),
(assign, ":comment", "str_comment_intro_common_liege"),
(val_add, ":comment", ":reputation"),
(try_end),
Czy to tu trzeba zmienić jakoś lub rozbudować czy gdzie indziej.
Tak czy inaczej proszę o pomoc.
-
Spróbuj dodać takie coś w skrypcie game_start
(troop_set_slot, "trp_", slot_troop_banner_scene_prop, "spr_"),
Tam gdzie "trp_" to id lorda, a tam gdzie "spr_" scene prop banneru, np. spr_banner_a (id scene propu możesz zobaczyć w edit mode)
-
Wielkie dzięki.
Czy wie ktoś jak zrobić, że gdy podczas bitwy bohater omdleje nasi ludzie dalej walczyli?
Edit:A można by zrobić ze gdy lord A ma banner B i gdy bohater na początku gry wybierze banner B żeby lordowi A nie zmieniał się banner na jakiś inny? Oczywiście z tym skryptem
(troop_set_slot, "trp_", slot_troop_banner_scene_prop, "spr_"),
-
Da się, ale musisz ingerować w kod "prezentacji" wybierania banneru.
W prezentacji banner_selection "zakomentuj" (wstaw przed linijką znak #) to:
(troop_set_slot, ":cur_troop", slot_troop_banner_scene_prop, banner_scene_props_end_minus_one),
i to:
(party_set_banner_icon, ":cur_party", banner_map_icons_end_minus_one),
Powinno pomóc.
-
Niestety nie działa.
Znalazłem takie coś w Europe 1200:
("assign_banners",
[
(try_for_range, ":center_no", walled_centers_begin, walled_centers_end),
(try_begin),
(party_get_slot, ":lord_troop_id", ":center_no", slot_town_lord),
(troop_get_slot, ":cur_banner", ":lord_troop_id", slot_troop_banner_scene_prop),
(gt, ":cur_banner", 0),
(val_sub, ":cur_banner", banner_scene_props_begin),
(val_add, ":cur_banner", banner_map_icons_begin),
(party_set_banner_icon, ":center_no", ":cur_banner"),
(try_end),
(try_end),]),
Kurde, sam bym chciał umieć tworzyć skrypty ale dla mnie to czarna magia,jednak staram się nie poddawać.
Jak na razie moje skrypty = kompletna porażka.
-
A można by zrobić ze gdy lord A ma banner B i gdy bohater na początku gry wybierze banner B żeby lordowi A nie zmieniał się banner na jakiś inny?
W prezentacji "banner_selection" wykomentuj ten fragment:
(assign, ":end_cond", kingdom_heroes_end),
(try_for_range, ":cur_troop", kingdom_heroes_begin, ":end_cond"),
(troop_slot_eq, ":cur_troop", slot_troop_banner_scene_prop, ":selected_banner_spr"),
(assign, ":troop_to_change", ":cur_troop"),
(assign, ":end_cond", 0),
(troop_set_slot, ":cur_troop", slot_troop_banner_scene_prop, banner_scene_props_end_minus_one),
(troop_get_slot, ":cur_party", ":cur_troop", slot_troop_leaded_party),
(gt, ":cur_party", 0),
(party_set_banner_icon, ":cur_party", banner_map_icons_end_minus_one),
(try_end),
-
Wielkie dzięki Daedalus.
Na razie próbuje swoich sił tworząc własnego mini-moda zmieniającego państwo Nordów a później przerabianiem wszystkich frakcji.
Na razie na użytek własny.
PS. Wole na razie nie straszyć ludzi moimi zmianami
-
Witam!
Możliwe, że piszę w niewłaściwym miejscu, ale nie mam pojęcia gdzie indziej to wpisać XD
Otóż jestem początkującym modderem i mam pytanie- gdzie i w jaki sposób muszę wpisać polecenie by drzwi w Warbandzie otwierały się po naciśnięciu F??
Prosibym o szybką odpowiedź.
-
Witam! W niektórych krajach archeologia jest karana śmiercią! Proponowałbym poszukać, ewentualnie założyć nowy wątek w dziale modding. Pozdrawiam!