Четверг, 25.04.2024, 22:08
 
Приветствую Вас Guest | RSS
Главная страница | Ironsight Overlay - Форум | Регистрация | Вход
[Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » Игровая мастерская » Программирование » Ironsight Overlay
Ironsight Overlay
Dark_AlexДата: Среда, 01.06.2011, 16:22 | Сообщение # 1
Combat medic
Группа: Проверенные
Сообщений: 36
Репутация: 16
Статус: Offline
Интересует вопрос,как можно прописать Overlay - эффект,при использовании Ironsight ?
В голове крутиться псевдо-код а-ля
if Ironsight=1
итп...
Но никак привести это к завершению немогу.
Есть какие-либо идеи?
 
StriderДата: Среда, 01.06.2011, 16:55 | Сообщение # 2
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
Code
if( ironsighed )
{  
  OVERLAY_BLA_BLA_BLA("sdjkfshnf");
}
 
HellMapperДата: Среда, 01.06.2011, 19:05 | Сообщение # 3
Scout
Группа: Проверенные
Сообщений: 588
Репутация: 27
Статус: Offline
А если точнее 1) PRECAHE 2) Тутор про кровь на экране

Я живу в будущем City 15







Если Вы можете, играя в "Counter-Strike: Sourсe", посадить хедшот ножом через стену в попу своему противнику, который находится на другом конце карты, на другом сервере, и который играет в "Team Fortress 2" и находится под действием убер-заряда, то знайте, что в плане читерства вы достигли совершенства. ©IPa
 
Dark_AlexДата: Среда, 01.06.2011, 21:44 | Сообщение # 4
Combat medic
Группа: Проверенные
Сообщений: 36
Репутация: 16
Статус: Offline
Quote (HellMapper)
А если точнее 1) PRECAHE 2) Тутор про кровь на экране

Про кровь чтал,но там выполнено в отдельных cpp и h файлах.
Нельзя ли например
Code
if( ironsighed )
{    
    OVERLAY_BLA_BLA_BLA("sdjkfshnf");
}

Воткнуть в weapon_parse.cpp или в baseviewmodel_shared.cpp
А-ля
Code
//THIS IS ALREADY IN THE CODE, just so you know where we are
#define VIEWMODEL_ANIMATION_PARITY_BITS 3
#define SCREEN_OVERLAY_MATERIAL "vgui/screens/vgui_overlay"
     
//ALL BELOW IS NEW
#if defined( CLIENT_DLL )
void ExpWpnTestOffset(ConVar *pConVar, char *pszString);

if( ironsighed )                    \\ADED
{    
    OVERLAY_BLA_BLA_BLA("sdjkfshnf");    \\ADED
}


Было отредактированно - Dark_Alex - Среда, 01.06.2011, 21:44
 
StriderДата: Среда, 01.06.2011, 22:22 | Сообщение # 5
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
*вспоминает где есть покадровое обновление*

Попробуй в конструктор BaseViewModel_shared
 
Dark_AlexДата: Четверг, 02.06.2011, 14:52 | Сообщение # 6
Combat medic
Группа: Проверенные
Сообщений: 36
Репутация: 16
Статус: Offline
Quote (Strider)
if( ironsighed )
{
OVERLAY_BLA_BLA_BLA("sdjkfshnf");
}

Кстате,интересно,сработает ли этот код,почему-то кажется что нет=)
 
StriderДата: Четверг, 02.06.2011, 16:19 | Сообщение # 7
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
Dark_Alex, Конечно нет, так как вместо OVERLAY_BLA_BLA_BLA("sdjkfshnf"); нужно сунуть код самого оверлея
 
Dark_AlexДата: Четверг, 02.06.2011, 16:33 | Сообщение # 8
Combat medic
Группа: Проверенные
Сообщений: 36
Репутация: 16
Статус: Offline
Quote (Strider)
так как вместо OVERLAY_BLA_BLA_BLA("sdjkfshnf")

Это ясно biggrin
там скорей что то типо того должно получится

Code
if( ironsight )
{  
OVERLAY_MATERIAL "vgui/screens/vgui_overlay"  
}
 
HellMapperДата: Четверг, 02.06.2011, 16:44 | Сообщение # 9
Scout
Группа: Проверенные
Сообщений: 588
Репутация: 27
Статус: Offline
где-то так

Я живу в будущем City 15







Если Вы можете, играя в "Counter-Strike: Sourсe", посадить хедшот ножом через стену в попу своему противнику, который находится на другом конце карты, на другом сервере, и который играет в "Team Fortress 2" и находится под действием убер-заряда, то знайте, что в плане читерства вы достигли совершенства. ©IPa
 
AndreazzzДата: Суббота, 04.06.2011, 11:24 | Сообщение # 10
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
Да легко! Лично я делал это HUD'ом Если надо могу дать код.

 
Dark_AlexДата: Суббота, 04.06.2011, 12:42 | Сообщение # 11
Combat medic
Группа: Проверенные
Сообщений: 36
Репутация: 16
Статус: Offline
Quote (Andreazzz)
Если надо могу дать код.

Надо=) Буду благодарен
 
AndreazzzДата: Суббота, 04.06.2011, 13:41 | Сообщение # 12
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
Code

#include "cbase.h"
#include "hud.h"
#include "hudelement.h"
#include "hud_macros.h"
#include "hud_numericdisplay.h"
#include "iclientmode.h"
#include "c_basehlplayer.h"
#include "c_hl2_player.h"
#include "vguimatsurface/IMatSystemSurface.h"
#include "materialsystem/IMaterial.h"
#include "materialsystem/IMesh.h"
#include "materialsystem/imaterialvar.h"

#include <vgui/IScheme.h>
#include <vgui/ISurface.h>
#include <KeyValues.h>
#include <vgui_controls/AnimationController.h>

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

//-----------------------------------------------------------------------------
// Purpose:  
//-----------------------------------------------------------------------------
class CHudIronsight : public vgui::Panel, public CHudElement
{
  DECLARE_CLASS_SIMPLE( CHudIronsight, vgui::Panel );

public:
  CHudIronsight( const char *pElementName );
   
  bool    ShouldDraw( void );
  void    Init( void );
  void    LevelInit( void );

protected:
  virtual void ApplySchemeSettings(vgui::IScheme *scheme);
  virtual void Paint( void );

private:

  bool    m_bIronSights;
  bool    m_bPainted;
  float   m_flStartTime;

  CMaterialReference m_Material;
};

DECLARE_HUDELEMENT( CHudIronsight );

using namespace vgui;

//-----------------------------------------------------------------------------
// Purpose: Constructor
//-----------------------------------------------------------------------------
CHudIronsight::CHudIronsight( const char *pElementName ) : CHudElement(pElementName), BaseClass(NULL, "HudIronsights")
{
  vgui::Panel *pParent = g_pClientMode->GetViewport();
  SetParent( pParent );
   
  //SetHiddenBits( HIDEHUD_HEALTH | HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT );
}

//-----------------------------------------------------------------------------
// Purpose: standard hud element init function
//-----------------------------------------------------------------------------
void CHudIronsight::Init( void )
{
  m_bIronSights = false;
  m_bPainted = false;
  m_flStartTime = -999.0f;
  m_Material.Init( "vgui/zoom", TEXTURE_GROUP_VGUI );
}

//-----------------------------------------------------------------------------
// Purpose: standard hud element init function
//-----------------------------------------------------------------------------
void CHudIronsight::LevelInit( void )
{
  Init();
}

//-----------------------------------------------------------------------------
// Purpose: sets scheme colors
//-----------------------------------------------------------------------------
void CHudIronsight::ApplySchemeSettings( vgui::IScheme *scheme )
{
  BaseClass::ApplySchemeSettings(scheme);

  SetPaintBackgroundEnabled(false);
  SetPaintBorderEnabled(false);
  SetFgColor(scheme->GetColor("ZoomReticleColor", GetFgColor()));

  int screenWide, screenTall;
  GetHudSize(screenWide, screenTall);
  SetBounds(0, 0, screenWide, screenTall);
}

//-----------------------------------------------------------------------------
// Purpose: Save CPU cycles by letting the HUD system early cull
// costly traversal.  Called per frame, return true if thinking and  
// painting need to occur.
//-----------------------------------------------------------------------------
bool CHudIronsight::ShouldDraw( void )
{
  bool bNeedsDraw = false;

  C_BaseHLPlayer *pPlayer = dynamic_cast<C_BaseHLPlayer *>(C_BasePlayer::GetLocalPlayer());
  if ( pPlayer == NULL )
   return false;

  //C_HL2MP_Player *pHL2Player = dynamic_cast<C_HL2MP_Player*>(C_HL2MP_Player::GetLocalPlayer());
  C_BaseCombatWeapon *wpn = pPlayer->GetActiveWeapon();
  // Don't draw hud if we're using Iron Sights. -HairyPotter
  if ( wpn && wpn->m_bIsIronsighted )
  {
   bNeedsDraw = true;
  }
  /*else if ( m_bPainted )
  {
   // keep painting until state is finished
   bNeedsDraw = true;
  }*/

  return ( bNeedsDraw && CHudElement::ShouldDraw() );
}

#define    ZOOM_FADE_TIME    0.4f
//-----------------------------------------------------------------------------
// Purpose: draws the zoom effect
//-----------------------------------------------------------------------------
void CHudIronsight::Paint( void )
{
  m_bPainted = false;

  C_BaseHLPlayer *pPlayer = dynamic_cast<C_BaseHLPlayer *>(C_BasePlayer::GetLocalPlayer());
  C_BaseCombatWeapon *wpn = pPlayer->GetActiveWeapon();

  if ( pPlayer == NULL )
   return;

  if ( wpn )
  {
   if ( wpn->m_bIsIronsighted && m_bIronSights == false )
   {
    m_bIronSights = true;
    m_flStartTime = gpGlobals->curtime;
   }
   else if ( wpn->m_bIsIronsighted == false && m_bIronSights )
   {
    m_bIronSights = false;
    m_flStartTime = gpGlobals->curtime;
   }
  }

  // draw the appropriately scaled zoom animation
  float deltaTime = ( gpGlobals->curtime - m_flStartTime );
  float scale = clamp( deltaTime / ZOOM_FADE_TIME, 0.0f, 1.0f );
   
  float alpha;

  if ( m_bIronSights )
  {
   alpha = scale;
  }
  else
  {
   if ( scale >= 1.0f )
    return;

   alpha = ( 1.0f - scale ) * 0.25f;
   scale = 1.0f - ( scale * 0.5f );
  }

  Color col = GetFgColor();
  col[3] = alpha * 64;

  surface()->DrawSetColor( col );
   
  // draw zoom circles
  int wide, tall;
  GetSize(wide, tall);

  // draw the darkened edges, with a rotated texture in the four corners
  CMatRenderContextPtr pRenderContext( materials );
  pRenderContext->Bind( m_Material );
  IMesh *pMesh = pRenderContext->GetDynamicMesh( true, NULL, NULL, NULL );

  float x0 = 0.0f, x1 = wide / 2.0f, x2 = wide;
  float y0 = 0.0f, y1 = tall / 2.0f, y2 = tall;

  float uv1 = 1.0f - (1.0f / 255.0f);
  float uv2 = 0.0f + (1.0f / 255.0f);

  struct coord_t
  {
   float x, y;
   float u, v;
  };
  coord_t coords[16] =  
  {
   // top-left
   { x0, y0, uv1, uv2 },
   { x1, y0, uv2, uv2 },
   { x1, y1, uv2, uv1 },
   { x0, y1, uv1, uv1 },

   // top-right
   { x1, y0, uv2, uv2 },
   { x2, y0, uv1, uv2 },
   { x2, y1, uv1, uv1 },
   { x1, y1, uv2, uv1 },

   // bottom-right
   { x1, y1, uv2, uv1 },
   { x2, y1, uv1, uv1 },
   { x2, y2, uv1, uv2 },
   { x1, y2, uv2, uv2 },

   // bottom-left
   { x0, y1, uv1, uv1 },
   { x1, y1, uv2, uv1 },
   { x1, y2, uv2, uv2 },
   { x0, y2, uv1, uv2 },
  };

  CMeshBuilder meshBuilder;
  meshBuilder.Begin( pMesh, MATERIAL_QUADS, 4 );

  for (int i = 0; i < 16; i++)
  {
   meshBuilder.Color4f( 0.0, 0.0, 0.0, alpha );
   meshBuilder.TexCoord2f( 0, coords[i].u, coords[i].v );
   meshBuilder.Position3f( coords[i].x, coords[i].y, 0.0f );
   meshBuilder.AdvanceVertex();
  }

  meshBuilder.End();
  pMesh->Draw();  

  m_bPainted = true;
}


Если нужно для HL2DM то просто поменяй объявление игрока на нужное (те. C_BaseHLPlayer *pPlayer = dynamic_cast<C_BaseHLPlayer *>(C_BasePlayer::GetLocalPlayer()) например на C_HL2MP_Player *pPlayer = dynamic_cast<C_HL2MP_Player*>(C_HL2MP_Player::GetLocalPlayer())) и инклюд с_hl2_player.h на c_hl2mp_player.h




Было отредактированно - Andreazzz - Суббота, 04.06.2011, 13:54
 
StriderДата: Суббота, 04.06.2011, 13:43 | Сообщение # 13
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
Andreazzz,
Quote (Andreazzz)
я делал это HUD'ом

Индус штолеа? Чем тебя обычный оверлей не устроил?
 
AndreazzzДата: Суббота, 04.06.2011, 13:49 | Сообщение # 14
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
Quote (Strider)
Индус штолеа? Чем тебя обычный оверлей не устроил?

Он очень туп и прост, а тут с эффектами и не надо редактировать сторонние файлы.




Было отредактированно - Andreazzz - Суббота, 04.06.2011, 13:51
 
Dark_AlexДата: Суббота, 04.06.2011, 15:28 | Сообщение # 15
Combat medic
Группа: Проверенные
Сообщений: 36
Репутация: 16
Статус: Offline
Andreazzz,
Я насколько вижу ты это отдельным hud элементом проделывал?
Тобишь создать hud_ironshight.cpp например,и туды сунуть сие чудо

Добавлено (04.06.2011, 15:28)
---------------------------------------------
Andreazzz,
Не так всё просто как мне казалось.
Прошу меня простить,но не мог бы ты скинуть мне все файлы связанные с ironshight(если у тебя конечно сделано всё)(h.cpp)
Я насколько понял тут ещё регить команды типа ('m_bIsIronsighted) в C_BaseCombatWeapon нужно итп...

Ошибок вылезает...
например

Code
1>c:\Tutur\src\game\client\hud_ironshight.h(114) : error C2039: 'm_bIsIronsighted' : is not a member of 'C_BaseCombatWeapon'
1>        c:\Tutur\src\game\shared\basecombatweapon_shared.h(130) : see declaration of 'C_BaseCombatWeapon'
1>c:\Tutur\src\game\client\hud_ironshight.h(143) : error C2039: 'm_bIsIronsighted' : is not a member of 'C_BaseCombatWeapon'
1>        c:\Tutur\src\game\shared\basecombatweapon_shared.h(130) : see declaration of 'C_BaseCombatWeapon'
1>c:\Tutur\src\game\client\hud_ironshight.h(148) : error C2039: 'm_bIsIronsighted' : is not a member of 'C_BaseCombatWeapon'
1>        c:\Tutur\src\game\shared\basecombatweapon_shared.h(130) : see declaration of 'C_BaseCombatWeapon'
1>..\shared\baseviewmodel_shared.cpp(200) : error C2601: 'C_BaseViewModel::SetControlPanelsActive' : local function definitions are illegal
1>        ..\shared\baseviewmodel_shared.cpp(171): this line contains a '{' which has not yet been matched
1>..\shared\baseviewmodel_shared.cpp(217) : error C2601: 'C_BaseViewModel::SpawnControlPanels' : local function definitions are illegal
1>        ..\shared\baseviewmodel_shared.cpp(171): this line contains a '{' which has not yet been matched
1>..\shared\baseviewmodel_shared.cpp(333) : error C2601: 'C_BaseViewModel::DestroyControlPanels' : local function definitions are illegal
1>        ..\shared\baseviewmodel_shared.cpp(171): this line contains a '{' which has not yet been matched
1>..\shared\baseviewmodel_shared.cpp(350) : error C2601: 'C_BaseViewModel::SetOwner' : local function definitions are illegal
1>        ..\shared\baseviewmodel_shared.cpp(171): this line contains a '{' which has not yet been matched
1>..\shared\baseviewmodel_shared.cpp(363) : error C2601: 'C_BaseViewModel::SetIndex' : local function definitions are illegal
1>        ..\shared\baseviewmodel_shared.cpp(171): this line contains a '{' which has not yet been matched
1>..\shared\baseviewmodel_shared.cpp(372) : error C2601: 'C_BaseViewModel::ViewModelIndex' : local function definitions are illegal
1>        ..\shared\baseviewmodel_shared.cpp(171): this line contains a '{' which has not yet been matched
1>..\shared\baseviewmodel_shared.cpp(380) : error C2601: 'C_BaseViewModel::AddEffects' : local function definitions are illegal
1>        ..\shared\baseviewmodel_shared.cpp(171): this line contains a '{' which has not yet been matched
1>..\shared\baseviewmodel_shared.cpp(393) : error C2601: 'C_BaseViewModel::RemoveEffects' : local function definitions are illegal
1>        ..\shared\baseviewmodel_shared.cpp(171): this line contains a '{' which has not yet been matched
1>..\shared\baseviewmodel_shared.cpp(407) : error C2601: 'C_BaseViewModel::SetWeaponModel' : local function definitions are illegal
1>        ..\shared\baseviewmodel_shared.cpp(171): this line contains a '{' which has not yet been matched
1>..\shared\baseviewmodel_shared.cpp(443) : error C2601: 'C_BaseViewModel::GetOwningWeapon' : local function definitions are illegal
1>        ..\shared\baseviewmodel_shared.cpp(171): this line contains a '{' which has not yet been matched
1>..\shared\baseviewmodel_shared.cpp(452) : error C2601: 'C_BaseViewModel::SendViewModelMatchingSequence' : local function definitions are illegal
1>        ..\shared\baseviewmodel_shared.cpp(171): this line contains a '{' which has not yet been matched
1>c:\Tutur\src\game\client\ivieweffects.h(52) : error C2624: 'C_BaseViewModel::Spawn::IViewEffects' : local classes cannot be used to declare 'extern' variables
1>..\shared\baseviewmodel_shared.cpp(480) : error C2601: 'C_BaseViewModel::CalcViewModelView' : local function definitions are illegal
1>        ..\shared\baseviewmodel_shared.cpp(171): this line contains a '{' which has not yet been matched
1>..\shared\baseviewmodel_shared.cpp(530) : error C2601: 'C_BaseViewModel::CalcViewModelLag' : local function definitions are illegal
1>        ..\shared\baseviewmodel_shared.cpp(171): this line contains a '{' which has not yet been matched
1>..\shared\baseviewmodel_shared.cpp(597) : error C2267: 'RecvProxy_Weapon' : static functions with block scope are illegal
1>..\shared\baseviewmodel_shared.cpp(597) : error C2601: 'RecvProxy_Weapon' : local function definitions are illegal
1>        ..\shared\baseviewmodel_shared.cpp(171): this line contains a '{' which has not yet been matched
1>..\shared\baseviewmodel_shared.cpp(616) : error C2267: 'CCBaseViewModelFactory' : static functions with block scope are illegal
1>..\shared\baseviewmodel_shared.cpp(616) : error C2601: 'CCBaseViewModelFactory' : local function definitions are illegal
1>        ..\shared\baseviewmodel_shared.cpp(171): this line contains a '{' which has not yet been matched
1>..\shared\baseviewmodel_shared.cpp(618) : error C2870: 'DT_BaseViewModel' : a namespace definition must appear either at file scope or immediately within another namespace definition
1>..\shared\baseviewmodel_shared.cpp(618) : error C2655: 'C_BaseViewModel::m_pClassRecvTable' : definition or redeclaration illegal in current scope
1>        c:\tutur\src\game\shared\baseviewmodel_shared.h(38) : see declaration of 'C_BaseViewModel::m_pClassRecvTable'
1>..\shared\baseviewmodel_shared.cpp(618) : error C2086: 'RecvTable *C_BaseViewModel::m_pClassRecvTable' : redefinition
1>        c:\tutur\src\game\shared\baseviewmodel_shared.h(38) : see declaration of 'm_pClassRecvTable'
1>..\shared\baseviewmodel_shared.cpp(618) : error C2267: '_C_BaseViewModel_CreateObject' : static functions with block scope are illegal
1>..\shared\baseviewmodel_shared.cpp(618) : error C2086: 'ClientClass __g_C_BaseViewModelClientClass' : redefinition
1>        ..\shared\baseviewmodel_shared.cpp(618) : see declaration of '__g_C_BaseViewModelClientClass'
1>..\shared\baseviewmodel_shared.cpp(620) : error C2951: template declarations are only permitted at global, namespace, or class scope
1>..\shared\baseviewmodel_shared.cpp(620) : error C2870: 'DT_BaseViewModel' : a namespace definition must appear either at file scope or immediately within another namespace definition
1>..\shared\baseviewmodel_shared.cpp(620) : error C2951: template declarations are only permitted at global, namespace, or class scope
1>..\shared\baseviewmodel_shared.cpp(620) : error C2870: 'DT_BaseViewModel' : a namespace definition must appear either at file scope or immediately within another namespace definition
1>..\shared\baseviewmodel_shared.cpp(620) : error C2086: 'RecvTable DT_BaseViewModel::g_RecvTable' : redefinition
1>        ..\shared\baseviewmodel_shared.cpp(618) : see declaration of 'DT_BaseViewModel::g_RecvTable'
1>..\shared\baseviewmodel_shared.cpp(620) : fatal error C1506: unrecoverable block scoping error
 
HellMapperДата: Суббота, 04.06.2011, 18:18 | Сообщение # 16
Scout
Группа: Проверенные
Сообщений: 588
Репутация: 27
Статус: Offline
Для начала надо бы сам прицел через мушку сделать, а потом подключить и его.

Я живу в будущем City 15







Если Вы можете, играя в "Counter-Strike: Sourсe", посадить хедшот ножом через стену в попу своему противнику, который находится на другом конце карты, на другом сервере, и который играет в "Team Fortress 2" и находится под действием убер-заряда, то знайте, что в плане читерства вы достигли совершенства. ©IPa
 
Dark_AlexДата: Суббота, 04.06.2011, 22:10 | Сообщение # 17
Combat medic
Группа: Проверенные
Сообщений: 36
Репутация: 16
Статус: Offline
HellMapper,
Ясное дело,просто смотря как делать. Есть разные туторы.

Добавлено (04.06.2011, 22:10)
---------------------------------------------
А если подключать тот код что написал добрый Andreazzz, (за что ему большое спасибо) то нужно и прицел создавать соответственно как это делал он.

 
AndreazzzДата: Воскресенье, 05.06.2011, 10:03 | Сообщение # 18
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
Dark_Alex, я делал сие чудо по альтернативному туториалу http://developer.valvesoftware.com/wiki/Adding_Ironsights

 
Dark_AlexДата: Воскресенье, 05.06.2011, 12:08 | Сообщение # 19
Combat medic
Группа: Проверенные
Сообщений: 36
Репутация: 16
Статус: Offline
Andreazzz,
Вот. Буду делать,хоть таким образом и сложнее,но за-то появляется возможностей по изменению больше.
Кстате,когда-то месяца три назад пытался по этому тутору сделать,вот мороки то было biggrin
В итоге так и не сделал happy
Буду делать сейчас,вдруг получится
 
StriderДата: Воскресенье, 05.06.2011, 12:38 | Сообщение # 20
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
Я, кстати, по этому тутору и делал. + на все оружия сделал огромный разброс если стрелять без мушки
 
Форум » Игровая мастерская » Программирование » Ironsight Overlay
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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