Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Jak zrobić własnego moda (1.3)?


_MC0Kuba0MC_

Rekomendowane odpowiedzi

Opublikowano

Witam.

Mógłby mi ktos wyjasnic jak zrobic moda do Terraria 1.3? Nigdzie nie widziałem takiego poradnika, a mam sporo pomysłów.

Pozdrawiam.

_MC0Kuba0MC_

4613f3c2a38d0d10gen.png

Opublikowano

@_MC0Kuba0MC_

W działe Terraria istniał kiedyś dział o modowaniu i tworzeniu modów, ale został usunięty. @Emo2 Musi powiedzieć, czy te poradniki zostały usunięte, czy przeniesione. Poszperaj w zakładce Poradniki w forum Terrari. Inny poradnik znajdziesz tu:

http://forums.terraria.org/index.php?threads/1-3-tmodloader-a-modding-api.23726/

9509214106901691244311.png1395334787-U625839.png

 

 

|Moderator Terraria||Mpc Champion||Blue Member|

Opublikowano

A działa to na 1.3.0.8 ? :v

Powinny działać  ;)

Porady do: CSGO, Terraria, BF4, WOT, WOT Blitz, Trove, LoL oraz Fifa!

                                                                               

                                                                                                  jClHFR0.gif

Opublikowano

Nie, TConfig dawno temu umarł. tModLoader jest wciąż rozwijany, posiada własne API które z jednej strony ogranicza modera, a z drugiej bardzo ułatwia sprawę dla początkującego, w dodatku ma kilka prostych przykładów które ułatwią naukę.

 

Terraria jest napisana w C#. Choć nie jest to zupełnie legalne, w Internecie można łatwo znaleźć jej kod źródłowy, a nawet samemu go podejrzeć używając programów typu ILSpy. Dzięki temu można napisać moda w dosłownie każdy sposób - zupełnie rekompilując .exe, w postaci pliku .dll wstrzykiwanego przez własny lub czyjś injector lub w postaci patchera. Ale ten sposób wymaga co najmniej przeciętnej znajomości języka C# i platformy XNA, gdyż pracujesz bezpośrednio w kodzie źródłowym gry. Jeśli chcesz pracować z API, do dyspozycji są jedynie nieoficjalne API (tModLoader to jedyny który znam).

 

Ciekawą alternatywą do modów mogą być pluginy TShock. Mają bardzo dobre API i świetną dokumentację do niego. Pisanie "modów" w ten sposób ma dużo plusów kosztem braku kontroli nad GUI (do dyspozycji jedynie czat oraz tekst nad głową gracza, nie widziałem żeby komuś udało się coś więcej) no i brak dostępu do plików gry, więc o nowym bossie lub itemku można zapomnieć.

Opublikowano

Nie, TConfig dawno temu umarł. tModLoader jest wciąż rozwijany, posiada własne API które z jednej strony ogranicza modera, a z drugiej bardzo ułatwia sprawę dla początkującego, w dodatku ma kilka prostych przykładów które ułatwią naukę.

 

Terraria jest napisana w C#. Choć nie jest to zupełnie legalne, w Internecie można łatwo znaleźć jej kod źródłowy, a nawet samemu go podejrzeć używając programów typu ILSpy. Dzięki temu można napisać moda w dosłownie każdy sposób - zupełnie rekompilując .exe, w postaci pliku .dll wstrzykiwanego przez własny lub czyjś injector lub w postaci patchera. Ale ten sposób wymaga co najmniej przeciętnej znajomości języka C# i platformy XNA, gdyż pracujesz bezpośrednio w kodzie źródłowym gry. Jeśli chcesz pracować z API, do dyspozycji są jedynie nieoficjalne API (tModLoader to jedyny który znam).

 

Ciekawą alternatywą do modów mogą być pluginy TShock. Mają bardzo dobre API i świetną dokumentację do niego. Pisanie "modów" w ten sposób ma dużo plusów kosztem braku kontroli nad GUI (do dyspozycji jedynie czat oraz tekst nad głową gracza, nie widziałem żeby komuś udało się coś więcej) no i brak dostępu do plików gry, więc o nowym bossie lub itemku można zapomnieć.

Czyli taki początkujący (jak ja) nie da rady napisać moda jesli nie znam języka C# i platformy XNA?

@Edit

To jak można zrobić moda z tModLoader'em?

@Edit 2

Dobrze, chyba ogarniam. Ale gdy chciałem przetestować, "Example Mod" przy instalacji przez mod sources występują błędy.

