Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

System kostiumów dla broni


Rekomendowane odpowiedzi

Opublikowano

common/item_length.h

enum ECostumeSubTypes
{
	COSTUME_BODY = ARMOR_BODY,
	COSTUME_HAIR = ARMOR_HEAD,
	COSTUME_WEAPON = WEAPON_SWORD,
	COSTUME_NUM_TYPES,
};
enum EItemWearableFlag
{
	WEARABLE_BODY	= (1 << 0),
	WEARABLE_HEAD	= (1 << 1),
	WEARABLE_FOOTS	= (1 << 2),
	WEARABLE_WRIST	= (1 << 3),
	WEARABLE_WEAPON	= (1 << 4),
	WEARABLE_NECK	= (1 << 5),
	WEARABLE_EAR	= (1 << 6),
	WEARABLE_UNIQUE	= (1 << 7),
	WEARABLE_SHIELD	= (1 << 8),
	WEARABLE_ARROW	= (1 << 9),
	WEARABLE_HAIR	= (1 << 10),
	WEARABLE_ABILITY		= (1 << 11),
	WEARABLE_COSTUME_BODY	= (1 << 12),
	WEARABLE_COSTUME_WEAPON	= (1 << 13),
};

common/length.h

enum EWearPositions
{
	WEAR_BODY,		// 0
	WEAR_HEAD,		// 1
	WEAR_FOOTS,		// 2
	WEAR_WRIST,		// 3
	WEAR_WEAPON,	// 4
	WEAR_NECK,		// 5
	WEAR_EAR,		// 6
	WEAR_UNIQUE1,	// 7
	WEAR_UNIQUE2,	// 8
	WEAR_ARROW,		// 9
	WEAR_SHIELD,	// 10
    WEAR_ABILITY1,  // 11
    WEAR_ABILITY2,  // 12
    WEAR_ABILITY3,  // 13
    WEAR_ABILITY4,  // 14
    WEAR_ABILITY5,  // 15
    WEAR_ABILITY6,  // 16
    WEAR_ABILITY7,  // 17
    WEAR_ABILITY8,  // 18
	WEAR_COSTUME_BODY,	// 19
	WEAR_COSTUME_HAIR,	// 20
	WEAR_COSTUME_WEAPON,	// 20
	
	WEAR_RING1,			// 21	: 신규 반지슬롯1 (왼쪽)
	WEAR_RING2,			// 22	: 신규 반지슬롯2 (오른쪽)

	WEAR_BELT,			// 23	: 신규 벨트슬롯

	WEAR_MAX = 32	// 
};

game/src/char_item.cpp

			case POINT_COSTUME_ATTR_BONUS:
				{
					static BYTE abSlot[] = { WEAR_COSTUME_BODY, WEAR_COSTUME_HAIR, WEAR_COSTUME_WEAPON };
					static std::vector <BYTE> vec_slots (abSlot, abSlot + _countof(abSlot));
					pBuff = M2_NEW CBuffOnAttributes(this, bType, &vec_slots);
				}

game/src/cmd_general.cpp

ACMD(do_costume)
{
	char buf[512];
	const size_t bufferSize = sizeof(buf);

	char arg1[256];
	one_argument(argument, arg1, sizeof(arg1));

	CItem* pBody = ch->GetWear(WEAR_COSTUME_BODY);
	CItem* pHair = ch->GetWear(WEAR_COSTUME_HAIR);
	CItem* pWeapon = ch->GetWear(WEAR_COSTUME_WEAPON);

	ch->ChatPacket(CHAT_TYPE_INFO, "COSTUME status:");

	if (pHair)
	{
		const char* itemName = pHair->GetName();
		ch->ChatPacket(CHAT_TYPE_INFO, "  HAIR : %s", itemName);

		for (int i = 0; i < pHair->GetAttributeCount(); ++i)
		{
			const TPlayerItemAttribute& attr = pHair->GetAttribute(i);
			if (0 < attr.bType)
			{
				snprintf(buf, bufferSize, FN_point_string(attr.bType), attr.sValue);
				ch->ChatPacket(CHAT_TYPE_INFO, "     %s", buf);
			}
		}

		if (pHair->IsEquipped() && arg1[0] == 'h')
			ch->UnequipItem(pHair);
	}

	if (pBody)
	{
		const char* itemName = pBody->GetName();
		ch->ChatPacket(CHAT_TYPE_INFO, "  BODY : %s", itemName);

		if (pBody->IsEquipped() && arg1[0] == 'b')
			ch->UnequipItem(pBody);
	}
	if (pWeapon)
	{
		const char* itemName = pWeapon->GetName();
		ch->ChatPacket(CHAT_TYPE_INFO, "  WEAPON : %s", itemName);

		if (pWeapon->IsEquipped() && arg1[0] == 'w')
			ch->UnequipItem(pWeapon);
	}
}

game/src/item.cpp

	else if (GetType() == ITEM_COSTUME)
	{
		if (GetSubType() == COSTUME_BODY)
			return WEAR_COSTUME_BODY;
		else if (GetSubType() == COSTUME_HAIR)
			return WEAR_COSTUME_HAIR;
		else if (GetSubType() == COSTUME_WEAPON)
			return WEAR_COSTUME_WEAPON;
	}
               else if (GetSubType() == COSTUME_WEAPON)
                {
                    toSetPart = PART_WEAPON;

                    if (false == bAdd)
                    {
                        // 코스츔 갑옷을 벗었을 때 원래 갑옷을 입고 있었다면 그 갑옷으로 look 세팅, 입지 않았다면 default look
                        const CItem* pWeapon = m_pOwner->GetWear(WEAR_WEAPON);
                        toSetValue = (NULL != pWeapon) ? pWeapon->GetVnum() : m_pOwner->GetOriginalPart(PART_WEAPON);                        
                    }
                    
                }

game/src/char.cpp

	switch (bPartPos)
	{
		case PART_MAIN:
			if (!IsPC()) // PC가 아닌 경우 현재 파트를 그대로 리턴
				return GetPart(PART_MAIN);
			else
				return m_pointsInstant.bBasePart;

		case PART_HAIR:
			return GetPart(PART_HAIR);
			
		case PART_WEAPON:// to dodałem
			return GetPart(PART_WEAPON);// to

		default:
			return 0;
	}

db/src/ProtoReader.cpp

	static string arSub28[] = { "COSTUME_BODY", "COSTUME_HAIR", "COSTUME_WEAPON" };

CLIENT:

UserInterface/GameType.h

#ifdef ENABLE_COSTUME_SYSTEM
	const DWORD c_Costume_Slot_Start = c_Equipment_Start + 19;
	const DWORD	c_Costume_Slot_Body = c_Costume_Slot_Start + 0;
	const DWORD	c_Costume_Slot_Hair = c_Costume_Slot_Start + 1;
	const DWORD	c_Costume_Slot_Weapon = c_Costume_Slot_Start + 2;
	const DWORD c_Costume_Slot_Count = 3;
	const DWORD c_Costume_Slot_End = c_Costume_Slot_Start + c_Costume_Slot_Count;
#endif
#ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
	const DWORD c_New_Equipment_Start = c_Equipment_Start + 22;
	const DWORD c_New_Equipment_Count = 3;
	const DWORD c_Equipment_Ring1 = c_New_Equipment_Start + 1;
	const DWORD c_Equipment_Ring2 = c_New_Equipment_Start + 2;
	const DWORD c_Equipment_Belt = c_New_Equipment_Start + 0;
#endif

UserInterface/PythonItemModule.cpp

#ifdef ENABLE_COSTUME_SYSTEM
	PyModule_AddIntConstant(poModule, "ITEM_TYPE_COSTUME",			CItemData::ITEM_TYPE_COSTUME);
	PyModule_AddIntConstant(poModule, "COSTUME_TYPE_BODY",			CItemData::COSTUME_BODY);
	PyModule_AddIntConstant(poModule, "COSTUME_TYPE_HAIR",			CItemData::COSTUME_HAIR);
	PyModule_AddIntConstant(poModule, "COSTUME_TYPE_WEAPON",			CItemData::COSTUME_WEAPON);
	PyModule_AddIntConstant(poModule, "COSTUME_SLOT_START",			c_Costume_Slot_Start);
	PyModule_AddIntConstant(poModule, "COSTUME_SLOT_COUNT",			c_Costume_Slot_Count);
	PyModule_AddIntConstant(poModule, "COSTUME_SLOT_BODY",			c_Costume_Slot_Body);
	PyModule_AddIntConstant(poModule, "COSTUME_SLOT_HAIR",			c_Costume_Slot_Hair);
	PyModule_AddIntConstant(poModule, "COSTUME_SLOT_WEAPON",			c_Costume_Slot_Weapon);
	PyModule_AddIntConstant(poModule, "COSTUME_SLOT_END",			c_Costume_Slot_End);
