Jump to content

xP3NG3Rx

Honorable Member
  • Posts

    839
  • Joined

  • Days Won

    393
  • Feedback

    100%

Posts posted by xP3NG3Rx

  1. Guys you flew away with with the prices a little bit.
    There are many of examples in the source how to do it even if you have close to zero knowledge how to start it, if you have logical thinking you can deal with it. You just have to think in advance two steps or maybe even more what the modification will touch.
    Of course it depends on the time you spend with it, if your are noobie and it took like 2 months to make it work, still cannot cost more then it deserve.
    Doesn't matter if it is communicating via packets instead of chatcommand or whatever(however I hate chatcommand based systems), the people will think like this "why would I pay this much if I can use it for free the same maybe with less content" they are giving a shit about how the code looks like if it works, it must to be work and that's it. About the high prices again, I can understand it, if someone will buy it for that high price for sure (s)he will not publish it for free even if his/her server closes. And let me explain my opinion about the official pet system: complete nonsense on private servers, some old or new private server had better then that, but nowadays that is the hype, everyone is trying to copy the official server instead of making own content which might be better then that for sure. Ofc if you are like me(maximalist) and you see a code like the code of the official pet system on public you wouldn't know you should cry or just run away and delete it.

    Back to the original topic, this what I saw on the video is not a pet system. Might be an extended clone system as someone told you before.
    To sell it? Make no sense, there are couple of public ones with less opportunities but doing the same, so as I've told you before, why would anyone buy it?
    Even if they could and would buy it, the clever ones would ask a developer to extend the public code with your stuff for less money.
    My opinion about these kind of contents: It kills the cooperative, multiplayer gameplay feeling which drives the private servers to death.
    All of you can think about it, if you would like to open a private server. If you don't need a support character, who could be your friend or a stranger person, you gonna lose after a while players time by time when they get bored.

    • Love 7
  2. All modified files from the last update v19.5.7.1
    Included the new cube window gui.
    Protos are dumped into XML format.
    Cythonized and builtin modules are dumped into metadata.

    This is the hidden content, please

    This is the hidden content, please

    This is the hidden content, please

    • Metin2 Dev 25
    • Not Good 1
    • Cry 1
    • Smile Tear 1
    • Think 1
    • Confused 1
    • Good 11
    • Love 2
    • Love 30
  3. No, it isn't like that. It's a local database inside the client only.

    Anyway, I don't recommend to use that lib either , anytime when you use it, it generates a small freeze during it saves the database.
    I'm using it for my accountboard but I will change it later.
    Here is a small example to update the last used account to place it to the top of the list during the Connect method:

    		con = sqlite3.connect("lib/sqlite3/db.cpd")
    		cur = con.cursor()
    		try:
    			cur.execute("UPDATE accounts SET last_use=? WHERE login = ?;", (time.time(), id,))
    		except sqlite3.Error, e:
    			dbg.TraceError("An error occurred during updating the last_use field:" + e.args[0])
    		con.commit()
    		cur.close()
    		con.close()

     

    • Love 4
  4. Hello everyone.

    In this small guide I'm gonna show you how to load the new Aura effects in automatically from the item_list.txt

    Spoiler

    1.0.) Open GameLib/ItemData.h
    1.1.) Add this anywhere into the class CItemData as public (recommended below of the enums there)

    
    #ifdef ENABLE_AURA_SYSTEM
    		enum EAuraMisc
    		{
    			AURA_GRADE_MAX_NUM = 6,
    		};
    #endif

    1.2.) Add the followings at the bottom of the class CItemData:

    
    #ifdef ENABLE_AURA_SYSTEM
    	protected:
    		DWORD m_dwAuraEffectID;
    	public:
    		void SetAuraEffectID(const char* szAuraEffectPath);
    		DWORD GetAuraEffectID() const { return m_dwAuraEffectID; }
    #endif

    2.0.) Open GameLib/ItemData.cpp
    2.1.) Add the following code at the top of the file where the includes are:

    
    #ifdef ENABLE_AURA_SYSTEM
    	#include "../EffectLib/EffectManager.h"
    #endif

    2.2.) Paste this new function anywhere you want:

    
    #ifdef ENABLE_AURA_SYSTEM
    void CItemData::SetAuraEffectID(const char* szAuraEffectPath)
    {
    	if (szAuraEffectPath)
    		CEffectManager::Instance().RegisterEffect2(szAuraEffectPath, &m_dwAuraEffectID);
    }
    #endif
    

    2.2.) Last put this code into the CItemData::Clear function:

    
    #ifdef ENABLE_AURA_SYSTEM
    	m_dwAuraEffectID = 0;
    #endif

    3.0.) Open GameLib/ItemManager.cpp
    3.1.) Edit your LoadItemScale function like this way: (I do not know how your look like so you must change a bit probably depends how your code looks like)

    
    #ifdef ENABLE_AURA_SYSTEM
    		CItemData* pItemData = MakeItemData(dwItemVNum);
    		BYTE bGradeMax = CItemData::SASH_GRADE_MAX_NUM;
    		if (pItemData->GetType() == CItemData::ITEM_TYPE_COSTUME && pItemData->GetSubType() == CItemData::COSTUME_AURA)
    			bGradeMax = CItemData::AURA_GRADE_MAX_NUM;
    		
    		for (int i = 0; i < bGradeMax; ++i)
    #else
    		for (int i = 0; i < CItemData::SASH_GRADE_MAX_NUM; ++i)
    #endif
    		{
    			pItemData = MakeItemData(dwItemVNum + i);
    			if (pItemData)
    				pItemData->SetItemTableScaleData(byJob, bySex, xScale, yScale, zScale, xPosScale, yPosScale, zPosScale);
    		}

    3.2.) In the LoadItemList function find this:

    
    			if (4 == TokenVector.size())
    			{
    				const std::string& c_rstrModelFileName = TokenVector[3];
    				pItemData->SetDefaultItemData(c_rstrIcon.c_str(), c_rstrModelFileName.c_str());
    			}

    3.3.) And replace it with this one:

    
    			if (4 == TokenVector.size())
    			{
    #ifdef ENABLE_AURA_SYSTEM
    				if (!strcmp(c_rstrType.c_str(), "AURA"))
    				{
    					const std::string& c_rstrAuraEffectFileName = TokenVector[3];
    					pItemData->SetAuraEffectID(c_rstrAuraEffectFileName.c_str());
    					pItemData->SetDefaultItemData(c_rstrIcon.c_str());
    				}
    				else
    				{
    					const std::string& c_rstrModelFileName = TokenVector[3];
    					pItemData->SetDefaultItemData(c_rstrIcon.c_str(), c_rstrModelFileName.c_str());
    				}
    #else
    				const std::string& c_rstrModelFileName = TokenVector[3];
    				pItemData->SetDefaultItemData(c_rstrIcon.c_str(), c_rstrModelFileName.c_str());
    #endif
    			}

    I am not gonna release more of this system, anyway I haven't reversed yet completely, but if you wanna see, how to attach the effect to your character when you equip the item here is an example:

    
    bool CInstanceBase::SetAura(DWORD eAura)
    {
    	if (!IsPC() || IsPoly() || __IsShapeAnimalWear())
    		return false;
    
    	m_GraphicThingInstance.ChangePart(CRaceData::PART_AURA, eAura);
    	if (!eAura)
    	{
    		if (m_auraRefineEffect)
    		{
    			__DetachEffect(m_auraRefineEffect);
    			m_auraRefineEffect = 0;
    		}
    		m_adwPart[CRaceData::PART_AURA] = 0;
    		return true;
    	}
    
    	CItemData* pItemData;
    	if (!CItemManager::Instance().GetItemDataPointer(eAura, &pItemData))
    	{
    		if (m_auraRefineEffect)
    		{
    			__DetachEffect(m_auraRefineEffect);
    			m_auraRefineEffect = 0;
    		}
    		m_adwPart[CRaceData::PART_AURA] = 0;
    		return true;
    	}
    
    	BYTE byRace = (BYTE)GetRace();
    	BYTE byJob = (BYTE)RaceToJob(byRace);
    	BYTE bySex = (BYTE)RaceToSex(byRace);
    
    	D3DXVECTOR3 scalePos = pItemData->GetItemScalePosition(byJob, bySex);
    	if (IsMountingHorseOnly() && byJob != NRaceData::JOB_WOLFMAN)
    		scalePos.z += 15.0f;
    
    	m_auraRefineEffect = m_GraphicThingInstance.AttachEffectByID(NULL, "Bip01 Spine2", pItemData->GetAuraEffectID(), NULL, 0, FALSE, pItemData->GetItemScale(byJob, bySex).z, &scalePos);
    	m_adwPart[CRaceData::PART_AURA] = eAura;
    
    	return true;
    }

     


    Oh, yes. There are some of argument mistmatches because of the scaling and repositioning of the effects, what you can just delete.
    Have fun with it ;)

    • Love 20
  5. Hello boys and girls!

    With this small release you will be able to check every single affects on your character. The official server implemented this with their autohunt system to check the duration of taus and other potions.
    I had to do the same for the dragon soul I have decided to make it. After a small trip in the official binary, I figured out my solution, here it is:

    Spoiler

    1.0.) Open the Client/UserInterface/PythonPlayer.h file.
    1.1.) Then paste the following code to the end of the CPythonPlayer class:
    (By unknown reason they put this into the CPythonItem class, idk why. tbh idc)

    
    	protected:
    		typedef std::vector<TPacketAffectElement> TAffectDataVector;
    		TAffectDataVector	m_mapAffectData;
    	public:
    		void	AddAffect(DWORD dwType, TPacketAffectElement kElem);
    		void	RemoveAffect(DWORD dwType, BYTE bApplyOn);
    		int		GetAffectDataIndex(DWORD dwType, BYTE bApplyOn);
    		TPacketAffectElement GetAffectData(DWORD dwType, BYTE bApplyOn);

    2.0.) Now open the Client/UserInterface/PythonPlayer.cpp file.
    2.1.) Jump to the function by name: CPythonPlayer::Clear and add the following line into the function(my advice: to the bottom as always):

    
    	m_mapAffectData.clear();

    2.2.) And last paste these anywhere you want:

    
    void CPythonPlayer::AddAffect(DWORD dwType, TPacketAffectElement kElem)
    {
    	int iAffIndex = GetAffectDataIndex(dwType, kElem.bPointIdxApplyOn);
    	if (iAffIndex != -1)
    	{
    		m_mapAffectData.at(iAffIndex) = kElem;
    	}
    	else
    	{
    		m_mapAffectData.push_back(kElem);
    	}
    }
    
    void CPythonPlayer::RemoveAffect(DWORD dwType, BYTE bApplyOn)
    {
    	for (TAffectDataVector::iterator it = m_mapAffectData.begin(); it != m_mapAffectData.end(); ++it)
    	{
    		TPacketAffectElement elem = *it;
    		if (elem.dwType == dwType && (bApplyOn == 0 || bApplyOn == elem.bPointIdxApplyOn))
    		{
    			m_mapAffectData.erase(it);
    			break;
    		}
    	}
    }
    
    int CPythonPlayer::GetAffectDataIndex(DWORD dwType, BYTE bApplyOn)
    {
    	int ret = -1, i = 0;
    	for (TAffectDataVector::iterator it = m_mapAffectData.begin(); it != m_mapAffectData.end(); ++it, ++i)
    	{
    		TPacketAffectElement elem = *it;
    		if (elem.dwType == dwType && (bApplyOn == 0 || bApplyOn == elem.bPointIdxApplyOn))
    		{
    			ret = i;
    			break;
    		}
    	}
    	return ret;
    }
    
    TPacketAffectElement CPythonPlayer::GetAffectData(DWORD dwType, BYTE bApplyOn)
    {
    	TPacketAffectElement ret;
    	memset(&ret, 0, sizeof(TPacketAffectElement));
    	for (TAffectDataVector::iterator it = m_mapAffectData.begin(); it != m_mapAffectData.end(); ++it)
    	{
    		TPacketAffectElement elem = *it;
    		if (elem.dwType == dwType && (bApplyOn == 0 || bApplyOn == elem.bPointIdxApplyOn))
    		{
    			ret = elem;
    			break;
    		}
    	}
    	return ret;
    }

    3.0.) Next, open the Client/UserInterface/CPythonNetworkStreamPhaseGame.cpp file.
    3.1.) Extend this function: CPythonNetworkStream::RecvAffectAddPacket with this:

    
    	CPythonPlayer::instance().AddAffect(rkElement.dwType, kAffectAdd.elem);

    3.2.) Do the same into the CPythonNetworkStream::RecvAffectRemovePacket function with this:

    
    	CPythonPlayer::instance().RemoveAffect(kAffectRemove.dwType, kAffectRemove.bApplyOn);

    4.0.) Open the Client/UserInterface/PythonPlayerModule.cpp file.
    4.1.) Add this new function to the module:

    
    PyObject * playerCheckAffect(PyObject* poSelf, PyObject* poArgs)
    {
    	DWORD dwType;
    	if (!PyTuple_GetUnsignedLong(poArgs, 0, &dwType))
    		return Py_BadArgument();
    
    	BYTE bApplyOn;
    	if (!PyTuple_GetByte(poArgs, 1, &bApplyOn))
    		return Py_BadArgument();
    
    	int iAffIndex = CPythonPlayer::Instance().GetAffectDataIndex(dwType, bApplyOn);
    	return Py_BuildValue("b", iAffIndex != -1);
    }
    
    		{ "CheckAffect",							playerCheckAffect,							METH_VARARGS },

     

     

    How to check if the first or the second deck of the dragon soul is activated?

    if player.CheckAffect(chr.NEW_AFFECT_DRAGON_SOUL_DECK1, 0):
    	print("Hurray! The first deck is active now")
    elif player.CheckAffect(chr.NEW_AFFECT_DRAGON_SOUL_DECK2, 0):
    	print("Oh, gosh! The second deck is activated, be careful")
    else:
    	print("Without activated dragon soul you are weak....")

     

    If you find any problem with it, just let me know. I did test it, but not that much.

    • Metin2 Dev 4
    • Good 1
    • Love 22
  6. This is the hidden content, please

    Spoiler
    
    //<srv&client:packet.h
    #ifdef ENABLE_REVIVE_BOARD_RENEWAL
    enum EReviveTypes
    {
    	REVIVE_TYPE_HERE,
    	REVIVE_TYPE_TOWN,
    	REVIVE_TYPE_AUTO_TOWN,
    	REVIVE_TYPE_MAX
    };
    #endif
    
    typedef struct packet_dead
    {
    #ifdef ENABLE_REVIVE_BOARD_RENEWAL
    	packet_dead()
    	{
    		memset(&reviveTime, 0, sizeof(reviveTime));
    	}
    #endif
    	BYTE	header;
    	DWORD	vid;
    #ifdef ENABLE_REVIVE_BOARD_RENEWAL
    	BYTE	reviveTime[REVIVE_TYPE_MAX];
    #endif
    } TPacketGCDead;
    //>
    
    //<srv:char.h
    #ifdef ENABLE_REVIVE_BOARD_RENEWAL
    	public:
    		BYTE		CalcReviveTimeDelay(uint8_t bType);
    #endif
    //>
    
    //<srv:char.cpp
    #ifdef ENABLE_REVIVE_BOARD_RENEWAL
    BYTE CHARACTER::CalcReviveTimeDelay(uint8_t bType)
    {
    	if (!m_pkDeadEvent)
    		return 0;
    
    	BYTE bTimeToDead = BYTE(event_time(m_pkDeadEvent) / passes_per_sec);
    	if (bType == REVIVE_TYPE_AUTO_TOWN)
    		return bTimeToDead-7;
    
    	if (!test_server && bType == REVIVE_TYPE_HERE && (!GetWarMap() || GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG))
    	{
    		if (IsHack(false) && !CThreeWayWar::instance().IsSungZiMapIndex(GetMapIndex()))
    			return bTimeToDead - (180 - g_nPortalLimitTime);
    		if (bTimeToDead > 170)
    			return bTimeToDead - 170;
    	}
    
    	if (IsHack(false) && ((!GetWarMap() || GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG) || !CThreeWayWar::instance().IsSungZiMapIndex(GetMapIndex())))
    		return bTimeToDead - (180 - g_nPortalLimitTime);
    
    	if (bTimeToDead > 173)
    		return bTimeToDead - 173;
    
    	return 0;
    }
    #endif
    //>
    
    //<srv:char_battle.cpp
    #ifdef ENABLE_REVIVE_BOARD_RENEWAL
    	TPacketGCDead pack;
    	pack.header = HEADER_GC_DEAD;
    	pack.vid = m_vid;
    	pack.reviveTime[REVIVE_TYPE_HERE] = CalcReviveTimeDelay(REVIVE_TYPE_HERE);
    	pack.reviveTime[REVIVE_TYPE_TOWN] = CalcReviveTimeDelay(REVIVE_TYPE_TOWN);
    	pack.reviveTime[REVIVE_TYPE_AUTO_TOWN] = CalcReviveTimeDelay(REVIVE_TYPE_AUTO_TOWN);
    	PacketAround(&pack, sizeof(pack));
    #endif
    //>
    
    //<srv:char_horse.cpp
    // You can skip it.
    //>
    
    //<client:PythonNetworkStreamPhaseGame.cpp
    			if (false == pkInstMain->GetDuelMode())
    			{
    #ifdef ENABLE_REVIVE_BOARD_RENEWAL
    				PyObject *times = PyTuple_New(REVIVE_TYPE_MAX);
    				PyTuple_SetItem(times, 0, PyInt_FromLong(DeadPacket.reviveTime[REVIVE_TYPE_HERE]));
    				PyTuple_SetItem(times, 1, PyInt_FromLong(DeadPacket.reviveTime[REVIVE_TYPE_TOWN]));
    				PyTuple_SetItem(times, 2, PyInt_FromLong(DeadPacket.reviveTime[REVIVE_TYPE_AUTO_TOWN]));
    				PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnGameOver", Py_BuildValue("(O)", times));
    #else
    				PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnGameOver", Py_BuildValue("()"));
    #endif
    
    //>
    
    //<srv:PythonPlayerModule.cpp
    #ifdef ENABLE_REVIVE_BOARD_RENEWAL
    	PyModule_AddIntConstant(poModule, "REVIVE_TYPE_HERE",		REVIVE_TYPE_HERE);
    	PyModule_AddIntConstant(poModule, "REVIVE_TYPE_TOWN",		REVIVE_TYPE_TOWN);
    	PyModule_AddIntConstant(poModule, "REVIVE_TYPE_AUTO_TOWN",	REVIVE_TYPE_AUTO_TOWN);
    	PyModule_AddIntConstant(poModule, "REVIVE_TYPE_MAX",		REVIVE_TYPE_MAX);
    #endif
    //>
    
    //<root:game.py
    	if app.ENABLE_REVIVE_BOARD_RENEWAL:
    		def OnGameOver(self, times):
    			self.CloseTargetBoard()
    			self.OpenRestartDialog(times)
    
    		def OpenRestartDialog(self, times):
    			self.interface.OpenRestartDialog(times)
    	else:
    		def OnGameOver(self):
    			self.CloseTargetBoard()
    			self.OpenRestartDialog()
    
    		def OpenRestartDialog(self):
    			self.interface.OpenRestartDialog()
    //>
    
    //<root:interfaceModule.py
    	if app.ENABLE_REVIVE_BOARD_RENEWAL:
    		def OpenRestartDialog(self, times):
    			self.dlgRestart.OpenDialog(times)
    			self.dlgRestart.SetTop()
    	else:
    		def OpenRestartDialog(self):
    			self.dlgRestart.OpenDialog()
    			self.dlgRestart.SetTop()
    //>
    
    //<root:localeInfo.py
    def SecondToMS(time):
    	if time < 60:
    		return "%d%s" % (time, SECOND)
    
    	second = int(time % 60)
    	minute = int((time / 60) % 60)
    
    	text = ""
    
    	if minute > 0:
    		text += str(minute) + MINUTE
    		if minute > 0:
    			text += " "
    
    	if second > 0:
    		text += str(second) + SECOND
    
    	return text
    //>
    
    //<locale/locale_game.txt
    REVIVE_AUTO_TOWN_MESSAGE	Autorestart at town in: {}
    //>

     

    You can follow the tutorial from the original post, I have changed some names, you can compare them.

    • Metin2 Dev 9
    • Good 2
    • Love 19
  7. Spoiler
    
             {'name': 'APPLY_ACCEDRAIN_RATE', 'type': 'int', 'value': 97},
             {'name': 'APPLY_ALIGNMENT_DAMAGE_BONUS', 'type': 'int', 'value': 217},
             {'name': 'APPLY_ANTI_CRITICAL_PCT', 'type': 'int', 'value': 90},
             {'name': 'APPLY_ANTI_PENETRATE_PCT', 'type': 'int', 'value': 91},
             {'name': 'APPLY_ATTBONUS_ANIMAL', 'type': 'int', 'value': 18},
             {'name': 'APPLY_ATTBONUS_ASSASSIN', 'type': 'int', 'value': 60},
             {'name': 'APPLY_ATTBONUS_BELL', 'type': 'int', 'value': 111},
             {'name': 'APPLY_ATTBONUS_BOW', 'type': 'int', 'value': 113},
             {'name': 'APPLY_ATTBONUS_CLAW', 'type': 'int', 'value': 114},
             {'name': 'APPLY_ATTBONUS_CZ', 'type': 'int', 'value': 105},
             {'name': 'APPLY_ATTBONUS_DAGGER', 'type': 'int', 'value': 110},
             {'name': 'APPLY_ATTBONUS_DESERT', 'type': 'int', 'value': 107},
             {'name': 'APPLY_ATTBONUS_DEVIL', 'type': 'int', 'value': 22},
             {'name': 'APPLY_ATTBONUS_FAN', 'type': 'int', 'value': 112},
             {'name': 'APPLY_ATTBONUS_HUMAN', 'type': 'int', 'value': 17},
             {'name': 'APPLY_ATTBONUS_INSECT', 'type': 'int', 'value': 106},
             {'name': 'APPLY_ATTBONUS_MILGYO', 'type': 'int', 'value': 20},
             {'name': 'APPLY_ATTBONUS_MONSTER', 'type': 'int', 'value': 63},
             {'name': 'APPLY_ATTBONUS_ORC', 'type': 'int', 'value': 19},
             {'name': 'APPLY_ATTBONUS_SHAMAN', 'type': 'int', 'value': 62},
             {'name': 'APPLY_ATTBONUS_STONE', 'type': 'int', 'value': 214},
             {'name': 'APPLY_ATTBONUS_SURA', 'type': 'int', 'value': 61},
             {'name': 'APPLY_ATTBONUS_SWORD', 'type': 'int', 'value': 108},
             {'name': 'APPLY_ATTBONUS_TWOHAND', 'type': 'int', 'value': 109},
             {'name': 'APPLY_ATTBONUS_UNDEAD', 'type': 'int', 'value': 21},
             {'name': 'APPLY_ATTBONUS_WARRIOR', 'type': 'int', 'value': 59},
             {'name': 'APPLY_ATTBONUS_WOLFMAN', 'type': 'int', 'value': 94},
             {'name': 'APPLY_ATT_GRADE_BONUS', 'type': 'int', 'value': 53},
             {'name': 'APPLY_ATT_SPEED', 'type': 'int', 'value': 7},
             {'name': 'APPLY_BLEEDING_PCT', 'type': 'int', 'value': 93},
             {'name': 'APPLY_BLEEDING_REDUCE', 'type': 'int', 'value': 92},
             {'name': 'APPLY_BLOCK', 'type': 'int', 'value': 27},
             {'name': 'APPLY_BOW_DISTANCE', 'type': 'int', 'value': 52},
             {'name': 'APPLY_CAST_SPEED', 'type': 'int', 'value': 9},
             {'name': 'APPLY_CON', 'type': 'int', 'value': 3},
             {'name': 'APPLY_COSTUME_ATTR_BONUS', 'type': 'int', 'value': 84},
             {'name': 'APPLY_CRITICAL_PCT', 'type': 'int', 'value': 15},
             {'name': 'APPLY_DAMAGE_HP_RECOVERY', 'type': 'int', 'value': 215},
             {'name': 'APPLY_DAMAGE_SP_RECOVER', 'type': 'int', 'value': 26},
             {'name': 'APPLY_DAMAGE_SP_RECOVERY', 'type': 'int', 'value': 216},
             {'name': 'APPLY_DEF_GRADE_BONUS', 'type': 'int', 'value': 54},
             {'name': 'APPLY_DEX', 'type': 'int', 'value': 6},
             {'name': 'APPLY_DODGE', 'type': 'int', 'value': 28},
             {'name': 'APPLY_ENCHANT_DARK', 'type': 'int', 'value': 104},
             {'name': 'APPLY_ENCHANT_EARTH', 'type': 'int', 'value': 103},
             {'name': 'APPLY_ENCHANT_ELECT', 'type': 'int', 'value': 99},
             {'name': 'APPLY_ENCHANT_FIRE', 'type': 'int', 'value': 100},
             {'name': 'APPLY_ENCHANT_ICE', 'type': 'int', 'value': 101},
             {'name': 'APPLY_ENCHANT_WIND', 'type': 'int', 'value': 102},
             {'name': 'APPLY_ENERGY', 'type': 'int', 'value': 82},
             {'name': 'APPLY_EXP_DOUBLE_BONUS', 'type': 'int', 'value': 43},
             {'name': 'APPLY_FIFTH_ATTRIBUTE_BONUS', 'type': 'int', 'value': 227},
             {'name': 'APPLY_FIRST_ATTRIBUTE_BONUS', 'type': 'int', 'value': 223},
             {'name': 'APPLY_FOURTH_ATTRIBUTE_BONUS', 'type': 'int', 'value': 226},
             {'name': 'APPLY_GOLD_DOUBLE_BONUS', 'type': 'int', 'value': 44},
             {'name': 'APPLY_HIT_BUFF_ENCHANT_DARK', 'type': 'int', 'value': 157},
             {'name': 'APPLY_HIT_BUFF_ENCHANT_EARTH', 'type': 'int', 'value': 158},
             {'name': 'APPLY_HIT_BUFF_ENCHANT_ELEC', 'type': 'int', 'value': 155},
             {'name': 'APPLY_HIT_BUFF_ENCHANT_FIRE', 'type': 'int', 'value': 153},
             {'name': 'APPLY_HIT_BUFF_ENCHANT_ICE', 'type': 'int', 'value': 154},
             {'name': 'APPLY_HIT_BUFF_ENCHANT_WIND', 'type': 'int', 'value': 156},
             {'name': 'APPLY_HIT_BUFF_RESIST_DARK', 'type': 'int', 'value': 163},
             {'name': 'APPLY_HIT_BUFF_RESIST_EARTH', 'type': 'int', 'value': 164},
             {'name': 'APPLY_HIT_BUFF_RESIST_ELEC', 'type': 'int', 'value': 161},
             {'name': 'APPLY_HIT_BUFF_RESIST_FIRE', 'type': 'int', 'value': 159},
             {'name': 'APPLY_HIT_BUFF_RESIST_ICE', 'type': 'int', 'value': 160},
             {'name': 'APPLY_HIT_BUFF_RESIST_WIND', 'type': 'int', 'value': 162},
             {'name': 'APPLY_HP_REGEN', 'type': 'int', 'value': 10},
             {'name': 'APPLY_IMMUNE_FALL', 'type': 'int', 'value': 50},
             {'name': 'APPLY_IMMUNE_SLOW', 'type': 'int', 'value': 49},
             {'name': 'APPLY_IMMUNE_STUN', 'type': 'int', 'value': 48},
             {'name': 'APPLY_INT', 'type': 'int', 'value': 4},
             {'name': 'APPLY_ITEM_DROP_BONUS', 'type': 'int', 'value': 45},
             {'name': 'APPLY_KILL_HP_RECOVER', 'type': 'int', 'value': 47},
             {'name': 'APPLY_KILL_SP_RECOVER', 'type': 'int', 'value': 42},
             {'name': 'APPLY_MAGIC_ATTBONUS_PER', 'type': 'int', 'value': 85},
             {'name': 'APPLY_MAGIC_ATT_GRADE', 'type': 'int', 'value': 55},
             {'name': 'APPLY_MAGIC_DEF_GRADE', 'type': 'int', 'value': 56},
             {'name': 'APPLY_MALL_ATTBONUS', 'type': 'int', 'value': 64},
             {'name': 'APPLY_MALL_DEFBONUS', 'type': 'int', 'value': 65},
             {'name': 'APPLY_MALL_EXPBONUS', 'type': 'int', 'value': 66},
             {'name': 'APPLY_MALL_GOLDBONUS', 'type': 'int', 'value': 68},
             {'name': 'APPLY_MALL_ITEMBONUS', 'type': 'int', 'value': 67},
             {'name': 'APPLY_MANA_BURN_PCT', 'type': 'int', 'value': 25},
             {'name': 'APPLY_MAX_HP', 'type': 'int', 'value': 1},
             {'name': 'APPLY_MAX_HP_PCT', 'type': 'int', 'value': 69},
             {'name': 'APPLY_MAX_SP', 'type': 'int', 'value': 2},
             {'name': 'APPLY_MAX_SP_PCT', 'type': 'int', 'value': 70},
             {'name': 'APPLY_MAX_STAMINA', 'type': 'int', 'value': 58},
             {'name': 'APPLY_MELEE_MAGIC_ATTBONUS_PER', 'type': 'int', 'value': 86},
             {'name': 'APPLY_MORE_THEN_HP90_DAMAGE_REDUCE', 'type': 'int', 'value': 219},
             {'name': 'APPLY_MOUNT', 'type': 'int', 'value': 118},
             {'name': 'APPLY_MOV_SPEED', 'type': 'int', 'value': 8},
             {'name': 'APPLY_NONE', 'type': 'int', 'value': 0},
             {'name': 'APPLY_NORMAL_DAMAGE_GUARD', 'type': 'int', 'value': 218},
             {'name': 'APPLY_NORMAL_HIT_DAMAGE_BONUS', 'type': 'int', 'value': 72},
             {'name': 'APPLY_NORMAL_HIT_DAMAGE_BONUS_BOSS_OR_MORE', 'type': 'int', 'value': 151},
             {'name': 'APPLY_NORMAL_HIT_DEFEND_BONUS', 'type': 'int', 'value': 74},
             {'name': 'APPLY_NORMAL_HIT_DEFEND_BONUS_BOSS_OR_MORE', 'type': 'int', 'value': 149},
             {'name': 'APPLY_PC_BANG_DROP_BONUS', 'type': 'int', 'value': 77},
             {'name': 'APPLY_PC_BANG_EXP_BONUS', 'type': 'int', 'value': 76},
             {'name': 'APPLY_PENETRATE_PCT', 'type': 'int', 'value': 16},
             {'name': 'APPLY_POISON_PCT', 'type': 'int', 'value': 12},
             {'name': 'APPLY_POISON_REDUCE', 'type': 'int', 'value': 41},
             {'name': 'APPLY_POTION_BONUS', 'type': 'int', 'value': 46},
             {'name': 'APPLY_REFLECT_CURSE', 'type': 'int', 'value': 40},
             {'name': 'APPLY_REFLECT_MELEE', 'type': 'int', 'value': 39},
             {'name': 'APPLY_RESIST_ASSASSIN', 'type': 'int', 'value': 79},
             {'name': 'APPLY_RESIST_BELL', 'type': 'int', 'value': 32},
             {'name': 'APPLY_RESIST_BOW', 'type': 'int', 'value': 34},
             {'name': 'APPLY_RESIST_CLAW', 'type': 'int', 'value': 96},
             {'name': 'APPLY_RESIST_DAGGER', 'type': 'int', 'value': 31},
             {'name': 'APPLY_RESIST_DARK', 'type': 'int', 'value': 89},
             {'name': 'APPLY_RESIST_EARTH', 'type': 'int', 'value': 88},
             {'name': 'APPLY_RESIST_ELEC', 'type': 'int', 'value': 36},
             {'name': 'APPLY_RESIST_FAN', 'type': 'int', 'value': 33},
             {'name': 'APPLY_RESIST_FIRE', 'type': 'int', 'value': 35},
             {'name': 'APPLY_RESIST_HUMAN', 'type': 'int', 'value': 115},
             {'name': 'APPLY_RESIST_ICE', 'type': 'int', 'value': 87},
             {'name': 'APPLY_RESIST_MAGIC', 'type': 'int', 'value': 37},
             {'name': 'APPLY_RESIST_MAGIC_REDUCTION', 'type': 'int', 'value': 98},
             {'name': 'APPLY_RESIST_MOUNT_FALL', 'type': 'int', 'value': 116},
             {'name': 'APPLY_RESIST_SHAMAN', 'type': 'int', 'value': 81},
             {'name': 'APPLY_RESIST_SURA', 'type': 'int', 'value': 80},
             {'name': 'APPLY_RESIST_SWORD', 'type': 'int', 'value': 29},
             {'name': 'APPLY_RESIST_TWOHAND', 'type': 'int', 'value': 30},
             {'name': 'APPLY_RESIST_WARRIOR', 'type': 'int', 'value': 78},
             {'name': 'APPLY_RESIST_WIND', 'type': 'int', 'value': 38},
             {'name': 'APPLY_RESIST_WOLFMAN', 'type': 'int', 'value': 95},
             {'name': 'APPLY_SECOND_ATTRIBUTE_BONUS', 'type': 'int', 'value': 224},
             {'name': 'APPLY_SKILL', 'type': 'int', 'value': 51},
             {'name': 'APPLY_SKILL_DAMAGE_AMSEOP', 'type': 'int', 'value': 125},
             {'name': 'APPLY_SKILL_DAMAGE_BIPABU', 'type': 'int', 'value': 139},
             {'name': 'APPLY_SKILL_DAMAGE_BONUS', 'type': 'int', 'value': 71},
             {'name': 'APPLY_SKILL_DAMAGE_BONUS_BOSS_OR_MORE', 'type': 'int', 'value': 152},
             {'name': 'APPLY_SKILL_DAMAGE_BYEURAK', 'type': 'int', 'value': 143},
             {'name': 'APPLY_SKILL_DAMAGE_CHAIN', 'type': 'int', 'value': 144},
             {'name': 'APPLY_SKILL_DAMAGE_CHARYUN', 'type': 'int', 'value': 127},
             {'name': 'APPLY_SKILL_DAMAGE_CHAYEOL', 'type': 'int', 'value': 145},
             {'name': 'APPLY_SKILL_DAMAGE_GEOMPUNG', 'type': 'int', 'value': 124},
             {'name': 'APPLY_SKILL_DAMAGE_GIGONGCHAM', 'type': 'int', 'value': 122},
             {'name': 'APPLY_SKILL_DAMAGE_GIGUNG', 'type': 'int', 'value': 131},
             {'name': 'APPLY_SKILL_DAMAGE_GONGDAB', 'type': 'int', 'value': 147},
             {'name': 'APPLY_SKILL_DAMAGE_GUNGSIN', 'type': 'int', 'value': 126},
             {'name': 'APPLY_SKILL_DAMAGE_GYOKSAN', 'type': 'int', 'value': 123},
             {'name': 'APPLY_SKILL_DAMAGE_HWAJO', 'type': 'int', 'value': 132},
             {'name': 'APPLY_SKILL_DAMAGE_HWAYEOMPOK', 'type': 'int', 'value': 137},
             {'name': 'APPLY_SKILL_DAMAGE_KWANKYEOK', 'type': 'int', 'value': 130},
             {'name': 'APPLY_SKILL_DAMAGE_MAHWAN', 'type': 'int', 'value': 138},
             {'name': 'APPLY_SKILL_DAMAGE_MARYUNG', 'type': 'int', 'value': 136},
             {'name': 'APPLY_SKILL_DAMAGE_NOEJEON', 'type': 'int', 'value': 142},
             {'name': 'APPLY_SKILL_DAMAGE_PABEOB', 'type': 'int', 'value': 135},
             {'name': 'APPLY_SKILL_DAMAGE_PAERYONG', 'type': 'int', 'value': 141},
             {'name': 'APPLY_SKILL_DAMAGE_PALBANG', 'type': 'int', 'value': 121},
             {'name': 'APPLY_SKILL_DAMAGE_PASWAE', 'type': 'int', 'value': 148},
             {'name': 'APPLY_SKILL_DAMAGE_SALPOONG', 'type': 'int', 'value': 146},
             {'name': 'APPLY_SKILL_DAMAGE_SAMYEON', 'type': 'int', 'value': 119},
             {'name': 'APPLY_SKILL_DAMAGE_SANGONG', 'type': 'int', 'value': 128},
             {'name': 'APPLY_SKILL_DAMAGE_SWAERYUNG', 'type': 'int', 'value': 133},
             {'name': 'APPLY_SKILL_DAMAGE_TANHWAN', 'type': 'int', 'value': 120},
             {'name': 'APPLY_SKILL_DAMAGE_YEONSA', 'type': 'int', 'value': 129},
             {'name': 'APPLY_SKILL_DAMAGE_YONGBI', 'type': 'int', 'value': 140},
             {'name': 'APPLY_SKILL_DAMAGE_YONGKWON', 'type': 'int', 'value': 134},
             {'name': 'APPLY_SKILL_DEFEND_BONUS', 'type': 'int', 'value': 73},
             {'name': 'APPLY_SKILL_DEFEND_BONUS_BOSS_OR_MORE', 'type': 'int', 'value': 150},
             {'name': 'APPLY_SKILL_DURATION_INCREASE_EUNHYUNG', 'type': 'int', 'value': 182},
             {'name': 'APPLY_SKILL_DURATION_INCREASE_GEOMKYUNG', 'type': 'int', 'value': 184},
             {'name': 'APPLY_SKILL_DURATION_INCREASE_GYEONGGONG', 'type': 'int', 'value': 183},
             {'name': 'APPLY_SKILL_DURATION_INCREASE_JEOKRANG', 'type': 'int', 'value': 185},
             {'name': 'APPLY_SLOW_PCT', 'type': 'int', 'value': 14},
             {'name': 'APPLY_SP_REGEN', 'type': 'int', 'value': 11},
             {'name': 'APPLY_STEAL_HP', 'type': 'int', 'value': 23},
             {'name': 'APPLY_STEAL_SP', 'type': 'int', 'value': 24},
             {'name': 'APPLY_STR', 'type': 'int', 'value': 5},
             {'name': 'APPLY_STUN_PCT', 'type': 'int', 'value': 13},
             {'name': 'APPLY_THIRD_ATTRIBUTE_BONUS', 'type': 'int', 'value': 225},
             {'name': 'APPLY_USE_SKILL_AMSEOP_HP_ABSORB', 'type': 'int', 'value': 187},
             {'name': 'APPLY_USE_SKILL_BIPABU_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 210},
             {'name': 'APPLY_USE_SKILL_BIPABU_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 234},
             {'name': 'APPLY_USE_SKILL_BYEURAK_HP_ABSORB', 'type': 'int', 'value': 222},
             {'name': 'APPLY_USE_SKILL_CHAIN_HP_ABSORB', 'type': 'int', 'value': 190},
             {'name': 'APPLY_USE_SKILL_CHARYUN_STUN', 'type': 'int', 'value': 193},
             {'name': 'APPLY_USE_SKILL_CHAYEOL_CRITICAL_PCT', 'type': 'int', 'value': 167},
             {'name': 'APPLY_USE_SKILL_CHAYEOL_HP_ABSORB', 'type': 'int', 'value': 238},
             {'name': 'APPLY_USE_SKILL_CHEONGRANG_CASTING_SPEED', 'type': 'int', 'value': 166},
             {'name': 'APPLY_USE_SKILL_CHEONGRANG_MOV_SPEED', 'type': 'int', 'value': 165},
             {'name': 'APPLY_USE_SKILL_CHUNKEON_CASTING_SPEED', 'type': 'int', 'value': 180},
             {'name': 'APPLY_USE_SKILL_GEOMPUNG_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 205},
             {'name': 'APPLY_USE_SKILL_GEOMPUNG_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 229},
             {'name': 'APPLY_USE_SKILL_GICHEON_ATT_GRADE_BONUS', 'type': 'int', 'value': 176},
             {'name': 'APPLY_USE_SKILL_GIGONGCHAM_STUN', 'type': 'int', 'value': 192},
             {'name': 'APPLY_USE_SKILL_GIGUNG_ATT_GRADE_BONUS', 'type': 'int', 'value': 169},
             {'name': 'APPLY_USE_SKILL_GIHYEOL_ATT_GRADE_BONUS', 'type': 'int', 'value': 179},
             {'name': 'APPLY_USE_SKILL_GONGDAB_KNOCKBACK', 'type': 'int', 'value': 202},
             {'name': 'APPLY_USE_SKILL_GONGDAB_STUN', 'type': 'int', 'value': 196},
             {'name': 'APPLY_USE_SKILL_GUNGSIN_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 206},
             {'name': 'APPLY_USE_SKILL_GUNGSIN_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 230},
             {'name': 'APPLY_USE_SKILL_GWIGEOM_DEF_BONUS', 'type': 'int', 'value': 171},
             {'name': 'APPLY_USE_SKILL_GYOKSAN_KNOCKBACK', 'type': 'int', 'value': 198},
             {'name': 'APPLY_USE_SKILL_HOSIN_DEF_BONUS', 'type': 'int', 'value': 175},
             {'name': 'APPLY_USE_SKILL_HWAYEOMPOK_KNOCKBACK', 'type': 'int', 'value': 201},
             {'name': 'APPLY_USE_SKILL_JEOKRANG_DEF_BONUS', 'type': 'int', 'value': 170},
             {'name': 'APPLY_USE_SKILL_JEONGEOP_ATT_GRADE_BONUS', 'type': 'int', 'value': 177},
             {'name': 'APPLY_USE_SKILL_JEUNGRYEOK_DEF_BONUS', 'type': 'int', 'value': 178},
             {'name': 'APPLY_USE_SKILL_KWANKYEOK_KNOCKBACK', 'type': 'int', 'value': 203},
             {'name': 'APPLY_USE_SKILL_KWANKYEOK_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 207},
             {'name': 'APPLY_USE_SKILL_KWANKYEOK_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 231},
             {'name': 'APPLY_USE_SKILL_MAHWAN_STUN', 'type': 'int', 'value': 195},
             {'name': 'APPLY_USE_SKILL_MANASHILED_CASTING_SPEED', 'type': 'int', 'value': 174},
             {'name': 'APPLY_USE_SKILL_MARYUNG_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 209},
             {'name': 'APPLY_USE_SKILL_MARYUNG_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 233},
             {'name': 'APPLY_USE_SKILL_MUYEONG_ATT_GRADE_BONUS', 'type': 'int', 'value': 173},
             {'name': 'APPLY_USE_SKILL_NOEGEOM_ATT_GRADE_BONUS', 'type': 'int', 'value': 181},
             {'name': 'APPLY_USE_SKILL_NOEJEON_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 211},
             {'name': 'APPLY_USE_SKILL_NOEJEON_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 235},
             {'name': 'APPLY_USE_SKILL_PABEOB_STUN', 'type': 'int', 'value': 194},
             {'name': 'APPLY_USE_SKILL_PAERYONG_HP_ABSORB', 'type': 'int', 'value': 221},
             {'name': 'APPLY_USE_SKILL_PALBANG_HP_ABSORB', 'type': 'int', 'value': 186},
             {'name': 'APPLY_USE_SKILL_PASWAE_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 213},
             {'name': 'APPLY_USE_SKILL_PASWAE_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 237},
             {'name': 'APPLY_USE_SKILL_PASWAE_SP_ABSORB', 'type': 'int', 'value': 191},
             {'name': 'APPLY_USE_SKILL_SALPOONG_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 212},
             {'name': 'APPLY_USE_SKILL_SALPOONG_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 236},
             {'name': 'APPLY_USE_SKILL_SAMYEON_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 204},
             {'name': 'APPLY_USE_SKILL_SAMYEON_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 228},
             {'name': 'APPLY_USE_SKILL_SAMYEON_STUN', 'type': 'int', 'value': 197},
             {'name': 'APPLY_USE_SKILL_SANGONG_ATT_GRADE_BONUS', 'type': 'int', 'value': 168},
             {'name': 'APPLY_USE_SKILL_SEOMJEON_KNOCKBACK', 'type': 'int', 'value': 199},
             {'name': 'APPLY_USE_SKILL_SWAERYUNG_KNOCKBACK', 'type': 'int', 'value': 200},
             {'name': 'APPLY_USE_SKILL_TERROR_ATT_GRADE_BONUS', 'type': 'int', 'value': 172},
             {'name': 'APPLY_USE_SKILL_TUSOK_HP_ABSORB', 'type': 'int', 'value': 220},
             {'name': 'APPLY_USE_SKILL_YEONSA_HP_ABSORB', 'type': 'int', 'value': 188},
             {'name': 'APPLY_USE_SKILL_YONGBI_HP_ABSORB', 'type': 'int', 'value': 189},
             {'name': 'APPLY_USE_SKILL_YONGKWON_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 208},
             {'name': 'APPLY_USE_SKILL_YONGKWON_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 232},

    Above of 118 they are the new 6/7 bonuses.

     

    • Metin2 Dev 1
    • Love 2
  8. I think that file is a mistake only. Have a look at the attaching code:
     

    Spoiler
    
    char *__thiscall CInstanceBase::SetAura(char *this, int a2)
    {
    	char *result; // eax@1
    	int v3; // ST1C_4@20
    	float v4; // ST18_4@20
    	int v5; // eax@20
    	char *v6; // [sp+10h] [bp-2Ch]@1
    	int v7; // [sp+18h] [bp-24h]@11
    	char v8; // [sp+24h] [bp-18h]@20
    	int v9; // [sp+30h] [bp-Ch]@17
    	int v10; // [sp+34h] [bp-8h]@12
    	char *v11; // [sp+38h] [bp-4h]@7
    
    	v6 = this;
    	result = (char *)CInstanceBase::IsPoly(this);
    	if ( !result )
    	{
    		result = (char *)CInstanceBase::__IsShapeAnimalWear(v6);
    		if ( !(_BYTE)result )
    		{
    			CActorInstance::ChangePart((_DWORD *)v6 + 136, 7, a2);
    			if ( a2 )
    			{
    				if ( CItemManager::GetItemDataPointer(a2, &v11) )
    				{
    					v7 = CInstanceBase::GetRace((int)v6);
    					if ( v7 >= 8 )
    					{
    						if ( v7 == 8 )
    							v10 = 4;
    						else
    							v10 = -1;
    					}
    					else
    					{
    						v10 = v7 % 4;
    					}
    					switch ( CInstanceBase::GetRace((int)v6) )
    					{
    						case 0:
    						case 2:
    						case 5:
    						case 7:
    						case 8:
    							v9 = 1;
    							break;
    						case 1:
    						case 3:
    						case 4:
    						case 6:
    							v9 = 0;
    							break;
    						default:
    							v9 = 0;
    							break;
    					}
    					v3 = CItemData::GetItemPosition(v11, (int)&v8, v10, v9);
    					v4 = CItemData::GetItemScale(v11, v10, v9);
    					v5 = CItemData::GetAuraEffectID((int)v11);
    					*((_DWORD *)v6 + 122) = CActorInstance::AttachEffectByID(
    						v6 + 544,
    						0,
    						(int)"Bip01 Spine2",
    						v5,
    						0,
    						0,
    						0,
    						v4,
    						v3);
    					result = v6;
    					*((_DWORD *)v6 + 20) = a2;
    				}
    				else
    				{
    					if ( *((_DWORD *)v6 + 122) )
    					{
    						CInstanceBase::__DetachEffect(*((_DWORD *)v6 + 122));
    						*((_DWORD *)v6 + 122) = 0;
    					}
    					result = v6;
    					*((_DWORD *)v6 + 20) = 0;
    				}
    			}
    			else
    			{
    				if ( *((_DWORD *)v6 + 122) )
    				{
    					CInstanceBase::__DetachEffect(*((_DWORD *)v6 + 122));
    					*((_DWORD *)v6 + 122) = 0;
    				}
    				result = v6;
    				*((_DWORD *)v6 + 20) = 0;
    			}
    		}
    	}
    	return result;
    }

     

     

    • Metin2 Dev 1
    • Love 6
×
×
  • 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.