bool DSManager::DeactivateDragonSoul(LPITEM pItem, bool bSkipRefreshOwnerActiveState) { if (NULL == pItem) return false; LPCHARACTER pOwner = pItem->GetOwner(); if (NULL == pOwner) return false; if (!IsActiveDragonSoul(pItem)) return false; char buf[128]; pItem->StopTimerBasedOnWearExpireEvent(); pItem->SetSocket(ITEM_SOCKET_DRAGON_SOUL_ACTIVE_IDX, 0); pItem->ModifyPoints(false); sprintf (buf, "LEFT TIME(%d)", LeftTime(pItem)); LogManager::instance().ItemLog(pOwner, pItem, "DS_DEACTIVATE", buf); if (false == bSkipRefreshOwnerActiveState) RefreshDragonSoulState(pOwner); return true; }
bool DSManager::ActivateDragonSoul(LPITEM pItem) { if (NULL == pItem) return false; LPCHARACTER pOwner = pItem->GetOwner(); if (NULL == pOwner) return false; int deck_idx = pOwner->DragonSoul_GetActiveDeck(); if (deck_idx < 0) return false; if (INVENTORY_MAX_NUM + WEAR_MAX_NUM + DS_SLOT_MAX * deck_idx <= pItem->GetCell() && pItem->GetCell() < INVENTORY_MAX_NUM + WEAR_MAX_NUM + DS_SLOT_MAX * (deck_idx + 1)) { if (IsTimeLeftDragonSoul(pItem) && !IsActiveDragonSoul(pItem)) { char buf[128]; sprintf (buf, "LEFT TIME(%d)", LeftTime(pItem)); LogManager::instance().ItemLog(pOwner, pItem, "DS_ACTIVATE", buf); pItem->ModifyPoints(true); pItem->SetSocket(ITEM_SOCKET_DRAGON_SOUL_ACTIVE_IDX, 1); pItem->StartTimerBasedOnWearExpireEvent(); } return true; } else return false; }