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

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

PavelSnork

Вот этот:

local iHealthIdx = nil
local iPowerIdx  = nil

function check_params()
  local hud = get_hud()
  --/ clear: чистка всех кастом-статиков указанного маской имени (sMaskName)
  function Clear(sMaskName)
    for i=1,24 do
      if hud:GetCustomStatic(sMaskName..i) then --/ проверка наличия
        hud:RemoveCustomStatic(sMaskName..i) --/ удаление
      end
    end
  end
  --/ health: вычисляем индекс здоровья актора
  local iIdx = math.ceil(db.actor.health * 25)-1 --/ индекс здоровья (1...24)
  if iIdx > 0 then --/ если есть здоровье
    if iIdx ~= iHealthIdx then --/ индекс уровня сменился?
      if iHealthIdx and hud:GetCustomStatic("health_level_"..iHealthIdx) then --/ проверка наличия
        hud:RemoveCustomStatic("health_level_"..iHealthIdx) --/ удаление
       end
      hud:AddCustomStatic("health_level_"..iIdx, true) --/ выводим нужный
      iHealthIdx = iIdx --/ запоминаем
    end
  elseif iHealthIdx then --/ нет здоровья и при наличии индикатора
    Clear("health_level_") --/ чистим все кастом-статики здоровья
    iHealthIdx = nil --/ обниляем, дабы не чистить постоянно
  end
  --/ power: вычисляем индекс силы актора
  iIdx = math.ceil(db.actor.health * 25)-1 --/ индекс силы (1...24)
  if iIdx > 0 then --/ если есть сила
    if iIdx ~= iPowerIdx then --/ индекс уровня сменился?
      if iPowerIdx and hud:GetCustomStatic("power_level_"..iPowerIdx) then --/ проверка наличия
          hud:RemoveCustomStatic("power_level_"..iPowerIdx) --/ удаление
        end
      end
      hud:AddCustomStatic("power_level_"..iIdx, true) --/ выводим нужный
      iPowerIdx = iIdx --/ запоминаем
    end
  elseif iPowerIdx then --/ нет силы и при наличии индикатора
    Clear("power_level_") --/ чистим все кастом-статики силы
    iPowerIdx = nil --/ обниляем, дабы не чистить постоянно
  end
end

- более оптимизирован. Убраны отдельные излишества и заменены сравнения строк на численные, которые гораздо быстрее выполняются.

(примечание: код не проверялся в 'рабочем режиме', перепроверь по месту)

 

Добавлено через 42 мин.:

=VENOM=

Несколько размышлений на тему:

в некоторой степени лишат игру "симуляционной миграции" NPC между локациями
Каждый респавнер имеет время паузы. Каждый гулаг, выдав кому-то работу - резервирует эту работу за наемным НПС.

Т.о. даже при достаточном кол-ве активных респавнеров на текущей локации можно наблюдать, как на текущую локацию приходят НПС с других локация. А то, что и на текущей активны - дает эффект ухода НПС с текущей локации на другие.

Причем, если активно работает 'оффлайн-алайф', т.е. НПС сражаются между собою и с монстрами и гибнут - эффект ухода 'вперед' актора довольно неплохо смотрится.

Можно даже более разнообразить. В своих пробах ставил респавнер за блок постом на Кордоне и давал 75м дистанции до актора и условием спавна солдан на БП < 3 - после выноса актором БП на Кордон с внешней сторона Зоны начинали подтягиваться новички. Вот такой получается "симуляционная миграция" при активных респавнерах на текущей локации. ;-)

 

у себя я сделал отслеживание продвижения игрока по локациям

Аналогично, и хотел бы посоветовать единомышленнику не только 'линейное' отслеживание прохождения вглубь Зоны, но и более мудреное. ГГ может и возвращаться (и не раз) на тот же Кордон ... Встречать опять на Кордоне новичков не интересно, встречать после малого круга на ТД (по сюжету) только мастеров - тоже несколько странно, во фриплее - самое оно. Если ввести условие в респавнеры спавнить ранги в зависимости от кол-ва посещенных актором локаций - имеем эффект постоянно усложняющий игру.

можно чуточку "поколдовать", и сделать так, чтобы в зависимости от условий (функция, инфопоршн) один и тот же респонер будет порождать NPC селективно, а не по приоритетному выбору из нескольких секций, как сейчас

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

 

