Overfirst 631 Опубликовано 29 Июля 2016 Поделиться Опубликовано 29 Июля 2016 Что-то не пойму, реально ли перенести вещи в ящик который находится далеко от ГГ? Более 150 м. Делаю так: function RelocActInvInBox(oBoxSId) local oBox = get_story_object(oBoxSId) if oBox then local function TransferItems(oItem) if oItem:section()~="wpn_binoc" and oItem:section()~="wpn_knife" and oItem:section()~="device_torch" then db.actor:transfer_item(oItem,oBox) end end db.actor:inventory_for_each(TransferItems) end end В онлайне работает, в оффлайне - нет, оно и понятно. Но как быть? Ранее был известен под ником BoBaH_671. Ссылка на комментарий
Kondr48 314 Опубликовано 29 Июля 2016 Поделиться Опубликовано 29 Июля 2016 (изменено) BoBaH_671, реально. Надо ящик просто в онлайн перевести. У себя делал так (код заточен под конкретную игровую сцену(одну) и далеко не идеален). Если кто из более опытных предложит чего по оптимитизации/правке буду только рад. --Ограбление на Янтаре. function yan_grab_func_1() level.disable_input() level.hide_indicators() timefactor = level.get_time_factor() level.set_time_factor(1000) local dir=device().cam_dir db.actor:set_actor_direction(dir.x,dir.y,0) --выравниваем направление взгляда, чтобы было падение более реалистичным level.add_cam_effector("camera_effects\\surge_02.anm", 2532, false, "") level.add_pp_effector("surge_fade.ppe", 2011, false) local snd_obj = xr_sound.get_safe_sound_object([[actor\hit_5]]) snd_obj:play_no_feedback(actor, sound_object.s2d, 0, vector(), 15.0) sim = alife() soBox = sim:story_object(62333) switch_online(soBox.id) start_quick_timer(3, "gz_tasks.yan_grab_func_2") --Здесь таймеры Артоса. Можно использовать любые другие. По идее надо чуть подождать вроде чтобы тайник вышел в онлайн. Ну у меня как раз в данном случае все совпало как надо: пока потемнение в глазах пусть и пара таймеров сработает, мне не мешают. end function yan_grab_func_2() level.add_pp_effector("peace_fade.ppe", 1973, true) gz_utils.spawn_item_in_inv("item_hud_medkit", 3) gz_utils.spawn_item_in_inv("military_outfit") gz_utils.spawn_item_in_inv("wpn_ak74") gz_utils.spawn_item_in_inv("ammo_5.45x39_fmj", 2) gz_utils.spawn_item_in_inv("item_hud_voda", 3) start_quick_timer(4, "gz_tasks.yan_grab_func_3") end local function transfer_object_item(item) out_object:transfer_item(item, in_object) end function yan_grab_func_3() box_with_loot = level_object_by_sid(62333) out_object = db.actor in_object = box_with_loot db.actor:inventory_for_each(transfer_object_item) level.set_time_factor(timefactor) level.remove_pp_effector(1973) level.enable_input() level.show_indicators() --switch_offline(soBox.id) end Вам в принципе важно вот это: sim = alife() soBox = sim:story_object(62333) switch_online(soBox.id) Изменено 29 Июля 2016 пользователем Kondr48 Ссылка на комментарий
Карлан 1 049 Опубликовано 29 Июля 2016 Поделиться Опубликовано 29 Июля 2016 @BoBaH_671, очевидно оперировать серверными объектами, так как дистанция работы клиентских методов равна радиусу онлайна, и немного не понятно зачем их применять за этими рамками. На xp-dev есть метод teleport_object, но у меня не было повода проверить как он работает, судя по коду работает корректно (говорю основываясь на подобных методах, которые пишу сам). @Kondr48, предложенный тобою метод является усложнением простого, к тому же он в любом случае не позволит передавать объекты межлокационно. Ссылка на комментарий
Kondr48 314 Опубликовано 29 Июля 2016 Поделиться Опубликовано 29 Июля 2016 (изменено) Карлан, а какой поможет межлокационно? Речь идет о том, чтобы передать вещи актора в тайник который находится где-то там. Как поможет teleport_object? Телепортировать тайник в зону где он станет онлайн и потом обратно? Или функция работает шире, чем я думаю? Хотелось бы каких-то более подробных что ли пояснений. Изменено 29 Июля 2016 пользователем Kondr48 Ссылка на комментарий
mortan 143 Опубликовано 29 Июля 2016 Поделиться Опубликовано 29 Июля 2016 @Kondr48, не знаю, можно ли это сделать скриптами - reject итема который хочешь перенести, далее attach_child или как оно там к ящику в который хочешь сохранить предмет. Это лишь теория) 1 Ссылка на комментарий
UnLoaded 313 Опубликовано 30 Июля 2016 Поделиться Опубликовано 30 Июля 2016 Но как быть? Для начала - показать содержимое ф-ции get_story_object(...). Ну или судя по всему, сразу, самому изменить в ней получение объекта ящика с "клиентской" ф-ции на "серверную"... Ссылка на комментарий
Overfirst 631 Опубликовано 30 Июля 2016 Поделиться Опубликовано 30 Июля 2016 (изменено) Для начала - показать содержимое ф-ции get_story_object Это функция оригинала ЗП, на этой платформе я и работаю. function get_story_object(story_obj_id) local obj_id = story_objects.get_story_objects_registry():get(story_obj_id) if obj_id == nil then return nil end return (db.storage[obj_id] and db.storage[obj_id].object) or (level ~= nil and level.object_by_id(obj_id)) end самому изменить в ней получение объекта ящика с "клиентской" ф-ции на "серверную"... Помогите в этом, будьте добры. Уже разобрался, отбой. В сдк в параметрах объекта убрал галку can_switch_offline. Изменено 30 Июля 2016 пользователем BoBaH_671 Ранее был известен под ником BoBaH_671. Ссылка на комментарий
UnLoaded 313 Опубликовано 30 Июля 2016 Поделиться Опубликовано 30 Июля 2016 В сдк в параметрах объекта убрал галку can_switch_offline. Костыль сделал... Если ящик будет на локации, отличной от той, где сейчас ГГ(актер) то опять не сработает. А переделка ф-ции(а еще лучше написание собственной) состоит в использовании уже подсказанного выше: local sim = alife() soBox = sim:story_object(62333) Этот код вернет серверный объект ящика, который существует всегда, не зависимо от того на какой локации относительно загруженной находится и попал ли в он-лайн радиус. Ссылка на комментарий
KitkaT.Net 2 Опубликовано 1 Августа 2016 Поделиться Опубликовано 1 Августа 2016 А как в функцию добавить паузу? Чтобы следующее например отключение инфопоршня произошло через секунду после его получения? give_info("zamer_dozimetr") ???????????????????????????? disable_info("zamer_dozimetr") Добавлено Kirgudu, 2 Августа 2016 Перенёс из «общих вопросов программирования» Ничто не вечно под луной. Ссылка на комментарий
Kondr48 314 Опубликовано 1 Августа 2016 Поделиться Опубликовано 1 Августа 2016 Таймеры использовать. Например отсюда:http://www.amk-team.ru/forum/topic/13216-sborochnyj-tcekh/?p=971137 Вообще есть что-то штатное через level.add_call если не ошибаюсь, но я не помню как это использовать. P.S. но я вообще не понимаю, зачем давать поршень и забирать его через секунду. 1 Ссылка на комментарий
Kirgudu 1 217 Опубликовано 2 Августа 2016 Поделиться Опубликовано 2 Августа 2016 @KitkaT.Net, local toggle_time = 0 function test_pause() give_info("zamer_dozimetr") toggle_time = time_global() + 1000 level.add_call( function() return time_global() > toggle_time end, -- условие срабатывания function() disable_info("zamer_dozimetr") end -- выполняется, если условие равно true ) end 1 1 1 1 Инструмент Ссылка на комментарий
Kondr48 314 Опубликовано 2 Августа 2016 Поделиться Опубликовано 2 Августа 2016 Как заспавнить тайник скриптом? Причем чтобы все данные о нём в этом же скрипте и указать (визуал и наполнение) Ссылка на комментарий
KitkaT.Net 2 Опубликовано 2 Августа 2016 Поделиться Опубликовано 2 Августа 2016 @Kondr48, пытаюсь запилить миссию в которой нужно некоторое время простоять в рестрикторе для замера радиации. Начало замера производится при помощи использования предмета в инвентаре. 1 Ничто не вечно под луной. Ссылка на комментарий
Overfirst 631 Опубликовано 2 Августа 2016 Поделиться Опубликовано 2 Августа 2016 (изменено) @KitkaT.Net, я же тебе приводил пример, когда при юзании предмета выдается поршень. То есть сделай такую логику: [logic] active = sr_idle [sr_idle] on_info = {+check_your_info =actor_in_zone(имя_рестриктора)} sr_idle@timer ;-- check_your_info - это тот самый поршень, который ты выдаешь при юзе предмета и проверяем нахождение актора в нужной зоне. [sr_idle@timer] on_timer = 30000 | sr_idle@nil %+your_timer_complete% on_info = {!actor_in_zone(имя_рестриктора)} sr_idle ;-- а тут если актор вышел из зоны до истечения времени, логика возвращается в первую секцию. Это если тебе нужно. То есть мы проверяем наличие поршня после использования и наличие актора в нужной зоне. Можно использовать схему sr_timer, в ней на худ будет выводится время. Изменено 2 Августа 2016 пользователем BoBaH_671 1 Ранее был известен под ником BoBaH_671. Ссылка на комментарий
dPlayer 499 Опубликовано 3 Августа 2016 Поделиться Опубликовано 3 Августа 2016 (изменено) Как повторить подряд n раз ф-цию? Нужно заспавнить n трупов. Устраивает, просто забыл поставить end для for function spawn_dead_mil_esc() local obj=alife():create("mil_spetsnaz",vector():set(341.901,15.535,-16.927),585673,2) obj:on_death() end Подскажите функцию, которая выполняется при подборе одного из предметов в списке. Изменено 4 Августа 2016 пользователем dPlayer Добавлено Kirgudu, 3 Августа 2016 for i=1,n do func() end чем-то не устраивает? Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 5 Августа 2016 Поделиться Опубликовано 5 Августа 2016 (изменено) Добрый день. Сделал меню: class "gui_ryukzak" (CUIScriptWnd) function gui_ryukzak:__init() super() self:InitControls() self:InitCallBacks() end function gui_ryukzak:__finalize() end function gui_ryukzak:InitControls() local xml = CScriptXmlInit() self:Init(0,0,1024,768) xml:ParseFile("ui_gui_ryukzak.xml") self.fon = xml:InitStatic("fon", self) self:Register(xml:Init3tButton("fon:button_add", self.fon), "button_add") self:Register(xml:Init3tButton("fon:button_exit", self.fon), "button_exit") self:Register(xml:Init3tButton("fon:button_open", self.fon), "button_open") self.Text_1 = xml:InitStatic("fon:Text_1", self.fon) self.Text_2 = xml:InitStatic("fon:Text_2", self.fon) self.Text_3 = xml:InitStatic("fon:Text_3", self.fon) self.global_text = xml:InitStatic("fon:global_text", self.fon) end function gui_ryukzak:InitCallBacks() self:AddCallback("button_add", ui_events.BUTTON_CLICKED, self.button_add_button_clicked, self) self:AddCallback("button_exit", ui_events.BUTTON_CLICKED, self.button_exit_button_clicked, self) self:AddCallback("button_open", ui_events.BUTTON_CLICKED, self.button_open_button_clicked, self) end Как мне открыть это меню? Знаю что как-то так: if dik == DIK_keys.DIK_Q then self:...() Так же, как мне его закрыть? Изменено 5 Августа 2016 пользователем Kober(BRUC) Ссылка на комментарий
naxac 2 447 Опубликовано 5 Августа 2016 Поделиться Опубликовано 5 Августа 2016 (изменено) @Kober(BRUC), в ТЧ открыть: level.start_stop_menu(gui_ryukzak(), true) Закрыть внутри класса: self:GetHolder():start_stop_menu(self, true) В ЗП: открыть: gui_ryukzak():ShowDialog() закрыть внутри класса: self:HideDialog() Изменено 5 Августа 2016 пользователем naxac 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Карлан 1 049 Опубликовано 6 Августа 2016 Поделиться Опубликовано 6 Августа 2016 Как заспавнить тайник скриптом? Причем чтобы все данные о нём в этом же скрипте и указать (визуал и наполнение) Вопрос некорректный. Данные разнообразны, в частности даже визуал и наполнение, первое это серверная часть, второе это клиентская часть. Можно сделать несколько секций с нужными тебе визуалами, либо сделать метод и ассоциировать его с чем либо. По второму жди пока тайник выйдет в онлайн и забрасывай все что тебе нужно. Рекомендую посмотреть мою реализацию "съемных" рюкзаков, пока там именно так и сделано. Есть планы написать в движке универсального обладателя инвентаря, которого можно носить с собой, при таком подходе будет гораздо удобнее трансферить (в целом вся работа будет проходить лучше) и кода будет меньше. На выходе должен будет получится такой физический инвентарный ящик. Ссылка на комментарий
Kondr48 314 Опубликовано 6 Августа 2016 Поделиться Опубликовано 6 Августа 2016 Карлан, так а где можно посмотреть? . У вас достаточно интересных решений но кроме видео я так ничего и не находил. Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 Есть поле в которое можно ввести текст: function start_game:name_GetText() return self.name:GetText() end Как это работает? Как мне вывести эту информацию(которая была вписана в это текстовое поле игроком) в, например, локальную переменную txt_set: local txt_set = "" Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти