Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Сравнение Синтаксиса Эмуляторов
Soteric
сообщение 27.9.2008, 22:11
Сообщение #1


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3057
Пользователь №: 7.166



Э... красивый оправдывающий тему заголовок потом придумаю, если модераторы не против (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();
        }
    }
}
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
tayfun
сообщение 27.9.2008, 23:18
Сообщение #2


***

Novice
Сообщений: 62
Регистрация: 2.8.2005
Группа: Пользователи
Наличность: 0
Пользователь №: 4.045



Если правильно понял, то для Сферы:

[ITEMDEF i_EightBall]
ID=0E2F
NAME=EightBall
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 27.9.2008, 23:51
Сообщение #3


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3057
Пользователь №: 7.166



Тогда чтобы создать новый Шар необходима следующая команда:
Код
EightBall ball = new EightBall(); // Просто создать где-то в памяти сервера такой объект
ball.MoveToWorld( new Point3D( x, y, z ), Map.Trammel ); // Добавит созданный предмет на карту Траммел по координатам [x, y, z]
player.AddToBackpack( ball ); // Передвинет этот предмет в сумку какого-то игрока обозначенного вне контекста

Можно создать и сразу в сумке, команды легко объединяются в одну. На этапы разбито специально.
Код
player.AddToBackpack( new EightBall() ); // Так сразу создаст новый шар в сумке
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
tayfun
сообщение 28.9.2008, 15:56
Сообщение #4


***

Novice
Сообщений: 62
Регистрация: 2.8.2005
Группа: Пользователи
Наличность: 0
Пользователь №: 4.045



Код

[functions add_item]
serv.newitem=i_EightBall // создаётся в памяти сервера такой объект
new.p=x,y,z,m // m - номер карты
new.cont=<src.uid> //объект попадает в сумку к игроку, который вызвал эту функцию
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 29.9.2008, 9:13
Сообщение #5


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3057
Пользователь №: 7.166



Добавим обработчик двойного щелчка по предмету (код добавляется в класс предмета):
Код
// Добавляем новый метод, обрабатывающий двойной щелчок (override означает что метод уже определен в базовом классе Item, а мы намерены изменить его поведение); "Mobile from" кто кликнул по предмету - Mobile тип кликающего (любое существо), "from" любое данное нами имя переменной, которое мы будем использовать в контексте
public override void OnDoubleClick( Mobile from )
{
    from.SendMessage( "Hello World!" ); // Вызываем метод SendMessage для объекта "from", передавая в качестве аргумента строку

    // Кликнувшему будет отправлено сообщение Hello World!
}

Итоговый вариант
Код
namespace Server.Items
{
    public class EightBall : Item
    {
        [Constructable]
        public EightBall() : base ( 0xE2F )
        {
        }

        public override void OnDoubleClick( Mobile from )
        {
                from.SendMessage( "Hello World!" );
        }

        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();
        }
    }
}
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
tayfun
сообщение 29.9.2008, 17:53
Сообщение #6


***

Novice
Сообщений: 62
Регистрация: 2.8.2005
Группа: Пользователи
Наличность: 0
Пользователь №: 4.045



Код
[ITEMDEF i_EightBall]
ID=0E2F
NAME=EightBall

On=@DClick
SYSMESSAGE Hello World!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
GumanoiD
сообщение 15.10.2008, 14:24
Сообщение #7


****

Apprentice
Сообщений: 176
Регистрация: 6.5.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 5.924



я так понел надо написать пример типо создание вещи через скрипт?
вот POL

Код
use uo; // модуль uo

program new_ball(who)
var ball := createiteminbackpack(who, "ball", 1); // "ball" можно записать как obj type (тип объекта), но тогда кавычки не нужны
printtextabove(ball, "Hello World!"); //напишет над вещью надпись Hello World! Чтобы была возможность писать русскими символами, необходим модуль unicode
endprogram


вот и всё, создаёт вещь в сумке
нечего с ней не изменяя... тока надпись пишет
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 15.10.2008, 15:16
Сообщение #8


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3057
Пользователь №: 7.166



Нужно добавить в сервер новый тип предмета с ItemID = 0xE2F, реагирующий на двойной щелчок. По двойному щелчку нажавшему отправляется сообщение "Hello World!"
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
GumanoiD
сообщение 15.10.2008, 17:08
Сообщение #9


****

Apprentice
Сообщений: 176
Регистрация: 6.5.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 5.924



Ну в поле в конфиг файл можно добавить ток в ручную...
например:

Item 0xE2F
{
Name Ball
graphic 3805
movable 0
color 1400
Script hello_world
desc Ball
}

Script hello_world
вот так ниже скрипт будет выглядить

Код
use uo;

program new_ball()
printtextabove(ball, "Hello World!");
endprogram
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 15.10.2008, 18:28
Сообщение #10


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3057
Пользователь №: 7.166



А где обработчик даблклика?.. И printtextabove я так понял не отправляет собщение кому-либо, а просто выводит надпись над объектом?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Narciruss
сообщение 17.2.2010, 19:01
Сообщение #11


******

ужас какой
Сообщений: 653
Регистрация: 12.2.2005
Группа: Пользователи
Наличность: 0
Из: Москва
Пользователь №: 3.050



а вот вам вариант на руби:
Код

module server_items
  class EightBall < System::uo

    attr_reader :mul_data
    
    def initialize()
      @mul_data = 0xE2F
    end
    
  end
end


жаль, что эмулятора на руби нету, а то бы все всосали
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 17.2.2010, 20:47
Сообщение #12


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3057
Пользователь №: 7.166



Цитата
а то бы все всосали

Религия это нехорошо.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Narayan
сообщение 18.2.2010, 2:09
Сообщение #13


**********

Гарант UoKit
Сообщений: 2.848
Регистрация: 28.3.2007
Группа: Супермодераторы
Наличность: 15548
Пользователь №: 9.591



По краткости и простоте пока лидирует сфера (IMG:style_emoticons/default/smile.gif)


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
d`ArcZeal
сообщение 18.2.2010, 8:38
Сообщение #14


**********

Elder
Сообщений: 2.962
Регистрация: 27.11.2005
Группа: Пользователи
Наличность: 7797
Пользователь №: 4.522
Возраст: 34



Мда уж, чувствую себя <вырезано анти-матом>ом. (IMG:style_emoticons/default/biggrin.gif)


--------------------
Olmer online administrator
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Narciruss
сообщение 18.2.2010, 12:34
Сообщение #15


******

ужас какой
Сообщений: 653
Регистрация: 12.2.2005
Группа: Пользователи
Наличность: 0
Из: Москва
Пользователь №: 3.050



Цитата(Narayan @ 18.2.2010, 2:09) *

По краткости и простоте пока лидирует сфера (IMG:style_emoticons/default/smile.gif)


это слова сфера-юзер (IMG:style_emoticons/default/biggrin.gif)
попробуй заняться нормальным программирование, тогда поймешь, что сфера очень не логична, во многих местах (IMG:style_emoticons/default/smile.gif)
когда мозг встанет на место, начнешь мыслить нормально, тогда сфера покажется брейнфаком, а руби, пайтоны, шарпы - идеалом (IMG:style_emoticons/default/biggrin.gif)
хотя про шарп и пайтон я ничего не знаю.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
МегаПрогер))
сообщение 20.3.2010, 1:44
Сообщение #16


***

Группа: Пользователи
Наличность: 0
Пользователь №: 10.691



Какой смысл сравнивать скрипты сферы и c#?
сферо скрипты заточены под сервер уо, а c# под херову тучу задач, глупо их сравнивать, естественно что на сфероскриптах писать меньше приходится, но c# спроектирован лучше и на нем сделать можно гораздо больше в рамках уо сервера
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Narciruss
сообщение 26.3.2010, 21:20
Сообщение #17


******

ужас какой
Сообщений: 653
Регистрация: 12.2.2005
Группа: Пользователи
Наличность: 0
Из: Москва
Пользователь №: 3.050



Цитата(МегаПрогер)) @ 20.3.2010, 1:44) *

Какой смысл сравнивать скрипты сферы и c#?
сферо скрипты заточены под сервер уо, а c# под херову тучу задач, глупо их сравнивать, естественно что на сфероскриптах писать меньше приходится, но c# спроектирован лучше и на нем сделать можно гораздо больше в рамках уо сервера


C# логичнее гораздо.
когда смотришь на его скрипты можно быть уверенным - это объект, а это описание класса например.
со сферой так не получается =(
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 27.4.2024, 17:18
Designed by Nickostyle