Hikayeler

Reklam vermek için turkmmo@gmail.com
Kaynak ikonu

Rüya Ruhu Sistemi 0.1

indirmek için izniniz yok

Eric Bloodaxe

Özgürsün, onun için mahvoldun.
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye
TM Üye
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;
  • 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;
Screenshot_2.png

Screenshot_3.png

Screenshot_4.png


Hayırlı kullanımlar.
 

Ekli dosyalar

  • soul.rar
    157.3 KB · Görüntüleme: 0

En Çok Reaksiyon Alan Mesajlar

Şu an konuyu görüntüleyenler (Toplam : 3, Üye: 0, Misafir: 3)

Geri
Üst