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

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

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
Ссылка на комментарий

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

Если жизнь бюрера будет меньше 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, форум АМК съел моё старое имя и не хочет отдавать о_О

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

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

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

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

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

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

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

Войти

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

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

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