Hide Costume with Transmutation

Totalitatea subiectelor care nu respectă regulamentul impus in sectiunea "Probleme şi Întrebări" vor fi stocate aici.
Închis
Avatar utilizator
enzicz
Nivel 1

Nivel 1
Mesaje: 68
Membru din: 22 Feb 2014, 12:38
Aprecieri: 43  
Mulţumiri: 4  
Medalii

Hi.. Today i tried to add  costume hiding but i found a little problem with it.. When i'm wearing transmuted armor and when i use hide button it´s shows me up armor without skin.. I tried to do it by myself but without success..
Can someone help me with this?

There is everything what i added:
char.cpp

Cod: Selectaţi tot

WORD CHARACTER::GetPart(BYTE bPartPos) const
{
	assert(bPartPos < PART_MAX_NUM);

	if(bPartPos == PART_MAIN && GetWear(WEAR_COSTUME_BODY) && GetQuestFlag("costume.change") == 1)
		if(const LPITEM pArmor = GetWear(WEAR_BODY))
			return (NULL != pArmor) ? pArmor->GetVnum() : GetOriginalPart(PART_MAIN);

	return m_pointsInstant.parts[bPartPos];
}

item.cpp

Cod: Selectaţi tot

        case ITEM_ARMOR:
            {
                // 코스츔 body를 입고있다면 armor는 벗던 입던 상관 없이 비주얼에 영향을 주면 안 됨.
                //if (0 != m_pOwner->GetWear(WEAR_COSTUME_BODY))
                if (m_pOwner->GetWear(WEAR_COSTUME_BODY) != 0 && m_pOwner->GetQuestFlag("costume.change") != 1)
                    break;

                if (GetSubType() == ARMOR_BODY || GetSubType() == ARMOR_HEAD || GetSubType() == ARMOR_FOOTS || GetSubType() == ARMOR_SHIELD)
                {
                    if (bAdd)
                    {
                        if (GetProto()->bSubType == ARMOR_BODY)
#ifdef __CHANGELOOK_SYSTEM__
                        {
                            DWORD dwRes = GetTransmutation() != 0 ? GetTransmutation() : GetVnum();
                            m_pOwner->SetPart(PART_MAIN, dwRes);
                        }
#else
                            m_pOwner->SetPart(PART_MAIN, GetVnum());
#endif
                    }
                    else
                    {
                        if (GetProto()->bSubType == ARMOR_BODY)
                            m_pOwner->SetPart(PART_MAIN, m_pOwner->GetOriginalPart(PART_MAIN));
                    }
                }
            }
            break;

        // 코스츔 아이템 입었을 때 캐릭터 parts 정보 세팅. 기존 스타일대로 추가함..
        case ITEM_COSTUME:
            {
                DWORD toSetValue = this->GetVnum();
                EParts toSetPart = PART_MAX_NUM;

                // 갑옷 코스츔
                if (GetSubType() == COSTUME_BODY)
                {
                    toSetPart = PART_MAIN;
                    if (false == bAdd)
                    {
                        const CItem* pArmor = m_pOwner->GetWear(WEAR_BODY);
                        toSetValue = (NULL != pArmor) ? pArmor->GetVnum() : m_pOwner->GetOriginalPart(PART_MAIN);
                        #ifdef __CHANGELOOK_SYSTEM__
                        if (pArmor)
                            toSetValue = pArmor->GetTransmutation() != 0 ? pArmor->GetTransmutation() : pArmor->GetVnum();
                        #endif
                    }
                    #ifdef __CHANGELOOK_SYSTEM__
                    else
                        toSetValue = GetTransmutation() != 0 ? GetTransmutation() : GetVnum();
                    #endif
                }
cmd.cpp

Cod: Selectaţi tot

ACMD(do_costume_change);
	 

{ "costume_change",	do_costume_change,		0,		POS_DEAD,	GM_PLAYER	},


cmd_general.cpp

Cod: Selectaţi tot

ACMD(do_costume_change)
{
    EParts toSetPart = PART_MAX_NUM;
    toSetPart = PART_MAIN;

    if (ch->IsPolymorphed())
        return;
    
    if (!ch->GetWear(WEAR_COSTUME_BODY))
        return;
    
    int toSetValue = 0;

    if (ch->GetQuestFlag("costume.change") < 1)
    {
        ch->SetQuestFlag("costume.change", 1);
        const CItem* pArmor = ch->GetWear(WEAR_BODY);
        toSetValue = (NULL != pArmor) ? pArmor->GetVnum() : ch->GetOriginalPart(PART_MAIN);
    }
    else
    {
        ch->SetQuestFlag("costume.change", 0);
        const CItem* pArmor = ch->GetWear(WEAR_COSTUME_BODY);
        toSetValue = (NULL != pArmor) ? pArmor->GetVnum() : ch->GetOriginalPart(PART_MAIN);
    }

    if (PART_MAX_NUM != toSetPart)
    {
        ch->SetPart((BYTE)toSetPart, toSetValue);
        ch->UpdatePacket();
    }
}
Avatar utilizator
enzicz
Nivel 1

Nivel 1
Mesaje: 68
Membru din: 22 Feb 2014, 12:38
Aprecieri: 43  
Mulţumiri: 4  
Medalii

#up

[ Postat de pe Android ] Imagine
Avatar utilizator
LikePc
Nivel 10

Nivel 10
Mesaje: 2240
Membru din: 11 Aug 2015, 00:01
Server: M3
Regat: Chunjo
Aprecieri: 9  
Mulţumiri: 270  
 Contact:
Medalii

Subiect arhivat , autorul nu a dat nici un semn timp de 3zile.
https:/horus-maps.com
Afișează semnătura
Închis
Răspunsuri
2
Vizualizări
704
Răspunsuri
8
Vizualizări
1199
Răspunsuri
3
Vizualizări
453

Înapoi la “Arhivă Probleme şi Întrebări”

  • Informaţie
  • Cine este conectat

    Utilizatori ce ce navighează pe acest forum: Semrush [Bot] și 43 vizitatori