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

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

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

Здравствуйте! Не подскажите можно ли НПС поменять визуал, например на контролёра?

 

"Ребятки" в детском саду.

По аккуратнее с обращениями.

ColR_iT

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

Насколько я знаю, нет.

 

Вообще то можно, только нужно будет подгонять скелет от НПС к контролёру. А простыми манипуляциями - да, этого не сделать.

ColR_iT

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

Здравствуйте! Не подскажите можно ли НПС поменять визуал, например на контролёра?

 

"Ребятки" в детском саду.

По аккуратнее с обращениями.

ColR_iT

Прошу прощения если вас это обидело. Что то вы принимаете близко к сердцу

 

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

P.S. правила прочитать будет не лишним; цитировать посты полностью на форуме запрещено.

ColR_iT

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

alex5773, учитывая, что на НПС не надет какой-либо костюм (в смысле объекта-предмета), то твой вопрос бессмысленен.

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

Т.о. посмотри, например, как сделана табличка соответствий "визуал - костюм" в том же марадер-моде или в изначальном xrs_armor.script из "AI-pack" (by xStream) и уже сам можешь рулить как тебе захотелось, т.е. учитывая ранги иль нет.

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

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

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

Приветствую! Тут у меня 2 вопроса появилось.

1. Как создать контролера через алл.спавн? Пытался, не получается. Можно скриптом, но тогда нельзя добавить животному логику.

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

ПС гугл перерыл, яндекс перекопал, одна на вас надежда!

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

1. Ты откуда это взял? Очень даже всё можно.

2. Проверь в этом месте валидность (наличие АИ-сетки для НПС/монстров), если нет валидности, то ни непись, ни монстр в эту местность не пойдет.

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

Stasok8,

1. Как создать любого монстра, который имеется в игре, через all.spawn расписано в десятках факов иль статей (в инете добра хватает, учись правильно пользоваться поиском). Собственно и суть-то в том, что всего требуется то скопировать имеющуюся секцию потребного монстра и скорректировать координаты спавна и некоторые другие параметры (имя, логика,...).

Да и при скриптовом спавне не сложно приписать нужную логику, используя или нет-пакеты или в конфиге секции, используя параметр custom_data.

2. По твоему "глюку" с невыходом из помещения бара - поизучай информацию о рестрикторах, с упором на их типы и методы out_restrictions и in_restrictions для неписей/монстров. Для Бара используется рестриктор ("bar_restrictor"), из которого некоторым квестовым НПС запрещено выходить - вот и "сидят" они в баре, а не гуляют где захочется. Аналогично сделано и в др.подобных "резервациях", например, именно поэтому с арены зверье иль бойцы не разбегаются...

Изменено пользователем Artos
  • Нравится 1

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

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

Простите мое нубство, но прочитал предыдущий пост, подумал, удалил в секции персонажа строку base_out_restrictor . В результате при попытки перейти на первый путь, который до этого работал вылет:

any vertex in patrol path [idet_k_dveri] in inaccessible for object [bar_bar_guard]

Подскажите ламеру, как вылечить.

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

Stasok8,

'нубство' не прощают, а его "лечат" - т.е. читают-читают-читают и, работая головою, набираются знаний и пониманий.

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

 

Во-первых, чтобы указать тебе на "в чем же твое нубство", требуется от тебя информация, иначе только кашпировские смогут тебе "помочь". Что за коды/конфиги ты там у себя сотворил - только тебе ведомо.

Во-вторых, и параметр в секциях all.spawn'а называется base_out_restrictors , и его не "очищать" нужно, а или удалять или вписывать в него точно потребное. Запрет "не выходить ни откуда" (пустая строка) - абсурден и движок подобное не переваривает.

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

Ну и наконец, судя по имени [bar_bar_guard] ты или сдублировал для своего НПС секцию с Гарика, не потрудившись изменить ему имя на эксклюзивное (а это уже чревато...) и/или в его логике напортачил... Не видя логики невозможно тебе подсказать "как вылечить" - пока только рекомендация почитать статьи по логике тебе поможет.

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

 

P.S.

... будем думать, ... А вот где прописать путь до логики монстра, которого создал скриптом с помощью сrеаtе?
А для кого уже написано про 'читать', а потом 'подумать'?! ;)

Неужели ранее упомянутое: "или в конфиге секции, используя параметр custom_data" - недостаточно для того, чтобы самому посмотреть как прописывается логика в секции конкретных НПС (иль монстров иль пр.) и сделать по аналогии?

Если указанный параметр присутствует в секции - именно оттуда (из указанного файла) и будет прописана логика заспавненному скриптом объекту.

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

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

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

Ладно, будем думать, не зря столько неба копчу и я и друганы мои:) А вот где прописать путь до логики монстра, которого создал скриптом с помощью сrеаtе?

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

Вот на примере разберём -

;----

[boar_normal_sh1]:boar_normal

$spawn = "respawn\boar_normal_sh1"

custom_data = scripts\new\nebo\shadowman_zver1.ltx

;----

boar_normal_sh1 - это твоя секция для спавна через скрипт (можешь назвать её как угодно, но при спавне скриптом вписана должна быть именно она!)

:boar_normal - это ссылка на секцию монстра (в данном случае, кабана "обычного/нормального), т.е. все параметры он возьмёт от него, визуал, иммунитеты, ... всё.

custom_data = scripts\new\nebo\shadowman_zver1.ltx - Это и есть путь до логики этого кабана (т.е., логика будет считываться из файла - shadowman_zver1.ltx)

На всякий пожарный, пример логики этого монстра (ты напиши свою, нужную тебе логику) -

 

[smart_terrains]

none = true

 

[logic]

active = mob_home

on_death = mob_death

 

[mob_home]

path_home = boar_normal_sh_walk1

home_min_radius = 30

home_max_radius = 50

aggressive_home

on_signal = sig_attacked | mob_combat

 

[mob_combat]

on_timer = 60000 | mob_home

 

[mob_death]

on_info = %+shadowman_zver1_dead%

 

===

Да, вписываешь свою секцию монстра в spawn_sections.ltx (gamedata\config\creatures). Не забудь в _way указать свой path_home = ....(path_home = boar_normal_sh_walk1).

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

Stasok8, дополню немного Buusty. Точки путей нужно прописывать в распакованный all.spawn в файлы way_локация.ltx и только туда. При этом начинать новую игру не обязательно, при условии, что ты не изменял файлы alife_локация.ltx.

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

Artos, Посмотреть то я посмотрел, но вот так и не понял как поменять зависимость от ранга, на зависимость от визуала.

 

 

--' Ключем является группировка персонажа. Значением является таблица, содержашая имена секций предметов.
local item_by_community = {}
--' Зависимости в спауне предметов. Предмет спауниться только если есть хотя бы один из зависимых.
local item_dependence = {}
--' Множители и минимаксы для выпадения вещей в зависимости от уровня
local mul_by_level = {}
local count_by_level = {}
--' Предметы, которые нельзя удалять (квестовые например)
local always_keep_item = {}
--' Предметы, относящиеся к патронам. Их надо спаунить другим методом.
local ammo_sections = {}
local death_ini = ini_file("misc\\death_generic.ltx")

function init_drop_settings()
local community_list = {"trader", "stalker", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "monolith", "arena_enemy", "actor_dolg" }
for k,v in pairs(community_list) do
 --' Необходимо заполнить таблицу
 item_by_community[v] = {}
 if death_ini:section_exist(v) then
 local n = death_ini:line_count(v)
 local id, value = "", ""
 for i=0,n-1 do
 result, id, value = death_ini:r_line(v,i,"","")
		 item_by_community[v][id] = 100*tonumber(value)
 end
 end
end
--' Заполняем таблицу зависимостей
local n = death_ini:line_count("item_dependence")
local id, value = "", ""
for i=0,n-1 do
result, id, value = death_ini:r_line("item_dependence",i,"","")
item_dependence[id] = {}
local vvv = parse_names(value)
for k,v in pairs(vvv) do
item_dependence[id][v] = true
end
end
--' Множители и минимаксы для выпадения вещей в зависимости от уровня
local level_name = level.name()

if not death_ini:section_exist(level_name) then
level_name = "default"
end
local n = death_ini:line_count(level_name)
local id, value = "", ""
for i=0,n-1 do
result, id, value = death_ini:r_line(level_name,i,"","")
 mul_by_level[id] = tonumber(value)
end	
local item_count_section = "item_count_" .. level.get_game_difficulty()
local n = death_ini:line_count(item_count_section)
for i=0,n-1 do
result, id, value = death_ini:r_line(item_count_section,i,"","")
 --' Нужно распарсить value в два значения
 local t = parse_nums(value)
if t[1] == nil then
	 abort("Error on [death_ini] declaration. Section [%s], line [%s]", item_count_section, tostring(id))
 end
 local min = t[1]
 local max = t[2]
 if max == nil then
	 max = min
 end

 if mul_by_level[id] == nil then
	 mul_by_level[id] = 0
 end
 min = tonumber(min) * mul_by_level[id]
 max = tonumber(max) * mul_by_level[id]
 count_by_level[id] = {min = min, max = max}
end	
--' Предметы, которые нельзя удалять (квестовые например)
local n = death_ini:line_count("keep_items")
for i=0,n-1 do
result, id, value = death_ini:r_line("keep_items",i,"","")
 if value == "true" then
	 always_keep_item[id] = true
 end
end
--' Предметы, относящиеся к патронам. Их надо спаунить другим методом.
ammo_sections = {}
local n = death_ini:line_count("ammo_sections")
local id, value = "", ""
for i=0,n-1 do
result, id, value = death_ini:r_line("ammo_sections",i,"","")
 ammo_sections[id] = true
end
end
class "drop_manager"
function drop_manager:__init(npc)
self.npc = npc
end
function drop_manager:create_release_item()
local otf
local sect
--' Спрашиваем у серверного объекта генерились ли предметы
local se_obj = alife():object(self.npc:id())
if se_obj.death_droped == true then
return
end
se_obj.death_droped = true
--' Запускаем итератор на удаление предметов
self.npc:iterate_inventory(keep_item, self.npc)
--' Проверка на отсутствие спауна лута
local ini = self.npc:spawn_ini()
if ini and ini:section_exist("dont_spawn_loot") then
 return
end
--' Доспавниваем необходимое количество итемов:
--' Необходимо составить список объектов которые могут быть заспавнены для персонажа
local spawn_items = item_by_community[self.npc:character_community()]
for k,v in pairs(spawn_items) do
 --' По каждому объекту необходимо получить зависимости
 if check_item_dependence(self.npc, k) == true then
	 --' По каждому объекту необходимо получить количество
	 local number = math.ceil(math.random(count_by_level[k].min, count_by_level[k].max))
	 --' Необходимо заспавнить нужное количество.
if not string.find(self.npc:section(),"arena") and not string.find(self.npc:section(),"aem") and
self.npc:character_community()~="arena_enemy" then
create_items(self.npc, k, number, v)
end
end
end
[b]if self.npc:character_community()=="stalker" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<300 then sect = "novice_outfit" end
if self.npc:character_rank()>=300 and self.npc:character_rank()<900 then sect = "stalker_outfit" end
if self.npc:character_rank()>=900 then sect = "exo_outfit" end
end[/b]
[b]if self.npc:character_community()=="bandit" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<600 then sect = "bandit_outfit" end
if self.npc:character_rank()>=600 and self.npc:character_rank()<900 then sect = "bandit_veteran_outfit" end
if self.npc:character_rank()>=900 then sect = "bandit_master_outfit" end
end[/b]
[b]if self.npc:character_community()=="military" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<600 then sect = "soldier_outfit" end
if self.npc:character_rank()>=600 and self.npc:character_rank()<900 then sect = "specops_outfit" end
if self.npc:character_rank()>=900 then sect = "military_outfit" end
end[/b]
[b]if self.npc:character_community()=="killer" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<900 then sect = "killer_outfit" end
if self.npc:character_rank()>=900 then sect = "killer_blue_exoskeleton" end
end[/b]
[b]if self.npc:character_community()=="dolg" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<900 then sect = "dolg_outfit" end
if self.npc:character_rank()>=900 then sect = "dolg_black_exoskeleton" end
end[/b]
[b]if self.npc:character_community()=="freedom" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<300 then sect = "svoboda_light_outfit" end
if self.npc:character_rank()>=300 and self.npc:character_rank()<900 then sect = "svoboda_heavy_outfit" end
if self.npc:character_rank()>=900 then sect = "svoboda_exoskeleton" end
end[/b]
[b]if self.npc:character_community()=="monolith" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<600 then sect = "monolit_outfit" end
if self.npc:character_rank()>=600 and self.npc:character_rank()<900 then sect = "monolit_scientific_outfit" end
if self.npc:character_rank()>=900 then sect = "monolit_exoskeleton" end
end[/b]
[b]if self.npc:character_community()=="ecolog" then
if self.npc:character_rank()>=0 and self.npc:character_rank()<900 then sect = "ecolog_outfit" end
if self.npc:character_rank()>=900 then sect = "protection_outfit" end
end[/b]
[b]if sect~=nil and not string.find(self.npc:section(),"arena") and
not string.find(self.npc:section(),"aem") and
self.npc:character_community()~="arena_enemy" and
self.npc:name()~="esc_novice_attacker1" and
self.npc:name()~="esc_blokpost_commander" and
self.npc:name()~="agr_ratcatcher" and
self.npc:name()~="val_lager_bandits_borov" and
not string.find(self.npc:name(),"gar_dm_bandit") and
self.npc:name()~="gar_wounded_bandit" and
self.npc:name()~="bar_dolg_leader" and
self.npc:name()~="bar_dolg_petrenko" and
self.npc:name()~="mil_freedom_member0012" and
self.npc:name()~="mil_freedom_member0018" and
self.npc:name()~="mil_stalker0012" and
self.npc:name()~="mil_stalker0023" and
self.npc:name()~="mil_ara" and
self.npc:name()~="mil_blockpost_freedomstalker001" and
self.npc:name()~="bar_ecolog_professor" and
self.npc:name()~="yan_scientist_help" and
self.npc:name()~="yan_specnaz_dead" and
self.npc:name()~="x16_stalker_ghost" and
self.npc:name()~="yantar_semenov" then
otf = create_items(self.npc, sect, 1, 40)
if otf~= nil then
funcs.start_timer("otf",1,otf.id)
end
end
end[/b]
--' Функция вызывается для каждого предмета, если вернет false то предмет удалится.
function keep_item(npc, item)
if item==nil or alife():object(item:id())==nil then return end
local section = item:section()
if section == "bolt" then
 return false
end
if always_keep_item[section] == true then
 return true
end
local item_id = item:id()
local item_in_slot = npc:item_in_slot(1)
if item_in_slot ~= nil and
 item_in_slot:id() == item_id
then
 item:unload_magazine()
--' Тут надо уменьшить кондишн оружия
item:set_condition((math.random(15)+75)*item:condition()/100)
 return true
end
item_in_slot = npc:item_in_slot(2)
if item_in_slot ~= nil and
 item_in_slot:id() == item_id
then
 item:unload_magazine()
--' Тут надо уменьшить кондишн оружия
item:set_condition((math.random(15)+75)*item:condition()/100)
 return true
end
alife():release(alife():object(item:id()), true)
end
--' Функция спавнит необходимое число предметов
function create_items(npc, section, number, rnd)
--' printf("create %s of %s", tostring(number), tostring(section))
if ammo_sections[section] == true then
 if number > 0 then
	 se_respawn.create_ammo(section,
 npc:position(),
 npc:level_vertex_id(),
 npc:game_vertex_id(),
 npc:id(),
			 number)
 end
else
 for i=1,number do
--' Проверяем вероятность появить каждый объект в отдельности
	 if math.random(100) <= rnd then
return alife():create(section,
	 npc:position(),
 npc:level_vertex_id(),
 npc:game_vertex_id(),
 npc:id())
end
 end
end
end

--' Функция проверяет есть ли хоть один из зависимых объектов у персонажа
function check_item_dependence(npc, section)
if item_dependence[section] == nil then
return true
end
local d_flag = true
for k,v in pairs(item_dependence[section]) do
 local obj = npc:object(k)
 if obj ~= nil and npc:marked_dropped(obj) ~= true then
	 return true
 end
 d_flag = false
end
return d_flag
end

Вот с мародёр мода

 

 

 

----------------------------------
-- made by xStream 03.2008
----------------------------------
local excluded_npcs={
bar_barman=true,
bar_arena_manager=true,
bar_dolg_leader=true,
bar_dolg_petrenko=true,
bar_freedom_attacker_commander=true,
escape_trader=true,
mil_freedom_member0012=true,
mil_freedom_member0021=true,
yantar_ecolog_general=true
}
local convert_npc = {}
local upgrade_delta = 720
local upgrade_exp = 270
local upgrade_phase = 0
local stalkers = {}
local upgrade_steps={
[0]={
npc_num = 15,
prb = 0.6
},
[1]={
npc_num = 11,
prb = 0.5
},
[2]={
npc_num = 10,
prb = 0.4
},
[3]={
npc_num = 8,
prb = 0.4
}
}
local auto_upgrades = true
local visible_auto_upgrades = false
local upgrade_top_lvl={
l01_escape = 2,
l02_garbage = 2,
l03_agroprom = 2,
l03u_agr_underground=1,
l04_darkvalley=2,
l04u_labx18=2,
l05_bar=3,
l06_rostok=3,
l07_military=4,
l08_yantar=3,
l08u_brainlab=3,
l10_radar=4,
l10u_bunker=4,
l11_pripyat=4,
l12_stancia=4,
l12_stancia_2=4,
l12u_control_monolith=4,
l12u_sarcofag=4
}
local upgrade_over_top_chance = 0.1
local armors_by_visuals = {
bandit = {
stalker_bandit_3 = 1,
stalker_bandit_8 = 2,
stalker_bandit_veteran = 3,
stalker_bandit_master = 4
},
dolg = {
stalker_do_mask_1 = 1,
stalker_do_balon_8 = 1,
stalker_do_antigas = 2,
stalker_do_nauchniy = 3,
stalker_do_exoskeleton = 4
},
ecolog = {
stalker_ecolog = 3,
stalker_ecolog_military = 3
},
hero = {
stalker_commander = 2,
stalker_soldier = 2,
stalker_ecolog = 3,
stalker_chemical = 3,
stalker_specops = 3,
stalker_scien = 3,
stalker_exoskeleton = 4
},
killer = {
stalker_ki_mask = 1,
stalker_ki_antigas = 2,
stalker_ki_nauchniy = 3,
stalker_ki_exoskeleton = 4
},
militari = {
stalker_militari_antigas_1 = 3,
stalker_militari_antigas_2 = 3,
stalker_militari_1 = 3,
stalker_militari_2 = 3
},
monolit = {
stalker_mo_hood_9 = 2,
stalker_mo_mask = 1,
stalker_mo_nauchniy = 3,
stalker_mo_exo = 4
},
neytral = {
--stalker_bar_security = 1,
stalker_neytral_balon_8 = 1,
stalker_neytral_hood_9 = 2,
stalker_neytral_nauchniy = 3,
stalker_neytral_exoskeleton = 4
},
novice = {
green_stalker_2 = 0,
green_stalker_10 = 0,
green_stalker_antigas = 1
},
soldier = {
soldier_mask = 1,
soldier_antigas = 2,
stalker_military_black = 3,
stalker_military_green = 3
},
svoboda = {
stalker_sv_rukzak_1_1 = 1,
stalker_sv_hood_9 = 2,
stalker_sv_hood_91 = 2,
stalker_sv_nauchniy = 3,
stalker_sv_exoskeleton = 4
}
}
local armors_by_community = {
stalker={
"novice","neytral"
},
monolith={
"monolit"
},
killer={
"killer","neytral"
},
ecolog={
},
dolg={
"dolg"
},
freedom={
"svoboda"
},
bandit={
"svoboda","dolg","neytral","militari"
},
military = {
}
}
local armor_levels={
green_stalker_suit = 0,
novice_suit = 0,
bandit_suit = 0,
stalker_killer_suit = 2,
monolit_suit = 3,
specnaz_suit = 2,
specnaz_soldier_suit = 2,
stalker_suit = 1,
stalker_scient_suit = 3,
exoskelet = 4,
svoboda_light_suit = 1,
svoboda_heavy_suit = 2,
dolg_suit = 2,
stalker_dolg_nauchniy_suit = 3,
ecolog_suit = 3,
scientist_suit = 3,
stalker_military_suit = 3,
soldier_suit = 1,
stalker_comander_suit = 3
}
local suits_to_visuals = {
stalker={
green_stalker_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
novice_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
bandit_suit = {
},
stalker_killer_suit = {
[[killer\stalker_ki_mask]],
[[killer\stalker_ki_antigas]]
},
monolit_suit = {
[[neytral\stalker_bar_security]],
[[neytral\stalker_neytral_balon_8]],
[[neytral\stalker_neytral_hood_9]]
},
specnaz_suit = {
[[soldier\soldier_antigas]]
},
specnaz_soldier_suit = {
[[soldier\soldier_antigas]]
},
stalker_suit = {
[[neytral\stalker_bar_security]],
[[neytral\stalker_neytral_balon_8]],
[[neytral\stalker_neytral_hood_9]]
},
stalker_scient_suit = {
[[neytral\stalker_neytral_nauchniy]]
},
exoskelet = {
[[neytral\stalker_neytral_exoskeleton]]
},
svoboda_light_suit = {
[[neytral\stalker_bar_security]],
[[neytral\stalker_neytral_balon_8]]
},
svoboda_heavy_suit = {
[[neytral\stalker_neytral_hood_9]]
},
dolg_suit = {
[[neytral\stalker_neytral_hood_9]]
},
stalker_dolg_nauchniy_suit = {
[[neytral\stalker_neytral_nauchniy]]
},
ecolog_suit = {
[[ecolog\stalker_ecolog]]
},
scientist_suit = {
[[ecolog\stalker_ecolog_military]]
},
stalker_military_suit = {
},
soldier_suit = {
},
stalker_comander_suit = {
[[militari\stalker_militari_antigas_1]],
[[militari\stalker_militari_antigas_2]]
}
},
monolith={
green_stalker_suit = {
},
novice_suit = {
},
bandit_suit = {
},
stalker_killer_suit = {
},
monolit_suit = {
},
specnaz_suit = {
},
specnaz_soldier_suit = {
},
stalker_suit = {
},
stalker_scient_suit = {
},
exoskelet = {
},
svoboda_light_suit = {
},
svoboda_heavy_suit = {
},
dolg_suit = {
},
stalker_dolg_nauchniy_suit = {
},
ecolog_suit = {
},
scientist_suit = {
},
stalker_military_suit = {
},
soldier_suit = {
},
stalker_comander_suit = {
}
},
killer={
green_stalker_suit = {
},
novice_suit = {
},
bandit_suit = {
},
stalker_killer_suit = {
[[killer\stalker_ki_antigas]]
},
monolit_suit = {
},
specnaz_suit = {
},
specnaz_soldier_suit = {
},
stalker_suit = {
},
stalker_scient_suit = {
},
exoskelet = {
},
svoboda_light_suit = {
},
svoboda_heavy_suit = {
},
dolg_suit = {
},
stalker_dolg_nauchniy_suit = {
},
ecolog_suit = {
},
scientist_suit = {
},
stalker_military_suit = {
},
soldier_suit = {
},
stalker_comander_suit = {
}
},
ecolog={
green_stalker_suit = {
},
novice_suit = {
},
bandit_suit = {
},
stalker_killer_suit = {
},
monolit_suit = {
},
specnaz_suit = {
},
specnaz_soldier_suit = {
},
stalker_suit = {
},
stalker_scient_suit = {
},
exoskelet = {
},
svoboda_light_suit = {
},
svoboda_heavy_suit = {
},
dolg_suit = {
},
stalker_dolg_nauchniy_suit = {
},
ecolog_suit = {
[[ecolog\stalker_ecolog]]
},
scientist_suit = {
[[ecolog\stalker_ecolog_military]]
},
stalker_military_suit = {
},
soldier_suit = {
},
stalker_comander_suit = {
}
},
dolg={
green_stalker_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
novice_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
bandit_suit = {
},
stalker_killer_suit = {
},
monolit_suit = {
},
specnaz_suit = {
},
specnaz_soldier_suit = {
},
stalker_suit = {
[[dolg\stalker_do_balon_8]],
},
stalker_scient_suit = {
[[neytral\stalker_neytral_nauchniy]]
},
exoskelet = {
[[dolg\stalker_do_exoskeleton]]
},
svoboda_light_suit = {
},
svoboda_heavy_suit = {
},
dolg_suit = {
[[dolg\stalker_do_antigas]]
},
stalker_dolg_nauchniy_suit = {
[[dolg\stalker_do_nauchniy]]
},
ecolog_suit = {
[[ecolog\stalker_ecolog]]
},
scientist_suit = {
[[ecolog\stalker_ecolog_military]]
},
stalker_military_suit = {
},
soldier_suit = {
},
stalker_comander_suit = {
}
},
freedom={
green_stalker_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
novice_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
bandit_suit = {
},
stalker_killer_suit = {
},
monolit_suit = {
},
specnaz_suit = {
},
specnaz_soldier_suit = {
},
stalker_suit = {
[[svoboda\stalker_sv_rukzak_1_1]],
},
stalker_scient_suit = {
[[neytral\stalker_neytral_nauchniy]]
},
exoskelet = {
[[svoboda\stalker_sv_exoskeleton]]
},
svoboda_light_suit = {
[[svoboda\stalker_sv_rukzak_1_1]]
},
svoboda_heavy_suit = {
[[svoboda\stalker_sv_hood_9]],
[[svoboda\stalker_sv_hood_91]]
},
dolg_suit = {
},
stalker_dolg_nauchniy_suit = {
},
ecolog_suit = {
[[ecolog\stalker_ecolog]]
},
scientist_suit = {
[[ecolog\stalker_ecolog_military]]
},
stalker_military_suit = {
},
soldier_suit = {
},
stalker_comander_suit = {
}
},
bandit={
green_stalker_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
novice_suit = {
[[novice\green_stalker_2]],
[[novice\green_stalker_10]],
[[novice\green_stalker_antigas]]
},
bandit_suit = {
[[bandit\stalker_bandit_3]],
[[bandit\stalker_bandit_8]],
},
stalker_killer_suit = {
[[killer\stalker_ki_mask]],
[[killer\stalker_ki_antigas]]
},
monolit_suit = {
[[neytral\stalker_bar_security]],
[[neytral\stalker_neytral_balon_8]],
[[neytral\stalker_neytral_hood_9]]
},
specnaz_suit = {
[[soldier\soldier_antigas]]
},
specnaz_soldier_suit = {
[[soldier\soldier_antigas]]
},
stalker_suit = {
[[neytral\stalker_bar_security]],
[[neytral\stalker_neytral_balon_8]],
[[neytral\stalker_neytral_hood_9]]
},
stalker_scient_suit = {
[[neytral\stalker_neytral_nauchniy]]
},
exoskelet = {
[[neytral\stalker_neytral_exoskeleton]]
},
svoboda_light_suit = {
[[neytral\stalker_bar_security]],
[[neytral\stalker_neytral_balon_8]]
},
svoboda_heavy_suit = {
[[neytral\stalker_neytral_hood_9]]
},
dolg_suit = {
[[neytral\stalker_neytral_hood_9]]
},
stalker_dolg_nauchniy_suit = {
[[neytral\stalker_neytral_nauchniy]]
},
ecolog_suit = {
[[ecolog\stalker_ecolog]]
},
scientist_suit = {
[[ecolog\stalker_ecolog_military]]
},
stalker_military_suit = {
[[militari\stalker_militari_1]],
[[militari\stalker_militari_2]]
},
soldier_suit = {
[[soldier\soldier_antigas]]
},
stalker_comander_suit = {
[[militari\stalker_militari_antigas_1]],
[[militari\stalker_militari_antigas_2]]
}
},
military = {
green_stalker_suit = {
},
novice_suit = {
},
bandit_suit = {
},
stalker_killer_suit = {
},
monolit_suit = {
},
specnaz_suit = {
},
specnaz_soldier_suit = {
},
stalker_suit = {
},
stalker_scient_suit = {
},
exoskelet = {
},
svoboda_light_suit = {
},
svoboda_heavy_suit = {
},
dolg_suit = {
},
stalker_dolg_nauchniy_suit = {
},
ecolog_suit = {
},
scientist_suit = {
},
stalker_military_suit = {
},
soldier_suit = {
},
stalker_comander_suit = {
}
}
}

function npc_update(binder)
if (binder.armor_check_update or 0)<time_global() then
local npc = binder.object
if not npc:alive() or npc:critically_wounded() or npc:wounded() or excluded_npcs[npc:name()] then return end
local com = npc:character_community()
if suits_to_visuals and suits_to_visuals[com] then
npc:iterate_inventory(check_armor,npc)
end
binder.armor_check_update=time_global()+1000
end
end
function check_armor(npc, item, just_report)
local com = npc:character_community()
local section = item:section()
local sini = system_ini()
local vis = utils.cfg_get_string(sini, section, "visual", false, false, false, "")
if vis ~= "" then
vis = xrs_utils.str_explode("\\",vis)
vis = xrs_utils.str_explode(".",vis[2])
vis = vis[1]
if suits_to_visuals[com][vis] then
if just_report then
if table.getn(suits_to_visuals[com][vis])>0 and get_npc_level(npc:id())<(armor_levels[vis] or 0) then
 return true
end
else
if table.getn(suits_to_visuals[com][vis])>0 and get_npc_level(npc:id())<(armor_levels[vis] or 0) then
 if ((not db.actor:see(npc) and npc:position():distance_to(db.actor:position())>15) or
 npc:position():distance_to(db.actor:position())>100) then

 change_vis(npc:id(),"actors\\"..suits_to_visuals[com][vis][math.random(table.getn(suits_to_visuals[com][vis]))],armor_levels[vis],true)
 alife():release(alife():object(item:id()))
 end
end
end
end
end
end
function get_npc_level(id)
local sobj = alife():object(id)
if sobj and sobj.rank and sobj:rank()~=0 then
return math.floor(sobj:rank()/upgrade_exp)
end
return 0
end
-------------
function change_vis(id, suit_vis, lvl, now)

if look_for_armor(id,suit_vis) then
if now then
local npc = level.object_by_id(id)
if npc then
npc:clear_animations()
end
convert_npc[id]="turn_off"
end
local sobj = alife():object(id)
if sobj then
sobj:set_rank(upgrade_exp*lvl+math.random(1,50))
end
end
end
--------------------------
function look_for_armor(id,vis)
if vis then
local sobj = alife():object(id)
if sobj:health()<0.3 then return false end
local t = xrs_utils.read_stalker_params(sobj)
t.visual = vis
xrs_utils.write_stalker_params(t,sobj)
return true
end
return false
end
function update()
for k,v in pairs(convert_npc) do
local obj=level.object_by_id(k)
local sobj=alife():object(k)
if sobj then
if obj~=nil and v=="turn_off" then
obj:stop_talk()
switch_offline(obj)
convert_npc[k]="turn_on"
elseif obj==nil and v=="turn_on" then
switch_online(k)
convert_npc[k]=false
elseif v==false then
convert_npc[k]=nil
end
else
convert_npc[k]=nil
end
end

--armor upgrade part
if auto_upgrades==true then
 local time = level.get_time_days()*60*24+level.get_time_hours()*60+level.get_time_minutes()
if xr_logic.pstor_retrieve(db.actor,"xrs_armor_t",nil)==nil then
xr_logic.pstor_store(db.actor,"xrs_armor_t", time+upgrade_delta)
end
if time>xr_logic.pstor_retrieve(db.actor,"xrs_armor_t",0) then
local actor_id=db.actor:id()
stalkers={}
for a=0,65535 do
local sobj = alife():object(a)
if a~=actor_id and sobj and IsStalker(sobj) and sobj:alive() and not sobj.wounded and not excluded_npcs[sobj:name()] then
 if sobj.m_game_vertex_id and game_graph():valid_vertex_id(sobj.m_game_vertex_id) then
 local map = alife():level_name(game_graph():vertex(sobj.m_game_vertex_id):level_id())
 if map and upgrade_top_lvl[map]~=nil then
 local lvl = get_npc_level(a)
 if lvl<upgrade_top_lvl[map] or math.random()<upgrade_over_top_chance then
 if not stalkers[lvl] then
	 stalkers[lvl]={}
 end
 table.insert(stalkers[lvl],a)
 end
 end
 end
end
end
local max_lvl = table.getn(upgrade_steps)-1
if max_lvl>0 then
for a=0,max_lvl do
 if upgrade_steps[a]~=nil and upgrade_steps[a].npc_num~=nil and upgrade_steps[a].prb~=nil then
 for b = 1,upgrade_steps[a].npc_num do
 local cnt = table.getn(stalkers[a])
 if cnt>0 then
 local idx=math.random(cnt)
 local npc_id=stalkers[a][idx]
 if math.random()<upgrade_steps[a].prb then
	 if select_next_visual(npc_id,visible_auto_upgrades)==true then
	 if not stalkers[a+1] then
	 stalkers[a+1]={}
	 end
	 table.insert(stalkers[a+1],npc_id)
	 end
	 table.remove(stalkers[a],idx)
 end
 end
 end
 end
end
end
xr_logic.pstor_store(db.actor,"xrs_armor_t",time+upgrade_delta)
end
end
end
function select_next_visual(id,now)
local sobj=alife():object(id)
if sobj then
local level = get_npc_level(id)
local com = sobj:community()
if com and armors_by_community[com] and table.getn(armors_by_community[com])>0 then
local new_vis=""
local nl=100
for vname,allowed_armors in pairs(armors_by_community[com]) do
if armors_by_visuals[allowed_armors] then
 for k,v in pairs(armors_by_visuals[allowed_armors]) do
 if v>level and v<=nl then
 if v<nl then
 new_vis = allowed_armors.."\\"..k
 elseif v==nl and math.random()>0.5 then
 new_vis = allowed_armors.."\\"..k
 end
 nl=v
 end
 end
end
end

if new_vis~="" then
change_vis(id,"actors\\"..new_vis,nl,now)
return true
end
end
end
return false
end
-------------------------
--scheme part
-------------------------
evid_armor=18690
actid_armor=evid_armor
exclusions={}
pickupers={}
local pickupdist=2
--evaluator
class "evaluator_see_useful_armor" (property_evaluator)
function evaluator_see_useful_armor:__init(name, storage) super (nil, name)
self.a = storage
end
function evaluator_see_useful_armor:evaluate()
local npc=self.object
if excluded_npcs[npc:name()] then return false end
if self.a.see_outfit then
local o = level.object_by_id(self.a.see_outfit)
if o and o:position():distance_to(npc:position())<pickupdist+0.5 and npc:accessible(o:level_vertex_id()) and level.vertex_position(o:level_vertex_id()):distance_to(o:position())<1 then
return true
else
pickupers[npc:id()]=nil
self.a.see_outfit=nil
end
end

if (self.next_check_time or 0) > time_global() then return false end
self.next_check_time = time_global() + 5000

local function check_item(obj)
obj=obj:object()
if obj==nil or obj.clsid==nil or obj.id==nil then return false end
if exclusions[npc:id().."_"..obj:id()]==true then return false end
if obj:clsid()==58 and obj:position():distance_to(npc:position())<pickupdist and npc:accessible(obj:level_vertex_id()) and level.vertex_position(obj:level_vertex_id()):distance_to(obj:position())<1 then
if check_armor(npc, obj, true)==true then
return obj:id()
else
exclusions[npc:id().."_"..obj:id()]=true
return false
end
end
end
local item = false
for o in npc:memory_visible_objects() do
item = check_item(o)
if item then
self.a.see_outfit = item
pickupers[npc:id()]=true
return true
end
end
return false
end
--action
class "action_get_useful_armor" (action_base)
function action_get_useful_armor:__init (npc,action_name,storage) super (nil,action_name)
self.a = storage
end
function action_get_useful_armor:initialize()
action_base.initialize(self)
local npc=self.object

npc:set_item(object.idle,nil)
npc:set_movement_type(move.stand)
state_mgr.set_state(npc, "walk",nil,nil,{ look_object = level.object_by_id(self.a.see_outfit) }, {animation = true})
npc:set_desired_position(level.object_by_id(self.a.see_outfit):position())
npc:set_dest_level_vertex_id(level.object_by_id(self.a.see_outfit):level_vertex_id())

xr_sound.set_sound(npc, nil)
stop_play_sound(npc)
end
function action_get_useful_armor:execute()
action_base.execute (self)
local npc=self.object
if level.object_by_id(self.a.see_outfit)==nil or not npc:see(level.object_by_id(self.a.see_outfit)) then
self.a.see_outfit = nil
pickupers[npc:id()]=nil
return
end
if not self.end_time then
if level.object_by_id(self.a.see_outfit):position():distance_to(npc:position())<1 then
npc:set_desired_position()
npc:set_desired_direction()
npc:set_dest_level_vertex_id(npc:level_vertex_id())
state_mgr.set_state(npc, "dynamite",nil,nil,{ look_object = level.object_by_id(self.a.see_outfit) }, {animation = true})
if npc:animation_count()==1 then
self.end_time = time_global() + 1500
end
else
state_mgr.set_state(npc, "walk")
npc:set_dest_level_vertex_id(level.object_by_id(self.a.see_outfit):level_vertex_id())
npc:set_desired_position(level.object_by_id(self.a.see_outfit):position())
npc:set_desired_direction(level.object_by_id(self.a.see_outfit):position():sub(npc:position()))
end
elseif self.end_time<time_global() then
local o = level.object_by_id(self.a.see_outfit)
local sect = o:section()
alife():release(alife():object(self.a.see_outfit))
alife():create(sect,npc:position(),npc:level_vertex_id(),npc:game_vertex_id(),npc:id())
npc:clear_animations()
end
end
function action_get_useful_armor:finalize()
action_base.finalize (self)
local npc=self.object
pickupers[npc:id()]=nil
end
--binder
function add_to_binder(object, ini, scheme, section, storage)
local operators = {}
local properties = {}
local manager = object:motivation_action_manager()
operators["armor"] = actid_armor
properties["armor"] = evid_armor
local zombi=object:character_community()=="zombied" or object:character_community()=="trader" or
object:character_community()=="arena_enemy" or object:name()=="mil_stalker0012" or object:name()=="yantar_ecolog_general"
if zombi then
manager:add_evaluator (properties["armor"], property_evaluator_const(false))
else
manager:add_evaluator (properties["armor"], evaluator_see_useful_armor("armor", storage))
end

local action = action_get_useful_armor (object,"armor", storage)
action:add_precondition(world_property(stalker_ids.property_alive, true))
action:add_precondition(world_property(stalker_ids.property_enemy, false))
action:add_precondition(world_property(xr_evaluators_id.sidor_wounded_base, false))

xr_motivator.addCommonPrecondition(action)
action:remove_precondition(properties["armor"])
action:add_precondition (world_property(properties["armor"], true))

action:add_effect (world_property(properties["armor"], false))
manager:add_action (operators["armor"], action)
action = manager:action (xr_actions_id.alife)
action:add_precondition (world_property(properties["armor"], false))
end
function set_scheme(npc, ini, scheme, section)
local st = xr_logic.assign_storage_and_bind(npc, ini, scheme, section)
end
function disable_scheme(npc, scheme)
local st = db.storage[npc:id()][scheme]
if st then
st.enabled = false
end
end

xrs_armor.script из "AI-pack" (by xStream)

Как "рулить" вообще без понятия, даже малейших соображений нет.

 

Извиняюсь не то сделал.

 

Как под сполер запихать не нашёл, подумал на код, оказалось тоже не то совсем.

 

Поскольку ответ уже был дан, то пост остаётся. В следующий раз, не зависимо от наличия ответов, пост потру и в шкале предупреждений увидишь ещё пять баллов.

ColR_iT

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

ColR_iT, а вот я бы не расписывал пока еще невостребованные подробности (вот такой я вредный :crazy: ), т.к. неизвестно какая вообще нужна автору вопроса логика...

А вот то, что при создании своей новой секции для спавна монстра потребно будет зарегистрировать эту секцию в xr_statistic.script (хотя бы в альясах) - про это бы стОит уточнить (хотя тоже ФАК'овый момент). В противном случае при убийстве нового монстра - последует вылет.

 

alex5773, пока модератор не увидел твою портянку - убери как ее от греха подальше... хотя бы под спойлер. :nono:

И, если уж до сих пор не понял связи визуала НПС и прямого отсутсвия связи с рангами - то уж тут я "вообще без понятия", как же еще подобное можно разжевать...

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

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

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

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

Artos, Ну покажи на примере одного костюма, как это реализовать в этом death_manager.script., если конечно тебя это не затруднит.

Проще некуда, это когда точно знаешь что делать.

 

Artos, И ты это считаешь просто, вот для сравнения.

 

if self.npc:character_community()=="stalker" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<300 then sect = "novice_outfit" end

 

if self.npc:character_rank()>=300 and self.npc:character_rank()<900 then sect = "stalker_outfit" end

 

if self.npc:character_rank()>=900 then sect = "exo_outfit" end

 

end

 

 

 

if self.npc:character_community()=="bandit" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<600 then sect = "bandit_outfit" end

 

if self.npc:character_rank()>=600 and self.npc:character_rank()<900 then sect = "bandit_veteran_outfit" end

 

if self.npc:character_rank()>=900 then sect = "bandit_master_outfit" end

 

end

 

 

 

if self.npc:character_community()=="military" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<600 then sect = "soldier_outfit" end

 

if self.npc:character_rank()>=600 and self.npc:character_rank()<900 then sect = "specops_outfit" end

 

if self.npc:character_rank()>=900 then sect = "military_outfit" end

 

end

 

 

 

if self.npc:character_community()=="killer" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<900 then sect = "killer_outfit" end

 

if self.npc:character_rank()>=900 then sect = "killer_blue_exoskeleton" end

 

end

 

 

 

if self.npc:character_community()=="dolg" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<900 then sect = "dolg_outfit" end

 

if self.npc:character_rank()>=900 then sect = "dolg_black_exoskeleton" end

 

end

 

 

 

if self.npc:character_community()=="freedom" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<300 then sect = "svoboda_light_outfit" end

 

if self.npc:character_rank()>=300 and self.npc:character_rank()<900 then sect = "svoboda_heavy_outfit" end

 

if self.npc:character_rank()>=900 then sect = "svoboda_exoskeleton" end

 

end

 

 

 

if self.npc:character_community()=="monolith" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<600 then sect = "monolit_outfit" end

 

if self.npc:character_rank()>=600 and self.npc:character_rank()<900 then sect = "monolit_scientific_outfit" end

 

if self.npc:character_rank()>=900 then sect = "monolit_exoskeleton" end

 

end

 

 

 

if self.npc:character_community()=="ecolog" then

 

if self.npc:character_rank()>=0 and self.npc:character_rank()<900 then sect = "ecolog_outfit" end

 

if self.npc:character_rank()>=900 then sect = "protection_outfit" end

 

end

 

 

 

if sect~=nil and not string.find(self.npc:section(),"arena") and

 

not string.find(self.npc:section(),"aem") and

 

self.npc:character_community()~="arena_enemy" and

 

self.npc:name()~="esc_novice_attacker1" and

 

self.npc:name()~="esc_blokpost_commander" and

 

self.npc:name()~="agr_ratcatcher" and

 

self.npc:name()~="val_lager_bandits_borov" and

 

not string.find(self.npc:name(),"gar_dm_bandit") and

 

self.npc:name()~="gar_wounded_bandit" and

 

self.npc:name()~="bar_dolg_leader" and

 

self.npc:name()~="bar_dolg_petrenko" and

 

self.npc:name()~="mil_freedom_member0012" and

 

self.npc:name()~="mil_freedom_member0018" and

 

self.npc:name()~="mil_stalker0012" and

 

self.npc:name()~="mil_stalker0023" and

 

self.npc:name()~="mil_ara" and

 

self.npc:name()~="mil_blockpost_freedomstalker001" and

 

self.npc:name()~="bar_ecolog_professor" and

 

self.npc:name()~="yan_scientist_help" and

 

self.npc:name()~="yan_specnaz_dead" and

 

self.npc:name()~="x16_stalker_ghost" and

 

self.npc:name()~="yantar_semenov" then

 

otf = create_items(self.npc, sect, 1, 40)

 

if otf~= nil then

 

funcs.start_timer("otf",1,otf.id)

 

end

 

end

 

end

 

 

 

if not string.find(self.npc:section(),"arena") and

 

self.npc:character_community()~="arena_enemy" and

 

self.npc:name()~="yan_specnaz_dead" and

 

self.npc:name()~="x16_stalker_ghost" then

 

 

 

local otf_1

 

local otf_2

 

local otf_3

 

local otf_4

 

local otf_5

 

local sect

 

local t = amk.read_stalker_params(se_obj)

 

if t ~= nil then

 

local vis = t.visual

 

vis = amk.str_explode("\\",vis)

 

vis = vis[3]

 

--skunk.dbglog("vis = '%s'", vis)

 

 

 

-- bandit

 

if string.find(vis,"stalker_bandit") then sect = "bandit_outfit" end

 

if vis == "stalker_bandit_drunk" then sect = "outfit_bandit_m1" end

 

if vis == "stalker_bandit_8" then sect = "bandit_gaz_outfit_m1" end

 

if vis == "stalker_bandit_veteran" then sect = "bandit_veteran_outfit" end

 

if vis == "stalker_bandit_borov" or vis == "stalker_bandit_master" then sect = "bandit_master_outfit" end

 

if vis == "stalker_bandit_exoskeleton" then sect = "exo_bandit_outfit" end

 

-- dolg

 

if string.find(vis,"stalker_do") then sect = "dolg_outfit" end

 

if vis == "stalker_do_antigas" then sect = "dolg_gaz_outfit_m1" end

 

if vis == "stalker_do_komandir" then sect = "outfit_dolg_m1" end

 

if vis == "stalker_do_nauchniy" then sect = "dolg_scientific_outfit" end

 

if vis == "stalker_do_exoskeleton" then sect = "dolg_black_exoskeleton" end

 

-- ecolog

 

if vis == "stalker_ecolog" or vis == "nauchniy_1" or vis == "protect_suit2" then sect = "ecolog_outfit" end

 

if vis == "stalker_ecolog_military" or vis == "stalker_chemical" or vis == "nauchniy_0" or vis == "protect_suit1" then sect = "protection_outfit" end

 

-- izgoy

 

if vis == "izgoy" then sect = "bandit_veteran_outfit" end

 

-- killer

 

if string.find(vis,"stalker_ki") then sect = "killer_outfit" end

 

if vis == "stalker_ki_head_1" then sect = "outfit_killer_m1" end

 

if vis == "stalker_ki_antigas" then sect = "killer_gaz_outfit_m1" end

 

if vis == "stalker_ki_nauchniy" then sect = "merc_scientific_outfit" end

 

if vis == "stalker_ki_exoskeleton" then sect = "killer_blue_exoskeleton" end

 

-- militari

 

if vis == "stalker_militari_1" or vis == "stalker_militari_antigas_1" or vis == "stalker_military" or vis == "stalker_military_green" then sect = "military_outfit" end

 

if vis == "stalker_militari_2" or vis == "stalker_militari_antigas_2" or vis == "stalker_commander" or vis == "stalker_military_black" then sect = "militaryspec_outfit" end

 

-- monolit

 

if string.find(vis,"stalker_mo") or vis == "stalker_monolit" then sect = "monolit_outfit" end

 

if vis == "stalker_mo_hood_9" then sect = "monolit_gaz_outfit_m1" end

 

if vis == "stalker_mo_nauchniy" then sect = "monolit_scientific_outfit" end

 

if vis == "stalker_mo_exo" then sect = "monolit_exoskeleton" end

 

-- nauchniy (see ecolog)

 

-- neytral

 

if string.find(vis,"stalker_neytral") or vis == "stalker_hood" then sect = "stalker_outfit" end

 

if string.find(vis,"stalker_neytral_rukzak") then sect = "outfit_stalker_m2" end

 

if vis == "stalker_bar_security" then sect = "stalker_guard_outfit" end

 

if vis == "stalker_neytral_hood_9" then sect = "neytral_gaz_outfit_m1" end

 

if string.find(vis,"neytral") ~= nil then

 

if self.npc:name()=="esc_wolf" or self.npc:name()=="esc_stalker_fanat" or self.npc:name()=="esc_fox" or self.npc:name()=="esc_provodnik" or self.npc:name()=="gar_hellcar" or self.npc:name()=="gar_seryi" or self.npc:name()=="agr_krot" then sect = "neytral_gaz_outfit_m2" end

 

end

 

if vis == "stalker_prizrak" then sect = "outfit_stalker_m1" end

 

if vis == "stalker_neytral_nauchniy" or vis == "stalker_scien" then sect = "scientific_outfit" end

 

if vis == "stalker_neytral_exoskeleton" or vis == "stalker_exoskeleton" then sect = "exo_outfit" end

 

-- novice

 

if string.find(vis,"green_stalker") or vis == "stalker_novice" then sect = "novice_outfit" end

 

if vis == "green_stalker_1" or vis == "green_stalker_5" or vis == "green_stalker_10" or vis == "green_stalker_11" then sect = "neytral_novice_outfit_m1" end

 

if vis == "green_stalker_antigas" then sect = "neytral_novice_gaz_outfit_m1" end

 

-- protect (see ecolog)

 

-- soldier

 

if string.find(vis,"soldier_bandana") or string.find(vis,"soldier_beret") or vis == "soldier_mask" or vis == "soldier_obichniy" or vis == "stalker_soldier" then sect = "outfit_soldier_m1" end

 

if vis == "soldier_spetsnaz" or vis == "stalker_specops" then sect = "specops_outfit" end

 

if vis == "soldier_antigas" then sect = "outfit_specnaz_m1" end

 

-- stalker_zombi

 

if vis == "stalker_zombie1" then sect = "bandit_outfit" end

 

if vis == "stalker_zombie2" or vis == "zombie_fresh_1" then sect = "dolg_outfit" end

 

if vis == "stalker_zombie3" or vis == "stalker_zombie6" or vis == "zombie_fresh_2" then sect = "stalker_outfit" end

 

if vis == "stalker_zombie4" then sect = "killer_outfit" end

 

if vis == "stalker_zombie5" then sect = "stalker_guard_outfit" end

 

if vis == "stalker_zombie7" then sect = "novice_outfit" end

 

if vis == "stalker_zombie8" then sect = "neytral_novice_outfit_m1" end

 

if vis == "stalker_zombie_specnaz" then sect = "specops_outfit" end

 

if vis == "zombie_fresh_0" then sect = "svoboda_heavy_outfit" end

 

if vis == "zombie_exoskeleton" then sect = "broken_exoskeleton" end

 

-- svoboda

 

if vis == "stalker_sv_rukzak_1_1" or vis == "stalker_sv_rukzak_3" or vis == "stalker_svoboda_light" then sect = "svoboda_light_outfit" end

 

if string.find(vis,"stalker_sv_balon_1") or vis == "stalker_sv_rukzak_1" or vis == "stalker_sv_rukzak_2" or vis == "stalker_sv_rukzak_3_1" or vis == "stalker_sv_cook" or vis == "stalker_sv_max" or vis == "stalker_svoboda_heavy" then sect = "svoboda_heavy_outfit" end

 

if vis == "stalker_sv_hood_91" then sect = "svoboda_gaz_outfit_m1" end

 

if vis == "stalker_sv_hood_9" then sect = "svoboda_heavy_gaz_outfit_m1" end

 

if vis == "stalker_sv_nauchniy" then sect = "freedom_scientific_outfit" end

 

if vis == "stalker_sv_exoskeleton" then sect = "svoboda_exoskeleton" end

 

if vis == "stalker_sv_leader" then sect = "outfit_svoboda_m1" end

 

 

 

if sect~=nil then

 

if sect == "bandit_outfit" or sect == "outfit_bandit_m1" or sect == "bandit_gaz_outfit_m1" or sect == "bandit_veteran_outfit" or sect == "bandit_master_outfit" or sect == "novice_outfit" or sect == "neytral_novice_outfit_m1" or sect == "neytral_novice_gaz_outfit_m1" then

 

otf_1 = create_items(self.npc, sect, 1, 650)

 

if otf_1~= nil then

 

amk.start_timer("outfit_cond_1",1,otf_1.id) end

 

 

 

elseif sect == "stalker_outfit" or sect == "killer_outfit" or sect == "outfit_soldier_m1" or sect == "svoboda_light_outfit" or sect == "svoboda_gaz_outfit_m1" then

 

otf_2 = create_items(self.npc, sect, 1, 550)

 

if otf_2~= nil then

 

amk.start_timer("outfit_cond_2",1,otf_2.id) end

 

 

 

elseif sect == "dolg_outfit" or sect == "dolg_gaz_outfit_m1" or sect == "ecolog_outfit" or sect == "outfit_dolg_m1" or sect == "outfit_killer_m1" or sect == "killer_gaz_outfit_m1" or sect == "specops_outfit" or sect == "outfit_specnaz_m1" or sect == "monolit_outfit" or sect == "monolit_gaz_outfit_m1" or sect == "stalker_guard_outfit" or sect == "outfit_stalker_m1" or sect == "outfit_stalker_m2" or sect == "neytral_gaz_outfit_m1" or sect == "neytral_gaz_outfit_m2" or sect == "svoboda_heavy_outfit" or sect == "svoboda_heavy_gaz_outfit_m1" or sect == "outfit_svoboda_m1" then

 

otf_3 = create_items(self.npc, sect, 1, 450)

 

if otf_3~= nil then

 

amk.start_timer("outfit_cond_3",1,otf_3.id) end

 

 

 

elseif sect == "dolg_scientific_outfit" or sect == "ecolog_outfit" or sect == "protection_outfit" or sect == "merc_scientific_outfit" or sect == "military_outfit" or sect == "militaryspec_outfit" or sect == "monolit_scientific_outfit" or sect == "scientific_outfit" or sect == "freedom_scientific_outfit" then

 

otf_4 = create_items(self.npc, sect, 1, 350)

 

if otf_4~= nil then

 

amk.start_timer("outfit_cond_4",1,otf_4.id) end

 

 

 

else

 

otf_5 = create_items(self.npc, sect, 1, 250)

 

if otf_5~= nil then

 

amk.start_timer("outfit_cond_5",1,otf_5.id) end

 

end

 

end

 

end

 

end

 

end

 

 

Лично для меня это большая проблема, в скриптах я не шарю, совместить ещё другое дело. А ты говоришь проще некуда.

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

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

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

http://img.stalker.u...89f9180a85e.jpg

Видео карта новая geforce gtx 560, дрова обновлены.

 

А что ты установил то?

ColR_iT

 

ColR_iT, дрова новые установил, с оф.сайта. Ничего не изменилось. Как были расплывчатые текстуры, так и остались

 

На старом компе все нормально было. Хотя там видеокарта похуже была, да и дрова старые

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

К20

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

Всем привет. Такая вот проблема. Хотел заспаунить НПС через all.spawn. Распаковал all.spawn, добавил НПС туда для спавна. Добавил профиль НПС(npc_profile.xml),характер(character_desc_escape.xml), секцию НПС в spawn_sections, в game_story_id прописал его ИД.

Запаковал all.spawn(Странно что размер получился чуть меньше после запаковки, чем оригинальный файл игры).

Начинаю новую игру и получаю такой вот вылет(Все действия были совершенны над чистой игрой, без каких либо модов, ТЧ 1.0004)

FATAL ERROR

 

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

[error]Line : 73

[error]Description :

[error]Arguments : LUA error: ...shadow of chernobyl\gamedata\scripts\xr_gulag.script:1178: attempt to index field 'gulag' (a nil value)

 

stack trace:

 

 

А что конкретно ты понаписал мы сами должны догадаться!?

ColR_iT

 

 


<specific_character id="esc_drug1" team_default = "1">
<name>drug</name>
<icon>ui_npc_u_stalker_neytral_balon_1</icon>
<map_icon x="0" y="0"></map_icon>
<bio>esc_wolf_bio</bio>
<class>esc_drug1</class>
<community>stalker</community>
<terrain_sect>stalker_terrain</terrain_sect>
<money min="4000 " max="120000" infinitive="0"></money>
<rank>4</rank>
<reputation>5</reputation>
<visual>actors\neytral\stalker_neytral_balon_1</visual>
<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>
<panic_treshold>0</panic_treshold>
<supplies>
[spawn] \n
#include "gameplay\character_items.xml" \n
#include "gameplay\character_drugs.xml" \n
#include "gameplay\character_food.xml"
</supplies>
#include "gameplay\character_criticals_4.xml"
<start_dialog>hello_dialog</start_dialog>
</specific_character>

 


[970]
section_name = stalker
name = esc_drug1_new
position = -241.58769226074,-19.581008911133,-128.12699890137
direction = 0,0,0
money = 4000
character_profile = esc_drug1
game_vertex_id = 8
distance = 30.1000003814697
level_vertex_id = 14470
object_flags = 0xfffff7bf
custom_data = <<END
[dont_spawn_loot]
END
visual_name = actors\neytral\stalker_neytral_balon_1
g_team = 0
g_squad = 0
g_group = 0
health = 1
dynamic_out_restrictions =
dynamic_in_restrictions =
upd:health = 1
upd:timestamp = 0
upd:creature_flags = 0
upd:position = -241.58769226074,-19.581008911133,-128.12699890137
upd:o_model = 0
upd:o_torso = 0.0,0.0,0
upd:g_team = 0
upd:g_squad = 0
upd:g_group = 0
upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0
predicate5 = 0,1,0,1,2
predicate4 = 2,2,1,1
upd:start_dialog =

 


<character id="esc_drug1">
<class>esc_drug1</class>
<specific_character>esc_drug1</specific_character>
</character>

 


[esc_drug1_spawn]:stalker
$spawn = "respawn\esc_drug1_spawn"
character_profile = esc_drug1
spec_rank = regular
community = stalker

 

 

 

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

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

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

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

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

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

Войти

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

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

AMK-Team.ru

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