#include "stdafx.h" #include "char.h" #include "item.h" #include "desc.h" #include "DragonSoul.h" #include "log.h" // ¿ëÈ¥¼® ÃʱâÈ­ // ¿ëÈ¥¼® on/off´Â Affect·Î ÀúÀåµÇ±â ¶§¹®¿¡, // ¿ëÈ¥¼® Affect°¡ ÀÖ´Ù¸é µ¦¿¡ ÀÖ´Â ¿ëÈ¥¼®À» activateÇؾßÇÑ´Ù. // ¶ÇÇÑ ¿ëÈ¥¼® »ç¿ë ÀÚ°ÝÀº QuestFlag·Î ÀúÀåÇØ ³õ¾Ò±â ¶§¹®¿¡, // Äù½ºÆ® Flag¿¡¼­ ¿ëÈ¥¼® »ç¿ë ÀÚ°ÝÀ» Àоî¿Â´Ù. // ij¸¯ÅÍÀÇ affect, quest°¡ load µÇ±â Àü¿¡ DragonSoul_Initialize¸¦ È£ÃâÇÏ¸é ¾ÈµÈ´Ù. // affect°¡ °¡Àå ¸¶Áö¸·¿¡ ·ÎµåµÇ¾î LoadAffect¿¡¼­ È£ÃâÇÔ. void CHARACTER::DragonSoul_Initialize() { for (int i = INVENTORY_MAX_NUM + WEAR_MAX_NUM; i < DRAGON_SOUL_EQUIP_SLOT_END; i++) { LPITEM pItem = GetItem(TItemPos(INVENTORY, i)); if (NULL != pItem) pItem->SetSocket(ITEM_SOCKET_DRAGON_SOUL_ACTIVE_IDX, 0); } if (FindAffect(AFFECT_DRAGON_SOUL_DECK_0)) { DragonSoul_ActivateDeck(DRAGON_SOUL_DECK_0); } else if (FindAffect(AFFECT_DRAGON_SOUL_DECK_1)) { DragonSoul_ActivateDeck(DRAGON_SOUL_DECK_1); } } int CHARACTER::DragonSoul_GetActiveDeck() const { return m_pointsInstant.iDragonSoulActiveDeck; } bool CHARACTER::DragonSoul_IsDeckActivated() const { return m_pointsInstant.iDragonSoulActiveDeck >= 0; } bool CHARACTER::DragonSoul_IsQualified() const { return FindAffect(AFFECT_DRAGON_SOUL_QUALIFIED) != NULL; } void CHARACTER::DragonSoul_GiveQualification() { if(NULL == FindAffect(AFFECT_DRAGON_SOUL_QUALIFIED)) { LogManager::instance().CharLog(this, 0, "DS_QUALIFIED", ""); } AddAffect(AFFECT_DRAGON_SOUL_QUALIFIED, APPLY_NONE, 0, AFF_NONE, INFINITE_AFFECT_DURATION, 0, false, false); //SetQuestFlag("dragon_soul.is_qualified", 1); //// ÀÚ°ÝÀÖ´Ù¸é POINT_DRAGON_SOUL_IS_QUALIFIED´Â ¹«Á¶°Ç 1 //PointChange(POINT_DRAGON_SOUL_IS_QUALIFIED, 1 - GetPoint(POINT_DRAGON_SOUL_IS_QUALIFIED)); } bool CHARACTER::DragonSoul_ActivateDeck(int deck_idx) { if (deck_idx < DRAGON_SOUL_DECK_0 || deck_idx >= DRAGON_SOUL_DECK_MAX_NUM) { return false; } if (DragonSoul_GetActiveDeck() == deck_idx) return true; DragonSoul_DeactivateAll(); if (!DragonSoul_IsQualified()) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¿ëÈ¥¼® »óÀÚ°¡ È°¼ºÈ­µÇÁö ¾Ê¾Ò½À´Ï´Ù.")); return false; } AddAffect(AFFECT_DRAGON_SOUL_DECK_0 + deck_idx, APPLY_NONE, 0, 0, INFINITE_AFFECT_DURATION, 0, false); m_pointsInstant.iDragonSoulActiveDeck = deck_idx; for (int i = DRAGON_SOUL_EQUIP_SLOT_START + DS_SLOT_MAX * deck_idx; i < DRAGON_SOUL_EQUIP_SLOT_START + DS_SLOT_MAX * (deck_idx + 1); i++) { LPITEM pItem = GetInventoryItem(i); if (NULL != pItem) DSManager::instance().ActivateDragonSoul(pItem); } return true; } void CHARACTER::DragonSoul_DeactivateAll() { for (int i = DRAGON_SOUL_EQUIP_SLOT_START; i < DRAGON_SOUL_EQUIP_SLOT_END; i++) { DSManager::instance().DeactivateDragonSoul(GetInventoryItem(i), true); } m_pointsInstant.iDragonSoulActiveDeck = -1; RemoveAffect(AFFECT_DRAGON_SOUL_DECK_0); RemoveAffect(AFFECT_DRAGON_SOUL_DECK_1); } void CHARACTER::DragonSoul_CleanUp() { for (int i = DRAGON_SOUL_EQUIP_SLOT_START; i < DRAGON_SOUL_EQUIP_SLOT_END; i++) { DSManager::instance().DeactivateDragonSoul(GetInventoryItem(i), true); } } bool CHARACTER::DragonSoul_RefineWindow_Open(LPENTITY pEntity) { if (NULL == m_pointsInstant.m_pDragonSoulRefineWindowOpener) { m_pointsInstant.m_pDragonSoulRefineWindowOpener = pEntity; } TPacketGCDragonSoulRefine PDS; PDS.header = HEADER_GC_DRAGON_SOUL_REFINE; PDS.bSubType = DS_SUB_HEADER_OPEN; LPDESC d = GetDesc(); if (NULL == d) { sys_err ("User(%s)'s DESC is NULL POINT.", GetName()); return false; } d->Packet(&PDS, sizeof(PDS)); return true; } bool CHARACTER::DragonSoul_RefineWindow_Close() { m_pointsInstant.m_pDragonSoulRefineWindowOpener = NULL; return true; } bool CHARACTER::DragonSoul_RefineWindow_CanRefine() { return NULL != m_pointsInstant.m_pDragonSoulRefineWindowOpener; }