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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
14 страниц V  « < 11 12 13 14 >  
Ответить в эту темуОткрыть новую тему
> Скрипты: Все вопросы, Алгоритмы, оптимизация, особености и хитрости в скриптинге
Kcapra
сообщение Sep 24 2010, 06:54
Сообщение #301


Level 9
***

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



Спасибо, работает как надо...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Sep 24 2010, 08:44
Сообщение #302


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Для шарда промежутки, большие хб, делаются через деление с остатком аптайма на нужный интервал. Аптайм - переменная на модуле, равна времени работы мода в секундах (каждый хб просто аптайм+=6).

Скажем так:
Neverwinter Script
if (nUptime % 120 == 0) // остаток равен нулю, срабатывает раз в 120 секунд


Плюсы - не требует делеев вообще.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Orochi
сообщение Sep 24 2010, 20:04
Сообщение #303


Level 3
*

Класс: Маг
Характер: True Neutral
Раса: Нежить



Цитата(Lex @ Sep 23 2010, 16:14) *
Не, чувак, все немного не так. Будешь писать не в тему (или в такой же нагловатой манере, как сейчас) - схлопочешь пред.


Я имел в виду что буду стараться искать подходяшие темы для вопросов,а вовсе не хотел кого то оскорбить (IMG:style_emoticons/kolobok_light/unsure.gif)

Просто в тругих темах моих вопросов (на которые так и не ответили) дофига.Я решил найти по темам хоть кого то,кто мне поможет (IMG:style_emoticons/kolobok_light/unsure.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение Sep 27 2010, 09:04
Сообщение #304


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

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



Если не отвечают - значит не сталкивался никто. Если тебе нужно получить ответ быстро, пиши лучше на официальном форуме.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Sep 27 2010, 09:56
Сообщение #305


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Имхо нвн2 сам по себе тут настолько популярен, что лучше вопросы вообще гуглить (IMG:style_emoticons/kolobok_light/smile.gif) А скрипты искать в разделе нвн1 (хотя бы потому, что скрипты по сути не менялись, и огромные гайды и сборники оттуда сюда никто не переносил).

Нвн1 живёт всего в 2 раза дольше нвн2, однако в его разделе в 3 раза больше топиков и в 4 раза больше постов.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Sep 27 2010, 14:05
Сообщение #306


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

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



а смысл гуглить.. есть еще русскоязычные форумы по НВН2 где чуть больше чем 2 темы и последний ответ был полгода назад? (IMG:style_emoticons/kolobok_light/smile.gif)
я не в плане поглумиться, я просто таких площадок сам не знаю, мне любопытно.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Sep 27 2010, 17:11
Сообщение #307


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



По-английски гуглить (IMG:style_emoticons/kolobok_light/smile.gif) По очень многим вопросам (не только по нвн или играм вообще) приходится делать именно так, ибо "гайдовых" русских ресурсов довольно мало, да и те забиты как правило переводами чужих работ, причём опять же - переводами неполными (ну вот как тут с доками по нвн2 - часть русские, часть английские уже 4 года как, и никто их уже не переведёт).
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Orochi
сообщение Sep 28 2010, 15:44
Сообщение #308


Level 3
*

Класс: Маг
Характер: True Neutral
Раса: Нежить



Я то и сам Гуглил тока вот тех ответов которые я ищу я не нахожу.Город мастеров самое лучшее что мне удавалось найти. (IMG:style_emoticons/kolobok_light/rolleyes.gif) (в смысле:найти (IMG:style_emoticons/kolobok_light/ph34r.gif) )
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kcapra
сообщение Sep 28 2010, 15:56
Сообщение #309


Level 9
***

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



В общем, такая фигня:
накалякал скрипт, чтобы непись говорил, указанные у него в вариэйблах, строки. Создал парочку вайпоинтов, между которыми тот должен ходить. Ходить-то он ходит, а строки не произносит. Если вайпионты удалить - скрипт работает нормально. Нужно, чтобы работало и то, и другое.
Скрипт висит на хартбите Непися.
Neverwinter Script
void main()

{
if(GetLocalInt(OBJECT_SELF, "script_fired"))  return;
    {
        SetLocalInt(OBJECT_SELF, "script_fired", TRUE);
        float fInterval = GetLocalFloat(OBJECT_SELF, "interval");
        int n=(GetLocalInt(OBJECT_SELF, "amount"));
        DelayCommand((n*fInterval), DeleteLocalInt(OBJECT_SELF, "script_fired"));
        if ((GetLocalString(OBJECT_SELF, "string1")) != ""){AssignCommand(OBJECT_SELF, (ActionSpeakString(GetLocalString(OBJECT_SELF, "string1"))));}
        if ((GetLocalString(OBJECT_SELF, "string2")) != ""){AssignCommand(OBJECT_SELF, (ActionWait(fInterval)));
                            AssignCommand(OBJECT_SELF, (ActionSpeakString(GetLocalString(OBJECT_SELF, "string2"))));}
        if ((GetLocalString(OBJECT_SELF, "string3")) != ""){AssignCommand(OBJECT_SELF, (ActionWait(fInterval)));
                            AssignCommand(OBJECT_SELF, (ActionSpeakString(GetLocalString(OBJECT_SELF, "string3"))));}
        if ((GetLocalString(OBJECT_SELF, "string4")) != ""){AssignCommand(OBJECT_SELF, (ActionWait(fInterval)));
                            AssignCommand(OBJECT_SELF, (ActionSpeakString(GetLocalString(OBJECT_SELF, "string4"))));}
        if ((GetLocalString(OBJECT_SELF, "string5")) != ""){AssignCommand(OBJECT_SELF, (ActionWait(fInterval)));
                            AssignCommand(OBJECT_SELF, (ActionSpeakString(GetLocalString(OBJECT_SELF, "string5"))));}
    }
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Sep 28 2010, 18:15
Сообщение #310


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Движок вейпоинтов стандартный? Если да, то там куча действий внутри плюс clearallactions должен быть, ессно всё вместе не работает. Пиши полную систему на ходьбу и разговор.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
PaiNt
сообщение Sep 29 2010, 02:37
Сообщение #311


Level 8
***

Класс: Псионик
Характер: Chaotic Neutral
Раса: Хафлинг



Можно попробовать выключать на время реплик выполнение функции WalkWayPpoints(), функцией SetWalkCondition(NW_WALK_FLAG_CONSTANT, FALSE), с предварительной очисткой стека действий ClearAction()-ом, если проблема действительно в движке вейпойнтов. (#include "nw_i0_generic")

Также можно мутить с текущей точкой обхода с помощью SetLocalInt(oNPC, "WP_CUR"), где это номер вейпойнта от 0-99 для стандартной системы.

Сообщение отредактировал PaiNt - Sep 29 2010, 02:42
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Sep 29 2010, 09:22
Сообщение #312


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

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



вместо ActionSpeakString используй SpeakString. Дело в том, что пока работает хотьба по точкам, у тебя в стеке акций все время что-то есть и новое туда встанет только если стек почистить. Фразы же можно говорить и минуя стек, через указанную мной функцию. Либо, как сказал Денисок (и это более правильно на самом деле), нужно делать свою систему. Ибо в конечном итоге наверняка упрешься в невозможность расширения в ту или иную сторону.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kcapra
сообщение Sep 29 2010, 10:28
Сообщение #313


Level 9
***

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



Ясно. Отложу, тогда, на неопределенный срок.

Как, блин, пользоваться функцией return?
К примеру, мне нужно чтобы выполнение скрипта приостановилось до тех пор, пока нпс занят разговором.
Я повесил такой скрипт на OnConversation
Neverwinter Script
void main()
{
    ClearAllActions();
    BeginConversation();
              while (IsInConversation(OBJECT_SELF)) return;
              Какие-то функции.
}


Пример на нвн.лексиконе прочитал, понятней не стало.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Sep 29 2010, 10:50
Сообщение #314


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Я конечно не силён в диалогах, но я бы разбил скрипт на два. Начинаем диалог твоим скриптом, а в конце диалога запускаем отдельно продолжение. Return вообще не при чём, это ф-я возврата значения с прекращением работы.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kcapra
сообщение Sep 29 2010, 10:59
Сообщение #315


Level 9
***

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



Цитата(denis0k @ Sep 29 2010, 15:50) *
Я конечно не силён в диалогах, но я бы разбил скрипт на два. Начинаем диалог твоим скриптом, а в конце диалога запускаем отдельно продолжение.

Я именно этого и хотел избежать.

Цитата
Return вообще не при чём, это ф-я возврата значения с прекращением работы.

Цитата
In the case of void functions, return statements are optional, but can still be used to prematurely halt execution


Т.е. запаузить в таком случае никак чтоли? (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif)

Сообщение отредактировал Kcapra - Sep 29 2010, 11:02
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Sep 29 2010, 11:06
Сообщение #316


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

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



Цитата(Kcapra @ Sep 29 2010, 11:28) *
Ясно. Отложу, тогда, на неопределенный срок.

ты все-таки попробуй просто SpeakString поюзать. Имхо должно для твоей ситуации прокатить

опиши подробнее, какой ты скрипт прервать хочешь диалогом. Так, как описано выше - делать бесполезно. Делать в скрипте цикл, ждущий окончания диалога - можно, но имхо ни разу не рационально. Скорее всего есть варианты проще.

зы: я анимацию нормально прерывал диалогом, она сама восстанавливалась, все в пределах одного управляющего скрипта + пары помощников.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kcapra
сообщение Sep 29 2010, 11:34
Сообщение #317


Level 9
***

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



Пока для теста там функция ActionRandomWalk()

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

SpeakString работает

Сообщение отредактировал Kcapra - Sep 29 2010, 11:56
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Sep 29 2010, 21:40
Сообщение #318


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

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



Хм.. тогда рекомендую (весьма нескромно) вот это почитать: http://nwnmod.narod.ru/stat_anim_npc2.htm
проблема прерывания диалогом там освещена
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Celestial
сообщение Sep 30 2010, 01:56
Сообщение #319


Level 14
****

Класс: Обыватель
Характер: Lawful Neutral
Раса: Эльф



Часть скрипта висит на входе игрока на шард. У него в инвентаре есть итем-паспорт на который все пишется.

1. Коллеги, посмотрите, пож, в чем проблема в строчке? Нужно, чтобы, если у него локалка на паспорте стоит 1, то в журнале открывался квест в стадии 1:

if (GetLocalInt(it_playerpassport,"goharbeetle") == 1) AddJournalQuestEntry("beetlequest", 1, GetEnteringObject(), FALSE, FALSE, FALSE));


2. Подскажите, что вставить вместо вопросиков, чтобы генерилось случайное количество голда в инвентаре от 500 до 1000 монет:

if (HasItem(GetEnteringObject(), "it_playerpassport") == FALSE) GiveGoldToCreature(??????????????, ?????????????, FALSE));

Сообщение отредактировал Celestial - Sep 30 2010, 02:00
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Sep 30 2010, 07:28
Сообщение #320


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Цитата
Нужно, чтобы, если у него локалка на паспорте стоит 1
Не знаю как там в нвн2, но в нвн1 локалки с итемов случайным образом спадали при перезаходах.
Цитата
GiveGoldToCreature(??????????????, ?????????????, FALSE)
Объект-игрок, Random(501) + 500.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Celestial
сообщение Sep 30 2010, 15:13
Сообщение #321


Level 14
****

Класс: Обыватель
Характер: Lawful Neutral
Раса: Эльф



1.
Цитата
if (HasItem(GetEnteringObject(), "it_playerpassport") == FALSE) GiveGoldToCreature(GetEnteringObject(), Random(501) + 500, FALSE));

Выдает ошибку. Все еще нужна помощь.

2.
Цитата
Не знаю как там в нвн2, но в нвн1 локалки с итемов случайным образом спадали при перезаходах.

В нвн2 как раз, если правильно помню, локалки на итемах сохраняются при перезаходах. Разве нет? Все еще нужна помощь.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kcapra
сообщение Sep 30 2010, 15:30
Сообщение #322


Level 9
***

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



Цитата(Lex @ Sep 30 2010, 02:40) *
Хм.. тогда рекомендую (весьма нескромно) вот это почитать: http://nwnmod.narod.ru/stat_anim_npc2.htm
проблема прерывания диалогом там освещена

Спасибо за ссылку, статья полезная. С анимациями еще работать не приходилось, чувствую еще майндфак предстоит неслабый (IMG:style_emoticons/kolobok_light/crazy.gif)
В итоге решил мозгу не парить и добавил скрипт в OnConversationEnd()

Написал ходилку по вайпоинтам (пока простую, затем буду усложнять)

Neverwinter Script
void main()
{
int nW; object oWP;
    if (GetLocalInt (OBJECT_SELF,"RUNONCE") != 1)
        {nW=1; SetLocalInt(OBJECT_SELF,"RUNONCE",1);}
    oWP=GetWaypointByTag("wWP_"+GetTag(OBJECT_SELF)+"_0"+IntToString(nW));
    if (GetIsObjectValid(oWP)==TRUE)
        {SpeakString("Объект найден, его тэг = "+GetTag(oWP)+" nW= "+IntToString(nW));
        if (GetCurrentAction(OBJECT_SELF)==ACTION_INVALID)
        {ActionMoveToLocation(GetLocation(oWP));
        nW+=1;}
        if (GetLocation(OBJECT_SELF)==GetLocation(oWP))
            {ClearAllActions();
            ActionDoCommand(ExecuteScript("wWP_"+GetTag(OBJECT_SELF), OBJECT_SELF));}
        }
    else SpeakString("Объект не найден. nW= "+IntToString(nW));
}


Проблема в алгоритме присвоения и увелечения переменной nW, только не понимаю где именно.
(приходит на первый вэйпоинт и говорит что Объект не наден и nW=0) все, вроде бы, логично.

EDIT: в локации 4 вэйпоинта с тэгами wWP_c_human_01, wWP_c_human_02, wWP_c_human_03, wWP_c_human_04

EDIT2: Ах, да скрипт висит на хартбите непися с тэгом c_human

Сообщение отредактировал Kcapra - Sep 30 2010, 17:28
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Sep 30 2010, 17:45
Сообщение #323


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Цитата
Выдает ошибку. Все еще нужна помощь.
Какую? Я ж не пророк (IMG:style_emoticons/kolobok_light/smile.gif) Во-первых, там кажется лишняя скобка в конце. Во-вторых, в нвн1 у GiveGoldToCreature было 2 параметра, у тебя - 3 (нвн2 нет, чтобы проверить).
Цитата
В нвн2 как раз, если правильно помню, локалки на итемах сохраняются при перезаходах. Разве нет? Все еще нужна помощь.
Ну официально они и в нвн1 сохраняются. Только иногда пропадают. Причём не со всех итемов и не у всех чаров, но всё равно очень ненадёжно. Кстати, проверь и там лишнюю скобку (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Celestial
сообщение Sep 30 2010, 19:32
Сообщение #324


Level 14
****

Класс: Обыватель
Характер: Lawful Neutral
Раса: Эльф



1. Спасибо, Дэн, все заработало, как убрал скобку. В нвн2 три параметра. Кому понадобиться, правильный вариант ниже:
Цитата
if (HasItem(GetEnteringObject(), "it_playerpassport") == FALSE) GiveGoldToCreature(GetEnteringObject(), Random(501) + 500, FALSE);


2. Убрал скобку, но все равно выдает ошибку ("oTarget"):
Цитата
if (GetLocalInt(it_playerpassport,"goharbeetle") == 1) AddJournalQuestEntry("beetlequest", 1, GetEnteringObject(), FALSE, FALSE, FALSE);
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kcapra
сообщение Oct 1 2010, 13:42
Сообщение #325


Level 9
***

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



Благодаря ДебагСерверу обнаружил проблему (простая скриптовая переменная резетилась при каждом хартбите)
Neverwinter Script
void main()
{
int nW=GetLocalInt(OBJECT_SELF, "nW"); object oWP;
    if (GetLocalInt (OBJECT_SELF,"RUNONCE") != 1)
        {SetLocalInt(OBJECT_SELF, "nW", 1); SetLocalInt(OBJECT_SELF,"RUNONCE",1);}
    oWP=GetWaypointByTag("wWP_"+GetTag(OBJECT_SELF)+"_0"+IntToString(nW));
    if (GetIsObjectValid(oWP)==TRUE)
        {SpeakString("Объект найден, его тэг = "+GetTag(oWP)+" nW= "+IntToString(nW));
        if (GetCurrentAction(OBJECT_SELF)==ACTION_INVALID)
        {ActionMoveToLocation(GetLocation(oWP));
        nW++;
        SetLocalInt(OBJECT_SELF, "nW", nW);}
        if (GetLocation(OBJECT_SELF)==GetLocation(oWP))
            {ClearAllActions();
            ActionDoCommand(ExecuteScript("wWP_"+GetTag(OBJECT_SELF), OBJECT_SELF));}
        }
    else SpeakString("Объект не найден. nW= "+IntToString(nW));
}

Теперь ходит, я рад (IMG:style_emoticons/kolobok_light/prankster2.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

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

 



Текстовая версия Сейчас: 16th April 2024 - 21:30