Hi Jed,
Thanks for the detailed reply, Im sure this will help us to make items show on the player. Ill let you know the results once Im done implementing and the models are properly set up. May take a few days though as theres first some work to do on my dev system. Jan Von: hlcoders-boun...@list.valvesoftware.com [mailto:hlcoders-boun...@list.valvesoftware.com] Im Auftrag von Jed Gesendet: Freitag, 7. Dezember 2012 19:08 An: Discussion of Half-Life Programming Betreff: Re: [hlcoders] Show a model on the player Jan, I wrote code to attach models to the play as part of the Ham and Jam mod. We use it to put random helmet models on the players as a means of trying to not make them all look the same. I use bone merging as the general method rather than attachments but it seems to work fine for me. I'm afraid I haven't opened Visual Studio for over a year but the basics are thus. Set-up your player models and create the bones where you want your models to be attached. You need to then define them as used for bone merging with the $bonemerge directive in your QC file. In the models you want to attach to the player, you need to have a bone in the model with the same name as the bone you will attach to. The general technique I used is to place the actual prop model on the player model so it's how you want it to appear on the player model and then create a new bone in the same position and orientation and the bone I will attach too, call it something different and weight the attachment model to the new bone. I then move the new bone and the model down so that it's origin is 0,0,0 and export the SMD. In the QC file I use $renamebone to rename the extra bone to the same as the bone it will attach to. So, at this point you should have a player model with named and defined attachment bones and models you will attach to it with named bones that match the attachment points. Codewise what I did was this. I created a new client and server sidee class called C_PlayerHelmet baed on on C_PhysicsProp: class C_PlayerHelmet: public C_PhysicsProp { typedef C_PhysicsProp BaseClass; public: DECLARE_CLIENTCLASS(); C_PlayerHelmet(); ~C_PlayerHelmet(); virtual bool ShouldDraw( void ); }; It's only function, ShouldDraw, basically just does checks to see if it should draw the helmet, based on if we're the local player or not and such. bool C_PlayerHelmet::ShouldDraw( void ) { // TODO: This needs some refinement... // if we don't have an owner entity... if ( !GetOwnerEntity() ) return BaseClass::ShouldDraw(); if( GetOwnerEntity() == C_HajPlayer::GetLocalHajPlayer() ) return input->CAM_IsThirdPerson(); } On the server side I have the same class with basically a Spawn function which calls PreCache and then BaseClass::Spawn(); That's it - that just the entity to handle the helmet model for the player. As for actually getting it onto the player model. Well I have a whole bunch of player class functions to handle that but basically in my player model class I create an instance for the helmet as: CHandle<CBaseEntity> m_hHelmetEnt When I actually want to attach a helmet to the player: // create the helmet entity if ( !m_hHelmetEnt ) { m_hHelmetEnt = (CBaseEntity*)CreateEntityByName( "player_helmet" ); // failure! if ( !m_hHelmetEnt ) { DevMsg(1, "Could not create player helmet entity!"); m_bHasHelmet = false; return; } // get the helmet index unsigned int n = ChooseHelmet(); if ( n > HELMET_NONE ) { m_hHelmetEnt->SetOwnerEntity( this ); m_hHelmetEnt->SetModel( g_pszHelmetModels[n] ); // must spawn before attaching. m_hHelmetEnt->Spawn(); m_hHelmetEnt->FollowEntity( this, true ); m_hHelmetEnt->AddEffects( EF_BONEMERGE_FASTCULL ); m_hHelmetEnt->AddEffects( EF_PARENT_ANIMATES ); m_hHelmetEnt->RemoveEFlags( EFL_USE_PARTITION_WHEN_NOT_SOLID ); SetHelmet( n ); m_bHasHelmet = true; } } To take the helmet off: if ( m_hHelmetEnt ) { UTIL_RemoveImmediate( m_hHelmetEnt ); m_hHelmetEnt = NULL; } That's pretty much the basics. What it does is short is create the attachment model as it's own entity and have it bonemerge and follow the player around. I had a bunch of other stuff which handles the helmet getting shot or blown off and just spawning it into the world as a non solid gib that vanishes after a while. // Jed On 30 November 2012 18:32, Jan Hartung <jan.hart...@gmx.de> wrote: Thanks Nick, the page you linked to might help. I'll check it in detail later. Jan -----Ursprüngliche Nachricht----- Von: hlcoders-boun...@list.valvesoftware.com [mailto:hlcoders-boun...@list.valvesoftware.com] Im Auftrag von Nick Gesendet: Freitag, 30. November 2012 17:50 An: Discussion of Half-Life Programming Betreff: Re: [hlcoders] Show a model on the player i am not sure... but someone did a mod where weapons were added on the player back. Also, I knew of amodeler named Flare and who was able to set the attachment point on the prop.. And that attachment point on the prop determined where the model was attached to the player. If the prop is setup correctly, it should be perfectly setup when attached to a player with HLMV, no code would be required. http://www.halfwit-2.com/?page=resources <http://www.halfwit-2.com/?page=resources&action=view&item=14> &action=view&item=14 On Sat, Nov 24, 2012 at 11:19 AM, Jan Hartung <jan.hart...@gmx.de> wrote: > Ive been trying different things now, but none of them work as they > are supposed to. > > > > A combination of LookupAttachment and GetAttachment and setting the > origin and angles of the entity I want to attach to the player to what > GetAttachment returned followed by a call to FollowEntity does not > help. The entity seems to be glued to the players feet then. > > Calling SetParent and afterwards SetParentAttachment yields better results. > The entity is shown on the attachment point and moves completely > relative to the player. The problem here is, that the weapon is no > longer in the players hands and the whole player model jerks around. > Additionally the console prints the error message *** ERROR: Bone > access not allowed (entity 1:player). I tried to solve that by > calling PushAllowBoneAccess on the player (client side). Doesnt help, > the error message does not disappear and the player keeps on jerking around. > > > > Any ideas? > > > > Jan > > > > > > Von: hlcoders-boun...@list.valvesoftware.com > [mailto:hlcoders-boun...@list.valvesoftware.com] Im Auftrag von Cale > Dunlap > Gesendet: Mittwoch, 3. Oktober 2012 20:21 > An: Discussion of Half-Life Programming > Betreff: Re: [hlcoders] Show a model on the player > > > > I haven't personally done what you're trying to do, but perhaps > looking at bone followers would provide some insight. I'm not sure if > they'll address what you're asking. Other members of the list can correct me if I'm wrong. > I've actually been curious about this myself. > > > > Cale > > On Thursday, September 27, 2012, Jan Hartung wrote: > > Hi, > > > > Im trying to render different items (models) on the player model. The > player model has been set up with various attachments where I could > render the items. My problem is that I couldnt find a way to attach > an item to any of the attachment points. The net doesnt really help > with this and I couldnt find the code used to show the weapons on the > player models. Any hints on how to render models on attachment points? > > > > Jan > > > > > _______________________________________________ > To unsubscribe, edit your list preferences, or view the list archives, > please visit: > https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders > > _______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders _______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders
_______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders