![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Здесь будут вывешаны самые простые скрипты на которых можно построить новичку свой модуль. Любой пост кроме скрипта с описанием будет считаться спамом и автор получит предупреждение. Всем Мастерам скриптов советую максимально разжевывать куда, как и зачем вставлять код. При этом максимально просто писать код. Этим мы поможем новичкам не только справиться с проблемой, но и понемногу научим понимать код. Сложные скрипты писать в другую тему.
============================ LEX: Беру тему под контроль. Если тут в скриптах или комментариях ошибки, пишу в то же посте, где допущена неточность. Авторам постов обратить внимание на эти ремарки и вносить коррективы по необходимости. ============================ Начем. Самое главное, это начало модуля. Тут все написано, как раздеть игрока, одеть, дать ему денег и отправить дальше. Ставится он на слот модуля OnClientEnter. NSS //:://////////////////////////////////////////////
//:: OnEnter am_mod_enter //:: Copyright © 2005 WRG! //::////////////////////////////////////////////// /* Скрипт на вход в модуль при старте. */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 22.08.2005 //::///////////////////////////////////////////// void main() { object oMod = GetModule(); // Наш модуль object oPC = GetEnteringObject(); // Того кто вошел // Если это не игрок (а ДМ к примеру) или уже было раз, то сделаем возврат // скрипта, т.е. дальше он не пойдет. if (!GetIsPC(oPC) || GetLocalInt(oMod, "START_GAME")) {return;} { SetLocalInt(oMod, "START_GAME", TRUE); // Что бы сработал только один раз //--------- Откроем туман над локацией если вам надо. К примеру в городе ------- ExploreAreaForPlayer(GetObjectByTag("ТАГ_НУЖНОЙ_ЛОКАЦИИ"), oPC); //--------------- Проводим деноминацию денежных накоплений --------------------- AssignCommand(oPC, TakeGoldFromCreature(GetGold(oPC),oPC,TRUE)); // Заберем все денежки //------------------ Убиваем весь инвентарь ------------------------------------ object oItem = GetFirstItemInInventory(oPC); // Первый итем в инвентаре while(GetIsObjectValid(oItem)) // Пока такой объект существует { DestroyObject(oItem); // Удаляем его oItem = GetNextItemInInventory(oPC); // Берем другой объект... } //------------------ Убиваем всю амуницию ------------------------------------- int i=0; while(i<14) // ПОКА i меньше 14. 14 - это количество всех слот у объекта { DestroyObject(GetItemInSlot(i, oPC)); // i++; // Это значит i увеличится на еденичку от своего значения // Было ноль к примеру, станет 1 и т.д. } //------------------------ Создаем предметы ------------------------------------ // Если вам нужны отдельно каждому классу по несколько предметов, то // скопируйте кусок кода еще и измените CLASS_TYPE_ Наведите курсор, // нажми F2 и выберите нужное значение константы // int Class = GetClassByPosition(1, oPC); // switch (Class) // В зависимости от класса // { // case CLASS_TYPE_BARBARIAN: // { // CreateItemOnObject("ResRef_Объекта", oPC,1); // } // case CLASS_TYPE_FIGHTER: // { // CreateItemOnObject("ResRef_Объекта", oPC,1); // } // } GiveGoldToCreature(oPC, 5000); // Даем золотишко CreateItemOnObject("ResRef_Объекта1", oPC, 1); CreateItemOnObject("ResRef_Объекта2", oPC, 1); CreateItemOnObject("ResRef_Объекта3", oPC, 30); // 1 - это количество в стеке, если вам надо 30 стрел, то ставьте там 30 //---------------------- Опознаем предметы ----------------------------------- object oItemCr = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItemCr)) { SetIdentified(oItemCr,TRUE); oItemCr = GetNextItemInInventory(oPC); } //-------------------- Уровень игрока для игры в модуле ------------------------ // К примеру нам нужен игрок 5 уровня. Смотрим таблицу уровней и видим, // что Level 5 = 10000 xp. { SetXP(oPC, 10000); } //---------------------- Оденем нашего игрока --------------------------------- AssignCommand(oPC, ActionEquipMostEffectiveArmor()); //---------------------------------- END --------------------------------------- } } |
![]() |
![]()
Сообщение
#2
|
|
Level 6 ![]() ![]() Класс: Волшебник Характер: Chaotic Good Раса: Человек ![]() |
Цитата Не понял, зачем в последнем скрипте тебе DeleteLocalString(), имя прекрасно поменяется и так Ilerien ты не поверишь - не меняется! И вообще творятся "чудеса" всяческие! У меня три "Невера" - "Шадоу", (собственно, ради ПЛ), мой старый "Хордес" и версия 1.69, свежепропатченная. Так вот, одни и те же скрипты то работают, то нет!. И ладно бы еще в разных версиях. Бывает, что не срабатывают в одной и той же версии, но в разных модах! (К примеру, на "Полигоне" все прекрасно, а копирую в "Сказку" и получаю большую фигу!) И ладно бы еще какие навороты с фильмами или вроде того... Нет, "глючат" детские скрипты проверки ветки диалога и тому подобное. Только один пример, для наглядности. В "совершены действия" диалога ставлю Neverwinter Script void main() { object oPC = GetFirstPC(); object oNpc = GetObjectByTag("NPC_TAG"); SetLocalInt(oNpc, "talked", 1); } Или еще проще: Neverwinter Script void main() { SetLocalInt(OBJECT_SELF, "talked", 1); } А потом проверяю, что этот самый "talked" действительно 1, не больше и не меньше: Neverwinter Script int StartingConditional() { int iResult; iResult = GetLocalInt(GetObjectByTag("NPC_TAG"), "talked") == 1; return iResult; } Так вот, на "Полигоне" ветка диалога открывается прекрасно, проверял на нескольких неписях неоднократно. А в "Сказке" то же самое, один в один - не работает. И подобных примеров у меня - множество, каждый описывать - никаких форумов не хватит... Может, наши гуру расскажут что-то полезное об этих, так сказать "универсальных" скриптовых глюках? Ну, которые встречаются наиболее часто. Если не совсем по теме просьба, прошу прощения. Но, думаю, такой "ликбез" для новичков будет полезен. Спасибо P.S. Дабы не отнимать зря время мастеров, объясню сразу: ошибки с настроиками пользователя, свойствами модуля, подключением хаков - исключены. В "Сказке" и "Полигоне" они абсюлютно идентичны. Причины в чем-то другом... |
![]() ![]() |
Текстовая версия | Сейчас: 27th April 2025 - 06:44 |