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

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

  Информация (Показать)

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

  Читать рекомендуется. (Показать)

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий

Функция xr_gulag.get_npc_gulag(npc) возвращает объект типа "строка", подозреваю что она УЖЕ возвращает имя смарта, тоесть smart:name() надо заменить на просто smart.

if smart and (smart ~= "mar_csky_base") and (level.name() == "marsh") then

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

*Shoker*:

Во-первых: не делай поспешных выводов. xr_gulag.get_npc_gulag (obj) не возвращает объект типа строка.

Во-вторых: это уже обсуждалось на предыдущей странице.

 

TASTAN, могу ошибаться, но для для объекта гулага/смарта есть свойство name сравни его с именем нужного тебе гулага. Попробуй переписать строку так:

if smart and (smart.name ~= "mar_csky_base") and (level.name() == "marsh") then

Изменено пользователем ColR_iT
Ссылка на комментарий

ColR_iT, Да спасибо работает!

 

Еще один вопрос. Я зделал торговца но он почему-то выкидывает все оружие из торговли, как это можно исправить?

Торговцу логику и тд делал через смарт:

  логика (Показать)
Изменено пользователем ColR_iT
Ссылка на комментарий

TASTAN

can_select_items = off 
can_select_items = on

помойму так, тогда не будет выкидывать.

 

И в файле m_stalker, также прописываем:

 

use_single_item_rule = off 
can_select_items = on

что бы НПС не выбрасывали купленное оружие!!!

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

Жизнь следует измерять поступками, а не временем...

Ссылка на комментарий

как прописать в логике НПС созданного без редактирования all.spawn чтобы он сидел у костра и жрал и т д и реагировал на врагов ( убив их вернулся обратно к костру )

Пункт 3.

Ссылка на комментарий

S.T.A.L.K.E.R-DOLG

 

Никаких проблем!!!

  логика у костра (Показать)

Жизнь следует измерять поступками, а не временем...

Ссылка на комментарий

Всех с наступившим НГ!

 

В ЗП, мне нужно сделать так, чтобы некая область на локации была игнорируемой мобами определенного типа, и юзабельна всеми остальными мобами и НПС.

Для примера, наклонная деревянная лестница сторожевых вышек. Когда туда (на верх) лезет псевдогигант, то это выглядит смешно и нелепо.

Или когда крысы/тушканы/кошаки штурмуют вертикальные лестницы резвее спецназовцев. Ну, не Куклачев же их дрессирует. :ny_megalol:

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

Я так понимаю, нужно "обернуть" подобные области рестрикторами.

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

Хоть подскажите куда "копать".

 

Заранее спасибо.

Ссылка на комментарий

Dennis_Chikin, Artos

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

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

Если я всё не правильно понял, то можете и не пояснять. Просто в моём понимании на данный момент я бы использовал паттерен :

... func:match('%S+%.%S+')

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

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

Сразу прошу знающих людей пояснить, - "В чём я не прав?"

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

Но с другой стороны иного поведения я ещё не встречал. Сложный паттерн заметнее тормозит, по сравнению со "сложной"(???) строкой.

Изменено пользователем Gun12
Ссылка на комментарий

Gun12, в том контексте патерны применяются действительно для разделения по точке, но(!) не для свободной строки, а только для строки, состояшей из имени скрипта и имени функции. Т.к. эти имена не могут (не должны) содержать ничего кроме латиницы, цифр и некоторых символов пунктуации (типа '_','-'), то применять в патерне %S (любой символ кроме пробела) неразумно, т.к. в таком случае при некорректных записях в конфигах логики вместо прерывания будут попытки вызвать функции с недопустимыми/некорректными именами, что нередко приводит к вылетам без лога или к записи в логе с малоинформативной записью, по которой сложно определить место возникновения ошибки.

Иными словами, цель того расширения, о котором шла речь - дать возможность в логике задавать не только штатные функции из xr_conditions.script и xr_effects.script, а из иных скриптов по усмотрению моддмейкера, но(!) с обязательной проверкой на корректность задания такой сторонней функции. По хорошему, туда стоило бы добавить еще проверку на тип данных ( == 'function'), но ... кто-то посчитает это излишней перестраховкой (все же коды/кофиги нужно писать не тяп-ляп).

 

AK74, дам пока посказку:

Почему монстры с арены (на локации Бар) не разбегаются по сторонам (по всей локации), а только на ней буянят?

Им прописан рестриктор, который обязывает их находиться именно в нем.

Как вариант, по аналогии: прописать твоим монстрам рестрикторы, в которые они не должны заходить.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
  Artos писал(а):
а только для строки, состояшей из имени скрипта и имени функции. Т.к. эти имена не могут (не должны) содержать ничего кроме латиницы, цифр и некоторых символов пунктуации (типа '_','-')

Вот это я имел в виду. Если изначально составить строку как нужно...

То они и не будут содержать...

А значит и паттерн...

А в общем прошу прощения, т.к : P.S.

2Всем. В силу всего услышанного о "псевдо"классах в lua, и их несостоятельности, не стану скорее всего выкладывать наработки таймеров. А то забьют на.

2Artos

На днях отдам их тебе(есть пару тонкостей - нужно доработать). Если посчитаешь нужным, и, я так надеялся, таймеры окажутся действительно полезными, то... Дай то Бог.

Изменено пользователем Gun12
Ссылка на комментарий

Gun12, и зря ... испугался возможной критики. :-(

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

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

Ссылка на комментарий

HellStalkerDog

 

Отчасти ты и сам ответил на свой вопрос!!!

Либо координаты неправильно снял, либо в функцию вставил неверно...

function esc_bandit ()
         alife():create("esc_bandit_1",vector():set(89.167,-7.47,-26.069),385326,114)
         end

Первые три цифры означают X,Y,Z, четвертая за скобкой - (l.vertex) левел_вертекс и пятая (g.vertex)гаме_вертекс.

Жизнь следует измерять поступками, а не временем...

Ссылка на комментарий
  losiara писал(а):
S.T.A.L.K.E.R-DOLG

 

Никаких проблем!!!

  логика у костра (Показать)

Пункт 3.

Ссылка на комментарий

S.T.A.L.K.E.R-DOLG, боюсь, что losiara, тебя немножко сбил с толку.

Во-первых: для того, чтобы править логику НПС созданного без редактирования all.spawn - её (логику) нужно задавать через нет-пакеты.

losiara же привел тебе цитату с wiki и данное актуально именно при редактировании файла спавна.

center_point = kamp_center, здесь kamp_center - это название пути в файле way_название_локации распакованного all.spawn. Таким образом тебе нужно твои координаты писать в таком виде:

  код (Показать)
Изменено пользователем ColR_iT
Ссылка на комментарий

ColR_iT

Даже и не думал сбивать с толку!

Ведь он попросил ЛОГИКУ, я ее и описал, это kamp. НПС созданный скриптом или через all.spawn, без разницы будет при любой логике кроме ремарка иметь точку(точки) прописанные через all.spawn, way...название локации, как вы и показали в своем "код". Саму же логику мы как обычно пропишем в gamedata\config\scripts, -- файл логики название любое.ltx. Я сомневаюсь, что S.T.A.L.K.E.R-DOLG будет задавать логику через функцию\скрипт... хотя кто знает... :)

Жизнь следует измерять поступками, а не временем...

Ссылка на комментарий

losiara

  Цитата
хотя кто знает...
Вот видишь, сам же понял, что немного не к месту. По теме, но не к месту.

Ключевыми словами в вопросе были

  Цитата
без редактирования all.spawn
(причины не важны). Поэтому задавать логику таким образом, который предложил ты, здесь не уместно, поскольку точку центра кампа, нужно вносить в файл all.spawn, что немного противоречит задаче.

  P.S. (Показать)
Ссылка на комментарий

Кто может подсказать почему этот скрипт срабатывает только когда его вызывают 2 раз? Тоесть по правильному этот скрипт должен работать так:

При первом вызове он должен заспаунить объект в 1 слот и сделать его активным. Но при первом вызове лишь создаёт объект в инветарь, а уже при втором и последующих вызовах работает как надо.

  код (Показать)
Изменено пользователем Artos
Ссылка на комментарий

К сожалению многие не утруждают себя задавать вопросы ни грамотно по форме, ни по сути, довольствуясь достаточно размытыми или дву- много-значными фразами. Нейжели самим не ясно, что чем понятнее задан вопрос - тем быстрее и качественнее может быть дан ответ?!

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

Примечание: Если же нужного пути/сентра нет в алл.спавне, то его (нового пути/точек) внесение не требует особых усилий и не требует новой игры.

 

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

Boofer, твое заблуждение и соответственно ожидание невозможного в том, что:

1. Невозможно заспавнить объект непосредственно в слот за один прием одной функцией.

Можно заспавнить в некий объект (например в рюкзак к актору) и при определенных свойствах объекта - этот объект сам попадет в соответствующий слот ... Если же слот занят - придется потрудиться переложить прежний объект и вновь заспавненный ...

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

Т.о. заспавнив объект, ты никогда не получишь этот клиентский объект в той же самой функции и в том же самом вызове.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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