Капрал Хикс 564 Опубликовано 2 Декабря 2017 В 28.11.2017 в 09:47, DaSTi002 сказал: Можно ли значки кровотечения, голода и т.д. из Теней Чернобыля заменить на Зов Припятские? Можно, редактируй текстуру, где эти значки все расположены. В 28.11.2017 в 13:41, Dennis_Chikin сказал: Нет, в сталкере нет возможности изменять содержимое графический файлов при помощи скриптов. Полагаю, парень имел в виду заменить значки изначально, а не динамически прям во время игры менять одни на другие. 1 Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 24 Февраля 2018 Боевка в основном движковая. Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 20 Июля 2018 (изменено) В 18.07.2018 в 21:37, _Sk8_AsTeR_ сказал: что-то испортил в скриптах игры и теперь спальный мешок работает не правильно. Я чот нажала и всё исчезло © В 18.07.2018 в 21:37, _Sk8_AsTeR_ сказал: Помогите пожалуйста Ну вот как мы должны узнать, что у тебя там понаверчено, телепатическим путём? В 18.07.2018 в 21:37, _Sk8_AsTeR_ сказал: Какие файлы трогать? Очевидно те, что ты правил. Отсортируй их по дате изменения в папке и смотри. И вообще закусывать бэкапы делать надо. Изменено 20 Июля 2018 пользователем Капрал Хикс 1 3 Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 13 Января 2019 Кто-нибудь совмещал мод на умное выпадение частей монстров (отстреливаешь кабану ногу, выпадает копыта вместо 4) с модом "мясник" (отрезание частей монстров только при наличии ножа в инвентаре)? Хотелось бы где рабочий вариант подсмотреть, сам уже пытался смотать всё синей изолентой и писал тут, но увы... Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 13 Января 2019 1 час назад, Dennis_Chikin сказал: Возврат взятой запчасти обратно Прости, не понял, о чём ты. Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 13 Января 2019 Хм, я вот о чём. В ОП-2.1 строка функция спавна конечности монстра по факту юзания его с тушки с ножом local monster_part=ini_reader.iniReader():readString(monster:section(),"Spawn_Inventory_Item_Section","") - учитывает кол-во его запчастей на момент его смерти? Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 13 Января 2019 (изменено) Ну, ОП для примера. Отрезание частей монстров ножом есть в ButcherMod_ShoC, но... Скрытый текст -- Срезание трофеев с монстров / Идея: мод "Мясник" (CoP) от Singapur22 function generic_object_binder:use_callback(obj, who) if self.use_flag == nil and self.object:section()~="m_trader" then self.object:set_nonscript_usable(false) self.use_flag = true end if self.object:alive() or self.used then return end local knife = who:item_in_slot(0) if who:id() ~= db.actor:id() or (knife~=nil and who:active_slot() == 0) then self.used = true else if knife then news_manager.send_tip(db.actor,"Чтобы cрезать трофей, нужно достать нож.") end return end self.item = read_if_exist("s",nil,self.object:section(),"Spawn_Inventory_Item_Section",nil) if self.item then self.item_count = read_if_exist("f",nil,self.object:section(),"Spawn_Inventory_Item_Amount",1) else return end for i=1, self.item_count do alife():create(self.item, who:position(), who:level_vertex_id(), who:game_vertex_id(), who:id()) end self.object:set_tip_text("") local h = hit() h.draftsman = self.object h.type = hit.fire_wound h.direction = vector():set(0,1,0) h:bone(read_if_exist("s",nil,self.object:section(),"bone_impuls_abscission","bip01_spine")) h.power = 1 h.impulse = (read_if_exist("f",nil,self.object:section(),"impuls_abscission",150)) self.object:hit(h) local sound_use = sound_object("material\\dead-body\\collide\\hithard0"..tostring(math.random(1, 6)).."hl") sound_use:play_at_pos(self.object, self.object:position(), sound_object.s3d) end Спавнится одна запчасть при юзании тушки монстра, а мне нужно количество запчастей подтягивать из другого скрипта, где оно задаётся в зависимости от стрельбы по конечностям. Вкратце: Скрытый текст function main_check(obj, amount, local_direction, who, bone_index) local sc = obj:section() if tD[sc] then local section = tD[sc] for k,v in pairs (m_Tbl[section].bones) do if bone_index == v then if (m_Tbl[section].data == "boar_leg_count" or m_Tbl[section].data == "snork_leg_count" or m_Tbl[section].data == "burer_handy_count" or m_Tbl[section].data == "zombie_handy_count" or m_Tbl[section].data == "handy_kontroler_count" or m_Tbl[section].data == "himera_kogot_count") and m_Tbl[section].param > 0 then m_Tbl[section].param = m_Tbl[section].param - 1 else m_Tbl[section].param = 0 end break end end end end function spawn_parts(obj) local sc = obj:section() if tD[sc] then local section = tD[sc] if m_Tbl[section].param > 0 then if m_Tbl[section].param > 1 then for i=1, m_Tbl[section].param do amk.spawn_item_in_inv(m_Tbl[section].item,obj) end else amk.spawn_item_in_inv(m_Tbl[section].item,obj) end end m_Tbl[section].param = m_Tbl[section].default_param end end И вот как это сделать правильно, я не знаю. Изменено 13 Января 2019 пользователем Капрал Хикс Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 13 Января 2019 3 часа назад, Dennis_Chikin сказал: То есть, надо просто количество брать не из конфига, а из где-то сохраненного при убиении. Именно про это я и спрашивал - КАК. 3 часа назад, Dennis_Chikin сказал: спавн запчастей при смерти монстра, но их возвращение обратно в тушу при взятии без ножа. Извини, я по-прежнему не догоняю. Я ни в коей мере не прошу сделать за меня готовый скрипт, но - извини, я не понимаю тебя. 3 часа назад, Dennis_Chikin сказал: Хоть бы и в pstor монстра. Не использую, не умею. Ладно, дабы не устраивать чат, посты под снос. Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 16 Января 2019 HellRatz, дружище. Умное выпадение частей мутантов я под себя уже подогнал, но там нет фишки в виде срезания этих самых частей с помощью ножа, что я поверх умного выпадения и пытаюсь прикрутить. Я ж вроде понятно описал, в чём мне знаний не хватает :). Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 16 Января 2019 3 часа назад, Comador сказал: аддон для НС от Monnoroch Спасибо. Нашёл, глянул реализацию - насколько я понял, там есть умное выпадение, но фишка в том, что запчасти спавнятся в тушку мутанта в момент его смерти только при наличии в инвентаре ГГ ножа. Обыск же тушки производится обычным способом - это не то, что мне нужно. Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 17 Января 2019 3 часа назад, Dennis_Chikin сказал: Не хочет. Денис, ну, во-первых, не “не хочу”, а “не умею”, о чём я чётко и честно написал выше. Я понимаю, что тебе решение этой задачи видится простым, ясным и сразу, но извини, не все обладают такими познаниями в написании скриптового кода. Мои скромные скиллы пока не дотягивают до решения таких задач, потому и обратился за помощью. А до: 3 часа назад, Dennis_Chikin сказал: db.storage[mob:id()].pstor.mparts = n Я б в жизни не додумался В каких модах и скриптовых сборках можно наглядно посмотреть практическое использование метода записи в pstor монстра и чтения из него? Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 17 Января 2019 Проблема в том, что функция спавна запчасти из smart_monster_part срабатывает в момент смерти монстра, и думаю вызывать её в момент обыска трупа будет некорректно. Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 17 Января 2019 Попробовал всё по рецепту... Надпись "Срезать трофей" появляется, но тушка обыскивается и с ножом и без ножа в руках и даже с ножом выкинутым (стоит такая возможность). Запчасти вроде спавнятся. Копаю дальше. Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 4 Мая 2019 21 час назад, Norman Eisenherz сказал: от мифического Сяка С чего это "мифический" вдруг? Вполне реальный человек. Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 18 Июня 2019 Никто часом не пробовал создать детектор оружия для предметов находящихся в онлайне на локации? Навесить и удалить метки нетрудно, интересует функция определения объектов в онлайне. Чтобы, скажем, по классам пистолета, автомата, снайперки и так далее отображать соответствующую иконку. Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 18 Июня 2019 55 минут назад, dsh сказал: Вот тебе похоже туда же нужно. Эх, мудрёно там Однако я вспомнил, что нужное мне разбиение по классам оружия есть в скрипте динамических новостей от AMK - осталось прикрутить должным образом Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 19 Июня 2019 (изменено) Неверно я выразился, некорректно... Нужно отображение оружия на текущей локации. Я так понимаю, удобней всего вешать проверку на соответствие предметов классу оружия в xr_motivator.script и вызывать функцию отображения меток отсюда (подсмотрено в DMX мод для меток НПС): Скрытый текст function motivator_binder:net_spawn(sobject): local obj = alife():object(self.object:id()).w_story_id if obj then myscript.mark_wpn() end а удалять метки при уходе с локации здесь function motivator_binder:net_destroy()... local obj = alife():object(self.object:id()) and alife():object(self.object:id()).w_story_id if obj then myscript.unmark_wpn(sid,self.object:id()) end В самом же файле myscript... Скрытый текст -Здесь задаём соответствие секции оружия определённому типу, чтобы не мучиться с классами оружия local weapons_id = { ["base_id"] = 0, ["wpn_pm"] = 1, ["wpn_pb"] = 1, ["wpn_fort"] = 1, ["wpn_svd"] = 2, ["wpn_gauss"] = 2, ["wpn_val"] = 3, ["wpn_ak74"] = 3, ["wpn_lr300"] = 3, ["wpn_toz34"] = 4, ["wpn_spas12"] = 4, ["wpn_pkm"] = 5, ["wpn_knife"] = 6, ["wpn_grenade_launcher"] = 7, ["wpn_rpg7"] = 7, ["wpn_rg6"] = 7, ["grenade_f1"] = 7, ["wpn_flame"] = 8 } -здесь задаём тип метки в зависимости от типа оружия local mark_types = { [0] = {mark = "NOT_USED"}, [1] = {mark = "mark_1_pistol"}, [2] = {mark = "mark_2_sniper"}, [3] = {mark = "mark_3_assault"}, [4] = {mark = "mark_4_shotgun"}, [5] = {mark = "mark_5_heavy"}, [6] = {mark = "mark_6_knife"}, [7] = {mark = "mark_7_grenade"}, [8] = {mark = "mark_8_flame"} } function get_weapon_type(obj) --isweapon (проверка на то, что объект является оружием из _g.script) if(obj and isWeapon(obj)) then if weapons_id[id] then return weapons_id[id] else return weapons_id["base_id"] end end -собственно функция отображения меток function mark_wpn(id) local obj = alife():object(self.id) local wp_type = get_weapon_type(obj) if wp_type = 1 then level.map_add_object_spot(id, "mark_types[wp_type].mark", "Пистолет или ПП") -- Пистолеты и ПП elseif wp_type = 2 then level.map_add_object_spot(id, "mark_types[wp_type].mark", "Винтовка") -- Снайперские винтовки elseif wp_type = 3 then level.map_add_object_spot(id, "mark_types[wp_type].mark", "Автомат") -- Автоматы end end end function _mylog(message) get_console():execute("!!!ERROR!!!~~~"..message) end --ну и добавить функцию удаления меток... P.S. Я знаю, что приведённый код имени д-ра Франкенштейна из кусков других кодов работать не будет, так как в силу недостатка знаний указал неверные аргументы и так далее, но надеюсь, более-менее внятно объяснил, чего хочу добиться в итоге с помощью более сведущих в программировании людей. Изменено 19 Июня 2019 пользователем Капрал Хикс Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 20 Июня 2019 (изменено) Откуда функцию вызывать, теперь ясно, спасибо! Саму функцию переделал, но нужна помощь, ибо застопорился под конец. Скрытый текст --Здесь задаём соответствие секции оружия определённому типу, чтобы не мучиться с классами оружия local weapons_id = { ["base_id"] = 0, ["wpn_pm"] = 1, ["wpn_pb"] = 1, ["wpn_fort"] = 1, ["wpn_svd"] = 2, ["wpn_gauss"] = 2, ["wpn_val"] = 3, ["wpn_ak74"] = 3, ["wpn_lr300"] = 3, ["wpn_toz34"] = 4, ["wpn_spas12"] = 4, ["wpn_pkm"] = 5, ["wpn_knife"] = 6, ["wpn_grenade_launcher"] = 7, ["wpn_rpg7"] = 7, ["wpn_rg6"] = 7, ["grenade_f1"] = 7, ["wpn_flame"] = 8 } --расстояние, ближе которого отображаются метки оружия local dist_to_wpn = 31 --здесь задаём тип метки в зависимости от типа оружия local mark_types = { [0] = {mark = "NOT_USED"}, [1] = {mark = "mark_1_pistol"}, [2] = {mark = "mark_2_sniper"}, [3] = {mark = "mark_3_assault"}, [4] = {mark = "mark_4_shotgun"}, [5] = {mark = "mark_5_heavy"}, [6] = {mark = "mark_6_knife"}, [7] = {mark = "mark_7_grenade"}, [8] = {mark = "mark_8_flame"} } function get_weapon_type(weapon) if weapon then local id = news_main.get_weapon_name(weapon) if id == nil or id == "" then _mylog("id==nil") return end if weapons_id[id] then return weapons_id[id] else return weapons_id["base_id"] end else return weapons_id["base_id"] end end --собственно функция отображения меток function mark() for a=1,65535,1 do --подобный перебор при переходе в онлайн это чересчур, но для теста сойдёт local obj = alife():object(a) if obj then local posobj = obj.position local actorpos = db.actor:position() local wp_type = get_weapon_type(weapon) if posobj:distance_to(actorpos) < dist_to_wpn then --а вот дальше нужна помощь с корректным навешиванием меток и окончанием функции без ошибок if wp_type = 1 then level.map_add_object_spot(id, "mark_types[wp_type].mark", "Пистолет или ПП") -- Пистолеты и ПП end elseif wp_type = 2 then level.map_add_object_spot(id, "mark_types[wp_type].mark", "Винтовка") -- Снайперские винтовки end elseif wp_type = 3 then level.map_add_object_spot(id, "mark_types[wp_type].mark", "Автомат") -- Автоматы end end function _mylog(message) get_console():execute("!!!ERROR!!!~~~"..message) end Изменено 20 Июня 2019 пользователем Капрал Хикс Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 23 Июня 2019 В 21.06.2019 в 03:47, naxac сказал: то можно написать такой небольшой биндер Попробовал... Поймал вылет: Скрытый текст FATAL ERROR [error]Expression : error handler is invoked! [error]Function : invalid_parameter_handler [error]File : E:\stalker\sources\trunk\xrCore\xrDebugNew.cpp [error]Line : 804 [error]Description : stack trace: Справочник вылетов говорит о том, что... Данный вылет бывает когда у какого либо из объектов установлено некорректное значение (читал, сам не получал его) Или же если данный вылет происходит при вызове класса, то проблема в том что в методе __init() класса прописано super() Оно так и есть в скрипте... function mark_binder:__init(obj) super(obj) end Хм. Что теперь? Поделиться этим сообщением Ссылка на сообщение
Капрал Хикс 564 Опубликовано 24 Июня 2019 (изменено) Благодарствую! Скрипт работает и даже слишком хорошо. В общем, заспавненные мною на землю тестовые Абаканы исправно отображаются метками на карте. Однако при подборе в инвентарь метка вешается и на ГГ и, кроме того, одна метка остаётся висеть на пустом месте (но там, возможно, автомат провалился под землю, ещё проверю). Наверное, стоит прописать исключения для оружия в инвентаре ГГ и у неписей, однако надо ещё придумать, как сделать это. Изменено 24 Июня 2019 пользователем Капрал Хикс Поделиться этим сообщением Ссылка на сообщение