AviaSkins.Forums

Вернуться   AviaSkins.Forums > Основные разделы > Моделирование и конструирование

Важная информация

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2019, 11:36   #1
NB79
Местный
 
Регистрация: 12.07.2015
Сообщений: 417
По умолчанию

Для лучшего понимания нужно ознакомится с базовыми принципами Объектно-Ориентированного Программирования, оно же - ООП.

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

Далее, вы создаёте классы-наследники, в которых описываете индивидуальные особенности тех, либо иных объектов.

Например. Базовый класс - мебель. Наследники - стол, стул, шкаф. Базовые свойства (properties) - предназначены для обслуживания потребностей человека в быту. Индивидуальные свойства - стол для приёма пищи, работы и т.д. (можно написать несколько наследников для стола раскрывающих их сущность). Стул - сидеть на нём. Шкаф - хранить барахло.

Свойства у нас тоже бывают разные. Публичные, видимые всем из всех классов. Приватные, видимые только внутри класса. Классовые, специфичные для класса. Виртуальные, Абстрактные и т.д. Задача всего этого многообразия так описать объект, чтоб обеспечить безопасность его функционирования и всю полноту управления им упростив доступ к свойствам и прочему повышая уровень абстракции. Примерно так, на примере: базовый класс - человек, у него куча методов и свойств, но наружу мы выводим только один метод (делаем его публичным), способность ходить. В результате все наследники Человека у нас ходят, но вся механика хождения скрыта в базовом классе. И если мы изменим механику в базовом классе, то у нас автоматом эти изменения отразятся на поведении наследников. Код наследников, при этом, будет осень простым и будет описывать только то, что свойственно только ему. Очень удобно при правильном использовании.

Представление о том, как нужно рассматривать ООП код быстро поставит всё на место и позволит ПРАВИЛЬНО его писАть. А частности, характерные для того, либо иного языка, это уже вторично, это особенности реализации общих подходов к объединяющей концепции.

Это очень-очень кратко, даже не по верхам, исключительно для привлечение внимания к тому, что надо изучить основы, это сэкономит прорву времени.
NB79 вне форума   Ответить с цитированием
Старый 30.03.2019, 14:17   #2
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

Спасибо, для меня ява, это как английский, я его не знаю и очень не люблю. Но знать его надо...
tvister вне форума   Ответить с цитированием
Старый 30.03.2019, 19:19   #3
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

При ближайшем изучении модели и кода Ки-36 от САС, я обнаружил, что посадочный крюк и лепестки юбки мотора были сохранены в коде, а в модели созданы безматериальными мешами. Что то вроде картинки с сусликом. Лепестки в модели представлены точками-единичными вершинами. Попробовал удалить фрагменты кода с крюком
PHP код:
    }
    
    public 
void moveArrestorHook(float f) {
    
hierMesh().chunkSetAngles("Hook1_D0"0.0F60.0F f0.0F);
    
arrestor f
Удалил, код компилируется в класс нормально. Часть кода в которой упоминаются лепестки юбки мотора, оставил, а модель сделаю по образцу САС-овской. Как то надо регулировать тепловой режим мотора.
В дочернем классе Ки-36 изменил часть кода с названием самолета и путь к ФМ.
PHP код:
 static {
    Class 
var_class = (class$com$maddox$il2$objects$air$Ki_36 == null
               
? (class$com$maddox$il2$objects$air$Ki_36
                  
= class$("com.maddox.il2.objects.air.Ki_36"))
               : class
$com$maddox$il2$objects$air$Ki_36);
    new 
NetAircraft.SPAWN(var_class);
    
Property.set(var_class"iconFar_shortClassName""Ida");
    
Property.set(var_class"meshName""3DO/Plane/Ki36/hier.him");
    
Property.set(var_class"PaintScheme", new PaintSchemeBMPar00());
    
Property.set(var_class"yearService"1938.0F);
    
Property.set(var_class"yearExpired"1946.5F);
        
Property.set(var_class"FlightModel",
             
"FlightModels/KI-36-NEW.fmd:Ki36_FM");
    
Property.set(var_class"cockpitClass",
             ((Object) 
Все по образцу и подобию САС-овских классов.
К готовым классам добавил класс кокпита (класса бомбардира нет в принципе) захешировал и бросил их в папку с моделью, попробовал запустить игру. В итоге вылет на 20%. В логе ругань на отсутствие класса бомбардирского кокпита.

Тo be continued...
tvister вне форума   Ответить с цитированием
Старый 30.03.2019, 20:58   #4
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

Удалил все строки где упоминается кокпит бомбардира-пулеметчика. В дочернем классе Ки-36 есть два таких фрагмента.

PHP код:
    /*synthetic*/ static Class class$com$maddox$il2$objects$air$CockpitKi_36_Bombardier;
    
/*synthetic*/ static Class class$com$maddox$il2$objects$air$CockpitKi_36_TGunner

PHP код:
        ((class$com$maddox$il2$objects$air$CockpitKi_36_Bombardier
          
== null)
         ? (class
$com$maddox$il2$objects$air$CockpitKi_36_Bombardier
            
= (class$
               (
"com.maddox.il2.objects.air.CockpitKi_36_Bombardier")))
         : class
$com$maddox$il2$objects$air$CockpitKi_36_Bombardier),
        (class
$com$maddox$il2$objects$air$CockpitKi_36_TGunner == null
         
? (class$com$maddox$il2$objects$air$CockpitKi_36_TGunner
            
= class$("com.maddox.il2.objects.air.CockpitKi_36_TGunner"))
         : class
$com$maddox$il2$objects$air$CockpitKi_36_TGunner) })); 
заменив последний блок на родные САС-овские строки
PHP код:
    Property.set(var_class"cockpitClass",
             new Class[] { 
CockpitKi_36.class }); 
В итоге код перестал компилироваться.
Пробовал так и эдак, но все без толку.
В итоге выдрал кусок кода с кокпитом из файла Ки-27КО. И переименовав все названия самолета на Ки-36 воткнул на место САС-овской строки. Вот как получилось.
PHP код:
    Property.set
        
(var_class"cockpitClass",
         ((Object)
          (class
$com$maddox$il2$objects$air$CockpitKi_36 == null
           
? (class$com$maddox$il2$objects$air$CockpitKi_36
          
= class$("com.maddox.il2.objects.air.CockpitKi_36"))
           : class
$com$maddox$il2$objects$air$CockpitKi_36))); 
Теперь игра запускается, запускаются даже миссии, но самолета в них нет. Он виден в окне полного редактора с почему то исчезающим рулем высоты.
Особо не переживаю с учетом того, что классы от разных моделей и что то я мог пропустить. А наш друг и помощник Log так и рапортует:
PHP код:
ERROR fileFile users/doe/Icons not found
Mission
QuickQMBPro/NWEurope/NWEuropeBlueNone00.mis is Playing
INTERNAL ERROR
HierMeshCan't find chunk 'WindowL1_D0'
INTERNAL ERROR: HierMesh: Can'
t find chunk 'WindowR1_D0'
Time overflow (0): speed 0.53097343
warning
no files music/inflight
INTERNAL ERROR
Str2FloatClamp() - Clamped 4096 -> 512 (delta = -3584to Range 1..512
-------------------------------- MISSION FAILED ---------------------
INTERNAL ERRORHierMeshCan't find chunk 'WindowL1_D0'
INTERNAL ERROR: HierMesh: Can'
t find chunk 'WindowR1_D0'
warningno files music/crash
WARNING
Clear VBuf 174961
WARNING
Clear IBuf 654888
WARNING
Clear VBuf 162728
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162728
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162728
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162788
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162586
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162698
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162728
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162806
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162728
WARNING
Clear IBuf 654798
[30.03.2019 17:27:10] -------------- END log session ------------- 
Роем дальше!
tvister вне форума   Ответить с цитированием
Старый 30.03.2019, 21:16   #5
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

Становится интереснее. Дело в том, что ни в коде, ни в модели, нет имен WindowL1_D0 , WindowR1_D0.
Что то я пропустил...
tvister вне форума   Ответить с цитированием
Старый 01.04.2019, 15:25   #6
Vasya
Звичайна людина на Землі
 
Аватар для Vasya
 
Регистрация: 06.11.2011
Адрес: Україна, м.Київ, Печерський район, вул. Кіквідзе
Сообщений: 8,363
Радость

Конечно хуки.
Без хуков 3До в окне простого редактора не соберётся.
На нахер вар_класс.
Только Property.set(class1.
Я всегда исправляю, что бы Ил не сходил с ума от разночтений в коде.
Vasya вне форума   Ответить с цитированием
Старый 15.10.2019, 11:14   #7
Vasya
Звичайна людина на Землі
 
Аватар для Vasya
 
Регистрация: 06.11.2011
Адрес: Україна, м.Київ, Печерський район, вул. Кіквідзе
Сообщений: 8,363
Вопрос

У меня большая прозьба:
нужно организовать ручное управление радиатором при автомате шага.
Такой вид кода не компилится.
Код:
public void onAircraftLoaded()
    {
        super.onAircraftLoaded();
        if(super.FM.isPlayers())
            ((FlightModelMain) (super.FM)).EI.engines[0].setControlRadiatorAuto(false);        
    }
Как правильно записать ручное управление радиатором?
При том, что в классе уже есть метод радиатора.
Код:
public void update(float f)
    {
        if(Math.abs(flapps - kangle) > 0.01F)
        {
            flapps = kangle;
            hierMesh().chunkSetAngles("Oil1_D0", 0.0F, -20F * kangle, 0.0F);
        }
        kangle = 0.95F * kangle + 0.05F * FM.EI.engines[0].getControlRadiator();
        if(kangle > 1.0F)
            kangle = 1.0F;
        afterburnerhud();
        super.update(f);
    }
Vasya вне форума   Ответить с цитированием
Старый 15.10.2019, 21:21   #8
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

Василий, я не специалист и у нас разные компиляторы-декомпиляторы, но постараюсь помочь.
Первое, у меня не компилировался код с двумя методами управления чем либо, створки юбки капота, или масляный радиатор, управляющие поверхности, не важно. Метод управления для данной части должен быть один.
Вот как на Ки-30 (на скрине).
Требуется уточнение, для каких частей системы охлаждения мотора нужна анимация? К примеру на Гамма-5 или R-5 есть анимация только масляного радиатора. Вот пример выдвижного радиатора Р-5
Код:
    
    public void update(float f) {
	float f_6_ = FM.EI.engines[0].getControlRadiator();
	Aircraft.xyz[0] = 0.0F;
	Aircraft.xyz[1] = 0.0F;
	Aircraft.xyz[2] = f_6_ * -0.45F;
	Aircraft.ypr[0] = 0.0F;
	Aircraft.ypr[1] = 0.0F;
	Aircraft.ypr[2] = 0.0F;
	if (Math.abs(flapps - xyz[2]) > 0.01F) {
	    flapps = xyz[2];
	    hierMesh().chunkSetLocate("Water_D0", Aircraft.xyz, Aircraft.ypr);
	}
Миниатюры
Нажмите на изображение для увеличения
Название: Новый рисунок.jpg
Просмотров: 669
Размер:	249.2 Кб
ID:	62572  
tvister вне форума   Ответить с цитированием
Старый 15.10.2019, 21:35   #9
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

Вот пример Ки-51, у этой модели анимированы и створки юбки капота и масляный радиатор.
Код:
    
    public void update(float f) {
	super.update(f);
	float f_2_ = FM.EI.engines[0].getControlRadiator();
	if (Math.abs(flapps - f_2_) > 0.01F) {
	    flapps = f_2_;
	    hierMesh().chunkSetAngles("Oil_radiat_D0", 0.0F, -15.0F * f_2_,
				      0.0F);
	    for (int i = 1; i < 11; i++)
		hierMesh().chunkSetAngles("Water" + i + "_D0", 0.0F,
					  22.0F * f_2_, 0.0F);
	}
Причем масляный радиатор не опускается под прямым углом к корпусу как у Р-5, а поворачивается на -15 градусов поперек оси движения самолета.
tvister вне форума   Ответить с цитированием
Старый 15.10.2019, 22:28   #10
Vasya
Звичайна людина на Землі
 
Аватар для Vasya
 
Регистрация: 06.11.2011
Адрес: Україна, м.Київ, Печерський район, вул. Кіквідзе
Сообщений: 8,363
По умолчанию

Цитата:
Сообщение от tvister Посмотреть сообщение
Василий, я не специалист и у нас разные компиляторы-декомпиляторы, но постараюсь помочь.
................
Спасибо за отклик!
Мне не анимация нужна.
Анимацию я вписывать немного умею - несколько створок заставить двигаться - не проблема.
У меня другой вопрос:
нужно заставить работать радиатор именно в ручном режиме.,
сейчас радиатор в автоматическом режиме.,
пропеллер тип-8(лучше - конечно - тип 7, так будет оригиналнее).,
у Фоки-4-8 нет раздела анимации створок, поэтому радиатор ручной.,
у Фоки-9 есть в классе код анимации, поэтому шаг автоматический.,
для Темпеста нужно заставить кодом работать радиатор в ручном режиме
при автомате винта, а они увязаны в коде в глубинах классов.
Если поставить шаг винта ручной - то и радиатор будет ручной.
Но.... у мотора Темпеста обороты 3700 и винт весом 225 кг.
При сбросе газа самолёт переворачивается и устремляется к земле,
никакие манипуляции русом не помогают, только добавление тяги до 100 проц.
Это такой баг в игре - сильно большие обороты - не стандартные для Ила.
В дефолте обороты снизили до 3150, что бы не было бага переворачивания самолёта.
Поэтому и спрашивал тут как вписать принудительное регулирование радиатора именно кодом в классе.
Есть код на тип афтербуннера - и он работает.
Причём тип и название афтербуннера пишется двумя разными методами
и они прекрасно уживаются в одном классе.
Такие пояснения относительного моего вопроса.

Последний раз редактировалось Vasya; 15.10.2019 в 22:39.
Vasya вне форума   Ответить с цитированием
Старый 15.10.2019, 23:15   #11
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

Цитата:
Сообщение от Vasya Посмотреть сообщение
У меня другой вопрос:
нужно заставить работать радиатор именно в ручном режиме.,
сейчас радиатор в автоматическом режиме.,
Увы Василий, я немножко разобрался с анимацией, но более высокие материи мне не по плечу .
Коллеги, может кто, что дельное подскажет?
tvister вне форума   Ответить с цитированием
Старый 17.03.2021, 10:54   #12
Asura
Модератор
 
Аватар для Asura
 
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,892
По умолчанию

тут сложный вопрос - как разделить однотипные объекты?
В общем наверно можно в КП читать параметры с объектов (например высоту и удаленность) и после сортировки их выводить на экран.

то есть в RotatingRadarGeneric ты создаешь переменные

public float h;
public float d;

эти переменные внутри класса меняются у каждого объекта по своему

в классе КП

private RotatingRadarGeneric rrg;

и читаешь переменные из класса

rrg.h
rrg.d

остается вопрос - как распознать чьи это переменные? наверно можно при создании объекта генерить его уникальный код и передавать так же в КП
__________________
Их восемь — нас двое. Расклад перед боем
Не наш, но мы будем играть!
Серёжа! Держись, нам не светит с тобою,
Но козыри надо равнять.

© В. Высоцкий
__________________

Asura вне форума   Ответить с цитированием
Старый 28.03.2021, 13:07   #13
Asura
Модератор
 
Аватар для Asura
 
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,892
По умолчанию

А если попробовать сделать так -

Сделать основной класс NewRadarGeneric, в нем создавать массив целей. Класс RotatingRadarGeneric сделать наследником NewRadarGeneric

public class RotatingRadarGeneric extends NewRadarGeneric

и в нем заполнять массив

класс КП тоже наследник NewRadarGeneric - в нем читать массив и выдавать целеуказания.
__________________
Их восемь — нас двое. Расклад перед боем
Не наш, но мы будем играть!
Серёжа! Держись, нам не светит с тобою,
Но козыри надо равнять.

© В. Высоцкий
__________________

Asura вне форума   Ответить с цитированием
Старый 28.03.2021, 13:19   #14
Asura
Модератор
 
Аватар для Asura
 
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,892
По умолчанию

А если попробовать сделать так -

Сделать основной класс NewRadarGeneric, в нем создавать массив целей. Класс RotatingRadarGeneric сделать наследником NewRadarGeneric

public class RotatingRadarGeneric extends NewRadarGeneric

и в нем заполнять массив

класс КП тоже наследник NewRadarGeneric - в нем читать массив и выдавать целеуказания.
__________________
Их восемь — нас двое. Расклад перед боем
Не наш, но мы будем играть!
Серёжа! Держись, нам не светит с тобою,
Но козыри надо равнять.

© В. Высоцкий
__________________

Asura вне форума   Ответить с цитированием
Старый 28.03.2021, 15:15   #15
Asura
Модератор
 
Аватар для Asura
 
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,892
По умолчанию

А наследником ActorHMesh сделать класс КП. Изменить иерархию.
__________________
Их восемь — нас двое. Расклад перед боем
Не наш, но мы будем играть!
Серёжа! Держись, нам не светит с тобою,
Но козыри надо равнять.

© В. Высоцкий
__________________

Asura вне форума   Ответить с цитированием
Старый 28.03.2021, 17:39   #16
Asura
Модератор
 
Аватар для Asura
 
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,892
По умолчанию

Я бы все таки попробовал сделать по аналогии классов тех же маяков - поменять иерархию наследования.
__________________
Их восемь — нас двое. Расклад перед боем
Не наш, но мы будем играть!
Серёжа! Держись, нам не светит с тобою,
Но козыри надо равнять.

© В. Высоцкий
__________________

Asura вне форума   Ответить с цитированием
Старый 15.10.2021, 22:04   #17
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

Доброго времени суток! Вопрос к знатокам...
Вот класс "Либерти", кораблик с тремя световыми эффектами которые включаются в ночное время суток. Подскажите пожалуйста как добавить еще один эффект, работающий постоянно, не зависимый от времени?
Код:
/* Liberty_cargo_ship - Decompiled by JODE
 * Visit http://jode.sourceforge.net/
 */
package com.maddox.il2.objects.ships;
import com.maddox.JGP.Point3d;
import com.maddox.il2.ai.World;
import com.maddox.il2.ai.ground.TgtShip;
import com.maddox.il2.engine.Eff3DActor;
import com.maddox.il2.engine.HookNamed;
import com.maddox.il2.engine.LightPointActor;
import com.maddox.il2.engine.LightPointWorld;
import com.maddox.il2.engine.Loc;
import com.maddox.rts.SectFile;

public abstract class Liberty_cargo_ship extends Ship
{
    /*synthetic*/ static Class class$com$maddox$il2$objects$ships$Liberty_cargo_ship$Liberty;
    
    public static class Liberty extends BigshipGeneric implements TgtShip
    {
	public LightPointActor light1;
	public LightPointActor light2;
	public LightPointActor light3;
	public LightPointActor light4;
	public LightPointActor[] lightk;
	
	public Liberty() {
	    lightk = new LightPointActor[5];
	}
	
	public Liberty(String string, int i, SectFile sectfile,
			  String string_0_, SectFile sectfile_1_,
			  String string_2_) {
	    super(string, i, sectfile, string_0_, sectfile_1_, string_2_);
	    lightk = new LightPointActor[5];
	    Loc loc = new Loc(0.0, 0.0, 0.0, 0.0F, 0.0F, 0.0F);
	    Loc loc_3_ = new Loc();
	    Loc loc_4_ = new Loc();
	    Loc loc_5_ = new Loc();
	    Loc loc_6_ = new Loc();
	    Loc loc_7_ = new Loc();
	    if (World.getTimeofDay() >= 0.5F && World.getTimeofDay() <= 6.0F) {
		for (int i_8_ = 0; i_8_ < 6; i_8_++)
		    Eff3DActor.New(this, findHook("_CLight" + i_8_), null,
				   1.0F, "3DO/Effects/Lights/FlareWhitek.eff",
				   -1.0F);
		Eff3DActor.New(this, findHook("_GLigth"), null, 1.0F,
			       "3DO/Effects/Lights/FlareGreenkb.eff", -1.0F);
		Eff3DActor.New(this, findHook("_RLight"), null, 1.0F,
			       "3DO/Effects/Lights/FlareRedkb.eff", -1.0F);
                 {
                }   
            }
        }
    }
    
    /*synthetic*/ static Class class$(String string) {
	Class var_class;
	try {
	    var_class = Class.forName(string);
	} catch (ClassNotFoundException classnotfoundexception) {
	    throw new NoClassDefFoundError(classnotfoundexception
					       .getMessage());
	}
	return var_class;
    }
    
    static {
	new BigshipGeneric.SPAWN
	    (class$com$maddox$il2$objects$ships$Liberty_cargo_ship$Liberty == null
	     ? (class$com$maddox$il2$objects$ships$Liberty_cargo_ship$Liberty
		= class$("com.maddox.il2.objects.ships.Liberty_cargo_ship$Liberty"))
	     : class$com$maddox$il2$objects$ships$Liberty_cargo_ship$Liberty);
    }
}
tvister вне форума   Ответить с цитированием
Старый 16.10.2021, 13:27   #18
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

Еще бы хорошо, к коду в предыдущем посте, кроме постоянно работающего эффекта, добавить строки вращающегося меша. Подскажите как сделать плз.
tvister вне форума   Ответить с цитированием
Старый 16.10.2021, 14:08   #19
andrey65
Модератор
 
Аватар для andrey65
 
Регистрация: 05.11.2007
Адрес: Кемеровская область
Сообщений: 7,639
По умолчанию

В БАТ есть объекты сигнальные маяки, как раз вращаются, светят в две стороны
andrey65 вне форума   Ответить с цитированием
Старый 16.10.2021, 16:52   #20
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

Спасибо за идею, но видимо плохо ищу... чего то не могу найти. За то вскрыл мод паровозов от wcat, с крутящимися колесами и... С явой в общем у меня проблемы. Разбираемся...
tvister вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 14:19. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Рейтинг@Mail.ru