Struck 61 Опубликовано 29 Июля 2012 zitulok, либо в этом дело pN:links - они у тебя не прописаны как раз для начальных точек путей(да и вообще криво), либо НПС не видит точку пути(она находится вне аи сетки/за уровнем) и уходит гулять(что в данном случае маловероятно). Как отследить что НПС был убит к примеру с гранаты или гранатомета?...если не возможно, то как отследить момент кидания гранаты и момент выстреливания подствольника/гранатомета? Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 30 Июля 2012 (изменено) Как сделать в скриптовом диалоге рандомный выбор следующей фразы?(одну из двух)...пробовал и с прекондишном, и с пустой фразой...что-то все не то что нужно. Вот когда сформулируешь, что же "нужно", и что/как делал и вышло - "не нужно", тогда и возможен дальнейший разговор/подсказки, а не погадалки. --/Artos Изменено 30 Июля 2012 пользователем Artos Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 30 Июля 2012 (изменено) Делал я откровенно говоря бред, поэтому и вышло то что "не нужно". А что надо... - Текст 1 => - Текст 2 => - Текст 3 либо Текст 4 Еще часто баги вылетают такие, что как бы НПС говорит фразу ГГ, или после моей фразы опять такая же(по содержанию) только НПС ее говорит. Как с этим бороться? Изменено 30 Июля 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 31 Июля 2012 (изменено) Zander_driver, Не тот тип данных при своевольных трактовках луа приводит к глюкам в данном случае. Не понял вот эту фразу...вот мой диалог в котором косяки: function news_dlg(dlg) phr0 = dlg:AddPhrase(intro_phrase[math.random(1, table.getn(intro_phrase))], "0", "", -10000):GetPhraseScript() phr0:AddHasInfo("tutorial_end") phr1 = dlg:AddPhrase("Текст 2", "1_2", "0", -10000):GetPhraseScript() phr1:AddAction("escape_dialog.costs") phr1:AddPrecondition("escape_dialog.randomselect_1_2") phr2 = dlg:AddPhrase(no_item_phrase[math.random(1, table.getn(no_item_phrase))], "2_2", "0", -10000):GetPhraseScript() phr2:AddPrecondition("escape_dialog.randomselect_2_2") -- phr2:AddAction("dialogs.break_dialog") end Добавлено через 30 мин.: Что-то никак не поборю эти баги, рандом работает как нужно, спасибо. Вот я даже засунул диалог и тутора(там априори не может быть неправильно), вот такое словил: Изменено 31 Июля 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 1 Августа 2012 proger_Dencheek, проверять свершилось ли твое действие, и подменять ствол на более лучший. Zander_driver, спасибо, все вышло как надо, просто я делал по тутору...и не удосужился посмотреть примеры в файлах игры, все как всегда просто оказалось, появился вылет правда "No available phrase to say, dialog[escape_trader_test_2]", но видно диалог не так составил. Strelok_124, вешай в death_callback'и неписей и монстров проверку на активное оружие в руках, если это гранатометы, то считывай инвентарь НПС записывай в табличку спавни рюкзак при взятии которого эта табличка спавнится актору(на мотив сетевой игры), а труп удаляй и проигрывай партикл...был какойто забугорный мод где это сделали. А кровь вроде и так останется...но я не уверен. Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 1 Августа 2012 Zander_driver, до этого я додумался...в функции выбора рандомной фразы поставил операторы >= и <=, но вылет остался. Прекондишны висят только там. Глянул твою функцию рандома, понял одно отличие, буду пробовать . Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 1 Августа 2012 Что-то ребята мои потуги ни к чему нормальному не приводят, первая фраза выбирается, а вот когда рандом срабатывает второй раз - вылетает.(с вышеуказанным логом) function random_phrase() return math.random(1,10) end function randomselect_1_2() return (random_phrase() < 6) end function randomselect_2_2() return (random_phrase() > 5) end Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 1 Августа 2012 (изменено) Artos, я добавил еще одну фразу, но вылет остался, вот код: function random_phrase() return math.random(1,15) end function randomselect_1_1() return (random_phrase() < 6) end function randomselect_1_2() return (random_phrase() > 5 and random_phrase() < 11) end function randomselect_1_3() return (random_phrase() > 10 and random_phrase() <= 15) end function t_news_dlg(dlg) phr0 = dlg:AddPhrase(intro_phrase[math.random(1, table.getn(intro_phrase))], 0, -1, -10000):GetPhraseScript() phr0:AddHasInfo("tutorial_end") phr1 = dlg:AddPhrase("Текст2", 1, 0, -10000):GetPhraseScript() phr1:AddAction("escape_dialog.costs") phr1:AddPrecondition("escape_dialog.randomselect_1_1") phr2 = dlg:AddPhrase(no_item_phrase[math.random(1, table.getn(no_item_phrase))], 2, 0, -10000):GetPhraseScript() phr2:AddPrecondition("escape_dialog.randomselect_1_2") phr3 = dlg:AddPhrase(no_item_phrase[math.random(1, table.getn(no_item_phrase))], 3, 0, -10000):GetPhraseScript() phr3:AddPrecondition("escape_dialog.randomselect_1_3") phr4 = dlg:AddPhrase("Текст4",4, 1, -10000):GetPhraseScript() phr5 = dlg:AddPhrase("Текст5",5, 2, -10000):GetPhraseScript() phr6 = dlg:AddPhrase("Текст6",6, 3, -10000):GetPhraseScript() end Изменено 1 Августа 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 2 Августа 2012 Zander_driver, точно, чего-то я не вник в ответы, сейчас со всем разобрался и работает как надо, спасибо за разъяснения. Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 2 Августа 2012 Подскажите какие файлы задействованы в создании диалога на мотив "Что можешь интересного рассказать?", кроме dialog_manager.script и dialog_manager.ltx. Что-то никак свой не получается добавить. Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 3 Августа 2012 (изменено) ins33, как я понял ты ставишь метку функцией add_spot_on_map2, а что такое там есть obj.id у тебя? В этой функции и надо получать тогда sid объекта. И что вот metka_gost.add_spot_on_map это за ахинея мне тоже неясно. И уровень ты неправильно определяешь...функция получения уровня level.name(), а не level_name. Да, и в биндере актора ты тоже вызываешь непонятно что(уровень в другом месте проверять надо), и непонятно как. В данном случае апдейт можно вообще не трогать, только net_spawn. Artos, все же этот вопрос относится больше к скриптам, чем к чему либо еще. Версия ТЧ 1.0004. Изменено 3 Августа 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 3 Августа 2012 ins33, твою функцию нужно вызывать в net_spawn, и в самое начало вставить что-то типа: if level.name() == "l05_bar" then Это и будет проверкой уровня. У тебя функция неверная, 4 функции вместо одной. Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 19 Августа 2012 (изменено) IQDDD, В придачу: изменяются ли id'ы после сохранения/загрузки? Они неизменны на протяжении всей игры. Id пропадает только тогда, когда пропадает(удаляется из игры) объект к которому он был присвоен. А по поводу первого вопроса, если я конечно правильно понял его суть, можешь просто проверять тип передаваемой переменной на эквивалентность числовому параметру. Вопрос: каким образом можно получить определенный участок местности на заданной локации. Допустим АТП и его 'округ' на Кордоне. Но больше меня интересует алгоритм унифицированного кода для определения такого типа местностей...т.е. объектов-ориентиров(типа АТП, фермы и иже с ними) и их 'округов'. Исходно в консоль допустим чтобы у меня вылетело типа "На АТП" либо "На подходе к АТП" и т.п. Задумка в том, что мне нужно определить местоположение нужного объекта(клиентского/серверного), то есть где он ошивается. P.S. вариант со спейс рестрикторами не предлагать, мне здесь нужно что-то типа "определения расстояния до...", но кучу проверок(типа distance_to) писать тоже не хочу. Изменено 19 Августа 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 19 Августа 2012 Вроде как просто(!) определить положение - додумался...забить рядом с текстом нужной местности его x,y,z, и проверять расстояние нужного объекта до этих координат, но как определить где эта местность?(юг, восток, север, запад и т.д.) Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 19 Августа 2012 (изменено) proger_Dencheek, есть скрипт счетчика смертей ГГ...смотри его.(в своих архивах я его быстро точно не отыщу) IQDDD, так для кого пишу то, что кучу проверок и спейс рестрикторов мне делать неохота, нужен алгоритм(!) способа определения стороны света с помощью скажем всеми любимых тригонометрических функций, в зависимости объекта к заданным мною координатам, а спейс рестрикторы, которые ты предлагаешь тут делать(не приоритетно, но предлагаешь), здесь абсолютно ни к чему, т.к. расстояние "до" легко определяется функцией 'distance_to', и городить тут рестрикторы по меньшей мере глупо. Общий алгоритм я уже составил и частично реализовал - работает как мне надо, вот осталось определить с какой стороны от точки бродит мой объект. Изменено 19 Августа 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 19 Августа 2012 (изменено) IQDDD, я и прошу дать мне алгоритм этой математической задачи, мне больше ничего и не нужно. На данный момент у меня только координата нужной позиции. Изменено 19 Августа 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 19 Августа 2012 (изменено) _Призрак_, вот оно как , ну в геометрии я ноль абсолютной(не знаю даже что такое вектор, алгебра моя стихия...), ну так вот, а получить северо-запад например как? Все ж таки я думаю нужно использовать какие то тангенсы и магическое math.pi 7.9, dirsector как я понял это у тебя дирекция объекта? Добавлено через 61 мин.: Курю мануалы по геометрии за 7 класс ...вроде уже потихоньку доходить начинает, сейчас еще разберусь как отклонения взять, и будет то что мне надо. Изменено 19 Августа 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 20 Августа 2012 (изменено) IQDDD, да не ворчи ты , для меня на сталкерских форумах "дирекция" - "направление взгляда объекта", как бы одно слово заменяет три, и вроде всем понятно о чем говорю, разве нет? P.S. Я согласен, что это неправильно, но в данном случае...можно простить. Поменьше оффтопика ... иначе будут приниматься меры без всяких "прощалок". --/Artos Всем спасибо(особенно за совет про геометрию), почитал - вдумался, повторил курс и написал что надо ...попробую еще другие варианты помусолить, хотя и этот мой работает как надо, но все же хочется найти еще какие-нибудь решения. Теперь следующий вопрос. Как создать глобальную функцию? Типа IsStalker. Смотрел моды где это реализовано...но там ничего не понял, скажите хоть что 'покурить' или куда 'копать'. Читать мануал по Lua! Именно читать, а не курить его ... --/Artos Изменено 20 Августа 2012 пользователем Artos Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 20 Августа 2012 Хотел еще узнать что такое 'coroutine', в _g вижу его использование, но не вижу где он сам. Посмотрите еще, я правильно понял создание глобальной функции? _G.has_actor_pda = function f_has_actor_pda() return db.actor:object("device_pda") end И теперь я просто могу вызывать has_actor_pda()? А еще как в таких функциях передавать параметры, или они будут просто наследоваться из f_has_actor_pda()? ins33, создай простой таймер и сохрани его в пстор(что бы отсчет не начинался сначала при сейв/лоаде). Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 20 Августа 2012 (изменено) Есть какой-нибудь рациональный способ получения всех 'НЕтайниковых' ящиков. Например того, что на Кордоне в лагере новичков около костра. Делаю последнее предупреждение по оффтопику. Топик имеет конткретную тематику "Скриптование" и в разделе "Школа"! , т.е. конкретные вопросы/проблемы/решения по скриптам. Не нужно путать со справочным бюро иль с бюро находок, тем более без уточнений версии игры и с невнятными критериями. Лень самому искать, сравнивать и т.п. - GoTO в ковырялки ... --/Artos Изменено 21 Августа 2012 пользователем Artos Поделиться этим сообщением Ссылка на сообщение