Files
Client/Server/RylServerProject/RylGameLibrary/Item/ItemStructure.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

450 lines
27 KiB
C++

#include "stdafx.h"
// 클라이언트에서도 쓰이므로 include를 명시한다.
#include <Log/ServerLog.h>
#include <Skill/SkillMgr.h>
#include <algorithm>
#include "ItemStructure.h"
#include "GMMemory.h"
// 김재연 S그레이드 테이블
static const float g_aryGradeTable[Item::EquipType::MAX_TYPE][Item::Grade::MAX_TABLE_TYPE][Item::EquipType::MAX_GRADE][Item::Attribute::MAX_ATTRIBUTE_NUM] =
{
//--// start..
// 갑옷류
{
// MinDam. MaxDam. Armor HitRate Evade MaxHP HPRegen MaxMP MPRegen Cri. Block Speed M.Power M.Res. M.Che. CoolDw SkillPt Frost Fire Electro Dark
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0, 0, 0.4f, 0, 0.1f, 0.1f, 0.2f, 0.1f, 0, 0, 0, 0, 0, 0.08f, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0, 0, 0.2f, 0, 0.05f, 0.05f, 0.1f, 0.05f, 0, 0, 0, 0, 0, 0.04f, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0, 0, -0.2f, 0, -0.05f, -0.05f, -0.1f, -0.05f, 0, 0, 0, 0, 0, -0.04f, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0, 0, -0.4f, 0, -0.1f, -0.1f, -0.2f, -0.1f, 0, 0, 0, 0, 0, -0.08f, 0, 0, 0, 0, 0, 0, 0, } // Grade F
},
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0, 0, 1.5f, 0, 0.375f, 0.375f, 0.75f, 0.375f, 0, 0, 0, 0, 0, 0.3f, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0, 0, 1.2f, 0, 0.3f, 0.3f, 0.6f, 0.3f, 0, 0, 0, 0, 0, 0.24f, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0, 0, 0.9f, 0, 0.225f, 0.225f, 0.45f, 0.225f, 0, 0, 0, 0, 0, 0.18f, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0, 0, 0.6f, 0, 0.15f, 0.15f, 0.3f, 0.15f, 0, 0, 0, 0, 0, 0.12f, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0, 0, 0.3f, 0, 0.075f, 0.075f, 0.15f, 0.075f, 0, 0, 0, 0, 0, 0.06f, 0, 0, 0, 0, 0, 0, 0, } // Grade F
},
{
{ 0, 0, 0, 1.801f, 0, 0.45f, 0.45f, 0.9f, 0.45f, 0, 0, 0, 0, 0, 0.36f, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 1.801f, 0, 0.45f, 0.45f, 0.9f, 0.45f, 0, 0, 0, 0, 0, 0.36f, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 1.501f, 0, 0.375f, 0.375f, 0.75f, 0.375f, 0, 0, 0, 0, 0, 0.3f, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0, 0, 1.201f, 0, 0.3f, 0.3f, 0.6f, 0.3f, 0, 0, 0, 0, 0, 0.24f, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0, 0, 0.9f, 0, 0.225f, 0.225f, 0.45f, 0.225f, 0, 0, 0, 0, 0, 0.18f, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0, 0, 0.6f, 0, 0.15f, 0.15f, 0.3f, 0.15f, 0, 0, 0, 0, 0, 0.12f, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0, 0, 0.3f, 0, 0.075f, 0.075f, 0.15f, 0.075f, 0, 0, 0, 0, 0, 0.06f, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
}
},
// 단검류
{
// MinDam. MaxDam. Armor HitRate Evade MaxHP HPRegen MaxMP MPRegen Cri. Block Speed M.Power M.Res. M.Che. CoolDw SkillPt Frost Fire Electro Dark
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0.12f, 0.16f, 0, 0.4f, 0, 0, 0, 0, 0, 0.08f, 0.08f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0.06f, 0.08f, 0, 0.2f, 0, 0, 0, 0, 0, 0.04f, 0.04f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, -0.06f, -0.08f, 0, -0.2f, 0, 0, 0, 0, 0, -0.04f, -0.04f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, -0.12f, -0.16f, 0, -0.4f, 0, 0, 0, 0, 0, -0.08f, -0.08f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
},
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0.6f, 0.75f, 0, 1.5f, 0, 0, 0, 0, 0, 0.75f, 0.3f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0.48f, 0.6f, 0, 1.2f, 0, 0, 0, 0, 0, 0.6f, 0.24f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0.36f, 0.45f, 0, 0.9f, 0, 0, 0, 0, 0, 0.45f, 0.18f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0.24f, 0.3f, 0, 0.6f, 0, 0, 0, 0, 0, 0.3f, 0.12f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0.12f, 0.15f, 0, 0.3f, 0, 0, 0, 0, 0, 0.15f, 0.06f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
},
{
{ 0, 0.72f, 0.9f, 0, 1.80f, 0, 0, 0, 0, 0, 0.9f, 0.36f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0.72f, 0.9f, 0, 1.80f, 0, 0, 0, 0, 0, 0.9f, 0.36f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0.6f, 0.75f, 0, 1.50f, 0, 0, 0, 0, 0, 0.75f, 0.3f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0.48f, 0.6f, 0, 1.20f, 0, 0, 0, 0, 0, 0.6f, 0.24f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0.36f, 0.45f, 0, 0.9f, 0, 0, 0, 0, 0, 0.45f, 0.18f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0.24f, 0.3f, 0, 0.6f, 0, 0, 0, 0, 0, 0.3f, 0.12f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0.12f, 0.15f, 0, 0.3f, 0, 0, 0, 0, 0, 0.15f, 0.06f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
}
},
// 한손 무기류
{
// MinDam. MaxDam. Armor HitRate Evade MaxHP HPRegen MaxMP MPRegen Cri. Block Speed M.Power M.Res. M.Che. CoolDw SkillPt Frost Fire Electro Dark
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0.2f, 0.2f, 0, 0.4f, 0, 0, 0, 0, 0, 0.08f, 0.08f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0.1f, 0.1f, 0, 0.2f, 0, 0, 0, 0, 0, 0.04f, 0.04f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, -0.1f, -0.1f, 0, -0.2f, 0, 0, 0, 0, 0, -0.04f, -0.04f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, -0.2f, -0.2f, 0, -0.4f, 0, 0, 0, 0, 0, -0.08f, -0.08f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
},
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 1.0f, 1.25f, 0, 1.5f, 0, 0, 0, 0, 0, 0.75f, 0.3f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0.8f, 1.0f, 0, 1.2f, 0, 0, 0, 0, 0, 0.6f, 0.24f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0.6f, 0.75f, 0, 0.9f, 0, 0, 0, 0, 0, 0.45f, 0.18f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0.4f, 0.5f, 0, 0.6f, 0, 0, 0, 0, 0, 0.3f, 0.12f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0.2f, 0.25f, 0, 0.3f, 0, 0, 0, 0, 0, 0.15f, 0.06f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
},
{
{ 0, 1.2f, 1.5f, 0, 1.80f, 0, 0, 0, 0, 0, 0.9f, 0.36f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 1.2f, 1.5f, 0, 1.80f, 0, 0, 0, 0, 0, 0.9f, 0.36f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 1.0f, 1.25f, 0, 1.50f, 0, 0, 0, 0, 0, 0.75f, 0.3f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0.8f, 1.0f, 0, 1.20f, 0, 0, 0, 0, 0, 0.6f, 0.24f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0.6f, 0.75f, 0, 0.9f, 0, 0, 0, 0, 0, 0.45f, 0.18f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0.4f, 0.5f, 0, 0.6f, 0, 0, 0, 0, 0, 0.3f, 0.12f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0.2f, 0.25f, 0, 0.3f, 0, 0, 0, 0, 0, 0.15f, 0.06f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
}
},
// 장거리 무기류
{
// MinDam. MaxDam. Armor HitRate Evade MaxHP HPRegen MaxMP MPRegen Cri. Block Speed M.Power M.Res. M.Che. CoolDw SkillPt Frost Fire Electro Dark
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0.2f, 0.2f, 0, 0.4f, 0, 0, 0, 0, 0, 0.08f, 0.08f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0.1f, 0.1f, 0, 0.2f, 0, 0, 0, 0, 0, 0.04f, 0.04f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, -0.1f, -0.1f, 0, -0.2f, 0, 0, 0, 0, 0, -0.04f, -0.04f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, -0.2f, -0.2f, 0, -0.4f, 0, 0, 0, 0, 0, -0.08f, -0.08f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
},
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 1.0f, 1.25f, 0, 1.5f, 0, 0, 0, 0, 0, 0.75f, 0.3f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0.8f, 1.0f, 0, 1.2f, 0, 0, 0, 0, 0, 0.6f, 0.24f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0.6f, 0.75f, 0, 0.9f, 0, 0, 0, 0, 0, 0.45f, 0.18f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0.4f, 0.5f, 0, 0.6f, 0, 0, 0, 0, 0, 0.3f, 0.12f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0.2f, 0.25f, 0, 0.3f, 0, 0, 0, 0, 0, 0.15f, 0.06f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
},
{
{ 0, 1.2f, 1.5f, 0, 1.80f, 0, 0, 0, 0, 0, 0.9f, 0.36f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 1.2f, 1.5f, 0, 1.80f, 0, 0, 0, 0, 0, 0.9f, 0.36f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 1.0f, 1.25f, 0, 1.50f, 0, 0, 0, 0, 0, 0.75f, 0.3f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0.8f, 1.0f, 0, 1.20f, 0, 0, 0, 0, 0, 0.6f, 0.24f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0.6f, 0.75f, 0, 0.9f, 0, 0, 0, 0, 0, 0.45f, 0.18f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0.4f, 0.5f, 0, 0.6f, 0, 0, 0, 0, 0, 0.3f, 0.12f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0.2f, 0.25f, 0, 0.3f, 0, 0, 0, 0, 0, 0.15f, 0.06f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
}
},
// 양손 무기류
{
// MinDam. MaxDam. Armor HitRate Evade MaxHP HPRegen MaxMP MPRegen Cri. Block Speed M.Power M.Res. M.Che. CoolDw SkillPt Frost Fire Electro Dark
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0.2f, 0.2f, 0, 0.4f, 0, 0, 0, 0, 0, 0.08f, 0.08f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0.1f, 0.1f, 0, 0.2f, 0, 0, 0, 0, 0, 0.04f, 0.04f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, -0.1f, -0.1f, 0, -0.2f, 0, 0, 0, 0, 0, -0.04f, -0.04f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, -0.2f, -0.2f, 0, -0.4f, 0, 0, 0, 0, 0, -0.08f, -0.08f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
},
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 1.0f, 1.25f, 0, 1.5f, 0, 0, 0, 0, 0, 0.75f, 0.3f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0.8f, 1.0f, 0, 1.2f, 0, 0, 0, 0, 0, 0.6f, 0.24f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0.6f, 0.75f, 0, 0.9f, 0, 0, 0, 0, 0, 0.45f, 0.18f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0.4f, 0.5f, 0, 0.6f, 0, 0, 0, 0, 0, 0.3f, 0.12f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0.2f, 0.25f, 0, 0.3f, 0, 0, 0, 0, 0, 0.15f, 0.06f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
},
{
{ 0, 1.2f, 1.5f, 0, 1.80f, 0, 0, 0, 0, 0, 0.9f, 0.36f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 1.2f, 1.5f, 0, 1.80f, 0, 0, 0, 0, 0, 0.9f, 0.36f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 1.0f, 1.25f, 0, 1.50f, 0, 0, 0, 0, 0, 0.75f, 0.3f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0.8f, 1.0f, 0, 1.20f, 0, 0, 0, 0, 0, 0.6f, 0.24f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0.6f, 0.75f, 0, 0.9f, 0, 0, 0, 0, 0, 0.45f, 0.18f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0.4f, 0.5f, 0, 0.6f, 0, 0, 0, 0, 0, 0.3f, 0.12f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0.2f, 0.25f, 0, 0.3f, 0, 0, 0, 0, 0, 0.15f, 0.06f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
}
},
// 스태프류
{
// MinDam. MaxDam. Armor HitRate Evade MaxHP HPRegen MaxMP MPRegen Cri. Block Speed M.Power M.Res. M.Che. CoolDw SkillPt Frost Fire Electro Dark
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0, 0.22f, 0, 0.4f, 0, 0, 0, 0.2f, 0.4f, 0.08f, 0, 0, 0.4f, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0, 0.11f, 0, 0.2f, 0, 0, 0, 0.1f, 0.2f, 0.04f, 0, 0, 0.2f, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0, -0.11f, 0, -0.2f, 0, 0, 0, -0.1f, -0.2f, -0.04f, 0, 0, -0.2f, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0, -0.22f, 0, -0.4f, 0, 0, 0, -0.2f, -0.4f, -0.08f, 0, 0, -0.4f, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
},
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0, 0.825f, 0, 1.5f, 0, 0, 0, 0.75f, 1.5f, 0.3f, 0, 0, 1.5f, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0, 0.66f, 0, 1.2f, 0, 0, 0, 0.6f, 1.2f, 0.24f, 0, 0, 1.2f, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0, 0.495f, 0, 0.9f, 0, 0, 0, 0.45f, 0.9f, 0.18f, 0, 0, 0.9f, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0, 0.33f, 0, 0.6f, 0, 0, 0, 0.3f, 0.6f, 0.12f, 0, 0, 0.6f, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0, 0.165f, 0, 0.3f, 0, 0, 0, 0.15f, 0.3f, 0.06f, 0, 0, 0.3f, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
},
{
{ 0, 0, 0.99f, 0, 1.801f, 0, 0, 0, 0.9f, 1.81f, 0.36f, 0, 0, 1.81f, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0.99f, 0, 1.801f, 0, 0, 0, 0.9f, 1.81f, 0.36f, 0, 0, 1.81f, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0.825f, 0, 1.501f, 0, 0, 0, 0.75f, 1.51f, 0.3f, 0, 0, 1.51f, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0, 0.66f, 0, 1.201f, 0, 0, 0, 0.6f, 1.21f, 0.24f, 0, 0, 1.21f, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0, 0.495f, 0, 0.9f, 0, 0, 0, 0.45f, 0.9f, 0.18f, 0, 0, 0.9f, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0, 0.33f, 0, 0.6f, 0, 0, 0, 0.3f, 0.6f, 0.12f, 0, 0, 0.6f, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0, 0.165f, 0, 0.3f, 0, 0, 0, 0.15f, 0.3f, 0.06f, 0, 0, 0.3f, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
}
},
// 방패류
{
// MinDam. MaxDam. Armor HitRate Evade MaxHP HPRegen MaxMP MPRegen Cri. Block Speed M.Power M.Res. M.Che. CoolDw SkillPt Frost Fire Electro Dark
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0, 0, 0, 0, 0, 0.05f, 0.1f, 0.05f, 0.1f, 0, 0.16f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0, 0, 0, 0, 0, 0.025f, 0.05f, 0.025f, 0.05f, 0, 0.08f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0, 0, 0, 0, 0, -0.025f,-0.05f, -0.025f,-0.05f, 0, -0.08f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0, 0, 0, 0, 0, -0.05f, -0.1f, -0.05f, -0.1f, 0, -0.16f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
},
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0, 0, 0, 0, 0, 0.1875f,0.375f, 0.1875f,0.375f, 0, 0.6f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0, 0, 0, 0, 0, 0.15f, 0.3f, 0.15f, 0.3f, 0, 0.48f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0, 0, 0, 0, 0, 0.113f, 0.225f, 0.113f, 0.225f, 0, 0.36f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0, 0, 0, 0, 0, 0.075f, 0.15f, 0.075f, 0.15f, 0, 0.24f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0, 0, 0, 0, 0, 0.038f, 0.075f, 0.038f, 0.075f, 0, 0.12f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
},
{
{ 0, 0, 0, 0, 0, 0, 0.225f, 0.45f, 0.225f, 0.45f, 0, 0.72f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade S
{ 0, 0, 0, 0, 0, 0, 0.225f, 0.45f, 0.225f, 0.45f, 0, 0.72f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AAA
{ 0, 0, 0, 0, 0, 0, 0.1875f,0.375f, 0.1875f,0.375f, 0, 0.6f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade AA
{ 0, 0, 0, 0, 0, 0, 0.15f, 0.3f, 0.15f, 0.3f, 0, 0.48f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade A
{ 0, 0, 0, 0, 0, 0, 0.113f, 0.225f, 0.113f, 0.225f, 0, 0.36f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade B
{ 0, 0, 0, 0, 0, 0, 0.075f, 0.15f, 0.075f, 0.15f, 0, 0.24f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade C
{ 0, 0, 0, 0, 0, 0, 0.038f, 0.075f, 0.038f, 0.075f, 0, 0.12f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, // Grade D
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } // Grade F
}
}
//--// end..
};
void Item::ItemData::DumpInfo(unsigned long dwCID, const char* szExtraString) const
{
ERRLOG8(g_Log, "CID:0x%10u / ItemUID:%016I64X / ProtoTypeID:%d / ItemPos(%d, 0x%04x) / ItemSize:%d / NumOrDurability:%d %s",
dwCID, m_dwUID, m_usProtoTypeID, m_ItemPos.m_cPos, m_ItemPos.m_cIndex,
m_cItemSize, m_cNumOrDurability, szExtraString);
}
Item::SpriteData::SpriteData() { Initialize(); }
void Item::SpriteData::Initialize()
{
memset(m_szName, 0, MAX_NAME);
memset(m_szSpriteName, 0, MAX_SPRITE_NAME);
m_nSpriteMinX = m_nSpriteMinY = m_nSpriteMaxX = m_nSpriteMaxY = 0;
}
Item::StringData::StringData() { Initialize(); }
void Item::StringData::Initialize()
{
memset(m_szFieldModelName, 0, MAX_FIELD_MODEL_NAME);
memset(m_szEquipModelName, 0, MAX_EQUIP_MODEL_NAME);
memset(m_szEffectSoundName, 0, MAX_EFFECT_SOUND_NAME);
memset(m_szTypeName, 0, MAX_TYPE_NAME);
memset(m_szItemDescribe, 0, MAX_ITEM_DESCRIBE);
}
Item::DetailData::DetailData() { Initialize(); }
void Item::DetailData::Initialize()
{
m_cItemType = 0;
m_cXSize = 0;
m_cYSize = 0;
m_wDropOption = 0;
m_cCriticalType = 0;
m_cAttackRange = 0;
m_cMaxSocketNum = 0;
m_cDefaultDurabilityOrStack = 0;
m_cMaxDurabilityOrStack = 0;
m_cMinDropLevel = 0;
m_cMaxDropLevel = 0;
m_dwPrice = 0;
m_dwBlackPrice = 0;
m_dwMedalPrice = 0;
m_bExchangeAndDrop = true;
m_bSell = true;
m_bOptionPrice = false;
m_dwFlags = 0;
}
Item::EquipAttribute::EquipAttribute() { Initialize(); }
void Item::EquipAttribute::Initialize()
{
m_nAttibuteNum = 0;
std::fill_n(m_usAttributeValue, unsigned short(Item::Attribute::MAX_ATTRIBUTE_NUM), 0);
}
Item::UseItemInfo::UseItemInfo() { Initialize(); }
void Item::UseItemInfo::Initialize()
{
m_cZone = 0;
m_dwAmount = 0;
m_usSkill_ID = 0;
m_usSkill_LockCount = 0;
m_wQuestID = 0;
m_cLimitRealmPoint = 0;
m_bForStatueWar = false;
}
Item::UseLimit::UseLimit() { Initialize(); }
void Item::UseLimit::Initialize()
{
m_dwClassLimit = 0;
m_cLimitStatus = Item::StatusLimit::NONE;
m_wLimitValue = 0;
}
Item::ItemInfo::ItemInfo() { Initialize(); }
Item::ItemInfo::ItemInfo(unsigned short usProtoTypeID) { Initialize(); m_usProtoTypeID = usProtoTypeID; }
void Item::ItemInfo::Initialize()
{
m_usProtoTypeID = 0;
m_DetailData.Initialize();
m_UseLimit.Initialize();
m_SpriteData.Initialize();
m_StringData.Initialize();
m_EquipAttribute.Initialize();
m_UseItemInfo.Initialize();
}
const char* Item::ItemInfo::GetItemDescribe(void) const
{
if (Item::ItemType::SKILL_BOOK == m_DetailData.m_cItemType)
{
const Skill::ProtoType* pSkillProtoType =
CSkillMgr::GetInstance().GetSkillProtoType(m_UseItemInfo.m_usSkill_ID);
if (NULL != pSkillProtoType)
{
return pSkillProtoType[m_UseItemInfo.m_usSkill_LockCount].m_szSkillDescribe;
}
}
return m_StringData.m_szItemDescribe;
}
Item::ItemGarbage::ItemGarbage(CItem* lpItem, unsigned long dwRemainNum)
: m_lpItem(lpItem), m_dwRemainNum(dwRemainNum)
{
}
Item::ChemicalInfo::ChemicalInfo()
: m_wPickkingItemID(0), m_wTargetItemID(0), m_wResultItemID(0),
m_cPickkingItemNum(0), m_cTargetItemNum(0), m_cResultItemNum(0),
m_dwItemID(0), m_usAbilityID(0), m_cAbilityLevel(0), m_usQuestID(0), m_cPercent(0)
{
}
Item::ChemicalInfo::ChemicalInfo(unsigned short wPickkingItemID, unsigned char cPickkingItemNum,
unsigned short wTargetItemID, unsigned char cTargetItemNum, unsigned int dwItemID, unsigned short usAbilityID, unsigned char cAbilityLevel, unsigned short usQuestID, unsigned char cPercent)
: m_wPickkingItemID(wPickkingItemID), m_wTargetItemID(wTargetItemID), m_wResultItemID(0),
m_cPickkingItemNum(cPickkingItemNum),m_cTargetItemNum(cTargetItemNum), m_cResultItemNum(0),
m_dwItemID(dwItemID), m_usAbilityID(usAbilityID), m_cAbilityLevel(cAbilityLevel), m_usQuestID(usQuestID), m_cPercent(cPercent)
{
}
Item::Grade::GradeInfo::GradeInfo()
: m_eItemGrade(EquipType::F_GRADE), m_cPlus(0)
{
std::fill_n(m_aryAttributeGrade, int(Attribute::MAX_ATTRIBUTE_NUM), EquipType::F_GRADE);
}
const float Item::Grade::GetGradeValue(Item::CItemType::ArrayType eEquipType, Grade::TableType eTableType,
EquipType::Grade eGrade, Attribute::Type eType)
{
switch (eEquipType)
{
case CItemType::HELM_TYPE:
case CItemType::ARMOUR_TYPE:
return g_aryGradeTable[EquipType::ARMOR_TYPE][eTableType][eGrade][eType];
case CItemType::DAGGER_TYPE: return g_aryGradeTable[EquipType::DAGGER_TYPE][eTableType][eGrade][eType];
case CItemType::ONEHANDED_TYPE: return g_aryGradeTable[EquipType::ONEHANDED_WEAPON_TYPE][eTableType][eGrade][eType];
case CItemType::LONGRANGE_TYPE: return g_aryGradeTable[EquipType::LONGRANGE_WEAPON_TYPE][eTableType][eGrade][eType];
case CItemType::TWOHANDED_TYPE: return g_aryGradeTable[EquipType::TWOHANDED_WEAPON_TYPE][eTableType][eGrade][eType];
case CItemType::STAFF_TYPE: return g_aryGradeTable[EquipType::STAFF_TYPE][eTableType][eGrade][eType];
case CItemType::SHIELD_TYPE: return g_aryGradeTable[EquipType::SHIELD_TYPE][eTableType][eGrade][eType];
}
return 0.0f;
}