Rüya Ruhu Sistemi

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 99

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Merhaba arkadaşlar.
❤️
Sistem özellikleri;
  • <li data-xf-list-type="ul">Rüya Ruhu saldırı hasarını artırır. <li data-xf-list-type="ul">Gök Ruhu beceri hasarını artırır. <li data-xf-list-type="ul">PvP ve Dönüşüm sırasında herhangi bir işleve sahip değiller, sadece PvE modunda çalışır. <li data-xf-list-type="ul">Eşya efektleri Official sunucudaki ile aynıdır. <li data-xf-list-type="ul">Aynı anda çalıştırılabilir. <li data-xf-list-type="ul">Rüya Ruhu düşmana karşı vurulan her bir darbede etki gösterir. <li data-xf-list-type="ul">Gök Ruhu düşmana karşı beceri kullanımı başına etki gösterir.
Kod:
//müsait bir yere ekle; #define ENABLE_ITEM_SOUL_SYSTEM

Kod:
//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

Kod:
//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

Kod:
//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

Kod:
//arat;     if (pkVictim-&gt;Damage(pkAttacker, iDam, DAMAGE_TYPE_NORMAL))         return (BATTLE_DEAD); //altına ekle; #ifdef ENABLE_ITEM_SOUL_SYSTEM     if (!pkAttacker-&gt;IsPolymorphed() &amp;&amp; !pkVictim-&gt;IsPC())         iDam *= pkAttacker-&gt;GetSoulDamVal(true); #endif

Kod:
//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

