Помощь - Поиск - Пользователи - Календарь
Полная версия: NWN + Python
Город Мастеров > РЕДАКТОРЫ > Шарды рунета
aleVandal
Я занимаюсь разработкой плагина для NWNX. Суть плагина состоит в том что в него встроен интерпретатор Python, что позволяет исполнять питоновские скрипты из нвн-скриптов. Предусмотрены следующие возможности:
0) выполнение строки, содержащей одну или несолько инструкций на языке Python. Передача параметров отсутствует. Результата не возвращает.
1) выполнение файла. Почти то же что и предыдущее, за исключением того, что питоновский код считывается из файла. Передача параметров отсутствует. Результата не возвращает.
2) вызов функции, содержащейся в каком либо модуле. Это полноценный вызов функции со всеми вытекающими. Функция получает параметры из нвн-скрипта и возвращает результат. Это уже кое что поинтереснее, чем предыдущие, однако недостаток налицо - посредством функции возможно выполнение какого-либо одноразового действия.
3) возможность работы с объектами питона. В нвн-скриптах взаимодействие с объектами питона реализуется следующей последовательностью действий:
а) создание объекта
б) взаимодействие с атрибутами объекта посредством вызова его методов( с передачей параметров и возвращением результата).
в) удаление объекта

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

Тема я создал для того чтобы узнать мнение модульмэйкеров - интересна вам такая разработка или нет. Подробная информация будет предоставлена мной к моменту завершения работы над плагином. Оставляйте свои отзывы и если вас заинтересовали возможности плагина я готов ответить на вопросы.
Aiwan
Ну, я не силен в языках, но то что ты обещаешь, мне и то показалось интересным... biggrin.gif
RiPPeR
Он будет только под винь или под линукс тоже будет версия?
Vanes
можно конкретно, что может твой плагин, чего не может сам тулсет ???
ну или по крайней мере, что будет выполняться быстрее и работать эффективней ???
зы простые практические примеры для шарда плз... теория меня мало интересует...
aleVandal
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_
Эх, почему питон, а не перл? smile.gif
Aiwan
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
QUOTE
Эх, почему питон, а не перл?

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

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

В первых двух предложениях содержится ответ, надо только заменить питон на перл smile.gif
aleVandal
Ну тут уж как говорится - было бы желаниеsmile.gif
aleVandal
Плагин готов.
Загрузить можно по адресу http://www.nwnxpython.narod.ru
Добавлено в 18:20
Маленькое замечание.
Только что заметил - в архив плагина я забыл положить ерф-ку с функциями. Если кто-то вдруг уже скачал - приношу извинения. Исправил.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.