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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
14 страниц V  « < 3 4 5 6 7 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты: Все вопросы, Алгоритмы, оптимизация, особености и хитрости в скриптинге
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...
а в теле скрипта должно быть то, что я выше написал...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Sugo77
сообщение May 3 2007, 20:06
Сообщение #101


Level 3
*

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



Нет Vanes ты маленько меня недопонял вот последние тобой написаные 2 скрипта куда вставлять в свойства мобов или в свойства локации? и в какие строчки?

а так я разообрался где их имя изменять у меня уже 2 скрипта твои внесены в он Enter и on Exit
под именами: vr_spawn_general 1 и vr_spawn_general 2
но а последнии тобой изобритеные 2 скрита куды вставляются?

Ну тоесть Vanes я шас имею у себя все твои 4 скрипта в тулсете под именами

vr_spawn_general 1
vr_spawn_general 2
vr_spawn_general 3
vr_spawn_general 4

Дак вот с первыми двумя все ясно в строку On Enter Script вставляем vr_spawn_general 1
В строку арейных свойств On Exit Script вставляем vr_spawn_general 2
а куда вставляем оставшиеся два скрипта?vr_spawn_general 3
vr_spawn_general 4

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

Эх пока никак((

А через сколько у тебя запргормаирован респ?

А еше а может мне что то надо изменить в скриптах твоих а то всетаки у меня не валидор модуль а по другому называется? или гдето закралась ошибка или я что то делаю не так(

Проверь плиз ,и раскажи всеже куда еше то 2 скрипта последних вставляем?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vanes
сообщение May 4 2007, 08:45
Сообщение #102


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

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



Цитата
а куда вставляем оставшиеся два скрипта?vr_spawn_general 3
vr_spawn_general 4

первый скрипт должен называться vr_spawn_general, иначе он просто не будет запускаться из энтера локи...
второй скрипт - это инклуд для первого и называется vr_spawn_groups...
вставлять их никуда не надо - эти скрипты либо запускаются из других скриптов, либо являются инклудами...

Цитата
Может имелось ввиду в теге поинта?

уже исправил

Цитата
А через сколько у тебя запргормаирован респ?

задержка респа указывается для каждого конкретного спавна-вейпоинта отдельно, в его имени
т.е. если имя вейпоинта SP_SG0_SD5_SN1_SR5_END и тег vr_goblin
то моб с тегом vr_goblin в количестве одной штуки будет появляться на расстоянии 5 от вейпоинта каждые 5*60 секунд...
зы я кстати ошибся в описании имени спавнпоинта, т.к. по памяти писал... щас поправил...

да особо то и менять не надо ничего, кроме разве что названий инклудов, тегов мобов в таблице групп...
а так же тега vr_dmhelper - на этой криче у меня идет счетчик времени...

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


Level 3
*

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



Хм тоесть надо изменить все нахвания скриттов не генерал 1-2-3-4
а генерал просто ето первый второй будет спавн гроуп по порядку а 3 и 4 ый вообше непонял(
так и непонял что с ними делаем))(
и как ето вставлять их никуда ненадо они что автоматически запустятся ?даже если просто будут сушествовать в тулсете(

млин мнеб попроше обьяснять что куда на уровне ламера)а не мастера)(



кстати 2 скритпа с одинаковым именем никак неможетсушествовать тулсет недает их сохранять тогда(
значит каждый твой скритп должен по разному называтся первый и второй уже понял а 3-4 ?

может череез асю пообшаемся на ету тему?)а то весь форум зафлудим сколко непытаюс никак немогу добится респа уже неделю((

просто я обсолютно запутался ответы то несовсем развернутые( а загадками понятными тока мастерам а не новичкам,вот чтоо такое инклуды? я вобше хз(
мнеб все попрастому обьяснить открываем ето вставляем то и тд(
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение May 4 2007, 14:04
Сообщение #104


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

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



Цитата(Sugo77 @ May 4 2007, 13:51) [snapback]107767[/snapback]
вот чтоо такое инклуды?

вот это:
Neverwinter Script Source
#include "vr_spawn_groups"
#include "vr_config"

присоединяемые к скрипту библиотеки с дополнительными функциями (такие библиотеки можно самому писать)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vanes
сообщение May 4 2007, 14:41
Сообщение #105


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

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



Цитата
а генерал просто ето первый второй будет спавн гроуп по порядку а 3 и 4 ый вообше непонял(

первый и второй - это не скрипты, а части скриптов, которые тебе нужно вставить в свои скрипты энтера и экзита локи... если таковых нет, то создай 2 скрипта area_enter и area_exit и туда эти части вставь...
третий (который самый большой) - это как раз таки vns_spawn_general
ну и последний - vns_spawn_groups
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Sugo77
сообщение May 4 2007, 19:52
Сообщение #106


Level 3
*

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



Неа все еше никак(
Можно с тобой через асю пообшатся там будет проше вживую ?
потом если что удолиш меня

Собственно что я делал вот что содал с нуля 2 скрипта с названиями: area_enter и area_exit
Вот как выглядят первый:area_enter :

Neverwinter Script Source
// area_enter

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);
            }
        }
    }
}

// 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);
    }
}
вставлял все ето я в On enter в опциях локи а вот второй area_exit :
// area_exit

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);
    }
}
// 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);
    }
}

соответствеенно в опции локи в On exit

и что не так?
а с мобами вот что сделал поставил на локу волка стегом c_dogwolfdire и задал для него точку с именемSP_SG0_SD5_SN1_SR5_END и тегом c_dogwolfdire
И что не так????7 ждал около 10 минут респа и недождался(

Помираю хочу научится респу,уже всю ету неделю пробую делать и никак блин(


Сообщение отредактировал Aiwan - May 5 2007, 08:08
Причины изменения: Код скриптов вставлять надо в таг [nss][/nss]
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
diggers
сообщение May 4 2007, 20:41
Сообщение #107


Level 2
*

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



Цитата
Помираю хочу научится респу,уже всю ету неделю пробую делать и никак блин(

Напиши свой. Создай пустой модуль, назови его гордо - RespBySugoMod

Соспавни монстра в точке, на пустой локации. Как - см скрипты Vanesа.

Соспавнишь, тогда(И только тогда. На этом этапе уже другие сложности, и с самим спавном у тебя затруднений уже быть не должно. Иначе потонешь в проблемах и забьешь на это дело), соспавнишь несколько монстров, по хитрой системе. Что бы спавнились разные мобы, разное количество и можно было всем этим управлять. Что бы спавнились, нападали, что бы все было нормально в маштабе 1 спавна. Как - посмотришь там же.

Потом подумаешь как переделать систему так, что бы удобно было такие спавны расставлять в больших количествах и управлять ими. На этом этапе, я уверен, у тебя уже закипят свои собственные идеи как что сделать, и будешь спрашивать только об отдельных конкретных технических решениях.

А таким шаманством, тыкая то, незнаю что, незнаю куда, можно и за полгода ничего не сделать.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
r1Stranger
сообщение May 11 2007, 18:34
Сообщение #108


Level 4
**

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



Такая штука. Перенес скрипты из 1й версии во вторую.
То что визуальные эффекты почти половина отсутствует или не работает это ладно.
Но как сделать, чтоб неписи ходили по непрерывно по точкам? Была хорошая каманда WalkEayPoints() а тут нету.
Надо снова самому велосипед изобретать?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение May 11 2007, 20:00
Сообщение #109


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

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



Нет, не надо. Если тебе нужно чтобы нпс строго ходил от 01 до 0..., то выбираешь нпс -> пкм создать wp -> размещаешь wps -> выбираешь все wp через shift лкм и -> пкм create waypoint set
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
r1Stranger
сообщение May 15 2007, 18:01
Сообщение #110


Level 4
**

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



Спасибо.
Так и сделал. Но оно требует ввести имя группы точек. Дал имя - все равно не ходят по всем.Может надо было вписывать в имя тэг существа?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

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

 



Текстовая версия Сейчас: 16th July 2025 - 17:26