![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2386
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Chaotic Neutral Раса: Полуэльф ![]() |
QUOTE(DarkDeivel @ Jul 8 2006, 21:20) [snapback]87410[/snapback] Скажите как сделать чтобы при слове "далее" персонаж перемещался к указаному НПС. Тоесть. ПОдоходит к капитану на одномо острове. -Переправь меня на другой остров.Заранее установи точку прыжка(оwp). - не прооблема давай. -далее. Здесь добавь скрипт:assigncommand(oPC,actionjumptoobject(oWp)); и персонаж(oPC) оказывается возле НПС капитана на другом острове(тут wp). |
![]() ![]()
Сообщение
#2387
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
QUOTE(Dik Morris @ Jul 8 2006, 21:34) [snapback]87413[/snapback] DarkDeivel, подобные ситуации разбираются очень часто, используй поиск. Нашел, меньше чем за полминуты. Читать. Все нашле СпС. |
![]()
Сообщение
#2388
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Я вот недавно сел за Тулсет. и вот.
как сделать чтобы появилось строчка в диалоге при наличии 20 Animal Bone(в рюкзаке). |
![]()
Сообщение
#2389
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Cтавишь у нужной строки на Text Appears When... скрипт типа такого:
NSS int Match(a, с) { return (a == с); } int GetNumItemsInInventory(object oInventory = OBJECT_SELF, string sTag = "*") { int nNum = 0; object oItem = GetFirstItemInInventory(oInventory); while (GetIsObjectValid(oItem)) { if (Match(GetTag(oItem), sTag)) { nNum += GetItemStackSize(oItem); } oItem = GetNextItemInInventory(oInventory); } return nNum; } int StartingConditional() { object oPC = GetPCSpeaker(); int n = GetNumItemsInInventory(oPC, "ТЭГ_ЭТОЙ_САМОЙ_КОСТИ"); return (n >= 20); } По-моему этот вопрос разбирали в этой теме уже несколько раз, ты наверняка наткнулся бы на ответ пролистав тему (а заодно и на множество других крайне полезных вещей) и соседние, что настоятельно советую перед тем как спрашивать: "ух-хух, а как забрать 20 костей?". ---- P.S. Глюка (IMG:style_emoticons/kolobok_light/smile.gif) пишу: int Match(a, в); выдает: int Match(a, (IMG:style_emoticons/kolobok_light/dirol.gif) ; Сообщение отредактировал azathoth - Jul 9 2006, 03:09 |
![]()
Сообщение
#2390
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Да, там смайлы не парсятся, точнее парсятся... Как лечить я хз (IMG:style_emoticons/kolobok_light/pardon.gif)
|
![]() ![]()
Сообщение
#2391
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
QUOTE(Dik Morris @ Jul 7 2006, 15:30) [snapback]87334[/snapback] На onEnter, триггера: NSS void main() { object oPC = GetEnteringObject(); effect eHeal = EffectHeal(GetMaxHitPoints(oPC)); effect eStrength = EffectAbilityIncrease(ABILITY_STRENGTH,1); effect eAC = EffectACIncrease(1); // Остальные эффекты добавишь сам, ищи в фильтре Effect* if (!GetIsPC(oPC)) return; if (GetCurrentHitPoints(oPC) != GetMaxHitPoints(oPC)) { ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPC); } ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStrength, oPC); // Сила повышается на 1. Бесконечно. ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAC, oPC); // AC повышается на 1. Бесконечно. DestroyObject(OBJECT_SELF, 0.4); // Удали строку если не нужно чтобы скрипт срабатывал 1 раз. } Слухай у меня все работает. А как сделать к этому еще визуальные эффекты?? |
![]()
Сообщение
#2392
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
С помощью 2 фун-ций:
NSS // 1: // Apply eEffect to oTarget. void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f) // 2: // * 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) // + констант: DURATION_TYPE_INSTANT ; DURATION_TYPE_PERMANENT ; DURATION_TYPE_TEMPORARY. Константы, виз. эффектов начинаются с VFX_* (Рисунки см. в Лексиконе) PS: Т.е получится, например так: NSS ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oPC);
Сообщение отредактировал Dik Morris - Jul 9 2006, 12:04 |
![]()
Сообщение
#2393
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Лучше всего залинковать эффекты бонусов с визуальными эффектами (см. скрипт любого спелла).
|
![]() ![]()
Сообщение
#2394
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
QUOTE(Dik Morris @ Jul 9 2006, 12:00) [snapback]87436[/snapback] С помощью 2 фун-ций: NSS // 1: // Apply eEffect to oTarget. void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f) // 2: // * 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) // + констант: DURATION_TYPE_INSTANT ; DURATION_TYPE_PERMANENT ; DURATION_TYPE_TEMPORARY. Константы, виз. эффектов начинаются с VFX_* (Рисунки см. в Лексиконе) PS: Т.е получится, например так: NSS ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oPC); Понятно ща попробую. (IMG:style_emoticons/kolobok_light/declare.gif) Aiwan: слушай, у нас не форум розовых дневничков, где спамят лишь бы постов набрать. Больше такого содержательного постинга что бы не было. Устный пред. Сообщение отредактировал Aiwan - Jul 9 2006, 17:45 |
![]()
Сообщение
#2395
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Chaotic Neutral Раса: Полуэльф ![]() |
Всем mass heal & level up!:)*как мне организовать скрипт на он персепт нпс чтобы он брал мои деиствия и реагировал.Например если он видит что рс в режиме parry,то он отбегает и лечиться!Ответ очень нужен!
|
![]()
Сообщение
#2396
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Noah, простой скрипт, взята функция "Талента" лечения из инклуда "x0_i0_talent":
NSS if (GetActionMode(oPercep, ACTION_MODE_PARRY) == TRUE) { if (TalentHealingSelf()) { // Подлечиться; } } Чтобы заработал скрипт, необходимо добавить в инвентарь противника бутылки лечения. Сработает, когда у противника жизни станет меньше половины полной жизни, а напавший войдет в режим парирования. All Всем, кто программирует, известен цикл "for", позволяющий сделать счетчик из числа, границы которого для Вот сложения, вычитания, и т.д., описываются в шапке цикла. Есть универсальный цикл для снятия вещей с персонажа: NSS for (i = 0; i < NUM_INVENTORY_SLOTS; i++) { oItem = GetItemInSlot(i, oPC); if (GetIsObjectValid(oItem)) AssignCommand(oPC, ActionUnequipItem(oItem)); } Сам цикл работает без проблем, к нему претензий нет, но не срабатывает при каждом новом проходе функция, ради который весь цикл и создавался, "ActionUnequipItem" (выполняется только 4 раза). Экспериментальным путем удалось установить, что в стэке может одновременно находиться лишь 4 действия. Т.е., если эти действия еще не выполнились, то все последующие окажутся вне стэка, и соответственно, не выполнятся. Что же делать? Ведь данный цикл раньше работал отлично. Тогда я решил немного перехитрить скрипт, заставив цикл выполняться не 1 раз, а 4 раза. Как бы проверяя, а точно ли все вещи сняты?! В итоге получилось следующее: NSS void TakeItemsFromPC(object oPC) { int k = GetLocalInt(oPC, "DropThings"); if (k > 3) { DeleteLocalInt(oPC, "DropThings"); AssignCommand(oPC, ClearAllActions()); return; } int i; object oItem; for (i = 0; i < 14; i++) { oItem = GetItemInSlot(i, oPC); if (GetIsObjectValid(oItem)) { AssignCommand(oPC, ActionUnequipItem(oItem)); } } SetLocalInt(oPC, "DropThings", ++k); DelayCommand(0.2, TakeItemsFromPC(oPC)); } void main() { TakeItemsFromPC(GetPCSpeaker()); } Не уверен, что это лучшее решение, но вещи снимаются все, правда не за 1 цикл. У меня возник вопрос, можно ли как-нибудь эту операцию осуществить иначе? Сообщение отредактировал Zirrex - Jul 12 2006, 00:56 |
![]()
Сообщение
#2397
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Chaotic Neutral Раса: Полуэльф ![]() |
Спасиб,Zirrex!1.B скриптах для новичков Айван приводил подобный скрипт,глянь.2.Как скриптом добавить крылья,хвост или костяну руку?Иль отобрать!Или это только через 2dа?
|
![]()
Сообщение
#2398
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
В стеке может находиться достаточно много действий, чтобы забыть об их количестве, если дело не касается катсценок, попробуй очистить стэк существа перед перебором.
По другому - копировать вещи CopyItem'ом в инвернтарь существа, а из слотов - удалять. Действия - побоку. |
![]()
Сообщение
#2399
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Вообще в стеке может быть 75 действий. Просто сам скрипт может в одном из блоков очищать акции. РС надо время на то что бы снять предмет. Попробуй накидать акций, повесить на каждую задержку в полсекунды и закройстек РС.
|
![]()
Сообщение
#2400
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
QUOTE(Noah @ Jul 12 2006, 05:43) [snapback]87624[/snapback] 2.Как скриптом добавить крылья,хвост или костяну руку?Иль отобрать!Или это только через 2dа? Читать эту ссылку. От себя, как известно такие свойства появляются на эпическом уровне, у определенных классов, (например, светящиеся глаза, у монаха) значит попробуй добавить NPC несколько лишних уровней. |
![]()
Сообщение
#2401
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
azathoth, да, я думал про такой вариант, тем более, что он работает отлично, но что случилось с нашим циклом, вот что я хотел узнать. Ведь работал он раньше правильно, теперь же нет.
Aiwan, может быть оно и так, только не для варианта с циклом. Потом, если делать задержку на действие, то это лишит код цикла, и придется все 13 вещей, если они есть, перечислить в одинаковом коде, только каждая строчка будет выполняться с некоторой задержкой. Что, согласись, все же не очень здорово, потому что аналогичную операцию может выполнить и цикл, если бы не одно но. Ладно, если иных вариантов нету, я остановлюсь на своем, потому что он работает нормально. Вообще странно, если максимально действий может быть 75, то куда же они деваются, или просто не успевают выполняться? |
![]()
Сообщение
#2402
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
QUOTE(Dik Morris @ Jul 12 2006, 09:36) [snapback]87631[/snapback] Читать эту ссылку. От себя, как известно такие свойства появляются на эпическом уровне, у определенных классов, (например, светящиеся глаза, у монаха) значит попробуй добавить NPC несколько лишних уровней. Крылья: SetCreatureWingType Хвост: SetCreatureTailType Рука/нога/голова/всё остальное: SetCreatureBodyPart Работает только в 1.67. Сообщение отредактировал virusman - Jul 12 2006, 08:55 |
![]()
Сообщение
#2403
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
2 Zirrex. Они не успевают выполниться.
Лично я копирую все шмотки в сундук и оттуда назад. Все остальное геммор, так как многие события вшиты в движок. Я это говорю к тому что столкнулся с проблемой одеть-снять проклятые вещи в модуле. |
![]()
Сообщение
#2404
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Zirrex, функции одевания и снятия шмоток сами по себе длинные, наверно в движок вшита сопутствующая анимация. Можно попробовать блокировать стек, чтобы исключить возможность сбоя кода. Но все же лучше через Copy и Destroy. Эти функции более быстрые, и можно использовать даже в бою. А вот одеть в бою шмотку – большой геморрой!
NSS void main()
{ object oPC = GetFirstPC(); int i; object oItem = GetItemInSlot(i, oPC); for (i = 0; i < NUM_INVENTORY_SLOTS; i++) { oItem = GetItemInSlot(i, oPC); if (GetIsObjectValid(oItem)) { CopyItem(oItem, oPC); DestroyObject(oItem); } } } // Снимаем все шмотки с героя ему в рюкзак Сообщение отредактировал gennady - Jul 12 2006, 12:21 |
![]()
Сообщение
#2405
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
gennady, в такой цепочке есть один недостаток, если скрипт начнет выполняться, а игрок в этот момент покинет сервер, может произойти известная неприятность, а именно, размножение вещей. Мой вариант хоть и не идеален, потому что заставляет выполняться цикл 4 раза, но, если его немного модифицировать, добавив проверку, а есть ли вообще цель, с которой надо работать, то цикл лишь остановится на полпути, когда цель исчезнет. Вещи же останутся либо на персонаже, либо в инвентаре, но не размножатся.
Чтобы правильно работала такая цепочка, как копирование и удаление, необходимо делать метки на удаляемые вещи, и в момент входа на сервер, проверять, есть ли у персонажа подобные вещи. Если есть, удалять. Скрипт можно укоротить: NSS void main() { object oPC = // тому-то, GetFirstPC не подходит, потому что модуль мультиплейерный int i; object oItem; // object oItem = GetItemInSlot(i, oPC); // лишняя строчка for (i = 0; i < 14; i++) // невидимые объекты нам проверять не нужно, поэтому граница на 14 вещи. { oItem = GetItemInSlot(i, oPC); if (GetIsObjectValid(oItem)) { CopyItem(oItem, oPC); DestroyObject(oItem); } } } Aiwan, осуществляешь копирование через сундук, чтобы персонажу не выводились надписи, что вещь потеряна? Тоже вариант. |
![]()
Сообщение
#2406
|
|
Level 2 ![]() Класс: Маг Характер: Chaotic Evil Раса: Полуэльф ![]() |
Опять же доброго времени суток. Бился я с SQLGetData - так ничего и не получилось. Скрипт все время выдает "пусто", что я не так сделал? Почему скрипт не работает?
NSS #include "aps_include"
void main() { object oPC = GetLastUsedBy(); string sPlayer=SQLEncodeSpecialChars(GetPCPlayerName(oPC)); string sChar=SQLEncodeSpecialChars(GetName(oPC)); string sSQL="SELECT * FROM `nwn_stast` WHERE playername = '"+sPlayer+"' AND charname = '"+sChar+"'"; SQLExecDirect(sSQL); string sName = SQLGetData(0); string sName1 = SQLGetData(1); if(SQLFetch()) { if (sName == sPlayer) { SendMessageToPC(oPC, "sName 0"); } if (sName1 == sPlayer) { SendMessageToPC(oPC, "sName 1"); } } else {SendMessageToPC(oPC, "Пусто");} } |
![]()
Сообщение
#2407
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
QUOTE(OxCom @ Jul 12 2006, 18:01) [snapback]87663[/snapback] Опять же доброго времени суток. Бился я с SQLGetData - так ничего и не получилось. Скрипт все время выдает "пусто", что я не так сделал? Почему скрипт не работает? NSS #include "aps_include" void main() { object oPC = GetLastUsedBy(); string sPlayer=SQLEncodeSpecialChars(GetPCPlayerName(oPC)); string sChar=SQLEncodeSpecialChars(GetName(oPC)); string sSQL="SELECT * FROM `nwn_stast` WHERE playername = '"+sPlayer+"' AND charname = '"+sChar+"'"; SQLExecDirect(sSQL); string sName = SQLGetData(0); string sName1 = SQLGetData(1); if(SQLFetch()) { if (sName == sPlayer) { SendMessageToPC(oPC, "sName 0"); } if (sName1 == sPlayer) { SendMessageToPC(oPC, "sName 1"); } } else {SendMessageToPC(oPC, "Пусто");} } 1. Посмотри лог nwnx_odbc. 2. Повтори тот же самый запрос вне НВНа. |
![]()
Сообщение
#2408
|
|
Level 2 ![]() Класс: Маг Характер: Chaotic Evil Раса: Полуэльф ![]() |
В логе только запрос. Получения инфы там не записано. Вне НВНа все работает.
|
![]()
Сообщение
#2409
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
QUOTE(OxCom @ Jul 12 2006, 19:36) [snapback]87668[/snapback] В логе только запрос. Получения инфы там не записано. Вне НВНа все работает. Поставь в nwnx.ini debuglevel в разделе этого плагина побольше. NWNX инициализируется в модуле? |
![]()
Сообщение
#2410
|
|
Level 2 ![]() Класс: Маг Характер: Chaotic Evil Раса: Полуэльф ![]() |
Вот жеж я балда. самое главное и забыл (IMG:style_emoticons/kolobok_light/smile.gif) ) SQLInit();
Спасибо. |
![]() ![]() |
Текстовая версия | Сейчас: 28th April 2025 - 20:37 |