Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
> Скрипты для новичков, Самые простые скрипты с описанием
Aiwan
сообщение Aug 23 2005, 17:53
Сообщение #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 ---------------------------------------
    }
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
 
Открыть новую тему
Ответов
Aiwan
сообщение Sep 19 2005, 11:54
Сообщение #2


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



_kaa_ , :yes: согласен. Может кому нужны несколько точек персонально. Заморочки писать не стал со стрингами и прочим, это новичкам сложно. :D
Этот скрипт в отличие от верхнего отправляет НПС на ПЕРСОНАЛЬНЫЙ вейпоинт.
Neverwinter Script Source
//:://////////////////////////////////////////////
//:: ActionTaken  am_at_npcwp_exit
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
   NPC уходит на персональный вейпоинт, таг которого
   равен AM_WP_ESC_ плюс таг НПС и дестроится на ней.
   Ставим на диалог с НПС, устанавливаем в локации
   вейпоинт  AM_WP_ESC_[ТАГ_НПС]. Если надо что
   бы НПС побежал к точке, то присвоим на поинт
   локалку "RUN".

*/

//:://///////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 20.09.2005
//:://///////////////////////////////////////////
void main()
{
    object oPC = GetPCSpeaker(); // Игрок
    object oNpc = OBJECT_SELF; // НПС с которым идет диалог
    string sTag = GetTag(oNpc); // Таг НПС
    object oExit = GetNearestObjectByTag("AM_WP_ESC_"+sTag); // Вейпоинт
    int iRun = FALSE; // Параметр определяющий скорость НПС

    // Если в локации нет вейпоинта, то НПС скажет что некуда бежать
        if (!GetIsObjectValid(oExit)||(GetArea(oExit)!=GetArea(oNpc)))
        {
          AssignCommand(oNpc, SpeakString("Нет вейпоинта, или он не в этой этой локации!"));
          return;
        }
    if(GetLocalInt(oExit, "RUN"))
      {
       iRun = TRUE; // Если присвоить локалку "RUN" на поинт, то он побежит.
      }
     AssignCommand(oNpc, ClearAllActions()); // Почистим стек команд
     AssignCommand(oNpc, ActionForceMoveToObject(oExit, iRun, 1.0, 30.0));
     AssignCommand(oNpc, ActionDoCommand(DestroyObject(oNpc)));
     DelayCommand(0.5, SetCommandable(FALSE, oNpc)); // Что бы случайно не забыл
}


Еще простенький скрипт для описания предметов и ставить точку на локации. Выглядит так: вы подошли к вывеске, нажали использовать ее, у вас высветилась строка над ней и на карте появилась метка с названием гостиницы к примеру. Метка карты должна быть с тегом WP_ADD_MAP_NOTE и быть не дальше чем 5 (Пол квадратика тайла) метров от объекта. Но учтите, вы должны будете написать название на точке, но не ставить галочку Map Note Enebled.

Neverwinter Script Source
//:://////////////////////////////////////////////
//:: OnUsed  am_pus_sigh_spk
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
  Простенький скрипт при нажатии на объект выдает
  описание - локальный стринг "DISCRIPTION".
  Так же активирует метку на карте, но Вейпоинт
  должен стоять не дальше 5 метров от объекта.
  Его таг  "WP_ADD_MAP_NOTE".
*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 23.07.2005
//:://///////////////////////////////////////////
void main()
{
  object oPC = GetLastUsedBy();
  object oWPmap = GetNearestObjectByTag("WP_ADD_MAP_NOTE");
  string sMessage = GetLocalString(OBJECT_SELF, "DISCRIPTION");
//------------------------------------------------------------------------------
  SpeakString(sMessage); // Описание предмета стрингом
  if(!GetLocalInt(OBJECT_SELF, "MAPNOTE"))
    {
      if (GetIsObjectValid(oWPmap) && GetDistanceBetween(oWPmap, OBJECT_SELF) <= 5.0)
          //  Если есть метка такая и она не дальше 5 метров
          {
              SetMapPinEnabled(oWPmap, TRUE); // Активируем метку карты
          }
          SetLocalInt(OBJECT_SELF, "MAPNOTE", TRUE); // Пометим это
    }
}

А, чуть не забыл! :scratch: Локальный стринг "DISCRIPTION" - Это в свойствах объекта вписываете GetLocalString с именем DISCRIPTION а вот в строке пишете описание предмета.
Прикрепленные файлы
Прикрепленный файл  add_map.jpg ( 26.9 килобайт ) Кол-во скачиваний: 10
 
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

Сообщений в этой теме
- Aiwan   Скрипты для новичков   Aug 23 2005, 17:53
- - DraX   Долго думал, какой скрипт написать и решил, что но...   Aug 24 2005, 15:12
- - -fenix-   Решил расписать такой скрипт. Многие наверное хот...   Aug 24 2005, 15:50
- - DraX   Неожиданно пришла здравая идея! Многим может б...   Aug 24 2005, 16:32
- - Aiwan   Скрипт закрывает дверь на ночь и открывает ее днем...   Aug 25 2005, 08:42
- - Dik Morris   ЗЫ: Небольшое уточнение, в посте DraX’ са. QUOTE 4...   Aug 25 2005, 10:02
- - -fenix-   Вот скиптик для сидения на стуле, кушетке, диване,...   Aug 25 2005, 19:12
- - Aiwan   Скрипт закрывает дверь автоматически через заданно...   Aug 26 2005, 08:14
- - -fenix-   Если хотите, чтобы НПС, как только увидеk игрока п...   Aug 26 2005, 15:10
- - Aiwan   СКРИПТЫ БОЛЬШЕ НЕ ПОСТИТЬ. ТОЛЬКО МАСТЕРАМ РАЗРЕША...   Aug 26 2005, 16:37
- - Aiwan   Скрипт вешается на OnEnter триггера. Переходим в с...   Sep 7 2005, 22:29
- - Aiwan   Neverwinter Script Source//:://///////////////////...   Sep 18 2005, 21:18
- - _kaa_   QUOTE (Aiwan @ Sep 18 2005, 21:18) Neverwinte...   Sep 19 2005, 09:06
- - Aiwan   _kaa_ , согласен. Может кому нужны несколько то...   Sep 19 2005, 11:54
- - Lex   QUOTE (Lex @ Sep 22 2005, 15:44)описание - л...   Sep 22 2005, 14:44
- - Aiwan   Стандартный скрипт на слот OnSpawn НПС. Данный скр...   Oct 2 2005, 14:43
- - Aiwan   Проверка Харизмы у игрока. Если она 16 или больше,...   Oct 8 2005, 11:07
- - Aiwan   Универсальный скрипт, который ставится на люк (Дер...   Oct 9 2005, 19:26
- - Aiwan   Ставим скрипт на OnEnter енкаучера. Делаем его не ...   Jan 18 2006, 02:00
- - Aiwan   НПС после нападения становится нейтральным и начин...   Mar 31 2006, 07:09
- - Sugo77   А этот скрипт на проверку игрока в другой локации,...   May 14 2008, 21:59
- - Aiwan   Цитата(Sugo77 @ May 14 2008, 23:59) А это...   May 15 2008, 18:20
- - Ogneslav   Товарищи, я бы хотел сделать заклинание glyph of w...   Jul 2 2008, 19:09
- - Aiwan   Вопрос не по этой теме. Задай в теме вопросов по с...   Jul 2 2008, 19:24
- - Chiffa   Да, хороший скрипт, который отправляет непися в то...   Nov 14 2008, 02:09
- - Ilerien   Стремление к универсальности в порядке вещей, если...   Nov 14 2008, 22:26
- - Chiffa   ЦитатаНе понял, зачем в последнем скрипте тебе Del...   Nov 15 2008, 02:49
- - Nao   Хмм. я тоже придложу два простеньких скрипта для н...   May 19 2009, 18:20
- - Lex   первый скрипт убрал, тк в НВН2 есть стандартный бо...   May 20 2009, 08:41
- - Nao   можно заменить альтернативно: ставим урон на 10000...   May 21 2009, 18:43
- - Lex   в первом посте темы указано, для чего она создана ...   Aug 18 2010, 11:31
- - tyrrael   можно ли зделать так, чтобы войдя в установленую т...   Oct 4 2010, 19:20
- - Deirel   tyrrael, можно просто сделать так: Neverwinter S...   Oct 4 2010, 21:21
- - tyrrael   а можете по подробней сказать как зделать чтобы np...   Oct 6 2010, 22:29
- - Aiwan   Цитата(tyrrael @ Oct 7 2010, 01:29) а мож...   Oct 7 2010, 12:03
|- - virus_found   Цитата(Aiwan @ Oct 7 2010, 12:03) а еще к...   Oct 8 2010, 10:39
- - Talarasha   Наверное, многим известно, что к 1.69 галочка ...   Jul 30 2011, 18:53
- - ReZkiy   Послушайте,пожалуйста. Мой случай происходит дома ...   Aug 28 2011, 14:31
- - wirTUS   1) Извиняюсь за оффтоп 2) Эта тема не для задавани...   Aug 28 2011, 18:06
|- - ReZkiy   Цитата(wirTUS @ Aug 28 2011, 21:06) 1) Из...   Aug 28 2011, 18:48
- - ReZkiy   Мастера!Подскажите пожалуйста,что нужно в этой...   Aug 30 2011, 10:42
- - ReZkiy   Если кому нужно: Мой личный скрипт мертвого. Neve...   Aug 31 2011, 15:37
- - Talarasha   ЦитатаЕсли кому нужно: Мой личный скрипт мертвого....   Sep 3 2011, 09:25
|- - ReZkiy   Цитата(Talarasha @ Sep 3 2011, 12:25) Тво...   Sep 3 2011, 14:05
- - Talarasha   ЦитатаЗАБЫЛ!Слот OnSpawn - вот куда подходит м...   Sep 3 2011, 15:08
|- - ReZkiy   Цитата(Talarasha @ Sep 3 2011, 18:08) Воз...   Sep 4 2011, 12:50
- - greye   Цитата(ReZkiy @ Sep 3 2011, 14:05) ЗАБЫЛ...   Sep 4 2011, 13:36
|- - ReZkiy   Цитата(greye @ Sep 4 2011, 16:36) А по ка...   Sep 6 2011, 13:09
- - denis0k   ЦитатаА можно сделать так,что бы в трактире НПС си...   Sep 6 2011, 16:35
- - ReZkiy   Цитата(denis0k @ Sep 6 2011, 19:35) В мес...   Sep 6 2011, 20:04


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 29th April 2024 - 18:37