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

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

Здравствуйте! Возникла небольшая идея, но не знаю как её реализовать. Подскажите пожалуйста как можно её сделать.

Идея заключается в переключении между стволами (верхний/нижний), для каждого ствола свой калибр, анимация, звуки и т.д. как можно реализовать подобное?

Я думаю нужно создать новый класс (ammo_class) и переключаться между ними при нажатии на кнопку смены режима стрельбы.

fire_modes = 1, -1                              ;режим стрельбы

ammo_mag_size = 1

 

////////РЕЖИМ_1//////////

ammo_class = ammo_12x70_buck, ammo_12x76_zhekan,ammo_12x76_dart   

////////Характеристика 1////////

дисперсия, отдача, звуки, анимация

 

////////РЕЖИМ_2//////////

ammo_class2 = ammo_9x53                                            

////////Характеристика 1////////

дисперсия, отдача, звуки, анимация

Изменено пользователем Kirgudu
Добавлено Kirgudu,

Перенёс из "справочника по функциям и классам"

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

@evg, что-то я не понял. Предпологается использовать разные снаряды для одной пушки? Тогда без ковыряний движка не обойтись, а это геморрой...

Не соответствует правилам.

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

@evg, что-то я не понял. Предпологается использовать разные снаряды для одной пушки? Тогда без ковыряний движка не обойтись, а это геморрой...

 

да всё верно, хотелось бы реализовать смену блоков стволов(т.е. при модификации) у ружья (например: ТОЗ-55-1 9мм/9мм; ТОЗ-55-2 12мм/9мм;ТОЗ-55-3 12мм/12мм). 

Добавлено Kirgudu,

Пункт 2.6 правил форума, устное предупреждение.
Рекомендую изучить правила цитирования

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

Добрый день. Делаю следующие действия:

local variable = ini_file("gamedata//config//file.ltx"):r_s32(settings, key)

Вот содержание файла file.ltx:

 

 

[settings]
key = 0 

 

 

 

Получается локальная переменная содержит в себе 0., но ловлю такой вылет:

 

Expression : error handler is invoked!
Function : invalid_parameter_handler
File : E:\stalker\sources\trunk\xrCore\xrDebugNew.cpp
Line : 804
Description :

 

Если просто прописать в переменную 0, то вылета нет.

 

 

@UnLoaded, спасибо, но теперь ещё одна проблема. Данный вылет:

Expression : fatal error


Function : CInifile::r_section
File : E:\stalker\sources\trunk\xrCore\Xr_ini.cpp
Line : 342
Description :
Arguments : Can't open section 'settings'

 

Но секция есть. И всё правильно написано.

Изменено пользователем Kober(BRUC)
Ссылка на комментарий

@Kober(BRUC), разницы может не быть, но я бы сделал так:

ini_file("gamedata\\config\\file.ltx")

ИМХО, движок просто не находит файл.

 

@Charsi, точно, я даже не обратил внимания.

Изменено пользователем Kirgudu
  • Спасибо 1
Ссылка на комментарий

local variable = ini_file("gamedata//config//file.ltx"):r_s32(settings, key)

Такое не всегда проходит корректно и поэтому не стоит экономить на строчках кода. Я бы написал:

local sect = ini_file("gamedata//config//file.ltx")
if  sect:section_exist(setting) then local str = sect:r_s32(settings, key) end
Изменено пользователем Serge!
Ссылка на комментарий

Всем привет. можно ли подобным образом реализовать новый режим стрельбы

 

 

[wpn_toz34]:identity_immunities ;-----------------------------ТОЗ-34-5,6/20
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "weapons\toz-34" ; option for Level Editor
$npc = on ; option for Level Editor
$prefetch = 8
scheduled = off ; option for ALife Simulator
cform = skeleton
class = WP_BM16
min_radius = 0
max_radius = 50
description = enc_weapons1_wpn-toz34

ef_main_weapon_type = 1
ef_weapon_type = 7

;-----------------------------------------------------------------------------------
holder_range_modifier = 1.0 ; во сколько раз увеличивается eye_range
holder_fov_modifier = 0.7 ; во сколько раз увеличивается eye_fov
;-----------------------------------------------------------------------------------

cost = 1 ;1000
weapon_class = shotgun

ammo_limit = 60
ammo_current = 10
ammo_elapsed = 0


ammo_class = one,two ;автоматически переключится между стволами
;ручное переключение между стволами



[one]:wpn_toz34 ;------------------------------------------СТВОЛ-1 (верхний)
ammo_mag_size = 1
ammo_class = ammo_12x76_zhekan,ammo_12x76_dart

;базовая дисперсия---------------------------------------------------------------------
fire_dispersion_base = 0.4 ;угол (в градусах) базовой дисперсии оружия (оружия зажатого в тисках)
control_inertion_factor = 1.3f

;отдача
cam_relax_speed = 7.0 ;скорость возврата в исходное положение
cam_dispersion = 3.0 ;увеличения угла (в градусах) с каждым выстрелом
cam_dispersion_inc = 3.0 ;увеличениe cam_dispersion с каждым выстрелом
cam_dispertion_frac = 1.0 ;ствол будет подыматься на cam_dispersion*cam_dispertion_frac +- cam_dispersion*(1-cam_dispertion_frac)
cam_max_angle = 8.0 ;максимальный угол отдачи
cam_max_angle_horz = 20.0 ;(degree) maximum shot horizontal degree
cam_step_angle_horz = 2.5 ;(degree) size of step camera moved in horizontal position while shooting

fire_dispersion_condition_factor = 5 ;увеличение дисперсии в процентах при максимальном износе
misfire_probability = 0.005 ;вероятность осечки при максимальном износе
condition_shot_dec = 0.00170 ;увеличение износа при каждом выстреле

;ТТХ-------------------------------------------------------------------------------
hit_power = 1.5
hit_impulse = 240
hit_type = fire_wound

fire_distance = 1000
bullet_speed = 340 ;начальная скорость пули
rpm = 1000
; end ttc---------------------------------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




[two]:wpn_toz34 ;------------------------------------------СТВОЛ-2 (нижний)
ammo_mag_size = 1
ammo_class = ammo_5.45x39_fmj

;базовая дисперсия----------------------------------------------------------
fire_dispersion_base = 0.2 ;угол (в градусах) базовой дисперсии оружия (оружия зажатого в тисках)
control_inertion_factor = 1.25f

;отдача
cam_relax_speed = 5 ;скорость возврата в исходное положение
cam_dispersion = 0.15 ;увеличения угла (в градусах) с каждым выстрелом
cam_dispersion_inc = 0.3 ;увеличениe cam_dispersion с каждым выстрелом
cam_dispertion_frac = 0.9 ;ствол будет подыматься на cam_dispersion*cam_dispertion_frac +- cam_dispersion*(1-cam_dispertion_frac)
cam_max_angle = 10.0 ;максимальный угол отдачи
cam_max_angle_horz = 20.0 ;(degree) maximum shot horizontal degree
cam_step_angle_horz = 1.1 ;(degree) size of step camera moved in horizontal position while shooting

fire_dispersion_condition_factor = 5 ;увеличение дисперсии в процентах при максимальном износе
misfire_probability = 0.05 ;вероятность осечки при максимальном износе
condition_shot_dec = 0.0001 ;увеличение износа при каждом выстреле

;ТТХ-------------------------------------------------------------------------------
hit_power_2 = 0.35
hit_impulse_2 = 140
hit_type_2 = fire_wound

fire_distance = 1000
bullet_speed = 900 ;начальная скорость пули
rpm = 600
; end ttc---------------------------------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
hand_dependence = 1
single_handed = 0

slot = 2 ; // secondary
animation_slot = 3 ; type of the animation that will be used

inv_name = wpn-toz34
inv_name_short = wpn-toz34
inv_weight = 3.1

inv_grid_width = 6
inv_grid_height = 1
inv_grid_x = 12
inv_grid_y = 2

kill_msg_x = 127
kill_msg_y = 82
kill_msg_width = 97
kill_msg_height = 23

direction = 0, 0, 1
shell_point = 0.0, 0.183, 0.07
fire_point = 0.0, 0.183, 0.730
fire_point2 = 0.0, 0.160, 0.730

flame_particles = weapons\generic_weapon05
smoke_particles = weapons\generic_shoot_00
rpm_empty_click = 200

PDM_disp_base = 1.0
PDM_disp_vel_factor = 2.0
PDM_disp_accel_factor = 2.0
PDM_crouch = 1.0
PDM_crouch_no_acc = 1.0
;---------------------------------------------------------------------------
hud = wpn_shotgun_hud
normal = 0, 1, 0
position = -0.026, -0.132, 0.06 ;-0.026, -0.117, 0.0
orientation = 0, 30, 0 ;значение устанавливается в градусах

;--STRAP PARAMETERS---------------------------------
;под мишкой
strap_position = -0.26,-0.11,0.15 ; position (offset) and orientation of the weapon when it is strapped
strap_orientation = -15,-9,110 ; (3rd person view in degrees)
strap_bone0 = bip01_spine2
strap_bone1 = bip01_spine1

startup_ammo = 10
visual = weapons\toz34\wpn_toz34_ext.ogf

light_color = 0.6,0.5,0.3
light_range = 6.0
light_var_color = 0.05
light_var_range = 0.5
light_time = 0.2

ph_mass = 3
;cost = 900

;addons
scope_status = 0
silencer_status = 0
grenade_launcher_status = 0

zoom_enabled = true
scope_zoom_factor = 55

;звуки---------------------------------------------------------
snd_draw = weapons\generic_draw
snd_holster = weapons\generic_holster
snd_shoot = weapons\tm_toz34_shot
snd_empty = weapons\generic_empty
snd_reload = weapons\toz34_reload
snd_shoot_duplet = weapons\tm_toz34_shot_both

snd_shoot_1 = weapons\tm_toz34_shot
snd_reload_1 = weapons\toz34_reload_one ;reload left

[wpn_shotgun_hud]---------------------------------------------------
shell_point = 0.0, 0.0, 0.0
fire_point = stvol
fire_point2 = stvol2
fire_bone = wpn_barrel_0
orientation = 0, 0, 0
position = 0, 0, 0
visual = weapons\toz34\wpn_toz34_hud.ogf

;anim_idle = idle
;anim_reload = reload
;anim_draw = draw
;anim_holster = holster
;anim_shoot = shoot
;anim_shoot_both = shoot_both
;anim_idle_aim = idle_aim


