Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 12/21/2019 in all areas

  1. 39 points
    [Hidden Content] Są tutaj jakieś 2 stare moje questy, jakieś bronie, zbroje, moby, mapy.
  2. 23 points
    Witam i łapcie sety od Bombwork'a BOMBWORK_New.rar Skan: [Hidden Content]
  3. 18 points
    Pobieranie: Strona do rejestracji Konfiguracja: Instalujemy Apache2.4: pkg install apache24 Łączymy się z WinSCP, przechodzimy do /etc/ szukamy i edytujemy plik rc.conf, dopisując na końcu tego pliku: apache24_enable="YES" Uruchamiamy Apache: service apache24 start Instalujemy PHP i najpopularniejsze moduły do niego: pkg install mod_php56 php56-mysql php56-mysqli php56-session ➤ dla osób z nowszą wersją FreeBSD: pkg install php72 php72-mysqli mod_php72 php72-mbstring php72-zlib php72-curl php72-gd php72-json Ponownie łączymy się z WinSCP, przechodzimy do /usr/local/etc/apache24/ szukamy i edytujemy plik httpd.conf, szukając w nim: DirectoryIndex index.html Zamieniamy powyższą linijkę na: DirectoryIndex index.php index.html W tym samym plik httpd.conf na samym końcu dopisujemy: <FilesMatch "\.php$"> SetHandler application/x-httpd-php </FilesMatch> <FilesMatch "\.phps$"> SetHandler application/x-httpd-php-source </FilesMatch> Pobieramy stronę i wrzucamy do /usr/local/www/apache24/data/ Restartujemy Apache tak aby załapało wszystkie zmiany: service apache24 restart Może się tak zdarzyć że wyskoczy komunikat o istniejącym już koncie w bazie, wtedy wykonaj to jako zapytanie w Navicat: USE account; ALTER TABLE `account` MODIFY COLUMN `last_play` datetime NULL AFTER `money_drop_rate_expire`, MODIFY COLUMN `web_ip` varchar(15) CHARACTER SET ascii COLLATE ascii_general_ci NULL AFTER `web_admin`, MODIFY COLUMN `web_confirm` varchar(32) CHARACTER SET ascii COLLATE ascii_general_ci NULL AFTER `web_ip`;
  4. 18 points
    VirtualBox: [Pobierz] Hamachi: [Pobierz] Hamachi dla użytkowników Windowsa XP/VISTA/7/8/8.1 polecam instalować [Pobierz] Maszyna: [Pobierz] Client: [Pobierz] Login do Maszyny: root Hasło do Maszyny: 123456 Login do Konta: terenzo Hasło do Konta: 123456 Komendy użyte w filmie: sysinstall /etc/rc.d/netif restart Komenda do wystartowania serwera: /start Komenda do zatrzymania serwera: /stop Komenda do restartu całej maszyny: reboot Launcher: [Pobierz] PortMap: [Pobierz] Aby wszystko przeszło pomyślnie upewnij się że: Zapora Systemu Windows została wyłączona na każdym komputerze Że mamy uruchomionego portmapa Uruchamiamy launcher z prawami admina Nasz znajomy musi mieć normalne IP z hamachi bez .100
  5. 16 points
    Wesołych świąt :), świeżo spatchowany i rozpakowany client mediuma miłej zabawy! DL: [Hidden Content] Skan:
  6. 12 points
    Witam Pokaże Wam jak usunąć błąd dotyczący wywalenia serwera przez upuszczanie itemów. Teraz gdy ktoś użyje skryptu np. w m2bob ("Wyrzuć wszystko") zostanie wylogowany, a z jego ekwipunku zostaną upuszczone maksymalnie 4 przedmioty. Exploit Wyrzucanie Itemów Wejdź do char_item.cpp w /src/game/ Wejdź do char.h w /src/game/ Wejdź do char.cpp w /src/game/ Pozdrawiam
  7. 11 points
    Podczas sprzedaży przedmiotu, gdy wyskakuje informacja, jaki przedmiot zostanie sprzedany wyświetlana, jest zła nazwa przedmiotu. Przed zmianą ➤ Po zmianie 1. Przechodzimy do UserInterface\PythonPlayerModule.cpp i szukamy: PyObject * playerIsValuableItem(PyObject* poSelf, PyObject* poArgs) { TItemPos SlotIndex; switch (PyTuple_Size (poArgs)) { case 1: if (!PyTuple_GetInteger(poArgs, 0, &SlotIndex.cell)) return Py_BuildException(); break; case 2: if (!PyTuple_GetInteger(poArgs, 0, &SlotIndex.window_type)) return Py_BuildException(); if (!PyTuple_GetInteger(poArgs, 0, &SlotIndex.cell)) return Py_BuildException(); break; default: return Py_BuildException(); } 2. Zamieniamy na: PyObject * playerIsValuableItem(PyObject* poSelf, PyObject* poArgs) { TItemPos SlotIndex; switch (PyTuple_Size (poArgs)) { case 1: if (!PyTuple_GetInteger(poArgs, 0, &SlotIndex.cell)) return Py_BuildException(); break; case 2: if (!PyTuple_GetInteger(poArgs, 0, &SlotIndex.window_type)) return Py_BuildException(); if (!PyTuple_GetInteger(poArgs, 1, &SlotIndex.cell)) return Py_BuildException(); break; default: return Py_BuildException(); }
  8. 11 points
    Witam Zbierają mi się pogramy od 2009 roku, mam je na dysku, przechodzą z komputera na laptopa, a później znowu na laptopa Myślę, że trochę się tego nazbierało, większość linków wygasło. Daję wam, bo może się przydać Wszystkie linki są na hostingu mega.co.nz, więc szybko nie powinny wygasnąć Temat jest pisany pod nowych użytkowników, którzy spamią, że kolega nie może wejść na serwer, bo go wywala jak i poszukują reuploadu danego programu. 1.Edytor map - Game Files Open 2.Program do edycji praw komend w game 3.Epack32 by terenzo - Rozpakowuje pliki .eix/.epk + nowe item i mob_proto z globala 2014 roku 4.EterNexus - Wypakowuje pliki .eix/.epk, nie generuje pliku .xml. Można dokładać pliki do folderu bezpośrednio pakując i nie robić dodatkowych plików .xml 5.Exp editor by terenzo - pozwala na edytowanie tabeli expa w game 6. File Archiver - Unpacker jeszcze z 2009 roku, który podczas wypakowywania plików tworzy plik .xml z wpisami, które "pokazują" co jest w rozpakowanym przez nas pliku. 7. File Archiver by kamer - Posiada dosłownie takie same opcje jak File Archiver z punktu 6, ale dodatkowo posiada unpacker do item_proto i mob_proto z lat 2010/2013. 8. GameMasterPanel_III_SF_2010 - Jest to panel GM zrobiony przez Bambuska na pliki 2010. Ma same podstawowe i przydatne funkcje. 9. GameMasterPanel_III_SF_2008 - Posiada takie same funkcje co w punkcie 8, jednak ten program przeznaczony jest jedynie pod pliki 2008 10. Generator xml by szykra - Jest to program w rozszerzeniu .exe, który generuje nam wpisy do pliku .xml. Wystarczy podać lokalizację folderu, z którego chcemy wygenerować wpisy do .xml i klikamy ok. 11. Granny Viewer - Jest to program pozwalający przeglądanie modeli o rozszerzeniu typowym dla Metin2, czyli .gr2 12. Konverter granny - W tej paczce są dwa programy. Jeden jest od konvertowania z wersji grannego modelu 2.6 na 2.4, drugi z nich pozwala na przekonvertowanie z rozszerzenia .gr2 na rozszerzenie pozwalające nam importowanie modelu do 3D maxa. 13. ATR_TO_RAW_BY_Anohros - Jest to program pozwalający przekonvertowanie pliku .RAW do .ATTR i odwrotnie. Te pliki znajdziemy w dowolnym folderze mapy na serwerze i cliencie 14. Launcher mcncc V2 Wersja 1 - Jest to launcher mcncc V2 dla hamachi (znany również jako launcher z głową sury, który działa na serwerach hamachi). Masz problem, że Twój kolega wchodzi na serwer i wywala go przy wyborze postaci, a Ty sam wchodzisz normalnie na serwer ? Pobierz ten launcher i daj mu go z edytowanym plikiem serverimfo.py. Plik metin2_2010.exe odpala jako administrator. 15. Launcher mcncc V2 Wersja 2 - Jest dokładnie ten sam launcher tylko wersja druga. Jeżeli nie działa Ci pierwsza spróbuj poprzez tę. Koledze wysyłasz całą paczkę wraz z edytowanym plikiem serverip.cfg pod swoje i odpala on plik Surakopf.exe jako administrator. 16. Map_konverter_by_BlackYuko - Jest to program pozwalający na edytowanie i tworzenie plików mapy po stronie serwera. Ma też ciekawą funkcję kalkulatora, która pozwala na obliczenie wielkości mapy, minimapy itd. 17. Map konverter by terenzo - program ma podobne funkcje co do programu z punktu 16, ale jest w języku polskim wykonanym przez terenzo. 18. Map pointer - jest to program z przekroju lat 2010/2011, który pozwala na stawianie grupek mobów na mapie przez nas wczytanej. Wystarczy dodać wpis do group.txt + DORZUCIĆ WŁASNE MOB_PROTO.xml z ID mobków i ich nazwami jakie wypisaliśmy w group.txt. Nie działa na nowych strukturach mob_proto z 2014 roku. 19. Metin2Tools by terenzo - jest to program, który ułatwia nam prace nad serwerem. Łatwiej i szybciej możemy wygenerować hasło do konta w mysql, wygenerować sklepy, "pogramiać" krzaczki itd. 20. Portmap (najlepszy_portmap) - Jest to program, który umożliwia nam odblokowanie portów, dzięki czemu nasi znajomi/koledzy mogą zalogować się do gry. Ten portmap jest sprawdzony przeze mnie, innych znajomych i działa bez problemów. Niektóre portmapy są walnięte i nie działają jak trzeba i tworzą niepotrzebny problem. 21. Navicat for Mysql - Program ten pozwala nam na zarządzanie serwerem od strony mysql (bazy danych). Edytujemy tam m.in sklepy, dodajemy item/moby/npc od strony serwerowej itd. 22. DIF-PATCHER (program_do_diffów) - Program ten pozwala nam na wgranie plików o rozszerzeniu .dif do game/db/launchera. Ma opcje robienia backup'a difowowanego pliku i sprawdzania bajtów. 23. Generator "spolszczeń" - Jest to program umożliwiający nam generowanie pliku .exe (launchera) pod pliki 2008 i clienta 2008. Wystarczy podać IP serwera, wygenerować, odpalić i zacząć grać. 24. Program do zmiany crc by misekantos - program pozwalający zmienić nam sumę kontrolną crc, można znaleźć to pakując jakiś plik np. do winrara i otworzyć go, będzie napisane crc32. Tym programem, można również zobaczyć jakie crc ma dany plik. 25. Python Loader - W paczce znajduje się injector, który odpalamy jako administrator, wskazujemy lokalizacje pliku m2PythonLoader.dll, odpalamy np. launcher metin2 naszego serwera, w injectorze wpisujemy nazwe naszego procesu launchera np. metin2client.exe/bin i otwiera nam okienko, w którym możemy załadować plik pythona .py bez konieczności pakowania go w root/uiscript czy locale_xx 26. Map editor (rozstawianie obiektów w grze) - W paczce, znajduje się injector, .dll do uruchomienia aplikacji uruchamiającej pliki .py i plik map_editor.py. Robimy tak samo jak w punkcie 25 tylko w okienku lokalizujemy plik map_editor.py i klikamy ok, w grze powinno pojawić się okno z obiektami itd. 27. Serverinfo_generator - Program, który za nas napisze cały plik serverinfo.py, który znajduje się w root, plik ten łączy nas po IP do naszego serwera. W programie wystarczy podać IP serwera, port channeli i nazwę serwera, która ma widnieć przy channelach w grze. 28. Tools_by_jachu_pl - Program, który również nam ułatwia edytowanie serwera jak tools terenzo tylko tutaj posiada bardzo dużo diffów na różne game, od najstarszych do 34k, nie wiem czy są aktualizacje, możecie sprawdzic. Jest również chyba diff patcher w tym toolsie i kilka nowych funkcji, których nie ma u terenzo i odwrotnie. Można wręcz powiedzieć, że się dopełniają 29. Unpacker plików .addr - program, który rozpakowuje pliki .addr z folderu pack. Przykładowo Metin2PL korzysta aktualnie z pliku .addr, gdzie przytrzymuje tam nazwy serwerów, porty i IP i z tego korzysta. 30. Virtual Box - Pozwala na stworzenie virtualnego systemu na naszym komputerze, bez konieczności instalowania go na naszym dysku. Właśnie przez ten program wirtualizujemy freebsd i robimy na tym systemie serwery Metin2. 31. Winscp - Program, który umożliwia nam na wejście na twardy dysk przez FTP/SFTP systemu freebsd/VPS'a/Dedyka. Na dysku właśnie są wszystkie pliki serwerowe + baza danych mysql 32. FileZilla - Program z tymi samymi funkcjami co w punkcie 31. Można wybierać, różni się jedynie wygodą użytkowania. Ja osobiście polecam WinSCP. 33. Putty - Logujemy się przez protokół 22, SSH do wirtualnego systemy freebsd na VPS'ie lub dedyku. Sterujemy serwerem właśnie przez ten program. 34. Notepad ++ - Pozwala na bardzo wygodną pracę z plikami tekstowymi 35. Hamachi - Program ten przydziela nam nowe hamachi w jego środowisku. Dzięki niemu znajomi mogą połączyć się na serwer na Twoim komputerze bez różnicy czy masz wewnętrzne czy zewnętrzne IP. Wystarczy, że Ty utworzysz sieć, a znajomy się do niej połączy 36. Comodo EasyVPN - Program działa na takiej zasadzie jak Hamachi tylko, że w sieciach nie ma limitu na osoby i również nie ma kłopotu z odpaleniem jak u hamachi z problemem "Błąd silnika" . 37. Konverter item_proto - Program służy do konvertowania item_proto.xml do item_proto.sql. Nie działa na nowych strukturach item_proto z 2014 roku. 38. Equipment Viewer 2.0 - Program służy do podglądu ekwipunku gracza z poziomu GM, w zależności czy ma dostęp do bazy danych czy też nie. 39. Metin2 PL global client 2010 (Client 2010) - Podstawowy i najbardziej czysty (bez zbędnych patchów) client globala Metin2 PL z 2010 roku, jest on bardzo często poszukiwanym clientem dlatego daję go wam tutaj. Jest on trochę modyfikowany przez autora tematu.
  9. 10 points
    Download: [Hidden Content] Skan: [Hidden Content]== <3
  10. 9 points
    łapcie pliki NetMetin nic nie edytowałem tylko odpaliłem pograłem i to all z mojej zabawy z tymi plikami mapa tele jak sie nie myle Ważne przed odpaleniem serwera spakować baze i sf bo te w maszynce sa zjebane hasła i loginy macie w pliku txt w paczce są Gotowa maszynka na FreeBSD klient packer source klient + serwer packer musi się znajdować na pulpicie ps,jak rozpakowac root wiec w folderze packer_netmetin_testowy jest plik txt root tam macie takie coś Group PackList { Group [color=#ff3333]C:\Users\Sasori\Desktop\packer_netmetin_testowy[/color]\root { PathName "root/" } } to co jest na czerwono nalezy zmienić na własną lokalizacje czyli otwierasz foldr z packerem i kopiujesz tam własną ścieche z paska adresu przeciągasz plik root na MakePack i włala pakownie odbywa się przez plik packer przeciągając rozpakowany folder na packer wyskoczy podaj nazwe wpisujesz root i enter pliki [Hidden Content] packer ja by nie było [Hidden Content] przykładowy filmik z tych plików [Hidden Content] to ta wersja z 2015 r
  11. 8 points
    [align=left] PL Jeśli nie działa obrazek, zapraszam do Galerii z wszystkimi modelami Tutaj: [Hidden Content] [Hidden Content] PL Przy braku działającego linku do wstawki proszę pisać poniżej. ENG If the picture does not work, I invite you to the Gallery with all models Here: [Hidden Content] [Hidden Content] ENG If link not working, please write below. Galeria [hide] Name: jWoM maps by Shogun & KillMoves 2013 [Hidden Content] Name: 2x2 - sumpf_1 [Hidden Content] Name: 2x2 - Trade-Map by Matesh [Hidden Content] Name: 2x2 - Valle [Hidden Content] Name: 2x2 - valle BOOMpro [Hidden Content] Name: 2x2 - wüsten_map_by_SA_GAIN_by_cureya [Hidden Content] Name: 2x3 - Pelda_Roterwald3 [Hidden Content] Name: 3x2 - map_waterfall [Hidden Content] Brak Foto Name: 3x2 - green_forest - problem z minimapa [Hidden Content] Name: 3x2 - metin2_farmi [Hidden Content] Name: 3x3 - hightlevel_farm_map [Hidden Content] Name: 3x3 - IFMap2_By_Zochi [Hidden Content] Name: 3x3 - kanion [Hidden Content] Name: 3x3 - laselfow [Hidden Content] Name: 3x3 - m2_orc_dungeon [Hidden Content] Name: 3x3 - map_biolog [Hidden Content] Name: 3x3 - map_grotta [Hidden Content] Name: 3x3 - map_ice [Hidden Content] Name: 3x3 - mapa_eventowa - problem z minimapa [Hidden Content] Name: 3x3 - metin2_farmmap [Hidden Content] Name: 3x3 - metin2_map_asterix [Hidden Content] Name: 3x3 - metin2_map_desert_land - brak minimapy [Hidden Content] Name: 3x3 - metin2_map_deserti [Hidden Content] Name: 3x3 - metin2_map_inviern [Hidden Content] Name: 3x3 - metin2_map_multi_pp [Hidden Content] Name: 3x3 - metin2_map_n_flame_dungeon_01 [Hidden Content] Name: 3x3 - metin2_map_spiderdungeon_03 [Hidden Content] Name: 3x3 - metin2_map_x [Hidden Content] Name: 3x3 - metin2_naga_map [Hidden Content] Name: 3x3 - mistyczne [Hidden Content] Name: 3x3 - tandoria_map_t1 [Hidden Content] Name: 3x6 - metin2_map_orclabyrinth [Hidden Content] Name: 4x3 - asura2_forrest_map [Hidden Content] Name: 4x3 - metin2_duester_map [Hidden Content] Name: 4x3 - metin2_map_n_snow_dungeon_01 [Hidden Content] Name: 4x4 - lothira2_map_magicforrest [Hidden Content] Name: 4x4 - map_jungle [Hidden Content] Name: 4x4 - map_jungle_waste [Hidden Content] Name: 4x4 - metin2_ath_level2 [Hidden Content] Name: 4x4 - metin2_elitepvpers [Hidden Content] Name: 4x4 - metin2_map_b5 [Hidden Content] Name: 4x4 - metin2_map_beach [Hidden Content] Name: 4x4 - metin2_map_dungeo [Hidden Content] Name: 4x4 - metin2_map_island [Hidden Content] Brak Foto Name: 4x4 - metin2_map_endless - brak minimapy [Hidden Content] Name: 4x4 - metin2_map_nvalley [Hidden Content] Name: 4x4 - metin2_map_spiderdungeon_02 [Hidden Content] Name: 4x4 - metin2_map_treen [Hidden Content] Name: 4x4 - motis [Hidden Content] Name: 4x4 - old_desert_map [Hidden Content] Name: 4x4 - spider_dungeon [Hidden Content] Name: 4x4 - santhia_fly_dungeon [Hidden Content] Name: 4x4 - zaginiony [Hidden Content] Name: 4x5 - KhafKefFullPack [Hidden Content] Name: 4x5 - metin2_black_world1 [Hidden Content] Name: 4x5 - metin2_ymir_map [Hidden Content] Name: 4x5 - tandoria_map_a1 [Hidden Content] Name: 5x4 - square_dalhaide [Hidden Content] Name: 5x5 - metin2_map_naga1 [Hidden Content] Name: 5x5 - metin2_map_test3 [Hidden Content] Name: 6x5 - 00luke [Hidden Content] Name: 6x6 - locutos_map_farm [Hidden Content] Name: 6x6 - map_weihnachts [Hidden Content] Name: 6x6 - metin2_m2m_map [Hidden Content] Name: 6x6 - metin2_map_m [Hidden Content] Name: 6x6 - n2_map_kuklopsz [Hidden Content] Name: 7x7 - metin2_map_devilscatacomb [Hidden Content] Name: 8x8 - join_mpc [Hidden Content] Name: 8x8 - metin2_map_azrael [Hidden Content] Name: 8x8 - vatahar - brak mini mapy [Hidden Content] Name: 10x5 - map_empire [Hidden Content] Name: 12x12 - metin2_map_srodziemie [Hidden Content] Name: 16x16 - luscha_map_4_world [Hidden Content] Name: 27x27 - mt2_openworld [Hidden Content] Name: z5maps - Luscha (2x2, 2x2, 3x3, 4x4, 4x4) [Hidden Content] Brak Foto Name: Bramy Piekieł [Hidden Content] Brak Foto Name: Z-Run [Hidden Content] Brak Foto Name: z3maps - bossrun(1x1), cassino(2x2), oaza(1x1 [Hidden Content] Brak Foto Name: z5maps - Lochy(2x2, 4x4, 6x6, 6x6, 6x6) [Hidden Content] Name: 1x1 - 1vs1 [Hidden Content] Name: 1x1 - 31_exported [Hidden Content] Name: 1x1 - AchiHardyx3 [Hidden Content] Name: 1x1 - chill_map [Hidden Content] Name: 1x1 - dk_map_crevice [Hidden Content] Name: 1x1 - Mappa_special [Hidden Content] Name: 1x1 - Meine_Map_Feuer [Hidden Content] Name: 1x1 - metin2_epvp1_map [Hidden Content] Name: 1x1 - metin2_farmmap [Hidden Content] Name: 1x1 - metin2_first_map [Hidden Content] Name: 1x1 - metin2_flamen_map [Hidden Content] Name: 1x1 - metin2_map_apocalypso [Hidden Content] Name: 1x1 - metin2_map_dedalo [Hidden Content] Name: 1x1 - metin2_map_fen [Hidden Content] Name: 1x1 - metin2_map_fishing_a [Hidden Content] Name: 1x1 - metin2_map_fishing_b [Hidden Content] Name: 1x1 - metin2_map_fishing_c [Hidden Content] Name: 1x1 - metin2_map_fishing_shellder [Hidden Content] Name: 1x1 - metin2_map_handel [Hidden Content] Name: 1x1 - metin2_map_pvp [Hidden Content] Name: 1x1 - metin2_map_shot [Hidden Content] Name: 1x1 - metin2_map_smalldesert [Hidden Content] Name: 1x1 - metin2_map_testosteron [Hidden Content] Name: 1x1 - metin2_shivax_map [Hidden Content] Name: 1x1 - metin2_smalldung [Hidden Content] Name: 1x1 - metin2_you_map [Hidden Content] Name: 1x1 - oxmap [Hidden Content] Name: 1x1 - pvp_map [Hidden Content] Name: 1x1 - run_map_by_sa_gain_by_cureya [Hidden Content] Name: 1x1 - VectorsLonca [Hidden Content] Name: 1x1 - VectorsLonca2 [Hidden Content] Name: 2x1 - Dungeon_rajd [Hidden Content] Name: 2x1 - metin2mapicerun - brak minimapy [Hidden Content] Name: temple_run [Hidden Content] Name: 2x2 - ahon_map_colosseum [Hidden Content] Name: 2x2 - arenapvp_exported [Hidden Content] Name: 2x2 - bellator2_keyto_farmmap [Hidden Content] Name: 2x2 - dolina_spokoju [Hidden Content] Name: 2x2 - e1_exported [Hidden Content] Name: 2x2 - Gipfel_der_orks [Hidden Content] Name: 2x2 - gracjanp_map_battlearena [Hidden Content] Brak Foto Name: 2x2 - epvp_map - brak minimapy [Hidden Content] Name: 2x2 - haszki_01 - brak minimapy [Hidden Content] Name: 2x2 - IFMap_By_Zochi [Hidden Content] Name: 2x2 - kjuba_1 [Hidden Content] Name: 2x2 - Kleine Inseln.Mt2 [Hidden Content] Name: 2x2 - LavoPiatti [Hidden Content] Name: 2x2 - m2u_map [Hidden Content] Name: 2x2 - map_by_slaya [Hidden Content] Name: 2x2 - map_dark [Hidden Content] Name: 2x2 - map_by_zodi [Hidden Content] Name: 2x2 - map_epvp2 [Hidden Content] Name: 2x2 - map_garden [Hidden Content] Name: 2x2 - mapa_spustoszenia [Hidden Content] Name: 2x2 - metin2_at_farmmap [Hidden Content] Name: 2x2 - metin2_beach_map [Hidden Content] Name: 2x2 - metin2_farm_grube [Hidden Content] Name: 2x2 - metin2_foryou_map [Hidden Content] Name: 2x2 - metin2_handelsmapCS [Hidden Content] Name: 2x2 - metin2_map_a4 [Hidden Content] Name: 2x2 - metin2_map_brach [Hidden Content] Name: 2x2 - metin2_map_e1 [Hidden Content] Name: 2x2 - metin2_map_empirewar02 [Hidden Content] Name: 2x2 - metin2_map_empirewar03 [Hidden Content] Name: 2x2 - metin2_map_fen3 [Hidden Content] Name: 2x2 - metin2_map_gemi [Hidden Content] Name: 2x2 - metin2_map_handel [Hidden Content] Name: 2x2 - metin2_map_lorenzo [Hidden Content] Name: 2x2 - metin2_map_new [Hidden Content] Name: 2x2 - metin2_map_newtreen [Hidden Content] Name: 2x2 - Metin2_map_ode [Hidden Content] Name: 2x2 - metin2_map_schwarz [Hidden Content] Name: 2x2 - metin2_map_slubna [Hidden Content] Name: 2x2 - metin2_map_tnk [Hidden Content] Name: 2x2 - metin2_map_zuo [Hidden Content] Name: 2x2 - metin2_maplordpoccix [Hidden Content] Name: 2x2 - metin2_tut_map [Hidden Content] Name: 2x2 - Przyladek - brak minimapy [Hidden Content] Name: New City [Hidden Content] [/hide] [/align] [hide] [/hide]
  12. 8 points
    Przedstawię Wam w jaki sposób poprawić wyświetlanie przedmiotów w oknie quest'owym funkcją say_item, itd. Otwieramy plik questlib.lua, który znajdziemy tam gdzie mamy quest'y na serwerze. A następnie edytujemy całą poniższą funkcję: function say_item(name, vnum, desc) {...} end Na następującą: function say_item(name, vnum, desc) say("[INSERT_IMAGE image_type;item|idx;"..vnum.."|title;"..name.."|desc;"..desc.."|index;".. 0 .."|total;".. 1 .."]") end No i na koniec wystarczy zresetować serwer.
  13. 8 points
    Paczka (v0.1): [align=left] [Hidden Content] [/align] Znane błędy: Aktualnie Brak Aktualizacje: Pierwsze Wydanie - v0.1
  14. 6 points
    char_battle.cpp int iAlignIndex; if (GetRealAlignment() >= 10000000) iAlignIndex = 0; else if (GetRealAlignment() >= 8000000) iAlignIndex = 1; else if (GetRealAlignment() >= 7000000) iAlignIndex = 2; else if (GetRealAlignment() >= 6000000) iAlignIndex = 3; else if (GetRealAlignment() >= 5000000) iAlignIndex = 4; else if (GetRealAlignment() >= 4000000) iAlignIndex = 5; else if (GetRealAlignment() >= 3000000) iAlignIndex = 6; else if (GetRealAlignment() >= 2000000) iAlignIndex = 7; else if (GetRealAlignment() >= 1000000) iAlignIndex = 8; else if (GetRealAlignment() >= 0) iAlignIndex = 9; else if (GetRealAlignment() > -40000) iAlignIndex = 10; else if (GetRealAlignment() > -80000) iAlignIndex = 11; else if (GetRealAlignment() > -120000) iAlignIndex = 12; else iAlignIndex = 13; InstanceBase.h TITLE_NUM = 14, TITLE_NONE = 9, InstanceBase.cpp UINT CInstanceBase::GetAlignmentGrade() { if (m_sAlignment >= 1000000) return 0; else if (m_sAlignment >= 800000) return 1; else if (m_sAlignment >= 700000) return 2; else if (m_sAlignment >= 600000) return 3; else if (m_sAlignment >= 500000) return 4; else if (m_sAlignment >= 400000) return 5; else if (m_sAlignment >= 300000) return 6; else if (m_sAlignment >= 200000) return 7; else if (m_sAlignment >= 100000) return 8; else if (m_sAlignment >= 0) return 9; else if (m_sAlignment > -4000) return 10; else if (m_sAlignment > -8000) return 11; else if (m_sAlignment > -12000) return 12; return 13; } int CInstanceBase::GetAlignmentType() { switch (GetAlignmentGrade()) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: { return ALIGNMENT_TYPE_WHITE; break; } case 10: case 11: case 12: case 13: { return ALIGNMENT_TYPE_DARK; break; } } return ALIGNMENT_TYPE_NORMAL; } introLoading.py TITLE_COLOR_DICT = ( colorInfo.TITLE_RGB_GOOD_9, colorInfo.TITLE_RGB_GOOD_8, colorInfo.TITLE_RGB_GOOD_7, colorInfo.TITLE_RGB_GOOD_6, colorInfo.TITLE_RGB_GOOD_5, colorInfo.TITLE_RGB_GOOD_4, colorInfo.TITLE_RGB_GOOD_3, colorInfo.TITLE_RGB_GOOD_2, colorInfo.TITLE_RGB_GOOD_1, colorInfo.TITLE_RGB_NORMAL, colorInfo.TITLE_RGB_EVIL_1, colorInfo.TITLE_RGB_EVIL_2, colorInfo.TITLE_RGB_EVIL_3, colorInfo.TITLE_RGB_EVIL_4, ) localeInfo.py def GetAlignmentTitleName(alignment): if alignment >= 1000000: return TITLE_NAME_LIST[0] elif alignment >= 800000: return TITLE_NAME_LIST[1] elif alignment >= 700000: return TITLE_NAME_LIST[2] elif alignment >= 600000: return TITLE_NAME_LIST[3] elif alignment >= 500000: return TITLE_NAME_LIST[4] elif alignment >= 400000: return TITLE_NAME_LIST[5] elif alignment >= 300000: return TITLE_NAME_LIST[6] elif alignment >= 200000: return TITLE_NAME_LIST[7] elif alignment >= 100000: return TITLE_NAME_LIST[8] elif alignment >= 0: return TITLE_NAME_LIST[9] elif alignment > -4000: return TITLE_NAME_LIST[10] elif alignment > -8000: return TITLE_NAME_LIST[11] elif alignment > -12000: return TITLE_NAME_LIST[12] return TITLE_NAME_LIST[10] TITLE_NAME_LIST = ( PVP_LEVEL0, PVP_LEVEL1, PVP_LEVEL2, PVP_LEVEL3, PVP_LEVEL4, PVP_LEVEL5, PVP_LEVEL6, PVP_LEVEL7, PVP_LEVEL8, PVP_LEVEL9, PVP_LEVEL10, PVP_LEVEL11, PVP_LEVEL12, PVP_LEVEL13, ) no i locale_game.txt
  15. 5 points
    Robiłem jakiś czas temu poradnik pewnej osobie, ale finalnie go nie chciała to daje to tutaj Z resztą każdy kto potrafi klikać literki i cyferki na klawiaturze mógłby sobie to sam zrobić, ale wiadomo jak jest. I prosiłbym nie kopiować tego na inne forum, a jak już to robicie to dajcie chociaż bezpośredni link do tego tematu, lub zostawcie mój nick, dzięki. [Hidden Content] [Hidden Content] Jest to plik .cpp więc skan raczej zbędny Jeżeli jakieś pytania, problemy z dodaniem - piszcie w komentarzach, mogłem coś przeoczyć.
  16. 4 points
    Witam Pokaże wam jak naprawić błąd, który powoduje, że czasem nasza postać pozostaje niewidzialna dla innych graczy przez dłuższy okres czasu. Błąd ten najczęściej występuje zaraz po przeteleportowaniu, gdy zaczniemy atakować, nim nasza postać stanie się widoczna. 01: Otwieramy "char_affect.cpp" (source game Srcs/Server/game/src). Szukamy tego: if (AFFECT_REVIVE_INVISIBLE != pkAff->dwType) { ComputePoints(); } I zmieniamy na to: if (AFFECT_REVIVE_INVISIBLE != pkAff->dwType) ComputePoints(); else UpdatePacket(); Gotowe! Pozdrawiam * To tylko przedsmak tego co dla Was przygotowałem proszę daj + by zmotywować mnie do dalszego działania.
  17. 4 points
    Wejdź w input_main.cpp Znajdź: if (CHAT_TYPE_SHOUT == pinfo->type) { LogManager::instance().ShoutLog(g_bChannel, ch->GetEmpire(), chatbuf); } Dodaj pod: #ifdef BLOCK_CHAT_OX if (ch->GetGMLevel() == GM_PLAYER) { if((ch->GetMapIndex() == 113) && (pinfo->type == CHAT_TYPE_TALKING)) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("BLOCK_CHAT_OX")); return iExtraLen; } } #endif common/service.h Dodaj: #define BLOCK_CHAT_OX
  18. 4 points
    hejka myślę że przyda się i odświeży trochę dt w lepszy klimat, jako że id metinów pod dt jest inne niż na zwykłych mapach można swobodnie bez wahania sobie taki metin podmienić w dt, a dla bardziej chcących mogą sobie po edytować teksture, i pozostałe metiny Śmierci, Upadku itd pokolorować ;d. id metina które są od dt znajdziecie standardowo w swoim quescie, folder wystarczy wrzucić do ymir work > npc i wiadomo zmienić w rootach npc_list.txt [Hidden Content] [Hidden Content]
  19. 4 points
    Bonusy w tych petach normalnie działają tylko na dungeonach. Przedstawię wam jak zrobić, aby nasze pety działały wszędzie. Wchodzimy do PetSystem.cpp, a następnie komentujemy ten fragment: if (34004 == m_dwVnum || 34009 == m_dwVnum) { if (NULL == m_pkOwner->GetDungeon()) { return; } } Gotowe. (Tak ogólnie, to nie znalazłem takiego TUT'a ani na mpc, ani na innych forach, ale pewnie gdzieś jest :v) PS: Jeśli ktoś sobie zmienił ID mob'ów jakimi są właśnie te pety, będą mu one działać wszędzie, bo funkcja działa tylko, jeśli ID mob'a jest takie: 34004 lub 34009.
  20. 4 points
  21. 4 points
    Dl w załączniku Weapons set 53.rar
  22. 4 points
    Cześć. Zapisuje na tym forum, fxa na najnowszy exploit, który polega na wywalaniu logowania. Autorem jest Sherer ( aby nie było, że coś tam, coś tam.) Hello, Didn't know whether to place this subject either here or on guides but since I'm gonna not only share the mitigation but also express my conclusion about this issue and further after-effects. Only part of codes are attached below. For methods definitions + headers jump here: [Hidden Content] 1. Vulnerability overview. Any kind of tcp application is required to have a server (anda client). Once a server is launched it's binded to appropriate socket and set on listening for further connections (in a cutoff, navigate here for more precise info) On the other side client is the one which is suppose to connect to server. It does it by connecting to server's socket and start to process a handshake. This is how it works in a big shortcut - or I should rather say, it does work if we deal with normal peer. In case of more-like modern apps the traffic is held by efficient algorithms that can carry even heavy traffic or eventual feeble attack. But since Metin2's core is not a state-of-art app and simply runs on old C style code (libthecore) without a real concurrency support that might dive us into some tricky issues. So let's imagine what happens if someone tries to pull off an attack and flood the server with enormous amount of packets. Since each of connection needs to be validated first, it goes through the handshake. Server catches it through the fdwatch function (jump to io_loop, main.cpp), then if no desc is presented moves it to AcceptDesc where the connection is validated. It is usually allowed unless the peer's ip is not in a banlist. Then desc is created and connection is saved for further handshake response. Sounds reasonable, right? Now imagine when thousands connection are accepted, validated, and expected to send handshake response. Does it still sound so optimistic? Additionally, when a desc is created it does allocated buffer for I/O traffic. Each connection. Each time. Each desc. Now do the math and try to conceive how much of memory is simply wasted. So that's the point we've been heading. That's our vulnerability. And btw, if so many agents are in the queue, do you think anybody will be able to connect your server? 2. Four major problems. Let's start from handshake itself. Imagine that someone approaches you and gives you his hand to shake it. And than second. And then third. Doesn't make sense, does it? Same applies to handshake process. Simply, only one handshake shall be ongoing for the host unless it completes it. So, let's jump to AcceptDesc in desc_manager.cpp and add this little code above: newd = M2_NEW DESC; // Let's check if a handshake from this host is already ongoing if (GetHostHandshake(peer)) { sys_log(0, "Handshake from %s is not permitted!", host); socket_close(desc); return NULL; } So let's consider this as solved for now. Then the second issue. Let's imagine yet another event. Someone shakes your hand but this time completes the handshake. But he does it again. And again. And again. Sounds exhausting? Let's add this 2 conditions below our recent code from above: static const int HOST_CONNECTION_LIMIT = 3; // In case if host completed handshake process let's check if it doesn't reach the limit if (GetHostConnectionCount(peer) >= HOST_CONNECTION_LIMIT) { sys_log(0, "Host %s connection limit has been reached!", host); socket_close(desc); return NULL; } // And block intrusive connections as well if (IsIntrusiveConnection(host)) { sys_log(0, "Host %s is intrusive!", host); socket_close(desc); return NULL; } First if checks if host doesn't reach the handshake limit and if it does - the host is dropped. Second if seeks for intrusive peers. That simply means if one tries to connect again, and again, and again in defined time lapse it probably turns out to be an attacking IP. Let's jump for a moment to desc.cpp, Initialize and add this variable initialization there: tt_creation_time = get_global_time(); Yet another problem solved. Still tho, all this code is considered to work more for authentication than for game's core. Why is so? Imagine a person how is not suppose to have any attention at all - a movie star for example. Usually when one walks on red carpet there are bunch of body guards sealing him/her out from the crowd around. Same should happen to game cores because why one would try to perform a handshake with game if hadn't even logged in? So that's we are going to do, simply whitelist players who were succeeded to perform through the login process and obtained login key. Firstly let's jump back to the desc_manager.cpp and add this little code above our previous alterations: // If it's not an auth server - check for validation first if (!g_bAuthServer) { if (!IsOnHandshakeWhitelist(peer)) { // sys_log(0, "Host %s has not validated through login!", host); socket_close(desc); return NULL; } } Now open input_db.cpp, move to AuthLogin function and add at the end: // Validating handshake TPacketGGHandshakeValidate pack; pack.header = HEADER_GG_HANDSHAKE_VALIDATION; strlcpy(pack.sUserIP, d->GetHostName(), sizeof(pack.sUserIP)); P2P_MANAGER::instance().Send(&pack, sizeof(pack)); And so on repeat it for AuthLoginOpenID if you use it. Now let's jump to input_p2p.cpp, move to Analyze function and after the initial syslog: // Auth server is not allowed for p2p if (g_bAuthServer) { // Clearing buffers for dynamic packets switch (bHeader) { case HEADER_GG_RELAY: { TPacketGGRelay * p = (TPacketGGRelay *) c_pData; if (m_iBufferLeft < sizeof(TPacketGGRelay) + p->lSize) iExtraLen = -1; else iExtraLen = p->lSize; } break; case HEADER_GG_NOTICE: { TPacketGGNotice * p = (TPacketGGNotice *) c_pData; if (m_iBufferLeft < sizeof(TPacketGGNotice) + p->lSize) iExtraLen = -1; else iExtraLen = p->lSize; } break; case HEADER_GG_GUILD: { iExtraLen = m_iBufferLeft - sizeof(TPacketGGGuild); } break; case HEADER_GG_MONARCH_NOTICE: { TPacketGGMonarchNotice * p = (TPacketGGMonarchNotice *) c_pData; if (m_iBufferLeft < p->lSize + sizeof(TPacketGGMonarchNotice)) iExtraLen = -1; else iExtraLen = p->lSize; } break; } return iExtraLen; } Since some of the packets might be dynamic, we need to ensure that data they hold is cleared properly. If you have more dynamic packets binded - add them as above. Move to db.cpp, find function SendLoginPing and replace with following: void DBManager::SendLoginPing(const char * c_pszLogin) { /* TPacketGGLoginPing ptog; ptog.bHeader = HEADER_GG_LOGIN_PING; strlcpy(ptog.szLogin, c_pszLogin, sizeof(ptog.szLogin)); if (!g_pkAuthMasterDesc) // If I am master, broadcast to others { P2P_MANAGER::instance().Send(&ptog, sizeof(TPacketGGLoginPing)); } else // If I am slave send login ping to master { g_pkAuthMasterDesc->Packet(&ptog, sizeof(TPacketGGLoginPing)); } */ } Avoiding clearing billing like that (wtf is that btw, shouldn't be executed at all). Now move to packet_info.cpp and add this code in constructor: Set(HEADER_GG_HANDSHAKE_VALIDATION, sizeof(TPacketGGHandshakeValidate), "HandShakeValidation", false); Finally jump to ClientManager.cpp in DB. Find function QUERY_SETUP and if condition with bAuthServer and add there following code: peer->SetChannel(1); Sine P2P communication is allowed only for peers possessing any channel number greater than zero, we set it. Usually this practice should be forbidden but since we restrain the traffic for auth server (with code above) it should be safe. Beware that this might cause first login failed because of packet propagation that can reach the cores after player connects. Voilà, were mostly done with coding! Last but no least, we need to take a brief introduction into kqueue and tedious tour between sockets and kernel vars. Starting with kqueue. I would try to explain this but you better jump to this link. Freebsd documentation always appreciated. Since Metin2 implementation of kqueue wrapper has its size limit you may try to increase it a bit and seek for a feedback. If'd like to do so jump to main.cpp, start function and edit this variable: main_fdw = fdwatch_new(VALUE); Yet keep in mind! Do not try to over-optimize it! Try to experiment, put the different values. If you somehow screw it up it might drag you into the checkpoint issues and eventually crash the whole app. So now a few words about sockets and how the listening process works. When each connection aiming to appropriate port is detected it is dropped into the queue where it's waiting for application to pick it up. So simply we can consider this as a waiting queue like in a grocery store. The point is that this queue has it's limit and once the limit is reached, any new connection is declined at sight. The listening limit for Metin2 core is wrapped into variable called SOMAXCONN. If you dive into C socket documentation you can find something like this: /* *Maximum queue length specifiable by listen /* #define SOMAXCONN 10 As for me it was 128. Since it's a define the value is simply embedded into the app and you cannot manipulate it once a binary is built. So let's change it to let more connection be scheduled. You may ask, why? If player tries to log in it does connect the channel port. If the channel is unavailable you see fadeout and connection is terminated. It happens because there is no place in the queue thus connection is scheduled at all. But be careful! Do not set this value into some high-peak numbers! Be aware that our io_loop function need to iterate through these all events and manage to handle this during the heartbeat session. If you try to over optimize this value you can end up causing lags on the server, internal packets delays and more. In case you'd ask me, value around 1024 is acceptable but still it's better if you take some lecture and experiment a bit. And one more thing, don't forget to set this kernel option on the machine where your server runs: sysctl kern.ipc.soacceptqueue=1024 sysctl kern.ipc.somaxconn=1024 So we are done! Don't forget to add the code from my github repo! Epilogue Metin2's quite an old app and we should not forget about that. The netcode is old, rubbish and cumbersome thus this issue might be only one of many we haven't found just yet. Keep in mind tho that even that mitigation won't protect your server. Actually I doubt that even rewriting the code into more modern shape would do that if you don't get yourselves a good protection. Protection, filters, external firewalls are actually the key especially now when stressers and all this stuff are back and harmful again. Hope that this little thread will help you in your future development. Extra I manage to write a little collector for getting rid of handshakes that never completed this process (outdated). If you'd like to switch it on jump to desc_manager.cpp constructor and add there: CEventFunctionHandler::instance().AddEvent([this](SArgumentSupportImpl *) { desc_manager_garbage_collector_info* info = AllocEventInfo<desc_manager_garbage_collector_info>(); m_pkDescManagerGarbageCollector = event_create(desc_manager_garbage_collector_event, info, PASSES_PER_SEC(1)); }, "DESC_MANAGER_COLLECTOR", 1);
  23. 4 points
    [video=youtube] Paczka (v0.1): [align=left] [Hidden Content] [/align] Znane błędy: Aktualnie brak Aktualizacje: Pierwsze Wydanie - v0.1
  24. 4 points
    01: Otwieramy char.h (source game /usr/src/mainline_released/mainline_sg/Srcs/Server/game/src) i szukamy tego: bool IsImmune(DWORD dwImmuneFlag); zmieniamy na to: bool IsImmune(DWORD dwImmuneFlag); void UpdateImmuneFlags(); 02: Otwieramy char_resist.cpp (source game /usr/src/mainline_released/mainline_sg/Srcs/Server/game/src) i szukamy tego: #include "locale_service.h" I zmieniamy na to: #include "locale_service.h" #include "item.h" Szukamy tego: bool CHARACTER::IsImmune(DWORD dwImmuneFlag) { if (IS_SET(m_pointsInstant.dwImmuneFlag, dwImmuneFlag)) I zmieniamy na to: void CHARACTER::UpdateImmuneFlags() { m_pointsInstant.dwImmuneFlag = 0; for (int i = 0; i < WEAR_MAX_NUM; i++) { if(GetWear(i)) { for (int i2 = 0; i2 < ITEM_APPLY_MAX_NUM; ++i2) { if (GetWear(i)->GetProto()->aApplies[i2].bType == APPLY_NONE) continue; else if(GetWear(i)->GetProto()->aApplies[i2].bType == APPLY_IMMUNE_STUN) SET_BIT(m_pointsInstant.dwImmuneFlag, IMMUNE_STUN); else if(GetWear(i)->GetProto()->aApplies[i2].bType == APPLY_IMMUNE_SLOW) SET_BIT(m_pointsInstant.dwImmuneFlag, IMMUNE_SLOW); else if(GetWear(i)->GetProto()->aApplies[i2].bType == APPLY_IMMUNE_FALL) SET_BIT(m_pointsInstant.dwImmuneFlag, IMMUNE_FALL); } for (int i3 = 0; i3 < ITEM_ATTRIBUTE_MAX_NUM; ++i3) { if (GetWear(i)->GetAttributeType(i3)) { const TPlayerItemAttribute& ia = GetWear(i)->GetAttribute(i3); if(ia.bType == APPLY_IMMUNE_STUN) SET_BIT(m_pointsInstant.dwImmuneFlag, IMMUNE_STUN); else if(ia.bType == APPLY_IMMUNE_SLOW) SET_BIT(m_pointsInstant.dwImmuneFlag, IMMUNE_SLOW); else if(ia.bType == APPLY_IMMUNE_FALL) SET_BIT(m_pointsInstant.dwImmuneFlag, IMMUNE_FALL); } } } } } bool CHARACTER::IsImmune(DWORD dwImmuneFlag) { if (!IS_SET(m_pointsInstant.dwImmuneFlag, dwImmuneFlag)) UpdateImmuneFlags(); if (IS_SET(m_pointsInstant.dwImmuneFlag, dwImmuneFlag)) W pliku char_resist.cpp możemy zmienić szansę na omdlenie przykładowo z 90% na 100%. int immune_pct = 90;
  25. 4 points
    W sumie to nie nowość no ale co tam :X Jednak nie polecam podmieniać całego pliku a dodać sam kod bo w przypadku mniej umiejętnych osób może to spowodować lawinę pytań typu "a dlaczego mi nie działa..?". Nie wiem jak autor to zrobił ale ja proponuję tak (pozwolę sobie wtrącić swoje 3gr.): 1.Szukamy: def __DragonSoulInfoString (self, dwVnum): 2. Nad nim powinno być: self.ShowToolTip() 3. Zmieniamy na: [TAB][TAB]self.ShowItemID(itemVnum) [TAB][TAB]self.ShowToolTip() 4. Next nad: def __DragonSoulInfoString (self, dwVnum): 5. Dodajemy: [TAB]def ShowItemID(self, itemVnum): [TAB][TAB]if str(player.GetName())[0] == "[": [TAB][TAB][TAB]self.AppendTextLine("("+str(itemVnum)+")", 0xffff6633) 6.Pakujemy rooty BONUS 7. Jak ktoś chce zmienić kolor to np. [Hidden Content] Wybieramy taki o: #ff8e4f i znak # zmieniamy na 0xff i podmieniamy w funkcji.
  26. 4 points
    Wystarczy żebyś dodał jeszcze raz poradnik ze zmianą czytania bazy + poprawkę którą dopisałem tutaj na forum Ok, dzięki za pomoc PS: Gdyby ktoś miał podobny problem, wykonuje czynności z tego poradnika: [Hidden Content] (nawet jeśli już kiedyś go przerabiał). Temat zawiera aktualizacje, której brakuje w wideo poradniku.
  27. 3 points
    gaya system.rar SCAN
  28. 3 points
    Paczka (v0.2): [Hidden Content] Znane błędy: Aktualnie brak Aktualizacje: Pierwsze Wydanie - v0.1 Przebudowanie Całej Paczki & Poprawa Błędów - v0.2
  29. 3 points
    Pliki serwerowe przetestowane przezemnie i/lub popularne: 1. SF + Source + Client + Tools MartySama(Co tu dużo mówić najpopularniejsze i najlepsze czyste source aktualnie) 1.1 Pliki serwerowe by Terenzo (Dobra podstawka pod source, ale pliki same w sobie troche się zestarzały) 2. Pliki serwerowe by Derin V2 (Taki troche ucięty Terenzo, ale stabilne) 3. Najlepsza wersja plików by Rykox v2 (Fajna maszynka do kompilacji source + całkiem niezły 4fun) 4. Pliki serwerowe XenoX (Fajne pliczki, ale dużo do poprawy jest) 5. Pliki serwerowe Cortium (Bardzo dobre pliki wiele serwerów na tym stało) 6. Pliki serwerowe by shittest(Perełka wśród plików najbardziej stabilne i najbardziej czyste. Raczej dla ludzi którzy chcą od 0 wszystko zrobić) 7. Pliki serwerowe Netmetin (Bez znajomosci serwerów metin2, source i programowania lepiej nie podchodzić nawet z kijem, ale jak się umie to nawet spoko podstawka) 8. Pliki serwerowe Lastivia S2(Fajne pliczki do pracy, w miare spoko rzeczy posiadają. Chyba na tym lanerisy stały) Download: [Hidden Content] Skan: [Hidden Content] Client: [Hidden Content] 9. Pliki serwerowe Aline2 (Co tu duzo mówić, pliki są okej, wiele osób ich używało) 10. Pliki serwerowe by taki_niesmialy (Jedne z pierwszych sf i stabilnych easy/4fun) 11. Pliki serwerowe Terios(Mnóstwo serwerów na tym zaczęło powstawać odkąd zaczęły latać na necie) 12. Pliki serwerowe Kamelis (Nie wiedziałem gdzie wstawić, ale wydaje mi się, że kilka serwerów tego używało) 13. Pliki serwerowe Glador s1 i s2(Wiadomo było na tym sporo reworków, pewnie cos do poprawy jest) 14. Pliki serwerowe Derin v1 (Kiedyś miałem na tym hamachi, sporo do poprawy) 15. Pliki serwerowe CarolineMT2(Fajna podstawka pod harda, kiedyś baza wielu serwerów) Pliki nie przetestowane przezemnie i/lub nie zbyt popularne, ale to nie znaczy, że są złe: 1. Pliki serwerowe Azuris 2. Pliki serwerowe Rubinum 3. Pliki serwerowe Terabithia: 4. Pliki serwerowe Arianea: 5. Paczka z plikami 6. Pliki serwerowe Karies 7. Pliki serwerowe Arias 8. Pliki serwerowe Nexoria 9. Pliki serwerowe Alteria 10. Pliki serwerowe Avalter 11. Pliki serwerowe Predoria 12. Pliki serwerowe Meios 13. Pliki serwerowe Vertia 14. Pliki serwerowe Altros 15. Pliki serwerowe Edenium 16. Pliki serwerowe Ethandia 17. Pliki serwerowe Helium 18. Pliki serwerowe Nexoris 19. Pliki serwerowe Quaord 20. Pliki serwerowe WoM2 21. Pliki serwerowe Ascarial 22. Pliki serwerowe DiamondMT2 Temat będę się starać aktualizować i uzupełniać.
  30. 3 points
    Jako, że pewna osoba prosiła o ten system, to macie i Wy costume weapon stattrack.rar skan (edit. fix)
  31. 3 points
    Dziś na pewnym forum natknąłem się na dość ciekawe urozmaicenie. Kolor Yang w EQ zmienia się, w zależności ile Yang posiadamy. [Hidden Content]] Wchodzimy do: root/uiinventory.py Szukamy: def RefreshStatus(self): money = player.GetElk() self.wndMoney.SetText(localeInfo.NumberToMoneyString(money)) Całą funkcję zamieniamy na: def RefreshStatus(self): money = player.GetElk() if money <= 100000000: self.wndMoney.SetFontColor(1.0, 0.2, 0.2) elif money >= 100000001 and money <= 1000000000: self.wndMoney.SetFontColor(1.0, 0.6, 0.2) elif money >= 1000000001 and money <= 1500000000: self.wndMoney.SetFontColor(1.0, 1.0, 0.2) elif money >= 1500000001: self.wndMoney.SetFontColor(0.6, 1.0, 0.2) self.wndMoney.SetText(localeInfo.NumberToMoneyString(money))
  32. 3 points
    Zalegają tylko na mega także zapraszam , skanów nie mam ponieważ nie mam ich na pc , jakby ktoś pobrał jakieś proszę o skan , są na pewno czyste Lista SF : Download :
  33. 3 points
    [video=youtube] * Żeby nie było niedomówień, ze sklepami offline raczej współpracować ten dodatek nie będzie, więc jak się na C++ nie znacie to nie dodawajcie. [align=left] [Hidden Content] [/align]
  34. 3 points
    [video=youtube] Paczka (v0.1): [align=left] [Hidden Content] [/align] Znane błędy: Aktualnie brak Aktualizacje: Pierwsze Wydanie - v0.1
  35. 2 points
    Usunięcie sklepu z przedmiotami po kliknięciu w obracającą się monetę. W pliku uitaskbar.py Szukaj klasy: class TaskBar(ui.ScriptWindow): Znajdź tego def def LoadWindow(self): I znajdź tą część: if constInfo.IN_GAME_SHOP_ENABLE: pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "TaskBar.py") else: pyScrLoader.LoadScriptFile(self, "UIScript/TaskBar.py") Zostaw tylko to: pyScrLoader.LoadScriptFile(self, "UIScript/TaskBar.py") Usuń: if constInfo.IN_GAME_SHOP_ENABLE: self.rampageGauge1 = self.GetChild("RampageGauge") self.rampageGauge1.OnMouseOverIn = ui.__mem_func__(self.__RampageGauge_OverIn) self.rampageGauge2 = self.GetChild("RampageGauge2") self.rampageGauge2.OnMouseOverOut = ui.__mem_func__(self.__RampageGauge_OverOut) self.rampageGauge2.OnMouseLeftButtonUp = ui.__mem_func__(self.__RampageGauge_Click) self.__RampageGauge_OverOut() def __RampageGauge_OverIn(self): print "rampage_over_in" self.rampageGauge2.Show() self.rampageGauge1.Hide() def __RampageGauge_OverOut(self): print "rampage_over_out" self.rampageGauge2.Hide() self.rampageGauge1.Show() def __RampageGauge_Click(self): print "rampage_up" net.SendChatPacket("/in_game_mall") # gift icon hide when click mall icon self.wndGiftBox.Hide() W pliku interfacemodule.py Usuń: self.wndWeb = None def __MakeWebWindow(self): if constInfo.IN_GAME_SHOP_ENABLE: import uiWeb self.wndWeb = uiWeb.WebWindow() self.wndWeb.LoadWindow() self.wndWeb.Hide() self.__MakeWebWindow() if self.wndWeb: self.wndWeb.Destroy() self.wndWeb = None Szukaj: def ToggleChat(self): Zamień tego def na: def ToggleChat(self): if True == self.wndChat.IsEditMode(): self.wndChat.CloseChat() else: self.wndChat.OpenChat() Usuń: def OpenWebWindow(self, url): self.wndWeb.Open(url) # 웹페이지를 열면 채팅을 닫는다 self.wndChat.CloseChat() def CloseWbWindow(self): self.wndWeb.Close() W pliku game.py Usuń: def __InGameShop_Show(self, url): if constInfo.IN_GAME_SHOP_ENABLE: self.interface.OpenWebWindow(url) W tym def: def OnKeyDown(self, key): Usuń tego if: if self.interface.wndWeb and self.interface.wndWeb.IsShow(): return Szukaj: def __ServerCommand_Build(self): W tym def niżej usuń: "mall" : self.__InGameShop_Show, W pliku consolemodule.py Szukaj i usuń: def ShowWeb(self): "ShowWeb" if app.IsWebPageMode(): app.HideWebPage() else: app.ShowWebPage("[Hidden Content]", (0, 0, 320, 600)) self.AddFunction("web", Console.ShowWeb) W pliku: uishop.py Szukasz i usuwasz cała klasę mall: class MallPageDialog(ui.ScriptWindow): def __init__(self): ui.ScriptWindow.__init__(self) def __del__(self): ui.ScriptWindow.__del__(self) def Destroy(self): self.ClearDictionary() def Open(self): scriptLoader = ui.PythonScriptLoader() scriptLoader.LoadScriptFile(self, "uiscript/mallpagedialog.py") self.GetChild("titlebar").SetCloseEvent(ui.__mem_func__(self.Close)) (x, y)=self.GetGlobalPosition() x+=10 y+=30 MALL_PAGE_WIDTH = 600 MALL_PAGE_HEIGHT = 480 app.ShowWebPage( "[Hidden Content]", (x, y, x+MALL_PAGE_WIDTH, y+MALL_PAGE_HEIGHT)) self.Lock() self.Show() def Close(self): app.HideWebPage() self.Unlock() self.Hide() def OnPressEscapeKey(self): self.Close() return TRUE W root usuwasz plik: uiweb.py W locale i uiscript plik: webwindow.py
  36. 2 points
    Witam! Bronie są exportowane przez Dzekon Pobierz: [Hidden Content] Hasło do paczki: p-sDLa5rab:3>qFE Skan: [Hidden Content]
  37. 2 points
    Siema, dzisiaj poradnik jak dodać nowe funkcje do CONFIG'u channeli Zrobimy to na przykładzie nieskończonych pelerynek dodatkowe funkcje: Nieskończona Zmianka Nieskończone Dodanie Nieskończone Mikstury HP/SP #nowe funkcje pojawia sie wieczorem, ewentualnie jutro
  38. 2 points
  39. 2 points
    Ostatnio ktoś pytał o animowane tło logowania. Ten poradnik pokaże jeden ze sposobów na uzyskanie takiego efektu. Powiem jeszcze tylko, że nie jest to najlepszy sposób na animowane tło i można w internecie doszukać się ciekawszych rozwiązań, ale ten sposób też jest warty uwagi. Dzięki niemu możemy zrobić dość ciekawe logo, a nie tylko tło, co według mnie jest już lepszym zastosowaniem. Poradnik podzielę na dwie części, abyście mogli przetestować to co was bardziej interesuje. Download: [Hidden Content] ANIMOWANE TŁO LOGOWANIA 01: Wrzucamy zawartość pobranej paczki do klienta gry (root/locale/pl/ui). 02: Otwieramy loginwindow.py (root/locale/pl/ui) i szukamy tego: { "name" : "bg2", "type" : "expanded_image", "x" : 0, "y" : 0, "x_scale" : float(SCREEN_WIDTH) / 1024.0, "y_scale" : float(SCREEN_HEIGHT) / 768.0, "image" : "locale/pl/ui/login.sub", }, I pod spodem dodajemy to: # ANIMOWANY BACKGROUND LOGIN { "name" : "AnimationBackgroundLogin", "type" : "ani_image", "x" : -448, "y" : 0, "width" : 1024.0, "height" : 768.0, "horizontal_align" : "center", "delay" : 3, "images" : ( "locale/pl/ui/animationbackground/log 01.jpg", "locale/pl/ui/animationbackground/log 02.jpg", "locale/pl/ui/animationbackground/log 03.jpg", "locale/pl/ui/animationbackground/log 04.jpg", "locale/pl/ui/animationbackground/log 05.jpg", "locale/pl/ui/animationbackground/log 06.jpg", "locale/pl/ui/animationbackground/log 07.jpg", "locale/pl/ui/animationbackground/log 08.jpg", "locale/pl/ui/animationbackground/log 09.jpg", "locale/pl/ui/animationbackground/log 10.jpg", "locale/pl/ui/animationbackground/log 11.jpg", "locale/pl/ui/animationbackground/log 12.jpg", "locale/pl/ui/animationbackground/log 13.jpg", "locale/pl/ui/animationbackground/log 14.jpg", "locale/pl/ui/animationbackground/log 15.jpg", "locale/pl/ui/animationbackground/log 16.jpg", "locale/pl/ui/animationbackground/log 17.jpg", "locale/pl/ui/animationbackground/log 18.jpg", "locale/pl/ui/animationbackground/log 19.jpg", "locale/pl/ui/animationbackground/log 20.jpg", "locale/pl/ui/animationbackground/log 21.jpg", "locale/pl/ui/animationbackground/log 22.jpg", "locale/pl/ui/animationbackground/log 23.jpg", "locale/pl/ui/animationbackground/log 24.jpg", "locale/pl/ui/animationbackground/log 25.jpg", "locale/pl/ui/animationbackground/log 26.jpg", "locale/pl/ui/animationbackground/log 27.jpg", "locale/pl/ui/animationbackground/log 28.jpg", "locale/pl/ui/animationbackground/log 29.jpg", "locale/pl/ui/animationbackground/log 30.jpg", "locale/pl/ui/animationbackground/log 31.jpg", "locale/pl/ui/animationbackground/log 32.jpg", "locale/pl/ui/animationbackground/log 33.jpg", "locale/pl/ui/animationbackground/log 34.jpg", "locale/pl/ui/animationbackground/log 35.jpg", "locale/pl/ui/animationbackground/log 36.jpg", "locale/pl/ui/animationbackground/log 37.jpg", "locale/pl/ui/animationbackground/log 38.jpg", "locale/pl/ui/animationbackground/log 39.jpg", "locale/pl/ui/animationbackground/log 40.jpg", "locale/pl/ui/animationbackground/log 41.jpg", "locale/pl/ui/animationbackground/log 42.jpg", "locale/pl/ui/animationbackground/log 43.jpg", "locale/pl/ui/animationbackground/log 44.jpg", "locale/pl/ui/animationbackground/log 45.jpg", "locale/pl/ui/animationbackground/log 46.jpg", "locale/pl/ui/animationbackground/log 47.jpg", "locale/pl/ui/animationbackground/log 48.jpg", "locale/pl/ui/animationbackground/log 49.jpg", "locale/pl/ui/animationbackground/log 50.jpg", ) }, ANIMOWANE LOGO 01: Otwieramy loginwindow.py (root/locale/pl/ui) i teraz, jeśli dodałeś animowane tło logowania to kod z tej części dodaj pod tamtym, a jeśli nie to szukamy tego: { "name" : "bg2", "type" : "expanded_image", "x" : 0, "y" : 0, "x_scale" : float(SCREEN_WIDTH) / 1024.0, "y_scale" : float(SCREEN_HEIGHT) / 768.0, "image" : "locale/pl/ui/login.sub", }, I pod spodem dodajemy to: # ANIMOWANE LOGO { "name" : "AnimationLogo", "type" : "ani_image", "x" : 0, "y" : 74, "width" : 390, "height" : 100, "horizontal_align" : "center", "delay" : 3, "images" : ( "locale/pl/ui/animationlogo/0.jpg", "locale/pl/ui/animationlogo/1.jpg", "locale/pl/ui/animationlogo/2.jpg", "locale/pl/ui/animationlogo/3.jpg", "locale/pl/ui/animationlogo/4.jpg", "locale/pl/ui/animationlogo/5.jpg", "locale/pl/ui/animationlogo/6.jpg", "locale/pl/ui/animationlogo/7.jpg", "locale/pl/ui/animationlogo/8.jpg", "locale/pl/ui/animationlogo/9.jpg", "locale/pl/ui/animationlogo/10.jpg", "locale/pl/ui/animationlogo/11.jpg", "locale/pl/ui/animationlogo/12.jpg", "locale/pl/ui/animationlogo/13.jpg", ) }, I to wszystko. Pamiętajcie tylko, że tło i logo (w szczególności logo) są obrazami przykładowymi PS: Kombinowałem, żeby obrazy skalowały się do rozdzielczości okna gry, ale nic mi nie wychodziło. Jakby ktoś się na tym znał to może napisać, jak to zrobić.
  40. 2 points
    Wydaje mi się, że odpowiada za to ta linijka: CHARACTER_NAME_MAX_LEN = 24, Jednak tutaj problem jest taki, że korzysta ona również z nazw: Potworów (Jak chciałeś), ale też mount'ów, npc, pet'ów, graczy (O nazwę gracza chyba chodzi) itd. Spróbuj ją przerobić, oczywiście robi się to tak samo jak w powyższym tutorialu.
  41. 2 points
    Nie podoba mi się gdy na serwerze każdy ma tą samą "rangę" Może komuś się to przyda Otwieramy: InstanceBaseEffect.cpp Szukamy: void CInstanceBase::UpdateTextTailLevel(DWORD level) Dodajemy:
  42. 2 points
  43. 2 points
    Znalazłem błąd z wiązany z tym poradnikiem mianowicie istnieje możliwość dodawania bonów 6/7 do szarf (ogólnie można też dodać do kostiumów) poniżej przedstawię naprawę tego błędu. Wchodzimy do game/src szukamy i edytujemy plik char_item.cpp W nim szukamy: case 71051 : { LPITEM item2; Pod dodajemy: if (item2->GetType() == ITEM_COSTUME) return false; Następnie szukamy: case 71052 : { LPITEM item2; Pod dodajemy: if (item2->GetType() == ITEM_COSTUME) return false;
  44. 2 points
    Cześć, dzisiaj poprawimy sobie błąd z nieprawidłowym wyświetlaniem ikon przedmiotów poprzez funkcję say_item. Chodzi o to, że ikona jest wyświetlana poza oknem i po lewej stronie. Po poprawieniu tego błędu ikona będzie wyświetlana tam gdzie powinna, czyli na środku okna w say'u. Rozwiązanie Błędu: Przechodzimy do plików serwerowych, następnie do podanej poniżej ścieżki, a na koniec otwieramy zaznaczony na zielono plik. Share/Locale/XXX/Quest/QuestLib.lua XXX = Katalog "Poland, Germany", Itd. W wyżej wymienionym pliku szukamy tej bardzo długiej funkcji: function say_item(name, vnum, desc) say("[INSERT_IMAGE image_type;item|idx;"..vnum.."|title;"..name.."|desc;"..desc.."]") end Edytując ją w taki sposób: function say_item(name, vnum, desc) say("[INSERT_IMAGE image_type;item|idx;"..vnum.."|title;"..name.."|desc;"..desc.."|index;".. 0 .."|total;".. 1 .."]") end Gotowe.
  45. 2 points
    Ta poprawka blokuje włączanie Aury Miecza, czy też Czarowanego Ostrza bez założonej broni. game->src->char_skill.cpp // 1.) Szukamy: bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaster) { if (false == CanUseSkill(dwVnum)) return false; // 2.) Następnie pod tym warunkiem dopisujemy nastepny: if ((dwVnum == SKILL_GEOMKYUNG || dwVnum == SKILL_GWIGEOM) && !GetWear(WEAR_WEAPON)) return false;
  46. 1 point
    Dał Ci listę do poprawy
  47. 1 point
    Jeśli dodawałeś je z poradnika paszki dodałeś efekt w case od broni nie kostiumów, stąd problem.
  48. 1 point
    Link: [hide] [Hidden Content] [/hide] Jak używać: [hide] [/hide]
  49. 1 point
    Interfejs ponoć jest zakodowany. Download: [Hidden Content] Źródło: [Hidden Content]
  50. 1 point
    [video=youtube] Ten kaptur ogólnie jest już dostępny gdzieś w sieci, ale tylko dla postaci sura. Ja go przerobiłem na ninje, poprawiłem jakość tekstury i zmieniłem jej ogólny wygląd. Name: Kaptur nekromanty Granny version: Granny standard exporter, SDK version 2.6.0.10 Author: Tatsumaru Download: [hide] [Hidden Content] [/hide]
This leaderboard is set to Warsaw/GMT+01:00
×
×
  • Create New...