Without Xpro:
Replace Both Functions:
With:
Code:
BOOL CWndChangeWeapon::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult ) void CWndChangeWeapon::ReceiveResult(int result)
Code:
BOOL CWndChangeWeapon::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult )
{
if( nID == WIDC_START )
{
if(!m_bIsSendChange && m_pWItemElem != NULL && m_pJItemElem[0] != NULL && m_pJItemElem[1] != NULL)
{
CWndButton* pButton = (CWndButton*)GetDlgItem(WIDC_START);
m_bIsSendChange = TRUE;
g_DPlay.SendUltimateTransWeapon(m_pWItemElem->m_dwObjId, m_pJItemElem[1]->m_dwObjId, m_pJItemElem[0]->m_dwObjId);
}
}
return CWndNeuz::OnChildNotify( message, nID, pLResult );
}
void CWndChangeWeapon::ReceiveResult(int result)
{
switch(result)
{
case CUltimateWeapon::ULTIMATE_SUCCESS:
if(m_nWeaponType == WEAPON_UNIQUE)
g_WndMng.PutString( prj.GetText( TID_GAME_CUWEAPON_SUCCESS ), NULL, prj.GetTextColor( TID_GAME_CUWEAPON_SUCCESS ) );
else if(m_nWeaponType == WEAPON_GENERAL)
g_WndMng.PutString( prj.GetText( TID_GAME_CGWEAPON_SUCCESS ), NULL, prj.GetTextColor( TID_GAME_CGWEAPON_SUCCESS ) );
break;
case CUltimateWeapon::ULTIMATE_FAILED:
if(m_nWeaponType == WEAPON_UNIQUE)
g_WndMng.PutString( prj.GetText( TID_GAME_CUWEAPON_FAILED ), NULL, prj.GetTextColor( TID_GAME_CUWEAPON_FAILED ) );
else if(m_nWeaponType == WEAPON_GENERAL)
g_WndMng.PutString( prj.GetText( TID_GAME_CGWEAPON_FAILED ), NULL, prj.GetTextColor( TID_GAME_CGWEAPON_FAILED ) );
break;
case CUltimateWeapon::ULTIMATE_CANCEL:
Destroy();
break;
case CUltimateWeapon::ULTIMATE_INVENTORY:
g_WndMng.PutString( prj.GetText( TID_GAME_EXTRACTION_ERROR ), NULL, prj.GetTextColor( TID_GAME_EXTRACTION_ERROR ) );
break;
}
m_bIsSendChange = FALSE;
}
Xpro In Window:
With XPro (WndField.cpp):
With XPro (WndField.h):
With XPro (DPSrvr.cpp):
With XPro (UltimateWeapon.cpp):
With XPro (UltimateWeapon.h):
With XPro (DPClient.cpp):
With XPro (DPClient.h):
You need to add WIDC_STATIC4 to APP_SMELT_CHANGEWEAPON with Atools.
You also need to define: TID_TOOLTIP_XPROTECT
Code:
CWndChangeWeapon::CWndChangeWeapon(int nType)
{
m_pWItemElem = NULL;
m_pJItemElem[0] = NULL;
m_pJItemElem[1] = NULL;
m_pJItemElem[2] = NULL;
m_nWeaponType = nType;
m_bIsSendChange = FALSE;
}
CWndChangeWeapon::~CWndChangeWeapon()
{
}
void CWndChangeWeapon::OnDestroy()
{
if(m_pWItemElem != NULL)
{
if( !g_pPlayer->m_vtInfo.IsTrading( m_pWItemElem ) )
m_pWItemElem->SetExtra(0);
}
if(m_pJItemElem[0] != NULL)
{
if( !g_pPlayer->m_vtInfo.IsTrading( m_pJItemElem[0] ) )
m_pJItemElem[0]->SetExtra(0);
}
if(m_pJItemElem[1] != NULL)
{
if( !g_pPlayer->m_vtInfo.IsTrading( m_pJItemElem[1] ) )
m_pJItemElem[1]->SetExtra(0);
}
if(m_pJItemElem[2] != NULL)
{
if( !g_pPlayer->m_vtInfo.IsTrading( m_pJItemElem[2] ) )
m_pJItemElem[2]->SetExtra(0);
}
}
void CWndChangeWeapon::OnDraw( C2DRender* p2DRender )
{
ItemProp* pItemProp;
CTexture* pTexture;
if(m_pWItemElem != NULL)
{
pItemProp = m_pWItemElem->GetProp();
LPWNDCTRL wndCtrl = GetWndCtrl( WIDC_STATIC1 );
if(pItemProp != NULL)
{
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ITEM, pItemProp->szIcon), 0xffff00ff );
if(pTexture != NULL)
pTexture->Render( p2DRender, CPoint( wndCtrl->rect.left, wndCtrl->rect.top ) );
}
}
if(m_pJItemElem[0] != NULL)
{
pItemProp = m_pJItemElem[0]->GetProp();
LPWNDCTRL wndCtrl = GetWndCtrl( WIDC_STATIC2 );
if(pItemProp != NULL)
{
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ITEM, pItemProp->szIcon), 0xffff00ff );
if(pTexture != NULL)
pTexture->Render( p2DRender, CPoint( wndCtrl->rect.left, wndCtrl->rect.top ) );
}
}
if(m_pJItemElem[1] != NULL)
{
pItemProp = m_pJItemElem[1]->GetProp();
LPWNDCTRL wndCtrl = GetWndCtrl( WIDC_STATIC3 );
if(pItemProp != NULL)
{
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ITEM, pItemProp->szIcon), 0xffff00ff );
if(pTexture != NULL)
pTexture->Render( p2DRender, CPoint( wndCtrl->rect.left, wndCtrl->rect.top ) );
}
}
if(m_pJItemElem[2] != NULL)
{
pItemProp = m_pJItemElem[2]->GetProp();
LPWNDCTRL wndCtrl = GetWndCtrl( WIDC_STATIC4 );
if(pItemProp != NULL)
{
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ITEM, pItemProp->szIcon), 0xffff00ff );
if(pTexture != NULL)
pTexture->Render( p2DRender, CPoint( wndCtrl->rect.left, wndCtrl->rect.top ) );
}
}
}
void CWndChangeWeapon::OnInitialUpdate()
{
CWndNeuz::OnInitialUpdate();
CWndButton* pButton = (CWndButton*)GetDlgItem(WIDC_START);
if(::GetLanguage() == LANG_FRE)
pButton->SetTexture(g_Neuz.m_pd3dDevice, MakePath( "Theme\\", ::GetLanguage(), _T( "ButOk2.bmp" ) ), TRUE);
pButton->EnableWindow(FALSE);
m_pText1 = (CWndText*)GetDlgItem( WIDC_TEXT1 );
m_pText2 = (CWndText*)GetDlgItem( WIDC_TEXT2 );
SetDescription(NULL);
if(m_nWeaponType == WEAPON_GENERAL)
SetTitle(prj.GetText(TID_GAME_CHANGEWEAPON_UNIQUE));
else if(m_nWeaponType == WEAPON_UNIQUE)
SetTitle(prj.GetText(TID_GAME_CHANGEWEAPON_ULTIMATE));
MoveParentCenter();
}
BOOL CWndChangeWeapon::Initialize( CWndBase* pWndParent, DWORD /*dwWndId*/ )
{
return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), APP_SMELT_CHANGEWEAPON, 0, CPoint( 0, 0 ), pWndParent );
}
BOOL CWndChangeWeapon::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
{
return CWndNeuz::OnCommand( nID, dwMessage, pWndBase );
}
void CWndChangeWeapon::OnSize( UINT nType, int cx, int cy ) \
{
CWndNeuz::OnSize( nType, cx, cy );
}
void CWndChangeWeapon::OnLButtonUp( UINT nFlags, CPoint point )
{
}
void CWndChangeWeapon::OnLButtonDown( UINT nFlags, CPoint point )
{
}
void CWndChangeWeapon::OnLButtonDblClk( UINT nFlags, CPoint point )
{
CRect rect;
LPWNDCTRL wndCtrl = GetWndCtrl( WIDC_STATIC1 );
rect = wndCtrl->rect;
if( rect.PtInRect( point ) )
{
if(m_pWItemElem)m_pWItemElem->SetExtra(0);
m_pWItemElem = NULL;
}
wndCtrl = GetWndCtrl( WIDC_STATIC2 );
rect = wndCtrl->rect;
if( rect.PtInRect( point ) )
{
if(m_pJItemElem[0]) m_pJItemElem[0]->SetExtra(0);
m_pJItemElem[0] = NULL;
}
wndCtrl = GetWndCtrl( WIDC_STATIC3 );
rect = wndCtrl->rect;
if( rect.PtInRect( point ) )
{
if(m_pJItemElem[1])m_pJItemElem[1]->SetExtra(0);
m_pJItemElem[1] = NULL;
}
wndCtrl = GetWndCtrl( WIDC_STATIC4 );
rect = wndCtrl->rect;
if( rect.PtInRect( point ) )
{
if(m_pJItemElem[2])m_pJItemElem[1]->SetExtra(0);
m_pJItemElem[2] = NULL;
}
}
void CWndChangeWeapon::OnMouseWndSurface(CPoint point)
{
CRect rect1, rect2, rect3, rect4;
LPWNDCTRL wndCtrl = GetWndCtrl( WIDC_STATIC1 );
rect1 = wndCtrl->rect;
wndCtrl = GetWndCtrl( WIDC_STATIC2 );
rect2 = wndCtrl->rect;
wndCtrl = GetWndCtrl( WIDC_STATIC3 );
rect3 = wndCtrl->rect;
wndCtrl = GetWndCtrl( WIDC_STATIC4 );
rect4 = wndCtrl->rect;
if( rect1.PtInRect( point ) )
{
ClientToScreen( &point );
ClientToScreen( &rect1 );
CString tooltip;
if(m_nWeaponType == WEAPON_GENERAL)
tooltip.Format( "%s", prj.GetText( TID_TOOLTIP_CHANGEW_GENERAL ) );
else if(m_nWeaponType == WEAPON_UNIQUE)
tooltip.Format( "%s", prj.GetText( TID_TOOLTIP_CHANGEW_UNIQUE ) );
g_toolTip.PutToolTip( (DWORD)this, tooltip, rect1, point );
}
else if(rect2.PtInRect( point ))
{
ClientToScreen( &point );
ClientToScreen( &rect2 );
CString tooltip;
tooltip.Format( "%s", prj.GetText( TID_TOOLTIP_CHANGEW_ORICALCUM ) );
g_toolTip.PutToolTip( (DWORD)this, tooltip, rect2, point );
}
else if(rect3.PtInRect( point ))
{
ClientToScreen( &point );
ClientToScreen( &rect3 );
CString tooltip;
tooltip.Format( "%s", prj.GetText( TID_TOOLTIP_CHANGEW_JEWEL ) );
g_toolTip.PutToolTip( (DWORD)this, tooltip, rect3, point );
}
else if(rect4.PtInRect( point ))
{
ClientToScreen( &point );
ClientToScreen( &rect4 );
CString tooltip;
tooltip.Format( "%s", prj.GetText( TID_TOOLTIP_XPROTECT ) );
g_toolTip.PutToolTip( (DWORD)this, tooltip, rect4, point );
}
}
BOOL CWndChangeWeapon::OnDropIcon( LPSHORTCUT pShortcut, CPoint point )
{
//Set Weapon
CRect rect;
ItemProp* pItemProp;
CItemElem* pTempElem;
pTempElem = (CItemElem*)g_pPlayer->GetItemId( pShortcut->m_dwId );
LPWNDCTRL wndCtrl = GetWndCtrl( WIDC_STATIC1 );
rect = wndCtrl->rect;
if( rect.PtInRect( point ) )
{
if(pTempElem != NULL && m_pWItemElem == NULL)
{
pItemProp = pTempElem->GetProp();
if( pItemProp->dwItemKind1 == IK1_WEAPON && pItemProp->dwLimitLevel1 >= 60 ) //60·¹º§ Á¦ÇÑ ÀÌ»ó ¹«±â¸¸ Àû¿ë
{
if(m_nWeaponType == pItemProp->dwReferStat1) //â¿¡ µû¶ó À¯´ÏÅ©ÀÎÁö ÀϹÝÀÎÁö¸¦ È®ÀÎÇÑ´Ù.
{
if(m_nWeaponType == WEAPON_UNIQUE)
{
if(pTempElem->GetAbilityOption() >= 10) //À¯´ÏÅ© ¹«±âÀÇ °æ¿ì +10 ÀÌ»óÀÎÁö¸¦ È®ÀÎ ÇÑ´Ù.
{
m_pWItemElem = pTempElem;
m_pWItemElem->SetExtra(m_pWItemElem->GetExtra()+1);
}
}
else if(m_nWeaponType == WEAPON_GENERAL)
{
m_pWItemElem = pTempElem;
m_pWItemElem->SetExtra(m_pWItemElem->GetExtra()+1);
}
}
}
}
}
//Set Ligthing Oricalcum
wndCtrl = GetWndCtrl( WIDC_STATIC2 );
rect = wndCtrl->rect;
if( rect.PtInRect( point ) )
{
if(pTempElem && (pTempElem->m_dwItemId == II_GEN_MAT_ORICHALCUM02))
{
m_pJItemElem[0] = pTempElem;
m_pJItemElem[0]->SetExtra(m_pJItemElem[0]->GetExtra()+1);
}
}
//Set Jewel
wndCtrl = GetWndCtrl( WIDC_STATIC3 );
rect = wndCtrl->rect;
if( rect.PtInRect( point ) )
{
if((pTempElem != NULL && m_pWItemElem != NULL) &&
(pTempElem->m_dwItemId == prj.m_UltimateWeapon.GetGemKind(m_pWItemElem->GetProp()->dwLimitLevel1)))
{
m_pJItemElem[1] = pTempElem;
m_pJItemElem[1]->SetExtra(m_pJItemElem[1]->GetExtra()+1);
}
}
//Set XPro
wndCtrl = GetWndCtrl( WIDC_STATIC4 );
rect = wndCtrl->rect;
if( rect.PtInRect( point ) )
{
if(pTempElem && (pTempElem->m_dwItemId == II_SYS_SYS_SCR_SMELPROT3))
{
m_pJItemElem[2] = pTempElem;
m_pJItemElem[2]->SetExtra(m_pJItemElem[0]->GetExtra()+1);
}
}
return TRUE;
}
void CWndChangeWeapon::SetItem(CItemElem* pItemElem)
{
if(pItemElem != NULL)
{
ItemProp* pProp = pItemElem->GetProp();
if(m_pWItemElem == NULL && pProp->dwItemKind1 == IK1_WEAPON)
{
if(pProp->dwLimitLevel1 >= 60) //60·¹º§ Á¦ÇÑ ÀÌ»ó ¹«±â¸¸ Àû¿ë
{
if(m_nWeaponType == pProp->dwReferStat1) //â¿¡ µû¶ó À¯´ÏÅ©ÀÎÁö ÀϹÝÀÎÁö¸¦ È®ÀÎÇÑ´Ù.
{
if(m_nWeaponType == WEAPON_UNIQUE)
{
if(pItemElem->GetAbilityOption() >= 10) //À¯´ÏÅ© ¹«±âÀÇ °æ¿ì +10 ÀÌ»óÀÎÁö¸¦ È®ÀÎ ÇÑ´Ù.
{
m_pWItemElem = pItemElem;
m_pWItemElem->SetExtra(m_pWItemElem->GetExtra()+1);
}
}
else if(m_nWeaponType == WEAPON_GENERAL)
{
m_pWItemElem = pItemElem;
m_pWItemElem->SetExtra(m_pWItemElem->GetExtra()+1);
}
}
}
}
else if(m_pJItemElem[0] == NULL && pProp->dwID == II_GEN_MAT_ORICHALCUM02)
{
m_pJItemElem[0] = pItemElem;
m_pJItemElem[0]->SetExtra(m_pJItemElem[0]->GetExtra()+1);
}
else if( m_pJItemElem[1] == NULL )
{
if(m_pWItemElem != NULL)
{
if(pItemElem->m_dwItemId == prj.m_UltimateWeapon.GetGemKind(m_pWItemElem->GetProp()->dwLimitLevel1) )
{
m_pJItemElem[1] = pItemElem;
m_pJItemElem[1]->SetExtra(m_pJItemElem[1]->GetExtra()+1);
}
}
}
// XPro
else if(m_pJItemElem[2] == NULL && pProp->dwID == II_SYS_SYS_SCR_SMELPROT3)
{
m_pJItemElem[2] = pItemElem;
m_pJItemElem[2]->SetExtra(m_pJItemElem[0]->GetExtra()+1);
}
}
}
BOOL CWndChangeWeapon::Process()
{
if(!m_bIsSendChange && m_pWItemElem != NULL && m_pJItemElem[0] != NULL && m_pJItemElem[1] != NULL && m_pJItemElem[2] != NULL)
{
CWndButton* pButton = (CWndButton*)GetDlgItem(WIDC_START);
pButton->EnableWindow(TRUE);
}
else
{
CWndButton* pButton = (CWndButton*)GetDlgItem(WIDC_START);
pButton->EnableWindow(FALSE);
}
return TRUE;
}
BOOL CWndChangeWeapon::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult )
{
if( nID == WIDC_START )
{
if(!m_bIsSendChange && m_pWItemElem != NULL && m_pJItemElem[0] != NULL && m_pJItemElem[1] != NULL && m_pJItemElem[2] != NULL)
{
CWndButton* pButton = (CWndButton*)GetDlgItem(WIDC_START);
m_bIsSendChange = TRUE;
g_DPlay.SendUltimateTransWeapon(m_pWItemElem->m_dwObjId, m_pJItemElem[2]->m_dwObjId, m_pJItemElem[1]->m_dwObjId, m_pJItemElem[0]->m_dwObjId);
}
}
return CWndNeuz::OnChildNotify( message, nID, pLResult );
}
void CWndChangeWeapon::SetDescription( CHAR* szChar )
{
CScript scanner1, scanner2;
BOOL checkflag;
CHAR* szInfo;
if(m_nWeaponType == WEAPON_GENERAL)
{
checkflag = scanner1.Load( MakePath( DIR_CLIENT, _T( "SmeltChangeUniqueWeapon.inc" ) ));
checkflag = scanner2.Load( MakePath( DIR_CLIENT, _T( "ChangeUniqueWeaponInfo.inc" ) ));
}
else if(m_nWeaponType == WEAPON_UNIQUE)
{
checkflag = scanner1.Load( MakePath( DIR_CLIENT, _T( "SmeltChangeUltimateWeapon.inc" ) ));
checkflag = scanner2.Load( MakePath( DIR_CLIENT, _T( "ChangeUltimateWeaponInfo.inc" ) ));
}
szChar = scanner1.m_pProg;
szInfo = scanner2.m_pProg;
if(m_pText1 != NULL && checkflag)
{
m_pText1->m_string.AddParsingString( szChar );
m_pText1->ResetString();
}
if(m_pText2 != NULL && checkflag)
{
m_pText2->m_string.AddParsingString( szInfo );
m_pText2->ResetString();
}
}
void CWndChangeWeapon::ReceiveResult(int result)
{
switch(result)
{
case CUltimateWeapon::ULTIMATE_SUCCESS:
if(m_nWeaponType == WEAPON_UNIQUE)
g_WndMng.PutString( prj.GetText( TID_GAME_CUWEAPON_SUCCESS ), NULL, prj.GetTextColor( TID_GAME_CUWEAPON_SUCCESS ) );
else if(m_nWeaponType == WEAPON_GENERAL)
g_WndMng.PutString( prj.GetText( TID_GAME_CGWEAPON_SUCCESS ), NULL, prj.GetTextColor( TID_GAME_CGWEAPON_SUCCESS ) );
break;
case CUltimateWeapon::ULTIMATE_FAILED:
if(m_nWeaponType == WEAPON_UNIQUE)
g_WndMng.PutString( prj.GetText( TID_GAME_CUWEAPON_FAILED ), NULL, prj.GetTextColor( TID_GAME_CUWEAPON_FAILED ) );
else if(m_nWeaponType == WEAPON_GENERAL)
g_WndMng.PutString( prj.GetText( TID_GAME_CGWEAPON_FAILED ), NULL, prj.GetTextColor( TID_GAME_CGWEAPON_FAILED ) );
break;
case CUltimateWeapon::ULTIMATE_CANCEL:
Destroy();
break;
case CUltimateWeapon::ULTIMATE_INVENTORY:
g_WndMng.PutString( prj.GetText( TID_GAME_EXTRACTION_ERROR ), NULL, prj.GetTextColor( TID_GAME_EXTRACTION_ERROR ) );
break;
}
m_bIsSendChange = FALSE;
}
Code:
class CWndChangeWeapon : public CWndNeuz
{
public:
CWndText* m_pText1;
CWndText* m_pText2;
CItemElem* m_pWItemElem;
CItemElem* m_pJItemElem[3];
int m_nWeaponType;
BOOL m_bIsSendChange;
public:
CWndChangeWeapon(int nType);
virtual ~CWndChangeWeapon();
virtual void OnDestroy();
virtual BOOL Initialize( CWndBase* pWndParent = NULL, DWORD nType = MB_OK );
virtual BOOL OnChildNotify( UINT message, UINT nID, LRESULT* pLResult );
virtual void OnDraw( C2DRender* p2DRender );
virtual void OnInitialUpdate();
virtual BOOL OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase );
virtual void OnSize( UINT nType, int cx, int cy );
virtual void OnLButtonUp( UINT nFlags, CPoint point );
virtual void OnLButtonDown( UINT nFlags, CPoint point );
virtual void OnLButtonDblClk( UINT nFlags, CPoint point );
virtual void OnMouseWndSurface( CPoint point );
virtual BOOL OnDropIcon( LPSHORTCUT pShortcut, CPoint point );
virtual BOOL Process ();
void SetDescription(CHAR* szChar);
void ReceiveResult(int result);
void SetItem(CItemElem* pItemElem);
};
Code:
void CDPSrvr::OnUltimateTransWeapon( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
{
CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
if( IsValidObj( pUser ) == FALSE )
return;
OBJID objItemWeapon;
OBJID objItemGem1;
OBJID objItemGem2;
OBJID objItemGem3;
ar >> objItemWeapon;
ar >> objItemGem1;
ar >> objItemGem2;
ar >> objItemGem3;
int nResult = prj.m_UltimateWeapon.TransWeapon( pUser, objItemWeapon, objItemGem1, objItemGem2, objItemGem3 );
pUser->AddUltimateWeapon( ULTIMATE_TRANSWEAPON, nResult );
}
Code:
int CUltimateWeapon::TransWeapon(CUser* pUser, OBJID objItem, OBJID objGem1, OBJID objGem2, OBJID objGem3)
{
CItemElem* pItemElemWeapon = pUser->m_Inventory.GetAtId(objItem);
CItemElem* pItemElemGem1 = pUser->m_Inventory.GetAtId(objGem1);
CItemElem* pItemElemGem2 = pUser->m_Inventory.GetAtId(objGem2);
if (IsUsableItem(pItemElemWeapon) == FALSE || IsUsableItem(pItemElemGem1) == FALSE || IsUsableItem(pItemElemGem2) == FALSE)
return ULTIMATE_CANCEL;
if (pUser->m_Inventory.IsEquip(objItem))
{
pUser->AddDefinedText(TID_GAME_ULTIMATE_ISEQUIP, "");
return ULTIMATE_CANCEL;
}
if (pItemElemWeapon->GetProp()->dwItemKind1 != IK1_WEAPON)
return ULTIMATE_CANCEL;
if (pItemElemWeapon->GetProp()->dwReferTarget1 == NULL_ID)
return ULTIMATE_CANCEL;
if (pItemElemWeapon->GetProp()->dwReferStat1 != WEAPON_GENERAL && pItemElemWeapon->GetProp()->dwReferStat1 != WEAPON_UNIQUE)
return ULTIMATE_CANCEL;
DWORD dwItemId = GetGemKind(pItemElemWeapon->GetProp()->dwLimitLevel1);
if (dwItemId != pItemElemGem1->m_dwItemId || pItemElemGem2->m_dwItemId != II_GEN_MAT_ORICHALCUM02)
return ULTIMATE_CANCEL;
CString strTemp = "UNIQUE_";
CString strLog;
int nProb = m_nGen2UniProb;
if (pItemElemWeapon->GetProp()->dwReferStat1 == WEAPON_UNIQUE)
{
if (pItemElemWeapon->GetAbilityOption() != 10)
return ULTIMATE_CANCEL;
nProb = m_nUni2UltiProb;
strTemp = "ULTIMATE_";
}
if (pItemElemWeapon->GetProp()->dwReferTarget2 != NULL_ID)
nProb = pItemElemWeapon->GetProp()->dwReferTarget2;
bool bSmelprot3 = false;
if (pUser->HasBuff(BUFF_ITEM, II_SYS_SYS_SCR_SMELPROT3) && pItemElemWeapon->GetProp()->dwReferStat1 == WEAPON_UNIQUE)
{
bSmelprot3 = true;
pUser->RemoveBuff(BUFF_ITEM, II_SYS_SYS_SCR_SMELPROT3);
ItemProp* pItemProp = prj.GetItemProp(II_SYS_SYS_SCR_SMELPROT3);
if (pItemProp) g_dpDBClient.SendLogSMItemUse("2", pUser, NULL, pItemProp);
}
if (!bSmelprot3)
{
CItemElem* scroll = pUser->m_Inventory.GetAtId(objGem3);
if (scroll != nullptr)
{
if (scroll->m_dwItemId == II_SYS_SYS_SCR_SMELPROT3)
{
pUser->RemoveItem(static_cast<unsigned char>(objGem3), 1);
bSmelprot3 = true;
}
}
}
#ifdef __UPGRADE_SUCCESS_SCROLL
if (pUser->HasBuffByIk3(IK3_ULTIMATE_UPGRADE_RATE))
{
IBuff* pBuff = pUser->m_buffs.GetBuffByIk3(IK3_ULTIMATE_UPGRADE_RATE);
if (pBuff != NULL)
{
ItemProp *pItemProp = pBuff->getiProp();
if (pItemProp)
{
if (pItemElemWeapon->GetAbilityOption() >= pItemProp->nTargetMinEnchant && pItemElemWeapon->GetAbilityOption() <= pItemProp->nTargetMaxEnchant)
{
nProb += ((WORD)pItemProp->nEffectValue * 100);
pUser->RemoveBuff(BUFF_ITEM, (WORD)pItemProp->dwID);
g_dpDBClient.SendLogSMItemUse("2", pUser, NULL, pItemProp);
}
}
}
}
#endif
LogItemInfo aLogItem;
aLogItem.Action = "-";
aLogItem.SendName = pUser->GetName();
strLog = strTemp + "TRANS";
aLogItem.RecvName = (LPCTSTR)strLog;
aLogItem.WorldId = pUser->GetWorld()->GetID();
aLogItem.Gold = aLogItem.Gold2 = pUser->GetGold();
g_DPSrvr.OnLogItem(aLogItem, pItemElemGem1, 1);
pUser->RemoveItem((BYTE)(objGem1), 1);
g_DPSrvr.OnLogItem(aLogItem, pItemElemGem2, 1);
pUser->RemoveItem((BYTE)(objGem2), 1);
int nRandom = xRandom(1000000);
if (nRandom < nProb)
{
CItemElem CreateItem;
CreateItem = *pItemElemWeapon;
CreateItem.m_dwItemId = pItemElemWeapon->GetProp()->dwReferTarget1;
CreateItem.SetSerialNumber();
if (pItemElemWeapon->GetProp()->dwReferStat1 == WEAPON_UNIQUE)
CreateItem.SetAbilityOption(0);
g_DPSrvr.OnLogItem(aLogItem, pItemElemWeapon, 1);
pUser->RemoveItem((BYTE)(objItem), 1);
if (pUser->CreateItem(&CreateItem))
{
strLog = strTemp + "TRANS_SUCCESS";
aLogItem.RecvName = (LPCTSTR)strLog;
g_DPSrvr.OnLogItem(aLogItem, &CreateItem, 1);
return ULTIMATE_SUCCESS;
}
}
else
{
if (!bSmelprot3)
{
strLog = strTemp + "TRANS_FAILED";
aLogItem.RecvName = (LPCTSTR)strLog;
g_DPSrvr.OnLogItem(aLogItem, pItemElemWeapon, 1);
pUser->RemoveItem((BYTE)(objItem), 1);
}
else
{
strLog = strTemp + "TRANS_PROTECT";
aLogItem.RecvName = (LPCTSTR)strLog;
g_DPSrvr.OnLogItem(aLogItem, pItemElemWeapon);
}
}
return ULTIMATE_FAILED;
}
Code:
int TransWeapon( CUser* pUser, OBJID objItem, OBJID objGem1, OBJID objGem2, OBJID objGem3 );
Code:
void CDPClient::SendUltimateTransWeapon( OBJID objItemWeapon, OBJID objItemGem1, OBJID objItemGem2, OBJID objItemGem3 )
{
BEFORESENDSOLE( ar, PACKETTYPE_ULTIMATE_TRANSWEAPON, DPID_UNKNOWN );
ar << objItemWeapon;
ar << objItemGem1;
ar << objItemGem2;
ar << objItemGem3;
SEND( ar, this, DPID_SERVERPLAYER );
}
Code:
void SendUltimateTransWeapon( OBJID objItemWeapon, OBJID objItemGem1, OBJID objItemGem2, OBJID objItemGem3 );
You also need to define: TID_TOOLTIP_XPROTECT
Imagine you could've spend 50 - 80 EURO on such epic code from such an pro dev.
This code is in no way bought or purchased, this is a mere 2 - 3 minute job.
#CantWaitForTheHate #feelsbadman






