• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

C++ Conditions in items after relog

rafaeru

Active Member
Joined
Mar 6, 2013
Messages
134
Solutions
10
Reaction score
29
Location
Poland
GitHub
rafaeru97
Hello, i have big problem with conditions in items after relog. I use tfs 0.3.6pl1.

For example: When i equip energy ring all works fine i have mana shield but if i do relog they dont come back after.
GIF:
GF2uVJj.gif


Bonus skills in items work fine but only: mana shield, regeneration etc. I think its a source tfs bug but i cant find solution.

player.cpp
C++:
void Player::onCreatureAppear(const Creature* creature)
{
    Creature::onCreatureAppear(creature);
    if(creature != this)
        return;

    Item* item = NULL;
    for(int32_t slot = SLOT_FIRST; slot < SLOT_LAST; ++slot) // I THINK HERE
    {
        if(!(item = getInventoryItem((slots_t)slot)))
            continue;

        item->__startDecaying();
        g_moveEvents->onPlayerEquip(this, item, (slots_t)slot, false);
    }

    if(BedItem* bed = Beds::getInstance()->getBedBySleeper(guid))
        bed->wakeUp();

    Outfit outfit;
    if(Outfits::getInstance()->getOutfit(defaultOutfit.lookType, outfit))
        outfitAttributes = Outfits::getInstance()->addAttributes(getID(), outfit.outfitId, sex, defaultOutfit.lookAddons);

    if(lastLogout && stamina < STAMINA_MAX)
    {
        int64_t ticks = (int64_t)time(NULL) - lastLogout - 600;
        if(ticks > 0)
        {
            ticks = (int64_t)((double)(ticks * 1000) / g_config.getDouble(ConfigManager::RATE_STAMINA_GAIN));
            int64_t premium = g_config.getNumber(ConfigManager::STAMINA_LIMIT_TOP) * STAMINA_MULTIPLIER, period = ticks;
            if((int64_t)stamina <= premium)
            {
                period += stamina;
                if(period > premium)
                    period -= premium;
                else
                    period = 0;

                useStamina(ticks - period);
            }

            if(period > 0)
            {
                ticks = (int64_t)((g_config.getDouble(ConfigManager::RATE_STAMINA_GAIN) * period)
                    / g_config.getDouble(ConfigManager::RATE_STAMINA_THRESHOLD));
                if(stamina + ticks > STAMINA_MAX)
                    ticks = STAMINA_MAX - stamina;

                useStamina(ticks);
            }

            sendStats();
        }
    }

    g_game.checkPlayersRecord(this);
    if(!isGhost())
        IOLoginData::getInstance()->updateOnlineStatus(guid, true);

    #if defined(WINDOWS) && !defined(__CONSOLE__)
    GUI::getInstance()->m_pBox.addPlayer(this);
    #endif
    if(g_config.getBool(ConfigManager::DISPLAY_LOGGING))
        std::cout << name << " has logged in." << std::endl;
}
[code]

movement.cpp
C++:
uint32_t MoveEvents::onPlayerEquip(Player* player, Item* item, slots_t slot, bool isCheck)
{
    if(MoveEvent* moveEvent = getEvent(item, MOVE_EVENT_EQUIP, slot))
        return moveEvent->fireEquip(player, item, slot, isCheck);

    return 1;
}
 
Back
Top