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ę.

Nowy typ przedmiotu umożliwiający przywoływanie zwierzaków bez questa

Featured Replies

Opublikowano

Witajcie!

 

Dziś podzielę się z Wami pewnym innowacyjnym rozwiązaniem, które z pewnością zainteresuje wielu z Was, zwłaszcza tych, którzy pracują nad własnym serwerem. To nowy typ przedmiotu dla zwierzaków, który wprowadziłem w entry-core. Ten typ przedmiotu jest również obecny na oficjalnym serwerze i przynosi pewne udogodnienia, które warto uwzględnić w Waszych projektach. Główną zaletą jest możliwość ładowania modelu zwierzaka bezpośrednio z kolumny 'value0' w pieczęci.

 

Co to oznacza w praktyce?

Żegnajcie z uciążliwymi questami służącymi do tego samego celu! Teraz zarządzanie systemem petów staje się znacznie łatwiejsze i bardziej intuicyjne.

Jeżeli macie pytania, sugestie czy chcielibyście podzielić się własnymi doświadczeniami z implementacją tego rozwiązania, śmiało! Czekam z niecierpliwością na Wasze komentarze i opinie.

 

Prezentacja:

 

Implementacja:

📁 Lokalizacja pliku: 'common -> item_length.h'

 

 🔍 Szukaj

Tylko zalogowani Zaloguj się, aby wyświetlić chronioną treść Ten post zawiera treści dostępne tylko dla członków. Zaloguj się lub utwórz konto, aby odblokować całą zawartość tego posta. Zaloguj się Utwórz konto

 

 Dodaj na końcu swojej listy:

 

 🗒️Podgląd implementacji:

Spoiler

 

 Dodaj na końcu pliku

 

 

📁 Lokalizacja pliku: 'game -> char_item.cpp'

 

 🔍 Szukaj

 

  Dodaj

 

 🔍 Szukaj

 

 

 Dodaj przed powyższym case

 

 🗒️Podgląd implementacji:

Spoiler

 

 

📁 Lokalizacja pliku: 'game -> PetSystem.cpp'

 

 Dodaj na końcu pliku

 

 🔍 Szukaj

 

♻️ Zamień:

 

 🔍 Szukaj

 

 Dodaj

 

 

📁 Lokalizacja pliku: 'game -> PetSystem.h'

 

Wszystko w klasie

 

 

 🔍 Szukaj

 

 Dodaj

 

 🔍 Szukaj

 

 Dodaj

 

 

 📁 Lokalizacja pliku: 'game -> mob_manager.h'

 

 🔍 Szukaj

 

 

  Dodaj

 

 

📁 Lokalizacja pliku: 'db -> ProtoReader.cpp'

 

 🔍 Szukaj

 

 Dodaj na końcu

 

 🗒️Podgląd implementacji:

Spoiler

 

 🔍 Szukaj

 

 Dodaj na końcu:

 

 🔍 Szukaj

 

 Dodaj na końcu:

 

 🗒️Podgląd implementacji:

Spoiler

 

 🔍 Szukaj

 

 Dodaj na końcu:

 

 🗒️Podgląd implementacji:

Spoiler

 

Numery typów muszą być zgodne z Twoim src u Ciebie mogą się one różnić! 

To samą czynność musisz wykonać w swoim packerze proto aby obsługiwał nowy typ przedmiotu. 

 

 

📁 Lokalizacja pliku: 'GameLib-> ItemData.h'

 

 🔍 Szukaj

 

 Dodaj na końcu:

 

 🗒️Podgląd implementacji:

Spoiler

 

 🔍 Szukaj

 

 Dodaj

 

 

📁 Lokalizacja pliku: 'UserInterface-> PythonItemModule.cpp'

 

 🔍 Szukaj

 

 Dodaj

 

 Dodaj na końcu pliku

 

Pobierz efekt przywołania:

 

Skan pliku:

  • 2 tygodnie później...
  • 2 tygodnie później...
Opublikowano
  • Autor

Cieszę się, że ktoś w końcu implementuje to rozwiązanie. Przeanalizujmy napotkane problemy:

 

Błąd nr. 1:

CKod został skopiowany
PetSystem.cpp:666:59: error: no member named 'GetLocaleName' in 'CMob' const std::string_view petName = (pkMob) ? pkMob->GetLocaleName() : "";

 

