HLFX.Ru Forum
Показать все 45 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Вопросы по коду (https://hlfx.ru/forum/showthread.php?threadid=4636)


Отправлено demoth 17-07-2015 в 08:35:

Half-Life Вопросы по коду

Всем добрый день

Накопилось несколько вопросов по коду (добавляю потом ещё):
1) где можно (и можно ли) установить pev->renderfx для v_ и p_ моделек? (Хочется поставить glowshell). У меня получилось сделать glowshell у монстров и итемов на полу

2) куда добавить новые поля монстрам и игрокам? (К примеру в entvars или CBaseMonster) Надо добавить уровень и XP

Спасибо


Отправлено XaeroX 17-07-2015 в 08:44:

1) Да, можно. Применять его надо в вьюмодели на клиенте.
Например, скопировать с игрока вот так:

C++ Source Code:
1
void V_CalcGunAngle ( struct ref_params_s *pparams )
2
{
3
  cl_entity_t *viewent;
4
 
5
  viewent = gEngfuncs.GetViewModel();
6
  if ( !viewent )
7
    return;
8
 
9
  // ...оригинальный код...
10
 
11
  //add renderfx
12
  cl_entity_t	*ent = gEngfuncs.GetLocalPlayer();
13
  if (ent)
14
  {
15
    viewent->curstate.renderfx = ent->curstate.renderfx;
16
    viewent->curstate.renderamt = ent->curstate.renderamt;
17
    viewent->curstate.rendercolor.r = ent->curstate.rendercolor.r;
18
    viewent->curstate.rendercolor.g = ent->curstate.rendercolor.g;
19
    viewent->curstate.rendercolor.b = ent->curstate.rendercolor.b;
20
  }
21
}

2) Можно добавлять новые поля в класс, либо же использовать какие-либо незанятые поля в entvars. Последние можно передавать по сети на клиент, например.


Отправлено demoth 17-07-2015 в 21:55:

у вьюмодели получилось установить эффект.

а как быть с p_ моделькой? та которая отображается в руках у других игроков?

Добавлено 18-07-2015 в 00:55:

вопрос по хаду:

я создал VGUI менюшку, хочу для примера вывести туда хп игрока (мультиплеер), как получить указатель на entvars игрока (если он вообще есть на клиенте)? пробовал через gEngfuncs.GetLocalPlayer()->curstate.health, но там 0


Отправлено XaeroX 17-07-2015 в 23:15:

Цитата:
demoth писал:
если он вообще есть на клиенте

Нет.
Цитата:
demoth писал:
пробовал через gEngfuncs.GetLocalPlayer()->curstate.health, но там 0

Смотри содержимое gHUD.m_Health.


Отправлено Ku2zoff 17-07-2015 в 23:38:

Цитата:
demoth писал:
gEngfuncs.GetLocalPlayer()->curstate.health, но там 0

Потому что не передаётся по сети. В функции AddToFullPack соответствующая строчка есть, а в delta.lst в секции Player_Encode нету. Зато есть в секции clientdata_t. Но! При обработке входящих энтварсов на клиенте в функции HUD_ProcessPlayerState здоровье не обрабатывается. В HUD_TxferPredictionData тоже. Поэтому pev->health на клиенте получить невозможно. Но если дописать по строчке в нужные функции на клиенте, и добавить строчку в delta.lst, то всё будет приходить. Это полезно для всяких vuser'ов и iuser'ов, которые не передаются пользовательскими мессагами. И для нелокальных игроков. Для локального же игрока, удобнее брать инфу из ХУДа, как и подсказал XaeroX.

Добавлено 18-07-2015 в 05:38:

Цитата:
demoth писал:
а как быть с p_ моделькой?

C++ Source Code:
1
int CStudioModelRenderer::StudioDrawPlayer( int flags, entity_state_t *pplayer )
2
{
3
 
4
  // код-код-код
5
 
6
  if (pplayer->weaponmodel)
7
  {
8
    cl_entity_t saveent = *m_pCurrentEntity;
9
 
10
    model_t *pweaponmodel = IEngineStudio.GetModelByIndex( pplayer->weaponmodel );
11
 
12
    m_pStudioHeader = (studiohdr_t *)IEngineStudio.Mod_Extradata (pweaponmodel);
13
    IEngineStudio.StudioSetHeader( m_pStudioHeader );
14
 
15
    StudioMergeBones( pweaponmodel );
16
 
17
    IEngineStudio.StudioSetupLighting (&lighting);
18
 
19
    [color=orange][b]StudioRenderModel( );[/b][/color]
20
 
21
    StudioCalcAttachments( );
22
 
23
    *m_pCurrentEntity = saveent;
24
  }
25
 
26
  // код-код-код
27
 
28
}

Перед строчкой StduioRenderModel(); вставляешь:
C++ Source Code:
m_pCurrentEntity->curstate.renderfx = pplayer->renderfx;
m_pCurrentEntity->curstate.renderamt = pplayer->renderamt;
m_pCurrentEntity->curstate.rendercolor.r = pplayer->rendercolor.r;
m_pCurrentEntity->curstate.rendercolor.g = pplayer->rendercolor.g;
m_pCurrentEntity->curstate.rendercolor.b = pplayer->rendercolor.b;

Должно заработать.


Отправлено ~ X ~ 18-07-2015 в 09:16:

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

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено demoth 18-07-2015 в 19:40:

ок, спасибо за разъяснения

>Вальва ж нам дельты дала
>упаковка энтитией
>дельты

буду признателен если подскажете где почитать про эти вещи (можно на английском). Сам ничего не нагуглил


Отправлено XaeroX 18-07-2015 в 20:15:

demoth
Файл "NetworkEntity.doc" в Half-Life SDK.
Если у тебя его нет, могу выложить.


Отправлено demoth 18-07-2015 в 20:21:

XaeroX,

есть)


Отправлено ~ X ~ 18-07-2015 в 20:23:

В двух словах, "дельта" (да, из математики пошло) - это каждый кадр просчёт разницы между состояниями одной структуры данных и пересылки разницы адресатам. Поскольку во всех entity_state/clientdata (или как их там) есть health, то лучше здоровье передевать через них, а не городить MESSAGE_BEGIN() как было в ХЛ 1015. Я у себя в XDM это запилил и оно работает. Сэкономило мне парочку message index-ов и избавило от шелухи в виде отдельных пакетов с их заголовками, обёртками, задержками, порядками... В общем, чего и вам желаю

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 18-07-2015 в 20:28:

~ X ~
У тебя каждый кадр посылается один бит информации "поле health не изменилось". Каждый кадр, Карл! Так уж устроена дельта.
А т.к. health меняется относительно редко, то не логичнее ли посылать его именно отдельной мессагой? Вот и в Valve так рассудили.


Отправлено demoth 18-07-2015 в 23:44:

да, после такого чтива не поспишь..
допустим хочу видеть какое то кастомное поле в окошке

1) я добавляю в какую то из этих сущностей поле

clientdata_t ( в эту скорее всего да?)
entity_state_t
entity_state_player_t
custom_entity_state_t

2) добавляю необходумую дельту в delta.lst

3) как то манипулирую новым полем на сервере

4) основной вопрос - как и на что мне надо получить указатель в соответсвующем Update() окошка чтобы увидеть новое поле (допустим у локального игрока)?


Отправлено XaeroX 18-07-2015 в 23:48:

Цитата:
demoth писал:
я добавляю в какую то из этих сущностей поле

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


Отправлено ILZM 19-07-2015 в 15:21:

Не понел. Разве не посылается ли delta в момент, когда она изменилась, а не во время каждого кадра? Например, добавил я в дельту pev->iuser4. Теперь оно каждый кадр отправляться будет что ли, даже если оно меняется раз в 3 секунды? Может ли быть, что оно не дошло до клиента?
И ещё. Попробовал я в моде убрать все клиентские события выстрелов оружия и собрал все сообщения MESSAGE в одну. Там же отправляется аж 3 сообщения при выстреле (анимация оружия, TE_bounceshell и количество патронов). Может ли быть, что это окончательно не дойдёт до клиента?


Отправлено XaeroX 19-07-2015 в 15:48:

Цитата:
ILZM писал:
Разве не посылается ли delta в момент, когда она изменилась, а не во время каждого кадра?

Дельта - это разница между кадрами, а не между значениями переменных.
Мне лень вдаваться в детали (я же не Дядя миша), но часто бывает так, что нужно посылать информацию типа "переменная не изменилась, Карл", и это один бит. Либо "изменилась", это тоже один бит, а потом новое значение переменной.
Цитата:
ILZM писал:
Может ли быть, что оно не дошло до клиента?

Конечно, может быть. Дельта - ненадёжное сообщение. Но т.к. она шлётся каждый кадр, то рано или поздно таки дойдёт.
Цитата:
ILZM писал:
Может ли быть, что это окончательно не дойдёт до клиента?

Зависит от типа мультикаста. Если тип надёжный (MSG_ONE), то дойдёт наверняка (по крайней мере, будет пересылаться раз за разом при потерях, и если уж совсем не доходит - клиент будет дропнут). Если ненадёжный (MSG_BROADCAST), то ничего не гарантируется, двиг пошлёт сообщение один раз и забудет как про страшный сон.


Отправлено ILZM 19-07-2015 в 16:17:

XaeroX
А что лучше. events или ненадёжная мессага в плане оптимизации? Ведь всё равно же проиграется ли на клиенте анимация или нет.


Отправлено XaeroX 19-07-2015 в 17:00:

ILZM
Эвенты тоже ненадёжные, если не указан флаг FEV_RELIABLE.
Главное отличие от мессаг в том, что они могут предиктиться на клиенте, и в этом случае будут проиграны даже в случае, если потеряются по дороге.


Отправлено demoth 19-07-2015 в 19:59:

~ X ~
>Вальва ж нам дельты дала

XaeroX
>В них ничего нельзя добавлять[в enitity_state]

не соединяются у меня эти стейтменты, зачем мне дельты если максимум что я могу сделать это использовать 2 - 3 незанятых user поля?


Отправлено XaeroX 19-07-2015 в 20:47:

Цитата:
demoth писал:
зачем мне дельты если максимум что я могу сделать это использовать 2 - 3 незанятых user поля?

Ну почему же 2-3? Побольше. Но не так уж много, да.


Отправлено Ku2zoff 20-07-2015 в 09:00:

Цитата:
XaeroX писал:
Побольше. Но не так уж много, да.

Можно использовать vuser-ы. В каждом из них содержится целых 3 поля, в которые можно записывать float. + к этому iuser3 и iuser4 ни чем не заняты. fuser3 и fuser4 тоже вроде бы не заняты. Вполне достаточно для каких-нибудь фич, типа стамины, ползания и вектора разброса пуль.


Отправлено demoth 20-07-2015 в 18:22:

в общем можно параметры, которые не очень часто меняются, передавать сообщениями, для остальных - юзеры.

посмотреть бы код бейз дефенса...

если не трудно - подскажите какую энтити использовать? а то в проекте несколько структур с user полями


Отправлено XaeroX 20-07-2015 в 18:32:

demoth
Это всё одна структура, entity_state_t.
Остальные - её оверрайды, например, для игрока или для кастом-энтити (с флагом FL_CUSTOM).


Отправлено ~ X ~ 22-07-2015 в 09:23:

Цитата:
XaeroX писал:
~ X ~
У тебя каждый кадр посылается один бит информации "поле health не изменилось". Каждый кадр, Карл! Так уж устроена дельта.
А т.к. health меняется относительно редко, то не логичнее ли посылать его именно отдельной мессагой? Вот и в Valve так рассудили.

Не правильно.
Мессага "здоровье" появилась до дельты. Когда был entvars_t и всё. Для защиты от читерства, скорее всего. Потом появилась возможность фильтровать, что и кому слать, но в вальве ленивые кодеры для сохранения совместимости они это оставили.

Побуду добрым, сообщу любителем мессаг, что их ждёт тотальный облом в их колчиестве, пока те не нагородили...
Кстати, на кол-во зарегистрированных евентов абсурдных ограничений нет?

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Ku2zoff 22-07-2015 в 09:55:

Цитата:
~ X ~ писал:
Побуду добрым, сообщу любителем мессаг, что их ждёт тотальный облом в их колчиестве, пока те не нагородили...

128 штук максимум, кажется. Не так уж мало. Но, думаю, что мессаги нужно при любой возможности заменять энтварсами. К примеру: нам нужно отображать здоровье и броню игрока в режиме наблюдателя, кода мы наблюдаем данного игрока. Для этого придётся завести новую мессагу (см. сорцы отреверсенной дллки кс 1.6). А если мы допишем передачу энтварса pev->health, то сможем избавиться от мессаг gmsgHealth, gmsgBattery и нам не придётся заводить новую мессагу для спектаторского здоровья и брони. Сейчас я как раз изучаю дельту, и думаю, что передавать для игрока, а что нет. Ну и для других энтить тоже. XDM, кстати, очень полезен для изучения в этом плане


Отправлено XaeroX 22-07-2015 в 10:02:

Цитата:
~ X ~ писал:
Не правильно.

Что - неправильно?
Цитата:
~ X ~ писал:
Мессага "здоровье" появилась до дельты. Когда был entvars_t и всё. Для защиты от читерства, скорее всего.

И как же это поможет защитить от читерства?
Цитата:
~ X ~ писал:
для сохранения совместимости они это оставили.

Совместимость там всё равно была нарушена, так что - не аргумент.
Цитата:
~ X ~ писал:
Побуду добрым, сообщу любителем мессаг, что их ждёт тотальный облом в их колчиестве, пока те не нагородили...

Посмотри, как вальва запихала добрую сотню TE_сообщений в одну-единственную мессагу SVC_TEMPENTITY.
Цитата:
~ X ~ писал:
на кол-во зарегистрированных евентов абсурдных ограничений нет?

1024 эвента.

Добавлено 22-07-2015 в 16:02:

Цитата:
Ku2zoff писал:
Но, думаю, что мессаги нужно при любой возможности заменять энтварсами.

Во-первых, далеко не при любой. Но при описанной тобой ситуации это разумно, да.
Во-вторых, надо очень внимательно смотреть, каким энтитям разрешать их передачу. Для чего на сервере есть всякие DELTA_UNSETBYINDEX.


Отправлено Ku2zoff 22-07-2015 в 10:07:

Цитата:
XaeroX писал:
Во-первых, далеко не при любой. Но при описанной тобой ситуации это разумно, да.

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


Отправлено PLut 22-07-2015 в 15:11:

demoth Спроси что тебя конкретно интересует в бдефе и я тебе расскажу

__________________
Base Defense on Steam, ModDB


Отправлено ~ X ~ 22-07-2015 в 19:20:

Что такое бдеф?

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено demoth 23-07-2015 в 17:06:

бдеф - base defence

да все фичи оттуда интересны)

если конкретно
1) как всё таки посылаются новые статы (деньги, опыт, уровень)
2) как сделать чтобы появившиеся монстры сразу охотились за игроком
3) каким образом реализованы скилы
4) инвентарь

кстати линукс версии так и не вышло?


Отправлено PLut 23-07-2015 в 18:35:

demoth
1. Через vuser. Туда я с горяча засунул информацию, которая не так часто обновляется, буду переделывать потом.
2. Этого у меня нет. Они могут найти игрока только если его видели хоть раз.
3. Функция UsePlayerSkill проверяет класс и переменную m_iCurrentSkill, в зависимости от них при вызове и активирует скилл, но там тонкости есть, ибо ауры сделаны отдельно и пассивки тоже. Пассивки активируются там где тебе нужно (например увеличение урона при каждом попадании в монстра).
4. Инвентарь сделан по тутору для хл2, оттуда брал проверку наличия места в инвентаре при подъеме шмотки. У меня получилось 3 структуры, состоящие из информации (айди шмотки, тип, защита, 3 параметра) и так для 11-ти вроде слотов (0, 1, 2, 3 - эквипы на игрока и остальные 8 - сам инвентарь). Почему три структуры: первая серверная для игрока, вторая серверная для вещей и третья клиентская для игрока. Вещи имеют свой полноценный инвентарь, можно сказать, а сделано это для возможности паковать все вещи из инвентаря при смерти в рюкзак, который дропается, чтобы поднять при респауне. При манипуляциях любых с вещами мы отправляем мессагу на клиент, состоящую из всех параметров шмотки, перечисленных выше, и слота, в который мы все это будем заносить/обновлять. Когда мы одеваем новую шмотку взамен старой, то в коде это выглядит просто как сохранение шмотки из первого слота в буфер, копируем в первый слот содержимое второго слота, после этого из буфера копируется шмотка из первого слота во второй. С клиента, графической оболочки идут команды такого типа: moveitem "slot1" "slot2", dropitem "slot1", upgradeitem "slot1" и т. д.

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

__________________
Base Defense on Steam, ModDB


Отправлено demoth 23-07-2015 в 19:01:

PLut

круто, я подумаю над этим


Отправлено ~ X ~ 26-07-2015 в 10:19:

Цитата:
PLut писал:
4. Инвентарь сделан по тутору для хл2, оттуда брал...

Инвентарь одномерный? Или как в дыусэксе?

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено PLut 26-07-2015 в 20:25:

~ X ~ А как это "как в дыусэксе"?

__________________
Base Defense on Steam, ModDB


Отправлено XaeroX 26-07-2015 в 21:18:

PLut
Неужели даже мой фотоотчёт не пробудил интерес к игре?


Отправлено PLut 26-07-2015 в 21:36:

XaeroX Я его не видел

__________________
Base Defense on Steam, ModDB


Отправлено XaeroX 26-07-2015 в 22:24:

Цитата:
PLut писал:
Я его не видел

Ну оно всегда так. Делаешь-делаешь аж с марта 2014 года, а потом выясняется, что некоторые вообще не в курсе. А ещё находятся товарищи, которые имеют смелость утверждать, что хороший продукт в рекламе не нуждается.

Короче, в деус ексе оружие может занимать 1 клетку, 2 клетки рядом, 4 рядом, 2х2 клетки (квадратом) или 2х3. Поэтому иногда надо поломать голову, как упихнуть несколько "тяжёлых" пушек, раскидывая мелкие итемы между ними. Точно так же, как IRL ты пакуешь чемодан.


Отправлено PLut 26-07-2015 в 22:48:

XaeroX В Дьябло тоже такой инвентарь, где вещи могут занимать несколько клеток. Про фотоотчет я слышал, но его сам не видел.

~ X ~ В бдефе 1 клетка - 1 шмотка. Учитывая, что я гоняюсь за разрешением 640х480, то не могу я создавать огромные окна с кучей информации и одновременно держать общий стиль этих окон. Всё просто и минималистично.

__________________
Base Defense on Steam, ModDB


Отправлено ~ X ~ 27-07-2015 в 00:41:

PLut deus ex работал в 640*480. Не в этом суть... ох, щи- эти скрины... мои глаза +_+
Я не знаю, что хуже - спецназовцы с крыльями или понитреды...

Добавлено 27-07-2015 в 03:41:

Скрытый текст:
Этот текст скрытый. Вы должны оставить хотя бы одно сообщение в теме, чтобы его увидеть.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено thambs 27-07-2015 в 00:47:

даауж. суда по недавней беседе у кое-кого от них знатно бомбануло...

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено Cybermax 27-07-2015 в 03:38:

Цитата:
XaeroX писал:
Поэтому иногда надо поломать голову, как упихнуть несколько "тяжёлых" пушек, раскидывая мелкие итемы между ними. Точно так же, как IRL ты пакуешь чемодан.


Мне в этом смысле нравится Arcanum. В инвенторе есть кнопка автоупорядочения предметов. Удобно

__________________


Отправлено Chyvachok 27-07-2015 в 06:14:

Цитата:
Cybermax писал:
В инвенторе есть кнопка автоупорядочения предметов


Зато теряеться половина геймплея с упаковкой чемодана.


Отправлено ~ X ~ 27-07-2015 в 06:15:

Cybermax тебя лишают увлекательнейшего квеста "распихай или уйди ни с чем"! %)

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено PLut 27-07-2015 в 07:46:

~ X ~ ...или ониме (против которого, кстати, я ничего не имею).
thambs Порой у меня у самого полыхает от реакции людей на них.

Нет, ну вот правда, ангелы с мечами это норм, а с мп5 - ТАКОГО НЕ МОЖЕТ БЫТЬ.
Бдеф как бы и есть слияние пришельцев, современного вооружения и старой магии, учений. Таков игровой мир, каша со вкусом.

Как бы из-за отсутствия моделей люди порой бросают разработку и идут в падик бухать. Я просто нашел оригинальное решение проблемы и продолжил дело.

__________________
Base Defense on Steam, ModDB


Отправлено Ghoul [BB] 27-07-2015 в 10:02:

Цитата:
~ X ~ писал:
ох, щи- эти скрины... мои глаза +_+
Я не знаю, что хуже - спецназовцы с крыльями или понитреды..



Сортиры с вилками явно лучше.

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено ~ X ~ 30-07-2015 в 09:46:

Цитата:
Ghoul [BB] писал:
Как бы из-за отсутствия моделей люди порой бросают разработку и идут в падик бухать.

Примеры, пожалуйста. Если ирл такое случилось, то их жалко. Им надо лицензию на MS3D и 3DS выдать.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Временная зона GMT. Текущее время 05:22.
Показать все 45 сообщений этой темы на одной странице

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