Skocz do zawartości

Featured Replies

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ść 🔐

 

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'

  • 4 miesiące temu...
  • 2 tygodnie później...
  • 2 tygodnie później...
  • 11 miesięcy temu...

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