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