злойлеший 0 Опубликовано 29 Июля 2016 Поделиться Опубликовано 29 Июля 2016 Всем доброго времени суток. В чистую ТЧ сделал себе, по статьям из вики, спальник и ремкомплект. По отдельности они работают без проблем, но при соединении в одну геймдату работает только спальник. Совместно ими используется только bind_stalker.script. function init (obj) xr_motivator.AddToMotivator(obj)endfunction actor_init (npc)npc:bind_object(actor_binder(npc))endlocal game_difficulty_by_num = {[0] = "gd_novice",[1] = "gd_stalker",[2] = "gd_veteran",[3] = "gd_master"}lasthealth = 0lasttime = 0post_process = 0local weapon_hide = false----------------------------------------------------------------------------------------------------------------------class "actor_binder" (object_binder)----------------------------------------------------------------------------------------------------------------------function actor_binder:__init (obj) super(obj)self.bCheckStart = falseself.weather_manager = level_weathers.WeatherManager()self.actor_detector = xr_detector.actor_detector()end----------------------------------------------------------------------------------------------------------------------function actor_binder:net_spawn(data)printf("actor net spawn")level.show_indicators()self.bCheckStart = trueself.weapon_hide = false -- спрятано или нет оружие при разговоре.weapon_hide = false -- устанавливаем глобальный дефолтовый флаг.if object_binder.net_spawn(self,data) == false thenreturn falseenddb.add_actor(self.object)if self.st.disable_input_time == nil thenlevel.enable_input()endself.weather_manager:reset()-- game_stats.initialize ()if(actor_stats.add_to_ranking~=nil)thenactor_stats.add_to_ranking(self.object:id())end--' Загружаем настройки дропаdeath_manager.init_drop_settings()return trueend----------------------------------------------------------------------------------------------------------------------function actor_binder:net_destroy()if(actor_stats.remove_from_ranking~=nil)thenactor_stats.remove_from_ranking(self.object:id())end-- game_stats.shutdown ()db.del_actor(self.object)sr_light.clean_up ()self.object:set_callback(callback.inventory_info, nil)self.object:set_callback(callback.article_info, nil)self.object:set_callback(callback.on_item_take, nil)self.object:set_callback(callback.on_item_drop, nil)--self.object:set_callback(callback.actor_sleep, nil)self.object:set_callback(callback.task_state, nil)self.object:set_callback(callback.level_border_enter, nil)self.object:set_callback(callback.level_border_exit, nil)self.object:set_callback(callback.take_item_from_box, nil)self.object:set_callback(callback.use_object, nil)if sr_psy_antenna.psy_antenna thensr_psy_antenna.psy_antenna:destroy()sr_psy_antenna.psy_antenna = falseendxr_sound.stop_all_sound_object()object_binder.net_destroy(self)end----------------------------------------------------------------------------------------------------------------------function actor_binder:reinit()object_binder.reinit(self)local npc_id = self.object:id()db.storage[npc_id] = { }self.st = db.storage[npc_id]self.st.pstor = nilself.next_restrictors_update_time = -10000self.object:set_callback(callback.inventory_info, self.info_callback, self)self.object:set_callback(callback.article_info, self.article_callback, self)self.object:set_callback(callback.on_item_take, self.on_item_take, self)self.object:set_callback(callback.on_item_drop, self.on_item_drop, self)self.object:set_callback(callback.trade_sell_buy_item, self.on_trade, self) -- for game stats--self.object:set_callback(callback.actor_sleep, self.sleep_callback, self)self.object:set_callback(callback.task_state, self.task_callback, self)--self.object:set_callback(callback.map_location_added, self.map_location_added_callback, self)self.object:set_callback(callback.level_border_enter, self.level_border_enter, self)self.object:set_callback(callback.level_border_exit, self.level_border_exit, self)self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self)self.object:set_callback(callback.use_object, self.use_object, self)self.object:set_callback(callback.use_object, self.repair_outfit_start, self)end----------------------------------------------------------------------------------------------------------------------function actor_binder:take_item_from_box(box, item)local story_id = box:story_id()if story_id == nil thenreturnendtreasure_manager.take_item_from_box(box, story_id)--[[local respawner = se_respawn.get_respawner_by_parent(story_id)if respawner == nil thenreturnend--' Необходимо уменьшить счетчик в респавнереrespawner:remove_spawned(item:id())local smart_terrain = db.strn_by_respawn[respawner:name()]if smart_terrain == nil thenreturnendlocal npc = smart_terrain.gulag:get_nearest_online_obj(db.actor:position())if npc ~= nil thenxr_sound.set_sound_play(npc, "reac_box")xr_gulag.setGulagEnemy(smart_terrain:name() , db.actor)end]]end----------------------------------------------------------------------------------------------------------------------function actor_binder:level_border_enter(npc, info_id)self.actor_detector:actor_enter()end----------------------------------------------------------------------------------------------------------------------function actor_binder:level_border_exit(npc, info_id)self.actor_detector:actor_exit()end----------------------------------------------------------------------------------------------------------------------function actor_binder:info_callback(npc, info_id)printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id)--' Сюжетlevel_tasks.proceed(self.object)-- Отметки на картеlevel_tasks.process_info_portion(info_id)end----------------------------------------------------------------------------------------------------------------------function actor_binder:on_trade (item, sell_bye, money)if sell_bye == true thengame_stats.money_trade_update (money)elsegame_stats.money_trade_update (-money)endend----------------------------------------------------------------------------------------------------------------------function actor_binder:article_callback(npc, group, name)--printf("article_callback [%s][%s]", group, name)if device().precache_frame >1 then return endif group == "Diary" thennews_manager.send_encyclopedy("diary", group)elsenews_manager.send_encyclopedy("encyclopedy", group)endend----------------------------------------------------------------------------------------------------------------------function actor_binder:on_item_take (obj)level_tasks.proceed(self.object)--game_stats.update_take_item (obj, self.object)end----------------------------------------------------------------------------------------------------------------------function actor_binder:on_item_drop (obj)level_tasks.proceed(self.object)--game_stats.update_drop_item (obj, self.object)endfunction actor_binder:use_obj(obj)main_sleep.sleep(obj)end----------------------------------------------------------------------------------------------------------------------function actor_binder:task_callback(_task, _objective, _state)task_manager.task_callback(_task:get_id(), _objective:get_idx(), _state)if _objective:get_idx() == 0 thenif _state == task.fail thennews_manager.send_task(db.actor, "fail", _task, _objective)elseif _state == task.completed thentask_manager.reward_by_task(_task)news_manager.send_task(db.actor, "complete", _task, _objective)elsenews_manager.send_task(db.actor, "new", _task, _objective)endelseif _task:get_objective(0):get_state() == task.in_progress thennews_manager.send_task(db.actor, "update", _task, _objective)endendend----------------------------------------------------------------------------------------------------------------------function actor_binder:map_location_added_callback(spot_type_str, object_id)if (false==app_ready()) or (device().precache_frame>1) then return end--'news_manager.send_task(db.actor, "new")end----------------------------------------------------------------------------------------------------------------------function actor_binder:update(delta)object_binder.update(self, delta)-- DEBUG slowdown-- slowdown.update()local time = time_global()game_stats.update (delta, self.object)show_time.show_time()-- апдейт погодыself.weather_manager:update()-- апдейт схемы детектораself.actor_detector:update()-- апдейт звуковой схемы актераxr_sound.update_actor()--' Проверка потери жизни--[[if self.object.health - lasthealth > 0.001 orself.object.health - lasthealth < -0.001 thenprintf("%f | %f", self.object.health, self.object.health - lasthealth, game.time() - lasttime)lasthealth = self.object.healthlasttime = game.time()end]]-- Обновление отключения ввода с клавиатуры.if self.st.disable_input_time ~= nil andgame.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idlethenlevel.enable_input()self.st.disable_input_time = nilend-- Обновление сна с переносом чувака в указанную позициюif self.st.sleep_relocate_time ~= nil andgame.get_game_time():diffSec(self.st.sleep_relocate_time) >= self.st.sleep_relocate_idlethenself.object:set_actor_position(self.st.sleep_relocate_point)local dir = self.st.sleep_relocate_point:sub(self.st.sleep_relocate_look)self.object:set_actor_direction(dir:getH())self.st.sleep_relocate_time = nilend-- Апдейт прятание оружия игрока во время диалогаif weapon_hide == true or self.object:is_talking() thenif self.weapon_hide == false thenself.object:hide_weapon()self.weapon_hide = trueendelseif self.weapon_hide == true thenself.object:restore_weapon()self.weapon_hide = falseendend-- обновление рестрикторов, которые под логикой, срабатывает через интервалы времениif self.next_restrictors_update_time < time thenbind_restrictor.actor_update(delta)self.next_restrictors_update_time = time + 200task_manager.actor_update()end-- обновление постпроцессовif post_process ~= 0 thenif post_process:update () == true thenpost_process = 0endend-- обновление пси-антенныif sr_psy_antenna.psy_antenna thensr_psy_antenna.psy_antenna:update(delta)end--' Вывод сообщения о большой радиацииif self.object.radiation >= 0.7 thenlocal hud = get_hud()local custom_static = hud:GetCustomStatic("cs_radiation_danger")if custom_static == nil thenhud:AddCustomStatic("cs_radiation_danger", true)hud:GetCustomStatic("cs_radiation_danger"):wnd():SetTextST("st_radiation_danger")endelselocal hud = get_hud()local custom_static = hud:GetCustomStatic("cs_radiation_danger")if custom_static ~= nil thenhud:RemoveCustomStatic("cs_radiation_danger")endendif self.bCheckStart thenprintf("SET DEFAULT INFOS")if not has_alife_info("storyline_actor_start") and(level.name() == "l01_escape")thenself.object:give_info_portion("storyline_actor_start")_G.g_start_avi = trueprintf("*AVI* RUN START AVI")end-- if not has_alife_info("encyclopedy") then-- self.object:give_info_portion("encyclopedy")-- endif not has_alife_info("global_dialogs") thenself.object:give_info_portion("global_dialogs")endif not has_alife_info("level_changer_icons") thenself.object:give_info_portion("level_changer_icons")endlevel_tasks.add_lchanger_location()self.bCheckStart = falseend--autosave.save_update()end----------------------------------------------------------------------------------------------------------------------function actor_binder:save(packet)local save_treasure_manager = trueprintf("actor_binder:save(): self.object:name()='%s'", self.object:name())object_binder.save(self, packet)--' Сохраняем уровень сложностиif save_treasure_manager == true thenpacket:w_u8(level.get_game_difficulty() + 128)elsepacket:w_u8(level.get_game_difficulty())end--' Сохраняем данные об отключенном вводеif self.st.disable_input_time == nil thenpacket:w_bool(false)elsepacker:w_bool(true)utils.w_CTime(packet, self.st.disable_input_time)endxr_logic.pstor_save_all(self.object, packet)self.weather_manager:save(packet)sr_psy_antenna.save( packet )if save_treasure_manager == true thentreasure_manager.save(packet)endtask_manager.save(packet)self.actor_detector:save(packet)end----------------------------------------------------------------------------------------------------------------------function actor_binder:load(reader)printf("actor_binder:load(): self.object:name()='%s'", self.object:name())object_binder.load(self, reader)printf("actor_binder:object_binder.load(): self.object:name()='%s'", self.object:name())--' Загружаем уровень сложностиlocal game_difficulty = reader:r_u8()local load_treasure_manager = falseif game_difficulty >= 128 thengame_difficulty = game_difficulty - 128load_treasure_manager = trueendget_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty])if reader:r_eof() thenabort("SAVE FILE IS CORRUPT")endlocal stored_input_time = reader:r_u8()if stored_input_time == true thenself.st.disable_input_time = utils.r_CTime(reader)endxr_logic.pstor_load_all(self.object, reader)self.weather_manager:load(reader)sr_psy_antenna.load(reader)if load_treasure_manager == true thentreasure_manager.load(reader)endtask_manager.load(reader)self.actor_detector:load(reader)endfunction actor_binder:repair_outfit_start(obj, who)if obj thenif obj:section() == "abc_repair" thenremkomplekt.action_repair()endendend------------------------------------------------------------------------------------------------------------------------старт префетча звуков--if string.find(command_line(), "-noprefetch") == nil then-- sound_prefetch.prefetch_sounds()--end-- Weapon functionsfunction hide_weapon()weapon_hide = trueendfunction restore_weapon()weapon_hide = falseend// this is test for section iteration/**local function test_section_iteration(file_name, section_name)printf ("file : %s",file_name)printf ("section : %s",section_name)local file = ini_file(file_name)local n = file:line_count(section_name)printf ("lines : %d",n)local id, value = "", "", resultfor i=0,n-1 doresult, id, value = file:r_line(section_name,i,"","")printf ("line %d : %s = %s",i,id,value)endendtest_section_iteration("system.ltx","space_restrictor")/**/ Вопрос как их заставить работать в одном моде? Ссылка на комментарий
Kondr48 314 Опубликовано 29 Июля 2016 Поделиться Опубликовано 29 Июля 2016 (изменено) self.object:set_callback(callback.use_object, self.use_object, self) self.object:set_callback(callback.use_object, self.repair_outfit_start, self) А чего вы для одного колбека делаете две разные функции? Оставьте только первое. self.object:set_callback(callback.use_object, self.use_object, self) Потом ищите свою функцию use_object (она у вас почему-то use_obj называется), где спальник прописан и переносите кусочек, который отвечает за ремкоплект из функции repair_outfit_start в use_object. Вот так: function actor_binder:use_object(obj) main_sleep.sleep(obj) if obj:section() == "abc_repair" then remkomplekt.action_repair() end end function actor_binder:use_obj(obj) main_sleep.sleep(obj) end function actor_binder:repair_outfit_start(obj, who) if obj then if obj:section() == "abc_repair" then remkomplekt.action_repair() end end end P.S. А вообще старайтесь думать. Потому что в bind_stalker справки внесены совсем без понимания. Изменено 29 Июля 2016 пользователем Kondr48 1 Ссылка на комментарий
Overfirst 630 Опубликовано 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 630 Опубликовано 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 176 Опубликовано 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 630 Опубликовано 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 434 Опубликовано 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 421 Опубликовано 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 Как заспавнить тайник скриптом? Причем чтобы все данные о нём в этом же скрипте и указать (визуал и наполнение) Вопрос некорректный. Данные разнообразны, в частности даже визуал и наполнение, первое это серверная часть, второе это клиентская часть. Можно сделать несколько секций с нужными тебе визуалами, либо сделать метод и ассоциировать его с чем либо. По второму жди пока тайник выйдет в онлайн и забрасывай все что тебе нужно. Рекомендую посмотреть мою реализацию "съемных" рюкзаков, пока там именно так и сделано. Есть планы написать в движке универсального обладателя инвентаря, которого можно носить с собой, при таком подходе будет гораздо удобнее трансферить (в целом вся работа будет проходить лучше) и кода будет меньше. На выходе должен будет получится такой физический инвентарный ящик. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти