stalkerok007 9 Опубликовано 1 Июня 2013 Поделиться Опубликовано 1 Июня 2013 (изменено) @АuReN, где-то я видел этот скрипт... Вот: http://www.amk-team.ru/forum/index.php?showtopic=6458&page=3#entry609001 Изменено 1 Июня 2013 пользователем stalkerok007 Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 2 Июня 2013 Поделиться Опубликовано 2 Июня 2013 А проверьте меня кто-нибудь, правильно ли я понимаю: 1. Если непись в гулаге вдруг помирает, его работа на какое-то время становится недоступной. 2. Гулаг меняет state, и в нем появляются доступные работы. 3. В гулаг засасывается новый непись. 4. Гулаг меняет состояние на то, в котором работа недоступна. Что при этом происходит с неписем ? Аналогично с выгнанным из гулага неписем. 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Полтергейст 37 Опубликовано 2 Июня 2013 Поделиться Опубликовано 2 Июня 2013 Что при этом происходит с неписем ? С работы в любом случае уйдёт при вызове gulag:prepare_jobs_for_new_state(), то есть сразу же после смены состояния гулага. После этого на следующем обновлении планировщика (brain) NPC должен уйти из гулага/смарта, потому что вызов se_smart_terrain:enabled() вернет false. Ссылка на комментарий
dukekan 5 Опубликовано 4 Июня 2013 Поделиться Опубликовано 4 Июня 2013 (изменено) Получаю безлоговый вылет при загрузке новой игры. Пытался создать новую модель поведения. Модель - достаточно простая, состоит из одного условия и одного действия. Сам скрипт модели: local scheme_status={} local property_need_to_trade = 1821327 class "evaluator_need_to_trade" (property_evaluator) function evaluator_need_to_trade:__init(name, storage) super (nil, name) self.st = storage end function evaluator_need_to_trade:evaluate() amk.ls_send_tip(self.object:character_name().." evaluate()") if self.st==nil or self.st.enabled~=true then -- модель поведения запрещена return false end if not db.actor then -- ГГ ещё не заспаунился return false end if self.object:best_enemy() then return false -- Блокирование во время боя end local npc = self.object --нет ни одной аптечки, нет всего набора хавчика, при том, что деньги ещё остались if npc:money() < 100 then return false end -- денег нет - и суда нет local vertex = get_nearest_trader_vertex() if npc:level_vertex_id() == vertex then disable_scheme(npc,"npc_want_trade") end --дошёл до торговца if (npc:object("medkit")==nil and npc:object("medkit_army")== nil and npc:object("medkit_scientic")==nil) then return true end if npc:object("bread") == nil or npc:object("kolbasa") == nil or npc:object("conserva") == nil then return true end return false end class "action_go_to_trader" (action_base) function action_go_to_trader:__init(name, storage) super (nil, name) self.st=storage end function action_go_to_trader:initialize() action_base.initialize(self) local npc=self.object npc:set_desired_position() npc:set_desired_direction() npc:clear_animations() npc:set_detail_path_type(move.line) npc:set_body_state(move.standing) npc:set_movement_type(move.run) npc:set_path_type(game_object.level_path) npc:set_mental_state(anim.danger) npc:set_sight(look.danger, nil, 0) npc:remove_all_restrictions() self.offset=vector():set(math.random()*6-3,0,math.random()*6-3) self.offset:normalize() end function action_go_to_trader:execute() action_base.execute(self) amk.ls_send_tip(self.object:character_name().." execute()") if not actor then -- Хм, что-то не так. Может быть ГГ перешёл на другой уровень? Запрещаем схему поведения self.st.enabled=false end if self.delay and self.delay>time_global() then return end self.delay=time_global()+1000 local npc=self.object local actor=db.actor local vertex_id = get_nearest_trader_vertex() if vertex_id then npc:set_dest_level_vertex_id(vertex_id) end end function action_go_to_trader:finalize() action_base.finalize (self) end function add_to_binder(object, char_ini, scheme, section, st) local manager = object:motivation_action_manager() local property_wounded = xr_evaluators_id.sidor_wounded_base manager:remove_evaluator(property_need_to_trade) manager:add_evaluator(property_need_to_trade, evaluator_need_to_trade("npc_want_trade",st)) local action = this.action_go_to_trader("action_go_to_trader",st) action:add_precondition(world_property(stalker_ids.property_alive, true)) action:add_precondition(world_property(property_wounded, false)) if anomaly_evader then action:add_precondition (world_property(1099,false)) end action:add_precondition(world_property(property_need_to_trade, true)) action:add_effect (world_property(property_need_to_trade, false)) xr_motivator.addCommonPrecondition(action) manager:add_action (action_go_to_trader, action) -- Теперь подкорректируем стандартные операторы, чтобы помощник не отвлекался на всякую ерунду. action=manager:action(stalker_ids.action_alife_planner) action:add_precondition(world_property(property_need_to_trade, false)) action=manager:action(stalker_ids.action_combat_planner) action:add_precondition(world_property(property_need_to_trade, false)) action=manager:action(stalker_ids.action_danger_planner) action:add_precondition(world_property(property_need_to_trade, false)) end function set_need_trade(npc,ini) local st = xr_logic.assign_storage_and_bind(npc, ini, "npc_want_trade","npc_want_trade") st.enabled=true scheme_status[npc:id()]=true end function disable_scheme(npc,scheme) local st = db.storage[npc:id()][scheme] if st then st.enabled = false end scheme_status[npc:id()]=nil end function get_nearest_trader_vertex() return 64955--заглушка временная, для кордона end Зарегистрировал в modues.script if npc_trade then -- в этой строке мы проверяем что наш скрипт действительно существует load_scheme("npc_trade", "npc_want_trade", stype_stalker) end Запускаю модель автоматом в xr_logic.script, в функции enable_generic_schemes(ini, npc, stype, section) if npc_trade then npc_trade.set_need_trade(npc,ini) end Деактивирую так же автоматом в xr_logic.script, в функции disable_generic_schemes(npc, stype) if npc_trade then npc_trade.disable_scheme(npc,"npc_want_trade") end В xr_motivator.script в функции addCommonPrecondition(action) чтобы заблокировать стандартные схемы поведения: if npc_trade then action:add_precondition (world_property(npc_trade.property_need_to_trade,false)) end Ну и последнее, в функцию xr_motivator.net_spawn() if npc_trade then local manager = self.object:motivation_action_manager() manager:add_evaluator(npc_trade.property_need_to_trade, property_evaluator_const(false)) end Где может быть ошибка? Может, ошибка не синтаксическая, а логическая? Изменено 4 Июня 2013 пользователем ColR_iT Ссылка на комментарий
mumie 2 Опубликовано 4 Июня 2013 Поделиться Опубликовано 4 Июня 2013 @dukekan,Скорее всего логическая, так как на синтаксис, движок в лог выпечатывает имя "убитого" скрипта, или функции что довольно редко Ссылка на комментарий
Полтергейст 37 Опубликовано 4 Июня 2013 Поделиться Опубликовано 4 Июня 2013 Самая главная ошибка - в xr_motivator.addCommonPrecondition добавляется условие if npc_trade then action:add_precondition (world_property(npc_trade.property_need_to_trade,false)) end которое применяется к действию созданной схемы. Получается, что к нему добавляются 2 взаимоисключающих условия: action:add_precondition (world_property(npc_trade.property_need_to_trade,false)) action:add_precondition(world_property(property_need_to_trade, true)) поэтому и вылетает. В фунции add_to_binder надо вместо вызова функции xr_motivator.addCommonPrecondition просто скопировать ее содержимое, за исключением условия, которое приводит к вылету. Ссылка на комментарий
Viнt@rь 50 Опубликовано 4 Июня 2013 Поделиться Опубликовано 4 Июня 2013 (изменено) Как можно скриптово контролировать/изменять значение определенного канала(ARGB) у кастомстатика в ЗП? В ТЧ/ЧН в классе CUIStatic есть метод SetColor, к сожалению в ЗП такого нет. Просто нужно у кастомстатика менять значение альфа канала, для плавности затухания текстуры... Изменено 4 Июня 2013 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Ссылка на комментарий
dukekan 5 Опубликовано 4 Июня 2013 Поделиться Опубликовано 4 Июня 2013 В фунции add_to_binder надо вместо вызова функции xr_motivator.addCommonPrecondition просто скопировать ее содержимое, за исключением условия, которое приводит к вылету. Попробовал, вылетает. Всё также безлогово Ссылка на комментарий
mumie 2 Опубликовано 5 Июня 2013 Поделиться Опубликовано 5 Июня 2013 (изменено) @Viнt@rь,В виду того что GSC очень сильно урезали класс CUIStatic, видимо был введен новый класс, CUILines,который расширяет возможности CUIStatic.Вот как выглядит CUILines: C++ class CUILines { function GetText();function SetTextST(string);function SetTextColor(number);function SetText(string);function SetFont(CGameFont*);function SetElipsis(boolean); }; Как я понимаю function SetTextColor должен быть записан в виде wnd:SetTextColor[a,r,g,b] (на самом деле в круглых, но движок сайта думает что это смайлы) и должен служить альтернативой "статиковскому" SetTextColor'у Я сам правда не пробовал еще, (мне бы в мой рюкзак тоже понадобилось изменять цвет при приближении текущего объема к максимальному, переходить зеленый->желтый->красный), если попробуешь напиши в ЛС о результатах, буду благодарен) @Viнt@rь,черт, кажется я понял)) ты только о текстурах) Изменено 5 Июня 2013 пользователем mumie Ссылка на комментарий
RayTwitty 492 Опубликовано 5 Июня 2013 Поделиться Опубликовано 5 Июня 2013 @Viнt@rь,в ЗП выпилили этот метод. Когда я ковырял под ЗП, тоже, внезапно столкнулся с фактом его отсутствия и был ошеломлен. Придется плясать с бубном либо лезть в движок и восстанавливать. Ссылка на комментарий
Viнt@rь 50 Опубликовано 5 Июня 2013 Поделиться Опубликовано 5 Июня 2013 , буду при много благодарен, да и не только я, если получиться вернуть его, а то создавать 255 тегов кастом статика с разным альфа каналом в ui_custom_msgs.xml не в прикол) GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Ссылка на комментарий
dukekan 5 Опубликовано 7 Июня 2013 Поделиться Опубликовано 7 Июня 2013 Замучался я с этой схемой. Жаль, что движок не выдаёт ошибок в действии модели поведения. Может, у кого ещё есть идеи, в чём ошибка? А то я всё больше склоняюсь к мысли не мучаться с "правильными" методами реализации поведения сталкеров, как это делали разработчики, а просто написать код без классов, который будет делать тоже самое. Потому как послать сталкера к торговцу "по простому" у меня заняло 15 минут, а здесь неделю) Ссылка на комментарий
Полтергейст 37 Опубликовано 7 Июня 2013 Поделиться Опубликовано 7 Июня 2013 К моменту добавления условий соответствующие эвалуаторы уже должны быть добавлены в планировщик. То есть все схемы, условия которых добавляются через add_precondition, должны быть загружены. Поэтому лучше поставить загрузку схемы последней в функции enable_generic_schemes. Кроме того, во всех схемах, загрузка которых вызывается из enable_generic_schemes, надо также заменить вызов addCommonPrecondition (если он там есть) на содержимое этой функции, но без добавления условия схемы npc_trade. Иначе они будут добавлять еще не существующее условие. Ссылка на комментарий
АuReN 0 Опубликовано 8 Июня 2013 Поделиться Опубликовано 8 Июня 2013 (изменено) Всем привет. Возникла проблема: на n-ном апдейте актора я заполняю таблицу данным, а на следующем апдейте она пустая, почему? А о том, как ты её заполняешь и получаешь из неё данные, мы сами должны придумать!? Буду удалять подобные вопросы без объяснений - всех касается. ColR_iT Изменено 8 Июня 2013 пользователем ColR_iT Ссылка на комментарий
Старлей 88 Опубликовано 19 Июня 2013 Поделиться Опубликовано 19 Июня 2013 Подскажите пожалуйста как добавить свою схему логики. Допустим xr_walker_klon. 1. Грубо говоря копия xr_walker. 2. Зарегестрировать в modules: load_scheme("xr_walker_klon", "walker_klon", stype_stalker) Нужно что-то еще? Схема как бы работает, вот только "как бы". В основном в схеме меняются состояния передвижения сталкера через "state_mgr.set_state" и "move_mgr", а вот в игре они почти не меняются. Может ли какая-нибудь другая схема препятствовать этим изменениям? Ray Of Hope - кооператив сталкера OldStory Ссылка на комментарий
*Shoker* 322 Опубликовано 19 Июня 2013 Поделиться Опубликовано 19 Июня 2013 (изменено) Кто нибудь случаем не находил способ менять дирекцию (взгляд) физического онлайн объекта чтобы изменения были видны сразу?Допустим на земле валяется аптечка и нужно менять её дирекцию с достаточной большой скоростью. Я в данный момент пытался физикой это сделать, сделал себе модель-болванку и через класс physics_joint пытался указывать направление джоинта через функции типа set_axis_dir_global(number, number, number, number); В оригинале эти функции никак не используются, примера глянуть негде, в игре на них никакой реакции не было. Может кто то уже придумал как изменить дирекцию объекта допустим через физику? Изменено 19 Июня 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
abramcumner 1 141 Опубликовано 19 Июня 2013 Поделиться Опубликовано 19 Июня 2013 @*Shoker*, менять дирекцию с большой скоростью - это по русски крутить? В теории можно приложить 2 антиколлинеарные силы к противоположным точкам тела - оно начнет крутиться на месте Будет ли работать это в ОДЕ - не знаю. 1 Ссылка на комментарий
*Shoker* 322 Опубликовано 19 Июня 2013 Поделиться Опубликовано 19 Июня 2013 Вариант сделать под объектом джоинт типа "колесо" и крутить его в одну сторону щас тоже наверно буду пробовать Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Старлей 88 Опубликовано 19 Июня 2013 Поделиться Опубликовано 19 Июня 2013 P.S. Разобрался - косяк был в том, что забыл занести апдейт таймеров, отвечающих за состояние передвижения, в actor_binder:update(delta) Ray Of Hope - кооператив сталкера OldStory Ссылка на комментарий
dukekan 5 Опубликовано 19 Июня 2013 Поделиться Опубликовано 19 Июня 2013 Кто-нибудь знает способ сохранения данных в ТЧ? Просто мне нужно при запуске(именно при запуске, т.е. в главном меню) игры узнать результат предыдущей (одну переменную). Пробовал через Lua io.open, но не получается (я так понял, эти функции есть только в ЗП и ЧН). Помог бы конечно amk.save_variable, но ведь она действует только при уже загруженной игре. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти