Przejdź do głównej zawartości

Mój pierwszy przedmiot

W tym poradniku nauczysz się tworzyć przedmioty w języku Daedalus - od miecza, przez mikstury, po jedzenie.

Klasa C_Item - co definiuje przedmiot?

Każdy przedmiot w Gothic to instancja klasy C_Item. Najważniejsze pola:

PoleTypOpis
namestringNazwa wyświetlana w grze
mainflagintGłówna kategoria (broń, zbroja, mikstura...)
flagsintTyp szczegółowy (miecz, topór, łuk...)
valueintWartość w złocie
visualstringModel 3D (*.3DS)
materialintMateriał (metal, drewno, szkło...)
damageTotalintŁączne obrażenia (broń)
damagetypeintTyp obrażeń (sieczne, obuchowe...)
rangeintZasięg broni
protection[]int[]Ochrona (zbroje)
cond_atr[]int[]Wymagane atrybuty do użycia
cond_value[]int[]Wymagane wartości atrybutów
on_state[]func[]Funkcje wywoływane przy użyciu
descriptionstringOpis w menu ekwipunku
TEXT[] / COUNT[]string[]/int[]Linie opisu w tooltipie

Kategorie przedmiotów (mainflag)

StałaOpis
ITEM_KAT_NFBroń biała (melee)
ITEM_KAT_FFBroń dystansowa
ITEM_KAT_ARMORZbroja
ITEM_KAT_FOODJedzenie
ITEM_KAT_POTIONSMikstury
ITEM_KAT_DOCSDokumenty
ITEM_KAT_RUNERuny i zwoje
ITEM_KAT_NONEInne (złoto, klucze, mission items)

Przykład 1: Broń biała (miecz)

Utwórz plik lub dodaj instancję do Items/IT_Melee_Weapons.d:

instance ItMw_Miecz_Konrada (C_Item)
{
name = "Miecz Konrada";

// --- Kategoria ---
mainflag = ITEM_KAT_NF;
flags = ITEM_SWD;
material = MAT_METAL;

// --- Statystyki ---
damageTotal = 35;
damagetype = DAM_EDGE;
range = 100;

// --- Wymagania ---
cond_atr[2] = ATR_STRENGTH;
cond_value[2] = 20;

// --- Wartość ---
value = 250;

// --- Model 3D ---
visual = "ItMw_025_1h_sld_sword_01.3DS";

// --- Tooltip (opis w ekwipunku) ---
description = name;
TEXT[2] = NAME_Dam_Edge; COUNT[2] = damageTotal;
TEXT[3] = NAME_Str_needed; COUNT[3] = cond_value[2];
TEXT[5] = NAME_Value; COUNT[5] = value;
};
PoleWartośćOpis
name"Miecz Konrada"Nazwa wyświetlana w grze
mainflagITEM_KAT_NFKategoria: broń biała
flagsITEM_SWDMiecz jednoręczny
materialMAT_METALMetal (wpływa na dźwięk)
damageTotal3535 punktów obrażeń
damagetypeDAM_EDGEObrażenia sieczne
range100Zasięg ataku w jednostkach
cond_atr[2]ATR_STRENGTHWymaga atrybutu siły
cond_value[2]20Minimum 20 siły do użycia
value250Wartość 250 złota
visual"ItMw_025_1h_sld_sword_01.3DS"Plik modelu 3D
descriptionnameNagłówek tooltipa = nazwa itemu
TEXT/COUNT-Linie tooltipa w ekwipunku
informacja

Pole flags określa typ broni: ITEM_SWD (miecz 1H), ITEM_AXE (topór 1H), ITEM_2HD_SWD (miecz 2H), ITEM_2HD_AXE (topór 2H).

Przykład 2: Mikstura

instance ItPo_Zdrowie_Konrada (C_Item)
{
name = "Mikstura zdrowia Konrada";

// --- Kategoria ---
mainflag = ITEM_KAT_POTIONS;
flags = ITEM_MULTI;

// --- Wartość i wygląd ---
value = 75;
visual = "ItPo_Health_01.3ds";
material = MAT_GLAS;

// --- Efekt użycia ---
on_state[0] = Use_ItPo_Zdrowie_Konrada;
scemeName = "POTIONFAST";
wear = WEAR_EFFECT;
effect = "SPELLFX_HEALTHPOTION";

// --- Tooltip ---
description = name;
TEXT[1] = NAME_Bonus_HP; COUNT[1] = 100;
TEXT[5] = NAME_Value; COUNT[5] = value;
};

func void Use_ItPo_Zdrowie_Konrada ()
{
Npc_ChangeAttribute (self, ATR_HITPOINTS, 100);
};
PoleWartośćOpis
name"Mikstura zdrowia Konrada"Nazwa wyświetlana w grze
mainflagITEM_KAT_POTIONSKategoria: mikstury
flagsITEM_MULTIPrzedmiot stackowalny
value75Wartość 75 złota
visual"ItPo_Health_01.3ds"Plik modelu 3D
materialMAT_GLASSzkło (dźwięk przy podnoszeniu)
on_state[0]Use_ItPo_Zdrowie_KonradaFunkcja wywoływana przy użyciu
scemeName"POTIONFAST"Animacja picia
wearWEAR_EFFECTWłącza efekt wizualny przy użyciu
effect"SPELLFX_HEALTHPOTION"Efekt wizualny odtwarzany przy użyciu
descriptionnameNagłówek tooltipa = nazwa itemu
TEXT[1]/COUNT[1]+100 HPTooltip: bonus do zdrowia
TEXT[5]/COUNT[5]valueTooltip: wartość przedmiotu
Npc_ChangeAttribute(self, ATR_HITPOINTS, 100)-Przywraca 100 HP przy użyciu
wskazówka

ITEM_MULTI sprawia, że przedmioty tego samego typu stackują się w ekwipunku (zamiast zajmować osobne sloty).

Przykład 3: Jedzenie

instance ItFo_Chleb_Konrada (C_Item)
{
name = "Chleb Konrada";
mainflag = ITEM_KAT_FOOD;
flags = ITEM_MULTI;
value = 10;
visual = "ItFo_Bread.3ds";
material = MAT_LEATHER;

on_state[0] = Use_ItFo_Chleb_Konrada;
scemeName = "FOOD";

description = name;
TEXT[1] = NAME_Bonus_HP; COUNT[1] = 15;
TEXT[5] = NAME_Value; COUNT[5] = value;
};

func void Use_ItFo_Chleb_Konrada ()
{
Npc_ChangeAttribute (self, ATR_HITPOINTS, 15);
};
PoleWartośćOpis
name"Chleb Konrada"Nazwa wyświetlana w grze
mainflagITEM_KAT_FOODKategoria: jedzenie
flagsITEM_MULTIPrzedmiot stackowalny
value10Wartość 10 złota
visual"ItFo_Bread.3ds"Plik modelu 3D
materialMAT_LEATHERMateriał (wpływa na dźwięki)
on_state[0]Use_ItFo_Chleb_KonradaFunkcja wywoływana przy użyciu
scemeName"FOOD"Animacja jedzenia
descriptionnameNagłówek tooltipa = nazwa itemu
TEXT[1]/COUNT[1]+15 HPTooltip: bonus do zdrowia
TEXT[5]/COUNT[5]valueTooltip: wartość przedmiotu
Npc_ChangeAttribute(self, ATR_HITPOINTS, 15)-Przywraca 15 HP przy użyciu

Dawanie przedmiotu NPC

Aby NPC miał przedmiot w ekwipunku, użyj w definicji NPC:

EquipItem (self, ItMw_Miecz_Konrada);
CreateInvItems (self, ItPo_Zdrowie_Konrada, 5);
CreateInvItems (self, ItFo_Chleb_Konrada, 3);
CreateInvItems (self, ItMi_Gold, 100);
WywołanieOpis
EquipItem(self, ItMw_Miecz_Konrada)Zakłada przedmiot (broń/zbroję)
CreateInvItems(self, ItPo_Zdrowie_Konrada, 5)5 mikstur w plecaku
CreateInvItems(self, ItFo_Chleb_Konrada, 3)3 chleby w plecaku
CreateInvItems(self, ItMi_Gold, 100)100 sztuk złota
ostrzeżenie

EquipItem automatycznie zakłada przedmiot (NPC będzie trzymał broń lub nosił zbroję). CreateInvItems tylko dodaje do ekwipunku.

Rejestracja w Gothic.src

Dodaj plik z przedmiotami do Gothic.src - przed definicjami NPC:

Items\IT_Melee_Weapons.d
Items\IT_Potions.d
Items\IT_Food.d

Podsumowanie

Tworzenie przedmiotów wymaga:

  1. Instancji klasy C_Item z odpowiednim mainflag i flags
  2. Ustawienia statystyk (obrażenia, ochrona, wymagania)
  3. Podania modelu 3D (.3DS)
  4. Dla przedmiotów używalnych - funkcji on_state zmieniającej atrybuty
  5. Tooltipa (TEXT/COUNT) do wyświetlania informacji w grze
  6. Rejestracji w Gothic.src