Opublikowano 8 Października 20232 l 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:
Opublikowano 22 Października 20232 l Piękna rzecz 😄 lecz mam mały problem z kompilacją a robie według poradnika. char_item: pet_system:
Opublikowano 3 Listopada 20232 l Autor Cieszę się, że ktoś w końcu implementuje to rozwiązanie. Przeanalizujmy napotkane problemy: Błąd nr. 1: CKod został skopiowanyPetSystem.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ł skopiowanychar_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 3 Listopada 20232 l 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ł skopiowanyPetSystem.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ł skopiowanychar_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ę. 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 3 Listopada 20232 l 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 3 Listopada 20232 l 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.
Opublikowano 25 Stycznia 20242 l 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ć
Opublikowano 28 Marca 20251 r @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