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

[SoC] Ковыряемся в файлах


Halford

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

Kirag Спасибо тебе за работу. Ты съэкономил, лично для меня и, я думаю, для многих людей, кучу времени.

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


Ссылка на сообщение
Цитата из amk_offline_alife :

 

elseif string.find(obj:section_name(),"^af_") then

 

Может надо:

 

elseif string.find(obj:section_name(),"af_") then

В данной функции LUА вида :

string.find(s,р)

в строке s(определяемой obj:section_name()) ищется вхождение шаблона р("^af_")

В шаблоне могут использоваться управляющие символы, исполняемые и читаемые, только самой LUА. К этим символам относится и *циркумфлекс*(^) означающий поиск с начала строки. Он говорит о том, что вхождение "аf_" должно быть исключительно 1-м, 2-м и 3-м символом в строке.

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


Ссылка на сообщение
...Для того чтобы изменить стартовое количество денег, многие советуют править all.spawn или сделать это скриптом. Но есть способ намного легче - в файл character_desc_general.xml в секцию actor после строки <reputation>0</reputation> добавить -

<money min="1000"max="1000" infinitive="0"/>. min минимальное значения, max нное,

Тут ты не совсем прав. Если в all_spawn не удалить стартовые 40 р., то игра возьмет настройки именно из all_spawn, а на изменение money_min/max ей будет глубоко наплевать.

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


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

А можно узнать подробнее? НПС под гулагом или сам бродит(может с группой)? Если под гулагом, то стоит ли на месте или ходит? Если бродит, то бой будет рандомный или сюжетный?

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


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

gruber, тогда можно попробовать такой вариант(теория):

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

В gulag_escape.script найти работу этого НПС и после out_rest = "???" через запятую добавить info_rest = в кавычках название нового рестриктора.

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


Ссылка на сообщение
Gun12, я замечаю врага раньше чем он задумает воевать...
Но ведь вопрос был поставлен так:
...не учавствует в нем а ждет в установленном месте до момента когда к нему приблизятся на определенное расстояние...
"определенное расстояние" и устанавливает рестриктор. Может я чего-то не понял из условий поставленной задачи? Тогда хотелось бы узнать подробнее.

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


Ссылка на сообщение
Здраствуйте! Я заселяю локацию, и мне нужно прописать костры вокруг которых будут неписи.Костры на локации уже существуют.Интересует как их сделать видными для НПС.

Обьясните пожалуйста, как это сделать.

Совсем не обязательно создавать гулаг. Например можно сделать так :

В файле alife_l"уровень".ltx в секции этого перса написать(или вынести в конфиг)

custom_data = <<END

[smart_terrains]

none = true

[logic]

active = kamp

 

[kamp]

center_point = camp_center_new

path_walk = camp_center_task_new

 

В файле way_l"уровень".ltx добавить :

 

[camp_center_new]

points = p0

p0:name = wp00

p0:position = "координаты x,y,z костра"

p0:game_vertex_id = "гейм_вертекс костра"

p0:level_vertex_id = "левел_вертекс костра"

 

[camp_center_task_new]

points = p0

p0:name = wp00

p0:position = "координаты x,y,z точки в метре/двух от костра"

p0:game_vertex_id = "гейм_вертекс этой точки"

p0:level_vertex_id = "левел_вертекс этой точки"

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


Ссылка на сообщение
...как заспавнить мутанта через скрипт? А то человека получается а мутанта нет...

Для начала хотелось бы знать - что именно не получается? Что выдает лог? Что Вы делали? Нужна вся информация. Иначе Ваш вопрос просто проигнорируют.

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


Ссылка на сообщение
Вот первые три цифры - координаты X, Y, Z. А остальные?

 

60449 - level_vertex_id

46 - game_vertex_id

0,0,0 - direction (x,y,z)

"L01_Escape" - я думаю понятно

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


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

Возможно я понял не правильно, но не с подобной ли проблемой сталкивался Red75 в первоначальной версии "Напарников", когда НПС не подчинялись новой схеме? Если да, то причина ведь была в том, что нужно было установить состояние с помощью state_mgr.set_state(). И в этом случае, если сравнить статью на Wiki с окончательным вариантом, где эта проблема была решена, возможно понять как именно это было сделано.

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


Ссылка на сообщение
не подскажите как сделать так чтобы с "данного" оружия можно было стрелять только в "Экоскелете"?...

Вот например. Нельзя взять ПКМ, если не надета экза.

Изменишь где что нужно :

function check_armor()
local armor = db.actor:item_in_slot(6)
local weapon = db.actor:item_in_slot(2)

if db.actor:active_slot()==2 and weapon then
local tmp
if armor then
tmp = armor:section()
else
tmp = "none"
end

if (not string.find(tmp, "exo" )) and weapon:section()=="wpn_pkm" then
db.actor:drop_item(weapon)
local tmpw = amk.spawn_item_in_inv("wpn_pkm" )
db.actor:transfer_item(weapon,db.actor)
alife():release(tmpw)
end
end

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


Ссылка на сообщение
(изменено)

max_max_08

Тогда так :

function check_armor()
local armor = db.actor:item_in_slot(6)
local weapon = db.actor:item_in_slot(2)

if db.actor:active_slot()==2 and weapon then
local tmp
if armor then
tmp = armor:section()
else
tmp = "none"
end

if (not string.find(tmp, "exo" )) and (weapon:section()=="wpn_pkm" or weapon:section()=="wpn_m60" or weapon:section()=="wpn_minigun") then
db.actor:drop_item(weapon)
local tmpw = amk.spawn_item_in_inv("wpn_pkm" )
db.actor:transfer_item(weapon,db.actor)
alife():release(tmpw)
news_manager.send_tip(db.actor,"Невозможно взять пулемёт в руки без экзы",nil,nil,10000)
end
end

Вообще-то этой фунцией я не пользовался. Юзал эту :

function check_armor()
   local wpn,arm
   local armor = db.actor:item_in_slot(6)
   local weapon = db.actor:item_in_slot(2)

   if weapon then
       wpn = weapon:section()
   else
       wpn = "no_weapon"
   end

   if armor then
       arm = armor:section()
   else
       arm = "no_armor"
   end

   if string:find(wpn,"wpn_название") or string:find(wpn,"wpn_название") or string:find(wpn,"wpn_название") then -- через 'or' пиши сколько нужно стволов
       if (not string.find(arm, "exo" )) then
           db.actor:drop_item(weapon)
           local temp = alife():create("wpn_ak74",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),d
b.actor:id())
           db.actor:transfer_item(weapon,db.actor)
           alife():release(temp)
           news_manager.send_tip(db.actor,"Невозможно взять пулемёт в руки без экзы",nil,nil,10000)
       end
   end
end

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

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


Ссылка на сообщение
(изменено)

gamedata\scripts\bind_stalker.script

Функция function actor_binder:update(delta)

Сразу ниже неё пиши вызов в формате :

название_файла.название_функции.

Можешь написать эту функцию в любом файле из папки scripts, а можешь создать свой файл и назвать скажем my_script и написать там.

Должно быть так :

function actor_binder:update(delta)
my_script.check_armor()
...

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

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


Ссылка на сообщение
(изменено)

Да, поспешил.

Измени строку :

local tmpw = amk.spawn_item_in_inv("wpn_pkm" )

на

local tmpw = amk.spawn_item_in_inv(weapon:section())

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

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


Ссылка на сообщение
Тут в теме солянки шум,что НПС и монстры в воду почемуто не залазят - никто не знает - они и правда ее определять умеют или все таки это случайность?

По крайней мере я убедился что это не случайность. Сколько раз был на Болотах - ходил только по воде. Ни тебе радиации, ни (самое главное) монстров. Так что нужно сказать Архаре что есть такая недоработка.

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


Ссылка на сообщение
как написать скрипт чтобы нпс и авто спавнились 1 раз в начале игры?

Вызов скрипта поставь после строчки _G.g_start_avi = true в функции actor_binder:update(delta) файла bind_stalker.script

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


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

malandrinus, понимаю что вспоминать может уже не к месту, но только увидел, и не могу не ответить на ваш пост 3877.

Возможно вы хотели сказать что такой способ не эстетичен? Но так делать можно! Не мне же вам объяснять, что апдейт будет "обрезать" секцию

if not has_alife_info("storyline_actor_start")

...

end

после получения вышеупомянутой infoportion.

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

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


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

О какой проверке идет речь? Вызов ставить внутри уже упомянутого блока if ... еnd.

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


Ссылка на сообщение
а он не является проверкой?

Эта проверка изначально поставлена туда разрабами, ничего нового, кроме вызова спавна внутри этого блока, не добавляется. Этот блок срабатывает один раз при старте игры, а далее, при следующих апдейтах, он просто игнорируется, т.к. не проходит оригинальная проверка if NOT ... InfoPortion уже оказывается выдан после первого апдейта.

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


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

AMK-Team.ru

×
×
  • Создать...