Город Мастеров
IPB

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

7 страниц V   1 2 3 > » 

Chimeric
Отправлено: Jul 21 2010, 15:16


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Люди все еще нужны.
  Форум: Главный Зал · Просмотр сообщения: #136545 · Ответов: 8 · Просмотров: 20,537

Chimeric
Отправлено: Jul 15 2010, 16:54


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Привет, Вал. Давненько я тебя не видел.
  Форум: Главный Зал · Просмотр сообщения: #136504 · Ответов: 8 · Просмотров: 20,537

Chimeric
Отправлено: Jul 14 2010, 13:48


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Есть сеттинг, довольно фантастический даже для фантастики, с элементами нф и фэнтези. Вернее, есть основа сеттинга, детали будут писаться. Есть также желание сделать из него браузерную игру, которой придется быть, просто из-за характера материала, нестандартной и, вероятно, похожей на MUD. Есть большая нужда в соавторах, если они окажутся близки по духу. Нет навыков программирования для всего этого. Со временем могут быть кое-какие деньги от спонсора под проект, если мы придумаем, как ему придать коммерческую форму. Как видите, все довольно туманно, но чтобы оформилось, как раз и нужны другие люди.

Приглашаю тех, кому интересно и кто рубит код. Могут понадобиться и художники, но пока что для интерфейса, большей части игры придется быть текстовой.
  Форум: Главный Зал · Просмотр сообщения: #136489 · Ответов: 8 · Просмотров: 20,537

Chimeric
Отправлено: Nov 27 2009, 04:35


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Графика уже не впечатляет, а если начать крупный проект, то устареет до конца работ. Бог с ними, правилами ДнД, гномами, бонусами и т.д.; мне интересно, есть ли какой-нибудь современный движок, который позволял бы работать со скриптами и где диалоги имели бы нормальный вид? На ум приходят только игры Bethesda.
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #134517 · Ответов: 9 · Просмотров: 24,981

Chimeric
Отправлено: Sep 18 2009, 14:19


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Повторю здесь то, что написал в удаленной не по моей вине теме.

Я предлагаю взглянуть на ролевую составляющую с другого угла. Спросим, во первых: что такое "играть роль"? Это значит иметь "квенту" и не болтать в чате о работе? Не только и не столько; это значит, скорее, действовать и мыслить по законам предложенного мира. Запомним этот нюанс. Спросим далее: как привлечь людей к ролевой игре в этом смысле? До сих пор я слышал только об отсеве, о негативных мерах, после которых - разумеется! - пустеют серверы. Конечно, о любой порог кто-нибудь споткнется. Человеку, который садится за НВН2 с тем же настроением, что за Counter Strike, хоть кол на голове теши. Но большинство людей все же режут монстров и болтают о постороннем потому, что им не дали других занятий.

Я сказал про другие занятия и сразу же сам подумал о квестах и диалогах. Их, что ли, нужно больше сочинять? Вовсе нет. Дело это хорошее, но квесты и диалоги рассчитаны на очень специфического игрока, такого, который любит читать и домысливать прочитанное. К этому типу принадлежу я сам и понимаю отлично, что тип вымирает. Как динозавры не могли выжить в метеоритную зиму, так игроки старой закалки (а подавно совсем старой, то есть помнящие еще текстовые квесты) становятся редкостью в эпоху, когда... черт возьми... Интернет переливается болотными огнями. Чего вы хотите? Нет, если ролевой компонент выживет, то через вовлечение игроков в какие-то занятия, а не элитизм, который оборачивается отшельничеством.

Среди MMORPG в этом плане самая умная и злая игра - EVE Online, Ева. Персонажи там варятся в собственном соку; хотя разработчики и не забыли про NPC-фракции, про аналог "подземелий" и прочие элементы из одиночной игры, главное в Еве - взаимодействие с другими игроками. Можно - и есть стимулы - торговать, обжуливать, рисковать, срезая путь через опасные системы, строить козни и башни, предавать и сохранять верность, можно - и есть зачем - собирать капитал и избираться главой корпорации. Жизнь буквально кипит там, и базис геймплея, а это все-таки стрельба, скрылся под надстройкой из человеческих отношений, вообще из производных занятий. Обратите внимание на Еву! Побоку, что там космос, а здесь драконы, и что там десятки тысяч игроков. Главное вынести можно: давайте игрокам резоны вживаться в ваш мир.

Очень давно, когда Ева только начиналась, а WoW не было совсем, я записал свои мысли по этому поводу вот здесь. Тема длинная и все чистая теория, но, может, кому-то будет интересно. Здесь я повторяться не стану, а дам пример изменения в геймплее, которое втянет (не само по себе, конечно, но в комплексе мер) игроков в воображаемый мир.

Это слово о магии. Магия - это очень многое, а кое для кого - все. В НВН2 достаточно заклинаний, фанаты добавляют новые, но что это за чары в массе своей? Варианты файерболлов, защит, нагромождение бонусов... Здесь виновата, конечно, отчасти и механика, но ее можно и обойти. Итак, вместо Бомбардировки чем-то-там или Вытягивания того-то припомним старые добрые "утилитарные" заклятья настольной игры и прежде всего - второй и первой редакций.

Возьмем заклятье Leomund's Secret Chest. Знакомо? Оно вызывает заколдованный ларь, в котором маг может хранить свою утварь. Положив туда что нужно, чародей дает команду и ларь отбывает, по видимости, в никуда. Сразу два замечания: ларь, когда он не нужен, почивает на Астральном плане, и чем дольше он там остается, тем вероятнее, что его там найдет и слопает кто-нибудь. Второе: персонажи, угодив на Астральный план, могут сами набрести на чужой сундук и поживиться его содержимым.

Чувствуете, как эти две тонкости (КОТОРЫЕ НИКОГДА БЫ НЕ ПОЗАБОТИЛИСЬ ВВЕСТИ В ГЕЙПМЛЕЙ ЛЮБЫЕ ИЗВЕСТНЫЕ МНЕ РАЗРАБОТЧИКИ) меняют само ощущения заклинания, сам его аромат? Это уже не просто дурацкий сундук, как все ящики, который маг выдергивает и, швырнув туда грязные носки с трупа последнего монстра, пинком отправляет на склад. Нет, это таинственный и ненадежный (очень важно) объект, вокруг которого нужно ходить осторожными кругами, это - Колдовство. Маг, береги свой ларь, потому что создать его стоит усилий и денег, он не появляется опять готовенький, только ты отдохни и помаши руками. Ларь - уникальная сила, предмет гордости, ловкий трюк... и он не должен быть у каждого.

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

Во многих модах, например, в модах к Oblivion, авторы заставляют персонажей есть. Питаться. Время от времени ты должен нагрузиться яблоками, обглодать баранью ножку, что-то в этом роде, причем нередко требуется сначала развести огонь или разбить палатку. Приготовления и требования бывают замысловатые. Все это вводится не столько для "реализма" (бессмысленное слово), как ради immersion, то есть чтобы игрок почувствовал себя уязвимым для сил мира, в котором ходит его персонаж, и - в обмен на это - его властелином, то есть ради контакта. Меня такие моды никогда не впечатляли. Меня скорее раздражает необходимость прерываться на трапезу, пока основным занятием остается охота на монстров. Ведь что бифштекс, что яблоко в игре - вкус один: никакого. И моей фантазии приходится отворачиваться, выдавливая из себя их вкус. Мне приходится основывать театр одного актера - совсем как... с квестами, диалогами и "ролплеем".

Заметьте при этом, что я не против текста. В лучшей текстовой РПГ золотых годов Миленниума Planescape: Torment один торговец на базаре продавал закуски из других измерений - лакомства, не представленные графически вообще. Пробуя то или это, я просто читал описание, но это было прекрасное описание и оно втягивало (immersed) меня в тот мир. Дело в том, что при прочих достоинствах слог был в Торменте главным, и описания не отрывали от этого главного, а создавали на нем прекрасные завитки, так сказать, волюты... Вот и в мультиплейере нельзя отвлекать от взаимодействия людей. Вы не привлечете игроков, если не дадите им занятий, о которых они будут говорить, волноваться, заботиться и, конечно, других людей, чтобы любить и ненавидеть.

Вернемся к ларю. Что потребовалось бы, чтобы несколько углубить-расширить геймплей через это заклинание?

1) Поработать над системой магии вообще. Сделать формулы достаточно редкими и необычными, пусть их собирают по частям, по древним книгам. Никаких свитков на трупах, никаких бесплатных чар при повышении уровня (якобы мы что-то изучали, пока крушили черепа, как же...). Магия должна быть редкой, но мощной. Пусть у мага будет меньше заклятий в день, но зато пусть они будут почти неостановимы в плане спасбросков, урона и так далее; не размениваться на фокусы. Изменить на 50% репертуар: выбросить всю надоевшую, проверенно эффективную магию вроде Огненного шара и Кошмарного увядания Аби-Далзима, остальное переименовать. Избегать чар прямого поражения, разве только на верхних уровнях, но поощрять хитрость, обман, иллюзии. Для некоторых заклятий ввести или материальный компонент - не так страшен черт, как его малюют - или аппараты, механизмы, реагенты, чтобы у других игроков мелькнула и закрепилась идея искать и продавать эти аппараты, механизмы, реагенты. Но пусть у каждого такого аппарата, механизма, реагента будут кроме прямого назначения еще какие-то свойства, чтобы он не казался искусственным требованием, преградой. Это - общие меры.

2) Ларь: другие заклинания должны отправлять персонажей в Астрал, где будет скромный шанс наткнуться на сундук. (Принцип: взаимодействие с прочими функциями.)

3) Если ларь похищен, скрипт должен ставить переменную, отмечающую этот факт, и чары гадания - Contact Other Plane и т.п. - должны давать возможность обкраденному узнать, кто стоит за этим, через диалоговую опцию. (Принцип: поощрять месть и любовь.)

4) Шанс потерять ларь при хранении - его съел Астральный броненосец. (Принцип: давать игроку пищу для ума, памяти и сомнений.)

5) Пусть это будет роскошный сундук. (Принцип: дорого кошельку, дорого сердцу.)

6) Пусть это будет красивый сундук. (Принцип: не перегружать воображение, питать и чувства.)

7) Пусть это будет полезный и вместительный сундук - объемистее, чем инвентарь персонажа и товарищей по команде. (Принцип: борются за незаменимое.)

Конечно, такие изменения требуют продуманной - и все время продумываемой - концепции, а также большой работы. Прежде всего со скриптами. Но иначе нельзя. Только сделав таким образом интересными, редкими и полезными заклятья, оружие, страны и людей есть шанс доказать потенциальным игрокам, что им предлагают не тягомотину, не обязанности, а возможности, некий цельный, сложный мини-мир, где они могут делать то, на что не способны в мире реальном, то есть хорошо, деятельно и победоносно жить. Люди-то хотят именно этого и мочат друг друга в экшне, не имея других вариантов. Поверив доказательствам, а не обещаниям, игрок сам не отпустит вас, сам будет возвращаться и требовать продолжения на форумах. Ну а мир перестанет казаться "мини", как только эго играющего, укрупненное респектом других, возвеличит его личные успехи. Главное - делать упор не на воображаемом, а на реальном, и пусть воображаемое растет из него, как лоза вьется по решетке.
  Форум: Шарды рунета · Просмотр сообщения: #133865 · Ответов: 312 · Просмотров: 118,393

Chimeric
Отправлено: Sep 14 2009, 21:03


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Ну и слава богу. (IMG:style_emoticons/kolobok_light/declare.gif)
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #133813 · Ответов: 829 · Просмотров: 420,610

Chimeric
Отправлено: Sep 8 2009, 13:26


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Новость: удалось установить на моем ноутбуке тулсет. Он даже запускается, и я могу писать диалоги и компилировать скрипты. (IMG:style_emoticons/kolobok_light/prankster2.gif) Но стоит попытаться создать зону или предмет, все, где фигурирует графика, и ХХХ. (IMG:style_emoticons/kolobok_light/vava.gif) Поэтому если кто-то может протестировать мои скрипты у себя, буду весьма благодарен.
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #133635 · Ответов: 4 · Просмотров: 20,548

Chimeric
Отправлено: Sep 8 2009, 13:19


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


О константах const. Два вопроса:

1) Можно ли их декларировать в составе основной функции void main() или только перед ней?

2) Насколько, собственно, постоянны эти константы? Я читал, что они сохраняются все время работы программы. Но в случае с шардом это означает, вероятно, пока работает сервер. А вечно он работать не может, в любом случае даже persistent world придется выключить для внесения перемен, обновлений и так далее. При этом, как я понимаю, плейсы, существа и весь контент никуда не денутся, а вот константы вернутся ли? А переменные? И не исчезают ли они с выходом игрока с сервера? Предположим, мы вешаем на персонажа Int = 1; человек поиграл и уходит. Что происходит с Int? Стирается? А как на счет DelayCommand для переменных на ушедших?

Я придумал новую, как мне кажется, систему записи таких вещей - в таги и имена специальных плейсов-маркеров. Например, имя колдуна, проклявшего кого-то, и жертвы оба пишутся в маркер (который служит чем-то вроде обелиска в память о событии). Потом, когда нужно извлечь данные, скрипт ведет поиск в зоне маркеров через GetFirstObjectInArea, GetName и GetTag. Если проклятие снято, маркер удаляется. Все это должно гарантировать сохранность информации при любых выключениях, но я не знаю, нужно ли это, не заморачиваюсь ли я?
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #133634 · Ответов: 829 · Просмотров: 420,610

Chimeric
Отправлено: Sep 2 2009, 14:20


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Благодаря Sharklike я смог переписать свои скрипты под более удобное событие OnChat. Вот скрипты для заклинания "Чтение мыслей" (ESP). Не исключено, что я допустил здесь ошибки или не учел какие-то факторы. Что ж, говорите! Для того и пишу.

1.
Neverwinter Script
/// Заклинание "Чтение мыслей" (Divination, Enchantment). 2 уровень. Время сотворения 5. Позволяет одному игроку слышать все, что думает (говорит по любому из каналов) другой, до тех пор, пока не истечет срок и не сотрутся переменные. Требует добавлений к OnDisturbed и OnChat модуля или шарда.

/// дополнительные функции

void Domination() /// что происходит с телепатами, попавшими не в тот разум

{

effect eEffect = GetFirstEffect(oTarget);

while(GetIsEffectValid(eEffect))

{
nType = GetEffectType(eEffect);

if (nType = EFFECT_TYPE_CONFUSED | nType = EFFECT_TYPE_STUNNED)

{
FloatingTextStringOnCreature(OBJECT_SELF, "Вой помех в этом мозге ломает ваш тонкий щуп. Передернувшись, вы еще долго массируете виски.", FALSE);
}

else if (nType = EFFECT_TYPE_DOMINATED)

{
FloatingTextStringOnCreature(OBJECT_SELF, "Страшный гул и крики едва не валят вас наземь. Чья-то стальная воля вертит этим существом, как марионеткой!", FALSE);

int nOwnPower = GetHitDice(OBJECT_SELF);
int nTheirPower = GetHitDice(GetEffectCreator(eEffect));

if (nTheirPower => (nOwnPower*2)) /// Если захвативший разум очень силен, например, Domination создал лич 30-го уровня, маг рискует жестоко пострадать

{
int nSave = (nTheirPower + 10) / (GetWisdom(OBJECT_SELF) / 15);

if (WillSave(OBJECT_SELF, nSave, SAVING_THROW_TYPE_MIND_SPELLS, GetEffectCreator(eEffect)) = 0)

{
effect eStone = EffectMagicalEffect(EffectPetrify());
effect eVis = EffectVisualEffect(VFX_DUR_PETRIFY);
effect eDarkness = EffectVisualEffect(VFX_DUR_BLIND);
effect eLink = EffectLinkEffects(eStone, eVis);
effect eLink2 = EffectLinkEffects(eLink, eDarkness);
DelayCommand(3.5, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink2, OBJECT_SELF));
DelayCommand(1.5, FloatingTextStringOnCreature(OBJECT_SELF, "Вы мечетесь, пытаясь выбраться из черепной крысоловки, но...", FALSE));
DelayCommand(3.0, FloatingTextStringOnCreature(OBJECT_SELF, "Холод и темнота смыкаются вокруг.", FALSE));
}
}

else

{
DelayCommand(1.5, FloatingTextStringOnCreature(OBJECT_SELF, "Мощным рывком вы выбираетесь из мрачной воронки, куда уже начали погружаться, и разрываете связь.", FALSE));
}
}

else

{
eEffect = GetNextEffect(oTarget);
}
}


void RetainControl() /// победа в борьбе за контроль объекта прежнего телепата

{
sWho = "Есть! Усилием воли вы изгоняете нахала. Это был кто-то по имени " + GetName(OBJECT_SELF) + ".";
DelayCommand(11.0, FloatingTextStringOnCreature(oFormer, sWho, FALSE));
DelayCommand(10.0, FloatingTextStringOnCreature(OBJECT_SELF, "...Но тот, другой, слишком силен.", FALSE));
sWho = "Вы отступаете, узнав имя соперника -" + sFormer + ".";
DelayCommand(11.0, FloatingTextStringOnCreature(OBJECT_SELF, sWho, FALSE));
DelayCommand(10.0, FloatingTextStringOnCreature(oTarget, "Разброд в мыслях.", FALSE);
}


void GainControl() /// победа пришельца

{
DelayCommand(10.0, FloatingTextStringOnCreature(oFormer, "Трах! Телепатическую связь уводят у вас из-под носа!", TRUE)); /// переключаем канал на себя и даем знать ему и всей его шатии - ради интриги
DelayCommand(10.0, FloatingTextStringOnCreature(OBJECT_SELF, "Прикрыв глаза, вы вплываете в чужой разум.", FALSE));
DelayCommand(10.0, GiveXP(OBJECT_SELF, (10 - nSuperiority) * 20)); /// небольшая награда активно нападающему, но не защищавшемуся
DelayCommand(11.0, SetLocalInt(oTarget, "ESP_target", 1));
fDuration + 11.0;
DelayCommand(fDuration, DeleteLocalInt(oTarget, "ESP_target"));
DelayCommand(11.0, Scrutiny());
}


void Scrutiny() /// в самом начале заклинание сообщает дополнительные данные

{

string sMoney = IntToString((GetGold(oTarget) / (d10() + 5)) * (d10() + 5)); /// шпион примерно узнает, сколько у существа золота...

if (GetGender(oTarget) = MALE)

{
string sEstimate = "У него в кошельке порядка " + sMoney + " монет и вот какая экипировка."
}

else

{
string sEstimate = "У нее в кошельке порядка " + sMoney + " монет и вот какая экипировка."
}

FloatingTextStringOnCreature(OBJECT_SELF, sEstimate, FALSE);

/// и может посмотреть на снаряжение. Добавление к OnDisturbed гарантирует, что он ничего не сможет оттуда похитить или добавить.

DelayCommand(2.5, OpenInventory(oTarget, OBJECT_SELF));
}



/// главная функция чтения мыслей

void main()

{
float fDuration = GetCasterLevel(oSender) * 60; /// длится 10 раундов за уровень

if (GetMetaMagicFeat() = METAMAGIC_EXTEND) /// метамагия удваивает срок

{
fDuration * 2;
}

object oTarget = GetAttemptedSpellTarget();
effect eEffect = SupernaturalEffect(EffectParalyze());

if (GetLocalInt(OBJECT_SELF, "ESP_listener") = 1) /// если маг уже слушает кого-то...

{
FloatingTextStringOnCreature(OBJECT_SELF, "Вы уже поддерживаете одну ментальную смычку.", FALSE);
}

else if (GetIsImmune(oTarget, IMMUNITY_TYPE_MIND_SPELLS) = TRUE) /// если цель защищена

{
FloatingTextStringOnCreature(OBJECT_SELF, "Вход закрыт...", FALSE);
}

else if (GetLocalInt(oTarget, "ESP_target") = 0) но если разум цели свободен, то можно войти в него

{
SignalEvent(EventSpellCastAt(OBJECT_SELF, SPELL_ESP, TRUE)); /// объявляем о заклинании

Domination(); /// проверка нынешнего состояния цели

SetLocalInt(oTarget, "ESP_target", 1); /// задаем переменные шпиона и цели
SetLocalInt(OBJECT_SELF, "ESP_listener", 1);
DelayCommand(fDuration, DeleteLocalInt(oTarget, "ESP_target")); /// на некоторое время
DelayCommand(fDuration, DeleteLocalInt(OBJECT_SELF, "ESP_listener"));
Scrutiny();
}

else /// а может оказаться, что кто-то уже шпионит за мыслями объекта. Тогда мы вступаем с ним в противоборство

{

SignalEvent(EventSpellCastAt(OBJECT_SELF, SPELL_ESP, TRUE)); /// объявляем о заклинании

Domination(); /// проверка эффектов

object oFormer = GetFirstObjectInArea();

while (oFormer != OBJECT_INVALID && GetLocalInt(oFormer, "ESP_listener") = 0)

{
oFormer = GetNextPC();
}

ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, OBJECT_SELF, 11.0f);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oFormer, 11.0f);
FloatingTextStringOnCreature(OBJECT_SELF, "Вы встречаете в разуме этого объекта другого наблюдателя!", FALSE);
DelayCommand(1.0, FloatingTextStringOnCreature(OBJECT_SELF, "Напрягшись, вы пытаетесь вытеснить чужака...", FALSE));
DelayCommand(2.3, FloatingTextStringOnCreature(OBJECT_SELF, "...Мышцы скрутились в узлы, едкий пот сочится по лбу...", FALSE));
DelayCommand(6.0, FloatingTextStringOnCreature(OBJECT_SELF, "...Не в состоянии шевельнуть и пальцем, вы будто превратились в статую Упорства...", FALSE));
string sWho = GetName(oTarget) + "?" + " ...Нет. Творится что-то неладное.";
FloatingTextStringOnCreature(oFormer, sWho, FALSE);
DelayCommand(1.0, FloatingTextStringOnCreature(oFormer, "Кто-то другой внедрился в это сознание и пытается выбросить вас!", FALSE));
DelayCommand(2.3, FloatingTextStringOnCreature(oFormer, "Сцепив зубы, вы вступаете на мысленную арену...", FALSE));
DelayCommand(6.0, FloatingTextStringOnCreature(oFormer, "Борьба умов не видна другим, но высекает огромные, как звезды, искры у вас за переносицей...", FALSE));

float fOwnPower = GetHitDice(OBJECT_SELF);
float fTheirPower = GetHitDice(oFormer);
float fSuperiority = fabs(fOwnPower - fTheirPower);
int nSuperiority = FloatToInt(fSuperiority);

if (fOwnPower => fTheirPower) /// В побединке держит верх чаще всего сильнейший...

{

if (d100() > nSuperiority * 10) /// ...но и разница в уровне не гарантирует триумфа

{
GainControl();
}

else

{
RetainControl();
}


else if (d100() > nSuperiority * 10)

{
RetainControl();
}

else

{
GainControl();
}
}

else

{
DelayCommand(10.0, FloatingTextStringOnCreature(OBJECT_SELF, "Прикрыв глаза, вы вплываете в чужой разум.", FALSE));
SetLocalInt(oTarget, "ESP_target", 1);
SetLocalInt(OBJECT_SELF, "ESP_listener", 1);
fDuration + 10.0;
DelayCommand(fDuration, DeleteLocalInt(oTarget, "ESP_target"));
DelayCommand(fDuration, DeleteLocalInt(OBJECT_SELF, "ESP_listener"));
DelayCommand(10.0, Scrutiny());
}
}
}


2.

Neverwinter Script
/// Заклинание "Чтение мыслей" (Divination, Enchantment). 2 уровень. Время сотворения 5. Добавление к OnChat модуля или шарда.  Блок ставится внутри общей функции StartingConditional события.

if (GetLocalInt(oSender, "ESP_target") = 1) /// если отправитель чатового сообщения имеет на себе переменную "Чтения мыслей", тогда...

{

if (GetCurrentHitPoints(oSender) >0)

{
object oListener = GetFirstObjectInArea();
string sAha = "~" + sMessage + "~";

while (GetIsPC(oListener) != TRUE || GetLocalInt(oListener, "ESP_listener") = 0)

{
oListener = GetNextObjectInArea();
}

FloatingTextStringOnCreature(oListener, GetStringLowerCase(sAha), FALSE); /// его слова идут кому надо

}
return TRUE; /// и доходят до адресата также

else if (GetCurrentHitPoints(oSender) < 0 & GetCurrentHitPoints(oSender) > 10)

{
sAha = "Мысли объекта взрываются пульсом боли, скоро он разгоняется до чистой агонии. Кажется, объект умирает!"
FloatingTextStringOnCreature(oListener, GetStringLowerCase(sAha), FALSE);
}
}
return TRUE;


3.
Neverwinter Script
/// Заклинание "Чтение мыслей" (Divination, Enchantment). 2 уровень. Время сотворения 5. Добавление к скрипту OnDisturbed модуля или шарда. Добавление к OnChat "Чтения мыслей" позволяет в качестве одного из эффектов заклинания заглянуть в рюкзак объекта, то есть OBJECT_SELF. Эта приписка не даст брать или класть туда вещи.

if GetLocalInt(GetIsDead(OBJECT_SELF) != TRUE && OBJECT_SELF, "ESP_target" = 1)

{

object oItem=GetInventoryDisturbItem();
object oSpying = GetFirstObjectInArea();
int nType=GetInventoryDisturbType();

while (GetIsDead(OBJECT_SELF) != TRUE && GetIsPC(oSpying) != TRUE && oSpying != OBJECT_INVALID && GetLocalInt(oSpying, "ESP_listener") = 0 && GetLocalInt(OBJECT_SELF, "ESP_target") = 0) /// нас интересуют живые персонажи с переменной подслушивания

{
oSpying = GetNextObjectInArea();
}

switch (nType)

{
case INVENTORY_DISTURB_TYPE_REMOVED:
AssignCommand(OBJECT_SELF, ActionTakeItem(oItem), oSpying);
break;

case INVENTORY_DISTURB_TYPE_STOLEN:
AssignCommand(OBJECT_SELF, ActionTakeItem(oItem), oSpying);
break;

case INVENTORY_DISTURB_TYPE_ADDED:
AssignCommand(oSpying, ActionTakeItem(oItem), OBJECT_SELF);
break;
}
}


Что вы думаете?
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #133452 · Ответов: 4 · Просмотров: 20,548

Chimeric
Отправлено: Aug 31 2009, 13:48


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


На это я погляжу.
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #133409 · Ответов: 4 · Просмотров: 20,548

Chimeric
Отправлено: Aug 28 2009, 13:13


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Во всяком случае, используется этот метод нечасто. Для кого-то он может быть совсем в новинку.

Функции SetListening, SetListenPattern и иже с ними предназначены для проверки реакций, главным образом, NPC на те или иные реплики. PC могут узнавать через них пароли и т.п. - очень ограниченная функциональность, которую обычно оставляют, как она есть. Но подумаем, что такое система "слушания" вообще, если она позволяет игре отмечать "сказанные", то есть напечатанные, слова и реагировать на них? Это клавишный интерфейс, - по сути, parser, как назывались в текстовых квестах системы, позволявшие набрать в DOS-строчке, к примеру, TAKE SWORD - и персонаж брал меч. Клавишный интерфейс сложнее использовать, чем графический, но и возможности у него шире. В NWN мы можем использовать эту функцию для разного рода настроек.

Меня интересует прежде всего магия. Вот один случай: как нам указать, кого именно мы хотим получить, употребив чары Monster Summoning? Случайный выбор или, наоборот, никакого выбора - это не по мне, но и радиальные кнопки для стольких вариантов завести нереально. Делаем для Monster Summoning скрипт по образцу следующего, который управляет вызыванием элементалов.


Neverwinter Script
/// Пример чар, вызывающих элементала нужной стихии.


void Summon(string sElemental);

{
effect eSummon = EffectSummonCreature(sElemental, ЭФФЕКТ ПОЯВЛЕНИЯ, 0.5f); /// или другая функция вызова
location lTarget = GetLocation(OBJECT_SELF);
float fDuration = GetCasterLevel() * 18; /// длится 3 раунда за уровень мага

if (GetMetaMagicFeat() = METAMAGIC_EXTEND) /// метамагия

{
fDuration * 2;
}

ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, lTarget, fDuration);
}


void main()

{

effect eStun = SupernaturalEffect(EffectStun()); /// контролируя элементала, маг выключен из происходящего

SignalEvent(OBJECT_SELF, EventSpellCastAt(OBJECT_SELF, SPELL_CONJURE_ELEMENTAL, FALSE));
ApplyEffectTObject(DURATION_TYPE_TEMPORARY, eStun, OBJECT_SELF, fDuration);
string sPattern = "(**зем**|**почв**|**камен**|**песк**|**песч**
|**песо**|**глин**)|(**огонь**|**огн**|**плам**|**у
голь**|**зол**|**жар**|**дым**)|(**вод**|**мор**|**
рек**|**реч**|**рек**|**океан**|**дожд**)|(**возду*
*|**ветр**|**вихр**|**бриз**|**ураган**|**бур**)"
;


/// желательно сделать struct с индексами всех схем для ListenPattern

/// любая группа этих слов даст игре знать, какой элемент мага интересует. Фраза может варьироваться от простого "камень" до "Явись, порождение песка!"


SetListenPatternNumber(OBJECT_SELF, 2); /// ставим схему
SetListening(oPC, TRUE); /// начинаем слушать
DelayCommand(5.0, SetListening(oPC, FALSE)); /// у мага пять секунд на то, чтобы напечатать команду

string sCall = GetMatchedSubstring(0)); /// следим за ЛЮБЫМИ словами мага
int nTheElement = GetMatchedSubstringsCount(sCall); /// считаем совпадения со схемой

while (nTheElement > 0) /// если они нашлись, то где именно?

{

if (TestStringAgainstPattern("**зем**|**почв**|**камен**|**песк**|**песч**|
**песо**|**глин**"
, sCall) = TRUE) /// если призыв к земле, то...

{
Summon("Земной элементал");
break;
}
}

else if (TestStringAgainstPattern("**огонь**|**огн**|**плам**|**уголь**|**зол**|
**жар**|**дым**"
, sCall) = TRUE) /// если призыв к огню, то...

{
Summon("Огненный элементал");
break;
}
}

else if (TestStringAgainstPattern("**вод**|**мор**|**рек**|**реч**|**рек**|**оке
ан**|**дожд**"
, sCall) = TRUE) /// если призыв к воде, то...

{
summon("Водный элементал");
break;
}
}

else if (TestStringAgainstPattern("**возду**|**ветр**|**вихр**|**бриз**|**ураган
**|**бур**"
, sCall) = TRUE) /// если призыв к воздуху, то...

{
Summon("Воздушный элементал");
break;
}
}
}

Не исключено, что я допустил ошибки в коде. Тогда прошу меня поправить, тем более, что он писался для Авроры. Но идея верна. Известно во всяком случае, что можно получить PC через GetLastSpeaker и можно записать его слова в string - а остальное, как говорится, дело техники. Вы в состоянии сами домыслить, для чего еще хорош этот слуховой аппарат. В голову приходят варианты:

1) С его помощью можно отвечать на простые вопросы NPC напрямую, без диалогового окна. Стражник спрашивает "Сдаешься?" и если через пять секунд игрок не напечатает "Да" или "Сдаюсь", то -

2) Можно отдавать персонажу несложные команды, как то: "Следи за (имя NPC или игрока)". Эту команду необходимо предварить "командным словом", в ответ на которое игра будет фиксировать следующие реплики по заданным схемам. Слово, разумеется, игрок должен знать наперед. Тогда, при правильных настройках, персонаж автоматически включит Stealth и будет ходить за объектом по пятам. Другое командное слово выключит режим записи. Так как все функции слушания проверяются через общий для всего шарда GetLastSpeaker, на крупных шардах полезно давать знать игроку, что его команда услышана. Кстати, Функции SetListening все равно, кричит персонаж на весь сервер или шепчет, поэтому лишние сообщения не будут качаться над головами. Точно так же можно приказать самому себе "Делай зелья невидимости" - и персонаж займется алхимией. Эти автоматические действия было бы не так сложно прописать. По сути функция открывает дорогу макросам.

3) Система аукционов. NPC или PC говорит командное слово, объявляет лот, говорит другое командное слово и внимает выкрикам. Максимальное услышанное значение автоматически забирает у покупателя деньги и вручает ему товар.

4) Всякого рода численные параметры теперь могут быть указаны точно. Предположим, какое-то заклинание создает nLevel * 5 HD нежити любого рода, а игроку нужна конкретная смесь. Теперь он может напечатать "3 гуля, 1 гаст и 5 зомби" - и вуаля!

4) Чары наподобие Sequencer.

5) Завещания!

6) Новые возможности контроля для Dungeon Master, который теперь может просто напечатать, к примеру, "дождь"...

И так далее, и так далее, и так далее.
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #133358 · Ответов: 4 · Просмотров: 20,548

Chimeric
Отправлено: Aug 28 2009, 12:54


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


По-моему, ясно - то скрипт заклинания, вернее, двух. Одно создает "гекатомбу", очаг насыщенной смерти после одновременной гибели множества созданий. Эту силу может использовать некромант, но гекатомба невидима. Второе заклинание заставляет искать ее живое существо, которое идет в сторону гекатомбы, указывая некроманту путь, и там умирает, если добирается. Работают ли скрипты, вот вопрос?

Еще два заклинания:

Neverwinter Script
/// Заклинание Биополь. Некромантия. 8 уровень. Время наложения - 1. Длится три раунда. Выпускает жизненную силу мага, чтобы укрыть его и тех, кто рядом, от всякого прямого вреда и дает бонус к спасброскам Крепости. Жизненная сила, однако, быстро тает, а с ней и защита. До конца действия чар маг не в состоянии двигаться, даже когда заклинание его уже практически не оберегает. Поэтому возможно умереть, не рассчитав своих возможностей, или от мощной атаки на последнем раунде действия. Механика поощряет заблаговременное вытягивание чужой энергии, чтобы повысить эффективность и несколько обезопасить некроманта, но во время трех раундов действия он не подлежит лечению и регенерации никакими средствами. Заклинание для крайних случаев. 



void main()

{

location lSelf = GetLocation(oTarget);

float fDuration = 18.0; /// продолжительность - три раунда

int nAmount = (GetCurrentHitPoints(OBJECT_SELF) / 15) * GetHitDice(OBJECT_SELF); /// за каждый уровень после начального, 15-го, начинает собираться небольшой бонус

int nMetaMagic = GetMetaMagicFeat(OBJECT_SELF);

int nStartingHealth;

int nBackToWounded;

effect eShield = EffectDamageResistance(DAMAGE_TYPE_ACID | DAMAGE_TYPE_BASE_WEAPON DAMAGE_TYPE_BLUDGEONING | DAMAGE_TYPE_DIVINE | DAMAGE_TYPE_ELECTRICAL | DAMAGE_TYPE_FIRE | DAMAGE_TYPE_MAGICAL | DAMAGE_TYPE_NEGATIVE | DAMAGE_TYPE_PIERCING | DAMAGE_TYPE_POSITIVE | DAMAGE_TYPE_SLASHING | DAMAGE_TYPE_SONIC, nAmount, nAmount);

effect eSave = EffectSavingThrowIncrease(SAVING_THROW_FORTITUDE, nAmount / 8, SAVING_THROW_TYPE_ALL);

effect eCantMove = EffectParalyze(); /// если только при этом нет опасности coup de grace, иначе лучше Stun

effect eVisFreeze = EffectVisualEffect(VFX_DUR_FREEZE_ANIMATION); ///

effect eVisGlow = EffectVisualEffect(VFX_DUR_LIGHT_WHITE_15); ///

effect eVisAura = EffectVisualEffect(VFX_DUR_AURA_WHITE); /// /// или эквиваленты

effect eDamage = SupernaturalEffect(EffectDamage(1, DAMAGE_POWER_PLUS_SIX)); /// или эквивалент всепроникающего урона в NWN2

effect eLink1 = MagicalEffect(EffectLinkEffects(eShield, eSave));

effect eLink2 = MagicalEffect(EffectLinkEffects(eLink1, eCantMove));

effect eLink3 = MagicalEffect(EffectLinkEffects(eVisGlow, eVisAura));

effect eLink4 = MagicalEffect(EffectLinkEffects(eVisFreeze, eLink3));

effect eLink5 = MagicalEffect(EffectLinkEffects(eLink2, eLink4));

object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 3.0f, lSelf, TRUE, OBJECT_TYPE_CREATURE); /// радиус в метрах?

SetLocalInt(OBJECT_SELF, "starting_health", nAmount);


if (nMetaMagic == METAMAGIC_EXTEND)

{

fDuration = 36.0; /// запомнив чары как 9-й уровень, можно получить шесть раундов защиты, но это опасно (смотри ниже)

}

while (GetIsDead(OBJECT_SELF) != TRUE & fDuration > 0)

{

ApplyEffectToObject(DURATION_TYPE_Temporary, eLink5, OBJECT_SELF, 0.5f);

ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, OBJECT_SELF); /// постоянная потеря сил

DelayCommand(0.5, fDuration = fDuration - 0.5) /// это сработает? следующий виток всей функции - через полсекунды


if (nAmount > nAmount) /// попытки повысить hp, пока действуют чары, ни к чему не приводят

{

nStartingHealth = GetLocalInt(OBJECT_SELF, "starting_health");

nBacktoWounded = nStartingHealth - nAmount;

ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(nBackToWounded, DAMAGE_POWER_PLUS_SIX), OBJECT_SELF));

nAmount = nAmount; /// здесь у меня сомнения

}


if (GetIsEffectValid(eLink5) = FALSE) /// если развеяли общий эффект, то остановка

break;

}

while (GetisEnemy(oTarget) != FALSE & GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD)

{

ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink1, oTarget, 0.5f);

oTarget = GetNextObjectInShape(SHAPE_SPHERE, 3.0f, lSelf, TRUE, OBJECT_TYPE_CREATURE);

if (oTarget != OBJECT_INVALID & nDuration > 0)

{

oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 3.0f, lSelf, TRUE, OBJECT_TYPE_CREATURE);  /// если перебрал всех существ в радиусе, начинай сначала

}

if (GetIsEffectValid(eLink5) = FALSE) /// если аура уже не излучается

break;

}

}




Другое заклинание - ESP (Чтение мыслей). Здесь несколько скриптов-добавлений к скриптам. Тоже прошу указать на ошибки или протестировать.

Neverwinter Script
/// Заклинание "Чтение мыслей" (Divination, Enchantment). 2 уровень. Время сотворения 5. Добавление к OnAreaTransitionClick модуля или шарда. Удаляет переменную ESP, стоит персонажу покинуть зону.


void CancelESP()


{

object oLeaving = GetClickingObject();


if (GetIsPC(oLeaving) = TRUE)

{

DeleteLocalString(oLeaving, "ESP"); /// отдельной функцией, чтобы несуществующий string не мешал выполнению остальной части скрипта ухода
}
}


Neverwinter Script
/// Заклинание "Чтение мыслей" (Divination, Enchantment). 2 уровень. Время сотворения 5. Добавление к OnConversation модуля или шарда (или, возможно, к OnUserDefined). Используя GetLastSpeaker, записывает и передает все, что говорит заколдованный персонаж, покуда он не покинет зону.


void main()

{

object oSpyOn = GetLastSpeaker();

object oListener = GetFirstPC();

int nESPPattern = GetListenPatternNumber();

string sListener = GetLocalString(oSpyOn, "ESP");

string sspyOn = GetName(oSpyOn);



while (sListener != "" && oListener != OBJECT_INVALID && GetName(oListener) != sListener)



{

oListener = GetNextPC();

}


if (oListener != OBJECT_INVALID)


{


if (nESPPattern = 1)


{

string sAha = "~" + GetStringLowerCase(GetMatchedSubstring(0)) + "~"; /// записываем каждое слово

FloatingTextStringOnCreature(oListener, sAha, FALSE); /// и передаем его кому следует

}

}

}




Neverwinter Script
/// Заклинание "Чтение мыслей" (Divination, Enchantment). 2 уровень. Время сотворения 5. Основной скрипт.

void main()

{

object oSpyOn = GetSpellTargetObject();

string sPattern = "**";

int nListenPatternNum = 1; /// желательно сделать struct с индексами всех схем для ListenPattern

int nDuration = GetCasterLevel() * 60; /// длится минуту за уровень мага

effect eEffect = SupernaturalEffect(EffectParalyze());


SignalEvent(OBJECT_SELF, EventSpellCastAt(oSpyOn, SPELL_ESP, FALSE)); /// не вредное заклинание, может быть полезно и внутри компаний


if (GetMetaMagicFeat() = METAMAGIC_EXTEND)


{

nDuration * 2;

}



if (GetLocalString(oSpyOn, "ESP") != "" && sListener != GetName(OBJECT_SELF)) /// если кто-то уже слушает...


{


string sFormer = GetLocalString(oSpyOn, "ESP"); /// ...то устраиваем единоборство...

object oFormer = GetFirstPC();


while (oFormer != OBJECT_INVALID && GetName(oFormer) != sFormer)


{

oFormer = GetNextPC();

}


SetListening(oSpyOn, FALSE));

ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, OBJECT_SELF, 11.0f);

ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oFormer, 11.0f);

FloatingTextStringOnCreature(OBJECT_SELF, "Вы обнаруживаете в разуме этого человека другого наблюдателя!", FALSE);

DelayCommand(1.0, FloatingTextStringOnCreature(OBJECT_SELF, "Напрягшись, пытаетесь вытеснить чужака...", FALSE));

DelayCommand(2.3, FloatingTextStringOnCreature(OBJECT_SELF, "...Ваши мышцы скрутились в узлы, пот сочится по лбу...", FALSE));

DelayCommand(6.0, FloatingTextStringOnCreature(OBJECT_SELF, "...Не в состоянии шевельнуть и пальцем, вы превратились в чистое ментальное усилие", FALSE));

string sWho = sSpyOn? + " ...Нет. Творится что-то неладное.";

FloatingTextStringOnCreature(oFormer, sWho, FALSE);

DelayCommand(1.0, FloatingTextStringOnCreature(oFormer, "Кто-то другой внедрился в это сознание и пытается выбросить вас!", FALSE));

DelayCommand(2.3, FloatingTextStringOnCreature(oFormer, "Сцепив зубы, вы вступаете на мысленную арену...", FALSE));

DelayCommand(6.0, FloatingTextStringOnCreature(oFormer, "Невидимая борьба умов высекает огромные, как звезды, искры у вас за переносицей...", FALSE));



float fOwnPower = GetHitDice(OBJECT_SELF);

float fTheirPower = GetHitDice(oListener);

float fSuperiority = fabs(fOwnPower - fTheirPower);

int nSuperiority = FloatToInt(fSuperiority);


if (fOwnPower => fTheirPower) /// ...в котором побеждает чаще всего сильнейший


{


if (d100() > nSuperiority * 10)

{


DelayCommand(10.0, FloatingTextStringOnCreature(oFormer, "Трах! Телепатическую связь уводят у вас из-под носа!", TRUE)); /// переключаем канал на себя и даем знать ему и всей его шатии - ради интриги

DelayCommand(10.0, FloatingTextStringOnCreature(OBJECT_SELF, "Прикрыв глаза, вы вплываете в чужой разум", FALSE));

DelayCommand(10.0, GiveXP(OBJECT_SELF, (10 - nSuperiority) * 20)); /// небольшая награда активно нападающему, но не защищавшемуся

SetListenPattern(oSpyOn, sPattern, 1);

DelayCommand(11.0, SetListening(oSpyOn, TRUE));

DelayCommand(11.0, SetLocalString(oSpyOn, "ESP", GetName(OBJECT_SELF)));

DelayCommand(nDuration, DeleteLocalString(oSpyOn, "ESP"));

DelayCommand(nDuration, SetListening(oSpyOn, FALSE));


}


else


{

sWho = "Есть! Усилием воли вы изгоняете нахала. Это был кто-то по имени " + GetName(OBJECT_SELF) + ".";

DelayCommand(11.0, FloatingTextStringOnCreature(oFormer, sWho, FALSE));

DelayCommand(10.0, FloatingTextStringOnCreature(OBJECT_SELF, "...Но тот, другой, слишком силен.", FALSE));

sWho = "Вы отступаете, узнав имя соперника -" + sFormer + ".";

DelayCommand(11.0, FloatingTextStringOnCreature(OBJECT_SELF, sWho, FALSE));

DelayCommand(10.0, FloatingTextStringOnCreature(oSpyOn, "У вас путаются мысли.", FALSE);

DelayCommand(12.0, SetListening(oSpyOn, TRUE));

DelayCommand(nDuration, DeleteLocalString(oSpyOn, "ESP"));

DelayCommand(nDuration, SetListening(oSpyOn, FALSE));


}

}


else if (d100() > nSuperiority * 10)



{

sWho = "Есть! Усилием воли вы изгоняете нахала. Это был кто-то по имени " + GetName(OBJECT_SELF) + ".";

DelayCommand(11.0, FloatingTextStringOnCreature(oFormer, sWho, FALSE));

DelayCommand(10.0, FloatingTextStringOnCreature(OBJECT_SELF, "...Но тот, другой, слишком силен.", FALSE));

sWho = "Вы отступаете, узнав имя соперника -" + sFormer + ".";

DelayCommand(11.0, FloatingTextStringOnCreature(OBJECT_SELF, sWho, FALSE));

DelayCommand(10.0, FloatingTextStringOnCreature(oSpyOn, "У вас путаются мысли.", FALSE);

DelayCommand(12.0, SetListening(oSpyOn, TRUE));

DelayCommand(nDuration, DeleteLocalString(oSpyOn, "ESP"));

DelayCommand(nDuration, SetListening(oSpyOn, FALSE));

}


else


{

DelayCommand(10.0, FloatingTextStringOnCreature(oFormer, "Трах! Телепатическую связь уводят у вас из-под носа!", TRUE)); /// переключаем канал на себя и даем знать ему и всей его шатии - ради интриги

DelayCommand(10.0, FloatingTextStringOnCreature(OBJECT_SELF, "Прикрыв глаза, вы вплываете в чужой разум", FALSE));

DelayCommand(10.0, GiveXP(OBJECT_SELF, (10 - nSuperiority) * 20)); /// небольшая награда активно нападающему, но не защищавшемуся

SetListenPattern(oSpyOn, sPattern, 1);

DelayCommand(11.0, SetListening(oSpyOn, TRUE));

DelayCommand(11.0, SetLocalString(oSpyOn, "ESP", GetName(OBJECT_SELF)));

DelayCommand(nDuration, DeleteLocalString(oSpyOn, "ESP"));

DelayCommand(nDuration, SetListening(oSpyOn, FALSE));


}

}


else


{

DelayCommand(10.0, FloatingTextStringOnCreature(OBJECT_SELF, "Прикрыв глаза, вы вплываете в чужой разум", FALSE));

SetListenPattern(oSpyOn, sPattern, 1);

SetListening(oSpyOn, TRUE);

SetLocalString(oSpyOn, "ESP", GetName(OBJECT_SELF));

DelayCommand(nDuration, DeleteLocalString(oSpyOn, "ESP"));

DelayCommand(nDuration, SetListening(oSpyOn, FALSE));

}

}


  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #133357 · Ответов: 4 · Просмотров: 10,784

Chimeric
Отправлено: Aug 18 2009, 16:49


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Neverwinter Script
void LeafThroughCorpses(object oCorpse, int nHecatomb)



{



oCorpse = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF));

nHecatomb = GetLocalInt(oCorpse, "hecatomb") + nHecatomb;



while (GetIsObjectValid(oCorpse) & GetIsDead(oCorpse) == TRUE)



{



SetLocalInt(OBJECT_SELF, "hecatomb", nHecatomb);



}



oCorpse = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF));



}

}







void main()



{



location lSelf = GetLocation(OBJECT_SELF);



SetLocalInt(OBJECT_SELF, "hecatomb", GetHitDice(OBJECT_SELF));

LeafThroughCorpses;

DelayCommand(5.0, DeleteLocalInt(OBJECT_SELF, "hecatomb"));



if (nHecatomb =>50)



{



if (nHecatomb < 70)



{



CreateObject(OBJECT_TYPE_TRIGGER, "hecatomb_small", lSelf, FALSE);



}



else if (nHecatomb < 100)



{



CreateObject(OBJECT_TYPE_TRIGGER, "hecatomb_medium", lSelf, FALSE);



}



else



{



CreateObject(OBJECT_TYPE_TRIGGER, "hecatomb_great", lSelf, FALSE);





}



SetLocalInt(GetNearestObject(OBJECT_TYPE_TRIGGER, OBJECT_SELF), "hecatomb_worth", nHecatomb);

DeleteLocalInt(OBJECT_SELF, "hecatomb");



}



}




Это один скрипт, понятный. Вот скрипт заклинания - попытка.

Neverwinter Script
void SpellExpired()



{



DeleteLocalInt(oTarget, "seeking_hecatomb"));

DeleteLocalInt(oTarget, "health"));



if (GetIsDead(oTarget) != TRUE)



{

ClearAllActions(oTarget);



if ((GetObjectSeen(OBJECT_SELF), oTarget) == TRUE)



{

SetIsTemporaryEnemy(OBJECT_SELF, oTarget, TRUE, fHateLasts); /// нападает на мага, если видит его тут же

DetermineCombatRound();

}



else



{

AssignCommand, (oTarget, ActionMoveToLocation(lSelf, TRUE, 0.0f)); /// иначе бегом назад

}



}

}



void SeekHecatombHolocaust()



{



location lSelf = GetLocation(oTarget);

object oHecatomb = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lSelf, FALSE, OBJECT_TYPE_TRIGGER); /// ищем в огромном радиусе триггер. так как требуется лишь один, я обошелся без функции while и GetNextObjectInShape.

int nDuration = GetCasterLevel(OBJECT_SELF) * 5; /// длительность

int nMetaMagic = GetMetaMagicFeat(OBJECT_SELF); /// вдвое больше с метамагией

int nHealth = GetCurrentHitPoints(oTarget);

float fHateLasts = GetIntelligence(oTarget) * 20; ///умный ненавидит за это дольше



SetLocalVariable(oTarget, "health", nHealth);



if (nMetaMagic == METAMAGIC_EXTEND)

{

nDuration = nDuration * 2;

}





if (WillSave(oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_EVIL, OBJECT_SELF) == 0

&& ResistSpell(OBJECT_SELF, oTarget) != 1) /// типы спасброска имеют значение? можно ли указать два типа сразу для одного броска, например, TYPE_EVIL и TYPE_NEGATIVE?



{



if (oHecatomb != OBJECT_INVALID && (GetTag(oHecatomb) == "hecatomb_small" | GetTag(oHecatomb) == "hecatomb_medium" | GetTag(oHecatomb) == "hecatomb_great") && (GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD) && (GetDistanceBetween(oHecatomb, oTarget) <= 100.0)) /// я не уверен, ставить ли && или &. смысл: "если объект с одним из трех тегов найден, И если oTarget - не нежить, И если oTarget в пределах ста метров от объекта с тегом"...



{

AssignCommand(oTarget, ActionMoveToObject(oHecatomb, 0.0f))); /// oTarget идет к триггеру так, чтобы зайти на него.

SetLocalInt(oTarget, "seeking_hecatomb", 1);

DelayCommand(IntToFloat(nDuration), SpellExpired()); /// когда срок вышел, то...



while (GetLocalInt(oTarget, "seeking_hecatomb") == 1)



{



if (nHealth < GetLocalVariable(oTarget, "health"))



{



ClearAllActions(oTarget);

SetLocalVariable(oTarget, "health", nHealth);

DelayCommand(IntToFloat(nDuration), DeleteLocalInt(oTarget, "seeking_hecatomb")); /// пока идет к триггеру, любая рана отменяет эффект



}

}

}

}



else if ((GetObjectSeen(OBJECT_SELF), oTarget) == TRUE)



{



SetIsTemporaryEnemy(OBJECT_SELF, oTarget, TRUE, fHateLasts); /// при неудачной попытке нападает на мага

DetermineCombatRound();



}

}





void main() /// как я понимаю, void main() выполняется раньше всех функций

{

    int nSpell = GetSpellId();

    object oTarget = GetSpellTargetObject();

    effect eDark = EffectVisualEffect(VFX_DUR_BLINDVISION, FALSE);

    int nMetaMagic = GetMetaMagicFeat();

   

    if(nSpell == 5002) /// куда вписывать эти значения? в spells.2da?

   

    {

    SignalEvent(oTarget, EventSpellCastAt(oTarget, SPELL_RAVENS_FEAST, FALSE)); /// а константы?

    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDark, oTarget, 1.0); /// затемнение

    AdjustAlignment(OBJECT_SELF, 5, -5); /// правильно указал сдвиг ко злу?

    SeekHecatombHolocaust();



}

}


Теперь говорите, что не так.
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #133150 · Ответов: 4 · Просмотров: 10,784

Chimeric
Отправлено: Aug 18 2009, 13:12


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Всем привет. Я написал несколько скриптов, связанных с одним и тем же классом - некромантом. Хочется, чтобы мастера скриптового дела поглядели на них. В следующее мое появление здесь я их размещу и буду добавлять мало-помалу. Сам я не специализируюсь на скриптах, к тому же у меня нет возможности их протестировать, да и вообще поиграть в НВН2 - компьютер слишком слаб для него. То, что написано, ориентировано на первую часть НВН и Аврору, поэтому и понадобятся коррективы. Может показаться странным, что я что-то делаю для игры, которую сам не в состоянии запустить, но меня увлекает создание контента. Главное - ставить достижимые цели.

Еще (и здесь уже я полный профан) может понадобиться человек, хорошо знакомый с AI хенчменов. Есть идея сделать для некроманта хенчмена-гуля (я нашел интересное заклинание в Wizard Spell Compendium для AD&D). За мной в этом случае будет диалог или диалоги, но я не берусь перевести в код странные привычки, каких, вы понимаете, от гуля можно ждать. Заинтересовавшихся спецов прошу отметиться здесь.

Айван, Лекс, а не сделать ли это очередным конкурсом? Назовите его "Лучший AI для необычного хенчмена" или как-то так, и в качестве хенчмена, чтобы был фокус, назначить именно спутника-гуля. Тогда мы получили бы несколько работ и взяли бы лучшее из них. Этот замысел с гулем и скриптами для некроманта - не для моего личного пользования. Я не планирую ввести их в какой-нибудь свой модуль. Наоборот, я хочу сделать некий полезный набор, упругий пакет, достаточно соблазнительный и полный, чтобы приманить распорядителей шардов. Пусть они посмотрят на дополненного и исправленного некроманта и скажут себе "Эй, а ведь наш-то некромант - скучнее, просто hack-n-slash... Возьмем этого".
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #133135 · Ответов: 4 · Просмотров: 10,784

Chimeric
Отправлено: Aug 7 2009, 15:04


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Есть ли возможность через скрипты увеличивать количество заклинаний в день (в случае с Ворлоком, количество его фокусов в день)? Не повышая уровень,that is.
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #132567 · Ответов: 829 · Просмотров: 420,610

Chimeric
Отправлено: Aug 6 2009, 16:56


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Спасибо.

Еще вопрос: задавался ли кто-нибудь системой скриптов для изучения заклинаний (spell research)?

  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #132508 · Ответов: 336 · Просмотров: 217,964

Chimeric
Отправлено: Aug 3 2009, 15:46


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Общий вопрос. Известно, что Обсидиан отличается от Авроры интерфейсом и некоторыми функциями - я слышал про cutscenes и ActionSit. Я здесь не говорю про маппинг, который может отличаться сильно. Меня интересуют основные, традиционные функции скриптов Авроры. Годны ли они в целом? Иными словами, если я возьму типичный, средней сложности скрипт для Авроры с проверками пола, времени суток и т.п., или скрипт со spawn и уничтожением объектов, с установкой глобальных переменных, такого рода вещами, сколько из этого придется менять?

  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #132288 · Ответов: 336 · Просмотров: 217,964

Chimeric
Отправлено: Jun 7 2009, 00:00


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Правила надо переименовать в "Принципы хорошего мастера Dungeons&Dragons". ДНД начинала и теперь заканчивает, сделав круг, как тактическая настольная игра без намека на глубину. Цель в ней - всех убить. Из-за этого наследия авторам руководств и ведущим приходится везде искать и предотвращать манчкинизм, споры о числах на кубике, всеобщую озабоченность штучками-дрючками, силами и способностями, предполагают они и ориентацию на вечный бой. Но это здесь. Другие игры - другие принципы. Вот моя концепция:

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

2. Доверие, а не правила. Мастер - это уважаемый товарищ, которому вы доверяете придумывать себе занятие на вечер. Если не доверяете, то и не соглашайтесь на это. Если доверяете, то должны подчиняться охотно.

3. Побоку числа. Пусть игроки имеют общее представление о способностях персонажей - 5-балльной шкалы достаточно - и пусть мастер имеет представление о серьезности препятствия. Исходя из этого он сможет решить, стоит ли вам вообще кидать кости. Чаще всего, как в жизни, большая величина подавляет меньшую, поэтому нет никакого смысла спрашивать, может ли гном с силой 2 все-таки изловчиться и поколотить орка с силой 4. Разумеется, он этого не может - сила 4 > 2 это и означает. Если гном придумал особый ход, скажем, прыгнул на орка из укрытия, то тогда можно дать бросить кубик-шарик. Но в большинстве случаев исход ясен хотя бы мастеру, владеющему всей информацией, и разумному игроку, если сцена описана как следует, тоже. Внимание игроков должно уходить на изобретение более эффективных действий, а не попытки выжать успех из начинаний, явно обреченных на провал.

4. Ролевая игра - это психодрама. Ради любопытства, изучения самих себя, экспериментов с параллельными жизнями, просто ради удовольствия, но - психодрама.

5. Игроки - это актеры. Их роль единственно в том, чтобы изображать персонажей (чего сами игроки предположительно и хотят). Персонажи не являются никакими "альтер эго", они не обязаны нравиться игрокам с моральной точки зрения, позорно, если они воплощают какие-то фантазии, напрасно их жалеть. Игрок не должен колебаться ни секунды, отправляя глупого варвара в пасть к дракону, куда тот норовит броситься. Если игрок не хочет для персонажа быстрого и жалкого конца, то пусть не создает в следующий раз дурака, вот и все, что можно посоветовать.

6. Персонажи отдельны от игроков. Для персонажей нет таких понятий, как игровой мир, стиль, тема, неприкосновенность NPC или прочие соображения. Понятия эти должны более-менее совпадать у игроков, а персонажи всего-навсего проживают свои виртуальные жизни. Так, социопат не должен сомневаться, толкать ли ему ребенка с пирса, чтобы отвлечь преследующих его рыбаков, только потому, что в группе остальные персонажи - Доброго мировоззрения или потому, что мастер мог не предусмотреть такого поворота. Решение должно приниматься автоматически, вернее, с именно той долей колебания, которая подходит персонажу.

7. Впрочем, никаких мировоззрений и тому подобных схем. Можно сформулировать конкретно, что думает о том или об этом персонаж, и достаточно. Конечно, добро и зло могут существовать как действенные фикции в головах персонажей, но это не alignment. Здесь стоит поразмыслить, не был ли alignment с самого начала задуман как объяснение таких-то действий демонов, ангелов, зачарованных мечей и прочего, то есть не был ли он простой и разумной для настольной игры заменой психологическому элементу. Но был или не был, а он не дает игре стать ролевой, так как предписывает роли с мета-уровня.

8. Пример тому - дискуссия в этой теме о том, каким должен быть паладин. Большинство писавших сошлись на мнении, что играть за паладина тяжело, так как обязательно держаться его мировоззрения. Это верно. Но фактические правила поведения далеко не так сложны и, во всяком случае, не навязаны паладину извне. Эти правила для него естественны. Никого не хочу обидеть, но рассуждавшие вполне доказали, жалуясь и стеная по поводу обета бедности, помощи бедным и угнетенным и т.д., что сами они в Дон Кихоты не годятся. Что ж, поэтому-то и говорится, что паладины - редкость, как редки вообще самоотверженные и благородные люди. Но хотя быть паладином оказалось бы нелегко, от игроков этого никто не требует. Все, что им нужно сделать, это создать персонажа, то есть человека, среди качеств которого были бы (помимо множества прочих!) и эти.

9. И сделать это элементарно. Вот паладин, которого я только что придумал. Это простой, не слишком образованный (ученость развращает), но по-своему умный человек, от природы честный, иногда вспыльчивый и скорый на расправу, но отходчивый и щедрый. Ревнив, но знает, что не опустится до убийства неверной, тем более, что сам едва ли не круглосуточно изменяет жене. Это его не слишком мучает, такой уж у него темперамент, но он никого не насилует (как ему кажется). Относительно добра и зла у него четкие идеи, как у большинства людей. В один прекрасный день он проникается учениями такой-то церкви или проповедника, а может быть, ему явлено знамение, и он, вооружившись, отправляется на служение идеалу. Свои привычки он пытается обуздать, но не видит в них большого греха, когда вокруг великаны и турки. Он, во всяком случае, защитит слабого, если слабый того достоин и не один из этих цыган, которые тут понаехали; цыган надо вешать, в этом он уверен, но вообще слабым лучше с ним, чем без него. И он беспощаден к разбойникам, двурушникам и тому подобным мерзавцам, а его кодекс чести запрещает лгать. К счастью, этого он и сам не любит, хотя между правдой и полуправдой бывает иногда полезный зазор. Итак, он верхом на коне, с благословением высшей силы и уверенностью в своей правоте сокрушает зло, иногда, как и все, ошибаясь. Ну? Чем плох паладин?

10. Вернусь к теме действия в образе. Так же, как игрок играет персонажа, ведущий играет Бога. Так же, как игрок не должен волноваться, выживет ли и "выиграет" персонаж (термин, который имеет смысл только для настольных игр), ведущему следует держаться Своего божественного характера. Это может быть Бог-импровизатор, но постоянный поток чудес отвлечет внимание и отчасти обесценит усилия персонажей, то есть игроков. Поэтому я рекомендую деистского Бога-часовщика: он заводит часы, дозволяет им идти и не вмешивается. Иными словами, мастеру следует, заявив мир, только вести тенденции, развивать причины в следствия и подбрасывать новые факты. Мастеру должно быть все равно, нарушают ли действия игроков его планы. У него и не должно быть планов, не считая чисто практической нужды держаться заготовленных приключений. Вообще мир развивается экспромтом именно потому, что в нем действуют персонажи, а не игроки. Игроки могут желать то-то и то-то для вселенной, потому что так лучше "вообще", то есть для них, но персонажам такая олимпийская точка зрения недоступна. У персонажей ноги на земле, у них характер, мнения, желания, а не высшее знание. Предпочтения ведущего и игроков рискуют здесь исказить образ. Если даже персонаж нашел Артефакт Изменения Всего Сеттинга Напрочь, и если ведущий позволил ему артефакт найти, то мастер должен или прекратить игру и, не стесняясь, поменять все своим декретом, потому что мир, в конце концов, ненастоящий. Или разрешить артефакт со всеми последствиями. Но не плутовать со штучками Ex machina.

11. С другой стороны, правильно вплетенные с самого начала в канву вселенной персонажи и не могут пожелать ничего настолько радикального (вернее, это маловероятно - случай безумия). Если цель - актерская игра, взаимодействие образов на сцене, то персонажи и будут придерживаться естественных желаний, возможно, иных, но таких же ограниченных в игровом мире, как наши желания - в нашем. Мы не можем измыслить никакого радикального передела вселенной, как не можем измыслить и тех, кто был бы способен это вообразить. Значит, и игровой мир в относительной безопасности.

12. Мета-деление на сцены, а не на ходы и т.п.

13. Поощрять опытом следует игроков, а не персонажей. Я взял это "правило" из Dying Earth RPG. Оно означает там, что игрок, превосходно игравший весь вечер, то есть развлекавший остальных и доставивший им массу удовольствия, награждается очками опыта. Скучный игрок не получает ничего. Для психодрамы поправка будет: игрок, державшийся в образе, получает очки.

14. Безусловно, персонажи не получают ничего ни за выполнение заданий, ни за битвы, так как способность человека к обучению весьма отдаленно связана с количеством событий в его жизни. Один может в книгах найти то, чего другой не поймет, объехав земной шар, и наоборот. Количественно это не выразить в любом случае, поэтому очки опыта служат наградой игроку, да и то сомнительной. Если его интерес - вести персонажа по жизни, то не так уж важно, будет ли персонаж в состоянии швыряться молниями или нет. То же касается денег и прочего. Вообще не нужна награда, кроме самой игры. Ведь если приходится платить за участие, что это за игра?

Можно было бы написать еще, но этого уже достаточно. Я привел здесь один из бесконечного множества подходов к ролевым играм. Над жанром в 99% случаев заслуженно потешаются, как над жалким эскейпизмом с пивом, кубиками и девками в кольчужных юбках. Но игра может быть гораздо большим, даже оставаясь развлечением. Этот мой подход можно вкратце сформулировать так: если зашел спор про кубики, кто-то уже забыл об общей цели. You are either on the bus, or off the bus.
  Форум: Ролеплей · Просмотр сообщения: #128859 · Ответов: 145 · Просмотров: 141,137

Chimeric
Отправлено: Apr 13 2009, 17:19


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Цитата(Aiwan @ Mar 27 2009, 13:25) *
Официально завляю. Что заработал ПЛ мы потратили чисто на хост за полтора года. Все остальное время я лично платил из кармана вместе с Дбом, Нео и Лексом. Сейчас все что тут работает и на WRG тоже платится из моих доходов с Колобков. Так что тему эту больше не поднимать. Никто с гонорара себе даже шарики на 1 мая не купил. Все ушло сюда.


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

Обольстите меня, черт возьми.

Всего этого не могло быть по причинам, которые я по второму разу перечислять не стану. Естественно, я бросил, зачем мне толкать в гору этот камень? Что касается "коммунити" НВН, которая якобы живет и чуть ли не процветает где-то там, где не все - ленивые бездари, то я три года назад, во время бума-не бума, но еще какой-то памяти о НВН1, жил в Штатах. И я заявляю: НВН никаких народных масс с самого начала не увлекала. Может, в первые год-два был энтузиазм по поводу модов, и только, но коробок из рук не хватали.

Да, в несколько более благоприятном климате отдельные команды фанатов могут сделать хороший модуль. И что? Я спрашивал: есть ли смысл, имея в виду состояние рынка и прочее, так стараться? Мы не говорим здесь о внутреннем смысле, внутренней необходимости. Мы тут не иконы пишем. Когда я вижу (теперь), какие старания я затрачивал (тогда) на модуль, я хватаюсь за голову. Мне стыдно, что я убил на это столько времени. Если бы модуль вышел, то к стыду прибавилось бы чувство сделанного дела, но стыд от этого меньше не стал бы. Кстати, примерно та же ситуация, с падением интереса, обусловленным объективными причинами, возникала во всех известных мне онлайн-кампаниях по переписке, моих, чужих, неважно. Кто-то начинает сюжет, кто-то продолжает, даются "квенты", но рано или поздно без живого взаимодействия, без поощрения, короче, без смысла всего этого, сюжет вянет. Люди исчезают.

Мы уже не верим в то, что выдумываем, нам уже мало этого.

Другой похожий жанр с похожими проблемами: настольные фэнтезийные кампании. На них уходит масса сил, особенно если подходить к ним творчески, а не считывать с мануалов, но где аудитория? Где игроки, которые не были бы идиотами, манчкинами? Где аплодисменты и, что важнее, сотрудничество? Все это есть, бывает, но всего этого крайне мало. Нужно перебрать массу бисера, чтобы потом швырнуть свиньям. Кому-то, может быть, покажется, что я рассуждаю вообще, ну и пусть: вот вам еще сравнение, с современным искусством - абсолютно нишевой вещью. Пиши картины, снимай кино, замечательное, может быть, но увидят его твои друзья да случайные люди на youTube. Ситуация глобальная, и лень, Валеско, это обидное, не то чтобы неверное, но очень мелкое объяснение.

Но - стоп. Я говорю, что нет поощрения. Так что же, это причина не делать? Не будем ничего делать, выходит? Отвечаю: а может, и так. Делай, если ты чувствуешь, что должен. А мы здесь - чувствовали, что должны? Когда-нибудь? Или мы подумали "а вот хорошо бы..." и потом одни додавили дело железной волей, извращенной волей, честно говоря, а другие не додавили. Пирамиды, люди, пирамиды! Ты хочешь лечь под это костьми? Ты хочешь потратить на некрасивый ДнД два года жизни?

Конечно, я говорю в конце концов за себя, я оправдываюсь перед Валом и Азатотом. Но я не лгу. Мне только жаль времени, ушедшего в какую-то прорубь... И что же я говорю? Что я доказываю? Что существуют некоторые обстоятельства. Что я не ленивый бездарь. Определенно не бездарь; ленивый - это ближе к истине, но я горю, пока меня воспламеняют. Валеско подменяет цинизмом правду, которая бывает, конечно, неприятной, но все-таки не то же самое. Правда же в том, что есть причины, по которым виртуальные развлечения, пока они остаются развлечениями, рано или поздно перестают интересовать, начинают утомлять, тяготить. Из них вырастают. Моды умирают не просто так. Да, есть программисты-художники, "авторы" во французском смысле, мы все знаем несколько фамилий. Но у них - другое, они сумели превратить создание игр в самовыражение, в необходимость, когда уже не так важно внешнее поощрение, и даже на них давят законы рынка.

Словом... годам к тридцати чешуя спадает с глаз во многих вопросах. И становится беспокойно.
  Форум: Главный Зал · Просмотр сообщения: #125779 · Ответов: 79 · Просмотров: 87,462

Chimeric
Отправлено: Mar 26 2009, 15:09


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


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

Инструменты были с самого начала малопригодны. Система D&D не всех устраивала как база для модуля, отсюда попытки изменения правил, ввода новых "китов" в Аврору и т.п., более же свободной альтернативы, на основе GURPS, например, не существовало. Даже фанаты "подземелий" столкнулись с необходимостью расширения возможностей Авроры, но не было и нет простого, доступного для скромной команды любителей способа произвести столько моделей и текстур, сколько требуется для оригинального look'а. Нельзя обойтись одними диалогами: представьте себе "Тормент" без своей музыки, без сумрачной графики, а на плоском движке НВН1. Реклама же НВН намекала на возможность создавать свои игры, а не мелкие переделки официальных "подземелий" и тем самым ввела покупателей в заблуждение.

Это приводит нас ко второму фактору, рыночному. Затраты (сил и энтузиазма) на производство модуля настолько велики, что требуют отдачи или денежной, как в случае с "Проклятием Левора", или широкого признания, популярности, отзывов в игровой прессе. Но не существует никакой игровой или фэнтезийной community, а только россыпь сайтов, проектов по Интернету, как будто объединяющему. На деле он позволяет только сменить клику. Денис правильно пишет, что для 10 человек делать модуль смысла нет, а что остальные? Заняты другим. Если смотреть на Интернет как на рынок в плане многообразия возможностей и конкуренции за время игрока с коммерческими релизами, то приходится признать, что рынок давно перенасыщен. Даже игровые журналы редко теперь уделяют много внимания каждой отдельной игре, у них нет такой возможности, если речь не идет о гарантированных хитах Blizzard и т.п. 10 лет назад УЧУ и "Навигатор" могли вольготно озирать фэновские проекты, могли выдавать статьи по две-три страницы. Больше нет.

Психологический фактор слишком понятен. Мне ли не знать... Жаль только, что редко кто учитывает его наперед. Что такое официальные, дорогие, коммерческие проекты? Строительство пирамид. Когда-то, во времена наивного марксизм-ленинизма, в учебниках истории писали, что пирамиды Египта строили насильно, палками и кнутами, согнанные рабы. Теперь известно, что рабочие, хоть корень слова и тот же, были вольными крестьянами в том смысле, что могли в зимние месяцы, когда разливался и затоплял наделы Нил, и не являться на стройки фараонов. В этом случае им ничего не оставалось, как умереть с голоду, но теоретически они могли. Не воспользовавшись этим правом, они построили великие пирамиды в обмен на хлеб, чеснок и пиво. Считалось почетным участвовать в строительстве, это так, но без угрозы голода мы бы не ужасались сейчас перед Сфинксом.

Компании-производители софта существуют на таких же началах. Они пользуются услугами людей, которым ничего не остается, как только стать профессионалами, и, спасая их от безработицы, по сути, держат в заложниках, маня деньгами, кое-какой славой, заставляют работать на износ. Софтверные гиганты, а в каком-то смысле и все небольшие фирмы - это "шарашки", как назвали бы их у нас. Энтузиазм не нужен, ненадежен, есть более эффективные рычаги. Так растут пирамиды, так выпускаются игры с миллионными бюджетами.

Что могут против этого частники? Анархисты? Ничего, потому что будь им даны все инструменты на свете, будь рынок открыт, они не хотят приносить себя в жертву. Когда проект становится неподъемен, то он превращается в Молоха, но он всегда неподъемен с самого начала. Служащие, однако, служат, а свободный человек по определению ленив. Это не значит, что он не готов бросать себя на амбразуры и работать как проклятый тогда, когда увлечен делом, когда вдохновлен, но речь-то идет как раз о тягомотине, о рытье ям под обелиски. Да, обелиски будут хороши, когда встанут, наконец, только до этого под них ляжет невесть сколько бедолаг. Говоря вообще, цивилизация предполагает жертвы, на которые свобода просто не хочет идти. Жизнь коротка, man, и она - моя. Я лучше покурю травки из моего садика, чем стану у*бываться в каком-нибудь Котловане, и примерно так рассуждают все или почти все в обезбоженном пространстве. Ведь мы давно расколотили все идолы, в том числе и каторжного, но благородного труда во имя.

Непонимание всех этих факторов, больших и малых, и подкосило НВН1, а продолжение было просто странной и очевидной ошибкой.
  Форум: Главный Зал · Просмотр сообщения: #125138 · Ответов: 79 · Просмотров: 87,462

Chimeric
Отправлено: Mar 8 2009, 10:43


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Для тех, кто заходит на этот форум и не заходит на форум Авроры, повторяю свой вопрос относительно диалога в BG 1. Вот ссылка.
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #124535 · Ответов: 829 · Просмотров: 420,610

Chimeric
Отправлено: Mar 6 2009, 07:48


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Вопрос: есть ли возможность через скрипты Obsidian делать проверку стоимости того или иного предмета экипировки в магазине? Или считывать данные из списка, условно представляющего магазинные цены? Примерно так:

Создается прайс-лист с условной оценкой предметов экипировки в пунктах:

Chainmail 3
Plate mail 6
Plate mail + 1 8

ПРОВЕРКА 1: что носит персонаж в качестве доспехов? Записывается в Х.

ПРОВЕРКА 2: сколько пунктов стоит то, что записано в Х, в прайс-листе? Записывается в Y.

ПРОВЕРКА 3 (в диалоге): Если Y > 10, то персонаж разодет и получает соответствующую реакцию NPC. Если Y < 3, то персонаж по виду - бродяга и получает опять же достойный ответ. Все это - добавка к проверкам репутации и Обаяния, реалистичный способ "встречи по одежке".

Возможно ли такое и кто возьмется написать скрипты?
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #124488 · Ответов: 829 · Просмотров: 420,610

Chimeric
Отправлено: Mar 4 2009, 20:13


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Матерые скриптеры, шаг вперед! Вот диалог для первого БГ. Реплики отсылают к строчкам dialog.tlk, так что вы, вероятно, ничего там не увидите. Но это неважно - проверки Infinity Engine на месте. Проблема? Диалог не запускается, только и всего. Я не учел чего-то в Conditions реплик верхнего уровня. Несколько там ищут Global, но первоначальная - нет, и все равно дело швах. С того, кто мне поможет, сниму венец безбрачия, исправлю судьбу, уничтожу врагов.
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #124477 · Ответов: 0 · Просмотров: 6,850

Chimeric
Отправлено: Mar 3 2009, 20:43


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Не изменить ли название? Ловкач, боже мой. Лучше уж Бретёр, Трюкач, Смельчак или Сорвиголова. Вот синонимы "swashbuckler" из словаря:

Код
charlatan, daredevil, entrepreneur, explorer, fortune-hunter, gambler, globetrotter, hero, heroine, madcap, mercenary, opportunist, pioneer, pirate, romantic, speculator, stunt person, swashbuckler, traveler, venturer, voyager, wanderer


А священника лучше все-таки назвать жрецом, рейнджера, конечно, следопытом. Заодно и дварфов сделать, наконец, карликами, а гномов - гномами, установить стандарт и врыться копытами на нем. Может быть, перевод не совсем привычный, но если люди привыкли к корявой кальке, надо отучать.
  Форум: Билды · Просмотр сообщения: #124462 · Ответов: 14 · Просмотров: 24,583

Важно! Форум
Chimeric
Отправлено: Jun 5 2007, 16:06


Пушкин
Иконки Групп

Группа: Master
Сообщений: 1,252
Регистрация: 23.11.2004
Из: Между любовью и честью
Пользователь №: 408


Ну так что, форум этот будет отлажен или как? Так и дальше будем терпеть все эти выбросы из авторизации и бог весть что еще?
  Форум: Техническая поддержка · Просмотр сообщения: #108908 · Ответов: 1806 · Просмотров: 382,778

7 страниц V   1 2 3 > » 

Есть новые сообщения  Открытая тема (есть новые ответы)
Нет новых сообщений  Открытая тема (нет новых ответов)
Горячая тема (есть новые сообщения)  Горячая тема (есть новые ответы)
Горячая тема (нет новых сообщений)  Горячая тема (нет новых ответов)
Опрос (есть новые голоса)  Опрос (есть новые голоса)
Опрос (нет новых голосов)  Опрос (нет новых голосов)
Тема закрыта  Закрытая тема
Тема перемещена  Тема перемещена
 

Текстовая версия Сейчас: 28th March 2024 - 18:37