Sidebar

Вопрос & Ответ

AshtrayGang.

Member
24.07.09
267
30
Noxter, спасибо, попробую!)
DeTLeR, как раз это сделать легко, а мне нудно с лёгкостью изменять модель.
 

MiSTeR24RuS

New member
12.07.10
15
0
0
я так и делал, когда запуская мод свой он запускается и пишет ошибку "READ"
 

MiSTeR24RuS

New member
12.07.10
15
0
0
Код я не менял, версия двига 2006(ep1)
 
Останнє редагування:

MiSTeR24RuS

New member
12.07.10
15
0
0
а в Microsoft Visual C++ 2008 Express Edition можно работать (редактировать код и тд.)
 

Noxter

Simpla Developer
02.09.07
2 766
36
MiSTeR24RuS сказав(ла):
а в Microsoft Visual C++ 2008 Express Edition можно работать (редактировать код и тд.)
Редактировать код можно хоть в блокноте. Возможно ты имел в виду компилировать код? Если да, то в C++ 2008 можно, я сам код в ней компилирую.
 

NiGo32

New member
08.08.08
377
0
0
Вопрос:
Как сменить угол обзора игрока во время изменении ее гравитации?
Я тут поэксперементировал, и сделал так чтобы вещи в зависимости от консольных переменных ft_gravity_x,y,z могли по ним влиять гравитацией, например если написать ft_gravity_x 800, то все физические объекты включая игрока начнут падать в сторону стены ( оси X ), но сам игрок как бы по стене (по оси X) ходит, но под старым углом старого Z, и получается эффект как будто игрок переоделся в костюмчик Нео и бегает по стенкам аля Матрица :) :) :) !
Подскажите векторную величину которая отвечает за обзор игрока, заранее спс.

Post automatically merged:

А все, уже нашел через эффект наклонения.
 
Останнє редагування:

NiGo32

New member
08.08.08
377
0
0
2 Noxter:
Не, пока что не смогу, придет время там все увидишь.
 

Noxter

Simpla Developer
02.09.07
2 766
36
2 NiGo32:
А как же с моим эффектом наклонения?
Ты сможешь код вытащить из того что я тебе дал?
 

AshtrayGang.

Member
24.07.09
267
30
Кто-нить пробовал это? Чё-то я не особо понял.
Вот код:
Код:
#include "cbase.h"
#include "hudelement.h"
#include "hud_macros.h"
#include "iclientmode.h"
#include "c_basehlplayer.h"
#include "c_baseanimating.h"
#include "model_types.h"
#include "view_shared.h"
#include "view.h"
#include "iefx.h"
#include "dlight.h"
 
#include <vgui/IScheme.h>
#include <vgui_controls/Panel.h>
#include <vgui_controls/ImagePanel.h>

// memdbgon must be the last include file in a .cpp file!
#include "tier0/memdbgon.h"

class CClassImagePanel : public vgui::ImagePanel
{
	public:
		typedef vgui::ImagePanel BaseClass;
 
		CClassImagePanel( vgui::Panel* pParent, const char* pName );
		virtual ~CClassImagePanel();
		vgui::Panel *CreateControlByName(const char *controlName);
		virtual void ApplySettings( KeyValues* inResourceData );
		bool WillPanelBeVisible( vgui::VPANEL hPanel );
		bool ShouldRecreateClassImageEntity( C_BaseAnimating* pEnt, const char* pNewModelName );
		void UpdateClassImageEntity( 
		const char* pModelName,
		int x, int y, int width, int height );
		void PostRenderVGui();
		virtual void Paint();
 
 
	public:
		char m_ModelName[128];

		CHandle<C_BaseAnimatingOverlay> g_ClassImagePlayer;	// player
		CHandle<C_BaseAnimating> g_ClassImageWeapon;	// weapon
		CHudTexture*	m_pScope;
};
extern CUtlVector<CClassImagePanel*> g_ClassImagePanels;
CUtlVector<CClassImagePanel*> g_ClassImagePanels;
 
CClassImagePanel::CClassImagePanel( vgui::Panel* pParent, const char* pName )
	: vgui::ImagePanel( pParent, pName )
{
	g_ClassImagePanels.AddToTail( this );
	m_ModelName[0] = 0;
}
 
CClassImagePanel::~CClassImagePanel()
{
	g_ClassImagePanels.FindAndRemove( this );
}

// Utility to determine if the vgui panel is visible
bool CClassImagePanel::WillPanelBeVisible( vgui::VPANEL hPanel )
{
	while ( hPanel )
	{
		if ( !vgui::ipanel()->IsVisible( hPanel ) )
			return false;
		hPanel = vgui::ipanel()->GetParent( hPanel );
	}
	return true;
}

