Forum Tawerny Four Ways

Mount&Blade - Modyfikacje => Modding => Wątek zaczęty przez: Dravic w Października 29, 2010, 16:53:32

Tytuł: Jak mogę dodać nowy budynek w wiosce, zamku czy mieście?
Wiadomość wysłana przez: Dravic w Października 29, 2010, 16:53:32
Witam, naszła mnie dzisiaj chęć na proste modyfikowanie gry. Moje pytanie brzmi:

Jak wykonać nowy budynek do wybudowania w wiosce.

Chciałbym pododawać budynki, które działałyby jak:
- młyn, ale nazywałyby się np. "Kanały irygacyjne", "Kuźnia", "Pchli targ", "Stajnie", "Browar"
- szkoła, ale nazywałyby się np. "Brukowane drogi", "Burdel", "Szpital", "Tawerna (nie musi dać się jej odwiedzać, to chyba za trudne)" (tutaj, jeśli tak się da, zmieniłbym wartości, które dają budynki z 1pkt relacji, na 1/4, jeśli tak się da. jeśli nie, trudno - 4-5 pktów relacji miesięcznie :P)
- Strażnica, ale nazywałyby się np. "Palisada", "Drewniana brama" (tutaj , musiałbym pozmieniać wszystkie wartości tych budynków na mniejsze, np. z 50% na 25%, albo nawet 20% - inaczej dałoby się przedłużyć czas plądrowania wioski o 150%, co jest przesadą)

Proszę o pomoc!

PS Całość bardzo chciałbym wprowadzić do już gotowego moda Diplomacy (takie osobiste usprawnienie)...
Tytuł: Odp: Jak mogę dodać nowy budynek w wiosce, zamku czy mieście?
Wiadomość wysłana przez: Leinnan w Listopada 01, 2010, 09:50:42
Spróbuję ci pomóc:
1. Otwieramy module_constans i wyszukujemy
Cytuj
slot_center_has_manor            = 130 #village
2. Pod "slot_center_has_prisoner_tower" piszemy np. slot_center_has_pchli_targ
3.Otwieramy module_game_menus i wyszukujemy
Cytuj
      ("center_build_watch_tower",[(eq, reg6, 0),
                                   (party_slot_eq, "$g_encountered_party", slot_party_type, spt_village),
                                   (party_slot_eq, "$g_encountered_party", slot_center_has_watch_tower, 0),
                                  ],
       "Build a watch tower.",[(assign, "$g_improvement_type", slot_center_has_watch_tower),
                               (jump_to_menu, "mnu_center_improve"),]),

4. Kopiujesz to i wklejasz pod
Cytuj
       "Build a prisoner tower.",[(assign, "$g_improvement_type", slot_center_has_prisoner_tower),
                                  (jump_to_menu, "mnu_center_improve"),]),
i edytujesz zaznaczone elementy menu. Watch_tower to wiesz dlaczego, spt_village określala gdzie można to wybudować.

5. W module_scripts wyszukajemy, kopiujemy, wklejamy pod tym i edytujemy zaznaczone elementy(cyfra to koszt wybudowania)
Cytuj
     (else_try),
       (eq, ":improvement_no", slot_center_has_prisoner_tower),
       (str_store_string, s0, "@Prison Tower"),
       (str_store_string, s1, "@A prison tower reduces the chance of captives held here running away successfully."),
       (assign, reg0, 7000),
.

6. Tylko nie wiem gdzie dodawać efekty budowania takie jak np. +2 do relacji z miastem,wioską co miesiąc.

Jak są jakieś błędy to pisać
Tytuł: Odp: Jak mogę dodać nowy budynek w wiosce, zamku czy mieście?
Wiadomość wysłana przez: Dravic w Listopada 01, 2010, 10:23:42
Dzięki za dobre chęci, tylko że ja już do tego sam doszedłem już wczoraj :)

Ale w ramach wzajemnej pomocy, jeśli ty też chciałbyś to zrobić, ja doszedłem do tego, jak zrobić konkretny efekt (w tym wypadku taki sam, jak w szkole, ale nasz budynek nazwiemy ambitnie: bordello)

Po pierwsze: w module_constans.py pod innymi budynkami (co już zauważyłeś) dodajemy wpis:

Cytuj
slot_center_has_bordello         = 801 #village
- gdzie liczba musi być duża, byśmy mogli łatwo sobie wyszukac później wpis w razie chęci usunięcia budynku.

Po drugie: w module_game_menus.py musimy dodać wpis, dzięki któremu budynek będzie się dało wybudować (tutaj zauważ, że skopiowałem dokładnie blok szkoły, a jedynie pozmieniałem wszystkie "school" (tutaj w sumie 4) na "bordello"

Cytuj
     ("center_build_bordello",[(eq, reg6, 0),
                              (party_slot_eq, "$g_encountered_party", slot_party_type, spt_village),
                              (party_slot_eq, "$g_encountered_party", slot_center_has_bordello, 0),
                                  ],
       "Build a bordello.",[(assign, "$g_improvement_type", slot_center_has_bordello),
                          (jump_to_menu, "mnu_center_improve"),]),

Po trzecie: w module_scripts.py musimy dodać opis, jaki będzie się wyświetlał przy kliknięciu w menu usprawnien (nawiasem ^^ mówiąc trochę podrasowałem te opisy, bo są nudne) - czyli kopiujemy szkołę, zmieniamy "school" na bordello i ewentualnie zmieniamy opis budynku

Cytuj
(else_try),
       (eq, ":improvement_no", slot_center_has_bordello),
       (str_store_string, s0, "@Bordello"),
       (str_store_string, s1, "@A bordello increases the loyality of the villagers to you by +1 every 4 weeks, because every man need a while of relax, and you gave them the best girls."),
       (assign, reg0, 9000),

Teraz uważaj: tego nie wiedziałeś. W module_simple_triggers.py znajdź pod hasłem "school" lub "has_school" blok zaczynający się na "try_for_range". Widzisz to działanie nad blokiem, 30 x 24? Ono oblicza, co ile dni dostajesz z calego triggersa +1 relacji, gdzie 30 to liczba dni a 24 to liczba godzin (w tym wypadku doba).
A więc nie kopiujesz liczby, nie zaznaczasz też pierwszego "[", zaczynasz od nawiasu przed try_for range, o tak:
Cytuj
(try_for_range, ":cur_village", villages_begin, villages_end),
      (party_slot_eq, ":cur_village", slot_town_lord, "trp_player"),
      (party_slot_eq, ":cur_village", slot_center_has_school, 1),
      (party_get_slot, ":cur_relation", ":cur_village", slot_center_player_relation),
      (val_add, ":cur_relation", 1),
      (val_min, ":cur_relation", 100),
      (party_set_slot, ":cur_village", slot_center_player_relation, ":cur_relation"),
    (try_end),
Kończąc na skopiowaniu przecinka po "try_end".

Co wazne: Wklej to centralnie po try_end, ale przed ]),
i zmień "slot_center_has_school, 1"  na  "slot_center_has_bordello, 1".

Własnie dodałeś budynek: bordello, w pełni działający, jesli nie zrobiłeś żadnego błędu. Doszedłem do tego wpisując w wyszukiwarce w notepadzie++ "school" --> szukaj we wszystkich otwartych plikach :)

Tytuł: Odp: Jak mogę dodać nowy budynek w wiosce, zamku czy mieście?
Wiadomość wysłana przez: akosmo w Maja 24, 2011, 00:57:32
trzeba jeszcze w module_constants zmienić  improvements np:
jak ostatni budynek jest
slot_center_has_burdello = 136 to w village_improvements_end = wpisać 136
Dla wiosek:

przykład:
slot_center_has_messenger_post = 134
slot_center_has_prisoner_tower = 135
slot_center_has_burdello = 136 (nowy budynek, wpis - 136)

village_improvements_begin = slot_center_has_manor (od którego budynku mają zacząć się ulepszenia)
village_improvements_end = 136 (było 135)

Dzięki temu po wybudowaniu ulepszenia burdello w wsi, będzie pisać w ulepszeniach że jest już wybudowane.

Dla miast i zamków jest podobnie, tylko trzeba zmienić wartość 135 w walled_center_improvements_end.
Ja taką metodą dodałem kilka ulepszeń jak zakon templariuszy, klasztor, akademia wojskowa, dom medyka, teatr i kilka innych i po ich wybudowaniu, są dostępne w wiadomościach ulepszeń.