Skocz do zawartości
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

🔐 Ukryta Treść 🔐

 

 Dodaj na końcu swojej listy:

🔐 Ukryta Treść 🔐

 

 🗒️Podgląd implementacji:

Spoiler

image.thumb.png.ddc1bf7424be48372a64ca02596ef7a3.png

 

 Dodaj na końcu pliku

🔐 Ukryta Treść 🔐

 

 

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

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

  Dodaj

🔐 Ukryta Treść 🔐

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

🔐 Ukryta Treść 🔐

 

 Dodaj przed powyższym case

🔐 Ukryta Treść 🔐

 

 🗒️Podgląd implementacji:

Spoiler

image.thumb.png.f771ee501a2d12f0cdb4343db89cac90.png

 

 

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

 

 Dodaj na końcu pliku

🔐 Ukryta Treść 🔐

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

♻️ Zamień:

🔐 Ukryta Treść 🔐

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 Dodaj

🔐 Ukryta Treść 🔐

 

 

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

 

Wszystko w klasie

🔐 Ukryta Treść 🔐

 

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 Dodaj

🔐 Ukryta Treść 🔐

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 Dodaj

🔐 Ukryta Treść 🔐

 

 

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

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

🔐 Ukryta Treść 🔐

 

  Dodaj

🔐 Ukryta Treść 🔐

 

 

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

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 Dodaj na końcu

🔐 Ukryta Treść 🔐

 

 🗒️Podgląd implementacji:

Spoiler

image.thumb.png.c0029b5b8643f706544c837ffe311698.png

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 Dodaj na końcu:

🔐 Ukryta Treść 🔐

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 Dodaj na końcu:

🔐 Ukryta Treść 🔐

 

 🗒️Podgląd implementacji:

Spoiler

image.thumb.png.35b11de16868a3773298c6dea792f100.png

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 Dodaj na końcu:

🔐 Ukryta Treść 🔐

 

 🗒️Podgląd implementacji:

Spoiler

image.thumb.png.52ea588c98f512051a66d728cf5679b0.png

 

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

🔐 Ukryta Treść 🔐

 

 Dodaj na końcu:

🔐 Ukryta Treść 🔐

 

 🗒️Podgląd implementacji:

Spoiler

image.thumb.png.1214c8dfa6fae76cc9c3ff4f61df5133.png

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 Dodaj

🔐 Ukryta Treść 🔐

 

 

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

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 Dodaj

🔐 Ukryta Treść 🔐

 

 Dodaj na końcu pliku

🔐 Ukryta Treść 🔐

 

Pobierz efekt przywołania:

🔐 Ukryta Treść 🔐

 

Skan pliku:

🔐 Ukryta Treść 🔐

Featured Replies

Opublikowano

dzieki

  • 2 tygodnie później...
Opublikowano

Piękna rzecz 😄 lecz mam mały problem z kompilacją a robie według poradnika.
hy.PNG?ex=65574995&is=6544d495&hm=51b57f

char_item:

j1.PNG?ex=65574a03&is=6544d503&hm=8c2b98

pet_system:

j2.PNG?ex=65574a18&is=6544d518&hm=699db4

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

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

 

Błąd nr. 1:

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:

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
15 minut temu, Sevence napisał(a):

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

 

Błąd nr. 1:

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:

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:

    // 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
  • Autor

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

Opublikowano
5 minut temu, 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

Dzięki !

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...
Opublikowano
  • Premium

dzięki

  • 2 miesiące temu...
Opublikowano

Dzięki.

  • 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ę?

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