CRAZY_STALKER666 36 Опубликовано 6 Июля 2016 Поделиться Опубликовано 6 Июля 2016 @Nazgool, да, спасибо поставил. И да, разобрался, что это уникальный id. Выше постом расписали... За динамическое хранилище отдельное спасибо, всё прекрасно работает! Не соответствует правилам. Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 6 Июля 2016 Поделиться Опубликовано 6 Июля 2016 (изменено) Добрый день. Могут ли скрипты взаимодействовать с инфо поршнями? Например(извиняюсь что в таком виде, с телефона сижу): function функция_1() if инфо_поршень then функция_2() else функция_3() end function функция_3() инфо_поршень print("это пример") end function функция_2() print("еще пример действия") end Или можно переменные выдавать за место инфо поршней? Я пробовал в функции выдавать локальную переменную, но она работала только в этой функции. З.ы. Модераторы, исправьте пожалуйста вид сообщения, если не сложно.. Изменено 6 Июля 2016 пользователем Kober(BRUC) Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 6 Июля 2016 Поделиться Опубликовано 6 Июля 2016 @Kober(BRUC), всё очень просто! if db.actor:dont_has_info("bar_anom_spawn") then -- проверка на то, что поршня НЕТ --- end if db.actor:has_info("pass_true") then -- проверка на то, что ЕСТЬ. Полный код: if db.actor:has_info("pass_true") thenфункция_2()elseфункция_3()endfunction функция_3()db.actor:give_info_portion("gar_art_spawn") -- выдача поршняprint("это пример")endfunction функция_2()print("еще пример действия")end 1 Не соответствует правилам. Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 6 Июля 2016 Поделиться Опубликовано 6 Июля 2016 @CRAZY_STALKER666, а без инфо поршней все таки можно? С помощью переменных например? Что бы не только в Сталкере работало. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 6 Июля 2016 Поделиться Опубликовано 6 Июля 2016 (изменено) if db.actor:has_info( "инфо" )... актор при этом, естественно, должен быть. А смысл такие посты с телефона набирать ? С какими, простите, переменными ? И зачем ? И что значит - "не только в сталкере" ? Изменено 6 Июля 2016 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 6 Июля 2016 Поделиться Опубликовано 6 Июля 2016 @Kober(BRUC), local x = 1 if x == 1 then end Если я тебя правильно понял, то вот... Не соответствует правилам. Ссылка на комментарий
Outlaw 85 Опубликовано 7 Июля 2016 Поделиться Опубликовано 7 Июля 2016 Дурацкий вопрос, но спрошу. Добавил в "Radiation mod of foods" для зп соответствующее сообщение при окончательной (сильной) порче еды.Так как со скриптованием у меня плохо первый раз вставил команду не туда и сообщение после первой отправки начинало отправятся игроку бесконечное количество раз. со второй попытки получилось - но беда, при порче, например, 6 единиц - приходит 6 раз и тд. Помогите исправить... function spw_rad_high_food() if interval < time_global() thendb.actor:iterate_inventory(function (dummy,item)if items_rad_high[item:section()] thenthis.del_item(item)this.spawn_item(tostring(item:section().."_high"))news_manager.send_tip(db.actor, game.translate_string("tag_bad_food_tip")) (!!!вот кусок который добавил)endend, nil)interval = time_global() + 2000endend Ссылка на комментарий
Serge! 127 Опубликовано 7 Июля 2016 Поделиться Опубликовано 7 Июля 2016 (изменено) Помогите исправить... Может так? function spw_rad_high_food() if interval < time_global() then local st = true db.actor:iterate_inventory(function (dummy,item) if items_rad_high[item:section()] then this.del_item(item) this.spawn_item(tostring(item:section().."_high")) if st then news_manager.send_tip(db.actor, game.translate_string("tag_bad_food_tip")) (!!!вот кусок который добавил) st = false end end end, nil) interval = time_global() + 2000 end end Изменено 7 Июля 2016 пользователем Serge! Ссылка на комментарий
Outlaw 85 Опубликовано 7 Июля 2016 Поделиться Опубликовано 7 Июля 2016 @Serge!, не помогло. Оно ведь, судя по всему, работает циклично и заменяет предметы на порченые по одному. В конце функции заменяет одну "conserva_rad_average" на "conserva_rad_high", принимает "st = false", вроде сообщение уже не должно появится, переходит к следующей "conserva_rad_average" и снова - "local st = true" и по новой. По идее надо как то так: 1. Функция "Проверка условий(наличие продуктов и нужной радиации)" запуск 2. 2. Отдельная промежуточная функция на отправку одного сообщения, запуск 3. 3. Функция замены продукт_rad_average на продукт_rad_high. вот весь файл. ----------------------------------------------------------------------------------------------------------- -- Script: rad_items.-- Description: Scripting system of food contamination by radiation.-- Author: Tris.-- Version: 0.1.-- Date: 15.12.2011.-- Recent changes: 17.12.2011***12:34.-----------------------------------------------------------------------------------------------------------local items = {bread = true,kolbasa = true,conserva = true,}local items_rad_average = {bread_rad = true,kolbasa_rad = true,conserva_rad = true,}local items_rad_high = {bread_rad_average = true,kolbasa_rad_average = true,conserva_rad_average = true,}function rad_food()if db.actor.radiation >= 0.2 thenspw_rad_food()endendfunction rad_average_food()if db.actor.radiation >= 0.4 thenspw_rad_average_food()endendfunction rad_high_food()if db.actor.radiation >= 0.6 thenspw_rad_high_food()endendlocal interval = 0function spw_rad_food()if interval < time_global() thendb.actor:iterate_inventory(function (dummy,item)if items[item:section()] thenthis.del_item(item)this.spawn_item(tostring(item:section().."_rad"))endend, nil)interval = time_global() + 2000endendlocal interval = 0function spw_rad_average_food()if interval < time_global() thendb.actor:iterate_inventory(function (dummy,item)if items_rad_average[item:section()] thenthis.del_item(item)this.spawn_item(tostring(item:section().."_average"))endend, nil)interval = time_global() + 2000endendlocal interval = 0function spw_rad_high_food()if interval < time_global() thendb.actor:iterate_inventory(function (dummy,item)local st = trueif items_rad_high[item:section()] thenthis.del_item(item)this.spawn_item(tostring(item:section().."_high"))if st thennews_manager.send_tip(db.actor, game.translate_string("tag_bad_food_tip")) -- (!!!вот кусок который добавил)st = falseendendend, nil)interval = time_global() + 2000endendfunction spawn_item(item)alife():create(item, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())endfunction del_item(item)local obj = alife():object(item:id())alife():release(obj, true)end------------------------------------------------------------------------------------------------------------- Не удаляйте копирайды, указывайте настоящего автора(ов)-- и не выдавайте чужие идеи и их реализацию за свои. Ведь это элементарная-- этика модостроителей! Спасибо за понимание.----------------------------------------------------------------------------------------------------------- Ссылка на комментарий
naxac 2 447 Опубликовано 8 Июля 2016 Поделиться Опубликовано 8 Июля 2016 @Outlaw, ты не так скопировал. local st = true должно быть выше db.actor:iterate_inventory. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Outlaw 85 Опубликовано 8 Июля 2016 Поделиться Опубликовано 8 Июля 2016 @naxac, работает. Только не пойму как я строчки перепутал - вроде сразу все копировал... Мистика, однако... Хотя коментил свою фразу, чтобы не было вылета - может тогда и переставил случайно. Спасибо огромное. Ссылка на комментарий
Kondr48 314 Опубликовано 8 Июля 2016 Поделиться Опубликовано 8 Июля 2016 (изменено) Интересует способ определить с глушителем ли оружие в руках или нет? Оружие из которого стреляем, определяется: db.actor:active_item() из колбека на выстрел. Патч 1.0007 Изменено 8 Июля 2016 пользователем Kondr48 Ссылка на комментарий
UnLoaded 313 Опубликовано 8 Июля 2016 Поделиться Опубликовано 8 Июля 2016 определить с глушителем ли оружие в руках или нет? Движковой ф-ции для этого нет. Единственный вариант - получать нет-пакет, и в нем проверять наличие интересующих обвесов. Ссылка на комментарий
reviere 0 Опубликовано 10 Июля 2016 Поделиться Опубликовано 10 Июля 2016 Есть ли какой-то человеческий способ выводить информацию в консоль? Ссылка на комментарий
UnLoaded 313 Опубликовано 10 Июля 2016 Поделиться Опубликовано 10 Июля 2016 @reviere А какой способ, по твоему, не человеческий ? 1 Ссылка на комментарий
reviere 0 Опубликовано 10 Июля 2016 Поделиться Опубликовано 10 Июля 2016 (изменено) Забыл, что на зп уже присутствует пространство имен io и всю ночь искал способы вывода инфы в косноль окольными путями. Уже разобрался, спасибо. Изменено 10 Июля 2016 пользователем HellRatz Ссылка на комментарий
Zander_driver 10 334 Опубликовано 11 Июля 2016 Поделиться Опубликовано 11 Июля 2016 Нужна помощь знатоков работы с нетпакетом. В общем, прислали мне сейв, в котором нечто странное происходит с Сахаровым. Странное заключается в следующем: В xr_motivator в метод motivator_binder:load(reader) поставил такую ловушку ошибок: function motivator_binder:load(reader) self.loaded = true object_binder.load(self, reader) if reader:r_eof() then zander_log(self.object, reader) local sobj = alife():object(self.object:id()) local pa = m_net_utils.Get_NetPacket(sobj, 2) zander_log(pa) abort("SAVE FILE IS CORRUPT") end * * * Т.е. если читается что-то не то - выводим в лог, а что же там такое. И уже потом вылетаем. А там вот что: USERDATA; ;*game_object parameters { [KEY: STRING:gv] = VALUE: NUMBER:65535; [KEY: STRING:story_id] = VALUE: NUMBER:902; [KEY: STRING:clsid] = VALUE: NUMBER:34; [KEY: STRING:section] = VALUE: STRING:stalker_sakharov; [KEY: STRING:id] = VALUE: NUMBER:4991; [KEY: STRING:lv] = VALUE: NUMBER:4294967296; [KEY: STRING:position] = VALUE: STRING:x: 29.601; y: -11.7193; z: -272.26; } USERDATA; unknown userdata TABLE:; { [KEY: STRING:upd] = VALUE: TABLE:; Table value: { [KEY: STRING:s32u1] = VALUE: NUMBER:833817; [KEY: STRING:distance_to_point] = VALUE: NUMBER:1100498313; [KEY: STRING:group] = VALUE: NUMBER:1; [KEY: STRING:torso] = VALUE: USERDATA; [KEY: STRING:next_game_vertex_id] = VALUE: NUMBER:1480; [KEY: STRING:distance_from_point] = VALUE: NUMBER:1100498313; [KEY: STRING:prev_game_vertex_id] = VALUE: NUMBER:1480; [KEY: STRING:u8u2] = VALUE: NUMBER:0; [KEY: STRING:health] = VALUE: NUMBER:1; [KEY: STRING:model] = VALUE: NUMBER:-1.5781494379044; [KEY: STRING:squad] = VALUE: NUMBER:8; [KEY: STRING:start_dialog] = VALUE: STRING:hacker_dialog; [KEY: STRING:position] = VALUE: USERDATA; [KEY: STRING:team] = VALUE: NUMBER:9; } [KEY: STRING:class] = VALUE: STRING:yan_general_ecolog; [KEY: STRING:smtrid] = VALUE: NUMBER:65535; [KEY: STRING:object_flags] = VALUE: NUMBER:-1; [KEY: STRING:team] = VALUE: NUMBER:9; [KEY: STRING:killerid] = VALUE: NUMBER:65535; [KEY: STRING:visual_flags] = VALUE: NUMBER:0; [KEY: STRING:spawn_story_id] = VALUE: NUMBER:-1; [KEY: STRING:charname] = VALUE: STRING:Сахаров; [KEY: STRING:money] = VALUE: NUMBER:104537; [KEY: STRING:smtrtaskactive] = VALUE: NUMBER:0; [KEY: STRING:lvid] = VALUE: NUMBER:53540; [KEY: STRING:gvid] = VALUE: NUMBER:1480; [KEY: STRING:group] = VALUE: NUMBER:1; [KEY: STRING:game_death_time] = VALUE: TABLE:; Table value: { [KEY: NUMBER:1] = VALUE: NUMBER:0; [KEY: NUMBER:2] = VALUE: NUMBER:0; [KEY: NUMBER:3] = VALUE: NUMBER:0; [KEY: NUMBER:4] = VALUE: NUMBER:0; [KEY: NUMBER:5] = VALUE: NUMBER:0; [KEY: NUMBER:6] = VALUE: NUMBER:0; [KEY: NUMBER:7] = VALUE: NUMBER:0; [KEY: NUMBER:8] = VALUE: NUMBER:0; } [KEY: STRING:source_id] = VALUE: NUMBER:65535; [KEY: STRING:left_chunk] = VALUE: TABLE:; Table value: { [KEY: NUMBER:1] = VALUE: NUMBER:255; [KEY: NUMBER:2] = VALUE: NUMBER:255; [KEY: NUMBER:3] = VALUE: NUMBER:255; [KEY: NUMBER:4] = VALUE: NUMBER:255; [KEY: NUMBER:5] = VALUE: NUMBER:255; [KEY: NUMBER:6] = VALUE: NUMBER:31; [KEY: NUMBER:7] = VALUE: NUMBER:0; [KEY: NUMBER:8] = VALUE: NUMBER:0; [KEY: NUMBER:9] = VALUE: NUMBER:0; [KEY: NUMBER:10] = VALUE: NUMBER:0; [KEY: NUMBER:11] = VALUE: NUMBER:187; [KEY: NUMBER:12] = VALUE: NUMBER:202; [KEY: NUMBER:13] = VALUE: NUMBER:236; [KEY: NUMBER:14] = VALUE: NUMBER:65; [KEY: NUMBER:15] = VALUE: NUMBER:130; [KEY: NUMBER:16] = VALUE: NUMBER:138; [KEY: NUMBER:17] = VALUE: NUMBER:59; [KEY: NUMBER:18] = VALUE: NUMBER:193; [KEY: NUMBER:19] = VALUE: NUMBER:145; [KEY: NUMBER:20] = VALUE: NUMBER:33; [KEY: NUMBER:21] = VALUE: NUMBER:136; [KEY: NUMBER:22] = VALUE: NUMBER:195; [KEY: NUMBER:23] = VALUE: NUMBER:237; [KEY: NUMBER:24] = VALUE: NUMBER:210; [KEY: NUMBER:25] = VALUE: NUMBER:236; [KEY: NUMBER:26] = VALUE: NUMBER:65; [KEY: NUMBER:27] = VALUE: NUMBER:32; [KEY: NUMBER:28] = VALUE: NUMBER:122; [KEY: NUMBER:29] = VALUE: NUMBER:59; [KEY: NUMBER:30] = VALUE: NUMBER:193; [KEY: NUMBER:31] = VALUE: NUMBER:13; [KEY: NUMBER:32] = VALUE: NUMBER:33; [KEY: NUMBER:33] = VALUE: NUMBER:136; [KEY: NUMBER:34] = VALUE: NUMBER:195; [KEY: NUMBER:35] = VALUE: NUMBER:1; [KEY: NUMBER:36] = VALUE: NUMBER:0; [KEY: NUMBER:37] = VALUE: NUMBER:128; [KEY: NUMBER:38] = VALUE: NUMBER:128; [KEY: NUMBER:39] = VALUE: NUMBER:128; [KEY: NUMBER:40] = VALUE: NUMBER:128; [KEY: NUMBER:41] = VALUE: NUMBER:128; [KEY: NUMBER:42] = VALUE: NUMBER:128; [KEY: NUMBER:43] = VALUE: NUMBER:255; [KEY: NUMBER:44] = VALUE: NUMBER:0; [KEY: NUMBER:45] = VALUE: NUMBER:2; [KEY: NUMBER:46] = VALUE: NUMBER:0; [KEY: NUMBER:47] = VALUE: NUMBER:0; } [KEY: STRING:squad] = VALUE: NUMBER:8; [KEY: STRING:skeleton_flags] = VALUE: NUMBER:4; [KEY: STRING:skeleton_name] = VALUE: STRING:$editor; [KEY: STRING:spec_character] = VALUE: STRING:yan_general_ecolog; [KEY: STRING:baseinr] = VALUE: STRING:; [KEY: STRING:predicate1] = VALUE: TABLE:; Table value: { [KEY: NUMBER:1] = VALUE: NUMBER:0; [KEY: NUMBER:2] = VALUE: NUMBER:1; [KEY: NUMBER:3] = VALUE: NUMBER:1; [KEY: NUMBER:4] = VALUE: NUMBER:1; [KEY: NUMBER:5] = VALUE: NUMBER:0; } [KEY: STRING:dyn_in_restr] = VALUE: TABLE:; Table value: { } [KEY: STRING:story_id] = VALUE: NUMBER:902; [KEY: STRING:reputation] = VALUE: NUMBER:50; [KEY: STRING:distance] = VALUE: NUMBER:29.39999961853; [KEY: STRING:dyn_out_restr] = VALUE: TABLE:; Table value: { } [KEY: STRING:custom_data] = VALUE: STRING:[smart_terrains] none = true [logic] cfg = scripts\yan\yan_scientist.ltx; [KEY: STRING:direct_control] = VALUE: NUMBER:1; [KEY: STRING:visual_name] = VALUE: STRING:actors\ucheniy\ucheniy_2; [KEY: STRING:trader_flags] = VALUE: NUMBER:1; [KEY: STRING:predicate2] = VALUE: TABLE:; Table value: { [KEY: NUMBER:1] = VALUE: NUMBER:2; [KEY: NUMBER:2] = VALUE: NUMBER:0; [KEY: NUMBER:3] = VALUE: NUMBER:0; [KEY: NUMBER:4] = VALUE: NUMBER:2; } [KEY: STRING:baseoutr] = VALUE: STRING:yantar_bunker_space_restrictor; [KEY: STRING:communityid] = VALUE: NUMBER:7; [KEY: STRING:health] = VALUE: NUMBER:1; [KEY: STRING:rank] = VALUE: NUMBER:93; } ВНИМАНИЕ! Ошибка! Информация по ошибке в строках ниже! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ERROR! Reason: SAVE FILE IS CORRUPT stack traceback: ...g\s.t.a.l.k.e.r\gamedata\scripts\xr_motivator.script:547: in function <...g\s.t.a.l.k.e.r\gamedata\scripts\xr_motivator.script:535> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...ishing\s.t.a.l.k.e.r\gamedata\scripts\lua_fix.script:133: ВНИМАНИЕ! Игра прервана! Информация в строках выше. stack trace: И вот смотрю я, нетпакет принадлежит Сахарову, и вроде бы - криминала как будто нет. Или я его не вижу. А игра считает что криминал есть, r_eof() возвращает true и получем вылет. Собственно, вопросы. 1. Что не так с Сахаровым в данном случае? почему это происходит? 2. Что надлежит сделать чтобы подобного не происходило, и есть ли вариант в оффлайне поколдовать с его нетпакетом, чтобы без НИ, вот этот самый сейв, успешно загрузился. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий
naxac 2 447 Опубликовано 12 Июля 2016 Поделиться Опубликовано 12 Июля 2016 (изменено) @Zander_driver, в метод load биндера передается не нет-пакет нпс, а отдельный поток на чтение. Это только с Сахаровым так? Изменено 12 Июля 2016 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Zander_driver 10 334 Опубликовано 12 Июля 2016 Поделиться Опубликовано 12 Июля 2016 (изменено) Только с Сахаровым и только в одном случае у одного юзера. Но вот такого рода "мины" в моде очень хочется устранять в первую очередь. Таки где поискать причины переполнения... Изменено 12 Июля 2016 пользователем 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. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 12 Июля 2016 Поделиться Опубликовано 12 Июля 2016 (изменено) Это как бы означает, что все обязаны срочно скачать мод ? Или кто-то все ж поделиться кодом сохранения ? Очевидно, оное сохранение повисло аккурат после object_binder.save(), что именно там повисло - вопрос - не имея кода - явно к экстрасенсам. Изменено 12 Июля 2016 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти