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

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


Halford

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

попробуи поменять радиэшион имунити на 1, или 1.5 только не забудь поменять во всех рангах Актер_имунитис_джД_новаис,.... ..... Актер_имунитис_джД_мастер . В том же фаиле актер лтх.

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

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


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

Изменил параметр экзы, чтоб можно было одеть шлем. Как сделать, чтоб использовался пнв от экзы, а не от шлема?

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


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

Akira, ;умешьшение силы за секнду во время ходьбы с учетом веса ноши, для максимального допустимого веса

overweight_walk_k = 1 ;1.5 ;2

;коэффициент влияние перегрузки ноши (умножается на walk_weight_power)

accel_k = 0.5 ;0.2

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

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


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

FATAL ERROR

 

[error]Expression : error handler is invoked!

[error]Function : invalid_parameter_handler

[error]File : D:\prog_repository\sources\trunk\xrCore\xrDebugNew.cpp

[error]Line : 805

[error]Description :

 

 

stack trace:

 

 

 

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


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

kasper, поправить 3-и фаила

[stalker] ;Указывается вероятность заспаунить или нет

;Артефакты

af_cristall = 0.01 ;вот это число отвечает за вероятность спауна артефакта, если поставить 1 = 100%

af_fireball = 0.01

af_dummy_glassbeads = 0.01

af_eye = 0.01

af_fire = 0.01

af_medusa = 0.01

af_cristall_flower = 0.01

af_night_star = 0.01

af_vyvert = 0.01

af_gravi = 0.01

af_gold_fish = 0.01

af_blood = 0.01

af_mincer_meat = 0.01

af_soul = 0.01

af_fuzz_kolobok = 0.01

af_baloon = 0.01

af_glass = 0.01

af_electra_sparkler = 0.01

af_electra_flash = 0.01

af_electra_moonlight = 0.01

af_dummy_battery = 0.01

af_dummy_dummy = 0.01

af_ice = 0.01

 

;Аммуниция

ammo_9x18_fmj = 1

ammo_9x18_pmm = 1

ammo_9x19_pbp = 1

ammo_9x19_fmj = 1

ammo_11.43x23_hydro = 1

ammo_11.43x23_fmj = 1

ammo_12x70_buck = 1

ammo_12x76_zhekan = 1

ammo_5.45x39_ap = 1

ammo_5.45x39_fmj = 1

ammo_9x39_ap = 1

ammo_9x39_pab9 = 1

ammo_5.56x45_ss190 = 1

ammo_5.56x45_ap = 1

ammo_7.62x54_7h14 = 1

ammo_7.62x54_7h1 = 1

ammo_gauss = 1

ammo_og-7b = 1

ammo_vog-25 = 1

grenade_f1 = 0.0

grenade_rgd5 = 0.0

ammo_m209 = 1

 

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

bandage = 0.25

medkit = 0.15

medkit_army = 0

medkit_scientic = 0.1

antirad = 0.08

 

;Бустеры

drug_booster = 0.5

drug_coagulant = 0.5

drug_psy_blockade = 0.0

drug_antidot = 0.5

drug_radioprotector = 0.0

drug_anabiotic = 0.0

 

;Еда

bread = 0.1

kolbasa = 0.1

conserva = 0.1

vodka = 0.1

energy_drink = 0.1

 

 

 

 

[bandit]:stalker

af_cristall = 0.01

af_fireball = 0.01

af_dummy_glassbeads = 0.01

af_eye = 0.01

af_fire = 0.01

af_medusa = 0.01

af_cristall_flower = 0.01

af_night_star = 0.01

af_vyvert = 0.01

af_gravi = 0.01

af_gold_fish = 0.01

af_blood = 0.01

af_mincer_meat = 0.01

af_soul = 0.01

af_fuzz_kolobok = 0.01

af_baloon = 0.01

af_glass = 0.01

af_electra_sparkler = 0.01

af_electra_flash = 0.01

af_electra_moonlight = 0.01

af_dummy_battery = 0.01

af_dummy_dummy = 0.01

af_ice = 0.01

 

[killer]:stalker

af_cristall = 0.01

af_fireball = 0.01

af_dummy_glassbeads = 0.01

af_eye = 0.01

af_fire = 0.01

af_medusa = 0.01

af_cristall_flower = 0.01

af_night_star = 0.01

af_vyvert = 0.01

af_gravi = 0.01

af_gold_fish = 0.01

af_blood = 0.01

af_mincer_meat = 0.01

af_soul = 0.01

af_fuzz_kolobok = 0.01

af_baloon = 0.01

af_glass = 0.01

af_electra_sparkler = 0.01

af_electra_flash = 0.01

af_electra_moonlight = 0.01

af_dummy_battery = 0.01

af_dummy_dummy = 0.01

af_ice = 0.01

;Еда

bread = 0

kolbasa = 0

vodka = 0

;energy_drink = 0.3

 

[ecolog]:stalker

;Еда

bread = 0

kolbasa = 0

conserva = 0

vodka = 0

;energy_drink = 0

 

medkit = 0

medkit_scientic = 0.2

antirad = 0.3

 

[army]:stalker

af_cristall = 0.01

af_fireball = 0.01

af_dummy_glassbeads = 0.01

af_eye = 0.01

af_fire = 0.01

af_medusa = 0.01

af_cristall_flower = 0.01

af_night_star = 0.01

af_vyvert = 0.01

af_gravi = 0.01

af_gold_fish = 0.1

af_blood = 0.01

af_mincer_meat = 0.01

af_soul = 0.01

af_fuzz_kolobok = 0.01

af_baloon = 0.01

af_glass = 0.01

af_electra_sparkler = 0.01

af_electra_flash = 0.01

af_electra_moonlight = 0.01

af_dummy_battery = 0.01

af_dummy_dummy = 0.01

af_ice = 0.01

 

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

bandage = 0.4

antirad = 0.3

medkit = 0

medkit_scientic = 0

medkit_army = 0.3

 

;Еда

bread = 0

kolbasa = 0

conserva = 0

vodka = 0

;energy_drink = 0

 

 

[dolg]:stalker

af_cristall = 0.01

af_fireball = 0.01

af_dummy_glassbeads = 0.01

af_eye = 0.01

af_fire = 0.01

af_medusa = 0.01

af_cristall_flower = 0.01

af_night_star = 0.01

af_vyvert = 0.01

af_gravi = 0.01

af_gold_fish = 0.01

af_blood = 0.01

af_mincer_meat = 0.01

af_soul = 0.01

af_fuzz_kolobok = 0.01

af_baloon = 0.01

af_glass = 0.01

af_electra_sparkler = 0.01

af_electra_flash = 0.01

af_electra_moonlight = 0.01

af_dummy_battery = 0.01

af_dummy_dummy = 0.01

af_ice = 0.01

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

medkit = 0.01

medkit_army = 0.01

medkit_scientic = 0.01

 

[freedom]:stalker

af_cristall = 0.01

af_fireball = 0.01

af_dummy_glassbeads = 0.01

af_eye = 0.01

af_fire = 0.01

af_medusa = 0.01

af_cristall_flower = 0.01

af_night_star = 0.01

af_vyvert = 0.1

af_gravi = 0.1

af_gold_fish = 0.01

af_blood = 0.01

af_mincer_meat = 0.01

af_soul = 0.01

af_fuzz_kolobok = 0.01

af_baloon = 0.01

af_glass = 0.01

af_electra_sparkler = 0.01

af_electra_flash = 0.01

af_electra_moonlight = 0.01

af_dummy_battery = 0.01

af_dummy_dummy = 0.01

af_ice = 0.01

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

medkit = 0.2

medkit_army = 0.05

antirad = 0.2

;Еда

vodka = 0.3

energy_drink = 0.3

 

[zombied]:stalker

af_cristall = 0.01

af_fireball = 0.01

af_dummy_glassbeads = 0.01

af_eye = 0.01

af_fire = 0.01

af_medusa = 0.01

af_cristall_flower = 0.01

af_night_star = 0.01

af_vyvert = 0.01

af_gravi = 0.01

af_gold_fish = 0.01

af_blood = 0.01

af_mincer_meat = 0.01

af_soul = 0.01

af_fuzz_kolobok = 0.01

af_baloon = 0.01

af_glass = 0.01

af_electra_sparkler = 0.01

af_electra_flash = 0.01

af_electra_moonlight = 0.01

af_dummy_battery = 0.01

af_dummy_dummy = 0.01

af_ice = 0.01

;Еда

bread = 0

kolbasa = 0

conserva = 0

vodka = 0

energy_drink = 0

 

[monolith]:stalker

af_cristall = 0.01

af_fireball = 0.01

af_dummy_glassbeads = 0.01

af_eye = 0.01

af_fire = 0.01

af_medusa = 0.01

af_cristall_flower = 0.01

af_night_star = 0.01

af_vyvert = 0.01

af_gravi = 0.01

af_gold_fish = 0.01

af_blood = 0.01

af_mincer_meat = 0.01

af_soul = 0.01

af_fuzz_kolobok = 0.01

af_baloon = 0.01

af_glass = 0.01

af_electra_sparkler = 0.01

af_electra_flash = 0.01

af_electra_moonlight = 0.01

af_dummy_battery = 0.01

af_dummy_dummy = 0.01

af_ice = 0.01

;Еда

vodka = 0

energy_drink = 0

 

[trader]

;

[default]

;Артефакты

af_cristall = 1

af_fireball = 1

af_dummy_glassbeads = 1

af_eye = 1

af_fire = 1

af_medusa = 1

af_cristall_flower = 1

af_night_star = 1

af_vyvert = 1

af_gravi = 1

af_gold_fish = 1

af_blood = 1

af_mincer_meat = 1

af_soul = 1

af_fuzz_kolobok = 1

af_baloon = 1

af_glass = 1

af_electra_sparkler = 1

af_electra_flash = 1

af_electra_moonlight = 1

af_dummy_battery = 1

af_dummy_dummy = 1

af_ice = 1

 

;Аммуниция

ammo_9x18_fmj = 1

ammo_9x18_pmm = 0

ammo_9x19_pbp = 0

ammo_9x19_fmj = 1

ammo_11.43x23_hydro = 0

ammo_11.43x23_fmj = 1

ammo_12x70_buck = 1

ammo_12x76_zhekan = 1

ammo_5.45x39_ap = 0

ammo_5.45x39_fmj = 1

ammo_9x39_ap = 0.5

ammo_9x39_pab9 = 1

ammo_5.56x45_ss190 = 1

ammo_5.56x45_ap = 0

ammo_7.62x54_7h1 = 0.5

ammo_og-7b = 0.5

ammo_vog-25 = 0

grenade_f1 = 1

grenade_rgd5 = 1

ammo_m209 = 0

ammo_gauss = 0.5

ammo_pkm_100 = 0.5

 

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

bandage = 1

medkit = 1

medkit_scientic = 0

medkit_army = 0

antirad = 1

 

;Бустеры

drug_booster = 0

drug_coagulant = 0

drug_psy_blockade = 0

drug_antidot = 0

drug_radioprotector = 0

drug_anabiotic = 0

 

;Еда

bread = 1

kolbasa = 1

conserva = 1

vodka = 1

energy_drink = 1

 

[zaton]:default

 

[jupiter]:default

 

[jupiter_underground]:default

 

[pripyat]:default

 

[labx8]:default

 

 

;

[item_count_0]

;Артефакты

af_cristall = 1

af_fireball = 1

af_dummy_glassbeads = 1

af_eye = 1

af_fire = 1

af_medusa = 1

af_cristall_flower = 1

af_night_star = 1

af_vyvert = 1

af_gravi = 1

af_gold_fish = 1

af_blood = 1

af_mincer_meat = 1

af_soul = 1

af_fuzz_kolobok = 1

af_baloon = 1

af_glass = 1

af_electra_sparkler = 1

af_electra_flash = 1

af_electra_moonlight = 1

af_dummy_battery = 1

af_dummy_dummy = 1

af_ice = 1

 

;Аммуниция

ammo_9x18_fmj = 12, 36

ammo_9x18_pmm = 12, 36

ammo_9x19_pbp = 8, 24

ammo_9x19_fmj = 16, 32

ammo_11.43x23_hydro = 8, 16

ammo_11.43x23_fmj = 8, 24

ammo_12x70_buck = 8, 24

ammo_12x76_zhekan = 6, 18

ammo_5.45x39_ap = 10, 30

ammo_5.45x39_fmj = 12, 36

ammo_9x39_ap = 10, 30

ammo_9x39_pab9 = 12, 36

ammo_5.56x45_ss190 = 12, 36

ammo_5.56x45_ap = 10, 24

ammo_7.62x54_7h14 = 5, 15

ammo_7.62x54_7h1 = 5, 15

ammo_7.62x54_ap = 5, 15

ammo_og-7b = 1

ammo_vog-25 = 2

grenade_f1 = 2

grenade_rgd5 = 2

ammo_m209 = 2

ammo_gauss = 5, 10

ammo_pkm_100 = 30, 100

 

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

bandage = 2

medkit = 2

medkit_scientic = 2

medkit_army = 2

antirad = 1

 

;Бустеры

drug_booster = 1

drug_coagulant = 1

drug_psy_blockade = 1

drug_antidot = 1

drug_radioprotector = 1

drug_anabiotic = 1

 

;Еда

bread = 1

kolbasa = 1

conserva = 1

vodka = 1

energy_drink = 1

 

 

[item_count_1]:item_count_0

;Артефакты

af_cristall = 1

af_fireball = 1

af_dummy_glassbeads = 1

af_eye = 1

af_fire = 1

af_medusa = 1

af_cristall_flower = 1

af_night_star = 1

af_vyvert = 1

af_gravi = 1

af_gold_fish = 1

af_blood = 1

af_mincer_meat = 1

af_soul = 1

af_fuzz_kolobok = 1

af_baloon = 1

af_glass = 1

af_electra_sparkler = 1

af_electra_flash = 1

af_electra_moonlight = 1

af_dummy_battery = 1

af_dummy_dummy = 1

af_ice = 1

 

;Аммуниция

ammo_9x18_fmj = 10, 30

ammo_9x18_pmm = 10, 30

ammo_9x19_pbp = 6, 18

ammo_9x19_fmj = 12, 28

ammo_11.43x23_hydro = 6, 18

ammo_11.43x23_fmj = 6, 18

ammo_12x70_buck = 6, 18

ammo_12x76_zhekan = 5, 15

ammo_5.45x39_ap = 8, 24

ammo_5.45x39_fmj = 10, 30

ammo_9x39_ap = 8, 24

ammo_9x39_pab9 = 10, 30

ammo_5.56x45_ss190 = 10, 30

ammo_5.56x45_ap = 8, 24

ammo_7.62x54_7h14 = 4, 12

ammo_7.62x54_7h1 = 4, 12

ammo_7.62x54_ap = 4, 12

ammo_og-7b = 1

ammo_vog-25 = 3

grenade_f1 = 2

grenade_rgd5 = 3

ammo_m209 = 3

ammo_gauss = 4, 8

ammo_pkm_100 = 20, 60

 

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

bandage = 1

medkit = 1

medkit_scientic = 1

medkit_army = 1

antirad = 1

 

[item_count_2]:item_count_0

;Артефакты

af_cristall = 1

af_fireball = 1

af_dummy_glassbeads = 1

af_eye = 1

af_fire = 1

af_medusa = 1

af_cristall_flower = 1

af_night_star = 1

af_vyvert = 1

af_gravi = 1

af_gold_fish = 1

af_blood = 1

af_mincer_meat = 1

af_soul = 1

af_fuzz_kolobok = 1

af_baloon = 1

af_glass = 1

af_electra_sparkler = 1

af_electra_flash = 1

af_electra_moonlight = 1

af_dummy_battery = 1

af_dummy_dummy = 1

af_ice = 1

 

;Аммуниция

ammo_9x18_fmj = 8, 24

ammo_9x18_pmm = 8, 24

ammo_9x19_pbp = 5, 15

ammo_9x19_fmj = 10, 20

ammo_11.43x23_hydro = 5, 15

ammo_11.43x23_fmj = 5, 15

ammo_12x70_buck = 5, 15

ammo_12x76_zhekan = 4, 12

ammo_5.45x39_ap = 6, 18

ammo_5.45x39_fmj = 8, 24

ammo_9x39_ap = 6, 18

ammo_9x39_pab9 = 8, 24

ammo_5.56x45_ss190 = 8, 24

ammo_5.56x45_ap = 6, 18

ammo_7.62x54_7h14 = 3, 9

ammo_7.62x54_7h1 = 3, 9

ammo_7.62x54_ap = 3, 9

ammo_og-7b = 1

ammo_vog-25 = 3

grenade_f1 = 2

grenade_rgd5 = 3

ammo_m209 = 3

ammo_gauss = 3, 6

ammo_pkm_100 = 10, 30

 

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

bandage = 0, 1

medkit = 0, 1

medkit_scientic = 0, 1

medkit_army = 0, 1

antirad = 0, 1

 

 

[item_count_3]:item_count_0

;Артефакты

af_cristall = 1

af_fireball = 1

af_dummy_glassbeads = 1

af_eye = 1

af_fire = 1

af_medusa = 1

af_cristall_flower = 1

af_night_star = 1

af_vyvert = 1

af_gravi = 1

af_gold_fish = 1

af_blood = 1

af_mincer_meat = 1

af_soul = 1

af_fuzz_kolobok = 1

af_baloon = 1

af_glass = 1

af_electra_sparkler = 1

af_electra_flash = 1

af_electra_moonlight = 1

af_dummy_battery = 1

af_dummy_dummy = 1

af_ice = 1

 

;Аммуниция

ammo_9x18_fmj = 5, 15

ammo_9x18_pmm = 5, 15

ammo_9x19_pbp = 4, 12

ammo_9x19_fmj = 8, 16

ammo_11.43x23_hydro = 4, 12

ammo_11.43x23_fmj = 4, 12

ammo_12x70_buck = 4, 12

ammo_12x76_zhekan = 3, 9

ammo_5.45x39_ap = 5, 15

ammo_5.45x39_fmj = 6, 18

ammo_9x39_ap = 4, 12

ammo_9x39_pab9 = 6, 18

ammo_5.56x45_ss190 = 6, 18

ammo_5.56x45_ap = 4, 12

ammo_7.62x54_7h14 = 2, 6

ammo_7.62x54_7h1 = 2, 6

ammo_7.62x54_ap = 2, 6

ammo_og-7b = 1

ammo_vog-25 = 3

grenade_f1 = 2

grenade_rgd5 = 3

ammo_m209 = 3

ammo_gauss = 2, 4

ammo_pkm_100 = 6, 18

 

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

bandage = 0, 1

medkit = 0, 1

medkit_scientic = 0, 1

medkit_army = 0, 1

antirad = 0, 1

 

Закинуть все это в gamedata\configs\misc

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

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


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

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

[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

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


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

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

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

-- автор: Диденко Руслан (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

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


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

Подскажите пожалуиста, в каком фаиле править воздеиствие аномалий с нпс?

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

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


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

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