Fix encoding warnings

warning C4828: The file contains a character starting at offse
t 0x132 that is illegal in the current source character set (codepage 65001)
This commit is contained in:
mq1n
2025-08-23 09:25:53 +03:00
parent c987a9f2f1
commit bf6434a3d6
18 changed files with 1033 additions and 114 deletions

View File

@@ -1,4 +1,4 @@
#include "stdafx.h"
#include "stdafx.h"
#include "utils.h"
#include "config.h"
#include "char.h"
@@ -81,7 +81,7 @@ bool ITEM_MANAGER::Initialize(TItemTable * table, int size)
if (m_vec_prototype[i].dwRefinedVnum)
m_map_ItemRefineFrom.insert(std::make_pair(m_vec_prototype[i].dwRefinedVnum, m_vec_prototype[i].dwVnum));
// NOTE : QUEST_GIVE 플래그는 npc 이벤트로 발생.
// NOTE : QUEST_GIVE 플래그는 npc 이벤트로 발생.
if (m_vec_prototype[i].bType == ITEM_QUEST || IS_SET(m_vec_prototype[i].dwFlags, ITEM_FLAG_QUEST_USE | ITEM_FLAG_QUEST_USE_MULTIPLE))
quest::CQuestManager::instance().RegisterNPCVnum(m_vec_prototype[i].dwVnum);
@@ -159,7 +159,7 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
{
if (vnum == 50300 && bTryMagic)
{
// 수련서를 아이템 번호를 다르게 만들어 준다.
// 수련서를 아이템 번호를 다르게 만들어 준다.
DWORD dwSkillVnum;
do
@@ -185,7 +185,7 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
LPITEM item = NULL;
//id로 검사해서 존재한다면 -- 리턴!
//id로 검사해서 존재한다면 -- 리턴!
if (m_map_pkItemByID.find(id) != m_map_pkItemByID.end())
{
item = m_map_pkItemByID[id];
@@ -194,7 +194,7 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
return NULL;
}
//아이템 하나 할당하고
//아이템 하나 할당하고
#ifdef M2_USE_POOL
item = pool_.Construct();
#else
@@ -203,15 +203,15 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
bool bIsNewItem = (0 == id);
//초기화 하고. 테이블 셋하고
//초기화 하고. 테이블 셋하고
item->Initialize();
item->SetProto(table);
item->SetMaskVnum(dwMaskVnum);
if (item->GetType() == ITEM_ELK) // 돈은 ID가 필요없고 저장도 필요없다.
if (item->GetType() == ITEM_ELK) // 돈은 ID가 필요없고 저장도 필요없다.
item->SetSkipSave(true);
// Unique ID를 세팅하자
// Unique ID를 세팅하자
else if (!bIsNewItem)
{
item->SetID(id);
@@ -221,16 +221,16 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
{
item->SetID(GetNewID());
if (item->GetType() == ITEM_UNIQUE) // 유니크 아이템은 생성시에 소켓에 남은시간을 기록한다.
if (item->GetType() == ITEM_UNIQUE) // 유니크 아이템은 생성시에 소켓에 남은시간을 기록한다.
{
if (item->GetValue(2) == 0)
item->SetSocket(ITEM_SOCKET_UNIQUE_REMAIN_TIME, item->GetValue(0)); // 게임 시간 유니크
item->SetSocket(ITEM_SOCKET_UNIQUE_REMAIN_TIME, item->GetValue(0)); // 게임 시간 유니크
else
{
//int globalTime = get_global_time();
//int lastTime = item->GetValue(0);
//int endTime = get_global_time() + item->GetValue(0);
item->SetSocket(ITEM_SOCKET_UNIQUE_REMAIN_TIME, get_global_time() + item->GetValue(0)); // 실시간 유니크
item->SetSocket(ITEM_SOCKET_UNIQUE_REMAIN_TIME, get_global_time() + item->GetValue(0)); // 실시간 유니크
}
}
}
@@ -259,9 +259,9 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
break;
}
if (item->GetType() == ITEM_ELK) // 돈은 아무 처리가 필요하지 않음
if (item->GetType() == ITEM_ELK) // 돈은 아무 처리가 필요하지 않음
;
else if (item->IsStackable()) // 합칠 수 있는 아이템의 경우
else if (item->IsStackable()) // 합칠 수 있는 아이템의 경우
{
count = MINMAX(1, count, ITEM_MAX_COUNT);
@@ -289,7 +289,7 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
for (int i=0 ; i < ITEM_LIMIT_MAX_NUM ; i++)
{
// 아이템 생성 시점부터 사용하지 않아도 시간이 차감되는 방식
// 아이템 생성 시점부터 사용하지 않아도 시간이 차감되는 방식
if (LIMIT_REAL_TIME == item->GetLimitType(i))
{
if (item->GetLimitValue(i))
@@ -304,11 +304,11 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
item->StartRealTimeExpireEvent();
}
// 기존 유니크 아이템처럼 착용시에만 사용가능 시간이 차감되는 방식
// 기존 유니크 아이템처럼 착용시에만 사용가능 시간이 차감되는 방식
else if (LIMIT_TIMER_BASED_ON_WEAR == item->GetLimitType(i))
{
// 이미 착용중인 아이템이면 타이머를 시작하고, 새로 만드는 아이템은 사용 가능 시간을 세팅해준다. (
// 아이템몰로 지급하는 경우에는 이 로직에 들어오기 전에 Socket0 값이 세팅이 되어 있어야 한다.
// 이미 착용중인 아이템이면 타이머를 시작하고, 새로 만드는 아이템은 사용 가능 시간을 세팅해준다. (
// 아이템몰로 지급하는 경우에는 이 로직에 들어오기 전에 Socket0 값이 세팅이 되어 있어야 한다.
if (true == item->IsEquipped())
{
item->StartTimerBasedOnWearExpireEvent();
@@ -320,16 +320,16 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
duration = item->GetLimitValue(i);
if (0 == duration)
duration = 60 * 60 * 10; // 정보가 아무것도 없으면 디폴트로 10시간 세팅
duration = 60 * 60 * 10; // 정보가 아무것도 없으면 디폴트로 10시간 세팅
item->SetSocket(0, duration);
}
}
}
if (id == 0) // 새로 만드는 아이템일 때만 처리
if (id == 0) // 새로 만드는 아이템일 때만 처리
{
// 새로추가되는 약초들일경우 성능을 다르게처리
// 새로추가되는 약초들일경우 성능을 다르게처리
if (ITEM_BLEND==item->GetType())
{
if (Blend_Item_find(item->GetVnum()))
@@ -356,7 +356,7 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
if (table->bGainSocketPct)
item->AlterToSocketItem(table->bGainSocketPct);
// 50300 == 기술 수련서
// 50300 == 기술 수련서
if (vnum == 50300 || vnum == ITEM_SKILLFORGET_VNUM)
{
DWORD dwSkillVnum;
@@ -408,7 +408,7 @@ LPITEM ITEM_MANAGER::CreateItem(DWORD vnum, DWORD count, DWORD id, bool bTryMagi
}
}
// 새로 생성되는 용혼석 처리.
// 새로 생성되는 용혼석 처리.
if (item->IsDragonSoul() && 0 == id)
{
DSManager::instance().DragonSoulItemInitialize(item);
@@ -477,7 +477,7 @@ void ITEM_MANAGER::Update()
this_it = it++;
LPITEM item = *this_it;
// SLOW_QUERY 플래그가 있는 것은 종료시에만 저장한다.
// SLOW_QUERY 플래그가 있는 것은 종료시에만 저장한다.
if (item->GetOwner() && IS_SET(item->GetFlag(), ITEM_FLAG_SLOW_QUERY))
continue;
@@ -500,7 +500,7 @@ void ITEM_MANAGER::RemoveItem(LPITEM item, const char * c_pszReason)
// SAFEBOX_TIME_LIMIT_ITEM_BUG_FIX
if (item->GetWindow() == MALL || item->GetWindow() == SAFEBOX)
{
// 20050613.ipkn.시간제 아이템이 상점에 있을 경우 시간만료시 서버가 다운된다.
// 20050613.ipkn.시간제 아이템이 상점에 있을 경우 시간만료시 서버가 다운된다.
CSafebox* pSafebox = item->GetWindow() == MALL ? o->GetMall() : o->GetSafebox();
if (pSafebox)
{
@@ -764,8 +764,8 @@ class CItemDropInfo
extern std::vector<CItemDropInfo> g_vec_pkCommonDropItem[MOB_RANK_MAX_NUM];
// 20050503.ipkn.
// iMinimum 보다 작으면 iDefault 세팅 (단, iMinimum은 0보다 커야함)
// 1, 0 식으로 ON/OFF 되는 방식을 지원하기 위해 존재
// iMinimum 보다 작으면 iDefault 세팅 (단, iMinimum은 0보다 커야함)
// 1, 0 식으로 ON/OFF 되는 방식을 지원하기 위해 존재
int GetDropPerKillPct(int iMinimum, int iDefault, int iDeltaPercent, const char * c_pszFlag)
{
int iVal = 0;
@@ -785,8 +785,8 @@ int GetDropPerKillPct(int iMinimum, int iDefault, int iDeltaPercent, const char
if (iVal == 0)
return 0;
// 기본 세팅일때 (iDeltaPercent=100)
// 40000 iVal 마리당 하나 느낌을 주기 위한 상수임
// 기본 세팅일때 (iDeltaPercent=100)
// 40000 iVal 마리당 하나 느낌을 주기 위한 상수임
return (40000 * iDeltaPercent / iVal);
}
@@ -932,7 +932,7 @@ bool ITEM_MANAGER::CreateDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::
CMobItemGroup* pGroup = it->second;
// MOB_DROP_ITEM_BUG_FIX
// 20050805.myevan.MobDropItem 에 아이템이 없을 경우 CMobItemGroup::GetOne() 접근시 문제 발생 수정
// 20050805.myevan.MobDropItem 에 아이템이 없을 경우 CMobItemGroup::GetOne() 접근시 문제 발생 수정
if (pGroup && !pGroup->IsEmpty())
{
int iPercent = 40000 * iDeltaPercent / pGroup->GetKillPerDrop();
@@ -995,7 +995,7 @@ bool ITEM_MANAGER::CreateDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::
}
}
// 잡템
// 잡템
if (pkChr->GetMobDropItemVnum())
{
itertype(m_map_dwEtcItemDropProb) it = m_map_dwEtcItemDropProb.find(pkChr->GetMobDropItemVnum());
@@ -1044,14 +1044,14 @@ bool ITEM_MANAGER::CreateDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::
pdw[1] = 1;
pdw[2] = quest::CQuestManager::instance().GetEventFlag("lotto_round");
// 행운의 서는 소켓을 설정한다
// 행운의 서는 소켓을 설정한다
DBManager::instance().ReturnQuery(QID_LOTTO, pkKiller->GetPlayerID(), pdw,
"INSERT INTO lotto_list VALUES(0, 'server%s', %u, NOW())",
get_table_postfix(), pkKiller->GetPlayerID());
}
//
// 스페셜 드롭 아이템
// 스페셜 드롭 아이템
//
CreateQuestDropItem(pkChr, pkKiller, vec_item, iDeltaPercent, iRandRange);
@@ -1062,7 +1062,7 @@ bool ITEM_MANAGER::CreateDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::
}
//
// 승룡곡 천의동굴 2층에서만 수룡방 입장권
// 승룡곡 천의동굴 2층에서만 수룡방 입장권
//
if (LC_IsYMIR() || LC_IsKorea())
{
@@ -1079,21 +1079,21 @@ bool ITEM_MANAGER::CreateDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::
}
//
// 승룡곡 1층, 2층에서만 7,8 스킬입문서 드롭
// 승룡곡 1층, 2층에서만 7,8 스킬입문서 드롭
//
if (LC_IsYMIR() || LC_IsKorea())
{
switch (pkKiller->GetMapIndex())
{
case 72: // 천의동굴 1층
case 73: // 천의동굴 2층
case 72: // 천의동굴 1층
case 73: // 천의동굴 2층
{
int vnum = 0;
if (2403 == pkChr->GetRaceNum()) // 천의법사
vnum = 69200; // 7스킬 입문서
else if (2411 == pkChr->GetRaceNum()) // 진천의병사
vnum = 69201; // 8스킬 입문서
if (2403 == pkChr->GetRaceNum()) // 천의법사
vnum = 69200; // 7스킬 입문서
else if (2411 == pkChr->GetRaceNum()) // 진천의병사
vnum = 69201; // 8스킬 입문서
else
break;
@@ -1249,11 +1249,11 @@ bool DropEvent_CharStone_SetValue(const std::string& name, int value)
// END_OF_DROPEVENT_CHARSTONE
// fixme
// 위의 것과 함께 quest로 뺄것 빼보자.
// 이거 너무 더럽잖아...
// <EFBFBD>?. 하드코딩 싫다 ㅜㅠ
// 계량 아이템 보상 시작.
// by rtsummit 고치자 진짜
// 위의 것과 함께 quest로 뺄것 빼보자.
// 이거 너무 더럽잖아...
// ”?. 하드코딩 싫다 ㅜㅠ
// 계량 아이템 보상 시작.
// by rtsummit 고치자 진짜
static struct DropEvent_RefineBox
{
int percent_low;
@@ -1373,7 +1373,7 @@ bool DropEvent_RefineBox_SetValue(const std::string& name, int value)
return true;
}
// 개량 아이템 보상 끝.
// 개량 아이템 보상 끝.
void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::vector<LPITEM> & vec_item, int iDeltaPercent, int iRandRange)
@@ -1393,7 +1393,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
// END_OF_DROPEVENT_CHARSTONE
__DropEvent_RefineBox_DropItem(*pkKiller, *pkChr, *this, vec_item);
// 크리스마스 양말
// 크리스마스 양말
if (quest::CQuestManager::instance().GetEventFlag("xmas_sock"))
{
//const DWORD SOCK_ITEM_VNUM = 50010;
@@ -1435,7 +1435,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
}
}
// 월광 보합
// 월광 보합
if (quest::CQuestManager::instance().GetEventFlag("drop_moon"))
{
const DWORD ITEM_VNUM = 50011;
@@ -1481,10 +1481,10 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
}
}
//육각보합
//육각보합
if (GetDropPerKillPct(100, g_iUseLocale ? 2000 : 800, iDeltaPercent, "2006_drop") >= number(1, iRandRange))
{
sys_log(0, "육각보합 DROP EVENT ");
sys_log(0, "육각보합 DROP EVENT ");
const static DWORD dwVnum = 50037;
@@ -1493,10 +1493,10 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
}
//육각보합+
//육각보합+
if (GetDropPerKillPct(100, g_iUseLocale ? 2000 : 800, iDeltaPercent, "2007_drop") >= number(1, iRandRange))
{
sys_log(0, "육각보합 DROP EVENT ");
sys_log(0, "육각보합 DROP EVENT ");
const static DWORD dwVnum = 50043;
@@ -1504,17 +1504,17 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
vec_item.push_back(item);
}
// 새해 폭죽 이벤트
// 새해 폭죽 이벤트
if (GetDropPerKillPct(/* minimum */ 100, /* default */ 1000, iDeltaPercent, "newyear_fire") >= number(1, iRandRange))
{
// 중국은 폭죽, 한국 팽이
// 중국은 폭죽, 한국 팽이
const DWORD ITEM_VNUM_FIRE = g_iUseLocale ? 50107 : 50108;
if ((item = CreateItem(ITEM_VNUM_FIRE, 1, 0, true)))
vec_item.push_back(item);
}
// 새해 대보름 원소 이벤트
// 새해 대보름 원소 이벤트
if (GetDropPerKillPct(100, 500, iDeltaPercent, "newyear_moon") >= number(1, iRandRange))
{
sys_log(0, "EVENT NEWYEAR_MOON DROP");
@@ -1526,7 +1526,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
vec_item.push_back(item);
}
// 발렌타인 데이 이벤트. OGE의 요구에 따라 event 최소값을 1로 변경.(다른 이벤트는 일단 그대로 둠.)
// 발렌타인 데이 이벤트. OGE의 요구에 따라 event 최소값을 1로 변경.(다른 이벤트는 일단 그대로 둠.)
if (GetDropPerKillPct(1, g_iUseLocale ? 2000 : 800, iDeltaPercent, "valentine_drop") >= number(1, iRandRange))
{
sys_log(0, "EVENT VALENTINE_DROP");
@@ -1538,7 +1538,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
vec_item.push_back(item);
}
// 아이스크림 이벤트
// 아이스크림 이벤트
if (GetDropPerKillPct(100, g_iUseLocale ? 2000 : 800, iDeltaPercent, "icecream_drop") >= number(1, iRandRange))
{
const static DWORD icecream = 50123;
@@ -1547,8 +1547,8 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
vec_item.push_back(item);
}
// new 크리스마스 이벤트
// 53002 : 아기 순록 소환권
// new 크리스마스 이벤트
// 53002 : 아기 순록 소환권
if ((pkKiller->CountSpecifyItem(53002) > 0) && (GetDropPerKillPct(50, 100, iDeltaPercent, "new_xmas_event") >= number(1, iRandRange)))
{
const static DWORD xmas_sock = 50010;
@@ -1592,7 +1592,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
vec_item.push_back(item);
}
// 월드컵 이벤트
// 월드컵 이벤트
if ( GetDropPerKillPct(100, g_iUseLocale ? 2000 : 800, iDeltaPercent, "football_drop") >= number(1, iRandRange) )
{
const static DWORD football_item = 50096;
@@ -1601,7 +1601,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
vec_item.push_back(item);
}
// 화이트 데이 이벤트
// 화이트 데이 이벤트
if (GetDropPerKillPct(100, g_iUseLocale ? 2000 : 800, iDeltaPercent, "whiteday_drop") >= number(1, iRandRange))
{
sys_log(0, "EVENT WHITEDAY_DROP");
@@ -1612,7 +1612,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
vec_item.push_back(item);
}
// 어린이날 수수께끼 상자 이벤트
// 어린이날 수수께끼 상자 이벤트
if (pkKiller->GetLevel()>=50)
{
if (GetDropPerKillPct(100, 1000, iDeltaPercent, "kids_day_drop_high") >= number(1, iRandRange))
@@ -1634,7 +1634,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
}
}
// 올림픽 드롭 이벤트
// 올림픽 드롭 이벤트
if (pkChr->GetLevel() >= 30 && GetDropPerKillPct(50, 100, iDeltaPercent, "medal_part_drop") >= number(1, iRandRange))
{
const static DWORD drop_items[] = { 30265, 30266, 30267, 30268, 30269 };
@@ -1645,7 +1645,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
}
// ADD_GRANDMASTER_SKILL
// 혼석 아이템 드롭
// 혼석 아이템 드롭
if (pkChr->GetLevel() >= 40 && pkChr->GetMobRank() >= MOB_RANK_BOSS && GetDropPerKillPct(/* minimum */ 1, /* default */ 1000, iDeltaPercent, "three_skill_item") / GetThreeSkillLevelAdjust(pkChr->GetLevel()) >= number(1, iRandRange))
{
const DWORD ITEM_VNUM = 50513;
@@ -1656,7 +1656,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
// END_OF_ADD_GRANDMASTER_SKILL
//
// 종자 아이템 drop
// 종자 아이템 drop
//
if (GetDropPerKillPct(100, 1000, iDeltaPercent, "dragon_boat_festival_drop") >= number(1, iRandRange))
{
@@ -1666,7 +1666,7 @@ void ITEM_MANAGER::CreateQuestDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller,
vec_item.push_back(item);
}
// 무신의 축복서용 만년한철 drop
// 무신의 축복서용 만년한철 drop
if (pkKiller->GetLevel() >= 15 && quest::CQuestManager::instance().GetEventFlag("mars_drop"))
{
const DWORD ITEM_HANIRON = 70035;
@@ -1728,8 +1728,8 @@ DWORD ITEM_MANAGER::GetMaskVnum(DWORD dwVnum)
return 0;
}
// pkNewItem으로 모든 속성과 소켓 값들을 목사하는 함수.
// 기존에 char_item.cpp 파일에 있던 로컬함수인 TransformRefineItem 그대로 복사함
// pkNewItem으로 모든 속성과 소켓 값들을 목사하는 함수.
// 기존에 char_item.cpp 파일에 있던 로컬함수인 TransformRefineItem 그대로 복사함
void ITEM_MANAGER::CopyAllAttrTo(LPITEM pkOldItem, LPITEM pkNewItem)
{
// ACCESSORY_REFINE
@@ -1744,7 +1744,7 @@ void ITEM_MANAGER::CopyAllAttrTo(LPITEM pkOldItem, LPITEM pkNewItem)
// END_OF_ACCESSORY_REFINE
else
{
// 여기서 깨진석이 자동적으로 청소 됨
// 여기서 깨진석이 자동적으로 청소 됨
for (int i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
{
if (!pkOldItem->GetSocket(i))
@@ -1753,19 +1753,19 @@ void ITEM_MANAGER::CopyAllAttrTo(LPITEM pkOldItem, LPITEM pkNewItem)
pkNewItem->SetSocket(i, 1);
}
// 소켓 설정
// 소켓 설정
int slot = 0;
for (int i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
{
long socket = pkOldItem->GetSocket(i);
const int ITEM_BROKEN_METIN_VNUM = 28960; // 이건 뭐 똑같은 상수가 3군데나 있냐... 하나로 해놓지ㅠㅠㅠ 나는 패스 홍이 할꺼임
const int ITEM_BROKEN_METIN_VNUM = 28960; // 이건 뭐 똑같은 상수가 3군데나 있냐... 하나로 해놓지ㅠㅠㅠ 나는 패스 홍이 할꺼임
if (socket > 2 && socket != ITEM_BROKEN_METIN_VNUM)
pkNewItem->SetSocket(slot++, socket);
}
}
// 매직 아이템 설정
// 매직 아이템 설정
pkOldItem->CopyAttributeTo(pkNewItem);
}