Piranha
Aug 30 2017, 15:47
Всем привет ! Нужна помощь . Как через toolset добавить к посоху или амулету эффект превращение в любого монстра с его же характеристиками ?
Elendion
Aug 30 2017, 18:57

Помогите! Как сделать, чтобы переходя через триггер персонаж получал опыт и запись в журнале? И как сделать респаун некоторых сундуков и мобов?

И еще такая глупость. Играем с человеком и диалог у непися настроен так, что после одного разговора ты с ним больше не поговоришь. Как сделать, чтобы этот диалог смог прочитать каждый по отдельности, а не только один из нас?
Melisse
Aug 31 2017, 15:06
Цитата
Всем привет ! Нужна помощь . Как через toolset добавить к посоху или амулету эффект превращение в любого монстра с его же характеристиками ?
одним тулсетом тут не обойтись, нужно редактировать 2да файлы, добавлять хакпак и писать скрипт
Цитата
И еще такая глупость. Играем с человеком и диалог у непися настроен так, что после одного разговора ты с ним больше не поговоришь. Как сделать, чтобы этот диалог смог прочитать каждый по отдельности, а не только один из нас?
тут сложно посоветовать что-то, нужно разбираться в каждом конкретном случае и без написания новых скриптов тут не обойтись тоже
Цитата
Помогите! Как сделать, чтобы переходя через триггер персонаж получал опыт и запись в журнале? И как сделать респаун некоторых сундуков и мобов?
1. нужно написать скрипт, где будет даваться опыт и выставляться шаг журнала в нужном квесте. Скрипт поместить в событие OnEnter
2. респавн сундуков - тоже надо писать скрипт.
3. для респавна существ можно использовать Encaunter (Встреча) он растягивается как триггер, там можно назначать время и типы существ для спавна.
Elendion
Aug 31 2017, 16:19
Ну это и так все понятно было, не такой глупый. Скрипты помогите составить, хотя бы с опытом и записью в журнале при переходе. Не думаю, что там много.
Melisse
Aug 31 2017, 19:46
Цитата
Скрипты помогите составить, хотя бы с опытом и записью в журнале при переходе. Не думаю, что там много.
Вы просто описываете так - не понятно что вам надо, надо больше конкретики, если хотите помощи
Вот для того чтобы наступить и получить опыт и перейти на шаг в журнале
Neverwinter Script
void main()
{
object oPlayer = GetEnteringObject ();
if (GetIsPC(oPlayer))
{
GiveXPToCreature (oPlayer, 999999999999);
// цифра 2 - это необходимый вам шаг журнала
AddJournalQuestEntry ("ТЭГ_ВАШЕГО_ЖУРНАЛА", 2, oPC, FALSE, FALSE, FALSE);
}
}
К тому же, тут на форуме много всяких вариантов скриптов. Вот Айван вам даже ссылку дал на базу
Еще можете посмотреть
тут на форуме или
тут тоже для новичков полезно
Elendion
Aug 31 2017, 20:42
Спасибо! Строку с опытом нормально читает, а на даче опыта выдает ошибку "ПЕРЕМЕННАЯ, ОПРЕДЕЛЕННАЯ БЕЗ ТИПА"
Ошибку на записи в журнале то есть... Совсем глаза сломал.
Melisse
Sep 1 2017, 22:38
так надо журнал создать с этим тэгом и там сделать необходимое число шагов. В данной функции выставляется шаг 2, меняйте на то что вам требуется.
Я выше скинула вам ссылки на туториалы - это основа аврора-тулсета. Такие простые вещи как создание журнала то уж можно разобраться и без подсказок, благо там все разжёвано.
Elendion
Sep 1 2017, 23:15
У меня журнал создан, ну вы уж совсем за идиота держите :/
Ошибка элементарная. Тот кто наступл на триггер определен как oPlayer, а в журнале он определен как оРС, который никак нигде не определен. Вот и ошибка.
Neverwinter Script
void main()
{
object oPlayer = GetEnteringObject ();
if (GetIsPC(oPlayer))
{
GiveXPToCreature (oPlayer, 999999999999);
// цифра 2 - это необходимый вам шаг журнала
AddJournalQuestEntry ("ТЭГ_ВАШЕГО_ЖУРНАЛА", 2, oPlayer)
}
}
Elendion
Sep 3 2017, 15:23
Низкий вам поклон за терпение. Я тут сделал нового призываемого спутника через предмет и столкнулся с проблемой, что воспользовавшись этим предметом снова призывается второй спутник, а первый не исчезает, так можно наклепать кучку. Что делать?
denis0k
Sep 4 2017, 08:44
У любого объекта есть тэг. По тэгу можно найти и проверить валидность. Если объект нашёлся, можно не создавать новый или уничтожить старый.
Искать что-то типа: GetObjectByTag, GetIsObjectValid, DestroyObject.
Melisse
Sep 4 2017, 13:05
Цитата
У меня журнал создан, ну вы уж совсем за идиота держите :/
да у меня и в мыслях не было, я ж помочь хочу..
Вы не пишите ошибку, которую выдает компилятор, никакой другой информации, а просто говорите что не работает - так это может быть по десятку причин.
Цитата
Я тут сделал нового призываемого спутника через предмет и столкнулся с проблемой, что воспользовавшись этим предметом снова призывается второй спутник, а первый не исчезает, так можно наклепать кучку. Что делать?
Если вы вызываете спутника через CreateObject, то тогда вам придется проверять через GetObjectTag тэг вызванного спутника, как сказал denis0k
Neverwinter Script
....
if(GetIsObjectValid(GetObjectByTag("ТЭГ_СПУТНИКА")))
{
return;
}
...
если вы вызовите его как суммона через EffectSummonCreature() то при втором вызове он автоматом пересоздается.
Neverwinter Script
...
effect eSummon = EffectSummonCreature("РСЕРЕФ_ВАШЕГО СУЩЕСТВА", VFX_ВИЗУАЛЬНЫЙ ЭФФЕКТ);
ApplyEffectAtLocation (DURATION_TYPE_PERMANENT, eSummon, GetLocation(oPlayer));
...
Elendion
Sep 4 2017, 14:41
Вот так оно выглядит и плодит их безмерно.
Neverwinter Script
void main()
{
object oActivator = GetItemActivator();
object oActivated = GetItemActivated();
string sTag = GetTag(oActivated);
if (sTag == "MatildaX")
{
effect eSummon = EffectSummonCreature("matilda");
ApplyEffectToObject(DURATION_TYPE_PERMANENT,
SupernaturalEffect(eSummon), oActivator);
return;
}
Melisse
Sep 4 2017, 19:49
Попробуйте это
Neverwinter Script
void main()
{
object oActivator = GetItemActivator();
object oActivated = GetItemActivated();
string sTag = GetTag(oActivated);
if (sTag == "MatildaX")
{
if(!GetIsObjectValid (GetAssociate(ASSOCIATE_TYPE_SUMMONED, oActivator )))
{
effect eSummonedMonster = EffectSummonCreature("matilda", SPELL_SUMMON_CREATURE_I);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetLocation(oActivator), HoursToSeconds(24));
}
}
}
Elendion
Sep 4 2017, 19:56
В строке
Neverwinter Script
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetLocation(oActivator), HoursToSeconds(24));
ОШИБКА: ПЕРЕМЕННАЯ, ОПРЕДЕЛЕННАЯ БЕЗ ТИПА
Melisse
Sep 5 2017, 12:54
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummonedMonster, GetLocation(oActivator), HoursToSeconds(24));
Elendion
Sep 5 2017, 13:25
Да, на ошибки больше не ругается, но призывать никого не призывает теперь вообще х)
Melisse
Sep 5 2017, 14:43
Neverwinter Script
void main()
{
object oActivator = GetItemActivator();
object oActivated = GetItemActivated();
string sTag = GetTag(oActivated);
if (sTag == "MatildaX")
{
if(!GetIsObjectValid (GetAssociate(ASSOCIATE_TYPE_SUMMONED, oActivator )))
{
effect eSummonedMonster = EffectSummonCreature("matilda");
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummonedMonster, GetLocation(oActivator), HoursToSeconds(24));
}
else
{
SendMessageToPC (oPC, "У вас уже есть призванное существо");
}
}
}
Проверь теги предмета и существа
Elendion
Sep 5 2017, 15:23
oPC на oActivator исправил, ибо опять ругалось.
Тег предмета верный, у существа стоял ResRef, раньше через него и работало, но даже если поставить тег - ничего не происходит. В общем раньше можно было наплодить много, а сейчас вообще ни одного.
Просто пишет, что используется специальная сила предмета и ничего не происходит.
Melisse
Sep 5 2017, 17:12
Попробуй так, может быть не читает локацию
Neverwinter Script
void main()
{
object oActivator = GetItemActivator();
object oActivated = GetItemActivated();
string sTag = GetTag(oActivated);
location lActivator = GetItemActivatedTarget();
if (sTag == "MatildaX")
{
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oActivator, 1);
if(!GetIsObjectValid (oSummon ))
{
effect eSummonedMonster = EffectSummonCreature("matilda", VFX_FNF_GAS_EXPLOSION_EVIL, 0.5f);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummonedMonster, lActivator, HoursToSeconds(24));
}
else
{
SendMessageToPC (oActivator , "У вас уже есть призванное существо");
}
}
}
Elendion
Sep 5 2017, 17:24
К сожалению все равно не срабатывает
denis0k
Sep 5 2017, 17:39
Как оно скомпилировалось?
location lActivator = GetItemActivatedTarget();
Возвращает object же.
Elendion, для начала нужны азы программирования. Как определить объект, как его описать, как начать скрипт, как закончить и т.д. Без этого будет каша.
Начать нужно с маленького модуля тестировать простые действия, подошел, поговорил, отошел, сел, встал, пукнул громко и так далее. Потом писать что-то в модуль. ИМХО.
Elendion
Sep 6 2017, 12:36
Посидел помучался, сделал х)
Можно сделать, чтобы животные дикие разбегались от игрока?
Цитата(Elendion @ Sep 6 2017, 15:36)

Можно сделать, чтобы животные дикие разбегались от игрока?
Не мыться два месяца, все животные разбегутся.
Elendion
Sep 6 2017, 16:28
Остроумно, маэстро, однако делу это не поможет.
Вопросов тут задали много, модулей построили мало

Оттуда и сарказм. Если человек хочет получить ответ на форуме, он должен правильно задать вопрос. Золотое правило общения на форумах.
Задача то какая? Тупо все животные убегают с криками "Аааа! Спасайтесь зоофил!!" И все?
Elendion
Sep 6 2017, 16:42
Ну допустим стоит себе пасется дикая зёбра, игрок проходит рядом и она отбегает, угроза же.
Начерти триггер, на нем определи зёбру, игрок наступил на триггер, зёбра с криками ужаса убежала. Все.
Elendion
Sep 6 2017, 17:26
Отбежит она разок, игрок снова подойдет, и? Есть другой вариант? Прописать в скриптах именно самой животинки реакцию на PC, например?
denis0k
Sep 6 2017, 17:34
ИИ - один из самых сложных аспектов геймдева. Тебе нужен либо программист, либо попытаться найти готовое решение, например, тут в закромах или на
https://neverwintervault.org/Если хочется самому, то копать в сторону события OnHeartbeat моба и функций поиска игрока в определённом радиусе.
Elendion
Sep 6 2017, 17:38
Да, спасибо, я на ваулте много интересного находил, буду думать.
Залез в базу скриптов для новичков. Переработал скрипт
-fenix-а за 1 минуту под твои нужды.
Скрипт ставется на слот OnPerception в св-вах зёбры.
Neverwinter Script
void main()
{
object oPercep = GetLastPerceived(); // последний воспринятый объект
// если последний воспринятый объект был увиден и если он является игроком
if ( GetLastPerceptionSeen() && GetIsPC(oPercep))
{
SpeakString("Спасайся! ЗООФИЛ!!!");
//сюда вписывай свои действия, типа убежала зёбра на сто метров
}
}
Elendion
Sep 6 2017, 21:14
О! Спасибо мил человек, низкий поклон
Elendion
Sep 8 2017, 18:24
Появился новый вопрос, хы. Мне нужно, чтобы открывалась ветка диалога при определенном уровне, но так, чтобы не приходилось перебирать каждый классовый уровень персонажа в проверке, а то это будет некорректно работать, если игрок нескольких классов.
Все есть в скриптах для новичков. Позавчера читал, когда писал прошлый скрипт.
Melisse
Sep 9 2017, 12:34
Цитата(denis0k @ Sep 5 2017, 17:39)

