Artos 99 Опубликовано 1 Января 2012 Поделиться Опубликовано 1 Января 2012 (изменено) Поэтому и указал, что именно в таком (+G) написании - это глупость/ошибка и важен контекст, чтобы отделять мух от котлет, т.е. говорить о том, что же подразумевалось в исходном коде и в какую сторону стОит "модить", дабы избежать ошибок. Изменено 1 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
xStream 86 Опубликовано 1 Января 2012 Поделиться Опубликовано 1 Января 2012 Ты этого никак не указал. Ты просто сказал "глупость". Не указав при этом на настоящую потенциальную опасность. В данном случае контекс очевиден: берем строку, обращаемся к соответствующей функции в соответствующем файле. Все, кто стоит на моем пути: идите нахрен и там погибните! © Ссылка на комментарий
Artos 99 Опубликовано 1 Января 2012 Поделиться Опубликовано 1 Января 2012 (изменено) Если не ясен контекст, то не вижу смысла указывать на нечто, что в каком-то конкретном случае может иметь или не последствий. Но если уж предполагать, то упомянутое Dennis_Chikin напоминает мне ковыряние с xr_logic.script, где у меня, например это: local Func = nil local module, fname = func:match('(%w+)%.(%w+)') if not fname then Func = xr_conditions[func] elseif module and _G[module] then Func = _G[module][fname] end if not Func then abort("...") return nil --/> end ... что исключает "настоящую потенциальную ошибку", точнее выявляет ее. Суть же исходного вопроса не в потенциальной ошибке, а ошибке/некорректности патерна ... Изменено 1 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
xStream 86 Опубликовано 1 Января 2012 Поделиться Опубликовано 1 Января 2012 Совершенно верно. И мне непонятно, почему придирание к опечатке пошло и речь о контексте... Все, кто стоит на моем пути: идите нахрен и там погибните! © Ссылка на комментарий
TASTAN 1 Опубликовано 1 Января 2012 Поделиться Опубликовано 1 Января 2012 Подскажите, как можно проверить в диалоге с НПС в каком он гулаге? Ссылка на комментарий
Artos 99 Опубликовано 1 Января 2012 Поделиться Опубликовано 1 Января 2012 (изменено) xStream, "придирание" кого к чему? Я что-то уже не улавливаю смысл/цель последних наших постов. Мною просто было на явно некорректную запись (из исходного кода иль из-зи опечатки, не суть), что это глупая ошибка. И посетовал, что без контекста давать какие-то предположения что и почему - как то бессмысленно. Дальнейшее, как раз уже мною воспринимается как некая придирка, что мол нечего на это указывать, мол это очепятка, а вот ... Ведь первично правильное построение патерна, которым можно исключить какие-либо дальнейшие потенциальные ошибки, а уж как обойти эти ошибки, возникающие от некорректного патерна - вторично, о чем и не стал распространяться. Если уж так важно полный разбор всего и вся в исходном вопросе, то тогда уж нужно упомянуть и о том, что перед распарсиванием следует проверить и наличие исходной строки (func) и собственно что это тип именно строки, а не нечто иное. Добавлено через 5 мин.: TASTAN Для SHOC и CS (ТЧ/ЧН) имеется функция: soGulag = xr_gulag.get_npc_gulag(oNPC) которая возвращает серверный объект гулага, в который входит клиентский объект непися. Соответственно в диалоге следует из двух выбрать нужный объект (т.е. не актора). Для SCoP (ЗП) это get_npc_smart в том же xr_gulag.script Изменено 1 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
strelok200 0 Опубликовано 1 Января 2012 Поделиться Опубликовано 1 Января 2012 (изменено) Для разговора с физическим объектом как я понял нужен невидимка. Можете мне скинуть его! Уже давалась рекомендация не глаголить погадалки. Потрудись задавать вопросы связанно и информативно, а не некими туманными фразами. --/Artos Изменено 1 Января 2012 пользователем Artos Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
losiara 13 Опубликовано 1 Января 2012 Поделиться Опубликовано 1 Января 2012 TASTAN Расскажи поподробнее, что ты имеешь ввиду "в диалоге проверить"??? Суть задумки в чем? Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
TASTAN 1 Опубликовано 1 Января 2012 Поделиться Опубликовано 1 Января 2012 (изменено) Artos, А оно выдаст мне название смарта или что-то еще? function precond_guide_npc(npc, actor) local smart = xr_gulag.get_npc_gulag(npc) if (smart ~= "mar_csky_base") and (level.name() == "marsh") then return true else return false end end Изменено 2 Января 2012 пользователем ColR_iT Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 1 Января 2012 Поделиться Опубликовано 1 Января 2012 (изменено) Artos, Но если уж предполагать, то упомянутое Dennis_Chikin напоминает мне ковыряние с xr_logic.script, где у меня, например это Да, и здесь - тоже. Только гибрид чей-то правки с оригиналом: если нет модуля/функции - идем смотреть xr_effects, а не xr_conditions. И вообще много где, кроме как в этом фрагменте. Идея везде она и та же. А исполнение - разное. Как размножается код в модах ? В основном, копипастом. Потом где-то что-то меняется немножко. Конструкции получаются порою странные. И кроме того, что получилось, надо еще понять - а чего вообще хотели-то, когда делали. Кстати, по xr_logic - в приведенном куске нил возвращать вообще безопасно ? Или лучше на рабочий стол сразу нафиг ? Как раз применительно к штатному xr_logic.script и иже твоя фраза ... - некорректна. И тот и иной скрипты штатно прописаны в xr_logic.script, только для разных целей О, как ! Значит все еще чудесатее, чем казалось сначала. Надо будет сравнить с оригиналом полностью и построчно, пожалуй. Изменено 1 Января 2012 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Artos 99 Опубликовано 1 Января 2012 Поделиться Опубликовано 1 Января 2012 (изменено) TASTAN, функция тебе возвращает объект гулага/смарта, а не его имя. Соттветствено если требуется проверка по имени то и используй доступное :name(): if smart and (smart:name() ~= "mar_csky_base") and (level.name() == "marsh") then Добавлено через 9 мин.: Dennis_Chikin, что и когда лучше - у каждого модмейкера свое. Кто-то замазывает ошибки, кто-то наоборот вытаскивает их наружу, дабы увидеть и пофиксить. И вообще, постарайся выделять в словах основную суть. Если "медитируешь" над тем что хорош ли патерн - это одно, если над тем, что проверка по наличию в метатаблицах - это иное, ну а уж про редирект из одного модуля в другой - совсем иная история. Как раз применительно к штатному xr_logic.script и иже твоя фраза: Dennis_Chikin: ... если нет модуля/функции - идем смотреть xr_effects, а не xr_conditions - некорректна. И тот и иной скрипты штатно прописаны в xr_logic.script, только для разных целей, а вот возможность указать в логике не только эти два скрипта (дефолтно), а назначить свои сторонние обработчики - как раз и дает смысл таким кускам кодов. Ну и по "кстати", возврат нила (nil) как раз штатно и предусмотрен в xr_logic.pick_section_from_condlist при отсутствии невыполнении условий (секции для переключения). А безопасность определяется тем, как обрабатывают возвращаемый результат вызывающие функции ... Изменено 1 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
strelok200 0 Опубликовано 1 Января 2012 Поделиться Опубликовано 1 Января 2012 Читайте тут и далее http://www.amk-team.ru/forum/index.php?sho...420#entry561168 Там говорится про невидимку Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
Artos 99 Опубликовано 1 Января 2012 Поделиться Опубликовано 1 Января 2012 (изменено) strelok200, давай называть вещи своими именами/терминами, а не теми, которые захотелось употребить (часто не понимая их сути). Вести диалог со "стенкой" - полнейшая чушь. Если захотелось сделать нечто типа ветвления сюжета в зависимости от некоторых текущах параметров (аля-"Исполнитель Желания"), то и не нужно такой "псевдо-диалог" так упорно отождествлять со стандартными диалогами. Тебе уже дали ответ, что по какому-либо событию (хотя бы вхождению в рестриктор) создавай свое окно и делай то, что хочется в нем. Никто, например, не называет меню выбора часов сна - диалогом со спальником/матрацем, так зачем же с любым иным физ.объектом упорно задавать вопрос как про диалог? Как понимаю, тебе вероятно уже немного знакомо как писать диалоги с неписями, а вот пока по работе с классами окон и написанию своего меню у тебя пробел, вот и цепляешься за призрачного "невидимку", думая это более легкий путь. Ну подожди ... может кто и скинет тебе этакого собеседника "невидимку". ;-) Хотя сам бы мог провести аналогию с диалогом с "О-сознанем", где хотя собеседник и "видимка", но визуально - якобы голограмма. Ну так и попробуй сделать по аналогии, только вместо отображения голограммы, показывай свой физобъект, скрывая самого собеседника. Вот только думаю для тебя это не проще, чем научиться работе с классами окон и просто написать нужное меню. Изменено 1 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
losiara 13 Опубликовано 1 Января 2012 Поделиться Опубликовано 1 Января 2012 (изменено) Добрый вечер! Возник вопрос относительно скрипта logic переключение схем! В файле xr_conditions есть 2 функции: -- проверка того что дистанция до обьекта <= заданной -- параметры: [sid,dist] function distance_to_obj_le(actor, npc, p) local npc1 = level_object_by_sid(p[1]) if npc1 then local res = npc:position():distance_to_sqr(npc1:position()) <= p[2]*p[2] --printf("xr_cond<distance_to_obj_le>: %s", if_then_else(res, "TRUE", "FALSE")) return res end return false end -- проверка того что дистанция до обьекта >= заданной -- параметры: [sid,dist] function distance_to_obj_ge(actor, npc, p) local npc1 = level_object_by_sid(p[1]) if npc1 then local res = npc:position():distance_to_sqr(npc1:position()) >= p[2]*p[2] --printf("xr_cond<distance_to_obj_ge>: %s", if_then_else(res, "TRUE", "FALSE")) return res end return false end Возможно ли использовать при переключении схем в логике НПС данные функции??? Пример: [smart_terrains] none = true [logic] active=walker danger = danger_ignore [walker] path_walk = yan_stalker_walk_8 path_look = yan_stalker_look_8 on_actor_dist_le_nvis = 10 | walker1;--переключение по сигналу проверки нахождения ГГ на определенном расстоянии... [walker1] path_walk = yan_stalker_walk_88 path_look = yan_stalker_look_88 ????? = 10 | walker2;--переключение при приближении НПС с определенным sidом к другому НПС с этой схемой... ..... [danger_ignore] ignore_distance = 0 Просьба использовать тэги [соde] при публикации кодов в сообщении, дабы и форматирование сохранить и избежать искажений спец.символов парсингом форума. --/Artos Изменено 2 Января 2012 пользователем Artos Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
Artos 99 Опубликовано 2 Января 2012 Поделиться Опубликовано 2 Января 2012 (изменено) losiara, естественно эти функции можно использовать для переключений между секциями логики, тем более это собственно 'штатные' функции проверок, которыми и оперирует дефолтно xr_logic.script. Однако: 1. Следует различать в парах: on_actor_dist_le_nvis и on_actor_dist_le - ближе чем ... on_actor_dist_ge_nvis и on_actor_dist_ge - дальше чем ... - которые (в парах) различаются тем, что первое условие (с nvis) срабатывает в любой ситуации когда объект на определенном расстоянии (т.е. без проверки на видимость), а вторая - только когда объект 'видим' актором (в поле его зрения). Второе условие применимо не ко всем объектам, т.к. метод obj1:see(obj2) работает только для неписей/монстров и еще некоторых (не помню точно каких) классов объектов. 2. Штатных логических условий (функций) для проверки расстояний между различными неписями (а не актором) в кодах xr_logic.script нет, хотя ничего не мешает их или какие потребны добавить. Но ... твоя формулировка: переключение при приближении НПС с определенным sidом к другому НПС с этой схемой... - очень ресурсо-затратна при попытке решить 'в лоб', т.к. чтобы при проверке секции одного текущего НПС знать всех остальных, работающих под этой схемой - нужно еще постараться это сделать ... или итерируя по спискам типа db.storage или по заранее подготовленным. Изменено 2 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
korshyn-3 0 Опубликовано 2 Января 2012 Поделиться Опубликовано 2 Января 2012 demover123, Все там стоит ! Я раз 10 переделывал и проверял и результат такой же . Потом думал может у меня координаты не правильно снимает прога, и посмотрел какие координаты стоят в чн . А там вообще вот что : [mar_smart_terrain_10_5_kamp_1] points = p0 p0:name = name00 p0:position = 401.542633056641,3.7787299156189,265.570220947266 p0:game_vertex_id = 54232 ; такого вертекста вообще нет в игре p0:level_vertex_id = -1 Ссылка на комментарий
*Shoker* 322 Опубликовано 2 Января 2012 Поделиться Опубликовано 2 Января 2012 0023:08074F22 xrGame.dll 0023:08190865 xrGame.dll 0023:00413865 xrEngine.EXE, CCameraManager::operator() Кто нибудь может что то сказать по этому логу? ЧН, 10 патч. В моде есть схема, заставляющая сталкеров бежать в укрытия. Она работала хорошо на болотах (где я её и тестировал, и на других местах) но вот почему то на Кордоне (и боюсь это может быть не единичный случаи) в районе моста такой вылет в момент включения схемы. Я подозреваю что моя схема конфликтует как то со схемами смарт-кавера (видимо где то в этот момент идёт бой как раз, и когда включается схема с её ограничениями - что то идёт не так) Я щас ещё буду тесты проводить, но может кто уже сталкивался с этим. Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 2 Января 2012 Поделиться Опубликовано 2 Января 2012 (изменено) Получил сейчас вылет с интересной диагностикой, и нашел по нему вот это: http://www.amk-team.ru/forum/index.php?sho...25&st=2318# Интересно, тогда как-то разобрались с проблемой ? Чем-то похоже на обсуждавшееся вчера-сегодня ночью с регэкспом и обращением к _G[чего-то-там] Добавлено через 43 мин.: Artos, однако module, fname = string.match(func, '(%w+)%.(%w+)') превращает, например, arhara_dialog.lysyi_sms в dialog.lysyi. Так что тоже не самый удачный вариант. Гм... даже не подумал, что "_" - это разделитель и в смысле регэкспов. Очевидно, надо строки просить. Upd: Ага, спасибо за "|". Но пока оставим как есть, наверное, и будем ругаться/вылетать тупо по обнаружению отсутствия файла/функции. А то там всего можно ожидать... Пару раз на попытках сделать "защиту" уже обжегся - проблему непосредственно в месте обнаружения проходило, зато потом чудеса начинались. Изменено 2 Января 2012 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Artos 99 Опубликовано 2 Января 2012 Поделиться Опубликовано 2 Января 2012 (изменено) Dennis_Chikin, не знаю, разобрались ли "тогда", но собственно и проблема то не сложная. Заготовка для решение (касательно xr_conditions) как раз и была тут упомятута и показана в #3527. Для xr_effects полностью аналогично, только имя в коде иное. По патерну: Все же в каждом случае патерн выбирается исходя из контекста и не может быть для всего "самым удачным". Мною был выбран именно этот, дабы не искушаться различными извратами в именах модулей/функций при сторонних вызовах (не из штатных скриптов для логики), о чем и указал: Это допускает наличие в имени модуля/функции только алфавитно-цифровых символов, исключая иные символы, и экранирует точку, давая однозначное разделение на модуль-функция.Если же хочется расширить ассортимент для имен - просто подбирается соответствующий патерн. В том исходном виде (тобою упомянутом: "(.+)[.](.+)") патерн никак не защищает от ошибок/описок при употреблении специальных символов иль пробелов, а ловить такие ошибки из логики не так уж порою и легко ... Если хочешь и нижнее подчеркивание (это не алфавитно-цифровой символ!) использовать в именах, то патерн для этого может быть таким: '([%w|_]+)%.([%w|_]+)' - в именах модулей/функций разрешены в любых комбинациях (от 1-го и более) алфавитно-цифровые символы и символ '_' Примечание: К сожалению многие не догадываются, что бездумное использование логики и "универсальных" кодов для нее - чревато ... Ведь для каждого онлайнового (и не только, вспомним смарты/респавны) текущие секции логики постоянно сканируются апдейтами объектов и многочисленными схемами и каждая такая проверка (хотя бы и по излишне свободным патернам) забирает процессорные такты. Так что в этом как раз нужно знать меру и не транжирить даже коротенькие строки в конфигах логики понапрасну. Изменено 2 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
TASTAN 1 Опубликовано 2 Января 2012 Поделиться Опубликовано 2 Января 2012 Имею такой скрипт: function precond_guide_npc(actor, npc) local smart = xr_gulag.get_npc_gulag(npc) if smart and (smart:name() ~= "mar_csky_base") and (level.name() == "marsh") then return true else return false end end При его использовании получаю вылет: FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...game\s.t.a.l.k.e.r\gamedata\scripts\quest_script.script:22: attempt to call method 'name' (a string value) stack trace: Вылет указывает на строку: if smart and (smart:name() ~= "mar_csky_base") and (level.name() == "marsh") then Но что тут нетак я немогу понять... Помогите кто знает! Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти