Перейти к контенту

Внимание. На форуме проводятся технические работы с боковым меню.

_Val_ _Val_

Скриптование


Svoboда

Рекомендуемые сообщения

zitulok, либо в этом дело pN:links - они у тебя не прописаны как раз для начальных точек путей(да и вообще криво), либо НПС не видит точку пути(она находится вне аи сетки/за уровнем) и уходит гулять(что в данном случае маловероятно).

 

 

Как отследить что НПС был убит к примеру с гранаты или гранатомета?...если не возможно, то как отследить момент кидания гранаты и момент выстреливания подствольника/гранатомета?

 

 

Поделиться этим сообщением


Ссылка на сообщение

Как сделать в скриптовом диалоге рандомный выбор следующей фразы?(одну из двух)...пробовал и с прекондишном, и с пустой фразой...что-то все не то что нужно.

 

Вот когда сформулируешь, что же "нужно", и что/как делал и вышло - "не нужно", тогда и возможен дальнейший разговор/подсказки, а не погадалки. --/Artos

Изменено пользователем Artos

Поделиться этим сообщением


Ссылка на сообщение

Делал я откровенно говоря бред, поэтому и вышло то что "не нужно".

 

А что надо...

 

- Текст 1 =>

- Текст 2 =>

- Текст 3 либо Текст 4

 

Еще часто баги вылетают такие, что как бы НПС говорит фразу ГГ, или после моей фразы опять такая же(по содержанию) только НПС ее говорит. Как с этим бороться?

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение

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 мин.:

Что-то никак не поборю эти баги, рандом работает как нужно, спасибо.

 

Вот я даже засунул диалог и тутора(там априори не может быть неправильно), вот такое словил:

 

3176410m.jpg

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение

proger_Dencheek, проверять свершилось ли твое действие, и подменять ствол на более лучший.

 

Zander_driver, спасибо, все вышло как надо, просто я делал по тутору...и не удосужился посмотреть примеры в файлах игры, все как всегда просто оказалось, появился вылет правда "No available phrase to say, dialog[escape_trader_test_2]", но видно диалог не так составил.

 

Strelok_124, вешай в death_callback'и неписей и монстров проверку на активное оружие в руках, если это гранатометы, то считывай инвентарь НПС записывай в табличку спавни рюкзак при взятии которого эта табличка спавнится актору(на мотив сетевой игры), а труп удаляй и проигрывай партикл...был какойто забугорный мод где это сделали. А кровь вроде и так останется...но я не уверен.

Поделиться этим сообщением


Ссылка на сообщение
Zander_driver, до этого я додумался...в функции выбора рандомной фразы поставил операторы >= и <=, но вылет остался. Прекондишны висят только там. Глянул твою функцию рандома, понял одно отличие, буду пробовать :) .

Поделиться этим сообщением


Ссылка на сообщение

Что-то ребята мои потуги ни к чему нормальному не приводят, первая фраза выбирается, а вот когда рандом срабатывает второй раз - вылетает.(с вышеуказанным логом)

 

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

 

Поделиться этим сообщением


Ссылка на сообщение

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

 

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение
Zander_driver, точно, чего-то я не вник в ответы, сейчас со всем разобрался и работает как надо, спасибо за разъяснения.

Поделиться этим сообщением


Ссылка на сообщение

Подскажите какие файлы задействованы в создании диалога на мотив "Что можешь интересного рассказать?", кроме dialog_manager.script и dialog_manager.ltx.

 

Что-то никак свой не получается добавить.

Поделиться этим сообщением


Ссылка на сообщение

ins33, как я понял ты ставишь метку функцией add_spot_on_map2, а что такое там есть obj.id у тебя? В этой функции и надо получать тогда sid объекта. И что вот metka_gost.add_spot_on_map это за ахинея мне тоже неясно. И уровень ты неправильно определяешь...функция получения уровня level.name(), а не level_name.

 

Да, и в биндере актора ты тоже вызываешь непонятно что(уровень в другом месте проверять надо), и непонятно как. В данном случае апдейт можно вообще не трогать, только net_spawn.

 

Artos, все же этот вопрос относится больше к скриптам, чем к чему либо еще. Версия ТЧ 1.0004.

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение

ins33, твою функцию нужно вызывать в net_spawn, и в самое начало вставить что-то типа:

 

if level.name() == "l05_bar" then

 

Это и будет проверкой уровня.

 

У тебя функция неверная, 4 функции вместо одной.

Поделиться этим сообщением


Ссылка на сообщение

IQDDD,

В придачу: изменяются ли id'ы после сохранения/загрузки?

 

