Skocz do zawartości

Dołącz do społeczności Sharegon

Odkryj świat technologii, gier i programowania w Sharegon.pl 🚀

Czy jesteś pasjonatem nowych technologii, zapalonym graczem, czy aspirującym programistą? Nasza społeczność jest miejscem dla Ciebie! Tutaj możesz dzielić się swoimi pomysłami, uczestniczyć w ekscytujących dyskusjach i uczyć się od ekspertów w dziedzinie. Zdobywaj osiągnięcia, buduj swoją reputację i rywalizuj z innymi entuzjastami.

Twoja wiedza i umiejętności mogą wzbogacić naszą społeczność. Stań się częścią Sharegon! 🧩🌐

header

Rekomendowane odpowiedzi

logo1.png
_______________________________________________________________________


 

 

Cześć wszystkim 💯
Dziś mam dla was kompletny poradnik dotyczący tabeli item_attr w Metin2. Razem zgłębimy tajniki tej tabeli i dowiemy się, jak ją właściwie konfigurować. 🛠️

Zapraszam do obszernego opracowania, mam nadzieję że będzie to najlepszy poradnik analizujący tą tabelę wraz z zerkaniem do kodu źródłowego i konkretnych funkcji. 

 

📄 Rzućmy okiem na domyślną strukturę tabeli - item_attr: 

🔐 Ukryta Treść 🔐

 

Do czego służy tabela 'item_attr'? 🤔

Tabela item_attr przechowuje informacje o różnych atrybutach, które możemy przypisać do przedmiotów w grze.
Każda kolumna ma swoje unikalne znaczenie, które zaraz omówimy. 

 

Omówienie kolumn w tabeli - 'item_attr':
📌Kolumna 'apply'

Ta kolumna przechowuje nazwę typów atrybutu, które będziemy konfigurować.
Listę dostępnych atrybutów znajdziesz w pliku 'constants.cpp' pod nazwą 'c_aApplyTypeNames'.

 

📌Kolumna 'prob'

Określa, z jakim prawdopodobieństwem dany atrybut może zostać przypisany do przedmiotu.
Aby dokładnie zrozumieć, jak działa prawdopodobieństwo przydzielania atrybutu, warto zagłębić się w kod źródłowy gry.
Ale bez obaw, przybliżyłem to dla Ciebie poniżej! ⬇️

 

Analiza funkcji 'CItem::PutAttributeWithLevel (BYTE bLevel)'

Zadaniem tej funkcji jest dodanie atrybutu do przedmiotu w oparciu o określony poziom (bLevel) oraz wartości prob z tabeli 'item_attr'.

🔐 Ukryta Treść 🔐

 

Omówmy ją szczegółowo analizując konkretne fragmenty kodu:

Pobranie indeksu atrybutów:

Ta linijka pobiera indeks zestawu atrybutów na podstawie typu i podtypu przedmiotu. Jeśli, na przykład, przedmiot to broń, zwróci wartość ITEM_WEAPON.

🔐 Ukryta Treść 🔐

 

Sprawdzanie poprawności indeksu zestawu atrybutów:

Jeżeli indeks zestawu atrybutów jest nieprawidłowy lub poziom atrybutu przekroczy maksymalny dopuszczalny poziom, funkcja kończy działanie.

🔐 Ukryta Treść 🔐

 

Przygotowanie listy dostępnych atrybutów:

Funkcja przeszukuje wszystkie dostępne atrybuty i dodaje do listy avail te, które można przypisać do danego przedmiotu oraz które nie zostały jeszcze dodane.
Jednocześnie sumuje wartości prob dla tych atrybutów w zmiennej total.

🔐 Ukryta Treść 🔐

 

Losowanie atrybutu:

Funkcja przeszukuje wszystkie dostępne atrybuty i dodaje do listy avail te, które można przypisać do danego przedmiotu oraz które nie zostały jeszcze dodane.
Jednocześnie sumuje wartości prob dla tych atrybutów w zmiennej total.

🔐 Ukryta Treść 🔐

 

Wycinek z pierwszych 8 bonusów tabela item_attr:

image.png.3ca877ba0cc1566b8a818184837ed413.png

 

W kontekście podanych wartości prob dla pierwszych 8 bonusów, total wynosi 140.

 

Funkcja losuje liczbę z zakresu od 1 do total.

Następnie przegląda listę dostępnych atrybutów i próbuje znaleźć atrybut, którego wartość prob jest większa lub równa wylosowanej liczbie.

Jeśli taki atrybut zostanie znaleziony, jest on wybierany.

Jeśli nie, wartość prob dla bieżącego atrybutu jest odejmowana od wylosowanej liczby i proces jest kontynuowany z następnym atrybutem.

 

Praktyczny przykład: 

1. Obliczamy wartość 'total'

Załóżmy, że mamy 8 atrybutów (bonusów) w tabeli item_attr, każdy z określoną wartością prob. Wartości dla tych atrybutów to kolejno:

  • 35
  • 35
  • 11
  • 11
  • 11
  • 11
  • 8
  • 18

Sumując te wartości, otrzymujemy:

total = 35 + 35 + 11 + 11 + 11 + 11 + 8 + 18 = 140

 

2. Obliczenie prawdopodobieństwa dla atrybutu MAX_HP:

Załóżmy, że chcemy obliczyć prawdopodobieństwo przydzielenia atrybutu MAX_HP, którego wartość prob wynosi 35.
Aby to zrobić, dzielimy wartość prob dla MAX_HP przez total:
Obliczamy: 35/140 = 0.25

Otrzymujemy wynik 0.25, co oznacza 25% szansy na wybór atrybutu 'MAX_HP' podczas losowania. 

 

3. Proces losowania:

Teraz, podczas losowania atrybutu, załóżmy, że funkcja losująca zwróciła wartość 2 (to jest nasza wylosowana liczba prob). Rozpoczynamy iterację przez listę dostępnych atrybutów, by zdecydować, który z nich zostanie wybrany. Kiedy trafiamy na atrybut MAX_HP z wartością prob, którą wcześniej obliczyliśmy - wynoszącą 25, porównujemy ją z naszym wylosowanym numerem:

🔐 Ukryta Treść 🔐


Warunek jest spełniony, co oznacza, że atrybut MAX_HP zostanie wybrany w tym losowaniu.

 

4. Dodawanie wylosowanego atrybutu:

Jeżeli funkcja znalazła odpowiedni atrybut, dodaje go do przedmiotu z określonym poziomem (bLevel).
Jeżeli wartość bLevel przekroczy maksymalny dopuszczalny poziom dla danego atrybutu, jest ona dostosowywana.

🔐 Ukryta Treść 🔐

 

 

Mając już za sobą analizę prawdopodobieństwa wyboru poszczególnych atrybutów, możemy teraz zagłębić się w kolejny aspekt - poziomy atrybutów.
Zrozumienie, jak działają różne poziomy atrybutów, pozwoli nam lepiej dostosować ich wartości w naszej grze. 🌟 Przyjrzyjmy się więc bliżej tej kwestii.

 

📌Kolumny 'lv0' do 'lv5'

Te kolumny określają wartości atrybutów dla poszczególnych poziomów. Dzięki nim możesz dostosować wartość bonusu dla danego poziomu atrybutu.

 

Przykład: 

Bonus: inteligencja

Możliwe wartości do wylosowania: 2, 4, 6 ,8 i 12

 

Analiza funkcji zmiany atrybutów: CItem::ChangeAttribute

Funkcja CItem::ChangeAttribute służy do modyfikowania atrybutów przedmiotu w oparciu o zdefiniowane prawdopodobieństwa.

🔐 Ukryta Treść 🔐

 

Zróbmy analizę głównych etapów działania funkcji:

 

1. Określamy liczby atrybutów:

Funkcja GetAttributeCount() zwraca aktualną liczbę atrybutów przypisanych do przedmiotu.

🔐 Ukryta Treść 🔐

 

2. Czyszczenie istniejących atrybutów:

Wszystkie obecne atrybuty przedmiotu zostają usunięte.

🔐 Ukryta Treść 🔐

 

3. Definicja domyślnych prawdopodobieństw:

🔐 Ukryta Treść 🔐

 

Tablica 'tmpChangeProb' określa domyślne prawdopodobieństwa przydzielenia danego poziomu atrybutu przedmiotowi podczas miksowania.
Ta tablica jest używana jako standardowy wybór, chyba że dostarczono alternatywną tablicę 'aiChangeProb'.

 

Możliwe jest, że zastanawiasz się, do czego służy tablica 'aiChangeProb'. Jest to alternatywna tablica prawdopodobieństw, która może być używana w specjalnych okolicznościach.
Przykładem może być sytuacja, gdy przedmiot jest miksowany zaczarowaniem przedmiotu (zwykłym).
W takim przypadku, zamiast korzystać z domyślnego 'tmpChangeProb', używana jest tablica 'aiChangeProb' - dostosowując prawdopodobieństwa dla konkretnej sytuacji, takiej jak zaczarowanie przedmiotu.

 

Przykład 'aiChangeProb' podczas zaczarowania przedmiotu mamy taką tablicę:

🔐 Ukryta Treść 🔐

 

Och, pierwsze dwie wartości w tablicy to 0, co oznacza 0% szansy. Oznacza to, że podczas losowania poziomy lv1 i lv2 są pomijane.
W praktyce, podczas zaczarowywania przedmiotu, losowane są tylko wartości od poziomu lv3 do lv5, z prawdopodobieństwami odpowiednio: 30%, 40% i 3% dla poziomu lv5.
Oczywiście można to swobodnie modyfikować lub nawet stworzyć zupełnie nową tablicę, która będzie definiować inny typ modyfikacji.
Na przykład, tablica może być skonfigurowana tak, aby ustawiać wyłącznie wartości dla poziomu lv5.
Jeśli zdecydujemy się ustawić w tablicy dla poziomów lv1 do lv4 wartość 0%, wówczas podczas losowania będą brane pod uwagę tylko wartości z poziomu lv5.

 

 

📌Kolumny określające typy przedmiotów

Pozostały nam kolumny określające typy przedmiotów. Wskazują one maksymalną wartość poziomu, która może zostać przypisana danemu typowi przedmiotu.
Na przykład, jeśli dla typu "weapon" mamy wartość 5, oznacza to, że do przedmiotu tego typu mogą zostać przypisane wszystkie poziomy od lv1 do lv5.
Jeśli jednak wartość dla danego typu przedmiotu wynosi 0, oznacza to, że dany bonus nie może zostać przypisany do przedmiotu tego typu.
Wartość 3 z kolei oznacza, że możliwe są tylko poziomy od lv1 do lv3.

 

Z pewnością wiecie, co oznaczają te nazwy, ale pozwolę sobie je jeszcze opisać:

  • Weapon - broń 🗡️
  • Body - zbroja 🛡️
  • Wrist - bransoleta 
  • Foots - buty 👟
  • Neck - naszyjnik 📿
  • Head - hełm ⛑️
  • Shield - tarcza 🛡️
  • Ear - kolczyki 💍

 

Oczywiście, można rozbudować tę listę o dodatkowe typy, ale wymaga to pewnych modyfikacji w kodzie źródłowym podczas inicjalizacji tabeli.

 

Mam nadzieję, że udało mi się w prosty sposób wytłumaczyć, jak modyfikować tabelę 'Item_attr'.


Dziękuję za uwagę, Sevence 🙂

  • Lubię 9
  • Dzięki 1
  • Lubię 9
  • Dzięki 1
Odnośnik do komentarza
https://sharegon.pl/topic/115-kompletny-przewodnik-po-tabeli-item_attr/
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...