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

Naprawa błędu usuwania postaci – postać nie jest usuwana z gildii i komentarze pozostają

Featured Replies

Opublikowano

image.png.a144663d4007d16872d3413c4a1a8bf3.png

 

Cześć,

 

Opis problemu

Dzisiaj, po zgłoszeniu przez , odkryliśmy poważny błąd. który dotyczy nie tylko EntryCore, ale wszystkich źródeł. Do tej pory nie wydano publicznie poprawki. Podczas usuwania postaci, rekord dotyczący członków gildii są czyszczone jedynie w bazie danych, bez przesyłania odpowiednich informacji do serwera i klienta gry. W rezultacie gracz pozostaje w gildii aż do restartu serwera, a jego komentarze nigdy nie zostają usunięte.

 

Przyczyna problemu

Podczas usuwania postaci nie jest przesyłany odpowiedni pakiet do serwera gry, który powinien informować o konieczności usunięcia komentarzy gildii powiązanych z tą postacią. W efekcie zmiany są wprowadzane tylko w bazie danych, co prowadzi do niespójności danych między serwerem gry a bazą danych.

 

Dziękuję za zgłoszenie i pomoc w odkryciu tego problemu. 🙏

 

Aktualizacja

  • Rozwiązano problem z usuwaniem wszystkim komentarzy zamiast tylko postaci, która została usunięta,
  • Wdrożono automatyczne odświeżanie komentarzy po usunięciu postaci,
  • Nowa funkcja pobierająca nazwą gracza przez id 'GetCharacterName',
  • Teraz usuwanie w kliencie gry będzie wysyłać zmiany do wszystkich gracz gildii., 
  • Dodawanie komentarza jest wysyłane do wszystkich aktywnych członków gildii,

 

Prezentacja błędu

 

Prezentacja rozwiązania

 

Aktualizacja

 

Implementacja

📂Lokalizacja pliku: 'common -> tables.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

 

 🔍Szukaj

 

 Dodaj

 

 

📂Lokalizacja pliku: 'db -> ClientManagerGuild.cpp'

 

🔍Szukaj

 

Dodaj

 

 

📂Lokalizacja pliku: 'db -> ClientManager.h'

 

🔍Szukaj

 

Dodaj

 

 

📂Lokalizacja pliku: 'db -> ClientManagerPlayer.cpp'

 

🔍Szukaj

 

 

Dodaj

 

 

📂Lokalizacja pliku: 'game -> input_db.cpp'

 

🔍Szukaj

 

Dodaj

 

 🔍Szukaj

 

 Dodaj

 

 

📂Lokalizacja pliku: 'game -> input.h'

 

🔍Szukaj

 

Dodaj

 

 

📂Lokalizacja pliku: 'game -> guild.cpp'

 

🔍Szukaj

 


♻️Zamień

 

 🔍Szukaj

 

Dodaj

 

🔍Szukaj

 

 

♻️Zamień

 

 

Wersja dla EntryCore

 

 🔍Szukaj

 

 ♻️Zamień

 

 

📂Lokalizacja pliku: 'game -> guild.h'

 

🔍Szukaj

 

Dodaj

 

 

 📂Lokalizacja pliku: 'UserInterface -> PythonNetworkStreamPhaseGame.cpp'

 

🔍Szukaj

 

 

Dodaj

 

 

 📂Lokalizacja pliku: 'root -> game.py'

 

🔍Szukaj

 

Dodaj

 

 

 📂Lokalizacja pliku: 'root -> interfacemodule.py'

 

🔍Szukaj

 

Dodaj

 

 

Enjoy 😉

 

Opublikowano
Spoiler

guild.cpp:1042:95: error: use of undeclared identifier 'query'
        DBManager::instance().FuncAfterQuery(std::bind(&CGuild::RefreshCommentsForAllMembers, this), query.c_str());

Moge usunać query skoro i tak go nie ma w funkcji czy trzeba inaczej to zrobić?

Edytowane przez ExoCarossa

Opublikowano
W dniu 27.05.2024 o 07:12, Sevence napisał(a):

Pokaż swoją funkcję 'AddComment'. 

Spoiler
Spoiler

 

Opublikowano
  • Autor

Sprawdź tak: 

CKod został skopiowany
void CGuild::AddComment(LPCHARACTER ch, const std::string& str){	auto now = std::chrono::steady_clock::now();	if (now - lastCommentTime < FloodProtectionInterval)	{		auto remainingTime = std::chrono::duration_cast<std::chrono::seconds>(FloodProtectionInterval - (now - lastCommentTime)).count();		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("NOTIFICATION_ADD_COMMEND_GUILD_FLOOD_PROTECTION_%lld"), remainingTime);		return;	} 	lastCommentTime = now;  	if (str.length() > GUILD_COMMENT_MAX_LEN)		return; 	if (checkForWhitespaceOnlyOrEmpty(str))	{		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("NOTIFICATION_EMPTY_COMMENT_GUILD"));		return;	} 	char text[GUILD_COMMENT_MAX_LEN * 2 + 1];	DBManager::instance().EscapeString(text, sizeof(text), str.c_str(), str.length()); 	char query[1024];	snprintf(query, sizeof(query),			 "INSERT INTO guild_comment%s (guild_id, name, notice, content, time) VALUES (%u, '%s', %d, '%s', NOW())", 			 get_table_postfix(), m_data.guild_id, ch->GetName(), (str[0] == '!') ? 1 : 0, text); 	DBManager::instance().FuncAfterQuery(std::bind(&CGuild::RefreshCommentsForAllMembers, this), query);}

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.