Цитата(Gatcuk @ Jul 25 2013, 19:45)

Друзья, никто не подскажет скрипт для крафтинга через диалог?
Что-то вроде:
Изготовить "предмет" (требует X ресурса, X навыка изготовления брони). Во время проверки навыка имеется X% шанс успеха, в случае провала ингридиенты уничтожаются, но игрок предмет уже не получает.
Меня интересует крафт с проверкой навыков на изготовление брони (Craft Armor), оружия (Craft Weapon), ловушек (Craft trap), зелий (Brew potion) , поясов целителя (Heal), волшебных палочек (Craft wand), свитков (Scribe scroll), отмычек (Open lock), Книг (Lore).
Заранее спасибо

>>>
Цитата(Flaristan @ Jul 18 2013, 05:30)

Изучай
скрипт-генератор – там есть все подобные функции.
Как создать данный скрипт с помощью скрипт генератора:1. Запускаем генератор.
2. Choose script type (выберите тип скрипта) -> Normal script (нормальный скрипт).
3. Where is this script called from? (откуда запускается скрипт) -> From a conversation (из диалога).
4. Выбираем из списка арсенала генератора пункт Make an ‘if THIS then THAT condition’ (сделать «если ЭТО, то ТО условие») и жмем SCRIPT (скрипт).
5. Choose your condition (выберите ваше условие) -> Item restriction (требование предмета) -> The following event(s) will happen only if player (данный эвент(ы) случится только если игрок…) -> Has (имеет) -> The item tagged (предмет с тагом…) -> вводим таг предмета (в примере это «tag_of_resurs») -> есть возможность затребовать, чтоб этот предмет был экипирован на теле игрока в указанном слоте – она нам не нужна, не трогаем -> Okay (запилить!).
6. Операцию требования предмета можно повторить, если мы хотим, чтоб ресурсов было больше чем 1, но нам этого не надо, зато у нас есть требование навыка, поэтому все равно жмем еще раз Make an ‘if THIS then THAT condition’ (сделать «если ЭТО, то ТО условие») и жмем SCRIPT.
7. Choose your condition (выберите ваше условие) -> Successful skill check (удачная проверка навыка) -> Skill to check: (проверяемый навык) -> (тут можно ставить тот тип навыка, к которому мы относим крафт этого предмета – в примере это будет «Craft trap», ставим его; к сожалению почему-то в данном списке генератора представлены не все умения, но их можно и вручную в получившемся скрипте потом поменять будет, подсмотрев константы в тулсете или лексиконе) SKILL_CRAFT_TRAP -> Difficulty: (класс сложности; d20 + уровень навыка игрока должен быть равен или быть выше этого значения) -> (тут мы сразу одновременно устанавливаем и % успеха, т.к. чем выше разница требования и броска кубика + навыка игрока – тем меньше у него шансов на успех вплоть до «никаких»; допустим для примера мы создаем хитроумное приспособление которое должно соответствовать работе игрока-мастера не ниже 10 уровня с полностью вкачанным навыком, это около 13 пунктов навыка, добавим возможный бонус от вещей и модификаторов и повысим его до 17 пунктов, а так же установим вероятность создания такого предмета для такого мастера в 50% т.е. добавим еще 10 пунктов от предполагаемого броска кубика и получим в итоге 27, так и пишем) 27 -> Okay (запилить!).
8. Таким образом у нас получилось 2 условия – предмет и сложность крафта, теперь нам нужно описать что произойдет, если у игрока все получится. Выбираем из списка арсенала генератора пункт Give item(s)/XP/gold to PC (дать предмет(ы)/опыт/золото игроку) -> SCRIPT (скрипт) -> ResRef of item to give: (резреф получаемого предмета) -> (вбиваем/копируем сюда резреф того, что должно получиться – в примере это будет «resref_of_result») resref_of_result -> (больше мы ничего игроку не даем, поэтому жмем сразу финальную кнопку «запилить и выйти!») Okay – exit!
9. Итак у нас получается в случае прокидывания DC, игрок получает то, что он собирался скрафтить. На этом мы закрываем второе наше «if THIS then THAT» условие, для чего нажимаем 1 раз кнопку «Finish current if» (закончить текущее «если») -> Just finish (просто закончить; есть варианты еще «наветвить», но нам они тут не нужны).
10. В окошке «Current number of unfinished ‘if’ statements» (текущее число незавершенных «если» условий) видим, как 2 превратилось в 1. У нас осталось еще первое условие - предмета. Наш крафт подразумевает, что этот ресурс тратится при любом варианте, поэтому теперь мы это и осуществим в независимости от прокидываний DC. Выбираем из списка арсенала генератора пункт Take item(s)/XP/gold from PC (взять предмет(ы)/опыт/золото у игрока) -> SCRIPT (скрипт) -> (нам нужно только взять 1 предмет, поэтому мы заполняем лишь соответствующее поле) Tag of the item to take (таг забираемого предмета; у нас в примере это вышеупомянутый «tag_of_resurs») -> tag_of_resurs -> (больше мы ничего у игрока не забираем, поэтому жмем сразу финальную кнопку «запилить и выйти!») Okay – exit!
11. Теперь можно закрыть и 2 условие. Жмем «Finish current if» (закончить текущее «если») -> Just finish (просто закончить).
12. Вот собственно и весь наш скрипт. Больше нам добавить нечего и мы жмем кнопку «Close».
13. Теперь в окошке справа мы видим код нашего скрипта (выглядит кривовато, зато рабочий) – копируем его и помещаем его в нужное место в редакторе диалога (на «совершенные действия»).
14. Наслаждаемся и благодарим Лилака. Генератор можно закрывать.
Вот как выглядит результат:Neverwinter Script
object oItem;
/* Script generated by
Lilac Soul's NWN Script Generator, v. 2.3
For download info, please visit:
http://nwvault.ign.com/View.php?view=Other...683&id=625 *///Put this on action taken in the conversation editorvoid main()
{
object oPC = GetPCSpeaker();
if (GetItemPossessedBy(oPC,
"tag_of_resurs")!=
OBJECT_INVALID)
{
if (GetIsSkillSuccessful(oPC, SKILL_CRAFT_TRAP,
27))
{
CreateItemOnObject(
"resref_of_result", oPC);
}
oItem = GetItemPossessedBy(oPC,
"tag_of_resurs");
if (GetIsObjectValid(oItem))
DestroyObject(oItem);
}
}