Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Билдовая флудилка
GAMEINATOR forums > S.T.A.L.K.E.R. > S.T.A.L.K.E.R. БИЛДЫ
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106
ziStam
Цитата(STALKER--2011 @ 25.03.2011, 17:52) *
Ты такой не одинокsmile.gif

я ток уровни скачал, 1936,1971, и 16хх билды скачал
Степан
Неужели вне федеральных городов нет выделенной интернет-линии в домах?
Trollz0r
Цитата(Штирлиц @ 27.03.2011, 14:19) *
Неужели вне федеральных городов нет выделенной интернет-линии в домах?

RedMagic
Цитата(Штирлиц @ 27.03.2011, 13:19) *
Неужели вне федеральных городов нет выделенной интернет-линии в домах?

Представь себе что нету.Хотя не так уж и часто, но всё же.
PS: Я из Украины, живу в городке что рядом с Донецком, в Донецке 100мб стоит около 150 грн в месяц.Я же плачу 250грн в месяц за свои 512кбит (в последнее время скорость выше 200 не поднимается) так как альтернативы нету вообще.Даже и от Укртелекома.
PATRON
600р за ср**ы* ~50кб... куда катимся...
Привет, Андрей
Цитата(Штирлиц @ 27.03.2011, 12:19) *
Неужели вне федеральных городов нет выделенной интернет-линии в домах?
Лолчто?
STALKER--2011, Я тебя понимаю, у меня 3г беспроводной. От Укртелекома. Такая кака. dry.gif Сейчас вообще 8кб\с dry.gif z_crazy.gif cool.gif Я билд 2604 (~160 мб) на, кажись, прошлых выходный 8 часов через Даунлоад Мастер качал

Цитата(SiPlus @ 23.03.2011, 20:58) *
2307
А что в нем?
Степан
Да с Украиной всё понятно... А собственно русские что скажут?
Roden Croft
Цитата(Штирлиц @ 27.03.2011, 21:11) *
Да с Украиной всё понятно... А собственно русские что скажут?


У нас тоже в нефедеральных городах с инетом не густо, скорости и тарифы не идут ни в какое сравнение с московскими или питерскими. Особенно плохо, почему-то, на Юге России sad.gif
SaneX
а в питере за 450 руб в месяц мы получаем 6 мб в сек, но сейчас, если канал, откуда качаешь, позволяет, то скорость Unlimited, т.е. 10 мегабайт в секунду, 100 мбит в сек. С торрентов тяну 10-11 мб в сек.
Привет, Андрей
SaneX,Подразнить нас решил? sad.gif

Внимание, эксперимент
Попробуйте скинуть в финалочку оде.длл с билда 2604, и скажите, есть ли разница, или меня глючит smile.gif
HitmanNew
Camblu, пробовали вроде как, я изменений не заметил...
sergy172
Ни кто не пробовал вытащить в финалку дождик из 1580 с Припятью?
Он там кстати, зависел от настроек ветра и умел менять направление.
Да и вообще он там гораздо аккуратнее, если кто не видел.

А может такая же реализация дождя есть в более совместимых с финалкой билдах?
_призрак_
Тут кто то говорил можно ли на 2205 сделать сюжет уровня ЗП.
В 2205 нет:
1. Смены рук
2. Апгрейдов оружия
3. Графика

В 2205 есть (берем в сравнении с ТЧ):
1. Биографии
2. Баги
Modera
_призрак_, Ничего этого не надо,там нет скриптовых роликов как в ЗП а без этого никак
Привет, Андрей
Цитата(Modera @ 01.04.2011, 09:19) *
там нет скриптовых роликов как в ЗП

А написать религия не позволяет?
Билдоман
Цитата(_призрак_ @ 01.04.2011, 10:14) *
2. Баги


Видел только один. smile.gif
Билдоман
Цитата(_призрак_ @ 01.04.2011, 10:14) *
1. Смены рук
2. Апгрейдов оружия
3. Графика


1. Не особо и нравится.
2. Лучше просто ремонт.
3. R1 в 2205 в разы лучше. А r2 можно взять из ТЧ. smile.gif
Modera
Camblu, Различие форматов скриптов!
Билдоман
Цитата(Modera @ 01.04.2011, 19:15) *
Camblu, Различие форматов скриптов!


Тогда уровня ТЧ сюжет...
Modera
Ребята обнаружилась тексура крыс волка!
PUNK-398
Modera, она обнаружилась ещё в 1469 билде...
Modera
PUNK-398, И возможно модель я точно не уверен

вот текстура.
А вот и та модель которая под подозрением
http://rghost.ru/5032087
Ком надо выложу анимки
Билдоман
Modera,

1 апреля, ага.
Modera
Билдоман, Я так и знал что нет смысла писать вы мне всё ровно не поверите
_призрак_
Modera
Какие еще форматы скриптов??? o_O.gif Как они были написаны на lua так все и осталось. И acdc уже написали для всех билдов. И то скрипты в билдах ну не сильно поменялись по сравнению с ТЧ - не хватает пары функций и толпой
Билдоман
Ладно, согласен что фишки ЗП не для всех по душе
А что ты получишь при переходе на 2205?
shad0w
Цитата
И то скрипты в билдах ну не сильно поменялись по сравнению с ТЧ - не хватает пары функций и толпой

