Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Город Мастеров _ Шарды рунета _ NWN + Python

Автор: aleVandal Jul 23 2005, 21:20

Я занимаюсь разработкой плагина для NWNX. Суть плагина состоит в том что в него встроен интерпретатор Python, что позволяет исполнять питоновские скрипты из нвн-скриптов. Предусмотрены следующие возможности:
0) выполнение строки, содержащей одну или несолько инструкций на языке Python. Передача параметров отсутствует. Результата не возвращает.
1) выполнение файла. Почти то же что и предыдущее, за исключением того, что питоновский код считывается из файла. Передача параметров отсутствует. Результата не возвращает.
2) вызов функции, содержащейся в каком либо модуле. Это полноценный вызов функции со всеми вытекающими. Функция получает параметры из нвн-скрипта и возвращает результат. Это уже кое что поинтереснее, чем предыдущие, однако недостаток налицо - посредством функции возможно выполнение какого-либо одноразового действия.
3) возможность работы с объектами питона. В нвн-скриптах взаимодействие с объектами питона реализуется следующей последовательностью действий:
а) создание объекта
б) взаимодействие с атрибутами объекта посредством вызова его методов( с передачей параметров и возвращением результата).
в) удаление объекта

Для тех кто не знаком с NWNX: обмен данными осуществляется только при помощи строк.
Конечно, благодаря возможности создания плагинов для NWNX можно писать собственные модули на С++, но написание программ на питоне намного проще. К тому же ввиду отсутствия этапа компиляции намного упрощается отладка и сопровождение. Так же следует учесть, что каждый отдельный плагин к NWNX - это дллка постоянно висящая в памяти, в то время как мой плагин позволяет скриптеру самому решать вопросы создания/удаления объектов.

Тема я создал для того чтобы узнать мнение модульмэйкеров - интересна вам такая разработка или нет. Подробная информация будет предоставлена мной к моменту завершения работы над плагином. Оставляйте свои отзывы и если вас заинтересовали возможности плагина я готов ответить на вопросы.

Автор: Aiwan Jul 23 2005, 21:37

Ну, я не силен в языках, но то что ты обещаешь, мне и то показалось интересным... biggrin.gif

Автор: RiPPeR Jul 23 2005, 23:00

Он будет только под винь или под линукс тоже будет версия?

Автор: Vanes Jul 24 2005, 05:32

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

Автор: aleVandal Jul 24 2005, 09:55

QUOTE
Он будет только под винь или под линукс тоже будет версия?

и под вынь и под линукс

QUOTE
можно конкретно, что может твой плагин, чего не может сам тулсет ???

все возможности языка Python в ваших руках. Единственное ограничение - как я уже говорил, обмен данными только ввиде строк. Например благодаря высокоуровневым типам данных ни что не мешает выбирать из базы данных не одиночные записи, а полноценные наборы данных, по которым не составит труда наладить навигацию в стиле GetFirst... GetNext...

Тривиальнейший пример - чтение/запись файлов:

Класс на Python:
Neverwinter Script Source
class CNWNXPythonFile:
    def __init__( self, file_name, open_mod):
    try:
        self.oFile = open( file_name, open_mod)
    except IOError:
        pass
   
    def __del__( self):
    self.oFile.close()
    del self.oFile
   
    def ReadLine( self, size=-1):
    try:
        ret = self.oFile.readline(size)
        if not ret:
        ret = 'NONE'
        self.oFile.close()
        return ret   
    except IOError:
        return 'NONE'
    except ValueError:
        return 'NONE'       
   
    def WriteLine( self, wstr):
    try:
        self.oFile.write(wstr)
        self.oFile.flush()
        return 'TRUE'
    except IOError:
        return 'FALSE'
    except ValueError:
        return 'FALSE'       
   
    def IsOpen( self):
    try:
        if not self.oFile.closed:
        return 'TRUE'
        else:
        return 'FALSE'
    except:
        return 'FALSE'


Не буду сейчас приводить полный цикл создания и подключения к нвн питоновского модуля, ибо слишком это долгая песня( все это разумеется будет включено в документацию). Приведу пример описания нескольких конечных функций в нвн скриптах:
Neverwinter Script Source
//открыть файл filename в режиме mod, вернет идентификатор созданного объекта
string OpenFile(string filename, string mod);
//читает строку из файла размером size или если size<=0 то до '\n'
string ReadLine( string PyObjectId,int size = -1);
//закроет файл и удалит объект( PyObjectId - идентификатор объекта )
string CloseFile(string PyObjectId);



Добавлено в [mergetime]1122188234[/mergetime]
упс - а что кавычки использовать нельзя?
Добавлено в [mergetime]1122188285[/mergetime]
я вот об этом
Neverwinter Script Source
#39

Автор: _kaa_ Jul 24 2005, 10:43

Эх, почему питон, а не перл? smile.gif

Автор: Aiwan Jul 24 2005, 13:12

QUOTE (aleVandal @ Jul 24 2005, 12:55)
упс - а что кавычки использовать нельзя?

Есть ведь кнопка кода...
CODE

class CNWNXPythonFile:
   def __init__( self, file_name, open_mod):
   try:
       self.oFile = open( file_name, open_mod)
   except IOError:
       pass
   
   def __del__( self):
   self.oFile.close()
   del self.oFile

Автор: aleVandal Jul 24 2005, 13:49

QUOTE
Эх, почему питон, а не перл?

а почему не иначе?smile.gif
Я в перле не очень силен, так как особенно близко с ним не сталкивался.
Просто в питоне практически все структуры данных( встроенные типы данных языка, модули, классы, экземпляры классов, атрибуты классов, функции) представлены как объекты. Это позволяет осуществлять управление ими с помощью единого интерфейса.
Благодаря вышесказанному питон имеет великолепные возможности для встраивания его в приложения написанные на С/С++.

ЗЫ: каа, ты большой поклонник перл?

Автор: _kaa_ Jul 25 2005, 13:34

QUOTE (aleVandal @ Jul 24 2005, 13:49)
а почему не иначе?smile.gif
Я в перле не очень силен, так как особенно близко с ним не сталкивался.
ЗЫ: каа, ты большой поклонник перл?

В первых двух предложениях содержится ответ, надо только заменить питон на перл smile.gif

Автор: aleVandal Jul 25 2005, 14:35

Ну тут уж как говорится - было бы желаниеsmile.gif

Автор: aleVandal Aug 18 2005, 16:04

Плагин готов.
Загрузить можно по адресу http://nwnxpython.narod.ru
Добавлено в 18:20
Маленькое замечание.
Только что заметил - в архив плагина я забыл положить ерф-ку с функциями. Если кто-то вдруг уже скачал - приношу извинения. Исправил.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)