Batkom
Jul 25 2005, 03:29
Начал делать систему лута, работает следующим образом, на месте трупа создается спец.контейнер (инвизибл плесбл) юзаемый и с инвентарем, а там уже создаются рандомно сокровища используя стандартный скрипт, можно ли сделать так, чтобы при этом труп монстра оставался некоторое время, грубо говоря всем монстрам(включая стандартных) увеличить время разложения, а все дополнительные итимы(то, что вызывается с помощью функции craft_drop_items) перенести в контейнер
Добавлено в 04:45
Нашел как замедлить разложение трупа
Neverwinter Script Source |
AssignCommand(OBJECT_SELF, SetIsDestroyable(FALSE, FALSE, FALSE)); DelayCommand(300.0, AssignCommand(OBJECT_SELF, SetIsDestroyable(TRUE, FALSE, FALSE))); |
Дело в том, что помимо моей системы лута мне также нужна функция craft_drop_items
Но тогда придется ждать 5 минут, пока труп исчезнет и даст взять мешочек с остальным бредом(кровь из дракона, зуб из бодака, палец из скелета и тд и тп)
Вот кусок скрипта смерти моба на настоящий момент
Neverwinter Script Source |
if (!((GetClassByPosition(1, OBJECT_SELF)==CLASS_TYPE_ANIMAL)||(GetClassByPosition(1, OBJECT_SELF)==CLASS_TYPE_VERMIN)||(GetIsPC(oKiller)== FALSE))) { object oTreasure = CreateObject(OBJECT_TYPE_PLACEABLE, "ресреф контейнера", GetLocation(OBJECT_SELF)); /*
>>тут уясняется какие треасуры при каких условиях создавать в контейнере, но этот текст длинный и в данном случае бесполезный<<
*/ AssignCommand(OBJECT_SELF, SetIsDestroyable(FALSE, FALSE, FALSE)); DelayCommand(300.0, destroy(oTreasure)); //эта функция дестроит контейнер и все предметы в нем DelayCommand(300.0, AssignCommand(OBJECT_SELF, SetIsDestroyable(TRUE, FALSE, FALSE))); } craft_drop_items(oKiller); //вот собсно как переместить итемы создаваемые этой функцией в контейнер? |
Добавлено в 04:58
Вроде бы нашел решение
в скрипте x2_inc_compon
в воиде функции
там где определяется object oSelf нужно заменить на
object oSelf = GetNearestObjectByTag("тег контейнера", OBJECT_SELF, 1);
Пока на практике все это не проверял, но работать поидее должно.
Zirrex
Jul 25 2005, 08:59
Batkom а вот этот кусок кода зачем?
Neverwinter Script Source |
if (!((GetClassByPosition(1, OBJECT_SELF)==CLASS_TYPE_ANIMAL)||(GetClassByPosition(1, OBJECT_SELF)==CLASS_TYPE_VERMIN)||(GetIsPC(oKiller)== FALSE))) |
Особенно мне непонятно, что делает тут условие, что это не игрок. Зачем? Ты его на скрипт смерти модуля что ли ставишь? И с классами не надо. Лучше уж так:
Neverwinter Script Source |
if (GetRacialType(OBJECT_SELF) == RACIAL_TYPE_ANIMAL || GetRacialType(OBJECT_SELF) == RACIAL_TYPE_ABERRATION || GetRacialType(OBJECT_SELF) == RACIAL_TYPE_MAGICAL_BEAST || GetRacialType(OBJECT_SELF) == RACIAL_TYPE_BEAST || GetRacialType(OBJECT_SELF) == RACIAL_TYPE_VERMIN) { |
Код переноса всех вещей в контейнер:
Neverwinter Script Source |
object oLootEQ = GetFirstItemInInventory(oDeadNPC);
while (GetIsObjectValid(oLootEQ)) { AssignCommand(oTreasure, ActionTakeItem(oLootEQ, OBJECT_SELF)); oLootEQ = GetNextItemInInventory(oDeadNPC); } |
Просто, тебе надо все крафтовые вещи создавать вначале не у убийцы "oKiller", а у жертвы "OBJECT_SELF".
Посмотри еще разные системы лута, набрав тут
Neverwinter Vault слово "loot".
Dik Morris
Jul 25 2005, 09:10
Daemonix!
Это не так уж сложно как кажется большинству новичков, смотри:
1) - Создаешь своего персонажа (ну с кем диалог должен быть непрерывным)
2) - Вокруг его рисуешь триггер ( не очень большой но и не очень малой)
3) - На onEnter тригерра вешаешь вот этот скрипт (предварительно посмотри скрипт, и поставь в нем тэг)
Neverwinter Script Source |
void main() { object oPC = GetEnteringObject(); object oNPC = GetObjectByTag("Тэг твоего НПС");
SetCutsceneMode(oPC);
AssignCommand(oNPC, ClearAllActions()); AssignCommand(oPC, ClearAllActions()); ActionDoCommand(AssignCommand(oPC, SetFacingPoint(GetPosition(oNPC)))); ActionDoCommand(AssignCommand(oNPC, SetFacingPoint(GetPosition(oPC)))); ActionDoCommand(AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_FIREFORGET_GREETING, 1.0,6.6f))); ActionDoCommand(AssignCommand(oPC, ActionStartConversation(oNPC)));
if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") == 1) return; SetLocalInt(OBJECT_SELF,"TRIGGER",1);
} |
Тогда НПС начнет диалог... НО! На последнюю ветку в диалоге во кладку СОВЕРШЕНЫ ДЕЙСТВИЯ засунь вот этот скриптик

Neverwinter Script Source |
void main() { object oPC = GetPCSpeaker(); object oNPC = GetObjectByTag("Тэг твоего НПС"); ActionWait(3.5); ActionDoCommand(AssignCommand(oNPC, ActionDoCommand(SetCutsceneMode(oPC, FALSE)))); } |
Все...
-fenix-
Jul 25 2005, 10:01
Dik Morris, проверку и установку переменной наверное надо делать в начале!
А то бедных неступившых неписей колбасит, а потом оказывается, что они тут не причем.
Neverwinter Script Source |
void main() { object oPC = GetEnteringObject(); object oNPC = GetObjectByTag("Тэг твоего НПС");
if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") == 1) { return; }
{ SetLocalInt(OBJECT_SELF,"TRIGGER",1); SetCutsceneMode(oPC);
AssignCommand(oNPC, ClearAllActions()); AssignCommand(oPC, ClearAllActions()); ActionDoCommand(AssignCommand(oPC, SetFacingPoint(GetPosition(oNPC)))); ActionDoCommand(AssignCommand(oNPC, SetFacingPoint(GetPosition(oPC)))); ActionDoCommand(AssignCommand(oNPC, ActionDoCommand(AssignCommand(oNPC,ActionPlayAnimation (ANIMATION_FIREFORGET_GREETING, 1.0,6.6f))); ActionDoCommand(AssignCommand(oPC, ActionStartConversation(oNPC))); } } |
И вопросик, чем открыть расширение erf?
Daemonix
Jul 25 2005, 10:30
Спасибо
Dik Morris, спасибо
-fenix-!
Я в ближайшее время попробую. А пока что пробую сделать НЕЛИНЕЙНЫЙ сюжет, с ветками, хотя конечный результат всегда один и тот же...
Dik Morris
Jul 25 2005, 10:48
Daemonix !
QUOTE |
Я в ближайшее время попробую. А пока что пробую сделать НЕЛИНЕЙНЫЙ сюжет, с ветками, хотя конечный результат всегда один и тот же... |
Хм... А вот как НЕЛИНЕЙНЫЙ сюжет то может быть с одним и тем же результатом?
Ведь нелинейность и заключается в том, что результаты то разные! Свобода, так сказать...
Это конечно хорошо, но вот свой сюжет можешь, пришлешь на мыло? Просто глянуть охота, да заодно и подсказать что.
Мыло:
DikMorris@yandex.ru
Daemonix
Jul 25 2005, 12:24
Dik Morris!
Да, кстати, хорошая идейка! Обязательно пришлю. Хотя я и до конца не додумал. Но пришлю что есть.
Добавлено в [mergetime]1122290425[/mergetime]
Кстати вот, проверь почтарь. Я вроде уже пререслал.
QUOTE (Dik Morris @ Jul 25 2005, 13:48) |
Это конечно хорошо, но вот свой сюжет можешь, пришлешь на мыло? Просто глянуть охота, да заодно и подсказать что. |
QUOTE (Daemonix @ Jul 25 2005, 15:24) |
Да, кстати, хорошая идейка! Обязательно пришлю. Хотя я и до конца не додумал. Но пришлю что есть. |
Так рождаются новые команды
Кхе Кхе... Молодежь! Тут вам не форум MTV, так что еще будете тут спамить и флудить получите по затылку. Можете не отвечать, примите к сведению.
Batkom
Jul 25 2005, 15:27
просто у меня лут зависит от уровня убийцы, а если это ловушка или фам, то уже совсем нето
Добавлено в [mergetime]1122298155[/mergetime]
-fenix- erf это файлы с ресурсами, создаются\открываются с помощью файл\импорт-експорт в тулсете
они не содержат моделек или еще чего, они содержат только спиок характеристик, координат, еще чего или скрипт. Экспортировать\импортировать в 1.66 можно все что душе угодно, от локаций до конфигурации магазинов.
Vitalist
Jul 25 2005, 19:06
В скриптах я разбираюсь не больше, чем в уголовном кодексе Мозамбика, поэтому скажите, что нужно нацарапать, чтоб перс появился в начале игры в нужной мне экипировке (к примеру, в руках одно оружие)? Заранее благодарен.
Batkom
Jul 25 2005, 20:57
Сенк, все сделал, теперь все отлично работает.
Теперь решил написать гильдию убийц, которая позволяет заказывать одних игроков другим.
Приходит игрок, говорит ниписю что хочет заказать чара, появляется набор ответов с именами игрков.
Вот собственно как вставить список игроков в диалог
-fenix-
Jul 25 2005, 21:16
QUOTE (Vitalist @ Jul 25 2005, 19:06) |
В скриптах я разбираюсь не больше, чем в уголовном кодексе Мозамбика, поэтому скажите, что нужно нацарапать, чтоб перс появился в начале игры в нужной мне экипировке (к примеру, в руках одно оружие)? Заранее благодарен |
Посмотри в Базе скриптов вот этот пост "Лито Jan 27 2005, 21:00".
QUOTE (Batkom @ Jul 25 2005, 20:57) |
Теперь решил написать гильдию убийц, которая позволяет заказывать одних игроков другим. Приходит игрок, говорит ниписю что хочет заказать чара, появляется набор ответов с именами игрков. Вот собственно как вставить список игроков в диалог |
Тебе тоже туды
СЕРИЯ "СКРИПТЫ СТАРОЙ БАЗЫ"
ЦИКЛ "СКРИПТЫ ДЯДЮШКИ MILEZ'А"
Zirrex
Jul 25 2005, 21:47
Batkom это не так просто, как кажется на первый взгляд. Если ты когда-нибудь видел посохи DMFI, то там есть подобный скрипт. Чтобы его тут продемонстрировать, страницы не хватит. Вкратце, там с помощью токенов создается нужный диалог, и потом, выбирая определенный пункт меню, можно делать что угодно с тем персонажем, который выбран. Посмотри на Ваулте этот набор. Набери в поиске слово "DMFI".
Batkom, а ты представь что играют игроков 60-70...
Аваддон
Jul 26 2005, 04:53
DEM А ты представь что NWN сервер больше 60ти игроков не тянет

Можно разбить на 6 страниц по 10 игроков в алфавитном порядке.
Zirrex
Jul 26 2005, 08:34
Аваддон кто тебе сказал, что он не тянет больше 64 человек? Я несколько раз натыкался через GameSpy на сервера, которые поддерживают 96 человек, и даже были моменты, когда такие сервера оказывались заполнены под завязку. Наши сервера может быть и не тянут, но зарубежные, легко.
Что у нас с базой скриптов случилось? Выдает на 2-ой и 3-ей страницах ошибку сервера.
Аваддон, а ты представь что есть один ШАРД, на котором играет больше 100 игроков

Там почти как онлайн игра получилась...
Batkom
Jul 26 2005, 11:31
я и собираюсь делать акцент на массовость
З.Ы. Аваддон спасибо за гильдовую систему, я оттуда много идей почерпнул
Аваддон
Jul 26 2005, 14:57
Zirrex DEM Я не представляю как вы собираетесь сделать ХОРОШИЙ ШАРД. Нелагающий при народе в 40 игроков. Если тока нпс и скрипты к минимуму свести.
Я выдрал из хака модели деревьев, прописал их в 2da файле и сунул в другой хак. Подключил к модулю, а стволы у них - белые, блин, без текстур. об чём тут дело?
Добавлено в [mergetime]1122385767[/mergetime] Хм, забыл совсем... у меня несколько связаных модулей, и мне надо, чтобы непись во втором модуле узнал о смерти непися в первом. как это реализовать?
Добавлено в [mergetime]1122385790[/mergetime] ..... знаю, что вопрос тупой....
balrog
Jul 26 2005, 18:55
QUOTE |
Я выдрал из хака модели деревьев, прописал их в 2da файле и сунул в другой хак. Подключил к модулю, а стволы у них - белые, блин, без текстур. об чём тут дело? |
ТЫ забыл выдрать вместе с деревьями все их текстуры ё моё. Найди в том хаке нужные тебе текстуры и скопируй вместе с деревьями. Текстуры могут быть так *.tag так и *.plt расширения. Советую скачать коли ещё не имеешь НВН Эксплорер с ваулта, он тебе наверняка пригодится и облегнчет труд ешо ни раз.
Vitalist
Jul 26 2005, 19:34
-fenix-, что-то я не нашел там такой даты

. Может так напишите (если можно поподробнее)?
Zirrex
Jul 26 2005, 21:52
Аваддон лично я этого делать не собираюсь, мне хватает на шарде 20-25 человек ежедневно. Просто заметил, что такие шарды существуют.
zmey если только через базу данных, которая будет записывать информацию на одном сервере, и передавать на другой. Как именно это реализовать, я не знаю, ибо подобное не приходилось делать.
QUOTE (zmey @ Jul 26 2005, 19:40) |
Подключил к модулю, а стволы у них - белые, блин, без текстур. об чём тут дело? |
Ищи в модели текстовой, по строкам bitmap. Выдаст все текстуры модели.
-fenix-
Jul 27 2005, 14:36
QUOTE (Vitalist @ Jul 26 2005, 19:34) |
-fenix-, что-то я не нашел там такой даты dntknw.gif . Может так напишите (если можно поподробнее)? |
Он там есть, наверно просто время не то
В любом случае, там кажись для шарда, а для сингла(у тебя ведь сингл?) наверно и так пойдет.
Neverwinter Script Source |
void main() { object oPC = GetEnteringObject(); // это PC object oStore = GetModule(); // это модуль int PCClass = GetClassByPosition(1, oPC); // класс PC
if(GetLocalInt(oStore, "DAL") != 1)// проверка
{ SetLocalInt(oStore, "DAL", 1); object oItem = GetFirstItemInInventory (oPC); while(GetIsObjectValid(oItem)) // чистим инвентарь у PC { DestroyObject(oItem); oItem = GetNextItemInInventory (oPC); } int i=0; while(i<14)// чистим слоты у PC { DestroyObject(GetItemInSlot(i, oPC)); i++; } switch (PCClass) // согласно классу одеваем PC { case CLASS_TYPE_BARBARIAN: { GiveGoldToCreature(oPC, 500); // кол-во золота CreateItemOnObject("ResRef", oPC); // предмет break; } case CLASS_TYPE_BARD: { GiveGoldToCreature(oPC, 500); CreateItemOnObject("ResRef", oPC); break; } case CLASS_TYPE_CLERIC: { GiveGoldToCreature(oPC, 500); CreateItemOnObject("ResRef", oPC); break; } case CLASS_TYPE_DRUID: { GiveGoldToCreature(oPC, 500); CreateItemOnObject("ResRef", oPC); break; } case CLASS_TYPE_FIGHTER: { GiveGoldToCreature(oPC, 500); CreateItemOnObject("ResRef", oPC); break; } case CLASS_TYPE_MONK: { GiveGoldToCreature(oPC, 500); CreateItemOnObject("ResRef", oPC); break; } case CLASS_TYPE_PALADIN: { GiveGoldToCreature(oPC, 500); CreateItemOnObject("ResRef", oPC); break; } case CLASS_TYPE_RANGER: { GiveGoldToCreature(oPC, 500); CreateItemOnObject("ResRef", oPC); break; } case CLASS_TYPE_ROGUE: { GiveGoldToCreature(oPC, 500); CreateItemOnObject("ResRef", oPC); break; } case CLASS_TYPE_SORCERER: { GiveGoldToCreature(oPC, 500); CreateItemOnObject("ResRef", oPC); break; } case CLASS_TYPE_WIZARD: { GiveGoldToCreature(oPC, 500); CreateItemOnObject("ResRef", oPC); break; } } } } |
Можно еще написать, чтоб давл предметы в зависимости от расы или еще чего, как хочешь.
Vitalist
Jul 27 2005, 19:36
-fenix-, мог бы ты ещё написать КУДА мне это вводить? И вот ещё: нужно чтобы просто убралась вся экипировка и инвентарь.
-fenix-
Jul 27 2005, 20:57
QUOTE (Vitalist @ Jul 27 2005, 19:36) |
-fenix-, мог бы ты ещё написать КУДА мне это вводить? |
Кидать это в OnClientEnter модуля.
QUOTE (Vitalist @ Jul 27 2005, 19:36) |
И вот ещё: нужно чтобы просто убралась вся экипировка и инвентарь. |
Тогда оставь только удаление, а раздачу предметов сотри!
Neverwinter Script Source |
void main() { object oPC = GetEnteringObject(); // это PC object oStore = GetModule(); // это модуль int PCClass = GetClassByPosition(1, oPC); // класс PC
if(GetLocalInt(oStore, "DAL") != 1)// проверка
{ SetLocalInt(oStore, "DAL", 1); object oItem = GetFirstItemInInventory (oPC); while(GetIsObjectValid(oItem)) // чистим инвентарь у PC { DestroyObject(oItem); oItem = GetNextItemInInventory (oPC); } int i=0; while(i<14)// чистим слоты у PC { DestroyObject(GetItemInSlot(i, oPC)); i++; } } } |
Zirrex
Jul 27 2005, 21:49
-fenix- если уж совсем верно, то нужно писать так:
Удаление надетых вещей:
Neverwinter Script Source |
int i;
for (i = 0; i < 14; i++) { object oEquip = GetItemInSlot(i, oPC);
if (GetIsObjectValid(oEquip)) DestroyObject(oEquip); } |
И проверять лучше не на переменную, а на функцию определения опыта:
Neverwinter Script Source |
if (!GetXP(oPC)) // т.е. равно 0 { // требуемый код } |
Иначе после каждого рестарта будет все по новой

Но после выполнения всего скрипта надо написать следующее:
Neverwinter Script Source |
if (!GetXP(oPC)) { SetXP(oPC, 1); } |
С золотом можно еще так:
Neverwinter Script Source |
int StartGold = 0;
if (StartGold == 0) { if (GetLevelByClass(CLASS_TYPE_BARBARIAN, oPC)) StartGold = d4(5) * 100; else if (GetLevelByClass(CLASS_TYPE_BARD, oPC)) StartGold = d4(4) * 100; else if (GetLevelByClass(CLASS_TYPE_CLERIC, oPC)) StartGold = d4(4) * 100; else if (GetLevelByClass(CLASS_TYPE_DRUID, oPC)) StartGold = d4(4) * 100; else if (GetLevelByClass(CLASS_TYPE_FIGHTER, oPC)) StartGold = d4(6) * 100; else if (GetLevelByClass(CLASS_TYPE_MONK, oPC)) StartGold = d4(4) * 100; else if (GetLevelByClass(CLASS_TYPE_PALADIN, oPC)) StartGold = d4(5) * 100; else if (GetLevelByClass(CLASS_TYPE_RANGER, oPC)) StartGold = d4(5) * 100; else if (GetLevelByClass(CLASS_TYPE_ROGUE, oPC)) StartGold = d4(6) * 100; else if (GetLevelByClass(CLASS_TYPE_SORCERER, oPC)) StartGold = d4(3) * 100; else if (GetLevelByClass(CLASS_TYPE_WIZARD, oPC)) StartGold = d4(3) * 100; else StartGold = d4(4) * 100; } GiveGoldToCreature(oPC, StartGold - GetGold(oPC)); |
Daemonix
Jul 28 2005, 10:26
У меня тут вопросик возник:
как сделать так, чтобы непись после разговора пошёл и сел на диван и там и сидел?
У меня есть скрипт для дивана
CODE |
void main() { AssignCommand (OBJECT_SELF, ActionSit (GetObjectByTag ("диван"))); } |
Но куда его вставлять?
Добавлено в [mergetime]1122535728[/mergetime]
И еще вопрос:
когда игрок говорит с каким-либо неписем, то камера во время продолжительного разговора ставится немного вправо и назад. А можно ли поменять на свой вкус положение камеры при разговоре?
Dik Morris
Jul 28 2005, 10:37
QUOTE |
Но куда его вставлять? |
На ХерБит ставь...
QUOTE |
У меня тут вопросик возник: как сделать так, чтобы непись после разговора пошёл и сел на диван и там и сидел? |
В строчку диалога на вкладку Совершены Действия поставь вот этот скриптик:
Neverwinter Script Source |
void main() { object oNPC = GetObjectByTag("Тэг НПС"); AssignCommand (oNPC, ActionSit (GetObjectByTag ("Тэг дивана"))); } |
Daemonix
Jul 28 2005, 12:40
Dik Morris!
А ты уверен, что это заработает? Помнишь Нерила? Вот на него я и хочу поставить. Диалог кончается, а вместе с ним и катсцена. И он уходит на диван...
Добавлено в [mergetime]1122543664[/mergetime]
Я имею в виду на хартбите.
-fenix-
Jul 28 2005, 13:37
QUOTE (Zirrex @ Jul 27 2005, 21:49) |
-fenix- если уж совсем верно, то нужно писать так: |
Через for оно конечно нагляднее.
QUOTE (Zirrex @ Jul 27 2005, 21:49) |
И проверять лучше не на переменную, а на функцию определения опыта: |
А если мне не надо давать и 1 опыта в начале!? Ты так жестко это говоришь, типа надо так и ни как иначе.
QUOTE (Zirrex @ Jul 27 2005, 21:49) |
Иначе после каждого рестарта будет все по новой |
Вот не земетил я такого! И после рестарта и после загрузки, все нормально, по второму разу не выдается!
QUOTE (Zirrex @ Jul 27 2005, 21:49) |
С золотом можно еще так: |
Ух, что только мое извращенное

воображение не предумывало с этим золотом (тут перечислять не буду)
QUOTE (Daemonix @ Jul 28 2005, 10:26) |
когда игрок говорит с каким-либо неписем, то камера во время продолжительного разговора ставится немного вправо и назад. А можно ли поменять на свой вкус положение камеры при разговоре? |
На сколько я понимаю, то это не изменить. Можно только в разговоре в кутсценке это отменить и выставить свой наклон.
Vitalist
Jul 28 2005, 13:49
-Fenix-, бАльшое тебе спасибище! Не знаю, что бы вез вас делал...
извиняюсь, что вопросы в разные темы.... - интернет медленный, (ВЫРЕЗАНО ЦЕНЗУРОЙ)!
ежели не жалко, идейку подкиньте, как сделать, чтобы непись шел к случайно выбранному WP из нескольких известных?
Добавлено в [mergetime]1122548275[/mergetime] .............как запретить респаун?
Добавлено в [mergetime]1122548514[/mergetime] .....ссылку на нвн эксплорер, плиз...
QUOTE (zmey @ Jul 28 2005, 13:49) |
ежели не жалко, идейку подкиньте, как сделать, чтобы непись шел к случайно выбранному WP из нескольких известных? |
Используй switch() а в нем Random(int x)
QUOTE (zmey @ Jul 28 2005, 13:49) |
.............как запретить респаун? |
На ondeath модуля функцию PopUpDeathGUIPanel(oPC,FALSE,TRUE,0, sDeathMessage);
QUOTE (zmey @ Jul 28 2005, 13:49) |
....ссылку на нвн эксплорер, плиз... yes.gif crazy.gif |
Zirrex
Jul 28 2005, 19:29
QUOTE |
Вот не земетил я такого! И после рестарта и после загрузки, все нормально, по второму разу не выдается! |
Такое работает только при условии, если переменная сохраняется, и постоянно остается равной 1, даже после рестарта, если же нет, то итог прост, обработка скрипта происходит вновь.
Почему я аргументирую, что надо. Потому что по моему пути этого именно надо, так как переменной нету. По твоему пути надо сохранять переменную. Получается, что одно и тоже.
Daemonix
Jul 28 2005, 22:45
Вот у меня тута недоразумение. Есть такой скрипт.
CODE |
void main() { object oPC = GetPCSpeaker(); object oNPC = GetObjectByTag("neril"); ActionWait(1.5); AssignCommand (oNPC, ActionSit (GetObjectByTag ("nerilhome2_sofa"))); ActionDoCommand(AssignCommand(oNPC, ActionDoCommand(SetCutsceneMode(oPC, FALSE)))); } |
Стоит на последней строке разговора. Непись бежит на диван, но катсцена не кончается почему-то...
А если убрать строку про диван, то всё пашет!
Никто не знает, почему?
Я конечно не скриптёр года, Но может попробуй так?
Neverwinter Script Source |
DelayCommand(SetCutsceneMode(oPC,FALSE)); |
Может и не праильно, тогда извеняюсь
Daemonix
Jul 29 2005, 00:24
Не, Dem, всё равно не пашет..
У меня тут, если не сложно, 2ой вопрос:
используя приведённый выше код непись БЕЖИТ к стулу, сломя голову. А можно ли сделать так, чтобы он просто шёл, а не бежал, как все нормальные люди?
Да.. это даже я знаю

(без обид) Вместо FALSE, ставь TRUE (и наоборот)...
И как всегда говрит Lex:"Зачем даёться кнопка NSS?"
Агрессинг
Jul 29 2005, 03:54
Daemonix
QUOTE |
AssignCommand (oNPC, ActionSit (GetObjectByTag ("nerilhome2_sofa"))); ActionDoCommand(AssignCommand(oNPC, ActionDoCommand(SetCutsceneMode(oPC, FALSE)))); } |
Ты посмотри, у тебя в сите сразу Assing идет. Вставь ActionDoCommand.
ЗЫ
А вообще по мне так удобнее пользоваться Дилеем.
Zirrex
Jul 29 2005, 09:02
А не проще ли вначале подойти к софе, а уж только потом сесть на нее?
Neverwinter Script Source |
void main() { object oPC = GetPCSpeaker(); object oNPC = OBJECT_SELF; object oSofa = GetNearestObjectByTag("nerilhome2_sofa");
ActionWait(1.5); AssignCommand(oNPC, ActionMoveToObject(oSofa, FALSE, 1.0));
// проверка, не сидит ли уже кто-то на софе. if (!GetIsObjectValid(GetSittingCreature(oSofa))) { AssignCommand(oNPC, ActionSit(oSofa)); } ActionDoCommand(SetCutsceneMode(oPC, FALSE)); } |
И не надо никаких задержек, все действия начинаются только тогда, когда заканчиваются предыдущие действия, единственное решение с командой "ActionDoCommand", когда у функции нету такого начала, как "Action".
DEM функция задержки пишется так:
Neverwinter Script Source |
DelayCommand(0.0, SetCutsceneMode(oPC,FALSE)); // где 0.0 - время; |
Daemonix
Jul 29 2005, 15:39
Ну не знаю, Zirrex, не компилирует, ссылаясь на ошибку в строке:
CODE |
AssignCommand(oNPC, ActionMoveToObject(oSofa, FALSE, 1.0); |
-fenix-
Jul 29 2005, 18:36
Daemonix, скобку там забыли.
Neverwinter Script Source |
AssignCommand(oNPC, ActionMoveToObject(oSofa, FALSE, 1.0)); |
Пользуйся кнопкой NSS
Хы, а еще вот тут не хватает
Neverwinter Script Source |
if (!GetIsObjectValid(GetSittingCreature(oSofa ))) |
Ведать в спешке писали
Zirrex
Jul 29 2005, 19:14
Daemonix иногда полезно думать, а не просто копировать, тем более все ошибки редактор выделяет, когда происходит какой-нибудь казус при компиляции. Писал, я, и правда, в спешке, поэтому забыл расставить скобки, но скрипт работает, как надо.
Поправил свое сообщение, чтобы никого не смущало
-fenix-
Jul 29 2005, 21:23
Блин, люди не как не могу понять, как заставить чела скастовать спел на другого чела. Можно через
Neverwinter Script Source |
DelayCommand(165.0, AssignCommand(***, ActionCastSpellAtObject(тут спелл, o***, METAMAGIC_ANY, TRUE, 0))); |
У чела нет умения, но с TRUE он кажись должен скастануть!
И еще, как наложить эффекты.
Я про те для которых нужна точка "выхода", тобишь молнии всякии.
Можно заставить чела их произвести на другого, а то пишу вот так и ни чего
Neverwinter Script Source |
DelayCommand(173.0, AssignCommand(о***, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(тут эффект), o***))); |
Все уже разобрадся в чем дело
Daemonix
Jul 29 2005, 23:22
Zirrex
QUOTE |
Daemonix иногда полезно думать, а не просто копировать, тем более все ошибки редактор выделяет, когда происходит какой-нибудь казус при компиляции. Писал, я, и правда, в спешке, поэтому забыл расставить скобки, но скрипт работает, как надо. |
Я понял, просто я в скриптах почти не разбираюсь, да и сам их не пишу, а клею из кусочков чужих скриптов. Так что без обид.
QUOTE (-fenix- @ Jul 29 2005, 21:23) |
Блин, люди не как не могу понять, как заставить чела скастовать спел на другого чела. Можно через |
1. Сначала Assign, а _потом_ делей. Вполне возможно, что исчезает тот объект, от которого делается событие за столько минут. AssignCommand(oPC, DelayCommand(165.0, ..........
2. А точно делей нужен более 150 секунд? (165.0 = 165сек. )
3. Пишите пожалуйста полностью строчки кода, а если код маленький, то лучше весь код - быстрее получите ответ.
-fenix-
Jul 30 2005, 19:13
QUOTE (Ferst @ Jul 30 2005, 18:43) |
1. Сначала Assign, а _потом_ делей. Вполне возможно, что исчезает тот объект, от которого делается событие за столько минут. AssignCommand(oPC, DelayCommand(165.0, ..........
2. А точно делей нужен более 150 секунд? (165.0 = 165сек. )
3. Пишите пожалуйста полностью строчки кода, а если код маленький, то лучше весь код - быстрее получите ответ. |
1. Это зачем сначала Assign? Все и с Delay пашет.
2. Это ты про что?
3. Не могу я целиком, сценка на конкурс!
А есле пост по ниже почитать, то
QUOTE (-fenix- @ Jul 29 2005, 21:23) |
Все уже разобрадся в чем дело |
Просто кастер стоял далеко от объекта, вот и все.