Sidebar

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

AshtrayGang.

Member
24.07.09
267
30
Поищи в гугле и скачай по первой ссылки,а обновления накладывал зря, стим сам обновляется. у меня тоже пиратский, хоть и игра лицензионная. Но если не поможет я могу залить свой, у меня ещё установщик остался)))

Post automatically merged:

Собственно у меня тоже вопрос: не подскажите, в каком cpp содержится класс, используемый при при подбирании оружия или предмета?
 
Останнє редагування:

Noxter

Simpla Developer
02.09.07
2 766
36
2 AshtrayGang.:
Тебе нужно чтобы подбирать оружие можно было клавишей "E", а не автоматически?
 

AshtrayGang.

Member
24.07.09
267
30
Noxter, пипа того, только при нажатии "Е" оружие должно не подбираться, а передавать данные в массив объекта, там имя, иконку, тип предмета...

Только вот ещё одна проблема, с массивом объекта класса можно только работать в той функции, в которой ему присваивались значения. Как можно инициализировать и использовать массив объекта, чтоб с ним можно было работать в различных методах и даже классах?

DeTLeR, попробую)
 

Noxter

Simpla Developer
02.09.07
2 766
36
2 AshtrayGang.:
Я не в силах тебе помочь :(
Пихаешь этот код в класс вепона (weapon_pistol.cpp к примеру)
Код:
virtual void SetPickupTouch( void ) { SetTouch(NULL); }
 

AshtrayGang.

Member
24.07.09
267
30
Noxter, пока до прицелов не дошёл.

На счёт кода, правда он уже как неделю не работоспособный и превратился в полигон для экспериментов, которые ни к чему не привели((((
Весь код распологается на клиенте:
Код:
//Класс HUD элемента AG_Inventar
 #include "cbase.h"
 #include "hud.h"
 #include "cbase.h"
 #include "hudelement.h"
 #include "hud_macros.h"
 #include "vgui/iinput.h"
 
 #include <vgui_controls/Panel.h>
 #include <vgui_controls/Frame.h>
 #include <vgui/IScheme.h>
 #include <vgui_controls/Label.h>
 #include <vgui_controls/ImagePanel.h>
 #include <vgui_controls/PanelListPanel.h>
 #include "iclientmode.h"
 #include "vgui/ISurface.h"
 #include "vgui/IInputInternal.h"
 //#include "AG_Item.h"
 //Объявление класса
 class CAG_Inventar : public CHudElement , public vgui::Panel
 {
 DECLARE_CLASS_SIMPLE( CAG_Inventar, vgui::Panel );
 public:
 	CAG_Inventar( const char *pElementName ); //конструктор
 	void Init( void ); //вызывается сразу после создания элемента
 	void VidInit( void ); //тоже что и Init только вызывается один раз при загрузке карты
 	void Reset(); //вызывается при сбросе HUD
 	void Paint( void ); //данный метод вызывается в каждом фрейме, для отрисовки элемента на экране
 	void OnThink(void); //также вызывается в каждом фрейме, для обновления информации
 	void MsgFunc_MyTxtMessage( bf_read &msg );
 	bool DrawInventarState;
 private:
 	vgui::HScheme scheme; //Объект схемы для использования информации из схем
 	char m_pText[1024];
 
 	//Массивы предметов
 	CHudTexture* ItemIco;
 
 	//Переменные класса
 	int MouseX;
 	int MouseY;
 	int x;
 	int y;
 	int yy;
 	int w;
 	int h;
 	int DrawItem;
 	int Scroll;
 	int ScrollMax;
 	int weaponX;
 	int weaponY;
 	int InventoryH;
 	int InventoryW;
 	int	ItemNumber;
 	int BaseInventarX;
 	int BaseInventarY;
 	int Eve;
 	int ScreenW;
 	int ScreenH;
 	int Box;
 	bool DrawDescription;
 
 		//Текстуры
 	//Элементы инвентаря
 	CHudTexture* m_Net;
 	CHudTexture* m_Inventar;
 	CHudTexture* m_Slots;
 	CHudTexture* m_Scroll;
 	CHudTexture* m_Scroll_Inventory;
 	CHudTexture* m_Belt;
 	CHudTexture* m_Cursor;
 
 	//Иконки оружия
 	CHudTexture* m_IcoAbakan;
 	CHudTexture* m_IcoSVD;
 	CHudTexture* m_IcoSVU;
 	CHudTexture* m_IcoVintorez;
 	CHudTexture* m_IcoLR300;
 	CHudTexture* m_IcoBuldog6;
 	CHudTexture* m_IcoHKG36;
 	CHudTexture* m_IcoL800;
 	CHudTexture* m_IcoGroza;
 	CHudTexture* m_IcoAK74U;
 	CHudTexture* m_IcoAK74;
 	CHudTexture* m_IcoSIG550;
 	CHudTexture* m_IcoFN2000;
 	CHudTexture* m_IcoMP5;
 	CHudTexture* m_IcoRPG7;
 	CHudTexture* m_IcoObrez;
 	CHudTexture* m_IcoTOZ34;
 	CHudTexture* m_IcoSpas12;
 	CHudTexture* m_IcoGaus;
 	CHudTexture* m_IcoPM;
 	CHudTexture* m_IcoFort12;
 	CHudTexture* m_IcoWalther;
 	CHudTexture* m_IcoBeretta;
 	CHudTexture* m_IcoBlack;
 	CHudTexture* m_IcoWinchester1300;
 	CHudTexture* m_IcoVal;
 
 	//Методы
 	//virtual void ShowPanel( bool bShow );
 
 protected:
 	virtual void ApplySchemeSettings(vgui::IScheme *scheme);
 	virtual void OnMouseWheeled(int delta);
 	virtual void OnMousePressed(vgui::MouseCode code);
 	virtual void OnEvent( int event );
 };
 //Регистрация класса для HUD элемента
 DECLARE_HUDELEMENT( CAG_Inventar );
 //Регистрация приемника сообщений
 DECLARE_HUD_MESSAGE( CAG_Inventar, MyTxtMessage );
 
 using namespace vgui;
 
 // memdbgon must be the last include file in a .cpp file!!!
 #include "tier0/memdbgon.h"
 
 //Имплементация конструктора
 CAG_Inventar::CAG_Inventar( const char *pElementName ) : CHudElement( pElementName ), vgui::Panel( NULL, "AG_Inventar" )
 {
 	scheme = vgui::scheme()->LoadSchemeFromFile("resource/ClientScheme.res", "ClientScheme");
 	SetScheme(scheme);
 
 	//Инициализация переменных
 	vgui::Panel *pParent = g_pClientMode->GetViewport();
 	SetParent( pParent );
 	this->SetMouseInputEnabled(true);
 	this->MakePopup(false,true);
 	ItemNumber = 7;
 	
 	SetHiddenBits( HIDEHUD_HEALTH | HIDEHUD_PLAYERDEAD );
 }
 
 //Имплементация других методов
 
 void CAG_Inventar::ApplySchemeSettings( vgui::IScheme *scheme )
 {
 	BaseClass::ApplySchemeSettings(scheme);
  
 	SetPaintBackgroundEnabled(false);
 	SetPaintBorderEnabled(false);
  
 	//Элементы инвентаря
 	m_Net	   = gHUD.GetIcon("ui_debug_font");
 	m_Inventar  = gHUD.GetIcon("Inventar");
 	m_Slots	 = gHUD.GetIcon("Slots");
 	m_Scroll	= gHUD.GetIcon("Scroll");
 	m_Scroll_Inventory=gHUD.GetIcon("Scroll_Inventory");
 	m_Belt	  = gHUD.GetIcon("Belt");
 	m_Cursor	= gHUD.GetIcon("Cursor");
 
 	//Иконки оружия
 	m_IcoAbakan = gHUD.GetIcon("AG_Ico_Abakan");
 	m_IcoSVD	= gHUD.GetIcon("AG_Ico_SVD");
 	m_IcoSVU	= gHUD.GetIcon("AG_Ico_SVU");
 	m_IcoVintorez=gHUD.GetIcon("AG_Ico_Vintorez");
 	m_IcoLR300	= gHUD.GetIcon("AG_Ico_LR300");
 	m_IcoBuldog6= gHUD.GetIcon("AG_Ico_Buldog6");
 	m_IcoHKG36	= gHUD.GetIcon("AG_Ico_HKG36");
 	m_IcoL800	= gHUD.GetIcon("AG_Ico_L800");
 	m_IcoGroza	= gHUD.GetIcon("AG_Ico_Groza");
 	m_IcoAK74U	= gHUD.GetIcon("AG_Ico_AK74U");
 	m_IcoAK74	= gHUD.GetIcon("AG_Ico_AK74");
 	m_IcoSIG550 = gHUD.GetIcon("AG_Ico_SIG550");
 	m_IcoFN2000 = gHUD.GetIcon("AG_Ico_FN2000");
 	m_IcoMP5	= gHUD.GetIcon("AG_Ico_MP5");
 	m_IcoRPG7	= gHUD.GetIcon("AG_Ico_RPG7");
 	m_IcoObrez	= gHUD.GetIcon("AG_Ico_Obrez");
 	m_IcoTOZ34	= gHUD.GetIcon("AG_Ico_TOZ34");
 	m_IcoSpas12 = gHUD.GetIcon("AG_Ico_Spas12");
 	m_IcoGaus	= gHUD.GetIcon("AG_Ico_Gaus");
 	m_IcoPM		= gHUD.GetIcon("AG_Ico_PM");
 	m_IcoFort12 = gHUD.GetIcon("AG_Ico_Fort12");
 	m_IcoWalther= gHUD.GetIcon("AG_Ico_Walther");
 	m_IcoBeretta= gHUD.GetIcon("AG_Ico_Beretta");
 	m_IcoBlack	= gHUD.GetIcon("AG_Ico_Black");
 	m_IcoWinchester1300 = gHUD.GetIcon("AG_Ico_Winchester");
 	m_IcoVal	= gHUD.GetIcon("AG_Ico_Val");
 }
 
 void CAG_Inventar::Init( void )
 {
 	//Устанавливаем перехват сообщений
 	HOOK_HUD_MESSAGE( CAG_Inventar, MyTxtMessage )
 	Reset();
 }
 
 void CAG_Inventar::VidInit( void )
 {
 	Reset();
 }
 
 void CAG_Inventar::Reset( void )
 {
 	//стираем содержимое текста
 }
 
 void CAG_Inventar::Paint( void )
 {
 	//определяем требуется ли отображать элемент
 	ConVar *is_vis = cvar->FindVar( "AG_Inventar_visible" );
 	if(!is_vis->GetBool()) return;
 
 	ScreenW = vgui::scheme()->GetProportionalScaledValue(640);
 	ScreenH = vgui::scheme()->GetProportionalScaledValue(480);
 	BaseInventarX = vgui::scheme()->GetProportionalScaledValue(23);
 	BaseInventarY = vgui::scheme()->GetProportionalScaledValue(186);
 	InventoryW = vgui::scheme()->GetProportionalScaledValue(178.5);
 	InventoryH = vgui::scheme()->GetProportionalScaledValue(255);
 	Box = vgui::scheme()->GetProportionalScaledValue(25.5);
 
 	weaponY = Scroll + BaseInventarY;
 	this->MakePopup(true,false);
 
 	for(int i=0; i<10;i++)
 	{
 		pItem->Ico[i] = *m_IcoLR300;
 		pItem->Width[i] = 4;
 		pItem->Height[i] = 2;
 	}
 		
 	//pItem.Ico[2] = *m_IcoBlack;
 	//pItem.Width[2] = 2;
 	//pItem.Height[2] = 1;
 	//pItem.Description[2] = *"Это пистолет, крутой пистолет";
 	//pItem.Name[2] = *"Чёрный ястреб";
 	//pItem.Type[2] = *"weapon1";
 
 	//pItem.Ico[5] = *m_IcoAK74;
 	//pItem.Ico[7] = *m_IcoAbakan;
 
 	//Пояс
 	x = vgui::scheme()->GetProportionalScaledValue(7);
 	y = vgui::scheme()->GetProportionalScaledValue(111);
 	w = vgui::scheme()->GetProportionalScaledValue(620);
 	h = vgui::scheme()->GetProportionalScaledValue(55);
 	m_Belt->DrawSelfCropped(x,y,0,0,996,102,w,h,Color(255,255,255,255));
 	//Раздел слотов
 	x = vgui::scheme()->GetProportionalScaledValue(5);
 	y = vgui::scheme()->GetProportionalScaledValue(12);
 	w = vgui::scheme()->GetProportionalScaledValue(639);
 	h = vgui::scheme()->GetProportionalScaledValue(90);
 	m_Slots->DrawSelfCropped(x,y,0,0,1024,128,w,h,Color(255,255,255,255));
 	//Сеть в базовом инвентаре
 	m_Net->DrawSelfCropped(BaseInventarX,BaseInventarY,29,29,210,300,InventoryW,InventoryH,Color(255,255,255,255));
 	//Сеть в 1 слоте
 	x = vgui::scheme()->GetProportionalScaledValue(19);
 	y = vgui::scheme()->GetProportionalScaledValue(26);
 	w = vgui::scheme()->GetProportionalScaledValue(66);
 	h = vgui::scheme()->GetProportionalScaledValue(66);
 	m_Net->DrawSelfCropped(x,y,29,29,60,60,w,h,Color(255,255,255,255));
 	//Сеть в 2 слоте
 	x = vgui::scheme()->GetProportionalScaledValue(110);
 	y = vgui::scheme()->GetProportionalScaledValue(26);
 	w = vgui::scheme()->GetProportionalScaledValue(66);
 	h = vgui::scheme()->GetProportionalScaledValue(66);
 	m_Net->DrawSelfCropped(x,y,29,29,60,60,w,h,Color(255,255,255,255));
 	//Сеть в 3 слоте
 	x = vgui::scheme()->GetProportionalScaledValue(204);
 	y = vgui::scheme()->GetProportionalScaledValue(26);
 	w = vgui::scheme()->GetProportionalScaledValue(198);
 	h = vgui::scheme()->GetProportionalScaledValue(66);
 	m_Net->DrawSelfCropped(x,y,29,29,180,60,w,h,Color(255,255,255,255));
 	//Сеть в 4 слоте
 	x = vgui::scheme()->GetProportionalScaledValue(424);
 	y = vgui::scheme()->GetProportionalScaledValue(26);
 	w = vgui::scheme()->GetProportionalScaledValue(66);
 	h = vgui::scheme()->GetProportionalScaledValue(66);
 	m_Net->DrawSelfCropped(x,y,29,29,60,60,w,h,Color(255,255,255,255));
 	//Сеть в 5 слоте
 	x = vgui::scheme()->GetProportionalScaledValue(515);
 	y = vgui::scheme()->GetProportionalScaledValue(26);
 	w = vgui::scheme()->GetProportionalScaledValue(99);
 	h = vgui::scheme()->GetProportionalScaledValue(66);
 	m_Net->DrawSelfCropped(x,y,29,29,90,60,w,h,Color(255,255,255,255));
 	//Сеть на поясе
 	x = vgui::scheme()->GetProportionalScaledValue(20);
 	y = vgui::scheme()->GetProportionalScaledValue(126);
 	w = vgui::scheme()->GetProportionalScaledValue(594);
 	h = vgui::scheme()->GetProportionalScaledValue(33);
 	m_Net->DrawSelfCropped(x,y,29,29,540,30,w,h,Color(255,255,255,255));
 
 	if(ItemNumber > 0) //Если у нас есть предметы
 	{
 		for( int ItemIndex = 0; ItemIndex <= ItemNumber; ItemIndex++ ) //Цикл прорисовки предметов
 		{
 			h = pItem->Height[ItemIndex]*Box; //Ширина (реал)
 			w = pItem->Width[ItemIndex]*Box; //Длина (реал)
 			int delta; //Выступ предмета вверху
 			if(weaponY - BaseInventarY + h <= InventoryH)
 			{
 				if(weaponY + h >= BaseInventarY)
 				{
 					if(weaponY < BaseInventarY)
 					{
 						delta = (BaseInventarY - weaponY)/Box;
 						pItem->Ico[ItemIndex].DrawSelfCropped(BaseInventarX,weaponY + delta*Box,0,delta*50,pItem->Width[ItemIndex]*50,pItem->Height[ItemIndex]*50 - delta*50,w,h - delta*Box,Color(255,255,255,255));
 						pItem->X[ItemIndex] = BaseInventarX;
 						pItem->Y[ItemIndex] = weaponY + delta*Box;
 					}
 					else
 					{
 						pItem->Ico[ItemIndex].DrawSelfCropped(BaseInventarX,weaponY,0,0,pItem->Width[ItemIndex]*50,pItem->Height[ItemIndex]*50,w,h,Color(255,255,255,255));
 						pItem->X[ItemIndex] = BaseInventarX;
 						pItem->Y[ItemIndex] = weaponY;
 					}
 				}
 			}
 			weaponY = weaponY + h;
 		}
 
 		//Прорисовка полосы прокрутки
 		if(weaponY - BaseInventarY - Scroll > InventoryH)
 		{
 			
 			x = vgui::scheme()->GetProportionalScaledValue(202);
 			w = vgui::scheme()->GetProportionalScaledValue(14);
 			m_Scroll_Inventory->DrawSelfCropped(x,BaseInventarY,0,0,14,255,w,InventoryH,Color(255,255,255,255));
 		}
 	}
 
 	//Базовый инвентарь
 	x = vgui::scheme()->GetProportionalScaledValue(7);
 	y = vgui::scheme()->GetProportionalScaledValue(170);
 	w = vgui::scheme()->GetProportionalScaledValue(621);
 	h = vgui::scheme()->GetProportionalScaledValue(299);
 	m_Inventar->DrawSelfCropped(x,y,0,0,996,482,w,h,Color(255,255,255,255));
 
 	//Прорисовка описания предмета.
 	if(DrawDescription == true)
 	{
 		x = vgui::scheme()->GetProportionalScaledValue(411);
 		y = vgui::scheme()->GetProportionalScaledValue(234);
 		h = pItem->Height[DrawItem]*Box; //Ширина (реал)
 		w = pItem->Width[DrawItem]*Box; //Длина (реал)
 		pItem->Ico[DrawItem].DrawSelfCropped(x-w/2,y-h/2,0,0,pItem->Width[DrawItem]*50,pItem->Height[DrawItem]*50,w,h,Color(255,255,255,255));
 	}
 	//Прорисовка курсора шыши
 	//vgui::input()->GetCursorPosition(x,y);
 	//mouseX = mouseX + x - ScreenW/2;
 	//mouseY = mouseY + y - ScreenH/2;
 	//if(mouseX < 0) {mouseX = 0;}
 	//if(mouseY < 0) {mouseY = 0;}
 	//if(mouseX > ScreenW) {mouseX = ScreenW;}
 	//if(mouseY > ScreenH) {mouseY = ScreenH;}
 	//m_Cursor->DrawSelf(x,y,Color(255,255,255,255));
 }
 void CAG_Inventar::OnEvent( int event )
 {
 }
 void CAG_Inventar::OnMousePressed(vgui::MouseCode code)
 {
 	if(code == MOUSE_LEFT)
 	{
 		vgui::input()->GetCursorPosition(MouseX,MouseY);
 		for( int ItemIndex = 0; ItemIndex <= ItemNumber; ItemIndex++ )
 		{
 			if(MouseX <= pItem->X[ItemIndex])
 			{
 				if(MouseX >= pItem->X[ItemIndex] + pItem->Width[ItemIndex])
 				{
 					if(MouseY <= pItem->Y[ItemIndex])
 					{
 						if(MouseY >= pItem->Y[ItemIndex] + pItem->Height[ItemIndex])
 						{
 							DrawItem = ItemIndex;
 							DrawDescription = true;
 						}
 					}
 				}
 			}
 		}
 	}
 }
 void CAG_Inventar::OnMouseWheeled(int delta)
 {
 	delta*= Box;
 	if(Scroll + delta <=0)
 	{
 		Scroll = Scroll + delta;
 	}
 }
 
 void CAG_Inventar::OnThink(void)
 {
 	//определяем требуется ли изменить видимость элемента
 	ConVar *is_vis = cvar->FindVar( "AG_Inventar_visible" );
 	if(is_vis->GetBool()) SetVisible(true);
 	else SetVisible(false);
 }
 
 void CAG_Inventar::MsgFunc_MyTxtMessage( bf_read &msg )
 
 {
 	sprintf(m_pText, msg.ReadAndAllocateString());
 }
 
 
 //Создаем консольную переменную на стороне клиента для управления видимостью элемента
 ConVar myhud_visible("AG_Inventar_visible", "0", FCVAR_NONE, "AG_Inventar visibility", true, 0, true, 1);
 
 //Создаем консольную комманду на стороне клиента для переключения видимости элемента
 void CC_myhud_visible ( void )
 {
 	ConVar *is_vis = cvar->FindVar( "AG_Inventar_visible" );
 	if(is_vis->GetBool())
 		engine->ClientCmd( "AG_Inventar_visible 0" );
 	else
 		engine->ClientCmd( "AG_Inventar_visible 1" );
 }
 static ConCommand myhud( "AG_Inventar", CC_myhud_visible, "parameter");
AG_Item.h
Код:
#include "cbase.h"
 
 class CAG_Item
 {
 public:
 	int *Width;
 	int	*Height;
 	int	*X;
 	int	*Y;
 	char *Name;
 	char *Type;
 	char *Description;
 	CHudTexture* Ico;
 };
 CAG_Item *pItem;
 //CAG_Item *pItem = new CAG_Item[10];
 	int *Width			= new int[10];
 	int	*Height			= new int[10];
 	int	*X				= new int[10];
 	int	*Y				= new int[10];
 	char *Name			= new char[10];
 	char *Type			= new char[10];
 	char *Description	= new char[10];
 	CHudTexture* Ico	= new CHudTexture[10];
Post automatically merged:

PS. Сектор 11 - это вирус такой зловещий. Код компилируется, но когда в моде открываешь инвентарь игра вылитает с ошибкой памяти. Суде по всему нужно объявлять массивы (или массив класса, как было ранее) на сервере, но непонятно, как включить этот файл (AG_Item.h) с сервера в код клиента.
 
Останнє редагування:

AshtrayGang.

Member
24.07.09
267
30
Видимо слишком рано я взялся за такую злостную работу, попробую сделать это в конце, может опыта наберусь)
 

AshtrayGang.

Member
24.07.09
267
30
Какое нужно послать сообщение, чтоб отключить отображение здоровья, энергии, фонарика прицела, патронов...?

Post automatically merged:

И ещё, как можно присобачить к видимой модели оружия прицел или глушитель. Например в m4a1 из исходника ксс были одни и теже функции для анимаций с глушителем и без него. Но в моём случаи это не удобно, есть возможность прицеплять глушак, прицел и подствольник, в таком случае придётся делать аж по 8 функций! Вот я и хочу просто попробовать аттачить модели абгрейдов к нужным костям определённой модели, если они используются. Как хедкраб причпокан к зомби.
 
Останнє редагування:

AshtrayGang.

Member
24.07.09
267
30
Такая проблема: Хочу сделать в оружии возможность присоединения оптики, глушака, подствольника... Но при этом естественно должна изменяться модель. Но когда я пишу в коде программы SetBodyGroup(1,1), то ничего не происходит, т.е. модель оружия не меняется. Видимо я что-то неправильно делаю, а как правильно, подскажите.
 

Noxter

Simpla Developer
02.09.07
2 766
36
2 AshtrayGang.:
Посмотри код из CSS там вроде как оружие с глушителем было.
Можно попробовать аттач.
 

AshtrayGang.

Member
24.07.09
267
30
Там тупо анимации без глушака и с ним, в общем примитивно, мне так будет слишком много анимировать и писать длинный код.
А как аттач в кодинге использовать, я сначали так и хотел с делать, но ничего не нашёл.
 

DeTLeR

New member
17.12.06
2 777
2 AshtrayGang.:
Ну а что мешает чуть поменять тот код, а? :) Если прицепил глушак, значь поменяй звук и Vector cone у оружия. Если прицепил оптику, то вызывай функцию зума у оружия, если оптика true :) Вобщем то ничего сверхестественного.
 
Останнє редагування:

Game Server

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

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

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