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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
135 страниц V  « < 132 133 134 135 >  
Ответить в эту темуОткрыть новую тему
> ОДИНОЧНЫЙ ВОПРОС, на любую тулсетовскую тему
denis0k
сообщение Oct 27 2017, 20:23
Сообщение #3311


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Цитата
Хочется ругаться трехъетажным (на биотварей)
Обещаю, это только начало (IMG:style_emoticons/kolobok_light/biggrin.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chiffa
сообщение Oct 27 2017, 21:44
Сообщение #3312


Level 6
**

Класс: Волшебник
Характер: Chaotic Good
Раса: Человек



Цитата(denis0k @ Oct 27 2017, 20:23) *
Обещаю, это только начало (IMG:style_emoticons/kolobok_light/biggrin.gif)


Спасибо, обнадежил. (IMG:style_emoticons/kolobok_light/biggrin.gif)
А главное, опять прав! Нарисовал тригеры зоны отдыха и все снова пошло наперекосяк. Но это ерунда, надеюсь, благодаря вашим с Мелиссой подсказкам все налажу. По крайней мере, когда хоть примерно видишь, куда двигаться, это гораздо более иначе, чем смотреть на глюки и хлопать глазами ничего не понимая.
Спасибо!


Дико извиняюсь, что напрочь зафлудил тему, но необходимо сказать: denis0k, отдельное спасибо за последнюю подсказку. Все оказалось даже еще проще. Не требуется нигде писать "if (!GetIsAreaNatural(GetArea(oPC)))", достаточно пометить любую локацию как "тип земли - искусственный". Ерунда получалась в основном из-за того, что я пытаюсь сочинить робинзонаду, скачав с WRG замечательную систему крафта PaiNt_craft. Ну и, понятно, у меня локи все поля-леса и прочие тропики. Помечать их как искусственные не сразу придет в голову. (IMG:style_emoticons/kolobok_light/unsure.gif)
Так что зря я гнал на биоварей... хотя нет, они не этим, так многим другим заслужили!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 29 2017, 22:00
Сообщение #3313


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Да у Биоварей полно пасхалок. Однажды я неделю бился над проблемой, в маленьких локациях спавнились одни и те же монстры в случайных генерациях. После недельного выноса мозга, оказалось, движок генерит случайные числа исходя из данных тайлов в локации. Это значит, если я тупо скопировал пять локаций 4х4 тайла, то в них будут тупо выпадать одинаковые "случайные" числа а это значит одинаковые монстры. Вот такие пироги.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Oct 30 2017, 07:50
Сообщение #3314


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Удивительный факт в том, что сделать нормальный рандом вообще проще, чем городить свой. Там в параметре просто время указывается, оно каждую секунду уникально, но биовари замутили туда данные локации. Это телодвижение должно иметь какой-то смысл (IMG:style_emoticons/kolobok_light/smile.gif) Ну либо я ищу чёрную кошку в тёмной комнате, которой там нет, и они просто рукожопые индусы, во что тоже можно поверить, т.к. их SWTOR не имеет юникода в чатике, да и вообще глючит, если ставить в папку с русскими символами в пути (IMG:style_emoticons/kolobok_light/biggrin.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chiffa
сообщение Oct 30 2017, 22:54
Сообщение #3315


Level 6
**

Класс: Волшебник
Характер: Chaotic Good
Раса: Человек



С позволения мастеров продолжу веселить их дурацкими вопросами. Но что делать, если поиск и в темах, и расширенный по всему форуму ответа не дал...
Можно ли скриптом заставить героя вытаскивать из инвентаря определенный (по тегу, рефу, богу, черту ets) вид оружия и имитировать атаку на плейс? Именно имитировать, а не атаковать всерьез. У меня по команде
Neverwinter Script
AssignCommand(oPC, DelayCommand(0.5, ActionEquipMostDamagingMelee()));
// Далее - атака.

понятно, что произошло. Герой-тестер выхватил из инвентаря самое крутое оружие, которое имел и разнес горемычный булыжник с воплем "Я раздавлю тебя!". А это был не просто булыжник, а целый "выход горной породы", из него каменной киркой кремень для робинзонады добывать, а герой с ним так непочтительно. (Что любопытно, орал, негодяй, по-русски (IMG:style_emoticons/kolobok_light/biggrin.gif) ).
Нет, можно было защитить булыгу галкой "сюжет", но тогда жалобный дефолтный скулеж героя и постоянно всплывающее "оружие неэффективно" бесит и портить всю атмосферу.
В константах такого понятия как "анимация атаки", ПМСМ, вообще не существует. Что применить наиболее похожее? Я нашел только "ANIMATION_LOOPING_TALK_FORCEFUL", но это вроде то же самое, что галка на "говорить убедительно" в графе "другие действия" диалога? Попробовал применить. Получилось, сорри за каламбур, неубедительно...
Заранее благодарен.
З.Ы. Понимаю, что пост скорее для темы "вопросы новичков", но я вроде как 9 лет на форуме, хотя бы и с перерывом... Впрочем если уважаемый модератор перенесет пост туда - никаких вопросов.

Пока писал, подумал... такое случается...
Не обязательно имитировать, можно и натурально атаковать. Поставлю этой булыге максимум ХП, нарисую рядом пару-тройку таких-же. Атаковать будет с перекурами, присаживаясь и жалуясь на тяжелую жизнь шахтера, это я умею (и написать, и пожаловаться (IMG:style_emoticons/kolobok_light/biggrin.gif) ). Главное, чтобы выхватывал из инвентаря именно каменную кирку (простой молот без бонусов), а не "каменный нож +1". Вот как это сделать - без понятия...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 31 2017, 07:33
Сообщение #3316


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Атаковать можно невидимого монстра или невидимый плейс, естесвенно с плотовым флажком.
Насчет того, что бы одеть нужный меч в нужный слот. В модуле Монета Судьбы, посмотри скрипты проклятых и сюжетных комплектов броней. Именно в них прописано, в какой слот РС одевает предмет с нужным тегом. НВН нет и я по памяти это не напишу. Там все сделано, как тебе нужно. Идет проверка инвентаря, потом снимается с игрока все в боевых слотах, и одевается комплект уникальных. А если комплект проклят, то снять предмет нельзя. Ради интереса кинь в обычную локу кучу уникального оружия и по надевай его увидишь эффект поймешь как работает.


п.с. Вспомнил, это касается в основном проклятых вещей. Комплект ты сам одеваешь.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chiffa
сообщение Oct 31 2017, 20:04
Сообщение #3317


Level 6
**

Класс: Волшебник
Характер: Chaotic Good
Раса: Человек



Спасибо, уважаемый Мастер! Уже копаюсь в хаках "am_x2_main.hak" и "am_x2_weapon.hak" (модельки тоже интересны) и сокрушаюсь, почему сам до этого не додумался. Основную проблему вряд ли этим решу. Не припоминаю, чтобы проклятое оружие само (то есть по приказу скрипта, ясен пень) прыгало в руку. Вроде бы это один раз делает Эсмерик-меч. Но, во-первых не факт, что я помню правильно (в Хорды, в отличие от "Монетки", которую юзаю довольно часто, играл лет десять тому). Во-вторых, рыться в дефолтных скриптах биотварей?! Может, я лучше пойду вагон уголечка разгрузить, нервных затрат на порядки меньше и точно знаешь, что рано или поздно результат будет. (IMG:style_emoticons/kolobok_light/swoon.gif)
Тем не менее уверен, что накопаю много полезного (в хаках "Монетки", не подумайте, что в "Хордах" (IMG:style_emoticons/kolobok_light/biggrin.gif) ). Отдельное спасибо за привычку коротко комментировать практически каждый скрипт.
Да, "кровавый меч Lexа" тоже, пожалуй, стоит глянуть?
И можно попросить еще одну подсказку, уважаемые мастера? Где поискать что-то похожее на скрипт выдачи вещей с палитры, но с процентным шансом? То есть мой робинзон долбит эту булыгу (монстра, плейс - не суть) и у него 90% шанса добыть кремень, 9% на то, что выпадет к примеру, малахит, и 1% - изумруд или алмаз, тоже не суть.
И последний (на сегодня) вопрос. Наверное, конкретно к Вам, уважаемый Aiwan. Систему PaiNt_craft я, похоже, ниасилил (или она меня, подробности в соответствующей теме на WGR). Скрипты крафта придется занимать у доброй тети Опары и дяди Железнорукого. А вопрос насчет таблички "craftingrecipes.2da". Когда не надо брать за крафт деньги и не требуется нескольких дней (робинзон же, сам же все крафтит и сам себе, ясен пень не платит) что надо писать в соответствующих графах таблички: нули, пять звездочек, "NONE" или еще что? Потому что замена в Великом Плейсе Крафта CRAFT_HEALPER "WP" на "INSTANT", которую обещал так рано покинувший нас DBColl, не работает. По крайней мере, в моем модуле не работатет.
Ответьте, если припомните, конечно. Если нет, сам проверю, муторно, но понятно что делать.
Спасибо.

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 31 2017, 20:41
Сообщение #3318


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(Chiffa @ Oct 31 2017, 23:04) *
Не припоминаю, чтобы проклятое оружие само (то есть по приказу скрипта, ясен пень) прыгало в руку. Вроде бы это один раз делает Эсмерик-меч.

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

Цитата(Chiffa @ Oct 31 2017, 23:04) *
И можно попросить еще одну подсказку, уважаемые мастера? Где поискать что-то похожее на скрипт выдачи вещей с палитры, но с процентным шансом? То есть мой робинзон долбит эту булыгу (монстра, плейс - не суть) и у него 90% шанса добыть кремень, 9% на то, что выпадет к примеру, малахит, и 1% - изумруд или алмаз, тоже не суть.

В ПЛ посмотри на ящиках и сундуках, выпадают плотовые вещи с рандомом. Например, в пещере Рэджика, там в зависимости от евила и класса дается уникальная шмотка.


Цитата(Chiffa @ Oct 31 2017, 23:04) *
Отдельное спасибо за привычку коротко комментировать практически каждый скрипт.

Это сделано по двум причинам, для себя и для таких случаев как сейчас. (IMG:style_emoticons/kolobok_light/snoozer_17.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chiffa
сообщение Oct 31 2017, 23:14
Сообщение #3319


Level 6
**

Класс: Волшебник
Характер: Chaotic Good
Раса: Человек



Ай да Aiwan! Ай да ... почти Пушкин, скажем так...
Спасибо огромное. Вот он, скрипт:
Neverwinter Script
object oPC = GetFirstPC();
object oItem=GetItemPossessedBy(oPC, "ITM_MOLOT");
object oBul = GetObjectByTag("BULYGA");
void main()
{
AssignCommand(oPC, ActionEquipItem(oItem, INVENTORY_SLOT_RIGHTHAND));
DelayCommand(0.0,ActionPauseConversation());
DelayCommand(1.0,AssignCommand (oPC,ActionAttack(oBul)));
DelayCommand(2.0,AssignCommand (oPC,ActionAttack(oBul)));;
DelayCommand(4.0,ActionResumeConversation());
}

И правда простой, как мычание. Пять минут писанины и еще пять на проверку в модуле "Полигон". Ясен пень, тут еще много чего до ума доводить, эффект замедления вешать, давать в инвентарь вещички с палитры, "перекуривать" и т.п., но уж с этим я худо-бедно справлюсь. Главное, что удалось впихнуть эту злополучную "кирку" в этот неладный SLOT_RIGHTHAND. Остальное преодолимо.
Спасибо насчет подсказки про пещеру Реджика. Пойду гляну...
З.Ы. Сорри за офтоп. Aiwan, у тебя что вообще никакого невера? Даже ПЛ и родной "Монетки"? То есть никакой ностальжи, никаких сантиментов? Не-нет, подпись твою я вижу, вопрос риторический...

Понимаю, достал, но исключительно чтобы закрыть вопрос и по нему больше никого не дергать. Нашел подходящий скрипт. Здесь, в старой базе. Переделать под свои нужды отказалось нетрудно. Автор, кстати, некий Aiwan, возможно, слышали? (IMG:style_emoticons/kolobok_light/biggrin.gif)

З.Ы.Ы. Последняя реплика "приклеилась" к общему посту, потому поясняю: речь о скрипте рандома с шансом.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Nov 1 2017, 07:18
Сообщение #3320


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(Chiffa @ Nov 1 2017, 02:14) *
З.Ы. Сорри за офтоп. Aiwan, у тебя что вообще никакого невера? Даже ПЛ и родной "Монетки"? То есть никакой ностальжи, никаких сантиментов? Не-нет, подпись твою я вижу, вопрос риторический...

Я полностью ушел в реал, игр нет совсем. Точнее по инерции еще качаю иногда, но дальше установки не идет (IMG:style_emoticons/kolobok_light/smile.gif) Из игр остался только симулятор радиоуправляемых моделей ну и с сыном в НХЛ играю на PS4. (IMG:style_emoticons/kolobok_light/wink3.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chiffa
сообщение Nov 11 2017, 03:53
Сообщение #3321


Level 6
**

Класс: Волшебник
Характер: Chaotic Good
Раса: Человек



Aiwan, вопрос лично к тебе. Он может казаться странным, а в свете того, что на дворе 2017 год, так и вовсе нелепым, но тем не менее...
Решал дать денек отдыха своему робинзону и сел поиграть. Представь себе, в ПЛ. Такое иногда случается. Во всяком случае, со мной.
Так вот, минут за 10 игры мне пришлось трижды вызывать диспетчер задач, чтобы он прихлопнул НВН. Как только на Прокампур опускалась ночь, я нервно нажимал кнопку быстрого сохранения чуть ли не каждую минуту...
А все из-за печально-знаменитого непися-бандита. Он спавмится, подвешивает игру и идет по своим делам. Вместо того, чтобы нападать на героя, как это и задумано, изображает бродячего непися-обывателя.

Вот скрипт на последнем слоте бандита:
Neverwinter Script
#include "nw_i0_generic"
#include "mm_common"

void main()
{
    int nEvent = GetUserDefinedEventNumber();
    if (nEvent == 1002)
    {
        object oPC = GetLastPerceived();
        if (GetIsPC(oPC) && GetLastPerceptionSeen() && GetTag(OBJECT_SELF) == "SEWER1_BANDIT1")
        {
            SpeakString(ya("Это же то животное, что на менйа плюнуло!.. Убью!!!"));
            AssignCommand(oPC, PlaySound("vs_nhalorm1_bat2"));
            object oNPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC, OBJECT_SELF);
//            AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_LAUGHIN
G, 1.0f, 6.0f));

            DelayCommand(1.0f, AssignCommand(oNPC, SpeakString("Хе-хе-хе...")));

            AssignCommand(oNPC, AssignCommand(oPC, PlaySound("vs_fvengaum_haha")));
            return;
        }
        else if (GetIsPC(oPC) && GetLastPerceptionSeen() && GetTag(OBJECT_SELF) != "SEWER1_BANDIT1")
        {
            if (!GetIsInCombat() && !IsInConversation(OBJECT_SELF))
            {
                SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, FALSE);
                SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMA
TIONS, FALSE);
                if (Random(4) == 0)
                    SpeakString("Эй ты, стой!..");
                SetCutsceneMode(oPC);

                vector vD = GetPosition(OBJECT_SELF) - GetPosition(oPC);
                float fDir = VectorToAngle(vD);
                AssignCommand(oPC, ClearAllActions());
                AssignCommand(oPC, SetCameraFacing(fDir, 8.0, 50.0, CAMERA_TRANSITION_TYPE_MEDIUM));
                AssignCommand(oPC, SetFacing(fDir));

                ClearAllActions();
                ActionForceMoveToObject(oPC, TRUE);
                ActionDoCommand(SetCommandable(TRUE));
                ActionDoCommand(SetCutsceneMode(oPC, FALSE));
                ActionStartConversation(oPC, "bandit", TRUE, FALSE);
                DelayCommand(0.1, SetCommandable(FALSE));
         
            }
        }
    }
//Дальше реплики драки, которые тут не играют значения и не имеют роли


Так вот, вопрс: что именно и куда вписать, чтобы эта чертова "ClearAllActions();" соскочила с героя, если:
- бандит отошел далеко и уж точно не нападет.
или
- просто не нападает, допустим, 10-15 секунд реального времени.
К примеру, достаточно будет написать в конце перед тремя галками: "DelayCommand(22.0,ActionResumeConversation())
;" или надо как-то более иначе?
Разумеется, я и сам могу покопаться, (исправил же в свое время "легендарный" квест с доилкой!). Но:

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

З.Ы. Ради прикола: самая дисциплинированная непись в ПЛ - бандит. Он накогда не лезет в триггер на сточной канаве. То есть если он отспавмился, а между ним и героем эта канава - все! Считай, висяк гарантирован. А простые быватели шастают по этим канавам как придется, и плевать им на триггеры...

З.Ы.Ы. Так что лучше второй вариант, тупо на время. А то ПС и бандит могут часами стоять рядышком и любоваться друг на друга через канаву...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Nov 11 2017, 09:43
Сообщение #3322


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Во первых, к этому скрипту подрублены две инклюды, а это тоже скрипты. Причем вторая инклюда кастомная от ДБа наверное. ДБ автор скрипта и я никогда не лазил в нем и не проверял его (IMG:style_emoticons/kolobok_light/smile.gif) Так как я и ДБ это как юный падаван и джедай (IMG:style_emoticons/kolobok_light/smile.gif) Если хочется узнать что и как работает, разбирайся сам. Для этого, после каждого действа поставь в скрипт событие, типа в командную строку сообщение или текст над НПС. Тогда ты будешь видеть, что происходит и где затык случается. Найди в монетке мой скрипт am_inc_debug, там простые условия для отладки скриптов. Добавляй из него функции в скрипты и проверяй отлаживай работу.
Прописывается она так
Neverwinter Script
#include "am_inc_debug"

Вот такой скрипт надо создать в палитре скриптов, он будет браться автоматически.
Neverwinter Script
//::///////////////////////////////////////////////
//:: Name: am_inc_common
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
          БИБЛИОТЕКА ДЛЯ ОТЛАДКИ СКРИПТОВ
*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan      Aiwan@e-mail.ru
//:: Created On: 30.05.2005
//:://////////////////////////////////////////////

// СООБЩЕНИЯ ДЛЯ ПРОВЕРКИ (ИСПОЛЬЗУЮТСЯ В СЛУЖЕБНЫХ ЦЕЛЯХ ДЛЯ ОТЛАДКИ КОДА СКРИПТОВ)
// А ТАК ЖЕ ДЛЯ ДМ-ов
// LocalInt - "DEBAG_PC" на модуле, отключит дебаг игрокам
// LocalInt - "DEBAG_DM" на модуле, отключит дебаг DM-ам
void Debug(string message);
// Выводит в Debug: TAG, ResRef и Name объекта.
void DebugObject(object oObject);

//------------------------------------------------------------------------------
void Debug(string message)
{
    object oPC = GetFirstPC();
    if (!GetLocalInt(GetModule(), "DEBAG_PC"))
    {
      SendMessageToPC(oPC, "Debag message: "+message);
    }
    if (!GetLocalInt(GetModule(), "DEBAG_DM"))
          {
            SendMessageToAllDMs("Debag message to DMs: "+message);
          }
}
void DebugObject(object oObject)
{
    string sTag = GetTag(oObject);
    string sResRef = GetResRef(oObject);
    string sName = GetName(oObject);
    Debug ("TAG = "+sTag+", ResRef = "+sResRef+",  Name = "+sName+".");
}
/*
void main(){}


Что такое инклюда есть в моем мануале, почитай, если забыл.

Пример использования:
Neverwinter Script
//:://////////////////////////////////////////////////
//:: X0_CH_HEN_DEATH
//:: Copyright © 2002 Floodgate Entertainment
//:://////////////////////////////////////////////////
/*
  OnDeath handler for henchmen ONLY. Causes them to respawn at
  (in order of preference) the respawn point of their master
  or their own starting location.
*/

//:://////////////////////////////////////////////////
//:: Created By: Naomi Novik
//:: Created On: 10/09/2002
//:://////////////////////////////////////////////////
#include "x0_i0_henchman"
#include "am_inc_debug"
#include "am_inc_cutscene"

void main()
{
    // Handle a bunch of stuff to keep us from running around,
    // dying again, etc.
    PreRespawnSetup();

    // Call for healing
    DelayCommand(0.5, VoiceHealMe(TRUE));

    // Get our last master
    object oPC = GetLastMaster();
    object oSelf = OBJECT_SELF;


    // Clear dialogue events
    ClearAllDialogue(oPC, OBJECT_SELF);
    ClearAllActions();

    SetLocalLocation(oSelf, "POINT_DEATH", GetLocation(oSelf));
    //--------------------------------------------------------------------------
    //  Если РС умер или у нас отключен дебаг, то помощник умрет. В противном
    //  случае воскреснет рядом.
    //--------------------------------------------------------------------------
    if(!GetIsObjectValid(oPC) || GetIsDead(oPC) == TRUE)
    {
    if(GetTag(GetItemInSlot(INVENTORY_SLOT_NECK,oSelf))=
="AM_MNECK_AZUTH")
    {
        effect eEffect1 = EffectVisualEffect(VFX_FNF_SOUND_BURST_SILENT);
        AssignCommand(oSelf, ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect1, oSelf));
        DelayCommand(0.7, RespawnHenchman());
        DelayCommand(0.9, PostRespawnCleanup());
        DelayCommand(1.5, AddCutEffects(oSelf));
        DelayCommand(3.0, AssignCommand(oSelf, JumpToObject(GetWaypointByTag("AM_WP_AZUTH_RESPAWN"))));
        DelayCommand(6.0, RemoveCutEffects(oSelf));
        Debug("Алишан в храме Азута. Забирайте ее там.");
        return;
      }
      if(!GetLocalInt(GetModule(), "DEBAG_PC"))
      {
          DelayCommand(1.0, RespawnHenchman());
          DelayCommand(1.5, PostRespawnCleanup());
          DelayCommand(1.9, AssignCommand(oSelf, JumpToLocation(GetLocalLocation(oSelf, "POINT_DEATH"))));
          DelayCommand(2.1, AddHenchman(GetFirstPC(), oSelf));
          Debug("ВЫ В РЕЖИМЕ ТЕСТА. ВАШ ПОМОЩНИК НЕУБИВАЕМ.");
          return;
      }
    else
    //--------------------------------------------------------------------------
    //  Умерла, так умерла... =)
    //--------------------------------------------------------------------------
          {
            SetPlotFlag(OBJECT_SELF,FALSE);
            SetImmortal(OBJECT_SELF, FALSE);
            SetIsDestroyable(TRUE, FALSE, FALSE);
            DestroyObject(OBJECT_SELF, 0.2);
          }
    }
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chiffa
сообщение Nov 11 2017, 12:16
Сообщение #3323


Level 6
**

Класс: Волшебник
Характер: Chaotic Good
Раса: Человек



Мдя... как сложно то все. Я ведь всерьез думал, что две строчки кода приписать - и все океюшки будет. (IMG:style_emoticons/kolobok_light/vava.gif)
Теперь понятно, почему Ви в госпиталь уложили. Нет, Каетан тоже, конечно, хороша, но против Ви...
Ладно, раз джедая нет, падавану не до этого - фиг с ним, с бандитом. Не полному же чайнику (это обо мне, если что) его отлаживать. Да еще после джедая. Не настолько я самонадеян. В конце-концов, не так часто играю в ПЛ, прокампурское начало пережить можно.
А вот за подсказку методы - спасибо большое. Воспользуюсь неприменно. Как раз именно то, чего мне не хватает. Делаю все больше по интуиции и методом тыка. А эти тыки отнимают слишком много времени и нервов. Спасибо.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
lolic99
сообщение Dec 17 2017, 03:04
Сообщение #3324


Level 1


Класс: Обыватель
Характер: Lawful Good
Раса: Человек



Всем здрасьте.
Вопрос не то чтобы очень тупой, разве что в перспективе.
Облазил просторы нета, но нигде не нашел ответа на простой вопрос - где найти мод, позволяющий в оригинальной компании первого NWN нанимать более одного стандартного хенча одновременно.
Аддоны все стоят, но нужно чтобы можно было собрать партию именно в самой первой компании. Есть масса отсылок на SetMaxHenchman (который не факт что будет работать в ОС), и большое количество дохлых ссылок на этот вопрос, в частности на форум биоваров. Но рабочего мода не нашел нигде.
К сожалению, даже henchai 1.08 такой возможности не добавляет. Очень, очень прискорбно.

Вроде бы вопрос решил. Всего то надо было отредактировать скрипт диалога (nw_ch_action13), он общий для всех хенчей, добавить туда SetMaxHenchmen и выкинуть зануление текущего хенча.
Теперь гуляю в оригинальной кампании со своей небольшой армией.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
lolic99
сообщение Dec 19 2017, 14:10
Сообщение #3325


Level 1


Класс: Обыватель
Характер: Lawful Good
Раса: Человек



Теперь другой вопрос.
Получилось сделать так что все хенчи теперь корректно переходят между главами, при этом не теряя снарягу, которую выдал им ранее. Проблема в том что для этого пришлось отредактировать скрипты в каждом чаптере оригинальной кампании. А они, как известно, из папки Override не подсасываются, приходится лезть в nwm файлы, что очень не нравится.
Можно ли как то оверрайдить скрипты глобально, не редактируя модули? Я так понимаю - хак паки тоже требуют подключения через тулсет в сам модуль?

И в догонку. Можно ли скриптом поправить пенальти к экспе за большую команду? В оригинальной кампании нвн2 размер партии не влияет на количество получаемого опыта, в нвн1 же каждый хенч, саммон и фамильяр откушивает изрядный кусок. А при большой партии вообще достаются крохи. Это как то настраивается?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Dec 19 2017, 16:42
Сообщение #3326


Level 11
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Фея
NWN: Скриптинг [PW]
Край Лесов



хакпаки или оверрайд, если не хочется менять именно скрипты в модуле

Цитата
И в догонку. Можно ли скриптом поправить пенальти к экспе за большую команду? В оригинальной кампании нвн2 размер партии не влияет на количество получаемого опыта, в нвн1 же каждый хенч, саммон и фамильяр откушивает изрядный кусок. А при большой партии вообще достаются крохи. Это как то настраивается?

В оригинале используется стандартная система опыта по днд 3.0, но с пониженным процентом, она редактируется через свойства модуля в тулсете.
Если хочется вносить разные штуки - нужно писать свою систему опыта и запускать ее на смерть моба, но для этого придется менять скрипты и как-то их подгружать одним из способов выше, если нет желания менять именно скрипты модуля.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
lolic99
сообщение Dec 20 2017, 01:51
Сообщение #3327


Level 1


Класс: Обыватель
Характер: Lawful Good
Раса: Человек



Цитата(Melisse @ Dec 19 2017, 16:42) *
хакпаки или оверрайд, если не хочется менять именно скрипты в модуле

Так в том и вопрос, как это сделать не меняя сам модуль модуль. Хакпаки нужно натягивать в модуль через тулсет, а оверрайд вообще перекрывает только Core скрипты, не скрипты модуля.
Получается, собственно, что кроме как редактированием модуля кампании никак не обойтись. Обидно, потому что правок мало - только сохранение хенчей в базу данных компании при завершении чаптера и восстановление при начале нового. Бегаю с модом Henchman Inventory and Battle AI Mod, обвешивать хенчей хабаром приходится самому, потому терять его между чаптерами совсем не радует.
Сам скрипт, отвечающий за наем нескольких хенчей, относится к Core и оверрайдится без проблем. А вот скрипты начала/конца чаптеров, разумеется, оверрайдить не выходит.
Цитата
В оригинале используется стандартная система опыта по днд 3.0, но с пониженным процентом, она редактируется через свойства модуля в тулсете.
Если хочется вносить разные штуки - нужно писать свою систему опыта и запускать ее на смерть моба, но для этого придется менять скрипты и как-то их подгружать одним из способов выше, если нет желания менять именно скрипты модуля.

Да, так и сделал, повесил на смерть моба, только не свою систему опыта а пересчет Experience point scale (SetModuleXPScale) в зависимости от размера партии. Т.е. при размере группы 1 он равен 10, как и в дефолтной кампании, и увеличивается на 2 с каждым новым членом группы, включая саммонов. Не совсем точная замена, но разница там пренебрежительна. Поскольку евент генерится до того как фактически начисляется экспа - всегда имею достаточно скомпенсированное значение.
К сожалению, способ не самый изящный, надеялся что этот функционал просто можно отключить в настройках модуля, как в NWN2.

К счастью, по крайней мере скрипт, висящий на этом евенте, оверрайдится без проблем.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Dec 21 2017, 07:45
Сообщение #3328


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Приоритет овера наивысший. Либо это баг, либо какая-то непонятная фича. Я синглом никогда не занимался, не знаю.
Цитата
Не совсем точная замена, но разница там пренебрежительна.
Экспа менялась от патча к патчу ещё. Оригинальную кампанию можно было закончить от ~15 до 20-го уровня, смотря на каком патче проходить.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
lolic99
сообщение Dec 21 2017, 23:04
Сообщение #3329


Level 1


Класс: Обыватель
Характер: Lawful Good
Раса: Человек



Цитата(denis0k @ Dec 21 2017, 07:45) *
Приоритет овера наивысший. Либо это баг, либо какая-то непонятная фича. Я синглом никогда не занимался, не знаю.
Экспа менялась от патча к патчу ещё. Оригинальную кампанию можно было закончить от ~15 до 20-го уровня, смотря на каком патче проходить.

Это не TES, оверрайд папка не имеет наивысшего приоритета, модульные скрипты перекрывают.
Мнения патчей я менять не собираюсь, всего лишь хочу вернуть нормально начисление экспы на одного перса.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Dec 22 2017, 07:49
Сообщение #3330


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Ага, посмотрел вики, овер действительно в приоритете на 3-м месте из 4. Забавно, но я отчётливо помню, как через него в своё время менял шардовые ресурсы (IMG:style_emoticons/kolobok_light/smile.gif) Тогда да, вариант всего один - правка модулей.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Dec 22 2017, 11:24
Сообщение #3331


Level 11
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Фея
NWN: Скриптинг [PW]
Край Лесов



там какая-то кривая схема что-то типа того
хакпак -> оверрайд (частично) -> модуль -> биф
но при некоторых моментах оверрайд становится на первое место

Сообщение отредактировал Melisse - Dec 22 2017, 11:26
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NocturN
сообщение Jul 9 2018, 20:24
Сообщение #3332


Level 1


Класс: Волшебник
Характер: Lawful Evil
Раса: Человек



Добрый день.. в полку новичков прибыло)
Попробовал переписать заклинание и при тестах столкнулся с парой проблем решить которые не получается, уверен что где то допустил банальные ошибки.
Проблема в том что эффект Weird() срабатывет одновременно рандомное кол-во раз в одну и ту же цель.
Т.е. появляется от 1го до 5-6 духов и на цель накладывается соответствующее кол-во эффектов.
Собственно вот скрипт OnHeartbeat
Код
#include "NW_I0_SPELLS"
#include "x0_i0_spells"
#include "x2_inc_spellhook"
#include "x0_i0_position"
#include "x0_i0_match"

object oTarget;
object oCaster = GetAreaOfEffectCreator();

location RandomLocation (object oTarget, float fRadius, int iLine = TRUE)
    {
        if (!iLine)
        fRadius = IntToFloat(Random(FloatToInt(fRadius)));
        float iXO = VectorMagnitude(GetPosition(oTarget)) * cos(VectorToAngle(GetPosition(oTarget)));
        float iYO = VectorMagnitude(GetPosition(oTarget)) * sin(VectorToAngle(GetPosition(oTarget)));
        float fRndomAngle = IntToFloat(Random(360));
        location lNewLoc = Location(GetArea(oTarget),Vector(iXO + fRadius * cos(fRndomAngle),iYO + fRadius * sin(fRndomAngle)),360.0);
        return lNewLoc;
    }

void CreatePhantom()
    {
        location lRandom = RandomLocation(oTarget, 8.0, TRUE);
        object oPhantom = CreateObject(OBJECT_TYPE_CREATURE, "nw_wraith", lRandom, FALSE, "");
        ActionDoCommand(TurnToFaceObject(oTarget, oPhantom));
        SetImmortal(oPhantom, TRUE);
        ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectEntangle(), oPhantom);
        ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHaste(), oPhantom);
        DelayCommand(1.0, AssignCommand(oPhantom, ActionCastFakeSpellAtObject(SPELL_PHANTASMAL_KILLER, oTarget, PROJECTILE_PATH_TYPE_DEFAULT)));
        DestroyObject(oPhantom, 2.0);
    }

void ApplyEffect()
    {
        int nAbility = GetCasterAbilityModifier(oCaster);
        int nSpellFocus;
        if (GetHasFeat(FEAT_EPIC_SPELL_FOCUS_ILLUSION, oCaster))
            {
                nSpellFocus = 6;
            }
        else if (GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ILLUSION, oCaster))
            {
                nSpellFocus = 4;
            }
        else if (GetHasFeat(FEAT_SPELL_FOCUS_ILLUSION, oCaster))
            {
                nSpellFocus = 2;
            }
        else
            {
                nSpellFocus = 0;
            }
        int nSpellDC = 19 + nAbility + nSpellFocus;
        int fSchool;
        if (GetHasFeat(FEAT_EPIC_SPELL_FOCUS_ILLUSION, oCaster))
            {
                fSchool = 3;
            }
        else if (GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ILLUSION, oCaster))
            {
                fSchool = 2;
            }
        else if (GetHasFeat(FEAT_SPELL_FOCUS_ILLUSION, oCaster))
            {
                fSchool = 1;
            }
        else
            {
                fSchool = 1;
            }
        int nRounds = d2(fSchool);
        effect eFrightened = EffectFrightened();
        effect eParalyzed = EffectParalyze();
        effect ePetrified = EffectPetrify();
        effect eVisFrightened = EffectVisualEffect(218);
        effect eVisParalyzed = EffectVisualEffect(232);
        effect eVisPetrified = EffectVisualEffect(351);
        effect elFrightened = EffectLinkEffects(eVisFrightened, eFrightened);
        effect elParalyzed = EffectLinkEffects(eVisParalyzed, eParalyzed);
        effect elPetrified = EffectLinkEffects(eVisPetrified, ePetrified);
        int nRandom = Random(3);
        if(!MySavingThrow(SAVING_THROW_WILL, oTarget, nSpellDC, SAVING_THROW_TYPE_NONE, oCaster))
            {
                if(nRandom == 0)
                    {
                        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, elFrightened, oTarget, RoundsToSeconds(nRounds));
                    }
                else if(nRandom == 1)
                    {
                        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, elParalyzed, oTarget, RoundsToSeconds(nRounds));
                    }
                else
                    {
                        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, elPetrified, oTarget, RoundsToSeconds(nRounds));
                    }
            }
    }

void Weird()
    {
        CreatePhantom();
        DelayCommand(2.5, ApplyEffect());
    }

void main()
    {
        oTarget = GetFirstInPersistentObject();
        while(GetIsObjectValid(oTarget))
            {
                if(GetIsPC(oTarget))
                    {
                        SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_WEIRD));
                        if(!GetHasSpellEffect(SPELL_WEIRD,oTarget))
                            {
                                Weird();
                            }
                    }
                oTarget = GetNextInPersistentObject();
            }
    }
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Jul 11 2018, 07:42
Сообщение #3333


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



GetFirstInPersistentObject/GetNextInPersistentObject используется для поиска существ внутри триггеров, вряд ли это то, что нужно для заклинания. Ну и чтобы оно точно искало этих существ, все равно функции нужны параметры.

Для спеллов обычно берут GetFirstObjectInShape.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NocturN
сообщение Jul 11 2018, 10:40
Сообщение #3334


Level 1


Класс: Волшебник
Характер: Lawful Evil
Раса: Человек



Дело в том что я делал по аналогии со стандартными заклинаниями Боиварей.. к примеру вот это заклинание http://nwn.wikia.com/wiki/Stonehold работает с такими же функциями.
Кроме того.. когда я сделал пару тестов и они меня вообще в тупик загнали.
1. Добавил для проверки еще один эффект ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget); и он срабатывает такое же рандомное кол-во раз как и Weird()... но
Код
void main()
    {
        //float fDelay1 = GetRandomDelay(6.0, 12.0);
        oTarget = GetFirstInPersistentObject();
        while(GetIsObjectValid(oTarget))
            {
                if(GetIsPC(oTarget))
                    {
                        SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_WEIRD));
                        if(!GetHasSpellEffect(SPELL_WEIRD, oTarget))
                            {
                                //DelayCommand(fDelay1, Weird());
                                [b]ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget);
                                Weird();[/b]
                            }
                    }
                oTarget = GetNextInPersistentObject();
            }
    }

но если убрать эффект Weird(), то ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget); работает как часы..
Код
void main()
    {
        //float fDelay1 = GetRandomDelay(6.0, 12.0);
        oTarget = GetFirstInPersistentObject();
        while(GetIsObjectValid(oTarget))
            {
                if(GetIsPC(oTarget))
                    {
                        SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_WEIRD));
                        if(!GetHasSpellEffect(SPELL_WEIRD, oTarget))
                            {
                                //DelayCommand(fDelay1, Weird());
                                ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget);
                                [b]//Weird();[/b]
                            }
                    }
                oTarget = GetNextInPersistentObject();
            }
    }


Вышло сузить область поиска ошибки..
Использовал все туже функцию ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget); для проверки
Сама по себе она работает правильно.
В паре с void CreatePhantom() обе работают криво, а вот в паре с void ApplyEffect() обе работают отлично.
Логично что конфликт где то в функции void CreatePhantom(), но не пойму что в ней может быть не так.

Все.. извеняюсь за стену текста, проблема вроде решена, помогла минимальная задержка 0.2 перед функцией CreatePhantom()
Код
void Weird()
    {
        DelayCommand(0.2, CreatePhantom());
        DelayCommand(2.7, ApplyEffect());
    }
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Jul 11 2018, 18:31
Сообщение #3335


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Рекомендую вставить какой-то вывод в лог в цикле и посмотреть, сколько раз этот цикл срабатывает, на ком и почему. Что-то типа вывода GetName(oTarget) через SendMessage.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

135 страниц V  « < 132 133 134 135 >
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 7th July 2025 - 11:22