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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 83 84 85 86 87 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
2_advanced
сообщение Mar 23 2006, 19:47
Сообщение #2086


Level 9
Иконки Групп

Класс: Вор
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]



NSS
void main()
{
    object oPC = GetEnteringObject();
    if(GetIsDM(oPC)) // дм
    {
//...проверка по ключам/IP/спец итему и т.п.. - для извращенцев
    }
    else
    if(GetPlotFlag(oPC)) // может злобный ДМ в квесте повесит плот на игрока, а тот вылетит/перезайдет
    {
        SetPlotFlag(oPC, 0);
        BootPC(oPC);
    }
    else
    if(!GetXP(oPC)) // новый чар или тупящий нуб с софтом
    {
        SetXP(oPC, 1);
        BootPC(oPC);
    }
    else // плеер..
    {
    }
}
(IMG:style_emoticons/kolobok_light/prankster2.gif)

QUOTE
поставить чек на локу
не на локу!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
[MoF]Darth_Nick
сообщение Mar 24 2006, 03:46
Сообщение #2087


Level 6
Иконки Групп

Класс: Некромант
Характер: Chaotic Evil
Раса: Нежить
NWN: Скриптинг [PW]



да там по разному можно, главное суть

Ссылка, по которой вы попали на эту страницу является «мертвой» или удаленной.

Сообщение отредактировал [MoF]Darth_Nick - Mar 24 2006, 04:01
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
2_advanced
сообщение Mar 24 2006, 18:01
Сообщение #2088


Level 9
Иконки Групп

Класс: Вор
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]



NSS
// в не_пвп все ПЦ дружелюбны (IMG:style_emoticons/kolobok_light/blum3.gif)
    object oPC = OBJECT_SELF;
    object oTarget = GetSpellTargetObject();
    if(GetIsReactionTypeFriendly(oPC, oTarget))
        return;
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nashman
сообщение Mar 25 2006, 00:05
Сообщение #2089


Level 8
***

Класс: Тайный Лучник
Характер: Lawful Good
Раса: Эльф



Привет,
Обясните плс. (долбался долго...честно), как сделать невидимую дверь, я уже спрашивал и по способу, какой мне посоветовали у меня (IMG:style_emoticons/kolobok_light/sad.gif) . Нужно так, вы заходите в локу, разговариваете с НПС, а после вы уже видите дверь.....
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
2_advanced
сообщение Mar 25 2006, 00:37
Сообщение #2090


Level 9
Иконки Групп

Класс: Вор
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]



создавать на вейпоинте объект двери после определенных действий (или варианта в диалоге) игрока

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

примеры:
nw_o2_detectdoor - древний вариант
x2_**_secretdoor - ХоА вариант с хертбитами..
лучше написать что-то своё если для шарда делается
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Mar 27 2006, 08:05
Сообщение #2091


Level 9
Иконки Групп

Класс: Обыватель
Характер: Lawful Good
Раса: Человек
NWN: Модмейкер
Рыцарская Сага



QUOTE(2_advanced @ Mar 24 2006, 18:01) [snapback]73968[/snapback]
Привет,
Обясните плс. (долбался долго...честно), как сделать невидимую дверь, я уже спрашивал и по способу, какой мне посоветовали у меня . Нужно так, вы заходите в локу, разговариваете с НПС, а после вы уже видите дверь.....

В диалоге вызови потайную дверь из стандартной палитры скриптом…, тогда точка перемещения будет иметь тег ”DST_DOOR_SEC_1”.
NSS
void main()
{
object oWP = GetWaypointByTag("WP_XXX");// точка вызова двери
location Loc = GetLocation(oWP);
object oDoor = CreateObject(OBJECT_TYPE_PLACEABLE, "x0_sec_door1", Loc, TRUE, "DOOR_SEC_1");  // Объект дверь
}

Можно сделать и свою синьку двери, но нужно повесить на слот OnUsed скрипт перемещения (x0_o2_use_wdoor), или можно взять скрипт Айва из базы скриптов для новичков, или можешь воспользоваться моей версией. Если хочешь использовать секретный триггер, то вот краткая справка:
Секретный объект
Триггер содержит в названии ResRef объкта, который появится.
Точка, где появится объект LOC_+Тег триггера.
Тег точки перемещения DST_+Тег триггера.
NSS
//:://////////////////////////////////////////////
/*
     УНИВЕРСАЛЬНЫЙ СКРИПТ ПЕРЕМЕЩЕНИЙ ГЕРОЯ
*/

//:://////////////////////////////////////////////

void JumpFirstPC(object oWP)
{
object oPC = GetFirstPC();
object oSP = GetHenchman(oPC);
object oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION,oPC);
object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR,oPC);
object oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED,oPC);
object oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED,oPC);
   AssignCommand(oPC, ClearAllActions());
   AssignCommand(oSP, ClearAllActions());
   AssignCommand(oAnimal, ClearAllActions());
   AssignCommand(oFamiliar, ClearAllActions());
   AssignCommand(oDominated, ClearAllActions());
   AssignCommand(oSummoned, ClearAllActions());
AssignCommand(oPC, JumpToObject(oWP));
AssignCommand(oSP, JumpToObject(oWP));
AssignCommand(oAnimal, JumpToObject(oWP));
AssignCommand(oFamiliar, JumpToObject(oWP));
AssignCommand(oDominated, JumpToObject(oWP));
AssignCommand(oSummoned, JumpToObject(oWP));
}

void main()
{
object oPC = GetFirstPC();
object oSP = GetHenchman(oPC);
object oPoint = GetWaypointByTag("TP_" + GetTag(OBJECT_SELF));
  if (!(GetLocked(OBJECT_SELF) == TRUE)) // если замок открыт
   {
    DelayCommand(0.1, ActionPlayAnimation(ANIMATION_PLACEABLE_OPEN));
    DelayCommand(2.6, JumpFirstPC(oPoint)); // перемещаем всю компанию
    DelayCommand(6.6, ActionPlayAnimation(ANIMATION_PLACEABLE_CLOSE));
   }
  else
  {
    AssignCommand(OBJECT_SELF, SpeakString("Замок закрыт"));
    int nSkill = 20 + GetSkillRank(SKILL_OPEN_LOCK, oSP);
    if (nSkill >= GetLockUnlockDC(OBJECT_SELF)) // если спутник может открыть замок
    AssignCommand(oSP, SpeakString("Попробуй открыть, не получитсЯ Я сам открою!"));
    else
    AssignCommand(oSP, SpeakString("Мне не осилить этот замок…"));
   }
}
// помещать в слот OnUsed OnEnter OnClick OnAreaTransitionClick
//Перемещение героя и спутников для размещаемых объектов


Сообщение отредактировал gennady - Mar 27 2006, 09:01
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Mar 27 2006, 09:45
Сообщение #2092


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

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



Вот код скрипта. Вешаешь на триггер на OnEnter, на триггере вешаешь локальные стринги PLC_ResRef == ресрефу твоей создаваемой двери. Можешь серетный шкаф даже, любой предмет PLC_ и когда РС наступит на триггер, то произойдет проверка его ДС в случае успеха, выдаст ему дверь или еще что. Можешь наложить на твою дверь все что надо скриптом, напиши скрипт и присвой на триггер стрингом RUN_SCRIPT. Имя триггера - стринг над РС. Типа, О! Я нашел дверь! Так же хеньчманы боолтают и указывают что надо тут быть внимательным.
NSS
//:://////////////////////////////////////////////
//:: OnEnter  am_ten_searh_plc
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
  ПРИ УСПЕШНОЙ ПРОВЕРКЕ СКИЛА ПОИСК, СОЗДАЕМ PLC.

ResRef создаваемого объекта равен локальному
стрингу "PLC_ResRef". Создаем рандомно на
случайной локации или специально на месте объекта
"SECRET_PLC_"+[Таг Триггера]
Поле триггера KeyTag - сложность проверки скилла:
DC_EASY = 0; DC_MEDIUM = 1; DC_HARD = 2;
Локалка "ACTION_MODE_DETECT" устанавливает свойство
триггера, он сработает только когда РС в режиме
обнаружения.

*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 02.01.2006 С новым Годом!
//:://///////////////////////////////////////////
#include "nw_i0_tool"

/*  Функция рандомной локации, написана Баалом. */
location CreateRandomLocation(object oTarget, float fRadius, int bOnLine = TRUE)
{
  if(!bOnLine)
  fRadius=IntToFloat(Random(FloatToInt(fRadius)));

  float iXO=VectorMagnitude(GetPosition(oTarget))*cos(VectorToAngle(GetPosition(oTarget)));
  float iYO=VectorMagnitude(GetPosition(oTarget))*sin(VectorToAngle(GetPosition(oTarget)));
  float fRndomAngle=IntToFloat(Random(360));
  location lNEW=Location(GetArea(oTarget),Vector(iXO+fRadius*cos(fRndomAngle),iYO+fRadius*sin(fRndomAngle)),360.0);
  return lNEW;
}

void main()
{
  object oPC = GetEnteringObject();
  object oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC);
  object oSelf = OBJECT_SELF;
  string sMessage = GetName(oSelf); // Сообщение при обнаружении предмета
  string sHench1 = GetLocalString(oSelf, "HENCHMAN_string_1");
  string sHench2 = GetLocalString(oSelf, "HENCHMAN_string_2");
  string sHench3 = GetLocalString(oSelf, "HENCHMAN_string_3");
  string sHench4 = GetLocalString(oSelf, "HENCHMAN_string_4");
  string sHench5 = GetLocalString(oSelf, "HENCHMAN_string_5");
  int iDC = StringToInt(GetLockKeyTag(oSelf)); // Сложность проверки скилла

  if(!GetIsPC(oPC)||GetIsInCombat(oPC)||GetLocalInt(oSelf, "DEACTIVATED"))
      return;

  if(!GetActionMode(oPC, ACTION_MODE_DETECT) && GetLocalInt(oSelf, "ACTION_MODE_DETECT"))
  {
    if (GetIsObjectValid(oHench)) // Хеньчман нас предупреждает, что тут что-то есть
    {
    if(!GetLocalInt(oSelf, "HENCHMAN_SPEAK"))
    {
      SetLocalInt(oSelf, "HENCHMAN_SPEAK", TRUE);
      DelayCommand(0.2, AssignCommand(oHench, PlayVoiceChat(VOICE_CHAT_SEARCH)));
      DelayCommand(0.21, AssignCommand(oHench, SpeakString(sHench1)));
    }
    }
    if(GetGameDifficulty() == GAME_DIFFICULTY_EASY || !GetLocalInt(GetModule(), "DEBAG_PC"))
      SendMessageToPC(oPC, "<cу  >ВКЛЮЧИТЕ РЕЖИМ ОБНАРУЖЕНИЯ.</c>");
    return;
  }

  SetLocalInt(oSelf, "DEACTIVATED", TRUE);
  string sResRef = GetLocalString(oSelf, "PLC_ResRef");  // Объект создаваемый
  float f = GetLocalFloat(oSelf, "DISTANCE"); // Расстояние от РС для находки
  if(f==0.0) f = 5.0; // Если нет, то по умолчанию 5 метров радиус
  location lLoc = CreateRandomLocation(oPC, f);
  object oPlc = GetNearestObjectByTag("SECRET_PLC_"+GetTag(oSelf)); // Если конкретное место
  string sNewTag;
  if(oPlc != OBJECT_INVALID)
  {
      lLoc = GetLocation(oPlc);
      sNewTag = GetTag(oPlc);
  }

  if(AutoDC(iDC, SKILL_SEARCH, oPC))
    {
    if(sResRef != "")
    {
        effect eEffect = EffectVisualEffect(VFX_FNF_DISPEL);
        ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eEffect, lLoc, 4.0);
        object oNewPlc = CreateObject(OBJECT_TYPE_PLACEABLE, sResRef, lLoc,0,sNewTag);
        string sRunScript = GetLocalString(oSelf, "RUN_SCRIPT");
        if(sRunScript!="")
        DelayCommand(2.0, ExecuteScript(sRunScript, oNewPlc));
        AssignCommand(oPC, PlayVoiceChat(VOICE_CHAT_LOOKHERE));
        if(sMessage == "Объект + [Текст над РС]") sMessage = "";
        AssignCommand(oPC, SpeakString(sMessage));
        SendMessageToPC(oPC, "<c у >Вы обнаружили секретный объект.</c>");
        AssignCommand(oPC, ClearAllActions());
        AssignCommand(oPC, ActionDoCommand(SetFacingPoint(GetPositionFromLocation(lLoc))));
        DelayCommand(0.3, SetCommandable(FALSE, oPC));
        DelayCommand(2.0, SetCommandable(TRUE, oPC));

        if (GetIsObjectValid(oHench))
        {
          AssignCommand(oHench, ClearAllActions());
          AssignCommand(oHench, SetFacingPoint(GetPositionFromLocation(lLoc)));

          if(GetLocalInt(oSelf, "HENCHMAN_SPEAK"))
          {
            DelayCommand(3.2, AssignCommand(oHench, PlayVoiceChat(VOICE_CHAT_THANKS)));
            DelayCommand(3.21, AssignCommand(oHench, SpeakString(sHench2)));
          }
          else
            {
              DelayCommand(3.2, AssignCommand(oHench, PlayVoiceChat(VOICE_CHAT_YES)));
              DelayCommand(3.21, AssignCommand(oHench, SpeakString(sHench3)));
            }
      }
    }
    else
        {
          // Если мы забыли написать ResRef предметов, то ошибка
          SendMessageToPC(oPC, "<cу  >ОШИБКА!</c> Не могу создать объект. Нет ResRef-а!");
        }
    }
    else
        {
          if(GetLocalInt(oSelf, "HENCHMAN_SPEAK"))
          {
              AssignCommand(oPC, PlayVoiceChat(VOICE_CHAT_CANTDO));
              AssignCommand(oPC, SpeakString("Ты ошибаешься. Я ничего не нахожу."));
              DelayCommand(3.2, AssignCommand(oHench, PlayVoiceChat(VOICE_CHAT_YES)));
              DelayCommand(3.21, AssignCommand(oHench, SpeakString(sHench4)));
              DelayCommand(6.2, AssignCommand(oHench, PlayVoiceChat(VOICE_CHAT_BADIDEA)));
              DelayCommand(6.21, AssignCommand(oHench, SpeakString(sHench5)));

          }
        }
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
2_advanced
сообщение Mar 27 2006, 15:11
Сообщение #2093


Level 9
Иконки Групп

Класс: Вор
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]



NSS
const string _DOOR_RES = "x0_sec_tdoor1";

void chk()
{
    location lWP = GetLocalLocation(OBJECT_SELF, "_DOOR");

    if(GetDistanceBetweenLocations(lWP, GetLocation(OBJECT_SELF)) < 1.0f)
    {
        object oDoor = CreateObject(OBJECT_TYPE_PLACEABLE, _DOOR_RES, lWP);
        ActionResumeConversation(); // возобновляет диалог с того места, где остановился
    }
    else
    {
        if(GetCurrentAction() != ACTION_MOVETOPOINT)
            ActionMoveToLocation(lWP);

        DelayCommand(3.0f, chk());
    }
}

void main()
{
    object oWP = GetWaypointByTag(GetTag(OBJECT_SELF)); // тег вейпоинта = тегу НПС

    if(GetIsObjectValid(oWP))
    {
        ActionPauseConversation(); // прервать диалог до момента создания двери

        SetLocalLocation(OBJECT_SELF, "_DOOR", GetLocation(oWP));
        // можно возвращать НПС на место после диалога..
        SetLocalLocation(OBJECT_SELF, "_ORIG", GetLocation(OBJECT_SELF));

        AssignCommand(OBJECT_SELF, chk());
    }
    else
    {
        // ...
    }
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nashman
сообщение Mar 28 2006, 00:52
Сообщение #2094


Level 8
***

Класс: Тайный Лучник
Характер: Lawful Good
Раса: Эльф



Привет,
Впринципе, почти понял. Пока только один вопрос:
- после содания этой двери, мне нужно на onAreaTransitionClick скрипт поставить.

Я подумал так, мне нужно создать свою дверь мастером с этим самым скриптом, а потом именно ее вызывать? Извините за идиотизм :-\
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Mar 28 2006, 00:54
Сообщение #2095


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE(Nashman @ Mar 28 2006, 01:52) [snapback]74726[/snapback]
после содания этой двери, мне нужно на onAreaTransitionClick скрипт поставить.

нет, у этой двери нет такой штуки (areatransition это та голубенькая фигулина, на которую кликаешь при переходе меж дверьми). Так что у этой двери на onUse

Дверь сделать, чтобы в палитре была.
скриптом ее в нужном месте создавать.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nashman
сообщение Mar 28 2006, 01:03
Сообщение #2096


Level 8
***

Класс: Тайный Лучник
Характер: Lawful Good
Раса: Эльф



Привет,
Лекс, ты уж меня извени, но у меня есть такая штука, сначала идет она.
За ответ спасибо, эжжто то, что мне не хватало, тоесть проэкту (IMG:style_emoticons/kolobok_light/smile.gif) ..
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Mar 28 2006, 08:21
Сообщение #2097


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

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



Скрипт на такую дверь есть в разделе скриптов новичков.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
RoHaN
сообщение Mar 28 2006, 17:08
Сообщение #2098


Level 1


Класс: Варвар
Характер: True Neutral
Раса: Полуорк



Превед Кросавчеги. Я вернулся , ну вы чо не рады что ли . Ну и ладно ! У меня вопрос , а не подскажет мне кто-нибудь как сделать так чтобы монстрятник при появлении в локе летел к месту где находится твой перс .
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Mar 28 2006, 18:45
Сообщение #2099


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

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



Ставь точку спавна в том месте где перс может появиться. Или рядом.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lanilor
сообщение Mar 30 2006, 07:49
Сообщение #2100


Level 1


Класс: Волшебник
Характер: Chaotic Neutral
Раса: Полуэльф



Всем Превед!
У меня вопрос: как присвоить нпс'у новый диалог с помощью скрипта. Фишка в том, что старый диалог весьма велик и изобилует скриптами. Новый по размерам не меньше, и тоже с кучей скриптов(20-30 штук). Ставить лок. пременную на все ветки диалога - можно замучиться. Искал что-то вроде "setdialog" - ничего не нашел.
Помогите!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
[MoF]Darth_Nick
сообщение Mar 30 2006, 09:30
Сообщение #2101


Level 6
Иконки Групп

Класс: Некромант
Характер: Chaotic Evil
Раса: Нежить
NWN: Скриптинг [PW]



в OnConversation нпс есть абзац:
NSS
if (GetCommandable(OBJECT_SELF))
{
ClearActions(CLEAR_NW_C2_DEFAULT4_29);
BeginConversation();
}

ставиш проверку на локалки и изменяеш аргументы ф-ции..к примеру:
NSS
if (GetCommandable(OBJECT_SELF))
        {
            ClearActions(CLEAR_NW_C2_DEFAULT4_29);
            if(GetLocalInt(OBJECT_SELF,"SSS") == 1)
                BeginConversation("dlg1",oShouter);
            else
                BeginConversation("dlg2",oShouter);
        }


еще надо прикрутить проверку на таг или индивидуальный скрипт для нпс

Сообщение отредактировал [MoF]Darth_Nick - Mar 30 2006, 09:50
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Elf-Drow
сообщение Mar 30 2006, 14:49
Сообщение #2102


Level 8
***

Класс: Теневой Танцор
Характер: True Neutral
Раса: Эльф



Благодарим, еще вопрос, я пытался сделать генерацию книг, как в Проклятии Левора, как описывал Айван, но ничего не вышло. Пытался долго и муторно, по-моему это довольно непростой скрипт. И еще, локалка это LocalInt в переменных?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Mar 30 2006, 16:09
Сообщение #2103


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

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



Там надо сделать одну книгу и потом копу/едит делать все остальные. Все там работает.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Mar 30 2006, 21:14
Сообщение #2104


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

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



Еще раз увижу ПРЕВЕД или КРАСАВЧЕГИ - влеплю пред. Юзверей с одним сообщением забаню.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Mar 30 2006, 21:17
Сообщение #2105


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

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



Вот работающий скрипт из моего мода ПВ.
Создаешь предмет с тагом и РесРефом AM_ITM_BOOK001. Потом Копу/едит делаешь себе сколько надо, например 25 штук. Дальше. Открываешь свойства модуля и в адвансед, присваиваешь локальную переменную ALL_BOOKS_IN_MODULES равную 25. На шкафу вешай переменную BOOKS равную столько, сколько тебе нужно книг в шкафу при открытии. Не повесишь будет одна. И все.

NSS
//:://////////////////////////////////////////////
//:: OnOpen  am_pop_bookshelf
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
  Скрипт генирирует книги в инвентарь шкафа.
  Локальная переменная "BOOKS" на объекте
  означает количество генерируемых книг.
*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 23.07.2005
//:://///////////////////////////////////////////
void main()
{
    //-------------------------------------------------------------------------
    // Количество книг в палитре. Присваиваем на модуль "ALL_BOOKS_IN_MODULES"
    //-------------------------------------------------------------------------
    int iBook = GetLocalInt(GetModule(), "ALL_BOOKS_IN_MODULES");
    int iNum = GetLocalInt(OBJECT_SELF, "BOOKS"); // Сколько создаем в шкафу
    if (GetLocalInt(OBJECT_SELF, "HAS_OPERATED")) // Сработает один раз
      {
        return;
      }
      while(iNum >= 1) // Пока количество создаваемых книг больше или равно 1.
          {
    //-------------------------------------------------------------------------
    // Кстати... У меня ResRef-ы  am_itm_book001 ... am_itm_book021, поэтому
    // я извратился немного, лень было переделать книги... Но так проще создать
    // много одинаковых книг, цифры сами генерятся редактором, вы только
    // создаете первую, а дальше Изменить/Сохранить и все.
    //-------------------------------------------------------------------------
            int i = Random(iBook)+1; // Гененрируем случайную унигу
            string sN = "0";
            string sNN = "0";
            if (i >=100) {sNN ="";}
            if (i >=10) {sN ="";}
            object oBook = CreateItemOnObject("am_it_book"+sNN+sN+IntToString(i));
            iNum--; //Создали одну книгу. Отняли от количества еденичку...
          }
          SetLocalInt(OBJECT_SELF,"HAS_OPERATED",TRUE); // Запомним что уже сработал
}


QUOTE(Elf-Drow @ Mar 30 2006, 17:49) [snapback]75275[/snapback]
И еще, локалка это LocalInt в переменных?

Да.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
JCDenton
сообщение Mar 31 2006, 00:26
Сообщение #2106


Level 3
*

Класс: Тайный Лучник
Характер: Chaotic Good
Раса: Эльф



Суть:

Есть N обьектов с одинаковыми тэгами. и есть обьект с тегом в конце "00". Нужно сделать:
1) на месте обьекта появляется костерчик, обьет исчезает. (первый 00)
2) загорается ближайший к нему из N обьектов, обьет исчезает.
3) загорается следующий и так далее..

КОД:
NSS
void main()
{
    int iN;
    location lLoc;
    object oFire = GetObjectByTag("PLC_DRM_F00");
      if (GetLocalInt(OBJECT_SELF, "Counter") == 1)
      return;
      else
            SetLocalInt(OBJECT_SELF, "Counter", 2);
            while (oFire != OBJECT_INVALID || iN < 10)
              {
              lLoc = GetLocation(oFire);
              DestroyObject(oFire, 0.0f);
              oFire = GetNearestObjectByTag("PLC_DRM_F01", GetNearestObjectByTag("PLC_DRM_FR", OBJECT_SELF));
              CreateObject(OBJECT_TYPE_PLACEABLE, "plc_flamelarge", lLoc, FALSE, "PLC_DRM_FR");
              iN ++;
              }
}

! Счетчик юзания триггера отключен специально!
Результаты работы:
при первом нахождении на триггер:
1) загорается обьект "..00" 1 костром.
2) загорается соседний 9 кострами. конец.
при повторном нахождении горит соседний 10 кострами..

Спрашивается.. "Какого **ра?" (IMG:style_emoticons/kolobok_light/biggrin.gif)

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Elf-Drow
сообщение Mar 31 2006, 06:14
Сообщение #2107


Level 8
***

Класс: Теневой Танцор
Характер: True Neutral
Раса: Эльф



Пара вопросов по скриптам, приведенным в Проклятии Левора.
1 - Какой скрипт нужен и куда его ставить, чтобы НПС говорили фразы, то есть названия вейпоинтов, находящихся вокруг них ( Говорящие НПС в Проклятии)
2 - Как ваша команда создала такой шедевр как карта? Создание моделей в 3D-MAX, а затем вставка в игру?
Диалог, а затем скрипт с появляющейся картинкой и отправление к месту назначения? И как вы сделали, что бой по дороге может быть на случайной миле, т.е. Там на 11, 23, хоть на какой?
Заранее благодарю.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Mar 31 2006, 07:06
Сообщение #2108


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

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



1. Строка дожна быть в диалоге всегда ОДНА и содержать токен <CUSTOM220>. А содержание = имя вейпоинта. Я опускаю разные ньюансы, стринге на поинте, ответы РС локалки на расстояния и прочее. Даю обрезанный рабочий код. Вставляй и работай.
NSS
//:://////////////////////////////////////////////
//:: Выдает стринг, если НПС рядом с поинтом
//:: Copyright © 2006 WRG!
//:://////////////////////////////////////////////
/*
    Таг нашего поинта. WP_STRING
    <CUSTOM220> - [Имя поинта - строка НПС]
*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 17.01.2006
//:://////////////////////////////////////////////
int StartingConditional()
{
  object oWp = GetNearestObjectByTag("WP_STRING"); // Берем ближайший объект с тагом "WP_STRING"
  float fDist = 20.0f; // Расстояние реакции, дальше 20 метров строки не будет
  float fZone = GetDistanceBetween(OBJECT_SELF, oWp); // Дистанция срабатывания
//-------------------------------------------------------
  if(GetIsObjectValid(oWp)) // Если такой объект существует
  {
    if (fDist < fZone) // Если дистанция между Нпс и Поинтом больше установленной 20 м.
      return FALSE; // Строка не появится
      else // в противном случае (ЕЩЕ)
      {
          string sMessage = GetName(oWp); // Стринг sMessage равен имени поинту
          SetCustomToken(220, sMessage); // Установим токен 220 равный этому стрингу
          return TRUE; // Вернем строку функции StartingConditional(). Она покажет ее игроку
      }
    }
    else return FALSE; // Если такого объекта oWp нет, то нечего не появится
}


2. Карта и ее скрипты очень сложны. Не берись пока за это. Созреешь до сложных скриптов поговорим.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Mar 31 2006, 07:06
Сообщение #2109


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

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



А чего ты хотел? БЕРЕМ БЛИЖАЙШИЙ и насилуем его девять раз. (IMG:style_emoticons/kolobok_light/smile.gif) Тебе надо брать все объекты и перебирать по параметрам свои костры.
Нужен скрипт на факела-костры-жаровние? Вот мой скрипт запускается ExecuteScript на локацию.
Суть такая. Создаешь два объекта один горящий, другой потухший. На этих объектах в палитре вешаешь стриги ResRef-ы объектов что создаем вместо существующего. Например на плейсе AM_PLS_TORCH_ON стринг NEW_ResRef будет равен am_pls_torchoff. И на оборот. Годится скрипт для чего хошь. Днем объект создается, ночью дестроится. Вешай на вход в локацию. Или на хертбит с проверкой в локации ли РС.
NSS
//:://////////////////////////////////////////////
//:: OnEnter  am_exe_torch_del
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
    ВКЛЮЧАЕМ ОГОНЬ ФАКЕЛОВ И ЗВУК К НИМ НОЧЬЮ.

Таг факела = "AM_PLS_TORCH_OFF". Он должен быть с
в палитре с моделью факела без амбиент анимации.
Именно его и надо расставить в локации. Иначе будет
свет от факела гореть над ним. Его ResRef "am_pls_torchoff"
Таг горящего факела = "AM_PLS_TORCH_ON" ResRef "am_pls_torchon"
Звуковой объект ставим рядом с факелом, помните его таг
ДОЛЖЕН БЫТЬ УНИКАЛЬНЫМ ВО ВСЕМ МОДУЛЕ. Иначе не
сработает. К примеру таг моего звука, равен тагу
триггера плюс порядковый номер, начиная с еденицы:
AM_SOUND_TORTCH_(порядковый номер = i). Расставляйте
на локации факела и звуки рядом.
"NEW_ResRef" Локальный стринг ResRef-а объекта, который
создаем на месте этого. Все готово!

LocalInt "AREA_TORCH_ON_OFF" - запускает на локацию.

*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 08.06.2005
//:://///////////////////////////////////////////
void main()
{
  int i=1; // Первый порядковый номер тага звука
  float f=0.5; // Задержка дестроя
  string sSound = GetTag(OBJECT_SELF); // Приравнял таг Локации к звуовому
  object oTorch = GetFirstObjectInArea(OBJECT_SELF);
  object oSound = GetObjectByTag(sSound+IntToString(i)); // Звуковой объект
  effect eLight = EffectVisualEffect(VFX_DUR_LIGHT_YELLOW_20); // Свет факела
  int nEvent = GetUserDefinedEventNumber();
//======================= USERDEINE EVENT 1000 =================================
if (GetIsDay() || GetIsDawn())
//---------------------------------- ДЕНЬ --------------------------------------
  {
  while (GetIsObjectValid(oTorch))
      {
      if (GetTag(oTorch) == "AM_PLS_TORCH_ON" && !GetLocalInt(oTorch, "DO"))
        /* Проверяем все объекты на локации, берем с нужным тегом и без
            локальной переменной, что с объектом уже выключен. */

          {
          string sResRef = GetLocalString(oTorch, "NEW_ResRef");
          SetLocalInt(oTorch, "DO", TRUE);
          DestroyObject(oTorch, f);
          CreateObject(OBJECT_TYPE_PLACEABLE,sResRef, GetLocation(oTorch));
          f=f+0.2; // Сделай паузу!
          }
          if (GetIsObjectValid(oSound))
            {
            DebugObject(oSound);
            SoundObjectStop(oSound); // Выключаем звук
            i++;  // Присвоим объекту звука таг на единицу больше
            }
      oSound = GetObjectByTag(sSound+IntToString(i));
      oTorch = GetNextObjectInArea(OBJECT_SELF);
      }
    return;
  }
//======================= USERDEINE EVENT 3000 =================================
  else if (GetIsNight() || GetIsDusk())
//----------------------------- НОЧЬ -------------------------------------------
  {
  while (GetIsObjectValid(oTorch))
      {
      if (GetTag(oTorch) == "AM_PLS_TORCH_OFF" && !GetLocalInt(oTorch, "DO"))
        {
          string sResRef = GetLocalString(oTorch, "NEW_ResRef");
          SetLocalInt(oTorch, "DO", TRUE);
          DestroyObject(oTorch, f);
          object oTorchNew = CreateObject(OBJECT_TYPE_PLACEABLE,sResRef, GetLocation(oTorch));
          DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLight, oTorchNew));
          f=f+0.2; // Сделай паузу!
          }
          if (GetIsObjectValid(oSound))
            {
            DebugObject(oSound);
            SoundObjectPlay(oSound); // Включаем звук
            i++; // Присвоим объекту звука таг на единицу больше
            }
      oSound = GetObjectByTag(sSound+IntToString(i));
      oTorch = GetNextObjectInArea(OBJECT_SELF);
      }
  }
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Elf-Drow
сообщение Mar 31 2006, 10:10
Сообщение #2110


Level 8
***

Класс: Теневой Танцор
Характер: True Neutral
Раса: Эльф



Знаешь, Айван, вроде вы в Проклятии сделали так, чтобы Геркан был с героем одной расы, то есть ты гном он гном, ты эльф он эльф. Но это не работает! Я играю за эльфа, но Геркан у меня гном!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 83 84 85 86 87 > » 
Ответить в эту темуОткрыть новую тему
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 29th April 2025 - 23:19