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

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

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

Не получается прописать болт в прадажу. Обьясните по чему. Прописывал бороде

[trader]

buy_condition = {+zat_b30_sultan_loose} buy_tier_2, trade_generic_buy

sell_condition = trade_generic_sell

buy_supplies = {=wealthy_functor +zat_b30_sultan_loose} supplies_tier_4, {=wealthy_functor +zat_b29_exclusive_conditions} supplies_tier_3, {+zat_b30_sultan_loose} supplies_tier_3, {+zat_b29_exclusive_conditions} supplies_tier_2, supplies_start

 

[trade_generic_buy]

;Артефакты

af_cristall = 1, 0.6

af_fireball = 1, 0.6

af_dummy_glassbeads = 1, 0.6

af_eye = 1, 0.6

af_fire = 1, 0.6

af_medusa = 1, 0.6

af_cristall_flower = 1, 0.6

af_night_star = 1, 0.6

af_vyvert = 1, 0.6

af_gravi = 1, 0.6

af_gold_fish = 1, 0.6

af_blood = 1, 0.6

af_mincer_meat = 1, 0.6

af_soul = 1, 0.6

af_fuzz_kolobok = 1, 0.6

af_baloon = 1, 0.6

af_glass = 1, 0.6

af_electra_sparkler = 1, 0.6

af_electra_flash = 1, 0.6

af_electra_moonlight = 1, 0.6

af_dummy_battery = 1, 0.6

af_dummy_dummy = 1, 0.6

af_ice = 1, 0.6

 

;Аммуниция

ammo_9x18_fmj ;NO TRADE

ammo_9x18_pmm ;NO TRADE

ammo_9x19_pbp ;NO TRADE

ammo_9x19_fmj ;NO TRADE

ammo_11.43x23_hydro ;NO TRADE

ammo_11.43x23_fmj ;NO TRADE

ammo_12x70_buck ;NO TRADE

ammo_12x76_zhekan ;NO TRADE

ammo_5.45x39_ap ;NO TRADE

ammo_5.45x39_fmj ;NO TRADE

ammo_9x39_ap ;NO TRADE

ammo_9x39_pab9 ;NO TRADE

ammo_5.56x45_ss190 ;NO TRADE

ammo_5.56x45_ap ;NO TRADE

ammo_7.62x54_7h1 ;NO TRADE

ammo_og-7b ;NO TRADE

ammo_vog-25 ;NO TRADE

grenade_f1 ;NO TRADE

grenade_rgd5 ;NO TRADE

ammo_m209 ;NO TRADE

ammo_pkm_100 ;NO TRADE

 

;Оружие

wpn_pm ;NO TRADE

wpn_pb ;NO TRADE

wpn_fort ;NO TRADE

wpn_hpsa ;NO TRADE

wpn_beretta ;NO TRADE

wpn_walther ;NO TRADE

wpn_sig220 ;NO TRADE

wpn_colt1911 ;NO TRADE

wpn_usp ;NO TRADE

wpn_desert_eagle ;NO TRADE

wpn_bm16 ;NO TRADE

wpn_toz34 ;NO TRADE

wpn_wincheaster1300 ;NO TRADE

wpn_spas12 ;NO TRADE

wpn_protecta ;NO TRADE

wpn_ak74u ;NO TRADE

wpn_mp5 ;NO TRADE

wpn_ak74 ;NO TRADE

wpn_abakan ;NO TRADE

wpn_l85 ;NO TRADE

wpn_lr300 ;NO TRADE

wpn_sig550 ;NO TRADE

wpn_groza ;NO TRADE

wpn_val ;NO TRADE

wpn_vintorez ;NO TRADE

wpn_svu ;NO TRADE

wpn_svd ;NO TRADE

wpn_rg-6 ;NO TRADE

wpn_rpg7 ;NO TRADE

wpn_g36 ;NO TRADE

wpn_fn2000 ;NO TRADE

wpn_pkm ;NO TRADE

 

 

;ADDONS

wpn_addon_scope ;NO TRADE

wpn_addon_scope_x2.7 ;NO TRADE

wpn_addon_scope_detector ;NO TRADE

wpn_addon_scope_night ;NO TRADE

wpn_addon_scope_susat ;NO TRADE

wpn_addon_scope_susat_x1.6 ;NO TRADE

wpn_addon_scope_susat_custom ;NO TRADE

wpn_addon_scope_susat_dusk ;NO TRADE

wpn_addon_scope_susat_night ;NO TRADE

wpn_addon_silencer ;NO TRADE

wpn_addon_grenade_launcher ;NO TRADE

wpn_addon_grenade_launcher_m203 ;NO TRADE

 

;Броники

novice_outfit ;NO TRADE

specops_outfit ;NO TRADE

military_outfit ;NO TRADE

stalker_outfit ;NO TRADE

scientific_outfit ;NO TRADE

exo_outfit ;NO TRADE

svoboda_light_outfit ;NO TRADE

svoboda_heavy_outfit ;NO TRADE

cs_heavy_outfit ;NO TRADE

dolg_outfit ;NO TRADE

dolg_heavy_outfit ;NO TRADE

 

;Шлемы

helm_respirator ;NO TRADE

helm_hardhat ;NO TRADE

helm_protective ;NO TRADE

helm_tactic ;NO TRADE

helm_battle ;NO TRADE

 

;Медикаменты

bandage ;NO TRADE

medkit ;NO TRADE

medkit_scientic ;NO TRADE

medkit_army ;NO TRADE

antirad ;NO TRADE

 

;Бустеры

drug_booster ;NO TRADE

drug_coagulant ;NO TRADE

drug_psy_blockade ;NO TRADE

drug_antidot ;NO TRADE

drug_radioprotector ;NO TRADE

drug_anabiotic ;NO TRADE

 

;Еда

bread = 0.6, 0.3

kolbasa = 0.6, 0.3

conserva = 0.6, 0.3

vodka = 0.6, 0.3

energy_drink = 0.6, 0.3

 

;Предметы

device_torch ;NO TRADE

detector_simple ;NO TRADE

detector_advanced ;NO TRADE

detector_elite ;NO TRADE

detector_scientific ;NO TRADE

device_pda ;NO TRADE

hand_radio ;NO TRADE

guitar_a ;NO TRADE

harmonica_a ;NO TRADE

anomaly_scaner ;NO TRADE

bolt = 0.7, 0.7

 

;Квестовые предметы

jup_a9_conservation_info ;NO TRADE

jup_a9_power_info ;NO TRADE

jup_a9_way_info ;NO TRADE

jup_a9_evacuation_info ;NO TRADE

jup_a9_meeting_info ;NO TRADE

jup_a9_losses_info ;NO TRADE

jup_a9_delivery_info ;NO TRADE

jup_b10_ufo_memory ;NO TRADE

jup_b10_ufo_memory_2 ;NO TRADE

jup_b10_notes_01 ;NO TRADE

jup_b10_notes_02 ;NO TRADE

jup_b10_notes_03 ;NO TRADE

jup_b205_sokolov_note ;NO TRADE

jup_b206_plant ;NO TRADE

jup_b209_monster_scanner ;NO TRADE

jup_b200_tech_materials_wire ;NO TRADE

jup_b200_tech_materials_acetone ;NO TRADE

jup_b200_tech_materials_textolite ;NO TRADE

jup_b200_tech_materials_transistor ;NO TRADE

jup_b200_tech_materials_capacitor ;NO TRADE

jup_b9_blackbox ;NO TRADE

jup_b32_scanner_device ;NO TRADE

jup_b46_duty_founder_pda ;NO TRADE

jup_b207_merc_pda_with_contract ;NO TRADE

jup_b47_jupiter_products_info ;NO TRADE

toolkit_2 ;NO TRADE

toolkit_1 ;NO TRADE

zat_b33_safe_container ;NO TRADE

zat_b57_gas ;NO TRADE

zat_b12_key_1 ;NO TRADE

zat_b12_key_2 ;NO TRADE

zat_b12_documents_1 ;NO TRADE

zat_b12_documents_2 ;NO TRADE

device_pda_port_bandit_leader ;NO TRADE

device_flash_snag ;NO TRADE

jup_b202_bandit_pda ;NO TRADE

zat_b40_notebook ;NO TRADE

zat_b40_pda_1 ;NO TRADE

zat_b40_pda_2 ;NO TRADE

device_pda_zat_b5_dealer ;NO TRADE

zat_b20_noah_pda ;NO TRADE

zat_a23_access_card ;NO TRADE

zat_a23_gauss_rifle_docs ;NO TRADE

zat_b44_barge_pda ;NO TRADE

zat_b39_joker_pda ;NO TRADE

zat_b22_medic_pda ;NO TRADE

toolkit_3 ;NO TRADE

pri_b35_lab_x8_key ;NO TRADE

pri_b306_envoy_pda ;NO TRADE

pri_b36_monolith_hiding_place_pda ;NO TRADE

pri_a25_explosive_charge_item ;NO TRADE

pri_a19_american_experiment_info ;NO TRADE

pri_a19_lab_x16_info ;NO TRADE

pri_a19_lab_x10_info ;NO TRADE

pri_a19_lab_x7_info ;NO TRADE

pri_a19_lab_x18_info ;NO TRADE

zat_a23_labx8_key ;NO TRADE

lx8_service_instruction ;NO TRADE

af_compass ;NO TRADE

af_oasis_heart ;NO TRADE

jup_b1_half_artifact ;NO TRADE

af_quest_b14_twisted ;NO TRADE

 

;Уникальные предметы

wpn_pm_actor ;NO TRADE

wpn_sig550_luckygun ;NO TRADE

wpn_pkm_zulus ;NO TRADE

wpn_wincheaster1300_trapper ;NO TRADE

wpn_desert_eagle_nimble ;NO TRADE

wpn_groza_nimble ;NO TRADE

wpn_mp5_nimble ;NO TRADE

wpn_sig220_nimble ;NO TRADE

wpn_spas12_nimble ;NO TRADE

wpn_svd_nimble ;NO TRADE

wpn_svu_nimble ;NO TRADE

wpn_usp_nimble ;NO TRADE

wpn_vintorez_nimble ;NO TRADE

wpn_g36_nimble ;NO TRADE

wpn_fn2000_nimble ;NO TRADE

wpn_protecta_nimble ;NO TRADE

stalker_outfit_barge ;NO TRADE

helm_respirator_joker ;NO TRADE

helm_hardhat_snag ;NO TRADE

wpn_ak74u_snag ;NO TRADE

wpn_fort_snag ;NO TRADE

 

[buy_tier_2]:trade_generic_buy

;Артефакты

af_cristall = 1.2, 0.6

af_fireball = 1.2, 0.6

af_dummy_glassbeads = 1.2, 0.6

af_eye = 1.2, 0.6

af_fire = 1.2, 0.6

af_medusa = 1.2, 0.6

af_cristall_flower = 1.2, 0.6

af_night_star = 1.2, 0.6

af_vyvert = 1.2, 0.6

af_gravi = 1.2, 0.6

af_gold_fish = 1.2, 0.6

af_blood = 1.2, 0.6

af_mincer_meat = 1.2, 0.6

af_soul = 1.2, 0.6

af_fuzz_kolobok = 1.2, 0.6

af_baloon = 1.2, 0.6

af_glass = 1.2, 0.6

af_electra_sparkler = 1.2, 0.6

af_electra_flash = 1.2, 0.6

af_electra_moonlight = 1.2, 0.6

af_dummy_battery = 1.2, 0.6

af_dummy_dummy = 1.2, 0.6

af_ice = 1.2, 0.6

 

 

[trade_generic_sell]

;Артефакты

af_cristall = 1.2, 2

af_fireball = 1.2, 2

af_dummy_glassbeads = 1.2, 2

af_eye ;NO TRADE

af_fire ;NO TRADE

af_medusa = 1.2, 2

af_cristall_flower = 1.2, 2

af_night_star = 1.2, 2

af_vyvert = 1.2, 2

af_gravi ;NO TRADE

af_gold_fish ;NO TRADE

af_blood = 1.2, 2

af_mincer_meat = 1.2, 2

af_soul = 1.2, 2

af_fuzz_kolobok = 1.2, 2

af_baloon ;NO TRADE

af_glass ;NO TRADE

af_electra_sparkler = 1.2, 2

af_electra_flash = 1.2, 2

af_electra_moonlight = 1.2, 2

af_dummy_battery = 1.2, 2

af_dummy_dummy ;NO TRADE

af_ice ;NO TRADE

 

;Аммуниция

ammo_9x18_fmj ;NO TRADE

ammo_9x18_pmm ;NO TRADE

ammo_9x19_pbp ;NO TRADE

ammo_9x19_fmj ;NO TRADE

ammo_11.43x23_hydro ;NO TRADE

ammo_11.43x23_fmj ;NO TRADE

ammo_12x70_buck ;NO TRADE

ammo_12x76_zhekan ;NO TRADE

ammo_5.45x39_ap ;NO TRADE

ammo_5.45x39_fmj ;NO TRADE

ammo_9x39_ap ;NO TRADE

ammo_9x39_pab9 ;NO TRADE

ammo_5.56x45_ss190 ;NO TRADE

ammo_5.56x45_ap ;NO TRADE

ammo_7.62x54_7h1 ;NO TRADE

ammo_og-7b ;NO TRADE

ammo_vog-25 ;NO TRADE

grenade_f1 ;NO TRADE

grenade_rgd5 ;NO TRADE

ammo_m209 ;NO TRADE

ammo_gauss ;NO TRADE

ammo_gauss_cardan ;NO TRADE

 

;Оружие

wpn_pm ;NO TRADE

wpn_pb ;NO TRADE

wpn_fort ;NO TRADE

wpn_hpsa ;NO TRADE

wpn_beretta ;NO TRADE

wpn_walther ;NO TRADE

wpn_sig220 ;NO TRADE

wpn_colt1911 ;NO TRADE

wpn_usp ;NO TRADE

wpn_desert_eagle ;NO TRADE

wpn_bm16 ;NO TRADE

wpn_toz34 ;NO TRADE

wpn_wincheaster1300 ;NO TRADE

wpn_spas12 ;NO TRADE

wpn_protecta ;NO TRADE

wpn_ak74u ;NO TRADE

wpn_mp5 ;NO TRADE

wpn_ak74 ;NO TRADE

wpn_abakan ;NO TRADE

wpn_l85 ;NO TRADE

wpn_lr300 ;NO TRADE

wpn_sig550 ;NO TRADE

wpn_groza ;NO TRADE

wpn_val ;NO TRADE

wpn_vintorez ;NO TRADE

wpn_svu ;NO TRADE

wpn_svd ;NO TRADE

wpn_rg-6 ;NO TRADE

wpn_rpg7 ;NO TRADE

wpn_g36 ;NO TRADE

wpn_fn2000 ;NO TRADE

 

;ADDONS

wpn_addon_scope ;NO TRADE

wpn_addon_scope_x2.7 ;NO TRADE

wpn_addon_scope_detector ;NO TRADE

wpn_addon_scope_night ;NO TRADE

wpn_addon_scope_susat ;NO TRADE

wpn_addon_scope_susat_x1.6 ;NO TRADE

wpn_addon_scope_susat_custom ;NO TRADE

wpn_addon_scope_susat_dusk ;NO TRADE

wpn_addon_scope_susat_night ;NO TRADE

wpn_addon_silencer ;NO TRADE

wpn_addon_grenade_launcher ;NO TRADE

wpn_addon_grenade_launcher_m203 ;NO TRADE

 

;Броники

novice_outfit ;NO TRADE

specops_outfit ;NO TRADE

military_outfit ;NO TRADE

stalker_outfit ;NO TRADE

scientific_outfit ;NO TRADE

exo_outfit ;NO TRADE

svoboda_light_outfit ;NO TRADE

svoboda_heavy_outfit ;NO TRADE

cs_heavy_outfit ;NO TRADE

dolg_outfit ;NO TRADE

dolg_heavy_outfit ;NO TRADE

 

;Шлемы

helm_respirator ;NO TRADE

helm_hardhat ;NO TRADE

helm_protective ;NO TRADE

helm_tactic ;NO TRADE

helm_battle ;NO TRADE

 

;Медикаменты

bandage ;NO TRADE

medkit ;NO TRADE

medkit_scientic ;NO TRADE

medkit_army ;NO TRADE

antirad ;NO TRADE

 

;Бустеры

drug_booster ;NO TRADE

drug_coagulant ;NO TRADE

drug_psy_blockade ;NO TRADE

drug_antidot ;NO TRADE

drug_radioprotector ;NO TRADE

drug_anabiotic ;NO TRADE

 

;Еда

bread = 1, 2

kolbasa = 1, 2

conserva = 1, 2

vodka = 1, 2

energy_drink = 1, 2

 

;Предметы

device_torch ;NO TRADE

detector_simple ;NO TRADE

detector_advanced ;NO TRADE

detector_elite ;NO TRADE

detector_scientific ;NO TRADE

device_pda ;NO TRADE

guitar_a ;NO TRADE

harmonica_a ;NO TRADE

anomaly_scaner ;NO TRADE

bolt = 1.7, 2.2

 

;Квестовые предметы

jup_a9_conservation_info ;NO TRADE

jup_a9_power_info ;NO TRADE

jup_a9_way_info ;NO TRADE

jup_a9_evacuation_info ;NO TRADE

jup_a9_meeting_info ;NO TRADE

jup_a9_losses_info ;NO TRADE

jup_a9_delivery_info ;NO TRADE

jup_b10_ufo_memory ;NO TRADE

jup_b10_ufo_memory_2 ;NO TRADE

jup_b10_notes_01 ;NO TRADE

jup_b10_notes_02 ;NO TRADE

jup_b10_notes_03 ;NO TRADE

jup_b205_sokolov_note ;NO TRADE

jup_b206_plant ;NO TRADE

jup_b209_monster_scanner ;NO TRADE

jup_b200_tech_materials_wire ;NO TRADE

jup_b200_tech_materials_acetone ;NO TRADE

jup_b200_tech_materials_textolite ;NO TRADE

jup_b200_tech_materials_transistor ;NO TRADE

jup_b200_tech_materials_capacitor ;NO TRADE

jup_b9_blackbox ;NO TRADE

jup_b32_scanner_device ;NO TRADE

jup_b46_duty_founder_pda ;NO TRADE

jup_b207_merc_pda_with_contract ;NO TRADE

jup_b47_jupiter_products_info ;NO TRADE

toolkit_2 ;NO TRADE

toolkit_1 ;NO TRADE

zat_b33_safe_container ;NO TRADE

zat_b57_gas ;NO TRADE

zat_b12_key_1 ;NO TRADE

zat_b12_key_2 ;NO TRADE

zat_b12_documents_1 ;NO TRADE

zat_b12_documents_2 ;NO TRADE

device_pda_port_bandit_leader ;NO TRADE

device_flash_snag ;NO TRADE

jup_b202_bandit_pda ;NO TRADE

zat_b40_notebook ;NO TRADE

zat_b40_pda_1 ;NO TRADE

zat_b40_pda_2 ;NO TRADE

device_pda_zat_b5_dealer ;NO TRADE

zat_b20_noah_pda ;NO TRADE

zat_a23_access_card ;NO TRADE

zat_a23_gauss_rifle_docs ;NO TRADE

zat_b44_barge_pda ;NO TRADE

zat_b39_joker_pda ;NO TRADE

zat_b22_medic_pda ;NO TRADE

toolkit_3 ;NO TRADE

pri_b35_lab_x8_key ;NO TRADE

pri_b306_envoy_pda ;NO TRADE

pri_b36_monolith_hiding_place_pda ;NO TRADE

pri_a25_explosive_charge_item ;NO TRADE

pri_a19_american_experiment_info ;NO TRADE

pri_a19_lab_x16_info ;NO TRADE

pri_a19_lab_x10_info ;NO TRADE

pri_a19_lab_x7_info ;NO TRADE

pri_a19_lab_x18_info ;NO TRADE

zat_a23_labx8_key ;NO TRADE

lx8_service_instruction ;NO TRADE

af_compass ;NO TRADE

af_oasis_heart ;NO TRADE

jup_b1_half_artifact ;NO TRADE

af_quest_b14_twisted ;NO TRADE

 

;Уникальные предметы

 

[supplies_start]

;Еда

bread = 15, 0.8

kolbasa = 15, 0.8

conserva = 15, 0.8

