Skocz do zawartości
Opublikowano

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:

instant-pickup-unfast-ex.gif

 

Nowa wersja:

intant-pick-ex.gif

 

 

Implementacja

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

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

♻️ Zamień:

🔐 Ukryta Treść 🔐

 

 

📁 Lokalizacja pliku: 'UserInterface -> PythonPlayer.h'

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

♻️ Zamień:

🔐 Ukryta Treść 🔐

 

Featured Replies

Opublikowano

pięknie, ilość szt na ziemii też masz w zanadrzu?

Opublikowano
  • Autor

Tak, niedługo opublikuję poradnik z ilością sztuk wydropionego przedmiotu. 

Opublikowano
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:

instant-pickup-unfast-ex.gif

 

Nowa wersja:

intant-pick-ex.gif

 

 

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

Dzięki!

  • 4 miesiące temu...
Opublikowano

thx

  • 2 tygodnie później...
Opublikowano

x

Edytowane przez avilui
przypadkowy komentarz

  • 2 tygodnie później...
Opublikowano

Bardzo Ci dziękuję za pomoc!

 

  • 11 miesięcy temu...
Opublikowano
  • Premium

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

Gość
Dodaj odpowiedź do tematu...