Opublikowano 5 Lutego5 Lut Siema ostatnio dodałem se menadżera eventow od dracarysa i mam problem, komenda nie działa. Wpisuje komendę /event_manager update i nic się nie dzieje, okno jak puste tak dalej jest , dopiero po restarcie serwera załapuje. Pliki to marty sama 5.8 a system wyciągałem z plików ava2. Mam też paczkę z neta ale ten kod praktycznie identyczny. Z góry dzięki za pomoc ❤️
Opublikowano 5 Lutego5 Lut Godzinę temu, Av3rneS napisał(a): Siema ostatnio dodałem se menadżera eventow od dracarysa i mam problem, komenda nie działa. Wpisuje komendę /event_manager update i nic się nie dzieje, okno jak puste tak dalej jest , dopiero po restarcie serwera załapuje. Pliki to marty sama 5.8 a system wyciągałem z plików ava2. Mam też paczkę z neta ale ten kod praktycznie identyczny. Z góry dzięki za pomoc ❤️ Szklana kula mówi ze czegoś brakuje
Opublikowano 5 Lutego5 Lut Autor 8 minut temu, Kamil506 napisał(a): Szklana kula mówi ze czegoś brakuje Tylko pytanie czego, w syslogu normalnie widnieje że komenda została użyta
Opublikowano 5 Lutego5 Lut 45 minut temu, Av3rneS napisał(a): Tylko pytanie czego, w syslogu normalnie widnieje że komenda została użyta Syssery wszedzie sprawdzone? Syslog w momencie wywolania komendy sprawdzony?
Opublikowano 5 Lutego5 Lut Autor Teraz, Kamil506 napisał(a): Syssery wszedzie sprawdzone? Syslog w momencie wywolania komendy sprawdzony? Ta, wszędzie czysto w syssersch, w syslogach widnieje że komenda została wywołana ale bez skutku.
Opublikowano 5 Lutego5 Lut 40 minut temu, Av3rneS napisał(a): Ta, wszędzie czysto w syssersch, w syslogach widnieje że komenda została wywołana ale bez skutku. No to pozostaje szklana kula albo dodac od nowa
Opublikowano 5 Lutego5 Lut To dołącz kod systemu o którym mowa w jaki sposób liczysz że ktoś ci pomoże bez dołączenia kodu? Może mamy jeszcze szukać w necie system, który sobie dodałeś i rozkminiać czy to ten czy może inny.
Opublikowano 6 Lutego6 Lut Autor 11 godzin temu, Sevence napisał(a): To dołącz kod systemu o którym mowa w jaki sposób liczysz że ktoś ci pomoże bez dołączenia kodu? Może mamy jeszcze szukać w necie system, który sobie dodałeś i rozkminiać czy to ten czy może inny. Już podrzucam go event_manager.rar
Opublikowano 6 Lutego6 Lut Zerknąłem kod i musimy sprawdzić parę kwestii z tego co widać ta komenda wysyła pakiet do DB. Trzeba będzie się zorientować, czy on w ogóle jest wysyłany i odbierany poprawnie przez proces DB to tak na sam początek. Pamiętaj, że kolejność pakietów ma znaczenie zwłaszcza gdy nie jest do niego przypisana konkretna stała wartość. Nie mniej zawsze staraj się zachować taką samą strukturę. Do rzeczy, pakiet HEADER_GD_EVENT_MANAGER wywołuje funkcję w clientmanagerze RecvEventManagerPacket sprawdź, czy faktycznie zostaje odbierany dodając log, będziemy wtedy wiedzieć czy komunikacja z db działa poprawnie. if (subIndex == EVENT_MANAGER_UPDATE) InitializeEventManager(true); Tu możesz dodać: if (subIndex == EVENT_MANAGER_UPDATE) { sys_log(0, "EVENT_MANAGER: Odbieram request."); InitializeEventManager(true); } Jeśli request jest odbierany pakiet powinien przesłać zainicjowane dane do game tak więc dalej sprawdźmy czy odpowiedź z game poprawnie jest odbierana. To jest realizowane przez pakiet HEADER_DB_EVENT_MANAGER, które wywołuje EventManager w input_db oczywiście. Dodaj do niej parę logów aby sprawdzić czy poprawnie odbieramy dane po wysłaniu żądania do db i wysłaniu danych do game. void CInputDB::EventManager(const char* c_pData) { CHARACTER_MANAGER& chrMngr = CHARACTER_MANAGER::Instance(); sys_log(0, "EVENT_MANAGER: game odbiera pakiecik z db"); const BYTE subIndex = *(BYTE*)c_pData; sys_log(0, "EVENT_MANAGER: subindex: %d", subIndex); c_pData += sizeof(BYTE); if (subIndex == EVENT_MANAGER_LOAD) { chrMngr.ClearEventData(); sys_log(0, "EVENT_MANAGER: ładowanie"); const BYTE dayCount = *(BYTE*)c_pData; c_pData += sizeof(BYTE); sys_log(0, "EVENT_MANAGER: Ładowanie %d dni", dayCount); const bool updateFromGameMaster = *(bool*)c_pData; c_pData += sizeof(bool); for (DWORD x = 0; x < dayCount; ++x) { const BYTE dayIndex = *(BYTE*)c_pData; c_pData += sizeof(BYTE); const BYTE dayEventCount = *(BYTE*)c_pData; c_pData += sizeof(BYTE); sys_log(0, "EVENT_MANAGER: Ladowanie dni %d eventday %d", dayIndex, dayEventCount); if (dayEventCount > 0) { std::vector<TEventManagerData> m_vec; m_vec.resize(dayEventCount); thecore_memcpy(&m_vec[0], c_pData, dayEventCount*sizeof(TEventManagerData)); c_pData += dayEventCount * sizeof(TEventManagerData); chrMngr.SetEventData(dayIndex, m_vec); } } if (updateFromGameMaster) { chrMngr.UpdateAllPlayerEventData(); sys_log(0, "EVENT_MANAGER: aktualizacja do wszystkich graczy"); } } else if (EVENT_MANAGER_EVENT_STATUS == subIndex) { const WORD& eventID = *(WORD*)c_pData; c_pData += sizeof(WORD); const bool& eventStatus = *(bool*)c_pData; c_pData += sizeof(bool); const int& endTime = *(int*)c_pData; c_pData += sizeof(int); chrMngr.SetEventStatus(eventID, eventStatus, endTime); } } Jeśli na tym etapie wszystko jest okey i dane są poprawnie ładowane z db i game odbiera ten pakiet to wywoływana jest funkcja UpdateAllPlayerEventData więc lecimy tam i dodaj log żeby zobaczyć czy wywołuje funkcje. void CHARACTER_MANAGER::UpdateAllPlayerEventData() { sys_log(0, "EVENT_MANAGER: Zapłon odpalony wysyłamy do graczy"); TEMP_BUFFER buf; CompareEventSendData(&buf); const DESC_MANAGER::DESC_SET& c_ref_set = DESC_MANAGER::instance().GetClientSet(); for (const auto& desc : c_ref_set) { if (!desc->GetCharacter()) continue; desc->Packet(buf.read_peek(), buf.size()); } } Dalej widzimy że idzie CompareEventSendData dodaj kolejne logi void CHARACTER_MANAGER::CompareEventSendData(TEMP_BUFFER* buf) { sys_log(0, "EVENT_MANAGER: zaczynam"); const BYTE dayCount = m_eventData.size(); sys_log(0, "EVENT_MANAGER: Dni %d", dayCount); const BYTE subIndex = EVENT_MANAGER_LOAD; const int cur_Time = time(NULL); TPacketGCEventManager p; p.header = HEADER_GC_EVENT_MANAGER; p.size = sizeof(TPacketGCEventManager) + sizeof(BYTE)+sizeof(BYTE)+sizeof(int); for (const auto& [dayIndex, dayData] : m_eventData) { const BYTE dayEventCount = dayData.size(); sys_log(0, "EVENT_MANAGER: dni %d dnievent %d", dayIndex, dayEventCount); p.size += sizeof(BYTE) + sizeof(BYTE) + (dayEventCount * sizeof(TEventManagerData)); } buf->write(&p, sizeof(TPacketGCEventManager)); buf->write(&subIndex, sizeof(BYTE)); buf->write(&dayCount, sizeof(BYTE)); buf->write(&cur_Time, sizeof(int)); for (const auto& [dayIndex, dayData] : m_eventData) { const BYTE dayEventCount = dayData.size(); buf->write(&dayIndex, sizeof(BYTE)); buf->write(&dayEventCount, sizeof(BYTE)); if (dayEventCount > 0) buf->write(dayData.data(), dayEventCount * sizeof(TEventManagerData)); } sys_log(0, "EVENT_MANAGER: poszłoooo"); } A z tego miejsca to już leci pakiet do klienta obstawiam, że gdzieś na etapie komunikacji db <-> game jest problem. Pododawaj logi i debugujemy problem kolejne działania będą zależne od wyniku i prawdopodobnie już na tym etapie wyjdzie błąd. Wpisujesz komendę w grze i w sys_log game i db wyszukujesz EVENT_MANAGER i patrzysz.
Opublikowano 6 Lutego6 Lut Autor Godzinę temu, Sevence napisał(a): Zerknąłem kod i musimy sprawdzić parę kwestii z tego co widać ta komenda wysyła pakiet do DB. Trzeba będzie się zorientować, czy on w ogóle jest wysyłany i odbierany poprawnie przez proces DB to tak na sam początek. Pamiętaj, że kolejność pakietów ma znaczenie zwłaszcza gdy nie jest do niego przypisana konkretna stała wartość. Nie mniej zawsze staraj się zachować taką samą strukturę. Do rzeczy, pakiet HEADER_GD_EVENT_MANAGER wywołuje funkcję w clientmanagerze RecvEventManagerPacket sprawdź, czy faktycznie zostaje odbierany dodając log, będziemy wtedy wiedzieć czy komunikacja z db działa poprawnie. if (subIndex == EVENT_MANAGER_UPDATE) InitializeEventManager(true); Tu możesz dodać: if (subIndex == EVENT_MANAGER_UPDATE) { sys_log(0, "EVENT_MANAGER: Odbieram request."); InitializeEventManager(true); } Jeśli request jest odbierany pakiet powinien przesłać zainicjowane dane do game tak więc dalej sprawdźmy czy odpowiedź z game poprawnie jest odbierana. To jest realizowane przez pakiet HEADER_DB_EVENT_MANAGER, które wywołuje EventManager w input_db oczywiście. Dodaj do niej parę logów aby sprawdzić czy poprawnie odbieramy dane po wysłaniu żądania do db i wysłaniu danych do game. void CInputDB::EventManager(const char* c_pData) { CHARACTER_MANAGER& chrMngr = CHARACTER_MANAGER::Instance(); sys_log(0, "EVENT_MANAGER: game odbiera pakiecik z db"); const BYTE subIndex = *(BYTE*)c_pData; sys_log(0, "EVENT_MANAGER: subindex: %d", subIndex); c_pData += sizeof(BYTE); if (subIndex == EVENT_MANAGER_LOAD) { chrMngr.ClearEventData(); sys_log(0, "EVENT_MANAGER: ładowanie"); const BYTE dayCount = *(BYTE*)c_pData; c_pData += sizeof(BYTE); sys_log(0, "EVENT_MANAGER: Ładowanie %d dni", dayCount); const bool updateFromGameMaster = *(bool*)c_pData; c_pData += sizeof(bool); for (DWORD x = 0; x < dayCount; ++x) { const BYTE dayIndex = *(BYTE*)c_pData; c_pData += sizeof(BYTE); const BYTE dayEventCount = *(BYTE*)c_pData; c_pData += sizeof(BYTE); sys_log(0, "EVENT_MANAGER: Ladowanie dni %d eventday %d", dayIndex, dayEventCount); if (dayEventCount > 0) { std::vector<TEventManagerData> m_vec; m_vec.resize(dayEventCount); thecore_memcpy(&m_vec[0], c_pData, dayEventCount*sizeof(TEventManagerData)); c_pData += dayEventCount * sizeof(TEventManagerData); chrMngr.SetEventData(dayIndex, m_vec); } } if (updateFromGameMaster) { chrMngr.UpdateAllPlayerEventData(); sys_log(0, "EVENT_MANAGER: aktualizacja do wszystkich graczy"); } } else if (EVENT_MANAGER_EVENT_STATUS == subIndex) { const WORD& eventID = *(WORD*)c_pData; c_pData += sizeof(WORD); const bool& eventStatus = *(bool*)c_pData; c_pData += sizeof(bool); const int& endTime = *(int*)c_pData; c_pData += sizeof(int); chrMngr.SetEventStatus(eventID, eventStatus, endTime); } } Jeśli na tym etapie wszystko jest okey i dane są poprawnie ładowane z db i game odbiera ten pakiet to wywoływana jest funkcja UpdateAllPlayerEventData więc lecimy tam i dodaj log żeby zobaczyć czy wywołuje funkcje. void CHARACTER_MANAGER::UpdateAllPlayerEventData() { sys_log(0, "EVENT_MANAGER: Zapłon odpalony wysyłamy do graczy"); TEMP_BUFFER buf; CompareEventSendData(&buf); const DESC_MANAGER::DESC_SET& c_ref_set = DESC_MANAGER::instance().GetClientSet(); for (const auto& desc : c_ref_set) { if (!desc->GetCharacter()) continue; desc->Packet(buf.read_peek(), buf.size()); } } Dalej widzimy że idzie CompareEventSendData dodaj kolejne logi void CHARACTER_MANAGER::CompareEventSendData(TEMP_BUFFER* buf) { sys_log(0, "EVENT_MANAGER: zaczynam"); const BYTE dayCount = m_eventData.size(); sys_log(0, "EVENT_MANAGER: Dni %d", dayCount); const BYTE subIndex = EVENT_MANAGER_LOAD; const int cur_Time = time(NULL); TPacketGCEventManager p; p.header = HEADER_GC_EVENT_MANAGER; p.size = sizeof(TPacketGCEventManager) + sizeof(BYTE)+sizeof(BYTE)+sizeof(int); for (const auto& [dayIndex, dayData] : m_eventData) { const BYTE dayEventCount = dayData.size(); sys_log(0, "EVENT_MANAGER: dni %d dnievent %d", dayIndex, dayEventCount); p.size += sizeof(BYTE) + sizeof(BYTE) + (dayEventCount * sizeof(TEventManagerData)); } buf->write(&p, sizeof(TPacketGCEventManager)); buf->write(&subIndex, sizeof(BYTE)); buf->write(&dayCount, sizeof(BYTE)); buf->write(&cur_Time, sizeof(int)); for (const auto& [dayIndex, dayData] : m_eventData) { const BYTE dayEventCount = dayData.size(); buf->write(&dayIndex, sizeof(BYTE)); buf->write(&dayEventCount, sizeof(BYTE)); if (dayEventCount > 0) buf->write(dayData.data(), dayEventCount * sizeof(TEventManagerData)); } sys_log(0, "EVENT_MANAGER: poszłoooo"); } A z tego miejsca to już leci pakiet do klienta obstawiam, że gdzieś na etapie komunikacji db <-> game jest problem. Pododawaj logi i debugujemy problem kolejne działania będą zależne od wyniku i prawdopodobnie już na tym etapie wyjdzie błąd. Wpisujesz komendę w grze i w sys_log game i db wyszukujesz EVENT_MANAGER i patrzysz. Dodałem to if (subIndex == EVENT_MANAGER_UPDATE) { sys_log(0, "EVENT_MANAGER: Odbieram request."); InitializeEventManager(true); } Ale po wpisaniu komendy czy nawet bez w sys logu pusto o tym.
Opublikowano 6 Lutego6 Lut Dodałeś wszystkie logi? Jakie ci się pojawiają? Dodaj wszystkie bo musimy wiedzieć w którym miejscu jest problem skompiluj game i db i daj znać co wypluwa.
Opublikowano 6 Lutego6 Lut Autor Godzinę temu, Sevence napisał(a): Dodałeś wszystkie logi? Jakie ci się pojawiają? Dodaj wszystkie bo musimy wiedzieć w którym miejscu jest problem skompiluj game i db i daj znać co wypluwa. DB nic nie wypluwa a z channeli mam to pierwszy screen jest ze startu serwera a drugi podczas użycia komendy Edytowane 6 Lutego6 Lut przez Av3rneS
Opublikowano 7 Lutego7 Lut To skoro masz tylko tyle logów, wychodzi na to że warunek updateFromGameMaster się nie wykonuje, a właśnie tam jest wywołanie z wysyłaniem pakietu do wszystkich. Wygląda na to że flaga updateFromGameMaster nie jest ustawiana. Sprawdźmy to jeszcze podczas odbierania pakietu. I może to głupie pytanie, ale czy wykonujesz polecenie na postaci z GM, a może tylko na włączonym test serwerze? Jeśli na testowym to spróbuj na normalnym trybie z dodanym GM. void CInputDB::EventManager(const char* c_pData) { CHARACTER_MANAGER& chrMngr = CHARACTER_MANAGER::Instance(); sys_log(0, "EVENT_MANAGER: game odbiera pakiecik z db"); const BYTE subIndex = *(BYTE*)c_pData; sys_log(0, "EVENT_MANAGER: subindex: %d", subIndex); c_pData += sizeof(BYTE); if (subIndex == EVENT_MANAGER_LOAD) { chrMngr.ClearEventData(); sys_log(0, "EVENT_MANAGER: ładowanie"); const BYTE dayCount = *(BYTE*)c_pData; c_pData += sizeof(BYTE); sys_log(0, "EVENT_MANAGER: Ładowanie %d dni", dayCount); const bool updateFromGameMaster = *(bool*)c_pData; c_pData += sizeof(bool); sys_log(0, "EVENT_MANAGER: UpdateFromGameMaster: %d", updateFromGameMaster); for (DWORD x = 0; x < dayCount; ++x) { const BYTE dayIndex = *(BYTE*)c_pData; c_pData += sizeof(BYTE); const BYTE dayEventCount = *(BYTE*)c_pData; c_pData += sizeof(BYTE); sys_log(0, "EVENT_MANAGER: Ladowanie dni %d eventday %d", dayIndex, dayEventCount); if (dayEventCount > 0) { std::vector<TEventManagerData> m_vec; m_vec.resize(dayEventCount); thecore_memcpy(&m_vec[0], c_pData, dayEventCount*sizeof(TEventManagerData)); c_pData += dayEventCount * sizeof(TEventManagerData); chrMngr.SetEventData(dayIndex, m_vec); } } sys_log(0, "EVENT_MANAGER: tu jestem"); if (updateFromGameMaster) { chrMngr.UpdateAllPlayerEventData(); sys_log(0, "EVENT_MANAGER: aktualizacja do wszystkich graczy"); } } else if (EVENT_MANAGER_EVENT_STATUS == subIndex) { const WORD& eventID = *(WORD*)c_pData; c_pData += sizeof(WORD); const bool& eventStatus = *(bool*)c_pData; c_pData += sizeof(bool); const int& endTime = *(int*)c_pData; c_pData += sizeof(int); chrMngr.SetEventStatus(eventID, eventStatus, endTime); } } Jeszcze w DB dodaj log w InitializeEventManager bool CClientManager::InitializeEventManager(bool updateFromGameMaster) { sys_log(0, "EVENT_MANAGER: GM: %d", updateFromGameMaster);
Opublikowano 7 Lutego7 Lut Autor Godzinę temu, Sevence napisał(a): To skoro masz tylko tyle logów, wychodzi na to że warunek updateFromGameMaster się nie wykonuje, a właśnie tam jest wywołanie z wysyłaniem pakietu do wszystkich. Wygląda na to że flaga updateFromGameMaster nie jest ustawiana. Sprawdźmy to jeszcze podczas odbierania pakietu. I może to głupie pytanie, ale czy wykonujesz polecenie na postaci z GM, a może tylko na włączonym test serwerze? Jeśli na testowym to spróbuj na normalnym trybie z dodanym GM. void CInputDB::EventManager(const char* c_pData) { CHARACTER_MANAGER& chrMngr = CHARACTER_MANAGER::Instance(); sys_log(0, "EVENT_MANAGER: game odbiera pakiecik z db"); const BYTE subIndex = *(BYTE*)c_pData; sys_log(0, "EVENT_MANAGER: subindex: %d", subIndex); c_pData += sizeof(BYTE); if (subIndex == EVENT_MANAGER_LOAD) { chrMngr.ClearEventData(); sys_log(0, "EVENT_MANAGER: ładowanie"); const BYTE dayCount = *(BYTE*)c_pData; c_pData += sizeof(BYTE); sys_log(0, "EVENT_MANAGER: Ładowanie %d dni", dayCount); const bool updateFromGameMaster = *(bool*)c_pData; c_pData += sizeof(bool); sys_log(0, "EVENT_MANAGER: UpdateFromGameMaster: %d", updateFromGameMaster); for (DWORD x = 0; x < dayCount; ++x) { const BYTE dayIndex = *(BYTE*)c_pData; c_pData += sizeof(BYTE); const BYTE dayEventCount = *(BYTE*)c_pData; c_pData += sizeof(BYTE); sys_log(0, "EVENT_MANAGER: Ladowanie dni %d eventday %d", dayIndex, dayEventCount); if (dayEventCount > 0) { std::vector<TEventManagerData> m_vec; m_vec.resize(dayEventCount); thecore_memcpy(&m_vec[0], c_pData, dayEventCount*sizeof(TEventManagerData)); c_pData += dayEventCount * sizeof(TEventManagerData); chrMngr.SetEventData(dayIndex, m_vec); } } sys_log(0, "EVENT_MANAGER: tu jestem"); if (updateFromGameMaster) { chrMngr.UpdateAllPlayerEventData(); sys_log(0, "EVENT_MANAGER: aktualizacja do wszystkich graczy"); } } else if (EVENT_MANAGER_EVENT_STATUS == subIndex) { const WORD& eventID = *(WORD*)c_pData; c_pData += sizeof(WORD); const bool& eventStatus = *(bool*)c_pData; c_pData += sizeof(bool); const int& endTime = *(int*)c_pData; c_pData += sizeof(int); chrMngr.SetEventStatus(eventID, eventStatus, endTime); } } Jeszcze w DB dodaj log w InitializeEventManager bool CClientManager::InitializeEventManager(bool updateFromGameMaster) { sys_log(0, "EVENT_MANAGER: GM: %d", updateFromGameMaster); To jest z kanałów Feb 7 12:09:21 :: EVENT_MANAGER: game odbiera pakiecik z db Feb 7 12:09:21 :: EVENT_MANAGER: subindex: 0 Feb 7 12:09:21 :: EVENT_MANAGER: ?adowanie Feb 7 12:09:21 :: EVENT_MANAGER: ?adowanie 2 dni Feb 7 12:09:21 :: EVENT_MANAGER: UpdateFromGameMaster: 0 Feb 7 12:09:21 :: EVENT_MANAGER: Ladowanie dni 6 eventday 1 Feb 7 12:09:21 :: EVENT_MANAGER: Ladowanie dni 7 eventday 1 Feb 7 12:09:21 :: EVENT_MANAGER: tu jestem I występuje zaraz po starcie kanału a to z DB EVENT_MANAGER: GM: 0 Próbowałem i na test serwerze i bez z nadanym gm
Opublikowano 7 Lutego7 Lut Okey to już sporo wiemy, wygląda na to że jest problem w komunikacji. I ten warunek się wcale nie wykonuje: if (subIndex == EVENT_MANAGER_UPDATE) { sys_log(0, "EVENT_MANAGER: Odbieram request."); InitializeEventManager(true); } Musisz jeszcze dodać parę logów, co się dzieje podczas wywołania komendy oraz przy odbiorze. else if (vecArgs[1] == "update") { if (!ch->IsGM()) return; const BYTE subHeader = EVENT_MANAGER_UPDATE; //db_clientdesc->DBPacketHeader(HEADER_GD_EVENT_MANAGER, 0, sizeof(BYTE)); //db_clientdesc->Packet(&subHeader, sizeof(BYTE)); sys_log(0, "EVENT_MANAGER: EVENT_MANAGER_UPDATE enum value: %d", EVENT_MANAGER_UPDATE); sys_log(0, "EVENT_MANAGER: subHeader value: %d", subHeader); db_clientdesc->DBPacket(HEADER_GD_EVENT_MANAGER, 0, &subHeader, sizeof(BYTE)); ch->ChatPacket(CHAT_TYPE_INFO, "successfully update!"); } Do client managera void CClientManager::RecvEventManagerPacket(const char* data) { sys_log(0, "EVENT_MANAGER: Received subIndex: %d", subIndex); sys_log(0, "EVENT_MANAGER: EVENT_MANAGER_UPDATE value: %d", EVENT_MANAGER_UPDATE); sys_log(0, "EVENT_MANAGER: EVENT_MANAGER_LOAD value: %d", EVENT_MANAGER_LOAD); sys_log(0, "EVENT_MANAGER: Finiszer: %d", (subIndex == EVENT_MANAGER_UPDATE)); const BYTE subIndex = *(BYTE*)data; data += sizeof(BYTE); if (subIndex == EVENT_MANAGER_UPDATE) InitializeEventManager(true); else if (subIndex == EVENT_MANAGER_REMOVE_EVENT) { const WORD index = *(WORD*)data; data += sizeof(WORD); if (m_EventManager.size()) { for (auto it = m_EventManager.begin(); it != m_EventManager.end(); ++it) { for (DWORD j = 0; j < it->second.size(); ++j) { TEventManagerData& eventPtr = it->second[j]; if (eventPtr.eventID == index) { eventPtr.endTime = time(0); UpdateEventManager(); char szQuery[QUERY_MAX_LEN]; snprintf(szQuery, sizeof(szQuery), "UPDATE player.event_table SET endTime = NOW() WHERE id = %u", index); std::unique_ptr<SQLMsg> pMsg(CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER)); return; } } } } } } Prawdopodobnie subindex będzie miał niewłaściwą wartość prze co InitializeEventManager nie zostanie ustawiony na true i dalsze kroki się nie wykonują. Możesz wrzucić tu jeszcze swoje tables.h, input_db.cpp, clientmanagera, ale pierwsze zdebuguj jeszcze te kwestie abyśmy wiedzieli dokładnie, ale jest duża szansa że właśnie zobaczymy niepoprawne subindex.
Opublikowano 7 Lutego7 Lut mam ten sam problem z logów nic nie wychodzi tyle że komenda do serwera idzie
Opublikowano 8 Lutego8 Lut 18 godzin temu, Perez napisał(a): mam ten sam problem z logów nic nie wychodzi tyle że komenda do serwera idzie No, debugujesz, debugujesz i w końcu dochodzisz do źródła problemu. Czekamy aż koleżka podrzuci więcej logów.
Opublikowano 11 Lutego11 Lut Autor W dniu 7.02.2025 o 11:50, Sevence napisał(a): Okey to już sporo wiemy, wygląda na to że jest problem w komunikacji. I ten warunek się wcale nie wykonuje: if (subIndex == EVENT_MANAGER_UPDATE) { sys_log(0, "EVENT_MANAGER: Odbieram request."); InitializeEventManager(true); } Musisz jeszcze dodać parę logów, co się dzieje podczas wywołania komendy oraz przy odbiorze. else if (vecArgs[1] == "update") { if (!ch->IsGM()) return; const BYTE subHeader = EVENT_MANAGER_UPDATE; //db_clientdesc->DBPacketHeader(HEADER_GD_EVENT_MANAGER, 0, sizeof(BYTE)); //db_clientdesc->Packet(&subHeader, sizeof(BYTE)); sys_log(0, "EVENT_MANAGER: EVENT_MANAGER_UPDATE enum value: %d", EVENT_MANAGER_UPDATE); sys_log(0, "EVENT_MANAGER: subHeader value: %d", subHeader); db_clientdesc->DBPacket(HEADER_GD_EVENT_MANAGER, 0, &subHeader, sizeof(BYTE)); ch->ChatPacket(CHAT_TYPE_INFO, "successfully update!"); } Do client managera void CClientManager::RecvEventManagerPacket(const char* data) { sys_log(0, "EVENT_MANAGER: Received subIndex: %d", subIndex); sys_log(0, "EVENT_MANAGER: EVENT_MANAGER_UPDATE value: %d", EVENT_MANAGER_UPDATE); sys_log(0, "EVENT_MANAGER: EVENT_MANAGER_LOAD value: %d", EVENT_MANAGER_LOAD); sys_log(0, "EVENT_MANAGER: Finiszer: %d", (subIndex == EVENT_MANAGER_UPDATE)); const BYTE subIndex = *(BYTE*)data; data += sizeof(BYTE); if (subIndex == EVENT_MANAGER_UPDATE) InitializeEventManager(true); else if (subIndex == EVENT_MANAGER_REMOVE_EVENT) { const WORD index = *(WORD*)data; data += sizeof(WORD); if (m_EventManager.size()) { for (auto it = m_EventManager.begin(); it != m_EventManager.end(); ++it) { for (DWORD j = 0; j < it->second.size(); ++j) { TEventManagerData& eventPtr = it->second[j]; if (eventPtr.eventID == index) { eventPtr.endTime = time(0); UpdateEventManager(); char szQuery[QUERY_MAX_LEN]; snprintf(szQuery, sizeof(szQuery), "UPDATE player.event_table SET endTime = NOW() WHERE id = %u", index); std::unique_ptr<SQLMsg> pMsg(CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER)); return; } } } } } } Prawdopodobnie subindex będzie miał niewłaściwą wartość prze co InitializeEventManager nie zostanie ustawiony na true i dalsze kroki się nie wykonują. Możesz wrzucić tu jeszcze swoje tables.h, input_db.cpp, clientmanagera, ale pierwsze zdebuguj jeszcze te kwestie abyśmy wiedzieli dokładnie, ale jest duża szansa że właśnie zobaczymy niepoprawne subindex. Z tego co tutaj dalej żaden z syslogow mi się nie pokazuje 😄 btw sorki za brak odpowiedzi ale no time było
Siema ostatnio dodałem se menadżera eventow od dracarysa i mam problem, komenda nie działa.
Wpisuje komendę /event_manager update i nic się nie dzieje, okno jak puste tak dalej jest , dopiero po restarcie serwera załapuje.
Pliki to marty sama 5.8 a system wyciągałem z plików ava2.
Mam też paczkę z neta ale ten kod praktycznie identyczny.
Z góry dzięki za pomoc ❤️