// Called to see if we should be creating or recreating the model instances
bool CClassImagePanel::ShouldRecreateClassImageEntity( C_BaseAnimating* pEnt, const char* pNewModelName )
{
	if ( !pNewModelName || !pNewModelName[0] )
		return false;
	if ( !pEnt )
		return true;
 
	const model_t* pModel = pEnt->GetModel();
 
	if ( !pModel )
		return true;
	const char* pName = modelinfo->GetModelName( pModel );
 
	if ( !pName )
		return true;
	// reload only if names are different
	return( V_stricmp( pName, pNewModelName ) != 0 );
}

void CClassImagePanel::UpdateClassImageEntity( 
		const char* pModelName,
		int x, int y, int width, int height )
{
	C_BasePlayer* pLocalPlayer = C_BasePlayer::GetLocalPlayer();
 
	if ( !pLocalPlayer )
		return;

	// set the weapon model and upper animation to use
	const char* pWeaponName = "models/weapons/f2000/w_f2000.mdl";
	const char* pWeaponSequence = "Idle_Upper_Aug";
 
	C_BaseAnimatingOverlay* pPlayerModel = g_ClassImagePlayer.Get();
 
	// Does the entity even exist yet?
	bool recreatePlayer = ShouldRecreateClassImageEntity( pPlayerModel, pModelName );

	if ( recreatePlayer )
	{
		// if the pointer already exists, remove it as we create a new one.
		if ( pPlayerModel )
			pPlayerModel->Remove();
 
		// create a new instance
		pPlayerModel = new C_BaseAnimatingOverlay();
		pPlayerModel->InitializeAsClientEntity( pModelName, RENDER_GROUP_OPAQUE_ENTITY );
		pPlayerModel->AddEffects( EF_NODRAW ); // don't let the renderer draw the model normally

		// have the player stand idle
		pPlayerModel->SetSequence( pPlayerModel->LookupSequence( "Idle_lower" ) );
		pPlayerModel->SetPoseParameter( 0, 0.0f ); // move_yaw
		pPlayerModel->SetPoseParameter( 1, 10.0f ); // body_pitch, look down a bit
		pPlayerModel->SetPoseParameter( 2, 0.0f ); // body_yaw
		pPlayerModel->SetPoseParameter( 3, 0.0f ); // move_y
		pPlayerModel->SetPoseParameter( 4, 0.0f ); // move_x
 
		g_ClassImagePlayer = pPlayerModel;
	}

	C_BaseAnimating* pWeaponModel = g_ClassImageWeapon.Get();
 
	// Does the entity even exist yet?
	if ( recreatePlayer || ShouldRecreateClassImageEntity( pWeaponModel, pWeaponName ) )
	{
		if ( pWeaponModel )
			pWeaponModel->Remove();
 
		pWeaponModel = new C_BaseAnimating();
		pWeaponModel->InitializeAsClientEntity( pWeaponName, RENDER_GROUP_OPAQUE_ENTITY );
		pWeaponModel->AddEffects( EF_NODRAW ); // don't let the renderer draw the model normally
		pWeaponModel->FollowEntity( pPlayerModel ); // attach to player model
		g_ClassImageWeapon = pWeaponModel;
	}

	Vector origin = pLocalPlayer->EyePosition();
	Vector lightOrigin = origin;
 
	// find a spot inside the world for the dlight's origin, or it won't illuminate the model
	Vector testPos( origin.x - 100, origin.y, origin.z + 100 );
	trace_t tr;
	UTIL_TraceLine( origin, testPos, MASK_OPAQUE, pLocalPlayer, COLLISION_GROUP_NONE, &tr );
	if ( tr.fraction == 1.0f )
		lightOrigin = tr.endpos;
	else
	{
		// Now move the model away so we get the correct illumination
		lightOrigin = tr.endpos + Vector( 1, 0, -1 );	// pull out from the solid
		Vector start = lightOrigin;
		Vector end = lightOrigin + Vector( 100, 0, -100 );
		UTIL_TraceLine( start, end, MASK_OPAQUE, pLocalPlayer, COLLISION_GROUP_NONE, &tr );
		origin = tr.endpos;
	}
 
	float ambient = engine->GetLightForPoint( origin, true ).Length();
 
	// Make a light so the model is well lit.
	// use a non-zero number so we cannibalize ourselves next frame
	dlight_t* dl = effects->CL_AllocDlight( LIGHT_INDEX_TE_DYNAMIC+1 );
 
	dl->flags = DLIGHT_NO_WORLD_ILLUMINATION;
	dl->origin = lightOrigin;
	// Go away immediately so it doesn't light the world too.
	dl->die = gpGlobals->curtime + 0.1f;
 
	dl->color.r = dl->color.g = dl->color.b = 250;
	if ( ambient < 1.0f )
		dl->color.exponent = 1 + (1 - ambient)*  2;
	dl->radius	= 400;

	// move player model in front of our view
	pPlayerModel->SetAbsOrigin( origin );
	pPlayerModel->SetAbsAngles( QAngle( 0, 210, 0 ) );
 
	// set upper body animation
	pPlayerModel->m_SequenceTransitioner.UpdateCurrent(
		pPlayerModel->GetModelPtr(),
		pPlayerModel->LookupSequence( "idle_lower" ),
		pPlayerModel->GetCycle(),
		pPlayerModel->GetPlaybackRate(),
		gpGlobals->realtime	
		);
 
	// Now, blend the lower and upper (aim) anims together
	pPlayerModel->SetNumAnimOverlays( 2 );
	int numOverlays = pPlayerModel->GetNumAnimOverlays();
	for ( int i=0; i < numOverlays; ++i )
	{
		C_AnimationLayer* layer = pPlayerModel->GetAnimOverlay( i );
		layer->m_flCycle = pPlayerModel->GetCycle();
		if ( i )
			layer->m_nSequence = pPlayerModel->LookupSequence( pWeaponSequence );
		else
			layer->m_nSequence = pPlayerModel->LookupSequence( "walk_lower" );
		layer->m_flPlaybackRate = 1.0;
		layer->m_flWeight = 1.0f;
		layer->SetOrder( i );
	}
 
	pPlayerModel->FrameAdvance( gpGlobals->frametime );

	// Now draw it.
	CViewSetup view;
	// setup the views location, size and fov (amongst others)
	view.x = x;
	view.y = y;
	view.width = width;
	view.height = height;
 
	view.m_bOrtho = false;
	view.fov = 54;
 
	view.origin = origin + Vector( -110, -5, -5 );
 
	// make sure that we see all of the player model
	Vector vMins, vMaxs;
	pPlayerModel->C_BaseAnimating::GetRenderBounds( vMins, vMaxs );
	view.origin.z += ( vMins.z + vMaxs.z )*  0.55f;
 
	view.angles.Init();
	//view.m_vUnreflectedOrigin = view.origin;
	view.zNear = VIEW_NEARZ;
	view.zFar = 1000;
	//view.m_bForceAspectRatio1To1 = false;
 
	// render it out to the new CViewSetup area
	// it's possible that ViewSetup3D will be replaced in future code releases
	Frustum dummyFrustum;
 
	// New Function instead of ViewSetup3D...
	render->Push3DView( view, 0, NULL, dummyFrustum );
 
	pPlayerModel->DrawModel( STUDIO_RENDER );
 
	if ( pWeaponModel )
	   pWeaponModel->DrawModel( STUDIO_RENDER );
 
	render->PopView( dummyFrustum );
}

