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

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

@Colder , потому что имя - это параметр inv_name в секции.

Т.е. должно быть

gts(system_ini():r_string(section_ammo, "inv_name"))

  • Спасибо 1
  • Согласен 1
  • Полезно 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

И еще вопрос. Можно как-то исправить длинющий вывод condition оружия https://yadi.sk/i/2KXBYb8CstNu4Q

Скрытый текст

function weapon_info()
    local time = time_global()
    if time_add == nil then
    time_add = time_global() + time_update
end
    local active_slot = act:active_item()
    if active_slot and act:active_slot()==2 then
    if time > time_add then
    time_add = time_global() + time_update
    local sect = act:item_in_slot(2):section()
    local name = tostring(system_ini():r_string(sect,"inv_name_short"))
    condition = act:item_in_slot(2):condition()
    local text = "\\n%c[white]Текущее оружие: \\n%c[d_green]"..gts(tostring(name)).."\\n%c[d_cyan]состояние : "..gts(tostring(condition))
    act:give_game_news(text,"ui\\cop\\ui_cop_iconstotal",Frect():set(664,329,83,47),150,5000)
end
    time_add = nil
end
end

 

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

@Colder Как я понимаю, речь о большом кол-ве цифр?

Запиши в глобал спейс ф-ию округления до указанной точности:

Скрытый текст

function math.round(v, exp)
    if v then
        if not exp then
            exp = 0
        end
        return tonumber(string.format("%."..exp.."f", v))
    end
end

 

v - число, которое округляем

exp - как округляем, кол-во знаков после запятой

И используй её: 

Скрытый текст

local cond = math.round(condition, 2)

 

  • Спасибо 1

Здесь могла быть ваша реклама.

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

@mole venomous 

А зачем этот вот math.round? А просто в самой ф-ции format указать округление, что уже не работает?

string.format("pX = %.4f, pY = %.4f, pZ = %.4f....

  • Спасибо 1
  • Согласен 1
  • Смешно 1
Ссылка на комментарий
4 минуты назад, AndreySol сказал:

А зачем этот вот math.round

Использовать в дальнейшем, как любой другой math., string. и т.д. Вполне удобно.

  • Спасибо 1

Здесь могла быть ваша реклама.

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

Я прошу прощения заранее, если это обсуждалось где, пожалуйста не бейте  я честно пользовался поисковиком в данной теме по контрольным словам Борода; Артефакты на Заказ; b29
 

Скрытый текст

 

Здравствуйте. Давеча заинтересовался вопросом касательно квеста "Артефакты на заказ" от Бороды, что на Затоне.
До сегодняшнего дня единственным верным для меня этот квест существовал только если у меня есть в карманах подходящий арт. Но, т.к. решил перепройти сталкер и мб даже открыть для себя что новое. И решил я таки попытать счастье с этим квестом, хоть и не нравился он мне (не получалось найти нужный арт). 
Обнаружил некую закономерность, что должно пройти некоторое время после взятия квеста. Отметил, что выброс может в этом плане помочь, "обновляя" содержимое аномалии (это знаю лишь из собственных наблюдений + википедии, в файлах пока не находил).
Плюс, пару раз удавалось поймать сигнал группы, что либо ищет/либо уже нашла нужный арт.

Начал рыться по файлам.
В файле dialogs_zaton.script обнаружил много интересного - какие арты нужны для поиска (прямо не указано, но банальная сверка с википедией это подтвердила):

 

]]--
    [16] = "af_gravi",
    [17] = "af_eye",
    [18] = "af_baloon",
    [19] = "af_dummy_dummy",
    [20] = "af_gold_fish",
    [21] = "af_fire",
    [22] = "af_glass",
    [23] = "af_ice",
}


Какие "стволы" группы соперников примут в обмен на искомый арт:

 

function is_good_gun(npc, item)
    local section = item:section()
    local wpn_table = {
                        [1] = "wpn_sig550",
                        [2] = "wpn_g36",
                        [3] = "wpn_val",
                        [4] = "wpn_groza",
                        [5] = "wpn_vintorez",
                        [6] = "wpn_fn2000",
                        }

 

Стало понятно, что квест заставляет искомый арт появиться именно на Затоне:

