Fegyverhez effect rendelés

Indította AngelOfGod, 2018-07-07, 23:12:37

2018-07-07, 23:12:37 Utolsó szerkesztés: 2018-07-07, 23:17:50 Szerző: AngelOfGod
Az lenne a problémám hogy ha playersettinsmoduleba +24 meg +25-re teszem az effectet akkor a fegyveren nem látszik az effect de ha megölök egy mobot akkor annak a helyén ott a effect...

instancebase.cpp
[spoiler]
IdézUINT CInstanceBase::__GetRefinedEffect(CItemData* pItem)
{
   DWORD refine = max(pItem->GetRefine() + pItem->GetSocketCount(),CItemData::ITEM_SOCKET_MAX_NUM) - CItemData::ITEM_SOCKET_MAX_NUM;
   switch (pItem->GetType())
   {
   case CItemData::ITEM_TYPE_WEAPON:
      __ClearWeaponRefineEffect();   
      if (pItem->GetSubType() == CItemData::WEAPON_SWORD)
        {
            //NEW WEAPON - [New Effect] - NEW WEAPON
            DWORD vnum = pItem->GetIndex();
            if (vnum == 300) // Change "ID" to your Weapon ID
            {
                __ClearWeaponRefineEffect(); // Clear the previous effect
                m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_SWORD_REFINED7 + refine - 7; // Normal Weapon Refine-effect
                m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_SWORD_REFINED_SPECIAL1; // effect 24 NEW EFFECT
            }
            //End NEW WEAPON - [New Effect] - NEW WEAPON
        }
      if (pItem->GetSubType() == CItemData::WEAPON_SWORD)
        {
            //NEW WEAPON - [New Effect] - NEW WEAPON
            DWORD vnum = pItem->GetIndex();
            if (vnum == 301) // Change "ID" to your Weapon ID
            {
                __ClearWeaponRefineEffect(); // Clear the previous effect
                m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_SWORD_REFINED7 + refine - 7; // Normal Weapon Refine-effect
                m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_SWORD_REFINED_SPECIAL2; // effect 25 NEW EFFECT
            }
            //End NEW WEAPON - [New Effect] - NEW WEAPON
        }

      if (refine < 7)   //ÇöŔç Á¦·Ăµµ 7 ŔĚ»ó¸¸ ŔĚĆĺĆ®°ˇ ŔÖ˝Ŕ´Ď´Ů.
         return 0;
      switch(pItem->GetSubType())
      {
      case CItemData::WEAPON_DAGGER:
         m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_SMALLSWORD_REFINED7+refine-7;
         m_swordRefineEffectLeft = EFFECT_REFINED+EFFECT_SMALLSWORD_REFINED7_LEFT+refine-7;
         break;
      case CItemData::WEAPON_FAN:
         m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_FANBELL_REFINED7+refine-7;
         break;
      case CItemData::WEAPON_ARROW:
      case CItemData::WEAPON_BELL:
         m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_SMALLSWORD_REFINED7+refine-7;
         break;
      case CItemData::WEAPON_BOW:
         m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_BOW_REFINED7+refine-7;
         break;
      default:
         m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_SWORD_REFINED7+refine-7;
      }
      if (m_swordRefineEffectRight)
         m_swordRefineEffectRight = __AttachEffect(m_swordRefineEffectRight);
      if (m_swordRefineEffectLeft)
         m_swordRefineEffectLeft = __AttachEffect(m_swordRefineEffectLeft);
      break;
[/spoiler]

instancebase.h
[spoiler]
Idézenum   //ľĆ·ˇ ąřČŁ°ˇ ąŮ˛î¸é registerEffect Âʵµ ąŮ˛Ůľî Áŕľß ÇŃ´Ů.
      {
         EFFECT_REFINED_NONE,

         EFFECT_SWORD_REFINED6,
         EFFECT_SWORD_REFINED7,
         EFFECT_SWORD_REFINED8,
         EFFECT_SWORD_REFINED9,

         EFFECT_BOW_REFINED6,
         EFFECT_BOW_REFINED7,
         EFFECT_BOW_REFINED8,
         EFFECT_BOW_REFINED9,

         EFFECT_FANBELL_REFINED6,
         EFFECT_FANBELL_REFINED7,
         EFFECT_FANBELL_REFINED8,
         EFFECT_FANBELL_REFINED9,

         EFFECT_SMALLSWORD_REFINED6,
         EFFECT_SMALLSWORD_REFINED7,
         EFFECT_SMALLSWORD_REFINED8,
         EFFECT_SMALLSWORD_REFINED9,

         EFFECT_SMALLSWORD_REFINED6_LEFT,
         EFFECT_SMALLSWORD_REFINED7_LEFT,
         EFFECT_SMALLSWORD_REFINED8_LEFT,
         EFFECT_SMALLSWORD_REFINED9_LEFT,

         EFFECT_BODYARMOR_REFINED7,
         EFFECT_BODYARMOR_REFINED8,
         EFFECT_BODYARMOR_REFINED9,

         EFFECT_SWORD_REFINED_SPECIAL1,   // NEW_WEAPON_EFFECT_24
         EFFECT_SWORD_REFINED_SPECIAL2,   // NEW_WEAPON_EFFECT_24

         EFFECT_REFINED_NUM,
      };
      
[/spoiler]

playersettinsmoude.py
[spoiler]
Idézchrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+24, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/EFFECT_SWORD_REFINED_SPECIAL1.mse") ## Effect for sword
   chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+25, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/EFFECT_SWORD_REFINED_SPECIAL2.mse") ## Effect for sword
[/spoiler]

Szia!

      enum   //ľĆ·ˇ ąřČŁ°ˇ ąŮ˛î¸é registerEffect Âʵµ ąŮ˛Ůľî Áŕľß ÇŃ´Ů.

Ennek a végére írd oda ezt:

JUST_FOR_CHECK = 150,






Beraktam de nem történt semmi. :/ Mitől függ hogy a vért +7, +8, +9-esen csillog? Meg item_protoba már nem igen tudom hol van. Instance base-be lehet csak megadni?

2018-07-08, 23:25:11 #3 Utolsó szerkesztés: 2018-07-08, 23:41:46 Szerző: [VIP]Rin the Exorcist
Magáért beszél, de azért leírom.

Adott az alábbi változó:

DWORD refine = max(pItem->GetRefine() + pItem->GetSocketCount(),CItemData::ITEM_SOCKET_MAX_NUM) - CItemData::ITEM_SOCKET_MAX_NUM;

Legyen mondjuk egy tárgyunk +7-es és 2 kő mehet bele.
  • Megnézzük a tárgy szintjét és hozzáadjuk a foglalatainak számát. (7+2=9)
  • Majd vesszük a nagyobbat, az imént kapott szám és a max foglalatok közül. (9>3)
  • Utána kivonjuk a max foglalatok számát. (9-3=6)

  • A későbbiekben pedig eljutunk az alábbi feltételhez:
    if (refine < 7)
    return 0;


    Ami a 7-nél kisebb értékeket kizárja. Remélem már érthető.

    [spoiler]Tetszik a code tag használata a kódrészletekben.[/spoiler]
    "Tisztelet a kivételnek! Mindig tisztelet a kivételnek!"
    "KezdÅ' vagyok, ne nézz le... (:"