- Katılım
- 27 Nis 2017
- Konular
- 91
- Mesajlar
- 2,386
- Çözüm
- 47
- Online süresi
- 17d 3h
- Reaksiyon Skoru
- 1,571
- Altın Konu
- 2
- TM Yaşı
- 9 Yıl 1 Ay 17 Gün
- Başarım Puanı
- 248
- MmoLira
- 439
- DevLira
- 13
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
Merhaba arkadaşlar.
Dün paylaşılan filesten söktüğüm bu sistemi sizlerle paylaşmak istedim.
Eksik kalan yerler olabilir fakat bildirmeniz durumunda tamamlayacağımdan şüpheniz olmasın.
@Player 1
Bir teşekkürü çok görmeyip forumda paylaşım yapan kişileri daha fazla paylaşıma teşvik edebilirsiniz.
[CODE lang="cpp" title="common\CommonDefines.h"]//müsait bir yere ekle;
#define ENABLE_AURA_SYSTEM[/CODE]
[CODE lang="cpp" title="common\item_length.h"]//arat;
enum ECostumeSubTypes
//fonksiyon içindeki sıraya göre ekle;
#ifdef ENABLE_AURA_SYSTEM
COSTUME_AURA = 5,//Buradaki 5'in sıraya göre değişmesi gerekebilir.
#endif
//tekrar arat;
enum EDragonSoulSubType
//fonksiyonun altına ekle;
#ifdef ENABLE_AURA_SYSTEM
enum EAuraInfo
{
AURA_ABSORPTION_SOCKET = 0,
AURA_ABSORBED_SOCKET = 1,
AURA_GRADE_VALUE_FIELD = 2,
AURA_WINDOW_MAX_MATERIALS = 2,
AURA_ICE_RUNIC = 49990,
AURA_MAX_ABS = 250,
AURA_REFINE_PRICE = 25000000,
AURA_GRADE_1_REFINE = 65,
AURA_GRADE_2_REFINE = 60,
AURA_GRADE_3_REFINE = 50,
AURA_GRADE_4_REFINE = 45,
AURA_GRADE_5_REFINE = 35,
AURA_GRADE_6_REFINE = 25,
AURA_TYPE_VALUE_FIELD = 0,
};
#endif
//tekrar arat;
enum EItemWearableFlag
//fonksiyon içindeki sıraya göre ekle;
#ifdef ENABLE_AURA_SYSTEM
WEARABLE_COSTUME_AURA = (1 << 18),//Buradaki 18'in sıraya göre değişmesi gerekebilir.
#endif[/CODE]
[CODE lang="cpp" title="common\length.h"]//arat;
WEAR_COSTUME_WEAPON,
altına ekle;
#ifdef ENABLE_AURA_SYSTEM
WEAR_COSTUME_AURA,
#endif
//tekrar arat;
PART_HAIR,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
PART_AURA,
#endif[/CODE]
[CODE lang="cpp" title="db\src\ProtoReader.cpp"]//arat;
"COSTUME_WEAPON",
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
"COSTUME_AURA",
#endif[/CODE]
[CODE lang="cpp" title="game\src\char.cpp"]//arat;
m_pointsInstant.iDragonSoulActiveDeck = -1;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
m_bAuraRefine = false;
m_bAuraAbsorption = false;
#endif
//tekrar arat;
addPacket.awPart[CHR_EQUIPPART_HAIR] = GetPart(PART_HAIR);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
addPacket.awPart[CHR_EQUIPPART_AURA] = GetPart(PART_AURA);
#endif
//tekrar arat;
pack.awPart[CHR_EQUIPPART_HAIR] = GetPart(PART_HAIR);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
pack.awPart[CHR_EQUIPPART_AURA] = GetPart(PART_AURA);
#endif
//tekrar arat;
SetPart(PART_HAIR, t->parts[PART_HAIR]);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
SetPart(PART_AURA, t->parts[PART_AURA]);
#endif
//tekrar arat;
SetPart(PART_HAIR, GetOriginalPart(PART_HAIR));
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
SetPart(PART_AURA, GetOriginalPart(PART_AURA));
#endif
//tekrar arat; (Opsiyonel: void CHARACTER::OpenMyOfflineShop(const char * c_pszSign, TShopItemTable * pTable, BYTE bItemCount, BYTE bTime))
if (IsDead() || GetExchange() || GetMyShop() || GetOfflineShop() || IsCubeOpen() || IsOpenSafebox() || GetShop())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Make sure you don't have any open windows!"));
return;
}
//altına ekle; (Opsiyonel: void CHARACTER::OpenMyOfflineShop(const char * c_pszSign, TShopItemTable * pTable, BYTE bItemCount, BYTE bTime))
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat;
case PART_HAIR:
return GetPart(PART_HAIR);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
case PART_AURA:
return GetPart(PART_AURA);
#endif
//tekrar arat;
if ((GetExchange() || IsOpenSafebox() || GetShopOwner()) || IsCubeOpen())
{
pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 개인상점을 사용할 수 없습니다."));
return;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat;
if ((pkChrCauser->GetExchange() || pkChrCauser->IsOpenSafebox() || pkChrCauser->GetMyShop() || pkChrCauser->GetShopOwner()) || pkChrCauser->IsCubeOpen())
{
pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 개인상점을 사용할 수 없습니다."));
return;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (pkChrCauser->isAuraOpened(true) || pkChrCauser->isAuraOpened(false))
{
pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat;
if ((GetExchange() || IsOpenSafebox() || IsCubeOpen()))
{
pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 다른 거래를 하고 있는 중입니다."));
return;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
if (bSendMsg)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 다른곳으로 이동,종료 할수 없습니다"));
return true;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
if (bSendMsg)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 다른곳으로 이동,종료 할수 없습니다"));
return true;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || IsOpenSafebox() || IsCubeOpen())
{
if (bSendMsg)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 다른곳으로 이동,종료 할수 없습니다"));
return true;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
if (bSendMsg)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 다른곳으로 이동,종료 할수 없습니다"));
return true;
}
#endif
//dosyanın sonuna ekle;
#ifdef ENABLE_AURA_SYSTEM
void CHARACTER::OpenAura(bool bCombination)
{
if (isAuraOpened(bCombination))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The aura window it's already opened."));
return;
}
if (bCombination)
{
if (m_bAuraAbsorption)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Before you may close the aura absorption window."));
return;
}
m_bAuraRefine = true;
}
else
{
if (m_bAuraRefine)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Before you may close the aura combine window."));
return;
}
m_bAuraAbsorption = true;
}
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_GC_AURA;
sPacket.subheader = AURA_SUBHEADER_GC_OPEN;
sPacket.bWindow = bCombination;
sPacket.dwPrice = 0;
sPacket.bPos = 0;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
GetDesc()->Packet(&sPacket, sizeof(TPacketAura));
ClearAuraMaterials();
}
void CHARACTER::CloseAura()
{
if ((!m_bAuraRefine) && (!m_bAuraAbsorption))
return;
bool bWindow = (m_bAuraRefine == true ? true : false);
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_GC_AURA;
sPacket.subheader = AURA_SUBHEADER_GC_CLOSE;
sPacket.bWindow = bWindow;
sPacket.dwPrice = 0;
sPacket.bPos = 0;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
GetDesc()->Packet(&sPacket, sizeof(TPacketAura));
if (bWindow)
m_bAuraRefine = false;
else
m_bAuraAbsorption = false;
ClearAuraMaterials();
}
void CHARACTER::ClearAuraMaterials()
{
LPITEM* pkItemMaterial;
pkItemMaterial = GetAuraMaterials();
for (int i = 0; i < AURA_WINDOW_MAX_MATERIALS; ++i)
{
if (!pkItemMaterial)
continue;
pkItemMaterial->Lock(false);
pkItemMaterial = nullptr;
}
}
bool CHARACTER::AuraIsSameGrade(long lGrade)
{
LPITEM* pkItemMaterial;
pkItemMaterial = GetAuraMaterials();
if (!pkItemMaterial[0])
return false;
bool bReturn = (pkItemMaterial[0]->GetValue(AURA_GRADE_VALUE_FIELD) == lGrade ? true : false);
return bReturn;
}
DWORD CHARACTER::GetAuraCombinePrice(long lGrade)
{
DWORD dwPrice = AURA_REFINE_PRICE;
return dwPrice;
}
BYTE CHARACTER::CheckAuraEmptyMaterialSlot()
{
LPITEM* pkItemMaterial;
pkItemMaterial = GetAuraMaterials();
for (int i = 0; i < AURA_WINDOW_MAX_MATERIALS; ++i)
{
if (!pkItemMaterial)
return i;
}
return 255;
}
void CHARACTER::GetAuraCombineResult(DWORD & dwItemVnum, DWORD & dwMinAbs, DWORD & dwMaxAbs)
{
LPITEM* pkItemMaterial;
pkItemMaterial = GetAuraMaterials();
if (m_bAuraRefine)
{
if ((pkItemMaterial[0]) && (pkItemMaterial[1]))
{
long lVal = pkItemMaterial[0]->GetValue(AURA_TYPE_VALUE_FIELD);
if (lVal == 6)
{
dwItemVnum = pkItemMaterial[0]->GetOriginalVnum();
}
else
{
DWORD dwMaskVnum = pkItemMaterial[0]->GetOriginalVnum();
TItemTable* pTable = ITEM_MANAGER::instance().GetTable(dwMaskVnum + 1);
if (pTable)
dwMaskVnum += 1;
dwItemVnum = dwMaskVnum;
}
}
else
{
dwItemVnum = 0;
dwMinAbs = 0;
dwMaxAbs = 0;
}
}
else
{
if ((pkItemMaterial[0]) && (pkItemMaterial[1]))
{
dwItemVnum = pkItemMaterial[0]->GetOriginalVnum();
dwMinAbs = pkItemMaterial[0]->GetSocket(AURA_ABSORPTION_SOCKET);
dwMaxAbs = dwMinAbs;
}
else
{
dwItemVnum = 0;
dwMinAbs = 0;
dwMaxAbs = 0;
}
}
}
void CHARACTER::AddAuraMaterial(TItemPos tPos, BYTE bPos)
{
if (bPos >= AURA_WINDOW_MAX_MATERIALS)
{
if (bPos == 255)
{
bPos = CheckEmptyMaterialSlot();
if (bPos >= AURA_WINDOW_MAX_MATERIALS)
return;
}
else
return;
}
LPITEM pkItem = GetItem(tPos);
if (!pkItem)
return;
else if ((pkItem->GetCell() >= INVENTORY_MAX_NUM) || (pkItem->IsEquipped()) || (tPos.IsBeltInventoryPosition()) || (pkItem->IsDragonSoul()))
return;
else if ((pkItem->GetType() != ITEM_COSTUME && pkItem->GetType() != COSTUME_AURA) && (bPos == 0) && (m_bAuraRefine))
return;
else if ((pkItem->GetType() != ITEM_COSTUME && pkItem->GetType() != COSTUME_AURA) && (bPos == 0) && (m_bAuraAbsorption))
return;
else if (pkItem->isLocked())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't add locked items."));
return;
}
#ifdef ENABLE_ITEM_SEALBIND_SYSTEM
else if ((pkItem->IsSealed()))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Aura] You can't add binded items."));
return;
}
#endif
#ifdef ENABLE_BASIC_ITEM_SYSTEM
else if (pkItem->IsBasicItem())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ITEM_IS_BASIC_CANNOT_DO"));
return;
}
#endif
else if ((m_bAuraRefine) && (pkItem->GetSocket(AURA_ABSORPTION_SOCKET) >= AURA_MAX_ABS))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This aura got already maximum absorption chance."));
return;
}
else if ((bPos == 1) && (m_bAuraAbsorption))
{
if ((pkItem->GetType() != ITEM_ARMOR))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura You can absorb just the bonuses from armors and weapons."));
return;
}
else if ((pkItem->GetType() == ITEM_ARMOR) && (pkItem->GetSubType() != ARMOR_SHIELD) && (pkItem->GetSubType() != ARMOR_EAR) && (pkItem->GetSubType() != ARMOR_WRIST) && (pkItem->GetSubType() != ARMOR_NECK))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura You can absorb just the bonuses from armors and weapons."));
return;
}
}
else if ((bPos == 1) && (m_bAuraRefine))
{
if ((pkItem->GetVnum() != AURA_ICE_RUNIC))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura Only Refine Material Ice Runic"));
return;
}
}
else if ((pkItem->GetSubType() != COSTUME_AURA) && (m_bAuraAbsorption))
return;
else if ((pkItem->GetSubType() != COSTUME_AURA) && (bPos == 0) && (m_bAuraAbsorption))
return;
else if ((pkItem->GetSocket(AURA_ABSORBED_SOCKET) > 0) && (bPos == 0) && (m_bAuraAbsorption))
return;
LPITEM * pkItemMaterial;
pkItemMaterial = GetAuraMaterials();
if ((bPos == 1) && (!pkItemMaterial[0]))
return;
if (pkItemMaterial[bPos])
return;
pkItemMaterial[bPos] = pkItem;
pkItemMaterial[bPos]->Lock(true);
DWORD dwItemVnum, dwMinAbs, dwMaxAbs;
GetAuraCombineResult(dwItemVnum, dwMinAbs, dwMaxAbs);
TPacketAura sPacket;
sPacket.header = HEADER_GC_AURA;
sPacket.subheader = AURA_SUBHEADER_GC_ADDED;
sPacket.bWindow = m_bAuraRefine == true ? true : false;
sPacket.dwPrice = GetAuraCombinePrice(pkItem->GetValue(AURA_GRADE_VALUE_FIELD));
sPacket.bPos = bPos;
sPacket.tPos = tPos;
sPacket.dwItemVnum = dwItemVnum;
sPacket.dwMinAbs = dwMinAbs;
sPacket.dwMaxAbs = dwMaxAbs;
GetDesc()->Packet(&sPacket, sizeof(TPacketAura));
}
void CHARACTER::RemoveAuraMaterial(BYTE bPos)
{
if (bPos >= AURA_WINDOW_MAX_MATERIALS)
return;
LPITEM * pkItemMaterial;
pkItemMaterial = GetAuraMaterials();
DWORD dwPrice = 0;
if (bPos == 1)
{
if (pkItemMaterial[bPos])
{
pkItemMaterial[bPos]->Lock(false);
pkItemMaterial[bPos] = nullptr;
}
if (pkItemMaterial[0])
dwPrice = GetAuraCombinePrice(pkItemMaterial[0]->GetValue(AURA_GRADE_VALUE_FIELD));
}
else
ClearAuraMaterials();
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_GC_AURA;
sPacket.subheader = AURA_SUBHEADER_GC_REMOVED;
sPacket.bWindow = m_bAuraRefine == true ? true : false;
sPacket.dwPrice = dwPrice;
sPacket.bPos = bPos;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
GetDesc()->Packet(&sPacket, sizeof(TPacketAura));
}
BYTE CHARACTER::CanRefineAuraMaterials()
{
BYTE bReturn = 0;
LPITEM* pkItemMaterial = GetAuraMaterials();
if (m_bAuraRefine)
{
for (int i = 0; i < AURA_WINDOW_MAX_MATERIALS; ++i)
{
if (pkItemMaterial != nullptr)
{
if ((pkItemMaterial->GetType() == ITEM_COSTUME) && (pkItemMaterial->GetSubType() == COSTUME_AURA))
bReturn = 1;
else if ((pkItemMaterial->GetVnum() == AURA_ICE_RUNIC))
bReturn = 1;
else
{
bReturn = 0;
break;
}
}
else
{
bReturn = 0;
break;
}
}
}
else if (m_bAuraAbsorption)
{
if ((pkItemMaterial[0]) && (pkItemMaterial[1]))
{
if ((pkItemMaterial[0]->GetType() == ITEM_COSTUME) && (pkItemMaterial[0]->GetSubType() == COSTUME_AURA))
bReturn = 2;
else
bReturn = 0;
if ((pkItemMaterial[1]->GetType() == ITEM_ARMOR) && ((pkItemMaterial[1]->GetSubType() == ARMOR_EAR) || (pkItemMaterial[1]->GetSubType() == ARMOR_WRIST) || (pkItemMaterial[1]->GetSubType() == ARMOR_NECK) || (pkItemMaterial[1]->GetSubType() == ARMOR_SHIELD)))
bReturn = 2;
else
bReturn = 0;
if (pkItemMaterial[0]->GetSocket(AURA_ABSORBED_SOCKET) > 0)
bReturn = 0;
}
else
bReturn = 0;
}
return bReturn;
}
void CHARACTER::RefineAuraMaterials()
{
BYTE bCan = CanRefineAuraMaterials();
if (bCan == 0)
return;
LPITEM * pkItemMaterial;
pkItemMaterial = GetAuraMaterials();
if (!pkItemMaterial[0] || !pkItemMaterial[1])
return;
DWORD dwItemVnum, dwMinAbs, dwMaxAbs;
GetAuraCombineResult(dwItemVnum, dwMinAbs, dwMaxAbs);
DWORD dwPrice = AURA_REFINE_PRICE;
if (bCan == 1)
{
int iSuccessChance = 0;
long lVal = pkItemMaterial[0]->GetValue(AURA_TYPE_VALUE_FIELD);
switch (lVal)
{
case 2:
{
iSuccessChance = AURA_GRADE_2_REFINE;
}
break;
case 3:
{
iSuccessChance = AURA_GRADE_3_REFINE;
}
break;
case 4:
{
iSuccessChance = AURA_GRADE_4_REFINE;
}
break;
case 5:
{
iSuccessChance = AURA_GRADE_5_REFINE;
}
break;
case 6:
{
iSuccessChance = AURA_GRADE_6_REFINE;
}
break;
default:
{
iSuccessChance = AURA_GRADE_1_REFINE;
}
break;
}
if (GetGold() < dwPrice)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura You don't have enough Yang."));
return;
}
int iChance = number(1, 100);
bool bSucces = (iChance <= iSuccessChance ? true : false);
if (pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 49 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 99 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 149 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 199 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 249)
bSucces = true;
int oldGradeValue = pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD);
bool bPacket = true;
if (bSucces)
{
if (pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 49 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 99 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 149 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 199 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 249)
{
PointChange(POINT_GOLD, -dwPrice);
pkItemMaterial[0]->SetSocket(AURA_ABSORPTION_SOCKET, pkItemMaterial[0]->GetSocket(AURA_ABSORPTION_SOCKET)+1);
pkItemMaterial[0]->SetSocket(AURA_GRADE_VALUE_FIELD, pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD)+1);
bool bDelete = false;
if (pkItemMaterial[1]->GetCount() - 1 < 1)
bDelete = true;
pkItemMaterial[1]->SetCount(pkItemMaterial[1]->GetCount()-1);
if (bDelete == true)
pkItemMaterial[1] = NULL;
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura Success."));
}
else
{
LPITEM pkItem = ITEM_MANAGER::instance().CreateItem(dwItemVnum, 1, 0, false);
if (!pkItem)
{
sys_err("%d can't be created.", dwItemVnum);
return;
}
ITEM_MANAGER::CopyAllAttrTo(pkItemMaterial[0], pkItem);
LogManager::instance().ItemLog(this, pkItem, "AURA REFINE SUCCESS", pkItem->GetName());
pkItem->SetSocket(AURA_ABSORPTION_SOCKET, pkItem->GetSocket(AURA_ABSORPTION_SOCKET)+1);
pkItem->SetSocket(AURA_ABSORBED_SOCKET, pkItemMaterial[0]->GetSocket(AURA_ABSORBED_SOCKET));
pkItem->SetSocket(AURA_GRADE_VALUE_FIELD, pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD)+1);
PointChange(POINT_GOLD, -dwPrice);
DBManager::instance().SendMoneyLog(MONEY_LOG_REFINE, pkItemMaterial[0]->GetVnum(), -dwPrice);
WORD wCell = pkItemMaterial[0]->GetCell();
ITEM_MANAGER::instance().RemoveItem(pkItemMaterial[0], "AURA (REFINE SUCCESS)");
pkItemMaterial[1]->SetCount(pkItemMaterial[1]->GetCount()-1);
pkItem->AddToCharacter(this, TItemPos(INVENTORY, wCell));
ITEM_MANAGER::instance().FlushDelayedSave(pkItem);
pkItem->AttrLog();
if (lVal == 6)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura New absorption rate: %2f%"), float(pkItem->GetSocket(AURA_ABSORPTION_SOCKET)/10.0f));
else
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura Success."));
ClearAuraMaterials();
bPacket = false;
}
}
else
{
PointChange(POINT_GOLD, -dwPrice);
pkItemMaterial[1]->SetCount(pkItemMaterial[1]->GetCount()-1);
DBManager::instance().SendMoneyLog(MONEY_LOG_REFINE, pkItemMaterial[0]->GetVnum(), -dwPrice);
//ITEM_MANAGER::instance().RemoveItem(pkItemMaterial[1], "COMBINE (REFINE FAIL)");
if (lVal == 6)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura New absorption rate: %d%"), pkItemMaterial[0]->GetSocket(AURA_ABSORPTION_SOCKET));
else
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura Failed."));
if (pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) == 50 || pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) == 100 || pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) == 150 || pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) == 200 || pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) == 250)
ClearAuraMaterials();
bPacket = false;
}
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_GC_AURA;
sPacket.subheader = AURA_SUBHEADER_GC_REFINED;
sPacket.bWindow = m_bAuraRefine == true ? true : false;
sPacket.dwPrice = dwPrice;
if (pkItemMaterial[0])
{
if (bPacket)
if (oldGradeValue != 49 && oldGradeValue != 99 && oldGradeValue != 149 && oldGradeValue != 199 && oldGradeValue != 249)
sPacket.bPos = 255;
else
sPacket.bPos = 0;
else
sPacket.bPos = 0;
}
else
sPacket.bPos = 0;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
if (bSucces)
sPacket.dwMaxAbs = 100;
else
sPacket.dwMaxAbs = 0;
GetDesc()->Packet(&sPacket, sizeof(TPacketAura));
}
else
{
pkItemMaterial[1]->CopyAttributeTo(pkItemMaterial[0]);
LogManager::instance().ItemLog(this, pkItemMaterial[0], "ABSORB (REFINE SUCCESS)", pkItemMaterial[0]->GetName());
pkItemMaterial[0]->SetSocket(AURA_ABSORBED_SOCKET, pkItemMaterial[1]->GetOriginalVnum());
for (int i = 0; i < ITEM_ATTRIBUTE_MAX_NUM; ++i)
{
if (pkItemMaterial[0]->GetAttributeValue(i) < 0)
pkItemMaterial[0]->SetForceAttribute(i, pkItemMaterial[0]->GetAttributeType(i), 0);
}
ITEM_MANAGER::instance().RemoveItem(pkItemMaterial[1], "ABSORBED (REFINE SUCCESS)");
ITEM_MANAGER::instance().FlushDelayedSave(pkItemMaterial[0]);
pkItemMaterial[0]->AttrLog();
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura Success."));
ClearAuraMaterials();
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_GC_AURA;
sPacket.subheader = AURA_SUBHEADER_GC_REFINED;
sPacket.bWindow = m_bAuraRefine == true ? true : false;
sPacket.dwPrice = dwPrice;
sPacket.bPos = 255;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 1;
GetDesc()->Packet(&sPacket, sizeof(TPacketAura));
}
}
bool CHARACTER::CleanAuraAttr(LPITEM pkItem, LPITEM pkTarget)
{
if (!CanHandleItem())
return false;
else if ((!pkItem) || (!pkTarget))
return false;
else if ((pkTarget->GetType() != ITEM_COSTUME) && (pkTarget->GetSubType() != COSTUME_AURA))
return false;
if (pkTarget->GetSocket(AURA_ABSORBED_SOCKET) <= 0)
return false;
pkTarget->SetSocket(AURA_ABSORBED_SOCKET, 0);
for (int i = 0; i < ITEM_ATTRIBUTE_MAX_NUM; ++i)
pkTarget->SetForceAttribute(i, 0, 0);
pkItem->SetCount(pkItem->GetCount() - 1);
LogManager::instance().ItemLog(this, pkTarget, "USE_DETACHMENT (CLEAN ATTR)", pkTarget->GetName());
return true;
}
#endif[/CODE]
[CODE lang="cpp" title="game\src\char.h"]//arat;
LPCHARACTER pCubeNpc;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
LPITEM pAuraMaterials[AURA_WINDOW_MAX_MATERIALS];
#endif
//tekrar arat;
int GetSyncHackCount() { return m_iSyncHackCount; }
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
protected:
bool m_bAuraRefine, m_bAuraAbsorption;
public:
bool isAuraOpened(bool bCombination) { return bCombination ? m_bAuraRefine : m_bAuraAbsorption; }
void OpenAura(bool bCombination);
void CloseAura();
void ClearAuraMaterials();
bool CleanAuraAttr(LPITEM pkItem, LPITEM pkTarget);
LPITEM* GetAuraMaterials() { return m_pointsInstant.pAuraMaterials; }
bool AuraIsSameGrade(long lGrade);
DWORD GetAuraCombinePrice(long lGrade);
void GetAuraCombineResult(DWORD & dwItemVnum, DWORD & dwMinAbs, DWORD & dwMaxAbs);
BYTE CheckAuraEmptyMaterialSlot();
void AddAuraMaterial(TItemPos tPos, BYTE bPos);
void RemoveAuraMaterial(BYTE bPos);
BYTE CanRefineAuraMaterials();
void RefineAuraMaterials();
#endif[/CODE]
[CODE lang="cpp" title="game\src\char_battle.cpp"]//arat;
Cube_close(this);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (IsPC())
CloseAura();
#endif[/CODE]
[CODE lang="cpp" title="game\src\char_item.cpp"]//arat;
if (IsWarping())
return false;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if ((m_bAuraRefine) || (m_bAuraAbsorption))
return false;
#endif
//tekrar arat; (Opsiyonel: bool CHARACTER:
oRefine_Rarity(LPITEM item))
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 귀환부,귀환기억부 를 사용할수 없습니다."));
return false;
}
//altına ekle; (Opsiyonel: bool CHARACTER:
oRefine_Rarity(LPITEM item))
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 귀환부,귀환기억부 를 사용할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 귀환부,귀환기억부 를 사용할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 귀환부,귀환기억부 를 사용할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 귀환부,귀환기억부 를 사용할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 귀환부,귀환기억부 를 사용할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 귀환부,귀환기억부 를 사용할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 보따리,비단보따리를 사용할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat; (Opsiyonel; bool CHARACTER:
eleteItem(TItemPos Cell))
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Make sure you don't have any open windows!"));
return false;
}
//altına ekle; (Opsiyonel; bool CHARACTER:
eleteItem(TItemPos Cell))
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Make sure you don't have any open windows!"));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif[/CODE]
[CODE lang="cpp" title="game\src\cmd_general.cpp"]//arat; (Opsiyonel: ACMD(do_open_range_npc))
if (ch->IsDead() || ch->GetExchange() || ch->GetMyShop() || ch->IsOpenSafebox() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("PLEASE_BEFORE_CLOSE_WINDOW_AND_USE_THIS_FUNCTION"));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_open_range_npc))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("PLEASE_BEFORE_CLOSE_WINDOW_AND_USE_THIS_FUNCTION"));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_bkoku))
if(ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen() || ch->isAcceOpened(true) || ch->isAcceOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 개인상점을 사용할 수 없습니다."));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_bkoku))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_ruhoku))
if(ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen() || ch->isAcceOpened(true) || ch->isAcceOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 개인상점을 사용할 수 없습니다."));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_ruhoku))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_costum_effect))
if (ch->IsDead() || ch->GetExchange() || ch->GetMyShop() || ch->IsOpenSafebox() || ch->IsCubeOpen() || ch->isAcceOpened(true) || ch->isAcceOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Kullanilamaz diger islemlere (depolama, doviz ve dukkanlar) arasinda."));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_costum_effect))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_transfer_gold))
if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Make sure you don't have any open windows!"));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_transfer_gold))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_transfer_cheque))
if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Make sure you don't have any open windows!"));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_transfer_cheque))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_biyolog))
if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 개인상점을 사용할 수 없습니다."));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_biyolog))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_PetEvo))
if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Pet Gelistirme] Pencere Acik."));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_PetEvo))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_use_won_ticket))
if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Make sure you don't have any open windows!"));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_use_won_ticket))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_refine_rarity))
if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen() || ch->GetOfflineShopOwner())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래창이 열린상태에서는 상점거래를 할수 가 없습니다."));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_refine_rarity))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif[/CODE]
[CODE lang="cpp" title="game\src\cmd_gm.cpp"]//arat;
if (ch->GetShop())
strlcat(buf, ", Shop", sizeof(buf));
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true))
strlcat(buf, ", Aura Refine", sizeof(buf));
if (ch->isAuraOpened(false))
strlcat(buf, ", Aura Absorption", sizeof(buf));
#endif[/CODE]
[CODE lang="cpp" title="game\src\cube.cpp"]//arat;
if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif[/CODE]
[CODE lang="cpp" title="game\src\exchange.cpp"]//arat;
if (IsOpenSafebox() || GetShopOwner() || GetMyShop() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래창이 열려있을경우 거래를 할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (victim->IsOpenSafebox() || victim->GetShopOwner() || victim->GetMyShop() || victim->IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 다른 거래중이라 거래를 할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (victim->isAuraOpened(true) || victim->isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif[/CODE]
[CODE lang="cpp" title="game\src\input.h"]//arat;
void Refine(LPCHARACTER ch, const char* c_pData);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
void Aura(LPCHARACTER pkChar, const char* c_pData);
#endif[/CODE]
[CODE lang="cpp" title="game\src\input_db.cpp"]//arat;
if (ch->GetShopOwner() || ch->GetExchange() || ch->GetMyShop() || ch->IsCubeOpen())
{
d->GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른거래창이 열린상태에서는 창고를 열수가 없습니다."));
d->GetCharacter()->CancelSafeboxLoad();
return;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
d->GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
d->GetCharacter()->CancelSafeboxLoad();
return;
}
#endif[/CODE]
[CODE lang="cpp" title="game\src\input_main.cpp"]//arat;
if (ch->GetMyShop() || ch->IsOpenSafebox() || ch->GetShopOwner() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중일경우 개인상점을 열수가 없습니다."));
return;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat;
if (ch->GetExchange() || ch->IsOpenSafebox() || ch->GetShopOwner() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중일경우 개인상점을 열수가 없습니다."));
return (iExtraLen);
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return (iExtraLen);
}
#endif
//tekrar arat; (Opsiyonel: int CInputMain::MyOfflineShop(LPCHARACTER ch, const char * c_pData, size_t uiBytes))
if (ch->GetExchange() || ch->IsOpenSafebox() || ch->GetShopOwner() || ch->IsCubeOpen() || ch->GetOfflineShopOwner())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("?? ?????? ????? ??? ????."));
return (iExtraLen);
}
//altına ekle; (Opsiyonel: int CInputMain::MyOfflineShop(LPCHARACTER ch, const char * c_pData, size_t uiBytes))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return (iExtraLen);
}
#endif
//tekrar arat;
if (ch->GetExchange() || ch->IsOpenSafebox() || ch->GetShopOwner() || ch->GetMyShop() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("창고,거래창등이 열린 상태에서는 개량을 할수가 없습니다"));
ch->ClearRefineMode();
return;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
ch->ClearRefineMode();
return;
}
#endif
//tekrar arat;
void CInputMain::Refine(LPCHARACTER ch, const char* c_pData)
//fonksiyonun altına ekle;
#ifdef ENABLE_AURA_SYSTEM
void CInputMain::Aura(LPCHARACTER pkChar, const char* c_pData)
{
quest:
C* pPC = quest::CQuestManager::instance().GetPCForce(pkChar->GetPlayerID());
if (pPC->IsRunning())
return;
TPacketAura* sPacket = (TPacketAura*)c_pData;
switch (sPacket->subheader)
{
case AURA_SUBHEADER_CG_CLOSE:
{
pkChar->CloseAura();
}
break;
case AURA_SUBHEADER_CG_ADD:
{
pkChar->AddAuraMaterial(sPacket->tPos, sPacket->bPos);
}
break;
case AURA_SUBHEADER_CG_REMOVE:
{
pkChar->RemoveAuraMaterial(sPacket->bPos);
}
break;
case AURA_SUBHEADER_CG_REFINE:
{
pkChar->RefineAuraMaterials();
}
break;
default:
break;
}
}
#endif
//tekrar arat; (Opsiyonel: void CInputMain::ShopSearch(LPCHARACTER ch, const char * data, bool bName))
if (ch->IsOpenSafebox() || ch->GetShop() || ch->IsCubeOpen() || ch->IsDead() || ch->GetExchange() || ch->GetMyShop())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("CANT_DO_THIS_BECAUSE_OTHER_WINDOW_OPEN"));
return;
}
//altına ekle; (Opsiyonel: void CInputMain::ShopSearch(LPCHARACTER ch, const char * data, bool bName))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: void CInputMain::ShopSearchBuy(LPCHARACTER ch, const char * data))
if (ch->IsOpenSafebox() || ch->GetShop() || ch->IsCubeOpen() || ch->IsDead() || ch->GetExchange() || ch->GetMyShop())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("CANT_DO_THIS_BECAUSE_OTHER_WINDOW_OPEN"));
return;
}
//altına ekle; (Opsiyonel: void CInputMain::ShopSearchBuy(LPCHARACTER ch, const char * data))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat;
}
return (iExtraLen);
}
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
case HEADER_CG_AURA:
Aura(ch, c_pData);
break;
#endif[/CODE]
[CODE lang="cpp" title="game\src\item.cpp"]//arat;
if (ch->GetDesc())
m_dwLastOwnerPID = ch->GetPlayerID();
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if ((GetType() == ITEM_COSTUME && GetSubType() == COSTUME_AURA) && (GetSocket(AURA_ABSORPTION_SOCKET) == 0))
{
long lVal = GetValue(AURA_GRADE_VALUE_FIELD);
if (lVal < 1)
{
SetSocket(AURA_GRADE_VALUE_FIELD, 1);
SetSocket(AURA_ABSORPTION_SOCKET, 1);
}
else
SetSocket(AURA_ABSORPTION_SOCKET, lVal);
}
#endif
//tekrar arat;
else if (GetSubType() == COSTUME_HAIR)
return WEAR_COSTUME_HAIR;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
else if (GetSubType() == COSTUME_AURA)
return WEAR_COSTUME_AURA;
#endif
//tekrar arat;
if (false == IsAccessoryForSocket())
{
[...]
}
else
{
[...]
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if ((GetType() == ITEM_COSTUME) && (GetSubType() == COSTUME_AURA) && (GetSocket(AURA_ABSORBED_SOCKET)))
{
TItemTable* pkItemAbsorbed = ITEM_MANAGER::instance().GetTable(GetSocket(AURA_ABSORBED_SOCKET));
if (pkItemAbsorbed)
{
if ((pkItemAbsorbed->bType == ITEM_ARMOR) && ((pkItemAbsorbed->bSubType == ARMOR_SHIELD) || (pkItemAbsorbed->bSubType == ARMOR_HEAD)))
{
long lDefGrade = pkItemAbsorbed->alValues[1] + long(pkItemAbsorbed->alValues[5] * 2);
double dValue = lDefGrade * (GetSocket(AURA_ABSORPTION_SOCKET));
dValue = (double)dValue / 100;
dValue = (double)dValue + .5;
lDefGrade = (long)dValue;
if (((pkItemAbsorbed->alValues[1] > 0) && (lDefGrade <= 0)) || ((pkItemAbsorbed->alValues[5] > 0) && (lDefGrade < 1)))
lDefGrade += 1;
else if ((pkItemAbsorbed->alValues[1] > 0) || (pkItemAbsorbed->alValues[5] > 0))
lDefGrade += 1;
m_pOwner->ApplyPoint(APPLY_DEF_GRADE_BONUS, bAdd ? lDefGrade : -lDefGrade);
long lDefMagicBonus = pkItemAbsorbed->alValues[0];
dValue = lDefMagicBonus * (GetSocket(AURA_ABSORPTION_SOCKET));
dValue = (double)dValue / 100;
dValue = (double)dValue + .5;
lDefMagicBonus = (long)dValue;
if ((pkItemAbsorbed->alValues[0] > 0) && (lDefMagicBonus < 1))
lDefMagicBonus += 1;
else if (pkItemAbsorbed->alValues[0] > 0)
lDefMagicBonus += 1;
m_pOwner->ApplyPoint(APPLY_MAGIC_DEF_GRADE, bAdd ? lDefMagicBonus : -lDefMagicBonus);
}
}
}
#endif
//tekrar arat;
if (m_pProto->aApplies.bType == APPLY_NONE)
//değiştir;
#ifdef ENABLE_AURA_SYSTEM
if ((m_pProto->aApplies.bType == APPLY_NONE) && (GetSubType() != COSTUME_AURA))
#else
if (m_pProto->aApplies.bType == APPLY_NONE)
#endif
//tekrar arat;
long value = m_pProto->aApplies.lValue;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if ((GetType() == ITEM_COSTUME) && (GetSubType() == COSTUME_AURA))
{
TItemTable* pkItemAbsorbed = ITEM_MANAGER::instance().GetTable(GetSocket(AURA_ABSORBED_SOCKET));
if (pkItemAbsorbed)
{
if (pkItemAbsorbed->aApplies.bType == APPLY_NONE)
continue;
value = pkItemAbsorbed->aApplies.lValue;
if (value < 0)
continue;
double dValue = value * (GetSocket(AURA_ABSORPTION_SOCKET));
dValue = (double)dValue / 100;
dValue = (double)dValue + .5;
dValue = (double)dValue / 10;
value = (long)dValue;
if ((pkItemAbsorbed->aApplies.lValue > 0) && (value <= 0))
value += 1;
}
else
continue;
}
#endif
//tekrar arat;
if (ia.bType == APPLY_SKILL)
m_pOwner->ApplyPoint(ia.bType, bAdd ? ia.sValue : ia.sValue ^ 0x00800000);
else
m_pOwner->ApplyPoint(ia.bType, bAdd ? ia.sValue : -ia.sValue);
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
if ((GetType() == ITEM_COSTUME) && (GetSubType() == COSTUME_AURA))
{
double dValue = sValue * GetSocket(AURA_ABSORPTION_SOCKET);
dValue = (double)dValue / 100;
dValue = (double)dValue / 10;
dValue = (double)dValue + .5;
sValue = (long) dValue;
if ((ia.sValue > 0) && (sValue <= 0))
sValue += 1;
}
#endif
//tekrar arat;
if (false == bAdd)
{
const CItem* pArmor = m_pOwner->GetWear(WEAR_BODY);
toSetValue = (NULL != pArmor) ? pArmor->GetVnum() : m_pOwner->GetOriginalPart(PART_MAIN);
}
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
else if (GetSubType() == COSTUME_AURA)
{
toSetValue = (bAdd == true) ? toSetValue : 0;
toSetPart = PART_AURA;
}
#endif[/CODE]
[CODE lang="cpp" title="Opsiyonel: game\src\offlineshop.cpp"]//arat;
if (ch->GetExchange() || ch->GetShop() || ch->GetMyShop() || ch->GetOfflineShop())
return false;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
return false;
#endif[/CODE]
[CODE lang="cpp" title="Opsiyonel: game\src\offlineshop_manager.cpp"]//arat;
if (ch->IsDead() || ch->GetExchange() || ch->GetMyShop() || ch->GetOfflineShop() || ch->IsCubeOpen() || ch->IsOpenSafebox() || ch->GetShop())
return false;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
return false;
#endif[/CODE]
[CODE lang="cpp" title="game\src\packet.h"]//arat;
HEADER_CG_ITEM_GIVE = 83,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
HEADER_CG_AURA = 84,//Buradaki 84'ün değişmesi gerekebilir.
#endif
//tekrar arat;
HEADER_GC_AUTH_SUCCESS_OPENID = 154,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
HEADER_GC_AURA = 156,//Buradaki 156'nın değişmesi gerekebilir.
#endif
//tekrar arat;
CHR_EQUIPPART_HAIR,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
CHR_EQUIPPART_AURA,
#endif
//tekrar arat;
typedef struct SPacketGCStateCheck
//fonksiyonun altına ekle;
#ifdef ENABLE_AURA_SYSTEM
enum
{
AURA_SUBHEADER_GC_OPEN = 0,
AURA_SUBHEADER_GC_CLOSE,
AURA_SUBHEADER_GC_ADDED,
AURA_SUBHEADER_GC_REMOVED,
AURA_SUBHEADER_GC_REFINED,
AURA_SUBHEADER_CG_CLOSE = 0,
AURA_SUBHEADER_CG_ADD,
AURA_SUBHEADER_CG_REMOVE,
AURA_SUBHEADER_CG_REFINE,
};
typedef struct SPacketAura
{
BYTE header;
BYTE subheader;
bool bWindow;
DWORD dwPrice;
BYTE bPos;
TItemPos tPos;
DWORD dwItemVnum;
DWORD dwMinAbs;
DWORD dwMaxAbs;
} TPacketAura;
#endif[/CODE]
[CODE lang="cpp" title="game\src\packet_info.cpp"]//arat;
Set(HEADER_CG_STATE_CHECKER, sizeof(BYTE), "ServerStateCheck", false);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
Set(HEADER_CG_AURA, sizeof(TPacketAura), "Aura", false);
#endif[/CODE]
[CODE lang="cpp" title="game\src\questlua_pc.cpp"]//arat;
lua_pushboolean(L, (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen()));
//değiştir;
lua_pushboolean(L, (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen() || ch->isAuraOpened(true) || ch->isAuraOpened(false)));
//tekrar arat;
lua_pushboolean(L, (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen()));
//değiştir;
lua_pushboolean(L, (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen() || ch->isAuraOpened(true) || ch->isAuraOpened(false)));
//tekrar arat;
if (ch->IsOpenSafebox() || ch->GetExchange() || ch->GetMyShop() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래창이 열린상태에서는 상점거래를 할수 가 없습니다."));
return 0;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("CANT_DO_THIS_BECAUSE_OTHER_WINDOW_OPEN"));
return 0;
}
#endif
//tekrar arat;
void RegisterPCFunctionTable()
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
ALUA(pc_open_aura)
{
if (lua_isboolean(L, 1))
{
CQuestManager& qMgr = CQuestManager::instance();
LPCHARACTER pkChar = qMgr.GetCurrentCharacterPtr();
if (pkChar)
pkChar->OpenAura(lua_toboolean(L, 1));
}
else
sys_err("Invalid argument: arg1 must be boolean.");
return 0;
}
#endif
//tekrar arat;
{ "set_dx", pc_set_dx },
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
{"open_aura", pc_open_aura},
#endif[/CODE]
[CODE lang="cpp" title="game\src\shop_manager.cpp"]//arat;
if (pkChr->IsOpenSafebox() || pkChr->GetExchange() || pkChr->GetMyShop() || pkChr->IsCubeOpen())
{
pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래창이 열린상태에서는 상점거래를 할수 가 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (pkChr->isAuraOpened(true) || pkChr->isAuraOpened(false))
{
pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif[/CODE]
[CODE lang="cpp" title="GameLib\ActorInstance.h"]//arat;
void SetHair(DWORD eHair);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
void AttachAura(CItemData * pItemData);
#endif[/CODE]
[CODE lang="cpp" title="GameLib\ActorInstanceAttach.cpp"]//arat;
void CActorInstance::__ClearAttachingEffect()
//fonksiyonun altına ekle;
#ifdef ENABLE_AURA_SYSTEM
void CActorInstance::AttachAura(CItemData * pItemData)
{
if (!pItemData)
{
RegisterModelThing(CRaceData:
ART_AURA, nullptr);
SetModelInstance(CRaceData:
ART_AURA, CRaceData:
ART_AURA, 0);
RefreshActorInstance();
return;
}
RegisterModelThing(CRaceData:
ART_AURA, pItemData->GetModelThing());
SetModelInstance(CRaceData:
ART_AURA, CRaceData:
ART_AURA, 0);
AttachModelInstance(CRaceData:
ART_MAIN, "Bip01 Spine2", CRaceData:
ART_AURA);
}
#endif[/CODE]
[CODE lang="cpp" title="GameLib\ItemData.cpp"]//include'lerin olduğu bölüme yoksa ekle;
#ifdef ENABLE_AURA_SYSTEM
#include "../EffectLib/EffectManager.h"
#endif
//arat;
BOOL CItemData::IsEquipment() const
//fonksiyonun altına ekle;
#ifdef ENABLE_AURA_SYSTEM
void CItemData::SetAuraEffectID(const char* szAuraEffectPath)
{
if (szAuraEffectPath)
CEffectManager::Instance().RegisterEffect2(szAuraEffectPath, &m_dwAuraEffectID);
}
#endif
//tekrar arat;
memset(&m_ItemTable, 0, sizeof(m_ItemTable));
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
m_dwAuraEffectID = 0;
#endif[/CODE]
[CODE lang="cpp" title="GameLib\ItemData.h"]//arat;
enum ECostumeSubTypes
//fonksiyon içindeki sıraya göre ekle;
#ifdef ENABLE_AURA_SYSTEM
COSTUME_AURA = 5,//Buradaki 5'in sıraya göre değişmesi gerekebilir.
#endif
//tekrar arat;
WEAR_ABILITY8,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
WEAR_COSTUME_AURA,
#endif
//tekrar arat;
enum EItemWearableFlag
//fonksiyonun içindeki sıraya göre ekle;
#ifdef ENABLE_AURA_SYSTEM
WEARABLE_COSTUME_AURA = (1 << 18),//Buradaki 18'in sıraya göre değişmesi gerekebilir.
#endif
//tekrar arat;
void SetItemTableData(TItemTable * pItemTable);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
protected:
DWORD m_dwAuraEffectID;
public:
void SetAuraEffectID(const char* szAuraEffectPath);
DWORD GetAuraEffectID() const { return m_dwAuraEffectID; }
enum EAuraMisc
{
AURA_GRADE_MAX_NUM = 6,
};
#endif[/CODE]
[CODE lang="cpp" title="GameLib\ItemManager.cpp"]//arat;
const std::string & c_rstrModelFileName = TokenVector[3];
pItemData->SetDefaultItemData(c_rstrIcon.c_str(), c_rstrModelFileName.c_str());
//değiştir;
#ifdef ENABLE_AURA_SYSTEM
if (!strcmp(c_rstrType.c_str(), "AURA"))
{
const std::string& c_rstrAuraEffectFileName = TokenVector[3];
pItemData->SetAuraEffectID(c_rstrAuraEffectFileName.c_str());
pItemData->SetDefaultItemData(c_rstrIcon.c_str());
}
else
{
const std::string & c_rstrModelFileName = TokenVector[3];
pItemData->SetDefaultItemData(c_rstrIcon.c_str(), c_rstrModelFileName.c_str());
}
#else
const std::string & c_rstrModelFileName = TokenVector[3];
pItemData->SetDefaultItemData(c_rstrIcon.c_str(), c_rstrModelFileName.c_str());
#endif[/CODE]
[CODE lang="cpp" title="GameLib\RaceData.h"]//arat;
PART_HAIR,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
PART_AURA,
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\GameType.h"]//arat;
const DWORD c_New_Equipment_Start = c_Equipment_Start + 24;//Buradaki 24 sayısı dosyana göre değişebilir.
//değiştir;
#ifdef ENABLE_AURA_SYSTEM
const DWORD c_New_Equipment_Start = c_Equipment_Start + 25;//Buradaki 25 sayısını dosyana göre artırman ya da azaltman gerekebilir. Değiştiğin sayının 1 üstünü yap.
#else
const DWORD c_New_Equipment_Start = c_Equipment_Start + 24;//Buradaki 24 sayısı dosyana göre değişebilir.
#endif
//tekrar arat;
const DWORD c_Costume_Slot_Acce = c_Costume_Slot_Start + 4;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
const DWORD c_Costume_Slot_Aura = c_Costume_Slot_Start + 5;//Bu 5 rakamını fonksiyon içindeki sıraya göre değiştirmen gerekebilir. Gördüğün kısımdaki son rakamın 1 üstünü yaz.
#endif
//tekrar arat;
const DWORD c_Costume_Slot_Count = 5;//Buradaki 5 rakamı dosyana göre değişkenlik gösterebilir.
//değiştir;
#ifdef ENABLE_AURA_SYSTEM
const DWORD c_Costume_Slot_Count = 6;//Buradaki 6 rakamını değiştirdiğin rakamın 1 üstüyle değiştirmen gerekir.
#else
const DWORD c_Costume_Slot_Count = 5;//Buradaki 5 rakamı dosyana göre değişkenlik gösterebilir.
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\InstanceBase.cpp"]//arat;
SetHair(c_rkCreateData.m_dwHair);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
SetAura(c_rkCreateData.m_dwAura);
#endif
//tekrar arat;
void CInstanceBase::SetArmor(DWORD dwArmor)
//fonksiyonun altına ekle;
#ifdef ENABLE_AURA_SYSTEM
bool CInstanceBase::SetAura(DWORD eAura)
{
if (!IsPC() || IsPoly() || __IsShapeAnimalWear())
return false;
//m_GraphicThingInstance.ChangePart(CRaceData:
ART_AURA, eAura);
if (!eAura)
{
if (m_auraRefineEffect)
{
__DetachEffect(m_auraRefineEffect);
m_auraRefineEffect = 0;
}
m_awPart[CRaceData:
ART_AURA] = 0;
return true;
}
CItemData* pItemData;
if (!CItemManager::Instance().GetItemDataPointer(eAura, &pItemData))
{
if (m_auraRefineEffect)
{
__DetachEffect(m_auraRefineEffect);
m_auraRefineEffect = 0;
}
m_awPart[CRaceData:
ART_AURA] = 0;
return true;
}
ClearAuraEffect();
BYTE byRace = (BYTE)GetRace();
BYTE byJob = (BYTE)RaceToJob(byRace);
BYTE bySex = (BYTE)RaceToSex(byRace);
byJob += 1;
if (bySex == 0)
byJob += 5;
//m_GraphicThingInstance.AttachAura(pItemData);
float fScaleX, fScaleY, fScaleZ, fPositionX, fPositionY, fPositionZ;
if (pItemData->GetItemScale(byJob, fScaleX, fScaleY, fScaleZ, fPositionX, fPositionY, fPositionZ))
{
if (m_kHorse.IsMounting() && byJob != NRaceData::JOB_WOLFMAN)
fPositionZ += 15.0f;
// D3DXVECTOR3 * sendPosition;
// sendPosition->x = fPositionX;
// sendPosition->y = fPositionY;
// sendPosition->z = fPositionZ;
m_auraRefineEffect = m_GraphicThingInstance.AttachEffectByID(NULL, "Bip01 Spine2", pItemData->GetAuraEffectID(), NULL);
m_awPart[CRaceData:
ART_AURA] = eAura;
//__EffectContainer_AttachEffect(m_auraRefineEffect);
}
return true;
}
void CInstanceBase::ChangeAura(DWORD eAura)
{
if (!IsPC())
return;
SetAura(eAura);
}
void CInstanceBase::ClearAuraEffect()
{
if (!m_auraRefineEffect)
return;
__DetachEffect(m_auraRefineEffect);
m_auraRefineEffect = 0;
}
#endif
//tekrar arat;
DWORD eHair = GetPart(CRaceData:
ART_HAIR);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
DWORD eAura = GetPart(CRaceData:
ART_AURA);
#endif
//tekrar arat;
SetHair(eHair);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
SetAura(eAura);
#endif
//tekrar arat;
m_armorRefineEffect = 0;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
m_auraRefineEffect = 0;
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\InstanceBase.h"]//arat;
bool m_isMain;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
DWORD m_dwAura;
#endif
//tekrar arat;
AFFECT_NUM = 64,
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
AFFECT_AURA1,
AFFECT_AURA2,
AFFECT_AURA3,
AFFECT_AURA4,
AFFECT_AURA5,
AFFECT_AURA6,
#endif
//tekrar arat;
void SetHair(DWORD eHair);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
bool SetAura(DWORD eAura);
void ChangeAura(DWORD eAura);
#endif
//tekrar arat;
void __ClearArmorRefineEffect();
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
void ClearAuraEffect();
#endif
//tekrar arat;
DWORD m_armorRefineEffect;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
DWORD m_auraRefineEffect;
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\Locale_inc.h"]//müsait bir yere ekle;
#define ENABLE_AURA_SYSTEM[/CODE]
[CODE lang="cpp" title="UserInterface\NetworkActorManager.cpp"]//arat;
m_dwHair = src.m_dwHair;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
m_dwAura = src.m_dwAura;
#endif
//tekrar arat;
m_dwHair=0;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
m_dwAura = 0;
#endif
//tekrar arat;
kCreateData.m_dwHair=rkNetActorData.m_dwHair;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
kCreateData.m_dwAura = rkNetActorData.m_dwAura;
#endif
//tekrar arat;
pkInstFind->ChangeGuild(c_rkNetUpdateActorData.m_dwGuildID);
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
pkInstFind->ChangeAura(c_rkNetUpdateActorData.m_dwAura);
#endif
//tekrar arat;
rkNetActorData.m_dwHair=c_rkNetUpdateActorData.m_dwHair;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
rkNetActorData.m_dwAura = c_rkNetUpdateActorData.m_dwAura;
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\NetworkActorManager.h"]//arat;
DWORD m_dwHair;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
DWORD m_dwAura;
#endif
//tekrar arat;
DWORD m_dwHair;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
DWORD m_dwAura;
#endif
//tekrar arat;
m_dwHair=0;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
m_dwAura = 0;
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\Packet.h"]//arat;
HEADER_CG_GIVE_ITEM = 83,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
HEADER_CG_AURA = 84,//Buradaki 84'ün değişmesi gerekebilir.
#endif
//tekrar arat;
HEADER_GC_AUTH_SUCCESS_OPENID = 154,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
HEADER_GC_AURA = 156,//Buradaki 156'nın değişmesi gerekebilir.
#endif
//tekrar arat;
CHR_EQUIPPART_HAIR,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
CHR_EQUIPPART_AURA,
#endif
//tekrar arat;
#pragma pack(pop)
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
enum EAuraInfo
{
AURA_ABSORPTION_SOCKET = 0,
AURA_ABSORBED_SOCKET = 1,
AURA_LEVEL_SOCKET = 2,
AURA_WINDOW_MAX_MATERIALS = 2,
AURA_ICE_RUNIC = 49990,
};
enum
{
AURA_SUBHEADER_GC_OPEN = 0,
AURA_SUBHEADER_GC_CLOSE,
AURA_SUBHEADER_GC_ADDED,
AURA_SUBHEADER_GC_REMOVED,
AURA_SUBHEADER_GC_REFINED,
AURA_SUBHEADER_CG_CLOSE = 0,
AURA_SUBHEADER_CG_ADD,
AURA_SUBHEADER_CG_REMOVE,
AURA_SUBHEADER_CG_REFINE,
};
typedef struct SPacketAura
{
BYTE header;
BYTE subheader;
bool bWindow;
DWORD dwPrice;
BYTE bPos;
TItemPos tPos;
DWORD dwItemVnum;
DWORD dwMinAbs;
DWORD dwMaxAbs;
} TPacketAura;
typedef struct SAuraMaterial
{
BYTE bHere;
WORD wCell;
} TAuraMaterial;
typedef struct SAuraResult
{
DWORD dwItemVnum;
DWORD dwMinAbs;
DWORD dwMaxAbs;
} TAuraResult;
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonApplication.h"]//include'lerin olduğu bölüme ekle;
#ifdef ENABLE_AURA_SYSTEM
#include "PythonAura.h"
#endif
//arat;
CPythonSafeBox m_pySafeBox;
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
CPythonAura m_pyAura;
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonApplicationModule.cpp"]//arat;
#ifdef ENABLE_COSTUME_SYSTEM
PyModule_AddIntConstant(poModule, "ENABLE_COSTUME_SYSTEM", 1);
#else
PyModule_AddIntConstant(poModule, "ENABLE_COSTUME_SYSTEM", 0);
#endif
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
PyModule_AddIntConstant(poModule, "ENABLE_AURA_SYSTEM", 1);
#else
PyModule_AddIntConstant(poModule, "ENABLE_AURA_SYSTEM", 0);
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonCharacterModule.cpp"]//arat;
PyModule_AddIntConstant(poModule, "NEW_AFFECT_DRAGON_SOUL_DECK2", CInstanceBase::NEW_AFFECT_DRAGON_SOUL_DECK2);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
PyModule_AddIntConstant(poModule, "AFFECT_AURA1", CInstanceBase::AFFECT_AURA1);
PyModule_AddIntConstant(poModule, "AFFECT_AURA2", CInstanceBase::AFFECT_AURA2);
PyModule_AddIntConstant(poModule, "AFFECT_AURA3", CInstanceBase::AFFECT_AURA3);
PyModule_AddIntConstant(poModule, "AFFECT_AURA4", CInstanceBase::AFFECT_AURA4);
PyModule_AddIntConstant(poModule, "AFFECT_AURA5", CInstanceBase::AFFECT_AURA5);
PyModule_AddIntConstant(poModule, "AFFECT_AURA6", CInstanceBase::AFFECT_AURA6);
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonItemModule.cpp"]//arat;
PyModule_AddIntConstant(poModule, "COSTUME_TYPE_HAIR", CItemData::COSTUME_HAIR);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
PyModule_AddIntConstant(poModule, "COSTUME_TYPE_AURA", CItemData::COSTUME_AURA);
#endif
//tekrar arat;
PyModule_AddIntConstant(poModule, "COSTUME_SLOT_HAIR", c_Costume_Slot_Hair);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
PyModule_AddIntConstant(poModule, "COSTUME_TYPE_AURA", CItemData::COSTUME_AURA);
PyModule_AddIntConstant(poModule, "COSTUME_SLOT_AURA", c_Costume_Slot_Aura);
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonNetworkStream.cpp"]//arat;
Set(HEADER_GC_DRAGON_SOUL_REFINE, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCDragonSoulRefine), STATIC_SIZE_PACKET));
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
Set(HEADER_GC_AURA, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketAura), false));
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonNetworkStream.h"]//arat;
void __TEST_SetSkillGroupFake(int iIndex);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
bool SendAuraClosePacket();
bool SendAuraAddPacket(TItemPos tPos, BYTE bPos);
bool SendAuraRemovePacket(BYTE bPos);
bool SendAuraRefinePacket();
#endif
//tekrar arat;
bool RecvChannelPacket();
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
bool RecvAuraPacket(bool bReturn = false);
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonNetworkStreamPhaseGame.cpp"]//arat;
case HEADER_GC_DRAGON_SOUL_REFINE:
ret = RecvDragonSoulRefine();
break;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
case HEADER_GC_AURA:
ret = RecvAuraPacket();
break;
#endif
//dosyanın sonuna ekle;
#ifdef ENABLE_AURA_SYSTEM
bool CPythonNetworkStream::RecvAuraPacket(bool bReturn)
{
TPacketAura sPacket;
if (!Recv(sizeof(sPacket), &sPacket))
return bReturn;
bReturn = true;
switch (sPacket.subheader)
{
case AURA_SUBHEADER_GC_OPEN:
{
CPythonAura::Instance().Clear();
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "ActAura", Py_BuildValue("(ib)", 1, sPacket.bWindow));
}
break;
case AURA_SUBHEADER_GC_CLOSE:
{
CPythonAura::Instance().Clear();
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "ActAura", Py_BuildValue("(ib)", 2, sPacket.bWindow));
}
break;
case AURA_SUBHEADER_GC_ADDED:
{
CPythonAura::Instance().AddMaterial(sPacket.dwPrice, sPacket.bPos, sPacket.tPos);
if (sPacket.bPos == 1)
{
CPythonAura::Instance().AddResult(sPacket.dwItemVnum, sPacket.dwMinAbs, sPacket.dwMaxAbs);
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "AlertAura", Py_BuildValue("(b)", sPacket.bWindow));
}
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "ActAura", Py_BuildValue("(ib)", 3, sPacket.bWindow));
}
break;
case AURA_SUBHEADER_GC_REMOVED:
{
CPythonAura::Instance().RemoveMaterial(sPacket.dwPrice, sPacket.bPos);
if (sPacket.bPos == 0)
CPythonAura::Instance().RemoveMaterial(sPacket.dwPrice, 1);
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "ActAura", Py_BuildValue("(ib)", 4, sPacket.bWindow));
}
break;
case AURA_SUBHEADER_GC_REFINED:
{
if (sPacket.bPos != 255)
{
if (sPacket.dwMaxAbs == 0)
CPythonAura::Instance().RemoveMaterial(sPacket.dwPrice, 1);
else
{
CPythonAura::Instance().RemoveMaterial(sPacket.dwPrice, 0);
CPythonAura::Instance().RemoveMaterial(sPacket.dwPrice, 1);
}
}
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "ActAura", Py_BuildValue("(ib)", 4, sPacket.bWindow));
}
break;
default:
TraceError("CPythonNetworkStream::RecvAuraPacket: unknown subheader %d\n.", sPacket.subheader);
break;
}
return bReturn;
}
bool CPythonNetworkStream::SendAuraClosePacket()
{
if (!__CanActMainInstance())
return true;
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_CG_AURA;
sPacket.subheader = AURA_SUBHEADER_CG_CLOSE;
sPacket.dwPrice = 0;
sPacket.bPos = 0;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
if (!Send(sizeof(sPacket), &sPacket))
return false;
return true;
}
bool CPythonNetworkStream::SendAuraAddPacket(TItemPos tPos, BYTE bPos)
{
if (!__CanActMainInstance())
return true;
TPacketAura sPacket;
sPacket.header = HEADER_CG_AURA;
sPacket.subheader = AURA_SUBHEADER_CG_ADD;
sPacket.dwPrice = 0;
sPacket.bPos = bPos;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
if (!Send(sizeof(sPacket), &sPacket))
return false;
return true;
}
bool CPythonNetworkStream::SendAuraRemovePacket(BYTE bPos)
{
if (!__CanActMainInstance())
return true;
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_CG_AURA;
sPacket.subheader = AURA_SUBHEADER_CG_REMOVE;
sPacket.dwPrice = 0;
sPacket.bPos = bPos;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
if (!Send(sizeof(sPacket), &sPacket))
return false;
return true;
}
bool CPythonNetworkStream::SendAuraRefinePacket()
{
if (!__CanActMainInstance())
return true;
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_CG_AURA;
sPacket.subheader = AURA_SUBHEADER_CG_REFINE;
sPacket.dwPrice = 0;
sPacket.bPos = 0;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
if (!Send(sizeof(sPacket), &sPacket))
return false;
return true;
}
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonNetworkStreamPhaseGameActor.cpp"]//arat;
kNetActorData.m_dwHair=0;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
kNetActorData.m_dwAura = 0;
#endif
//tekrar arat;
kNetActorData.m_dwHair = chrInfoPacket.awPart[CHR_EQUIPPART_HAIR];
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
kNetActorData.m_dwAura = chrInfoPacket.awPart[CHR_EQUIPPART_AURA];
#endif
//tekrar arat;
kNetUpdateActorData.m_dwHair = chrUpdatePacket.awPart[CHR_EQUIPPART_HAIR];
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
kNetUpdateActorData.m_dwAura = chrUpdatePacket.awPart[CHR_EQUIPPART_AURA];
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\StdAfx.h"]//arat;
extern const std::string& ApplicationStringTable_GetString(DWORD dwID);
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
void initAura();
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\UserInterface.cpp"]//arat;
NANOBEGIN
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
initAura();
#endif[/CODE]
[CODE lang="python" title="root\game.py"]#dosyanın sonuna ekle;
if app.ENABLE_AURA_SYSTEM:
def ActAura(self, iAct, bWindow):
if self.interface:
self.interface.ActAura(iAct, bWindow)
def AlertAura(self, bWindow):
snd.PlaySound("sound/ui/make_soket.wav")
# if bWindow:
# self.PopupMessage(localeInfo.AURA_DEL_SERVEITEM)
# else:
# self.PopupMessage(localeInfo.AURA_DEL_ABSORDITEM)[/CODE]
[CODE lang="python" title="root\interfacemodule.py"]#import'ların olduğu bölüme ekle;
if app.ENABLE_AURA_SYSTEM:
import uiaura
#arat;
def __MakeCubeWindow(self):
#fonksiyonun altına ekle;
if app.ENABLE_AURA_SYSTEM:
def __MakeAuraWindow(self):
self.wndAuraRefine = uiaura.RefineWindow(self.wndInventory, self)
self.wndAuraRefine.LoadWindow()
self.wndAuraRefine.Hide()
self.wndAuraAbsorption = uiaura.AbsorbWindow(self.wndInventory, self)
self.wndAuraAbsorption.LoadWindow()
self.wndAuraAbsorption.Hide()
if self.wndInventory:
self.wndInventory.SetAuraWindow(self.wndAuraAbsorption, self.wndAuraRefine)
#tekrar arat;
self.__MakeWebWindow()
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
self.__MakeAuraWindow()
#tekrar arat;
self.privateShopBuilder.SetItemToolTip(self.tooltipItem)
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
self.wndAuraAbsorption.SetItemToolTip(self.tooltipItem)
self.wndAuraRefine.SetItemToolTip(self.tooltipItem)
#tekrar arat;
self.wndChatLog.Destroy()
#üstüne ekle;
if app.ENABLE_AURA_SYSTEM:
if self.wndAuraAbsorption:
self.wndAuraAbsorption.Destroy()
if self.wndAuraRefine:
self.wndAuraRefine.Destroy()
#tekrar arat;
del self.bigBoard
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
del self.wndAuraAbsorption
del self.wndAuraRefine
#tekrar arat;
def CloseWbWindow(self):
#fonksiyonun altına ekle;
if app.ENABLE_AURA_SYSTEM:
def ActAura(self, iAct, bWindow):
if iAct == 1:
if bWindow == True:
if not self.wndAuraRefine.IsOpened():
self.wndAuraRefine.Open()
if not self.wndInventory.IsShow():
self.wndInventory.Show()
else:
if not self.wndAuraAbsorption.IsOpened():
self.wndAuraAbsorption.Open()
if not self.wndInventory.IsShow():
self.wndInventory.Show()
self.wndInventory.RefreshBagSlotWindow()
elif iAct == 2:
if bWindow == True:
if self.wndAuraRefine.IsOpened():
self.wndAuraRefine.Close()
else:
if self.wndAuraAbsorption.IsOpened():
self.wndAuraAbsorption.Close()
self.wndInventory.RefreshBagSlotWindow()
elif iAct == 3 or iAct == 4:
if bWindow == True:
if self.wndAuraRefine.IsOpened():
self.wndAuraRefine.Refresh(iAct)
else:
if self.wndAuraAbsorption.IsOpened():
self.wndAuraAbsorption.Refresh(iAct)
self.wndInventory.RefreshBagSlotWindow()[/CODE]
[CODE lang="python" title="root\playersettingmodule.py"]#arat;
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+37, "", "d:/ymir work/effect/etc/guild_war_flag/flag_yellow.mse")
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT + 60, "Bip01 Spine2", "d:/ymir work/pc/common/effect/aura/aura_01_49_001.mse")#Buradaki 60 sayısı InstanceBase.h'de AFFECT_AURA1,'in sırasıdır. Oradaki sıraya göre değişkenlik gösterebilir.
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT + 61, "Bip01 Spine2", "d:/ymir work/pc/common/effect/aura/aura_50_99_002.mse")#Buradaki 61 sayısı InstanceBase.h'de AFFECT_AURA2,'in sırasıdır. Oradaki sıraya göre değişkenlik gösterebilir.
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT + 62, "Bip01 Spine2", "d:/ymir work/pc/common/effect/aura/aura_100_149_003.mse")#Buradaki 62 sayısı InstanceBase.h'de AFFECT_AURA3,'in sırasıdır. Oradaki sıraya göre değişkenlik gösterebilir.
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT + 63, "Bip01 Spine2", "d:/ymir work/pc/common/effect/aura/aura_150_199_004.mse")#Buradaki 63 sayısı InstanceBase.h'de AFFECT_AURA4,'in sırasıdır. Oradaki sıraya göre değişkenlik gösterebilir.
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT + 64, "Bip01 Spine2", "d:/ymir work/pc/common/effect/aura/aura_200_249_005.mse")#Buradaki 64 sayısı InstanceBase.h'de AFFECT_AURA5,'in sırasıdır. Oradaki sıraya göre değişkenlik gösterebilir.
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT + 65, "Bip01 Spine1", "d:/ymir work/pc/common/effect/aura/aura_250_006.mse")#Buradaki 65 sayısı InstanceBase.h'de AFFECT_AURA6,'in sırasıdır. Oradaki sıraya göre değişkenlik gösterebilir.[/CODE]
[CODE lang="python" title="root\uiinventory.py"]#import'ların olduğu bölüme ekle;
if app.ENABLE_AURA_SYSTEM:
import aura
#arat;
self.wndCostume = None
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
self.listAttachedAuras = []
#arat;
self.wndItem.RefreshSlot()
#üstüne ekle;
if app.ENABLE_AURA_SYSTEM:
slotNumberChecked = 0
for j in xrange(aura.WINDOW_MAX_MATERIALS):
(isHere, iCell) = aura.GetAttachedItem(j)
if isHere:
if iCell == slotNumber:
self.wndItem.ActivateSlot(i, (36.00 / 255.0), (222.00 / 255.0), (3.00 / 255.0), 1.0)
if not slotNumber in self.listAttachedAuras:
self.listAttachedAuras.append(slotNumber)
slotNumberChecked = 1
else:
if slotNumber in self.listAttachedAuras and not slotNumberChecked:
self.wndItem.DeactivateSlot(i)
self.listAttachedAuras.remove(slotNumber)
#arat;
if app.ENABLE_DRAGON_SOUL_SYSTEM:
if self.wndDragonSoulRefine.IsShow():
self.wndDragonSoulRefine.AutoSetItem((player.INVENTORY, slotIndex), 1)
return
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
itemVNum = player.GetItemIndex(slotIndex)
if self.isShowAuraWindow():
if itemVNum >= 21900 and itemVNum <= 21999:
return
aura.Add(player.INVENTORY, slotIndex, 255)
return
#arat;
def OnMoveWindow(self, x, y):
#üstüne ekle;
if app.ENABLE_AURA_SYSTEM:
def SetAuraWindow(self, wndAuraAbsorption, wndAuraRefine):
self.wndAuraRefine = wndAuraRefine
self.wndAuraAbsorption = wndAuraAbsorption
def isShowAuraWindow(self):
if self.wndAuraRefine:
if self.wndAuraRefine.IsShow():
return 1
if self.wndAuraAbsorption:
if self.wndAuraAbsorption.IsShow():
return 1
return 0[/CODE]
[CODE lang="python" title="root\uitooltip.py"]#import'ların olduğu bölüme ekle;
if app.ENABLE_AURA_SYSTEM:
import aura
#arat;
affectString = self.__GetAffectString(type, value)
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
if item.GetItemType() == item.ITEM_TYPE_COSTUME and item.GetItemSubType() == item.COSTUME_TYPE_AURA and itemAbsChance:
value = self.CalcAcceValue(value, itemAbsChance)
affectString = self.__GetAffectString(type, value)
#tekrar arat;
isCostumeBody = 0
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
isCostumeAura = 0
#tekrar arat;
isCostumeBody = item.COSTUME_TYPE_BODY == itemSubType
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
isCostumeAura = item.COSTUME_TYPE_AURA == itemSubType
#tekrar arat;
elif 0 != isCostumeItem:
self.__AppendLimitInformation()
#altına ekle;
if app.ENABLE_AURA_SYSTEM and (itemVnum >= 49001 and itemVnum <= 49006):
## ABSORPTION RATE
absChance = (float(metinSlot[aura.ABSORPTION_SOCKET]) / 10.0)
self.AppendTextLine(localeInfo.AURA_LEVEL_STEP % (int(metinSlot[aura.LEVEL_SOCKET]), int(metinSlot[aura.LEVEL_SOCKET])), self.CONDITION_COLOR)
self.AppendTextLine(localeInfo.AURA_DRAIN_PER % (absChance), self.CONDITION_COLOR)
## END ABSOPRTION RATE
itemAbsorbedVnum = int(metinSlot[aura.ABSORBED_SOCKET])
if itemAbsorbedVnum:
## ATTACK / DEFENCE
item.SelectItem(itemAbsorbedVnum)
if item.GetItemType() == item.ITEM_TYPE_WEAPON:
if item.GetItemSubType() == item.WEAPON_FAN:
self.__AppendMagicAttackInfo(absChance)
item.SelectItem(itemAbsorbedVnum)
self.__AppendAttackPowerInfo(absChance)
else:
self.__AppendAttackPowerInfo(absChance)
item.SelectItem(itemAbsorbedVnum)
self.__AppendMagicAttackInfo(absChance)
elif item.GetItemType() == item.ITEM_TYPE_ARMOR:
defGrade = item.GetValue(1)
defBonus = item.GetValue(5) * 2
defGrade = self.CalcAcceValue(defGrade, absChance)
defBonus = self.CalcAcceValue(defBonus, absChance)
if defGrade > 0:
self.AppendSpace(5)
self.AppendTextLine(localeInfo.TOOLTIP_ITEM_DEF_GRADE % (defGrade + defBonus), self.GetChangeTextLineColor(defGrade))
item.SelectItem(itemAbsorbedVnum)
self.__AppendMagicDefenceInfo(absChance)
## END ATTACK / DEFENCE
## EFFECT
item.SelectItem(itemAbsorbedVnum)
for i in xrange(item.ITEM_APPLY_MAX_NUM):
(affectType, affectValue) = item.GetAffect(i)
affectValue = self.CalcAcceValue(affectValue, absChance)
affectString = self.__GetAffectString(affectType, affectValue)
if affectString and affectValue > 0:
self.AppendTextLine(affectString, self.GetChangeTextLineColor(affectValue))
item.SelectItem(itemAbsorbedVnum)
# END EFFECT
item.SelectItem(itemVnum)
## ATTR
self.__AppendAttributeInformation(attrSlot, absChance)
# END ATTR
else:
# ATTR
self.__AppendAttributeInformation(attrSlot)
# END ATTR
else:
if item.COSTUME_TYPE_MOUNT == itemSubType:
if app.ENABLE_MODEL_RENDER_TARGET and systemSetting.IsPreviewModel() == 1:
(affectType, affectValue) = item.GetAffect(0)
if affectValue != 0:
self.__ModelPreview(affectValue)
else:
self.__AppendAffectInformation()#mount bonusses are hidden now.
self.__AppendAttributeInformation(attrSlot)
#tekrar arat;
class HyperlinkItemToolTip(ItemToolTip):
#üstüne ekle;
if app.ENABLE_AURA_SYSTEM:
def SetAuraResultItem(self, slotIndex, window_type = player.INVENTORY):
(itemVnum, MinAbs, MaxAbs) = aura.GetResultItem()
if not itemVnum:
return
self.ClearToolTip()
metinSlot = [player.GetItemMetinSocket(window_type, slotIndex, i) for i in xrange(player.METIN_SOCKET_MAX_NUM)]
attrSlot = [player.GetItemAttribute(window_type, slotIndex, i) for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM)]
item.SelectItem(itemVnum)
itemType = item.GetItemType()
itemSubType = item.GetItemSubType()
if itemType != item.ITEM_TYPE_COSTUME and itemSubType != item.COSTUME_TYPE_AURA:
return
absChance = float(MinAbs) / 10.0
itemDesc = item.GetItemDescription()
self.__AdjustMaxWidth(attrSlot, itemDesc)
self.__SetItemTitle(itemVnum, metinSlot, attrSlot)
self.AppendDescription(itemDesc, 26)
self.AppendDescription(item.GetItemSummary(), 26, self.CONDITION_COLOR)
self.__AppendLimitInformation()
## ABSORPTION RATE
self.AppendTextLine(localeInfo.AURA_LEVEL_STEP % (int(metinSlot[aura.LEVEL_SOCKET]), int(metinSlot[aura.LEVEL_SOCKET])), self.CONDITION_COLOR)
self.AppendTextLine(localeInfo.AURA_DRAIN_PER % (absChance), self.CONDITION_COLOR)
## END ABSOPRTION RATE
itemAbsorbedVnum = int(metinSlot[aura.ABSORBED_SOCKET])
if itemAbsorbedVnum:
## ATTACK / DEFENCE
item.SelectItem(itemAbsorbedVnum)
if item.GetItemType() == item.ITEM_TYPE_WEAPON:
if item.GetItemSubType() == item.WEAPON_FAN:
self.__AppendMagicAttackInfo(absChance)
item.SelectItem(itemAbsorbedVnum)
self.__AppendAttackPowerInfo(absChance)
else:
self.__AppendAttackPowerInfo(absChance)
item.SelectItem(itemAbsorbedVnum)
self.__AppendMagicAttackInfo(absChance)
elif item.GetItemType() == item.ITEM_TYPE_ARMOR:
defGrade = item.GetValue(1)
defBonus = item.GetValue(5) * 2
defGrade = self.CalcAcceValue(defGrade, absChance)
defBonus = self.CalcAcceValue(defBonus, absChance)
if defGrade > 0:
self.AppendSpace(5)
self.AppendTextLine(localeInfo.TOOLTIP_ITEM_DEF_GRADE % (defGrade + defBonus), self.GetChangeTextLineColor(defGrade))
item.SelectItem(itemAbsorbedVnum)
self.__AppendMagicDefenceInfo(absChance)
## END ATTACK / DEFENCE
## EFFECT
item.SelectItem(itemAbsorbedVnum)
for i in xrange(item.ITEM_APPLY_MAX_NUM):
(affectType, affectValue) = item.GetAffect(i)
affectValue = self.CalcAcceValue(affectValue, absChance)
affectString = self.__GetAffectString(affectType, affectValue)
if affectString and affectValue > 0:
self.AppendTextLine(affectString, self.GetChangeTextLineColor(affectValue))
item.SelectItem(itemAbsorbedVnum)
# END EFFECT
item.SelectItem(itemVnum)
## ATTR
self.__AppendAttributeInformation(attrSlot, MaxAbs)
# END ATTR
self.AppendWearableInformation()
self.ShowToolTip()
def SetAuraResultAbsItem(self, slotIndex1, slotIndex2, window_type = player.INVENTORY):
itemVnumAura = player.GetItemIndex(window_type, slotIndex1)
itemVnumTarget = player.GetItemIndex(window_type, slotIndex2)
if not itemVnumAura or not itemVnumTarget:
return
self.ClearToolTip()
item.SelectItem(itemVnumAura)
itemType = item.GetItemType()
itemSubType = item.GetItemSubType()
if itemType != item.ITEM_TYPE_COSTUME and itemSubType != item.COSTUME_TYPE_AURA:
return
metinSlot = [player.GetItemMetinSocket(window_type, slotIndex1, i) for i in xrange(player.METIN_SOCKET_MAX_NUM)]
attrSlot = [player.GetItemAttribute(window_type, slotIndex2, i) for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM)]
itemDesc = item.GetItemDescription()
self.__AdjustMaxWidth(attrSlot, itemDesc)
self.__SetItemTitle(itemVnumAura, metinSlot, attrSlot)
self.AppendDescription(itemDesc, 26)
self.AppendDescription(item.GetItemSummary(), 26, self.CONDITION_COLOR)
item.SelectItem(itemVnumAura)
self.__AppendLimitInformation()
absChance = float(metinSlot[aura.ABSORPTION_SOCKET]) / 10.0
## ABSORPTION RATE
self.AppendTextLine(localeInfo.AURA_LEVEL_STEP % (int(metinSlot[aura.LEVEL_SOCKET]), int(metinSlot[aura.LEVEL_SOCKET])), self.CONDITION_COLOR)
self.AppendTextLine(localeInfo.AURA_DRAIN_PER % (absChance), self.CONDITION_COLOR)
## END ABSOPRTION RATE
## ATTACK / DEFENCE
itemAbsorbedVnum = itemVnumTarget
item.SelectItem(itemAbsorbedVnum)
if item.GetItemType() == item.ITEM_TYPE_WEAPON:
if item.GetItemSubType() == item.WEAPON_FAN:
self.__AppendMagicAttackInfo(absChance)
item.SelectItem(itemAbsorbedVnum)
self.__AppendAttackPowerInfo(absChance)
else:
self.__AppendAttackPowerInfo(absChance)
item.SelectItem(itemAbsorbedVnum)
self.__AppendMagicAttackInfo(absChance)
elif item.GetItemType() == item.ITEM_TYPE_ARMOR:
defGrade = item.GetValue(1)
defBonus = item.GetValue(5) * 2
defGrade = self.CalcAcceValue(defGrade, absChance)
defBonus = self.CalcAcceValue(defBonus, absChance)
if defGrade > 0:
self.AppendSpace(5)
self.AppendTextLine(localeInfo.TOOLTIP_ITEM_DEF_GRADE % (defGrade + defBonus), self.GetChangeTextLineColor(defGrade))
item.SelectItem(itemAbsorbedVnum)
self.__AppendMagicDefenceInfo(absChance)
## END ATTACK / DEFENCE
## EFFECT
item.SelectItem(itemAbsorbedVnum)
for i in xrange(item.ITEM_APPLY_MAX_NUM):
(affectType, affectValue) = item.GetAffect(i)
affectValue = self.CalcAcceValue(affectValue, absChance)
affectString = self.__GetAffectString(affectType, affectValue)
if affectString and affectValue > 0:
self.AppendTextLine(affectString, self.GetChangeTextLineColor(affectValue))
item.SelectItem(itemAbsorbedVnum)
## END EFFECT
## ATTR
item.SelectItem(itemAbsorbedVnum)
for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM):
type = attrSlot[0]
value = attrSlot[1]
if not value:
continue
value = self.CalcAcceValue(value, absChance)
affectString = self.__GetAffectString(type, value)
if affectString and value > 0:
affectColor = self.__GetAttributeColor(i, value)
self.AppendTextLine(affectString, affectColor)
item.SelectItem(itemAbsorbedVnum)
## END ATTR
## WEARABLE
item.SelectItem(itemVnumAura)
self.AppendSpace(5)
self.AppendTextLine(localeInfo.TOOLTIP_ITEM_WEARABLE_JOB, self.NORMAL_COLOR)
item.SelectItem(itemVnumAura)
flagList = (
not item.IsAntiFlag(item.ITEM_ANTIFLAG_WARRIOR),
not item.IsAntiFlag(item.ITEM_ANTIFLAG_ASSASSIN),
not item.IsAntiFlag(item.ITEM_ANTIFLAG_SURA),
not item.IsAntiFlag(item.ITEM_ANTIFLAG_SHAMAN)
)
flagList += (not item.IsAntiFlag(item.ITEM_ANTIFLAG_WOLFMAN),)
characterNames = ""
for i in xrange(self.CHARACTER_COUNT):
name = self.CHARACTER_NAMES
flag = flagList
if flag:
characterNames += " "
characterNames += name
textLine = self.AppendTextLine(characterNames, self.NORMAL_COLOR, True)
textLine.SetFeather()
item.SelectItem(itemVnumAura)
if item.IsAntiFlag(item.ITEM_ANTIFLAG_MALE):
textLine = self.AppendTextLine(localeInfo.FOR_FEMALE, self.NORMAL_COLOR, True)
textLine.SetFeather()
if item.IsAntiFlag(item.ITEM_ANTIFLAG_FEMALE):
textLine = self.AppendTextLine(localeInfo.FOR_MALE, self.NORMAL_COLOR, True)
textLine.SetFeather()
## END WEARABLE
self.ShowToolTip()[/CODE]
[CODE lang="python" title="uiscript\costumewindow.py"]#arat;
{"index":COSTUME_START_INDEX+1, "x":62, "y": 9, "width":32, "height":32},
#altına ekle;
{"index":COSTUME_START_INDEX+5, "x":37, "y":126, "width":32, "height":32},#Buradaki 5 rakamı GameType.h'de bulunan const DWORD c_Costume_Slot_Aura = c_Costume_Slot_Start + 5; bu satırda yapacağın değişikliğe göre değişmesi gerekmekte.[/CODE]
ÖNEMLİ: Kostüm penceresine .jpg dosyası üzerinden bir slot açmanız ve COSTUME_START_INDEX+5'in konumunu ona göre ayarlamanız gerekiyor.
Ekte vereceğim dosyaları gerekli yerlere atmayı unutmayın.
İyi forumlar.
Kanıt;
Dün paylaşılan filesten söktüğüm bu sistemi sizlerle paylaşmak istedim.
Eksik kalan yerler olabilir fakat bildirmeniz durumunda tamamlayacağımdan şüpheniz olmasın.
@Player 1

Bir teşekkürü çok görmeyip forumda paylaşım yapan kişileri daha fazla paylaşıma teşvik edebilirsiniz.
[CODE lang="cpp" title="common\CommonDefines.h"]//müsait bir yere ekle;
#define ENABLE_AURA_SYSTEM[/CODE]
[CODE lang="cpp" title="common\item_length.h"]//arat;
enum ECostumeSubTypes
//fonksiyon içindeki sıraya göre ekle;
#ifdef ENABLE_AURA_SYSTEM
COSTUME_AURA = 5,//Buradaki 5'in sıraya göre değişmesi gerekebilir.
#endif
//tekrar arat;
enum EDragonSoulSubType
//fonksiyonun altına ekle;
#ifdef ENABLE_AURA_SYSTEM
enum EAuraInfo
{
AURA_ABSORPTION_SOCKET = 0,
AURA_ABSORBED_SOCKET = 1,
AURA_GRADE_VALUE_FIELD = 2,
AURA_WINDOW_MAX_MATERIALS = 2,
AURA_ICE_RUNIC = 49990,
AURA_MAX_ABS = 250,
AURA_REFINE_PRICE = 25000000,
AURA_GRADE_1_REFINE = 65,
AURA_GRADE_2_REFINE = 60,
AURA_GRADE_3_REFINE = 50,
AURA_GRADE_4_REFINE = 45,
AURA_GRADE_5_REFINE = 35,
AURA_GRADE_6_REFINE = 25,
AURA_TYPE_VALUE_FIELD = 0,
};
#endif
//tekrar arat;
enum EItemWearableFlag
//fonksiyon içindeki sıraya göre ekle;
#ifdef ENABLE_AURA_SYSTEM
WEARABLE_COSTUME_AURA = (1 << 18),//Buradaki 18'in sıraya göre değişmesi gerekebilir.
#endif[/CODE]
[CODE lang="cpp" title="common\length.h"]//arat;
WEAR_COSTUME_WEAPON,
altına ekle;
#ifdef ENABLE_AURA_SYSTEM
WEAR_COSTUME_AURA,
#endif
//tekrar arat;
PART_HAIR,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
PART_AURA,
#endif[/CODE]
[CODE lang="cpp" title="db\src\ProtoReader.cpp"]//arat;
"COSTUME_WEAPON",
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
"COSTUME_AURA",
#endif[/CODE]
[CODE lang="cpp" title="game\src\char.cpp"]//arat;
m_pointsInstant.iDragonSoulActiveDeck = -1;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
m_bAuraRefine = false;
m_bAuraAbsorption = false;
#endif
//tekrar arat;
addPacket.awPart[CHR_EQUIPPART_HAIR] = GetPart(PART_HAIR);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
addPacket.awPart[CHR_EQUIPPART_AURA] = GetPart(PART_AURA);
#endif
//tekrar arat;
pack.awPart[CHR_EQUIPPART_HAIR] = GetPart(PART_HAIR);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
pack.awPart[CHR_EQUIPPART_AURA] = GetPart(PART_AURA);
#endif
//tekrar arat;
SetPart(PART_HAIR, t->parts[PART_HAIR]);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
SetPart(PART_AURA, t->parts[PART_AURA]);
#endif
//tekrar arat;
SetPart(PART_HAIR, GetOriginalPart(PART_HAIR));
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
SetPart(PART_AURA, GetOriginalPart(PART_AURA));
#endif
//tekrar arat; (Opsiyonel: void CHARACTER::OpenMyOfflineShop(const char * c_pszSign, TShopItemTable * pTable, BYTE bItemCount, BYTE bTime))
if (IsDead() || GetExchange() || GetMyShop() || GetOfflineShop() || IsCubeOpen() || IsOpenSafebox() || GetShop())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Make sure you don't have any open windows!"));
return;
}
//altına ekle; (Opsiyonel: void CHARACTER::OpenMyOfflineShop(const char * c_pszSign, TShopItemTable * pTable, BYTE bItemCount, BYTE bTime))
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat;
case PART_HAIR:
return GetPart(PART_HAIR);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
case PART_AURA:
return GetPart(PART_AURA);
#endif
//tekrar arat;
if ((GetExchange() || IsOpenSafebox() || GetShopOwner()) || IsCubeOpen())
{
pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 개인상점을 사용할 수 없습니다."));
return;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat;
if ((pkChrCauser->GetExchange() || pkChrCauser->IsOpenSafebox() || pkChrCauser->GetMyShop() || pkChrCauser->GetShopOwner()) || pkChrCauser->IsCubeOpen())
{
pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 개인상점을 사용할 수 없습니다."));
return;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (pkChrCauser->isAuraOpened(true) || pkChrCauser->isAuraOpened(false))
{
pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat;
if ((GetExchange() || IsOpenSafebox() || IsCubeOpen()))
{
pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 다른 거래를 하고 있는 중입니다."));
return;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
pkChrCauser->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
if (bSendMsg)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 다른곳으로 이동,종료 할수 없습니다"));
return true;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
if (bSendMsg)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 다른곳으로 이동,종료 할수 없습니다"));
return true;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || IsOpenSafebox() || IsCubeOpen())
{
if (bSendMsg)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 다른곳으로 이동,종료 할수 없습니다"));
return true;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
if (bSendMsg)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 다른곳으로 이동,종료 할수 없습니다"));
return true;
}
#endif
//dosyanın sonuna ekle;
#ifdef ENABLE_AURA_SYSTEM
void CHARACTER::OpenAura(bool bCombination)
{
if (isAuraOpened(bCombination))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The aura window it's already opened."));
return;
}
if (bCombination)
{
if (m_bAuraAbsorption)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Before you may close the aura absorption window."));
return;
}
m_bAuraRefine = true;
}
else
{
if (m_bAuraRefine)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Before you may close the aura combine window."));
return;
}
m_bAuraAbsorption = true;
}
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_GC_AURA;
sPacket.subheader = AURA_SUBHEADER_GC_OPEN;
sPacket.bWindow = bCombination;
sPacket.dwPrice = 0;
sPacket.bPos = 0;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
GetDesc()->Packet(&sPacket, sizeof(TPacketAura));
ClearAuraMaterials();
}
void CHARACTER::CloseAura()
{
if ((!m_bAuraRefine) && (!m_bAuraAbsorption))
return;
bool bWindow = (m_bAuraRefine == true ? true : false);
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_GC_AURA;
sPacket.subheader = AURA_SUBHEADER_GC_CLOSE;
sPacket.bWindow = bWindow;
sPacket.dwPrice = 0;
sPacket.bPos = 0;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
GetDesc()->Packet(&sPacket, sizeof(TPacketAura));
if (bWindow)
m_bAuraRefine = false;
else
m_bAuraAbsorption = false;
ClearAuraMaterials();
}
void CHARACTER::ClearAuraMaterials()
{
LPITEM* pkItemMaterial;
pkItemMaterial = GetAuraMaterials();
for (int i = 0; i < AURA_WINDOW_MAX_MATERIALS; ++i)
{
if (!pkItemMaterial)
continue;
pkItemMaterial->Lock(false);
pkItemMaterial = nullptr;
}
}
bool CHARACTER::AuraIsSameGrade(long lGrade)
{
LPITEM* pkItemMaterial;
pkItemMaterial = GetAuraMaterials();
if (!pkItemMaterial[0])
return false;
bool bReturn = (pkItemMaterial[0]->GetValue(AURA_GRADE_VALUE_FIELD) == lGrade ? true : false);
return bReturn;
}
DWORD CHARACTER::GetAuraCombinePrice(long lGrade)
{
DWORD dwPrice = AURA_REFINE_PRICE;
return dwPrice;
}
BYTE CHARACTER::CheckAuraEmptyMaterialSlot()
{
LPITEM* pkItemMaterial;
pkItemMaterial = GetAuraMaterials();
for (int i = 0; i < AURA_WINDOW_MAX_MATERIALS; ++i)
{
if (!pkItemMaterial)
return i;
}
return 255;
}
void CHARACTER::GetAuraCombineResult(DWORD & dwItemVnum, DWORD & dwMinAbs, DWORD & dwMaxAbs)
{
LPITEM* pkItemMaterial;
pkItemMaterial = GetAuraMaterials();
if (m_bAuraRefine)
{
if ((pkItemMaterial[0]) && (pkItemMaterial[1]))
{
long lVal = pkItemMaterial[0]->GetValue(AURA_TYPE_VALUE_FIELD);
if (lVal == 6)
{
dwItemVnum = pkItemMaterial[0]->GetOriginalVnum();
}
else
{
DWORD dwMaskVnum = pkItemMaterial[0]->GetOriginalVnum();
TItemTable* pTable = ITEM_MANAGER::instance().GetTable(dwMaskVnum + 1);
if (pTable)
dwMaskVnum += 1;
dwItemVnum = dwMaskVnum;
}
}
else
{
dwItemVnum = 0;
dwMinAbs = 0;
dwMaxAbs = 0;
}
}
else
{
if ((pkItemMaterial[0]) && (pkItemMaterial[1]))
{
dwItemVnum = pkItemMaterial[0]->GetOriginalVnum();
dwMinAbs = pkItemMaterial[0]->GetSocket(AURA_ABSORPTION_SOCKET);
dwMaxAbs = dwMinAbs;
}
else
{
dwItemVnum = 0;
dwMinAbs = 0;
dwMaxAbs = 0;
}
}
}
void CHARACTER::AddAuraMaterial(TItemPos tPos, BYTE bPos)
{
if (bPos >= AURA_WINDOW_MAX_MATERIALS)
{
if (bPos == 255)
{
bPos = CheckEmptyMaterialSlot();
if (bPos >= AURA_WINDOW_MAX_MATERIALS)
return;
}
else
return;
}
LPITEM pkItem = GetItem(tPos);
if (!pkItem)
return;
else if ((pkItem->GetCell() >= INVENTORY_MAX_NUM) || (pkItem->IsEquipped()) || (tPos.IsBeltInventoryPosition()) || (pkItem->IsDragonSoul()))
return;
else if ((pkItem->GetType() != ITEM_COSTUME && pkItem->GetType() != COSTUME_AURA) && (bPos == 0) && (m_bAuraRefine))
return;
else if ((pkItem->GetType() != ITEM_COSTUME && pkItem->GetType() != COSTUME_AURA) && (bPos == 0) && (m_bAuraAbsorption))
return;
else if (pkItem->isLocked())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't add locked items."));
return;
}
#ifdef ENABLE_ITEM_SEALBIND_SYSTEM
else if ((pkItem->IsSealed()))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Aura] You can't add binded items."));
return;
}
#endif
#ifdef ENABLE_BASIC_ITEM_SYSTEM
else if (pkItem->IsBasicItem())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ITEM_IS_BASIC_CANNOT_DO"));
return;
}
#endif
else if ((m_bAuraRefine) && (pkItem->GetSocket(AURA_ABSORPTION_SOCKET) >= AURA_MAX_ABS))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This aura got already maximum absorption chance."));
return;
}
else if ((bPos == 1) && (m_bAuraAbsorption))
{
if ((pkItem->GetType() != ITEM_ARMOR))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura You can absorb just the bonuses from armors and weapons."));
return;
}
else if ((pkItem->GetType() == ITEM_ARMOR) && (pkItem->GetSubType() != ARMOR_SHIELD) && (pkItem->GetSubType() != ARMOR_EAR) && (pkItem->GetSubType() != ARMOR_WRIST) && (pkItem->GetSubType() != ARMOR_NECK))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura You can absorb just the bonuses from armors and weapons."));
return;
}
}
else if ((bPos == 1) && (m_bAuraRefine))
{
if ((pkItem->GetVnum() != AURA_ICE_RUNIC))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura Only Refine Material Ice Runic"));
return;
}
}
else if ((pkItem->GetSubType() != COSTUME_AURA) && (m_bAuraAbsorption))
return;
else if ((pkItem->GetSubType() != COSTUME_AURA) && (bPos == 0) && (m_bAuraAbsorption))
return;
else if ((pkItem->GetSocket(AURA_ABSORBED_SOCKET) > 0) && (bPos == 0) && (m_bAuraAbsorption))
return;
LPITEM * pkItemMaterial;
pkItemMaterial = GetAuraMaterials();
if ((bPos == 1) && (!pkItemMaterial[0]))
return;
if (pkItemMaterial[bPos])
return;
pkItemMaterial[bPos] = pkItem;
pkItemMaterial[bPos]->Lock(true);
DWORD dwItemVnum, dwMinAbs, dwMaxAbs;
GetAuraCombineResult(dwItemVnum, dwMinAbs, dwMaxAbs);
TPacketAura sPacket;
sPacket.header = HEADER_GC_AURA;
sPacket.subheader = AURA_SUBHEADER_GC_ADDED;
sPacket.bWindow = m_bAuraRefine == true ? true : false;
sPacket.dwPrice = GetAuraCombinePrice(pkItem->GetValue(AURA_GRADE_VALUE_FIELD));
sPacket.bPos = bPos;
sPacket.tPos = tPos;
sPacket.dwItemVnum = dwItemVnum;
sPacket.dwMinAbs = dwMinAbs;
sPacket.dwMaxAbs = dwMaxAbs;
GetDesc()->Packet(&sPacket, sizeof(TPacketAura));
}
void CHARACTER::RemoveAuraMaterial(BYTE bPos)
{
if (bPos >= AURA_WINDOW_MAX_MATERIALS)
return;
LPITEM * pkItemMaterial;
pkItemMaterial = GetAuraMaterials();
DWORD dwPrice = 0;
if (bPos == 1)
{
if (pkItemMaterial[bPos])
{
pkItemMaterial[bPos]->Lock(false);
pkItemMaterial[bPos] = nullptr;
}
if (pkItemMaterial[0])
dwPrice = GetAuraCombinePrice(pkItemMaterial[0]->GetValue(AURA_GRADE_VALUE_FIELD));
}
else
ClearAuraMaterials();
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_GC_AURA;
sPacket.subheader = AURA_SUBHEADER_GC_REMOVED;
sPacket.bWindow = m_bAuraRefine == true ? true : false;
sPacket.dwPrice = dwPrice;
sPacket.bPos = bPos;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
GetDesc()->Packet(&sPacket, sizeof(TPacketAura));
}
BYTE CHARACTER::CanRefineAuraMaterials()
{
BYTE bReturn = 0;
LPITEM* pkItemMaterial = GetAuraMaterials();
if (m_bAuraRefine)
{
for (int i = 0; i < AURA_WINDOW_MAX_MATERIALS; ++i)
{
if (pkItemMaterial != nullptr)
{
if ((pkItemMaterial->GetType() == ITEM_COSTUME) && (pkItemMaterial->GetSubType() == COSTUME_AURA))
bReturn = 1;
else if ((pkItemMaterial->GetVnum() == AURA_ICE_RUNIC))
bReturn = 1;
else
{
bReturn = 0;
break;
}
}
else
{
bReturn = 0;
break;
}
}
}
else if (m_bAuraAbsorption)
{
if ((pkItemMaterial[0]) && (pkItemMaterial[1]))
{
if ((pkItemMaterial[0]->GetType() == ITEM_COSTUME) && (pkItemMaterial[0]->GetSubType() == COSTUME_AURA))
bReturn = 2;
else
bReturn = 0;
if ((pkItemMaterial[1]->GetType() == ITEM_ARMOR) && ((pkItemMaterial[1]->GetSubType() == ARMOR_EAR) || (pkItemMaterial[1]->GetSubType() == ARMOR_WRIST) || (pkItemMaterial[1]->GetSubType() == ARMOR_NECK) || (pkItemMaterial[1]->GetSubType() == ARMOR_SHIELD)))
bReturn = 2;
else
bReturn = 0;
if (pkItemMaterial[0]->GetSocket(AURA_ABSORBED_SOCKET) > 0)
bReturn = 0;
}
else
bReturn = 0;
}
return bReturn;
}
void CHARACTER::RefineAuraMaterials()
{
BYTE bCan = CanRefineAuraMaterials();
if (bCan == 0)
return;
LPITEM * pkItemMaterial;
pkItemMaterial = GetAuraMaterials();
if (!pkItemMaterial[0] || !pkItemMaterial[1])
return;
DWORD dwItemVnum, dwMinAbs, dwMaxAbs;
GetAuraCombineResult(dwItemVnum, dwMinAbs, dwMaxAbs);
DWORD dwPrice = AURA_REFINE_PRICE;
if (bCan == 1)
{
int iSuccessChance = 0;
long lVal = pkItemMaterial[0]->GetValue(AURA_TYPE_VALUE_FIELD);
switch (lVal)
{
case 2:
{
iSuccessChance = AURA_GRADE_2_REFINE;
}
break;
case 3:
{
iSuccessChance = AURA_GRADE_3_REFINE;
}
break;
case 4:
{
iSuccessChance = AURA_GRADE_4_REFINE;
}
break;
case 5:
{
iSuccessChance = AURA_GRADE_5_REFINE;
}
break;
case 6:
{
iSuccessChance = AURA_GRADE_6_REFINE;
}
break;
default:
{
iSuccessChance = AURA_GRADE_1_REFINE;
}
break;
}
if (GetGold() < dwPrice)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura You don't have enough Yang."));
return;
}
int iChance = number(1, 100);
bool bSucces = (iChance <= iSuccessChance ? true : false);
if (pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 49 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 99 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 149 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 199 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 249)
bSucces = true;
int oldGradeValue = pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD);
bool bPacket = true;
if (bSucces)
{
if (pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 49 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 99 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 149 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 199 && pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) != 249)
{
PointChange(POINT_GOLD, -dwPrice);
pkItemMaterial[0]->SetSocket(AURA_ABSORPTION_SOCKET, pkItemMaterial[0]->GetSocket(AURA_ABSORPTION_SOCKET)+1);
pkItemMaterial[0]->SetSocket(AURA_GRADE_VALUE_FIELD, pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD)+1);
bool bDelete = false;
if (pkItemMaterial[1]->GetCount() - 1 < 1)
bDelete = true;
pkItemMaterial[1]->SetCount(pkItemMaterial[1]->GetCount()-1);
if (bDelete == true)
pkItemMaterial[1] = NULL;
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura Success."));
}
else
{
LPITEM pkItem = ITEM_MANAGER::instance().CreateItem(dwItemVnum, 1, 0, false);
if (!pkItem)
{
sys_err("%d can't be created.", dwItemVnum);
return;
}
ITEM_MANAGER::CopyAllAttrTo(pkItemMaterial[0], pkItem);
LogManager::instance().ItemLog(this, pkItem, "AURA REFINE SUCCESS", pkItem->GetName());
pkItem->SetSocket(AURA_ABSORPTION_SOCKET, pkItem->GetSocket(AURA_ABSORPTION_SOCKET)+1);
pkItem->SetSocket(AURA_ABSORBED_SOCKET, pkItemMaterial[0]->GetSocket(AURA_ABSORBED_SOCKET));
pkItem->SetSocket(AURA_GRADE_VALUE_FIELD, pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD)+1);
PointChange(POINT_GOLD, -dwPrice);
DBManager::instance().SendMoneyLog(MONEY_LOG_REFINE, pkItemMaterial[0]->GetVnum(), -dwPrice);
WORD wCell = pkItemMaterial[0]->GetCell();
ITEM_MANAGER::instance().RemoveItem(pkItemMaterial[0], "AURA (REFINE SUCCESS)");
pkItemMaterial[1]->SetCount(pkItemMaterial[1]->GetCount()-1);
pkItem->AddToCharacter(this, TItemPos(INVENTORY, wCell));
ITEM_MANAGER::instance().FlushDelayedSave(pkItem);
pkItem->AttrLog();
if (lVal == 6)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura New absorption rate: %2f%"), float(pkItem->GetSocket(AURA_ABSORPTION_SOCKET)/10.0f));
else
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura Success."));
ClearAuraMaterials();
bPacket = false;
}
}
else
{
PointChange(POINT_GOLD, -dwPrice);
pkItemMaterial[1]->SetCount(pkItemMaterial[1]->GetCount()-1);
DBManager::instance().SendMoneyLog(MONEY_LOG_REFINE, pkItemMaterial[0]->GetVnum(), -dwPrice);
//ITEM_MANAGER::instance().RemoveItem(pkItemMaterial[1], "COMBINE (REFINE FAIL)");
if (lVal == 6)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura New absorption rate: %d%"), pkItemMaterial[0]->GetSocket(AURA_ABSORPTION_SOCKET));
else
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura Failed."));
if (pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) == 50 || pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) == 100 || pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) == 150 || pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) == 200 || pkItemMaterial[0]->GetSocket(AURA_GRADE_VALUE_FIELD) == 250)
ClearAuraMaterials();
bPacket = false;
}
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_GC_AURA;
sPacket.subheader = AURA_SUBHEADER_GC_REFINED;
sPacket.bWindow = m_bAuraRefine == true ? true : false;
sPacket.dwPrice = dwPrice;
if (pkItemMaterial[0])
{
if (bPacket)
if (oldGradeValue != 49 && oldGradeValue != 99 && oldGradeValue != 149 && oldGradeValue != 199 && oldGradeValue != 249)
sPacket.bPos = 255;
else
sPacket.bPos = 0;
else
sPacket.bPos = 0;
}
else
sPacket.bPos = 0;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
if (bSucces)
sPacket.dwMaxAbs = 100;
else
sPacket.dwMaxAbs = 0;
GetDesc()->Packet(&sPacket, sizeof(TPacketAura));
}
else
{
pkItemMaterial[1]->CopyAttributeTo(pkItemMaterial[0]);
LogManager::instance().ItemLog(this, pkItemMaterial[0], "ABSORB (REFINE SUCCESS)", pkItemMaterial[0]->GetName());
pkItemMaterial[0]->SetSocket(AURA_ABSORBED_SOCKET, pkItemMaterial[1]->GetOriginalVnum());
for (int i = 0; i < ITEM_ATTRIBUTE_MAX_NUM; ++i)
{
if (pkItemMaterial[0]->GetAttributeValue(i) < 0)
pkItemMaterial[0]->SetForceAttribute(i, pkItemMaterial[0]->GetAttributeType(i), 0);
}
ITEM_MANAGER::instance().RemoveItem(pkItemMaterial[1], "ABSORBED (REFINE SUCCESS)");
ITEM_MANAGER::instance().FlushDelayedSave(pkItemMaterial[0]);
pkItemMaterial[0]->AttrLog();
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Aura Success."));
ClearAuraMaterials();
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_GC_AURA;
sPacket.subheader = AURA_SUBHEADER_GC_REFINED;
sPacket.bWindow = m_bAuraRefine == true ? true : false;
sPacket.dwPrice = dwPrice;
sPacket.bPos = 255;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 1;
GetDesc()->Packet(&sPacket, sizeof(TPacketAura));
}
}
bool CHARACTER::CleanAuraAttr(LPITEM pkItem, LPITEM pkTarget)
{
if (!CanHandleItem())
return false;
else if ((!pkItem) || (!pkTarget))
return false;
else if ((pkTarget->GetType() != ITEM_COSTUME) && (pkTarget->GetSubType() != COSTUME_AURA))
return false;
if (pkTarget->GetSocket(AURA_ABSORBED_SOCKET) <= 0)
return false;
pkTarget->SetSocket(AURA_ABSORBED_SOCKET, 0);
for (int i = 0; i < ITEM_ATTRIBUTE_MAX_NUM; ++i)
pkTarget->SetForceAttribute(i, 0, 0);
pkItem->SetCount(pkItem->GetCount() - 1);
LogManager::instance().ItemLog(this, pkTarget, "USE_DETACHMENT (CLEAN ATTR)", pkTarget->GetName());
return true;
}
#endif[/CODE]
[CODE lang="cpp" title="game\src\char.h"]//arat;
LPCHARACTER pCubeNpc;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
LPITEM pAuraMaterials[AURA_WINDOW_MAX_MATERIALS];
#endif
//tekrar arat;
int GetSyncHackCount() { return m_iSyncHackCount; }
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
protected:
bool m_bAuraRefine, m_bAuraAbsorption;
public:
bool isAuraOpened(bool bCombination) { return bCombination ? m_bAuraRefine : m_bAuraAbsorption; }
void OpenAura(bool bCombination);
void CloseAura();
void ClearAuraMaterials();
bool CleanAuraAttr(LPITEM pkItem, LPITEM pkTarget);
LPITEM* GetAuraMaterials() { return m_pointsInstant.pAuraMaterials; }
bool AuraIsSameGrade(long lGrade);
DWORD GetAuraCombinePrice(long lGrade);
void GetAuraCombineResult(DWORD & dwItemVnum, DWORD & dwMinAbs, DWORD & dwMaxAbs);
BYTE CheckAuraEmptyMaterialSlot();
void AddAuraMaterial(TItemPos tPos, BYTE bPos);
void RemoveAuraMaterial(BYTE bPos);
BYTE CanRefineAuraMaterials();
void RefineAuraMaterials();
#endif[/CODE]
[CODE lang="cpp" title="game\src\char_battle.cpp"]//arat;
Cube_close(this);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (IsPC())
CloseAura();
#endif[/CODE]
[CODE lang="cpp" title="game\src\char_item.cpp"]//arat;
if (IsWarping())
return false;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if ((m_bAuraRefine) || (m_bAuraAbsorption))
return false;
#endif
//tekrar arat; (Opsiyonel: bool CHARACTER:
oRefine_Rarity(LPITEM item))if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 귀환부,귀환기억부 를 사용할수 없습니다."));
return false;
}
//altına ekle; (Opsiyonel: bool CHARACTER:
oRefine_Rarity(LPITEM item))#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 귀환부,귀환기억부 를 사용할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 귀환부,귀환기억부 를 사용할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 귀환부,귀환기억부 를 사용할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 귀환부,귀환기억부 를 사용할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 귀환부,귀환기억부 를 사용할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 귀환부,귀환기억부 를 사용할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("거래창,창고 등을 연 상태에서는 보따리,비단보따리를 사용할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat; (Opsiyonel; bool CHARACTER:
eleteItem(TItemPos Cell))if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Make sure you don't have any open windows!"));
return false;
}
//altına ekle; (Opsiyonel; bool CHARACTER:
eleteItem(TItemPos Cell))#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Make sure you don't have any open windows!"));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif[/CODE]
[CODE lang="cpp" title="game\src\cmd_general.cpp"]//arat; (Opsiyonel: ACMD(do_open_range_npc))
if (ch->IsDead() || ch->GetExchange() || ch->GetMyShop() || ch->IsOpenSafebox() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("PLEASE_BEFORE_CLOSE_WINDOW_AND_USE_THIS_FUNCTION"));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_open_range_npc))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("PLEASE_BEFORE_CLOSE_WINDOW_AND_USE_THIS_FUNCTION"));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_bkoku))
if(ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen() || ch->isAcceOpened(true) || ch->isAcceOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 개인상점을 사용할 수 없습니다."));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_bkoku))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_ruhoku))
if(ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen() || ch->isAcceOpened(true) || ch->isAcceOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 개인상점을 사용할 수 없습니다."));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_ruhoku))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_costum_effect))
if (ch->IsDead() || ch->GetExchange() || ch->GetMyShop() || ch->IsOpenSafebox() || ch->IsCubeOpen() || ch->isAcceOpened(true) || ch->isAcceOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Kullanilamaz diger islemlere (depolama, doviz ve dukkanlar) arasinda."));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_costum_effect))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_transfer_gold))
if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Make sure you don't have any open windows!"));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_transfer_gold))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_transfer_cheque))
if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Make sure you don't have any open windows!"));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_transfer_cheque))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_biyolog))
if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 개인상점을 사용할 수 없습니다."));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_biyolog))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_PetEvo))
if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Pet Gelistirme] Pencere Acik."));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_PetEvo))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_use_won_ticket))
if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Make sure you don't have any open windows!"));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_use_won_ticket))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: ACMD(do_refine_rarity))
if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen() || ch->GetOfflineShopOwner())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래창이 열린상태에서는 상점거래를 할수 가 없습니다."));
return;
}
//altına ekle; (Opsiyonel: ACMD(do_refine_rarity))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif[/CODE]
[CODE lang="cpp" title="game\src\cmd_gm.cpp"]//arat;
if (ch->GetShop())
strlcat(buf, ", Shop", sizeof(buf));
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true))
strlcat(buf, ", Aura Refine", sizeof(buf));
if (ch->isAuraOpened(false))
strlcat(buf, ", Aura Absorption", sizeof(buf));
#endif[/CODE]
[CODE lang="cpp" title="game\src\cube.cpp"]//arat;
if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif[/CODE]
[CODE lang="cpp" title="game\src\exchange.cpp"]//arat;
if (IsOpenSafebox() || GetShopOwner() || GetMyShop() || IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래창이 열려있을경우 거래를 할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (isAuraOpened(true) || isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif
//tekrar arat;
if (victim->IsOpenSafebox() || victim->GetShopOwner() || victim->GetMyShop() || victim->IsCubeOpen())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상대방이 다른 거래중이라 거래를 할수 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (victim->isAuraOpened(true) || victim->isAuraOpened(false))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif[/CODE]
[CODE lang="cpp" title="game\src\input.h"]//arat;
void Refine(LPCHARACTER ch, const char* c_pData);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
void Aura(LPCHARACTER pkChar, const char* c_pData);
#endif[/CODE]
[CODE lang="cpp" title="game\src\input_db.cpp"]//arat;
if (ch->GetShopOwner() || ch->GetExchange() || ch->GetMyShop() || ch->IsCubeOpen())
{
d->GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른거래창이 열린상태에서는 창고를 열수가 없습니다."));
d->GetCharacter()->CancelSafeboxLoad();
return;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
d->GetCharacter()->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
d->GetCharacter()->CancelSafeboxLoad();
return;
}
#endif[/CODE]
[CODE lang="cpp" title="game\src\input_main.cpp"]//arat;
if (ch->GetMyShop() || ch->IsOpenSafebox() || ch->GetShopOwner() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중일경우 개인상점을 열수가 없습니다."));
return;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat;
if (ch->GetExchange() || ch->IsOpenSafebox() || ch->GetShopOwner() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중일경우 개인상점을 열수가 없습니다."));
return (iExtraLen);
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return (iExtraLen);
}
#endif
//tekrar arat; (Opsiyonel: int CInputMain::MyOfflineShop(LPCHARACTER ch, const char * c_pData, size_t uiBytes))
if (ch->GetExchange() || ch->IsOpenSafebox() || ch->GetShopOwner() || ch->IsCubeOpen() || ch->GetOfflineShopOwner())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("?? ?????? ????? ??? ????."));
return (iExtraLen);
}
//altına ekle; (Opsiyonel: int CInputMain::MyOfflineShop(LPCHARACTER ch, const char * c_pData, size_t uiBytes))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return (iExtraLen);
}
#endif
//tekrar arat;
if (ch->GetExchange() || ch->IsOpenSafebox() || ch->GetShopOwner() || ch->GetMyShop() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("창고,거래창등이 열린 상태에서는 개량을 할수가 없습니다"));
ch->ClearRefineMode();
return;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
ch->ClearRefineMode();
return;
}
#endif
//tekrar arat;
void CInputMain::Refine(LPCHARACTER ch, const char* c_pData)
//fonksiyonun altına ekle;
#ifdef ENABLE_AURA_SYSTEM
void CInputMain::Aura(LPCHARACTER pkChar, const char* c_pData)
{
quest:
C* pPC = quest::CQuestManager::instance().GetPCForce(pkChar->GetPlayerID());if (pPC->IsRunning())
return;
TPacketAura* sPacket = (TPacketAura*)c_pData;
switch (sPacket->subheader)
{
case AURA_SUBHEADER_CG_CLOSE:
{
pkChar->CloseAura();
}
break;
case AURA_SUBHEADER_CG_ADD:
{
pkChar->AddAuraMaterial(sPacket->tPos, sPacket->bPos);
}
break;
case AURA_SUBHEADER_CG_REMOVE:
{
pkChar->RemoveAuraMaterial(sPacket->bPos);
}
break;
case AURA_SUBHEADER_CG_REFINE:
{
pkChar->RefineAuraMaterials();
}
break;
default:
break;
}
}
#endif
//tekrar arat; (Opsiyonel: void CInputMain::ShopSearch(LPCHARACTER ch, const char * data, bool bName))
if (ch->IsOpenSafebox() || ch->GetShop() || ch->IsCubeOpen() || ch->IsDead() || ch->GetExchange() || ch->GetMyShop())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("CANT_DO_THIS_BECAUSE_OTHER_WINDOW_OPEN"));
return;
}
//altına ekle; (Opsiyonel: void CInputMain::ShopSearch(LPCHARACTER ch, const char * data, bool bName))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat; (Opsiyonel: void CInputMain::ShopSearchBuy(LPCHARACTER ch, const char * data))
if (ch->IsOpenSafebox() || ch->GetShop() || ch->IsCubeOpen() || ch->IsDead() || ch->GetExchange() || ch->GetMyShop())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("CANT_DO_THIS_BECAUSE_OTHER_WINDOW_OPEN"));
return;
}
//altına ekle; (Opsiyonel: void CInputMain::ShopSearchBuy(LPCHARACTER ch, const char * data))
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return;
}
#endif
//tekrar arat;
}
return (iExtraLen);
}
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
case HEADER_CG_AURA:
Aura(ch, c_pData);
break;
#endif[/CODE]
[CODE lang="cpp" title="game\src\item.cpp"]//arat;
if (ch->GetDesc())
m_dwLastOwnerPID = ch->GetPlayerID();
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if ((GetType() == ITEM_COSTUME && GetSubType() == COSTUME_AURA) && (GetSocket(AURA_ABSORPTION_SOCKET) == 0))
{
long lVal = GetValue(AURA_GRADE_VALUE_FIELD);
if (lVal < 1)
{
SetSocket(AURA_GRADE_VALUE_FIELD, 1);
SetSocket(AURA_ABSORPTION_SOCKET, 1);
}
else
SetSocket(AURA_ABSORPTION_SOCKET, lVal);
}
#endif
//tekrar arat;
else if (GetSubType() == COSTUME_HAIR)
return WEAR_COSTUME_HAIR;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
else if (GetSubType() == COSTUME_AURA)
return WEAR_COSTUME_AURA;
#endif
//tekrar arat;
if (false == IsAccessoryForSocket())
{
[...]
}
else
{
[...]
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if ((GetType() == ITEM_COSTUME) && (GetSubType() == COSTUME_AURA) && (GetSocket(AURA_ABSORBED_SOCKET)))
{
TItemTable* pkItemAbsorbed = ITEM_MANAGER::instance().GetTable(GetSocket(AURA_ABSORBED_SOCKET));
if (pkItemAbsorbed)
{
if ((pkItemAbsorbed->bType == ITEM_ARMOR) && ((pkItemAbsorbed->bSubType == ARMOR_SHIELD) || (pkItemAbsorbed->bSubType == ARMOR_HEAD)))
{
long lDefGrade = pkItemAbsorbed->alValues[1] + long(pkItemAbsorbed->alValues[5] * 2);
double dValue = lDefGrade * (GetSocket(AURA_ABSORPTION_SOCKET));
dValue = (double)dValue / 100;
dValue = (double)dValue + .5;
lDefGrade = (long)dValue;
if (((pkItemAbsorbed->alValues[1] > 0) && (lDefGrade <= 0)) || ((pkItemAbsorbed->alValues[5] > 0) && (lDefGrade < 1)))
lDefGrade += 1;
else if ((pkItemAbsorbed->alValues[1] > 0) || (pkItemAbsorbed->alValues[5] > 0))
lDefGrade += 1;
m_pOwner->ApplyPoint(APPLY_DEF_GRADE_BONUS, bAdd ? lDefGrade : -lDefGrade);
long lDefMagicBonus = pkItemAbsorbed->alValues[0];
dValue = lDefMagicBonus * (GetSocket(AURA_ABSORPTION_SOCKET));
dValue = (double)dValue / 100;
dValue = (double)dValue + .5;
lDefMagicBonus = (long)dValue;
if ((pkItemAbsorbed->alValues[0] > 0) && (lDefMagicBonus < 1))
lDefMagicBonus += 1;
else if (pkItemAbsorbed->alValues[0] > 0)
lDefMagicBonus += 1;
m_pOwner->ApplyPoint(APPLY_MAGIC_DEF_GRADE, bAdd ? lDefMagicBonus : -lDefMagicBonus);
}
}
}
#endif
//tekrar arat;
if (m_pProto->aApplies.bType == APPLY_NONE)
//değiştir;
#ifdef ENABLE_AURA_SYSTEM
if ((m_pProto->aApplies.bType == APPLY_NONE) && (GetSubType() != COSTUME_AURA))
#else
if (m_pProto->aApplies.bType == APPLY_NONE)
#endif
//tekrar arat;
long value = m_pProto->aApplies.lValue;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if ((GetType() == ITEM_COSTUME) && (GetSubType() == COSTUME_AURA))
{
TItemTable* pkItemAbsorbed = ITEM_MANAGER::instance().GetTable(GetSocket(AURA_ABSORBED_SOCKET));
if (pkItemAbsorbed)
{
if (pkItemAbsorbed->aApplies.bType == APPLY_NONE)
continue;
value = pkItemAbsorbed->aApplies.lValue;
if (value < 0)
continue;
double dValue = value * (GetSocket(AURA_ABSORPTION_SOCKET));
dValue = (double)dValue / 100;
dValue = (double)dValue + .5;
dValue = (double)dValue / 10;
value = (long)dValue;
if ((pkItemAbsorbed->aApplies.lValue > 0) && (value <= 0))
value += 1;
}
else
continue;
}
#endif
//tekrar arat;
if (ia.bType == APPLY_SKILL)
m_pOwner->ApplyPoint(ia.bType, bAdd ? ia.sValue : ia.sValue ^ 0x00800000);
else
m_pOwner->ApplyPoint(ia.bType, bAdd ? ia.sValue : -ia.sValue);
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
if ((GetType() == ITEM_COSTUME) && (GetSubType() == COSTUME_AURA))
{
double dValue = sValue * GetSocket(AURA_ABSORPTION_SOCKET);
dValue = (double)dValue / 100;
dValue = (double)dValue / 10;
dValue = (double)dValue + .5;
sValue = (long) dValue;
if ((ia.sValue > 0) && (sValue <= 0))
sValue += 1;
}
#endif
//tekrar arat;
if (false == bAdd)
{
const CItem* pArmor = m_pOwner->GetWear(WEAR_BODY);
toSetValue = (NULL != pArmor) ? pArmor->GetVnum() : m_pOwner->GetOriginalPart(PART_MAIN);
}
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
else if (GetSubType() == COSTUME_AURA)
{
toSetValue = (bAdd == true) ? toSetValue : 0;
toSetPart = PART_AURA;
}
#endif[/CODE]
[CODE lang="cpp" title="Opsiyonel: game\src\offlineshop.cpp"]//arat;
if (ch->GetExchange() || ch->GetShop() || ch->GetMyShop() || ch->GetOfflineShop())
return false;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
return false;
#endif[/CODE]
[CODE lang="cpp" title="Opsiyonel: game\src\offlineshop_manager.cpp"]//arat;
if (ch->IsDead() || ch->GetExchange() || ch->GetMyShop() || ch->GetOfflineShop() || ch->IsCubeOpen() || ch->IsOpenSafebox() || ch->GetShop())
return false;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
return false;
#endif[/CODE]
[CODE lang="cpp" title="game\src\packet.h"]//arat;
HEADER_CG_ITEM_GIVE = 83,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
HEADER_CG_AURA = 84,//Buradaki 84'ün değişmesi gerekebilir.
#endif
//tekrar arat;
HEADER_GC_AUTH_SUCCESS_OPENID = 154,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
HEADER_GC_AURA = 156,//Buradaki 156'nın değişmesi gerekebilir.
#endif
//tekrar arat;
CHR_EQUIPPART_HAIR,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
CHR_EQUIPPART_AURA,
#endif
//tekrar arat;
typedef struct SPacketGCStateCheck
//fonksiyonun altına ekle;
#ifdef ENABLE_AURA_SYSTEM
enum
{
AURA_SUBHEADER_GC_OPEN = 0,
AURA_SUBHEADER_GC_CLOSE,
AURA_SUBHEADER_GC_ADDED,
AURA_SUBHEADER_GC_REMOVED,
AURA_SUBHEADER_GC_REFINED,
AURA_SUBHEADER_CG_CLOSE = 0,
AURA_SUBHEADER_CG_ADD,
AURA_SUBHEADER_CG_REMOVE,
AURA_SUBHEADER_CG_REFINE,
};
typedef struct SPacketAura
{
BYTE header;
BYTE subheader;
bool bWindow;
DWORD dwPrice;
BYTE bPos;
TItemPos tPos;
DWORD dwItemVnum;
DWORD dwMinAbs;
DWORD dwMaxAbs;
} TPacketAura;
#endif[/CODE]
[CODE lang="cpp" title="game\src\packet_info.cpp"]//arat;
Set(HEADER_CG_STATE_CHECKER, sizeof(BYTE), "ServerStateCheck", false);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
Set(HEADER_CG_AURA, sizeof(TPacketAura), "Aura", false);
#endif[/CODE]
[CODE lang="cpp" title="game\src\questlua_pc.cpp"]//arat;
lua_pushboolean(L, (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen()));
//değiştir;
lua_pushboolean(L, (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen() || ch->isAuraOpened(true) || ch->isAuraOpened(false)));
//tekrar arat;
lua_pushboolean(L, (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen()));
//değiştir;
lua_pushboolean(L, (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen() || ch->isAuraOpened(true) || ch->isAuraOpened(false)));
//tekrar arat;
if (ch->IsOpenSafebox() || ch->GetExchange() || ch->GetMyShop() || ch->IsCubeOpen())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래창이 열린상태에서는 상점거래를 할수 가 없습니다."));
return 0;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("CANT_DO_THIS_BECAUSE_OTHER_WINDOW_OPEN"));
return 0;
}
#endif
//tekrar arat;
void RegisterPCFunctionTable()
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
ALUA(pc_open_aura)
{
if (lua_isboolean(L, 1))
{
CQuestManager& qMgr = CQuestManager::instance();
LPCHARACTER pkChar = qMgr.GetCurrentCharacterPtr();
if (pkChar)
pkChar->OpenAura(lua_toboolean(L, 1));
}
else
sys_err("Invalid argument: arg1 must be boolean.");
return 0;
}
#endif
//tekrar arat;
{ "set_dx", pc_set_dx },
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
{"open_aura", pc_open_aura},
#endif[/CODE]
[CODE lang="cpp" title="game\src\shop_manager.cpp"]//arat;
if (pkChr->IsOpenSafebox() || pkChr->GetExchange() || pkChr->GetMyShop() || pkChr->IsCubeOpen())
{
pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래창이 열린상태에서는 상점거래를 할수 가 없습니다."));
return false;
}
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
if (pkChr->isAuraOpened(true) || pkChr->isAuraOpened(false))
{
pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("다른 거래중(창고,교환,상점)에는 사용할 수 없습니다."));
return false;
}
#endif[/CODE]
[CODE lang="cpp" title="GameLib\ActorInstance.h"]//arat;
void SetHair(DWORD eHair);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
void AttachAura(CItemData * pItemData);
#endif[/CODE]
[CODE lang="cpp" title="GameLib\ActorInstanceAttach.cpp"]//arat;
void CActorInstance::__ClearAttachingEffect()
//fonksiyonun altına ekle;
#ifdef ENABLE_AURA_SYSTEM
void CActorInstance::AttachAura(CItemData * pItemData)
{
if (!pItemData)
{
RegisterModelThing(CRaceData:
ART_AURA, nullptr);SetModelInstance(CRaceData:
ART_AURA, CRaceData:
ART_AURA, 0);RefreshActorInstance();
return;
}
RegisterModelThing(CRaceData:
ART_AURA, pItemData->GetModelThing());SetModelInstance(CRaceData:
ART_AURA, CRaceData:
ART_AURA, 0);AttachModelInstance(CRaceData:
ART_MAIN, "Bip01 Spine2", CRaceData:
ART_AURA);}
#endif[/CODE]
[CODE lang="cpp" title="GameLib\ItemData.cpp"]//include'lerin olduğu bölüme yoksa ekle;
#ifdef ENABLE_AURA_SYSTEM
#include "../EffectLib/EffectManager.h"
#endif
//arat;
BOOL CItemData::IsEquipment() const
//fonksiyonun altına ekle;
#ifdef ENABLE_AURA_SYSTEM
void CItemData::SetAuraEffectID(const char* szAuraEffectPath)
{
if (szAuraEffectPath)
CEffectManager::Instance().RegisterEffect2(szAuraEffectPath, &m_dwAuraEffectID);
}
#endif
//tekrar arat;
memset(&m_ItemTable, 0, sizeof(m_ItemTable));
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
m_dwAuraEffectID = 0;
#endif[/CODE]
[CODE lang="cpp" title="GameLib\ItemData.h"]//arat;
enum ECostumeSubTypes
//fonksiyon içindeki sıraya göre ekle;
#ifdef ENABLE_AURA_SYSTEM
COSTUME_AURA = 5,//Buradaki 5'in sıraya göre değişmesi gerekebilir.
#endif
//tekrar arat;
WEAR_ABILITY8,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
WEAR_COSTUME_AURA,
#endif
//tekrar arat;
enum EItemWearableFlag
//fonksiyonun içindeki sıraya göre ekle;
#ifdef ENABLE_AURA_SYSTEM
WEARABLE_COSTUME_AURA = (1 << 18),//Buradaki 18'in sıraya göre değişmesi gerekebilir.
#endif
//tekrar arat;
void SetItemTableData(TItemTable * pItemTable);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
protected:
DWORD m_dwAuraEffectID;
public:
void SetAuraEffectID(const char* szAuraEffectPath);
DWORD GetAuraEffectID() const { return m_dwAuraEffectID; }
enum EAuraMisc
{
AURA_GRADE_MAX_NUM = 6,
};
#endif[/CODE]
[CODE lang="cpp" title="GameLib\ItemManager.cpp"]//arat;
const std::string & c_rstrModelFileName = TokenVector[3];
pItemData->SetDefaultItemData(c_rstrIcon.c_str(), c_rstrModelFileName.c_str());
//değiştir;
#ifdef ENABLE_AURA_SYSTEM
if (!strcmp(c_rstrType.c_str(), "AURA"))
{
const std::string& c_rstrAuraEffectFileName = TokenVector[3];
pItemData->SetAuraEffectID(c_rstrAuraEffectFileName.c_str());
pItemData->SetDefaultItemData(c_rstrIcon.c_str());
}
else
{
const std::string & c_rstrModelFileName = TokenVector[3];
pItemData->SetDefaultItemData(c_rstrIcon.c_str(), c_rstrModelFileName.c_str());
}
#else
const std::string & c_rstrModelFileName = TokenVector[3];
pItemData->SetDefaultItemData(c_rstrIcon.c_str(), c_rstrModelFileName.c_str());
#endif[/CODE]
[CODE lang="cpp" title="GameLib\RaceData.h"]//arat;
PART_HAIR,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
PART_AURA,
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\GameType.h"]//arat;
const DWORD c_New_Equipment_Start = c_Equipment_Start + 24;//Buradaki 24 sayısı dosyana göre değişebilir.
//değiştir;
#ifdef ENABLE_AURA_SYSTEM
const DWORD c_New_Equipment_Start = c_Equipment_Start + 25;//Buradaki 25 sayısını dosyana göre artırman ya da azaltman gerekebilir. Değiştiğin sayının 1 üstünü yap.
#else
const DWORD c_New_Equipment_Start = c_Equipment_Start + 24;//Buradaki 24 sayısı dosyana göre değişebilir.
#endif
//tekrar arat;
const DWORD c_Costume_Slot_Acce = c_Costume_Slot_Start + 4;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
const DWORD c_Costume_Slot_Aura = c_Costume_Slot_Start + 5;//Bu 5 rakamını fonksiyon içindeki sıraya göre değiştirmen gerekebilir. Gördüğün kısımdaki son rakamın 1 üstünü yaz.
#endif
//tekrar arat;
const DWORD c_Costume_Slot_Count = 5;//Buradaki 5 rakamı dosyana göre değişkenlik gösterebilir.
//değiştir;
#ifdef ENABLE_AURA_SYSTEM
const DWORD c_Costume_Slot_Count = 6;//Buradaki 6 rakamını değiştirdiğin rakamın 1 üstüyle değiştirmen gerekir.
#else
const DWORD c_Costume_Slot_Count = 5;//Buradaki 5 rakamı dosyana göre değişkenlik gösterebilir.
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\InstanceBase.cpp"]//arat;
SetHair(c_rkCreateData.m_dwHair);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
SetAura(c_rkCreateData.m_dwAura);
#endif
//tekrar arat;
void CInstanceBase::SetArmor(DWORD dwArmor)
//fonksiyonun altına ekle;
#ifdef ENABLE_AURA_SYSTEM
bool CInstanceBase::SetAura(DWORD eAura)
{
if (!IsPC() || IsPoly() || __IsShapeAnimalWear())
return false;
//m_GraphicThingInstance.ChangePart(CRaceData:
ART_AURA, eAura);if (!eAura)
{
if (m_auraRefineEffect)
{
__DetachEffect(m_auraRefineEffect);
m_auraRefineEffect = 0;
}
m_awPart[CRaceData:
ART_AURA] = 0;return true;
}
CItemData* pItemData;
if (!CItemManager::Instance().GetItemDataPointer(eAura, &pItemData))
{
if (m_auraRefineEffect)
{
__DetachEffect(m_auraRefineEffect);
m_auraRefineEffect = 0;
}
m_awPart[CRaceData:
ART_AURA] = 0;return true;
}
ClearAuraEffect();
BYTE byRace = (BYTE)GetRace();
BYTE byJob = (BYTE)RaceToJob(byRace);
BYTE bySex = (BYTE)RaceToSex(byRace);
byJob += 1;
if (bySex == 0)
byJob += 5;
//m_GraphicThingInstance.AttachAura(pItemData);
float fScaleX, fScaleY, fScaleZ, fPositionX, fPositionY, fPositionZ;
if (pItemData->GetItemScale(byJob, fScaleX, fScaleY, fScaleZ, fPositionX, fPositionY, fPositionZ))
{
if (m_kHorse.IsMounting() && byJob != NRaceData::JOB_WOLFMAN)
fPositionZ += 15.0f;
// D3DXVECTOR3 * sendPosition;
// sendPosition->x = fPositionX;
// sendPosition->y = fPositionY;
// sendPosition->z = fPositionZ;
m_auraRefineEffect = m_GraphicThingInstance.AttachEffectByID(NULL, "Bip01 Spine2", pItemData->GetAuraEffectID(), NULL);
m_awPart[CRaceData:
ART_AURA] = eAura;//__EffectContainer_AttachEffect(m_auraRefineEffect);
}
return true;
}
void CInstanceBase::ChangeAura(DWORD eAura)
{
if (!IsPC())
return;
SetAura(eAura);
}
void CInstanceBase::ClearAuraEffect()
{
if (!m_auraRefineEffect)
return;
__DetachEffect(m_auraRefineEffect);
m_auraRefineEffect = 0;
}
#endif
//tekrar arat;
DWORD eHair = GetPart(CRaceData:
ART_HAIR);//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
DWORD eAura = GetPart(CRaceData:
ART_AURA);#endif
//tekrar arat;
SetHair(eHair);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
SetAura(eAura);
#endif
//tekrar arat;
m_armorRefineEffect = 0;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
m_auraRefineEffect = 0;
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\InstanceBase.h"]//arat;
bool m_isMain;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
DWORD m_dwAura;
#endif
//tekrar arat;
AFFECT_NUM = 64,
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
AFFECT_AURA1,
AFFECT_AURA2,
AFFECT_AURA3,
AFFECT_AURA4,
AFFECT_AURA5,
AFFECT_AURA6,
#endif
//tekrar arat;
void SetHair(DWORD eHair);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
bool SetAura(DWORD eAura);
void ChangeAura(DWORD eAura);
#endif
//tekrar arat;
void __ClearArmorRefineEffect();
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
void ClearAuraEffect();
#endif
//tekrar arat;
DWORD m_armorRefineEffect;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
DWORD m_auraRefineEffect;
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\Locale_inc.h"]//müsait bir yere ekle;
#define ENABLE_AURA_SYSTEM[/CODE]
[CODE lang="cpp" title="UserInterface\NetworkActorManager.cpp"]//arat;
m_dwHair = src.m_dwHair;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
m_dwAura = src.m_dwAura;
#endif
//tekrar arat;
m_dwHair=0;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
m_dwAura = 0;
#endif
//tekrar arat;
kCreateData.m_dwHair=rkNetActorData.m_dwHair;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
kCreateData.m_dwAura = rkNetActorData.m_dwAura;
#endif
//tekrar arat;
pkInstFind->ChangeGuild(c_rkNetUpdateActorData.m_dwGuildID);
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
pkInstFind->ChangeAura(c_rkNetUpdateActorData.m_dwAura);
#endif
//tekrar arat;
rkNetActorData.m_dwHair=c_rkNetUpdateActorData.m_dwHair;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
rkNetActorData.m_dwAura = c_rkNetUpdateActorData.m_dwAura;
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\NetworkActorManager.h"]//arat;
DWORD m_dwHair;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
DWORD m_dwAura;
#endif
//tekrar arat;
DWORD m_dwHair;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
DWORD m_dwAura;
#endif
//tekrar arat;
m_dwHair=0;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
m_dwAura = 0;
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\Packet.h"]//arat;
HEADER_CG_GIVE_ITEM = 83,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
HEADER_CG_AURA = 84,//Buradaki 84'ün değişmesi gerekebilir.
#endif
//tekrar arat;
HEADER_GC_AUTH_SUCCESS_OPENID = 154,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
HEADER_GC_AURA = 156,//Buradaki 156'nın değişmesi gerekebilir.
#endif
//tekrar arat;
CHR_EQUIPPART_HAIR,
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
CHR_EQUIPPART_AURA,
#endif
//tekrar arat;
#pragma pack(pop)
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
enum EAuraInfo
{
AURA_ABSORPTION_SOCKET = 0,
AURA_ABSORBED_SOCKET = 1,
AURA_LEVEL_SOCKET = 2,
AURA_WINDOW_MAX_MATERIALS = 2,
AURA_ICE_RUNIC = 49990,
};
enum
{
AURA_SUBHEADER_GC_OPEN = 0,
AURA_SUBHEADER_GC_CLOSE,
AURA_SUBHEADER_GC_ADDED,
AURA_SUBHEADER_GC_REMOVED,
AURA_SUBHEADER_GC_REFINED,
AURA_SUBHEADER_CG_CLOSE = 0,
AURA_SUBHEADER_CG_ADD,
AURA_SUBHEADER_CG_REMOVE,
AURA_SUBHEADER_CG_REFINE,
};
typedef struct SPacketAura
{
BYTE header;
BYTE subheader;
bool bWindow;
DWORD dwPrice;
BYTE bPos;
TItemPos tPos;
DWORD dwItemVnum;
DWORD dwMinAbs;
DWORD dwMaxAbs;
} TPacketAura;
typedef struct SAuraMaterial
{
BYTE bHere;
WORD wCell;
} TAuraMaterial;
typedef struct SAuraResult
{
DWORD dwItemVnum;
DWORD dwMinAbs;
DWORD dwMaxAbs;
} TAuraResult;
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonApplication.h"]//include'lerin olduğu bölüme ekle;
#ifdef ENABLE_AURA_SYSTEM
#include "PythonAura.h"
#endif
//arat;
CPythonSafeBox m_pySafeBox;
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
CPythonAura m_pyAura;
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonApplicationModule.cpp"]//arat;
#ifdef ENABLE_COSTUME_SYSTEM
PyModule_AddIntConstant(poModule, "ENABLE_COSTUME_SYSTEM", 1);
#else
PyModule_AddIntConstant(poModule, "ENABLE_COSTUME_SYSTEM", 0);
#endif
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
PyModule_AddIntConstant(poModule, "ENABLE_AURA_SYSTEM", 1);
#else
PyModule_AddIntConstant(poModule, "ENABLE_AURA_SYSTEM", 0);
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonCharacterModule.cpp"]//arat;
PyModule_AddIntConstant(poModule, "NEW_AFFECT_DRAGON_SOUL_DECK2", CInstanceBase::NEW_AFFECT_DRAGON_SOUL_DECK2);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
PyModule_AddIntConstant(poModule, "AFFECT_AURA1", CInstanceBase::AFFECT_AURA1);
PyModule_AddIntConstant(poModule, "AFFECT_AURA2", CInstanceBase::AFFECT_AURA2);
PyModule_AddIntConstant(poModule, "AFFECT_AURA3", CInstanceBase::AFFECT_AURA3);
PyModule_AddIntConstant(poModule, "AFFECT_AURA4", CInstanceBase::AFFECT_AURA4);
PyModule_AddIntConstant(poModule, "AFFECT_AURA5", CInstanceBase::AFFECT_AURA5);
PyModule_AddIntConstant(poModule, "AFFECT_AURA6", CInstanceBase::AFFECT_AURA6);
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonItemModule.cpp"]//arat;
PyModule_AddIntConstant(poModule, "COSTUME_TYPE_HAIR", CItemData::COSTUME_HAIR);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
PyModule_AddIntConstant(poModule, "COSTUME_TYPE_AURA", CItemData::COSTUME_AURA);
#endif
//tekrar arat;
PyModule_AddIntConstant(poModule, "COSTUME_SLOT_HAIR", c_Costume_Slot_Hair);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
PyModule_AddIntConstant(poModule, "COSTUME_TYPE_AURA", CItemData::COSTUME_AURA);
PyModule_AddIntConstant(poModule, "COSTUME_SLOT_AURA", c_Costume_Slot_Aura);
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonNetworkStream.cpp"]//arat;
Set(HEADER_GC_DRAGON_SOUL_REFINE, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCDragonSoulRefine), STATIC_SIZE_PACKET));
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
Set(HEADER_GC_AURA, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketAura), false));
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonNetworkStream.h"]//arat;
void __TEST_SetSkillGroupFake(int iIndex);
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
bool SendAuraClosePacket();
bool SendAuraAddPacket(TItemPos tPos, BYTE bPos);
bool SendAuraRemovePacket(BYTE bPos);
bool SendAuraRefinePacket();
#endif
//tekrar arat;
bool RecvChannelPacket();
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
bool RecvAuraPacket(bool bReturn = false);
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonNetworkStreamPhaseGame.cpp"]//arat;
case HEADER_GC_DRAGON_SOUL_REFINE:
ret = RecvDragonSoulRefine();
break;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
case HEADER_GC_AURA:
ret = RecvAuraPacket();
break;
#endif
//dosyanın sonuna ekle;
#ifdef ENABLE_AURA_SYSTEM
bool CPythonNetworkStream::RecvAuraPacket(bool bReturn)
{
TPacketAura sPacket;
if (!Recv(sizeof(sPacket), &sPacket))
return bReturn;
bReturn = true;
switch (sPacket.subheader)
{
case AURA_SUBHEADER_GC_OPEN:
{
CPythonAura::Instance().Clear();
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "ActAura", Py_BuildValue("(ib)", 1, sPacket.bWindow));
}
break;
case AURA_SUBHEADER_GC_CLOSE:
{
CPythonAura::Instance().Clear();
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "ActAura", Py_BuildValue("(ib)", 2, sPacket.bWindow));
}
break;
case AURA_SUBHEADER_GC_ADDED:
{
CPythonAura::Instance().AddMaterial(sPacket.dwPrice, sPacket.bPos, sPacket.tPos);
if (sPacket.bPos == 1)
{
CPythonAura::Instance().AddResult(sPacket.dwItemVnum, sPacket.dwMinAbs, sPacket.dwMaxAbs);
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "AlertAura", Py_BuildValue("(b)", sPacket.bWindow));
}
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "ActAura", Py_BuildValue("(ib)", 3, sPacket.bWindow));
}
break;
case AURA_SUBHEADER_GC_REMOVED:
{
CPythonAura::Instance().RemoveMaterial(sPacket.dwPrice, sPacket.bPos);
if (sPacket.bPos == 0)
CPythonAura::Instance().RemoveMaterial(sPacket.dwPrice, 1);
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "ActAura", Py_BuildValue("(ib)", 4, sPacket.bWindow));
}
break;
case AURA_SUBHEADER_GC_REFINED:
{
if (sPacket.bPos != 255)
{
if (sPacket.dwMaxAbs == 0)
CPythonAura::Instance().RemoveMaterial(sPacket.dwPrice, 1);
else
{
CPythonAura::Instance().RemoveMaterial(sPacket.dwPrice, 0);
CPythonAura::Instance().RemoveMaterial(sPacket.dwPrice, 1);
}
}
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "ActAura", Py_BuildValue("(ib)", 4, sPacket.bWindow));
}
break;
default:
TraceError("CPythonNetworkStream::RecvAuraPacket: unknown subheader %d\n.", sPacket.subheader);
break;
}
return bReturn;
}
bool CPythonNetworkStream::SendAuraClosePacket()
{
if (!__CanActMainInstance())
return true;
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_CG_AURA;
sPacket.subheader = AURA_SUBHEADER_CG_CLOSE;
sPacket.dwPrice = 0;
sPacket.bPos = 0;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
if (!Send(sizeof(sPacket), &sPacket))
return false;
return true;
}
bool CPythonNetworkStream::SendAuraAddPacket(TItemPos tPos, BYTE bPos)
{
if (!__CanActMainInstance())
return true;
TPacketAura sPacket;
sPacket.header = HEADER_CG_AURA;
sPacket.subheader = AURA_SUBHEADER_CG_ADD;
sPacket.dwPrice = 0;
sPacket.bPos = bPos;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
if (!Send(sizeof(sPacket), &sPacket))
return false;
return true;
}
bool CPythonNetworkStream::SendAuraRemovePacket(BYTE bPos)
{
if (!__CanActMainInstance())
return true;
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_CG_AURA;
sPacket.subheader = AURA_SUBHEADER_CG_REMOVE;
sPacket.dwPrice = 0;
sPacket.bPos = bPos;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
if (!Send(sizeof(sPacket), &sPacket))
return false;
return true;
}
bool CPythonNetworkStream::SendAuraRefinePacket()
{
if (!__CanActMainInstance())
return true;
TItemPos tPos;
tPos.window_type = INVENTORY;
tPos.cell = 0;
TPacketAura sPacket;
sPacket.header = HEADER_CG_AURA;
sPacket.subheader = AURA_SUBHEADER_CG_REFINE;
sPacket.dwPrice = 0;
sPacket.bPos = 0;
sPacket.tPos = tPos;
sPacket.dwItemVnum = 0;
sPacket.dwMinAbs = 0;
sPacket.dwMaxAbs = 0;
if (!Send(sizeof(sPacket), &sPacket))
return false;
return true;
}
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\PythonNetworkStreamPhaseGameActor.cpp"]//arat;
kNetActorData.m_dwHair=0;
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
kNetActorData.m_dwAura = 0;
#endif
//tekrar arat;
kNetActorData.m_dwHair = chrInfoPacket.awPart[CHR_EQUIPPART_HAIR];
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
kNetActorData.m_dwAura = chrInfoPacket.awPart[CHR_EQUIPPART_AURA];
#endif
//tekrar arat;
kNetUpdateActorData.m_dwHair = chrUpdatePacket.awPart[CHR_EQUIPPART_HAIR];
//altına ekle;
#ifdef ENABLE_AURA_SYSTEM
kNetUpdateActorData.m_dwAura = chrUpdatePacket.awPart[CHR_EQUIPPART_AURA];
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\StdAfx.h"]//arat;
extern const std::string& ApplicationStringTable_GetString(DWORD dwID);
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
void initAura();
#endif[/CODE]
[CODE lang="cpp" title="UserInterface\UserInterface.cpp"]//arat;
NANOBEGIN
//üstüne ekle;
#ifdef ENABLE_AURA_SYSTEM
initAura();
#endif[/CODE]
[CODE lang="python" title="root\game.py"]#dosyanın sonuna ekle;
if app.ENABLE_AURA_SYSTEM:
def ActAura(self, iAct, bWindow):
if self.interface:
self.interface.ActAura(iAct, bWindow)
def AlertAura(self, bWindow):
snd.PlaySound("sound/ui/make_soket.wav")
# if bWindow:
# self.PopupMessage(localeInfo.AURA_DEL_SERVEITEM)
# else:
# self.PopupMessage(localeInfo.AURA_DEL_ABSORDITEM)[/CODE]
[CODE lang="python" title="root\interfacemodule.py"]#import'ların olduğu bölüme ekle;
if app.ENABLE_AURA_SYSTEM:
import uiaura
#arat;
def __MakeCubeWindow(self):
#fonksiyonun altına ekle;
if app.ENABLE_AURA_SYSTEM:
def __MakeAuraWindow(self):
self.wndAuraRefine = uiaura.RefineWindow(self.wndInventory, self)
self.wndAuraRefine.LoadWindow()
self.wndAuraRefine.Hide()
self.wndAuraAbsorption = uiaura.AbsorbWindow(self.wndInventory, self)
self.wndAuraAbsorption.LoadWindow()
self.wndAuraAbsorption.Hide()
if self.wndInventory:
self.wndInventory.SetAuraWindow(self.wndAuraAbsorption, self.wndAuraRefine)
#tekrar arat;
self.__MakeWebWindow()
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
self.__MakeAuraWindow()
#tekrar arat;
self.privateShopBuilder.SetItemToolTip(self.tooltipItem)
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
self.wndAuraAbsorption.SetItemToolTip(self.tooltipItem)
self.wndAuraRefine.SetItemToolTip(self.tooltipItem)
#tekrar arat;
self.wndChatLog.Destroy()
#üstüne ekle;
if app.ENABLE_AURA_SYSTEM:
if self.wndAuraAbsorption:
self.wndAuraAbsorption.Destroy()
if self.wndAuraRefine:
self.wndAuraRefine.Destroy()
#tekrar arat;
del self.bigBoard
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
del self.wndAuraAbsorption
del self.wndAuraRefine
#tekrar arat;
def CloseWbWindow(self):
#fonksiyonun altına ekle;
if app.ENABLE_AURA_SYSTEM:
def ActAura(self, iAct, bWindow):
if iAct == 1:
if bWindow == True:
if not self.wndAuraRefine.IsOpened():
self.wndAuraRefine.Open()
if not self.wndInventory.IsShow():
self.wndInventory.Show()
else:
if not self.wndAuraAbsorption.IsOpened():
self.wndAuraAbsorption.Open()
if not self.wndInventory.IsShow():
self.wndInventory.Show()
self.wndInventory.RefreshBagSlotWindow()
elif iAct == 2:
if bWindow == True:
if self.wndAuraRefine.IsOpened():
self.wndAuraRefine.Close()
else:
if self.wndAuraAbsorption.IsOpened():
self.wndAuraAbsorption.Close()
self.wndInventory.RefreshBagSlotWindow()
elif iAct == 3 or iAct == 4:
if bWindow == True:
if self.wndAuraRefine.IsOpened():
self.wndAuraRefine.Refresh(iAct)
else:
if self.wndAuraAbsorption.IsOpened():
self.wndAuraAbsorption.Refresh(iAct)
self.wndInventory.RefreshBagSlotWindow()[/CODE]
[CODE lang="python" title="root\playersettingmodule.py"]#arat;
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+37, "", "d:/ymir work/effect/etc/guild_war_flag/flag_yellow.mse")
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT + 60, "Bip01 Spine2", "d:/ymir work/pc/common/effect/aura/aura_01_49_001.mse")#Buradaki 60 sayısı InstanceBase.h'de AFFECT_AURA1,'in sırasıdır. Oradaki sıraya göre değişkenlik gösterebilir.
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT + 61, "Bip01 Spine2", "d:/ymir work/pc/common/effect/aura/aura_50_99_002.mse")#Buradaki 61 sayısı InstanceBase.h'de AFFECT_AURA2,'in sırasıdır. Oradaki sıraya göre değişkenlik gösterebilir.
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT + 62, "Bip01 Spine2", "d:/ymir work/pc/common/effect/aura/aura_100_149_003.mse")#Buradaki 62 sayısı InstanceBase.h'de AFFECT_AURA3,'in sırasıdır. Oradaki sıraya göre değişkenlik gösterebilir.
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT + 63, "Bip01 Spine2", "d:/ymir work/pc/common/effect/aura/aura_150_199_004.mse")#Buradaki 63 sayısı InstanceBase.h'de AFFECT_AURA4,'in sırasıdır. Oradaki sıraya göre değişkenlik gösterebilir.
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT + 64, "Bip01 Spine2", "d:/ymir work/pc/common/effect/aura/aura_200_249_005.mse")#Buradaki 64 sayısı InstanceBase.h'de AFFECT_AURA5,'in sırasıdır. Oradaki sıraya göre değişkenlik gösterebilir.
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT + 65, "Bip01 Spine1", "d:/ymir work/pc/common/effect/aura/aura_250_006.mse")#Buradaki 65 sayısı InstanceBase.h'de AFFECT_AURA6,'in sırasıdır. Oradaki sıraya göre değişkenlik gösterebilir.[/CODE]
[CODE lang="python" title="root\uiinventory.py"]#import'ların olduğu bölüme ekle;
if app.ENABLE_AURA_SYSTEM:
import aura
#arat;
self.wndCostume = None
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
self.listAttachedAuras = []
#arat;
self.wndItem.RefreshSlot()
#üstüne ekle;
if app.ENABLE_AURA_SYSTEM:
slotNumberChecked = 0
for j in xrange(aura.WINDOW_MAX_MATERIALS):
(isHere, iCell) = aura.GetAttachedItem(j)
if isHere:
if iCell == slotNumber:
self.wndItem.ActivateSlot(i, (36.00 / 255.0), (222.00 / 255.0), (3.00 / 255.0), 1.0)
if not slotNumber in self.listAttachedAuras:
self.listAttachedAuras.append(slotNumber)
slotNumberChecked = 1
else:
if slotNumber in self.listAttachedAuras and not slotNumberChecked:
self.wndItem.DeactivateSlot(i)
self.listAttachedAuras.remove(slotNumber)
#arat;
if app.ENABLE_DRAGON_SOUL_SYSTEM:
if self.wndDragonSoulRefine.IsShow():
self.wndDragonSoulRefine.AutoSetItem((player.INVENTORY, slotIndex), 1)
return
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
itemVNum = player.GetItemIndex(slotIndex)
if self.isShowAuraWindow():
if itemVNum >= 21900 and itemVNum <= 21999:
return
aura.Add(player.INVENTORY, slotIndex, 255)
return
#arat;
def OnMoveWindow(self, x, y):
#üstüne ekle;
if app.ENABLE_AURA_SYSTEM:
def SetAuraWindow(self, wndAuraAbsorption, wndAuraRefine):
self.wndAuraRefine = wndAuraRefine
self.wndAuraAbsorption = wndAuraAbsorption
def isShowAuraWindow(self):
if self.wndAuraRefine:
if self.wndAuraRefine.IsShow():
return 1
if self.wndAuraAbsorption:
if self.wndAuraAbsorption.IsShow():
return 1
return 0[/CODE]
[CODE lang="python" title="root\uitooltip.py"]#import'ların olduğu bölüme ekle;
if app.ENABLE_AURA_SYSTEM:
import aura
#arat;
affectString = self.__GetAffectString(type, value)
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
if item.GetItemType() == item.ITEM_TYPE_COSTUME and item.GetItemSubType() == item.COSTUME_TYPE_AURA and itemAbsChance:
value = self.CalcAcceValue(value, itemAbsChance)
affectString = self.__GetAffectString(type, value)
#tekrar arat;
isCostumeBody = 0
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
isCostumeAura = 0
#tekrar arat;
isCostumeBody = item.COSTUME_TYPE_BODY == itemSubType
#altına ekle;
if app.ENABLE_AURA_SYSTEM:
isCostumeAura = item.COSTUME_TYPE_AURA == itemSubType
#tekrar arat;
elif 0 != isCostumeItem:
self.__AppendLimitInformation()
#altına ekle;
if app.ENABLE_AURA_SYSTEM and (itemVnum >= 49001 and itemVnum <= 49006):
## ABSORPTION RATE
absChance = (float(metinSlot[aura.ABSORPTION_SOCKET]) / 10.0)
self.AppendTextLine(localeInfo.AURA_LEVEL_STEP % (int(metinSlot[aura.LEVEL_SOCKET]), int(metinSlot[aura.LEVEL_SOCKET])), self.CONDITION_COLOR)
self.AppendTextLine(localeInfo.AURA_DRAIN_PER % (absChance), self.CONDITION_COLOR)
## END ABSOPRTION RATE
itemAbsorbedVnum = int(metinSlot[aura.ABSORBED_SOCKET])
if itemAbsorbedVnum:
## ATTACK / DEFENCE
item.SelectItem(itemAbsorbedVnum)
if item.GetItemType() == item.ITEM_TYPE_WEAPON:
if item.GetItemSubType() == item.WEAPON_FAN:
self.__AppendMagicAttackInfo(absChance)
item.SelectItem(itemAbsorbedVnum)
self.__AppendAttackPowerInfo(absChance)
else:
self.__AppendAttackPowerInfo(absChance)
item.SelectItem(itemAbsorbedVnum)
self.__AppendMagicAttackInfo(absChance)
elif item.GetItemType() == item.ITEM_TYPE_ARMOR:
defGrade = item.GetValue(1)
defBonus = item.GetValue(5) * 2
defGrade = self.CalcAcceValue(defGrade, absChance)
defBonus = self.CalcAcceValue(defBonus, absChance)
if defGrade > 0:
self.AppendSpace(5)
self.AppendTextLine(localeInfo.TOOLTIP_ITEM_DEF_GRADE % (defGrade + defBonus), self.GetChangeTextLineColor(defGrade))
item.SelectItem(itemAbsorbedVnum)
self.__AppendMagicDefenceInfo(absChance)
## END ATTACK / DEFENCE
## EFFECT
item.SelectItem(itemAbsorbedVnum)
for i in xrange(item.ITEM_APPLY_MAX_NUM):
(affectType, affectValue) = item.GetAffect(i)
affectValue = self.CalcAcceValue(affectValue, absChance)
affectString = self.__GetAffectString(affectType, affectValue)
if affectString and affectValue > 0:
self.AppendTextLine(affectString, self.GetChangeTextLineColor(affectValue))
item.SelectItem(itemAbsorbedVnum)
# END EFFECT
item.SelectItem(itemVnum)
## ATTR
self.__AppendAttributeInformation(attrSlot, absChance)
# END ATTR
else:
# ATTR
self.__AppendAttributeInformation(attrSlot)
# END ATTR
else:
if item.COSTUME_TYPE_MOUNT == itemSubType:
if app.ENABLE_MODEL_RENDER_TARGET and systemSetting.IsPreviewModel() == 1:
(affectType, affectValue) = item.GetAffect(0)
if affectValue != 0:
self.__ModelPreview(affectValue)
else:
self.__AppendAffectInformation()#mount bonusses are hidden now.
self.__AppendAttributeInformation(attrSlot)
#tekrar arat;
class HyperlinkItemToolTip(ItemToolTip):
#üstüne ekle;
if app.ENABLE_AURA_SYSTEM:
def SetAuraResultItem(self, slotIndex, window_type = player.INVENTORY):
(itemVnum, MinAbs, MaxAbs) = aura.GetResultItem()
if not itemVnum:
return
self.ClearToolTip()
metinSlot = [player.GetItemMetinSocket(window_type, slotIndex, i) for i in xrange(player.METIN_SOCKET_MAX_NUM)]
attrSlot = [player.GetItemAttribute(window_type, slotIndex, i) for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM)]
item.SelectItem(itemVnum)
itemType = item.GetItemType()
itemSubType = item.GetItemSubType()
if itemType != item.ITEM_TYPE_COSTUME and itemSubType != item.COSTUME_TYPE_AURA:
return
absChance = float(MinAbs) / 10.0
itemDesc = item.GetItemDescription()
self.__AdjustMaxWidth(attrSlot, itemDesc)
self.__SetItemTitle(itemVnum, metinSlot, attrSlot)
self.AppendDescription(itemDesc, 26)
self.AppendDescription(item.GetItemSummary(), 26, self.CONDITION_COLOR)
self.__AppendLimitInformation()
## ABSORPTION RATE
self.AppendTextLine(localeInfo.AURA_LEVEL_STEP % (int(metinSlot[aura.LEVEL_SOCKET]), int(metinSlot[aura.LEVEL_SOCKET])), self.CONDITION_COLOR)
self.AppendTextLine(localeInfo.AURA_DRAIN_PER % (absChance), self.CONDITION_COLOR)
## END ABSOPRTION RATE
itemAbsorbedVnum = int(metinSlot[aura.ABSORBED_SOCKET])
if itemAbsorbedVnum:
## ATTACK / DEFENCE
item.SelectItem(itemAbsorbedVnum)
if item.GetItemType() == item.ITEM_TYPE_WEAPON:
if item.GetItemSubType() == item.WEAPON_FAN:
self.__AppendMagicAttackInfo(absChance)
item.SelectItem(itemAbsorbedVnum)
self.__AppendAttackPowerInfo(absChance)
else:
self.__AppendAttackPowerInfo(absChance)
item.SelectItem(itemAbsorbedVnum)
self.__AppendMagicAttackInfo(absChance)
elif item.GetItemType() == item.ITEM_TYPE_ARMOR:
defGrade = item.GetValue(1)
defBonus = item.GetValue(5) * 2
defGrade = self.CalcAcceValue(defGrade, absChance)
defBonus = self.CalcAcceValue(defBonus, absChance)
if defGrade > 0:
self.AppendSpace(5)
self.AppendTextLine(localeInfo.TOOLTIP_ITEM_DEF_GRADE % (defGrade + defBonus), self.GetChangeTextLineColor(defGrade))
item.SelectItem(itemAbsorbedVnum)
self.__AppendMagicDefenceInfo(absChance)
## END ATTACK / DEFENCE
## EFFECT
item.SelectItem(itemAbsorbedVnum)
for i in xrange(item.ITEM_APPLY_MAX_NUM):
(affectType, affectValue) = item.GetAffect(i)
affectValue = self.CalcAcceValue(affectValue, absChance)
affectString = self.__GetAffectString(affectType, affectValue)
if affectString and affectValue > 0:
self.AppendTextLine(affectString, self.GetChangeTextLineColor(affectValue))
item.SelectItem(itemAbsorbedVnum)
# END EFFECT
item.SelectItem(itemVnum)
## ATTR
self.__AppendAttributeInformation(attrSlot, MaxAbs)
# END ATTR
self.AppendWearableInformation()
self.ShowToolTip()
def SetAuraResultAbsItem(self, slotIndex1, slotIndex2, window_type = player.INVENTORY):
itemVnumAura = player.GetItemIndex(window_type, slotIndex1)
itemVnumTarget = player.GetItemIndex(window_type, slotIndex2)
if not itemVnumAura or not itemVnumTarget:
return
self.ClearToolTip()
item.SelectItem(itemVnumAura)
itemType = item.GetItemType()
itemSubType = item.GetItemSubType()
if itemType != item.ITEM_TYPE_COSTUME and itemSubType != item.COSTUME_TYPE_AURA:
return
metinSlot = [player.GetItemMetinSocket(window_type, slotIndex1, i) for i in xrange(player.METIN_SOCKET_MAX_NUM)]
attrSlot = [player.GetItemAttribute(window_type, slotIndex2, i) for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM)]
itemDesc = item.GetItemDescription()
self.__AdjustMaxWidth(attrSlot, itemDesc)
self.__SetItemTitle(itemVnumAura, metinSlot, attrSlot)
self.AppendDescription(itemDesc, 26)
self.AppendDescription(item.GetItemSummary(), 26, self.CONDITION_COLOR)
item.SelectItem(itemVnumAura)
self.__AppendLimitInformation()
absChance = float(metinSlot[aura.ABSORPTION_SOCKET]) / 10.0
## ABSORPTION RATE
self.AppendTextLine(localeInfo.AURA_LEVEL_STEP % (int(metinSlot[aura.LEVEL_SOCKET]), int(metinSlot[aura.LEVEL_SOCKET])), self.CONDITION_COLOR)
self.AppendTextLine(localeInfo.AURA_DRAIN_PER % (absChance), self.CONDITION_COLOR)
## END ABSOPRTION RATE
## ATTACK / DEFENCE
itemAbsorbedVnum = itemVnumTarget
item.SelectItem(itemAbsorbedVnum)
if item.GetItemType() == item.ITEM_TYPE_WEAPON:
if item.GetItemSubType() == item.WEAPON_FAN:
self.__AppendMagicAttackInfo(absChance)
item.SelectItem(itemAbsorbedVnum)
self.__AppendAttackPowerInfo(absChance)
else:
self.__AppendAttackPowerInfo(absChance)
item.SelectItem(itemAbsorbedVnum)
self.__AppendMagicAttackInfo(absChance)
elif item.GetItemType() == item.ITEM_TYPE_ARMOR:
defGrade = item.GetValue(1)
defBonus = item.GetValue(5) * 2
defGrade = self.CalcAcceValue(defGrade, absChance)
defBonus = self.CalcAcceValue(defBonus, absChance)
if defGrade > 0:
self.AppendSpace(5)
self.AppendTextLine(localeInfo.TOOLTIP_ITEM_DEF_GRADE % (defGrade + defBonus), self.GetChangeTextLineColor(defGrade))
item.SelectItem(itemAbsorbedVnum)
self.__AppendMagicDefenceInfo(absChance)
## END ATTACK / DEFENCE
## EFFECT
item.SelectItem(itemAbsorbedVnum)
for i in xrange(item.ITEM_APPLY_MAX_NUM):
(affectType, affectValue) = item.GetAffect(i)
affectValue = self.CalcAcceValue(affectValue, absChance)
affectString = self.__GetAffectString(affectType, affectValue)
if affectString and affectValue > 0:
self.AppendTextLine(affectString, self.GetChangeTextLineColor(affectValue))
item.SelectItem(itemAbsorbedVnum)
## END EFFECT
## ATTR
item.SelectItem(itemAbsorbedVnum)
for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM):
type = attrSlot[0]
value = attrSlot[1]
if not value:
continue
value = self.CalcAcceValue(value, absChance)
affectString = self.__GetAffectString(type, value)
if affectString and value > 0:
affectColor = self.__GetAttributeColor(i, value)
self.AppendTextLine(affectString, affectColor)
item.SelectItem(itemAbsorbedVnum)
## END ATTR
## WEARABLE
item.SelectItem(itemVnumAura)
self.AppendSpace(5)
self.AppendTextLine(localeInfo.TOOLTIP_ITEM_WEARABLE_JOB, self.NORMAL_COLOR)
item.SelectItem(itemVnumAura)
flagList = (
not item.IsAntiFlag(item.ITEM_ANTIFLAG_WARRIOR),
not item.IsAntiFlag(item.ITEM_ANTIFLAG_ASSASSIN),
not item.IsAntiFlag(item.ITEM_ANTIFLAG_SURA),
not item.IsAntiFlag(item.ITEM_ANTIFLAG_SHAMAN)
)
flagList += (not item.IsAntiFlag(item.ITEM_ANTIFLAG_WOLFMAN),)
characterNames = ""
for i in xrange(self.CHARACTER_COUNT):
name = self.CHARACTER_NAMES
flag = flagList
if flag:
characterNames += " "
characterNames += name
textLine = self.AppendTextLine(characterNames, self.NORMAL_COLOR, True)
textLine.SetFeather()
item.SelectItem(itemVnumAura)
if item.IsAntiFlag(item.ITEM_ANTIFLAG_MALE):
textLine = self.AppendTextLine(localeInfo.FOR_FEMALE, self.NORMAL_COLOR, True)
textLine.SetFeather()
if item.IsAntiFlag(item.ITEM_ANTIFLAG_FEMALE):
textLine = self.AppendTextLine(localeInfo.FOR_MALE, self.NORMAL_COLOR, True)
textLine.SetFeather()
## END WEARABLE
self.ShowToolTip()[/CODE]
[CODE lang="python" title="uiscript\costumewindow.py"]#arat;
{"index":COSTUME_START_INDEX+1, "x":62, "y": 9, "width":32, "height":32},
#altına ekle;
{"index":COSTUME_START_INDEX+5, "x":37, "y":126, "width":32, "height":32},#Buradaki 5 rakamı GameType.h'de bulunan const DWORD c_Costume_Slot_Aura = c_Costume_Slot_Start + 5; bu satırda yapacağın değişikliğe göre değişmesi gerekmekte.[/CODE]
ÖNEMLİ: Kostüm penceresine .jpg dosyası üzerinden bir slot açmanız ve COSTUME_START_INDEX+5'in konumunu ona göre ayarlamanız gerekiyor.
Ekte vereceğim dosyaları gerekli yerlere atmayı unutmayın.
İyi forumlar.
Kanıt;
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
Ekli dosyalar
Son düzenleme:
- Katılım
- 8 Eki 2017
- Konular
- 2,420
- Mesajlar
- 10,263
- Çözüm
- 89
- Online süresi
- 4mo 8h
- Reaksiyon Skoru
- 4,207
- Altın Konu
- 244
- Başarım Puanı
- 422
- MmoLira
- 7,171
- DevLira
- 15
Teşekkürler Paylasım İçin
24 Saat İçinde Çalıstıgına Dair Kanıt Ekleyiniz
24 Saat İçinde Çalıstıgına Dair Kanıt Ekleyiniz
- Katılım
- 8 Eki 2017
- Konular
- 2,420
- Mesajlar
- 10,263
- Çözüm
- 89
- Online süresi
- 4mo 8h
- Reaksiyon Skoru
- 4,207
- Altın Konu
- 244
- Başarım Puanı
- 422
- MmoLira
- 7,171
- DevLira
- 15
Konuda Link Virüs Total Eklendi
- Katılım
- 19 Tem 2019
- Konular
- 185
- Mesajlar
- 1,039
- Çözüm
- 23
- Online süresi
- 1mo 9d
- Reaksiyon Skoru
- 501
- Altın Konu
- 44
- TM Yaşı
- 6 Yıl 10 Ay 28 Gün
- Başarım Puanı
- 184
- Yaş
- 27
- MmoLira
- 1,429
- DevLira
- 21
konudaki hatalar
1- okurken kör oldum
2- kanıt yok aura ne onu bilmiyorum
3- bana for verilmemiş
bunları düzeltirsen repimi vereyim <3
1- okurken kör oldum
2- kanıt yok aura ne onu bilmiyorum
3- bana for verilmemiş
bunları düzeltirsen repimi vereyim <3
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 12
- Görüntüleme
- 597
- Cevaplar
- 10
- Görüntüleme
- 941
- Cevaplar
- 1
- Görüntüleme
- 296
- Cevaplar
- 20
- Görüntüleme
- 806
- Cevaplar
- 12
- Görüntüleme
- 1K




