*Shoker* 322 Опубликовано 2 Января 2012 Поделиться Опубликовано 2 Января 2012 (изменено) Функция xr_gulag.get_npc_gulag(npc) возвращает объект типа "строка", подозреваю что она УЖЕ возвращает имя смарта, тоесть smart:name() надо заменить на просто smart. if smart and (smart ~= "mar_csky_base") and (level.name() == "marsh") then Изменено 3 Января 2012 пользователем ColR_iT Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
TASTAN 1 Опубликовано 3 Января 2012 Поделиться Опубликовано 3 Января 2012 *Shoker*, Зделал так как ты посоветовал, вылет пропал но и ф-ция неработает как надо(Не определяет смарт в котором нпс) Ссылка на комментарий
ColR_iT 171 Опубликовано 3 Января 2012 Поделиться Опубликовано 3 Января 2012 (изменено) *Shoker*: Во-первых: не делай поспешных выводов. xr_gulag.get_npc_gulag (obj) не возвращает объект типа строка. Во-вторых: это уже обсуждалось на предыдущей странице. TASTAN, могу ошибаться, но для для объекта гулага/смарта есть свойство name сравни его с именем нужного тебе гулага. Попробуй переписать строку так: if smart and (smart.name ~= "mar_csky_base") and (level.name() == "marsh") then Изменено 3 Января 2012 пользователем ColR_iT Ссылка на комментарий
TASTAN 1 Опубликовано 3 Января 2012 Поделиться Опубликовано 3 Января 2012 (изменено) 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 Изменено 3 Января 2012 пользователем ColR_iT Ссылка на комментарий
losiara 13 Опубликовано 3 Января 2012 Поделиться Опубликовано 3 Января 2012 (изменено) TASTAN can_select_items = off can_select_items = on помойму так, тогда не будет выкидывать. И в файле m_stalker, также прописываем: use_single_item_rule = off can_select_items = on что бы НПС не выбрасывали купленное оружие!!! Изменено 3 Января 2012 пользователем losiara Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
S.T.A.L.K.E.R-DOLG 1 Опубликовано 3 Января 2012 Поделиться Опубликовано 3 Января 2012 как прописать в логике НПС созданного без редактирования all.spawn чтобы он сидел у костра и жрал и т д и реагировал на врагов ( убив их вернулся обратно к костру ) Пункт 3. Ссылка на комментарий
losiara 13 Опубликовано 3 Января 2012 Поделиться Опубликовано 3 Января 2012 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 ;дефолтное состояние, в котором сталкер будет идети к точке кампа Обычно прописывают под гулагом... Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
AK74 4 Опубликовано 3 Января 2012 Поделиться Опубликовано 3 Января 2012 Всех с наступившим НГ! В ЗП, мне нужно сделать так, чтобы некая область на локации была игнорируемой мобами определенного типа, и юзабельна всеми остальными мобами и НПС. Для примера, наклонная деревянная лестница сторожевых вышек. Когда туда (на верх) лезет псевдогигант, то это выглядит смешно и нелепо. Или когда крысы/тушканы/кошаки штурмуют вертикальные лестницы резвее спецназовцев. Ну, не Куклачев же их дрессирует. :ny_megalol: В то же время, человекообразные вполне могут по ним лазить. Я так понимаю, нужно "обернуть" подобные области рестрикторами. А вот с настройкой рестрикторов и их логики - затык и не припомню ничего похожего, чтобы подсмотреть. Хоть подскажите куда "копать". Заранее спасибо. Ссылка на комментарий
Nazgool 250 Опубликовано 3 Января 2012 Поделиться Опубликовано 3 Января 2012 (изменено) Dennis_Chikin, Artos Вопрос для меня очень интересный, поэтому заранее извиняюсь, но как-то не сумел понять где и что нужно искать в упомянутых Вами строках. Мне кажется, что если Вы ищите среди множества записей в исходной строке (и искомым разделителем есть символ точки, как определяющий модуль и объект), а также разделителем выражений в подобных строках , как правило, является символ пробела, то... Если я всё не правильно понял, то можете и не пояснять. Просто в моём понимании на данный момент я бы использовал паттерен : ... func:match('%S+%.%S+') Как бы и не очень важно, но при работе функции, сравнение с тем, что текущий символ не пробел, выглядит для меня предпочтительнее, нежели сравнение текущего символа с символами из массива паттрена. Думаю что сравнительный тест скорости выполнения это подтвердит. Ну а если я ошибаюсь, то составлял бы искомую строку таким образом, чтобы она работала в унисон с подобным паттерном. Сразу прошу знающих людей пояснить, - "В чём я не прав?" С одной стороны кажется дико, что изначально хочу составлять строку. А затем к ней использовать, пусть и быстрый, паттерн. Паттерн ведь составить проще и динамичнее. Но с другой стороны иного поведения я ещё не встречал. Сложный паттерн заметнее тормозит, по сравнению со "сложной"(???) строкой. Изменено 3 Января 2012 пользователем Gun12 Ссылка на комментарий
Artos 99 Опубликовано 3 Января 2012 Поделиться Опубликовано 3 Января 2012 (изменено) Gun12, в том контексте патерны применяются действительно для разделения по точке, но(!) не для свободной строки, а только для строки, состояшей из имени скрипта и имени функции. Т.к. эти имена не могут (не должны) содержать ничего кроме латиницы, цифр и некоторых символов пунктуации (типа '_','-'), то применять в патерне %S (любой символ кроме пробела) неразумно, т.к. в таком случае при некорректных записях в конфигах логики вместо прерывания будут попытки вызвать функции с недопустимыми/некорректными именами, что нередко приводит к вылетам без лога или к записи в логе с малоинформативной записью, по которой сложно определить место возникновения ошибки. Иными словами, цель того расширения, о котором шла речь - дать возможность в логике задавать не только штатные функции из xr_conditions.script и xr_effects.script, а из иных скриптов по усмотрению моддмейкера, но(!) с обязательной проверкой на корректность задания такой сторонней функции. По хорошему, туда стоило бы добавить еще проверку на тип данных ( == 'function'), но ... кто-то посчитает это излишней перестраховкой (все же коды/кофиги нужно писать не тяп-ляп). AK74, дам пока посказку: Почему монстры с арены (на локации Бар) не разбегаются по сторонам (по всей локации), а только на ней буянят? Им прописан рестриктор, который обязывает их находиться именно в нем. Как вариант, по аналогии: прописать твоим монстрам рестрикторы, в которые они не должны заходить. Изменено 3 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Nazgool 250 Опубликовано 3 Января 2012 Поделиться Опубликовано 3 Января 2012 (изменено) а только для строки, состояшей из имени скрипта и имени функции. Т.к. эти имена не могут (не должны) содержать ничего кроме латиницы, цифр и некоторых символов пунктуации (типа '_','-') Вот это я имел в виду. Если изначально составить строку как нужно... То они и не будут содержать... А значит и паттерн... А в общем прошу прощения, т.к : P.S. 2Всем. В силу всего услышанного о "псевдо"классах в lua, и их несостоятельности, не стану скорее всего выкладывать наработки таймеров. А то забьют на. 2Artos На днях отдам их тебе(есть пару тонкостей - нужно доработать). Если посчитаешь нужным, и, я так надеялся, таймеры окажутся действительно полезными, то... Дай то Бог. Изменено 3 Января 2012 пользователем Gun12 Ссылка на комментарий
Artos 99 Опубликовано 3 Января 2012 Поделиться Опубликовано 3 Января 2012 Gun12, и зря ... испугался возможной критики. :-( Ну и "на днях" - как бы не оказалось, как в той пословице "хороша ложка к обеду" ... пока еще добиваю таймеры и, если в твоих материалах не будет чего-то нового или действительно заслуживающего внимания, то может все уже и решено и не захочется тратить время на уже пройденное (поэтому и просил дать именно наметки, чтобы и время не терять и в две головы не выполнять может быть одно и то же). "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
HellStalkerDog 0 Опубликовано 3 Января 2012 Поделиться Опубликовано 3 Января 2012 почему когда я спавню нпс через скрипт с координатами которые были в уроке он спавниться, а как свои вставлю нет. в чём причина? Ссылка на комментарий
losiara 13 Опубликовано 4 Января 2012 Поделиться Опубликовано 4 Января 2012 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 1 Опубликовано 4 Января 2012 Поделиться Опубликовано 4 Января 2012 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. Ссылка на комментарий
ColR_iT 171 Опубликовано 4 Января 2012 Поделиться Опубликовано 4 Января 2012 (изменено) 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 из раздела "Ходячие состояния". Изменено 4 Января 2012 пользователем ColR_iT Ссылка на комментарий
losiara 13 Опубликовано 4 Января 2012 Поделиться Опубликовано 4 Января 2012 ColR_iT Даже и не думал сбивать с толку! Ведь он попросил ЛОГИКУ, я ее и описал, это kamp. НПС созданный скриптом или через all.spawn, без разницы будет при любой логике кроме ремарка иметь точку(точки) прописанные через all.spawn, way...название локации, как вы и показали в своем "код". Саму же логику мы как обычно пропишем в gamedata\config\scripts, -- файл логики название любое.ltx. Я сомневаюсь, что S.T.A.L.K.E.R-DOLG будет задавать логику через функцию\скрипт... хотя кто знает... Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
ColR_iT 171 Опубликовано 4 Января 2012 Поделиться Опубликовано 4 Января 2012 losiara хотя кто знает...Вот видишь, сам же понял, что немного не к месту. По теме, но не к месту. Ключевыми словами в вопросе были без редактирования all.spawn (причины не важны). Поэтому задавать логику таким образом, который предложил ты, здесь не уместно, поскольку точку центра кампа, нужно вносить в файл all.spawn, что немного противоречит задаче. Если тебя не затруднит, то попрошу обращаться ко мне на "ты". Ссылка на комментарий
Boofer 0 Опубликовано 4 Января 2012 Поделиться Опубликовано 4 Января 2012 (изменено) Кто может подсказать почему этот скрипт срабатывает только когда его вызывают 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 Изменено 4 Января 2012 пользователем Artos Ссылка на комментарий
Artos 99 Опубликовано 4 Января 2012 Поделиться Опубликовано 4 Января 2012 (изменено) К сожалению многие не утруждают себя задавать вопросы ни грамотно по форме, ни по сути, довольствуясь достаточно размытыми или дву- много-значными фразами. Нейжели самим не ясно, что чем понятнее задан вопрос - тем быстрее и качественнее может быть дан ответ?! Чуть дополню ответ ColR_iT, уточнив, что путь для кампов (посиделок) может быть использован и уже существующий в алл.спавне - тогда задание логики кампа и ему подобной сводится к подключению, используя нет-пакеты объекта, нужного файла с логикой или прямым внесением логики в кастомдату объекта (т.е. алл.спавн не затрагивается). Примечание: Если же нужного пути/сентра нет в алл.спавне, то его (нового пути/точек) внесение не требует особых усилий и не требует новой игры. Добавлено через 15 мин.: Boofer, твое заблуждение и соответственно ожидание невозможного в том, что: 1. Невозможно заспавнить объект непосредственно в слот за один прием одной функцией. Можно заспавнить в некий объект (например в рюкзак к актору) и при определенных свойствах объекта - этот объект сам попадет в соответствующий слот ... Если же слот занят - придется потрудиться переложить прежний объект и вновь заспавненный ... 2. Не забывай, что между спавном объекта в игру и возможностью им манпулировать как с клиентским объектом требуется время - как минимум на втором цикле апдейта актора. Т.о. заспавнив объект, ты никогда не получишь этот клиентский объект в той же самой функции и в том же самом вызове. Изменено 4 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти