![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#3311
|
|
Level 7 ![]() ![]() Класс: Некромант Характер: True Neutral Раса: Нежить ![]() |
Есть функция GetGold().
Соответственно: Neverwinter Script if (GetGold(GetPCSpeaker()) < 1000) {
return FALSE; } return TRUE; Сообщение отредактировал greye - Jun 12 2010, 08:59 |
![]()
Сообщение
#3312
|
|
Level 2 ![]() Класс: Вор Характер: Lawful Good Раса: Человек ![]() |
Доброго времени суток
У меня такой вопросик : вот у меня есть модуль старой версии 1.6 , а так охота в нём покататся на лошадях какие команды мне использовать в скрипте чтоб это было возможно |
![]()
Сообщение
#3313
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
|
![]()
Сообщение
#3314
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
likkil
это долгая история во первых что за модуль...кастомный иль не кастомный - вопрос непонятен во вторых лошадки появляются только после патча 1.69 до него жалкие попытки покататься на лошадках выливались в тяжелые хаки и муторные системы скриптов. |
![]()
Сообщение
#3315
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
В 1.69 по сути те же хаки (просто включены в ресурсы игры) и те же муторные системы скриптов. Ничего конкретно нативного в коняшках нет - всё тот же геморрой с кастомными анимациями и подменой аппиаранса. Изврат в общем.
|
![]()
Сообщение
#3316
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Lawful Evil Раса: Человек ![]() |
Здравствуйте. У меня не работает (или постоянно удаётся, даже при минусовых значениях навыка) проверка убеждения для появления реплики, соотв. фраза всегда доступна в диалоге. Где косяк?
Neverwinter Script #include "nw_i0_tool" int StartingConditional() { if(!GetHasSkill(SKILL_PERSUADE, GetPCSpeaker())) if(!(AutoDC(DC_MEDIUM, SKILL_PERSUADE, GetPCSpeaker()))) return FALSE;; return TRUE;; } А так же http://www.city-of-masters.ru/forums/index...0&start=200 последний пост (18.06.2010) |
![]()
Сообщение
#3317
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Попробуй как-то так.
Neverwinter Script #include "nw_i0_tool" int StartingConditional() { if(!GetHasSkill(SKILL_PERSUADE, GetPCSpeaker()) || !AutoDC(DC_MEDIUM, SKILL_PERSUADE, GetPCSpeaker())) return FALSE; return TRUE; } У тебя ошибка, во первых две пары дочки тире, во вторых после IF ставится скобка и в скобке выполняется условие. Если скобки не ставить (как у тебя) то будет выполнено только самое первое и одно условие. Твой скрипт можно было записать и так: Neverwinter Script #include "nw_i0_tool"
int StartingConditional() { if(!GetHasSkill(SKILL_PERSUADE, GetPCSpeaker())) return FALSE; if(!AutoDC(DC_MEDIUM, SKILL_PERSUADE, GetPCSpeaker())) return FALSE; return TRUE; } |
![]()
Сообщение
#3318
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Lawful Evil Раса: Человек ![]() |
спс заработало (IMG:style_emoticons/kolobok_light/yahoo.gif) а как проверить отсутствие навыка (фраза а-ля "я нуб, я не качал убеждение, блеф и запугивание и у меня нет денег. Я должен умереть!)
|
![]()
Сообщение
#3319
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Как раз первая проверка в скрипте и есть проверка навыка убедить... А вот дальше идет бросок, записанный в инклюде. Я же пользуюсь своими скриптами проверки необходимого навыка на убеждение + строка в отчете, что там как прошло:
Neverwinter Script //::///////////////////////////////////////////////
//:: Проверка навыка "УБЕДИТЬ" сложность НОРМАЛЬНО. //::////////////////////////////////////////////// int StartingConditional() { object oPC = GetPCSpeaker(); int nSkillZ = GetSkillRank(SKILL_PERSUADE, oPC); int nDC = 2 + d3(); if(nSkillZ > nDC) { SendMessageToPC(oPC, "<c у >Убедить</c><c °у> Бросок : "+IntToString(nSkillZ)+" против "+IntToString(nDC)+" </c><c у >УДАЧА</c>"); return TRUE; } SendMessageToPC(oPC, "<c у >Убедить</c><c °у> Бросок : "+IntToString(nSkillZ)+" против "+IntToString(nDC)+" </c><cу >ПРОВАЛ</c>"); return FALSE; } |
![]()
Сообщение
#3320
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Lawful Evil Раса: Человек ![]() |
Ещё один глупый вопрос:
есть скрипт (подгон под себя первого скрипта выложенного Aiwan в разделе "Скрипты для новичков") с попыткой перед дестроем из инвентаря сложить всё в сундук Neverwinter Script void main() { object oChest = GetObjectByTag("piratechest"); object oPC = GetEnteringObject(); // Того кто вошел object oArmor = GetObjectByTag("item112"); //-----------------В сундук--------------------- object oItem = GetFirstItemInInventory(oPC); // Первый итем в инвентаре while(GetIsObjectValid(oItem)) // Пока такой объект существует { ActionGiveItem(oItem, oChest); DestroyObject(oItem); oItem = GetNextItemInInventory(oPC); // Берем другой объект... } //------------------ Убиваем весь инвентарь ------------------------------------ while(GetIsObjectValid(oItem)) // Пока такой объект существует { DestroyObject(oItem); oItem = GetNextItemInInventory(oPC); // Берем другой объект... } int i=0; while(i<14) // ПОКА i меньше 14. 14 - это количество всех слот у объекта { ActionGiveItem(GetItemInSlot(i, oPC), oChest); i++; ActionGiveItem(GetItemInSlot(i, oPC), oChest); } //------------------ Убиваем всю амуницию ------------------------------------- while(i<14) // ПОКА i меньше 14. 14 - это количество всех слот у объекта { DestroyObject(GetItemInSlot(i, oPC)); i++; DestroyObject(GetItemInSlot(i, oPC)); } // Было ноль к примеру, станет 1 и т.д. // -------------------одёжка------------------------- CreateItemOnObject("item112", oPC, 1); AssignCommand(oPC, ActionEquipItem(oArmor, INVENTORY_SLOT_CHEST)); } Проблемы: 1) В сундук ничего не попадает 2) Уничтожаются только неодетые вещи 3) Следует из проблемы 2) - одёжка не одевается (но появляется в инве) На всякий случай: 1) Скрипт стоит на onenter локации 2) Проверки на повторность захода в локацию etc нету т.к. предусмотрено только одиночное её посещение и модуль планируется сингловый 3)"item112" и тэг и ресреф вещи 4) item 112 ничего не требует для ношения 5) на onclientrun модуля стоит скрипт схожего действия (при надобности запосчу) (он работает) вышеуказанный скрипт не работает и с и без включённого модулестартоовского |
![]()
Сообщение
#3321
|
|
Level 7 ![]() ![]() Класс: Некромант Характер: True Neutral Раса: Нежить ![]() |
Во-первых, ты уничтожаешь вещи при переносе. Логично, что после этого ты ничего не найдёшь в сундуке. Во-вторых, я не особо помню, но ActionGiveItem вроде бы работает только от лица владельцев предмета, т.е. надо либо вешать скрипт на игрока, либо делать AssignCommand.
|
![]()
Сообщение
#3322
|
|
Level 2 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
А еще можно использовать CreateItemOnObject вместо ActionGiveItem.
|
![]()
Сообщение
#3323
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Lawful Evil Раса: Человек ![]() |
Спасибо, но ни то ни другое не работает (при убирании дестроя он оставляет всё как было, только новую шмотку дает, ни с ассигнкомманд (экшнгивайтем(...)) ни с крейтайтемонобжект сундук пустует (IMG:style_emoticons/kolobok_light/sad.gif)
|
![]()
Сообщение
#3324
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Neverwinter Script void main() { object oChest = GetObjectByTag("piratechest"); object oPC = GetEnteringObject(); object oArmor = GetObjectByTag("item112"); //первая ошибка - таким способом можно получить только уже существующий в игре объект, если планируется создавать итем, то так делать нельзя object oItem = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItem)) { ActionGiveItem(oItem, oChest); //любой экшен выполняется от лица вызвавшего команду объекта - нужно использовать AssignCommand DestroyObject(oItem); //что самое интересное, уничтожается _тот же самый_ итем, который хотим положить в сундук oItem = GetNextItemInInventory(oPC); } //этот блок вообще не нужен - все итемы в инвентаре уже помечены на удаление while(GetIsObjectValid(oItem)) { DestroyObject(oItem); oItem = GetNextItemInInventory(oPC); } int i=0; while(i<14) { ActionGiveItem(GetItemInSlot(i, oPC), oChest); //опять AssignCommand i++; ActionGiveItem(GetItemInSlot(i, oPC), oChest); //зачем дублировать-то? } while(i<14) { DestroyObject(GetItemInSlot(i, oPC)); i++; DestroyObject(GetItemInSlot(i, oPC)); //тоже зачем-то дублируется команда } CreateItemOnObject("item112", oPC, 1); AssignCommand(oPC, ActionEquipItem(oArmor, INVENTORY_SLOT_CHEST)); //ага, и пытаемся надеть что угодно, только не созданную предыдущей командой одежду } Правильно будет так: Neverwinter Script void main() { object oChest = GetObjectByTag("piratechest"); object oPC = GetEnteringObject(); object oNewItem; object oItem = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItem)) { if(GetBaseItemType(oItem) != BASE_ITEM_LARGEBOX) { oNewItem = CopyItem(oItem, oChest, TRUE); //копируем итем в сундук SetDescription(oNewItem, GetDescription(oItem)); } DestroyObject(oItem); oItem = GetNextItemInInventory(oPC); } int i; for(i = INVENTORY_SLOT_HEAD; i <= INVENTORY_SLOT_BOLTS; i++) { oItem = GetItemInSlot(i, oPC); oNewItem = CopyItem(oItem, oChest, TRUE); SetDescription(oNewItem, GetDescription(oItem)); DestroyObject(oItem); } AssignCommand(oPC, ClearAllActions(TRUE)); //чистка стека oItem = CreateItemOnObject("item112", oPC); AssignCommand(oPC, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST)); Если ящики так уж критично копировать, в чём я сильно сомневаюсь, то код будет таким: Neverwinter Script ... Соответственно, AssignCommand(oPC, ClearAllActions(TRUE)); переедет в начало скрипта.
while(GetIsObjectValid(oItem)) { if(GetBaseItemType(oItem) == BASE_ITEM_LARGEBOX) AssignCommand(oPC, ActionGiveItem(oItem, oChest)); //не знаю, как себя поведет передача полного ящика в таком скрипте - надо тестить else { oNewItem = CopyItem(oItem, oChest, TRUE); //копируем итем в сундук SetDescription(oNewItem, GetDescription(oItem)); DestroyObject(oItem); } oItem = GetNextItemInInventory(oPC); } Сообщение отредактировал Ilerien - Jun 23 2010, 02:14 |
![]()
Сообщение
#3325
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Я уже когда-то выкладывал скрипт переноса вещей в ящик. Вот ссылка на пост: http://www.city-of-masters.ru/forums/index...;p=122407&#
В принципе Ilerien, контейнеры, т.е. волшебные сумки нужно переносить оператором ActionGiveItem. Переходят со всем содержимым и в том же раскладе в них вещей. Можно обойтись и этой одной функцией для переноса всех шмоток... Но есть одно НО. Не тестил для НПС, а вот для плейсов теряется переносимый инвентарь. Видно по причине превышения акций... Поэтому нужно сперва перебрать инвентарь и перенести сумки. Затем скопировать остальной шмот. Да и про золото не стоит забывать, т.к. передать плейсу мы можем не более 50.000 злотых... Neverwinter Script // Take nAmount of gold from oCreatureToTakeFrom.
// - nAmount // - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. // - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the // gold will be destroyed and will vanish from the game. void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE) |
![]() ![]()
Сообщение
#3326
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Lawful Evil Раса: Человек ![]() |
Большое спасибо благодаря вам всё заработало (IMG:style_emoticons/kolobok_light/yahoo.gif) (IMG:style_emoticons/kolobok_light/yahoo.gif) (IMG:style_emoticons/kolobok_light/yahoo.gif)
|
![]()
Сообщение
#3327
|
|
Level 2 ![]() Класс: Ученик Дракона Характер: Chaotic Neutral Раса: Человек ![]() |
Всем доброго дня!
Не нашел нигде одного очень важного для меня скрипта. Тыкните меня пожалуйста носом если где-то на форуме уже обсуждался данный вопрос. Я хочу сделать небольшой но продуманный мирок по подобию первой Готики. И я хочу сделать чтобы каждый непись имел свой распорядок дня. Для этого мне нужен универсальный шаблон-заготовка. Например: 9.00 - непись встает(не обязательно с анимацией, достаточно чтобы просто появился возле кровати), потом с вероятностью 50\50 или умывается или ест за столом 9.30 - одевается(меняет одёжку в слоте брони) и идет работать в поле\ идет к лавочке поговорить с соседом и т.д. Для меня главное - это привязка к времени суток и различные действия с долей вероятности, чтобы он не повторял как робот одну и ту же последовательность действий каждый день. Думаю и другим модостроителям это пригодится, прошу профи тулсета помочь мне. |
![]()
Сообщение
#3328
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Анимация НПС, часть 1
Анимация НПС, часть 2 + файл с демонстрационным модулем Более подробно эту задачу никто не освещал. но там описана идеальная ситуация (игрок находится на той же локации, что и НПС, НПС не перемещается между локациями). Когда дело доходит до реализации в модуле, то все более сложно и грустно. В итоге система немного более сложная чем описана в статье, но эти изменения можно и самому проделать, в принципе (проверки наличия игрока, телепорты кое-где и тд) |
![]()
Сообщение
#3329
|
|
Level 2 ![]() Класс: Ученик Дракона Характер: Chaotic Neutral Раса: Человек ![]() |
Lex, спасибо! В той статье есть все что мне может понадобится. Пока буду изучать и пробовать. Но еще у меня такой вопрос: можно так сделать чтобы нпс выполняли свой распорядок вне зависимости есть ли игрок в локации? А то заходит главный герой посреди ночи в дом (например чтобы ограбить его) а хозяин вдруг спохватывается из-за стола и бежит в постель быстренько спать, не замечая грабителя, так как должен был лечь 4 часа назад (IMG:style_emoticons/kolobok_light/declare.gif)
|
![]()
Сообщение
#3330
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
я именно об этих усложнениях говорил, когда сказал что условия, рассматриваемые в статье идеальные.
Конечно скрипты выполняются пока игрок не на локации. Но гораздо медленнее. И вообще говоря этим баловаться не следует - будут заметные тормоза. Чтобы реализовать описанную тобой ситуацию, надо имхо скриптовать отдельно вход игрока в дом (те на вход игрока НПСу в локе задаются нужные параметры, которые определяются временем и чем там тебе еще надо + производятся нужные действия с НПС - он куда надо телепортируется, запускается анимация и тд). Если таких мест будет много.. ну сам понимаешь. Другого приличного варианта, чтобы не тормозило, я не нашел. Да и этот не сказать что простой - требует усидчивости и внимания. в итоге для себя я сделал такой вывод: реальный уход спать НПС делать только тем, кому это реально нужно (те на это завязан квест). Для антуража таких сложностей не делать. Для антуража у меня прохожие уходят спать просто войдя в некий дом и исчезнув (при этом игрок туда войти не может). А не прохожие, скажем торговцы, через скрипт выставляют игрока за дверь и запирают дом. Сами понятное дело стоят столбом в лавке, никакой анимации. Каждый сам решает какой уровень детализации ему нужен и что он готов за это заплатить. Но готовых решений круче тех, что я в той статье описал, тебе врядли кто даст. Просто потому что их скорее всего никто и не делал. Я видел пару систем на волте.. но в них реально многовато дыр, требуется серьезная доработка, а по функционалу и удобству они ничем не лучше моего варианта. |
![]()
Сообщение
#3331
|
|
Level 2 ![]() Класс: Ученик Дракона Характер: Chaotic Neutral Раса: Человек ![]() |
Спасибо за столь доходчивый ответ (IMG:style_emoticons/kolobok_light/good.gif) Теперь все стало понятно. Буду мудровать теперь как все закрутить наиболее реалистично и чтобы не сидеть часами за доработкой деталей которые игрок может даже не заметить. Наверно нужно делать только самые основные анимации, как вы советовали, необходимые по сюжету и которые игрок просто обязан заметить(IMG:style_emoticons/kolobok_light/smile.gif) . Спасибо за ваши советы!
|
![]()
Сообщение
#3332
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Почитай еще вот здесь про скрипты ХБ НПС: http://remmgen.narod.ru/tscript3.html#SC_HB
Сообщение отредактировал gennady - Sep 4 2010, 16:22 |
![]()
Сообщение
#3333
|
|
Level 2 ![]() Класс: Ученик Дракона Характер: Chaotic Neutral Раса: Человек ![]() |
Очень полезное инфо, благодарю. Я сейчас кстати играю в вашу Рыцарскую Сагу. Интересно и продумано, а наиболее понравилось что в близком русской душе стиле сделано (IMG:style_emoticons/kolobok_light/good.gif) Извиняюсь за спойлер (IMG:style_emoticons/kolobok_light/rolleyes.gif)
|
![]()
Сообщение
#3334
|
|
Level 1 Класс: Теневой Танцор Характер: Lawful Good Раса: Человек ![]() |
Подскажите плиз как сделать точку респа нпц и героя. В скрипте я не очень разбираюсь, пробовал копировать респ из другого модуля - не получилось. Буду очень благодарен. (Имеется ввиду чтобы ресался после смерти и бежал по вейпоинтам точка1,точка2 и т.д., а не просто одноразовое появление появление)
|
![]()
Сообщение
#3335
|
|
Level 1 Класс: Теневой Танцор Характер: Lawful Good Раса: Человек ![]() |
С игроком разобрался как делать точку респа, но вот НПЦ не хочет ресаться (IMG:style_emoticons/kolobok_light/nea.gif) . народ помогите плиз, чтобы НПЦ ресался, вот что у НПЦ на OnDeath.
Neverwinter Script void main() { object oNPC = GetLastRespawnButtonPresser(); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectRe surrection(),oNPC); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHe al(GetMaxHitPoints(oNPC)), oNPC); RemoveEffects(oNPC); string sDestTag = "WP_Death_Hero"; int iEnteredCastle = GetLocalInt(GetModule(), "EnteredCastle"); if (iEnteredCastle == TRUE) { sDestTag = "WP_Death_Hero2"; } if (GetIsObjectValid(GetObjectByTag(sDestTag))) { object oSpawnPoint = GetObjectByTag(sDestTag); AssignCommand(oNPC,JumpToLocation(GetLocation(oSpa wnPoint))); } else { } } Подскажите что не так, или лучше напишите пожалуйста скрипт. |
![]() ![]() |
Текстовая версия | Сейчас: 3rd May 2025 - 02:16 |