Hello :)
Happy new year
i found this on my computer so im gona share it :D
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
Have fun and if it helped you
press thanks :D
Happy new year
i found this on my computer so im gona share it :D
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 :D