Costume_weapon effekt

Indította Savage, 2017-10-24, 22:05:53

Sziasztok!

Valaki próbált már kosztüm fegyverhez effektet hozzá rendelni, ha igen, hogy sikerült megoldani?
Fontos lenne, valahogy megoldanom, de egyszerűen nem igazán akar működni a dolog...

Válaszokat előre is köszönöm

Bármilyen szörnyűnek is tűnik az élet, mindig van valami, amiben sikeres lehetsz.

2017-10-24, 22:09:55 #1 Utolsó szerkesztés: 2017-10-24, 22:13:41 Szerző: fabtam11
öhm elvleg ugyanolyan ez is, mint...mint a vérthezvaló hozzárendelés! :)


Idézetet írta: TheSLZ Dátum 2016-01-03, 18:48:14
Sziasztok.

Most leírom hogy tudtok indítóba hozzárendelni füstöt. (Forrás esetén!)
Miért jobb így?
Mert így az alap csillogás effect is megmarad. (Másrészt szerintem elegánsabb)
Persze lehetne az item_proto kivonogatós módszerrel is megoldani ezt,
de akkor legalább 4 féle msm kellene.
/1db amibe csak füst van, 1db amibe a füst és a 7-es csillogás, 1db amibe a füst és a 8-as, 1db amibe a füst és a 9-es/

Userinterface/InstanceBase.cpp-t nyissátok meg.

Keressetek rá erre:
case CItemData::ITEM_TYPE_ARMOR:
__ClearArmorRefineEffect();

// °©żĘ ĆŻČ­ ŔĚĆĺĆ®
if (pItem->GetSubType() == CItemData::ARMOR_BODY)
{
DWORD vnum = pItem->GetIndex();

if (12010 <= vnum && vnum <= 12049)
{
__AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL);
__AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL2);
}
}

if (refine < 7) //ÇöŔç Á¦·Ăµµ 7 ŔĚ»ó¸¸ ŔĚĆĺĆ®°ˇ ŔÖ˝Ŕ´Ď´Ů.
return 0;

if (pItem->GetSubType() == CItemData::ARMOR_BODY)
{
m_armorRefineEffect = EFFECT_REFINED+EFFECT_BODYARMOR_REFINED7+refine-7;
__AttachEffect(m_armorRefineEffect);
}
break;
}
return 0;


Ezt a részt nézzük:
if (12010 <= vnum && vnum <= 12049)
{
__AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL);
__AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL);
}


Ez az epic csillogásának beállítása.
Nost ezt az 5 sort másoljuk le pont alá.
Itt tudjátok beállítani milyen ID között tegye rá a füstöt:
if (12810 <= vnum && vnum <= 12849)

Ezek:
__AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL);
__AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL2);

meg maga az effektek amit rátesz, nevezd át a lemásolt sorba, ahol beállítottad az ID-t.
Azt javaslom nemes egyszerűséggel írj a végére egy "_2"-t.
Azaz:
__AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL_2);
__AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL2_2);


Végeredmény:
[spoiler]
Idézcase CItemData::ITEM_TYPE_ARMOR:
      __ClearArmorRefineEffect();

      // °©żĘ ĆŻČ­ ŔĚĆĺĆ®
      if (pItem->GetSubType() == CItemData::ARMOR_BODY)
      {
         DWORD vnum = pItem->GetIndex();

         if (12010 <= vnum && vnum <= 12049)
         {
            __AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL);
            __AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL2);
         }
         if (11290 <= vnum && vnum <= 11299)
         {
            __AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL_2);
            __AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL2_2);
         }
      }

      if (refine < 7)   //ÇöŔç Á¦·Ăµµ 7 ŔĚ»ó¸¸ ŔĚĆĺĆ®°ˇ ŔÖ˝Ŕ´Ď´Ů.
         return 0;

      if (pItem->GetSubType() == CItemData::ARMOR_BODY)
      {
         m_armorRefineEffect = EFFECT_REFINED+EFFECT_BODYARMOR_REFINED7+refine-7;
         __AttachEffect(m_armorRefineEffect);
      }
      break;
   }
   return 0;
[/spoiler]

Most nyissátok meg az Instancebase.h fájlt.
Keressetek erre:
EFFECT_BODYARMOR_SPECIAL, // °©żĘ 4-2-1
EFFECT_BODYARMOR_SPECIAL2, // °©żĘ 4-2-2