#endif

GameLib/ItemData.h

enum ECostumeSubTypes
{
	COSTUME_BODY,
	COSTUME_HAIR,
	COSTUME_WEAPON,
	COSTUME_NUM_TYPES,
};

root/uiTooltip.py

		isCostumeItem = 0
		isCostumeHair = 0
		isCostumeBody = 0
		isCostumeWeapon = 0
			
		if app.ENABLE_COSTUME_SYSTEM:
			if item.ITEM_TYPE_COSTUME == itemType:
				isCostumeItem = 1
				isCostumeHair = item.COSTUME_TYPE_HAIR == itemSubType
				isCostumeBody = item.COSTUME_TYPE_BODY == itemSubType
				isCostumeWeapon = item.COSTUME_TYPE_WEAPON == itemSubType

uiscript/costumewindow.py

										{"index":COSTUME_START_INDEX+2, "x":10, "y": 8, "width":32, "height":92},

Wpisy mają type: ITEM_COSTUME i subtype  COSTUME_WEAPON

 

Jak klikam na ten miecz to nic ise nie dzieje, a jak klikam z kobiety to pisze mi ze możebyć używany przez płeć przeciwną

Opublikowano

I co to wszystko to ten "system? xD

Podaj syserr z db..

mam jeszcze binkę ale chyba nie jest ważna, poza tym tylko się uczę xD, zaraz dam sysser z DB - poradziłem sobie

 

@jak naciskam na broń to nic się nie dzieje, gdzie grzebać?

Opublikowano

To co masz to nawet połowa tego systemu nie jest.

mam jeszcze binke i w cliencie ale cos nie działa , pod powiesz gdzie grzebać ?
Opublikowano
else if (GetSubType() == COSTUME_WEAPON)
				{
					toSetPart = PART_MAIN;

					if (false == bAdd)
					{
						// 코스츔 갑옷을 벗었을 때 원래 갑옷을 입고 있었다면 그 갑옷으로 look 세팅, 입지 않았다면 default look
						const CItem* pWeapon = m_pOwner->GetWear(WEAR_WEAPON);
						toSetValue = (NULL != pWeapon) ? pWeapon->GetVnum() : m_pOwner->GetOriginalPart(PART_MAIN);						
					}
					
				}

XDDDDDD? Ty chciałeś napisać drugi kostium dla zbroi?

 

Jak już to:

else if (GetSubType() == COSTUME_WEAPON)
				{
					toSetPart = PART_WEAPON;

					if (false == bAdd)
					{
						// ??? ??? ??? ? ?? ??? ?? ???? ? ???? look ??, ?? ???? default look
						const CItem* pWeapon = m_pOwner->GetWear(WEAR_WEAPON);
						toSetValue = (NULL != pWeapon) ? pWeapon->GetVnum() : m_pOwner->GetOriginalPart(PART_WEAPON);						
					}
					
				}


Omnes puerum deriserunt.

Opublikowano

 

else if (GetSubType() == COSTUME_WEAPON)
				{
					toSetPart = PART_MAIN;

					if (false == bAdd)
					{
						// 코스츔 갑옷을 벗었을 때 원래 갑옷을 입고 있었다면 그 갑옷으로 look 세팅, 입지 않았다면 default look
						const CItem* pWeapon = m_pOwner->GetWear(WEAR_WEAPON);
						toSetValue = (NULL != pWeapon) ? pWeapon->GetVnum() : m_pOwner->GetOriginalPart(PART_MAIN);						
					}
					
				}
XDDDDDD? Ty chciałeś napisać drugi kostium dla zbroi?

 

Jak już to:

else if (GetSubType() == COSTUME_WEAPON)
				{
					toSetPart = PART_WEAPON;

					if (false == bAdd)
					{
						// ??? ??? ??? ? ?? ??? ?? ???? ? ???? look ??, ?? ???? default look
						const CItem* pWeapon = m_pOwner->GetWear(WEAR_WEAPON);
						toSetValue = (NULL != pWeapon) ? pWeapon->GetVnum() : m_pOwner->GetOriginalPart(PART_WEAPON);						
					}
					
				}
ok, dzięki xD
  • 4 tygodnie później...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...