c:\Users\Kunoji\Documents\My Games\Terraria\ModLoader\Mod Sources\ExampleMod\ExamplePlayer.cs(12,31) : error CS0246: Nie można odnaleźć nazwy typu lub przestrzeni nazw „ModPlayer” (czy nie brakuje dyrektywy „using” lub odwołania do zestawu?).

c:\Users\Kunoji\Documents\My Games\Terraria\ModLoader\Mod Sources\ExampleMod\NPCs\ExampleNPCInfo.cs(6,32) : error CS0246: Nie można odnaleźć nazwy typu lub przestrzeni nazw „NPCInfo” (czy nie brakuje dyrektywy „using” lub odwołania do zestawu?).

c:\Users\Kunoji\Documents\My Games\Terraria\ModLoader\Mod Sources\ExampleMod\NPCs\PuritySpirit\PuritySpiritSky.cs(10,33) : error CS0122: Element „Terraria.Graphics.Effects.CustomSky” jest niedostępny z powodu swojego poziomu ochrony.

c:\Users\Kunoji\Documents\My Games\Terraria\ModLoader\Mod Sources\ExampleMod\NPCs\PuritySpirit\PuritySpiritSky.cs(10,15) : error CS0060: Niespójność dostępności: klasa podstawowa „Terraria.Graphics.Effects.CustomSky” jest mniej dostępna niż klasa „ExampleMod.NPCs.PuritySpirit.PuritySpiritSky”.

c:\Users\Kunoji\Documents\My Games\Terraria\ModLoader\Mod Sources\ExampleMod\Tiles\VoidSky.cs(9,25) : error CS0122: Element „Terraria.Graphics.Effects.CustomSky” jest niedostępny z powodu swojego poziomu ochrony.

c:\Users\Kunoji\Documents\My Games\Terraria\ModLoader\Mod Sources\ExampleMod\Tiles\VoidSky.cs(9,15) : error CS0060: Niespójność dostępności: klasa podstawowa „Terraria.Graphics.Effects.CustomSky” jest mniej dostępna niż klasa „ExampleMod.Tiles.VoidSky”.
 

4613f3c2a38d0d10gen.png

Opublikowano

Tak, zarówno modowanie Terrarii, TShocka jak i pisanie modów do tModLoadera odbywa się w języku C#. Niestety nie znam się na tModLoaderze i nie pomogę z tymi błędami ale na oko mody są na starszą wersję loadera. Problem jest z trzema modami, jeśli wgrałeś więcej to znaczy że niektóre działają

Opublikowano

Jest dużo kursów C#, a poznanie C# to zdecydowanie ta trudniejsza część. Jak już ogarniesz Visual Studio oraz sam język, w tym temacie (szczególnie drugi post) jest dużo przydatnych porad: http://forums.terraria.org/index.php?threads/code-examples-handy-code-snippets.28901/Dotyczą głównie tModLoadera ale widzę że jest wszystko bardzo podobne do tAPI (którego chyba na 1.3 już nie ma)

Opublikowano

Występują ciągłe błędy... Nie wiem co robię źle. Jeśli mógłby ktoś poprawić treść jednego elementu i wyłumaczyć w czym był błąd byłbym wdzięczny.
Treść: (To ma być kilof)
 

using System;
using Terraria;
using Terraria.ModLoader;
using Terraria.ID;

namespace Bloody.Items
{
	public class Kopacz : ModItem
	{
		public override void SetDefaults()
		{
			item.name = "Kopacz";
			item.damage = 20;
			item.melee = true;
			item.width = 40;
			item.height = 40;
			item.toolTip = "Kopacz wykopuje.";
			item.useTime = 10;
			item.useAnimation = 10;
			item.pick = 220;
			item.useStyle = 1;
			item.knockBack = 6;
			item.value = 10000;
			item.rare = 2;
			item.useSound = 1;
			item.autoReuse = true;
		}
		
		public override void AddRecipes()
		{
			ModRecipe recipe = new ModRecipe(mod);
			recipe.AddTile(TileID.18);
			recipe.AddIngredient(ItemID.IronBar, 1);
			recipe.SetResult(this);
			recipe.AddRecipe();
		}
	}
}

Błędy które występują:
 

c:\Users\Kunoji\Documents\My Games\Terraria\ModLoader\Mod Sources\Bloody\Items\Kopacz.cs(32,25) : error CS1026: Oczekiwano znaku ).

c:\Users\Kunoji\Documents\My Games\Terraria\ModLoader\Mod Sources\Bloody\Items\Kopacz.cs(32,28) : error CS1002: Oczekiwano średnika (

c:\Users\Kunoji\Documents\My Games\Terraria\ModLoader\Mod Sources\Bloody\Items\Kopacz.cs(32,28) : error CS1525: W wyrażeniu występuje nieprawidłowe określenie „)”.

