AndreySol 215 Опубликовано 1 Ноября 2021 Поделиться Опубликовано 1 Ноября 2021 @Pir@t@s В начале uni_random_spawn объявить переменную: local cse_obj -- она будет хранить спец. объект класса для создаваемых предметов Затем изменить строки создания предметов: cse_obj = alife():create(item, pos, lv_id, gv_id, id) Далее, в конце ф-ции uni_random_spawn добавить установку метки, к примеру ставим метку на серверный объект: level.map_add_object_spot_ser(cse_obj.id, type, text) Описание аргументов ф-ции уст. метки смотрим в Справочнике по ф-циям и классам. 1 1 1 Ссылка на комментарий
I am Dead 891 Опубликовано 1 Ноября 2021 Поделиться Опубликовано 1 Ноября 2021 @Pir@t@s Скрытый текст function uni_random_spawn(items, tbl, kol) local lv_id, gv_id, obj, item, ms, kol2 local kol1 = 1 local id = 65535 local pos = vector() if type(tbl) == 'table' then ms = math.random(#tbl) end if type(tbl) == 'table' and type(tbl[ms]) == 'table' then pos.x = tbl[ms][1] pos.y = tbl[ms][2] pos.z = tbl[ms][3] lv_id = tbl[ms][4] gv_id = tbl[ms][5] else if type(tbl) == 'table' and type(tbl[ms]) == 'number' then ms = tbl[ms] obj = level_object_by_sid (ms) elseif type(tbl) == 'table' and type(tbl[ms]) == 'string' or type(tbl) == 'string' then obj = db.actor elseif type(tbl) == 'number' then obj = level_object_by_sid (tbl) end pos = obj:position() lv_id = obj:level_vertex_id() gv_id = obj:game_vertex_id() id = obj:id() end if kol == nil then kol = 1 end for s=1, kol do if type(items) == 'table' then item = math.random(#items) if type(items[item]) == 'number' then item = item - 1 end if type(items[item+1]) == 'number' then kol1 = items[item+1] end item = items[item] else item = items end for i=1, kol1 do if type(item) == 'table' then for k, v in ipairs(item) do if type(item[k+1]) == 'number' then kol2 = item[k+1] else kol2 = 1 end if type(item[k]) ~= 'number' then for j=1, kol2 do local obj = alife():create(v, pos, lv_id, gv_id, id) add_spot_on_map(obj.id, "red_location", "Твой текст") end end end else local obj = alife():create(item, pos, lv_id, gv_id, id) add_spot_on_map(obj.id, "red_location", "Твой текст") end end end end function add_spot_on_map(obj_id,type,text) --+ --возможные типы type смотри в ui\map_spots.xml if obj_id then if text==nil then text=" " end -- Ставим метку на серверный объект чтобы её не пришлось обновлять level.map_add_object_spot_ser(obj_id, type, text) end end 1 Ссылка на комментарий
Colder 12 Опубликовано 3 Ноября 2021 Поделиться Опубликовано 3 Ноября 2021 Может кто подсказать, почему сообщение приходит из секции патронов а не так как в text(имя) ? Скрытый текст function on_weapon_ammo(wpn) local active_item = db.actor:item_in_slot(db.actor:active_slot()) if active_item then local ammo_type = ca_get_weapon_ammo_type( alife():object(wpn:id())) local section_ammo = ca_ammo_by_num(wpn:section(),ammo_type) if section_ammo~=nil and string.find(section_ammo,"ammo") then get_hud():AddCustomStatic("text2", true):wnd():SetText("%c[cyan]"..gts("st_ammo_string_0_1").."\\n".."%c[default]"..gts(section_ammo)) end end end Ссылка на комментарий
naxac 2 372 Опубликовано 3 Ноября 2021 Поделиться Опубликовано 3 Ноября 2021 @Colder , потому что имя - это параметр inv_name в секции. Т.е. должно быть gts(system_ini():r_string(section_ammo, "inv_name")) 1 1 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Colder 12 Опубликовано 3 Ноября 2021 Поделиться Опубликовано 3 Ноября 2021 И еще вопрос. Можно как-то исправить длинющий вывод 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 Ссылка на комментарий
I am Dead 891 Опубликовано 3 Ноября 2021 Поделиться Опубликовано 3 Ноября 2021 @Colder А что именно длюнющее? Ссылка на комментарий
mole venomous 2 959 Опубликовано 3 Ноября 2021 Поделиться Опубликовано 3 Ноября 2021 @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 Здесь могла быть ваша реклама. Ссылка на комментарий
AndreySol 215 Опубликовано 3 Ноября 2021 Поделиться Опубликовано 3 Ноября 2021 @mole venomous А зачем этот вот math.round? А просто в самой ф-ции format указать округление, что уже не работает? string.format("pX = %.4f, pY = %.4f, pZ = %.4f.... 1 1 1 Ссылка на комментарий
mole venomous 2 959 Опубликовано 3 Ноября 2021 Поделиться Опубликовано 3 Ноября 2021 4 минуты назад, AndreySol сказал: А зачем этот вот math.round Использовать в дальнейшем, как любой другой math., string. и т.д. Вполне удобно. 1 Здесь могла быть ваша реклама. Ссылка на комментарий
Firestarter 3 Опубликовано 7 Ноября 2021 Поделиться Опубликовано 7 Ноября 2021 Я прошу прощения заранее, если это обсуждалось где, пожалуйста не бейте я честно пользовался поисковиком в данной теме по контрольным словам Борода; Артефакты на Заказ; 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 Ссылка на комментарий
Space.Marine 454 Опубликовано 7 Ноября 2021 Поделиться Опубликовано 7 Ноября 2021 4 часа назад, Firestarter сказал: Какие "стволы" группы соперников примут в обмен на искомый арт: А ты уверен, что у тебя "чистый" ЗП? 1 Ссылка на комментарий
Firestarter 3 Опубликовано 7 Ноября 2021 Поделиться Опубликовано 7 Ноября 2021 12 минут назад, Space.Marine сказал: А ты уверен, что у тебя "чистый" ЗП? Не понял, к чему вопрос? Да, чистый. В чистом ЗП можно успеть выловить группу сталкеров, что уже нашли арт и несут на базу, и предложить им обменяться на хороший ствол. Стволы перечислены в вашем цитировании. Ссылка на комментарий
mole venomous 2 959 Опубликовано 8 Ноября 2021 Поделиться Опубликовано 8 Ноября 2021 (изменено) Всем привет. Возможно ли вернуть совокупность иммунитетов к конкретному воздействию (броня + арты, но без того, что в actor.ltx)? OGSR. Или нужно всё "надетое" перебирать? Изменено 8 Ноября 2021 пользователем mole venomous Здесь могла быть ваша реклама. Ссылка на комментарий
dsh 3 820 Опубликовано 8 Ноября 2021 Поделиться Опубликовано 8 Ноября 2021 @mole venomous как можно вернуть то, чего никогда не было? Никогда в сталкере не было броня + арты. Сначала хит проходит через артефакты. Потом то, что осталось от хита, проходит через броню. Надеюсь понятно выразился. 3 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
mole venomous 2 959 Опубликовано 8 Ноября 2021 Поделиться Опубликовано 8 Ноября 2021 @dsh мне не нужен хит. Нужны цифры. В целом, понятно, что остаётся перебирать и читать из конфига. Здесь могла быть ваша реклама. Ссылка на комментарий
dsh 3 820 Опубликовано 8 Ноября 2021 Поделиться Опубликовано 8 Ноября 2021 @mole venomous какие цифры? Что за цифры? А то, как в анекдоте: "Приборы? 200. Что 200? А что приборы?". Хочешь получить нужный ответ, описывай ситуацию точно и подробно. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
mole venomous 2 959 Опубликовано 8 Ноября 2021 Поделиться Опубликовано 8 Ноября 2021 3 минуты назад, dsh сказал: какие цифры? Надет костюм, у него текущий п-тр telepatic_protection = a Повешены арты, сумма их протекции telepatic_protection = b Итого у ГГ, благодаря этим вещам, протекция a + b Вопрос был в том, возможно ли вернуть число a + b на движке ОГСР. Если с костюмом всё прозрачно, то с артами на поясе остаётся только перебор? Нужны цифры, указывающие ВСЮ защиту от конкретного воздействия от всех защитных итемов. Здесь могла быть ваша реклама. Ссылка на комментарий
dsh 3 820 Опубликовано 8 Ноября 2021 Поделиться Опубликовано 8 Ноября 2021 (изменено) @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" ) и т.п. Поискал быстренько в движке и не нашел ничего, что бы для пояса возвращало суммарные защиты. Т.ч. только своим скриптом. Изменено 8 Ноября 2021 пользователем dsh 1 1 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Colder 12 Опубликовано 9 Ноября 2021 Поделиться Опубликовано 9 Ноября 2021 Возможно ли скриптово отследить удар ножом (ТЧ) Ссылка на комментарий
Space.Marine 454 Опубликовано 9 Ноября 2021 Поделиться Опубликовано 9 Ноября 2021 (изменено) 07.11.2021 в 16:01, Firestarter сказал: сколько нужно ждать времени/выбросом периодичность выбросов и начало первого выброса с начала новой игры регулируется в surge_manager.script. От взятого квеста на поиск артов периодичность выбросов, как и появление после них новых артов в аномалиях никак не зависит. Также появление артов в аномалиях после выбросов - рандомно. В скрипте (запамятовал уже в каком) можно указать процент вероятности появления в аномалиях артов после выбросов. Про обмен у групп сталкеров оружия на арты, если честно, слышу впервые, но, судя по скрипту, имеет место быть. Хотя, ИМХО, это совершенно бесполезная штука. Выгоднее просто продавать найденные арты Бороде. Также, с начала игры на Скадовске, мы ограничены детектором Медведь, который поможет нам найти малое кол-во артов из запрашиваемых Бородой. А с момента получения нами детектора помощнее (на Юпитере) пропадает смысл в торговле артами, так как ГГ уже почти миллионэр. Как-то так ) Изменено 9 Ноября 2021 пользователем Space.Marine 1 1 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти