Najnowsze newsy ze świata Mount&Blade: ( Dodaj własny news )

Bannerlord: Fizyka broni - część 2. (Dev Blog 16/11/17)

16.11.2017 | Dodał: Eltarek

Właśnie ukazał się kolejny cotygodniowy blog dewelopera! Liczniki ustawiamy na 32, natomiast oczy zagłębiamy w tematyce dzisiejszego wpisu - fizyce (...) więcej

Ruszają nominacje do plebiscytów!

13.11.2017 | Dodał: Dyktator

Rusza pierwsza faza plebiscytów na gracza roku 2017! Potrwa ona do 25 listopada. więcej

Bannerlord: Khanat Khuzaicki - omówienie frakcji (Dev Blog 09/11/17)

10.11.2017 | Dodał: Hubtus

To już trzydziesty pierwszy Dev blog, w którym to twórcy opowiadają nam o swojej grze. Tym razem został on poświęcony kolejnej (...) więcej

Strona główna Mount&Blade | ukryj panel

Pokaż panel z newsami »

Polub nasz profil na facebooku! oraz dołącz do naszej Grupy STEAM

Autor Wątek: Official Module System - tłumaczenie  (Przeczytany 3324 razy)

Opis tematu:

0 użytkowników i 1 Gość przegląda ten wątek.

Offline pustelnik

  • Tułacz
  • *
  • Wiadomości: 13
  • Piwa: 0
Official Module System - tłumaczenie
« dnia: Czerwiec 20, 2011, 12:48:49 »
Witam, ostatnio próbuje trochę pod-szlifować swój język angielski a że trudno o jakiś kurs traktujący o moddingu M&B od podstaw postawiłem sobie za cel przetłumaczenie dokumentacji.
A przy okazji może coś się z tego komuś przyda. Uprzedzam że mogą wystąpić jakieś niedociągnięcia dlatego gdy coś wyłapiecie zgłoście to mi:)

Więc do rzeczy:
1.część dokumentacji:"Przygotowanie do moodingu" jest tutaj http://www.mountblade.info/forum/index.php?topic=497.0 napisana przez Mat berserker. Jeśli można to pozwolę ją sobie tutaj przytoczyć i zaktualizować zdjęcia.

Co to module system?
Mount & Blade Module system służy tworzeniu modów. Narzędzie te jest trudniejsze w obsłudze ale ma większe możliwości od EFFIDIAN'S UNOFFICIAL EDITOR http://mountblade.info/forum/index.php?topic=483.0 (który działa tylko w wersji 0.751).

Będziemy potrzebować:
-Official Module system www.taleworlds.com/mb_module_system.html
-Pytona do edycji plików i kompilacji http://www.python.org/download/
-Tego tutka (linku nie podaje;))

Zaczynamy:
Po instalacji pythona i rozpakowaniu Module System (będę go w dalszej części nazywał MS) musimy ustawić jeszcze jedną rzecz, aby wszystko działało:
1. wchodzimy w mój komputer, klikamy prawym przyciskiem myszy i wchodzimy w właściwości


2. Wchodzimy w zakładkę zaawansowane
3. Otwieramy Zmienne środowiskowe


4. Zaznaczamy zmienną path i naciskamy przycisk edytuj.

Potem w okienko, które sie otworzy wpisujemy naszą ścieżkę do pythona (domyślnie ";C:\Python25" tylko bez cudzysłowia)


OK możemy zacząć, modować...

2.Część dokumentacji:"edytowanie plików module system." http://forums.taleworlds.com/index.php?topic=11422.0

Jak było wspomniane w poprzednim rozdzialę, w pracy z Module system postępujesz następująco:
1)   Edytujesz jeden albo więcej plików module(które zaczynają się od „module_” i kończą „.py”) i tworzysz w nich dowolne zmiany(Czasem będziesz musiał kliknąć prawym przyciskiem myszy i wybrać „Edit with Idle” żeby można było edytować te pliki)
2)    Po dokonaniu zmian kliknij podwójnie na plik build_module.bat. Ta akcja spowoduje skompilowanie Twojego modułu do wskazanego w „module_info.py” folderu(i wyświetli raporty o błędach jeśli są jakieś)
3)   Jeśli nie ma żadnych błędów możesz uruchomić Mount&Blade i przetestować zrobione zmiany. Czasami musisz rozpocząć grę od nowa żeby móc zobaczyć nowo zrobione efekty.

