Skocz do zawartości

Dołącz do społeczności Sharegon

Odkryj świat technologii, gier i programowania w Sharegon.pl 🚀

Czy jesteś pasjonatem nowych technologii, zapalonym graczem, czy aspirującym programistą? Nasza społeczność jest miejscem dla Ciebie! Tutaj możesz dzielić się swoimi pomysłami, uczestniczyć w ekscytujących dyskusjach i uczyć się od ekspertów w dziedzinie. Zdobywaj osiągnięcia, buduj swoją reputację i rywalizuj z innymi entuzjastami.

Twoja wiedza i umiejętności mogą wzbogacić naszą społeczność. Stań się częścią Sharegon! 🧩🌐

header

Ranking

Popularna zawartość

Zawartość, która uzyskała najwyższe oceny od 04.11.2024 uwzględniając wszystkie działy

  1. Trailer 🔐 Ukryta Treść 🔐 Pobieralnia 🔐 Ukryta Treść 🔐 Jak będzie trzeba to dośle gotowa maszynkę dla opornych XD Wrzucam wam te pliczki bo widzę ze odpady społecznie pokroju Umbry zaczęły je sprzedawać. Co tu dużo mówić o tych plikach, przerobiona AVA2 HF ❤️ Weryfikacja ( ͡° ͜ʖ ͡°)
    41 punktów
  2. ____________________________________________________________________ Chcesz więcej cheatów od mobware? <KLIKNIJ TUTAJ> Autorem cheata jest Back! Sharegon nie jest twórcą tego cheata. ____________________________________________________________________ Cześć, udostępniam wam multihack do metin2 na serwery oficjalne Gameforge. Ten metin2 cheat działa idealnie, musisz sprawdzić! Aktualizacja: 15.10.24 Zaktualizowano cheata do najnowszej wersji gry. Uwaga W pliku rar zobaczysz 2 foldery nazwane "maps" I "points", wrzuć je do folderu: "C:\mobware_mt2", TO WAŻNE DLA RADARU! Dobrej zabawy! 😁 Pobieranie mob_ware_v3.rar Aktualizacja: 04.08.24 Aktualizacja: 19.07.24 Aktualizacja: 04.04.24 Aktualizacja: 03.04.24 Aktualizacja: 03.04.24 Aktualizacja: 26.03.24 Wymagany Injector do zainstalowania cheata znajdziesz go w tym temacie Dostępne funkcje Waithack Dummy Exploit SpeedHack Auto Pickup Nagrywanie Trasy Radar Auto Skille Auto Wstawanie Auto Login Automatyczne oddawanie expa na gildie Panic Key Prezentacja interfejsu cheata Główne menu Ruch Ustawienia wizualne Ustawienia gracza Dostosowanie Konfiguracja Instrukcja uruchomienia: Po zainjectowaniu cheata uruchamiasz przyciskiem home na klawiaturze ⌨️ Instrukcja użycia Pobierz Extreme Injector Umieść metin2client.exe w „Nazwie procesu” Naciśnij „Ustawienia” Wybierz „Standard Injection” w „Injection Method” i naciśnij „OK” Wybierz „Add Dll” dodaj dll metin2-mobware-v3 i inject przy odpalonym oknie logowania. Jak skorzystać z exploita? Aby skorzystać z exploitu Waithack Dummy, musisz mieć włączone dwie klienty gry i wstrzyknąć plik dll do obu klientów. Obie postacie muszą być zalogowane na tym samym serwerze, na tej samej mapie i na tym samym kanale (bardzo ważne). Z głównej postaci, tej, którą chcesz atakować szybko, naciśnij Połącz Dummy. Z postaci Dummy, tej afk, kliknij na górze okna i naciśnij "F1". Kiedy zobaczysz "Dummy vid: numery" w interfejsie głównej postaci. Następnie kliknij Włącz na głównej postaci i baw się dobrze. Jak skorzystac z Switch Channela? Przejdź do „C:\mobware_mt2” i otwórz „serverlist.txt” W grze wejdź na każdy kanał i naciśnij przycisk „Kopiuj bieżący adres IP” widoczny w zakładce „Inne”, spowoduje to skopiowanie adresu IP kanału i port do schowka Postępuj zgodnie z formatem, który tu wkleiłem, wklejając skopiowany adres IP POJEDYNCZO . Format jest następujący (przykład): NAZWA SERWERA:KANAŁ:PORT#IP Klient rozłącza się po chwili, pobierz to: aio-runtimes_v2.5.0.exe Problem z czarnym ekranem po uruchomieniu cheata na windows 11 Klikasz prawym przyciskiem myszy na pulpit -> ustawienia ekranu Grafika Wyłącz ustawienie -> optymalizacja dla gier w oknie - wyłącz Zaawansowane ustawienia grafiki -> planowanie przyspieszanego sprzętowo procesora GPU - wyłącz Adresy serwerów z portami do zmiany kanałów: Polska Channel1 - 110.92.90:12100 Channel2 - 110.92.101:12200 Channel3 - 110.92.90:12300 Channel4 - 110.92.101:12400 Channel5 - 110.92.90:12500 Channel6 - 110.92.101:12600 Barbados Channel1 - 79.110.92.137:1210 Channel2 - 79.110.92.144:1220 Channel3 - 79.110.92.137:1230 Channel4 - 79.110.92.144:1240 Channel5 - 79.110.92.137:1250 Channel6 - 79.110.92.144:1260 Instrukcja wstrzyknięcia Instrukcja wstrzyknięcia cz. 2 Prezentacja działania cheata 💪💪💪😄😄 38a756c16c5a27edbca531aaaf0a2ff8.mp4
    37 punktów
  3. Extreme Injector v3.7.3 Wzmocnij swoje wrażenia z gier dzięki Extreme Injector, potężnemu narzędziu do wstrzykiwania DLL, które otwiera drzwi do nieskończonych możliwości personalizacji. Niezależnie od tego, czy jesteś doświadczonym modderem, czy początkującym entuzjastą, Extreme Injector oferuje intuicyjną obsługę i imponujące funkcje, które zaspokoją Twoje potrzeby. Najważniejsze cechy Extreme Injector v3.7.3 Wyświetlanie listy aktywnych procesów, Łatwy w obsłudze interfejs, Wstrzykiwanie wielu DLL tzw. Multi-DLL injection, który pozwala wstrzyknąć wiele DLL jednocześnie, z opcją wyboru, które z nich mają być aktywowane, Auto-Inject automatycznie wstrzykuje DLL do procesu zaraz po jego uruchomieniu, Stealth Inject ukrywa proces wstrzykiwania DLL, co utrudnia jego wykrycie przez anty cheats, Close on inject opcjonalnie kończy działanie procesu głównego po wstrzyknięciu DLL, Scrambling option szyfruje pliki DLL podczas wstrzykiwania, aby jeszcze bardzie utrudnić ich analizę i działanie antycheas, Jak Używać Extreme Injector v3.7.3 Ściągnij i zainstaluj Extreme Injector. Uruchom narzędzie jako administrator. Upewnij się, że na komputerze zainstalowany jest .NET Framework 4.0. Dodaj potrzebne pliki DLL za pomocą przycisku „Add DLL”. Wybierz proces gry, do której chcesz wstrzyknąć DLL. Kliknij „Inject” i gotowe – proces modowania zostanie rozpoczęty. Extreme Injector v3.7.3 Ustawienia Pobierz najnowsza wersją Extreme Injector v3.7.3 Extreme.Injector.v3.7.3.rar Skan Pamiętaj, że narzędzie Extreme Injector może być wykrywane jako potencjalnie niebezpieczne przez programy antywirusowe ze względu na jego zdolność do ingerencji w procesy aplikacji. Zawsze korzystaj z zaufanych źródeł i bądź odpowiedzialny w używaniu tego oprogramowania.
    33 punktów
  4. Plików nie testowałem pod względem Hasła, ale raczej się nic nie zmieniło. Trzymajcie VHD, nie dodaje Klienta iż nie mogę go zlokalizować, jak znajdę go na starym dysku to dorzucę Pobieranie: 🔐 Ukryta Treść 🔐 VirusTotal: Zbyt dużo waży bym to tam wrzucił, a nie mam aktualnie AntyVirusa na PC :P Hasło do FreeBSD: Login: root Hasło: takiniesmialy MySql 1) Login: root Hasło: niesmialy 2) Login: strona Hasło: strona Pong by1takiniesmialy Porty do odblokowania: - 80 - strona - 3306 - mysql - 11002 - logowanie - 13000 - ch1 - 13001 - ch2 - 13099 - ch99 Lokalizacje: germany: /usr/home/game/share/locale MySql: /var/db/mysql Strona: /usr/local/www/apache22/data
    32 punktów
  5. To dorzuce i ja cosik 😄 17.Itemshop_1.rar Add New Bonus Into Costume - dracaryS.rar auto-chat-dracaryS.rar BlackJack-dracarys.rar Renewal Mission Book - dracaryS.rar renewal_messenger_window-dracaryS.rar shining-system.rar Skill Tree - dracaryS.rar test_dungeon-dracaryS.rar vote4buff_v2-dracaryS.rar whisper-save-dracaryS.rar
    30 punktów
  6. Macie coś ode mnie, myślałem czy by nie dopisać do tego również renderowania w atlasie z dokładną godziną, ewentualnie po naciśnięciu w ikonki rozwijana lista? 🔐 Ukryta Treść 🔐 Postępuj zgodnie z instrukcją, na pewno się uda! Autor: Draha
    25 punktów
  7. Łukhack by Kag321, bo parę osób chciało Łuk Hack.rar
    24 punktów
  8. Też cos dorzucę XD spin-wheel-system - DracaryS.rar
    23 punktów
  9. Witam, podrzucam wam pliki + klienta, mają sporo bugów m.in. z petami na dmg lub hp *hehe* Sprawdźcie DMG Dzwony burzowego ptaka +9 XD 🔐 Ukryta Treść 🔐 Okno 2024-11-18 16-43-29.mp4
    22 punktów
  10. Hejka, przedstawiam Wam prosty (a zarazem bardzo skuteczny) multihack do Metin2, działa tylko na serwerach globalnych. Co najbardziej cechuje tego multihacka? Możliwość poszerzania go o własne funkcję, wystarczy do tego znajomość pythona, i jesteśmy w stanie pisać do niego autorskie rozszerzenia 👼 🌟 Cheat ma funkcje automatycznej sprzedaży przedmiotów które zdobył podczas bocenia! 🌟 Szybka prezentacja cheata Screenshoty z menu / funkcje Wymagany injector do zainstalowania cheata znajdziesz go w tym temacie Instrukcja uruchomienia Pobierz i wypakuj pliki z załącznika tego tematu. (VirusTotal) Odpal grę. Odpal injector z tematu wskazanego wyżej. Wstrzyknij najpierw biblioteke boost, następnie gf_helper.dll (można obie na raz, chodzi o kolejność wstrzykiwania). Wybierz folder w którym wypakowałeś pliki, a dokładniej w tym etapie chodzi o załadowanie elementów UI (robimy to tylko raz). Ciesz się karaniem mobów. (Ostatnia aktualizacja: 18.05.2024) Użyj injector.exe, aby wstrzyknąć bota. Source code injectora, jeśli chciałbyś go skompilować samemu. #include <Windows.h> #include <iostream> #include <string> #include <thread> #include <chrono> #include <TlHelp32.h> #include <algorithm> DWORD get_process_id(const std::wstring& process_name) { DWORD process_id = 0; HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (snapshot != INVALID_HANDLE_VALUE) { PROCESSENTRY32 process_entry; process_entry.dwSize = sizeof(process_entry); if (Process32First(snapshot, &process_entry)) { do { if (process_name == process_entry.szExeFile) { process_id = process_entry.th32ProcessID; break; } } while (Process32Next(snapshot, &process_entry)); } CloseHandle(snapshot); } return process_id; } bool inject_dlls(const DWORD process_id, const std::vector<std::wstring>& dll_paths) { HANDLE process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, process_id); if (!process) { std::cerr << "Failed to open process." << std::endl; return false; } auto load_library_addr = reinterpret_cast<LPVOID>(GetProcAddress(GetModuleHandleW(L"kernel32.dll"), "LoadLibraryW")); if (!load_library_addr) { std::cerr << "Failed to get LoadLibraryW address." << std::endl; CloseHandle(process); return false; } bool injection_success = true; for (const auto& dll_path : dll_paths) { auto remote_string = VirtualAllocEx(process, nullptr, (dll_path.length() + 1) * sizeof(wchar_t), MEM_COMMIT, PAGE_READWRITE); if (!remote_string) { std::wcerr << L"Failed to allocate memory in the target process for DLL: " << dll_path << std::endl; injection_success = false; continue; } if (!WriteProcessMemory(process, remote_string, dll_path.c_str(), (dll_path.length() + 1) * sizeof(wchar_t), nullptr)) { std::wcerr << L"Failed to write the DLL path to the target process for DLL: " << dll_path << std::endl; VirtualFreeEx(process, remote_string, 0, MEM_RELEASE); injection_success = false; continue; } auto remote_thread = CreateRemoteThread(process, nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(load_library_addr), remote_string, 0, nullptr); if (!remote_thread) { std::wcerr << L"Failed to create remote thread for DLL: " << dll_path << std::endl; VirtualFreeEx(process, remote_string, 0, MEM_RELEASE); injection_success = false; continue; } WaitForSingleObject(remote_thread, 1000); if(injection_success) std::wcout << L"Injected DLL: " << dll_path << std::endl; else std::wcerr << L"Failed to inject DLL: " << dll_path << std::endl; CloseHandle(remote_thread); VirtualFreeEx(process, remote_string, 0, MEM_RELEASE); } CloseHandle(process); return injection_success; } const std::wstring get_path() { wchar_t file_path[MAX_PATH]; GetModuleFileNameW(NULL, file_path, MAX_PATH); std::wstring file_dir(file_path); size_t last_slash_pos = file_dir.find_last_of(L"\\/"); if (last_slash_pos != std::wstring::npos) { file_dir = file_dir.substr(0, last_slash_pos + 1); } return file_dir; } std::vector<DWORD> get_process_ids_from_window(const std::wstring& window_title) { std::vector<DWORD> process_ids; HWND window_handle = NULL; while ((window_handle = FindWindowExW(NULL, window_handle, NULL, window_title.c_str())) != NULL) { DWORD process_id; GetWindowThreadProcessId(window_handle, &process_id); process_ids.push_back(process_id); } return process_ids; } int main() { const std::wstring path = get_path(); const std::wstring target_window_title = L"METIN2"; const std::vector<std::wstring> dll_names = { L"boost_python27-vc143-mt-x32-1_83.dll", L"m2heat.dll" }; std::vector<std::wstring> dll_paths; for (const auto& dll_name : dll_names) { dll_paths.push_back(path + dll_name); } std::wcout << L"Watching for window: " << target_window_title << std::endl; std::vector<DWORD> injected_process_ids; while (true) { std::vector<DWORD> process_ids = get_process_ids_from_window(target_window_title); using namespace std::chrono_literals; for (const auto& process_id : process_ids) { if (std::find(injected_process_ids.begin(), injected_process_ids.end(), process_id) == injected_process_ids.end()) { std::cout << "Target window found. Process ID: " << process_id << std::endl; injected_process_ids.push_back(process_id); std::thread injection_thread([=] { std::this_thread::sleep_for(5s); inject_dlls(process_id, dll_paths); }); injection_thread.detach(); } } std::this_thread::sleep_for(1s); } return 0; } release_18_05.zip
    21 punktów
  11. Cześć, w archiwum znajduje się pełna paczka razem clientem, bazą, plikami, source oraz unpackerem clienta. ➡️ Download: 🔐 Ukryta Treść 🔐
    21 punktów
  12. Podstawowe Informacje • Visual studio 2022 • Source Client - C++17 • Server Source - C++20 • Freebsd 13.2 (32 bit) • Mysql56 • Gcc10 • Python 2.7 • Granny2.11.8.0 W pełni sprawna wirtualna maszyna, która automatycznie wychwyci twoje połączenie internetowe. W paczce znajduje się: - Dump_Proto - Klient Terenzo 2024 - Source Client - VirtualBox - Gotowa Maszyna VDI Lokalizacja: Pliki Serwerowe: /usr/home Mysql : /var/db/mysql Source: /src/Server Hasła: Połączenie z SSH: login: root hasło: 123 Połączenie Mysql: login: root hasło: 123 Hasło do Paczki: sasoria.pl Hasła postaci z GM: test / test2 123 Naprawione Bugi/Fixy: 30.03.2024 - Naprawiono większość bugów - Niepotrzebujesz już libów do używania ./qc - Aby przeładować wszystkie questy użyj komendy /quest - Niepotrzebujesz już bawić się w dump_proto - Program znajdujący się w tej paczce wychwytuje wszystko automatycznie, jedynie co musisz to skonfigurować połączenie z Mysql w pliku .json - Zmieniono standardowe hasło oraz zabezpieczono włamanie na serwer. - Automatyczne wychwytywanie zmian w item_proto oraz mob_proto - Nie trzeba generować jak dawniej. - Można w łatwy sposób uruchomić nową postać: Likan - Posegregowano i usunięto zbędne mapy. - Klient został odchudzony ze zbędnych plików. - Naprawiono świecenie i inne efekty. - Pliki CONFIG - Automatycznie wychwytują twój adres ip maszyny z Virtualbox - EPack32 - który jest w klient automatycznie wychwytuje lokalizację plików, nie musisz już ustawiać lokalizacji folderu aby rozpakować i spakować dane pliki. - Maszyna Wirtualna jak i same pliki zostały turbo odchudzone waga wszystkiego ma około 2.20gb - Przetłumaczone nazwy map i pliku mob_drop_item.txt aby nowi lepiej się odnaleźli. 🔐 Ukryta Treść 🔐 🔐 Ukryta Treść 🔐 Download: 🔐 Ukryta Treść 🔐 Skan: 🔐 Ukryta Treść 🔐
    20 punktów
  13. Informacje o żywych/martwych bossach na mapie Autor: jking ________________________________________________________ ________________________________________________________ Github: 🔐 Ukryta Treść 🔐 Do pobrania: 🔐 Ukryta Treść 🔐
    19 punktów
  14. Download: 🔐 Ukryta Treść 🔐
    18 punktów
  15. 📷Prezentacja serwera dostępna na stronie: 🔐 Ukryta Treść 🔐 Lub w spoilerze: ➡️ Download: 🔐 Ukryta Treść 🔐
    17 punktów
  16. Witam. postanowiłem ze zrobię source pod każdą wersję systemu FreeBSD / Windows + debian / ubuntu Obecnie to jest czysty source z dodaniem kilku fixów, source to jest zrobione ze wszystkich branchów tzn. ( rzeczy brakujące zostały dodane ) Server bez problemu skompilujecie i odpalicie pod Windowsa czy tez FreeBSD. Obecnie Projekt działa pod Game - FreeBSD 9.3 - 13.3 | Visual Studio 2008 -2022 Client - Visual Studio 2008-2022 Cel projektu to poprawić podstawowy kod, błędy oraz propozycje można zgłaszać w temacie lub na github. jakie rozwiązania byś wprowadził do kodu, żeby był bardziej czytelny i łatwiejszy w obsłudze. Projekt obecnie nie nadaje się do stawiania servera online. Wersja 1.0 ma być pod każdą platformę z poprawionym kodem, dopiero wyższe wersję będą bazować na C++20 Link do Projektu: 🔐 Ukryta Treść 🔐
    16 punktów
  17. Jakieś systemy dracarys'a 🔐 Ukryta Treść 🔐
    16 punktów
  18. Przerobiona wersja: Otwieramy plik: constinfo.py # Dodajemy: ENABLE_WHISPER_GM_WARNING_MSG = True Otwieramy plik: uiwhisper.py # Dodajemy: import constInfo # Szukamy: self.eventClose = eventClose self.eventAcceptTarget = None # Dodajemy poniżej: if constInfo.ENABLE_WHISPER_GM_WARNING_MSG: self.has_gm_warning_msg = False # Szukamy: if text: self.chatLine.SetText(GetSplitingTextLine(text, max, 0)) # Dodajemy poniżej: if constInfo.ENABLE_WHISPER_GM_WARNING_MSG: def IsGameMasterName(self, name): return name.find('[H]') != -1 or \ name.find('[GM]') != -1 or \ name.find('[SGM]') != -1 or \ name.find('[GA]') != -1 def AppendWarningMessage(self, targetName): if self.IsGameMasterName(targetName) and not self.has_gm_warning_msg: self.has_gm_warning_msg = True chat.AppendWhisper(chat.WHISPER_TYPE_GM, targetName, localeInfo.WARNING_SEND_WHISPER_TO_TEAM_MEMBER) # Szukamy: self.gamemasterMark.Hide() self.minimizeButton.Show() # Dodajemy niżej: if constInfo.ENABLE_WHISPER_GM_WARNING_MSG: self.AppendWarningMessage(targetName) Pozdrawiam cieplutko 😄
    16 punktów
  19. Witajcie Po Internecie krąży rzekomo Martysama 5.7 postanowiłem ją pobrać i zrobić maszynę wirtualną Nie ingerowałem w kod. Desktop 14-01-2024 10-04-25.mp4 📝 Struktura projektu: Martysama_VM: maszyna virtual box + źródło gry i bazy danych + Pliki SF SourceClient: źródło dla binarki Client: klient gry Dane do logowania SSH: Login: root Hasło: dev Dane do bazy mysql Login: root Hasło: marchewa Konto GM Login: test Hasło: 123 Komendy BSD /start - odpala serwer /stop - zamyka serwer /c - kompilacja Martysama: Client: Client.7z SourceBIN+Tools: ClientSource.7z VM+SOURCE+SF: PART1 🔐 Ukryta Treść 🔐 PART2 🔐 Ukryta Treść 🔐 CommonDefines.h - źródło gry. Locale_inc.h - źródło binarki
    15 punktów
  20. Drobna Informacja przed próbą skontaktowania się z GM,SGM,GA, po wpisaniu nicku bez wysłania jeszcze żadnej wiadomości. czyli wiadomość uprzedzająca. uiwhisper.py szukasz: def SetChatLineMax(self, max): self.chatLine.SetMax(max) from grpText import GetSplitingTextLine text = self.chatLine.GetText() if text: self.chatLine.SetText(GetSplitingTextLine(text, max, 0)) DODAJESZ POD: def AppendWarningMessage(self, targetName): if targetName.find('[H]') != -1 or targetName.find('[GM]') != -1 or targetName.find('[SGM]') != -1 or targetName.find('[GA]') != -1: chat.AppendWhisper(chat.WHISPER_TYPE_GM, targetName, localeInfo.WARNING_SEND_WHISPER_TO_TEAM_MEMBER) locale_game.txt dodajesz: WARNING_SEND_WHISPER_TO_TEAM_MEMBER Próbujesz skontaktować się z administratorem, Proszę skierować swoje pytanie/sprawę bezpośrednio lub ryzykować, że nie otrzymasz odpowiedzi! interfacemoduly.py szukasz: self.dlgWhisperWithoutTarget.OpenWithTarget(name) dodajesz pod: self.dlgWhisperWithoutTarget.AppendWarningMessage(name)
    14 punktów
  21. Download: 🔐 Ukryta Treść 🔐 Prezentacja: 🔐 Ukryta Treść 🔐
    14 punktów
  22. Tak jak w temacie, nie raz było to wkurzające że padliśmy od agresywnego moba np. w DT czy grocie, daliśmy 'Rozpocznij Tutaj' no i cyk zostaliśmy zabici jak przy nas był taki agresywny mobek ale pora to zmienić. Implementacja: 📂 Lokalizacja pliku: 'game -> char_battle.cpp' 🔍 Szukaj void CHARACTER::UpdateAggrPointEx(LPCHARACTER pAttacker, EDamageType type, int dam, CHARACTER::TBattleInfo & info) A w niej: ChangeVictimByAggro(info.iAggro, pAttacker); ♻️ Zamień na: if (type != DAMAGE_TYPE_POISON) ChangeVictimByAggro(info.iAggro, pAttacker);
    14 punktów
  23. Dzisiaj coś nieco innego niż zwykle. Ustawianie grupek potworów, czy też dropu nie należy do przyjemnych zajęć, a tym bardziej, gdy pomylimy się w kolejności ich ID co może powodować różne błędy. Wychodząc naprzeciw skryptowi dość popularnego twórcy: 🔐 Ukryta Treść 🔐 Postanowiłem nieco "rozbudować" CTextFileLoader i jednocześnie przyspieszyć pracę nad ustawianiem dropu czy też grupek potworów. Na czym polega zmiana? Nie będę się rozpisywał, po prostu pokażę: Oczywiście obsługiwane są oba typy formatowania/składni naszej konfiguracji żebyście nie musieli przerabiać wszystkieg od zera. A zatem przejdźmy do działania. Otwieramy plik: /common/CommonDefines.h lub /common/service.h // Add: #define ENABLE_TEXT_FILE_LOADER_EX Otwieramy plik: /game/src/item_manager_read_tables.h // bool ITEM_MANAGER::ReadMonsterDropItemGroup // Search for: if (!loader.Load(c_pszFileName)) // Replace with: #ifdef ENABLE_TEXT_FILE_LOADER_EX if (!loader.Load(c_pszFileName, true)) #else if (!loader.Load(c_pszFileName)) #endif // bool ITEM_MANAGER::ReadMonsterDropItemGroup // Search for: TTokenVector* pTok = NULL; // Add before: #ifdef ENABLE_TEXT_FILE_LOADER_EX TIntegerVector* item_drop_info_vec; const bool has_integer_vector = loader.GetIntegerVector(&item_drop_info_vec); #endif // bool ITEM_MANAGER::ReadMonsterDropItemGroup // Search for: CMobItemGroup * pkGroup = M2_NEW CMobItemGroup(iMobVnum, iKillDrop, stName); // Add under: #ifdef ENABLE_TEXT_FILE_LOADER_EX if (has_integer_vector) { for (auto vec : *item_drop_info_vec) { if (!GetTable(vec[0])) vec.erase(vec.begin()); if (!GetTable(vec[0])) continue; uint32_t item_vnum = vec[0]; uint16_t item_count = vec[1]; uint32_t part_pct = vec[2]; if (part_pct == 0) { sys_log(0, "ITEM_MANAGER::ReadMonsterDropItemGroup >> Item %d, part_pct = 0, Group name: %s (item not added to drop!)", item_vnum, stName); continue; } uint32_t rare_pct = vec.size() > 3 ? MINMAX(0, vec[3], 100) : 50; pkGroup->AddItem(item_vnum, item_count, part_pct, rare_pct); } if (!pkGroup->IsEmpty()) m_map_pkMobItemGroup.emplace(iMobVnum, pkGroup); } #endif Otwieramy plik: /game/src/mob_manager.cpp // bool CMobManager::LoadGroup // Search for: if (!loader.Load(c_pszFileName)) // Replace with: #ifdef ENABLE_TEXT_FILE_LOADER_EX if (!loader.Load(c_pszFileName, true)) #else if (!loader.Load(c_pszFileName)) #endif // Search for: if (pTok->size() < 2) { sys_err("LoadGroup : Syntax error %s : no leader vnum, node %s", c_pszFileName, stName.c_str()); loader.SetParentNode(); continue; } // Replace with: #ifndef ENABLE_TEXT_FILE_LOADER_EX if (pTok->size() < 2) { sys_err("LoadGroup : Syntax error %s : no leader vnum, node %s", c_pszFileName, stName.c_str()); loader.SetParentNode(); continue; } #endif // Search for: sys_log(0, "GROUP: %-5d %s", iVnum, stName.c_str()); sys_log(0, " %s %s", pTok->at(0).c_str(), pTok->at(1).c_str()); // Add under: #ifdef ENABLE_TEXT_FILE_LOADER_EX std::vector<std::vector<int32_t>>* mob_vec; if (loader.GetIntegerVector(&mob_vec)) { for (auto data : *mob_vec) { if (data.size() > 1) data.erase(data.begin()); const uint32_t& mob_vnum = data[0]; if (!Get(mob_vnum)) { sys_log(0, " CANNOT FIND MobTable for vnum: %d", mob_vnum); continue; } pkGroup->AddMember(mob_vnum); } loader.SetParentNode(); m_map_pkMobGroup.emplace(iVnum, pkGroup); continue; } #endif Otwieramy plik: /game/src/text_file_loader.cpp // Add (under includes): #ifdef ENABLE_TEXT_FILE_LOADER_EX int32_t count_digits(const std::string& s) { return std::count_if(s.begin(), s.end(), [](unsigned char c){ return std::isdigit(c); } // correct ); } #endif // Search for: bool CTextFileLoader::Load(const char * c_szFileName) // Replace with: #ifdef ENABLE_TEXT_FILE_LOADER_EX , bool bBuildIntegerVector #endif // Search for: m_strFileName = c_szFileName; // Add under: #ifdef ENABLE_TEXT_FILE_LOADER_EX m_bBuildIntegerVector = bBuildIntegerVector; #endif // Search for: std::string key = stTokenVector[0]; // Add under: #ifdef ENABLE_TEXT_FILE_LOADER_EX if (m_bBuildIntegerVector && count_digits(key) == key.length()) { std::vector<int32_t> tmp_vec; for (const auto& token : stTokenVector) { if (count_digits(token) != token.length()) continue; int32_t value; str_to_number(value, token.c_str()); tmp_vec.push_back(value); } pGroupNode->LocalIntegerVector.push_back(tmp_vec); } #endif // Search for: sys_err("CTextFileLoader::LoadGroup : must have a value (filename: %s line: %d key: %s)", m_strFileName.c_str(), m_dwcurLineIndex, key.c_str()); break; // Replace with: #ifdef ENABLE_TEXT_FILE_LOADER_EX continue; #else sys_err("CTextFileLoader::LoadGroup : must have a value (filename: %s line: %d key: %s)", m_strFileName.c_str(), m_dwcurLineIndex, key.c_str()); break; #endif // Search for: BOOL CTextFileLoader::GetTokenVector(const std::string & c_rstrKey, TTokenVector ** ppTokenVector) { [...] } // Add under: #ifdef ENABLE_TEXT_FILE_LOADER_EX bool CTextFileLoader::GetIntegerVector(TIntegerVector** ppIntegerbVector) { if (!m_pcurNode) { assert(!"Node to access has not set!"); return false; } *ppIntegerbVector = &m_pcurNode->LocalIntegerVector; return true; } #endif Otwieramy plik: /game/src/text_file_loader.h // Search for: typedef std::map<std::string, TTokenVector> TTokenVectorMap; // Add under: #ifdef ENABLE_TEXT_FILE_LOADER_EX typedef std::vector<std::vector<int32_t>> TIntegerVector; #endif // Search for: TTokenVectorMap LocalTokenVectorMap; // Add under: #ifdef ENABLE_TEXT_FILE_LOADER_EX TIntegerVector LocalIntegerVector; #endif // Search for: bool Load(const char * c_szFileName); // Replace with: bool Load(const char * c_szFileName #ifdef ENABLE_TEXT_FILE_LOADER_EX , bool bBuildIntegerVector = false #endif ); // Search for: BOOL GetTokenString(const std::string & c_rstrKey, std::string * pString); // Add under: #ifdef ENABLE_TEXT_FILE_LOADER_EX bool GetIntegerVector(TIntegerVector** ppIntegerVector); #endif // Search for: TGroupNode * m_pcurNode; // Add under: #ifdef ENABLE_TEXT_FILE_LOADER_EX bool m_bBuildIntegerVector; #endif To by było na tyle. Jeśli napotkacie jakieś błędy to piszcie. Ja jedynie sprawdziłem czy działa na grupy potworów.
    13 punktów
  24. 13 punktów
  25. Implementacja: 📂 Lokalizacja pliku: 'game -> questlua_global.cpp' 🔍 Szukaj: ALUA(_char_log) // w przypadku entry-core to: int _char_log(lua_State * L) A w niej: LogManager::instance().CharLog(ch, what, how, hint); ♻️ Zamień na: if (ch) LogManager::instance().CharLog(ch, what, how, hint); else sys_err("LUA PREVENT: !ch on _char_log!");
    13 punktów
  26. Stare, może komuś się przyda Małe info: Zbroje posiadają poprawione tekstury połysku oraz nie posiadają żadnego loga na sobie. Set jest kompletny, paczka zawiera również ikony. VirusTotal: KLIKNIJ SOBIE Paczucha: Ametystowy set zbroi i broni.7z SS. Zbroje: SS, Bronie: Zapożyczone od użytkownika z innego forum: Asthard
    13 punktów
  27. Łapcie pliki+ klienta Hammer/Dope/Twix + SRC : 🔐 Ukryta Treść 🔐 Zakładam, że każdy wie co to takiego 🙂 Decrypter: 🔐 Ukryta Treść 🔐 Jakby ktoś mógł to niech gotową maszynę podrzuci pod temat 😄 Jeśli ktoś jest chętny do przetestowania plików to tu jest serwer na nich: Metin2Twix - GM MODE (Będąc zalogowani i nie teleportując się przez 30 minut otrzymujecie 1MD (SM), za które możecie kupić itemy MOD znane z Hammera (+10k stat, 250 szybkość zaklęcia itd.) EVENT- 50 MD (SM) CO 5 MINUT!!! Zostaje dodane 42K nowych itemków lib.rar
    12 punktów
  28. Łapcie Kod źródłowy cheata C4US 😄 (Zawiera Exploity Chmurkę, oraz Instant Fish) i wszystkie inne opcje o jakich można pomyśleć w Multihacku) - 🔐 Ukryta Treść 🔐 Dobra zarzucam wam też AdressScanner bo znalazłem 🙂 AddressScanner.rar
    12 punktów
  29. Siemka przerzucam dalej. Twórca jest Jking System powiadomień w grze, może być wykorzystany do różnych celów. Biologa Kolekcjonera Wygasającego czasowego itemka(PDk, Rekawice, PPK itd..) I co tam se jeszcze wymyślicie XD Powiadomienia są ustawiane w kolejce wiec jak sie wam nasra ich to będzie leciał kolejno jeden za drugim. 🔐 Ukryta Treść 🔐 Backup m2_ingame_notifications-master.zip
    12 punktów
  30. Implementacja: 📂 Lokalizacja pliku: 'game -> cube.cpp' 🔍 Szukaj: bool Cube_make (LPCHARACTER ch) A w niej: LogManager::instance().CubeLog(ch->GetPlayerID(), ch->GetX(), ch->GetY(), reward_value->vnum, new_item->GetID(), reward_value->count, 1); return true; ♻️ Zamień na: if (new_item) LogManager::instance().CubeLog(ch->GetPlayerID(), ch->GetX(), ch->GetY(), reward_value->vnum, new_item->GetID(), reward_value->count, 1); else sys_err("Cannot find new_item on CUBE_MAKE!"); return true;
    11 punktów
  31. Tutaj znajdziecie Prezentacje serwera/plików: Pobieranie: Skan:
    11 punktów
  32. Siema Podrzucam wam komplet plików serwerowych Santany za 300 ojro. Miłej zabawy 🙂 Pobieralnia 🔐 Ukryta Treść 🔐
    10 punktów
  33. Cześć, tak to wygląda w grze: Autorem jest : blackdragonx61 W pierwszej kolejności trzeba 2 nowe funkcje bez których system nie zadziała. Dalsza część systemu znajduje się w załączniku. 1. ➡️ W EterPythonLib/PythonWindowManagerModule.cpp nad void initwndMgr() dodaj: PyObject* wndMgrSetSlotCoolTimeInverse(PyObject* poSelf, PyObject* poArgs) { UI::CWindow* pWin; if (!PyTuple_GetWindow(poArgs, 0, &pWin)) return Py_BuildException(); int iSlotIndex; if (!PyTuple_GetInteger(poArgs, 1, &iSlotIndex)) return Py_BuildException(); float fCoolTime; if (!PyTuple_GetFloat(poArgs, 2, &fCoolTime)) return Py_BuildException(); float fElapsedTime = 0.0f; if (!PyTuple_GetFloat(poArgs, 3, &fElapsedTime)) return Py_BuildException(); if (!pWin->IsType(UI::CSlotWindow::Type())) return Py_BuildException(); ((UI::CSlotWindow*)pWin)->SetSlotCoolTimeInverse(iSlotIndex, fCoolTime, fElapsedTime); return Py_BuildNone(); } PyObject* wndMgrSetSlotCoolTimeColor(PyObject* poSelf, PyObject* poArgs) { UI::CWindow* pWindow; if (!PyTuple_GetWindow(poArgs, 0, &pWindow)) return Py_BuildException(); int iIndex; if (!PyTuple_GetInteger(poArgs, 1, &iIndex)) return Py_BuildException(); float fr; if (!PyTuple_GetFloat(poArgs, 2, &fr)) return Py_BuildException(); float fg; if (!PyTuple_GetFloat(poArgs, 3, &fg)) return Py_BuildException(); float fb; if (!PyTuple_GetFloat(poArgs, 4, &fb)) return Py_BuildException(); float fa; if (!PyTuple_GetFloat(poArgs, 5, &fa)) return Py_BuildException(); if (!pWindow->IsType(UI::CSlotWindow::Type())) return Py_BuildException(); ((UI::CSlotWindow*)pWindow)->SetSlotCoolTimeColor(iIndex, fr, fg, fb, fa); return Py_BuildNone(); } ➡️ W void initwndMgr() nad: { NULL, NULL, NULL }, ➕Dodaj: { "SetSlotCoolTimeInverse", wndMgrSetSlotCoolTimeInverse, METH_VARARGS }, { "SetSlotCoolTimeColor", wndMgrSetSlotCoolTimeColor, METH_VARARGS }, 2. ➡️ W EterPythonLib/PythonSlotWindow.h znajdź: CAniImageBox * pFinishCoolTimeEffect; ➕I dodaj poniżej: bool bCoolTimeInverse; D3DXCOLOR d3CoolTimeColor; ➡️ Następnie znajdź: void OnOverOutItem(); ➕I dodaj poniżej: void SetSlotCoolTimeInverse(DWORD dwIndex, float fCoolTime, float fElapsedTime = 0.0f); void SetSlotCoolTimeColor(DWORD dwSlotIndex, float fr, float fg, float fb, float fa); 3. ➡️ W EterPythonLib/PythonSlotWindow.cpp znajdź: if (pSlot->pInstance) ➕I dodaj powyżej: pSlot->bCoolTimeInverse = false; pSlot->d3CoolTimeColor = D3DXCOLOR(0.0f, 0.0f, 0.0f, 0.5f); ➡️ W void CSlotWindow::OnRender() znajdź warunek: if (rSlot.fCoolTime != 0.0f) ♻️ I zamień całość na: if (rSlot.fCoolTime != 0.0f) { const float fCurTime = CTimer::Instance().GetCurrentSecond(); const float fPercentage = (fCurTime - rSlot.fStartCoolTime) / rSlot.fCoolTime; const int iXCellSize = rSlot.ixCellSize; const int iYCellSize = rSlot.iyCellSize; const float fxCenter = m_rect.left + rSlot.ixPosition + iXCellSize / 2.0f; const float fyCenter = m_rect.top + rSlot.iyPosition + iYCellSize / 2.0f; const float fRadius = MAX(iXCellSize, iYCellSize) / 2.0f; if (rSlot.bCoolTimeInverse) CPythonGraphic::Instance().RenderCoolTimeBoxInverse(fxCenter, fyCenter, fRadius, fPercentage); else CPythonGraphic::Instance().RenderCoolTimeBox(fxCenter, fyCenter, fRadius, fPercentage, rSlot.d3CoolTimeColor); if (fCurTime - rSlot.fStartCoolTime >= rSlot.fCoolTime && !rSlot.bCoolTimeInverse) { if ((fCurTime - rSlot.fStartCoolTime) - rSlot.fCoolTime < 1.0f) __CreateFinishCoolTimeEffect(&rSlot); rSlot.fCoolTime = 0.0f; rSlot.fStartCoolTime = 0.0f; } } ➡️ Pod: void CSlotWindow::__DestroyBaseImage() { .. } ➕Dodaj: void CSlotWindow::SetSlotCoolTimeInverse(DWORD dwIndex, float fCoolTime, float fElapsedTime) { TSlot* pSlot; if (!GetSlotPointer(dwIndex, &pSlot)) return; pSlot->fCoolTime = fCoolTime; pSlot->fStartCoolTime = CTimer::Instance().GetCurrentSecond() - fElapsedTime; pSlot->bCoolTimeInverse = true; } void CSlotWindow::SetSlotCoolTimeColor(DWORD dwSlotIndex, float fr, float fg, float fb, float fa) { TSlot* pSlot; if (!GetSlotPointer(dwSlotIndex, &pSlot)) return; pSlot->d3CoolTimeColor = D3DXCOLOR(fr, fg, fb, fa); } 4. ➡️ W EterPythonLib/PythonGraphic.h znajdź: void RenderCoolTimeBox(float fxCenter, float fyCenter, float fRadius, float fTime); ♻️ I zamień na: void RenderCoolTimeBox(float fxCenter, float fyCenter, float fRadius, float fTime, D3DXCOLOR color); void RenderCoolTimeBoxInverse(float fxCenter, float fyCenter, float fRadius, float fTime); 5. ➡️ W EterPythonLib/PythonGraphic.cpp znajdź: void CPythonGraphic::RenderCoolTimeBox(float fxCenter, float fyCenter, float fRadius, float fTime) ♻️ I zamień na: void CPythonGraphic::RenderCoolTimeBox(float fxCenter, float fyCenter, float fRadius, float fTime, D3DXCOLOR color) ❌ Następnie zakomentuj lub usuń tę linie: static D3DXCOLOR color = D3DXCOLOR(0.0f, 0.0f, 0.0f, 0.5f); ➡️ Znajdź: long CPythonGraphic::GenerateColor(float r, float g, float b, float a) ➕Dodaj powyżej tę funkcje: void CPythonGraphic::RenderCoolTimeBoxInverse(float fxCenter, float fyCenter, float fRadius, float fTime) { fTime = min(1.0f, fTime); fTime = max(0.0f, fTime); static D3DXCOLOR color = D3DXCOLOR(0.0f, 0.0f, 0.0f, 0.5f); static D3DXVECTOR2 s_v2BoxPos[8] = { D3DXVECTOR2(+1.0f, -1.0f), D3DXVECTOR2(+1.0f, 0.0f), D3DXVECTOR2(+1.0f, +1.0f), D3DXVECTOR2(0.0f, +1.0f), D3DXVECTOR2(-1.0f, +1.0f), D3DXVECTOR2(-1.0f, 0.0f), D3DXVECTOR2(-1.0f, -1.0f), D3DXVECTOR2(0.0f, -1.0f), }; int iTriCount = int(8.0f * fTime); const float fLastPercentage = 1.0f; std::vector<TPDTVertex> vertices; TPDTVertex vertex; vertex.position = TPosition(fxCenter, fyCenter, 0.0f); vertex.texCoord = TTextureCoordinate(0.0f, 0.0f); vertex.diffuse = color; vertices.push_back(vertex); vertex.position = TPosition(fxCenter, fyCenter - fRadius, 0.0f); vertex.texCoord = TTextureCoordinate(0.0f, 0.0f); vertex.diffuse = color; vertices.push_back(vertex); for (int j = 0; j < iTriCount; ++j) { vertex.position.x = fxCenter + s_v2BoxPos[j].x * fRadius; vertex.position.y = fyCenter + s_v2BoxPos[j].y * fRadius; vertices.push_back(vertex); } if (fLastPercentage > 0.0f) { const int iPos = (iTriCount + 7) % 8; vertex.position.x = ((s_v2BoxPos[iPos].x - s_v2BoxPos[(iTriCount + 8) % 8].x) * fLastPercentage + s_v2BoxPos[(iTriCount + 8) % 8].x) * fRadius + fxCenter; vertex.position.y = (fLastPercentage * (s_v2BoxPos[iPos].y - s_v2BoxPos[(iTriCount + 8) % 8].y) + s_v2BoxPos[(iTriCount + 8) % 8].y) * fRadius + fyCenter; vertices.push_back(vertex); ++iTriCount; } if (vertices.empty()) return; if (SetPDTStream(&vertices[0], vertices.size())) { STATEMANAGER.SaveTextureStageState(0, D3DTSS_COLORARG1, D3DTA_DIFFUSE); STATEMANAGER.SaveTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); STATEMANAGER.SaveTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE); STATEMANAGER.SaveTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); STATEMANAGER.SetTexture(0, NULL); STATEMANAGER.SetTexture(1, NULL); STATEMANAGER.SetVertexShader(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1); const DWORD dwState = STATEMANAGER.GetRenderState(D3DRS_CULLMODE); STATEMANAGER.SetRenderState(D3DRS_CULLMODE, D3DBLEND_SRCCOLOR); STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLEFAN, 0, iTriCount); STATEMANAGER.RestoreTextureStageState(0, D3DTSS_COLORARG1); STATEMANAGER.RestoreTextureStageState(0, D3DTSS_COLOROP); STATEMANAGER.RestoreTextureStageState(0, D3DTSS_ALPHAARG1); STATEMANAGER.RestoreTextureStageState(0, D3DTSS_ALPHAOP); STATEMANAGER.SetRenderState(D3DRS_CULLMODE, dwState); } } 6. ➕W root/ui.py w klasie class SlotWindow(Window): dodaj: def SetSlotCoolTimeInverse(self, slotIndex, coolTime, elapsedTime = 0.0): wndMgr.SetSlotCoolTimeInverse(self.hWnd, slotIndex, coolTime, elapsedTime) def SetSlotCoolTimeColor(self, slotIndex, r, g, b, a): wndMgr.SetSlotCoolTimeColor(self.hWnd, slotIndex, r, g, b, a) To wszystko z wymaganych dodatków, w załączniku udostępniam dalszą część część systemu, która pozwoli uzyskać taki efekt jak na gifie. Slot Time Info.zip
    10 punktów
  34. Łapcie! Rykox V2 🔐 Ukryta Treść 🔐 l. root h. krwawamagia do SSH i Mysql
    10 punktów
  35. Dziś pojawił się pełen wyciek źródła martysamy v5.8, dobrej zabawy. 😉 ⬇️Pobieranie SourceFiles Update v5.8 (v5-ex-r642).rar
    10 punktów
  36. Cześć, tak to wygląda: Autor: blackdragonx61 Download: 🔐 Ukryta Treść 🔐 Skan: 🔐 Ukryta Treść 🔐
    9 punktów
  37. Cześć, postanowiłem napisać ten "poradnik", aby każdy wiedział mniej więcej na jakiej zasadzie działa komunikacja sieciowa w jakże pięknym kodzie źródłowym gry Metin2. W poradniku omówimy jak działa komunikacja: - Klient gry -> Serwer - Serwer -> Klient gry - Serwer <-> Serwer - Serwer -> Baza danych - Baza danych -> Serwer Klient gry -> Serwer Zacznijmy od utworzenia nowego pakietu, który będziemy wysyłać z klienta gry do serwera. W tym celu przejdźmy do pliku: /UserInterface/Packet.h Zwróćmy uwagę jak są nazwane istniejące już pakiety: HEADER_CG_LOGIN = 1, HEADER_CG_ATTACK = 2, Jak widać w "nazwie" tych pakietów zawarte jest "_CG_" oznacza to, że pakiet jest "ClientGame", czyli po prostu wysyłany z klienta gry do serwera. Szukamy pierwszego wolnego ID dla naszego pakietu. U mnie będzie to 126, a zatem dodajemy: HEADER_CG_SHAREGON_TEST_PACKET = 126, Okej, jeśli mamy już ustalone ID naszego pakietu to teraz pora przygotować strukturę danych, które będą przesyłane. Załóżmy, że będziemy przesyłać jakąś liczbę do serwera, a zatem dodajemy następującą strukturę: typedef struct SSharegonTestPacketCG { BYTE header; // nasz header int value; // wartość którą będziemy wysyłać do serwera } TSharegonTestPacketCG; Warto w nazwie struktury (w tym przypadku SSharegonTestPacketCG) również zawrzeć typ pakietu w postaci "CG", aby później łatwiej było się odnaleźć. Kolejnym krokiem będzie dodanie funkcji, która będzie nam wysyłała pakiet do serwera. W tym celu przechodzimy najpierw do pliku: /UserInterface/PythonNetworkStream.h Wyszukujemy np.: bool SendTargetPacket(DWORD dwVID); Dodajemy niżej: bool SendSharegonTestPacket(int value); Okej, mamy zadeklarowaną już funkcję. Teraz pasowałoby napisać jej tzw. "ciało", w którym będą wykonywane odpowiednie czynności, aby wysłać pakiet. Przechodzimy do pliku: /UserInterface/PythonNetworkStreamPhaseGame.cpp Na samym dole pliku wklejamy "ciało" funkcji: bool CPythonNetworkStream::SendSharegonTestPacket(int value) { TSharegonTestPacketCG packet; // deklarowanie struktury naszego pakietu packet.header = HEADER_CG_SHAREGON_TEST_PACKET; // nadawanie nagłówka packet.value = value; // przypisywanie wartości wysyłanej do serwera if (!Send(sizeof(packet), &packet)) // wysyłanie pakietu, jako parametry funkcji podajemy rozmiar naszego pakietu oraz wskaźnik do pamięci, gdzie trzymane są dane naszego pakietu { TraceError("Z jakiegos powodu nie udalo sie wyslac pakietu!"); return false; } return SendSequence(); // to można zastąpić zwykłym 'return true;' lub nawet całą funkcję przerobić na void, ale zachowajmy styl developerów metina :D } Okej, prawie gotowe. Pasowałoby jeszcze jakoś wysłać ten pakiet z poziomu klienta gry. Na potrzeby tego poradnika ustawimy wysyłanie pakietu pod przycisk F5, ale najpierw musimy jeszcze dopisać nową funkcję obsługiwaną przez cudownego pythona. Przechodzimy do pliku: /UserInterface/PythonNetworkStreamModule.cpp Szukamy: void initnet() Powyżej dodajemy: PyObject* netSendSharegonTestPacket(PyObject* poSelf, PyObject* poArgs) { int value; if (!PyTuple_GetInteger(poArgs, 0, &value)) return Py_BuildException(); CPythonNetworkStream::Instance().SendSharegonTestPacket(value); return Py_BuildNone(); } Następnie wyszukujemy: { NULL, NULL, NULL }, I dodajemy powyżej: { "SendSharegonTestPacket", netSendSharegonTestPacket, METH_VARARGS }, Okej, kod wymagany w bince mamy gotowy. Teraz przejdziemy do odbierania tego pakietu przez serwer. Pythona zostawimy sobie na koniec 😄 Przechodzimy do pliku: /game/src/packet.h Jak się pewnie domyślacie dodajemy tutaj nasze id pakietu oraz jego strukturę: HEADER_CG_SHAREGON_TEST_PACKET = 126, typedef struct SSharegonTestPacketCG { BYTE header; int value; } TSharegonTestPacketCG; Teraz musimy dodać nasz nowy pakiet do "listy" obsługiwanych pakietów, żeby wszystko działało jak należy. Przechodzimy do pliku: /game/src/packet_info.cpp Wyszukujemy: Set(HEADER_CG_STATE_CHECKER, sizeof(BYTE), "ServerStateCheck", false); I dodajemy niżej: Set(HEADER_CG_SHAREGON_TEST_PACKET, sizeof(TSharegonTestPacketCG), "SharegonTestPacket", false); Okej, pakiet został dodany do listy obsługiwanych pakietów. Teraz pasowałoby odebrać ten pakiet przez serwer. Przechodzimy do pliku: /game/src/input.h Wyszukujemy np.: void Refine(LPCHARACTER ch, const char* c_pData); Niżej dodajemy: void SharegonTestPacket(LPCHARACTER ch, const char* c_pData); Funkcja zadeklarowana, pora na odbieranie pakietu i ciało funkcji. Przechodzimy do pliku: /game/src/input_main.cpp Szukamy: case HEADER_CG_REFINE: Refine(ch, c_pData); break; Niżej dodajemy: case HEADER_CG_SHAREGON_TEST_PACKET: SharegonTestPacket(ch, c_pData); break; Na dole pliku dodajemy ciało funkcji: void CInputMain::SharegonTestPacket(LPCHARACTER ch, const char* c_pData) { if (!ch) // jeśli jakimś cudem nasza postać nie została znaleziona przerywamy wykonywanie funkcji return; TSharegonTestPacketCG* packet_data = (TSharegonTestPacketCG*) c_pData; // rzutujemy odebrane dane, na typ danych naszego pakietu ch->ChatPacket(CHAT_TYPE_INFO, "Brawo! Udalo sie odebrac dane z klienta o wartosci: %d", packet_data->value); } Okej teraz pora na Pythona. Przechodzimy do pliku: game.py Wyszukujemy: onPressKeyDict[app.DIK_F4] = lambda : self.__PressQuickSlot(7) Niżej dodajemy: onPressKeyDict[app.DIK_F5] = lambda : self.SendSharegonTestPacket() Na samym dole pliku dodajemy funkcję: def SendSharegonTestPacket(self): net.SendSharegonTestPacket(777) Teraz po wejściu do gry i kliknięciu przycisku F5 powinien pojawić nam się na czat fajny komunikat 😄 Na ten moment tylko jeden rodzaj pakietu. Temat będzie aktualizowany o kolejne i postaram się jakoś bardziej przejrzyście edytować stylistykę. Całość pisałem z pamięci (mogą wystąpić literówki), jeśli znajdziecie jakiś błąd to proszę pisać w temacie.
    9 punktów
  38. Siemka, przekopywałem różne fora w poszukiwaniu cheatów na nasze source z tego forum jak i "terenzo" poradnik: wrzuć do folderu pack w cliencie te dwa pliki i dopisz je do Index który również znajduje się w folderze pack WHPH.eix WHPH.epk WH_index.7z
    9 punktów
  39. ♦ STRONA ♦ DISCORD ♦ DOWNLOAD ♦ Cheat działający na oficjalnych serwerach Gameforge oraz na niektórych serwerach prywatnych. Prezentacja cheata - STMod Poradniki i przykłady użycia cheata Poradnik z uruchomienia STMod na oficjalnym serwerze Metin2 Działanie FarmBot'a (przykład użycia na prywanym serwerze) Jak używać FishBot'a Wtyczka DamageHack Pomocnik do eventu rybackiego Przykład użycia na serwerach oficjalnych Przyśpiesz wytwarzanie kryształałów Energii za pomocą bota Darmowy test cheata przed zakupem! Mam dobrą wiadomość dla graczy, autor umożliwia w pełni darmowe przetestowanie cheata. Aby móc rozpocząć testy będziesz potrzebować klucza premium, który możesz otrzymać w pełni za darmo. Wystarczy, że dołączysz do społeczonści STMOD na Discordzie i zostaniesz naszym członkiem przez conajmniej 1 dzień. Opiszę teraz krok po kroku jak wygenerować klucz Pobierz narzędzie do wygenerowania darmowego kodu premium. STMod_Free_premium_tool.rar ⚠️To narzędzie może zostać wykryte jako potencjalny virus.⚠️ Po uruchomieniu zobaczysz takie okno Wpisz w nim swoją nazwę użytkownika i wciśnij przycisk - 'Generate'. Zostanie wygenerowany plik o nazwie: free_premium_key_twoja_nazwa_użytkownika. Utwórz zgłoszenie na naszym serwerze discord - STMod na kanale: czat support-ticket. Wyślij wygenerowany plik w zgłoszeniu. Jeśli jesteś z nami od 1 dnia i wszystko jest poprawnie bot STMod wygeneruje klucz. 📢Pierwszy darmowy klucz premium będzie ważny przez 24 godziny od momentu aktywacji. Po upływie tego czasu możesz wygenerować kolejny darmowy klucz, ale ten będzie działać tylko przez 2h / 24h. Funkcje Premium⭐ Dostęp do specjalnego obejścia antycheat. Możliwość uruchomienia 99 klientów gry na raz. Usunięcie reklam. Dostęp do premium wtyczek do cheata. Specjalne funkcje: Farm Bot, FishBot, Mining, Exp Bot, Quest Bot, Damage Hack, Energy Bot. Priorytetowe wsparcie. Wykrywacza GM oraz graczy w okolicy. Wiele innych udogodnień w grze Każdy pakiet obowiązuje limit uruchomionych klientów gry Pakiet 10 dni: 12 klientów Pakiet 30 dni: 24 klientów Pakiet 60 dni: 48 klientów Pakiet 90 dni: 99 klientów 📢Przed zakupem upewnij się, że STMod działa na serwerze, na którym grasz! Możesz wypróbować samodzielnie, uzyskując darmowe premium. Dostępne formy płatnoścI💸 Cennik💰 - 10 dni | 12.00 € - 30 dni | 16.00 € - 60 dni | 26.00 € - 90 dni | 40.00 € ⬇️Pobierz cheata STMod.zip
    8 punktów
  40. ______________________________________________________________________________ Powrót na Dungeon - v 1.2.rar
    8 punktów
  41. to i ja cos mam niby :# 🔐 Ukryta Treść 🔐
    8 punktów
  42. 🔐 Ukryta Treść 🔐
    8 punktów
  43. Trzymajcie tutaj cały zestaw Cortiuma z roku 2019, prezentacja serwera wisi na pewnym starym forum. 🙂 Paczka: Cortium 2019.rar Packer: Cortium packer.rar
    8 punktów
  44. brać kumaty ogarnie sb reszte :) dragon.zip
    8 punktów
  45. Trinity V11.38 kupione w lutym 2022 za 100 ojro. Krótkie info macie w pliku Readme. I tak nie korzystam z nich wiec nie ma sensu żeby siedziały i kisiły się na dysku, ale działać działają. Może się komuś przydadzą systemy z tych plików. Fun fact: Kupowanie u niego wygląda tak ze jak się nie upomnisz o najnowsza wersje plików to ci sprzeda przedostatnia a potem se krzyknie kolejne 100e za najnowsza XD, także fajnie fajnie. Locale_inc.h i service.h Locale_inc.hservice.h Pobieralnia: Host nr 1: 🔐 Ukryta Treść 🔐 Host nr 2: 🔐 Ukryta Treść 🔐
    8 punktów
  46. Hejka Hejka podrzucam pliczki Zeryona2. Jak sie kto popatrzy w src i oblooka clienta to widać ze robila te pliki ta sama osoba co Wonder2. Dużo syfu wiec jak se ktoś to poprawiać chce to polecam odmówić 3 zdrowaśki na start xD. Prezentacja: Pobieralnia:
    8 punktów
  47. Cześć. Jest to spis razem z wyjaśnieniem wszystkich plików znajdujących się w naszym źródle gry naszej kochanej gry. Spis jest wykonany przez użytkownika woops z zagranicznego forum, z oczywistych względów nie podsyłam linku. Myślę, że taki spis może pomóc wielu w polskiej wersji. Z racji na to, że jest to dużo tłumaczenia użyłem naszego super przyjaciela GPT, aby mi to przetłumaczył. Pojawiały się kwiatki, większość poprawiłem. Jeśli ktoś widzi jakieś pozostałości albo gdzieś nie ma wyjaśnienia, a wie od czego jest dany plik to pisz w komentarzu. Edytuje temat. COMMON DATABASE GAME
    8 punktów
  48. Myślę, że wielu polegnie na kompilacji... btw. nie ma tego cheata na forum już? NTSTATUS SYSCALL(DWORD syscall_id, DWORD parameterCount, ...) {//not for plebs :) }
    8 punktów
  49. Cześć Co tu będę się dużo rozpisywał. - AntyDMG, AntySync, AntyWH, AntyMOBBER Jeśli posiadasz jakieś mocniejsze/płatne hacki proszę przetestuj i daj znać w komentarzu. 💥Limiter jest kompatybilny z source entry ( nie pomagam dodać do zwykłego wsparcie tylko dla entry ) Wideo Desktop 12-01-2024 15-09-09.mp4 #1 Poradnik: #2 Poradnik: #3 Poradnik:
    7 punktów
×
×
  • Dodaj nową pozycję...