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

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

Функция 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, Да спасибо работает!

 

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

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

[logic@mar_csky_base_trader]
active = walker@mar_csky_base_trader
trade = misc\trade_csky_suslov.ltx
inv_max_weight = 10000
use_single_item_rule = off 
can_select_items = off

[walker@mar_csky_base_trader]
path_walk = trader
path_look = trader_look
meet = meet@no_wpn

[meet@no_wpn]
use             = true
use_wpn         = false

 

Изменено пользователем 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

 

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

Схема kamp

Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.

 

Вариантов много, например:

[smart_terrains]
none = true


[logic]
active = kamp

[kamp]
center_point = kamp_center ;имя точки вокруг которой NPC будет усаживаться. 
radius = 2;насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию
def_state_moving = run ;дефолтное состояние, в котором сталкер будет идети к точке кампа

Обычно прописывают под гулагом...

 

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

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

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

 

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

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

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

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

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

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

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

 

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

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

Dennis_Chikin, Artos

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

Изменено пользователем 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)гаме_вертекс.

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

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

 

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

Схема kamp

Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.

 

Вариантов много, например:

[smart_terrains]
none = true


[logic]
active = kamp

[kamp]
center_point = kamp_center;имя точки вокруг которой NPC будет усаживаться. 
radius = 2;насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию
def_state_moving = run;дефолтное состояние, в котором сталкер будет идети к точке кампа

Обычно прописывают под гулагом...

[kamp]

center_point = kamp_center ;имя точки вокруг которой NPC будет усаживаться.-------- (-446.57,-0.2,-151.71),258525,3905) координаты вокруг костра поставить такие ?

radius = 2;насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию

def_state_moving = run ;дефолтное состояние, в котором сталкер будет идети к точке кампа---- не понял

Пункт 3.

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

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

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

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

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

[kamp_center]
points = p0
p0:name = wp00
p0:position = -446.57,-0.2,-151.71
p0:game_vertex_id = 3905
p0:level_vertex_id = 258525

Совет! Давай имена более продуманно и развернуто, например novice_lager_kamp_center

 

def_state_moving = run - это состояние в котором НПС будут идти к точке kamp_center, если они отвлекутся на данжер или просто перейдут на эту схему. В данном случае - бег (run), все состояния можно посмотреть в файле state_lib.script из раздела "Ходячие состояния".

Изменено пользователем 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, что немного противоречит задаче.

Если тебя не затруднит, то попрошу обращаться ко мне на "ты".

 

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

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

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

function use_cigarette()
    give_info("ui_inventory_hide")
    local weapon = db.actor:item_in_slot(1)
    finished("cigarette")
    if weapon~=nil then
    if weapon:section()~="cigarette" then 
        this.drop_item_to_inventory(1) 
    end
    db.actor:activate_slot(1)
    if db.actor:object("cigarette")==nil then mn_script.spawn_item_in_inv("cigarette") end
        db.actor:activate_slot(1)
    end
    if weapon==nil then
        db.actor:activate_slot(1)
    if db.actor:object("cigarette")==nil then mn_script.spawn_item_in_inv("cigarette") end
        db.actor:activate_slot(1)
    end
    db.actor:activate_slot(1)
end

Для 'портянок' кодов/логов используем спойлеры! --/Artos

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Войти

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

Войти
×
×
  • Создать...