antreg 178 Опубликовано 26 Июня 2010 (изменено) XeoN, 1) Спавн НПС с выдачей АйДи: function spawn_mervin22() local obj=alife():create("esc_mervin22",vector():set(9.693,56.273,48.022),5205,2417) local params=amk.read_stalker_params(obj) params.custom="[logic]\ncfg = scripts\\new\\esc_mervin22.ltx" params.sid=30139 amk.write_stalker_params(params,obj) end Для контроля назначнных SID_ов надо зарегистрировать Вашего НПС в файле: game_story_ids.ltx (\gamedata\config) по аналогии с остальными. Номер sid надо брать, чтобы он не дублировался с существующими, лучше назначить с "запасом", напрмер, как в примере, иначе будут вылеты с указанием на "дублирование сида". 2) Удаление НПС по СИД_у: function del_mervin22() local sim = alife() local se_obj = sim:story_object(30139) if se_obj then sim:release(se_obj, true) end end 3) Чтобы сделать бессмертным НПС, надо всего лишь прописать ему :stalker_sakharov в секции спавна, будь то аллспавн или заспавненный скриптом НПС. Вот пример (\gamedata\config\creatures файл: spawn_sections.ltx): [esc_mervin22]:stalker_sakharov $spawn = "respawn\esc_mervin22_spawn" character_profile = esc_mervin2 spec_rank = master community = trader custom_data = scripts\new\esc_mervin22.ltx Что есть stalker_sakharov: Это всего лишь секция в файле: m_stalker.ltx (вот здесь: \gamedata\config\creatures) в которой назначены параметры "бессмертия": [stalker_sakharov]:stalker_trader $spawn = "stalkers\stalker_sakharov" immunities_sect = stalker_immunities_sakharov condition_sect = my_stalker_condition [my_stalker_condition] satiety_v = 0.0 ;скорость уменьшения сытости со временем radiation_v = 1.0 ;скорость уменьшения радиации satiety_power_v = 1.0 ;увеличение силы при уменьшении сытости satiety_health_v = 1.0 ;увеличение здоровья при уменьшении сытости satiety_critical = 0.0 ;критическое значения сытости (в процентах от 0..1) когда здоровье начианает уменьшаться radiation_health_v = 0.0 ;уменьшение здоровья при воздействии радиации morale_v = 0.0 ;скорость восстановления морали health_hit_part = 0.0 ;процент хита, уходящий на отнимание здоровья power_hit_part = 0.1 ;процент хита, уходящий на отнимание силы psy_health_v = 0.1 ;скорость восстановления psy-здоровья ;открытые раны bleeding_v = 0.0 ;потеря крови при номинальной ране в секунду wound_incarnation_v = 1.0 ;крутизна кривой заживления (какой процент раны заживет в игровую секунду) min_wound_size = 1.0 ;минимальный размер раны, после которого она считается зажившей sleep_health = 1.0 ;1.5 ;коэффициенты скоростей изменения параметров во время сна sleep_power = 1.0 ;1.5 sleep_satiety = 1.0 ;0.8 sleep_radiation = 1.0 ;1.1 sleep_psy_health = 1.0 [stalker_immunities_sakharov] burn_immunity = 0.0 ;коэффициенты иммунитета strike_immunity = 0.0 shock_immunity = 0.0 wound_immunity = 0.0 radiation_immunity = 0.0 telepatic_immunity = 0.0 chemical_burn_immunity = 0.0 explosion_immunity = 0.0 fire_wound_immunity = 0.0 wound_2_immunity = 0.0 А иногда нужно сделать просто "трудноубиваемого" врага. Тогда делаем так (просто пример, можно и подругому): [stalker_new]:stalker $spawn = "stalkers\stalker_new" immunities_sect = stalker_immunities_new condition_sect = new_stalker_condition [new_stalker_condition] satiety_v = 0.00001 ;скорость уменьшения сытости со временем radiation_v = 0.0001 ;скорость уменьшения радиации satiety_power_v = 0.0005 ;увеличение силы при уменьшении сытости satiety_health_v = 0.0 ;0.0001 ;увеличение здоровья при уменьшении сытости satiety_critical = 0.0 ;критическое значения сытости (в процентах от 0..1) когда здоровье начианает уменьшаться radiation_health_v = 0.000 ;уменьшение здоровья при воздействии радиации morale_v = 0.0001 ;скорость восстановления морали health_hit_part = 0.05 ;процент хита, уходящий на отнимание здоровья power_hit_part = 0.05 ;процент хита, уходящий на отнимание силы psy_health_v = 0.01 ; скорость восстановления psy-здоровья health_restore_v = 0.00001 ;скорость восстановления здоровья sleep_health = 1.0 ;коэффициенты скоростей изменения параметров во время сна sleep_power = 1.0 sleep_satiety = 1.0 sleep_radiation = 1.0 sleep_psy_health = 1.0 ;---LIMPING STATE----------------------------------------------------- use_limping_state = off limping_threshold = 0.5 ;открытые раны bleeding_v = 0.0 ;потеря крови при номинальной ране в секунду wound_incarnation_v = 0.001 ;крутизна кривой заживления (какой процент раны останется после заживления в игровую секунду) min_wound_size = 0.01 [stalker_immunities_new] burn_immunity = 0.05 ;коэффициенты иммунитета strike_immunity = 0.05 shock_immunity = 0.05 wound_immunity = 0.3 radiation_immunity = 0.0 telepatic_immunity = 0.0 chemical_burn_immunity = 0.08 explosion_immunity = 100 fire_wound_immunity = 0.00000000001 wound_2_immunity = 0.0000000001 В этом случае, враг суров, но всё зависит от его костюма. В экзе, гранатой его не возьмёшь, только в голову бронедойными, в обычном костюме (напрмер, наёмника) можно и гранатой, но всё это в зависимости от балланса оружия и т.д. в создаваемом Вами моде. Это только пример, который я использовал. Можно создать свою секцию с характеристиками "защиты-повреждения" для НПС и спавнить новых челов с заданными свойствами, указывая им созданную секцию. Например, в аллспавне (если там спавнить)(ПРИМЕР): [3635] ; cse_abstract properties section_name = stalker_new name = esc_mervin22 Если скриптами спавним, то тогда секция в файле: spawn_sections.ltx (\gamedata\config\creatures): [esc_mervin22]:stalker_new $spawn = "respawn\esc_mervin22_spawn" character_profile = esc_mervin2 --секция его профиля в Вашем character_desc_ххх.xml spec_rank = master community = trader --неважно кто он, в данном случае торговец custom_data = scripts\new\esc_mervin22.ltx --здесь надо прописать логику для своего НПС Изменено 27 Июня 2010 пользователем antreg "Тайные Тропы 2" техподдержка "Ф.О.Т.О.Г.Р.А.Ф" техподдержка Поделиться этим сообщением Ссылка на сообщение
antreg 178 Опубликовано 27 Июня 2010 Shadows, 1) Точка спавна должна быть "на нулевой отметке плоскости" - на земле (по простому). Чем выше поднимаем, тем больше рандом спавна. Снимать координаты демо рекордом не стоит. Есть простая функция от Бардака: function main_menu:OnButton_credits_clicked() local text local vid local gvid local a = vector() local text a = db.actor:position() vid = db.actor:level_vertex_id() gvid = db.actor:game_vertex_id() text = "Позиция:\\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 Вставляется в самом конце скрипта ui_main_menu.script Вызывается нажатием на Credits (титры) в меню игры, т.е. выходим из игры (Esc) и жмём на Credits (титры) и потом "пищит" и потом возвращаемся в игру и сообщение на экране с координатами (если сообщения нет, такое тоже бывает, тогда заходим в журнал, события и смотрим там в истории диалогов сообщение с координатами на плоскости). "Тайные Тропы 2" техподдержка "Ф.О.Т.О.Г.Р.А.Ф" техподдержка Поделиться этим сообщением Ссылка на сообщение