Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 03/13/19 in all areas

  1. M2 Download Center Download Here ( Internal ) Once I thought that these costumes made some moder and did not make them icons. Then I decided to do it myself, because the costumes were worth attention. It was only after some time that I realized that these are original costumes and have their own icons. Well ... I do not know why, but I'm throwing in, hehe Download: [Hidden Content]
    5 points
  2. M2 Download Center Download Here ( Internal ) Hello guys Today i'm gonna release new design for wedding costumes. i know its not my best but i'm tried with many style but i think white design is good. i will share more soon for diffrent design for wedding and more so wait me i hope you like them :) Download: Click here if you like it just say thanks. if you found any problem just reply me. i will try to fix it. regards, Dane
    4 points
  3. Why did you remove the wagina? ?
    3 points
  4. M2 Download Center Download Here ( Internal ) Hello, I started to convert some server data files from .txt to .json. I intend to convert them more understandable and modern with these changes, also few bugs and a memory leak in the old system has been fixed. Currently only mob_drop_info.txt file is translated, then all .txt files and proto files will be added. Tutorial for mob_drop_info.txt game part: Add to service.h: #define ENABLE_JSON_GAME_FILES Add to stl.h inline std::wstring StringToWstring(std::string input) { std::wstring output(input.begin(), input.end()); return output; } inline std::string WstringToString(std::wstring input) { std::string output(input.begin(), input.end()); return output; } Search in input_db.cpp "%s/mob_drop_item.txt", LocaleService_GetBasePath().c_str()); Change with: #ifdef ENABLE_JSON_GAME_FILES "%s/mob_drop_item.json", LocaleService_GetBasePath().c_str()); #else "%s/mob_drop_item.txt", LocaleService_GetBasePath().c_str()); #endif Search: if (!ITEM_MANAGER::instance().ReadMonsterDropItemGroup(szMOBDropItemFileName)) Change with: #ifdef ENABLE_JSON_GAME_FILES if (!ITEM_MANAGER::instance().ReadMonsterDropItemGroupNew(szMOBDropItemFileName)) #else if (!ITEM_MANAGER::instance().ReadMonsterDropItemGroup(szMOBDropItemFileName)) #endif Search in item_manager.h: bool ReadDropItemGroup(const char * c_pszFileName); Add it under: #ifdef ENABLE_JSON_GAME_FILES bool ReadMonsterDropItemGroupNew(const char * c_pszFileName); #endif Add in item_manager_read_tables.cpp #ifdef ENABLE_JSON_GAME_FILES #include <fstream> #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/json_parser.hpp> #endif Search: bool ITEM_MANAGER::ReadMonsterDropItemGroup(const char * c_pszFileName) Change like this: [Hidden Content] Codes: [Hidden Content] Converter: [Hidden Content] Note: You need c ++ 11 and boost property tree module to use this configuration.
    2 points
  5. With 19.1, They've added two GUI in the game. (Lucky box, The new fish system). Here are two files. FishingGameWindow.py LuckyBoxWindow.py About the new cheat blocker ; Webzen should try harder than this. At least gameguard was better than this Thanks to @T4UMP Best Regards Ken
    2 points
  6. Special place: https://metin2dev.org/board/index.php?/topic/20167-tatsumaru/ Such a quick, inaccurate painting. Maybe next time I'm bored I will improve this picture. render FULL HD
    2 points
  7. M2 Download Center Download Here ( Internal ) Hey guys, i was bored and this visual "bug" i hate since years, so i corrected the "navi" of the character window. @LordZiege (German) Download - Virustotal @ Tatsumaru (German & English) Download @ Mitachi (Italian) Download Kind regards
    1 point
  8. M2 Download Center Download Here ( Internal ) This quest will warp to the village whoever logins into a map which minimum level required is higher than the player's level. This basically fixes those who abuse the Wedding Ring or the Warp Scrolls to go to maps they normally shouldn't be able to go into. For example: if a player logins into the Grotto of Exile but his level is less than 75, he will be teleported back to his village. The maps and the minimum levels are fully customizable. Have fun! [Hidden Content]
    1 point
  9. Hey, Actually you just have to add "import grp" as it is already included by default (and already used elsewhere, i.e uichat.py) Thanks anyway
    1 point
  10. Fix for invisible background ? create grp.py into lib client with this content: # this module is an OS/2 oriented replacement for the grp standard # extension module. # written by Andrew MacIntyre, April 2001. # updated July 2003, adding field accessor support # note that this implementation checks whether ":" or ";" as used as # the field separator character. """Replacement for grp standard extension module, intended for use on OS/2 and similar systems which don't normally have an /etc/group file. The standard Unix group database is an ASCII text file with 4 fields per record (line), separated by a colon: - group name (string) - group password (optional encrypted string) - group id (integer) - group members (comma delimited list of userids, with no spaces) Note that members are only included in the group file for groups that aren't their primary groups. (see the section 8.2 of the Python Library Reference) This implementation differs from the standard Unix implementation by allowing use of the platform's native path separator character - ';' on OS/2, DOS and MS-Windows - as the field separator in addition to the Unix standard ":". The module looks for the group database at the following locations (in order first to last): - ${ETC_GROUP} (or %ETC_GROUP%) - ${ETC}/group (or %ETC%/group) - ${PYTHONHOME}/Etc/group (or %PYTHONHOME%/Etc/group) Classes ------- None Functions --------- getgrgid(gid) - return the record for group-id gid as a 4-tuple getgrnam(name) - return the record for group 'name' as a 4-tuple getgrall() - return a list of 4-tuples, each tuple being one record (NOTE: the order is arbitrary) Attributes ---------- group_file - the path of the group database file """ import os # try and find the group file __group_path = [] if os.environ.has_key('ETC_GROUP'): __group_path.append(os.environ['ETC_GROUP']) if os.environ.has_key('ETC'): __group_path.append('%s/group' % os.environ['ETC']) if os.environ.has_key('PYTHONHOME'): __group_path.append('%s/Etc/group' % os.environ['PYTHONHOME']) group_file = None for __i in __group_path: try: __f = open(__i, 'r') __f.close() group_file = __i break except: pass # decide what field separator we can try to use - Unix standard, with # the platform's path separator as an option. No special field conversion # handlers are required for the group file. __field_sep = [':'] if os.pathsep: if os.pathsep != ':': __field_sep.append(os.pathsep) # helper routine to identify which separator character is in use def __get_field_sep(record): fs = None for c in __field_sep: # there should be 3 delimiter characters (for 4 fields) if record.count(c) == 3: fs = c break if fs: return fs else: raise KeyError, '>> group database fields not delimited <<' # class to match the new record field name accessors. # the resulting object is intended to behave like a read-only tuple, # with each member also accessible by a field name. class Group: def __init__(self, name, passwd, gid, mem): self.__dict__['gr_name'] = name self.__dict__['gr_passwd'] = passwd self.__dict__['gr_gid'] = gid self.__dict__['gr_mem'] = mem self.__dict__['_record'] = (self.gr_name, self.gr_passwd, self.gr_gid, self.gr_mem) def __len__(self): return 4 def __getitem__(self, key): return self._record[key] def __setattr__(self, name, value): raise AttributeError('attribute read-only: %s' % name) def __repr__(self): return str(self._record) def __cmp__(self, other): this = str(self._record) if this == other: return 0 elif this < other: return -1 else: return 1 # read the whole file, parsing each entry into tuple form # with dictionaries to speed recall by GID or group name def __read_group_file(): if group_file: group = open(group_file, 'r') else: raise KeyError, '>> no group database <<' gidx = {} namx = {} sep = None while 1: entry = group.readline().strip() if len(entry) > 3: if sep is None: sep = __get_field_sep(entry) fields = entry.split(sep) fields[2] = int(fields[2]) fields[3] = [f.strip() for f in fields[3].split(',')] record = Group(*fields) if not gidx.has_key(fields[2]): gidx[fields[2]] = record if not namx.has_key(fields[0]): namx[fields[0]] = record elif len(entry) > 0: pass # skip empty or malformed records else: break group.close() if len(gidx) == 0: raise KeyError return (gidx, namx) # return the group database entry by GID def getgrgid(gid): g, n = __read_group_file() return g[gid] # return the group database entry by group name def getgrnam(name): g, n = __read_group_file() return n[name] # return all the group database entries def getgrall(): g, n = __read_group_file() return g.values() # test harness if __name__ == '__main__': getgrall() And add on the interfacemodule.py: import grp Require Python 2.7 else you must replace function by background image.
    1 point
  11. yeah, ok i c. looks like broadsword with changed texture, tho. well, i have a beta client but they removed already everything instead of maybe 1 or 2 useful things. its a shame, because we wont ever be able to take a look in the alpha content. they had lots of content in there like those skeleton mobs and other stuff. the only useful thing out of this client is maybe the skill proto. thats why i'm saying its acurate
    1 point
  12. M2 Download Center Download Here ( Internal ) Today I needed the original icon without the text on it, so I prepared it. I put it here on the forum, maybe it will also be useful to someone Download: [Hidden Content]
    1 point
  13. Hey guys, someone know how can I do the same function in client source? The function must block buff if target player who have to be buffed have activated block buff button. Only if target player is member of the same party group as buffer the buff will be allowed. I have this function in server source: switch (dwVnum) { case 94: case 95: case 96: case 109: case 110: case 111: { if (this && pkVictim) { if (this != pkVictim && this->GetDesc() && pkVictim->GetDesc()) { if (pkVictim->IsBlockMode(BLOCK_BUFF_BUTTON)) { return false; } } } } break; } Thanks for answers! Sincerely, ReFresh
    0 points
  14. M2 Download Center Download Here ( Internal ) Throwback 2017 November 4 [Hidden Content]
    0 points
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.