logo
pl
Polski

Mod ramy poczty

Twórca: Digus
Zaktualizowano:2025-03-28 14:16:59
49KB
mcafee
Uwierzytelnianie
Zaufane przez 200,000,000+ użytkowników

Moduły wymagane wstępnie

zostanie automatycznie zainstalowany po użyciu Mod ramy poczty

O tym modzie

Framework do używania skrzynki pocztowej w grze. Polecenia konsoli do dostosowania poczty. Interfejsy pakietów kodu i treści.
Cel:
Uprość wysyłanie poczty do gracza, zapewniając sobie większą kontrolę nad tym, kiedy i co powinno zostać odebrane.
Dając również więcej opcji, nie można po prostu edytować plików danych, np. zmieniać kolor tekstu i tło listu na żądanie.

Instalacja:

Dziennik zmian:

1.20.0
  • Dodaje nowy niestandardowy element do gry. (DIGUS.MailFrameworkMod/MailData) Oznacza to, że listy MFM można teraz załadować za pomocą Content Patchera i korzystać ze wszystkich jego funkcji, takich jak tokeny. Obsługuje te same właściwości.
  • Listy z pakietu zawartości są również ładowane do nowego niestandardowego zasobu i dlatego można je edytować za pomocą programu Content Patcher.
  • Pakiety zawartości są teraz ładowane do pamięci podręcznej na początku gry, zamiast przeładowywać je przy każdym wczytaniu zapisu. Możesz wymusić przeładowanie pakietów zawartości za pomocą polecenia w konsoli.
  • Właściwości tekstu i tytułu obsługują teraz ciągi tokenizowalne.
  • Zasoby tekstur mogą teraz być zasobami gry, a nie tylko zasobami w folderze mod.
  • Nowa właściwość GameStateQuery jako warunek dostarczenia listu.
1.19.0
  • Nowa właściwość, która pozwala zachować ważność poczty, jeżeli wszystkie warunki zostały spełnione w danym dniu, ale poczta nie została przeczytana w tym dniu.
  • Nowa funkcja obsługi losowo wybranych załączników
  • Nowa właściwość ustawiająca liczbę elementów z listy załączników, które mają zostać wybrane do dostarczenia.
  • Nowa właściwość umożliwiająca ustawienie „RandomGroup” dla załącznika, dzięki czemu będzie on wybierany z tej grupy, a nie z całej listy.
  • Nowa właściwość umożliwiająca ustawienie „Wagi” dla danego załącznika wybieranego losowo.
  • Nowa właściwość ustawiająca liczbę elementów, które mają zostać wybrane z danej grupy, zamiast używać wartości domyślnej.
  • Nowa właściwość określająca, czy element z danej grupy można wybrać więcej niż raz.
  • Nowy zestaw właściwości umożliwiający ustawienie wymogu MailReceived dla załączników i odpowiedzi
  • Nowa właściwość umożliwiająca ustawienie opcji MailReceived, która będzie usuwana po przeczytaniu listu lub wybraniu opcji odpowiedzi.
  • Nowa właściwość umożliwiająca ustawienie kosztu dla danej opcji odpowiedzi.
  • Nowy typ elementu „Brak”. Zasadniczo służy do tego, gdy chcesz mieć szansę na losowe niedostarczenie elementu, bez generowania błędów/ostrzeżeń w logu.
1.18.0
  • Nowa właściwość „Ids” zastępująca „Indeks” i „Nazwa” w CollectionConditions. Umożliwia agregację wielu elementów, sumując ich wartość w celu porównania z ilością.
  • Nowa właściwość ReplyConfig, która dodaje zachowanie odpowiedzi. Możesz wyświetlić odtwarzaczowi opcję po przeczytaniu wiadomości e-mail, a on doda jeden lub więcej tekstów MailReceived w zależności od wybranej opcji. Na podstawie tego wyboru można zaimplementować dodatkową logikę modów.
  • Naprawiono literę w przepisie, która nie obsługiwała właściwości CustomTextColorName.
  • Naprawiono wyjątek odwołania zerowego, występujący w przypadku, gdy w grze ładowany był przedmiot o nazwie zerowej.
1.17.1
  • Wiadomości e-mail z pakietem zawartości zawierającym właściwość „recipe” nie mogą zawierać załączników, aby mogły zostać ponownie dostarczone, jeśli przepis nie zostanie poznany. (właściwość „recipe” jest ignorowana, jeśli występują załączniki)
  • Napraw przepisy kulinarne, stosując tę samą logikę, która była stosowana wcześniej do przepisów rzemieślniczych.
1.17.0
  • Nowa właściwość do ustawienia jakości załącznika
  • Jeśli nie uda się poznać przepisu, wiadomości e-mail zawierające pakiety treści powinny zostać dostarczone ponownie.
  • Naprawiono ostrzeżenia dotyczące Slingshot w przypadku używania kwalifikowanego identyfikatora przedmiotu.
  • Naprawiono dostarczanie przepisów na przedmioty rzemieślnicze, nawet jeśli przepis został już poznany.
  • Ze względu na kwestie związane z dziedzictwem, jeśli identyfikator przepisu nie zostanie znaleziony w nauczonych przepisach, program będzie szukał przepisu, który utworzy element o nazwie identyfikatora przepisu.
1.16.1
  • Naprawiono przetłumaczoną nazwę przepisu.
1.16.0
  • Zaktualizowano mod, aby był kompatybilny ze Stardew Valley 1.6
  • Nowe polecenie do ponownego ładowania pakietów zawartości
  • Zmieniono nazwę MailDao na MailRepository. (Dotyczy tylko modów SMAPI, które z niej korzystają)
  • Nowy typ przedmiotu „QualifiedItemId” dla załączników powinien działać dla każdego typu przedmiotu w grze, jeśli użyjesz właściwej kwalifikacji.
  • Nowa nieruchomość na specjalne warunki dat. (Ślub i poród)
  • Nowa właściwość CustomTextColor, stara uznana za przestarzałą.
  • Nowa właściwość HasMods
  • Nowa właściwość RequireAllMods
  • Identyfikatory zdarzeń są teraz ciągami znaków. (Liczby powinny nadal działać)
  • Usunięto przestarzałą logikę SV 1.6 zawartą w MFM.
  • Naprawiono problem z wersji alfa, w wyniku którego list nie otwierał się na stronie zbierania poczty.
Spoiler:
Pokazywać
1.15.0
  • Nowy interfejs API dla modów SMAPI.
  • Metoda API umożliwiająca załadowanie folderu pakietu zawartości z poziomu moda SMAPI.
  • Metoda API do załadowania litery.
  • Metoda API umożliwiająca pobranie danych o liście.
  • Metoda API umożliwiająca pobranie ciągu danych pocztowych listu.
  • Naprawiono nieprawidłową pracę skrzynki pocztowej, gdy podczas zamykania listu pojawiał się błąd.
  • Lepiej zanotuj te błędy.
1.14.0
  • Więcej zmian zapewniających zgodność ze SMAPI 4
  • Nowy atrybut w klasie letter do ustawiania ITranslationHelper.
  • Pakiet zawartości nie wymaga żadnych zmian, ale zmiana ta powinna zapobiec niektórym rzadkim problemom z protokołem i18n.
  • Modyfikacje wykorzystujące MFM za pośrednictwem kodu mogą aktualizować swoją implementację.
1.13.0
  • Uczynić mod kompatybilnym ze SMAPI 4.
  • Nowa nieruchomość na poziomie „Najgłębszej kopalni”.
  • Nowa nieruchomość za obecne pieniądze.
  • Nowa nieruchomość za zarobione pieniądze.
  • Nowe polecenie konsoli wymuszające aktualizację skrzynki pocztowej, co ułatwia debugowanie moderom.
  • Menu kolekcji listów teraz wyświetla także niestandardowy przycisk zamknięcia.
1.12.2
  • Uczynić mod kompatybilnym z wersją 1.5.5, nie zmuszając SMAPI do konwersji.
  • Powinno to rozwiązać pewne problemy z działaniem załączników w systemie Unix.
  • Nowa nieruchomość przeznaczona do podniesienia standardu domu.
1.12.1
  • Naprawiono błąd, który występował, gdy Narzędzie Rozszerzonych Warunków Wstępnych nie było ładowane.
1.12.0
  • Nowe właściwości wspierające wykorzystanieRozszerzone warunki wstępne
  • Nowa właściwość umożliwiająca dodawanie tekstu obok identyfikatora litery do listy MailReceived gracza.
1.11.0
  • Wsparcie dla DGA (Dynamic Game Assets) w postaci załączników.
1.10.2
  • Naprawiono błąd powodujący wyświetlanie nazw przepisów kulinarnych w języku angielskim jako null, gdy zostały dodane za pomocą zasobów Json.
1.10.1
  • Naprawiono automatyczne otwieranie listów bez tekstu, co powodowało awarię moda w przypadku plików i18n.
  • Naprawiono błąd powodujący, że list z pakietu zawartości nie ładował się po wyświetleniu jednego ostrzeżenia o warunku zbioru.
  • Dodaje nowy typ wymogu kolekcji dla przepisów rzemieślniczych.
1.10.0
  • Obsługiwane są teraz wszystkie standardowe narzędzia.
  • Wsparcie dla procy waniliowej jako broni. Jeśli użyjesz indeksu lub nazwy procy, zostanie ona poprawnie utworzona.
  • Nowa właściwość „Automatyczne otwieranie” dla sytuacji, gdy chcesz użyć warunków MFM do zapisania identyfikatora listu jako odczytanego bez zapisywania faktycznego listu.
1.9.2
  • Optymalizacja ładowania zasobów z pakietów treści.
  • Naprawiono błąd powodujący, że litery nie były wywoływane, jeśli otwarto menu w celu dodania przedmiotu do ekwipunku.
1.9.1
  • Naprawiono błąd, w wyniku którego list MFM nie był otwierany ani usuwany ze skrzynki pocztowej na bieżący dzień, jeśli użytkownik trzymał jakiś obiekt podczas klikania skrzynki pocztowej.
1.9.0
  • Nowa właściwość listu utworzonego za pomocą SMAPI umożliwiająca dynamiczne dodawanie elementów do listu.
  • Nowa metoda wyjmowania listów ze skrzynki pocztowej.
1.8.1
  • Naprawiono w celu uniknięcia konfliktowych maili w lokalnej spółdzielni.
  • Naprawiono rzadkie sytuacje, w których mod przestawał działać, jeśli menu liter nie zostało poprawnie zamknięte przez grę.
1.8.0
  • Wsparcie dla mebli, broni i butów jako dodatków.
  • Nowa właściwość umożliwiająca ustawienie poziomu uaktualnienia dołączonych narzędzi.
1.7.0
  • Obsługa pierścieni jako załączników.
  • Nowe warunki dla receptur.
  • Nowa właściwość umożliwiająca personalizację tła w pakietach zawartości.
  • Obsługa dostosowywania przycisku Zamknij za pomocą pakietu treści i kodu.
1.6.0
  • Obsługa i18n w pakietach zawartości.
  • Nowe warunki własnościowe dla budynków w gospodarstwie.
  • Nowe właściwości warunków dla otrzymanej poczty. (służy do oznaczania flag zadań)
  • Nowe właściwości warunków dla zdarzeń.
  • Nowa lista warunków dla elementów menu kolekcji.
  • Nowa lista warunków dla statystyk gry.
  • Nowa właściwość statusu przyjaźni na liście warunków przyjaźni dla postaci NPC.
  • Nowa losowa funkcjonalność na wypadek kolizji identyfikatorów grup.
1.5.1
  • Naprawiono grupowanie liter bez identyfikatorów grup.
1.5.0
  • Litera będzie teraz wyświetlana w menu kolekcji, jeśli zdefiniowano Tytuł. Własne tekstury i kolory również będą widoczne w menu kolekcji.
  • List może teraz mieć identyfikator grupy. Listy z tym samym identyfikatorem grupy nigdy nie są dostarczane tego samego dnia.
  • Nowy warunek dla pakietów zawartości: „Losowa szansa”.
  • BigObject nazywa się teraz BigCraftable, tak jak w kodzie gry.
  • Naprawiono literówki w szablonie.
1.4.1
  • Dodaje obsługę Stardew Valley 1.4.0
  • Dodaje właściwość „Tytuł” dla listów, która będzie wyświetlana w menu kolekcji. Nie jest jeszcze w pełni zaimplementowana, ale twórcy modów mogą zacząć ją ustawiać.
1.4.0
  • Dodaje pakiet zawartości umożliwiający twórcom modów dodawanie niestandardowych listów, z konfiguracjami wszystkich funkcji udostępnianych przez tę platformę i najczęściej używanymi warunkami dostawy.
  • Naprawiono kontrolery, które nie działały i uniemożliwiały dołączanie przedmiotów.
  • Naprawiono poprawne wyświetlanie załączników, jeśli wiadomość zawiera więcej niż jedną wiadomość.
  • Naprawiono błąd, który uniemożliwiał zamknięcie listu, gdy ekwipunek był pełny i otwarte było menu umożliwiające jego zarządzanie.
  • Naprawiono błąd powodujący, że stos elementów nie był dodawany do poczty, nawet gdy została odpowiednio skonfigurowana.
  • Dodaje obsługę SMAPI 3
1.3.4
  • Dodaje obsługę Stardew Valley 1.3.36
1.3.3
  • Dodaje obsługę SMAPI 3
1.3.2
  • Dodaje obsługę Stardew Valley 1.3.32
1.3.1
  • Dodaje polecenia do usuwania i dodawania do listy mailingowej otrzymanej od gracza.
1.3.0-beta.6
  • Dodaje obsługę przepisów rzemieślniczych
  • Dodaje obsługę niestandardowego tła
  • Dodaje obsługę niestandardowego koloru tekstu
  • Nowy sposób otwierania spersonalizowanych listów, teraz z wykorzystaniem harmonii
  • Plik konfiguracyjny umożliwiający stary sposób otwierania niestandardowych listów.
1.2.0
  • Obsługa receptur i18n.
  • Naprawiono błąd powodujący, że mod nie działał poprawnie po powrocie do menu tytułowego.
  • Naprawiono błąd powodujący, że poczta nie była dostarczana, jeśli stan listu powodował wyjątek.
1.1.0
  • Naprawiono błąd powodujący otrzymywanie wiadomości „podatek zaliczony” podczas snu i wychodzenie z gry bez przeczytania wiadomości.
  • Spersonalizowane maile mogą zawierać przepisy.
  • Ta wersja nie jest kompatybilna ze starszą. Aby korzystać z tej wersji, należy zaktualizować mody.
1.0.0
  • Dodaj niestandardowe wiadomości e-mail
  • Niestandardowe wiadomości e-mail mogą zawierać elementy.

Aby moderatorzy mogli korzystać z pakietu treści:
  • W folderze moda znajduje się szablon z instrukcjami i komentarzami opisującymi działanie każdej właściwości.
  • Wszystkie funkcje listu, oprócz warunków i wywołań zwrotnych, są takie same jak w przypadku kodowania przy użyciu struktury.
  • Warunki są ograniczone do tych zaimplementowanych, a funkcja zwrotna zawsze ustawia identyfikator litery jako otrzymany. Jeśli potrzebujesz zaawansowanych warunków, nadal powinieneś je zakodować. Możesz też uprzejmie zasugerować mi dodanie warunku do pakietu treści. Jeśli będzie to miało sens, mogę to dodać.
  • Oto szablon dodany do pliku mod:
Spoiler:
Pokazywać
[
    {
"Id": "MyMod.MyMailId", // Identyfikator literowy. Ważne jest, aby był to unikalny ciąg znaków, aby uniknąć konfliktów. Nie powinien również zawierać spacji.
"GroupId": "MyMod.MyGroupId", // Identyfikator grupy listów. Listy o tym samym identyfikatorze grupy nigdy nie są dostarczane tego samego dnia. Listy zarejestrowane jako pierwsze mają pierwszeństwo, chyba że identyfikator grupy kończy się na ".Random". W takim przypadku zostanie wybrany losowy list. Domyślnie jest to null.
„Tytuł”: „Tytuł mojego listu”, // Tytuł listu. Będzie wyświetlany w menu kolekcji. Ustaw wartość null lub usuń wiersz, jeśli nie chcesz, aby list pojawiał się w kolekcji. Jeśli dostępny jest plik tłumaczenia, należy umieścić tutaj klucz tłumaczenia, ale jeśli wartość null nie będzie widoczna, możesz pozostawić brak tytułu.
„Tekst”: „Szanowny @^To mój niestandardowy adres e-mail.”, // Treść listu. Możesz użyć @ do wstawienia imienia gracza, a ^ do podziału wiersza. Możesz również użyć poleceń z gry podstawowej, aby dodać pieniądze, przedmioty i inne rzeczy. Jeśli dostępny jest plik z tłumaczeniem, wpisz tutaj klucz tłumaczenia.
"RandomlyChooseAttachment": 2, // Jeśli ustawiono liczbę, losowo zostanie wybrana określona liczba elementów z listy załączników dla każdej grupy. Domyślnie jest to null.
"RandomlyChooseAttachmentPerGroup": { "CaveItems": 3 }, // Jeśli tutaj ustawiono grupę i ilość, do wyboru przedmiotów zostanie użyta ta ilość, a nie ta ustawiona w RandomlyChooseAttachment. Domyślnie jest pusta.
"AttachmentGroupWithReplacement": [ "CaveItems" ], // Domyślnie załączniki są wybierane losowo z listy bez zamiany. Jeśli chcesz, aby wybór został dokonany poprzez zastąpienie załączników, dodaj grupę do listy. Jeśli nie dodałeś grup, użyj pustego ciągu znaków. Wartością domyślną jest pusta lista.
"Załączniki": [ // Lista załączników. Usuń właściwość, aby nie dołączać elementów do wiadomości e-mail.
            {
„Typ”: „Obiekt”, // [Obiekt|Stół do Dużego Rzemiosła|Narzędzie|Pierścień|Meble|Broń|Buty|DGA|IdentyfikatorKwalifikowanegoPrzedmiotu|Brak] Wymagane. Typ przedmiotu, który zostanie dołączony. Jeśli nie zostanie podany, przedmiot zostanie zignorowany. Parametr „Brak” jest zawsze ignorowany bez błędów w logu i należy go używać, gdy chcesz mieć pewność, że nie zostanie dodany żaden element.
„Nazwa”: „Cave Carrot”, // Służy do znalezienia indeksu elementu. Jest to wymagane w przypadku korzystania z obiektów niestandardowych, takich jak zasoby JSON. Powinien to być pełny identyfikator DGA używany w DGA. Jeśli nie zostanie podany, zostanie użyty indeks. Domyślnie jest to null.
„Indeks”: „(0)78”, // Indeks elementu. Powinien to być kwalifikowany identyfikator elementu w postaci ciągu znaków, ale dla zapewnienia zgodności z poprzednimi wersjami będzie on również liczbą całkowitą. Jeśli nie podano nazwy lub nie znaleziono elementu o tej nazwie, używany jest indeks. W przeciwnym razie załącznik jest ignorowany. Ignorowany, jeśli typem jest DGA.
„Stack”: 1, // Wartość stosu przedmiotu do dostarczenia. Używane tylko dla obiektów i BigCraftable. Domyślnie 1.
„Jakość”: 2, // Wartość jakości przedmiotu do dostarczenia. Używane tylko dla obiektów. 0 = brak, 1 = srebro, 2 = złoto, 4 = iryd. Domyślnie 0;
"RequireMailReceived": [ "jojaVault", "ccVault" ], // Wymagaj otrzymania jednej z wiadomości e-mail. Lista gier zawiera również inne elementy, które nie są wiadomościami, takie jak flagi w centrach społecznościowych. Domyślnie wartość null oznacza brak wymagania otrzymania wiadomości e-mail.
"RequireAllMailReceived": false, // Jeśli true, wymagaj odebrania wszystkich wiadomości e-mail z listy "RequireMailReceived". Domyślnie jest to false.
"ProbabilityWeight": 1, // Waga, jaką ten załącznik ma przy wyborze, który z nich ma zostać dostarczony. Mod sumuje wszystkie wagi w danej grupie i przypisuje jej prawdopodobieństwo, dzieląc tę wagę przez sumę. Domyślnie jest to 1.
"RandomGroup": "CaveItems" // Wybierając elementy losowo, grupuj listę według znalezionych grup i wybierz zestaw wartości z każdej grupy. Wartością domyślną jest pusty ciąg znaków, który działa jako grupa domyślna.
},
            {
"Typ": "Narzędzie", // Podczas korzystania z narzędzi można dołączać tylko te obsługiwane.
„Nazwa”: „Siekiera”, // [Siekiera|Motyka|Konewka|Kiol|Kosa|Złota Kosa|Wiadro na Mleko|Nożyce|Wędka|Patelnia|Berło Zwrotne] Wymagane dla narzędzi. Nazwa obsługiwanego narzędzia. W przeciwnym razie załącznik jest ignorowany.
„UpgradeLevel”: 1 // Poziom ulepszenia narzędzia. Narzędzia standardowe: 0 = kamień, 1 = miedź, 2 = stal, 3 = złoto, 4 = iryd. Wędka: 0 = kij bambusowy, 1 = wędka treningowa, 2 = wędka z włókna szklanego, 3 = wędka irydowa. Ignorowane dla pozostałych typów. Domyślnie 0.
},
            {
„Typ”: „DGA”, //element DGA
„Name”: „spacechase0.DynamicGameAssets.Example/My Custom Item”, // użyj pełnego identyfikatora DGA. Wymagane.
„Stack”: 10, // Wartość stosu przedmiotu do dostarczenia. Używane tylko dla obiektów i BigCraftable. Domyślnie 1.
„Jakość”: 2 // Wartość jakości przedmiotu do dostarczenia. Używane tylko dla obiektów. 0 = brak, 1 = srebro, 2 = złoto, 4 = iryd. Domyślnie 0;
},
            {
„Typ”: „QualifiedItemId”, //Dowolny obsługiwany element
„Indeks”: „(0)78”, // Identyfikator kwalifikowanego elementu.
„Stack”: 10, // Wartość stosu przedmiotu do dostarczenia. Używane tylko dla obiektów i BigCraftable. Domyślnie 1;
„Jakość”: 2 // Wartość jakości przedmiotu do dostarczenia. Używane tylko dla obiektów. 0 = brak, 1 = srebro, 2 = złoto, 4 = iryd. Domyślnie 0;
            }
],
„Przepis”: „Nazwa przepisu”, // Usuń wiersz, jeśli nie chcesz dołączać przepisu do wiadomości e-mail. Będzie to działać tylko wtedy, gdy nie masz innych załączników do wiadomości e-mail. W przypadku przepisów DGA użyj tylko części ID (pomiń ModID).
"AdditionalMailReceived": ["MyMod.AnotherMailId", "VANILLA_FLAG"], // Użyj tego, aby dodać dodatkowy tekst do listy MailReceived. Może być przydatne do dodawania flag waniliowych lub innych identyfikatorów liter MFM.
"MailReceivedToRemove": ["MyMod.AnotherMailThatNeedToBeResent","MyMod.SomeFlagThatWasLockingSomeFeature"], //Tekst do usunięcia z listy MailReceived. Można go użyć do uruchomienia nowej poczty, zdarzeń, flag waniliowych, zablokowania wysyłania innej poczty MFM...
"LetterBG": "CustomLetterBG.png", // Nazwa pliku w pakiecie zawartości, który zawiera niestandardowe tło litery. Powinien on mieć taką samą strukturę jak plik LetterBG z gry. Parametr WhichBG będzie względny dla tej litery w odniesieniu do tego pliku. Jeśli wartość jest null lub została usunięta, mod użyje tła LetterBG z gry.
„WhichBG”: 0, //Identyfikator tła litery. 0 = klasyczny, 1 = notatnik, 2 = piramidy
"TextColor": -1, //Usuń ten wiersz, aby użyć domyślnego koloru. Zostanie zignorowany, jeśli ustawiono CustomTextColor. -1 = Ciemnoczerwony, 0 = Czarny, 1 = Błękitny, 2 = Czerwony, 3 = Fioletowoniebieski, 4 = Biały, 5 = Pomarańczowoczerwony, 6 = Limonkowozielony, 7 = Cyjan, 8 = Najciemniejszy szary
"CustomTextColorName": "Biały", //Kolor tekstu.[http://www.foszor.com/blog/xna-color-chart/] Domyślnie używana będzie właściwość TextColor.
"UpperRightCloseButton": "CustomCloseButton.png", // Nazwa pliku w pakiecie zawartości, który zawiera niestandardowy przycisk zamykania. Powinien mieć rozmiar 12 x 12. Jeśli ma wartość null lub jest usunięty, zostanie użyty domyślny przycisk.
"ReplyConfig": { // Jeśli chcesz, aby gracz wysłał odpowiedź po przeczytaniu listu. Wyświetlone zostaną opcje odpowiedzi, które dodadzą jeden lub więcej elementów „ReceivedMail” na podstawie odpowiedzi gracza. Wszelka dodatkowa logika związana z odpowiedzią musi zostać zaimplementowana na podstawie dodanego elementu „ReceivedMail”.
"QuestionKey": "MyMod.MyMailId.Question", //Klucz identyfikujący pytanie. Ma on zastosowanie wyłącznie wewnętrzne, ale powinien być unikatowy w pakiecie treści, aby uniknąć konfliktów między odpowiedziami.
"QuestionDialog": "Wyślij odpowiedź, wybierając nagrodę:", //Twoje pytanie lub tekst, który będzie wyświetlany nad opcjami odpowiedzi. Jeśli udostępniono plik z tłumaczeniem, należy umieścić tutaj klucz tłumaczenia.
„Odpowiedzi”: [
                {
"ReplyKey": "MyMod.MyMailId.Reply1", //Musi być unikatowy pomiędzy odpowiedziami na pytania.
"ReplyOptionDialog": "Chcę nasiona.", //Tekst opcji, który będzie wyświetlany na liście odpowiedzi. Jeśli podano plik tłumaczenia, należy umieścić tutaj klucz tłumaczenia.
"RequireMailReceived": [ "jojaVault", "ccVault" ], // Wymagaj otrzymania jednej z wiadomości e-mail. Lista gier zawiera również inne elementy, które nie są wiadomościami, takie jak flagi w centrach społecznościowych. Domyślnie wartość null oznacza brak wymagania otrzymania wiadomości e-mail.
"RequireAllMailReceived": false, // Jeśli true, wymagaj odebrania wszystkich wiadomości e-mail z listy "RequireMailReceived". Domyślnie jest to false.
"MailReceivedToAdd": [ "MyMod.MyMailId.PlayerSeedOption" ], // Tekst do dodania do listy MailReceived. Można go użyć do wyzwolenia nowej poczty, zdarzeń, flag waniliowych, zatrzymania wysyłania innej poczty MFM...
"MailReceivedToRemove": [ "MyMod.MyMailId.PlayerSapplingOption" ], //Tekst do usunięcia z listy MailReceived. Można go użyć do uruchomienia nowej poczty, zdarzeń, flag waniliowych, zablokowania wysyłania innej poczty MFM...
"ReplyResponseDialog": "Twój list z prośbą o nasiona został wysłany.", //Tekst, który pojawi się po wybraniu tej opcji odpowiedzi. Jeśli udostępniono plik tłumaczenia, należy umieścić tutaj klucz tłumaczenia.
„Koszt”: 50 //Kwota pieniędzy, jaką gracz musi posiadać, aby wybrać tę opcję. Jeśli gracz ją wybierze, kwota ta jest natychmiast odejmowana od jego środków. Zawsze oferuj opcję bezkosztową, w przeciwnym razie gracz zostanie całkowicie zablokowany.
                }
            ]
},
„Repeatable”: false, // Jeśli true, mod nie sprawdzi, czy list o identyfikatorze został już dostarczony. Domyślnie false.
"AutoOpen": false, // Jeśli true, mod otworzy list na początku dnia po spełnieniu warunków. Identyfikator listu zostanie oznaczony jako przeczytany, a jeśli istnieje ustawiony przepis, zostanie on zapamiętany. Ponieważ list nigdy się nie wyświetli, właściwości wizualne, takie jak tytuł, tekst, tło..., nigdy nie zostaną użyte, podobnie jak załączniki.
// WARUNKI DOSTAWY
//Poniżej znajdują się warunki dostawy. Usuń dowolny wiersz, jeśli nie chcesz sprawdzać danego warunku.
„Data”: „10 wiosna R1”, // Musi to być ta data lub data po niej. Format to „[1-28] [wiosna|lato|jesień|zima] R[1-999]”.
„Dni”: [7,14,21,28], // Musi to być jeden z dni na liście.
"Pory roku": ["jesień"], // Musi to być jedna z pór roku na liście. [wiosna|lato|jesień|zima]
„Pogoda”: „słonecznie”, // Musi to być pogoda panująca w grze. Format to „[słonecznie|deszczowo]”.
"HouseUpgradeLevel": 2, // Poziom ulepszenia domu musi być równy lub wyższy od zdefiniowanego. 0 - dom początkowy (nie ma potrzeby tego używać, po prostu usuń linię), 1 - kuchnia, 2 - drugie piętro, 3 - piwnica.
"DeepestMineLevel": 80, // Najgłębszy poziom kopalni musi być równy lub wyższy od zdefiniowanego. 120 to ostatni poziom kopalni, 121 to pierwszy poziom jaskini czaszki.
"CurrentMoney": 10000, // Aktualna kwota pieniędzy musi być równa lub wyższa od zdefiniowanej kwoty.
"TotalMoneyEarned": 500000, // Łączna zarobiona kwota musi być równa lub wyższa od podanej wartości.
"FriendshipConditions": // Każdy NPC z listy musi sprawdzić wszystkie warunki.
        [
            {
„NpcName”: „Lewis”, //Imię NPC. Można używać niestandardowych NPC.
„FriendshipLevel”: 8, // NPC musi mieć poziom serca przyjaźni równy lub wyższy od zdefiniowanego. Domyślnie 0.
„Status przyjaźni”: [„Randki”, „Zaręczeni”, „Żonaty”] // [Przyjazny|Randki|Zaręczeni|Żonaty|Rozwiedziony] Wymagaj, aby status przyjaźni NPC był jednym z listy. Usuń, aby nie wymagać statusu.
            }
],
„SkillConditions”: // Każda umiejętność na liście musi mieć poziom równy lub wyższy od zdefiniowanego. Można używać wszystkich zakodowanych umiejętności w grze podstawowej, w tym Szczęścia. Nie można używać umiejętności niestandardowych.
        [
{ "SkillName": "Rolnictwo", "SkillLevel": 1 }
],
„StatsConditions”: // Każda statystyka na liście musi mieć wartość równą lub wyższą od zdefiniowanej. Wybierz StatsName lub StatsLabel
        [
            {
"StatsName": "CheeseMade", //[SeedsSown|ItemsShipped|ItemsCooked|ItemsCrafted|ChickenEggsLayed|DuckEggsLayed|CowMilkProduced|GoatMilkProduced|RabbitWoolProduced|SheepWoolProduced|CheeseMade|GoatCheeseMade|TrufflesFound|StoneGathered|RocksCrushed|DirtHoed|GiftsGiven|TimesUnconscious|AverageBedtime|TimesFished|FishCaught|BouldersCracked|StumpsChopped|StepsTaken|MonstersKilled|DiamondsFound|PrismaticSh Znaleziono ards|Inne cenne kamienie|Znaleziono marchewki jaskiniowe|Znaleziono miedź|Znaleziono żelazo|Znaleziono węgiel|Znaleziono monety|Znaleziono złoto|Znaleziono iryd|Sztabki przetopione|Wyprodukowano napoje|Wyprodukowano konserwy|Przetworzone kawałki śmieci|Mistyczne kamienieRozkruszone|Dni rozgrywki|Chwasty wyeliminowane|Posiekane patyki|Znaleziono notatki|Ukończone zadania|Poziom gwiazdyWysłane plony|Wysłane plony|Znaleziono przedmioty|Zabite szlamy|Pęknięte geody|Dobrzy przyjaciele|Zarobione pieniądze] Domyślnie ustawiono wartość null.
"StatsLabel": "Nazwa", // [exMemoriesWiped|childrenTurnedToDoves|trashCansChecked|boatRidesToIsland|beachFarmSpawns|hardModeMonstersKilled|timesEnchanted] To są aktualne statystyki gry, które są identyfikowane przez etykietę. Jeśli dodane zostaną kolejne, powinny być również obsługiwane. Będzie to również identyfikować niestandardowe etykiety statystyk dodane przez inne mody. Domyślnie jest to null.
"Kwota": 1 // Kwota, jaka powinna być równa lub większa od wartości statusu, aby warunek był ważny.
            }
],
"CollectionConditions": // Każdy warunek kolekcji na liście musi mieć wartość równą lub wyższą od zdefiniowanej kwoty.
        [
            {
„Kolekcja”: „Wysłane”, //[Wysłane|Ryby|Artefakty|Minerały|Gotowanie|Rzemiosło] Wymagane.
„Nazwa”: „Olej”, //Przestarzałe, zamiast tego używa identyfikatorów. Nazwa obiektu lub przepisu dla kolekcji „Rzemiosło”. Jeśli nie jest to kolekcja rzemieślnicza, szuka tej nazwy na liście obiektów, aby znaleźć indeks. Jeśli nazwa nie zostanie znaleziona, litera jest ignorowana. Zostanie połączona z pozostałymi właściwościami. Domyślnie jest to null.
„Indeks”: 211, //Przestarzałe, zamiast tego używa identyfikatorów. Indeks obiektu. Zostanie połączony z innymi właściwościami. Wartość domyślna to null.
„Identyfikatory”: [„282”, „Zupa z mchu”], //Identyfikatory przedmiotów lub nazwy receptur rzemieślniczych. Zostaną połączone z innymi właściwościami. Kwoty są sumowane w celu porównania z właściwością „Kwota”.
"Kwota": 10 // Całkowita kwota, jaka musi być równa lub większa od liczby obiektów w kolekcji, aby warunek był ważny.
            }
],
"SpecialDateCondition": // Musi to być ta data lub data późniejsza.
        {
„SpecialDate”: „Narodziny dziecka”, //[Ślub|Narodziny dziecka] Wymagane
"YearsSince": 1, //Liczba lat od wystąpienia daty. 0 oznacza datę rzeczywistą, 1 – rok bieżący. Domyślnie 0.
"WhichChild": 1 //Jeśli właściwość SpecialDate to ChildBirth, będzie ona odwoływać się do dziecka. Wartość domyślna to 1;
},
„ExpandedPrecondition”: „d Mon Fri/HasItem Pink Cake/!JojaMartComplete/!w rainy”, //Potrzebny mod Expanded Preconditions Utility. Zapoznaj się z dokumentacją moda, aby zobaczyć, jak to działa. Jeśli mod nie jest załadowany, list nie zostanie dostarczony.
„ExpandedPreconditions”: [ „!z spring/t 600 1000”, „f Linus 1000/w rainy/z spring”, „f Linus 2500” ], //Wymagany jest mod Expanded Preconditions Utility. Zapoznaj się z dokumentacją tego moda, aby zobaczyć, jak to działa. Jeśli mod nie zostanie załadowany, list nie zostanie dostarczony.
„RandomChance”: 0,25, // Mod sprawdzi, czy liczba losowa od 0 do 1 jest mniejsza od podanej. Ten sam zapis, tego samego dnia dla tej samej litery, zawsze da ten sam wynik, aby uniknąć oszustwa.
"Budynki": ["Kurnik","Duży kurnik","Kurnik Deluxe"], // Wymaga, aby jeden z budynków był aktualnie zbudowany na farmie.
"RequireAllBuildings": false, // Jeśli true, wymagaj, aby wszystkie budynki z listy „Budynki” były aktualnie zbudowane w farmie. Domyślnie jest to false.
"MailReceived": ["jojaVault","ccVault"], // Wymagaj otrzymania jednej z wiadomości e-mail. Lista gier zawiera również inne elementy, które nie są wiadomościami e-mail, takie jak flagi centrów społecznościowych.
"RequireAllMailReceived": false, // Jeśli true, wymagaj odebrania wszystkich wiadomości e-mail z listy „MailReceived”. Domyślnie jest to false.
"MailNotReceived": ["jojaVault","ccVault"], // Wymagaj, aby wiadomości e-mail nie zostały odebrane. Lista gier zawiera również inne elementy, które nie są wiadomościami e-mail, takie jak flagi centrów społecznościowych.
"EventsSeen": [ "4", "32423" ], // Wymagaj, aby jedno ze zdarzeń zostało zaobserwowane przez gracza. Powinien to być ciąg znaków, ale będzie również działać jako liczba całkowita dla zapewnienia zgodności z poprzednimi wersjami.
"RequireAllEventsSeen": false, // Jeśli true, wymaga, aby wszystkie zdarzenia z listy "EventsSeen" zostały zobaczone przez gracza. Domyślnie jest to false.
"HasMods": [ "SMAPI.ConsoleCommands", "SMAPI.SaveBackup" ], // Wymagaj załadowania jednego z modów. Powinien to być unikalny identyfikator modu.
"RequireAllMods": false, // Jeśli true, wymaga załadowania wszystkich modów z listy „HasMods”. Domyślnie jest to false.
"EventsNotSeen": [ "4", "32423" ], // Wymagaj, aby zdarzenia nie zostały zaobserwowane przez gracza. Powinien to być ciąg znaków, ale będzie również działać jako liczba całkowita dla zapewnienia zgodności z poprzednimi wersjami.
"RecipeKnown": ["Pizza", "Survival Burger"], // Wymaga, aby gracz znał jeden z przepisów.
"RequireAllRecipeKnown": false, // Jeśli true, wymagaj, aby wszystkie przepisy z listy "RecipeKnown" zostały zapamiętane przez gracza. Domyślnie jest to false.
"RecipeNotKnown": ["Dzika przynęta"], // Wymagaj, aby gracz nie znał przepisów.
"KeepValid": false // Jeśli to prawda, po spełnieniu warunków wiadomość e-mail będzie prawidłowa do momentu odczytania. Domyślnie jest to false.
    }
]