Írjátok alá az újakat:
EFFECT_BODYARMOR_SPECIAL_2,
EFFECT_BODYARMOR_SPECIAL2_2,


Indítót lehet is fordítani.

root/playersettingmodule.py-t nyissuk meg, és adjuk hozzá az effeketeket hogy mit olvasson.

Keress erre:
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+19, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-1.mse")
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+20, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-2.mse")

Add hozzá a 2 új effektet pl így:
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+21, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-1_WHITE.mse")
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+22, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-2_WHITE.mse")


A szám eggyel nagyobb kell hogy legyen mint az előző.

Tulajdonképpen ennyi is lett volna.
Most ugye 2 effektet adtunk hozzá a vérthez, mert az epic sorait másoltuk le, de lehet egyet is természetesen.
(epicnél a kis körök külön effektbe vannak, azért van 2db)
Az armor-4-2-1_WHITE.mse és armor-4-2-2_WHITE.mse-t itt le tudod tölteni, hátha valakinek épp kell egy kifehérített epic féle füstölés :)

Üdv,
TheSLZ

na ez lenne a vázlat, elvleg nekünk valahol az adott fájlban megkéne keresni v alkotni a fegyver / kosztümfegyver részeit és azalapján kéne megoldani, hogy adott ID-re adott effektet köthessünk  vagy ilyesmi! ;)

Ez vérthez van, kint van a fegyveres is, viszont attól függetlenül, Costume_weapon subtypeal egyaltalan nem mukodik, deven sokan kutattak, hogy lehetne effektet hozzarendelni, de semmi kezzelfoghatot nem talaltam.

Bármilyen szörnyűnek is tűnik az élet, mindig van valami, amiben sikeres lehetsz.

2017-10-24, 22:52:45 #3 Utolsó szerkesztés: 2017-10-24, 22:59:04 Szerző: 5310pati
Legegyszerűbb sztem ha berakod az Effect rendszert, aztán mikor vki felvenne kosztüm fegyvert, beállítod az új fegyver effectet is.
Nos, mivel az alap effect hozzárendelő fv, csak alap típusokra működik, ha csak nem írtátok bele magatoknak a dógot.
Íme ni:
UINT 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 (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;
case CItemData::ITEM_TYPE_ARMOR:
__ClearArmorRefineEffect();

// °©żĘ ĆŻČ­ ŔĚĆĺĆ®
if (pItem->GetSubType() == CItemData::ARMOR_BODY)
{
DWORD vnum = pItem->GetIndex();

if (12010 <= vnum && vnum <= 12049)
{
__AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL);
__AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL2);
}
}

if (refine < 7) //ÇöŔç Á¦·Ăµµ 7 ŔĚ»ó¸¸ ŔĚĆĺĆ®°ˇ ŔÖ˝Ŕ´Ď´Ů.
return 0;

if (pItem->GetSubType() == CItemData::ARMOR_BODY)
{
m_armorRefineEffect = EFFECT_REFINED+EFFECT_BODYARMOR_REFINED7+refine-7;
__AttachEffect(m_armorRefineEffect);
}
break;
}
return 0;
}

És mivel itt kosztüm kezelés nincs, véletlen sem fog effektet hozzárendelni.

Az kesz, hogy kosztümhöz is lehessen rendelni, létrehoztam neki egy teljesen új funkciót, most jelenleg azzal szenvedek, hogy bármit csinálok, rajta marad az effekt, arra is írtam új funkciót, bár az már kevésbé akar működni.

Bármilyen szörnyűnek is tűnik az élet, mindig van valami, amiben sikeres lehetsz.

2017-10-24, 23:11:30 #5 Utolsó szerkesztés: 2017-10-24, 23:13:50 Szerző: 5310pati
Csak szimplán írj ebbe bele 1 új case-t a kosztümnek azt csókolom.
Amit meg most barkácsolgattál azt csináld vissza.

Üzenet összefésülés: 2017-10-24, 23:13:50

