- Katılım
- 6 Kas 2021
- Mesajlar
- 3,491
- Tepkime puanı
- 4,992
- Puanları
- 113
- Yaş
- 31
- Konum
- Türkiye
- Dc
- fatihbulut
Herkese Merhaba Arkadaşlar; Bu Sistem Client Src tabanlı bir sistem yere düşen itemlere nesnelere herhangi bir şeyin cinsine(type ve subtype) ya da koduna göre ufak düzenlemeler ile istediğiniz efekti vermeyi sağlar.
İlk OlarakUserInterface/PythonItem.h açalım ve aratalım.
Kod:
typedef struct SGroundItemInstance
Sonra Üstüne Şunu ekleyelim;(İsteğe göre arttırılıp azaltılabilir)
Kod:
enum EDropItemEffects
{
DROP_ITEM_EFFECT_NORMAL,
DROP_ITEM_EFFECT_RARE,
DROP_ITEM_EFFECT_EPIC,
DROP_ITEM_EFFECT_LEGENARY,
DROP_ITEM_EFFECT_NUM,
};
Sonra Şu kodu Aratalım ;
Kod:
DWORD __Pick(const POINT& c_rkPtMouse);
Yine Üstüne Şu Kodu Ekleyelim ;
Kod:
void __RegisterEffect(int iIndex, const char* szFile);
int __AttachEffect(DWORD dwVnum, BYTE byType, BYTE bySubType);
Sonra Şu Kodu Arayalım;
Kod:
DWORD m_dwDropItemEffectID;
Aşağıdaki Gibi Değiştirelim;
Kod:
DWORD m_dwDropItemEffectID[DROP_ITEM_EFFECT_NUM];
2.adım
UserInterface/PythonItem.cpp açalım
Şu Kodu Aratalım;
Kod:
// attaching effect
CEffectManager & rem =CEffectManager::Instance();
pGroundItemInstance->dwEffectInstanceIndex =
rem.CreateEffect(m_dwDropItemEffectID, D3DXVECTOR3(x, -y, z), D3DXVECTOR3(0,0,0));
Aşağıdaki Gibi Değiştirelim;
Kod:
// attaching effect
DWORD dwEffectIndex = __AttachEffect(dwVirtualNumber, pItemData->GetType(), pItemData->GetSubType());
if(dwEffectIndex < DROP_ITEM_EFFECT_NUM && dwEffectIndex >= 0)
{
dwEffectIndex = m_dwDropItemEffectID[dwEffectIndex];
if(dwEffectIndex != 0)
{
CEffectManager & rem =CEffectManager::Instance();
pGroundItemInstance->dwEffectInstanceIndex =
rem.CreateEffect(dwEffectIndex, D3DXVECTOR3(x, -y, z), D3DXVECTOR3(0,0,0));
}
}
Sonra Şu Kodu Aratalım;
Kod:
void CPythonItem::Create()
Şu Şekilde Değiştirelim ; (Efekt(mse) Yollarını ve İsimlerini Kendinize Göre Değiştirebilirsiniz UserInterface/PythonItem.h'nin ilk adımında ekleme yada değişiklik yaptıysanız Buraya da uygulayın)
Kod:
void CPythonItem::Create()
{
//Default
__RegisterEffect(DROP_ITEM_EFFECT_NORMAL, "d:/ymir work/effect/etc/dropitem/dropitem.mse");
//Rare
__RegisterEffect(DROP_ITEM_EFFECT_RARE, "d:/ymir work/effect/etc/dropitem/dropitem_rare.mse");
//Epic
__RegisterEffect(DROP_ITEM_EFFECT_EPIC, "d:/ymir work/effect/etc/dropitem/dropitem_epic.mse");
//Epic
__RegisterEffect(DROP_ITEM_EFFECT_LEGENARY, "d:/ymir work/effect/etc/dropitem/dropitem_legendary.mse");
}
Sonra Bu Kodu aratalım;
Kod:
m_dwPickedItemID = INVALID_ID;
Altına Bu Kodu Ekleyelim;
Kod:
memset(m_dwDropItemEffectID, 0, sizeof(m_dwDropItemEffectID));
Son Olarak Bu kodu Aratıp;
Kod:
CPythonItem::~CPythonItem()
{
assert(m_GroundItemInstanceMap.empty());
}
Altına Bu Kodu Ekleyelim; (İtemleri Tipine Subtypene ya da Koduna göre burada düzenleyeceğiz.)
Kod:
void CPythonItem::__RegisterEffect(int iIndex, const char* szFile)
{
if(iIndex >= DROP_ITEM_EFFECT_NUM || iIndex < 0)
{
TraceError("CPythonItem::__RegisterEffect - Invalid index: %d - %s", iIndex, szFile);
return;
}
CEffectManager::Instance().RegisterEffect2(szFile, &m_dwDropItemEffectID[iIndex]);
}
int CPythonItem::__AttachEffect(DWORD dwVnum, BYTE byType, BYTE bySubType)
{
//Örnek
// itemin Vnumuna göre efekt
switch(dwVnum)
{
//İtemin Vnumuna Göre Rare Olarak
case 101:
case 2001:
return DROP_ITEM_EFFECT_RARE;
//İtemin Vnumuna Göre Epic Olarak(Daha Fazla Ekleme Yapılabilir)
case 3025:
case 3229:
return DROP_ITEM_EFFECT_EPIC;
}
// itemin type/subtype'ine göre ekleme
switch(byType)
{
//Epic Olarak istenin efekt type ayrımı ile ( case CItemData::ITEM_TYPE_WEAPON: Vesaire eklenebilir)
case CItemData::ITEM_TYPE_ARMOR:
return DROP_ITEM_EFFECT_EPIC;
//İtem Type Material olan efektler isteğe bağlı
case CItemData::ITEM_TYPE_MATERIAL:
{
switch(bySubType)
{
//Epic İtem ayrımı (Subtype Ayrımı olarak)
case CItemData::MATERIAL_LEATHER:
return DROP_ITEM_EFFECT_EPIC;
//İtem Typesi kolye Küpe Bilezik felan
case CItemData::MATERIAL_JEWEL:
return DROP_ITEM_EFFECT_LEGENARY;
}
//ITEM_TYPE_MATERIAL dışında kalanlar isteğe bağlı
return DROP_ITEM_EFFECT_RARE; //boş
}
}
return DROP_ITEM_EFFECT_NORMAL; //boş
}
