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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
14 страниц V  « < 3 4 5 6 7 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты: Все вопросы, Алгоритмы, оптимизация, особености и хитрости в скриптинге
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
Раса: Человек



Спасибо.
Так и сделал. Но оно требует ввести имя группы точек. Дал имя - все равно не ходят по всем.Может надо было вписывать в имя тэг существа?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение May 16 2007, 09:11
Сообщение #111


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

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



Цитата(r1Stranger @ May 15 2007, 19:01) [snapback]108263[/snapback]
Может надо было вписывать в имя тэг существа?


Именно.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
shadowdweller
сообщение Jun 26 2007, 12:54
Сообщение #112


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

Класс: Вор
Характер: Chaotic Good
Раса: Эльф
МАСТЕР Переводов



Вот два скрипта, которые делают любого НПС полностью неподвижным (на случай, если нужна статуя, игрушка и т.д.)
Первый ставится на слот OnConversation:
Neverwinter Script Source
// empty to avoid default behaviour

void RemoveEffects(object oObject)
{
    effect eEffect = GetFirstEffect(oObject);
    while(GetIsEffectValid(eEffect))
    {
        RemoveEffect(oObject, eEffect);
        eEffect = GetNextEffect(oObject);
    }
}

void main()
{
    PlaySound("as_cv_winch1");
    /*SetPlotFlag(OBJECT_SELF, FALSE);
    RemoveEffects(OBJECT_SELF);
    ActionPlayAnimation(ANIMATION_LOOPING_PAUSE_DRUNK, 0.5);
    effect eHold = EffectVisualEffect(VFX_DUR_FREEZE_ANIMATION);
    ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHold, OBJECT_SELF));
    ActionDoCommand(SetPlotFlag(OBJECT_SELF, TRUE));*/

}

Второй - на слот OnSpawn:
Neverwinter Script Source
void main()
{
    effect eHold = EffectVisualEffect(VFX_DUR_FREEZE_ANIMATION);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHold, OBJECT_SELF);
    SetLocalInt(OBJECT_SELF, "X1_L_IMMUNE_TO_DISPEL", 10);
}

Оба взяты из SoU, но прекрасно работают и в НВН2.
Наслаждайтесь! (IMG:style_emoticons/kolobok_light/rolleyes.gif)

ВАЖНО: Чтобы НПС оставался действительно неподвижным, не забудьте убить все остальные скрипты. Должны остаться только эти два. (IMG:style_emoticons/kolobok_light/smile.gif)

Сообщение отредактировал shadowdweller - Jun 26 2007, 12:56
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение Jun 28 2007, 12:02
Сообщение #113


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

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



Скриптование вэйпойнтов:

Neverwinter Script Source
#include "ginc_wp"

void main()
{
    int iCurrentWP = GetCurrentWaypoint();
    int iNextWP;
    switch (iCurrentWP)
    {
        case 1:
            iNextWP = Random(GetNumWaypoints()-1) + 2;
            SetNextWaypoint(iNextWP);
            ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 7.0);
            break;
        case 2:
            SetNextWaypoint(1);
            ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 1.0, 4.0);
            break;
        case 3:
            SetNextWaypoint(1);
            break;
    }
}


Neverwinter Script Source
#include "ginc_wp"
     
const int REDIRECTOR_WP = 1;

void main()
{
    int iCurrentWP = GetCurrentWaypoint();// where we are
    int iNextWP;
    switch (iCurrentWP)
    {
        case 1:
// Node 1 should be placed off somewhere out of the way.  This is where the creatures
// will hang out in between reaching the end of the path and starting on a new path.
// Creatures will change their appearance in between travels.

// 1st param is the list of nodes they may reappear at. Must follow the pattern XX,YY,ZZ...
// 2nd param is the length of time to wait before reappearing.
                  StandardRedirectorNode("02,03", 5.0f);
            break;
        case 2:
// Nodes 2 on up define the network the road walkers travel.  They will never return to the node
// they just came from.  When they reach an end node (typically a door or a route out of the area)
// they will be be "redirector node" - typically node 1.

// 1st param is the list of nodes they may travel to. Must follow the pattern XX,YY,ZZ...
//                (end nodes are those with only 1 element in the list)
// 2nd param is the redirector WP
                  StandardRoadNetworkNode("03", REDIRECTOR_WP);
            break;

        case 3:
                  StandardRoadNetworkNode("02", REDIRECTOR_WP);
            break;
    }
}



Статья.


Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Валеско
сообщение Jul 14 2007, 22:48
Сообщение #114


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

Класс: Бард
Характер: Chaotic Neutral
Раса: Животное
МАСТЕР Пера



В одной из локаций модуля присутствует жаровня. Жаровня - это такая фиговина при нажимании на которую оружие игрока воспламеняется.\
Для действия жаровни был написан скрипт:

Neverwinter Script Source
void main()
{
ActionCastSpellAtObject(SPELL_FLAME_WEAPON,GetLast
sedBy());
}


Однако в работающем скрипте есть недостаток. Воспламенение оружия не прекращается ни через минуту, ни через 2 часа. Что делать?
Воспламенение должно длиться 30-40 секунд.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jul 14 2007, 23:05
Сообщение #115


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

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



делать не через магию, а через добавление временного эффекта на предмет.
Что-то типа:
Neverwinter Script Source
void main()
{
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,GetLastUsedBy());
if (!GetIsObjectValid(oWeapon)) return;
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6),oWeapon,40.0);
}

насчет работы под НВН2 не знаю, не могу проверить. Но по идее проблем быть не должно.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Валеско
сообщение Jul 15 2007, 09:59
Сообщение #116


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

Класс: Бард
Характер: Chaotic Neutral
Раса: Животное
МАСТЕР Пера



ERROR: UNDEFINED IDENTIFIER
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение Jul 15 2007, 13:44
Сообщение #117


Вечно меняющийся
Иконки Групп

Класс: Монах
Характер: True Neutral
Раса: Человек
NWN: Скриптинг [Sn]



2 Валеско, я подправил:

Neverwinter Script Source
void main()
{
object oWeapon = GetItemInSlot
(INVENTORY_SLOT_RIGHTHAND,
GetLastUsedBy());

if (!GetIsObjectValid(oWeapon)) return;
AddItemProperty(DURATION_TYPE_TEMPORARY,
ItemPropertyDamageBonus
(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6)
,oWeapon,40.0);
}


PS: дело было в том, что при абзатце, функции "делились", на несколько частей, соответственно скрипт и не составлялся.


Сообщение отредактировал Dik Morris - Jul 15 2007, 13:48
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Drow
сообщение Jul 18 2007, 20:18
Сообщение #118


Level 6
**

Класс: Бледный Мастер
Характер: Lawful Good
Раса: Эльф



Как лучше всего скриптом сделать непися невидимым. В смысле не эффект невидимости, а чтобы непися не было видно в тру сии.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение Jul 18 2007, 21:15
Сообщение #119


Вечно меняющийся
Иконки Групп

Класс: Монах
Характер: True Neutral
Раса: Человек
NWN: Скриптинг [Sn]



2 Drow, эх, жаль NWN-2 на компьютере нет (и не горю желанием ее устанавливать) но думаю, EffectVisualEffect и константа VFX_DUR_CUTSCENE_INVISIBILITY, все-таки остались. Так что попробуй использовать их.

Никакие "штатные" средства (ака трусинг или си-инвиз) этот эффект не берут.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Tomb
сообщение Jul 23 2007, 23:01
Сообщение #120


Светлый лорд Корелии
Иконки Групп

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



Ребят а кто нить может помочь со скриптом на сундуки для шарда...
Сундук привязан на акк
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Jul 24 2007, 06:05
Сообщение #121


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

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



Tomb, если ты о генерации лута, то можно почитать статью Игроделу. Правда там пробиты шмотки для 1 Невера...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение Jul 24 2007, 08:00
Сообщение #122


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

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



Рандомный генератор лута - подходит как для модуля, так и для шарда. Правда, он написан на выпадение лута с монстров.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Tomb
сообщение Jul 24 2007, 11:46
Сообщение #123


Светлый лорд Корелии
Иконки Групп

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



Неа я про сундуки чтобы хранить свой шмот....
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lorendroll
сообщение Jul 24 2007, 12:35
Сообщение #124


Level 9
***

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



Ну так ты расскажи как именно хочешь чтобы работала твоя система. Если сундук на каждого игрока свой, привязывай SetLocalObject на нужного oPC, а чтобы после рестарта восстанавливать лежащие в сундуке вещи нужно на попадание в сундук вещи запоминать вещь по тегу (StrRef'у? не знаю точно), привязывая SetLocalString на игрока. Но здесь без БД трудно будет, не знаю, есть уже НВНх для НВН2 или нет...
Да или вот пришло в голову интересное решение - завести отдельный модуль-"хранилище". Который просто SaveGame'ить время от времени. Есть ведь возможность переместить игрока в другой модуль скриптом онлайн? Я честно говоря с этим еще не экспериментировал, но должно работать...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Tomb
сообщение Jul 24 2007, 13:01
Сообщение #125


Светлый лорд Корелии
Иконки Групп

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



Насколько я помню Ванес писал скрипт с внешней БД
Она работал так
Сундук привязывается к акку шмот по тегу сохраняется во внешней БД
Положил шмот нажал на рычаг и счастье
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

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

 



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