31 октября 2011

OpenSim - открытый проект по моделированию движения человека

Исследователи из Стенфордского университета представили открытый проект
OpenSim, который позволяет создать реалистичную модель движения человека
или животных, учитывающую работу различных групп мышц, что даёт
возможность всесторонне смоделировать механику движения.

Например, можно создать модель бега, которая будет построена на основе
совокупности активации и деактивации отдельных мышц, формирующих силы,
приложенные к разным частям костей. Исходный код и готовые сборки можно
загрузить с сайта проекта.

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

Другой вариант использования OpenSim нашёл применение в некоторых
музеях, в которых посетителям предлагается пройти по специальной
сенсорной дорожке, после чего будет проанализировано распределением веса
при ходьбе и определён даже незначительный дисбаланс, который может
привести к повышенной нагрузке на конечности и суставы.

***

http://opensim.stanford.edu/

https://simtk.org/project/xml/downloads.xml?group_id=91

http://www.youtube.com/watch?v=ME0VHfCtIM0

28 октября 2011

Ведётся работа над поддержкой Alembic в Blender

Эстебан Товальяри недавно приятно удивил общественность тем, что начал
работать над экспортировщиком в Alembic для Blender.

Напомним, что Alembic — один из открытых проектов, которыми в последнее
время колосится индустрия CG. По сути это фреймворк, который сплющивает
анимируемые процедурные данные в анимируемые непроцедурные для
дальнейшей обработки в разных приложениях. Благодаря этому можно без
особой головной боли скрещивать ПО разных производителей.

Проект был начат в прошлом году Sony Pictures Imageworks и Industrial
Light & Magic, быстро получив одобрение и поддержку таких лидеров
индустрии как Autodesk, The Foundry, Luxology и Side Effects Software.

***

Несколько месяцев назад во время SIGGRAPH была выпущена первая
стабильная версия фреймворка (видеозапись выше сделана именно там), а на
следующий же день состоялась неформальная встреча разработчиков
OpenColorIO, Ptex, OpenImageIO, OpenEXR и Blender.

Эстебана не было на этой встрече, что нисколько не помешало ему взяться
за проект и добиться определённого успеха. Готовую пропатченную сборку
Blender для 64-разрядных систем Linux можно скачать на Graphicall, а
исходный код временно доступен на Github (ветка "alembic"), но скоро
будет заменён на обычный патч.

Разработчик любезно согласился ответить на несколько вопросов.

Эстебан, судя по недавним проектам, ты серьёзно заинтересовался вопросом
совместимости между софтом, взявшись сначала за Cortex, а теперь ещё и
за Alembic. У тебя есть на это какие-то особые причины?

Да, Cortex, Alembic и прочие разработки такого рода мне попросту
интересны. Они уже поддерживаются в других инструментах, которые я
использую, но мне захотелось поработать с ними в Blender, а заодно —
получше их изучить.

http://linuxgraphics.ru/news.php?readmore=1896

25 октября 2011

В Blender3D появился ввод юникодных символов

Начиная с редакции 41146 в нестабильной ветке разработки Blender
появился долгожданный прямой ввод юникодных символов.

Суть новшества сводится к тому, что для ввода, скажем, кириллицы в
трёхмерные текстовые объекты больше не нужно пользоваться никакими
извращённыим обходными путями. Процедура очень проста: добавляем
текстовый объект, выбираем шрифт, редактируем текст.

***

Новшество пока не работает с арабской и прочими письменностями, где
направление письма — справа налево. К счастью, об этом уже думают.
Поддержки функций OpenType вроде лигатур и концевых форм пока тоже нет.

Предположительно, это нововведение войдёт в состав версии 2.61,
запланированной на декабрь этого года. Так или иначе, спасибо Кэмпбеллу!

***

http://vimeo.com/31045116

24 октября 2011

Blender 2.60a update

Оперативный update недавней версии...

***

Фиксы...

3D window: Armature-bones with wire draw type were not displaying in
solid view mode - r41113
3D window header: After collapsing the pull-down menus, no icon
available to make them show again. - r41117

Dopesheet: Fixed crash when moving keys in editor - r41128
Audio export: 7.1 export was being miscalculated - r41132

Game Engine: Action actuator breaks animation. IPO options can be set
too frequently - r41134
3D Window: missing updates when changing smoke flow settings - r41151

Node editor: missing updates when assigning/removing Materials on
Objects - r41152
Adding a new pose to the Pose Library crashed - r41175
Fix for un-handled exception in audio library - r41203

Incorrect keying set names 'Scale' vs 'Scaling', where 'Scale' was hard
coded in auto keyframe when 'Only Insert Needed' - r41211

Python: RNA/API, getting Event.ascii would crash - r41214
Addons / Exporter: Quake MAP export gives an error for UV textured
geometry - r2504

22 октября 2011

Декомпиляция Java / На примере кода проекта l2jserver

От себя...

По разным причинам состояние l2jserver имеет разный ход в миру.
К примеру целенаправленная продажа проекта,разделяя его функциональность
на публичный сборки и коммерческие,в лице пары балбесов из Сан-Петербурга.
Де компиляция прежде всего порой необходима для личных нужд.
К примеру убрать копирайтеры так называемых создателей и копипастеров.
А также при необходимости работа над классами ядра и его дополнение.

***

Опираться будем на Linux софт...
Работаем с программой java decompiler free.

http://java.decompiler.free.fr/

JD-Core and JD-GUI are written in C++. This allows an extremely fast
decompilation and a display.
JD-Core does not require the Java runtime environment for its
functioning, therefore no special setup is required.

JD-Core works with most current compilers including the following:

jdk1.1.8
jdk1.3.1
jdk1.4.2
jdk1.5.0
jdk1.6.0
jdk1.7.0

jikes-1.22
harmony-jdk-r533500
Eclipse Java Compiler v_677_R32x, 3.2.1 release
jrockit90_150_06
JD-Core supports the following new features of Java 5:
Annotations
Generics
Type "enum"

JD-GUI supports Drag and Drop.
JD-GUI supports JAR files.
JD-GUI displays color coded Java source code.
JD-GUI allows you to browse the "class" files hierarchy.
JD-GUI displays "log" files, and allow you to decompile "class" files
appearing in Java stack traces.
JD-Core, JD-GUI and JD-Eclipse use the excellent cross-platform
wxWidgets toolkit.

***

- Открываем jar архив с нужным нам классом.
- Декомпилируем нужный нам класс в исходные коды (java).
- Собираем обратно используя классы ядра.

Простой пример...

$ javac -classpath l2jserver.jar -Xlint:unchecked Имя__класса.java

***

Заметка не обсуждает дополнительные принципы de или com Java а лишь
затрагивает цель просмотра внутреннего кода и знакомства с ним.

***

На зубок и к пиву...

http://www.wasm.ru/print.php?article=1009005

19 октября 2011

Blender 2.60 Released!

С этой версии начинается новый цикл разработки Blender, в котором будет
добавлено множество новшеств. Собственно, в 2.60 уже появилось несколько
важных доработок и исправлений.

Самое главное:

добавлен трёхмерный звук и анимируемые громкоговорители (GSoC2011);
восстановлено прокси-редактирование в видеосеквенсере;
улучшена система анимации (GSoC2011);
улучшена поддержка COLLADA (GSoC2011);
добавлены модификаторы групп вершин;
реализована поддержка recast & detour для поиска оптимального пути в
игровом движке (GSoC2010);
пользовательский интерфейс снова локализуем, ведётся работа над русской
локализацией
Более подробная информация изложена в официальном анонсе.

***

I don't want to hear more about #b3d release cycles, I want to hear
about a Cycles release. mike_pan@twitter

Именно так :) Новый движок рендеринга Cycles запланирован на версию
2.61, выпуск которой ожидается в декабре этого года. Там же появится
motion/camera tracking.

http://www.blender.org/development/release-logs/blender-260/

18 октября 2011

Николас Бишоп рассказал о своей реализации динамической топологии в Blender

Николас Бишоп наконец-то написал в блоге про свой новый проект, которым
он занимается с лета — динамическая топология в Blender.

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

Функция основана на научной работе "Freestyle: Sculpting meshes with
self-adaptive topology" (не путать с Freestyle из BGE), отправленной в
этом году на SIGGRAPH.

***

Код никак не зависит ни от схожего проекта Farsthary по названием
"Unlimited clay", ни от BMesh самого Николаса. Пока что исходники
выкладываются на Gitorious. Возможно, скоро появятся сборки на
Graphicall. Все подробности расписаны в блоге разработчиков.

http://linuxgraphics.ru/news.php?readmore=1888

L2jserver / Multisell / Примеры работы

За основу взят проект http://www.l2jserver.com/
Примеры игровых событий (установки событий).
Соблюдайте форматирование кода для работоспособности.

Дополнительная информация http://www.l2jserver.com/wiki/Multisell

***

Посуте реализация Multisell проста и встроенна в ядро l2jserver.
Имеет ряд недоработок и багов но очень проста в работе.
Основная задача Multisell быстрая работа с ивентами и контроль обмена.

***

Работаем с папкой /gameserver/multisell/

Example:

<?xml version='1.0' encoding='utf-8'?>
<list applyTaxes="true" maintainEnchantment="true">
</list>


Разрешаем Taxes,Разрешаем Enchantment...

applyTaxes="true"
maintainEnchantment="true"


Описываем итемы и условия...

<list>
<item id="no#">
  <ingredient id="ingredientitemID#">
  <production id="productionitemID#">
 </item>

Где...

- ingredient id
- production id

Проверка условий обмена и эвента.

Пример с enchant...

<item id="1">
<ingredient id="352" enchant="0">
<production id="352" enchant="15">
</item>

***

Example 1:

 <item id="1">
 <ingredient id="57" count="1000" />
 <production id="22" count="1" />
 </item>

No taxes are applied even if applyTaxes="true".

Example 2:

 <item id="1">
 <ingredient id="57" count="1200" isTaxIngredient="true" />
 <production id="22" count="1" />
 </item>

Amount of adena is increased by taxes, resulting price=1320 adena (1200*1.1).

Example 3:

 <item id="1">
 <ingredient id="6673" count="1200" isTaxIngredient="true" />
 <production id="22" count="1" />
 </item>


• item id= - это номер нашего предмета в списке. Каждый предмет, должен иметь свой id.
• ingredient – это то, что мы требуем взамен нашему предмету.
• production – это то, что мы получаем взамен ingredient.
• id – предмет который мы продаем и который мы требуем.
• count – количество предметов которые мы получаем или отдаем.

***

Работа происходит с заданным NPC (например 2020),
Ссылка на файл...

<a action="bypass -h npc_%objectId%_multisell list_id">Insert name here</a>
<a action="bypass -h npc_%objectId%_multisell 5000">Insert name here</a>

Пример...

Файл 2020.htm...

<html><body>Test<br>
Приветствую тебя странник!<br>
У меня есть для тебя дивные товары, которые я продаю по очень низким ценам. Благодаря этому, меня знают как лучшего продавца во всей округе.<br>
Чего желаешь купить?</body></html>

<br><a action="bypass -h npc_%objectId%_multisell 5000">Явства</a>

Java+Python / Игровые События / 3

За основу взят проект http://www.l2jserver.com/
Примеры игровых событий (установки событий+доработки кода).
Дальнейшее развитие кода и доработки...
Соблюдайте форматирование кода для работоспособности.

***

От себя...

В русско-украинском сегменте проект l2jserver сильно испохаблен сайтами
однодневками либо
полукровными малалетними пидорами якобы которые создают проект для
продажи.
При работе с проектами l2jserver рекомендуется обратиться на страницу
проекта.
Сам проект имеет статус Open Source.

***

Квестовые скрипты Jython-а по существу наследуются из классов Java
net.sf.l2j.gameserver.model.quest.Quest. Разработчики, свободно
владеющие языком Java могут посмотреть исходники этого класса, которые
размещены на сайте www.l2jserver.com проекта l2jserver, для более
детального изучения функций. Кроме того, кое-что вы сможете прочитать в
этой документации.

***

Классы...

import sys
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
from java.util import Iterator
from net.sf.l2j.gameserver.datatables import SkillTable
from net.sf.l2j import L2DatabaseFactory
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest

Основа по работе с таблицами SkillTable (sql) в этом примере важна.

***

Переменные...


#Включение\выключение разделов. Для выключения замените ON на OFF

attack = "ON"


NPC = [40001]
prise_ID = 5575
QuestId = 912
QuestName = "buffer"
QuestDesc = "custom"
InitialHtml = "buff.htm"

#Выставление цен на события

min_level = 20
max_level = 90
min_prise = 6000
buff_prise = 2500

***

Затем мы объявляем непосредственно сам класс quest. Quest – класс
python, который расширяет java класс
net.sf.l2j.gameserver.model.quest.jython.QuestJyth on. Затем мы
объявляем метод onEvent, который вызывается Явой.

