Э... красивый оправдывающий тему заголовок потом придумаю, если модераторы не против (IMG:
style_emoticons/default/smile.gif)
Не флейма и очередного холивара ради, сравнения для. Давайте сравним синтаксис языков, используемых эмуляторами. Например тип/класс/скрипт описывающий новую вещь на сервере (в дальнейшем добавим этой вещи немного функциональности). Для примера возьмем черный шар, пока без функциональности, просто ничего не можащий, никак не реагируйщий на внешние разражители, но имеющий внешний вид Шара и корректно сохраняемый/загружаемый сервером. Сразу скажу, что ни с чем кроме RunUO не работал, поэтому обо всяких флагах, триггерах и прочих вещах имею лишь поверхностное представление (IMG:
style_emoticons/default/smile.gif) Вот как это будет выглядеть на C# (для эмулятора RunUO):
(двойной слэш "//" обозначает комментарий, этот код не влияет на функциональность)
(пример скоммунизжен из обучающей темы официального форума RunUO)
Код
namespace Server.Items // Говорим, что данный объект будет помещен в пространство имен / пакет (не знаю как в других языках это логическое деление обозначается) Server, "подпространство" Items
{
public class EightBall : Item // Объявляем новый класс, он же тип, он же "шаблон" для миллиона однотипных объектов EightBall и говорим что он будет наследоваться от класса Item, т.е. обладать теми же свойствами и методами (т.е. иметь вес, серийный номер, цвет, название и все другие радости, которые присущи АБСОЛЮТНО всем ВЕЩАМ на сервере)
{
[Constructable] // Помечаем его как возможный для "создания" в мире, т.е. этот объект будет доступен по админской команде [add
public EightBall() : base ( 0xE2F ) // Конструктор класса, 0xE2F в данном случае дает серверу указание присвоить этой вещи из Tiledata.mul все свойства (в том числе внешний вид) объекта под ID номером 0xE2F
{ // { означает начало метода (процедуры/функции в других языках)
} // } означает конец метода; в данном случае конструктор (метод-конструктор) оставлен пустым, что значит объект создатеся как есть без каких-либо модификаций каких-либо свойств
public EightBall( Serial serial ) : base ( serial ) // Этот и последующие методы Serialize и Deserialize необходимы для корректного сохранения/загрузки объекта; пока их не касаемся, считая что они необходимы для любого объекта который необходимо сохранить
{
}
public override Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int)0 );
}
public override Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}
Просьба запостить аналогичные варианты для сферы, POL'a, UOX'а (любых других эмуляторов, если найдутся люди сведущие в них)
Чистый вариант без комментариев:
Код
namespace Server.Items
{
public class EightBall : Item
{
[Constructable]
public EightBall() : base ( 0xE2F )
{
}
public EightBall( Serial serial ) : base ( serial )
{
}
public override Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int)0 );
}
public override Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}