#include "stdafx.h" #include "ItemConstants.h" #include "ItemStructure.h" #include using namespace Item; Item::CItemType Item::CItemType::ms_this; const CTypeName Item::Attribute::Attributes[Item::Attribute::MAX_ATTRIBUTE_NUM] = { CTypeName(Attribute::NONE, "None"), CTypeName(Attribute::CRITICAL_TYPE, "CriticalType"), CTypeName(Attribute::CRITICAL_PERCENTAGE, "CriticalPercentage"), CTypeName(Attribute::MIN_DAMAGE, "MinDamage"), CTypeName(Attribute::MAX_DAMAGE, "MaxDamage"), CTypeName(Attribute::DRC, "DRC"), CTypeName(Attribute::OFFENCE_REVISION, "OffenceRevision"), CTypeName(Attribute::DEFENCE, "Defence"), CTypeName(Attribute::DEFENCE_REVISION, "DefenceRevision"), CTypeName(Attribute::MAGIC_RESISTANCE, "Resistance"), CTypeName(Attribute::BLOCKING_PERCENTAGE, "BlockingPercentage"), CTypeName(Attribute::ATTACK_SPEED, "AttackSpeed"), CTypeName(Attribute::MOVE_SPEED, "MoveSpeed"), CTypeName(Attribute::ATTACK_RANGE, "AttackRange"), CTypeName(Attribute::RANGE_ATTACK_DISTANCE, "LongRangeAttack"), CTypeName(Attribute::MAX_HP, "HpMaxPlus"), CTypeName(Attribute::MAX_MP, "MpMaxPlus"), CTypeName(Attribute::HP_REGEN_AMOUNT, "HPRegen"), CTypeName(Attribute::MP_REGEN_AMOUNT, "MPRegen"), CTypeName(Attribute::FIRE_ATTACK, "FireAttribute"), CTypeName(Attribute::LIGHTNING_ATTACK, "LightingAttribute"), CTypeName(Attribute::COLD_ATTACK, "ColdAttribute"), CTypeName(Attribute::DRAIN_ATTACK, "DrainAttribute"), CTypeName(Attribute::POISON_ATTACK, "PoisonAttribute"), CTypeName(Attribute::FIRE_RESISTANCE, "FireResistance"), CTypeName(Attribute::LIGHTNING_RESISTANCE, "LightningResistance"), CTypeName(Attribute::COLD_RESISTANCE, "ColdResistance"), CTypeName(Attribute::DRAIN_RESISTANCE, "DrainResistance"), CTypeName(Attribute::POISON_RESISTANCE, "PoisonResistance"), CTypeName(Attribute::ADD_STR, "STRAdd"), CTypeName(Attribute::ADD_DEX, "DEXAdd"), CTypeName(Attribute::ADD_CON, "CONAdd"), CTypeName(Attribute::ADD_INT, "INTAdd"), CTypeName(Attribute::ADD_WIS, "WISAdd") }; const CTypeName Item::Grade::Grades[Grade::MAX_ITEM_GRADE] = { CTypeName(Grade::ETC, "ETC"), CTypeName(Grade::NORMAL, "NORMAL"), CTypeName(Grade::ENHANCED, "ENHANCED"), CTypeName(Grade::RARE, "RARE") }; Item::CItemType::CItemType() { int nCount = 0; for(nCount = 0; nCount < MAX_ARRAY_TYPE; ++nCount) { m_ItemTypes[nCount].reserve(MAX_ITEM_TYPE); } m_ItemTypeNames[HELM] = CTypeName(HELM, "HELM"); m_ItemTypeNames[SHIRT] = CTypeName(SHIRT, "SHIRT"); m_ItemTypeNames[TUNIC] = CTypeName(TUNIC, "TUNIC"); m_ItemTypeNames[ARMOUR] = CTypeName(ARMOUR, "ARMOUR"); m_ItemTypeNames[GLOVE] = CTypeName(GLOVE, "GLOVE"); m_ItemTypeNames[BOOTS] = CTypeName(BOOTS, "BOOTS"); m_ItemTypeNames[SWORD] = CTypeName(SWORD, "ONEHANDED_SWORD"); m_ItemTypeNames[BLUNT] = CTypeName(BLUNT, "ONEHANDED_BLUNT"); m_ItemTypeNames[AXE] = CTypeName(AXE, "ONEHANDED_AXE"); m_ItemTypeNames[TWOHANDED_BLUNT] = CTypeName(TWOHANDED_BLUNT, "TWOHANDED_BLUNT"); m_ItemTypeNames[TWOHANDED_AXE] = CTypeName(TWOHANDED_AXE, "TWOHANDED_AXE"); m_ItemTypeNames[TWOHANDED_SWORD] = CTypeName(TWOHANDED_SWORD, "TWOHANDED_SWORD"); m_ItemTypeNames[BOW] = CTypeName(BOW, "BOW"); m_ItemTypeNames[CROSSBOW] = CTypeName(CROSSBOW, "CROSSBOW"); m_ItemTypeNames[STAFF] = CTypeName(STAFF, "STAFF"); m_ItemTypeNames[DAGGER] = CTypeName(DAGGER, "DAGGER"); m_ItemTypeNames[SHIELD] = CTypeName(SHIELD, "SHIELD"); m_ItemTypeNames[CLOAK] = CTypeName(CLOAK, "CLOAK"); m_ItemTypeNames[RING] = CTypeName(RING, "RING"); m_ItemTypeNames[NECKLACE] = CTypeName(NECKLACE, "NECKLACE"); m_ItemTypeNames[POTION] = CTypeName(POTION, "POTION"); m_ItemTypeNames[POISON] = CTypeName(POISON, "POISON"); m_ItemTypeNames[TRAP] = CTypeName(TRAP, "TRAP"); m_ItemTypeNames[SKILLBOOK] = CTypeName(SKILLBOOK, "SKILLBOOK"); m_ItemTypeNames[GEM] = CTypeName(GEM, "GEM"); m_ItemTypeNames[RUNE] = CTypeName(RUNE, "RUNE"); m_ItemTypeNames[MATERIAL] = CTypeName(MATERIAL, "ORE"); m_ItemTypeNames[AMMO] = CTypeName(AMMO, "AMMO"); m_ItemTypeNames[ETC] = CTypeName(ETC, "ETC"); m_ItemTypeNames[HEAD] = CTypeName(HEAD, "HEAD"); m_ItemTypeNames[BODY] = CTypeName(BODY, "BODY"); m_ItemTypeNames[PROTECT_A] = CTypeName(PROTECT_A, "PROTECT_A"); m_ItemTypeNames[PELVIS] = CTypeName(PELVIS, "PELVIS"); m_ItemTypeNames[COM_BLUNT] = CTypeName(COM_BLUNT, "COM_BLUNT"); m_ItemTypeNames[COM_SWORD] = CTypeName(COM_SWORD, "COM_SWORD"); m_ItemTypeNames[OPP_HAMMER] = CTypeName(OPP_HAMMER, "OPP_HAMMER"); m_ItemTypeNames[OPP_AXE] = CTypeName(OPP_AXE, "OPP_AXE"); m_ItemTypeNames[OPP_SLUSHER] = CTypeName(OPP_SLUSHER, "OPP_SLUSHER"); m_ItemTypeNames[OPP_TALON] = CTypeName(OPP_TALON, "OPP_TALON"); m_ItemTypeNames[OPP_SYTHE] = CTypeName(OPP_SYTHE, "OPP_SYTHE"); m_ItemTypeNames[SKILL_A_GUARD] = CTypeName(SKILL_A_GUARD, "SKILL_A_GUARD"); m_ItemTypeNames[SKILL_A_ATTACK] = CTypeName(SKILL_A_ATTACK, "SKILL_A_ATTACK"); m_ItemTypeNames[SKILL_A_GUN] = CTypeName(SKILL_A_GUN, "SKILL_A_GUN"); m_ItemTypeNames[SKILL_A_KNIFE] = CTypeName(SKILL_A_KNIFE, "SKILL_A_KNIFE"); m_ItemTypeNames[ACCESSORY] = CTypeName(ACCESSORY, "ACCESSORY"); m_ItemTypeNames[ARROW] = CTypeName(ARROW, "ARROW"); m_ItemTypeNames[BOLT] = CTypeName(BOLT, "BOLT"); // Àåºñ m_ItemTypes[EQUIP_TYPE].push_back(ARROW); m_ItemTypes[EQUIP_TYPE].push_back(BOLT); m_ItemTypes[EQUIP_TYPE].push_back(HELM); m_ItemTypes[EQUIP_TYPE].push_back(SHIRT); m_ItemTypes[EQUIP_TYPE].push_back(TUNIC); m_ItemTypes[EQUIP_TYPE].push_back(ARMOUR); m_ItemTypes[EQUIP_TYPE].push_back(SHIELD); m_ItemTypes[EQUIP_TYPE].push_back(CLOAK); m_ItemTypes[EQUIP_TYPE].push_back(GLOVE); m_ItemTypes[EQUIP_TYPE].push_back(BOOTS); m_ItemTypes[EQUIP_TYPE].push_back(SWORD); m_ItemTypes[EQUIP_TYPE].push_back(BLUNT); m_ItemTypes[EQUIP_TYPE].push_back(AXE); m_ItemTypes[EQUIP_TYPE].push_back(DAGGER); m_ItemTypes[EQUIP_TYPE].push_back(STAFF); m_ItemTypes[EQUIP_TYPE].push_back(TWOHANDED_BLUNT); m_ItemTypes[EQUIP_TYPE].push_back(TWOHANDED_AXE); m_ItemTypes[EQUIP_TYPE].push_back(TWOHANDED_SWORD); m_ItemTypes[EQUIP_TYPE].push_back(BOW); m_ItemTypes[EQUIP_TYPE].push_back(CROSSBOW); m_ItemTypes[EQUIP_TYPE].push_back(RING); m_ItemTypes[EQUIP_TYPE].push_back(NECKLACE); m_ItemTypes[EQUIP_TYPE].push_back(HEAD); m_ItemTypes[EQUIP_TYPE].push_back(BODY); m_ItemTypes[EQUIP_TYPE].push_back(PELVIS); m_ItemTypes[EQUIP_TYPE].push_back(PROTECT_A); m_ItemTypes[EQUIP_TYPE].push_back(COM_BLUNT); m_ItemTypes[EQUIP_TYPE].push_back(COM_SWORD); m_ItemTypes[EQUIP_TYPE].push_back(OPP_HAMMER); m_ItemTypes[EQUIP_TYPE].push_back(OPP_AXE); m_ItemTypes[EQUIP_TYPE].push_back(OPP_SLUSHER); m_ItemTypes[EQUIP_TYPE].push_back(OPP_TALON); m_ItemTypes[EQUIP_TYPE].push_back(OPP_SYTHE); m_ItemTypes[EQUIP_TYPE].push_back(SKILL_A_GUARD); m_ItemTypes[EQUIP_TYPE].push_back(SKILL_A_ATTACK); m_ItemTypes[EQUIP_TYPE].push_back(SKILL_A_GUN); m_ItemTypes[EQUIP_TYPE].push_back(SKILL_A_KNIFE); m_ItemTypes[EQUIP_TYPE].push_back(ACCESSORY); // »ç¿ë ¾ÆÀÌÅÛ m_ItemTypes[USE_ITEM_TYPE].push_back(POTION); m_ItemTypes[USE_ITEM_TYPE].push_back(POISON); m_ItemTypes[USE_ITEM_TYPE].push_back(TRAP); m_ItemTypes[USE_ITEM_TYPE].push_back(SKILLBOOK); m_ItemTypes[USE_ITEM_TYPE].push_back(AMMO); // ¹«±â m_ItemTypes[WEAPON_TYPE].push_back(SWORD); m_ItemTypes[WEAPON_TYPE].push_back(BLUNT); m_ItemTypes[WEAPON_TYPE].push_back(AXE); m_ItemTypes[WEAPON_TYPE].push_back(DAGGER); m_ItemTypes[WEAPON_TYPE].push_back(STAFF); m_ItemTypes[WEAPON_TYPE].push_back(TWOHANDED_BLUNT); m_ItemTypes[WEAPON_TYPE].push_back(TWOHANDED_AXE); m_ItemTypes[WEAPON_TYPE].push_back(TWOHANDED_SWORD); m_ItemTypes[WEAPON_TYPE].push_back(BOW); m_ItemTypes[WEAPON_TYPE].push_back(CROSSBOW); m_ItemTypes[WEAPON_TYPE].push_back(COM_BLUNT); m_ItemTypes[WEAPON_TYPE].push_back(COM_SWORD); m_ItemTypes[WEAPON_TYPE].push_back(OPP_HAMMER); m_ItemTypes[WEAPON_TYPE].push_back(OPP_AXE); m_ItemTypes[WEAPON_TYPE].push_back(OPP_SLUSHER); m_ItemTypes[WEAPON_TYPE].push_back(OPP_TALON); m_ItemTypes[WEAPON_TYPE].push_back(OPP_SYTHE); // ¹æ¾î±¸ m_ItemTypes[ARMOUR_TYPE].push_back(HELM); m_ItemTypes[ARMOUR_TYPE].push_back(SHIRT); m_ItemTypes[ARMOUR_TYPE].push_back(TUNIC); m_ItemTypes[ARMOUR_TYPE].push_back(ARMOUR); m_ItemTypes[ARMOUR_TYPE].push_back(SHIELD); m_ItemTypes[ARMOUR_TYPE].push_back(CLOAK); m_ItemTypes[ARMOUR_TYPE].push_back(GLOVE); m_ItemTypes[ARMOUR_TYPE].push_back(BOOTS); m_ItemTypes[ARMOUR_TYPE].push_back(HEAD); m_ItemTypes[ARMOUR_TYPE].push_back(BODY); m_ItemTypes[ARMOUR_TYPE].push_back(PELVIS); m_ItemTypes[ARMOUR_TYPE].push_back(PROTECT_A); // ½ºÅ³¾Ï m_ItemTypes[SKILL_ARM_TYPE].push_back(SKILL_A_GUARD); m_ItemTypes[SKILL_ARM_TYPE].push_back(SKILL_A_ATTACK); m_ItemTypes[SKILL_ARM_TYPE].push_back(SKILL_A_GUN); m_ItemTypes[SKILL_ARM_TYPE].push_back(SKILL_A_KNIFE); // ¾ç¼Õ ¹«±â m_ItemTypes[TWOHANDED_TYPE].push_back(STAFF); m_ItemTypes[TWOHANDED_TYPE].push_back(TWOHANDED_BLUNT); m_ItemTypes[TWOHANDED_TYPE].push_back(TWOHANDED_AXE); m_ItemTypes[TWOHANDED_TYPE].push_back(TWOHANDED_SWORD); m_ItemTypes[TWOHANDED_TYPE].push_back(BOW); m_ItemTypes[TWOHANDED_TYPE].push_back(CROSSBOW); for(nCount = 0; nCount < MAX_ARRAY_TYPE; ++nCount) { std::sort(m_ItemTypes[nCount].begin(), m_ItemTypes[nCount].end()); } } bool Item::CItemType::IsCorrectItemType(ArrayType itemType, unsigned char cEquipType) { return std::binary_search(m_ItemTypes[itemType].begin(), m_ItemTypes[itemType].end(), cEquipType); } unsigned char Item::CItemType::ConvertRandomOptionType(unsigned char cEquipType) { if (true == IsCorrectItemType(CItemType::WEAPON_TYPE, cEquipType)) { return RandomOption::WEAPON; } else { switch (cEquipType) { case CItemType::ARMOUR: case CItemType::BODY: return RandomOption::ARMOUR_BODY; case CItemType::HELM: case CItemType::HEAD: return RandomOption::HELM_HEAD; case CItemType::RING: case CItemType::ACCESSORY: return RandomOption::RING_ACCESSORY; case CItemType::NECKLACE: return RandomOption::NECKLACE; case CItemType::SHIELD: case CItemType::SKILL_A_GUARD: return RandomOption::SKILL_A_GUARD; case CItemType::SKILL_A_ATTACK: case CItemType::SKILL_A_GUN: case CItemType::SKILL_A_KNIFE: return RandomOption::SKILL_A_WEAPON; } } return RandomOption::MAX_RANDOM_OPTION_TYPE; } void Item::CItemType::SetEquipTypeFlags(ItemInfo& itemInfo) { switch (itemInfo.m_DetailData.m_cItemType) { case ARROW: case BOLT: itemInfo.m_DetailData.m_dwFlags |= Item::DetailData::STACKABLE; break; } if (IsCorrectItemType(Item::CItemType::WEAPON_TYPE, itemInfo.m_DetailData.m_cItemType)) { itemInfo.m_DetailData.m_dwFlags |= DetailData::WEAPON; if (IsCorrectItemType(Item::CItemType::TWOHANDED_TYPE, itemInfo.m_DetailData.m_cItemType)) { itemInfo.m_DetailData.m_dwFlags |= DetailData::TWOHANDED; } } else if (IsCorrectItemType(Item::CItemType::SKILL_ARM_TYPE, itemInfo.m_DetailData.m_cItemType)) { itemInfo.m_DetailData.m_dwFlags |= DetailData::SKILL_ARM; } else if (IsCorrectItemType(Item::CItemType::ARMOUR_TYPE, itemInfo.m_DetailData.m_cItemType)) { itemInfo.m_DetailData.m_dwFlags |= DetailData::ARMOUR; } itemInfo.m_DetailData.m_dwFlags |= Item::DetailData::EQUIP; } void Item::CItemType::SetUseItemTypeFlags(ItemInfo& itemInfo) { switch(itemInfo.m_DetailData.m_cItemType) { case Item::CItemType::POTION: case Item::CItemType::POISON: case Item::CItemType::TRAP: itemInfo.m_DetailData.m_dwFlags |= Item::DetailData::QUICKSLOT_IN; break; } if(itemInfo.m_DetailData.m_cMaxDurabilityOrStack > 1) { itemInfo.m_DetailData.m_dwFlags |= Item::DetailData::STACKABLE; } itemInfo.m_DetailData.m_dwFlags |= Item::DetailData::USE_ITEM; } void Item::CItemType::SetEtcItemTypeFlags(ItemInfo& itemInfo) { if(itemInfo.m_DetailData.m_cMaxDurabilityOrStack > 1) { itemInfo.m_DetailData.m_dwFlags |= Item::DetailData::STACKABLE; } } using namespace Item::Attribute; typedef Item::ItemAttribute Attr; Attr GemInstallTable[15][7] = { // ¹«±â ¾Æ¸Ó Çï¸ä ¹ÝÁö ¸ñ°ÉÀÌ ¹«±â 2+ ¾Æ¸Ó 2+ Attr(FIRE_ATTACK, 1), Attr(FIRE_RESISTANCE, 1), Attr(ADD_STR, 3), Attr(OFFENCE_REVISION ,3), Attr(MAX_DAMAGE, 2), Attr(OFFENCE_REVISION, 3), Attr(ADD_STR, 3), // ·çºñ Á¶°¢ Attr(POISON_ATTACK, 1), Attr(POISON_RESISTANCE, 1), Attr(ADD_CON, 3), Attr(HP_REGEN_AMOUNT, 3), Attr(MAX_HP, 10), Attr(ADD_CON, 3), Attr(MAX_HP, 1), // ¿¡¸Þ¶öµå Á¶°¢ Attr(COLD_ATTACK, 1), Attr(COLD_RESISTANCE, 1), Attr(ADD_INT, 3), Attr(MP_REGEN_AMOUNT, 3), Attr(MAX_MP, 10), Attr(MAX_MP, 1), Attr(ADD_INT, 3), // »çÆÄÀ̾î Á¶°¢ Attr(LIGHTNING_ATTACK, 1), Attr(LIGHTNING_RESISTANCE, 1), Attr(ADD_WIS ,3), Attr(MAGIC_RESISTANCE, 3), Attr(CRITICAL_PERCENTAGE, 1), Attr(CRITICAL_PERCENTAGE, 2), Attr(MAGIC_RESISTANCE, 3), // ´ÙÀ̾Ƹóµå Á¶°¢ Attr(DRAIN_ATTACK, 1), Attr(DRAIN_RESISTANCE, 1), Attr(ADD_DEX ,3), Attr(DEFENCE_REVISION, 3), Attr(DEFENCE, 1), Attr(ADD_DEX, 3), Attr(DEFENCE_REVISION, 3), // ºí·¢¹® Á¶°¢ Attr(FIRE_ATTACK, 2), Attr(FIRE_RESISTANCE, 2), Attr(ADD_STR, 6), Attr(OFFENCE_REVISION ,6), Attr(MAX_DAMAGE, 4), Attr(OFFENCE_REVISION, 6), Attr(ADD_STR, 6), // ÀÛÀº ·çºñ Attr(POISON_ATTACK, 2), Attr(POISON_RESISTANCE, 2), Attr(ADD_CON, 6), Attr(HP_REGEN_AMOUNT, 6), Attr(MAX_HP, 20), Attr(ADD_CON, 6), Attr(MAX_HP, 2), // ÀÛÀº ¿¡¸Þ¶öµå Attr(COLD_ATTACK, 2), Attr(COLD_RESISTANCE, 2), Attr(ADD_INT, 6), Attr(MP_REGEN_AMOUNT, 6), Attr(MAX_MP, 20), Attr(MAX_MP, 2), Attr(ADD_INT, 6), // ÀÛÀº »çÆÄÀ̾î Attr(LIGHTNING_ATTACK, 2), Attr(LIGHTNING_RESISTANCE, 2), Attr(ADD_WIS ,6), Attr(MAGIC_RESISTANCE, 6), Attr(CRITICAL_PERCENTAGE, 2), Attr(CRITICAL_PERCENTAGE, 4), Attr(MAGIC_RESISTANCE, 6), // ÀÛÀº ´ÙÀ̾Ƹóµå Attr(DRAIN_ATTACK, 2), Attr(DRAIN_RESISTANCE, 2), Attr(ADD_DEX ,6), Attr(DEFENCE_REVISION, 6), Attr(DEFENCE, 2), Attr(ADD_DEX, 6), Attr(DEFENCE_REVISION, 6), // ÀÛÀº ºí·¢¹® Attr(FIRE_ATTACK, 3), Attr(FIRE_RESISTANCE, 3), Attr(ADD_STR, 9), Attr(OFFENCE_REVISION ,9), Attr(MAX_DAMAGE, 6), Attr(OFFENCE_REVISION, 9), Attr(ADD_STR, 9), // ·çºñ Attr(POISON_ATTACK, 3), Attr(POISON_RESISTANCE, 3), Attr(ADD_CON, 9), Attr(HP_REGEN_AMOUNT, 9), Attr(MAX_HP, 30), Attr(ADD_CON, 9), Attr(MAX_HP, 3), // ¿¡¸Þ¶öµå Attr(COLD_ATTACK, 3), Attr(COLD_RESISTANCE, 3), Attr(ADD_INT, 9), Attr(MP_REGEN_AMOUNT, 9), Attr(MAX_MP, 30), Attr(MAX_MP, 9), Attr(ADD_INT, 9), // »çÆÄÀ̾î Attr(LIGHTNING_ATTACK, 3), Attr(LIGHTNING_RESISTANCE, 3), Attr(ADD_WIS ,9), Attr(MAGIC_RESISTANCE, 9), Attr(CRITICAL_PERCENTAGE, 3), Attr(CRITICAL_PERCENTAGE, 6), Attr(MAGIC_RESISTANCE, 9), // ´ÙÀ̾Ƹóµå Attr(DRAIN_ATTACK, 3), Attr(DRAIN_RESISTANCE, 3), Attr(ADD_DEX ,9), Attr(DEFENCE_REVISION, 9), Attr(DEFENCE, 3), Attr(ADD_DEX, 9), Attr(DEFENCE_REVISION, 9), // ºí·¢¹® }; Item::ItemAttribute CItemType::GetInstallGemAttribute(unsigned char cGemType, unsigned char cEquipType, bool bPlus) { const unsigned char NON_EQUIP_TYPE_INDEX = 0xFF; unsigned char cEquipTypeIndex = NON_EQUIP_TYPE_INDEX; if(CItemType::GetInstance().IsCorrectItemType(WEAPON_TYPE, cEquipType)) { cEquipType = 0 + (bPlus ? 5 : 0); } else { switch (cEquipType) { case ARMOUR: case BODY: cEquipType = 1 + (bPlus ? 5 : 0); break; // ¾Æ¸Ó case HELM: case HEAD: cEquipType = 2; break; // Çï¸ä case RING: case ACCESSORY: cEquipType = 3; break; // ¹ÝÁö case NECKLACE: cEquipType = 4; break; // ¸ñ°ÉÀÌ } } return (NON_EQUIP_TYPE_INDEX != cEquipType) ? GemInstallTable[cGemType][cEquipType] : Item::ItemAttribute(); } unsigned short UpgradeTable[15][3] = { //È®·ü ¿ä±¸ ±¤¹° ±¤¹° °³¼ö 75, 2001, 3, // ½Çºó 66, 2001, 6, // ½Çºó 54, 2001, 9, // ½Çºó 44, 2001, 12, // ½Çºó 35, 2002, 3, // ¹Ì½º¸± 28, 2002, 6, // ¹Ì½º¸± 23, 2002, 9, // ¹Ì½º¸± 18, 2002, 12, // ¹Ì½º¸± 15, 2003, 3, // ÀÌÅÍ´Ï¿ò 13, 2003, 6, // ÀÌÅÍ´Ï¿ò 11, 2003, 9, // ÀÌÅÍ´Ï¿ò 9, 2003, 12, // ÀÌÅÍ´Ï¿ò 8, 2004, 3, // ¿À¸®Çϸ£ÄÜ 7, 2004, 6, // ¿À¸®Çϸ£ÄÜ 6, 2004, 9 // ¿À¸®Çϸ£ÄÜ }; unsigned char CItemType::GetUpgradeItemAttribute(unsigned char EquipType, Item::ItemAttribute& Attribute) { /* FIXME : if (IsWeapon(EquipType)) { Attribute[0].m_nAttributeType = Attribute::MIN_DAMAGE; // ÃÖ¼Ò µ¥¹ÌÁö °­È­ Attribute[0].m_nValue = 3; Attribute[1].m_nAttributeType = Attribute::MAX_DAMAGE; // ÃÖ´ë µ¥¹ÌÁö °­È­ Attribute[1].m_nValue = 3; return 2; } else if (IsArmour(EquipType)) { Attribute[0].m_nAttributeType = Attribute::DEFENCE; // ¹æ¾î·Â °­È­ Attribute[0].m_nValue = 3; return 1; } */ return 0; }