Kirag 39 Опубликовано 26 Мая 2009 (изменено) Vergas Почему-то НПС в функцию не пришел. В death_manager от АМК эта проблема, похоже, решена - там в этой функции (и не только в ней) стоит проверка на существование НПС: if npc == nil then return end Если вдруг он сочтен несуществующим, функция тихо мирно закроется без скандалов и вылетов. ХМК Поворта не нашел, но фотошоп помочь должен. Заодно и миникарта повернется на уровне. Monnoroch Нас уже двое с почти одинаковым вопросом Спавнить напрямую с [[wpn_ak74 = 1,scope]] (как в characters_desc) вместо секции не получается. Есть вариант со спавном оружия без аддона и последующей перепаковкой addon_flags в нет-пакетах. Получить эти данные могу, вычислить эти флаги тоже, а вот записать обратно - с этим проблема. Посмотри в середине страницы, я показывал, как пробовал это делать. Ты в скриптах вроде бы получше меня понимаешь, может получится разобраться. флаг приц гран глуш 0 о о о 1 х о о 2 о х о 3 х х о 4 о о х 5 х о х 6 о х х 7 х х х Изменено 26 Мая 2009 пользователем Kirag Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 26 Мая 2009 Monnoroch Вот что я нарыл на офф.форуме по спавну оружия с аддонами: 13 Июня 2008 --------------------------9rauth Как узнать в скрипте прикручен ли к данному оружию прицел/подствольник/глушитель? В инвентаре непися имеется ствол и прицел/подствольник/глушитель. Как скриптом прикрутить девайс к стволу? --------------------------IG-2007 ---ЦИТАТА--- Как узнать в скрипте прикручен ли к данному оружию прицел/подствольник/глушитель? ---КОНЕЦ ЦИТАТЫ--- Можно при помощи функции STATE_Write для серверного объекта считать в нет-пакет параметры оружия. Разабрать нет-пакет на составляющие, там есть нужная информация. В АМК видел подобный скрипт, в том же файле, где читаются/разбираются нет-пакеты сталкеров и монстров. Можете посмотреть файл aem_grenade.script из последних версий AEM. ---ЦИТАТА--- В инвентаре непися имеется ствол и прицел/подствольник/глушитель. Как скриптом прикрутить девайс к стволу? ---КОНЕЦ ЦИТАТЫ--- У меня никак не получилось. Вернее получилось, но только через спавн нового оружия с приделанными адонами и удалением старого. В том же aem_grenade.script лежит подобная штука, правда это несовсем то и весьма путано. --------------------------9rauth Спасибо ---ЦИТАТА--- У меня никак не получилось. Вернее получилось, но только через спавн нового оружия с приделанными адонами и удалением старого ---КОНЕЦ ЦИТАТЫ--- Это мне как раз и нужно. Но что то я не представляю как заспавнить оружие с приделанными аддонами. Наверное я чего то не понимаю? И еще, можно ли с помощью этих нетпакетов (пока слабо понимаю как с ними работать ) сменить оружию тип патронов прямо во время игры? Я смотрел в скрипт ремкомплекта, из нетпакета оружия можно получить информацию про тип патронов. Если в нетпакет записать информацию про другой тип патронов, это сработает, тип патронов для оружия изменится? --------------------------IG-2007 ---ЦИТАТА--- Но что то я не представляю как заспавнить оружие с приделанными аддонами. ---КОНЕЦ ЦИТАТЫ--- Изначально идея была простая, спавним обычное оружее и для него с помощью STATE_Read и/или UPDATE_Read переопределяем параметры (адоны, патроны, износ и т.д.). Но это не захотело работать при спавне оружия в инвентарь. Зато, если спавнить вещь отельно, то всё прекрасно работает. Пришлось спавнить оружие вне инвенторя, дожидаться его перехода в онлайн и переносить в инвентарь. ---ЦИТАТА--- Если в нетпакет записать информацию про другой тип патронов, это сработает, тип патронов для оружия изменится? ---КОНЕЦ ЦИТАТЫ--- Может да, может нет. Проблема, как я понимаю, в том, что оружее (как и всё остальное) может иметь два объекта: серверный и клиентский. Переопределяя нет-пакеты STATE-ми и UPDATE-ми мы изменяем только серверный объект. Клиентскиё же создаётся на базе серверного в момент перехода оружия в онлайн. Если клиентский объект уже создан, то он содержит в себе дупликаты всех необходимых ему данных из серверного. Т.е. переопределяя нет-пакеты серверного объекта мы не можем повлиять на уже созданный клиентский. Как-то так... Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 27 Мая 2009 malandrinus А как технически перевести объект из онлайна в оффлайн и обратно? Как-то уже интересовался этим вопросом, но ответа так и не нашел. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 27 Мая 2009 Ximik Вот содержимое файла в оригинале ТЧ. Скопипасти текст из спойлера, чтобы с файлообменниками не возиться [actor_terrain] 255,255,000,255 [actor]:common_ph_friction_params_on_npc_death GroupControlSection = spawn_group $spawn = "actor" $ed_icon = ed\ed_actor $player = on $prefetch = 16 cform = skeleton class = O_ACTOR money = 40; rank = 3; script_binding = bind_stalker.actor_init visual = actors\hero\stalker_novice.ogf destroyed_vis_name = physics\Dead_Body\skelet_crash terrain = actor_terrain max_item_mass = 50.0 jump_speed = 6. crouch_coef = 0.45 climb_coef = 0.7 run_coef = 2.1 sprint_koef = 2.6 run_back_coef = 1.8 walk_back_coef = 0.8 air_control_param = 0.1 walk_accel = 17 ;радиус в котром над предметами выводятся их названия pickup_info_radius = 5 ;3 ef_creature_type = 17 ; option for evaluation functions ; attach params attachable_items = device_torch,attachable_item,hand_radio ph_box0_center = 0.0, 0.9, 0.0 ph_box0_size = 0.35, 0.9, 0.35 ph_box1_center = 0.0, 0.75, 0.0 ph_box1_size = 0.35, 0.75, 0.35 ph_box2_center = 0.0, 0.6, 0.0 ph_box2_size = 0.35, 0.6, 0.35 stalker_restrictor_radius = .55;0.55;0.75;0.9 stalker_small_restrictor_radius = .55; medium_monster_restrictor_radius = 0.1 ph_crash_speed_min = 14 ph_crash_speed_max = 30 ph_collision_damage_factor = 1.0 ph_mass = 80 weapon_bone0 = bip01_r_finger1 weapon_bone1 = bip01_l_finger1 weapon_bone2 = bip01_r_finger11 damage = actor_damage hit_probability_gd_novice = 0.20 hit_probability_gd_stalker = 0.30 hit_probability_gd_veteran = 0.40 hit_probability_gd_master = 0.50 hit_sounds = actor_hit_snds ;actor condition immunities_sect = actor_immunities_gd_master condition_sect = actor_condition heavy_breath_snd = actor\breath_1 ;звук тяжелого дыхания при усталости heavy_blood_snd = affects\heartbeat; heart\8 material = creatures\actor camera_height_factor = 0.85 ;дисперсия стрельбы с учетом ходьбы и бега disp_base = 0.8 ;угол (в градусах) разлета пуль, когда актер стоит на месте disp_aim = 0.04 disp_vel_factor = 2.0 ;на сколько увеличится дисперсия при скрости в 10 м/с (не обязательно при беге) disp_accel_factor = 2.0 ;еще на сколько увеличится, если актер бежит (+ скорость) disp_crouch_factor = -0.2 ;уменьшение если актер сидит disp_crouch_no_acc_factor = -0.4 ;уменьшение если актер сидит + no acceleration ;disp_jump_factor = 2.0 missile_throw_offset = 0.3, 0.5, 0.5 body_remove_time = 60000 ;время уничтожения трупа (с учетом TimeFactor) sleep_time_factor = 1000 ;400 ;во сколько раз время идет быстрее, когда актер спит max_sleep_hours = 12 ;species of monster species = actor ;---STEP MANAGER------------------------------------------------------ LegsCount = 2 step_params = stalker_step_manager foot_bones = stalker_foot_bones memory_update_time = 100 ; visibility parameters DynamicObjectsCount = 32 min_view_distance = 1.0 ; коэффициент, который множится на eye_range, в зависимости от угла max_view_distance = 1.0 ; коэффициент, который множится на eye_range, в зависимости от угла visibility_threshold = 1.0 ; значение, при достижении суммой которого объект считается видимым always_visible_distance = 1.0 time_quant = 0.005 decrease_value = 0.1 ; значение, на которое уменьшается вес, если объект попал в фрустум, но отсёкся по каким-то причинам velocity_factor = 0.5 luminocity_factor = 0.5;0 ; фактор освещения (только для Актёра) transparency_threshold = 0.4 ; 0.25 still_visible_time = 5000 ; время, которое объект всё ещё считается видимым, даже если он уже не во фрустуме [actor_immunities_gd_novice] burn_immunity = 0.5 ;коэффициенты иммунитета strike_immunity = 0.5 shock_immunity = 0.5 wound_immunity = 0.5 radiation_immunity = 0.5 telepatic_immunity = 0.5 chemical_burn_immunity = 0.5 explosion_immunity = 0.1 fire_wound_immunity = 0.5 [actor_immunities_gd_stalker] burn_immunity = 0.65 ;коэффициенты иммунитета strike_immunity = 0.65 shock_immunity = 0.65 wound_immunity = 0.65 radiation_immunity = 0.65 telepatic_immunity = 0.65 chemical_burn_immunity = 0.65 explosion_immunity = 0.3 fire_wound_immunity = 0.65 [actor_immunities_gd_veteran] burn_immunity = 0.8 ;коэффициенты иммунитета strike_immunity = 0.8 shock_immunity = 0.8 wound_immunity = 0.8 radiation_immunity = 0.8 telepatic_immunity = 0.8 chemical_burn_immunity = 0.8 explosion_immunity = 0.6 fire_wound_immunity = 0.8 [actor_immunities_gd_master] burn_immunity = 1.0 ;коэффициенты иммунитета strike_immunity = 1.0 shock_immunity = 1.0 wound_immunity = 1.0 radiation_immunity = 1.0 telepatic_immunity = 1.0 chemical_burn_immunity = 1.0 explosion_immunity = 1.0 fire_wound_immunity = 1.0 [actor_condition] satiety_v = 0.000015 ;скорость уменьшения сытости со временем radiation_v = 0.0001 ;скорость уменьшения радиации satiety_power_v = 0.000055 ;увеличение силы при уменьшении сытости satiety_health_v = 0.0001 ;увеличение здоровья при уменьшении сытости satiety_critical = 0.0 ;критическое значения сытости (в процентах от 0..1) когда здоровье начианает уменьшаться radiation_health_v = 0.004 ;уменьшение здоровья при воздействии радиации morale_v = 0.0001 ;скорость восстановления морали psy_health_v = 0.001 ;скорость восстановления psy-здоровья alcohol_v = -0.0003 health_hit_part = 1.0 ;процент хита, уходящий на отнимание здоровья power_hit_part = 0.1 ;процент хита, уходящий на отнимание силы max_power_leak_speed = 0.0 ;накопление усталости (макс граница, до которой восстанавливается сила) в секунду игрового времени max_walk_weight = 60 bleeding_v = 0.0005 ;потеря крови при номинальной ране в секунду wound_incarnation_v = 0.003 ;скорость заживления раны min_wound_size = 0.0256 ;минимальный размер раны, после которого она считается зажившей ;--when actor in sleep satiety_v_sleep = 0.00001 radiation_v_sleep = 0.0003 satiety_power_v_sleep = 0.0001 satiety_health_v_sleep = 0.00001 radiation_health_v_sleep = 0.001 morale_v_sleep = 0.0 psy_health_v_sleep = 0.0 alcohol_v_sleep = -0.0005 bleeding_v_sleep = 0.0 wound_incarnation_v_sleep = 0.0 max_power_leak_speed_sleep = -0.00001; ;health_restore_v = 0.0001 ;;;;;;;; ;actor_condition only jump_power = 0.01 ;0.005 ;умешьшение силы с прыжком без учета веса ноши jump_weight_power = 0.05 ;0.045 ;умешьшение силы с прыжком с учетом веса ноши, для максимального допустимого веса overweight_jump_k = 5;10 ;10 ;коэффициент влияние перегрузки прыжок с весом (умножается на jump_weight_power) stand_power = -0.005 walk_power = 0.00001 ;умешьшение силы за секнду во время ходьбы без учета веса ноши walk_weight_power = 0.00005; ;умешьшение силы за секнду во время ходьбы с учетом веса ноши, для максимального допустимого веса overweight_walk_k = 5;9 ;10 ;коэффициент влияние перегрузки ноши (умножается на walk_weight_power) accel_k = 3;5 ;коэффициент на бег (умножается walk_power, walk_weight_power) sprint_k = 75;150;185;180;200; ;коэффициент на "sprint" бег (умножается walk_power, walk_weight_power) ; хромота limping_health_begin = 0.1 ;порог здоровья меньше которого актер начинает хромать limping_health_end = 0.2 ;порог здоровья больше которого актер перестает хромать limping_power_begin = 0.1 ;порог силы меньше которого актер начинает хромать limping_power_end = 0.2 ;порог силы больше которого актер перестает хромать use_limping_state = on cant_walk_power_begin = 0.01 ;порог силы меньше которого актер не может двигаться cant_walk_power_end = 0.10 ;порог силы больше которого актер сможет двигаться cant_sprint_power_begin = 0.20 ;порог силы меньше которого актер не может бежать в спринте cant_sprint_power_end = 0.30 ;порог силы больше которого актер сможет бежать в спринте can_sleep_callback = dream.can_sleep_callback sleep_video_name_callback = dream.sleep_video_name_callback [actor_damage] ;bone_name = <hit_scale>,<fwd_damage_anim_index>,<wound_scale> ;<hit_scale> - коэфф. изменения хита (уменьшения здоровья) ;<wound_scale> - коэфф. изменения величины открытой раны ;-1 - нет анимаций, четный номер - спереди, нечетный номер - сзади, УКАЗЫВАЕТСЯ ТОЛЬКО ПЕРЕДНИЙ!!! ЗАДНИЙ НА АВТОМАТЕ default = 1.0, -1, 1.0 bip01_pelvis = 1.0, 10, 1.5 bip01_spine = 1.0, 10, 1.5 bip01_spine1 = 1.0, 0, 1.5 bip01_spine2 = 1.0, 0, 1.5 bip01_neck = 1.0, 0, 1.5 bip01_head = 0.2, 0, 1.5 eyelid_1 = 0.0, 0, 0.0 eye_left = 0.0, 0, 0.0 eye_right = 0.0, 0, 0.0 jaw_1 = 0.0, 0, 0.0 bip01_l_clavicle = 1.0, 4, 1.5 bip01_l_upperarm = 1.0, 4, 1.5 bip01_l_forearm = 1.0, 4, 1.5 bip01_l_hand = 1.0, 4, 0.5 bip01_l_finger0 = 0.0, 4, 0.0 bip01_l_finger01 = 0.0, 4, 0.0 bip01_l_finger02 = 0.0, 4, 0.0 bip01_l_finger1 = 0.0, 4, 0.0 bip01_l_finger11 = 0.0, 4, 0.0 bip01_l_finger12 = 0.0, 4, 0.0 bip01_l_finger2 = 0.0, 4, 0.0 bip01_l_finger21 = 0.0, 4, 0.0 bip01_l_finger22 = 0.0, 4, 0.0 bip01_r_clavicle = 1.0, 2, 1.5 bip01_r_upperarm = 1.0, 2, 1.5 bip01_r_forearm = 1.0, 2, 1.5 bip01_r_hand = 1.0, 2, 0.0 bip01_r_finger0 = 0.0, 2, 0.0 bip01_r_finger01 = 0.0, 2, 0.0 bip01_r_finger02 = 0.0, 2, 0.0 bip01_r_finger1 = 0.0, 2, 0.0 bip01_r_finger11 = 0.0, 2, 0.0 bip01_r_finger12 = 0.0, 2, 0.0 bip01_r_finger2 = 0.0, 2, 0.0 bip01_r_finger21 = 0.0, 2, 0.0 bip01_r_finger22 = 0.0, 2, 0.0 bip01_l_thigh = 1.0, 8, 1.5 bip01_l_calf = 1.0, 8, 1.5 bip01_l_foot = 1.0, 8, 1.5 bip01_l_toe0 = 1.0, 8, 1.5 bip01_r_thigh = 1.0, 6, 1.5 bip01_r_calf = 1.0, 6, 1.5 bip01_r_foot = 1.0, 6, 1.5 bip01_r_toe0 = 1.0, 6, 1.5 [actor_animation] ;углы дворота ног актера во время стрейфов (в градусах) fwd_l_strafe_yaw = 45 back_l_strafe_yaw = 45 fwd_r_strafe_yaw = 45 back_r_strafe_yaw = 45 l_strafe_yaw = 0 r_strafe_yaw = 0 [actor_hit_snds] burn =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4 shock =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4 strike =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4 wound =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4 radiation =monsters\biting\def_0; actor\hurt1,actor\hurt2,actor\hurt3,actor\hurt4 telepatic =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4 fire_wound =actor\bullet_hit_1,actor\bullet_hit_2,actor\bullet_hit_3,actor\bullet_hit_4 ; actor\pain_1,actor\pain_3,actor\pain_4,actor\pain_5,actor\pain_6,actor\pain_7,actor\pain_8 chemical_burn =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4 explosion =affects\tinnitus3a wound_2 =actor\hurt1,actor\hurt2,actor\hurt3,actor\hurt4 physic_strike =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4 Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 28 Мая 2009 Scorpioser Ты, наверное, имел ввиду из Зенобиана? С рамочками и переменным зумом? Без ковыряния в движке - увы, никак. Даже для стрельбы одиночными пришлось лезть в движок и дать биноклю возможность стрелять. Как именно это сделали, и почему разрешили стрельбу только одиночными, сможет сказать разве что автор этой правки движка. Может, ради баланса, а может, в принципе очереди невозможны. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 8 Июня 2009 Скажите, пожалуйста, как выдать инфопоршин сразу после открытия двери. Делаю вот так ничего не получается: Попробуй в секции, где дверь уже открыта: [ph_door@open] locked = false closed = false on_info = {-info} %+info% on_use = ph_door@close По идее, если дверь открыта, а инфопрошня еще нет, он и выдается. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 8 Июня 2009 Такой вопрос, как заставить выводиться новости в игре (сталкерская сеть), в зависимости от текущей погоды.. Скажем, идет дождь и новость "Мда... Ояпть идет дождь... И так каждый день. Опять придется по лужам шлепать" Буквально вчера разбирался, как считать данные из погодного конфига. Вот результат: local ini = system_ini() local weather = level.get_weather() -- текущий тип погоды local weather_sect = ini:r_string("weathers", weather) -- секция погоды, соответствующая текущему типу local h = level.get_time_hours() -- игровое вчеря, Ч local weather_time -- какой час погоды в текущей секции if h < 10 then weather_time = "0"..tostring(h)..":00:00" else weather_time = tostring(h)..":00:00" end time_sect = ini:r_string(weather_sect, weather_time) -- секция текущей погоды на данный час -- получили секцию активной на данный момент погоды. Читаем из нее, что нужно. Например, плотность дождя rain_density = ini:r_float(time_sect,"rain_density") Осталось только в новостях подрегулировать, ну, там if...then должно хватить Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 9 Июня 2009 (изменено) Буквально вчера разбирался, как считать данные из погодного конфига. Вот результат: А в АМК с динамической погодой сработает? Должно сработать с любыми погодными модами, нужную секцию я вычисляю с самого начала, по текущей погоде и времени. P.S. Извиняюсь за количество цитат, но без них непонятно, к чему все это... Изменено 9 Июня 2009 пользователем Kirag Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 12 Июня 2009 fokstar Звук можно проиграть, непример, так: if условие then play_sound([[characters_voice\human_02\freedom\fight\attack\attack_2]]) end В двойных квадратных скобках пишется путь к звуковому файлу относительно папки sounds. Такой вопрос: в каком скрипте описывается инвентарь ГГ? Про главное меню известно - ui_main_menu.script, что хочешь, то и делай - хоть на клаву команду выводи, хоть кликабельную кнопку делай. А с инвентарем ничего похожего не нашел, а кнопку одну добавить ну очень нужно. Или есть другой путь? Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 12 Июня 2009 Создаешь свой скриптовый файл в папке scripts. В нем пишешь: function название_функции() -- название любое на твой вкус. play_sound([[путь к звуковому файлу относительно папки sounds]]) end И, прошу прощения за склероз, там же пишешь еще одну функцию, без которой не заработает: function play_sound(p) -- вот здесь название уже важно, на него ссылается первая функция if p then local snd_obj = xr_sound.get_safe_sound_object(p) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 0.5) end end Потом вызываешь функцию название_функции откуда считаешь нужным, смотря в каком месте ты проверяешь выполнение условия, при котором начинается озвучка. Звуковые файлы должны лежать в папке sounds. Где именно - неважно, если записываешь свою озвучку, хоть новую папку в sounds создавай и туда звуки складывай. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 14 Июня 2009 cc31 Для Артема Кулинара все просто: строку [gar_artem_kulinar_spawn]:stalker правим на [gar_artem_kulinar_spawn]:stalker_sakharov А вот с Волком будут проблемы - он зашит в алл.спавне. Вот начало секции Волка [100] ; cse_abstract properties section_name = stalker name = esc_wolf ... и т.д. А вот Сахаров: [5228] ; cse_abstract properties section_name = stalker_sakharov name = yantar_ecolog_general ... и т.д. Разница выделена жирным шрифтом. И такое, насколько я понимаю, будет с большинством (если не со всеми) квестовыми НПС из оригинала или просто заспавнеными через алл.спавн. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 15 Июня 2009 Отключение монолога Сидоровича: В файле config\scripts\esc_trader.ltx в самом начале заменить [logic] active = {+esc_trader_hello_played} mob_trader@new_idle1, mob_trader@new_start_wait на [logic] active = mob_trader@new_idle1 Титры обучения - похоже, надо ковырять config\ui\game_tutorials.xml, но с ними я не разбирался Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 16 Июня 2009 IQDDD Вылет с жалобой на "attempt to index global 'ХХХ' (a nil value)", где ХХХ - имя скрипт-файла у меня чаще всего (чтобы не сказать всегда) бывает из-за синтаксических ошибок. Скобку там забыл закрыть, end какой-нибудь забыл прописать, в if...then вместо "==" поставил "=" или что-то вроде этого. Вспоминай, какую(ие) функцию(и) ты правил в этом файле с последнего запуска без этого вылета, там и ищи. Чтобы было проще, можешь комментить куски кода и смотреть, исчезнет ли вылет. Если исчезнет - в закомменченном фрагменте и находятся все ошибки. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 17 Июня 2009 wolkolak Попробуй вместо self.npc:eat(self.npc:object("medkit")) написать self.npc.health = self.npc.health + N, где N - прирост здоровья. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 18 Июня 2009 Возникла пара вопросов по таблицам. 1) Попробовал сделать, чтобы id всех членов какого-то гулага заносились в таблицу. Объявлял таблицу в самом начале файла: local gulag_members = {} Заносил в таблицу так: for k,v in pairs(gulag.Object) do if (v == true or ( v:alive() and -- not(xr_wounded.is_heavy_wounded_by_id(k) or xr_wounded.is_psy_wounded_by_id(k)))) and gulag.Object_begin_job[k] == true then if type(v) ~= "boolean" then table.insert(gulag_members,v:id()) end end end С этим проблем не возникает все заносится адекватно, но все это хорошо только если гулаг один. А как быть, если гулагов несколько, причем заранее неизвестно ни сколько их, ни какие именно? По идее, надо бы чтобы в таблице gulag_members каждый член был в свою очередь таблицей, и вот в эту подтаблицу и заносить нужные id. Попробовал записывать командой table.insert(gulag_members[gulag],v:id()) По идее, должно было записаться в элемент таблицы gulag_members с индексом [gulag]. Но получается вылет: bad argument #1 to 'insert' (table expected, got nil) Похоже, я накосячил в объявлении таблицы, но как это сделать правильно - даже вариантов нет Или я даже не понимаю, сколько всего я не понимаю... 2) Пусть та же ситуация, но заносить в таблицу нужно не только id, но и, допустим, тот же самый гулаг объекта. Т.е. чтобы в одном элементе таблицы хранилось не одно значение, а несколько (известно, сколько и какого типа значения, но неизвестно, сколько всего элементов). Такие сложные таблицы я встречал, но везде, насколько помню, значения задавались изначально при объявлении. Как быть в таком случае? Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 18 Июня 2009 cc31 Используй ACDC, xrspawner половину параметров не возьмет. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 18 Июня 2009 IQDDD Спасибо за подсказку, принцип действительно правильный. local gulag_members = {} -- основная таблица function get_gulag_members(gname) local current_gulag_members = {} -- подтаблица конкретного гулага local gulag = xr_gulag.get_gulag_by_name(gname) if gulag == nil then return end for k,v in pairs(gulag.Object) do if (v == true or ( v:alive() and -- not(xr_wounded.is_heavy_wounded_by_id(k) or xr_wounded.is_psy_wounded_by_id(k)))) and gulag.Object_begin_job[k] == true then if type(v) ~= "boolean" then table.insert(current_gulag_members,v:id()) --заносим в подтаблицу все, что нужно end end end gulag_members[gname] = current_gulag_members --запихиваем готовую подтаблицу в нужный индекс основной end function read_gulag_members(gname) local gm = gulag_members[gname] -- рабочая таблица - элемент основной с нужным индексом if gm == nil then -- если пустая - создаем get_gulag_members(gname) gm = gulag_members[gname] end for k,v in pairs(gm) do qqq(v) -- делаем все, что нужно. qqq - тестовый вывод в сообщение на экран и в лог end end Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 18 Июня 2009 Storyteller Например, мутанты добавляются так: В config\gameplay\info_known_objects.xml добавляется инфопоршень: <info_portion id="encyclopedy_mutant_chimera_general"> <article>mutant_chimera_general</article> </info_portion> В config\gameplay\encyclopedia_mutants.xml добавляется сама статья, прописанная в <article>...</article>: <!-------------------------------- CHIMERA -----------------------------> <article id="mutant_chimera_general" name="Chimera" group="Mutants"> <texture>ui_npc_monster_chimera</texture> <text>enc_mutant_chimera_general</text> </article> В config\ui\ui_npc_monster.xml добавляется ссылка на иконку из <texture>...</texture> (само собой, координаты должны быть правильными): <texture id="ui_npc_monster_chimera" x="330" y="324" width="165" height="108" /> В config\text\rus\string_table_enc_mutants.xml добавляется сам текст статьи из <text>...</text>: <string id="enc_mutant_chimera_general"> <text>1.4 м. Результат генетических экспериментов по программе (универсальное животное-защитник) УЖАЗ?. - Очень умная, сильная и быстрая тварь. - Прячется, обходит со спины. - Дублированная система внутренних органов и дополнительный мозг делает процесс ее умерщвления весьма проблематичным. - Регенерация. - Биологических врагов мало. - В движении напоминает пантеру. - Единственные достойные противники в мире зоны - чернобыльский пес и псевдогигант.</text> </string> Сюда же добавляется название статьи из поля name тега article: <string id="Chimera"> <text>Химера</text> </string> При выдаче инфопоршня encyclopedy_mutant_chimera_general статья попадет в энциклопедию в раздел из поля group тега article. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 19 Июня 2009 В конфигах аномалий половина параметров не работает, что есть, то есть. Но при увеличении параметров "min_artefact_count" и "max_artefact_count" скажем, на 1 и 3 соответственно (может, еще что-то надо править, я тогда хорошенько в конфигах поковырялся, все не упомню), Кордон уже при старте новой игры завален "медузами", иногда попадаются и "каменные цветки". Насчет возобновляемости артов точно не знаю, либо уходил с Кордона, не собирая все подчистую (а иначе в глаза не бросится, уж слишком много артов), либо терпения не хватало дождаться смены суток. Настроить спавн на разумное количество не вышло, так что я особо и не заморачивался. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение
Kirag 39 Опубликовано 20 Июня 2009 Народ, кто-нибудь разбирался с работой с векторами? В lua_help в классе vector куча функций. Часть еще можно догадаться, как, например, set_length(number) или distance_to(const vector&). Но основная масса совершенно непонятны, как загадочный dotproduct(const vector&). Может кто-нибудь подсказать, какие действия они выполняют? function set_length(number); function sub(number); function sub(const vector&); function sub(const vector&, const vector&); function sub(const vector&, number); function reflect(const vector&, const vector&); function slide(const vector&, const vector&); function average(const vector&); function average(const vector&, const vector&); function normalize_safe(); function normalize_safe(const vector&); function normalize(); function normalize(const vector&); function align(); function magnitude() const; function getP() const; function max(const vector&); function max(const vector&, const vector&); function distance_to_xz(const vector&) const; function invert(); function invert(const vector&); function mad(const vector&, number); function mad(const vector&, const vector&, number); function mad(const vector&, const vector&); function mad(const vector&, const vector&, const vector&); function clamp(const vector&); function clamp(const vector&, vector); function inertion(const vector&, number); function crossproduct(const vector&, const vector&); function set(number, number, number); function set(const vector&); function abs(const vector&); function div(number); function div(const vector&); function div(const vector&, const vector&); function div(const vector&, number); function dotproduct(const vector&) const; function getH() const; function min(const vector&); function min(const vector&, const vector&); function similar(const vector&, number) const; function distance_to(const vector&) const; function lerp(const vector&, const vector&, number); function distance_to_sqr(const vector&) const; function mul(number); function mul(const vector&); function mul(const vector&, const vector&); function mul(const vector&, number); function setHP(number, number); function add(number); function add(const vector&); function add(const vector&, const vector&); function add(const vector&, number); Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Поделиться этим сообщением Ссылка на сообщение