*1 Для начала создадим профиль! Откроем фаил character_****.xml и создаем там новый профиль Пример: <specific_character id="название_секции" team_default = "1"> <name>GENERATE_NAME_stalker</name> <icon>иконка</icon> <map_icon x="1" y="0"></map_icon> <bio>Опытный сталкер. Детальная информация отсутствует.</bio> <class>класс</class> <community>группировка</community> <terrain_sect>stalker_terrain</terrain_sect> <snd_config>characters_voice\human_01\папка с названием группировки\</snd_config> <rank>цифры от 0 до 900</rank> <reputation>цифры от 0 до 1000</reputation> <visual>путь до модели"визуала"</visual> <supplies> [spawn] \n оружие \n патроны к этому оружию = 5 \n </supplies> #include "gameplay\character_criticals_4.xml" #include "gameplay\character_dialogs.xml" </specific_character> *2 Теперь нужно прописать класс нашего НПС в npc_profile.xml Пример: <character id="название_секции из character_****.xml"> <class>класс прописанный вами ранее</class> <specific_character>название_секции из character_****.xml</specific_character> </character> *3 Теперь зарегистрируем Нашего НПС в spawn_section.ltx Пример: [секция спавна(название пишите сами)]:stalker $spawn = "respawn\секция спавна" character_profile = название_секции из character_****.xml spec_rank = regular ;это ранг непеся оставляйте как есть ,особой роли не играет community = группировка которую вы приписали этому (название_секции из character_****.xml) custom_data = scripts\sniper_addon\sniper_addon_***_logic.ltx;*** - если группировка НПС нейтральна к вам или дружелюбна ,то friend , в противном случае enemy *4 Потом открываем xr_conditions.script и добавляем вот такую функцию function is_sniper_enemy(enemy, object) return enemy:id() ~= db.actor:id() end PS:Если нет такого фаила ,то возьмите из оригинальной Игры! *5 Теперь осталось Заспавнить Нашего НПСа PS:Тем кто делает это впервые ,прочитайте дальше :),а если сталкивались ,всё равно читайте *5.1 Для Начала нам нужно снять координаты того места Где появится наш Снайпер. Для этого открываем ui_main_menu.script находим вот примерно такое if dik == DIK_keys.DIK_Q then self:OnMessageQuitWin() end и делаем так : if dik == DIK_keys.DIK_Q then self:OnMessageQuitWin() elseif dik==DIK_keys.DIK_W then self:position_info() end И в конец фаила.В Самый Конец!!! function main_menu:position_info() local a = db.actor:position() local vid = db.actor:level_vertex_id() local gvid = db.actor:game_vertex_id() local text = "GPS:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid news_manager.send_tip(db.actor, text, nil, nil, 30000) end Сохраняем!!! *5.2 Заходим в игру ,добегаем до места где бы хотели чтобы сидел снайпер,выходим в Меню и в меню жмём на W , потом возвращаемся в игру И Делаем скриншот (F12) *5.3 Далее создаём скрипт спавна (создаётся с помощью блокнота или Notepad++) Например sniper_add.script В нём будем писать функции! function start_add_spawn()--\\*Это "список".Сюда будем вписывать вызов всех функции спавна --\\*Сюда вписываем название ваших функций --пример: spawn_sniper_one() end function название_латиницей()--\\spawn_sniper_one() local x= смотрим скриншот и переписываем сюда x local y= смотрим скриншот и переписываем сюда y local z= смотрим скриншот и переписываем сюда z local level_vertex= смотрим скриншот и переписываем сюда level_vertex local game_vertex_id= смотрим скриншот и переписываем сюда game_vertex_id alife():create("тут название вашей из spawn_section.ltx",vector():set(x,y,z),level_vertex,game_vertex_id) end function save_variable(variable_name, value) xr_logic.pstor_store(db.actor, variable_name, value) end function load_variable(variable_name, value_if_not_found) return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found) end *5.4 Когда вписали всех наших Снайперов и все функции спавна и внесли их в "список",то добавляем вызов нашей функции в bind_stalker.script в функцию actor_binder:update(delta) перед последнем end'ом этой функции добавляем if sniper_add.load_variable("spawn_sniper",false)==false then sniper_add.start_add_spawn() sniper_add.save_variable("spawn_sniper",true) end Сохраняем! *6 Теперь работаем с логикой. в папке configs/scripts создаём папку с sniper_addon , открываем её *6.1 Создаём два фаила sniper_addon_friend_logic.ltx и sniper_addon_enemy_logic.ltx *6.2 открываем sniper_addon_friend_logic.ltx и вписываем туда: ;SNIPER ADDON ;Меченый(Стрелок) [logic] active = remark@search [remark@fire] combat_ignore_cond = {!is_sniper_enemy} radius = 0 anim = hide on_info = {=health_le(0.5)} remark@search wounded = wounded@work sniper = true [remark@search] combat_ignore_cond = true combat_ignore_keep_when_attacked = false anim = hide target = actor on_info = {=see_enemy} remark@fire wounded = wounded@work [smart_terrains] none = true [wounded@work] hp_state = 0|wounded_heavy@help_heavy hp_state_see = 0|wounded_heavy@help_heavy hp_victim = 0|nil hp_fight = 0|false hp_cover = 0|false Сохраняем этот фаил и открываем второй и вставляем туда ;SNIPER ADDON ;Меченый(Стрелок) [logic] active = remark@search [remark@fire] combat_ignore_cond = {!is_enemy_actor} radius = 0 anim = hide on_info = {=health_le(0.5)} remark@search wounded = wounded@work sniper = true [smart_terrains] none = true [remark@search] combat_ignore_cond = true combat_ignore_keep_when_attacked = false anim = hide target = actor on_info = {=see_actor} remark@fire wounded = wounded@work [wounded@work] hp_state = 0|wounded_heavy@help_heavy hp_state_see = 0|wounded_heavy@help_heavy hp_victim = 0|nil hp_fight = 0|false hp_cover = 0|false
|