Untitled

 avatar
unknown
plain_text
5 months ago
5.4 kB
3
Indexable
Cache.cpp 
replace

void CGrowthPetCache::OnFlush()
{
    char szQuery[QUERY_MAX_LEN];

    if (m_data.dwVnum == 0)
    {
        snprintf(szQuery, sizeof(szQuery), "DELETE FROM growth_pet%s WHERE id=%u", GetTablePostfix(), m_data.dwID);
        CDBManager::instance().ReturnQuery(szQuery, QID_GROWTH_PET_DELETE, 0, NULL);

        if (g_test_server)
            sys_log(0, "CGrowthPetCache::Flush : DELETE %u %s", m_data.dwID, szQuery);
    }
    else
    {
        static char skillBuf[QUERY_MAX_LEN + 1] = {0};

        CDBManager::instance().EscapeString(skillBuf, reinterpret_cast<const char*>(m_data.aSkill), sizeof(m_data.aSkill));

        
        size_t queryLen = snprintf(szQuery, sizeof(szQuery),
            "INSERT INTO growth_pet%s (id, owner_id, vnum, state, name, size, level, level_step, evolution, type, hp, sp, def, hp_apply, sp_apply, def_apply, age_apply, exp, item_exp, birthday, end_time, max_time, skill_level) "
            "VALUES (%u, %u, %u, %u, '%s', %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %d, %d, FROM_UNIXTIME(%u), %u, %u, '%s') "
            "ON DUPLICATE KEY UPDATE "
            "owner_id = %u, vnum = %u, state = %u, name = '%s', size = %u, level = %u, level_step = %u, evolution = %u, type = %u, hp = %u, sp = %u, def = %u, "
            "hp_apply = %u, sp_apply = %u, def_apply = %u, age_apply = %u, exp = %d, item_exp = %d, birthday = FROM_UNIXTIME(%u), end_time = %u, max_time = %u, skill_level = '%s'",
            GetTablePostfix(),
            m_data.dwID,
            m_data.dwOwner,
            m_data.dwVnum,
            m_data.bState,
            m_data.szName,
            m_data.bSize,
            m_data.dwLevel,
            m_data.bLevelStep,
            m_data.bEvolution,
            m_data.bType,
            m_data.dwHP,
            m_data.dwSP,
            m_data.dwDef,
            m_data.dwHPApply,
            m_data.dwSPApply,
            m_data.dwDefApply,
            m_data.dwAgeApply,
            m_data.lExp,
            m_data.lItemExp,
            m_data.lBirthday,
            m_data.lEndTime,
            m_data.lMaxTime,
            skillBuf, 
            m_data.dwOwner,
            m_data.dwVnum,
            m_data.bState,
            m_data.szName,
            m_data.bSize,
            m_data.dwLevel,
            m_data.bLevelStep,
            m_data.bEvolution,
            m_data.bType,
            m_data.dwHP,
            m_data.dwSP,
            m_data.dwDef,
            m_data.dwHPApply,
            m_data.dwSPApply,
            m_data.dwDefApply,
            m_data.dwAgeApply,
            m_data.lExp,
            m_data.lItemExp,
            m_data.lBirthday,
            m_data.lEndTime,
            m_data.lMaxTime,
            skillBuf
        );

        CDBManager::instance().ReturnQuery(szQuery, QID_GROWTH_PET_SAVE, 0, NULL);

        m_bNeedQuery = false;
    }
}
this code new make update Cache

Char_item.cpp
search

ITEM_MANAGER::instance().RemoveItem(item, "REMOVE (BAG-BAG TRANSFER)");

and you find
else
Below this replace the code

                        if (!item->GetSocket(2))
                            return false;
                        
                        LPGROWTH_PET pPet = GetGrowthPet(item->GetSocket(2)); 
                        if (!pPet)
                            return false;
                        
                        time_t currentTime = time(0);
                        DWORD dwBagTime = item->GetSocket(0) - item->GetLimitValue(0);
                        DWORD dwPetAge = currentTime - pPet->GetPetPoint(POINT_UPBRINGING_BIRTHDAY) - (currentTime - dwBagTime);
                        
                        DWORD dwPetDuration = currentTime + pPet->GetPetPoint(POINT_UPBRINGING_MAX_DURATION) + (7 * 24 * 60 * 60);
                        LPITEM pUpBringingItem = AutoGiveItem(pPet->GetSummonItemVnum());

                        TGrowthPet petTable;
                        pPet->CreateGrowthPetProto(&petTable);
                        petTable.dwID = pPet->GetPetID(); 
                        petTable.lBirthday = currentTime - dwPetAge;
                        petTable.lEndTime = dwPetDuration;
                        petTable.bState = STATE_UPBRINGING;  
                        
                        pPet->SetGrowthPetProto(&petTable);
                        
                        pUpBringingItem->SetSocket(0, dwPetDuration);
                        pUpBringingItem->SetSocket(1, petTable.lMaxTime);
                        pUpBringingItem->SetSocket(2, pPet->GetPetID()); 
                        
                        pPet->SetSummonItem(pUpBringingItem);
                        pPet->Save();  
                        
                        SetGrowthPet(pPet);
                        
                        ITEM_MANAGER::instance().RemoveItem(item, "REMOVE (BAG-UPBRINGING TRANSFER)");


                        }
                    } break;
                }


file growth_pet.cpp

search 

LPGROWTH_PET CGrowthPetManager::CreateGrowthPet
change 

LPGROWTH_PET CGrowthPetManager::CreateGrowthPet(LPCHARACTER ch, DWORD dwID)
{
    auto it = m_growthPetGlobalMap.find(dwID);

    if (it != m_growthPetGlobalMap.end())
    {
        sys_log(0, "Using existing growth pet with id %d", dwID);
        return it->second; 
    }

    LPGROWTH_PET pPet = M2_NEW CGrowthPet(ch);

    m_growthPetGlobalMap.emplace(dwID, pPet);

    return pPet;
}


Editor is loading...
Leave a Comment