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

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


Halford

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

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       х    х    х

 

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

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

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

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

malandrinus

А как технически перевести объект из онлайна в оффлайн и обратно? Как-то уже интересовался этим вопросом, но ответа так и не нашел.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

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

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

Scorpioser

Ты, наверное, имел ввиду из Зенобиана? С рамочками и переменным зумом?

Без ковыряния в движке - увы, никак. Даже для стрельбы одиночными пришлось лезть в движок и дать биноклю возможность стрелять. Как именно это сделали, и почему разрешили стрельбу только одиночными, сможет сказать разве что автор этой правки движка. Может, ради баланса, а может, в принципе очереди невозможны.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


Ссылка на сообщение
Скажите, пожалуйста, как выдать инфопоршин сразу после открытия двери. Делаю вот так ничего не получается:

 

Попробуй в секции, где дверь уже открыта:

 

[ph_door@open]

locked = false

closed = false

on_info = {-info} %+info%

on_use = ph_door@close

 

По идее, если дверь открыта, а инфопрошня еще нет, он и выдается.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

Скажем, идет дождь и новость "Мда... Ояпть идет дождь... И так каждый день. Опять придется по лужам шлепать"

 

Буквально вчера разбирался, как считать данные из погодного конфига. Вот результат:

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

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

 

 

А в АМК с динамической погодой сработает?

 

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

 

P.S. Извиняюсь за количество цитат, но без них непонятно, к чему все это...

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

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

fokstar

Звук можно проиграть, непример, так:

 

if условие then

play_sound([[characters_voice\human_02\freedom\fight\attack\attack_2]])

end

 

В двойных квадратных скобках пишется путь к звуковому файлу относительно папки sounds.

 

 

 

 

Такой вопрос: в каком скрипте описывается инвентарь ГГ?

Про главное меню известно - ui_main_menu.script, что хочешь, то и делай - хоть на клаву команду выводи, хоть кликабельную кнопку делай. А с инвентарем ничего похожего не нашел, а кнопку одну добавить ну очень нужно.

Или есть другой путь?

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

Создаешь свой скриптовый файл в папке 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

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

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

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

Отключение монолога Сидоровича:

В файле 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

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

IQDDD

Вылет с жалобой на "attempt to index global 'ХХХ' (a nil value)", где ХХХ - имя скрипт-файла у меня чаще всего (чтобы не сказать всегда) бывает из-за синтаксических ошибок. Скобку там забыл закрыть, end какой-нибудь забыл прописать, в if...then вместо "==" поставил "=" или что-то вроде этого.

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

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

wolkolak

Попробуй вместо self.npc:eat(self.npc:object("medkit")) написать self.npc.health = self.npc.health + N, где N - прирост здоровья.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

Возникла пара вопросов по таблицам.

 

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

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

cc31

Используй ACDC, xrspawner половину параметров не возьмет.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

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

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

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

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

В конфигах аномалий половина параметров не работает, что есть, то есть. Но при увеличении параметров "min_artefact_count" и "max_artefact_count" скажем, на 1 и 3 соответственно (может, еще что-то надо править, я тогда хорошенько в конфигах поковырялся, все не упомню), Кордон уже при старте новой игры завален "медузами", иногда попадаются и "каменные цветки". Насчет возобновляемости артов точно не знаю, либо уходил с Кордона, не собирая все подчистую (а иначе в глаза не бросится, уж слишком много артов), либо терпения не хватало дождаться смены суток. Настроить спавн на разумное количество не вышло, так что я особо и не заморачивался.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


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

Народ, кто-нибудь разбирался с работой с векторами? В 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

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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


Ссылка на сообщение
  • Недавно просматривали   1 пользователь

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