Skocz do zawartości
Masz już aplikację Sharegon?

Odkryj wszystkie możliwości. Dowiedz się więcej

Sharegon.pl

Zainstaluj aplikację Sharegon i korzystaj z powiadomień push oraz licznika nowych aktywności bezpośrednio z ekranu głównego.

Aby zainstalować tę aplikację na iOS i iPadOS.
  1. Tap the Share icon in Safari
  2. Przewiń menu i stuknij Dodaj do ekranu początkowego.
  3. Stuknij Dodaj w prawym górnym rogu.
Zainstaluj aplikację Sharegon na Androidzie
  1. Otwórz Sklep Google Play na swoim smarfonie.
  2. Wyszukaj „Sharegon” w pasku wyszukiwania.
  3. Stuknij „Zainstaluj”, aby pobrać aplikację.

Kompletny przewodnik po tabeli 'item_attr'

Nieaktywny

Featured Replies

Opublikowano

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 🙂

Opublikowano

Bardzo obszerny poradnik, dzięki! 🙂 Tego mi brakowało na innych forach. 🍻

  • 4 miesiące temu...

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Konto

Nawigacja

Skonfiguruj powiadomienia push w przeglądarce.

Chrome (Android)
  1. Stuknij ikonę kłódki obok paska adresu.
  2. Wybierz Uprawnienia → Powiadomienia.
  3. Dostosuj swoje preferencje.
Chrome (Desktop)
  1. Kliknij ikonę kłódki na pasku adresu.
  2. Wybierz Ustawienia witryny.
  3. Znajdź Powiadomienia i dostosuj swoje preferencje.