Aby Modder mógł korzystać z API:
  • KopiaIMailFrameworkModApiinterfejs z metodą, której chcesz użyć z interfejsu MFM.
  • KopiaListjeśli jedna z metod tego wymaga.
  • Metody:
    • RegisterContentPack- UżywaćHelper.ContentPacks.CreateTemporaryAby załadować folder z moda zawierający plik mail.json i ewentualnie folder i18n na tłumaczenia. Manifest nie jest potrzebny, ponieważ można użyć tego parametru metody.
    • List rejestracyjny- Wypełnij iLetter potrzebnymi właściwościami. Do zarejestrowania listu wymagany jest również warunek. Zalecane jest wywołanie zwrotne, aby dodać przynajmniej identyfikator listu w postaci, w jakiej został odebrany. Zobacz przykłady poniżej, w sekcji „Aby modder mógł kodować z zależnością od MFM" sesja.
    • GetLetter- Otrzymasz obiekt ILetter dla identyfikatora listu.
    • Pobierz ciąg danych poczty- Otrzymasz ciąg danych adresowych dla identyfikatora listu. Ciąg danych adresowych to w zasadzie przetłumaczony tekst i przetłumaczony tytuł z separatorem [#].

Aby Modder mógł kodować z zależnością od MFM:
  • Odwołaj się do pliku MailFrameworkMod.dll w swoim projekcie SMAPI.
    • Rejestrujesz swój List za pomocą MailRepository.SaveLetter(Letter)
    • Na początku każdego dnia moderator sprawdzi, czy listy osiągnęły już status umożliwiający doręczenie i doda je do skrzynki pocztowej.
    • Te listy zostaną otwarte jako pierwsze, gdy gracz sprawdzi skrzynkę pocztową.
    • Po otwarciu listu zostaje on wyjęty ze skrzynki pocztowej.
    • Warunek wywołania zwrotnego listu jest nazywany.
    • Pod koniec dnia list, który nadal znajduje się w skrzynce pocztowej, zostanie usunięty, więc gra nie zapisze go.
  • Możesz traktować ten mod jako repozytorium swoich listów. Najlepiej działa, jeśli załadujesz wszystkie swoje listy podczas ładowania gry.


Przykłady:

Spoiler:
Pokazywać

Ładowanie prostego listu, który zostanie wyświetlony graczowi, jeśli nie zostanie wcześniej przeczytany, i nie zostanie dostarczony ponownie po otwarciu przez gracza:
MailRepository.SaveLetter(
nowy list(
„Unikalny Identyfikator Listu”
„Tekst niestandardowy listu”.
,(l)=>!Gra1.gracz.pocztaOtrzymana.Zawiera(l.Id)
,(l)=>Gra1.gracz.pocztaOtrzymana.Dodaj(l.Id)
)
);


Ładowanie prostego Listu jak poprzednio, ale z dołączonymi 5 Szmaragdami:
MailRepository.SaveLetter(
nowy list(
„Unikalny Identyfikator Listu”
„Tekst niestandardowy listu”.
,nowa lista { nowy StardewValley.Object(60,5) }
,(l)=>!Gra1.gracz.pocztaOtrzymana.Zawiera(l.Id)
,(l)=>Gra1.gracz.pocztaOtrzymana.Dodaj(l.Id)
  )
);

Gracz nie otrzyma tego samego przedmiotu, ale kopię zwróconą metodą getOne().

Wczytanie prostego listu, który nauczy gracza przepisu kulinarnego, zostanie dostarczone, jeśli gracz go nie zna. Mod automatycznie uczy przepisów po załadowaniu, nie ma potrzeby wywoływania zwrotnego:
MailRepository.SaveLetter(
nowy list(
„Unikalny Identyfikator Listu”
„Tekst niestandardowy listu”.
, "UnikalnaNazwaPrzepisu"
, (l) => !Game1.player.cookingRecipes.ContainsKey(l.Recipe)
  )
);

Wartość „RecipeUniqueName” musi być taka sama jak ta zapisana w „Data//CookingRecipes” lub „Data//CraftingRecipes”.

Ładowanie prostego listu z innym tekstem i tłem:
MailRepository.SaveLetter(
nowy list(
„Unikalny Identyfikator Listu”
„Tekst niestandardowy listu”.
,(l)=>!Gra1.gracz.pocztaOtrzymana.Zawiera(l.Id)
,(l)=>Gra1.gracz.pocztaOtrzymana.Dodaj(l.Id)
1
){Kolor tekstu=8}
);


Ładowanie prostego listu z niestandardowym tłem:
MailRepository.SaveLetter(
nowy list(
„Unikalny Identyfikator Listu”
„Tekst niestandardowy listu”.
,(l)=>!Gra1.gracz.pocztaOtrzymana.Zawiera(l.Id)
,Gra1.gracz.pocztaOtrzymana.Dodaj(l.Id)
1
){
LetterTexture=helper.Content.Load("CustomLetterBG.png")
,Kolor tekstu=4
  }
);
Gdzie CustomLetterBG.png to plik obrazu o takiej samej strukturze jak „LooseSprites//letterBG”

Ładowanie prostego listu z tłumaczeniem tekstu i tytułu.
MailRepository.SaveLetter(
nowy list(
„Unikalny Identyfikator Listu”
,,mojlist.klucz.tłumaczenia.tekst"
,(l)=>!Gra1.gracz.pocztaOtrzymana.Zawiera(l.Id)
,(l)=>Gra1.gracz.pocztaOtrzymana.Dodaj(l.Id)
){
Tytuł = "myletter.translation.key.title",
I18N = pomocnik.Tłumaczenie
    }
);



Moje inne mody:

Najlepsze mody do Stardew Valley

Odkryj najlepsze mody do Stardew Valley, które wprowadzają nowe funkcje, ulepszoną grafikę i ekscytujące sposoby przekształcenia rozgrywki.

Odblokuj pełny potencjał Stardew Valley z XMODhub — odkryj dziś te najlepsze mody!

mcafee
Uwierzytelnianie
Zaufane przez 200,000,000+ użytkowników

Potrzebujesz pomocy z pobieraniem lub instalacją? Dołącz do naszej społeczności Discord po wsparcie!

logo
Język

Rozwiązania dla graczy

Zasoby

Wzmacniacz

Śledź nas na

discordfacebooktwitteryoutube
Wsparcie:
support@xmodhub.com
Xmod_Lily
Biznes:
dc@xmodhub.com or cathy@business.xmodhub.com
catherine_79237

Larvas Limited

Room 1201, 12/F Tai Sang Bank Building 130-132 Des Voeux Road Central HK