Скрипты, Все вопросы и ответы по скриптам |
Здравствуйте, гость ( Вход | Регистрация )
Скрипты, Все вопросы и ответы по скриптам |
Sep 24 2011, 20:06
Сообщение
#3476
|
|
Level 5 Класс: Паладин Характер: Chaotic Good Раса: Человек |
|
Sep 24 2011, 20:09
Сообщение
#3477
|
|
Level 5 Класс: Вор Характер: Neutral Good Раса: Человек |
76 мегабайт (IMG:style_emoticons/kolobok_light/swoon.gif)
Но все равно спасибо! Сообщение отредактировал ReZkiy - Sep 24 2011, 20:10 |
Sep 24 2011, 21:03
Сообщение
#3478
|
|
Level 5 Класс: Паладин Характер: Chaotic Good Раса: Человек |
Цитата 76 мегабайт swoon.gif Но все равно спасибо! Ты конкретно скажи, (IMG:style_emoticons/kolobok_light/victory.gif) что тебя интересует. Я многое нашёл и ещё найду! (IMG:style_emoticons/kolobok_light/wizard.gif) |
Oct 15 2011, 04:40
Сообщение
#3479
|
|
Тролль Класс: Пьяный Мастер Характер: Chaotic Neutral Раса: Тварь |
Neverwinter Script object oArea = OBJECT_SELF; object oTarget; int iInt; string sInt; iInt = 1; sInt = IntToString(iInt); while (GetIsObjectValid(GetWaypointByTag("WP_tag_"+sInt))) { //(тело вложенного цикла)////// oTarget = GetFirstObjectInArea(oArea); while (GetIsObjectValid(oTarget)) { if (oTarget == GetWaypointByTag("WP_tag_"+sInt)) { //----------------------------- //(блок для тела условия) //----------------------------- } oTarget = GetNextObjectInArea(oArea); } /////////////////////////////// iInt++; sInt = IntToString(iInt); } Собсно вопрос: конструкция работоспособная, но в лог вызывает сообщение об ошибке (стандартное «СЛИЖКОМ МНОГО ИНСТРУКЦИЙ») – что может вызывать ошибку и в чем она? Похоже сам себя перемудрил – внутренний цикл лишний и видимо он и вызывает ошибку. (IMG:style_emoticons/kolobok_light/crazy.gif) Сообщение отредактировал Flaristan - Oct 15 2011, 05:19 |
Oct 15 2011, 12:18
Сообщение
#3480
|
|
Level 11 Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North |
Навскидку ошибки не нашёл (количество операций пропорционально количеству вейпоинтов помножить на количество объектов в локе - вероятно, это слишком дофига), но это извращение.
Neverwinter Script int i = 2; Почему бы не так?..
object oWP = GetWaypointByTag("WP_tag_1"); while (GetIsObjectValid(oWP)) { if(GetArea(oWP) == OBJECT_SELF) { //какой-то код } oWP = GetWaypointByTag("WP_tag_" + IntToString(i)); i++; } Сообщение отредактировал Ilerien - Oct 15 2011, 12:20 |
Oct 16 2011, 01:39
Сообщение
#3481
|
|
Тролль Класс: Пьяный Мастер Характер: Chaotic Neutral Раса: Тварь |
Да, я так и исправил в посте – внутренний цикл можно просто удалить, а если префикс «tag» менять на уникальный для групп вейпоинтов/локация, то и условие «if(GetArea(oWP) == OBJECT_SELF)» там тоже ненужно. Просто долго извращался над скриптом, чтоб научить работать с переменным числом вейпоинтов и потом упрощал его до минимума слегка коряво. (IMG:style_emoticons/kolobok_light/smile.gif)
|
Oct 27 2011, 23:44
Сообщение
#3482
|
|
Level 6 Класс: Друид Характер: Chaotic Neutral Раса: Гном |
Чуть призадумался. Подскажите навскидку:
1. Поставил в OnDeath существ проверку: Код if (GetIsPC(oKiller)) GiveXPToCreature(oKiller, nXP); else if (GetIsPC(GetMaster(oKiller)) GiveXPToCreature(GetMaster(oKiller), nXP); в надежде, что стоящий в безопасной области визард будет качаться, когда на другом конце света фамильяр, которым управляет игрок, мочит монстру. Хрен-то там. Если убивает в той же области,где и отдыхает персонаж - опыт даётся, в другой - нет. Вай? 2. Хотел сделать такую фичу: друид преврящается в жЫвотное, и все окружающие звери начинают дружить его (и его энимал компаньона), друид преврящается в голема (шейпшифтом), и все окружающие големы начинают дружить его (и его энимал компаньона; последнее, конечно не натурально, можно пытаться исправить, но пока не мешает). Трабл в следующем: друид в звероформе и будучи дружественным к фракции энимал пробегает мимо гоблина (естественно врага). Гоблин его естественно тюкает по шкуре своими никчёмными гоблинскими лапами. Но друиду действия гоблина глубоко паралельны, ибо он реально бежит по делам. А вот дикому и ужасному зверю-еното-бобру из фракции энимал совсем не пофиг. Он подбегает к гоблину и говорит: "Ты на кого клешни поднял? На моего друга! Сейчас я тебе клешни твои пообломаю!". "Да ладно, не парься, друг, я не в обиде на него," - говорит друид. "Слушай да, беги куда бежал! Тут уже личное. Я ему точно вмажу!", - говорит боброенот. И вмазал. Гоблин в ответ, и ещё и братков своих позвал. Ну енот тоже не лох, своих друганов позвал. Лосе-черепаху там, чёткого мишку и других. В общем, разборка началась чисто конкретная, клык за клык, все энималы против всех гоблиноидов во всех локациях воюют. Шерсть, пух, чешуя только и летят. Комбат саунд даже в соседних модулях слышен, не то что в соседних локациях. Как с этим беспределом бороться, можно ли навалять одному этому козлу носатому, чтобы со всей бандой отношения не портить? Сообщение отредактировал Anakondar - Oct 27 2011, 23:47 |
Oct 28 2011, 06:52
Сообщение
#3483
|
|
Level 11 Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North |
1. Навскидку не скажу, посмотри, что вернёт GetMaster(oKiller), когда маг и фам в разных локах.
2. Проблема во флажке Global, нужно его убрать в редакторе фракций, видимо, и для животных, и для гоблиноидов. |
Oct 28 2011, 07:23
Сообщение
#3484
|
|
Level 19 Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов |
2. Компьютер мой помер, пишу по памяти. Во-первых, помогают только френды, нейтралы (50 реп) в бой не лезут. Во-вторых, смотри скрипты аи, там может быть сдвиг репутации фракции. И, в-третьих, кури мануал, он тоже должен помочь. Про глобал-флаг уже сказали.
|
Oct 28 2011, 09:24
Сообщение
#3485
|
|
Level 6 Класс: Друид Характер: Chaotic Neutral Раса: Гном |
1. Навскидку не скажу, посмотри, что вернёт GetMaster(oKiller), когда маг и фам в разных локах. Уже дня три назад добавил индикаторы этих чеков, но нвн запустить пока не удаётся ибо работа. Проблема во флажке Global Даже без него фракции друг друга звереют, в лайн оф сайт как минимум. Но я, пожалуй, готов предъявить жесткие требования к системе: НПС не воюют друг с другом никогда. Если нужно противное - использовать анимацию ударов и эффекты урона. |
Oct 29 2011, 07:19
Сообщение
#3486
|
|
Level 19 Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов |
Цитата Но я, пожалуй, готов предъявить жесткие требования к системе: НПС не воюют друг с другом никогда. Просто более внимательно изучи вопрос (IMG:style_emoticons/kolobok_light/smile.gif) Неписи - всего лишь компьютерные болванчики, работающие на скриптах, их можно настроить как угодно.Цитата Если нужно противное - использовать анимацию ударов и эффекты урона. Нвн1, насколько мне известно, не даёт особо порулить анимацией. Это фишка нвн2.
|
Oct 29 2011, 09:04
Сообщение
#3487
|
|
Level 6 Класс: Друид Характер: Chaotic Neutral Раса: Гном |
1. Навскидку не скажу, посмотри, что вернёт GetMaster(oKiller), когда маг и фам в разных локах. GetMaster(oKiller) возвращает персонажа, зато GetIsPC(GetMaster(oKiller)) возвращает FALSE. Всё работает в таком виде: Код if (GetIsPC(oKiller)) { if (GetIsPossessedFamiliar(oKiller)) oKiller = GetMaster(oKiller); GiveXPToKiller (oKiller, fXP); } return; P.S.: GiveXPToKiller - моя внутренняя функция Сообщение отредактировал Anakondar - Oct 29 2011, 09:05 |
Dec 8 2011, 06:58
Сообщение
#3488
|
|
Тролль Класс: Пьяный Мастер Характер: Chaotic Neutral Раса: Тварь |
Работая с функцией ExecuteScript, столкнулся с парой таких интересных фактов:
- Лексикон категорически настаивает, что у этой функции нет задержки («ExecuteScript() has NO delay!» (с)); - компилятор тулсета же вполне нормально воспринял при пробе такую конструкцию, и на первый взгляд она даже правильно работала при тесте …но неожиданно стали возникать странные перебои в отсчете модульного времени. Стало создаваться впечатление, что часы модуля отказывались идти вперед в тех локациях, где работала эта скриптовая конструкция. А когда персонаж их покидал – время делало резкий скачек к тому значению, которое оно должно было достигнуть естественным путем, нибудь тех сбоев. Скрипт крепится на объекте, срабатывает при взаимодействии с PC и по задумке перезапускает сам себя через таймаут до тех пор пока на локации есть PC. Код object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF, 1, -1, -1, -1, -1); object oArea = GetArea(OBJECT_SELF); if ((GetIsObjectValid(oPC))&&(GetArea(oPC) == oArea)) { DelayCommand(100.0, ExecuteScript("script", OBJECT_SELF)); } Часто видел похожие проблемы со скачками времени в других онлайн-модулях. Кто знает – эти вещи действительно взаимосвязаны и лучше не делать таймаутов для ExecuteScript? |
Dec 8 2011, 07:39
Сообщение
#3489
|
|
Level 11 Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North |
Цитата - Лексикон категорически настаивает, что у этой функции нет задержки («ExecuteScript() has NO delay!» (с)); Лексикон прав. ExecuteScript() вызывается без задержки (если не скормить ему эту задержку специально), а вызвавший его скрипт ждёт, пока тот не завершится. Если это весь код, который перезапускается, то никаких лагов со свременем он вызывать не должен. |
Dec 8 2011, 17:43
Сообщение
#3490
|
|
Level 19 Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов |
Лаги со временем - фича движка нвн, появляется в зависимости от положения звёзд на небе. Особенно, если игроков немало зашло. На геме в 2005м время тормозило даже в локациях без скриптов.
Вирусман вроде фикс делал (да, нвнх). Вариант попроще - на модульный хб раз в минуту (или игровой час, не помню как там нвн показывает) вручную время ставить. |
Feb 5 2012, 03:05
Сообщение
#3491
|
|
Level 2 Класс: Обыватель Характер: Lawful Good Раса: Человек |
Как сделать, чтобы мобы возрождались после смерти спустя некоторое время?
|
Feb 5 2012, 09:11
Сообщение
#3492
|
|
Level 19 Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов |
Например, использовать систему энкаунтер-триггеров из тулсета, там вроде есть опция периодического спавна. Но в онлайне чаще используются аналогичные скриптовые системы, как правило самописные, они более гибкие (можно динамически менять списки мобов, подгружать их из базы и т.п.). Посмотри на волте что-то типа spawn system, этого добра там должно быть навалом.
|
Feb 5 2012, 22:32
Сообщение
#3493
|
|
Level 2 Класс: Обыватель Характер: Lawful Good Раса: Человек |
Например, использовать систему энкаунтер-триггеров из тулсета, там вроде есть опция периодического спавна. Но в онлайне чаще используются аналогичные скриптовые системы, как правило самописные, они более гибкие (можно динамически менять списки мобов, подгружать их из базы и т.п.). Посмотри на волте что-то типа spawn system, этого добра там должно быть навалом. А есть готовый скрипт на spawn монстров, но в котором можно будет менять монстров, и время spawna, спавн убудет делаться для онлайна, сам со скриптами не умею работать, по возможности если есть скрипт допишите с нормальный разяснением, чтобы человек не пользовавшийся скриптами понял Автор:::::::::::::::::Milez::::::::::::::::::::::: ::::::: |
Feb 6 2012, 07:20
Сообщение
#3494
|
|
Level 19 Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов |
На волте и есть готовые скрипты. Но без знания скриптового языка всё равно ничего не сделать. Нельзя же читать, не зная букв, или решать дифференциальные уравнения, не зная математики.
|
Feb 6 2012, 13:58
Сообщение
#3495
|
|
Level 11 Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов |
Чем, кстати, не устраивают обычные встречи? там можно настраивать мобов и их кол-во, даже генерацию от того какой фракцией наступаешь.
Сообщение отредактировал Melisse - Feb 6 2012, 13:59 |
Feb 6 2012, 21:20
Сообщение
#3496
|
|
Level 2 Класс: Обыватель Характер: Lawful Good Раса: Человек |
В смысле встречи?
Если ставить триггеры, то респ я так понимаю будет происходить, если на него снова наступить, получается надо будет всех информировать, что при входе снова в локацию, будет респ мобов, и ставить триггер как раз на входе, или может я что то не понимаю? Потом допустим если мне нужно поставить моба где нибудь на возвышении гор одного, как я это сделаю с триггером, он респаться будет на каком растоянии.. У меня просьба, если кто делал скрипты на спавн мобов с пропись разных мобов, чтобы их можно было поменять на других, ну тоесть на любых других какие будут в модуле, и время через каторое будет респ, я в скриптах почти 0, а разбиратся в них просто времени нет работаю много, если кто напишет, потом обязательно договоримся$$$ |
Feb 7 2012, 04:15
Сообщение
#3497
|
|
Тролль Класс: Пьяный Мастер Характер: Chaotic Neutral Раса: Тварь |
Рекомендую - для написания тривиальных эвентов и в качестве удобного пособия примеров для изучения NWN-скриптинга. Запускаем тулсет, открываем нужную локацию, открываем вкладку с монстрами и жмем кнопку «редактировать и копировать» на понравившемся, делаем что хотим с этим монстром и создаем ему уникальный резреф в конце сохраняя в кастомной своей палитре, копируем этот резреф себе в сторонку. Скачиваем скрипт генератор, запускаем, выбираем (в окошке вверху слева) тип скрипта «нормальный скрипт», выбираем источник запуска скрипта «ПС входит куда-то», отменяем спец условие, выбираем из списка скриптовых эвентов «сделать если ЭТО тогда ТО условие» и жмем кнопку «скрипт»: - выбираем тип условия «проверить локальную целочисленную»; - вводим в поле название для нашей переменной (ну например MONSTER_SPAWN_CHECK); - выбираем галочку на условие «точно равно»; - выставляем значение «0»; - жмем «ок»; выбираем из списка скриптовых эвентов «спавн созданий» и жмем кнопку «скрипт», заполняем поля: - «резреф» (копируем его из описалова монстра которого хотим спавнить); - визуальный эффект спавна (можно не трогать); - точка спавна – по вейпоинту (указываем таг нашего вейпоинта); - действия создания при респавне – выбираем «без действия»; - жмем «ок – выход»; выбираем из списка скриптовых эвентов «установка локальных переменных» и жмем кнопку «скрипт»: - выбираем тип переменной «целочисленная» и ставим соответствующий флажок (integer); - вводим в поле название нашей переменной упомянутое блоком выше (в примере MONSTER_SPAWN_CHECK); - устанавливаем ее в значение «1»; - жмем «ок – выход»; жмем кнопку «окончить текущие если», выбираем вариант «просто закончить», жмем кнопку «закрыть», видим в окошке наш сгенерированный скрипт и комент «поместите на OnEnter»: Код //Put this script OnEnter void main() { object oPC = GetEnteringObject(); if (!GetIsPC(oPC)) return; if (GetLocalInt(oPC, "MONSTER_SPAWN_CHECK")== 0) { oTarget = GetWaypointByTag("TAG_OF_WAYPOINT "); lTarget = GetLocation(oTarget); oSpawn = CreateObject(OBJECT_TYPE_CREATURE, "resref_of_creature", lTarget); SetLocalInt(oPC, "MONSTER_SPAWN_CHECK", 1); } } копируем все это дело, жмем «свойства локации» в тулсете, открываем вкладку «события» и ищем окошко «OnEnter», жмем кнопочку чуть правее чтоб открыть редактирование скрипта на этот триггер и вставляем туда этот скопированный из генератора скрипт и сохраняем его под оригинальным именем, ставим на локации вейпоинт упомянутый в скрипте с упомянутым оригинальным тагом («TAG_OF_WAYPOINT» или что там придумается) – это будет точка спавна упомянутого монстра (резреф которого не забываем указать посмотрев в своей кастомной палитре в свойствах монстра). Жмем в генераторе скриптов кнопку «очистить для нового скрипта», «ок», снова выбираем тип скрипта «нормальный», выбираем стартер «ПС разрушивает/убивает монстра или плейсебл», выбираем че будет если убьет последователь – «отразится на ПС», отменяем наличие спец условия, выбираем из списка скриптовых эвентов «установка локальных переменных» и жмем кнопку «скрипт»: - выбираем тип переменной «целочисленная» и ставим соответствующий флажок (integer); - вводим в поле название нашей переменной упомянутое блоками выше (в примере MONSTER_SPAWN_CHECK); - устанавливаем ее в значение «0»; - жмем «ок – выход»; жмем кнопку «закрыть», видим и копируем наш сгенерированный скрипт с пометкой «поместить на OnDeath»: Код //Put this script OnDeath void main() { object oPC = GetLastKiller(); while (GetIsObjectValid(GetMaster(oPC))) { oPC=GetMaster(oPC); } if (!GetIsPC(oPC)) return; SetLocalInt(oPC, "MONSTER_SPAWN_CHECK", 0); } копируем это дело и жмем свойства нашего кастомного монстра с упомянутым резрефом в нашей кастомной палитре, выбираем пункт «событий» и находим триггер «OnDeath», жмем справа чтоб редактировать скрипт и вставляем наш скопированный сохранив его под оригинальным названием. Итого: имеем локацию; на ней точку респавна монстра (наш вейпоинт); и скрипт на входе в локацию который проверяет игрока в нее входящего на локальную переменную – если игрок уже убивал нашего оригинального монстра или еще не был на этой локации, значит новенький и целенький монстр появится в указанной точке при входе, если уже заходил в локацию но монстра еще не убивал, значит спавнить нового не будем. Система будет отлично работать для синглплеерного спавна монстра – для мультиплеерного как правило они сложнее и индивидуальнее. Сообщение отредактировал Flaristan - Feb 7 2012, 04:19 |
Feb 7 2012, 07:27
Сообщение
#3498
|
|
Level 19 Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов |
Valeroy, скажу грубовато, но прямо - во всём нужно разбираться. Если ничего не изучать самому, а только просить сделать другого и показать, где тут настройки, ничего у тебя не выйдет. Для начала могу посоветовать, как бы странно ни звучало, - погуглить про нвн тулсет. Когда я начинал (лет 9 назад, с сингловых модулей), с интернетом было туго, да и форума этого вроде не было вообще, однако я нашёл себе статьи по тулсету с разжёвыванием всего и вся. Даже кастом контент зацепили. Кажется, они были на сайте либо игромании, либо лки.
Когда выкуришь мануалы с элементарными основами, у тебя не будет вопросов по поводу того, как работает тот же триггер встреч. Скрипты да, в полной мере понятны далеко не всем, но уж выучить настройки плейсов, итемов и триггеров ума много не надо. До кучи, стоит распотрошить все модули под рукой (первым делом - кампанию). К слову, нордок (по крайней мере его версия, доступная для скачивания) в качестве спавнера использует как раз-таки самые обычные триггеры. Гем1 в своё время тоже использовал триггеры для спавна. |
Feb 7 2012, 08:27
Сообщение
#3499
|
|
Level 7 Класс: Обыватель Характер: True Neutral Раса: Человек NWN: Модмейкер Начало Войны |
Valeroy, есть тут на форуме такая штука как база скриптов, страница 2 пятый сверху.
|
Feb 7 2012, 15:03
Сообщение
#3500
|
|
Level 2 Класс: Обыватель Характер: Lawful Good Раса: Человек |
Место где появится новый NPC определяется путём выставления вэйпоинтов с названием типа "WPR_"+ тэг_умершего_NPC. Если в начале тэга NPC стоит "NPC_", то эти четыре символа отрежутся. Может кто нибудь разжевать? Flaristan спасибо тебе огромное, приду домой буду пробовать, а на мультиплеер разве не пойдут такие скрипты? А как сделать допустим, чтобы было 4 сундука на боссе и в каждом сундуке были вещи, около 5-7, на каждый класс, и еще чтобы после каждого появления босса вещи тоже появлялись в сундуках, но уже другие, ну с небольшим добавлением |
Текстовая версия | Сейчас: 26th April 2024 - 01:36 |