Opublikowano 30 Września 20231 r Cześć, Przedstawiam zmodyfikowaną funkcję 'SendClickItemPacket', która ma usunięty mechanizm ograniczający wysyłanie pakietów co 500 milisekund. Oznacza to, że teraz przedmioty można podnosić bez żadnego opóźnienia! Jest to ogromna zmiana, która zwiększy komfort gry i sprawi, że zbieranie przedmiotów będzie jeszcze przyjemniejsze. Zmiany: Zmieniłem typ danych z DWORD na uint32_t. Usunąłem logikę dotyczącą opóźnienia wysyłania pakietu. Zastosowałem bardziej bezpośrednie porównanie właściciela przedmiotu. Użyłem std::format dla bardziej czytelnego formatowania ciągu znaków. Zmieniłem nazwy zmiennych na bardziej pasujące 'pItemData' -> 'itemDataPtr'. Proces wysyłania pakietu jest teraz bardziej bezpośredni i niezależny od innych warunków. Domyślna wersja: Nowa wersja: Implementacja 📁 Lokalizacja pliku: 'UserInterface -> PythonPlayer.cpp' 🔍 Szukaj 🔐 Ukryta Treść 🔐 Zaloguj się lub Zarejestruj się ♻️ Zamień: 🔐 Ukryta Treść 🔐 Zaloguj się lub Zarejestruj się 📁 Lokalizacja pliku: 'UserInterface -> PythonPlayer.h' 🔍 Szukaj 🔐 Ukryta Treść 🔐 Zaloguj się lub Zarejestruj się ♻️ Zamień: 🔐 Ukryta Treść 🔐 Zaloguj się lub Zarejestruj się
Opublikowano 30 Września 20231 r Autor Tak, niedługo opublikuję poradnik z ilością sztuk wydropionego przedmiotu.
Opublikowano 30 Września 20231 r 4 godziny temu, Sevence napisał(a): Cześć, Przedstawiam zmodyfikowaną funkcję 'SendClickItemPacket', która ma usunięty mechanizm ograniczający wysyłanie pakietów co 500 milisekund. Oznacza to, że teraz przedmioty można podnosić bez żadnego opóźnienia! Jest to ogromna zmiana, która zwiększy komfort gry i sprawi, że zbieranie przedmiotów będzie jeszcze przyjemniejsze. Zmiany: Zmieniłem typ danych z DWORD na uint32_t. Usunąłem logikę dotyczącą opóźnienia wysyłania pakietu. Zastosowałem bardziej bezpośrednie porównanie właściciela przedmiotu. Użyłem std::format dla bardziej czytelnego formatowania ciągu znaków. Zmieniłem nazwy zmiennych na bardziej pasujące 'pItemData' -> 'itemDataPtr'. Proces wysyłania pakietu jest teraz bardziej bezpośredni i niezależny od innych warunków. Domyślna wersja: Nowa wersja: Implementacja 📁 Lokalizacja pliku: 'UserInterface -> PythonPlayer.cpp' 🔍 Szukaj void CPythonPlayer::SendClickItemPacket(DWORD dwIID) { if (IsObserverMode()) return; static DWORD s_dwNextTCPTime = 0; DWORD dwCurTime=ELTimer_GetMSec(); if (dwCurTime >= s_dwNextTCPTime) { s_dwNextTCPTime=dwCurTime + 500; const char * c_szOwnerName; if (!CPythonItem::Instance().GetOwnership(dwIID, &c_szOwnerName)) return; if (strlen(c_szOwnerName) > 0) if (0 != strcmp(c_szOwnerName, GetName())) { CItemData * pItemData; if (!CItemManager::Instance().GetItemDataPointer(CPythonItem::Instance().GetVirtualNumberOfGroundItem(dwIID), &pItemData)) { Tracenf("CPythonPlayer::SendClickItemPacket(dwIID=%d) : Non-exist item.", dwIID); return; } if (!IsPartyMemberByName(c_szOwnerName) || pItemData->IsAntiFlag(CItemData::ITEM_ANTIFLAG_DROP | CItemData::ITEM_ANTIFLAG_GIVE)) { PyCallClassMemberFunc(m_ppyGameWindow, "OnCannotPickItem", Py_BuildValue("()")); return; } } CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance(); rkNetStream.SendItemPickUpPacket(dwIID); } } ♻️ Zamień: void CPythonPlayer::SendClickItemPacket(uint32_t itemID) { if (IsObserverMode()) { return; } // Pobierz właściciela przedmiotu const char* rawOwnerName; if (!CPythonItem::Instance().GetOwnership(itemID, &rawOwnerName)) { return; } // Sprawdź, czy przedmiot należy do kogoś innego bool isDifferentOwner = rawOwnerName[0] != '\0' && std::strcmp(rawOwnerName, GetName()) != 0; if (isDifferentOwner) { // Pobierz dane przedmiotu CItemData* itemDataPtr; if (!CItemManager::Instance().GetItemDataPointer(CPythonItem::Instance().GetVirtualNumberOfGroundItem(itemID), &itemDataPtr)) { Tracenf(std::format("Failed to pick up item with ID {}: Item does not exist.", itemID).c_str()); return; } // Sprawdzenie, czy przedmiot można podnieść if (!IsPartyMemberByName(rawOwnerName) || itemDataPtr->IsAntiFlag(CItemData::ITEM_ANTIFLAG_DROP | CItemData::ITEM_ANTIFLAG_GIVE)) { PyCallClassMemberFunc(m_ppyGameWindow, "OnCannotPickItem", Py_BuildValue("()")); return; } } //Wysyłanie pakietu do podniesienia przedmiotu auto& rkNetStream = CPythonNetworkStream::Instance(); rkNetStream.SendItemPickUpPacket(itemID); } 📁 Lokalizacja pliku: 'UserInterface -> PythonPlayer.h' 🔍 Szukaj void SendClickItemPacket(DWORD dwIID); ♻️ Zamień: void SendClickItemPacket(uint32_t itemID); 'format': is not a member of 'std'
Opublikowano 30 Września 20231 r Autor 38 minut temu, ExoCarossa napisał(a): 'format': is not a member of 'std' Wymagany standard C++20 - https://en.cppreference.com/w/cpp/utility/format Jeśli nie masz możliwości użycia tego standardu to zmień tak: Tracenf("Failed to pick up item with ID {}: Item does not exist.", itemID);
Opublikowano 12 Marca12 Mar Działa, ale jest mały problem. Kiedy mamy cały ekwipunek i klikniemy na przedmiot LPM pojawia się 5x komunikat o braku miejsca. Przy podnoszeniu ~/Z tego nie ma.
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ą.