Nazgool 250 Опубликовано 6 Июля 2016 Поделиться Опубликовано 6 Июля 2016 (изменено) Почему при спавне НПЦ скриптом в его имени к основному добавляются какие-то рандомные цифры? Вот почему, извините начальство форума за не очень пристойное слово, хочется {игнорировать} всякие призывы о помощи, и не тратить силы на распинания по сути. CRAZY_STALKER666 ты же поставил "Спасибо" к моему посту http://www.amk-team.ru/forum/topic/6185-skriptovanie/?p=1020661, т.е. ты должно быть его прочитал. А если это так, то ты не мог не заметить, что я в этом посте рассказывал про "цифры" в имени объекта. В то время, когда я начинал моддить, не было столько исчерпывающей информации как сейчас. Цеплялись за любые намеки. А тут... "Абыдно, да?" ("Кавказская пленница") "Начальство" в специально отведенном месте постоянно рыдает по тому же самому поводу. Не успевает жилетки менять. dc Изменено 6 Июля 2016 пользователем Dennis_Chikin Ссылка на комментарий
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 421 Опубликовано 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 330 Опубликовано 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 421 Опубликовано 12 Июля 2016 Поделиться Опубликовано 12 Июля 2016 (изменено) @Zander_driver, в метод load биндера передается не нет-пакет нпс, а отдельный поток на чтение. Это только с Сахаровым так? Изменено 12 Июля 2016 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Zander_driver 10 330 Опубликовано 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. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти