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 :
[Hidden Content]
I hope i didn't forgot anything .
Have a nice day.