vampirnik77 121 Опубликовано 22 Августа 2015 Поделиться Опубликовано 22 Августа 2015 И такой еще вопрос, как можно сделать, что бы функция отрабатывалась в следующем апдейте, тоесть вызов происходит в апдейте 1, а отрабатываеться функция в апдейте 2 Официальная страница проекта Neof-One Crew Ссылка на комментарий
dsh 3 824 Опубликовано 22 Августа 2015 Поделиться Опубликовано 22 Августа 2015 @vampirnik77, самое первое решение, приходящее в голову: на первом апдейте поставить флажок и ничего не делать, а на втором апдейте проверить флажок, сделать что надо и сбросить его. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 22 Августа 2015 Поделиться Опубликовано 22 Августа 2015 local myfunc_call = 1 function myfunc() if myfunc_call == 1 then myfunc_call = 2; return end myfunc_call = 1 ... end Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Shredder 49 Опубликовано 22 Августа 2015 Поделиться Опубликовано 22 Августа 2015 (изменено) -- Вызывает вункцию func спустя n апдейтов function wait_call(func, n) local counter = n or 1 level.add_call( function() if counter == 0 then return true end counter = counter - 1 return false end, func ) end Изменено 22 Августа 2015 пользователем Shredder 1 Ссылка на комментарий
Zander_driver 10 333 Опубликовано 22 Августа 2015 Поделиться Опубликовано 22 Августа 2015 Конечно можно, берёшь исходники и вперёд. Иначе никак Вообще-то есть другой вполне рабочий вариант. Он даже уже выложен, правда без инструкций. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
RayTwitty 492 Опубликовано 22 Августа 2015 Поделиться Опубликовано 22 Августа 2015 -- Вызывает вункцию func спустя n апдейтовХех, я практически тоже самое делал себе)) function _G.parked_call(action, ...) local args = {...} local x = 2 level.add_call( function() x = x - 1 return x == 0 end, function() loadstring("return function(args) "..action.."(unpack(args)) end")()(args) end ) end Ссылка на комментарий
Shredder 49 Опубликовано 22 Августа 2015 Поделиться Опубликовано 22 Августа 2015 Вообще-то есть другой вполне рабочий вариант. Он даже уже выложен, правда без инструкций. А может не будем голословны? Исходники передо мной и там не предусмотрено добавление пунктов из скриптов или конфигов. Ссылка на комментарий
Zander_driver 10 333 Опубликовано 22 Августа 2015 Поделиться Опубликовано 22 Августа 2015 А может не будем слепы? Мои скрипты тоже передо мной и я при желании добавляю какие угодно пункты к списку команд. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Shredder 49 Опубликовано 22 Августа 2015 Поделиться Опубликовано 22 Августа 2015 А толку то с твоих постов? Даже если и есть возможность, ты же этот способ не показал. Поэтому пока ты голословен Ссылка на комментарий
Zander_driver 10 333 Опубликовано 22 Августа 2015 Поделиться Опубликовано 22 Августа 2015 (изменено) Ах вот как, ну окей. Показать видео - не считается за "показать". Выложить код, пусть сырой - не считается за "показать" Надо выложить код не сырой а готовый, со всеми пояснениями Ладно, это я пока не сделал. Значит голословен. Изменено 22 Августа 2015 пользователем Zander_driver Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Shredder 49 Опубликовано 22 Августа 2015 Поделиться Опубликовано 22 Августа 2015 (изменено) Ни видео, ни сырой код я не видел Изменено 22 Августа 2015 пользователем Shredder Ссылка на комментарий
Zander_driver 10 333 Опубликовано 22 Августа 2015 Поделиться Опубликовано 22 Августа 2015 Ну вот поэтому я вас и называю слепым Код в прозекторской, видео... попробуйте сами догадаться где. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Shredder 49 Опубликовано 22 Августа 2015 Поделиться Опубликовано 22 Августа 2015 Так бы и написал, что полностью скриптовый инвентарь. Ссылки то сразу дать религия не позволяет? Для меня этот вариант вообще не вариант. Не доверяю я программистам, которые пишут в один файл овер 30000 строк кода. А возвращаясь к исходному вопросу: "... можно ли добавить в это меню свой пункт?", брать исходники и добавлять, иначе никак Ссылка на комментарий
Zander_driver 10 333 Опубликовано 22 Августа 2015 Поделиться Опубликовано 22 Августа 2015 Ссылки то сразу дать религия не позволяет? Ссылка на тему разработки у меня в подписи. ссылку на сырой код? не вижу в нем большой ценности Когда к файлу будут инструкции, число строк в нем перестанет смущать а пока да. Все остается так же. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
antihumanist 0 Опубликовано 23 Августа 2015 Поделиться Опубликовано 23 Августа 2015 (изменено) Немогу понять почему не работает скрипт.По задумки при сбросе рюкзака он должен заполнятся инвентарем актора, делаю для теста что-бы понять как это все потом сделать в другом моде. файл bind_stalker.script function actor_binder:update(delta) object_binder.update(self, delta) -- DEBUG slowdown -- slowdown.update() local time = time_global() game_stats.update (delta, self.object) --*************************************************** -->>Treasure rucksack 1/2--- вот рабочий код сбрасываемого рюкзака, брал из википедии сталкера, этот код работает поэтому полностью его не привожу if self.rr_id~=nil then--то что мы записали при дропе -- пытаемся получить объект по id local se_obj=alife():object(self.rr_id) -- проверяем, что объекта нет if se_obj==nil or se_obj:section_name()~="inv_ruck" then local ruck=alife():create("active_ruck", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id()) level.map_add_object_spot_ser(ruck.id, "red_location", "%c[255,238,155,23]Моя нычка для хабара") news_manager.send_tip(db.actor, "Тайник заложен.", nil, nil, 5000) --obj_ruck = ruck--это типа переменной для теста с таймером --Start_Timer_5_minutes()--подумал что может не успевает отработать, но с таймером та-же байда my_mod.push_all(ruck) --вот та функция которая ЗДЕСЬ не работает, но работает в другом месте, не пойму что не так end -- сбросим переменную self.rr_id=nil end --Timer_N_minutes()--пробовал типа по таймеру вызывать, все так-же не работает --<< --*************************************************** -- апдейт погоды дальше все стандартно ... Если сделать так, то рюкзак сбрасывается но походу после my_mod.push_all(ruck) ничего не работает :-( игра не вылетает но повторно скрипт уже не срабатывает как нужно, с таймером пробовал но все так-же.Код таймера не привожу так как там по сути все то-же самое только вызывается с задержкой. Из my_mod.script Функция заимствована из скрипта арены там где телепортирует актера на арену а все вещи складываются в ящик. local function transfer_object_item(item) db.actor:transfer_item(item, in_object) end function push_all(obj) in_object = obj db.actor:inventory_for_each(transfer_object_item) end Эту функцию я тестировал с модовым рюкзаком вызывая ее из калбека когда перс забирает предмет(ы) из ящика и там она работает function actor_binder:take_item_from_box(box, item)-- --my_mod.push_all(obj)--вот так она работает, при перемещении чего либо из ящика срабатывает калбак, инвентарь актора перемещается в ящик, то что мы оттуда забрали перемещается в инвентарь так как и должно по коду игры. --my_mod.Message("take_item_from_box")--типа сообщение для информирования Изменено 23 Августа 2015 пользователем antihumanist Ссылка на комментарий
Charsi 440 Опубликовано 23 Августа 2015 Поделиться Опубликовано 23 Августа 2015 @antihumanist, у тебя ruck это серверный объект, а в transfer_item нужно передавать клиентский. 1 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
antihumanist 0 Опубликовано 23 Августа 2015 Поделиться Опубликовано 23 Августа 2015 antihumanist, у тебя ruck это серверный объект, а в transfer_item нужно передавать клиентский. Хм а получить его как ? в справочнике из очевидного не нашел Ссылка на комментарий
Shredder 49 Опубликовано 23 Августа 2015 Поделиться Опубликовано 23 Августа 2015 level.object_by_id(ruck.id), но вызвать нужно будет на следующем апдейте, т.к. в этом онлайновый объект ещё не появится Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 23 Августа 2015 Поделиться Опубликовано 23 Августа 2015 Точнее - проверять, пока не появился. Закладываться на фиксированное время - плохо. Дабы не тормозило - см. про управление апдейтами (тысячи их !) Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
antihumanist 0 Опубликовано 23 Августа 2015 Поделиться Опубликовано 23 Августа 2015 (изменено) Точнее - проверять, пока не появился Ура работает ! спасибо ! --*********************************************************************** --Код тестовый и по хорошему его нужно переделать, но для теста пойдет и так local iTimer --переменная времени для таймера(никто не мешает использовать ее как простой флаг) local obj_ruck-- серверный обдж рюкзака, тут думаю лучше передавать сразу ид, но для теста сойдет function Start_Timer_5_minutes() iTimer = --[[time_global() +]] 300 --тут закоментирован код таймера, просто устанавлевается флаг end function Timer_N_minutes() -- таймер переделанный в функцию проверки на существование, в апдейте if iTimer ~= nil --[[and iTimer < time_global()]] then local c_ruck = level.object_by_id(obj_ruck.id)--поидее если объект не нашелся то его нет(работает) if c_ruck then my_mod.push_all(c_ruck) iTimer = nil--убираем флаг или обнуляем таймер end end 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) --*************************************************** -->>Treasure rucksack 1/2 if self.rr_id~=nil then--то что мы записали при дропе -- пытаемся получить объект по id local se_obj=alife():object(self.rr_id) -- проверяем, что объекта нет if se_obj==nil or se_obj:section_name()~="inv_ruck" then local ruck=alife():create("active_ruck", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id()) level.map_add_object_spot_ser(ruck.id, "red_location", "%c[255,238,155,23]Моя нычка для хабара") news_manager.send_tip(db.actor, "Тайник заложен.", nil, nil, 5000) obj_ruck = ruck--передаем в переменную Start_Timer_5_minutes()--ставим флаг или таймер --my_mod.push_all(level.object_by_id(ruck.id))--тут работать не будет end -- сбросим переменную self.rr_id=nil end Timer_N_minutes()--выполняем таймер/функцию апдейта состояния рюкзака --<< --*************************************************** -- апдейт погоды Тогда еще пара вопросов уж простите.Делаю фан мод и сборку из чужих скриптов для этого мода и поэтому вопросы совершенно разные. Сделал ремонтные наборы, но столкнулся со странным багом, не совсем понимаю его природу. суть его в том что когда я вызываю подряд две функции на съедание одного и того-же предмета то последняя функция не выполняется и дает глюки, точно так-же с вызовом удаления предмета. Все обернуто в функцию которая вызывается из колбека self.object:set_callback(callback.use_object, self.repair_start, self) function actor_binder:repair_start(obj, who) my_mod.Message("use_object") if obj then main_sleep.sleep(obj) if obj:section() == "repair_kit_outfit" then --здесь указываем предмет, при использовании которого будет срабатывать функция ниже exp_mod.action_repair() --тут функции которые не учавствуют в тесте и уже тестироваись elseif obj:section() == "repair_kit" then exp_mod.repair_all() elseif obj:section() == "repair_kit_wpn" then exp_mod.repair_wpn() --второй вариант ремонта elseif obj:section() == "repair_kit_device" then--вот отсюда вызываю exp_mod.repair_device() elseif obj:section() == "repair_kit_wpn2" then exp_mod.repair_wpn2() elseif obj:section() == "repair_kit_outfit2" then exp_mod.repair_outfit2() end end end --Короче говоря в моде есть три "съедобных" итема ящик с инструментами и ремкомплекты один для брони и другой для оружия, когда игрок пытается съесть ящик с инструментами то выполняется эта функция, которая по задумке должна ремонтировать все во всех слотах при этом съедая/удаляя из инвентаря расходники ремкомплектов. но оставляя инструменты.Не работает когда я пытаюсь вызвать подряд две функции съедания/удаления одного вида предмета.Ремкомплекты так-же обрабатываются при употреблении в пищу, с расчетом одна еденица ремкомплекта на одну еденицу брони/оружия в слоте.С оружием работают последовательно что сделанно для удобства ремонта чего-то одного а не всего сразу. --repair_item_in_slot(num) -- это моя функция ремонта, переделанная, с википедии сталкера, к ней нет нареканий --Она проверяет слот num и возвращает true если предмет был отремонтирован, если в слоте пусто или предмет не того состояния которого требуется для ремонта или еще что не так то возвращает false, так-же информирует игрока. function repair_device()--ящик с инструментами repair_kit_device, функция в которой должно ремонтироваться все что в слотах(сразу) local actor = db.actor local kit_outfit2 = actor:object("repair_kit_outfit2")--ремкомплект для костюма alife():create("repair_kit_device", vector(),0,0,0)--cпавним сразу как съели, хотя работало и если поместить в конец. if kit_outfit2 then--проверяем наличие расходника для ремонта в инвентаре актора --db.actor:eat(db.actor:object("repair_kit_outfit2")) --можно его сразу тупо съесть if repair_item_in_slot(6) then --тогда этот код здесь не нужен, он запустися в биндере при "поедании" "repair_kit_outfit2" alife():release(alife():object(kit_outfit2:id()), true)--и этот код будет то-же не нужен end-- end--конец ремонта костюма local kit_wpn2 = actor:object("repair_kit_wpn2")--ремкомплект для оружия, поидее тут я хочу отремонтировать сразу все стволы, т.е. два слота 1 и 2 поэтому делаю два раза одно и то-же. if kit_wpn2 then --db.actor:eat(db.actor:object("repair_kit_wpn2"))можно место удаления съедать, но у меня так не работало для двух одинаковых предметов сразу и я решил переделать if repair_item_in_slot(2) then alife():release(alife():object(kit_wpn2:id()), true) end end --Если раскомментировать код ниже, то он работать не будет ! но почему ? --kit_wpn2 = actor:object("repair_kit_wpn2")--Здесь еще раз инициализируется на случай если объект съеден/удален кодом выше --if kit_wpn2 then ----db.actor:eat(db.actor:object("repair_kit_wpn2"))--либо код жрачки либо код удаления --if repair_item_in_slot(1) then--при юзе кода жрачки не требуется --alife():release(alife():object(kit_wpn2:id()), true) --end --end end Изменено 24 Августа 2015 пользователем Kirgudu Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти