Четверг, 25.04.2024, 09:47
 
Приветствую Вас Guest | RSS
Главная страница | ClassSelect - Форум | Регистрация | Вход
[Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » Игровая мастерская » Программирование » ClassSelect (фикс)
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
Ну так а че спрашиваешь? smile
 
HitmenДата: Пятница, 21.05.2010, 15:15 | Сообщение # 5
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
Quote (Strider)
Сам код профикшен и компилить без проблем, НО(всего есть это НО >_<) никаких следов способа открытия панельки нет. Мне надо, чтобы она включалась при запуске игры

DetLeR, Он насчёт этого спрашивал smile


Туториалы по программированию, мои и слегка изменённые чужие. :)

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
Х.З.
Я с таким не работал ещё smile


Туториалы по программированию, мои и слегка изменённые чужие. :)

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, там этого ненаписанно, просто надо делать проект заного, выберая адвансед wink

 
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
А теперь запятые расставь, снова не понимаю smile

Туториалы по программированию, мои и слегка изменённые чужие. :)

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
 
Форум » Игровая мастерская » Программирование » ClassSelect (фикс)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Помощь в разработке форума: HOMiE7