Перейти к содержанию

N42

Сталкеры
  • Публикаций

    1 113
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3

Сообщения, опубликованные N42


  1. Alex Jerki диск с формулами из х10 принес Сахарову? Маячки нет смысла продавать тем, кто задействован на разных локах, в основном это копии нпс, один удаляется - спавнится другой


  2. Спойлер

     

    manx функция, указанная в логике, не напрямую работает, сначала эту строчку спарсивает основной скрипт логики/торговли/или еще чего, подготавливает и выполняет в нужный момент. Он добавляет еще actor и npc в аргументы (npc - это объект, которому прописана использующаяся логика). На выходе получается if_hip_veteran(actor, npc, p) - тут actor и npc -  объекты, передающиеся всегда и независимо от записи в конфиге , p - это таблица как раз с тем, что написано в скобках у =if_hip_veteran(actor). В итоге  получится вот так:

    function if_hip_veteran(actor, npc, {"actor"})

    Т.е., (actor) передается третьим аргументом как строка в таблице, а с ней никаких действий в самой функции нет. В первой функции действия выполняются для npc-торговца, который идет вторым аргументом, а во второй функции выполняется для actor, поэтому только вторая функция работала. А переданный в скобках "actor" вообще не задействован.

    Аргументы на самом деле можно называть как захочется, но надо следить за тем, что передается изначально в функцию и в каком порядке, порядок важен.

    4 часа назад, manx сказал:

    В аргумент тут, по идее, нужно вписать название ранга (veteran, master и т.д.). Но кого он будет проверять на соответствие? npc ? Какого npc ? И как сделать, чтобы он проверял на ранг игрока, то есть actor ? Что вписывать в аргумент при вызове функции?

    Будет проверять того, в чьей логике/конфиге эта функция прописана. Если у торговца-найма прописано - будет проверяться он. Кроме названия ранга там ничего не вписать без редактирования самой функции.

    4 часа назад, manx сказал:

    Это все при условии, что я не хочу менять саму функцию, а просто использовать ее для условий в trade_.ltx

    Тут в любом случае не обойтись без редактирования либо создания копии функции. Сама функция npc_rank предназначена для проверки у нпс, а не у гг. Может быть уже есть такая же, но для гг, не смотрел.

    Чтобы в скобках передавать того, кого надо проверять - это надо писать новую функцию, которая будет по переданному в нее сиду или секции сначала получать объект, а потом проверять его на ранг, но это нужно только если надо проверять не гг и не торговца, а других. Для проверки гг достаточно сделать копию функции с другим названием и поменять там на if ranks.get_obj_rank_name(actor) == p[1] then , заморочки с написанием новой функции лишние, если нет какой-то большой системы зависимости торговли от других нпс, не от одного торговца и гг

     


  3. Спойлер
    9 часов назад, manx сказал:

    А как мне узнать, какое название (с actor_ или без) приписал герою движок?

    Движок сам ничего не приписывает, группировку задает мододел или в character_desc_general.xml или скриптом. Что мододел присвоит, то присвоит движок, сам он название не меняет.

    9 часов назад, manx сказал:

    По поводу return, то есть эти функции (к примеру) равнозначны:

    Да.

    9 часов назад, manx сказал:

    Почему здесь actor:character_reputation() , а не db.actor:character_reputation() ?

    Потому что actor прописан аргументом у функции

    9 часов назад, manx сказал:

    function if_actor_powerful(actor, npc)

    db.actor используется или если он не объявлен в какой-то переменной или если не передался в функцию. Можно использовать передавшийся actor, можно db.actor, но раз все равно он передался в функцию - используют actor (или другое название, назвать можно как угодно, это просто название для использования в функции)

    9 часов назад, manx сказал:

    Могу ли я использовать эти функции как условие в файлах trade_.ltx ?

    Да. Любую функцию можно использовать как условие, главное, чтобы возвращала true/false

     

    • Лайк 1

  4. Спойлер


    15 часов назад, manx сказал:

    1. То есть можно с уверенностью сказать, что функция character_community(db.actor) возвращает actor_dolg, а не просто dolg? В game_relations.ltx есть и actor_dolg и dolg... В чем разница между этими понятиями? Ведь герой может быть просто dolg

    Функция вернет группировку гг без изменений, а какую группировку присвоит гг мододел - не суть важно, хоть actor_dolg, хоть dolg, хоть terminator. Но лучше делать отдельные с actor_... чтобы не смешивались с нпс. Да и отношения гг с группировками можно делать отдельные, если нпс этих группировок враждуют, а с гг должны быть нейтральными

    15 часов назад, manx сказал:

    2. sub(7) получается обрезает возвращенный ответ на 7 символов? Я правильно понял?

    Типа того, вернет строку начиная с 7 символа. Почитай про string.sub (да и в целом про string для работы со строками).

    15 часов назад, manx сказал:

    3. Каким именно образом character_community(db.actor) получает actor_dolg ? Можно объяснить подробно новичку в программировании?

    character_community(db.actor) группировку получает из движка через метод obj:character_community(), она не со скриптов получает.

    15 часов назад, manx сказал:

    Что значит вот это: obj:character_community() ? Что вообще делает двоеточие?

    obj - это объект, принадлежащий к какому-нибудь классу (в данном случае класс game_object), после двоеточия указывается его метод. Т.е., это обращение к функции character_community() у объекта класса чтобы эта функция вернула группировку этого объекта. Про основные классы и их методы почитай тут (это по оригиналу, в коке добавили своих методов, но надо сначала изучить основу, а отдельно по коку таких тем не видел) https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkciyam-i-klassam/#comments

    Также там есть про то, как в сталкере вообще объекты работают, про клиенские и серверные, про нетпакеты, в общем, всё там изучай, чтобы стало понятно как всё работает

    15 часов назад, manx сказал:

    Точка в db.actor - это ссылка либо на файл, либо на таблицу?

    15 часов назад, manx сказал:

    db.actor - это ссылка на файл db.script ? Но там же actor = nil Как так?

    Он там ниже добавляется

    15 часов назад, manx сказал:

    Почему в функции указаны параметры (actor, npc, p), хотя они не все используются? Зачем лишние?

    Потому что эта функция написана для использования в логике объектов, туда передается объект, для которого эта логика используется. Часто для таких функций нужен сам этот объект, и чтобы постоянно не извращаться и не получать его отдельно он сразу передается

    15 часов назад, manx сказал:

    return db.actor and string.find(character_community(db.actor),comm) ~= nil

    Я правильно понял, что после return идут условия этого return ? Это какая-то недокументированная фича? В руководствах об этом ни слова не сказано. Там сказано, что return всегда идет в конце и после него ничего не должно быть из условий

    Это не после него, это вместе с ним. Эти условия должны вернуть true или false, и их уже передает return. Сначала вычисляются эти условия, потом return передает. Так меньше кода получается, удобнее

     


    Дополнено 4 минуты спустя
    14 часов назад, StrawFlux сказал:

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

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

    • Лайк 2

  5. 3 часа назад, manx сказал:

    return obj:character_community()

    Движок возвращает группировку, это не со скриптов

    3 часа назад, manx сказал:

    В чем разница между этими двумя функциями и почему они вообще по-разному написаны, если делают, по-сути, одно и то же?

    Например, у гг группировка actor_dolg. В функцию передается какое-то значение, с которым надо сравнить группировку гг. Через character_community(db.actor) получаешь actor_dolg, но в первой функции идет "обрезка" полученной группировки character_community(db.actor):sub(7) (получится dolg), во второй функции нет обрезки, проверяется без изменений. Значит, в первую функцию надо передавать dolg, потому что идет обрезка строки с группировкой гг, и если туда передать actor_dolg - функция всегда будет возвращать false (ведь у гг обрежется до dolg)

    is_actor_from_faction(dolg)

    Во вторую функцию передаешь actor_dolg, там нет обрезки, сравнивается сразу с actor_dolg

    actor_community(actor_dolg)

    Да, функции делают одно и то же, но лучше использовать вторую

    • Лайк 2

  6. Stalk873 да, цифры прописать, а отсутствующие секции добавить по аналогии. Еще предмет может не появиться если у него в секции useful_for_npc = false, вроде сталкивался с таким (может не прям у него, а в начальной секции, с которой наследуется)

    • Лайк 1
    • Мастер! 1

  7. ivanstrannik22 тему создал не разработчик, так что, если разработчик удалил по ссылке и никуда не перезалил - ну всё :u1F643: А что там с перезаливами хз, разработчики разругались и разошлись


    Дополнено 0 минут спустя
    2 часа назад, ivanstrannik22 сказал:

    а теперь как бомж по всему интернету приходится искать эти файлы

    С заброшенными и старыми модами часто так

    • Лайк 1
    • Мастер! 1

  8. Pe4nik если какой-то не тот кейс заспавнил - лучше откатиться до его спавна, вдруг на его появление у гг что-то повешено, потом могут быть проблемы с квестом, в котором этот предмет используется. Не обязательно, что будет, но лучше перебдеть. Если сильно далеко откатываться с лежкой - скинь последнюю сохранку (лучше в ВП около лозы). Патч какой установлен?

    • Лайк 3
    • Мастер! 1

  9. 18 часов назад, Pe4nik сказал:

    Когда-то выполнил квест для Басти на чумодан денюх, но решил сразу не отдавать и куда-то сунул. Перерыл всю географию - ни в одной нычке его нет. Заспавненный он не берет!

    Может не то спавнил? "case_buusty"

    18 часов назад, Pe4nik сказал:

    Вернулся с первой лежки Фенрира и он послал в ВП на дом с лозой. Прихожу, а там ни рюкзака с винтовкой, ни врагов... Да, и задание почему-то не появилось!

    Должно было задание появиться. Лучше откатись, может багнуло

     

    • Мастер! 1
    • Жму руку 1

  10. 22 часа назад, Fujien сказал:

    После какого момента я смогу получить точную или приблизительную наводку на тайник с рабочим Телепортатором?

    По ветке тайников Кости надо идти

    17 часов назад, Фраер_Жованный сказал:

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

    Перестреливался около него?

    17 часов назад, off_4elovek сказал:

    А когда я патч установлю, смогу играть дальше или заново придется? И можешь еще сказать, как установить патч и где его взять?

    Да, сможешь дальше играть. Патч в шапке

    2 часа назад, Makson123911 сказал:

    Почему не у кого аптечек нет

    Ищи хабар на локе, ящики разбивай, валялись халявные

    • Мастер! 1
    • Жму руку 1

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

    9 часов назад, Denikius сказал:

    когда на Янтаре не будет Дошифратора или еще какого-нибудь квестового предмета

    Квестовые предметы в исключениях, можно не переживать насчет них. Ну на самом деле, проблемы с количеством объектов в основном у тех, кто тонну барахла носит с собой и кто не чистит квестовый спавн, в оп 2 мне столько таких попадалось, и не разу не было проблем из-за того, что нпс там пылесосили всё. А lexa уже привык, что там в теме в основном вот такие с тонной в инвентаре, вот и по-умолчанию так отвечает. Если человек понимает, что делает, то и проблем никаких не будет.

    • Лайк 1
    • Мастер! 2

  12. Stalkervernite а, это оригинальный закомменченный код. У себя попробовал - проигрывается, но не у ближайшего нпс и тихо


    Дополнено 7 минуты спустя

    Может еще сами реплики не особо удачные, не выделяются на фоне боевых, попробуй у newbie заменить звуки из stalker (ну это я по деревне новичков сужу)


  13. Stalk873 вроде он не особо менялся. Я не помню, чтобы у меня были сильные отличия в 2.2 от 2.1, а вот по сравнению с оп 2 стали меньше обыскивать. Но это к лучшему, быстрее на цз и хомяки накопится) Поковыряй дистанцию в ev_see_stuff:evaluate и ev_see_body:evaluate, но если сам нпс не видит объект - он к нему все равно не пойдет

    • Мастер! 1
    • Хабар 1