anim_idle = idle
anim_reload = reload ;reload both
anim_draw = draw
anim_holster = holster
anim_shoot = shoot1
anim_shoot_both = shoot1
anim_idle_aim = idle_aim
anim_idle_sprint = idle_sprint

anim_reload_1 = reload_one
anim_shoot_1 = shoot1

anim_idle_1 = idle
anim_idle_2 = idle

anim_zoomed_idle_1 = idle_aim
anim_zoomedidle_2 = idle_aim


;смещения HUD для режима приближения
zoom_offset = -0.126600,0.049000,0.000000
zoom_rotate_x = 0.044000
zoom_rotate_y = 0.017000
;время поворота HUD (сек)
;zoom_rotate_time = 0.7

 

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

@evg, попробуйте сделать это через подствольник,правда анимки и модель вам придётся самим делать.Но насколько я знаю то можно обойтись полностью скриптами. Вот только я бы сам писать такое не решился - слишком муторно, да и пушка довольно специфичная)

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

Привет всем.

Пытаюсь вытащить из Солянки спавн артефактов. Вызываю свой скрипт так:

function actor_binder:net_spawn(data)


...
...
uzi_arts.add_arts()
return true

 

 

Сам скрипт:

local anoms_sections={
buzz={"buzz",{shtype=0,radius=1.5,center={0,0,0}}},
electra={"witches_galantine",{shtype=0,radius=4,center={0,0,0}}},
gravi={"gravi_zone",{shtype=0,radius=3,center={0,0,0}}},
mincer={"mincer",{shtype=0,radius=3.5,center={0,0,0}}},
mosquito_bald={"mosquito_bald",{shtype=0,radius=3,center={0,0,0}}},
zharka_static={"zharka_static",{shtype=1,v1={1,0,0},v2={0,5,0},v3={0,0,1},offset={0,0,0}}}
}

level_anoms={
l01_escape={100,170,1000,{electra=12, gravi=5, mincer=10, buzz=10, mosquito_bald=15}},
l02_garbage={100,160,800,{mosquito_bald=12, mincer=12, electra=15, gravi=10, buzz=12}},
l03_agroprom={100,140,800,{mosquito_bald=12, mincer=8, electra=12, buzz=12, gravi=10}},
l04_darkvalley={110,150,1000,{mincer=8, mosquito_bald=12, electra=12, buzz=10, zharka_static=8, gravi=8}},
l05_bar={70,90,300,{mosquito_bald=8, mincer=10, electra=10, buzz=5, gravi=8, zharka_static=4}},
l06_rostok={70,100,800,{mincer=7, mosquito_bald=7, electra=10, zharka_static=25, gravi=7, buzz=10}},
l08_yantar={80,110,400,{mosquito_bald=8, mincer=8, electra=10, buzz=8, zharka_static=5, gravi=8}},
l07_military={110,150,1000,{mincer=12 , mosquito_bald=15, electra=12, zharka_static=8, gravi=10, buzz=10}},
l10_radar={120,140,1000,{mincer=14, mosquito_bald=11, electra=15, buzz=10, zharka_static=12, gravi=10}},
l11_pripyat={110,150,900,{mincer=10, mosquito_bald=10, electra=10, zharka_static=8, gravi=10, buzz=10}},
l12_stancia={70,90,700,{mincer=12, mosquito_bald=10, electra=10, buzz=10, zharka_static=7, gravi=8}},
puzir={150,170,450,{mincer=15, mosquito_bald=15, electra=14, buzz=12, zharka_static=5, gravi=14}},
aver={180,190,750,{mincer=12, mosquito_bald=12, electra=16, buzz=15, zharka_static=5, gravi=15}},
marsh={140,180,900,{mincer=13, mosquito_bald=11, electra=12, zharka_static=12, gravi=10, buzz=13}},
limansk={50,60,300,{mosquito_bald=10, mincer=10, electra=15, gravi=10, buzz=10, zharka_static=8}},
hospital={10,20,200,{mincer=8, mosquito_bald=8, electra=7, buzz=8, gravi=5, zharka_static=5}},
red_forest={110,150,400,{mincer=15, mosquito_bald=10, electra=10, zharka_static=8, gravi=10, buzz=10}},
lost_village={80,100,250,{mincer=8, mosquito_bald=8, electra=10, zharka_static=5, gravi=5, buzz=5}},
generators={160,190,350,{mincer=15, mosquito_bald=11, electra=15, zharka_static=5, gravi=10, buzz=16}},
atp_for_test22={160,180,400,{mincer=13, mosquito_bald=10, electra=15, zharka_static=10, gravi=10, buzz=20}},
dead_city={110,150,900,{mincer=10, mosquito_bald=10, electra=10, zharka_static=8, gravi=10, buzz=10}},
zaton={180,190,1000,{electra=15, gravi=15, mincer=12, buzz=15, mosquito_bald=15, zharka_static=5}},
jupiter={180,190,1000,{electra=15, gravi=15, mincer=10, buzz=15, mosquito_bald=15}},
pripyat={140,160,1000,{electra=15, gravi=15, mincer=10, buzz=15, mosquito_bald=15}},
predbannik={100,170,1000,{electra=12, gravi=5, mincer=10, buzz=10, mosquito_bald=15}}
}

local math_random=math.random

local levelsIgnoreArts = {
["l03u_agr_underground"] = true,
["l04u_labx18"] = true,
["l08u_brainlab"] = true,
["l12u_sarcofag"] = true,
["l12u_control_monolith"] = true,
["l10u_bunker"] = true,
["peshera"] = true,
["av_peshera"] = true,
["warlab"] = true,
["jupiter_underground"] = true,
["labx8"] = true,
["cs_agroprom_underground"] = true
}

local arts_sections={
balb_1="af_medusa", -- Медуза
balb_2="af_cristall_flower", -- Каменный цветок
balb_3="af_night_star", -- Ночная звезда
buzz_1="af_ameba_slime", -- Слизь
buzz_2="af_ameba_slug", -- Слизняк
buzz_3="af_ameba_mica", -- Слюда
dummy_1="af_dummy_spring", -- Пружина
dummy_2="af_dummy_dummy", -- Пустышка
dummy_3="af_dummy_battery", -- Батарейка
dummy_4="af_dummy_pellicle", -- Плёнка
dummy_5="af_fuzz_kolobok", -- Колобок
dummy_6="af_dummy_glassbeads", -- Мамины бусы
electra_1="af_electra_sparkler", -- Бенгальский огонь
electra_2="af_electra_flash", -- Вспышка
electra_3="af_electra_moonlight", -- Лунный свет
gravi_1="af_vyvert", -- Выверт
gravi_2="af_gravi", -- Грави
gravi_3="af_gold_fish", -- Золотая рыбка
mincer_1="af_blood", -- Кровь камня
mincer_2="af_mincer_meat", -- Ломоть мяса
mincer_3="af_soul", -- Душа
rusty_1="af_rusty_thorn", -- Колючка
rusty_2="af_rusty_kristall", -- Кристальная колючка
rusty_3="af_rusty_sea-urchin", -- Морской ёж
zharka_1="af_drops", -- Капли
zharka_2="af_fireball", -- Огненный шар
zharka_3="af_cristall" -- Кристалл
}

level_arts={
l01_escape={2,4,{balb_1=24, balb_2=2, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=9, electra_2=1, electra_3=0, gravi_1=23, gravi_2=5, gravi_3=0, mincer_1=25, mincer_2=0, mincer_3=0, rusty_1=5, rusty_2=0, rusty_3=0, zharka_1=0, zharka_2=0, zharka_3=0}},
l02_garbage={2,4,{balb_1=19, balb_2=5, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=10, electra_2=0, electra_3=0, gravi_1=25, gravi_2=5, gravi_3=0, mincer_1=20, mincer_2=5, mincer_3=0, rusty_1=5, rusty_2=0, rusty_3=0, zharka_1=0, zharka_2=0, zharka_3=0}},
l03_agroprom={3,6,{balb_1=12, balb_2=5, balb_3=0, buzz_1=10, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=10, electra_2=5, electra_3=0, gravi_1=13, gravi_2=5, gravi_3=0, mincer_1=10, mincer_2=5, mincer_3=0, rusty_1=5, rusty_2=0, rusty_3=0, zharka_1=10, zharka_2=5, zharka_3=0}},
l03u_agr_underground={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=15, buzz_2=5, buzz_3=3, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=10, electra_2=5, electra_3=3, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=5, rusty_2=3, rusty_3=3, zharka_1=5, zharka_2=5, zharka_3=0}},
l04_darkvalley={6,8,{balb_1=1, balb_2=9, balb_3=0, buzz_1=10, buzz_2=3, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=0, dummy_5=1, dummy_6=1, electra_1=5, electra_2=9, electra_3=0, gravi_1=5, gravi_2=8, gravi_3=0, mincer_1=5, mincer_2=10, mincer_3=0, rusty_1=5, rusty_2=2, rusty_3=0, zharka_1=5, zharka_2=5, zharka_3=0}},
l04u_labx18={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=2, dummy_6=0, electra_1=0, electra_2=0, electra_3=0, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=3, mincer_2=3, mincer_3=2, rusty_1=2, rusty_2=2, rusty_3=1, zharka_1=5, zharka_2=5, zharka_3=2}},
l05_bar={2,4,{balb_1=18, balb_2=7, balb_3=0, buzz_1=5, buzz_2=3, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=0, dummy_4=1, dummy_5=1, dummy_6=0, electra_1=10, electra_2=0, electra_3=0, gravi_1=18, gravi_2=0, gravi_3=0, mincer_1=20, mincer_2=0, mincer_3=0, rusty_1=5, rusty_2=3, rusty_3=0, zharka_1=0, zharka_2=0, zharka_3=0}},
l06_rostok={2,5,{balb_1=0, balb_2=2, balb_3=2, buzz_1=5, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=0, dummy_6=0, electra_1=8, electra_2=10, electra_3=0, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=2, mincer_3=2, rusty_1=10, rusty_2=10, rusty_3=5, zharka_1=20, zharka_2=10, zharka_3=5}},
l08_yantar={4,8,{balb_1=1, balb_2=3, balb_3=2, buzz_1=8, buzz_2=5, buzz_3=1, dummy_1=1, dummy_2=1, dummy_3=0, dummy_4=1, dummy_5=0, dummy_6=0, electra_1=8, electra_2=5, electra_3=2, gravi_1=8, gravi_2=5, gravi_3=2, mincer_1=6, mincer_2=5, mincer_3=2, rusty_1=9, rusty_2=3, rusty_3=2, zharka_1=8, zharka_2=5, zharka_3=2}},
l08u_brainlab={2,4,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=0, dummy_4=0, dummy_5=1, dummy_6=0, electra_1=0, electra_2=0, electra_3=0, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=2, mincer_3=2, rusty_1=0, rusty_2=2, rusty_3=3, zharka_1=5, zharka_2=5, zharka_3=1}},
l07_military={4,7,{balb_1=2, balb_2=4, balb_3=2, buzz_1=8, buzz_2=2, buzz_3=0, dummy_1=0, dummy_2=1, dummy_3=1, dummy_4=0, dummy_5=1, dummy_6=0, electra_1=8, electra_2=5, electra_3=2, gravi_1=3, gravi_2=5, gravi_3=3, mincer_1=6, mincer_2=5, mincer_3=5, rusty_1=8, rusty_2=5, rusty_3=2, zharka_1=6, zharka_2=5, zharka_3=3}},
l10_radar={4,8,{balb_1=3, balb_2=5, balb_3=5, buzz_1=5, buzz_2=5, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=1, electra_1=5, electra_2=4, electra_3=3, gravi_1=4, gravi_2=3, gravi_3=3, mincer_1=6, mincer_2=6, mincer_3=5, rusty_1=7, rusty_2=6, rusty_3=5, zharka_1=5, zharka_2=5, zharka_3=5}},
l11_pripyat={4,7,{balb_1=3, balb_2=3, balb_3=3, buzz_1=8, buzz_2=4, buzz_3=3, dummy_1=1, dummy_2=2, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=1, electra_1=4, electra_2=4, electra_3=3, gravi_1=3, gravi_2=3, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=3, rusty_1=7, rusty_2=5, rusty_3=4, zharka_1=7, zharka_2=4, zharka_3=4}},
l12_stancia={2,4,{balb_1=2, balb_2=3, balb_3=3, buzz_1=7, buzz_2=4, buzz_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=1, electra_1=7, electra_2=4, electra_3=3, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=3, mincer_2=6, mincer_3=4, rusty_1=7, rusty_2=4, rusty_3=3, zharka_1=7, zharka_2=4, zharka_3=3}},
l12u_sarcofag={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=1, electra_1=2, electra_2=2, electra_3=4, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=2, rusty_1=0, rusty_2=3, rusty_3=6, zharka_1=0, zharka_2=2, zharka_3=2}},
l12u_control_monolith={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=2, electra_1=0, electra_2=1, electra_3=1, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=2, rusty_1=0, rusty_2=0, rusty_3=2, zharka_1=0, zharka_2=0, zharka_3=0}},
l12_stancia_2={2,4,{balb_1=2, balb_2=2, balb_3=1, buzz_1=2, buzz_2=2, buzz_3=1, dummy_1=1, dummy_2=1, dummy_3=0, dummy_4=0, dummy_5=1, dummy_6=1, electra_1=0, electra_2=0, electra_3=2, gravi_1=2, gravi_2=2, gravi_3=1, mincer_1=0, mincer_2=0, mincer_3=1, rusty_1=0, rusty_2=0, rusty_3=2, zharka_1=0, zharka_2=2, zharka_3=1}},
l10u_bunker={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=1, electra_1=0, electra_2=0, electra_3=0, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=0, rusty_3=3, zharka_1=0, zharka_2=2, zharka_3=2}},
atp_for_test22={4,8,{balb_1=2, balb_2=4, balb_3=3, buzz_1=4, buzz_2=2, buzz_3=1, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=5, electra_2=5, electra_3=2, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=1, rusty_1=7, rusty_2=4, rusty_3=0, zharka_1=3, zharka_2=2, zharka_3=0}},
peshera={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=0, dummy_5=1, dummy_6=0, electra_1=1, electra_2=2, electra_3=2, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=1, rusty_3=3, zharka_1=2, zharka_2=3, zharka_3=4}},
puzir={2,4,{balb_1=3, balb_2=3, balb_3=0, buzz_1=12, buzz_2=8, buzz_3=5, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=12, electra_2=5, electra_3=0, gravi_1=5, gravi_2=5, gravi_3=0, mincer_1=10, mincer_2=5, mincer_3=0, rusty_1=5, rusty_2=2, rusty_3=0, zharka_1=5, zharka_2=5, zharka_3=0}},
aver={4,8,{balb_1=2, balb_2=3, balb_3=3, buzz_1=8, buzz_2=6, buzz_3=4, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=0, electra_1=7, electra_2=5, electra_3=2, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=5, mincer_2=4, mincer_3=1, rusty_1=7, rusty_2=4, rusty_3=4, zharka_1=4, zharka_2=4, zharka_3=1}},
av_peshera={4,8,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=0, dummy_5=1, dummy_6=0, electra_1=4, electra_2=4, electra_3=1, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=2, rusty_2=5, rusty_3=3, zharka_1=5, zharka_2=3, zharka_3=2}},
limansk={2,4,{balb_1=2, balb_2=4, balb_3=5, buzz_1=5, buzz_2=5, buzz_3=0, dummy_1=2, dummy_2=2, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=2, electra_1=5, electra_2=5, electra_3=5, gravi_1=5, gravi_2=5, gravi_3=5, mincer_1=4, mincer_2=5, mincer_3=5, rusty_1=5, rusty_2=5, rusty_3=5, zharka_1=5, zharka_2=5, zharka_3=2}},
hospital={1,3,{balb_1=1, balb_2=1, balb_3=1, buzz_1=7, buzz_2=4, buzz_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=0, electra_1=2, electra_2=0, electra_3=0, gravi_1=2, gravi_2=0, gravi_3=0, mincer_1=2, mincer_2=0, mincer_3=0, rusty_1=2, rusty_2=0, rusty_3=0, zharka_1=0, zharka_2=0, zharka_3=0}},
generators={4,8,{balb_1=2, balb_2=4, balb_3=3, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=5, dummy_2=5, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=0, electra_1=4, electra_2=4, electra_3=3, gravi_1=4, gravi_2=3, gravi_3=3, mincer_1=5, mincer_2=4, mincer_3=3, rusty_1=0, rusty_2=9, rusty_3=0, zharka_1=7, zharka_2=4, zharka_3=4}},
warlab={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=2, electra_2=1, electra_3=0, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=2, rusty_3=2, zharka_1=0, zharka_2=2, zharka_3=1}},
red_forest={4,8,{balb_1=3, balb_2=9, balb_3=5, buzz_1=5, buzz_2=5, buzz_3=0, dummy_1=2, dummy_2=2, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=5, electra_2=4, electra_3=3, gravi_1=4, gravi_2=3, gravi_3=3, mincer_1=6, mincer_2=6, mincer_3=5, rusty_1=6, rusty_2=6, rusty_3=2, zharka_1=2, zharka_2=3, zharka_3=4}},
lost_village={1,3,{balb_1=0, balb_2=1, balb_3=1, buzz_1=3, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=2, electra_2=0, electra_3=0, gravi_1=3, gravi_2=0, gravi_3=0, mincer_1=2, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=0, rusty_3=0, zharka_1=1, zharka_2=0, zharka_3=0}},
marsh={8,10,{balb_1=2, balb_2=3, balb_3=3, buzz_1=7, buzz_2=4, buzz_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=0, electra_1=9, electra_2=4, electra_3=1, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=6, mincer_2=4, mincer_3=3, rusty_1=10, rusty_2=4, rusty_3=0, zharka_1=7, zharka_2=5, zharka_3=1}},
dead_city={3,6,{balb_1=4, balb_2=4, balb_3=3, buzz_1=3, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=3, electra_2=2, electra_3=0, gravi_1=4, gravi_2=3, gravi_3=1, mincer_1=5, mincer_2=3, mincer_3=0, rusty_1=0, rusty_2=0, rusty_3=0, zharka_1=3, zharka_2=1, zharka_3=0}},
zaton={8,10,{balb_1=2, balb_2=3, balb_3=3, buzz_1=7, buzz_2=4, buzz_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=0, dummy_6=1, electra_1=7, electra_2=4, electra_3=3, gravi_1=4, gravi_2=4, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=3, rusty_1=7, rusty_2=4, rusty_3=3, zharka_1=7, zharka_2=4, zharka_3=3}},
jupiter={8,10,{balb_1=2, balb_2=3, balb_3=3, buzz_1=10, buzz_2=5, buzz_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=0, dummy_6=1, electra_1=7, electra_2=4, electra_3=3, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=6, mincer_2=4, mincer_3=3, rusty_1=7, rusty_2=4, rusty_3=3, zharka_1=7, zharka_2=4, zharka_3=3}},
pripyat={4,8,{balb_1=2, balb_2=3, balb_3=3, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=0, dummy_5=0, dummy_6=1, electra_1=7, electra_2=4, electra_3=3, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=6, mincer_2=4, mincer_3=3, rusty_1=7, rusty_2=4, rusty_3=3, zharka_1=3, zharka_2=2, zharka_3=1}},
jupiter_underground={3,6,{balb_1=0, balb_2=0, balb_3=0, buzz_1=5, buzz_2=3, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, dummy_6=0, electra_1=3, electra_2=2, electra_3=3, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=2, rusty_3=5, zharka_1=0, zharka_2=3, zharka_3=2}},
labx8={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=0, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=3, dummy_6=0, electra_1=1, electra_2=1, electra_3=1, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=0, rusty_3=3, zharka_1=0, zharka_2=0, zharka_3=2}},
cs_agroprom_underground={1,3,{balb_1=0, balb_2=0, balb_3=0, buzz_1=3, buzz_2=2, buzz_3=0, dummy_1=2, dummy_2=2, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=2, electra_2=2, electra_3=0, gravi_1=0, gravi_2=0, gravi_3=0, mincer_1=0, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=1, rusty_3=2, zharka_1=0, zharka_2=0, zharka_3=2}},
predbannik={2,4,{balb_1=9, balb_2=0, balb_3=0, buzz_1=3, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=3, electra_2=0, electra_3=0, gravi_1=5, gravi_2=0, gravi_3=0, mincer_1=5, mincer_2=0, mincer_3=0, rusty_1=0, rusty_2=0, rusty_3=0, zharka_1=0, zharka_2=0, zharka_3=0}},
garbage_old={3,6,{balb_1=9, balb_2=2, balb_3=0, buzz_1=4, buzz_2=0, buzz_3=0, dummy_1=0, dummy_2=0, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=4, electra_2=1, electra_3=0, gravi_1=8, gravi_2=5, gravi_3=0, mincer_1=10, mincer_2=4, mincer_3=0, rusty_1=3, rusty_2=0, rusty_3=0, zharka_1=3, zharka_2=0, zharka_3=0}},
yantar_old={3,6,{balb_1=9, balb_2=2, balb_3=0, buzz_1=4, buzz_2=0, buzz_3=0, dummy_1=2, dummy_2=2, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=5, electra_2=2, electra_3=0, gravi_1=10, gravi_2=5, gravi_3=0, mincer_1=10, mincer_2=5, mincer_3=0, rusty_1=2, rusty_2=1, rusty_3=0, zharka_1=2, zharka_2=3, zharka_3=0}},
swamp_old={3,6,{balb_1=7, balb_2=2, balb_3=0, buzz_1=10, buzz_2=3, buzz_3=0, dummy_1=1, dummy_2=1, dummy_3=0, dummy_4=0, dummy_5=0, dummy_6=0, electra_1=3, electra_2=1, electra_3=0, gravi_1=10, gravi_2=5, gravi_3=0, mincer_1=7, mincer_2=3, mincer_3=0, rusty_1=2, rusty_2=0, rusty_3=0, zharka_1=3, zharka_2=1, zharka_3=0}}
}

