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

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

malandrinus,

Колмогор ещё делал выдачу инфопорции по переходу на конкретную закладку.

Да? Где можно это посмотреть?

Забыл сказать - с ТЧ работаю.

 

Кстати в дефолте - инфо о вкладках есть в конфигах, но они не выдаются...

 

У статика прокрутки нет, на то он и статик.

А через какой класс в ТЧ можно сделать текст, с возможностью его прокрутки?

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

А вот же склероз! Колмогор делал на новые закладки, а на родные закладки инфопорции и так выдаются. Посмотри в теме справочника в посте про инфопорции.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

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 и ...).

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

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

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

Artos, malandrinus,

При открытии КПК в ТЧ(SHoC), открытии различных вкладок - выдаются различные инфопоршни:

На 6 патче не выдаются, точно. Выдаются только инфо о открытии и закрытии ПДА: ui_pda, ui_pda_hide

На 4 патче вроде тоже не выдаются... На 5-ом не проверял.

 

Если вопрос подразумевает узкую спецификацию версии иль еще чего - следует сразу это в вопросе указывать.

На 4-м и 5-м патчах - инфопоршни закладок выдаются.

На 6-м ... ну тогда пробовать выцарапать что-то из объекта худа открытого КПК. Может удастся имена окон получить и по ним определять какак закладка.

--/ Artos

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

Обнаружил в распакованном тч скрипт логики следующего вида:

[smart_terrains]

sar_monolith_guard = true

respawn_check = false

 

 

Что за нижний параметр и можно ли его использовать?(ТЧ)

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

panzyuza

Мне тоже это интересно. В логике встречается ещё не один подобный параметр, на который я не смог найти описания.

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

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

Даже начал "причёсывать" и... бросил.

Может кому-нибудь будет интересно и полезно?

http://ifolder.ru/25789460

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

Наверно, данная параметр запрещает проверку респавна(дословно).Но кому, ссылок на данную логику в спавне я не нашел.

 

И еще вопрос. Написал в 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

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

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 и оставить только проверку на зону видимости.

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

panzyuza

Ну раз ты пока ещё не разобрался с random, то убери все сравнения с силой и жизнью. И измени :

if posit:distance_to(db.actor:position())<math.random(1,40) then
-- На
if posit:distance_to(db.actor:position())<40

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

Согласен.Спасибо за подсказку.Совсем не нужный рандом для позиции.Хватит и меньше 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

 

 

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

panzyuza

Ну тогда уж проследи за тем, чтобы бюрер не был дохлее чем 30 (self.object.health>=30)

Про monster_berserk уже и не помню. Давно Сталкером не занимался, бывшие знания улетучиваются.

Изменено пользователем Gun12
Ссылка на комментарий
Gun12, в смысле дохлее?Ведь в начале кода идет проверка на clsid(), обьект жив и здоровье больше или равно 30.
Ссылка на комментарий

Извиняюсь за свой предыдущий неясный ответ (чего то нашло).

Если жизнь бюрера будет меньше 30, то код ниже (а значит и дроп) не сработает.

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

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).

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

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

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

Artos

Тот код-то рабочий. Но вот и с твоим кодом нарвётся человек на random, который не пропустит, и будет говорить что твой вариант не годится :-)

Я хочу гарантированно показать дроп, независимо от того бюрер это или какая другая тварь. А там пусть и с random-ом экспериментирует.

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

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.Она хорошо работает.

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

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

Ой, я даже растерялся ... :blink:

Могу ошибаться, но ... если это и из 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'.

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

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

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

Есть таблица вида:

 local tbl = {
    ["текст1"]  = {},
    ["текст2"]  = {},
    ["текст3"]  = {},
     ...
                }

Если во время выполнения pairs() я сделаю что то вида: tbl["текст2"] = nil

То данная строка будет безболезненно удалена из таблицы и при повторном pairs() её уже не будет в таблице же?

Спрашиваю, вдруг какие то ньюансы есть.

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

×
×
  • Создать...