rafaeru
Active Member
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:
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
movement.cpp
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:
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;
}