2.1 – Edycja plików Module
Module system używa list/plików Python-a do reprezentacji  świata{tego co widać jak się włączy gotowego grę}przez obiekty gry{obiektem może być gracz, miasto, miecz, misja. Czyli coś co ma swoje odbicie w grze.} (Lista python-a zaczyna się od „[„ zawiera w sobie listę obiektów oddzielonych przecinkami i konczy „]”) Jeśli otworzysz i przejrzysz jakiś plik module zobaczysz że zawiera taką strukturę. Dla przykładu przejrzyj plik module_map_icons.py:

map_icons = [
  ("player",0,"player", 0.2, snd_footstep_grass),
  ("player_horseman",0,"player_horseman", 0.2, snd_gallop),
  ("gray_knight",0,"knight_a", 0.2, snd_gallop),
  ("vaegir_knight",0,"knight_b", 0.2, snd_gallop),
  ("peasant",0,"peasant_a", 0.2,snd_footstep_grass),
  ("khergit",0,"khergit_horseman", 0.2,snd_gallop),
  ("axeman",0,"bandit_a", 0.2,snd_footstep_grass),
  ("woman",0,"woman_a", 0.2,snd_footstep_grass),
  ("town",mcn_no_shadow,"City", 0.9,snd_footstep_grass),
]

Znajdująca się tam map_icons zdeklarowana jest jako lista Python i każdy element tej listy zdeklarowany jest jako konkretny obiekt. Dla przykładu, ("player",0,"player", 0.2, snd_footstep_grass)  jest przykładem obiektu.  Elementy obiektu oddzielone są przecinakami a zaczynają się i kończą okrągłymi nawiasami „(„ i „)”.  Struktura każdego obiektu jest udokumentowana na początku pliku module. Dla map Icons każdy obiekt składa się z:

1)nazwy ikony
2)ikony flagi
3) nazwy Mesh
4) skali Mesh
5) id dźwięku

Więc patrząc na pierwszy obiekt
("player",0,"player", 0.2, snd_footstep_grass)
możemy podzielić go na:
1)   Nazwa ikony =”player”
2)   Flaga ikony = 0
3)   Nazwa Mesh = “player”
4)   Skala Mesh = 0.2
5)   Id dźwięku = snd_footstep_grass

Możesz poćwiczyć schematy elementów obiektów gry w każdym z pliku module system w ten sposób że przeczytasz dokumentacje na początku i porównasz odpowiadające jej elementy w strukturze obiektów tego pliku module tak jak to jest ukazane w powyższym przykładzie.

2.2 – Dodawanie nowego obiektu gry
Znając strukturę obiektów map icon, możemy teraz zacząć dodawać nasze własne obiekty.  Spójrzmy jeszcze raz na listę:
map_icons = [
  ("player",0,"player", 0.2, snd_footstep_grass),
  ("player_horseman",0,"player_horseman", 0.2, snd_gallop),
  ("gray_knight",0,"knight_a", 0.2, snd_gallop),
  ("vaegir_knight",0,"knight_b", 0.2, snd_gallop),
  ("peasant",0,"peasant_a", 0.2,snd_footstep_grass),
  ("khergit",0,"khergit_horseman", 0.2,snd_gallop),
  ("axeman",0,"bandit_a", 0.2,snd_footstep_grass),
  ("woman",0,"woman_a", 0.2,snd_footstep_grass),
  ("town",mcn_no_shadow,"City", 0.9,snd_footstep_grass),
]

Nowy obiekt gry w jakim kol wiek pliku module musi być dodany do listy. Jak widzisz lista module_map_icon kończy się tuż za
 ("town",mcn_no_shadow,"City", 0.9,snd_footstep_grass),
 Żeby zrobić miejsce dla nowego obiektu musimy przesunąć klamrę kończącą listę „]” w dół o jedną linię.

Zrobienie tego da nam możliwość dodania nowego obiektu. Najprościej będzie to zrobić kopiując i wklejając  już istniejący obiekt. Dla przykładu:

map_icons = [
  ("player",0,"player", 0.2, snd_footstep_grass),
  ("player_horseman",0,"player_horseman", 0.2, snd_gallop),
  ("gray_knight",0,"knight_a", 0.2, snd_gallop),
  ("vaegir_knight",0,"knight_b", 0.2, snd_gallop),
  ("peasant",0,"peasant_a", 0.2,snd_footstep_grass),
  ("khergit",0,"khergit_horseman", 0.2,snd_gallop),
  ("axeman",0,"bandit_a", 0.2,snd_footstep_grass),
  ("woman",0,"woman_a", 0.2,snd_footstep_grass),
  ("town",mcn_no_shadow,"City", 0.9,snd_footstep_grass),
  ("new_icon",mcn_no_shadow,"City", 0.9,snd_footstep_grass),
]

W tym przykładzie skopiowaliśmy obiekt
("town",mcn_no_shadow,"City", 0.9,snd_footstep_grass), I daliśmy mu nową nazwę ikony “new_icon". Ta new icon ma flagę na sobie. Flagi są ustawialne, można je włączyć i wyłączyć wpisując albo usuwając  je w odpowiednim polu. Dla przykładu flaga mcn_no_shadow na Twojej nowej ikonie spowoduje że ikona nie będzie miała cienia na ziemi.

Teraz usuniemy mcn_no_shadow z naszej New icon i na to miejsce wpisujemy 0, mówiące module system że nie ma flagi na tej ikonie

map_icons = [
  ("player",0,"player", 0.2, snd_footstep_grass),
  ("player_horseman",0,"player_horseman", 0.2, snd_gallop),
  ("gray_knight",0,"knight_a", 0.2, snd_gallop),
  ("vaegir_knight",0,"knight_b", 0.2, snd_gallop),
  ("peasant",0,"peasant_a", 0.2,snd_footstep_grass),
  ("khergit",0,"khergit_horseman", 0.2,snd_gallop),
  ("axeman",0,"bandit_a", 0.2,snd_footstep_grass),
  ("woman",0,"woman_a", 0.2,snd_footstep_grass),
  ("town",mcn_no_shadow,"City", 0.9,snd_footstep_grass),
  ("new_icon",0,"City", 0.9,snd_footstep_grass),
]

Zarówno “town” jak I “new_icon” używa Mesh „City” które korzystają ze wspólnego modelu 3d o nazwie „City” w plików zasobów gry
Ponieważ icons używa tego samego Mesh-a to jeśli dodasz “new_icon” do gry w jakimś miejscu, to będzie wyglądać ono tak samo jak „Town”.

Teraz nadajmy „New_icon” trochę innego wyglądu:
map_icons = [
  ("player",0,"player", 0.2, snd_footstep_grass),
  ("player_horseman",0,"player_horseman", 0.2, snd_gallop),
  ("gray_knight",0,"knight_a", 0.2, snd_gallop),
  ("vaegir_knight",0,"knight_b", 0.2, snd_gallop),
  ("peasant",0,"peasant_a", 0.2,snd_footstep_grass),
  ("khergit",0,"khergit_horseman", 0.2,snd_gallop),
  ("axeman",0,"bandit_a", 0.2,snd_footstep_grass),
  ("woman",0,"woman_a", 0.2,snd_footstep_grass),
  ("town",mcn_no_shadow,"City", 0.9,snd_footstep_grass),
  ("new_icon",0,"City", 5.0,snd_footstep_grass),
]

W tym przykładzie zmieniliśmy skalę icon z 0.9 do 5.0. I w tym momencie icon będzie większa około 5 razy niż normalnie. To pozwoli nam wskazać nasz obiekt na tle obiektu „Town”
Następnie musimy utworzyć nowy blok kodu w module_parties.py żeby używać naszej nowej ikony. Do zrobnienia tego będziemy potrzebować odwołania tej ikony z module_paties.py

2.3 – Odwołania Obiektów Gry

Otwórz module_parties.py w twoim folderze module system.  Zobaczysz tam inną listę Pythona zaczynającą się od parties = [.
Jak widzisz struktura obiektów w module_parties.py różni się znaczenie od tej z module_icons. Odnosi się to do wielu – jeśli nie wszystkich – plików module.
Przykład kodu:
("zendar","Zendar",icon_town|pf_is_static|pf_always_visible|pf_hide_defenders, "zendar", pt_none, fac_neutral,0,ai_bhvr_hold,0,(2,46),[(trp_swadian_knight,6,0)]),
Ten obiekt znajduje się w miejscu miasta Zendar na mapie gry. Różne element struktury Zendar znajdują sie w odpowiednich polach, podobnie jak w module_icons.py

Podział pól obiektu:
1) Party-id: służy do odwoływania się to tego obiektu z innych plików
2)Party name:  Nazwa obiektu jaki pojawia się w grze. Może się różnić od nazwy party-id.
3)Party flags: Pierwsza falga, każdy obiekt musi posiadać ikone reprezentującą go w grze.
4)Menu: Te pole począwszy od wersji M&B 0.730 wyszło z użycia.
5)Party-template: ID z bloku kodu template do jakiej ten obiekt należy. Użyj pt_none jako wartości domyślnej.
6)Party action: Może to być dowolny wpis z module_factions.py.
7)Party personality: Zobacz plik header_parties.py dla wyjaśnienia znaczenia tej flagi.
8)Ai-behaviour: Jak AI będzie działało tym obiektem na mapie
9)AI-target party: Cel AI-behaviour`s
10) Initial coordinates: Startowe koordynaty na mapie przygody; X,Y.
11)List of troop stacks: Lista stosów żołnierzy, każdy stos zawiera 3 pola:
11.1) Troop-id. Może być tutaj dowolny żołnierz lub bohater z module_troops.py.
11.2)Number of troops In this stack;does not vary. Liczba wejściowa żołnierzy którzy będą znajdować się w mieście.
11.3)Member flags.Opcjonalnie: Użyj pmf_is_prisoner żeby zaznaczyć członków tej drużyny jako więźniów

Na przykładzie obiektu Zendar będzie to wyglądało tak:

("zendar","Zendar",icon_town|pf_is_static|pf_always_visible|pf_hide_defenders, "zendar", pt_none, fac_neutral,0,ai_bhvr_hold,0,(2,46),[(trp_swadian_knight,6,0)]),
1 ) Party-id = "zendar"
2 ) Party name = "Zendar"
3 ) Party flags = icon_town|pf_is_static|pf_always_visible|pf_hide_defenders
4 ) Menu = "zendar"
5 ) Party-template = pt_none
6 ) Party faction = fac_neutral
7 ) Party personality = 0
8 ) AI-behaviour = ai_bhvr_hold
9 ) AI-target party = 0
10 ) Initial coordinates = (2,46)
11 ) List of troop stacks:
 11.1 ) Troop-id = trp_swadian_knight
 11.2 ) Number of troops in this stack = 6
 11.3 ) Member flags = 0

Patrząc na 3 pole możemy zobaczyć że Zendar odnośi się do ikony “town” z module_icons.py, ponieważ dodaliśmy prefix icon_.
Ten prefix wskazuje systemowi do jakiego pliku module ma się odnieść . W celu odniesienia się do module_icons używamy “icon_”; w celu odniesienia się do module_factions używamy “fac_”; w celu odniesienia się do module_parties używamy “p_” itd. Każdy folder ma swój prefix – listę prefiksów możecie zobaczyć na dole.

Teraz kiedy znamy jaka jest struktóra obiektów, możemy zacząć dodawać swój własny. Ale przedtem zwróć uwagę na to że w przypadku module_parties.py (i niektórych innych modułów) nie należy dodawać  miast na początku ani na końcu listy ponieważ mogą wystąpić problemy z kodem native. W module_parties.py, zaleca się, aby dodać wszystkie nowe wpisy od "training_ground" i "castle_1".  

Teraz skopiuj wpis "town_14" i wklej go pomiędzy "training_ground" i "castle_1".

 ("training_ground","Training Ground",  icon_town|pf_town|pf_disabled, "training_ground", pt_none, fac_vaegirs,0,ai_bhvr_hold,0,(-2,-3),[(trp_vaegir_knight,6,0)]),

  ("new_town","Mod_Town",  icon_town|pf_town, "town", pt_none, fac_vaegirs,0,ai_bhvr_hold,0,(-4,-37),[(trp_vaegir_knight,6,0)]),

  ("castle_1","Culmarr_Castle",icon_town|pf_is_static|pf_always_visible, "castle", pt_none, fac_outlaws,0,ai_bhvr_hold,0,(-47,-51),[(trp_swadian_knight,5,0),(trp_swadian_crossbowman,25,0)]),

W tym przykładzie zmieniliśmy naszemu nowemu obiektowi  identyfikator z „Town_14” na „New_town” i nazwę z „Halmar” na „Mod_Town”.
Możemy teraz ustalić parę rzeczy patrząc na obiekt:
1)   Możemy odnosić się do tego obiektu z innego pliku używając identyfikatora „New_town” ale po prefiksie „p_”, w rezultacie „p_new_town”.
2)   W grze będziemy widzieć tylko nazwę obiektu, czyli w tym wypadku „Mod Town” lecz nigdy nie będziemy widzieć jego identyfikatora.
3)   Ten obiekt używa icon_town i flagi pf_town – ta falga przypisuje wspólne ustawienia miast. Pola flag będą przez nas zaraz zmieniane
4)   „Mod Town” należy obecnie do farkcji Vaegir.
5)   Jeśli teraz położymy nasze New Town do gry to będzie miało takie same koordynaty położenia jak Halmar. To zmienimy również.


 ("training_ground","Training Ground",  icon_town|pf_town|pf_disabled, "training_ground", pt_none, fac_vaegirs,0,ai_bhvr_hold,0,(-2,-3),[(trp_vaegir_knight,6,0)]),

  ("new_town","Mod_Town",  icon_new_icon|pf_town, "town", pt_none, fac_neutral,0,ai_bhvr_hold,0,(-1,-1),[(trp_vaegir_knight,6,0)]),

  ("castle_1","Culmarr_Castle",icon_town|pf_is_static|pf_always_visible, "castle", pt_none, fac_outlaws,0,ai_bhvr_hold,0,(-47,-51),[(trp_swadian_knight,5,0),(trp_swadian_crossbowman,25,0)]),

Teraz zmieniamy naszemu new town ikonę na icon_new_icon I przypisujemy mu koordynaty ,(-1,-1). Po dodaniu tego  zmieniamy również przynależność new town do fac_neutral .

Nasze miasto ma obecnie skonfigurowane nasze ustawienia ikony oraz unikalne współrzędne dzięki któremu będzie pokazane na mapie bez problemów.
Zapisz swoje zmiany, po czym kliknij na build_module.bat. Jeśli wszystko zrobiłeś dobrze będziesz w stanie uruchomić swój mod i zobaczyć swoje nowe miasto i jego ikonę w pobliżu centrum tej mapy. Spróbuj.

Jeśli coś nie poszło dobrze, dokładnie sprawdź pisownię i składnię. Upewnij się że wszystkie przecinki i nawiasy są we właściwym miejscu. Zła składnia jest najczęstszym źródłem błędów kompilatora w module system.

W grze, podróż do miasta wywoła teraz tylko zdarzenie walki, ponieważ miasto nie ma obecnie menu gry przypisane jego odwiedzeniu. Przypisywanie menu jest nieco skomplikowanym zadanie, więc będziemy musieli opuścić nasze nowe miasto w tej chwili i powrócić do niego w następnym rozdziale tej dokumentacji.

Jak widać, wzajemne relacje różnych plików modułu mogą być rozległe. Każdy obiekt musi być dokładnie objęty dla modułu do poprawnej pracy. Na szczęście, większość zmian wymaga co najwyżej jedynie edycji jednego lub dwóch plików.

Teraz, gdy już ugruntowałeś znajomość podstaw modding-u, możemy przejrzeć różne pliki modułu i zapoznać się z ich ogólną budową lub przejść do kolejnego rozdziały 3.





Spis prefixów do konkretnych plików module

fac_   -- module_factions.py
icon_   -- module_map_icons.py
itm_   -- module_items.py
mnu_   -- module_game_menus.py
mno_   -- module_game_menus.py -- References an individual menu option in module_game_menus.
mt_   -- module_mission_templates.py
psys_   -- module_particle_systems.py
p_      -- module_parties.py
pt_   -- module_party_templates.py
qst_   -- module_quests.py
script_   -- module_scripts.py
scn_   -- module_scenes.py
spr_   -- module_scene_props.py
str_   -- module_strings.py
trp_   -- module_troops.py

Module_dialogs.py nie jest bezpośrednio odwoływany dlatego nie ma prefix-a.

Wszelkie uwagi, zastrzeżenia lub propozycje lepszych tłumaczeń proszę zgłaszać na pw:)

Pozdrawiam




« Ostatnia zmiana: Czerwiec 20, 2011, 12:55:14 wysłana przez pustelnik »

Offline woyo-sensei

  • Utracjusz
  • *
  • Wiadomości: 757
  • Piwa: 3
  • Płeć: Mężczyzna
    • Wątek o modzie na oficjalnym forum TaleWorlds
Odp: Official Module System - tłumaczenie
« Odpowiedź #1 dnia: Czerwiec 29, 2011, 00:49:02 »
Pomysł fajny, ale jak chcesz, żeby to dobrze wyglądało, jednocześnie ucząc się języka, to proponuję używać słownika w postaci drukowanej, niż wklejać bezmyślnie w translatory, bo tak to się niczego nie nauczysz, ani o modowaniu, ani o języku. Jeśli jednak nie używałeś translatora to... no cóż, popraw co niektóre zdania, bo brzmią conajmniej dziwnie... I nie zapomnij o błędach interpunkcyjnych oraz ortograficznych, bo niektóre osoby na tym forum to aż kłuje w oczy :P

Offline mameos

  • Tułacz
  • *
  • Wiadomości: 4
  • Piwa: 0
  • Płeć: Mężczyzna
Odp: Official Module System - tłumaczenie
« Odpowiedź #2 dnia: Grudzień 31, 2012, 18:02:00 »
Hej ,a jak wybrać w module system ,który mod ma być edytowany?