local anomalies_names_tbl = {
                                ["gravi"] = {
                                            [1] = "zat_b14_anomal_zone",
                                            [2] = "zat_b55_anomal_zone",
                                            [3] = "zat_b44_anomal_zone_gravi",
                                            },
                                ["thermal"] = {
                                            [1] = "zat_b20_anomal_zone",
                                            [2] = "zat_b53_anomal_zone",
                                            [3] = "zaton_b56_anomal_zone",
                                            },
                                ["acid"] = {
                                            [1] = "zat_b39_anomal_zone",
                                            [2] = "zat_b101_anomal_zone",
                                            [3] = "zat_b44_anomal_zone_acid",
                                            },
                                ["electra"] = {
                                            [1] = "zat_b54_anomal_zone",
                                            [2] = "zat_b100_anomal_zone",
                                            },
                                }

 

Ну и название квеста:
-- Zaton B29, при поиске использовал:
zat_b29

 

Поиск по этому ключевому слову толком ничего в понимании не дал. Нашлась куча файлов, но ничерта не понял, кроме того, что групп - две, что есть некие таймеры поиска артефактов/простоя у этих групп, что группы - вроде как неубиваемы (другими неписями), не реагируют на стрельбу в них (со стороны других НПС).
Вопросы:
1)Есть ли закономерность в поиске артов? Т.е. взял квест, и сколько нужно ждать времени/выбросом для 100% нахождения нужного арта/как влияет количество часов/выбросов? Есть ли рандом в этих значениях (исходя из личного наблюдения, видимо, есть)?
1.1)Влияет ли выброс на этот квест и является ли он ключевым для него - то есть - стоит искать арт только после выброса, т.к. обновятся аномалии? (честно сказать, всё ещё в поиске файла, который опишет обновление аномалий на наличие артов);
2)Если есть, то какая закономерность появления групп на поиск? Я пробовал тупо спать чуть ли не каждый час в попытке выловить сигнал и направиться к ним, из многих таких попыток лишь дважды я не проспал.

 

 

  • Нравится 1
Ссылка на комментарий
4 часа назад, Firestarter сказал:

Какие "стволы" группы соперников примут в обмен на искомый арт:

А ты уверен, что у тебя "чистый" ЗП? 

  • Согласен 1
Ссылка на комментарий
12 минут назад, Space.Marine сказал:

А ты уверен, что у тебя "чистый" ЗП? 

Не понял, к чему вопрос? Да, чистый. 
В чистом ЗП можно успеть выловить группу сталкеров, что уже нашли арт и несут на базу, и предложить им обменяться на хороший ствол. Стволы перечислены в вашем цитировании.

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

Всем привет. Возможно ли вернуть совокупность иммунитетов к конкретному воздействию (броня + арты, но без того, что в actor.ltx)? OGSR. Или нужно всё "надетое" перебирать?

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

Здесь могла быть ваша реклама.

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

@mole venomous как можно вернуть то, чего никогда не было? Никогда в сталкере не было броня + арты. Сначала хит проходит через артефакты. Потом то, что осталось от хита, проходит через броню. Надеюсь понятно выразился.

  • Полезно 3
Ссылка на комментарий

@dsh мне не нужен хит. Нужны цифры. В целом, понятно, что остаётся перебирать и читать из конфига. 

Здесь могла быть ваша реклама.

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

@mole venomous какие цифры? Что за цифры? А то, как в анекдоте: "Приборы? 200. Что 200? А что приборы?". Хочешь получить нужный ответ, описывай ситуацию точно и подробно.

Ссылка на комментарий
3 минуты назад, dsh сказал:

какие цифры?

Надет костюм, у него текущий п-тр

telepatic_protection = a

Повешены арты, сумма их протекции

telepatic_protection = b

Итого у ГГ, благодаря этим вещам, протекция

a + b

Вопрос был в том, возможно ли вернуть число a + b на движке ОГСР. Если с костюмом всё прозрачно, то с артами на поясе остаётся только перебор?

Нужны цифры, указывающие ВСЮ защиту от конкретного воздействия от всех защитных итемов.

Здесь могла быть ваша реклама.

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

@mole venomous теперь кажется понятно. По костюму. У клиентского объекта есть метод get_outfit()

local outfit = db.actor:get_current_outfit():get_outfit()

То, что будет возвращено - это экспорти класса CCustomOutfit https://github.com/dsh2dsh/OGSR-Engine/blob/f34eae64c24957639a2e61ae5d2050bf2c04840e/ogsr_engine/xrGame/derived_client_classes.cpp#L313

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

function zero_outfit_protection( obj )
  local outfit = obj:get_outfit()
  for _, k in ipairs({   
    "burn_protection",
    "chemical_burn_protection",
    "fire_wound_protection",
    "explosion_protection",
    "radiation_protection",
    "shock_protection",
    "strike_protection",
    "telepatic_protection",
    "wound_protection",
  }) do
    outfit[ k ] = 0
  end
end

 

По поводу защиты от артефактов, не могу припомнить, что бы было что, возвращающее суммарную защиту по требуемым типам. Я для этого вот такой скрипт использую https://github.com/dsh2dsh/op2ogse/blob/master/gamedata/scripts/inventory.script

который ведет реестр объектов на поясе и можно быстро получить информацию типа

local burn_immunity = inventory.on_belt_hit_immunity( "burn_immunity" )
local health_restore_speed = inventory.on_belt_restore_speed( "health_restore_speed" )

и т.п.

 

Поискал быстренько в движке и не нашел ничего, что бы для пояса возвращало суммарные защиты. Т.ч. только своим скриптом.

 

Изменено пользователем dsh
  • Спасибо 1
  • Согласен 1
  • Полезно 1
Ссылка на комментарий
07.11.2021 в 16:01, Firestarter сказал:

сколько нужно ждать времени/выбросом

периодичность выбросов и начало первого выброса с начала новой игры регулируется в surge_manager.script. От взятого квеста на поиск артов периодичность выбросов, как и появление после них новых артов в аномалиях никак не зависит. Также появление артов в аномалиях после выбросов - рандомно. В скрипте (запамятовал уже в каком) можно указать процент вероятности появления в аномалиях артов после выбросов. 
Про обмен у групп сталкеров оружия на арты, если честно, слышу впервые, но, судя по скрипту, имеет место быть. Хотя, ИМХО, это совершенно бесполезная штука. Выгоднее просто продавать найденные арты Бороде. Также, с начала игры на Скадовске, мы ограничены детектором Медведь, который поможет нам найти малое кол-во артов из запрашиваемых Бородой. А с момента получения нами детектора помощнее (на Юпитере) пропадает смысл в торговле артами, так как ГГ уже почти миллионэр. Как-то так )

Изменено пользователем Space.Marine
  • Нравится 1
  • Согласен 1
Ссылка на комментарий
Только что, Space.Marine сказал:

Как-то так )

Ну, по порядку:

Скрытый текст

 

1)Если я правильно понял, то первый выброс, исходя из файла surge_manager.script, это:

local START_MIN_SURGE_TIME     = 2*60*60
local START_MAX_SURGE_TIME     = 4*60*60

т.е. это от двух до четырёх часов игрового времени? Судя по личному опыту - так и есть, первый выброс относительно быстро после старта случается. А вот уже в дальнейшем:

local MIN_SURGE_TIME         = 12*60*60
local MAX_SURGE_TIME         = 24*60*60

Что тоже верно, исходя из игры.
2)По поводу влияния взятого квеста на шанс появления того или иного арта, скорее всего, я ошибался. Чуть погуглив, по пути:
...\gamedata\configs\scripts\zaton\anomaly
можно обнаружить файлы аномалий, а в них:

[anomal_zone]
layers_count = 3
respawn_tries = 1
max_artefacts = 2
;applying_force_xz = 200
;applying_force_y = 400 
artefacts = af_medusa, af_cristall_flower, af_night_star, af_vyvert, af_gravi, af_gold_fish
start_artefact = af_night_star
coeff = 3, 3, 2, 2, 1, 1
artefact_ways = zat_b14_af_way, zat_b14_af_way_2, zat_b14_af_way_3
field_name = zat_b14_zone_field_radioactive_weak

Ну это как одна из аномалий, zaton_b14. 
Самое интересующее, это конечно же:

 

coeff = 3, 3, 2, 2, 1, 1

То есть это коэффициенты, которые соответствуют артефактам (6 коэф. = 6 артов), и чем выше число, тем выше шанс выпадения арта. 
Но хотелось бы большего понимания - что это цифры значат? Т.е. конкретика - сколько 3 в процентах (думал, что 30, но в каждом файле по-разному есть соотношение этих коэффициентов.)

3)Пока не нашёл файла влияния выбросов на появление артов. Перерою весь сталкер по ключевым словам, надеюсь, найду...и буду признателен вам, если вспомните/поищете этот скрипт.

4)про обмен у групп сталкеров оружия на арты, если честно, слышу впервые, но, судя по скрипту, имеет место быть. Хотя, ИМХО, это совершенно бесполезная штука
Отнюдь. Борода даёт максимальную цену за артефакты на заказ - от 18000 до 24000 рублей. Поэтому имеет смысл выловить вовремя группу соперников и толкнуть им хороший ствол (особенно на Затоне если такое провернуть). 
Также, с начала игры на Скадовске, мы ограничены детектором Медведь, который поможет нам найти малое кол-во артов из запрашиваемых Бородой
Всё несколько иначе. Медведь не позволяет найти ни одного артефакта, что заказывает Борода - нужен Велес. 
Велес можно получить, как минимум, тремя способами:
1)От Бороды в качестве награды за уничтожение логова кровососов - и это ближайший и быстрейший путь получения Велеса.
2)Если убивать группы сталкеров, что идут к Бороде с найденным артефактом (если убить две группы, Борода прекратит выдавать задания на поиск артов, так что надо быть поаккуратнее. Да и такое это дело...мочить сталкеров.)
3)Когда есть квест "Артефакт на заказ" от Бороды, группы соперников можно будет обнаружить в различных аномалиях (чаще в тех, где теоретически может появиться искомый арт). Как минимум у главаря будет Велес. И, если я правильно понял, за убийство таких сталкеров Борода ничего не скажет (не проверял). Да и такое это дело...мочить сталкеров.
(4)(возможно) Будет продавать Сыч после получения достижения "Состоятельный клиент". Точно не уверен, не понял влияния этой ачивки на шансы в торговле (там что-то связано с припиской scientific, и то ли это ачивка "Научный сотрудник" влияет, то ли выполнение квеста Сыча по доставке трёх Велесов учёным).

Поясню, зачем вообще весь этот сыр-бор учинил. Т.к. шанс найти редкий артефакт - низок, а очень хочется уже сразу иметь Золотую Рыбку, ведь я любитель мародёрить всё что плохо лежит, то я предположил, что это можно будет сделать через соперников. Взял у Бороды квест на арт, и стал ждать. Предварительно я сбегал на Сгоревший хутор (вроде так локация называется), где забрал ВСС Винторез, что является тайником (он же как раз "good_gun"). В этот раз как нельзя быстро артефакт был ими найден. В таком случае, задание обновляется, и можно успеть перехватить эту группу - будет на карте указано их местоположение, и даже будет видно их передвижение. И тут уже что хочешь делай - обменяйся, убей, можно даже выкупить (ну за Светляк они просили что-то около 39000 р, офигеть).
Артефакт я у них благополучно выменял, но не стал отдавать Бороде - самому нужнее, хороший реген. Вот только забавный баг произошёл - тот самый командир соперников зачем-то пришёл на баржу и постоянно там отсиживается в разных местах на корточках. Вроде бы, если отоспаться, то задание будет провалено и сталкер исчезнет, ну да и бог с ним. 

Таким образом можно на самом старте, если бы мне повезло, получить вожделенную рыбку. Но ничто не мешает вновь и вновь брать задания и просто ждать сталкеров. Хороших пушек, правда, раз-два и обчёлся, но! Их продажа принесёт куда меньше денег/пользы, чем деньги/польза от полученного арта. 

 

 

  • Полезно 1
Ссылка на комментарий

@Colder

Spoiler
[scripts\xr_motivator.script]		-- биндер NPC

function motivator_binder:hit_callback(…)
	if amount > 0
		проверить активный слот: 0 = нож

 

 

  • Спасибо 1
  • Согласен 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
22 часа назад, Colder сказал:

Возможно ли скриптово отследить удар ножом (ТЧ)

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

local wpn = db.actor:active_item()
if wpn and wpn:section()=="wpn_knife" then
*твои действия*
end


 

Вопрос касательно ТЧ. 
Есть у меня переменная, по умолчанию объявлена как 

local energia = 10

Есть предмет, использующий энергию - при каждом использовании тратится одна, то есть, без подзарядки у меня всего 10 использований. Но как только я делаю сейв-лоад, переменная снова становится равной 10, что даёт ещё 10 использований. Как "сохранить" текущее значение переменной? 
Спасибо

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

God save Hatsune Miku!

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

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

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

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

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

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

Войти

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

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

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