Jump to content
Logo
Your Metin2 zone for C++, Python, Lua.

Muchomor

Helper
  • Posts

    23
  • Joined

  • Last visited

  • Days Won

    12

Muchomor last won the day on August 27

Muchomor had the most liked content!

Discord

  • Discord
    Muchomor1337

Recent Profile Visitors

476 profile views

Muchomor's Achievements

Contributor

Contributor (5/14)

  • First Post
  • Conversation Starter Rare
  • Very Popular Rare
  • Dedicated
  • One Month Later

Recent Badges

460

Reputation

  1. Cześć udostępniam wam mój świeży kod na miarę 2024 roku z rejestracją pod beta testy, zrobiłem go dla siebie kilka miesięcy temu ale na ten moment mi zbędne dlatego udostępniam, kod posiada: - Zabezpieczenia przed atakami SQL - Weryfikację Captcha - Blokadę tymczasowych Emaili - Mobilność na urządzenia mobilne -Prosty i łatwy config Podgląd: Download: Strona Muchomor.rar
  2. Cześć jest to paczka udostępniona już na innym forum, jedynie co tu zrobiłem to ją odchudziłem, tamta waży 3.5gb a ta 1.8gb. Server Source jest na starym kompilatorze, jeżeli będzie dużo reakcji pod postem przygotuję wam wirtualną maszynę, zależy mi bardzo aby te pliki nie zniknęły z internetu dlatego jak będzie duże zaangażowanie, uruchomię wam je na virtualbox abyście mogli się na nich bawić. Same pliki nie nadają się na start publicznego serwera, trzeba wiele poprawić w source, ale rozgrywka może być, sprawdźcie tylko czy nie ma yangbuga w item_proto. Download: https://mega.nz/file/1h4FyIwC#OXRi4PyZqu2yGZAj6D131ARZS7M74zxztXGbyEuI4Ys
  3. Weź sobie z tych plików, tutaj jest wszystko zakodowane i można odwzorować na wzór cały Ingame oraz okno logowania czyli intrologin.py etc. no tutaj w pythonie macie sporo rzeczy, jak ktoś ogarnia wyjmowanie to sobie wyjmie ale no musisz znać podstawy. Taka podpowiedź ode mnie intrologin.py - okno logowania introloading.py - okno ładowania/wczytywania introcreate.py - tworzenie postaci introselect.py - wybór postaci selectempirewindow.py - wybór królestwa ui.py - Tutaj zazwyczaj większość rzeczy z kodowaniem od Ingame [środek gry]
  4. You can see another GM with /inv or /observer Download: Can See Hidden System.rar
  5. It always bothered me that you had to collect points in Fishing Rod and Pickaxe to check if you upgraded items from Fisherman and Deokbae. So two years ago, I created a function specifically for GMs that automatically sets all stats to max. I also fixed the memory leak issue. Code: ACMD(do_item) { char arg1[256], arg2[256]; two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2)); if (!*arg1) { ch->ChatPacket(CHAT_TYPE_INFO, "Usage: item <item vnum>"); return; } int iCount = 1; if (*arg2) { str_to_number(iCount, arg2); iCount = MINMAX(1, iCount, g_bItemCountLimit); } DWORD dwVnum; std::pair<DWORD, DWORD> vnumRange; std::vector<std::string> v_range; std::string sRange(arg1); boost::split(v_range, sRange, boost::is_any_of("-")); if (v_range.size() < 2) { if (isnhdigit(*arg1)) { str_to_number(dwVnum, arg1); if (!ITEM_MANAGER::instance().GetTable_NEW(dwVnum)) { ch->ChatPacket(CHAT_TYPE_INFO, "#%u item not exist by that vnum.", dwVnum); return; } else { vnumRange = std::make_pair(dwVnum, dwVnum); } } else { if (!ITEM_MANAGER::instance().GetVnum(arg1, dwVnum)) { ch->ChatPacket(CHAT_TYPE_INFO, "#%u item not exist by that vnum(%s).", dwVnum, arg1); return; } else { vnumRange = std::make_pair(dwVnum, dwVnum); } } } else { try { vnumRange = std::make_pair(std::stoul(v_range[0], NULL, 10), std::stoul(v_range[1], NULL, 10)); if (vnumRange.first > vnumRange.second) { std::swap(vnumRange.first, vnumRange.second); } } catch (...) { ch->ChatPacket(CHAT_TYPE_INFO, "Invalid range! To use range feature type following syntax: ID-ID."); return; } } for (unsigned int i = vnumRange.first; i <= vnumRange.second; i++) { LPITEM item = ITEM_MANAGER::instance().CreateItem(i, iCount, 0, true); if (item) { // Nowa funkcja do tworzenia wedek / kilofow dla GM by: Muchomor if (i == 27400 || i == 27410 || i == 27420 || i == 27430 || i == 27440 || i == 27450 || i == 27460 || i == 27470 || i == 27480 || i == 27490 || i == 29101 || i == 29102 || i == 29103 || i == 29104 || i == 29105 || i == 29106 || i == 29107 || i == 29108 || i == 29109 || i == 29110) { item->SetSocket(0, item->GetValue(2)); } if (item->IsDragonSoul()) { int iEmptyPos = ch->GetEmptyDragonSoulInventory(item); if (iEmptyPos != -1) { item->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos)); LogManager::instance().ItemLog(ch, item, "GM", item->GetName()); } else { M2_DESTROY_ITEM(item); if (!ch->DragonSoul_IsQualified()) { ch->ChatPacket(CHAT_TYPE_INFO, "ŔÎşĄŔĚ Č°ĽşČ µÇÁö ľĘŔ˝."); } else { ch->ChatPacket(CHAT_TYPE_INFO, "Not enough inventory space."); } } } else { int iEmptyPos = ch->GetEmptyInventory(item->GetSize()); if (iEmptyPos != -1) { item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos)); LogManager::instance().ItemLog(ch, item, "GM", item->GetName()); } else { M2_DESTROY_ITEM(item); ch->ChatPacket(CHAT_TYPE_INFO, "Not enough inventory space."); } } } else { ch->ChatPacket(CHAT_TYPE_INFO, "#%u item not exist by that vnum.", dwVnum); } } }
  6. Cześć kto kiedykolwiek pracował na martysamie i robił serwer "Hard" wie że występuje totalnie dziwny błąd a mianowicie możemy bić z konia mając 1lvl. Hi, anyone who has ever worked on martysama and made a "Hard" server knows that a totally weird bug occurs, namely that we can hit from a horse at level 1. Merhaba, martysama üzerinde çalışmış ve "Zor" bir sunucu yapmış olan herkes, tamamen garip bir hatanın meydana geldiğini bilir, yani seviye 1'de bir attan vurabiliyoruz. Fix instancebase.cpp: // Poprawiona funkcja przez Muchomor 2023 UINT CInstanceBase::SHORSE::GetLevel() { if (m_pkActor) { DWORD dwMountVnum = m_pkActor->GetRace(); if (dwMountVnum == 20101 || dwMountVnum == 20102 || dwMountVnum == 20103) { return MOUNT_TYPE_NONE; } #ifdef ENABLE_NO_MOUNT_CHECK return MOUNT_TYPE_MILITARY; #else return static_cast<UINT>(GetMountLevelByVnum(dwMountVnum, false)); #endif } return 0; }
  7. Cześć dzisiaj naprawimy błąd który występuje na każdej martysamie Kod błędu: READ of size 16 at 0x2223ea1c thread T0 #1 0x6af0b9 in buffer_write(buffer*&, void const*, int) /home/moje/libthecore/src/buffer.c:167:2 #2 0x67da99 in CPeerBase::Encode(void const*, unsigned int) /home/moje/db/src/PeerBase.cpp:157:2 #3 0x565204 in CClientManager::QUERY_BOOT(CPeer*, SPacketGDBoot*) /home/moje/db/src/ClientManager.cpp:466:9 #4 0x582992 in CClientManager::ProcessPackets(CPeer*) /home/moje/db/src/ClientManager.cpp:2352:5 #5 0x562fe4 in CClientManager::Process() /home/moje/db/src/ClientManager.cpp:3260:6 #6 0x5607a5 in CClientManager::MainLoop() /home/moje/db/src/ClientManager.cpp:250:8 #7 0x666bde in main /home/moje/db/src/Main.cpp:99:29 [Fix] Szukamy w ClientManager.cpp: peer->EncodeWORD(16); peer->EncodeWORD(vHost.size()); for (size_t n = 0; n < vHost.size(); ++n) { peer->Encode(vHost[n].c_str(), 16); sys_log(0, "GMHosts %s", vHost[n].c_str()); } Zamieniamy na: peer->EncodeWORD(16); peer->EncodeWORD(vHost.size()); for (size_t n = 0; n < vHost.size(); ++n) { const char* host = vHost[n].c_str(); char hostBuffer[16] = {0}; std::strncpy(hostBuffer, host, sizeof(hostBuffer) - 1); peer->Encode(hostBuffer, sizeof(hostBuffer)); sys_log(0, "GMHosts %s", host); } Gratulacje błąd naprawiony.
  8. Jeśli masz wtyczki które używają ImageBox, tak długo, jak okno gry jest otwarte (chyba że ponownie się zalogujesz itp.), Nawet jeśli zamkniesz okno, obrazy w nim nie są usuwane z pamięci i powodują wzrost pamięci podczas przeładowywania przy każdym uruchomieniu. If you have plug-ins that use ImageBox, as long as the game window is open (unless you re-login, etc.), even if you close the window, the images in it are not removed from memory and cause memory to grow when reloading each time you run it. EterPythonLib\PythonWindowManagerModule.cpp // Search for this function PyObject* wndImageLoadImage(PyObject* poSelf, PyObject* poArgs) { // ... existing code ... } // Add below PyObject* wndImageUnloadImage(PyObject* poSelf, PyObject* poArgs) { UI::CWindow* pWindow; if (!PyTuple_GetWindow(poArgs, 0, &pWindow)) { return Py_BuildException(); } if (!((UI::CImageBox*)pWindow)->UnloadImage()) { return Py_BuildException("Failed to unload image"); } return Py_BuildNone(); } // Search for this method registration { "LoadImage", wndImageLoadImage, METH_VARARGS }, // Add below { "UnloadImage", wndImageUnloadImage, METH_VARARGS }, EterPythonLib\PythonWindow.cpp // Search for this method BOOL CImageBox::LoadImage(const char* c_szFileName) { // ... existing code ... } // Add below BOOL CImageBox::UnloadImage() { if (!m_pImageInstance) return FALSE; OnDestroyInstance(); return TRUE; } EterPythonLib\PythonWindow.h // Search for this method declaration BOOL LoadImage(const char* c_szFileName); // Add below BOOL UnloadImage(); root/ui.py # Search for this class definition class ImageBox(Window): # ... existing members ... # Find these lines self.eventFunc = {} self.eventArgs = {} # Add below self.imageLoaded = False # ... # Search for this line where you load the image wndMgr.LoadImage(self.hWnd, imageName) # Add below self.imageLoaded = True # ... # Search for this destructor definition def __del__(self): # ... existing code ... # Add below if self.imageLoaded: self.UnloadImage()
  9. Komenda do Navicat: INSERT INTO `item_proto` VALUES (71115, '71115', 'Pieczec Dzika Wojennego', 28, 2, 0, 1, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 7, 2592000, 0, 0, 63, 20, 0, 0, 0, 0, 0, 0, 0, 0, 20115, 0, -1, -1, -1, -1, -1, -1, 0, 0, 0); Wymagany Quest: ride.lua Dodaj to byle gdzie do quest_functions: item.is_available0 Tam gdzie Value4 < to id z mob_proto czyli np: (To są standardowe id mountów) 20110 boar 20111 dog_god 20112 fire_tiger 20113 lion 20114 lion_white 20115 boar_2 20116 dog_god_2 20117 fire_tiger_2 20118 lion_2 20119 horse_event1 20120 fire_tiger_blue 20121 fire_tiger_darkred 20122 fire_tiger_gold 20123 fire_tiger_green 20124 fire_tiger_pied 20125 fire_tiger_white Podmień te pliki w PACK https://mega.nz/file/aXRHgS4B#9NCjcB6e-PmssSYmFvMinCsE_A6my_BWKHa3gZS0sOs I to tyle, wierzchowce już działają.
  10. Wpisy do navicat: INSERT INTO `item_proto` VALUES (85001, '85001', 'Szarfa Wladcy(prosta)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); INSERT INTO `item_proto` VALUES (85002, '85002', 'Szarfa Wladcy(dostojna)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); INSERT INTO `item_proto` VALUES (85003, '85003', 'Szarfa Wladcy(zacna)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); INSERT INTO `item_proto` VALUES (85004, '85004', 'Szarfa Wladcy(unikat.)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); INSERT INTO `item_proto` VALUES (85005, '85005', 'Szarfa Mistrza(prosta)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); INSERT INTO `item_proto` VALUES (85006, '85006', 'Szarfa Mistrza(dostojna)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); INSERT INTO `item_proto` VALUES (85007, '85007', 'Szarfa Mistrza(zacna)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); INSERT INTO `item_proto` VALUES (85008, '85008', 'Szarfa Mistrza(unikat.)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); INSERT INTO `item_proto` VALUES (90000, '90000', 'Świadectwo Zmiany', 3, 14, 0, 1, 32896, 8196, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 0, 0, 0); INSERT INTO `item_proto` VALUES (85011, '85011', 'Szarfa Ksiecia(prosta)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); INSERT INTO `item_proto` VALUES (85012, '85012', 'Szarfa Ksiecia(dostojna)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); INSERT INTO `item_proto` VALUES (85013, '85013', 'Szarfa Ksiecia(zacna)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); INSERT INTO `item_proto` VALUES (85014, '85014', 'Szarfa Ksiecia(unikat.)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); INSERT INTO `item_proto` VALUES (85015, '85015', 'Szarfa Krola(prosta)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); INSERT INTO `item_proto` VALUES (85016, '85016', 'Szarfa Krola(dostojna)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); INSERT INTO `item_proto` VALUES (85017, '85017', 'Szarfa Krola(zacna)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); INSERT INTO `item_proto` VALUES (85018, '85018', 'Szarfa Krola(unikat.)', 28, 3, 0, 1, 32768, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 100, 0, 0); Quest na NPC = id moba: 20390 acce_open.quest
  11. Jeśli zamkniesz grę poleceniem /shutdown i spróbujesz się zalogować, pojawi się błąd pakietu i gra się zamknie. Myślę, że ten problem występuje po usunięciu szyfrowania pakietów (cryptopp). Głównym źródłem problemu jest to, że jądro AUTH nie nawiązuje połączenia P2P jak inne jądra, łączy się jedynie z bazą danych. Dlatego pakiet P2P wysłany podczas polecenia zamknięcia nie osiąga poziomu AUTH. Rozwiązanie jest następujące: If you close the game with the /shutdown command and try to log in, there is a packet error and the game closes. I think this problem occurs when packet encryption (cryptopp) is removed. The main source of the problem is that the AUTH kernel does not establish a P2P connection like other kernels, it only connects to the database. Therefore, the P2P packet sent during the shutdown command does not reach AUTH. The solution is as follows: cmd_general.cpp: ACMD(do_shutdown) Find: Shutdown(10) add before: db_clientdesc->DBPacketHeader(HEADER_GD_GO_SHUTDOWN, 0, 0); input_db.cpp: case HEADER_DG_WEDDING_END Add after; case HEADER_DG_GO_SHUTDOWN: g_bNoMoreClient = true; break; Common/tables.h: HEADER_DG_ITEMAWARD_INFORMER = 180, Add after; HEADER_DG_GO_SHUTDOWN = 182, Find: HEADER_GD_DELETE_AWARDID = 138, Add after; HEADER_GD_GO_SHUTDOWN = 146, db/clientmanager.cpp case HEADER_GD_DELETE_AWARDID: Add after; case HEADER_GD_GO_SHUTDOWN: m_pkAuthPeer->EncodeHeader(HEADER_DG_GO_SHUTDOWN, 0, 0); break;
  12. Kupione za 800pln kilka lat temu, czyszczę dyski, nie testowane, nie mam pojęcia czy są bugi. Bought for 800pln a few years ago, I clean the drives, not tested, I have no idea if there are bugs. https://mega.nz/file/XCQ3yCrA#fBa9RyOnPMKguPDFOwDoAZcTk3aTymPXkHKFisQrw7g
Style Version: 0.1

The code was completely created from scratch and optimized.

The basic style on which it was created: Default

Created by: Grzyb.ovh

The style was to be simple to browse topics, devoid of graphics, uniform in color and definitely simple. ×

×
×
  • Create New...

Important Information

Do you like cookies? 🍪 We use cookies to provide the highest quality of service. Learn more