|
|
ClassSelect
| |
Strider | Дата: Четверг, 20.05.2010, 18:55 | Сообщение # 1 |
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
| В общем мне надо(не спрашивайте зачем) профиксить КаЭсЭсовскую панельку выбора класса(т.е. 1337 или кто другой). Конечно исходников ксс у меня нет, и я заюзал украденную бэту. Сам код профикшен и компилить без проблем, НО(всего есть это НО >_<) никаких следов способа открытия панельки нет. Мне надо, чтобы она включалась при запуске игры. Вот код: CPP: Code //========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ // // Purpose: // // $NoKeywords: $ //=============================================================================
#include "cbase.h" #include "carselect.h"
#include <KeyValues.h> #include <FileSystem.h> #include <vgui_controls/Button.h> #include <vgui/IVGUI.h>
#include "hud.h" // for gEngfuncs #include "hl2mp_gamerules.h"
using namespace vgui;
const char *GetResourceFile( int team ) { return "Resource/UI/ClassMenu_1.res"; }
//----------------------------------------------------------------------------- // Purpose: Constructor //----------------------------------------------------------------------------- CCSClassMenu::CCSClassMenu(IViewPort *pViewPort) : CClassMenu(pViewPort) { m_iFirst = 1; }
//----------------------------------------------------------------------------- // Purpose: Destructor //----------------------------------------------------------------------------- CCSClassMenu::~CCSClassMenu() { }
//----------------------------------------------------------------------------- // Purpose: Updates the menu with new information, DON'T call the base class for this one //----------------------------------------------------------------------------- void CCSClassMenu::Update( int *validClasses, int team ) { LoadControlSettings( GetResourceFile( team ) );
SetVisibleButton( "CancelButton", true ); // if we don't have the new models installed, // turn off the militia and spetsnaz buttons SetVisibleButton( "militia", false ); SetVisibleButton( "spetsnaz", false ); }
//----------------------------------------------------------------------------- // Purpose: magic override to allow vgui to create mouse over buttons for us, and to use our class res files, not TFC's one //----------------------------------------------------------------------------- Panel *CCSClassMenu::CreateControlByName(const char *controlName) { if( !stricmp( "MouseOverPanelButton", controlName ) ) { ClassHelperPanel *classPanel = new ClassHelperPanel( this, NULL ); classPanel->SetVisible( false );
int x,y,wide,tall; m_pPanel->GetBounds( x, y, wide, tall ); classPanel->SetBounds( x, y, wide, tall );
MouseOverPanelButton *newButton = new MouseOverPanelButton( this, NULL, classPanel ); classPanel->SetAssociatedButton( newButton ); // class panel will use this to lookup the .res file
if ( m_iFirst ) { m_iFirst = 0; m_pFirstButton = newButton; // this first button's page is triggered when the panel is set visible } return newButton; } else { return BaseClass::CreateControlByName( controlName ); } }
//----------------------------------------------------------------------------- // Purpose: Sets the visibility of a button by name //----------------------------------------------------------------------------- void CCSClassMenu::SetVisibleButton(const char *textEntryName, bool state) { Button *entry = dynamic_cast<Button *>(FindChildByName(textEntryName)); if (entry) { entry->SetVisible(state); } }
//----------------------------------------------------------------------------- // Purpose: causes the class panel to load the resource file for its class //----------------------------------------------------------------------------- void CCSClassMenu::ClassHelperPanel::ApplySchemeSettings( IScheme *pScheme ) { Assert( GetAssociatedButton() ); LoadControlSettings( GetClassPage( GetAssociatedButton()->GetName() ) );
BaseClass::ApplySchemeSettings( pScheme ); }
//----------------------------------------------------------------------------- // Purpose: returns the filename of the class file for this class //----------------------------------------------------------------------------- const char *CCSClassMenu::ClassHelperPanel::GetClassPage( const char *className ) { static char classPanel[ _MAX_PATH ]; Q_snprintf( classPanel, sizeof( classPanel ), "classes/%s.res", className );
if ( vgui::filesystem()->FileExists( classPanel ) ) { } else if (vgui::filesystem()->FileExists( "classes/default.res" ) ) { Q_snprintf( classPanel, sizeof( classPanel ), "classes/default.res" ); } else { return NULL; }
return classPanel; } H: Code //========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ // // Purpose: // // $NoKeywords: $ //=============================================================================
#ifndef SELECT_H #define SELECT_H #ifdef _WIN32 #pragma once #endif
#include <game_controls/ClassMenu.h> #include <vgui_controls/EditablePanel.h> #include <FileSystem.h>
//----------------------------------------------------------------------------- // Purpose: Draws the class menu //----------------------------------------------------------------------------- class CCSClassMenu : public CClassMenu { private: typedef CClassMenu BaseClass;
public: CCSClassMenu(IViewPort *pViewPort ); ~CCSClassMenu(); // override the base class virtual void Update( int *validClasses, int team ); // we override the defn of the 2nd param
// VGUI2 overrides vgui::Panel *CreateControlByName(const char *controlName);
private: // helper functions class ClassHelperPanel : public vgui::EditablePanel { private: typedef vgui::EditablePanel BaseClass;
public: ClassHelperPanel( vgui::Panel *parent, const char *panelName ) : vgui::EditablePanel( parent, panelName ) { m_pAssociatedButton = NULL; } virtual void SetAssociatedButton( vgui::Panel *button ) { m_pAssociatedButton = button; } virtual vgui::Panel *GetAssociatedButton( void ) { return m_pAssociatedButton; }
private:
vgui::Panel *m_pAssociatedButton; // used to load class .res and .tga files
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); const char *GetClassPage( const char *className ); };
int m_iFirst; void SetVisibleButton(const char *textEntryName, bool state); }; #endif // SELECT_H
|
|
| |
Andreazzz | Дата: Четверг, 20.05.2010, 22:42 | Сообщение # 2 |
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
| Strider, в бетке кс есть не только этот код... самый простой вариант сделать всё самому на основе туторов на дев.валвсофтваре.ком
|
|
| |
Strider | Дата: Пятница, 21.05.2010, 07:12 | Сообщение # 3 |
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
| плять, я бы не спрашивал
|
|
| |
DetLeR | Дата: Пятница, 21.05.2010, 09:46 | Сообщение # 4 |
Engineer
Группа: Администраторы
Сообщений: 1731
Статус: Offline
| Ну так а че спрашиваешь?
|
|
| |
Hitmen | Дата: Пятница, 21.05.2010, 15:15 | Сообщение # 5 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| Quote (Strider) Сам код профикшен и компилить без проблем, НО(всего есть это НО >_<) никаких следов способа открытия панельки нет. Мне надо, чтобы она включалась при запуске игры DetLeR, Он насчёт этого спрашивал
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
DetLeR | Дата: Суббота, 22.05.2010, 00:44 | Сообщение # 6 |
Engineer
Группа: Администраторы
Сообщений: 1731
Статус: Offline
| Hitmen, ну так ему и ответили, что б копипастил код хл2дм. Говорит, мол, много копипастить и неизвестно как оно устроено) Что еще посоветовать?
|
|
| |
Hitmen | Дата: Суббота, 22.05.2010, 08:23 | Сообщение # 7 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| Х.З. Я с таким не работал ещё
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
Andreazzz | Дата: Суббота, 22.05.2010, 12:26 | Сообщение # 8 |
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
| Strider, http://developer.valvesoftware.com/wiki/Class_System тебе в помощь
|
|
| |
Strider | Дата: Суббота, 22.05.2010, 18:18 | Сообщение # 9 |
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
| Это Orange Box. Мне же надо под старый хл2дм
|
|
| |
Andreazzz | Дата: Суббота, 22.05.2010, 18:56 | Сообщение # 10 |
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
| Strider, анотацию к коду прочитай! Там нуно в сдк в адвансед выберать enalbe classes
|
|
| |
Strider | Дата: Суббота, 22.05.2010, 20:44 | Сообщение # 11 |
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
| Andreazzz, Я же уже сказал, мне нужно под старый движок! Ты сначала сам попробуй всё это сделать, а потом говори
|
|
| |
Hitmen | Дата: Суббота, 22.05.2010, 23:04 | Сообщение # 12 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| Там разве так и написано, что только под ОВ? Извиняюсь, если так, Просто сейчас не за компом.
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
Andreazzz | Дата: Воскресенье, 23.05.2010, 09:49 | Сообщение # 13 |
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
| Hitmen, там этого ненаписанно, просто надо делать проект заного, выберая адвансед
|
|
| |
Hitmen | Дата: Воскресенье, 23.05.2010, 11:26 | Сообщение # 14 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| Зачем расширенные настройки-то выбирать? О_о Мысль не улавливаю.
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
Andreazzz | Дата: Воскресенье, 23.05.2010, 11:41 | Сообщение # 15 |
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
| Hitmen, Enalbe Classes тебе что-то намикает?
|
|
| |
Strider | Дата: Воскресенье, 23.05.2010, 11:50 | Сообщение # 16 |
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
| Откройте СДК, выберите Source 2007 и нажмите Create Mod. Там выберите Start from template. И всё увидите.
|
|
| |
Hitmen | Дата: Воскресенье, 23.05.2010, 16:18 | Сообщение # 17 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| Andreazzz, Нет, ибо я мультиплеерные моды не делаю.
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
Andreazzz | Дата: Воскресенье, 23.05.2010, 21:41 | Сообщение # 18 |
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
| Hitmen, ибо я начал баги движка профиксил и забросил)
|
|
| |
Hitmen | Дата: Воскресенье, 23.05.2010, 21:58 | Сообщение # 19 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| А теперь запятые расставь, снова не понимаю
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
Strider | Дата: Воскресенье, 23.05.2010, 22:23 | Сообщение # 20 |
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
| Quote (Andreazzz) я начал баги движка =D
|
|
| |
|
|
Помощь в разработке форума: HOMiE7 |
|
| |
|