2022-03-05 12:44:06 +02:00
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
#include "char.h"
|
|
|
|
|
#include "item.h"
|
|
|
|
|
#include "desc.h"
|
|
|
|
|
#include "DragonSoul.h"
|
|
|
|
|
#include "log.h"
|
|
|
|
|
|
|
|
|
|
// <20><>ȥ<EFBFBD><C8A5> <20>ʱ<EFBFBD>ȭ
|
|
|
|
|
// <20><>ȥ<EFBFBD><C8A5> on/off<66><66> Affect<63><74> <20><><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
|
|
|
|
// <20><>ȥ<EFBFBD><C8A5> Affect<63><74> <20>ִٸ<D6B4> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD> activate<74>ؾ<EFBFBD><D8BE>Ѵ<EFBFBD>.
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> <20><>ȥ<EFBFBD><C8A5> <20><><EFBFBD><EFBFBD> <20>ڰ<EFBFBD><DAB0><EFBFBD> QuestFlag<61><67> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ұ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Ʈ Flag<61><67><EFBFBD><EFBFBD> <20><>ȥ<EFBFBD><C8A5> <20><><EFBFBD><EFBFBD> <20>ڰ<EFBFBD><DAB0><EFBFBD> <20>о<EFBFBD><D0BE>´<EFBFBD>.
|
|
|
|
|
|
|
|
|
|
// ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> affect, quest<73><74> load <20>DZ<EFBFBD> <20><><EFBFBD><EFBFBD> DragonSoul_Initialize<7A><65> ȣ<><C8A3><EFBFBD>ϸ<EFBFBD> <20>ȵȴ<C8B5>.
|
|
|
|
|
// affect<63><74> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5>Ǿ<EFBFBD> LoadAffect<63><74><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD>.
|
|
|
|
|
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);
|
|
|
|
|
//// <20>ڰ<EFBFBD><DAB0>ִٸ<D6B4> POINT_DRAGON_SOUL_IS_QUALIFIED<45><44> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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("<EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD> <20><><EFBFBD>ڰ<EFBFBD> Ȱ<><C8B0>ȭ<EFBFBD><C8AD><EFBFBD><EFBFBD> <20>ʾҽ<CABE><D2BD>ϴ<EFBFBD>."));
|
|
|
|
|
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);
|
|
|
|
|
}
|
2022-03-12 11:39:41 +02:00
|
|
|
|
|
|
|
|
|
return true;
|
2022-03-05 12:44:06 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|