Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 16 Мая 2014 Это популярное сообщение. Поделиться Опубликовано 16 Мая 2014 Ковыряемся в файлах ТЧ Прежде чем писать в тему - внимательно читаем первый пост, и пользуемся поиском. Возможно, ответ на Ваш вопрос уже есть. Касательно телепатии: если Вы передаете Ваши файлы телепатическим путем - ответы будут передаваться тоже телепатически. Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком. 4 8 6 12 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Outfater 288 Опубликовано 7 Января 2015 Поделиться Опубликовано 7 Января 2015 Подскажите как прописать оружию два прицела и более? Через запятую (как патроны) не получается: scope_name = wpn_addon_scope2, wpn_addon_scope3 по отдельности цепляются. Спасибо. Ссылка на комментарий
BFG 7 582 Опубликовано 8 Января 2015 Поделиться Опубликовано 8 Января 2015 (изменено) Подскажите как прописать оружию два прицела и более? Никак не прописать. И даже если и существует какой то гипотетический, скриптерско-движковый способ, то самое главное это сделать мировую и худовую модель ствола с каждым прицелом по отдельности, который ты хочешь потом видеть в игре. Изменено 8 Января 2015 пользователем BFG 1 "Кругом зомби.....у меня кончаются патроны...." Ссылка на комментарий
qvvxvvq 111 Опубликовано 8 Января 2015 Поделиться Опубликовано 8 Января 2015 (изменено) Ребята, подскажите в каком файле можно изменить звуки от костра, или как называется этот файл OGG?Для этого надо сначала знать, что за костер. А затем воспользоваться поиском по файлам, и найти соответствующий ltx. Обычно - config\misc\zone_что-то_там.ltxdc Изменено 8 Января 2015 пользователем Dennis_Chikin Ссылка на комментарий
AndrewMor 527 Опубликовано 9 Января 2015 Поделиться Опубликовано 9 Января 2015 (изменено) Подскажите, кто знает, как при заходе на локацию подсчитать количество находящихся в онлайне зверей, желательно по видам. Ну к примеру, сколько гуляет плотей. Или кабанов. С чего начать-то надо? Вызывать функцию подсчета надо, я так понимаю, из "function actor_binder:net_spawn(data)". А дальше с чего начинать? Сам принцип хотя бы объясните.В момент захода на локацию онлайновых зверей там нет. Вообще. Появляются через какое-то время после actor_binder:net_spawn(), в зависимости от условий. То есть, тебе надо явно что-то другое. dc Изменено 9 Января 2015 пользователем Dennis_Chikin Сталкер - наше всё! Ссылка на комментарий
Призрачный 125 Опубликовано 9 Января 2015 Поделиться Опубликовано 9 Января 2015 (изменено) Здравствуйте, как сделать, чтобы НПСов после диалога засосало в гулаг?Например: сталкеров засосало в гулаг зомбированных на Янтаре. Очевидно, создать гулаг, и прописать в его работах предикаты, по которым подходят только нужные сталкеры после нужного момента. Как прописывать работы в гулагах со всеми условиями - в двух словах не описывается. Читаем первый пост, читаем вики. dc Изменено 9 Января 2015 пользователем Dennis_Chikin Ссылка на комментарий
AndrewMor 527 Опубликовано 9 Января 2015 Поделиться Опубликовано 9 Января 2015 (изменено) dc, я наверно неправильно выразился. Мне нужно узнать, сколько на данной локации живых (не трупов), скажем, плотей. Заспавнено, причем неважно, скриптом или через all.spawn. Или сие в момент захода невозможно узнать в принципе? Или, если на то пошло, сколько тех же плотей находится под гулагами на данной локации? Изменено 9 Января 2015 пользователем AndrewMor Сталкер - наше всё! Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 9 Января 2015 Поделиться Опубликовано 9 Января 2015 Либо добавлять свое в se_monster.script (отслеживает всех существующих монстров), и проверять их живость/нахождение на нужной локации, либо что-то типа function init() lname = level.name() cur_map = lids[lname] sim = alife() gg = game_graph() local obj, cls_id, obj_name, obj_t, sect, gvid, lvid, map, pid, parent, ini, t, tt for k, v in pairs( xl_types ) do obj_by_type[k] = {} end log( "log", "init, lv: %s (%s)", lname, tostring( cur_map ) ) for i = 1, 65534 do obj = sim:object( i ) if obj then cls_id = obj:clsid() sect = obj:section_name() if bad_clsid[cls_id] or bad_sect[sect] then log( "warning", "bad item: %s", obj:name() ) cls_id = false -- пометка глючных объектов на удаление else -- продолжаем чистить глючные объекты pid = obj.parent_id -- заодно узнаем владельца... if pid == 65535 then -- и локу, если ничейный gvid = obj.m_game_vertex_id if gg:valid_vertex_id( gvid ) then map = gg:vertex( gvid ):level_id() lvid = obj.m_level_vertex_id if lvid < 4294967296 and vids[map][3] < lvid then log( "error", "invalid level vertex, level %s, obj: %s", sim:level_name( map ) or "none", obj:name() ) ini = obj:spawn_ini() if ini then if ini:section_exist( "logic" ) then log( "info", "logic present, keep" ) else cls_id = false end else log( "info", "no spawn_ini, keep" ) end end else log( "error", "invalid game vertex, obj: %s, delete", obj:name() ) cls_id = false end parent = false else map = false -- если есть владелец, то пофиг на карту parent = pid and sim:object( pid ) if parent and parent.name then parent = parent:name() else parent = false end end end if cls_id then -- если валидный obj_t = cls_xl[cls_id] -- и нужный, то раскладываем по таблицам obj_name = obj:name() if obj_t == "anoms" and obj_by_name[obj_name] then t = obj_by_name[obj_name] log( "error", "duplicate object: %s (type: %s), id: %s, level: %s, parent: %s (vs. id: %s (type: %s), level: %s, parent: %s )", obj_name, obj_t or "?", i, map or "?", parent or "none", t.id, t.type, t.map or "?", t.parent or "none" ) sim:release( obj, true ) elseif obj_t and obj_by_type[obj_t] then t = { ["map"] = map, ["id"] = i, ["type"] = obj_t, ["sect"] = sect, ["obj"] = obj, ["name"] = obj_name, ["parent"] = parent } obj_by_name[obj_name] = t obj_by_id[i] = t if parent then tt = obj_by_parent[pid] if tt then tt[i] = t else obj_by_parent[pid] = { [i] = t } end else obj_by_type[obj_t][i] = t end else -- ищем амк-респавнеры ini = obj:spawn_ini() s = ini and ini:section_exist( "respawn" ) and ini:line_exist( "respawn", "amk_name" ) and ini:r_string( "respawn", "amk_name" ) if s then respawners[s] = obj end end else log( "info", "delete" ); sim:release( obj, true ) -- удаляем глючные объекты end end end for k, v in pairs( vids ) do wpn_by_map[k] = {} t = { ["npc_dead"] = {}, ["mob_dead"] = {} } for k, v in pairs( xl_types ) do t[k] = {} end obj_by_map[k] = t end local p t = obj_by_type.wpn_prot for k, v in pairs( obj_by_type.firearm ) do -- бесхозные стволы проверяем на близость к неписям p = ( t_wprm or get_wprm() ).prot or prot_name[ v.name ] or v.obj.m_story_id ~= 4294967296 if p then v.prot = p; t[k] = v -- защищенные стволы храним отдельно -- log( "info", "init, wpn: %s, prot: %s", v.name, tostring( p ) ) elseif v.map ~= curr_map then -- остальные раскладываем по картам wpn_by_map[ v.map ][k] = v end end clr_dead_mob() clr_dead_npc() -- при уборке хлама удаляются сначала трупы, потом стволы t = {} local n, c = 0, 0 local prm for k, v in pairs( wpn_by_map ) do -- готовим стволы на удаление for kk, vv in pairs( v ) do if vv.keep then -- стволы рядом с кем-то считаем c = c + 1 obj_by_map[ vv.map ].firearm = vv else -- лежащие далеко от неписей - на удаление prm = t_wprm[ vv.sect ] or get_wprm( vv.sect ) vv.r = prm.cost * get_wpn_cond( vv.obj ) n = n + 1; t[n] = vv end end end if lim_wpn < c then lim_wpn = 0 else lim_wpn = lim_wpn - c end if lim_wpn < n then -- оставляем для подбирания неписями или ГГ table_sort( t, function( a, b ) return a.r < b.r end ) for i = 1, lim_wpn do tt = t[i]; obj_by_map[ tt.map ].firearm = tt end end for i = lim_wpn + 1, n do -- удаляем свыше лимита obj = t[i].obj sim:release( obj, true ) obj_by_id[ obj.id ] = nil end for k, v in pairs( obj_by_type.npc ) do obj_by_map[ v.map ].npc[k] = v end for k, v in pairs( obj_by_type.npc_dead ) do obj_by_map[ v.map ].npc_dead[k] = v end for k, v in pairs( obj_by_type.mob ) do obj_by_map[ v.map ].mob[k] = v end for k, v in pairs( obj_by_type.mob_dead ) do obj_by_map[ v.map ].mob_dead[k] = v end fake_trade( obj_by_type.npc ) amk_spawners() return true end - это из уборщика кусок. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
AndrewMor 527 Опубликовано 9 Января 2015 Поделиться Опубликовано 9 Января 2015 (изменено) Ну хорошо. И все же я так не въехал, как определить принадлежность монстра к конкретной локации. По вертексам? gvid = obj.m_game_vertex_idif gg:valid_vertex_id( gvid ) then map = gg:vertex( gvid ):level_id() dc Изменено 9 Января 2015 пользователем Dennis_Chikin Сталкер - наше всё! Ссылка на комментарий
AndrewMor 527 Опубликовано 9 Января 2015 Поделиться Опубликовано 9 Января 2015 Вот еще такой вопрос: есть смарт для мобов, есть сами мобы. Все заспавнены через all.spawn. Все они приписаны к гулагу и сидят под логикой mob_home. Собственно вопрос: если часть мобов грохнуть, в гулаге ведь появятся свободные работы? И если скриптом заспавнить других мобов, пойдут они на работу или нет? Ведь логики-то у них нету, как таковой. Можно ли им скриптом прописать логику и определить в нужный гулаг? Сталкер - наше всё! Ссылка на комментарий
Struck 61 Опубликовано 9 Января 2015 Поделиться Опубликовано 9 Января 2015 (изменено) @AndrewMor, да, можно, у меня на такой системе скриптовые гулаги живут. Динамический контроль населения, если можно так сказать. upd: @Anonim, монстрам писать логику в конфиге - перебор. Изменено 9 Января 2015 пользователем Struck Ссылка на комментарий
Anonim 680 Опубликовано 9 Января 2015 Поделиться Опубликовано 9 Января 2015 (изменено) @AndrewMor, В конфиге своих симуляционных персонажей допиши им логику. Или делай по АМК через нет-пакеты. Изменено 9 Января 2015 пользователем Anonim Ссылка на комментарий
AndrewMor 527 Опубликовано 9 Января 2015 Поделиться Опубликовано 9 Января 2015 @AndrewMor, да, можно, у меня на такой системе скриптовые гулаги живут. Динамический контроль населения, если можно так сказать. Поделись примером, если нетрудно. Просто монстры спавнятся обычным способом (alife():create....). Как им скриптом логику прикрутить? Какие через олл.спавн спавнены - там никаких проблем не возникает, но они одноразовые. Грохнешь - и гулаг пустеет. @AndrewMor, В конфиге своих симуляционных персонажей допиши им логику. Или делай по АМК через нет-пакеты. Я пытаюсь сделать скриптовый респавн взамен убитых монстров. И чтобы вновь заспавненные скриптом на своих местах сидели. Будь у вновь заспавненого конфиг - я бы не спрашивал. Сталкер - наше всё! Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 9 Января 2015 Поделиться Опубликовано 9 Января 2015 local t = read_monster_params( obj ) t.custom = "[logic]\ncfg = scripts\\что-попало.ltx write_monster_params( t, obj ) функции взять из amk 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
ed_rez 16 109 Опубликовано 9 Января 2015 Поделиться Опубликовано 9 Января 2015 PlayMod, если пути не изменены от чистого ТЧ, то звук костров лежит в папке: \sounds\ambient и файлы самого звука называются: fire1-... Ссылка на комментарий
UnLoaded 313 Опубликовано 10 Января 2015 Поделиться Опубликовано 10 Января 2015 Грохнешь - и гулаг пустеет.Ну так для этого у ПЫСов вроде респавнеры предусмотрены? Просто монстры спавнятся обычным способом (alife():create....). Как им скриптом логику прикрутить?А может подумать в общем над вопросом: кто должен рулить распределением мобов по гулагам ? Наверное не мобы должны индивидуальной логикой работы занимать в гулагах, а гулаги назначать подходящих мобов на свободные\освободившиеся работы. А пополнением убыли мобов как раз должны заниматься респавнеры.Но в общем - на вкус и цвет... 1 Ссылка на комментарий
AndrewMor 527 Опубликовано 10 Января 2015 Поделиться Опубликовано 10 Января 2015 local t = read_monster_params( obj ) t.custom = "[logic]\ncfg = scripts\\что-попало.ltx write_monster_params( t, obj ) функции взять из amk Спасибо, буду пробовать. Ну так для этого у ПЫСов вроде респавнеры предусмотрены? Правильно, предусмотрены. Я пробовал через респавнеры (правда давно), но чего-то не вышло. Че-нибудь не так делал. Правда я неписей респавнить пытался. Вопрос вдогонку: а можно ли отследить ситуацию, когда актор открывает тайник (нажав F), и еще когда открыто окно торговли? Может поршень какой отслеживать надобно? Нужно, чтобы определенные предметы нельзя было положить в тайник или продать. Сталкер - наше всё! Ссылка на комментарий
Struck 61 Опубликовано 10 Января 2015 Поделиться Опубликовано 10 Января 2015 (изменено) @AndrewMor, тайник - 'ui_car_body'; торговля - 'ui_trade'. Запрет на перемещение в тайник корректно сделать не получится, в ТЧ нет нормальных методов работы с тайником (по-этому на станадартном патче придется все делать через актора, но сделать можно, и вполне не трудно (у меня на такой системе объемы тайников работают, все никак руки не дойдут переписать)). В ЧН например есть метод получения количества предметов в тайнике. На ТЧ такое только с движковыми правками имеется. upd: @UnLoaded, рассматривать "квестовость" предмета для этих целей имеет смысл только при возможности изменить этот параметр (чтоб было красиво), а это выйдет только на ХЕ и 7 движке, но на этих платформах уже просто масса вполне нормальных вариантов реализации этой задачи. При чем тут таблица предметов в _g я искренне не понял. Изменено 10 Января 2015 пользователем Struck Ссылка на комментарий
UnLoaded 313 Опубликовано 10 Января 2015 Поделиться Опубликовано 10 Января 2015 В файле info_portions.xml все "системные" инфо-порции, включая обыск нычек(ui_car_body\ui_car_body_hide) и торговли(ui_trade\ui_trade_hide). Нужно, чтобы определенные предметы нельзя было положить в тайник или продать.Для этого стоит смотреть в сторону файла quest_items.ltx и секции quest_section в _g.script. А чтоб не торговался предмет - прописать ;NO TRADE везде, где нужно. Ссылка на комментарий
NL-Vincenz 12 Опубликовано 10 Января 2015 Поделиться Опубликовано 10 Января 2015 Подскажите sid Петрухи в оригинале ТЧ? Ссылка на комментарий
naxac 2 445 Опубликовано 10 Января 2015 Поделиться Опубликовано 10 Января 2015 @NL-Vincenz, 9. 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти