![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#26
|
|||
Level 9 ![]() Класс: Волшебник Характер: Chaotic Good Раса: Дракон NWN: Скриптинг [PW] ![]() |
Ничего подобного не обнаружил, специально сделал тест-модуль и проверил. Даже если вещь stackble, локальные переменные нормально живут. Может ты в сингле проверял? С локальными переменнымы есть одна багафича, если они stackable. Если их разделить в игре на меньшие части, то, что останется - будет со старыми локальными переменными, а отделенная часть потеряет все переменные. И это очень неприятно :( |
||
![]() ![]()
Сообщение
#27
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
угу...таким образом единственная инфа, которую можно сохранить у stackable итемов при обьеденении\разделении, и которую при нужде скриптами можно менять ( в разумных пределах :D ), это чардж... :yes:
|
![]()
Сообщение
#28
|
|||
Level 9 ![]() Класс: Волшебник Характер: Chaotic Good Раса: Дракон NWN: Скриптинг [PW] ![]() |
С этим есть большая проблема, выпадение лута игрока. Обычный механизм работы скрипта с выпадением лута: 1. пройтись по всему инвентарю 2. скопировать все, что должно упасть туда, куда должно упасть (copyitem с сохранением локальных переменных если нужно) 3. удалить все, что скопировали ... Если вещей много, сервер нагружен, а игрок злобный читер или просто не повезло - вполне может быть ситуация, когда при выходе игрока в этот момент происходить дублирование вещей. Т.е. вещи скопировались, пометились на удаление, но скрипт до конца не успел дойти, игрок уже вышел. Возникает вопрос - как с этим бороться? :) Можно вместе с удалением вешать на вещь локальную переменную, при входе игрока такие помеченные вещи просто удалять. Можно попробовать копирование\удаление одной вещи вынести в отдельный скрипт и вызывать его, возможно тогда будет корректно удаляться (надо проверять, только сложно). Может кто боролся с этим и может что посоветовать? ps. Хотя я сам полностью за те варианты, где лут не выпадает при смерти от моба и т.п. Что само по себе не исключает смерть от рук ДМ-а в квесте с полной потерей персонажа и вещей :) |
||
![]()
Сообщение
#29
|
|
Level 11 ![]() Класс: Вор Характер: Neutral Evil Раса: Эльф NWN: Скриптинг [PW] Validor2 ![]() |
у меня лут падает всегда и везде, но с подобной проблемой не сталкивался - скрипт дропа лута всегда до конча срабатывал...
единственный косяк случался, если игрок умирал в момент перехода из локи в локу... потому единственный фикс, который я делал - проверка if(oDropBag!=OBJECT_INVALID)... такая проверка не только фиксит возможный дюп, но и отучает игроков убегать от мобов в переходы :) |
![]()
Сообщение
#30
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
_kaa_
Да, точно, это у меня глюк был. Сообщение отредактировал virusman - Sep 26 2005, 17:44 |
![]()
Сообщение
#31
|
|||
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
типа того:
на входе проверять на итемы с "deleted"=1 и удалять их.. |
||
![]()
Сообщение
#32
|
|||
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
наковырял вот неприятность, но она уже из прошлого - до версии 1.66.8074(конкретно у меня баговала 8067). есть предположение, что сие относится только к clcompile.exe. баг из прошлого - он существовал до 1.30 и каким-то образом дожил в clcompile до недавних дней. есть правда отличие - там глючило на локальных переменных - тут на константах. баг: неправильное восстановление стека скриптовой виртуальной машины на break/continue инструкциях, если в блоке вводилась локальная константа. например:
в версии 1.66.8074, повторюсь, уже все нормально... |
||
![]()
Сообщение
#33
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
To: dumbo
Я ж говорил. :) В чейнджлисте 1.66 как раз был написано про этот фикс. |
![]()
Сообщение
#34
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
В функциях Action(Force)MoveToLocation и ActionMoveAwayFromLocation существует утечка памяти. Если ваш модуль "течёт" - обратите внимание на вызовы этих функций.
|
![]()
Сообщение
#35
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Веселые грабельки в StartNewModule().
Функция срабатывает только при наличии игроков на сервере (есть мысль, что с опцией restart module then empty работает всегда, но опция популярностью не пользуется). Т.е. единственное ее применение в pw - рестарт с дм-ванда. А мне так хотелось не извращаться со сменой модулей "снаружи" (их два), а подгружать их друг из друга (IMG:style_emoticons/kolobok_light/rolleyes.gif) Но самое веселое тут то, что однажды запущенная без игроков функция "ломается" совсем и отказывается работать даже с игроками. Просто ничего не делает, без ошибок в логе. P.S. То, что работает не всегда как минимум на двух разных конфигурациях, - 100%. Саму закономерность вылавливал двое суток, но там все так хитро, что мог чуть ошибиться. |
![]()
Сообщение
#36
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
У меня в тестовом модуле StartNewModule() работать отказалась, когда игрок нажал на рычаг рестарта и вышел, а функция вызывалась секунды через 3 после юза рычага. Что подтверждает вышеизложенное (IMG:style_emoticons/kolobok_light/smile.gif)
Цитата А мне так хотелось не извращаться со сменой модулей "снаружи" (их два), а подгружать их друг из друга А если рестартить на OnClientEnter модуля при определённых условиях? Хотя тогда придётся сильно извращаться со временем...Функции ApplyEffectToObject, ApplyEffectAtLocation не работают, будучи вызванными из невалидного обжекта. Neverwinter Script DelayCommand(12.0f, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HARM), GetLastUsedBy())); DelayCommand(18.0f, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), GetStartingLocation())); DestroyObject(OBJECT_SELF); При юзе обжекта никаких визуальных эффектов не наблюдается. |
![]()
Сообщение
#37
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Цитата А если рестартить на OnClientEnter модуля при определённых условиях? Изврат. Я написал нехитрую программулинку, которая на основе ряда данных и содержимого логов сама перезапускает сервер с нужным модулем.Цитата Функции ApplyEffectToObject, ApplyEffectAtLocation не работают, будучи вызванными из невалидного обжекта. Не совсем так (IMG:style_emoticons/kolobok_light/smile.gif) Все экшены выполняются каким-то объектом, с которого скрипт и запускается. Если объект уничтожается, то ничего и не сработает. Если скрипт стоит в слоте объекта, то запускается от имени этого объекта, если это спелл - от игрока/непися и т.п. Т.е. это тот объект, который OBJECT_SELF в скрипте.Достаточно сделать assign на другой объект (который будет существовать 18 сек) и твой скрипт заработает. Кстати и тут есть фишка - внутри assign-а надо аккуратно юзать тот же OBJECT_SELF, т.к. константа подменяется на тот объект, на который ты действие перекинул. |
![]()
Сообщение
#38
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Грабли понятные и логичные, он, тем не менее, я на них в своё время наступил (IMG:style_emoticons/kolobok_light/smile.gif)
Функция GetGoldPieceValue чувствительна к флагам на итеме. Если Выставлен флаг plot - вернёт 0, если нет, но не выставлен identified - вернёт цену базового итема. Нормальное значение функция возвращает только, если убран plot и выставлен identified. |
![]()
Сообщение
#39
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Забавная и не очень приятная штука, с которой я столкнулся первый раз. Если менять свойства оружия при его надевании (onEquipItem), движок упорно использует частично старые свойства. Пример: не так давно я писал систему, которая реализует выставление свойств OnHitSpellCast Greater Dispelling & Enhancement Bonus +5 и убирает свойство Holy Avenger (поскольку биовари в 1.69 холик убили). Самое весёлое, что движок игнорит +5, но остаётся дамаг 1д6 дивайном от зла, который встроен в Holy Avenger. Заделеивание добавления свойств ничего не даёт.
|
![]()
Сообщение
#40
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Неприятная фича - добавленная в версии 1.69 функция SetDescription плохо работает в комбинации с CopyItem[AndModify]. Если сначала вызвать SetDescription(), а потом скопировать предмет - описание станет дефолтным для данного объекта, как будто мы вызвали SetDescription с пустой строкой. Для готового модуля я написал небольшой Java-класс, который заменяет все вхождения вызовов функций копирования во всех модульных скриптах на вызовы кастомных вида:
Neverwinter Script object FR_CopyItem(object oItem, object oTargetInventory=OBJECT_INVALID, int bCopyVars=FALSE) Если нужно, могу выложить исходник.
{ object oCopy = CopyItem(oItem, oTargetInventory, bCopyVars); SetDescription(oCopy, GetDescription(oItem)); return oCopy; } Сообщение отредактировал Ilerien - Apr 21 2011, 19:19 |
![]()
Сообщение
#41
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
Цитата Функция срабатывает только при наличии игроков на сервере (есть мысль, что с опцией restart module then empty работает всегда, но опция популярностью не пользуется) . Попробовал поставить эту галочку ради интереса. Сервер перезагружает модуль сам каждый раз при выходе последнего игрока, без использования функций скриптов. Кроме того сервер сам не сбрасывается, а только обновляется содержимое локаций + наверное, стираются данные о игроках и локалки. Процесс очень быстрый раз- и все) Сообщение отредактировал Laajin - Aug 11 2011, 14:35 |
![]() ![]() |
Текстовая версия | Сейчас: 27th April 2025 - 00:45 |