wl.illusion Опубликовано 18 февраля, 2013 Жалоба Поделиться Опубликовано 18 февраля, 2013 (изменено) [sCRIPT][NPC] NT Craft Api v1.01 + NPCЭто API писалось уже больше года назад, я в него почти не вносил изменений с тех пор, так что может что-то работать не так.Я отлично понимаю, что можно сделать лучше и сейчас бы так и поступил, но интерес к данному API минимален, так что если вас устраивает - используйте, если вас что-то не устраивает, просто пропустите мимо глаз.Так же учтите, что здесь выложена информация об API, а не об NPC. Для примера добавлены и сами NPC - простенький и более сложный вариант с квестами.В Базе API всего несколько предметов, если нужно - добавляйте, я обновляю базу API по мере работы с ней.История изменений2014.05.18:- Добавлена версия 1.02;- Обновлена информация по новой версии (добавление описания/свойства предмета).ОписаниеAPI позволяет эмулировать формулы крафта и варки зелий (можно дописать и что-то другое). Основной плюс в том, что можно создавать предметы для крафта доступные только через NPC, или другим классам персонажей иметь доступ к крафту и варке без изменений сорцов.СкачатьCraft API v1.02: nt_craft_api.txt (v1.02)Craft API v1.01: nt_craft_api.v1.1.txt (v1.01)Простенький NPC-варки: nt_craft_simple.txt (v1.00)NPC-алхимик с квестами: nt_craft_alchemist.txt (v2.00)Принцип работыAPI работает на вызовах, которые вы подаёте через стандартный callfunc, каждый вызов требует определённого кол-ва параметров, постараюсь привести все с примерами.Синтаксис:callfunc("alch_func", <номер ключа>, <префикс базы>(, <входящие переменные>));Для начала стоит рассказать о том, что такое <префикс базы> — каждая база создаваемых предметов имеет определённый префикс, это сделано для хранения различных баз на разные случаи (база может быть и одна).Список ключей и их описание:0 — инициализация базы, во время её вызова создаются дефолтовые переменные, синтаксис:callfunc("alch_func", 0, <префикс базы в кавычках>);Пример:callfunc("alch_func", 0, "potion");1 — добавления элемента в базу, здесь нельзя ошибаться и нужно быть внимательным, т.к. функция требует много переменных, синтаксис:callfunc( "alch_func", 1, <префикс базы в кавычках>, <тип визуальных эффектов>, <показывать кол-во создаваемых предметов> <id создаваемого предмета>, <кол-во создаваемых предметов>, <название в списке создаваемых предметов>, <стоимость зени>, <какую формулу учитываем>, (<id необходимого предмета для создания>, <кол-во этого предмета>,) 0, (идентификатор окончания списка необходимых предметов) "" (дополнительное описание выводимое о предмете, символ # - разделитель строк) );Пример, добавления Red Potion за 25 зени:callfunc( "alch_func", 1, "potion", 0, .@hide_amount, 501, 1, "", 25, 2, 507, 1, 0, "Отличный напиток#придаёт жизненных сил." );Теперь нужно рассказать о каждом необходимом параметре:<тип визуальных эффектов>: какой набор визуальных эффектов будет использовать во время крафта предмета, всего есть три набора:0 - эффекты создания напитков1 - обычные надписи Success и Failed2 - эффекты псоздания оружия<показывать кол-во создаваемых напитков>: всё просто, показывать или нет в списке сколько будет создано предметов, 0 - показывать или 1 - скрывать, для удобства сделаны переменные .@hide_amount и .@view_amount.<id создаваемого предмета>: id предмета, который будет создан из списка в item_db.txt, можно указывать любой предмет.<кол-во создаваемых предметов>: какое кол-во будет создано (формула вычисляет только один раз).<название в списке создаваемых предметов>: название предмета, оно будет выводиться только в списке, после создания предмет получит обычное название, если указать пустые кавычки, то имя возьмётся из базы.<стоимость зени>: если указать 0, то требование не будет учитываться.<какую формулу учитываем>: для создания в игре много формул, вот список тех, которые реализованы (вы и сами можете что-то дополнить):0 - всегда 100% шанс успеха1 - базовая формула создания напитков (см калькуляторы варки)2 - формула создания red/yellow/white potion (см калькуляторы варки)3 - формула создания алкоголя (см калькуляторы варки)4 - формула создания Bottle Grenade(Fire Bottle)/Acid Bottle/Plant Bottle/Marine Sphere Bottle (см калькуляторы варки)5 - формула создания Condensed Yellow Potion (см калькуляторы варки)6 - формула создания Condensed White Potion/Glistening Coat (см калькуляторы варки)7 - всегда 100% шанс, используется для элементальных свитков8 - формула крафта Железа (см калькуляторы крафта)9 - формула крафта Стали (см калькуляторы крафта)10 - формула крафта Элементальных камней (см калькуляторы крафта)11 - формула крафта оружия (см калькуляторы крафта)<id необходимого предмета для создания>: id предмета необходимого для производства<кол-во этого предмета>: какое кол-во указанного предмета нужно для производстваЭти две строки вы можете повторять много раз (указывая список необходимых предметов для производства).0 - в конце списка обязателен.Запоминайте порядок добавленных предметов, т.к. это необходимо для будущего построения списка. Отсчёт ведётся от 1.2 — отрисовка меню выбора предмета для крафта, синтаксис:callfunc("alch_func", 2, <префикс базы в кавычках>, <текст сообщения об отмене>, <array предметов>);Пример:setarray .@craft_array[0],1,2,3,4;set .@itemselect, callfunc("alch_func", 2, "potion", "^888888 Ничего не нужно, я передумал^000000", .@craft_array);mes "Вы выбрали элемент: "+.@itemselect;close;Возвращает 0, если был выбрал пункт отмены действия или id из списка, в примере переменную из .@craft_array.3 — возвращает название выбранного элемента, синтаксис:callfunc("alch_func", 3, <префикс базы в кавычках>, <id выбранного элемента>);Пример:setarray .@craft_array[0],1,2,3,4;set .@itemselect, callfunc("alch_func", 2, "potion", "^888888 Ничего не нужно, я передумал^000000", .@craft_array);if ( !.@itemselect ) mes "Выбран пункт отмены.";else mes "Вы выбрали элемент: "+callfunc("alch_func", 3, "potion", .@itemselect);close;4 — возвращает id-предмета из item_db.txt выбранного элемента, синтаксис:callfunc("alch_func", 4, <префикс базы в кавычках>, <id выбранного элемента>);Пример:setarray .@craft_array[0],1,2,3,4;set .@itemselect, callfunc("alch_func", 2, "potion", "^888888 Ничего не нужно, я передумал^000000", .@craft_array);if ( !.@itemselect ) mes "Выбран пункт отмены.";else mes "id-предмета: "+callfunc("alch_func", 4, "potion", .@itemselect);close;5 — возвращает создаваемое кол-во выбранного элемента, синтаксис:callfunc("alch_func", 5, <префикс базы в кавычках>, <id выбранного элемента>);Пример:setarray .@craft_array[0],1,2,3,4;set .@itemselect, callfunc("alch_func", 2, "potion", "^888888 Ничего не нужно, я передумал^000000", .@craft_array);if ( !.@itemselect ) mes "Выбран пункт отмены.";else mes "Вы получите: "+callfunc("alch_func", 5, "potion", .@itemselect)+"шт";close;6 — выводит список необходимого для крафта выбранного элемента, синтаксис:callfunc("alch_func", 6, <префикс базы в кавычках>, <id выбранного элемента>);Пример:setarray .@craft_array[0],1,2,3,4;set .@itemselect, callfunc("alch_func", 2, "potion", "^888888 Ничего не нужно, я передумал^000000", .@craft_array);if ( !.@itemselect ) mes "Выбран пункт отмены.";else mes "Для создания необходимо:",callfunc("alch_func", 6, "potion", .@itemselect);close;7 — проверка на наличие всего необходимого для создания выбранного элемента, возвращает 0 - если всё необходимое есть и 1 - если чего-то нехватает, синтаксис:callfunc("alch_func", 7, <префикс базы в кавычках>, <id выбранного элемента>(, <кол-во starcramb>, <id элемента стихии>));Пример:setarray .@craft_array[0],1,2,3,4;set .@itemselect, callfunc("alch_func", 2, "potion", "^888888 Ничего не нужно, я передумал^000000", .@craft_array);if ( !.@itemselect ) { mes "Выбран пункт отмены."; close;}if ( callfunc("alch_func", 7, "potion", .@itemselect) ) { mes "Чего-то нехватает..."; close;}mes "Всё необходимое есть!";close;Параметры <кол-во starcramb> и <id элемента стихии> необходимы только для крафта оружия (уровень Strong и элемент стихии).Стихии:0 - Без стихий1 - Лёд2 - Земля3 - Огонь4 - Ветер8 — проверка и вывод недостающего для создания выбранного элемента, синтаксис:callfunc("alch_func", 8, <префикс базы в кавычках>, <id выбранного элемента>(, <кол-во starcramb>, <id элемента стихии>));Пример:setarray .@craft_array[0],1,2,3,4;set .@itemselect, callfunc("alch_func", 2, "potion", "^888888 Ничего не нужно, я передумал^000000", .@craft_array);if ( !.@itemselect ) { mes "Выбран пункт отмены."; close;}if ( callfunc("alch_func", 7, "potion", .@itemselect) ) { mes "Нехватает:"; callfunc("alch_func", 8, "potion", .@itemselect) close;}mes "Всё необходимое есть!";9 — процесс создания выбранного элемента, возвращает 0 - если создание прошло успешно, 1 - создание не удалось и 2 - если случились проблемы похожие на читорство игрока, синтаксис для варки:callfunc("alch_func", 9, <префикс базы в кавычках>, <id выбранного элемента>, <joblevel>, <int>, <dex>, <luk>, <Skill lvl Learning Potion>, <Skill lvl Pharmacy>);Синтаксис для крафта:callfunc("alch_func", 9, <префикс базы в кавычках>, <id выбранного элемента>, <joblevel>, <dex>, <luk>, <Anvil level>, <Skill lvl Iron create>, <Skill lvl Steel create>, <Skill lvl Element stone create>, <Skill lvl Smith>, <Skill lvl Weaponry>, <Skill lvl Oridecon>, <кол-во starcramb>, <id элемента стихии>);Уровни наковальни:0 - Anvil1 - Oridecon Anvil2 - Golden Anvil3 - Emperium Anvil10 — стоимость в Zeny выбранного элемента, синтаксис:callfunc("alch_func", 10, <префикс базы в кавычках>, <id выбранного элемента>);Пример:setarray .@craft_array[0],1,2,3,4;set .@itemselect, callfunc("alch_func", 2, "potion", "^888888 Ничего не нужно, я передумал^000000", .@craft_array);if ( !.@itemselect ) mes "Выбран пункт отмены.";else mes "Стоимость: "+callfunc("alch_func", 10, "potion", .@itemselect)+" Zeny";close;11 — проверка на наличие описания к предмету:callfunc("alch_func", 10, <префикс базы в кавычках>, <id выбранного элемента>);12 — вывод описания к предмету:callfunc("alch_func", 10, <префикс базы в кавычках>, <id выбранного элемента>);Примерное описание работы NPC в следующих постах. Изменено 17 мая, 2014 пользователем wl.illusion 6 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения