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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
14 страниц V  « < 2 3 4 5 6 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты: Все вопросы, Алгоритмы, оптимизация, особености и хитрости в скриптинге
Milfes
сообщение Mar 4 2007, 17:47
Сообщение #76


Level 5
**

Класс: Друид
Характер: Lawful Neutral
Раса: Человек



QUOTE
Этот скрипт кидает кондишен сна на кричу, но не заставляет ее лечь на землю.

Ты не прав, он ложится, я выяснил, что он не работает именно на onSpawn. То есть сама функция работает. Странно конечно, что на onSpawn не работает.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Mar 4 2007, 17:56
Сообщение #77


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



Попробуй на onSpawn в скрипте поставить небольшую задержку.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Milfes
сообщение Mar 4 2007, 18:08
Сообщение #78


Level 5
**

Класс: Друид
Характер: Lawful Neutral
Раса: Человек



Нет не помогает, но складывается такое ощещение, что на оnSpawn не срабатывает именно анимация, что бы он лег, а сам НПС как бы спит, но стоя.

Сообщение отредактировал Milfes - Mar 4 2007, 18:09
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Mar 4 2007, 18:36
Сообщение #79


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



А ты какую задержку ставил? Попробуй поставить две секунды:
NSS
DelayCommand(2.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectSleep(),OBJECT_SELF));

Если сработает, то уменьшай время, чтобы понять какая задержка нужна, ну а если не получицо. Хм... Не судьба ведать пока. (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Milfes
сообщение Mar 4 2007, 18:42
Сообщение #80


Level 5
**

Класс: Друид
Характер: Lawful Neutral
Раса: Человек



Я вообще 3 секунды ставил. Да я впринципе на диалоге повесил, меня просто удивляет, что на onSpawn не работает. Наверно обсидан так хорошо сделал.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Mar 5 2007, 00:50
Сообщение #81


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

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



Такая задержка может не сработать:
NSS
DelayCommand(2.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectSleep(),OBJECT_SELF));


Правильно:
NSS
effect eSleep;
DelayCommand(2.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSleep, OBJECT_SELF));


NSS
// Delay aActionToDelay by fSeconds.
// * No return value, but if an error occurs, the log file will contain
//  "DelayCommand failed.".
// It is suggested that functions which create effects should not be used
// as parameters to delayed actions.  Instead, the effect should be created in the
// script and then passed into the action.  For example:
// effect eDamage = EffectDamage(nDamage, DAMAGE_TYPE_MAGICAL);
// DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget);
void DelayCommand(float fSeconds, action aActionToDelay)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Mar 5 2007, 09:08
Сообщение #82


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

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



а попробовать анимацией положить его не пробовали?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ragdaj
сообщение Mar 5 2007, 18:34
Сообщение #83


Level 1


Класс: Обыватель
Характер: Chaotic Neutral
Раса: Человек



Даже не уверен, возможно ли такое - но как сделать, чтоб при начале кампании, проверялся класс РС, и взависимости от него, грузилась та, или иная область (ну к примеру - выбрал война - начинаешь в казармах, мага - в лаборатории и т.д.)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Mar 5 2007, 19:04
Сообщение #84


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

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



много раз это обсуждалось, скрипт вынесен в Вопросы и Ответу. (там правда было разделение по расе, но суть одна и та же)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ragdaj
сообщение Mar 5 2007, 19:50
Сообщение #85


Level 1


Класс: Обыватель
Характер: Chaotic Neutral
Раса: Человек



Это разобрался. Спасибо. А вот теперь сложный вопрос - возможно ли как то скриптами прикрутить такую вещь, как использование предметов на объекте.
Не через диалоги!
Перетаскиваешь предмет из инвентаря на НПС\объект и происходит запланированное действие. К примеру порох на костер -> происходит вспышка (пример с потолка).
Диалоговая система не особо устраивает - ибо при обладание нужного предмета его использование становится очевидным - так как появляется необходимая строка в диалоге. Додумываться, как следствие, не надо.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Mar 5 2007, 21:02
Сообщение #86


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

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



Просто перетаскивать не выйдет - предмет просто будет выброшен, но можно добавить к свойствам предмета возможность "юзабельности".

Cast Spell -> Unique Power
Результат прописываешь в скрипте "i_ТэгВещи_ac".
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Milfes
сообщение Mar 6 2007, 11:14
Сообщение #87


Level 5
**

Класс: Друид
Характер: Lawful Neutral
Раса: Человек



QUOTE
а попробовать анимацией положить его не пробовали?


Анимацией тоже не получается, он ее на onSpawn кажется вообще не воспринимает, так как и у эффекта сна не срабатывает только анимация(НПС не на что не реагирует пока эффект не снять, но стоит).

Сообщение отредактировал Milfes - Mar 6 2007, 11:15
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
diggers
сообщение Mar 19 2007, 21:36
Сообщение #88


Level 2
*

Класс: Фея
Характер: Chaotic Good
Раса: Фея




Nwn2scriptcompiler.exe лежит в корневой папке, но на попытки подсунуть ему .nss не отзывается. Подскажите, как компилировать скрипты без запуска громоздкого тулсета?

Нвн2 скрипты не кеширует, можно править их в оверрайде\модуле сохраненном как папка, перезапускать текущий модуль и смотреть результат.
Вот только делать бы это без тулсета, который ест ресурсов больше чем сам нвн.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Oranj
сообщение Mar 30 2007, 20:44
Сообщение #89


Level 6
**

Класс: Волшебник
Характер: True Neutral
Раса: Эльф



Есть ли возможность при помощи скриптов сделать включение/выключение источника света в определенные время суток?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение Apr 2 2007, 10:46
Сообщение #90


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

Класс: Страж Тьмы
Характер: True Neutral
Раса: Человек
МАСТЕР D&D



Есть система ручного включения/выключения источников света.

Цитата
Есть ли возможность при помощи скриптов сделать включение/выключение источника света в определенные время суток?
Может кто из мастеров напишет или выложит уже имеющуюся?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Oranj
сообщение Apr 2 2007, 16:28
Сообщение #91


Level 6
**

Класс: Волшебник
Характер: True Neutral
Раса: Эльф



Предложенный вариант посмотрел, но ничего не понял, так как очень далек от скриптинга и занимаюсь только маппингом (IMG:style_emoticons/kolobok_light/smile.gif) Было бы хорошо, если кто-то напишет скрипт и объяснит как его применить.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Sugo77
сообщение May 2 2007, 19:27
Сообщение #92


Level 3
*

Класс: Монах
Характер: Lawful Good
Раса: Эльф



Привет всем,я новичок в создании и использовании скриптов но в создании модулей уже принимаю участие уже 5 лет начиная с нвн1,а теперь уже и осваиваю нвн2 ,и вот мои первые 2 вопроса,заранее прошу неругать если уже были,
просто я искал на них ответы во многих разделах вашего форума и ненашол(

Как сделать так чтоб монстры респились,ну то есть воскрешались через некоторое время после смерти?
Вот что я испробовал и недобился(
открываю свой модуль скажем Area 1 -далее свойства етой ARea1(Properites) Дальше во всех трех строчках(On_heartbeat On_enter On_dead)повставлял
все найденые поисковиком,етих строчек скрипты с именем respawn их нашлось семь ШТук!(gr_respawn,gui_death_respawn,gui_death_respawn_self,nw_o0_respawn,x0_o0respawn,x0_o0_repawnset,x2_respawn)вот перечислил те что находилис поисковиком,дак я их все на свойствах локации повставлял в строчки:"On_heartbeat On_enter On_dead" и недобился респа,и на свойствах монстров,тоже в строчки:"On_dead,On_heartbeat",вставлял ети семь стандартных скриптов НВН2,но не один из етих семи скриптов невернул неодного монстра к жизни на заданную точку,а ждал я намного больше шести секунд,респа монстров(((
Может не ети скрипты надо выбирать а какой то другой??? или самому прописать?

А второй вопрос: как фракцию сменить?(подхожу к люблму обьекту тыкаю и стаю хостаил как ето сделать?),тоесть чтоб пвп шард создать надо чтоб обязательно кто то один был скажем faction:*comoner*,Другой:*hostile*
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение May 3 2007, 08:12
Сообщение #93


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

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



Цитата(Sugo77 @ May 2 2007, 20:27) [snapback]107708[/snapback]
Вот что я испробовал и недобился(
открываю свой модуль скажем Area 1 -далее свойства етой ARea1(Properites) Дальше во всех трех строчках(On_heartbeat On_enter On_dead)повставлял
все найденые поисковиком,етих строчек скрипты с именем respawn их нашлось семь ШТук!(gr_respawn,gui_death_respawn,gui_death_respaw
n_self,nw_o0_respawn,x0_o0respawn,x0_o0_repawnset,
x2_respawn)вот перечислил те что находилис поисковиком,дак я их все на свойствах локации повставлял в строчки:"On_heartbeat On_enter On_dead" и недобился респа,и на свойствах монстров,тоже в строчки:"On_dead,On_heartbeat",вставлял ети семь стандартных скриптов НВН2,но не один из етих семи скриптов невернул неодного монстра к жизни на заданную точку,а ждал я намного больше шести секунд,респа монстров(((
Может не ети скрипты надо выбирать а какой то другой??? или самому прописать?

оригинально. Впервые встречаю такой способ решения поставленной задачи.
Скрипты надо или писать под свои конкретные нужды, или брать готовые и вставлять (возможно модернизируя). Есть специальные уже написанные скриптовые системы для респа монстров. Лучше у шардовиков спросить об этом по подробнее.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vanes
сообщение May 3 2007, 08:49
Сообщение #94


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

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



по поводу спавна мобов была уже тема
см. тут http://www.city-of-masters.ru/forums/index.php?showtopic=287
там вроде и линки какие есть

я, как и раньше, отдаю предпочтение NESS-подобным спавнерам...
собственно такой наверное проще самому написать, чем разбираться с чьим то...
щас к сожалению доступа к модулю нет, как будет - выложу свой вариант...

Цитата
А второй вопрос: как фракцию сменить?(подхожу к люблму обьекту тыкаю и стаю хостаил как ето сделать?),тоесть чтоб пвп шард создать надо чтоб обязательно кто то один был скажем faction:*comoner*,Другой:*hostile*

не обязательно...
кричи из одной фракции замечательно могут бить друг друга (IMG:style_emoticons/kolobok_light/smile.gif)
честно говоря точно не помню функции, но попробуй SetIsEnemy()... если не подойдет, посмотри в лексиконе все что с этой функцией связано, наверняка какие либо смежные с ней функции тебе помогут...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Sugo77
сообщение May 3 2007, 15:27
Сообщение #95


Level 3
*

Класс: Монах
Характер: Lawful Good
Раса: Эльф



Vaness,по предложенной тобой ссылке нет ничего конкретного,неодного примера не инструкций(
Единственное что я уяснил для начало надо хотябы заиметь себе програмкуу Ness какуюто,попробовал поискать в интернете ,ссылки на нее битые некачается(

Если у тебя есть рабочие ссылки на ету прогу то вылож плиз или саму прогу скинь плиз на мое мыло если нетрудно

sugo3377@mail.ru

Кстати в теме с просьбами о написании я также изложил ети 2 просьбы чтоб кто то знаюший в етом деле толк, описал подробно алгоритм, и хотябы один рабочий пример,на респ и фракции я ж еше повторяюсь новичок в етом( но огромное желание научится и добится цели.

Вот нашол всеже сайт от куда Несс качается LRJOnline_net - NESS оно не оно?


Тут вроде для нвн 1 несс или он всем подходит?

Далее куда етот файлик NESS_8_1_3Full.erf нужно устаноить чтоб начать им пользоватся в НВН2 тулсете?

Хотелось бы все поподробнее от вас учителей услышать)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vanes
сообщение May 3 2007, 15:47
Сообщение #96


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

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



щас выложу свой скрипт спавна

суть простая...
в локе ставятся вейпоинты с определенным тегом и именем
имя имеет вид
SP_SGx_SDy_SNz1-z2_SRn_END
где x - принимает значение 0 (спавнить конкретного моба) или 1 (спавнить моба из группы)
y - задержка между спавнами
z1 и z2 - соответственно минимальное и максимальное количество мобов
n - на каком максимальном расстоянии от вейпоинта может появиться моб
в теге вейпоинта указывается либо тег моба, либо тег группы для спавна


это на OnEnter локи
* при входе игрока запускается псевдохарбит
Neverwinter Script Source
void main()
{
    object oArea = GetArea(OBJECT_SELF);
    object oPC = GetEnteringObject();
    if(GetIsDM(oPC)) return;
    if(GetIsPC(oPC)){
        int nCount = GetLocalInt(oArea, "nPlayerCount");
        nCount++;
        SetLocalInt(oArea, "nPlayerCount", nCount);
        if(GetLocalInt(oArea, "bNeedSpawn")==FALSE){
            SetLocalInt(oArea, "bNeedSpawn", TRUE);
            if(GetLocalInt(oArea, "bNeedClear")==FALSE){
                ExecuteScript("vr_spawn_general", oArea);
            }else{
                SetLocalInt(oArea, "bNeedClear", FALSE);
            }
        }
    }
}


это на OnExit локи
* при выходе всех игроков с локи замораживает спавнер, если же выходит моб, то не позволяет ему выйти из локи и возвращает на место спавна
Neverwinter Script Source
void main()
{
    object oArea = GetArea(OBJECT_SELF);
    object oPC = GetExitingObject();
    if(GetIsDM(oPC)) return;
    if(GetIsPC(oPC)){
        int nCount = GetLocalInt(oArea, "nPlayerCount");
        nCount--;
        SetLocalInt(oArea, "nPlayerCount", nCount);

        if(nCount<=0){ // no PC in location
            SetLocalInt(oArea, "bNeedSpawn", FALSE);
            object oWP;
            int nSpawnersCount = GetLocalInt(oArea, "nSpawnersCount");
            int i;
            for(i=1; i<=nSpawnersCount; i++){
                oWP = GetLocalObject(oArea, "Spawner"+IntToString(i));
                if(GetLocalInt(oWP, "nChildCount")>0){ // if any spawner has children
                    SetLocalInt(oArea, "nLastPCExitTime", GetLocalInt(GetObjectByTag("vr_dmhelper"), "nCurrentTime"));
                    SetLocalInt(oArea, "bNeedClear", TRUE);
                    break;
                }
            }
        }
    }else if(GetIsObjectValid(GetLocalObject(oPC, "parent"))){
        //SendMessageToPC(GetFirstPC(), "name="+GetName(oPC));
        object oCreature = CreateObject(OBJECT_TYPE_CREATURE,
                        GetResRef(oPC),
                        GetLocalLocation(oPC, "lHomeLocation"));

        SetLocalLocation(oCreature, "lHomeLocation", GetLocalLocation(oPC, "lHomeLocation"));

        DeleteLocalInt(oPC, "TotalDamage");
        int i;
        for(i=1;i<=GetLocalInt(oPC, "TotalDamagers");i++){
            DeleteLocalObject(oPC, "Damager"+IntToString(i));
            DeleteLocalInt(oPC, "Damage"+IntToString(i));
        }
        DeleteLocalInt(oPC, "TotalDamagers");
        DeleteLocalInt(oPC, "nPreviousHP");
        DeleteLocalObject(oPC, "parent");
        DeleteLocalLocation(oPC, "lHomeLocation");

        DestroyObject(oPC);
    }
}


собственно сам скрипт спавна
*void main() - как раз таки тот самый псевдо харбит, который запускается с частотой, указанной в строках AssignCommand(oArea, DelayCommand(10.0, ExecuteScript("vr_spawn_general", oArea)));
*void CheckWaypoints(object oArea) - проверяет все спавнпоинты в локи и при необходимости их спавнит
*void Spawn(object oWP) - процедура которая непосредственно создает мобов в точках спавна
*void StoreSpawns(object oArea) - срабатывает 1 раз за рестарт... задача его в том, чтобы "расшифровать" тег спавнпоинта и занести все данные в локальные переменные
*void ClearLocationFromCreatures(object oArea) - в случае необходимости деспавна очищает локацию от мобов
Neverwinter Script Source
// SPAWN SYSTEM
// for NWN Shard "Validor 2"
// main script
/* Scripted by Vanes */

#include "vr_spawn_groups"
#include "vr_config"

void CheckWaypoints(object oArea);
void Spawn(object oWP);
void StoreSpawns(object oArea);
void ClearLocationFromCreatures(object oArea);


void main() // psevdo heartbeat
{
    object oArea = OBJECT_SELF;

    if(GetLocalInt(oArea, "bNeedSpawn")==TRUE){
        CheckWaypoints(oArea);
        //SendMessageToPC(GetFirstPC(), "attemting to spawn... "+ GetName(oArea));
        AssignCommand(oArea, DelayCommand(10.0, ExecuteScript("vr_spawn_general", oArea)));
        return;
    }
    if(GetLocalInt(oArea, "bNeedClear")==TRUE){
        //SendMessageToPC(GetFirstPC(), "attemting to clear... "+ GetName(oArea));
        //SendMessageToPC(GetFirstPC(), "nLastPCExitTime = " + IntToString(GetLocalInt(oArea, "nLastPCExitTime")));
        //SendMessageToPC(GetFirstPC(), "nCurrentTime = " + IntToString(GetLocalInt(GetObjectByTag("vr_dmhelper"), "nCurrentTime")));
        if((GetLocalInt(oArea, "nLastPCExitTime")+SPAWN_CLEAR_LOC_DELAY)<=GetLocalInt(GetObjectByTag("vr_dmhelper"), "nCurrentTime")){
            //SendMessageToPC(GetFirstPC(), "clearing... "+ GetName(oArea));
            ClearLocationFromCreatures(oArea);
            SetLocalInt(oArea, "bNeedClear", FALSE);
        }else{
            AssignCommand(oArea, DelayCommand(10.0, ExecuteScript("vr_spawn_general", oArea)));
        }
        return;
    }
}

void CheckWaypoints(object oArea) // check for WP status (waiting for delay end,
                                  // waiting for children death, need pawn now)
{
    if(GetLocalInt(oArea, "bSpawnsStored")==FALSE){
        StoreSpawns(oArea);
        SetLocalInt(oArea, "bSpawnsStored", TRUE);
    }
    object oWP;
    string sName;
    int nPos, nSpawnDelay, nStartDelay, nCurrentTime;
    int i;
    int nSpawnersCount = GetLocalInt(oArea, "nSpawnersCount");
    //SendMessageToPC(GetFirstPC(), "nSpawnersCount="+IntToString(nSpawnersCount));
    for(i=1; i<=nSpawnersCount; i++){
        oWP = GetLocalObject(oArea, "Spawner"+IntToString(i));
        sName = GetName(oWP);
        //SendMessageToPC(GetFirstPC(), "checking WP " + sName);
        if(GetLocalInt(oWP, "nSpawnDelay")==0){ // first check after module started
            nPos = FindSubString(sName, "SG");
            nSpawnDelay = StringToInt(GetSubString(sName, 5, nPos-6))*60;
            //int nTime = GetLocalInt(GetObjectByTag("vr_dmhelper"), "nCurrentTime");
            //if(nTime!=0){
            //SetLocalInt(oWP, "nStartDelay", 60);
            SetLocalInt(oWP, "nSpawnDelay", nSpawnDelay);
            //}
            Spawn(oWP);
        }
        if(GetLocalInt(oWP, "nChildCount")<=0){
            nStartDelay = GetLocalInt(oWP, "nStartDelay");
            //SendMessageToPC(GetFirstPC(), "nStartDelay=" + IntToString(nStartDelay));
            nCurrentTime = GetLocalInt(GetObjectByTag("vr_dmhelper"), "nCurrentTime");
            //SendMessageToPC(GetFirstPC(), "nCurrentTime=" + IntToString(nCurrentTime));
            nSpawnDelay = GetLocalInt(oWP, "nSpawnDelay");
            //SendMessageToPC(GetFirstPC(), "nSpawnDelay=" + IntToString(nSpawnDelay));
            if(nSpawnDelay<(nCurrentTime-nStartDelay)){
                //SendMessageToPC(GetFirstPC(), "delay end, spawning...");
                SetLocalInt(oWP, "bSpawnDisturbed", FALSE);
                Spawn(oWP);
            }else{
                //SendMessageToPC(GetFirstPC(), "waiting for delay end");
            }
        }
    }
}

void Spawn(object oWP)
{
    object oCreature;
    string sTag;
    int nPos1, nPos2;
    int n, n1, n2, i, r, r1;
    int bGroup = FALSE;
    location lLoc;

    sTag = GetLocalString(oWP, "sTag"); // for Lexey's Spawn Table

//---- SG flag ----
    bGroup = GetLocalInt(oWP, "bGroup");

//---- SRn flag ----
    r = GetLocalInt(oWP, "r");
    location lLocation = GetLocation(oWP);
    object oArea = GetAreaFromLocation(lLocation);
    vector vPosition;
    float fOrientation = GetFacingFromLocation(lLocation);

//---- SNn flag ----
    n1 = GetLocalInt(oWP, "nMin");
    n2 = GetLocalInt(oWP, "nMax");
    if(n2!=0){
        n = n1+Random(n2-n1)+1;
    }else{
        n = n1;
    }

    for(i=1; i<=n; i++){
        vPosition = GetPositionFromLocation(lLocation);
        r1 = Random(r+1);
        if(d2()==1) r1 *= -1;
        vPosition.x += r1;
        r1 = Random(r+1);
        if(d2()==1) r1 *= -1;
        vPosition.y += r1;

        lLoc = Location(oArea, vPosition, fOrientation);
        if(bGroup==TRUE) sTag = SpawnGroup(oWP);
        oCreature = CreateObject(OBJECT_TYPE_CREATURE, sTag, lLoc);
        if(oCreature!=OBJECT_INVALID){
            SetLocalInt(oWP, "nChildCount", GetLocalInt(oWP, "nChildCount")+1);
            SetLocalObject(oCreature, "parent", oWP);
            SetLocalLocation(oCreature, "lHomeLocation", lLoc);
        }else{
            i--;
        }
    }
}

void StoreSpawns(object oArea)
{
    object oObject = GetFirstObjectInArea(oArea);
    string sName, s;
    string sTag;
    int nPos1, nPos2;
    int nCount=0;
    while(oObject!=OBJECT_INVALID){
        sName = GetName(oObject);
        if((GetStringLeft(sName, 2)=="SP")&&(GetObjectType(oObject)==OBJECT_TYPE_WAYPOINT)){
            nCount++;
            SetLocalObject(oArea, "Spawner"+IntToString(nCount), oObject);

            SetLocalString(oObject, "sTag", GetTag(oObject));

            //---- SG flag ----
            nPos1 = FindSubString(sName, "SG");
            if((nPos1!=-1)&&(StringToInt(GetSubString(sName, nPos1+2, 1))==1))
                SetLocalInt(oObject, "bGroup", TRUE);

            //---- SRn flag ----
            nPos1 = FindSubString(sName, "SR");
            nPos2 = FindSubString(sName, "END");
            SetLocalInt(oObject, "r", StringToInt(GetSubString(sName, nPos1+2, nPos2-nPos1-3)));

            //---- SNn flag ----
            nPos1 = FindSubString(sName, "SN");
            nPos2 = FindSubString(sName, "SR");
            s = GetSubString(sName, nPos1+2, nPos2-nPos1-3);
            nPos1 = FindSubString(s, "-");
            if(nPos1==-1){
                SetLocalInt(oObject, "nMin", StringToInt(s));
                SetLocalInt(oObject, "nMax", 0);
            }else{
                SetLocalInt(oObject, "nMin", StringToInt(GetSubString(s, 0, nPos1)));
                SetLocalInt(oObject, "nMax", StringToInt(GetSubString(s, nPos1+1, GetStringLength(s)-nPos1-1)));
            }
        }
        oObject = GetNextObjectInArea(oArea);
    }
    SetLocalInt(oArea, "nSpawnersCount", nCount);
}

void ClearLocationFromCreatures(object oArea)
{
    string sName;
    object oWP;
    object oObject = GetFirstObjectInArea(oArea);
    while(oObject!=OBJECT_INVALID){
        sName = GetName(oObject);

        oWP = GetLocalObject(oObject, "parent");
        if(oWP!=OBJECT_INVALID)
            DestroyObject(oObject);

        if((GetStringLeft(sName, 2)=="SP")&&(GetObjectType(oObject)==OBJECT_TYPE_WAYPOINT)){
            if(GetLocalInt(oObject, "nChildCount")>0){
                SetLocalInt(oObject, "nChildCount", 0);
                if(GetLocalInt(oObject, "bSpawnDisturbed")){
                    SetLocalInt(oObject, "nStartDelay", GetLocalInt(GetObjectByTag("vr_dmhelper"), "nCurrentTime"));
                }
            }
            //SendMessageToPC(GetFirstPC(), "b="+IntToString(GetLocalInt(oObject, "bSpawnDisturbed")));
        }

        oObject = GetNextObjectInArea(oArea);
    }
}


ну и последнее... скипт, содержащий таблицу групп мобов...
Neverwinter Script Source
string SpawnGroup(object oWP)
{
    string sTag = GetTag(oWP);

    if(sTag=="vr_lowlvlgrp1"){
        switch(d4()){
            case 1: return "vr_badger";
            case 2: return "vr_rat";;
            case 3: return "vr_direrat";
            case 4: return "vr_bat";
        }
    }

    if(sTag=="vr_bugbeargrp"){
        int nCount = GetLocalInt(oWP, "nChildCount");
        if(nCount<1) return "vr_bugbearhero";
        if(nCount<2) return "vr_bugbearshaman";
        switch(d2()){
            case 1: return "vr_bugbear";
            case 2: return "vr_bugbeararcher";
        }
    }

// ---- !!!! ADD GROUPS OVER THIS LINE !!!! ----
    return "";
}


Сообщение отредактировал Vanes - May 4 2007, 08:40
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Sugo77
сообщение May 3 2007, 16:21
Сообщение #97


Level 3
*

Класс: Монах
Характер: Lawful Good
Раса: Эльф



Хех пока никак,новичкам тяжко(IMG:style_emoticons/kolobok_light/smile.gif)

а вот в етой твоей фразе нет ошибки?"в *теге моба* указывается либо тег моба, илбо тег группы для спавна"
Может имелось ввиду в теге поинта?
ну тоесть вот так:"в *теге поинта* указывается либо тег моба, илбо тег группы для спавна"

Да а куда собственно вот етот готовы скрипт вставить мне? в какую строчку?

собственно сам скрипт спавна
*void main() - как раз таки тот самый псевдо харбит, который запускается с частотой, указанной в строках AssignCommand(oArea, DelayCommand(10.0, ExecuteScript("vr_spawn_general", oArea)));
*void CheckWaypoints(object oArea) - проверяет все спавнпоинты в локи и при необходимости их спавнит
*void Spawn(object oWP) - процедура которая непосредственно создает мобов в точках спавна
*void StoreSpawns(object oArea) - срабатывает 1 раз за рестарт... задача его в том, чтобы "расшифровать" тег спавнпоинта и занести все данные в локальные переменные
*void ClearLocationFromCreatures(object oArea) - в случае необходимости деспавна очищает локацию от мобов

Neverwinter Script Source
// SPAWN SYSTEM
// for NWN Shard "Validor 2"
// main script
/* Scripted by Vanes */

#include "vr_spawn_groups"
#include "vr_config"

void CheckWaypoints(object oArea);
void Spawn(object oWP);
void StoreSpawns(object oArea);
void ClearLocationFromCreatures(object oArea);

и тд
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vanes
сообщение May 3 2007, 16:30
Сообщение #98


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

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



создаешь скрипт с именем vr_spawn_general (именно он запускается в энтере локи, см. ExecuteScript("vr_spawn_general", oArea)(IMG:style_emoticons/kolobok_light/wink3.gif) и все туда вставляешь
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Sugo77
сообщение May 3 2007, 16:32
Сообщение #99


Level 3
*

Класс: Монах
Характер: Lawful Good
Раса: Эльф



А еше а как он собственно назватся будет? или просто открываю уже юбой стандартный скрипт нвна и затираю на новый ? а то сам придумал под своим именем шапку Sugo дак несохраняется такое название непринимает его тулсет(
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vanes
сообщение May 3 2007, 16:40
Сообщение #100


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

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



так и будет называться - vr_spawn_general...
а в теле скрипта должно быть то, что я выше написал...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

14 страниц V  « < 2 3 4 5 6 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 8th August 2020 - 12:14