void CClassImagePanel::PostRenderVGui()
{
	// If the team menu is up, then render the model
	for ( int i=0; i < g_ClassImagePanels.Count(); i++ )
	{
		CClassImagePanel* pPanel = g_ClassImagePanels[i];
		if ( WillPanelBeVisible( pPanel->GetVPanel() ) )
		{
			// Ok, we have a visible class image panel.
			int x, y, w, h;
			pPanel->GetBounds( x, y, w, h );
			pPanel->LocalToScreen( x, y );
 
			// Allow for the border.
			x += 3;
			y += 5;
			w -= 2;
			h -= 10;
 
			UpdateClassImageEntity( g_ClassImagePanels[i]->m_ModelName, x, y, w, h );
			return;
		}
	}
}
 
void CClassImagePanel::ApplySettings( KeyValues* inResourceData )
{
	const char* pName = "models/gman.mdl"; /*inResourceData->GetString( "3DModel", "" );*/
	if ( pName )
		V_strncpy( m_ModelName, pName, sizeof( m_ModelName ) );

	if (!m_pScope)
	{
		m_pScope = gHUD.GetIcon("wpn_crosshair");
	}
 
	BaseClass::ApplySettings( inResourceData );
}
 
void CClassImagePanel::Paint()
{
	m_pScope->DrawSelf(0, 0, GetWide(), GetTall(), Color(255,255,255,255));
	BaseClass::Paint();
}
vgui::Panel* CClassImagePanel::CreateControlByName(const char* controlName)
{
	if ( V_stricmp( controlName, "ClassImagePanel" ) == 0 )
		return new CClassImagePanel( NULL, controlName );
 
	return CClassImagePanel::CreateControlByName( controlName );
}
Вот кусок ресурса в HudLayout.res:
Код:
HudScope
	{
		"ControlName"	"HudScope"
		"fieldName"		"HudScope"
		"xpos"			"270"
		"ypos"			"170"
		"wide"			"512"
		"tall"			"384"
		"autoResize"	"0"
		"pinCorner"		"0"
		"visible"		"1"
		"enabled"		"1"
		"textAlignment"	"west"
		"3DModel"		"models/gman.mdl"
		"scaleImage"	"1"
		"zpos"			"1"
	}
 

Noxter

Simpla Developer
02.09.07
2 766
36
2 AshtrayGang.:
Что не понял? Изложи свой мопрос более понятнее.
И что это за код? Смотря по тутору там как минимум в 2х файлах ковырять нужно.
 

Game Server

Доноры Красавчики

Користувачі онлайн

Немає користувачів онлайн.