Komunikat ten wskazuje, że w klasie CMob brakuje definicji metody GetLocaleName. Tak, to mój błąd - nie dodałem jej wcześniej. Znajdziesz potrzebną deklarację w zaktualizowanej sekcji mob_manager.h w poradniku.

 

Błąd nr. 2:

CKod został skopiowany
char_item.cpp:5352:13: error: member access into incomplete type 'CPetSystem'petSystem->HandlePetItem(item);./char.h:18:7: note: forward declaration of 'CPetSystem' class CPetSystem;

 

W pliku char_item.cpp jest próba wywołania metody HandlePetItem z niekompletnie zdefiniowanej klasy CPetSystem, co mówi, że w char.h znajduje się tylko deklaracja tej klasy.

Rozwiązaniem jest dołączenie pełnej definicji CPetSystem. Zaktualizowałem sekcję w char_item.cpp w poradniku. 

 

W razie dalszych problemów, śmiało pisz – chętnie pomogę.

Opublikowano
W dniu 3.11.2023 o 11:31, Sevence napisał(a):

Cieszę się, że ktoś w końcu implementuje to rozwiązanie. Przeanalizujmy napotkane problemy:

 

Błąd nr. 1:

CKod został skopiowany
PetSystem.cpp:666:59: error: no member named 'GetLocaleName' in 'CMob' const std::string_view petName = (pkMob) ? pkMob->GetLocaleName() : "";

 

Komunikat ten wskazuje, że w klasie CMob brakuje definicji metody GetLocaleName. Tak, to mój błąd - nie dodałem jej wcześniej. Znajdziesz potrzebną deklarację w zaktualizowanej sekcji mob_manager.h w poradniku.

 

Błąd nr. 2:

CKod został skopiowany
char_item.cpp:5352:13: error: member access into incomplete type 'CPetSystem'petSystem->HandlePetItem(item);./char.h:18:7: note: forward declaration of 'CPetSystem' class CPetSystem;

 

W pliku char_item.cpp jest próba wywołania metody HandlePetItem z niekompletnie zdefiniowanej klasy CPetSystem, co mówi, że w char.h znajduje się tylko deklaracja tej klasy.

Rozwiązaniem jest dołączenie pełnej definicji CPetSystem. Zaktualizowałem sekcję w char_item.cpp w poradniku. 

 

W razie dalszych problemów, śmiało pisz – chętnie pomogę.

image.png?ex=65575065&is=6544db65&hm=348

Teraz taki błąd występuje po dodaniu.

A tu questlua_pet:

CKod został skopiowany
    // syntax: pet.unsummon(mob_vnum)    int pet_unsummon(lua_State* L)    {        LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();        CPetSystem* petSystem = ch->GetPetSystem();         if (0 == petSystem)            return 0;         // ĽŇČŻĽöŔÇ vnum        DWORD mobVnum= lua_isnumber(L, 1) ? lua_tonumber(L, 1) : 0;         petSystem->Unsummon(mobVnum);        return 1;    }

 

Opublikowano
W dniu 3.11.2023 o 11:46, Sevence napisał(a):

Ten błąd wskazuje na to, że w klasie CPetSystem brakuje definicji metody UnSummon, podczas gdy w pliku questlua_pet.cpp jest do niej odwołanie.

Sprawdź, czy nie usunąłeś przypadkiem metody UnSummon z klasy CPetSystem. W dostarczonym poradniku nie było mowy o usuwaniu. 😁

Problem rozwiązany, po prostu funkcje 


void CPetSystem::Unsummon(DWORD vnum, bool bDeleteFromList)

po niej miałem DODAĆ : void CPetSystem::UnsummonAllPets()

A ja ją zamieniłem, moje niedopatrzenie.

  • 2 miesiące temu...
Opublikowano

Dziekuje

 

Jeśli ktoś to będzie w przyszłości implementował, pamiętajcie o edycji i dopisaniu nowego typu przedmiotu w dump proto i skompilować :ok

  • 1 miesiąc temu...
  • 2 miesiące temu...
  • 8 miesięcy temu...
  • 1 miesiąc temu...
Opublikowano

@Sevence Czyli jak przy standardowej wersji petów (quest) idzie zrobić nieodwoływanie peta po dedzie/teleportacji poprzez qf, w tym przypadku trzeba to zrobić wyłącznie w src, na własną rękę?

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.