4613f3c2a38d0d10gen.png

Opublikowano

W linii 32 zamiast TileID.18 wpisz TileID.WorkBenches

TileID.18 nie tylko nie istneieje, ale nie może istnieć, ponieważ nazwa nie może składać się z samych cyfr.

Dokumentacja: https://github.com/bluemagic123/tModLoader/wiki/Vanilla-Tile-IDs

Dziękuję. Już prawie wszystko rozumiem, tylko jedno pytanie. Gdy używam nowo zrobionego kilofa działa on podobnie jak excalibur. Gdy się go używa nie można odwrócić postaci. Jak to zmienić?

4613f3c2a38d0d10gen.png

Opublikowano

Pewnie useStyle lub useAnimation. Pokombinuj, tak wygląda oryginalny kod Excallibura:

26216145219917285227.png

Właśnie nie chciałbym by wyglądało to tak jak u excalibura, chciałbym odwrotnie. Masz może oryginalny kod jakiegoś innego mieczu albo kilofu?

4613f3c2a38d0d10gen.png

Opublikowano

Ah sorki. Nie doczytałem. Nie wiem czy mogę tu postować kod źródłowy Terrarii.

83308145219984085227.png

Wygląda na to że bool useTurn jest za to odpowiedzialne.

Opublikowano

Ah sorki. Nie doczytałem. Nie wiem czy mogę tu postować kod źródłowy Terrarii.

83308145219984085227.png

Wygląda na to że bool useTurn jest za to odpowiedzialne.

Dzięki wielkie. Tak btw. to skąd masz kod terrari? xD

4613f3c2a38d0d10gen.png

Opublikowano

Jeszcze jedno pytanie. Jak zrobić by mob spawnował się tylko po zabiciu wall of flesha (aktywowaniu hardmode)?
@Edit
A, i jak dodać drop do moba i przypisać miejsce spawnu? Nigdzie nie mogę tego znaleźć.

4613f3c2a38d0d10gen.png

Opublikowano

Musisz dodać do swojej klasy z mobem taką metodę:

public override float CanSpawn(NPCSpawnInfo spawnInfo)
{
      return Main.hardMode ? 0.5f : 0f;
}
Opublikowano

 

Musisz dodać do swojej klasy z mobem taką metodę:

public override float CanSpawn(NPCSpawnInfo spawnInfo)
{
      return Main.hardMode ? 0.5f : 0f;
}

Dzięki, a wiesz jak dopisać drop i miejsce spawnu?

4613f3c2a38d0d10gen.png

Opublikowano

Nie wiem, ale mogę sprawdzić w dokumentacji... tam naprawdę wszystko jest.

Obiekt spawnInfo klasy NPCSpawnInfo które ta powyższa metoda dostaje w argumencie zawiera wszystkie informacje na temat gdzie się ten mob próbuje zespawnić. Na tym etapie można sprawdzić czy wszystkie warunki zostały spełnione - funkcja ma zwracać dodatni float jeśli mob może się spawnić, a zero jeśli nie. Czym się różni 0.5f od na przykład 0.7f albo 1.0f - nie wiem, we wszystkich przykładach jest 0.5 więc zrobiłem to samo.

Sprawdzenie Hardmode było o tyle łatwe że nie potrzeba używać spawnInfo, bo można tą informacje łatwo odczytać ze zmiennej z Main. Może trochę uproszczę poprzedni kod, żeby zamiast podawać gotowe rozwiązania czegoś nauczyć:

 

public override float CanSpawn(NPCSpawnInfo spawnInfo)
{
     if(Main.hardMode == true)
     {
          return 0.5f;
     } else {
          return 0f;
     }
}
A tutaj kod który dodatkowo przepuszcza spawn tylko jeśli gracz znajduje się w biomie dżunglowym:

 

public override float CanSpawn(NPCSpawnInfo spawnInfo)
{
     Player gracz = spawnInfo.player;
     bool czyGraczJestWJungli = gracz.ZoneJungle;
     if(Main.hardMode == true)
     {
          if(czyGraczJestWJungli == true)
          {
               return 0.5f;
          } else {
               return 0f;
          }
     } else {
          return 0f;
     }
}
Ten kod robi to samo tylko jest trochę zwięźlej napisany:

 

public override float CanSpawn(NPCSpawnInfo spawnInfo)
{
     return Main.hardMode && spawnInfo.player.ZoneJungle ? 0.5f : 0f;
}

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...