vodka = 15, 0.8

energy_drink = 15, 0.8

bolt = 15, 0.8

 

[supplies_tier_2]:supplies_start

af_cristall = 1, 0.4

af_dummy_glassbeads = 1, 0.4

af_medusa = 1, 0.4

af_cristall_flower = 1, 0.4

af_night_star = 1, 0.4

af_blood = 1, 0.4

af_soul = 1, 0.4

af_fuzz_kolobok = 1, 0.4

af_electra_sparkler = 1, 0.4

 

[supplies_tier_3]:supplies_start

af_cristall = 2, 0.4

af_dummy_glassbeads = 2, 0.4

af_medusa = 2, 0.4

af_cristall_flower = 2, 0.4

af_night_star = 2, 0.4

af_blood = 2, 0.4

af_soul = 2, 0.4

af_fuzz_kolobok = 2, 0.4

af_electra_sparkler = 2, 0.4

af_fireball = 1, 0.4

af_vyvert = 1, 0.4

af_mincer_meat = 1, 0.4

af_electra_flash = 1, 0.4

af_electra_moonlight = 1, 0.4

af_dummy_battery = 1, 0.4

 

[supplies_tier_4]:supplies_start

af_cristall = 3, 0.4

af_dummy_glassbeads = 3, 0.4

af_medusa = 3, 0.4

af_cristall_flower = 3, 0.4

af_night_star = 3, 0.4

af_blood = 3, 0.4

af_soul = 3, 0.4

af_fuzz_kolobok = 3, 0.4

af_electra_sparkler = 3, 0.4

af_fireball = 2, 0.4

af_vyvert = 2, 0.4

af_mincer_meat = 2, 0.4

af_electra_flash = 2, 0.4

af_electra_moonlight = 2, 0.4

af_dummy_battery = 2, 0.4

 

 

Cтрока в конфиге оружия:

scope_zoom_factor = 90 степень приближения худа при прицеливании -чем больше

значение -тем меньше зум.

 

[ЯР], Покажи как. В ЛС. Ок?

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

Небольшой вопрос. Смотрите,я хочу к ОНС прикрутить Death Zone. Как я понял,чтобы прикрутить только погоду,надо просто перенести из DZ папку weathers. Правильно? А то я просто накатил поверх,но у некоторых вылета при накатывании,вот я и хочу разобраться.

Мой ник читается гузерус.
Ссылка на комментарий

[ЯР] - точность так же как в ТЧ - раздел дисперсии, угловых разбросов и отдачи в конфиге оружия. Зум - то же самое - строку "зум_фактор" никто не отменял.

Игорь:

1. У болта класс "болт".

2. У него в конфиге может быть запрет к видимости в инвентаре.

3. Скорее всего неправильно прописал. Или он уже прописан как запрещенный к продаже.

З.Ы. Конфиги болта не смотрел, и твой спойлер тоже (ты бы еще пару файлов туда вставил бы ;) ) не охота искать строки с болтом. Ты бы их выделил чтоль...

 

Гузерус - смотри на предмет пересекающихся файлов и совмещай их ручками в блокноте. Если пересекающихся файлов по погоде нет - по идее вылетов быть не должно. Проверить можно только путем эксперимента.


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

Доброго времени. Камрады, пожалуйста выложите дефолтный xr_kamp.script из распакованого ЗП.

Спасибо.

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

----------------------------------------------------------------------------------------------------------------------

-- Схема лагерь. Чудак(и) у костра.

-- автор: Диденко Руслан (Stohe)

-- TODO:

----------------------------------------------------------------------------------------------------------------------

--function printf()

--end

 

kamps = {}

kamp_stalkers = {} -- могут ли сталкеры в лагере юзаться игроком.

-- Объявления итераторов

local k,v,kk,vv = 0,0,0,0

---------------------------------------------------------------------------------------------------------------------

--Evaluators

----------------------------------------------------------------------------------------------------------------------

--' Условие завершения скрипта

class "evaluator_kamp_end" (property_evaluator)

function evaluator_kamp_end:__init(name, storage) super (nil, name)

self.a = storage

end

function evaluator_kamp_end:evaluate()

return not xr_logic.is_active(self.object, self.a)

end

--' Находимся ли мы на заданной позиции

class "evaluator_on_position" (property_evaluator)

function evaluator_on_position:__init(name, storage) super (nil, name)

self.a = storage

end

function evaluator_on_position:evaluate()

if self.object:level_vertex_id() == self.a.pos_vertex then

return true

end

return false

end

----------------------------------------------------------------------------------------------------------------------

--Actions

----------------------------------------------------------------------------------------------------------------------

--' Идет в заданную область

class "action_go_position" (action_base)

function action_go_position:__init (npc_name,action_name,storage) super (nil,action_name)

self.a = storage

end

function action_go_position:initialize()

action_base.initialize(self)

-- self.object:set_node_evaluator()

-- self.object:set_path_evaluator()

self.object:set_desired_position()

self.object:set_desired_direction()

 

self.a.pos_vertex = nil

self.a.npc_position_num = nil

self.a.signals = {}

end

function action_go_position:execute ()

action_base.execute (self)

 

-- Спрашиваем где сидеть

local tmp_pos_vertex, npc_position_num = kamps[self.a.center_point]:getDestVertex(self.object, self.a.radius)

if self.a.npc_position_num ~= npc_position_num then

self.a.npc_position_num = npc_position_num

self.a.pos_vertex = tmp_pos_vertex

 

--' Определяем куда смотреть.

self.a.pp = patrol(self.a.center_point):point(0)

 

local dir = vector():set(math.random(-1,1), 0, math.random(-1,1))

dir:normalize()

 

local delta_dist = math.random(0,0.5)

self.a.pp.x = self.a.pp.x + dir.x * delta_dist

self.a.pp.z = self.a.pp.z + dir.z * delta_dist

 

 

 

self.object:set_dest_level_vertex_id(self.a.pos_vertex)

--printf("vertex_position")

local desired_direction = vector():sub(self.a.pp,level.vertex_position(self.a.pos_vertex))

--printf("desired_direction = %s", vec_to_str(desired_direction))

if desired_direction ~= nil and not utils.vector_cmp(desired_direction, vector():set(0,0,0)) then

desired_direction:normalize()

self.object:set_desired_direction(desired_direction)

end

self.object:set_path_type(game_object.level_path)

state_mgr.set_state(self.object, self.a.def_state_moving)

end

end

function action_go_position:finalize ()

action_base.finalize (self)

end

 

--' Просто сидит и втыкает

class "action_wait" (action_base)

function action_wait:__init (npc_name,action_name,storage) super (nil,action_name)

self.a = storage

end

function action_wait:initialize()

action_base.initialize(self)

-- self.object:set_node_evaluator()

-- self.object:set_path_evaluator()

self.object:set_desired_position()

self.object:set_desired_direction()

 

kamps[self.a.center_point]:increasePops(self.object)

end

function action_wait:activate_scheme()

self.a.signals = {}

end

function action_wait:execute()

action_base.execute (self)

 

--' повернуть его лицом к центру

state_mgr.set_state(self.object, "sit", nil, nil, {look_position = self.a.pp})

end

function action_wait:finalize()

kamps[self.a.center_point]:decreasePops(self.object)

action_base.finalize (self)

end

function action_wait:deactivate(npc)

kamps[self.a.center_point]:removeNpc(npc)

end

function action_wait:death_callback(npc)

kamps[self.a.center_point]:removeNpc(npc)

end

function action_wait:net_destroy(npc)

kamps[self.a.center_point]:removeNpc(npc)

end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

class "CKampManager"

function CKampManager:__init(path)

self.kamp_name = path

self.patrol = patrol(path)

--self.center = self.patrol:level_vertex_id(0)

self.position = {{dir = vector():set(1, 0, 0), used = nil},

{dir = vector():set(1, 0, 1), used = nil},

{dir = vector():set(0, 0, 1), used = nil},

{dir = vector():set(-1, 0, 1), used = nil},

{dir = vector():set(-1, 0, 0), used = nil},

{dir = vector():set(-1, 0, -1),used = nil},

{dir = vector():set(0, 0, -1), used = nil},

{dir = vector():set(1, 0, -1), used = nil}}

self.npc = {}

self.population = 0

self.kamp_state = "idle"

-- Где то здесь распарсим патрульный путь и проапдейтим вектор позиций.

-- 0 вершина - центр лагеря.

-- 1 флаг - сектор занят, в поинте можно сидеть.

-- 2 флаг - сектор занят, в поинте нельзя сидеть.

--[[

for k = 1, self.patrol:count() - 1 do

-- если есть 1 или 2 флажок - отметить сектор как занятый

if self.patrol:flag(k,1) or

self.patrol:flag(k,2)

then

-- отметить сектор как занятый

for key,value in pairs(self.position) do

dir = vector():sub(level.vertex_position(self.patrol:level_vertex_id(k)), level.vertex_position(self.center))

if value.dir then

yaw = yaw_degree(dir, value.dir)

if yaw <=23 then

--'printf("KAMP node[%s], sector[%s,] yaw[%s]", k, key, yaw_degree(dir, value.dir))

value.used = -1

break

end

end

end

 

end

 

-- если есть 1 флажок - создать место для сидения в точке пути

if self.patrol:flag(k,1) then

-- создать точку для сидения

table.insert(self.position, {vertex = self.patrol:level_vertex_id(k)})

end

end

]]

--print_table(self.position)

--Таблица соответствий состояния лагеря и допустимых анимаций и звуков.

self.avail_state = {idle = { directed = { "wait", "sit", "sit_ass", "sit_knee", "eat_kolbasa", "eat_vodka", "eat_energy", "eat_bread", "trans"}},

pre_harmonica = { directed = { "wait_harmonica"},

undirected = { "wait", "sit", "sit_ass", "sit_knee", "eat_kolbasa", "eat_vodka", "eat_energy", "eat_bread", "trans"}},

harmonica = { directed = { "play_harmonica"},

undirected = { "wait", "sit", "sit_ass", "sit_knee", "eat_kolbasa", "eat_vodka", "eat_energy", "eat_bread", "trans"}},

post_harmonica = { directed = { "wait_harmonica"},

undirected = { "wait", "sit", "sit_ass", "sit_knee", "eat_kolbasa", "eat_vodka", "eat_energy", "eat_bread", "trans"}},

pre_guitar = { directed = { "wait_guitar"},

undirected = { "wait", "sit", "sit_ass", "sit_knee", "eat_kolbasa", "eat_vodka", "eat_energy", "eat_bread", "trans"}},

guitar = { directed = { "play_guitar"},

undirected = { "wait", "sit", "sit_ass", "sit_knee", "eat_kolbasa", "eat_vodka", "eat_energy", "eat_bread", "trans"}},

post_guitar = { directed = { "wait_guitar"},

undirected = { "wait", "sit", "sit_ass", "sit_knee", "eat_kolbasa", "eat_vodka", "eat_energy", "eat_bread", "trans"}},

story = { directed = { "declarate"},

undirected = { "wait", "sit", "sit_ass", "sit_knee", "eat_kolbasa", "eat_vodka", "eat_energy", "eat_bread", "trans"}}}

 

self.avail_sound = {idle = { directed = "idle"},

pre_harmonica = { directed = "pre_harmonica", undirected = ""},

harmonica = { directed = "", undirected = ""},

post_harmonica = { directed = "", undirected = "reac_harmonica"},

pre_guitar = { directed = "pre_guitar", undirected = ""},

guitar = { directed = "", undirected = ""},

post_guitar = { directed = "", undirected = "reac_guitar"},

story = { directed = "", undirected = ""}}

 

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

self.timeout = {idle = { min = 30000 },

pre_harmonica = { min = 3000 },

harmonica = { min = 5000, soundstart = true },

post_harmonica = { min = 3000 },

pre_guitar = { min = 3000 },

guitar = { min = 5000, soundstart = true },

post_guitar = { min = 3000 },

story = { min = 1000, soundstart = true }}

 

-- Таблица глобальных состояний лагеря.

self.kamp_states = { idle = true,

pre_harmonica = false, harmonica = false, post_harmonica = false,

pre_guitar = false, guitar = false, post_guitar = false,

story = true }

-- Таблица допустимых переходов между состояниями с вероятностями.

self.trans_kamp = { idle = { idle = 0, pre_harmonica = 0, pre_guitar = 50, story = 50},

pre_harmonica = { harmonica = 100 },

harmonica = { post_harmonica = 100 },

post_harmonica = { idle = 70, harmonica = 30 },

pre_guitar = { guitar = 100 },

guitar = { post_guitar = 100 },

post_guitar = { idle = 70, guitar = 30 },

story = { idle = 100 }}

 

-- Хранилище для режиссера лагеря. Режиссерем является сталкер, затеявший необычное поведение

self.director = nil

 

 

--' Для теста создаем объект истории

self.sound_manager = sound_manager.get_sound_manager("kamp_"..path)

end

function CKampManager:selectPosition(npc_id)

-- создаем список доступных позиций

--printf("KAMP. [%s] called select position", npc_id)

local free = {}

for k,v in pairs(self.position) do

if v.used == nil then

table.insert(free, k)

end

end

--' затем из доступных позиций выбрать рандомно одну.

if #free > 0 then

--printf("KAMP [%s] free node > 0", npc_id)

local rr = math.random(#free)

self.position[free[rr]].used = npc_id

self.npc[npc_id].position = free[rr]

end

--printf("KAMP [%s] npc table", npc_id)

--print_table(self.npc)

--printf("KAMP [%s] position table", npc_id)

--print_table(self.position)

end

function CKampManager:getDestVertex(npc, radius)

local npc_id = npc:id()

--printf("get dest Vertex called [%s]", npc_id)

if self.npc[npc_id].position == nil then

--printf("-------debug_info------------- %s", self.kamp_name)

--print_table(self.npc)

--printf("-------debug_info------------- %s", self.kamp_name)

--print_table(self.position)

--printf("-------debug_info------------- %s", self.kamp_name)

abort("get dest Vertex: nil [%s]", npc_id)

return nil

end

 

-- высчитываем вертех по направлению

-- Берем позицию в заданном направлении, затем берем ниарест точку от нее.

 

local pp = self.patrol:point(0)

local dir = self.position[self.npc[npc_id].position].dir

 

-- Считаем рандомное отклонение направления.

dir.x = dir.x + math.random(-1,1)/5

dir.z = dir.z + math.random(-1,1)/5

dir:normalize()

 

radius = radius + math.random(-0.3,0.3)

 

local dest_vertex = 4294967295

 

while dest_vertex == 4294967295 do

local tmp_pos = vector():set(0,0,0)

tmp_pos.x = pp.x + dir.x * radius

tmp_pos.z = pp.z + dir.z * radius

tmp_pos.y = pp.y

dest_vertex = level.vertex_id(tmp_pos)

if dest_vertex == 4294967295 then

if radius < 1 then

abort("Invalid AI map at kamp point [%s]", self.kamp_name)

else

radius = radius - 0.5

end

end

end

 

if not npc:accessible(dest_vertex) then

--printf("vertex_position %s", tostring(dest_vertex))

local vp = level.vertex_position(dest_vertex)

--printf("Nearest for npc[%s] kamp [%s] position [%s:%s:%s]", npc:name(), tostring(self.kamp_name),tostring(vp.x), tostring(vp.y), tostring(vp.z))

local nearest_vertex = npc:accessible_nearest(vp, vector():set(0,0,0))

--printf("Nearest for npc[%s] kamp [%s] position [%s:%s:%s]", npc:name(), tostring(self.kamp_name), vec_to_str(nearest_vertex))

return nearest_vertex, self.npc[npc_id].position

end

 

return dest_vertex, self.npc[npc_id].position

end

function CKampManager:proceedState(npc)

-- Проверка на таймаут

local npc_id = npc:id()

local active_sound_count = npc:active_sound_count()

if self.npc[npc_id].need_sound_begin == true then

if active_sound_count == 0 then

return

else

self.npc[npc_id].need_sound_begin = false

end

end

if self.begin ~= nil and

time_global() - self.begin < self.timeout[self.kamp_state].min

then

return

end

 

--' Если режиссер не закончил говорить - ждем конца фразы.

if active_sound_count > 0 then

return

end

 

--' Если начали говорить какую то историю саунд-менеджера

if not self.sound_manager:is_finished() then

self.sound_manager:update()

return

end

 

--printf("Proceed state for [%s]", npc_id)

-- Определяются допустимые в данный момент переходы.

local temp = {}

local max_rnd = 0

for k,v in pairs(self.trans_kamp[self.kamp_state]) do

-- Определяются допустимые состояния для лагеря.

if self.kamp_states[k] == true then

temp[k] = v

max_rnd = max_rnd + v

end

end

-- Осуществляется рандомный взвешенный переход.

if max_rnd == 0 then

-- Если переходить некуда - переходим в айдл

temp["idle"] = 100

max_rnd = 100

end

local p = math.random(0,max_rnd)

for k,v in pairs(temp) do

p = p - v

if p <= 0 then

--printf("Selected [%s]", k)

if k == "idle" then

self.director = nil

if self.kamp_state ~= "idle" then

self.npc[npc_id].begin = nil

end

elseif k == "story" then

self.sound_manager:set_story("test_story")

self.director = npc_id

self.censor = nil

else

self.npc[npc_id].begin = nil

if self.timeout[k].soundstart == true then

self.npc[npc_id].need_sound_begin = true

end

self.director = npc_id

self.censor = nil

end

self.kamp_state = k

self.begin = time_global()

for kk,vv in pairs(self.npc) do

vv.new = true

end

return

end

end

end

function CKampManager:proceedRole(npc, director)

--printf("Proceed Role for [%s]", npc:id())

-- Определить список доступных анимаций по состоянию лагеря.

-- определить список доступных анимаций по наличию предметов

-- выбрать одну из них (то же самое со звуком).

local states = 0

local sound = ""

local state = ""

local npc_id = npc:id()

-- Выбирать новое состояние только раз в какое то время.

if self.npc[npc_id].begin == nil or

time_global() - self.npc[npc_id].begin >= self.npc[npc_id].state_idle

then

if director then

states = self.avail_state[self.kamp_state].directed

else

states = self.avail_state[self.kamp_state].undirected

end

 

--' Выбираем только те анимации, которые может играть НПС.

local temp = {}

for k,v in pairs(states) do

--printf("npc community is [%s]", character_community(npc))

--print_table(self.npc[npc_id].states)

if self.npc[npc_id].states[v] == true then

table.insert(temp, v)

end

end

 

self.npc[npc_id].begin = time_global()

state = temp[math.random(#temp)]

self.npc[npc_id].state_selected = state

self.npc[npc_id].state_idle = math.random(15000,20000)

else

state = self.npc[npc_id].state_selected

end

 

if self.kamp_state == "story" then

sound = ""

else

if director then

sound = self.avail_sound[self.kamp_state].directed

else

sound = self.avail_sound[self.kamp_state].undirected

end

end

--printf("Proceed Role state [%s] sound [%s]", state, sound)

return state, sound

end

function CKampManager:updateNpc(npc)

-- Проверка что сталкер может делать, а что нет.

self:checkNpcAbility(npc)

-- Просим лагерь выбрать текущее состояние. Менять состояние лагеря

-- имеет право только режиссер.

local npc_id = npc:id()

local director = self.director == nil or self.director == npc_id

if director then

self:proceedState(npc)

end

-- Говорим чудаку выбрать себе состояние для текущего состояния лагеря.

local state, sound = self:proceedRole(npc, director)

 

local substate = nil

if state == "wait_harmonica" then

if sound == "pre_harmonica" and self.npc[npc_id].new == true then

xr_sound.set_sound_play(npc:id(), "intro_music")

self.npc[npc_id].new = false

end

state = "harmonica"

xr_kamp.kamp_stalkers[npc_id] = false

elseif state == "play_harmonica" then

state = "harmonica"

substate = 1

xr_kamp.kamp_stalkers[npc_id] = false

elseif state == "wait_guitar" then

if sound == "pre_guitar" and self.npc[npc_id].new == true then

xr_sound.set_sound_play(npc:id(), "intro_music")

self.npc[npc_id].new = false

end

state = "guitar"

xr_kamp.kamp_stalkers[npc_id] = false

elseif state == "play_guitar" then

state = "guitar"

substate = 1

xr_kamp.kamp_stalkers[npc_id] = false

elseif state == "declarate" then

if self.npc[npc_id].new == true then

self.npc[npc_id].new = false

end

 

if character_community(npc) == "monolith" then

local t = math.mod(npc_id, 2)

if t == 0 then

state = "trans_0"

else

state = "trans_1"

end

elseif character_community(npc) == "zombied" then

state = "trans_zombied"

else

local t = math.mod(npc_id, 3)

if t == 0 then

state = "sit"

elseif t == 1 then

state = "sit_ass"

else

state = "sit_knee"

end

end

xr_kamp.kamp_stalkers[npc_id] = false

elseif state == "trans" then

if character_community(npc) == "monolith" then

local t = math.mod(npc_id, 2)

if t == 0 then

state = "trans_0"

else

state = "trans_1"

end

elseif character_community(npc) == "zombied" then

state = "trans_zombied"

end

xr_kamp.kamp_stalkers[npc_id] = false

else

xr_kamp.kamp_stalkers[npc_id] = true

end

 

-- Выбор реальных звуков

if sound == "idle" then

sound = "state"

elseif sound == "reac_guitar" then

sound = "reac_music"

elseif sound == "reac_harmonica" then

sound = "reac_music"

else

sound = ""

end

 

--printf("Proceed Update Npc [%s] sound [%s]", state, sound)

return state, sound, substate

end

function CKampManager:checkNpcAbility(npc)

local npc_id = npc:id()

 

if character_community(npc) ~= "monolith" and

character_community(npc) ~= "zombied"

then

-- есть колбасу

if npc:object("kolbasa") then

self.npc[npc_id].states["eat_kolbasa"] = true

else

self.npc[npc_id].states["eat_kolbasa"] = false

end

-- пить водку

if npc:object("vodka") then

self.npc[npc_id].states["eat_vodka"] = true

else

self.npc[npc_id].states["eat_vodka"] = false

end

-- пить енергитический напиток

if npc:object("energy_drink") then

self.npc[npc_id].states["eat_energy"] = true

else

self.npc[npc_id].states["eat_energy"] = false

end

-- есть хлеб

if npc:object("bread") then

self.npc[npc_id].states["eat_bread"] = true

else

self.npc[npc_id].states["eat_bread"] = false

end

-- играть на гармошке

-- if npc:object("harmonica_a") then

-- self.npc[npc_id].states["play_harmonica"] = true

-- self.npc[npc_id].states["wait_harmonica"] = true

-- self.kamp_states["pre_harmonica"] = true

-- self.kamp_states["harmonica"] = true

-- self.kamp_states["post_harmonica"] = true

-- else

self.npc[npc_id].states["play_harmonica"] = false

self.npc[npc_id].states["wait_harmonica"] = false

self.kamp_states["pre_harmonica"] = false

self.kamp_states["harmonica"] = false

self.kamp_states["post_harmonica"] = false

-- end

-- играть на гитаре

-- if npc:object("guitar_a") then

-- self.npc[npc_id].states["play_guitar"] = true

-- self.npc[npc_id].states["wait_guitar"] = true

-- self.kamp_states["pre_guitar"] = true

-- self.kamp_states["guitar"] = true

-- self.kamp_states["post_guitar"] = true

-- else

self.npc[npc_id].states["play_guitar"] = false

self.npc[npc_id].states["wait_guitar"] = false

self.kamp_states["pre_guitar"] = false

self.kamp_states["guitar"] = false

self.kamp_states["post_guitar"] = false

-- end

end

 

 

end

function CKampManager:addNpc(npc)

--printf("KAMP [%s] add npc", npc:name())

if self.npc[npc:id()] ~= nil then

--printf("NPC is already exist")

return

end

 

if character_community(npc) == "monolith" or

character_community(npc) == "zombied"

then

self.npc[npc:id()] = {name = npc:name(), position = nil, current = nil, speak = 0, states = {

stand_wait = false, sit = false, sit_ass = false, sit_knee = false, declarate = true,

eat_kolbasa = false, eat_vodka = false, eat_energy = false, eat_bread = false, trans = true,

play_harmonica = false, play_guitar = false}}

else

self.npc[npc:id()] = {name = npc:name(), position = nil, current = nil, speak = 0, states = {

stand_wait = true, sit = true, sit_ass = true, sit_knee = true, declarate = true,

eat_kolbasa = false, eat_vodka = false, eat_energy = false, eat_bread = false, trans = false,

play_harmonica = false, play_guitar = false}}

end

self:selectPosition(npc:id())

self.sound_manager:register_npc(npc:id())

end

function CKampManager:removeNpc(npc)

--printf("KAMP [%s] remove npc", npc:name())

-- callstack()

self.sound_manager:unregister_npc(npc:id())

local npc_id = npc:id()

if self.npc[npc_id] ~= nil then

-- Если удаляем режиссера - необходимо форсированно перевести лагерь в идловое состояние.

if self.director == npc_id then

self.director = nil

self.npc[npc_id].begin = nil

self.censor = nil

self.kamp_state = "idle"

self.begin = time_global()

for kk,vv in pairs(self.npc) do

vv.new = true

end

--' xr_sound.set_sound(npc, nil)

stop_play_sound(npc)

end

 

self.position[self.npc[npc_id].position].used = nil

self.npc[npc_id] = nil

end

end

function CKampManager:increasePops(npc)

self.population = self.population + 1

local campfire = bind_campfire.campfire_table[self.kamp_name.."_campfire"]

if self.population > 0 and campfire ~= nil and not campfire:is_on() then

campfire:turn_on()

end

end

function CKampManager:decreasePops(npc)

self.population = self.population - 1

local campfire = bind_campfire.campfire_table[self.kamp_name.."_campfire"]

if self.population < 1 and campfire ~= nil and campfire:is_on() then

campfire:turn_off()

end

end

 

 

 

 

 

 

----------------------------------------------------------------------------------------------------------------------

--Kamp binder

----------------------------------------------------------------------------------------------------------------------

function add_to_binder(object, ini, scheme, section, storage)

local operators = {}

local properties = {}

 

local manager = object:motivation_action_manager()

 

properties["kamp_end"] = xr_evaluators_id.stohe_kamp_base + 1

properties["on_position"] = xr_evaluators_id.stohe_kamp_base + 2

properties["contact"] = xr_evaluators_id.stohe_meet_base + 1

 

operators["go_position"] = xr_actions_id.stohe_kamp_base + 1

operators["wait"] = xr_actions_id.stohe_kamp_base + 3

 

-- Evaluators

manager:add_evaluator (properties["kamp_end"], this.evaluator_kamp_end ("kamp_end", storage, "kamp_end"))

manager:add_evaluator (properties["on_position"], this.evaluator_on_position ("kamp_on_position", storage, "kamp_on_position"))

 

-- Actions

local action = this.action_wait (object:name(),"action_kamp_wait", storage)

action:add_precondition (world_property(stalker_ids.property_alive, true))

action:add_precondition (world_property(stalker_ids.property_danger,false))

action:add_precondition (world_property(stalker_ids.property_enemy, false))

action:add_precondition (world_property(stalker_ids.property_anomaly,false))

xr_motivator.addCommonPrecondition(action)

action:add_precondition (world_property(properties["on_position"], true))

action:add_effect (world_property(properties["kamp_end"], true))

manager:add_action (operators["wait"], action)

xr_logic.subscribe_action_for_events(object, storage, action)

 

action = this.action_go_position (object:name(),"action_go_kamp", storage)

action:add_precondition (world_property(stalker_ids.property_alive, true))

action:add_precondition (world_property(stalker_ids.property_danger,false))

action:add_precondition (world_property(stalker_ids.property_enemy, false))

action:add_precondition (world_property(stalker_ids.property_anomaly,false))

xr_motivator.addCommonPrecondition(action)

action:add_precondition (world_property(properties["on_position"], false))

action:add_effect (world_property(properties["on_position"], true))

manager:add_action (operators["go_position"], action)

 

action = manager:action (xr_actions_id.alife)

action:add_precondition (world_property(properties["kamp_end"], true))

 

end

-- включение лагеря

function set_scheme(npc, ini, scheme, section, gulag_name)

local st = xr_logic.assign_storage_and_bind(npc, ini, scheme, section)

 

st.logic = xr_logic.cfg_get_switch_conditions(ini, section, npc)

 

st.center_point = utils.cfg_get_string(ini, section, "center_point", npc, true, gulag_name)

st.radius = utils.cfg_get_number(ini, section, "radius", npc, false, 2)

 

if kamps[st.center_point] == nil then

kamps[st.center_point] = CKampManager(st.center_point)

end

kamps[st.center_point]:addNpc(npc)

st.pos_vertex = nil

 

st.def_state_moving = utils.cfg_get_string(ini, section, "def_state_moving", npc, false, "", "walk")

end

 

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

Доброго дня - не подскажите где поковырять дабы бандиты при встречи с ГГ в него начинали не стрелять а попробовали бы с начало обшмонать.(Как допустим при выкупе Вано)

Из за зоны алайфа 400 метров постоянная пальба сталкеров и бандитов уже достала. Ставить другом или нейтралом бандитов то же не хочется - это ведь бандиты.

 

И еще как заставить неписей быстрее стрелять (они видят гг, в него целятся но не стреляют)

 

Кстати - обратите внимание, что наконец то в игре начала работать переменная k_air_resistance!!! (раньше работала только на сетевой игре)

По непонятным мне причинам там стоит почти везде 1.5 (должно от 0.4) Из за этого траектория пули чрезвычайно крутая и самая главная что пуля на расстоянии уже в 150 м теряет 70% своей убойности (допустим непись держит по кораусу на расстоянии 200 метров больше 10 пуль из АК, на 50 метров ему хватает трех)

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

Переделывая мед резинку под ЗП сталкнулся с такой фигней. Колбек на использование аптечки из инвентаря уже отработал. Из него поднимаю пересчет аптечек в этом самом инвентаре. Получается, что аптечка ещё там. Т.е было 4, одну использовал, считаю - 4 штуки.... Кто-нить знает, в чем тут дело?

НЛС-6: У каждого своя зона

_______________________________________________________________

Не ищи легких путей и не возвращайся той же дорогой

Ссылка на комментарий
St.Ser, Кстати - обратите внимание, что наконец то в игре начала работать переменная k_air_resistance!!! (раньше работала только на сетевой игре)

Обратили. Как не работала с ТЧ, так и не работает в ЗП(для каждого типа пули).

 

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

Еще одна непонятка с приоритетами у неписей.

1)Поставил себе бандитов врагами - 5000

2)Поставил неписям возможность воевать от 400 метров.

 

Моделирую ситуацию

1)Группа бандитов 3 человека

2)Расстояние 50 метров

3)Открываю по ним огонь

Их реакция!!!

1)Меня они видят

2)В меня они целятся

3)НЕ стреляют!

4)Продолжают идти по своим делам пока я их не перестреляю!!!!

 

Моделирую ситуацию

 

1)Группа сталкеров 3 человека

2)Расстояние 300 метров

3)Открываю огонь на поражение

 

Их реакция.

1)Голос внимание, Скадовск атакован!

2)Все сталкеры в радиусе 400 метров открывают по мне огонь!!!

 

Вопрос - а как бы так сделать чтоб и бандиты так же начали по мне палить?

 

Как бы не настраивал м_сталкер и отношения - бандиты начинают палить по ГГ только с 40 метров!! А если сделать сталкеров и бандитов врагами то друг по другу они палят с 400 метров при моих настройках!!

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

1.По поводу времени.В некоторых скриптах, есть ремарки о том, что"....так как течение времени ускорено в 10 раз,то пользуем такую функцию...".Точно не помню в каком, но есть.

2.По поводу координат.Это положение ГГ на локации?Если да, то на WIKI вполне рабочий скрипт дается.

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

Пытался запустить ЗП с моделью из ТЧ, и при обращении к ней вылетает с ошибкой Aplication is aborting.

Как можно адаптировать модели из ТЧ на ЗП?

Кто сможет подредактировать модели ГГ, напишите пожалуйста мне в ЛС.

Ссылка на комментарий
нету нормальной проги для ЗП для снятия координат с вертексами?

LinK, Position Informer чем не устраивает?

Брал, кажется, на офф. форуме.

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

Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64

Ссылка на комментарий
Fly-n-DiE, конечно. сам архивчик с патчем: S.T.A.L.K.E.R. - Зов Припяти\patches\xpatch_01.db
Ссылка на комментарий

Вопрос: как забацать музон на скадовске и янове аля бар из ТЧ и Болот из ЧН? Тут как я понимаю одними конфигами не обойтись...

Возможно прописать скрипт на вкл музыки в определенных секторах?

Не соответствует. N6260

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

YUran

Это надо править не в actor.ltx а в \configs\weapons\w_.... смотри секцию

[wpn_...._hud]:hud_base

hands_position =

hands_orientation=

 

item_position =

item_orientation =

Но лучше скопировать с оригинального конфига, если он от ЧН, как будет от ТЧ я незнаю.

ЗЫ у меня такая же фигня была с AWM.

Все мы могли бы быть разными, если не были бы так одинаковы.
Нам что водка, что пулемёт - лишь бы с ног валило.

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

Всем привет !

 

Возможно ли соединить центральную часть Припяти из ТЧ и восточную из ЗП в одну большую локацию ? Было бы очень здоровски (имхо). Вот только нигде пока не встречал подобных модов.

Ссылка на комментарий
Возможно ли соединить центральную часть Припяти из ТЧ и восточную из ЗП в одну большую локацию ? Было бы очень здоровски (имхо). Вот только нигде пока не встречал подобных модов.

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

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

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

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

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

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

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

Войти

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

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

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

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