Достаточно глянуть в changelog скриптовой составляющей движка за 2005-й год,чтобы понять,сколько всего они еще реализовывали. И это только до релиза ТЧ. А ведь работа над скриптами велась и в ЧН,и в ЗП.
Большинство скриптов будет ссылаться на попросту отсутствующие функции,имхо.
Odell Burncastle
Цитата
я по удалял почти все билды

Билдоманы плакали, кололись, но продолжали удалять билды.

Сорри, не удержался. laugh.gif
Не_люблю_ztn
- Кто успел заметить наскороудалённую тему "Билд 5233"? И что в ней было, а? 1-е уже вроде как прошло.
Предполагаю что дельнули из-за NDA, нашли конечно где выложить, ага).
Modera
Кто-то смотрел модель, там крыс волк или не? Модель из билда 1893.
SciLexer.dll Чё й то?
Вот ешё обнаружил
error.txt
1. O(1) AI node search
2. Громкость звука ударов физических объектов не зависит от силы удара
3. Проверить LOD'ы на модельках
4. (+) Не расчитывать анимацию (например, когда физика)
5. Подумать насчет моделей (много похожих) - шарить данные
6. (+) Добавить 3 слой в моделях

; legend
; -D - from Dima
; -A - from AlexMX
; -S - from Slipch
; -J - from Jim
; -O - from Oles
; -Y - from Yura
; -K - from Koan
; -P - from Prof


To SLIPCH:
-S колеса жестко не фиксируются (интегратор?)
-J Монстр не может догнать противника (подбегая к нему - останавливается, включается физика и т.д.)
-J Прыжок иногда выполняется на месте (либо на очень короткое расстояние)
-J Запрыгивая на баунд-сферу противника, монстр медленно спускается вниз

To OLES :
---D [CLevel::ClientSend][Objects.net_Export(&P)][NET_Packet.w] :
VERIFY (B.count<NET_PacketSizeLimit);
B.count == 16260, я так понял слишком много объектов за один раз, всё не помещается в пакет

+++S вылетает CHOM::Render_DB (CHOM-CDB)
---O (?) LightPPA (line 202) - inactive.empty() = false
---K (?) глюк с тенью от первого лица (-noprefetch -ltx user_w.ltx -start server(anomaly_test/single) client(localhost))
---D (?) memory leak during reload (press f7 for reload) ~ 346kb on occ_part
+++S assertion failed в stl_extensions.cpp
stack:
xrRender_R1.dll!xr_vector<CLightShadows::shadow>::operator[](unsigned int _Pos=3131961357) Line 57 + 0x41 C++

параметры строки: -external -ltx user_w.ltx -start server(labaratory_1/single/alife) client(localhost)
Cлучается только в дебуговом билде не обязательно в alife. После того как на уровне
добавишь какую нибудь spawn point (может даже уберешь) исправляется добавлением или убиранием
spawn point с последующим make game

