Happy new year
i found this on my computer so im gona share it
it works 100% (this one is the same used in flyforglory)
this code will make you the crossbow to work like on an official server
Code:
IN DPClient.cpp
---------------------------------
Replace
-----------
if( pItemBase->GetProp()->dwParts == PARTS_RWEAPON )
{
CItemElem* pItemElemWepon = g_pPlayer->m_Inventory.GetEquip( PARTS_RWEAPON );
if( pItemElemWepon && pItemElemWepon->GetProp()->dwItemKind3 == IK3_BOW )
{
if( pItemBase->GetProp()->dwItemKind3 != IK3_BOW ) // ÀåÂøµÇ¾îÀִ°ÍÀÌ º¸¿ì¸é ¾È¹þ°ÜµÎ µÊ
{
CItemElem* pItemElemBullet = g_pPlayer->m_Inventory.GetEquip( PARTS_BULLET );
if( pItemElemBullet && pItemElemBullet->GetProp()->dwItemKind3 == IK3_ARROW )
{
BEFORESENDSOLE( ar, PACKETTYPE_DOUSEITEM, DPID_UNKNOWN );
ar << MAKELONG( ITYPE_ITEM, pItemElemBullet->m_dwObjId );
ar << pItemElemBullet->m_dwObjId;
ar << PARTS_BULLET;
SEND( ar, this, DPID_SERVERPLAYER );
}
}
}
}
-----------------------
with:
-----------------------
if( pItemElem->GetProp()->dwParts == PARTS_RWEAPON )
{
CItemElem* pItemElemWepon = g_pPlayer->m_Inventory.GetEquip( PARTS_RWEAPON );
if( pItemElemWepon && ( pItemElemWepon->GetProp()->dwItemKind3 == IK3_BOW || pItemElemWepon->GetProp()->dwItemKind3 == IK3_CROSSBOW ) ) // ÀåÂøµÇ¾îÀִ°ÍÀÌ È°À̸é
{
if( pItemElem->GetProp()->dwItemKind3 != IK3_BOW || pItemElem->GetProp()->dwItemKind3 != IK3_CROSSBOW ) // ÀåÂøµÇ¾îÀִ°ÍÀÌ º¸¿ì¸é ¾È¹þ°ÜµÎ µÊ
{
CItemElem* pItemElemBullet = g_pPlayer->m_Inventory.GetEquip( PARTS_BULLET );
if( pItemElemBullet && pItemElemBullet->GetProp()->dwItemKind3 == IK3_ARROW )
{
BEFORESENDSOLE( ar, PACKETTYPE_DOEQUIP, DPID_UNKNOWN );
ar << pItemElemBullet->m_dwObjId;
ar << PARTS_BULLET;
SEND( ar, this, DPID_SERVERPLAYER );
}
}
}
}
------------------
WndWorld.cpp
--------------------
replace:
--------------------
if( pItemProp->dwItemKind3 == IK3_BOW )
g_pPlayer->CMD_SetRangeAttack( idTarget, nPower );
------------------
with:
------------------
if( pItemProp->dwItemKind3 == IK3_BOW || pItemProp->dwItemKind3 == IK3_CROSSBOW )
g_pPlayer->CMD_SetRangeAttack( idTarget, nPower );
-----------------
replace:
------------------
if( pItemElem && (pItemElem->GetProp()->dwItemKind3 == IK3_BOW ) )
{
if( !m_bLButtonDown )
g_pPlayer->CMD_SetRangeAttack( pFocusObj->GetId(), 0 ); // ¿ø°Å¸®°ø°Ý ÆÐÅÏ¿¡ µé¾î°¨
}
------------------
with:
------------------
if( pItemElem && (pItemElem->GetProp()->dwItemKind3 == IK3_BOW || pItemElem->GetProp()->dwItemKind3 == IK3_CROSSBOW) )
{
if( !m_bLButtonDown )
g_pPlayer->CMD_SetRangeAttack( pFocusObj->GetId(), 0 ); // ¿ø°Å¸®°ø°Ý ÆÐÅÏ¿¡ µé¾î°¨
}
-------------------
after
-------------------
case IK3_BOW:
m_dwPowerTick = ::GetTickCount() + POWER_ATK_DELAY;
g_pPlayer->CMD_SetRangeAttack( idTarget, nPower );
break;
--------------------
add
--------------------
case IK3_CROSSBOW:
m_dwPowerTick = ::GetTickCount() + POWER_ATK_DELAY;
g_pPlayer->CMD_SetRangeAttack( idTarget, nPower );
break;
---------------------
after
---------------------
if( pItemElem && pItemElem->GetProp()->dwItemKind3 == IK3_BOW )
{
// ±×¸®°í ¿ÞÂÊ ¹öưÀ» ´©¸£°í Æ÷Ä¿½º°¡ ÀÖ¾î¾ßÇÑ´Ù. ±×·¡¾ß ¸¶¹ý ŸÀÌ¹Ö ÀÛµ¿Çϴϱî.
if( pFocus && pFocus->GetType() == OT_MOVER && g_pPlayer->IsLive() )
{
bRenderGauge = TRUE;
if( m_bLButtonDown && m_bSelectTarget )
{
if( nPower >= MAX_CHARGE_LEVEL ) // ¸Æ½ºÄ¡°¡ µÇ¸é ÀÚµ¿À¸·Î ¹ß»çµÊ.
dwShootItemKind = IK3_BOW;
}
}
}
-----------------------
add
------------------------
if( pItemElem && pItemElem->GetProp()->dwItemKind3 == IK3_CROSSBOW )
{
// ±×¸®°í ¿ÞÂÊ ¹öưÀ» ´©¸£°í Æ÷Ä¿½º°¡ ÀÖ¾î¾ßÇÑ´Ù. ±×·¡¾ß ¸¶¹ý ŸÀÌ¹Ö ÀÛµ¿Çϴϱî.
if( pFocus && pFocus->GetType() == OT_MOVER && g_pPlayer->IsLive() )
{
bRenderGauge = TRUE;
if( m_bLButtonDown && m_bSelectTarget )
{
if( nPower >= MAX_CHARGE_LEVEL ) // ¸Æ½ºÄ¡°¡ µÇ¸é ÀÚµ¿À¸·Î ¹ß»çµÊ.
dwShootItemKind = IK3_CROSSBOW;
}
}
}
---------------------------
WndField.cpp
----------------------------
replace
----------------------------
else if(m_pItemElem->GetProp()->dwItemKind3 == IK3_YOYO ||
m_pItemElem->GetProp()->dwItemKind3 == IK3_KNUCKLEHAMMER ||
m_pItemElem->GetProp()->dwItemKind3 == IK3_BOW)
----------------------------
with
---------------------------
else if(m_pItemElem->GetProp()->dwItemKind3 == IK3_YOYO ||
m_pItemElem->GetProp()->dwItemKind3 == IK3_KNUCKLEHAMMER ||
m_pItemElem->GetProp()->dwItemKind3 == IK3_BOW ||
m_pItemElem->GetProp()->dwItemKind3 == IK3_CROSSBOW)
------------------------------
Project.cpp
-----------------------------
After
----------------------------
switch( dwItemKind3 )
{
case IK3_SWD:
case IK3_CHEERSTICK:
case IK3_WAND:
case IK3_AXE:
case IK3_KNUCKLEHAMMER:
case IK3_STAFF:
case IK3_YOYO:
case IK3_BOW:
----------------------------
add
----------------------------
case IK3_CROSSBOW:
-----------------------------
Moverskill.cpp
-----------------------------
replace
----------------------------
case IK3_YOBO:
if( dwItemKind3 != IK3_YOYO && dwItemKind3 != IK3_BOW )
{
if( IsPlayer() )
( (CUser*)this )->AddDefinedText( TID_GAME_WRONGITEM, "" );
return FALSE;
}
break;
-----------------------------
with
-----------------------------
case IK3_YOBO:
if( dwItemKind3 != IK3_YOYO && dwItemKind3 != IK3_BOW && dwItemKind3 != IK3_CROSSBOW )
{
if( IsPlayer() )
( (CUser*)this )->AddDefinedText( TID_GAME_WRONGITEM, "" );
return FALSE;
}
break;
-------------------------
MoverMsg.cpp
-------------------
replace
--------------------
if( pItemProp->dwItemKind3 != IK3_BOW ) // µé°íÀÖ´Â ¹«±â°¡ º¸¿ì°¡ ¾Æ´Ï¸é ¿¡·¯
return;
--------------------
with
-------------------
if( pItemProp->dwItemKind3 != IK3_BOW && pItemProp->dwItemKind3 != IK3_CROSSBOW ) // µé°íÀÖ´Â ¹«±â°¡ º¸¿ì°¡ ¾Æ´Ï¸é ¿¡·¯
return;
--------------------
MoverEquip.cpp
---------------------
replace
-----------------------
// È*»ìÀ» Âø¿ëÇÏ·Á ÇßÀ»¶§ º¸¿ìÀ϶§¸¸ Âø¿ëµÅ¾ß ÇÔ
if( pItemProp->dwItemKind3 == IK3_ARROW && ( pHandItemProp == NULL || pHandItemProp->dwItemKind3 != IK3_BOW ) )
return FALSE;
---------------------
with
----------------
// È*»ìÀ» Âø¿ëÇÏ·Á ÇßÀ»¶§ º¸¿ìÀ϶§¸¸ Âø¿ëµÅ¾ß ÇÔ
if( pItemProp->dwItemKind3 == IK3_ARROW && ( pHandItemProp == NULL || ( pHandItemProp->dwItemKind3 != IK3_BOW && pHandItemProp->dwItemKind3 != IK3_CROSSBOW )) )
return FALSE;
-------------------
after
-----------------
case IK3_BOW:
((CModelObject*)pModel)->SetParent( PARTS_RWEAPON, ((CModelObject*)pModel)->GetLHandIdx() );
break;
----------------
add
---------------
case IK3_CROSSBOW:
((CModelObject*)pModel)->SetParent( PARTS_RWEAPON, ((CModelObject*)pModel)->GetRHandIdx() );
break;
---------------
after
----------------
case IK3_BOW:
((CModelObject*)pModel)->SetParent( PARTS_RWEAPON, ((CModelObject*)pModel)->GetLHandIdx() );
break;
--------------
add
----------------
case IK3_CROSSBOW:
((CModelObject*)pModel)->SetParent( PARTS_RWEAPON, ((CModelObject*)pModel)->GetRHandIdx() );
break;
--------------
Mover.cpp
--------------
replace
---------------
if( pItemProp->dwItemKind3 == IK3_BOW || pItemProp->dwLinkKind == IK3_BOW )
{
dwTip = TID_TIP_NEEDSATTACKITEM;
}
--------------
with
---------------
if( pItemProp->dwItemKind3 == IK3_BOW || pItemProp->dwLinkKind == IK3_BOW || pItemProp->dwItemKind3 == IK3_CROSSBOW || pItemProp->dwLinkKind == IK3_CROSSBOW )
{
dwTip = TID_TIP_NEEDSATTACKITEM;
}
------------------
after
----------------
case IK3_BOW:
if( !bMasterPlayer ) dwMotion += MTI_STAND_13;
else dwMotion += 200;
break;
------------------
add
-------------------
case IK3_CROSSBOW:
if( !bMasterPlayer ) dwMotion += MTI_STAND_15;
else dwMotion += 200;
break;
--------------------
Ctrl.cpp
---------------------
Replace
--------------------
if( pSkillProp->dwLinkKind == IK3_BOW )
{
CModelObject *pModel = (CModelObject *)m_pModel;
pModel->GetHandPos( &vPos, PARTS_LWEAPON, GetMatrixWorld() ); // ÁÖ¸Ô ¿ùµåÁÂÇ¥ ±¸ÇÔ
vPos.y -= 1.0f;
}
------------------
with
------------------
if( pSkillProp->dwLinkKind == IK3_BOW || pSkillProp->dwLinkKind == IK3_CROSSBOW )
{
CModelObject *pModel = (CModelObject *)m_pModel;
pModel->GetHandPos( &vPos, PARTS_LWEAPON, GetMatrixWorld() ); // ÁÖ¸Ô ¿ùµåÁÂÇ¥ ±¸ÇÔ
vPos.y -= 1.0f;
}
---------------------
ActionMovermsg.cpp
-------------------------
replace
---------------------------
CItemElem* pItemElem = pMover->GetWeaponItem();
if( pItemElem && (pItemElem->GetProp()->dwItemKind3 == IK3_WAND || pItemElem->GetProp()->dwItemKind3 == IK3_BOW ) )
return -2;
------------------------------
with
-----------------------------
CItemElem* pItemElem = pMover->GetWeaponItem();
if( pItemElem && (pItemElem->GetProp()->dwItemKind3 == IK3_WAND || pItemElem->GetProp()->dwItemKind3 == IK3_BOW || pItemElem->GetProp()->dwItemKind3 == IK3_MAGICBARUNA || pItemElem->GetProp()->dwItemKind3 == IK3_CROSSBOW ) )
return -2;
press thanks