Они неизменны на протяжении всей игры. Id пропадает только тогда, когда пропадает(удаляется из игры) объект к которому он был присвоен.

 

А по поводу первого вопроса, если я конечно правильно понял его суть, можешь просто проверять тип передаваемой переменной на эквивалентность числовому параметру.

 

Вопрос: каким образом можно получить определенный участок местности на заданной локации. Допустим АТП и его 'округ' на Кордоне. Но больше меня интересует алгоритм унифицированного кода для определения такого типа местностей...т.е. объектов-ориентиров(типа АТП, фермы и иже с ними) и их 'округов'.

 

Исходно в консоль допустим чтобы у меня вылетело типа "На АТП" либо "На подходе к АТП" и т.п.

 

Задумка в том, что мне нужно определить местоположение нужного объекта(клиентского/серверного), то есть где он ошивается.

 

P.S. вариант со спейс рестрикторами не предлагать, мне здесь нужно что-то типа "определения расстояния до...", но кучу проверок(типа distance_to) писать тоже не хочу.

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение

Вроде как просто(!) определить положение - додумался...забить рядом с текстом нужной местности его x,y,z, и проверять расстояние нужного объекта до этих координат, но как определить где эта местность?(юг, восток, север, запад и т.д.)

Поделиться этим сообщением


Ссылка на сообщение

proger_Dencheek, есть скрипт счетчика смертей ГГ...смотри его.(в своих архивах я его быстро точно не отыщу)

 

IQDDD, так для кого пишу то, что кучу проверок и спейс рестрикторов мне делать неохота, нужен алгоритм(!) способа определения стороны света с помощью скажем всеми любимых тригонометрических функций, в зависимости объекта к заданным мною координатам, а спейс рестрикторы, которые ты предлагаешь тут делать(не приоритетно, но предлагаешь), здесь абсолютно ни к чему, т.к. расстояние "до" легко определяется функцией 'distance_to', и городить тут рестрикторы по меньшей мере глупо.

 

Общий алгоритм я уже составил и частично реализовал - работает как мне надо, вот осталось определить с какой стороны от точки бродит мой объект.

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение
IQDDD, я и прошу дать мне алгоритм этой математической задачи, мне больше ничего и не нужно. На данный момент у меня только координата нужной позиции. Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение

_Призрак_, вот оно как :), ну в геометрии я ноль абсолютной(не знаю даже что такое вектор, алгебра моя стихия...), ну так вот, а получить северо-запад например как? Все ж таки я думаю нужно использовать какие то тангенсы и магическое math.pi

 

7.9, dirsector как я понял это у тебя дирекция объекта?

 

Добавлено через 61 мин.:

Курю мануалы по геометрии за 7 класс :D ...вроде уже потихоньку доходить начинает, сейчас еще разберусь как отклонения взять, и будет то что мне надо.

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение

IQDDD, да не ворчи ты :), для меня на сталкерских форумах "дирекция" - "направление взгляда объекта", как бы одно слово заменяет три, и вроде всем понятно о чем говорю, разве нет?

 

P.S. Я согласен, что это неправильно, но в данном случае...можно простить.

 

Поменьше оффтопика ... иначе будут приниматься меры без всяких "прощалок". --/Artos

 

Всем спасибо(особенно за совет про геометрию), почитал - вдумался, повторил курс и написал что надо :D...попробую еще другие варианты помусолить, хотя и этот мой работает как надо, но все же хочется найти еще какие-нибудь решения.

 

Теперь следующий вопрос.

 

Как создать глобальную функцию? Типа IsStalker.

 

Смотрел моды где это реализовано...но там ничего не понял, скажите хоть что 'покурить' или куда 'копать'.

 

Читать мануал по Lua! Именно читать, а не курить его ... --/Artos

Изменено пользователем Artos

Поделиться этим сообщением


Ссылка на сообщение

Хотел еще узнать что такое '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, создай простой таймер и сохрани его в пстор(что бы отсчет не начинался сначала при сейв/лоаде).

Поделиться этим сообщением


Ссылка на сообщение

Есть какой-нибудь рациональный способ получения всех 'НЕтайниковых' ящиков. Например того, что на Кордоне в лагере новичков около костра.

 

Делаю последнее предупреждение по оффтопику. Топик имеет конткретную тематику "Скриптование" и в разделе "Школа"!

, т.е. конкретные вопросы/проблемы/решения по скриптам. Не нужно путать со справочным бюро иль с бюро находок, тем более без уточнений версии игры и с невнятными критериями.

Лень самому искать, сравнивать и т.п. - GoTO в ковырялки ... --/Artos

Изменено пользователем Artos

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...