Загляни в топик "Universal ACDC и другие perl-скрипты" - с последней версией можно достаточно легко в нужное время удалять любой респавн и заново спавнить по его секции из алл.спавна, причем индексы секций не требуется ручками прописывать, а можно брать скриптом из секции с именем объекта. Это дает возможность наделать в all.spawn'е нужное кол-во респавнеров и задействовать/отключать их прямо из скриптов в любое время и в зависимости от динамических условий.

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

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

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

Люди,вот у меня такой вопрос.Создал нпс сидящего у костра вот с этой логикой.

[logic]

active = walker

level_spot = quest_npc

on_death = death

 

[no_smart]

 

[remark]

path_walk = ohrana_02_walk

path_look = ohrana_02_look

anim = sit_knee

on_timer = 80000| walker@vodka

 

[walker@vodka]

anim = sit

on_timer = 14000| remark

Но нпс либо просто стоит и не выполняет анимации,либо смотрит не в ту сторону. :huh: Что делать?Заранее благодарен :)

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

Ох.. Вставляю в НС новые стволы, появилась такая бяка, ни чего лишнего(кроме непосредственно оружейных файлов не редактировал), ГГ ходит кагбудто очень устал, че за фигня..

d482748dd71c96f5d6326115d120012653951599019477.jpg

===

ПС, я без понятия какое отношение имеет моя проблема к этой теме.. Но послали так послали.. (с)

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

FANAT.gif

Мой канал на ютабчике... / Недельки из жизни фаната STALKER'a / Клуб 'Фанат Отчуждения'

Я нет-нет, а думаю, может я неправильно жил, надо ж брать деньги у богатых и давать их бедным, а таким как ты давать по морде, шоб у мире была красота и гармония.(с)Ликвидация

Всё в порядке, всё нормально, я беру тебя с собой, я беру тебя с собой. В тёмный омут головой.(с)Смысловые Галлюцинации

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

FANAT

1. Вместо наполнения своего вопроса пустым мусором (охами иль ахами), и дворовым жаргоном (че за фигня), потрудился бы датнь побольше информации в своем вопросе.

Например, под спойлером указал бы какие коды в каких конфигах вставлял. Раз волнует веc - хотя бы какие параметры веса в своих 'новшествах' использовал следует указать.

Например, я, на безграмотные и/или безинформативные вопросы стараюсь не давать ответов ...

 

2. Тебе было посоветовано первоначально обратиться с этим вопросом в топик соответствующего мода. В данном случае в топики по НС (Народной Солянке). Ты ленишься получать ответы от первоисточника или тех, кто хорошо знает мод?

Лень часто приводит к потере времени, чем к его экономии ...

 

3. Вариант самостоятельного поиска причины ошибки:

3.1. Убираешь все свои добавки и проверяешь, что проблемы с весом нет.

3.2. Добавляешь 1 (один!) свой ствол и проверяешь - нет ли проблем с весом.

3.3. Так добавляешь по одиночке остальное. Как только появится проблема с весом - изучаешь последний добавленный конфиг в поисках ошибок/описок.

Если не смог ничего найти 'криминального' - выкладываешь этот конфиг под спойлером тут - постараемся помочь.

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

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

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

Решил, значит, запилить скрипт, чтобы при нахождении на локации Саркофаг у ГГ всегда трещал дозиметр

local geiger_snd

function l12u_sarcofag_geiger_sound()
    if level.name()=="l12u_sarcofag" then
        if not (geiger_snd and geiger_snd:playing()) then
            geiger_snd = sound_object("detectors\\geiger_7")
            geiger_snd:play_at_pos(db.actor,vector():set(0,0,1),0,sound_object.s2d+sound_object.looped)
        end
    else
        if geiger_snd then geiger_snd:stop() geiger_snd=nil end
    end
end

Но вот проблема: звук, при обычных обстоятельствах слышимый нормально, в этом случае играет очень тихо. Как это можно исправить?

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

Ренсон

Останавливать звук при выходе из локации саркофаг совсем не обязательно, насколько я знаю, при save\load он сам пропадает.

Попробуй сделать что то вроде geiger_snd.volume = 1 , но по идее звук по умолчанию на макс. громкости играет.

 

Добавлено через 87 мин.:

В hit_callback есть параметр amount (Второй, после obj - жертвы), за что он отвечает? Я думал это размер нанесённого урона, но в таком случае это довольно поверхностное значение.

 

Я сейчас проводил тест (ЧН) наносил урон НПС и проверял его amount и оставшиеся жизни.

 

В момент хита (колбек) amount был равен 35,4356352....

Переменная health в момент колбека ещё не изменилась.

 

При втором хите мне опять написали amount 35.241228... (но число уже чутка другое)

Но health у НПС был 0.89, тоесть у НПС и близко не отнялось 35 процентов жизни.

 

И так до самой смерти НПС, стрелял ему в грудь, amount всегда выдавало 30-35, но умер тока после 10-11 раза.

 

Так что такое, этот amount, и есть ли возможность в колбеке получить реальный урон, если даже переменная health у НПС меняется лишь после колбека?

amount точно отвечает за нанесённый урон и зависет от силы этого урона, но его значение не соответствует реальности.

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

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

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

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

*Shoker*,

возможно передается урон еще до ослабления защитой.

Посравнивай hit_power и всякие коэффициенты защиты у НПЦ

Ну и 35 это как-то много - ты на 100 что ли умножил?

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

Нет, именно возвращает как 35,2208252... тоесть уже умноженное на 100.

Я тоже думаю что это до ослабления, но как реальный урон получить?

У GSC нигде реально amount не используется, тока как проверка, что урон был вообще.

 

Да, ещё передаётся же индекс кости, по которой атаковали, на её основе можно вычесть реальный урон но там же наверно ещё какое то ослабление учитывается помимо брони?

 

Сообщение от модератора ColR_iT
А вот жирным шрифтом писать не нужно!
Изменено пользователем ColR_iT

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

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

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

Посмотри в этой теме [CS] Расчет повреждений при стрельбе по неписям

Реальный только как разницу между старым и новым здоровьем

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

http://dl.dropbox.com/u/23885395/sm_hit_mgr.script

 

Вот вобщем, если кому надо. Написал небольшую надстройку для стандартного hit_callback-а.

Суть описана внутри, если вкратце, то скрипт заносит все моменты хита в таблицу, и при ближаишем апдейте, прогоняет все эти хиты и сравнивает здоровье НПС в момент того хита, с, либо текущим здоровьем НПС, либо со здоровьем в момент следующего хита (если хитов было несколько))

Разница и есть наш урон.

 

С одиночными выстрелами работает хорошо, может быть лишь небольшая погрешность если в долю секунды было сделано очень много выстрелов по нпс (например выстрел в упор из дробовика, за долю секунды вызывается около 20-40 hit_callback-ов на каждую из дробинок)

 

Заодно прошу знающих людей, если есть время и желание, глянуть, может можно как то упростить\улучшить\оптимизировать конструкцию.

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

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

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

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

Ренсон

'play_at_pos' - не самый удачный выбор метода проигрывания звука в твоем случае.

Если звук должен звучать именно для актора (игрока) и звучать постоянно - то для чего проигрывать его именно по позиции актора?

Есть метод 'play_no_feedback' - который НЕ расходует лишних ресурсов, т.к. не требуется постоянное обновление по координатам объекта и не ожидает никакого управления. Т.е. запустил звук - и сам играет пока не закончится. Используя параметр зацикливания - проигрывается 'по кругу'.

Типа: geiger_snd:play_no_feedback(db.actor, sound_object.s2d+sound_object.looped, 9, vector():set(0,0,0), 1.0)

Последний параметр (1.0) - громкость, можно поднять, например 3.0 , хотя лучше в SDK установить требуемый.

А вообще (ИМХО) - занести в амбиент локации и не париться со скриптами ...

 

*Shoker*

'amount' - это именно величина хита, т.е. та величина, которая должна нанести объекту указанное значение урона.

В твои размышления и тем более выводы "это довольно поверхностное значение" - не верны.

Должно быть нанесено, нанесено и сколько в данный момент стало - и разные понятия и зависят от сторонних факторов и времени.

1. Урон, который наносится объекту, в данном случае сталкеру, раскладывается на несколько элементов. Часть урона берет на себя его 'защита' (костюм/визуал). Т.о. уровень здоровья сталкера упадет само собою на меньшее значение.

2. Нанеся хит и замерив в этот момент уровень здоровья, ты следиющее измерение здоровья производишь через некоторый интервал времени! Тобою совершенно упущено то, сталкеры имеют свойство ВОССТАНАВЛИВАТЬ свое здоровье и, что получив хит - это здоровье начинаает восстанавливаться. Т.о. в момент твоего повторного измерения уроовень здоровья, упавший до некоторого уровня, успеет восстановиться на некоторую величину.

3. Следует учитывать, что периоды апдейтов для НПС следуют с достаточно большим разбросом, и зависят и от расстояния до ГГ и от кол-ва обрабатываемых объектов. Если же брать апдейт актора (ГГ), то и он имеет, хотя и гораздо меньший период и разброс, и разброс порой не маленький.

Так что ... твои вычисления грешат , твоими же словами, именно 'поверхностностью'.

 

Если и расчитывать (не знаю для чего?), то:

- получать значение получаемого хита. В этот же момент запоминать текущее значение здоровья и текущее игровое время.

- на следуюшем (2-ом) апдейта получать 2-ое значение здоровья (-хит +восстановление) и дельту времени между апдейтами.

- на следующем (3-ем) апдейте, при условии отсутствия нового хита, опять получать значение здоровья (+восстановление) и дельты времени.

Ну и дальше расчитать, без учета восстанавливаемости здровья объекта, но и без значения хита, поглащенного костюмом. В принципе, если не грешить не "приближенность" параметра 'amount' - можно приближенно расчитать сколько урона НЕ ушло на здоровье актора, т.е. косвенно - поглащено защитой.

 

Добавлено через 137 мин.:

*Shoker*: У GSC нигде реально amount не используется, тока как проверка, что урон был вообще

Что же ты так любишь приписывать GSC'никам свои предполагалки?

Смотрим в 'xr_motivator.script' (SCoP):

function motivator_binder:hit_callback(obj, amount, local_direction, who, bone_index)
  --/...
  -- Если пришел смертельный хит, с некоторой вероятностью делаем чувака раненым.
  if bone_index ~= 15 and amount > self.object.health*100 then
    --printf("DEADLY HIT %s %s", amount, self.object.health*100)
    self.object.health = 0.15
  end
  --/...
end

- т.е. именно по 'amount'-у проверяется не помрет ли НПС и ему заранее корректируется здовье. Иной вопрос действенность и реализация данного варианта ...

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

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

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

Artos

 

>В твои размышления и тем более выводы "это довольно поверхностное значение" - не верны.

Тащемта я говорю о реальном уроне НПС, "должно быть" меня совершенно не интересует, если в итоге выходит совсем другой результат.

И ты та понимаешь, что этому "должно быть наненесено" грош цена, и реально его использовать почти не возможно, разве что в какой то спец. ситуации.

 

> Что же ты так любишь приписывать GSC'никам свои предполагалки?

Наверно потому что не раз смотрел их скрипты, а ещё я умею поиск по файлам делать.

 

Тем более сейчас смотрел по ЧН, там этого ещё нет. И что в ЗП, что в ЧН этот параметр используется там, где большая точность не нужна.

Тем паче что разница между amount и реальным хитом порой отличается в 3-4 раза.

***

1) Я это уже понял, только составить формулу весьма проблематично, учитывая кол-во параметров, которые надо получить.

Если получить [stalker_damage] ещё можно, то надо ведь ещё стойкость модели НПС получить, узнать, являлась ли пуля бронебойной и прочее прочее...

 

2) Я думаю с интервалом в ~0.2мсек (скока там апдейт ГГ?) у НПС ничего и нигде не восстановится так сильно.

3) Уже ответил во 2 вопросе, я и использую апдейт ГГ, зачем мне апдейт НПС? И уж моя погрешность несравненно ниже.

 

> Если и расчитывать (не знаю для чего?)

Делаю систему перков, увеличение урона и прочие элементы присутствуют. Вот для этого мне и нужно.

 

Если есть идеи более точного варианта, я буду тока рад :), а пока вот приходится делать такое...

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

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

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

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

*Shoker*, когда у человеке в голове 'каша' - то и его слова и выводы носят 'кашеобразный' характер.

Трудно написать более кашеобразно:

*Shoker*: amount точно отвечает за нанесённый урон и зависет от силы этого урона, но его значение не соответствует реальности.

И не отвечает 'amount' за точно нанесенный урон, а только определяет возможный урон. И никак 'amount' не зависит от этого урона, т.к. 'amount' первичен, а урон вторичен. И о какой реальности тут речи - вообще непонятно. Если под реальностью некое "здоровье" - все что выше говорит о том, что и не должно и никак не может соответствовать ...

В общем ставим кобылу позади телеги и рассуждаем как телега везет кобылу ... ;-)

 

Немало тех, кто поболе тебя ковырялся и рассматривал исходные коды GSC, но даже понимая их не приписывает GSC'никам чего-либо.

И то, что что-то появилость только, например в ЗП, и не говорит о том, что этого нельзя было сделать в ТЧ/ЧН, и уж никак о том, что "нигде реально amount не используется". Аккуратнее в словах, уже не первый раз попадаешь в просак.

 

Ну и, не стОит формулировать некие куски подвопросов/размышлений, выдернутых из контекста. Пока не поняткна конечная цель - опровергать/советовать чаще всего напрасная трата времени. Пояснил бы в начале, что конкретно интересует ... А то даже в конце о "системе перков" нечто, как будто всем ясно о чем речь.

 

*Shoker*: Если есть идеи более точного варианта, я буду тока рад

Если уж поминаешь про точность - потрудись ТОЧНО поставить задачу или хотя бы по-возможности конкретно и без жаргонария (типа 'перков'?), описать пожелалку. А пока - только критиковать твое нынешнее имеется возможность ... :crazy:

 

=================================================

Добавлено через 67 мин.:

panzyuza

Да, в таск-менеджере учитывается параметр 'prior' -- приоритет квеста.

Из однотипных доступных квестов выдается с меньшим весом параметра приоритета.

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

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

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

Народ, помогите плиз, вообщем вот:

 

showOnScreen(eng_char[1] .. '=' .. rus_char[1], "hud_InfoThird")

local op = io.open(os.date("gamedata\\logs\\message.txt"), "a" )

if op ~= nil then

op:write(text)

op:close()

 

тут идет запись в message.txt , а как мне сделать так, чтобы приходило сообщение на пда с текстом из message.txt

 

news_manager.send_tip(actor, "как мне прочитать текст из message.txt и сунуть его сюда ?", nil, nil, 60000)

 

а потом message.txt просто очищался, тоесть становился пустым файлом.

 

 

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

Artos

Собственно говоря, для чего мне нужно получить реальный нанесённый по НПС урон не важно, важно то, что мне нужно его получить.

Сейчас я это реализовал через апдейт и всё прекрасно работает. Если есть какие то другие более простые способы (ну там формулу как то составить, чтобы например через amount высчитать реальный урон), то буду рад, если их кто подскажет, но это уже так, чисто из интереса.

 

 

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

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

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

*Shoker*

Если для тебя "это уже так, чисто из интереса", то, например для меня и напрягаться ради удовлетворения такого интереса - неинтересно ...

Ты до сих по не пояснил что же такое "реальный нанесённый по НПС урон" (real_hit, total_hit), а в выложенном скрипте какая-то белиберда на эту тему. Но раз тебя устраивает то что получилось - нет проблем, вопрос закрыт.

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

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

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

Ребята, нужно создать квест по поиску предмета, но без второго лица (как ПЫС с выдачей вертолётов).

Мне эт как прописать?

так пойдёт?

function red_foreat_equiment()

task_manager.get_task_manager():give_task("red_foreat_equiment")

end

f

function tred_foreat_equiment()

dialogs.relocate_item_section_from_actor("вещи и их кол-во")

end

 

Выводы модмейкера:

1)Вылетает - это хорошо. Значит, работает :)

2) Если хочешь сделать что-то хорошо, делай сам!

3) Если падёшь духом, падёт и мод.

4) Он живой... :o

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

Такая проблема появилась, сделал задание на убийство куч монстров, а из-за их трупов начинает лагать игра. Есть ли функция, после выполнения которой все трупы монстров исчезают? Именно после функции, чтобы вставить в диалог.

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

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

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

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

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

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

Войти

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

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

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