Перейти к контенту

Рекомендуемые сообщения

Struck

1.

  Цитата
но текстов ограниченное количество, а кликов неограниченное количество, и еще нужно сделать запоминание одного текста для кажлого лист итема...
- напрашивается однозначное ограничение - текстов в исходной таблице должно быть НЕ менее чем итемов -> тогда для каждого итема по первому по нему клику будет сопоставлен и запомнен(! должно быть!) и далее кликай сколько хочешь, т.к. будут выдаваться уже запомненные сопоставленные с итемами тексты. Т.о. условие "и он всегда должен выпадать когда я нажимаю на" удовлетворяется.

2. Напрашивается очевидное: при первом клике по итему из исходной таблицы изымается рандомный текст и помещается в поле второй (рабочей) таблице по ключу итема ( Tabl[item] = text_X ). При последующих кликах предварительно проверяется наличие ключа/поля в рабочей таблице и, если нет - то выбор для нового итема нового рандомного текста из исходной таблицы (с удаелнием из нее и запоминанием в рабочей).

3. Не очень понятна фраза:

  Цитата
... и еще нужно сделать запоминание одного текста для кажлого лист итема...
- если подразумевается что это некий второй сопоставленный с итемом текст, обязательный для показа, то ... маловато условий. Это типа заголовок/нотация, т.е. заведомо сопоставленный текст, или текст тоже как-т рандомно иль иначе выдается или еще что ...

В любом случае поле рабечей таблицы с ключом-итемом может быть составным и содержать пару сопоставленных итему текстов. Или же сделать третью табличку для "заголовков/описаний" итемов ... Тут уже фантазия и вусы. ;-)

 

Вот вроде в кратце и весь алгоритм (один из ...) - теперь воплощай в коды. ;-)

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Всем доброго времени суток. На днях я столкнулся с проблемой считывания параметров NPC из XML-файла. Мне нужно считать параметр <bio>Краткая_биография</bio>.

Полазил в интернете, посмотрел различные шаблоны XML-парсинга на LUA, и функцию string.gfind. Так вот, шаблон для захвата я вроде бы составил (не уверен, что правильно):

  Шаблон для захвата (Показать)
Изменено пользователем ColR_iT
Ссылка на комментарий

Получить значение поля bio не представляется возможным через функции. Можно конечно написать движковую функцию для того чтобы получать биографию, но врядли ты это осилишь. Поэтому придется парсить весь файл. Есть отличный парсер xml от Kirag, который отлично распарсивает весь файл в табличку, откуда я вынимал значения поля bio. Поищи на этом форуме

Freedom

Ссылка на комментарий

Кто-нибудь использовал для неписей или монстров функцию action()? Рабочая ли она? В ЧН она использовалась, но финальном ТЧ вроде нет.

 

Ты про какую конкретно функцию говоришь? Функция action есть в файле _g.scritp, есть метод класса planner_action, унаследованного от класса action_planner; есть в классах game_object и object.

ColR_iT

 

Добавлено через 53 мин.:

Пример: action(trader, anim("vstuplenie"), cond(cond.anim_end))

 

Эта функция из файла _g.script.

ColR_iT

Изменено пользователем ColR_iT
Ссылка на комментарий

Прошу помочь разобраться с вопросом.Имеем данный код

  Код (Показать)
Изменено пользователем panzyuza
Ссылка на комментарий

panzyuza, нет, в твоем коде та же ошибка что и в оригинальной игре, т.е. наступаешь на грабли, которые кочуют из мода в мод.

Функция change_character_reputation принимает аргументом число НА которое требуется изменить (change) ранг НПС, а не которое требуется установить.

Т.о. строка должна выглядеть так:

db.actor:change_character_reputation( math.random(88,99) )

- тогда имеющийся ранг актора (db.actor:character_reputation()) и будет изменен (увеличен/уменьшен) на задаваемое значение (88...99).

В твоем же случае, как и в оригинальной игре, к уже имеющемуся рангу будет добавлен такой же плюс твоя добавка -> и постепенно будет превышено максимальное значение для ранга и "ранг уйдет в минус".

Если же требуется установить фиксированное значение ранга - используй функцию установки, а не изменения: set_character_reputation(number)

 

То же самое касается и community_goodwill, т.е.:

- change_community_goodwill - изменяет на задаваемую дельту уже имеющееся текущее значение группировки к актору/НПС;

- set_community_goodwill - устанавливает заданное значение, отбрасывая прежнее.

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
Artos, понятно.Спс.Просто был такой случай.Нужно было актору установить отношение к бандитам нейтрал(+2000).Но когда сработала функция set_community_goodwill ничего не произошло.Напротив change сработал. Изменено пользователем panzyuza
Ссылка на комментарий

panzyuza

Я дал информацию по теории, чтобы ты исправил практические ошибки. ;-)

На практике функции set_ действительно имеют некие коллизии в той или иной ситуации и вероятно это (переход от set к change без учета нюанса) и привело к ошибке в исходной игре.

Конечно, если требуется просто задать абсолютное значение рангу или отношениям проще использовать set, но и применяя правильно change - получаем тот же результат.

Из моей практики:

Установка отношения для конкретного непися ( oNPC:set_community_goodwill(iGoodwill, oTargetNPC) ) - вполне корректно работает.

А вот с группиповками похуже ... Тут для себя делаю так: Получаем текущее значение отношения:

iGoodwill = relation_registry.community_goodwill(sFaction, oActor:id())

далее вычисляем требуемое, с учетом НЕпереполнения(!):

iChkGoodwill = math.min(3000, math.max(0, iGoodwill +200))

ну и уже изменяем именно относительно текущего:

relation_registry.set_community_goodwill (sFaction, oActor:id(), iChkGoodwill)

- т.о. ставим именно сколько нам нужно, а не относительно имеющегося, которое может быть неприемлемым ... Несколько кучеряво - но надежно.

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Кто подскажет, что это за метод такой чудный - play_no_feedback, у класса sound_object, что при его использовании метод playing, этого же класса, всегда возвращает false, хотя я отчётливо слышу в наушник, как звук проигрывается?

И вообще для чего у него аж пять аргументов? В принципе, первый, второй и пятый более менее понятны, а вот остальные для чего?

Ну и вдогонку по классу sound_object...

Совсем непонятны свойство frequency и метод stop_deffered. У кого какие мысли на счёт них?

Ссылка на комментарий

ColR_iT, какое-либо действие можно запустить на выполнение с или без обратной связи, т.е. с отслеживанием состояние действия или по принципу "дал команду выполнить и забыл".

При наличии обратной связи можно узнать, например относительно звука, играет ли звук, сколько времени еще осталось играть и т.п. ... Без обратной связи, отдав команду для проигрывания звука, ты не озаботился о последствиях и естественно в любом случае не можешь уже узнать играет звук или нет, т.е. попытка узнать это "всегда возвращает false".

3-ий аргумент - время задержки перед проигрыванием, т.е. начальная пауза.

4-ый аргумент - позиция относительно об'екта (1-ый аргумент), по которой будет проигрываться звук. т.е. звук не будет отслеживать об'ект, следуя за ним, а будет привязан к конкретной точке.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Artos, не очень понял твои слова об "обратной связи".

Вот код:

  Code (Показать)
Ссылка на комментарий

ColR_iT, обратная связь - это как раз то, что запущенное событие способно тебе предоставлять информацтю о своем состоянии и ты можешь проверять играет ли и т.п.

Если ты запускаешь проигрывание звука методами play или play_at_pos - тем самым ты запускаешь с обратной связью и можешь "общаться" с запущенным процессом, проверяя playing, останавливать - stop и т.п.

Запуск методом play_no_feedback - НЕ дает обратной связи, т.е. ты просто дал команду "проиграть звук" и все, далее процесс автономен и не общается с тобою, т.е. не реагирует на твои запросы (нет обратной связи). Т.о. сделав запрос такому процессу: "Ты играешь?" - ты всегда будешь получать в ответ false, т.е. процесс тебя просто не слушает и не отвечает на твой запрос.

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
  Struck писал(а):
как запомнить какой текст выпал и больше его не выдавать
Для твоих целей как нельзя лучше подходит совершенно замечательный код, написанный Рики Лэйком (Rici Lake, rici@ricilake.net) Изменено пользователем Gun12
Ссылка на комментарий

Проконсультируйте по такому вопросу:

У меня в моде получается очень много рестрикторов, который срабатывают один раз, а потом лежат мертвых грузом. Хотел бы узнать, как правильно удалить спейс_рестриктор чтобы не получить после удаления осложнений. Спейсы не прописаны в in/out рестрикторах у НПС. Подойдет ли здесь простое получение серверного объекта и его удаление через alife():release()?

Freedom

Ссылка на комментарий
_Призрак_, а чем плох метод перевода схемы рестриктора в nil? Их апдейты при этом не работают, схемы - подавно, висят себе в сохранениях... Изменено пользователем ColR_iT
Ссылка на комментарий

Не согдашусь с ColR_iT'ом, 'мусор" и рудименты в малых количествах может и хлопотнее подчищать чем не замечать, но ... и море состоит из капелек, так что и захлебнуться можно. :crazy:

 

Ну а серьезно, если рестриктор не прописывается куда/кому-либо, а обычный, то мало можно найти причин беспокоиться о его удалении. Если уж аномалии прямо "на ходу" удаляются - то уж с рестрикторами все гораздо проще.

_Призрак_, советую задуматься над довольно простым, но действенным вариантом зачистки отрабоотавщих рестрикторов:

1. Предпосылки:

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

- в зачем оставлять по всей Зоне, хотя и невидимые, но никомму не нужные и по сути рудиментарные уже об'екты?

Ответ довольно прост, потому что засунув все в конфиги алл.спавна, на фоне всей кучи этого и не заметно, а в игре игрок и не подозревает. Для скриптового спавна же требуется немного заморочиться и с конфигами и с нет-пакетами (шейпами) ... В результате - как в столовой, берем на поднос весь ассортимент обеда и с него едим, хорошо хоть первое со вторыи и с компотом не замешано вместе, а по разным тарелкам/стаканам ... ;-)

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

Наверное самое разумное: появляется ГГ на новом уровне первый раз - нужные рестрикторы спавнятся на локацию. Уходит с нее - отработавшие удаляются. Вернулся (если по сюжету) - другой набор рестрикторов ... и т.д. и т.п. Момент перехода актора на др.уровень ловить несложно, и по этому моменту принимать решение, так что даже с запасом время есть.

 

2. То, что отработавшие рестрикторы не сильно заняты в апдейтах - в общем да, но не забываем, что все они спавнятся (а это время), всем онлайновым инициализируется логика, для всех все одно вызывается и метод апдейта, проверяющий не отрабоотавший ли(?), т.е. в табличке ли апдейтящихся ...

Также, биндер в табличку апдейтов заносит по мере спавна (а значит при загрузке игры в net_spawn), а удаляет - по net_destroy, и, т.к. рестрикторы в оффлайн не уходят и на дистанцию алайфа чихают, то ... пока не выйдешь из игры/с локации - отключенные рестрикторы апдейтятся "по полной программе" (ну или около того).

Все это конечно вроде как мизер (для каждого в отдельности иль кучкой), но ... все это суммируясь отжирает русурсы. Так зачем же их терять с самого начала игры и копить баласт на протяжении всего похода по Зоне? Сами модмейкеры игроку и переносимый вес обрезают, и патрон/аптечек лишают, и здоровье при первом удобном случае норовят попортить ... а вот за "собою"подчищать и освобождать игру от "переносимого веса-баласта" - это как раз и как-то не принято. :-(

 

3. Ну про занятые и не освобождающие ID можно не поминать в суе ... но если, например, десятка два локаций и на каждой по сотне две отработанных рестрикторо - 20х200 = 4.000 - это уже более 6% (от 65535), что не так уж и мало только на баластные рестрикторы! На большом и развивающемся моде это может быть началом проблем.

 

Так что _Призрак_, уверен что рестриктор отработал - чисть его при первом удобном случае, но не превращай в погоню за "чистотою", так что затратишь не менее чем вычистишь. ;-)

 

P.S. В принципе, даже проверял и где-то применяю - в самой логике рестриктора по окончании активной секции переключая на 'nil' - вызываю функцию удаления "самого себя". Т.к. удаляется серверный об'ект а в потоке работает гейм-об'ект, удаление происходит чисто и удобно, т.е. без лишних телодвижений и затрат.

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Доброго времени суток.

Камрад пытался реализовать, чтобы производился звук при одевании комбинезона.

На тестах получили следущее:

звук производится постоянно, вне зависимости от того, надевается предмет, стоит в слоте или вовсе в рюкзаке.

Делали так:

  код (Показать)

Выводы модмейкера:

1)Вылетает - это хорошо. Значит, работает :)

2) Если хочешь сделать что-то хорошо, делай сам!

3) Если падёшь духом, падёт и мод.

4) Он живой... :o

Ссылка на комментарий

SibireaStalker, Попробуй так, сам не проверял, да и алгоритм не сильно экономичный.

 

  Тык (Показать)
Изменено пользователем Vano_Santuri

Что-то кончается, что-то начинается...

Ссылка на комментарий

SibireaStalker,

стоп-стоп... Разве в оригинале НЕТ звука надевания костюма? о_О Что мешает изменить сам звук, если уж он не устраивает?

  • Согласен 1
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...