Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > 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, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103
DEM
Dik Morris, иногда бывают глююки если ставить на onEnter локации... Лучше поставь в месте появления игрока тригер и на нег повесь скрипт


PS. Помните onEnter плохо и надо зачёркивать

PPS. почему во всех форумах теги пишутся через [] а не через нормальный <>
Nick Parker
Вот накопилось парочку вопросов.

1)Опишите поподробнее, как сделать так, чтобы после первого диалога с Неписем, при второй встрече с ним НеПиСь говорил совсем другое (т.е. второй диалог).

2)Как сделать проверки в диалоге на убеждение, на запугивание и т.д.?

3)Задача: есть дверь и два рычага. Надо, чтобы после юза двух рычагов дверь открывалась. Или: есть дверь и два предмета. Как сделать проверку, которая проверяет есть у вас предметы или нет? Если есть, то дверь открывается. Если только один из предметов, то появляется надпись, что у вас нет данного предмета.

4)При создании квеста, вешаемого на ветку диалога, когда пишешь ему имя, тэг, приоритет, ниже есть ХР. Что это? Думал опыт, но при прохождении опыт не дают. Приходится через «дать награды».

5)Как сделать, чтобы в модуль можно было играть только за мужчину?

6)Как сделать всплывающие сообщения над головами НеПиСей в определенный момент?

Пока все. Прошу писать подробнее, чтобы не пришлось переспрашивать. Если можно, то ответы пришлите, пожалуйста, на ПМ.
Dik Morris
QUOTE
Опишите поподробнее, как сделать так, чтобы после первого диалога с Неписем, при второй встрече с ним НеПиСь говорил совсем другое (т.е. второй диалог).

С помощью расстановки, локальных переменных.
Смотри, диалог с НПС: (пример, оч. краткий)
У тебя два "корня" диалога.
Пока - появ. при повторном начинании диалога.
Привет - появ. первый раз.
Решение:
Ставь на "привет" локальную переменную Nik Parker = 1 В совершены действия.(мастером скриптов)
Ставь на "пока" условие Появ. при: при локальной переменной Nik Parker = 1, (тоже мастером)
Думаю, смысл понятен.
QUOTE
2)Как сделать проверки в диалоге на убеждение, на запугивание и т.д.?

Опять таки при помощи визарда, сматри там.
(Текст. появ. при: в общем там должно это быть wink.gif)
QUOTE
5)Как сделать, чтобы в модуль можно было играть только за мужчину?

На onEnter триггера (тригер, рисуй вокруг точки, появлния игрока)
Neverwinter Script Source
void Kill(object oPC)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),oPC);
}
void main()
{
object oPC = GetEnteringObject();
if (GetFirstPC()!=oPC)
    {
    Kill(oPC);
    }
int nRace = GetRacialType(oPC);
int nGender = GetGender(oPC);
if (nRace!= GENDER_MALE)
    Kill(oPC);
}
QUOTE
Как сделать всплывающие сообщения над головами НеПиСей в определенный момент?

Вот тут, поподробнее. В определенный момент это когда? Если в диалоге, то на строчку, вешай скриптик:
Neverwinter Script Source
void main()
{
AssignCommand(GetObjectByTag("TAG"),SpeakString("Я НПС"));
}

QUOTE
)При создании квеста, вешаемого на ветку диалога, когда пишешь ему имя, тэг, приоритет, ниже есть ХР.

С помощью функции:
Neverwinter Script Source
GetJournalQuestExperience

PS: оч. полезная статья, по локальным переменным: http://www.igromania.ru/articles/?nw_63
QUOTE
Dik Morris, иногда бывают глююки если ставить на onEnter локации... Лучше поставь в месте появления игрока тригер и на нег повесь скрипт

Dem, я это знаю, но все же мне нужно именно на onEnter локи

*******************ВСЕ!!!**********************
-fenix-
QUOTE (Dik Morris @ Nov 4 2005, 22:35)
В чем дело? Скрипт, стоит на оnEnter локации, но эффекта 0.

Люди, объясните мне, зачем вы всюду суете ActionDoCommand?
Dik Morris, убери и все будет ок wink.gif
DEM
-fenix-, лично мне так удобнее... Да я и не знал что можно без неё, как научился так я и стал писать...
-fenix-
DEM, это плохо, ведь ActionDoCommand ставит команды в очередь. А иногда это просто не нужно, как например Дику!
Если есть тутор Айвана, то там написано, что эта функция делает и зачем и как ее использовать.
DEM
-fenix-, ну лично мне пока нужна только анимация по порядку, хотя ты прав, ему в данном случае нужна не такая smile.gif
Daemonix
Вот кто-то ранее писал про скрипт, с помощью которого удаётся НЕ БЕСПОКОИТЬ непися. Так вот: у меня подобный вопрос, как сделать так, чтобы я подошёл к ниписю, кликнул бы на него (он сидит на стуле), а он даже со стуа не встал бы под предлогом всплывающего сообщения('НПС слишком занят, чтобы говорить!'). Это вообще реально?

Да и вот ещё: как перенести все стартовые вещи перса в сундук при старте модуля?
Lex
QUOTE (Daemonix @ Nov 7 2005, 03:05)
как перенести все стартовые вещи перса в сундук при старте модуля?

попируем (CopyItem) и потом удаляем оригиналы (DestroyObject)

QUOTE (Daemonix @ Nov 7 2005, 03:05)
Вот кто-то ранее писал про скрипт, с помощью которого удаётся НЕ БЕСПОКОИТЬ непися. Так вот: у меня подобный вопрос, как сделать так, чтобы я подошёл к ниписю, кликнул бы на него (он сидит на стуле), а он даже со стуа не встал бы под предлогом всплывающего сообщения('НПС слишком занят, чтобы говорить!'). Это вообще реально?

самый простой вариант: модификация в скрипт onConversation.
в начало вбиваешь проверку, что если НПС сидит (GetCurrentAction проверка на ACTION_SIT) то сообщение (SendMessageToPC) и выход из скрипта (return)
Dik Morris
Народ, помогите. Блин, вещи в 10 раз сложнее у меня получаются, а всякая фигня нет. smile.gif
Сказывается незнание английского и функций тулсета.
Как обозначить ПС ? Скрипт, стоит на слоте, когда игрок получает предмет. (В мод свойствах)
Neverwinter Script Source
void main()
{
object oPC  =
object oItem = GetObjectByTag("");
if (GetTag(oItem) == "stos") && GetLocalInt(oPC,"item_1") == !1)
{
AddJournalQuestEntry("prolog",2,oPC);
SetLocalInt(oPC,"item_1") == 1)
}
}

*******
Тигер, сенкс. crazy.gif
*******
Народ, спасибоblush.gif
Tiger Greyhawk
Дик, в зависимости от ...
GetItemPossessor(oItem); - вернуть владельца конкретного предмета. В качестве предмета, по-моему, можно указать тот предмет, который он получает в данный момент.
Если сингл, то вообще просто: GetFirstPC();
ну и т.п.
GetNearestCreature(...); и значение выборки сделать "PLAYER_CHAR_IS_PC"
_kaa_
QUOTE (Dik Morris @ Nov 7 2005, 10:16)
Народ, помогите. Блин, вещи в 10 раз сложнее у меня получаются, а всякая фигня нет. smile.gif
Сказывается незнание английского и функций тулсета.
Как обозначить ПС ? Скрипт, стоит на слоте, когда игрок получает предмет. (В мод свойствах)

Открывай лексикон, вбивай имя нужного события On.. и смотри, там обязательно указаны функции, которые актуальны для работы с этим событием.
Lex
QUOTE (Dik Morris @ Nov 7 2005, 10:16)
Скрипт, стоит на слоте, когда игрок получает предмет. (В мод свойствах)

QUOTE (Tiger Greyhawk @ Nov 7 2005, 10:38)
Дик, в зависимости от ...
GetItemPossessor(oItem); - вернуть владельца конкретного предмета. В качестве предмета, по-моему, можно указать тот предмет, который он получает в данный момент.
Если сингл, то вообще просто: GetFirstPC();
ну и т.п.
GetNearestCreature(...); и значение выборки сделать "PLAYER_CHAR_IS_PC"

хм.. Тигра, не, тут проще. Каа верно сказал, глянуть надо было в Лексиконе.
Вообще тут технология была проста: набиваем в поиске функций Acquir и получаем это:
Neverwinter Script Source
// Use this in an OnItemAcquired script to get the item that was acquired.
// * Returns OBJECT_INVALID if the module is not valid.
object GetModuleItemAcquired()

// Gets the object that acquired the module item.  May be a creature, item, or placeable
object GetModuleItemAcquiredBy()

// Use this in an OnItemAcquired script to get the creatre that previously
// possessed the item.
// * Returns OBJECT_INVALID if the item was picked up from the ground.
object GetModuleItemAcquiredFrom()

// in an onItemAcquired script, returns the size of the stack of the item
// that was just acquired.
// * returns the stack size of the item acquired
int GetModuleItemAcquiredStackSize()

все, что надо.
Dik Morris
Установил, NWN + SoU + HotU, пропатчил с помощью критикала 1.66, до 1.66.
Вопрос, после этого некоторые буквы превратились в каракули (в частности в редакторе скриптов, при сохранении, скрипта, и при создании НПС (характеристики))
ЗЫ: Возможно, вопрос и глупый но тем не менее не знаю как быть.
********************
AliceDiren спасибо! Щас все в норме!
Вообще, я догадывался что конфликт именно в шрифтах, но честно сказать боялся лезть туда.
Имеется печальный опыт... biggrin.gif
*********************
QUOTE
Или я не опнял о чем ты.

Дык, я вообще то все оч. подробно расписал wink.gif
-fenix-
Dik Morris, а патч дамбо пробовал заново запускать? Или я не опнял о чем ты.
AliceDiren
Dik, помоему тебе нужно просто поменять настройки шрифтов. Там по умолчанию стоит Courier New. Поставь обычный Courier
Vitalist
Что-то не хочет работать одна бандура: есть диалог с NPC, там шесть вопросов и несколько вариантов ответа (подобное было, может кто помнит мою "загадку"). В конце две фразы - обычная и появляющаяся при правильных ответах. На правильный ответ вещаю сие:
CODE
void main()
{

   object oPC = GetPCSpeaker();
   SetLocalInt(oPC, "ZAG", GetLocalInt(oPC, "ledi") + 1);
}

На появляющейся фразе вот это:
CODE
int StartingConditional()
{
   object oPC = GetPCSpeaker();

   if (GetLocalInt(oPC, "ledi") == 6)
       return TRUE;
   return FALSE;
}

А если игрок не угадывает, то на последнюю фразу такой:
CODE
void main()
{
object oPC = GetPCSpeaker();
DeleteLocalInt(oPC, "ledi");
}

Дык вот, проблема в том, что при правильных ответах нужная фраза не появляеться! Из-зи чего?
Лито
Dik Morris,при переходе на 1.66 стирается оверрайд, а следовательно и русские шрифты + патчить надо с оригинальным английским .тлк файлом. А может действительно просто поменять настройки шрифтов.
Lex
QUOTE (Vitalist @ Nov 10 2005, 20:06)
SetLocalInt(oPC, "ZAG", GetLocalInt(oPC, "ledi") + 1);

QUOTE (Vitalist @ Nov 10 2005, 20:06)
if (GetLocalInt(oPC, "ledi") == 6)

вот тебе расхождение. Ты не в ту локалку накапливаешь ответы. Накапливай в "ledi"
а ты некой "Заг" присваиваешь "леди"+1.. накомпления нет
Master Wu
Задаю ОЧЕНЬ глупый вопрос, но тем не менее ответа не нашел. КАК подключить хак к создаваемому модулю (загрузить из него все плейсиблы, портреты и т. д.). Ну ламер я, что поделать swoon.gif
AliceDiren
Master Wu, в меню Редактировать\Модульные св-ва. На закладке Настройки пользователя добавляй хаки smile.gif
Лито, а зачем нужен оригинальный .tlk, если Dik патчил CriticalRebuild'ом? И 1.66 ребил не стирает override. Он его бэкапит и оригинал оставляет в порядке. Я сама засомневалась и специально проверила.
Master Wu
To AliceDiren:
Респект! Нда, а я все же ламер, мог ведь и сам найти... Еще раз Респект.
Ashram
Есть такой вопрос:
Я написал скрипт смерти игрока, который переносит его в фугу, а на месте остается тело и вещи. Как можно сделать, чтобы при воскрешении (использовании на тело) игрок возвращался из фуги, именно тот игрок который умер? Предполагаю что нужно как-то привязать ID игрока к трупу, но не понимаю как. Скрипт для мультиплеера.
-fenix-
Ashram, ПС находятся по имени. Вот функция для получения имени
Neverwinter Script Source
string GetPCPlayerName(object oPlayer)

Значит вешаем на тело локалку с именем умершего ПС, а при воскрешении находим игрока с нужным именем.
Ashram
Спасибо.
AliceDiren
Можно я тоже скажу мяу?
-fenix-, все равно могут быть глюки имхо.
Ashram, в "базе скриптов", по-моему, есть один интересный скрипт, он помечает игроков уникальными номерами (как раз для мультиплеера написан).
Daemonix
А что, ActionJumpToObject переносит игрока только к объеку, который расположен в данной локе? Как же мне тогда джампнуть перса к объекту в другой локе?
-fenix-
QUOTE

ActionJumpToObject()

The calling object will be relocated to the position of oTarget (or as near as possible). This function will work within or across area borders.


Вот нужные функции
Neverwinter Script Source
void JumpToLocation(location lDestination)

location Location(object oArea, vector vPosition, float fOrientation)

object GetArea(object oTarget)

vector GetPosition(object oTarget)

float GetFacing(object oTarget)

Lex
QUOTE (Daemonix @ Nov 15 2005, 02:07)
А что, ActionJumpToObject переносит игрока только к объеку, который расположен в данной локе? Как же мне тогда джампнуть перса к объекту в другой локе?

ты бредишь. К любому объекту.
QUOTE (AliceDiren @ Nov 14 2005, 22:41)
Можно я тоже скажу мяу?
-fenix-, все равно могут быть глюки имхо.
Ashram, в "базе скриптов", по-моему, есть один интересный скрипт, он помечает игроков уникальными номерами (как раз для мультиплеера написан).

угу. 100% согласен. По именам не канает. Надо делать индексацию в любом случае.
Daemonix
QUOTE
ты бредишь. К любому объекту.

Блин, странно. Если так, то почему скрипт не джампает перса к вэйпоинту в другой локе? Или вэйпоинты - не объекты? Скрипт-то компилируется, а не пашет...
Neverwinter Script Source
void main()
{
object oWP = GetObjectByTag("WP_kld");
ActionJumpToObject(oWP, 1);
}

Это в строке (персовской) диалога.
Dik Morris
У тебя прыгает сам НПС.
Как я понял тебе нужно чтобы джампился игрок, вот вешай на строчку в диалоге:
Neverwinter Script Source
void main()
{
object oPC = GetPCSpeaker();
object oWP = GetObjectByTag("ТАГ ТОЧКИ");
AssignCommand(oPC, ActionJumpToObject(oWP));
}

QUOTE (Dik Morris @ Nov 15 2005, 14:27)
У тебя прыгает сам НПС.

точнее поинт.
*********************
В смысле поинт?! Скрипт стоит, в диалоге.
QUOTE (Dik Morris @ Nov 15 2005, 14:27)
object oPC = GetPCSpeaker();

определять игрка нужно согласно месту, где стоит скрипт. Спикер может не сработать.
*********************
QUOTE
определять игрка нужно согласно месту, где стоит скрипт. Спикер может не сработать.

QUOTE
Это в строке (персовской) диалога.

Лекс, ты видать не заметил wink.gif
yudgi
Всем привет. Ребята помогите пожалуйста. Ситуацияя такая: РС разговаривает с драконом после чего дракон исчезает, я на последнюю ветку в диалоге повесила такой скрипт
Neverwinter Script Source
void main()
{
DestroyObject(OBJECT_SELF);
effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_M);
}

Дракон исчезает, но без визуальных эффектов. Как добавить визуальные и звуковые эффекты? Спасибо.
Dik Morris
Используя функции:
Neverwinter Script Source
// Apply eEffect to oTarget.
void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f)

Neverwinter Script Source
// * Create a Visual Effect that can be applied to an object.
// - nVisualEffectId
// - nMissEffect: if this is TRUE, a random vector near or past the target will
//   be generated, on which to play the effect
effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE)

+ Константы визуальных эффектов (эффекты просто визуальные, они не наносят урона, не повышают навыки, они просто для красоты) Начинаются с букв: VFX (глянь в фильтре констант.)
Вот простой пример использования:
Neverwinter Script Source
void main()
{
object oDrakon = GetObjectByTag("ТАГ ДРАКОНА");
/*Определяем того на кого хочем наложить эффект, в данном случаее нам поможет фунция:GetObjectByTag. Ну, а если скрипт в диалоге, то все упрощается, можешь просто заменить: object oDrakon=OBJECT_SELF; или еще проще OBJECT_SELF (конечно в ApplyEffectToObject)
*/

effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_M);
/*Определяем эффект.
Название виз. эффекта начинаются со слов VFX_
*/

ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oDrakon);
/*Налаживаем эффект: DURATION_TYPE_INSTANT - Мгновенно налаживаем, а можно DURATION_TYPE_PERMANENT, DURATION_TYPE_TEMPORARY (временно или бесконечно)
Далее: eVis это сам эффект который мы налаживаем (выше мы его определили);
oDrakon тот на кого мы налаживаем эффект (как я писал можно заменить и просто: OBJECT_SELF)
*/

}

Если ты хочешь налажить на НПС НЕ визуальный эффект т.е настоящий (повысить силу, увеличить класс брони) то смотри в фильтре, фун-ции начинающиеся со слов Effect.
*********************
Ну, а вот конкретный ответ на твой вопрос:
Neverwinter Script Source
void main()
{
effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_M);
ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,OBJECT_SELF);
DestroyObject(OBJECT_SELF);
}

PS: ты просто определила эффект но забыла его наложить.
*********************
Фух, ну я и размахнулся pardon.gif
Народ но ведь надо же человеку обьяснить, а то обойдется одним скриптом.
AliceDiren
Dik Morris, чуть-чуть не так, помоему. smile.gif эффект накладывает сам объект, который ты уничтожаешь. Поэтому последнюю строчку надо чуть сдвинуть во времени.
Neverwinter Script Source
void main()
{
effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_M);
ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,OBJECT_SELF);
DelayCommand(2.0, DestroyObject(OBJECT_SELF));//например так smile.gif
}
-fenix-
Так как Destroy стоит после наложения эффекта, то эффект наложится, просто увидеть мы успеем одну вспышку. И вот чтобы полностью увидеть эффект и можно время увеличить на Destroy.

QUOTE (yudgi @ Dec 4 2005, 11:07)
Как добавить звуковые эффекты?

Neverwinter Script Source
PlaySound(string sSoundName)
Lex
QUOTE (AliceDiren @ Dec 4 2005, 20:48)
DelayCommand(2.0, DestroyObject(OBJECT_SELF));//например так smile.gif

точнее DestroyObject(OBJECT_SELF,2.0);
+ можно наложить не на object, а на location. В данном случае это кажется более предпочтительным. (дейстрой можно сдвинуть всего на 0.2 чтобы постановка визуалки успела сработать.. ну или ставить визуалку через игрока AssignCommand(GetPCSpeaker(),..)
Master Wu
Такой вопрос. Можно ли как-то заставить появившихся гвардов бежать к ПС и атаковать только его (в пределах одной локи),где бы и как бы далеко от них он нибыл, а не стоять и ждать, пока он подойдет ближе.

To AliceDiren:
Спасибо.

Не знаю, может я туплю, но противники (НПС) все равно реагируют на меня только когдя я подхожу к ним в зону прямой видимости. А мне нужно несколько иное. Нужно чтобы они бежали к ПС вне зависимости от того, насколько он далеко от них.
AliceDiren
Этот кусочек кода заставит npc атаковать ближайшего персонажа управляемого игроком
Neverwinter Script Source
object oAttacker = ... здесь определяешь своего npc
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
AssignCommand(oAttacker, ActionAttack(oPC));

yudgi
Ребята спаибо, что обьяснили. Dik Morris ты упоминал модуль Lexa не подскажешь как называется?
Dik Morris
QUOTE
Dik Morris ты упоминал модуль Lexa не подскажешь как называется?

AdvVFXBrowser находится в разделе файлы -> Aurora Toolset (самый первый)
Также некоторые эффекты, рисунками предоставлены в лексиконе. yes.gif
Master Wu
Вышеприведенный код нужно чуток "обработать" и поставить в соответствующий слот. (например onEnter локации)
QUOTE
object oAttacker = ... здесь определяешь своего npc

Здесь тебе поможет функция:
Neverwinter Script Source
// Get the nNth object with the specified tag.
// - sTag
// - nNth: the nth object with this tag may be requested
// * Returns OBJECT_INVALID if the object cannot be found.
// Note: The module cannot be retrieved by GetObjectByTag(), use GetModule() instead.
object GetObjectByTag(string sTag, int nNth=0)




LEX
QUOTE (Dik Morris @ Dec 5 2005, 11:54)
AdvVFXBrowser находится в разделе файлы -> Aurora Toolset (самый первый)

тока это не мой smile.gif
************
shok.gif Тоестькак?! shok.gif
Ну, а если серьезно то я видать попутал с другими константами smile.gif
Если не ошибаюсь твой с констн. анимации yes.gif

LEX: да, мой про анимацию. COA 1.30
yudgi
Приветик. Ребята вопросик появился. Кажется на него уже отвечали так, что если, что просто скажите где. Вопрос такой: нужно заставить ПС следовать за НПС.
Dik Morris
Cмотри, в базе скриптов там есть отличный скрипт...
***************
А если лень глядеть, бери вот этот: (он попроще pardon.gif)
Neverwinter Script Source
void main()
{
object oPC = GetPCSpeaker();
//Определяем игрока. Сработает если скрипт стоит в диалоге.
//А если нет то можно юзать функ-ции:
//GetEnteringObject(), GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); и т.п...
object oNPC= OBJECT_SELF;
//Это сам НПС (опять таки подействует если скрипт стоит в диалоге)
if (GetLocalInt(OBJECT_SELF, "FOLLOW")==1)
return;
//Проверка. Если локалка FOLLOW равна 1 то ничего не произойдет.
//Можно удалить если хочешь чтобы НПС опять следовал за игроком, после диалога.
AssignCommand(oNPC, ActionForceFollowObject(oPC, 1.0f));
//Заставляем НПС следовать за игроком. 1.0f - это дистанция на которой НПС должен идти за игроком.
//oPC --- это наш игрок (выше мы его определили)
SetLocalInt(OBJECT_SELF,"FOLLOW",1);
//Устнв. локалку.
//Можно удалить если хочешь чтобы НПС опять следовал за игроком, после диалога.
}
Апельсинов
Здравствуйте, дорогие друзья. Во-первых всех благодарю, с помощью вашего ресурса учусь делать скрипты и накопились некоторые вопросы.

1. Простой вопрос. Мало где описывается про то, как создаются-удаляются локальные переменные.
На сколько я понимаю есть чисто локальные переменные, которые удаляются после прохода скрипта (определяются int,float и т.д. , а есть такие, которые остаются с объектом (определяются SetLocalVar,SetLocalFloat и т.д.). Так вот на счет вторых: много ли места в ОЗУ могут занимать они при неправильном использовании? Если да, как и когда их нужно удалять.

2. Еще один простой вопрос:
Хотел создать ПУСТУЮ таверну со стенками, но как не стирай, все равно редактор добавляет галимую статику. А на нее очень трудно что-то весить.
Можно ли как-то создать пустую комнату со стенками?

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

4. Я делаю Минишард - такую демо-версию для опробования разных скриптов. Решил сделать реалистичную таверну. А что там самое главное? Нужно уметь правильно садиться и вставать со стульев. Использую следующий скрипт (опубликован в скриптах 2_advanced):
Neverwinter Script Source
void main()
{
    object oPC = GetLastUsedBy();
    object oChair = OBJECT_SELF;

    if(GetIsObjectValid(oChair) && GetIsObjectValid(oPC))
    {
        object oSurf = GetLocalObject(oChair, "surf");

        if(GetIsObjectValid(oSurf))
        {
            object oSitter = GetSittingCreature(oSurf);

            if(!GetIsObjectValid(oSitter) || GetArea(oSitter) != GetArea(oChair))
                DestroyObject(oSurf);
            else
                return;
        }

        vector vSurf = GetPosition(oChair);
        vSurf.z = 0.0;

        location lSurf = Location(GetArea(oChair), vSurf, GetFacing(oChair));

        object oNewSurf = CreateObject(OBJECT_TYPE_PLACEABLE, "sittingsurface", lSurf, FALSE);

        SetLocalObject(oChair, "surf", oNewSurf);

        AssignCommand(oPC, ActionSit(oNewSurf));
    }
}

Он поворачивает сидящего в то направление, куда смотрит стул.\
ВОПРОС №1:
НО как грамотно сделать, чтобы вставать с него? Когда встаешь - он просто появляется рядом со стулом, идет куда указал, а потом иногда все-же срабатывает анимация встать! Выгладит не очень.
ВОПРОС №2:
Нужно ли делать проверку, на то сидит ли кто-то на стуле? Если да, хранить переменную, как локальную стула? Если да, как сделать, что бы она меняла значение, когда ПС или НПС вставал?(эта переменная пригодилась бы и для других целей)
ВОПРОС №3:
surf - это чисто локальная переменная стула? Она надеюсь не создается дубликатами каждый раз, когда садишься?
NedWarN
Привет.
1.
Наскока я помню у меня багов небыло, значит немного.
Но с обьектов локалку удаляет вроде функцыя DeleteLocalLocation
Я ещё использовал: SpawnScriptDebugger
2.
Незя Так-уш устроен Тайл таверы. Качай ХакПаки или 3ДМакс.
3.
Свойства Звуков/Позиционное/Воспроизведение в Оп. точке.
Я просто запихивал сырой WAV в Overred/
//-------
ВОПРОС №1:
???
Баги игры или тормоза. Незнаю.
ВОПРОС №2:
Я непонел тебе надо, если на стуле ктото сидит то на него нельзя сесть?
Дак это помойму и без скриптов так. в крайнем случае снять галочку "Используемый" скриптом.
ВОПРОС №3:
Не она создаётся лиш один раз когда игрок Юзает стул.
yudgi
Привет. Я попробовала катсцену написать, в принципе полчилось. Только она прошла буквально за 1 секунду я даже увидеть ничего не успела. Подскажите как время установить,чтобы она нормально шла и подскажите пожалуйста ошибки и недочёты в моём скрипте:
Neverwinter Script Source
void main()
{
object oPC = GetEnteringObject();
object oFriam = GetNearestObjectByTag("FRIAM");
object oDoor = GetNearestObjectByTag("friam_home");
object oFriamPoint = GetNearestObjectByTag("FRIAM_WP");
{
SetCutsceneMode(oPC,TRUE);
AssignCommand(oPC, ClearAllActions());
AssignCommand(oFriam, ClearAllActions());
ActionDoCommand(AssignCommand(oPC, SetCameraFacing(210.0,30.0,45.0,CAMERA_TRANSITION_TYPE_SLOW)));
ActionDoCommand(SetCutsceneMode(oPC,FALSE));
ActionDoCommand(AssignCommand(oFriam, ActionStartConversation(oPC, "friam")));
SetCutsceneMode(oPC,TRUE);
ActionMoveToObject(GetObjectByTag("FRIAM_WP"));
ActionOpenDoor(oDoor);
ActionDoCommand(DestroyObject(oFriam));
ActionDoCommand(SetCutsceneMode(oPC,FALSE));
}
}
AliceDiren
yudgi, есть функция
Neverwinter Script Source
DelayCommand(float fDelay, action aActionToDo)

она поможет smile.gif
я так поняла, что ты хотела, чтобы началась катсцена, npc поговорил с игроком, и как бы ушел в дверь? Это можно написать примерно так:
Neverwinter Script Source
void main()
{
object oPC = GetEnteringObject();
object oFriam = GetNearestObjectByTag("FRIAM", oPC);

SetCutsceneMode(oPC,TRUE);
DelayCommand(0.1, AssignCommand(oPC, ClearAllActions()));
DelayCommand(0.1, AssignCommand(oFriam, ClearAllActions()));
DelayCommand(0.2, ActionDoCommand(AssignCommand(oPC, SetCameraFacing(210.0,30.0,45.0,CAMERA_TRANSITION_TYPE_SLOW))));
DelayCommand(0.3, AssignCommand(oFriam, ActionStartConversation(oPC, "friam"))));
}

а на окончание диалога ставишь вторую часть скрипта
Neverwinter Script Source
void main()
{
object oFriam = GetNearestObjectByTag("FRIAM", oPC);
object oDoor = GetNearestObjectByTag("friam_home", oPC);

AssignCommand(oFraim, ActionForceMoveToObject(oDoor));
AssignCommand(oFraim, ActionPlayAnimation(13, 1.0, 3.0)); //анимашка открывания замков
AssignCommand(oFraim, ActionOpenDoor(oDoor));
AssignCommand(oFraim, ActionDoCommand(SetCutsceneMode(oPC,FALSE)));
AssignCommand(oFraim, ActionDoCommand(DestroyObject(oFriam)));
}

blush.gif не судите строго, в редакторе не проверяла smile.gif но должно работать

QUOTE
Но с обьектов локалку удаляет вроде функцыя DeleteLocalLocation

Эта функция удаляет только локальные переменные типа location, для остальных есть соответствующие DeleteLocal* и там Float\Int\Object...
yudgi
Спасибо я попробую thank_you.gif
Добавлено в [mergetime]1134023027[/mergetime]
AliceDiren Возникла проблемка в первом скрипте NPC нехочет разговаривать с игроком просто стоит и всё.
Lex
QUOTE (Апельсинов @ Dec 8 2005, 02:01)
Так вот на счет вторых: много ли места в ОЗУ могут занимать они при неправильном использовании? Если да, как и когда их нужно удалять.

немного. Удалять как, тебе Алиса сказала.
QUOTE (Апельсинов @ Dec 8 2005, 02:01)
2. Еще один простой вопрос:
Хотел создать ПУСТУЮ таверну со стенками, но как не стирай, все равно редактор добавляет галимую статику. А на нее очень трудно что-то весить.
Можно ли как-то создать пустую комнату со стенками?

на волте глять TC Interior. Там есть пустые комнаты.
никуда от этого не денешься. (могу объяснить, откуда этот эффект вставания после того, как уже отошел)
QUOTE (Апельсинов @ Dec 8 2005, 02:01)
Нужно ли делать проверку, на то сидит ли кто-то на стуле? Если да, хранить переменную, как локальную стула? Если да, как сделать, что бы она меняла значение, когда ПС или НПС вставал?(эта переменная пригодилась бы и для других целей)

в скрипте эта проверка уже есть.
QUOTE (Апельсинов @ Dec 8 2005, 02:01)
surf - это чисто локальная переменная стула? Она надеюсь не создается дубликатами каждый раз, когда садишься?

это локальная переменная, что хранится на стуле. Каждый раз, когда кто-то садится, меняется ее значение. Дубликатов нет.
Добавлено в [mergetime]1134024762[/mergetime]
QUOTE (AliceDiren @ Dec 8 2005, 07:44)
object oFriam = GetNearestObjectByTag("FRIAM", oPC);

можно просто object oFriam = OBJECT_SELF;
QUOTE (yudgi @ Dec 8 2005, 08:05)
AliceDiren Возникла проблемка в первом скрипте NPC нехочет разговаривать с игроком просто стоит и всё.

на чем у тебя стоит скрипт этот? (который Алиса написала)
AliceDiren
yudgi, ты точно уверена, что есть такой разговор "friam" и что он именно так называется? Попробуй просто
Neverwinter Script Source
DelayCommand(0.3, AssignCommand(oFriam, ActionStartConversation(oPC))));

Лучше делать так, а само название разговора ставить в свойствах npc smile.gif
Апельсинов
QUOTE (NedWarN @ Dec 8 2005, 02:47)
Привет.
1.
Наскока я помню у меня багов небыло, значит немного.
Но с обьектов локалку удаляет вроде функцыя
3.
Свойства Звуков/Позиционное/Воспроизведение в Оп. точке.
Я просто запихивал сырой WAV в Overred/
//-------
ВОПРОС №1:
???
Баги игры или тормоза. Незнаю.
ВОПРОС №2:
Я непонел тебе надо, если на стуле ктото сидит то на него нельзя сесть?
Дак это помойму и без скриптов так. в крайнем случае снять галочку "Используемый" скриптом.

На счет WAV - ставится, но только не как 3D,а это не интересно.

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