- Katılım
- 27 Nis 2017
- Konular
- 91
- Mesajlar
- 2,386
- Online süresi
- 17g 11973s
- Reaksiyon Skoru
- 1,571
- Altın Konu
- 2
- Başarım Puanı
- 248
- TM Yaşı
- 8 Yıl 11 Ay 29 Gün
- MmoLira
- 439
- DevLira
- 13
Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!
Merhaba arkadaşlar.
@AsiLZаde
Sistem özellikleri;
soul pack dosyalarını pack klasörünüze atıp Index'e eklemeyi unutmayın.
refine_proto'dan dönüşümleri ayarlamayı unutmayın.
Kanıt;
Hayırlı kullanımlar.
@AsiLZаde

Sistem özellikleri;
- Rüya Ruhu saldırı hasarını artırır.
- Gök Ruhu beceri hasarını artırır.
- PvP ve Dönüşüm sırasında herhangi bir işleve sahip değiller, sadece PvE modunda çalışır.
- Eşya efektleri Official sunucudaki ile aynıdır.
- Aynı anda çalıştırılabilir.
- Rüya Ruhu düşmana karşı vurulan her bir darbede etki gösterir.
- Gök Ruhu düşmana karşı beceri kullanımı başına etki gösterir.
common\CommonDefines.h:
//müsait bir yere ekle;
#define ENABLE_ITEM_SOUL_SYSTEM
common\item_length.h:
//arat;
enum EItemTypes
//fonksiyonun içinde bul;
ITEM_BELT,
//altına ekle; (ITEM_BELT'in altında tür varsa o türün altına ekleyin, yani aynı blok içerisinde fakat bloğun sonunda olsun yapacağınız eklenti.)
#ifdef ENABLE_ITEM_SOUL_SYSTEM
ITEM_SOUL,
#endif
//tekrar arat;
enum EDragonSoulSubType
//fonksiyonun altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
enum ESoulSubType
{
RED_SOUL,
BLUE_SOUL,
};
#endif
//tekrar arat;
REFINE_TYPE_BDRAGON,
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
REFINE_TYPE_SOUL_SCROLL,
#endif
db\src\ProtoReader.cpp:
//arat;
"ITEM_BELT",
//altına ekle; (ITEM_BELT'in altında tür varsa o türün altına ekleyin, yani aynı blok içerisinde fakat bloğun sonunda olsun yapacağınız eklenti.)
#ifdef ENABLE_ITEM_SOUL_SYSTEM
"ITEM_SOUL",
#endif
//tekrar arat;
static string arSub31[] =
{
"EXTRACT_DRAGON_SOUL",
"EXTRACT_DRAGON_HEART",
};
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
static string arSub37[] =
{
"SOUL_RED",
"SOUL_BLUE",
"0",
};
#endif
//tekrar arat;
static string* arSubType[] =
//fonksiyonun içinde bul;
0,
//değiştir; (Fonksiyon içinde birden fazla " 0," olacaktır, fonksiyonun sonundakini değiştirin.)
#ifdef ENABLE_ITEM_SOUL_SYSTEM
arSub37,
#endif
//tekrar arat;
static int arNumberOfSubtype[_countof(arSubType)] =
//fonksiyonun içinde bul;
0,
//değiştir; (Fonksiyon içinde birden fazla " 0," olacaktır, fonksiyonun sonundakini değiştirin.)
#ifdef ENABLE_ITEM_SOUL_SYSTEM
sizeof(arSub37) / sizeof(arSub37[0]),
#endif
game\src\affect.h:
//arat;
AFFECT_QUEST_START_IDX = 1000
//üstüne ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
AFFECT_SOUL,
#endif
//tekrar arat;
AFF_BITS_MAX
//üstüne ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
AFF_RED_SOUL,
AFF_BLUE_SOUL,
AFF_MIX_SOUL,
#endif
game\src\battle.cpp:
//arat;
if (pkVictim->Damage(pkAttacker, iDam, DAMAGE_TYPE_NORMAL))
return (BATTLE_DEAD);
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
if (!pkAttacker->IsPolymorphed() && !pkVictim->IsPC())
iDam *= pkAttacker->GetSoulDamVal(true);
#endif
game\src\char.h:
//arat;
int GetSyncHackCount() { return m_iSyncHackCount; }
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
public:
void CheckSoul();
float GetSoulDamVal(bool bMelee);
bool CheckSoulItem(bool bBlue);
#endif
game\src\char_item.cpp:
//arat;
BDRAGON_SCROLL = 6,
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
SOUL_SCROLL = 7,//Buradaki 7'nin sıraya göre değişmesi gerekebilir.
#endif
//tekrar arat;
else if (pkItemScroll->GetValue(0) == BDRAGON_SCROLL)
{
if (item->GetType() != ITEM_METIN || item->GetRefineLevel() != 4)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템으로 개량할 수 없습니다."));
return false;
}
}
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
else if (pkItemScroll->GetValue(0) == SOUL_SCROLL)
{
if (item->GetType() != ITEM_SOUL)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("you can only upgrade soul items"));
return false;
}
}
#endif
//tekrar arat;
pkItemScroll->GetValue(0) == YAGONG_SCROLL)
//değiştir;
pkItemScroll->GetValue(0) == YAGONG_SCROLL
#ifdef ENABLE_ITEM_SOUL_SYSTEM
|| pkItemScroll->GetValue(0) == SOUL_SCROLL
#endif
)
//tekrar arat;
else if (pkItemScroll->GetValue(0) == HYUNIRON_CHN) {}
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
else if (pkItemScroll->GetValue(0) == SOUL_SCROLL)
{
success_prob += pkItemScroll->GetValue(1);
}
#endif
//tekrar arat;
else if (pkItemScroll->GetValue(0) == YAGONG_SCROLL)
{
szRefineType = "YAGONG_SCROLL";
}
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
else if (pkItemScroll->GetValue(0) == SOUL_SCROLL)
{
szRefineType = "SOUL_SCROLL";
}
#endif
//tekrar arat;
bool CHARACTER::DoRefineWithScroll(LPITEM item)
//fonksiyonun altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
void CHARACTER::CheckSoul()
{
for (int i = 0; i < INVENTORY_MAX_NUM; ++i)
{
LPITEM item = GetInventoryItem(i);
if (!item)
continue;
if (item->GetType() == ITEM_SOUL)
{
if (item->GetSocket(1) > 0)
{
UseItemEx(item, TItemPos(item->GetWindow(), item->GetCell()));
}
}
}
}
float CHARACTER::GetSoulDamVal(bool bMelee)
{
for (int i = 0; i < INVENTORY_MAX_NUM; ++i)
{
LPITEM item = GetInventoryItem(i);
if (!item)
continue;
if (item->GetType() == ITEM_SOUL)
{
if (bMelee)
{
if (item->GetSocket(2) == 0)
{
if (item->GetSubType() == RED_SOUL)
{
if (IsAffectFlag(AFF_MIX_SOUL))
{
RemoveAffect(AFF_MIX_SOUL);
AddAffect(AFFECT_SOUL, 0, 0, AFF_BLUE_SOUL, INFINITE_AFFECT_DURATION, 0, false);
}
else if (IsAffectFlag(AFF_RED_SOUL))
{
RemoveAffect(AFFECT_SOUL);
}
}
item->SetCount(item->GetCount()-1);
}
if (item->GetSubType() == RED_SOUL && item->GetSocket(1) > 0)
{
item->SetSocket(2, item->GetSocket(2) - 1);
if (item->GetSocket(1) > 0)
return float(item->GetValue(3)/10.0f);
return 1.0f;
}
}
else
{
if (item->GetSocket(2) == 0)
{
if (item->GetSubType() == BLUE_SOUL)
{
if (IsAffectFlag(AFF_MIX_SOUL))
{
RemoveAffect(AFFECT_SOUL);
AddAffect(AFFECT_SOUL, 0, 0, AFF_RED_SOUL, INFINITE_AFFECT_DURATION, 0, false);
}
else if (IsAffectFlag(AFF_BLUE_SOUL))
{
RemoveAffect(AFFECT_SOUL);
}
}
item->SetCount(item->GetCount()-1);
}
if (item->GetSubType() == BLUE_SOUL && item->GetSocket(1) > 0)
{
item->SetSocket(2, item->GetSocket(2) - 1);
if (item->GetSocket(1) > 0)
return float(item->GetValue(3)/10.0f);
return 1.0f;
}
}
}
}
return 1.0f;
}
bool CHARACTER::CheckSoulItem(bool bBlue)
{
for (int i = 0; i < INVENTORY_MAX_NUM; ++i)
{
LPITEM item = GetInventoryItem(i);
if (!item)
continue;
if (item->GetType() == ITEM_SOUL)
{
if (bBlue)
{
if (item->GetSubType() == BLUE_SOUL)
{
if (item->GetSocket(1) > 0)
{
return true;
}
return false;
}
}
else
{
if (item->GetSubType() == RED_SOUL)
{
if (item->GetSocket(1) > 0)
{
return true;
}
return false;
}
}
}
}
return false;
}
#endif
//tekrar arat;
else if (pkItem->GetValue(0) == BDRAGON_SCROLL)
{
if (pkTarget->GetRefineSet() != 702) return false;
RefineInformation(pkTarget->GetCell(), REFINE_TYPE_BDRAGON, pkItem->GetCell());
}
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
else if (pkTarget->GetValue(0) == SOUL_SCROLL)
{
if (pkTarget->GetType() != ITEM_SOUL) return false;
RefineInformation(pkTarget->GetCell(), REFINE_TYPE_SOUL_SCROLL, pkItem->GetCell());
}
#endif
//tekrar arat;
if (item2->GetVnum() >= 28330 && item2->GetVnum() <= 28343)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("+3 영석은 이 아이템으로 개량할 수 없습니다"));
return false;
}
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
if (item2->GetType() == ITEM_SOUL)
{
if (item->GetValue(0) != SOUL_SCROLL)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("SADECE_RUH_PARSOMENI_ILE_YUKSELTEBILIRSIN"));
return false;
}
}
#endif
//tekrar arat;
case ITEM_EXTRACT:
{
LPITEM pDestItem = GetItem(DestCell);
if (NULL == pDestItem)
{
return false;
}
switch (item->GetSubType())
{
case EXTRACT_DRAGON_SOUL:
if (pDestItem->IsDragonSoul())
{
return DSManager::instance().PullOut(this, NPOS, pDestItem, item);
}
return false;
case EXTRACT_DRAGON_HEART:
if (pDestItem->IsDragonSoul())
{
return DSManager::instance().ExtractDragonHeart(this, pDestItem, item);
}
return false;
default:
return false;
}
}
break;
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
case ITEM_SOUL:
{
switch (item->GetSubType())
{
case RED_SOUL:
{
if (item->GetSocket(1) != 0)
{
if (!IsAffectFlag(AFF_RED_SOUL))
{
item->SetSocket(1, 0);
item->Lock(false);
}
if (IsAffectFlag(AFF_MIX_SOUL))
{
if (CheckSoulItem(true) == true)
{
RemoveAffect(AFFECT_SOUL);
AddAffect(AFFECT_SOUL, 0, 0, AFF_BLUE_SOUL, INFINITE_AFFECT_DURATION, 0, false);
item->SetSocket(1, 0);
item->Lock(false);
return true;
}
else if (CheckSoulItem(false) == true)
{
RemoveAffect(AFFECT_SOUL);
AddAffect(AFFECT_SOUL, 0, 0, AFF_RED_SOUL, INFINITE_AFFECT_DURATION, 0, false);
item->SetSocket(1, 1);
item->Lock(true);
return true;
}
else
{
RemoveAffect(AFFECT_SOUL);
item->SetSocket(1, 0);
item->Lock(false);
return true;
}
}
else if (IsAffectFlag(AFF_BLUE_SOUL))
{
RemoveAffect(AFFECT_SOUL);
if (IsAffectFlag(AFF_RED_SOUL))
{
AddAffect(AFFECT_SOUL, 0, 0, AFF_RED_SOUL, INFINITE_AFFECT_DURATION, 0, false);
item->SetSocket(1, 1);
item->Lock(true);
return true;
}
item->SetSocket(1,0);
item->Lock(false);
return true;
}
else if (IsAffectFlag(AFF_RED_SOUL))
{
RemoveAffect(AFFECT_SOUL);
item->SetSocket(1,0);
item->Lock(false);
return true;
}
}
else
{
if (IsAffectFlag(AFF_RED_SOUL))
return true;
if (IsAffectFlag(AFF_BLUE_SOUL))
{
RemoveAffect(AFFECT_SOUL);
AddAffect(AFFECT_SOUL, 0, 0, AFF_MIX_SOUL, INFINITE_AFFECT_DURATION, 0, false);
item->SetSocket(1,1);
item->Lock(true);
return true;
}
else if (!IsAffectFlag(AFF_MIX_SOUL))
{
RemoveAffect(AFFECT_SOUL);
AddAffect(AFFECT_SOUL, 0, 0, AFF_RED_SOUL, INFINITE_AFFECT_DURATION, 0, false);
item->SetSocket(1,1);
item->Lock(true);
return true;
}
}
}
break;
case BLUE_SOUL:
{
if (item->GetSocket(1) != 0)
{
if (IsAffectFlag(AFF_MIX_SOUL))
{
if (CheckSoulItem(false) == true)
{
RemoveAffect(AFFECT_SOUL);
AddAffect(AFFECT_SOUL, 0, 0, AFF_RED_SOUL, INFINITE_AFFECT_DURATION, 0, false);
item->SetSocket(1, 0);
item->Lock(false);
return true;
}
else if (CheckSoulItem(true) == true)
{
RemoveAffect(AFFECT_SOUL);
AddAffect(AFFECT_SOUL, 0, 0, AFF_BLUE_SOUL, INFINITE_AFFECT_DURATION, 0, false);
item->SetSocket(1, 1);
item->Lock(true);
return true;
}
else
{
RemoveAffect(AFFECT_SOUL);
item->SetSocket(1, 0);
item->Lock(false);
return true;
}
}
else if (IsAffectFlag(AFF_RED_SOUL))
{
RemoveAffect(AFFECT_SOUL);
if (IsAffectFlag(AFF_BLUE_SOUL))
{
AddAffect(AFFECT_SOUL, 0, 0, AFF_BLUE_SOUL, INFINITE_AFFECT_DURATION, 0, false);
item->SetSocket(1, 1);
item->Lock(true);
return true;
}
item->SetSocket(1,0);
item->Lock(false);
return true;
}
else if (IsAffectFlag(AFF_BLUE_SOUL))
{
RemoveAffect(AFFECT_SOUL);
item->SetSocket(1,0);
item->Lock(false);
return true;
}
}
else // tiklanmamis
{
if (IsAffectFlag(AFF_BLUE_SOUL))
return true;
if (IsAffectFlag(AFF_RED_SOUL))
{
RemoveAffect(AFFECT_SOUL);
AddAffect(AFFECT_SOUL, 0, 0, AFF_MIX_SOUL, INFINITE_AFFECT_DURATION, 0, false);
item->SetSocket(1,1);
item->Lock(true);
return true;
}
else if (!IsAffectFlag(AFF_MIX_SOUL))
{
RemoveAffect(AFFECT_SOUL);
AddAffect(AFFECT_SOUL, 0, 0, AFF_BLUE_SOUL, INFINITE_AFFECT_DURATION, 0, false);
item->SetSocket(1,1);
item->Lock(true);
return true;
}
}
}
break;
}
}
break;
#endif
game\src\char_skill.cpp:
//arat;
iDam -= iDam * (ResistAmount / 100.0);
}
}
}
}
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
if (!m_pkChr->IsPolymorphed() && !pkChrVictim->IsPC())
iDam *= m_pkChr->GetSoulDamVal(false);
#endif
game\src\cmd_general.cpp:
//arat;
return;
}
if (true == CThreeWayWar::instance().IsSungZiMapIndex(ch->GetMapIndex()))
//üstüne ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
ch->CheckSoul();
#endif
//tekrar arat;
else
{
ch->Show(ch->GetMapIndex(), GetSungziStartX(ch->GetEmpire()), GetSungziStartY(ch->GetEmpire()));
}
ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
ch->ReviveInvisible(5);
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
ch->CheckSoul();
#endif
//tekrar arat;
if (CWarMapManager::instance().GetStartPosition(ch->GetMapIndex(), ch->GetGuild()->GetID() < dwGuildOpponent ? 0 : 1, pos))
ch->Show(ch->GetMapIndex(), pos.x, pos.y);
else
ch->ExitToSavedLocation();
ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
ch->ReviveInvisible(5);
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
ch->CheckSoul();
#endif
//tekrar arat;
case SCMD_RESTART_HERE:
sys_log(0, "do_restart: restart here");
ch->RestartAtSamePos();
//ch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY());
ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
ch->ReviveInvisible(5);
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
ch->CheckSoul();
#endif
//tekrar arat;
case SCMD_RESTART_HERE:
sys_log(0, "do_restart: restart here");
ch->RestartAtSamePos();
//ch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY());
ch->PointChange(POINT_HP, 50 - ch->GetHP());
ch->DeathPenalty(0);
ch->ReviveInvisible(5);
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
ch->CheckSoul();
#endif
game\src\input_main.cpp:
//arat;
if (Race < JOB_WARRIOR || Race > JOB_WOLFMAN)
return;
//altına ekle;
if (Cat < ITEM_NONE || Cat > ITEM_SOUL)
return;
game\src\item_manager.cpp:
//arat;
if (item->IsDragonSoul() && 0 == id)
{
DSManager::instance().DragonSoulItemInitialize(item);
}
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
if (item->GetType() == ITEM_SOUL)
{
item->SetSocket(2, item->GetValue(2));
}
#endif
dump_proto\ItemCSVReader.cpp:
//arat;
"ITEM_BELT",
//altına ekle; (ITEM_BELT'in altında tür varsa o türün altına ekleyin, yani aynı blok içerisinde fakat bloğun sonunda olsun yapacağınız eklenti.)
"ITEM_SOUL",
//tekrar arat;
string arIAFVSub31[] =
{
"EXTRACT_DRAGON_SOUL",
"EXTRACT_DRAGON_HEART"
};
//altına ekle;
string arIAFVSub37[] =
{
"SOUL_RED",
"SOUL_BLUE",
"0",
};
//tekrar arat;
string* arIAFVSubType[] = {
//fonksiyon içinde bul;
0,
//değiştir; (Fonksiyon içinde birden fazla " 0," olacaktır, fonksiyonun sonundakini değiştirin.)
arIAFVSub37,
//tekrar arat;
int arNumberOfSubtype[] =
//fonksiyonun içinde bul;
0,
//değiştir; (Fonksiyon içinde birden fazla " 0," olacaktır, fonksiyonun sonundakini değiştirin.)
sizeof(arIAFVSub37) / sizeof(arIAFVSub37[0]),
UserInterface\InstanceBase.h:
//arat;
AFFECT_RAMADAN_RING, // 41
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
AFFECT_RED_SOUL, // 42
AFFECT_BLUE_SOUL, // 43
AFFECT_MIX_SOUL, // 44
#endif
//arat,
NEW_AFFECT_QUEST_START_IDX = 1000,
//üstüne ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
AFFECT_SOUL,
#endif
UserInterface\Locale_inc.h:
//müsait bir yere ekle;
#define ENABLE_ITEM_SOUL_SYSTEM
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_ITEM_SOUL_SYSTEM
PyModule_AddIntConstant(poModule, "ENABLE_ITEM_SOUL_SYSTEM", 1);
#else
PyModule_AddIntConstant(poModule, "ENABLE_ITEM_SOUL_SYSTEM", 0);
#endif
UserInterface\PythonCharacterModule.cpp:
//arat;
PyModule_AddIntConstant(poModule, "NEW_AFFECT_DRAGON_SOUL_DECK2", CInstanceBase::NEW_AFFECT_DRAGON_SOUL_DECK2);
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
PyModule_AddIntConstant(poModule, "AFFECT_RED_SOUL", CInstanceBase::AFFECT_RED_SOUL);
PyModule_AddIntConstant(poModule, "AFFECT_BLUE_SOUL", CInstanceBase::AFFECT_BLUE_SOUL);
PyModule_AddIntConstant(poModule, "AFFECT_MIX_SOUL", CInstanceBase::AFFECT_MIX_SOUL);
#endif
UserInterface\PythonItemModule.cpp:
//arat;
PyModule_AddIntConstant(poModule, "ITEM_TYPE_BELT", CItemData::ITEM_TYPE_BELT);
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
PyModule_AddIntConstant(poModule, "ITEM_TYPE_SOUL", CItemData::ITEM_TYPE_SOUL);
PyModule_AddIntConstant(poModule, "RED_SOUL", 0);
PyModule_AddIntConstant(poModule, "BLUE_SOUL", 1);
#endif
UserInterface\PythonPlayer.cpp:
//arat;
DWORD CPythonPlayer::GetItemCount(TItemPos Cell)
//üstüne ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
DWORD CPythonPlayer::GetItemAntiFlags(TItemPos Cell)
{
if (!Cell.IsValidCell())
return 0;
const TItemData * pItem = GetItemData(Cell);
assert(pItem != nullptr);
return pItem->anti_flags;
}
BYTE CPythonPlayer::GetItemTypeBySlot(TItemPos Cell)
{
if (!Cell.IsValidCell())
return 0;
CItemData * pItemDataPtr = nullptr;
if (CItemManager::Instance().GetItemDataPointer(GetItemIndex(Cell), &pItemDataPtr))
return pItemDataPtr->GetType();
else
{
TraceError("FAILED\t\tCPythonPlayer::GetItemTypeBySlot()\t\tCell(%d, %d) item is nullptr", Cell.window_type, Cell.cell);
return 0;
}
}
BYTE CPythonPlayer::GetItemSubTypeBySlot(TItemPos Cell)
{
if (!Cell.IsValidCell())
return 0;
CItemData * pItemDataPtr = nullptr;
if (CItemManager::Instance().GetItemDataPointer(GetItemIndex(Cell), &pItemDataPtr))
return pItemDataPtr->GetSubType();
else
{
TraceError("FAILED\t\tCPythonPlayer::GetItemSubTypeBySlot()\t\tCell(%d, %d) item is nullptr", Cell.window_type, Cell.cell);
return 0;
}
}
#endif
UserInterface\PythonPlayer.h:
//arat;
DWORD GetItemFlags(TItemPos Cell);
//altına ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
DWORD GetItemAntiFlags(TItemPos Cell);
BYTE GetItemTypeBySlot(TItemPos Cell);
BYTE GetItemSubTypeBySlot(TItemPos Cell);
#endif
UserInterface\PythonPlayerModule.cpp:
//arat;
void initPlayer()
//üstüne ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
PyObject * playerIsAntiFlagBySlot(PyObject * poSelf, PyObject * poArgs)
{
TItemPos Cell;
int antiflag;
switch (PyTuple_Size(poArgs))
{
case 2:
if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
return Py_BadArgument();
if (!PyTuple_GetInteger(poArgs, 1, &antiflag))
return Py_BadArgument();
break;
case 3:
if (!PyTuple_GetInteger(poArgs, 0, &Cell.window_type))
return Py_BadArgument();
if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
return Py_BadArgument();
if (!PyTuple_GetInteger(poArgs, 2, &antiflag))
return Py_BadArgument();
break;
default:
return Py_BuildException();
}
DWORD itemAntiFlags = CPythonPlayer::Instance().GetItemAntiFlags(Cell);
return Py_BuildValue("i", IS_SET(itemAntiFlags, antiflag) != 0 ? TRUE : FALSE);
}
PyObject * playerGetItemTypeBySlot(PyObject * poSelf, PyObject * poArgs)
{
TItemPos Cell;
switch (PyTuple_Size(poArgs))
{
case 1:
if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
return Py_BadArgument();
break;
case 2:
if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
return Py_BadArgument();
if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
return Py_BadArgument();
break;
default:
return Py_BuildException();
}
return Py_BuildValue("i", CPythonPlayer::Instance().GetItemTypeBySlot(Cell));
}
PyObject * playerGetItemSubTypeBySlot(PyObject * poSelf, PyObject * poArgs)
{
TItemPos Cell;
switch (PyTuple_Size(poArgs))
{
case 1:
if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell))
return Py_BadArgument();
break;
case 2:
if (!PyTuple_GetByte(poArgs, 0, &Cell.window_type))
return Py_BadArgument();
if (!PyTuple_GetInteger(poArgs, 1, &Cell.cell))
return Py_BadArgument();
break;
default:
return Py_BuildException();
}
return Py_BuildValue("i", CPythonPlayer::Instance().GetItemSubTypeBySlot(Cell));
}
#endif
//tekrar arat;
{ NULL, NULL, NULL },
//üstüne ekle;
#ifdef ENABLE_ITEM_SOUL_SYSTEM
{ "IsAntiFlagBySlot", playerIsAntiFlagBySlot, METH_VARARGS },
{ "GetItemTypeBySlot", playerGetItemTypeBySlot, METH_VARARGS },
{ "GetItemSubTypeBySlot", playerGetItemSubTypeBySlot, METH_VARARGS },
#endif
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_ITEM_SOUL_SYSTEM:
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+42, "", "d:/ymir work/effect/etc/soul/soul_red_001.mse")
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+43, "", "d:/ymir work/effect/etc/soul/soul_blue_001.mse")
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+44, "", "d:/ymir work/effect/etc/soul/soul_mix_001.mse")
root\uiinventory.py:
#arat;
self.wndItem.RefreshSlot()
#üstüne ekle;
if app.ENABLE_ITEM_SOUL_SYSTEM:
if player.GetItemTypeBySlot(slotNumber) == item.ITEM_TYPE_SOUL:
metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
if slotNumber >= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex:
slotNumber -= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex
isActivated = 0 != metinSocket[1]
if isActivated:
self.wndItem.ActivateSlot(i)
else:
self.wndItem.DeactivateSlot(i)
root\uitooltip.py:
#arat;
def AddRefineItemData(self, itemVnum, metinSlot, attrSlot = 0):
#fonksiyonun altına ekle;
if app.ENABLE_ITEM_SOUL_SYSTEM:
def __SoulItemToolTip(self, itemVnum, metinSlot, flags):
self.itemVnum = itemVnum
item.SelectItem(itemVnum)
itemType = item.GetItemType()
itemSubType = item.GetItemSubType()
(limit_Type, limit_Value) = item.GetLimit(1)
max_time = limit_Value
if 0 != flags:
metinSlot[2] = item.GetValue(2)
remain_count = metinSlot[2]
value_index = 3
if value_index < 3:
value_index = 3
if value_index > 5:
value_index = 5
damage_value = float( item.GetValue(value_index) / 10.0 )
self.ClearToolTip()
soul_desc = ""
if item.RED_SOUL == itemSubType:
soul_desc += localeInfo.SOUL_ITEM_TOOLTIP_RED2 % (damage_value)
elif item.BLUE_SOUL == itemSubType:
soul_desc += localeInfo.SOUL_ITEM_TOOLTIP_BLUE2 % (damage_value)
self.__AdjustMaxWidth(0, soul_desc)
self.__SetNormalItemTitle()
board_width = self.__AdjustDescMaxWidth(soul_desc)
desc_color = 0xfff15f5f # RGB(241,95,95)
self.AppendDescription( soul_desc, 26, desc_color)
self.AppendDescription(localeInfo.SOUL_ITEM_TOOLTIP_COMMON, 26, 0xfff15f5f)
self.AppendSpace(10)
if metinSlot[1] == 1 and remain_count > 0:
self.AppendTextLine( localeInfo.SOUL_ITEM_TOOLTIP_APPLY, 0xff86e57f )
else:
self.AppendTextLine( localeInfo.SOUL_ITEM_TOOLTIP_UNAPPLIED, 0xfff15f5f )
self.AppendSpace(5)
self.AppendTextLine( localeInfo.SOUL_ITEM_TOOLTIP_REMAIN_COUNT % remain_count )
self.AppendSpace(5)
if 0 == flags:
for i in xrange(item.LIMIT_MAX_NUM):
(limitType, limitValue) = item.GetLimit(i)
if item.LIMIT_REAL_TIME == limitType:
self.AppendSoulItemLastTime(metinSlot[0])
else:
(limitType, limitValue) = item.GetLimit(0)
self.AppendSoulItemLastTime(limitValue + app.GetGlobalTimeStamp())
self.ShowToolTip()
#tekrar arat;
itemDesc = item.GetItemDescription()
#üstüne ekle;
if app.ENABLE_ITEM_SOUL_SYSTEM:
if item.ITEM_TYPE_SOUL == itemType:
self.__SoulItemToolTip(itemVnum, metinSlot, flags)
return
locale\locale\tr\item_list.txt:
70500 ETC icon/item/70500.tga
70501 ETC icon/item/70501.tga
70502 ETC icon/item/70502.tga
70503 ETC icon/item/70503.tga
70504 ETC icon/item/70504.tga
70505 ETC icon/item/70505.tga
70506 ETC icon/item/70506.tga
70507 ETC icon/item/70507.tga
70508 ETC icon/item/70508.tga
70509 ETC icon/item/70509.tga
70601 ETC icon/item/70601.tga
70602 ETC icon/item/70602.tga
70603 ETC icon/item/70603.tga
item_names.txt:
70500 Rüya Ruhu
70501 Parıldayan Rüya Ruhu
70502 Yanardöner Rüya Ruhu
70503 Prizmatik Rüya Ruhu
70504 Aydınlanmış Rüya Ruhu
70505 Gök Ruhu
70506 Parıldayan Gök Ruhu
70507 Yanardöner Gök Ruhu
70508 Prizmatik Gök Ruhu
70509 Aydınlanmış Gök Ruhu
70601 Mavi Saç Bandı
70602 Ruh Parşömeni
70603 Ruh Parşömeni
item_proto.txt:
70500 붉은영혼(일반) ITEM_SOUL SOUL_RED 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX NONE NONE NONE 0 0 70501 0 0 REAL_TIME 86400 LIMIT_NONE 60 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 1 500 12 12 12 0 0 0
70501 붉은영혼(화려) ITEM_SOUL SOUL_RED 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX NONE NONE NONE 0 0 70502 0 0 REAL_TIME 86400 LIMIT_NONE 60 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 2 500 15 15 15 0 0 0
70502 붉은영혼(고귀) ITEM_SOUL SOUL_RED 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX NONE NONE NONE 0 0 70503 0 0 REAL_TIME 172800 LIMIT_NONE 120 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 3 500 15 18 18 0 0 0
70503 붉은영혼(고대) ITEM_SOUL SOUL_RED 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX NONE NONE NONE 0 0 70504 0 0 REAL_TIME 259200 LIMIT_NONE 180 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 4 500 15 18 25 0 0 0
70504 붉은영혼(전설) ITEM_SOUL SOUL_RED 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX NONE NONE NONE 0 0 0 0 0 REAL_TIME 604800 LIMIT_NONE 180 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 5 1000 15 18 25 0 0 0
70505 푸른영혼(일반) ITEM_SOUL SOUL_BLUE 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX NONE NONE NONE 0 0 70506 0 0 REAL_TIME 86400 LIMIT_NONE 60 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 1 500 12 12 12 0 0 0
70506 푸른영혼(화려) ITEM_SOUL SOUL_BLUE 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX NONE NONE NONE 0 0 70507 0 0 REAL_TIME 86400 LIMIT_NONE 60 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 2 500 15 15 15 0 0 0
70507 푸른영혼(고귀) ITEM_SOUL SOUL_BLUE 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX NONE NONE NONE 0 0 70508 0 0 REAL_TIME 172800 LIMIT_NONE 120 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 3 500 15 18 18 0 0 0
70508 푸른영혼(고대) ITEM_SOUL SOUL_BLUE 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX NONE NONE NONE 0 0 70509 0 0 REAL_TIME 259200 LIMIT_NONE 180 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 4 500 15 18 25 0 0 0
70509 푸른영혼(전설) ITEM_SOUL SOUL_BLUE 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX NONE NONE NONE 0 0 0 0 0 REAL_TIME 604800 LIMIT_NONE 180 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 5 1000 15 18 25 0 0 0
70601 머리띠 ITEM_QUEST 0 1 ANTI_DROP | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX NONE NONE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 0 0 0 0 0 0 0 0
70602 진화의 혼 ITEM_USE USE_TUNING 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP NONE NONE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 8 0 0 0 0 0 0 0 0
70603 각성의 혼 ITEM_USE USE_TUNING 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP NONE NONE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 9 0 0 0 0 0 0 0 0
itemdesc.txt:
70500 Rüya Ruhu
70501 Parıldayan Rüya Ruhu
70502 Yanardöner Rüya Ruhu
70503 Prizmatik Rüya Ruhu
70504 Aydınlanmış Rüya Ruhu
70505 Gök Ruhu
70506 Parıldayan Gök Ruhu
70507 Yanardöner Gök Ruhu
70508 Prizmatik Gök Ruhu
70509 Aydınlanmış Gök Ruhu
70601 Mavi Saç Bandı Ah-Yu'nun Kaybettiği Saç Bandı.
70602 Ruh Parşömeni (%100) Bu parşömenle ruhunu bir basamak ilerleyecek şekilde geliştir.
70603 Ruh Parşömeni Bu parşömenle ruhunu bir basamağa kadar ilerleyecek şekilde geliştir. Deneme başarısız olabilir.
soul pack dosyalarını pack klasörünüze atıp Index'e eklemeyi unutmayın.
refine_proto'dan dönüşümleri ayarlamayı unutmayın.
Kanıt;
Hayırlı kullanımlar.
Ekli dosyalar
En Çok Reaksiyon Alan Mesajlar
Paylasim için teşekkürler
Paylaşım için teşekkürler.
- Katılım
- 22 Haz 2013
- Konular
- 108
- Mesajlar
- 1,665
- Online süresi
- 10g 2971s
- Reaksiyon Skoru
- 378
- Altın Konu
- 0
- Başarım Puanı
- 189
- TM Yaşı
- 12 Yıl 10 Ay 4 Gün
- MmoLira
- 1,438
- DevLira
- 18
Paylasim için teşekkürler
- Katılım
- 27 Nis 2017
- Konular
- 91
- Mesajlar
- 2,386
- Online süresi
- 17g 11973s
- Reaksiyon Skoru
- 1,571
- Altın Konu
- 2
- Başarım Puanı
- 248
- TM Yaşı
- 8 Yıl 11 Ay 29 Gün
- MmoLira
- 439
- DevLira
- 13
Rica ederim.Paylasim için teşekkürler
Şu an konuyu görüntüleyenler (Toplam : 3, Üye: 0, Misafir: 3)
Benzer konular
- Cevaplar
- 3
- Görüntüleme
- 214
- Cevaplar
- 13
- Görüntüleme
- 848
- Cevaplar
- 1
- Görüntüleme
- 289
- Cevaplar
- 2
- Görüntüleme
- 271











