When I drew a beam for one of my weapons I used the following: pBeam->PointEntInit( endPos, this ); pBeam->SetEndAttachment( 1 ); pBeam->SetWidth( width / 4.0f ); pBeam->SetEndWidth( width );
However this was serverside code, But I did then have it also spark on the muzzle, so I did: CBaseViewModel *pViewModel = pOwner->GetViewModel(); pViewModel->GetAttachment(LookupAttachment("muzzle"),origin,angles); g_pEffects->Sparks(origin); Below is the entire drawBeam function I used: CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); CBaseViewModel *pViewModel = pOwner->GetViewModel(); if ( pOwner == NULL ) return; //Check to store off our view model index if ( pViewModel == NULL ) { CBaseViewModel *vm = pOwner->GetViewModel(); if ( vm ) { m_hViewModel.Set( vm ); } } #ifndef CLIENT_DLL //Draw a tracer down the middle UTIL_Tracer( startPos, endPos, 0, TRACER_DONT_USE_ATTACHMENT, 6500, true, "GaussTracer" ); //Draw the main beam shaft CBeam *pBeam = CBeam::BeamCreate( GAUSS_BEAM_SPRITE, width ); if ( useMuzzle ) { pBeam->PointEntInit( endPos, this ); pBeam->SetEndAttachment( 1 ); pBeam->SetWidth( width / 4.0f ); pBeam->SetEndWidth( width ); } else { pBeam->SetStartPos( startPos ); pBeam->SetEndPos( endPos ); pBeam->SetWidth( width ); pBeam->SetEndWidth( width / 4.0f ); } pBeam->SetBrightness( 255 ); pBeam->SetColor( 255, 145+random->RandomInt( -16, 16 ), 0 ); pBeam->RelinkBeam(); pBeam->LiveForTime( 5.1f ); On Thu, Aug 18, 2011 at 11:11 PM, Ryan Sheffer <darksk...@gmail.com> wrote: > Hey coders! > > I came across a nasty little issue and I thought maybe somebody has come > across this before. > I am trying to create a client side beam from the muzzle of the players > view model to where the bullet impacts, but I cannot get the attachment > position for the muzzle on the view model. > > Here is the code I am using for getting the attachment: > > int attachment = pEntity->LookupAttachment( "muzzle" ); > pEntity->GetAttachment( attachment, vecAttachment, angAttachment ); > > pEntity is the view model. > This is the same way I saw it done on the physcannons client side code. > The position it gets appears to be somewhere close to the origin of the map > but the coordinates are not exactly 0, 0, 0. One way to fix the position is > to give myself a weapon_physcannon and then when I switch back to my gun the > attachment position is where it should be, from the muzzle. I don't see > anything special in the weapon_physcannon's code so I am baffled. > > Some things to note: > - This is a client side entity, client side code > - The attachment on the model looks fine in the model viewer > > So any help would be wonderful, I am just digging away at the debugging > trying to find the issue but nothing sticks out, only the fact that having a > physcannon at the same time fixes the problem. > > Here is the full code for the beam just in case: > > void C_WeaponSonicRifle::CreateShotBeam(void) > { > CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); > > if ( pOwner == NULL ) > return; > > BeamInfo_t beamInfo; > C_BaseAnimating *pEntity = NULL; > trace_t tr; > > Vector vecAttachment, vecCrosshair, vecDir; > QAngle angAttachment; > > if ( IsCarriedByLocalPlayer() && !::input->CAM_IsThirdPerson() ) > { > pEntity = pOwner->GetViewModel(); > vecDir = pOwner->GetAutoaimVector(AUTOAIM_5DEGREES); > } > else > { > pEntity = this; > vecDir = pOwner->GetAutoaimVector(AUTOAIM_5DEGREES); > } > > pEntity->PushAllowBoneAccess( true, true, "sonic rifle" ); > > int attachment = pEntity->LookupAttachment( "muzzle" ); > pEntity->GetAttachment( attachment, vecAttachment, angAttachment ); > > pEntity->PopBoneAccess( "sonic rifle" ); > > vecCrosshair = pOwner->Weapon_ShootPosition(); > UTIL_TraceLine(vecCrosshair, vecCrosshair + (vecDir * > MAX_TRACE_LENGTH), MASK_SONICBEAMS, pOwner, COLLISION_GROUP_NONE, &tr); > > beamInfo.m_pStartEnt = NULL; > beamInfo.m_pEndEnt = NULL; > > //beamInfo.m_nType = TE_BEAMPOINTS; > beamInfo.m_vecStart = tr.endpos; > beamInfo.m_vecEnd = vecAttachment; > > beamInfo.m_nStartAttachment = NULL; > beamInfo.m_nEndAttachment = NULL; > > beamInfo.m_pszModelName = "sprites/laserbeam.vmt"; > beamInfo.m_flHaloScale = 0.0f; > beamInfo.m_flLife = 2.5f; > > beamInfo.m_flWidth = 3.0f; > beamInfo.m_flEndWidth = 3.0f; > > beamInfo.m_flFadeLength = 0.0f; > beamInfo.m_flAmplitude = 0; > > beamInfo.m_flBrightness = 255.0; > > beamInfo.m_flSpeed = 1.0f; > beamInfo.m_nStartFrame = 0.0; > beamInfo.m_flFrameRate = 30.0; > > beamInfo.m_flRed = 255; > beamInfo.m_flGreen = 255; > beamInfo.m_flBlue = 255; > > beamInfo.m_nSegments = 4; > beamInfo.m_bRenderable = true; > beamInfo.m_nFlags = (FBEAM_SHADEIN | FBEAM_SHADEOUT | FBEAM_FADEOUT); > > beams->CreateBeamPoints( beamInfo ); > } > > Thanks guys :) > > -- > ~Ryan ( skidz ) > > _______________________________________________ > To unsubscribe, edit your list preferences, or view the list archives, > please visit: > http://list.valvesoftware.com/mailman/listinfo/hlcoders > > >
_______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: http://list.valvesoftware.com/mailman/listinfo/hlcoders