#include "stdafx.h" #include #include #include "ItemStructure.h" #include "ItemDataParser.h" using namespace Item; bool ReadString(char* szBuffer_Out, int nBufferLen, const char* szValue_In) { int nLength = _snprintf(szBuffer_Out, nBufferLen - 1, "%s", szValue_In); if(0 < nLength) { szBuffer_Out[nLength] = '\0'; return true; } szBuffer_Out[nBufferLen - 1] = '\0'; ERRLOG1(g_Log, "¹öÆÛ ±æÀ̰¡ ¸ðÀÚ¶ó¼­, µ¥ÀÌÅ͸¦ ÀüºÎ º¹»çÇÒ ¼ö ¾ø½À´Ï´Ù. Data:%s", szValue_In); return false; } inline bool ReadValue(unsigned char& cValue_Out, const char* szValue_In) { cValue_Out = static_cast(atoi(szValue_In)); return true; } inline bool ReadValue(unsigned short& usValue_Out, const char* szValue_In) { usValue_Out = static_cast(atoi(szValue_In)); return true; } inline bool ReadValue(unsigned long& dwValue_Out, const char* szValue_In) { dwValue_Out = static_cast(atol(szValue_In)); return true; } bool ReadStringToTypeValue(unsigned char& cVaule_Out, const CTypeName* lpTypeArray, const unsigned char nMaxType, const char* szValue_In) { for (unsigned char nCount = 0; nCount < nMaxType; ++nCount) { if(0 == strcmp(szValue_In, lpTypeArray[nCount].GetTypeName())) { cVaule_Out = lpTypeArray[nCount].GetTypeValue(); return true; } } return false; } // ±âº» µ¥ÀÌÅ͵é bool ReadID(Item::ItemInfo& itemInfo, const char* szValue) { itemInfo.m_usProtoTypeID = static_cast(atoi(szValue)); if(0 == itemInfo.m_usProtoTypeID || 0xFFFF == itemInfo.m_usProtoTypeID) { ERRLOG1(g_Log, "¾ÆÀÌÅÛ ID°¡ ÀÌ»óÇÕ´Ï´Ù. 0À̳ª 0xFFFF´Â »ç¿ëÇÏ½Ç ¼ö ¾ø½À´Ï´Ù. ID:0x%08x", itemInfo.m_usProtoTypeID); return false; } return true; } bool ReadItemName(Item::ItemInfo& itemInfo, const char* szValue) { return ReadString(itemInfo.m_SpriteData.m_szName, SpriteData::MAX_NAME, szValue); } bool ReadFieldModelName(Item::ItemInfo& itemInfo, const char* szValue) { return ReadString(itemInfo.m_StringData.m_szFieldModelName, StringData::MAX_FIELD_MODEL_NAME, szValue); } bool ReadAttachedModelName(Item::ItemInfo& itemInfo, const char* szValue) { return ReadString(itemInfo.m_StringData.m_szEquipModelName, StringData::MAX_EQUIP_MODEL_NAME, szValue); } bool ReadSpriteDDS(Item::ItemInfo& itemInfo, const char* szValue) { return ReadString(itemInfo.m_SpriteData.m_szSpriteName, SpriteData::MAX_SPRITE_NAME, szValue); } bool ReadMinX(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_SpriteData.m_nSpriteMinX, szValue); } bool ReadMinY(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_SpriteData.m_nSpriteMinY, szValue); } bool ReadMaxX(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_SpriteData.m_nSpriteMaxX, szValue); } bool ReadMaxY(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_SpriteData.m_nSpriteMaxY, szValue); } bool ReadSizeX(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_cXSize, szValue); } bool ReadSizeY(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_cYSize, szValue); } bool ReadEffectSound(Item::ItemInfo& itemInfo, const char* szValue) { return ReadString(itemInfo.m_StringData.m_szEffectSoundName, StringData::MAX_EFFECT_SOUND_NAME, szValue); } bool ReadItemLevel(Item::ItemInfo& itemInfo, const char* szValue) { unsigned char cGrade = 0; if(ReadStringToTypeValue(cGrade, Item::Grade::Grades, Item::Grade::MAX_ITEM_GRADE, szValue)) { itemInfo.m_DetailData.m_ItemGrade = static_cast(cGrade); return true; } return false; } bool ReadItemType(Item::ItemInfo& itemInfo, const char* szValue) { return ReadStringToTypeValue(itemInfo.m_DetailData.m_cItemType, Item::CItemType::GetInstance().GetItemTypeName(), Item::CItemType::MAX_ITEM_TYPE, szValue); } bool ReadPrice(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_dwPrice, szValue); } bool ReadBlackPrice(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_dwBlackPrice, szValue); } bool ReadOptionLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_cOptionLimit, szValue); } bool ReadDurability(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_cDefaultDurabilityOrStack, szValue); } bool ReadMaxDurability(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_cMaxDurabilityOrStack, szValue); } bool ReadClassLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_dwClassLimit, szValue); } bool ReadSkillLimitType(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_nSkillType, szValue); } bool ReadSkillLimitLevel(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_cSkillLevel, szValue); } bool ReadLevelLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_cLevelLimit, szValue); } bool ReadSTRLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_nStatusLimit[StatusLimit::STR], szValue); } bool ReadDEXLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_nStatusLimit[StatusLimit::DEX], szValue); } bool ReadCONLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_nStatusLimit[StatusLimit::CON], szValue); } bool ReadINTLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_nStatusLimit[StatusLimit::INT], szValue); } bool ReadWISLimit(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseLimit.m_nStatusLimit[StatusLimit::WIS], szValue); } bool ItemDataParser::SetDefaultData(ParseDataArray& parseDataArray) { parseDataArray.reserve(30); parseDataArray.push_back(ParseData("ID", ReadID)); parseDataArray.push_back(ParseData("ItemName", ReadItemName)); parseDataArray.push_back(ParseData("FieldModelName", ReadFieldModelName)); parseDataArray.push_back(ParseData("AttachedModelName", ReadAttachedModelName)); parseDataArray.push_back(ParseData("SpriteDDS", ReadSpriteDDS)); parseDataArray.push_back(ParseData("MinX", ReadMinX)); parseDataArray.push_back(ParseData("MinY", ReadMinY)); parseDataArray.push_back(ParseData("MaxX", ReadMaxX)); parseDataArray.push_back(ParseData("MaxY", ReadMaxY)); parseDataArray.push_back(ParseData("SizeX", ReadSizeX)); parseDataArray.push_back(ParseData("SizeY", ReadSizeY)); parseDataArray.push_back(ParseData("EffectSound", ReadEffectSound)); parseDataArray.push_back(ParseData("ItemLevel", ReadItemLevel)); parseDataArray.push_back(ParseData("ItemType", ReadItemType)); parseDataArray.push_back(ParseData("Price", ReadPrice)); parseDataArray.push_back(ParseData("BlackPrice", ReadBlackPrice)); parseDataArray.push_back(ParseData("OptionLimit", ReadOptionLimit)); parseDataArray.push_back(ParseData("Durability", ReadDurability)); parseDataArray.push_back(ParseData("MaxDurability", ReadMaxDurability)); parseDataArray.push_back(ParseData("ClassLimit", ReadClassLimit)); parseDataArray.push_back(ParseData("SkillLimitType", ReadSkillLimitType)); parseDataArray.push_back(ParseData("SkillLimitLevel", ReadSkillLimitLevel)); parseDataArray.push_back(ParseData("LevelLimit", ReadLevelLimit)); parseDataArray.push_back(ParseData("STRLimit", ReadSTRLimit)); parseDataArray.push_back(ParseData("DEXLimit", ReadDEXLimit)); parseDataArray.push_back(ParseData("CONLimit", ReadCONLimit)); parseDataArray.push_back(ParseData("INTLimit", ReadINTLimit)); parseDataArray.push_back(ParseData("WISLimit", ReadWISLimit)); return true; } bool ReadCriticalType(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::CRITICAL_TYPE], szValue); } bool ReadCriticalPercentage(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::CRITICAL_PERCENTAGE], szValue); } bool ReadMinDamage(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::MIN_DAMAGE], szValue); } bool ReadMaxDamage(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::MAX_DAMAGE], szValue); } bool ReadDRC(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::DRC], szValue); } bool ReadOffenceRevision(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::OFFENCE_REVISION], szValue); } bool ReadDefence(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::DEFENCE], szValue); } bool ReadDefenceRevision(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::DEFENCE_REVISION], szValue); } bool ReadResistance(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::MAGIC_RESISTANCE], szValue); } bool ReadBlockingPercentage(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::BLOCKING_PERCENTAGE], szValue); } bool ReadAttackSpeed(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::ATTACK_SPEED], szValue); } bool ReadMoveSpeed(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::MOVE_SPEED], szValue); } bool ReadAttackRange(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::ATTACK_RANGE], szValue); } bool ReadRangedAttack(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::RANGE_ATTACK_DISTANCE], szValue); } bool ReadHpMaxPlus(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::MAX_HP], szValue); } bool ReadMpMaxPlus(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::MAX_MP], szValue); } bool ReadHPRegen(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::HP_REGEN_AMOUNT], szValue); } bool ReadMPRegen(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::MP_REGEN_AMOUNT], szValue); } bool ReadFireAttribute(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::FIRE_ATTACK], szValue); } bool ReadLightingAttribute(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::LIGHTNING_ATTACK], szValue); } bool ReadColdAttribute(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::COLD_ATTACK], szValue); } bool ReadDrainAttribute(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::DRAIN_ATTACK], szValue); } bool ReadPoisonAttribute(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::POISON_ATTACK], szValue); } bool ReadFireResistance(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::FIRE_RESISTANCE], szValue); } bool ReadLightningResistance(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::LIGHTNING_RESISTANCE], szValue); } bool ReadColdResistance(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::COLD_RESISTANCE], szValue); } bool ReadDrainResistance(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::DRAIN_RESISTANCE], szValue); } bool ReadPoisonResistance(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::POISON_RESISTANCE], szValue); } bool ReadSTRAdd(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::ADD_STR], szValue); } bool ReadDEXAdd(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::ADD_DEX], szValue); } bool ReadCONAdd(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::ADD_CON], szValue); } bool ReadINTAdd(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::ADD_INT], szValue); } bool ReadWISAdd(Item::ItemInfo& itemInfo, const char* szValue) { ++itemInfo.m_EquipAttribute.m_nAttibuteNum; return ReadValue(itemInfo.m_EquipAttribute.m_usAttributeValue[Item::Attribute::ADD_WIS], szValue); } bool ReadMaterialValue(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_cMaterialType, szValue); } bool ReadMaxSocketNum(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_DetailData.m_cMaxSocketNum, szValue); } bool ItemDataParser::SetEquipData(ParseDataArray& parseDataArray) { parseDataArray.push_back(ParseData("CriticalType", ReadCriticalType)); parseDataArray.push_back(ParseData("CriticalPercentage", ReadCriticalPercentage)); parseDataArray.push_back(ParseData("MinDamage", ReadMinDamage)); parseDataArray.push_back(ParseData("MaxDamage", ReadMaxDamage)); parseDataArray.push_back(ParseData("DRC", ReadDRC)); parseDataArray.push_back(ParseData("OffenceRevision", ReadOffenceRevision)); parseDataArray.push_back(ParseData("Defence", ReadDefence)); parseDataArray.push_back(ParseData("DefenceRevision", ReadDefenceRevision)); parseDataArray.push_back(ParseData("Resistance", ReadResistance)); parseDataArray.push_back(ParseData("BlockingPercentage", ReadBlockingPercentage)); parseDataArray.push_back(ParseData("AttackSpeed", ReadAttackSpeed)); parseDataArray.push_back(ParseData("MoveSpeed", ReadMoveSpeed)); parseDataArray.push_back(ParseData("AttackRange", ReadAttackRange)); parseDataArray.push_back(ParseData("LongRangeAttack", ReadRangedAttack)); parseDataArray.push_back(ParseData("HpMaxPlus", ReadHpMaxPlus)); parseDataArray.push_back(ParseData("MpMaxPlus", ReadMpMaxPlus)); parseDataArray.push_back(ParseData("HPRegen", ReadHPRegen)); parseDataArray.push_back(ParseData("MPRegen", ReadMPRegen)); parseDataArray.push_back(ParseData("FireAttribute", ReadFireAttribute)); parseDataArray.push_back(ParseData("LightingAttribute", ReadLightingAttribute)); parseDataArray.push_back(ParseData("ColdAttribute", ReadColdAttribute)); parseDataArray.push_back(ParseData("DrainAttribute", ReadDrainAttribute)); parseDataArray.push_back(ParseData("PoisonAttribute", ReadPoisonAttribute)); parseDataArray.push_back(ParseData("FireResistance", ReadFireResistance)); parseDataArray.push_back(ParseData("LightningResistance", ReadLightningResistance)); parseDataArray.push_back(ParseData("ColdResistance", ReadColdResistance)); parseDataArray.push_back(ParseData("DrainResistance", ReadDrainResistance)); parseDataArray.push_back(ParseData("PoisonResistance", ReadPoisonResistance)); parseDataArray.push_back(ParseData("STRAdd", ReadSTRAdd)); parseDataArray.push_back(ParseData("DEXAdd", ReadDEXAdd)); parseDataArray.push_back(ParseData("CONAdd", ReadCONAdd)); parseDataArray.push_back(ParseData("INTAdd", ReadINTAdd)); parseDataArray.push_back(ParseData("WISAdd", ReadWISAdd)); parseDataArray.push_back(ParseData("MaterialValue", ReadMaterialValue)); parseDataArray.push_back(ParseData("MaxSocketNum", ReadMaxSocketNum)); return true; } bool ReadSkill_ID(Item::ItemInfo& itemInfo, const char* szValue) { itemInfo.m_UseItemInfo.m_usSkill_ID = Math::Convert::StrToHex16(szValue); return true; } bool ReadSkill_Level(Item::ItemInfo& itemInfo, const char* szValue) { return ReadValue(itemInfo.m_UseItemInfo.m_usSkill_LockCount, szValue); } bool ReadItemDescribe(Item::ItemInfo& itemInfo, const char* szValue) { return ReadString(itemInfo.m_StringData.m_szItemDescribe, Item::StringData::MAX_ITEM_DESCRIBE, szValue); } bool ItemDataParser::SetUseItemData(ParseDataArray& parseDataArray) { parseDataArray.push_back(ParseData("CriticalType", ReadSkill_ID)); parseDataArray.push_back(ParseData("CriticalPercentage", ReadSkill_Level)); parseDataArray.push_back(ParseData("MinDamage", ReadItemDescribe)); return true; } bool ItemDataParser::SetEtcItemData(ParseDataArray& parseDataArray) { parseDataArray.push_back(ParseData("CriticalType", ReadItemDescribe)); return true; }