local game_vertexes={
l01_escape={0,251},
l02_garbage={252,415},
l03_agroprom={416,702},
l03u_agr_underground={703,810},
l04_darkvalley={811,1108},
l04u_labx18={1109,1167},
l05_bar={1168,1307},
l06_rostok={1308,1437},
l08_yantar={1438,1528},
l08u_brainlab={1529,1544},
l07_military={1545,1861},
l10_radar={1862,2116},
l11_pripyat={2117,2272},
l12_stancia={2273,2401},
l12u_sarcofag={2402,2466},
l12u_control_monolith={2467,2516},
l12_stancia_2={2517,2660},
l10u_bunker={2661,2791},
atp_for_test22={2792,2861},
peshera={2862,2880},
puzir={2881,2885},
aver={2886,2908},
av_peshera={2909,2987},
limansk={2988,3027},
hospital={3028,3075},
generators={3076,3152},
warlab={3153,3223},
red_forest={3224,3323},
lost_village={3324,3336},
marsh={3337,3581},
dead_city={3582,3659},
zaton={3660,3699},
jupiter={3700,3747},
pripyat={3748,3770},
jupiter_underground={3771,3829},
labx8={3830,3850},
cs_agroprom_underground={3851,3869},
predbannik={3870,4031},
garbage_old={4032,4337},
yantar_old={4338,4384},
swamp_old={4385,4399}
}

local level_vertexes={
l01_escape=594270,
l02_garbage=382646,
l03_agroprom=437385,
l03u_agr_underground=4810,
l04_darkvalley=385716,
l04u_labx18=7565,
l05_bar=89145,
l06_rostok=67569,
l08_yantar=140884,
l08u_brainlab=7724,
l07_military=418224,
l10_radar=227100,
l11_pripyat=260016,
l12_stancia=472560,
l12u_sarcofag=10620,
l12u_control_monolith=3971,
l12_stancia_2=261400,
l10u_bunker=8723,
atp_for_test22=1043966,
peshera=32109,
puzir=366675,
aver=1765298,
av_peshera=172361,
limansk=60467,
hospital=7818,
generators=625954,
warlab=7747,
red_forest=165896,
lost_village=48854,
marsh=528954,
dead_city=531706,
zaton=1843840,
jupiter=1425786,
pripyat=427661,
jupiter_underground=40830,
labx8=5799,
cs_agroprom_underground=4856,
predbannik=1216832,
garbage_old=1228368,
yantar_old=585301,
swamp_old=1735357
}

function add_arts()
 local sim = alife()
 local obj
 for a = 1, 65534 do
  obj = sim:object(a)
  if not levelsIgnoreArts[level.name()] then
     generate_arts()
  end
 end
end

function generate_arts()
 local lname=level.name()
 if not level_vertexes[lname] then
   return
 end
 local v=level_arts[lname]
 if v then
   local cnt,mxx=0,math_random(v[1],v[2])
   while cnt<mxx do
    if generate_art(lname) then
      cnt=cnt+1
   end
   end
 end
end

function generate_art(lname)
 local gvn,gvx,lvx = game_vertexes[lname][1], game_vertexes[lname][2], level_vertexes[lname]
 local new_lv=math_random(1,lvx)
 local pos = level.vertex_position(new_lv)
 local new_gv = 0
 local min_dist = 100000
 for a = gvn, gvx, 1 do
   g1 = game_graph():vertex(a):game_point()
   if g1:distance_to(pos)<min_dist then
     min_dist = g1:distance_to(pos)
     new_gv = a
   end
 end
 if game_graph():valid_vertex_id(new_gv) then
    return spawn_rand_arts(pos,new_gv,new_lv,lname)
 end
end

function spawn_rand_arts(pos,gv,lv,lname)
 local rnd_max=0
 for k,v in pairs(level_anoms[lname][4]) do
    rnd_max=rnd_max+v
 end
 local rnd=0
 rnd=math_random()*rnd_max
 for k,v in pairs(level_arts[lname][3]) do
   if rnd<=v then
     section=arts_sections[k]
     break
   end
   rnd=rnd-v
 end
 return spawn_art(section,pos,gv,lv)
end

function spawn_art(section,pos,gv,lv)
 local sobj
 sobj=spawn_arts(section,pos,gv,lv)
 if sobj then
   return sobj
 end
end

function spawn_arts(spawn_item, pos, gv,lv)
  if gv==nil then
     gv=db.actor:game_vertex_id()
  end
  if lv==nil then
    lv=db.actor:level_vertex_id()
  end
  return alife():create(spawn_item, pos, lv, gv)
end

 

 

 

Но почему-то ловлю вылет:

FATAL ERROR

[error]Expression : m_available_count
[error]Function : CID_Generator::tfGetID
[error]File : e:\stalker\sources\trunk\xr_3da\xrgame\id_generator.h
[error]Line : 92
[error]Description : Not enough IDs

stack trace:

 

 

Собственно, вопрос: почему? Что сделал не так?

 

 

 

Сталкер - наше всё!

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

 

 

local math_random=math.random
local math_random = function (min, max)
     return math.random(min,max)
end
Добавлено Kirgudu,

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

В оригинале-то math.random кешируется (что имеет смысл в некоторых случаях, см. курилку и прозекторскую), а тут всё наоборот.

  • Не согласен 1
Ссылка на комментарий

Собственно, вопрос: почему? Что сделал не так?

У меня встречный вопрос: зачем? 

 

Зачем вызывать функцию спавна артов (generate_arts()) много (несколько тысяч) раз?

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

 

 

Зачем вызывать функцию спавна артов (generate_arts()) много (несколько тысяч) раз?

Говорю же, пытался вытащить из Солянки. Может, что и неправильно вытащил.

 

 

 

AndrewMor сказал(а)local math_random=math.randomlocal math_random = function (min, max) return math.random(min,max) end

Так в Соляночном скрипте прописано. И скрипт-то исправно работал.


 

 

если судить по логу то похоже что артефактов спавнится дофига.

Похоже, что так. Отсюда и вопрос: почему? И что сделано не так?

Сталкер - наше всё!

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

@mortan,
Ну если человек после первого намека не понял где смотреть, то видимо нужно дать другой намек, а не тот же самый.
Или просто объяснить, раз уж вовсе не понятно.

@AndrewMor,
Смотри.
В actor_binder:net_spawn, при спавне ГГ вызывается функция add_arts() из кода, что ты показал.
Посмотри на эту функцию. Что она делает. Построчно.
local sim = alife()
Кэшируется alife - видимо автор хочет активно использовать доступ к симуляции.
local obj
Понятно, сюда будет что-то записываться из кода этой функции ниже.
for a = 1, 65534 do
Так. Будут перебираться все объекты в игре не считая ГГ (зачем - пока не понятно. будем смотреть).
obj = sim:object(a)
65534 раза получаем объект по ID. Ну допустим получили. И что-же с ним(и) будем делать дальше?
if not levelsIgnoreArts[level.name()] then
65534 раза проверяем что локация, на которой в данное время находится ГГ не является подземной (полагаю).
generate_arts()
И если локация не подземная (упс, не повезло), то 65534 раза спавним артефакты.

Теперь, когда функция разобрана, вернемся в начало.
local sim = alife()
Где используется переменная sim в этой функции? Нигде. Эту строку можно удалить.
local obj
и
obj = sim:object(a)
А где используется переменная obj? Нигде. Значит тоже удалить.

И только участок кода с проверкой
if not levelsIgnoreArts[level.name()] then
является правильным. Только вот совершенно незачем повторят это 65534 раза.
В итоге функция стала такой :

function add_arts()
    if not levelsIgnoreArts[level.name()] then
        generate_arts()
    end
end

И это касается только данной функции. На самом деле тот код (мягко говоря) как-бы не очень ...
Пусть будет просто "не очень".

Изменено пользователем Nazgool
  • Спасибо 1
  • Нравится 1
  • Согласен 1
Ссылка на комментарий

Nazgool, спасибо за подробный комментарий. Тогда, либо я неправильно код вытащил, либо что-то не так, ибо в Солянке-то все пашет.

Сталкер - наше всё!

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

@AndrewMor,

Пожалуйста. Вот только хоть убей, но поверить не смогу, что рассмотренная функция может работать правильно.
Видишь ли - из цикла for a = 1, 65534 do нет преждевременного выхода. Т.е. ни break-а, ни return-а.
И поэтому, ну такие уж законы lua, он отработает все 65534 раза.

И дай Бог, чтобы ты появился где-то в подземелье.
Иначе, как я уже говорил, 65534 раза будут спавнится арты. Же-е-е-есть.

 

Всго ID-шек в игре 65535. До этого было заспавнено N ID-шек (мобы, лут и т.д.) + 65534 твоих артов. Сколько будет?

Точно больше максимально возможного 65535.

 

Да и вообще. К тому коду очень много вопросов.

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

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

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

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

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

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

Войти

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

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

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