Как оно скомпилировалось?
location lActivator = GetItemActivatedTarget();
Возвращает object же.
ну так, по памяти пишу... там нужно было GetItemActivatedTargetLocation()

но ведь скопмпилировалось же у него!

Цитата
Можно сделать, чтобы животные дикие разбегались от игрока?
используй функции,
ActionMoveAwayFromLocation
ActionMoveAwayFromObject
в скрипте на OnPerception (примерное название) в слотах моба
Вот Айван привел кусочек скрипта как раз на это событие
Elendion
Sep 10 2017, 22:01
В базе скриптов есть скрипт на рубку дерева, вопрос следующий: как сделать рандомный предмет получаемый при срубе из нескольких на выбор. Я вижу как все это прописано в OnDamaged, но не знаю как правильно построить функцию рандома, сам пытался, но все через Ж.
denis0k
Sep 11 2017, 08:13
Функция рандома там встроена

Генерирует число в заданном диапазоне. Тебе нужно только в зависимости от числа-результата задать ресреф нужного итема.
Elendion
Sep 11 2017, 10:24
Да, я знаю, что она есть, но не знаю как её правильно вставить в скрипт, чтобы его не сломать.
denis0k
Sep 11 2017, 17:26
Что-то типа:
CODE
int x = random(3) + 1;
if (x == 1) {
resref = "item1";
} else if (x == 2) {
resref = "item2";
} else if (x == 3) {
resref = "item3";
}
Потом этот ресреф скормить функции создания.
Писал по памяти
Elendion
Sep 11 2017, 21:20
Спасибо, буду ковыряться х)
А возможно сделать, чтобы ветка диалога открылась только если рядом находится плейсебл с определенным тегом/ресрефом?
Melisse
Sep 11 2017, 22:18
Нужно поставить в диалог на вкладку с названием "Текст проявляет при...", если у тебя русская версия тулсета
Neverwinter Script
int StartingConditional()
{
object oPC = GetPCSpeaker();
object oPlaceable = GetNearestObjectByTag ("ТЭГ_ОБЪЕКТА", oPC , 1);
if (GetIsObjectValid(oPlaceable) &&
GetDistanceBetween (oPC, oPlaceable) < 30.0f) // в радиусе 30 метров от игрока
{
return TRUE;
}
return FALSE;
}
Elendion
Sep 12 2017, 11:35
Огромное спасибо, это то, что нужно!
А в совершенных действиях можно, чтобы этот ближний плейс заменился на другой?
Melisse
Sep 12 2017, 16:39
Попробуй это, но уверенности нет
Проверь правописание функций - потому что без тулсета, навскидку
Neverwinter Script
void CreatePlaceable (object oSubject) ;
void main()
{
object oPC = GetPCSpeaker();
object oPlaceable = GetNearestObjectByTag ("ТЭГ_ОБЪЕКТА", oPC , 1);
if (GetIsObjectValid(oPlaceable))
{
location lLoc = GetLocation(oPlaceable);
SetLocalLocation (oPC, "lLocationPlaceable", lLoc);
AssignCommand(oPC, DelayCommand(3.0f, CreatePlaceable (oPC)));
DestroyObject (oPlaceable);
}
}
void CreatePlaceable (object oSubject)
{
location lCreate = GetLocalLocation (oSubject , "lLocationPlaceable");
CreateObject (OBJECT_TYPE_PLACEABLE, "РЕС_РЕФ_ПЛЭЙСА_ДЛЯ_СОЗДАНИЯ", lCreate);
}
Elendion
Sep 12 2017, 17:05
Спасибище гигантское, это работает именно так, как мне надо было! Это здорово.
Elendion
Sep 13 2017, 18:06
Уууу, я сделал ворона с нужными мне характеристиками, но с него падают стандартные перья. Как мне от них избавиться?
SlothDemon
Sep 17 2017, 17:22
Всем привет, села перепроходить HOTU и столкнулась с проблемой, у меня застопорился роман. Короче, роман с Валеном и за стадию 3, то есть третий диалог, оно не идет вообще. Пыталась копаться в sav файле, нашла там нужную переменную, но половина кодировки неправильная а чем нужнооткрывать его не знаю, я открывала в ноутпаде. Порылась в редакторах сейвов, они обычно редактируют самого персонажа и переменные которые к нему привязаны, нужную найти так и не смогла. В conversation editor нашла что переменная, которая мне нужна, это ivalenstage и она должна быть равна 3, но из всего этого непонятно как она меняется, или сразу после диалога и там стоит задержка, или нужно для этого поднимать "очки влияния". Вроде делала все то же самое как в предыдущем прохождении когда все работало. Может, кто-нибудь подкинет скрипт чтобы получить нужное значение переменной или подскажет что для этого нужно в консоли написать? Так, после каждого сюжетного квеста примерно в конце локации стабильно появлялся диалог, а тут дошла до третьей главы, на всякий случай переиграла с начала 2й главы разик, так ничего и нет.
Извините, я знаю что это очень тупо, но я без понятия куда это писать. Я не могу создавать темы в форуме по самой игре, и вообще нигде.
Попробуйте ваш сейв переименовать в .MOD, будет возможно отредактировать вашего персонажа и переменные в тулсете.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.