www.nwnights.ru Группа VKontakte Youtube Чат в дискорд Группа в Telegram | Подключение Обновления Поиск Участники |
Здравствуйте Гость ( Вход | Регистрация ) | Выслать повторно письмо для активации |
Sairilias |
Отправлено: Dec 19 2006, 03:29 AM
|
|
в общем так: есть скрипт спавна (смотрю дефолтовый, в Джаспер еще не глядел). заглянув туда мы видим что WalkWayPoint отдается мобу сразу же после выставления всех флажков поведения. сама по себе эта функция содержит в себе кучу блоков на поиск поинтов, анализ ближайшего, вычисление следующего (вычисление суффикса), следование к поинту и может чего еще по мелочи. если вникнуть в суть этих блоков (пробовали набросать то что они делают?), то выходит что не так уж и мало для простого оператора берет на себя эта функция.. проверка то поинтов идет не в локации моба, а по всем поинтам модуля.. далее, залезая в скрипт слота на обнаружение видит что при обнаружении / потере ПС моб повторно получает команду на валк. кстати если мобов много, то переотдача команды снова заметна на мобе - он дергается чутка, ну или не чутка, тут уже от системы зависит. в общем вывод - нет ПС в регионе.. на фик он нужен этот валк. в хербите вообще ужасная весчь висит.. если флаг на постоянную анимацию поставлен, переотдача валка будет идти каждые 6 сек.. бррр.. как отключить его? дело в том, что раз получив команду, моб будет выполнять ее постоянно, даже если игрок покинет локу, поэтому вешать на весь хербит и перкептион проверку наличия игрока не выход, блоки валка все равно будут выполнятся.
есть у кого соображения и известные способы устранения этой досадности? -------------------- "Neverwinter Nights - A world without limits" © Rico
- Мам, а почему король нам всегда консервы присылает? Корову же дешевле! - Много ты понимаешь в политике, - проворчала Дракониха, выковыривая печеного рыцаря из металлического панциря. © Fael |
Sairilias |
Отправлено: Dec 19 2006, 04:41 AM
|
||
|
пока нашел только такой выход: валк в спавне отрубаем (или любое другое раздражающее нас действие). в перкептионе оставляем (касается валка, но по идее аналогию можно сделать с любым событием). в хербите делаем такое:
в итоге получаем что далеко не у всех существ хербит выполняется. побочный эффект: надо писать отдельный скрипт на хербит для обитателей регионов "REGION", на входе в локации этого региона либо вешать переменную на игрока (что годится для сингла), а для шарда надо при входе игрока в любую локацию региона, вешать на какой нить объект (скажем вейпоинт эту переменную, и считывать ее с этого вейпоинта, также надо обнулять ее если все игроки вышли из локаций региона или на хербите локации оставлять проверку на наличие игроков), добавочный минус - тупить мобы будут первые 6 сек, если игроки все выйдут из игры и зайдут снова, но это время должно компенсироваться коннектом игрока. -------------------- "Neverwinter Nights - A world without limits" © Rico
- Мам, а почему король нам всегда консервы присылает? Корову же дешевле! - Много ты понимаешь в политике, - проворчала Дракониха, выковыривая печеного рыцаря из металлического панциря. © Fael |
||
Aiwan |
Отправлено: Dec 19 2006, 05:38 AM
|
||
|
Вообще, вроде функция WalkWayPoint пашет тока на ближайшие от моба вейпы. Если не стоит на модуле локалка X2_SWITCH_CROSSAREA_WALKWAYPOINTS == TRUE; - (на Modules) тоды ходят по вейпам из локации в локацию. А тут уже выбирать автору, что ему надо.
Это сообщение отредактировал Aiwan - Dec 19 2006, 05:41 AM |
||
Sairilias |
Отправлено: Dec 19 2006, 06:49 PM
|
|
естественно эта локалка дается модулю по входу в него, сразу же, иначе НПС не будут просто выходить из своих домов на улицу и заходить в них.
испытания прошли успешно, хербит рубит все действия у мобов если условие проверки игрока не выполняется. главное его правильно задать. можно сверять местонахождение игрока с известным значением и при переходах из области в область записывать это значение на игрока, тогда скрипт надо будет писать отдельно для всех НПС одного города, можно сделать скрипт универсальным - сверять локальную переменную игрока с локальной переменной моба, но тогда надо в тулсете каждому жителю города указывать эту переменную (прописка своеобразная), вроде муторно. но ведь жители города как правило делаются друг из друга клонированием, так что и этот метод прост. для шарда сложнее так как там как я слышал нарушение связи и вылет игрока не считается выходом из локации, поэтому ставить счетчик не выход. остается только проверять местонахождение каждого игрока и раздавать сигналы соответсвующим городам, но я думаю проверять на хербите местоположение пускай даже 40 игроков легче чем проверять все условия хербита и выполнять все его инструкции для нескольких сотен НПС. получаем, что в модуле допустим с 500 неписями, выполнять анимацию будут только несколько десятков мобов того города / местности, где находится игрок (игроки). поскольку остальная местность - не города, то и мобов по умолчанию там изначально нет, они там спавнятся при активации энкаунчера (это для шарда). значит им менять вставлять эту проверку в хербит необязательно (можно, но смысла почти нет - умрет либо игрок, либо моб, остальные варианты редки). для сингла единичные мобы в дикой местности сильно не съедят ресурсов своей анимацией, хотя при желании можно и им отключать хербит Это сообщение отредактировал Sairilias - Dec 19 2006, 07:08 PM -------------------- "Neverwinter Nights - A world without limits" © Rico
- Мам, а почему король нам всегда консервы присылает? Корову же дешевле! - Много ты понимаешь в политике, - проворчала Дракониха, выковыривая печеного рыцаря из металлического панциря. © Fael |
dumbo |
Отправлено: Dec 19 2006, 11:04 PM
|
||
|
хм. может я недопонял чего-то... первая строчка дефолтных хб и перс:
т.е. когда в локе никого из игроков нет, до "гуляния" дело и не дойдет. |
||
Sairilias |
Отправлено: Dec 20 2006, 12:32 AM
|
|
если ставить АИ на минимум скрипт хербита выполняться дальше не будет вообще. "Х" у меня используется для проверки было ли прерывание команд и был ли запуск валка, который у меня отключен в спавне. уровень АИ тут ничем не поможет. если НПС понизить уровень АИ до минимума, гулять в локации где нет игрока он все равно будет, потому что валк ему уже будет задан и будет выполняться пока не будет прервана процедура. так что насильно прерывать анимацию все равно придется если хочется съэкономить ресурсы. а если не отключать в спавне валк, и анимацию, то все равно какой АИ будет у моба.
вот если отрубить анимацию в спавне и включать ее в хербите, то да. понижение АИ даст результат - хербит не будет выполняться, но не даст прерывания исполнения уже запущенной профедуры. а если игрок будет в городе, то в этом случае будет все время переотдача команды играть анимацию и гулять снова, что нам не надо. Это сообщение отредактировал Sairilias - Dec 20 2006, 01:16 AM -------------------- "Neverwinter Nights - A world without limits" © Rico
- Мам, а почему король нам всегда консервы присылает? Корову же дешевле! - Много ты понимаешь в политике, - проворчала Дракониха, выковыривая печеного рыцаря из металлического панциря. © Fael |
dumbo |
Отправлено: Dec 20 2006, 02:51 AM
|
||||
|
целью является "негуляние", когда нет игроков? - тогда так: вместо той строки, что я уже приводил, вписать такое:
чисто теоретически. на практике могут тоже проявиться, наверное, косяки...
есть с этим АИ один "тонкий" момент: игра его сама переключает в зависимости от условий. ps. так как я не уверен, что игра умеет отличать ДМа от игрока в данном случае(при переключении АИ), то лучше для проверки включить лог в файл в WalkWayPoints... |
||||
Sairilias |
Отправлено: Dec 20 2006, 03:10 AM
|
|
если привязывать хербит к уровню АИ, то все равно что-то должно фиксировать выход игрока из города и менять этот АИ мобу, поскольку присваивать каждому НПС отдельно уровень АИ муторно, то лучше сделать это в этом же хербите первой операцией, в итоге получаем что моб будет проверять есть ли игрок, менять себе уровень АИ, и уже в зависимости от уровня либо выполнять дальнейшие действия или ничего не делать, проще тогда сразу просто проверять наличие игрока и не трогать АИ, тем более если он меняется игрой при загадочных обстоятельствах.
далее, если мы будем чистить акции (мобы в городах по любому не пострадают, по идее там нет мобов враждебных друг другу фракций), но прерванные функции требуется запустить при появлении игрока, надо в другой ветке условия писать их старт (иначе старт выполнения анимации будет выполнен при обнаружении игрока - скрипт перкептион, но тогда иногда мобы будут тупить - чек на обнаружение если не прокинут). делать старт функций анимации так же как и с чисткой акций каждые 6 сек не желательно, при большом количестве жителей в городах они могут начать дергаться, поэтому проверка был ли запуск все равно нужна. ДМа от игрока можно отличать, ДМ не является игроком, и есть спец функция: GetIsDM(object); -------------------- "Neverwinter Nights - A world without limits" © Rico
- Мам, а почему король нам всегда консервы присылает? Корову же дешевле! - Много ты понимаешь в политике, - проворчала Дракониха, выковыривая печеного рыцаря из металлического панциря. © Fael |
dumbo |
Отправлено: Dec 20 2006, 10:42 AM
|
||||||
|
никаких загадочных обстоятельств. нет игрока в локе - AI_LEVEL_VERY_LOW(0), есть игрок - AI_LEVEL_LOW(1), драка - AI_LEVEL_NORMAL(2)...
сий длинный тред побудил меня к небольшому тесту: включил логгинг аи и walkway. результат: когда игрока нет в локе, неписи сами останавливаются в течение одного раунда. как-раз благодаря той строчке, которую я привел в первом моем посте в этом треде... за сим разрешите откланяться... |
||||||
Sairilias |
Отправлено: Dec 20 2006, 12:14 PM
|
|
у меня тест был попроще и понадежнее, пара точек, сигнальный триггер. НПС беззаботно шастал по нему не желая останавливаться. оно и понятно, без чистки акций он и не должен останавливаться, пусть даже будет перманентно отупевшим. если включать чистку акций, надо на другую ветку вешать запуск валка (иначе это будет происходить при визуальном контакте с НПС), если АИ поднимется на прежний уровень, без вторичной проверки получится переототдача валка каждые 6 сек снова, чего мне не нужно. получается что для желаемого результата скрипт хербита менять все равно придется, и все таки с двумя проверками.
но я все равно не пойму как поможет проверка на АИ когда придется сделать город, он в любом случае получается на нескольких локациях. так как запуск АИ будет происходить только если НПС окажется в одной локации с игроком, и отключаться если игрок выбежал из локации. тогда НПС не смогут перемечаться между локациями. будет игрок стоять на площади допустим, а торговцы не выбегут на площадь утром, жители не выйдут из домов, пока игрок каждого не навестит в их жилищах. -------------------- "Neverwinter Nights - A world without limits" © Rico
- Мам, а почему король нам всегда консервы присылает? Корову же дешевле! - Много ты понимаешь в политике, - проворчала Дракониха, выковыривая печеного рыцаря из металлического панциря. © Fael |