HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Нубские вопросы от <censored> и других нубов
Чтобы не создавать сто тем
7 голосов
Страницы (260): « Первая ... « 147 148 149 150 [151] 152 153 154 155 » ... Последняя »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Цитата:
Дядя Миша писал:
там где-то этот буффер будет задан как 500-600 милисекунд. Меньше ста ставить не рекомендую.

C++ Source Code:
pFMOD->FSOUND_SetBufferSize(100);

Ориентировался на спирит 1.9. Тут 100 мс, как видно. Всё равно лаг есть. Конечно, я не тестировал это дело под WON-версией халфы. МБ там быстрее срабатывает, ХЗ. А теперь вопросик к линуксоидам:
C++ Source Code:
pFMOD->FSOUND_SetOutput(FSOUND_OUTPUT_ALSA);

Альса будет выводить звук в любом случае? Стим требует установку OSS. И, судя по моим наблюдениям, стим-халфа под линуксом выводит свой звук именно через OSS. Откуда ещё появился бы даунсемплинг? Пока не исправишь conf-файл OSS на свежеустановленном дебиане, звуки в стим халфе как через подушку, приглушённые.

Сообщить модератору | | IP: Записан
Сообщение: 192864

Старое сообщение 27-04-2020 14:43
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Я этот фмод давно уже дропнул и не жалею.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 192866

Старое сообщение 27-04-2020 15:03
-
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 1077

Рейтинг



Безопасно ли удалять энтитю, которая получает DeathNotice'ы? Например, monstermaker. Возможна ли ситуация, что DeathNotice получит энтитя, созданная позже и занявшая тот же эдикт?

__________________
I'm on github
I'm on opendesktop.org

Сообщить модератору | | IP: Записан
Сообщение: 192871

Старое сообщение 27-04-2020 17:55
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



FreeSlave вот для того и существует EHANDLE. Чтобы гарантировать, что это та самая энтитя, а не какая-то другая в том же слоте.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 192877

Старое сообщение 27-04-2020 19:45
-
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 1077

Рейтинг



Так-то да. Просто смутило, что в коде именно owner юзается. Хотя вряд ли монстрмэйкеры кто-то удаляет. Да и помимо них DeathNotice разве что Big Momma использует.

__________________
I'm on github
I'm on opendesktop.org

Сообщить модератору | | IP: Записан
Сообщение: 192891

Старое сообщение 27-04-2020 22:21
- За что?
BALISTA
Новичок

Дата регистрации: Jan 2017
Проживает: -
Сообщений: 20

Рейтинг



Приветствую всех! Такой вопрос, с помощью местного туториала удалил клиентские оружия, и заодно перенёс код фомки полностью на сервер.
Вот собственно проблема: декаль на стенке ставится ровно один раз, при первом ударе, больше они не появляются. Может кто сталкивался с таким, посоветуйте навскидку что это может быть или может я чего сломал)

Сообщить модератору | | IP: Записан
Сообщение: 192921

Старое сообщение 28-04-2020 19:59
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



C++ Source Code:
SetThink( &CCrowbar::Smack );
pev->nextthink = UTIL_WeaponTimeBase() + 0.2;

UTIL_WeaponTimeBase ты поправил? При удалении клиентских пушек это нужно обязательно делать. Потому что оно всегда возвращает 0.0 для клиентских пушек и gpGlobals->time для серверных.

Сообщить модератору | | IP: Записан
Сообщение: 192936

Старое сообщение 29-04-2020 05:35
- За что?
BALISTA
Новичок

Дата регистрации: Jan 2017
Проживает: -
Сообщений: 20

Рейтинг



Цитата:
Ku2zoff писал:
UTIL_WeaponTimeBase ты поправил?

В каком смысле? Немного не понял.
Я думаю нагляднее будет предоставить код
C++ Source Code:
1
/****
2
*
3
*	Copyright &copy; 1996-2002, Valve LLC. All rights reserved.
4
*
5
*	This product contains software technology licensed from Id
6
*	Software, Inc. ("Id Technology"). Id Technology &copy; 1996 Id Software, Inc.
7
*	All Rights Reserved.
8
*
9
*   Use, distribution, and modification of this source code and/or resulting
10
*   object code is restricted to non-commercial enhancements to products from
11
*   Valve LLC. All other use, distribution, or modification is prohibited
12
*   without written permission from Valve LLC.
13
*
14
****/
15
 
16
#include "extdll.h"
17
#include "util.h"
18
#include "cbase.h"
19
#include "monsters.h"
20
#include "weapons.h"
21
#include "nodes.h"
22
#include "player.h"
23
#include "gamerules.h"
24
 
25
#define	CROWBAR_BODYHIT_VOLUME 128
26
#define	CROWBAR_WALLHIT_VOLUME 512
27
 
28
class CCrowbar : public CBasePlayerWeapon
29
{
30
public:
31
  void Spawn();
32
  void Precache();
33
  int  GetItemInfo(ItemInfo *p);
34
  void EXPORT Smack();
35
  void PrimaryAttack();
36
  void SecondaryAttack();
37
  BOOL Deploy();
38
  void Holster();
39
  void WeaponIdle();
40
  int  m_iSwing;
41
  TraceResult m_trHit;
42
};
43
 
44
LINK_ENTITY_TO_CLASS(weapon_crowbar, CCrowbar);
45
 
46
enum crowbar_e
47
{
48
  CROWBAR_IDLE1 = 0,
49
  CROWBAR_IDLE2,
50
  CROWBAR_IDLE3,
51
  CROWBAR_DRAW,
52
  CROWBAR_HOLSTER,
53
  CROWBAR_MISS1,
54
  CROWBAR_HIT1,
55
  CROWBAR_MISS2,
56
  CROWBAR_HIT2,
57
  CROWBAR_MISS3,
58
  CROWBAR_HIT3
59
};
60
 
61
void CCrowbar::Spawn()
62
{
63
  Precache();
64
  m_iId = WEAPON_CROWBAR;
65
  SET_MODEL(ENT(pev), "models/w_crowbar.mdl");
66
  m_iClip = -1;
67
 
68
  FallInit(); // Get ready to fall down.
69
}
70
 
71
void CCrowbar::Precache()
72
{
73
  PRECACHE_MODEL("models/v_crowbar.mdl");
74
  PRECACHE_MODEL("models/w_crowbar.mdl");
75
  PRECACHE_MODEL("models/p_crowbar.mdl");
76
 
77
  PRECACHE_SOUND("weapons/cbar_hit1.wav");
78
  PRECACHE_SOUND("weapons/cbar_hit2.wav");
79
  PRECACHE_SOUND("weapons/cbar_hitbod1.wav");
80
  PRECACHE_SOUND("weapons/cbar_hitbod2.wav");
81
  PRECACHE_SOUND("weapons/cbar_hitbod3.wav");
82
  PRECACHE_SOUND("weapons/cbar_miss1.wav");
83
}
84
 
85
int CCrowbar::GetItemInfo(ItemInfo *p)
86
{
87
  p->pszName	 = STRING(pev->classname);
88
  p->pszAmmo1	 = NULL;
89
  p->iMaxAmmo1 = -1;
90
  p->pszAmmo2	 = NULL;
91
  p->iMaxAmmo2 = -1;
92
  p->iMaxClip	 = CROWBAR_MAX_CLIP;
93
  p->iSlot	 = 0;
94
  p->iPosition = 0;
95
  p->iId		 = WEAPON_CROWBAR;
96
  p->iWeight	 = CROWBAR_WEIGHT;
97
  return 1;
98
}
99
 
100
BOOL CCrowbar::Deploy()
101
{
102
  return DefaultDeploy("models/v_crowbar.mdl", "models/p_crowbar.mdl", CROWBAR_DRAW, "crowbar");
103
}
104
 
105
void CCrowbar::Holster()
106
{
107
  m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.5;
108
  SendWeaponAnim(CROWBAR_HOLSTER);
109
}
110
 
111
void CCrowbar::Smack()
112
{
113
  DecalGunshot(&m_trHit, BULLET_PLAYER_CROWBAR);
114
}
115
 
116
void CCrowbar::PrimaryAttack()
117
{
118
  TraceResult tr;
119
 
120
  UTIL_MakeVectors(m_pPlayer->pev->v_angle);
121
  Vector vecSrc = m_pPlayer->GetGunPosition();
122
  Vector vecEnd = vecSrc + gpGlobals->v_forward * 32;
123
 
124
  UTIL_TraceLine(vecSrc, vecEnd, dont_ignore_monsters, ENT(m_pPlayer->pev), &tr);
125
 
126
  // Player "shoot" animation.
127
  m_pPlayer->SetAnimation(PLAYER_ATTACK1);
128
 
129
  // Always play swing sound.
130
  EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/cbar_miss1.wav", 1, ATTN_NORM, 0, 98 + RANDOM_LONG(0,3));
131
 
132
  if (tr.flFraction >= 1.0)
133
  {
134
    UTIL_TraceHull(vecSrc, vecEnd, dont_ignore_monsters, head_hull, ENT(m_pPlayer->pev), &tr);
135
    if (tr.flFraction < 1.0)
136
    {
137
      // Calculate the point of intersection of the line (or hull) and the object we hit.
138
      // This is and approximation of the "best" intersection.
139
      CBaseEntity *pHit = CBaseEntity::Instance(tr.pHit);
140
      if (!pHit || pHit->IsBSPModel())
141
        FindHullIntersection(vecSrc, tr, VEC_DUCK_HULL_MIN, VEC_DUCK_HULL_MAX, m_pPlayer->edict());
142
      vecEnd = tr.vecEndPos; // This is the point on the actual surface (the hull could have hit space).
143
    }
144
  }
145
 
146
  if (tr.flFraction >= 1.0)
147
  {
148
    // Miss.
149
    switch((m_iSwing++) % 3)
150
    {
151
    case 0:
152
        SendWeaponAnim(CROWBAR_MISS1);
153
      break;
154
    case 1:
155
        SendWeaponAnim(CROWBAR_MISS2);
156
      break;
157
    case 2:
158
        SendWeaponAnim(CROWBAR_MISS3);
159
      break;
160
    }
161
 
162
    m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.5;
163
  }
164
  else
165
  {
166
    // Hit.
167
    switch((m_iSwing++) % 3)
168
    {
169
    case 0:
170
        SendWeaponAnim(CROWBAR_HIT1);
171
      break;
172
    case 1:
173
        SendWeaponAnim(CROWBAR_HIT2);
174
      break;
175
    case 2:
176
        SendWeaponAnim(CROWBAR_HIT3);
177
      break;
178
    }
179
 
180
    CBaseEntity *pEntity = CBaseEntity::Instance(tr.pHit);
181
 
182
    ClearMultiDamage();
183
 
184
    pEntity->TraceAttack(m_pPlayer->pev, gSkillData.plrDmgCrowbar, gpGlobals->v_forward, &tr, DMG_CLUB | DMG_NEVERGIB);
185
 
186
    ApplyMultiDamage(m_pPlayer->pev, m_pPlayer->pev);
187
 
188
    m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.25;
189
 
190
    // Play thwack, smack, or dong sound.
191
    float flVol = 1.0;
192
    int fHitWorld = TRUE;
193
 
194
    if (pEntity)
195
    {
196
      if (pEntity->Classify() != CLASS_NONE && pEntity->Classify() != CLASS_MACHINE)
197
      {
198
        // Play thwack or smack sound.
199
        switch(RANDOM_LONG(0,2))
200
        {
201
        case 0:
202
            EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/cbar_hitbod1.wav", 1, ATTN_NORM);
203
          break;
204
        case 1:
205
            EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/cbar_hitbod2.wav", 1, ATTN_NORM);
206
          break;
207
        case 2:
208
            EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/cbar_hitbod3.wav", 1, ATTN_NORM);
209
          break;
210
        }
211
        m_pPlayer->m_iWeaponVolume = CROWBAR_BODYHIT_VOLUME;
212
 
213
        if (!pEntity->IsAlive())
214
          m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.25;
215
        else
216
          flVol = 0.1;
217
 
218
        fHitWorld = FALSE;
219
      }
220
    }
221
 
222
    // Play texture hit sound.
223
    // UNDONE: Calculate the correct point of intersection when we hit with the hull instead of the line.
224
    if (fHitWorld)
225
    {
226
      float fvolbar = TEXTURETYPE_PlaySound(&tr, vecSrc, vecSrc + (vecEnd-vecSrc) * 2, BULLET_PLAYER_CROWBAR);
227
 
228
      if (g_pGameRules->IsMultiplayer())
229
      {
230
        // Override the volume here, cause we don't play texture sounds in multiplayer,
231
        // and fvolbar is going to be 0 from the above call.
232
        fvolbar = 1;
233
      }
234
 
235
      // Also play crowbar strike.
236
      switch(RANDOM_LONG(0,1))
237
      {
238
      case 0:
239
          EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/cbar_hit1.wav", fvolbar, ATTN_NORM, 0, 98 + RANDOM_LONG(0,3));
240
        break;
241
      case 1:
242
          EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/cbar_hit2.wav", fvolbar, ATTN_NORM, 0, 98 + RANDOM_LONG(0,3));
243
        break;
244
      }
245
 
246
      m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.25;
247
    }
248
    // Delay the decal a bit.
249
    m_trHit = tr;
250
    SetThink(&CCrowbar::Smack);
251
    m_pPlayer->m_iWeaponVolume = flVol * CROWBAR_WALLHIT_VOLUME;
252
  }
253
  m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat(m_pPlayer->random_seed, 10, 15);
254
}
255
 
256
void CCrowbar::SecondaryAttack()
257
{
258
  PrimaryAttack();
259
}
260
 
261
void CCrowbar::WeaponIdle()
262
{
263
  if(m_flTimeWeaponIdle < UTIL_WeaponTimeBase())
264
  {
265
    int iAnim;
266
    float flRand = UTIL_SharedRandomFloat(m_pPlayer->random_seed, 0, 1);
267
    if(flRand > 0.9)
268
    {
269
      iAnim = CROWBAR_IDLE2;
270
      m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 160.0 / 30.0;
271
    }
272
    else
273
    {
274
      if(flRand > 0.5)
275
      {
276
        iAnim = CROWBAR_IDLE1;
277
        m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 70.0 / 25.0;
278
      }
279
      else
280
      {
281
        iAnim = CROWBAR_IDLE3;
282
        m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 160.0 / 30.0;
283
      }
284
    }
285
    SendWeaponAnim(iAnim);
286
  }
287
}


P.S Здесь не хватает куска кода с FindHullIntersection, я перенёс его в weapons.cpp

Отредактировано BALISTA 29-04-2020 в 11:56

Сообщить модератору | | IP: Записан
Сообщение: 192954

Старое сообщение 29-04-2020 11:54
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



C++ Source Code:
1
// Delay the decal a bit.
2
m_trHit = tr;
3
SetThink(&CCrowbar::Smack);
4
m_pPlayer->m_iWeaponVolume = flVol * CROWBAR_WALLHIT_VOLUME;
5
}
6
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat(m_pPlayer->random_seed, 10, 15);

Где у тебя pev->nextthink? У тебя вызывается SetThink. А интервал до следующего тчинка не указан. Вот монтировка и тчинкает только один раз. Конечно, код с тчинком сам по себе странный. Не знаю, зачем вэлв написали именно так. Можно ведь просто вызывать рисование декалей из кода атаки.

Добавлено 29-04-2020 в 20:58:

Правильнее будет вот так:
C++ Source Code:
1
}
2
m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.25;
3
}
4
// Delay the decal a bit.
5
m_trHit = tr;
6
DecalGunshot(&m_trHit, BULLET_PLAYER_CROWBAR);
7
m_pPlayer->m_iWeaponVolume = flVol * CROWBAR_WALLHIT_VOLUME;
8
}
9
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat(m_pPlayer->random_seed, 10, 15);
10
}
Выкинь функцию Smack, она не нужна, раз ты от всех других тчинков избавился.

Отредактировано Ku2zoff 29-04-2020 в 13:37

Сообщить модератору | | IP: Записан
Сообщение: 192955

Старое сообщение 29-04-2020 13:58
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Smack это типа маленькая задержка появления декали, чтобы анимация успела проиграться.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 192959

Старое сообщение 29-04-2020 14:06
-
Vadiman
Клавиатурщик

Дата регистрации: Jun 2013
Проживает: Замок Димитреску
Сообщений: 81

Рейтинг



Всем привет! Подскажите кто знает, как сделать так, чтобы npc "хуже" слышали топот игрока? Например при приближении приходится не только шифт зажимать, но еще и приседать, дабы подкрасться поближе. А хотелось бы обходиться только шифтом, да и в целом бег игрока сделать тише для врагов.

Сообщить модератору | | IP: Записан
Сообщение: 192962

Старое сообщение 29-04-2020 14:36
- За что?
BALISTA
Новичок

Дата регистрации: Jan 2017
Проживает: -
Сообщений: 20

Рейтинг



Цитата:
Ku2zoff писал:
Конечно, код с тчинком сам по себе странный.

Спасибо за разъяснения, теперь больше понимаю как это должно работать)

Сообщить модератору | | IP: Записан
Сообщение: 192964

Старое сообщение 29-04-2020 14:51
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Цитата:
Vadiman писал:
как сделать так, чтобы npc "хуже" слышали топот игрока?

C++ Source Code:
float CBaseMonster::HearingSensitivity( void );

Функция виртуальная, у всех монстров по дефолту 1.0, только у тентакля 2.0.

Добавлено 29-04-2020 в 22:09:

Вообще, гляди функцию void CBaseMonster :: Listen ( void ). Там все условия, как слышит монстр. И ещё void CBasePlayer :: UpdatePlayerSound ( void ), если тебя интересует именно игрок.

Отредактировано Ku2zoff 29-04-2020 в 15:11

Сообщить модератору | | IP: Записан
Сообщение: 192965

Старое сообщение 29-04-2020 15:09
- За что?
BALISTA
Новичок

Дата регистрации: Jan 2017
Проживает: -
Сообщений: 20

Рейтинг



Цитата:
Vadiman писал:
npc "хуже" слышали топот игрока

Вот кстати тоже прикольная не реализованая фича, при приседании костюм переключается в стелс режим, и шаги либо слышно очень тихо либо их нет совсем, что позволяет немного разнообразить геймплей: например кинуть сатчел в толпу, использовать арбалет или глок с глушителем.

Отредактировано BALISTA 29-04-2020 в 15:41

Сообщить модератору | | IP: Записан
Сообщение: 192967

Старое сообщение 29-04-2020 15:40
- За что?
Vadiman
Клавиатурщик

Дата регистрации: Jun 2013
Проживает: Замок Димитреску
Сообщений: 81

Рейтинг



Цитата:
Ku2zoff писал:
C++ Source Code:
float CBaseMonster::HearingSensitivity( void );

Функция виртуальная, у всех монстров по дефолту 1.0, только у тентакля 2.0.

Добавлено 29-04-2020 в 22:09:

Вообще, гляди функцию void CBaseMonster :: Listen ( void ). Там все условия, как слышит монстр. И ещё void CBasePlayer :: UpdatePlayerSound ( void ), если тебя интересует именно игрок.

Спасибо! Посмотрю.

И еще давно хотел спросить:
У меня у глока на альтернативную атаку достается второй пистолет (меняется точность и скорость стрельбы). Можно ли при этом как-то менять количество патронов в обойме? Сам я не догнал как это сделать, таким образом, по идее, со вторым стволом количество патронов должно в 2 раза увеличиться и уменьшиться обратно, если снова нажать вторую атаку.

Сообщить модератору | | IP: Записан
Сообщение: 192987

Старое сообщение 30-04-2020 10:53
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 18:20. Новая тема    Ответить
Страницы (260): « Первая ... « 147 148 149 150 [151] 152 153 154 155 » ... Последняя »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Нубские вопросы от <censored> и других нубов
Чтобы не создавать сто тем
7 голосов
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024