Közbe meglett a régi forrásomból a cuccli, ennyi az egész, nem kell semmilyen új funkció hozzárendeléshez, eltávolításhoz stb, csak 1 új case ág a fv-be és műkszik a dolog szépen.
UINT CInstanceBase::__GetRefinedEffect(CItemData* pItem)
{
DWORD refine = pItem->GetSocketCount();
switch (pItem->GetType())
{
case CItemData::ITEM_TYPE_COSTUME:
{
switch (pItem->GetSubType())
{
case CItemData::COSTUME_BODY:
{
__ClearArmorRefineEffect();
m_armorRefineEffect = EFFECT_REFINED + refine;
__AttachEffect(m_armorRefineEffect);
}
break;
#ifdef ENABLE_COSTUME_WEAPON
case CItemData::COSTUME_WEAPON_SWORD:
case CItemData::COSTUME_WEAPON_BOW:
case CItemData::COSTUME_WEAPON_BELL:
case CItemData::COSTUME_WEAPON_FAN:
case CItemData::COSTUME_WEAPON_TWO_HANDED:
{
__ClearWeaponRefineEffect();
m_swordRefineEffectRight = EFFECT_REFINED + refine;
__AttachEffect(m_swordRefineEffectRight);
}
break;
case CItemData::COSTUME_WEAPON_DAGGER:
{
__ClearWeaponRefineEffect();
m_swordRefineEffectRight = EFFECT_REFINED + refine;
m_swordRefineEffectLeft = EFFECT_REFINED + refine + 3;
__AttachEffect(m_swordRefineEffectRight);
__AttachEffect(m_swordRefineEffectLeft);
}
break;
#endif
}
}
break;
case CItemData::ITEM_TYPE_WEAPON:
{
__ClearWeaponRefineEffect();
m_swordRefineEffectRight = EFFECT_REFINED + refine;
if (pItem->GetSubType() == CItemData::WEAPON_DAGGER)
m_swordRefineEffectLeft = EFFECT_REFINED + refine + 3;
if (IsMountingHorse())
if (pItem->GetSubType() == CItemData::WEAPON_FAN)
m_swordRefineEffectLeft = EFFECT_REFINED + refine + 1;

if (m_swordRefineEffectRight)
m_swordRefineEffectRight = __AttachEffect(m_swordRefineEffectRight);
if (m_swordRefineEffectLeft)
m_swordRefineEffectLeft = __AttachEffect(m_swordRefineEffectLeft);
}
break;
case CItemData::ITEM_TYPE_ARMOR:
{
__ClearArmorRefineEffect();
if (pItem->GetSubType() == CItemData::ARMOR_BODY)
{
m_armorRefineEffect = EFFECT_REFINED + refine;
__AttachEffect(m_armorRefineEffect);
}
}
break;
}
return 0;
}

Ne komplettbe másold át a kódom, mert amiket eddig megírtál effect értékek azok mind el fognak csúszni.
Kiszedtem, h ne kelljen számolgatni, hanem amit beírok értéket, azt az effectet rendelje hozzá, szal kicsit szerkessz rajta.

Az alap koncepció nekem is így néz ki, nézegettem a kódod, nem sokkal tér el az enyémtől, a funkcióktól eltekintve, a te és a saját megoldásommal is az eredmény ugyanaz, hogy miután a kosztüm fegyót felrakom, mikor levenném, az effekt rajta marad a karakteren.

Bármilyen szörnyűnek is tűnik az élet, mindig van valami, amiben sikeres lehetsz.

Azért is ezt bővítettem, nem teljesen új funkciót hoztam létre, nem kell szórakozni vele, 2 felesleges még1 ilyen amikor már itt van, csak bővíteni kell.

Az effekt ugyanúgy rajta marad a te megoldásoddal is sajnos...
Armor cserénél az effekt eltűnik a fegyverről, gondolkoztam, hogy mi lenne akkor, ha a Change Armor részből másolnám ki azt a részt, ami miatt frissül(idk még melyik az, nem néztem), de az nagyon lowbudget megoldas...




Bármilyen szörnyűnek is tűnik az élet, mindig van valami, amiben sikeres lehetsz.

2017-10-25, 00:41:11 #9 Utolsó szerkesztés: 2017-10-25, 01:03:11 Szerző: 5310pati
Nekem semmi bajom nincs vele, ha most az én megoldásom használod mennie kéne hibátlanul.

Üzenet összefésülés: 2017-10-25, 01:03:11

Sztem te ott vmit elpiszkáltál azzal h próbáltál saját cuccost írni bele.