ColR_iT 171 Опубликовано 27 Декабря 2010 (изменено) TRAMP14 посмотри как реализован вывод на худ часов: http://www.amk-team.ru/forum/index.php?sho...st&p=219306 и сделай по аналогии. Byurrer, что именно ты хочешь сделать? Ты просишь помощи, но не говоришь сути, сложно понять тебя без экстрасенсорных способностей! Объясни хотя бы это есть идейка как реарганизовать под специальный приемник ...в чем заключается "специальность" твоего приемника? Изменено 27 Декабря 2010 пользователем Куфзук Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 28 Декабря 2010 (изменено) ВСЕХ с наступающим Новым Годом! :ny_smile: TRAMP14, вот смотри, приблизительно, код будет выглядеть вот так: local function counting_kits(item) if item:name() == "medkit" or item:name() == "medkit_army" or item:name() == "medkit_scientic" then number_of_kits = number_of_kits + 1 end end local number_of_kits = 0 function all_kits (actor, npc) actor:inventory_for_each(counting_kits) return number_of_kits end Вызывать нужно функцию all_kits. НО! Если вешать на апдейт для актора, то это не гуд! Считай каждый вызов апдейта, а это где-то каждые 40 мс, будет происходить подсчет аптечек в его инвентаре. Лично я стараюся без КРАЙНЕЙ надобности его не нагружать. Но решать тебе! P.S. Код набросал на работе, поэтому если что не так, пусть меня поправят. 1. Функция all_kits, считает колличество аптечек в инвентаре у актора (сумма будет общей, т.е. обычные+армейские+научные). Как это происходит: Локальная функция counting_kits получает в качестве параметра, объект возвращаемый функцией inventory_for_each (это стандартная функция ПЫСов). Переменная number_of_kits будет хранить в себе то самое колличество аптечек. Функция inventory_for_each перебирает все предметы в инвентаре, кроме тех, что находяться в невидимых слотах (нож, бинокль, болт, фонарик и ПДА). Про эту функцию можешь почитать сдесь: Описание класса game_object. В качестве параметра ей будет передаваться локальная функия counting_kits. Т.е. когда ты вызовишь функцию all_kits, начнет работать функция inventory_for_each, перебирая в инвенторе все предметы. Когда она найдет первый предмет, она передаст его в качестве параметра функции counting_kits. Она же, в свою очередь, будет сравнивать имя этого предмета с именем одной из аптечек, если это аптечка, то переменная number_of_kits увеличиться на один. И так далее, пока не переберуться все предметы. В итоге у тебя будет возвращено общее колличество аптечек. 2. Таймер нужно где-то запустить! Если ты хочешь выводить колличество аптечек на худ, то тебе нужно вешать на апдейт. Изменено 28 Декабря 2010 пользователем Куфзук Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 28 Декабря 2010 (изменено) _Призрак_, так я что, я ничего! Просто на сколько я понял TRAMP14 он хочет выводить колличество имеющихся аптечек в инвенторе на худ. Если функцию повесить на дроп, юзание и на загрузку игрыинформация порой будет выводиться ложная. Хотя лично Я, обыграл бы этот момет твоим способом. TRAMP14, в инструкции вывода часов на худ, присутствует вот такая строка: msg = string.format(" %02d:%02d\n", time_h, time_m) Вместо того, что в скобках напиши переменную number_of_kits. Т.е. функция должна выглядеть function show_time() local hud = get_hud() local cs = hud:GetCustomStatic("hud_show_time") if cs == nil then hud:AddCustomStatic("hud_time_static", true) hud:AddCustomStatic("hud_show_time", true) cs = hud:GetCustomStatic("hud_show_time") end local number_of_kits = all_kits (db.actor) msg = string.format(number_of_kits) if cs ~= nil then cs:wnd():SetText(msg) end end Нужно передать в эту функцию number_of_kits, а не просто прописать!!! Если ошибся, пусть меня поправят! Изменено 28 Декабря 2010 пользователем Куфзук Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 28 Декабря 2010 (изменено) TRAMP14, нет! В одном файле размести три функции: counting_kits, all_kits и show_time. В апдейте нужно вызывать show_time, как в инструкции "выводим часы на худ". Только имеет смысл переименовать функцию show_time, например в show_all_kits. ВАЖНО! Я не проверял работоспособность! Приду домой проверю и отпишусь в ЛС. ОЧЕНЬ ВАЖНО! Не стоит останавливаться на достигнутом! TRAMP14, выучить луа ты сможешь! Но важно панять и функции которые использует STALKER, начни отсюда: Справочник по функциям и классам Изменено 28 Декабря 2010 пользователем Куфзук Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 29 Декабря 2010 (изменено) Всем доброго утра! И разумеется с наступающим Новым Годом! В начале страницы шла речь о том, чтобы вывести на худ колличество аптечек. Так вот собственно эта реализация: Скрипт подсчета - мой, а вот вывод пришлось позаимствовать у steelrat, Выводим часы на HUD Итак! В папке scripts создаем файл ваше_название_скрипта.script и вписываем в него следующие строки: local function counting_kits(item) local section = item:section() if section == "medkit" or section == "medkit_army" or section == "medkit_scientic" then number_of_kits = number_of_kits + 1 end end function all_kits () number_of_kits = 0 db.actor:inventory_for_each(counting_kits) return number_of_kits end function output_kits_to_hud() local hud = get_hud() local cs = hud:GetCustomStatic("hud_show_time") if cs == nil then hud:AddCustomStatic("hud_time_static", true) hud:AddCustomStatic("hud_show_time", true) cs = hud:GetCustomStatic("hud_show_time") end msg = string.format("%s", all_kits()) if cs ~= nil then cs:wnd():SetText(msg) end end После, в файл ui_custom_msgs.xml в папке config/ui/ дописываем следующее: <hud_time_static x="852" y="17" width="156" height="52"> <text complex_mode="0" x="65" y="0" font="letterica16" r="255" g="255" b="255" a="130">st_pda_total</text> <texture>ui_hud_frame_clock</texture> </hud_time_static> <hud_show_time x="862" y="38" width="156" height="52"> <text x="0" y="0" font="graffiti19" r="255" g="255" b="255" a="140" align="c"/> </hud_show_time> Затем в файл bind_stalker.script дописываем после function actor_binder:update(delta) object_binder.update(self, delta) строку ваше_название_скрипта.output_kits_to_hud() ЗАМЕЧАНИЕ! Принцип вывода на худ не мой, а steelrata. Описание алгоритма есть парой постами выше. Выводить на худ можно количество чего угодно лежащего в инвенторе. В строке if section == "medkit" or section == "medkit_army" or section == "medkit_scientic" then вместо аптечек вписываем нужную секцию. Выражаю свою благодарнось malandrinus, за помощь в отладке скрипта. Изменено 29 Декабря 2010 пользователем Куфзук Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 29 Декабря 2010 TRAMP14, почитай тему. Вылет происходит из-за не правильного! написании логики. Перепроверь. Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 29 Декабря 2010 (изменено) ZeeK, вот как это сделано у АМК: local points={ { position={x=-24.2727108001709,y=-12.1660995483398,z=-100.200202941895}, gv=0, lv=73868 }, { position={x=159.56,y=4.72,z=88.60}, gv=155, lv=463808 }, { position={x=-4.11,y=2.90,z=108.09}, gv=85, lv=272619 } } function spawn_star(actor,npc,p1,p2) local a = points[math.random(table.getn(points))] local obj = alife():create("amk_af_night_star", vector():set(a.position.x,a.position.y,a.position.z), a.lv, a.gv) if (obj) then if is_debug==true then add_spot_on_map(obj.id, "red_location", "art") end end local m_where if news_main then m_where = news_main.get_point_description("l01_escape", vector():set(a.position.x,a.position.y,a.position.z)) else m_where = "Здесь, на Кордоне" end db.actor:give_talk_message(m_where.." скорее всего поискать стоит. Где-то там он, точно говорю.", "ui\\ui_iconstotal", Frect():set(0,0,10,10), "simple_answer_item") end Добавлено через 48 мин.: znachara, что ты делаешь? Ни в одном из оригиналов STALKERa, ни в одном модов который у меня имеется, текстура inv_fon, не используется! :ny_huh: Добавлено через 59 мин.: TRAMP14, у меня код работает, могу видюшку снять. Делал на полностью пустых локациях от KostyaV. Изменено 29 Декабря 2010 пользователем Куфзук Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 3 Января 2011 speczadanie, те детекторы которые были сделаны ПЫСами реализованы через движок. Все, что я нашел поиском по ключевому слову "detector", это схему на определение опасной границы уровня, плюс некие мелочи, по поводу звуков и тому бодобного. Поэтому, юзай то, что тебе предложил Garry_Galler. Или объясни подробнее, что тебе нужно. Возможно тепе не предется реализовывать целую схему, а лишь нужно будет воспользоваться парой функциями. Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 5 Января 2011 @"StreloK", могу предположить, что это не есть ошибка, а лишь непонятный косяк вызваный вот этим: p0:links = p1(0) напиши вместо этого так:p0:links = p1(1) и я уверен на 99% что у НПС появится дар "ходить". Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 9 Января 2011 TRAMP14, по поводу функции, у тебя и правда не совсем все правильно. Самый главный вопрос - откуда у тебя obj? _Призрак_ сказал верно, у тебя при использовании подобной функции будет ругань: attempt to index local 'obj' (a nil value) Так что тебе нужно либо в скрипте определить что такое этот obj, либо передоть его в эту функцию как параметр: function item(obj) Ребята действительно правы, не доконца понятно, для чего тебе эта функция нужна? Если просто синтаксически исправить тебе функцию, то вот: function item(obj) local obj = obj:section() if obj == "medkit" then alife():create("medkit", db.actor():position(), db.actor:level_vertex_id, db.actor:game_vertex_id(), db.actor:id()) end end но в таком случае тебе нужно передать в функцию параметр obj. Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 11 Января 2011 Якут, вот тебе скриншот всех сидячих анимаций на стуле в ЗП: Находятся они в файле stalker_smart_cover_animation.omf Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 16 Января 2011 ФеНиКс, сделать можно! Синхронизировать сложно, хотя... И что тебе не понятно по точкам путей? Вот давай разберемся! [mil_freedom_sniper_defense_look3] points = p0,p1,p2 здесь пишем все точки, которые будут у нас в нашем пути, т.е. здесь три p0:name = wp00 первая точка пути. wp00 - это имя пути. Здесь можно задавать флаги, такие как: a - анимация передвижения в эту точку, p - вероятность остановиться в этой точке, sig - установить сигнал по прибытию в точку p0:flags = 0x1 p0:position = -20.9435977935791,-9.3701057434082,-42.9284133911133 p0:game_vertex_id = 1592 p0:level_vertex_id = 286124 p0:links = p1(1) следующая точка пути p1:name = wp01 p1:flags = 0x1 p1:position = -13.237771987915,-8.33596229553223,-11.7740716934204 p1:game_vertex_id = 1593 p1:level_vertex_id = 293730 p1:links = p2(1) p2:name = wp02 p2:flags = 0x1 p2:position = -1.6784291267395,-8.71416282653809,-7.24800872802734 p2:game_vertex_id = 1585 p2:level_vertex_id = 306093 Точки нужно задавать заранее в all.spawn, динамически, на сколько мне известно - нельзя. Про flags точно не знаю, поэтому сказать не могу, абы не запутать. Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 16 Января 2011 Disord, глянь, вот тут про смарттерейны не только с чем, но и как их жевать >>Click Me<< там пять частей, но почитать стоит. Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 19 Января 2011 (изменено) mma, ты знаешь, если БТР должен был появиться на склоне, то вероятно он ПОД ним. Попробуй заспавнить его на ровной поверхности и припиши к координате Z (средняя) плюс пять метров, на всякий случай. Изменено 19 Января 2011 пользователем Куфзук Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 23 Января 2011 (изменено) AKKK1, а без помощи функций АМК можно продемонстрировать? Уж очень было бы полезным... // Из ф-ий АМК там используется только разбор нет-пакета непися. Эта штука достаточна "объемная", лучше самому в скриптах АМК посмотреть. Министр. Изменено 23 Января 2011 пользователем Министр Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 25 Января 2011 antreg, в чистом 1004 этого нет. Но есть мод который реализует такую возможность Схема "Компаньоны". Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 31 Января 2011 antreg, да не надо там не какого апдейта. AKKK1, между прочем, очень дельную вещь подсказал, лично я возму ее на заметку. Спасибо! Припиши объекту, с которым ты хочешь говорить, логику которую он предложил. Еденственный нюанс - этот предмет, должен быть заспавнен! Конечно, если ты хочешь поговорить с забором, к примеру, это будет проблематично! Но и это можно обыграть! Взгляни на объекты, которые находятся по этому адресу meshes\physics\equipment_cache. Эти объекты невидимы. Выбери подходящий и пробуй! Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 2 Февраля 2011 @"StreloK", а попробуй сделать так: Mob_camp Механика: 1. Сидит на позиции, смотрит в точку 2. Можно задать несколько позиций и время смены позиции. 3. Перемещается между позициями бегом 4. При виде врага переходит под универсальную схему (комбат/паника и т.д) 5. Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции 6. Если враг уходит далеко - монстр возвращается на позицию Использование: [logic] active = mob_camp [mob_camp] path_look = way_look path_home = way_home time_change_point = 30000 home_min_radius = 20 home_max_radius = 50 skip_transfer_enemy – если прописать в кастом дату, то монстр не будет принимать врага от друших монстров, если его увидит (для этого нужно всех монстров в разные group разнести) Описание параметров: path_home - путь, состоящий из точек, в которых будет находиться монстр path_look - путь, состоящий из точек, в которые будет смотреть монстр time_change_point - время изменения текущей camp-точки (по-умолчанию10000), мс home_min_radius - минимальный радиус от врага до camp-точки (по-умолчанию 30), м home_max_radius - максимальный радиус от врага до camp-точки (по-умолчанию 40), м Особенности: Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше home_min_radius - атакуем врага, пока враг не исчезнет или дистанция не будет больше home_max_radius. Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага. Выбор текущей позиции производится случайным образом Индексы точек пути для path_home и path_look должны совпадать (т.е. монстр сидит во второй точке path_home и смотрит во вторую точку path_look) Единственным необходимым параметром является path_look Если не установлен path_home, в качестве кемперской точки учитывается позиция и нода объекта на спауне. Для того чтобы монстр смотрел в разные точки на кемпер-позиции, path_look может состоять из нескольких точек. Обязательные требования: home_min_radius < home_max_radius Количество точек путей path_look и path_home должно быть равным P.S. Mob_Camp можно использовать как альтернативу к монстрам под рестрикторами Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 11 Февраля 2011 (изменено) Да-да! И меня тоже интересует вопрос antreg! Я уже задал подобный в теме "Ковыряемся в файлах", там мне сказали, что !возможно! они отслеживаються движково, для ограничения/разрешения. Лично по рестрикторам в кострах, абсолютно ничего не нашел. Единственное оправдание наличия "пустых" рестрикторов, я нашел на Wiki: >>Click Me<< Там, в условиях переключения схем от одной к другой есть такие строки: on_actor_in_zone = restrictor_name | scheme – если актер в зоне, (указывается имя рестриктора), т.е. выходит, что для такого случая логика для рестриктора не нужна!? А для костров, могу предположить, что они нужны, чтобы НПС не лезли в них, чего-то типа денжер зон. Удаление zone_flame_small удалит у тебя огонь как явление, т.е. партикл, а lights_hanging_lamp - свет вокруго него. По всей видимости взаимодействие между этими объектами происходит, непосредственно, при помощи движка. Изменено 11 Февраля 2011 пользователем Куфзук Поделиться этим сообщением Ссылка на сообщение
ColR_iT 171 Опубликовано 14 Февраля 2011 TRAMP14, object:section() и obj:section() одно и тоже! Что значит правильно? Что ты хочешь сделать? Поделиться этим сообщением Ссылка на сообщение