Kod:
//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-&gt;GetValue(0) == BDRAGON_SCROLL)     {         if (item-&gt;GetType() != ITEM_METIN || item-&gt;GetRefineLevel() != 4)         {             ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 아이템으로 개량할 수 없습니다."));             return false;         }     } //altına ekle; #ifdef ENABLE_ITEM_SOUL_SYSTEM     else if (pkItemScroll-&gt;GetValue(0) == SOUL_SCROLL)     {         if (item-&gt;GetType() != ITEM_SOUL)         {             ChatPacket(CHAT_TYPE_INFO, LC_TEXT("you can only upgrade soul items"));             return false;         }     } #endif //tekrar arat;         pkItemScroll-&gt;GetValue(0) == YAGONG_SCROLL) //değiştir;         pkItemScroll-&gt;GetValue(0) == YAGONG_SCROLL #ifdef ENABLE_ITEM_SOUL_SYSTEM         || pkItemScroll-&gt;GetValue(0) == SOUL_SCROLL #endif         ) //tekrar arat;         else if (pkItemScroll-&gt;GetValue(0) == HYUNIRON_CHN) {} //altına ekle; #ifdef ENABLE_ITEM_SOUL_SYSTEM         else if (pkItemScroll-&gt;GetValue(0) == SOUL_SCROLL)         {             success_prob += pkItemScroll-&gt;GetValue(1);         } #endif //tekrar arat;         else if (pkItemScroll-&gt;GetValue(0) == YAGONG_SCROLL)         {             szRefineType = "YAGONG_SCROLL";         } //altına ekle; #ifdef ENABLE_ITEM_SOUL_SYSTEM         else if (pkItemScroll-&gt;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 &lt; INVENTORY_MAX_NUM; ++i)     {         LPITEM item = GetInventoryItem(i);         if (!item)             continue;         if (item-&gt;GetType() == ITEM_SOUL)         {             if (item-&gt;GetSocket(1) &gt; 0)             {                 UseItemEx(item, TItemPos(item-&gt;GetWindow(), item-&gt;GetCell()));             }         }     } } float CHARACTER::GetSoulDamVal(bool bMelee) {     for (int i = 0; i &lt; INVENTORY_MAX_NUM; ++i)     {         LPITEM item = GetInventoryItem(i);         if (!item)             continue;         if (item-&gt;GetType() == ITEM_SOUL)         {             if (bMelee)             {                 if (item-&gt;GetSocket(2) == 0)                 {                     if (item-&gt;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-&gt;SetCount(item-&gt;GetCount()-1);                 }                 if (item-&gt;GetSubType() == RED_SOUL &amp;&amp; item-&gt;GetSocket(1) &gt; 0)                 {                     item-&gt;SetSocket(2, item-&gt;GetSocket(2) - 1);                     if (item-&gt;GetSocket(1) &gt; 0)                         return float(item-&gt;GetValue(3)/10.0f);                     return 1.0f;                 }             }             else             {                 if (item-&gt;GetSocket(2) == 0)                 {                     if (item-&gt;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-&gt;SetCount(item-&gt;GetCount()-1);                 }                 if (item-&gt;GetSubType() == BLUE_SOUL &amp;&amp; item-&gt;GetSocket(1) &gt; 0)                 {                     item-&gt;SetSocket(2, item-&gt;GetSocket(2) - 1);                     if (item-&gt;GetSocket(1) &gt; 0)                         return float(item-&gt;GetValue(3)/10.0f);                     return 1.0f;                 }             }         }     }     return 1.0f; } bool CHARACTER::CheckSoulItem(bool bBlue) {     for (int i = 0; i &lt; INVENTORY_MAX_NUM; ++i)     {         LPITEM item = GetInventoryItem(i);         if (!item)             continue;         if (item-&gt;GetType() == ITEM_SOUL)         {             if (bBlue)             {                 if (item-&gt;GetSubType() == BLUE_SOUL)                 {                     if (item-&gt;GetSocket(1) &gt; 0)                     {                         return true;                     }                     return false;                 }             }             else             {                 if (item-&gt;GetSubType() == RED_SOUL)                 {                     if (item-&gt;GetSocket(1) &gt; 0)                     {                         return true;                     }                     return false;                 }             }         }     }     return false; } #endif //tekrar arat;         else if (pkItem-&gt;GetValue(0) == BDRAGON_SCROLL)         {             if (pkTarget-&gt;GetRefineSet() != 702) return false;             RefineInformation(pkTarget-&gt;GetCell(), REFINE_TYPE_BDRAGON, pkItem-&gt;GetCell());         } //altına ekle; #ifdef ENABLE_ITEM_SOUL_SYSTEM         else if (pkTarget-&gt;GetValue(0) == SOUL_SCROLL)         {             if (pkTarget-&gt;GetType() != ITEM_SOUL) return false;             RefineInformation(pkTarget-&gt;GetCell(), REFINE_TYPE_SOUL_SCROLL, pkItem-&gt;GetCell());         } #endif //tekrar arat;             if (item2-&gt;GetVnum() &gt;= 28330 &amp;&amp; item2-&gt;GetVnum() &lt;= 28343)             {                 ChatPacket(CHAT_TYPE_INFO, LC_TEXT("+3 영석은 이 아이템으로 개량할 수 없습니다"));                 return false;             } //altına ekle; #ifdef ENABLE_ITEM_SOUL_SYSTEM             if (item2-&gt;GetType() == ITEM_SOUL)             {                 if (item-&gt;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-&gt;GetSubType())         {         case EXTRACT_DRAGON_SOUL:             if (pDestItem-&gt;IsDragonSoul())             {                 return DSManager::instance().PullOut(this, NPOS, pDestItem, item);             }             return false;         case EXTRACT_DRAGON_HEART:             if (pDestItem-&gt;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-&gt;GetSubType())         {         case RED_SOUL:         {             if (item-&gt;GetSocket(1) != 0)             {                 if (!IsAffectFlag(AFF_RED_SOUL))                 {                     item-&gt;SetSocket(1, 0);                     item-&gt;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-&gt;SetSocket(1, 0);                         item-&gt;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-&gt;SetSocket(1, 1);                         item-&gt;Lock(true);                         return true;                     }                     else                     {                         RemoveAffect(AFFECT_SOUL);                         item-&gt;SetSocket(1, 0);                         item-&gt;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-&gt;SetSocket(1, 1);                         item-&gt;Lock(true);                         return true;                     }                     item-&gt;SetSocket(1,0);                     item-&gt;Lock(false);                     return true;                 }                 else if (IsAffectFlag(AFF_RED_SOUL))                 {                     RemoveAffect(AFFECT_SOUL);                     item-&gt;SetSocket(1,0);                     item-&gt;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-&gt;SetSocket(1,1);                     item-&gt;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-&gt;SetSocket(1,1);                     item-&gt;Lock(true);                     return true;                 }             }         }         break;         case BLUE_SOUL:         {             if (item-&gt;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-&gt;SetSocket(1, 0);                         item-&gt;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-&gt;SetSocket(1, 1);                         item-&gt;Lock(true);                         return true;                     }                     else                     {                         RemoveAffect(AFFECT_SOUL);                         item-&gt;SetSocket(1, 0);                         item-&gt;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-&gt;SetSocket(1, 1);                         item-&gt;Lock(true);                         return true;                     }                     item-&gt;SetSocket(1,0);                     item-&gt;Lock(false);                     return true;                 }                 else if (IsAffectFlag(AFF_BLUE_SOUL))                 {                     RemoveAffect(AFFECT_SOUL);                     item-&gt;SetSocket(1,0);                     item-&gt;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-&gt;SetSocket(1,1);                     item-&gt;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-&gt;SetSocket(1,1);                     item-&gt;Lock(true);                     return true;                 }             }         }         break;         }     }     break; #endif

Kod:
//arat;                         iDam -= iDam * (ResistAmount / 100.0);                     }                 }             }         } //altına ekle; #ifdef ENABLE_ITEM_SOUL_SYSTEM         if (!m_pkChr-&gt;IsPolymorphed() &amp;&amp; !pkChrVictim-&gt;IsPC())             iDam *= m_pkChr-&gt;GetSoulDamVal(false); #endif

Kod:
//arat;                 return;             }             if (true == CThreeWayWar::instance().IsSungZiMapIndex(ch-&gt;GetMapIndex())) //üstüne ekle; #ifdef ENABLE_ITEM_SOUL_SYSTEM                 ch-&gt;CheckSoul(); #endif //tekrar arat;                 else                 {                     ch-&gt;Show(ch-&gt;GetMapIndex(), GetSungziStartX(ch-&gt;GetEmpire()), GetSungziStartY(ch-&gt;GetEmpire()));                 }                 ch-&gt;PointChange(POINT_HP, ch-&gt;GetMaxHP() - ch-&gt;GetHP());                 ch-&gt;PointChange(POINT_SP, ch-&gt;GetMaxSP() - ch-&gt;GetSP());                 ch-&gt;ReviveInvisible(5); //altına ekle; #ifdef ENABLE_ITEM_SOUL_SYSTEM                 ch-&gt;CheckSoul(); #endif //tekrar arat;                 if (CWarMapManager::instance().GetStartPosition(ch-&gt;GetMapIndex(), ch-&gt;GetGuild()-&gt;GetID() &lt; dwGuildOpponent ? 0 : 1, pos))                     ch-&gt;Show(ch-&gt;GetMapIndex(), pos.x, pos.y);                 else                     ch-&gt;ExitToSavedLocation();                 ch-&gt;PointChange(POINT_HP, ch-&gt;GetMaxHP() - ch-&gt;GetHP());                 ch-&gt;PointChange(POINT_SP, ch-&gt;GetMaxSP() - ch-&gt;GetSP());                 ch-&gt;ReviveInvisible(5); //altına ekle; #ifdef ENABLE_ITEM_SOUL_SYSTEM                 ch-&gt;CheckSoul(); #endif //tekrar arat;             case SCMD_RESTART_HERE:                 sys_log(0, "do_restart: restart here");                 ch-&gt;RestartAtSamePos();                 //ch-&gt;Show(ch-&gt;GetMapIndex(), ch-&gt;GetX(), ch-&gt;GetY());                 ch-&gt;PointChange(POINT_HP, ch-&gt;GetMaxHP() - ch-&gt;GetHP());                 ch-&gt;PointChange(POINT_SP, ch-&gt;GetMaxSP() - ch-&gt;GetSP());                 ch-&gt;ReviveInvisible(5); //altına ekle; #ifdef ENABLE_ITEM_SOUL_SYSTEM                 ch-&gt;CheckSoul(); #endif //tekrar arat;     case SCMD_RESTART_HERE:         sys_log(0, "do_restart: restart here");         ch-&gt;RestartAtSamePos();         //ch-&gt;Show(ch-&gt;GetMapIndex(), ch-&gt;GetX(), ch-&gt;GetY());         ch-&gt;PointChange(POINT_HP, 50 - ch-&gt;GetHP());         ch-&gt;DeathPenalty(0);         ch-&gt;ReviveInvisible(5); //altına ekle; #ifdef ENABLE_ITEM_SOUL_SYSTEM         ch-&gt;CheckSoul(); #endif

Kod:
//arat;     if (Race &lt; JOB_WARRIOR || Race &gt; JOB_WOLFMAN)         return; //altına ekle;     if (Cat &lt; ITEM_NONE || Cat &gt; ITEM_SOUL)         return;

Kod:
//arat;     if (item-&gt;IsDragonSoul() &amp;&amp; 0 == id)     {         DSManager::instance().DragonSoulItemInitialize(item);     } //altına ekle; #ifdef ENABLE_ITEM_SOUL_SYSTEM     if (item-&gt;GetType() == ITEM_SOUL)     {         item-&gt;SetSocket(2, item-&gt;GetValue(2));     } #endif

Kod:
//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]),

Kod:
//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

Kod:
//müsait bir yere ekle; #define ENABLE_ITEM_SOUL_SYSTEM

Kod:
//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

Kod:
//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

Kod:
//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

Kod:
//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-&gt;anti_flags; } BYTE CPythonPlayer::GetItemTypeBySlot(TItemPos Cell) {     if (!Cell.IsValidCell())         return 0;     CItemData * pItemDataPtr = nullptr;     if (CItemManager::Instance().GetItemDataPointer(GetItemIndex(Cell), &amp;pItemDataPtr))         return pItemDataPtr-&gt;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), &amp;pItemDataPtr))         return pItemDataPtr-&gt;GetSubType();     else     {         TraceError("FAILED\t\tCPythonPlayer::GetItemSubTypeBySlot()\t\tCell(%d, %d) item is nullptr", Cell.window_type, Cell.cell);         return 0;     } } #endif

Kod:
//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

Kod:
//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, &amp;Cell.cell))             return Py_BadArgument();         if (!PyTuple_GetInteger(poArgs, 1, &amp;antiflag))             return Py_BadArgument();         break;     case 3:         if (!PyTuple_GetInteger(poArgs, 0, &amp;Cell.window_type))             return Py_BadArgument();         if (!PyTuple_GetInteger(poArgs, 1, &amp;Cell.cell))             return Py_BadArgument();         if (!PyTuple_GetInteger(poArgs, 2, &amp;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, &amp;Cell.cell))             return Py_BadArgument();         break;     case 2:         if (!PyTuple_GetByte(poArgs, 0, &amp;Cell.window_type))             return Py_BadArgument();         if (!PyTuple_GetInteger(poArgs, 1, &amp;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, &amp;Cell.cell))             return Py_BadArgument();         break;     case 2:         if (!PyTuple_GetByte(poArgs, 0, &amp;Cell.window_type))             return Py_BadArgument();         if (!PyTuple_GetInteger(poArgs, 1, &amp;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

Kod:
#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")

Kod:
#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 &gt;= 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)

Kod:
#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 &lt; 3:                 value_index = 3             if value_index &gt; 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 &gt; 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

Kod:
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

Kod:
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

Kod:
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

Kod:
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;
50377_6acdd06714d78143f6c7d0249bf0acb5.png

50378_9234ab224f12015a75e140a0d5bee272.png

50379_89d1c7f8c0d6f2708299775326c8ee4e.png


Hayırlı kullanımlar.
Rüya Ruhu Sistemi Nedir?

Metin2 özel sunucularında gelişmiş PvP sistemlerine odaklanan geliştiriciler için kritik öneme sahip olan Rüya Ruhu Sistemi, oyuncuların karakter güçlerini artırmada kullanılan etkileyici bir özelliktir. Bu sistem, oyuncuların belirli eşyaları birleştirerek güçlü bonuslar kazanmalarını sağlar. Özellikle C++ tabanlı sistemlerde entegre edilmesiyle birlikte, hem estetik hem de stratejik açıdan dikkat çeker. Rüya Ruhu, oyuncuların karakterlerini daha güçlü hale getirmek için kullandıkları bir yükseltme mekanizmasıdır. Bu sistem genellikle PvP odaklı sunucularda popülerdir ve oyuncuların rekabet gücünü artırmada önemli rol oynar.

Sistem Nasıl Çalışır?

Rüya Ruhu sistemi, oyuncuların elde ettikleri Rüya Taşı ve Ruh eşyalarını bir araya getirerek karakterlerine bonuslar kazandırmalarını sağlar. Bu işlem genellikle bir GUI üzerinden yönetilir. Python tabanlı Py GUI sistemleri, bu süreçte kullanıcı dostu bir arayüz sunarak deneyimi artırır. Oyuncular, belirli sayıda Rüya Taşı ve Ruh birleştirildiğinde karakterlerine ek hasar, savunma veya özel efektler kazandırabilirler. Bu işlemler genellikle Python Script ile kontrol edilir ve sunucu tarafında game core ile entegre çalışır.

C++ Kaynak Kod Entegrasyonu

Metin2 özel sunucularında Rüya Ruhu sistemi, genellikle C++ tabanlı kaynak kodlarla entegre edilir. Geliştiriciler, server src dosyalarına bu sistemi eklemek için source edit işlemleri yapar. Bu süreçte martysama gibi kaynaklar oldukça faydalı olabilir. Rüya Ruhu sisteminin doğru çalışabilmesi için hem auth hem de game sunucularında gerekli düzenlemeler yapılmalıdır. Geliştiriciler, db core üzerinde veritabanı bağlantılarını da eksiksiz yapmalıdır.

Python ve Py Root Kullanımı

Sistemde kullanılan Python scriptleri genellikle py root altında tutulur. Bu scriptler, oyuncuların Rüya Ruhu yükseltmelerini gerçekleştirmesini sağlar. UIScript ile birlikte çalışan bu yapı, kullanıcı arayüzünü etkili şekilde destekler. Py GUI sistemleri sayesinde, oyuncular Rüya Ruhu işlemlerini daha kolay ve anlaşılır bir şekilde yapabilirler. Bu, özellikle yeni başlayan geliştiriciler için öğrenmeyi kolaylaştırır.

Sunucu Paketleme ve Dağıtım

Oluşturulan Rüya Ruhu sistemi, pack olarak derlenip oyunculara sunulabilir. Bu süreçte compile işlemleri önemlidir. Doğru paketleme sayesinde sistem, farklı sunuculara kolayca entegre edilebilir. Bu tür sistemler genellikle PvP odaklı sunucularda tercih edilir ve oyuncuların ilgisini çekecek niteliktedir.


What is Dream Soul System?

The Dream Soul System is a crucial feature for developers focusing on advanced PvP systems in Metin2 private servers. This system allows players to enhance their character power by combining specific items. Integrated with C++ based systems, it attracts attention both aesthetically and strategically. Dream Soul is a power-up mechanism that players use to strengthen their characters. It is especially popular in PvP focused servers and plays a significant role in increasing player competitiveness.

How Does the System Work?

The Dream Soul system allows players to grant bonuses to their characters by combining obtained Dream Stones and Soul items. This process is usually managed through a GUI. Py GUI systems based on Python provide a user-friendly interface that enhances the experience. When players combine a certain number of Dream Stones and Souls, they can grant additional damage, defense, or special effects to their characters. These operations are typically controlled via Python Script and integrated with the game core on the server side.

C++ Source Code Integration

In Metin2 private servers, the Dream Soul system is usually integrated with C++ based source codes. Developers perform source edit operations to add this system into server src files. Resources like martysama can be very helpful during this process. For the system to work correctly, necessary adjustments must be made in both auth and game servers. Developers must also complete database connections properly within the db core.

Using Python and Py Root

Python scripts used in the system are generally stored under py root. These scripts allow players to perform Dream Soul upgrades. Together with UIScript, this structure effectively supports the user interface. Thanks to Py GUI systems, players can execute Dream Soul operations more easily and clearly, which makes learning easier especially for beginner developers.

Server Packaging and Distribution

The created Dream Soul system can be compiled as a pack and distributed to players. Compilation processes are important during this phase. Proper packaging enables the system to be easily integrated into different servers. Such systems are commonly preferred in PvP-focused servers and have the quality to attract player interest.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt