Перейти к содержанию

[NPC] Very Advanced Warper v2


wl.illusion

Рекомендуемые сообщения

[NPC] Very Advanced Warper v2

Осторожнее с настройками данного варпера, так же варпер весьма «тяжёлый» — использует много переменных, есть несколько циклов, размер которых зависит от внесённых по указанному направлению целей перемещения.

Описание

Данный Варпер полностью универсален, позволяет создавать сложные схемы перемещения, взымать различную оплату (купоны, зени, предмет(ы)).

Варпер указывает цены (перемещение может быть и бесплатным, о чём игроку будет сообщено), предлагает направления, а так же сообщает чего именно нехватает для перемещения и в каком кол-ве.

Скачать

Сам NPC: nt_warper.txt

NPC не будет работать без вот этого: nt_extra.txt

Настройка, добавление направлений

Скрипт достаточно сложный, поэтому принцип работы мы обсуждать не будем (кому интересно внутри достаточно много комментариев). Давайте поговорим о создание направлений и целей для перемещения.

Для начала определимся с некоторыми терминами, важный термин — Маркер направления. Всего может быть 5 направлений (запомните, это чертовски важно). Маркер направления — это символ-идентификатор (любой принимаемый символ скриптами).

Текстовые значения для меню направлений задаются в скрипте:

    set .menu_name_waycity$[.@def_waycity], "В город";
set .menu_name_waycity$[.@def_waydun], "В подземелье";
set .menu_name_waycity$[.@def_wayvip], "Особые места";
set .menu_name_waycity$[.@def_wayvip2], "Бесплатное перемещение";
set .menu_name_waycity$[.@def_wayvip3], "За предметы";

Можете заменить на свои значения, это делается только в одном месте и безболезненно.

В скрипте есть define для ID-направлений — их менять нельзя, это временные переменные, созданные для удобства создания целей для перемещения. Вот их список:

    set .@def_waycity, 1; // ID перемещения в город
set .@def_waydun, 2; // ID перемещения в подземелье
set .@def_wayvip, 3; // ID перемещения в vip
set .@def_wayvip2, 4; // ID перемещения в vip
set .@def_wayvip3, 5; // ID перемещения в vip

Каждый NPC имеет 5 разных маркеров, которые и определяют доступные перемещения для игрока. Рассмотрим имя NPC:

alberta,113,53,5    duplicate(nt_wrp)    Телепортация#00000_02    124

У любого NPC есть понятие «Скрытое имя», в указанном примере оно: «00000_02» — последние «_02» всего лишь порядковый номер NPC (кстати, будет лучше, если для каждого NPC они не будут совпадать, указывать их можно не только цифрами, но и буквами), а вот первые пять символов — это и есть Маркер направления. Данный маркер определяет с каким именно списком целей нужно работать. Каждый маркер — один символ!

<.@def_waycity><.@def_waydun><.@def_wayvip><.@def_wayvip2><.@def_wayvip3>

Раз заговорили о настройках NPC, то важно будет ещё сказать, что можно указать имя NPC отображаемое в диалогах и минимальный базовый уровень для работы с NPC.

    // Имя NPC отображаемое в диалогах
set .npc_name$, "Сервис Телепортации";

// Минимальный базовый уровень необходимые для телепортации
set .wrp_min_baselvl, 18;

Вы можете менять эти значения на своё усмотрение.

Теперь перейдём к самому важному — создание целей для перемещения. Пример:

    callsub L_AddWarpPoint, .@def_waycity, "0:(p|1),1:(p|1)", "Alberta", "alberta", 116, 56;

За добавления цели отвечает функция L_AddWarpPoint, её параметры для использования:

— ID-направления (.@def_waycity/.@def_waydun/.@def_wayvip/.@def_wayvip2/.@def_wayvip3)

— Работа со стоимостью Макера направлений

— Название цели для пункта меню

— Название карты (из map_index.txt)

— Координата X

— Координата Y

Стоимость задётся очень просто:

"<Маркер направления для данного ID-направления><тип стоимости>)|<стоимость>|<только для предметов - название предмета>;...<>"

Тип стоимости:

z — зени

p — кафра купоны

<id предмета> — предмет, который необходим, так же к данной записи добавляется параметр с названием, если указать '-', то имя будет браться из базы

Если ничего не указывать в стоимости, то перемещение будет бесплатно! (Например: "0:()")

Несколько примеров, для понимания:

"0:(p|1;z|500;909|20|-)"

В данном примере стоимость по Маркеру 0 составит: 1 кафра купон, 500 зени и 20 Jellopy (всё вместе, а не что-то по отдельности или что-то из перечисленного)

Более сложный пример

"0:(p|5;),1:(z|5000),3:(4001|1|Карта Поринга)"

В этом примере видно, что можно указывать стоимость сразу для нескольких маркеров разделённых ',', но вы можете и вызывать для каждого маркера отдельно функцию — оба способа обрабатываются корректно, пример всё в одном:

    callsub L_AddWarpPoint, .@def_waydun, "0:(p|5;),1:(z|5000),3:(4001|1|Карта Поринга)", "Муравьиный ад", "cmd_fild08", 320, 356;

Но, можно и вот так:

    callsub L_AddWarpPoint, .@def_waydun, "0:(p|5;)", "Муравьиный ад", "cmd_fild08", 320, 356;
callsub L_AddWarpPoint, .@def_waydun, "1:(z|5000)", "Муравьиный ад", "cmd_fild08", 320, 356;
callsub L_AddWarpPoint, .@def_waydun, "3:(4001|1|Карта Поринга)", "Муравьиный ад", "cmd_fild08", 320, 356;

Что ж, думаю будет уместен хороший сложный пример, давайте сделаем перемещение в Московию из Пронтеры и телепортацию на территорию Московии из самого города, укажем разные цены и сделаем, невозможным перемещение из Пронтеры на карту с мобами Московии, а вернуться в Пронтеру будет возможно только из Московии:


// Цели перемещения
// В Московии можно попасть из Пронтеры, но и с mosk_fild02 (сделаем за зени)
callsub L_AddWarpPoint, .@def_waycity, "0:(p|6),2:(z|1500)", "Moskovia", "moscovia", 223, 184;
callsub L_AddWarpPoint, .@def_waycity, "1:(p|5)", "Prontera", "prontera", 156, 183;

// Данж доступен только из московии (Маркер 1)
callsub L_AddWarpPoint, .@def_waydun, "1:(p|2)", "Moskovia Field", "mosk_fild02", 197, 247;


// Разместим NPC по местам
prontera,161,193,5 duplicate(nt_wrp) Телепортация#00000_17 124
moscovia,220,191,5 duplicate(nt_wrp) Телепортация#11000_44 124

mosk_fild02,194,252,4 duplicate(nt_wrp) Телепортация#22000_43 124

Схема, телепортироваться из Пронтеры можно только в Московию за 6 купонов (зачем Варперу в Пронтере портить в Пронтеру?), из Московии в город — Пронтеру за 5 купонов или в данж ("Moskovia Field") за 2 купона, с "Moskovia Field" можно попасть в город Московию за 1500 зеней.

Примечание

У меня используется cutin, который не стандартный, если у вас клиент будет крешится, то удалите все строки с cutin.

Если вы не понимаете зачем это нужно, то используйте стандартного Варпера, если для вас это сложно, то пишите простые скрипты. Это универсальный Варпер, если нужно помочь с созданием схем направления, то можете обращаться, попробуем решить вашу проблему вместе.

Изменено пользователем wl.illusion
  • Upvote 14
Ссылка на комментарий
Поделиться на другие сайты

Кнопочка нравится уже не считается за +?

UPD: "Вам и Sanasol любят это" капец,товарищи...

Изменено пользователем kadze
Ссылка на комментарий
Поделиться на другие сайты

Кнопочка нравится уже не считается за +?

UPD: "Вам и Sanasol любят это" капец,товарищи...

ой, я забыл вообще про это)) щяс тыкну)

Ссылка на комментарий
Поделиться на другие сайты


callsub L_AddWarpPoint, .@def_waydun, "0:(p|2),1:(p|2)", "Anthell", "cmd_fild08", 320, 356;
callsub L_AddWarpPoint, .@def_waydun, "0:(p|2),1:(p|2)", "Byalan Dungeon", "izlu2dun", 107, 94;
callsub L_AddWarpPoint, .@def_waydun, "0:(p|7),1:(p|7),2:(p|2)", "Moskovia Field", "mosk_fild02", 197, 247;
callsub L_AddWarpPoint, .@def_waydun, "0:(p|1),1:(p|1)", "Orc Dungeon", "gef_fild10", 70, 332;
callsub L_AddWarpPoint, .@def_waydun, "0:(p|1),1:(z|400)", "Payon Dungeon", "pay_arche", 48, 131;
callsub L_AddWarpPoint, .@def_waydun, "0:(p|1),1:(p|1)", "Pyramids", "moc_ruins", 69, 157;

Зачем класть, если надо дописывать?

Ссылка на комментарий
Поделиться на другие сайты


callsub L_AddWarpPoint, .@def_waydun, "0:(p|2),1:(p|2)", "Anthell", "cmd_fild08", 320, 356;
callsub L_AddWarpPoint, .@def_waydun, "0:(p|2),1:(p|2)", "Byalan Dungeon", "izlu2dun", 107, 94;
callsub L_AddWarpPoint, .@def_waydun, "0:(p|7),1:(p|7),2:(p|2)", "Moskovia Field", "mosk_fild02", 197, 247;
callsub L_AddWarpPoint, .@def_waydun, "0:(p|1),1:(p|1)", "Orc Dungeon", "gef_fild10", 70, 332;
callsub L_AddWarpPoint, .@def_waydun, "0:(p|1),1:(z|400)", "Payon Dungeon", "pay_arche", 48, 131;
callsub L_AddWarpPoint, .@def_waydun, "0:(p|1),1:(p|1)", "Pyramids", "moc_ruins", 69, 157;

Зачем класть, если надо дописывать?

Каждый в праве дописать свои точки для телепорта, делать под каждый сервер с прописыванием всех woe данжей, а небездумно брать чужой скрипт. Если давать всё готовое — то админов нубов меньше не станет.

А вообще, не нравится - попросите модераторов удалить тему, мне лично дела нет, free — не означает, что будет всё и сразу, проявите немного своего внимания и помогите доработать, вам скажут спасибо.

Изменено пользователем wl.illusion
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...
×
×
  • Создать...
Яндекс.Метрика