+++K трасеры не рисуются
+++A актер закрывает собой флары (выключить Enable CFModel у Актера)
+++J монстры исчезают в определённых позициях (level - occ_part_jim)
+++О Обьекты у которых парент - рендерятся
+++O ~160 memory operations per frame
+++O no particles
+++J актер не видим для телепузиков и монстров
+++К старые партиклы тоже не рисуются
+++S после взрыва ручной гранаты обьекты (в том числе актер) становятся невидимыми при FLAGS::bVisible=1
+++J освещение монстров (химера, плоть) (level - практически на любом (e.g. labaratory_1))
---P () трава и лоды в Zoom-е
---P освещение монстров вдали
---P hitmark на персонажах
---P тени от персонажей и объектов сильней (в помещениях вообще не видно, на улице слабые)
---P Нужны шейдеры для моделей "прозрачность+отражение скайдома" "чистое отражение скайдома" и ОЧЕНЬ ЖЕЛАТЕЛЬНО связать отражение с текстурой скайдома ("динамический" шейдер)
---Р Нужны шейдеры для уровня "прозрачность+отражение скайдома" "чистое отражение скайдома" (для отражения воды в болотах через маску ряски и проч. и ОЧЕНЬ ЖЕЛАТЕЛЬНО связать отражение с текстурой скайдома ("динамический" шейдер)
---Р Нужны шейдеры для моделей персонажей "прозрачность+отражение скайдома"
---Р Нужны шейдеры для моделей оружия "прозрачность+отражение скайдома" для имитации легкого поблескивания оружия
---Р Нужны шейдеры самосвечения для уровня (разрывы лавы к примеру) и моделей (светящиеся глаза)
---P Осветить (хотя бы приблизительно) партиклы. взрывы ночью смотрятся плохо.
---P Шэйдер с детальной текстурой для моделей оружия. Это возможно позволит уменьшить основные текстуры без потери качества
---P Возможность "гасить" звук. Эффект после близкого взрыва. Оглох. Писк в ушах.



To ALEX-MX:
+O ocasional invalid radius and/or center after update of particle system
(pure garbage: #INF, #QNAN, #DEN)
(cs_test/single)
+O ocasional memory corruption inside particle system (on destructor, probably?)
(game00/single/alife)
+D зоны глючат постоянно из-за партикловой-хрени! (game00/single/alife)

ДЕТАЛЬНЫЕ ОБЪЕКТЫ В РЕДАКТОРЕ
--вылет при попытке заменить объектный лист
- не меняются параметры объекта в листе
- компиляция не пошла (возможно устаревший уровень , но не похоже)
---Р Wallmark для разных материаалов
---Р Проходимость кустов


To DIMA:
+D xrServer::Process_event_reject(...) вылетает R_ASSERT(0xffff != e_entity->ID_Parent) в симуляции
+S маршруты между несвязанными по высоте нодами
+S вороны вылетают в ai_primary_func.cpp ffGetValue() -NODEFAULT
-Y на уровне "occ_part_dandy/single" два AI телепузика-врага начинают съедать FPS со временем
-J движение монстров/телепузиков по наклонной поверхности (pitch correction)
+ ДИСКРЕТНОСТЬ ДВИЖЕНИЯ ПЕРСОНАЖЕЙ вдали!!!!!!
+O ai_alife_switch.cpp / line 294 - "non RTTI object"
+K телепузикы перемещаются быстрее отыгрываемой анимации
+D при выставлении у-ка позиции по ноде при звуке у телепузика только(?) в симуляции
+D после оффлайна оживают трупы????
+D Can't update online object во время симуляции
+D вылетает где-то здесь или похерился стэк:
CSE_ALifeSimulator::vfValidatePosition :
if (tpALifeAbstractGroup) {
if (tpALifeAbstractGroup->m_tpMembers.empty())
+J строить путь назад на N метров(ровно на 180 град), если нельзя на N - возвратить соотв. значение (напр. на сколько можно)
+J r_torso_target + r_torso_current - переименовать на более короткие и понятные имена (к торсу не привязанные)
+J InitSelector не должен быть привязан к m_tEnemy
+Koan Плоть считает себя 8 монстром, а является 7

TO YURA
- wallmark на материаллы. спецэффекты от попаданий (партиклы и т.д. и т.п)
+ апгрейды оружия
+J mouse sensitivity up in inventory
-Koan в основном экране в сообщении PDA русский шрифт смешивается в кучу
-Koan прописанная в info_portion иконка не выводит текст
-Koan иконка не соответствует указанной в actoreditor-е
-Koan позицию лампочки надо обновлять вне зависимости от того видна она или нет(callback)

To JIM:
+J переход в оффлайн (проблема памяти монстров)
+Koan во время прыжка (в полете) псевдособака разворачивается
-Koan Плоть не бьет назад копытом
?-Koan собаки не оборачиваются на звук
?-Koan Монстры не идут к источнику неопасного звука (просто стоят и прислушиваются)
+Koan Всем монстрам (кроме Плоти) убрать панику при опасном звуке
?-Koan Мораль
РСФСР
Modera, лучше вчерашневыложенные диздоки почитай - там интереснее cool.gif
Trollz0r
Цитата(Modera @ 02.04.2011, 09:42) *
SciLexer.dll Чё й то?

Лексер SciTE, реализует подсветку .ltx файлов.
Цитата(Modera @ 02.04.2011, 09:42) *
Вот ешё обнаружил

Рабочие логи.
Билдоман
Цитата(_призрак_ @ 01.04.2011, 21:54) *
А что ты получишь при переходе на 2205?


Нормальный инвентарь, r1, множество мелких фич.

Цитата(Не_люблю_ztn @ 02.04.2011, 02:47) *
"Билд 5233"


Это qip. smile.gif


Modera,

У меня архив вообще не открывается. sad.gif Раз уж так, то перезалей, желательно в rar.
Modera
Билдоман, http://narod.ru/disk/9087904001/rat_1.rar.html
Modera
это просто крыса
Modera
"xrCore"build 1893, Sep 6 2004
При запуске Антивирус говорит что защита скрытым путём пытается установить драйвер, стоит ли это-го боятся?
Не_люблю_ztn
Цитата(Билдоман @ 02.04.2011, 12:38) *
Это qip. smile.gif

- То то я думаю что это 2013 год должен быть по алгоритму. laugh.gif
Trollz0r
Цитата(Modera @ 02.04.2011, 15:24) *
Антивирус

Что за Антивирус с большой буквы? smile.gif
Не стоит.
Билдоман
Цитата(RedPython @ 02.04.2011, 16:04) *
Не стоит.


Кто-то года два назат написал на форуме: Чем открыть DDS-текстуры? А то этот paint.net. У меня не стоит. biggrin.gif
Modera
"XrCore" build 1537, Sep 15 2003

Васько
Цитата(Билдоман @ 02.04.2011, 16:06) *
Чем открыть DDS-текстуры?

Photoshop'ом smile.gif
Билдоман
Васько,

Ну я знаю чем их открыть. Просто когда-то кто то написал вот это: paint.net. У меня не стоит. smile.gif У кого-то даже в подписи было вроде.

Modera,

GSC такие GSC... сначала сделать отражение, а уже потом мост. laugh.gif
Modera
Билдоман, Потом эту же модель в сдк перевернуть и всё,кстати по подводному мосту можно ходить также можно полазить в отражении вышек smile.gif
Привет, Андрей
Цитата(Билдоман @ 02.04.2011, 15:06) *
У меня не стоит

Сочувствую biggrin.gif Modera, Че за хрень на последнем скрине? o_O.gif
Билдоман
Camblu,

Не мне сочувствуй. Это кто-то в старой флудилке писал. biggrin.gif
Modera
Camblu, Солдат на фоне восхода (отключил смену погоды) и прожектора.
Я там ешё скринов нашелкал могу скинуть всю папку
Modera
Профиксил xr_meet в 1893 теперь если ходить с оружием рядом с нпс они не становятся врагами но воозбше не обрашают внимания на актёра sad.gif зато понял как зделать так чтоб нпс в МП на игрока реагировали
VEX
Цитата(Modera @ 05.04.2011, 19:51) *
зато понял как зделать так чтоб нпс в МП на игрока реагировали

Работает??
Привет, Андрей
Modera, Просвети нас
Modera
Camblu, xr_meet.script - из за него сталкеры и рагируют на актёра
а в мп у нас мп актёр так?
Скрипт
----------------------------------------------------------------------------------------------------------------------
-- Схема встречи двух сталкеров
-- автор: Диденко Руслан (Stohe)
-- TODO:
----------------------------------------------------------------------------------------------------------------------

local sounds = {}

---------------------------------------------------------------------------------------------------------------------
--Evaluators
----------------------------------------------------------------------------------------------------------------------
-- Возвращает есть ли у нас контакт с другим сталкером
class "evaluator_contact" (property_evaluator)
function evaluator_contact:__init(storage) super()
self.a = storage
end
function evaluator_contact:evaluate()
-- Если мы - член группировки и видим кого-либо вооруженного или врага на территории группировки (отметить как гостя и сделать врагом)
if self.a.enabled == false then return false end

local actor = level.actor()

if actor then
if actor:alive() and
self.object:see(actor) and тоже не знаю может надо ту и на других строках с actor
self.object:position():distance_to(actor:position()) < self.a.distance
then
self.a.actor = nil
else
self.a.actor = actor на имя мп актора
end
else
self.a.actor = nil
end
-- if self.a.over == false then
-- printf("OVER TRU")
-- else
-- printf("OVER FALSE")
-- end

return self.a.actor ~= nil --'and self.a.over == false
end
-- имеет ли клиент оружие
class "evaluator_weapon" (property_evaluator)
function evaluator_weapon:__init(storage) super()
self.a = storage
end
function evaluator_weapon:evaluate()
local actor = level.actor()

if actor then
if actor:alive() and
self.object:see(actor)
then
return isWeapon(actor:active_item())
end
end
return false
end
-- ждать появления клиента
class "evaluator_wait" (property_evaluator)
function evaluator_wait:__init(storage) super()
self.a = storage
end
function evaluator_wait:evaluate()
return self.a.Buyer ~= nil
end
-- в диалоге ли мы или нет
class "evaluator_talk" (property_evaluator)
function evaluator_talk:__init(storage) super()
self.a = storage
end
function evaluator_talk:evaluate()
return self.object:is_talking()
end
-- боимся ли мы клиента
class "evaluator_afraid" (property_evaluator)
function evaluator_afraid:__init(storage) super()
self.a = storage
end
function evaluator_afraid:evaluate()
--if self.a.actor ~= nil then printf(" goodwill %d", self.object:goodwill(self.a.actor)) end
return false
end
-- принадлежим ли мы с клиентом к одной и той же группировке
class "evaluator_clan" (property_evaluator)
function evaluator_clan:__init(storage) super()
self.a = storage
end
function evaluator_clan:evaluate()
return true
end
-- находится ли клиент на территории моей группировки
class "evaluator_clan_zone" (property_evaluator)
function evaluator_clan_zone:__init(storage) super()
self.a = storage
end
function evaluator_clan_zone:evaluate()
return false
end

----------------------------------------------------------------------------------------------------------------------
--Actions
----------------------------------------------------------------------------------------------------------------------
-- Инициализация торговли
class "action_trade_init" (action_base)
function action_trade_init:__init (npc_name,action_name,storage) super (nil, action_name)
self.a = storage
end
function action_trade_init:initialize()
action_base.initialize(self)
self.object:set_node_evaluator()
self.object:set_path_evaluator()
self.object:set_desired_position()
self.object:set_desired_direction()

local bt = xr_motivator.trade_arhive[self.a.Seller:id()]:best_trader()

if self.a.Seller:relation(bt) ~= game_object.enemy and
self.a.enabled == true
then
self.a.begin_wait_to_see.begin = device():time_global()/1000

xr_position.setPosition(self.a.Seller, self.a.Seller:level_vertex_id())

self.a.Buyer = bt

--Отсылка на ПДА: мы согласны торговать.
self.a.Seller:send_pda_message(3, bt)
else
self.a.Seller:send_pda_message(5, bt)
end
xr_motivator.trade_arhive[self.a.Seller:id()]:remove(bt)
end
function action_trade_init:execute ()
action_base.execute (self)
end
function action_trade_init:finalize ()
action_base.finalize (self)
end

-- Ожидание появления покупателя
class "action_wait_for_buyer" (action_base)
function action_wait_for_buyer:__init (npc_name,action_name,storage) super (nil, action_name)
self.a = storage
end
function action_wait_for_buyer:initialize()
action_base.initialize(self)

self.object:set_node_evaluator()
self.object:set_path_evaluator()
self.object:set_desired_position()
self.object:set_desired_direction()

level.map_add_object_icon(self.object, 0)
self.object:set_item(object.idle, self.object:best_weapon())
self.object:set_movement_type(move.stand)
self.object:set_mental_state(anim.free)

self.act = {type = 1,
begin = nil,
time = 6}

self.anim = {idle = 0,
begin = nil,
maxidle = 5,
sumidle = 5,
rnd = 100,
lastanim = nil}

self.anim_s = {idle = 0,
begin = nil,
maxidle = 5,
sumidle = 3,
rnd = 80,
lastanim = nil}

self.sound_s = { rnd = 100,
maxidle = 5,
sumidle = 2,
themes = { "weather", "state", "hail" } }

self.sound_s = { rnd = 100,
maxidle = 7,
sumidle = 5,
themes = { "weather", "state", "wait" } }

end
function action_wait_for_buyer:execute ()
action_base.execute (self)

-- Проверка, видим ли мы актора или нет
if self.object:see(self.a.Buyer) == true then
-- смотрим на клиента
local pos = self.a.Buyer:position()
pos.y = pos.y + 1
self.object:set_sight(look.point, pos, 0)

-- секция анимации
xr_state.anim_update("idle", self.object)
-- надо изредка рукой махать
if (self.anim_s.begin == nil or
(device():time_global()/1000 - self.anim_s.begin) > self.anim_s.idle) then
if math.random(100) < self.anim_s.rnd then
xr_state.anim_update("hello", self.object)
end
self.anim_s.begin = device():time_global()/1000
self.anim_s.idle = math.random(self.anim_s.maxidle) + self.anim_s.sumidle
end


-- секция озвучки
if self.object:active_sound_count() == 0 then
xr_sound.sound_update(self.object, self.sound_s)
end
else
-- секция анимации
-- 1: если не отыгрываем никаких анимаций - то поворачиваемся в случайную сторону
-- 2: выжидаем, иногда отыгрывая какую либо анимацию
if self.act.type == 1 then
self.act.begin = device():time_global()/1000
self.act.type = 2

local dir = vector():set(math.random(10)-5, 0, math.random(10)-5)
self.object:set_sight(look.direction, dir, 0)
self.object:set_body_state(move.standing)
else
xr_state.anim_update("idle", self.object)

if (device():time_global()/1000 - self.act.begin) > self.act.time then
self.act.type = 1
end
end

-- секция озвучки
if self.object:active_sound_count() == 0 then
xr_sound.sound_update(self.object, self.sound_w)
end
end

-- проверять условия завершения ожидания
if xr_motivator.storage[self.object:id()].meet.actor ~= nil then
self.a.Buyer = nil
end
end
function action_wait_for_buyer:finalize ()
level.map_remove_object_icon(self.object)
action_base.finalize (self)
end

-- Приглашение к тороговле
class "action_wait" (action_base)
function action_wait:__init (npc_name,action_name, storage) super (nil, action_name)
self.a = storage

self.sound_w = { rnd = 80,
maxidle = 5,
sumidle = 2,
themes = { "weather", "state", "wait" } }

end
function action_wait:initialize()
action_base.initialize(self)
self.object:set_node_evaluator()
self.object:set_path_evaluator()
self.object:set_desired_position()
self.object:set_desired_direction()

self.object:set_body_state(move.standing)
self.object:set_movement_type(move.stand)
self.object:set_mental_state(anim.free)

self.object:set_item(object.deactivate, self.object:best_weapon())
self.object:enable_talk()
end
function action_wait:execute ()
-- нужно остановиться и посмотреть в сторону актора
local dir = self.a.actor:position():sub(self.object:position())

self.object:set_sight(look.direction, dir, 0)

-- Анимации
xr_state.anim_update("idle", self.object)

-- Звуки
if self.object:active_sound_count() == 0 then
xr_sound.sound_update(self.object, self.sound_w)
end
action_base.execute (self)
end
function action_wait:finalize ()
self.object:disable_talk()
xr_state.anim_update(nil, self.object)
action_base.finalize (self)
end

-- Болтовня
class "action_talk" (action_base)
function action_talk:__init (npc_name,action_name, storage) super (nil, action_name)
self.a = storage

self.sound_trstart = { rnd = 100,
maxidle = 1,
sumidle = 0,
themes = { "trade_yes" } }

self.sound_trend = { rnd = 100,
maxidle = 1,
sumidle = 0,
themes = { "talk_bye" } }
end
function action_talk:initialize()
action_base.initialize(self)
self.object:set_node_evaluator()
self.object:set_path_evaluator()
self.object:set_desired_position()
self.object:set_desired_direction()

self.object:set_body_state(move.standing)
self.object:set_movement_type(move.stand)
self.object:set_mental_state(anim.free)

if self.object:active_sound_count() == 0 then
xr_sound.sound_update(self.object, self.sound_trstart)
end
self.object:set_item(object.deactivate, self.object:best_weapon())
end
function action_talk:execute ()
-- нужно остановиться и посмотреть в сторону актора
local dir = self.a.actor:position():sub(self.object:position())

self.object:set_sight(look.direction, dir, 0)

-- Анимации
xr_state.anim_update("idle", self.object)
action_base.execute (self)
end
function action_talk:finalize ()
if self.object:active_sound_count() == 0 then
xr_sound.sound_update(self.object, self.sound_trend)
end
xr_state.anim_update(nil, self.object)
action_base.finalize (self)
end

-- Типа спрячь пушку, чувак
class "action_weapon" (action_base)
function action_weapon:__init (npc_name,action_name, storage) super (nil, action_name)
self.a = storage

self.sound_e = { rnd = 100,
maxidle = 3,
sumidle = 2,
themes = { "threat_weap" } }

self.sound_f = { rnd = 100,
maxidle = 1,
sumidle = 0,
themes = { "talk_abuse" } }
end
function action_weapon:initialize()
action_base.initialize(self)
self.object:set_node_evaluator()
self.object:set_path_evaluator()
self.object:set_desired_position()
self.object:set_desired_direction()

self.object:set_body_state(move.standing)
self.object:set_movement_type(move.stand)
self.object:set_mental_state(anim.danger)

self.object:clear_animations()
xr_reactions.add_rule(self.object, "ignore")
end
function action_weapon:execute ()
self.object:set_item(object.idle, self.object:best_weapon())

-- нужно остановиться и посмотреть в сторону актора
local pos = self.a.actor:position()

local dir = self.a.actor:position():sub(self.object:position())
self.object:set_sight(look.direction, dir, 0)

-- если актер ближе какого-то радиуса - открывать огонь
if self.object:position():distance_to(self.a.actor:position()) < self.a.shoot_distance then
if self.object:active_sound_count() == 0 then
xr_sound.sound_update(self.object, self.sound_f)
end
self.object:set_relation(game_object.enemy, self.a.actor)
else
-- Звуки
if self.object:active_sound_count() == 0 then
xr_sound.sound_update(self.object, self.sound_e)
end
end
action_base.execute (self)
end
function action_weapon:finalize ()
xr_reactions.remove_rule(self.object, "ignore")
action_base.finalize (self)
end

-- Типа свали отсюда
class "action_afraid" (action_base)
function action_afraid:__init (npc_name,action_name, storage) super (nil, action_name)
self.a = storage
self.timer = 10*1000 -- задержка
self.begin = nil

self.sound_e = { rnd = 100,
maxidle = 5,
sumidle = 1,
themes = { "threat_back" } }

self.sound_f = { rnd = 100,
maxidle = 1,
sumidle = 0,
themes = { "talk_abuse" } }
end
function action_afraid:initialize()
action_base.initialize(self)
self.object:set_node_evaluator()
self.object:set_path_evaluator()
self.object:set_desired_position()
self.object:set_desired_direction()

self.object:set_body_state(move.standing)
self.object:set_movement_type(move.stand)
self.object:set_mental_state(anim.danger)

self.object:clear_animations()
xr_reactions.add_rule(self.object, "ignore")
self.begin = device():time_global()
end
function action_afraid:execute ()
self.object:set_item(object.idle, self.object:best_weapon())

if device():time_global() - self.begin > self.timer then
if self.object:active_sound_count() == 0 then
xr_sound.sound_update(self.object, self.sound_f)
end
self.object:set_relation(game_object.enemy, self.a.actor)
end

-- нужно остановиться и посмотреть в сторону актора
local dir = self.a.actor:position():sub(self.object:position())
self.object:set_sight(look.direction, dir, 0)

-- Звуки
if self.object:active_sound_count() == 0 then
xr_sound.sound_update(self.object, self.sound_e)
end

action_base.execute (self)
end
function action_afraid:finalize ()
xr_reactions.remove_rule(self.object, "ignore")
action_base.finalize (self)
end

-- Контакт с членом другой группировки за территорией группировки
class "action_contact_zoneout" (action_base)
function action_contact_zoneout:__init (npc_name,action_name, storage) super (nil, action_name)
self.a = storage
self.timer = 10*1000 -- задержка
self.begin = nil

self.sound_e = { rnd = 100,
maxidle = 5,
sumidle = 1,
themes = { "threat_back" } }

self.sound_f = { rnd = 100,
maxidle = 1,
sumidle = 0,
themes = { "talk_abuse" } }
end
function action_contact_zoneout:initialize()
action_base.initialize(self)
self.object:set_node_evaluator()
self.object:set_path_evaluator()
self.object:set_desired_position()
self.object:set_desired_direction()

self.object:set_body_state(move.standing)
self.object:set_movement_type(move.stand)
self.object:set_mental_state(anim.danger)

xr_reactions.add_rule(self.object, "ignore")
self.begin = device():time_global()
end
function action_contact_zoneout:execute ()
-- угрожать и прогонять
self.object:set_item(object.idle, self.object:best_weapon())

if device():time_global() - self.begin > self.timer then
if self.object:active_sound_count() == 0 then
xr_sound.sound_update(self.object, self.sound_f)
end
self.object:set_relation(game_object.enemy, self.a.actor)
end

-- нужно остановиться и посмотреть в сторону актора
local dir = self.a.actor:position():sub(self.object:position())
self.object:set_sight(look.direction, dir, 0)

-- Звуки
if self.object:active_sound_count() == 0 then
xr_sound.sound_update(self.object, self.sound_e)
end
action_base.execute (self)
end
function action_contact_zoneout:finalize ()
xr_reactions.remove_rule(self.object, "ignore")
action_base.finalize (self)
end

-- Контакт с членом другой группировки на территории группировки
class "action_contact_zone" (action_base)
function action_contact_zone:__init (npc_name,action_name, storage) super (nil, action_name)
self.a = storage

self.timer = 10*1000 -- задержка
self.begin = nil

self.sound_e = { rnd = 100,
maxidle = 5,
sumidle = 1,
themes = { "threat_back" } }

self.sound_f = { rnd = 100,
maxidle = 1,
sumidle = 0,
themes = { "talk_abuse" } }

self.sound_w = { rnd = 100,
maxidle = 1,
sumidle = 0,
themes = { "weather", "state", "threat_stop" } }
end
function action_contact_zone:initialize()
action_base.initialize(self)
self.object:set_node_evaluator()
self.object:set_path_evaluator()
self.object:set_desired_position()
self.object:set_desired_direction()

self.known = true -- Приглашенный ли он

if self.known then
self.object:set_body_state(move.standing)
self.object:set_movement_type(move.stand)
self.object:set_mental_state(anim.free)

self.object:set_item(object.deactivate, self.object:best_weapon())
self.object:enable_talk()
else
self.object:set_body_state(move.standing)
self.object:set_movement_type(move.stand)
self.object:set_mental_state(anim.danger)

xr_reactions.add_rule(self.object, "ignore")
self.begin = device():time_global()
end
end
function action_contact_zone:execute ()
self.object:set_item(object.idle, self.object:best_weapon())

-- если он неизвестный - прогонять
-- если он приглашенный - предостерегать
if self.known then
-- нужно остановиться и посмотреть в сторону актора
local dir = self.a.actor:position():sub(self.object:position())

self.object:set_sight(look.direction, dir, 0)

-- Анимации
xr_state.anim_update("idle", self.object)

-- Звуки
if self.object:active_sound_count() == 0 then
xr_sound.sound_update(self.object, self.sound_w)
end

else
if device():time_global() - self.begin > self.timer then
if self.object:active_sound_count() == 0 then
xr_sound.sound_update(self.object, self.sound_f)
end
self.object:set_relation(game_object.enemy, self.a.actor)
end
-- нужно остановиться и посмотреть в сторону актора
local dir = self.a.actor:position():sub(self.object:position())
self.object:set_sight(look.direction, dir, 0)
-- Звуки
if self.object:active_sound_count() == 0 then
xr_sound.sound_update(self.object, self.sound_e)
end
end
action_base.execute (self)
end
function action_contact_zone:finalize ()
if self.known then
self.object:disable_talk()
xr_state.anim_update(nil, self.object)
else
xr_reactions.remove_rule(self.object, "ignore")
end
action_base.finalize (self)
end


----------------------------------------------------------------------------------------------------------------------
-- Functions
----------------------------------------------------------------------------------------------------------------------
function disable_meet(npc)
if npc ~= nil and
is_object_online(npc:id()) == true
then
xr_motivator.storage[npc:id()].meet.enabled = false
end
end
function enable_meet(npc)
if npc ~= nil and
is_object_online(npc:id()) == true
then
xr_motivator.storage[npc:id()].meet.enabled = true
end
end

----------------------------------------------------------------------------------------------------------------------
-- binder
----------------------------------------------------------------------------------------------------------------------
function add_to_binder(object, char_ini)
local operators = {}
local properties = {}

local manager = object:motivation_action_manager()

properties["event"] = xr_evaluators_id.reaction
properties["wait_buyer"] = xr_evaluators_id.stohe_tradeseller_base + 1
properties["contact"] = xr_evaluators_id.stohe_meet_base + 1
properties["weapon"] = xr_evaluators_id.stohe_meet_base + 2
properties["afraid"] = xr_evaluators_id.stohe_meet_base + 3
properties["clan"] = xr_evaluators_id.stohe_meet_base + 4
properties["clan_zone"] = xr_evaluators_id.stohe_meet_base + 5
properties["talk"] = xr_evaluators_id.stohe_meet_base + 6
properties["need_punch"] = xr_evaluators_id.zmey_punch_base + 1

operators["wait_buyer"] = xr_actions_id.stohe_tradeseller_base + 2
operators["wait_trade"] = xr_actions_id.stohe_meet_base + 1
operators["weapon"] = xr_actions_id.stohe_meet_base + 2
operators["afraid"] = xr_actions_id.stohe_meet_base + 3
operators["contact_zone"] = xr_actions_id.stohe_meet_base + 4
operators["contact_zoneout"] = xr_actions_id.stohe_meet_base + 5
operators["talk"] = xr_actions_id.stohe_meet_base + 6

-- Evaluators
manager:add_evaluator (properties["wait_buyer"], this.evaluator_wait (xr_motivator.storage[object:id()].tradeseller))
manager:add_evaluator (properties["contact"], this.evaluator_contact (xr_motivator.storage[object:id()].meet))
manager:add_evaluator (properties["weapon"], this.evaluator_weapon (xr_motivator.storage[object:id()].meet))
manager:add_evaluator (properties["afraid"], this.evaluator_afraid (xr_motivator.storage[object:id()].meet))
manager:add_evaluator (properties["clan"], this.evaluator_clan (xr_motivator.storage[object:id()].meet))
manager:add_evaluator (properties["clan_zone"], this.evaluator_clan_zone (xr_motivator.storage[object:id()].meet))
manager:add_evaluator (properties["talk"], this.evaluator_talk (xr_motivator.storage[object:id()].meet))

-- Actions
local action = this.action_wait (object:name(),"action_wait", xr_motivator.storage[object:id()].meet)
action:add_precondition (world_property(stalker_ids.property_alive, true))
action:add_precondition (world_property(stalker_ids.property_enemy, false))
action:add_precondition (world_property(properties["contact"], true))
action:add_precondition (world_property(properties["afraid"], false))
action:add_precondition (world_property(properties["weapon"], false))
action:add_precondition (world_property(properties["clan"], true))
action:add_precondition (world_property(properties["talk"], false))
action:add_effect (world_property(properties["contact"], false))
manager:add_action (operators["wait_trade"], action)

action = this.action_talk (object:name(),"action_talk", xr_motivator.storage[object:id()].meet)
action:add_precondition (world_property(stalker_ids.property_alive, true))
action:add_precondition (world_property(stalker_ids.property_enemy, false))
action:add_precondition (world_property(properties["need_punch"], false))
action:add_precondition (world_property(properties["talk"], true))
action:add_effect (world_property(properties["talk"], false))
manager:add_action (operators["talk"], action)

action = this.action_afraid (object:name(),"action_afraid", xr_motivator.storage[object:id()].meet)
action:add_precondition (world_property(stalker_ids.property_alive, true))
action:add_precondition (world_property(stalker_ids.property_enemy, false))
action:add_precondition (world_property(properties["afraid"], true))
action:add_effect (world_property(properties["afraid"], false))
manager:add_action (operators["afraid"], action)

action = this.action_weapon (object:name(),"action_weapon", xr_motivator.storage[object:id()].meet)
action:add_precondition (world_property(stalker_ids.property_alive, true))
action:add_precondition (world_property(stalker_ids.property_enemy, false))
action:add_precondition (world_property(properties["weapon"], true))
action:add_effect (world_property(properties["weapon"], false))
manager:add_action (operators["weapon"], action)

action = this.action_contact_zone(object:name(),"action_contact_zone", xr_motivator.storage[object:id()].meet)
action:add_precondition (world_property(stalker_ids.property_alive, true))
action:add_precondition (world_property(stalker_ids.property_enemy, false))
action:add_precondition (world_property(properties["contact"], true))
action:add_precondition (world_property(properties["clan"], false))
action:add_precondition (world_property(properties["clan_zone"], true))
action:add_effect (world_property(properties["contact"], false))
manager:add_action (operators["contact_zone"], action)

action = this.action_contact_zoneout(object:name(),"action_contact_zoneout", xr_motivator.storage[object:id()].meet)
action:add_precondition (world_property(stalker_ids.property_alive, true))
action:add_precondition (world_property(stalker_ids.property_enemy, false))
action:add_precondition (world_property(properties["contact"], true))
action:add_precondition (world_property(properties["clan"], false))
action:add_precondition (world_property(properties["clan_zone"], false))
action:add_effect (world_property(properties["contact"], false))
manager:add_action (operators["contact_zoneout"], action)

-- Ожидание торговца
action = this.action_wait_for_buyer (object:name(),"action_wait_for_buyer", xr_motivator.storage[object:id()].tradeseller)
action:add_precondition (world_property(stalker_ids.property_alive, true))
action:add_precondition (world_property(stalker_ids.property_enemy, false))
action:add_precondition (world_property(properties["wait_buyer"], true))
action:add_precondition (world_property(properties["event"], false))
action:add_effect (world_property(properties["wait_buyer"], false))
manager:add_action (operators["wait_buyer"], action)

action = manager:action (stalker_ids.action_puzzle_solver)
action:add_precondition (world_property(properties["contact"], false))
action:add_precondition (world_property(properties["wait_buyer"], false))

if char_ini:section_exist("meet") == true then
if char_ini:line_exist("meet", "enabled") == true then
xr_motivator.storage[object:id()].meet.enabled = char_ini:r_bool("meet", "enabled")
end
if char_ini:line_exist("meet", "noweap") == true then
xr_motivator.storage[object:id()].meet.noweap = char_ini:r_bool("meet", "noweap")
end
end
end
function add_to_binder_pda(object, char_ini)
local operators = {}
local properties = {}

local manager = object:motivation_action_manager()

properties["trade_init"] = xr_evaluators_id.final_trade_init

operators["trade_init"] = xr_actions_id.stohe_tradeseller_base + 1

--Evaluators
manager:add_evaluator (properties["trade_init"], xr_evaluators.evaluator_trade_init(xr_motivator.storage[object:id()].tradeseller
))

-- Actions
local action = this.action_trade_init (object:name(),"action_trade_init", xr_motivator.storage[object:id()].tradeseller)
action:add_precondition (world_property(stalker_ids.property_alive, true))
action:add_precondition (world_property(stalker_ids.property_enemy, false))
action:add_precondition (world_property(properties["trade_init"], false))
action:add_effect (world_property(properties["trade_init"], true))
manager:add_action (operators["trade_init"], action)

if char_ini:section_exist ("tradeseller") == true then
if char_ini:line_exist("tradeseller", "enabled") == true then
xr_motivator.storage[object:id()].tradeseller.enabled = char_ini:r_bool("tradeseller", "enabled")
end
end
end

function override_meet(npc, flag)
xr_motivator.storage[npc:id()].meet.over = flag
end
Shoкer
Modera
А ты проверял работоспособность? В данном случае здесь actor это не название секции из ltx а переменная
local actor = level.actor()

По идее она возвращает как раз игрока, но я во первых сомневаюсь что xr_meet вообще работает в МП, но если он всё же работает, то ковырять надо именно эту строчку.

А под нереагированием подразумевается, что они не разговаривают или разговаривают но не останавливаются?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.