Hand Viewmodels
Jump to navigation
Jump to search
Have you ever wanted fancy c_ models like all those cool games? Well now you can!
Put this file in your shared folder or shared game folder.
#include "cbase.h"
#include "baseviewmodel_shared.h"
#if defined( CLIENT_DLL )
#define CHandViewModel C_HandViewModel
#endif
class CHandViewModel : public CBaseViewModel
{
DECLARE_CLASS( CHandViewModel, CBaseViewModel );
public:
DECLARE_NETWORKCLASS();
private:
};
LINK_ENTITY_TO_CLASS(hand_viewmodel, CHandViewModel);
IMPLEMENT_NETWORKCLASS_ALIASED(HandViewModel, DT_HandViewModel)
// for whatever reason the parent doesn't get sent
// I don't really want to mess with the baseviewmodel
// so now it does
BEGIN_NETWORK_TABLE(CHandViewModel, DT_HandViewModel)
#ifndef CLIENT_DLL
SendPropEHandle(SENDINFO_NAME(m_hMoveParent, moveparent)),
#else
RecvPropInt(RECVINFO_NAME(m_hNetworkMoveParent, moveparent), 0, RecvProxy_IntToMoveParent),
#endif
END_NETWORK_TABLE()
I'd put something like this in your server/player.cpp or in your mod's server player.cpp below CreateViewModel
.
server/player.cpp
void CBasePlayer::CreateHandModel(int index, int iOtherVm)
{
Assert(index >= 0 && index < MAX_VIEWMODELS && iOtherVm >= 0 && iOtherVm < MAX_VIEWMODELS );
if (GetViewModel(index))
return;
CBaseViewModel *vm = (CBaseViewModel *)CreateEntityByName("hand_viewmodel");
if (vm)
{
vm->SetAbsOrigin(GetAbsOrigin());
vm->SetOwner(this);
vm->SetIndex(index);
DispatchSpawn(vm);
vm->FollowEntity(GetViewModel(iOtherVm), true);
m_hViewModel.Set(index, vm);
}
}
You should also add this to your server or mod's player.h below CreateViewModel
.
server/player.h
virtual void CreateHandModel( int viewmodelindex = 1, int iOtherVm = 0 );
Now if you want this to actually work you're gonna need to call it.
Call it sometime after CreateViewModel
in either CBasePlayer
or your mod's player spawn.
server/player.cpp
CreateHandModel();
So now that the HandViewModel
has been created we need to set its model.
Put this in your mod's server's player's spawn sometime after the hand model has been created.
server/your_mod/your_player.cpp
GetViewModel(1)->SetModel("models/coolhandsfolder/cool_arms.mdl");
Make sure your model has been precached first!