![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2026
|
|
Level 3 ![]() Класс: Некромант Характер: Chaotic Neutral Раса: Человек ![]() |
Помогите чайнику пожалуйста!
Мне нужно, чтобы с убитым монстром (медведь) можно было начать диалог (вырезка шкуры), и чтобы труп пропал через столько-то секунд. Спасибо за внимание. |
![]()
Сообщение
#2027
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
QUOTE Люди, подскажите пожалуйсто. Как мне сделать так, что-бы когда я кольцо одевал сразу появлялся эффект невидимости? или перехода местности Отследить надевание кольца событием OnPlayerEquipItem и наложить эффект / телепортировать. QUOTE(Nuprahtor @ Сегодня, 10:34) [snapback]71727[/snapback] Мне нужно, чтобы с убитым монстром (медведь) можно было начать диалог (вырезка шкуры), и чтобы труп пропал через столько-то секунд. С самим убитым монстром поговорить не удастся. После смерти монстра (медведя) создавай невидимый объект, на OnUsed которого и начинай диалог (через действие ActionStartConversation). Нужно чтобы труп пропал через сколько-то секунд после чего? Вот отследи это что-то и удали невидимый объект с медведем через задержку: NSS // Delay aActionToDelay by fSeconds.
// * No return value, but if an error occurs, the log file will contain // "DelayCommand failed.". // It is suggested that functions which create effects should not be used // as parameters to delayed actions. Instead, the effect should be created in the // script and then passed into the action. For example: // effect eDamage = EffectDamage(nDamage, DAMAGE_TYPE_MAGICAL); // DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget); void DelayCommand(float fSeconds, action aActionToDelay) |
![]()
Сообщение
#2028
|
|
Level 3 ![]() Класс: Некромант Характер: Chaotic Neutral Раса: Человек ![]() |
Я же пока ЧАЙНИК!
Хотя генератор скриптов Лилака поможет создать обьект, но как его удалить через какой нибудь промежуток времени? Например через 120 секунд?На хертбит.А как? И, если не трудно, можете написать скрипт?Пожалуйста, и спасибо за все! Сообщение отредактировал Nuprahtor - Mar 5 2006, 12:13 |
![]()
Сообщение
#2029
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
На хатбит неудобно.
Вот примерно как может выглядеть эта часть (ОnDeath существа): NSS void main() { // создание невидимого объекта на месте смерти миши location lLocation = GetLocation(OBJECT_SELF); object oInvisible = CreateObject(OBJECT_TYPE_PLACEABLE, "XXX", lLocation); // убирание объекта DelayCommand(120.0, DestroyObject(oInvisible)); } , где XXX - чертеж невидимого тела также можешь использовать такое удаление с задержкой: NSS DestroyObject(oInvisible, 120.0); , но обычно перед удалением нужно делать различные проверки, например не идет ли сейчас разговор и игроком. Сообщение отредактировал azathoth - Mar 5 2006, 12:27 |
![]() ![]()
Сообщение
#2030
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
azathoth, зачем через Delay? Есть же хорошая функция:
NSS // Set the destroyable status of the caller. // - bDestroyable: If this is FALSE, the caller does not fade out on death, but // sticks around as a corpse. // - bRaiseable: If this is TRUE, the caller can be raised via resurrection. // - bSelectableWhenDead: If this is TRUE, the caller is selectable after death. void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE) Проверяется раса, а если уж нужно точно, то тэг существа. В момент смерти для него переключается флажок, не удалять существо: NSS SetIsDestroyable(FALSE, FALSE, FALSE); На невидимый объект вешается скрипт, который проверяет в момент закрытия инвентаря, осталось там что-нибудь, если нет, удалить все содержимое, и конечно же сбросить функцию: NSS SetIsDestroyable(TRUE, FALSE, FALSE); Nuprahtor В скрипте "nw_c2_default7" NSS // Очистка всего инвентаря и удаление экипировки, если есть void ClearInventory(object oCorpse) { int nGold = GetGold(oCorpse); if (nGold) TakeGoldFromCreature(nGold, oCorpse, TRUE); int i; for (i = 0; i < 18 ; i++) { object oEquip = GetItemInSlot(i, oCorpse); if (GetIsObjectValid(oEquip)) { DestroyObject(oEquip); } } object oLoot = GetFirstItemInInventory(oCorpse); while (GetIsObjectValid(oLoot)) { DestroyObject(oLoot); oLoot = GetNextItemInInventory(oCorpse); } } void CreateCorpse(object oCreature) { object oKiller = GetLastKiller(); // Убийца object oCreature = OBJECT_SELF; // Погибшее существо string sTag = GetTag(oCreature); // Тэг существа int nCorpseFade = 120; // Задержка исчезновения тела существа. int nKeepEmpties = FALSE; // Вкл., если хотите удалять тела существ моментально. // Узнать точку гибели существа location lCorpse = GetLocation(oCreature); // Защита существа от удаления SetIsDestroyable(FALSE, FALSE, FALSE); if (nKeepEmpties) { nCorpseFade = 0; } // Создание пятна крови object oBlood = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_bloodstain", lCorpse, FALSE); // Создание невидимого объекта, который можно открыть object oCorpse = CreateObject(OBJECT_TYPE_PLACEABLE, "corpse_object", lCorpse, FALSE); // Сохранение объектов, с которыми надо еше работать SetLocalObject(oCorpse, "Blood", oBlood); SetLocalObject(oCorpse, "Corpse", oCreature); SetLocalInt(oCorpse, "KeepEmpty", nKeepEmpties); // Создание шкурки медвеля if (GetTag(oCreature) == "tag_creature") { object oSkin = CreateItemOnObject("skin_bear", oCorpse) } // Проверка первой вещи в инвенторе object oHasInventory = GetFirstItemInInventory(oCorpse); // Если в инвентаре существа ничего нет, то удалить тело if (oHasInventory == OBJECT_INVALID) { ClearInventory(oCreature); ClearInventory(oCorpse); DestroyObject(oCorpse); DestroyObject(oBlood); SetIsDestroyable(TRUE, FALSE, FALSE); DestroyObject(oCreature, 1.0); } // Удаление тела существа по истечение времени else if (nCorpseFade > 0) { float fCorpseFade = IntToFloat(nCorpseFade); DelayCommand(fCorpseFade, ClearInventory(oCreature)); DelayCommand(fCorpseFade, ClearInventory(oCorpse)); DelayCommand(fCorpseFade, DestroyObject(oBlood)); DelayCommand(fCorpseFade + 0.1, DestroyObject(oCorpse)); DelayCommand(fCorpseFade + 0.2, SetIsDestroyable(TRUE, FALSE, FALSE)); DelayCommand(fCorpseFade + 0.2, DestroyObject(oCreature)); } } void main() { object oKiller = GetLastKiller(); if (GetLastKiller() == OBJECT_SELF) return; if (GetRacialType(OBJECT_SELF) == RACIAL_TYPE_ANIMAL) { CreateCorpse(OBJECT_SELF); } } На предмете "corpse_object" в действии OnDisturbed NSS // Очистка всего инвентаря и удаление экипировки void ClearInventory(object oCorpse) { // аналогичен скрипту выше } void main() { object oCorpse = OBJECT_SELF; // Просмотр нужных объектов и переменных object oBlood = GetLocalObject(oCorpse, "Blood"); object oBody = GetLocalObject(oCorpse, "Corpse"); int nKeepEmpty = GetLocalInt(oCorpse, "KeepEmpty"); // Проверка первой ячейки инвентаря object oHasInventory = GetFirstItemInInventory(oCorpse); // Если инвентарь пуст, проверить значение "KeepEmpty" if (oHasInventory == OBJECT_INVALID) { if (!nKeepEmpty) { ClearInventory(oBody); ClearInventory(oCorpse); DestroyObject(oCorpse); DestroyObject(oBlood); AssignCommand(oBody, SetIsDestroyable(TRUE, FALSE, FALSE)); DestroyObject(oBody, 1.0); } } } Чтобы начать диалог, необходимо повесить на объект "corpse_object" в действии OnUsed скрипт: NSS void main() { ActionStartConversation(GetLastUsedBy(), "dialog", TRUE, FALSE); } В диалоге можно запустить тот же скрипт, что находится на OnDisturbed, когда шкурка будет снята. Правда, его надо немного изменить, чтобы скрипт адресовался именно невидимому объекту, а не говорящему. Но я бы так не делал, а просто бы создавал шкурку в инвентарь медведя, которую можно собрать с него, просто открыв невидимый объект. Если не все понятно, или не работает, пиши. Полностью все не проверял, потому что брал готовый скрипт, где гораздо больше объектов. |
![]()
Сообщение
#2031
|
|
Level 1 Класс: Варвар Характер: Lawful Good Раса: Полуэльф ![]() |
Люди подскажите пажаласта как можно сделать чтобы монстры не мочили друг-друга магией если они в одной фракции.
Извените если на этот вопрос уже отвечали. |
![]()
Сообщение
#2032
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
В каком смысле? Объясни ситуацию? Идет бой, монстры сражаются и задевают друг друга магией? Верно?
|
![]()
Сообщение
#2033
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
QUOTE(Dimanische @ Сегодня, 14:12) [snapback]71834[/snapback] Люди подскажите пажаласта как можно сделать чтобы монстры не мочили друг-друга магией если они в одной фракции. если я правильно въехал в вопрос, то в свойствах локации Area -> Properties -> Advanced -> Player vs. Player = Party protected. также есть глобальная опция с тем же смыслом. |
![]()
Сообщение
#2034
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
dumbo, а если на всех локациях стоит Full PvP, и именно такая политика шарда? Нет, это не годится. Лишь как крайняя мера.
Dimanische, можно пойти путем, как описал dumbo, а можно подредактировать все площадные заклинания, в которых указать, что если противник враг, то атаковать его, а если нет, то игнорировать. |
![]()
Сообщение
#2035
|
|
Level 6 ![]() ![]() Класс: Разведчик Арфистов Характер: True Neutral Раса: Животное ![]() |
Как вариант - поставить средние настройки сложности сервера.
|
![]()
Сообщение
#2036
|
|
Level 1 Класс: Варвар Характер: Lawful Good Раса: Полуэльф ![]() |
Про средние настройки сложности понятно. Мне просто хотелось бы чтобы на максимальной сложности они не задевали друг-друга.
QUOTE Объясни ситуацию? Я не знаю важно ли это, но я забыл сказать что монстры эти вылазят когда наступаешь на триггер, тоесть я их через редактор встреч сделал. Ну а подробнее если: вот я вхожу в него они вылазят, начинают меня мочить, как и другие монстры которые рядом в этот момент были, потом я юзую камень возврата, потом телепортируюсь обратно к монстрам, а они там во всю гасятся магией(такой как стена огня, инферно и все что с огнем короче связано у них есть). Вот. QUOTE Dimanische, можно пойти путем, как описал dumbo, а можно подредактировать все площадные заклинания, в которых указать, что если противник враг, то атаковать его, а если нет, то игнорировать. - я в этом деле новичок и че-то не врубаюсь как так сделать. Может у меня версия ToolSet Старая и нет такого? Ваще спасибо что не пропустили мимо мой вопрос. И еще можно вопросик? Какой скрипт делает завершение игры после выполнения последного задания. Выложите пожалуйста если не лень. Сообщение отредактировал Dimanische - Mar 7 2006, 10:01 |
![]()
Сообщение
#2037
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
NSS void main() { string sMovie = "Твой финальный ролик"; EndGame(sMovie); } QUOTE(Dimanische @ Сегодня, 11:51) [snapback]71930[/snapback] И еще можно вопросик? Какой скрипт делает завершение игры после выполнения последного задания. Выложите пожалуйста если не лень. |
![]()
Сообщение
#2038
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
QUOTE(Aiwan @ Feb 27 2006, 22:09) [snapback]71209[/snapback] Везде где юзаешь Делей, попробуй сделать так: NSS void ActionCreateObject(int nObjType, string sCreature, location lLoc, int iAnimation, string sNewTag="") { CreateObject(nObjType, sCreature, lLoc, FALSE, sNewTag); } void CheckIsHere(object oTarget, string sOrder) { object oSelf = OBJECT_SELF; if(GetDistanceBetween(oSelf, oTarget) < 4.0) { AssignCommand(oSelf, PlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 1.0)); CreateItemOnObject(sOrder, oTarget, 1); } else { SpeakString("Куда вы ушли??"); ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 1.0, 1.0); ActionCreateObject(OBJECT_TYPE_ITEM, sOrder, GetLocation(OBJECT_SELF), TRUE); } AssignCommand(oSelf, ActionDoCommand(SetLocalInt(oSelf, "vir_waiter_busy", FALSE))); //заблокировать и разблокировать очередь AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oSelf))); DelayCommand(0.3, SetCommandable(FALSE, oSelf)); } Тот же результат... Ничего не изменилось. Сообщение отредактировал virusman - Mar 8 2006, 00:39 |
![]()
Сообщение
#2039
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
а что не так?
|
![]()
Сообщение
#2040
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
QUOTE(Lex @ Mar 8 2006, 01:35) [snapback]72016[/snapback] а что не так? http://www.wrg.ru/forums/index.php?s=&show...indpost&p=71193 Если снять блокировки/разблокировки - всё работает, но тогда официантку легко сбить. |
![]()
Сообщение
#2041
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Я же говорил, надо через юзерДеф делать. каждая локалка - блок задач. У тебя не просто задачи, они сложные и просто ей не забъешь стек.
У тебя целый блок AI... Попробуй так. Этот код верный на 100%. Все на актионах даже локалки в одном блоке. Должна успевать все понимать... NSS void ActionCreateObject(int nObjType, string sCreature, location lLoc, int iAnimation, string sNewTag="")
{ CreateObject(nObjType, sCreature, lLoc, FALSE, sNewTag); } void CheckIsHere(object oTarget, string sOrder) { object oSelf = OBJECT_SELF; if(GetDistanceBetween(oSelf, oTarget) < 4.0) { AssignCommand(oSelf, PlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 1.0)); CreateItemOnObject(sOrder, oTarget, 1); // Тут никакой блокировки не надо. Действия простые } else { SpeakString("Куда вы ушли??"); AssignCommand(oSelf, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 1.0, 5.0)); AssignCommand(oSelf, ActionCreateObject(OBJECT_TYPE_ITEM, sOrder, GetLocation(OBJECT_SELF), TRUE)); AssignCommand(oSelf, ActionDoCommand(SetLocalInt(oSelf, "vir_waiter_busy", FALSE))); AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oSelf))); DelayCommand(0.3, SetCommandable(FALSE, oSelf)); } } |
![]()
Сообщение
#2042
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
CheckIsHere - это только одна из вложенных функций. Она вызывается после того, как официантка дошла до указанной локации:
NSS void GoToPlayer(object oTarget, string sOrder, float fTimeout) { ActionForceMoveToLocation(GetLocation(oTarget), TRUE, fTimeout); ActionDoCommand(SetFacingPoint(GetPosition(oTarget))); ActionDoCommand(CheckIsHere(oTarget, sOrder)); //заблокировать и разблокировать очередь DelayCommand(0.2, SetCommandable(FALSE)); AssignCommand(OBJECT_SELF, ActionDoCommand(SetCommandable(TRUE))); } По отдельности эта функция работать будет, но со вложенностью официантка дойдёт до точки, а функция CheckIsHere не выполнится. Там же из main вызывается GiveBottleTo, оттуда - GoToPlayer, а оттуда - уже CheckIsHere. Ой, блин, не подумал. Может, просто разблокировку сделать перед вызовом функции. (IMG:style_emoticons/kolobok_light/smile.gif) З.Ы. Не помогло.. Сообщение отредактировал virusman - Mar 8 2006, 12:08 |
![]()
Сообщение
#2043
|
|
Level 13 ![]() ![]() ![]() ![]() Класс: Ниндзя Характер: Chaotic Evil Раса: Танар'ри ![]() |
Народ, существует ли скрипт, меняющий части тела? И если есть, то какой?
|
![]()
Сообщение
#2044
|
|
Level 6 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
у ПЦ через лето помойму можно, только не пойму - зачем?
проще целый апиренс изменить Сообщение отредактировал [MoF]Darth_Nick - Mar 11 2006, 10:37 |
![]()
Сообщение
#2045
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Вишес @ Mar 11 2006, 08:51) [snapback]72284[/snapback] Народ, существует ли скрипт, меняющий части тела? И если есть, то какой? в 1.67 будут такие функции. Сейчас только целиком. |
![]()
Сообщение
#2046
|
|
Level 3 ![]() Класс: Некромант Характер: Chaotic Neutral Раса: Человек ![]() |
Большое спасибо Azathoth`у и Zirrex`у.
Скрипт заработал. Еще вопрос. Как сделать, чтобы зомби сначала лежали на земле (Анимация смерти) а потом вставали и дралисьс чаром. Спасибо за внимание. |
![]()
Сообщение
#2047
|
|
Level 5 ![]() Класс: Волшебник Характер: Chaotic Good Раса: Дракон NWN: Скриптинг [Sn] ![]() |
Nuprahtor, попробуй так:
на зомби на onSpawn NSS SetIsDestroyable(FALSE, TRUE, FALSE); effect eDeath = EffectDeath(); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, OBJECT_SELF); далее смотря через что, допустим это триггер, тогда на onEnter добавь строчки NSS object oDead = GetObjectByTag("ZOMBI");
effect eRes = EffectResurrection(); effect eHeal = EffectHeal(GetMaxHitPoints(oDead)); ApplyEffectToObject(DURATION_TYPE_INSTANT, eRes, oDead); ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oDead); |
![]() ![]()
Сообщение
#2048
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Neutral Good Раса: Человек ![]() |
Скрипт незнаю но область с зомби которые ожывают могу сделать.
|
![]()
Сообщение
#2049
|
|
Level 3 ![]() Класс: Некромант Характер: Chaotic Neutral Раса: Человек ![]() |
Может на OnPerception?
Зомби просто лежат, чар к ним подходит они встают и драка. |
![]()
Сообщение
#2050
|
|
Level 6 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
повесь на спаун кат_сцен паралайз или иммобилиз...или и то и то, когда надо удали
Сообщение отредактировал [MoF]Darth_Nick - Mar 12 2006, 15:16 |
![]() ![]() |
Текстовая версия | Сейчас: 29th April 2025 - 12:43 |