Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 16 Мая 2014 Это популярное сообщение. Поделиться Опубликовано 16 Мая 2014 Ковыряемся в файлах ТЧ Прежде чем писать в тему - внимательно читаем первый пост, и пользуемся поиском. Возможно, ответ на Ваш вопрос уже есть. Касательно телепатии: если Вы передаете Ваши файлы телепатическим путем - ответы будут передаваться тоже телепатически. Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком. 4 8 6 12 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Kirag 39 Опубликовано 13 Мая 2010 Поделиться Опубликовано 13 Мая 2010 elfog Простой alife():create тут не спасет, надо в нет-пакете в момент спавна поковыряться. Например вот так: (взято из старой темы давным-давно, автора к сожалению не помню, не со всеми аномалиями работает 100% корректно, но с какими именно - тоже не помню) function an_spawn(anom_name,plosh,position,level_vertex_id,game_vertex_id,powers_a,time_d angeros) local con = get_console() local obj = alife():create(anom_name,position,level_vertex_id,game_vertex_id) local pac = net_packet() obj:STATE_Write(pac) local game_vertex_id = pac:r_u16() local distance = pac:r_float() local direction = pac:r_u32() local level_vertex_id = pac:r_u32() local object_flags = pac:r_s32() local custom_data = pac:r_stringZ() local story_id = pac:r_s32() local spawn_story_id = pac:r_s32() local shape_count = pac:r_u8() for i=1,shape_count do local shape_type = pac:r_u8() if shape_type == 0 then local center = pac:r_vec3() local plosh = pac:r_float() else local box = pac:r_matrix() end end local restrikror_type = pac:r_u8() local powers = pac:r_float() local owner_id = pac:r_s32() local on_off_mode_enabled_time = pac:r_u32() local on_off_mode_disabled_time = pac:r_u32() local on_off_mode_shift_time = pac:r_u32() local offline_interactive_radius = pac:r_float() local artefact_spawn_places_count = pac:r_u16() local artefact_position_offset = pac:r_s32() local last_spawn_time_present = pac:r_u8() if pac:r_elapsed()~= 0 then -- abort("left=%d",pac:r_elapsed()) end pac:w_begin(game_vertex_id) pac:w_float(distance) pac:w_u32(direction) pac:w_u32(level_vertex_id) pac:w_u32(object_flags) pac:w_stringZ(custom_data) pac:w_s32(story_id) pac:w_s32(spawn_story_id) pac:w_u8(1) pac:w_u8(0) local sphere_center = vector() sphere_center:set(0,0,0) pac:w_vec3(sphere_center) pac:w_float(plosh) pac:w_u8(restrikror_type) if powers_a ~= nil then powers = powers_a end pac:w_float(powers) if time_dangeros == nil then owner_id = bit_not(0) else owner_id = time_dangeros end pac:w_u32(owner_id) pac:w_u32(on_off_mode_enabled_time) pac:w_u32(on_off_mode_disabled_time) pac:w_u32(on_off_mode_shift_time) pac:w_float(offline_interactive_radius) pac:w_u16(artefact_spawn_places_count) pac:w_u32(artefact_position_offset) pac:w_u8(last_spawn_time_present) pac:r_seek(0) obj:STATE_Read(pac,pac:w_tell()) return obj end Ирбис Содержимое ящиков, из которых выпадает стабильно одно и то же, зашито в алл.спавне, в секциях самих этих ящиков. Нестабильные ящики редактируются в config\misc\ph_box_....ltx (4 файла, аналогичные death_....ltx), но подробно не вникал. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
crezyhohol 0 Опубликовано 14 Мая 2010 Поделиться Опубликовано 14 Мая 2010 (изменено) Братья Сталкеры!!! Уж простите что задаю сей вопрос не проситав всю тему (может подобный вопрос уже был), но просто на работе нет возможности прочитать её всю. Вопрос: Каким образом неписям можно присвоить свои имена? Тоисть, насколько я понимаю в файлах character_desc_.....xml прописаны сами неписи, а вот где находяться их имена и как их можно заменить на свои? Если можно отпишитесь в личку, или дайте ссылку где этот вопрос обсуждался. Буду примного благодарен за подробную инструкцию!!! Изменено 14 Мая 2010 пользователем crezyhohol Ссылка на комментарий
AK-103 15 Опубликовано 14 Мая 2010 Поделиться Опубликовано 14 Мая 2010 (изменено) crezyhohol, лучше менять имена только для тех сталкеров, которые спавнятся в одном экземпляре. Описания есть в папке /config/text/rus. Там как для не уникальных есть специальный генератор имен (большое количество сталкеров имеют однотипный конфиг). Поэтому если ты не хочешь иметь кучу "Васек Резаных" лучше создать отдельного персонажа (см. статью добавление сталкера в игру), в т.ч. скриптом и дескрипшне уже пишешь его уникальное имя. Изменено 14 Мая 2010 пользователем AK-103 Intel Centrino Mobile (Dual-core) T2700 2,328 GHz, Intel GMA 945GM, 2x1024 MB DDR2-667, WD Scorpio 1200BEVS Microsoft Windows 7 Professional N + Novell Linux 11.2 (OpenSUSE) Dual boot S.T.A.L.K.E.R. SHOC 1.0004 + AMK 1.4.1 + NS3 + NLC3 + Arsenal + Arsenal beta +New weapons Опытный американский дробовик XM1014 =O Хозяйке на заметку: Не спешите выбрасывать чеку от использованной гранаты Ф-1 или РГД-5 - с её помощью можно легко и удобно прикрепить игрушечного пингвинчика к своему рюкзаку. © not me Ссылка на комментарий
elfog 0 Опубликовано 14 Мая 2010 Поделиться Опубликовано 14 Мая 2010 (изменено) Вот наконец-то руки дошли -- инициализация class "spawner" (CUIScriptWnd) -- инициализируем элементы интерфейса и каллбаки function spawner:__init(owner) super() self.owner = owner self:InitControls() self:InitCallBacks() end function spawner:__finalize() end function spawner:InitControls() self:SetWndRect (Frect():set(0,0,1000,1000)) -- файл-описатель наших элементов local xml = CScriptXmlInit() xml:ParseFile("ui_anomalii_menu.xml") -- видео на заднем плане xml:InitStatic("back_video", self) -- рамка xml:InitStatic("background", self) -- кнопки self:Register(xml:Init3tButton("btn_zone_mincer_weak", self),"btn_zone_mincer_weak") ------------------------------------------------------------------------------------ -- кнопка выхода self:Register(xml:Init3tButton("btn_quit", self),"btn_quit") ----------------------------------------------------------------------------------------------------- xml:InitStatic("Info", self) end function spawner:InitCallBacks() self:AddCallback("btn_zone_mincer_weak", ui_events.BUTTON_CLICKED, self.spawn_zone_mincer_weak, self) self:AddCallback("btn_quit", ui_events.BUTTON_CLICKED, self.on_quit, self) ----------------------------------- self:AddCallback("btn_back", ui_events.BUTTON_CLICKED, self.on_back, self) ------------------ end -- сразу создадим ф-ию для выхода function spawner:on_quit() -- убираем наше окно, показываем предыдущее (или возвращаемся в игру) local console = get_console() self:GetHolder():start_stop_menu (self.owner, true) self:GetHolder():start_stop_menu (self,true) self.owner:Show (true) -- скрытие главного меню только если запущена игра if self:check_game() then console:execute("main_menu off") end end -- spawn_item - необходимый предмет -- dist - радиус появления (случайно) function spawner:spawn_item(spawn_item, dist) -- спавним только в игре if self:check_game() then -- self:on_quit() local pos = db.actor:position() local dir = db.actor:direction() pos = pos:add(dir:mul(dist)) alife():create(spawn_item, pos, 1, db.actor:game_vertex_id()) end end function spawner:spawn_item_inv(spawn_item) -- спавним только в игре if self:check_game() then -- self:on_quit() alife():create (spawn_item, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end end function spawner:check_game() -- возвращает true если запущена игра local check = false if level.present() and (db.actor ~= nil) and db.actor:alive() then check = true end return check end function spawner:spawn_zone_mincer_weak() self:spawn_item("zone_mincer_weak", 3) end ---------------------Back------------------ function spawner:on_back() -- если еще ни разу не вызывали, то обозначим наш новый скрипт if self.ui_spawnerdlg == nil then self.ui_spawner_dlg = ui_spawner.spawner() self.ui_spawner_dlg.owner = self end -- останавливаем родительский элемент, запускаем свой, но родителя показываем. self:GetHolder():start_stop_menu(self.ui_spawner_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end Что здесь не так? Kirag, если честно нифига не понял, то есть не хочется полностью переделывать логику спавна, так как умею работать только с этой. Изменено 14 Мая 2010 пользователем elfog morda. cod4 player Ссылка на комментарий
Darien 0 Опубликовано 15 Мая 2010 Поделиться Опубликовано 15 Мая 2010 elfog Как уже было сказано, спавнить через create аномалию без правки пакетов нельзя. Спавни через функцию, которую выложил Kirag, с передачей параметров. Если непонятно, что передавать, то поясню - anom_name - название аномалии plosh - радиус аномалии position - позиция по x y z, передавать вот так - vector():set(x, y, z) level_vertex_id - левел вертекс game_vertex_id - гейм вертекс powers_a - мощность аномалии time_dangeros - это передавать необязательно, пользы от него я не заметил. Вот пример такого вызова: anoms.an_spawn("zone_witches_galantine", 4, vector():set(100, -20, 50) , 16437, 16, 1) Собсно, тоже самое я писал в теме КоП на предпоследней странице. Ссылка на комментарий
elfog 0 Опубликовано 15 Мая 2010 Поделиться Опубликовано 15 Мая 2010 Я спавню через спавн меню, которое вызывается походу игры через F1. Мне надо чтобы аномалия спавнилась в нескольких метрах от ГГ. Значит position не подходит - аномалия будет спавнится каждый раз в одном и том-же месте. За радиус появления предмета (аномалии), наверное отвечают эти строки -- spawn_item - необходимый предмет -- dist - радиус появления (случайно) function spawner:spawn_item(spawn_item, dist) -- спавним только в игре if self:check_game() then -- self:on_quit() local pos = db.actor:position() local dir = db.actor:direction() pos = pos:add(dir:mul(dist)) alife():create(spawn_item, pos, 1, db.actor:game_vertex_id()) end end function spawner:spawn_item_inv(spawn_item) -- спавним только в игре if self:check_game() then -- self:on_quit() alife():create (spawn_item, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end end function spawner:check_game() -- возвращает true если запущена игра local check = false if level.present() and (db.actor ~= nil) and db.actor:alive() then check = true end return check end И ссылку на теорию по вертексам можно? morda. cod4 player Ссылка на комментарий
shooting unicorn 0 Опубликовано 15 Мая 2010 Поделиться Опубликовано 15 Мая 2010 Сталкеры, подскажите, пожалуйста, как сделать так, чтобы после каждого выброса в определенных мною местах, спаунилось определенное колличество каких-нибудь монстров? Ссылка на комментарий
Kirag 39 Опубликовано 15 Мая 2010 Поделиться Опубликовано 15 Мая 2010 elfog Ну, приступим. Не знаю, что за спавн-мод у тебя стоит, но не важно, работаем с тем, что есть Ты создал функцию function spawner:spawn_zone_mincer_weak() self:spawn_item("zone_mincer_weak", 3) end запускающуюся при нажатии на кнопку. Допустим, до этого момента все правильно - с меню у меня хуже, чем преотвратно, проверить не могу. Обрати внимание, что параметры спавна - секция объекта и расстояние перед носом актора, на котором появится объект - задаются прямо здесь. Вот здесь же и зададим все остальные нужные аномалии параметры. Первым делом убираем из нее строку self:spawn_item("zone_mincer_weak", 3) - спавнить будем другой функцией: an_spawn(anom_name,plosh,position,level_vertex_id,game_vertex_id,powers_a,time_d angeros) Пойдем по пунктам: anom_name - секция аномалии, в данном случае "zone_mincer_weak" plosh - радиус аномалии - поставь метра 4, больше не стоит, меньше бессмысленно - "карусель" толком не сработает. position - ты хочешь спавнить в N метрах перед носом. Значит, position = vector():mad(db.actor:position(),db.actor:direction(),N) Само собой, ставить N меньше радиуса аномалии неразумно. level_vertex_id - левел вертекс. Ставим от актора: level_vertex_id = db.actor:level_vertex_id() game_vertex_id - гейм вертекс. Ставим от актора: game_vertex_id = db.actor:game_vertex_id() powers_a - сила аномалии. Для гарантированного летального исхода (как по описанию) ставь 500. time_dangeros - хрен его знает, зачем оно. Ставь nil и не заморачивайся. Теперь собираем все вместе, и заодно проверяем, что игра запущена: function spawner:spawn_zone_mincer_weak() if self:check_game() then local anom_name = "zone_mincer_weak" local plosh = 4 local distance = plosh + 4 -- расстояние до границы аномалии local position = vector():mad(db.actor:position(),db.actor:direction(),distance) local level_vertex_id = db.actor:level_vertex_id() local game_vertex_id = db.actor:game_vertex_id() local powers_a = 500 an_spawn(anom_name,plosh,position,level_vertex_id,game_vertex_id,powers_a,time_danger os) end end И в самом конце файла впиши функцию спавна, что я давал. Должно заработать. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
Darien 0 Опубликовано 16 Мая 2010 Поделиться Опубликовано 16 Мая 2010 (изменено) Kirag Небольшая поправочка. Аномалии zone_mincer_weak в ЗП нету. Я проверил все файлы аномалии, вот такая табличка существующих у меня вышла: local zones_mine = { "zone_mine_acidic", -- зелёный пар с кислотой "zone_buzz", -- тоже кислота "zone_mine_electric", -- электра, только видно хуже (как в 'Железном лесу') "zone_witches_galantine", -- электра из тч "zone_mine_gravitational_strong", -- ну тут понятно "zone_mine_thermal", -- жарка "zone_zharka_static" -- тоже самое } Также есть ещё и поля (4 вида), не атакуют, но придают эффект при приближении. Vano_Santuri Всё это конечно хорошо, только смысла от этих weak, average и strong в этом случае нету. Ведь сила аномалии и радиус и так указываются скриптом. Тфу блин, тема то по ТЧ. Kirag извиняюсь за ложную поправку. Изменено 16 Мая 2010 пользователем Darien Ссылка на комментарий
Vano_Santuri 33 Опубликовано 16 Мая 2010 Поделиться Опубликовано 16 Мая 2010 Может мою табличку посмотришь? local anomalies = {"zone_mine_acidic_weak","zone_mine_acidic_average","zone_mine_acidic_strong", "zone_mine_acidic_big","zone_mine_chemical_weak","zone_mine_chemical_average","zone_mine_chemical_strong", "zone_buzz_weak","zone_buzz_average","zone_buzz_strong","zone_mine_electric_weak","zone_mine_electric_average", "zone_mine_electric_strong","zone_witches_galantine_weak","zone_witches_galantine_average","zone_witches_galantine_strong", "zone_mine_gravitational_average","zone_mine_gravitational_weak","zone_mine_gravitational_big","zone_gravi_zone", "zone_mine_thermal_weak","zone_mine_thermal_average","zone_mine_thermal_strong","zone_mine_steam_weak", "zone_mine_steam_average","zone_mine_steam_strong","zone_zharka_static_weak","zone_zharka_static_average", "zone_zharka_static_strong"} Ну как? Что-то кончается, что-то начинается... Ссылка на комментарий
elfog 0 Опубликовано 16 Мая 2010 Поделиться Опубликовано 16 Мая 2010 Я походу уже всех утомил, но что писать в an_spawn. Просто у меня снова встал вопрос с position. Можете привести конкретный пример для zone_mincer_weak значениями, а не an_spawn(anom_name,plosh,position,level_vertex_id,game_vertex_id,powers_a,time_danger os) Ворос № 2, что делать со строкой self:AddCallback("btn_zone_mincer_weak", ui_events.BUTTON_CLICKED, self.spawn_zone_mincer_weak, self) morda. cod4 player Ссылка на комментарий
Kirag 39 Опубликовано 16 Мая 2010 Поделиться Опубликовано 16 Мая 2010 Darien В ЗП, возможно, аномалии другие, я в нем не копался, но тема ж про ТЧ! По умолчанию, и вопрос считаем про ТЧ. elfog, я ж именно конкретный пример и привел в последнем спойлере, все эти local там стоят неспроста - именно в них и задаются параметры аномалии перед спавном. Имена переменных в них абсолютно намеренно совпадают с именами аргументов функции, это сделано именно затем, чтобы значения, ранее определенные, сами подставились в функцию спавна. В переводе на русский, с моими цифрами, результат выполнения функции "spawner:spawn_zone_mincer_weak() " будет следующий: "заспавнить аномалию "zone_mincer_weak" радиусом 4 метра и мощностью 500 у.е. перед носом актора так, чтобы ближайший край аномалии был от него на расстоянии 4 метра" Если хочешь все то же самое, но в одну строчку, это будет выглядеть так: an_spawn("zone_mincer_weak",4,vector():mad(db.actor:position(),db.actor:direction(),8),db.actor:level_vertex_id(),db.actor:game_vertex_id(),500,nil) По второму вопросу - хоть я и плохо понимаю в создании меню, но по-моему тут все нормально, оставь ее как есть. Эта строка гласит "при нажатии на кнопку "btn_zone_mincer_weak" выполнить функцию "spawner:spawn_zone_mincer_weak() " " Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
elfog 0 Опубликовано 16 Мая 2010 Поделиться Опубликовано 16 Мая 2010 (изменено) Kirag, Сделал, вроде, всё как надо function spawner:spawn_zone_mincer_weak() if self:check_game() then local anom_name = "zone_mincer_weak" local plosh = 4 local distance = plosh = 4 -- расстояние до границы аномалии local position = vector():mad(db.actor:position(),db.actor:direction(),8) local level_vertex_id = db.actor:level_vertex_id() local game_vertex_id = db.actor:game_vertex_id() local powers_a = 500 an_spawn("zone_mincer_weak",4,vector():mad(db.actor:position(),db.actor:direction(),8),db.actor:level_vertex_id(),db.actor:game_vertex_id(),500,nil) end end Но,увы, при нажатии на вкладку "аномалии" происходит вылет с логом Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...adow of chernobyl\gamedata\scripts\ui_spawner.script:419: attempt to index global 'ui_anomalii_menu' (a nil value) Где ui_spawner.script - описатель всех меню, хотя там всё правильно т.к. до новой функции меню работало нормально. Судя по логу ошибка в 419 строке function spawner:OnButton_anomalii_menu() if self.ui_anomalii_menu_dlg == nil then self.ui_anomalii_menu_dlg = ui_anomalii_menu.spawner() --- 419 строка self.ui_anomalii_menu_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_anomalii_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end Что я накосячил либо не учёл? ------------------------------------ Кстати стоит ли выкладывать адаптированное под АМК 1.4.1. спавн меню, если да то надо ли создавать для этого отдельную тему в мастерской ТЧ? (Если заработает то даже с аномалиями) atom mod (spwnermod) + FIX для AMK 1.4.1. Кроме того что оно просто адаптировано лля АМК, я ещё и ввёл изменения ------>>> Оружие: Изменил названия на те что в АМК Добавил Огнемёт Исправил спавн Грозы (кнопка была, но не более) AMK: Спальный мешок Рюкзак GPS метка Элитный детектор аномалий Канистра Баллон Еда: Добавил пиво Разное: Добавил гитару и гармошку Монстры: Исправил спавн собаки (вместо нее спавнилась защита от пси воздействия) Кот Излом Тушкан Полтергейст Химера Зомби Ворона Бюрер Электро Химера Огненный Полтергейст Пси Собака Костюмы: Заменил старые(нерабочие) костюмы на нормальные. Добавил Скат-10 Добавил уникльную броню и оружие. Добавил все артефакты из амк. Добавил спавн всех предметов в радиусе 1-5 метров от ГГ. Остальное осталось тем же (оружие, медикаменты, боеприпасы, НПС, автомобили...) ВНИМАНИЕ!!! Мод затрагивает ui_main_menu.script, system.ltx и добавляет автомобили. Изменено 16 Мая 2010 пользователем elfog morda. cod4 player Ссылка на комментарий
Darien 0 Опубликовано 16 Мая 2010 Поделиться Опубликовано 16 Мая 2010 elfog У тебя функция спавна называется spawn_zone_mincer_weak(), а ты вызываешь некую ui_anomalii_menu.spawner(). Ссылка на комментарий
elfog 0 Опубликовано 16 Мая 2010 Поделиться Опубликовано 16 Мая 2010 ui_spawner_script - описатель самих меню, а не их содержимого. Либо я тебя не понял, либо меня не поняли. morda. cod4 player Ссылка на комментарий
Darien 0 Опубликовано 16 Мая 2010 Поделиться Опубликовано 16 Мая 2010 (изменено) elfog Если вот эта строка у тебя должна вызывать спавн аномалии, то замени её self.ui_anomalii_menu_dlg = ui_anomalii_menu.spawner() На вот эту self.ui_anomalii_menu_dlg = ui_anomalii_menu.spawn_zone_mincer_weak() Вариант "чисто попробовать", я не знаю, как у тебя там сейчас функции называются, и не видя полного кода, который у тебя в данный момент, не особо то что скажешь. Изменено 16 Мая 2010 пользователем Darien Ссылка на комментарий
elfog 0 Опубликовано 16 Мая 2010 Поделиться Опубликовано 16 Мая 2010 Darien, Скоро совсем запутаюсь. Итак... в ui_spawner могут быть интересны строки: конец строк self:register.... ,конец строк self:addcallback... и самый почти самый конец, где фигурирует функция function spawner:OnButton_anomalii_menu()... Извеняюсь что очень много function spawner:OnButton_anomalii_menu() -- Atom mod: micromod (Сборка 1) -- инициализация class "spawner" (CUIScriptWnd) -- инициализируем элементы интерфейса и каллбаки function spawner:__init(owner) super() self.owner = owner self:InitControls() self:InitCallBacks() end function spawner:__finalize() end function spawner:InitControls() self:SetWndRect (Frect():set(50,50,1000,1000)) -- файл-описатель наших элементов local xml = CScriptXmlInit() xml:ParseFile("ui_atom_mod.xml") -- видео на заднем плане xml:InitStatic("back_video", self) -- рамка xml:InitStatic("background", self) xml:InitStatic("Info", self) -- кнопки self:Register(xml:Init3tButton("btn_ammo_menu", self),"btn_ammo_menu") self:Register(xml:Init3tButton("btn_art_menu", self),"btn_art_menu") self:Register(xml:Init3tButton("btn_eat_menu", self),"btn_eat_menu") self:Register(xml:Init3tButton("btn_medic_menu", self),"btn_medic_menu") self:Register(xml:Init3tButton("btn_misc_menu", self),"btn_misc_menu") self:Register(xml:Init3tButton("btn_monster_menu", self),"btn_monster_menu") self:Register(xml:Init3tButton("btn_outfit_menu", self),"btn_outfit_menu") self:Register(xml:Init3tButton("btn_people_menu", self),"btn_people_menu") self:Register(xml:Init3tButton("btn_vehicles_menu", self),"btn_vehicles_menu") self:Register(xml:Init3tButton("btn_weapon_menu", self),"btn_weapon_menu") self:Register(xml:Init3tButton("btn_amk_menu", self),"btn_amk_menu") self:Register(xml:Init3tButton("btn_amkart_menu", self),"btn_amkart_menu") self:Register(xml:Init3tButton("btn_unique_menu", self),"btn_unique_menu") self:Register(xml:Init3tButton("btn_ammo_menu_out", self),"btn_ammo_menu_out") self:Register(xml:Init3tButton("btn_art_menu_out", self),"btn_art_menu_out") self:Register(xml:Init3tButton("btn_eat_menu_out", self),"btn_eat_menu_out") self:Register(xml:Init3tButton("btn_medic_menu_out", self),"btn_medic_menu_out") self:Register(xml:Init3tButton("btn_misc_menu_out", self),"btn_misc_menu_out") self:Register(xml:Init3tButton("btn_outfit_menu_out", self),"btn_outfit_menu_out") self:Register(xml:Init3tButton("btn_weapon_menu_out", self),"btn_weapon_menu_out") self:Register(xml:Init3tButton("btn_amk_menu_out", self),"btn_amk_menu_out") self:Register(xml:Init3tButton("btn_amkart_menu_out", self),"btn_amkart_menu_out") self:Register(xml:Init3tButton("btn_unique_menu_out", self),"btn_unique_menu_out") self:Register(xml:Init3tButton("btn_anomalii_menu", self),"btn_anomalii_menu") self:Register(xml:Init3tButton("btn_quit", self),"btn_quit") end function spawner:InitCallBacks() -- тут интерактивные элементы, при определенном действии выполняется заданная ф-ия self:AddCallback("btn_ammo_menu", ui_events.BUTTON_CLICKED, self.OnButton_ammo_menu, self) self:AddCallback("btn_art_menu", ui_events.BUTTON_CLICKED, self.OnButton_art_menu, self) self:AddCallback("btn_eat_menu", ui_events.BUTTON_CLICKED, self.OnButton_eat_menu, self) self:AddCallback("btn_medic_menu", ui_events.BUTTON_CLICKED, self.OnButton_medic_menu, self) self:AddCallback("btn_misc_menu", ui_events.BUTTON_CLICKED, self.OnButton_misc_menu, self) self:AddCallback("btn_monster_menu", ui_events.BUTTON_CLICKED, self.OnButton_monster_menu, self) self:AddCallback("btn_outfit_menu", ui_events.BUTTON_CLICKED, self.OnButton_outfit_menu, self) self:AddCallback("btn_people_menu", ui_events.BUTTON_CLICKED, self.OnButton_people_menu, self) self:AddCallback("btn_vehicles_menu", ui_events.BUTTON_CLICKED, self.OnButton_vehicles_menu, self) self:AddCallback("btn_weapon_menu", ui_events.BUTTON_CLICKED, self.OnButton_weapon_menu, self) self:AddCallback("btn_amk_menu", ui_events.BUTTON_CLICKED, self.OnButton_amk_menu, self) self:AddCallback("btn_amkart_menu", ui_events.BUTTON_CLICKED, self.OnButton_amkart_menu, self) self:AddCallback("btn_unique_menu", ui_events.BUTTON_CLICKED, self.OnButton_unique_menu, self) self:AddCallback("btn_ammo_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_ammo_menu_out, self) self:AddCallback("btn_art_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_art_menu_out, self) self:AddCallback("btn_eat_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_eat_menu_out, self) self:AddCallback("btn_medic_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_medic_menu_out, self) self:AddCallback("btn_misc_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_misc_menu_out, self) self:AddCallback("btn_outfit_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_outfit_menu_out, self) self:AddCallback("btn_weapon_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_weapon_menu_out, self) self:AddCallback("btn_amk_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_amk_menu_out, self) self:AddCallback("btn_amkart_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_amkart_menu_out, self) self:AddCallback("btn_unique_menu_out", ui_events.BUTTON_CLICKED, self.OnButton_unique_menu_out, self) self:AddCallback("btn_anomalii_menu", ui_events.BUTTON_CLICKED, self.OnButton_anomalii_menu, self) ---quit--- self:AddCallback("btn_quit", ui_events.BUTTON_CLICKED, self.on_quit, self) end -- сразу создадим ф-ию для выхода function spawner:on_quit() -- убираем наше окно, показываем предыдущее (или возвращаемся в игру) local console = get_console() self:GetHolder():start_stop_menu (self.owner, true) self:GetHolder():start_stop_menu (self,true) self.owner:Show (true) -- скрытие главного меню только если запущена игра if self:check_game() then console:execute("main_menu off") end end -- spawn_item - необходимый предмет -- dist - радиус появления (случайно) function spawner:spawn_item(spawn_item, dist) -- спавним только в игре if self:check_game() then -- self:on_quit() alife():create (spawn_item, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end end function spawner:spawn_item_inv(spawn_item) -- спавним только в игре if self:check_game() then -- self:on_quit() local pos = db.actor:position() local dir = db.actor:direction() pos = pos:add(dir:mul(dist)) alife():create(spawn_item, pos, 1, db.actor:game_vertex_id()) end end function spawner:check_game() -- возвращает true если запущена игра local check = false if level.present() and (db.actor ~= nil) and db.actor:alive() then check = true end return check end ------------------------------------------- function spawner:OnButton_weapon_menu() if self.ui_weapon_menu_dlg == nil then self.ui_weapon_menu_dlg = ui_weapon_menu.spawner() self.ui_weapon_menu_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_weapon_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_ammo_menu() if self.ui_ammo_menu_dlg == nil then self.ui_ammo_menu_dlg = ui_ammo_menu.spawner() self.ui_ammo_menu_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_ammo_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_eat_menu() if self.ui_eat_menu_dlg == nil then self.ui_eat_menu_dlg = ui_eat_menu.spawner() self.ui_eat_menu_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_eat_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_art_menu() if self.ui_art_menu_dlg == nil then self.ui_art_menu_dlg = ui_art_menu.spawner() self.ui_art_menu_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_art_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_medic_menu() if self.ui_medic_menu_dlg == nil then self.ui_medic_menu_dlg = ui_medic_menu.spawner() self.ui_medic_menu_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_medic_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_people_menu() if self.ui_people_menu_dlg == nil then self.ui_people_menu_dlg = ui_people_menu.spawner() self.ui_people_menu_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_people_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_monster_menu() if self.ui_monster_menu_dlg == nil then self.ui_monster_menu_dlg = ui_monster_menu.spawner() self.ui_monster_menu_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_monster_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_vehicles_menu() if self.ui_vehicles_menu_dlg == nil then self.ui_vehicles_menu_dlg = ui_vehicles_menu.spawner() self.ui_vehicles_menu_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_vehicles_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_outfit_menu() if self.ui_outfit_menu_dlg == nil then self.ui_outfit_menu_dlg = ui_outfit_menu.spawner() self.ui_outfit_menu_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_outfit_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_misc_menu() if self.ui_misc_menu_dlg == nil then self.ui_misc_menu_dlg = ui_misc_menu.spawner() self.ui_misc_menu_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_misc_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_amk_menu() if self.ui_amk_menu_dlg == nil then self.ui_amk_menu_dlg = ui_amk_menu.spawner() self.ui_amk_menu_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_amk_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_amkart_menu() if self.ui_amkart_menu_dlg == nil then self.ui_amkart_menu_dlg = ui_amkart_menu.spawner() self.ui_amkart_menu_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_amkart_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_unique_menu() if self.ui_unique_menu_dlg == nil then self.ui_unique_menu_dlg = ui_unique_menu.spawner() self.ui_unique_menu_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_unique_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_weapon_menu_out() if self.ui_weapon_menu_out_dlg == nil then self.ui_weapon_menu_out_dlg = ui_weapon_menu_out.spawner() self.ui_weapon_menu_out_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_weapon_menu_out_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_ammo_menu_out() if self.ui_ammo_menu_out_dlg == nil then self.ui_ammo_menu_out_dlg = ui_ammo_menu_out.spawner() self.ui_ammo_menu_out_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_ammo_menu_out_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_eat_menu_out() if self.ui_eat_menu_out_dlg == nil then self.ui_eat_menu_out_dlg = ui_eat_menu_out.spawner() self.ui_eat_menu_out_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_eat_menu_out_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_art_menu_out() if self.ui_art_menu_out_dlg == nil then self.ui_art_menu_out_dlg = ui_art_menu_out.spawner() self.ui_art_menu_out_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_art_menu_out_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_medic_menu_out() if self.ui_medic_menu_out_dlg == nil then self.ui_medic_menu_out_dlg = ui_medic_menu_out.spawner() self.ui_medic_menu_out_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_medic_menu_out_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_outfit_menu_out() if self.ui_outfit_menu_out_dlg == nil then self.ui_outfit_menu_out_dlg = ui_outfit_menu_out.spawner() self.ui_outfit_menu_out_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_outfit_menu_out_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_misc_menu_out() if self.ui_misc_menu_dlg == nil then self.ui_misc_menu_out_dlg = ui_misc_menu_out.spawner() self.ui_misc_menu_out_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_misc_menu_out_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_amk_menu_out() if self.ui_amk_menu_out_dlg == nil then self.ui_amk_menu_out_dlg = ui_amk_menu_out.spawner() self.ui_amk_menu_out_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_amk_menu_out_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_amkart_menu_out() if self.ui_amkart_menu_out_dlg == nil then self.ui_amkart_menu_out_dlg = ui_amkart_menu_out.spawner() self.ui_amkart_menu_out_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_amkart_menu_out_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_unique_menu_out() if self.ui_unique_menu_out_dlg == nil then self.ui_unique_menu_out_dlg = ui_unique_menu_out.spawner() self.ui_unique_menu_out_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_unique_menu_out_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end function spawner:OnButton_anomalii_menu() if self.ui_anomalii_menu_dlg == nil then self.ui_anomalii_menu_dlg = ui_anomalii_menu.spawner() self.ui_anomalii_menu_dlg.owner = self end self:GetHolder():start_stop_menu(self.ui_anomalii_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end --------------------------------------------------------------------------------------------------------- function spawner:OnButton_next_menu() -- если еще ни разу не вызывали, то обозначим наш новый скрипт if self.ui_spawner_menu_dlg == nil then self.ui_spawner_menu_dlg = ui_spawner_menu.spawner() self.ui_spawner_menu_dlg.owner = self end -- останавливаем родительский элемент, запускаем свой, но родителя показываем. self:GetHolder():start_stop_menu(self.ui_spawner_menu_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end ------------------------------------------------------------------------------------------ ------------------------------------------------------------------------- А так же ui_anomalii_menu.script, если у кого-то будет желание разгребать... -- Atom mod: micromod (Сборка 1) -- инициализация class "spawner" (CUIScriptWnd) -- инициализируем элементы интерфейса и каллбаки function spawner:__init(owner) super() self.owner = owner self:InitControls() self:InitCallBacks() end function spawner:__finalize() end function spawner:InitControls() self:SetWndRect (Frect():set(0,0,1000,1000)) -- файл-описатель наших элементов local xml = CScriptXmlInit() xml:ParseFile("ui_anomalii_menu.xml") -- видео на заднем плане xml:InitStatic("back_video", self) -- рамка xml:InitStatic("background", self) -- кнопки self:Register(xml:Init3tButton("btn_zone_mincer_weak", self),"btn_zone_mincer_weak") ------------------------------------------------------------------------------------ -- кнопка выхода self:Register(xml:Init3tButton("btn_quit", self),"btn_quit") ----------------------------------------------------------------------------------------------------- xml:InitStatic("Info", self) end function spawner:InitCallBacks() self:AddCallback("btn_zone_mincer_weak", ui_events.BUTTON_CLICKED, self.spawn_zone_mincer_weak, self) self:AddCallback("btn_quit", ui_events.BUTTON_CLICKED, self.on_quit, self) ----------------------------------- self:AddCallback("btn_back", ui_events.BUTTON_CLICKED, self.on_back, self) ------------------ end -- сразу создадим ф-ию для выхода function spawner:on_quit() -- убираем наше окно, показываем предыдущее (или возвращаемся в игру) local console = get_console() self:GetHolder():start_stop_menu (self.owner, true) self:GetHolder():start_stop_menu (self,true) self.owner:Show (true) -- скрытие главного меню только если запущена игра if self:check_game() then console:execute("main_menu off") end end -- spawn_item - необходимый предмет -- dist - радиус появления (случайно) function spawner:spawn_item(spawn_item, dist) -- спавним только в игре if self:check_game() then -- self:on_quit() local pos = db.actor:position() local dir = db.actor:direction() pos = pos:add(dir:mul(dist)) alife():create(spawn_item, pos, 1, db.actor:game_vertex_id()) end end function spawner:spawn_item_inv(spawn_item) -- спавним только в игре if self:check_game() then -- self:on_quit() alife():create (spawn_item, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end end function spawner:check_game() -- возвращает true если запущена игра local check = false if level.present() and (db.actor ~= nil) and db.actor:alive() then check = true end return check end function spawner:spawn_zone_mincer_weak() if self:check_game() then local anom_name = "zone_mincer_weak" local plosh = 4 local distance = plosh = 4 -- расстояние до границы аномалии local position = vector():mad(db.actor:position(),db.actor:direction(),8) local level_vertex_id = db.actor:level_vertex_id() local game_vertex_id = db.actor:game_vertex_id() local powers_a = 500 an_spawn("zone_mincer_weak",4,vector():mad(db.actor:position(),db.actor:direction(),8),db.actor:level_ vertex_id(),db.actor:game_vertex_id(),500,nil) end end ---------------------Back------------------ function spawner:on_back() -- если еще ни разу не вызывали, то обозначим наш новый скрипт if self.ui_spawnerdlg == nil then self.ui_spawner_dlg = ui_spawner.spawner() self.ui_spawner_dlg.owner = self end -- останавливаем родительский элемент, запускаем свой, но родителя показываем. self:GetHolder():start_stop_menu(self.ui_spawner_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end morda. cod4 player Ссылка на комментарий
Kirag 39 Опубликовано 17 Мая 2010 Поделиться Опубликовано 17 Мая 2010 (изменено) elfog, да-а-а... Прикольнулся ты знатно в функции spawner:spawn_zone_mincer_weak() Либо не нужны все local, либо не нужно те же значения задавать в вызове функции an_spawn. Впрочем, плевать, работать будет и в таком виде. Но, посмотрел файл ui_anomali_menu.script, а где же сама функция an_spawn? Ты пытаешься вызвать несуществующую функцию, как результат - должно послать, правда, не уверен, что именно в той форме, что послало тебя. Но функцию допиши обязательно, без нее работать 100% не будет. Лог переводится (на понятный, а не дословно на русский!) так, что какая-то лажа с файлом ui_anomalii_menu, из-за которой файл не воспринимается. Внимательно проверь, все ли скобки правильно закрыты, end-ы проставлены, везде ли стоит then после if, не перепутал ли операторы сравнения и присваивания. Может еще какой вариант найдется... Изменено 17 Мая 2010 пользователем Kirag Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
elfog 0 Опубликовано 18 Мая 2010 Поделиться Опубликовано 18 Мая 2010 (изменено) Так? function: an_spawn ("zone_mincer_weak",4,vector():mad(db.actor:position(),db.actor:direction(),8),db.actor:level_ vertex_id(),db.actor:game_vertex_id(),500,nil) if self:check_game() then local anom_name = "zone_mincer_weak" local plosh = 4 local distance = plosh = 4 -- расстояние до границы аномалии local position = vector():mad(db.actor:position(),db.actor:direction(),8) local level_vertex_id = db.actor:level_vertex_id() local game_vertex_id = db.actor:game_vertex_id() local powers_a = 500 end end ---------- Кстати как на этом сайте плюсы давать, а то я чего то не могу их найти. ---------- Стоит ли выкладывать адаптированное под АМК 1.4.1. спавн меню, если да то надо ли создавать для этого отдельную тему в мастерской ТЧ? (Если заработает то даже с аномалиями) atom mod (spwnermod) + FIX для AMK 1.4.1. Кроме того что оно просто адаптировано лля АМК, я ещё и ввёл изменения ------>>> Оружие: Изменил названия на те что в АМК Добавил Огнемёт Исправил спавн Грозы (кнопка была, но не более) AMK: Спальный мешок Рюкзак GPS метка Элитный детектор аномалий Канистра Баллон Еда: Добавил пиво smile.gif Разное: Добавил гитару и гармошку Монстры: Исправил спавн собаки (вместо нее спавнилась защита от пси воздействия) Кот Излом Тушкан Полтергейст Химера Зомби Ворона Бюрер Электро Химера Огненный Полтергейст Пси Собака Костюмы: Заменил старые(нерабочие) костюмы на нормальные. Добавил Скат-10 Добавил уникльную броню и оружие. Добавил все артефакты из амк. Добавил спавн всех предметов в радиусе 1-5 метров от ГГ. Остальное осталось тем же (оружие, медикаменты, боеприпасы, НПС, автомобили...) ВНИМАНИЕ!!! Мод затрагивает ui_main_menu.script, system.ltx и добавляет автомобили. Изменено 19 Мая 2010 пользователем elfog morda. cod4 player Ссылка на комментарий
shooting unicorn 0 Опубликовано 18 Мая 2010 Поделиться Опубликовано 18 Мая 2010 Люди, подскажите, как сделать так, чтобы сразу на локации ЧАЭС 2 можно было внизу ходить, т.е как убрать от туда радиацию? Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти