HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Заметки на полях
Разработка С++ совместимой виртуальной машины
Страницы (11): « Первая ... « 4 5 6 7 [8] 9 10 11 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
FiEctro писал:
Ну допустим если у нас такты физики считаются допустим фиксировано в 25фпс, а камера аттачится к такому объекту при нефиксированом фпс, это приведёт к подергиваниям

Ну ты в спирите небось аттачил разные камеры к разным объектам, ничего же не дёргалось?

Цитата:
FiEctro писал:
А если я хочу вызвать скрипт когда уже кадр отрисован?

Если ты вызываешь скрипт, когда кадр уже отрисован - ты его вызываешь на новом кадре

Цитата:
FiEctro писал:
Я про другое, вот допустим у тебя есть объект, он наследует класс ригидбоди, у которого например есть булева - ис кинематик. Так вот как мне её переключать?

А, да так же как в кваке. MOVETYPE, SOLID. Физдвижок не в скриптах, он неявно довлеет над ситуацией, а ты просто задаешь ему что симулировать и как. Классы - не наследуют никаких физических типов. Но каждому объекту можно задать любой тип симуляции, например.

Цитата:
FiEctro писал:
Т.е. будет некий init.cpp из которого вызываем все наши функции, правильно?

Ну там не совсем. Интерфейсы будут, как туда, так и оттуда.

Цитата:
FiEctro писал:
Самый простой пример - трасса из ориджина объекта, сталкивается с его собственным колайдером. Как это решить?

Ну а как решали в Кваке? Задвали хозяина. Трасса не коллидит со своим хозяином. А групповые коллизии через маску задаются, да это и в халфе было. И в физиксе оно так же.

Цитата:
FiEctro писал:
Для этого я передаю vector3 поворота кости головы прямиком в шейдер

Ты опять не понял. Не надо ничего передавать из игрового кода прямо в шейдер. Материал сам возьмёт любой параметр из объекта, по его имени тогда, когда посчитает нужным. Объясняю. Допустим ты в классе завёл какую-то переменную и туда сохранил чего тебе надо. Дальше ты в описании материала заводишь новый юниформ vec3 и пишешь слинковать его с entity->myCoolVariable; И всё, материал сам профетчит эту переменную из текущего объекта при условии что текущий объект будет иметь модель, у которой будет хотя бы один такой материал.
Тебе не надо будет внутри самого объекта заниматься какими-то бесконечными SetUniform, достаточно просто обновлять переменную.

Цитата:
FiEctro писал:
Супер, и гизмо можно рисовать?

А что такое Гизмо?

Цитата:
FiEctro писал:
И самое интересное, будет ли какой то быстрый способ использовать движковый таймер и синхронизироваться с ним?

А что такое движковый таймер?

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 05-12-2022 16:42
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:

А что такое Гизмо?

Это босс казино из первого Fallout.
https://fallout.fandom.com/wiki/Gizmo

Добавлено 05-12-2022 в 12:02:

Там у него очень любопытная анимация смерти, жестокая и кровавая. Видимо, от этого и пошло выражение "рисовать Гизмо".

__________________

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

Старое сообщение 05-12-2022 17:02
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Цитата:
Дядя Миша писал:
А что такое Гизмо?


Гизмо это всякие фигуры и линии в редакторе. Например визуализация триггеров, трассы или нормалей.


Цитата:
Дядя Миша писал:
Ну ты в спирите небось аттачил разные камеры к разным объектам, ничего же не дёргалось?


Хотелось полного контроля над такими вещами.

Цитата:
Дядя Миша писал:
А, да так же как в кваке. MOVETYPE, SOLID. Физдвижок не в скриптах, он неявно довлеет над ситуацией, а ты просто задаешь ему что симулировать и как. Классы - не наследуют никаких физических типов. Но каждому объекту можно задать любой тип симуляции, например.


Я не помню уже как в кваке. Но если можно без особых костылей, уже хорошо.

Цитата:
Дядя Миша писал:
Ты опять не понял. Не надо ничего передавать из игрового кода прямо в шейдер. Материал сам возьмёт любой параметр из объекта, по его имени тогда, когда посчитает нужным. Объясняю. Допустим ты в классе завёл какую-то переменную и туда сохранил чего тебе надо. Дальше ты в описании материала заводишь новый юниформ vec3 и пишешь слинковать его с entity->myCoolVariable; И всё, материал сам профетчит эту переменную из текущего объекта при условии что текущий объект будет иметь модель, у которой будет хотя бы один такой материал.
Тебе не надо будет внутри самого объекта заниматься какими-то бесконечными SetUniform, достаточно просто обновлять переменную.


Ну я так и думал, материал просто изменяет переменную в шейдере, а мы изменяем её в материале через скрипт.

Цитата:
Дядя Миша писал:
А что такое движковый таймер?


Ну вот ты вызвал функцию, и внутри неё тебе что то нужно вызвать допустим ровно через 10 секунд, независимо от фпс. Как в таком случае будет выглядеть код, без костылей вроде всяких циклов?

Цитата:
XaeroX писал:
Там у него очень любопытная анимация смерти, жестокая и кровавая. Видимо, от этого и пошло выражение "рисовать Гизмо".


Гизмо переводится буквально как ШТУКА.


А поддержка листов будет? https://metanit.com/sharp/tutorial/4.5.php
Да и вообще планируются какие нить фичи из шарпа? Было бы прикольно если ВМ хоть частично была с ним совместима.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 05-12-2022 в 18:05

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

Старое сообщение 05-12-2022 18:00
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
XaeroX писал:
Это босс казино из первого Fallout.

А, крепкий хозяйственник.

Цитата:
FiEctro писал:
Например визуализация триггеров, трассы или нормалей.

Дебуг-отрисовка корочи. Отладочная визуализация.

Цитата:
FiEctro писал:

Хотелось полного контроля над такими вещами.

Чтобы дёргалось? О каком контроле речь?

Цитата:
FiEctro писал:
материал просто изменяет переменную в шейдере, а мы изменяем её в материале через скрипт.

Материал позволяет подключать новые переменные к шейдеру, какие угодно. У тебя же есть доступ к бета-тестированию, почитай документацию, там всё это подробно расписано.

Цитата:
FiEctro писал:
и внутри неё тебе что то нужно вызвать допустим ровно через 10 секунд, независимо от фпс

Ну а как тчинки в кваке работали? SetNextThink( 10.0f ); и вызов будет ровно через 10 секунд, независимо от фпс.

На самом деле я вообще не понимаю тех проблем, которые сами себе придумали авторы современных движков.

Добавлено 05-12-2022 в 21:57:

Цитата:
FiEctro писал:
А поддержка листов будет?

Мой язык позволяет не просто реализовать динамические массивы, но еще и шаблонные массивы, как в настоящем С++.
Вообщем представь себе язык с возможностями С++. Ну конечно он помедленее чем С++ работает, но по возможностям его даже превосходит в некоторых аспектах. По крайней мере в тех, которые нужны в играх и именно поэтому я так и заморочился созданием собственного языка, а не взял чужой.

Добавлено 05-12-2022 в 22:00:

Цитата:
FiEctro писал:
Да и вообще планируются какие нить фичи из шарпа?

В шарпе абсолютно всё встроено внутрь стандартных объектов. Такой подход есть абсолютное зло, потому что во первых без редактора\документации понять что именно там есть невозможно.
А во вторых, рано или поздно каких-то возможностей не хватит и тогда встречайте новую версию шарпа, которая несовместима с преведущей.
В моём языке есть всего три базовых типа, int, float и string. А всё остальное пользователь создаёт самостоятельно.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 05-12-2022 19:00
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Цитата:
Дядя Миша писал:
В моём языке есть всего три базовых типа, int, float и string. А всё остальное пользователь создаёт самостоятельно.


Ну вот в этом и проблема, вместо того чтобы писать код игры, приходится писать какие то дурацкие структуры (в юнити например вопрос указателей и структур опущен, хоть они там и есть в полной мере как и в си++) и у каждого разраба они написаны по своему. Кто во что горазд короче, отсутсвует какая то стандартизация. Может я конечно С++ очень плохо знаю, но всё же всякие заготовленные объекты сильно облегчают задачу новичкам, да и читабельность кода. Хотелось бы услышать твоего совета по этой ситуации. Возможно в базовом скрипте будут какие то заготовки?

Добавлено 05-12-2022 в 23:02:

Цитата:
Дядя Миша писал:
Чтобы дёргалось? О каком контроле речь?


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

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 05-12-2022 в 19:59

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

Старое сообщение 05-12-2022 20:02
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
FiEctro писал:
Ну вот в этом и проблема, вместо того чтобы писать код игры, приходится писать какие то дурацкие структуры

Зачем? Я сам всё напишу и ротатаблю тоже. Будет несколько типовых заготовок-сценариев для различных игр.

Цитата:
FiEctro писал:
Порядок вызова и возможность синхронизации как с физикой, так и с обычным фпс

Обычно такой выбор не имеет смысла. Если это игровые объекты, они сихронизируются с серверным временем, если локальные - то с клиентским.

Цитата:
FiEctro писал:
возможность выполнить код как можно позже.

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

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 05-12-2022 20:15
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Цитата:
Дядя Миша писал:
Обычно такой выбор не имеет смысла. Если это игровые объекты, они сихронизируются с серверным временем, если локальные - то с клиентским.


А с рендером и физикой?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

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

Старое сообщение 05-12-2022 20:46
- За что?
 Дядя Миша
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: Записан
Сообщение: 211941

Старое сообщение 05-12-2022 21:04
-
 Дядя Миша
racing for fish

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

Рейтинг



Выяснилось жуткое. Сам я над этим никогда не задумывался, а тут вдруг внезапно понял. Вот казалось бы, если мы создаём объект дочернего класса через new, а результат кастуем к родительскому классу, что в этом такого особенного?
Пример

C++ Source Code:
1
class CBaseEntity
2
{
3
public:
4
  CBaseEntity() { Msg( "CBaseEntity ctor called\n" ); }
5
  ~CBaseEntity() { Msg( "CBaseEntity dtor called\n" ); }
6
  string_t	m_classname;
7
  vec3	m_origin;
8
};
9
 
10
class CInfoPoint : CBaseEntity
11
{
12
public:
13
  CInfoPoint() { Msg( "CInfoPoint ctor called\n" ); }
14
  virtual ~CInfoPoint() { Msg( "CInfoPoint dtor called\n" ); }
15
  string_t	m_target;
16
};

Этот класс мы пытаемся создать вот так
C++ Source Code:
1
CBaseEntity	*e;
2
 
3
e = new CInfoPoint;
4
delete e;

И шо бы вы думали? Получаем ошибку
Цитата:

error C2243: 'type cast' : conversion from 'class CInfoPoint *' to 'class CBaseEntity *' exists, but is inaccessible

Честно говоря я такой ошибки не получал примерно никогда вообще
Но ладно, мало ли. Может это на выражение new действует такое строгое условие, а если это сделать чуть ниже, то норм? Ок, видоизменяем код
C++ Source Code:
1
CBaseEntity	*e2;
2
CInfoPoint	*e;
3
 
4
e = new CInfoPoint;
5
e2 = e;
6
delete e;

И снова получаем ту же самую ошибку!
Цитата:

error C2243: 'type cast' : conversion from 'class CInfoPoint *' to 'class CBaseEntity *' exists, but is inaccessible

Странно. dynamic_cast в данном случае бесполезен, ведь мы идём вверх по иерархии, а не вниз. О чём компилятор честно предупреждает
Цитата:

dynamic_cast used to convert to inaccessible or ambiguous base; run-time test will fail ('class CInfoPoint *' to 'class CBaseEntity *')

Тогда нам нужен static_cast? И снова получаем ошибку
Цитата:

error C2243: 'static_cast' : conversion from 'class CInfoPoint *' to 'class CBaseEntity *' exists, but is inaccessible

Ну зараза, я тебя всё-таки победю! Через Си-шный каст
C++ Source Code:
1
CBaseEntity	*e2;
2
CInfoPoint	*e;
3
 
4
e = new CInfoPoint;
5
e2 = (CBaseEntity *)e;
6
delete e2;

И вот ошибка превращается в предупреждение
Цитата:

warning C4243: type cast conversion from 'class CInfoPoint *' to 'class CBaseEntity *' exists, but is inaccessible

На самом 4243 это и есть предупреждение, которое почему-то форсируется до ошибки.
Запускаем! Ну и получаем вот это

Добавлено 06-12-2022 в 11:17:

Иными словами - хотя у нас есть виртуальный деструктор, при принудительном кастовании указателя вверх там внутри ломается вообще всё. И деструктор CInfoPoint не вызывается, да еще и память повреждается.
Очуметь можно. Просто в Шоте это вполне себе законная конструкция.

Добавлено 06-12-2022 в 11:21:

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

[ Вложение ]
error.jpg

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 06-12-2022 08:21
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
И шо бы вы думали? Получаем ошибку

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

__________________

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

Старое сообщение 06-12-2022 14:43
-
 Дядя Миша
racing for fish

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

Рейтинг



XaeroX а оно по дефолту приватное разве?

Добавлено 06-12-2022 в 19:28:

Да, публичное наследование работает.

Добавлено 06-12-2022 в 19:29:

Но при условии, что в базовом объекте тоже объявлена vtable.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 06-12-2022 16:29
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
а оно по дефолту приватное разве?

Для классов по дефолту приватное, для структур по дефолту публичное.

__________________

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

Старое сообщение 06-12-2022 17:00
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Цитата:
Дядя Миша писал:
Я сам всё напишу и ротатаблю тоже.


Насколько будет интуитивным управление трансформом, скейлом и ротейтом объектов? А так же преобразвания углой Эйлера в кватернионы и обратно. Ну и преобразования из локальных пространств в глобальные и наоборот.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

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

Старое сообщение 06-12-2022 17:21
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
FiEctro писал:
Насколько будет интуитивным управление трансформом, скейлом и ротейтом объектов?

Это всё очень субьективно.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 06-12-2022 20:22
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Цитата:
Дядя Миша писал:
Это всё очень субьективно.


А что может быть субъективного в этих простых операциях? Просто не превращать их в простыню кода для пользователя, а то ещё и матрицы считать заставишь

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

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

Старое сообщение 07-12-2022 06:01
- За что?
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 06:19. Новая тема    Ответить
Страницы (11): « Первая ... « 4 5 6 7 [8] 9 10 11 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Заметки на полях
Разработка С++ совместимой виртуальной машины
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

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

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

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

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