Jump to content

P1nGu1n

Premium
  • Posts

    53
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by P1nGu1n

  1.  

    Spoiler

    Hello M2Dev :D

    i have one big problem about one crash.

    if somebody know how i can fix this , please say me in pm or reply with skype/discord id for contact :D 

    i pay for this fix (how much you want) . Please , just if you know fix.

    1eb7b3cee674c48fd43d26fe1e29ca67.png

    item_manager.cpp

    void ITEM_MANAGER::DelayedSave(LPITEM item)
    {
    	if (item->GetID() != 0)
    		m_set_pkItemForDelayedSave.insert(item);
    }
    
    void ITEM_MANAGER::FlushDelayedSave(LPITEM item)
    {
    	TR1_NS::unordered_set<LPITEM>::iterator it = m_set_pkItemForDelayedSave.find(item);
    
    	if (it == m_set_pkItemForDelayedSave.end())
    	{
    		return;
    	}
    
    	m_set_pkItemForDelayedSave.erase(it);
    	SaveSingleItem(item);
    }
    
    void ITEM_MANAGER::SaveSingleItem(LPITEM item)
    {
    	if(!item)
    	{	
    		sys_err("item from SaveSingleItem is NULL!!!");
    		//return;
    	}
    	
    	//if(!item->GetID())
    	//	return;
    	
    	if (!item->GetOwner())
    	//if (!item->GetOwner() || !item->GetCount())
    	{
    		DWORD dwID = item->GetID();
    		DWORD dwOwnerID = item->GetLastOwnerPID();
    
    		db_clientdesc->DBPacketHeader(HEADER_GD_ITEM_DESTROY, 0, sizeof(DWORD) + sizeof(DWORD));
    		db_clientdesc->Packet(&dwID, sizeof(DWORD));
    		db_clientdesc->Packet(&dwOwnerID, sizeof(DWORD));
    
    		sys_log(1, "ITEM_DELETE %s:%u", item->GetName(), dwID);
    		return;
    	}
    
    	sys_log(1, "ITEM_SAVE %s:%d in %s window %d", item->GetName(), item->GetID(), item->GetOwner()->GetName(), item->GetWindow());
    	
    	TPlayerItem t;
    
    	t.id = item->GetID();
    	t.window = item->GetWindow();
    	t.pos = t.window == EQUIPMENT ? item->GetCell() - INVENTORY_MAX_NUM : item->GetCell();
    	t.count = item->GetCount();
    	t.vnum = item->GetOriginalVnum();
    
    #ifdef TRANSMUTE_SYSTEM
    	t.look = item->GetLook();
    #endif	
    	t.owner = (t.window == SAFEBOX || t.window == MALL) ? item->GetOwner()->GetDesc()->GetAccountTable().id : item->GetOwner()->GetPlayerID();
    	thecore_memcpy(t.alSockets, item->GetSockets(), sizeof(t.alSockets));
    	thecore_memcpy(t.aAttr, item->GetAttributes(), sizeof(t.aAttr));
    
    	db_clientdesc->DBPacketHeader(HEADER_GD_ITEM_SAVE, 0, sizeof(TPlayerItem));
    	db_clientdesc->Packet(&t, sizeof(TPlayerItem));
    }
    
    void ITEM_MANAGER::Update()
    {
    	TR1_NS::unordered_set<LPITEM>::iterator it = m_set_pkItemForDelayedSave.begin();
    	TR1_NS::unordered_set<LPITEM>::iterator this_it;
    
    	while (it != m_set_pkItemForDelayedSave.end())
    	{
    		this_it = it++;
    		LPITEM item = *this_it;
    
    		// SLOW_QUERY 플래그가 있는 것은 종료시에만 저장한다.
    		if (item->GetOwner() && IS_SET(item->GetFlag(), ITEM_FLAG_SLOW_QUERY))
    			continue;
    
    		SaveSingleItem(item);
    
    		m_set_pkItemForDelayedSave.erase(this_it);
    	}
    }
    
    void ITEM_MANAGER::RemoveItem(LPITEM item, const char * c_pszReason)
    {
    	LPCHARACTER o;
    
    	if ((o = item->GetOwner()))
    	{
    #ifdef __NEW_PET_SYSTEM_SCALING__
    		if(item->GetVnum() >= 53041 && item->GetVnum() <= 53048 && o)
    		{
    			CScalingPetSystem* petsys = o->GetScalingPetSystem();
    			if(petsys->GetScalingPetActor())
    			{
    				petsys->Unsummon();
    			}
    		}
    #endif
    		char szHint[64];
    		snprintf(szHint, sizeof(szHint), "%s %u ", item->GetName(), item->GetCount());
    		LogManager::instance().ItemLog(o, item, c_pszReason ? c_pszReason : "REMOVE", szHint);
    
    		if (item->GetWindow() == MALL || item->GetWindow() == SAFEBOX)
    		{
    			CSafebox* pSafebox = item->GetWindow() == MALL ? o->GetMall() : o->GetSafebox();
    			if (pSafebox)
    			{
    				pSafebox->Remove(item->GetCell());
    			}
    		}
    		else
    		{
    			o->SyncQuickslot(QUICKSLOT_TYPE_ITEM, item->GetCell(), 255);
    			item->RemoveFromCharacter();
    		}
    	}
    
    	M2_DESTROY_ITEM(item);
    }

    item.cpp

    Spoiler


    DWORD CItem::GetCount()
    {
    #ifdef ENABLE_CHEQUE_SYSTEM
        if (GetType() == ITEM_ELK || GetType() == ITEM_CHEQUE) return MIN(m_dwCount, INT_MAX);
    #else
        if (GetType() == ITEM_ELK) return MIN(m_dwCount, INT_MAX);
    #endif    
        else
        {
            return MIN(m_dwCount, 200);
        }
    }

    bool CItem::SetCount(DWORD count)
    {
    #ifdef ENABLE_CHEQUE_SYSTEM
        if (GetType() == ITEM_ELK || GetType() == ITEM_CHEQUE)
    #else
        if (GetType() == ITEM_ELK)
    #endif
        {
            m_dwCount = MIN(count, INT_MAX);
        }
        else
        {
            m_dwCount = MIN(count, ITEM_MAX_COUNT);
        }

        if (count == 0 && m_pOwner)
        {
            if (GetSubType() == USE_ABILITY_UP || GetSubType() == USE_POTION || GetVnum() == 70020)
            {
                LPCHARACTER pOwner = GetOwner();
                WORD wCell = GetCell();

                RemoveFromCharacter();

                if (!IsDragonSoul())
                {
                    LPITEM pItem = pOwner->FindSpecifyItem(GetVnum());

                    if (NULL != pItem)
                    {
                        pOwner->ChainQuickslotItem(pItem, QUICKSLOT_TYPE_ITEM, wCell);
                    }
                    else
                    {
                        pOwner->SyncQuickslot(QUICKSLOT_TYPE_ITEM, wCell, 255);
                    }
                }

                M2_DESTROY_ITEM(this);
            }
            else
            {
                if (!IsDragonSoul())
                {
                    m_pOwner->SyncQuickslot(QUICKSLOT_TYPE_ITEM, m_wCell, 255);
                }
                M2_DESTROY_ITEM(RemoveFromCharacter());
            }

            return false;
        }

        UpdatePacket();

        Save();
        return true;
    }

    db when crash , appear this item...

    2351233e0b6592a85fc24484e4d66b76.png

     

    edit: i don't know when crash or how crash. shop offline from great.

  2. Hello

    I need to buy multi-language system withe the next requirements :to be translated  locale_string and translate.lua 
    example : locale_spanish , locale_english , locale_german and translate_spanish , translate_english , translate_german.lua.
    I need it clean without any kind of bugs 
    I can offer between 100 and 200 euro skrill (or paypal)  for it ,Thanks.

  3. insert in skill_proto and test it 

    INSERT INTO `skill_proto` VALUES ('1', 0xBBEFBFACC2FC, '1', '1', '1', '0', 'HP', '-( 1.1*atk + (0.5*atk +  1.5 * str)*k)', '40+100*k', '', '', '12', '-( 1.4*atk + (0.5*atk +  1.5 * str)*k)', '', 'ATTACK,USE_MELEE_DAMAGE', '', 'NONE', '', '', '', '', '', '', '40+100*k', '0', '0', 'MELEE', '5', '1', '0', '0');
     

  4. 4 hours ago, Vanilla said:

    First it's a decision everyone makes for him- herself. Then: You don't really believe he'd pay 500€ for a fix? Come on, that's just ridiculous. I replied because I liked the idea behind it (of course I don't think he'd really pay at least half of it, no offense meant) and if it is a difficult task, I'd like to give my thoughts about it. For free. I don't know what's the problem about it.

    https://metin2.download/picture/ZpWhEtz064828d97sfrZgPl34S4wBEVw/.png

    https://metin2.download/picture/MsLq3QnQG7yr0w81AocA3Oa1W7TTX68s/.png

    https://metin2.download/picture/7g0cWxh96Y3rEjrFsqPjeOx8zhmfUul4/.png - scammer (Thorico)

    I'm not interested of how much do i pay you, i just want my server to run out of problems. I'm a mature person and i'm keeping my words when i say them. ;)

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