Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74
Laajin
while состоит:

1. Условие, определяющее, будет ли выполняться тело цикла. Это условие записывается после слова while и может быть произвольным арифметическим выражением, в котором должен быть хотя бы один из операторов ==, !=, <, >, <=, >= .
2. Тело цикла, состоящее из одной или нескольких инструкций. (в примере выше опущено =))
3. Инструкции, изменяющие значения переменных, входящих в проверяемое условие. Если бы этой инструкции не было, то значение переменной не менялось бы и проверяемое условие всегда было бы истинным, что привело бы к бесконечному циклу. (если оно, конечно, изначально цикл запустился хотя бы раз)
greye
Цитата(Laajin @ Oct 26 2010, 16:19) *
сколько занимался нвн то
Neverwinter Script
int nNum;
while(nNum < 10)
{
nNum++;
}

всегда работало

Так ты здесь и не проверяешь возвращаемое значение операции. Как я сказал, значение переменной изменится, но в выражении будет использоваться старое значение. Проверь:
Neverwinter Script
int nNum = 0;
    if (nNum++ == 0) {
        SendMessageToPC(GetFirstPC(), "Greye is right.");
    } else {
        SendMessageToPC(GetFirstPC(), "Greye is wrong.");
    }

    if (++nNum == 1) {
        SendMessageToPC(GetFirstPC(), "Greye is wrong.");
    } else {
        SendMessageToPC(GetFirstPC(), "Greye is right again.");
    }
Laajin
Цитата
bern
Скажите, как можно добавить +1 или другое число к переменной, учитывая ее текущее значение, а не устанавливая конкретное значение? И можно ли через скрипт добавить запись в дневник?

все же мне думается я верно ответил

greye
если ты имеешь ввиду обновление переменной сразу - то да. Тогда я просто не понял в чем я не прав, но для bern разницы я думаю не много - суть одна - число увеличится.
greye
Переменная в скрипте - да, увеличится, а вот значение локальной переменной на объекте - нет.
Laajin
о_О
ну....ладно, нет так нет, у меня короче
Lex
Цитата(Talarasha @ Oct 26 2010, 13:07) *
TAG - тэг журнальной ветки, # - номер записи, oPC - игрок, на которого вешать, можно например GetPCSpeaker() - если в диалоге. Проверка номера ветки делается через локальную переменную:
Neverwinter Script
GetLocalInt(oPC, "NW_JOURNAL_ENTRYTAG")

Нужно только помнить, что имя переменной формируется методом NW_JOURNAL_ENTRY+TAG, т.е. первая часть так и остается, а вместо TAG пишем тэг журнальной ветки.

связывать журнальную запись и имя переменной именно таким методом не обязательно, к слову. Можно выбрать конструкцию попроще.

Цитата(Laajin @ Oct 26 2010, 15:19) *
сколько занимался нвн то

Neverwinter Script
int nNum;

while(nNum < 10)
{



nNum++;
}


всегда работало

По поводу присовения локальной переменной и вообще про nNum++ greye прав. А в приведенном тобой примере немного другая ситуация. И она не входит в противоречие с действительностью.
Laajin
Neverwinter Script
int nNum = GetLocalInt(.... , ".....");

SetLocalInt(.... , ".....", nNum++);


nNum++ это тоже самое что nNum+1
следовательно не вижу особой разницы для bern
bern
Всем спасибо! Буду пробовать разные варианты если что. Laajin, спасибо за полезные ссылки, нужно будет покопаться. Также посмотреть скрипты из готовых модов - отличная идея.
Talarasha
Цитата
связывать журнальную запись и имя переменной именно таким методом не обязательно, к слову. Можно выбрать конструкцию попроще.

Запрашиваю подробную инфу. Пошарил по форуму, видел лишь реализацию связкой "добавить запись"+"установить переменную о том, что добавили записи", затем "проверить переменную с записи". Это то, что имелось ввиду или в дебрях NSS от меня прячутся реально клевые ништяки?
Ilerien
Цитата
nNum++ это тоже самое что nNum+1
Ты не прав, есть разница в возвращаемом значении. Результаты выполнения SetLocalInt(.... , ".....", nNum++) и SetLocalInt(.... , ".....", nNum + 1) будут существенно различны.
Вообще, не имея опыта в программировании, лучше этими не пользоваться значениями, возвращаемыми операторами присваивания и инкрементирования/декрементирования, - это приводит к долгим и муторным поискам ошибок с точностью до единицы.
Laajin
мне уже даже интересно - в чем различие будет в данном примере? - тогда уж объясни
я прекрасно понимаю что вообще nNum++ nNum+1 отличаются, но в данном примере разве не произойдет увеличение на 1, при установки локалки?
greye
Цитата(Laajin @ Oct 26 2010, 21:52) *
я прекрасно понимаю что вообще nNum++ nNum+1 отличаются, но в данном примере разве не произойдет увеличение на 1, при установки локалки?

Не произойдёт. SetLocalInt поставит то значение, которое указано третьим параметром. nNum + 1 честно посчитается и локалка выставится в nNum + 1, а значение самого nNum не изменится.nNum++ вернёт nNum, поэтому локалка станет nNum, а сам nNum увеличится на единицу.

Так как мне всё равно нечего делать: представим, что наша переменная nNum это ящик. У ящика есть некоторый вес, который можно регистрировать весами (в качестве весов возьмём значение локальной переменной после SetLocalInt). nNum + 1 это как положить на весы этот ящик и _рядом_ ещё один брусок. ++nNumber это как сначала положить брусок _внутрь_ ящик, а потом взвесить. nNum++ это сначала взвесить ящик без бруска, а потом положить брусок внутрь.
Laajin
Все верно. Поставил нвн и проверил сам.

Neverwinter Script
int nNum = GetLocalInt(.... , ".....");

SetLocalInt(.... , ".....", nNum++);

в этом случае действительно не произойдет увеличение, а вот
в это случае
Neverwinter Script
int nNum = GetLocalInt(.... , ".....");
nNum++;
SetLocalInt(.... , ".....", nNum);

уже произойдет.

Спасибо, такой нюанс, а сцукО.
denis0k
1. Всё же неплохо сначала проверять, а потом советовать smile.gif
2. Ну вы ещё часов 12 поспорьте, чему равно ++nNum++, строя разные теории и аналогии, но не утруждая себя запустить на 3 минуты тулсет smile.gif
virusman
Оператор n++ заменяет выражение n=n+1, но вот от его положения зависит то, будет ли это выполняться до выражения, где он фигурирует или нет.
Neverwinter Script
x = ++n;
эквивалентно
Neverwinter Script
n = n+1;
x = n;
,

Neverwinter Script
x = n++;
Эквивалентно
Neverwinter Script
x = n;
n = n+1;

Для самого n результат одинаковый, для выражения, в котором оно участвует - нет.
Как обычно, напомню, что всё это, и многое другое, описано в Лексиконе. Чем догадываться, лучше один раз прочитать.
Lukas Addon
Нужно наложить EffectDazed() на монаха 20+ уровня .... но вылетает что у него иммунитет. как побороть?
это для системы смерти, после превращения в светлячка, чтобы персонаж не мог никого атаковать иначе спадет полиморф.


Прошу помогите.
PaiNt
Цитата(Lukas Addon @ Oct 27 2010, 06:49) *
Нужно наложить EffectDazed() на монаха 20+ уровня .... но вылетает что у него иммунитет. как побороть?
это для системы смерти, после превращения в светлячка, чтобы персонаж не мог никого атаковать иначе спадет полиморф.


Прошу помогите.

Забей на даз. В НВНХ можно отловить события выбора атаки и каста.
Lukas Addon
спасибо. А можно пример отлова события атаки?
Ilerien
Цитата
Забей на даз. В НВНХ можно отловить события выбора атаки и каста.
Ты бы сначала спросил, может, для сингла нужно, а ты NWNX предлагаешь smile.gif
Цитата
спасибо. А можно пример отлова события атаки?
Ридми для плагина. Но это работает только в мультиплеере. Строго говоря, для сингла есть расширение, но я не ковырял его функционал.
Lex
Цитата(Talarasha @ Oct 26 2010, 20:55) *
Запрашиваю подробную инфу. Пошарил по форуму, видел лишь реализацию связкой "добавить запись"+"установить переменную о том, что добавили записи", затем "проверить переменную с записи". Это то, что имелось ввиду или в дебрях NSS от меня прячутся реально клевые ништяки?

я просто имел ввиду что переменная не обязательно должна быть вида NW_JOURNAL_[ENTRYTAG]. Имя переменной с журналом связывается скриптером, а не системой. Соотв. он волен выбирать то, как она (переменная) будет называться. Использовать в имени переменной журнальный идентификатор - это удобно. А вот "NW_JOURNAL" можно и сократить немного. Речь только об этом.

скажем у нас была такая система:
Q_<quest_name>_<id> - переменная
<quest_name> - журнальная запись
Lukas Addon
как раз нужно для мультиплеера. спасибо за подсказки буду разбираться.
Talarasha
Цитата(Lex @ Oct 27 2010, 09:15) *
я просто имел ввиду что переменная не обязательно должна быть вида NW_JOURNAL_[ENTRYTAG]. Имя переменной с журналом связывается скриптером, а не системой. Соотв. он волен выбирать то, как она (переменная) будет называться. Использовать в имени переменной журнальный идентификатор - это удобно. А вот "NW_JOURNAL" можно и сократить немного. Речь только об этом.

скажем у нас была такая система:
Q_<quest_name>_<id> - переменная
<quest_name> - журнальная запись

scratch_one-s_head.gif Тащем-то, имя переменной связывается с журналом как раз системой. Выполнив команду AddJournalQuestEntry("CHAPTER1", 10, oPC, TRUE, TRUE);, на персонажа системой повесится целочисленная переменная NW_JOURNAL_ENTRYCHAPTER1 со значением 10. Соответственно и обратится к ней можно только таким образом. Шаблон насколько мне известно вшитый, поэтому я не представляю, как можно обратиться по, например, Q_<quest_name>_<id>. Откуда игра знать-то будет, что это - переменная журнала? Ниоткуда. Поэтому я предполагаю, что у вас таки использовалась ненужная дополнительная переменная. Для проверки, попробуй два таких скрипта на рычаге:
Neverwinter Script
void main()
{
    object oPC = GetLastUsedBy();
    AddJournalQuestEntry("CHAPTER1", 10, oPC, TRUE, TRUE);
    if(GetLocalInt(oPC, "NW_JOURNAL_ENTRYCHAPTER1") == 10)
  {
         AddJournalQuestEntry("CHAPTER1", 20, oPC, TRUE, TRUE);
  }
}


Neverwinter Script
void main()
{
    object oPC = GetLastUsedBy();
    AddJournalQuestEntry("CHAPTER1", 10, oPC, TRUE, TRUE);
    if(GetLocalInt(oPC, "ENTRYCHAPTER1") == 10)
    {
         AddJournalQuestEntry("CHAPTER1", 20, oPC, TRUE, TRUE);
    }
}

(журнал CHAPTER1, записи 10 и 20)
Первый скрипт выполнится и выставит журнал последовательно в 10 и в 20. Второй скрипт - только в 10. Можешь подставлять в GetLocalInt что угодно, никогда он не выполнится, потому что имя переменной журнала установлено системой.
Lex
Хы, не знал. Надо глянуть в 1.32 был ли такой функционал (с переменной), если да, то ДБКолл недоглядел, когда писал для ПЛ/ПВ квестовую систему, потому что мы заводили свою переменную. smile.gif Все это было внутри библы, а снаружи осталось несколько функций, с ними и работали.


зы: кто там спрашивает периодически, сколько скрипты изучать? я вот спустя почти 10 лет что-то новое узнаю иногда, как сейчас smile.gif
Laajin
Цитата
зы: кто там спрашивает периодически, сколько скрипты изучать? я вот спустя почти 10 лет что-то новое узнаю иногда, как сейчас smile.gif

вот и я аналогично)

Talarasha
NW_JOURNAL_ENTRYCHAPTER1 имеет какие-то связи с AddJournalQuestEntry("CHAPTER1 ", 10, oPC, TRUE, TRUE); - я правильно понял?
Нвн уже удалил, так что не проверить
Talarasha
Цитата
Talarasha
NW_JOURNAL_ENTRYCHAPTER1 имеет какие-то связи с AddJournalQuestEntry("CHAPTER1 ", 10, oPC, TRUE, TRUE); - я правильно понял?
Нвн уже удалил, так что не проверить

Имеет, имеет. Функцию AJQE можно представить в следующем виде:
Neverwinter Script
void AddJournalQuestEntry(string szPlotID, int nState, object oCreature, int bAllPartyMembers=TRUE, int bAllPlayers=FALSE, int bAllowOverrideHigher=FALSE)
{
    AddEntry();
    SetLocalInt(object oCreature,"NW_JOURNAL_ENTRY"+szPlotID,nState);
    // (для наглядности опущены проверки bAllPartyMembers, bAllPlayers и bAllowOverrideHigher)
}

Где AddEntry(); - какой-то системный функционал по обновлению журнала. Но этим функционалом функция AJQE не заканчивается, она еще и вешает переменную для получения доступа к журналу. Просто это в отличие от AddEntry(); визуально не определяется, поэтому не совсем очевидно, но повсевместно используется в скриптах оригинальной кампании. А работа с журналом по типу:
Neverwinter Script
AddJournalQuestEntry("TAG",#,oPC,TRUE,TRUE);
SetLocalInt(oPC,"Q1_TAG_ID",#);
if(GetLocalInt(),"Q1_TAG_ID") == #)
{
    AddJournalQuestEntry("TAG",#+1,oPC,TRUE,TRUE);
    SetLocalInt(oPC,"Q1_TAG_ID",#+1);
}

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

Цитата
зы: кто там спрашивает периодически, сколько скрипты изучать? я вот спустя почти 10 лет что-то новое узнаю иногда, как сейчас

На мой взгляд, гораздо, гораздо меньше. Года должно хватить всем. Главное ведь не выучить названия и функционал всех-всех функций, а понять принцип, систему. Как только понял - все, дальше все задачи под силу, нужно только представлять, что хочешь. Поэтому владеющим C вообще ничего учить не надо, зашел и кодь, функции - вот они все. Вышеприведенная фишка - это просто недосмотр со стороны разрабов, которые не упомянули про это в описании AJQE.
virusman
На самом деле, там ещё 2 переменные вешаются:
NW_JOURNAL_DATE*
NW_JOURNAL_TIME*

Более того, если я ничего не пропустил при беглом взлягде на код, он кроме установки переменных вообще ничего не делает.
То есть можно просто вешать локалки с тем же успехом. Обновление журнальных данных происходит в самой функции SetLocalInt.
Talarasha
Цитата
Более того, если я ничего не пропустил при беглом взлягде на код, он кроме установки переменных вообще ничего не делает.
То есть можно просто вешать локалки с тем же успехом.

Это абстрактный пример. Подразумевается, что вместо AddEntry() там код, реализующий обновление журнала.
virusman
Я имел в виду реальный код, реализующий эту функцию.
Talarasha
Реальный код какой функции, AddEntry()? Так я такого вроде на рассмотрение не представлял. Реальный код, реализующий AJQE? Тоже не представлял. Реальный код, использующий AJQE в полной мере просто будет меньше, чем код, игнорирующий включенную в AJQE установку переменных.

Реальный код, реализующий AJQE как минимум будет содержать кучу проверок из тех, что передаются функции, они же будут передаваться и AddEntry, и будут соответственно установки NW_JOURNAL_DATE*, NW_JOURNAL_TIME*, просто мы же не занимаемся переписыванием оригинальных функций, мы показываем, откуда берется переменная для проверки.
Laajin
Да он про сам код игры, а не язык нвнскриптинг
Цитата
На самом деле, там ещё 2 переменные вешаются:
NW_JOURNAL_DATE*
NW_JOURNAL_TIME*

А время и дата возвращаются в каком виде? Просто у времени там часы, минуты, сек, а дата, дни месяцы и тд.
Talarasha
Цитата
Да он про сам код игры, а не язык нвнскриптинг

А, понял.
virusman
Цитата(Laajin @ Oct 27 2010, 16:26) *
Да он про сам код игры, а не язык нвнскриптинг

А время и дата возвращаются в каком виде? Просто у времени там часы, минуты, сек, а дата, дни месяцы и тд.
Не смотрел.. Судя по всему, какой-то свой числовой формат.
Laajin
Можно в принципе через IntToString посмотреть, наверное
Ollone5
Как сделать так чтобы если игрок зайдет в тень в режиме скрытности его никто не видел?
kiruhs
Цитата(Ollone5 @ Jan 1 2011, 14:29) *
Как сделать так чтобы если игрок зайдет в тень в режиме скрытности его никто не видел?

Нарисовать по контурам тени триггер и на онентер вешать скрипт. Например дающий эффект инвиза или санок
greye
Цитата(kiruhs @ Jan 1 2011, 17:41) *
Нарисовать по контурам тени триггер и на онентер вешать скрипт. Например дающий эффект инвиза или санок

Ага, особенно это проканает в экстериорах при смене положения источников света, в тенях от персонажей, да и просто при внесении новых источников света вроде факелов.
Скорее всего никак. Впрочем, человека в стелсе и так не должно быть видно.
Ollone5
А можно скрипт?
elsefalse
Помню на кормире у ассасина был запрет на хайд при освещении, только не помню как реализован был.
Вот, может это поможет:
http://www.nwnlexicon.com/compiled/functio...lumination.html
http://www.nwnlexicon.com/compiled/categor...ingeffects.html
wirTUS
Код
void main()
{
object oPC = GetEnteringObject();
object oArea1 = GetArea(oPC);
object oArea2 = GetObjectByTag(FVgreatbridge);
AssignCommand(oPC, ActionJumpToLocation(oArea2, vector Vector(315.0,GetDistanceBetweenLocations(location Loc1(oArea1,vector vec(0.0, 0.0, 0.0),0.0),GetLocation(oPC)),0.0),0.0));
}

Хотел сделать перемещение между локациями (идешь в триггер на краю локации по, например, дороге, выходишь на другой локации на ту же дорогу, а не на заранее заданный вэйпоинт, например).
Ругается на строчку с ассигнкомманд (ERROR: UNKNOWN STATE IN COMPILER)
Мне кажется, что напортачил в
Код
vector Vector(315.0,GetDistanceBetweenLocations(location Loc1(oArea1,vector vec(0.0, 0.0, 0.0),0.0),GetLocation(oPC)),0.0)

а именно в
Код
GetDistanceBetweenLocations(location Loc1(oArea1,vector vec(0.0, 0.0, 0.0),0.0),GetLocation(oPC))

но где - не понимаю.
Там, где 315 - координата по х (подразумевался переход с левого края одной локации на левый другой, где-то вычитал, что размер тайла - 10х10м, обе локации 32х32 тайла)
greye
Neverwinter Script
AssignCommand(oPC, ActionJumpToLocation(oArea2, vector Vector(315.0,GetDistanceBetweenLocations(location Loc1(oArea1,vector vec(0.0, 0.0, 0.0),0.0),GetLocation(oPC)),0.0),0.0));


Neverwinter Script
AssignCommand(oPC, ActionJumpToLocation(oArea2, Vector(315.0, GetDistanceBetweenLocations(Loc1(oArea1, vec(0.0, 0.0, 0.0), 0.0), GetLocation(oPC)), 0.0), 0.0));


Зачем-то поставил типы возвращаемых значений при вызове.
wirTUS
Попытася описать
Код
void main()
{
object oPC = GetEnteringObject();
object oArea1 = GetArea(oPC);
object oArea2 = GetObjectByTag(FVgreatbridge);
vector vec = GetPosition(GetObjectByTag("WPfoJumpto"));
location Loc1 = SetLocalLocation(oPC,"Var4locj1",oArea1,vec,0.0);
location l = SetLocalLocation(oPC,"Var4locj2",oArea2,315.0,GetDistanceBetweenLocations(Loc1, GetLocation(oPC)),0.0,0.0);
//vector vect = 315.0,GetDistanceBetweenLocations(Loc1, GetLocation(oPC),0.0);
AssignCommand(oPC, ActionJumpToLocation(l);
}

или
Код
void main()
{
object oPC = GetEnteringObject();
object oArea1 = GetArea(oPC);
object oArea2 = GetObjectByTag(FVgreatbridge);
vector vec = GetPosition(GetObjectByTag("WPfoJumpto"));
location Loc1 = SetLocalLocation(oPC,"Var4locj1",oArea1,vec,0.0);
vector vect = 315.0,GetDistanceBetweenLocations(Loc1, GetLocation(oPC)),0.0);
AssignCommand(oPC, ActionJumpToLocation(oArea2, vect, 0.0);
}

или
Код
void main()
{
object oPC = GetEnteringObject();
object oArea1 = GetArea(oPC);
object oArea2 = GetObjectByTag(FVgreatbridge);
vector vec = GetPosition(GetObjectByTag("WPfoJumpto"));
location Loc1 = SetLocalLocation(oPC,"Var4locj1",oArea1,vec,0.0);
AssignCommand(oPC, ActionJumpToLocation(oArea2, 315.0, GetDistanceBetweenLocations(Loc1, GetLocation(oPC)), 0.0, 0.0);
}

Во всех случаях ругается на строчку с
Код
GetDistanceBetweenLocations(Loc1, GetLocation(oPC))

UNKNOWN STATE IN COMPILER или PARSING VARIABLES LIST, в зависимости от месстонахождения оной
Белатрис
Такая ностальгия сейчас...
Жаль, что времена NWN 1 прошли...
wirTUS
попробовал еще вариант
Neverwinter Script
void main()
{
object oPC = GetEnteringObject();
object oArea1 = GetArea(oPC);
object oArea2 = GetObjectByTag("FVgreatbridge");
vector Loc1 = GetPosition(oPC);
vector vec;
location loc;
float f = Loc1.y;
vec = 315,f,0;
loc = oArea2, vec, 0;
AssignCommand(oPC,ActionJumpToLocation(loc));
}

Теперь ругается на отсутствие точки с запятой (ERROR: NO SEMICOLON AFTER EXPRESSION) после
Neverwinter Script
vec = 315,f,0;
greye
Neverwinter Script
vec = 315,f,0;
loc = oArea2, vec, 0;

Мой разум отказывается понимать, чего ты хотел этим добиться. В примерах выше такая же ошибка: ты почему-то записываешь не вызов функции для формирования вектора или положения (Vector(float x, float y, float z), Location(object oArea, vector vPosition, float fOrientation)), а только их параметры, удивляясь, что ничего не работает.
wirTUS
попробовал описать так:
Neverwinter Script
void main()
{
void main()
{
object oPC = GetEnteringObject();
object oArea1 = GetArea(oPC);
vector Loc1 = GetPosition(oPC);
vector vec = Vector(315.0f,Loc1.y,0.0f);
object oArea2 = GetObjectByTag("FVgreatbridge");
AssignCommand(oPC,ActionJumpToLocation(oArea2, vec(vek.x,vek.y,vek.z), 0.0f));
}

в ассигнкомманде vec с любыми параметрами (пробовал vec(vek.x,vek.y,vek.z), vec(315.0f,Loc1.y,0.0f) и vec(), так же 2й вариант с Loc1.y выраженным отдельной переменной) выдаёт неизвестный индификатор (UNDEFINED IDENTIFIER (vec)), без параметров же ругается на отсутствие, собственно, параметров (DECLARATION DOES NOT MATCH PARAMETERS)

записал по аналогу Лексикона
Neverwinter Script
void main()
{
object oPC = GetEnteringObject();
object oArea1 = GetArea(oPC);
vector Loc1 = GetPosition(oPC);
object oArea2 = GetObjectByTag("FVoutcastle");
vector vec = Vector(315.0f,Loc1.y,0.0f);
float fAngle = 0.0;
location loc = Location(oArea2,vec,fAngle)
AssignCommand(oPC,JumpToLocation(loc);
}

На строчку ассигнкомманд ругается PARSING VARIABLE LIST
greye
Neverwinter Script
void main()
{
object oPC = GetEnteringObject();
object oArea1 = GetArea(oPC);
vector Loc1 = GetPosition(oPC);
object oArea2 = GetObjectByTag("FVgreatbridge");
vector vec = Vector(315.0, Loc1.y, 0.0);
AssignCommand(oPC,ActionJumpToLocation(Location(oArea2, vec, 0.0)));
}
или
Neverwinter Script
void main()
{
object oPC = GetEnteringObject();
object oArea1 = GetArea(oPC);
vector Loc1 = GetPosition(oPC);
object oArea2 = GetObjectByTag("FVgreatbridge");
AssignCommand(oPC,ActionJumpToLocation(Location(oArea2, Vector(315.0, Loc1.y, 0.0), 0.0f)));
}

А в твоём последнем вариант скобка не закрыта после AssignCommand.
wirTUS
Огромное спасибо, особенно за терпение, работает
wirTUS
Neverwinter Script
int StartingConditional()
{

    if(!HasItem(GetPCSpeaker(), "Mmodacid")||!HasItem(GetPCSpeaker(), "Mmodacid_long")||!HasItem(GetPCSpeaker(), "Mmodacid_strong"))
        return TRUE;

    return FALSE;
}

Задумка: проверка в диалоге наличия в инвентаре PC одной из трех вещей. (Немного модифицированный скрипт из мастера)
Назначение: на реплику PC
Симптомы: наличие реплики (возможность PC сказать ее) при полном отсутсвии данных предметов или при наличии всех трех
Предостережение: в тэгах предметов несовпадений нет; правильно работает при одном либо двух предметах
Предварительный диагноз: напортачено в логике
Ilerien
Судя по коду, если все теги написаны без ошибок, фраза должна появляться, если отсутствует хотя бы 1 предмет. Если хотя бы 1 тег написан неправильно, то фраза будет появляться всегда. Может, все-таки перепроверить теги? В частности, теги чувствительны к регистру.
Кстати, код намного легче читается, если операторы (вроде ||) выделять пробелами.
wirTUS
А такой вопрос, возможно глупый: "!" случаем не обозначает отрицание?

Вопрос снимается, извиняюсь за беспокойство, именно так. Убрал - работает
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.