ACMD(do_gift_show)
{
ch->ChatPacket(CHAT_TYPE_COMMAND, "gift_show");
}
bool GetGift(LPCHARACTER ch, DWORD id,bool all=false)
{
char szSockets[1024] = { '\0' };
char *tempSockets = szSockets;
for (int i = 0; i < ITEM_SOCKET_MAX_NUM; i++)
{
tempSockets += sprintf(tempSockets, "socket%d", i);
if (i<ITEM_SOCKET_MAX_NUM - 1)
tempSockets += sprintf(tempSockets, ",");
}
char szAttrs[1024] = { '\0' };
char *tempAttrs = szAttrs;
for (int i = 0; i < ITEM_ATTRIBUTE_MAX_NUM; i++)
{
if (i < 7)
tempAttrs += sprintf(tempAttrs, "attrtype%d,attrvalue%d", i, i);
else
tempAttrs += sprintf(tempAttrs, "applytype%d,applyvalue%d", i - 7, i - 7);
if (i<ITEM_ATTRIBUTE_MAX_NUM - 1)
tempAttrs += sprintf(tempAttrs, ",");
}
char query[8192];
if (!all)
snprintf(query, sizeof(query), "SELECT id,vnum,count,%s,%s from player_gift where id='%d' and owner_id=%d and status='WAIT'", szSockets, szAttrs, id, ch->GetPlayerID());
else
snprintf(query, sizeof(query), "SELECT id,vnum,count,%s,%s from player_gift where owner_id=%d and status='WAIT'", szSockets, szAttrs, ch->GetPlayerID());
SQLMsg * pkMsg(DBManager::instance().DirectQuery(query));
SQLResult * pRes = pkMsg->Get();
if (pRes->uiNumRows > 0)
{
ch->SetQuestFlag("gift.time", get_global_time()+(1*pRes->uiNumRows)+2);
MYSQL_ROW row;
bool force = false;
while ((row = mysql_fetch_row(pRes->pSQLResult)) != NULL)
{
DWORD vnum, socket[ITEM_SOCKET_MAX_NUM], attr[ITEM_ATTRIBUTE_MAX_NUM][2];
int col = 0;
long long count = 0;
str_to_number(id, row[col++]);
str_to_number(vnum, row[col++]);
str_to_number(count, row[col++]);
if (vnum == 1)
{
#ifndef FULL_YANG
long long nTotalMoney = ch->GetGold()+count;
if (GOLD_MAX <= nTotalMoney)
{
//sys_err("[OVERFLOW_GOLD] Overflow (GOLD_MAX) id %u name %s", ch->GetPlayerID(), ch->GetName());
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("20?? ©©E?¡í ??¡ÆuC??¨Ï ¡íoA¢§?¡í ?¡©?o¡Æ¢§ ??¢©?¢¥?¢¥?"));
return true;
}
#endif
#ifdef FULL_YANG_OWN
ch->ChangeGold(count);
#else
ch->PointChange(POINT_GOLD, count, false);
#endif
}
else {
if (force)
continue;
for (int s = 0; s < ITEM_SOCKET_MAX_NUM; s++)
str_to_number(socket[s], row[col++]);
for (int a = 0; a < ITEM_ATTRIBUTE_MAX_NUM; a++)
{
str_to_number(attr[a][0], row[col++]);
str_to_number(attr[a][1], row[col++]);
}
LPITEM item = ITEM_MANAGER::instance().CreateItem(vnum, count, 0, true);
if (item)
{
for (int s = 0; s < ITEM_SOCKET_MAX_NUM; s++)
item->SetSocket(s, socket[s], false);
item->ClearAttribute();
for (int a = 0; a < ITEM_ATTRIBUTE_MAX_NUM; a++)
item->SetForceAttribute(a, attr[a][0], attr[a][1]);
if (item->IsDragonSoul())
{
int iEmptyPos = ch->GetEmptyDragonSoulInventory(item);
if (iEmptyPos != -1)
{
item->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos));
}
else
{
M2_DESTROY_ITEM(item);
if (!ch->DragonSoul_IsQualified())
{
ch->ChatPacket(CHAT_TYPE_INFO, "<Gift> %s #3", LC_TEXT( "UNKNOW_ERROR"));
force = true;
continue;
}
else {
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "INVENTORY_FULL_ERROR"));
force = true;
continue;
}
}
}
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
else if (item->IsSkillBook())
{
int iEmptyPos = ch->GetEmptySkillBookInventory(item->GetSize());
if (iEmptyPos != -1)
{
item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
}
else
{
M2_DESTROY_ITEM(item);
ch->ChatPacket(CHAT_TYPE_INFO, "<Sistem> Ek envanter dolu.");
}
}
else if (item->IsUpgradeItem())
{
int iEmptyPos = ch->GetEmptyUpgradeItemsInventory(item->GetSize());
if (iEmptyPos != -1)
{
item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
}
else
{
M2_DESTROY_ITEM(item);
ch->ChatPacket(CHAT_TYPE_INFO, "<Sistem> Ek envanter dolu.");
}
}
else if (item->IsStone())
{
int iEmptyPos = ch->GetEmptyStoneInventory(item->GetSize());
if (iEmptyPos != -1)
{
item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
}
else
{
M2_DESTROY_ITEM(item);
ch->ChatPacket(CHAT_TYPE_INFO, "<Sistem> Ek envanter dolu.");
}
}
else if (item->IsBox())
{
int iEmptyPos = ch->GetEmptyBoxInventory(item->GetSize());
if (iEmptyPos != -1)
{
item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
}
else
{
M2_DESTROY_ITEM(item);
ch->ChatPacket(CHAT_TYPE_INFO, "<Sistem> Ek envanter dolu.");
}
}
else if (item->IsEfsun())
{
int iEmptyPos = ch->GetEmptyEfsunInventory(item->GetSize());
if (iEmptyPos != -1)
{
item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
}
else
{
M2_DESTROY_ITEM(item);
ch->ChatPacket(CHAT_TYPE_INFO, "<Sistem> Ek envanter dolu.");
}
}
else if (item->IsCicek())
{
int iEmptyPos = ch->GetEmptyCicekInventory(item->GetSize());
if (iEmptyPos != -1)
{
item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
}
else
{
M2_DESTROY_ITEM(item);
ch->ChatPacket(CHAT_TYPE_INFO, "<Sistem> Ek envanter dolu.");
}
}
#endif
else
{
int iEmptyPos = ch->GetEmptyInventory(item->GetSize());
if (iEmptyPos != -1)
{
item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
}
else
{
M2_DESTROY_ITEM(item);
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "INVENTORY_FULL_ERROR"));
force = true;
continue;
}
}
}
else
{
ch->ChatPacket(CHAT_TYPE_INFO, "<Gift> %s #4", LC_TEXT( "UNKNOW_ERROR"));
force = true;
continue;
}
}
DBManager::instance().DirectQuery("UPDATE player_gift SET status='OK',date_get=NOW() where id=%d;", id);
}
if (force)
return true;
if (all)
ch->ChatPacket(CHAT_TYPE_INFO,LC_TEXT("GIFT_ADD_ALL_SUCCESS"));
else
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT( "GIFT_ADD_SUCCESS"));
ch->SetQuestFlag("gift.time", get_global_time()+2);
return true;
}
return false;
}