125 lines
5.6 KiB
C++
125 lines
5.6 KiB
C++
|
|
#include <ctime>
|
|
#include <atlcomtime.h>
|
|
|
|
#include <toolkit/XConsole.h>
|
|
|
|
#include "DB_Commands.h"
|
|
#include "StructItem.h"
|
|
|
|
|
|
|
|
|
|
DB_InsertItem::DB_InsertItem( struct StructItem * pItem ) : DBProc( "DB_InsertItem" ), m_pItem( pItem )
|
|
{
|
|
}
|
|
|
|
bool DB_InsertItem::insertItemToDB( DBConnection & db , ItemUID uid, int owner_id, int account_id, int summon_id, int auction_id, int keeping_id, int code, ItemUID previous_uid, int flag, const __int64 & cnt, int level, int enhance, int ethereal_durability, int endurance, int socket_0, int socket_1, int socket_2, int socket_3, int gcode, int remain_time, unsigned char elemental_effect_type, time_t elemental_effect_expire_time, int elemental_effect_attack_point, int elemental_effect_magic_point, const ItemBase::ItemCode appearance_code, int summon_code )
|
|
{
|
|
|
|
_CommandPtr cmd;
|
|
if( db.CreateCommand( cmd ) == false ) throw XException( "DB_InsertItem : CreateInstance(command) error" );
|
|
|
|
cmd->CommandType = adCmdStoredProc;
|
|
cmd->CommandText = _bstr_t( "dbo.smp_insert_item" );
|
|
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_SID", adBigInt, adParamInput, 8, uid ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_OWNER_ID", adInteger, adParamInput, 4, owner_id ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_ACCOUNT_ID", adInteger, adParamInput, 4, account_id ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_SUMMON_ID", adInteger, adParamInput, 4, summon_id ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_AUCTION_ID", adInteger, adParamInput, 4, auction_id ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_KEEPING_ID", adInteger, adParamInput, 4, keeping_id ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_CODE", adInteger, adParamInput, 4, code ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_PREVIOUS_SID", adBigInt, adParamInput, 8, previous_uid ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_FLAG", adInteger, adParamInput, 4, flag ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_CNT", adBigInt, adParamInput, 8, cnt ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_LEVEL", adInteger, adParamInput, 4, level ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_ENHANCE", adInteger, adParamInput, 4, enhance ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_ETHEREAL_DURABILITY", adInteger, adParamInput, 4, ethereal_durability ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_ENDURANCE", adInteger, adParamInput, 4, endurance ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_SOCKET_0", adInteger, adParamInput, 4, socket_0 ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_SOCKET_1", adInteger, adParamInput, 4, socket_1 ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_SOCKET_2", adInteger, adParamInput, 4, socket_2 ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_SOCKET_3", adInteger, adParamInput, 4, socket_3 ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_GCODE", adInteger, adParamInput, 4, gcode ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_REMAIN_TIME", adInteger, adParamInput, 4, remain_time ) );
|
|
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_ELEMENTAL_EFFECT_TYPE", adInteger, adParamInput, 4, elemental_effect_type ) );
|
|
COleDateTime dtElementalEffectExpire( elemental_effect_expire_time );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_ELEMENTAL_EFFECT_EXPIRE_DATE", adDate, adParamInput, sizeof( DATE ), static_cast< DATE >( dtElementalEffectExpire ) ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_ELEMENTAL_EFFECT_ATTACK_POINT", adInteger, adParamInput, 4, elemental_effect_attack_point ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_ELEMENTAL_EFFECT_MAGIC_POINT", adInteger, adParamInput, 4, elemental_effect_magic_point ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_APPEARANCE_CODE", adInteger, adParamInput, 4, appearance_code ) );
|
|
cmd->Parameters->Append( cmd->CreateParameter( "IN_SUMMON_CODE", adInteger, adParamInput, 4, summon_code ) );
|
|
|
|
cmd->Execute( NULL, NULL,adCmdStoredProc );
|
|
|
|
return true;
|
|
}
|
|
|
|
bool DB_InsertItem::proc( DBConnection & db )
|
|
{
|
|
time_t remain_time = 0;
|
|
|
|
if( m_pItem->IsExpireItem() )
|
|
{
|
|
if( m_pItem->GetItemBase().decrease_type == ItemBase::DECREASE_ALWAYS )
|
|
{
|
|
remain_time = m_pItem->GetExpireTime();
|
|
}
|
|
else
|
|
{
|
|
remain_time = m_pItem->GetExpireTime() - time( NULL );
|
|
}
|
|
}
|
|
|
|
// 어쨋든 Insert 하면 지금 당장 DB 업데이트분까지 반영이 되었으므로 플래그 Off
|
|
m_pItem->TurnOffDbUpdateFlag();
|
|
|
|
insertItemToDB( db, m_pItem->GetItemUID(),
|
|
m_pItem->GetOwnerUID(),
|
|
m_pItem->GetAccountID(),
|
|
m_pItem->GetOwnSummonUID(),
|
|
m_pItem->GetAuctionID(),
|
|
m_pItem->GetItemKeepingID(),
|
|
m_pItem->GetItemCode(),
|
|
m_pItem->GetPreviousUID(),
|
|
*m_pItem->GetInstanceFlag().GetRawData(),
|
|
m_pItem->GetCount(),
|
|
m_pItem->GetItemLevel( true ),
|
|
m_pItem->GetItemEnhance(),
|
|
m_pItem->GetCurrentEtherealDurability(),
|
|
m_pItem->GetCurrentEndurance(),
|
|
m_pItem->GetSocketCode( 0 ),
|
|
m_pItem->GetSocketCode( 1 ),
|
|
m_pItem->GetSocketCode( 2 ),
|
|
m_pItem->GetSocketCode( 3 ),
|
|
m_pItem->GetGenerateCode(),
|
|
remain_time,
|
|
m_pItem->GetElementalEffectType(),
|
|
m_pItem->GetElementalEffectExpireTime(),
|
|
m_pItem->GetElementalEffectAttackPoint(),
|
|
m_pItem->GetElementalEffectMagicPoint(),
|
|
m_pItem->GetAppearanceCode(),
|
|
m_pItem->GetSummonCode() );
|
|
|
|
return true;
|
|
}
|
|
|
|
bool DB_InsertItem::onProcess( DBConnection & db )
|
|
{
|
|
try
|
|
{
|
|
if( !m_pItem->IsVirtualItem() )
|
|
proc( db );
|
|
}
|
|
catch( ... )
|
|
{
|
|
m_pItem->onEndQuery();
|
|
throw;
|
|
}
|
|
|
|
m_pItem->onEndQuery();
|
|
|
|
return true;
|
|
} |