Азы скриптинга NWN/NWN2, Итак, начинаем с самого начала... |
Здравствуйте, гость ( Вход | Регистрация )
Азы скриптинга NWN/NWN2, Итак, начинаем с самого начала... |
Oct 6 2007, 19:38
Сообщение
#1
|
|
Миловидный Бегрюссунг Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
В данной теме разрешается писать только обучающимся. Если кто-то найдет в моих материалах грубую ошибку, то может сообщить мне или Лексу и мы поправим.
Во первых, забудьте что скрипты это трудно непонятно и сложно. Забудьте все то что бедный ваш мозг пытается обработать безуспешно и вы не можете понять простые вещи. Это нормально. Я буду говорить не по книгам а просто, описывая ситуацию или знания необходимые вам максимально понятно и по возможности проектировать это на бытовом уровне, оперируя образными картинками. Так как именно такие схемы будут работать в вашем случае. Ведь люди с математическим умом все схватывают сами и на лету. Итак начнем. Скрипт сам по себе это маленький файлик. Он работает как любой файл в программе. То что вы пишете в редакторе это NSS просто информация для компилятора, в игре то что написано вами не работает, а работает скомпилированный файл NSC. Поэтому написанное в редакторе и не компельнутое не работает. Как отличить код хорошего кодера от разгильдяя? По аккуратности и описаниям-комментариям. У тех, кто понимает скрипт все правильно, кто не понимает все кидает в кучу. Поэтому сразу учитесь писать красиво и понятно. Сделайте себе шапку для скриптов и пишите в ней, давая описания. В папке скриптов через пол года вы сможете понять кто и что сделал в скрипте и элементарно для чего вам он нужен. Это важно. Аккуратность. Пример шапки скрипта: Neverwinter Script Source //::////////////////////////////////////////////// //:: Name: //:: Copyright © 2006 WRG! Team //::////////////////////////////////////////////// /* Описание */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 06.10.2007 //::////////////////////////////////////////////// void main() { } Дальше. |
Oct 12 2007, 10:14
Сообщение
#2
|
|
Миловидный Бегрюссунг Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
Такс... Продолжаем разговор (с) Карлсон который живет на крыше.
Мы с вами уже изучили то, что объекты, еффекты и прочие данные можно и НУЖНО описывать заранее. Теперь мы немного разберем то, как определить объект? Мы взяли очень простую схему OBJECT_SELF. попросту говорим что oSelf это ты сам. Но не всегда так просто можно найти нужный объект. В тулсете полно функций, которые определяют объект, например по тегу. Neverwinter Script Source object oNpc = GetObjectByTag("NPC_AIWAN"); Функция Get Objec tBy Tag говорит Взять Объект С Тегом. Но вы должны учитывать, что такой объект должен быть с уникальным тегом, что бы ваш скрипт работал нормально. Либо вы должны будете описать еще условия которые позволят найти вам ваш нужный объект. К примеру, если у вас несколько одинаковых НПС и вам нужен один из них то омжно воспользоваться функцией Get Nearest Object By Tag которая говорит Взять Ближайший Объект с Тегом. Эта функция имеет несколько параметров, в ней можно задать условие ближайший объект от кого? Ведь надо точно указать точку отсчета ближайшего объекта от, например двери. По умолчанию у скрипт будет брать ближайший объект от того кто запустил скрипт. Если скрипт стоял на триггере то возьмет ближайший от него. Дети ктороые играют в салочки кричат: "Кто последний тот тухлый банан! Кто первый тот чемпион!" и бегут в дверь. Так вот, чемпион будет именно тот, кто первым добежит и он скорее всего самый ближайший объект у двери. А зачастую он и кричит такую фразу. Всем задание. Создайте в редакторе модуль. Поставьте одну внутреннюю локацию. В ней три нпс с тегами NPC_ВАШ_НИК, поставьте дверь с тегом DOOR_ВАШ_НИК. Начертите подальше от двери триггер и на сло OnEnter поставьте скрипт и настройте его в соответсвии с вашими тегами. Neverwinter Script Source // Поиск чемпиона канады void main() { object oTrigger = OBJECT_SELF; // То на чем стоит скрипт object oDoor = GetObjectByTag("DOOR_AIWAN_01"); // Наша дверь object oNpc = GetNearestObjectByTag("NPC_AIWAN", oDoor); object oPC = GetEnteringObject(); // Тот кто НАСТУПИЛ на триггер string sSpeak = "Кто последний тот тухлый банан!"; // Фраза if(GetIsPC(oPC)) // ЕСЛИ тот кто наступил ИГРОК ТО ВЫПОЛНЯЕМ { AssignCommand(oNpc, ClearAllActions()); // Чистим стек команд AssignCommand(oNpc, SpeakString(sSpeak)); // Говорит фразу AssignCommand(oNpc, ActionForceMoveToObject(oDoor, TRUE)); // Бежит к двери // Если убрать TRUE то НПС просто пойдет пешком... } } В этом скрипте мы находим объекты как то: по тегу (Двери), по действию (Тот кто наступил на триггер), и берем ближайший с тегом. Мне важно что бы вы хотя бы попробовали и поняли как это все работает. Для того что бы понять что я дал поставьте НПС в линейку между триггером и дверью. Потом посомтрев что происходит вы удалите в строке: Neverwinter Script Source object oNpc = GetNearestObjectByTag("NPC_AIWAN", oDoor); // Измените на object oNpc = GetNearestObjectByTag("NPC_AIWAN"); // ЭТО Мы поменяли точку отсчета и теперь к двери побежит ближайший к ТРИГГЕРУ объект. У кого все получилось говорите. У кого что не получилось тоже. Жду... |
Текстовая версия | Сейчас: 26th September 2024 - 16:06 |