RayTwitty 508 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 (изменено) malandrinus, Колмогор ещё делал выдачу инфопорции по переходу на конкретную закладку. Да? Где можно это посмотреть? Забыл сказать - с ТЧ работаю. Кстати в дефолте - инфо о вкладках есть в конфигах, но они не выдаются... У статика прокрутки нет, на то он и статик. А через какой класс в ТЧ можно сделать текст, с возможностью его прокрутки? Изменено 16 Сентября 2011 пользователем Shadows Ссылка на комментарий
Malandrinus 615 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 А вот же склероз! Колмогор делал на новые закладки, а на родные закладки инфопорции и так выдаются. Посмотри в теме справочника в посте про инфопорции. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Artos 99 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 (изменено) Shadows 1. При открытии КПК в ТЧ(SHoC), открытии различных вкладок - выдаются различные инфопоршни: ui_pda_map_local ui_pda ui_pda_events ui_pda_contacts ui_pda_ranking ui_pda_actor_info ui_pda_encyclopedia ui_pda_hide в ТЧ окно худа можно получить как: 'hud = level.main_input_receiver()' 2. Открой 'lua_help.script' и дай поиск по 'Scroll' -> получишь инфу в каких классами можно организовать и использовать скроллинг (CUIScrollView и ...). Изменено 16 Сентября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
RayTwitty 508 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 (изменено) Artos, malandrinus, При открытии КПК в ТЧ(SHoC), открытии различных вкладок - выдаются различные инфопоршни: На 6 патче не выдаются, точно. Выдаются только инфо о открытии и закрытии ПДА: ui_pda, ui_pda_hide На 4 патче вроде тоже не выдаются... На 5-ом не проверял. Если вопрос подразумевает узкую спецификацию версии иль еще чего - следует сразу это в вопросе указывать. На 4-м и 5-м патчах - инфопоршни закладок выдаются. На 6-м ... ну тогда пробовать выцарапать что-то из объекта худа открытого КПК. Может удастся имена окон получить и по ним определять какак закладка. --/ Artos Изменено 16 Сентября 2011 пользователем Artos Ссылка на комментарий
panzyuza 41 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 Обнаружил в распакованном тч скрипт логики следующего вида: [smart_terrains] sar_monolith_guard = true respawn_check = false Что за нижний параметр и можно ли его использовать?(ТЧ) AVS_LOCATION_MOD Ссылка на комментарий
Nazgool 250 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 (изменено) panzyuza Мне тоже это интересно. В логике встречается ещё не один подобный параметр, на который я не смог найти описания. Когда-то написал скрипт, разбирающий все секции логики на всевозможные параметры, которые могут использоваться в конкретной схеме. Писал на скорую руку, поэтому результат несколько сумбурный. Много мусора, но мне на тот момент было достаточно и в таком виде. Даже начал "причёсывать" и... бросил. Может кому-нибудь будет интересно и полезно? http://ifolder.ru/25789460 Изменено 16 Сентября 2011 пользователем Gun12 Ссылка на комментарий
panzyuza 41 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 (изменено) Наверно, данная параметр запрещает проверку респавна(дословно).Но кому, ссылок на данную логику в спавне я не нашел. И еще вопрос. Написал в bind_monster в функцию generic_object_binder:update(delta) следующую конструкцию: if self.object:clsid()==clsid.burer_s and self.object:alive() and self.object.health>math.random(1,100)/100 then local npc=self.object:get_enemy() if npc then if npc:id()==db.actor:id() and db.actor:see(self.object) and self.object:see(db.actor) and math.random(1,100)/100>db.actor.power and math.random(1,100)/100>db.actor.health then local posit = self.object:position() if posit:distance_to(db.actor:position())<math.random(1,40) then local active_item = db.actor:active_item() if active_item and active_item:section()~= "bolt" and active_item:section()~= "wpn_knife" then db.actor:drop_item(active_item) end end end end end То есть бюрер при радиусе вида игрока и дистанции до гг до 40 метров может выбить оружие из рук ГГ.Но почему то оружие не выбиваеться.С контроллером данная конструкция работает, а с бюрером нет.Может что не так? Отделяй, пожалуста свой (новый) вопрос от реплики по предыдущему ... Тем более без каких-либо пробелов, не говоря о переносе на новую строку. --/ Artos Изменено 16 Сентября 2011 пользователем Artos AVS_LOCATION_MOD Ссылка на комментарий
Nazgool 250 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 panzyuza А ты уверен что все сравнения с math.random проходят? Ссылка на комментарий
panzyuza 41 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 (изменено) Gun12, данную функцию мне посоветовали на сайте ap_production.И пока разобраться не могу,что не так.Наверно, стоит вот в этой строке if npc:id()==db.actor:id() and db.actor:see(self.object) and self.object:see(db.actor) and math.random(1,100)/100>db.actor.power and math.random(1,100)/100>db.actor.health then убрать последние два сравнения с math.random и оставить только проверку на зону видимости. Изменено 16 Сентября 2011 пользователем panzyuza AVS_LOCATION_MOD Ссылка на комментарий
Nazgool 250 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 (изменено) panzyuza Ну раз ты пока ещё не разобрался с random, то убери все сравнения с силой и жизнью. И измени : if posit:distance_to(db.actor:position())<math.random(1,40) then -- На if posit:distance_to(db.actor:position())<40 Изменено 16 Сентября 2011 пользователем Gun12 Ссылка на комментарий
panzyuza 41 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 (изменено) Согласен.Спасибо за подсказку.Совсем не нужный рандом для позиции.Хватит и меньше 40.Случайно не знаешь, что будет, если в логике использовать параметр %=monster_berserk% из xr_effects? В итоге данная функция приняла следующий вид: if self.object:clsid()==clsid.burer_s and self.object:alive() and self.object.health>=30 then local npc=self.object:get_enemy() if npc then if npc:id()==db.actor:id() and db.actor:see(self.object) and self.object:see(db.actor) then local posit = self.object:position() if posit:distance_to(db.actor:position())<40 then local active_item = db.actor:active_item() if active_item and active_item:section()~= "bolt" and active_item:section()~= "wpn_knife" then db.actor:drop_item(active_item) end end end end end Изменено 16 Сентября 2011 пользователем panzyuza AVS_LOCATION_MOD Ссылка на комментарий
Nazgool 250 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 (изменено) panzyuza Ну тогда уж проследи за тем, чтобы бюрер не был дохлее чем 30 (self.object.health>=30) Про monster_berserk уже и не помню. Давно Сталкером не занимался, бывшие знания улетучиваются. Изменено 16 Сентября 2011 пользователем Gun12 Ссылка на комментарий
panzyuza 41 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 Gun12, в смысле дохлее?Ведь в начале кода идет проверка на clsid(), обьект жив и здоровье больше или равно 30. AVS_LOCATION_MOD Ссылка на комментарий
Nazgool 250 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 (изменено) Извиняюсь за свой предыдущий неясный ответ (чего то нашло). Если жизнь бюрера будет меньше 30, то код ниже (а значит и дроп) не сработает. Изменено 16 Сентября 2011 пользователем Gun12 Ссылка на комментарий
Artos 99 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 (изменено) panzyuza По функции в #2789: Код вполне выглядит рабочим. Возможно ошибка в том, что ты используешь проверку не по тому классу. Для бюреров в ТЧ может быть использован класс 'clsid.burer', а не только 'clsid.burer_s'. Какой у тебя нам не ведомо. Так же, довольно неоптимизированный код функции. Взгляни на немного причесанный: local oNPC = self.object if (oNPC:clsid() == clsid.burer or oNPC:clsid() == clsid.burer_s) and oNPC:alive() and oNPC.health >= 0.3 then local oActor = oNPC:get_enemy() --/ объект врага if oActor and oActor:id() == db.actor:id() then --/ это актор (ГГ)? if oNPC:see(oActor) and oActor:see(oNPC) then --/ видят друг друга? if oActor.power < math.random() and oActor.health < math.random() then --/ уровни силы и здоровья ГГ if oNPC:position():distance_to(oActor:position()) < 40 then --/ дистанция до ГГ local active_item = oActor:active_item() --/ что держит в руках ГГ if active_item and active_item:section() ~= "bolt" and active_item:section()~= "wpn_knife" then oActor:drop_item(active_item) --/ выбрасываем end end end end end end Попробуй комментировать соответствующую ступень проверок - так сможешь найти ту, что не пропускает ... P.S. Внес предложенные выше правки по > 30 и < 40. P.P.S. Ошибка! Не 30 здоровья, а 0.3 у бюрера (0...1). Изменено 16 Сентября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Nazgool 250 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 Artos Тот код-то рабочий. Но вот и с твоим кодом нарвётся человек на random, который не пропустит, и будет говорить что твой вариант не годится :-) Я хочу гарантированно показать дроп, независимо от того бюрер это или какая другая тварь. А там пусть и с random-ом экспериментирует. Ссылка на комментарий
panzyuza 41 Опубликовано 16 Сентября 2011 Поделиться Опубликовано 16 Сентября 2011 (изменено) Artos, спасибо за пояснение.Исправил.Вот еще один код на контроллера, с функцией зомбирования нпс, который атакует его.Нужны ли здесь какие-нибудь правки?(Функцией monster_effects.controller_attack() вызываються рандомные звуки). if self.object:clsid()==clsid.controller_s and self.object:alive() then local npc=self.object:get_enemy() if npc then if IsStalker(npc) then local npc_name = npc:name() --/#~# local npc_p_name = npc:profile_name() --/#~# local npc_c_comm = npc:character_community() --/#~# if npc:id() ~= db.actor:id() and npc:clsid() == clsid.script_stalker and self.object:see(npc) and npc_c_comm ~= "zombied" and npc_c_comm ~= "actor_zombied" and --/#+# self.object:position():distance_to(npc:position()) < math.random(10,60) then local sobj = alife():object( npc:id() ) if sobj and sobj.online then npc:set_character_community("zombied",0,0) end end end if npc:id()==db.actor:id() and self.object:see(db.actor) then local posit = self.object:position() monster_effects.controller_attack() end local active_item = db.actor:active_item() if active_item and active_item:section()~= "bolt" and active_item:section()~= "wpn_knife" and math.random(1,100)/100>db.actor.psy_health then db.actor:drop_item(active_item) end end end Данная функция из OGSE.Она хорошо работает. Изменено 16 Сентября 2011 пользователем panzyuza AVS_LOCATION_MOD Ссылка на комментарий
Artos 99 Опубликовано 17 Сентября 2011 Поделиться Опубликовано 17 Сентября 2011 (изменено) Gun12 Не очень понял в твоей реплике о какой проблеме с рандомом говоришь. В проыессе ответа дошло,... ты о том, что рандом затрудняет проверять дроп, отсекая немало апдейтов при здоровом и сильном акторе? Поэтому и дал совет ремить строки проверок ... В последнем с 0.3 варианте рандом использован только для получения пары значений силы и здоровья и никаким образом не может дать сбой. Иное дело, что я бы так НЕ делал. как по силе так и по здоровью зависеть от 2х100% рандома - конечно довольно глупо. Тут не нужен рандом, а только задать свои константы. Ну или так: 'if oActor.power < math.random(50,70)*0.01 and oActor.health < math.random(50,70)*0.01 then' Но ... т.к. первично найти причину НЕ рабочести кода - не стал залезать далеко ... ;-) Да и ... порой собственноручно набитые шишки - гораздо сильнее запоминаются. Думаю, что поиск самим хорошего решения - одна из привлекалок к занятию модингом. Делать все по подсказке - мне, например, неинтересно было бы. ========================================================================== Добавлено через 100 мин.: panzyuza Ой, я даже растерялся ... Могу ошибаться, но ... если это и из OGSE, то ... исходно написано АМК, мною было модифицированно и вероятно кем-то адаптировано в OGSE (с рудиментами и моими комментами типа '--/#~#' ). 1. Постарайся задавать поменьше таких вопросов. Таких - это когда от тебя НИ ЕДИНОЙ мысли/вопроса не высказано. Все же, как понимаю ТЫ делаешь мод, а не 'дядя'. Понимаю, что тебя интересует почти все, ты сам не можешь что-то оптимизировать иль увидеть ошибку/неточность, но(!) все же должен думать своею головой хоть о чем-то! (пояснения дальше ...) 2. Тебе уже ранее дан вариант, где 'math.random(1,100)/100' заменен на 'math.random()'. Ну зачем для получения одного и того же результата задавать диапазои и выполнять дополнительно деление? Это только для удобства чтения может быть удобно, что 100 - это 100% То, что диапазон рандома ограничен снизу (0.01) здоровья - у меня вызывает вопрос - а зачем? Это типа того, что у совсем дохлого (>0.01) ГГ руки сводит и он не может выронить оружие? :-) 3. Сейчас бы я, убрав все рудименты, написал для оптимизации и понимания так: local oNPC = self.object --/ кешируем объект монстра if oNPC:clsid() == clsid.controller_s and oNPC:alive() then --/ это контролер? живой? local oTarget = oNPC:get_enemy() --/ получаем объект врага - цель атаки if oTarget and IsStalker(oTarget) and oNPC:see(oTarget) then --/ есть цель, это сталкер или ГГ и контролер видит его if oTarget:id() ~= db.actor:id() then --/ это не актор (ГГ)? if oNPC:position():distance_to(oTarget:position()) < math.random(10,60) then --/ дистанция менее 10...60 --/ проверки-подстраховки: local sObj = alife():object( oTarget:id() ) --/ серверный объект цели if sObj and sObj.online then --/ есть серверная цель и она в онлайне if oTarget:character_community() ~= "zombied" then --/ цель не зомбирована oTarget:set_character_community("zombied",0,0) --/ зомбируем цель end end end elseif oTarget:character_community() ~= "actor_zombied" then --/#?# актор не зомбирован? monster_effects.controller_attack() --/#># вызов сторонней функции #?# end if oTarget.psy_health < math.random() then local active_item = oTarget:active_item() local sSection = active_item and active_item:section() if sSection ~= "bolt" and sSection ~= "wpn_knife" then oTarget:drop_item(active_item) end end end end Обращаю внимание, что с группировкой "actor_zombied" (это именно из OGSE) нужно что-то решать исходя из твоих конкретных кодов: а) насколько понимаю, то эта группировка не доступна для сталкеров - поэтому убрал из условий их проверок и перенес именно актору. б) и если ее (группировки) у тебя нет - либо убрать ее и не зомбировать актора или ... что-то доделывать. в) и ... если зомбировать актора, то я бы добавил проверку дистанции и до него, а не только для НПС. Так же, без внешней функции из скрипта 'monster_effects.controller_attack()' это работать не будет! Внимание! Без исключений из зомбирования нужных НПС (квестовые и т.п.) ты рискуешь в игре лишаться их, т.к. раззомбирование тут не предусмотрено. ========================================================================== Добавлено через 86 мин.: panzyuza, Gun12 Ответ на вопрос #2786: т.е. для чего параметр 'respawn_check' и можно ли его использовать? Использовать можно. Для чего? В параметре 'respawn_section' респавнеров задаются секции объектов для респавна. При респавне считываются эти секции и проверяется в них наличие параметра 'custom_data'. Если есть - читается указанный ltx-конфиг и читается из конфига секция 'smart_terrain', т.е. по сути, проверяется отвязка НПС от гулага. Если обнаруживается запись: 'none = true' или 'respawn_check = false' - устанавливается флаг, который запретит гулаговые проверки для такого объекта. Что это за 'гулаговая' проверка? Это означает, что в процессе спавна уже отреспавненный объекта проверяется его привязка к записанному в его логике гулагу. И, если гулаг прописан, но отсутствует, то объект удаляется из игры. Т.о. параметр 'respawn_check' - это флаг, который запрещает (при значении 'false') удалять уже отреспавненного НПС в случае, если в игре отсутствует гулаг прописанный этому НПС. В противном случае, 'если гулаг прописан и отсутствует в игре - НПС, будучи уже заспавненным, УДАЛЯЕТСЯ. Не указание параметра (что и делается в кодах) - приравнивается к 'respawn_check ~= false'. Изменено 17 Сентября 2011 пользователем ColR_iT "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
*Shoker* 322 Опубликовано 17 Сентября 2011 Поделиться Опубликовано 17 Сентября 2011 (изменено) Есть таблица вида: local tbl = { ["текст1"] = {}, ["текст2"] = {}, ["текст3"] = {}, ... } Если во время выполнения pairs() я сделаю что то вида: tbl["текст2"] = nil То данная строка будет безболезненно удалена из таблицы и при повторном pairs() её уже не будет в таблице же? Спрашиваю, вдруг какие то ньюансы есть. Изменено 17 Сентября 2011 пользователем ColR_iT Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Nazgool 250 Опубликовано 17 Сентября 2011 Поделиться Опубликовано 17 Сентября 2011 *Shoker* Не переживай, всё удалиться нормально. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти