Skocz do zawartości
Masz już aplikację Sharegon?

Odkryj wszystkie możliwości. Dowiedz się więcej

Sharegon.pl

Zainstaluj aplikację Sharegon i korzystaj z powiadomień push oraz licznika nowych aktywności bezpośrednio z ekranu głównego.

Aby zainstalować tę aplikację na iOS i iPadOS.
  1. Tap the Share icon in Safari
  2. Przewiń menu i stuknij Dodaj do ekranu początkowego.
  3. Stuknij Dodaj w prawym górnym rogu.
Zainstaluj aplikację Sharegon na Androidzie
  1. Otwórz Sklep Google Play na swoim smarfonie.
  2. Wyszukaj „Sharegon” w pasku wyszukiwania.
  3. Stuknij „Zainstaluj”, aby pobrać aplikację.

Szybsze podnoszenie przedmiotów

Nieaktywny

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'

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);

 

  • 4 miesiące temu...
  • 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...

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Konto

Nawigacja

Skonfiguruj powiadomienia push w przeglądarce.

Chrome (Android)
  1. Stuknij ikonę kłódki obok paska adresu.
  2. Wybierz Uprawnienia → Powiadomienia.
  3. Dostosuj swoje preferencje.
Chrome (Desktop)
  1. Kliknij ikonę kłódki na pasku adresu.
  2. Wybierz Ustawienia witryny.
  3. Znajdź Powiadomienia i dostosuj swoje preferencje.