Norman Eisenherz 310 Опубликовано 4 Ноября 2018 Поделиться Опубликовано 4 Ноября 2018 @Overfirst, Это, конечно, упущение, что вместо "break" из имеющихся примеров я поставил "else", который обратил первый же неправильный результат в "nope" вместо полного поиска по таблице. В остальном вопросов нет. @Kirgudu, Такая конструкция работает, но как? Какова логическая цепочка в такой схеме поиска? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Kirgudu 1 209 Опубликовано 5 Ноября 2018 Поделиться Опубликовано 5 Ноября 2018 @Norman Eisenherz, и при чём же тут логическая цепочка? Когда мы пишем "for k, v in pairs(...)", на каждой итерации в переменную k попадает ключ (в нашем случае, например, "good"), а в переменную v - значение (в нашем случае {["price"] = 25*k, ["id"] = 912}), остаётся только сравнить. Возможно, имеет смысл почитать какую-либо литературу по Lua. Инструмент Ссылка на комментарий
Norman Eisenherz 310 Опубликовано 8 Ноября 2018 Поделиться Опубликовано 8 Ноября 2018 Здрасьте. Один и тот же код, скопированный из одной функции в другую, в одном случае выдает число, а в другом "nil". Посмотрите кто-нибудь… https://c1.staticflickr.com/5/4874/45786150651_e989b29f76_o.png Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
lordmuzer 743 Опубликовано 8 Ноября 2018 Поделиться Опубликовано 8 Ноября 2018 Закинь куда то текстом кусок скрипта, а лучше весь файл. По картинкам сложнее гадать. Может там опечатка где. В слове price точно с - латинская? Ссылка на комментарий
Norman Eisenherz 310 Опубликовано 8 Ноября 2018 Поделиться Опубликовано 8 Ноября 2018 При выделении слова "price" включается подсветка для такого же слова в следующей функции (которая выдает число), так что либо везде одна и та же ошибка, либо все же ошибка не в этом слове. Spoiler local nv_type = { ["bad"] = { ["price"] = 10*k, ["id"] = 911 }, ["good"] = { ["price"] = 25*k, ["id"] = 912 }, ["default"] = { ["price"] = 15*k, ["id"] = 913 }, ["static"] = { ["price"] = 20*k, ["id"] = 914 }, ["kat_eye"] = { ["price"] = 30*k, ["id"] = 915 }, ["psy"] = { ["price"] = 25*k, ["id"] = 916 }, ["moon"] = { ["price"] = 25*k, ["id"] = 917 }, ["bast"] = { ["price"] = 30*k, ["id"] = 918 } } function nv_price_check(first_speaker, second_speaker, dialog_id, phrase_id) local choice = tonumber(phrase_id) local nv = "" for i, v in pairs(nv_type) do if v.id == choice then nv = i break end end local price = nv_type[nv].price end Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
lordmuzer 743 Опубликовано 8 Ноября 2018 Поделиться Опубликовано 8 Ноября 2018 Я потому и просил залить куда то сам файл. Не знаю так ли и есть или это форму ломает, но у меня в "price" есть какой то непечатный символ https://i.imgur.com/JU58Jnu.png Ссылка на комментарий
Norman Eisenherz 310 Опубликовано 8 Ноября 2018 Поделиться Опубликовано 8 Ноября 2018 Файл: https://drive.google.com/open?id=1rC8HofVAt8h8jdb9ESuVRbafuwBtg9AR Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
lordmuzer 743 Опубликовано 8 Ноября 2018 Поделиться Опубликовано 8 Ноября 2018 Я не вижу проблем со скриптом. Так же проверил через lua online - первый метод прекрасно находит цену. В чем именно ошибка? Если вылет - закинь полный лог. Ссылка на комментарий
Norman Eisenherz 310 Опубликовано 8 Ноября 2018 Поделиться Опубликовано 8 Ноября 2018 Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...w of chernobyl\gamedata\scripts\armor_upgrade.script:237: attempt to index field '?' (a nil value) Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
lordmuzer 743 Опубликовано 8 Ноября 2018 Поделиться Опубликовано 8 Ноября 2018 (изменено) Так это у тебя не price nil, а nv, какой то левый, потому nv_type[nv] - nil и уже при вызове .price получаем ошибку. Уверен что там phrase_id такой как есть в таблице? Для precondition диалога в 4 параметр будет приходить phrase_id только что сказанной фразы, а не той, для которой проверка вызывается Но, phrase_id фразы для которой вызывается проверка будет в 5 параметре. Изменено 8 Ноября 2018 пользователем lordmuzer Ссылка на комментарий
Norman Eisenherz 310 Опубликовано 8 Ноября 2018 Поделиться Опубликовано 8 Ноября 2018 "phrase_id только что сказанной фразы" Все-таки придется писать несколько проверочных функций… Жалко, хотелось сделать красиво. В любом случае, спасибо. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Quest_Rider 0 Опубликовано 9 Ноября 2018 Поделиться Опубликовано 9 Ноября 2018 Как создать тайник, в который можно положить все что захочешь(именно что изначально хотел(на стадии создания мода)) (пример: мы убили сталка, залутали его, нам дался инфопоршень на спавн тайника , он спавнится в координатах которые задаешь в скриптах, содержимое его записываешь в логику. приходишь к нему, лутаешь и как только возьмешь все, что в нем было рюкзак исчезает из игры). Я сделал примерно так, но тайник спавнится до того как я получаю инфопоршень на работу скрипта. Скрытый текст ; cse_alife_object properties game_vertex_id = 61 distance = 0.0000002 level_vertex_id = 45293 object_flags = 0xffffffbf custom_data = <<END [logic] active = kamp@walk_otdix [known_info] atp_body1_info [kamp@walk_otdix] center_point = enemy_look1 radius = 2 combat_ignore_cond = {+esc_melnik_attack} END story_id = 7409 Скрытый текст <!-- Тайники с трупов --> <info_portion id="atp_body1_info"><action>addon_mod1.spawn_body_habar1</action></info_portion> <info_portion id="atp_body1_article"><article>atp_body1_info</article></info_portion> Скрытый текст -- Тайники с трупов ----------------------------------------------------------------------------------------------- function spawn_body_habar1() db.actor:give_info_portion ("atp_body1_article") alife():create("body_habar1", vector():set (-195.044, -19.788, -127.924), 56700, 56) news_manager.send_tip(db.actor, "treasure2", nil) end Скрытый текст ;--------Хабары--------------------------------- [body_habar1]:habar_body2 visual = equipments\item_rukzak radius = 1 custom_data = scripts\treasures\body_habar1.ltx ----------------------------------------------------------------ЭТО файл spawn_section--------------------------------- [inventory_box] GroupControlSection = spawn_group discovery_dependency = $spawn = "devices\inventory box" class = O_INVBOX cform = skeleton visual = physics\box\expl_dinamit.ogf script_binding = bind_physic_object.init [habar_body2] GroupControlSection = spawn_group discovery_dependency = $spawn = "devices\inventory box" class = O_INVBOX cform = skeleton visual = physics\box\expl_dinamit.ogf script_binding = bind_physic_object.init --------------------------------ЭТО ФАЙЛ devices-------------------------- Скрытый текст [spawn] ammo_5.45x39_ap = 3 Дополню: Я спавнюсь. бегу к найму у которого после того как его залутаешь дается инфопоршень(якобы на спавн тайник, но тайник спавнится до того как я взял инфопоршень). Но, когда я все таки лутаю чела, мне дается инфа которая идет с скриптом и выводится сообщение о том что получен тайник (см.спойлер СКРИПТ) Ссылка на комментарий
Zagolski 74 Опубликовано 10 Ноября 2018 Поделиться Опубликовано 10 Ноября 2018 В 03.11.2018 в 12:39, dsh сказал: Например, что бы его потом по этому story_id найти и что нибудь с ним сделать. Или, что бы движок не удалил его трупик, если он будет долго лежать. А может ещё для чего, кто знает. Это все элементарно делается поиском по имени объекта, никаких story_id для этого городить не нужно. Правда, это касается объектов заспавненных аллспавном. В ТЧ даже ф-ция для этого есть: alife():object("name") В любом случае присваивание story_id нет-пакетом, когда он вступает в силу только при перезагрузке - не очень корректный метод, наверное, даже больше косячный. Ссылка на комментарий
Mr.Srears 0 Опубликовано 10 Ноября 2018 Поделиться Опубликовано 10 Ноября 2018 Ребят, может, кто-нибудь дать примерный набросок скрипта с проигрованием анимации у ствола? Я представляю примерно, как его наполнить, но просто не хватает уверенности, что он заработает. Проще говоря, хочу просто дополнить класс WP-PM, научив его проигрывать анимку затвора, который не хочет работать, если я сменю класс ствола. А жертвовать режимом автоматического огня или затвором, мне не очень хочется. Ссылка на комментарий
Serge_888 114 Опубликовано 10 Ноября 2018 Поделиться Опубликовано 10 Ноября 2018 31 минуту назад, Mr.Srears сказал: может, кто-нибудь дать примерный набросок скрипта с проигрованием анимации у ствола? Мне тут неделю назад популярно объяснили, что такого не существует. А то-что выдаёт поисковик, это хотелки, обращённые к тем, кто пытается править движек. И делает всякие Х-Ray экстеншины. Пытается делать... Хотя, в каком-то моде видел, как из аптечки шприц вкалывали. Такой анимки в оригинале не было. Вроде сами добавили. Но что при этом исправли - большой вопрос. Ссылка на комментарий
Mr.Srears 0 Опубликовано 11 Ноября 2018 Поделиться Опубликовано 11 Ноября 2018 56 минут назад, Serge_888 сказал: Мне тут неделю назад популярно объяснили, что такого не существует. А то-что выдаёт поисковик, это хотелки, обращённые к тем, кто пытается править движек. И делает всякие Х-Ray экстеншины. Пытается делать... Хотя, в каком-то моде видел, как из аптечки шприц вкалывали. Такой анимки в оригинале не было. Вроде сами добавили. Но что при этом исправли - большой вопрос. Ну, и что мне теперь делать? Лезть в движок и править класс WP-PM? Я даже приблизительно не знаю, где он там находится. Или отказываться от режима автоматического огня у пистолетов на совсем, и делать их обычными однопатронными. Я вообще не пойму одного: в оригинале у той же Беретки и Вали 99 стояли режимы автоогня, и по 3 патрона они прекрасно работали, затвор там тоже работал. Хотя могу ошибаться, давно не играл в оригинал. Ссылка на комментарий
Serge_888 114 Опубликовано 11 Ноября 2018 Поделиться Опубликовано 11 Ноября 2018 У беретты, сиг-220, ЮСП-45 и Р99 по дефолту самого начала класс WP_LR300. У пм, пб, кольта и ДЕ - WP_PM. У HPSA - свой WP_HPSA. Добавь себе однорукий пп2000 и не мучайся ду..., гхм, я хотел сказать, ещё можно добавить АПС из свежих модов. Или ОЦ-33. 1 Ссылка на комментарий
Romann 619 Опубликовано 11 Ноября 2018 Поделиться Опубликовано 11 Ноября 2018 (изменено) Всем привет, кто может помочь разобраться со скриптом?(платформа СоС 1.4.22) Задача такая: если актор подxодит к "термо аномалиям" - выдаём инфопоршень. С костром проблем нету, у него свой биндер, а вот с жарками проблема, биндер один на все аномалии, уже перепробовали кучу вариантов, последний такого вида: Скрытый текст function anomaly_zone_binder:update(delta, obj) object_binder.update(self, delta) --Система замерзания, чтоб греться у термо аномалий. if(obj) then local s_obj = alife():object(obj:id()) local thermal_zones_tbl = { "zone_field_thermal", "zone_field_thermal_weak", "zone_field_thermal_average", "zone_field_thermal_strong", "zone_mine_thermal", "zone_mine_thermal_weak", "zone_mine_steam", "zone_mine_steam_weak", "zone_mine_steam_average", "zone_zharka_static", "zone_zharka_static_weak", "zone_zharka_static_average", "zone_zharka_static_strong" } if (s_obj) then for i = 1, #thermal_zones_tbl do if (s_obj:section_name() == thermal_zones_tbl[i]) then if db.actor:position():distance_to(self.object:position()) <= 4 then if not has_alife_info("EugeniumFreezingSystemWarm") then db.actor:give_info_portion("EugeniumFreezingSystemWarm") end end end end end end --Система замерзания, чтоб греться у термо аномалий. ... ... ... end Как ещё можно проверить - "жарка ли это"? Изменено 11 Ноября 2018 пользователем Romann Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz). Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб). Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge. Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор Ссылка на комментарий
Graff46 598 Опубликовано 12 Ноября 2018 Поделиться Опубликовано 12 Ноября 2018 (изменено) @Romann, Жаркам может свои биндеры сделать? В секции аномалии нужно смотреть ключ "script_binding" Или так: Скрытый текст local thermal_zones_tbl = { zone_field_thermal = true, zone_field_thermal_weak = true, zone_field_thermal_average = true, zone_field_thermal_strong = true, zone_mine_thermal = true, zone_mine_thermal_weak = true, zone_mine_steam = true, zone_mine_steam_weak = true, zone_mine_steam_average = true, zone_zharka_static = true, zone_zharka_static_weak = true, zone_zharka_static_average = true, zone_zharka_static_strong = true } function anomaly_zone_binder:update(delta, obj) object_binder.update(self, delta) --Система замерзания, чтоб греться у термо аномалий. if thermal_zones_tbl[self.object:section()] then if db.actor:position():distance_to(self.object:position()) <= 4 then if not has_alife_info("EugeniumFreezingSystemWarm") then db.actor:give_info_portion("EugeniumFreezingSystemWarm") end end --Система замерзания, чтоб греться у термо аномалий. ... ... ... end Но я бы отдельный биндер сделал... Изменено 12 Ноября 2018 пользователем Graff46 1 Ссылка на комментарий
AndreySol 215 Опубликовано 12 Ноября 2018 Поделиться Опубликовано 12 Ноября 2018 15 часов назад, Romann сказал: Как ещё можно проверить - "жарка ли это"? Правильно советуют тебе - сделай свой биндер для необходимых аномалий. 1 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти