Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий
I am Dead 918 Опубликовано 26 Апреля 2021 Поделиться Опубликовано 26 Апреля 2021 Есть такая функция из xr_codition.script -- true если у актора одет шлем указанной секции function actor_wear_helmet(actor, npc, p) return p[1] ~= nil and actor:object( p[1] ) ~= nil and actor:item_in_slot(10) ~= nil and actor:item_in_slot(10):section() == p[1] end Как сделать тоже самое только для проверки предмета который находится на поясе? P.S почему то не получается с телефона поместить под спойлер. Ссылка на комментарий
Biblia 4 Опубликовано 26 Апреля 2021 Поделиться Опубликовано 26 Апреля 2021 @I am Dead напомните, какой функцией это задается? Ссылка на комментарий
I am Dead 918 Опубликовано 26 Апреля 2021 Поделиться Опубликовано 26 Апреля 2021 @Biblia Блин, я сейчас не у компьютера поэтому не могу наизусть пример написать. Тем более в интернета полно уроков на эту тему. Ссылка на комментарий
Biblia 4 Опубликовано 26 Апреля 2021 Поделиться Опубликовано 26 Апреля 2021 @I am Dead я гугли, но везде, увы, только проверки на наличие предмета и тому подобное, что мне сейчас не надо ( В ютубе пока не смотрел, ибо нет возможности. Ссылка на комментарий
I am Dead 918 Опубликовано 26 Апреля 2021 Поделиться Опубликовано 26 Апреля 2021 @Biblia Пример можешь поглядеть в новом арсенале 6, там есть скрипт на озвучивание подбираемого предмета по его классу( самое первое что пришло где можно подглядеть пример использования). 1 2 Ссылка на комментарий
Norman Eisenherz 322 Опубликовано 27 Апреля 2021 Поделиться Опубликовано 27 Апреля 2021 @Баба ЯГА [bind_physic_object.script] generic_physics_binder:use_callback(obj, who) Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
ARTLantist 14 Опубликовано 27 Апреля 2021 Поделиться Опубликовано 27 Апреля 2021 25.04.2021 в 23:16, Biblia сказал(а): Естественно, прописывать такое для каждого из предметов - глупо С чего ты это взял?) Даже в таком сложном в функциональном плане моде, как Dead Air, сделано для каждого предмета отдельно. Вот: Скрытый текст outfit = { [0] = "actor_effects.use_weapon(0)", [1] = "xr_effects.disable_ui_lite_with_imput(db.actor, nil)", [2] = "xr_effects.play_inv_repair_sewing_kit()", [378] = "actor_effects.use_helmet(0)", [379] = "xr_effects.disable_nv(db.actor, nil)", [380] = "xr_effects.disable_ui_inventory(db.actor, nil)", [550] = "level.add_cam_effector('camera_effects\\\\item_use_fast.anm', 8063, false,'')", [2900] = "level.add_pp_effector('surge_fade.ppe', 8023, false)", [3020] = "level.add_cam_effector('camera_effects\\\\item_use_slow.anm', 8064, false,'')", [6000] = "level.remove_pp_effector(8023)", [7001] = "xr_effects.enable_ui_lite(db.actor, nil)", [7002] = "actor_effects.use_helmet(1)", [7003] = "xr_effects.enable_nv_and_imput(db.actor, nil)", [7004] = "actor_effects.use_weapon(1)" }, helm = { [0] = "actor_effects.use_weapon(0)", [1] = "xr_effects.disable_ui_lite_with_imput(db.actor, nil)", [2] = "xr_effects.disable_nv(db.actor, nil)", [3] = "actor_effects.use_helmet(0)", [4] = "xr_effects.disable_nv(db.actor, nil)", [5] = "level.add_cam_effector('camera_effects\\\\item_use_fast.anm', 8053, false,'')", -- [6] = "xr_effects.play_inv_repair_sewing_kit()", [7] = "level.add_cam_effector('camera_effects\\\\item_use_slow.anm', 8054, false,'')", [380] = "xr_effects.disable_ui_inventory(db.actor, nil)", [1700] = "actor_effects.use_helmet(1)", [1701] = "xr_effects.enable_ui_lite(db.actor, nil)", [2500] = "xr_effects.enable_imput(db.actor, nil)", [2503] = "actor_effects.use_weapon(1)" }, gun_oil_dummy = { [0] = "actor_effects.use_weapon(0)", [1] = "xr_effects.disable_ui_lite_with_imput(db.actor, nil)", -- [378] = "actor_effects.use_helmet(0)", -- [379] = "xr_effects.disable_nv(db.actor, nil)", [550] = "level.add_cam_effector('camera_effects\\\\item_use.anm', 8053, false,'')", [1040] = "xr_effects.disable_ui_inventory(db.actor, nil)", [1460] = "xr_effects.play_inv_repair_spray_oil()", [4351] = "xr_effects.enable_ui_lite(db.actor, nil)", -- [5450] = "actor_effects.use_helmet(1)", [6050] = "xr_effects.enable_imput(db.actor, nil)", [6650] = "actor_effects.use_weapon(1)" }, gun_oil_2_dummy = { [0] = "actor_effects.use_weapon(0)", [1] = "xr_effects.disable_ui_lite_with_imput(db.actor, nil)", -- [378] = "actor_effects.use_helmet(0)", -- [379] = "xr_effects.disable_nv(db.actor, nil)", [550] = "level.add_cam_effector('camera_effects\\\\item_use.anm', 8053, false,'')", [1040] = "xr_effects.disable_ui_inventory(db.actor, nil)", [1460] = "xr_effects.play_inv_repair_spray_oil()", [4351] = "xr_effects.enable_ui_lite(db.actor, nil)", -- [5450] = "actor_effects.use_helmet(1)", [6050] = "xr_effects.enable_imput(db.actor, nil)", [6650] = "actor_effects.use_weapon(1)" }, cleaning_kit_p_dummy = { [0] = "actor_effects.use_weapon(0)", [1] = "xr_effects.disable_ui_lite_with_imput(db.actor, nil)", -- [378] = "actor_effects.use_helmet(0)", -- [379] = "xr_effects.disable_nv(db.actor, nil)", [550] = "level.add_cam_effector('camera_effects\\\\item_use_fast.anm', 8063, false,'')", [1040] = "xr_effects.disable_ui_inventory(db.actor, nil)", [1460] = "xr_effects.play_inv_repair_brushes()", [3020] = "level.add_cam_effector('camera_effects\\\\item_use.anm', 8064, false,'')", [7681] = "xr_effects.enable_ui_lite(db.actor, nil)", -- [8480] = "actor_effects.use_helmet(1)", [9080] = "xr_effects.enable_imput(db.actor, nil)", [9680] = "actor_effects.use_weapon(1)" }, cleaning_kit_p_2_dummy = { [0] = "actor_effects.use_weapon(0)", [1] = "xr_effects.disable_ui_lite_with_imput(db.actor, nil)", -- [378] = "actor_effects.use_helmet(0)", -- [379] = "xr_effects.disable_nv(db.actor, nil)", [550] = "level.add_cam_effector('camera_effects\\\\item_use_fast.anm', 8063, false,'')", [1040] = "xr_effects.disable_ui_inventory(db.actor, nil)", [1460] = "xr_effects.play_inv_repair_brushes()", [3020] = "level.add_cam_effector('camera_effects\\\\item_use.anm', 8064, false,'')", [7681] = "xr_effects.enable_ui_lite(db.actor, nil)", -- [8480] = "actor_effects.use_helmet(1)", [9080] = "xr_effects.enable_imput(db.actor, nil)", [9680] = "actor_effects.use_weapon(1)" }, cleaning_kit_p_3_dummy = { [0] = "actor_effects.use_weapon(0)", [1] = "xr_effects.disable_ui_lite_with_imput(db.actor, nil)", -- [378] = "actor_effects.use_helmet(0)", -- [379] = "xr_effects.disable_nv(db.actor, nil)", [550] = "level.add_cam_effector('camera_effects\\\\item_use_fast.anm', 8063, false,'')", [1040] = "xr_effects.disable_ui_inventory(db.actor, nil)", [1460] = "xr_effects.play_inv_repair_brushes()", [3020] = "level.add_cam_effector('camera_effects\\\\item_use.anm', 8064, false,'')", [7681] = "xr_effects.enable_ui_lite(db.actor, nil)", -- [8480] = "actor_effects.use_helmet(1)", [9080] = "xr_effects.enable_imput(db.actor, nil)", [9680] = "actor_effects.use_weapon(1)" }, --И далее для всех-всех-всех предметов, которые используют анимации Я же у себя сделал немного попроще - сделал общие скрипты анимаций для однотипных предметов - например, для всех таблеток одна анимация, для еды - другая, для воды - третья и т.д., и далее при использовании предмета отслеживаю его секцию и запускаю анимацию. У меня так сделано по большей части из-за нескольких юзаний одного типа предмета: Скрытый текст function use_item_stack(s_obj,obj) -- DRUGS USE -- caffeine x5 if(s_obj)and(s_obj:section_name()=="caffeine_5")then alife():create("caffeine_4", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) local sleep_ch = system_ini():r_float(s_obj:section_name(), "eat_sleep") ui_sleep_dialog.set_sleep(sleep_ch) items_animation.drugs_anims() end if(s_obj)and(s_obj:section_name()=="caffeine_4")then alife():create("caffeine_3", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) local sleep_ch = system_ini():r_float(s_obj:section_name(), "eat_sleep") ui_sleep_dialog.set_sleep(sleep_ch) items_animation.drugs_anims() end if(s_obj)and(s_obj:section_name()=="caffeine_3")then alife():create("caffeine_2", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) local sleep_ch = system_ini():r_float(s_obj:section_name(), "eat_sleep") ui_sleep_dialog.set_sleep(sleep_ch) items_animation.drugs_anims() end if(s_obj)and(s_obj:section_name()=="caffeine_2")then alife():create("caffeine", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) local sleep_ch = system_ini():r_float(s_obj:section_name(), "eat_sleep") ui_sleep_dialog.set_sleep(sleep_ch) items_animation.drugs_anims() end if(s_obj)and(s_obj:section_name()=="caffeine")then local sleep_ch = system_ini():r_float(s_obj:section_name(), "eat_sleep") ui_sleep_dialog.set_sleep(sleep_ch) items_animation.drugs_anims() end -- DRUGS -- drug_charcoal x5 if(s_obj)and(s_obj:section_name()=="drug_charcoal_5")then alife():create("drug_charcoal_4", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) items_animation.drugs_anims() end if(s_obj)and(s_obj:section_name()=="drug_charcoal_4")then alife():create("drug_charcoal_3", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) items_animation.drugs_anims() end if(s_obj)and(s_obj:section_name()=="drug_charcoal_3")then alife():create("drug_charcoal_2", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) items_animation.drugs_anims() end if(s_obj)and(s_obj:section_name()=="drug_charcoal_2")then alife():create("drug_charcoal", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) items_animation.drugs_anims() end if(s_obj)and(s_obj:section_name()=="drug_charcoal")then items_animation.drugs_anims() end -- drug_coagulant x5 if(s_obj)and(s_obj:section_name()=="drug_coagulant_5")then alife():create("drug_coagulant_4", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) items_animation.drugs_anims() end и т.д. для всех предметов. Насколько я понял, у тебя в конфигах указывается тип используемого предмета. Так в чём, собственно проблема? В колбеке на использование предмета делаешь ссылку на функцию, в которой проверяешь, чему эта секция равна, и запускаешь анимку в зависимости от результата: -- в конфиге: [kolbasa]:booster, food_base $spawn = "food and drugs\kolbasa" visual = dynamics\devices\dev_kolbasa\dev_kolbasa.ogf description = st_kolbasa_descr inv_name = st_kolbasa inv_name_short = st_kolbasa inv_weight = 0.4 inv_grid_width = 1 inv_grid_height = 1 inv_grid_x = 35 inv_grid_y = 18 cost = 960 attach_angle_offset = 0.440521, 1.378287, -0.644026 attach_position_offset = 0.104196, -0.010821, 0.076969 attach_bone_name = bip01_r_hand auto_attach = false eat_satiety = 0.646 eat_radiation = 0.0 eat_alcohol = 0.100 eat_health = -0.05 use_sound = interface\inv_eat_paperwrap anim_type = food --тип анимации --в скрипте: local anim_type = ini:r_string(obj:section(), "anim_type") if anim_type == "food" then --запускаешь камеру и всё, что нужно elseif anim_type == "drug" then ... end И в дополнение, запускать функцию на проверку типа анимации предмета надо из bind_stalker.script таким образом: --функция: function actor_binder:use_inventory_item(obj) --в конце её, перед последним end, пишешь: items_manager.use_item_stack(obj) -- твоя функция (я вставил свою для примера) end 26.04.2021 в 07:33, I am Dead сказал(а): Как сделать тоже самое только для проверки предмета который находится на поясе? Добавлять в движке итератор для пояса и с его помощью проверять наличие предмета нужной секции. Иначе никак. Ссылка на комментарий
I am Dead 918 Опубликовано 27 Апреля 2021 Поделиться Опубликовано 27 Апреля 2021 49 минут назад, ARTLantist сказал(а): Добавлять в движке итератор для пояса и с его помощью проверять наличие предмета нужной секции. Иначе никак. Подсказали функцию которая замечательно работает. Скрытый текст function actor_has_item_on_belt(actor, npc, p) local obj = actor:object(p[1]) return obj and actor:is_on_belt(obj) end 2 Ссылка на комментарий
ARTLantist 14 Опубликовано 27 Апреля 2021 Поделиться Опубликовано 27 Апреля 2021 @I am Dead а какая платформа? Просто на чистой зп ни в скриптах (_g.script), ни в движке нет такой функции Ссылка на комментарий
I am Dead 918 Опубликовано 28 Апреля 2021 Поделиться Опубликовано 28 Апреля 2021 @ARTLantist Функция такая я как понял в OGSR моде присутствует. Ссылка на комментарий
ARTLantist 14 Опубликовано 28 Апреля 2021 Поделиться Опубликовано 28 Апреля 2021 @I am Dead так у тебя ОГСР? Тогда другое дело. Там и итератор тебе сразу есть, и эти проверки - is_on_belt, is_on_ruck и куча всего другого. Ссылка на комментарий
I am Dead 918 Опубликовано 28 Апреля 2021 Поделиться Опубликовано 28 Апреля 2021 (изменено) @ARTLantist Тогда вопрос уже другой, как эту функцию переделать под огср. Скрытый текст -- переносим все вещи из ящика с указанным story_id function transfer_from_box(box_sid) local box = level_object_by_sid(box_sid) if box then box:iterate_inventory_box(function(item) box:transfer_item(item, db.actor) end) end end С такой функцией у меня идет ругань на iterate_inventory_box так как в движке его нету, происходит вылет. Изменено 28 Апреля 2021 пользователем I am Dead Ссылка на комментарий
Stalkersof 185 Опубликовано 28 Апреля 2021 Поделиться Опубликовано 28 Апреля 2021 Рнебята пытаюсь прикрутить гуи окно с двумя кнопками к функции обыска монстров. 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 -------------------------- -------------------------- -------------------------- NewUI4.main() --self:mutanter_use(obj,who) end Разделил функцию на две. Где self:mutanter_use(obj,who) это все действия по обыску трупов. NewUI4.main() это собственно окно с двумя кнопками. Если вызываю из окна при нажатии кнопки скрипт валиться из за отсутствия переменных. Если функцию без окна запускаю все работает. Вызываю собственно так. function NewUI4:button1_button_clicked() bind_monster.generic_object_binder:mutanter_use() --bind_monster.generic_object_binder:mutanter_use(obj,who) self:Hide() end Freeplay Graphic Mod(FGM) Ссылка на комментарий
I am Dead 918 Опубликовано 28 Апреля 2021 Поделиться Опубликовано 28 Апреля 2021 @Stalkersof Попробуй так сделать: Скрытый текст 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 -------------------------- -------------------------- -------------------------- level.start_stop_menu(NewUI4.main(), true) --self:mutanter_use(obj,who) end Ссылка на комментарий
Stalkersof 185 Опубликовано 28 Апреля 2021 Поделиться Опубликовано 28 Апреля 2021 44 минуты назад, I am Dead сказал(а): @Stalkersof Попробуй так сделать: Показать 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 -------------------------- -------------------------- -------------------------- level.start_stop_menu(NewUI4.main(), true) --self:mutanter_use(obj,who) end Не а не получается. NewUI4.main() это скрипт и функция в нем. Окно появляется и кнопки и все. function main() local hud = NewUI4(get_hud()) level.start_stop_menu(hud, true) end Попытаюсь еще раз объяснить проблему функция self:mutanter_use(obj,who) вызываемая непосредственно в скрипте. Прекрасно работает. Комментирую ее и пытаюсь вызвать при нажатии кнопки вылет. Либо не корректные параметры либо отсутствие параметров. Т.е вот это (obj,who)я не могу передать из другого скрипта. Freeplay Graphic Mod(FGM) Ссылка на комментарий
ARTLantist 14 Опубликовано 28 Апреля 2021 Поделиться Опубликовано 28 Апреля 2021 @Stalkersof заведомо безнадёжная идея делать так, как сделано у тебя. При смерти мутанта в биндере он отлавливается и все действия относятся к нему, а когда ты хочешь заупустить из другой функции что-то из биндера монстров, ты уже теряешь этого монстра. Используй логические переменные и пересылай их в свой скрипт с ГУИ окном, там после нажатия кнопки делай true и в апдейте биндера монстров отлавливай момент, когда эта переменная true, выполняй нужные действия. 1 Ссылка на комментарий
Stalkersof 185 Опубликовано 28 Апреля 2021 Поделиться Опубликовано 28 Апреля 2021 2 минуты назад, ARTLantist сказал(а): @Stalkersof заведомо безнадёжная идея делать так, как сделано у тебя. При смерти мутанта в биндере он отлавливается и все действия относятся к нему, а когда ты хочешь заупустить из другой функции что-то из биндера монстров, ты уже теряешь этого монстра. Используй логические переменные и пересылай их в свой скрипт с ГУИ окном, там после нажатия кнопки делай true и в апдейте биндера монстров отлавливай момент, когда эта переменная true, выполняй нужные действия. Вроде с переменными тоже пробовал. Хорошо еще раз попробую. Freeplay Graphic Mod(FGM) Ссылка на комментарий
ARTLantist 14 Опубликовано 28 Апреля 2021 Поделиться Опубликовано 28 Апреля 2021 (изменено) @I am Dead ну, либо лезть в движок, либо костыльно как-то перебирать все предметы в ящике. Как вариант, попробуй так: Скрытый текст local cnt = box:object_count() for i=0, cnt-1 do local item = box:object(i) --нужные действия end Сразу говорю, что не ручаюсь за работоспособность у inventory_box, я эту функцию раньше использовал только для актора @Stalkersof и вообще, зачем тебе обратно ссылаться на биндер монстров? Можно же в скрипте с ГУИ выдать все нужные предметы и не забивать себе голову. Изменено 28 Апреля 2021 пользователем ARTLantist Ссылка на комментарий
Stalkersof 185 Опубликовано 28 Апреля 2021 Поделиться Опубликовано 28 Апреля 2021 11 минут назад, ARTLantist сказал(а): @Stalkersof и вообще, зачем тебе обратно ссылаться на биндер монстров? Можно же в скрипте с ГУИ выдать все нужные предметы и не забивать себе голову. У меня там не только предметы(запчасти) чтение конфига монстра, удар ножом, хит монстру и анимация. Мне вот это и актор нужен там и монстр(obj,who) надо. Freeplay Graphic Mod(FGM) Ссылка на комментарий
ARTLantist 14 Опубликовано 28 Апреля 2021 Поделиться Опубликовано 28 Апреля 2021 1 минуту назад, Stalkersof сказал(а): и актор нужен там и монстр(obj,who) Перешли их в скрипт с ГУИ окном: NewUI4.main(obj,who) и там уже устанавливай в той функции function main(obj,who) self.actor = who self.monstr = obj --и далее нужное и всё. 1 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти