GDB Results:
Shop_Manager.CPP/Sell: Functions
void CShopManager::Sell(LPCHARACTER ch, BYTE bCell, BYTE bCount)
{
if (!ch->GetShop())
return;
if (!ch->GetShopOwner())
return;
if (!ch->CanHandleItem())
return;
if (ch->GetShop()->IsPCShop())
return;
if (DISTANCE_APPROX(ch->GetX()-ch->GetShopOwner()->GetX(), ch->GetY()-ch->GetShopOwner()->GetY())>2000)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("상점과의 거리가 너무 멀어 물건을 팔 수 없습니다."));
return;
}
LPITEM item = ch->GetInventoryItem(bCell);
// special code (Ken) //
if (item->GetType() == ITEM_WEAPON || item->GetType() == ITEM_ARMOR || item->GetType() == ITEM_BELT)
{
char szEventFlag[30];
snprintf(szEventFlag, sizeof(szEventFlag), "%d.Engel", item->GetID());
if (*szEventFlag)
{
if (quest::CQuestManager::instance().GetEventFlag(szEventFlag))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("item_engel"));
return;
}
}
}
// special code (Ken) //
if (!item)
return;
if (item->IsEquipped() == true)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("착용 중인 아이템은 판매할 수 없습니다."));
return;
}
if (true == item->isLocked())
{
return;
}
if (IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_SELL))
return;
DWORD dwPrice;
if (bCount == 0 || bCount > item->GetCount())
bCount = item->GetCount();
dwPrice = item->GetShopBuyPrice();
if (IS_SET(item->GetFlag(), ITEM_FLAG_COUNT_PER_1GOLD))
{
if (dwPrice == 0)
dwPrice = bCount;
else
dwPrice = bCount / dwPrice;
}
else
dwPrice *= bCount;
dwPrice /= 5;
//세금 계산
DWORD dwTax = 0;
int iVal = 0;
if (LC_IsYMIR() || LC_IsKorea())
{
dwTax = dwPrice * iVal / 100;
dwPrice -= dwTax;
}
else
{
dwTax = dwPrice * iVal/100;
dwPrice -= dwTax;
}
if (test_server)
sys_log(0, "Sell Item price id %d %s itemid %d", ch->GetPlayerID(), ch->GetName(), item->GetID());
const int64_t nTotalMoney = static_cast<int64_t>(ch->GetGold()) + static_cast<int64_t>(dwPrice);
if (GOLD_MAX <= nTotalMoney)
{
sys_err("[OVERFLOW_GOLD] id %u name %s gold %u", ch->GetPlayerID(), ch->GetName(), ch->GetGold());
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("20억냥이 초과하여 물품을 팔수 없습니다."));
return;
}
// 20050802.myevan.상점 판매 로그에 아이템 ID 추가
sys_log(0, "SHOP: SELL: %s item name: %s(x%d):%u price: %u", ch->GetName(), item->GetName(), bCount, item->GetID(), dwPrice);
if (iVal > 0)
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("판매금액의 %d %% 가 세금으로 나가게됩니다"), iVal);
DBManager::instance().SendMoneyLog(MONEY_LOG_SHOP, item->GetVnum(), dwPrice);
if (bCount == item->GetCount())
{
// 한국에는 아이템을 버리고 복구해달라는 진상유저들이 많아서
// 상점 판매시 속성로그를 남긴다.
if (LC_IsYMIR())
item->AttrLog();
ITEM_MANAGER::instance().RemoveItem(item, "SELL");
}
else
item->SetCount(item->GetCount() - bCount);
//군주 시스템 : 세금 징수
CMonarch::instance().SendtoDBAddMoney(dwTax, ch->GetEmpire(), ch);
ch->PointChange(POINT_GOLD, dwPrice, false);
}
İtem.H/68;
İnput_Main.CPP/1094 :
İnput_Main.CPP/3171:
İnput.CPP/102: