Jump to content

Ezequiel G.

Inactive Member
  • Posts

    92
  • Joined

  • Last visited

  • Days Won

    1
  • Feedback

    0%

Posts posted by Ezequiel G.

  1. Hello, I would like to know how I can solve the problem that the game has with the shine on weapons/armor, since I tried another client and it does not have that problem, but I do not know which file I have to change.

     

    It looks like this exaggeratedly shiny:

    CONBRI.png

     

    And I want it to look something like this, only it has glitter on the parts of the weapon/armor where it has glitter and not on the entire character.

    SINBRI.png

     

    The result I'm looking for would be something like this:

     

    RES.png

     

    Greetings and thanks in advance!

    • Metin2 Dev 1
  2. Nice, thanks for sharing!

     

    i have a error:

    networkModule.SetSelectCharacterPhase - <type 'exceptions.IndentationError'>:unexpected indent (uiToolTip.py, line 960)

     

            itemDesc = item.GetItemDescription()
            itemSummary = item.GetItemSummary()

            isCostumeItem = 0
            isCostumeHair = 0
            isCostumeBody = 0
            isCostumeMount = 0
                
            if app.ENABLE_COSTUME_SYSTEM:  #LINE 960
                if item.ITEM_TYPE_COSTUME == itemType:
                    isCostumeItem = 1
                    isCostumeHair = item.COSTUME_TYPE_HAIR == itemSubType
                    isCostumeBody = item.COSTUME_TYPE_BODY == itemSubType
                    isCostumeMount = item.COSTUME_TYPE_MOUNT == itemSubType

    • Metin2 Dev 1
  3. On 2/1/2017 at 7:58 PM, Kori said:

    i think thats is better:

     

    int blocked_items[] = {72723,  72724, 72725, 72726};
    
    for(size_t i = 0; i < INVENTORY_MAX_NUM; i++) {
    	for (size_t id = 0; id < 4; id++) {
    		if(pkChr->GetInventoryItem(i)> 0 && pkChr->GetInventoryItem(i)->GetSocket(0) == 1 && pkChr->GetInventoryItem(i)->GetVnum() == blocked_items[id]) {
    			pkChr->ChatPacket(CHAT_TYPE_INFO, "%s potions are banned in duel" , pkChr->GetName());
    			pkChr->GetInventoryItem(i)->SetSocket(0, false);
    			pkChr->GetInventoryItem(i)->Lock(false);
    		} else if(pkVictim->GetInventoryItem(i)> 0 && pkVictim->GetInventoryItem(i)->GetSocket(0) == 1 && pkVictim->GetInventoryItem(i)->GetVnum() == blocked_items[id]) {
    			pkVictim->ChatPacket(CHAT_TYPE_INFO, "%s potions are banned in duel" , pkVictim->GetName());
    			pkVictim->GetInventoryItem(i)->SetSocket(0, false);
    			pkVictim->GetInventoryItem(i)->Lock(false);
    		}
    	}
    }

    but dont tested

     

     

    looks like:

    void CPVPManager::Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim)
    {
    	if (pkChr->IsDead() || pkVictim->IsDead())
    		return;
    	int blocked_items[] = {72723,  72724, 72725, 72726};
    
    	CPVP kPVP(pkChr->GetPlayerID(), pkVictim->GetPlayerID());
    
    	CPVP * pkPVP;
    
    	if ((pkPVP = Find(kPVP.m_dwCRC)))
    	{
    		// º¹¼öÇÒ ¼ö ÀÖÀ¸¸é ¹Ù·Î ½Î¿ò!
    		if (pkPVP->Agree(pkChr->GetPlayerID()))
    		{
    			pkVictim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s´Ô°úÀÇ ´ë°á ½ÃÀÛ!"), pkChr->GetName());
    			pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s´Ô°úÀÇ ´ë°á ½ÃÀÛ!"), pkVictim->GetName());
    			for(size_t i = 0; i < INVENTORY_MAX_NUM; i++) {
    				for (size_t id = 0; id < 4; id++) {
    					if(pkChr->GetInventoryItem(i)> 0 && pkChr->GetInventoryItem(i)->GetSocket(0) == 1 && pkChr->GetInventoryItem(i)->GetVnum() == blocked_items[id]) {
    						pkChr->ChatPacket(CHAT_TYPE_INFO, "%s potions are banned in duel" , pkChr->GetName());
    						pkChr->GetInventoryItem(i)->SetSocket(0, false);
    						pkChr->GetInventoryItem(i)->Lock(false);
    					} else if(pkVictim->GetInventoryItem(i)> 0 && pkVictim->GetInventoryItem(i)->GetSocket(0) == 1 && pkVictim->GetInventoryItem(i)->GetVnum() == blocked_items[id]) {
    						pkVictim->ChatPacket(CHAT_TYPE_INFO, "%s potions are banned in duel" , pkVictim->GetName());
    						pkVictim->GetInventoryItem(i)->SetSocket(0, false);
    						pkVictim->GetInventoryItem(i)->Lock(false);
    					}
    				}
    			}
    
    		}
    		return;
    	}
    
    	pkPVP = M2_NEW CPVP(kPVP);
    
    	pkPVP->SetVID(pkChr->GetPlayerID(), pkChr->GetVID());
    	pkPVP->SetVID(pkVictim->GetPlayerID(), pkVictim->GetVID());
    
    	m_map_pkPVP.insert(map<DWORD, CPVP *>::value_type(pkPVP->m_dwCRC, pkPVP));
    
    	m_map_pkPVPSetByID[pkChr->GetPlayerID()].insert(pkPVP);
    	m_map_pkPVPSetByID[pkVictim->GetPlayerID()].insert(pkPVP);
    
    	pkPVP->Packet();
    
    	char msg[CHAT_MAX_LEN + 1];
    	snprintf(msg, sizeof(msg), LC_TEXT("%s´ÔÀÌ ´ë°á½ÅûÀ» Çß½À´Ï´Ù. ½Â³«ÇÏ·Á¸é ´ë°áµ¿ÀǸ¦ Çϼ¼¿ä."), pkChr->GetName());
    
    	pkVictim->ChatPacket(CHAT_TYPE_INFO, msg);
    	pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s¿¡°Ô ´ë°á½ÅûÀ» Çß½À´Ï´Ù."), pkVictim->GetName());
    
    	// NOTIFY_PVP_MESSAGE
    	LPDESC pkVictimDesc = pkVictim->GetDesc();
    	if (pkVictimDesc)
    	{
    		TPacketGCWhisper pack;
    
    		int len = MIN(CHAT_MAX_LEN, strlen(msg) + 1);
    
    		pack.bHeader = HEADER_GC_WHISPER;
    		pack.wSize = sizeof(TPacketGCWhisper) + len;
    		pack.bType = WHISPER_TYPE_SYSTEM;
    		strlcpy(pack.szNameFrom, pkChr->GetName(), sizeof(pack.szNameFrom));
    
    		TEMP_BUFFER buf;
    
    		buf.write(&pack, sizeof(TPacketGCWhisper));
    		buf.write(msg, len);
    
    		pkVictimDesc->Packet(buf.read_peek(), buf.size());
    	}	
    	// END_OF_NOTIFY_PVP_MESSAGE
    }

     

     

    NOTE

    make top of this file

    #include "char_battle.cpp"

     

    and all error fixxed

    Could you tell which files and functions need to be edited? please thanks!

  4. On 3/13/2019 at 11:54 PM, tmoitoi said:

    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.

    Nice, thanks ❤️

    • Metin2 Dev 1
  5. On 6/1/2021 at 6:18 PM, TMP4 said:

    M2 Download Center

    This is the hidden content, please
    ( Internal )

    [Replica] Old Metin2 Website & ItemShop

    This is a working replica of the old Metin2 website and ItemShop.
    The project originally made in 2013 for a possible server but we never opened it.
    For now I just refactored it to be compatible with PHP7/8, tidied the code a little but
    honestly, expect real old shit procedural style code! While you can use "as is", I highly 
    recommend to check it for old vulnerabilities before you take it live because of it's deprecated nature.
    The language is hungarian, you can use web.archive.org to speed up your translation.

    Website:

      Reveal hidden contents

    012826Web.png

    ItemShop:

      Reveal hidden contents

    012826ItemShop.png

    Download: 

    This is the hidden content, please

    Regards,
    TMP4

    Thanks for the contribution, the registration does not work 😕

    • Metin2 Dev 4
    • Good 1
    • Love 1
    • Love 2
  6. On 7/31/2021 at 3:29 PM, Bluddys said:

    Hello everyone here,
    I might have a stupid question and especially just a theoretical one. 
    The game is designed in C ++ and python. When a lot of objects are displayed in the game, he has problems with FPS. The graphics are not very editable. I mean the resolution in the game (when the game is running), the distances of the objects, the quality of the objects, etc ... (example. My friends don't want to play the game just because it looks like.)

    My main question is.
    Has anyone tried to remake the client under a "Game Engine"?
    I mean Unity engine or Unreal engine.

    I understand that in this forum and especially here we talk about the client and server so that it comes as close as possible to the original without bugs and other things.
    But from the original client, it might be better to start reworking the client into another "Engine".

    Currently, I consider the possibility of redesigning the client under the "Unity" engine only as a theoretical question whether someone tried it or whether it would be at all.
    I will be happy for any advice, and especially if someone has already tried this, so for the problems that have arisen or could arise.

    PS: I apologize for my bad English.

     

     

     

     

     

    • Good 1
  7. Hi, I'm having a problem ... I hired a VPS in virtua.cloud but I can't get MySQL to work, the following error is shown in the server log:

     

    PUBLIC_IP: XXX.XX.XX.XXX interface em0
    mysql_real_connect: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
    cannot open direct sql connection to host: localhost user: root db: common
    cannot start server while no common sql connected
    HOSTNAME: canal1_core1
    
    
    >> I deleted the IP address just in case ...

    FreeBSD 12.1

     

    I would appreciate if you can help me solve the problem, regards!

    • Metin2 Dev 1
  8. Error (active) E0020 "CFlyTarget" identifier is not defined UserInterface 😄 \ Users \ XXXX \ Documents \ [40250] Reference Serverfile By TMP4 \ ClientVS19 \ source \ GameLib \ FlyTarget.h 17

     

    Error (active) E1574 static assertion error with "set <T, Compare, Allocator> requires that Allocator's value_type match T (See N4659 26.2.1 [container.requirements.general] / 16 allocator_type) Either fix the allocator value_type or define _ENFORCE_MATCHING_ALLOCATORS = 0 to suppress this diagnostic. " GameLib 😄 \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Professional \ VC \ Tools \ MSVC \ 14.29.30037 \ include \ set 57

     

    Error (active) E0349 no operator "=" matches these operands GameLib 😄 \ Users \ XXXX \ Documents \ MEGAsync Downloads \ [40250] Reference Serverfile By TMP4 \ ClientVS19 \ source \ GameLib \ FlyTarget.h 74

     

    Error RC1015 cannot open include file 'afxres.h'. UserInterface 😄 \ Users \ XXXX \ Documents \ MEGAsync Downloads \ [40250] Reference Serverfile By TMP4 \ ClientVS19 \ source \ UserInterface \ UserInterface.rc 11

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