Jump to content

Set Fixed Attr


Recommended Posts

Hello everyone,

What this can do ? This item can set a fix attribute that you set from item_proto (value0 and value1). This is just an example, it's made just for costume_body, if you want to make it for something else just make a new subtype.

(1) Open char_item.cpp and search this:

case USE_RESET_COSTUME_ATTR:

After this case put this:

#ifdef SET_ATT_ITEM
					case USE_SET_ATT_COSTUME :
					{
						LPITEM item2;
						if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell)))
							return false;
 
						if (item2->IsEquipped())
						{
							BuffOnAttr_RemoveBuffsFromItem(item2);
						}
 
						if (item2->IsExchanging() || item2->IsEquipped()) // @fixme114
							return false;
 
						if ((item2->GetType() == ITEM_COSTUME) && (item2->GetSubType() == COSTUME_BODY))
						{
							if (item2->GetAttributeCount() < 2)
							{
								if (item2->HasAttr(item->GetValue(0)))
								{
									ChatPacket(CHAT_TYPE_INFO, "You can't add the same bonus two times.");
									return false;
								}
								item2->AddAttribute(item->GetValue(0), item->GetValue(1));
								ChatPacket(CHAT_TYPE_INFO, "The bonus has been added successfully.");
 
								item->SetCount(item->GetCount() - 1);
							}
							else
							{
								ChatPacket(CHAT_TYPE_INFO, "Adding bonus failed. You can only add two bonuses on your costume!");
							}
						}
						else
						{
							ChatPacket(CHAT_TYPE_INFO, "The bonus goes only on the costume!");
						}
					}
					break;
 
#endif

(2) Open item_length.h and search this:

enum EUseSubTypes

Add in the end:

USE_SET_ATT_COSTUME,

[(Don't forget to put on service.h/CommonDefines.h this: #define SET_ATT_ITEM ) if you don't want "define" just remove the "#ifdef SET_ATT_ITEM from  char_item ]

(3) DB, Open ProtoReader.cpp and searchi:

static string arSub3[] = {

Add in the end: 

"USE_SET_ATT_COSTUME"

(4) Binary source, Gamelib, Open ItemData.h and search:

enum EUseSubTypes

Add in the end: 

USE_SET_ATT_COSTUME,

(5) Gamelib, Open ItemData.cpp and search:

 }
    return "USE_UNKNOWN_TYPE";

Before this add:

case USE_SET_ATT_COSTUME:

	return DEF_STR(USE_SET_ATT_COSTUME);

(6) Userinterface, Open PythonItemModule.cpp and search:

PyModule_AddIntConstant(poModule, "USE_SPECIAL",                CItemData::USE_SPECIAL);

Put this after:

PyModule_AddIntConstant(poModule, "USE_SET_ATT_COSTUME",                CItemData::USE_SET_ATT_COSTUME);

(7) Open uiinventory.py from root and search:

class InventoryWindow(ui.ScriptWindow):

After this we need to have:

USE_TYPE_TUPLE = ("USE_CLEAN_SOCKET", "USE_CHANGE_ATTRIBUTE", "USE_ADD_ATTRIBUTE", "USE_ADD_ATTRIBUTE2", "USE_ADD_ACCESSORY_SOCKET", "USE_PUT_INTO_ACCESSORY_SOCKET", "USE_PUT_INTO_BELT_SOCKET", "USE_PUT_INTO_RING_SOCKET")

In this list we add in the end this:

, "USE_SET_ATT_COSTUME"

(8) In uiinventory.py search:

elif "USE_ADD_ATTRIBUTE2" == useType:

After this elif we need to add this:

		elif "USE_SET_ATT_COSTUME" == useType:
			if self.__CanSetItemAttr(dstSlotPos):
				return True

(9) In uiinventory search:

def __CanAddItemAttr(self, dstSlotPos):

After this def, add this: 

	def __CanSetItemAttr(self, dstSlotPos):
		dstItemVNum = player.GetItemIndex(dstSlotPos)
		if dstItemVNum == 0:
			return False
 
		item.SelectItem(dstItemVNum)
 
		if not item.GetItemType() in (item.ITEM_TYPE_COSTUME):
			return False
 
		attrCount = 0
		for i in xrange(player.METIN_SOCKET_MAX_NUM):
			if player.GetItemAttribute(dstSlotPos, i) != 0:
				attrCount += 1
 
		if attrCount<2:
			return True
 
		return False

(10) Open tooltip.py and search :

elif item.USE_ABILITY_UP == itemSubType:

From

elif item.ITEM_TYPE_USE == itemType: 

After this:

elif item.USE_ABILITY_UP == itemSubType:

We need to add this:

			elif item.USE_SET_ATT_COSTUME == itemSubType:
				type = item.GetValue(0)
				value = item.GetValue(1)
 
				if value:
					affectString = self.__GetAffectString(type, value)
					if affectString:
						affectColor = self.__GetAttributeColor(0, value)
						self.AppendTextLine(affectString, affectColor)

After you completed all the steps above create a new item with type ITEM_USE and subtype USE_SET_ATT_COSTUME.

Here are some examples of items:

50898	축복의 구슬	ITEM_USE	USE_SET_ATT_COSTUME	1	ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP	ITEM_QUEST | LOG	NONE	NONE	0	0	0	0	0	LIMIT_NONE	0	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	1	2000	0	0	0	0	0	0	0
50897	축복의 구슬	ITEM_USE	USE_SET_ATT_COSTUME	1	ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP	ITEM_QUEST | LOG	NONE	NONE	0	0	0	0	0	LIMIT_NONE	0	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	17	10	0	0	0	0	0	0	0
50896	축복의 구슬	ITEM_USE	USE_SET_ATT_COSTUME	1	ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP	ITEM_QUEST | LOG	NONE	NONE	0	0	0	0	0	LIMIT_NONE	0	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	15	10	0	0	0	0	0	0	0

 

Video :
https://www.youtube.com/watch?v=728yoPapNCw

I hope i didn't forgot anything .

Have a nice day.

  • Metin2 Dev 4
  • Love 3
Link to comment
Share on other sites

Announcements



×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.