class Quest (JQuest) :

def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)


def onEvent(self,event,st):
htmltext = event
count=st.getQuestItemsCount(prise_ID)
if count < min_prise :
htmltext = "<html><head><body>No Many AA!.</body></html>"
if st.getPlayer().getLevel() < min_level :
htmltext = "<html><head><body>Need LvL-20!.</body></html>"
if st.getPlayer().getLevel() < max_level :
htmltext = "<html><head><body>Big LvL!.</body></html>"

else:
st.takeItems(prise_ID,0)
st.getPlayer().setTarget(st.getPlayer())


Довольно интересно но в 90% случаев описание переменной if count < min_prise
То есть проверка наличия суммы для события (if count < 6000) имеет
недоработки.
Это связано либо с тупым копипастом кода из англоязычных примеров либо
умышленное форсирование кода для малалетних издёвок на фри шарах игровых
серверов.

Пример...

Если максимальная цена события равна 10000 едениц а if count < min_prise
равен минимальной сумме проверки (6000) то достаточно иметь 5999 или 2
еденицы,
скрипт вычтет последние 2 или 5999 как разницу 5999<10000 (2<10000).
Тоесть достаточно иметь для реализации события 1 еденицу.

Дополнительной ошибкой является установка if count < min_prise = 0.
Тоесть if count < 0 или 1. Простым и быстрым фиксом без дитального
описания переменных
можно считать установку if count < min_prise по сумме равной 10000.
Тоесь максимально запрашиваемая сумма в событии. Если игрок её не имеет...

if count < min_prise :
htmltext = "<html><head><body>No Many AA!.</body></html>"


***

Если всё в порядке вести диалог и вычетание суммы prise_ID...
Установка игроку+установить таргет режим положительным на игрока...


else:
st.takeItems(prise_ID,0)
st.getPlayer().setTarget(st.getPlayer())


#Full buff fighter

if event == "124":
st.takeItems(prise_ID,Full_buff_f3_prise)
st.getPlayer().stopAllEffects()
st.getPlayer().sendMessage("Abra-Kadabra-Kerdyk!")
SkillTable.getInstance().getInfo(1068,3).getEffects(st.getPlayer(),st.getPlayer())

st.getPlayer().setCurrentHpMp(st.getPlayer().getMaxHp(),
st.getPlayer().getMaxMp())
st.playSound("ItemSound.quest_finish")
return "buff.htm"
st.setState(COMPLETED)


Обращение из htm... Проверка события.

if event == "124":
st.takeItems(prise_ID,Full_buff_f3_prise)

Произвести остановку всех события для игрока...
Вывести сис сообщение в чат.

st.getPlayer().stopAllEffects()
st.getPlayer().sendMessage("Abra-Kadabra-Kerdyk!")

Установить событие... Дополнить stats игрока.

SkillTable.getInstance().getInfo(1068,3).getEffects(st.getPlayer(),st.getPlayer())
st.getPlayer().setCurrentHpMp(st.getPlayer().getMaxHp(),
st.getPlayer().getMaxMp())

Проиграть сис звук...Возврат к buff.htm...Завершить событие.

st.playSound("ItemSound.quest_finish")
return "buff.htm"
st.setState(COMPLETED)

***

Пример ON-OFF...

if event == "2":
if attack == "ON":
st.takeItems(prise_ID,buff_prise)
SkillTable.getInstance().getInfo(1068,3).getEffects(st.getPlayer(),st.getPlayer())

st.playSound("ItemSound.quest_finish")
return "buff_attack.htm"
st.setState(COMPLETED)

else:
htmltext = "<html><head><body>Этот раздел отключен.</body></html>"

Проверка if attack == "ON" если ОК...

st.takeItems(prise_ID,buff_prise)
SkillTable.getInstance().getInfo(1068,3).getEffects(st.getPlayer(),st.getPlayer())
st.playSound("ItemSound.quest_finish")
return "buff_attack.htm"
st.setState(COMPLETED)

Проверка if attack == "OFF" если NO...

else:
htmltext = "<html><head><body>Этот раздел отключен.</body></html>"

***

Общяя инициализация функций сервером...

if htmltext != event:
st.setState(COMPLETED)
st.exitQuest(1)
return htmltext


def onTalk (self,npc,player):
st = player.getQuestState(qn)
htmltext = "<html><head><body>I have nothing to say to you</body></html>"
st.setState(STARTED)
return InitialHtml

QUEST = Quest(912,qn,"custom")
CREATED = State('Start',QUEST)
STARTED = State('Started',QUEST)
COMPLETED = State('Completed',QUEST)

QUEST.setInitialState(CREATED)

for npcId in NPC:
QUEST.addStartNpc(npcId)
QUEST.addTalkId(npcId)

14 октября 2011

2nd Release Candidates for 2.60 available

Вышел второй кандидат.... Как всегда радуемся и тестим...

***

Список развитий новшеств...

Audio & Video

3D audio and speaker objects were added, along with various improvements
to the sound system. It's now possible to place speaker objects in the
scene, make an animation and mix down to an audio file.
Sequence editor proxy support was restored, which can now work in the
background, along with support for building timecodes to make scrubbing
on all video types possible.

Animation

Animation system improvements were done, especially relating to
usability and to polish the interface. Includes changes to the graph
editor, dopesheet editor, NLA editor, curves, drivers, constraints,
posing, ...

Collada integration was improved, making import and export more complete
and fixing various issues, especially related to armatures and animation.

Vertex Groups

Vertex group modifiers were added. There are three modifiers: one to
edit existing vertex groups, one to mix groups together, and another to
generate vertex groups based on proximity to other objects.

Weight painting tools were added to lock vertex groups, automatically
maintain the ratio between different bones, and for fixing poor
deformation of vertices.

Internationalization

Internationalization and support for non-western fonts were added, to
display the user interface in languages other than English. Efforts to
translate in the most common languages is underway, and volunteers are
welcome to contribute translations.

Game Engine

Navigation Meshes were added for the game engine, used for path finding,
so that actors can find the path to a target or flee away. This
functionality was implemented using the Recast & Detour libraries.
Texture Face settings moved to materials, for consistency and easier
editing. Existing files may need some updates.

Game engine animation was improved internally, with as main external
change the unification of F-Curve and Shape Action Actuators into a
single Action Actuator, which now includes layering support.

More Features

Various other features have been added, including a frame node, sequence
editor utility operators, improved outliner search, grease pencil poly
line drawing, performance improvements, ...
List of changes.

Python

New python API features include callbacks for various events, GLSL
shader export, environment map texture load/save, texture evaluation and
various other utilities.
The behavior of Vector() * Matrix() multiplication was also modified,
this may require some script updates.

List of changes.

Addons

Two new addons have been added to the release: Screencast Keys, to show
key presses on the screen for making video tutorials, and Motion Capture
Tools, which includes various tools for working with motion capture
animation.

There have also been various fixes and improvements to importers and
exporters, the measure panel, paint palettes, renderfarm.fi uploader,
... see the list of addon changes for details.

***

http://www.blender.org/development/release-logs/blender-260/

http://download.blender.org/release/Blender2.60/

13 октября 2011

Jython / Заметки

Jython — это реализация языка Python на языке Java. Первоначальное имя
проекта — JPython, которое пришлось поменять из-за конфликта с
одноименным проектом (имя было занято на хостинге sourceforge.net),
одновременно и компилятор, и интерпретатор.
Программы, выполняющиеся в среде Jython могут одновременно использовать
классы языков Java и Python, используя, например, классы стандартной
библиотеки Swing.

***

На языке Java можно разрабатывать апплеты для веб-браузеров. Но в
настоящий момент апплеты в Jython не включены. Компилятор был удалён из
пакета Jython 2.5.0 с целью внедрения новой технологии, которая лучше
реализует создание апплетов. Технология будет включена в Jython 2.5.1
или в другую версию в ближайшем будущем.

***

По долгу службы пришлось поддерживаю очень древнее приложение с
громадной кодовой базой. Хуже всего то, что оно собирается оно от минуты
до семи и ещё минуты три стартует. Опять же каждому программисту не
сложно представить себе какой ад написать энное количество кода, а затем
ловить NullPointerException'ы от внешних сервисов с таким длинным циклом
Implement->Compile->Start Deploy->Wait->Smoke->Wait->Test.

Возможен также другой вариант. Есть энное количество кода в классе,
который нужно адаптировать под выполнение задачи, близкой уже им
выполняемой. А теперь представьте, что этот класс реализован в рамках
Java 1.4. Он не работает с Generic'ами, потому что они были добавлены
только в Java 1.5. Кроме того программисты, ранее занимавшиеся
поддержкой системы, этим активно пользуются и суют в коллекции
возвращаемые методами других классов, что не попадя вплоть до анонимных
реализаций java.lang.Object.

Поев кактус пару дней я почувствовал, что начинаю сходить с ума от того,
что пишу пять-двадцать строк работающего кода в день.

Способом ускорения разработки в таких варварских условиях я усмотрел
только вкрутить в приложение интерпретатор какого-либо динамического
языка для быстрого прототипирования уязвимого к таким условиям кода
сначала на нём, а потом реализации алгоритма на Java. Конечно же в
рамках решение нужна была ещё и интерактивная консоль этого языка. Какая
же без этого динамика? Консоль хотелось в не в апплете из-за того, что
апплеты очень плохо работают(скажем так, они просто не работают) во
FreeBSD, к которой я очень уж привык в последнее время.

***

http://habrahabr.ru/blogs/java/129064/

Java+Python / Игровые События / 2

За основу взят проект http://www.l2jserver.com/

Примеры игровых событий (установки событий).
Соблюдайте форматирование кода для работоспособности.

***

Квестовые скрипты Jython-а по существу наследуются из классов Java
net.sf.l2j.gameserver.model.quest.Quest. Разработчики, свободно
владеющие языком Java могут посмотреть исходники этого класса, которые
размещены на сайте www.l2jserver.com проекта l2jserver, для более
детального изучения функций. Кроме того, кое-что вы сможете прочитать в
этой документации.

***

Классы...

import sys
from java.util import Iterator
from net.sf.l2j.gameserver import SkillTable
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest

Основа по работе с таблицами SkillTable (sql) в этом примере важна.

***

Переменные...

ADENA=57 # id adena
SOE=736 # id soe

***

Затем мы объявляем непосредственно сам класс quest. Quest – класс
python, который расширяет java класс
net.sf.l2j.gameserver.model.quest.jython.QuestJyth on. Затем мы
объявляем метод onEvent, который вызывается Явой.

class Quest(JQuest):

def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)

def onEvent(self,event,st):

htmltext = event

***

Обьявим переменную ADENA для проверки функций наличности и установки
дальнейших действий...

count=st.getQuestItemsCount(ADENA)
if count < 1 or st.getPlayer().getLevel() < 0 :

st.setState(COMPLETED)
return "7077-21.htm"

else:
st.takeItems(ADENA,500)
st.getPlayer().setTarget(st.getPlayer())


Если наличие ADENA равна меньше 1 или 0...

if count < 1 or st.getPlayer().getLevel() < 0 :

Устпновить событие завершённым... вызвать описание.

st.setState(COMPLETED)
return "7077-21.htm"


Если всё в порядке вести диалог и вычетание суммы ADENA...
Установка игроку+установить таргет режим положительным на игрока...

else:
st.takeItems(ADENA,500)
st.getPlayer().setTarget(st.getPlayer())


***

#Wind Walk

if event == "4" :

st.takeItems(ADENA,0)
st.getPlayer().stopAllEffects()
SkillTable.getInstance().getInfo(1204,2).getEffects(st.getPlayer(),st.getPlayer())

st.playSound("ItemSound.quest_finish")
return "7077-BUFF.htm"
st.setState(COMPLETED)


Согласно ссылки из htm файла по событию -4- минусовать значение ADENA
(500)...
Завершить события всех эффектов для игрока...
Установить эффект по таблице (sql) согласно ID 1204...
Воспроизвести звуковое событие...
Возврат на заголовок 7077-BUFF.htm...
Событие считать завершённым...

***

Дополнительно для примера...

#SOE

if event == "99" :

st.takeItems(ADENA,0)
st.giveItems(SOE,1)
st.playSound("ItemSound.quest_finish")
return "7077-BUFF.htm"
st.setState(COMPLETED)

Согласно ссылки из htm файла по событию -4- минусовать значение ADENA
(500)...
Дать игроку по событию предмет по таблице (sql) согласно ID 736...
Воспроизвести звуковое событие...
Возврат на заголовок 7077-BUFF.htm...
Событие считать завершённым...

***

Общяя инициализация функций сервером...

if htmltext != event:
st.setState(COMPLETED)
st.exitQuest(1)

return htmltext


def onTalk (self,npc,st):
npcId = npc.getNpcId()
if npcId == 7077:
st.setState(STARTED)
htmltext = "7077-BUFF.htm"
return htmltext

QUEST=Quest(666,"666_Test","Test")
CREATED=State('Start',QUEST)
STARTED=State('Started',QUEST)
COMPLETED=State('Completed',QUEST)

QUEST.setInitialState(CREATED)
QUEST.addStartNpc(7077)
STARTED.addTalkId(7077)

print "importing quests: 666: PhotonBuff"

06 октября 2011

Java+Python / Игровые События / 1

За основу взят проект http://www.l2jserver.com/

***

Квестовые скрипты Jython-а по существу наследуются из классов Java
net.sf.l2j.gameserver.model.quest.Quest. Разработчики, свободно
владеющие языком Java могут посмотреть исходники этого класса, которые
размещены на сайте www.l2jserver.com проекта l2jserver, для более
детального изучения функций. Кроме того, кое-что вы сможете прочитать в
этой документации.

***

Классы...

import sys
from java.util import Iterator
from net.sf.l2j.gameserver import SkillTable
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest


Основа по работе с таблицами SkillTable в этом примере важна.

***

Переменные...

MIN_LEVEL=10 # lvl? в примере не расматриваем
ADENA=57 # id adena
SOE=736 # id soe

***

Затем мы объявляем непосредственно сам класс quest. Quest – класс
python, который расширяет java класс
net.sf.l2j.gameserver.model.quest.jython.QuestJyth on. Затем мы
объявляем метод onEvent, который вызывается Явой, если квест кто то начал.


class Quest(JQuest):
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onEvent(self,event,st):
htmltext = event


***

#Decrease Weight

if event == "22" :
st.takeItems(ADENA,500)
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(1257,3),False,False)

st.setState(COMPLETED)
htmltext = "<html><head><body>Buff Finish! Reload NPC!</body></html>"

Ссылка на 22 event (из htm)...
Взять 500 итемов адены у игрока.
Кастовать игроком на себя из таблицы скиллов 1257 (скилл) мощность 3.
Завершеам игровое событие.
Вывод htm файла.

Более упращённо...

if event == "99" :
st.takeItems(ADENA,500)
st.giveItems(SOE,1)
st.setState(COMPLETED)
htmltext = "<html><head><body>Buff Finish! Reload NPC!</body></html>

Ссылка на 99 event (из htm)...
Взять 500 итемов адены у игрока.
Дать игроку SOE (переменная SOE) 1 шт.
Завершить событие.
Вывод htm файла.

***

Далее листинг о функциях квеста и завершении.

if htmltext != event:
st.setState(COMPLETED)
st.exitQuest(1)
return htmltext

Завершение события.


def onTalk (self,npc,st):
npcId = npc.getNpcId()
if npcId == 7077:
st.setState(STARTED)
htmltext = "7077-BUFF.htm"
return htmltext

Старт события.

QUEST=Quest(666,"666_PhotonBuff","PhotonBuff")
CREATED=State('Start',QUEST)
STARTED=State('Started',QUEST)
COMPLETED=State('Completed',QUEST)

QUEST.setInitialState(CREATED)
QUEST.addStartNpc(7077)
STARTED.addTalkId(7077)

Общяя инициализация функций сервером.


***

Пример ссылки в htm...

action="bypass -h Quest 1_sobytie 22"

Release Candidates for 2.60 available

The Blender Foundation has just released the first release candidate of
Blender 2.60. Please download, test, and report any bugs that you may
(or rather, will!) find.

New features include:

Improved nodes editing
Animation system improvements
Texture face properties moved to Material
Improved Weight Painting tools
Recast Detour branch, GE navigation maps.
Collada GSoC project
VertexGroup modifiers
Migrated to newer FFMpeg 0.8.2
Sequencer proxy support
Python callbacks for events like "on load" or "frame changed"
OSX now has stable OMP (threading) support for sculpt and physics sims.
And more!

***

http://www.blender.org/development/release-logs/blender-260/

http://download.blender.org/release/Blender2.60/

04 октября 2011

Debian / Mysql / Table is read only

Попала в руки годичная база которую необходимо сново поднять.
Основными ошибками были...

- Table is read only
- mysqldump: Got error: 144: Table 'mytablename' is marked as crashed
and last (automatic?) repair failed when using LOCK TABLES

***

Поскольку прошлая база криворуко слилась под root на новое место
ебстественно не стала))).
Для быстрого поднятия сего треша...

$ chown -R mysql:mysql *
$ mysqlcheck -u root -p --auto-repair --check --optimize --all-databases

Гламурно форсируем права на mysql / производим чекер всех баз (или одну).

***

$ mysqldump -u root -p my_base > my_base_backup.sql

03 октября 2011

Hugin 2011.2.0

После длительного периода въедливого тестирования выпущена новая версия
программы для сборки панорам Hugin.

Двумя важнейшими новшествами являются новая отдельная программа для
калибровки объективов, а также возможность писать сценарии на Python.
Про калибровку мы расскажем отдельно, а вот про сценарии скажем сразу:
вам понадобится SWIG (2.0+), причём отдельные сценарии могут работать
самостоятельно и требуют при этом wxPython.

Сейчас с программой поставляются четыре неплохо документированных
сценария, на примере которых можно научиться делать что-то своё:

woa.py генерирует контрольные точки из искажённых перекрытых снимков;
shooting_pattern.py применяет к панораме схему расположения снимков
6-1-1 (шесть по горизонтали, один сверху, один снизу);
top_five.py оставляет пять лучших контрольных точек для каждой пары снимков;
crop_cp.py удаляет контрольные точки из частей панорамы.
Есть и «менее» заметные изменения. К примеру, PTBatcherGUI дорос до
того, что стал используемым по умолчанию обработчиком для сборки панорам.

***

http://sourceforge.net/projects/hugin/files/hugin/hugin-2011.2/

Blender 3D / Mango

Проект Blender анонсировал начало работы над новым свободным фильмом,
который будет развиваться под кодовым именем Mango. Тематика фильма -
"Научная фантастика в Амстердаме". Ключевой задачей фильма является
исследование возможностей и улучшение средств для создания визуальных
эффектов в Blender. Если ранее выпущенные мультфильмы были лишь
анимационными проектами, то в Mango будут фигурировать живые актеры и
реальные виды города, в которые благодаря визуальным эффектам, будут
вписаны фантастические объекты. Ожидается, что продолжительность нового
фильма составит 3-5 минут.

Концепция фильма пока определена лишь поверхностно, детально сценарий
будет проработан к ноябрю. До марта 2012 года будут проводиться
подготовительные работы, в марте или апреле начнется процесс киносъемки.
Завершить работу над фильмом планируется в августе или сентябре
следующего года. Производство фильма будет вестись с использованием
только открытых рабочих инструментов: Blender для моделирования,
анимации, рендеринга, композитинга, трекинга движений и редактирования
видео, а также GIMP/MyPaint/Krita/Inkscape для работы с двумерными
изображениями. К работе над фильмом планируется на 6-7 месяцев привлечь
5-7 художников (моделирование, создание анимации, рендеринг, графический
дизайн, визуальные эффекты) и 2-3 разработчиков для доработки Blender и
написания скриптов.


Mango станет пятым анимационным проектом, выпущенным сообществом
Blender. Как и предыдущие проекты Orange (Elephants Dream), Peach (Big
Buck Bunny), Apricot (Yo Frankie) и Durian (Sintel), новый фильм будет
распространяться без ограничений в рамках лицензии Creative Commons
Attribution 3.0, которая позволяет копировать, распространять и
создавать производные произведения, которые могут быть использованы в
том числе в коммерческих целях, требуя взамен лишь указания автора и
источника.

Целью создания свободных анимационных проектов является формирование
тестовой базы для развития новых возможностей системы 3D-моделирования
Blender, проверка на практике новых и ранее реализованных возможностей,
проведение оптимизации и улучшение рабочего процесса. В итоге, каждый
фильм становится наглядной демонстрацией текущих возможностей Blender,
рекламируя его среди широкой аудитории. Так как все рабочие файлы
анимационных проектов открыты, фильмы могут также использоваться в
качестве обучающего руководства. Из областей, которые планируется
развить при работе над фильмом Mango, называются: работа с камерой и
видеоанализ движений (motion tracking), фотореалистичный рендеринг,
улучшение работы с цветом, улучшение композитинга, редактирование видео
и визуальных эффектов, новые эффекты огня, дыма, взрывов.

Сектора Лирики