Jump to content

Galet

Premium
  • Posts

    1384
  • Joined

  • Last visited

  • Days Won

    14
  • Feedback

    0%

Posts posted by Galet

  1. Il y a 5 heures, WeedHex a dit :

    Sync bug, you can't fix it because you'll change totally metin2 and it gonna be a shit if you fix that.

    Someone fixed that ovb i can't tell you how.

    Actually you don't, It's like, a line or two and you remove such thing, it wasn't like that few years ago and I got rid of it a long time ago as well a some other people did, it's in char_battle and about the syncing of the character

  2. il y a 20 minutes, tmoitoi a dit :

    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.

    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 :)

    • Love 1
  3. Maybe the sword, however I am really interested in an old client, oldest I found was 2004 I think, was never able to find an oldest client (alpha / beta related)

    il y a 5 minutes, LastSamurai23 a dit :

    so what does the sura screen actually show or mean???

     

  4. il y a une heure, LastSamurai23 a dit :

    it actually is official. but these skills were only implemented in the first korean beta from summer 2004.

      

    alot of korean players stopped at that time cuz they said ymir f'd the game. (i mean removing those beta skills and a lot of weapons / armors).

     

     

    ucBCeab.jpg

    Where did you get the value (if you get?) of the skills? But it's maybe just a visual demo, which would still be cool imo

    By the way I completely agree with you, some things in beta was definitely good enough to be kept, for example old armors that never made it after beta; highly disappointing :(

  5. il y a une heure, tierrilopes a dit :

    What I meant was, themida isn't needed as it's implementation can't even be considered a implementation.

    That's why I said it doesn't fit the category, plus the scope of it is different from those libs. Those are needed (well, I used vanilla libjpeg instead of turbo for example but you get the point) while themida isn't.

     

    TL;DR: I consider themida an add-on and not a requirement

    We share the same point of view, those are not needed nor vital libs for the client and usually not used by the majority (we also have a MovieMan, Hshield and stuff)

  6. il y a une heure, tierrilopes a dit :

    You added libs used in metin2 sources.

    Themida doesnt fit that category

    There is some special defines for external programs such as Themida and Xtrap but those are higly depreciated imo

  7. I usually run my local server on Windows, way better to launch and nice debugging through Visual Studio.

    Otherwise, I use FreeBSD, never tried DragonFlyBSD though (and it doesn't seems better looking at benchmarks). Debian can also be used if you find the proper equivalences. But I usually stick of FreeBSD

  8. il y a 31 minutes, PeaceMaker a dit :

    Yeah but having an F next to Alignment makes no sense xD 

    It's for example purposes. You can change it for a lot of things and pretty much whatever you want. This system is really usefull as it changes alignment name based on the sex of the player, which is not especially useful in english but it is in a lot of languages. For example in French "Agressif / Agressive" "Cruel / Cruelle" "Chevalier / Chevaleresse".

    • Love 2
  9. Il y a 3 heures, Aerrow a dit :

    Ah, then that two guy can apology from me.. :P

    That's kinda weird because I remember the link under the video but not the site where you can get the link. At least I knew it was in the description, weird anyways :blink:

    • Love 1
  10. Hello,

    That's fine and great, but I don't get the point. I think using a decoration system like official servers did is better, I don't think a lot of people will disable terrain, water, trees or even clouds

    Good job anyway !

×
×
  • 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.